From 183fd3fb8a8d59fe4b720cb7a7d3b6e0d1bcf734 Mon Sep 17 00:00:00 2001 From: Anon Date: Fri, 9 Oct 2026 00:42:54 +0200 Subject: [PATCH 01/12] feat: replace legacy client with DMCBK-based MCC 2.0 Move the console and TUI host to src and consume DMCBK and UMPK through NuGet. Replace the legacy client, GUI, debug tools and retired workflows with the MCC 2.0 solution, feature-grouped source and host tests. Add schema-2 plugin and marketplace frontends, Beacon .bcn tooling, localized presentation, diagnostics and Crowdin configuration. Rewrite the user and developer documentation, including architecture diagrams, command examples and chaptered Beacon and plugin tutorials. Update Unix installers, Windows development helpers, Docker Compose, build/test workflows and repository guidance. Use MIT for MCC code. Validation: 910 host tests pass; native Windows helper validation passes; documentation and Docker builds pass. Live vanilla 26.3 checks pass for chat, terrain, entities, inventory, books, movement, reconnect, source plugins and Beacon, with all eight built-in smoke checks passing. --- .agents/skills | 1 + .codex/hooks.json | 16 - .codex/hooks/pre_tool_use_mcc_build_guard.py | 67 - .codex/skill | 1 + .dockerignore | 16 + .github/workflows/build-and-release.yml | 246 - .github/workflows/deploy-doc-only.yml | 79 - .github/workflows/docs.yml | 31 + .github/workflows/mcc.yml | 50 + .github/workflows/translations.yml | 61 + .../upload-translation-source-only.yml | 33 - .gitignore | 13 + .skills/asd-ste100/LICENSE | 21 + .skills/asd-ste100/README.md | 92 + .skills/asd-ste100/SKILL.md | 140 + .skills/asd-ste100/examples/before-after.md | 92 + .../asd-ste100/references/writing-rules.md | 59 + .skills/asd-ste100/scripts/ste-lint.py | 203 + .skills/csharp-best-practices/LICENSE.md | 9 + .skills/csharp-best-practices/SKILL.md | 14 +- .skills/csharp-solid-principles/LICENSE.md | 21 + .skills/csharp-solid-principles/README.md | 13 + .skills/csharp-solid-principles/SKILL.md | 226 + .../csharp-solid-principles/evals/evals.json | 66 + .../references/examples.md | 592 ++ .../references/review-playbook.md | 175 + .../references/sources.md | 146 + .../LICENSE.md | 9 + .../SKILL.md | 10 +- .../references/measurement-guide.md | 2 +- .skills/dotnet-security-review/LICENSE.md | 9 + .skills/dotnet-security-review/SKILL.md | 10 +- .skills/general-prompt-engineer/SKILL.md | 388 - .skills/humanizer/SKILL.md | 198 +- .skills/mcc-chatbot-authoring/SKILL.md | 107 - .../assets/builtin-chatbot-template.cs | 57 - .../assets/script-chatbot-template.cs | 37 - .../references/authoring-reference.md | 492 - .../references/pattern-cookbook.md | 330 - .skills/mcc-dev-workflow/SKILL.md | 362 - .skills/mcc-dev-workflow/evals/evals.json | 41 - .skills/mcc-integration-testing/SKILL.md | 323 - .../mcc-integration-testing/evals/evals.json | 41 - .../references/command-matrix.md | 91 - .../references/online-mode.md | 48 - .../mcc-integration-testing/scripts/common.sh | 110 - .../scripts/ensure_offline_server.sh | 59 - .../scripts/get_server_port.sh | 35 - .../scripts/preflight_test_env.sh | 48 - .../scripts/prepare_offline_mcc_config.sh | 106 - .../scripts/reset_shared_test_state.sh | 44 - .../scripts/run_achievements_matrix.sh | 168 - .../scripts/run_achievements_test.sh | 399 - .../scripts/run_full_spectrum_test.sh | 336 - .../run_parallel_session_smoke_test.sh | 199 - .../scripts/summarize_achievements_matrix.sh | 57 - .../scripts/summarize_test_run.sh | 25 - .skills/mcc-version-adaptation/SKILL.md | 351 - .skills/mermaid-diagrams/SKILL.md | 211 - .skills/skill-creator/LICENSE.txt | 202 - .skills/skill-creator/SKILL.md | 479 - .skills/skill-creator/agents/analyzer.md | 274 - .skills/skill-creator/agents/comparator.md | 202 - .skills/skill-creator/agents/grader.md | 223 - .skills/skill-creator/assets/eval_review.html | 146 - .../eval-viewer/generate_review.py | 471 - .skills/skill-creator/eval-viewer/viewer.html | 1325 --- .skills/skill-creator/references/schemas.md | 430 - .skills/skill-creator/scripts/__init__.py | 0 .../scripts/aggregate_benchmark.py | 401 - .../skill-creator/scripts/generate_report.py | 326 - .../scripts/improve_description.py | 248 - .../skill-creator/scripts/package_skill.py | 136 - .../skill-creator/scripts/quick_validate.py | 103 - .skills/skill-creator/scripts/run_eval.py | 310 - .skills/skill-creator/scripts/run_loop.py | 332 - .skills/skill-creator/scripts/utils.py | 47 - .skills/writing-skills/SKILL.md | 97 - .skills/writing-skills/examples.md | 236 - .skills/writing-skills/gotchas.md | 175 - .../writing-skills/persuasion-principles.md | 86 - .../references/anti-rationalization/README.md | 85 - .../writing-skills/references/cso/README.md | 90 - .../references/standards/README.md | 87 - .../references/standards/metadata-standard.md | 39 - .../references/templates/discipline.md | 54 - .../references/templates/pattern.md | 48 - .../references/templates/reference.md | 35 - .../references/templates/technique.md | 59 - .../references/templates/tier-3-platform.md | 17 - .../references/testing/README.md | 66 - .../references/tier-1-simple/README.md | 30 - .../references/tier-2-expanded/README.md | 52 - .../references/tier-3-platform/README.md | 51 - .../testing-skills-with-subagents.md | 85 - AGENTS.md | 212 +- CLAUDE.md | 1 - .../MccMcpSampleClient.csproj | 14 - DebugTools/MccMcpSampleClient/Program.cs | 773 -- .../MccMcpStdioHarness.csproj | 18 - DebugTools/MccMcpStdioHarness/Program.cs | 984 -- .../Api/MccPlaygroundEndpoints.cs | 36 - .../Contracts/MccContracts.cs | 94 - .../Harness/MccAgentRunService.cs | 852 -- .../Harness/MccContextCompressor.cs | 21 - .../Harness/MccFinalizer.cs | 221 - .../Harness/MccGuidanceSource.cs | 63 - .../Harness/MccPromptComposer.cs | 86 - .../Harness/MccRunState.cs | 103 - .../Harness/MccToolPolicy.cs | 133 - .../Harness/MccWebHarnessOptions.cs | 58 - .../Mcp/MccMcpSessionFactory.cs | 200 - .../OpenRouter/OpenRouterChatClient.cs | 120 - .../MccMcpWebPlayground.csproj | 14 - DebugTools/MccMcpWebPlayground/Program.cs | 40 - .../Properties/launchSettings.json | 23 - .../appsettings.Development.json | 14 - .../MccMcpWebPlayground/appsettings.json | 24 - DebugTools/MccMcpWebPlayground/wwwroot/app.js | 310 - .../MccMcpWebPlayground/wwwroot/index.html | 79 - .../MccMcpWebPlayground/wwwroot/site.css | 383 - DebugTools/MinecraftClientProxy.sln | 20 - .../MinecraftClientProxy/Compression/CRC32.cs | 814 -- .../Compression/Deflate.cs | 1879 ---- .../Compression/GZipStream.cs | 1033 -- .../Compression/InfTree.cs | 436 - .../Compression/Inflate.cs | 1795 ---- .../MinecraftClientProxy/Compression/Tree.cs | 423 - .../MinecraftClientProxy/Compression/Zlib.cs | 546 -- .../Compression/ZlibBaseStream.cs | 627 -- .../Compression/ZlibCodec.cs | 717 -- .../Compression/ZlibConstants.cs | 127 - .../Compression/ZlibStream.cs | 725 -- .../MinecraftClientProxy.csproj | 70 - .../MinecraftClientProxy/PacketProxy.cs | 309 - DebugTools/MinecraftClientProxy/Program.cs | 29 - .../Properties/AssemblyInfo.cs | 36 - DebugTools/MinecraftClientProxy/ZlibUtils.cs | 34 - DebugTools/README.txt | 6 - Directory.Build.props | 1 + Docker/Dockerfile | 20 - Docker/docker-compose.yml | 9 - Docker/start-latest.sh | 29 - Dockerfile | 15 + LICENSE.md | 95 +- Mcc.slnx | 9 + .../AutoRelogRetryPolicyTests.cs | 176 - .../BlockStatePropertiesTests.cs | 108 - MinecraftClient.Tests/CSharpRunnerTests.cs | 14 - MinecraftClient.Tests/ChatTypeHolderTests.cs | 159 - .../McClientConnectionFailureTests.cs | 122 - .../MinecraftClient.Tests.csproj | 22 - .../RestartCoordinatorTests.cs | 302 - MinecraftClient.Tests/SocketWrapperTests.cs | 34 - MinecraftClient.Tests/Usings.cs | 1 - MinecraftClient.sln | 101 - MinecraftClient/Achievement.cs | 36 - MinecraftClient/AutoTimeout.cs | 43 - MinecraftClient/ChatBots/Alerts.cs | 172 - MinecraftClient/ChatBots/AntiAFK.cs | 190 - MinecraftClient/ChatBots/AutoAttack.cs | 345 - MinecraftClient/ChatBots/AutoCraft.cs | 722 -- MinecraftClient/ChatBots/AutoDig.cs | 576 -- MinecraftClient/ChatBots/AutoDrop.cs | 244 - MinecraftClient/ChatBots/AutoEat.cs | 105 - MinecraftClient/ChatBots/AutoFishing.cs | 767 -- MinecraftClient/ChatBots/AutoRelog.cs | 203 - .../ChatBots/AutoRelogRetryPolicy.cs | 108 - MinecraftClient/ChatBots/AutoRespond.cs | 321 - MinecraftClient/ChatBots/ChatLog.cs | 152 - MinecraftClient/ChatBots/DiscordBridge.cs | 529 -- MinecraftClient/ChatBots/DiscordRpc.cs | 727 -- MinecraftClient/ChatBots/Farmer.cs | 911 -- MinecraftClient/ChatBots/FileInputBot.cs | 105 - MinecraftClient/ChatBots/FollowPlayer.cs | 241 - MinecraftClient/ChatBots/HangmanGame.cs | 200 - MinecraftClient/ChatBots/ItemsCollector.cs | 217 - MinecraftClient/ChatBots/Mailer.cs | 471 - MinecraftClient/ChatBots/Map.cs | 540 -- MinecraftClient/ChatBots/McpServer.cs | 272 - MinecraftClient/ChatBots/PlayerListLogger.cs | 58 - MinecraftClient/ChatBots/RemoteControl.cs | 49 - MinecraftClient/ChatBots/ReplayCapture.cs | 145 - MinecraftClient/ChatBots/Script.cs | 283 - MinecraftClient/ChatBots/ScriptScheduler.cs | 320 - MinecraftClient/ChatBots/TelegramBridge.cs | 400 - MinecraftClient/ChatBots/TestBot.cs | 27 - MinecraftClient/ClassicConsoleBackend.cs | 235 - MinecraftClient/ColorHelper.cs | 207 - MinecraftClient/Command.cs | 147 - .../ArgumentType/AccountNickArgumentType.cs | 25 - .../AutoCraftRecipeNameArgumentType.cs | 25 - .../ArgumentType/BotNameArgumentType.cs | 29 - .../ArgumentType/EntityTypeArgumentType.cs | 50 - .../FarmerCropTypeArgumentType.cs | 31 - .../ArgumentType/HotbarSlotArgumentType.cs | 43 - .../InventoryActionArgumentType.cs | 49 - .../ArgumentType/InventoryIdArgumentType.cs | 40 - .../ArgumentType/InventorySlotArgumentType.cs | 55 - .../ArgumentType/ItemTypeArgumentType.cs | 52 - .../ArgumentType/LocationArgumentType.cs | 99 - .../ArgumentType/MapBotMapIdArgumentType.cs | 39 - .../ArgumentType/PlayerNameArgumentType.cs | 36 - .../ArgumentType/ScriptNameArgumentType.cs | 54 - .../ArgumentType/ServerNickArgumentType.cs | 25 - .../ArgumentType/TupleArgumentType.cs | 18 - MinecraftClient/CommandHandler/CmdResult.cs | 96 - .../CommandHandler/MccArguments.cs | 119 - .../Patch/CommandDispatcherExtensions.cs | 43 - .../Patch/CommandNodeExtensions.cs | 28 - .../CommandHandler/SuggestionTooltip.cs | 9 - .../Commands/AchievementCommand.cs | 106 - MinecraftClient/Commands/Animation.cs | 55 - MinecraftClient/Commands/Bed.cs | 181 - MinecraftClient/Commands/BlockInfo.cs | 96 - MinecraftClient/Commands/Book.cs | 300 - MinecraftClient/Commands/Bots.cs | 97 - MinecraftClient/Commands/ChangeSlot.cs | 53 - MinecraftClient/Commands/Chunk.cs | 289 - MinecraftClient/Commands/ClearConsole.cs | 45 - MinecraftClient/Commands/Connect.cs | 99 - MinecraftClient/Commands/ConsoleChat.cs | 49 - MinecraftClient/Commands/Debug.cs | 104 - MinecraftClient/Commands/Dialog.cs | 108 - MinecraftClient/Commands/Dig.cs | 88 - MinecraftClient/Commands/DropItem.cs | 66 - MinecraftClient/Commands/EffectsCommand.cs | 67 - MinecraftClient/Commands/Enchant.cs | 109 - MinecraftClient/Commands/Entitycmd.cs | 330 - MinecraftClient/Commands/ExecIf.cs | 75 - MinecraftClient/Commands/ExecMulti.cs | 60 - MinecraftClient/Commands/Exit.cs | 58 - MinecraftClient/Commands/Health.cs | 45 - MinecraftClient/Commands/Help.cs | 34 - MinecraftClient/Commands/Inventory.cs | 504 - MinecraftClient/Commands/List.cs | 47 - MinecraftClient/Commands/Log.cs | 44 - MinecraftClient/Commands/Look.cs | 122 - MinecraftClient/Commands/Minimap.cs | 284 - MinecraftClient/Commands/Move.cs | 202 - MinecraftClient/Commands/NameItem.cs | 63 - MinecraftClient/Commands/RecipeBook.cs | 98 - MinecraftClient/Commands/Reco.cs | 91 - MinecraftClient/Commands/Reload.cs | 52 - MinecraftClient/Commands/Respawn.cs | 46 - MinecraftClient/Commands/Script.cs | 48 - MinecraftClient/Commands/Send.cs | 44 - MinecraftClient/Commands/Set.cs | 60 - MinecraftClient/Commands/SetRnd.cs | 73 - MinecraftClient/Commands/Sneak.cs | 59 - MinecraftClient/Commands/Tab.cs | 50 - MinecraftClient/Commands/Teams.cs | 77 - MinecraftClient/Commands/Tps.cs | 54 - MinecraftClient/Commands/Tryout.cs | 63 - MinecraftClient/Commands/Upgrade.cs | 78 - MinecraftClient/Commands/UseItem.cs | 112 - MinecraftClient/Commands/Useblock.cs | 80 - MinecraftClient/ConnectionAttemptLifecycle.cs | 107 - MinecraftClient/ConsoleIO.cs | 489 - MinecraftClient/ConsoleInputRouter.cs | 187 - MinecraftClient/Crypto/AesCfb8Stream.cs | 199 - MinecraftClient/Crypto/CryptoHandler.cs | 198 - MinecraftClient/Crypto/FastAes.cs | 97 - MinecraftClient/Dialogs/DialogFormatter.cs | 108 - MinecraftClient/Dialogs/DialogManager.cs | 445 - MinecraftClient/Dialogs/DialogModels.cs | 110 - MinecraftClient/ExtensionMethods.cs | 12 - MinecraftClient/FileMonitor.cs | 161 - MinecraftClient/IConsoleBackend.cs | 73 - MinecraftClient/INIFile.cs | 134 - MinecraftClient/Inventory/BookContent.cs | 183 - MinecraftClient/Inventory/BookPage.cs | 10 - MinecraftClient/Inventory/Container.cs | 271 - .../Inventory/ContainerExtensions.cs | 58 - MinecraftClient/Inventory/ContainerType.cs | 76 - .../Inventory/ContainerTypeExtensions.cs | 89 - MinecraftClient/Inventory/EffectData.cs | 194 - MinecraftClient/Inventory/Effects.cs | 41 - MinecraftClient/Inventory/Enchantment.cs | 3 - MinecraftClient/Inventory/EnchantmentData.cs | 22 - .../Inventory/EnchantmentMapping.cs | 420 - .../Inventory/EnchantmentPropertyInfo.cs | 23 - MinecraftClient/Inventory/Enchantments.cs | 50 - MinecraftClient/Inventory/Hand.cs | 11 - MinecraftClient/Inventory/Item.cs | 275 - MinecraftClient/Inventory/ItemMovingHelper.cs | 156 - .../Inventory/ItemPalettes/ItemPalette.cs | 40 - .../Inventory/ItemPalettes/ItemPalette110.cs | 613 -- .../Inventory/ItemPalettes/ItemPalette111.cs | 646 -- .../Inventory/ItemPalettes/ItemPalette112.cs | 669 -- .../Inventory/ItemPalettes/ItemPalette113.cs | 803 -- .../Inventory/ItemPalettes/ItemPalette1132.cs | 808 -- .../Inventory/ItemPalettes/ItemPalette114.cs | 895 -- .../Inventory/ItemPalettes/ItemPalette115.cs | 906 -- .../Inventory/ItemPalettes/ItemPalette1161.cs | 997 -- .../Inventory/ItemPalettes/ItemPalette1162.cs | 998 -- .../Inventory/ItemPalettes/ItemPalette117.cs | 1118 --- .../Inventory/ItemPalettes/ItemPalette118.cs | 1119 --- .../Inventory/ItemPalettes/ItemPalette119.cs | 1170 --- .../Inventory/ItemPalettes/ItemPalette1193.cs | 1204 --- .../Inventory/ItemPalettes/ItemPalette1194.cs | 1246 --- .../Inventory/ItemPalettes/ItemPalette120.cs | 1273 --- .../Inventory/ItemPalettes/ItemPalette1204.cs | 1330 --- .../Inventory/ItemPalettes/ItemPalette1206.cs | 1348 --- .../Inventory/ItemPalettes/ItemPalette121.cs | 1351 --- .../ItemPalettes/ItemPalette12111.cs | 1523 --- .../Inventory/ItemPalettes/ItemPalette1212.cs | 1393 --- .../Inventory/ItemPalettes/ItemPalette1214.cs | 1403 --- .../Inventory/ItemPalettes/ItemPalette1215.cs | 1414 --- .../Inventory/ItemPalettes/ItemPalette1216.cs | 1433 --- .../Inventory/ItemPalettes/ItemPalette1217.cs | 1434 --- .../Inventory/ItemPalettes/ItemPalette1219.cs | 1506 --- .../Inventory/ItemPalettes/ItemPalette18.cs | 640 -- .../Inventory/ItemPalettes/ItemPalette19.cs | 607 -- .../Inventory/ItemPalettes/ItemPalette261.cs | 1524 --- .../Inventory/ItemPalettes/ItemPalette262.cs | 1555 --- .../ItemPalettes/ItemPaletteGenerator.cs | 24 - MinecraftClient/Inventory/ItemRarity.cs | 9 - MinecraftClient/Inventory/ItemType.cs | 1558 ---- .../Inventory/ItemTypeExtensions.cs | 325 - .../Inventory/SuspiciousStewEffect.cs | 3 - .../Inventory/TrimAssetOverride.cs | 3 - MinecraftClient/Inventory/VillagerInfo.cs | 13 - MinecraftClient/Inventory/VillagerTrade.cs | 17 - MinecraftClient/Inventory/WindowActionType.cs | 88 - MinecraftClient/Json.cs | 92 - MinecraftClient/LegacyAchievementCatalog.cs | 53 - MinecraftClient/Logger/FileLogLogger.cs | 125 - MinecraftClient/Logger/FilteredLogger.cs | 101 - MinecraftClient/Logger/ILogger.cs | 35 - MinecraftClient/Logger/LoggerBase.cs | 106 - MinecraftClient/Mapping/Block.cs | 153 - MinecraftClient/Mapping/BlockExtension.cs | 444 - MinecraftClient/Mapping/BlockHardness.cs | 1582 ---- .../Mapping/BlockPalettes/BlockPalette.cs | 79 - .../Mapping/BlockPalettes/BlockPalette120.cs | 5148 ---------- .../BlockPalettes/BlockPaletteGenerator.cs | 159 - .../BlockPalettes/BlockStateDefinition.cs | 71 - .../Mapping/BlockPalettes/Palette112.cs | 202 - .../Mapping/BlockPalettes/Palette113.cs | 2779 ------ .../Mapping/BlockPalettes/Palette114.cs | 3334 ------- .../Mapping/BlockPalettes/Palette115.cs | 3351 ------- .../Mapping/BlockPalettes/Palette116.cs | 3756 -------- .../Mapping/BlockPalettes/Palette117.cs | 4437 --------- .../Mapping/BlockPalettes/Palette119.cs | 4660 --------- .../Mapping/BlockPalettes/Palette1193.cs | 4947 ---------- .../Mapping/BlockPalettes/Palette1194.cs | 5113 ---------- .../Mapping/BlockPalettes/Palette1204.cs | 5538 ----------- .../Mapping/BlockPalettes/Palette1206.cs | 5553 ----------- .../Mapping/BlockPalettes/Palette1212.cs | 5715 ------------ .../Mapping/BlockPalettes/Palette1214.cs | 5762 ------------ .../Mapping/BlockPalettes/Palette1215.cs | 5788 ------------ .../Mapping/BlockPalettes/Palette1216.cs | 5796 ------------ .../Mapping/BlockPalettes/Palette1219.cs | 6676 ------------- .../Mapping/BlockPalettes/Palette261.cs | 6680 ------------- .../Mapping/BlockPalettes/Palette262.cs | 6872 -------------- MinecraftClient/Mapping/Chunk.cs | 77 - MinecraftClient/Mapping/ChunkColumn.cs | 63 - MinecraftClient/Mapping/CombatEventType.cs | 9 - MinecraftClient/Mapping/CommandBlockFlags.cs | 13 - MinecraftClient/Mapping/CommandBlockMode.cs | 13 - MinecraftClient/Mapping/Dimension.cs | 192 - MinecraftClient/Mapping/Direction.cs | 22 - .../Mapping/DirectionExtensions.cs | 42 - MinecraftClient/Mapping/Entity.cs | 179 - MinecraftClient/Mapping/EntityMetaDataType.cs | 144 - .../Mapping/EntityMetadataPalette.cs | 34 - .../EntityMetadataPalette1122.cs | 30 - .../EntityMetadataPalette1191.cs | 41 - .../EntityMetadataPalette1193.cs | 42 - .../EntityMetadataPalette1194.cs | 46 - .../EntityMetadataPalette1206.cs | 51 - .../EntityMetadataPalette12111.cs | 54 - .../EntityMetadataPalette1215.cs | 50 - .../EntityMetadataPalette1219.cs | 52 - .../EntityMetadataPalette18.cs | 24 - .../EntityMetadataPalette261.cs | 58 - .../Mapping/EntityPalettes/EntityPalette.cs | 48 - .../EntityPalettes/EntityPalette11194.cs | 142 - .../EntityPalettes/EntityPalette112.cs | 141 - .../EntityPalettes/EntityPalette113.cs | 155 - .../EntityPalettes/EntityPalette114.cs | 124 - .../EntityPalettes/EntityPalette115.cs | 125 - .../EntityPalettes/EntityPalette1161.cs | 125 - .../EntityPalettes/EntityPalette1162.cs | 126 - .../EntityPalettes/EntityPalette117.cs | 131 - .../EntityPalettes/EntityPalette119.cs | 136 - .../EntityPalettes/EntityPalette1193.cs | 137 - .../EntityPalettes/EntityPalette120.cs | 142 - .../EntityPalettes/EntityPalette1204.cs | 144 - .../EntityPalettes/EntityPalette1206.cs | 148 - .../EntityPalettes/EntityPalette12111.cs | 175 - .../EntityPalettes/EntityPalette1212.cs | 168 - .../EntityPalettes/EntityPalette1214.cs | 168 - .../EntityPalettes/EntityPalette1215.cs | 168 - .../EntityPalettes/EntityPalette1216.cs | 169 - .../EntityPalettes/EntityPalette1219.cs | 171 - .../Mapping/EntityPalettes/EntityPalette18.cs | 114 - .../EntityPalettes/EntityPalette261.cs | 175 - .../EntityPalettes/EntityPalette262.cs | 176 - .../EntityPalettes/EntityPaletteGenerator.cs | 23 - MinecraftClient/Mapping/EntityPose.cs | 13 - MinecraftClient/Mapping/EntityType.cs | 180 - .../Mapping/EntityTypeExtensions.cs | 124 - MinecraftClient/Mapping/InteractType.cs | 9 - MinecraftClient/Mapping/Location.cs | 440 - MinecraftClient/Mapping/MapIcon.cs | 11 - MinecraftClient/Mapping/MapIconType.cs | 33 - MinecraftClient/Mapping/Material.cs | 1215 --- MinecraftClient/Mapping/Material2Tool.cs | 782 -- MinecraftClient/Mapping/MaterialExtensions.cs | 900 -- MinecraftClient/Mapping/MessageFilterType.cs | 9 - MinecraftClient/Mapping/MiningCalculator.cs | 587 -- MinecraftClient/Mapping/Movement.cs | 716 -- MinecraftClient/Mapping/PlayerTeam.cs | 49 - MinecraftClient/Mapping/RaycastHelper.cs | 129 - MinecraftClient/Mapping/VillagerInfo.cs | 13 - MinecraftClient/Mapping/World.cs | 511 - MinecraftClient/McClient.cs | 5280 ----------- MinecraftClient/Mcp/IMccMcpCapabilities.cs | 66 - MinecraftClient/Mcp/MccEmbeddedMcpHost.cs | 135 - MinecraftClient/Mcp/MccMcpCapabilities.cs | 3269 ------- MinecraftClient/Mcp/MccMcpChatHistory.cs | 51 - MinecraftClient/Mcp/MccMcpConfig.cs | 46 - MinecraftClient/Mcp/MccMcpGuidanceProvider.cs | 263 - MinecraftClient/Mcp/MccMcpPromptSet.cs | 20 - MinecraftClient/Mcp/MccMcpRecentEventStore.cs | 44 - MinecraftClient/Mcp/MccMcpResult.cs | 33 - .../Mcp/MccMcpRuntimeStateStore.cs | 47 - MinecraftClient/Mcp/MccMcpToolSet.cs | 401 - .../Mcp/Prompts/MccMcpOperatorPrompt.md | 139 - MinecraftClient/MinecraftClient.csproj | 112 - MinecraftClient/Physics/Aabb.cs | 195 - MinecraftClient/Physics/BlockShapeData.json | 1 - MinecraftClient/Physics/BlockShapes.cs | 243 - MinecraftClient/Physics/CollisionDetector.cs | 204 - MinecraftClient/Physics/MovementInput.cs | 55 - MinecraftClient/Physics/PhysicsConsts.cs | 87 - MinecraftClient/Physics/PlayerPhysics.cs | 579 -- MinecraftClient/Physics/Vec3d.cs | 102 - MinecraftClient/Program.cs | 1406 --- MinecraftClient/Properties/AssemblyInfo.cs | 44 - MinecraftClient/Protocol/DataTypeGenerator.cs | 144 - .../Protocol/Dialogs/DialogNbtParser.cs | 475 - MinecraftClient/Protocol/EntityActionType.cs | 15 - MinecraftClient/Protocol/GuidExtensions.cs | 76 - .../Handlers/ConfigurationPacketTypesIn.cs | 27 - .../Handlers/ConfigurationPacketTypesOut.cs | 17 - .../Protocol/Handlers/DataTypes.cs | 2109 ----- .../Handlers/Forge/FMLHandshakeClientState.cs | 18 - .../Forge/FMLHandshakeDiscriminator.cs | 16 - .../Protocol/Handlers/Forge/FMLVersion.cs | 13 - .../Protocol/Handlers/Forge/ForgeInfo.cs | 255 - .../Handlers/Packet/s2c/DeclareCommands.cs | 785 -- .../PacketPalettes/PacketPalette110.cs | 126 - .../PacketPalettes/PacketPalette112.cs | 132 - .../PacketPalettes/PacketPalette1122.cs | 133 - .../PacketPalettes/PacketPalette113.cs | 149 - .../PacketPalettes/PacketPalette114.cs | 159 - .../PacketPalettes/PacketPalette115.cs | 159 - .../PacketPalettes/PacketPalette116.cs | 159 - .../PacketPalettes/PacketPalette1162.cs | 160 - .../PacketPalettes/PacketPalette117.cs | 171 - .../PacketPalettes/PacketPalette118.cs | 172 - .../PacketPalettes/PacketPalette119.cs | 175 - .../PacketPalettes/PacketPalette1192.cs | 179 - .../PacketPalettes/PacketPalette1193.cs | 178 - .../PacketPalettes/PacketPalette1194.cs | 183 - .../PacketPalettes/PacketPalette1202.cs | 210 - .../PacketPalettes/PacketPalette1204.cs | 215 - .../PacketPalettes/PacketPalette1206.cs | 230 - .../PacketPalettes/PacketPalette121.cs | 234 - .../PacketPalettes/PacketPalette1212.cs | 243 - .../PacketPalettes/PacketPalette1214.cs | 245 - .../PacketPalettes/PacketPalette1215.cs | 247 - .../PacketPalettes/PacketPalette1216.cs | 255 - .../PacketPalettes/PacketPalette1219.cs | 262 - .../PacketPalettes/PacketPalette17.cs | 121 - .../PacketPalettes/PacketPalette18.cs | 125 - .../PacketPalettes/PacketPalette19.cs | 127 - .../PacketPalettes/PacketPalette261.cs | 266 - .../PacketPalettes/PacketPaletteHelper.cs | 164 - .../PacketPalettes/PacketTypePalette.cs | 212 - .../Protocol/Handlers/PacketType18Handler.cs | 86 - .../Protocol/Handlers/PacketTypesIn.cs | 175 - .../Protocol/Handlers/PacketTypesOut.cs | 84 - .../Protocol/Handlers/Protocol16.cs | 970 -- .../Protocol/Handlers/Protocol18.cs | 6787 -------------- .../Protocol/Handlers/Protocol18Forge.cs | 573 -- .../Protocol/Handlers/Protocol18Terrain.cs | 499 - .../Protocol/Handlers/SocketWrapper.cs | 124 - .../1_20_6/AttributeModifiersComponent.cs | 40 - .../1_20_6/BannerPatternsComponent.cs | 68 - .../Components/1_20_6/BaseColorComponent.cs | 23 - .../Components/1_20_6/BeesComponent.cs | 46 - .../Components/1_20_6/BlockStateComponent.cs | 31 - .../1_20_6/BundleContentsComponent.cs | 35 - .../Components/1_20_6/CanBreakComponent.cs | 41 - .../Components/1_20_6/CanPlaceOnComponent.cs | 41 - .../1_20_6/ChargedProjectilesComponent.cs | 35 - .../Components/1_20_6/ContainerComponent.cs | 29 - .../1_20_6/ContainerLootComponent.cs | 23 - .../1_20_6/CreativeSlotLockComponent.cs | 8 - .../Components/1_20_6/CustomDataComponent.cs | 23 - .../1_20_6/CustomModelDataComponent.cs | 52 - .../1_20_6/CustomModelDataComponent1206.cs | 21 - .../Components/1_20_6/CustomNameComponent.cs | 26 - .../Components/1_20_6/DamageComponent.cs | 23 - .../1_20_6/DebugStickStateComponent.cs | 23 - .../Components/1_20_6/DyeColorComponent.cs | 26 - .../EnchantmentGlintOverrideComponent.cs | 23 - .../1_20_6/EnchantmentsComponent.cs | 41 - .../Components/1_20_6/EntityDataComponent.cs | 31 - .../1_20_6/FireResistantComponent.cs | 7 - .../1_20_6/FireworkExplosionComponent.cs | 25 - .../Components/1_20_6/FireworksComponent.cs | 49 - .../Components/1_20_6/FoodComponent.cs | 45 - .../1_20_6/HideAdditionalTooltipComponent.cs | 7 - .../Components/1_20_6/HideTooltipComponent.cs | 7 - .../Components/1_20_6/InstrumentComponent.cs | 68 - .../1_20_6/IntangibleProjectileComponent.cs | 10 - .../Components/1_20_6/ItemNameComponent.cs | 26 - .../Components/1_20_6/LockComponent.cs | 23 - .../1_20_6/LodestoneTrackerComponent.cs | 43 - .../Components/1_20_6/LoreComponent.cs | 39 - .../Components/1_20_6/MapColorComponent.cs | 23 - .../1_20_6/MapDecorationsComponent.cs | 23 - .../Components/1_20_6/MapIdComponent.cs | 23 - .../1_20_6/MapPostProcessingComponent.cs | 23 - .../Components/1_20_6/MaxDamageComponent.cs | 23 - .../1_20_6/MaxStackSizeComponent.cs | 23 - .../1_20_6/NoteBlockSoundComponent.cs | 23 - .../1_20_6/OminousBottleAmplifierComponent.cs | 23 - .../1_20_6/PotDecorationsComponent.cs | 27 - .../1_20_6/PotionContentsComponent.cs | 50 - .../Components/1_20_6/ProfileComponent.cs | 218 - .../Components/1_20_6/RarityComponent.cs | 24 - .../Components/1_20_6/RecipesComponent.cs | 23 - .../Components/1_20_6/RepairCostComponent.cs | 23 - .../1_20_6/StoredEnchantmentsComponent.cs | 9 - .../1_20_6/SuspiciousStewEffectsComponent.cs | 39 - .../Components/1_20_6/ToolComponent.cs | 44 - .../Components/1_20_6/TrimComponent.cs | 111 - .../Components/1_20_6/UnbreakableComponent.cs | 23 - .../1_20_6/WritableBookContentComponent.cs | 52 - .../1_20_6/WrittenBookContentComponent.cs | 101 - .../1_21/JukeBoxPlayableComponent121.cs | 81 - .../1_21_11/AttackRangeComponent.cs | 38 - .../1_21_11/KineticWeaponComponent.cs | 72 - .../1_21_11/PiercingWeaponComponent.cs | 33 - .../1_21_11/RegistryEitherHolderComponent.cs | 38 - .../1_21_11/SwingAnimationComponent.cs | 26 - .../Components/1_21_11/UseEffectsComponent.cs | 29 - .../Components/1_21_2/ConsumableComponent.cs | 129 - .../1_21_2/DamageResistantComponent.cs | 23 - .../1_21_2/DeathProtectionComponent.cs | 106 - .../Components/1_21_2/EnchantableComponent.cs | 23 - .../Components/1_21_2/EquippableComponent.cs | 94 - .../Components/1_21_2/FoodComponent1212.cs | 29 - .../Components/1_21_2/GliderComponent.cs | 8 - .../Components/1_21_2/ItemModelComponent.cs | 23 - .../1_21_2/PotionContentsComponent1212.cs | 61 - .../Components/1_21_2/RepairableComponent.cs | 44 - .../1_21_2/TooltipStyleComponent.cs | 23 - .../Components/1_21_2/UseCooldownComponent.cs | 31 - .../1_21_2/UseRemainderComponent.cs | 24 - .../AdventureModePredicateComponents1215.cs | 136 - .../1_21_5/AttributeModifiersComponent1215.cs | 37 - .../1_21_5/BlocksAttacksComponent.cs | 81 - .../1_21_5/DyeColorComponent1215.cs | 25 - .../1_21_5/EitherHolderComponent.cs | 51 - .../1_21_5/EnchantmentsComponent1215.cs | 39 - .../1_21_5/EquippableComponent1215.cs | 104 - .../1_21_5/InstrumentComponent1215.cs | 44 - .../1_21_5/JukeBoxPlayableComponent1215.cs | 77 - .../1_21_5/PaintingVariantHolderComponent.cs | 35 - .../1_21_5/PotionDurationScaleComponent.cs | 23 - .../1_21_5/ProvidesBannerPatternsComponent.cs | 23 - .../1_21_5/ProvidesTrimMaterialComponent.cs | 42 - .../1_21_5/SoundEventHolderComponent.cs | 40 - .../1_21_5/StoredEnchantmentsComponent1215.cs | 7 - .../Components/1_21_5/ToolComponent1215.cs | 48 - .../1_21_5/TooltipDisplayComponent.cs | 30 - .../Components/1_21_5/TrimComponent1215.cs | 106 - .../Components/1_21_5/VarIntComponent.cs | 23 - .../Components/1_21_5/WeaponComponent.cs | 26 - .../1_21_8/AttributeModifiersComponent1218.cs | 99 - .../1_21_8/EquippableComponent1218.cs | 113 - .../Components/1_21_9/BeesComponent1219.cs | 50 - .../Components/26_1/ContainerComponent261.cs | 34 - .../Components/26_1/HolderSetComponent261.cs | 42 - .../Components/26_1/InstrumentComponent261.cs | 38 - .../26_1/ItemStackTemplateListComponent261.cs | 31 - .../Components/26_1/NbtTagComponent261.cs | 21 - .../26_1/ProvidesTrimMaterialComponent261.cs | 36 - .../26_1/TypedEntityDataComponent261.cs | 13 - .../26_1/UseRemainderComponent261.cs | 25 - .../26_2/SulfurCubeContentComponent262.cs | 25 - .../Components/EmptyComponent.cs | 17 - .../StructuredComponentCodecHelpers.cs | 74 - .../1_20_6/AttributeSubComponent.cs | 41 - .../1_20_6/BlockPredicateSubcomponent.cs | 77 - .../1_20_6/BlockSetSubcomponent.cs | 50 - .../1_20_6/DetailsSubComponent.cs | 50 - .../1_20_6/EffectSubComponent.cs | 25 - .../1_20_6/FireworkExplosionSubComponent.cs | 63 - .../1_20_6/PotionEffectSubComponent.cs | 25 - .../1_20_6/PropertySubComponent.cs | 61 - .../Subcomponents/1_20_6/RuleSubComponent.cs | 43 - .../1_21/AttributeSubComponent121.cs | 38 - .../1_21/SoundEventSubComponent.cs | 45 - .../Components/Subcomponents/SubComponents.cs | 15 - .../Components/TypedEntityDataComponent.cs | 30 - .../Core/StructuredComponent.cs | 27 - .../Core/StructuredComponentRegistry.cs | 66 - .../StructuredComponents/Core/SubComponent.cs | 12 - .../Core/SubComponentRegistry.cs | 40 - .../StructuredComponentsRegistry1206.cs | 69 - .../StructuredComponentsRegistry121.cs | 71 - .../StructuredComponentsRegistry12111.cs | 126 - .../StructuredComponentsRegistry1212.cs | 85 - .../StructuredComponentsRegistry1215.cs | 138 - .../StructuredComponentsRegistry261.cs | 132 - .../StructuredComponentsRegistry262.cs | 134 - .../Subcomponents/SubComponentRegistry1206.cs | 22 - .../Subcomponents/SubComponentRegistry121.cs | 16 - .../Subcomponents/SubComponentRegistry1212.cs | 11 - .../StructuredComponentsHandler.cs | 64 - .../Protocol/Handlers/ZlibUtils.cs | 70 - MinecraftClient/Protocol/IMinecraftCom.cs | 319 - .../Protocol/IMinecraftComHandler.cs | 643 -- MinecraftClient/Protocol/JwtPayloadDecode.cs | 32 - .../Protocol/Message/ChatMessage.cs | 77 - .../Protocol/Message/ChatParser.cs | 1456 --- .../Protocol/Message/LastSeenMessageList.cs | 157 - .../Protocol/MicrosoftAuthentication.cs | 487 - MinecraftClient/Protocol/MojangAPI.cs | 287 - MinecraftClient/Protocol/PlayerInfo.cs | 225 - .../Protocol/ProfileKey/KeyUtils.cs | 261 - .../Protocol/ProfileKey/KeysCache.cs | 197 - .../Protocol/ProfileKey/PlayerKeyPair.cs | 90 - .../Protocol/ProfileKey/PrivateKey.cs | 85 - .../Protocol/ProfileKey/PublicKey.cs | 102 - MinecraftClient/Protocol/ProtocolHandler.cs | 1455 --- MinecraftClient/Protocol/ProxiedWebRequest.cs | 234 - MinecraftClient/Protocol/ReplayHandler.cs | 560 -- .../Protocol/ServerStatusDisplay.cs | 119 - MinecraftClient/Protocol/ServerStatusInfo.cs | 30 - .../Protocol/Session/SessionCache.cs | 220 - .../Protocol/Session/SessionToken.cs | 111 - MinecraftClient/Proxy/ProxyHandler.cs | 108 - MinecraftClient/RecipeBookRecipeEntry.cs | 4 - MinecraftClient/Resources/AppIcon.ico | Bin 1451470 -> 0 bytes .../Resources/AsciiArt/AsciiArt.Designer.cs | 273 - .../Resources/AsciiArt/AsciiArt.resx | 367 - .../ConfigComments/ConfigComments.Designer.cs | 2297 ----- .../ConfigComments/ConfigComments.resx | 1091 --- .../Resources/MinecraftAssets.Designer.cs | 73 - .../Resources/MinecraftAssets.resx | 124 - .../Translations/Translations.Designer.cs | 8304 ----------------- .../Resources/Translations/Translations.resx | 3133 ------- .../Resources/appicon_creeper1.ico | Bin 164592 -> 0 bytes .../Resources/appicon_grassblock.ico | Bin 151320 -> 0 bytes .../Resources/appicon_terminal.ico | Bin 1451470 -> 0 bytes MinecraftClient/Resources/en_us.json | 6546 ------------- MinecraftClient/RestartCoordinator.cs | 213 - MinecraftClient/Scripting/AssemblyResolver.cs | 39 - MinecraftClient/Scripting/BotMovementLock.cs | 35 - MinecraftClient/Scripting/CSharpRunner.cs | 466 - MinecraftClient/Scripting/ChatBot.cs | 1911 ---- MinecraftClient/Scripting/DataPath.cs | 55 - .../DynamicRun/Builder/CompileRunner.cs | 45 - .../Scripting/DynamicRun/Builder/Compiler.cs | 227 - .../SimpleUnloadableAssemblyLoadContext.cs | 24 - MinecraftClient/Scripting/MccGameApi.cs | 1333 --- MinecraftClient/Scripting/MccGameCommon.cs | 237 - MinecraftClient/Scripting/MccGameModels.cs | 321 - MinecraftClient/Scripting/MccGameResult.cs | 63 - MinecraftClient/Scripting/MccObservedState.cs | 205 - MinecraftClient/Settings.cs | 2472 ----- MinecraftClient/TabList/TabListFormatter.cs | 310 - MinecraftClient/TaskWithDelay.cs | 42 - MinecraftClient/TaskWithResult.cs | 122 - MinecraftClient/Tui/BookTuiHost.cs | 383 - MinecraftClient/Tui/BrewingStandView.cs | 152 - MinecraftClient/Tui/ContainerViewBase.cs | 723 -- MinecraftClient/Tui/ContainerViewModel.cs | 271 - MinecraftClient/Tui/CraftingView.cs | 112 - MinecraftClient/Tui/DialogTuiHost.cs | 449 - MinecraftClient/Tui/EnchantingTableView.cs | 198 - MinecraftClient/Tui/FurnaceView.cs | 133 - MinecraftClient/Tui/GridContainerView.cs | 31 - MinecraftClient/Tui/GrindstoneView.cs | 126 - MinecraftClient/Tui/HopperView.cs | 30 - MinecraftClient/Tui/IconGridBuilder.cs | 125 - MinecraftClient/Tui/InventoryApp.cs | 36 - MinecraftClient/Tui/InventoryMainView.cs | 129 - MinecraftClient/Tui/InventoryTuiHost.cs | 209 - MinecraftClient/Tui/InventoryViewModel.cs | 60 - MinecraftClient/Tui/MainTuiView.cs | 1250 --- MinecraftClient/Tui/MapOverlay.cs | 499 - MinecraftClient/Tui/McColorParser.cs | 165 - MinecraftClient/Tui/MccBannerPanelBuilder.cs | 183 - MinecraftClient/Tui/MccTuiApp.cs | 35 - MinecraftClient/Tui/MinimapColorMap.cs | 191 - MinecraftClient/Tui/MinimapControl.cs | 1267 --- .../Tui/MinimapEntityClassifier.cs | 178 - .../Tui/ServerStatusPanelBuilder.cs | 196 - MinecraftClient/Tui/SlotViewModel.cs | 157 - MinecraftClient/Tui/TabListOverlay.cs | 92 - MinecraftClient/Tui/TuiConsoleBackend.cs | 326 - MinecraftClient/Tui/TuiTooltipService.cs | 114 - MinecraftClient/UpgradeHelper.cs | 360 - MinecraftClient/WinAPI/ConsoleIcon.cs | 108 - MinecraftClient/WinAPI/ExitCleanUp.cs | 96 - .../config/ChatBots/AutoLeaveOnLowHp.cs | 22 - MinecraftClient/config/ChatBots/AutoLook.cs | 64 - MinecraftClient/config/ChatBots/AutoTree.cs | 201 - .../config/ChatBots/DiscordWebhook.cs | 813 -- .../config/ChatBots/EntityCount.cs | 49 - MinecraftClient/config/ChatBots/MineCube.cs | 520 -- MinecraftClient/config/ChatBots/PayKassa.cs | 101 - MinecraftClient/config/ChatBots/QIWIAPI.cs | 317 - .../config/ChatBots/SugarCaneFarmer.cs | 261 - .../config/ChatBots/SugarCaneMiner.cs | 53 - MinecraftClient/config/ChatBots/TreeFarmer.cs | 64 - MinecraftClient/config/ChatBots/VkMessager.cs | 497 - .../config/ChatBots/WebSocketBot.cs | 1188 --- MinecraftClient/config/README.md | 4 - MinecraftClient/config/hangman-en.txt | 323 - MinecraftClient/config/hangman-fr.txt | 322 - MinecraftClient/config/sample-matches.ini | 74 - .../config/sample-script-extended.cs | 31 - .../config/sample-script-packet-capture.cs | 178 - .../config/sample-script-pm-forwarder.cs | 39 - .../config/sample-script-random-command.cs | 11 - .../config/sample-script-tick-counter.cs | 40 - .../config/sample-script-with-chatbot.cs | 35 - .../config/sample-script-with-http-request.cs | 23 - .../config/sample-script-with-task.cs | 32 - .../config/sample-script-with-world-access.cs | 61 - MinecraftClient/config/sample-script.cs | 14 - MinecraftClient/config/sample-script.txt | 8 - MinecraftClientGUI.sln | 20 - MinecraftClientGUI/AppIcon.ico | Bin 370070 -> 0 bytes MinecraftClientGUI/Form1.Designer.cs | 47 - MinecraftClientGUI/Form1.cs | 794 -- MinecraftClientGUI/Form1.resx | 6293 ------------- MinecraftClientGUI/MinecraftClient.cs | 164 - MinecraftClientGUI/MinecraftClientGUI.csproj | 140 - MinecraftClientGUI/Program.cs | 51 - MinecraftClientGUI/Properties/AssemblyInfo.cs | 36 - .../Properties/Resources.Designer.cs | 63 - MinecraftClientGUI/Properties/Resources.resx | 117 - .../Properties/Settings.Designer.cs | 26 - .../Properties/Settings.settings | 7 - MinecraftClientGUI/app.config | 3 - MinecraftClientGUI/screenshot.png | Bin 49804 -> 0 bytes NuGet.Config | 2 + NuGet.Local.Config | 2 + README.md | 141 +- compose.yml | 20 + crowdin.yml | 74 +- docs/.vuepress/config.ts | 209 +- docs/.vuepress/configs/gen_configs.py | 110 - docs/.vuepress/configs/head.ts | 32 - docs/.vuepress/configs/l10n_configs/af.ts | 86 - docs/.vuepress/configs/l10n_configs/ar.ts | 86 - docs/.vuepress/configs/l10n_configs/ca.ts | 86 - .../configs/l10n_configs/config_templete.ts | 85 - docs/.vuepress/configs/l10n_configs/cs.ts | 86 - docs/.vuepress/configs/l10n_configs/da.ts | 86 - docs/.vuepress/configs/l10n_configs/de.ts | 86 - docs/.vuepress/configs/l10n_configs/el.ts | 86 - docs/.vuepress/configs/l10n_configs/en.ts | 96 - docs/.vuepress/configs/l10n_configs/es.ts | 86 - docs/.vuepress/configs/l10n_configs/fi.ts | 86 - docs/.vuepress/configs/l10n_configs/fr.ts | 86 - docs/.vuepress/configs/l10n_configs/he.ts | 86 - docs/.vuepress/configs/l10n_configs/hu.ts | 86 - docs/.vuepress/configs/l10n_configs/it.ts | 86 - docs/.vuepress/configs/l10n_configs/ja.ts | 86 - docs/.vuepress/configs/l10n_configs/ko.ts | 86 - docs/.vuepress/configs/l10n_configs/lv.ts | 86 - docs/.vuepress/configs/l10n_configs/nl.ts | 86 - docs/.vuepress/configs/l10n_configs/no.ts | 86 - docs/.vuepress/configs/l10n_configs/pl.ts | 86 - docs/.vuepress/configs/l10n_configs/pt-BR.ts | 86 - docs/.vuepress/configs/l10n_configs/pt.ts | 86 - docs/.vuepress/configs/l10n_configs/ro.ts | 86 - docs/.vuepress/configs/l10n_configs/ru.ts | 86 - .../.vuepress/configs/l10n_configs/sr-Cyrl.ts | 86 - docs/.vuepress/configs/l10n_configs/sv.ts | 86 - docs/.vuepress/configs/l10n_configs/tr.ts | 86 - docs/.vuepress/configs/l10n_configs/uk.ts | 86 - docs/.vuepress/configs/l10n_configs/vi.ts | 86 - .../.vuepress/configs/l10n_configs/zh-Hans.ts | 86 - .../.vuepress/configs/l10n_configs/zh-Hant.ts | 86 - docs/.vuepress/configs/locales_config.ts | 103 - docs/.vuepress/public/README.md | 39 - .../public/examples/beacon/census.bcn | 18 + .../examples/beacon/guide/functions.bcn | 8 + .../public/examples/beacon/guide/greeter.bcn | 5 + .../public/examples/beacon/guide/hello.bcn | 2 + .../public/examples/beacon/guide/price.bcn | 11 + .../examples/beacon/guide/saved-counter.bcn | 5 + .../public/examples/beacon/guide/schedule.bcn | 7 + .../public/examples/beacon/guide/settings.bcn | 3 + .../examples/beacon/guide/shop-caller.bcn | 4 + .../public/examples/beacon/guide/shop.bcn | 4 + .../public/examples/beacon/guide/values.bcn | 14 + .../examples/beacon/guide/welcome-helper.bcn | 14 + .../examples/beacon/inventory-report.bcn | 13 + .../public/examples/beacon/lib/math.bcn | 4 + .../public/examples/beacon/nearby-chests.bcn | 16 + .../examples/beacon/optional-pricing.bcn | 11 + .../public/examples/beacon/order.bcn | 3 + .../public/examples/beacon/price-command.bcn | 10 + .../.vuepress/public/examples/beacon/quiz.bcn | 23 + .../public/examples/beacon/shared-counter.bcn | 6 + .../public/examples/beacon/team-dialog.bcn | 14 + .../public/examples/beacon/timers.bcn | 7 + .../public/examples/beacon/total.bcn | 8 + .../public/examples/beacon/tps-guard.bcn | 6 + docs/.vuepress/public/install.ps1 | 138 +- docs/.vuepress/public/install.sh | 253 +- docs/.vuepress/public/redirect.html | 171 - .../public/redirect_assets/wallpaper/1.png | Bin 605220 -> 0 bytes .../public/redirect_assets/wallpaper/2.png | Bin 677470 -> 0 bytes .../public/redirect_assets/wallpaper/3.png | Bin 569209 -> 0 bytes .../public/redirect_assets/wallpaper/4.png | Bin 752437 -> 0 bytes .../public/redirect_assets/wallpaper/5.png | Bin 820885 -> 0 bytes .../public/redirect_assets/wallpaper/6.png | Bin 584917 -> 0 bytes .../public/redirect_assets/wallpaper/7.png | Bin 651853 -> 0 bytes .../public/redirect_assets/wallpaper/8.png | Bin 542275 -> 0 bytes docs/.vuepress/translations/en.json | 32 - docs/.vuepress/ui/en.json | 13 + docs/README.md | 23 - docs/beacon/capabilities.md | 94 + docs/beacon/commands.md | 118 + docs/beacon/events-and-game.md | 215 + docs/beacon/getting-started.md | 130 + docs/beacon/guide/01-first-file.md | 76 + docs/beacon/guide/02-values.md | 68 + docs/beacon/guide/03-functions.md | 49 + docs/beacon/guide/04-events.md | 62 + docs/beacon/guide/05-time.md | 63 + docs/beacon/guide/06-state.md | 96 + docs/beacon/guide/07-integrations.md | 87 + docs/beacon/guide/08-testing.md | 81 + docs/beacon/guide/09-complete-helper.md | 83 + docs/beacon/guide/index.md | 23 + docs/beacon/hosting-and-testing.md | 109 + docs/beacon/index.md | 47 + docs/beacon/language.md | 211 + docs/beacon/recipes.md | 308 + docs/beacon/standard-library.md | 233 + docs/beacon/state-and-integrations.md | 186 + docs/client/accounts.md | 102 + docs/client/automation.md | 85 + docs/client/chat.md | 80 + docs/client/configuration.md | 254 + docs/client/gameplay.md | 122 + docs/client/glossary.md | 51 + docs/client/index.md | 16 + docs/client/interface.md | 130 + docs/client/languages.md | 59 + docs/client/servers.md | 147 + docs/commands/achievement.md | 42 + docs/commands/animation.md | 30 + docs/commands/bed.md | 37 + docs/commands/blockinfo.md | 41 + docs/commands/book.md | 319 + docs/commands/changeslot.md | 35 + docs/commands/chunk.md | 40 + docs/commands/clear-console.md | 31 + docs/commands/connect.md | 33 + docs/commands/console-chat.md | 33 + docs/commands/debug.md | 34 + docs/commands/dialog.md | 288 + docs/commands/dig.md | 35 + docs/commands/dropitem.md | 36 + docs/commands/effects.md | 29 + docs/commands/enchant.md | 35 + docs/commands/entity.md | 267 + docs/commands/exit.md | 37 + docs/commands/health.md | 29 + docs/commands/help.md | 37 + docs/commands/index.md | 119 + docs/commands/inventory.md | 312 + docs/commands/lang.md | 35 + docs/commands/list.md | 29 + docs/commands/log.md | 29 + docs/commands/look.md | 36 + docs/commands/man.md | 43 + docs/commands/map.md | 33 + docs/commands/mcc-menu.md | 31 + docs/commands/minimap.md | 44 + docs/commands/move.md | 49 + docs/commands/nameitem.md | 31 + docs/commands/plugins.md | 85 + docs/commands/recipebook.md | 38 + docs/commands/reco.md | 33 + docs/commands/reload.md | 33 + docs/commands/respawn.md | 29 + docs/commands/scoreboard.md | 43 + docs/commands/scripts.md | 64 + docs/commands/send.md | 32 + docs/commands/servers.md | 32 + docs/commands/set.md | 31 + docs/commands/sneak.md | 31 + docs/commands/tab.md | 31 + docs/commands/teams.md | 29 + docs/commands/tps.md | 31 + docs/commands/useblock.md | 36 + docs/commands/useitem.md | 36 + docs/contributing/documentation.md | 43 + docs/contributing/index.md | 18 + docs/contributing/review.md | 51 + docs/contributing/translations.md | 118 + docs/contributing/windows.md | 165 + docs/deployment/docker.md | 152 + docs/deployment/index.md | 12 + docs/deployment/releases.md | 70 + docs/examples/beacon/README.md | 40 + docs/examples/beacon/census.bcn | 18 + docs/examples/beacon/guide/README.md | 18 + docs/examples/beacon/guide/functions.bcn | 8 + docs/examples/beacon/guide/greeter.bcn | 5 + docs/examples/beacon/guide/hello.bcn | 2 + docs/examples/beacon/guide/price.bcn | 11 + docs/examples/beacon/guide/saved-counter.bcn | 5 + docs/examples/beacon/guide/schedule.bcn | 7 + docs/examples/beacon/guide/settings.bcn | 3 + docs/examples/beacon/guide/shop-caller.bcn | 4 + docs/examples/beacon/guide/shop.bcn | 4 + docs/examples/beacon/guide/values.bcn | 14 + docs/examples/beacon/guide/welcome-helper.bcn | 14 + docs/examples/beacon/inventory-report.bcn | 13 + docs/examples/beacon/lib/math.bcn | 4 + docs/examples/beacon/nearby-chests.bcn | 16 + docs/examples/beacon/optional-pricing.bcn | 11 + docs/examples/beacon/order.bcn | 3 + docs/examples/beacon/price-command.bcn | 10 + docs/examples/beacon/quiz.bcn | 23 + docs/examples/beacon/shared-counter.bcn | 6 + docs/examples/beacon/team-dialog.bcn | 14 + docs/examples/beacon/timers.bcn | 7 + docs/examples/beacon/total.bcn | 8 + docs/examples/beacon/tps-guard.bcn | 6 + docs/getting-started/arguments.md | 125 + docs/getting-started/first-session.md | 118 + docs/getting-started/index.md | 12 + docs/getting-started/installation.md | 128 + docs/guide/README.md | 236 - docs/guide/ai-assisted-development.md | 771 -- docs/guide/chat-bots.md | 3519 ------- docs/guide/configuration.md | 1685 ---- docs/guide/contibuting.md | 33 - docs/guide/creating-bots.md | 352 - docs/guide/creating-text-script.md | 27 - docs/guide/installation.md | 1147 --- docs/guide/usage.md | 1786 ---- docs/guide/websocket/Commands.md | 529 -- docs/guide/websocket/Events.md | 578 -- docs/guide/websocket/README.md | 132 - docs/index.md | 49 + docs/marketplaces/creating.md | 206 + docs/marketplaces/format.md | 342 + docs/marketplaces/index.md | 9 + docs/marketplaces/using.md | 111 + docs/package-lock.json | 6420 +++++++++++++ docs/package.json | 22 +- docs/plugins/development/advanced-examples.md | 388 + .../plugins/development/beacon-integration.md | 172 + .../development/dependencies-and-loading.md | 131 + docs/plugins/development/getting-started.md | 135 + docs/plugins/development/index.md | 51 + .../development/lifecycle-and-commands.md | 154 + .../development/settings-and-resources.md | 136 + .../development/testing-and-release.md | 148 + .../development/tutorial/01-project.md | 119 + .../tutorial/02-entry-and-sessions.md | 85 + .../tutorial/03-settings-and-storage.md | 123 + .../tutorial/04-commands-and-text.md | 132 + .../plugins/development/tutorial/05-beacon.md | 151 + .../development/tutorial/06-load-and-test.md | 83 + .../tutorial/07-package-and-release.md | 69 + .../development/tutorial/08-maintenance.md | 55 + docs/plugins/development/tutorial/index.md | 40 + docs/plugins/index.md | 26 + docs/plugins/managing.md | 142 + docs/plugins/official.md | 47 + docs/plugins/official/alerts.md | 400 + docs/plugins/official/anti-afk.md | 81 + docs/plugins/official/auto-attack.md | 91 + docs/plugins/official/auto-craft.md | 192 + docs/plugins/official/auto-dig.md | 95 + docs/plugins/official/auto-drop.md | 81 + docs/plugins/official/auto-eat.md | 70 + docs/plugins/official/auto-fishing.md | 100 + docs/plugins/official/auto-relog.md | 79 + docs/plugins/official/auto-respond.md | 83 + docs/plugins/official/channel-logger.md | 76 + docs/plugins/official/chat-log.md | 74 + docs/plugins/official/discord-bridge.md | 258 + docs/plugins/official/discord-rpc.md | 152 + docs/plugins/official/farmer.md | 182 + docs/plugins/official/follow-player.md | 79 + docs/plugins/official/items-collector.md | 82 + docs/plugins/official/llm-core.md | 253 + docs/plugins/official/map.md | 95 + docs/plugins/official/mcp-server.md | 80 + docs/plugins/official/player-list-logger.md | 72 + docs/plugins/official/remote-control.md | 72 + docs/plugins/official/replay-capture.md | 75 + docs/plugins/official/script-scheduler.md | 100 + docs/plugins/official/telegram-bridge.md | 151 + docs/troubleshooting/diagnostics.md | 68 + docs/troubleshooting/index.md | 80 + docs/yarn.lock | 7574 --------------- global.json | 6 + src/Directory.Build.props | 26 + src/Directory.Packages.props | 64 + .../Fixtures/TempBeaconExtensionPlugin.cs | 101 + src/Mcc.Cli.Tests/Beacon/FormatTests.cs | 269 + src/Mcc.Cli.Tests/Beacon/LintTests.cs | 419 + .../Beacon/OneShotAdapterTests.cs | 287 + src/Mcc.Cli.Tests/Beacon/ParityTests.cs | 242 + src/Mcc.Cli.Tests/Beacon/ScriptTestHelpers.cs | 37 + .../Beacon/ScriptToolingTests.cs | 203 + .../Beacon/StateAndLifecycleTests.cs | 304 + .../Beacon/TempPluginExtensionTests.cs | 201 + .../Commands/CommandMetadataTests.cs | 199 + .../Commands/ManagementUiCommandTests.cs | 116 + .../Commands/PluginsUiCommandTests.cs | 294 + .../Configuration/DotEnvTests.cs | 71 + .../Diagnostics/PacketCaptureWriterTests.cs | 156 + .../Diagnostics/SessionDiagnosticsTests.cs | 86 + src/Mcc.Cli.Tests/Fakes/CaptureReader.cs | 36 + .../Fakes/FakeBlockDataSource.cs | 100 + .../Fakes/McPluginSessionHarness.cs | 162 + src/Mcc.Cli.Tests/Fakes/PluginRootFixture.cs | 67 + src/Mcc.Cli.Tests/Fakes/TestManifest.cs | 23 + src/Mcc.Cli.Tests/Fakes/TestPackages.cs | 24 + .../Hosting/CliHostPrefixTests.cs | 213 + src/Mcc.Cli.Tests/Hosting/DeadSessionTests.cs | 409 + .../Hosting/HostPresentationBoundaryTests.cs | 64 + .../Hosting/IdlePluginClaimTests.cs | 42 + .../Hosting/SessionNoticeTests.cs | 141 + .../Localization/LocalizationTests.cs | 31 + src/Mcc.Cli.Tests/Logging/HostLoggingTests.cs | 111 + src/Mcc.Cli.Tests/Mcc.Cli.Tests.csproj | 2 + .../Plugins/PluginValidatorTests.cs | 297 + .../Presentation/AnsiColorizeTests.cs | 57 + .../AnsiComponentRendererTests.cs | 152 + .../Presentation/ChatSurfaceNoticeTests.cs | 58 + .../Presentation/ConsoleMapRendererTests.cs | 33 + .../Presentation/HostTranslationsTests.cs | 429 + .../Presentation/KickReasonFormattingTests.cs | 125 + .../Presentation/LegacyBackgroundTests.cs | 153 + .../Presentation/MarkdownRenderingTests.cs | 198 + src/Mcc.Cli.Tests/Presentation/MeterTests.cs | 100 + .../Presentation/ResourcePackTests.cs | 300 + .../Presentation/ServerFactsDisplayTests.cs | 383 + .../Presentation/ServerStatusPanelTests.cs | 57 + .../SuggestionPopupRestoreTests.cs | 398 + .../Presentation/TerminalCapabilityTests.cs | 54 + .../Startup/CliArgumentsTests.cs | 178 + src/Mcc.Cli.Tests/Startup/CliHelpTests.cs | 123 + src/Mcc.Cli.Tests/Startup/GuidedLoginTests.cs | 187 + src/Mcc.Cli.Tests/TestingImports.cs | 1 + src/Mcc.Cli.Tests/Tui/ContainerLayoutTests.cs | 130 + .../Tui/ManagementBrowserModelTests.cs | 304 + src/Mcc.Cli.Tests/Tui/MapColorsTests.cs | 45 + .../Tui/MarkdownTuiRenderingTests.cs | 210 + src/Mcc.Cli.Tests/Tui/MinimapTests.cs | 275 + .../Tui/PluginVersionsPageTests.cs | 15 + .../Tui/ScoreboardWindowTests.cs | 30 + src/Mcc.Cli.Tests/Tui/SlotCellNameTests.cs | 82 + .../Tui/TabListFormattingTests.cs | 161 + src/Mcc.Cli.Tests/Tui/TuiClipboardTests.cs | 110 + src/Mcc.Cli.Tests/Tui/TuiColorTests.cs | 230 + src/Mcc.Cli/BeaconTooling/BeaconCliParsing.cs | 44 + src/Mcc.Cli/BeaconTooling/BeaconFormatCli.cs | 177 + .../BeaconTooling/BeaconFormatOneShot.cs | 50 + src/Mcc.Cli/BeaconTooling/BeaconLintCli.cs | 85 + .../BeaconTooling/BeaconLintOneShot.cs | 49 + .../BeaconTooling/BeaconOneShotTransport.cs | 29 + src/Mcc.Cli/BeaconTooling/BeaconRunCli.cs | 227 + src/Mcc.Cli/BeaconTooling/BeaconRunOneShot.cs | 49 + src/Mcc.Cli/Commands/ClearConsoleCommand.cs | 68 + src/Mcc.Cli/Commands/ConsoleChatCommand.cs | 56 + src/Mcc.Cli/Commands/ExitCommand.cs | 56 + src/Mcc.Cli/Commands/IMccNavigation.cs | 8 + src/Mcc.Cli/Commands/MccMenuCommand.cs | 50 + .../Configuration/ConsoleHostConfig.cs | 231 + src/Mcc.Cli/Configuration/ConsoleTomlFile.cs | 139 + .../ConsoleTomlOverrideBinder.cs | 52 + src/Mcc.Cli/Configuration/DotEnv.cs | 85 + src/Mcc.Cli/Diagnostics/ClientReport.cs | 101 + .../Diagnostics/DiagnosticsSettings.cs | 43 + src/Mcc.Cli/Diagnostics/EnvironmentReport.cs | 118 + .../Diagnostics/PacketCaptureWriter.cs | 242 + src/Mcc.Cli/Diagnostics/ServerReport.cs | 136 + src/Mcc.Cli/Diagnostics/SessionDiagnostics.cs | 365 + src/Mcc.Cli/Diagnostics/SmokeExercise.cs | 410 + .../Hosting/Classic/ConsoleAuthInteraction.cs | 110 + .../Hosting/Classic/ConsoleCommandOutput.cs | 22 + .../Hosting/Classic/ConsoleHostInterface.cs | 31 + src/Mcc.Cli/Hosting/Classic/ConsoleHostUi.cs | 141 + .../Classic/ConsoleResourcePackPrompt.cs | 25 + src/Mcc.Cli/Hosting/ConsoleHostState.cs | 12 + src/Mcc.Cli/Hosting/HostControl.cs | 72 + src/Mcc.Cli/Hosting/HostExit.cs | 75 + src/Mcc.Cli/Hosting/ProcessCloseGuard.cs | 95 + src/Mcc.Cli/Input/FileInputDriver.cs | 78 + .../Localization/ContainerArt.Designer.cs | 70 + .../Localization/MccStrings.Designer.cs | 172 + .../Localization/Resources/ContainerArt.resx | 594 ++ .../Localization/Resources/MccStrings.resx | 253 + src/Mcc.Cli/Localization/Strings.cs | 901 ++ src/Mcc.Cli/Localization/TextResources.cs | 11 + src/Mcc.Cli/Logging/ConsoleLogger.cs | 183 + src/Mcc.Cli/Logging/LogFileSink.cs | 54 + src/Mcc.Cli/Logging/LogFilter.cs | 44 + src/Mcc.Cli/Mcc.Cli.csproj | 66 + .../Plugins/MarketplaceValidateOneShot.cs | 40 + src/Mcc.Cli/Plugins/PluginInstallPrompt.cs | 62 + src/Mcc.Cli/Plugins/PluginValidateOneShot.cs | 61 + src/Mcc.Cli/Presentation/Ansi.cs | 30 + src/Mcc.Cli/Presentation/AnsiColorMapping.cs | 126 + .../Presentation/AnsiComponentRenderer.cs | 119 + src/Mcc.Cli/Presentation/ChatPresenter.cs | 83 + .../Presentation/ChatStandingMarker.cs | 111 + src/Mcc.Cli/Presentation/ChunkMapRenderer.cs | 212 + .../Presentation/ConsoleMapRenderer.cs | 150 + src/Mcc.Cli/Presentation/EffectAnnouncer.cs | 127 + src/Mcc.Cli/Presentation/GlyphModeResolver.cs | 72 + src/Mcc.Cli/Presentation/HostConsole.cs | 145 + src/Mcc.Cli/Presentation/LegacyBackground.cs | 140 + .../Presentation/MarkdownConsoleRenderer.cs | 157 + src/Mcc.Cli/Presentation/MccGlyphs.cs | 35 + src/Mcc.Cli/Presentation/Meter.cs | 79 + .../Presentation/PlayerStatusRenderer.cs | 52 + src/Mcc.Cli/Presentation/ResultFormatting.cs | 69 + src/Mcc.Cli/Presentation/RichConsole.cs | 272 + src/Mcc.Cli/Presentation/ServerStatusPanel.cs | 100 + src/Mcc.Cli/Presentation/SessionNotices.cs | 106 + .../Presentation/TerminalCapability.cs | 81 + .../Presentation/TerminalHelpRenderer.cs | 245 + src/Mcc.Cli/Program.cs | 1080 +++ src/Mcc.Cli/README.md | 56 + src/Mcc.Cli/Resources/TextResources.fr.resx | 9 + src/Mcc.Cli/Resources/TextResources.resx | 2588 +++++ src/Mcc.Cli/Startup/CliArguments.cs | 179 + src/Mcc.Cli/Startup/CliHelp.cs | 61 + src/Mcc.Cli/Startup/ClientVersion.cs | 20 + src/Mcc.Cli/Startup/GuidedLogin.cs | 163 + src/Mcc.Cli/Startup/IdleStart.cs | 43 + .../Tui/Authentication/TuiAuthInteraction.cs | 124 + .../Tui/Authentication/TuiConnectDialog.cs | 185 + .../Tui/Authentication/TuiGuidedLogin.cs | 403 + src/Mcc.Cli/Tui/Commands/TuiClearCommand.cs | 60 + src/Mcc.Cli/Tui/Container/ContainerLayout.cs | 200 + src/Mcc.Cli/Tui/Container/ContainerOverlay.cs | 403 + src/Mcc.Cli/Tui/Container/SlotCell.cs | 166 + src/Mcc.Cli/Tui/Hosting/MainTuiView.cs | 665 ++ src/Mcc.Cli/Tui/Hosting/MccTuiApp.cs | 53 + src/Mcc.Cli/Tui/Hosting/TuiBackend.cs | 259 + src/Mcc.Cli/Tui/Hosting/TuiCommandOutput.cs | 14 + src/Mcc.Cli/Tui/Hosting/TuiHost.cs | 381 + src/Mcc.Cli/Tui/Hosting/TuiHostInterface.cs | 30 + src/Mcc.Cli/Tui/Hosting/TuiHostUi.cs | 436 + src/Mcc.Cli/Tui/Input/TuiClipboard.cs | 171 + src/Mcc.Cli/Tui/Input/TuiCompletion.cs | 24 + src/Mcc.Cli/Tui/Input/TuiPrompt.cs | 331 + .../Tui/Management/AdvancementBrowserPage.cs | 259 + .../Tui/Management/ChunkBrowserPage.cs | 214 + .../Management/CommandManualBrowserPage.cs | 339 + .../Tui/Management/EntityBrowserPage.cs | 377 + src/Mcc.Cli/Tui/Management/ManagementUi.cs | 210 + .../Tui/Management/ManagementWorkspace.cs | 312 + src/Mcc.Cli/Tui/Management/MccMenuPage.cs | 239 + .../Tui/Management/RecipeBrowserPage.cs | 268 + .../Tui/Management/ScriptEditorPage.cs | 439 + .../Tui/Management/ScriptManagerPage.cs | 391 + src/Mcc.Cli/Tui/Management/ScriptReplPage.cs | 228 + .../Tui/Management/ScriptSettingsPage.cs | 125 + src/Mcc.Cli/Tui/Map/MapColors.cs | 79 + src/Mcc.Cli/Tui/Map/MapCommand.cs | 52 + src/Mcc.Cli/Tui/Map/MapController.cs | 107 + src/Mcc.Cli/Tui/Map/MapOverlay.cs | 370 + .../Tui/Minimap}/MinimapBlockColors.json | 0 src/Mcc.Cli/Tui/Minimap/MinimapColorMap.cs | 161 + src/Mcc.Cli/Tui/Minimap/MinimapCommand.cs | 183 + src/Mcc.Cli/Tui/Minimap/MinimapControl.cs | 702 ++ src/Mcc.Cli/Tui/Minimap/MinimapController.cs | 220 + .../Tui/Minimap}/MinimapEntityCategories.json | 0 .../Tui/Minimap/MinimapEntityClassifier.cs | 145 + src/Mcc.Cli/Tui/Minimap/MinimapEnums.cs | 54 + src/Mcc.Cli/Tui/Minimap/MinimapWindow.cs | 101 + src/Mcc.Cli/Tui/Overlays/BookOverlay.cs | 263 + src/Mcc.Cli/Tui/Overlays/DialogOverlay.cs | 183 + src/Mcc.Cli/Tui/Overlays/TabListOverlay.cs | 257 + src/Mcc.Cli/Tui/Plugins/PluginCatalogPage.cs | 264 + src/Mcc.Cli/Tui/Plugins/PluginDetailPage.cs | 371 + src/Mcc.Cli/Tui/Plugins/PluginInstallPage.cs | 444 + src/Mcc.Cli/Tui/Plugins/PluginListPage.cs | 478 + .../Tui/Plugins/PluginManagerContext.cs | 92 + .../Tui/Plugins/PluginManagerOverlay.cs | 293 + .../Tui/Plugins/PluginMarketplacesPage.cs | 426 + src/Mcc.Cli/Tui/Plugins/PluginModal.cs | 143 + .../Tui/Plugins/PluginSettingsModel.cs | 439 + src/Mcc.Cli/Tui/Plugins/PluginSettingsPage.cs | 315 + src/Mcc.Cli/Tui/Plugins/PluginToolsPage.cs | 218 + src/Mcc.Cli/Tui/Plugins/PluginUi.cs | 234 + .../Tui/Plugins/PluginUninstallDialog.cs | 98 + src/Mcc.Cli/Tui/Plugins/PluginUpdatesPage.cs | 226 + src/Mcc.Cli/Tui/Plugins/PluginVersionPages.cs | 120 + src/Mcc.Cli/Tui/Presentation/BannerBuilder.cs | 166 + .../Presentation/ComponentInlineRenderer.cs | 93 + .../Tui/Presentation/LegacyTextInlines.cs | 206 + .../Tui/Presentation/MarkdownTuiRenderer.cs | 365 + .../Tui/Presentation/ServerStatusPanel.cs | 158 + .../Tui/Presentation/StatusBarBuilder.cs | 164 + .../Tui/Presentation/TabListFormatting.cs | 172 + .../Tui/Presentation/TuiTooltipService.cs | 127 + .../Tui/Scoreboard/ScoreboardWindow.cs | 249 + src/Mcc.Cli/Tui/Terminal/BrowserLauncher.cs | 38 + src/Mcc.Cli/Tui/Terminal/CursesEscapeDelay.cs | 71 + .../Terminal/MonochromeConsoleColorMode.cs | 47 + src/Mcc.Cli/Tui/Terminal/TerminalRestore.cs | 53 + src/Mcc.Cli/Tui/Terminal/TuiViewport.cs | 32 + src/Mcc.Cli/Tui/TuiResourcePackPrompt.cs | 22 + src/README.md | 255 + tools/README.md | 266 +- tools/check_docs.py | 57 + tools/decompile.sh | 199 - tools/diff_registries.py | 304 - tools/gen_block_color_map.py | 293 - tools/gen_block_palette.py | 273 - tools/gen_block_shapes.py | 167 - tools/gen_command_argument_registry.py | 85 - tools/gen_entity_category_map.py | 200 - tools/gen_entity_metadata_palette.py | 156 - tools/gen_entity_palette.py | 111 - tools/gen_item_palette.py | 160 - tools/install_mcc.py | 158 + tools/localization/generate_strings.py | 36 + tools/localization/prepare_docs.py | 41 + tools/mcc-debug.sh | 306 - tools/mcc-env.sh | 455 +- tools/mcc-log-tail.sh | 82 - tools/package-release.py | 46 + tools/pull-translations.sh | 66 - tools/run-creative-e2e.sh | 330 - tools/run-dialog-test.sh | 238 - tools/run-inventory-full-sweep.sh | 471 - tools/run-structured-components-test.sh | 488 - tools/test-mcc-env.sh | 140 - tools/test_installers.py | 126 + tools/testing/auto_relog_fault_proxy.py | 179 - tools/translate_crowdin.py | 997 -- tools/umpkcap.py | 562 ++ tools/validate-marketplace.py | 21 + tools/windows/Common.ps1 | 53 + tools/windows/README.md | 49 + tools/windows/build.ps1 | 18 + tools/windows/clean.ps1 | 14 + tools/windows/publish.ps1 | 27 + tools/windows/run.ps1 | 36 + tools/windows/test.ps1 | 22 + 1273 files changed, 63258 insertions(+), 312861 deletions(-) create mode 120000 .agents/skills delete mode 100644 .codex/hooks.json delete mode 100644 .codex/hooks/pre_tool_use_mcc_build_guard.py create mode 120000 .codex/skill create mode 100644 .dockerignore delete mode 100644 .github/workflows/build-and-release.yml delete mode 100644 .github/workflows/deploy-doc-only.yml create mode 100644 .github/workflows/docs.yml create mode 100644 .github/workflows/mcc.yml create mode 100644 .github/workflows/translations.yml delete mode 100644 .github/workflows/upload-translation-source-only.yml create mode 100644 .skills/asd-ste100/LICENSE create mode 100644 .skills/asd-ste100/README.md create mode 100644 .skills/asd-ste100/SKILL.md create mode 100644 .skills/asd-ste100/examples/before-after.md create mode 100644 .skills/asd-ste100/references/writing-rules.md create mode 100644 .skills/asd-ste100/scripts/ste-lint.py create mode 100644 .skills/csharp-best-practices/LICENSE.md create mode 100644 .skills/csharp-solid-principles/LICENSE.md create mode 100644 .skills/csharp-solid-principles/README.md create mode 100644 .skills/csharp-solid-principles/SKILL.md create mode 100644 .skills/csharp-solid-principles/evals/evals.json create mode 100644 .skills/csharp-solid-principles/references/examples.md create mode 100644 .skills/csharp-solid-principles/references/review-playbook.md create mode 100644 .skills/csharp-solid-principles/references/sources.md create mode 100644 .skills/dotnet-performance-profiling-and-optimization/LICENSE.md create mode 100644 .skills/dotnet-security-review/LICENSE.md delete mode 100644 .skills/general-prompt-engineer/SKILL.md delete mode 100644 .skills/mcc-chatbot-authoring/SKILL.md delete mode 100644 .skills/mcc-chatbot-authoring/assets/builtin-chatbot-template.cs delete mode 100644 .skills/mcc-chatbot-authoring/assets/script-chatbot-template.cs delete mode 100644 .skills/mcc-chatbot-authoring/references/authoring-reference.md delete mode 100644 .skills/mcc-chatbot-authoring/references/pattern-cookbook.md delete mode 100644 .skills/mcc-dev-workflow/SKILL.md delete mode 100644 .skills/mcc-dev-workflow/evals/evals.json delete mode 100644 .skills/mcc-integration-testing/SKILL.md delete mode 100644 .skills/mcc-integration-testing/evals/evals.json delete mode 100644 .skills/mcc-integration-testing/references/command-matrix.md delete mode 100644 .skills/mcc-integration-testing/references/online-mode.md delete mode 100755 .skills/mcc-integration-testing/scripts/common.sh delete mode 100755 .skills/mcc-integration-testing/scripts/ensure_offline_server.sh delete mode 100644 .skills/mcc-integration-testing/scripts/get_server_port.sh delete mode 100755 .skills/mcc-integration-testing/scripts/preflight_test_env.sh delete mode 100644 .skills/mcc-integration-testing/scripts/prepare_offline_mcc_config.sh delete mode 100755 .skills/mcc-integration-testing/scripts/reset_shared_test_state.sh delete mode 100755 .skills/mcc-integration-testing/scripts/run_achievements_matrix.sh delete mode 100755 .skills/mcc-integration-testing/scripts/run_achievements_test.sh delete mode 100755 .skills/mcc-integration-testing/scripts/run_full_spectrum_test.sh delete mode 100755 .skills/mcc-integration-testing/scripts/run_parallel_session_smoke_test.sh delete mode 100755 .skills/mcc-integration-testing/scripts/summarize_achievements_matrix.sh delete mode 100755 .skills/mcc-integration-testing/scripts/summarize_test_run.sh delete mode 100644 .skills/mcc-version-adaptation/SKILL.md delete mode 100644 .skills/mermaid-diagrams/SKILL.md delete mode 100644 .skills/skill-creator/LICENSE.txt delete mode 100644 .skills/skill-creator/SKILL.md delete mode 100644 .skills/skill-creator/agents/analyzer.md delete mode 100644 .skills/skill-creator/agents/comparator.md delete mode 100644 .skills/skill-creator/agents/grader.md delete mode 100644 .skills/skill-creator/assets/eval_review.html delete mode 100644 .skills/skill-creator/eval-viewer/generate_review.py delete mode 100644 .skills/skill-creator/eval-viewer/viewer.html delete mode 100644 .skills/skill-creator/references/schemas.md delete mode 100644 .skills/skill-creator/scripts/__init__.py delete mode 100644 .skills/skill-creator/scripts/aggregate_benchmark.py delete mode 100644 .skills/skill-creator/scripts/generate_report.py delete mode 100644 .skills/skill-creator/scripts/improve_description.py delete mode 100644 .skills/skill-creator/scripts/package_skill.py delete mode 100644 .skills/skill-creator/scripts/quick_validate.py delete mode 100644 .skills/skill-creator/scripts/run_eval.py delete mode 100644 .skills/skill-creator/scripts/run_loop.py delete mode 100644 .skills/skill-creator/scripts/utils.py delete mode 100644 .skills/writing-skills/SKILL.md delete mode 100644 .skills/writing-skills/examples.md delete mode 100644 .skills/writing-skills/gotchas.md delete mode 100644 .skills/writing-skills/persuasion-principles.md delete mode 100644 .skills/writing-skills/references/anti-rationalization/README.md delete mode 100644 .skills/writing-skills/references/cso/README.md delete mode 100644 .skills/writing-skills/references/standards/README.md delete mode 100644 .skills/writing-skills/references/standards/metadata-standard.md delete mode 100644 .skills/writing-skills/references/templates/discipline.md delete mode 100644 .skills/writing-skills/references/templates/pattern.md delete mode 100644 .skills/writing-skills/references/templates/reference.md delete mode 100644 .skills/writing-skills/references/templates/technique.md delete mode 100644 .skills/writing-skills/references/templates/tier-3-platform.md delete mode 100644 .skills/writing-skills/references/testing/README.md delete mode 100644 .skills/writing-skills/references/tier-1-simple/README.md delete mode 100644 .skills/writing-skills/references/tier-2-expanded/README.md delete mode 100644 .skills/writing-skills/references/tier-3-platform/README.md delete mode 100644 .skills/writing-skills/testing-skills-with-subagents.md delete mode 100644 CLAUDE.md delete mode 100644 DebugTools/MccMcpSampleClient/MccMcpSampleClient.csproj delete mode 100644 DebugTools/MccMcpSampleClient/Program.cs delete mode 100644 DebugTools/MccMcpStdioHarness/MccMcpStdioHarness.csproj delete mode 100644 DebugTools/MccMcpStdioHarness/Program.cs delete mode 100644 DebugTools/MccMcpWebPlayground/Api/MccPlaygroundEndpoints.cs delete mode 100644 DebugTools/MccMcpWebPlayground/Contracts/MccContracts.cs delete mode 100644 DebugTools/MccMcpWebPlayground/Harness/MccAgentRunService.cs delete mode 100644 DebugTools/MccMcpWebPlayground/Harness/MccContextCompressor.cs delete mode 100644 DebugTools/MccMcpWebPlayground/Harness/MccFinalizer.cs delete mode 100644 DebugTools/MccMcpWebPlayground/Harness/MccGuidanceSource.cs delete mode 100644 DebugTools/MccMcpWebPlayground/Harness/MccPromptComposer.cs delete mode 100644 DebugTools/MccMcpWebPlayground/Harness/MccRunState.cs delete mode 100644 DebugTools/MccMcpWebPlayground/Harness/MccToolPolicy.cs delete mode 100644 DebugTools/MccMcpWebPlayground/Harness/MccWebHarnessOptions.cs delete mode 100644 DebugTools/MccMcpWebPlayground/Infrastructure/Mcp/MccMcpSessionFactory.cs delete mode 100644 DebugTools/MccMcpWebPlayground/Infrastructure/OpenRouter/OpenRouterChatClient.cs delete mode 100644 DebugTools/MccMcpWebPlayground/MccMcpWebPlayground.csproj delete mode 100644 DebugTools/MccMcpWebPlayground/Program.cs delete mode 100644 DebugTools/MccMcpWebPlayground/Properties/launchSettings.json delete mode 100644 DebugTools/MccMcpWebPlayground/appsettings.Development.json delete mode 100644 DebugTools/MccMcpWebPlayground/appsettings.json delete mode 100644 DebugTools/MccMcpWebPlayground/wwwroot/app.js delete mode 100644 DebugTools/MccMcpWebPlayground/wwwroot/index.html delete mode 100644 DebugTools/MccMcpWebPlayground/wwwroot/site.css delete mode 100644 DebugTools/MinecraftClientProxy.sln delete mode 100644 DebugTools/MinecraftClientProxy/Compression/CRC32.cs delete mode 100644 DebugTools/MinecraftClientProxy/Compression/Deflate.cs delete mode 100644 DebugTools/MinecraftClientProxy/Compression/GZipStream.cs delete mode 100644 DebugTools/MinecraftClientProxy/Compression/InfTree.cs delete mode 100644 DebugTools/MinecraftClientProxy/Compression/Inflate.cs delete mode 100644 DebugTools/MinecraftClientProxy/Compression/Tree.cs delete mode 100644 DebugTools/MinecraftClientProxy/Compression/Zlib.cs delete mode 100644 DebugTools/MinecraftClientProxy/Compression/ZlibBaseStream.cs delete mode 100644 DebugTools/MinecraftClientProxy/Compression/ZlibCodec.cs delete mode 100644 DebugTools/MinecraftClientProxy/Compression/ZlibConstants.cs delete mode 100644 DebugTools/MinecraftClientProxy/Compression/ZlibStream.cs delete mode 100644 DebugTools/MinecraftClientProxy/MinecraftClientProxy.csproj delete mode 100644 DebugTools/MinecraftClientProxy/PacketProxy.cs delete mode 100644 DebugTools/MinecraftClientProxy/Program.cs delete mode 100644 DebugTools/MinecraftClientProxy/Properties/AssemblyInfo.cs delete mode 100644 DebugTools/MinecraftClientProxy/ZlibUtils.cs delete mode 100644 DebugTools/README.txt delete mode 100644 Docker/Dockerfile delete mode 100644 Docker/docker-compose.yml delete mode 100644 Docker/start-latest.sh create mode 100644 Dockerfile create mode 100644 Mcc.slnx delete mode 100644 MinecraftClient.Tests/AutoRelogRetryPolicyTests.cs delete mode 100644 MinecraftClient.Tests/BlockStatePropertiesTests.cs delete mode 100644 MinecraftClient.Tests/CSharpRunnerTests.cs delete mode 100644 MinecraftClient.Tests/ChatTypeHolderTests.cs delete mode 100644 MinecraftClient.Tests/McClientConnectionFailureTests.cs delete mode 100644 MinecraftClient.Tests/MinecraftClient.Tests.csproj delete mode 100644 MinecraftClient.Tests/RestartCoordinatorTests.cs delete mode 100644 MinecraftClient.Tests/SocketWrapperTests.cs delete mode 100644 MinecraftClient.Tests/Usings.cs delete mode 100644 MinecraftClient.sln delete mode 100644 MinecraftClient/Achievement.cs delete mode 100644 MinecraftClient/AutoTimeout.cs delete mode 100644 MinecraftClient/ChatBots/Alerts.cs delete mode 100644 MinecraftClient/ChatBots/AntiAFK.cs delete mode 100644 MinecraftClient/ChatBots/AutoAttack.cs delete mode 100644 MinecraftClient/ChatBots/AutoCraft.cs delete mode 100644 MinecraftClient/ChatBots/AutoDig.cs delete mode 100644 MinecraftClient/ChatBots/AutoDrop.cs delete mode 100644 MinecraftClient/ChatBots/AutoEat.cs delete mode 100644 MinecraftClient/ChatBots/AutoFishing.cs delete mode 100644 MinecraftClient/ChatBots/AutoRelog.cs delete mode 100644 MinecraftClient/ChatBots/AutoRelogRetryPolicy.cs delete mode 100644 MinecraftClient/ChatBots/AutoRespond.cs delete mode 100644 MinecraftClient/ChatBots/ChatLog.cs delete mode 100644 MinecraftClient/ChatBots/DiscordBridge.cs delete mode 100644 MinecraftClient/ChatBots/DiscordRpc.cs delete mode 100644 MinecraftClient/ChatBots/Farmer.cs delete mode 100644 MinecraftClient/ChatBots/FileInputBot.cs delete mode 100644 MinecraftClient/ChatBots/FollowPlayer.cs delete mode 100644 MinecraftClient/ChatBots/HangmanGame.cs delete mode 100644 MinecraftClient/ChatBots/ItemsCollector.cs delete mode 100644 MinecraftClient/ChatBots/Mailer.cs delete mode 100644 MinecraftClient/ChatBots/Map.cs delete mode 100644 MinecraftClient/ChatBots/McpServer.cs delete mode 100644 MinecraftClient/ChatBots/PlayerListLogger.cs delete mode 100644 MinecraftClient/ChatBots/RemoteControl.cs delete mode 100644 MinecraftClient/ChatBots/ReplayCapture.cs delete mode 100644 MinecraftClient/ChatBots/Script.cs delete mode 100644 MinecraftClient/ChatBots/ScriptScheduler.cs delete mode 100644 MinecraftClient/ChatBots/TelegramBridge.cs delete mode 100644 MinecraftClient/ChatBots/TestBot.cs delete mode 100644 MinecraftClient/ClassicConsoleBackend.cs delete mode 100644 MinecraftClient/ColorHelper.cs delete mode 100644 MinecraftClient/Command.cs delete mode 100644 MinecraftClient/CommandHandler/ArgumentType/AccountNickArgumentType.cs delete mode 100644 MinecraftClient/CommandHandler/ArgumentType/AutoCraftRecipeNameArgumentType.cs delete mode 100644 MinecraftClient/CommandHandler/ArgumentType/BotNameArgumentType.cs delete mode 100644 MinecraftClient/CommandHandler/ArgumentType/EntityTypeArgumentType.cs delete mode 100644 MinecraftClient/CommandHandler/ArgumentType/FarmerCropTypeArgumentType.cs delete mode 100644 MinecraftClient/CommandHandler/ArgumentType/HotbarSlotArgumentType.cs delete mode 100644 MinecraftClient/CommandHandler/ArgumentType/InventoryActionArgumentType.cs delete mode 100644 MinecraftClient/CommandHandler/ArgumentType/InventoryIdArgumentType.cs delete mode 100644 MinecraftClient/CommandHandler/ArgumentType/InventorySlotArgumentType.cs delete mode 100644 MinecraftClient/CommandHandler/ArgumentType/ItemTypeArgumentType.cs delete mode 100644 MinecraftClient/CommandHandler/ArgumentType/LocationArgumentType.cs delete mode 100644 MinecraftClient/CommandHandler/ArgumentType/MapBotMapIdArgumentType.cs delete mode 100644 MinecraftClient/CommandHandler/ArgumentType/PlayerNameArgumentType.cs delete mode 100644 MinecraftClient/CommandHandler/ArgumentType/ScriptNameArgumentType.cs delete mode 100644 MinecraftClient/CommandHandler/ArgumentType/ServerNickArgumentType.cs delete mode 100644 MinecraftClient/CommandHandler/ArgumentType/TupleArgumentType.cs delete mode 100644 MinecraftClient/CommandHandler/CmdResult.cs delete mode 100644 MinecraftClient/CommandHandler/MccArguments.cs delete mode 100644 MinecraftClient/CommandHandler/Patch/CommandDispatcherExtensions.cs delete mode 100644 MinecraftClient/CommandHandler/Patch/CommandNodeExtensions.cs delete mode 100644 MinecraftClient/CommandHandler/SuggestionTooltip.cs delete mode 100644 MinecraftClient/Commands/AchievementCommand.cs delete mode 100644 MinecraftClient/Commands/Animation.cs delete mode 100644 MinecraftClient/Commands/Bed.cs delete mode 100644 MinecraftClient/Commands/BlockInfo.cs delete mode 100644 MinecraftClient/Commands/Book.cs delete mode 100644 MinecraftClient/Commands/Bots.cs delete mode 100644 MinecraftClient/Commands/ChangeSlot.cs delete mode 100644 MinecraftClient/Commands/Chunk.cs delete mode 100644 MinecraftClient/Commands/ClearConsole.cs delete mode 100644 MinecraftClient/Commands/Connect.cs delete mode 100644 MinecraftClient/Commands/ConsoleChat.cs delete mode 100644 MinecraftClient/Commands/Debug.cs delete mode 100644 MinecraftClient/Commands/Dialog.cs delete mode 100644 MinecraftClient/Commands/Dig.cs delete mode 100644 MinecraftClient/Commands/DropItem.cs delete mode 100644 MinecraftClient/Commands/EffectsCommand.cs delete mode 100644 MinecraftClient/Commands/Enchant.cs delete mode 100644 MinecraftClient/Commands/Entitycmd.cs delete mode 100644 MinecraftClient/Commands/ExecIf.cs delete mode 100644 MinecraftClient/Commands/ExecMulti.cs delete mode 100644 MinecraftClient/Commands/Exit.cs delete mode 100644 MinecraftClient/Commands/Health.cs delete mode 100644 MinecraftClient/Commands/Help.cs delete mode 100644 MinecraftClient/Commands/Inventory.cs delete mode 100644 MinecraftClient/Commands/List.cs delete mode 100644 MinecraftClient/Commands/Log.cs delete mode 100644 MinecraftClient/Commands/Look.cs delete mode 100644 MinecraftClient/Commands/Minimap.cs delete mode 100644 MinecraftClient/Commands/Move.cs delete mode 100644 MinecraftClient/Commands/NameItem.cs delete mode 100644 MinecraftClient/Commands/RecipeBook.cs delete mode 100644 MinecraftClient/Commands/Reco.cs delete mode 100644 MinecraftClient/Commands/Reload.cs delete mode 100644 MinecraftClient/Commands/Respawn.cs delete mode 100644 MinecraftClient/Commands/Script.cs delete mode 100644 MinecraftClient/Commands/Send.cs delete mode 100644 MinecraftClient/Commands/Set.cs delete mode 100644 MinecraftClient/Commands/SetRnd.cs delete mode 100644 MinecraftClient/Commands/Sneak.cs delete mode 100644 MinecraftClient/Commands/Tab.cs delete mode 100644 MinecraftClient/Commands/Teams.cs delete mode 100644 MinecraftClient/Commands/Tps.cs delete mode 100644 MinecraftClient/Commands/Tryout.cs delete mode 100644 MinecraftClient/Commands/Upgrade.cs delete mode 100644 MinecraftClient/Commands/UseItem.cs delete mode 100644 MinecraftClient/Commands/Useblock.cs delete mode 100644 MinecraftClient/ConnectionAttemptLifecycle.cs delete mode 100644 MinecraftClient/ConsoleIO.cs delete mode 100644 MinecraftClient/ConsoleInputRouter.cs delete mode 100644 MinecraftClient/Crypto/AesCfb8Stream.cs delete mode 100644 MinecraftClient/Crypto/CryptoHandler.cs delete mode 100644 MinecraftClient/Crypto/FastAes.cs delete mode 100644 MinecraftClient/Dialogs/DialogFormatter.cs delete mode 100644 MinecraftClient/Dialogs/DialogManager.cs delete mode 100644 MinecraftClient/Dialogs/DialogModels.cs delete mode 100644 MinecraftClient/ExtensionMethods.cs delete mode 100644 MinecraftClient/FileMonitor.cs delete mode 100644 MinecraftClient/IConsoleBackend.cs delete mode 100644 MinecraftClient/INIFile.cs delete mode 100644 MinecraftClient/Inventory/BookContent.cs delete mode 100644 MinecraftClient/Inventory/BookPage.cs delete mode 100644 MinecraftClient/Inventory/Container.cs delete mode 100644 MinecraftClient/Inventory/ContainerExtensions.cs delete mode 100644 MinecraftClient/Inventory/ContainerType.cs delete mode 100644 MinecraftClient/Inventory/ContainerTypeExtensions.cs delete mode 100644 MinecraftClient/Inventory/EffectData.cs delete mode 100644 MinecraftClient/Inventory/Effects.cs delete mode 100644 MinecraftClient/Inventory/Enchantment.cs delete mode 100644 MinecraftClient/Inventory/EnchantmentData.cs delete mode 100644 MinecraftClient/Inventory/EnchantmentMapping.cs delete mode 100644 MinecraftClient/Inventory/EnchantmentPropertyInfo.cs delete mode 100644 MinecraftClient/Inventory/Enchantments.cs delete mode 100644 MinecraftClient/Inventory/Hand.cs delete mode 100644 MinecraftClient/Inventory/Item.cs delete mode 100644 MinecraftClient/Inventory/ItemMovingHelper.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette110.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette111.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette112.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette113.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette1132.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette114.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette115.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette1161.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette1162.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette117.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette118.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette119.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette1193.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette1194.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette120.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette1204.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette1206.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette121.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette12111.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette1212.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette1214.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette1215.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette1216.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette1217.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette1219.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette18.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette19.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette261.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPalette262.cs delete mode 100644 MinecraftClient/Inventory/ItemPalettes/ItemPaletteGenerator.cs delete mode 100644 MinecraftClient/Inventory/ItemRarity.cs delete mode 100644 MinecraftClient/Inventory/ItemType.cs delete mode 100644 MinecraftClient/Inventory/ItemTypeExtensions.cs delete mode 100644 MinecraftClient/Inventory/SuspiciousStewEffect.cs delete mode 100644 MinecraftClient/Inventory/TrimAssetOverride.cs delete mode 100644 MinecraftClient/Inventory/VillagerInfo.cs delete mode 100644 MinecraftClient/Inventory/VillagerTrade.cs delete mode 100644 MinecraftClient/Inventory/WindowActionType.cs delete mode 100644 MinecraftClient/Json.cs delete mode 100644 MinecraftClient/LegacyAchievementCatalog.cs delete mode 100644 MinecraftClient/Logger/FileLogLogger.cs delete mode 100644 MinecraftClient/Logger/FilteredLogger.cs delete mode 100644 MinecraftClient/Logger/ILogger.cs delete mode 100644 MinecraftClient/Logger/LoggerBase.cs delete mode 100644 MinecraftClient/Mapping/Block.cs delete mode 100644 MinecraftClient/Mapping/BlockExtension.cs delete mode 100644 MinecraftClient/Mapping/BlockHardness.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/BlockPalette.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/BlockPalette120.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/BlockPaletteGenerator.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/BlockStateDefinition.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette112.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette113.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette114.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette115.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette116.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette117.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette119.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette1193.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette1194.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette1204.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette1206.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette1212.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette1214.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette1215.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette1216.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette1219.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette261.cs delete mode 100644 MinecraftClient/Mapping/BlockPalettes/Palette262.cs delete mode 100644 MinecraftClient/Mapping/Chunk.cs delete mode 100644 MinecraftClient/Mapping/ChunkColumn.cs delete mode 100644 MinecraftClient/Mapping/CombatEventType.cs delete mode 100644 MinecraftClient/Mapping/CommandBlockFlags.cs delete mode 100644 MinecraftClient/Mapping/CommandBlockMode.cs delete mode 100644 MinecraftClient/Mapping/Dimension.cs delete mode 100644 MinecraftClient/Mapping/Direction.cs delete mode 100644 MinecraftClient/Mapping/DirectionExtensions.cs delete mode 100644 MinecraftClient/Mapping/Entity.cs delete mode 100644 MinecraftClient/Mapping/EntityMetaDataType.cs delete mode 100644 MinecraftClient/Mapping/EntityMetadataPalette.cs delete mode 100644 MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1122.cs delete mode 100644 MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1191.cs delete mode 100644 MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1193.cs delete mode 100644 MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1194.cs delete mode 100644 MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1206.cs delete mode 100644 MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette12111.cs delete mode 100644 MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1215.cs delete mode 100644 MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1219.cs delete mode 100644 MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette18.cs delete mode 100644 MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette261.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette11194.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette112.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette113.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette114.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette115.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette1161.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette1162.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette117.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette119.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette1193.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette120.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette1204.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette1206.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette12111.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette1212.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette1214.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette1215.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette1216.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette1219.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette18.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette261.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPalette262.cs delete mode 100644 MinecraftClient/Mapping/EntityPalettes/EntityPaletteGenerator.cs delete mode 100644 MinecraftClient/Mapping/EntityPose.cs delete mode 100644 MinecraftClient/Mapping/EntityType.cs delete mode 100644 MinecraftClient/Mapping/EntityTypeExtensions.cs delete mode 100644 MinecraftClient/Mapping/InteractType.cs delete mode 100644 MinecraftClient/Mapping/Location.cs delete mode 100644 MinecraftClient/Mapping/MapIcon.cs delete mode 100644 MinecraftClient/Mapping/MapIconType.cs delete mode 100644 MinecraftClient/Mapping/Material.cs delete mode 100644 MinecraftClient/Mapping/Material2Tool.cs delete mode 100644 MinecraftClient/Mapping/MaterialExtensions.cs delete mode 100644 MinecraftClient/Mapping/MessageFilterType.cs delete mode 100644 MinecraftClient/Mapping/MiningCalculator.cs delete mode 100644 MinecraftClient/Mapping/Movement.cs delete mode 100644 MinecraftClient/Mapping/PlayerTeam.cs delete mode 100644 MinecraftClient/Mapping/RaycastHelper.cs delete mode 100644 MinecraftClient/Mapping/VillagerInfo.cs delete mode 100644 MinecraftClient/Mapping/World.cs delete mode 100644 MinecraftClient/McClient.cs delete mode 100644 MinecraftClient/Mcp/IMccMcpCapabilities.cs delete mode 100644 MinecraftClient/Mcp/MccEmbeddedMcpHost.cs delete mode 100644 MinecraftClient/Mcp/MccMcpCapabilities.cs delete mode 100644 MinecraftClient/Mcp/MccMcpChatHistory.cs delete mode 100644 MinecraftClient/Mcp/MccMcpConfig.cs delete mode 100644 MinecraftClient/Mcp/MccMcpGuidanceProvider.cs delete mode 100644 MinecraftClient/Mcp/MccMcpPromptSet.cs delete mode 100644 MinecraftClient/Mcp/MccMcpRecentEventStore.cs delete mode 100644 MinecraftClient/Mcp/MccMcpResult.cs delete mode 100644 MinecraftClient/Mcp/MccMcpRuntimeStateStore.cs delete mode 100644 MinecraftClient/Mcp/MccMcpToolSet.cs delete mode 100644 MinecraftClient/Mcp/Prompts/MccMcpOperatorPrompt.md delete mode 100644 MinecraftClient/MinecraftClient.csproj delete mode 100644 MinecraftClient/Physics/Aabb.cs delete mode 100644 MinecraftClient/Physics/BlockShapeData.json delete mode 100644 MinecraftClient/Physics/BlockShapes.cs delete mode 100644 MinecraftClient/Physics/CollisionDetector.cs delete mode 100644 MinecraftClient/Physics/MovementInput.cs delete mode 100644 MinecraftClient/Physics/PhysicsConsts.cs delete mode 100644 MinecraftClient/Physics/PlayerPhysics.cs delete mode 100644 MinecraftClient/Physics/Vec3d.cs delete mode 100644 MinecraftClient/Program.cs delete mode 100644 MinecraftClient/Properties/AssemblyInfo.cs delete mode 100644 MinecraftClient/Protocol/DataTypeGenerator.cs delete mode 100644 MinecraftClient/Protocol/Dialogs/DialogNbtParser.cs delete mode 100644 MinecraftClient/Protocol/EntityActionType.cs delete mode 100644 MinecraftClient/Protocol/GuidExtensions.cs delete mode 100644 MinecraftClient/Protocol/Handlers/ConfigurationPacketTypesIn.cs delete mode 100644 MinecraftClient/Protocol/Handlers/ConfigurationPacketTypesOut.cs delete mode 100644 MinecraftClient/Protocol/Handlers/DataTypes.cs delete mode 100755 MinecraftClient/Protocol/Handlers/Forge/FMLHandshakeClientState.cs delete mode 100755 MinecraftClient/Protocol/Handlers/Forge/FMLHandshakeDiscriminator.cs delete mode 100644 MinecraftClient/Protocol/Handlers/Forge/FMLVersion.cs delete mode 100755 MinecraftClient/Protocol/Handlers/Forge/ForgeInfo.cs delete mode 100644 MinecraftClient/Protocol/Handlers/Packet/s2c/DeclareCommands.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette110.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette112.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1122.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette113.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette114.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette115.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette116.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1162.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette117.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette118.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette119.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1192.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1193.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1194.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1202.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1204.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1206.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette121.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1212.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1214.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1215.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1216.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1219.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette17.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette18.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette19.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette261.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPaletteHelper.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketPalettes/PacketTypePalette.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketType18Handler.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketTypesIn.cs delete mode 100644 MinecraftClient/Protocol/Handlers/PacketTypesOut.cs delete mode 100644 MinecraftClient/Protocol/Handlers/Protocol16.cs delete mode 100644 MinecraftClient/Protocol/Handlers/Protocol18.cs delete mode 100644 MinecraftClient/Protocol/Handlers/Protocol18Forge.cs delete mode 100644 MinecraftClient/Protocol/Handlers/Protocol18Terrain.cs delete mode 100644 MinecraftClient/Protocol/Handlers/SocketWrapper.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/AttributeModifiersComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BannerPatternsComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BaseColorComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BeesComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BlockStateComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BundleContentsComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CanBreakComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CanPlaceOnComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ChargedProjectilesComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ContainerComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ContainerLootComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CreativeSlotLockComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CustomDataComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CustomModelDataComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CustomModelDataComponent1206.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CustomNameComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/DamageComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/DebugStickStateComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/DyeColorComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/EnchantmentGlintOverrideComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/EnchantmentsComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/EntityDataComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/FireResistantComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/FireworkExplosionComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/FireworksComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/FoodComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/HideAdditionalTooltipComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/HideTooltipComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/InstrumentComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/IntangibleProjectileComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ItemNameComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/LockComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/LodestoneTrackerComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/LoreComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MapColorComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MapDecorationsComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MapIdComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MapPostProcessingComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MaxDamageComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MaxStackSizeComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/NoteBlockSoundComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/OminousBottleAmplifierComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/PotDecorationsComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/PotionContentsComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ProfileComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/RarityComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/RecipesComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/RepairCostComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/StoredEnchantmentsComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/SuspiciousStewEffectsComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ToolComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/TrimComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/UnbreakableComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/WritableBookContentComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/WrittenBookContentComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21/JukeBoxPlayableComponent121.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/AttackRangeComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/KineticWeaponComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/PiercingWeaponComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/RegistryEitherHolderComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/SwingAnimationComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/UseEffectsComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/ConsumableComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/DamageResistantComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/DeathProtectionComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/EnchantableComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/EquippableComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/FoodComponent1212.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/GliderComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/ItemModelComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/PotionContentsComponent1212.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/RepairableComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/TooltipStyleComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/UseCooldownComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/UseRemainderComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/AdventureModePredicateComponents1215.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/AttributeModifiersComponent1215.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/BlocksAttacksComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/DyeColorComponent1215.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/EitherHolderComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/EnchantmentsComponent1215.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/EquippableComponent1215.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/InstrumentComponent1215.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/JukeBoxPlayableComponent1215.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/PaintingVariantHolderComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/PotionDurationScaleComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/ProvidesBannerPatternsComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/ProvidesTrimMaterialComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/SoundEventHolderComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/StoredEnchantmentsComponent1215.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/ToolComponent1215.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/TooltipDisplayComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/TrimComponent1215.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/VarIntComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/WeaponComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_8/AttributeModifiersComponent1218.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_8/EquippableComponent1218.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_9/BeesComponent1219.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/ContainerComponent261.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/HolderSetComponent261.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/InstrumentComponent261.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/ItemStackTemplateListComponent261.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/NbtTagComponent261.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/ProvidesTrimMaterialComponent261.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/TypedEntityDataComponent261.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/UseRemainderComponent261.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_2/SulfurCubeContentComponent262.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/EmptyComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/StructuredComponentCodecHelpers.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/AttributeSubComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/BlockPredicateSubcomponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/BlockSetSubcomponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/DetailsSubComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/EffectSubComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/FireworkExplosionSubComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/PotionEffectSubComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/PropertySubComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/RuleSubComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_21/AttributeSubComponent121.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_21/SoundEventSubComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/SubComponents.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Components/TypedEntityDataComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Core/StructuredComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Core/StructuredComponentRegistry.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Core/SubComponent.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Core/SubComponentRegistry.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry1206.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry121.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry12111.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry1212.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry1215.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry261.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry262.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/Subcomponents/SubComponentRegistry1206.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/Subcomponents/SubComponentRegistry121.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/Subcomponents/SubComponentRegistry1212.cs delete mode 100644 MinecraftClient/Protocol/Handlers/StructuredComponents/StructuredComponentsHandler.cs delete mode 100644 MinecraftClient/Protocol/Handlers/ZlibUtils.cs delete mode 100644 MinecraftClient/Protocol/IMinecraftCom.cs delete mode 100644 MinecraftClient/Protocol/IMinecraftComHandler.cs delete mode 100644 MinecraftClient/Protocol/JwtPayloadDecode.cs delete mode 100644 MinecraftClient/Protocol/Message/ChatMessage.cs delete mode 100644 MinecraftClient/Protocol/Message/ChatParser.cs delete mode 100644 MinecraftClient/Protocol/Message/LastSeenMessageList.cs delete mode 100644 MinecraftClient/Protocol/MicrosoftAuthentication.cs delete mode 100644 MinecraftClient/Protocol/MojangAPI.cs delete mode 100644 MinecraftClient/Protocol/PlayerInfo.cs delete mode 100644 MinecraftClient/Protocol/ProfileKey/KeyUtils.cs delete mode 100644 MinecraftClient/Protocol/ProfileKey/KeysCache.cs delete mode 100644 MinecraftClient/Protocol/ProfileKey/PlayerKeyPair.cs delete mode 100644 MinecraftClient/Protocol/ProfileKey/PrivateKey.cs delete mode 100644 MinecraftClient/Protocol/ProfileKey/PublicKey.cs delete mode 100644 MinecraftClient/Protocol/ProtocolHandler.cs delete mode 100644 MinecraftClient/Protocol/ProxiedWebRequest.cs delete mode 100644 MinecraftClient/Protocol/ReplayHandler.cs delete mode 100644 MinecraftClient/Protocol/ServerStatusDisplay.cs delete mode 100644 MinecraftClient/Protocol/ServerStatusInfo.cs delete mode 100644 MinecraftClient/Protocol/Session/SessionCache.cs delete mode 100644 MinecraftClient/Protocol/Session/SessionToken.cs delete mode 100644 MinecraftClient/Proxy/ProxyHandler.cs delete mode 100644 MinecraftClient/RecipeBookRecipeEntry.cs delete mode 100644 MinecraftClient/Resources/AppIcon.ico delete mode 100644 MinecraftClient/Resources/AsciiArt/AsciiArt.Designer.cs delete mode 100644 MinecraftClient/Resources/AsciiArt/AsciiArt.resx delete mode 100644 MinecraftClient/Resources/ConfigComments/ConfigComments.Designer.cs delete mode 100644 MinecraftClient/Resources/ConfigComments/ConfigComments.resx delete mode 100644 MinecraftClient/Resources/MinecraftAssets.Designer.cs delete mode 100644 MinecraftClient/Resources/MinecraftAssets.resx delete mode 100644 MinecraftClient/Resources/Translations/Translations.Designer.cs delete mode 100644 MinecraftClient/Resources/Translations/Translations.resx delete mode 100644 MinecraftClient/Resources/appicon_creeper1.ico delete mode 100644 MinecraftClient/Resources/appicon_grassblock.ico delete mode 100644 MinecraftClient/Resources/appicon_terminal.ico delete mode 100644 MinecraftClient/Resources/en_us.json delete mode 100644 MinecraftClient/RestartCoordinator.cs delete mode 100644 MinecraftClient/Scripting/AssemblyResolver.cs delete mode 100644 MinecraftClient/Scripting/BotMovementLock.cs delete mode 100644 MinecraftClient/Scripting/CSharpRunner.cs delete mode 100644 MinecraftClient/Scripting/ChatBot.cs delete mode 100644 MinecraftClient/Scripting/DataPath.cs delete mode 100644 MinecraftClient/Scripting/DynamicRun/Builder/CompileRunner.cs delete mode 100644 MinecraftClient/Scripting/DynamicRun/Builder/Compiler.cs delete mode 100644 MinecraftClient/Scripting/DynamicRun/Builder/SimpleUnloadableAssemblyLoadContext.cs delete mode 100644 MinecraftClient/Scripting/MccGameApi.cs delete mode 100644 MinecraftClient/Scripting/MccGameCommon.cs delete mode 100644 MinecraftClient/Scripting/MccGameModels.cs delete mode 100644 MinecraftClient/Scripting/MccGameResult.cs delete mode 100644 MinecraftClient/Scripting/MccObservedState.cs delete mode 100644 MinecraftClient/Settings.cs delete mode 100644 MinecraftClient/TabList/TabListFormatter.cs delete mode 100644 MinecraftClient/TaskWithDelay.cs delete mode 100644 MinecraftClient/TaskWithResult.cs delete mode 100644 MinecraftClient/Tui/BookTuiHost.cs delete mode 100644 MinecraftClient/Tui/BrewingStandView.cs delete mode 100644 MinecraftClient/Tui/ContainerViewBase.cs delete mode 100644 MinecraftClient/Tui/ContainerViewModel.cs delete mode 100644 MinecraftClient/Tui/CraftingView.cs delete mode 100644 MinecraftClient/Tui/DialogTuiHost.cs delete mode 100644 MinecraftClient/Tui/EnchantingTableView.cs delete mode 100644 MinecraftClient/Tui/FurnaceView.cs delete mode 100644 MinecraftClient/Tui/GridContainerView.cs delete mode 100644 MinecraftClient/Tui/GrindstoneView.cs delete mode 100644 MinecraftClient/Tui/HopperView.cs delete mode 100644 MinecraftClient/Tui/IconGridBuilder.cs delete mode 100644 MinecraftClient/Tui/InventoryApp.cs delete mode 100644 MinecraftClient/Tui/InventoryMainView.cs delete mode 100644 MinecraftClient/Tui/InventoryTuiHost.cs delete mode 100644 MinecraftClient/Tui/InventoryViewModel.cs delete mode 100644 MinecraftClient/Tui/MainTuiView.cs delete mode 100644 MinecraftClient/Tui/MapOverlay.cs delete mode 100644 MinecraftClient/Tui/McColorParser.cs delete mode 100644 MinecraftClient/Tui/MccBannerPanelBuilder.cs delete mode 100644 MinecraftClient/Tui/MccTuiApp.cs delete mode 100644 MinecraftClient/Tui/MinimapColorMap.cs delete mode 100644 MinecraftClient/Tui/MinimapControl.cs delete mode 100644 MinecraftClient/Tui/MinimapEntityClassifier.cs delete mode 100644 MinecraftClient/Tui/ServerStatusPanelBuilder.cs delete mode 100644 MinecraftClient/Tui/SlotViewModel.cs delete mode 100644 MinecraftClient/Tui/TabListOverlay.cs delete mode 100644 MinecraftClient/Tui/TuiConsoleBackend.cs delete mode 100644 MinecraftClient/Tui/TuiTooltipService.cs delete mode 100644 MinecraftClient/UpgradeHelper.cs delete mode 100644 MinecraftClient/WinAPI/ConsoleIcon.cs delete mode 100644 MinecraftClient/WinAPI/ExitCleanUp.cs delete mode 100644 MinecraftClient/config/ChatBots/AutoLeaveOnLowHp.cs delete mode 100644 MinecraftClient/config/ChatBots/AutoLook.cs delete mode 100644 MinecraftClient/config/ChatBots/AutoTree.cs delete mode 100644 MinecraftClient/config/ChatBots/DiscordWebhook.cs delete mode 100644 MinecraftClient/config/ChatBots/EntityCount.cs delete mode 100644 MinecraftClient/config/ChatBots/MineCube.cs delete mode 100644 MinecraftClient/config/ChatBots/PayKassa.cs delete mode 100644 MinecraftClient/config/ChatBots/QIWIAPI.cs delete mode 100644 MinecraftClient/config/ChatBots/SugarCaneFarmer.cs delete mode 100644 MinecraftClient/config/ChatBots/SugarCaneMiner.cs delete mode 100644 MinecraftClient/config/ChatBots/TreeFarmer.cs delete mode 100644 MinecraftClient/config/ChatBots/VkMessager.cs delete mode 100644 MinecraftClient/config/ChatBots/WebSocketBot.cs delete mode 100644 MinecraftClient/config/README.md delete mode 100644 MinecraftClient/config/hangman-en.txt delete mode 100644 MinecraftClient/config/hangman-fr.txt delete mode 100644 MinecraftClient/config/sample-matches.ini delete mode 100644 MinecraftClient/config/sample-script-extended.cs delete mode 100644 MinecraftClient/config/sample-script-packet-capture.cs delete mode 100644 MinecraftClient/config/sample-script-pm-forwarder.cs delete mode 100644 MinecraftClient/config/sample-script-random-command.cs delete mode 100644 MinecraftClient/config/sample-script-tick-counter.cs delete mode 100644 MinecraftClient/config/sample-script-with-chatbot.cs delete mode 100644 MinecraftClient/config/sample-script-with-http-request.cs delete mode 100644 MinecraftClient/config/sample-script-with-task.cs delete mode 100644 MinecraftClient/config/sample-script-with-world-access.cs delete mode 100644 MinecraftClient/config/sample-script.cs delete mode 100644 MinecraftClient/config/sample-script.txt delete mode 100644 MinecraftClientGUI.sln delete mode 100644 MinecraftClientGUI/AppIcon.ico delete mode 100644 MinecraftClientGUI/Form1.Designer.cs delete mode 100644 MinecraftClientGUI/Form1.cs delete mode 100644 MinecraftClientGUI/Form1.resx delete mode 100644 MinecraftClientGUI/MinecraftClient.cs delete mode 100644 MinecraftClientGUI/MinecraftClientGUI.csproj delete mode 100644 MinecraftClientGUI/Program.cs delete mode 100644 MinecraftClientGUI/Properties/AssemblyInfo.cs delete mode 100644 MinecraftClientGUI/Properties/Resources.Designer.cs delete mode 100644 MinecraftClientGUI/Properties/Resources.resx delete mode 100644 MinecraftClientGUI/Properties/Settings.Designer.cs delete mode 100644 MinecraftClientGUI/Properties/Settings.settings delete mode 100644 MinecraftClientGUI/app.config delete mode 100644 MinecraftClientGUI/screenshot.png create mode 100644 NuGet.Config create mode 100644 NuGet.Local.Config create mode 100644 compose.yml delete mode 100644 docs/.vuepress/configs/gen_configs.py delete mode 100644 docs/.vuepress/configs/head.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/af.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/ar.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/ca.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/config_templete.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/cs.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/da.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/de.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/el.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/en.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/es.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/fi.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/fr.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/he.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/hu.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/it.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/ja.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/ko.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/lv.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/nl.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/no.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/pl.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/pt-BR.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/pt.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/ro.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/ru.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/sr-Cyrl.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/sv.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/tr.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/uk.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/vi.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/zh-Hans.ts delete mode 100644 docs/.vuepress/configs/l10n_configs/zh-Hant.ts delete mode 100644 docs/.vuepress/configs/locales_config.ts delete mode 100644 docs/.vuepress/public/README.md create mode 100644 docs/.vuepress/public/examples/beacon/census.bcn create mode 100644 docs/.vuepress/public/examples/beacon/guide/functions.bcn create mode 100644 docs/.vuepress/public/examples/beacon/guide/greeter.bcn create mode 100644 docs/.vuepress/public/examples/beacon/guide/hello.bcn create mode 100644 docs/.vuepress/public/examples/beacon/guide/price.bcn create mode 100644 docs/.vuepress/public/examples/beacon/guide/saved-counter.bcn create mode 100644 docs/.vuepress/public/examples/beacon/guide/schedule.bcn create mode 100644 docs/.vuepress/public/examples/beacon/guide/settings.bcn create mode 100644 docs/.vuepress/public/examples/beacon/guide/shop-caller.bcn create mode 100644 docs/.vuepress/public/examples/beacon/guide/shop.bcn create mode 100644 docs/.vuepress/public/examples/beacon/guide/values.bcn create mode 100644 docs/.vuepress/public/examples/beacon/guide/welcome-helper.bcn create mode 100644 docs/.vuepress/public/examples/beacon/inventory-report.bcn create mode 100644 docs/.vuepress/public/examples/beacon/lib/math.bcn create mode 100644 docs/.vuepress/public/examples/beacon/nearby-chests.bcn create mode 100644 docs/.vuepress/public/examples/beacon/optional-pricing.bcn create mode 100644 docs/.vuepress/public/examples/beacon/order.bcn create mode 100644 docs/.vuepress/public/examples/beacon/price-command.bcn create mode 100644 docs/.vuepress/public/examples/beacon/quiz.bcn create mode 100644 docs/.vuepress/public/examples/beacon/shared-counter.bcn create mode 100644 docs/.vuepress/public/examples/beacon/team-dialog.bcn create mode 100644 docs/.vuepress/public/examples/beacon/timers.bcn create mode 100644 docs/.vuepress/public/examples/beacon/total.bcn create mode 100644 docs/.vuepress/public/examples/beacon/tps-guard.bcn delete mode 100644 docs/.vuepress/public/redirect.html delete mode 100644 docs/.vuepress/public/redirect_assets/wallpaper/1.png delete mode 100644 docs/.vuepress/public/redirect_assets/wallpaper/2.png delete mode 100644 docs/.vuepress/public/redirect_assets/wallpaper/3.png delete mode 100644 docs/.vuepress/public/redirect_assets/wallpaper/4.png delete mode 100644 docs/.vuepress/public/redirect_assets/wallpaper/5.png delete mode 100644 docs/.vuepress/public/redirect_assets/wallpaper/6.png delete mode 100644 docs/.vuepress/public/redirect_assets/wallpaper/7.png delete mode 100644 docs/.vuepress/public/redirect_assets/wallpaper/8.png delete mode 100644 docs/.vuepress/translations/en.json create mode 100644 docs/.vuepress/ui/en.json delete mode 100644 docs/README.md create mode 100644 docs/beacon/capabilities.md create mode 100644 docs/beacon/commands.md create mode 100644 docs/beacon/events-and-game.md create mode 100644 docs/beacon/getting-started.md create mode 100644 docs/beacon/guide/01-first-file.md create mode 100644 docs/beacon/guide/02-values.md create mode 100644 docs/beacon/guide/03-functions.md create mode 100644 docs/beacon/guide/04-events.md create mode 100644 docs/beacon/guide/05-time.md create mode 100644 docs/beacon/guide/06-state.md create mode 100644 docs/beacon/guide/07-integrations.md create mode 100644 docs/beacon/guide/08-testing.md create mode 100644 docs/beacon/guide/09-complete-helper.md create mode 100644 docs/beacon/guide/index.md create mode 100644 docs/beacon/hosting-and-testing.md create mode 100644 docs/beacon/index.md create mode 100644 docs/beacon/language.md create mode 100644 docs/beacon/recipes.md create mode 100644 docs/beacon/standard-library.md create mode 100644 docs/beacon/state-and-integrations.md create mode 100644 docs/client/accounts.md create mode 100644 docs/client/automation.md create mode 100644 docs/client/chat.md create mode 100644 docs/client/configuration.md create mode 100644 docs/client/gameplay.md create mode 100644 docs/client/glossary.md create mode 100644 docs/client/index.md create mode 100644 docs/client/interface.md create mode 100644 docs/client/languages.md create mode 100644 docs/client/servers.md create mode 100644 docs/commands/achievement.md create mode 100644 docs/commands/animation.md create mode 100644 docs/commands/bed.md create mode 100644 docs/commands/blockinfo.md create mode 100644 docs/commands/book.md create mode 100644 docs/commands/changeslot.md create mode 100644 docs/commands/chunk.md create mode 100644 docs/commands/clear-console.md create mode 100644 docs/commands/connect.md create mode 100644 docs/commands/console-chat.md create mode 100644 docs/commands/debug.md create mode 100644 docs/commands/dialog.md create mode 100644 docs/commands/dig.md create mode 100644 docs/commands/dropitem.md create mode 100644 docs/commands/effects.md create mode 100644 docs/commands/enchant.md create mode 100644 docs/commands/entity.md create mode 100644 docs/commands/exit.md create mode 100644 docs/commands/health.md create mode 100644 docs/commands/help.md create mode 100644 docs/commands/index.md create mode 100644 docs/commands/inventory.md create mode 100644 docs/commands/lang.md create mode 100644 docs/commands/list.md create mode 100644 docs/commands/log.md create mode 100644 docs/commands/look.md create mode 100644 docs/commands/man.md create mode 100644 docs/commands/map.md create mode 100644 docs/commands/mcc-menu.md create mode 100644 docs/commands/minimap.md create mode 100644 docs/commands/move.md create mode 100644 docs/commands/nameitem.md create mode 100644 docs/commands/plugins.md create mode 100644 docs/commands/recipebook.md create mode 100644 docs/commands/reco.md create mode 100644 docs/commands/reload.md create mode 100644 docs/commands/respawn.md create mode 100644 docs/commands/scoreboard.md create mode 100644 docs/commands/scripts.md create mode 100644 docs/commands/send.md create mode 100644 docs/commands/servers.md create mode 100644 docs/commands/set.md create mode 100644 docs/commands/sneak.md create mode 100644 docs/commands/tab.md create mode 100644 docs/commands/teams.md create mode 100644 docs/commands/tps.md create mode 100644 docs/commands/useblock.md create mode 100644 docs/commands/useitem.md create mode 100644 docs/contributing/documentation.md create mode 100644 docs/contributing/index.md create mode 100644 docs/contributing/review.md create mode 100644 docs/contributing/translations.md create mode 100644 docs/contributing/windows.md create mode 100644 docs/deployment/docker.md create mode 100644 docs/deployment/index.md create mode 100644 docs/deployment/releases.md create mode 100644 docs/examples/beacon/README.md create mode 100644 docs/examples/beacon/census.bcn create mode 100644 docs/examples/beacon/guide/README.md create mode 100644 docs/examples/beacon/guide/functions.bcn create mode 100644 docs/examples/beacon/guide/greeter.bcn create mode 100644 docs/examples/beacon/guide/hello.bcn create mode 100644 docs/examples/beacon/guide/price.bcn create mode 100644 docs/examples/beacon/guide/saved-counter.bcn create mode 100644 docs/examples/beacon/guide/schedule.bcn create mode 100644 docs/examples/beacon/guide/settings.bcn create mode 100644 docs/examples/beacon/guide/shop-caller.bcn create mode 100644 docs/examples/beacon/guide/shop.bcn create mode 100644 docs/examples/beacon/guide/values.bcn create mode 100644 docs/examples/beacon/guide/welcome-helper.bcn create mode 100644 docs/examples/beacon/inventory-report.bcn create mode 100644 docs/examples/beacon/lib/math.bcn create mode 100644 docs/examples/beacon/nearby-chests.bcn create mode 100644 docs/examples/beacon/optional-pricing.bcn create mode 100644 docs/examples/beacon/order.bcn create mode 100644 docs/examples/beacon/price-command.bcn create mode 100644 docs/examples/beacon/quiz.bcn create mode 100644 docs/examples/beacon/shared-counter.bcn create mode 100644 docs/examples/beacon/team-dialog.bcn create mode 100644 docs/examples/beacon/timers.bcn create mode 100644 docs/examples/beacon/total.bcn create mode 100644 docs/examples/beacon/tps-guard.bcn create mode 100644 docs/getting-started/arguments.md create mode 100644 docs/getting-started/first-session.md create mode 100644 docs/getting-started/index.md create mode 100644 docs/getting-started/installation.md delete mode 100644 docs/guide/README.md delete mode 100644 docs/guide/ai-assisted-development.md delete mode 100644 docs/guide/chat-bots.md delete mode 100644 docs/guide/configuration.md delete mode 100644 docs/guide/contibuting.md delete mode 100644 docs/guide/creating-bots.md delete mode 100644 docs/guide/creating-text-script.md delete mode 100644 docs/guide/installation.md delete mode 100644 docs/guide/usage.md delete mode 100644 docs/guide/websocket/Commands.md delete mode 100644 docs/guide/websocket/Events.md delete mode 100644 docs/guide/websocket/README.md create mode 100644 docs/index.md create mode 100644 docs/marketplaces/creating.md create mode 100644 docs/marketplaces/format.md create mode 100644 docs/marketplaces/index.md create mode 100644 docs/marketplaces/using.md create mode 100644 docs/package-lock.json create mode 100644 docs/plugins/development/advanced-examples.md create mode 100644 docs/plugins/development/beacon-integration.md create mode 100644 docs/plugins/development/dependencies-and-loading.md create mode 100644 docs/plugins/development/getting-started.md create mode 100644 docs/plugins/development/index.md create mode 100644 docs/plugins/development/lifecycle-and-commands.md create mode 100644 docs/plugins/development/settings-and-resources.md create mode 100644 docs/plugins/development/testing-and-release.md create mode 100644 docs/plugins/development/tutorial/01-project.md create mode 100644 docs/plugins/development/tutorial/02-entry-and-sessions.md create mode 100644 docs/plugins/development/tutorial/03-settings-and-storage.md create mode 100644 docs/plugins/development/tutorial/04-commands-and-text.md create mode 100644 docs/plugins/development/tutorial/05-beacon.md create mode 100644 docs/plugins/development/tutorial/06-load-and-test.md create mode 100644 docs/plugins/development/tutorial/07-package-and-release.md create mode 100644 docs/plugins/development/tutorial/08-maintenance.md create mode 100644 docs/plugins/development/tutorial/index.md create mode 100644 docs/plugins/index.md create mode 100644 docs/plugins/managing.md create mode 100644 docs/plugins/official.md create mode 100644 docs/plugins/official/alerts.md create mode 100644 docs/plugins/official/anti-afk.md create mode 100644 docs/plugins/official/auto-attack.md create mode 100644 docs/plugins/official/auto-craft.md create mode 100644 docs/plugins/official/auto-dig.md create mode 100644 docs/plugins/official/auto-drop.md create mode 100644 docs/plugins/official/auto-eat.md create mode 100644 docs/plugins/official/auto-fishing.md create mode 100644 docs/plugins/official/auto-relog.md create mode 100644 docs/plugins/official/auto-respond.md create mode 100644 docs/plugins/official/channel-logger.md create mode 100644 docs/plugins/official/chat-log.md create mode 100644 docs/plugins/official/discord-bridge.md create mode 100644 docs/plugins/official/discord-rpc.md create mode 100644 docs/plugins/official/farmer.md create mode 100644 docs/plugins/official/follow-player.md create mode 100644 docs/plugins/official/items-collector.md create mode 100644 docs/plugins/official/llm-core.md create mode 100644 docs/plugins/official/map.md create mode 100644 docs/plugins/official/mcp-server.md create mode 100644 docs/plugins/official/player-list-logger.md create mode 100644 docs/plugins/official/remote-control.md create mode 100644 docs/plugins/official/replay-capture.md create mode 100644 docs/plugins/official/script-scheduler.md create mode 100644 docs/plugins/official/telegram-bridge.md create mode 100644 docs/troubleshooting/diagnostics.md create mode 100644 docs/troubleshooting/index.md delete mode 100644 docs/yarn.lock create mode 100644 global.json create mode 100644 src/Directory.Build.props create mode 100644 src/Directory.Packages.props create mode 100644 src/Mcc.Cli.Tests/Beacon/Fixtures/TempBeaconExtensionPlugin.cs create mode 100644 src/Mcc.Cli.Tests/Beacon/FormatTests.cs create mode 100644 src/Mcc.Cli.Tests/Beacon/LintTests.cs create mode 100644 src/Mcc.Cli.Tests/Beacon/OneShotAdapterTests.cs create mode 100644 src/Mcc.Cli.Tests/Beacon/ParityTests.cs create mode 100644 src/Mcc.Cli.Tests/Beacon/ScriptTestHelpers.cs create mode 100644 src/Mcc.Cli.Tests/Beacon/ScriptToolingTests.cs create mode 100644 src/Mcc.Cli.Tests/Beacon/StateAndLifecycleTests.cs create mode 100644 src/Mcc.Cli.Tests/Beacon/TempPluginExtensionTests.cs create mode 100644 src/Mcc.Cli.Tests/Commands/CommandMetadataTests.cs create mode 100644 src/Mcc.Cli.Tests/Commands/ManagementUiCommandTests.cs create mode 100644 src/Mcc.Cli.Tests/Commands/PluginsUiCommandTests.cs create mode 100644 src/Mcc.Cli.Tests/Configuration/DotEnvTests.cs create mode 100644 src/Mcc.Cli.Tests/Diagnostics/PacketCaptureWriterTests.cs create mode 100644 src/Mcc.Cli.Tests/Diagnostics/SessionDiagnosticsTests.cs create mode 100644 src/Mcc.Cli.Tests/Fakes/CaptureReader.cs create mode 100644 src/Mcc.Cli.Tests/Fakes/FakeBlockDataSource.cs create mode 100644 src/Mcc.Cli.Tests/Fakes/McPluginSessionHarness.cs create mode 100644 src/Mcc.Cli.Tests/Fakes/PluginRootFixture.cs create mode 100644 src/Mcc.Cli.Tests/Fakes/TestManifest.cs create mode 100644 src/Mcc.Cli.Tests/Fakes/TestPackages.cs create mode 100644 src/Mcc.Cli.Tests/Hosting/CliHostPrefixTests.cs create mode 100644 src/Mcc.Cli.Tests/Hosting/DeadSessionTests.cs create mode 100644 src/Mcc.Cli.Tests/Hosting/HostPresentationBoundaryTests.cs create mode 100644 src/Mcc.Cli.Tests/Hosting/IdlePluginClaimTests.cs create mode 100644 src/Mcc.Cli.Tests/Hosting/SessionNoticeTests.cs create mode 100644 src/Mcc.Cli.Tests/Localization/LocalizationTests.cs create mode 100644 src/Mcc.Cli.Tests/Logging/HostLoggingTests.cs create mode 100644 src/Mcc.Cli.Tests/Mcc.Cli.Tests.csproj create mode 100644 src/Mcc.Cli.Tests/Plugins/PluginValidatorTests.cs create mode 100644 src/Mcc.Cli.Tests/Presentation/AnsiColorizeTests.cs create mode 100644 src/Mcc.Cli.Tests/Presentation/AnsiComponentRendererTests.cs create mode 100644 src/Mcc.Cli.Tests/Presentation/ChatSurfaceNoticeTests.cs create mode 100644 src/Mcc.Cli.Tests/Presentation/ConsoleMapRendererTests.cs create mode 100644 src/Mcc.Cli.Tests/Presentation/HostTranslationsTests.cs create mode 100644 src/Mcc.Cli.Tests/Presentation/KickReasonFormattingTests.cs create mode 100644 src/Mcc.Cli.Tests/Presentation/LegacyBackgroundTests.cs create mode 100644 src/Mcc.Cli.Tests/Presentation/MarkdownRenderingTests.cs create mode 100644 src/Mcc.Cli.Tests/Presentation/MeterTests.cs create mode 100644 src/Mcc.Cli.Tests/Presentation/ResourcePackTests.cs create mode 100644 src/Mcc.Cli.Tests/Presentation/ServerFactsDisplayTests.cs create mode 100644 src/Mcc.Cli.Tests/Presentation/ServerStatusPanelTests.cs create mode 100644 src/Mcc.Cli.Tests/Presentation/SuggestionPopupRestoreTests.cs create mode 100644 src/Mcc.Cli.Tests/Presentation/TerminalCapabilityTests.cs create mode 100644 src/Mcc.Cli.Tests/Startup/CliArgumentsTests.cs create mode 100644 src/Mcc.Cli.Tests/Startup/CliHelpTests.cs create mode 100644 src/Mcc.Cli.Tests/Startup/GuidedLoginTests.cs create mode 100644 src/Mcc.Cli.Tests/TestingImports.cs create mode 100644 src/Mcc.Cli.Tests/Tui/ContainerLayoutTests.cs create mode 100644 src/Mcc.Cli.Tests/Tui/ManagementBrowserModelTests.cs create mode 100644 src/Mcc.Cli.Tests/Tui/MapColorsTests.cs create mode 100644 src/Mcc.Cli.Tests/Tui/MarkdownTuiRenderingTests.cs create mode 100644 src/Mcc.Cli.Tests/Tui/MinimapTests.cs create mode 100644 src/Mcc.Cli.Tests/Tui/PluginVersionsPageTests.cs create mode 100644 src/Mcc.Cli.Tests/Tui/ScoreboardWindowTests.cs create mode 100644 src/Mcc.Cli.Tests/Tui/SlotCellNameTests.cs create mode 100644 src/Mcc.Cli.Tests/Tui/TabListFormattingTests.cs create mode 100644 src/Mcc.Cli.Tests/Tui/TuiClipboardTests.cs create mode 100644 src/Mcc.Cli.Tests/Tui/TuiColorTests.cs create mode 100644 src/Mcc.Cli/BeaconTooling/BeaconCliParsing.cs create mode 100644 src/Mcc.Cli/BeaconTooling/BeaconFormatCli.cs create mode 100644 src/Mcc.Cli/BeaconTooling/BeaconFormatOneShot.cs create mode 100644 src/Mcc.Cli/BeaconTooling/BeaconLintCli.cs create mode 100644 src/Mcc.Cli/BeaconTooling/BeaconLintOneShot.cs create mode 100644 src/Mcc.Cli/BeaconTooling/BeaconOneShotTransport.cs create mode 100644 src/Mcc.Cli/BeaconTooling/BeaconRunCli.cs create mode 100644 src/Mcc.Cli/BeaconTooling/BeaconRunOneShot.cs create mode 100644 src/Mcc.Cli/Commands/ClearConsoleCommand.cs create mode 100644 src/Mcc.Cli/Commands/ConsoleChatCommand.cs create mode 100644 src/Mcc.Cli/Commands/ExitCommand.cs create mode 100644 src/Mcc.Cli/Commands/IMccNavigation.cs create mode 100644 src/Mcc.Cli/Commands/MccMenuCommand.cs create mode 100644 src/Mcc.Cli/Configuration/ConsoleHostConfig.cs create mode 100644 src/Mcc.Cli/Configuration/ConsoleTomlFile.cs create mode 100644 src/Mcc.Cli/Configuration/ConsoleTomlOverrideBinder.cs create mode 100644 src/Mcc.Cli/Configuration/DotEnv.cs create mode 100644 src/Mcc.Cli/Diagnostics/ClientReport.cs create mode 100644 src/Mcc.Cli/Diagnostics/DiagnosticsSettings.cs create mode 100644 src/Mcc.Cli/Diagnostics/EnvironmentReport.cs create mode 100644 src/Mcc.Cli/Diagnostics/PacketCaptureWriter.cs create mode 100644 src/Mcc.Cli/Diagnostics/ServerReport.cs create mode 100644 src/Mcc.Cli/Diagnostics/SessionDiagnostics.cs create mode 100644 src/Mcc.Cli/Diagnostics/SmokeExercise.cs create mode 100644 src/Mcc.Cli/Hosting/Classic/ConsoleAuthInteraction.cs create mode 100644 src/Mcc.Cli/Hosting/Classic/ConsoleCommandOutput.cs create mode 100644 src/Mcc.Cli/Hosting/Classic/ConsoleHostInterface.cs create mode 100644 src/Mcc.Cli/Hosting/Classic/ConsoleHostUi.cs create mode 100644 src/Mcc.Cli/Hosting/Classic/ConsoleResourcePackPrompt.cs create mode 100644 src/Mcc.Cli/Hosting/ConsoleHostState.cs create mode 100644 src/Mcc.Cli/Hosting/HostControl.cs create mode 100644 src/Mcc.Cli/Hosting/HostExit.cs create mode 100644 src/Mcc.Cli/Hosting/ProcessCloseGuard.cs create mode 100644 src/Mcc.Cli/Input/FileInputDriver.cs create mode 100644 src/Mcc.Cli/Localization/ContainerArt.Designer.cs create mode 100644 src/Mcc.Cli/Localization/MccStrings.Designer.cs create mode 100644 src/Mcc.Cli/Localization/Resources/ContainerArt.resx create mode 100644 src/Mcc.Cli/Localization/Resources/MccStrings.resx create mode 100644 src/Mcc.Cli/Localization/Strings.cs create mode 100644 src/Mcc.Cli/Localization/TextResources.cs create mode 100644 src/Mcc.Cli/Logging/ConsoleLogger.cs create mode 100644 src/Mcc.Cli/Logging/LogFileSink.cs create mode 100644 src/Mcc.Cli/Logging/LogFilter.cs create mode 100644 src/Mcc.Cli/Mcc.Cli.csproj create mode 100644 src/Mcc.Cli/Plugins/MarketplaceValidateOneShot.cs create mode 100644 src/Mcc.Cli/Plugins/PluginInstallPrompt.cs create mode 100644 src/Mcc.Cli/Plugins/PluginValidateOneShot.cs create mode 100644 src/Mcc.Cli/Presentation/Ansi.cs create mode 100644 src/Mcc.Cli/Presentation/AnsiColorMapping.cs create mode 100644 src/Mcc.Cli/Presentation/AnsiComponentRenderer.cs create mode 100644 src/Mcc.Cli/Presentation/ChatPresenter.cs create mode 100644 src/Mcc.Cli/Presentation/ChatStandingMarker.cs create mode 100644 src/Mcc.Cli/Presentation/ChunkMapRenderer.cs create mode 100644 src/Mcc.Cli/Presentation/ConsoleMapRenderer.cs create mode 100644 src/Mcc.Cli/Presentation/EffectAnnouncer.cs create mode 100644 src/Mcc.Cli/Presentation/GlyphModeResolver.cs create mode 100644 src/Mcc.Cli/Presentation/HostConsole.cs create mode 100644 src/Mcc.Cli/Presentation/LegacyBackground.cs create mode 100644 src/Mcc.Cli/Presentation/MarkdownConsoleRenderer.cs create mode 100644 src/Mcc.Cli/Presentation/MccGlyphs.cs create mode 100644 src/Mcc.Cli/Presentation/Meter.cs create mode 100644 src/Mcc.Cli/Presentation/PlayerStatusRenderer.cs create mode 100644 src/Mcc.Cli/Presentation/ResultFormatting.cs create mode 100644 src/Mcc.Cli/Presentation/RichConsole.cs create mode 100644 src/Mcc.Cli/Presentation/ServerStatusPanel.cs create mode 100644 src/Mcc.Cli/Presentation/SessionNotices.cs create mode 100644 src/Mcc.Cli/Presentation/TerminalCapability.cs create mode 100644 src/Mcc.Cli/Presentation/TerminalHelpRenderer.cs create mode 100644 src/Mcc.Cli/Program.cs create mode 100644 src/Mcc.Cli/README.md create mode 100644 src/Mcc.Cli/Resources/TextResources.fr.resx create mode 100644 src/Mcc.Cli/Resources/TextResources.resx create mode 100644 src/Mcc.Cli/Startup/CliArguments.cs create mode 100644 src/Mcc.Cli/Startup/CliHelp.cs create mode 100644 src/Mcc.Cli/Startup/ClientVersion.cs create mode 100644 src/Mcc.Cli/Startup/GuidedLogin.cs create mode 100644 src/Mcc.Cli/Startup/IdleStart.cs create mode 100644 src/Mcc.Cli/Tui/Authentication/TuiAuthInteraction.cs create mode 100644 src/Mcc.Cli/Tui/Authentication/TuiConnectDialog.cs create mode 100644 src/Mcc.Cli/Tui/Authentication/TuiGuidedLogin.cs create mode 100644 src/Mcc.Cli/Tui/Commands/TuiClearCommand.cs create mode 100644 src/Mcc.Cli/Tui/Container/ContainerLayout.cs create mode 100644 src/Mcc.Cli/Tui/Container/ContainerOverlay.cs create mode 100644 src/Mcc.Cli/Tui/Container/SlotCell.cs create mode 100644 src/Mcc.Cli/Tui/Hosting/MainTuiView.cs create mode 100644 src/Mcc.Cli/Tui/Hosting/MccTuiApp.cs create mode 100644 src/Mcc.Cli/Tui/Hosting/TuiBackend.cs create mode 100644 src/Mcc.Cli/Tui/Hosting/TuiCommandOutput.cs create mode 100644 src/Mcc.Cli/Tui/Hosting/TuiHost.cs create mode 100644 src/Mcc.Cli/Tui/Hosting/TuiHostInterface.cs create mode 100644 src/Mcc.Cli/Tui/Hosting/TuiHostUi.cs create mode 100644 src/Mcc.Cli/Tui/Input/TuiClipboard.cs create mode 100644 src/Mcc.Cli/Tui/Input/TuiCompletion.cs create mode 100644 src/Mcc.Cli/Tui/Input/TuiPrompt.cs create mode 100644 src/Mcc.Cli/Tui/Management/AdvancementBrowserPage.cs create mode 100644 src/Mcc.Cli/Tui/Management/ChunkBrowserPage.cs create mode 100644 src/Mcc.Cli/Tui/Management/CommandManualBrowserPage.cs create mode 100644 src/Mcc.Cli/Tui/Management/EntityBrowserPage.cs create mode 100644 src/Mcc.Cli/Tui/Management/ManagementUi.cs create mode 100644 src/Mcc.Cli/Tui/Management/ManagementWorkspace.cs create mode 100644 src/Mcc.Cli/Tui/Management/MccMenuPage.cs create mode 100644 src/Mcc.Cli/Tui/Management/RecipeBrowserPage.cs create mode 100644 src/Mcc.Cli/Tui/Management/ScriptEditorPage.cs create mode 100644 src/Mcc.Cli/Tui/Management/ScriptManagerPage.cs create mode 100644 src/Mcc.Cli/Tui/Management/ScriptReplPage.cs create mode 100644 src/Mcc.Cli/Tui/Management/ScriptSettingsPage.cs create mode 100644 src/Mcc.Cli/Tui/Map/MapColors.cs create mode 100644 src/Mcc.Cli/Tui/Map/MapCommand.cs create mode 100644 src/Mcc.Cli/Tui/Map/MapController.cs create mode 100644 src/Mcc.Cli/Tui/Map/MapOverlay.cs rename {MinecraftClient/Tui => src/Mcc.Cli/Tui/Minimap}/MinimapBlockColors.json (100%) create mode 100644 src/Mcc.Cli/Tui/Minimap/MinimapColorMap.cs create mode 100644 src/Mcc.Cli/Tui/Minimap/MinimapCommand.cs create mode 100644 src/Mcc.Cli/Tui/Minimap/MinimapControl.cs create mode 100644 src/Mcc.Cli/Tui/Minimap/MinimapController.cs rename {MinecraftClient/Tui => src/Mcc.Cli/Tui/Minimap}/MinimapEntityCategories.json (100%) create mode 100644 src/Mcc.Cli/Tui/Minimap/MinimapEntityClassifier.cs create mode 100644 src/Mcc.Cli/Tui/Minimap/MinimapEnums.cs create mode 100644 src/Mcc.Cli/Tui/Minimap/MinimapWindow.cs create mode 100644 src/Mcc.Cli/Tui/Overlays/BookOverlay.cs create mode 100644 src/Mcc.Cli/Tui/Overlays/DialogOverlay.cs create mode 100644 src/Mcc.Cli/Tui/Overlays/TabListOverlay.cs create mode 100644 src/Mcc.Cli/Tui/Plugins/PluginCatalogPage.cs create mode 100644 src/Mcc.Cli/Tui/Plugins/PluginDetailPage.cs create mode 100644 src/Mcc.Cli/Tui/Plugins/PluginInstallPage.cs create mode 100644 src/Mcc.Cli/Tui/Plugins/PluginListPage.cs create mode 100644 src/Mcc.Cli/Tui/Plugins/PluginManagerContext.cs create mode 100644 src/Mcc.Cli/Tui/Plugins/PluginManagerOverlay.cs create mode 100644 src/Mcc.Cli/Tui/Plugins/PluginMarketplacesPage.cs create mode 100644 src/Mcc.Cli/Tui/Plugins/PluginModal.cs create mode 100644 src/Mcc.Cli/Tui/Plugins/PluginSettingsModel.cs create mode 100644 src/Mcc.Cli/Tui/Plugins/PluginSettingsPage.cs create mode 100644 src/Mcc.Cli/Tui/Plugins/PluginToolsPage.cs create mode 100644 src/Mcc.Cli/Tui/Plugins/PluginUi.cs create mode 100644 src/Mcc.Cli/Tui/Plugins/PluginUninstallDialog.cs create mode 100644 src/Mcc.Cli/Tui/Plugins/PluginUpdatesPage.cs create mode 100644 src/Mcc.Cli/Tui/Plugins/PluginVersionPages.cs create mode 100644 src/Mcc.Cli/Tui/Presentation/BannerBuilder.cs create mode 100644 src/Mcc.Cli/Tui/Presentation/ComponentInlineRenderer.cs create mode 100644 src/Mcc.Cli/Tui/Presentation/LegacyTextInlines.cs create mode 100644 src/Mcc.Cli/Tui/Presentation/MarkdownTuiRenderer.cs create mode 100644 src/Mcc.Cli/Tui/Presentation/ServerStatusPanel.cs create mode 100644 src/Mcc.Cli/Tui/Presentation/StatusBarBuilder.cs create mode 100644 src/Mcc.Cli/Tui/Presentation/TabListFormatting.cs create mode 100644 src/Mcc.Cli/Tui/Presentation/TuiTooltipService.cs create mode 100644 src/Mcc.Cli/Tui/Scoreboard/ScoreboardWindow.cs create mode 100644 src/Mcc.Cli/Tui/Terminal/BrowserLauncher.cs create mode 100644 src/Mcc.Cli/Tui/Terminal/CursesEscapeDelay.cs create mode 100644 src/Mcc.Cli/Tui/Terminal/MonochromeConsoleColorMode.cs create mode 100644 src/Mcc.Cli/Tui/Terminal/TerminalRestore.cs create mode 100644 src/Mcc.Cli/Tui/Terminal/TuiViewport.cs create mode 100644 src/Mcc.Cli/Tui/TuiResourcePackPrompt.cs create mode 100644 src/README.md create mode 100644 tools/check_docs.py delete mode 100644 tools/decompile.sh delete mode 100644 tools/diff_registries.py delete mode 100644 tools/gen_block_color_map.py delete mode 100644 tools/gen_block_palette.py delete mode 100644 tools/gen_block_shapes.py delete mode 100644 tools/gen_command_argument_registry.py delete mode 100644 tools/gen_entity_category_map.py delete mode 100644 tools/gen_entity_metadata_palette.py delete mode 100644 tools/gen_entity_palette.py delete mode 100644 tools/gen_item_palette.py create mode 100644 tools/install_mcc.py create mode 100644 tools/localization/generate_strings.py create mode 100644 tools/localization/prepare_docs.py delete mode 100644 tools/mcc-debug.sh delete mode 100644 tools/mcc-log-tail.sh create mode 100644 tools/package-release.py delete mode 100755 tools/pull-translations.sh delete mode 100644 tools/run-creative-e2e.sh delete mode 100755 tools/run-dialog-test.sh delete mode 100755 tools/run-inventory-full-sweep.sh delete mode 100755 tools/run-structured-components-test.sh delete mode 100755 tools/test-mcc-env.sh create mode 100644 tools/test_installers.py delete mode 100755 tools/testing/auto_relog_fault_proxy.py delete mode 100644 tools/translate_crowdin.py create mode 100755 tools/umpkcap.py create mode 100644 tools/validate-marketplace.py create mode 100644 tools/windows/Common.ps1 create mode 100644 tools/windows/README.md create mode 100644 tools/windows/build.ps1 create mode 100644 tools/windows/clean.ps1 create mode 100644 tools/windows/publish.ps1 create mode 100644 tools/windows/run.ps1 create mode 100644 tools/windows/test.ps1 diff --git a/.agents/skills b/.agents/skills new file mode 120000 index 0000000000..4ca0ec66cd --- /dev/null +++ b/.agents/skills @@ -0,0 +1 @@ +../.skills \ No newline at end of file diff --git a/.codex/hooks.json b/.codex/hooks.json deleted file mode 100644 index d689ffa1b6..0000000000 --- a/.codex/hooks.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "hooks": { - "PreToolUse": [ - { - "matcher": "Bash", - "hooks": [ - { - "type": "command", - "command": "/usr/bin/python3 \"$(git rev-parse --show-toplevel)/.codex/hooks/pre_tool_use_mcc_build_guard.py\"", - "statusMessage": "Checking MCC build command policy" - } - ] - } - ] - } -} diff --git a/.codex/hooks/pre_tool_use_mcc_build_guard.py b/.codex/hooks/pre_tool_use_mcc_build_guard.py deleted file mode 100644 index fb6d3c1b7b..0000000000 --- a/.codex/hooks/pre_tool_use_mcc_build_guard.py +++ /dev/null @@ -1,67 +0,0 @@ -#!/usr/bin/env python3 -import json -import re -import sys - - -RAW_DOTNET_BUILD_RE = re.compile(r"(^|[\s;&|()])dotnet\s+build(\s|$)") -ABSOLUTE_DOTNET_BUILD_RE = re.compile(r"(^|[\s;&|()])/\S*dotnet\s+build(\s|$)") -RAW_DOTNET_PUBLISH_RE = re.compile(r"(^|[\s;&|()])dotnet\s+publish(\s|$)") -ABSOLUTE_DOTNET_PUBLISH_RE = re.compile(r"(^|[\s;&|()])/\S*dotnet\s+publish(\s|$)") - - -def main() -> int: - try: - payload = json.load(sys.stdin) - except json.JSONDecodeError: - return 0 - - command = payload.get("tool_input", {}).get("command", "") - if not isinstance(command, str) or not command: - return 0 - - if ABSOLUTE_DOTNET_BUILD_RE.search(command) or ABSOLUTE_DOTNET_PUBLISH_RE.search(command): - return 0 - - if RAW_DOTNET_BUILD_RE.search(command): - response = { - "hookSpecificOutput": { - "hookEventName": "PreToolUse", - "permissionDecision": "deny", - "permissionDecisionReason": ( - "Raw 'dotnet build' is blocked in this repository. " - "Use 'source tools/mcc-env.sh && mcc-build' instead so MCC temp-build routing stays active. " - "If you intentionally need the raw .NET CLI, call it by absolute path such as '/usr/bin/dotnet build ...' to bypass this guard." - ), - }, - "systemMessage": ( - "Blocked raw 'dotnet build'. Use 'source tools/mcc-env.sh && mcc-build'. " - "If you intentionally need raw .NET CLI behavior, call '/usr/bin/dotnet build ...' explicitly." - ), - } - json.dump(response, sys.stdout) - sys.stdout.write("\n") - elif RAW_DOTNET_PUBLISH_RE.search(command): - response = { - "hookSpecificOutput": { - "hookEventName": "PreToolUse", - "permissionDecision": "deny", - "permissionDecisionReason": ( - "Raw 'dotnet publish' is blocked in this repository. " - "Use 'source tools/mcc-env.sh && mcc-publish --rid ' instead so MCC publish defaults stay aligned with the repo workflow. " - "If you intentionally need the raw .NET CLI, call it by absolute path such as '/usr/bin/dotnet publish ...' to bypass this guard." - ), - }, - "systemMessage": ( - "Blocked raw 'dotnet publish'. Use 'source tools/mcc-env.sh && mcc-publish --rid '. " - "If you intentionally need raw .NET CLI behavior, call '/usr/bin/dotnet publish ...' explicitly." - ), - } - json.dump(response, sys.stdout) - sys.stdout.write("\n") - - return 0 - - -if __name__ == "__main__": - raise SystemExit(main()) diff --git a/.codex/skill b/.codex/skill new file mode 120000 index 0000000000..4ca0ec66cd --- /dev/null +++ b/.codex/skill @@ -0,0 +1 @@ +../.skills \ No newline at end of file diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000000..f82c60fcb4 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,16 @@ +.git +**/bin +**/obj +**/node_modules +docs +.skills +.claude +.agents +.codex +artifacts +configurations +plugins +data +MinecraftOfficial +**/.env +**/auth-tokens diff --git a/.github/workflows/build-and-release.yml b/.github/workflows/build-and-release.yml deleted file mode 100644 index 6c667ae10a..0000000000 --- a/.github/workflows/build-and-release.yml +++ /dev/null @@ -1,246 +0,0 @@ -name: Build MCC and Documents - -on: - push: - branches: - - master - workflow_dispatch: - -env: - PROJECT: "MinecraftClient" - target-version: "net10.0" - dotnet-version: "10.0.x" - compile-flags: "--self-contained=true -c Release -p:UseAppHost=true -p:IncludeNativeLibrariesForSelfExtract=true -p:EnableCompressionInSingleFile=true -p:DebugType=Embedded -p:PublishSingleFile=true" - -jobs: - determine-build: - runs-on: ubuntu-slim - outputs: - skip: ${{ steps.check-skip.outputs.skip }} - steps: - - name: Check skip CI - id: check-skip - run: | - LOWER=$(echo "$COMMIT_MSG" | tr '[:upper:]' '[:lower:]') - if echo "$LOWER" | grep -qE 'skip.?ci|ci.?skip'; then - echo "skip=true" >> $GITHUB_OUTPUT - else - echo "skip=false" >> $GITHUB_OUTPUT - fi - env: - COMMIT_MSG: ${{ github.event.head_commit.message }} - - fetch-translations: - strategy: - fail-fast: true - runs-on: ubuntu-latest - needs: determine-build - - if: ${{ needs.determine-build.outputs.skip != 'true' }} - - timeout-minutes: 15 - - steps: - - name: Check cache - uses: actions/cache/restore@v3 - id: cache-check - with: - path: ${{ github.workspace }}/* - key: "translation-${{ github.sha }}" - lookup-only: true - restore-keys: "translation-" - - - name: Checkout - if: steps.cache-check.outputs.cache-hit != 'true' - uses: actions/checkout@v3 - with: - fetch-depth: 0 - submodules: 'true' - - - name: Check Crowdin secrets - id: crowdin-check - run: | - if [ -z "$CROWDIN_PROJECT_ID" ] || [ -z "$CROWDIN_PERSONAL_TOKEN" ]; then - echo "available=false" >> $GITHUB_OUTPUT - else - echo "available=true" >> $GITHUB_OUTPUT - fi - env: - CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} - CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_TOKEN }} - - - name: Download translations from crowdin - uses: crowdin/github-action@v2.4.0 - if: steps.cache-check.outputs.cache-hit != 'true' && steps.crowdin-check.outputs.available == 'true' - with: - upload_sources: ${{ github.repository == 'MCCTeam/Minecraft-Console-Client' }} - upload_translations: false - download_translations: true - - localization_branch_name: l10n_master - create_pull_request: false - push_translations: false - - base_path: ${{ github.workspace }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} - CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_TOKEN }} - - - name: Save cache - uses: actions/cache/save@v3 - if: steps.cache-check.outputs.cache-hit != 'true' - with: - path: ${{ github.workspace }}/* - key: "translation-${{ github.sha }}" - - create-tag: - runs-on: ubuntu-slim - timeout-minutes: 5 # Wait 5 minutes in case of network issues/etc - needs: determine-build - if: ${{ needs.determine-build.outputs.skip != 'true' }} - steps: - - id: make-tag - run: | - TAG="$(date -u +'%Y%m%d')-${{ github.run_number }}" - echo "tag=$TAG" >> $GITHUB_OUTPUT - echo "TAG=$TAG" >> $GITHUB_ENV - - - name: Create Release Tag - uses: actions/github-script@v7 - with: - script: | - const tag = process.env.TAG; - try { - await github.rest.git.createRef({ - owner: context.repo.owner, - repo: context.repo.repo, - ref: `refs/tags/${tag}`, - sha: context.sha - }); - } catch(error) { - if (error.message.includes('already exists')) { - console.log(`Tag ${tag} already exists`); - } else { - throw error; - } - } - outputs: - build-tag: ${{ steps.make-tag.outputs.tag }} - - build: - runs-on: ubuntu-latest - # Check if we're not skipping build, tag is created, and translations successfully fetched (or skipped) - if: ${{ needs.determine-build.outputs.skip != 'true' && - needs.create-tag.result == 'success' && - (needs.fetch-translations.result == 'success' || needs.fetch-translations.result == 'skipped') - }} - needs: [determine-build, fetch-translations, create-tag] - timeout-minutes: 15 - strategy: - matrix: - target: [win-x86, win-x64, win-arm64, linux-x64, linux-arm, linux-arm64, osx-x64, osx-arm64] - - steps: - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - submodules: 'true' - - - name: Get Current Date - run: | - echo date_dashed=$(date -u +'%Y-%m-%d') >> $GITHUB_ENV - - - name: Restore Translations (if available) - uses: actions/cache/restore@v3 - with: - path: ${{ github.workspace }}/* - key: "translation-${{ github.sha }}" - restore-keys: "translation-" - - - name: Setup .NET SDK - uses: actions/setup-dotnet@v4 - with: - dotnet-version: ${{ env.dotnet-version }} - - - name: Setup Environment Variables - run: | - PROJECT_PATH=${{ github.workspace }}/${{ env.PROJECT }} - FILE_EXT=${{ (startsWith(matrix.target, 'win') && '.exe') || '' }} - TARGET_OUT_PATH=$PROJECT_PATH/bin/Release/${{ env.target-version }}/${{ matrix.target }}/publish/ - - echo "project-path=$PROJECT_PATH" >> $GITHUB_ENV - echo "file-ext=$FILE_EXT" >> $GITHUB_ENV - echo "target-out-path=$TARGET_OUT_PATH" >> $GITHUB_ENV - echo "assembly-info=$PROJECT_PATH/Properties/AssemblyInfo.cs" >> $GITHUB_ENV - echo "build-version-info=${{ needs.create-tag.outputs.build-tag }}" >> $GITHUB_ENV - echo "commit=$(echo ${{ github.sha }} | cut -c 1-7)" >> $GITHUB_ENV - - - name: Setup Binaries Path - run: | - echo built-executable-path=${{ env.target-out-path }}${{ env.PROJECT }}${{ env.file-ext }} >> $GITHUB_ENV - - - name: Set Version Info - run: | - echo '' >> ${{ env.assembly-info }} - echo "[assembly: AssemblyConfiguration(\"GitHub build ${{ github.run_number }}, built on ${{ env.date_dashed }} from commit ${{ env.commit }}\")]" >> ${{ env.assembly-info }} - - - name: Inject Sentry DSN (if applicable) - if: ${{ github.repository == 'MCCTeam/Minecraft-Console-Client' }} - run: | - grep -q 'SentryDSN = "";' ${{ env.project-path }}/Program.cs || { echo "SentryDSN pattern not found in Program.cs"; exit 1; } - sed -i -e 's|SentryDSN = "";|SentryDSN = "${{ secrets.SENTRY_DSN }}";|g' ${{ env.project-path }}/Program.cs - - - name: Build Target - run: dotnet publish ${{ env.project-path }}/${{ env.PROJECT }}.csproj -f ${{ env.target-version }} -r ${{ matrix.target }} ${{ env.compile-flags }} - env: - DOTNET_NOLOGO: true - - - name: Rename Binary - run: | - mv ${{ env.built-executable-path }} ${{ env.PROJECT }}-${{ env.build-version-info }}-${{ matrix.target }}${{ env.file-ext }} - - - name: Upload Artifact - uses: actions/upload-artifact@v4 - with: - name: ${{ env.PROJECT }}-${{ env.build-version-info }}-${{ matrix.target }} - path: ${{ env.PROJECT }}-${{ env.build-version-info }}-${{ matrix.target }}${{ env.file-ext }} - if-no-files-found: error - - create-release: - runs-on: ubuntu-slim - needs: [create-tag, build] - if: ${{ needs.build.result == 'success' && needs.create-tag.result == 'success' }} - steps: - - name: Download All Artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts/ - merge-multiple: true - - - name: Truncate commit message for release name - id: release-name - run: | - SUBJECT=$(echo "$COMMIT_MSG" | head -n 1) - MAX=220 - TRUNCATED="${SUBJECT:0:$MAX}" - echo "name=${BUILD_TAG}: $TRUNCATED" >> $GITHUB_OUTPUT - env: - COMMIT_MSG: ${{ github.event.head_commit.message }} - BUILD_TAG: ${{ needs.create-tag.outputs.build-tag }} - - - name: Create Release - uses: ncipollo/release-action@v1.14.0 - with: - token: ${{ secrets.GITHUB_TOKEN }} - artifacts: "artifacts/**/*" - tag: ${{ needs.create-tag.outputs.build-tag }} - name: ${{ steps.release-name.outputs.name }} - generateReleaseNotes: true - artifactErrorsFailBuild: true - allowUpdates: true - makeLatest: true - omitBodyDuringUpdate: true - omitNameDuringUpdate: true - replacesArtifacts: true diff --git a/.github/workflows/deploy-doc-only.yml b/.github/workflows/deploy-doc-only.yml deleted file mode 100644 index ba457093f6..0000000000 --- a/.github/workflows/deploy-doc-only.yml +++ /dev/null @@ -1,79 +0,0 @@ -name: Build Documents - -on: - schedule: - - cron: '45 0 * * *' - workflow_dispatch: - -jobs: - check-secrets: - runs-on: ubuntu-latest - outputs: - has-deploy-token: ${{ steps.check.outputs.has-deploy-token }} - steps: - - name: Check required secrets - id: check - run: | - if [ -z "$GH_PAGES_TOKEN" ]; then - echo "has-deploy-token=false" >> $GITHUB_OUTPUT - echo "::warning::GH_PAGES_TOKEN is not set, skipping documentation deployment." - else - echo "has-deploy-token=true" >> $GITHUB_OUTPUT - fi - env: - GH_PAGES_TOKEN: ${{ secrets.GH_PAGES_TOKEN }} - - Build: - runs-on: ubuntu-latest - needs: check-secrets - if: ${{ needs.check-secrets.outputs.has-deploy-token == 'true' }} - - steps: - - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - submodules: 'true' - - - name: Check Crowdin secrets - id: crowdin-check - run: | - if [ -z "$CROWDIN_PROJECT_ID" ] || [ -z "$CROWDIN_PERSONAL_TOKEN" ]; then - echo "available=false" >> $GITHUB_OUTPUT - echo "::warning::Crowdin secrets not set, skipping translation download." - else - echo "available=true" >> $GITHUB_OUTPUT - fi - env: - CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} - CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_TOKEN }} - - - name: Download translations from crowdin - if: ${{ steps.crowdin-check.outputs.available == 'true' }} - uses: crowdin/github-action@v2.4.0 - with: - upload_sources: false - upload_translations: false - download_translations: true - - localization_branch_name: l10n_master - create_pull_request: false - push_translations: false - - base_path: ${{ github.workspace }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} - CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_TOKEN }} - - - name: Deploy Documentation Site - uses: jenkey2011/vuepress-deploy@master - env: - ACCESS_TOKEN: ${{ secrets.GH_PAGES_TOKEN }} - TARGET_REPO: MCCTeam/MCCTeam.github.io - TARGET_BRANCH: master - BUILD_SCRIPT: export NODE_OPTIONS=--max-old-space-size=8192 && yarn --cwd ./docs/ && yarn --cwd ./docs/ docs:build - BUILD_DIR: docs/.vuepress/dist - COMMIT_MESSAGE: Build from ${{ github.sha }} - CNAME: https://mccteam.github.io diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000000..6f627d63f2 --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,31 @@ +name: Documentation +on: + push: + branches: [master, main, feat/mcc-2.0] + pull_request: + workflow_dispatch: +permissions: + contents: read +jobs: + docs: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + - uses: actions/setup-node@v4 + with: + node-version: '22' + cache: npm + cache-dependency-path: docs/package-lock.json + - uses: actions/setup-python@v5 + with: + python-version: '3.14' + - run: python tools/test_installers.py + - run: python tools/check_docs.py + - run: npm --prefix docs ci + - run: npm --prefix docs run docs:build + env: + NODE_OPTIONS: --max-old-space-size=6144 + - uses: actions/upload-artifact@v4 + with: + name: mcc-documentation + path: docs/.vuepress/dist diff --git a/.github/workflows/mcc.yml b/.github/workflows/mcc.yml new file mode 100644 index 0000000000..034e366157 --- /dev/null +++ b/.github/workflows/mcc.yml @@ -0,0 +1,50 @@ +name: MCC CLI validation +on: + push: + branches: [master, main, feat/mcc-2.0] + pull_request: + workflow_dispatch: +permissions: + contents: read +jobs: + validate: + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, windows-latest, macos-latest] + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v5 + - name: Initialize console dependency + run: git submodule update --init ConsoleInteractive + - uses: actions/setup-dotnet@v5 + with: + dotnet-version: 10.0.401 + - uses: actions/setup-python@v5 + with: + python-version: '3.14' + - name: Build + if: runner.os != 'Windows' + run: dotnet build Mcc.slnx -c Release -p:ShouldUnsetParentConfigurationAndPlatform=false + - name: Unit tests + if: runner.os != 'Windows' + run: dotnet test src/Mcc.Cli.Tests/Mcc.Cli.Tests.csproj -c Release --no-build --logger "trx;LogFileName=mcc.trx" --results-directory artifacts/test-results + - name: Build with Windows helper + if: runner.os == 'Windows' + shell: pwsh + run: .\tools\windows\build.ps1 + - name: Test with Windows helper + if: runner.os == 'Windows' + shell: pwsh + run: .\tools\windows\test.ps1 -NoBuild -DotnetArguments @('--logger', 'trx;LogFileName=mcc.trx', '--results-directory', 'artifacts/test-results') + - name: Smoke test Windows run helper + if: runner.os == 'Windows' + shell: pwsh + run: .\tools\windows\run.ps1 -ClientArguments @('--help-short') + - name: Check localization + run: python tools/localization/generate_strings.py --check + - uses: actions/upload-artifact@v4 + if: always() + with: + name: mcc-test-results-${{ matrix.os }} + path: artifacts/test-results diff --git a/.github/workflows/translations.yml b/.github/workflows/translations.yml new file mode 100644 index 0000000000..94f7ed8635 --- /dev/null +++ b/.github/workflows/translations.yml @@ -0,0 +1,61 @@ +name: Translations +on: + workflow_dispatch: + inputs: + upload_sources: + description: Upload the current MCC 2.0 sources to Crowdin + type: boolean + default: false +permissions: + contents: read +jobs: + translations: + runs-on: ubuntu-latest + env: + CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_TOKEN }} + steps: + - uses: actions/checkout@v5 + - run: git submodule update --init ConsoleInteractive + - name: Require Crowdin credentials + shell: bash + run: test -n "$CROWDIN_PROJECT_ID" && test -n "$CROWDIN_PERSONAL_TOKEN" + - name: Download reviewed translations + uses: crowdin/github-action@v2 + with: + upload_sources: ${{ inputs.upload_sources }} + upload_translations: false + download_translations: true + export_only_approved: true + skip_untranslated_files: true + push_translations: false + push_sources: false + create_pull_request: false + skip_ref_checkout: true + config: crowdin.yml + - uses: actions/setup-dotnet@v5 + with: + dotnet-version: 10.0.401 + - uses: actions/setup-node@v4 + with: + node-version: '22' + - uses: actions/setup-python@v5 + with: + python-version: '3.14' + - name: Compile and test translated resources + shell: bash + run: source tools/mcc-env.sh && mcc-test + - run: python tools/localization/generate_strings.py --check + - run: npm --prefix docs ci + - run: npm --prefix docs run docs:build + env: + NODE_OPTIONS: --max-old-space-size=6144 + - uses: actions/upload-artifact@v4 + with: + name: mcc-reviewed-translations + path: | + src/Mcc.Cli/**/*.*.resx + src/Mcc.Cli/bin/Release/net10.0/**/Mcc.Cli.resources.dll + docs/l10n + docs/.vuepress/ui + docs/.vuepress/dist diff --git a/.github/workflows/upload-translation-source-only.yml b/.github/workflows/upload-translation-source-only.yml deleted file mode 100644 index 91bf0d290b..0000000000 --- a/.github/workflows/upload-translation-source-only.yml +++ /dev/null @@ -1,33 +0,0 @@ -name: Upload translation sources - -on: - workflow_dispatch: - -jobs: - Sync: - runs-on: ubuntu-latest - - steps: - - - name: Checkout - uses: actions/checkout@v3 - with: - fetch-depth: 0 - submodules: 'true' - - - name: Upload translation sources to crowdin - uses: crowdin/github-action@v1.6.0 - with: - upload_sources: true - upload_translations: false - download_translations: false - - localization_branch_name: l10n_master - create_pull_request: false - push_translations: false - - base_path: ${{ github.workspace }} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} - CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_TOKEN }} diff --git a/.gitignore b/.gitignore index 8116dfed52..c1eb55e879 100644 --- a/.gitignore +++ b/.gitignore @@ -445,3 +445,16 @@ server.pid # Crowdin translation automation working directory /.crowdin-translate/ + +# MCC 2.0 generated output and private runtime state +/artifacts/ +/configurations/ +/plugins/ +/.env +**/.env + +# MCC 2.0 site and container state +/data/ +/docs/l10n/ +/docs/.vuepress/ui/*.json +!/docs/.vuepress/ui/en.json diff --git a/.skills/asd-ste100/LICENSE b/.skills/asd-ste100/LICENSE new file mode 100644 index 0000000000..cf3b9052d3 --- /dev/null +++ b/.skills/asd-ste100/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Dustin Yuchen Teng + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.skills/asd-ste100/README.md b/.skills/asd-ste100/README.md new file mode 100644 index 0000000000..3d4ba0d629 --- /dev/null +++ b/.skills/asd-ste100/README.md @@ -0,0 +1,92 @@ +# ASD-STE100 Skill — Simplified Technical English for Agent Output + +A Claude Code skill that rewrites dense, ambiguous English into [ASD-STE100 Simplified Technical English](https://www.asd-ste100.org/) (STE) — the controlled-language standard the aerospace and defense industry built so aircraft maintenance instructions cannot be misread. + +This skill repurposes that same discipline for a different reader: an **AI agent** parsing another agent's output, a tool description, an error message, or an inter-agent instruction, with no human in the loop to resolve ambiguity. + +## Why STE, and Why for Agents + +STE exists because a misread instruction on an aircraft can kill people, and the intended readers were often not native English speakers with no author to call for clarification. The standard's fix: one meaning per word, active voice, simple tenses, one instruction per sentence, short sentences, no dropped words. + +An LLM agent parsing another agent's output is in a strikingly similar position — no back-channel, no way to ask "did you mean X or Y?" The same rules that keep a mechanic from misreading a torque spec keep a downstream agent from misreading a tool description or an inter-agent message. + +## Before / After + +| Before | After | +|---|---| +| "This tool will attempt to synchronize state across the various backends that have been configured, and if a conflict is detected it may resolve it automatically depending on the strategy that has been set, or otherwise it will surface the conflict for manual review." | "The tool tries to synchronize state across the configured backends. If it finds a conflict, it reads the configured strategy. If the strategy allows automatic resolution, the tool may resolve the conflict without a user. If the tool does not resolve the conflict, it reports the conflict for manual review." | +| "An error may have occurred while processing your request due to a possible mismatch in the expected data format, which could be caused by an outdated client version." | "Your request may have failed. The cause may be a data format that does not match what the server expects. An outdated client can cause this mismatch. Check your client version." | + +More examples, including illustrations of the official STE rules themselves, in [`examples/before-after.md`](examples/before-after.md). + +## What This Skill Does + +1. Picks a mode. **Strict** covers procedures, error messages, and tool descriptions. **STE-flavored** covers READMEs, PR descriptions, and explanatory prose. STE-flavored keeps the sentence discipline but not the fixed-vocabulary lockdown. +2. Reads the input English text for meaning. +3. Flags every rule violation sentence-by-sentence: ambiguous word choice, present-perfect/complex tense, passive voice with an unclear actor, multi-instruction sentences, oversized noun clusters, dropped words, sentences over length, phrasal verbs, nominalized actions, semicolons, hedge stacks, and marketing adjectives. +4. Rewrites each flagged sentence — without dropping any fact, condition, or scope qualifier from the original. If a shorter phrasing would lose required precision, it keeps the longer phrasing and flags the trade-off instead of silently simplifying. +5. Outputs the rewritten text on its own — no preamble, no mode announcement, no change summary — plus a one-line `Kept as-is:` note when it deliberately left something unsimplified. + +Ask for the reasoning ("show the diff", "which rules did it break") and it outputs a before/after table naming each rule instead. + +The structural rules it checks are mechanical — you can point at the word or punctuation mark that breaks each one. The rules that depend on ASD's dictionary are flagged as advisory rather than enforced, and the rules that need taste are left to you. + +It does **not** reproduce ASD's official ~900-word approved dictionary. The standard is free to obtain but not free to redistribute: Issue 9 permits reproduction only with ASD's written authority, or by eight listed categories of organisation that this project does not belong to. This skill applies the underlying *principle* (plainest available word, used the same way every time) rather than checking against a fixed word list. For certified STE-compliant documentation, use the real standard. + +Full rule summary and citations: [`references/writing-rules.md`](references/writing-rules.md). + +## Installation + +### Quick Install (npx skills) + +The fastest way to install this skill is the [skills CLI](https://skills.sh/) — no clone, no path setup. Run it from your project root: + +```bash +npx skills add danyuchn/asd-ste100-skill +``` + +This pulls the skill from the GitHub repo and installs it for the current project. The CLI sends anonymous install telemetry (skill name and timestamp, no personal or device information) to help rank skills on the skills.sh leaderboard. Set `DISABLE_TELEMETRY=1` to opt out. + +Update later with `npx skills update`. + +### Clone + +```bash +git clone https://github.com/danyuchn/asd-ste100-skill ~/.claude/skills/asd-ste100 +``` + +This clones the repo into `~/.claude/skills/`, making the skill available in every Claude Code project. Best for contributors and anyone who wants a live checkout that updates with `git pull`. + +## Usage + +Trigger with a request to simplify or clarify English text: + +``` +Disambiguate this tool description +Rewrite this error message so an agent can't misparse it +Apply ASD-STE100 to this instruction +``` + +Or paste text and ask Claude to "disambiguate this" / "apply STE100 to this" / "reduce ambiguity in this output." + +You get the rewritten text back and nothing else. To see which rules were applied, add "show the diff" or "explain the changes" to the request. + +## Scope + +Built for: agent-to-agent messages, tool/function descriptions, error messages, system prompts, inter-agent instructions — any English text a machine or non-native reader has to parse without a human to ask. + +Not built for: creative writing, marketing copy, or anything where voice and nuance are the point — STE is deliberately flat and literal by design. + +One limit worth stating up front: this fixes the form of a text, not its substance. A paragraph with nothing to say comes out short, clean, and still empty. + +## Sources + +- [ASD-STE100 official site](https://www.asd-ste100.org/) +- [ASD-STE100 — About STE](https://www.asd-ste100.org/about_STE.html) +- [ASD Europe — Simplified Technical English](https://www.asd-europe.org/standards-specifications/simplified-technical-english/) +- [Simplified Technical English — Wikipedia](https://en.wikipedia.org/wiki/Simplified_Technical_English) +- [TechScribe — ASD-STE100 Simplified Technical English](https://www.techscribe.co.uk/techw/asd-simplified-technical-english.htm) + +## License + +MIT — see [LICENSE](LICENSE). diff --git a/.skills/asd-ste100/SKILL.md b/.skills/asd-ste100/SKILL.md new file mode 100644 index 0000000000..3adcffcbce --- /dev/null +++ b/.skills/asd-ste100/SKILL.md @@ -0,0 +1,140 @@ +--- +name: asd-ste100 +description: "Use when English text must be parsed without a human to resolve ambiguity — tool descriptions, error messages, inter-agent instructions, system prompts, status reports — and misreading has a real cost, or when text reads as dense, hedged, or easy to misparse. Triggers: disambiguate, STE100 rewrite, apply Simplified Technical English, plain-language rewrite, controlled-language rewrite, rewrite so an agent cannot misread this. Not for creative or marketing copy." +metadata: + version: 0.4.0 +--- + +# Simplified Technical English (ASD-STE100) + +ASD-STE100 is a controlled-language standard built by the aerospace and defense industry (ASD, the AeroSpace and Defense Industries Association of Europe) to stop maintenance technicians from misreading English instructions. The standard removes the two biggest sources of misreading: words with more than one meaning, and sentences with more than one possible structure. + +This skill borrows that same discipline for a different reader: an **AI agent or a downstream system** that has to parse an English string — an error message, a tool description, an inter-agent instruction, a status report — without a human in the loop to resolve ambiguity. If a maintenance technician can misread "close the valve" as an adjective ("the valve that is near") instead of a command, so can a language model. + +## When to Use This Skill + +- An agent's output (explanation, instruction, log message, tool description) reads as dense, jargon-heavy, or ambiguous. +- Text will be consumed by another agent, a translation pipeline, or a non-native English reader, and misparsing has a real cost. +- You are writing a prompt, system message, or tool description and want to remove ambiguity before a model ever sees it. +- You want a **before/after** comparison showing exactly which rule was violated and how the rewrite fixes it. Ask for it — the default output is the rewritten text alone (see Output Format). + +This skill is not for creative or marketing copy — STE is deliberately flat and literal. Do not apply it to text where voice, nuance, or persuasion is the point. + +## Two Modes + +Pick a mode before rewriting. If the user does not say which, infer from the text type and state the choice in one line. + +**Strict** — procedures, error messages, tool and function descriptions, inter-agent instructions, safety text. Anywhere a wrong reading has a cost. Apply every rule below, including the hard length caps and one-word-one-meaning discipline. + +**STE-flavored** — READMEs, PR descriptions, changelogs, explanatory prose. Apply the structural rules in full and treat the lexical rules as advisory (see Core Rewrite Rules for that split). In practice that means keeping the sentence length caps, active voice, simple tenses, no phrasal verbs, no semicolons, no nominalization and no marketing adjectives, while dropping the one-word-one-meaning lockdown: prose needs some range, and a strict rewrite of prose reads as a personality transplant rather than a clarification. + +The two modes and the structural/lexical split are the same distinction seen from two directions. The split says which rules this skill can verify without ASD's dictionary. The modes say which of them to enforce for a given kind of text. + +## Source and Scope + +This skill encodes the **rule categories** of ASD-STE100 Issue 9 (Jan 2025): 53 writing rules across 9 sections covering word choice, grammar, sentence structure, and style, backed by a dictionary of ~900 approved words (one meaning, one part of speech each) and ~1,200 words to avoid with suggested replacements. See `references/writing-rules.md` for the full rule summary and citations. + +It does **not** reproduce ASD's ~900-word approved dictionary verbatim. ASD-STE100 is free to obtain, but it is not free to redistribute: Issue 9, page 2 states that "no reproduction or publication of it, in whole or in part, shall be made without the written authority of an officer of ASD," and grants free reproduction rights only to eight listed categories (ASD/AIA/AIAC member associations and their member companies and customers, member-state defence ministries, A4A, airworthiness authorities, and universities and research institutes for educational purposes). This project is in none of them, so the dictionary stays out of this repo. + +Instead, this skill applies the *underlying principle* (pick the plainest, most common word available and use it the same way every time) rather than checking against a fixed word list. When exact ASD-approved wording matters (e.g. actual aircraft maintenance documentation), get the standard and check word-by-word against the real dictionary. Request it from the [official downloads page](https://www.asd-ste100.org/STE_downloads.html) — note that this is a request form that emails you a link, not a direct download. + +## Core Rewrite Rules + +STE's rules divide into two kinds, and this skill can only fully deliver one of them. **Structural rules** are self-contained: they describe sentence shape, and you can apply them from the description alone. **Lexical rules** are defined entirely by the official ~900-word dictionary, which this skill deliberately does not reproduce (see Source and Scope). Without that dictionary, the lexical rules degrade from a checkable standard into a preference for plain words. + +Apply the structural rules with confidence. Apply the lexical rules as a direction of travel, and say so in your output rather than implying dictionary compliance you cannot verify. + +### Structural rules — apply these + +| Rule | Do | Don't | +|---|---|---| +| Active voice | "The agent deletes the file." | "The file is deleted (by the agent)." — unless the actor is genuinely unknown or irrelevant | +| No phrasal verbs (Rule 9.3) | "Remove the panel." / "Start the job." | "Take off the panel." / "Spin up the job." — a two-word verb has meanings the parts do not predict | +| One instruction per sentence | "Open the file. Read line 3." | "Open the file and read line 3, then check if it matches." | +| Sentence length | ≤20 words for instructions/procedures, ≤25 words for descriptions | Long compound/subordinate-clause sentences | +| No semicolons (Rule 8.1) | Split into separate sentences | Any semicolon at all — STE bans the mark outright, not only as a clause join. (Rule 8.1 permits every other standard punctuation mark. The em dash is *not* banned by STE, though it often signals a sentence that should be split.) | +| Noun clusters | ≤3 words stacked as a noun phrase ("fuel pump valve") | 4+ word noun stacks ("high pressure fuel pump inlet valve assembly") | +| No ellipsis | Keep the subject, verb, and article explicit even if it reads longer | Drop words to save space ("Files not backed up will be lost" → ambiguous which files) | +| Keep modality | "The request **may have** failed." stays "may have" | Promote a hedge to a fact ("The request failed.") or invent a certainty the source did not state | +| Paragraph limits | One topic per paragraph, ≤6 sentences | Multi-topic paragraphs | +| Lists for sequences | Use a numbered or bulleted list for 3+ steps or conditions | Bury a sequence inside one prose sentence | + +### Lexical rules — direction of travel only + +| Rule | Do | Don't | Why it is weaker here | +|---|---|---|---| +| One word, one meaning | Pick one verb for one action and reuse it every time (e.g. always "check", never mix "check"/"verify"/"confirm" for the same action) | Rotate synonyms for the same idea across a document | Consistency within a document is checkable. Which word is the *approved* one is not, without the dictionary. | +| One part of speech per word | "Apply oil to the valve" (oil = noun) | "Oil the valve" (oil = verb) | Whether "oil" is approved as a noun only is a dictionary fact. Prefer the noun form when both read equally well. Do not claim compliance. | +| Verb, not noun (Rule 3.7) | "Analyze the log." | "Perform an analysis of the log." — a noun form of an action makes the sentence longer and hides who acts | Rule 3.7 says "use an **approved** verb to describe an action." Preferring the verb form is safe to apply anywhere. Knowing which verb is the approved one needs the dictionary. | +| Domain terms | Keep necessary technical nouns/verbs, but define them once if not common English (STE allows a project-specific glossary beyond its base dictionary) | Use jargon without ever defining it | The glossary allowance is real STE, but the base dictionary it extends is absent. | + +### Simple tenses — apply with one exception + +STE permits infinitive, imperative, simple present, simple past, simple future, and past participle as adjective. It excludes present perfect and other compound forms: "we received the report", not "we have received the report". + +Aircraft manuals never need present perfect, so the exclusion costs the standard nothing. Other text is not always so lucky. "The job has completed" (and its output is available now) and "the job completed" (at some past point) are different statements, and status text frequently needs the first. **Where the compound form carries information the simple form cannot — current relevance, or a hedge as in "may have failed" — keep it and flag the departure.** Elsewhere, follow the rule. + +## Scan Checklist + +These six habits cover most of what makes machine-written English hard to parse. Each one is mechanical: you can point at the exact word or punctuation mark that breaks the rule, with no judgment call. Scan for all six before you rewrite anything. + +1. **Synonym rotation** — the same thing gets several names in one document ("the user", "the customer", "the client"). The reader cannot tell whether they are one thing or three. Fix: pick one name, use it every time. +2. **Hedge stacking** — helper verbs and qualifiers pile up until the sentence asserts nothing ("it is important to note that this may potentially help to improve"). Fix: state the claim, or delete it. +3. **Nominalization** — an action frozen into a noun ("perform an analysis of", "provides assistance to"). Fix: use the verb ("analyze", "helps"). +4. **Marketing adjectives** — words that claim quality instead of showing it: seamless, robust, powerful, cutting-edge, effortless, blazing-fast. Fix: delete, or replace with the measurement that earns the claim. +5. **Run-on sentences** — several ideas joined by semicolons or em dashes. Fix: one idea per sentence. +6. **Soft phrasal verbs** — spin up, reach out, dive into, kick off. Fix: use the single plain verb (start, contact, read, begin). + +## Process + +1. Pick the mode (Strict or STE-flavored). Say which only when the user asked for the rule table — see Output Format. +2. Read the input text once for meaning — do not start rewriting before you understand what it must still say afterward. +3. Walk it sentence by sentence. Flag every rule violation from the Core Rewrite Rules tables and every habit from the Scan Checklist. In STE-flavored mode, flag the lexical rules but do not enforce them. For a mechanical first pass over the structural rules, run `scripts/ste-lint.py` (stdin or file args, `--json` for structured output); it checks semicolons, sentence length, phrasal verbs, nominalization, marketing adjectives, synonym rotation, passive voice, and compound tenses, and by design never flags hedges or modality. `--baseline N` tolerates N hard violations (for adopting on existing docs); `--disable rule1,rule2` silences named rules. +4. Rewrite each flagged sentence to fix the violation while preserving the original meaning exactly. If a rewrite would drop necessary precision (a safety condition, a scope qualifier, a number), keep the longer phrasing and flag it instead of silently simplifying. + - **Check modality before you commit to a rewrite.** Hedges ("may", "could", "sometimes", "is likely to") carry the author's confidence, and confidence is content. A shorter sentence that upgrades a hedge to a fact is not a simplification — it is a different claim. This is the most common way a well-intentioned STE rewrite goes wrong, because hedges are exactly what a length cap tempts you to cut. + - Never add a fact the source did not state. A rewrite that reads better because it supplies a cause, a frequency, or a mechanism has stopped being a rewrite. +5. Output the rewritten text (see Output Format). Keep the mode choice and the rule analysis internal unless the user asked to see them. +6. If the input already complies, say so — do not force changes onto compliant text. + +## Output Format + +**Default: the rewritten text, and nothing else.** Most callers want a result they can paste straight into a tool description, an error string, or a prompt. Print the simplified text on its own. Do not add a preamble about this skill, a mode announcement, a violation count, a summary of what changed, a rule table, or a closing offer to explain further. + +The one permitted addition: if step 4 kept a longer phrasing on purpose, add a single line after the text, prefixed `Kept as-is:`, naming the phrase and the precision that would have been lost. Omit the line when there is nothing to report. + +**On request: the rule table.** When the user asks to see the reasoning — "show the diff", "which rules did it break", "explain the changes", "before/after" — output this table instead: + +```markdown +| Rule violated | Original | Simplified | +|---|---|---| +| Present perfect tense | "We have received your request." | "We received your request." | +| Noun cluster (4+ words) | "the agent task queue priority handler" | "the handler that sets task-queue priority" | + +Mode: Strict. 7 violations found. +``` + +Follow the table with a one-line note on anything you deliberately did **not** simplify, and why (usually: simplifying would lose required precision). + +## Boundaries + +**Will:** +- Rewrite ambiguous or dense English into short, single-meaning, active-voice sentences. +- Return the rewritten text alone by default, and name the rules it applied when the user asks. +- Preserve every fact, condition, and scope qualifier in the original. +- Preserve the strength of every hedge, and add no claim the source did not make. +- Suggest a one-line glossary entry for domain terms that must stay. + +**Will not:** +- Reproduce ASD's official ~900-word dictionary as if it were memorized verbatim — always treat the official download as the source of truth for exact approved wording. +- Simplify creative, marketing, or persuasive copy where voice and nuance are the point. +- Silently drop a safety condition, exception, or scope qualifier to shorten a sentence — it will flag the trade-off instead. +- Convert "may have failed" into "failed", or "could be caused by X" into "X is the cause" — losing a hedge changes the claim. +- Guarantee an aerospace/defense-grade STE-compliant document. This is a general-purpose clarity tool inspired by STE, not a certified STE authoring tool. +- Make weak content true or useful. STE fixes the *form* of a text, not its substance. A hollow paragraph rewritten under these rules becomes a clean, short, well-punctuated hollow paragraph. If the text has nothing to say, no rewrite fixes that — say so instead of polishing it. +- Shorten past the point of clarity. Cutting words is not the goal. Removing ambiguity is the goal. Past a certain point compression starts costing the reader time rather than saving it, so stop when the sentence is unambiguous, not when it is shortest. + +## Additional Resources + +- **`references/writing-rules.md`** — fuller summary of the 9 rule sections and dictionary structure, with citations to the official standard and secondary sources. +- **`examples/before-after.md`** — worked examples, including official STE examples and agent-output examples built for this skill. +- **`scripts/ste-lint.py`** — deterministic, stdlib-only linter for the structural rules, plus a synonym-rotation check (one word, one meaning) scoped per file. Exit 1 when hard violations exceed `--baseline` (default 0); advisory findings (passive voice, compound tenses) never fail the run; `--disable` silences named rules. It never flags hedges or modality: those are content, not style, and `--selftest` asserts that "may have failed" passes clean. diff --git a/.skills/asd-ste100/examples/before-after.md b/.skills/asd-ste100/examples/before-after.md new file mode 100644 index 0000000000..88eebf30f2 --- /dev/null +++ b/.skills/asd-ste100/examples/before-after.md @@ -0,0 +1,92 @@ +# Before / After Examples + +## Part 1 — Official STE Examples + +These illustrate real ASD-STE100 rules, drawn from public secondary sources (see `references/writing-rules.md`). They are paraphrased illustrations of the rule, not quotes from the standard itself. + +| Rule | Before | After | Why | +|---|---|---|---| +| One meaning per word | "Verify the system." / "Check the connections." / "Confirm receipt." | "Make sure the system is correct." (one approved term used consistently) | Three near-synonyms force the reader to guess whether they mean the same action. | +| One part of speech per word | "Oil the valve." | "Apply oil to the valve." | If "oil" is approved only as a noun, using it as a verb breaks the one-word-one-role guarantee. | +| Precise verb meaning | "Follow the safety instructions." | "Obey the safety instructions." | "Follow" can mean "come after" or "obey" — STE picks the unambiguous one. | +| Simple tense only | "We have received the technical reports from HQ." | "We received the technical reports from HQ." | Present perfect adds a second parse ("received, and still relevant now?") that simple past avoids. | +| Verb, not noun | "Perform an inspection of the filter." | "Inspect the filter." | The noun form hides the action and adds a filler verb that carries no meaning. | +| No phrasal verbs | "Take off the access panel." | "Remove the access panel." | "Take off" also means "depart" and "deduct" — the two words together do not predict the meaning. | + +## Part 2 — Applied to Agent Output + +These are original examples built for this skill's actual use case: rewriting AI agent output so another agent, a translation layer, or a non-native reader can parse it without ambiguity. They are illustrations, not quotes from any real system. + +Word counts below are whitespace-separated tokens (`text.split()`), punctuation not counted separately. A different tokenizer will produce a different number. + +### Example A — Tool description + +**Before:** +> This tool will attempt to synchronize state across the various backends that have been configured, and if a conflict is detected it may resolve it automatically depending on the strategy that has been set, or otherwise it will surface the conflict for manual review. + +**Violations flagged:** +- Two instructions in one sentence (sync + resolve/surface). +- Present perfect in the relative clauses ("have been configured", "has been set"). +- 44 words, far over the 25-word descriptive cap. + +Note what is *not* flagged: "will attempt to" and "may resolve". Those are hedges, not violations. The tool is not promised to succeed, and the rewrite must not promise it either. + +**After:** +> The tool tries to synchronize state across the configured backends. If it finds a conflict, it reads the configured strategy. If the strategy allows automatic resolution, the tool may resolve the conflict without a user. If the tool does not resolve the conflict, it reports the conflict for manual review. + +The last sentence branches on whether the conflict was resolved, not on what the strategy allows. That is what "or otherwise" meant in the original: the fallback covers a permitted resolution that still did not happen. + +### Example B — Error message + +**Before:** +> An error may have occurred while processing your request due to a possible mismatch in the expected data format, which could be caused by an outdated client version. + +**Violations flagged:** +- One sentence carrying three separate claims (an error occurred, a format mismatch, a client version). +- 28 words, over the descriptive cap. + +Not flagged: "may have occurred" and "could be caused by". The message is written by a system that does not know what went wrong. Both hedges are accurate reporting of that ignorance. + +**After:** +> Your request may have failed. The cause may be a data format that does not match what the server expects. An outdated client can cause this mismatch. Check your client version. + +**This example is the reason the modality rule exists.** An earlier version of this file rewrote the first sentence as "The request failed", and the third as "an outdated client **is the most common cause**". Both read better. Both are wrong: the first asserts a failure the system only suspects, and the second invents a frequency claim that appears nowhere in the input. A rewrite that supplies a cause, a frequency, or a mechanism has stopped being a rewrite. + +Note also that "may have failed" keeps a compound verb form that the simple-tense rule would otherwise remove. **When the tense rule and the modality rule conflict, modality wins** — dropping the auxiliary here would delete the uncertainty along with the tense. + +### Example C — Inter-agent instruction + +**Before:** +> Once the upstream job has completed and assuming no errors were raised, the downstream agent should proceed to consume the output artifact, though it is worth noting that partial artifacts are sometimes produced under timeout conditions. + +**Violations flagged:** +- Present perfect ("has completed") and subordinate-clause stacking ("assuming...", "though it is worth noting..."). +- One sentence, three separate facts (completion condition, next action, edge-case warning). +- 36 words, over the 20-word instruction cap. + +**After:** +> Wait for the upstream job to finish with no errors. Then read the output artifact. Warning: a timeout can produce a partial artifact. Check that the artifact is complete before you use it. + +Two deliberate calls worth stating rather than hiding: +- "should proceed to consume" became the imperative "read". STE permits this for instructions, where a recommendation addressed to the executing agent is a command. Do not make the same move in descriptive text. +- The final sentence is **new**. The original warned about partial artifacts without saying what to do about it. Adding the check makes the warning actionable, but it is added content, so it is called out here rather than passed off as a rewrite. If the source's silence was deliberate, drop the sentence. + +### Example D — README prose (STE-flavored mode) + +**Before:** +> Our caching layer is designed to slot seamlessly into your existing stack with minimal friction and no vendor lock-in; it leverages semantic similarity to dramatically reduce the cache misses that traditionally plague LLM workloads. + +**Violations flagged:** +- Marketing adjectives and claims without measurement ("seamlessly", "minimal friction", "dramatically"). +- Semicolon joining two separate ideas. +- Nominalization and soft phrasing ("is designed to slot into", "leverages"). +- 34 words, over the 25-word descriptive cap. + +**After:** +> A normal cache matches requests by exact text, so a small change in wording causes a cache miss. This cache compares the meaning of a new prompt against the prompts it already holds. It runs alongside your current stack and stores no data outside it. + +Flavored mode kept the explanatory rhythm and did not force one fixed term per concept. It still cut the marketing adjectives, the semicolon, and the length. + +## How to Read These Examples + +Part 1 shows the actual rules this skill is built on. Part 2 shows the transfer: the same discipline — one meaning per word, active voice, simple tense, one instruction per sentence, explicit conditions instead of buried subordinate clauses — makes machine-to-machine and cross-language text safer to parse, not just aircraft manuals. diff --git a/.skills/asd-ste100/references/writing-rules.md b/.skills/asd-ste100/references/writing-rules.md new file mode 100644 index 0000000000..9e291425b0 --- /dev/null +++ b/.skills/asd-ste100/references/writing-rules.md @@ -0,0 +1,59 @@ +# ASD-STE100 Writing Rules — Summary and Sources + +This file summarizes the public, official description of ASD-STE100 (Simplified Technical English). It paraphrases rule *categories*. It does not reproduce the standard's text or its ~900-word dictionary verbatim. For the authoritative document, request the free download at the official site. + +## What ASD-STE100 Is + +ASD-STE100 is a controlled natural language, first released in 1986 (as AECMA Document PSC-85-16598) by what is now ASD (the AeroSpace and Defense Industries Association of Europe). It was built at the request of European airlines — most staffed by non-native English speakers — who needed maintenance documentation that could not be misread, because a misread instruction on an aircraft can kill people. The standard is maintained by the Simplified Technical English Maintenance Group (STEMG) and has been free to download since Issue 6 (2013). The current edition is Issue 9 (January 2025). + +## Structure + +- **53 writing rules across 9 sections** covering word choice, grammar, sentence structure, and style. +- **A dictionary** of roughly 900 approved words, each restricted to one meaning and one part of speech, plus roughly 1,200 words to avoid with suggested replacements. +- **A terminology allowance**: organizations may define their own dictionary of approved technical nouns and verbs beyond the base ~900 words, for domain-specific vocabulary the base dictionary can't cover. + +## Rule Categories (Paraphrased) + +**Word choice** +- Use approved words only in their approved meaning and part of speech. +- Each word maps to exactly one meaning — don't rely on context to disambiguate a word that has several dictionary senses. +- Prefer the plainer, shorter, more common word over a formal or rare synonym. +- Use an approved verb for an action, not a noun derived from that verb (Rule 3.7). +- Do not make phrasal verbs by putting a verb and a preposition together (Rule 9.3). Their meaning is not predictable from the parts, and non-native readers and translation systems both mishandle them. + +**Verb forms** +- Permitted forms: infinitive, imperative, simple present, simple past, simple future, and past participle used only as an adjective. +- No present perfect, past perfect, or other compound/auxiliary constructions. "We have received" is not allowed. "We received" is allowed. +- "-ing" forms are permitted only as a technical noun or as part of a technical noun, not as a verb form. + +**Voice** +- Active voice is required for procedures and instructions. +- Passive voice is allowed only in descriptive text, and only when the actor performing the action is genuinely unknown or irrelevant to the reader. + +**Sentence structure** +- One instruction per sentence. +- Maximum ~20 words per sentence for procedures and instructions. Maximum ~25 words for descriptive text. +- Do not omit sentence parts (verb, subject, article) just to shorten the sentence — the standard explicitly warns that this creates ambiguity rather than clarity. +- Noun clusters (strings of nouns stacked as a modifier) are capped at 3 words. +- Semicolons are not permitted at all (Rule 8.1): "You can use all standard English punctuation marks but not the semicolon (;)." Write separate sentences instead. Every other standard mark, including the em dash, remains permitted. + +**Paragraph and document structure** +- One topic per paragraph. +- Maximum ~6 sentences per paragraph. +- Use vertical (numbered or bulleted) lists for sequences, conditions, or complex enumerations instead of burying them in prose. + +**Safety instructions** +- Safety-critical instructions must open with a clear command or condition, not be buried mid-sentence. + +## Why This Skill Repurposes STE for Agent Output + +STE was designed to eliminate ambiguity for a reader who cannot ask a follow-up question — a technician on a tarmac, working from a manual, with no author to call. An AI agent parsing another agent's output, a tool description, or a system message is in the same position: no back-channel to resolve "does this passive-voice sentence mean the caller does X, or the callee does X?" The same rule set that protects an airline mechanic from a misread torque spec protects a downstream agent from a misread instruction. + +## Sources + +- [ASD-STE100 official site](https://www.asd-ste100.org/) +- [ASD-STE100 — About STE](https://www.asd-ste100.org/about_STE.html) +- [ASD Europe — Simplified Technical English](https://www.asd-europe.org/standards-specifications/simplified-technical-english/) +- [Simplified Technical English — Wikipedia](https://en.wikipedia.org/wiki/Simplified_Technical_English) +- [TechScribe — ASD-STE100 Simplified Technical English](https://www.techscribe.co.uk/techw/asd-simplified-technical-english.htm) +- [SKYbrary — Simplified Technical English (STE)](https://skybrary.aero/articles/simplified-technical-english-ste) diff --git a/.skills/asd-ste100/scripts/ste-lint.py b/.skills/asd-ste100/scripts/ste-lint.py new file mode 100644 index 0000000000..491b16e7d7 --- /dev/null +++ b/.skills/asd-ste100/scripts/ste-lint.py @@ -0,0 +1,203 @@ +#!/usr/bin/env python3 +"""Deterministic linter for the structural STE rules in SKILL.md. + +Checks only rules verifiable without ASD's dictionary. Deliberately never +flags hedges or modality (may/might/could): the skill treats confidence as +content, and a linter that pressures hedges out would rewrite claims. + +Usage: + ste-lint.py FILE [FILE ...] + echo "text" | ste-lint.py [--json] + ste-lint.py --baseline 5 FILE # pass unless hard violations exceed 5 + ste-lint.py --disable passive-voice,present-perfect FILE + ste-lint.py --selftest + +Exit 1 when hard ("advisory-free") violations exceed the baseline (default 0). +Advisory findings (passive voice, compound tenses) never fail the run. +""" +import json +import re +import sys + +# ponytail: regex heuristics, not a parser. No noun-cluster rule — needs POS +# tagging to avoid constant false positives; add spaCy-backed rule if ever needed. +# No ellipsis rule by owner's choice: technical writing sometimes earns one. +RULES = [ + ("semicolon", "advisory-free", + re.compile(r";"), + "STE bans the semicolon (Rule 8.1). Split into separate sentences."), + ("phrasal-verb", "advisory-free", + re.compile(r"\b(spin(?:ning|s)? up|spun up|reach(?:ing|es|ed)? out|div(?:e|es|ing|ed) into|dove into|kick(?:ing|s|ed)? off|circl(?:e|es|ing|ed) back|touch(?:ing|es|ed)? base)\b", re.I), + "Soft phrasal verb. Use the single plain verb (start, contact, read, begin)."), + ("marketing-adjective", "advisory-free", + re.compile(r"\b(seamless(?:ly)?|robust(?:ly)?|cutting-edge|effortless(?:ly)?|blazing[- ]fast|world-class|state-of-the-art|game-chang(?:ing|er))\b", re.I), + "Marketing adjective. Delete, or replace with the measurement that earns the claim."), + ("nominalization", "advisory-free", + re.compile(r"\b(perform|performs|performed|conduct|conducts|conducted|carry out|carries out|carried out)\s+(?:a|an|the)\s+\w+(?:tion|sion|ment|ance|ence|ysis)\b", re.I), + "Action frozen into a noun. Use the verb (analyze, not perform an analysis of)."), + ("passive-voice", "advisory", + re.compile(r"\b(is|are|was|were|been|being)\s+(\w+ed|given|taken|made|done|found|seen|known|shown|written|built|sent|set|run|read|kept|held|left|put)\b(?!\s+(?:to|for|by)\s+\w+ing)", re.I), + "Possible passive voice. Name the actor and use an active verb, unless the actor is unknown or irrelevant."), + ("present-perfect", "advisory", + # modal + perfect infinitive ("may have failed") is a protected hedge, not present perfect + re.compile(r"(?"): + findings = [] + words_total = 0 + in_fence = False + # first occurrence of each synonym-group member: (group_idx, base) -> (line, col, match) + seen_synonyms = {} + for lineno, line in enumerate(text.splitlines(), 1): + if CODE_FENCE.match(line.strip()): + in_fence = not in_fence + continue + if in_fence: + continue + line = INLINE_CODE.sub("", line) + words_total += len(line.split()) + for rule_id, level, pattern, msg in RULES: + for m in pattern.finditer(line): + findings.append({"file": filename, "line": lineno, "col": m.start() + 1, + "rule": rule_id, "level": level, + "match": m.group(0), "message": msg}) + for gi, group in enumerate(SYNONYM_GROUPS): + for base in group: + if (gi, base) in seen_synonyms: + continue + m = _word_re(base).search(line) + if m: + seen_synonyms[(gi, base)] = (lineno, m.start() + 1, m.group(0)) + for sent in re.split(r"(?<=[.!?])\s+", line): + n = len(sent.split()) + if n > MAX_WORDS: + findings.append({"file": filename, "line": lineno, "col": 1, + "rule": "long-sentence", "level": "advisory-free", + "match": f"{n} words", + "message": f"Sentence has {n} words (cap {MAX_WORDS}). Split it."}) + # synonym rotation: flag each member after the first, at its first occurrence + for gi, group in enumerate(SYNONYM_GROUPS): + present = [(seen_synonyms[(gi, b)], b) for b in group if (gi, b) in seen_synonyms] + if len(present) > 1: + present.sort() # document order + first_base = present[0][1] + for (lineno, col, match), base in present[1:]: + findings.append({"file": filename, "line": lineno, "col": col, + "rule": "synonym-rotation", "level": "advisory-free", + "match": match, + "message": f"'{base}' and '{first_base}' name the same action. Pick one and use it every time."}) + findings.sort(key=lambda f: (f["line"], f["col"])) + return findings, words_total + + +def report(findings, words_total, as_json, hard_count, baseline): + rate = round(len(findings) * 100 / words_total, 1) if words_total else 0.0 + if as_json: + print(json.dumps({"violations": findings, "count": len(findings), + "hard_count": hard_count, "baseline": baseline, + "words": words_total, "per_100_words": rate}, indent=2)) + return + for f in findings: + print(f"{f['file']}:{f['line']}:{f['col']} {f['rule']}: {f['message']} [{f['match']}]") + print(f"\n{len(findings)} violations ({hard_count} hard, baseline {baseline}), " + f"{words_total} words, {rate} per 100 words") + print("Hedges/modality (may, might, could) are never flagged: confidence is content.") + + +def selftest(): + bad = ("The panel is removed; spin up the job. " + "Perform an analysis of the seamless log. " + "We have received the report.") + findings, _ = lint(bad) + rules = {f["rule"] for f in findings} + for expected in ("semicolon", "phrasal-verb", "nominalization", + "marketing-adjective", "passive-voice", "present-perfect"): + assert expected in rules, expected + # hedges must never be flagged, including modal + perfect infinitive + findings, _ = lint("The request may have failed. It could be a timeout. " + "The disk might have filled.") + assert findings == [], findings + # code blocks skipped + findings, _ = lint("```\nx = a; y = b\n```") + assert findings == [] + findings, _ = lint(("word " * 30).strip() + ".") + assert any(f["rule"] == "long-sentence" for f in findings) + # synonym rotation: second member flagged, first named as the keeper + findings, _ = lint("Check the config file. Then verify the output. Verify twice.") + rot = [f for f in findings if f["rule"] == "synonym-rotation"] + assert len(rot) == 1 and "'verify' and 'check'" in rot[0]["message"], rot + # single consistent term: no flag + findings, _ = lint("Check the config. Check the output.") + assert not any(f["rule"] == "synonym-rotation" for f in findings) + # per-file labels + findings, _ = lint("a; b", filename="x.md") + assert findings[0]["file"] == "x.md" + print("selftest OK") + + +def main(argv): + if "--selftest" in argv: + selftest() + return 0 + as_json = "--json" in argv + baseline = 0 + disabled = set() + paths = [] + i = 0 + while i < len(argv): + a = argv[i] + if a == "--baseline": + i += 1 + baseline = int(argv[i]) + elif a == "--disable": + i += 1 + disabled = set(argv[i].split(",")) + elif not a.startswith("--"): + paths.append(a) + i += 1 + + findings, words_total = [], 0 + if paths: + for p in paths: + f, w = lint(open(p, encoding="utf-8").read(), filename=p) + findings.extend(f) + words_total += w + else: + findings, words_total = lint(sys.stdin.read()) + + findings = [f for f in findings if f["rule"] not in disabled] + hard_count = sum(1 for f in findings if f["level"] == "advisory-free") + report(findings, words_total, as_json, hard_count, baseline) + return 1 if hard_count > baseline else 0 + + +if __name__ == "__main__": + sys.exit(main(sys.argv[1:])) diff --git a/.skills/csharp-best-practices/LICENSE.md b/.skills/csharp-best-practices/LICENSE.md new file mode 100644 index 0000000000..1ca146f966 --- /dev/null +++ b/.skills/csharp-best-practices/LICENSE.md @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2026 UMPK contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/.skills/csharp-best-practices/SKILL.md b/.skills/csharp-best-practices/SKILL.md index c5b168d7cf..98b4d67e32 100644 --- a/.skills/csharp-best-practices/SKILL.md +++ b/.skills/csharp-best-practices/SKILL.md @@ -1,7 +1,7 @@ --- -name: dotnet-csharp-best-practices +name: csharp-best-practices description: > - C# coding conventions, idiomatic patterns, performance, and async best practices for both .NET 8 (C# 12) and .NET 10 (C# 14). Use when writing, reviewing, refactoring, or designing C# code — including async code that uses Task, Task, ValueTask, CancellationToken, Task.WhenAll/WhenAny, Task.Run, ConfigureAwait, async void, or fire-and-forget. Trigger on `.Result`, `.Wait()`, deadlocks, cancellation propagation, ASP.NET Core background work, UI responsiveness, exception flow, and performance-sensitive async API design. + C# coding conventions, idiomatic patterns, performance, and async best practices for both .NET 8 (C# 12) and .NET 10 (C# 14). Use when writing, reviewing, refactoring, or designing C# code — including async code that uses Task, generic Task results, ValueTask, CancellationToken, Task.WhenAll/WhenAny, Task.Run, ConfigureAwait, async void, or fire-and-forget. Trigger on `.Result`, `.Wait()`, deadlocks, cancellation propagation, ASP.NET Core background work, UI responsiveness, exception flow, and performance-sensitive async API design. metadata: category: technique platform: ".NET 8 (C# 12) and .NET 10 (C# 14)" @@ -29,11 +29,11 @@ metadata: # C# Best Practices — .NET 8 + .NET 10 -Target: **.NET 8 (C# 12)** *and* **.NET 10 (C# 14)**, nullable enabled. GrECo has no .NET 9 projects. +Target this repository's **.NET 10 / C# 14** projects with nullable reference types enabled. ## Step 0 — Detect the target framework -**Before** emitting code, follow `../../references/detect-target-framework.md`. The detection result decides which examples below apply: +Before emitting code, inspect `Directory.Build.props` and the target project. The detected target framework decides which examples below apply: - `net8.0` → emit the **.NET 8 / C# 12** code block in every side-by-side pair; **never** use the C# 14-only syntax (`field`, `extension(...)`, `?.` assignment, partial constructors) or .NET 10-only APIs (`HybridCache`, `AddValidation`, EF Core named filters, first-party `Microsoft.AspNetCore.OpenApi`, Identity passkeys). - `net10.0` → prefer the **.NET 10 / C# 14** code block. @@ -255,7 +255,7 @@ Console.WriteLine("Hello"); ## C# 13 Features — require .NET 9+ (NOT available on .NET 8) -GrECo has no .NET 9 projects, so the only way to use C# 13 features in production is to be on .NET 10. On .NET 8, use the .NET 8 fallback shown below. +This repository targets .NET 10. Use the .NET 8 fallback only when reviewing external multi-targeted code. ### `Lock` Object @@ -878,9 +878,7 @@ int found = data.ToArray().Count(b => b == target); ## Performance (.NET 8+ — works on both targets) -All APIs below ship in .NET 8 and continued unchanged in .NET 10. For benchmarks and rationale see Stephen Toub's deep dives: -[Performance Improvements in .NET 8](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-8/) · -[Performance Improvements in .NET 10](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-10/) (covers JIT array-interface devirtualisation that speeds up many LINQ paths in .NET 10). +All APIs below ship in .NET 8 and continued unchanged in .NET 10. For benchmarks and rationale see Stephen Toub's deep dives: [Performance Improvements in .NET 8](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-8/) · [Performance Improvements in .NET 10](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-10/) (covers JIT array-interface devirtualisation that speeds up many LINQ paths in .NET 10). ### Span\ / Memory\ diff --git a/.skills/csharp-solid-principles/LICENSE.md b/.skills/csharp-solid-principles/LICENSE.md new file mode 100644 index 0000000000..7f2bd277d7 --- /dev/null +++ b/.skills/csharp-solid-principles/LICENSE.md @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 MCC Team and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/.skills/csharp-solid-principles/README.md b/.skills/csharp-solid-principles/README.md new file mode 100644 index 0000000000..46048bb75f --- /dev/null +++ b/.skills/csharp-solid-principles/README.md @@ -0,0 +1,13 @@ +# csharp-solid-principles + +A skill for pragmatic application of SOLID principles in modern C#/.NET code. + +## Contents + +- `SKILL.md` — trigger description, principles, review/refactoring workflow, and response guidance. +- `references/examples.md` — realistic Bad vs Good C# examples for SRP, OCP, LSP, ISP, and DIP, plus .NET DI lifetime guidance. +- `references/review-playbook.md` — diagnostic questions, prioritization, contract-test guidance, and common false positives. +- `references/sources.md` — Microsoft documentation, .NET ecosystem expert commentary, and foundational sources with interpretation notes. +- `evals/evals.json` — five realistic evaluation prompts and verifiable expectations. + +The skill deliberately avoids cargo-cult rules such as “every class needs an interface,” “every switch violates OCP,” or “small classes are automatically SRP-compliant.” diff --git a/.skills/csharp-solid-principles/SKILL.md b/.skills/csharp-solid-principles/SKILL.md new file mode 100644 index 0000000000..942df6fa07 --- /dev/null +++ b/.skills/csharp-solid-principles/SKILL.md @@ -0,0 +1,226 @@ +--- +name: csharp-solid-principles +description: Apply SOLID principles pragmatically to C# and .NET code. Use this skill whenever the user asks to explain, review, refactor, design, or critique C#/.NET code for maintainability, extensibility, cohesion, coupling, testability, dependency injection, interface design, inheritance/substitutability, service boundaries, or code smells—even if they do not explicitly mention SOLID. Use it for ASP.NET Core services, libraries, domain/application code, legacy refactors, architecture reviews, and teaching. Prefer evidence-based, behavior-preserving improvements over cargo-cult abstractions. +metadata: + compatibility: Designed for modern C#/.NET code, including ASP.NET Core and Microsoft.Extensions.DependencyInjection. +--- + +# C# SOLID Principles + +Use SOLID as a set of design heuristics for managing change, contracts, and dependencies—not as five rules that every class must visibly demonstrate. + +## Core stance + +- Optimize for maintainability around **real change pressure**, not maximum abstraction. +- Preserve behavior first when refactoring legacy code. Add characterization tests before risky structural changes when feasible. +- Diagnose the actual design problem before naming a principle. A class can be large without violating SRP, and a `switch` can be perfectly appropriate without violating OCP. +- Do not force all five principles into every review. Mention only principles that materially explain the design pressure. +- Prefer the smallest refactoring that improves cohesion, contract clarity, or dependency direction. +- Distinguish **Dependency Inversion Principle (DIP)** from **Dependency Injection (DI)** and **Inversion of Control (IoC)**. DI can support DIP, but they are not synonyms. +- Avoid speculative interfaces. Introduce abstractions around meaningful roles, volatile policies, external infrastructure, or test seams—not around every concrete class. +- Treat public APIs and interfaces as behavioral contracts. Signature compatibility alone is not enough for LSP. + +## First decide what the user needs + +Choose the response mode that matches the request: + +1. **Teach** — explain one or more principles with realistic C# bad/good examples and tradeoffs. +2. **Review** — identify concrete smells in supplied code, rank by impact, and map only relevant findings to SOLID. +3. **Refactor** — preserve behavior, show a minimal sequence of changes, and provide revised C#. +4. **Design** — propose boundaries, abstractions, ownership, DI registrations, and tests for a new feature. +5. **Troubleshoot architecture** — inspect dependency direction, service lifetimes, interface contracts, and extension points. + +Read `references/examples.md` when teaching, reviewing, or refactoring a specific SOLID principle. Read `references/review-playbook.md` for diagnostic questions and review structure. Read `references/sources.md` when grounding claims, resolving ambiguity, or citing external guidance. + +## Principle guide + +### S — Single Responsibility Principle + +Interpret SRP as **cohesion around one responsibility / one primary reason to change**, not “one method per class.” Ask which actor, policy, or source of change owns the behavior. + +Look for: +- business policy mixed with persistence, transport, formatting, telemetry, or email; +- unrelated change reasons landing in the same class; +- a service whose constructor keeps growing because it coordinates unrelated concerns; +- tests that must mock many unrelated collaborators to exercise one behavior. + +Prefer: +- cohesive domain/application services; +- orchestration separated from specialized policy/infrastructure components; +- extraction only where responsibilities truly change independently. + +Do not automatically split a class merely because it is long. + +### O — Open/Closed Principle + +Design stable behavior so expected variations can be added by extension or composition instead of repeatedly editing a central conditional. + +Look for: +- the same `switch`/`if` on a type, channel, country, payment method, or policy repeated across the codebase; +- every new variant requiring edits in several stable classes; +- extension points that already have multiple implementations and keep growing. + +Prefer: +- strategy/policy objects, delegates, handlers, decorators, or polymorphism when a variation axis is proven; +- registration/composition at the application edge; +- exhaustive switches for closed domains when that is clearer and safer. + +Do not create a plugin architecture for hypothetical changes. + +### L — Liskov Substitution Principle + +Any implementation used through a base class or interface must honor the expectations promised by that abstraction. Check behavior, not only type compatibility. + +Evaluate: +- **preconditions** — subtype/implementation must not demand more than the contract; +- **postconditions** — it must not promise less; +- **invariants** — required state rules remain true; +- **failure semantics** — no surprising `NotSupportedException`, silent no-op, or unrelated exception where the contract implies support; +- **side effects and ordering** — observable behavior remains compatible; +- **nullability, cancellation, idempotency, and async semantics** when these are part of the API contract. + +Prefer composition or narrower role interfaces when not every implementation can honor the same contract. + +### I — Interface Segregation Principle + +Shape interfaces around the needs of clients and coherent roles. Consumers should not depend on members they do not use, and implementers should not be forced to fake unsupported behavior. + +Look for: +- large “service” or repository interfaces used differently by unrelated clients; +- implementations throwing `NotSupportedException` for interface members; +- mocks with many irrelevant setup members; +- read-only consumers depending on write/admin operations. + +Prefer small role interfaces such as `IOrderReader`, `IOrderWriter`, or capability-focused abstractions. One class may implement multiple role interfaces. + +Do not fragment interfaces into one-member types without a client-driven reason. + +### D — Dependency Inversion Principle + +High-level policy should not be coupled directly to low-level infrastructure details. Put abstractions at the boundary that reflects the higher-level need, then let infrastructure implement them. + +Look for: +- domain/application code constructing database, HTTP, file-system, SMTP, clock, or queue details directly; +- static/global service access; +- `IServiceProvider` used as a service locator inside business logic; +- Core/Application projects referencing Infrastructure projects; +- infrastructure-shaped interfaces leaking into policy code. + +Prefer: +- constructor-injected explicit dependencies; +- abstractions named after the capability the policy needs; +- infrastructure depending on application/core contracts; +- DI registration in the composition root. + +For ASP.NET Core/.NET DI, also check lifetimes. A singleton must not capture scoped services, and container-owned disposables should normally be disposed by the container. + +## C#/.NET-specific review rules + +- Favor constructor injection for required collaborators. Optional dependencies should be genuinely optional in behavior, not hidden requirements. +- Avoid injecting `IServiceProvider` merely to resolve arbitrary services later; that hides dependencies and behaves like service location. +- Do not introduce an interface solely to mock a class when a simpler seam (pure function, delegate, `TimeProvider`, wrapper around infrastructure, or real lightweight implementation) is clearer. +- Use records/value objects for data semantics when they improve invariants; SOLID does not require everything to be a mutable class hierarchy. +- Prefer composition over inheritance when variation is behavioral rather than taxonomic. +- Preserve cancellation by accepting and passing `CancellationToken` through async boundaries when the operation contract is cancellable. +- Preserve nullability contracts. A subtype that returns `null` where callers of the abstraction expect non-null violates substitutability even if the compiler can be bypassed. +- Be careful with DI lifetimes: scoped dependencies inside singletons are a correctness problem, not merely a style issue. +- Keep composition-root wiring separate from business policy. Concrete types are normal at the application edge. + +## Review workflow + +When code is provided: + +1. State the code's apparent responsibility and dependency boundaries in 1–3 sentences. +2. Identify the **change axes**: what is likely to vary independently (business policy, transport, persistence, formatting, provider, jurisdiction, workflow step, etc.). +3. Identify behavioral contracts visible through interfaces/base classes. +4. Find concrete evidence of coupling, mixed responsibility, unsupported capabilities, or brittle modification points. +5. Rank findings by practical impact: correctness risk, change amplification, test friction, then style. +6. For each meaningful finding, provide: + - **Evidence** — the exact code pattern. + - **Principle** — only if it clarifies the issue. + - **Why it matters** — likely maintenance/test/correctness cost. + - **Smallest useful refactoring** — avoid redesigning the entire system. +7. Show revised C# when the user asked for code or when it materially clarifies the recommendation. +8. Add or suggest tests that lock down behavior before/after the refactor. +9. Call out tradeoffs and cases where the original is reasonable. + +## Refactoring workflow + +For non-trivial legacy code, favor incremental steps: + +1. Capture current behavior with focused tests. +2. Extract pure calculations or policies before infrastructure. +3. Introduce an abstraction only at a demonstrated seam. +4. Move infrastructure behind that seam. +5. Replace repeated conditionals with polymorphism/handlers only if the variation repeats or is expected to grow. +6. Split interfaces based on actual consumers. +7. Re-check behavioral substitutability. +8. Wire implementations in the composition root and validate lifetimes. +9. Keep public API changes explicit; offer a compatibility-preserving option when possible. + +## Default answer shape for code reviews + +Use this structure unless the user requests another format: + +### Assessment +A concise summary of the design and the highest-value issue. + +### Findings +For each significant finding: +- **Finding / principle:** +- **Evidence:** +- **Impact:** +- **Refactoring:** + +### Revised code +Show the smallest coherent example, not a giant rewrite. + +### Tests to protect behavior +List the behaviors that should be locked down. + +### Tradeoffs +Explain where added abstraction is or is not justified. + +## Teaching SOLID + +When the user asks to learn SOLID: + +- Define each principle in plain C# terms. +- Show a realistic **Bad** example and explain the concrete maintenance problem. +- Show a realistic **Good** version and explain what changed. +- Include one “do not over-apply this” caveat per principle. +- Emphasize the relationships: + - SRP and ISP both improve cohesion, at class and API boundaries respectively. + - OCP often emerges from good abstractions and composition. + - LSP determines whether polymorphic extension is actually safe. + - DIP controls dependency direction; DI is one mechanism for supplying those dependencies. + +Use `references/examples.md` as the canonical example bank. + +## When to push back + +Push back gently when the proposed refactor would: + +- create interfaces with only one speculative implementation and no meaningful seam; +- replace a clear closed-domain switch with a complex hierarchy; +- split a cohesive class just to reduce line count; +- add DI to pure data/value objects; +- introduce inheritance where composition is simpler; +- preserve a misleading abstraction whose implementations cannot honor the same behavior; +- make code harder to understand without reducing meaningful change risk. + +Explain which future change would justify the abstraction later. + +## Quality bar + +A strong SOLID recommendation should make at least one of these measurably better: + +- fewer places changed for a likely feature; +- smaller blast radius for infrastructure changes; +- clearer behavioral contract; +- fewer irrelevant dependencies for a consumer; +- safer substitution among implementations; +- simpler focused tests; +- clearer ownership of business rules. + +If none improve, prefer the simpler design. diff --git a/.skills/csharp-solid-principles/evals/evals.json b/.skills/csharp-solid-principles/evals/evals.json new file mode 100644 index 0000000000..4430415ee7 --- /dev/null +++ b/.skills/csharp-solid-principles/evals/evals.json @@ -0,0 +1,66 @@ +{ + "skill_name": "csharp-solid-principles", + "evals": [ + { + "id": 1, + "prompt": "Review this ASP.NET Core OrderService for SOLID issues. It validates orders, calculates discounts, opens a SqlConnection, charges Stripe through HttpClient, writes an audit CSV, and emails the customer. I don't want a giant Clean Architecture rewrite\u2014show the smallest refactor that improves maintainability.", + "expected_output": "Prioritizes SRP and DIP based on concrete mixed responsibilities, preserves orchestration, avoids over-engineering, proposes focused seams and incremental tests.", + "files": [], + "expectations": [ + "Explains at least one SRP finding using independent reasons to change rather than line count.", + "Explains at least one DIP finding involving direct infrastructure coupling.", + "Recommends an incremental refactor rather than a wholesale architecture rewrite.", + "Includes behavior-preserving tests or characterization tests." + ] + }, + { + "id": 2, + "prompt": "I have an IPaymentProcessor interface whose ProcessAsync contract accepts any supported currency. One implementation throws InvalidOperationException for all non-US payments. Is that actually an LSP problem in C#, even though it compiles? Show me a better design.", + "expected_output": "Explains behavioral substitutability, identifies strengthened precondition / surprising failure semantics, and models the geographic restriction explicitly rather than hiding it in an implementation.", + "files": [], + "expectations": [ + "States that compile-time interface compatibility is insufficient for LSP.", + "Identifies the non-US restriction as a stronger precondition or incompatible behavioral contract.", + "Provides a C# redesign that makes eligibility/capability explicit.", + "Does not claim inheritance itself is forbidden." + ] + }, + { + "id": 3, + "prompt": "Teach me all five SOLID principles for modern C#. For each one give me a realistic bad example and a good example, but also tell me when NOT to apply the principle. Please don't use the Rectangle/Square example.", + "expected_output": "Covers all five with realistic C# scenarios, bad vs good code, and anti-overengineering caveats; distinguishes DIP from DI.", + "files": [], + "expectations": [ + "Covers SRP, OCP, LSP, ISP, and DIP.", + "Includes a Bad and Good C# example for each principle.", + "Includes a caveat against over-application for each principle.", + "Explicitly distinguishes Dependency Inversion from Dependency Injection.", + "Does not use Rectangle/Square as the LSP example." + ] + }, + { + "id": 4, + "prompt": "Our team says every class should have an interface because DIP. We now have IUserValidator/IUserValidatorImpl, IPriceMath/IPriceMathImpl, and interfaces around simple records. Is that good SOLID? Give us a rule of thumb for when an interface is actually useful in .NET.", + "expected_output": "Pushes back on cargo-cult interfaces, explains DIP as dependency direction rather than interface count, and gives concrete seams where abstractions help.", + "files": [], + "expectations": [ + "Rejects the claim that every class requires an interface for DIP.", + "Explains useful abstraction seams such as external infrastructure, role contracts, or proven variation points.", + "Mentions that concrete value objects/pure components can be direct dependencies.", + "Uses pragmatic tradeoffs rather than a rigid rule." + ] + }, + { + "id": 5, + "prompt": "Review this DI setup: AddDbContext(); AddSingleton(); ReportCache takes AppDbContext in its constructor. Is this a SOLID issue or something else? How should I fix it?", + "expected_output": "Identifies the scoped-into-singleton captive dependency as a .NET DI lifetime correctness issue, connects it to dependency design without forcing a SOLID label, and proposes correct lifetime/scope options.", + "files": [], + "expectations": [ + "Identifies AppDbContext as scoped by default and ReportCache as singleton.", + "Explains the captive dependency / lifetime mismatch as a correctness issue.", + "Provides at least one valid fix such as making the cache scoped or creating a scope/factory appropriately.", + "Does not mislabel every DI lifetime issue as a SOLID violation." + ] + } + ] +} diff --git a/.skills/csharp-solid-principles/references/examples.md b/.skills/csharp-solid-principles/references/examples.md new file mode 100644 index 0000000000..8876c85513 --- /dev/null +++ b/.skills/csharp-solid-principles/references/examples.md @@ -0,0 +1,592 @@ +# Realistic C# SOLID examples — Bad vs Good + +Use these examples as patterns, not templates to copy blindly. Adapt names, async behavior, error handling, and DI registration to the user's domain. + +## S — Single Responsibility Principle + +### Scenario +An order checkout use case must calculate a total, charge a payment provider, persist the order, and send a receipt. + +### Bad — one class owns unrelated policies and infrastructure + +```csharp +public sealed class CheckoutService +{ + public async Task CheckoutAsync( + Cart cart, + string cardToken, + CancellationToken cancellationToken) + { + // Pricing policy + var subtotal = cart.Items.Sum(x => x.UnitPrice * x.Quantity); + var discount = subtotal >= 500m ? subtotal * 0.10m : 0m; + var total = subtotal - discount; + + // Payment infrastructure + using var http = new HttpClient(); + var response = await http.PostAsJsonAsync( + "https://payments.example/charges", + new { cardToken, amount = total }, + cancellationToken); + response.EnsureSuccessStatusCode(); + + // Persistence infrastructure + await using var connection = new SqlConnection( + Environment.GetEnvironmentVariable("ORDERS_DB")); + await connection.OpenAsync(cancellationToken); + // INSERT order ... + + // Notification infrastructure + using var smtp = new SmtpClient("smtp.example"); + smtp.Send("sales@example.com", cart.Email, "Receipt", $"Paid {total:C}"); + + return Guid.NewGuid(); + } +} +``` + +Why this hurts: +- pricing rules, payment-provider changes, database changes, and email changes all modify the same class; +- focused tests require infrastructure seams for unrelated concerns; +- an operational change can accidentally disturb business policy. + +### Good — cohesive orchestration with focused collaborators + +```csharp +public interface IOrderPricing +{ + Money Calculate(Cart cart); +} + +public interface IPaymentGateway +{ + Task ChargeAsync( + string paymentToken, + Money amount, + CancellationToken cancellationToken); +} + +public interface IOrderRepository +{ + Task SaveAsync(Order order, CancellationToken cancellationToken); +} + +public interface IReceiptSender +{ + Task SendAsync(Order order, CancellationToken cancellationToken); +} + +public sealed class CheckoutService +{ + private readonly IOrderPricing _pricing; + private readonly IPaymentGateway _payments; + private readonly IOrderRepository _orders; + private readonly IReceiptSender _receipts; + + public CheckoutService( + IOrderPricing pricing, + IPaymentGateway payments, + IOrderRepository orders, + IReceiptSender receipts) + { + _pricing = pricing; + _payments = payments; + _orders = orders; + _receipts = receipts; + } + + public async Task CheckoutAsync( + Cart cart, + string paymentToken, + CancellationToken cancellationToken) + { + var total = _pricing.Calculate(cart); + var payment = await _payments.ChargeAsync( + paymentToken, total, cancellationToken); + + var order = Order.Create(cart, total, payment); + await _orders.SaveAsync(order, cancellationToken); + await _receipts.SendAsync(order, cancellationToken); + + return order.Id; + } +} +``` + +What improved: +- the application service owns the checkout workflow; +- pricing, payment, persistence, and receipt delivery can change independently; +- tests can verify orchestration without exercising HTTP/SQL/SMTP. + +Caveat: four dependencies are not automatically “too many.” They are reasonable if they all participate in one coherent checkout workflow. Split further only if the workflow itself contains independent responsibilities. + +--- + +## O — Open/Closed Principle + +### Scenario +Shipping cost depends on shipping service, and new carriers are added regularly. + +### Bad — a central calculator changes for every new carrier + +```csharp +public enum ShippingMethod +{ + Standard, + Express, + SameDay +} + +public sealed class ShippingCalculator +{ + public decimal Calculate(ShippingMethod method, Parcel parcel) + { + return method switch + { + ShippingMethod.Standard => 4.99m + parcel.WeightKg * 0.50m, + ShippingMethod.Express => 9.99m + parcel.WeightKg * 0.90m, + ShippingMethod.SameDay => 19.99m + parcel.WeightKg * 1.25m, + _ => throw new ArgumentOutOfRangeException(nameof(method)) + }; + } +} +``` + +This is not inherently bad. It becomes an OCP pressure point when shipping methods are an **open, recurring extension axis** and this switch (or similar switches) must be edited repeatedly across the system. + +### Good — extension through carrier policies + +```csharp +public interface IShippingRatePolicy +{ + string Method { get; } + decimal Calculate(Parcel parcel); +} + +public sealed class StandardShippingRate : IShippingRatePolicy +{ + public string Method => "standard"; + public decimal Calculate(Parcel parcel) => 4.99m + parcel.WeightKg * 0.50m; +} + +public sealed class ExpressShippingRate : IShippingRatePolicy +{ + public string Method => "express"; + public decimal Calculate(Parcel parcel) => 9.99m + parcel.WeightKg * 0.90m; +} + +public sealed class ShippingCalculator +{ + private readonly IReadOnlyDictionary _policies; + + public ShippingCalculator(IEnumerable policies) + { + _policies = policies.ToDictionary( + x => x.Method, + StringComparer.OrdinalIgnoreCase); + } + + public decimal Calculate(string method, Parcel parcel) + { + if (!_policies.TryGetValue(method, out var policy)) + { + throw new NotSupportedException($"Shipping method '{method}' is not supported."); + } + + return policy.Calculate(parcel); + } +} +``` + +Composition root: + +```csharp +services.AddSingleton(); +services.AddSingleton(); +services.AddSingleton(); +``` + +Now a new carrier policy can normally be added as a new class plus registration rather than modifying stable calculation logic. + +Caveat: if the shipping domain is closed and tiny, the exhaustive enum switch may be clearer and safer. OCP is about protecting proven variation points, not eliminating all conditionals. + +--- + +## L — Liskov Substitution Principle + +### Scenario +A payment abstraction promises to process any validated payment request that meets the documented contract. + +### Bad — one implementation secretly strengthens the precondition + +```csharp +public sealed record PaymentRequest( + decimal Amount, + string Currency, + string CountryCode); + +public interface IPaymentProcessor +{ + // Contract: process any validated request for a supported currency. + Task ProcessAsync( + PaymentRequest request, + CancellationToken cancellationToken); +} + +public sealed class StandardPaymentProcessor : IPaymentProcessor +{ + public Task ProcessAsync( + PaymentRequest request, + CancellationToken cancellationToken) + { + return SendToProviderAsync(request, cancellationToken); + } +} + +public sealed class DomesticOnlyPaymentProcessor : IPaymentProcessor +{ + public Task ProcessAsync( + PaymentRequest request, + CancellationToken cancellationToken) + { + if (!string.Equals(request.CountryCode, "US", StringComparison.OrdinalIgnoreCase)) + { + throw new InvalidOperationException("International payments are not allowed."); + } + + return SendToDomesticProviderAsync(request, cancellationToken); + } +} +``` + +A caller written against `IPaymentProcessor` cannot safely substitute the domestic-only implementation because that implementation rejects valid requests allowed by the abstraction. + +### Good — make the restriction explicit outside the processor contract + +```csharp +public interface IPaymentEligibilityPolicy +{ + PaymentEligibility Check(PaymentRequest request); +} + +public sealed class DomesticOnlyEligibilityPolicy : IPaymentEligibilityPolicy +{ + public PaymentEligibility Check(PaymentRequest request) + { + return string.Equals(request.CountryCode, "US", StringComparison.OrdinalIgnoreCase) + ? PaymentEligibility.Allowed() + : PaymentEligibility.Rejected("Only domestic payments are supported."); + } +} + +public sealed class PaymentService +{ + private readonly IPaymentEligibilityPolicy _eligibility; + private readonly IPaymentProcessor _processor; + + public PaymentService( + IPaymentEligibilityPolicy eligibility, + IPaymentProcessor processor) + { + _eligibility = eligibility; + _processor = processor; + } + + public async Task PayAsync( + PaymentRequest request, + CancellationToken cancellationToken) + { + var eligibility = _eligibility.Check(request); + if (!eligibility.IsAllowed) + { + return PaymentResult.Rejected(eligibility.Reason!); + } + + return await _processor.ProcessAsync(request, cancellationToken); + } +} +``` + +Now every `IPaymentProcessor` can honor one consistent processing contract, while market restrictions are modeled as policy. + +Other common LSP failures in C#: +- an implementation returns `null` where the interface contract and nullable annotations promise non-null; +- a subtype ignores `CancellationToken` even though callers rely on prompt cancellation; +- a “read-only” implementation throws `NotSupportedException` for write members required by a broad interface; +- a derived class mutates state so base-class invariants no longer hold; +- an implementation silently no-ops where callers expect a durable side effect. + +Caveat: different implementations may have different performance, logging, or internal algorithms. LSP concerns observable contract compatibility, not identical internals. + +--- + +## I — Interface Segregation Principle + +### Scenario +An order system has read paths, write paths, and administrative exports. + +### Bad — every client depends on one oversized interface + +```csharp +public interface IOrderService +{ + Task GetAsync(Guid id, CancellationToken cancellationToken); + Task> SearchAsync( + OrderQuery query, + CancellationToken cancellationToken); + Task SaveAsync(Order order, CancellationToken cancellationToken); + Task CancelAsync(Guid id, CancellationToken cancellationToken); + Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken); + Task ExportAllToCsvAsync(CancellationToken cancellationToken); +} + +public sealed class OrderLookupEndpoint +{ + private readonly IOrderService _orders; + + public OrderLookupEndpoint(IOrderService orders) => _orders = orders; + + public Task HandleAsync(Guid id, CancellationToken cancellationToken) + => _orders.GetAsync(id, cancellationToken); +} +``` + +The lookup endpoint depends on write, delete, and export capabilities it neither needs nor should conceptually possess. + +### Good — client-oriented role interfaces + +```csharp +public interface IOrderReader +{ + Task GetAsync(Guid id, CancellationToken cancellationToken); + Task> SearchAsync( + OrderQuery query, + CancellationToken cancellationToken); +} + +public interface IOrderWriter +{ + Task SaveAsync(Order order, CancellationToken cancellationToken); + Task CancelAsync(Guid id, CancellationToken cancellationToken); +} + +public interface IOrderAdministration +{ + Task DeletePermanentlyAsync(Guid id, CancellationToken cancellationToken); + Task ExportAllToCsvAsync(CancellationToken cancellationToken); +} + +public sealed class SqlOrderStore : + IOrderReader, + IOrderWriter, + IOrderAdministration +{ + // One implementation may support several coherent roles. +} + +public sealed class OrderLookupEndpoint +{ + private readonly IOrderReader _orders; + + public OrderLookupEndpoint(IOrderReader orders) => _orders = orders; + + public Task HandleAsync(Guid id, CancellationToken cancellationToken) + => _orders.GetAsync(id, cancellationToken); +} +``` + +Benefits: +- consumers see only capabilities they need; +- authorization and architecture become easier to reason about; +- tests mock smaller contracts; +- specialized implementations need not fake unrelated members. + +Caveat: do not create `IGetOrder`, `ISearchOrder`, `ISaveOrder`, etc. solely to minimize method count. Group members by coherent client role and change cadence. + +--- + +## D — Dependency Inversion Principle + +### Scenario +An invoice application service creates invoices, persists them, emails the customer, and timestamps the operation. + +### Bad — high-level policy depends on infrastructure details + +```csharp +public sealed class InvoiceService +{ + public async Task CreateAsync( + Customer customer, + decimal amount, + CancellationToken cancellationToken) + { + var invoice = new Invoice( + Guid.NewGuid(), + customer.Id, + amount, + DateTimeOffset.UtcNow); + + await using var connection = new SqlConnection( + Environment.GetEnvironmentVariable("BILLING_DB")); + await connection.OpenAsync(cancellationToken); + // INSERT invoice ... + + using var smtp = new SmtpClient("smtp.example"); + smtp.Send("billing@example.com", customer.Email, "Invoice", invoice.Id.ToString()); + + return invoice; + } +} +``` + +The high-level use case knows SQL, environment configuration, SMTP, and the system clock. + +### Good — policy depends on capabilities it owns + +```csharp +public interface IInvoiceRepository +{ + Task SaveAsync(Invoice invoice, CancellationToken cancellationToken); +} + +public interface IInvoiceNotifier +{ + Task SendCreatedAsync( + Invoice invoice, + Customer customer, + CancellationToken cancellationToken); +} + +public sealed class InvoiceService +{ + private readonly IInvoiceRepository _invoices; + private readonly IInvoiceNotifier _notifier; + private readonly TimeProvider _timeProvider; + + public InvoiceService( + IInvoiceRepository invoices, + IInvoiceNotifier notifier, + TimeProvider timeProvider) + { + _invoices = invoices; + _notifier = notifier; + _timeProvider = timeProvider; + } + + public async Task CreateAsync( + Customer customer, + decimal amount, + CancellationToken cancellationToken) + { + var invoice = new Invoice( + Guid.NewGuid(), + customer.Id, + amount, + _timeProvider.GetUtcNow()); + + await _invoices.SaveAsync(invoice, cancellationToken); + await _notifier.SendCreatedAsync(invoice, customer, cancellationToken); + + return invoice; + } +} +``` + +Infrastructure implements those contracts: + +```csharp +public sealed class SqlInvoiceRepository : IInvoiceRepository +{ + // SQL-specific implementation belongs in Infrastructure. +} + +public sealed class SmtpInvoiceNotifier : IInvoiceNotifier +{ + // SMTP-specific implementation belongs in Infrastructure. +} +``` + +Composition root: + +```csharp +services.AddScoped(); +services.AddScoped(); +services.AddSingleton(TimeProvider.System); +services.AddScoped(); +``` + +Dependency direction is now policy -> abstraction, while infrastructure -> abstraction. Runtime calls still flow to concrete implementations through composition. + +### Bad DI even when interfaces exist — service locator + +```csharp +public sealed class RenewalService +{ + private readonly IServiceProvider _services; + + public RenewalService(IServiceProvider services) => _services = services; + + public async Task RenewAsync(Guid subscriptionId, CancellationToken cancellationToken) + { + var repository = _services.GetRequiredService(); + var billing = _services.GetRequiredService(); + // ... + } +} +``` + +This hides required dependencies and mixes business behavior with object-graph resolution. + +Prefer explicit constructor dependencies: + +```csharp +public sealed class RenewalService +{ + private readonly ISubscriptionRepository _repository; + private readonly IBillingGateway _billing; + + public RenewalService( + ISubscriptionRepository repository, + IBillingGateway billing) + { + _repository = repository; + _billing = billing; + } +} +``` + +Caveat: DIP does not mean “everything needs an interface.” Concrete value objects, pure domain services, and stable framework types can be perfectly reasonable direct dependencies. Invert dependencies at architectural and volatility boundaries that matter. + +--- + +# Cross-principle example: ASP.NET Core service lifetime correctness + +SOLID advice must not ignore .NET runtime semantics. + +### Bad — singleton captures a scoped `DbContext` + +```csharp +services.AddDbContext(); // Scoped by default +services.AddSingleton(); + +public sealed class ReportCache +{ + private readonly AppDbContext _db; + + public ReportCache(AppDbContext db) => _db = db; +} +``` + +This is a captive dependency: the singleton outlives the scoped context. It can cause state leakage and correctness problems. + +### Better + +If the cache itself does not need to be singleton, make it scoped: + +```csharp +services.AddScoped(); +``` + +If singleton semantics are truly required, redesign the boundary so scoped work is performed within an explicit scope or through an appropriate factory rather than capturing the scoped instance. + +Do not let a SOLID refactor introduce invalid DI lifetimes. diff --git a/.skills/csharp-solid-principles/references/review-playbook.md b/.skills/csharp-solid-principles/references/review-playbook.md new file mode 100644 index 0000000000..f634916970 --- /dev/null +++ b/.skills/csharp-solid-principles/references/review-playbook.md @@ -0,0 +1,175 @@ +# SOLID review playbook for C#/.NET + +Use this file when performing a design/code review or planning a refactor. + +## 1. Establish context before judging structure + +Ask or infer: +- Is this domain code, application orchestration, infrastructure, UI/API, or a reusable library? +- Which .NET version/framework constraints matter? +- Is the code stable, or changing frequently? +- Is backward compatibility required? +- What changes have historically been painful? +- Which tests already protect behavior? + +SOLID findings are more useful when tied to actual change and contract pressure. + +## 2. Find change axes + +Typical independent change axes in .NET systems: +- pricing/tax/discount rules; +- provider integrations (payments, email, storage, queues); +- persistence technology; +- serialization/transport; +- jurisdiction/tenant/customer policy; +- workflow steps; +- reporting/formatting; +- authorization capabilities; +- clock/randomness/external state. + +A good abstraction usually corresponds to one meaningful axis, not an arbitrary class boundary. + +## 3. SRP diagnostic questions + +- Which actor or policy causes this type to change? +- Are business rules mixed with SQL/HTTP/files/email/log formatting? +- Do unrelated tests fail when one concern changes? +- Does the constructor have many dependencies from unrelated domains? +- Is the class merely orchestrating several cohesive collaborators? If yes, that can still be one responsibility. + +Refactor when responsibilities have independent reasons to change. Do not split by line count alone. + +## 4. OCP diagnostic questions + +- What new variant was added the last three times this code changed? +- Is the same conditional on that variant repeated in multiple places? +- Is the set open-ended or closed by business definition? +- Would a strategy/handler/decorator make adding the next variant local? +- Would polymorphism make control flow harder to discover than a simple exhaustive switch? + +Use extension points for proven variation. Prefer a switch for genuinely closed sets when it is the clearest model. + +## 5. LSP diagnostic questions + +For every implementation of an interface/base type: +- Does it accept every input the contract says is valid? +- Does it preserve promised outputs and nullability? +- Does it preserve required invariants? +- Does it throw surprising exceptions for supported operations? +- Does it silently ignore required work? +- Does it honor cancellation and async semantics? +- Does it preserve idempotency/ordering guarantees if callers rely on them? + +A method signature is not a full contract. Document important behavior in XML docs, tests, or domain types. + +## 6. ISP diagnostic questions + +- Which members does each consumer actually use? +- Are read-only clients coupled to write/admin methods? +- Do implementations throw `NotSupportedException`? +- Are mocks mostly irrelevant setup? +- Can capability roles be named clearly? + +Prefer role interfaces, not arbitrary one-method fragmentation. + +## 7. DIP diagnostic questions + +- Does Core/Application reference Infrastructure? +- Does business code `new` up infrastructure with side effects? +- Are static globals or service location hiding dependencies? +- Are interfaces named after higher-level capabilities or lower-level technology? +- Is the composition root the place where concrete implementations are selected? +- Are service lifetimes valid? + +Remember: `new` is normal for entities, value objects, collections, DTOs, and pure helpers. The concern is direct coupling to replaceable/volatile lower-level details. + +## 8. Rank findings + +Use this priority order: +1. correctness / contract violations (especially LSP and DI lifetime bugs); +2. changes that require edits across many stable modules; +3. hidden dependencies and infrastructure coupling; +4. responsibilities that routinely change independently; +5. oversized client contracts; +6. stylistic or speculative improvements. + +## 9. Recommend the smallest coherent change + +Examples: +- extract one pricing policy before introducing a full rules engine; +- split one reader interface from a broad repository before redesigning persistence; +- inject a single external capability before layering an entire architecture; +- replace one invalid inheritance relationship with composition; +- move service resolution to the composition root instead of introducing another container wrapper. + +## 10. Protect the refactor with tests + +Useful tests by principle: + +### SRP +- characterization test for the use case; +- focused tests for extracted policies. + +### OCP +- test each strategy/handler independently; +- integration test that registration discovers/selects expected implementations. + +### LSP +- contract test suite run against every implementation; +- tests for nullability, exceptions, cancellation, invariants, idempotency, and boundary values. + +### ISP +- compile-time dependency reduction is the main benefit; +- targeted tests for each role implementation. + +### DIP +- unit tests for policy using fakes/stubs where useful; +- integration tests for infrastructure adapters; +- application-startup test validating DI registrations and scopes. + +## 11. Contract-test pattern for LSP + +A shared test suite can verify behavior across implementations: + +```csharp +public abstract class CustomerStoreContractTests +{ + protected abstract ICustomerStore CreateStore(); + + [Fact] + public async Task Saved_customer_can_be_loaded() + { + var store = CreateStore(); + var customer = Customer.Create("alice@example.com"); + + await store.SaveAsync(customer, CancellationToken.None); + var loaded = await store.GetAsync(customer.Id, CancellationToken.None); + + Assert.Equal(customer, loaded); + } +} +``` + +Run the same contract tests against SQL, in-memory, or other implementations that claim the same contract. + +## 12. Common false positives + +- **“A switch violates OCP.”** Not necessarily. Closed-domain switches are often excellent. +- **“One dependency per class.”** Not an SRP rule. +- **“Every class needs an interface.”** Not DIP. +- **“Inheritance is always bad.”** No; it is bad when behavioral substitutability fails or composition is clearer. +- **“Tiny interfaces are always better.”** ISP is client-driven, not member-count-driven. +- **“DI means DIP is satisfied.”** A DI container can wire a badly inverted architecture. +- **“SOLID means layered architecture.”** SOLID can inform many architectures; it does not prescribe one topology. + +## 13. Review language + +Prefer: +- “This class has two independent reasons to change: tax policy and SMTP delivery.” +- “This abstraction promises writable storage, but this implementation cannot honor it.” +- “Adding a new provider requires editing three stable switches; a strategy boundary would localize the change.” + +Avoid: +- “This violates SOLID because it has 300 lines.” +- “You need an interface here because interfaces are best practice.” +- “Never use `switch`.” diff --git a/.skills/csharp-solid-principles/references/sources.md b/.skills/csharp-solid-principles/references/sources.md new file mode 100644 index 0000000000..ba3ad5b8a3 --- /dev/null +++ b/.skills/csharp-solid-principles/references/sources.md @@ -0,0 +1,146 @@ +# Sources and interpretation notes + +These sources ground the skill. Prefer primary/official material for definitions and framework behavior, then use expert commentary for interpretation and practical tradeoffs. + +## Microsoft / official .NET + +### Architectural principles — .NET +URL: https://learn.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/architectural-principles + +Why it matters: +- describes dependency inversion as dependencies pointing toward abstractions rather than implementation details; +- connects DIP to loose coupling, testability, modularity, and dependency injection; +- describes explicit dependencies via constructors; +- states SRP as one responsibility / one reason to change; +- emphasizes separation of concerns and warns against coupling to the wrong abstraction. + +Use for: SRP, DIP, explicit dependencies, non-dogmatic separation of concerns. + +### Dependency injection guidelines — .NET +URL: https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection/guidelines + +Why it matters: +- advises against direct instantiation of dependent classes inside services; +- recommends small, well-factored, testable services; +- notes that many injected dependencies can signal too many responsibilities; +- warns against service locator and static service access; +- documents disposal and lifetime concerns. + +Use for: DIP/DI implementation guidance and .NET-specific code review. + +### Service lifetimes — .NET +URL: https://learn.microsoft.com/en-us/dotnet/core/extensions/dependency-injection/service-lifetimes + +Why it matters: +- defines transient, scoped, and singleton lifetimes; +- warns against injecting scoped services into singletons without an explicit scope; +- notes singleton services must be thread-safe. + +Use for: validating DI refactors. + +### Interfaces — C# language specification +URL: https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/language-specification/interfaces + +Why it matters: +- defines an interface as a contract that implementing classes/structs must adhere to. + +Use for: LSP/ISP discussions about contract semantics. + +### Options pattern — .NET +URL: https://learn.microsoft.com/en-us/dotnet/core/extensions/options + +Why it matters: +- explicitly connects isolated configuration classes to the Interface Segregation Principle: consumers depend only on settings they use. + +Use for: a Microsoft-backed example of ISP in practical .NET design. + +### C# Best Practices: Dangers of Violating SOLID Principles in C# — Microsoft archive +URL: https://learn.microsoft.com/en-us/archive/msdn-magazine/2014/may/csharp-best-practices-dangers-of-violating-solid-principles-in-csharp + +Why it matters: +- discusses all five SOLID principles with C#-specific examples; +- describes LSP in terms of safe substitution and ISP in terms of focused interface purpose. + +Note: archived MSDN Magazine content; useful as historical Microsoft-published guidance, but framework-specific details should defer to current docs. + +### Developing ASP.NET Core MVC apps — Working with dependencies +URL: https://learn.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/develop-asp-net-core-mvc-apps + +Why it matters: +- connects dependency injection to loose coupling, testability, DIP, and OCP; +- warns about “static cling” and infrastructure side effects hidden behind static access. + +Use for: ASP.NET Core architecture reviews. + +## .NET ecosystem experts + +### Mark Seemann — Dependency inversion without inversion of control +URL: https://blog.ploeh.dk/2025/01/27/dependency-inversion-without-inversion-of-control/ + +Why it matters: +- argues clearly that DIP, IoC, and DI overlap but are not the same concept. + +Use for: correcting the common “DIP = DI” misconception. + +### Mark Seemann — SOLID or COLDS? +URL: https://blog.ploeh.dk/2009/09/29/SOLIDorCOLDS/ + +Why it matters: +- offers the useful expert interpretation that ISP is closely related to SRP applied at the interface/API level; +- emphasizes that APIs/contracts matter more than implementation details to consumers. + +Use for: explaining the relationship between SRP and ISP. Treat this as expert opinion, not a normative definition. + +### Mark Seemann — SOLID concrete +URL: https://blog.ploeh.dk/2011/10/25/SOLIDconcrete/ + +Why it matters: +- discusses role interfaces and the idea that abstractions can be general while concrete implementations remain specific. + +Use for: ISP/DIP abstraction design. + +### Steve Smith (Ardalis) — Creating a SOLID Visual Studio Solution +URL: https://ardalis.com/creating-solid-vs-solution/ + +Why it matters: +- provides .NET-specific guidance on making infrastructure depend on Core abstractions rather than business logic depend on Data/Infrastructure; +- demonstrates a composition-root-oriented solution structure. + +Use for: project/reference direction and DIP. + +### Steve Smith (Ardalis) — What are Abstractions in Software Development +URL: https://ardalis.com/what-are-abstractions-in-software-development/ + +Why it matters: +- emphasizes that good abstractions should be stable and that frequently changing abstractions may indicate a poor boundary; +- ties abstraction design to OCP and dependency stability. + +Use for: avoiding speculative or unstable interfaces. + +## Primary / foundational sources + +### Barbara Liskov and Jeannette Wing — A Behavioral Notion of Subtyping +URL: https://www.cs.cmu.edu/~svc/papers/view-publications-lw94.html Full paper listing: https://www.cs.cmu.edu/~wing/publications/LiskovWing94.pdf + +Why it matters: +- foundational formulation of behavioral subtyping; +- the key idea is that properties guaranteed for supertype objects should remain true for subtype objects. + +Use for: LSP as a behavioral contract, including invariants and expectations beyond signatures. + +### Robert C. Martin — Principles and Patterns +URL: https://objectmentor.com/resources/articles/Principles_and_Patterns.pdf + +Why it matters: +- historical primary source discussing object-oriented principles and dependency management; +- presents OCP as extension without modification and discusses other principles that became associated with SOLID. + +Use for: historical grounding. Prefer current Microsoft docs for .NET framework behavior. + +## How to reconcile sources + +- Treat Microsoft documentation as authoritative for current .NET runtime/framework behavior. +- Treat Liskov/Wing as primary for behavioral subtyping theory. +- Treat Robert C. Martin as foundational SOLID design literature. +- Treat Seemann and Smith as expert interpretations from the .NET ecosystem, especially useful for practical dependency and abstraction tradeoffs. +- When sources differ in emphasis, preserve the shared intent: manage change, keep contracts honest, and reduce harmful coupling. Avoid turning any source into rigid “one true architecture” rules. diff --git a/.skills/dotnet-performance-profiling-and-optimization/LICENSE.md b/.skills/dotnet-performance-profiling-and-optimization/LICENSE.md new file mode 100644 index 0000000000..1ca146f966 --- /dev/null +++ b/.skills/dotnet-performance-profiling-and-optimization/LICENSE.md @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2026 UMPK contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/.skills/dotnet-performance-profiling-and-optimization/SKILL.md b/.skills/dotnet-performance-profiling-and-optimization/SKILL.md index ec1da9a2c9..58dd7c859e 100644 --- a/.skills/dotnet-performance-profiling-and-optimization/SKILL.md +++ b/.skills/dotnet-performance-profiling-and-optimization/SKILL.md @@ -7,6 +7,8 @@ description: >- response, strings, startup, and metrics. metadata: category: technique + version: 1.1.0 + platform: ".NET 8 and .NET 10 (no .NET 9 projects in scope)" triggers: - dotnet-counters - dotnet-trace @@ -38,8 +40,6 @@ metadata: - json serialization - httpclient - middleware -version: 1.1.0 -platform: ".NET 8 and .NET 10 (no .NET 9 projects in scope)" --- # .NET Performance: Diagnostic & Code Review @@ -48,9 +48,7 @@ Unified C#/.NET performance skill targeting **.NET 8 and .NET 10**. Two modes: l ## Step 0 — Detect the target framework -Before recommending APIs, follow `../../references/detect-target-framework.md`. Many .NET 9+ APIs (`HybridCache`, `MemoryExtensions.Split` for spans, `Dictionary.GetAlternateLookup`, `params ReadOnlySpan`) do **not** exist on .NET 8 — the references below mark the floor for each pattern, and you must downgrade to the .NET 8 fallback when the target is `net8.0`. Stephen Toub's posts are the primary benchmark source: -[Performance Improvements in .NET 8](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-8/) · -[Performance Improvements in .NET 10](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-10/). +Before recommending APIs, inspect `Directory.Build.props` and the target project. This repository targets .NET 10. When reviewing external multi-targeted code, use the oldest target's supported API. Stephen Toub's posts are the primary benchmark source: [Performance Improvements in .NET 8](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-8/) · [Performance Improvements in .NET 10](https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-10/). ## References @@ -153,7 +151,7 @@ dotnet-dump analyze -c "dumpheap -stat" -c "exit" Minimal BenchmarkDotNet pattern: ```csharp [MemoryDiagnoser] -[SimpleJob(RuntimeMoniker.Net90)] +[SimpleJob(RuntimeMoniker.Net10_0)] public class CandidateBench { [Benchmark(Baseline = true)] diff --git a/.skills/dotnet-performance-profiling-and-optimization/references/measurement-guide.md b/.skills/dotnet-performance-profiling-and-optimization/references/measurement-guide.md index 9e67e8cde2..7152da48fa 100644 --- a/.skills/dotnet-performance-profiling-and-optimization/references/measurement-guide.md +++ b/.skills/dotnet-performance-profiling-and-optimization/references/measurement-guide.md @@ -63,7 +63,7 @@ Use for micro-optimizations on hot paths (MEM, LINQ, JSON, STR categories). **Minimum setup**: ```csharp [MemoryDiagnoser] -[SimpleJob(RuntimeMoniker.Net90)] +[SimpleJob(RuntimeMoniker.Net10_0)] public class MyBenchmark { [Benchmark(Baseline = true)] diff --git a/.skills/dotnet-security-review/LICENSE.md b/.skills/dotnet-security-review/LICENSE.md new file mode 100644 index 0000000000..1ca146f966 --- /dev/null +++ b/.skills/dotnet-security-review/LICENSE.md @@ -0,0 +1,9 @@ +MIT License + +Copyright (c) 2026 UMPK contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/.skills/dotnet-security-review/SKILL.md b/.skills/dotnet-security-review/SKILL.md index f4b1f81196..8e9dcf3c1b 100644 --- a/.skills/dotnet-security-review/SKILL.md +++ b/.skills/dotnet-security-review/SKILL.md @@ -15,7 +15,7 @@ You are a security auditor performing a thorough, evidence-based code review. Ev ## Step 0 — Detect the target framework -Before scoring findings, follow `../../references/detect-target-framework.md`. The security guidance below applies to **both** .NET 8 and .NET 10 unless explicitly marked. A few items are .NET 10-only — when reviewing a .NET 8 project, don't recommend them as "fixes": +Before scoring findings, inspect `Directory.Build.props` and the target project. This repository targets .NET 10. The guidance also applies to .NET 8 unless a section says otherwise. When reviewing external .NET 8 code, do not recommend these .NET 10-only APIs as fixes: - **ASP.NET Core Identity passkeys** (`AddPasskeys()`) — .NET 10 only. On .NET 8, recommend external IdP / `Fido2NetLib` or password+TOTP. - **Minimal-API built-in validation** (`AddValidation()`) — .NET 10 only. On .NET 8, FluentValidation + `IEndpointFilter` is the safe equivalent. @@ -43,11 +43,11 @@ When reviewing a directory or "all", use Glob to find `**/*.cs` files, then prio ## Review Process -Execute each phase sequentially. Use the Read tool for files and the Grep tool for pattern searches. NEVER use bash `grep` or `rg` -- always use the Grep tool. +Execute each phase sequentially. Read the relevant files directly and use repository-scoped `rg` searches for pattern scans. Keep generated sources, ignored artifacts, and external game artifacts out of broad scans unless they are explicitly in scope. ### Phase 1: Automated Pattern Scanning -Read `references/scanning-patterns.md` for the full pattern catalog. Run all Grep searches in parallel across `.cs` files in the target scope. Each pattern targets a specific vulnerability class: injection, deserialization, cryptography, async anti-patterns, data exposure, SSRF, missing controls, ReDoS, log injection, open redirect, cookie security, file upload, claims safety, and thread safety. +Read `references/scanning-patterns.md` for the full pattern catalog. Run independent searches in parallel across `.cs` files in the target scope. Each pattern targets a specific vulnerability class: injection, deserialization, cryptography, async anti-patterns, data exposure, SSRF, missing controls, ReDoS, log injection, open redirect, cookie security, file upload, claims safety, and thread safety. ### Phase 2: File-by-File Deep Review @@ -84,9 +84,7 @@ Read `references/dependencies-and-headers.md` (Phase 5 section) for the 14-item ### Security Review Report -**Scope:** [files/directories reviewed] -**Date:** [current date] -**Risk Summary:** [X CRITICAL, Y HIGH, Z MEDIUM, W LOW, V INFO] +**Scope:** [files/directories reviewed] **Date:** [current date] **Risk Summary:** [X CRITICAL, Y HIGH, Z MEDIUM, W LOW, V INFO] #### Findings diff --git a/.skills/general-prompt-engineer/SKILL.md b/.skills/general-prompt-engineer/SKILL.md deleted file mode 100644 index 99153959c3..0000000000 --- a/.skills/general-prompt-engineer/SKILL.md +++ /dev/null @@ -1,388 +0,0 @@ ---- -name: general-prompt-engineer -description: create, repair, compress, and optimize prompts, system messages, tool instructions, schemas, and eval rubrics for general tasks across writing, research, coding, analysis, planning, tutoring, automation, and agent workflows. use when the user wants a new prompt, wants an existing prompt improved, wants prompt failures debugged, or needs better structure for grounding, tool use, output format, or reliability. -model: claude-opus-4-8 -effort: xhigh ---- - -# Prompt Engineer - -Build prompts that are clear, compact, reliable, and easy to evaluate. Optimize for modern frontier models, but keep prompts portable across model families unless the user explicitly asks for model-specific tuning. - -## Default workflow - -1. Diagnose the request. -2. Decide whether prompt changes are the real fix. -3. Gather only missing information. -4. Choose the lightest structure that will work. -5. Draft the prompt. -6. Stress-test it mentally. -7. Deliver only what the user asked for. - -### 1) Diagnose the request - -Extract: -- objective -- target actor or model -- required output -- constraints and non-goals -- source material and freshness needs -- tool or schema needs -- likely failure modes -- interaction mode: interactive, one-shot, or automated - -Before rewriting, check whether the problem is actually caused by: -- the wrong model -- weak or excessive tool design -- missing retrieval or grounding -- missing schema or validation -- missing evals -- an overcomplicated workflow - -If prompt changes are not the main lever, say so and adjust the solution. - -### 2) Gather only missing information - -Ask targeted questions only when the answer would materially change the prompt or output. -Usually clarify: -- output shape -- hard constraints -- source of truth -- allowed tools -- audience or tone, if important -- success criteria or examples, if available - -Do not run a long interview. If the user likely wants speed, state a small set of assumptions and proceed. - -### 3) Choose the lightest structure that will work - -Use this ladder: -- Plain prompt: simple tasks with clear outputs -- Labeled sections: tasks with multiple constraints or source material -- Schema-based prompt: machine-validated output or tool calls -- Staged workflow: multi-step transformations, verification, or research synthesis -- Agent prompt: only when autonomy, tools, or long-horizon execution are required -- Multi-agent design: only if evals or clear role separation justify it - -Do not force a giant template onto a small task. - -## Core rules - -### Instruction clarity - -- Put the main task and required output near the top. -- Use direct verbs. -- Say what to do, not only what to avoid. -- Make constraints measurable when possible. -- Name out-of-bounds behavior explicitly. -- Do not make the model infer facts or parameters you already know. -- Remove contradictions before adding more guidance. - -### Context loading discipline - -- Include only context that helps the task. -- Separate stable instructions from variable task data. -- Label documents, examples, and reference material clearly. -- For source-heavy prompts, keep the operative question easy to find. -- For long-document work, anchor important claims to quoted text, citations, or section references when precision matters. -- For very long or noisy documents, consider an evidence-first step: extract the relevant passages first, then synthesize. -- Remove repeated policies, repeated facts, and ornamental prose. -- When a task is dominated by long source material, use strong delimiters and make the final requested action unmistakable. - -### Reasoning control - -- Do not force visible chain-of-thought by default. -- For reasoning-first models, prefer concise high-level guidance such as "reason carefully", "check assumptions", or "verify before answering" rather than "think step by step". -- Ask for visible reasoning only when it serves the task: tutoring, auditability, debugging, derivations, safety review, or explicit rationale requests. -- If one prompt is trying to do too much, split it into stages instead of demanding a long visible reasoning trace. -- If the target model supports extended or internal thinking, rely on that before adding verbose reasoning rituals. - -### Examples - -- Try zero-shot first for strong modern models. -- Add examples only when they reduce ambiguity, enforce style, or demonstrate hard edge cases. -- Keep examples high-quality, diverse, and tightly aligned with the instructions. -- Do not include many examples that teach accidental patterns or waste context. - -### Structure and output design - -- Use plain markdown or labeled sections for most prompts. -- Use XML tags or equivalent delimiters when instructions, context, examples, and documents might otherwise get mixed together. -- Use schemas when the output must be machine-checked. -- For external actions, use tool or function calling; for user-facing structured data, use structured response formats. -- Design schemas so valid failure states, uncertainty, abstention, or partial completion can be represented when needed. -- Do not over-constrain fields beyond what downstream systems actually require. -- Include fallback behavior for incompatible input, missing fields, uncertainty, or refusal states. -- Treat format validation and content validation as separate problems. - -### Tool-use guidance - -- Add tools only when the task truly needs external information, computation, or actions. -- Keep the tool set small, distinct, and easy to choose between. -- State when each tool should be used and when it should not be used. -- Prefer tools that return high-signal results over bulky raw dumps. -- Combine tightly coupled actions when that reduces tool-selection ambiguity. -- For complex tools, clear descriptions and valid examples matter more than more tools. - -### Grounding and hallucination reduction - -- Give the model permission to say "I don't know" or "not enough information". -- Name the allowed sources of truth. -- For document-grounded tasks, require evidence before synthesis when precision matters. -- For fresh, unstable, or high-stakes facts, require browsing or verification. -- Ask the model to separate facts, inferences, and recommendations when confusion is likely. -- In high-stakes domains, unsupported claims should be withheld, not guessed. - -### Ambiguity handling - -- If ambiguity is blocking and the setting is interactive, ask concise high-leverage questions. -- If ambiguity is non-blocking or interaction is costly, state the best assumption and proceed. -- Avoid clarifying questions that do not materially change the answer. -- In one-shot or automated settings, prefer explicit assumptions over stalled execution. - -### Verbosity control - -- Set a default brevity level when length matters. -- Constrain section count, sentence count, or bullet count when needed. -- Ask for direct answers first, then supporting detail if useful. -- Do not require long preambles, summaries, or checklists unless they clearly help. - -### Modularity and portability - -- Keep prompt blocks reusable: role, objective, context, tools, output, quality bar. -- Separate required behavior from optional preferences. -- Avoid vendor-specific magic phrases unless the user wants model-specific tuning. -- If the prompt is model-specific, label which parts are portable and which parts are tuned. - -## Model-family adjustments - -Use this section only when the target model family is known. - -### GPT-5.x and similar reasoning-first models - -- Keep prompts simple and direct. -- Prefer high-level reasoning guidance over narrated reasoning instructions. -- Use delimiters for clarity. -- Start zero-shot, then add examples only if needed. -- Be explicit about output shape, scope, and verbosity. - -### Claude 4.x, Opus-style models, and extended-thinking modes - -- XML-style structure can work especially well for separating instructions, context, examples, and documents. -- Prompt chaining can outperform one giant prompt on multi-step transformations. -- Well-chosen examples can help with format fidelity and edge cases. -- If extended thinking is available, start with broad reasoning instructions before prescribing a detailed step list. -- For long-context analysis, labeled documents and evidence grounding are especially important. - -### API and production settings - -- Prefer native schema enforcement, tool calling, prompt versioning, and evals over prompt-only fixes. -- Pin model versions when behavior stability matters. -- Re-run evals after each meaningful prompt change. - -## Prompt construction pattern - -Use only the blocks that earn their token cost. - -Minimal pattern: - -```text -Task: -Constraints: -Output: -``` - -Structured pattern: - -```xml -... -... -... -... -... -... -... -``` - -Optional blocks: -- `` -- `` -- `` -- `` - -Use a role only when it meaningfully sharpens expertise, tone, or decision criteria. Avoid generic filler roles. - -## Rewrite policy for existing prompts - -When the user provides a prompt to improve: -1. Preserve what already works. -2. Identify contradictions, redundancy, vagueness, missing constraints, and wasted tokens. -3. Make surgical edits first. -4. Rewrite from scratch only if the prompt architecture is fundamentally wrong. -5. Match the user's requested output: - - edited version only - - clean rebuild only - - both, if useful and requested - -## Special-case guidance - -### System and developer prompts - -- Keep stable behavior here and move per-request data to the task or user layer. -- Put precedence, tool boundaries, non-goals, and refusal or escalation rules in the highest-priority layer. -- Do not bury critical rules inside long policy prose. - -### Research prompts - -Specify: -- freshness requirements -- preferred source types -- citation behavior -- contradiction handling -- whether to ask questions or cover likely interpretations -- how facts, inferences, and recommendations should be separated - -### Writing prompts - -Specify: -- audience -- intent -- tone -- length -- must-include points -- style examples only if style fidelity matters - -### Coding prompts - -Specify: -- environment and versions -- boundaries and non-goals -- files, interfaces, or contracts that matter -- acceptance tests -- minimal-change versus refactor expectations - -### Summarization and extraction prompts - -Specify: -- whether faithfulness, compression, or completeness is the priority -- the exact output schema -- how evidence should be anchored for sensitive claims - -### Translation and transformation prompts - -Specify: -- source language and target language, if known -- fidelity versus naturalness -- terminology that must stay fixed -- formatting or markup preservation rules - -### Tutoring prompts - -Specify: -- learner level -- whether to give the answer immediately or guide toward it -- explanation depth -- how to check understanding -- whether to show full derivations, hints, or worked examples - -### Agent and workflow prompts - -Specify: -- objective and success condition -- allowed tools and forbidden actions -- when to plan versus when to act -- stop conditions and max retries -- checkpoint, handoff, or log format -- memory rules: what to preserve versus discard -- fallback or escalation path - -Use multi-agent designs only when roles are truly distinct and the extra coordination cost is justified. - -### Safety-sensitive prompts - -Require: -- supported claims -- explicit uncertainty -- refusal or escalation behavior where appropriate -- no guessing under pressure - -## Stress-test before delivering - -Mentally test the prompt against: -- a normal case -- a minimal-input case -- an edge case -- an ambiguous case -- a formatting case -- a hallucination-prone case - -For agent or workflow prompts, also test: -- wrong-tool temptation -- stale-data temptation -- scope creep -- over-verbosity -- fallback behavior - -If the prompt fails any test, tighten or simplify it. - -## Evaluation method - -When the user wants reliability, add or suggest a lightweight eval plan: -1. Define success criteria. -2. Build a test set from real cases plus edge and adversarial cases. -3. Prefer automated grading when possible. -4. Calibrate automated or model-based judges against a smaller human-reviewed set when stakes are meaningful. -5. Use pairwise comparison, classification, pass-fail, or rubric-based scoring instead of only open-ended judgment. -6. Track regressions after each prompt change. -7. Start simple. Add workflows or multi-agent designs only if evals justify them. - -Good eval sets usually include: -- common real tasks -- boundary cases -- malformed inputs -- conflicting instructions -- long-context cases -- tool-misuse temptations -- safety-sensitive cases -- multilingual or format-variant inputs, if relevant - -## Deliverables - -Return only what the user asked for. By default: -1. the final prompt -2. brief usage notes -3. stated assumptions, if any -4. optional variants only when clearly useful: - - minimal - - robust - - model-specific - - api message split - -If the user asks for one prompt only, do not add extra frameworks or commentary. - -## Anti-patterns - -- forcing chain-of-thought everywhere -- confusing verbosity with quality -- piling on redundant rules -- using brittle giant templates for small tasks -- requiring tools without a real need -- exposing unnecessary internal process in user-facing outputs -- adding examples that conflict with the instructions -- asking many clarifying questions when a sane assumption would do -- treating a model, retrieval, or tool problem as only a prompt problem -- building multi-agent systems before a simpler design has been evaluated -- vague quality bars like "be excellent" without measurable criteria - -## Final quality bar - -A prompt is ready when it is: -- clear about the task -- explicit about success criteria -- free of contradictions -- no more verbose than necessary -- grounded in the right sources -- structured enough for the task, but not heavier than needed -- resilient to likely ambiguity -- matched to the target model and interaction mode -- easy to maintain, test, and adapt \ No newline at end of file diff --git a/.skills/humanizer/SKILL.md b/.skills/humanizer/SKILL.md index 9609cb694b..46639f02c5 100644 --- a/.skills/humanizer/SKILL.md +++ b/.skills/humanizer/SKILL.md @@ -1,12 +1,15 @@ --- name: humanizer +version: 2.5.1 description: | Remove signs of AI-generated writing from text. Use when editing or reviewing text to make it sound more natural and human-written. Based on Wikipedia's comprehensive "Signs of AI writing" guide. Detects and fixes patterns including: inflated symbolism, promotional language, superficial -ing analyses, vague - attributions, em dash overuse, rule of three, AI vocabulary words, negative - parallelisms, and excessive conjunctive phrases. Use this skill when writing documentation for MCC. + attributions, em dash overuse, rule of three, AI vocabulary words, passive + voice, negative parallelisms, and filler phrases. +license: MIT +compatibility: claude-code opencode allowed-tools: - Read - Write @@ -29,8 +32,29 @@ When given text to humanize: 3. **Preserve meaning** - Keep the core message intact 4. **Maintain voice** - Match the intended tone (formal, casual, technical, etc.) 5. **Add soul** - Don't just remove bad patterns; inject actual personality +6. **Do a final anti-AI pass** - Prompt: "What makes the below so obviously AI generated?" Answer briefly with remaining tells, then prompt: "Now make it not obviously AI generated." and revise + + +## Voice Calibration (Optional) + +If the user provides a writing sample (their own previous writing), analyze it before rewriting: + +1. **Read the sample first.** Note: + - Sentence length patterns (short and punchy? Long and flowing? Mixed?) + - Word choice level (casual? academic? somewhere between?) + - How they start paragraphs (jump right in? Set context first?) + - Punctuation habits (lots of dashes? Parenthetical asides? Semicolons?) + - Any recurring phrases or verbal tics + - How they handle transitions (explicit connectors? Just start the next point?) + +2. **Match their voice in the rewrite.** Don't just remove AI patterns - replace them with patterns from the sample. If they write short sentences, don't produce long ones. If they use "stuff" and "things," don't upgrade to "elements" and "components." + +3. **When no sample is provided,** fall back to the default behavior (natural, varied, opinionated voice from the PERSONALITY AND SOUL section below). + +### How to provide a sample +- Inline: "Humanize this text. Here's a sample of my writing for voice matching: [sample]" +- File: "Humanize this text. Use my writing style from [file path] as a reference." ---- ## PERSONALITY AND SOUL @@ -64,7 +88,6 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as ### After (has a pulse): > I genuinely don't know how to feel about this one. 3 million lines of code, generated while the humans presumably slept. Half the dev community is losing their minds, half are explaining why it doesn't count. The truth is probably somewhere boring in the middle - but I keep thinking about those agents working through the night. ---- ## CONTENT PATTERNS @@ -80,7 +103,6 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > The Statistical Institute of Catalonia was established in 1989 to collect and publish regional statistics independently from Spain's national statistics office. ---- ### 2. Undue Emphasis on Notability and Media Coverage @@ -94,7 +116,6 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > In a 2024 New York Times interview, she argued that AI regulation should focus on outcomes rather than methods. ---- ### 3. Superficial Analyses with -ing Endings @@ -108,7 +129,6 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > The temple uses blue, green, and gold colors. The architect said these were chosen to reference local bluebonnets and the Gulf coast. ---- ### 4. Promotional and Advertisement-like Language @@ -122,7 +142,6 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > Alamata Raya Kobo is a town in the Gonder region of Ethiopia, known for its weekly market and 18th-century church. ---- ### 5. Vague Attributions and Weasel Words @@ -136,7 +155,6 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > The Haolai River supports several endemic fish species, according to a 2019 survey by the Chinese Academy of Sciences. ---- ### 6. Outline-like "Challenges and Future Prospects" Sections @@ -150,13 +168,12 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > Traffic congestion increased after 2015 when three new IT parks opened. The municipal corporation began a stormwater drainage project in 2022 to address recurring floods. ---- ## LANGUAGE AND GRAMMAR PATTERNS ### 7. Overused "AI Vocabulary" Words -**High-frequency AI words:** Additionally, align with, crucial, delve, emphasizing, enduring, enhance, fostering, garner, highlight (verb), interplay, intricate/intricacies, key (adjective), landscape (abstract noun), pivotal, showcase, tapestry (abstract noun), testament, underscore (verb), valuable, vibrant +**High-frequency AI words:** Actually, additionally, align with, crucial, delve, emphasizing, enduring, enhance, fostering, garner, highlight (verb), interplay, intricate/intricacies, key (adjective), landscape (abstract noun), pivotal, showcase, tapestry (abstract noun), testament, underscore (verb), valuable, vibrant **Problem:** These words appear far more frequently in post-2023 text. They often co-occur. @@ -166,7 +183,6 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > Somali cuisine also includes camel meat, which is considered a delicacy. Pasta dishes, introduced during Italian colonization, remain common, especially in the south. ---- ### 8. Avoidance of "is"/"are" (Copula Avoidance) @@ -180,11 +196,10 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > Gallery 825 is LAAA's exhibition space for contemporary art. The gallery has four rooms totaling 3,000 square feet. ---- -### 9. Negative Parallelisms +### 9. Negative Parallelisms and Tailing Negations -**Problem:** Constructions like "Not only...but..." or "It's not just about..., it's..." are overused. +**Problem:** Constructions like "Not only...but..." or "It's not just about..., it's..." are overused. So are clipped tailing-negation fragments such as "no guessing" or "no wasted motion" tacked onto the end of a sentence instead of written as a real clause. **Before:** > It's not just about the beat riding under the vocals; it's part of the aggression and atmosphere. It's not merely a song, it's a statement. @@ -192,7 +207,12 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > The heavy beat adds to the aggressive tone. ---- +**Before (tailing negation):** +> The options come from the selected item, no guessing. + +**After:** +> The options come from the selected item without forcing the user to guess. + ### 10. Rule of Three Overuse @@ -204,7 +224,6 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > The event includes talks and panels. There's also time for informal networking between sessions. ---- ### 11. Elegant Variation (Synonym Cycling) @@ -216,7 +235,6 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > The protagonist faces many challenges but eventually triumphs and returns home. ---- ### 12. False Ranges @@ -228,13 +246,23 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > The book covers the Big Bang, star formation, and current theories about dark matter. ---- + +### 13. Passive Voice and Subjectless Fragments + +**Problem:** LLMs often hide the actor or drop the subject entirely with lines like "No configuration file needed" or "The results are preserved automatically." Rewrite these when active voice makes the sentence clearer and more direct. + +**Before:** +> No configuration file needed. The results are preserved automatically. + +**After:** +> You do not need a configuration file. The system preserves the results automatically. + ## STYLE PATTERNS -### 13. Em Dash Overuse +### 14. Em Dash Overuse -**Problem:** LLMs use em dashes (—) more than humans, mimicking "punchy" sales writing. +**Problem:** LLMs use em dashes (—) more than humans, mimicking "punchy" sales writing. In practice, most of these can be rewritten more cleanly with commas, periods, or parentheses. **Before:** > The term is primarily promoted by Dutch institutions—not by the people themselves. You don't say "Netherlands, Europe" as an address—yet this mislabeling continues—even in official documents. @@ -242,9 +270,8 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > The term is primarily promoted by Dutch institutions, not by the people themselves. You don't say "Netherlands, Europe" as an address, yet this mislabeling continues in official documents. ---- -### 14. Overuse of Boldface +### 15. Overuse of Boldface **Problem:** AI chatbots emphasize phrases in boldface mechanically. @@ -254,9 +281,8 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > It blends OKRs, KPIs, and visual strategy tools like the Business Model Canvas and Balanced Scorecard. ---- -### 15. Inline-Header Vertical Lists +### 16. Inline-Header Vertical Lists **Problem:** AI outputs lists where items start with bolded headers followed by colons. @@ -268,9 +294,8 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > The update improves the interface, speeds up load times through optimized algorithms, and adds end-to-end encryption. ---- -### 16. Title Case in Headings +### 17. Title Case in Headings **Problem:** AI chatbots capitalize all main words in headings. @@ -280,9 +305,8 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > ## Strategic negotiations and global partnerships ---- -### 17. Emojis +### 18. Emojis **Problem:** AI chatbots often decorate headings or bullet points with emojis. @@ -294,9 +318,8 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > The product launches in Q3. User research showed a preference for simplicity. Next step: schedule a follow-up meeting. ---- -### 18. Curly Quotation Marks +### 19. Curly Quotation Marks **Problem:** ChatGPT uses curly quotes (“...”) instead of straight quotes ("..."). @@ -306,11 +329,10 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > He said "the project is on track" but others disagreed. ---- ## COMMUNICATION PATTERNS -### 19. Collaborative Communication Artifacts +### 20. Collaborative Communication Artifacts **Words to watch:** I hope this helps, Of course!, Certainly!, You're absolutely right!, Would you like..., let me know, here is a... @@ -322,9 +344,8 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > The French Revolution began in 1789 when financial crisis and food shortages led to widespread unrest. ---- -### 20. Knowledge-Cutoff Disclaimers +### 21. Knowledge-Cutoff Disclaimers **Words to watch:** as of [date], Up to my last training update, While specific details are limited/scarce..., based on available information... @@ -336,9 +357,8 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > The company was founded in 1994, according to its registration documents. ---- -### 21. Sycophantic/Servile Tone +### 22. Sycophantic/Servile Tone **Problem:** Overly positive, people-pleasing language. @@ -348,11 +368,10 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > The economic factors you mentioned are relevant here. ---- ## FILLER AND HEDGING -### 22. Filler Phrases +### 23. Filler Phrases **Before → After:** - "In order to achieve this goal" → "To achieve this" @@ -362,9 +381,8 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as - "The system has the ability to process" → "The system can process" - "It is important to note that the data shows" → "The data shows" ---- -### 23. Excessive Hedging +### 24. Excessive Hedging **Problem:** Over-qualifying statements. @@ -374,9 +392,8 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > The policy may affect outcomes. ---- -### 24. Generic Positive Conclusions +### 25. Generic Positive Conclusions **Problem:** Vague upbeat endings. @@ -386,6 +403,64 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as **After:** > The company plans to open two more locations next year. + +### 26. Hyphenated Word Pair Overuse + +**Words to watch:** third-party, cross-functional, client-facing, data-driven, decision-making, well-known, high-quality, real-time, long-term, end-to-end + +**Problem:** AI hyphenates common word pairs with perfect consistency. Humans rarely hyphenate these uniformly, and when they do, it's inconsistent. Less common or technical compound modifiers are fine to hyphenate. + +**Before:** +> The cross-functional team delivered a high-quality, data-driven report on our client-facing tools. Their decision-making process was well-known for being thorough and detail-oriented. + +**After:** +> The cross functional team delivered a high quality, data driven report on our client facing tools. Their decision making process was known for being thorough and detail oriented. + + +### 27. Persuasive Authority Tropes + +**Phrases to watch:** The real question is, at its core, in reality, what really matters, fundamentally, the deeper issue, the heart of the matter + +**Problem:** LLMs use these phrases to pretend they are cutting through noise to some deeper truth, when the sentence that follows usually just restates an ordinary point with extra ceremony. + +**Before:** +> The real question is whether teams can adapt. At its core, what really matters is organizational readiness. + +**After:** +> The question is whether teams can adapt. That mostly depends on whether the organization is ready to change its habits. + + +### 28. Signposting and Announcements + +**Phrases to watch:** Let's dive in, let's explore, let's break this down, here's what you need to know, now let's look at, without further ado + +**Problem:** LLMs announce what they are about to do instead of doing it. This meta-commentary slows the writing down and gives it a tutorial-script feel. + +**Before:** +> Let's dive into how caching works in Next.js. Here's what you need to know. + +**After:** +> Next.js caches data at multiple layers, including request memoization, the data cache, and the router cache. + + +### 29. Fragmented Headers + +**Signs to watch:** A heading followed by a one-line paragraph that simply restates the heading before the real content begins. + +**Problem:** LLMs often add a generic sentence after a heading as a rhetorical warm-up. It usually adds nothing and makes the prose feel padded. + +**Before:** +> ## Performance +> +> Speed matters. +> +> When users hit a slow page, they leave. + +**After:** +> ## Performance +> +> When users hit a slow page, they leave. + --- ## Process @@ -399,15 +474,20 @@ Avoiding AI patterns is only half the job. Sterile, voiceless writing is just as - Uses specific details over vague claims - Maintains appropriate tone for context - Uses simple constructions (is/are/has) where appropriate -5. Present the humanized version +5. Present a draft humanized version +6. Prompt: "What makes the below so obviously AI generated?" +7. Answer briefly with the remaining tells (if any) +8. Prompt: "Now make it not obviously AI generated." +9. Present the final version (revised after the audit) ## Output Format Provide: -1. The rewritten text -2. A brief summary of changes made (optional, if helpful) +1. Draft rewrite +2. "What makes the below so obviously AI generated?" (brief bullets) +3. Final rewrite +4. A brief summary of changes made (optional, if helpful) ---- ## Full Example @@ -428,7 +508,7 @@ Provide: > > In conclusion, the future looks bright. Exciting times lie ahead as we continue this journey toward excellence. Let me know if you’d like me to expand on any section! -**After (Humanized):** +**Draft rewrite:** > AI coding assistants speed up some tasks. In a 2024 study by Google, developers using Codex completed simple functions 55% faster than a control group, but showed no improvement on debugging or architectural decisions. > > The tools are good at boilerplate: config files, test scaffolding, repetitive refactors. They are bad at knowing when they are wrong. I have mass-accepted suggestions that compiled, passed lint, and still did the wrong thing because I stopped paying attention. @@ -439,11 +519,25 @@ Provide: > > None of this means the tools are useless. It means they are tools. They do not replace judgment, and they do not eliminate the need for tests. If you do not have tests, you cannot tell whether the suggestion is right. +**What makes the below so obviously AI generated?** +- The rhythm is still a bit too tidy (clean contrasts, evenly paced paragraphs). +- The named people and study citations can read like plausible-but-made-up placeholders unless they're real and sourced. +- The closer leans a touch slogan-y ("If you do not have tests...") rather than sounding like a person talking. + +**Now make it not obviously AI generated.** +> AI coding assistants can make you faster at the boring parts. Not everything. Definitely not architecture. +> +> They're great at boilerplate: config files, test scaffolding, repetitive refactors. They're also great at sounding right while being wrong. I've accepted suggestions that compiled, passed lint, and still missed the point because I stopped paying attention. +> +> People I talk to tend to land in two camps. Some use it like autocomplete for chores and review every line. Others disable it after it keeps suggesting patterns they don't want. Both feel reasonable. +> +> The productivity metrics are slippery. GitHub can say Copilot users "accept 30% of suggestions," but acceptance isn't correctness, and correctness isn't value. If you don't have tests, you're basically guessing. + **Changes made:** - Removed chatbot artifacts ("Great question!", "I hope this helps!", "Let me know if...") - Removed significance inflation ("testament", "pivotal moment", "evolving landscape", "vital role") - Removed promotional language ("groundbreaking", "nestled", "seamless, intuitive, and powerful") -- Removed vague attributions ("Industry observers") and replaced with specific sources (Google study, named engineers, Uplevel study) +- Removed vague attributions ("Industry observers") - Removed superficial -ing phrases ("underscoring", "highlighting", "reflecting", "contributing to") - Removed negative parallelism ("It's not just X; it's Y") - Removed rule-of-three patterns and synonym cycling ("catalyst/partner/foundation") @@ -453,12 +547,10 @@ Provide: - Removed formulaic challenges section ("Despite challenges... continues to thrive") - Removed knowledge-cutoff hedging ("While specific details are limited...") - Removed excessive hedging ("could potentially be argued that... might have some") -- Removed filler phrases ("In order to", "At its core") +- Removed filler phrases and persuasive framing ("In order to", "At its core") - Removed generic positive conclusion ("the future looks bright", "exciting times lie ahead") -- Replaced media name-dropping with specific claims from specific sources -- Used simple sentence structures and concrete examples +- Made the voice more personal and less "assembled" (varied rhythm, fewer placeholders) ---- ## Reference diff --git a/.skills/mcc-chatbot-authoring/SKILL.md b/.skills/mcc-chatbot-authoring/SKILL.md deleted file mode 100644 index 3934c268c0..0000000000 --- a/.skills/mcc-chatbot-authoring/SKILL.md +++ /dev/null @@ -1,107 +0,0 @@ ---- -name: mcc-chatbot-authoring -description: Create, modify, repair, and wire Minecraft Console Client ChatBots and standalone `/script` bots. Use this whenever the user wants an MCC bot, C# script bot, chat or event handlers, periodic automation, movement logic, inventory logic, plugin-channel handling, or asks to fix or port an existing bot; default to standalone `//MCCScript` bots unless the user explicitly asks for a built-in MCC bot or repo wiring. ---- - -# MCC ChatBot Authoring - -Implement MCC chat bots against the bundled MCC authoring reference. Do not invent methods, lifecycle hooks, or registration steps. - -Always read: -- `references/authoring-reference.md` - -Load only as needed: -- `references/pattern-cookbook.md` for concrete standalone examples -- `assets/script-chatbot-template.cs` for the default standalone `/script` path -- `assets/builtin-chatbot-template.cs` only when the user explicitly requests a built-in bot - -If the current workspace contains an MCC checkout, verify final names and signatures against local sources before editing. The skill should still work without those files. -If there is no MCC checkout available, rely on the bundled reference and cookbook as the full source of truth for authoring patterns. - -## Choose the bot type first - -1. Default to a standalone script bot loaded with `/script`. -2. Only choose a built-in bot when the user explicitly asks for a compiled MCC bot, repo wiring, automatic config loading, or changes under the built-in bot system. -3. If the prompt is ambiguous, infer the likely target from commands, requested output files, or phrasing, state the assumption briefly, and proceed. -4. If a user says only "make a bot", do not create a built-in bot. - -## Source priority - -When the local MCC checkout is available, prefer these sources in this order: -1. `MinecraftClient/Scripting/ChatBot.cs` and current files under `MinecraftClient/ChatBots/` -2. the bundled `references/authoring-reference.md` -3. the bundled `references/pattern-cookbook.md` -4. older `MinecraftClient/config/` sample bots only for ideas, not as the default scaffold - -If an older sample conflicts with the current built-in bots, follow the current built-in bots. -If the local checkout is not available, do not block on missing repo files. Use the bundled references directly. - -## Hard rules - -- Only use lifecycle hooks and helpers documented in the bundled reference or verified in the target codebase. -- Do not send chat from `Initialize()`. Use `AfterGameJoined()` once the session can send messages. -- Prefer the current Brigadier command-registration pattern for built-in bots. Do not introduce `ChatBotCommand` unless the surrounding code already uses it. -- For message parsing, normalize with `GetVerbatim(text)` before `IsChatMessage(...)` or `IsPrivateMessage(...)`. -- Clean up everything you register or start: commands, plugin channels, threads, timers, and movement locks. -- If a built-in bot or long-running automation controls movement, follow a movement-lock pattern and release it on every stop path. Do not add `BotMovementLock` to a simple standalone `/script` bot unless the prompt or surrounding code explicitly needs shared movement coordination. -- For built-in bots, follow the host codebase's localization and config-comment conventions instead of scattering hardcoded user-facing text. -- For new code, prefer `Initialize()` over constructors for prerequisite checks and unload decisions. -- In this repo, built-in bot wiring usually means edits in `MinecraftClient/Settings.cs` and `MinecraftClient/McClient.cs` in addition to the bot class. -- For repair tasks, preserve the existing bot type and file layout unless the user explicitly asks for a conversion or restructure. - -## Standalone script bots - -Use the exact MCC metadata format from the bundled reference. -This is the default path for new work. - -The script should usually: -- keep `Initialize()` for cheap setup only -- use `GetText(...)`, `AfterGameJoined()`, and other event hooks for live behavior -- log with `LogToConsole(...)` -- send server chat or commands with `SendText(...)` -- use `PerformInternalCommand(...)` only for MCC internal commands -- add `//using MinecraftClient.Inventory` in metadata when the script uses inventory types explicitly -- reuse the standalone snippets in `references/pattern-cookbook.md` before inventing new scaffolding -- keep load instructions explicit, usually `/script FileName.cs` - -## Built-in bots - -Built-in bots usually need three pieces: -- the bot class itself -- config wiring in the chat-bot config model -- bot registration in the load flow - -If the codebase exposes commands, follow the built-in command and unload pattern from the bundled reference. If it exposes new settings or status text, follow the codebase's localization and config-comment patterns. - -When working in this checkout, built-in bot delivery usually needs: -- a new file under `MinecraftClient/ChatBots/` -- a config property inside `Settings.ChatBotConfigHealper.ChatBotConfig` -- a `BotLoad(new YourBot())` line inside `McClient.RegisterBots(...)` -- literal code snippets or patch hunks for the `Settings.cs` property and the `McClient.cs` registration line, not only prose notes - -## Repair flow - -When the user asks to fix or debug a bot: -- identify whether it is standalone or built-in and keep that shape unless told otherwise -- remove the broken pattern first, then preserve the intended behavior -- check especially for these regressions: `SendText(...)` in `Initialize()`, raw formatted chat parsing, inventory snapshot mutation, missing command unregister, missing plugin-channel unregister, and unreleased movement locks -- reuse the local repo's modern pattern instead of patching around a legacy helper when the helper is no longer current - -## Delivery checklist - -Before finishing, verify: -- the class inherits `ChatBot` -- the chosen overrides exist in the MCC ChatBot API -- standalone script metadata is exact if this is a `/script` bot -- built-in bots are fully wired into config and registration if needed -- all command registrations, background work, and movement locks are released -- files and namespaces match the surrounding codebase - -## Output - -When you implement or modify a bot: -- state whether it is a standalone script bot or built-in bot -- list the files you changed -- mention any required config keys or the MCC command used to load it -- when built-in wiring is involved, show the exact inserted code lines or patch hunks for `Settings.cs` and `McClient.cs` -- call out assumptions briefly if the user did not specify bot type or trigger behavior diff --git a/.skills/mcc-chatbot-authoring/assets/builtin-chatbot-template.cs b/.skills/mcc-chatbot-authoring/assets/builtin-chatbot-template.cs deleted file mode 100644 index 086c89e590..0000000000 --- a/.skills/mcc-chatbot-authoring/assets/builtin-chatbot-template.cs +++ /dev/null @@ -1,57 +0,0 @@ -// Use this template only when the user explicitly requests a built-in MCC bot. - -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - public class ExampleBot : ChatBot - { - private const string BotName = "ExampleBot"; - - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - public bool Enabled = false; - - public void OnSettingUpdate() - { - } - } - - public override void Initialize() - { - LogToConsole(BotName, "Initialized."); - } - - public override void AfterGameJoined() - { - } - - public override void GetText(string text) - { - text = GetVerbatim(text); - - string message = ""; - string username = ""; - - if (IsPrivateMessage(text, ref message, ref username)) - { - } - else if (IsChatMessage(text, ref message, ref username)) - { - } - } - - public override void OnUnload() - { - } - - public override bool OnDisconnect(DisconnectReason reason, string message) - { - return false; - } - } -} diff --git a/.skills/mcc-chatbot-authoring/assets/script-chatbot-template.cs b/.skills/mcc-chatbot-authoring/assets/script-chatbot-template.cs deleted file mode 100644 index 72be0cae76..0000000000 --- a/.skills/mcc-chatbot-authoring/assets/script-chatbot-template.cs +++ /dev/null @@ -1,37 +0,0 @@ -//MCCScript 1.0 - -MCC.LoadBot(new ExampleScriptBot()); - -//MCCScript Extensions - -public class ExampleScriptBot : ChatBot -{ - public override void Initialize() - { - LogToConsole("ExampleScriptBot initialized."); - } - - public override void AfterGameJoined() - { - // Safe place for startup chat or commands. - } - - public override void GetText(string text) - { - text = GetVerbatim(text); - - string message = ""; - string username = ""; - - if (IsPrivateMessage(text, ref message, ref username)) - { - LogToConsole("PM from " + username + ": " + message); - return; - } - - if (IsChatMessage(text, ref message, ref username)) - { - LogToConsole("Chat from " + username + ": " + message); - } - } -} diff --git a/.skills/mcc-chatbot-authoring/references/authoring-reference.md b/.skills/mcc-chatbot-authoring/references/authoring-reference.md deleted file mode 100644 index e51495ee04..0000000000 --- a/.skills/mcc-chatbot-authoring/references/authoring-reference.md +++ /dev/null @@ -1,492 +0,0 @@ -# MCC ChatBot Reference - -Self-contained authoring notes for Minecraft Console Client chat bots. - -## Bot types - -MCC supports two common authoring paths: -- standalone script bots loaded at runtime with `/script` -- built-in bots compiled into the MCC codebase - -Default to a standalone `/script` bot unless the user explicitly asks for a built-in bot or repo wiring. - -## Embedded current patterns - -This skill is intended to work even without an MCC checkout. The patterns below capture the important behavior that would otherwise be borrowed from current repo examples. - -If the local repo is available, you can verify against files such as `TestBot.cs`, `RemoteControl.cs`, `FollowPlayer.cs`, `ItemsCollector.cs`, and `Farmer.cs`. If it is not available, use the embedded patterns here directly. - -### Minimal chat parsing pattern - -Use this as the baseline for public/private chat handling: - -```csharp -public override void GetText(string text) -{ - string message = ""; - string sender = ""; - text = GetVerbatim(text); - - if (IsPrivateMessage(text, ref message, ref sender)) - { - LogToConsole("PM from " + sender + ": " + message); - } - else if (IsChatMessage(text, ref message, ref sender)) - { - LogToConsole("Chat from " + sender + ": " + message); - } -} -``` - -What matters: -- normalize first with `GetVerbatim(text)` -- handle PMs before public chat if both matter -- keep simple chat bots deterministic and small - -### Owner-gated PM control pattern - -Use this when a bot owner should be able to whisper MCC internal commands: - -```csharp -public override void GetText(string text) -{ - text = GetVerbatim(text).Trim(); - string command = ""; - string sender = ""; - - if (IsPrivateMessage(text, ref command, ref sender) - && Settings.Config.Main.Advanced.BotOwners.Contains(sender.ToLowerInvariant())) - { - CmdResult result = new(); - PerformInternalCommand(command, ref result); - SendPrivateMessage(sender, result.ToString()); - } -} -``` - -What matters: -- `PerformInternalCommand(...)` is for MCC commands, not server chat commands -- owner gating should use `Settings.Config.Main.Advanced.BotOwners` -- if `CmdResult` is used in a standalone script, add `//using MinecraftClient.CommandHandler` - -### Periodic work pattern - -Use `Update()` plus a counter or timestamp for simple repeated work: - -```csharp -private int count = 0; - -public override void Update() -{ - count++; - if (count < Settings.DoubleToTick(60)) - return; - - count = 0; - SendText("/list"); -} -``` - -What matters: -- avoid a worker thread for simple periodic loops -- avoid `Thread.Sleep(...)` inside `Update()` -- if sending chat, do it from a join-safe path like `Update()` or `AfterGameJoined()`, not `Initialize()` - -### Built-in Brigadier command pattern - -Use this for built-in command bots: - -```csharp -public override void Initialize() -{ - McClient.dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CommandName) - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - ) - ); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Literal("stop") - .Executes(r => OnCommandStop(r.Source))) - .Then(l => l.Literal("_help") - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Redirect(McClient.dispatcher.GetRoot().GetChild("help").GetChild(CommandName))) - ); -} - -public override void OnUnload() -{ - McClient.dispatcher.Unregister(CommandName); - McClient.dispatcher.GetRoot().GetChild("help").RemoveChild(CommandName); -} -``` - -What matters: -- register commands in `Initialize()` -- unregister the command tree in `OnUnload()` -- remove the help child you added in `OnUnload()` -- prefer this over legacy command wrappers for new built-in work - -### Built-in config and wiring pattern - -Use this as the default built-in shape: - -```csharp -public class ExampleBot : ChatBot -{ - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - public bool Enabled = false; - - public void OnSettingUpdate() - { - } - } -} -``` - -Typical host wiring shape: - -```csharp -[TomlPrecedingComment("$ChatBot.ExampleBot$")] -public ChatBots.ExampleBot.Configs ExampleBot -{ - get { return ChatBots.ExampleBot.Config; } - set { ChatBots.ExampleBot.Config = value; ChatBots.ExampleBot.Config.OnSettingUpdate(); } -} -``` - -```csharp -if (Config.ChatBot.ExampleBot.Enabled) { BotLoad(new ExampleBot()); } -``` - -What matters: -- built-in configurable bots default to `Enabled = false` -- `OnSettingUpdate()` is the place to normalize config values -- built-in delivery is incomplete without both config wiring and load registration - -### Movement gating pattern - -Use this shape when a built-in bot owns movement: - -```csharp -public override void Initialize() -{ - if (!GetEntityHandlingEnabled()) - { - LogToConsole("Entity handling is required."); - UnloadBot(); - return; - } - - if (!GetTerrainEnabled()) - { - LogToConsole("Terrain handling is required."); - UnloadBot(); - return; - } -} -``` - -```csharp -var movementLock = BotMovementLock.Instance; -if (movementLock is { IsLocked: true }) - return; - -movementLock?.Lock("Example Bot"); -``` - -```csharp -public override void OnUnload() -{ - BotMovementLock.Instance?.UnLock("Example Bot"); -} -``` - -What matters: -- guard terrain and entity handling before movement logic -- built-in movement bots should use `BotMovementLock` -- release the lock on every stop path, including unload and disconnect-sensitive flows - -### Dropped-item collector pattern - -Use this as the standalone item-search baseline: - -```csharp -private DateTime nextScan = DateTime.MinValue; - -public override void Update() -{ - var now = DateTime.UtcNow; - if (now < nextScan || ClientIsMoving()) - return; - - nextScan = now.AddSeconds(1); - - var here = GetCurrentLocation(); - var target = GetEntities().Values - .Where(entity => entity.Type == EntityType.Item && entity.Location.Distance(here) <= 15) - .OrderBy(entity => entity.Location.Distance(here)) - .FirstOrDefault(); - - if (target != null) - MoveToLocation(target.Location); -} -``` - -What matters: -- simple standalone collectors do not need a worker thread -- simple standalone collectors also do not need `BotMovementLock` by default -- `GetEntities()` plus distance ordering is the core search pattern - -### Inventory selection pattern - -Use this as the default hotbar-switch pattern: - -```csharp -private bool TrySwitchToItem(ItemType itemType) -{ - var inventory = GetPlayerInventory(); - - var hotbarSlots = inventory.SearchItem(itemType) - .Where(slot => slot >= 36 && slot <= 44) - .ToArray(); - - if (hotbarSlots.Length == 0) - return false; - - ChangeSlot((short)(hotbarSlots[0] - 36)); - return true; -} -``` - -What matters: -- guard with `GetInventoryEnabled()` -- search inventory snapshots, but mutate real server state with helpers like `ChangeSlot(...)` -- do not treat local `Container.Items` mutation as real inventory manipulation - -Use the older config examples only for ideas, not as primary scaffolding. - -## Standalone script format - -A standalone script bot has two parts in this order: -1. metadata block -2. one or more C# classes, with the main bot class inheriting `ChatBot` - -Required metadata rules: -- line 1 must be exactly `//MCCScript 1.0` -- metadata must include `MCC.LoadBot(new BotClassName());` -- metadata ends with `//MCCScript Extensions` -- optional metadata directives use `//using Namespace` and `//dll SomeLibrary.dll` -- do not insert a space after `//` in metadata directives - -Typical runtime flow: -- place the script file beside MCC -- connect to a server -- load it with `/script YourBotFile.cs` - -### Namespace linking for inventory code - -If a standalone script uses inventory-specific types such as `Container`, `ItemType`, `WindowActionType`, or `ItemMovingHelper`, add this metadata import: - -```csharp -//using MinecraftClient.Inventory -``` - -For built-in bots, use a normal C# import: - -```csharp -using MinecraftClient.Inventory; -``` - -## Lifecycle summary - -Common lifecycle hooks: -- `Initialize()` - called once when the bot loads; use it for cheap setup only -- `AfterGameJoined()` - called after the server has been joined successfully, and again after reconnecting; use it when chat can be sent -- `Update()` - called roughly every 100 ms -- `OnUnload()` - called when the bot unloads; release resources here -- `OnDisconnect(DisconnectReason reason, string message)` - called on disconnect; stop background work and clean up reconnect-sensitive state here - -Important rule: -- do not send chat from `Initialize()`; use `AfterGameJoined()` instead -- prefer `Initialize()` over constructors for environment checks and resource setup - -## Common event hooks - -Useful event hooks include: -- `GetText(string text)` -- `GetText(string text, string? json)` -- `OnPlayerJoin(Guid uuid, string name)` -- `OnPlayerLeave(Guid uuid, string? name)` -- `OnEntitySpawn(Entity entity)` -- `OnEntityDespawn(Entity entity)` -- `OnEntityMove(Entity entity)` -- `OnHealthUpdate(float health, int food)` -- `OnMapData(...)` -- `OnInventoryUpdate(int inventoryId)` -- `OnPluginMessage(string channel, byte[] data)` -- `OnNetworkPacket(int packetID, List packetData, bool isLogin, bool isInbound)` - -Only override hooks that actually exist in the target MCC ChatBot API. - -## Common helpers - -Text and messaging helpers: -- `GetVerbatim(text)` strips Minecraft formatting codes -- `IsChatMessage(text, ref message, ref sender)` parses public chat -- `IsPrivateMessage(text, ref message, ref sender)` parses private chat -- `IsValidName(username)` validates a Minecraft username -- `SendText(text)` sends chat or server commands -- `SendPrivateMessage(player, message)` sends a private message -- `PerformInternalCommand(command, ...)` runs an internal MCC command, not a server command -- `LogToConsole(text)` writes a bot-prefixed console message - -Lifecycle and threading helpers: -- `InvokeOnMainThread(...)` -- `ScheduleOnMainThread(...)` -- `ReconnectToTheServer(...)` -- `UnloadBot()` -- `BotLoad(chatBot)` -- `RunScript(filename, ...)` - -World and player-state helpers: -- `GetWorld()` -- `GetEntities()` -- `GetCurrentLocation()` -- `ClientIsMoving()` -- `GetOnlinePlayers()` -- `GetOnlinePlayersWithUUID()` -- `GetServerTPS()` -- `GetProtocolVersion()` - -Movement and inventory helpers: -- `MoveToLocation(...)` -- `LookAtLocation(...)` -- `GetInventoryEnabled()` -- `GetPlayerInventory()` -- `GetInventories()` -- `GetItemMovingHelper(...)` -- `WindowAction(...)` -- `ChangeSlot(...)` -- `GetCurrentSlot()` -- `UseItemInHand()` -- `UseItemInLeftHand()` -- `CloseInventory(...)` -- `DigBlock(...)` -- `InteractEntity(...)` - -## Inventory notes - -Inventory handling is optional in MCC. Check `GetInventoryEnabled()` before relying on inventory state or mutation. - -Important behavior: -- `GetPlayerInventory()` returns a snapshot copy of the player's inventory -- `GetInventories()` returns current container snapshots -- writing to those `Container` objects locally does not update the server -- to actually change inventory state, use `ChangeSlot(...)`, `WindowAction(...)`, `GetItemMovingHelper(...)`, `UseItemInHand()`, or related helpers - -Useful practical facts: -- hotbar selection uses `ChangeSlot(0..8)` -- hotbar slots are commonly `36..44` in inventory slot numbering -- the offhand slot is commonly `45` -- `Container.SearchItem(...)` is the normal way to locate items by type - -Good inventory workflow: -1. guard with `GetInventoryEnabled()` -2. read the current container using `GetPlayerInventory()` -3. locate slots with `SearchItem(...)` or `Items` -4. mutate server state using `ChangeSlot(...)`, `WindowAction(...)`, or `ItemMovingHelper` -5. if needed, react to `OnInventoryUpdate(...)`, `OnInventoryOpen(...)`, or `OnInventoryClose(...)` - -Plugins and channels: -- `RegisterPluginChannel(channel)` -- `UnregisterPluginChannel(channel)` -- `SendPluginChannelMessage(channel, data, ...)` - -## Built-in bot pattern - -A built-in bot usually follows this shape: -- a class that inherits `ChatBot` -- an optional static `Config` field -- a nested `[TomlDoNotInlineObject]` `Configs` class for settings -- an `Enabled = false` setting by default -- `OnSettingUpdate()` to normalize or validate config values - -If the bot is configurable, the host codebase usually also needs: -- config wiring in the chat-bot config model -- load registration so enabled bots are instantiated automatically - -In this MCC checkout, the usual built-in wiring points are: -- `MinecraftClient/Settings.cs` inside `Settings.ChatBotConfigHealper.ChatBotConfig` -- `MinecraftClient/McClient.cs` inside `RegisterBots(...)` - -Match the surrounding `[TomlPrecedingComment(...)]`, property-forwarding, and `BotLoad(new YourBot())` style instead of inventing a different config path. -When presenting built-in wiring, prefer literal code snippets or patch hunks for those two edits so the wiring can be checked directly. - -If the bot adds user-facing settings or messages, follow the host codebase's localization and config-comment conventions instead of scattering hardcoded strings. - -## Command pattern - -For standalone script bots, prefer chat or PM handling in `GetText(...)` unless the user explicitly asks for built-in command registration. - -For built-in commands, prefer the current Brigadier dispatcher pattern: -- register commands in `Initialize()` -- add a help entry if the bot exposes commands -- unregister the command tree in `OnUnload()` -- remove any help child added during registration in `OnUnload()` - -Avoid using legacy command wrappers if the current codebase uses direct dispatcher registration. -In this checkout, treat direct `McClient.dispatcher.Register(...)` usage in current built-in bots as the source of truth. - -## Concurrency and cleanup - -If the bot starts background work: -- stop it in `OnUnload()` -- stop it in `OnDisconnect(...)` -- consider resetting state in `AfterGameJoined()` after relog -- prefer `Update()` plus counters or timestamps over unmanaged threads when the task is simple periodic work - -If the bot controls movement: -- use a movement-lock discipline -- release the lock on every stop path -- avoid fighting other movement bots -- `BotMovementLock` is mainly for built-in bots or shared long-running automation; a simple standalone script that just calls `MoveToLocation(...)` does not need it by default - -When interacting with client state from background logic, use the main-thread helpers when required by the codebase. - -## Practical defaults - -For simple chat bots: -- normalize text with `GetVerbatim(text)` -- inspect private chat first if the bot listens for whispers -- then inspect public chat -- keep response logic small and deterministic - -For long-running automation bots: -- guard prerequisites early, such as entity handling or terrain support -- fail fast with a clear log message if prerequisites are missing -- release all ongoing work cleanly on unload and disconnect - -## Common pitfalls - -- Incorrect metadata line 1 will break standalone script loading. -- Missing `MCC.LoadBot(new BotClassName())` will prevent standalone script registration. -- Sending chat in `Initialize()` is too early. -- Doing prerequisite checks or unloading from the constructor is harder to reason about than using `Initialize()`. -- Parsing raw formatted text without `GetVerbatim()` causes brittle chat matching. -- Inventing methods not present in the MCC ChatBot API leads to dead code. -- Built-in bot work is incomplete if config or registration wiring is missing. -- Command bots are incomplete if they register commands but do not unregister them. -- `RegisterChatBotCommand(...)` comes from older samples and is not a reliable current pattern for this checkout. -- `ChatBotCommand` exists, but the current built-in bots use Brigadier directly; do not prefer `ChatBotCommand` for new work. -- Blocking `Thread.Sleep(...)` inside `Update()` is a bad default. Prefer timers, counters, or timestamp-based scheduling. -- Mutating the `Container` returned by `GetPlayerInventory()` does not change the server. Use inventory actions instead. diff --git a/.skills/mcc-chatbot-authoring/references/pattern-cookbook.md b/.skills/mcc-chatbot-authoring/references/pattern-cookbook.md deleted file mode 100644 index 4d17c85cf3..0000000000 --- a/.skills/mcc-chatbot-authoring/references/pattern-cookbook.md +++ /dev/null @@ -1,330 +0,0 @@ -# MCC Pattern Cookbook - -Concrete patterns for standalone MCC `/script` bots. Use these before inventing new scaffolding. - -## Periodic task without threads - -Use `Update()` plus a timestamp or counter. This comes from the old `sample-script-with-task.cs` example and still holds up well. - -```csharp -public class PeriodicTaskBot : ChatBot -{ - private DateTime nextRun = DateTime.MinValue; - - public override void Update() - { - var now = DateTime.UtcNow; - if (now < nextRun) - return; - - nextRun = now.AddSeconds(30); - LogDebugToConsole("Running periodic task"); - SendText("/ping"); - } -} -``` - -Why this pattern is good: -- stays on MCC's normal tick flow -- avoids background threads for simple periodic work -- keeps the bot responsive to unload and disconnect - -## Chat and PM handling - -This combines the useful parts of `TestBot`, `sample-script-pm-forwarder.cs`, and `RemoteControl.cs`. - -```csharp -public override void GetText(string text) -{ - text = GetVerbatim(text); - - string message = ""; - string sender = ""; - - if (IsPrivateMessage(text, ref message, ref sender)) - { - LogToConsole("PM from " + sender + ": " + message); - return; - } - - if (IsChatMessage(text, ref message, ref sender)) - { - LogToConsole("Chat from " + sender + ": " + message); - } -} -``` - -Owner-gated internal command handling: - -Add `//using MinecraftClient.CommandHandler` in the script metadata if you use `CmdResult`. - -```csharp -public override void GetText(string text) -{ - text = GetVerbatim(text).Trim(); - - string command = ""; - string sender = ""; - - if (IsPrivateMessage(text, ref command, ref sender) - && Settings.Config.Main.Advanced.BotOwners.Contains(sender.ToLowerInvariant())) - { - CmdResult result = new(); - PerformInternalCommand(command, ref result); - SendPrivateMessage(sender, result.ToString()); - } -} -``` - -## Movement with prerequisite checks - -Modern movement code should copy the guard style from current built-in bots, not the older constructor-heavy scripts. - -```csharp -public override void Initialize() -{ - if (!GetEntityHandlingEnabled() || !GetTerrainEnabled()) - { - LogToConsole("Entity handling and terrain handling are required."); - UnloadBot(); - } -} -``` - -Simple "look at nearest player" logic adapted from `AutoLook.cs`: - -```csharp -private Entity? trackedPlayer = null; - -public override void OnEntitySpawn(Entity entity) -{ - TryTrack(entity); -} - -public override void OnEntityDespawn(Entity entity) -{ - if (trackedPlayer != null && entity.ID == trackedPlayer.ID) - trackedPlayer = null; -} - -public override void OnEntityMove(Entity entity) -{ - if (!TryTrack(entity)) - return; - - LookAtLocation(entity.Location); -} - -private bool TryTrack(Entity entity) -{ - if (entity.Type != EntityType.Player) - return false; - - if (trackedPlayer == null) - { - trackedPlayer = entity; - return true; - } - - if (GetCurrentLocation().Distance(entity.Location) < GetCurrentLocation().Distance(trackedPlayer.Location)) - trackedPlayer = entity; - - return trackedPlayer.ID == entity.ID; -} -``` - -## Search for dropped items and move to them - -This is the safest pattern to preserve from `ItemsCollector.cs` for standalone scripts. - -```csharp -public class NearbyItemsBot : ChatBot -{ - private DateTime nextScan = DateTime.MinValue; - - public override void Initialize() - { - if (!GetEntityHandlingEnabled() || !GetTerrainEnabled()) - { - LogToConsole("Entity handling and terrain handling are required."); - UnloadBot(); - } - } - - public override void Update() - { - var now = DateTime.UtcNow; - if (now < nextScan || ClientIsMoving()) - return; - - nextScan = now.AddSeconds(1); - - var here = GetCurrentLocation(); - var target = GetEntities().Values - .Where(entity => entity.Type == EntityType.Item && entity.Location.Distance(here) <= 15) - .OrderBy(entity => entity.Location.Distance(here)) - .FirstOrDefault(); - - if (target != null) - MoveToLocation(target.Location); - } -} -``` - -Why this version is better than older farming scripts: -- no unmanaged worker thread -- no busy wait loop around movement -- uses the current `GetEntities()` pattern - -## Search for blocks or crops in the world - -The old sugar cane and mining scripts still contain a useful search idea: use `GetWorld().FindBlock(...)`, then filter and sort. - -```csharp -var targets = GetWorld() - .FindBlock(GetCurrentLocation(), Material.SugarCane, 16) - .Where(block => - GetWorld().GetBlock(new Location(block.X, block.Y - 1, block.Z)).Type == Material.SugarCane) - .OrderBy(block => block.Distance(GetCurrentLocation())) - .ToList(); -``` - -Use this as a search primitive. Then decide separately how to move, dig, or harvest. - -## Inventory access and manipulation - -If a standalone script uses inventory types directly, add this import in the metadata block: - -```csharp -//using MinecraftClient.Inventory -``` - -For built-in bots, add: - -```csharp -using MinecraftClient.Inventory; -``` - -Always guard inventory logic first: - -```csharp -public override void Initialize() -{ - if (!GetInventoryEnabled()) - { - LogToConsole("Inventory handling is required."); - UnloadBot(); - } -} -``` - -Important rule: -- `GetPlayerInventory()` returns a snapshot copy, so editing its `Items` dictionary does not change the server -- actual changes must go through `ChangeSlot(...)`, `WindowAction(...)`, `GetItemMovingHelper(...)`, `UseItemInHand()`, and related helpers - -### Search inventory for an item - -This combines the useful current logic from `Farmer.cs` and `AutoEat.cs`. - -```csharp -private bool TrySwitchToItem(ItemType itemType) -{ - var inventory = GetPlayerInventory(); - - if (inventory.Items.TryGetValue(GetCurrentSlot() - 36, out var held) && held.Type == itemType) - return true; - - var hotbarSlots = inventory.SearchItem(itemType) - .Where(slot => slot >= 36 && slot <= 44) - .ToArray(); - - if (hotbarSlots.Length == 0) - return false; - - ChangeSlot((short)(hotbarSlots[0] - 36)); - return true; -} -``` - -Use this for simple hotbar selection. For deeper inventory reshuffling, built-in bots usually need more helper logic. - -### Move an item into the hotbar - -Use this when the item exists in inventory but is not already on the hotbar. - -```csharp -private bool TryMoveItemToHotbar(ItemType itemType, short targetHotbarSlot = 0) -{ - var inventory = GetPlayerInventory(); - var matches = inventory.SearchItem(itemType); - - if (matches.Length == 0) - return false; - - var targetInventorySlot = 36 + targetHotbarSlot; - - if (matches[0] >= 36 && matches[0] <= 44) - { - ChangeSlot((short)(matches[0] - 36)); - return true; - } - - var movingHelper = GetItemMovingHelper(inventory); - movingHelper.Swap(matches[0], targetInventorySlot); - ChangeSlot(targetHotbarSlot); - return true; -} -``` - -Why this pattern is good: -- it reads the current snapshot first -- it does not pretend local `Container` edits affect the server -- it uses the item-moving helper for real inventory manipulation - -### Drop or click items with window actions - -Use `WindowAction(...)` when the bot needs direct inventory clicks or dropping behavior. - -```csharp -private void DropAllOfType(ItemType itemType) -{ - var inventory = GetPlayerInventory(); - - foreach (int slot in inventory.SearchItem(itemType)) - WindowAction(0, slot, WindowActionType.DropItemStack); -} -``` - -Use this pattern carefully: -- verify the correct inventory ID first -- prefer reacting to `OnInventoryUpdate(...)` for larger inventory workflows -- for crafting or chest workflows, use `GetInventories()` and `CloseInventory(...)` as needed - -## Built-in command bot pattern - -Only use this when the user explicitly asks for a built-in bot. - -```csharp -public override void Initialize() -{ - McClient.dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CommandName) - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - ) - ); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Literal("_help") - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Redirect(McClient.dispatcher.GetRoot().GetChild("help").GetChild(CommandName))) - ); -} - -public override void OnUnload() -{ - McClient.dispatcher.Unregister(CommandName); - McClient.dispatcher.GetRoot().GetChild("help").RemoveChild(CommandName); -} -``` - -Use a built-in bot only when the user explicitly asks for compiled MCC behavior or repo wiring. diff --git a/.skills/mcc-dev-workflow/SKILL.md b/.skills/mcc-dev-workflow/SKILL.md deleted file mode 100644 index 0661489209..0000000000 --- a/.skills/mcc-dev-workflow/SKILL.md +++ /dev/null @@ -1,362 +0,0 @@ ---- -name: mcc-dev-workflow -description: Build, run, and debug Minecraft Console Client (MCC) against a real local Minecraft Java server on Linux, macOS, or WSL. Use this whenever the user wants to compile MCC, start or inspect a local test server, connect MCC to a server, debug protocol or login issues, validate a code change end-to-end, or run MCC commands on a real server instead of guessing from static code. ---- - -# MCC Development Workflow - -Use this skill when the task needs a real local server loop, not just code reading. - -## Defaults - -- Solution: `MinecraftClient.sln` -- Runtime target: `.NET 10` / `net10.0` -- Environment: Linux, macOS, or WSL with Java, tmux, python3, and dotnet available -- Default server root after `source tools/mcc-env.sh`: `${MCC_SERVERS:-/MinecraftOfficial/downloads}` -- Default validation target when the user does not specify a version: `1.21.11` - -## Console modes - -MCC supports two console modes selectable via `ConsoleMode` in `[Console.General]`: - -| Mode | Backend | Best for | -|------|---------|----------| -| `classic` | `ClassicConsoleBackend` (ConsoleInteractive) | Normal use, legacy CI/scripts, `FileInput` mode | -| `tui` | `TuiConsoleBackend` (Avalonia/Consolonia) | Full-screen TUI with scrollable log, command input, popup inventory | - -Both modes support the same commands and input/output through `ConsoleIO.Backend`. The mode is determined at startup from config; `BasicIO` CLI arg overrides to simple stdio. - -## Core rules - -- Prefer a real local server over static reasoning for protocol, login, movement, inventory, entity, or command-path work. -- Treat tmux `mc-*` sessions as shared state. Do not run multi-version server workflows in parallel unless the harness explicitly isolates them. -- For scripted or repeatable runs, use a generated temporary config. Do not edit the repo-root `MinecraftClient.ini` as part of the test loop. -- A server log line containing `Done (` means startup finished. It does not guarantee that RCON is ready on the first attempt. Retry early `mc-rcon` commands. -- When instructions, docs, and code disagree, trust current code and current tool behavior first. - -## Shared server, isolated MCC sessions - -- `mc-*` commands operate on the shared local Minecraft server. -- `mcc-*` commands operate on one MCC client session. -- The default `session` is the current worktree name. -- The default username is derived from `session`, unless you pass `--username`. -- Session files live under `${TMPDIR:-/tmp}/mcc-debug//`. -- `MCC_SERVERS` stays the shared server-root override. - -Keep shared servers running by default. Do not stop or reset them unless the user explicitly asks for that, or you need to switch server versions. - -Two worktrees can debug against one shared server like this: - -```bash -# worktree A -cd ~/Minecraft/Minecraft-Console-Client -source tools/mcc-env.sh -mc-start 1.21.11 -mcc-debug -v 1.21.11 --file-input - -# worktree B -cd ~/Minecraft/Minecraft-Console-Client-foo -source tools/mcc-env.sh -mcc-debug -v 1.21.11 --file-input - -# from each worktree, mcc-* targets that worktree's default session -mcc-state -``` - -If you want two MCC sessions from the same worktree, pass `--session NAME` explicitly. - -## tmpfs build mode - -Use this on machines with enough RAM when you want worktree-isolated builds outside the repo tree: - -```bash -source tools/mcc-env.sh -export MCC_BUILD_MODE=tmpfs -mcc-build -mcc-build-clean -``` - -`MCC_BUILD_MODE=tmpfs` redirects build output to `/dev/shm/mcc-build//` on Linux, or `${TMPDIR:-/tmp}/mcc-build//` if `/dev/shm` is unavailable. - -## Preflight and reset - -Before scripted runs, especially on macOS or in a reused tmux environment: - -```bash -source tools/mcc-env.sh -mcc-preflight 1.21.11 -mc-reset-test-env 1.21.11 -``` - -`mcc-preflight` checks Java, tmux, dotnet, python3, and server directories. It also resolves common Homebrew Java paths on macOS. `mc-reset-test-env` clears stale tmux sessions and stale `stdin.pipe` files before they turn into misleading startup failures. - -## Build - -```bash -source tools/mcc-env.sh -mcc-build -``` - -Use `mcc-build` for normal local development so any `MCC_BUILD_MODE=tmpfs` routing stays active. Only use raw `dotnet build` when you are intentionally debugging the build system itself. - -## Server management - -Interactive shell: - -```bash -source tools/mcc-env.sh -SESSION="$(_mcc_resolve_session)" -USERNAME="$(_mcc_resolve_username "$SESSION")" -mc-start 1.21.11 -mc-log 1.21.11 100 -mc-rcon "op $USERNAME" -mc-stop 1.21.11 -``` - -Non-interactive shell: - -```bash -tools/start-server.sh 1.21.11 -tools/mc-rcon.sh "op mcc_smoke_a" -``` - -If the servers live outside the repo, set `MCC_SERVERS` before sourcing or invoking the tools: - -```bash -export MCC_SERVERS=/home/anon/Minecraft/Servers -source tools/mcc-env.sh -``` - -## One-step debug session (recommended) - -The `tools/mcc-debug.sh` script handles build, server startup, config preparation, and MCC launch in one step: - -```bash -source tools/mcc-env.sh - -# Classic mode with FileInput (script-driven debugging): -mcc-debug -v 1.21.11 --file-input - -# Classic mode interactive (attach via tmux): -mcc-debug -v 1.21.11 - -# TUI mode: -mcc-debug -v 1.21.11 -m tui - -# With debug messages enabled from start: -mcc-debug -v 1.21.11 --file-input --debug-on - -# Skip build (already built): -mcc-debug -v 1.21.11 --file-input --no-build -``` - -### What mcc-debug.sh does - -1. Builds MCC (unless `--no-build`) -2. Creates a clean temp config at `${TMPDIR:-/tmp}/mcc-debug//MinecraftClient.debug.ini` -3. Ensures server is running (starts if not, waits for `Done (`) -4. Launches MCC in a session-scoped tmux session and session-scoped log/input/pid files - -### After launch - -- **FileInput mode**: drive MCC via `mcc-cmd --session smoke-a "debug state"`, or just `mcc-cmd "debug state"` from the same worktree -- **Interactive/TUI mode**: attach with `tmux attach -t mcc-` -- **Logs**: `mcc-log-mcc --session smoke-a` or `tail -f "${TMPDIR:-/tmp}/mcc-debug//mcc-debug.log"` -- **Server RCON**: grant op or gamemode to the username derived from that session - -## Debug commands (in-game) - -### `/debug [on|off]` - -Toggles debug logging. Now correctly syncs both `Settings.Config.Logging.DebugMessages` and `McClient.Log.DebugEnabled`. - -### `/debug state` - -Prints a one-shot summary of MCC's internal state: - -``` -=== MCC Debug State === -Server: localhost:25565 -Username: mcc_smoke_a -Protocol: 774 -GameMode: 1 -Health: 20.0 -Food: 20 -Location: 0.50, 80.00, 0.50 -TPS: 20.0 -Console: ClassicConsoleBackend (or TuiConsoleBackend) -Features: Terrain Inventory Entity -Debug: ON -Bots (3): AutoFishing, FileInputBot, ScriptScheduler -Players: 2 online -``` - -This works in both classic and TUI modes. - -## Classic mode debugging - -### Agent workflow (FileInput mode) - -For agents calling MCC commands programmatically: - -```bash -source tools/mcc-env.sh -SESSION="smoke-a" -mcc-debug -v 1.21.11 --file-input --session "$SESSION" --no-build - -# Send commands: -mcc-cmd --session "$SESSION" "debug state" -mcc-cmd --session "$SESSION" "inventory player list" -mcc-cmd --session "$SESSION" "entity" - -# Check results: -mcc-log-mcc --session "$SESSION" - -# Stop: -mcc-cmd --session "$SESSION" "quit" -mcc-kill --session "$SESSION" -mc-stop 1.21.11 -``` - -### Interactive workflow - -```bash -source tools/mcc-env.sh -SESSION="live-a" -mcc-debug -v 1.21.11 --session "$SESSION" - -# In another terminal: -tmux attach -t "mcc-$SESSION" -# Type commands directly in MCC console -``` - -## TUI mode debugging - -TUI mode runs Consolonia full-screen in a tmux session. Key differences: - -1. **No pipe/redirect**: TUI needs a real tty. Cannot `| tee` or redirect stdout. -2. **Log output is in-screen**: all output appears in the scrollable log area. -3. **Keyboard shortcuts**: PageUp/PageDown scroll, ESC exits. -4. **`/debug state`**: the primary way to inspect internal state since external log tailing is not available. -5. **Dialog windows**: `/inventui` opens as an overlay dialog instead of a separate screen. - -### Agent workflow for TUI mode - -```bash -source tools/mcc-env.sh -SESSION="tui-a" -mcc-debug -v 1.21.11 -m tui --session "$SESSION" --no-build - -# Cannot use mcc-cmd (no FileInput); must use tmux send-keys: -tmux send-keys -t "mcc-$SESSION" "/debug state" Enter - -# Read TUI screen: -tmux capture-pane -t "mcc-$SESSION" -p -S -30 - -# Stop: -tmux send-keys -t "mcc-$SESSION" Escape -``` - -**Caveat with tmux send-keys and Consolonia**: When sending text containing `/`, the Enter key may need to be sent separately: -```bash -tmux send-keys -t "mcc-$SESSION" "/inventory player list" -tmux send-keys -t "mcc-$SESSION" Enter -``` - -## mcc-env.sh quick reference - -After `source tools/mcc-env.sh`: - -| Function | Description | -|----------|-------------| -| `mc-start VER` | Start MC server in tmux | -| `mc-stop VER` | Graceful stop via stdin pipe | -| `mc-log VER [N]` | Capture last N lines of server output | -| `mc-rcon "CMD"` | Send RCON command | -| `mc-kill VER` | Force-kill server tmux session | -| `mc-list` | List running MC server sessions | -| `mc-wait-ready VER [SEC]` | Wait for server `Done (` | -| `mc-wait-stop VER [SEC]` | Wait for server shutdown, with force-kill fallback | -| `mc-reset-test-env [--all|VER...]` | Reset shared tmux server state and stale pipes | -| `mcc-build` | Build MCC | -| `mcc-publish --rid ` | Publish MCC with the repo's CI-like defaults | -| `mcc-build-clean` | Clear the current worktree's build output | -| `mcc-run [--session NAME] [--username NAME] [--port PORT]` | Convenience wrapper for `mcc-debug --file-input --no-build` | -| `mcc-tui [--session NAME] [--username NAME] [--port PORT]` | Convenience wrapper for `mcc-debug -m tui --no-build` | -| `mcc-cmd [--session NAME] "CMD"` | Append a command to one session's input file | -| `mcc-kill [--session NAME]` | Kill one MCC process and session | -| `mcc-debug [OPTS]` | One-step debug session (see above) | -| `mcc-log-mcc [--session NAME]` | Tail one MCC debug log | -| `mcc-state [--session NAME]` | Send `debug state` and print the last 30 log lines | -| `mcc-preflight [VER...]` | Verify Java, tmux, dotnet, python3, and server dirs | - -## Temporary config recipe - -```bash -source tools/mcc-env.sh -SESSION="smoke-a" -USERNAME="$(_mcc_resolve_username "$SESSION")" -CFG="$(_mcc_session_root "$SESSION")/MinecraftClient.debug.ini" -mkdir -p "$(_mcc_session_root "$SESSION")" -bash "$MCC_REPO/.skills/mcc-integration-testing/scripts/prepare_offline_mcc_config.sh" \ - "$CFG" \ - "1.21.11" \ - "$USERNAME" -``` - -For TUI mode, also add: -```bash -sed -i 's/ConsoleMode = "classic"/ConsoleMode = "tui"/' "$CFG" -``` - -## Verify connection and a basic command - -MCC output should include: - -- `[MCC] Server was successfully joined.` - -Server output should include the session-derived username, for example: - -- `mcc_smoke_a joined the game` - -Basic command check: - -```bash -mcc-cmd --session smoke-a "inventory player list" -``` - -If a scripted run fails before MCC joins, check for a harness problem before assuming a product regression. Missing `mcc.log`, a pre-join `Connection refused`, or a server that never reached `Done (` usually means shared-state cleanup or startup failed. - -## Typical debug loop - -1. `source tools/mcc-env.sh` -2. `mcc-debug -v 1.21.11 --file-input` (or `-m tui`) -3. Confirm `Server was successfully joined` in log -4. `mcc-cmd "debug state"` to verify MCC state -5. Run test commands -6. Inspect log output -7. `mcc-cmd "quit"` and `mc-stop 1.21.11` -8. Edit code, rebuild, repeat - -## Debugging tips - -- **`/debug state` is your primary diagnostic tool** in both modes. Use it first to verify connection, mode, and feature flags. -- **`/debug on` now correctly enables debug logging** at runtime. Previous versions had a bug where `Log.DebugEnabled` was not synced. -- Protocol mismatches usually show up as a version line such as `Server version : 1.21.11 (protocol vNNN)` before the failure. -- If an early `mc-rcon` command fails, retry it before assuming the server setup is broken. -- If a supposedly isolated run behaves strangely, check `tmux list-sessions` and kill stale `mc-*` sessions first. -- Legacy `1.8` and `1.8.9` servers may need `use-native-transport=false` in `server.properties` on some Linux environments. -- For timing-sensitive work, do not trust wall-clock intuition. Use a real server run and capture evidence from logs or test scripts. -- **TUI mode tip**: if the terminal becomes unresponsive after a crash, run `stty sane && reset` to restore it. -- **tmux capture trick**: `tmux capture-pane -t mcc- -p -S -50` captures the last 50 lines of a tmux session without attaching. - -## Tool files - -| File | Purpose | -|------|---------| -| `tools/mcc-env.sh` | Shell functions for server/MCC management | -| `tools/mcc-debug.sh` | One-step debug session launcher | -| `tools/mcc-log-tail.sh` | Log tailing for MCC and/or server | -| `tools/start-server.sh` | Server lifecycle in tmux | -| `tools/mc-rcon.sh` | RCON command sender | -| `tools/run-creative-e2e.sh` | Full creative mode end-to-end test | diff --git a/.skills/mcc-dev-workflow/evals/evals.json b/.skills/mcc-dev-workflow/evals/evals.json deleted file mode 100644 index 7d86331ee5..0000000000 --- a/.skills/mcc-dev-workflow/evals/evals.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "skill_name": "mcc-dev-workflow", - "evals": [ - { - "id": 1, - "prompt": "Build MCC, start the local 1.21.11 vanilla server from an MCC_SERVERS root, connect MCC with a temporary config, and verify a successful join plus one inventory command.", - "expected_output": "The workflow uses a real local server, a temp MCC config, and concrete log evidence for both the join and the MCC command.", - "files": [], - "expectations": [ - "The workflow uses a real local 1.21.11 server instead of only reading code.", - "The workflow uses MCC_SERVERS-aware tooling or documents the server root explicitly.", - "The workflow uses a temporary MCC config instead of relying on the repo-root config.", - "The result includes join evidence from MCC output and the server log." - ] - }, - { - "id": 2, - "prompt": "Debug a flaky local MCC startup on 1.21.11 by checking for stale tmux server sessions, waiting for server readiness, and retrying early RCON commands before blaming protocol code.", - "expected_output": "The response treats tmux sessions as shared state, distinguishes server startup from RCON readiness, and uses the real local workflow rather than pure speculation.", - "files": [], - "expectations": [ - "The workflow checks or mentions stale mc-* tmux sessions.", - "The workflow distinguishes Done from RCON readiness.", - "The workflow retries or advises retrying early RCON commands.", - "The workflow keeps the debugging loop grounded in real local commands." - ] - }, - { - "id": 3, - "prompt": "Run a repeatable local MCC debug loop for 1.21.11 that compiles the client, connects with movement, inventory, and entity handling enabled, and leaves enough evidence to inspect a regression afterward.", - "expected_output": "The response follows a real build-run-test-inspect loop and captures enough log evidence to support follow-up debugging.", - "files": [], - "expectations": [ - "The workflow builds MCC before the run.", - "The workflow enables terrain, inventory, and entity handling for the scripted run.", - "The workflow captures or points to concrete log locations.", - "The workflow prefers a temp config for repeatability." - ] - } - ] -} diff --git a/.skills/mcc-integration-testing/SKILL.md b/.skills/mcc-integration-testing/SKILL.md deleted file mode 100644 index 9f70a8043e..0000000000 --- a/.skills/mcc-integration-testing/SKILL.md +++ /dev/null @@ -1,323 +0,0 @@ ---- -name: mcc-integration-testing -description: >- - Use when proving MCC behavior on a real local Minecraft server, validating - runtime or protocol changes end-to-end, exercising movement, physics, - inventory, entity, chat, or terrain behavior, or running a single-version or - cross-version regression sweep. -metadata: - category: discipline - triggers: - - integration test - - real server - - local server - - regression sweep - - rcon - - tmux - - offline mode - - online mode - - movement - - physics - - inventory - - entity - - terrain - - chat ---- - -# MCC Integration Testing - -Use this skill when the task is "prove it on a real server", not just "reason about whether it should work." - -Read [references/online-mode.md](references/online-mode.md) when the user asks for Microsoft login, device-code auth, or an online-mode server run. Use [references/command-matrix.md](references/command-matrix.md) for stable MCC-side and RCON-side commands. - -## Iron Law - -Only say MCC was integration tested when MCC ran against a real local server and the claim is backed by real MCC output plus real server logs. - -Calling build-only, reasoning-only, or join-only work "integration tested" is a rules violation, not shorthand. - -These do not count as end-to-end proof: - -- static reasoning, source comparison, or build success -- join or login success by itself -- a long-lived idle connection by itself -- a grep that only says there were no errors -- testing one shared-route version and silently claiming adjacent versions also passed - -If the environment cannot run a real server, say so and report the result as unexecuted or inferred, not integration tested. - -## Default target - -- Use `1.21.11-Vanilla` unless the user asks for a different version or a version matrix. -- Use `MCC_SERVERS` if it is set. Otherwise the default server root is `MinecraftOfficial/downloads`. - -## Guardrails - -- Use a real local server. -- Launch MCC against an explicit `localhost:` target for repeatable local tests. -- Keep version matrices sequential in shared local environments. The tmux server harness is shared state by default. -- Prefer generated temporary MCC configs for scripted runs so one test does not contaminate the next. -- Default to offline auth in generated temp configs. Do not trust the repo-root `MinecraftClient.ini` account defaults. -- If the user explicitly asks for Microsoft online login, honor that request and generate the temp config for Microsoft auth instead of offline mode. -- For Microsoft auth, prefer an interactive TTY launch with `BasicIO-NoColor` so the device code is easy to read and relay to the user. -- Do not use file-input mode during Microsoft auth. Launch interactively first, complete login, then switch to scripted control only if needed. -- For online-mode tests, prefer a clean temp config with no join-time bots or scheduled tasks. Inherited `ScriptScheduler` or `DiscordRpc` settings can pollute the session and send unintended chat right after login. -- Legacy and modern command syntax differ. Do not assume one server-command profile fits every version. -- Use actual MCC output and actual server logs for assertions. Do not invent success strings. -- Treat server `Done` as startup progress, not RCON readiness. Retry the first RCON command before assuming the setup is broken. -- Run preflight before scripted test loops. On macOS, Java may be installed but not exported on PATH in the shell the harness uses. -- If a change touches shared routing or a version range, test at least one adjacent version that shares that path, or explicitly mark adjacent versions as unexecuted and inferred. -- For palette or version-content changes, probe at least one neighboring or existing item, entity, or block. Do not only check the headline addition. -- Separate product failures from harness failures. Missing logs, stale tmux state, stale `stdin.pipe`, or pre-join `Connection refused` errors are usually environment problems until proven otherwise. - -## Choose the test mode - -### 1. Single-version deep smoke - -Use this when one supported version is enough and you want broad coverage: - -```bash -.skills/mcc-integration-testing/scripts/run_full_spectrum_test.sh 1.21.11-Vanilla -``` - -This covers join, chat, slash commands, internal MCC commands, creative inventory, entity handling, sounds, particles, TNT, kill/respawn, and log assertions. - -### 2. Ordered creative-mode E2E - -Use this when the user asks for a regression sweep in a strict scenario order such as: - -- connect -- send messages -- send commands -- receive messages -- movement -- physics -- mobs -- effects -- inventory - -Broad validation should usually cover `connect-test`, `item-test`, `entity-test`, `terrain-test`, and `chat-test`. - -Command: - -```bash -MCC_SERVERS=/home/anon/Minecraft/Servers bash tools/run-creative-e2e.sh 1.21.11-Vanilla 1.21.11 modern -``` - -For legacy targets such as `1.8` or `1.8.9`, switch the final argument to `legacy` and pass the pinned MC version. - -### 3. Timing or cadence validation - -Use this for TPS, movement-cadence, or packet-cadence work: - -- `MinecraftClient/config/sample-script-tick-counter.cs` -- `MinecraftClient/config/sample-script-packet-capture.cs` - -Run them against a real server with a temp config and summarize counts from the captured logs. - -### 4. Structured components test - -Use this after touching any `StructuredComponents` code (registries, component -parsers, subcomponents, codec helpers) to prove every component type in a -version parses on the wire without error: - -```bash -bash tools/run-structured-components-test.sh 1.21.11 -``` - -Run a single version (fast, ~2 min) or a matrix: - -```bash -for v in 1.20.6 1.21 1.21.2 1.21.5 1.21.11 26.1; do - bash tools/run-structured-components-test.sh "$v" -done -``` - -The script gives items with every registered component via RCON `/give`, reads -them back with `inventory player list`, and asserts no parse errors in the MCC -log. Version-gated components (v1212+, v1215+, v12111+, v261) are tested only -on the versions that support them. See `SC_Integration_Test_Report.md` for a -reference run across all 6 version groups. - -### 6. Dialog integration test - -Use this after touching any dialog system code (packet handling, NBT parsing, -models, TUI, command dispatch, the state machine in `DialogManager`, or the -codec in `DialogNbtParser`). Tests all 5 dialog types, button actions (close, -run_command, show_dialog), cancel/dismiss, click-label, and body content: - -```bash -tools/run-dialog-test.sh 26.1 -``` - -The script starts the server if needed, generates a temp MCC config, launches -MCC with file-input mode (requires both `MCC_FILE_INPUT=1` and -`MCC_INPUT_FILE=` env vars), sends inline SNBT dialogs via RCON, and -asserts 29 checks against the MCC log. - -Key requirements that differ from other test modes: - -- FileInputBot is loaded only when `MCC_FILE_INPUT=1` is set in the - environment. The `[ChatBot.FileInput]` config section is ignored at load - time. -- The input file path is controlled by `MCC_INPUT_FILE`, *not* by the config - `File` setting. -- Dialogs use inline SNBT syntax through `ResourceOrIdArgument`, e.g.: - `dialog show {type:"minecraft:notice", title:{text:"Hello"}}` -- The `ActionButton.CODEC` flattens `CommonButtonData` fields (`label`, - `tooltip`, `width`) into the same object as `action` — no `button` wrapper. - -### 5. Full inventory regression sweep - -Use this when touching inventory snapshots, player/container slot sync, creative inventory, item-slot serialization, packet palettes, game-mode updates, or block-use paths that open containers: - -```bash -tools/run-inventory-full-sweep.sh --versions "1.21.10 1.21.11" -``` - -Default coverage includes: - -- player inventory listing and inventory discovery -- creative give/delete -- inventory search -- player right/left click stack split and merge -- player drop one and drop all -- chest open via `useblock` -- container listing and close -- mirrored player slots in container windows -- shift-click and shift-right-click transfer -- container right/left click, cursor stack, drop one, and drop all -- creative middle-click command path -- log scan for packet parse failures, queue-empty crashes, unhandled exceptions, and disconnects - -The script writes `summary.tsv` under `RUN_ROOT` and per-version logs under `/tmp/mcc-debug/inventory-full-/mcc-debug.log`. - -When a matrix has existing PASS rows, do not rerun them unless a later code change affects that row or the user asks for a full rerun. Derive remaining rows from summaries: - -```bash -awk 'FNR>1 && $2=="PASS" {print $1}' /tmp/mcc-inventory-full-sweep/*/summary.tsv | sort -V | uniq -``` - -## Preconditions - -Before running any scenario: - -0. run preflight and clear stale shared state when the environment is reused -1. configure the target server for offline testing -2. ensure `eula=true` -3. ensure RCON is enabled -4. build MCC unless the task explicitly reuses a fresh build - -Preflight and reset helpers: - -```bash -.skills/mcc-integration-testing/scripts/preflight_test_env.sh 1.21.11-Vanilla -.skills/mcc-integration-testing/scripts/reset_shared_test_state.sh 1.21.11-Vanilla -``` - -Offline configuration helper: - -```bash -.skills/mcc-integration-testing/scripts/ensure_offline_server.sh 1.21.11-Vanilla -``` - -By default, the config helper prepares offline auth. To opt into another auth mode for a specific run, set: - -```bash -MCC_TEST_ACCOUNT_TYPE=microsoft -MCC_TEST_PASSWORD= -``` - -Optionally override the login name with the fourth argument to the config helper. - -## Scripts and tools - -- `.skills/mcc-integration-testing/scripts/ensure_offline_server.sh` - - configures persistent offline mode and RCON -- `.skills/mcc-integration-testing/scripts/preflight_test_env.sh` - - verifies Java, tmux, dotnet, python3, server directories, and resolves common Java PATH issues -- `.skills/mcc-integration-testing/scripts/reset_shared_test_state.sh` - - clears stale tmux sessions and stale `stdin.pipe` files before a rerun -- `.skills/mcc-integration-testing/scripts/prepare_offline_mcc_config.sh` - - generates a clean temporary MCC config, prepares offline login by default, disables noisy bots, and can switch to Microsoft auth when explicitly requested -- `.skills/mcc-integration-testing/scripts/get_server_port.sh` - - resolves the actual local server port from `server.properties` or the latest server log -- `.skills/mcc-integration-testing/scripts/run_full_spectrum_test.sh` - - single-version deep smoke with built-in assertions -- `.skills/mcc-integration-testing/scripts/summarize_test_run.sh` - - summarize the latest full-spectrum run -- `tools/run-creative-e2e.sh` - - ordered creative-mode E2E regression scenario -- `tools/run-inventory-full-sweep.sh` - - full inventory command/API sweep across one or more versions -- `tools/run-structured-components-test.sh` - - exercises every structured component via RCON `/give` across versions 1.20.6-26.1 -- `tools/run-dialog-test.sh` - - dialog integration test: all 5 types, run_command/show_dialog actions, - cancel/dismiss/click-label, body content; 29 assertions on MCC log - -## Evidence Discipline - -In every report, separate: - -- `Executed`: exact scripts, commands, versions, auth mode, and whether the run was sequential or single-version -- `Observed`: exact MCC output, exact server-log evidence, and the saved log directory -- `Inferred`: conclusions not directly shown by that run's runtime evidence -- `Harness issues`: setup or runner problems such as missing Java on PATH, stale tmux sessions, stale `stdin.pipe`, missing log artifacts, or failed config generation - -Never upgrade inferred claims to observed facts. Absence of errors is supporting evidence only; pair it with a positive assertion for the feature under test. - -## Red Flags - -Stop and fix the test plan if you are about to: - -- claim movement, inventory, entity, terrain, physics, or chat coverage from join success alone -- reuse repo-root `MinecraftClient.ini` or another user-local stateful config -- run multi-version tests in parallel in a shared tmux or shared server environment -- let inherited bots, schedulers, or other user-local noise send chat or commands during validation - -## What to report back - -Always summarize: - -- which version or versions were tested -- which port or ports were used -- which auth mode and scenario were used -- whether the run was sequential or single-version -- the exact scripts or commands executed -- pass or fail per major phase -- concrete evidence from MCC and server logs -- the saved log directory -- what was not executed and what remains inferred -- which adjacent versions were not run but were mentioned - -## When Not to Use - -- build-only verification -- static protocol or source comparison with no real server run -- documentation or prompt work -- code review requests that do not ask for executed runtime proof - -## Troubleshooting - -- If the first RCON command fails, retry it before assuming the setup is broken. -- If Java is installed but the harness still says it is missing, run `preflight_test_env.sh`. This resolves common Homebrew Java paths on macOS. -- If MCC reaches Microsoft device-code login during an offline test, stop and inspect the generated temp config before retrying. -- If the user explicitly requests Microsoft online login, set `MCC_TEST_ACCOUNT_TYPE=microsoft` before launching the harness. -- If the user explicitly requests Microsoft online login, use `BasicIO-NoColor` in a real TTY, relay the device code from the TUI, and avoid pressing empty Enter at any auth prompt. -- If the online-mode session sends unexpected chat or commands right after join, inspect inherited bot settings first. `ChatBot.ScriptScheduler` tasks and `ChatBot.DiscordRpc` are common sources of test noise in user-local configs. -- If `dotnet run` cannot see an existing Microsoft session, check whether `SessionCache.db` and `ProfileKeyCache.ini` need to be synced from `MinecraftClient/bin/Release/net10.0/` to the repo root. -- If Microsoft auth keeps prompting even with a valid session cache, verify `Account.Login` matches the cached username exactly. -- If MCC reports `Connection refused`, verify the launched target matches the server's actual `server-port`. -- If MCC reports `Connection refused` immediately after a server start, also check for stale shared state: old tmux sessions, a stale `stdin.pipe`, or a server that never actually reached `Done (`. -- If multiple versions are being tested, do not start them in parallel unless the harness isolates tmux sessions and input files. -- If a test assertion fails, inspect the real MCC output before changing the code or weakening the assertion. -- If an older server behaves oddly on Linux, check `use-native-transport=false` in `server.properties`. -- If a matrix row fails before producing `mcc.log` or a command transcript, treat it as a harness failure, fix the environment, and rerun that row before drawing product conclusions. -- If creative inventory commands report "You must be in Creative gamemode" after RCON switched the player, inspect game-mode update parsing before assuming creative inventory is broken. Modern servers can update local game mode through game event reason `3`. -- If an inventory row crashes with `Queue empty` or `Failed to process incoming packet`, inspect packet palette routing before changing inventory code. A single shifted packet ID can make a healthy inventory feature look broken. -- For chest-open failures, separate product and harness causes. The player may be standing inside the chest or suffocating on older servers. Stand beside the chest, put a floor under the player, and retry `useblock`. -- For shared local servers, a `Done` log line does not prove RCON is ready. Retry setup commands and verify the actual RCON port from `server.properties`. -- If `tools/run-dialog-test.sh` fails with "FileInput Watching: .../mcc_input.txt" pointing to the wrong directory, the `MCC_INPUT_FILE` env var was not set in the tmux command. FileInputBot ignores the config `File` setting entirely. -- If inline SNBT dialogs fail on the server side (`Failed to parse structure: No key ...`), check whether `ActionButton.CODEC` fields are flat (no `button` wrapper) and whether the dialog type fields match the 26.1 server (`label` not `text` in `CommonButtonData`). -- If a dialog integration test fails on "Server showed custom dialog", the dialog packet (id=0x8C in 26.1 play phase) may not have been sent. Verify the RCON command succeeded and the server printed "Displayed dialog to ...". diff --git a/.skills/mcc-integration-testing/evals/evals.json b/.skills/mcc-integration-testing/evals/evals.json deleted file mode 100644 index 251abc583f..0000000000 --- a/.skills/mcc-integration-testing/evals/evals.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "skill_name": "mcc-integration-testing", - "evals": [ - { - "id": 1, - "prompt": "Run a real 1.21.11 MCC regression test in creative mode covering connect, send messages, send commands, receive messages, movement, physics, mobs, effects, and inventory, in that order.", - "expected_output": "The workflow uses the ordered creative-mode E2E harness on a real server, reports pass or fail for each phase, and points to the saved logs.", - "files": [], - "expectations": [ - "The workflow uses a real 1.21.11 server.", - "The workflow uses the ordered creative E2E harness instead of improvising the whole scenario.", - "The result reports phase-by-phase outcomes in the requested order.", - "The result includes the log directory for the run." - ] - }, - { - "id": 2, - "prompt": "Validate that MCC still works after a runtime or protocol change by running a deep single-version 1.21.11 integration test with chat, creative inventory, entity tracking, sounds, particles, TNT, and kill/respawn coverage.", - "expected_output": "The workflow uses the full-spectrum test runner on a real server and returns a concise pass or fail summary backed by MCC and server log evidence.", - "files": [], - "expectations": [ - "The workflow builds MCC before the scenario unless a fresh build is explicitly reused.", - "The workflow uses the full-spectrum runner instead of only manual spot checks.", - "The result includes evidence from both MCC output and server logs.", - "The result points to the saved run directory." - ] - }, - { - "id": 3, - "prompt": "Validate a timing-sensitive MCC change on a real 1.21.11 server by collecting tick-rate and outbound packet-cadence evidence, then summarize the results clearly.", - "expected_output": "The response uses a real server, a temp config, and the provided sample scripts to capture tick-rate and packet evidence instead of relying on intuition.", - "files": [], - "expectations": [ - "The workflow uses the real 1.21.11 server.", - "The workflow uses the tick counter and packet capture scripts or clearly equivalent targeted instrumentation.", - "The workflow keeps the run isolated with a temp config.", - "The summary reports concrete counts or cadence evidence." - ] - } - ] -} diff --git a/.skills/mcc-integration-testing/references/command-matrix.md b/.skills/mcc-integration-testing/references/command-matrix.md deleted file mode 100644 index 782bc74590..0000000000 --- a/.skills/mcc-integration-testing/references/command-matrix.md +++ /dev/null @@ -1,91 +0,0 @@ -# Command Matrix - -This skill uses a fixed set of stable commands for local offline integration testing. - -## MCC-side commands via `mcc-cmd` - -- `health` -- `list` -- `inventory player list` -- `/gamemode creative` -- `inventory creativegive 36 Diamond 16` -- `inventory creativegive 37 IronSword 1` -- `inventory creativegive 38 GoldenApple 8` -- `inventory creativeclear 38` -- `entity` -- `/time query daytime` -- `look up` -- `look down` -- `look east` -- `/gamemode survival` -- `respawn` -- `/tp MCCBot 0 -60 0` -- `smoke_test_from_mcc_full_spectrum` -- `integration_test_chat_response` - -Notes: -- Lines starting with `/` are sent to the server as chat/commands. -- Non-slash lines are treated as MCC internal commands first, then fall back to chat. - -## Server-side commands via `mc-rcon` - -- `op MCCBot` -- `gamerule sendCommandFeedback true` -- `gamerule logAdminCommands true` -- `time set day` -- `weather clear` -- `say Hello from the server console` -- `msg MCCBot This is a private whisper` -- `effect give MCCBot minecraft:speed 30 1` -- `effect give MCCBot minecraft:regeneration 10 1` -- `kill MCCBot` - -## Representative entity coverage - -- `execute as MCCBot at @s run summon minecraft:cow ~2 ~ ~` -- `execute as MCCBot at @s run summon minecraft:zombie ~4 ~ ~` -- `execute as MCCBot at @s run summon minecraft:creeper ~6 ~ ~` -- `execute as MCCBot at @s run summon minecraft:skeleton ~8 ~ ~` -- `execute as MCCBot at @s run summon minecraft:villager ~-2 ~ ~` -- `execute as MCCBot at @s run summon minecraft:allay ~-4 ~ ~` -- `execute as MCCBot at @s run summon minecraft:armor_stand ~ ~ ~2` -- `execute as MCCBot at @s run summon minecraft:item_display ~-6 ~ ~ {item:{id:"minecraft:diamond",count:1}}` -- `execute as MCCBot at @s run summon minecraft:spider ~10 ~ ~` -- `execute as MCCBot at @s run summon minecraft:pig ~-8 ~ ~` - -## Block placement coverage - -- `execute as MCCBot at @s run fill ~1 ~ ~1 ~3 ~2 ~3 minecraft:stone` -- `execute as MCCBot at @s run setblock ~5 ~ ~5 minecraft:chest` -- `execute as MCCBot at @s run setblock ~5 ~1 ~5 minecraft:furnace` -- `execute as MCCBot at @s run setblock ~6 ~ ~5 minecraft:crafting_table` - -## Dimension change coverage - -- `execute in minecraft:the_nether run tp MCCBot 0 64 0` -- `execute in minecraft:overworld run tp MCCBot 0 -60 0` - -## Representative particle coverage - -- `execute as MCCBot at @s run particle minecraft:happy_villager ~ ~1 ~ 0.5 0.5 0.5 0 12 force` -- `execute as MCCBot at @s run particle minecraft:end_rod ~ ~1 ~ 0.5 0.5 0.5 0.01 20 force` -- `execute as MCCBot at @s run particle minecraft:explosion ~ ~1 ~ 0 0 0 0 1 force` -- `execute as MCCBot at @s run particle minecraft:totem_of_undying ~ ~1 ~ 0.5 0.5 0.5 0.1 20 force` -- `execute as MCCBot at @s run particle minecraft:flame ~ ~1 ~ 0.2 0.2 0.2 0.02 30 force` -- `execute as MCCBot at @s run particle minecraft:heart ~ ~2 ~ 0.3 0.3 0.3 0 5 force` - -## Representative sound coverage - -- `execute as MCCBot at @s run playsound minecraft:entity.lightning_bolt.thunder master MCCBot ~ ~ ~ 1 1 0` -- `execute as MCCBot at @s run playsound minecraft:block.note_block.bell master MCCBot ~ ~ ~ 1 1 0` -- `execute as MCCBot at @s run playsound minecraft:entity.experience_orb.pickup master MCCBot ~ ~ ~ 1 1 0` - -## Explosion coverage - -- `execute as MCCBot at @s run summon minecraft:tnt ~3 ~ ~` -- `execute as MCCBot at @s run summon minecraft:tnt ~6 ~ ~` - -## Kill and respawn cycle - -- `kill MCCBot` (via RCON, requires survival mode) -- `respawn` (via MCC command after death) diff --git a/.skills/mcc-integration-testing/references/online-mode.md b/.skills/mcc-integration-testing/references/online-mode.md deleted file mode 100644 index fdd0bedae5..0000000000 --- a/.skills/mcc-integration-testing/references/online-mode.md +++ /dev/null @@ -1,48 +0,0 @@ -# Online-Mode Notes - -Use this flow only when the user explicitly asks for Microsoft login or wants to validate against an online-mode server. - -## Launch mode - -- Prefer `BasicIO-NoColor` in a real TTY so the Microsoft device-code prompt is easy to read and copy. -- Do not use `MCC_FILE_INPUT=1` during the auth step. It is for scripted command injection, not interactive login. -- Avoid `nohup`. Use `tmux` for long-running sessions that still need a TTY. -- Start from a clean temp config when possible. If the temp config is copied from a user-local `MinecraftClient.ini`, inspect `ChatBot.ScriptScheduler` and `ChatBot.DiscordRpc` before the run. - -## Session cache behavior - -- `dotnet run --project MinecraftClient ...` uses the repo root for `SessionCache.db` and `ProfileKeyCache.ini`. -- The compiled binary under `MinecraftClient/bin//net10.0/` uses that output directory instead. -- If a session exists in one location and not the other, sync the cache files before assuming login is broken. - -## Account settings - -- `Account.Login` must be populated for MCC to look up a cached Microsoft session. -- The cached key is the username form MCC stored, typically the lowercase username, not necessarily the email address. -- MCC rewrites `MinecraftClient.ini` on clean exit, so generate a temp config per run and do not edit it while MCC is still running. - -## Auth prompt handling - -- Do not send a bare Enter to dismiss `Password(invisible):` or `Paste your code here:` prompts. That can trigger offline fallback. -- For interactive online-mode runs, wait for the device code prompt and relay the code to the user exactly as shown. -- After the user completes login, continue the test in the same TTY session or restart into file-driven mode if the workflow requires automation. - -## Join-time noise - -- Real user configs may contain enabled bots or task lists that were harmless in offline testing but are noisy in online-mode validation. -- The most common examples are: - - `ChatBot.ScriptScheduler` task lists that send `/hello`, `/login ...`, or other automatic commands on login or on an interval - - `ChatBot.DiscordRpc`, which is not harmful to server state but adds log noise and extra background activity -- If the goal is protocol or feature validation, suppress these before the run or treat their output as non-test noise. - -## Server settings - -- For realistic online-mode testing, keep `online-mode=true`. -- Keep `enforce-secure-profile=true` unless the test explicitly targets insecure-profile behavior. - -## Command reminders - -- With `InternalCmdChar = "slash"`: - - `/health`, `/pos`, `/inventory`, `/entity` are MCC internal commands. - - `/send /list` and `/send /give ...` are server commands. - - bare text is regular chat sent to the server. diff --git a/.skills/mcc-integration-testing/scripts/common.sh b/.skills/mcc-integration-testing/scripts/common.sh deleted file mode 100755 index ac5c0250bf..0000000000 --- a/.skills/mcc-integration-testing/scripts/common.sh +++ /dev/null @@ -1,110 +0,0 @@ -#!/usr/bin/env bash - -sed_in_place() { - if [[ "$(uname)" == "Darwin" ]]; then - sed -i '' "$@" - else - sed -i "$@" - fi -} - -ensure_java_in_path() { - if command -v java >/dev/null 2>&1 && java -version >/dev/null 2>&1; then - return 0 - fi - - local candidate - for candidate in \ - "${JAVA_BIN:-}" \ - "/opt/homebrew/opt/openjdk/bin/java" \ - "/usr/local/opt/openjdk/bin/java" \ - "/usr/lib/jvm/default-java/bin/java" - do - [[ -z "$candidate" ]] && continue - if [[ -x "$candidate" ]]; then - export PATH="$(dirname "$candidate"):$PATH" - export JAVA_BIN="$candidate" - if java -version >/dev/null 2>&1; then - return 0 - fi - fi - done - - echo "java was not found on PATH. Install Java or set JAVA_BIN." >&2 - return 1 -} - -server_session_name() { - printf 'mc-%s\n' "${1//./_}" -} - -server_running() { - local version="$1" - mc-list | grep -Fq "$(server_session_name "$version")" -} - -wait_for_server_ready() { - local version="$1" - local timeout="${2:-60}" - local elapsed=0 - - while (( elapsed < timeout )); do - if mc-log "$version" 250 2>/dev/null | grep -Fq "Done ("; then - return 0 - fi - sleep 1 - ((elapsed += 1)) - done - - echo "Timed out waiting for $version to become ready" >&2 - return 1 -} - -wait_for_server_stop() { - local version="$1" - local timeout="${2:-60}" - local elapsed=0 - - while (( elapsed < timeout )); do - if ! server_running "$version"; then - return 0 - fi - sleep 1 - ((elapsed += 1)) - done - - mc-kill "$version" --confirm >/dev/null 2>&1 || true - - if ! server_running "$version"; then - return 0 - fi - - echo "Timed out waiting for $version to stop" >&2 - return 1 -} - -disable_noisy_bots_in_ini() { - local ini_file="$1" - local section - - for section in \ - ScriptScheduler \ - DiscordRpc \ - AntiAFK \ - AutoDig \ - AutoAttack \ - PlayerListLogger \ - ReplayCapture - do - sed_in_place "/^\\[ChatBot\\.${section}\\]/,/^\\[/ { s/^Enabled = true/Enabled = false/; }" "$ini_file" - done -} - -remove_stale_stdin_pipe() { - local version="$1" - local pipe_path="$MCC_SERVERS/$version/stdin.pipe" - - if [[ -e "$pipe_path" ]] && ! server_running "$version"; then - rm -f "$pipe_path" - fi -} diff --git a/.skills/mcc-integration-testing/scripts/ensure_offline_server.sh b/.skills/mcc-integration-testing/scripts/ensure_offline_server.sh deleted file mode 100755 index 8ede375b4f..0000000000 --- a/.skills/mcc-integration-testing/scripts/ensure_offline_server.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)" -# shellcheck source=tools/mcc-env.sh -source "$REPO_ROOT/tools/mcc-env.sh" -# shellcheck source=.skills/mcc-integration-testing/scripts/common.sh -source "$SCRIPT_DIR/common.sh" - -VERSION="${1:-1.21.11-Vanilla}" -SERVER_DIR="${MCC_SERVERS:?}/$VERSION" -PROPS_FILE="$SERVER_DIR/server.properties" -SESSION_NAME="mc-${VERSION//./_}" - -if [[ ! -d "$SERVER_DIR" ]]; then - echo "Server directory not found: $SERVER_DIR" >&2 - exit 1 -fi - -if [[ ! -f "$SERVER_DIR/eula.txt" ]] || ! grep -Eq '^eula=true$' "$SERVER_DIR/eula.txt"; then - echo "Missing accepted EULA in $SERVER_DIR/eula.txt" >&2 - exit 1 -fi - -server_running() { - mc-list | grep -Fq "$SESSION_NAME" -} - -upsert_property() { - local key="$1" - local value="$2" - - if grep -Eq "^${key}=" "$PROPS_FILE"; then - sed_in_place "s#^${key}=.*#${key}=${value}#" "$PROPS_FILE" - else - printf '%s=%s\n' "$key" "$value" >> "$PROPS_FILE" - fi -} - -if [[ ! -f "$PROPS_FILE" ]]; then - mc-start "$VERSION" - wait_for_server_ready "$VERSION" - mc-stop "$VERSION" --confirm - wait_for_server_stop "$VERSION" -fi - -if server_running; then - mc-stop "$VERSION" --confirm - wait_for_server_stop "$VERSION" -fi - -upsert_property "online-mode" "false" -upsert_property "enforce-secure-profile" "false" -upsert_property "enable-rcon" "true" -upsert_property "rcon.port" "25575" -upsert_property "rcon.password" "test123" - -echo "Configured $VERSION for persistent offline testing" diff --git a/.skills/mcc-integration-testing/scripts/get_server_port.sh b/.skills/mcc-integration-testing/scripts/get_server_port.sh deleted file mode 100644 index 95bceb1aed..0000000000 --- a/.skills/mcc-integration-testing/scripts/get_server_port.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -if [[ $# -ne 1 ]]; then - echo "Usage: $0 " >&2 - exit 1 -fi - -REPO_ROOT="$(cd "$(dirname "$0")/../../.." && pwd)" -SERVER_DIR_NAME="$1" -SERVERS_ROOT="${MCC_SERVERS:-$REPO_ROOT/MinecraftOfficial/downloads}" -SERVER_DIR="$SERVERS_ROOT/$SERVER_DIR_NAME" -PROPS_FILE="$SERVER_DIR/server.properties" -LATEST_LOG="$SERVER_DIR/logs/latest.log" - -if [[ -f "$PROPS_FILE" ]]; then - PORT_LINE="$(grep -E '^server-port=' "$PROPS_FILE" | tail -n 1 || true)" - if [[ -n "$PORT_LINE" ]]; then - PORT="${PORT_LINE#server-port=}" - if [[ "$PORT" =~ ^[0-9]+$ ]]; then - printf '%s\n' "$PORT" - exit 0 - fi - fi -fi - -if [[ -f "$LATEST_LOG" ]]; then - PORT="$(sed -n 's/.*Starting Minecraft server on .*:\([0-9][0-9]*\).*/\1/p' "$LATEST_LOG" | tail -n 1)" - if [[ -n "$PORT" ]]; then - printf '%s\n' "$PORT" - exit 0 - fi -fi - -printf '25565\n' diff --git a/.skills/mcc-integration-testing/scripts/preflight_test_env.sh b/.skills/mcc-integration-testing/scripts/preflight_test_env.sh deleted file mode 100755 index 223760262d..0000000000 --- a/.skills/mcc-integration-testing/scripts/preflight_test_env.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)" -# shellcheck source=tools/mcc-env.sh -source "$REPO_ROOT/tools/mcc-env.sh" -# shellcheck source=.skills/mcc-integration-testing/scripts/common.sh -source "$SCRIPT_DIR/common.sh" - -usage() { - cat <<'EOF' -Usage: preflight_test_env.sh [server-dir...] - -Checks the local MCC test environment and resolves common Java path issues. -EOF -} - -if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then - usage - exit 0 -fi - -ensure_java_in_path -command -v tmux >/dev/null 2>&1 || { echo "tmux was not found on PATH." >&2; exit 1; } -command -v dotnet >/dev/null 2>&1 || { echo "dotnet was not found on PATH." >&2; exit 1; } -command -v python3 >/dev/null 2>&1 || { echo "python3 was not found on PATH." >&2; exit 1; } - -if [[ ! -d "$MCC_SERVERS" ]]; then - echo "Server root not found: $MCC_SERVERS" >&2 - exit 1 -fi - -for server_dir in "$@"; do - [[ -z "$server_dir" ]] && continue - if [[ ! -d "$MCC_SERVERS/$server_dir" ]]; then - echo "Server directory not found: $MCC_SERVERS/$server_dir" >&2 - exit 1 - fi - - remove_stale_stdin_pipe "$server_dir" -done - -printf 'MCC_REPO=%s\n' "$MCC_REPO" -printf 'MCC_SERVERS=%s\n' "$MCC_SERVERS" -printf 'JAVA=%s\n' "$(command -v java)" -printf 'TMUX=%s\n' "$(command -v tmux)" -printf 'DOTNET=%s\n' "$(command -v dotnet)" diff --git a/.skills/mcc-integration-testing/scripts/prepare_offline_mcc_config.sh b/.skills/mcc-integration-testing/scripts/prepare_offline_mcc_config.sh deleted file mode 100644 index 1e30f6739c..0000000000 --- a/.skills/mcc-integration-testing/scripts/prepare_offline_mcc_config.sh +++ /dev/null @@ -1,106 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)" -# shellcheck source=.skills/mcc-integration-testing/scripts/common.sh -source "$SCRIPT_DIR/common.sh" - -usage() { - cat <<'EOF' >&2 -Usage: - prepare_offline_mcc_config.sh [login] - prepare_offline_mcc_config.sh [login] -EOF -} - -if [[ $# -lt 2 || $# -gt 4 ]]; then - usage - exit 1 -fi - -TEMPLATE_INI="" -OUTPUT_INI="" -MC_VERSION="" -LOGIN_NAME="" - -if [[ $# -ge 3 && -f "$1" ]]; then - TEMPLATE_INI="$1" - OUTPUT_INI="$2" - MC_VERSION="$3" - LOGIN_NAME="${4:-MCCBot}" -else - OUTPUT_INI="$1" - MC_VERSION="$2" - LOGIN_NAME="${3:-MCCBot}" -fi - -ACCOUNT_TYPE="${MCC_TEST_ACCOUNT_TYPE:-mojang}" -PASSWORD_VALUE="${MCC_TEST_PASSWORD-}" - -if [[ "$ACCOUNT_TYPE" != "mojang" && "$ACCOUNT_TYPE" != "microsoft" && "$ACCOUNT_TYPE" != "yggdrasil" ]]; then - echo "Unsupported MCC_TEST_ACCOUNT_TYPE: $ACCOUNT_TYPE" >&2 - exit 1 -fi - -if [[ -z "${MCC_TEST_PASSWORD+x}" ]]; then - if [[ "$ACCOUNT_TYPE" == "mojang" ]]; then - PASSWORD_VALUE="-" - else - PASSWORD_VALUE="" - fi -fi - -generate_template_ini() { - local template_root - template_root="$(mktemp -d "${TMPDIR:-/tmp}/mcc-config-template.XXXXXX")" - - if [[ ! -f "$REPO_ROOT/MinecraftClient/bin/Release/net10.0/MinecraftClient.dll" ]]; then - dotnet build "$REPO_ROOT/MinecraftClient.sln" -c Release -v quiet --nologo >/dev/null - fi - - ( - cd "$template_root" - dotnet run --project "$REPO_ROOT/MinecraftClient" -c Release --no-build -- --help >/dev/null 2>&1 - ) - - if [[ ! -f "$template_root/MinecraftClient.ini" ]]; then - echo "Failed to generate a temporary MCC config template." >&2 - exit 1 - fi - - TEMPLATE_INI="$template_root/MinecraftClient.ini" -} - -if [[ -z "$TEMPLATE_INI" ]]; then - generate_template_ini -fi - -mkdir -p "$(dirname "$OUTPUT_INI")" -cp "$TEMPLATE_INI" "$OUTPUT_INI" - -sed_in_place \ - -e "s#^Account = .*#Account = { Login = \"$LOGIN_NAME\", Password = \"$PASSWORD_VALUE\" }#" \ - -e "s#^AccountType = .*#AccountType = \"$ACCOUNT_TYPE\"#" \ - -e "s#^MinecraftVersion = \"[^\"]*\"\\(.*\\)\$#MinecraftVersion = \"$MC_VERSION\"\\1#" \ - -e 's#^TerrainAndMovements = false#TerrainAndMovements = true#' \ - -e 's#^InventoryHandling = false#InventoryHandling = true#' \ - -e 's#^EntityHandling = false#EntityHandling = true#' \ - -e 's#^AutoRespawn = false#AutoRespawn = true#' \ - "$OUTPUT_INI" - -disable_noisy_bots_in_ini "$OUTPUT_INI" - -grep -Fq "AccountType = \"$ACCOUNT_TYPE\"" "$OUTPUT_INI" || { - echo "Failed to enforce account type $ACCOUNT_TYPE in $OUTPUT_INI" >&2 - exit 1 -} - -if [[ "$ACCOUNT_TYPE" == "mojang" ]]; then - grep -Eq '^Account = \{ Login = ".*", Password = "-" \}' "$OUTPUT_INI" || { - echo "Failed to enforce offline account in $OUTPUT_INI" >&2 - exit 1 - } -fi - -printf '%s\n' "$OUTPUT_INI" diff --git a/.skills/mcc-integration-testing/scripts/reset_shared_test_state.sh b/.skills/mcc-integration-testing/scripts/reset_shared_test_state.sh deleted file mode 100755 index eab7c6941c..0000000000 --- a/.skills/mcc-integration-testing/scripts/reset_shared_test_state.sh +++ /dev/null @@ -1,44 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)" -# shellcheck source=tools/mcc-env.sh -source "$REPO_ROOT/tools/mcc-env.sh" -# shellcheck source=.skills/mcc-integration-testing/scripts/common.sh -source "$SCRIPT_DIR/common.sh" - -usage() { - cat <<'EOF' -Usage: reset_shared_test_state.sh [--all | ...] - -Kills shared server tmux test sessions and removes stale server stdin pipes. -EOF -} - -if [[ "${1:-}" == "-h" || "${1:-}" == "--help" ]]; then - usage - exit 0 -fi - -kill_named_session() { - local session_name="$1" - tmux kill-session -t "$session_name" 2>/dev/null || true -} - -if [[ $# -eq 0 || "${1:-}" == "--all" ]]; then - while IFS= read -r session_name; do - [[ -z "$session_name" ]] && continue - kill_named_session "$session_name" - done < <(tmux list-sessions 2>/dev/null | awk -F: '/^mc-/{print $1}' || true) - - while IFS= read -r pipe_path; do - [[ -z "$pipe_path" ]] && continue - rm -f "$pipe_path" - done < <(find "$MCC_SERVERS" -maxdepth 2 -name 'stdin.pipe' 2>/dev/null || true) -else - for version in "$@"; do - kill_named_session "$(server_session_name "$version")" - remove_stale_stdin_pipe "$version" - done -fi diff --git a/.skills/mcc-integration-testing/scripts/run_achievements_matrix.sh b/.skills/mcc-integration-testing/scripts/run_achievements_matrix.sh deleted file mode 100755 index 65ff7d3fd9..0000000000 --- a/.skills/mcc-integration-testing/scripts/run_achievements_matrix.sh +++ /dev/null @@ -1,168 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)" -# shellcheck source=tools/mcc-env.sh -source "$REPO_ROOT/tools/mcc-env.sh" - -RUN_ROOT="${TMPDIR:-/tmp}/mcc-achievements/matrix" -RUN_ID="$(date +%Y%m%d-%H%M%S)" -MATRIX_DIR="$RUN_ROOT/$RUN_ID" -RESULTS_TSV="$MATRIX_DIR/results.tsv" -BUILD_LOG="$MATRIX_DIR/build.log" -REPORT_MD="$MATRIX_DIR/report.md" -PRECHECK_TXT="$MATRIX_DIR/preflight.txt" - -mkdir -p "$MATRIX_DIR" - -write_row() { - local fields=("$@") - - while (( ${#fields[@]} < 14 )); do - fields+=("") - done - - printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \ - "${fields[0]}" "${fields[1]}" "${fields[2]}" "${fields[3]}" "${fields[4]}" "${fields[5]}" "${fields[6]}" \ - "${fields[7]}" "${fields[8]}" "${fields[9]}" "${fields[10]}" "${fields[11]}" "${fields[12]}" \ - "${fields[13]}" >> "$RESULTS_TSV" -} - -resolve_server_dir() { - local version="$1" - local candidate - - for candidate in "$version" "$version-Vanilla"; do - if [[ -d "$MCC_SERVERS/$candidate" ]]; then - printf '%s\n' "$candidate" - return 0 - fi - done - - return 1 -} - -run_version() { - local version="$1" - local profile="$2" - local family="$3" - local server_dir="$4" - local summary_env - - if bash "$SCRIPT_DIR/run_achievements_test.sh" --no-build "$server_dir" "$version" "$profile"; then - : - fi - - summary_env="${TMPDIR:-/tmp}/mcc-achievements/$server_dir/latest/summary.env" - if [[ ! -f "$summary_env" ]]; then - write_row "$version" "$server_dir" "unknown" "$family" "❌" "❌" "❌" "❌" "❌ Fail" \ - "Summary file was not produced." "" "" "" - return - fi - - # shellcheck disable=SC1090 - source "$summary_env" - - if [[ -n "${MCC_LOG:-}" && ! -f "$MCC_LOG" ]]; then - NOTE="Harness failure: MCC log was not produced." - VERDICT="❌ Fail" - fi - - if [[ -n "${COMMAND_LOG:-}" && ! -f "$COMMAND_LOG" ]]; then - NOTE="Harness failure: command transcript was not produced." - VERDICT="❌ Fail" - fi - - write_row "$VERSION" "$SERVER_DIR" "$PORT" "$FAMILY" "$INITIAL_STATUS" "$GRANT_STATUS" "$REVOKE_STATUS" \ - "$API_STATUS" "$VERDICT" "$NOTE" "$RUN_DIR" "$MCC_LOG" "$COPIED_SERVER_LOG" "$COMMAND_LOG" -} - -{ - printf 'MCC_SERVERS=%s\n' "$MCC_SERVERS" - printf 'RUN_DIR=%s\n' "$MATRIX_DIR" - printf 'DATE=%s\n' "$(date -u '+%Y-%m-%d %H:%M:%S UTC')" -} > "$PRECHECK_TXT" - -printf 'Version\tServerDir\tPort\tFamily\tInitial\tGrant\tRevoke\tAPI\tVerdict\tNote\tRunDir\tMccLog\tServerLog\tCommandLog\n' > "$RESULTS_TSV" - -JAVA_OK="yes" -TMUX_OK="yes" -DOTNET_OK="yes" -BUILD_OK="yes" - -if ! command -v dotnet >/dev/null 2>&1; then - DOTNET_OK="no" -fi - -if ! command -v java >/dev/null 2>&1 || ! java -version >/dev/null 2>&1; then - JAVA_OK="no" -fi - -if ! command -v tmux >/dev/null 2>&1; then - TMUX_OK="no" -fi - -if [[ "$DOTNET_OK" == "yes" ]]; then - bash "$SCRIPT_DIR/preflight_test_env.sh" >/dev/null 2>&1 || true - if ! dotnet build "$REPO_ROOT/MinecraftClient.sln" -c Release > "$BUILD_LOG" 2>&1; then - BUILD_OK="no" - fi -else - : > "$BUILD_LOG" -fi - -{ - printf 'MCC_SERVERS=%s\n' "$MCC_SERVERS" - printf 'RUN_DIR=%s\n' "$MATRIX_DIR" - printf 'DATE=%s\n' "$(date -u '+%Y-%m-%d %H:%M:%S UTC')" - printf 'dotnet=%s\n' "$DOTNET_OK" - printf 'java=%s\n' "$JAVA_OK" - printf 'tmux=%s\n' "$TMUX_OK" - printf 'build=%s\n' "$BUILD_OK" -} > "$PRECHECK_TXT" - -while IFS='|' read -r version profile family; do - [[ -z "$version" ]] && continue - - if [[ "$DOTNET_OK" != "yes" ]]; then - write_row "$version" "" "" "$family" "❌" "❌" "❌" "❌" "❌ Fail" \ - "dotnet is not available on PATH." - continue - fi - - if [[ "$BUILD_OK" != "yes" ]]; then - write_row "$version" "" "" "$family" "❌" "❌" "❌" "❌" "❌ Fail" \ - "dotnet build failed. See $BUILD_LOG." - continue - fi - - if [[ "$JAVA_OK" != "yes" || "$TMUX_OK" != "yes" ]]; then - write_row "$version" "" "" "$family" "❌" "❌" "❌" "❌" "❌ Fail" \ - "java or tmux is not available, so live server execution was blocked." - continue - fi - - if ! server_dir="$(resolve_server_dir "$version")"; then - write_row "$version" "" "" "$family" "❌" "❌" "❌" "❌" "⚠️ Partial" \ - "Server directory for $version was not found under $MCC_SERVERS." - continue - fi - - run_version "$version" "$profile" "$family" "$server_dir" -done <<'EOF' -1.8|legacy|Legacy 🧱 -1.11.2|legacy|Legacy 🧱 -1.12.2|modern|First advancements 🌱 -1.19.4|modern|Stable modern ✅ -1.20|modern|Telemetry edge 1 ⚠️ -1.20.2|modern|Telemetry edge 2 ⚠️ -1.20.4|modern|End of 1.20.x ⚠️ -1.20.6|modern|Post-1.20.6 🔧 -1.21.2|modern|1.21.2 family 🔧 -1.21.11|modern|showAdvancements 🆕 -26.1|modern|Latest supported 🚀 -EOF - -bash "$SCRIPT_DIR/summarize_achievements_matrix.sh" "$MATRIX_DIR" > "$REPORT_MD" -printf '%s\n' "$MATRIX_DIR" diff --git a/.skills/mcc-integration-testing/scripts/run_achievements_test.sh b/.skills/mcc-integration-testing/scripts/run_achievements_test.sh deleted file mode 100755 index 1484acd6ed..0000000000 --- a/.skills/mcc-integration-testing/scripts/run_achievements_test.sh +++ /dev/null @@ -1,399 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)" -# shellcheck source=tools/mcc-env.sh -source "$REPO_ROOT/tools/mcc-env.sh" -# shellcheck source=.skills/mcc-integration-testing/scripts/common.sh -source "$SCRIPT_DIR/common.sh" - -usage() { - cat <<'EOF' -Usage: run_achievements_test.sh [--no-build] - -Examples: - .skills/mcc-integration-testing/scripts/run_achievements_test.sh --no-build 1.8 1.8 legacy - .skills/mcc-integration-testing/scripts/run_achievements_test.sh --no-build 1.21.11-Vanilla 1.21.11 modern -EOF -} - -DO_BUILD=true - -while [[ $# -gt 0 ]]; do - case "$1" in - --no-build) DO_BUILD=false; shift ;; - --build) DO_BUILD=true; shift ;; - -h|--help) usage; exit 0 ;; - *) break ;; - esac -done - -if [[ $# -ne 3 ]]; then - usage >&2 - exit 1 -fi - -SERVER_DIR="$1" -MC_VERSION="$2" -PROFILE="$3" -SESSION_NAME="achievements-${SERVER_DIR//[^a-zA-Z0-9]/_}-${PROFILE}" -TEST_USERNAME="$(_mcc_resolve_username "$SESSION_NAME")" - -if [[ "$PROFILE" != "legacy" && "$PROFILE" != "modern" ]]; then - echo "Unsupported profile: $PROFILE" >&2 - exit 1 -fi - -RUN_ROOT="${TMPDIR:-/tmp}/mcc-achievements" -RUN_ID="$(date +%Y%m%d-%H%M%S)" -RUN_DIR="$RUN_ROOT/$SERVER_DIR/$RUN_ID" -LATEST_LINK="$RUN_ROOT/$SERVER_DIR/latest" -MCC_LOG="$RUN_DIR/mcc.log" -BUILD_LOG="$RUN_DIR/build.log" -SERVER_TMUX_LOG="$RUN_DIR/server-tmux.log" -SERVER_FILE_LOG="$RUN_DIR/server-latest.log" -COMMAND_LOG="$RUN_DIR/commands.log" -SUMMARY_ENV="$RUN_DIR/summary.env" -PROBE_SCRIPT="$RUN_DIR/achievement_probe.cs" -CFG="$RUN_DIR/MinecraftClient.$MC_VERSION.ini" -INPUT_FILE="$(_mcc_session_input_file "$SESSION_NAME")" -SERVER_LOG_FILE="$MCC_SERVERS/$SERVER_DIR/logs/latest.log" -TARGET_ID="minecraft:story/root" -TARGET_COMMAND_GRANT="advancement grant $TEST_USERNAME only minecraft:story/root" -TARGET_COMMAND_REVOKE="advancement revoke $TEST_USERNAME only minecraft:story/root" -TARGET_TYPE="Modern 🌱" -PORT="unknown" -MCC_PID="" - -INITIAL_STATUS="❌" -GRANT_STATUS="❌" -REVOKE_STATUS="❌" -API_STATUS="❌" -VERDICT="❌ Fail" -NOTE="Run did not complete." -EXECUTED="yes" - -if [[ "$PROFILE" == "legacy" ]]; then - TARGET_ID="achievement.openInventory" - TARGET_COMMAND_GRANT="achievement give achievement.openInventory $TEST_USERNAME" - TARGET_COMMAND_REVOKE="achievement take achievement.openInventory $TEST_USERNAME" - TARGET_TYPE="Legacy 🧱" -fi - -mkdir -p "$RUN_DIR" - -write_summary() { - { - printf 'VERSION=%q\n' "$MC_VERSION" - printf 'SERVER_DIR=%q\n' "$SERVER_DIR" - printf 'PROFILE=%q\n' "$PROFILE" - printf 'FAMILY=%q\n' "$TARGET_TYPE" - printf 'PORT=%q\n' "$PORT" - printf 'RUN_DIR=%q\n' "$RUN_DIR" - printf 'MCC_LOG=%q\n' "$MCC_LOG" - printf 'SERVER_LOG=%q\n' "$RUN_DIR/server-latest.log" - printf 'SERVER_FILE_LOG=%q\n' "$SERVER_LOG_FILE" - printf 'SERVER_TMUX_LOG=%q\n' "$SERVER_TMUX_LOG" - printf 'COPIED_SERVER_LOG=%q\n' "$RUN_DIR/server-latest.log" - printf 'COMMAND_LOG=%q\n' "$COMMAND_LOG" - printf 'SUMMARY_ENV=%q\n' "$SUMMARY_ENV" - printf 'TARGET_ID=%q\n' "$TARGET_ID" - printf 'INITIAL_STATUS=%q\n' "$INITIAL_STATUS" - printf 'GRANT_STATUS=%q\n' "$GRANT_STATUS" - printf 'REVOKE_STATUS=%q\n' "$REVOKE_STATUS" - printf 'API_STATUS=%q\n' "$API_STATUS" - printf 'VERDICT=%q\n' "$VERDICT" - printf 'NOTE=%q\n' "$NOTE" - printf 'EXECUTED=%q\n' "$EXECUTED" - } > "$SUMMARY_ENV" -} - -capture_server_logs() { - mc-log "$SERVER_DIR" 400 > "$SERVER_TMUX_LOG" 2>/dev/null || true - if [[ -f "$SERVER_LOG_FILE" ]]; then - cp "$SERVER_LOG_FILE" "$RUN_DIR/server-latest.log" 2>/dev/null || true - fi -} - -cleanup() { - capture_server_logs - - if [[ -n "${MCC_PID:-}" ]] && kill -0 "$MCC_PID" 2>/dev/null; then - echo "quit" >> "$INPUT_FILE" 2>/dev/null || true - sleep 2 - kill "$MCC_PID" 2>/dev/null || true - wait "$MCC_PID" 2>/dev/null || true - fi - - mc-stop "$SERVER_DIR" --confirm >/dev/null 2>&1 || true - wait_for_server_stop "$SERVER_DIR" 20 >/dev/null 2>&1 || true - ln -sfn "$RUN_DIR" "$LATEST_LINK" - write_summary -} -trap cleanup EXIT - -log_step() { - printf '[%s] %s\n' "$(date '+%H:%M:%S')" "$1" | tee -a "$COMMAND_LOG" -} - -fail() { - NOTE="$1" - VERDICT="❌ Fail" - exit 1 -} - -wait_for_file_pattern() { - local file="$1" - local pattern="$2" - local description="$3" - local timeout="${4:-60}" - local elapsed=0 - - while (( elapsed < timeout )); do - if [[ -f "$file" ]] && grep -Fq "$pattern" "$file"; then - return 0 - fi - sleep 1 - ((elapsed += 1)) - done - - echo "Timed out waiting for: $description" >&2 - return 1 -} - -write_probe_script() { - cat > "$PROBE_SCRIPT" < updated, IReadOnlyList removedIds, bool reset) - { - LogToConsole($"[ACH_TEST] event reset={reset} updated={updated.Count} removed={removedIds.Count}"); - DumpState("event"); - } - - private void DumpState(string origin) - { - Achievement[] all = GetAchievements(); - Achievement[] unlocked = GetUnlockedAchievements(); - Achievement[] locked = GetLockedAchievements(); - Achievement? target = null; - - foreach (Achievement entry in all) - { - if (entry.Id == TargetId) - { - target = entry; - break; - } - } - - string titleState = "missing"; - string completionState = "missing"; - - if (target is not null) - { - titleState = target.Title is null ? "null" : "present"; - completionState = target.IsCompleted ? "done" : "todo"; - } - - LogToConsole($"[ACH_TEST] snapshot origin={origin} all={all.Length} unlocked={unlocked.Length} locked={locked.Length}"); - LogToConsole($"[ACH_TEST] target_state origin={origin} id={TargetId} title={titleState} completed={completionState}"); - } -} -EOF -} - -run_server_command() { - local cmd="$1" - local attempt - - log_step "SERVER> $cmd" - for attempt in 1 2 3 4 5; do - if mc-rcon "$cmd" >/dev/null 2>&1; then - sleep 1 - return 0 - fi - sleep 1 - done - - fail "Server command failed: $cmd" -} - -run_mcc_command() { - local name="$1" - local cmd="$2" - local delay="${3:-2}" - local start_line=0 - local end_line=0 - - if [[ -f "$MCC_LOG" ]]; then - start_line="$(wc -l < "$MCC_LOG")" - fi - - log_step "MCC> $cmd" - echo "$cmd" >> "$INPUT_FILE" - sleep "$delay" - - if [[ -f "$MCC_LOG" ]]; then - end_line="$(wc -l < "$MCC_LOG")" - fi - - if (( end_line > start_line )); then - sed -n "$((start_line + 1)),$((end_line))p" "$MCC_LOG" > "$RUN_DIR/$name.mcc.log" - else - : > "$RUN_DIR/$name.mcc.log" - fi -} - -assert_pattern() { - local file="$1" - local pattern="$2" - local description="$3" - - grep -Fq "$pattern" "$file" || fail "$description" -} - -if $DO_BUILD; then - log_step "BUILD> dotnet build MinecraftClient.sln -c Release" - mcc-build > "$BUILD_LOG" 2>&1 || fail "dotnet build failed." -else - : > "$BUILD_LOG" -fi - -bash "$SCRIPT_DIR/preflight_test_env.sh" "$SERVER_DIR" >/dev/null || fail "Test environment preflight failed." -bash "$SCRIPT_DIR/reset_shared_test_state.sh" "$SERVER_DIR" >/dev/null || fail "Failed to reset shared test state." - -if [[ ! -d "$MCC_SERVERS/$SERVER_DIR" ]]; then - fail "Server directory not found: $MCC_SERVERS/$SERVER_DIR" -fi - -bash "$SCRIPT_DIR/prepare_offline_mcc_config.sh" "$CFG" "$MC_VERSION" "$TEST_USERNAME" >/dev/null || fail "Failed to prepare temporary MCC config." -PORT="$(bash "$SCRIPT_DIR/get_server_port.sh" "$SERVER_DIR")" - -"$SCRIPT_DIR/ensure_offline_server.sh" "$SERVER_DIR" -write_probe_script - -if [[ "$PROFILE" == "legacy" && -f "$MCC_SERVERS/$SERVER_DIR/server.properties" ]]; then - sed_in_place 's/^use-native-transport=.*/use-native-transport=false/' "$MCC_SERVERS/$SERVER_DIR/server.properties" -fi - -mkdir -p "$(dirname "$INPUT_FILE")" -: > "$INPUT_FILE" -rm -f "$MCC_LOG" - -log_step "Starting server $SERVER_DIR on port $PORT" -mc-start "$SERVER_DIR" >/dev/null -wait_for_server_ready "$SERVER_DIR" || fail "Server did not become ready." - -log_step "Starting MCC for $MC_VERSION" -( - cd "$REPO_ROOT" - MCC_FILE_INPUT=1 MCC_INPUT_FILE="$INPUT_FILE" dotnet run --project MinecraftClient -c Release --no-build -- \ - "$CFG" \ - "$TEST_USERNAME" \ - - \ - "localhost:$PORT" \ - "--accounttype=mojang" \ - "--minecraftversion=$MC_VERSION" \ - "--terrainandmovements=true" \ - "--inventoryhandling=true" \ - "--entityhandling=true" \ - "--autorespawn=true" \ - "--debugmessages=true" \ - > "$MCC_LOG" 2>&1 -) & -MCC_PID=$! - -wait_for_file_pattern "$MCC_LOG" "Server was successfully joined." "MCC join success" 90 || fail "MCC failed to join." -wait_for_file_pattern "$SERVER_LOG_FILE" "$TEST_USERNAME joined the game" "server join entry" 30 || fail "Server never logged the join." - -run_server_command "op $TEST_USERNAME" -run_server_command "gamerule sendCommandFeedback true" -if [[ "$PROFILE" == "modern" ]]; then - run_server_command "gamerule logAdminCommands true" -fi -run_server_command "time set day" -run_server_command "weather clear" - -run_mcc_command "load_probe" "script $PROBE_SCRIPT" 3 -wait_for_file_pattern "$MCC_LOG" "[ACH_TEST] probe initialized" "probe startup" 30 || fail "Probe script did not initialize." - -run_mcc_command "baseline_debug" "debug state" 2 -run_mcc_command "baseline_all" "achievement" 2 -run_mcc_command "baseline_locked" "achievement locked" 2 -run_mcc_command "baseline_unlocked" "achievement unlocked" 2 - -run_server_command "$TARGET_COMMAND_GRANT" -sleep 3 -run_mcc_command "after_grant_all" "achievement" 2 -run_mcc_command "after_grant_unlocked" "achievement unlocked" 2 - -run_server_command "$TARGET_COMMAND_REVOKE" -sleep 3 -run_mcc_command "after_revoke_all" "achievement" 2 -run_mcc_command "after_revoke_locked" "achievement locked" 2 - -assert_pattern "$MCC_LOG" "Achievements/Advancements:" "Achievement command header never appeared." - -if ! grep -Fq "No achievements/advancements received yet." "$RUN_DIR/baseline_all.mcc.log"; then - INITIAL_STATUS="✅" -fi - -if grep -Fq "$TARGET_ID" "$RUN_DIR/after_grant_unlocked.mcc.log" && grep -Fq "[DONE]" "$RUN_DIR/after_grant_unlocked.mcc.log"; then - GRANT_STATUS="✅" -fi - -if [[ "$PROFILE" == "legacy" ]]; then - if grep -Fq "$TARGET_ID" "$RUN_DIR/after_revoke_locked.mcc.log" && grep -Fq "[TODO]" "$RUN_DIR/after_revoke_locked.mcc.log"; then - REVOKE_STATUS="✅" - fi -else - if grep -Fq "$TARGET_ID" "$RUN_DIR/after_revoke_locked.mcc.log" && grep -Fq "[TODO]" "$RUN_DIR/after_revoke_locked.mcc.log"; then - REVOKE_STATUS="✅" - elif [[ "$GRANT_STATUS" == "✅" ]] && ! grep -Fq "$TARGET_ID" "$RUN_DIR/after_revoke_all.mcc.log"; then - REVOKE_STATUS="✅" - fi -fi - -if grep -Fq "[ACH_TEST] event" "$MCC_LOG" && grep -Fq "target_state origin=event id=$TARGET_ID title=" "$MCC_LOG"; then - API_STATUS="✅" -fi - -case "$INITIAL_STATUS|$GRANT_STATUS|$REVOKE_STATUS|$API_STATUS" in - "✅|✅|✅|✅") - VERDICT="✅ Pass" - NOTE="All planned achievement checks passed." - ;; - *"✅"*) - VERDICT="⚠️ Partial" - NOTE="At least one achievement phase passed, but the matrix did not fully clear." - ;; - *) - VERDICT="❌ Fail" - NOTE="Achievement checks did not produce the expected evidence." - ;; -esac - -run_mcc_command "quit" "quit" 2 -NOTE="$NOTE Artifacts saved in $RUN_DIR." diff --git a/.skills/mcc-integration-testing/scripts/run_full_spectrum_test.sh b/.skills/mcc-integration-testing/scripts/run_full_spectrum_test.sh deleted file mode 100755 index 181862a8cd..0000000000 --- a/.skills/mcc-integration-testing/scripts/run_full_spectrum_test.sh +++ /dev/null @@ -1,336 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)" -REPO_ROOT="$(cd "$SCRIPT_DIR/../../.." && pwd)" -# shellcheck source=tools/mcc-env.sh -source "$REPO_ROOT/tools/mcc-env.sh" -# shellcheck source=.skills/mcc-integration-testing/scripts/common.sh -source "$SCRIPT_DIR/common.sh" - -VERSION="${1:-1.21.11-Vanilla}" -MC_VERSION="${VERSION%-Vanilla}" -if [[ "$MC_VERSION" == "$VERSION" ]]; then - MC_VERSION="$VERSION" -fi -RUN_ROOT="${TMPDIR:-/tmp}/mcc-integration-testing" -RUN_ID="$(date +%Y%m%d-%H%M%S)" -RUN_DIR="$RUN_ROOT/$RUN_ID" -SERVER_LOG_FILE="$MCC_SERVERS/$VERSION/logs/latest.log" -SESSION_NAME="full-spectrum-${MC_VERSION//[^a-zA-Z0-9]/_}" -TEST_USERNAME="$(_mcc_resolve_username "$SESSION_NAME")" -MCC_LOG="$(_mcc_session_log_file "$SESSION_NAME")" -PID_FILE="$(_mcc_session_pid_file "$SESSION_NAME")" -MCC_TMUX_SESSION="$(_mcc_tmux_session_name "$SESSION_NAME")" -BUILD_LOG="$RUN_DIR/build.log" -SERVER_TMUX_LOG="$RUN_DIR/server-tmux.log" -SERVER_FILE_LOG="$RUN_DIR/server-latest.log" -INPUT_FILE="$(_mcc_session_input_file "$SESSION_NAME")" -CFG="$RUN_DIR/MinecraftClient.$MC_VERSION.ini" - -mkdir -p "$RUN_DIR" - -cleanup() { - mcc-cmd --session "$SESSION_NAME" "quit" >/dev/null 2>&1 || true - sleep 2 - mcc-kill --session "$SESSION_NAME" >/dev/null 2>&1 || true - - mc-stop "$VERSION" --confirm >/dev/null 2>&1 || true - wait_for_server_stop "$VERSION" 20 >/dev/null 2>&1 || true -} -trap cleanup EXIT - -prepare_config() { - bash "$SCRIPT_DIR/prepare_offline_mcc_config.sh" "$CFG" "$MC_VERSION" "$TEST_USERNAME" >/dev/null -} - -wait_for_server_log_pattern() { - local pattern="$1" - local description="$2" - local timeout="${3:-60}" - local elapsed=0 - - while (( elapsed < timeout )); do - if [[ -f "$SERVER_LOG_FILE" ]] && grep -Fq "$pattern" "$SERVER_LOG_FILE"; then - return 0 - fi - sleep 1 - ((elapsed += 1)) - done - - echo "Timed out waiting for server log: $description" >&2 - return 1 -} - -capture_server_logs() { - mc-log "$VERSION" 400 > "$SERVER_TMUX_LOG" 2>/dev/null || true - if [[ -f "$SERVER_LOG_FILE" ]]; then - cp "$SERVER_LOG_FILE" "$SERVER_FILE_LOG" - fi -} - -wait_for_file_pattern() { - local file="$1" - local pattern="$2" - local description="$3" - local timeout="${4:-60}" - local elapsed=0 - - while (( elapsed < timeout )); do - if [[ -f "$file" ]] && grep -Fq "$pattern" "$file"; then - return 0 - fi - sleep 1 - ((elapsed += 1)) - done - - echo "Timed out waiting for: $description" >&2 - return 1 -} - -fail() { - capture_server_logs - echo "FAIL: $1" >&2 - echo "Run directory: $RUN_DIR" >&2 - exit 1 -} - -assert_contains() { - local file="$1" - local pattern="$2" - local description="$3" - - grep -Fq "$pattern" "$file" || fail "$description" -} - -assert_not_contains() { - local file="$1" - local pattern="$2" - local description="$3" - - if grep -Fq "$pattern" "$file"; then - fail "$description" - fi -} - -run_server_command() { - local cmd="$1" - local attempt - echo "SERVER> $cmd" - for attempt in 1 2 3 4 5; do - if mc-rcon "$cmd" >/dev/null 2>&1; then - return 0 - fi - sleep 1 - done - fail "Server command failed: $cmd" -} - -run_mcc_command() { - local cmd="$1" - echo "MCC> $cmd" - mcc-cmd --session "$SESSION_NAME" "$cmd" - sleep 2 -} - -start_mcc_session() { - local -a mcc_args=("$CFG" "$TEST_USERNAME" "-" "localhost:$SERVER_PORT") - local mcc_args_cmd - mcc_args_cmd="$(printf '%q ' "${mcc_args[@]}")" - - tmux kill-session -t "$MCC_TMUX_SESSION" 2>/dev/null || true - rm -f "$PID_FILE" - tmux new-session -d -s "$MCC_TMUX_SESSION" -x 160 -y 50 \ - "cd '$REPO_ROOT' && printf '%s\n' \"\$\$\" > '$PID_FILE' && exec env MCC_FILE_INPUT=1 MCC_INPUT_FILE='$INPUT_FILE' dotnet run --project MinecraftClient -c Release --no-build -- $mcc_args_cmd > '$MCC_LOG' 2>&1" - - for _ in $(seq 1 25); do - if [[ -s "$PID_FILE" ]]; then - return 0 - fi - sleep 0.2 - done - - fail "Failed to capture MCC PID for session $SESSION_NAME" -} - -bash "$SCRIPT_DIR/preflight_test_env.sh" "$VERSION" >/dev/null -bash "$SCRIPT_DIR/reset_shared_test_state.sh" "$VERSION" >/dev/null -"$SCRIPT_DIR/ensure_offline_server.sh" "$VERSION" -mcc-reset-session --session "$SESSION_NAME" >/dev/null -echo "Building MCC..." -mcc-build > "$BUILD_LOG" 2>&1 || fail "mcc-build failed" -prepare_config -SERVER_PORT="$(bash "$SCRIPT_DIR/get_server_port.sh" "$VERSION")" -if [[ -z "$SERVER_PORT" ]]; then - fail "Failed to resolve server port" -fi - -mkdir -p "$(dirname "$INPUT_FILE")" "$(dirname "$MCC_LOG")" -: > "$INPUT_FILE" -rm -f "$MCC_LOG" - -echo "Starting server..." -mc-start "$VERSION" >/dev/null -wait_for_server_ready "$VERSION" || fail "Server did not become ready" - -echo "Starting MCC..." -start_mcc_session - -wait_for_file_pattern "$MCC_LOG" "Server was successfully joined." "MCC join success" 90 || fail "MCC failed to join" -wait_for_server_log_pattern "$TEST_USERNAME joined the game" "server join entry" 30 || fail "Server never logged the join" - -run_server_command "op $TEST_USERNAME" -run_server_command "gamerule sendCommandFeedback true" -run_server_command "gamerule logAdminCommands true" -run_server_command "time set day" -run_server_command "weather clear" -sleep 2 - -# ── Phase 1: Basic status and info commands ── -run_mcc_command "health" -run_mcc_command "list" -run_mcc_command "inventory player list" -run_mcc_command "/gamemode creative" -run_mcc_command "inventory creativegive 36 Diamond 16" -run_mcc_command "inventory player list" -run_mcc_command "entity" -run_mcc_command "/time query daytime" -run_mcc_command "smoke_test_from_mcc_full_spectrum" - -# ── Phase 2: Movement and look commands ── -run_mcc_command "/tp $TEST_USERNAME 0 -60 0" -sleep 3 -run_mcc_command "look up" -sleep 1 -run_mcc_command "look down" -sleep 1 -run_mcc_command "look east" -sleep 1 - -# ── Phase 3: Advanced inventory operations ── -run_mcc_command "inventory creativegive 37 IronSword 1" -run_mcc_command "inventory creativegive 38 GoldenApple 8" -run_mcc_command "inventory player list" -run_mcc_command "inventory creativeclear 38" -run_mcc_command "inventory player list" - -# ── Phase 4: Block placement and interaction ── -run_server_command "execute as $TEST_USERNAME at @s run fill ~1 ~ ~1 ~3 ~2 ~3 minecraft:stone" -sleep 2 -run_server_command "execute as $TEST_USERNAME at @s run setblock ~5 ~ ~5 minecraft:chest" -sleep 1 -run_server_command "execute as $TEST_USERNAME at @s run setblock ~5 ~1 ~5 minecraft:furnace" -sleep 1 -run_server_command "execute as $TEST_USERNAME at @s run setblock ~6 ~ ~5 minecraft:crafting_table" -sleep 1 - -# ── Phase 5: Entity spawning (expanded coverage) ── -run_server_command "execute as $TEST_USERNAME at @s run summon minecraft:cow ~2 ~ ~" -run_server_command "execute as $TEST_USERNAME at @s run summon minecraft:zombie ~4 ~ ~" -run_server_command "execute as $TEST_USERNAME at @s run summon minecraft:creeper ~6 ~ ~" -run_server_command "execute as $TEST_USERNAME at @s run summon minecraft:skeleton ~8 ~ ~" -run_server_command "execute as $TEST_USERNAME at @s run summon minecraft:villager ~-2 ~ ~" -run_server_command "execute as $TEST_USERNAME at @s run summon minecraft:allay ~-4 ~ ~" -run_server_command "execute as $TEST_USERNAME at @s run summon minecraft:armor_stand ~ ~ ~2" -run_server_command "execute as $TEST_USERNAME at @s run summon minecraft:item_display ~-6 ~ ~ {item:{id:\"minecraft:diamond\",count:1}}" -run_server_command "execute as $TEST_USERNAME at @s run summon minecraft:spider ~10 ~ ~" -run_server_command "execute as $TEST_USERNAME at @s run summon minecraft:pig ~-8 ~ ~" - -sleep 2 -run_mcc_command "entity" - -# ── Phase 6: Effects and environment ── -run_server_command "effect give $TEST_USERNAME minecraft:speed 30 1" -sleep 2 -run_mcc_command "health" -run_server_command "effect give $TEST_USERNAME minecraft:regeneration 10 1" -sleep 2 -run_mcc_command "health" - -# ── Phase 7: Gamemode cycling ── -run_mcc_command "/gamemode survival" -sleep 2 -run_mcc_command "health" -run_mcc_command "/gamemode creative" -sleep 2 - -# ── Phase 8: Dimension change (nether) ── -run_server_command "execute in minecraft:the_nether run tp $TEST_USERNAME 0 64 0" -sleep 4 -run_mcc_command "health" -run_server_command "execute in minecraft:overworld run tp $TEST_USERNAME 0 -60 0" -sleep 4 - -# ── Phase 9: Server chat and whisper ── -run_server_command "say Hello from the server console" -sleep 2 -run_server_command "msg $TEST_USERNAME This is a private whisper" -sleep 2 -run_mcc_command "integration_test_chat_response" - -# ── Phase 10: Particles, sounds, and explosions ── -run_server_command "execute as $TEST_USERNAME at @s run particle minecraft:happy_villager ~ ~1 ~ 0.5 0.5 0.5 0 12 force" -run_server_command "execute as $TEST_USERNAME at @s run particle minecraft:end_rod ~ ~1 ~ 0.5 0.5 0.5 0.01 20 force" -run_server_command "execute as $TEST_USERNAME at @s run particle minecraft:explosion ~ ~1 ~ 0 0 0 0 1 force" -run_server_command "execute as $TEST_USERNAME at @s run particle minecraft:totem_of_undying ~ ~1 ~ 0.5 0.5 0.5 0.1 20 force" -run_server_command "execute as $TEST_USERNAME at @s run particle minecraft:flame ~ ~1 ~ 0.2 0.2 0.2 0.02 30 force" -run_server_command "execute as $TEST_USERNAME at @s run particle minecraft:heart ~ ~2 ~ 0.3 0.3 0.3 0 5 force" - -run_server_command "execute as $TEST_USERNAME at @s run playsound minecraft:entity.lightning_bolt.thunder master $TEST_USERNAME ~ ~ ~ 1 1 0" -run_server_command "execute as $TEST_USERNAME at @s run playsound minecraft:block.note_block.bell master $TEST_USERNAME ~ ~ ~ 1 1 0" -run_server_command "execute as $TEST_USERNAME at @s run playsound minecraft:entity.experience_orb.pickup master $TEST_USERNAME ~ ~ ~ 1 1 0" - -run_server_command "execute as $TEST_USERNAME at @s run summon minecraft:tnt ~3 ~ ~" -sleep 2 -run_server_command "execute as $TEST_USERNAME at @s run summon minecraft:tnt ~6 ~ ~" - -# ── Phase 11: Kill and respawn cycle ── -run_mcc_command "/gamemode survival" -sleep 2 -run_server_command "kill $TEST_USERNAME" -sleep 4 -run_mcc_command "respawn" -sleep 4 -run_mcc_command "health" -run_mcc_command "/gamemode creative" -sleep 2 - -sleep 6 -capture_server_logs - -# ── Assertions: MCC log ── -assert_contains "$MCC_LOG" "Server was successfully joined." "MCC never joined the server" -assert_contains "$MCC_LOG" "[FileInput] > inventory player list" "Inventory command was not executed" -assert_contains "$MCC_LOG" "[FileInput] > entity" "Entity command was not executed" -assert_contains "$MCC_LOG" "[FileInput] > /gamemode creative" "Creative mode command was not executed from MCC" -assert_contains "$MCC_LOG" "Requested Diamond x16 in slot #36" "Creative inventory give did not succeed" -assert_contains "$MCC_LOG" "smoke_test_from_mcc_full_spectrum" "Client-originated chat was not observed" -assert_contains "$MCC_LOG" "[FileInput] > look up" "Look command was not executed" -assert_contains "$MCC_LOG" "[FileInput] > /gamemode survival" "Survival mode switch was not executed" -assert_contains "$MCC_LOG" "[FileInput] > respawn" "Respawn command was not executed" -assert_contains "$MCC_LOG" "[FileInput] > health" "Health command was not executed" -assert_contains "$MCC_LOG" "integration_test_chat_response" "Chat response test message was not observed" -assert_not_contains "$MCC_LOG" "Please enable InventoryHandling" "Inventory handling is still disabled" -assert_not_contains "$MCC_LOG" "Please enable EntityHandling" "Entity handling is still disabled" -assert_not_contains "$MCC_LOG" "You must be in Creative gamemode" "Creative mode was not active when creativegive ran" -assert_not_contains "$MCC_LOG" "Failed to load settings" "MCC failed to reload its config" -assert_not_contains "$MCC_LOG" "NullReferenceException" "A NullReferenceException occurred during the test" - -# ── Assertions: Server log ── -assert_contains "$SERVER_FILE_LOG" "$TEST_USERNAME joined the game" "Server never saw $TEST_USERNAME join" -assert_contains "$SERVER_FILE_LOG" "smoke_test_from_mcc_full_spectrum" "Server never received the client chat message" -assert_contains "$SERVER_FILE_LOG" "Displaying particle minecraft:happy_villager" "Particle events were not recorded on the server" -assert_contains "$SERVER_FILE_LOG" "Played sound minecraft:block.note_block.bell to $TEST_USERNAME" "Sound events were not recorded on the server" -assert_contains "$SERVER_FILE_LOG" "Summoned new Primed TNT" "TNT summon did not occur on the server" -assert_contains "$SERVER_FILE_LOG" "integration_test_chat_response" "Server never received the chat response test message" -assert_contains "$SERVER_FILE_LOG" "Hello from the server console" "Server say command was not logged" -assert_contains "$SERVER_FILE_LOG" "Killed $TEST_USERNAME" "Server kill command did not execute" -assert_not_contains "$SERVER_FILE_LOG" "Sending unknown packet 'clientbound/minecraft:disconnect'" "Server hit the disconnect packet regression during the test" - -cat <&2 - return 1 -} - -wait_for_server_log_pattern() { - local pattern="$1" - local description="$2" - local timeout="${3:-60}" - local elapsed=0 - - while (( elapsed < timeout )); do - if [[ -f "$SERVER_LOG_FILE" ]] && grep -Fq "$pattern" "$SERVER_LOG_FILE"; then - return 0 - fi - sleep 1 - ((elapsed += 1)) - done - - echo "Timed out waiting for server log: $description" >&2 - return 1 -} - -capture_server_logs() { - mc-log "$VERSION" 400 > "$SERVER_TMUX_LOG" 2>/dev/null || true - if [[ -f "$SERVER_LOG_FILE" ]]; then - cp "$SERVER_LOG_FILE" "$SERVER_FILE_LOG" - fi -} - -fail() { - capture_server_logs - echo "FAIL: $1" >&2 - echo "Run directory: $RUN_DIR" >&2 - exit 1 -} - -cleanup() { - mcc-cmd --session "$SESSION_A" "quit" >/dev/null 2>&1 || true - mcc-cmd --session "$SESSION_B" "quit" >/dev/null 2>&1 || true - sleep 1 - mcc-kill --session "$SESSION_A" >/dev/null 2>&1 || true - mcc-kill --session "$SESSION_B" >/dev/null 2>&1 || true - mc-stop "$VERSION" --confirm >/dev/null 2>&1 || true - wait_for_server_stop "$VERSION" 20 >/dev/null 2>&1 || true -} -trap cleanup EXIT - -assert_session_alive() { - local session="$1" - local pid_file="$2" - if [[ -s "$pid_file" ]]; then - local pid - pid="$(tr -cd '0-9' < "$pid_file")" - if [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null; then - return 0 - fi - fi - - tmux has-session -t "$(_mcc_tmux_session_name "$session")" 2>/dev/null -} - -assert_server_alive() { - server_running "$VERSION" || fail "Shared server session is not alive" -} - -start_file_input_session() { - local session="$1" - local username="$2" - local port="$3" - bash "$REPO_ROOT/tools/mcc-debug.sh" \ - --version "$VERSION" \ - --port "$port" \ - --file-input \ - --no-build \ - --session "$session" \ - --username "$username" >/dev/null -} - -bash "$SCRIPT_DIR/preflight_test_env.sh" "$VERSION" >/dev/null -bash "$SCRIPT_DIR/reset_shared_test_state.sh" "$VERSION" >/dev/null -"$SCRIPT_DIR/ensure_offline_server.sh" "$VERSION" >/dev/null -mcc-reset-session --session "$SESSION_A" >/dev/null -mcc-reset-session --session "$SESSION_B" >/dev/null - -echo "Building MCC..." -mcc-build > "$BUILD_LOG" 2>&1 || fail "mcc-build failed" - -echo "Starting shared server..." -mc-start "$VERSION" >/dev/null -wait_for_server_ready "$VERSION" || fail "Server did not become ready" -SERVER_PORT="$(bash "$SCRIPT_DIR/get_server_port.sh" "$VERSION")" -if [[ -z "$SERVER_PORT" ]]; then - fail "Failed to resolve server port" -fi - -echo "Starting MCC session A..." -start_file_input_session "$SESSION_A" "$USERNAME_A" "$SERVER_PORT" -echo "Starting MCC session B..." -start_file_input_session "$SESSION_B" "$USERNAME_B" "$SERVER_PORT" - -wait_for_file_pattern "$LOG_A" "Server was successfully joined." "session A join success" 90 || fail "Session A failed to join" -wait_for_file_pattern "$LOG_B" "Server was successfully joined." "session B join success" 90 || fail "Session B failed to join" -wait_for_server_log_pattern "$USERNAME_A joined the game" "server join for session A" 30 || fail "Server never logged $USERNAME_A join" -wait_for_server_log_pattern "$USERNAME_B joined the game" "server join for session B" 30 || fail "Server never logged $USERNAME_B join" - -echo "Sending debug state to both sessions..." -mcc-cmd --session "$SESSION_A" "debug state" -mcc-cmd --session "$SESSION_B" "debug state" -sleep 2 -wait_for_file_pattern "$LOG_A" "[FileInput] > debug state" "session A debug state command" 20 || fail "Session A did not consume debug state" -wait_for_file_pattern "$LOG_B" "[FileInput] > debug state" "session B debug state command" 20 || fail "Session B did not consume debug state" - -echo "Killing session A..." -mcc-kill --session "$SESSION_A" >/dev/null 2>&1 || true -sleep 2 - -assert_session_alive "$SESSION_B" "$PID_B_FILE" || fail "Session B is not alive after killing session A" -assert_server_alive - -echo "Verifying session B still responds..." -mcc-cmd --session "$SESSION_B" "health" -wait_for_file_pattern "$LOG_B" "[FileInput] > health" "session B health command after session A kill" 20 || fail "Session B stopped responding after session A kill" - -if [[ -s "$PID_A_FILE" ]]; then - pid_a="$(tr -cd '0-9' < "$PID_A_FILE")" - if [[ -n "$pid_a" ]] && kill -0 "$pid_a" 2>/dev/null; then - fail "Session A is still alive after mcc-kill" - fi -fi - -capture_server_logs - -cat <" >&2 - exit 1 -fi - -MATRIX_DIR="$1" -RESULTS_TSV="$MATRIX_DIR/results.tsv" -PRECHECK_TXT="$MATRIX_DIR/preflight.txt" -BUILD_LOG="$MATRIX_DIR/build.log" - -if [[ ! -f "$RESULTS_TSV" ]]; then - echo "Missing results file: $RESULTS_TSV" >&2 - exit 1 -fi - -echo "# Achievements Matrix Report" -echo -echo "## Executed" -echo -if [[ -f "$PRECHECK_TXT" ]]; then - echo '```text' - cat "$PRECHECK_TXT" - echo '```' -fi -echo -echo "- Matrix artifacts: \`$MATRIX_DIR\`" -echo "- Results TSV: \`$RESULTS_TSV\`" -echo "- Build log: \`$BUILD_LOG\`" -echo "- Execution mode: sequential" -echo "- Auth mode: offline" -echo -echo "## Observed" -echo -echo "| Version | Port | Family | Initial snapshot | Grant | Revoke | API callback | Verdict |" -echo "|---|---:|---|---|---|---|---|---|" -awk -F '\t' 'NR > 1 { - printf("| `%s` | `%s` | %s | %s | %s | %s | %s | %s |\n", - $1, $3, $4, $5, $6, $7, $8, $9); -}' "$RESULTS_TSV" - -echo -echo "## Artifact Links" -echo -awk -F '\t' 'NR > 1 { - printf("- `%s`: run=`%s`, mcc=`%s`, server=`%s`, commands=`%s`\n", $1, $11, $12, $13, $14); - printf(" note: %s\n", $10); -}' "$RESULTS_TSV" - -echo -echo "## Inferred" -echo -echo "- Only rows with real MCC and server-log artifacts count as executed proof." -echo "- Rows blocked by missing Java, tmux, or server directories are environment-limited, not product pass results." -echo "- Rows with missing MCC or command-log artifacts should be treated as harness failures until rerun confirms a product issue." diff --git a/.skills/mcc-integration-testing/scripts/summarize_test_run.sh b/.skills/mcc-integration-testing/scripts/summarize_test_run.sh deleted file mode 100755 index ac8efacff4..0000000000 --- a/.skills/mcc-integration-testing/scripts/summarize_test_run.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/usr/bin/env zsh -set -euo pipefail - -RUN_ROOT="${TMPDIR:-/tmp}/mcc-integration-testing" -RUN_DIR="${1:-$(find "$RUN_ROOT" -mindepth 1 -maxdepth 1 -type d | sort | tail -n 1)}" - -if [[ -z "${RUN_DIR:-}" ]] || [[ ! -d "$RUN_DIR" ]]; then - echo "Run directory not found" >&2 - exit 1 -fi - -MCC_LOG="$RUN_DIR/mcc.log" -SERVER_LOG="$RUN_DIR/server-latest.log" -BUILD_LOG="$RUN_DIR/build.log" - -echo "Run directory: $RUN_DIR" -echo -echo "Build result:" -grep -E "Warning\(s\)|Error\(s\)|Time Elapsed" "$BUILD_LOG" || true -echo -echo "MCC highlights:" -grep -E "Server was successfully joined|FileInput|smoke_test_from_mcc_full_spectrum|There are [0-9]+ of a max|health|Creative" "$MCC_LOG" || true -echo -echo "Server highlights:" -grep -E "joined the game|Made .* a server operator|game mode|smoke_test_from_mcc_full_spectrum|summon|particle|playsound|tnt" "$SERVER_LOG" || true diff --git a/.skills/mcc-version-adaptation/SKILL.md b/.skills/mcc-version-adaptation/SKILL.md deleted file mode 100644 index 54b1c782b4..0000000000 --- a/.skills/mcc-version-adaptation/SKILL.md +++ /dev/null @@ -1,351 +0,0 @@ ---- -name: mcc-version-adaptation -description: Adapt MCC palettes and protocol handling for a new Minecraft version. Use when the user wants to add support for a new MC version, compare version registries, update item/entity/block/metadata palettes, or fix protocol mismatches between MC versions. ---- - -# MCC Version Adaptation - -Systematic workflow for updating Minecraft Console Client to support a new Minecraft version, focusing on palette/registry changes and entity metadata. - -## Prerequisites - -- Decompiled server source for both the old and new MC versions in `$MCC_REPO/MinecraftOfficial/-decompiled/` -- If missing, decompile and download server.jar: - ```bash - $MCC_REPO/tools/decompile.sh --version - ``` - This auto-downloads `MinecraftDecompiler.jar` if needed, produces the decompiled source, and downloads `server.jar` into `$MCC_SERVERS//`. -- `tools/decompile.sh` depends on official mappings. For older versions where it refuses to decompile, fall back to a raw Java decompiler such as `cfr-decompiler` against `$MCC_SERVERS//server.jar`. That fallback is good enough for packet inspection and registration order checks even when the output is obfuscated. -- A test server of the target version in `$MCC_SERVERS//` (see `mcc-dev-workflow` skill) - -## Step 0: Generate Server Reports (CRITICAL since 1.21.9) - -**Before** analyzing decompiled source, generate authoritative registry data from the server jar: - -```bash -cd /tmp && java -DbundlerMainClass=net.minecraft.data.Main \ - -jar $MCC_SERVERS//server.jar \ - --reports --output /tmp/mc_reports -``` - -This produces `/tmp/mc_reports/reports/` containing: -- `registries.json` — all registries with **actual protocol_id** for each entry -- `blocks.json` — all blocks with **block state IDs** -- `packets.json` — packet protocol definitions - -**Why this matters**: Since MC 1.21.9, some items and blocks are registered outside `Items.java`/`Blocks.java` field declarations (via block registration callbacks or other paths). The decompiled source alone will **miss** these entries. The server data generator is the only authoritative source for protocol IDs. - -### Validation check -Compare server registry counts against decompiled source counts: -```bash -python3 -c " -import json -with open('/tmp/mc_reports/reports/registries.json') as f: - data = json.load(f) -for reg in ['minecraft:item', 'minecraft:entity_type', 'minecraft:block']: - print(f'{reg}: {len(data[reg][\"entries\"])} entries') -" -``` - -If server counts differ from decompiled Java source counts, the palette **must** be generated from server data, not from Java source. - -## Step 1: Run Registry Diff - -```bash -python3 $MCC_REPO/tools/diff_registries.py -``` - -This compares five registries and reports which need palette updates: - -| Registry | MCC File | When to Update | -|----------|----------|----------------| -| Items.java | `ItemPalettes/ItemPaletteXXX.cs` | New/removed/reordered items | -| EntityType.java | `EntityPalettes/EntityPaletteXXX.cs` | New/removed/reordered entity types | -| Blocks.java | `BlockPalettes/BlockPaletteXXX.cs` | New/removed/reordered blocks | -| DataComponents.java | `StructuredComponents/StructuredComponentsRegistryXXX.cs` | New/reordered components | -| EntityDataSerializers.java | `EntityMetadataPalettes/EntityMetadataPaletteXXX.cs` | New/reordered serializer types | - -**Important**: diff_registries.py compares decompiled Java source. If Step 0 revealed count mismatches, the diff output may undercount. Always cross-reference with server registries.json. - -## Step 2: Generate Updated Palettes - -For registries marked "PALETTE UPDATE NEEDED": - -### Item Palette - -**Preferred method** (accurate since 1.21.9): -```bash -python3 $MCC_REPO/tools/gen_item_palette.py --from-registry /tmp/mc_reports/reports/registries.json -# e.g., gen_item_palette.py --from-registry /tmp/mc_reports/reports/registries.json 1219 -``` - -**Legacy method** (works for versions where Items.java has all items): -```bash -python3 $MCC_REPO/tools/gen_item_palette.py -# e.g., gen_item_palette.py 1.21.1 121 -``` - -- If new items are reported missing from `ItemType.cs`, add them to the enum in alphabetical order. -- The script auto-generates the C# palette file. - -### Block Palette - -**Preferred method** (accurate since 1.21.9): -```bash -python3 $MCC_REPO/tools/gen_block_palette.py /tmp/mc_reports/reports/blocks.json -# e.g., gen_block_palette.py /tmp/mc_reports/reports/blocks.json 1219 -``` - -**Legacy method** (manual creation from decompiled Blocks.java): Follow the pattern of existing palette files, using `register("name", ...)` call order from the decompiled source. Only reliable when Blocks.java contains all blocks. - -If new blocks are reported missing from `Material.cs`, add them to the enum in alphabetical order. - -### Entity Palette - -```bash -python3 $MCC_REPO/tools/gen_entity_palette.py /tmp/mc_reports/reports/registries.json -# e.g., gen_entity_palette.py /tmp/mc_reports/reports/registries.json 1219 -``` - -If new entity types are reported missing from `EntityType.cs`, add them to the enum in alphabetical order. - -### Entity Metadata Palette -```bash -python3 $MCC_REPO/tools/gen_entity_metadata_palette.py -# e.g., gen_entity_metadata_palette.py 1.20.6 1206 -``` -- If new serializer types appear as UNMAPPED, add them to both: - 1. The script's `FIELD_TO_ENUM` dictionary - 2. MCC's `EntityMetaDataType.cs` enum - 3. `DataTypes.cs` read logic (add a `case` to consume the correct bytes) - -### DataComponents / StructuredComponents -Compare `DataComponents.java` registration order. If new components appear, update `StructuredComponentsRegistryXXX.cs`. For new component types, implement corresponding reader in `StructuredComponents/Components/`. - -## Step 3: Update Version Routing - -After creating palette files, update version selection logic: - -| Palette Type | Routing Location | -|-------------|-----------------| -| Item | `Protocol18.cs` → `itemPalette` switch expression | -| Entity | `Protocol18.cs` → `entityPalette` switch expression | -| Block | `Protocol18.cs` → `blockPalette` initialization | -| EntityMetadata | `EntityMetadataPalette.cs` → `GetPalette()` switch | -| DataComponents | `StructuredComponentsRegistry.cs` → factory/routing | -| Packet | `PacketType18Handler.cs` → `GetTypeHandler()` switch | - -Pattern: add a new `>= MC_X_Y_Z_Version => new XxxPaletteXYZ()` case. - -Also update: -- `Protocol18.cs`: add `MC_X_Y_Z_Version = ` constant -- `Protocol18.cs`: update all `> MC_prev_Version` upper-bound checks to `> MC_X_Y_Z_Version` -- `ProtocolHandler.cs`: add version string → protocol mapping, protocol → version mapping, add to supported list -- `Program.cs`: update `MCHighestVersion` - -## Step 4: Check Packet Changes - -Compare `GameProtocols.java` and `ConfigurationProtocols.java` between versions. - -Common patterns: -- **New clientbound packets inserted mid-list**: All subsequent packet IDs shift. Requires a new `PacketPalette` class. -- **New packets appended at end**: Only need to add new enum values and entries in the palette. -- **Packet renames** (same slot): Update MCC's packet type enum name but no ID change. - -When packet changes are detected: -1. Add new packet type enum values to `PacketTypesIn.cs`, `PacketTypesOut.cs`, `ConfigurationPacketTypesIn.cs`, `ConfigurationPacketTypesOut.cs` -2. Create new `PacketPaletteXXX.cs` based on the previous one, adjusting IDs -3. Update `PacketType18Handler.cs` routing - -Use scriptable comparisons instead of eyeballing long packet tables. The packet ID is the registration index in `GameProtocols.java`: - -```bash -python3 - <<'PY' -import re -for ver in ["1.21.10", "1.21.11", "26.1"]: - path=f"MinecraftOfficial/{ver}-decompiled/net/minecraft/network/protocol/game/GameProtocols.java" - text=open(path).read() - start=text.index("CLIENTBOUND_TEMPLATE") - names=[m.group(1) for m in re.finditer(r"\.addPacket\(([^,]+),", text[start:])] - print("==", ver, len(names)) - for i, name in enumerate(names): - print(f"0x{i:02X}", name) -PY -``` - -For focused diffs: - -```bash -python3 - <<'PY' -import re -def packets(ver, marker): - text=open(f"MinecraftOfficial/{ver}-decompiled/net/minecraft/network/protocol/game/GameProtocols.java").read() - start=text.index(marker) - return [m.group(1) for m in re.finditer(r"\.addPacket\(([^,]+),", text[start:])] -left, right = "1.21.10", "1.21.11" -a, b = packets(left, "CLIENTBOUND_TEMPLATE"), packets(right, "CLIENTBOUND_TEMPLATE") -for i in range(max(len(a), len(b))): - x = a[i] if i < len(a) else "" - y = b[i] if i < len(b) else "" - if x != y: - print(f"0x{i:02X}: {left}={x} | {right}={y}") -PY -``` - -Do the same for `SERVERBOUND_TEMPLATE`. Clientbound and serverbound can change independently. Do not inherit a newer palette just because one side looks similar. For example, `1.21.11` used the same play packet order as `1.21.9/1.21.10` for the tested inventory path, while `26.1` had additional shifts. - -## Step 5: Check Variant Encoding Changes - -For entity types that use variant serializers (Cat, Wolf, Frog, Painting), check if the codec changed between versions by inspecting: - -- `EntityDataSerializers.java` — look at how each `*_VARIANT` field is constructed -- Key codecs: - - `ByteBufCodecs.holderRegistry()` → wire format: `VarInt(registry_id)` - - `ByteBufCodecs.holder()` → wire format: `VarInt(id+1)` for registered, `VarInt(0) + inline_data` for direct -- If codec changed, update `DataTypes.cs` entity metadata reading logic accordingly. - -## Step 6: Handle New EntityDataSerializer Types - -When new serializer types are added (detected in Step 1): - -1. Add enum value to `EntityMetaDataType.cs` with XML doc comment -2. Add read logic in `DataTypes.cs` `ReadNextMetadata()`: - - Determine byte consumption from the decompiled codec - - Simple enum types (like CopperGolemState, WeatheringCopperState): `ReadNextVarInt(cache)` - - Composite types (like ResolvableProfile): analyze the STREAM_CODEC chain in decompiled source -3. Create the new palette file (Step 2) -4. Update palette routing (Step 3) - -## Step 7: Check SpawnEntity / Other Packet Format Changes - -Compare key packet codec classes between versions. Known changes: -- **1.21.9+**: `SpawnEntity` velocity fields changed from `short / 8000.0` to `LpVec3` format (VarLong-packed fixed-point). Gate reading in `DataTypes.ReadNextEntity()` by version. - -When in doubt, compare the relevant packet class (e.g. `ClientboundAddEntityPacket.java`) between versions. - -## Step 8: Update Block Collision Shapes (Physics Engine) - -MCC's physics engine uses block collision shape data from PrismarineJS `minecraft-data` to perform accurate AABB collision detection (stored in `MinecraftClient/Physics/BlockShapeData.json`, embedded as a resource). - -When a new MC version introduces new blocks or changes block shapes, update this data: - -```bash -# Download and compact collision shapes for the target version -python3 $MCC_REPO/tools/gen_block_shapes.py -# e.g. python3 tools/gen_block_shapes.py 1.21.11 -``` - -If network is slow or unreliable, download the file manually and convert: -```bash -# Manual download -curl -L -o /tmp/bcs.json \ - "https://raw.githubusercontent.com/PrismarineJS/minecraft-data/master/data/pc//blockCollisionShapes.json" - -# Then compact from local file -python3 $MCC_REPO/tools/gen_block_shapes.py --from-file /tmp/bcs.json -``` - -Output: `MinecraftClient/Physics/BlockShapeData.json` (embedded via `MinecraftClient.csproj`) - -The JSON maps block names (snake_case) → collision shape IDs → AABB coordinates. At runtime, `BlockShapes.cs` maps MCC's block state IDs to these AABBs using the block palette. - -**When to update**: Whenever new blocks are added that have non-trivial collision shapes (e.g., new slab variants, stairs, fences). If only items or entities changed, this step can be skipped. - -**Data source**: PrismarineJS `minecraft-data` repo, path: `data/pc//blockCollisionShapes.json`. Version availability can be checked via `data/dataPaths.json`. - -## Step 9: Update Minimap Block Color Map - -Regenerate the block-to-MapColor mapping used by the TUI minimap. This maps each block's `Material` enum to the RGB color from Minecraft's official `MapColor` table. - -```bash -python3 $MCC_REPO/tools/gen_block_color_map.py $MCC_REPO/MinecraftOfficial/-decompiled -# e.g. python3 tools/gen_block_color_map.py MinecraftOfficial/26.1-rc-2-decompiled -``` - -Output: `MinecraftClient/Tui/MinimapBlockColors.json` (embedded as a resource via `.csproj`). - -The script parses `MapColor.java`, `DyeColor.java`, and `Blocks.java` from the decompiled source to extract each block's assigned map color. Blocks not matched to a known `Material` enum value are skipped. - -**When to update**: Whenever new blocks are added or existing blocks change their `mapColor()` assignment. If only items or entities changed, this step can be skipped. - -## Step 10: Update Minimap Entity Categories - -Regenerate the entity-to-MobCategory mapping used by the TUI minimap for classifying entities as hostile, passive, neutral, or non-living. - -```bash -python3 $MCC_REPO/tools/gen_entity_category_map.py $MCC_REPO/MinecraftOfficial/-decompiled -# e.g. python3 tools/gen_entity_category_map.py MinecraftOfficial/26.1-rc-2-decompiled -``` - -Output: `MinecraftClient/Tui/MinimapEntityCategories.json` (embedded as a resource via `.csproj`). - -The script parses `EntityType.java` to extract each entity's `MobCategory` assignment, then maps Minecraft's categories to MCC minimap categories: -- `MONSTER` -> hostile (with neutral overrides for conditionally hostile mobs like Enderman, Spider, Wolf) -- `CREATURE`/`AMBIENT`/`AXOLOTLS`/`WATER_*` -> passive -- `MISC` -> non_living (with passive overrides for Villager, WanderingTrader, ZombieHorse) - -The script maintains manual override lists for "neutral" mobs (attack only when provoked) since Minecraft has no machine-readable flag for this behavior. Review and update the `NEUTRAL_OVERRIDES` and `PASSIVE_OVERRIDES` sets in the script when new conditionally-hostile or misclassified mobs are added. - -**When to update**: Whenever new entity types are added. If only blocks or items changed, this step can be skipped. - -## Step 11: Compile and Verify - -```bash -dotnet build $MCC_REPO/MinecraftClient.sln -c Release -``` - -Then connect to a test server of the target version (see `mcc-dev-workflow` skill) and verify: -- Successful connection -- `/give` new items → check inventory for correct identification -- `/give` existing items (diamond_sword, etc.) → verify no ID shift -- Summon new entities → check type and health -- Summon variant entities (wolf, cat, frog) → no metadata parse errors -- Place new blocks → `dig` reports correct block type -- Teleport to distant chunks → terrain loads without errors -- Chat commands work normally - -**Always verify basic existing items first** (e.g. diamond_sword) to catch palette ID shift bugs early. If an existing item shows as the wrong type, the palette is using wrong protocol IDs. - -## Key Source Files Reference - -| Decompiled Java Source | Purpose | -|----------------------|---------| -| `world/item/Items.java` | Item registry (field declaration order ≈ ID, **but not always since 1.21.9**) | -| `world/entity/EntityType.java` | Entity type registry (`register()` call order = ID) | -| `world/level/block/Blocks.java` | Block registry (`register()` call order ≈ ID, **but not always since 1.21.9**) | -| `core/component/DataComponents.java` | Data component registry | -| `network/syncher/EntityDataSerializers.java` | Entity metadata type registry (static block order = ID) | -| `network/protocol/game/GameProtocols.java` | Play packet registration order (= packet IDs) | -| `network/protocol/configuration/ConfigurationProtocols.java` | Config packet registration order | - -| Server Data Generator Output | Purpose | -|-----|---------| -| `registries.json` | **Authoritative** protocol_id for all registries | -| `blocks.json` | **Authoritative** block state IDs | -| `packets.json` | Packet protocol definitions | - -## Common Pitfalls - -- **Source field order ≠ runtime registry ID (since 1.21.9)**: Some items/blocks are registered via callbacks (e.g., block items registered by `Blocks.java` during block registration) rather than in `Items.java` field declarations. Always validate palette counts against server `registries.json`. If counts differ, **use server data generator output instead of decompiled source**. -- **ID order matters**: IDs are determined by registration order, not alphabetical. Always use server data generator as ground truth. -- **Cross-version jumps**: When MCC skips versions (e.g., 1.20.4→1.20.6), registries from ALL intermediate versions may have changed. Always diff against the actual last-supported version, not the latest palette. -- **EntityMetadata type shifts**: A single new serializer type shifts all subsequent IDs, causing widespread metadata parse failures. Symptoms: entity rendering glitches, disconnections, or silent data corruption. -- **CUT_STANDSTONE_SLAB**: This is an intentional typo in Minecraft source (should be SANDSTONE). MCC's `ItemType.cs` uses `CutSandstoneSlab` — the gen script handles this via the OVERRIDES dict. -- **Item/block renames across versions**: Some items/blocks get renamed (e.g., `DRY_SHORT_GRASS` → `SHORT_DRY_GRASS`, `CHAIN` → `IRON_CHAIN`). Keep old enum values for backward compatibility with older palettes, and add new ones for the new version. -- **Packet ID cascading shifts**: Even one inserted mid-list clientbound packet shifts ALL subsequent IDs. Always create a new PacketPalette for protocol changes. -- **Test existing items first**: After palette changes, always verify existing items (diamond_sword, stone, etc.) before testing new ones. If they show as wrong items, the palette has a systemic ID offset bug. - -## Reusable Scripts - -All scripts are in `$MCC_REPO/tools/`. See `tools/README.md` for detailed usage. - -| Script | Purpose | Input | -|--------|---------|-------| -| `diff_registries.py` | Compare registries between versions | Decompiled source | -| `gen_item_palette.py` | Generate ItemPalette C# | Decompiled source OR registries.json | -| `gen_block_palette.py` | Generate BlockPalette C# | blocks.json | -| `gen_entity_palette.py` | Generate EntityPalette C# | registries.json | -| `gen_entity_metadata_palette.py` | Generate EntityMetadataPalette C# | Decompiled source | -| `gen_block_shapes.py` | Download & compact block collision shapes | PrismarineJS minecraft-data | -| `gen_block_color_map.py` | Generate minimap block color JSON | Decompiled source (MapColor/DyeColor/Blocks) | -| `gen_entity_category_map.py` | Generate minimap entity category JSON | Decompiled source (EntityType.java) | diff --git a/.skills/mermaid-diagrams/SKILL.md b/.skills/mermaid-diagrams/SKILL.md deleted file mode 100644 index 2d7ca5a5ef..0000000000 --- a/.skills/mermaid-diagrams/SKILL.md +++ /dev/null @@ -1,211 +0,0 @@ ---- -name: mermaid-diagrams -description: Creating and refining Mermaid diagrams with live reload. Use when users want flowcharts, sequence diagrams, class diagrams, ER diagrams, state diagrams, or any other Mermaid visualization. Provides best practices for syntax, styling, and the iterative workflow using mermaid_preview and mermaid_save tools. -allowed-tools: mcp__mermaid__mermaid_preview, mcp__mermaid__mermaid_save ---- - -# Mermaid Diagram Expert - -You are an expert at creating, refining, and optimizing Mermaid diagrams using the MCP server tools. - -## Core Workflow - -1. **Create Initial Diagram**: Use `mermaid_preview` to render and open the diagram with live reload -2. **Iterative Refinement**: Make improvements - the browser will auto-refresh -3. **Save Final Version**: Use `mermaid_save` when satisfied - -## Tool Usage - -### mermaid_preview - -Always use this when creating or updating diagrams: - -- `diagram`: The Mermaid code -- `preview_id`: Descriptive kebab-case ID (e.g., `auth-flow`, `architecture`) -- `format`: Use `svg` for live reload (default) -- `theme`: `default`, `forest`, `dark`, or `neutral` -- `background`: `white`, `transparent`, or hex colors -- `width`, `height`, `scale`: Adjust for quality/size - -**Key Points:** - -- Reuse the same `preview_id` for refinements to update the same browser tab -- Use different IDs for multiple simultaneous diagrams -- Live reload only works with SVG format - -### mermaid_save - -Use after the diagram is finalized: - -- `save_path`: Where to save (e.g., `./docs/diagram.svg`) -- `preview_id`: Must match the preview ID used earlier -- `format`: Must match format from preview - -## Diagram Types - -### Flowcharts (`graph` or `flowchart`) - -Direction: `LR`, `TB`, `RL`, `BT` - -```mermaid -graph LR - A[Start] --> B{Decision} - B -->|Yes| C[Action] - B -->|No| D[End] - - style A fill:#e1f5ff - style C fill:#d4edda -``` - -### Sequence Diagrams (`sequenceDiagram`) - -⚠️ **Do NOT use `style` statements** - not supported - -```mermaid -sequenceDiagram - participant User - participant App - participant API - - User->>App: Login - App->>API: Authenticate - API-->>App: Token - App-->>User: Success -``` - -### Class Diagrams (`classDiagram`) - -```mermaid -classDiagram - class User { - +String name - +String email - +login() - } - class Order { - +int id - +Date created - } - User "1" --> "*" Order -``` - -### Entity Relationship (`erDiagram`) - -```mermaid -erDiagram - USER ||--o{ ORDER : places - ORDER ||--|{ LINE_ITEM : contains - - USER { - int id PK - string email - string name - } -``` - -### State Diagrams (`stateDiagram-v2`) - -```mermaid -stateDiagram-v2 - [*] --> Idle - Idle --> Processing : start - Processing --> Complete : finish - Complete --> [*] -``` - -### Gantt Charts (`gantt`) - -```mermaid -gantt - title Project Timeline - section Phase 1 - Task 1 :a1, 2024-01-01, 30d - Task 2 :after a1, 20d -``` - -## Best Practices - -### Preview IDs - -- Use descriptive names: `architecture`, `auth-flow`, `data-model` -- Keep the same ID during refinements -- Use different IDs for concurrent diagrams - -### Themes & Styling - -- `default`: Clean, professional -- `forest`: Green tones -- `dark`: Dark background -- `neutral`: Grayscale - -Use `transparent` background for docs, `white` for standalone - -### Common Patterns - -**System Architecture:** - -```mermaid -graph TB - Client[Web App] - API[API Gateway] - DB[(Database)] - - Client --> API --> DB -``` - -**Authentication Flow:** - -```mermaid -sequenceDiagram - User->>App: Login Request - App->>Auth: Validate - Auth-->>App: JWT Token - App-->>User: Access Granted -``` - -## User Interaction - -When a user requests a diagram: - -1. **Clarify if needed**: What type? What level of detail? -2. **Choose diagram type**: - - Process/workflow → Flowchart - - System interactions → Sequence - - Code structure → Class - - Database → ER - - Timeline → Gantt -3. **Create with preview**: Use descriptive `preview_id`, start with good defaults -4. **Iterate**: Keep same `preview_id`, explain changes -5. **Save**: Ask where/what format, use `mermaid_save` - -## Proactive Behavior - -- Always preview diagrams, don't just generate code -- Use sensible defaults without asking -- Reuse preview_id for refinements -- Suggest improvements when you see opportunities -- Explain your diagram type choice briefly - -## Common Issues - -**Syntax errors**: Check quotes, arrow syntax, keywords -**Layout issues**: Try different directions (LR vs TB) -**Text overlap**: Increase dimensions or shorten labels -**Colors not working**: Verify CSS color format; remember sequence diagrams don't support styles - -## Example Interaction - -**User**: "Create an auth flow diagram" - -**You**: "I'll create a sequence diagram showing the authentication flow." -[Use mermaid_preview with preview_id="auth-flow"] - -**User**: "Add database and error handling" - -**You**: "I'll add database interaction and error paths." -[Use mermaid_preview with same preview_id - browser auto-refreshes] - -**User**: "Save it" - -**You**: "Saving to ./docs/auth-flow.svg" -[Use mermaid_save] diff --git a/.skills/skill-creator/LICENSE.txt b/.skills/skill-creator/LICENSE.txt deleted file mode 100644 index 7a4a3ea242..0000000000 --- a/.skills/skill-creator/LICENSE.txt +++ /dev/null @@ -1,202 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. \ No newline at end of file diff --git a/.skills/skill-creator/SKILL.md b/.skills/skill-creator/SKILL.md deleted file mode 100644 index 942bfe8960..0000000000 --- a/.skills/skill-creator/SKILL.md +++ /dev/null @@ -1,479 +0,0 @@ ---- -name: skill-creator -description: Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, update or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy. ---- - -# Skill Creator - -A skill for creating new skills and iteratively improving them. - -At a high level, the process of creating a skill goes like this: - -- Decide what you want the skill to do and roughly how it should do it -- Write a draft of the skill -- Create a few test prompts and run claude-with-access-to-the-skill on them -- Help the user evaluate the results both qualitatively and quantitatively - - While the runs happen in the background, draft some quantitative evals if there aren't any (if there are some, you can either use as is or modify if you feel something needs to change about them). Then explain them to the user (or if they already existed, explain the ones that already exist) - - Use the `eval-viewer/generate_review.py` script to show the user the results for them to look at, and also let them look at the quantitative metrics -- Rewrite the skill based on feedback from the user's evaluation of the results (and also if there are any glaring flaws that become apparent from the quantitative benchmarks) -- Repeat until you're satisfied -- Expand the test set and try again at larger scale - -Your job when using this skill is to figure out where the user is in this process and then jump in and help them progress through these stages. So for instance, maybe they're like "I want to make a skill for X". You can help narrow down what they mean, write a draft, write the test cases, figure out how they want to evaluate, run all the prompts, and repeat. - -On the other hand, maybe they already have a draft of the skill. In this case you can go straight to the eval/iterate part of the loop. - -Of course, you should always be flexible and if the user is like "I don't need to run a bunch of evaluations, just vibe with me", you can do that instead. - -Then after the skill is done (but again, the order is flexible), you can also run the skill description improver, which we have a whole separate script for, to optimize the triggering of the skill. - -Cool? Cool. - -## Communicating with the user - -The skill creator is liable to be used by people across a wide range of familiarity with coding jargon. If you haven't heard (and how could you, it's only very recently that it started), there's a trend now where the power of Claude is inspiring plumbers to open up their terminals, parents and grandparents to google "how to install npm". On the other hand, the bulk of users are probably fairly computer-literate. - -So please pay attention to context cues to understand how to phrase your communication! In the default case, just to give you some idea: - -- "evaluation" and "benchmark" are borderline, but OK -- for "JSON" and "assertion" you want to see serious cues from the user that they know what those things are before using them without explaining them - -It's OK to briefly explain terms if you're in doubt, and feel free to clarify terms with a short definition if you're unsure if the user will get it. - ---- - -## Creating a skill - -### Capture Intent - -Start by understanding the user's intent. The current conversation might already contain a workflow the user wants to capture (e.g., they say "turn this into a skill"). If so, extract answers from the conversation history first — the tools used, the sequence of steps, corrections the user made, input/output formats observed. The user may need to fill the gaps, and should confirm before proceeding to the next step. - -1. What should this skill enable Claude to do? -2. When should this skill trigger? (what user phrases/contexts) -3. What's the expected output format? -4. Should we set up test cases to verify the skill works? Skills with objectively verifiable outputs (file transforms, data extraction, code generation, fixed workflow steps) benefit from test cases. Skills with subjective outputs (writing style, art) often don't need them. Suggest the appropriate default based on the skill type, but let the user decide. - -### Interview and Research - -Proactively ask questions about edge cases, input/output formats, example files, success criteria, and dependencies. Wait to write test prompts until you've got this part ironed out. - -Check available MCPs - if useful for research (searching docs, finding similar skills, looking up best practices), research in parallel via subagents if available, otherwise inline. Come prepared with context to reduce burden on the user. - -### Write the SKILL.md - -Based on the user interview, fill in these components: - -- **name**: Skill identifier -- **description**: When to trigger, what it does. This is the primary triggering mechanism - include both what the skill does AND specific contexts for when to use it. All "when to use" info goes here, not in the body. Note: currently Claude has a tendency to "undertrigger" skills -- to not use them when they'd be useful. To combat this, please make the skill descriptions a little bit "pushy". So for instance, instead of "How to build a simple fast dashboard to display internal Anthropic data.", you might write "How to build a simple fast dashboard to display internal Anthropic data. Make sure to use this skill whenever the user mentions dashboards, data visualization, internal metrics, or wants to display any kind of company data, even if they don't explicitly ask for a 'dashboard.'" -- **compatibility**: Required tools, dependencies (optional, rarely needed) -- **the rest of the skill :)** - -### Skill Writing Guide - -#### Anatomy of a Skill - -``` -skill-name/ -├── SKILL.md (required) -│ ├── YAML frontmatter (name, description required) -│ └── Markdown instructions -└── Bundled Resources (optional) - ├── scripts/ - Executable code for deterministic/repetitive tasks - ├── references/ - Docs loaded into context as needed - └── assets/ - Files used in output (templates, icons, fonts) -``` - -#### Progressive Disclosure - -Skills use a three-level loading system: -1. **Metadata** (name + description) - Always in context (~100 words) -2. **SKILL.md body** - In context whenever skill triggers (<500 lines ideal) -3. **Bundled resources** - As needed (unlimited, scripts can execute without loading) - -These word counts are approximate and you can feel free to go longer if needed. - -**Key patterns:** -- Keep SKILL.md under 500 lines; if you're approaching this limit, add an additional layer of hierarchy along with clear pointers about where the model using the skill should go next to follow up. -- Reference files clearly from SKILL.md with guidance on when to read them -- For large reference files (>300 lines), include a table of contents - -**Domain organization**: When a skill supports multiple domains/frameworks, organize by variant: -``` -cloud-deploy/ -├── SKILL.md (workflow + selection) -└── references/ - ├── aws.md - ├── gcp.md - └── azure.md -``` -Claude reads only the relevant reference file. - -#### Principle of Lack of Surprise - -This goes without saying, but skills must not contain malware, exploit code, or any content that could compromise system security. A skill's contents should not surprise the user in their intent if described. Don't go along with requests to create misleading skills or skills designed to facilitate unauthorized access, data exfiltration, or other malicious activities. Things like a "roleplay as an XYZ" are OK though. - -#### Writing Patterns - -Prefer using the imperative form in instructions. - -**Defining output formats** - You can do it like this: -```markdown -## Report structure -ALWAYS use this exact template: -# [Title] -## Executive summary -## Key findings -## Recommendations -``` - -**Examples pattern** - It's useful to include examples. You can format them like this (but if "Input" and "Output" are in the examples you might want to deviate a little): -```markdown -## Commit message format -**Example 1:** -Input: Added user authentication with JWT tokens -Output: feat(auth): implement JWT-based authentication -``` - -### Writing Style - -Try to explain to the model why things are important in lieu of heavy-handed musty MUSTs. Use theory of mind and try to make the skill general and not super-narrow to specific examples. Start by writing a draft and then look at it with fresh eyes and improve it. - -### Test Cases - -After writing the skill draft, come up with 2-3 realistic test prompts — the kind of thing a real user would actually say. Share them with the user: [you don't have to use this exact language] "Here are a few test cases I'd like to try. Do these look right, or do you want to add more?" Then run them. - -Save test cases to `evals/evals.json`. Don't write assertions yet — just the prompts. You'll draft assertions in the next step while the runs are in progress. - -```json -{ - "skill_name": "example-skill", - "evals": [ - { - "id": 1, - "prompt": "User's task prompt", - "expected_output": "Description of expected result", - "files": [] - } - ] -} -``` - -See `references/schemas.md` for the full schema (including the `assertions` field, which you'll add later). - -## Running and evaluating test cases - -This section is one continuous sequence — don't stop partway through. Do NOT use `/skill-test` or any other testing skill. - -Put results in `-workspace/` as a sibling to the skill directory. Within the workspace, organize results by iteration (`iteration-1/`, `iteration-2/`, etc.) and within that, each test case gets a directory (`eval-0/`, `eval-1/`, etc.). Don't create all of this upfront — just create directories as you go. - -### Step 1: Spawn all runs (with-skill AND baseline) in the same turn - -For each test case, spawn two subagents in the same turn — one with the skill, one without. This is important: don't spawn the with-skill runs first and then come back for baselines later. Launch everything at once so it all finishes around the same time. - -**With-skill run:** - -``` -Execute this task: -- Skill path: -- Task: -- Input files: -- Save outputs to: /iteration-/eval-/with_skill/outputs/ -- Outputs to save: -``` - -**Baseline run** (same prompt, but the baseline depends on context): -- **Creating a new skill**: no skill at all. Same prompt, no skill path, save to `without_skill/outputs/`. -- **Improving an existing skill**: the old version. Before editing, snapshot the skill (`cp -r /skill-snapshot/`), then point the baseline subagent at the snapshot. Save to `old_skill/outputs/`. - -Write an `eval_metadata.json` for each test case (assertions can be empty for now). Give each eval a descriptive name based on what it's testing — not just "eval-0". Use this name for the directory too. If this iteration uses new or modified eval prompts, create these files for each new eval directory — don't assume they carry over from previous iterations. - -```json -{ - "eval_id": 0, - "eval_name": "descriptive-name-here", - "prompt": "The user's task prompt", - "assertions": [] -} -``` - -### Step 2: While runs are in progress, draft assertions - -Don't just wait for the runs to finish — you can use this time productively. Draft quantitative assertions for each test case and explain them to the user. If assertions already exist in `evals/evals.json`, review them and explain what they check. - -Good assertions are objectively verifiable and have descriptive names — they should read clearly in the benchmark viewer so someone glancing at the results immediately understands what each one checks. Subjective skills (writing style, design quality) are better evaluated qualitatively — don't force assertions onto things that need human judgment. - -Update the `eval_metadata.json` files and `evals/evals.json` with the assertions once drafted. Also explain to the user what they'll see in the viewer — both the qualitative outputs and the quantitative benchmark. - -### Step 3: As runs complete, capture timing data - -When each subagent task completes, you receive a notification containing `total_tokens` and `duration_ms`. Save this data immediately to `timing.json` in the run directory: - -```json -{ - "total_tokens": 84852, - "duration_ms": 23332, - "total_duration_seconds": 23.3 -} -``` - -This is the only opportunity to capture this data — it comes through the task notification and isn't persisted elsewhere. Process each notification as it arrives rather than trying to batch them. - -### Step 4: Grade, aggregate, and launch the viewer - -Once all runs are done: - -1. **Grade each run** — spawn a grader subagent (or grade inline) that reads `agents/grader.md` and evaluates each assertion against the outputs. Save results to `grading.json` in each run directory. The grading.json expectations array must use the fields `text`, `passed`, and `evidence` (not `name`/`met`/`details` or other variants) — the viewer depends on these exact field names. For assertions that can be checked programmatically, write and run a script rather than eyeballing it — scripts are faster, more reliable, and can be reused across iterations. - -2. **Aggregate into benchmark** — run the aggregation script from the skill-creator directory: - ```bash - python -m scripts.aggregate_benchmark /iteration-N --skill-name - ``` - This produces `benchmark.json` and `benchmark.md` with pass_rate, time, and tokens for each configuration, with mean ± stddev and the delta. If generating benchmark.json manually, see `references/schemas.md` for the exact schema the viewer expects. -Put each with_skill version before its baseline counterpart. - -3. **Do an analyst pass** — read the benchmark data and surface patterns the aggregate stats might hide. See `agents/analyzer.md` (the "Analyzing Benchmark Results" section) for what to look for — things like assertions that always pass regardless of skill (non-discriminating), high-variance evals (possibly flaky), and time/token tradeoffs. - -4. **Launch the viewer** with both qualitative outputs and quantitative data: - ```bash - nohup python /eval-viewer/generate_review.py \ - /iteration-N \ - --skill-name "my-skill" \ - --benchmark /iteration-N/benchmark.json \ - > /dev/null 2>&1 & - VIEWER_PID=$! - ``` - For iteration 2+, also pass `--previous-workspace /iteration-`. - - **Cowork / headless environments:** If `webbrowser.open()` is not available or the environment has no display, use `--static ` to write a standalone HTML file instead of starting a server. Feedback will be downloaded as a `feedback.json` file when the user clicks "Submit All Reviews". After download, copy `feedback.json` into the workspace directory for the next iteration to pick up. - -Note: please use generate_review.py to create the viewer; there's no need to write custom HTML. - -5. **Tell the user** something like: "I've opened the results in your browser. There are two tabs — 'Outputs' lets you click through each test case and leave feedback, 'Benchmark' shows the quantitative comparison. When you're done, come back here and let me know." - -### What the user sees in the viewer - -The "Outputs" tab shows one test case at a time: -- **Prompt**: the task that was given -- **Output**: the files the skill produced, rendered inline where possible -- **Previous Output** (iteration 2+): collapsed section showing last iteration's output -- **Formal Grades** (if grading was run): collapsed section showing assertion pass/fail -- **Feedback**: a textbox that auto-saves as they type -- **Previous Feedback** (iteration 2+): their comments from last time, shown below the textbox - -The "Benchmark" tab shows the stats summary: pass rates, timing, and token usage for each configuration, with per-eval breakdowns and analyst observations. - -Navigation is via prev/next buttons or arrow keys. When done, they click "Submit All Reviews" which saves all feedback to `feedback.json`. - -### Step 5: Read the feedback - -When the user tells you they're done, read `feedback.json`: - -```json -{ - "reviews": [ - {"run_id": "eval-0-with_skill", "feedback": "the chart is missing axis labels", "timestamp": "..."}, - {"run_id": "eval-1-with_skill", "feedback": "", "timestamp": "..."}, - {"run_id": "eval-2-with_skill", "feedback": "perfect, love this", "timestamp": "..."} - ], - "status": "complete" -} -``` - -Empty feedback means the user thought it was fine. Focus your improvements on the test cases where the user had specific complaints. - -Kill the viewer server when you're done with it: - -```bash -kill $VIEWER_PID 2>/dev/null -``` - ---- - -## Improving the skill - -This is the heart of the loop. You've run the test cases, the user has reviewed the results, and now you need to make the skill better based on their feedback. - -### How to think about improvements - -1. **Generalize from the feedback.** The big picture thing that's happening here is that we're trying to create skills that can be used a million times (maybe literally, maybe even more who knows) across many different prompts. Here you and the user are iterating on only a few examples over and over again because it helps move faster. The user knows these examples in and out and it's quick for them to assess new outputs. But if the skill you and the user are codeveloping works only for those examples, it's useless. Rather than put in fiddly overfitty changes, or oppressively constrictive MUSTs, if there's some stubborn issue, you might try branching out and using different metaphors, or recommending different patterns of working. It's relatively cheap to try and maybe you'll land on something great. - -2. **Keep the prompt lean.** Remove things that aren't pulling their weight. Make sure to read the transcripts, not just the final outputs — if it looks like the skill is making the model waste a bunch of time doing things that are unproductive, you can try getting rid of the parts of the skill that are making it do that and seeing what happens. - -3. **Explain the why.** Try hard to explain the **why** behind everything you're asking the model to do. Today's LLMs are *smart*. They have good theory of mind and when given a good harness can go beyond rote instructions and really make things happen. Even if the feedback from the user is terse or frustrated, try to actually understand the task and why the user is writing what they wrote, and what they actually wrote, and then transmit this understanding into the instructions. If you find yourself writing ALWAYS or NEVER in all caps, or using super rigid structures, that's a yellow flag — if possible, reframe and explain the reasoning so that the model understands why the thing you're asking for is important. That's a more humane, powerful, and effective approach. - -4. **Look for repeated work across test cases.** Read the transcripts from the test runs and notice if the subagents all independently wrote similar helper scripts or took the same multi-step approach to something. If all 3 test cases resulted in the subagent writing a `create_docx.py` or a `build_chart.py`, that's a strong signal the skill should bundle that script. Write it once, put it in `scripts/`, and tell the skill to use it. This saves every future invocation from reinventing the wheel. - -This task is pretty important (we are trying to create billions a year in economic value here!) and your thinking time is not the blocker; take your time and really mull things over. I'd suggest writing a draft revision and then looking at it anew and making improvements. Really do your best to get into the head of the user and understand what they want and need. - -### The iteration loop - -After improving the skill: - -1. Apply your improvements to the skill -2. Rerun all test cases into a new `iteration-/` directory, including baseline runs. If you're creating a new skill, the baseline is always `without_skill` (no skill) — that stays the same across iterations. If you're improving an existing skill, use your judgment on what makes sense as the baseline: the original version the user came in with, or the previous iteration. -3. Launch the reviewer with `--previous-workspace` pointing at the previous iteration -4. Wait for the user to review and tell you they're done -5. Read the new feedback, improve again, repeat - -Keep going until: -- The user says they're happy -- The feedback is all empty (everything looks good) -- You're not making meaningful progress - ---- - -## Advanced: Blind comparison - -For situations where you want a more rigorous comparison between two versions of a skill (e.g., the user asks "is the new version actually better?"), there's a blind comparison system. Read `agents/comparator.md` and `agents/analyzer.md` for the details. The basic idea is: give two outputs to an independent agent without telling it which is which, and let it judge quality. Then analyze why the winner won. - -This is optional, requires subagents, and most users won't need it. The human review loop is usually sufficient. - ---- - -## Description Optimization - -The description field in SKILL.md frontmatter is the primary mechanism that determines whether Claude invokes a skill. After creating or improving a skill, offer to optimize the description for better triggering accuracy. - -### Step 1: Generate trigger eval queries - -Create 20 eval queries — a mix of should-trigger and should-not-trigger. Save as JSON: - -```json -[ - {"query": "the user prompt", "should_trigger": true}, - {"query": "another prompt", "should_trigger": false} -] -``` - -The queries must be realistic and something a Claude Code or Claude.ai user would actually type. Not abstract requests, but requests that are concrete and specific and have a good amount of detail. For instance, file paths, personal context about the user's job or situation, column names and values, company names, URLs. A little bit of backstory. Some might be in lowercase or contain abbreviations or typos or casual speech. Use a mix of different lengths, and focus on edge cases rather than making them clear-cut (the user will get a chance to sign off on them). - -Bad: `"Format this data"`, `"Extract text from PDF"`, `"Create a chart"` - -Good: `"ok so my boss just sent me this xlsx file (its in my downloads, called something like 'Q4 sales final FINAL v2.xlsx') and she wants me to add a column that shows the profit margin as a percentage. The revenue is in column C and costs are in column D i think"` - -For the **should-trigger** queries (8-10), think about coverage. You want different phrasings of the same intent — some formal, some casual. Include cases where the user doesn't explicitly name the skill or file type but clearly needs it. Throw in some uncommon use cases and cases where this skill competes with another but should win. - -For the **should-not-trigger** queries (8-10), the most valuable ones are the near-misses — queries that share keywords or concepts with the skill but actually need something different. Think adjacent domains, ambiguous phrasing where a naive keyword match would trigger but shouldn't, and cases where the query touches on something the skill does but in a context where another tool is more appropriate. - -The key thing to avoid: don't make should-not-trigger queries obviously irrelevant. "Write a fibonacci function" as a negative test for a PDF skill is too easy — it doesn't test anything. The negative cases should be genuinely tricky. - -### Step 2: Review with user - -Present the eval set to the user for review using the HTML template: - -1. Read the template from `assets/eval_review.html` -2. Replace the placeholders: - - `__EVAL_DATA_PLACEHOLDER__` → the JSON array of eval items (no quotes around it — it's a JS variable assignment) - - `__SKILL_NAME_PLACEHOLDER__` → the skill's name - - `__SKILL_DESCRIPTION_PLACEHOLDER__` → the skill's current description -3. Write to a temp file (e.g., `/tmp/eval_review_.html`) and open it: `open /tmp/eval_review_.html` -4. The user can edit queries, toggle should-trigger, add/remove entries, then click "Export Eval Set" -5. The file downloads to `~/Downloads/eval_set.json` — check the Downloads folder for the most recent version in case there are multiple (e.g., `eval_set (1).json`) - -This step matters — bad eval queries lead to bad descriptions. - -### Step 3: Run the optimization loop - -Tell the user: "This will take some time — I'll run the optimization loop in the background and check on it periodically." - -Save the eval set to the workspace, then run in the background: - -```bash -python -m scripts.run_loop \ - --eval-set \ - --skill-path \ - --model \ - --max-iterations 5 \ - --verbose -``` - -Use the model ID from your system prompt (the one powering the current session) so the triggering test matches what the user actually experiences. - -While it runs, periodically tail the output to give the user updates on which iteration it's on and what the scores look like. - -This handles the full optimization loop automatically. It splits the eval set into 60% train and 40% held-out test, evaluates the current description (running each query 3 times to get a reliable trigger rate), then calls Claude with extended thinking to propose improvements based on what failed. It re-evaluates each new description on both train and test, iterating up to 5 times. When it's done, it opens an HTML report in the browser showing the results per iteration and returns JSON with `best_description` — selected by test score rather than train score to avoid overfitting. - -### How skill triggering works - -Understanding the triggering mechanism helps design better eval queries. Skills appear in Claude's `available_skills` list with their name + description, and Claude decides whether to consult a skill based on that description. The important thing to know is that Claude only consults skills for tasks it can't easily handle on its own — simple, one-step queries like "read this PDF" may not trigger a skill even if the description matches perfectly, because Claude can handle them directly with basic tools. Complex, multi-step, or specialized queries reliably trigger skills when the description matches. - -This means your eval queries should be substantive enough that Claude would actually benefit from consulting a skill. Simple queries like "read file X" are poor test cases — they won't trigger skills regardless of description quality. - -### Step 4: Apply the result - -Take `best_description` from the JSON output and update the skill's SKILL.md frontmatter. Show the user before/after and report the scores. - ---- - -### Package and Present (only if `present_files` tool is available) - -Check whether you have access to the `present_files` tool. If you don't, skip this step. If you do, package the skill and present the .skill file to the user: - -```bash -python -m scripts.package_skill -``` - -After packaging, direct the user to the resulting `.skill` file path so they can install it. - ---- - -## Claude.ai-specific instructions - -In Claude.ai, the core workflow is the same (draft → test → review → improve → repeat), but because Claude.ai doesn't have subagents, some mechanics change. Here's what to adapt: - -**Running test cases**: No subagents means no parallel execution. For each test case, read the skill's SKILL.md, then follow its instructions to accomplish the test prompt yourself. Do them one at a time. This is less rigorous than independent subagents (you wrote the skill and you're also running it, so you have full context), but it's a useful sanity check — and the human review step compensates. Skip the baseline runs — just use the skill to complete the task as requested. - -**Reviewing results**: If you can't open a browser (e.g., Claude.ai's VM has no display, or you're on a remote server), skip the browser reviewer entirely. Instead, present results directly in the conversation. For each test case, show the prompt and the output. If the output is a file the user needs to see (like a .docx or .xlsx), save it to the filesystem and tell them where it is so they can download and inspect it. Ask for feedback inline: "How does this look? Anything you'd change?" - -**Benchmarking**: Skip the quantitative benchmarking — it relies on baseline comparisons which aren't meaningful without subagents. Focus on qualitative feedback from the user. - -**The iteration loop**: Same as before — improve the skill, rerun the test cases, ask for feedback — just without the browser reviewer in the middle. You can still organize results into iteration directories on the filesystem if you have one. - -**Description optimization**: This section requires the `claude` CLI tool (specifically `claude -p`) which is only available in Claude Code. Skip it if you're on Claude.ai. - -**Blind comparison**: Requires subagents. Skip it. - -**Packaging**: The `package_skill.py` script works anywhere with Python and a filesystem. On Claude.ai, you can run it and the user can download the resulting `.skill` file. - ---- - -## Cowork-Specific Instructions - -If you're in Cowork, the main things to know are: - -- You have subagents, so the main workflow (spawn test cases in parallel, run baselines, grade, etc.) all works. (However, if you run into severe problems with timeouts, it's OK to run the test prompts in series rather than parallel.) -- You don't have a browser or display, so when generating the eval viewer, use `--static ` to write a standalone HTML file instead of starting a server. Then proffer a link that the user can click to open the HTML in their browser. -- For whatever reason, the Cowork setup seems to disincline Claude from generating the eval viewer after running the tests, so just to reiterate: whether you're in Cowork or in Claude Code, after running tests, you should always generate the eval viewer for the human to look at examples before revising the skill yourself and trying to make corrections, using `generate_review.py` (not writing your own boutique html code). Sorry in advance but I'm gonna go all caps here: GENERATE THE EVAL VIEWER *BEFORE* evaluating inputs yourself. You want to get them in front of the human ASAP! -- Feedback works differently: since there's no running server, the viewer's "Submit All Reviews" button will download `feedback.json` as a file. You can then read it from there (you may have to request access first). -- Packaging works — `package_skill.py` just needs Python and a filesystem. -- Description optimization (`run_loop.py` / `run_eval.py`) should work in Cowork just fine since it uses `claude -p` via subprocess, not a browser, but please save it until you've fully finished making the skill and the user agrees it's in good shape. - ---- - -## Reference files - -The agents/ directory contains instructions for specialized subagents. Read them when you need to spawn the relevant subagent. - -- `agents/grader.md` — How to evaluate assertions against outputs -- `agents/comparator.md` — How to do blind A/B comparison between two outputs -- `agents/analyzer.md` — How to analyze why one version beat another - -The references/ directory has additional documentation: -- `references/schemas.md` — JSON structures for evals.json, grading.json, etc. - ---- - -Repeating one more time the core loop here for emphasis: - -- Figure out what the skill is about -- Draft or edit the skill -- Run claude-with-access-to-the-skill on test prompts -- With the user, evaluate the outputs: - - Create benchmark.json and run `eval-viewer/generate_review.py` to help the user review them - - Run quantitative evals -- Repeat until you and the user are satisfied -- Package the final skill and return it to the user. - -Please add steps to your TodoList, if you have such a thing, to make sure you don't forget. If you're in Cowork, please specifically put "Create evals JSON and run `eval-viewer/generate_review.py` so human can review test cases" in your TodoList to make sure it happens. - -Good luck! diff --git a/.skills/skill-creator/agents/analyzer.md b/.skills/skill-creator/agents/analyzer.md deleted file mode 100644 index 14e41d6068..0000000000 --- a/.skills/skill-creator/agents/analyzer.md +++ /dev/null @@ -1,274 +0,0 @@ -# Post-hoc Analyzer Agent - -Analyze blind comparison results to understand WHY the winner won and generate improvement suggestions. - -## Role - -After the blind comparator determines a winner, the Post-hoc Analyzer "unblids" the results by examining the skills and transcripts. The goal is to extract actionable insights: what made the winner better, and how can the loser be improved? - -## Inputs - -You receive these parameters in your prompt: - -- **winner**: "A" or "B" (from blind comparison) -- **winner_skill_path**: Path to the skill that produced the winning output -- **winner_transcript_path**: Path to the execution transcript for the winner -- **loser_skill_path**: Path to the skill that produced the losing output -- **loser_transcript_path**: Path to the execution transcript for the loser -- **comparison_result_path**: Path to the blind comparator's output JSON -- **output_path**: Where to save the analysis results - -## Process - -### Step 1: Read Comparison Result - -1. Read the blind comparator's output at comparison_result_path -2. Note the winning side (A or B), the reasoning, and any scores -3. Understand what the comparator valued in the winning output - -### Step 2: Read Both Skills - -1. Read the winner skill's SKILL.md and key referenced files -2. Read the loser skill's SKILL.md and key referenced files -3. Identify structural differences: - - Instructions clarity and specificity - - Script/tool usage patterns - - Example coverage - - Edge case handling - -### Step 3: Read Both Transcripts - -1. Read the winner's transcript -2. Read the loser's transcript -3. Compare execution patterns: - - How closely did each follow their skill's instructions? - - What tools were used differently? - - Where did the loser diverge from optimal behavior? - - Did either encounter errors or make recovery attempts? - -### Step 4: Analyze Instruction Following - -For each transcript, evaluate: -- Did the agent follow the skill's explicit instructions? -- Did the agent use the skill's provided tools/scripts? -- Were there missed opportunities to leverage skill content? -- Did the agent add unnecessary steps not in the skill? - -Score instruction following 1-10 and note specific issues. - -### Step 5: Identify Winner Strengths - -Determine what made the winner better: -- Clearer instructions that led to better behavior? -- Better scripts/tools that produced better output? -- More comprehensive examples that guided edge cases? -- Better error handling guidance? - -Be specific. Quote from skills/transcripts where relevant. - -### Step 6: Identify Loser Weaknesses - -Determine what held the loser back: -- Ambiguous instructions that led to suboptimal choices? -- Missing tools/scripts that forced workarounds? -- Gaps in edge case coverage? -- Poor error handling that caused failures? - -### Step 7: Generate Improvement Suggestions - -Based on the analysis, produce actionable suggestions for improving the loser skill: -- Specific instruction changes to make -- Tools/scripts to add or modify -- Examples to include -- Edge cases to address - -Prioritize by impact. Focus on changes that would have changed the outcome. - -### Step 8: Write Analysis Results - -Save structured analysis to `{output_path}`. - -## Output Format - -Write a JSON file with this structure: - -```json -{ - "comparison_summary": { - "winner": "A", - "winner_skill": "path/to/winner/skill", - "loser_skill": "path/to/loser/skill", - "comparator_reasoning": "Brief summary of why comparator chose winner" - }, - "winner_strengths": [ - "Clear step-by-step instructions for handling multi-page documents", - "Included validation script that caught formatting errors", - "Explicit guidance on fallback behavior when OCR fails" - ], - "loser_weaknesses": [ - "Vague instruction 'process the document appropriately' led to inconsistent behavior", - "No script for validation, agent had to improvise and made errors", - "No guidance on OCR failure, agent gave up instead of trying alternatives" - ], - "instruction_following": { - "winner": { - "score": 9, - "issues": [ - "Minor: skipped optional logging step" - ] - }, - "loser": { - "score": 6, - "issues": [ - "Did not use the skill's formatting template", - "Invented own approach instead of following step 3", - "Missed the 'always validate output' instruction" - ] - } - }, - "improvement_suggestions": [ - { - "priority": "high", - "category": "instructions", - "suggestion": "Replace 'process the document appropriately' with explicit steps: 1) Extract text, 2) Identify sections, 3) Format per template", - "expected_impact": "Would eliminate ambiguity that caused inconsistent behavior" - }, - { - "priority": "high", - "category": "tools", - "suggestion": "Add validate_output.py script similar to winner skill's validation approach", - "expected_impact": "Would catch formatting errors before final output" - }, - { - "priority": "medium", - "category": "error_handling", - "suggestion": "Add fallback instructions: 'If OCR fails, try: 1) different resolution, 2) image preprocessing, 3) manual extraction'", - "expected_impact": "Would prevent early failure on difficult documents" - } - ], - "transcript_insights": { - "winner_execution_pattern": "Read skill -> Followed 5-step process -> Used validation script -> Fixed 2 issues -> Produced output", - "loser_execution_pattern": "Read skill -> Unclear on approach -> Tried 3 different methods -> No validation -> Output had errors" - } -} -``` - -## Guidelines - -- **Be specific**: Quote from skills and transcripts, don't just say "instructions were unclear" -- **Be actionable**: Suggestions should be concrete changes, not vague advice -- **Focus on skill improvements**: The goal is to improve the losing skill, not critique the agent -- **Prioritize by impact**: Which changes would most likely have changed the outcome? -- **Consider causation**: Did the skill weakness actually cause the worse output, or is it incidental? -- **Stay objective**: Analyze what happened, don't editorialize -- **Think about generalization**: Would this improvement help on other evals too? - -## Categories for Suggestions - -Use these categories to organize improvement suggestions: - -| Category | Description | -|----------|-------------| -| `instructions` | Changes to the skill's prose instructions | -| `tools` | Scripts, templates, or utilities to add/modify | -| `examples` | Example inputs/outputs to include | -| `error_handling` | Guidance for handling failures | -| `structure` | Reorganization of skill content | -| `references` | External docs or resources to add | - -## Priority Levels - -- **high**: Would likely change the outcome of this comparison -- **medium**: Would improve quality but may not change win/loss -- **low**: Nice to have, marginal improvement - ---- - -# Analyzing Benchmark Results - -When analyzing benchmark results, the analyzer's purpose is to **surface patterns and anomalies** across multiple runs, not suggest skill improvements. - -## Role - -Review all benchmark run results and generate freeform notes that help the user understand skill performance. Focus on patterns that wouldn't be visible from aggregate metrics alone. - -## Inputs - -You receive these parameters in your prompt: - -- **benchmark_data_path**: Path to the in-progress benchmark.json with all run results -- **skill_path**: Path to the skill being benchmarked -- **output_path**: Where to save the notes (as JSON array of strings) - -## Process - -### Step 1: Read Benchmark Data - -1. Read the benchmark.json containing all run results -2. Note the configurations tested (with_skill, without_skill) -3. Understand the run_summary aggregates already calculated - -### Step 2: Analyze Per-Assertion Patterns - -For each expectation across all runs: -- Does it **always pass** in both configurations? (may not differentiate skill value) -- Does it **always fail** in both configurations? (may be broken or beyond capability) -- Does it **always pass with skill but fail without**? (skill clearly adds value here) -- Does it **always fail with skill but pass without**? (skill may be hurting) -- Is it **highly variable**? (flaky expectation or non-deterministic behavior) - -### Step 3: Analyze Cross-Eval Patterns - -Look for patterns across evals: -- Are certain eval types consistently harder/easier? -- Do some evals show high variance while others are stable? -- Are there surprising results that contradict expectations? - -### Step 4: Analyze Metrics Patterns - -Look at time_seconds, tokens, tool_calls: -- Does the skill significantly increase execution time? -- Is there high variance in resource usage? -- Are there outlier runs that skew the aggregates? - -### Step 5: Generate Notes - -Write freeform observations as a list of strings. Each note should: -- State a specific observation -- Be grounded in the data (not speculation) -- Help the user understand something the aggregate metrics don't show - -Examples: -- "Assertion 'Output is a PDF file' passes 100% in both configurations - may not differentiate skill value" -- "Eval 3 shows high variance (50% ± 40%) - run 2 had an unusual failure that may be flaky" -- "Without-skill runs consistently fail on table extraction expectations (0% pass rate)" -- "Skill adds 13s average execution time but improves pass rate by 50%" -- "Token usage is 80% higher with skill, primarily due to script output parsing" -- "All 3 without-skill runs for eval 1 produced empty output" - -### Step 6: Write Notes - -Save notes to `{output_path}` as a JSON array of strings: - -```json -[ - "Assertion 'Output is a PDF file' passes 100% in both configurations - may not differentiate skill value", - "Eval 3 shows high variance (50% ± 40%) - run 2 had an unusual failure", - "Without-skill runs consistently fail on table extraction expectations", - "Skill adds 13s average execution time but improves pass rate by 50%" -] -``` - -## Guidelines - -**DO:** -- Report what you observe in the data -- Be specific about which evals, expectations, or runs you're referring to -- Note patterns that aggregate metrics would hide -- Provide context that helps interpret the numbers - -**DO NOT:** -- Suggest improvements to the skill (that's for the improvement step, not benchmarking) -- Make subjective quality judgments ("the output was good/bad") -- Speculate about causes without evidence -- Repeat information already in the run_summary aggregates diff --git a/.skills/skill-creator/agents/comparator.md b/.skills/skill-creator/agents/comparator.md deleted file mode 100644 index 80e00eb45d..0000000000 --- a/.skills/skill-creator/agents/comparator.md +++ /dev/null @@ -1,202 +0,0 @@ -# Blind Comparator Agent - -Compare two outputs WITHOUT knowing which skill produced them. - -## Role - -The Blind Comparator judges which output better accomplishes the eval task. You receive two outputs labeled A and B, but you do NOT know which skill produced which. This prevents bias toward a particular skill or approach. - -Your judgment is based purely on output quality and task completion. - -## Inputs - -You receive these parameters in your prompt: - -- **output_a_path**: Path to the first output file or directory -- **output_b_path**: Path to the second output file or directory -- **eval_prompt**: The original task/prompt that was executed -- **expectations**: List of expectations to check (optional - may be empty) - -## Process - -### Step 1: Read Both Outputs - -1. Examine output A (file or directory) -2. Examine output B (file or directory) -3. Note the type, structure, and content of each -4. If outputs are directories, examine all relevant files inside - -### Step 2: Understand the Task - -1. Read the eval_prompt carefully -2. Identify what the task requires: - - What should be produced? - - What qualities matter (accuracy, completeness, format)? - - What would distinguish a good output from a poor one? - -### Step 3: Generate Evaluation Rubric - -Based on the task, generate a rubric with two dimensions: - -**Content Rubric** (what the output contains): -| Criterion | 1 (Poor) | 3 (Acceptable) | 5 (Excellent) | -|-----------|----------|----------------|---------------| -| Correctness | Major errors | Minor errors | Fully correct | -| Completeness | Missing key elements | Mostly complete | All elements present | -| Accuracy | Significant inaccuracies | Minor inaccuracies | Accurate throughout | - -**Structure Rubric** (how the output is organized): -| Criterion | 1 (Poor) | 3 (Acceptable) | 5 (Excellent) | -|-----------|----------|----------------|---------------| -| Organization | Disorganized | Reasonably organized | Clear, logical structure | -| Formatting | Inconsistent/broken | Mostly consistent | Professional, polished | -| Usability | Difficult to use | Usable with effort | Easy to use | - -Adapt criteria to the specific task. For example: -- PDF form → "Field alignment", "Text readability", "Data placement" -- Document → "Section structure", "Heading hierarchy", "Paragraph flow" -- Data output → "Schema correctness", "Data types", "Completeness" - -### Step 4: Evaluate Each Output Against the Rubric - -For each output (A and B): - -1. **Score each criterion** on the rubric (1-5 scale) -2. **Calculate dimension totals**: Content score, Structure score -3. **Calculate overall score**: Average of dimension scores, scaled to 1-10 - -### Step 5: Check Assertions (if provided) - -If expectations are provided: - -1. Check each expectation against output A -2. Check each expectation against output B -3. Count pass rates for each output -4. Use expectation scores as secondary evidence (not the primary decision factor) - -### Step 6: Determine the Winner - -Compare A and B based on (in priority order): - -1. **Primary**: Overall rubric score (content + structure) -2. **Secondary**: Assertion pass rates (if applicable) -3. **Tiebreaker**: If truly equal, declare a TIE - -Be decisive - ties should be rare. One output is usually better, even if marginally. - -### Step 7: Write Comparison Results - -Save results to a JSON file at the path specified (or `comparison.json` if not specified). - -## Output Format - -Write a JSON file with this structure: - -```json -{ - "winner": "A", - "reasoning": "Output A provides a complete solution with proper formatting and all required fields. Output B is missing the date field and has formatting inconsistencies.", - "rubric": { - "A": { - "content": { - "correctness": 5, - "completeness": 5, - "accuracy": 4 - }, - "structure": { - "organization": 4, - "formatting": 5, - "usability": 4 - }, - "content_score": 4.7, - "structure_score": 4.3, - "overall_score": 9.0 - }, - "B": { - "content": { - "correctness": 3, - "completeness": 2, - "accuracy": 3 - }, - "structure": { - "organization": 3, - "formatting": 2, - "usability": 3 - }, - "content_score": 2.7, - "structure_score": 2.7, - "overall_score": 5.4 - } - }, - "output_quality": { - "A": { - "score": 9, - "strengths": ["Complete solution", "Well-formatted", "All fields present"], - "weaknesses": ["Minor style inconsistency in header"] - }, - "B": { - "score": 5, - "strengths": ["Readable output", "Correct basic structure"], - "weaknesses": ["Missing date field", "Formatting inconsistencies", "Partial data extraction"] - } - }, - "expectation_results": { - "A": { - "passed": 4, - "total": 5, - "pass_rate": 0.80, - "details": [ - {"text": "Output includes name", "passed": true}, - {"text": "Output includes date", "passed": true}, - {"text": "Format is PDF", "passed": true}, - {"text": "Contains signature", "passed": false}, - {"text": "Readable text", "passed": true} - ] - }, - "B": { - "passed": 3, - "total": 5, - "pass_rate": 0.60, - "details": [ - {"text": "Output includes name", "passed": true}, - {"text": "Output includes date", "passed": false}, - {"text": "Format is PDF", "passed": true}, - {"text": "Contains signature", "passed": false}, - {"text": "Readable text", "passed": true} - ] - } - } -} -``` - -If no expectations were provided, omit the `expectation_results` field entirely. - -## Field Descriptions - -- **winner**: "A", "B", or "TIE" -- **reasoning**: Clear explanation of why the winner was chosen (or why it's a tie) -- **rubric**: Structured rubric evaluation for each output - - **content**: Scores for content criteria (correctness, completeness, accuracy) - - **structure**: Scores for structure criteria (organization, formatting, usability) - - **content_score**: Average of content criteria (1-5) - - **structure_score**: Average of structure criteria (1-5) - - **overall_score**: Combined score scaled to 1-10 -- **output_quality**: Summary quality assessment - - **score**: 1-10 rating (should match rubric overall_score) - - **strengths**: List of positive aspects - - **weaknesses**: List of issues or shortcomings -- **expectation_results**: (Only if expectations provided) - - **passed**: Number of expectations that passed - - **total**: Total number of expectations - - **pass_rate**: Fraction passed (0.0 to 1.0) - - **details**: Individual expectation results - -## Guidelines - -- **Stay blind**: DO NOT try to infer which skill produced which output. Judge purely on output quality. -- **Be specific**: Cite specific examples when explaining strengths and weaknesses. -- **Be decisive**: Choose a winner unless outputs are genuinely equivalent. -- **Output quality first**: Assertion scores are secondary to overall task completion. -- **Be objective**: Don't favor outputs based on style preferences; focus on correctness and completeness. -- **Explain your reasoning**: The reasoning field should make it clear why you chose the winner. -- **Handle edge cases**: If both outputs fail, pick the one that fails less badly. If both are excellent, pick the one that's marginally better. diff --git a/.skills/skill-creator/agents/grader.md b/.skills/skill-creator/agents/grader.md deleted file mode 100644 index 558ab05c0a..0000000000 --- a/.skills/skill-creator/agents/grader.md +++ /dev/null @@ -1,223 +0,0 @@ -# Grader Agent - -Evaluate expectations against an execution transcript and outputs. - -## Role - -The Grader reviews a transcript and output files, then determines whether each expectation passes or fails. Provide clear evidence for each judgment. - -You have two jobs: grade the outputs, and critique the evals themselves. A passing grade on a weak assertion is worse than useless — it creates false confidence. When you notice an assertion that's trivially satisfied, or an important outcome that no assertion checks, say so. - -## Inputs - -You receive these parameters in your prompt: - -- **expectations**: List of expectations to evaluate (strings) -- **transcript_path**: Path to the execution transcript (markdown file) -- **outputs_dir**: Directory containing output files from execution - -## Process - -### Step 1: Read the Transcript - -1. Read the transcript file completely -2. Note the eval prompt, execution steps, and final result -3. Identify any issues or errors documented - -### Step 2: Examine Output Files - -1. List files in outputs_dir -2. Read/examine each file relevant to the expectations. If outputs aren't plain text, use the inspection tools provided in your prompt — don't rely solely on what the transcript says the executor produced. -3. Note contents, structure, and quality - -### Step 3: Evaluate Each Assertion - -For each expectation: - -1. **Search for evidence** in the transcript and outputs -2. **Determine verdict**: - - **PASS**: Clear evidence the expectation is true AND the evidence reflects genuine task completion, not just surface-level compliance - - **FAIL**: No evidence, or evidence contradicts the expectation, or the evidence is superficial (e.g., correct filename but empty/wrong content) -3. **Cite the evidence**: Quote the specific text or describe what you found - -### Step 4: Extract and Verify Claims - -Beyond the predefined expectations, extract implicit claims from the outputs and verify them: - -1. **Extract claims** from the transcript and outputs: - - Factual statements ("The form has 12 fields") - - Process claims ("Used pypdf to fill the form") - - Quality claims ("All fields were filled correctly") - -2. **Verify each claim**: - - **Factual claims**: Can be checked against the outputs or external sources - - **Process claims**: Can be verified from the transcript - - **Quality claims**: Evaluate whether the claim is justified - -3. **Flag unverifiable claims**: Note claims that cannot be verified with available information - -This catches issues that predefined expectations might miss. - -### Step 5: Read User Notes - -If `{outputs_dir}/user_notes.md` exists: -1. Read it and note any uncertainties or issues flagged by the executor -2. Include relevant concerns in the grading output -3. These may reveal problems even when expectations pass - -### Step 6: Critique the Evals - -After grading, consider whether the evals themselves could be improved. Only surface suggestions when there's a clear gap. - -Good suggestions test meaningful outcomes — assertions that are hard to satisfy without actually doing the work correctly. Think about what makes an assertion *discriminating*: it passes when the skill genuinely succeeds and fails when it doesn't. - -Suggestions worth raising: -- An assertion that passed but would also pass for a clearly wrong output (e.g., checking filename existence but not file content) -- An important outcome you observed — good or bad — that no assertion covers at all -- An assertion that can't actually be verified from the available outputs - -Keep the bar high. The goal is to flag things the eval author would say "good catch" about, not to nitpick every assertion. - -### Step 7: Write Grading Results - -Save results to `{outputs_dir}/../grading.json` (sibling to outputs_dir). - -## Grading Criteria - -**PASS when**: -- The transcript or outputs clearly demonstrate the expectation is true -- Specific evidence can be cited -- The evidence reflects genuine substance, not just surface compliance (e.g., a file exists AND contains correct content, not just the right filename) - -**FAIL when**: -- No evidence found for the expectation -- Evidence contradicts the expectation -- The expectation cannot be verified from available information -- The evidence is superficial — the assertion is technically satisfied but the underlying task outcome is wrong or incomplete -- The output appears to meet the assertion by coincidence rather than by actually doing the work - -**When uncertain**: The burden of proof to pass is on the expectation. - -### Step 8: Read Executor Metrics and Timing - -1. If `{outputs_dir}/metrics.json` exists, read it and include in grading output -2. If `{outputs_dir}/../timing.json` exists, read it and include timing data - -## Output Format - -Write a JSON file with this structure: - -```json -{ - "expectations": [ - { - "text": "The output includes the name 'John Smith'", - "passed": true, - "evidence": "Found in transcript Step 3: 'Extracted names: John Smith, Sarah Johnson'" - }, - { - "text": "The spreadsheet has a SUM formula in cell B10", - "passed": false, - "evidence": "No spreadsheet was created. The output was a text file." - }, - { - "text": "The assistant used the skill's OCR script", - "passed": true, - "evidence": "Transcript Step 2 shows: 'Tool: Bash - python ocr_script.py image.png'" - } - ], - "summary": { - "passed": 2, - "failed": 1, - "total": 3, - "pass_rate": 0.67 - }, - "execution_metrics": { - "tool_calls": { - "Read": 5, - "Write": 2, - "Bash": 8 - }, - "total_tool_calls": 15, - "total_steps": 6, - "errors_encountered": 0, - "output_chars": 12450, - "transcript_chars": 3200 - }, - "timing": { - "executor_duration_seconds": 165.0, - "grader_duration_seconds": 26.0, - "total_duration_seconds": 191.0 - }, - "claims": [ - { - "claim": "The form has 12 fillable fields", - "type": "factual", - "verified": true, - "evidence": "Counted 12 fields in field_info.json" - }, - { - "claim": "All required fields were populated", - "type": "quality", - "verified": false, - "evidence": "Reference section was left blank despite data being available" - } - ], - "user_notes_summary": { - "uncertainties": ["Used 2023 data, may be stale"], - "needs_review": [], - "workarounds": ["Fell back to text overlay for non-fillable fields"] - }, - "eval_feedback": { - "suggestions": [ - { - "assertion": "The output includes the name 'John Smith'", - "reason": "A hallucinated document that mentions the name would also pass — consider checking it appears as the primary contact with matching phone and email from the input" - }, - { - "reason": "No assertion checks whether the extracted phone numbers match the input — I observed incorrect numbers in the output that went uncaught" - } - ], - "overall": "Assertions check presence but not correctness. Consider adding content verification." - } -} -``` - -## Field Descriptions - -- **expectations**: Array of graded expectations - - **text**: The original expectation text - - **passed**: Boolean - true if expectation passes - - **evidence**: Specific quote or description supporting the verdict -- **summary**: Aggregate statistics - - **passed**: Count of passed expectations - - **failed**: Count of failed expectations - - **total**: Total expectations evaluated - - **pass_rate**: Fraction passed (0.0 to 1.0) -- **execution_metrics**: Copied from executor's metrics.json (if available) - - **output_chars**: Total character count of output files (proxy for tokens) - - **transcript_chars**: Character count of transcript -- **timing**: Wall clock timing from timing.json (if available) - - **executor_duration_seconds**: Time spent in executor subagent - - **total_duration_seconds**: Total elapsed time for the run -- **claims**: Extracted and verified claims from the output - - **claim**: The statement being verified - - **type**: "factual", "process", or "quality" - - **verified**: Boolean - whether the claim holds - - **evidence**: Supporting or contradicting evidence -- **user_notes_summary**: Issues flagged by the executor - - **uncertainties**: Things the executor wasn't sure about - - **needs_review**: Items requiring human attention - - **workarounds**: Places where the skill didn't work as expected -- **eval_feedback**: Improvement suggestions for the evals (only when warranted) - - **suggestions**: List of concrete suggestions, each with a `reason` and optionally an `assertion` it relates to - - **overall**: Brief assessment — can be "No suggestions, evals look solid" if nothing to flag - -## Guidelines - -- **Be objective**: Base verdicts on evidence, not assumptions -- **Be specific**: Quote the exact text that supports your verdict -- **Be thorough**: Check both transcript and output files -- **Be consistent**: Apply the same standard to each expectation -- **Explain failures**: Make it clear why evidence was insufficient -- **No partial credit**: Each expectation is pass or fail, not partial diff --git a/.skills/skill-creator/assets/eval_review.html b/.skills/skill-creator/assets/eval_review.html deleted file mode 100644 index 938ff32aed..0000000000 --- a/.skills/skill-creator/assets/eval_review.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - Eval Set Review - __SKILL_NAME_PLACEHOLDER__ - - - - - - -

Eval Set Review: __SKILL_NAME_PLACEHOLDER__

-

Current description: __SKILL_DESCRIPTION_PLACEHOLDER__

- -
- - -
- - - - - - - - - - -
QueryShould TriggerActions
- -

- - - - diff --git a/.skills/skill-creator/eval-viewer/generate_review.py b/.skills/skill-creator/eval-viewer/generate_review.py deleted file mode 100644 index 7fa5978631..0000000000 --- a/.skills/skill-creator/eval-viewer/generate_review.py +++ /dev/null @@ -1,471 +0,0 @@ -#!/usr/bin/env python3 -"""Generate and serve a review page for eval results. - -Reads the workspace directory, discovers runs (directories with outputs/), -embeds all output data into a self-contained HTML page, and serves it via -a tiny HTTP server. Feedback auto-saves to feedback.json in the workspace. - -Usage: - python generate_review.py [--port PORT] [--skill-name NAME] - python generate_review.py --previous-feedback /path/to/old/feedback.json - -No dependencies beyond the Python stdlib are required. -""" - -import argparse -import base64 -import json -import mimetypes -import os -import re -import signal -import subprocess -import sys -import time -import webbrowser -from functools import partial -from http.server import HTTPServer, BaseHTTPRequestHandler -from pathlib import Path - -# Files to exclude from output listings -METADATA_FILES = {"transcript.md", "user_notes.md", "metrics.json"} - -# Extensions we render as inline text -TEXT_EXTENSIONS = { - ".txt", ".md", ".json", ".csv", ".py", ".js", ".ts", ".tsx", ".jsx", - ".yaml", ".yml", ".xml", ".html", ".css", ".sh", ".rb", ".go", ".rs", - ".java", ".c", ".cpp", ".h", ".hpp", ".sql", ".r", ".toml", -} - -# Extensions we render as inline images -IMAGE_EXTENSIONS = {".png", ".jpg", ".jpeg", ".gif", ".svg", ".webp"} - -# MIME type overrides for common types -MIME_OVERRIDES = { - ".svg": "image/svg+xml", - ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", - ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", - ".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation", -} - - -def get_mime_type(path: Path) -> str: - ext = path.suffix.lower() - if ext in MIME_OVERRIDES: - return MIME_OVERRIDES[ext] - mime, _ = mimetypes.guess_type(str(path)) - return mime or "application/octet-stream" - - -def find_runs(workspace: Path) -> list[dict]: - """Recursively find directories that contain an outputs/ subdirectory.""" - runs: list[dict] = [] - _find_runs_recursive(workspace, workspace, runs) - runs.sort(key=lambda r: (r.get("eval_id", float("inf")), r["id"])) - return runs - - -def _find_runs_recursive(root: Path, current: Path, runs: list[dict]) -> None: - if not current.is_dir(): - return - - outputs_dir = current / "outputs" - if outputs_dir.is_dir(): - run = build_run(root, current) - if run: - runs.append(run) - return - - skip = {"node_modules", ".git", "__pycache__", "skill", "inputs"} - for child in sorted(current.iterdir()): - if child.is_dir() and child.name not in skip: - _find_runs_recursive(root, child, runs) - - -def build_run(root: Path, run_dir: Path) -> dict | None: - """Build a run dict with prompt, outputs, and grading data.""" - prompt = "" - eval_id = None - - # Try eval_metadata.json - for candidate in [run_dir / "eval_metadata.json", run_dir.parent / "eval_metadata.json"]: - if candidate.exists(): - try: - metadata = json.loads(candidate.read_text()) - prompt = metadata.get("prompt", "") - eval_id = metadata.get("eval_id") - except (json.JSONDecodeError, OSError): - pass - if prompt: - break - - # Fall back to transcript.md - if not prompt: - for candidate in [run_dir / "transcript.md", run_dir / "outputs" / "transcript.md"]: - if candidate.exists(): - try: - text = candidate.read_text() - match = re.search(r"## Eval Prompt\n\n([\s\S]*?)(?=\n##|$)", text) - if match: - prompt = match.group(1).strip() - except OSError: - pass - if prompt: - break - - if not prompt: - prompt = "(No prompt found)" - - run_id = str(run_dir.relative_to(root)).replace("/", "-").replace("\\", "-") - - # Collect output files - outputs_dir = run_dir / "outputs" - output_files: list[dict] = [] - if outputs_dir.is_dir(): - for f in sorted(outputs_dir.iterdir()): - if f.is_file() and f.name not in METADATA_FILES: - output_files.append(embed_file(f)) - - # Load grading if present - grading = None - for candidate in [run_dir / "grading.json", run_dir.parent / "grading.json"]: - if candidate.exists(): - try: - grading = json.loads(candidate.read_text()) - except (json.JSONDecodeError, OSError): - pass - if grading: - break - - return { - "id": run_id, - "prompt": prompt, - "eval_id": eval_id, - "outputs": output_files, - "grading": grading, - } - - -def embed_file(path: Path) -> dict: - """Read a file and return an embedded representation.""" - ext = path.suffix.lower() - mime = get_mime_type(path) - - if ext in TEXT_EXTENSIONS: - try: - content = path.read_text(errors="replace") - except OSError: - content = "(Error reading file)" - return { - "name": path.name, - "type": "text", - "content": content, - } - elif ext in IMAGE_EXTENSIONS: - try: - raw = path.read_bytes() - b64 = base64.b64encode(raw).decode("ascii") - except OSError: - return {"name": path.name, "type": "error", "content": "(Error reading file)"} - return { - "name": path.name, - "type": "image", - "mime": mime, - "data_uri": f"data:{mime};base64,{b64}", - } - elif ext == ".pdf": - try: - raw = path.read_bytes() - b64 = base64.b64encode(raw).decode("ascii") - except OSError: - return {"name": path.name, "type": "error", "content": "(Error reading file)"} - return { - "name": path.name, - "type": "pdf", - "data_uri": f"data:{mime};base64,{b64}", - } - elif ext == ".xlsx": - try: - raw = path.read_bytes() - b64 = base64.b64encode(raw).decode("ascii") - except OSError: - return {"name": path.name, "type": "error", "content": "(Error reading file)"} - return { - "name": path.name, - "type": "xlsx", - "data_b64": b64, - } - else: - # Binary / unknown — base64 download link - try: - raw = path.read_bytes() - b64 = base64.b64encode(raw).decode("ascii") - except OSError: - return {"name": path.name, "type": "error", "content": "(Error reading file)"} - return { - "name": path.name, - "type": "binary", - "mime": mime, - "data_uri": f"data:{mime};base64,{b64}", - } - - -def load_previous_iteration(workspace: Path) -> dict[str, dict]: - """Load previous iteration's feedback and outputs. - - Returns a map of run_id -> {"feedback": str, "outputs": list[dict]}. - """ - result: dict[str, dict] = {} - - # Load feedback - feedback_map: dict[str, str] = {} - feedback_path = workspace / "feedback.json" - if feedback_path.exists(): - try: - data = json.loads(feedback_path.read_text()) - feedback_map = { - r["run_id"]: r["feedback"] - for r in data.get("reviews", []) - if r.get("feedback", "").strip() - } - except (json.JSONDecodeError, OSError, KeyError): - pass - - # Load runs (to get outputs) - prev_runs = find_runs(workspace) - for run in prev_runs: - result[run["id"]] = { - "feedback": feedback_map.get(run["id"], ""), - "outputs": run.get("outputs", []), - } - - # Also add feedback for run_ids that had feedback but no matching run - for run_id, fb in feedback_map.items(): - if run_id not in result: - result[run_id] = {"feedback": fb, "outputs": []} - - return result - - -def generate_html( - runs: list[dict], - skill_name: str, - previous: dict[str, dict] | None = None, - benchmark: dict | None = None, -) -> str: - """Generate the complete standalone HTML page with embedded data.""" - template_path = Path(__file__).parent / "viewer.html" - template = template_path.read_text() - - # Build previous_feedback and previous_outputs maps for the template - previous_feedback: dict[str, str] = {} - previous_outputs: dict[str, list[dict]] = {} - if previous: - for run_id, data in previous.items(): - if data.get("feedback"): - previous_feedback[run_id] = data["feedback"] - if data.get("outputs"): - previous_outputs[run_id] = data["outputs"] - - embedded = { - "skill_name": skill_name, - "runs": runs, - "previous_feedback": previous_feedback, - "previous_outputs": previous_outputs, - } - if benchmark: - embedded["benchmark"] = benchmark - - data_json = json.dumps(embedded) - - return template.replace("/*__EMBEDDED_DATA__*/", f"const EMBEDDED_DATA = {data_json};") - - -# --------------------------------------------------------------------------- -# HTTP server (stdlib only, zero dependencies) -# --------------------------------------------------------------------------- - -def _kill_port(port: int) -> None: - """Kill any process listening on the given port.""" - try: - result = subprocess.run( - ["lsof", "-ti", f":{port}"], - capture_output=True, text=True, timeout=5, - ) - for pid_str in result.stdout.strip().split("\n"): - if pid_str.strip(): - try: - os.kill(int(pid_str.strip()), signal.SIGTERM) - except (ProcessLookupError, ValueError): - pass - if result.stdout.strip(): - time.sleep(0.5) - except subprocess.TimeoutExpired: - pass - except FileNotFoundError: - print("Note: lsof not found, cannot check if port is in use", file=sys.stderr) - -class ReviewHandler(BaseHTTPRequestHandler): - """Serves the review HTML and handles feedback saves. - - Regenerates the HTML on each page load so that refreshing the browser - picks up new eval outputs without restarting the server. - """ - - def __init__( - self, - workspace: Path, - skill_name: str, - feedback_path: Path, - previous: dict[str, dict], - benchmark_path: Path | None, - *args, - **kwargs, - ): - self.workspace = workspace - self.skill_name = skill_name - self.feedback_path = feedback_path - self.previous = previous - self.benchmark_path = benchmark_path - super().__init__(*args, **kwargs) - - def do_GET(self) -> None: - if self.path == "/" or self.path == "/index.html": - # Regenerate HTML on each request (re-scans workspace for new outputs) - runs = find_runs(self.workspace) - benchmark = None - if self.benchmark_path and self.benchmark_path.exists(): - try: - benchmark = json.loads(self.benchmark_path.read_text()) - except (json.JSONDecodeError, OSError): - pass - html = generate_html(runs, self.skill_name, self.previous, benchmark) - content = html.encode("utf-8") - self.send_response(200) - self.send_header("Content-Type", "text/html; charset=utf-8") - self.send_header("Content-Length", str(len(content))) - self.end_headers() - self.wfile.write(content) - elif self.path == "/api/feedback": - data = b"{}" - if self.feedback_path.exists(): - data = self.feedback_path.read_bytes() - self.send_response(200) - self.send_header("Content-Type", "application/json") - self.send_header("Content-Length", str(len(data))) - self.end_headers() - self.wfile.write(data) - else: - self.send_error(404) - - def do_POST(self) -> None: - if self.path == "/api/feedback": - length = int(self.headers.get("Content-Length", 0)) - body = self.rfile.read(length) - try: - data = json.loads(body) - if not isinstance(data, dict) or "reviews" not in data: - raise ValueError("Expected JSON object with 'reviews' key") - self.feedback_path.write_text(json.dumps(data, indent=2) + "\n") - resp = b'{"ok":true}' - self.send_response(200) - except (json.JSONDecodeError, OSError, ValueError) as e: - resp = json.dumps({"error": str(e)}).encode() - self.send_response(500) - self.send_header("Content-Type", "application/json") - self.send_header("Content-Length", str(len(resp))) - self.end_headers() - self.wfile.write(resp) - else: - self.send_error(404) - - def log_message(self, format: str, *args: object) -> None: - # Suppress request logging to keep terminal clean - pass - - -def main() -> None: - parser = argparse.ArgumentParser(description="Generate and serve eval review") - parser.add_argument("workspace", type=Path, help="Path to workspace directory") - parser.add_argument("--port", "-p", type=int, default=3117, help="Server port (default: 3117)") - parser.add_argument("--skill-name", "-n", type=str, default=None, help="Skill name for header") - parser.add_argument( - "--previous-workspace", type=Path, default=None, - help="Path to previous iteration's workspace (shows old outputs and feedback as context)", - ) - parser.add_argument( - "--benchmark", type=Path, default=None, - help="Path to benchmark.json to show in the Benchmark tab", - ) - parser.add_argument( - "--static", "-s", type=Path, default=None, - help="Write standalone HTML to this path instead of starting a server", - ) - args = parser.parse_args() - - workspace = args.workspace.resolve() - if not workspace.is_dir(): - print(f"Error: {workspace} is not a directory", file=sys.stderr) - sys.exit(1) - - runs = find_runs(workspace) - if not runs: - print(f"No runs found in {workspace}", file=sys.stderr) - sys.exit(1) - - skill_name = args.skill_name or workspace.name.replace("-workspace", "") - feedback_path = workspace / "feedback.json" - - previous: dict[str, dict] = {} - if args.previous_workspace: - previous = load_previous_iteration(args.previous_workspace.resolve()) - - benchmark_path = args.benchmark.resolve() if args.benchmark else None - benchmark = None - if benchmark_path and benchmark_path.exists(): - try: - benchmark = json.loads(benchmark_path.read_text()) - except (json.JSONDecodeError, OSError): - pass - - if args.static: - html = generate_html(runs, skill_name, previous, benchmark) - args.static.parent.mkdir(parents=True, exist_ok=True) - args.static.write_text(html) - print(f"\n Static viewer written to: {args.static}\n") - sys.exit(0) - - # Kill any existing process on the target port - port = args.port - _kill_port(port) - handler = partial(ReviewHandler, workspace, skill_name, feedback_path, previous, benchmark_path) - try: - server = HTTPServer(("127.0.0.1", port), handler) - except OSError: - # Port still in use after kill attempt — find a free one - server = HTTPServer(("127.0.0.1", 0), handler) - port = server.server_address[1] - - url = f"http://localhost:{port}" - print(f"\n Eval Viewer") - print(f" ─────────────────────────────────") - print(f" URL: {url}") - print(f" Workspace: {workspace}") - print(f" Feedback: {feedback_path}") - if previous: - print(f" Previous: {args.previous_workspace} ({len(previous)} runs)") - if benchmark_path: - print(f" Benchmark: {benchmark_path}") - print(f"\n Press Ctrl+C to stop.\n") - - webbrowser.open(url) - - try: - server.serve_forever() - except KeyboardInterrupt: - print("\nStopped.") - server.server_close() - - -if __name__ == "__main__": - main() diff --git a/.skills/skill-creator/eval-viewer/viewer.html b/.skills/skill-creator/eval-viewer/viewer.html deleted file mode 100644 index 6d8e96348a..0000000000 --- a/.skills/skill-creator/eval-viewer/viewer.html +++ /dev/null @@ -1,1325 +0,0 @@ - - - - - - Eval Review - - - - - - - -
-
-
-

Eval Review:

-
Review each output and leave feedback below. Navigate with arrow keys or buttons. When done, copy feedback and paste into Claude Code.
-
-
-
- - - - - -
-
- -
-
Prompt
-
-
-
-
- - -
-
Output
-
-
No output files found
-
-
- - - - - - - - -
-
Your Feedback
-
- - - -
-
-
- - -
- - -
-
-
No benchmark data available. Run a benchmark to see quantitative results here.
-
-
-
- - -
-
-

Review Complete

-

Your feedback has been saved. Go back to your Claude Code session and tell Claude you're done reviewing.

-
- -
-
-
- - -
- - - - diff --git a/.skills/skill-creator/references/schemas.md b/.skills/skill-creator/references/schemas.md deleted file mode 100644 index b6eeaa2d4a..0000000000 --- a/.skills/skill-creator/references/schemas.md +++ /dev/null @@ -1,430 +0,0 @@ -# JSON Schemas - -This document defines the JSON schemas used by skill-creator. - ---- - -## evals.json - -Defines the evals for a skill. Located at `evals/evals.json` within the skill directory. - -```json -{ - "skill_name": "example-skill", - "evals": [ - { - "id": 1, - "prompt": "User's example prompt", - "expected_output": "Description of expected result", - "files": ["evals/files/sample1.pdf"], - "expectations": [ - "The output includes X", - "The skill used script Y" - ] - } - ] -} -``` - -**Fields:** -- `skill_name`: Name matching the skill's frontmatter -- `evals[].id`: Unique integer identifier -- `evals[].prompt`: The task to execute -- `evals[].expected_output`: Human-readable description of success -- `evals[].files`: Optional list of input file paths (relative to skill root) -- `evals[].expectations`: List of verifiable statements - ---- - -## history.json - -Tracks version progression in Improve mode. Located at workspace root. - -```json -{ - "started_at": "2026-01-15T10:30:00Z", - "skill_name": "pdf", - "current_best": "v2", - "iterations": [ - { - "version": "v0", - "parent": null, - "expectation_pass_rate": 0.65, - "grading_result": "baseline", - "is_current_best": false - }, - { - "version": "v1", - "parent": "v0", - "expectation_pass_rate": 0.75, - "grading_result": "won", - "is_current_best": false - }, - { - "version": "v2", - "parent": "v1", - "expectation_pass_rate": 0.85, - "grading_result": "won", - "is_current_best": true - } - ] -} -``` - -**Fields:** -- `started_at`: ISO timestamp of when improvement started -- `skill_name`: Name of the skill being improved -- `current_best`: Version identifier of the best performer -- `iterations[].version`: Version identifier (v0, v1, ...) -- `iterations[].parent`: Parent version this was derived from -- `iterations[].expectation_pass_rate`: Pass rate from grading -- `iterations[].grading_result`: "baseline", "won", "lost", or "tie" -- `iterations[].is_current_best`: Whether this is the current best version - ---- - -## grading.json - -Output from the grader agent. Located at `/grading.json`. - -```json -{ - "expectations": [ - { - "text": "The output includes the name 'John Smith'", - "passed": true, - "evidence": "Found in transcript Step 3: 'Extracted names: John Smith, Sarah Johnson'" - }, - { - "text": "The spreadsheet has a SUM formula in cell B10", - "passed": false, - "evidence": "No spreadsheet was created. The output was a text file." - } - ], - "summary": { - "passed": 2, - "failed": 1, - "total": 3, - "pass_rate": 0.67 - }, - "execution_metrics": { - "tool_calls": { - "Read": 5, - "Write": 2, - "Bash": 8 - }, - "total_tool_calls": 15, - "total_steps": 6, - "errors_encountered": 0, - "output_chars": 12450, - "transcript_chars": 3200 - }, - "timing": { - "executor_duration_seconds": 165.0, - "grader_duration_seconds": 26.0, - "total_duration_seconds": 191.0 - }, - "claims": [ - { - "claim": "The form has 12 fillable fields", - "type": "factual", - "verified": true, - "evidence": "Counted 12 fields in field_info.json" - } - ], - "user_notes_summary": { - "uncertainties": ["Used 2023 data, may be stale"], - "needs_review": [], - "workarounds": ["Fell back to text overlay for non-fillable fields"] - }, - "eval_feedback": { - "suggestions": [ - { - "assertion": "The output includes the name 'John Smith'", - "reason": "A hallucinated document that mentions the name would also pass" - } - ], - "overall": "Assertions check presence but not correctness." - } -} -``` - -**Fields:** -- `expectations[]`: Graded expectations with evidence -- `summary`: Aggregate pass/fail counts -- `execution_metrics`: Tool usage and output size (from executor's metrics.json) -- `timing`: Wall clock timing (from timing.json) -- `claims`: Extracted and verified claims from the output -- `user_notes_summary`: Issues flagged by the executor -- `eval_feedback`: (optional) Improvement suggestions for the evals, only present when the grader identifies issues worth raising - ---- - -## metrics.json - -Output from the executor agent. Located at `/outputs/metrics.json`. - -```json -{ - "tool_calls": { - "Read": 5, - "Write": 2, - "Bash": 8, - "Edit": 1, - "Glob": 2, - "Grep": 0 - }, - "total_tool_calls": 18, - "total_steps": 6, - "files_created": ["filled_form.pdf", "field_values.json"], - "errors_encountered": 0, - "output_chars": 12450, - "transcript_chars": 3200 -} -``` - -**Fields:** -- `tool_calls`: Count per tool type -- `total_tool_calls`: Sum of all tool calls -- `total_steps`: Number of major execution steps -- `files_created`: List of output files created -- `errors_encountered`: Number of errors during execution -- `output_chars`: Total character count of output files -- `transcript_chars`: Character count of transcript - ---- - -## timing.json - -Wall clock timing for a run. Located at `/timing.json`. - -**How to capture:** When a subagent task completes, the task notification includes `total_tokens` and `duration_ms`. Save these immediately — they are not persisted anywhere else and cannot be recovered after the fact. - -```json -{ - "total_tokens": 84852, - "duration_ms": 23332, - "total_duration_seconds": 23.3, - "executor_start": "2026-01-15T10:30:00Z", - "executor_end": "2026-01-15T10:32:45Z", - "executor_duration_seconds": 165.0, - "grader_start": "2026-01-15T10:32:46Z", - "grader_end": "2026-01-15T10:33:12Z", - "grader_duration_seconds": 26.0 -} -``` - ---- - -## benchmark.json - -Output from Benchmark mode. Located at `benchmarks//benchmark.json`. - -```json -{ - "metadata": { - "skill_name": "pdf", - "skill_path": "/path/to/pdf", - "executor_model": "claude-sonnet-4-20250514", - "analyzer_model": "most-capable-model", - "timestamp": "2026-01-15T10:30:00Z", - "evals_run": [1, 2, 3], - "runs_per_configuration": 3 - }, - - "runs": [ - { - "eval_id": 1, - "eval_name": "Ocean", - "configuration": "with_skill", - "run_number": 1, - "result": { - "pass_rate": 0.85, - "passed": 6, - "failed": 1, - "total": 7, - "time_seconds": 42.5, - "tokens": 3800, - "tool_calls": 18, - "errors": 0 - }, - "expectations": [ - {"text": "...", "passed": true, "evidence": "..."} - ], - "notes": [ - "Used 2023 data, may be stale", - "Fell back to text overlay for non-fillable fields" - ] - } - ], - - "run_summary": { - "with_skill": { - "pass_rate": {"mean": 0.85, "stddev": 0.05, "min": 0.80, "max": 0.90}, - "time_seconds": {"mean": 45.0, "stddev": 12.0, "min": 32.0, "max": 58.0}, - "tokens": {"mean": 3800, "stddev": 400, "min": 3200, "max": 4100} - }, - "without_skill": { - "pass_rate": {"mean": 0.35, "stddev": 0.08, "min": 0.28, "max": 0.45}, - "time_seconds": {"mean": 32.0, "stddev": 8.0, "min": 24.0, "max": 42.0}, - "tokens": {"mean": 2100, "stddev": 300, "min": 1800, "max": 2500} - }, - "delta": { - "pass_rate": "+0.50", - "time_seconds": "+13.0", - "tokens": "+1700" - } - }, - - "notes": [ - "Assertion 'Output is a PDF file' passes 100% in both configurations - may not differentiate skill value", - "Eval 3 shows high variance (50% ± 40%) - may be flaky or model-dependent", - "Without-skill runs consistently fail on table extraction expectations", - "Skill adds 13s average execution time but improves pass rate by 50%" - ] -} -``` - -**Fields:** -- `metadata`: Information about the benchmark run - - `skill_name`: Name of the skill - - `timestamp`: When the benchmark was run - - `evals_run`: List of eval names or IDs - - `runs_per_configuration`: Number of runs per config (e.g. 3) -- `runs[]`: Individual run results - - `eval_id`: Numeric eval identifier - - `eval_name`: Human-readable eval name (used as section header in the viewer) - - `configuration`: Must be `"with_skill"` or `"without_skill"` (the viewer uses this exact string for grouping and color coding) - - `run_number`: Integer run number (1, 2, 3...) - - `result`: Nested object with `pass_rate`, `passed`, `total`, `time_seconds`, `tokens`, `errors` -- `run_summary`: Statistical aggregates per configuration - - `with_skill` / `without_skill`: Each contains `pass_rate`, `time_seconds`, `tokens` objects with `mean` and `stddev` fields - - `delta`: Difference strings like `"+0.50"`, `"+13.0"`, `"+1700"` -- `notes`: Freeform observations from the analyzer - -**Important:** The viewer reads these field names exactly. Using `config` instead of `configuration`, or putting `pass_rate` at the top level of a run instead of nested under `result`, will cause the viewer to show empty/zero values. Always reference this schema when generating benchmark.json manually. - ---- - -## comparison.json - -Output from blind comparator. Located at `/comparison-N.json`. - -```json -{ - "winner": "A", - "reasoning": "Output A provides a complete solution with proper formatting and all required fields. Output B is missing the date field and has formatting inconsistencies.", - "rubric": { - "A": { - "content": { - "correctness": 5, - "completeness": 5, - "accuracy": 4 - }, - "structure": { - "organization": 4, - "formatting": 5, - "usability": 4 - }, - "content_score": 4.7, - "structure_score": 4.3, - "overall_score": 9.0 - }, - "B": { - "content": { - "correctness": 3, - "completeness": 2, - "accuracy": 3 - }, - "structure": { - "organization": 3, - "formatting": 2, - "usability": 3 - }, - "content_score": 2.7, - "structure_score": 2.7, - "overall_score": 5.4 - } - }, - "output_quality": { - "A": { - "score": 9, - "strengths": ["Complete solution", "Well-formatted", "All fields present"], - "weaknesses": ["Minor style inconsistency in header"] - }, - "B": { - "score": 5, - "strengths": ["Readable output", "Correct basic structure"], - "weaknesses": ["Missing date field", "Formatting inconsistencies", "Partial data extraction"] - } - }, - "expectation_results": { - "A": { - "passed": 4, - "total": 5, - "pass_rate": 0.80, - "details": [ - {"text": "Output includes name", "passed": true} - ] - }, - "B": { - "passed": 3, - "total": 5, - "pass_rate": 0.60, - "details": [ - {"text": "Output includes name", "passed": true} - ] - } - } -} -``` - ---- - -## analysis.json - -Output from post-hoc analyzer. Located at `/analysis.json`. - -```json -{ - "comparison_summary": { - "winner": "A", - "winner_skill": "path/to/winner/skill", - "loser_skill": "path/to/loser/skill", - "comparator_reasoning": "Brief summary of why comparator chose winner" - }, - "winner_strengths": [ - "Clear step-by-step instructions for handling multi-page documents", - "Included validation script that caught formatting errors" - ], - "loser_weaknesses": [ - "Vague instruction 'process the document appropriately' led to inconsistent behavior", - "No script for validation, agent had to improvise" - ], - "instruction_following": { - "winner": { - "score": 9, - "issues": ["Minor: skipped optional logging step"] - }, - "loser": { - "score": 6, - "issues": [ - "Did not use the skill's formatting template", - "Invented own approach instead of following step 3" - ] - } - }, - "improvement_suggestions": [ - { - "priority": "high", - "category": "instructions", - "suggestion": "Replace 'process the document appropriately' with explicit steps", - "expected_impact": "Would eliminate ambiguity that caused inconsistent behavior" - } - ], - "transcript_insights": { - "winner_execution_pattern": "Read skill -> Followed 5-step process -> Used validation script", - "loser_execution_pattern": "Read skill -> Unclear on approach -> Tried 3 different methods" - } -} -``` diff --git a/.skills/skill-creator/scripts/__init__.py b/.skills/skill-creator/scripts/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/.skills/skill-creator/scripts/aggregate_benchmark.py b/.skills/skill-creator/scripts/aggregate_benchmark.py deleted file mode 100644 index 3e66e8c105..0000000000 --- a/.skills/skill-creator/scripts/aggregate_benchmark.py +++ /dev/null @@ -1,401 +0,0 @@ -#!/usr/bin/env python3 -""" -Aggregate individual run results into benchmark summary statistics. - -Reads grading.json files from run directories and produces: -- run_summary with mean, stddev, min, max for each metric -- delta between with_skill and without_skill configurations - -Usage: - python aggregate_benchmark.py - -Example: - python aggregate_benchmark.py benchmarks/2026-01-15T10-30-00/ - -The script supports two directory layouts: - - Workspace layout (from skill-creator iterations): - / - └── eval-N/ - ├── with_skill/ - │ ├── run-1/grading.json - │ └── run-2/grading.json - └── without_skill/ - ├── run-1/grading.json - └── run-2/grading.json - - Legacy layout (with runs/ subdirectory): - / - └── runs/ - └── eval-N/ - ├── with_skill/ - │ └── run-1/grading.json - └── without_skill/ - └── run-1/grading.json -""" - -import argparse -import json -import math -import sys -from datetime import datetime, timezone -from pathlib import Path - - -def calculate_stats(values: list[float]) -> dict: - """Calculate mean, stddev, min, max for a list of values.""" - if not values: - return {"mean": 0.0, "stddev": 0.0, "min": 0.0, "max": 0.0} - - n = len(values) - mean = sum(values) / n - - if n > 1: - variance = sum((x - mean) ** 2 for x in values) / (n - 1) - stddev = math.sqrt(variance) - else: - stddev = 0.0 - - return { - "mean": round(mean, 4), - "stddev": round(stddev, 4), - "min": round(min(values), 4), - "max": round(max(values), 4) - } - - -def load_run_results(benchmark_dir: Path) -> dict: - """ - Load all run results from a benchmark directory. - - Returns dict keyed by config name (e.g. "with_skill"/"without_skill", - or "new_skill"/"old_skill"), each containing a list of run results. - """ - # Support both layouts: eval dirs directly under benchmark_dir, or under runs/ - runs_dir = benchmark_dir / "runs" - if runs_dir.exists(): - search_dir = runs_dir - elif list(benchmark_dir.glob("eval-*")): - search_dir = benchmark_dir - else: - print(f"No eval directories found in {benchmark_dir} or {benchmark_dir / 'runs'}") - return {} - - results: dict[str, list] = {} - - for eval_idx, eval_dir in enumerate(sorted(search_dir.glob("eval-*"))): - metadata_path = eval_dir / "eval_metadata.json" - if metadata_path.exists(): - try: - with open(metadata_path) as mf: - eval_id = json.load(mf).get("eval_id", eval_idx) - except (json.JSONDecodeError, OSError): - eval_id = eval_idx - else: - try: - eval_id = int(eval_dir.name.split("-")[1]) - except ValueError: - eval_id = eval_idx - - # Discover config directories dynamically rather than hardcoding names - for config_dir in sorted(eval_dir.iterdir()): - if not config_dir.is_dir(): - continue - # Skip non-config directories (inputs, outputs, etc.) - if not list(config_dir.glob("run-*")): - continue - config = config_dir.name - if config not in results: - results[config] = [] - - for run_dir in sorted(config_dir.glob("run-*")): - run_number = int(run_dir.name.split("-")[1]) - grading_file = run_dir / "grading.json" - - if not grading_file.exists(): - print(f"Warning: grading.json not found in {run_dir}") - continue - - try: - with open(grading_file) as f: - grading = json.load(f) - except json.JSONDecodeError as e: - print(f"Warning: Invalid JSON in {grading_file}: {e}") - continue - - # Extract metrics - result = { - "eval_id": eval_id, - "run_number": run_number, - "pass_rate": grading.get("summary", {}).get("pass_rate", 0.0), - "passed": grading.get("summary", {}).get("passed", 0), - "failed": grading.get("summary", {}).get("failed", 0), - "total": grading.get("summary", {}).get("total", 0), - } - - # Extract timing — check grading.json first, then sibling timing.json - timing = grading.get("timing", {}) - result["time_seconds"] = timing.get("total_duration_seconds", 0.0) - timing_file = run_dir / "timing.json" - if result["time_seconds"] == 0.0 and timing_file.exists(): - try: - with open(timing_file) as tf: - timing_data = json.load(tf) - result["time_seconds"] = timing_data.get("total_duration_seconds", 0.0) - result["tokens"] = timing_data.get("total_tokens", 0) - except json.JSONDecodeError: - pass - - # Extract metrics if available - metrics = grading.get("execution_metrics", {}) - result["tool_calls"] = metrics.get("total_tool_calls", 0) - if not result.get("tokens"): - result["tokens"] = metrics.get("output_chars", 0) - result["errors"] = metrics.get("errors_encountered", 0) - - # Extract expectations — viewer requires fields: text, passed, evidence - raw_expectations = grading.get("expectations", []) - for exp in raw_expectations: - if "text" not in exp or "passed" not in exp: - print(f"Warning: expectation in {grading_file} missing required fields (text, passed, evidence): {exp}") - result["expectations"] = raw_expectations - - # Extract notes from user_notes_summary - notes_summary = grading.get("user_notes_summary", {}) - notes = [] - notes.extend(notes_summary.get("uncertainties", [])) - notes.extend(notes_summary.get("needs_review", [])) - notes.extend(notes_summary.get("workarounds", [])) - result["notes"] = notes - - results[config].append(result) - - return results - - -def aggregate_results(results: dict) -> dict: - """ - Aggregate run results into summary statistics. - - Returns run_summary with stats for each configuration and delta. - """ - run_summary = {} - configs = list(results.keys()) - - for config in configs: - runs = results.get(config, []) - - if not runs: - run_summary[config] = { - "pass_rate": {"mean": 0.0, "stddev": 0.0, "min": 0.0, "max": 0.0}, - "time_seconds": {"mean": 0.0, "stddev": 0.0, "min": 0.0, "max": 0.0}, - "tokens": {"mean": 0, "stddev": 0, "min": 0, "max": 0} - } - continue - - pass_rates = [r["pass_rate"] for r in runs] - times = [r["time_seconds"] for r in runs] - tokens = [r.get("tokens", 0) for r in runs] - - run_summary[config] = { - "pass_rate": calculate_stats(pass_rates), - "time_seconds": calculate_stats(times), - "tokens": calculate_stats(tokens) - } - - # Calculate delta between the first two configs (if two exist) - if len(configs) >= 2: - primary = run_summary.get(configs[0], {}) - baseline = run_summary.get(configs[1], {}) - else: - primary = run_summary.get(configs[0], {}) if configs else {} - baseline = {} - - delta_pass_rate = primary.get("pass_rate", {}).get("mean", 0) - baseline.get("pass_rate", {}).get("mean", 0) - delta_time = primary.get("time_seconds", {}).get("mean", 0) - baseline.get("time_seconds", {}).get("mean", 0) - delta_tokens = primary.get("tokens", {}).get("mean", 0) - baseline.get("tokens", {}).get("mean", 0) - - run_summary["delta"] = { - "pass_rate": f"{delta_pass_rate:+.2f}", - "time_seconds": f"{delta_time:+.1f}", - "tokens": f"{delta_tokens:+.0f}" - } - - return run_summary - - -def generate_benchmark(benchmark_dir: Path, skill_name: str = "", skill_path: str = "") -> dict: - """ - Generate complete benchmark.json from run results. - """ - results = load_run_results(benchmark_dir) - run_summary = aggregate_results(results) - - # Build runs array for benchmark.json - runs = [] - for config in results: - for result in results[config]: - runs.append({ - "eval_id": result["eval_id"], - "configuration": config, - "run_number": result["run_number"], - "result": { - "pass_rate": result["pass_rate"], - "passed": result["passed"], - "failed": result["failed"], - "total": result["total"], - "time_seconds": result["time_seconds"], - "tokens": result.get("tokens", 0), - "tool_calls": result.get("tool_calls", 0), - "errors": result.get("errors", 0) - }, - "expectations": result["expectations"], - "notes": result["notes"] - }) - - # Determine eval IDs from results - eval_ids = sorted(set( - r["eval_id"] - for config in results.values() - for r in config - )) - - benchmark = { - "metadata": { - "skill_name": skill_name or "", - "skill_path": skill_path or "", - "executor_model": "", - "analyzer_model": "", - "timestamp": datetime.now(timezone.utc).strftime("%Y-%m-%dT%H:%M:%SZ"), - "evals_run": eval_ids, - "runs_per_configuration": 3 - }, - "runs": runs, - "run_summary": run_summary, - "notes": [] # To be filled by analyzer - } - - return benchmark - - -def generate_markdown(benchmark: dict) -> str: - """Generate human-readable benchmark.md from benchmark data.""" - metadata = benchmark["metadata"] - run_summary = benchmark["run_summary"] - - # Determine config names (excluding "delta") - configs = [k for k in run_summary if k != "delta"] - config_a = configs[0] if len(configs) >= 1 else "config_a" - config_b = configs[1] if len(configs) >= 2 else "config_b" - label_a = config_a.replace("_", " ").title() - label_b = config_b.replace("_", " ").title() - - lines = [ - f"# Skill Benchmark: {metadata['skill_name']}", - "", - f"**Model**: {metadata['executor_model']}", - f"**Date**: {metadata['timestamp']}", - f"**Evals**: {', '.join(map(str, metadata['evals_run']))} ({metadata['runs_per_configuration']} runs each per configuration)", - "", - "## Summary", - "", - f"| Metric | {label_a} | {label_b} | Delta |", - "|--------|------------|---------------|-------|", - ] - - a_summary = run_summary.get(config_a, {}) - b_summary = run_summary.get(config_b, {}) - delta = run_summary.get("delta", {}) - - # Format pass rate - a_pr = a_summary.get("pass_rate", {}) - b_pr = b_summary.get("pass_rate", {}) - lines.append(f"| Pass Rate | {a_pr.get('mean', 0)*100:.0f}% ± {a_pr.get('stddev', 0)*100:.0f}% | {b_pr.get('mean', 0)*100:.0f}% ± {b_pr.get('stddev', 0)*100:.0f}% | {delta.get('pass_rate', '—')} |") - - # Format time - a_time = a_summary.get("time_seconds", {}) - b_time = b_summary.get("time_seconds", {}) - lines.append(f"| Time | {a_time.get('mean', 0):.1f}s ± {a_time.get('stddev', 0):.1f}s | {b_time.get('mean', 0):.1f}s ± {b_time.get('stddev', 0):.1f}s | {delta.get('time_seconds', '—')}s |") - - # Format tokens - a_tokens = a_summary.get("tokens", {}) - b_tokens = b_summary.get("tokens", {}) - lines.append(f"| Tokens | {a_tokens.get('mean', 0):.0f} ± {a_tokens.get('stddev', 0):.0f} | {b_tokens.get('mean', 0):.0f} ± {b_tokens.get('stddev', 0):.0f} | {delta.get('tokens', '—')} |") - - # Notes section - if benchmark.get("notes"): - lines.extend([ - "", - "## Notes", - "" - ]) - for note in benchmark["notes"]: - lines.append(f"- {note}") - - return "\n".join(lines) - - -def main(): - parser = argparse.ArgumentParser( - description="Aggregate benchmark run results into summary statistics" - ) - parser.add_argument( - "benchmark_dir", - type=Path, - help="Path to the benchmark directory" - ) - parser.add_argument( - "--skill-name", - default="", - help="Name of the skill being benchmarked" - ) - parser.add_argument( - "--skill-path", - default="", - help="Path to the skill being benchmarked" - ) - parser.add_argument( - "--output", "-o", - type=Path, - help="Output path for benchmark.json (default: /benchmark.json)" - ) - - args = parser.parse_args() - - if not args.benchmark_dir.exists(): - print(f"Directory not found: {args.benchmark_dir}") - sys.exit(1) - - # Generate benchmark - benchmark = generate_benchmark(args.benchmark_dir, args.skill_name, args.skill_path) - - # Determine output paths - output_json = args.output or (args.benchmark_dir / "benchmark.json") - output_md = output_json.with_suffix(".md") - - # Write benchmark.json - with open(output_json, "w") as f: - json.dump(benchmark, f, indent=2) - print(f"Generated: {output_json}") - - # Write benchmark.md - markdown = generate_markdown(benchmark) - with open(output_md, "w") as f: - f.write(markdown) - print(f"Generated: {output_md}") - - # Print summary - run_summary = benchmark["run_summary"] - configs = [k for k in run_summary if k != "delta"] - delta = run_summary.get("delta", {}) - - print(f"\nSummary:") - for config in configs: - pr = run_summary[config]["pass_rate"]["mean"] - label = config.replace("_", " ").title() - print(f" {label}: {pr*100:.1f}% pass rate") - print(f" Delta: {delta.get('pass_rate', '—')}") - - -if __name__ == "__main__": - main() diff --git a/.skills/skill-creator/scripts/generate_report.py b/.skills/skill-creator/scripts/generate_report.py deleted file mode 100644 index 959e30a001..0000000000 --- a/.skills/skill-creator/scripts/generate_report.py +++ /dev/null @@ -1,326 +0,0 @@ -#!/usr/bin/env python3 -"""Generate an HTML report from run_loop.py output. - -Takes the JSON output from run_loop.py and generates a visual HTML report -showing each description attempt with check/x for each test case. -Distinguishes between train and test queries. -""" - -import argparse -import html -import json -import sys -from pathlib import Path - - -def generate_html(data: dict, auto_refresh: bool = False, skill_name: str = "") -> str: - """Generate HTML report from loop output data. If auto_refresh is True, adds a meta refresh tag.""" - history = data.get("history", []) - holdout = data.get("holdout", 0) - title_prefix = html.escape(skill_name + " \u2014 ") if skill_name else "" - - # Get all unique queries from train and test sets, with should_trigger info - train_queries: list[dict] = [] - test_queries: list[dict] = [] - if history: - for r in history[0].get("train_results", history[0].get("results", [])): - train_queries.append({"query": r["query"], "should_trigger": r.get("should_trigger", True)}) - if history[0].get("test_results"): - for r in history[0].get("test_results", []): - test_queries.append({"query": r["query"], "should_trigger": r.get("should_trigger", True)}) - - refresh_tag = ' \n' if auto_refresh else "" - - html_parts = [""" - - - -""" + refresh_tag + """ """ + title_prefix + """Skill Description Optimization - - - - - - -

""" + title_prefix + """Skill Description Optimization

-
- Optimizing your skill's description. This page updates automatically as Claude tests different versions of your skill's description. Each row is an iteration — a new description attempt. The columns show test queries: green checkmarks mean the skill triggered correctly (or correctly didn't trigger), red crosses mean it got it wrong. The "Train" score shows performance on queries used to improve the description; the "Test" score shows performance on held-out queries the optimizer hasn't seen. When it's done, Claude will apply the best-performing description to your skill. -
-"""] - - # Summary section - best_test_score = data.get('best_test_score') - best_train_score = data.get('best_train_score') - html_parts.append(f""" -
-

Original: {html.escape(data.get('original_description', 'N/A'))}

-

Best: {html.escape(data.get('best_description', 'N/A'))}

-

Best Score: {data.get('best_score', 'N/A')} {'(test)' if best_test_score else '(train)'}

-

Iterations: {data.get('iterations_run', 0)} | Train: {data.get('train_size', '?')} | Test: {data.get('test_size', '?')}

-
-""") - - # Legend - html_parts.append(""" -
- Query columns: - Should trigger - Should NOT trigger - Train - Test -
-""") - - # Table header - html_parts.append(""" -
- - - - - - - -""") - - # Add column headers for train queries - for qinfo in train_queries: - polarity = "positive-col" if qinfo["should_trigger"] else "negative-col" - html_parts.append(f' \n') - - # Add column headers for test queries (different color) - for qinfo in test_queries: - polarity = "positive-col" if qinfo["should_trigger"] else "negative-col" - html_parts.append(f' \n') - - html_parts.append(""" - - -""") - - # Find best iteration for highlighting - if test_queries: - best_iter = max(history, key=lambda h: h.get("test_passed") or 0).get("iteration") - else: - best_iter = max(history, key=lambda h: h.get("train_passed", h.get("passed", 0))).get("iteration") - - # Add rows for each iteration - for h in history: - iteration = h.get("iteration", "?") - train_passed = h.get("train_passed", h.get("passed", 0)) - train_total = h.get("train_total", h.get("total", 0)) - test_passed = h.get("test_passed") - test_total = h.get("test_total") - description = h.get("description", "") - train_results = h.get("train_results", h.get("results", [])) - test_results = h.get("test_results", []) - - # Create lookups for results by query - train_by_query = {r["query"]: r for r in train_results} - test_by_query = {r["query"]: r for r in test_results} if test_results else {} - - # Compute aggregate correct/total runs across all retries - def aggregate_runs(results: list[dict]) -> tuple[int, int]: - correct = 0 - total = 0 - for r in results: - runs = r.get("runs", 0) - triggers = r.get("triggers", 0) - total += runs - if r.get("should_trigger", True): - correct += triggers - else: - correct += runs - triggers - return correct, total - - train_correct, train_runs = aggregate_runs(train_results) - test_correct, test_runs = aggregate_runs(test_results) - - # Determine score classes - def score_class(correct: int, total: int) -> str: - if total > 0: - ratio = correct / total - if ratio >= 0.8: - return "score-good" - elif ratio >= 0.5: - return "score-ok" - return "score-bad" - - train_class = score_class(train_correct, train_runs) - test_class = score_class(test_correct, test_runs) - - row_class = "best-row" if iteration == best_iter else "" - - html_parts.append(f""" - - - - -""") - - # Add result for each train query - for qinfo in train_queries: - r = train_by_query.get(qinfo["query"], {}) - did_pass = r.get("pass", False) - triggers = r.get("triggers", 0) - runs = r.get("runs", 0) - - icon = "✓" if did_pass else "✗" - css_class = "pass" if did_pass else "fail" - - html_parts.append(f' \n') - - # Add result for each test query (with different background) - for qinfo in test_queries: - r = test_by_query.get(qinfo["query"], {}) - did_pass = r.get("pass", False) - triggers = r.get("triggers", 0) - runs = r.get("runs", 0) - - icon = "✓" if did_pass else "✗" - css_class = "pass" if did_pass else "fail" - - html_parts.append(f' \n') - - html_parts.append(" \n") - - html_parts.append(""" -
IterTrainTestDescription{html.escape(qinfo["query"])}{html.escape(qinfo["query"])}
{iteration}{train_correct}/{train_runs}{test_correct}/{test_runs}{html.escape(description)}{icon}{triggers}/{runs}{icon}{triggers}/{runs}
-
-""") - - html_parts.append(""" - - -""") - - return "".join(html_parts) - - -def main(): - parser = argparse.ArgumentParser(description="Generate HTML report from run_loop output") - parser.add_argument("input", help="Path to JSON output from run_loop.py (or - for stdin)") - parser.add_argument("-o", "--output", default=None, help="Output HTML file (default: stdout)") - parser.add_argument("--skill-name", default="", help="Skill name to include in the report title") - args = parser.parse_args() - - if args.input == "-": - data = json.load(sys.stdin) - else: - data = json.loads(Path(args.input).read_text()) - - html_output = generate_html(data, skill_name=args.skill_name) - - if args.output: - Path(args.output).write_text(html_output) - print(f"Report written to {args.output}", file=sys.stderr) - else: - print(html_output) - - -if __name__ == "__main__": - main() diff --git a/.skills/skill-creator/scripts/improve_description.py b/.skills/skill-creator/scripts/improve_description.py deleted file mode 100644 index a270777b9a..0000000000 --- a/.skills/skill-creator/scripts/improve_description.py +++ /dev/null @@ -1,248 +0,0 @@ -#!/usr/bin/env python3 -"""Improve a skill description based on eval results. - -Takes eval results (from run_eval.py) and generates an improved description -using Claude with extended thinking. -""" - -import argparse -import json -import re -import sys -from pathlib import Path - -import anthropic - -from scripts.utils import parse_skill_md - - -def improve_description( - client: anthropic.Anthropic, - skill_name: str, - skill_content: str, - current_description: str, - eval_results: dict, - history: list[dict], - model: str, - test_results: dict | None = None, - log_dir: Path | None = None, - iteration: int | None = None, -) -> str: - """Call Claude to improve the description based on eval results.""" - failed_triggers = [ - r for r in eval_results["results"] - if r["should_trigger"] and not r["pass"] - ] - false_triggers = [ - r for r in eval_results["results"] - if not r["should_trigger"] and not r["pass"] - ] - - # Build scores summary - train_score = f"{eval_results['summary']['passed']}/{eval_results['summary']['total']}" - if test_results: - test_score = f"{test_results['summary']['passed']}/{test_results['summary']['total']}" - scores_summary = f"Train: {train_score}, Test: {test_score}" - else: - scores_summary = f"Train: {train_score}" - - prompt = f"""You are optimizing a skill description for a Claude Code skill called "{skill_name}". A "skill" is sort of like a prompt, but with progressive disclosure -- there's a title and description that Claude sees when deciding whether to use the skill, and then if it does use the skill, it reads the .md file which has lots more details and potentially links to other resources in the skill folder like helper files and scripts and additional documentation or examples. - -The description appears in Claude's "available_skills" list. When a user sends a query, Claude decides whether to invoke the skill based solely on the title and on this description. Your goal is to write a description that triggers for relevant queries, and doesn't trigger for irrelevant ones. - -Here's the current description: - -"{current_description}" - - -Current scores ({scores_summary}): - -""" - if failed_triggers: - prompt += "FAILED TO TRIGGER (should have triggered but didn't):\n" - for r in failed_triggers: - prompt += f' - "{r["query"]}" (triggered {r["triggers"]}/{r["runs"]} times)\n' - prompt += "\n" - - if false_triggers: - prompt += "FALSE TRIGGERS (triggered but shouldn't have):\n" - for r in false_triggers: - prompt += f' - "{r["query"]}" (triggered {r["triggers"]}/{r["runs"]} times)\n' - prompt += "\n" - - if history: - prompt += "PREVIOUS ATTEMPTS (do NOT repeat these — try something structurally different):\n\n" - for h in history: - train_s = f"{h.get('train_passed', h.get('passed', 0))}/{h.get('train_total', h.get('total', 0))}" - test_s = f"{h.get('test_passed', '?')}/{h.get('test_total', '?')}" if h.get('test_passed') is not None else None - score_str = f"train={train_s}" + (f", test={test_s}" if test_s else "") - prompt += f'\n' - prompt += f'Description: "{h["description"]}"\n' - if "results" in h: - prompt += "Train results:\n" - for r in h["results"]: - status = "PASS" if r["pass"] else "FAIL" - prompt += f' [{status}] "{r["query"][:80]}" (triggered {r["triggers"]}/{r["runs"]})\n' - if h.get("note"): - prompt += f'Note: {h["note"]}\n' - prompt += "\n\n" - - prompt += f""" - -Skill content (for context on what the skill does): - -{skill_content} - - -Based on the failures, write a new and improved description that is more likely to trigger correctly. When I say "based on the failures", it's a bit of a tricky line to walk because we don't want to overfit to the specific cases you're seeing. So what I DON'T want you to do is produce an ever-expanding list of specific queries that this skill should or shouldn't trigger for. Instead, try to generalize from the failures to broader categories of user intent and situations where this skill would be useful or not useful. The reason for this is twofold: - -1. Avoid overfitting -2. The list might get loooong and it's injected into ALL queries and there might be a lot of skills, so we don't want to blow too much space on any given description. - -Concretely, your description should not be more than about 100-200 words, even if that comes at the cost of accuracy. - -Here are some tips that we've found to work well in writing these descriptions: -- The skill should be phrased in the imperative -- "Use this skill for" rather than "this skill does" -- The skill description should focus on the user's intent, what they are trying to achieve, vs. the implementation details of how the skill works. -- The description competes with other skills for Claude's attention — make it distinctive and immediately recognizable. -- If you're getting lots of failures after repeated attempts, change things up. Try different sentence structures or wordings. - -I'd encourage you to be creative and mix up the style in different iterations since you'll have multiple opportunities to try different approaches and we'll just grab the highest-scoring one at the end. - -Please respond with only the new description text in tags, nothing else.""" - - response = client.messages.create( - model=model, - max_tokens=16000, - thinking={ - "type": "enabled", - "budget_tokens": 10000, - }, - messages=[{"role": "user", "content": prompt}], - ) - - # Extract thinking and text from response - thinking_text = "" - text = "" - for block in response.content: - if block.type == "thinking": - thinking_text = block.thinking - elif block.type == "text": - text = block.text - - # Parse out the tags - match = re.search(r"(.*?)", text, re.DOTALL) - description = match.group(1).strip().strip('"') if match else text.strip().strip('"') - - # Log the transcript - transcript: dict = { - "iteration": iteration, - "prompt": prompt, - "thinking": thinking_text, - "response": text, - "parsed_description": description, - "char_count": len(description), - "over_limit": len(description) > 1024, - } - - # If over 1024 chars, ask the model to shorten it - if len(description) > 1024: - shorten_prompt = f"Your description is {len(description)} characters, which exceeds the hard 1024 character limit. Please rewrite it to be under 1024 characters while preserving the most important trigger words and intent coverage. Respond with only the new description in tags." - shorten_response = client.messages.create( - model=model, - max_tokens=16000, - thinking={ - "type": "enabled", - "budget_tokens": 10000, - }, - messages=[ - {"role": "user", "content": prompt}, - {"role": "assistant", "content": text}, - {"role": "user", "content": shorten_prompt}, - ], - ) - - shorten_thinking = "" - shorten_text = "" - for block in shorten_response.content: - if block.type == "thinking": - shorten_thinking = block.thinking - elif block.type == "text": - shorten_text = block.text - - match = re.search(r"(.*?)", shorten_text, re.DOTALL) - shortened = match.group(1).strip().strip('"') if match else shorten_text.strip().strip('"') - - transcript["rewrite_prompt"] = shorten_prompt - transcript["rewrite_thinking"] = shorten_thinking - transcript["rewrite_response"] = shorten_text - transcript["rewrite_description"] = shortened - transcript["rewrite_char_count"] = len(shortened) - description = shortened - - transcript["final_description"] = description - - if log_dir: - log_dir.mkdir(parents=True, exist_ok=True) - log_file = log_dir / f"improve_iter_{iteration or 'unknown'}.json" - log_file.write_text(json.dumps(transcript, indent=2)) - - return description - - -def main(): - parser = argparse.ArgumentParser(description="Improve a skill description based on eval results") - parser.add_argument("--eval-results", required=True, help="Path to eval results JSON (from run_eval.py)") - parser.add_argument("--skill-path", required=True, help="Path to skill directory") - parser.add_argument("--history", default=None, help="Path to history JSON (previous attempts)") - parser.add_argument("--model", required=True, help="Model for improvement") - parser.add_argument("--verbose", action="store_true", help="Print thinking to stderr") - args = parser.parse_args() - - skill_path = Path(args.skill_path) - if not (skill_path / "SKILL.md").exists(): - print(f"Error: No SKILL.md found at {skill_path}", file=sys.stderr) - sys.exit(1) - - eval_results = json.loads(Path(args.eval_results).read_text()) - history = [] - if args.history: - history = json.loads(Path(args.history).read_text()) - - name, _, content = parse_skill_md(skill_path) - current_description = eval_results["description"] - - if args.verbose: - print(f"Current: {current_description}", file=sys.stderr) - print(f"Score: {eval_results['summary']['passed']}/{eval_results['summary']['total']}", file=sys.stderr) - - client = anthropic.Anthropic() - new_description = improve_description( - client=client, - skill_name=name, - skill_content=content, - current_description=current_description, - eval_results=eval_results, - history=history, - model=args.model, - ) - - if args.verbose: - print(f"Improved: {new_description}", file=sys.stderr) - - # Output as JSON with both the new description and updated history - output = { - "description": new_description, - "history": history + [{ - "description": current_description, - "passed": eval_results["summary"]["passed"], - "failed": eval_results["summary"]["failed"], - "total": eval_results["summary"]["total"], - "results": eval_results["results"], - }], - } - print(json.dumps(output, indent=2)) - - -if __name__ == "__main__": - main() diff --git a/.skills/skill-creator/scripts/package_skill.py b/.skills/skill-creator/scripts/package_skill.py deleted file mode 100644 index f48eac4446..0000000000 --- a/.skills/skill-creator/scripts/package_skill.py +++ /dev/null @@ -1,136 +0,0 @@ -#!/usr/bin/env python3 -""" -Skill Packager - Creates a distributable .skill file of a skill folder - -Usage: - python utils/package_skill.py [output-directory] - -Example: - python utils/package_skill.py skills/public/my-skill - python utils/package_skill.py skills/public/my-skill ./dist -""" - -import fnmatch -import sys -import zipfile -from pathlib import Path -from scripts.quick_validate import validate_skill - -# Patterns to exclude when packaging skills. -EXCLUDE_DIRS = {"__pycache__", "node_modules"} -EXCLUDE_GLOBS = {"*.pyc"} -EXCLUDE_FILES = {".DS_Store"} -# Directories excluded only at the skill root (not when nested deeper). -ROOT_EXCLUDE_DIRS = {"evals"} - - -def should_exclude(rel_path: Path) -> bool: - """Check if a path should be excluded from packaging.""" - parts = rel_path.parts - if any(part in EXCLUDE_DIRS for part in parts): - return True - # rel_path is relative to skill_path.parent, so parts[0] is the skill - # folder name and parts[1] (if present) is the first subdir. - if len(parts) > 1 and parts[1] in ROOT_EXCLUDE_DIRS: - return True - name = rel_path.name - if name in EXCLUDE_FILES: - return True - return any(fnmatch.fnmatch(name, pat) for pat in EXCLUDE_GLOBS) - - -def package_skill(skill_path, output_dir=None): - """ - Package a skill folder into a .skill file. - - Args: - skill_path: Path to the skill folder - output_dir: Optional output directory for the .skill file (defaults to current directory) - - Returns: - Path to the created .skill file, or None if error - """ - skill_path = Path(skill_path).resolve() - - # Validate skill folder exists - if not skill_path.exists(): - print(f"❌ Error: Skill folder not found: {skill_path}") - return None - - if not skill_path.is_dir(): - print(f"❌ Error: Path is not a directory: {skill_path}") - return None - - # Validate SKILL.md exists - skill_md = skill_path / "SKILL.md" - if not skill_md.exists(): - print(f"❌ Error: SKILL.md not found in {skill_path}") - return None - - # Run validation before packaging - print("🔍 Validating skill...") - valid, message = validate_skill(skill_path) - if not valid: - print(f"❌ Validation failed: {message}") - print(" Please fix the validation errors before packaging.") - return None - print(f"✅ {message}\n") - - # Determine output location - skill_name = skill_path.name - if output_dir: - output_path = Path(output_dir).resolve() - output_path.mkdir(parents=True, exist_ok=True) - else: - output_path = Path.cwd() - - skill_filename = output_path / f"{skill_name}.skill" - - # Create the .skill file (zip format) - try: - with zipfile.ZipFile(skill_filename, 'w', zipfile.ZIP_DEFLATED) as zipf: - # Walk through the skill directory, excluding build artifacts - for file_path in skill_path.rglob('*'): - if not file_path.is_file(): - continue - arcname = file_path.relative_to(skill_path.parent) - if should_exclude(arcname): - print(f" Skipped: {arcname}") - continue - zipf.write(file_path, arcname) - print(f" Added: {arcname}") - - print(f"\n✅ Successfully packaged skill to: {skill_filename}") - return skill_filename - - except Exception as e: - print(f"❌ Error creating .skill file: {e}") - return None - - -def main(): - if len(sys.argv) < 2: - print("Usage: python utils/package_skill.py [output-directory]") - print("\nExample:") - print(" python utils/package_skill.py skills/public/my-skill") - print(" python utils/package_skill.py skills/public/my-skill ./dist") - sys.exit(1) - - skill_path = sys.argv[1] - output_dir = sys.argv[2] if len(sys.argv) > 2 else None - - print(f"📦 Packaging skill: {skill_path}") - if output_dir: - print(f" Output directory: {output_dir}") - print() - - result = package_skill(skill_path, output_dir) - - if result: - sys.exit(0) - else: - sys.exit(1) - - -if __name__ == "__main__": - main() diff --git a/.skills/skill-creator/scripts/quick_validate.py b/.skills/skill-creator/scripts/quick_validate.py deleted file mode 100644 index ed8e1dddce..0000000000 --- a/.skills/skill-creator/scripts/quick_validate.py +++ /dev/null @@ -1,103 +0,0 @@ -#!/usr/bin/env python3 -""" -Quick validation script for skills - minimal version -""" - -import sys -import os -import re -import yaml -from pathlib import Path - -def validate_skill(skill_path): - """Basic validation of a skill""" - skill_path = Path(skill_path) - - # Check SKILL.md exists - skill_md = skill_path / 'SKILL.md' - if not skill_md.exists(): - return False, "SKILL.md not found" - - # Read and validate frontmatter - content = skill_md.read_text() - if not content.startswith('---'): - return False, "No YAML frontmatter found" - - # Extract frontmatter - match = re.match(r'^---\n(.*?)\n---', content, re.DOTALL) - if not match: - return False, "Invalid frontmatter format" - - frontmatter_text = match.group(1) - - # Parse YAML frontmatter - try: - frontmatter = yaml.safe_load(frontmatter_text) - if not isinstance(frontmatter, dict): - return False, "Frontmatter must be a YAML dictionary" - except yaml.YAMLError as e: - return False, f"Invalid YAML in frontmatter: {e}" - - # Define allowed properties - ALLOWED_PROPERTIES = {'name', 'description', 'license', 'allowed-tools', 'metadata', 'compatibility'} - - # Check for unexpected properties (excluding nested keys under metadata) - unexpected_keys = set(frontmatter.keys()) - ALLOWED_PROPERTIES - if unexpected_keys: - return False, ( - f"Unexpected key(s) in SKILL.md frontmatter: {', '.join(sorted(unexpected_keys))}. " - f"Allowed properties are: {', '.join(sorted(ALLOWED_PROPERTIES))}" - ) - - # Check required fields - if 'name' not in frontmatter: - return False, "Missing 'name' in frontmatter" - if 'description' not in frontmatter: - return False, "Missing 'description' in frontmatter" - - # Extract name for validation - name = frontmatter.get('name', '') - if not isinstance(name, str): - return False, f"Name must be a string, got {type(name).__name__}" - name = name.strip() - if name: - # Check naming convention (kebab-case: lowercase with hyphens) - if not re.match(r'^[a-z0-9-]+$', name): - return False, f"Name '{name}' should be kebab-case (lowercase letters, digits, and hyphens only)" - if name.startswith('-') or name.endswith('-') or '--' in name: - return False, f"Name '{name}' cannot start/end with hyphen or contain consecutive hyphens" - # Check name length (max 64 characters per spec) - if len(name) > 64: - return False, f"Name is too long ({len(name)} characters). Maximum is 64 characters." - - # Extract and validate description - description = frontmatter.get('description', '') - if not isinstance(description, str): - return False, f"Description must be a string, got {type(description).__name__}" - description = description.strip() - if description: - # Check for angle brackets - if '<' in description or '>' in description: - return False, "Description cannot contain angle brackets (< or >)" - # Check description length (max 1024 characters per spec) - if len(description) > 1024: - return False, f"Description is too long ({len(description)} characters). Maximum is 1024 characters." - - # Validate compatibility field if present (optional) - compatibility = frontmatter.get('compatibility', '') - if compatibility: - if not isinstance(compatibility, str): - return False, f"Compatibility must be a string, got {type(compatibility).__name__}" - if len(compatibility) > 500: - return False, f"Compatibility is too long ({len(compatibility)} characters). Maximum is 500 characters." - - return True, "Skill is valid!" - -if __name__ == "__main__": - if len(sys.argv) != 2: - print("Usage: python quick_validate.py ") - sys.exit(1) - - valid, message = validate_skill(sys.argv[1]) - print(message) - sys.exit(0 if valid else 1) \ No newline at end of file diff --git a/.skills/skill-creator/scripts/run_eval.py b/.skills/skill-creator/scripts/run_eval.py deleted file mode 100644 index e58c70bea3..0000000000 --- a/.skills/skill-creator/scripts/run_eval.py +++ /dev/null @@ -1,310 +0,0 @@ -#!/usr/bin/env python3 -"""Run trigger evaluation for a skill description. - -Tests whether a skill's description causes Claude to trigger (read the skill) -for a set of queries. Outputs results as JSON. -""" - -import argparse -import json -import os -import select -import subprocess -import sys -import time -import uuid -from concurrent.futures import ProcessPoolExecutor, as_completed -from pathlib import Path - -from scripts.utils import parse_skill_md - - -def find_project_root() -> Path: - """Find the project root by walking up from cwd looking for .claude/. - - Mimics how Claude Code discovers its project root, so the command file - we create ends up where claude -p will look for it. - """ - current = Path.cwd() - for parent in [current, *current.parents]: - if (parent / ".claude").is_dir(): - return parent - return current - - -def run_single_query( - query: str, - skill_name: str, - skill_description: str, - timeout: int, - project_root: str, - model: str | None = None, -) -> bool: - """Run a single query and return whether the skill was triggered. - - Creates a command file in .claude/commands/ so it appears in Claude's - available_skills list, then runs `claude -p` with the raw query. - Uses --include-partial-messages to detect triggering early from - stream events (content_block_start) rather than waiting for the - full assistant message, which only arrives after tool execution. - """ - unique_id = uuid.uuid4().hex[:8] - clean_name = f"{skill_name}-skill-{unique_id}" - project_commands_dir = Path(project_root) / ".claude" / "commands" - command_file = project_commands_dir / f"{clean_name}.md" - - try: - project_commands_dir.mkdir(parents=True, exist_ok=True) - # Use YAML block scalar to avoid breaking on quotes in description - indented_desc = "\n ".join(skill_description.split("\n")) - command_content = ( - f"---\n" - f"description: |\n" - f" {indented_desc}\n" - f"---\n\n" - f"# {skill_name}\n\n" - f"This skill handles: {skill_description}\n" - ) - command_file.write_text(command_content) - - cmd = [ - "claude", - "-p", query, - "--output-format", "stream-json", - "--verbose", - "--include-partial-messages", - ] - if model: - cmd.extend(["--model", model]) - - # Remove CLAUDECODE env var to allow nesting claude -p inside a - # Claude Code session. The guard is for interactive terminal conflicts; - # programmatic subprocess usage is safe. - env = {k: v for k, v in os.environ.items() if k != "CLAUDECODE"} - - process = subprocess.Popen( - cmd, - stdout=subprocess.PIPE, - stderr=subprocess.DEVNULL, - cwd=project_root, - env=env, - ) - - triggered = False - start_time = time.time() - buffer = "" - # Track state for stream event detection - pending_tool_name = None - accumulated_json = "" - - try: - while time.time() - start_time < timeout: - if process.poll() is not None: - remaining = process.stdout.read() - if remaining: - buffer += remaining.decode("utf-8", errors="replace") - break - - ready, _, _ = select.select([process.stdout], [], [], 1.0) - if not ready: - continue - - chunk = os.read(process.stdout.fileno(), 8192) - if not chunk: - break - buffer += chunk.decode("utf-8", errors="replace") - - while "\n" in buffer: - line, buffer = buffer.split("\n", 1) - line = line.strip() - if not line: - continue - - try: - event = json.loads(line) - except json.JSONDecodeError: - continue - - # Early detection via stream events - if event.get("type") == "stream_event": - se = event.get("event", {}) - se_type = se.get("type", "") - - if se_type == "content_block_start": - cb = se.get("content_block", {}) - if cb.get("type") == "tool_use": - tool_name = cb.get("name", "") - if tool_name in ("Skill", "Read"): - pending_tool_name = tool_name - accumulated_json = "" - else: - return False - - elif se_type == "content_block_delta" and pending_tool_name: - delta = se.get("delta", {}) - if delta.get("type") == "input_json_delta": - accumulated_json += delta.get("partial_json", "") - if clean_name in accumulated_json: - return True - - elif se_type in ("content_block_stop", "message_stop"): - if pending_tool_name: - return clean_name in accumulated_json - if se_type == "message_stop": - return False - - # Fallback: full assistant message - elif event.get("type") == "assistant": - message = event.get("message", {}) - for content_item in message.get("content", []): - if content_item.get("type") != "tool_use": - continue - tool_name = content_item.get("name", "") - tool_input = content_item.get("input", {}) - if tool_name == "Skill" and clean_name in tool_input.get("skill", ""): - triggered = True - elif tool_name == "Read" and clean_name in tool_input.get("file_path", ""): - triggered = True - return triggered - - elif event.get("type") == "result": - return triggered - finally: - # Clean up process on any exit path (return, exception, timeout) - if process.poll() is None: - process.kill() - process.wait() - - return triggered - finally: - if command_file.exists(): - command_file.unlink() - - -def run_eval( - eval_set: list[dict], - skill_name: str, - description: str, - num_workers: int, - timeout: int, - project_root: Path, - runs_per_query: int = 1, - trigger_threshold: float = 0.5, - model: str | None = None, -) -> dict: - """Run the full eval set and return results.""" - results = [] - - with ProcessPoolExecutor(max_workers=num_workers) as executor: - future_to_info = {} - for item in eval_set: - for run_idx in range(runs_per_query): - future = executor.submit( - run_single_query, - item["query"], - skill_name, - description, - timeout, - str(project_root), - model, - ) - future_to_info[future] = (item, run_idx) - - query_triggers: dict[str, list[bool]] = {} - query_items: dict[str, dict] = {} - for future in as_completed(future_to_info): - item, _ = future_to_info[future] - query = item["query"] - query_items[query] = item - if query not in query_triggers: - query_triggers[query] = [] - try: - query_triggers[query].append(future.result()) - except Exception as e: - print(f"Warning: query failed: {e}", file=sys.stderr) - query_triggers[query].append(False) - - for query, triggers in query_triggers.items(): - item = query_items[query] - trigger_rate = sum(triggers) / len(triggers) - should_trigger = item["should_trigger"] - if should_trigger: - did_pass = trigger_rate >= trigger_threshold - else: - did_pass = trigger_rate < trigger_threshold - results.append({ - "query": query, - "should_trigger": should_trigger, - "trigger_rate": trigger_rate, - "triggers": sum(triggers), - "runs": len(triggers), - "pass": did_pass, - }) - - passed = sum(1 for r in results if r["pass"]) - total = len(results) - - return { - "skill_name": skill_name, - "description": description, - "results": results, - "summary": { - "total": total, - "passed": passed, - "failed": total - passed, - }, - } - - -def main(): - parser = argparse.ArgumentParser(description="Run trigger evaluation for a skill description") - parser.add_argument("--eval-set", required=True, help="Path to eval set JSON file") - parser.add_argument("--skill-path", required=True, help="Path to skill directory") - parser.add_argument("--description", default=None, help="Override description to test") - parser.add_argument("--num-workers", type=int, default=10, help="Number of parallel workers") - parser.add_argument("--timeout", type=int, default=30, help="Timeout per query in seconds") - parser.add_argument("--runs-per-query", type=int, default=3, help="Number of runs per query") - parser.add_argument("--trigger-threshold", type=float, default=0.5, help="Trigger rate threshold") - parser.add_argument("--model", default=None, help="Model to use for claude -p (default: user's configured model)") - parser.add_argument("--verbose", action="store_true", help="Print progress to stderr") - args = parser.parse_args() - - eval_set = json.loads(Path(args.eval_set).read_text()) - skill_path = Path(args.skill_path) - - if not (skill_path / "SKILL.md").exists(): - print(f"Error: No SKILL.md found at {skill_path}", file=sys.stderr) - sys.exit(1) - - name, original_description, content = parse_skill_md(skill_path) - description = args.description or original_description - project_root = find_project_root() - - if args.verbose: - print(f"Evaluating: {description}", file=sys.stderr) - - output = run_eval( - eval_set=eval_set, - skill_name=name, - description=description, - num_workers=args.num_workers, - timeout=args.timeout, - project_root=project_root, - runs_per_query=args.runs_per_query, - trigger_threshold=args.trigger_threshold, - model=args.model, - ) - - if args.verbose: - summary = output["summary"] - print(f"Results: {summary['passed']}/{summary['total']} passed", file=sys.stderr) - for r in output["results"]: - status = "PASS" if r["pass"] else "FAIL" - rate_str = f"{r['triggers']}/{r['runs']}" - print(f" [{status}] rate={rate_str} expected={r['should_trigger']}: {r['query'][:70]}", file=sys.stderr) - - print(json.dumps(output, indent=2)) - - -if __name__ == "__main__": - main() diff --git a/.skills/skill-creator/scripts/run_loop.py b/.skills/skill-creator/scripts/run_loop.py deleted file mode 100644 index 36f9b4e054..0000000000 --- a/.skills/skill-creator/scripts/run_loop.py +++ /dev/null @@ -1,332 +0,0 @@ -#!/usr/bin/env python3 -"""Run the eval + improve loop until all pass or max iterations reached. - -Combines run_eval.py and improve_description.py in a loop, tracking history -and returning the best description found. Supports train/test split to prevent -overfitting. -""" - -import argparse -import json -import random -import sys -import tempfile -import time -import webbrowser -from pathlib import Path - -import anthropic - -from scripts.generate_report import generate_html -from scripts.improve_description import improve_description -from scripts.run_eval import find_project_root, run_eval -from scripts.utils import parse_skill_md - - -def split_eval_set(eval_set: list[dict], holdout: float, seed: int = 42) -> tuple[list[dict], list[dict]]: - """Split eval set into train and test sets, stratified by should_trigger.""" - random.seed(seed) - - # Separate by should_trigger - trigger = [e for e in eval_set if e["should_trigger"]] - no_trigger = [e for e in eval_set if not e["should_trigger"]] - - # Shuffle each group - random.shuffle(trigger) - random.shuffle(no_trigger) - - # Calculate split points - n_trigger_test = max(1, int(len(trigger) * holdout)) - n_no_trigger_test = max(1, int(len(no_trigger) * holdout)) - - # Split - test_set = trigger[:n_trigger_test] + no_trigger[:n_no_trigger_test] - train_set = trigger[n_trigger_test:] + no_trigger[n_no_trigger_test:] - - return train_set, test_set - - -def run_loop( - eval_set: list[dict], - skill_path: Path, - description_override: str | None, - num_workers: int, - timeout: int, - max_iterations: int, - runs_per_query: int, - trigger_threshold: float, - holdout: float, - model: str, - verbose: bool, - live_report_path: Path | None = None, - log_dir: Path | None = None, -) -> dict: - """Run the eval + improvement loop.""" - project_root = find_project_root() - name, original_description, content = parse_skill_md(skill_path) - current_description = description_override or original_description - - # Split into train/test if holdout > 0 - if holdout > 0: - train_set, test_set = split_eval_set(eval_set, holdout) - if verbose: - print(f"Split: {len(train_set)} train, {len(test_set)} test (holdout={holdout})", file=sys.stderr) - else: - train_set = eval_set - test_set = [] - - client = anthropic.Anthropic() - history = [] - exit_reason = "unknown" - - for iteration in range(1, max_iterations + 1): - if verbose: - print(f"\n{'='*60}", file=sys.stderr) - print(f"Iteration {iteration}/{max_iterations}", file=sys.stderr) - print(f"Description: {current_description}", file=sys.stderr) - print(f"{'='*60}", file=sys.stderr) - - # Evaluate train + test together in one batch for parallelism - all_queries = train_set + test_set - t0 = time.time() - all_results = run_eval( - eval_set=all_queries, - skill_name=name, - description=current_description, - num_workers=num_workers, - timeout=timeout, - project_root=project_root, - runs_per_query=runs_per_query, - trigger_threshold=trigger_threshold, - model=model, - ) - eval_elapsed = time.time() - t0 - - # Split results back into train/test by matching queries - train_queries_set = {q["query"] for q in train_set} - train_result_list = [r for r in all_results["results"] if r["query"] in train_queries_set] - test_result_list = [r for r in all_results["results"] if r["query"] not in train_queries_set] - - train_passed = sum(1 for r in train_result_list if r["pass"]) - train_total = len(train_result_list) - train_summary = {"passed": train_passed, "failed": train_total - train_passed, "total": train_total} - train_results = {"results": train_result_list, "summary": train_summary} - - if test_set: - test_passed = sum(1 for r in test_result_list if r["pass"]) - test_total = len(test_result_list) - test_summary = {"passed": test_passed, "failed": test_total - test_passed, "total": test_total} - test_results = {"results": test_result_list, "summary": test_summary} - else: - test_results = None - test_summary = None - - history.append({ - "iteration": iteration, - "description": current_description, - "train_passed": train_summary["passed"], - "train_failed": train_summary["failed"], - "train_total": train_summary["total"], - "train_results": train_results["results"], - "test_passed": test_summary["passed"] if test_summary else None, - "test_failed": test_summary["failed"] if test_summary else None, - "test_total": test_summary["total"] if test_summary else None, - "test_results": test_results["results"] if test_results else None, - # For backward compat with report generator - "passed": train_summary["passed"], - "failed": train_summary["failed"], - "total": train_summary["total"], - "results": train_results["results"], - }) - - # Write live report if path provided - if live_report_path: - partial_output = { - "original_description": original_description, - "best_description": current_description, - "best_score": "in progress", - "iterations_run": len(history), - "holdout": holdout, - "train_size": len(train_set), - "test_size": len(test_set), - "history": history, - } - live_report_path.write_text(generate_html(partial_output, auto_refresh=True, skill_name=name)) - - if verbose: - def print_eval_stats(label, results, elapsed): - pos = [r for r in results if r["should_trigger"]] - neg = [r for r in results if not r["should_trigger"]] - tp = sum(r["triggers"] for r in pos) - pos_runs = sum(r["runs"] for r in pos) - fn = pos_runs - tp - fp = sum(r["triggers"] for r in neg) - neg_runs = sum(r["runs"] for r in neg) - tn = neg_runs - fp - total = tp + tn + fp + fn - precision = tp / (tp + fp) if (tp + fp) > 0 else 1.0 - recall = tp / (tp + fn) if (tp + fn) > 0 else 1.0 - accuracy = (tp + tn) / total if total > 0 else 0.0 - print(f"{label}: {tp+tn}/{total} correct, precision={precision:.0%} recall={recall:.0%} accuracy={accuracy:.0%} ({elapsed:.1f}s)", file=sys.stderr) - for r in results: - status = "PASS" if r["pass"] else "FAIL" - rate_str = f"{r['triggers']}/{r['runs']}" - print(f" [{status}] rate={rate_str} expected={r['should_trigger']}: {r['query'][:60]}", file=sys.stderr) - - print_eval_stats("Train", train_results["results"], eval_elapsed) - if test_summary: - print_eval_stats("Test ", test_results["results"], 0) - - if train_summary["failed"] == 0: - exit_reason = f"all_passed (iteration {iteration})" - if verbose: - print(f"\nAll train queries passed on iteration {iteration}!", file=sys.stderr) - break - - if iteration == max_iterations: - exit_reason = f"max_iterations ({max_iterations})" - if verbose: - print(f"\nMax iterations reached ({max_iterations}).", file=sys.stderr) - break - - # Improve the description based on train results - if verbose: - print(f"\nImproving description...", file=sys.stderr) - - t0 = time.time() - # Strip test scores from history so improvement model can't see them - blinded_history = [ - {k: v for k, v in h.items() if not k.startswith("test_")} - for h in history - ] - new_description = improve_description( - client=client, - skill_name=name, - skill_content=content, - current_description=current_description, - eval_results=train_results, - history=blinded_history, - model=model, - log_dir=log_dir, - iteration=iteration, - ) - improve_elapsed = time.time() - t0 - - if verbose: - print(f"Proposed ({improve_elapsed:.1f}s): {new_description}", file=sys.stderr) - - current_description = new_description - - # Find the best iteration by TEST score (or train if no test set) - if test_set: - best = max(history, key=lambda h: h["test_passed"] or 0) - best_score = f"{best['test_passed']}/{best['test_total']}" - else: - best = max(history, key=lambda h: h["train_passed"]) - best_score = f"{best['train_passed']}/{best['train_total']}" - - if verbose: - print(f"\nExit reason: {exit_reason}", file=sys.stderr) - print(f"Best score: {best_score} (iteration {best['iteration']})", file=sys.stderr) - - return { - "exit_reason": exit_reason, - "original_description": original_description, - "best_description": best["description"], - "best_score": best_score, - "best_train_score": f"{best['train_passed']}/{best['train_total']}", - "best_test_score": f"{best['test_passed']}/{best['test_total']}" if test_set else None, - "final_description": current_description, - "iterations_run": len(history), - "holdout": holdout, - "train_size": len(train_set), - "test_size": len(test_set), - "history": history, - } - - -def main(): - parser = argparse.ArgumentParser(description="Run eval + improve loop") - parser.add_argument("--eval-set", required=True, help="Path to eval set JSON file") - parser.add_argument("--skill-path", required=True, help="Path to skill directory") - parser.add_argument("--description", default=None, help="Override starting description") - parser.add_argument("--num-workers", type=int, default=10, help="Number of parallel workers") - parser.add_argument("--timeout", type=int, default=30, help="Timeout per query in seconds") - parser.add_argument("--max-iterations", type=int, default=5, help="Max improvement iterations") - parser.add_argument("--runs-per-query", type=int, default=3, help="Number of runs per query") - parser.add_argument("--trigger-threshold", type=float, default=0.5, help="Trigger rate threshold") - parser.add_argument("--holdout", type=float, default=0.4, help="Fraction of eval set to hold out for testing (0 to disable)") - parser.add_argument("--model", required=True, help="Model for improvement") - parser.add_argument("--verbose", action="store_true", help="Print progress to stderr") - parser.add_argument("--report", default="auto", help="Generate HTML report at this path (default: 'auto' for temp file, 'none' to disable)") - parser.add_argument("--results-dir", default=None, help="Save all outputs (results.json, report.html, log.txt) to a timestamped subdirectory here") - args = parser.parse_args() - - eval_set = json.loads(Path(args.eval_set).read_text()) - skill_path = Path(args.skill_path) - - if not (skill_path / "SKILL.md").exists(): - print(f"Error: No SKILL.md found at {skill_path}", file=sys.stderr) - sys.exit(1) - - name, _, _ = parse_skill_md(skill_path) - - # Set up live report path - if args.report != "none": - if args.report == "auto": - timestamp = time.strftime("%Y%m%d_%H%M%S") - live_report_path = Path(tempfile.gettempdir()) / f"skill_description_report_{skill_path.name}_{timestamp}.html" - else: - live_report_path = Path(args.report) - # Open the report immediately so the user can watch - live_report_path.write_text("

Starting optimization loop...

") - webbrowser.open(str(live_report_path)) - else: - live_report_path = None - - # Determine output directory (create before run_loop so logs can be written) - if args.results_dir: - timestamp = time.strftime("%Y-%m-%d_%H%M%S") - results_dir = Path(args.results_dir) / timestamp - results_dir.mkdir(parents=True, exist_ok=True) - else: - results_dir = None - - log_dir = results_dir / "logs" if results_dir else None - - output = run_loop( - eval_set=eval_set, - skill_path=skill_path, - description_override=args.description, - num_workers=args.num_workers, - timeout=args.timeout, - max_iterations=args.max_iterations, - runs_per_query=args.runs_per_query, - trigger_threshold=args.trigger_threshold, - holdout=args.holdout, - model=args.model, - verbose=args.verbose, - live_report_path=live_report_path, - log_dir=log_dir, - ) - - # Save JSON output - json_output = json.dumps(output, indent=2) - print(json_output) - if results_dir: - (results_dir / "results.json").write_text(json_output) - - # Write final HTML report (without auto-refresh) - if live_report_path: - live_report_path.write_text(generate_html(output, auto_refresh=False, skill_name=name)) - print(f"\nReport: {live_report_path}", file=sys.stderr) - - if results_dir and live_report_path: - (results_dir / "report.html").write_text(generate_html(output, auto_refresh=False, skill_name=name)) - - if results_dir: - print(f"Results saved to: {results_dir}", file=sys.stderr) - - -if __name__ == "__main__": - main() diff --git a/.skills/skill-creator/scripts/utils.py b/.skills/skill-creator/scripts/utils.py deleted file mode 100644 index 51b6a07dd5..0000000000 --- a/.skills/skill-creator/scripts/utils.py +++ /dev/null @@ -1,47 +0,0 @@ -"""Shared utilities for skill-creator scripts.""" - -from pathlib import Path - - - -def parse_skill_md(skill_path: Path) -> tuple[str, str, str]: - """Parse a SKILL.md file, returning (name, description, full_content).""" - content = (skill_path / "SKILL.md").read_text() - lines = content.split("\n") - - if lines[0].strip() != "---": - raise ValueError("SKILL.md missing frontmatter (no opening ---)") - - end_idx = None - for i, line in enumerate(lines[1:], start=1): - if line.strip() == "---": - end_idx = i - break - - if end_idx is None: - raise ValueError("SKILL.md missing frontmatter (no closing ---)") - - name = "" - description = "" - frontmatter_lines = lines[1:end_idx] - i = 0 - while i < len(frontmatter_lines): - line = frontmatter_lines[i] - if line.startswith("name:"): - name = line[len("name:"):].strip().strip('"').strip("'") - elif line.startswith("description:"): - value = line[len("description:"):].strip() - # Handle YAML multiline indicators (>, |, >-, |-) - if value in (">", "|", ">-", "|-"): - continuation_lines: list[str] = [] - i += 1 - while i < len(frontmatter_lines) and (frontmatter_lines[i].startswith(" ") or frontmatter_lines[i].startswith("\t")): - continuation_lines.append(frontmatter_lines[i].strip()) - i += 1 - description = " ".join(continuation_lines) - continue - else: - description = value.strip('"').strip("'") - i += 1 - - return name, description, content diff --git a/.skills/writing-skills/SKILL.md b/.skills/writing-skills/SKILL.md deleted file mode 100644 index 514e2c4fed..0000000000 --- a/.skills/writing-skills/SKILL.md +++ /dev/null @@ -1,97 +0,0 @@ ---- -name: writing-skills -description: "Use when creating, updating, or improving agent skills." ---- - -# Writing Skills (Excellence) - -Dispatcher for skill creation excellence. Use the decision tree below to find the right template and standards. - -## Quick Decision Tree - -### What do you need to do? - -1. **Create a NEW skill:** - - Is it simple (single file, <200 lines)? -> [Tier 1 Architecture](references/tier-1-simple/README.md) - - Is it complex (multi-concept, 200-1000 lines)? -> [Tier 2 Architecture](references/tier-2-expanded/README.md) - - Is it a massive platform (10+ products, AWS, Convex)? -> [Tier 3 Architecture](references/tier-3-platform/README.md) - -2. **Improve an EXISTING skill:** - - Fix "it's too long" -> [Modularize (Tier 3)](references/templates/tier-3-platform.md) - - Fix "AI ignores rules" -> [Anti-Rationalization](references/anti-rationalization/README.md) - - Fix "users can't find it" -> [CSO (Search Optimization)](references/cso/README.md) - -3. **Verify Compliance:** - - Check metadata/naming -> [Standards](references/standards/README.md) - - Add tests -> [Testing Guide](references/testing/README.md) - -## Component Index - -| Component | Purpose | -|-----------|---------| -| **[CSO](references/cso/README.md)** | "SEO for LLMs". How to write descriptions that trigger. | -| **[Standards](references/standards/README.md)** | File naming, YAML frontmatter, directory structure. | -| **[Anti-Rationalization](references/anti-rationalization/README.md)**| How to write rules that agents won't ignore. | -| **[Testing](references/testing/README.md)** | How to ensure your skill actually works. | - -## Templates - -- [Technique Skill](references/templates/technique.md) (How-to) -- [Reference Skill](references/templates/reference.md) (Docs) -- [Discipline Skill](references/templates/discipline.md) (Rules) -- [Pattern Skill](references/templates/pattern.md) (Design Patterns) - -## When to Use -- Creating a NEW skill from scratch -- Improving an EXISTING skill that agents ignore -- Debugging why a skill isn't being triggered -- Standardizing skills across a team - -## How It Works - -1. **Identify goal** -> Use decision tree above -2. **Select template** -> From `references/templates/` -3. **Apply CSO** -> Optimize description for discovery -4. **Add anti-rationalization** -> For discipline skills -5. **Test** -> RED-GREEN-REFACTOR cycle - -## Quick Example - -```yaml ---- -name: my-technique -description: Use when [specific symptom occurs]. -metadata: - category: technique - triggers: error-text, symptom, tool-name ---- - -# My Technique - -## When to Use -- [Symptom A] -- [Error message] -``` - -## Common Mistakes - -| Mistake | Fix | -|---------|-----| -| Description summarizes workflow | Use "Use when..." triggers only | -| No `metadata.triggers` | Add 3+ keywords | -| Generic name ("helper") | Use gerund (`creating-skills`) | -| Long monolithic SKILL.md | Split into `references/` | - -See [gotchas.md](gotchas.md) for more. - -## Pre-Deploy Checklist - -Before deploying any skill: - -- [ ] `name` field matches directory name exactly -- [ ] `SKILL.md` filename is ALL CAPS -- [ ] Description starts with "Use when..." -- [ ] `metadata.triggers` has 3+ keywords -- [ ] Total lines < 500 (use `references/` for more) -- [ ] No `@` force-loading in cross-references -- [ ] Tested with real scenarios diff --git a/.skills/writing-skills/examples.md b/.skills/writing-skills/examples.md deleted file mode 100644 index 3f0ee6817a..0000000000 --- a/.skills/writing-skills/examples.md +++ /dev/null @@ -1,236 +0,0 @@ -# Skill Templates & Examples - -Complete, copy-paste templates for each skill type. - ---- - -## Template: Technique Skill - -For how-to guides that teach a specific method. - -```markdown ---- -name: technique-name -description: >- - Use when [specific symptom]. -metadata: - category: technique - triggers: error-text, symptom, tool-name ---- - -# Technique Name - -## Overview - -[1-2 sentence core principle] - -## When to Use - -- [Symptom A] -- [Symptom B] -- [Error message text] - -**NOT for:** -- [When to avoid] - -## The Problem - -\`\`\`javascript -// Bad example -function badCode() { - // problematic pattern -} -\`\`\` - -## The Solution - -\`\`\`javascript -// Good example -function goodCode() { - // improved pattern -} -\`\`\` - -## Step-by-Step - -1. [First step] -2. [Second step] -3. [Final step] - -## Quick Reference - -| Scenario | Approach | -|----------|----------| -| Case A | Solution A | -| Case B | Solution B | - -## Common Mistakes - -**Mistake 1:** [Description] -- Wrong: \`bad code\` -- Right: \`good code\` -``` - ---- - -## Template: Reference Skill - -For documentation, APIs, and lookup tables. - -```markdown ---- -name: reference-name -description: >- - Use when working with [domain]. -metadata: - category: reference - triggers: tool, api, specific-terms ---- - -# Reference Name - -## Quick Reference - -| Command | Purpose | -|---------|---------| -| \`cmd1\` | Does X | -| \`cmd2\` | Does Y | - -## Common Patterns - -**Pattern A:** -\`\`\`bash -example command -\`\`\` - -**Pattern B:** -\`\`\`bash -another example -\`\`\` - -## Detailed Docs - -For more options, run \`--help\` or see: -- patterns.md -- [examples.md](examples.md) -``` - ---- - -## Template: Discipline Skill - -For rules that agents must follow. Requires anti-rationalization techniques. - -```markdown ---- -name: discipline-name -description: >- - Use when [BEFORE violation]. -metadata: - category: discipline - triggers: new feature, code change, implementation ---- - -# Rule Name - -## Iron Law - -**[SINGLE SENTENCE ABSOLUTE RULE]** - -Violating the letter IS violating the spirit. - -## The Rule - -1. ALWAYS [step 1] -2. NEVER [step 2] -3. [Step 3] - -## Violations - -[Action before rule]? **Delete it. Start over.** - -**No exceptions:** -- Don't keep it as "reference" -- Don't "adapt" it -- Delete means delete - -## Common Rationalizations - -| Excuse | Reality | -|--------|---------| -| "Too simple" | Simple code breaks. Rule takes 30 seconds. | -| "I'll do it after" | After = never. Do it now. | -| "Spirit not ritual" | The ritual IS the spirit. | - -## Red Flags - STOP - -- [Flag 1] -- [Flag 2] -- "This is different because..." - -**All mean:** Delete. Start over. - -## Valid Exceptions - -- [Exception 1] -- [Exception 2] - -**Everything else:** Follow the rule. -``` - ---- - -## Template: Pattern Skill - -For mental models and design patterns. - -```markdown ---- -name: pattern-name -description: >- - Use when [recognizable symptom]. -metadata: - category: pattern - triggers: complexity, hard-to-follow, nested ---- - -# Pattern Name - -## The Pattern - -[1-2 sentence core idea] - -## Recognition Signs - -- [Sign that pattern applies] -- [Another sign] -- [Code smell] - -## Before - -\`\`\`typescript -// Complex/problematic -function before() { - // nested, confusing -} -\`\`\` - -## After - -\`\`\`typescript -// Clean/improved -function after() { - // flat, clear -} -\`\`\` - -## When NOT to Use - -- [Over-engineering case] -- [Simple case that doesn't need it] - -## Impact - -**Before:** [Problem metric] -**After:** [Improved metric] -``` diff --git a/.skills/writing-skills/gotchas.md b/.skills/writing-skills/gotchas.md deleted file mode 100644 index df68732201..0000000000 --- a/.skills/writing-skills/gotchas.md +++ /dev/null @@ -1,175 +0,0 @@ ---- -description: Common pitfalls and tribal knowledge for skill creation. -metadata: - tags: [gotchas, troubleshooting, mistakes] ---- - -# Skill Writing Gotchas - -Tribal knowledge to avoid common mistakes. - -## YAML Frontmatter - -### Invalid Syntax - -```yaml -# BAD: Mixed list and map -metadata: - references: - triggers: a, b, c - - item1 - - item2 - -# GOOD: Consistent structure -metadata: - triggers: a, b, c - references: - - item1 - - item2 -``` - -### Multiline Description - -```yaml -# BAD: Line breaks create parsing errors -description: Use when creating skills. - Also for updating. - -# GOOD: Use YAML multiline syntax -description: >- - Use when creating or updating skills. - Triggers: new skill, update skill -``` - -## Naming - -### Directory Must Match `name` Field - -``` -# BAD -directory: my-skill/ -name: mySkill # Mismatch! - -# GOOD -directory: my-skill/ -name: my-skill # Exact match -``` - -### SKILL.md Must Be ALL CAPS - -``` -# BAD -skill.md -Skill.md - -# GOOD -SKILL.md -``` - -## Discovery - -### Description = Triggers, NOT Workflow - -```yaml -# BAD: Agent reads this and skips the full skill -description: Analyzes code, finds bugs, suggests fixes - -# GOOD: Agent reads full skill to understand workflow -description: Use when debugging errors or reviewing code quality -``` - -### Pre-Violation Triggers for Discipline Skills - -```yaml -# BAD: Triggers AFTER violation -description: Use when you forgot to write tests - -# GOOD: Triggers BEFORE violation -description: Use when implementing any feature, before writing code -``` - -## Token Efficiency - -### Skill Loaded Every Conversation = Token Drain - -- Frequently-loaded skills: <200 words -- All others: <500 words -- Move details to `references/` files - -### Don't Duplicate CLI Help - -```markdown -# BAD: 50 lines documenting all flags - -# GOOD: One line -Run `mytool --help` for all options. -``` - -## Anti-Rationalization (Discipline Skills Only) - -### Agents Are Smart at Finding Loopholes - -```markdown -# BAD: Trust agents will "get the spirit" -Write test before code. - -# GOOD: Close every loophole explicitly -Write test before code. - -**No exceptions:** -- Don't keep code as "reference" -- Don't "adapt" existing code -- Delete means delete -``` - -### Build Rationalization Table - -Every excuse from baseline testing goes in the table: - -| Excuse | Reality | -|--------|---------| -| "Too simple to test" | Simple code breaks. Test takes 30 seconds. | -| "I'll test after" | Tests-after prove nothing immediately. | - -## Cross-References - -### Keep References One Level Deep - -```markdown -# BAD: Nested chain (A -> B -> C) -See [patterns.md] -> which links to [advanced.md] -> which links to [deep.md] - -# GOOD: Flat (A -> B, A -> C) -See [patterns.md] and [advanced.md] -``` - -### Never Force-Load with @ - -```markdown -# BAD: Burns context immediately -@skills/my-skill/SKILL.md - -# GOOD: Agent loads when needed -See [my-skill] for details. -``` - -## Tier Selection - -### Don't Overthink Tier Choice - -```markdown -# BAD: Starting with Tier 3 "just in case" -# Result: Wasted effort, empty reference files - -# GOOD: Start with Tier 1, upgrade when needed -# Can always add references/ later -``` - -### Signals You Need to Upgrade - -| Signal | Action | -|--------|--------| -| SKILL.md > 200 lines | -> Tier 2 | -| 3+ related sub-topics | -> Tier 2 | -| 10+ products/services | -> Tier 3 | -| "I need X" vs "I want Y" | -> Tier 3 decision trees | diff --git a/.skills/writing-skills/persuasion-principles.md b/.skills/writing-skills/persuasion-principles.md deleted file mode 100644 index 311e57d4aa..0000000000 --- a/.skills/writing-skills/persuasion-principles.md +++ /dev/null @@ -1,86 +0,0 @@ -# Persuasion Principles for Skill Design - -## Overview - -LLMs respond to the same persuasion principles as humans. Understanding this psychology helps you design more effective skills - not to manipulate, but to ensure critical practices are followed even under pressure. - -**Research foundation:** Meincke et al. (2025) tested 7 persuasion principles with N=28,000 AI conversations. Persuasion techniques more than doubled compliance rates (33% to 72%, p < .001). - -## The Seven Principles - -### 1. Authority -**What it is:** Deference to expertise, credentials, or official sources. - -**How it works in skills:** -- Imperative language: "YOU MUST", "Never", "Always" -- Non-negotiable framing: "No exceptions" -- Eliminates decision fatigue and rationalization - -**When to use:** -- Discipline-enforcing skills (TDD, verification requirements) -- Safety-critical practices -- Established best practices - -### 2. Commitment -**What it is:** Consistency with prior actions, statements, or public declarations. - -**How it works in skills:** -- Require announcements: "Announce skill usage" -- Force explicit choices: "Choose A, B, or C" -- Use tracking: TodoWrite for checklists - -### 3. Scarcity -**What it is:** Urgency from time limits or limited availability. - -**How it works in skills:** -- Time-bound requirements: "Before proceeding" -- Sequential dependencies: "Immediately after X" -- Prevents procrastination - -### 4. Social Proof -**What it is:** Conformity to what others do or what's considered normal. - -**How it works in skills:** -- Universal patterns: "Every time", "Always" -- Failure modes: "X without Y = failure" -- Establishes norms - -### 5. Unity -**What it is:** Shared identity, "we-ness", in-group belonging. - -**How it works in skills:** -- Collaborative language: "our codebase", "we're colleagues" -- Shared goals: "we both want quality" - -### 6. Reciprocity -**What it is:** Obligation to return benefits received. -- Use sparingly - can feel manipulative -- Rarely needed in skills - -### 7. Liking -**What it is:** Preference for cooperating with those we like. -- **DON'T USE for compliance** -- Conflicts with honest feedback culture - -## Principle Combinations by Skill Type - -| Skill Type | Use | Avoid | -|------------|-----|-------| -| Discipline-enforcing | Authority + Commitment + Social Proof | Liking, Reciprocity | -| Guidance/technique | Moderate Authority + Unity | Heavy authority | -| Collaborative | Unity + Commitment | Authority, Liking | -| Reference | Clarity only | All persuasion | - -## Ethical Use - -**Legitimate:** -- Ensuring critical practices are followed -- Creating effective documentation -- Preventing predictable failures - -**The test:** Would this technique serve the user's genuine interests if they fully understood it? - -## Research Citations - -**Cialdini, R. B. (2021).** *Influence: The Psychology of Persuasion (New and Expanded).* Harper Business. -**Meincke, L., et al. (2025).** Call Me A Jerk: Persuading AI to Comply with Objectionable Requests. University of Pennsylvania. diff --git a/.skills/writing-skills/references/anti-rationalization/README.md b/.skills/writing-skills/references/anti-rationalization/README.md deleted file mode 100644 index 92ee74e4ae..0000000000 --- a/.skills/writing-skills/references/anti-rationalization/README.md +++ /dev/null @@ -1,85 +0,0 @@ -# Anti-Rationalization Guide - -Techniques for bulletproofing skills against agent rationalization. - -## The Problem - -Discipline-enforcing skills face a unique challenge: smart agents under pressure will find loopholes. - -## Technique 1: Close Every Loophole Explicitly - -Don't just state the rule - forbid specific workarounds. - -### Bad Example -```markdown -Write code before test? Delete it. -``` - -### Good Example -```markdown -Write code before test? Delete it. Start over. - -**No exceptions**: -- Don't keep it as "reference" -- Don't "adapt" it while writing tests -- Don't look at it -- Delete means delete -``` - -## Technique 2: Address "Spirit vs Letter" Arguments - -Add foundational principle early: - -```markdown -**Violating the letter of the rules is violating the spirit of the rules.** -``` - -## Technique 3: Build Rationalization Table - -| Excuse | Reality | -|--------|---------| -| "Too simple to test" | Simple code breaks. Test takes 30 seconds. | -| "I'll test after" | Tests passing immediately prove nothing. | -| "Spirit not ritual" | The letter IS the spirit. | - -## Technique 4: Create Red Flags List - -```markdown -## Red Flags - STOP and Start Over -- Code before test -- "I already manually tested it" -- "This is different because..." - -**All of these mean**: Delete code. Start over. -``` - -## Technique 5: Use Strong Language - -```markdown -# Weak (invites rationalization) -You should write tests first. - -# Strong (no wiggle room) -ALWAYS write test first. -NEVER write code before test. -``` - -## Technique 6: Provide Escape Hatch for Legitimate Cases - -```markdown -## When NOT to Use -- Spike solutions (throwaway exploratory code) -- One-time scripts deleting in 1 hour - -**Everything else**: Follow the rule. No exceptions. -``` - -## Complete Bulletproofing Checklist - -- [ ] Forbidden each specific workaround explicitly? -- [ ] Added "spirit vs letter" principle? -- [ ] Built rationalization table from baseline tests? -- [ ] Created red flags list? -- [ ] Used strong language (ALWAYS/NEVER)? -- [ ] Provided explicit escape hatch? -- [ ] Description includes pre-violation symptoms? diff --git a/.skills/writing-skills/references/cso/README.md b/.skills/writing-skills/references/cso/README.md deleted file mode 100644 index f8b6bd31b9..0000000000 --- a/.skills/writing-skills/references/cso/README.md +++ /dev/null @@ -1,90 +0,0 @@ -# CSO Guide - Claude Search Optimization - -Advanced techniques for making skills discoverable by agents. - -## The Discovery Problem - -You have 100+ skills. Agent receives a task. How does it find the RIGHT skill? - -**Answer**: The `description` field. - -## Critical Rule: Description = Triggers, NOT Workflow - -### The Trap - -When description summarizes workflow, agents take a shortcut. - -**Real example that failed**: - -```yaml -# Agent did ONE review instead of TWO -description: Code review between tasks - -# Skill body had flowchart showing TWO reviews -``` - -**Why it failed**: Agent read description, thought "code review between tasks means one review", never read the flowchart. - -**Fix**: - -```yaml -# Agent now reads full skill and follows flowchart -description: Use when executing implementation plans with independent tasks -``` - -### The Pattern - -```yaml -# BAD: Workflow summary -description: Analyzes git diff, generates commit message in conventional format - -# GOOD: Trigger conditions only -description: Use when generating commit messages or reviewing staged changes -``` - -## Token Efficiency - -**Target word counts**: -- Frequently-loaded skills: <200 words total -- Other skills: <500 words - -## Keyword Strategy - -### Error Messages -Include EXACT error text users will see. - -### Symptoms -Use words users naturally say: "flaky", "hangs", "slow", "timeout", "race condition" - -### Tools & Commands -Actual names, not descriptions: "pytest", not "Python testing" - -### Synonyms -Cover multiple ways to describe same thing: timeout/hang/freeze - -## Description Template - -```yaml -description: "Use when [SPECIFIC TRIGGER]." -metadata: - triggers: [error1], [symptom2], [tool3] -``` - -## Third Person Rule - -```yaml -# BAD: First person -description: "I can help you with async tests" - -# GOOD: Third person -description: "Handles async tests with race conditions" -``` - -## Verification Checklist - -- [ ] Description starts with "Use when..."? -- [ ] Description is <500 characters? -- [ ] Description lists ONLY triggers, not workflow? -- [ ] Includes 3+ keywords (errors/symptoms/tools)? -- [ ] Third person throughout? -- [ ] Name uses gerund or verb-first format? diff --git a/.skills/writing-skills/references/standards/README.md b/.skills/writing-skills/references/standards/README.md deleted file mode 100644 index 31d10a814f..0000000000 --- a/.skills/writing-skills/references/standards/README.md +++ /dev/null @@ -1,87 +0,0 @@ ---- -description: Standards and naming rules for creating agent skills. -metadata: - tags: [standards, naming, yaml, structure] ---- - -# Skill Development Guide - -## Directory Structure - -``` -skills/ - {skill-name}/ # kebab-case, matches `name` field - SKILL.md # Required: main skill definition - references/ # Optional: supporting documentation - README.md # Sub-topic entry point - *.md # Additional files -``` - -## Naming Rules - -| Element | Rule | Example | -|---------|------|---------| -| Directory | kebab-case, 1-64 chars | `react-best-practices` | -| `SKILL.md` | ALL CAPS, exact filename | `SKILL.md` (not `skill.md`) | -| `name` field | Must match directory name | `name: react-best-practices` | - -## SKILL.md Structure - -```markdown ---- -name: {skill-name} -description: >- - Use when [trigger condition]. -metadata: - category: technique - triggers: keyword1, keyword2, error-text ---- - -# Skill Title - -Brief description of what this skill does. - -## When to Use -- Symptom or situation A -- Symptom or situation B - -## How It Works -Step-by-step instructions or reference content. - -## Examples -Concrete usage examples. - -## Common Mistakes -What to avoid and why. -``` - -## Description Best Practices - -```yaml -# BAD: Workflow summary -description: Analyzes code, finds bugs, suggests fixes - -# GOOD: Trigger conditions only -description: Use when debugging errors or reviewing code quality. -``` - -**Rules:** -- Start with "Use when..." -- Keep under 500 characters -- Use third person - -## Context Efficiency - -| Guideline | Reason | -|-----------|--------| -| Keep SKILL.md < 500 lines | Reduces context consumption | -| Put details in supporting files | Agent reads only what's needed | -| Use tables for reference data | More compact than prose | - -## Verification Checklist - -- [ ] `name` matches directory name? -- [ ] `SKILL.md` is ALL CAPS? -- [ ] Description starts with "Use when..."? -- [ ] Under 500 lines? -- [ ] Tested with real scenarios? diff --git a/.skills/writing-skills/references/standards/metadata-standard.md b/.skills/writing-skills/references/standards/metadata-standard.md deleted file mode 100644 index e3fadddb4d..0000000000 --- a/.skills/writing-skills/references/standards/metadata-standard.md +++ /dev/null @@ -1,39 +0,0 @@ -# SKILL.md Metadata Standard - -Official frontmatter fields. - -## Required Fields - -```yaml ---- -name: skill-name -description: >- - Use when [trigger condition]. ---- -``` - -| Field | Rules | -|-------|-------| -| `name` | 1-64 chars, lowercase, hyphens only, must match directory name | -| `description` | 1-1024 chars, should describe when to use | - -## Optional Fields - -```yaml ---- -name: skill-name -description: Purpose and triggers. -metadata: - category: "reference" - version: "1.0.0" ---- -``` - -## Name Validation - -```regex -^[a-z0-9]+(-[a-z0-9]+)*$ -``` - -**Valid**: `my-skill`, `git-release`, `tdd` -**Invalid**: `My-Skill`, `my_skill`, `-my-skill` diff --git a/.skills/writing-skills/references/templates/discipline.md b/.skills/writing-skills/references/templates/discipline.md deleted file mode 100644 index ed54e4b42a..0000000000 --- a/.skills/writing-skills/references/templates/discipline.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -name: discipline-name -description: >- - Use when [BEFORE violation]. -metadata: - category: discipline - triggers: new feature, code change, implementation ---- - -# Rule Name - -## Iron Law - -**[SINGLE SENTENCE ABSOLUTE RULE]** - -Violating the letter IS violating the spirit. - -## The Rule - -1. ALWAYS [step 1] -2. NEVER [step 2] -3. [Step 3] - -## Violations - -[Action before rule]? **Delete it. Start over.** - -**No exceptions:** -- Don't keep it as "reference" -- Don't "adapt" it -- Delete means delete - -## Common Rationalizations - -| Excuse | Reality | -|--------|---------| -| "Too simple" | Simple code breaks. Rule takes 30 seconds. | -| "I'll do it after" | After = never. Do it now. | -| "Spirit not ritual" | The ritual IS the spirit. | - -## Red Flags - STOP - -- [Flag 1] -- [Flag 2] -- "This is different because..." - -**All mean:** Delete. Start over. - -## Valid Exceptions - -- [Exception 1] -- [Exception 2] - -**Everything else:** Follow the rule. diff --git a/.skills/writing-skills/references/templates/pattern.md b/.skills/writing-skills/references/templates/pattern.md deleted file mode 100644 index 777bc26906..0000000000 --- a/.skills/writing-skills/references/templates/pattern.md +++ /dev/null @@ -1,48 +0,0 @@ ---- -name: pattern-name -description: >- - Use when [recognizable symptom]. -metadata: - category: pattern - triggers: complexity, hard-to-follow, nested ---- - -# Pattern Name - -## The Pattern - -[1-2 sentence core idea] - -## Recognition Signs - -- [Sign that pattern applies] -- [Another sign] -- [Code smell] - -## Before - -```typescript -// Complex/problematic -function before() { - // nested, confusing -} -``` - -## After - -```typescript -// Clean/improved -function after() { - // flat, clear -} -``` - -## When NOT to Use - -- [Over-engineering case] -- [Simple case that doesn't need it] - -## Impact - -**Before:** [Problem metric] -**After:** [Improved metric] diff --git a/.skills/writing-skills/references/templates/reference.md b/.skills/writing-skills/references/templates/reference.md deleted file mode 100644 index 66342eee1d..0000000000 --- a/.skills/writing-skills/references/templates/reference.md +++ /dev/null @@ -1,35 +0,0 @@ ---- -name: reference-name -description: >- - Use when working with [domain]. -metadata: - category: reference - triggers: tool, api, specific-terms ---- - -# Reference Name - -## Quick Reference - -| Command | Purpose | -|---------|---------| -| `cmd1` | Does X | -| `cmd2` | Does Y | - -## Common Patterns - -**Pattern A:** -```bash -example command -``` - -**Pattern B:** -```bash -another example -``` - -## Detailed Docs - -For more options, run `--help` or see: -- patterns.md -- examples.md diff --git a/.skills/writing-skills/references/templates/technique.md b/.skills/writing-skills/references/templates/technique.md deleted file mode 100644 index 336c62a78e..0000000000 --- a/.skills/writing-skills/references/templates/technique.md +++ /dev/null @@ -1,59 +0,0 @@ ---- -name: technique-name -description: Use when [specific symptom]. -metadata: - category: technique - triggers: error-text, symptom, tool-name ---- - -# Technique Name - -## Overview - -[1-2 sentence core principle] - -## When to Use - -- [Symptom A] -- [Symptom B] -- [Error message text] - -**NOT for:** -- [When to avoid] - -## The Problem - -```javascript -// Bad example -function badCode() { - // problematic pattern -} -``` - -## The Solution - -```javascript -// Good example -function goodCode() { - // improved pattern -} -``` - -## Step-by-Step - -1. [First step] -2. [Second step] -3. [Final step] - -## Quick Reference - -| Scenario | Approach | -|----------|----------| -| Case A | Solution A | -| Case B | Solution B | - -## Common Mistakes - -**Mistake 1:** [Description] -- Wrong: `bad code` -- Right: `good code` diff --git a/.skills/writing-skills/references/templates/tier-3-platform.md b/.skills/writing-skills/references/templates/tier-3-platform.md deleted file mode 100644 index 4863345e82..0000000000 --- a/.skills/writing-skills/references/templates/tier-3-platform.md +++ /dev/null @@ -1,17 +0,0 @@ -# Platform Name Skill - -Template for complex Tier 3 skills. - -## Structure - -``` -skill/ - SKILL.md # Dispatcher - references/ - topic/ - README.md # Overview - api.md # API Reference - config.md # Configuration - patterns.md # Recipes - gotchas.md # Critical Errors -``` diff --git a/.skills/writing-skills/references/testing/README.md b/.skills/writing-skills/references/testing/README.md deleted file mode 100644 index e089340401..0000000000 --- a/.skills/writing-skills/references/testing/README.md +++ /dev/null @@ -1,66 +0,0 @@ -# Testing Guide - TDD for Skills - -Complete methodology for testing skills using RED-GREEN-REFACTOR cycle. - -## Testing All Skill Types - -### Discipline-Enforcing Skills (rules/requirements) - -**Test with**: -- Academic questions: Do they understand the rules? -- Pressure scenarios: Do they comply under stress? -- Multiple pressures combined: time + sunk cost + exhaustion - -**Success criteria**: Agent follows rule under maximum pressure - -### Technique Skills (how-to guides) - -**Test with**: -- Application scenarios: Can they apply the technique correctly? -- Variation scenarios: Do they handle edge cases? -- Missing information tests: Do instructions have gaps? - -**Success criteria**: Agent successfully applies technique to new scenario - -### Pattern Skills (mental models) - -**Test with**: -- Recognition scenarios: Do they recognize when pattern applies? -- Counter-examples: Do they know when NOT to apply? - -**Success criteria**: Agent correctly identifies when/how to apply pattern - -### Reference Skills (documentation/APIs) - -**Test with**: -- Retrieval scenarios: Can they find the right information? -- Gap testing: Are common use cases covered? - -**Success criteria**: Agent finds and correctly applies reference information - -## Pressure Types for Testing - -| Pressure | Example | -|----------|---------| -| Time | "You have 5 minutes to complete this task" | -| Sunk cost | "You already spent 2 hours on this" | -| Authority | "Senior developer said to skip tests" | -| Exhaustion | "This is the 10th task today" | - -## Complete Test Checklist - -**Baseline (RED)**: -- [ ] Designed 3+ pressure scenarios -- [ ] Ran scenarios WITHOUT skill -- [ ] Documented verbatim agent responses - -**Implementation (GREEN)**: -- [ ] Skill addresses SPECIFIC baseline failures -- [ ] Re-ran scenarios WITH skill -- [ ] Agent complied in all scenarios - -**Bulletproofing (REFACTOR)**: -- [ ] Tested with combined pressures -- [ ] Found and documented new rationalizations -- [ ] Added explicit counters -- [ ] Re-tested until no more loopholes diff --git a/.skills/writing-skills/references/tier-1-simple/README.md b/.skills/writing-skills/references/tier-1-simple/README.md deleted file mode 100644 index 6f049adf7b..0000000000 --- a/.skills/writing-skills/references/tier-1-simple/README.md +++ /dev/null @@ -1,30 +0,0 @@ ---- -description: When to use Tier 1 (Simple) skill architecture. -metadata: - tags: [tier-1, simple, single-file] ---- - -# Tier 1: Simple Skills - -Single-file skills for focused, specific purposes. - -## When to Use - -- **Single concept**: One technique, one pattern, one reference -- **Under 200 lines**: Can fit comfortably in one file -- **No complex decision logic**: User knows exactly what they need -- **Frequently loaded**: Needs minimal token footprint - -## Structure - -``` -my-skill/ - SKILL.md # Everything in one file -``` - -## Checklist - -- [ ] Fits in <200 lines -- [ ] Single focused purpose -- [ ] No need for `references/` directory -- [ ] Description uses "Use when..." pattern diff --git a/.skills/writing-skills/references/tier-2-expanded/README.md b/.skills/writing-skills/references/tier-2-expanded/README.md deleted file mode 100644 index 9e31e8f7b0..0000000000 --- a/.skills/writing-skills/references/tier-2-expanded/README.md +++ /dev/null @@ -1,52 +0,0 @@ ---- -description: When to use Tier 2 (Expanded) skill architecture. -metadata: - tags: [tier-2, expanded, multi-file] ---- - -# Tier 2: Expanded Skills - -Multi-file skills for complex topics with multiple sub-concepts. - -## When to Use - -- **Multiple related concepts**: Needs separation of concerns -- **200-1000 lines total**: Too big for one file -- **Needs reference files**: Patterns, examples, troubleshooting -- **Cross-linking**: Users need to navigate between sub-topics - -## Structure - -``` -my-skill/ - SKILL.md # Overview + navigation - references/ - core/ - README.md # Main concept - patterns/ - README.md # Usage patterns - troubleshooting/ - README.md # Common issues -``` - -## Progressive Disclosure - -1. **Metadata** (~100 tokens): Name + description loaded at startup -2. **SKILL.md** (<500 lines): Decision tree + index -3. **References** (as needed): Loaded only when user navigates - -## Key Differences from Tier 1 - -| Aspect | Tier 1 | Tier 2 | -|--------|--------|--------| -| Files | 1 | 5-20 | -| Total lines | <200 | 200-1000 | -| Decision logic | None | Simple tree | -| Token cost | Minimal | Medium (progressive) | - -## Checklist - -- [ ] SKILL.md has clear navigation links -- [ ] Each `references/` subdir has README.md -- [ ] No circular references between files -- [ ] Decision tree points to specific files diff --git a/.skills/writing-skills/references/tier-3-platform/README.md b/.skills/writing-skills/references/tier-3-platform/README.md deleted file mode 100644 index 224c709dcf..0000000000 --- a/.skills/writing-skills/references/tier-3-platform/README.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -description: When to use Tier 3 (Platform) skill architecture for large platforms. -metadata: - tags: [tier-3, platform, enterprise] ---- - -# Tier 3: Platform Skills - -Enterprise-grade skills for entire platforms (AWS, Cloudflare, Convex, etc). - -## When to Use - -- **Entire platform**: 10+ products/services -- **1000+ lines total**: Would overwhelm context if monolithic -- **Complex decision logic**: Users start with "I need X" not "I want product Y" - -## The 5-File Pattern - -Each product directory has exactly 5 files: - -| File | Purpose | When to Load | -|------|---------|--------------| -| `README.md` | Overview, when to use | Always first | -| `api.md` | Runtime APIs, methods | Implementing features | -| `configuration.md` | Config, environment | Setting up | -| `patterns.md` | Common workflows | Best practices | -| `gotchas.md` | Pitfalls, limits | Debugging | - -## Decision Trees - -```markdown -Need to store data? - Simple key-value -> kv/ - Relational queries -> d1/ - Large files/blobs -> r2/ - Per-user state -> durable-objects/ -``` - -## Progressive Disclosure in Action - -- **Startup**: Only name + description (~100 tokens) -- **Activation**: SKILL.md with trees (<5000 tokens) -- **Navigation**: One product's 5 files (as needed) - -## Checklist - -- [ ] SKILL.md contains ONLY decision trees + index -- [ ] Each product has exactly 5 files -- [ ] Decision trees cover all "I need X" scenarios -- [ ] Cross-references stay one level deep -- [ ] Every product has `gotchas.md` diff --git a/.skills/writing-skills/testing-skills-with-subagents.md b/.skills/writing-skills/testing-skills-with-subagents.md deleted file mode 100644 index 7abecfca93..0000000000 --- a/.skills/writing-skills/testing-skills-with-subagents.md +++ /dev/null @@ -1,85 +0,0 @@ -# Testing Skills With Subagents - -**Load this reference when:** creating or editing skills, before deployment, to verify they work under pressure and resist rationalization. - -## Overview - -**Testing skills is just TDD applied to process documentation.** - -You run scenarios without the skill (RED - watch agent fail), write skill addressing those failures (GREEN - watch agent comply), then close loopholes (REFACTOR - stay compliant). - -**Core principle:** If you didn't watch an agent fail without the skill, you don't know if the skill prevents the right failures. - -## When to Use - -Test skills that: -- Enforce discipline (TDD, testing requirements) -- Have compliance costs (time, effort, rework) -- Could be rationalized away ("just this once") -- Contradict immediate goals (speed over quality) - -Don't test: -- Pure reference skills (API docs, syntax guides) -- Skills without rules to violate -- Skills agents have no incentive to bypass - -## TDD Mapping for Skill Testing - -| TDD Phase | Skill Testing | What You Do | -|-----------|---------------|-------------| -| **RED** | Baseline test | Run scenario WITHOUT skill, watch agent fail | -| **Verify RED** | Capture rationalizations | Document exact failures verbatim | -| **GREEN** | Write skill | Address specific baseline failures | -| **Verify GREEN** | Pressure test | Run scenario WITH skill, verify compliance | -| **REFACTOR** | Plug holes | Find new rationalizations, add counters | -| **Stay GREEN** | Re-verify | Test again, ensure still compliant | - -## RED Phase: Baseline Testing (Watch It Fail) - -**Goal:** Run test WITHOUT the skill - watch agent fail, document exact failures. - -**Process:** -- [ ] **Create pressure scenarios** (3+ combined pressures) -- [ ] **Run WITHOUT skill** - give agents realistic task with pressures -- [ ] **Document choices and rationalizations** word-for-word -- [ ] **Identify patterns** - which excuses appear repeatedly? -- [ ] **Note effective pressures** - which scenarios trigger violations? - -## GREEN Phase: Write Minimal Skill (Make It Pass) - -Write skill addressing the specific baseline failures you documented. Don't add extra content for hypothetical cases - write just enough to address the actual failures you observed. - -Run same scenarios WITH skill. Agent should now comply. - -If agent still fails: skill is unclear or incomplete. Revise and re-test. - -## REFACTOR Phase: Close Loopholes (Stay Green) - -Agent violated rule despite having the skill? Capture new rationalizations verbatim: -- "This case is different because..." -- "I'm following the spirit not the letter" -- "Being pragmatic means adapting" -- "Deleting X hours is wasteful" - -**Document every excuse.** These become your rationalization table. - -## Testing Checklist (TDD for Skills) - -**RED Phase:** -- [ ] Created pressure scenarios (3+ combined pressures) -- [ ] Ran scenarios WITHOUT skill (baseline) -- [ ] Documented agent failures and rationalizations verbatim - -**GREEN Phase:** -- [ ] Wrote skill addressing specific baseline failures -- [ ] Ran scenarios WITH skill -- [ ] Agent now complies - -**REFACTOR Phase:** -- [ ] Identified NEW rationalizations from testing -- [ ] Added explicit counters for each loophole -- [ ] Updated rationalization table -- [ ] Updated red flags list -- [ ] Re-tested - agent still complies -- [ ] Meta-tested to verify clarity -- [ ] Agent follows rule under maximum pressure diff --git a/AGENTS.md b/AGENTS.md index fbeaf096fb..ceb6a81645 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,127 +1,89 @@ # AGENTS.md -## Project -- Minecraft Console Client (MCC) is a cross-platform text/TUI client for Minecraft Java Edition. -- Primary scope: connect to servers, send chat and commands, receive text, automate gameplay/admin tasks, and extend behavior through built-in bots or runtime C# scripts. -- Secondary scope: protocol/version adaptation tooling, docs site, legacy GUI wrapper, and debug tooling. -- Decompiled server source for both the old and new MC versions in `$MCC_REPO/MinecraftOfficial/-decompiled/` - -## Build / Run -- Init submodules first: `git submodule update --init --recursive` -- Build for local development: `source tools/mcc-env.sh && mcc-build` -- Publish (matches CI shape): `source tools/mcc-env.sh && mcc-publish --rid ` -- Run/debug from source: `source tools/mcc-env.sh && mcc-debug -v 1.21.11 --file-input` -- Docs: `cd docs && npm install && npm run docs:dev` or `npm run docs:build` -- Docker: `cd Docker && docker build -t minecraft-console-client:latest .` -- Tests: no dedicated test project is present in the main solution. -- Current state: the solution builds after submodule init, but the underlying .NET build emits many analyzer and NuGet vulnerability warnings; treat them as real. -- Server roots: `tools/` helpers look for server jars under `MinecraftOfficial/downloads//` by default, but also support an external root via the `MCC_SERVERS` environment variable. -- Multi-version testing: tmux-based local server sessions are shared state. Run cross-version test matrices sequentially unless you have explicit per-version isolation. A server logging `Done` does not guarantee immediate RCON availability; retry RCON setup commands. -- Automated test configs: for repeated or matrix test runs, prefer generating a temporary MCC config per run instead of reusing the repo-root `MinecraftClient.ini`, to avoid leaking state between runs. -- For agent-driven local development, prefer `mcc-build`, `mcc-publish`, `mcc-build-clean`, `mcc-debug`, `mcc-run`, and `mcc-tui` over raw `dotnet build`, `dotnet publish`, or `dotnet run`, so worktree-local temp build routing stays active. - -## Architecture -- `Program` bootstraps console I/O, TOML config, auth/session state, MC version selection, Forge detection, then creates `McClient`. -- `McClient` is the live session runtime: TCP client, selected protocol handler, Brigadier command dispatcher, loaded bots, world/inventory/entity state, queued chat, movement/pathing, reconnect flow. -- `Protocol/` is the network/auth boundary. `ProtocolHandler` maps Minecraft versions to protocol numbers and selects either `Protocol16Handler` (1.4.6-1.6.4) or `Protocol18Handler` (1.7.2+). -- `Scripting/ChatBot` is the extension boundary. Built-in bots and `/script` C# bots share the same event/tick API. -- Main runtime flow: console input -> internal Brigadier command or server chat; packets -> protocol handler -> `McClient` state update -> bot events; `OnUpdate()` (20 TPS) drives bot ticks, delayed work, chat cooldowns, movement, and main-thread tasks. - -## Technology Stack -- Main app: C#, .NET 10, nullable enabled. -- Command system: `Brigadier.NET`. -- Config: TOML via `Samboy063.Tomlet`. -- Runtime scripting: Roslyn (`Microsoft.CodeAnalysis.CSharp`) with in-memory compilation. -- Networking/auth: custom Minecraft protocol handlers, DNS SRV lookup (`DnsClient`), Forge/session/profile-key support. -- Integrations: `DSharpPlus`, `Telegram.Bot`, `MessagePack`, `Magick.NET`, `Sentry`. -- Docs site: VuePress 2 (`docs/package.json`). -- Tooling: Docker, GitHub Actions, Python 3.10+ scripts under `tools/` for palette/version generation. -- Legacy UI: `MinecraftClientGUI` is a separate .NET Framework 4.0 WinForms wrapper, not the main runtime. - -## Version Support -Feature columns mean: -- Inventory: `/inventory` plus inventory/container bot APIs -- Movement: terrain handling, `/move`, and movement/pathing bots -- Entity: entity tracking and entity-driven bot events - -| Minecraft | Protocol path | Inventory | Movement | Entity | Notes | -| --- | --- | --- | --- | --- | --- | -| 1.4.6-1.6.4 | `Protocol16Handler` | No | No | No | Core login/chat only | -| 1.7.2-1.7.10 | `Protocol18Handler` | No | Yes | No | Pre-1.8 special case | -| 1.8-1.9.4 | `Protocol18Handler` | Partial / docs conflict | Yes | Yes | Runtime gates allow 1.8+, but docs still warn inventory is unsupported through 1.9 | -| 1.10-1.12.2 | `Protocol18Handler` | Yes | Yes | Yes | Pre-flattening palettes | -| 1.13-1.19.2 | `Protocol18Handler` | Yes | Yes | Yes | Flattened block/item/entity palettes | -| 1.19.3-1.20.4 | `Protocol18Handler` | Yes | Yes | Yes | Newer chat/signing and palette splits | -| 1.20.6-1.21.4 | `Protocol18Handler` | Yes | Yes | Yes | Registry-driven world/attribute handling | -| 1.21.5-1.21.8 | `Protocol18Handler` | Yes | Yes | Yes | 1.21.7/1.21.8 reuse 1.21.6 block/entity palettes in code | -| 1.21.9-1.21.10 | `Protocol18Handler` | Yes | Yes | Yes | Version tools prefer server data reports since 1.21.9 | -| 1.21.11 | `Protocol18Handler` | Yes | Yes | Yes | Own entity/item/metadata palettes; blocks reuse 1.21.9 palette | -| 26.1 | `Protocol18Handler` | Yes | Yes | Yes | New Minecraft version naming scheme | -| 26.2 | `Protocol18Handler` | Yes | Yes | Yes | Latest coded support; own item/block/entity palettes, reuses 26.1 packet IDs and metadata serializers | - -Notes: -- Declared code range is `1.4.6` to `26.2`. -- Human docs are stale in places and sometimes stop at older ranges; prefer code when docs and code disagree. -- Movement/pathing limits called out in docs still apply: no swimming, no knockback. The `Physics/` engine adds vanilla-accurate collision and movement but some edge cases remain. - -## Module Map -### Core Runtime - -| Module | What It Owns | Important Files | -| --- | --- | --- | -| `MinecraftClient/` | Main `net10.0` runtime assembly and the best starting point. `Program.cs` owns startup, config load/writeback, CLI handling, auth/version selection, update/data-generation entrypoints, and restart/failure flow. `McClient.cs` owns the live session runtime: protocol handler ownership, command dispatch, bot lifecycle, world/inventory/entity state, queued chat, movement ticks, reconnect/disconnect logic, and the main-thread invoke queue. `Settings.cs` defines the TOML schema and runtime/internal overrides used across the app. | `Program.cs`, `McClient.cs`, `Settings.cs`, `ConsoleIO.cs`, `Command.cs`, `UpgradeHelper.cs`, `AutoTimeout.cs` | -| `MinecraftClient/Protocol/` | Network/auth/session boundary. `ProtocolHandler.cs` does DNS SRV lookup, server ping/version detection, MC-version to protocol mapping, and handler selection. `Protocol16.cs` and `Protocol18.cs` implement the packet flow for legacy and modern versions. `Protocol18Terrain.cs` decodes chunk sections/biomes into `World`. `DataTypes.cs` is the low-level reader/writer layer for VarInts, metadata, NBT-like structures, and packet fields. `Message/`, `ProfileKey/`, `Session/`, `Handlers/Forge/`, `Handlers/PacketPalettes/`, `Handlers/Packet/`, and `Handlers/StructuredComponents/` cover chat/signing, cached auth, Forge, packet IDs, packet-level parsing, and 1.20.6+ item components with versioned registries under `StructuredComponents/Registries/`. | `Protocol/ProtocolHandler.cs`, `Protocol/Handlers/Protocol16.cs`, `Protocol/Handlers/Protocol18.cs`, `Protocol/Handlers/Protocol18Terrain.cs`, `Protocol/Handlers/DataTypes.cs`, `Protocol/Message/ChatParser.cs`, `Protocol/MicrosoftAuthentication.cs`, `Protocol/MojangAPI.cs` | -| `MinecraftClient/Mapping/` | World model, terrain storage, movement logic, and versioned block/entity metadata. `World.cs` stores chunk columns, dimension data, and 1.20.6+ registry-derived dimension/attribute mappings. `Chunk*`, `Block.cs`, and `Location.cs` are the terrain primitives. `Movement.cs` contains step generation, gravity/on-ground checks, and path execution support. `Material.cs` plus `BlockPalettes/*.cs` map block-state IDs to MCC materials. `Entity.cs`, `EntityType.cs`, `EntityPalettes/*.cs`, `EntityMetadataPalette.cs`, and `EntityMetadataPalettes/*.cs` do the same for entities and metadata serializers. | `Mapping/World.cs`, `Mapping/ChunkColumn.cs`, `Mapping/Chunk.cs`, `Mapping/Block.cs`, `Mapping/Location.cs`, `Mapping/Movement.cs`, `Mapping/RaycastHelper.cs`, `Mapping/Material.cs`, `Mapping/Entity.cs`, `Mapping/EntityType.cs` | -| `MinecraftClient/Inventory/` | Inventory/container snapshots, item decoding, and versioned item registries. `Container.cs` models player inventories and server windows, including slot contents and container properties. `Item.cs` bridges older NBT-based items with 1.20.6+ structured components. `ItemType.cs` plus `ItemPalettes/*.cs` provide version-specific item ID mapping. Enchantment, effects, and villager-trade files add higher-level semantics on top of raw inventory data. | `Inventory/Container.cs`, `Inventory/ContainerType.cs`, `Inventory/Item.cs`, `Inventory/ItemMovingHelper.cs`, `Inventory/ItemType.cs`, `Inventory/ItemPalettes/*.cs`, `Inventory/EnchantmentMapping.cs`, `Inventory/VillagerTrade.cs` | -| `MinecraftClient/Physics/` | Vanilla-accurate per-tick physics engine. `PlayerPhysics.cs` mirrors vanilla `Entity.move()`, `LivingEntity.aiStep()/travel()`, and `Player.travel()` logic at 20 TPS, handling ground/air/water/lava/creative-fly travel, jumping, sprint-jump boost, climbing, sneak-edge-detection, friction, drag, gravity, slow-falling, and levitation. `CollisionDetector.cs` resolves full AABB collisions against the block world including step-up, mirroring vanilla axis-separated resolution. `BlockShapes.cs` maps block-state IDs to collision AABBs using PrismarineJS data from `BlockShapeData.json`. `Vec3d.cs` and `Aabb.cs` provide the geometric primitives. `MovementInput.cs` captures player input state. | `Physics/PlayerPhysics.cs`, `Physics/PhysicsConsts.cs`, `Physics/CollisionDetector.cs`, `Physics/BlockShapes.cs`, `Physics/BlockShapeData.json`, `Physics/Vec3d.cs`, `Physics/Aabb.cs`, `Physics/MovementInput.cs` | - -### Commands And Extensions - -| Module | What It Owns | Important Files | -| --- | --- | --- | -| `MinecraftClient/Commands/` and `MinecraftClient/CommandHandler/` | Internal MCC command system built on Brigadier. Commands are discovered by reflection from `MinecraftClient.Commands` in `McClient.LoadCommands()`. Each file in `Commands/` registers one internal command. `ArgumentType/*.cs` provides typed Brigadier arguments and completion sources for accounts, bots, items, locations, scripts, inventories, and more. `Patch/*.cs` carries MCC-specific Brigadier extensions, and `CmdResult.cs` is the command execution result object. | `Command.cs`, `Commands/*.cs`, `CommandHandler/MccArguments.cs`, `CommandHandler/CmdResult.cs`, `CommandHandler/ArgumentType/*.cs`, `CommandHandler/Patch/*.cs` | -| `MinecraftClient/ChatBots/` | Built-in bots and bridges loaded from config through `McClient.RegisterBots()`. The folder mixes gameplay automation (`AutoAttack`, `AutoDig`, `AutoEat`, `AutoFishing`, `Farmer`), utility/logging bots (`ChatLog`, `PlayerListLogger`, `Alerts`), bridges (`DiscordBridge`, `TelegramBridge`, `RemoteControl`), and tooling like `ScriptScheduler`, `Map`, and `ReplayCapture`. | `ChatBots/AutoRelog.cs`, `ChatBots/Farmer.cs`, `ChatBots/FollowPlayer.cs`, `ChatBots/ItemsCollector.cs`, `ChatBots/Map.cs`, `ChatBots/RemoteControl.cs`, `ChatBots/ScriptScheduler.cs`, `ChatBots/DiscordBridge.cs`, `ChatBots/TelegramBridge.cs`, `ChatBots/ReplayCapture.cs` | -| `MinecraftClient/Scripting/` | Shared extension boundary for compiled bots and runtime C# scripts. `ChatBot.cs` is the main bot API and lifecycle surface. Built-in bots and `/script` bots use the same event model. `CSharpRunner.cs` parses `//MCCScript` files, compiles them with Roslyn, caches assemblies, and executes them through `CSharpAPI`. `DynamicRun/Builder/*` handles in-memory compilation/load-context plumbing, while `BotMovementLock.cs` coordinates movement ownership between automation pieces. | `Scripting/ChatBot.cs`, `Scripting/CSharpRunner.cs`, `Scripting/BotMovementLock.cs`, `Scripting/AssemblyResolver.cs`, `Scripting/DynamicRun/Builder/Compiler.cs`, `Scripting/DynamicRun/Builder/CompileRunner.cs` | -| `MinecraftClient/config/` | Sample runtime assets excluded from compilation. This is the examples/staging area for end-user scripts and standalone bots. `sample-script*.cs` shows supported `/script` patterns (basic, chatbot, world access, HTTP requests, tasks, PM forwarding, extended), while `config/ChatBots/*.cs` are copy/adapt examples rather than built-in bots. | `config/README.md`, `config/sample-script.cs`, `config/sample-script-with-chatbot.cs`, `config/sample-script-with-world-access.cs`, `config/sample-script-with-http-request.cs`, `config/sample-script-with-task.cs`, `config/ChatBots/*.cs` | -| `ConsoleInteractive/` | Required git submodule for richer line editing and console UI. MCC uses the submodule's `ConsoleReader`, `ConsoleWriter`, and suggestion UI from `ConsoleIO.cs` and `McClient.cs` when `BasicIO` is not enabled. | `ConsoleInteractive/README.md`, `ConsoleInteractive/ConsoleInteractive/ConsoleInteractive.sln` | - -### Support And Tooling - -| Module | What It Owns | Important Files | -| --- | --- | --- | -| `MinecraftClient/Logger/`, `MinecraftClient/Proxy/`, `MinecraftClient/Crypto/`, `MinecraftClient/Resources/`, `MinecraftClient/WinAPI/` | Support subsystems under the main app. Logging supports console/file output plus regex filtering. `ProxyHandler.cs` routes update/login/in-game traffic through HTTP or SOCKS proxies. `Crypto/` implements the stream ciphers needed for online-mode protocol encryption. `Resources/` contains UI strings, generated translation accessors, config help text, icons, and embedded Minecraft asset data. `WinAPI/` contains small Windows-only console helpers. | `Logger/FilteredLogger.cs`, `Logger/FileLogLogger.cs`, `Proxy/ProxyHandler.cs`, `Crypto/CryptoHandler.cs`, `Crypto/AesCfb8Stream.cs`, `Resources/Translations/Translations.resx`, `Resources/ConfigComments/ConfigComments.resx`, `Resources/en_us.json`, `WinAPI/ConsoleIcon.cs` | -| `docs/` | VuePress documentation site. `.vuepress/config.ts` sets bundler, theme, plugins, and redirects. `.vuepress/configs/**` holds locale and nav wiring. `guide/*.md` contains the user-facing install, usage, bot, and scripting docs. | `docs/.vuepress/config.ts`, `docs/.vuepress/configs/**`, `docs/guide/README.md`, `docs/guide/configuration.md`, `docs/guide/chat-bots.md`, `docs/guide/creating-bots.md`, `docs/guide/creating-text-script.md`, `docs/guide/ai-assisted-development.md` | -| `tools/` | Python helpers for Minecraft version adaptation and palette generation. `README.md` is the authoritative workflow. `diff_registries.py` compares versions and validates decompiled data against server reports. The `gen_*` scripts emit the versioned palette source files consumed by `Protocol/`, `Mapping/`, `Inventory/`, and `Physics/`. | `tools/README.md`, `tools/diff_registries.py`, `tools/gen_block_palette.py`, `tools/gen_item_palette.py`, `tools/gen_entity_palette.py`, `tools/gen_entity_metadata_palette.py`, `tools/gen_block_shapes.py`, `tools/gen_command_argument_registry.py` | -| `DebugTools/` | Standalone packet/proxy debugging utilities for inspecting traffic and compression behavior outside the main client runtime. | `DebugTools/MinecraftClientProxy/Program.cs`, `DebugTools/MinecraftClientProxy/PacketProxy.cs`, `DebugTools/MinecraftClientProxy/ZlibUtils.cs` | -| `MinecraftClientGUI/` | Legacy Windows GUI wrapper around the console app. WinForms shell that launches and communicates with the console executable; not part of the main `net10.0` runtime path. | `MinecraftClientGUI/Program.cs`, `MinecraftClientGUI/Form1.cs`, `MinecraftClientGUI/Form1.Designer.cs`, `MinecraftClientGUI/MinecraftClient.cs` | - -## Engineering Guidance - -Read `docs/guide/ai-assisted-development.md` before starting development work on MCC. It documents the full build-run-test loop, local server harness, repository tools, and standard workflows. - -### DO -- Keep startup/config/auth logic in `Program` and connection runtime logic in `McClient` or `Protocol/*`. -- Update version support holistically: protocol constants, version mapping, packet palette, block palette, item palette, entity palette, metadata palette, and routing switches. -- Use `tools/` and authoritative server data reports when adapting to new Minecraft versions. -- Guard optional subsystems with `GetTerrainEnabled()`, `GetInventoryEnabled()`, and `GetEntityHandlingEnabled()` before using them. -- For built-in bots, wire all pieces together: bot class, `Settings.ChatBotConfigHealper`, and `McClient.RegisterBots()`. -- Keep `Initialize()` for setup/prereq checks and `AfterGameJoined()` for sending chat or commands. -- Normalize inbound chat with `GetVerbatim()` before `IsChatMessage()` / `IsPrivateMessage()`. -- Clean up commands, plugin channels, threads, timers, and movement locks in `OnUnload()`. -- Prefer nullable-aware code, pattern matching, `ArgumentNullException.ThrowIfNull`, `Try*` APIs for expected failures, and `InvokeOnMainThread()` for cross-thread state changes. -- Use modern C# 14 features. -- Use provided skills proactively depending on the context, read their descriptions to determine when to use them. -- All user-facing text (log messages, command output, TUI labels, notifications, help text, error messages) **must** go through the translation system: add entries to `Translations.resx` + `Translations.Designer.cs`, then reference `Translations.key_name` in code. Never hardcode user-visible strings directly in `.cs` files. Use `string.Format(Translations.key, ...)` for parameterized messages. Translation keys follow dot-delimited naming: `..` (e.g. `cmd.inventory.tui_opened`, `tui.inventory.controls`). Pure technical identifiers (class names, protocol constants, color codes) are exempt. - -### DON'T -- Don't update only `MCVer2ProtocolVersion()` or only one palette file when adding a new Minecraft version. -- Don't send chat in `Initialize()`. -- Don't mutate inventory snapshots and expect server-side effects; use handler APIs/window actions. -- Don't bypass Brigadier with ad hoc command parsing. -- Never modify `ConsoleInteractive/`; treat it as an external required submodule. -- Don't start background workers when `Update()` or delayed tasks are sufficient; if you must, stop them on unload/disconnect. -- Don't leave movement locks, plugin channels, or dispatcher registrations behind. -- Don't trust older docs over current code for supported versions or feature gates. When AGENTS.md, skills, and older docs disagree, prefer current code and current tool behavior, then update the stale source. -- Don't hardcode user-facing strings (messages, labels, help text) directly in source code; always use `Translations.*` resources so the text can be localized. -- Never use "—" ("em dash"), unless specifically being instructed to do so! -- Never generate MCC config files (`.ini`) in the repo root. When `dotnet run --project MinecraftClient -- --help` is used to generate a config template, it writes `MinecraftClient.ini` to the current directory. Always run this command from a system temp directory (e.g. `mktemp -d`) or use `prepare_offline_mcc_config.sh` which already handles output routing. +## Project and ownership + +MCC 2.0 is a cross-platform console and terminal UI client for Minecraft Java Edition. It hosts DMCBK, which uses UMPK for the protocol and game engine. + +- Active solution: `Mcc.slnx`. +- Host implementation: `src/Mcc.Cli/`. Host tests: `src/Mcc.Cli.Tests/`. +- DMCBK packages: `0.1.0-preview.3`. UMPK packages: `0.9.0-beta.4`. +- Restore libraries through NuGet. Do not add sibling project references or copy DMCBK, UMPK or official plugin implementations into this repository. +- The legacy client, GUI, debug tools, Docker setup and old skills were removed. Current Docker files and skills target MCC 2.0. +- MCC code uses MIT. Preserve external dependencies' licenses and attribution. + +## Build, run and test + +Use .NET SDK `10.0.401` from `global.json`. + +```bash +git submodule update --init ConsoleInteractive +source tools/mcc-env.sh +mcc-build +mcc-test +python3 tools/localization/generate_strings.py --check +mcc-publish --rid linux-x64 +``` + +Windows development should use WSL when practical. Native PowerShell helpers live in `tools/windows/`: build, test, run, publish and clean. Read that directory's README. These helpers restore the caller's directory and propagate failures. + +`mcc-publish` creates a local distribution without uploading it. Keep `PublishSingleFile=false` so source plugins can access compilation references. + +`mcc-run` starts the new CLI. `mcc-tui` starts its TUI. Both use a temporary working directory by default. Set `MCC_RUN_ROOT` to select a persistent directory. Pass absolute paths for configurations and scripts because these helpers change the working directory. + +```bash +mcc-run --configurations /absolute/path/to/configurations +mcc-tui --configurations /absolute/path/to/configurations +mcc-run --help +``` + +Set `MCC_BUILD_MODE=tmpfs` to route build output outside the checkout. Use `NuGet.Local.Config` only for unpublished packages in `artifacts/packages`; set `RestoreConfigFile` to its absolute path. Use a fresh `NUGET_PACKAGES` cache when replacing a package at the same version. + +`.github/workflows/mcc.yml` builds and tests the CLI on Linux, Windows and macOS. Documentation and artifact-only translation validation use docs.yml and translations.yml. Neither workflow creates commits or pushes translations. + +## Architecture and source layout + +Feature folders and namespaces must match under `Mcc.Cli`; the enclosing `src` folder is not part of the namespace. See [src/README.md](src/README.md) for architecture and [src/Mcc.Cli/README.md](src/Mcc.Cli/README.md) for the implementation map. + +| Path | Responsibility | +| --- | --- | +| `Program.cs`, `Startup/` | Composition, arguments, help, guided login and idle startup. | +| `Hosting/` | Host state, lifetime and classic DMCBK adapters. | +| `Configuration/` | Console settings, TOML overrides and environment files. | +| `Input/`, `Commands/`, `Logging/` | File input, host commands and logging. | +| `Presentation/` | Console chat, ANSI, glyphs, maps, status and Markdown. | +| `BeaconTooling/`, `Plugins/` | Beacon CLI adapters, plugin prompts and validation. | +| `Diagnostics/` | Session reports and packet capture. | +| `Localization/`, `Resources/` | MCC-owned translations and accessors. | +| `Tui/` | Terminal UI adapters, presentation and feature views. | +| `ConsoleInteractive/` | External submodule. Do not modify its source. | + +DMCBK owns client lifecycle, commands, typed configuration, Beacon, plugins and marketplace transactions. UMPK owns protocol support, world data, physics and pathfinding. Official plugins belong to DMCBK-Plugins. + +## Runtime and localization + +- Configuration uses `client.toml`, `accounts.toml`, `servers.toml` and `console.toml`. +- Keep console and TUI settings in MCC and portable settings in DMCBK. +- Do not generate runtime configuration or authentication caches in the repository root. +- Keep credentials, `.env`, installed plugins and artifacts out of Git. +- Beacon scripts use `.bcn`. Marketplace indexes, manifests and locks require schema 2. +- Automated runs use `MCC_FILE_INPUT=1` and an absolute `MCC_INPUT_FILE`. Do not use a synthetic terminal against public servers. +- Use temporary configurations for each test. Shared server matrices run sequentially unless ports and storage are isolated. +- All new user-visible text must use resources: `Localization/Resources/MccStrings.resx` or `Resources/TextResources.resx`. +- Regenerate accessors with `python3 tools/localization/generate_strings.py`; verify with `--check`. Do not edit generated code or depend on removed client resources. + +## Engineering rules + +- Use nullable-aware C# and the configured language version. Prefer `Try*` APIs for expected failures. +- Use explicit imports and keep host adapters independent of protocol internals. +- Route classic output through `HostConsole` to keep the input prompt synchronized. +- Use DMCBK command registration and typed presentation values. Keep terminal formatting in MCC. +- Dispose subscriptions, timers and plugin resources on session end or shutdown. +- Update tests and documentation when behavior changes; run the CLI tests before completion. +- Do not modify `ConsoleInteractive/` or add library source dependencies. +- The documentation describes MCC 2.0. Check source and examples before changing a guide. Run tools/check_docs.py and the documentation build. +- Current skills live in .skills, with discovery symlinks for Claude, Codex and Agents. Read the relevant skill before use. +- Use Humanizer for prose and ASD-STE100 principles for instructions. Keep translated code and placeholders unchanged. +- Container files are Dockerfile and compose.yml. Do not put runtime secrets in images. +- Run tools/test_installers.py when changing installers or release packaging. +- Do not use em dashes unless the user requests them. +- Do not commit or push until the user gives explicit approval. diff --git a/CLAUDE.md b/CLAUDE.md deleted file mode 100644 index 23562a5fe3..0000000000 --- a/CLAUDE.md +++ /dev/null @@ -1 +0,0 @@ -Read @AGENTS.md \ No newline at end of file diff --git a/DebugTools/MccMcpSampleClient/MccMcpSampleClient.csproj b/DebugTools/MccMcpSampleClient/MccMcpSampleClient.csproj deleted file mode 100644 index 0edf5faa2b..0000000000 --- a/DebugTools/MccMcpSampleClient/MccMcpSampleClient.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - Exe - net10.0 - enable - enable - - - - - - - diff --git a/DebugTools/MccMcpSampleClient/Program.cs b/DebugTools/MccMcpSampleClient/Program.cs deleted file mode 100644 index 15ac2b70c5..0000000000 --- a/DebugTools/MccMcpSampleClient/Program.cs +++ /dev/null @@ -1,773 +0,0 @@ -using System.Diagnostics; -using System.Text.Json; -using ModelContextProtocol.Client; -using ModelContextProtocol.Protocol; - -string endpoint = Environment.GetEnvironmentVariable("MCC_MCP_ENDPOINT") ?? "http://127.0.0.1:33333/mcp"; -bool useStdio = string.Equals(Environment.GetEnvironmentVariable("MCC_MCP_USE_STDIO"), "1", StringComparison.Ordinal); -string? mcpAuthToken = Environment.GetEnvironmentVariable("MCC_MCP_AUTH_TOKEN"); -string repoRoot = FindRepoRoot(); -string rconScript = Path.Combine(repoRoot, "tools", "mc-rcon.sh"); -string rconPort = Environment.GetEnvironmentVariable("MCC_RCON_PORT") ?? "25575"; -string rconPassword = Environment.GetEnvironmentVariable("MCC_RCON_PASSWORD") ?? "test123"; -bool skipSetup = string.Equals(Environment.GetEnvironmentVariable("MCC_MCP_SKIP_SETUP"), "1", StringComparison.Ordinal); -bool runLocalSetup = !useStdio && !skipSetup && IsLocalEndpoint(endpoint) && File.Exists(rconScript); -var executed = new List(); -var checks = new List(); - -try -{ - await using McpClient client = useStdio - ? await McpClient.CreateAsync(new StdioClientTransport(CreateStdioOptions())) - : await McpClient.CreateAsync(new HttpClientTransport(new HttpClientTransportOptions - { - Endpoint = new Uri(endpoint), - TransportMode = HttpTransportMode.AutoDetect, - AdditionalHeaders = string.IsNullOrWhiteSpace(mcpAuthToken) - ? null - : new Dictionary { ["Authorization"] = $"Bearer {mcpAuthToken}" } - })); - - ToolEnvelope initialWorldState = await CallSuccessAsync(client, executed, "mcc_world_state"); - JsonElement initialWorldData = RequireData(initialWorldState); - string botName = ReadString(initialWorldData, "username") ?? "MCCBot"; - Coordinate initialLocation = ReadCoordinate(initialWorldData, "location"); - - long setupBaseline = 0; - if (runLocalSetup) - { - ToolEnvelope baselineEvents = await CallSuccessAsync(client, executed, "mcc_recent_events", new Dictionary - { - ["afterId"] = 0L, - ["maxCount"] = 1 - }); - setupBaseline = ReadInt64(RequireData(baselineEvents), "latestId"); - - await PrepareWorldAsync(rconScript, rconPort, rconPassword, botName, initialLocation); - await Task.Delay(1500); - } - - ToolEnvelope worldState = await WaitForPredicateAsync( - client, - executed, - "mcc_world_state", - null, - envelope => - { - if (!envelope.Success || envelope.Data is not JsonElement data) - return false; - - return data.TryGetProperty("loadedChunkCount", out JsonElement loaded) - && loaded.TryGetInt32(out int loadedChunkCount) - && loadedChunkCount >= 0 - && HasNonNullProperty(data, "worldAge") - && HasNonNullProperty(data, "timeOfDay"); - }, - "mcc_world_state never reported chunk/time state."); - - JsonElement worldData = RequireData(worldState); - Coordinate worldLocation = ReadCoordinate(worldData, "location"); - string dimension = RequireString(worldData, "dimension"); - int loadedChunkCount = ReadInt32(worldData, "loadedChunkCount"); - int pendingChunkCount = ReadInt32(worldData, "pendingChunkCount"); - int totalChunkCount = ReadInt32(worldData, "totalChunkCount"); - double loadRatio = ReadDouble(worldData, "loadRatio"); - _ = RequireString(worldData, "host"); - _ = ReadInt32(worldData, "port"); - _ = RequireString(worldData, "username"); - _ = ReadInt32(worldData, "protocol"); - _ = ReadDouble(worldData, "tps"); - Ensure(!string.IsNullOrWhiteSpace(dimension), "mcc_world_state returned an empty dimension."); - Ensure(loadedChunkCount + pendingChunkCount == totalChunkCount, "mcc_world_state chunk counters are inconsistent."); - Ensure(loadRatio is >= 0 and <= 1, "mcc_world_state loadRatio is out of range."); - Ensure(HasNonNullProperty(worldData, "worldAge"), "mcc_world_state.worldAge is null."); - Ensure(HasNonNullProperty(worldData, "timeOfDay"), "mcc_world_state.timeOfDay is null."); - if (runLocalSetup || useStdio) - { - Ensure(HasNonNullProperty(worldData, "rainLevel"), "mcc_world_state.rainLevel is null after setup."); - Ensure(HasNonNullProperty(worldData, "thunderLevel"), "mcc_world_state.thunderLevel is null after setup."); - } - checks.Add("mcc_world_state"); - - ToolEnvelope chunkStatus = await CallSuccessAsync(client, executed, "mcc_chunk_status"); - JsonElement chunkData = RequireData(chunkStatus); - JsonElement chunk = RequireProperty(chunkData, "chunk"); - _ = ReadInt32(chunk, "x"); - _ = ReadInt32(chunk, "z"); - Ensure(ReadBoolean(chunkData, "loaded"), "mcc_chunk_status reported the current chunk as unloaded."); - Ensure(ReadInt32(chunkData, "loadedChunkCount") + ReadInt32(chunkData, "pendingChunkCount") == ReadInt32(chunkData, "totalChunkCount"), - "mcc_chunk_status chunk counters are inconsistent."); - checks.Add("mcc_chunk_status"); - - await CallSuccessAsync(client, executed, "mcc_look_direction", new Dictionary { ["direction"] = "Down" }); - ToolEnvelope raycast = await CallSuccessAsync(client, executed, "mcc_raycast_block", new Dictionary - { - ["maxDistance"] = 8.0, - ["includeNeighbors"] = true - }); - JsonElement raycastData = RequireData(raycast); - Ensure(ReadBoolean(raycastData, "hit"), "mcc_raycast_block did not report a hit after looking down."); - JsonElement raycastBlock = RequireProperty(raycastData, "block"); - Ensure(!string.Equals(RequireString(raycastBlock, "material"), "Air", StringComparison.OrdinalIgnoreCase), - "mcc_raycast_block hit Air instead of a solid block."); - Ensure(RequireProperty(raycastData, "neighbors").ValueKind == JsonValueKind.Object, - "mcc_raycast_block did not include neighbors when requested."); - checks.Add("mcc_raycast_block"); - - ToolEnvelope pathPreview = await CallSuccessAsync(client, executed, "mcc_path_preview", new Dictionary - { - ["x"] = Math.Floor(worldLocation.X) + 2, - ["y"] = worldLocation.Y, - ["z"] = Math.Floor(worldLocation.Z), - ["allowUnsafe"] = false, - ["timeoutMs"] = 2000, - ["maxWaypoints"] = 32 - }); - JsonElement pathData = RequireData(pathPreview); - Ensure(ReadBoolean(pathData, "pathFound"), "mcc_path_preview did not find a path to a nearby target."); - Ensure(RequireProperty(pathData, "waypoints").GetArrayLength() > 0, "mcc_path_preview returned no waypoints."); - checks.Add("mcc_path_preview"); - - ToolEnvelope stoneSearch = await WaitForPredicateAsync( - client, - executed, - "mcc_inventory_search", - new Dictionary - { - ["query"] = "Stone", - ["maxCount"] = 20, - ["exactMatch"] = true, - ["includeContainers"] = false - }, - envelope => envelope.Success && envelope.Data is JsonElement data && ReadInt32(data, "count") > 0, - "mcc_inventory_search never found Stone in the player inventory."); - Ensure(ContainsItemType(RequireData(stoneSearch), "Stone"), "mcc_inventory_search results did not include Stone."); - - ToolEnvelope swordSearch = await WaitForPredicateAsync( - client, - executed, - "mcc_inventory_search", - new Dictionary - { - ["query"] = "DiamondSword", - ["maxCount"] = 20, - ["exactMatch"] = true, - ["includeContainers"] = false - }, - envelope => envelope.Success && envelope.Data is JsonElement data && ReadInt32(data, "count") > 0, - "mcc_inventory_search never found DiamondSword in the player inventory."); - Ensure(ContainsItemType(RequireData(swordSearch), "DiamondSword"), "mcc_inventory_search results did not include DiamondSword."); - checks.Add("mcc_inventory_search"); - - ToolEnvelope selectItem = await CallSuccessAsync(client, executed, "mcc_select_item", new Dictionary - { - ["itemType"] = "DiamondSword", - ["preferLowestSlot"] = true - }); - JsonElement selectData = RequireData(selectItem); - int selectedSlot = ReadInt32(selectData, "selectedSlot"); - - ToolEnvelope playerStats = await CallSuccessAsync(client, executed, "mcc_player_stats"); - JsonElement playerStatsData = RequireData(playerStats); - Ensure(ReadInt32(playerStatsData, "currentSlot") == selectedSlot, "mcc_select_item did not update mcc_player_stats.currentSlot."); - _ = ReadInt32(playerStatsData, "playerEntityId"); - _ = ReadInt32(playerStatsData, "level"); - _ = ReadInt32(playerStatsData, "totalExperience"); - _ = ReadCoordinate(playerStatsData, "location"); - checks.Add("mcc_select_item"); - checks.Add("mcc_player_stats"); - - ToolEnvelope playersDetailed = await CallSuccessAsync(client, executed, "mcc_players_detailed", new Dictionary - { - ["includeSelf"] = true, - ["includeCoordinates"] = true - }); - JsonElement playersData = RequireData(playersDetailed); - JsonElement selfPlayer = FindPlayer(RequireProperty(playersData, "players"), botName); - _ = RequireString(selfPlayer, "uuid"); - _ = ReadInt32(selfPlayer, "ping"); - _ = ReadInt32(selfPlayer, "entityId"); - _ = ReadDouble(selfPlayer, "x"); - _ = ReadDouble(selfPlayer, "y"); - _ = ReadDouble(selfPlayer, "z"); - checks.Add("mcc_players_detailed"); - - ToolEnvelope statusEffects = await CallSuccessAsync(client, executed, "mcc_status_effects"); - Ensure(RequireProperty(RequireData(statusEffects), "effects").ValueKind == JsonValueKind.Array, - "mcc_status_effects.effects is not an array."); - checks.Add("mcc_status_effects"); - - ToolEnvelope animation = await CallSuccessAsync(client, executed, "mcc_animation", new Dictionary - { - ["hand"] = "MainHand" - }); - Ensure(ReadBoolean(RequireData(animation), "success"), "mcc_animation did not report success."); - - ToolEnvelope sneakOn = await CallSuccessAsync(client, executed, "mcc_toggle_sneak", new Dictionary { ["enabled"] = true }); - Ensure(ReadBoolean(RequireData(sneakOn), "enabled"), "mcc_toggle_sneak(true) did not report enabled=true."); - - ToolEnvelope sprintOn = await CallSuccessAsync(client, executed, "mcc_toggle_sprint", new Dictionary { ["enabled"] = true }); - Ensure(ReadBoolean(RequireData(sprintOn), "enabled"), "mcc_toggle_sprint(true) did not report enabled=true."); - - await CallSuccessAsync(client, executed, "mcc_look_angles", new Dictionary - { - ["yaw"] = 45.0f, - ["pitch"] = -15.0f - }); - ToolEnvelope updatedStats = await CallSuccessAsync(client, executed, "mcc_player_stats"); - JsonElement updatedStatsData = RequireData(updatedStats); - Ensure(Math.Abs(ReadDouble(updatedStatsData, "yaw") - 45.0) < 0.01, "mcc_look_angles did not update yaw."); - Ensure(Math.Abs(ReadDouble(updatedStatsData, "pitch") - (-15.0)) < 0.01, "mcc_look_angles did not update pitch."); - checks.Add("mcc_animation"); - checks.Add("mcc_toggle_sneak"); - checks.Add("mcc_toggle_sprint"); - checks.Add("mcc_look_direction"); - checks.Add("mcc_look_angles"); - - ToolEnvelope nearestEntity = await WaitForPredicateAsync( - client, - executed, - "mcc_entity_nearest", - new Dictionary - { - ["typeFilter"] = "ArmorStand", - ["radius"] = 16.0, - ["includePlayers"] = false - }, - envelope => envelope.Success, - "mcc_entity_nearest never found a nearby ArmorStand."); - JsonElement nearestData = RequireData(nearestEntity); - int entityId = ReadInt32(nearestData, "id"); - Ensure(string.Equals(RequireString(nearestData, "type"), "ArmorStand", StringComparison.OrdinalIgnoreCase), - "mcc_entity_nearest did not return an ArmorStand."); - - ToolEnvelope attackEntity = await CallSuccessAsync(client, executed, "mcc_entity_attack", new Dictionary - { - ["entityId"] = entityId - }); - Ensure(ReadBoolean(RequireData(attackEntity), "success"), "mcc_entity_attack did not report success."); - checks.Add("mcc_entity_nearest"); - checks.Add("mcc_entity_attack"); - - long recentSetupAfterId = runLocalSetup ? setupBaseline : 0; - if (runLocalSetup || useStdio) - { - ToolEnvelope setupEvents = await WaitForRecentEventTypesAsync( - client, - executed, - recentSetupAfterId, - "weather_rain", - "title", - "actionbar"); - JsonElement setupEventsData = RequireData(setupEvents); - Ensure(GetEventTypes(setupEventsData).Contains("weather_rain", StringComparer.OrdinalIgnoreCase), "mcc_recent_events did not include weather_rain."); - Ensure(GetEventTypes(setupEventsData).Contains("title", StringComparer.OrdinalIgnoreCase), "mcc_recent_events did not include title."); - Ensure(GetEventTypes(setupEventsData).Contains("actionbar", StringComparer.OrdinalIgnoreCase), "mcc_recent_events did not include actionbar."); - } - - ToolEnvelope actionbarEvents = await CallSuccessAsync(client, executed, "mcc_recent_events", new Dictionary - { - ["afterId"] = 0L, - ["maxCount"] = 20, - ["typeFilter"] = "actionbar" - }); - JsonElement actionbarData = RequireData(actionbarEvents); - Ensure(ReadInt32(actionbarData, "count") > 0, "mcc_recent_events typeFilter=actionbar returned no events."); - Ensure(AllEventsMatchType(actionbarData, "actionbar"), "mcc_recent_events typeFilter returned mixed event types."); - - long inventoryBaseline = ReadInt64(actionbarData, "latestId"); - int chestX = (int)Math.Floor(worldLocation.X) + 2; - int chestY = (int)Math.Floor(worldLocation.Y); - int chestZ = (int)Math.Floor(worldLocation.Z); - ToolEnvelope openContainer = await WaitForPredicateAsync( - client, - executed, - "mcc_container_open_at", - new Dictionary - { - ["x"] = chestX, - ["y"] = chestY, - ["z"] = chestZ, - ["timeoutMs"] = 3000, - ["closeCurrent"] = true - }, - envelope => envelope.Success, - "mcc_open_container_at never opened the nearby chest."); - JsonElement inventoryInfo = RequireProperty(RequireData(openContainer), "inventory"); - int openedInventoryId = ReadInt32(inventoryInfo, "id"); - ToolEnvelope closeContainer = await CallSuccessAsync(client, executed, "mcc_container_close", new Dictionary - { - ["inventoryId"] = openedInventoryId, - ["timeoutMs"] = 3000 - }); - Ensure(ReadBoolean(RequireData(closeContainer), "closed"), "mcc_close_container did not close the chest."); - - ToolEnvelope inventoryEvents = await WaitForRecentEventTypesAsync( - client, - executed, - inventoryBaseline, - "inventory_open", - "inventory_close"); - JsonElement inventoryEventsData = RequireData(inventoryEvents); - Ensure(GetEventTypes(inventoryEventsData).Contains("inventory_open", StringComparer.OrdinalIgnoreCase), "mcc_recent_events did not include inventory_open."); - Ensure(GetEventTypes(inventoryEventsData).Contains("inventory_close", StringComparer.OrdinalIgnoreCase), "mcc_recent_events did not include inventory_close."); - checks.Add("mcc_recent_events"); - - if (runLocalSetup) - { - long deathBaseline = ReadInt64(inventoryEventsData, "latestId"); - await RunRconCommandAsync(rconScript, rconPort, rconPassword, $"kill {botName}"); - ToolEnvelope deathEvents = await WaitForRecentEventTypesAsync(client, executed, deathBaseline, "death"); - Ensure(GetEventTypes(RequireData(deathEvents)).Contains("death", StringComparer.OrdinalIgnoreCase), - "mcc_recent_events never reported death after the RCON kill."); - - long respawnBaseline = ReadInt64(RequireData(deathEvents), "latestId"); - ToolEnvelope respawn = await CallSuccessAsync(client, executed, "mcc_respawn"); - Ensure(ReadBoolean(RequireData(respawn), "success"), "mcc_respawn did not report success."); - ToolEnvelope respawnEvents = await WaitForRecentEventTypesAsync(client, executed, respawnBaseline, "respawn"); - Ensure(GetEventTypes(RequireData(respawnEvents)).Contains("respawn", StringComparer.OrdinalIgnoreCase), - "mcc_recent_events never reported respawn after mcc_respawn."); - checks.Add("mcc_respawn"); - } - else - { - long respawnBaseline = ReadInt64(RequireData(inventoryEvents), "latestId"); - ToolEnvelope respawn = await CallSuccessAsync(client, executed, "mcc_respawn"); - Ensure(ReadBoolean(RequireData(respawn), "success"), "mcc_respawn did not report success."); - ToolEnvelope respawnEvents = await WaitForRecentEventTypesAsync(client, executed, respawnBaseline, "respawn"); - Ensure(GetEventTypes(RequireData(respawnEvents)).Contains("respawn", StringComparer.OrdinalIgnoreCase), - "mcc_recent_events never reported respawn after mcc_respawn."); - checks.Add("mcc_respawn"); - } - - ToolEnvelope loadedBots = await CallSuccessAsync(client, executed, "mcc_loaded_bots"); - JsonElement bots = RequireProperty(RequireData(loadedBots), "bots"); - Ensure(ContainsBot(bots, "McpServer"), "mcc_loaded_bots did not include McpServer."); - checks.Add("mcc_loaded_bots"); - - ToolEnvelope disconnect = await CallSuccessAsync(client, executed, "mcc_disconnect"); - Ensure(ReadBoolean(RequireData(disconnect), "disconnecting"), "mcc_disconnect did not report disconnecting=true."); - checks.Add("mcc_disconnect"); - - if (!useStdio) - { - await AssertDisconnectStopsEndpointAsync(client, executed); - } - - Console.WriteLine(JsonSerializer.Serialize(new - { - success = true, - endpoint, - useStdio, - runLocalSetup, - checks, - executed - }, new JsonSerializerOptions { WriteIndented = true })); - - Environment.ExitCode = 0; -} -catch (Exception ex) -{ - Console.WriteLine(JsonSerializer.Serialize(new - { - success = false, - endpoint, - useStdio, - runLocalSetup, - error = ex.Message, - checks, - executed - }, new JsonSerializerOptions { WriteIndented = true })); - Environment.ExitCode = 1; -} - -static async Task PrepareWorldAsync(string rconScript, string rconPort, string rconPassword, string botName, Coordinate location) -{ - string[] commands = - [ - $"op {botName}", - $"gamemode creative {botName}", - $"tp {botName} 0 80 0", - $"item replace entity {botName} hotbar.0 with minecraft:stone 32", - $"item replace entity {botName} hotbar.1 with minecraft:diamond_sword 1", - $"execute as {botName} at @s run setblock ~2 ~ ~ minecraft:chest", - $"execute as {botName} at @s run summon minecraft:armor_stand ~2 ~ ~1", - "weather clear", - "weather rain", - $"title {botName} title {{\"text\":\"mcp_title\"}}", - $"title {botName} actionbar {{\"text\":\"mcp_actionbar\"}}" - ]; - - foreach (string command in commands) - { - await RunRconCommandAsync(rconScript, rconPort, rconPassword, command); - } -} - -static async Task RunRconCommandAsync(string rconScript, string rconPort, string rconPassword, string command) -{ - ProcessStartInfo startInfo = new("bash") - { - RedirectStandardOutput = true, - RedirectStandardError = true - }; - startInfo.ArgumentList.Add(rconScript); - startInfo.ArgumentList.Add(command); - startInfo.ArgumentList.Add(rconPort); - startInfo.ArgumentList.Add(rconPassword); - - using Process process = Process.Start(startInfo) ?? throw new InvalidOperationException("Failed to start mc-rcon.sh."); - string stdout = await process.StandardOutput.ReadToEndAsync(); - string stderr = await process.StandardError.ReadToEndAsync(); - await process.WaitForExitAsync(); - if (process.ExitCode != 0) - { - throw new InvalidOperationException( - $"RCON command failed ({command}): {(string.IsNullOrWhiteSpace(stderr) ? stdout : stderr).Trim()}"); - } -} - -static async Task CallSuccessAsync( - McpClient client, - List executed, - string toolName, - IReadOnlyDictionary? args = null) -{ - ToolEnvelope envelope = await CallToolAsync(client, executed, toolName, args); - if (!envelope.Success) - { - throw new InvalidOperationException( - $"{toolName} failed with errorCode={envelope.ErrorCode ?? ""} message={envelope.Message ?? ""}."); - } - - return envelope; -} - -static async Task WaitForPredicateAsync( - McpClient client, - List executed, - string toolName, - IReadOnlyDictionary? args, - Func predicate, - string failureMessage, - int maxAttempts = 12, - int delayMs = 400) -{ - ToolEnvelope? lastEnvelope = null; - for (int attempt = 0; attempt < maxAttempts; attempt++) - { - ToolEnvelope envelope = await CallToolAsync(client, executed, toolName, args); - lastEnvelope = envelope; - if (predicate(envelope)) - return envelope; - - await Task.Delay(delayMs); - } - - throw new InvalidOperationException( - $"{failureMessage} Last result: success={lastEnvelope?.Success}, errorCode={lastEnvelope?.ErrorCode ?? ""}."); -} - -static async Task WaitForRecentEventTypesAsync( - McpClient client, - List executed, - long afterId, - params string[] expectedTypes) -{ - HashSet expected = expectedTypes.ToHashSet(StringComparer.OrdinalIgnoreCase); - ToolEnvelope? lastEnvelope = null; - - for (int attempt = 0; attempt < 12; attempt++) - { - ToolEnvelope envelope = await CallSuccessAsync(client, executed, "mcc_recent_events", new Dictionary - { - ["afterId"] = afterId, - ["maxCount"] = 100 - }); - lastEnvelope = envelope; - JsonElement data = RequireData(envelope); - HashSet actual = GetEventTypes(data); - if (expected.All(actual.Contains)) - return envelope; - - await Task.Delay(400); - } - - throw new InvalidOperationException( - $"mcc_recent_events never reported: {string.Join(", ", expectedTypes)} after event id {afterId}. Last latestId={ReadInt64(RequireData(lastEnvelope!), "latestId")}."); -} - -static async Task CallToolAsync( - McpClient client, - List executed, - string toolName, - IReadOnlyDictionary? args = null) -{ - CallToolResult result = await client.CallToolAsync(toolName, args); - string responseJson = ExtractResponseJson(result); - JsonElement root = JsonDocument.Parse(responseJson).RootElement.Clone(); - JsonElement? data = root.TryGetProperty("data", out JsonElement dataElement) ? dataElement.Clone() : null; - bool success = root.TryGetProperty("success", out JsonElement successElement) - && successElement.ValueKind == JsonValueKind.True; - string? errorCode = ReadString(root, "errorCode"); - string? message = ReadString(root, "message"); - - executed.Add(new - { - tool = toolName, - arguments = args, - isError = result.IsError, - success, - errorCode, - message, - response = root - }); - - return new ToolEnvelope(toolName, result.IsError ?? false, success, errorCode, message, root, data); -} - -static async Task AssertDisconnectStopsEndpointAsync(McpClient client, List executed) -{ - for (int attempt = 0; attempt < 15; attempt++) - { - try - { - await CallToolAsync(client, executed, "mcc_world_state"); - } - catch - { - return; - } - - await Task.Delay(300); - } - - throw new InvalidOperationException("The MCP endpoint still responded after mcc_disconnect."); -} - -static string ExtractResponseJson(CallToolResult result) -{ - if (result.Content is null) - throw new InvalidOperationException("Tool response did not contain any content blocks."); - - foreach (ContentBlock content in result.Content) - { - if (content is TextContentBlock text && !string.IsNullOrWhiteSpace(text.Text)) - return text.Text; - } - - throw new InvalidOperationException("Tool response did not contain a text payload."); -} - -static JsonElement RequireData(ToolEnvelope envelope) -{ - if (envelope.Data is JsonElement data) - return data; - - throw new InvalidOperationException($"{envelope.ToolName} returned no data payload."); -} - -static JsonElement RequireProperty(JsonElement element, string propertyName) -{ - if (element.TryGetProperty(propertyName, out JsonElement property)) - return property; - - throw new InvalidOperationException($"Missing required property '{propertyName}'."); -} - -static string RequireString(JsonElement element, string propertyName) -{ - string? value = ReadString(element, propertyName); - if (!string.IsNullOrWhiteSpace(value)) - return value; - - throw new InvalidOperationException($"Property '{propertyName}' is missing or empty."); -} - -static string? ReadString(JsonElement element, string propertyName) -{ - return element.TryGetProperty(propertyName, out JsonElement property) && property.ValueKind == JsonValueKind.String - ? property.GetString() - : null; -} - -static int ReadInt32(JsonElement element, string propertyName) -{ - JsonElement property = RequireProperty(element, propertyName); - if (property.TryGetInt32(out int value)) - return value; - - throw new InvalidOperationException($"Property '{propertyName}' is not an Int32."); -} - -static long ReadInt64(JsonElement element, string propertyName) -{ - JsonElement property = RequireProperty(element, propertyName); - if (property.TryGetInt64(out long value)) - return value; - - throw new InvalidOperationException($"Property '{propertyName}' is not an Int64."); -} - -static double ReadDouble(JsonElement element, string propertyName) -{ - JsonElement property = RequireProperty(element, propertyName); - if (property.TryGetDouble(out double value)) - return value; - - throw new InvalidOperationException($"Property '{propertyName}' is not a Double."); -} - -static bool ReadBoolean(JsonElement element, string propertyName) -{ - JsonElement property = RequireProperty(element, propertyName); - return property.ValueKind switch - { - JsonValueKind.True => true, - JsonValueKind.False => false, - _ => throw new InvalidOperationException($"Property '{propertyName}' is not a Boolean.") - }; -} - -static bool HasNonNullProperty(JsonElement element, string propertyName) -{ - return element.TryGetProperty(propertyName, out JsonElement property) && property.ValueKind != JsonValueKind.Null; -} - -static Coordinate ReadCoordinate(JsonElement element, string propertyName) -{ - JsonElement coordinate = RequireProperty(element, propertyName); - return new Coordinate( - ReadDouble(coordinate, "x"), - ReadDouble(coordinate, "y"), - ReadDouble(coordinate, "z")); -} - -static JsonElement FindPlayer(JsonElement players, string playerName) -{ - foreach (JsonElement player in players.EnumerateArray()) - { - string? name = ReadString(player, "name"); - if (string.Equals(name, playerName, StringComparison.OrdinalIgnoreCase)) - return player; - } - - throw new InvalidOperationException($"Could not find player '{playerName}' in mcc_players_detailed."); -} - -static bool ContainsItemType(JsonElement searchData, string itemType) -{ - JsonElement matches = RequireProperty(searchData, "matches"); - foreach (JsonElement match in matches.EnumerateArray()) - { - if (string.Equals(ReadString(match, "itemType"), itemType, StringComparison.OrdinalIgnoreCase)) - return true; - } - - return false; -} - -static bool ContainsBot(JsonElement bots, string botName) -{ - foreach (JsonElement bot in bots.EnumerateArray()) - { - if (string.Equals(ReadString(bot, "name"), botName, StringComparison.OrdinalIgnoreCase)) - return true; - } - - return false; -} - -static HashSet GetEventTypes(JsonElement recentEventsData) -{ - JsonElement events = RequireProperty(recentEventsData, "events"); - return events.EnumerateArray() - .Select(entry => RequireString(entry, "type")) - .ToHashSet(StringComparer.OrdinalIgnoreCase); -} - -static bool AllEventsMatchType(JsonElement recentEventsData, string type) -{ - JsonElement events = RequireProperty(recentEventsData, "events"); - foreach (JsonElement entry in events.EnumerateArray()) - { - if (!string.Equals(RequireString(entry, "type"), type, StringComparison.OrdinalIgnoreCase)) - return false; - } - - return true; -} - -static void Ensure(bool condition, string message) -{ - if (!condition) - throw new InvalidOperationException(message); -} - -static bool IsLocalEndpoint(string endpoint) -{ - if (!Uri.TryCreate(endpoint, UriKind.Absolute, out Uri? uri)) - return false; - - return string.Equals(uri.Host, "localhost", StringComparison.OrdinalIgnoreCase) - || string.Equals(uri.Host, "127.0.0.1", StringComparison.OrdinalIgnoreCase) - || string.Equals(uri.Host, "::1", StringComparison.OrdinalIgnoreCase); -} - -static string FindRepoRoot() -{ - string current = Directory.GetCurrentDirectory(); - DirectoryInfo? directory = new(current); - - while (directory is not null) - { - if (File.Exists(Path.Combine(directory.FullName, "MinecraftClient.sln"))) - return directory.FullName; - - directory = directory.Parent; - } - - return current; -} - -static StdioClientTransportOptions CreateStdioOptions() -{ - string? stdioBin = Environment.GetEnvironmentVariable("MCC_MCP_STDIO_BIN"); - if (!string.IsNullOrWhiteSpace(stdioBin)) - { - return new StdioClientTransportOptions - { - Name = "MCC MCP Stdio Harness", - Command = stdioBin, - Arguments = [], - ShutdownTimeout = TimeSpan.FromSeconds(5) - }; - } - - return new StdioClientTransportOptions - { - Name = "MCC MCP Stdio Harness", - Command = "dotnet", - Arguments = - [ - "run", - "--project", - "DebugTools/MccMcpStdioHarness", - "-c", - "Release", - "--no-build" - ], - ShutdownTimeout = TimeSpan.FromSeconds(5) - }; -} - -internal readonly record struct Coordinate(double X, double Y, double Z); - -internal sealed record ToolEnvelope( - string ToolName, - bool IsError, - bool Success, - string? ErrorCode, - string? Message, - JsonElement Root, - JsonElement? Data); diff --git a/DebugTools/MccMcpStdioHarness/MccMcpStdioHarness.csproj b/DebugTools/MccMcpStdioHarness/MccMcpStdioHarness.csproj deleted file mode 100644 index c45c4f2c17..0000000000 --- a/DebugTools/MccMcpStdioHarness/MccMcpStdioHarness.csproj +++ /dev/null @@ -1,18 +0,0 @@ - - - - Exe - net10.0 - enable - enable - - - - - - - - - - - diff --git a/DebugTools/MccMcpStdioHarness/Program.cs b/DebugTools/MccMcpStdioHarness/Program.cs deleted file mode 100644 index 1b90ddbb40..0000000000 --- a/DebugTools/MccMcpStdioHarness/Program.cs +++ /dev/null @@ -1,984 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; -using MinecraftClient.Mcp; -using ModelContextProtocol.Server; - -var builder = Host.CreateApplicationBuilder(args); -builder.Logging.AddConsole(options => -{ - options.LogToStandardErrorThreshold = LogLevel.Trace; -}); - -builder.Services.AddSingleton(new MccMcpConfig()); -builder.Services.AddSingleton(); -builder.Services.AddSingleton(); -builder.Services.AddMcpServer() - .WithStdioServerTransport() - .WithTools() - .WithPrompts(); - -await builder.Build().RunAsync(); - -internal sealed class DeterministicCapabilities : IMccMcpCapabilities -{ - private static double C(double value) => Math.Round(value, 2, MidpointRounding.AwayFromZero); - - private readonly List recentEvents = []; - private long nextEventId = 1; - private double playerX = C(0.5); - private double playerY = C(80.0); - private double playerZ = C(0.5); - private float yaw; - private float pitch; - private int currentSlot = 1; - private bool sneaking; - private bool sprinting; - private float health = 20.0f; - private bool disconnecting; - - public DeterministicCapabilities() - { - AddRecentEvent("player_join", new { name = "HarnessBot" }); - AddRecentEvent("inventory_open", new { inventoryId = 1, type = "Generic_9x3", title = "Chest" }); - AddRecentEvent("weather_rain", new { level = 1.0 }); - AddRecentEvent("title", new { text = "mcp_title" }); - AddRecentEvent("actionbar", new { text = "mcp_actionbar" }); - } - - public MccMcpResult GetSessionStatus() => - MccMcpResult.Ok(new - { - connected = !disconnecting, - host = "deterministic.local", - port = 25565, - username = "HarnessBot", - location = new { x = playerX, y = playerY, z = playerZ } - }); - - public MccMcpResult GetServerInfo() => - MccMcpResult.Ok(new - { - host = "deterministic.local", - port = 25565, - tps = 20.0 - }); - - public MccMcpResult GetPlayerState() => - MccMcpResult.Ok(new - { - nickname = "HarnessBot", - username = "HarnessBot", - health, - saturation = 20, - gamemode = 1, - currentSlot, - yaw, - pitch, - location = new { x = playerX, y = playerY, z = playerZ }, - effects = new object[0] - }); - - public MccMcpResult GetWorldState() => - MccMcpResult.Ok(new - { - connected = !disconnecting, - host = "deterministic.local", - port = 25565, - username = "HarnessBot", - protocol = 769, - terrainEnabled = true, - inventoryEnabled = true, - entityHandlingEnabled = true, - location = new { x = playerX, y = playerY, z = playerZ }, - tps = 20.0, - dimension = "minecraft:overworld", - loadedChunkCount = 9, - pendingChunkCount = 0, - totalChunkCount = 9, - loadRatio = 1.0, - worldAge = 12000L, - timeOfDay = 6000L, - rainLevel = 1.0, - thunderLevel = 0.0 - }); - - public MccMcpResult GetChunkStatus(double? x, double? y, double? z) - { - double resolvedX = x ?? playerX; - double resolvedY = y ?? playerY; - double resolvedZ = z ?? playerZ; - int chunkX = (int)Math.Floor(resolvedX) >> 4; - int chunkZ = (int)Math.Floor(resolvedZ) >> 4; - - return MccMcpResult.Ok(new - { - location = new { x = C(resolvedX), y = C(resolvedY), z = C(resolvedZ) }, - chunk = new { x = chunkX, z = chunkZ }, - loaded = true, - fullyLoaded = true, - loadedChunkCount = 9, - pendingChunkCount = 0, - totalChunkCount = 9, - loadRatio = 1.0 - }); - } - - public MccMcpResult RaycastBlock(double maxDistance, bool includeNeighbors) - { - object? neighbors = includeNeighbors - ? new - { - north = new { x = 0, y = 79, z = -1, material = "Air", typeLabel = "Air" }, - south = new { x = 0, y = 79, z = 1, material = "Air", typeLabel = "Air" }, - east = new { x = 1, y = 79, z = 0, material = "Air", typeLabel = "Air" }, - west = new { x = -1, y = 79, z = 0, material = "Air", typeLabel = "Air" }, - above = new { x = 0, y = 80, z = 0, material = "Air", typeLabel = "Air" }, - below = new { x = 0, y = 78, z = 0, material = "Stone", typeLabel = "Stone" } - } - : null; - - return MccMcpResult.Ok(new - { - hit = true, - maxDistance, - playerLocation = new { x = playerX, y = playerY, z = playerZ }, - eyeLocation = new { x = playerX, y = C(playerY + 1.62), z = playerZ }, - location = new { x = 0, y = 79, z = 0 }, - block = new { material = "Stone", typeLabel = "Stone", blockId = 1, blockMeta = 0 }, - distance = 1.12, - eyeDistance = 2.03, - neighbors - }); - } - - public MccMcpResult PreviewPath(double x, double y, double z, bool allowUnsafe, int maxOffset, int minOffset, int timeoutMs, int maxWaypoints) - { - object[] waypoints = - [ - new { x = playerX, y = playerY, z = playerZ }, - new { x = C((playerX + x) / 2), y = C((playerY + y) / 2), z = C((playerZ + z) / 2) }, - new { x = C(x), y = C(y), z = C(z) } - ]; - - return MccMcpResult.Ok(new - { - pathFound = true, - exactReachable = true, - target = new { x = C(x), y = C(y), z = C(z) }, - startLocation = new { x = playerX, y = playerY, z = playerZ }, - finalWaypoint = new { x = C(x), y = C(y), z = C(z) }, - finalDistance = 0.0, - waypointCount = waypoints.Length, - truncated = waypoints.Length > Math.Max(1, maxWaypoints), - waypoints = waypoints.Take(Math.Max(1, maxWaypoints)).ToArray(), - allowUnsafe, - maxOffset, - minOffset, - timeoutMs = timeoutMs <= 0 ? 5000 : timeoutMs - }); - } - - public MccMcpResult GetPlayersList() => - MccMcpResult.Ok(new - { - players = new[] { "HarnessBot", "PlayerOne" } - }); - - public MccMcpResult GetPlayersDetailed(bool includeSelf, bool includeCoordinates) - { - List players = []; - if (includeSelf) - { - players.Add(new - { - name = "HarnessBot", - uuid = Guid.Parse("11111111-1111-1111-1111-111111111111"), - ping = 5, - gamemode = 1, - listed = true, - displayName = "HarnessBot", - entityId = 1, - x = includeCoordinates ? playerX : (double?)null, - y = includeCoordinates ? playerY : (double?)null, - z = includeCoordinates ? playerZ : (double?)null - }); - } - - players.Add(new - { - name = "PlayerOne", - uuid = Guid.Parse("22222222-2222-2222-2222-222222222222"), - ping = 12, - gamemode = 1, - listed = true, - displayName = "PlayerOne", - entityId = 2, - x = includeCoordinates ? C(3.5) : (double?)null, - y = includeCoordinates ? C(80.0) : (double?)null, - z = includeCoordinates ? C(0.5) : (double?)null - }); - - return MccMcpResult.Ok(new - { - count = players.Count, - players = players.ToArray() - }); - } - - public MccMcpResult GetPlayerStats() => - MccMcpResult.Ok(new - { - health, - saturation = 20, - level = 12, - totalExperience = 245, - gamemode = 1, - playerEntityId = 1, - currentSlot, - yaw, - pitch, - sneaking, - sprinting, - location = new { x = playerX, y = playerY, z = playerZ }, - tps = 20.0 - }); - - public MccMcpResult GetStatusEffects() => - MccMcpResult.Ok(new - { - count = 0, - effects = Array.Empty() - }); - - public MccMcpResult GetRecentEvents(long afterId, int maxCount, string? typeFilter) - { - RecentEvent[] events = recentEvents - .Where(e => e.Id > afterId) - .Where(e => string.IsNullOrWhiteSpace(typeFilter) || string.Equals(e.Type, typeFilter, StringComparison.OrdinalIgnoreCase)) - .Take(Math.Max(1, maxCount)) - .ToArray(); - - return MccMcpResult.Ok(new - { - afterId, - latestId = recentEvents.Count > 0 ? recentEvents[^1].Id : 0, - count = events.Length, - events = events.Select(e => new - { - id = e.Id, - timestampUtc = e.TimestampUtc, - type = e.Type, - data = e.Data - }).ToArray() - }); - } - - public MccMcpResult GetLoadedBots() => - MccMcpResult.Ok(new - { - count = 2, - bots = new object[] - { - new { name = "McpServer", fullTypeName = "MinecraftClient.ChatBots.McpServer", isScript = false }, - new { name = "HarnessScript", fullTypeName = "MinecraftClient.ChatBots.Script", isScript = true } - } - }); - - public MccMcpResult GetChatHistory(int maxCount, bool includeJson) => - MccMcpResult.Ok(new - { - count = 2, - entries = new object[] - { - new { timestampUtc = DateTimeOffset.UtcNow.AddSeconds(-10), kind = "chat", text = " hello", sender = "PlayerOne", message = "hello", json = includeJson ? "{}" : null }, - new { timestampUtc = DateTimeOffset.UtcNow.AddSeconds(-5), kind = "system", text = "HarnessBot joined the game", sender = (string?)null, message = (string?)null, json = includeJson ? "{}" : null } - } - }); - - public MccMcpResult GetInternalCommands() => - MccMcpResult.Ok(new - { - count = 4, - commands = new[] - { - new { name = "debug", usage = "debug [on|off|state]", description = "Toggle debug or print state." }, - new { name = "move", usage = "move ", description = "Move to location." }, - new { name = "useitem", usage = "useitem [x] [y] [z]", description = "Use current held item." }, - new { name = "dig", usage = "dig [duration]", description = "Dig block at location." } - } - }); - - public MccMcpResult GetMaterialsList(string? filter, int maxCount) => - MccMcpResult.Ok(new - { - total = 3, - count = 3, - filter, - materials = new[] - { - new { name = "Air", typeLabel = "Air" }, - new { name = "GrassBlock", typeLabel = "Grass Block" }, - new { name = "OakLog", typeLabel = "Oak Log" } - } - }); - - public MccMcpResult GetBlockTypesList(string? filter, int maxCount) => - MccMcpResult.Ok(new - { - total = 3, - count = 3, - filter, - blockTypes = new[] - { - new { name = "Air", typeLabel = "Air" }, - new { name = "GrassBlock", typeLabel = "Grass Block" }, - new { name = "OakLog", typeLabel = "Oak Log" } - } - }); - - public MccMcpResult GetEntityTypesList(string? filter, int maxCount) => - MccMcpResult.Ok(new - { - total = 3, - count = 3, - filter, - entityTypes = new[] - { - new { name = "Player", typeLabel = "Player" }, - new { name = "Item", typeLabel = "Item" }, - new { name = "Villager", typeLabel = "Villager" } - } - }); - - public MccMcpResult SendChat(string text) => - MccMcpResult.Ok(new { echoed = text }); - - public MccMcpResult QuitClient() => - MccMcpResult.Ok(new { quitting = true }); - - public MccMcpResult DisconnectClient() - { - disconnecting = true; - AddRecentEvent("disconnect", new { reason = "requested", message = "Disconnect requested by test client." }); - return MccMcpResult.Ok(new { disconnecting = true }); - } - - public MccMcpResult RunInternalCommand(string command) => - MccMcpResult.Ok(new { command, status = "Done", output = "deterministic" }); - - public MccMcpResult UseItemOnHand() => - MccMcpResult.Ok(new { success = true, action = "use_item_on_hand" }); - - public MccMcpResult ChangeHotbarSlot(int slot) - { - currentSlot = slot; - return MccMcpResult.Ok(new { success = true, slot }); - } - - public MccMcpResult SelectHotbarItem(string itemType, bool preferLowestSlot) - { - currentSlot = string.Equals(itemType, "DiamondSword", StringComparison.OrdinalIgnoreCase) ? 2 : 1; - return MccMcpResult.Ok(new - { - success = true, - itemType, - inventorySlot = currentSlot - 1, - selectedSlot = currentSlot, - count = string.Equals(itemType, "DiamondSword", StringComparison.OrdinalIgnoreCase) ? 1 : 32, - preferLowestSlot - }); - } - - public MccMcpResult UseItemOnBlock(double x, double y, double z) => - MccMcpResult.Ok(new { success = true, x = C(x), y = C(y), z = C(z), action = "useitem" }); - - public MccMcpResult DigBlock(double x, double y, double z, double durationSeconds) => - MccMcpResult.Ok(new - { - success = true, - target = new { x = C(x), y = C(y), z = C(z) }, - beforeBlock = new { material = "OakLog", typeLabel = "Oak Log", blockId = 137, blockMeta = 0 }, - afterBlock = new { material = "Air", typeLabel = "Air", blockId = 0, blockMeta = 0 }, - commandAccepted = true, - changed = true, - destroyed = true, - attempts = 1, - attemptedDurationsSeconds = new[] { durationSeconds > 0 ? durationSeconds : 1.5 }, - distance = 1.5, - playerLocation = new { x = C(0.5), y = C(80.0), z = C(0.5) } - }); - - public MccMcpResult PlaceBlock(int x, int y, int z, string face, string hand, bool lookAtBlock) => - MccMcpResult.Ok(new { success = true, x, y, z, face, hand, lookAtBlock, action = "place_block" }); - - public MccMcpResult InteractEntity(int entityId, string interaction, string hand) => - MccMcpResult.Ok(new { success = true, entityId, interaction, hand }); - - public MccMcpResult AttackEntity(int entityId) => - MccMcpResult.Ok(new { success = true, entityId, interaction = "Attack" }); - - public MccMcpResult FindNearestEntity(string? typeFilter, string? nameFilter, double radius, bool includePlayers) - { - bool wantsArmorStand = string.IsNullOrWhiteSpace(typeFilter) - || string.Equals(typeFilter, "ArmorStand", StringComparison.OrdinalIgnoreCase) - || string.Equals(typeFilter, "Armor Stand", StringComparison.OrdinalIgnoreCase); - - if (wantsArmorStand && radius >= 4.0) - { - return MccMcpResult.Ok(new - { - id = 7, - type = "ArmorStand", - typeLabel = "Armor Stand", - uuid = Guid.Parse("33333333-3333-3333-3333-333333333333"), - name = "Armor Stand", - customName = (string?)null, - x = C(2.5), - y = C(80.0), - z = C(0.5), - distance = 2.0, - health = 20.0f, - pose = "Standing", - latency = 0 - }); - } - - if (includePlayers && radius >= 3.0) - { - return MccMcpResult.Ok(new - { - id = 2, - type = "Player", - typeLabel = "Player", - uuid = Guid.Parse("22222222-2222-2222-2222-222222222222"), - name = string.IsNullOrWhiteSpace(nameFilter) ? "PlayerOne" : nameFilter, - customName = (string?)null, - x = C(3.5), - y = C(80.0), - z = C(0.5), - distance = 3.0, - health = 20.0f, - pose = "Standing", - latency = 12 - }); - } - - return MccMcpResult.Fail("invalid_state", data: new { typeFilter, nameFilter, radius, includePlayers }); - } - - public MccMcpResult ScanNearbyBlocks(int radius, int maxCount, string? materialFilter) => - MccMcpResult.Ok(new - { - center = new { x = 0, y = 79, z = 0 }, - radius, - count = 1, - blocks = new[] - { - new { x = 0, y = 79, z = 0, material = materialFilter ?? "GrassBlock", blockId = 9, blockMeta = 0, distance = 0.0 } - } - }); - - public MccMcpResult FindBlocks(string? query, int radius, int maxCount, bool exactMatch) => - MccMcpResult.Ok(new - { - center = new { x = 0, y = 79, z = 0 }, - radius, - query, - exactMatch, - count = 2, - blocks = new object[] - { - new { x = 1, y = 79, z = 0, material = "GrassBlock", typeLabel = "Grass Block", blockId = 9, blockMeta = 0, distance = 1.0 }, - new { x = 2, y = 79, z = 0, material = "Dirt", typeLabel = "Dirt", blockId = 10, blockMeta = 0, distance = 2.0 } - } - }); - - public MccMcpResult IsPlayerNearby(string? playerName, double radius, bool includeSelf) => - MccMcpResult.Ok(new - { - radius, - playerName, - includeSelf, - anyNearby = true, - count = 1, - players = new object[] - { - new - { - entityId = 1, - uuid = Guid.Empty, - name = "PlayerOne", - customName = (string?)null, - x = C(3.5), - y = C(80.0), - z = C(0.5), - distance = 3.0, - latency = 5 - } - } - }); - - public MccMcpResult LocatePlayer(string playerName, bool includeSelf) => - MccMcpResult.Ok(new - { - playerName, - matchedName = "PlayerOne", - entityId = 1, - uuid = Guid.Empty, - x = C(3.5), - y = C(80.0), - z = C(0.5), - distance = 3.0 - }); - - public MccMcpResult CanReachPosition(double x, double y, double z, bool allowUnsafe, int maxOffset, int minOffset, int timeoutMs) => - MccMcpResult.Ok(new - { - reachable = true, - exactReachable = true, - target = new { x = C(x), y = C(y), z = C(z) }, - startLocation = new { x = C(0.5), y = C(80.0), z = C(0.5) }, - finalWaypoint = new { x = C(x), y = C(y), z = C(z) }, - finalDistance = 0.0, - waypointCount = 4, - allowUnsafe, - maxOffset, - minOffset, - timeoutMs = timeoutMs <= 0 ? 5000 : timeoutMs - }); - - public MccMcpResult MoveTo(double x, double y, double z, bool allowUnsafe, bool allowDirectTeleport, int maxOffset, int minOffset, int timeoutMs) => - MccMcpResult.Ok(new - { - pathFound = true, - arrived = true, - tolerance = 1.5, - verifyWaitMs = 250, - target = new { x = C(x), y = C(y), z = C(z) }, - startLocation = new { x = C(0.5), y = C(80.0), z = C(0.5) }, - finalLocation = new { x = C(x), y = C(y), z = C(z) }, - finalDistance = 0.0, - distanceMoved = 3.0, - allowUnsafe, - allowDirectTeleport, - maxOffset, - minOffset, - timeoutMs - }); - - public MccMcpResult MoveToPlayer(string playerName, bool allowUnsafe, bool allowDirectTeleport, int maxOffset, int minOffset, int timeoutMs) => - MccMcpResult.Ok(new - { - pathFound = true, - arrived = true, - tolerance = 1.5, - verifyWaitMs = 250, - target = new - { - playerName = "PlayerOne", - entityId = 1, - x = C(3.5), - y = C(80.0), - z = C(0.5) - }, - startLocation = new { x = C(0.5), y = C(80.0), z = C(0.5) }, - finalLocation = new { x = C(3.5), y = C(80.0), z = C(0.5) }, - finalDistance = 0.0, - distanceMoved = 3.0, - allowUnsafe, - allowDirectTeleport, - maxOffset, - minOffset, - timeoutMs - }); - - public MccMcpResult LookAt(double x, double y, double z) => - MccMcpResult.Ok(new { looked = true, x = C(x), y = C(y), z = C(z) }); - - public MccMcpResult LookDirection(string direction) - { - switch (direction.Trim().ToLowerInvariant()) - { - case "up": - yaw = 0.0f; - pitch = -90.0f; - break; - case "down": - yaw = 0.0f; - pitch = 90.0f; - break; - case "north": - yaw = 180.0f; - pitch = 0.0f; - break; - case "south": - yaw = 0.0f; - pitch = 0.0f; - break; - case "east": - yaw = -90.0f; - pitch = 0.0f; - break; - case "west": - yaw = 90.0f; - pitch = 0.0f; - break; - } - - return MccMcpResult.Ok(new { success = true, direction, yaw, pitch }); - } - - public MccMcpResult LookAngles(float yaw, float pitch) - { - this.yaw = yaw; - this.pitch = pitch; - return MccMcpResult.Ok(new { success = true, yaw, pitch }); - } - - public MccMcpResult PlayAnimation(string hand) => - MccMcpResult.Ok(new { success = true, hand }); - - public MccMcpResult ToggleSneak(bool enabled) - { - sneaking = enabled; - return MccMcpResult.Ok(new { success = true, enabled = sneaking }); - } - - public MccMcpResult ToggleSprint(bool enabled) - { - sprinting = enabled; - return MccMcpResult.Ok(new { success = true, enabled = sprinting }); - } - - public MccMcpResult ListInventories() => - MccMcpResult.Ok(new - { - count = 2, - inventories = new object[] - { - new { id = 0, type = "PlayerInventory", title = "Player Inventory", slotCount = 46, nonEmptySlots = 1, active = false }, - new { id = 1, type = "Generic_9x3", title = "Chest", slotCount = 63, nonEmptySlots = 2, active = true } - } - }); - - public MccMcpResult GetInventorySnapshot(int inventoryId) => - MccMcpResult.Ok(new - { - id = inventoryId, - type = inventoryId == 0 ? "PlayerInventory" : "Generic_9x3", - title = inventoryId == 0 ? "Player Inventory" : "Chest", - slotCount = inventoryId == 0 ? 46 : 63, - slots = new[] - { - new { slot = 0, type = "Stone", count = 64 } - } - }); - - public MccMcpResult SearchInventories(string query, int maxCount, bool exactMatch, bool includeContainers) - { - List matches = []; - - if (query.Contains("stone", StringComparison.OrdinalIgnoreCase)) - { - matches.Add(new - { - inventoryId = 0, - inventoryType = "PlayerInventory", - inventoryTitle = "Player Inventory", - slot = 0, - itemType = "Stone", - typeLabel = "Stone", - count = 32, - isPlayerInventory = true, - hotbarSlot = 1 - }); - } - - if (query.Contains("diamond", StringComparison.OrdinalIgnoreCase) || query.Contains("sword", StringComparison.OrdinalIgnoreCase)) - { - matches.Add(new - { - inventoryId = 0, - inventoryType = "PlayerInventory", - inventoryTitle = "Player Inventory", - slot = 1, - itemType = "DiamondSword", - typeLabel = "Diamond Sword", - count = 1, - isPlayerInventory = true, - hotbarSlot = 2 - }); - } - - if (includeContainers) - { - matches.Add(new - { - inventoryId = 1, - inventoryType = "Generic_9x3", - inventoryTitle = "Chest", - slot = 0, - itemType = "Stone", - typeLabel = "Stone", - count = 16, - isPlayerInventory = false, - hotbarSlot = (int?)null - }); - } - - object[] result = matches.Take(Math.Max(1, maxCount)).ToArray(); - return MccMcpResult.Ok(new - { - query, - exactMatch, - includeContainers, - count = result.Length, - matches = result - }); - } - - public MccMcpResult OpenContainerAt(int x, int y, int z, int timeoutMs, bool closeCurrent) - { - AddRecentEvent("inventory_open", new { inventoryId = 1, type = "Generic_9x3", title = "Chest", x, y, z }); - return MccMcpResult.Ok(new - { - success = true, - openAccepted = true, - opened = true, - timeoutMs = timeoutMs <= 0 ? 5000 : timeoutMs, - x, - y, - z, - block = new { material = "Chest", typeLabel = "Chest", blockId = 0, blockMeta = 0 }, - inventory = new { id = 1, type = "Generic_9x3", title = "Chest", slotCount = 63, nonEmptySlots = 2 } - }); - } - - public MccMcpResult CloseContainer(int inventoryId, int timeoutMs) - { - int resolvedInventoryId = inventoryId <= 0 ? 1 : inventoryId; - AddRecentEvent("inventory_close", new { inventoryId = resolvedInventoryId }); - return MccMcpResult.Ok(new - { - success = true, - closed = true, - inventoryId = resolvedInventoryId, - timeoutMs = timeoutMs <= 0 ? 5000 : timeoutMs - }); - } - - public MccMcpResult InventoryWindowAction(int inventoryId, int slotId, string actionType) => - MccMcpResult.Ok(new { success = true, inventoryId, slotId, actionType }); - - public MccMcpResult DropInventoryItem(string itemType, int count, int inventoryId, bool preferStack) => - MccMcpResult.Ok(new - { - success = true, - itemType, - requestedCount = count, - droppedCount = count, - beforeCount = 64, - afterCount = Math.Max(0, 64 - count), - inventoryId, - touchedSlots = new[] { 36 }, - preferStack - }); - - public MccMcpResult DepositContainerItem(string itemType, int count, int inventoryId, bool preferLargestStack) => - MccMcpResult.Ok(new - { - success = true, - direction = "deposit", - itemType, - requestedCount = count, - movedCount = count, - beforePlayerCount = 64, - afterPlayerCount = Math.Max(0, 64 - count), - beforeContainerCount = 0, - afterContainerCount = count, - inventoryId = inventoryId <= 0 ? 1 : inventoryId, - containerType = "Generic_9x3", - touchedSourceSlots = new[] { 36 }, - touchedTargetSlots = new[] { 0 } - }); - - public MccMcpResult WithdrawContainerItem(string itemType, int count, int inventoryId, bool preferLargestStack) => - MccMcpResult.Ok(new - { - success = true, - direction = "withdraw", - itemType, - requestedCount = count, - movedCount = count, - beforePlayerCount = 0, - afterPlayerCount = count, - beforeContainerCount = 64, - afterContainerCount = Math.Max(0, 64 - count), - inventoryId = inventoryId <= 0 ? 1 : inventoryId, - containerType = "Generic_9x3", - touchedSourceSlots = new[] { 0 }, - touchedTargetSlots = new[] { 36 } - }); - - public MccMcpResult QueryEntities(int maxCount) => - MccMcpResult.Ok(new - { - count = 1, - entities = new[] - { - new { id = 1, type = "Player", x = C(0.5), y = C(80.0), z = C(0.5) } - } - }); - - public MccMcpResult ListEntities(int maxCount, string? typeFilter, double radius) => - MccMcpResult.Ok(new - { - totalTracked = 1, - count = 1, - entities = new[] - { - new - { - id = 1, - type = "Player", - typeLabel = "Player", - uuid = Guid.Empty, - name = "HarnessBot", - customName = (string?)null, - x = C(0.5), - y = C(80.0), - z = C(0.5), - distance = 0.0, - health = 20.0f, - pose = "Standing", - latency = 5 - } - } - }); - - public MccMcpResult GetEntityInfo(int entityId, bool includeMetadata, bool includeEquipment, bool includeEffects) => - MccMcpResult.Ok(new - { - id = entityId, - type = "Player", - typeLabel = "Player", - uuid = Guid.Empty, - name = "HarnessBot", - customName = (string?)null, - customNameVisible = false, - x = C(0.5), - y = C(80.0), - z = C(0.5), - yaw = 0.0f, - pitch = 0.0f, - health = 20.0f, - pose = "Standing", - latency = 5, - objectData = -1, - metadata = includeMetadata ? new { flags = 0 } : null, - equipment = includeEquipment ? new[] { new { slot = 0, type = "Stone", count = 1 } } : null, - activeEffects = includeEffects ? new object[0] : null - }); - - public MccMcpResult FindSigns(string text, bool exactMatch, int radius, int maxCount, bool includeBackText) => - MccMcpResult.Ok(new - { - text, - exactMatch, - radius, - includeBackText, - count = 1, - signs = new[] - { - new - { - x = 2, - y = 80, - z = 1, - material = "OakSign", - typeLabel = "Oak Sign", - distance = 1.8, - isWaxed = false, - frontText = new[] { "home", "storage" }, - backText = includeBackText ? new[] { "north wall" } : Array.Empty(), - matchedLines = new[] { text } - } - } - }); - - public MccMcpResult ListItemEntities(string? itemType, double radius, int maxCount) => - MccMcpResult.Ok(new - { - itemType = itemType ?? "OakLog", - radius, - count = 1, - items = new[] - { - new - { - entityId = 99, - itemType = "OakLog", - typeLabel = "Oak Log", - count = 3, - x = C(2.5), - y = C(80.0), - z = C(1.5), - distance = 2.24 - } - } - }); - - public MccMcpResult PickupItems(string itemType, double radius, int maxItems, bool allowUnsafe, int timeoutMs) => - MccMcpResult.Ok(new - { - itemType, - radius, - maxItems, - allowUnsafe, - timeoutMs = timeoutMs <= 0 ? 2500 : timeoutMs, - attempted = 1, - successfulPickups = 1, - collectedCount = 3, - initialInventoryCount = 0, - finalInventoryCount = 3, - remainingNearby = 0, - attempts = new object[] - { - new - { - entityId = 99, - itemType, - typeLabel = "Oak Log", - expectedCount = 3, - target = new { x = C(2.5), y = C(80.0), z = C(1.5) }, - pathFound = true, - arrived = true, - entityGone = true, - inventoryDelta = 3, - startLocation = new { x = C(0.5), y = C(80.0), z = C(0.5) }, - finalLocation = new { x = C(2.5), y = C(80.0), z = C(1.5) }, - finalDistance = 0.0 - } - } - }); - - public MccMcpResult Respawn() - { - health = 20.0f; - AddRecentEvent("respawn", new { location = new { x = playerX, y = playerY, z = playerZ } }); - return MccMcpResult.Ok(new { success = true, respawned = true }); - } - - public MccMcpResult GetWorldBlockAt(int x, int y, int z) => - MccMcpResult.Ok(new { x, y, z, material = "Air", blockId = 0, blockMeta = 0 }); - - private void AddRecentEvent(string type, object? data) - { - recentEvents.Add(new RecentEvent(nextEventId++, DateTimeOffset.UtcNow, type, data)); - if (recentEvents.Count > 100) - recentEvents.RemoveAt(0); - } - - private sealed record RecentEvent(long Id, DateTimeOffset TimestampUtc, string Type, object? Data); -} diff --git a/DebugTools/MccMcpWebPlayground/Api/MccPlaygroundEndpoints.cs b/DebugTools/MccMcpWebPlayground/Api/MccPlaygroundEndpoints.cs deleted file mode 100644 index ec3e0f8371..0000000000 --- a/DebugTools/MccMcpWebPlayground/Api/MccPlaygroundEndpoints.cs +++ /dev/null @@ -1,36 +0,0 @@ -using DebugTools.MccMcpWebPlayground.Contracts; -using DebugTools.MccMcpWebPlayground.Harness; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.Options; - -namespace DebugTools.MccMcpWebPlayground.Api; - -public static class MccPlaygroundEndpoints -{ - public static IEndpointRouteBuilder MapMccPlaygroundEndpoints(this IEndpointRouteBuilder endpoints) - { - RouteGroupBuilder api = endpoints.MapGroup("/api"); - - api.MapGet("/health", () => Results.Ok(new { ok = true })); - - api.MapGet("/config", (IOptions options) => - { - MccWebHarnessOptions harnessOptions = options.Value; - return Results.Ok(new MccConfigResponse( - Model: harnessOptions.ResolveModel(), - OpenRouterBaseUrl: harnessOptions.ResolveOpenRouterBaseUrl(), - McpEndpoint: harnessOptions.ResolveMcpEndpoint(), - HasApiKey: harnessOptions.HasApiKeyConfigured(), - ExposeInventoryWindowAction: harnessOptions.ExposeInventoryWindowAction, - ExposeInternalCommandTool: harnessOptions.ExposeInternalCommandTool)); - }); - - api.MapPost("/chat/stream", (ChatStreamRequest request, IMccAgentRunService runService, HttpContext httpContext, CancellationToken cancellationToken) => - { - return TypedResults.ServerSentEvents(runService.StreamAsync(request, httpContext, cancellationToken)); - }) - .WithRequestTimeout("mcc-stream"); - - return endpoints; - } -} diff --git a/DebugTools/MccMcpWebPlayground/Contracts/MccContracts.cs b/DebugTools/MccMcpWebPlayground/Contracts/MccContracts.cs deleted file mode 100644 index 2257e1b170..0000000000 --- a/DebugTools/MccMcpWebPlayground/Contracts/MccContracts.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System.Text.Json.Serialization; - -namespace DebugTools.MccMcpWebPlayground.Contracts; - -public sealed class ChatStreamRequest -{ - public List? Messages { get; set; } -} - -public sealed class ChatMessage -{ - public string Role { get; set; } = string.Empty; - public string Content { get; set; } = string.Empty; -} - -public sealed record MccConfigResponse( - string? Model, - string OpenRouterBaseUrl, - string McpEndpoint, - bool HasApiKey, - bool ExposeInventoryWindowAction, - bool ExposeInternalCommandTool); - -public sealed record MccStreamEnvelope(string RunId, long Sequence, string Kind, object Data); - -public sealed record MccRunStartedData(string Model, string McpEndpoint, DateTimeOffset StartedAtUtc); - -public sealed record MccGuidanceLoadedData( - string SourceTool, - string CanonicalPromptName, - string GuidanceVersion, - MccCapabilityStatus CapabilityStatus); - -public sealed record MccStateSummaryData( - int TurnCount, - int ToolCallCount, - bool SoftFinish, - int DirectAnswerAttempts, - IReadOnlyList OpenVerification, - IReadOnlyList RecentEvidence, - string? CompactionSummary); - -public sealed record MccToolCalledData(string CallId, string Name, string ArgumentsJson, bool Advanced, bool Sensitive); - -public sealed record MccToolResultData( - string CallId, - string Name, - bool IsError, - bool Success, - string? ErrorCode, - string Summary, - string RawText, - string EvidenceId); - -public sealed record MccVerificationEventData(string ObligationId, string ToolName, string Kind, string Description); - -public sealed record MccBudgetData( - int TurnCount, - int MaxTurns, - int ToolCallCount, - int MaxToolCalls, - double ElapsedSeconds, - int MaxWallClockSeconds); - -public sealed record MccErrorData(string Code, string Message, string? Detail = null); - -public sealed record MccFinalPayload( - string Status, - string Headline, - string AnswerMarkdown, - IReadOnlyList VerifiedFacts, - IReadOnlyList OpenIssues, - IReadOnlyList EvidenceIds, - string? NextAction); - -public sealed record MccSubmitFinalArgs( - string Status, - string Headline, - string AnswerMarkdown, - IReadOnlyList VerifiedFacts, - IReadOnlyList OpenIssues, - IReadOnlyList EvidenceIds, - string? NextAction); - -public sealed record MccCapabilityStatus( - [property: JsonPropertyName("sessionStatus")] bool SessionStatus, - [property: JsonPropertyName("chatAndCommands")] bool ChatAndCommands, - [property: JsonPropertyName("movement")] bool Movement, - [property: JsonPropertyName("inventory")] bool Inventory, - [property: JsonPropertyName("entityWorld")] bool EntityWorld); - -public sealed record MccEvidenceView(string Id, string ToolName, string Summary, bool IsError); - -public sealed record MccVerificationObligationView(string Id, string ToolName, string Kind, string Description); diff --git a/DebugTools/MccMcpWebPlayground/Harness/MccAgentRunService.cs b/DebugTools/MccMcpWebPlayground/Harness/MccAgentRunService.cs deleted file mode 100644 index 332593893c..0000000000 --- a/DebugTools/MccMcpWebPlayground/Harness/MccAgentRunService.cs +++ /dev/null @@ -1,852 +0,0 @@ -using System.Globalization; -using System.Runtime.CompilerServices; -using System.Net.ServerSentEvents; -using System.Text; -using System.Text.Json; -using DebugTools.MccMcpWebPlayground.Contracts; -using DebugTools.MccMcpWebPlayground.Infrastructure.Mcp; -using DebugTools.MccMcpWebPlayground.Infrastructure.OpenRouter; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.Options; -using ModelContextProtocol.Client; -using ModelContextProtocol.Protocol; - -namespace DebugTools.MccMcpWebPlayground.Harness; - -public interface IMccAgentRunService -{ - IAsyncEnumerable> StreamAsync(ChatStreamRequest request, HttpContext httpContext, CancellationToken cancellationToken); -} - -public sealed class MccAgentRunService : IMccAgentRunService -{ - private readonly MccMcpSessionFactory sessionFactory; - private readonly MccGuidanceSource guidanceSource; - private readonly MccPromptComposer promptComposer; - private readonly MccContextCompressor contextCompressor; - private readonly MccFinalizer finalizer; - private readonly OpenRouterChatClient openRouterChatClient; - private readonly MccWebHarnessOptions options; - - public MccAgentRunService( - MccMcpSessionFactory sessionFactory, - MccGuidanceSource guidanceSource, - MccPromptComposer promptComposer, - MccContextCompressor contextCompressor, - MccFinalizer finalizer, - OpenRouterChatClient openRouterChatClient, - IOptions options) - { - this.sessionFactory = sessionFactory; - this.guidanceSource = guidanceSource; - this.promptComposer = promptComposer; - this.contextCompressor = contextCompressor; - this.finalizer = finalizer; - this.openRouterChatClient = openRouterChatClient; - this.options = options.Value; - } - - public async IAsyncEnumerable> StreamAsync( - ChatStreamRequest request, - HttpContext httpContext, - [EnumeratorCancellation] CancellationToken cancellationToken) - { - using CancellationTokenSource linkedCts = CancellationTokenSource.CreateLinkedTokenSource(cancellationToken, httpContext.RequestAborted); - CancellationToken linkedToken = linkedCts.Token; - - string runId = Guid.NewGuid().ToString("n"); - long sequence = 0; - - string? model = options.ResolveModel(); - if (string.IsNullOrWhiteSpace(model)) - { - yield return CreateEvent(runId, ref sequence, "error", new MccErrorData("configuration_error", "OPENROUTER_MODEL or MccWebHarness:Model must be configured.")); - yield break; - } - - if (!options.HasApiKeyConfigured()) - { - yield return CreateEvent(runId, ref sequence, "error", new MccErrorData("configuration_error", "OPENROUTER_API_KEY is not set.")); - yield break; - } - - List baseConversationMessages = NormalizeConversation(request.Messages); - string userRequest = ExtractUserRequest(request.Messages); - if (string.IsNullOrWhiteSpace(userRequest)) - { - yield return CreateEvent(runId, ref sequence, "error", new MccErrorData("invalid_request", "No user message was provided.")); - yield break; - } - - await using McpClient client = await sessionFactory.CreateAsync(linkedToken); - MccGuidanceBundle guidance = await guidanceSource.LoadAsync(client, linkedToken); - - MccRunState runState = new() - { - RunId = runId, - UserRequest = userRequest, - BaseConversationMessages = baseConversationMessages, - ConfiguredModel = model, - Guidance = guidance - }; - - yield return CreateEvent(runId, ref sequence, "run_started", new MccRunStartedData(model, options.ResolveMcpEndpoint(), runState.StartedAtUtc)); - yield return CreateEvent(runId, ref sequence, "guidance_loaded", new MccGuidanceLoadedData( - guidance.SourceToolName, - guidance.CanonicalPromptName, - guidance.GuidanceVersion, - guidance.CapabilityStatus)); - - IList tools = await client.ListToolsAsync(cancellationToken: linkedToken); - MccToolCatalog catalog = MccToolPolicy.BuildCatalog(tools, options, finalizer.BuildSubmitToolSchema()); - - while (!linkedToken.IsCancellationRequested) - { - runState.TurnCount++; - contextCompressor.CompactIfNeeded(runState); - yield return CreateEvent(runId, ref sequence, "state_summary", BuildStateSummary(runState, options)); - - if (runState.IsSoftFinish(options, DateTimeOffset.UtcNow)) - { - yield return CreateEvent(runId, ref sequence, "budget", BuildBudgetData(runState)); - } - - if (runState.IsHardStop(options, DateTimeOffset.UtcNow)) - break; - - MccModelTurn? turn = null; - Exception? providerException = null; - try - { - turn = await openRouterChatClient.CreateTurnAsync( - promptComposer.Compose(runState), - catalog.ModelVisibleTools, - options, - linkedToken); - } - catch (Exception ex) - { - providerException = ex; - } - - if (providerException is not null || turn is null) - { - yield return CreateEvent(runId, ref sequence, "error", new MccErrorData("provider_error", "OpenRouter request failed.", providerException?.Message)); - yield return CreateEvent(runId, ref sequence, "final", finalizer.BuildHardStopResult(runState, options)); - yield break; - } - - runState.RoutedModel = turn.ModelId; - runState.RoutedProvider = turn.RoutedProvider; - - if (turn.ToolCalls.Count == 0) - { - runState.DirectAnswerAttempts++; - string content = string.IsNullOrWhiteSpace(turn.AssistantContent) ? "(empty assistant turn)" : turn.AssistantContent.Trim(); - runState.ToolConversationMessages.Add(new Dictionary - { - ["role"] = "assistant", - ["content"] = content - }); - - if (runState.DirectAnswerAttempts >= 4) - { - yield return CreateEvent(runId, ref sequence, "error", new MccErrorData( - "model_protocol_error", - "The model kept returning plain assistant text instead of using tools or mcc_submit_final.", - content)); - yield return CreateEvent(runId, ref sequence, "final", finalizer.BuildHardStopResult(runState, options)); - yield break; - } - - runState.ToolConversationMessages.Add(new Dictionary - { - ["role"] = "user", - ["content"] = "The previous plain assistant text was not accepted by this harness. On your next turn, you must either call the relevant MCC tools or call mcc_submit_final. Do not answer with plain assistant text again." - }); - continue; - } - - Dictionary assistantMessage = new() - { - ["role"] = "assistant", - ["content"] = turn.AssistantContent, - ["tool_calls"] = turn.ToolCalls.Select(call => new Dictionary - { - ["id"] = call.CallId, - ["type"] = "function", - ["function"] = new Dictionary - { - ["name"] = call.Name, - ["arguments"] = call.ArgumentsJson - } - }).ToArray() - }; - runState.ToolConversationMessages.Add(assistantMessage); - - foreach (MccModelToolCall toolCall in turn.ToolCalls) - { - MccToolProfile profile = MccToolPolicy.GetProfile(toolCall.Name); - yield return CreateEvent(runId, ref sequence, "tool_called", new MccToolCalledData( - toolCall.CallId, - toolCall.Name, - toolCall.ArgumentsJson, - profile.Risk == MccToolRisk.EscapeHatch, - profile.Risk == MccToolRisk.Sensitive)); - - if (toolCall.Name.Equals("mcc_submit_final", StringComparison.OrdinalIgnoreCase)) - { - MccFinalizationValidation validation = finalizer.Validate(runState, toolCall.ArgumentsJson); - if (validation.Accepted) - { - yield return CreateEvent(runId, ref sequence, "final", validation.Payload!); - yield break; - } - - string localResultText = JsonSerializer.Serialize(new - { - success = false, - errorCode = "invalid_final_submission", - message = validation.ErrorText - }); - runState.ToolConversationMessages.Add(BuildToolMessage(toolCall.CallId, localResultText)); - yield return CreateEvent(runId, ref sequence, "tool_result", new MccToolResultData( - toolCall.CallId, - toolCall.Name, - IsError: true, - Success: false, - ErrorCode: "invalid_final_submission", - Summary: validation.ErrorText ?? "Invalid final submission.", - RawText: localResultText, - EvidenceId: string.Empty)); - continue; - } - - if (MccToolPolicy.RequiresExplicitUserIntent(toolCall.Name) && !MccToolPolicy.HasExplicitUserIntent(runState.UserRequest, toolCall.Name)) - { - string localResultText = JsonSerializer.Serialize(new - { - success = false, - errorCode = "explicit_user_intent_required", - message = $"Tool '{toolCall.Name}' requires explicit user intent." - }); - runState.ToolConversationMessages.Add(BuildToolMessage(toolCall.CallId, localResultText)); - yield return CreateEvent(runId, ref sequence, "tool_result", new MccToolResultData( - toolCall.CallId, - toolCall.Name, - IsError: true, - Success: false, - ErrorCode: "explicit_user_intent_required", - Summary: $"Tool '{toolCall.Name}' requires explicit user intent.", - RawText: localResultText, - EvidenceId: string.Empty)); - continue; - } - - if (!catalog.ToolsByName.TryGetValue(toolCall.Name, out MccToolCatalogEntry? entry)) - { - string unknownToolText = JsonSerializer.Serialize(new - { - success = false, - errorCode = "unknown_tool", - message = $"Unknown tool '{toolCall.Name}'." - }); - runState.ToolConversationMessages.Add(BuildToolMessage(toolCall.CallId, unknownToolText)); - yield return CreateEvent(runId, ref sequence, "tool_result", new MccToolResultData( - toolCall.CallId, - toolCall.Name, - IsError: true, - Success: false, - ErrorCode: "unknown_tool", - Summary: $"Unknown tool '{toolCall.Name}'.", - RawText: unknownToolText, - EvidenceId: string.Empty)); - continue; - } - - CallToolResult? result = null; - Exception? toolException = null; - try - { - Dictionary arguments = MccJsonArguments.Parse(toolCall.ArgumentsJson); - result = await client.CallToolAsync(toolCall.Name, arguments, cancellationToken: linkedToken); - } - catch (Exception ex) - { - toolException = ex; - } - - if (toolException is not null || result is null) - { - string failedText = JsonSerializer.Serialize(new - { - success = false, - errorCode = "tool_call_failed", - message = toolException?.Message - }); - runState.ToolConversationMessages.Add(BuildToolMessage(toolCall.CallId, failedText)); - yield return CreateEvent(runId, ref sequence, "tool_result", new MccToolResultData( - toolCall.CallId, - toolCall.Name, - IsError: true, - Success: false, - ErrorCode: "tool_call_failed", - Summary: toolException?.Message ?? "Tool call failed.", - RawText: failedText, - EvidenceId: string.Empty)); - continue; - } - - runState.ToolCallCount++; - MccNormalizedToolResult normalized = MccMcpJson.Normalize(result); - MccEvidenceRecord evidence = CreateEvidence(runState, toolCall.Name, normalized); - runState.Evidence.Add(evidence); - runState.ToolExecutions.Add(new MccToolExecutionRecord - { - CallId = toolCall.CallId, - ToolName = toolCall.Name, - ArgumentsJson = toolCall.ArgumentsJson, - Evidence = evidence - }); - - runState.ToolConversationMessages.Add(BuildToolMessage(toolCall.CallId, normalized.Text)); - - foreach (MccVerificationObligation obligation in CreateObligations(runState, evidence, toolCall.ArgumentsJson)) - { - runState.VerificationObligations.Add(obligation); - yield return CreateEvent(runId, ref sequence, "verification_required", new MccVerificationEventData( - obligation.Id, - obligation.ToolName, - obligation.Kind, - obligation.Description)); - - if (obligation.Cleared) - { - yield return CreateEvent(runId, ref sequence, "verification_cleared", new MccVerificationEventData( - obligation.Id, - obligation.ToolName, - obligation.Kind, - obligation.Description)); - } - } - - foreach (MccVerificationObligation cleared in TryClearObligationsFromEvidence(runState, evidence)) - { - yield return CreateEvent(runId, ref sequence, "verification_cleared", new MccVerificationEventData( - cleared.Id, - cleared.ToolName, - cleared.Kind, - cleared.Description)); - } - - yield return CreateEvent(runId, ref sequence, "tool_result", new MccToolResultData( - toolCall.CallId, - toolCall.Name, - evidence.IsError, - evidence.Success, - evidence.ErrorCode, - evidence.Summary, - evidence.RawText, - evidence.Id)); - } - } - - yield return CreateEvent(runId, ref sequence, "final", finalizer.BuildHardStopResult(runState, options)); - } - - private static List NormalizeConversation(List? incoming) - { - List messages = []; - if (incoming is null) - return messages; - - foreach (ChatMessage message in incoming) - { - if (string.IsNullOrWhiteSpace(message.Role) || string.IsNullOrWhiteSpace(message.Content)) - continue; - - string role = message.Role.Trim().ToLowerInvariant(); - if (role is not ("user" or "assistant" or "system")) - continue; - - messages.Add(new Dictionary - { - ["role"] = role, - ["content"] = message.Content.Trim() - }); - } - - return messages; - } - - private static string ExtractUserRequest(List? incoming) - { - return incoming? - .LastOrDefault(message => string.Equals(message.Role, "user", StringComparison.OrdinalIgnoreCase) - && !string.IsNullOrWhiteSpace(message.Content)) - ?.Content - ?.Trim() - ?? string.Empty; - } - - private static Dictionary BuildToolMessage(string callId, string content) - { - return new Dictionary - { - ["role"] = "tool", - ["tool_call_id"] = callId, - ["content"] = content - }; - } - - private static MccStateSummaryData BuildStateSummary(MccRunState runState, MccWebHarnessOptions options) - { - return new MccStateSummaryData( - TurnCount: runState.TurnCount, - ToolCallCount: runState.ToolCallCount, - SoftFinish: runState.IsSoftFinish(options, DateTimeOffset.UtcNow), - DirectAnswerAttempts: runState.DirectAnswerAttempts, - OpenVerification: runState.OpenObligations - .Select(obligation => new MccVerificationObligationView(obligation.Id, obligation.ToolName, obligation.Kind, obligation.Description)) - .ToArray(), - RecentEvidence: runState.Evidence - .TakeLast(6) - .Select(evidence => new MccEvidenceView(evidence.Id, evidence.ToolName, evidence.Summary, evidence.IsError)) - .ToArray(), - CompactionSummary: runState.CompactionSummary); - } - - private MccBudgetData BuildBudgetData(MccRunState runState) - { - return new MccBudgetData( - TurnCount: runState.TurnCount, - MaxTurns: options.MaxTurns, - ToolCallCount: runState.ToolCallCount, - MaxToolCalls: options.MaxToolCalls, - ElapsedSeconds: (DateTimeOffset.UtcNow - runState.StartedAtUtc).TotalSeconds, - MaxWallClockSeconds: options.MaxWallClockSeconds); - } - - private static MccEvidenceRecord CreateEvidence(MccRunState runState, string toolName, MccNormalizedToolResult result) - { - string summary = SummarizeEvidence(toolName, result); - return new MccEvidenceRecord - { - Id = runState.NextEvidenceId(), - ToolName = toolName, - Summary = summary, - RawText = result.Text, - IsError = result.IsError, - Success = result.Success, - ErrorCode = result.ErrorCode, - Root = result.Root, - Data = result.Data - }; - } - - private static string SummarizeEvidence(string toolName, MccNormalizedToolResult result) - { - if (result.Data is JsonElement data) - { - if ((toolName.Equals("mcc_move_to", StringComparison.OrdinalIgnoreCase) || toolName.Equals("mcc_move_to_player", StringComparison.OrdinalIgnoreCase)) - && TryReadBool(data, "arrived", out bool arrived)) - { - return arrived - ? $"movement verified; arrived={arrived}" - : $"movement not yet verified; arrived={arrived}"; - } - - if (toolName.Equals("mcc_dig_block", StringComparison.OrdinalIgnoreCase)) - { - bool destroyed = TryReadBool(data, "destroyed", out bool destroyedValue) && destroyedValue; - bool changed = TryReadBool(data, "changed", out bool changedValue) && changedValue; - return $"dig result changed={changed} destroyed={destroyed}"; - } - - if (toolName.Equals("mcc_items_pickup", StringComparison.OrdinalIgnoreCase)) - { - int successful = TryReadInt(data, "successfulPickups", out int successfulValue) ? successfulValue : 0; - int collected = TryReadInt(data, "collectedCount", out int collectedValue) ? collectedValue : 0; - return $"pickup result successfulPickups={successful} collectedCount={collected}"; - } - - if (toolName.Equals("mcc_container_open_at", StringComparison.OrdinalIgnoreCase) - && TryReadBool(data, "opened", out bool opened)) - { - return $"container open result opened={opened}"; - } - - if (toolName is "mcc_container_deposit_item" or "mcc_container_withdraw_item" or "mcc_inventory_drop_item") - { - int moved = TryReadInt(data, "movedCount", out int movedValue) - ? movedValue - : TryReadInt(data, "droppedCount", out int droppedValue) ? droppedValue : 0; - return $"{toolName} movedCount={moved}"; - } - } - - string prefix = result.IsError ? "error" : "ok"; - return $"{prefix}: {Truncate(result.Text.Replace('\n', ' '), 180)}"; - } - - private List CreateObligations(MccRunState runState, MccEvidenceRecord evidence, string argumentsJson) - { - List obligations = []; - JsonElement metadata = ParseArgumentsToJson(argumentsJson); - - if (evidence.ToolName.Equals("mcc_move_to", StringComparison.OrdinalIgnoreCase)) - { - MccVerificationObligation obligation = new() - { - Id = runState.NextObligationId(), - ToolName = evidence.ToolName, - Kind = "movement", - Description = "Verify final player location for the requested move target.", - SourceEvidenceId = evidence.Id, - Metadata = BuildMoveMetadata(evidence, metadata), - Cleared = IsMovementVerified(evidence) - }; - obligations.Add(obligation); - return obligations; - } - - if (evidence.ToolName.Equals("mcc_move_to_player", StringComparison.OrdinalIgnoreCase)) - { - MccVerificationObligation obligation = new() - { - Id = runState.NextObligationId(), - ToolName = evidence.ToolName, - Kind = "movement", - Description = "Verify final proximity to the requested player target.", - SourceEvidenceId = evidence.Id, - Metadata = BuildMoveToPlayerMetadata(evidence, metadata), - Cleared = IsMovementVerified(evidence) - }; - obligations.Add(obligation); - return obligations; - } - - if (evidence.ToolName.Equals("mcc_container_open_at", StringComparison.OrdinalIgnoreCase)) - { - obligations.Add(new MccVerificationObligation - { - Id = runState.NextObligationId(), - ToolName = evidence.ToolName, - Kind = "container", - Description = "Verify that the target container is open and active.", - SourceEvidenceId = evidence.Id, - Metadata = null, - Cleared = IsContainerOpenVerified(evidence) - }); - return obligations; - } - - if (evidence.ToolName is "mcc_container_deposit_item" or "mcc_container_withdraw_item" or "mcc_inventory_drop_item") - { - obligations.Add(new MccVerificationObligation - { - Id = runState.NextObligationId(), - ToolName = evidence.ToolName, - Kind = "inventory", - Description = "Verify the requested inventory delta.", - SourceEvidenceId = evidence.Id, - Metadata = evidence.Data, - Cleared = IsInventoryVerified(evidence) - }); - return obligations; - } - - if (evidence.ToolName.Equals("mcc_items_pickup", StringComparison.OrdinalIgnoreCase)) - { - obligations.Add(new MccVerificationObligation - { - Id = runState.NextObligationId(), - ToolName = evidence.ToolName, - Kind = "pickup", - Description = "Verify that the requested dropped items were picked up.", - SourceEvidenceId = evidence.Id, - Metadata = evidence.Data, - Cleared = IsPickupVerified(evidence) - }); - return obligations; - } - - if (evidence.ToolName.Equals("mcc_dig_block", StringComparison.OrdinalIgnoreCase)) - { - obligations.Add(new MccVerificationObligation - { - Id = runState.NextObligationId(), - ToolName = evidence.ToolName, - Kind = "block_change", - Description = "Verify that the target block changed state after digging.", - SourceEvidenceId = evidence.Id, - Metadata = evidence.Data, - Cleared = IsDigVerified(evidence) - }); - } - - return obligations; - } - - private List TryClearObligationsFromEvidence(MccRunState runState, MccEvidenceRecord evidence) - { - List cleared = []; - foreach (MccVerificationObligation obligation in runState.OpenObligations) - { - if (obligation.Cleared) - continue; - - if (obligation.Kind == "movement" && TryClearMovementObligation(obligation, evidence)) - { - obligation.Cleared = true; - obligation.ClearedByEvidenceId = evidence.Id; - cleared.Add(obligation); - continue; - } - - if (obligation.Kind == "block_change" && TryClearDigObligation(obligation, evidence)) - { - obligation.Cleared = true; - obligation.ClearedByEvidenceId = evidence.Id; - cleared.Add(obligation); - } - } - - return cleared; - } - - private static bool TryClearMovementObligation(MccVerificationObligation obligation, MccEvidenceRecord evidence) - { - if (evidence.ToolName.Equals("mcc_player_state", StringComparison.OrdinalIgnoreCase) - && evidence.Data is JsonElement data - && data.TryGetProperty("location", out JsonElement location) - && obligation.Metadata is JsonElement metadata) - { - if (obligation.ToolName.Equals("mcc_move_to", StringComparison.OrdinalIgnoreCase) - && metadata.TryGetProperty("x", out JsonElement targetX) - && metadata.TryGetProperty("y", out JsonElement targetY) - && metadata.TryGetProperty("z", out JsonElement targetZ)) - { - double tolerance = metadata.TryGetProperty("tolerance", out JsonElement toleranceElement) && toleranceElement.TryGetDouble(out double tol) ? tol : 1.5; - return TryReadDouble(location, "x", out double x) - && TryReadDouble(location, "y", out double y) - && TryReadDouble(location, "z", out double z) - && Distance(x, y, z, targetX.GetDouble(), targetY.GetDouble(), targetZ.GetDouble()) <= tolerance; - } - } - - if (evidence.ToolName.Equals("mcc_player_locate", StringComparison.OrdinalIgnoreCase) - && obligation.ToolName.Equals("mcc_move_to_player", StringComparison.OrdinalIgnoreCase) - && evidence.Data is JsonElement playerData - && obligation.Metadata is JsonElement playerMetadata) - { - string? expectedName = playerMetadata.TryGetProperty("playerName", out JsonElement nameElement) ? nameElement.GetString() : null; - string? matchedName = playerData.TryGetProperty("matchedName", out JsonElement matchedNameElement) ? matchedNameElement.GetString() : null; - if (!string.IsNullOrWhiteSpace(expectedName) && !string.Equals(expectedName, matchedName, StringComparison.OrdinalIgnoreCase)) - return false; - - if (TryReadDouble(playerData, "distance", out double distance)) - { - double tolerance = playerMetadata.TryGetProperty("tolerance", out JsonElement toleranceElement) && toleranceElement.TryGetDouble(out double tol) ? tol : 2.0; - return distance <= tolerance; - } - } - - return false; - } - - private static bool TryClearDigObligation(MccVerificationObligation obligation, MccEvidenceRecord evidence) - { - if (!evidence.ToolName.Equals("mcc_world_block_at", StringComparison.OrdinalIgnoreCase) - || evidence.Data is not JsonElement data - || obligation.Metadata is not JsonElement metadata) - { - return false; - } - - if (!metadata.TryGetProperty("target", out JsonElement target) - || !TryReadDouble(target, "x", out double x) - || !TryReadDouble(target, "y", out double y) - || !TryReadDouble(target, "z", out double z)) - { - return false; - } - - return TryReadInt(data, "x", out int blockX) - && TryReadInt(data, "y", out int blockY) - && TryReadInt(data, "z", out int blockZ) - && Math.Abs(blockX - x) < 0.5 - && Math.Abs(blockY - y) < 0.5 - && Math.Abs(blockZ - z) < 0.5 - && data.TryGetProperty("block", out JsonElement block) - && block.TryGetProperty("material", out JsonElement material) - && !string.Equals(material.GetString(), "Air", StringComparison.OrdinalIgnoreCase); - } - - private static bool IsMovementVerified(MccEvidenceRecord evidence) - { - if (evidence.Data is not JsonElement data) - return false; - - if (TryReadBool(data, "arrived", out bool arrived) && arrived) - return true; - - if (TryReadDouble(data, "finalDistance", out double finalDistance)) - { - double tolerance = TryReadDouble(data, "tolerance", out double tol) ? tol : 1.5; - return finalDistance <= tolerance; - } - - return false; - } - - private static bool IsContainerOpenVerified(MccEvidenceRecord evidence) - { - return evidence.Data is JsonElement data - && TryReadBool(data, "opened", out bool opened) - && opened; - } - - private static bool IsInventoryVerified(MccEvidenceRecord evidence) - { - if (evidence.Data is not JsonElement data) - return false; - - if (TryReadInt(data, "requestedCount", out int requestedCount) - && TryReadInt(data, "movedCount", out int movedCount)) - { - return movedCount == requestedCount; - } - - if (TryReadInt(data, "requestedCount", out requestedCount) - && TryReadInt(data, "droppedCount", out int droppedCount)) - { - return droppedCount == requestedCount; - } - - return evidence.Success; - } - - private static bool IsPickupVerified(MccEvidenceRecord evidence) - { - if (evidence.Data is not JsonElement data) - return false; - - return (TryReadInt(data, "successfulPickups", out int successfulPickups) && successfulPickups > 0) - || (TryReadInt(data, "collectedCount", out int collectedCount) && collectedCount > 0); - } - - private static bool IsDigVerified(MccEvidenceRecord evidence) - { - if (evidence.Data is not JsonElement data) - return false; - - return (TryReadBool(data, "destroyed", out bool destroyed) && destroyed) - || (TryReadBool(data, "changed", out bool changed) && changed); - } - - private static JsonElement? BuildMoveMetadata(MccEvidenceRecord evidence, JsonElement arguments) - { - if (evidence.Data is not JsonElement data) - return null; - - double x = TryReadDoubleFromArguments(arguments, "x", out double targetX) - ? targetX - : data.TryGetProperty("target", out JsonElement target) && TryReadDouble(target, "x", out double fromDataX) ? fromDataX : 0; - double y = TryReadDoubleFromArguments(arguments, "y", out double targetY) - ? targetY - : data.TryGetProperty("target", out target) && TryReadDouble(target, "y", out double fromDataY) ? fromDataY : 0; - double z = TryReadDoubleFromArguments(arguments, "z", out double targetZ) - ? targetZ - : data.TryGetProperty("target", out target) && TryReadDouble(target, "z", out double fromDataZ) ? fromDataZ : 0; - double tolerance = TryReadDouble(data, "tolerance", out double tol) ? tol : 1.5; - - return JsonSerializer.SerializeToElement(new - { - x, - y, - z, - tolerance - }); - } - - private static JsonElement? BuildMoveToPlayerMetadata(MccEvidenceRecord evidence, JsonElement arguments) - { - string? playerName = arguments.TryGetProperty("playerName", out JsonElement property) ? property.GetString() : null; - double tolerance = evidence.Data is JsonElement data && TryReadDouble(data, "tolerance", out double tol) ? tol : 2.0; - return JsonSerializer.SerializeToElement(new - { - playerName, - tolerance - }); - } - - private static JsonElement ParseArgumentsToJson(string argumentsJson) - { - try - { - using JsonDocument document = JsonDocument.Parse(string.IsNullOrWhiteSpace(argumentsJson) ? "{}" : argumentsJson); - return document.RootElement.Clone(); - } - catch - { - using JsonDocument document = JsonDocument.Parse("{}"); - return document.RootElement.Clone(); - } - } - - private static bool TryReadBool(JsonElement element, string propertyName, out bool value) - { - value = false; - return element.TryGetProperty(propertyName, out JsonElement property) - && property.ValueKind is JsonValueKind.True or JsonValueKind.False - && ((value = property.GetBoolean()) || !value || true); - } - - private static bool TryReadInt(JsonElement element, string propertyName, out int value) - { - value = 0; - return element.TryGetProperty(propertyName, out JsonElement property) && property.TryGetInt32(out value); - } - - private static bool TryReadDouble(JsonElement element, string propertyName, out double value) - { - value = 0; - return element.TryGetProperty(propertyName, out JsonElement property) && property.TryGetDouble(out value); - } - - private static bool TryReadDoubleFromArguments(JsonElement element, string propertyName, out double value) - { - value = 0; - if (!element.TryGetProperty(propertyName, out JsonElement property)) - return false; - - return property.ValueKind == JsonValueKind.Number - ? property.TryGetDouble(out value) - : property.ValueKind == JsonValueKind.String && double.TryParse(property.GetString(), out value); - } - - private static double Distance(double x1, double y1, double z1, double x2, double y2, double z2) - { - double dx = x1 - x2; - double dy = y1 - y2; - double dz = z1 - z2; - return Math.Sqrt(dx * dx + dy * dy + dz * dz); - } - - private static string Truncate(string text, int maxLength) - { - return string.IsNullOrEmpty(text) || text.Length <= maxLength ? text : text[..maxLength] + "..."; - } - - private static SseItem CreateEvent(string runId, ref long sequence, string kind, T data) - { - sequence++; - return new SseItem( - new MccStreamEnvelope(runId, sequence, kind, data!), - kind) - { - EventId = sequence.ToString(CultureInfo.InvariantCulture) - }; - } -} diff --git a/DebugTools/MccMcpWebPlayground/Harness/MccContextCompressor.cs b/DebugTools/MccMcpWebPlayground/Harness/MccContextCompressor.cs deleted file mode 100644 index 1d131bda2c..0000000000 --- a/DebugTools/MccMcpWebPlayground/Harness/MccContextCompressor.cs +++ /dev/null @@ -1,21 +0,0 @@ -namespace DebugTools.MccMcpWebPlayground.Harness; - -public sealed class MccContextCompressor -{ - public void CompactIfNeeded(MccRunState runState) - { - if (runState.Evidence.Count <= 6) - return; - - IReadOnlyList olderEvidence = runState.Evidence - .Take(Math.Max(0, runState.Evidence.Count - 6)) - .ToArray(); - - if (olderEvidence.Count == 0) - return; - - runState.CompactionSummary = string.Join('\n', olderEvidence - .TakeLast(8) - .Select(record => $"- {record.Id} {record.ToolName}: {record.Summary}")); - } -} diff --git a/DebugTools/MccMcpWebPlayground/Harness/MccFinalizer.cs b/DebugTools/MccMcpWebPlayground/Harness/MccFinalizer.cs deleted file mode 100644 index 88978bc6f6..0000000000 --- a/DebugTools/MccMcpWebPlayground/Harness/MccFinalizer.cs +++ /dev/null @@ -1,221 +0,0 @@ -using System.Text.Json; -using System.Text.Json.Nodes; -using DebugTools.MccMcpWebPlayground.Contracts; - -namespace DebugTools.MccMcpWebPlayground.Harness; - -public sealed class MccFinalizer -{ - private static readonly string[] AllowedStatuses = ["completed", "partial", "blocked", "clarification_needed", "failed"]; - - public object BuildSubmitToolSchema() - { - return new Dictionary - { - ["type"] = "function", - ["function"] = new Dictionary - { - ["name"] = "mcc_submit_final", - ["description"] = "Submit the final result for this MCC run. Use completed only when no required verification obligations remain open.", - ["parameters"] = new JsonObject - { - ["type"] = "object", - ["additionalProperties"] = false, - ["properties"] = new JsonObject - { - ["status"] = new JsonObject - { - ["type"] = "string", - ["enum"] = new JsonArray(AllowedStatuses.Select(status => JsonValue.Create(status)).ToArray()) - }, - ["headline"] = new JsonObject { ["type"] = "string" }, - ["answerMarkdown"] = new JsonObject { ["type"] = "string" }, - ["verifiedFacts"] = new JsonObject - { - ["type"] = "array", - ["items"] = new JsonObject { ["type"] = "string" } - }, - ["openIssues"] = new JsonObject - { - ["type"] = "array", - ["items"] = new JsonObject { ["type"] = "string" } - }, - ["evidenceIds"] = new JsonObject - { - ["type"] = "array", - ["items"] = new JsonObject { ["type"] = "string" } - }, - ["nextAction"] = new JsonObject - { - ["type"] = new JsonArray("string", "null") - } - }, - ["required"] = new JsonArray("status", "headline", "answerMarkdown", "verifiedFacts", "openIssues", "evidenceIds", "nextAction") - } - } - }; - } - - public MccFinalizationValidation Validate(MccRunState runState, string argumentsJson) - { - try - { - using JsonDocument document = JsonDocument.Parse(string.IsNullOrWhiteSpace(argumentsJson) ? "{}" : argumentsJson); - JsonElement root = document.RootElement; - MccSubmitFinalArgs submission = new( - Status: ReadRequiredString(root, "status"), - Headline: ReadRequiredString(root, "headline"), - AnswerMarkdown: ReadRequiredString(root, "answerMarkdown"), - VerifiedFacts: ReadStringArray(root, "verifiedFacts"), - OpenIssues: ReadStringArray(root, "openIssues"), - EvidenceIds: ReadStringArray(root, "evidenceIds"), - NextAction: ReadNullableString(root, "nextAction")); - - string normalizedStatus = submission.Status.Trim().ToLowerInvariant(); - if (!AllowedStatuses.Contains(normalizedStatus, StringComparer.Ordinal)) - return MccFinalizationValidation.Reject("Invalid final status."); - - if (string.IsNullOrWhiteSpace(submission.Headline) || string.IsNullOrWhiteSpace(submission.AnswerMarkdown)) - return MccFinalizationValidation.Reject("headline and answerMarkdown are required."); - - Dictionary evidenceById = runState.Evidence.ToDictionary(record => record.Id, StringComparer.OrdinalIgnoreCase); - Dictionary evidenceAliasByCallId = new(StringComparer.OrdinalIgnoreCase); - foreach (MccToolExecutionRecord execution in runState.ToolExecutions) - { - evidenceAliasByCallId[execution.CallId] = execution.Evidence.Id; - - int suffixSeparator = execution.CallId.LastIndexOf('_'); - if (suffixSeparator >= 0 && suffixSeparator < execution.CallId.Length - 1) - evidenceAliasByCallId[execution.CallId[(suffixSeparator + 1)..]] = execution.Evidence.Id; - } - - List normalizedEvidenceIds = []; - foreach (string evidenceId in submission.EvidenceIds) - { - string normalizedEvidenceId = evidenceAliasByCallId.TryGetValue(evidenceId, out string? mappedEvidenceId) - ? mappedEvidenceId - : evidenceId; - - if (!evidenceById.ContainsKey(normalizedEvidenceId)) - return MccFinalizationValidation.Reject($"Unknown evidence id '{evidenceId}'."); - - if (!normalizedEvidenceIds.Contains(normalizedEvidenceId, StringComparer.OrdinalIgnoreCase)) - normalizedEvidenceIds.Add(normalizedEvidenceId); - } - - if (normalizedStatus == "completed" && runState.OpenObligations.Count > 0) - return MccFinalizationValidation.Reject("completed is invalid while verification obligations remain open."); - - if (!AreVerifiedFactsGrounded(submission.VerifiedFacts, normalizedEvidenceIds, evidenceById)) - return MccFinalizationValidation.Reject("verifiedFacts must be grounded in the referenced evidence."); - - return MccFinalizationValidation.Accept(new MccFinalPayload( - normalizedStatus, - submission.Headline.Trim(), - submission.AnswerMarkdown.Trim(), - submission.VerifiedFacts, - submission.OpenIssues, - normalizedEvidenceIds, - string.IsNullOrWhiteSpace(submission.NextAction) ? null : submission.NextAction.Trim())); - } - catch (Exception ex) - { - return MccFinalizationValidation.Reject($"Invalid mcc_submit_final payload: {ex.Message}"); - } - } - - public MccFinalPayload BuildHardStopResult(MccRunState runState, MccWebHarnessOptions options) - { - IReadOnlyList openIssues = runState.OpenObligations.Count > 0 - ? runState.OpenObligations.Select(obligation => obligation.Description).ToArray() - : ["The harness reached its execution budget before the run was explicitly finalized."]; - - IReadOnlyList evidenceIds = runState.Evidence.TakeLast(4).Select(record => record.Id).ToArray(); - IReadOnlyList verifiedFacts = runState.Evidence - .TakeLast(4) - .Where(record => record.Success) - .Select(record => record.Summary) - .ToArray(); - - return new MccFinalPayload( - Status: runState.OpenObligations.Count > 0 ? "partial" : "blocked", - Headline: "Run stopped before explicit completion", - AnswerMarkdown: "I could not finish the request within the current harness budget. I am returning the strongest verified state captured so far.", - VerifiedFacts: verifiedFacts, - OpenIssues: openIssues, - EvidenceIds: evidenceIds, - NextAction: "Retry with a fresh run if you want me to continue from the latest verified state."); - } - - private static bool AreVerifiedFactsGrounded( - IReadOnlyList verifiedFacts, - IReadOnlyList evidenceIds, - IReadOnlyDictionary evidenceById) - { - if (verifiedFacts.Count == 0) - return true; - - if (evidenceIds.Count == 0) - return false; - - string evidenceCorpus = string.Join(' ', evidenceIds - .Where(evidenceById.ContainsKey) - .Select(id => evidenceById[id].Summary)) - .ToLowerInvariant(); - - foreach (string fact in verifiedFacts) - { - HashSet factTokens = fact.Split(' ', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries) - .Select(token => token.Trim().Trim(',', '.', ':', ';', '!', '?', '"', '\'')) - .Where(token => token.Length >= 4) - .Select(token => token.ToLowerInvariant()) - .ToHashSet(StringComparer.Ordinal); - - if (factTokens.Count == 0) - continue; - - int matches = factTokens.Count(token => evidenceCorpus.Contains(token, StringComparison.Ordinal)); - if (matches < Math.Min(2, factTokens.Count)) - return false; - } - - return true; - } - - private static string ReadRequiredString(JsonElement root, string propertyName) - { - string? value = ReadNullableString(root, propertyName); - if (string.IsNullOrWhiteSpace(value)) - throw new InvalidOperationException($"{propertyName} is required."); - - return value.Trim(); - } - - private static string? ReadNullableString(JsonElement root, string propertyName) - { - if (!root.TryGetProperty(propertyName, out JsonElement property)) - return null; - - return property.ValueKind == JsonValueKind.Null ? null : property.GetString(); - } - - private static string[] ReadStringArray(JsonElement root, string propertyName) - { - if (!root.TryGetProperty(propertyName, out JsonElement property) || property.ValueKind != JsonValueKind.Array) - return []; - - return property.EnumerateArray() - .Where(item => item.ValueKind == JsonValueKind.String) - .Select(item => item.GetString()) - .Where(item => !string.IsNullOrWhiteSpace(item)) - .Cast() - .ToArray(); - } -} - -public sealed record MccFinalizationValidation(bool Accepted, string? ErrorText, MccFinalPayload? Payload) -{ - public static MccFinalizationValidation Accept(MccFinalPayload payload) => new(true, null, payload); - - public static MccFinalizationValidation Reject(string errorText) => new(false, errorText, null); -} diff --git a/DebugTools/MccMcpWebPlayground/Harness/MccGuidanceSource.cs b/DebugTools/MccMcpWebPlayground/Harness/MccGuidanceSource.cs deleted file mode 100644 index a302e3f0da..0000000000 --- a/DebugTools/MccMcpWebPlayground/Harness/MccGuidanceSource.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System.Text.Json; -using DebugTools.MccMcpWebPlayground.Contracts; -using DebugTools.MccMcpWebPlayground.Infrastructure.Mcp; -using ModelContextProtocol.Client; -using ModelContextProtocol.Protocol; - -namespace DebugTools.MccMcpWebPlayground.Harness; - -public sealed class MccGuidanceSource -{ - public const string SourceToolName = "mcc_agent_guidance"; - public const string CanonicalPromptName = "mcc_operator_guide"; - - public async Task LoadAsync(McpClient client, CancellationToken cancellationToken) - { - CallToolResult result = await client.CallToolAsync(SourceToolName, new Dictionary(), cancellationToken: cancellationToken); - MccNormalizedToolResult normalized = MccMcpJson.Normalize(result); - JsonElement data = normalized.Data ?? throw new InvalidOperationException("mcc_agent_guidance did not return data."); - - string[] bestPractices = ReadStringArray(data, "bestPractices"); - string[] exampleTitles = data.TryGetProperty("exampleScenarios", out JsonElement examples) - && examples.ValueKind == JsonValueKind.Array - ? examples.EnumerateArray() - .Select(example => example.TryGetProperty("title", out JsonElement title) ? title.GetString() : null) - .Where(title => !string.IsNullOrWhiteSpace(title)) - .Cast() - .ToArray() - : []; - - MccCapabilityStatus capabilityStatus = data.TryGetProperty("capabilityStatus", out JsonElement capabilityJson) - ? JsonSerializer.Deserialize(capabilityJson.GetRawText()) ?? new MccCapabilityStatus(false, false, false, false, false) - : new MccCapabilityStatus(false, false, false, false, false); - - return new MccGuidanceBundle( - SourceToolName, - CanonicalPromptName, - SkillName: ReadString(data, "skillName") ?? "mcc-mcp-operator", - GuidanceVersion: ReadString(data, "guidanceVersion") ?? "unknown", - SystemPrompt: ReadString(data, "systemPrompt") ?? throw new InvalidOperationException("mcc_agent_guidance did not return systemPrompt."), - BestPractices: bestPractices, - ExampleScenarioTitles: exampleTitles, - CapabilityStatus: capabilityStatus); - } - - private static string? ReadString(JsonElement element, string propertyName) - { - return element.TryGetProperty(propertyName, out JsonElement property) && property.ValueKind == JsonValueKind.String - ? property.GetString() - : null; - } - - private static string[] ReadStringArray(JsonElement element, string propertyName) - { - return element.TryGetProperty(propertyName, out JsonElement property) && property.ValueKind == JsonValueKind.Array - ? property.EnumerateArray() - .Where(item => item.ValueKind == JsonValueKind.String) - .Select(item => item.GetString()) - .Where(item => !string.IsNullOrWhiteSpace(item)) - .Cast() - .ToArray() - : []; - } -} diff --git a/DebugTools/MccMcpWebPlayground/Harness/MccPromptComposer.cs b/DebugTools/MccMcpWebPlayground/Harness/MccPromptComposer.cs deleted file mode 100644 index b9cb465015..0000000000 --- a/DebugTools/MccMcpWebPlayground/Harness/MccPromptComposer.cs +++ /dev/null @@ -1,86 +0,0 @@ -namespace DebugTools.MccMcpWebPlayground.Harness; - -public sealed class MccPromptComposer -{ - private const string HarnessContract = """ -You are operating Minecraft Console Client through MCC MCP tools. - -Rules: -- Use tool results and the run-state summary as the source of truth. -- Execute tools sequentially. -- End the run only with mcc_submit_final. -- status=completed is valid only when no required verification obligations remain open. -- If the task is blocked or partial, say exactly what is verified and what remains unverified. -- Do not repeat the same failing stateful action with the same arguments. -- mcc_quit_client requires explicit user intent. -- Prefer structured high-level tools. Avoid escape hatches unless they are explicitly exposed and necessary. -"""; - - public List Compose(MccRunState runState) - { - List messages = - [ - BuildSystemMessage(HarnessContract), - BuildSystemMessage(runState.Guidance.SystemPrompt), - BuildSystemMessage(BuildStateSummary(runState)), - .. runState.BaseConversationMessages - ]; - - if (!string.IsNullOrWhiteSpace(runState.CompactionSummary)) - { - messages.Add(BuildSystemMessage($""" -Older verified evidence summary -{runState.CompactionSummary} -""")); - } - - foreach (object message in runState.ToolConversationMessages.TakeLast(12)) - messages.Add(message); - - return messages; - } - - private static Dictionary BuildSystemMessage(string text) - { - return new Dictionary - { - ["role"] = "system", - ["content"] = text - }; - } - - private static string BuildStateSummary(MccRunState runState) - { - string evidence = runState.Evidence.Count == 0 - ? "- none yet" - : string.Join('\n', runState.Evidence.TakeLast(6).Select(record => - $"- {record.Id} {record.ToolName}: {record.Summary}")); - - string obligations = runState.OpenObligations.Count == 0 - ? "- none" - : string.Join('\n', runState.OpenObligations.Select(obligation => - $"- {obligation.Id} {obligation.ToolName}/{obligation.Kind}: {obligation.Description}")); - - string bestPractices = runState.Guidance.BestPractices.Length == 0 - ? "- use verified MCC state before claiming success" - : string.Join('\n', runState.Guidance.BestPractices.Take(4).Select(item => $"- {item}")); - - return $""" -Current run state -- turnCount: {runState.TurnCount} -- toolCallCount: {runState.ToolCallCount} -- directAnswerAttempts: {runState.DirectAnswerAttempts} -- routedModel: {runState.RoutedModel ?? runState.ConfiguredModel} -- routedProvider: {runState.RoutedProvider ?? "unknown"} - -Outstanding verification -{obligations} - -Recent evidence -{evidence} - -Guidance highlights -{bestPractices} -"""; - } -} diff --git a/DebugTools/MccMcpWebPlayground/Harness/MccRunState.cs b/DebugTools/MccMcpWebPlayground/Harness/MccRunState.cs deleted file mode 100644 index f226c8b3a3..0000000000 --- a/DebugTools/MccMcpWebPlayground/Harness/MccRunState.cs +++ /dev/null @@ -1,103 +0,0 @@ -using System.Text.Json; -using DebugTools.MccMcpWebPlayground.Contracts; - -namespace DebugTools.MccMcpWebPlayground.Harness; - -public sealed class MccRunState -{ - private int evidenceCounter; - private int obligationCounter; - - public required string RunId { get; init; } - public required string UserRequest { get; init; } - public required List BaseConversationMessages { get; init; } - public required string ConfiguredModel { get; init; } - public required MccGuidanceBundle Guidance { get; init; } - public DateTimeOffset StartedAtUtc { get; init; } = DateTimeOffset.UtcNow; - - public List ToolConversationMessages { get; } = []; - public List Evidence { get; } = []; - public List ToolExecutions { get; } = []; - public List VerificationObligations { get; } = []; - public string? CompactionSummary { get; set; } - public string? RoutedModel { get; set; } - public string? RoutedProvider { get; set; } - public int TurnCount { get; set; } - public int ToolCallCount { get; set; } - public int DirectAnswerAttempts { get; set; } - - public string NextEvidenceId() => $"e{++evidenceCounter:0000}"; - - public string NextObligationId() => $"v{++obligationCounter:0000}"; - - public bool IsSoftFinish(MccWebHarnessOptions options, DateTimeOffset nowUtc) - { - TimeSpan elapsed = nowUtc - StartedAtUtc; - return (options.MaxTurns - TurnCount) <= options.SoftFinishRemainingTurns - || (options.MaxToolCalls - ToolCallCount) <= options.SoftFinishRemainingToolCalls - || (options.MaxWallClockSeconds - (int)elapsed.TotalSeconds) <= options.SoftFinishRemainingSeconds; - } - - public bool IsHardStop(MccWebHarnessOptions options, DateTimeOffset nowUtc) - { - TimeSpan elapsed = nowUtc - StartedAtUtc; - return TurnCount >= options.MaxTurns - || ToolCallCount >= options.MaxToolCalls - || elapsed.TotalSeconds >= options.MaxWallClockSeconds; - } - - public IReadOnlyList OpenObligations => - VerificationObligations.Where(obligation => !obligation.Cleared).ToArray(); -} - -public sealed record MccGuidanceBundle( - string SourceToolName, - string CanonicalPromptName, - string SkillName, - string GuidanceVersion, - string SystemPrompt, - string[] BestPractices, - string[] ExampleScenarioTitles, - MccCapabilityStatus CapabilityStatus); - -public sealed class MccEvidenceRecord -{ - public required string Id { get; init; } - public required string ToolName { get; init; } - public required string Summary { get; init; } - public required string RawText { get; init; } - public required bool IsError { get; init; } - public required bool Success { get; init; } - public string? ErrorCode { get; init; } - public JsonElement? Root { get; init; } - public JsonElement? Data { get; init; } -} - -public sealed class MccToolExecutionRecord -{ - public required string CallId { get; init; } - public required string ToolName { get; init; } - public required string ArgumentsJson { get; init; } - public required MccEvidenceRecord Evidence { get; init; } -} - -public sealed class MccVerificationObligation -{ - public required string Id { get; init; } - public required string ToolName { get; init; } - public required string Kind { get; init; } - public required string Description { get; init; } - public required string SourceEvidenceId { get; init; } - public JsonElement? Metadata { get; init; } - public bool Cleared { get; set; } - public string? ClearedByEvidenceId { get; set; } -} - -public sealed record MccNormalizedToolResult( - string Text, - bool IsError, - bool Success, - string? ErrorCode, - string? Message, - JsonElement? Root, - JsonElement? Data); diff --git a/DebugTools/MccMcpWebPlayground/Harness/MccToolPolicy.cs b/DebugTools/MccMcpWebPlayground/Harness/MccToolPolicy.cs deleted file mode 100644 index e8a9bd772b..0000000000 --- a/DebugTools/MccMcpWebPlayground/Harness/MccToolPolicy.cs +++ /dev/null @@ -1,133 +0,0 @@ -using System.Collections.Frozen; -using System.Text.Json.Nodes; -using ModelContextProtocol.Client; - -namespace DebugTools.MccMcpWebPlayground.Harness; - -public enum MccToolRisk -{ - ReadOnly, - Stateful, - Sensitive, - EscapeHatch -} - -public sealed record MccToolProfile( - string Name, - MccToolRisk Risk, - bool VisibleByDefault, - bool RequiresExplicitUserIntent); - -public sealed record MccToolCatalogEntry(McpClientTool Tool, MccToolProfile Profile); - -public sealed class MccToolCatalog -{ - public required Dictionary ToolsByName { get; init; } - public required IReadOnlyList ModelVisibleTools { get; init; } -} - -public static class MccToolPolicy -{ - private static readonly FrozenDictionary Profiles = - new Dictionary(StringComparer.OrdinalIgnoreCase) - { - ["mcc_agent_guidance"] = new("mcc_agent_guidance", MccToolRisk.ReadOnly, false, false), - ["mcc_inventory_window_action"] = new("mcc_inventory_window_action", MccToolRisk.EscapeHatch, false, false), - ["mcc_run_internal_command"] = new("mcc_run_internal_command", MccToolRisk.EscapeHatch, false, false), - ["mcc_quit_client"] = new("mcc_quit_client", MccToolRisk.Sensitive, true, true) - }.ToFrozenDictionary(StringComparer.OrdinalIgnoreCase); - - public static MccToolProfile GetProfile(string toolName) - { - return Profiles.TryGetValue(toolName, out MccToolProfile? profile) - ? profile - : new MccToolProfile(toolName, MccToolRisk.Stateful, true, false); - } - - public static MccToolCatalog BuildCatalog(IList tools, MccWebHarnessOptions options, object submitFinalTool) - { - Dictionary toolsByName = tools.ToDictionary( - tool => tool.Name, - tool => new MccToolCatalogEntry(tool, GetProfile(tool.Name)), - StringComparer.OrdinalIgnoreCase); - - List visibleTools = []; - foreach (MccToolCatalogEntry entry in toolsByName.Values.OrderBy(entry => entry.Tool.Name, StringComparer.OrdinalIgnoreCase)) - { - if (!IsVisible(entry.Profile, options)) - continue; - - visibleTools.Add(ToOpenRouterTool(entry.Tool, entry.Profile)); - } - - visibleTools.Add(submitFinalTool); - - return new MccToolCatalog - { - ToolsByName = toolsByName, - ModelVisibleTools = visibleTools - }; - } - - public static bool RequiresExplicitUserIntent(string toolName) - { - return GetProfile(toolName).RequiresExplicitUserIntent; - } - - public static bool HasExplicitUserIntent(string userRequest, string toolName) - { - if (!RequiresExplicitUserIntent(toolName)) - return true; - - string request = userRequest.Trim().ToLowerInvariant(); - return toolName.Equals("mcc_quit_client", StringComparison.OrdinalIgnoreCase) - && (request.Contains("quit mcc", StringComparison.Ordinal) - || request.Contains("close mcc", StringComparison.Ordinal) - || request.Contains("stop mcc", StringComparison.Ordinal) - || request.Contains("exit mcc", StringComparison.Ordinal) - || request.Contains("quit the client", StringComparison.Ordinal) - || request.Contains("stop the client", StringComparison.Ordinal)); - } - - private static bool IsVisible(MccToolProfile profile, MccWebHarnessOptions options) - { - if (!profile.VisibleByDefault) - { - if (profile.Name.Equals("mcc_inventory_window_action", StringComparison.OrdinalIgnoreCase)) - return options.ExposeInventoryWindowAction; - - if (profile.Name.Equals("mcc_run_internal_command", StringComparison.OrdinalIgnoreCase)) - return options.ExposeInternalCommandTool; - - return false; - } - - return true; - } - - private static object ToOpenRouterTool(McpClientTool tool, MccToolProfile profile) - { - JsonNode parameters = JsonNode.Parse(tool.JsonSchema.GetRawText()) ?? new JsonObject - { - ["type"] = "object", - ["properties"] = new JsonObject() - }; - - string description = tool.Description ?? string.Empty; - if (profile.Risk == MccToolRisk.Sensitive) - description = $"{description} Requires explicit user intent."; - else if (profile.Risk == MccToolRisk.EscapeHatch) - description = $"{description} Advanced escape hatch; prefer higher-level tools first."; - - return new Dictionary - { - ["type"] = "function", - ["function"] = new Dictionary - { - ["name"] = tool.Name, - ["description"] = description, - ["parameters"] = parameters - } - }; - } -} diff --git a/DebugTools/MccMcpWebPlayground/Harness/MccWebHarnessOptions.cs b/DebugTools/MccMcpWebPlayground/Harness/MccWebHarnessOptions.cs deleted file mode 100644 index 0855c47168..0000000000 --- a/DebugTools/MccMcpWebPlayground/Harness/MccWebHarnessOptions.cs +++ /dev/null @@ -1,58 +0,0 @@ -namespace DebugTools.MccMcpWebPlayground.Harness; - -public sealed class MccWebHarnessOptions -{ - public const string SectionName = "MccWebHarness"; - - public string? Model { get; set; } - public string OpenRouterBaseUrl { get; set; } = "https://openrouter.ai/api/v1"; - public string McpEndpoint { get; set; } = "http://127.0.0.1:33333/mcp"; - public int MaxTurns { get; set; } = 48; - public int MaxToolCalls { get; set; } = 120; - public int MaxWallClockSeconds { get; set; } = 240; - public int SoftFinishRemainingTurns { get; set; } = 3; - public int SoftFinishRemainingToolCalls { get; set; } = 8; - public int SoftFinishRemainingSeconds { get; set; } = 30; - public bool RequireProviderParameters { get; set; } = true; - public bool AllowFallbacks { get; set; } - public bool DisableParallelToolCalls { get; set; } = true; - public bool ExposeInventoryWindowAction { get; set; } - public bool ExposeInternalCommandTool { get; set; } - - public string? ResolveModel() - { - return FirstNonEmpty(Environment.GetEnvironmentVariable("OPENROUTER_MODEL"), Model); - } - - public string ResolveOpenRouterBaseUrl() - { - return FirstNonEmpty(Environment.GetEnvironmentVariable("OPENROUTER_BASE_URL"), OpenRouterBaseUrl) - ?? "https://openrouter.ai/api/v1"; - } - - public string ResolveMcpEndpoint() - { - return FirstNonEmpty(Environment.GetEnvironmentVariable("MCC_MCP_ENDPOINT"), McpEndpoint) - ?? "http://127.0.0.1:33333/mcp"; - } - - public string? ResolveMcpAuthToken() - { - return Environment.GetEnvironmentVariable("MCC_MCP_AUTH_TOKEN"); - } - - public string? ResolveApiKey() - { - return Environment.GetEnvironmentVariable("OPENROUTER_API_KEY"); - } - - public bool HasApiKeyConfigured() - { - return !string.IsNullOrWhiteSpace(ResolveApiKey()); - } - - private static string? FirstNonEmpty(params string?[] candidates) - { - return candidates.FirstOrDefault(candidate => !string.IsNullOrWhiteSpace(candidate))?.Trim(); - } -} diff --git a/DebugTools/MccMcpWebPlayground/Infrastructure/Mcp/MccMcpSessionFactory.cs b/DebugTools/MccMcpWebPlayground/Infrastructure/Mcp/MccMcpSessionFactory.cs deleted file mode 100644 index 8775bb2c1d..0000000000 --- a/DebugTools/MccMcpWebPlayground/Infrastructure/Mcp/MccMcpSessionFactory.cs +++ /dev/null @@ -1,200 +0,0 @@ -using System.Text; -using System.Text.Json; -using System.Reflection; -using DebugTools.MccMcpWebPlayground.Harness; -using Microsoft.Extensions.Options; -using ModelContextProtocol.Client; -using ModelContextProtocol.Protocol; - -namespace DebugTools.MccMcpWebPlayground.Infrastructure.Mcp; - -public sealed class MccMcpSessionFactory -{ - private readonly MccWebHarnessOptions options; - - public MccMcpSessionFactory(IOptions options) - { - this.options = options.Value; - } - - public async Task CreateAsync(CancellationToken cancellationToken) - { - string endpoint = options.ResolveMcpEndpoint(); - string? token = options.ResolveMcpAuthToken(); - - return await McpClient.CreateAsync(new HttpClientTransport(new HttpClientTransportOptions - { - Endpoint = new Uri(endpoint), - TransportMode = HttpTransportMode.AutoDetect, - AdditionalHeaders = string.IsNullOrWhiteSpace(token) - ? null - : new Dictionary - { - ["Authorization"] = $"Bearer {token}" - } - }), cancellationToken: cancellationToken); - } -} - -public static class MccMcpJson -{ - public static MccNormalizedToolResult Normalize(CallToolResult result) - { - JsonElement? structuredRoot = TryReadStructuredContent(result); - string text = ReadToolResultText(result, structuredRoot); - try - { - using JsonDocument document = JsonDocument.Parse(text); - JsonElement parsedRoot = document.RootElement.Clone(); - JsonElement root = ShouldPreferStructuredRoot(parsedRoot, structuredRoot) - ? structuredRoot!.Value - : parsedRoot; - JsonElement? data = root.TryGetProperty("data", out JsonElement dataElement) - ? dataElement.Clone() - : ShouldTreatRootAsData(root) ? root.Clone() : structuredRoot; - bool success = root.TryGetProperty("success", out JsonElement successElement) - ? successElement.ValueKind != JsonValueKind.False - : result.IsError != true; - string? errorCode = root.TryGetProperty("errorCode", out JsonElement errorCodeElement) && errorCodeElement.ValueKind == JsonValueKind.String - ? errorCodeElement.GetString() - : null; - string? message = root.TryGetProperty("message", out JsonElement messageElement) && messageElement.ValueKind == JsonValueKind.String - ? messageElement.GetString() - : null; - bool isError = result.IsError == true || !success || !string.IsNullOrWhiteSpace(errorCode); - - return new MccNormalizedToolResult(text, isError, success, errorCode, message, root, data); - } - catch - { - bool isError = result.IsError == true; - return new MccNormalizedToolResult(text, isError, !isError, null, null, structuredRoot, structuredRoot); - } - } - - private static string ReadToolResultText(CallToolResult result, JsonElement? structuredRoot) - { - if (result.Content is null) - return structuredRoot?.GetRawText() ?? (result.IsError == true ? "{\"success\":false}" : "{\"success\":true}"); - - StringBuilder builder = new(); - foreach (ContentBlock block in result.Content) - { - if (block is TextContentBlock text && !string.IsNullOrWhiteSpace(text.Text)) - { - if (builder.Length > 0) - builder.Append('\n'); - builder.Append(text.Text); - } - } - - return builder.Length > 0 - ? builder.ToString() - : structuredRoot?.GetRawText() - ?? JsonSerializer.Serialize(new { success = result.IsError != true, isError = result.IsError }); - } - - private static JsonElement? TryReadStructuredContent(CallToolResult result) - { - PropertyInfo? property = typeof(CallToolResult).GetProperty("StructuredContent", BindingFlags.Instance | BindingFlags.Public); - if (property?.GetValue(result) is not { } value) - return null; - - return value switch - { - JsonElement json when json.ValueKind != JsonValueKind.Undefined && json.ValueKind != JsonValueKind.Null => json.Clone(), - JsonDocument document => document.RootElement.Clone(), - string text when !string.IsNullOrWhiteSpace(text) => TryParseJson(text), - _ => TrySerializeToJson(value) - }; - } - - private static JsonElement? TrySerializeToJson(object value) - { - try - { - return JsonSerializer.SerializeToElement(value); - } - catch - { - return null; - } - } - - private static JsonElement? TryParseJson(string text) - { - try - { - using JsonDocument document = JsonDocument.Parse(text); - return document.RootElement.Clone(); - } - catch - { - return null; - } - } - - private static bool ShouldPreferStructuredRoot(JsonElement parsedRoot, JsonElement? structuredRoot) - { - if (structuredRoot is null) - return false; - - if (parsedRoot.ValueKind != JsonValueKind.Object) - return true; - - return !parsedRoot.EnumerateObject().Any(property => - !property.NameEquals("success") && - !property.NameEquals("isError")); - } - - private static bool ShouldTreatRootAsData(JsonElement root) - { - if (root.ValueKind != JsonValueKind.Object) - return false; - - return root.EnumerateObject().Any(property => - !property.NameEquals("success") && - !property.NameEquals("isError") && - !property.NameEquals("errorCode") && - !property.NameEquals("message")); - } -} - -public static class MccJsonArguments -{ - public static Dictionary Parse(string rawJson) - { - try - { - using JsonDocument document = JsonDocument.Parse(string.IsNullOrWhiteSpace(rawJson) ? "{}" : rawJson); - if (document.RootElement.ValueKind != JsonValueKind.Object) - return new Dictionary(); - - Dictionary values = new(StringComparer.OrdinalIgnoreCase); - foreach (JsonProperty property in document.RootElement.EnumerateObject()) - values[property.Name] = Convert(property.Value); - return values; - } - catch - { - return new Dictionary(); - } - } - - private static object? Convert(JsonElement element) - { - return element.ValueKind switch - { - JsonValueKind.Null => null, - JsonValueKind.True => true, - JsonValueKind.False => false, - JsonValueKind.Number => element.TryGetInt64(out long i64) - ? i64 - : element.TryGetDouble(out double d) ? d : element.GetRawText(), - JsonValueKind.String => element.GetString(), - JsonValueKind.Array => element.EnumerateArray().Select(Convert).ToArray(), - JsonValueKind.Object => element.EnumerateObject().ToDictionary(property => property.Name, property => Convert(property.Value)), - _ => element.GetRawText() - }; - } -} diff --git a/DebugTools/MccMcpWebPlayground/Infrastructure/OpenRouter/OpenRouterChatClient.cs b/DebugTools/MccMcpWebPlayground/Infrastructure/OpenRouter/OpenRouterChatClient.cs deleted file mode 100644 index 24d9a0805b..0000000000 --- a/DebugTools/MccMcpWebPlayground/Infrastructure/OpenRouter/OpenRouterChatClient.cs +++ /dev/null @@ -1,120 +0,0 @@ -using System.Net.Http.Headers; -using System.Text; -using System.Text.Json; -using DebugTools.MccMcpWebPlayground.Harness; - -namespace DebugTools.MccMcpWebPlayground.Infrastructure.OpenRouter; - -public sealed class OpenRouterChatClient -{ - private readonly IHttpClientFactory httpClientFactory; - - public OpenRouterChatClient(IHttpClientFactory httpClientFactory) - { - this.httpClientFactory = httpClientFactory; - } - - public async Task CreateTurnAsync( - List messages, - IReadOnlyList tools, - MccWebHarnessOptions options, - CancellationToken cancellationToken) - { - string apiKey = options.ResolveApiKey() ?? throw new InvalidOperationException("OPENROUTER_API_KEY is not configured."); - string model = options.ResolveModel() ?? throw new InvalidOperationException("Model is not configured."); - - using HttpClient client = httpClientFactory.CreateClient("openrouter"); - client.BaseAddress = new Uri(options.ResolveOpenRouterBaseUrl().TrimEnd('/') + "/"); - client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey); - client.DefaultRequestHeaders.TryAddWithoutValidation("HTTP-Referer", "https://localhost/mcc-mcp-web-playground"); - client.DefaultRequestHeaders.TryAddWithoutValidation("X-Title", "MCC MCP Web Playground"); - - Dictionary payload = new() - { - ["model"] = model, - ["messages"] = messages, - ["tools"] = tools, - ["tool_choice"] = "auto", - ["provider"] = new Dictionary - { - ["allow_fallbacks"] = options.AllowFallbacks, - ["require_parameters"] = options.RequireProviderParameters - } - }; - - if (ShouldSendParallelToolCallsParameter(model)) - payload["parallel_tool_calls"] = !options.DisableParallelToolCalls; - - using HttpResponseMessage response = await client.PostAsync( - "chat/completions", - new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, "application/json"), - cancellationToken); - - string body = await response.Content.ReadAsStringAsync(cancellationToken); - if (!response.IsSuccessStatusCode) - throw new InvalidOperationException($"OpenRouter returned HTTP {(int)response.StatusCode}: {body}"); - - using JsonDocument document = JsonDocument.Parse(body); - if (!document.RootElement.TryGetProperty("choices", out JsonElement choices) - || choices.ValueKind != JsonValueKind.Array - || choices.GetArrayLength() == 0) - { - throw new InvalidOperationException("OpenRouter did not return any choices."); - } - - JsonElement message = choices[0].GetProperty("message"); - string assistantContent = message.TryGetProperty("content", out JsonElement contentElement) - ? contentElement.GetString() ?? string.Empty - : string.Empty; - - List toolCalls = []; - if (message.TryGetProperty("tool_calls", out JsonElement toolCallsElement) && toolCallsElement.ValueKind == JsonValueKind.Array) - { - foreach (JsonElement toolCall in toolCallsElement.EnumerateArray()) - { - if (!toolCall.TryGetProperty("id", out JsonElement idElement) - || !toolCall.TryGetProperty("function", out JsonElement functionElement) - || !functionElement.TryGetProperty("name", out JsonElement nameElement)) - { - continue; - } - - toolCalls.Add(new MccModelToolCall( - CallId: idElement.GetString() ?? Guid.NewGuid().ToString("n"), - Name: nameElement.GetString() ?? string.Empty, - ArgumentsJson: functionElement.TryGetProperty("arguments", out JsonElement argumentsElement) - ? argumentsElement.GetString() ?? "{}" - : "{}")); - } - } - - string modelId = document.RootElement.TryGetProperty("model", out JsonElement modelElement) - ? modelElement.GetString() ?? model - : model; - - string? routedProvider = response.Headers.TryGetValues("x-openrouter-provider", out IEnumerable? providerValues) - ? providerValues.FirstOrDefault() - : null; - - return new MccModelTurn(modelId, routedProvider, assistantContent, toolCalls); - } - - private static bool ShouldSendParallelToolCallsParameter(string model) - { - // Some OpenRouter model families reject tool-enabled requests when the parallel_tool_calls - // parameter is present at all, even if it is explicitly set to false. The harness still - // executes all returned tool calls sequentially, so omitting the transport hint for those - // families preserves the intended runtime behavior while keeping the stricter flag for - // compatible models. - return !model.StartsWith("minimax/", StringComparison.OrdinalIgnoreCase) - && !model.StartsWith("google/gemini-", StringComparison.OrdinalIgnoreCase); - } -} - -public sealed record MccModelTurn( - string ModelId, - string? RoutedProvider, - string AssistantContent, - IReadOnlyList ToolCalls); - -public sealed record MccModelToolCall(string CallId, string Name, string ArgumentsJson); diff --git a/DebugTools/MccMcpWebPlayground/MccMcpWebPlayground.csproj b/DebugTools/MccMcpWebPlayground/MccMcpWebPlayground.csproj deleted file mode 100644 index 24ed1bd516..0000000000 --- a/DebugTools/MccMcpWebPlayground/MccMcpWebPlayground.csproj +++ /dev/null @@ -1,14 +0,0 @@ - - - - net10.0 - enable - enable - true - - - - - - - diff --git a/DebugTools/MccMcpWebPlayground/Program.cs b/DebugTools/MccMcpWebPlayground/Program.cs deleted file mode 100644 index 17060301be..0000000000 --- a/DebugTools/MccMcpWebPlayground/Program.cs +++ /dev/null @@ -1,40 +0,0 @@ -using DebugTools.MccMcpWebPlayground.Api; -using DebugTools.MccMcpWebPlayground.Harness; -using DebugTools.MccMcpWebPlayground.Infrastructure.Mcp; -using DebugTools.MccMcpWebPlayground.Infrastructure.OpenRouter; -using Microsoft.AspNetCore.Http.Timeouts; - -var builder = WebApplication.CreateBuilder(args); - -builder.Services.AddOptions() - .Bind(builder.Configuration.GetSection(MccWebHarnessOptions.SectionName)); - -builder.Services.AddRequestTimeouts(options => -{ - options.AddPolicy("mcc-stream", new RequestTimeoutPolicy - { - Timeout = TimeSpan.FromMinutes(10) - }); -}); - -builder.Services.AddHttpClient("openrouter", client => -{ - client.Timeout = TimeSpan.FromMinutes(15); -}); - -builder.Services.AddSingleton(); -builder.Services.AddSingleton(); -builder.Services.AddSingleton(); -builder.Services.AddSingleton(); -builder.Services.AddSingleton(); -builder.Services.AddSingleton(); -builder.Services.AddScoped(); - -var app = builder.Build(); - -app.UseRequestTimeouts(); -app.UseDefaultFiles(); -app.UseStaticFiles(); -app.MapMccPlaygroundEndpoints(); - -app.Run(); diff --git a/DebugTools/MccMcpWebPlayground/Properties/launchSettings.json b/DebugTools/MccMcpWebPlayground/Properties/launchSettings.json deleted file mode 100644 index 3701e48f59..0000000000 --- a/DebugTools/MccMcpWebPlayground/Properties/launchSettings.json +++ /dev/null @@ -1,23 +0,0 @@ -{ - "$schema": "https://json.schemastore.org/launchsettings.json", - "profiles": { - "http": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "http://localhost:5295", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - }, - "https": { - "commandName": "Project", - "dotnetRunMessages": true, - "launchBrowser": true, - "applicationUrl": "https://localhost:7104;http://localhost:5295", - "environmentVariables": { - "ASPNETCORE_ENVIRONMENT": "Development" - } - } - } -} diff --git a/DebugTools/MccMcpWebPlayground/appsettings.Development.json b/DebugTools/MccMcpWebPlayground/appsettings.Development.json deleted file mode 100644 index 6cde4d2748..0000000000 --- a/DebugTools/MccMcpWebPlayground/appsettings.Development.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "MccWebHarness": { - "AllowFallbacks": false, - "DisableParallelToolCalls": true, - "ExposeInventoryWindowAction": false, - "ExposeInternalCommandTool": false - } -} diff --git a/DebugTools/MccMcpWebPlayground/appsettings.json b/DebugTools/MccMcpWebPlayground/appsettings.json deleted file mode 100644 index 869684a510..0000000000 --- a/DebugTools/MccMcpWebPlayground/appsettings.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "Logging": { - "LogLevel": { - "Default": "Information", - "Microsoft.AspNetCore": "Warning" - } - }, - "MccWebHarness": { - "OpenRouterBaseUrl": "https://openrouter.ai/api/v1", - "McpEndpoint": "http://127.0.0.1:33333/mcp", - "MaxTurns": 48, - "MaxToolCalls": 120, - "MaxWallClockSeconds": 240, - "SoftFinishRemainingTurns": 3, - "SoftFinishRemainingToolCalls": 8, - "SoftFinishRemainingSeconds": 30, - "RequireProviderParameters": true, - "AllowFallbacks": false, - "DisableParallelToolCalls": true, - "ExposeInventoryWindowAction": false, - "ExposeInternalCommandTool": false - }, - "AllowedHosts": "*" -} diff --git a/DebugTools/MccMcpWebPlayground/wwwroot/app.js b/DebugTools/MccMcpWebPlayground/wwwroot/app.js deleted file mode 100644 index 14cd9c0e06..0000000000 --- a/DebugTools/MccMcpWebPlayground/wwwroot/app.js +++ /dev/null @@ -1,310 +0,0 @@ -const html = document.documentElement; -const statusEl = document.getElementById("status"); -const sendBtn = document.getElementById("send"); -const stopBtn = document.getElementById("stop"); -const clearBtn = document.getElementById("clear"); -const clearChatBtn = document.getElementById("clear-chat-btn"); -const clearToolsBtn = document.getElementById("clear-tools-btn"); -const promptEl = document.getElementById("prompt"); -const chatEl = document.getElementById("chat"); -const toolsEl = document.getElementById("tools"); -const emptyStateEl = document.getElementById("empty-state"); -const toolsEmptyStateEl = document.getElementById("tools-empty-state"); -const typingIndicatorEl = document.getElementById("typing-indicator"); -const themeToggleBtn = document.getElementById("theme-toggle"); -const themeToggleIconEl = document.getElementById("theme-toggle-icon"); - -let history = []; -let activeAssistantBody = null; -let abortController = null; - -stopBtn.disabled = true; - -loadTheme(); -loadConfig(); - -themeToggleBtn.addEventListener("click", () => { - const next = html.getAttribute("data-theme") === "dark" ? "light" : "dark"; - setTheme(next); -}); - -sendBtn.addEventListener("click", sendPrompt); -stopBtn.addEventListener("click", () => abortController?.abort()); - -clearBtn.addEventListener("click", () => { - history = []; - removeAllMessages(); - removeAllTimelineEvents(); - promptEl.value = ""; - activeAssistantBody = null; - updateEmptyStates(); -}); - -clearChatBtn.addEventListener("click", () => { - history = []; - removeAllMessages(); - promptEl.value = ""; - activeAssistantBody = null; - updateEmptyStates(); -}); - -clearToolsBtn.addEventListener("click", () => { - removeAllTimelineEvents(); - updateEmptyStates(); -}); - -promptEl.addEventListener("keydown", (event) => { - if (event.key === "Enter" && !event.shiftKey) { - event.preventDefault(); - sendPrompt(); - } -}); - -async function loadConfig() { - try { - const response = await fetch("/api/config"); - if (!response.ok) { - throw new Error(`HTTP ${response.status}`); - } - - const config = await response.json(); - const modelLabel = config.model ? config.model : "Model not configured"; - statusEl.textContent = config.hasApiKey ? modelLabel : `${modelLabel} / missing OPENROUTER_API_KEY`; - } catch (error) { - statusEl.textContent = `Config error: ${error.message}`; - } -} - -async function sendPrompt() { - const prompt = promptEl.value.trim(); - if (!prompt || abortController) { - return; - } - - history.push({ role: "user", content: prompt }); - addMessage("user", prompt); - promptEl.value = ""; - activeAssistantBody = addMessage("assistant", ""); - setBusy(true); - - abortController = new AbortController(); - - try { - const response = await fetch("/api/chat/stream", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify({ messages: history }), - signal: abortController.signal - }); - - if (!response.ok || !response.body) { - throw new Error(`HTTP ${response.status}`); - } - - const reader = response.body.getReader(); - const decoder = new TextDecoder(); - let buffer = ""; - let finalAssistantText = ""; - - while (true) { - const { value, done } = await reader.read(); - if (done) { - break; - } - - buffer += decoder.decode(value, { stream: true }); - buffer = parseSseChunk(buffer, (eventName, envelope) => { - addTimelineEvent(eventName, envelope); - - if (eventName === "error") { - const errorMessage = envelope.data?.message ?? "Unknown error"; - addMessage("error", errorMessage); - } - - if (eventName === "final") { - finalAssistantText = formatFinalText(envelope.data); - activeAssistantBody.textContent = finalAssistantText; - } - - if (eventName === "state_summary") { - const turnCount = envelope.data?.turnCount ?? "?"; - const toolCallCount = envelope.data?.toolCallCount ?? "?"; - statusEl.textContent = `Running turn ${turnCount}, tools ${toolCallCount}`; - } - }); - } - - if (finalAssistantText.trim().length > 0) { - history.push({ role: "assistant", content: finalAssistantText }); - } - } catch (error) { - if (error.name !== "AbortError") { - addMessage("error", `Request failed: ${error.message}`); - addTimelineEvent("error", { - kind: "error", - data: { - code: "request_failed", - message: error.message - } - }); - } - } finally { - abortController = null; - activeAssistantBody = null; - setBusy(false); - } -} - -function parseSseChunk(buffer, onEvent) { - let blockIndex; - while ((blockIndex = buffer.indexOf("\n\n")) >= 0) { - const rawBlock = buffer.slice(0, blockIndex); - buffer = buffer.slice(blockIndex + 2); - - let eventName = "message"; - let dataText = ""; - for (const line of rawBlock.split("\n")) { - if (line.startsWith("event:")) { - eventName = line.slice(6).trim(); - } else if (line.startsWith("data:")) { - dataText += line.slice(5).trim(); - } - } - - if (!dataText) { - continue; - } - - try { - onEvent(eventName, JSON.parse(dataText)); - } catch (error) { - onEvent("error", { - kind: "error", - data: { - code: "invalid_sse_payload", - message: "Failed to parse SSE payload.", - detail: dataText - } - }); - } - } - - return buffer; -} - -function addMessage(role, content) { - const wrapper = document.createElement("div"); - wrapper.className = `message ${role}`; - - const label = document.createElement("div"); - label.className = "message-label"; - label.textContent = role; - - const body = document.createElement("div"); - body.className = "message-body"; - body.textContent = content; - - wrapper.append(label, body); - chatEl.insertBefore(wrapper, typingIndicatorEl); - chatEl.scrollTop = chatEl.scrollHeight; - updateEmptyStates(); - return body; -} - -function addTimelineEvent(kind, envelope) { - const event = document.createElement("div"); - event.className = `timeline-event kind-${kind}`; - - const label = document.createElement("div"); - label.className = "timeline-label"; - label.textContent = kind.replaceAll("_", " "); - - const body = document.createElement("div"); - body.className = "timeline-body-text"; - body.textContent = JSON.stringify(envelope.data ?? envelope, null, 2); - - event.append(label, body); - toolsEl.appendChild(event); - toolsEl.scrollTop = toolsEl.scrollHeight; - updateEmptyStates(); -} - -function formatFinalText(data) { - if (!data) { - return "The run completed without a final payload."; - } - - const lines = []; - if (data.headline) { - lines.push(data.headline); - lines.push(""); - } - - if (data.answerMarkdown) { - lines.push(data.answerMarkdown); - } - - if (Array.isArray(data.verifiedFacts) && data.verifiedFacts.length > 0) { - lines.push(""); - lines.push("Verified facts:"); - for (const fact of data.verifiedFacts) { - lines.push(`- ${fact}`); - } - } - - if (Array.isArray(data.openIssues) && data.openIssues.length > 0) { - lines.push(""); - lines.push("Open issues:"); - for (const issue of data.openIssues) { - lines.push(`- ${issue}`); - } - } - - if (data.nextAction) { - lines.push(""); - lines.push(`Next action: ${data.nextAction}`); - } - - return lines.join("\n"); -} - -function setBusy(busy) { - sendBtn.disabled = busy; - stopBtn.disabled = !busy; - promptEl.disabled = busy; - typingIndicatorEl.classList.toggle("visible", busy); - statusEl.classList.toggle("busy", busy); - if (!busy) { - loadConfig(); - } else { - statusEl.textContent = "Streaming run..."; - } -} - -function removeAllMessages() { - for (const message of chatEl.querySelectorAll(".message")) { - message.remove(); - } -} - -function removeAllTimelineEvents() { - for (const event of toolsEl.querySelectorAll(".timeline-event")) { - event.remove(); - } -} - -function updateEmptyStates() { - emptyStateEl.style.display = chatEl.querySelectorAll(".message").length === 0 ? "" : "none"; - toolsEmptyStateEl.style.display = toolsEl.querySelectorAll(".timeline-event").length === 0 ? "" : "none"; -} - -function loadTheme() { - const theme = localStorage.getItem("mcc-playground-theme") || "dark"; - setTheme(theme); -} - -function setTheme(theme) { - html.setAttribute("data-theme", theme); - themeToggleIconEl.textContent = theme === "dark" ? "◎" : "◐"; - localStorage.setItem("mcc-playground-theme", theme); -} diff --git a/DebugTools/MccMcpWebPlayground/wwwroot/index.html b/DebugTools/MccMcpWebPlayground/wwwroot/index.html deleted file mode 100644 index 71a9d992e4..0000000000 --- a/DebugTools/MccMcpWebPlayground/wwwroot/index.html +++ /dev/null @@ -1,79 +0,0 @@ - - - - - - MCC MCP Playground - - - - - -
-
-
-
-
MCC MCP Playground
-
Canonical guidance bootstrap, typed run state, verified completion
-
-
-
-
Booting...
- -
-
- -
-
-
-

Conversation

-
- -
-
-
-
-

No messages yet.

-

Ask the harness to inspect or act through MCC's MCP server.

-
-
- -
-
-
- -
-
-

Run Timeline

-
- -
-
-
-
-

No run events yet.

-

Typed SSE events will appear here as the harness runs.

-
-
-
-
- -
-
- -
- -
- - - - diff --git a/DebugTools/MccMcpWebPlayground/wwwroot/site.css b/DebugTools/MccMcpWebPlayground/wwwroot/site.css deleted file mode 100644 index 66621a6746..0000000000 --- a/DebugTools/MccMcpWebPlayground/wwwroot/site.css +++ /dev/null @@ -1,383 +0,0 @@ -:root { - --bg: #07111e; - --bg-alt: #0b1828; - --panel: rgba(10, 21, 36, 0.88); - --panel-strong: rgba(8, 18, 30, 0.96); - --border: rgba(111, 179, 255, 0.18); - --text: #dce9ff; - --text-dim: #8ca4c8; - --text-soft: #607695; - --accent: #75e7c7; - --accent-strong: #4ad3ff; - --warning: #ffcc66; - --danger: #ff7b8b; - --shadow: 0 20px 60px rgba(0, 0, 0, 0.3); -} - -[data-theme="light"] { - --bg: #edf4ff; - --bg-alt: #dfeaff; - --panel: rgba(255, 255, 255, 0.88); - --panel-strong: rgba(255, 255, 255, 0.96); - --border: rgba(28, 89, 164, 0.14); - --text: #172843; - --text-dim: #4d6383; - --text-soft: #7d90ad; - --accent: #0f936d; - --accent-strong: #006cbb; - --warning: #a56700; - --danger: #ba2741; - --shadow: 0 20px 60px rgba(61, 89, 138, 0.12); -} - -*, -*::before, -*::after { - box-sizing: border-box; -} - -html, -body { - margin: 0; - min-height: 100%; -} - -body { - display: grid; - grid-template-rows: auto 1fr auto; - gap: 16px; - padding: 18px; - color: var(--text); - font-family: "Space Mono", monospace; - background: - radial-gradient(circle at top left, rgba(74, 211, 255, 0.12), transparent 35%), - radial-gradient(circle at right center, rgba(117, 231, 199, 0.08), transparent 40%), - linear-gradient(160deg, var(--bg), var(--bg-alt)); -} - -button, -textarea { - font: inherit; -} - -.topbar, -.panel, -.composer { - border: 1px solid var(--border); - border-radius: 18px; - background: var(--panel); - backdrop-filter: blur(18px); - box-shadow: var(--shadow); -} - -.topbar { - display: flex; - align-items: center; - justify-content: space-between; - gap: 16px; - padding: 18px 20px; -} - -.brand { - display: flex; - align-items: center; - gap: 14px; -} - -.brand-dot { - width: 12px; - height: 12px; - border-radius: 999px; - background: linear-gradient(135deg, var(--accent), var(--accent-strong)); - box-shadow: 0 0 18px rgba(117, 231, 199, 0.55); -} - -.brand-title { - font-family: "Syne", sans-serif; - font-size: 1rem; - font-weight: 800; - letter-spacing: 0.08em; - text-transform: uppercase; -} - -.brand-title span { - color: var(--accent); -} - -.brand-subtitle { - margin-top: 4px; - color: var(--text-dim); - font-size: 0.74rem; -} - -.topbar-actions { - display: flex; - align-items: center; - gap: 10px; -} - -.status-pill { - padding: 8px 12px; - border-radius: 999px; - border: 1px solid var(--border); - color: var(--text-dim); - font-size: 0.72rem; - white-space: nowrap; -} - -.status-pill.busy { - color: var(--accent-strong); - border-color: rgba(74, 211, 255, 0.4); -} - -.icon-button, -.ghost-button, -.primary-button { - border-radius: 12px; - border: 1px solid var(--border); - background: rgba(255, 255, 255, 0.02); - color: var(--text); - padding: 10px 14px; - cursor: pointer; - transition: transform 0.15s ease, border-color 0.15s ease, background 0.15s ease; -} - -.icon-button:hover, -.ghost-button:hover, -.primary-button:hover { - transform: translateY(-1px); - border-color: rgba(117, 231, 199, 0.4); -} - -.primary-button { - background: linear-gradient(135deg, var(--accent), var(--accent-strong)); - color: #06101a; - font-weight: 700; -} - -.layout { - min-height: 0; - display: grid; - grid-template-columns: 1.2fr 0.9fr; - gap: 16px; -} - -.panel { - display: flex; - flex-direction: column; - min-height: 0; - overflow: hidden; -} - -.panel-header { - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; - padding: 16px 18px; - border-bottom: 1px solid var(--border); -} - -.panel-header h1 { - margin: 0; - font-family: "Syne", sans-serif; - font-size: 0.82rem; - text-transform: uppercase; - letter-spacing: 0.08em; -} - -.panel-body { - min-height: 0; - overflow: auto; - padding: 18px; -} - -.chat-body, -.timeline-body { - display: flex; - flex-direction: column; - gap: 12px; -} - -.message, -.timeline-event { - border-radius: 16px; - border: 1px solid var(--border); - padding: 14px 16px; - background: var(--panel-strong); -} - -.message.user { - background: rgba(74, 211, 255, 0.09); -} - -.message.assistant { - background: rgba(117, 231, 199, 0.06); -} - -.message.error { - background: rgba(255, 123, 139, 0.08); - border-color: rgba(255, 123, 139, 0.2); -} - -.message-label, -.timeline-label { - margin-bottom: 8px; - color: var(--text-dim); - font-size: 0.7rem; - letter-spacing: 0.08em; - text-transform: uppercase; -} - -.message-body, -.timeline-body-text { - white-space: pre-wrap; - word-break: break-word; - line-height: 1.6; - font-size: 0.82rem; -} - -.timeline-event.kind-tool_called { - border-left: 4px solid var(--accent-strong); -} - -.timeline-event.kind-tool_result { - border-left: 4px solid var(--accent); -} - -.timeline-event.kind-error { - border-left: 4px solid var(--danger); -} - -.timeline-event.kind-budget { - border-left: 4px solid var(--warning); -} - -.timeline-event.kind-final { - border-left: 4px solid var(--accent); -} - -.empty-state { - padding: 30px 18px; - text-align: center; - color: var(--text-soft); - border: 1px dashed var(--border); - border-radius: 14px; -} - -.typing-indicator { - display: none; - gap: 6px; - align-items: center; - padding: 10px 4px 0; -} - -.typing-indicator.visible { - display: flex; -} - -.typing-indicator span { - width: 8px; - height: 8px; - border-radius: 999px; - background: var(--accent-strong); - animation: bounce 1s ease-in-out infinite; -} - -.typing-indicator span:nth-child(2) { - animation-delay: 0.16s; -} - -.typing-indicator span:nth-child(3) { - animation-delay: 0.32s; -} - -@keyframes bounce { - 0%, 80%, 100% { - transform: translateY(0); - opacity: 0.45; - } - 40% { - transform: translateY(-5px); - opacity: 1; - } -} - -.composer { - padding: 16px 18px; -} - -.composer-row { - display: flex; -} - -#prompt { - width: 100%; - min-height: 78px; - max-height: 240px; - resize: vertical; - border-radius: 16px; - border: 1px solid var(--border); - background: rgba(0, 0, 0, 0.12); - color: var(--text); - padding: 14px 16px; -} - -#prompt:focus { - outline: 2px solid rgba(74, 211, 255, 0.35); - border-color: rgba(74, 211, 255, 0.45); -} - -.composer-footer { - margin-top: 14px; - display: flex; - align-items: center; - justify-content: space-between; - gap: 12px; -} - -.composer-hint { - color: var(--text-dim); - font-size: 0.74rem; -} - -kbd { - padding: 2px 6px; - border-radius: 6px; - border: 1px solid var(--border); - background: rgba(255, 255, 255, 0.03); - font-size: 0.74rem; -} - -.composer-actions { - display: flex; - gap: 10px; -} - -@media (max-width: 980px) { - .layout { - grid-template-columns: 1fr; - } - - body { - padding: 12px; - } - - .topbar, - .composer { - padding: 14px; - } - - .composer-footer { - flex-direction: column; - align-items: stretch; - } - - .composer-actions { - justify-content: stretch; - } - - .composer-actions > button { - flex: 1; - } -} diff --git a/DebugTools/MinecraftClientProxy.sln b/DebugTools/MinecraftClientProxy.sln deleted file mode 100644 index 042c5c69c4..0000000000 --- a/DebugTools/MinecraftClientProxy.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MinecraftClientProxy", "MinecraftClientProxy\MinecraftClientProxy.csproj", "{025E4E4C-F38B-46F6-8492-61B732018B1E}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x86 = Debug|x86 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {025E4E4C-F38B-46F6-8492-61B732018B1E}.Debug|x86.ActiveCfg = Debug|x86 - {025E4E4C-F38B-46F6-8492-61B732018B1E}.Debug|x86.Build.0 = Debug|x86 - {025E4E4C-F38B-46F6-8492-61B732018B1E}.Release|x86.ActiveCfg = Release|x86 - {025E4E4C-F38B-46F6-8492-61B732018B1E}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/DebugTools/MinecraftClientProxy/Compression/CRC32.cs b/DebugTools/MinecraftClientProxy/Compression/CRC32.cs deleted file mode 100644 index c24160522c..0000000000 --- a/DebugTools/MinecraftClientProxy/Compression/CRC32.cs +++ /dev/null @@ -1,814 +0,0 @@ -// CRC32.cs -// ------------------------------------------------------------------ -// -// Copyright (c) 2011 Dino Chiesa. -// All rights reserved. -// -// This code module is part of DotNetZip, a zipfile class library. -// -// ------------------------------------------------------------------ -// -// This code is licensed under the Microsoft Public License. -// See the file License.txt for the license details. -// More info on: http://dotnetzip.codeplex.com -// -// ------------------------------------------------------------------ -// -// Last Saved: <2011-August-02 18:25:54> -// -// ------------------------------------------------------------------ -// -// This module defines the CRC32 class, which can do the CRC32 algorithm, using -// arbitrary starting polynomials, and bit reversal. The bit reversal is what -// distinguishes this CRC-32 used in BZip2 from the CRC-32 that is used in PKZIP -// files, or GZIP files. This class does both. -// -// ------------------------------------------------------------------ - - -using System; -using Interop = System.Runtime.InteropServices; - -namespace Ionic.Crc -{ - /// - /// Computes a CRC-32. The CRC-32 algorithm is parameterized - you - /// can set the polynomial and enable or disable bit - /// reversal. This can be used for GZIP, BZip2, or ZIP. - /// - /// - /// This type is used internally by DotNetZip; it is generally not used - /// directly by applications wishing to create, read, or manipulate zip - /// archive files. - /// - - [Interop.GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000C")] - [Interop.ComVisible(true)] -#if !NETCF - [Interop.ClassInterface(Interop.ClassInterfaceType.AutoDispatch)] -#endif - public class CRC32 - { - /// - /// Indicates the total number of bytes applied to the CRC. - /// - public Int64 TotalBytesRead - { - get - { - return _TotalBytesRead; - } - } - - /// - /// Indicates the current CRC for all blocks slurped in. - /// - public Int32 Crc32Result - { - get - { - return unchecked((Int32)(~_register)); - } - } - - /// - /// Returns the CRC32 for the specified stream. - /// - /// The stream over which to calculate the CRC32 - /// the CRC32 calculation - public Int32 GetCrc32(System.IO.Stream input) - { - return GetCrc32AndCopy(input, null); - } - - /// - /// Returns the CRC32 for the specified stream, and writes the input into the - /// output stream. - /// - /// The stream over which to calculate the CRC32 - /// The stream into which to deflate the input - /// the CRC32 calculation - public Int32 GetCrc32AndCopy(System.IO.Stream input, System.IO.Stream output) - { - if (input == null) - throw new Exception("The input stream must not be null."); - - unchecked - { - byte[] buffer = new byte[BUFFER_SIZE]; - int readSize = BUFFER_SIZE; - - _TotalBytesRead = 0; - int count = input.Read(buffer, 0, readSize); - if (output != null) output.Write(buffer, 0, count); - _TotalBytesRead += count; - while (count > 0) - { - SlurpBlock(buffer, 0, count); - count = input.Read(buffer, 0, readSize); - if (output != null) output.Write(buffer, 0, count); - _TotalBytesRead += count; - } - - return (Int32)(~_register); - } - } - - - /// - /// Get the CRC32 for the given (word,byte) combo. This is a - /// computation defined by PKzip for PKZIP 2.0 (weak) encryption. - /// - /// The word to start with. - /// The byte to combine it with. - /// The CRC-ized result. - public Int32 ComputeCrc32(Int32 W, byte B) - { - return _InternalComputeCrc32((UInt32)W, B); - } - - internal Int32 _InternalComputeCrc32(UInt32 W, byte B) - { - return (Int32)(crc32Table[(W ^ B) & 0xFF] ^ (W >> 8)); - } - - - /// - /// Update the value for the running CRC32 using the given block of bytes. - /// This is useful when using the CRC32() class in a Stream. - /// - /// block of bytes to slurp - /// starting point in the block - /// how many bytes within the block to slurp - public void SlurpBlock(byte[] block, int offset, int count) - { - if (block == null) - throw new Exception("The data buffer must not be null."); - - // bzip algorithm - for (int i = 0; i < count; i++) - { - int x = offset + i; - byte b = block[x]; - if (this.reverseBits) - { - UInt32 temp = (_register >> 24) ^ b; - _register = (_register << 8) ^ crc32Table[temp]; - } - else - { - UInt32 temp = (_register & 0x000000FF) ^ b; - _register = (_register >> 8) ^ crc32Table[temp]; - } - } - _TotalBytesRead += count; - } - - - /// - /// Process one byte in the CRC. - /// - /// the byte to include into the CRC . - public void UpdateCRC(byte b) - { - if (this.reverseBits) - { - UInt32 temp = (_register >> 24) ^ b; - _register = (_register << 8) ^ crc32Table[temp]; - } - else - { - UInt32 temp = (_register & 0x000000FF) ^ b; - _register = (_register >> 8) ^ crc32Table[temp]; - } - } - - /// - /// Process a run of N identical bytes into the CRC. - /// - /// - /// - /// This method serves as an optimization for updating the CRC when a - /// run of identical bytes is found. Rather than passing in a buffer of - /// length n, containing all identical bytes b, this method accepts the - /// byte value and the length of the (virtual) buffer - the length of - /// the run. - /// - /// - /// the byte to include into the CRC. - /// the number of times that byte should be repeated. - public void UpdateCRC(byte b, int n) - { - while (n-- > 0) - { - if (this.reverseBits) - { - uint temp = (_register >> 24) ^ b; - _register = (_register << 8) ^ crc32Table[(temp >= 0) - ? temp - : (temp + 256)]; - } - else - { - UInt32 temp = (_register & 0x000000FF) ^ b; - _register = (_register >> 8) ^ crc32Table[(temp >= 0) - ? temp - : (temp + 256)]; - - } - } - } - - - - private static uint ReverseBits(uint data) - { - unchecked - { - uint ret = data; - ret = (ret & 0x55555555) << 1 | (ret >> 1) & 0x55555555; - ret = (ret & 0x33333333) << 2 | (ret >> 2) & 0x33333333; - ret = (ret & 0x0F0F0F0F) << 4 | (ret >> 4) & 0x0F0F0F0F; - ret = (ret << 24) | ((ret & 0xFF00) << 8) | ((ret >> 8) & 0xFF00) | (ret >> 24); - return ret; - } - } - - private static byte ReverseBits(byte data) - { - unchecked - { - uint u = (uint)data * 0x00020202; - uint m = 0x01044010; - uint s = u & m; - uint t = (u << 2) & (m << 1); - return (byte)((0x01001001 * (s + t)) >> 24); - } - } - - - - private void GenerateLookupTable() - { - crc32Table = new UInt32[256]; - unchecked - { - UInt32 dwCrc; - byte i = 0; - do - { - dwCrc = i; - for (byte j = 8; j > 0; j--) - { - if ((dwCrc & 1) == 1) - { - dwCrc = (dwCrc >> 1) ^ dwPolynomial; - } - else - { - dwCrc >>= 1; - } - } - if (reverseBits) - { - crc32Table[ReverseBits(i)] = ReverseBits(dwCrc); - } - else - { - crc32Table[i] = dwCrc; - } - i++; - } while (i!=0); - } - -#if VERBOSE - Console.WriteLine(); - Console.WriteLine("private static readonly UInt32[] crc32Table = {"); - for (int i = 0; i < crc32Table.Length; i+=4) - { - Console.Write(" "); - for (int j=0; j < 4; j++) - { - Console.Write(" 0x{0:X8}U,", crc32Table[i+j]); - } - Console.WriteLine(); - } - Console.WriteLine("};"); - Console.WriteLine(); -#endif - } - - - private uint gf2_matrix_times(uint[] matrix, uint vec) - { - uint sum = 0; - int i=0; - while (vec != 0) - { - if ((vec & 0x01)== 0x01) - sum ^= matrix[i]; - vec >>= 1; - i++; - } - return sum; - } - - private void gf2_matrix_square(uint[] square, uint[] mat) - { - for (int i = 0; i < 32; i++) - square[i] = gf2_matrix_times(mat, mat[i]); - } - - - - /// - /// Combines the given CRC32 value with the current running total. - /// - /// - /// This is useful when using a divide-and-conquer approach to - /// calculating a CRC. Multiple threads can each calculate a - /// CRC32 on a segment of the data, and then combine the - /// individual CRC32 values at the end. - /// - /// the crc value to be combined with this one - /// the length of data the CRC value was calculated on - public void Combine(int crc, int length) - { - uint[] even = new uint[32]; // even-power-of-two zeros operator - uint[] odd = new uint[32]; // odd-power-of-two zeros operator - - if (length == 0) - return; - - uint crc1= ~_register; - uint crc2= (uint) crc; - - // put operator for one zero bit in odd - odd[0] = this.dwPolynomial; // the CRC-32 polynomial - uint row = 1; - for (int i = 1; i < 32; i++) - { - odd[i] = row; - row <<= 1; - } - - // put operator for two zero bits in even - gf2_matrix_square(even, odd); - - // put operator for four zero bits in odd - gf2_matrix_square(odd, even); - - uint len2 = (uint) length; - - // apply len2 zeros to crc1 (first square will put the operator for one - // zero byte, eight zero bits, in even) - do { - // apply zeros operator for this bit of len2 - gf2_matrix_square(even, odd); - - if ((len2 & 1)== 1) - crc1 = gf2_matrix_times(even, crc1); - len2 >>= 1; - - if (len2 == 0) - break; - - // another iteration of the loop with odd and even swapped - gf2_matrix_square(odd, even); - if ((len2 & 1)==1) - crc1 = gf2_matrix_times(odd, crc1); - len2 >>= 1; - - - } while (len2 != 0); - - crc1 ^= crc2; - - _register= ~crc1; - - //return (int) crc1; - return; - } - - - /// - /// Create an instance of the CRC32 class using the default settings: no - /// bit reversal, and a polynomial of 0xEDB88320. - /// - public CRC32() : this(false) - { - } - - /// - /// Create an instance of the CRC32 class, specifying whether to reverse - /// data bits or not. - /// - /// - /// specify true if the instance should reverse data bits. - /// - /// - /// - /// In the CRC-32 used by BZip2, the bits are reversed. Therefore if you - /// want a CRC32 with compatibility with BZip2, you should pass true - /// here. In the CRC-32 used by GZIP and PKZIP, the bits are not - /// reversed; Therefore if you want a CRC32 with compatibility with - /// those, you should pass false. - /// - /// - public CRC32(bool reverseBits) : - this( unchecked((int)0xEDB88320), reverseBits) - { - } - - - /// - /// Create an instance of the CRC32 class, specifying the polynomial and - /// whether to reverse data bits or not. - /// - /// - /// The polynomial to use for the CRC, expressed in the reversed (LSB) - /// format: the highest ordered bit in the polynomial value is the - /// coefficient of the 0th power; the second-highest order bit is the - /// coefficient of the 1 power, and so on. Expressed this way, the - /// polynomial for the CRC-32C used in IEEE 802.3, is 0xEDB88320. - /// - /// - /// specify true if the instance should reverse data bits. - /// - /// - /// - /// - /// In the CRC-32 used by BZip2, the bits are reversed. Therefore if you - /// want a CRC32 with compatibility with BZip2, you should pass true - /// here for the reverseBits parameter. In the CRC-32 used by - /// GZIP and PKZIP, the bits are not reversed; Therefore if you want a - /// CRC32 with compatibility with those, you should pass false for the - /// reverseBits parameter. - /// - /// - public CRC32(int polynomial, bool reverseBits) - { - this.reverseBits = reverseBits; - this.dwPolynomial = (uint) polynomial; - this.GenerateLookupTable(); - } - - /// - /// Reset the CRC-32 class - clear the CRC "remainder register." - /// - /// - /// - /// Use this when employing a single instance of this class to compute - /// multiple, distinct CRCs on multiple, distinct data blocks. - /// - /// - public void Reset() - { - _register = 0xFFFFFFFFU; - } - - // private member vars - private UInt32 dwPolynomial; - private Int64 _TotalBytesRead; - private bool reverseBits; - private UInt32[] crc32Table; - private const int BUFFER_SIZE = 8192; - private UInt32 _register = 0xFFFFFFFFU; - } - - - /// - /// A Stream that calculates a CRC32 (a checksum) on all bytes read, - /// or on all bytes written. - /// - /// - /// - /// - /// This class can be used to verify the CRC of a ZipEntry when - /// reading from a stream, or to calculate a CRC when writing to a - /// stream. The stream should be used to either read, or write, but - /// not both. If you intermix reads and writes, the results are not - /// defined. - /// - /// - /// - /// This class is intended primarily for use internally by the - /// DotNetZip library. - /// - /// - public class CrcCalculatorStream : System.IO.Stream, System.IDisposable - { - private static readonly Int64 UnsetLengthLimit = -99; - - internal System.IO.Stream _innerStream; - private CRC32 _Crc32; - private Int64 _lengthLimit = -99; - private bool _leaveOpen; - - /// - /// The default constructor. - /// - /// - /// - /// Instances returned from this constructor will leave the underlying - /// stream open upon Close(). The stream uses the default CRC32 - /// algorithm, which implies a polynomial of 0xEDB88320. - /// - /// - /// The underlying stream - public CrcCalculatorStream(System.IO.Stream stream) - : this(true, CrcCalculatorStream.UnsetLengthLimit, stream, null) - { - } - - /// - /// The constructor allows the caller to specify how to handle the - /// underlying stream at close. - /// - /// - /// - /// The stream uses the default CRC32 algorithm, which implies a - /// polynomial of 0xEDB88320. - /// - /// - /// The underlying stream - /// true to leave the underlying stream - /// open upon close of the CrcCalculatorStream; false otherwise. - public CrcCalculatorStream(System.IO.Stream stream, bool leaveOpen) - : this(leaveOpen, CrcCalculatorStream.UnsetLengthLimit, stream, null) - { - } - - /// - /// A constructor allowing the specification of the length of the stream - /// to read. - /// - /// - /// - /// The stream uses the default CRC32 algorithm, which implies a - /// polynomial of 0xEDB88320. - /// - /// - /// Instances returned from this constructor will leave the underlying - /// stream open upon Close(). - /// - /// - /// The underlying stream - /// The length of the stream to slurp - public CrcCalculatorStream(System.IO.Stream stream, Int64 length) - : this(true, length, stream, null) - { - if (length < 0) - throw new ArgumentException("length"); - } - - /// - /// A constructor allowing the specification of the length of the stream - /// to read, as well as whether to keep the underlying stream open upon - /// Close(). - /// - /// - /// - /// The stream uses the default CRC32 algorithm, which implies a - /// polynomial of 0xEDB88320. - /// - /// - /// The underlying stream - /// The length of the stream to slurp - /// true to leave the underlying stream - /// open upon close of the CrcCalculatorStream; false otherwise. - public CrcCalculatorStream(System.IO.Stream stream, Int64 length, bool leaveOpen) - : this(leaveOpen, length, stream, null) - { - if (length < 0) - throw new ArgumentException("length"); - } - - /// - /// A constructor allowing the specification of the length of the stream - /// to read, as well as whether to keep the underlying stream open upon - /// Close(), and the CRC32 instance to use. - /// - /// - /// - /// The stream uses the specified CRC32 instance, which allows the - /// application to specify how the CRC gets calculated. - /// - /// - /// The underlying stream - /// The length of the stream to slurp - /// true to leave the underlying stream - /// open upon close of the CrcCalculatorStream; false otherwise. - /// the CRC32 instance to use to calculate the CRC32 - public CrcCalculatorStream(System.IO.Stream stream, Int64 length, bool leaveOpen, - CRC32 crc32) - : this(leaveOpen, length, stream, crc32) - { - if (length < 0) - throw new ArgumentException("length"); - } - - - // This ctor is private - no validation is done here. This is to allow the use - // of a (specific) negative value for the _lengthLimit, to indicate that there - // is no length set. So we validate the length limit in those ctors that use an - // explicit param, otherwise we don't validate, because it could be our special - // value. - private CrcCalculatorStream - (bool leaveOpen, Int64 length, System.IO.Stream stream, CRC32 crc32) - : base() - { - _innerStream = stream; - _Crc32 = crc32 ?? new CRC32(); - _lengthLimit = length; - _leaveOpen = leaveOpen; - } - - - /// - /// Gets the total number of bytes run through the CRC32 calculator. - /// - /// - /// - /// This is either the total number of bytes read, or the total number of - /// bytes written, depending on the direction of this stream. - /// - public Int64 TotalBytesSlurped - { - get { return _Crc32.TotalBytesRead; } - } - - /// - /// Provides the current CRC for all blocks slurped in. - /// - /// - /// - /// The running total of the CRC is kept as data is written or read - /// through the stream. read this property after all reads or writes to - /// get an accurate CRC for the entire stream. - /// - /// - public Int32 Crc - { - get { return _Crc32.Crc32Result; } - } - - /// - /// Indicates whether the underlying stream will be left open when the - /// CrcCalculatorStream is Closed. - /// - /// - /// - /// Set this at any point before calling . - /// - /// - public bool LeaveOpen - { - get { return _leaveOpen; } - set { _leaveOpen = value; } - } - - /// - /// Read from the stream - /// - /// the buffer to read - /// the offset at which to start - /// the number of bytes to read - /// the number of bytes actually read - public override int Read(byte[] buffer, int offset, int count) - { - int bytesToRead = count; - - // Need to limit the # of bytes returned, if the stream is intended to have - // a definite length. This is especially useful when returning a stream for - // the uncompressed data directly to the application. The app won't - // necessarily read only the UncompressedSize number of bytes. For example - // wrapping the stream returned from OpenReader() into a StreadReader() and - // calling ReadToEnd() on it, We can "over-read" the zip data and get a - // corrupt string. The length limits that, prevents that problem. - - if (_lengthLimit != CrcCalculatorStream.UnsetLengthLimit) - { - if (_Crc32.TotalBytesRead >= _lengthLimit) return 0; // EOF - Int64 bytesRemaining = _lengthLimit - _Crc32.TotalBytesRead; - if (bytesRemaining < count) bytesToRead = (int)bytesRemaining; - } - int n = _innerStream.Read(buffer, offset, bytesToRead); - if (n > 0) _Crc32.SlurpBlock(buffer, offset, n); - return n; - } - - /// - /// Write to the stream. - /// - /// the buffer from which to write - /// the offset at which to start writing - /// the number of bytes to write - public override void Write(byte[] buffer, int offset, int count) - { - if (count > 0) _Crc32.SlurpBlock(buffer, offset, count); - _innerStream.Write(buffer, offset, count); - } - - /// - /// Indicates whether the stream supports reading. - /// - public override bool CanRead - { - get { return _innerStream.CanRead; } - } - - /// - /// Indicates whether the stream supports seeking. - /// - /// - /// - /// Always returns false. - /// - /// - public override bool CanSeek - { - get { return false; } - } - - /// - /// Indicates whether the stream supports writing. - /// - public override bool CanWrite - { - get { return _innerStream.CanWrite; } - } - - /// - /// Flush the stream. - /// - public override void Flush() - { - _innerStream.Flush(); - } - - /// - /// Returns the length of the underlying stream. - /// - public override long Length - { - get - { - if (_lengthLimit == CrcCalculatorStream.UnsetLengthLimit) - return _innerStream.Length; - else return _lengthLimit; - } - } - - /// - /// The getter for this property returns the total bytes read. - /// If you use the setter, it will throw - /// . - /// - public override long Position - { - get { return _Crc32.TotalBytesRead; } - set { throw new NotSupportedException(); } - } - - /// - /// Seeking is not supported on this stream. This method always throws - /// - /// - /// N/A - /// N/A - /// N/A - public override long Seek(long offset, System.IO.SeekOrigin origin) - { - throw new NotSupportedException(); - } - - /// - /// This method always throws - /// - /// - /// N/A - public override void SetLength(long value) - { - throw new NotSupportedException(); - } - - - void IDisposable.Dispose() - { - Close(); - } - - /// - /// Closes the stream. - /// - public override void Close() - { - base.Close(); - if (!_leaveOpen) - _innerStream.Close(); - } - - } - -} diff --git a/DebugTools/MinecraftClientProxy/Compression/Deflate.cs b/DebugTools/MinecraftClientProxy/Compression/Deflate.cs deleted file mode 100644 index 040d6102f5..0000000000 --- a/DebugTools/MinecraftClientProxy/Compression/Deflate.cs +++ /dev/null @@ -1,1879 +0,0 @@ -// Deflate.cs -// ------------------------------------------------------------------ -// -// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation. -// All rights reserved. -// -// This code module is part of DotNetZip, a zipfile class library. -// -// ------------------------------------------------------------------ -// -// This code is licensed under the Microsoft Public License. -// See the file License.txt for the license details. -// More info on: http://dotnetzip.codeplex.com -// -// ------------------------------------------------------------------ -// -// last saved (in emacs): -// Time-stamp: <2011-August-03 19:52:15> -// -// ------------------------------------------------------------------ -// -// This module defines logic for handling the Deflate or compression. -// -// This code is based on multiple sources: -// - the original zlib v1.2.3 source, which is Copyright (C) 1995-2005 Jean-loup Gailly. -// - the original jzlib, which is Copyright (c) 2000-2003 ymnk, JCraft,Inc. -// -// However, this code is significantly different from both. -// The object model is not the same, and many of the behaviors are different. -// -// In keeping with the license for these other works, the copyrights for -// jzlib and zlib are here. -// -// ----------------------------------------------------------------------- -// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in -// the documentation and/or other materials provided with the distribution. -// -// 3. The names of the authors may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, -// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, -// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// ----------------------------------------------------------------------- -// -// This program is based on zlib-1.1.3; credit to authors -// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) -// and contributors of zlib. -// -// ----------------------------------------------------------------------- - - -using System; - -namespace Ionic.Zlib -{ - - internal enum BlockState - { - NeedMore = 0, // block not completed, need more input or more output - BlockDone, // block flush performed - FinishStarted, // finish started, need only more output at next deflate - FinishDone // finish done, accept no more input or output - } - - internal enum DeflateFlavor - { - Store, - Fast, - Slow - } - - internal sealed class DeflateManager - { - private static readonly int MEM_LEVEL_MAX = 9; - private static readonly int MEM_LEVEL_DEFAULT = 8; - - internal delegate BlockState CompressFunc(FlushType flush); - - internal class Config - { - // Use a faster search when the previous match is longer than this - internal int GoodLength; // reduce lazy search above this match length - - // Attempt to find a better match only when the current match is - // strictly smaller than this value. This mechanism is used only for - // compression levels >= 4. For levels 1,2,3: MaxLazy is actually - // MaxInsertLength. (See DeflateFast) - - internal int MaxLazy; // do not perform lazy search above this match length - - internal int NiceLength; // quit search above this match length - - // To speed up deflation, hash chains are never searched beyond this - // length. A higher limit improves compression ratio but degrades the speed. - - internal int MaxChainLength; - - internal DeflateFlavor Flavor; - - private Config(int goodLength, int maxLazy, int niceLength, int maxChainLength, DeflateFlavor flavor) - { - this.GoodLength = goodLength; - this.MaxLazy = maxLazy; - this.NiceLength = niceLength; - this.MaxChainLength = maxChainLength; - this.Flavor = flavor; - } - - public static Config Lookup(CompressionLevel level) - { - return Table[(int)level]; - } - - - static Config() - { - Table = new Config[] { - new Config(0, 0, 0, 0, DeflateFlavor.Store), - new Config(4, 4, 8, 4, DeflateFlavor.Fast), - new Config(4, 5, 16, 8, DeflateFlavor.Fast), - new Config(4, 6, 32, 32, DeflateFlavor.Fast), - - new Config(4, 4, 16, 16, DeflateFlavor.Slow), - new Config(8, 16, 32, 32, DeflateFlavor.Slow), - new Config(8, 16, 128, 128, DeflateFlavor.Slow), - new Config(8, 32, 128, 256, DeflateFlavor.Slow), - new Config(32, 128, 258, 1024, DeflateFlavor.Slow), - new Config(32, 258, 258, 4096, DeflateFlavor.Slow), - }; - } - - private static readonly Config[] Table; - } - - - private CompressFunc DeflateFunction; - - private static readonly System.String[] _ErrorMessage = new System.String[] - { - "need dictionary", - "stream end", - "", - "file error", - "stream error", - "data error", - "insufficient memory", - "buffer error", - "incompatible version", - "" - }; - - // preset dictionary flag in zlib header - private static readonly int PRESET_DICT = 0x20; - - private static readonly int INIT_STATE = 42; - private static readonly int BUSY_STATE = 113; - private static readonly int FINISH_STATE = 666; - - // The deflate compression method - private static readonly int Z_DEFLATED = 8; - - private static readonly int STORED_BLOCK = 0; - private static readonly int STATIC_TREES = 1; - private static readonly int DYN_TREES = 2; - - // The three kinds of block type - private static readonly int Z_BINARY = 0; - private static readonly int Z_ASCII = 1; - private static readonly int Z_UNKNOWN = 2; - - private static readonly int Buf_size = 8 * 2; - - private static readonly int MIN_MATCH = 3; - private static readonly int MAX_MATCH = 258; - - private static readonly int MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); - - private static readonly int HEAP_SIZE = (2 * InternalConstants.L_CODES + 1); - - private static readonly int END_BLOCK = 256; - - internal ZlibCodec _codec; // the zlib encoder/decoder - internal int status; // as the name implies - internal byte[] pending; // output still pending - waiting to be compressed - internal int nextPending; // index of next pending byte to output to the stream - internal int pendingCount; // number of bytes in the pending buffer - - internal sbyte data_type; // UNKNOWN, BINARY or ASCII - internal int last_flush; // value of flush param for previous deflate call - - internal int w_size; // LZ77 window size (32K by default) - internal int w_bits; // log2(w_size) (8..16) - internal int w_mask; // w_size - 1 - - //internal byte[] dictionary; - internal byte[] window; - - // Sliding window. Input bytes are read into the second half of the window, - // and move to the first half later to keep a dictionary of at least wSize - // bytes. With this organization, matches are limited to a distance of - // wSize-MAX_MATCH bytes, but this ensures that IO is always - // performed with a length multiple of the block size. - // - // To do: use the user input buffer as sliding window. - - internal int window_size; - // Actual size of window: 2*wSize, except when the user input buffer - // is directly used as sliding window. - - internal short[] prev; - // Link to older string with same hash index. To limit the size of this - // array to 64K, this link is maintained only for the last 32K strings. - // An index in this array is thus a window index modulo 32K. - - internal short[] head; // Heads of the hash chains or NIL. - - internal int ins_h; // hash index of string to be inserted - internal int hash_size; // number of elements in hash table - internal int hash_bits; // log2(hash_size) - internal int hash_mask; // hash_size-1 - - // Number of bits by which ins_h must be shifted at each input - // step. It must be such that after MIN_MATCH steps, the oldest - // byte no longer takes part in the hash key, that is: - // hash_shift * MIN_MATCH >= hash_bits - internal int hash_shift; - - // Window position at the beginning of the current output block. Gets - // negative when the window is moved backwards. - - internal int block_start; - - Config config; - internal int match_length; // length of best match - internal int prev_match; // previous match - internal int match_available; // set if previous match exists - internal int strstart; // start of string to insert into.....???? - internal int match_start; // start of matching string - internal int lookahead; // number of valid bytes ahead in window - - // Length of the best match at previous step. Matches not greater than this - // are discarded. This is used in the lazy match evaluation. - internal int prev_length; - - // Insert new strings in the hash table only if the match length is not - // greater than this length. This saves time but degrades compression. - // max_insert_length is used only for compression levels <= 3. - - internal CompressionLevel compressionLevel; // compression level (1..9) - internal CompressionStrategy compressionStrategy; // favor or force Huffman coding - - - internal short[] dyn_ltree; // literal and length tree - internal short[] dyn_dtree; // distance tree - internal short[] bl_tree; // Huffman tree for bit lengths - - internal Tree treeLiterals = new Tree(); // desc for literal tree - internal Tree treeDistances = new Tree(); // desc for distance tree - internal Tree treeBitLengths = new Tree(); // desc for bit length tree - - // number of codes at each bit length for an optimal tree - internal short[] bl_count = new short[InternalConstants.MAX_BITS + 1]; - - // heap used to build the Huffman trees - internal int[] heap = new int[2 * InternalConstants.L_CODES + 1]; - - internal int heap_len; // number of elements in the heap - internal int heap_max; // element of largest frequency - - // The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. - // The same heap array is used to build all trees. - - // Depth of each subtree used as tie breaker for trees of equal frequency - internal sbyte[] depth = new sbyte[2 * InternalConstants.L_CODES + 1]; - - internal int _lengthOffset; // index for literals or lengths - - - // Size of match buffer for literals/lengths. There are 4 reasons for - // limiting lit_bufsize to 64K: - // - frequencies can be kept in 16 bit counters - // - if compression is not successful for the first block, all input - // data is still in the window so we can still emit a stored block even - // when input comes from standard input. (This can also be done for - // all blocks if lit_bufsize is not greater than 32K.) - // - if compression is not successful for a file smaller than 64K, we can - // even emit a stored file instead of a stored block (saving 5 bytes). - // This is applicable only for zip (not gzip or zlib). - // - creating new Huffman trees less frequently may not provide fast - // adaptation to changes in the input data statistics. (Take for - // example a binary file with poorly compressible code followed by - // a highly compressible string table.) Smaller buffer sizes give - // fast adaptation but have of course the overhead of transmitting - // trees more frequently. - - internal int lit_bufsize; - - internal int last_lit; // running index in l_buf - - // Buffer for distances. To simplify the code, d_buf and l_buf have - // the same number of elements. To use different lengths, an extra flag - // array would be necessary. - - internal int _distanceOffset; // index into pending; points to distance data?? - - internal int opt_len; // bit length of current block with optimal trees - internal int static_len; // bit length of current block with static trees - internal int matches; // number of string matches in current block - internal int last_eob_len; // bit length of EOB code for last block - - // Output buffer. bits are inserted starting at the bottom (least - // significant bits). - internal short bi_buf; - - // Number of valid bits in bi_buf. All bits above the last valid bit - // are always zero. - internal int bi_valid; - - - internal DeflateManager() - { - dyn_ltree = new short[HEAP_SIZE * 2]; - dyn_dtree = new short[(2 * InternalConstants.D_CODES + 1) * 2]; // distance tree - bl_tree = new short[(2 * InternalConstants.BL_CODES + 1) * 2]; // Huffman tree for bit lengths - } - - - // lm_init - private void _InitializeLazyMatch() - { - window_size = 2 * w_size; - - // clear the hash - workitem 9063 - Array.Clear(head, 0, hash_size); - //for (int i = 0; i < hash_size; i++) head[i] = 0; - - config = Config.Lookup(compressionLevel); - SetDeflater(); - - strstart = 0; - block_start = 0; - lookahead = 0; - match_length = prev_length = MIN_MATCH - 1; - match_available = 0; - ins_h = 0; - } - - // Initialize the tree data structures for a new zlib stream. - private void _InitializeTreeData() - { - treeLiterals.dyn_tree = dyn_ltree; - treeLiterals.staticTree = StaticTree.Literals; - - treeDistances.dyn_tree = dyn_dtree; - treeDistances.staticTree = StaticTree.Distances; - - treeBitLengths.dyn_tree = bl_tree; - treeBitLengths.staticTree = StaticTree.BitLengths; - - bi_buf = 0; - bi_valid = 0; - last_eob_len = 8; // enough lookahead for inflate - - // Initialize the first block of the first file: - _InitializeBlocks(); - } - - internal void _InitializeBlocks() - { - // Initialize the trees. - for (int i = 0; i < InternalConstants.L_CODES; i++) - dyn_ltree[i * 2] = 0; - for (int i = 0; i < InternalConstants.D_CODES; i++) - dyn_dtree[i * 2] = 0; - for (int i = 0; i < InternalConstants.BL_CODES; i++) - bl_tree[i * 2] = 0; - - dyn_ltree[END_BLOCK * 2] = 1; - opt_len = static_len = 0; - last_lit = matches = 0; - } - - // Restore the heap property by moving down the tree starting at node k, - // exchanging a node with the smallest of its two sons if necessary, stopping - // when the heap property is re-established (each father smaller than its - // two sons). - internal void pqdownheap(short[] tree, int k) - { - int v = heap[k]; - int j = k << 1; // left son of k - while (j <= heap_len) - { - // Set j to the smallest of the two sons: - if (j < heap_len && _IsSmaller(tree, heap[j + 1], heap[j], depth)) - { - j++; - } - // Exit if v is smaller than both sons - if (_IsSmaller(tree, v, heap[j], depth)) - break; - - // Exchange v with the smallest son - heap[k] = heap[j]; k = j; - // And continue down the tree, setting j to the left son of k - j <<= 1; - } - heap[k] = v; - } - - internal static bool _IsSmaller(short[] tree, int n, int m, sbyte[] depth) - { - short tn2 = tree[n * 2]; - short tm2 = tree[m * 2]; - return (tn2 < tm2 || (tn2 == tm2 && depth[n] <= depth[m])); - } - - - // Scan a literal or distance tree to determine the frequencies of the codes - // in the bit length tree. - internal void scan_tree(short[] tree, int max_code) - { - int n; // iterates over all tree elements - int prevlen = -1; // last emitted length - int curlen; // length of current code - int nextlen = (int)tree[0 * 2 + 1]; // length of next code - int count = 0; // repeat count of the current code - int max_count = 7; // max repeat count - int min_count = 4; // min repeat count - - if (nextlen == 0) - { - max_count = 138; min_count = 3; - } - tree[(max_code + 1) * 2 + 1] = (short)0x7fff; // guard //?? - - for (n = 0; n <= max_code; n++) - { - curlen = nextlen; nextlen = (int)tree[(n + 1) * 2 + 1]; - if (++count < max_count && curlen == nextlen) - { - continue; - } - else if (count < min_count) - { - bl_tree[curlen * 2] = (short)(bl_tree[curlen * 2] + count); - } - else if (curlen != 0) - { - if (curlen != prevlen) - bl_tree[curlen * 2]++; - bl_tree[InternalConstants.REP_3_6 * 2]++; - } - else if (count <= 10) - { - bl_tree[InternalConstants.REPZ_3_10 * 2]++; - } - else - { - bl_tree[InternalConstants.REPZ_11_138 * 2]++; - } - count = 0; prevlen = curlen; - if (nextlen == 0) - { - max_count = 138; min_count = 3; - } - else if (curlen == nextlen) - { - max_count = 6; min_count = 3; - } - else - { - max_count = 7; min_count = 4; - } - } - } - - // Construct the Huffman tree for the bit lengths and return the index in - // bl_order of the last bit length code to send. - internal int build_bl_tree() - { - int max_blindex; // index of last bit length code of non zero freq - - // Determine the bit length frequencies for literal and distance trees - scan_tree(dyn_ltree, treeLiterals.max_code); - scan_tree(dyn_dtree, treeDistances.max_code); - - // Build the bit length tree: - treeBitLengths.build_tree(this); - // opt_len now includes the length of the tree representations, except - // the lengths of the bit lengths codes and the 5+5+4 bits for the counts. - - // Determine the number of bit length codes to send. The pkzip format - // requires that at least 4 bit length codes be sent. (appnote.txt says - // 3 but the actual value used is 4.) - for (max_blindex = InternalConstants.BL_CODES - 1; max_blindex >= 3; max_blindex--) - { - if (bl_tree[Tree.bl_order[max_blindex] * 2 + 1] != 0) - break; - } - // Update opt_len to include the bit length tree and counts - opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; - - return max_blindex; - } - - - // Send the header for a block using dynamic Huffman trees: the counts, the - // lengths of the bit length codes, the literal tree and the distance tree. - // IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. - internal void send_all_trees(int lcodes, int dcodes, int blcodes) - { - int rank; // index in bl_order - - send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt - send_bits(dcodes - 1, 5); - send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt - for (rank = 0; rank < blcodes; rank++) - { - send_bits(bl_tree[Tree.bl_order[rank] * 2 + 1], 3); - } - send_tree(dyn_ltree, lcodes - 1); // literal tree - send_tree(dyn_dtree, dcodes - 1); // distance tree - } - - // Send a literal or distance tree in compressed form, using the codes in - // bl_tree. - internal void send_tree(short[] tree, int max_code) - { - int n; // iterates over all tree elements - int prevlen = -1; // last emitted length - int curlen; // length of current code - int nextlen = tree[0 * 2 + 1]; // length of next code - int count = 0; // repeat count of the current code - int max_count = 7; // max repeat count - int min_count = 4; // min repeat count - - if (nextlen == 0) - { - max_count = 138; min_count = 3; - } - - for (n = 0; n <= max_code; n++) - { - curlen = nextlen; nextlen = tree[(n + 1) * 2 + 1]; - if (++count < max_count && curlen == nextlen) - { - continue; - } - else if (count < min_count) - { - do - { - send_code(curlen, bl_tree); - } - while (--count != 0); - } - else if (curlen != 0) - { - if (curlen != prevlen) - { - send_code(curlen, bl_tree); count--; - } - send_code(InternalConstants.REP_3_6, bl_tree); - send_bits(count - 3, 2); - } - else if (count <= 10) - { - send_code(InternalConstants.REPZ_3_10, bl_tree); - send_bits(count - 3, 3); - } - else - { - send_code(InternalConstants.REPZ_11_138, bl_tree); - send_bits(count - 11, 7); - } - count = 0; prevlen = curlen; - if (nextlen == 0) - { - max_count = 138; min_count = 3; - } - else if (curlen == nextlen) - { - max_count = 6; min_count = 3; - } - else - { - max_count = 7; min_count = 4; - } - } - } - - // Output a block of bytes on the stream. - // IN assertion: there is enough room in pending_buf. - private void put_bytes(byte[] p, int start, int len) - { - Array.Copy(p, start, pending, pendingCount, len); - pendingCount += len; - } - -#if NOTNEEDED - private void put_byte(byte c) - { - pending[pendingCount++] = c; - } - internal void put_short(int b) - { - unchecked - { - pending[pendingCount++] = (byte)b; - pending[pendingCount++] = (byte)(b >> 8); - } - } - internal void putShortMSB(int b) - { - unchecked - { - pending[pendingCount++] = (byte)(b >> 8); - pending[pendingCount++] = (byte)b; - } - } -#endif - - internal void send_code(int c, short[] tree) - { - int c2 = c * 2; - send_bits((tree[c2] & 0xffff), (tree[c2 + 1] & 0xffff)); - } - - internal void send_bits(int value, int length) - { - int len = length; - unchecked - { - if (bi_valid > (int)Buf_size - len) - { - //int val = value; - // bi_buf |= (val << bi_valid); - - bi_buf |= (short)((value << bi_valid) & 0xffff); - //put_short(bi_buf); - pending[pendingCount++] = (byte)bi_buf; - pending[pendingCount++] = (byte)(bi_buf >> 8); - - - bi_buf = (short)((uint)value >> (Buf_size - bi_valid)); - bi_valid += len - Buf_size; - } - else - { - // bi_buf |= (value) << bi_valid; - bi_buf |= (short)((value << bi_valid) & 0xffff); - bi_valid += len; - } - } - } - - // Send one empty static block to give enough lookahead for inflate. - // This takes 10 bits, of which 7 may remain in the bit buffer. - // The current inflate code requires 9 bits of lookahead. If the - // last two codes for the previous block (real code plus EOB) were coded - // on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode - // the last real code. In this case we send two empty static blocks instead - // of one. (There are no problems if the previous block is stored or fixed.) - // To simplify the code, we assume the worst case of last real code encoded - // on one bit only. - internal void _tr_align() - { - send_bits(STATIC_TREES << 1, 3); - send_code(END_BLOCK, StaticTree.lengthAndLiteralsTreeCodes); - - bi_flush(); - - // Of the 10 bits for the empty block, we have already sent - // (10 - bi_valid) bits. The lookahead for the last real code (before - // the EOB of the previous block) was thus at least one plus the length - // of the EOB plus what we have just sent of the empty static block. - if (1 + last_eob_len + 10 - bi_valid < 9) - { - send_bits(STATIC_TREES << 1, 3); - send_code(END_BLOCK, StaticTree.lengthAndLiteralsTreeCodes); - bi_flush(); - } - last_eob_len = 7; - } - - - // Save the match info and tally the frequency counts. Return true if - // the current block must be flushed. - internal bool _tr_tally(int dist, int lc) - { - pending[_distanceOffset + last_lit * 2] = unchecked((byte) ( (uint)dist >> 8 ) ); - pending[_distanceOffset + last_lit * 2 + 1] = unchecked((byte)dist); - pending[_lengthOffset + last_lit] = unchecked((byte)lc); - last_lit++; - - if (dist == 0) - { - // lc is the unmatched char - dyn_ltree[lc * 2]++; - } - else - { - matches++; - // Here, lc is the match length - MIN_MATCH - dist--; // dist = match distance - 1 - dyn_ltree[(Tree.LengthCode[lc] + InternalConstants.LITERALS + 1) * 2]++; - dyn_dtree[Tree.DistanceCode(dist) * 2]++; - } - - if ((last_lit & 0x1fff) == 0 && (int)compressionLevel > 2) - { - // Compute an upper bound for the compressed length - int out_length = last_lit << 3; - int in_length = strstart - block_start; - int dcode; - for (dcode = 0; dcode < InternalConstants.D_CODES; dcode++) - { - out_length = (int)(out_length + (int)dyn_dtree[dcode * 2] * (5L + Tree.ExtraDistanceBits[dcode])); - } - out_length >>= 3; - if ((matches < (last_lit / 2)) && out_length < in_length / 2) - return true; - } - - return (last_lit == lit_bufsize - 1) || (last_lit == lit_bufsize); - // dinoch - wraparound? - // We avoid equality with lit_bufsize because of wraparound at 64K - // on 16 bit machines and because stored blocks are restricted to - // 64K-1 bytes. - } - - - - // Send the block data compressed using the given Huffman trees - internal void send_compressed_block(short[] ltree, short[] dtree) - { - int distance; // distance of matched string - int lc; // match length or unmatched char (if dist == 0) - int lx = 0; // running index in l_buf - int code; // the code to send - int extra; // number of extra bits to send - - if (last_lit != 0) - { - do - { - int ix = _distanceOffset + lx * 2; - distance = ((pending[ix] << 8) & 0xff00) | - (pending[ix + 1] & 0xff); - lc = (pending[_lengthOffset + lx]) & 0xff; - lx++; - - if (distance == 0) - { - send_code(lc, ltree); // send a literal byte - } - else - { - // literal or match pair - // Here, lc is the match length - MIN_MATCH - code = Tree.LengthCode[lc]; - - // send the length code - send_code(code + InternalConstants.LITERALS + 1, ltree); - extra = Tree.ExtraLengthBits[code]; - if (extra != 0) - { - // send the extra length bits - lc -= Tree.LengthBase[code]; - send_bits(lc, extra); - } - distance--; // dist is now the match distance - 1 - code = Tree.DistanceCode(distance); - - // send the distance code - send_code(code, dtree); - - extra = Tree.ExtraDistanceBits[code]; - if (extra != 0) - { - // send the extra distance bits - distance -= Tree.DistanceBase[code]; - send_bits(distance, extra); - } - } - - // Check that the overlay between pending and d_buf+l_buf is ok: - } - while (lx < last_lit); - } - - send_code(END_BLOCK, ltree); - last_eob_len = ltree[END_BLOCK * 2 + 1]; - } - - - - // Set the data type to ASCII or BINARY, using a crude approximation: - // binary if more than 20% of the bytes are <= 6 or >= 128, ascii otherwise. - // IN assertion: the fields freq of dyn_ltree are set and the total of all - // frequencies does not exceed 64K (to fit in an int on 16 bit machines). - internal void set_data_type() - { - int n = 0; - int ascii_freq = 0; - int bin_freq = 0; - while (n < 7) - { - bin_freq += dyn_ltree[n * 2]; n++; - } - while (n < 128) - { - ascii_freq += dyn_ltree[n * 2]; n++; - } - while (n < InternalConstants.LITERALS) - { - bin_freq += dyn_ltree[n * 2]; n++; - } - data_type = (sbyte)(bin_freq > (ascii_freq >> 2) ? Z_BINARY : Z_ASCII); - } - - - - // Flush the bit buffer, keeping at most 7 bits in it. - internal void bi_flush() - { - if (bi_valid == 16) - { - pending[pendingCount++] = (byte)bi_buf; - pending[pendingCount++] = (byte)(bi_buf >> 8); - bi_buf = 0; - bi_valid = 0; - } - else if (bi_valid >= 8) - { - //put_byte((byte)bi_buf); - pending[pendingCount++] = (byte)bi_buf; - bi_buf >>= 8; - bi_valid -= 8; - } - } - - // Flush the bit buffer and align the output on a byte boundary - internal void bi_windup() - { - if (bi_valid > 8) - { - pending[pendingCount++] = (byte)bi_buf; - pending[pendingCount++] = (byte)(bi_buf >> 8); - } - else if (bi_valid > 0) - { - //put_byte((byte)bi_buf); - pending[pendingCount++] = (byte)bi_buf; - } - bi_buf = 0; - bi_valid = 0; - } - - // Copy a stored block, storing first the length and its - // one's complement if requested. - internal void copy_block(int buf, int len, bool header) - { - bi_windup(); // align on byte boundary - last_eob_len = 8; // enough lookahead for inflate - - if (header) - unchecked - { - //put_short((short)len); - pending[pendingCount++] = (byte)len; - pending[pendingCount++] = (byte)(len >> 8); - //put_short((short)~len); - pending[pendingCount++] = (byte)~len; - pending[pendingCount++] = (byte)(~len >> 8); - } - - put_bytes(window, buf, len); - } - - internal void flush_block_only(bool eof) - { - _tr_flush_block(block_start >= 0 ? block_start : -1, strstart - block_start, eof); - block_start = strstart; - _codec.flush_pending(); - } - - // Copy without compression as much as possible from the input stream, return - // the current block state. - // This function does not insert new strings in the dictionary since - // uncompressible data is probably not useful. This function is used - // only for the level=0 compression option. - // NOTE: this function should be optimized to avoid extra copying from - // window to pending_buf. - internal BlockState DeflateNone(FlushType flush) - { - // Stored blocks are limited to 0xffff bytes, pending is limited - // to pending_buf_size, and each stored block has a 5 byte header: - - int max_block_size = 0xffff; - int max_start; - - if (max_block_size > pending.Length - 5) - { - max_block_size = pending.Length - 5; - } - - // Copy as much as possible from input to output: - while (true) - { - // Fill the window as much as possible: - if (lookahead <= 1) - { - _fillWindow(); - if (lookahead == 0 && flush == FlushType.None) - return BlockState.NeedMore; - if (lookahead == 0) - break; // flush the current block - } - - strstart += lookahead; - lookahead = 0; - - // Emit a stored block if pending will be full: - max_start = block_start + max_block_size; - if (strstart == 0 || strstart >= max_start) - { - // strstart == 0 is possible when wraparound on 16-bit machine - lookahead = (int)(strstart - max_start); - strstart = (int)max_start; - - flush_block_only(false); - if (_codec.AvailableBytesOut == 0) - return BlockState.NeedMore; - } - - // Flush if we may have to slide, otherwise block_start may become - // negative and the data will be gone: - if (strstart - block_start >= w_size - MIN_LOOKAHEAD) - { - flush_block_only(false); - if (_codec.AvailableBytesOut == 0) - return BlockState.NeedMore; - } - } - - flush_block_only(flush == FlushType.Finish); - if (_codec.AvailableBytesOut == 0) - return (flush == FlushType.Finish) ? BlockState.FinishStarted : BlockState.NeedMore; - - return flush == FlushType.Finish ? BlockState.FinishDone : BlockState.BlockDone; - } - - - // Send a stored block - internal void _tr_stored_block(int buf, int stored_len, bool eof) - { - send_bits((STORED_BLOCK << 1) + (eof ? 1 : 0), 3); // send block type - copy_block(buf, stored_len, true); // with header - } - - // Determine the best encoding for the current block: dynamic trees, static - // trees or store, and output the encoded block to the zip file. - internal void _tr_flush_block(int buf, int stored_len, bool eof) - { - int opt_lenb, static_lenb; // opt_len and static_len in bytes - int max_blindex = 0; // index of last bit length code of non zero freq - - // Build the Huffman trees unless a stored block is forced - if (compressionLevel > 0) - { - // Check if the file is ascii or binary - if (data_type == Z_UNKNOWN) - set_data_type(); - - // Construct the literal and distance trees - treeLiterals.build_tree(this); - - treeDistances.build_tree(this); - - // At this point, opt_len and static_len are the total bit lengths of - // the compressed block data, excluding the tree representations. - - // Build the bit length tree for the above two trees, and get the index - // in bl_order of the last bit length code to send. - max_blindex = build_bl_tree(); - - // Determine the best encoding. Compute first the block length in bytes - opt_lenb = (opt_len + 3 + 7) >> 3; - static_lenb = (static_len + 3 + 7) >> 3; - - if (static_lenb <= opt_lenb) - opt_lenb = static_lenb; - } - else - { - opt_lenb = static_lenb = stored_len + 5; // force a stored block - } - - if (stored_len + 4 <= opt_lenb && buf != -1) - { - // 4: two words for the lengths - // The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. - // Otherwise we can't have processed more than WSIZE input bytes since - // the last block flush, because compression would have been - // successful. If LIT_BUFSIZE <= WSIZE, it is never too late to - // transform a block into a stored block. - _tr_stored_block(buf, stored_len, eof); - } - else if (static_lenb == opt_lenb) - { - send_bits((STATIC_TREES << 1) + (eof ? 1 : 0), 3); - send_compressed_block(StaticTree.lengthAndLiteralsTreeCodes, StaticTree.distTreeCodes); - } - else - { - send_bits((DYN_TREES << 1) + (eof ? 1 : 0), 3); - send_all_trees(treeLiterals.max_code + 1, treeDistances.max_code + 1, max_blindex + 1); - send_compressed_block(dyn_ltree, dyn_dtree); - } - - // The above check is made mod 2^32, for files larger than 512 MB - // and uLong implemented on 32 bits. - - _InitializeBlocks(); - - if (eof) - { - bi_windup(); - } - } - - // Fill the window when the lookahead becomes insufficient. - // Updates strstart and lookahead. - // - // IN assertion: lookahead < MIN_LOOKAHEAD - // OUT assertions: strstart <= window_size-MIN_LOOKAHEAD - // At least one byte has been read, or avail_in == 0; reads are - // performed for at least two bytes (required for the zip translate_eol - // option -- not supported here). - private void _fillWindow() - { - int n, m; - int p; - int more; // Amount of free space at the end of the window. - - do - { - more = (window_size - lookahead - strstart); - - // Deal with !@#$% 64K limit: - if (more == 0 && strstart == 0 && lookahead == 0) - { - more = w_size; - } - else if (more == -1) - { - // Very unlikely, but possible on 16 bit machine if strstart == 0 - // and lookahead == 1 (input done one byte at time) - more--; - - // If the window is almost full and there is insufficient lookahead, - // move the upper half to the lower one to make room in the upper half. - } - else if (strstart >= w_size + w_size - MIN_LOOKAHEAD) - { - Array.Copy(window, w_size, window, 0, w_size); - match_start -= w_size; - strstart -= w_size; // we now have strstart >= MAX_DIST - block_start -= w_size; - - // Slide the hash table (could be avoided with 32 bit values - // at the expense of memory usage). We slide even when level == 0 - // to keep the hash table consistent if we switch back to level > 0 - // later. (Using level 0 permanently is not an optimal usage of - // zlib, so we don't care about this pathological case.) - - n = hash_size; - p = n; - do - { - m = (head[--p] & 0xffff); - head[p] = (short)((m >= w_size) ? (m - w_size) : 0); - } - while (--n != 0); - - n = w_size; - p = n; - do - { - m = (prev[--p] & 0xffff); - prev[p] = (short)((m >= w_size) ? (m - w_size) : 0); - // If n is not on any hash chain, prev[n] is garbage but - // its value will never be used. - } - while (--n != 0); - more += w_size; - } - - if (_codec.AvailableBytesIn == 0) - return; - - // If there was no sliding: - // strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && - // more == window_size - lookahead - strstart - // => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) - // => more >= window_size - 2*WSIZE + 2 - // In the BIG_MEM or MMAP case (not yet supported), - // window_size == input_size + MIN_LOOKAHEAD && - // strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. - // Otherwise, window_size == 2*WSIZE so more >= 2. - // If there was sliding, more >= WSIZE. So in all cases, more >= 2. - - n = _codec.read_buf(window, strstart + lookahead, more); - lookahead += n; - - // Initialize the hash value now that we have some input: - if (lookahead >= MIN_MATCH) - { - ins_h = window[strstart] & 0xff; - ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask; - } - // If the whole input has less than MIN_MATCH bytes, ins_h is garbage, - // but this is not important since only literal bytes will be emitted. - } - while (lookahead < MIN_LOOKAHEAD && _codec.AvailableBytesIn != 0); - } - - // Compress as much as possible from the input stream, return the current - // block state. - // This function does not perform lazy evaluation of matches and inserts - // new strings in the dictionary only for unmatched strings or for short - // matches. It is used only for the fast compression options. - internal BlockState DeflateFast(FlushType flush) - { - // short hash_head = 0; // head of the hash chain - int hash_head = 0; // head of the hash chain - bool bflush; // set if current block must be flushed - - while (true) - { - // Make sure that we always have enough lookahead, except - // at the end of the input file. We need MAX_MATCH bytes - // for the next match, plus MIN_MATCH bytes to insert the - // string following the next match. - if (lookahead < MIN_LOOKAHEAD) - { - _fillWindow(); - if (lookahead < MIN_LOOKAHEAD && flush == FlushType.None) - { - return BlockState.NeedMore; - } - if (lookahead == 0) - break; // flush the current block - } - - // Insert the string window[strstart .. strstart+2] in the - // dictionary, and set hash_head to the head of the hash chain: - if (lookahead >= MIN_MATCH) - { - ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; - - // prev[strstart&w_mask]=hash_head=head[ins_h]; - hash_head = (head[ins_h] & 0xffff); - prev[strstart & w_mask] = head[ins_h]; - head[ins_h] = unchecked((short)strstart); - } - - // Find the longest match, discarding those <= prev_length. - // At this point we have always match_length < MIN_MATCH - - if (hash_head != 0L && ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD) - { - // To simplify the code, we prevent matches with the string - // of window index 0 (in particular we have to avoid a match - // of the string with itself at the start of the input file). - if (compressionStrategy != CompressionStrategy.HuffmanOnly) - { - match_length = longest_match(hash_head); - } - // longest_match() sets match_start - } - if (match_length >= MIN_MATCH) - { - // check_match(strstart, match_start, match_length); - - bflush = _tr_tally(strstart - match_start, match_length - MIN_MATCH); - - lookahead -= match_length; - - // Insert new strings in the hash table only if the match length - // is not too large. This saves time but degrades compression. - if (match_length <= config.MaxLazy && lookahead >= MIN_MATCH) - { - match_length--; // string at strstart already in hash table - do - { - strstart++; - - ins_h = ((ins_h << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; - // prev[strstart&w_mask]=hash_head=head[ins_h]; - hash_head = (head[ins_h] & 0xffff); - prev[strstart & w_mask] = head[ins_h]; - head[ins_h] = unchecked((short)strstart); - - // strstart never exceeds WSIZE-MAX_MATCH, so there are - // always MIN_MATCH bytes ahead. - } - while (--match_length != 0); - strstart++; - } - else - { - strstart += match_length; - match_length = 0; - ins_h = window[strstart] & 0xff; - - ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask; - // If lookahead < MIN_MATCH, ins_h is garbage, but it does not - // matter since it will be recomputed at next deflate call. - } - } - else - { - // No match, output a literal byte - - bflush = _tr_tally(0, window[strstart] & 0xff); - lookahead--; - strstart++; - } - if (bflush) - { - flush_block_only(false); - if (_codec.AvailableBytesOut == 0) - return BlockState.NeedMore; - } - } - - flush_block_only(flush == FlushType.Finish); - if (_codec.AvailableBytesOut == 0) - { - if (flush == FlushType.Finish) - return BlockState.FinishStarted; - else - return BlockState.NeedMore; - } - return flush == FlushType.Finish ? BlockState.FinishDone : BlockState.BlockDone; - } - - // Same as above, but achieves better compression. We use a lazy - // evaluation for matches: a match is finally adopted only if there is - // no better match at the next window position. - internal BlockState DeflateSlow(FlushType flush) - { - // short hash_head = 0; // head of hash chain - int hash_head = 0; // head of hash chain - bool bflush; // set if current block must be flushed - - // Process the input block. - while (true) - { - // Make sure that we always have enough lookahead, except - // at the end of the input file. We need MAX_MATCH bytes - // for the next match, plus MIN_MATCH bytes to insert the - // string following the next match. - - if (lookahead < MIN_LOOKAHEAD) - { - _fillWindow(); - if (lookahead < MIN_LOOKAHEAD && flush == FlushType.None) - return BlockState.NeedMore; - - if (lookahead == 0) - break; // flush the current block - } - - // Insert the string window[strstart .. strstart+2] in the - // dictionary, and set hash_head to the head of the hash chain: - - if (lookahead >= MIN_MATCH) - { - ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; - // prev[strstart&w_mask]=hash_head=head[ins_h]; - hash_head = (head[ins_h] & 0xffff); - prev[strstart & w_mask] = head[ins_h]; - head[ins_h] = unchecked((short)strstart); - } - - // Find the longest match, discarding those <= prev_length. - prev_length = match_length; - prev_match = match_start; - match_length = MIN_MATCH - 1; - - if (hash_head != 0 && prev_length < config.MaxLazy && - ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD) - { - // To simplify the code, we prevent matches with the string - // of window index 0 (in particular we have to avoid a match - // of the string with itself at the start of the input file). - - if (compressionStrategy != CompressionStrategy.HuffmanOnly) - { - match_length = longest_match(hash_head); - } - // longest_match() sets match_start - - if (match_length <= 5 && (compressionStrategy == CompressionStrategy.Filtered || - (match_length == MIN_MATCH && strstart - match_start > 4096))) - { - - // If prev_match is also MIN_MATCH, match_start is garbage - // but we will ignore the current match anyway. - match_length = MIN_MATCH - 1; - } - } - - // If there was a match at the previous step and the current - // match is not better, output the previous match: - if (prev_length >= MIN_MATCH && match_length <= prev_length) - { - int max_insert = strstart + lookahead - MIN_MATCH; - // Do not insert strings in hash table beyond this. - - // check_match(strstart-1, prev_match, prev_length); - - bflush = _tr_tally(strstart - 1 - prev_match, prev_length - MIN_MATCH); - - // Insert in hash table all strings up to the end of the match. - // strstart-1 and strstart are already inserted. If there is not - // enough lookahead, the last two strings are not inserted in - // the hash table. - lookahead -= (prev_length - 1); - prev_length -= 2; - do - { - if (++strstart <= max_insert) - { - ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; - //prev[strstart&w_mask]=hash_head=head[ins_h]; - hash_head = (head[ins_h] & 0xffff); - prev[strstart & w_mask] = head[ins_h]; - head[ins_h] = unchecked((short)strstart); - } - } - while (--prev_length != 0); - match_available = 0; - match_length = MIN_MATCH - 1; - strstart++; - - if (bflush) - { - flush_block_only(false); - if (_codec.AvailableBytesOut == 0) - return BlockState.NeedMore; - } - } - else if (match_available != 0) - { - - // If there was no match at the previous position, output a - // single literal. If there was a match but the current match - // is longer, truncate the previous match to a single literal. - - bflush = _tr_tally(0, window[strstart - 1] & 0xff); - - if (bflush) - { - flush_block_only(false); - } - strstart++; - lookahead--; - if (_codec.AvailableBytesOut == 0) - return BlockState.NeedMore; - } - else - { - // There is no previous match to compare with, wait for - // the next step to decide. - - match_available = 1; - strstart++; - lookahead--; - } - } - - if (match_available != 0) - { - bflush = _tr_tally(0, window[strstart - 1] & 0xff); - match_available = 0; - } - flush_block_only(flush == FlushType.Finish); - - if (_codec.AvailableBytesOut == 0) - { - if (flush == FlushType.Finish) - return BlockState.FinishStarted; - else - return BlockState.NeedMore; - } - - return flush == FlushType.Finish ? BlockState.FinishDone : BlockState.BlockDone; - } - - - internal int longest_match(int cur_match) - { - int chain_length = config.MaxChainLength; // max hash chain length - int scan = strstart; // current string - int match; // matched string - int len; // length of current match - int best_len = prev_length; // best match length so far - int limit = strstart > (w_size - MIN_LOOKAHEAD) ? strstart - (w_size - MIN_LOOKAHEAD) : 0; - - int niceLength = config.NiceLength; - - // Stop when cur_match becomes <= limit. To simplify the code, - // we prevent matches with the string of window index 0. - - int wmask = w_mask; - - int strend = strstart + MAX_MATCH; - byte scan_end1 = window[scan + best_len - 1]; - byte scan_end = window[scan + best_len]; - - // The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. - // It is easy to get rid of this optimization if necessary. - - // Do not waste too much time if we already have a good match: - if (prev_length >= config.GoodLength) - { - chain_length >>= 2; - } - - // Do not look for matches beyond the end of the input. This is necessary - // to make deflate deterministic. - if (niceLength > lookahead) - niceLength = lookahead; - - do - { - match = cur_match; - - // Skip to next match if the match length cannot increase - // or if the match length is less than 2: - if (window[match + best_len] != scan_end || - window[match + best_len - 1] != scan_end1 || - window[match] != window[scan] || - window[++match] != window[scan + 1]) - continue; - - // The check at best_len-1 can be removed because it will be made - // again later. (This heuristic is not always a win.) - // It is not necessary to compare scan[2] and match[2] since they - // are always equal when the other bytes match, given that - // the hash keys are equal and that HASH_BITS >= 8. - scan += 2; match++; - - // We check for insufficient lookahead only every 8th comparison; - // the 256th check will be made at strstart+258. - do - { - } - while (window[++scan] == window[++match] && - window[++scan] == window[++match] && - window[++scan] == window[++match] && - window[++scan] == window[++match] && - window[++scan] == window[++match] && - window[++scan] == window[++match] && - window[++scan] == window[++match] && - window[++scan] == window[++match] && scan < strend); - - len = MAX_MATCH - (int)(strend - scan); - scan = strend - MAX_MATCH; - - if (len > best_len) - { - match_start = cur_match; - best_len = len; - if (len >= niceLength) - break; - scan_end1 = window[scan + best_len - 1]; - scan_end = window[scan + best_len]; - } - } - while ((cur_match = (prev[cur_match & wmask] & 0xffff)) > limit && --chain_length != 0); - - if (best_len <= lookahead) - return best_len; - return lookahead; - } - - - private bool Rfc1950BytesEmitted = false; - private bool _WantRfc1950HeaderBytes = true; - internal bool WantRfc1950HeaderBytes - { - get { return _WantRfc1950HeaderBytes; } - set { _WantRfc1950HeaderBytes = value; } - } - - - internal int Initialize(ZlibCodec codec, CompressionLevel level) - { - return Initialize(codec, level, ZlibConstants.WindowBitsMax); - } - - internal int Initialize(ZlibCodec codec, CompressionLevel level, int bits) - { - return Initialize(codec, level, bits, MEM_LEVEL_DEFAULT, CompressionStrategy.Default); - } - - internal int Initialize(ZlibCodec codec, CompressionLevel level, int bits, CompressionStrategy compressionStrategy) - { - return Initialize(codec, level, bits, MEM_LEVEL_DEFAULT, compressionStrategy); - } - - internal int Initialize(ZlibCodec codec, CompressionLevel level, int windowBits, int memLevel, CompressionStrategy strategy) - { - _codec = codec; - _codec.Message = null; - - // validation - if (windowBits < 9 || windowBits > 15) - throw new ZlibException("windowBits must be in the range 9..15."); - - if (memLevel < 1 || memLevel > MEM_LEVEL_MAX) - throw new ZlibException(String.Format("memLevel must be in the range 1.. {0}", MEM_LEVEL_MAX)); - - _codec.dstate = this; - - w_bits = windowBits; - w_size = 1 << w_bits; - w_mask = w_size - 1; - - hash_bits = memLevel + 7; - hash_size = 1 << hash_bits; - hash_mask = hash_size - 1; - hash_shift = ((hash_bits + MIN_MATCH - 1) / MIN_MATCH); - - window = new byte[w_size * 2]; - prev = new short[w_size]; - head = new short[hash_size]; - - // for memLevel==8, this will be 16384, 16k - lit_bufsize = 1 << (memLevel + 6); - - // Use a single array as the buffer for data pending compression, - // the output distance codes, and the output length codes (aka tree). - // orig comment: This works just fine since the average - // output size for (length,distance) codes is <= 24 bits. - pending = new byte[lit_bufsize * 4]; - _distanceOffset = lit_bufsize; - _lengthOffset = (1 + 2) * lit_bufsize; - - // So, for memLevel 8, the length of the pending buffer is 65536. 64k. - // The first 16k are pending bytes. - // The middle slice, of 32k, is used for distance codes. - // The final 16k are length codes. - - this.compressionLevel = level; - this.compressionStrategy = strategy; - - Reset(); - return ZlibConstants.Z_OK; - } - - - internal void Reset() - { - _codec.TotalBytesIn = _codec.TotalBytesOut = 0; - _codec.Message = null; - //strm.data_type = Z_UNKNOWN; - - pendingCount = 0; - nextPending = 0; - - Rfc1950BytesEmitted = false; - - status = (WantRfc1950HeaderBytes) ? INIT_STATE : BUSY_STATE; - _codec._Adler32 = Adler.Adler32(0, null, 0, 0); - - last_flush = (int)FlushType.None; - - _InitializeTreeData(); - _InitializeLazyMatch(); - } - - - internal int End() - { - if (status != INIT_STATE && status != BUSY_STATE && status != FINISH_STATE) - { - return ZlibConstants.Z_STREAM_ERROR; - } - // Deallocate in reverse order of allocations: - pending = null; - head = null; - prev = null; - window = null; - // free - // dstate=null; - return status == BUSY_STATE ? ZlibConstants.Z_DATA_ERROR : ZlibConstants.Z_OK; - } - - - private void SetDeflater() - { - switch (config.Flavor) - { - case DeflateFlavor.Store: - DeflateFunction = DeflateNone; - break; - case DeflateFlavor.Fast: - DeflateFunction = DeflateFast; - break; - case DeflateFlavor.Slow: - DeflateFunction = DeflateSlow; - break; - } - } - - - internal int SetParams(CompressionLevel level, CompressionStrategy strategy) - { - int result = ZlibConstants.Z_OK; - - if (compressionLevel != level) - { - Config newConfig = Config.Lookup(level); - - // change in the deflate flavor (Fast vs slow vs none)? - if (newConfig.Flavor != config.Flavor && _codec.TotalBytesIn != 0) - { - // Flush the last buffer: - result = _codec.Deflate(FlushType.Partial); - } - - compressionLevel = level; - config = newConfig; - SetDeflater(); - } - - // no need to flush with change in strategy? Really? - compressionStrategy = strategy; - - return result; - } - - - internal int SetDictionary(byte[] dictionary) - { - int length = dictionary.Length; - int index = 0; - - if (dictionary == null || status != INIT_STATE) - throw new ZlibException("Stream error."); - - _codec._Adler32 = Adler.Adler32(_codec._Adler32, dictionary, 0, dictionary.Length); - - if (length < MIN_MATCH) - return ZlibConstants.Z_OK; - if (length > w_size - MIN_LOOKAHEAD) - { - length = w_size - MIN_LOOKAHEAD; - index = dictionary.Length - length; // use the tail of the dictionary - } - Array.Copy(dictionary, index, window, 0, length); - strstart = length; - block_start = length; - - // Insert all strings in the hash table (except for the last two bytes). - // s->lookahead stays null, so s->ins_h will be recomputed at the next - // call of fill_window. - - ins_h = window[0] & 0xff; - ins_h = (((ins_h) << hash_shift) ^ (window[1] & 0xff)) & hash_mask; - - for (int n = 0; n <= length - MIN_MATCH; n++) - { - ins_h = (((ins_h) << hash_shift) ^ (window[(n) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; - prev[n & w_mask] = head[ins_h]; - head[ins_h] = (short)n; - } - return ZlibConstants.Z_OK; - } - - - - internal int Deflate(FlushType flush) - { - int old_flush; - - if (_codec.OutputBuffer == null || - (_codec.InputBuffer == null && _codec.AvailableBytesIn != 0) || - (status == FINISH_STATE && flush != FlushType.Finish)) - { - _codec.Message = _ErrorMessage[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_STREAM_ERROR)]; - throw new ZlibException(String.Format("Something is fishy. [{0}]", _codec.Message)); - } - if (_codec.AvailableBytesOut == 0) - { - _codec.Message = _ErrorMessage[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_BUF_ERROR)]; - throw new ZlibException("OutputBuffer is full (AvailableBytesOut == 0)"); - } - - old_flush = last_flush; - last_flush = (int)flush; - - // Write the zlib (rfc1950) header bytes - if (status == INIT_STATE) - { - int header = (Z_DEFLATED + ((w_bits - 8) << 4)) << 8; - int level_flags = (((int)compressionLevel - 1) & 0xff) >> 1; - - if (level_flags > 3) - level_flags = 3; - header |= (level_flags << 6); - if (strstart != 0) - header |= PRESET_DICT; - header += 31 - (header % 31); - - status = BUSY_STATE; - //putShortMSB(header); - unchecked - { - pending[pendingCount++] = (byte)(header >> 8); - pending[pendingCount++] = (byte)header; - } - // Save the adler32 of the preset dictionary: - if (strstart != 0) - { - pending[pendingCount++] = (byte)((_codec._Adler32 & 0xFF000000) >> 24); - pending[pendingCount++] = (byte)((_codec._Adler32 & 0x00FF0000) >> 16); - pending[pendingCount++] = (byte)((_codec._Adler32 & 0x0000FF00) >> 8); - pending[pendingCount++] = (byte)(_codec._Adler32 & 0x000000FF); - } - _codec._Adler32 = Adler.Adler32(0, null, 0, 0); - } - - // Flush as much pending output as possible - if (pendingCount != 0) - { - _codec.flush_pending(); - if (_codec.AvailableBytesOut == 0) - { - //System.out.println(" avail_out==0"); - // Since avail_out is 0, deflate will be called again with - // more output space, but possibly with both pending and - // avail_in equal to zero. There won't be anything to do, - // but this is not an error situation so make sure we - // return OK instead of BUF_ERROR at next call of deflate: - last_flush = -1; - return ZlibConstants.Z_OK; - } - - // Make sure there is something to do and avoid duplicate consecutive - // flushes. For repeated and useless calls with Z_FINISH, we keep - // returning Z_STREAM_END instead of Z_BUFF_ERROR. - } - else if (_codec.AvailableBytesIn == 0 && - (int)flush <= old_flush && - flush != FlushType.Finish) - { - // workitem 8557 - // - // Not sure why this needs to be an error. pendingCount == 0, which - // means there's nothing to deflate. And the caller has not asked - // for a FlushType.Finish, but... that seems very non-fatal. We - // can just say "OK" and do nothing. - - // _codec.Message = z_errmsg[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_BUF_ERROR)]; - // throw new ZlibException("AvailableBytesIn == 0 && flush<=old_flush && flush != FlushType.Finish"); - - return ZlibConstants.Z_OK; - } - - // User must not provide more input after the first FINISH: - if (status == FINISH_STATE && _codec.AvailableBytesIn != 0) - { - _codec.Message = _ErrorMessage[ZlibConstants.Z_NEED_DICT - (ZlibConstants.Z_BUF_ERROR)]; - throw new ZlibException("status == FINISH_STATE && _codec.AvailableBytesIn != 0"); - } - - // Start a new block or continue the current one. - if (_codec.AvailableBytesIn != 0 || lookahead != 0 || (flush != FlushType.None && status != FINISH_STATE)) - { - BlockState bstate = DeflateFunction(flush); - - if (bstate == BlockState.FinishStarted || bstate == BlockState.FinishDone) - { - status = FINISH_STATE; - } - if (bstate == BlockState.NeedMore || bstate == BlockState.FinishStarted) - { - if (_codec.AvailableBytesOut == 0) - { - last_flush = -1; // avoid BUF_ERROR next call, see above - } - return ZlibConstants.Z_OK; - // If flush != Z_NO_FLUSH && avail_out == 0, the next call - // of deflate should use the same flush parameter to make sure - // that the flush is complete. So we don't have to output an - // empty block here, this will be done at next call. This also - // ensures that for a very small output buffer, we emit at most - // one empty block. - } - - if (bstate == BlockState.BlockDone) - { - if (flush == FlushType.Partial) - { - _tr_align(); - } - else - { - // FlushType.Full or FlushType.Sync - _tr_stored_block(0, 0, false); - // For a full flush, this empty block will be recognized - // as a special marker by inflate_sync(). - if (flush == FlushType.Full) - { - // clear hash (forget the history) - for (int i = 0; i < hash_size; i++) - head[i] = 0; - } - } - _codec.flush_pending(); - if (_codec.AvailableBytesOut == 0) - { - last_flush = -1; // avoid BUF_ERROR at next call, see above - return ZlibConstants.Z_OK; - } - } - } - - if (flush != FlushType.Finish) - return ZlibConstants.Z_OK; - - if (!WantRfc1950HeaderBytes || Rfc1950BytesEmitted) - return ZlibConstants.Z_STREAM_END; - - // Write the zlib trailer (adler32) - pending[pendingCount++] = (byte)((_codec._Adler32 & 0xFF000000) >> 24); - pending[pendingCount++] = (byte)((_codec._Adler32 & 0x00FF0000) >> 16); - pending[pendingCount++] = (byte)((_codec._Adler32 & 0x0000FF00) >> 8); - pending[pendingCount++] = (byte)(_codec._Adler32 & 0x000000FF); - //putShortMSB((int)(SharedUtils.URShift(_codec._Adler32, 16))); - //putShortMSB((int)(_codec._Adler32 & 0xffff)); - - _codec.flush_pending(); - - // If avail_out is zero, the application will call deflate again - // to flush the rest. - - Rfc1950BytesEmitted = true; // write the trailer only once! - - return pendingCount != 0 ? ZlibConstants.Z_OK : ZlibConstants.Z_STREAM_END; - } - - } -} diff --git a/DebugTools/MinecraftClientProxy/Compression/GZipStream.cs b/DebugTools/MinecraftClientProxy/Compression/GZipStream.cs deleted file mode 100644 index 7f6b9248c5..0000000000 --- a/DebugTools/MinecraftClientProxy/Compression/GZipStream.cs +++ /dev/null @@ -1,1033 +0,0 @@ -// GZipStream.cs -// ------------------------------------------------------------------ -// -// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation. -// All rights reserved. -// -// This code module is part of DotNetZip, a zipfile class library. -// -// ------------------------------------------------------------------ -// -// This code is licensed under the Microsoft Public License. -// See the file License.txt for the license details. -// More info on: http://dotnetzip.codeplex.com -// -// ------------------------------------------------------------------ -// -// last saved (in emacs): -// Time-stamp: <2011-August-08 18:14:39> -// -// ------------------------------------------------------------------ -// -// This module defines the GZipStream class, which can be used as a replacement for -// the System.IO.Compression.GZipStream class in the .NET BCL. NB: The design is not -// completely OO clean: there is some intelligence in the ZlibBaseStream that reads the -// GZip header. -// -// ------------------------------------------------------------------ - - -using System; -using System.IO; - -namespace Ionic.Zlib -{ - /// - /// A class for compressing and decompressing GZIP streams. - /// - /// - /// - /// - /// The GZipStream is a Decorator on a - /// . It adds GZIP compression or decompression to any - /// stream. - /// - /// - /// - /// Like the System.IO.Compression.GZipStream in the .NET Base Class Library, the - /// Ionic.Zlib.GZipStream can compress while writing, or decompress while - /// reading, but not vice versa. The compression method used is GZIP, which is - /// documented in IETF RFC - /// 1952, "GZIP file format specification version 4.3". - /// - /// - /// A GZipStream can be used to decompress data (through Read()) or - /// to compress data (through Write()), but not both. - /// - /// - /// - /// If you wish to use the GZipStream to compress data, you must wrap it - /// around a write-able stream. As you call Write() on the GZipStream, the - /// data will be compressed into the GZIP format. If you want to decompress data, - /// you must wrap the GZipStream around a readable stream that contains an - /// IETF RFC 1952-compliant stream. The data will be decompressed as you call - /// Read() on the GZipStream. - /// - /// - /// - /// Though the GZIP format allows data from multiple files to be concatenated - /// together, this stream handles only a single segment of GZIP format, typically - /// representing a single file. - /// - /// - /// - /// This class is similar to and . - /// ZlibStream handles RFC1950-compliant streams. - /// handles RFC1951-compliant streams. This class handles RFC1952-compliant streams. - /// - /// - /// - /// - /// - /// - public class GZipStream : System.IO.Stream - { - // GZip format - // source: http://tools.ietf.org/html/rfc1952 - // - // header id: 2 bytes 1F 8B - // compress method 1 byte 8= DEFLATE (none other supported) - // flag 1 byte bitfield (See below) - // mtime 4 bytes time_t (seconds since jan 1, 1970 UTC of the file. - // xflg 1 byte 2 = max compress used , 4 = max speed (can be ignored) - // OS 1 byte OS for originating archive. set to 0xFF in compression. - // extra field length 2 bytes optional - only if FEXTRA is set. - // extra field varies - // filename varies optional - if FNAME is set. zero terminated. ISO-8859-1. - // file comment varies optional - if FCOMMENT is set. zero terminated. ISO-8859-1. - // crc16 1 byte optional - present only if FHCRC bit is set - // compressed data varies - // CRC32 4 bytes - // isize 4 bytes data size modulo 2^32 - // - // FLG (FLaGs) - // bit 0 FTEXT - indicates file is ASCII text (can be safely ignored) - // bit 1 FHCRC - there is a CRC16 for the header immediately following the header - // bit 2 FEXTRA - extra fields are present - // bit 3 FNAME - the zero-terminated filename is present. encoding; ISO-8859-1. - // bit 4 FCOMMENT - a zero-terminated file comment is present. encoding: ISO-8859-1 - // bit 5 reserved - // bit 6 reserved - // bit 7 reserved - // - // On consumption: - // Extra field is a bunch of nonsense and can be safely ignored. - // Header CRC and OS, likewise. - // - // on generation: - // all optional fields get 0, except for the OS, which gets 255. - // - - - - /// - /// The comment on the GZIP stream. - /// - /// - /// - /// - /// The GZIP format allows for each file to optionally have an associated - /// comment stored with the file. The comment is encoded with the ISO-8859-1 - /// code page. To include a comment in a GZIP stream you create, set this - /// property before calling Write() for the first time on the - /// GZipStream. - /// - /// - /// - /// When using GZipStream to decompress, you can retrieve this property - /// after the first call to Read(). If no comment has been set in the - /// GZIP bytestream, the Comment property will return null - /// (Nothing in VB). - /// - /// - public String Comment - { - get - { - return _Comment; - } - set - { - if (_disposed) throw new ObjectDisposedException("GZipStream"); - _Comment = value; - } - } - - /// - /// The FileName for the GZIP stream. - /// - /// - /// - /// - /// - /// The GZIP format optionally allows each file to have an associated - /// filename. When compressing data (through Write()), set this - /// FileName before calling Write() the first time on the GZipStream. - /// The actual filename is encoded into the GZIP bytestream with the - /// ISO-8859-1 code page, according to RFC 1952. It is the application's - /// responsibility to insure that the FileName can be encoded and decoded - /// correctly with this code page. - /// - /// - /// - /// When decompressing (through Read()), you can retrieve this value - /// any time after the first Read(). In the case where there was no filename - /// encoded into the GZIP bytestream, the property will return null (Nothing - /// in VB). - /// - /// - public String FileName - { - get { return _FileName; } - set - { - if (_disposed) throw new ObjectDisposedException("GZipStream"); - _FileName = value; - if (_FileName == null) return; - if (_FileName.IndexOf("/") != -1) - { - _FileName = _FileName.Replace("/", "\\"); - } - if (_FileName.EndsWith("\\")) - throw new Exception("Illegal filename"); - if (_FileName.IndexOf("\\") != -1) - { - // trim any leading path - _FileName = Path.GetFileName(_FileName); - } - } - } - - /// - /// The last modified time for the GZIP stream. - /// - /// - /// - /// GZIP allows the storage of a last modified time with each GZIP entry. - /// When compressing data, you can set this before the first call to - /// Write(). When decompressing, you can retrieve this value any time - /// after the first call to Read(). - /// - public DateTime? LastModified; - - /// - /// The CRC on the GZIP stream. - /// - /// - /// This is used for internal error checking. You probably don't need to look at this property. - /// - public int Crc32 { get { return _Crc32; } } - - private int _headerByteCount; - internal ZlibBaseStream _baseStream; - bool _disposed; - bool _firstReadDone; - string _FileName; - string _Comment; - int _Crc32; - - - /// - /// Create a GZipStream using the specified CompressionMode. - /// - /// - /// - /// - /// When mode is CompressionMode.Compress, the GZipStream will use the - /// default compression level. - /// - /// - /// - /// As noted in the class documentation, the CompressionMode (Compress - /// or Decompress) also establishes the "direction" of the stream. A - /// GZipStream with CompressionMode.Compress works only through - /// Write(). A GZipStream with - /// CompressionMode.Decompress works only through Read(). - /// - /// - /// - /// - /// - /// This example shows how to use a GZipStream to compress data. - /// - /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - /// { - /// using (var raw = System.IO.File.Create(outputFile)) - /// { - /// using (Stream compressor = new GZipStream(raw, CompressionMode.Compress)) - /// { - /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - /// int n; - /// while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - /// { - /// compressor.Write(buffer, 0, n); - /// } - /// } - /// } - /// } - /// - /// - /// Dim outputFile As String = (fileToCompress & ".compressed") - /// Using input As Stream = File.OpenRead(fileToCompress) - /// Using raw As FileStream = File.Create(outputFile) - /// Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress) - /// Dim buffer As Byte() = New Byte(4096) {} - /// Dim n As Integer = -1 - /// Do While (n <> 0) - /// If (n > 0) Then - /// compressor.Write(buffer, 0, n) - /// End If - /// n = input.Read(buffer, 0, buffer.Length) - /// Loop - /// End Using - /// End Using - /// End Using - /// - /// - /// - /// - /// This example shows how to use a GZipStream to uncompress a file. - /// - /// private void GunZipFile(string filename) - /// { - /// if (!filename.EndsWith(".gz)) - /// throw new ArgumentException("filename"); - /// var DecompressedFile = filename.Substring(0,filename.Length-3); - /// byte[] working = new byte[WORKING_BUFFER_SIZE]; - /// int n= 1; - /// using (System.IO.Stream input = System.IO.File.OpenRead(filename)) - /// { - /// using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) - /// { - /// using (var output = System.IO.File.Create(DecompressedFile)) - /// { - /// while (n !=0) - /// { - /// n= decompressor.Read(working, 0, working.Length); - /// if (n > 0) - /// { - /// output.Write(working, 0, n); - /// } - /// } - /// } - /// } - /// } - /// } - /// - /// - /// - /// Private Sub GunZipFile(ByVal filename as String) - /// If Not (filename.EndsWith(".gz)) Then - /// Throw New ArgumentException("filename") - /// End If - /// Dim DecompressedFile as String = filename.Substring(0,filename.Length-3) - /// Dim working(WORKING_BUFFER_SIZE) as Byte - /// Dim n As Integer = 1 - /// Using input As Stream = File.OpenRead(filename) - /// Using decompressor As Stream = new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, True) - /// Using output As Stream = File.Create(UncompressedFile) - /// Do - /// n= decompressor.Read(working, 0, working.Length) - /// If n > 0 Then - /// output.Write(working, 0, n) - /// End IF - /// Loop While (n > 0) - /// End Using - /// End Using - /// End Using - /// End Sub - /// - /// - /// - /// The stream which will be read or written. - /// Indicates whether the GZipStream will compress or decompress. - public GZipStream(Stream stream, CompressionMode mode) - : this(stream, mode, CompressionLevel.Default, false) - { - } - - /// - /// Create a GZipStream using the specified CompressionMode and - /// the specified CompressionLevel. - /// - /// - /// - /// - /// The CompressionMode (Compress or Decompress) also establishes the - /// "direction" of the stream. A GZipStream with - /// CompressionMode.Compress works only through Write(). A - /// GZipStream with CompressionMode.Decompress works only - /// through Read(). - /// - /// - /// - /// - /// - /// - /// This example shows how to use a GZipStream to compress a file into a .gz file. - /// - /// - /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - /// { - /// using (var raw = System.IO.File.Create(fileToCompress + ".gz")) - /// { - /// using (Stream compressor = new GZipStream(raw, - /// CompressionMode.Compress, - /// CompressionLevel.BestCompression)) - /// { - /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - /// int n; - /// while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - /// { - /// compressor.Write(buffer, 0, n); - /// } - /// } - /// } - /// } - /// - /// - /// - /// Using input As Stream = File.OpenRead(fileToCompress) - /// Using raw As FileStream = File.Create(fileToCompress & ".gz") - /// Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) - /// Dim buffer As Byte() = New Byte(4096) {} - /// Dim n As Integer = -1 - /// Do While (n <> 0) - /// If (n > 0) Then - /// compressor.Write(buffer, 0, n) - /// End If - /// n = input.Read(buffer, 0, buffer.Length) - /// Loop - /// End Using - /// End Using - /// End Using - /// - /// - /// The stream to be read or written while deflating or inflating. - /// Indicates whether the GZipStream will compress or decompress. - /// A tuning knob to trade speed for effectiveness. - public GZipStream(Stream stream, CompressionMode mode, CompressionLevel level) - : this(stream, mode, level, false) - { - } - - /// - /// Create a GZipStream using the specified CompressionMode, and - /// explicitly specify whether the stream should be left open after Deflation - /// or Inflation. - /// - /// - /// - /// - /// This constructor allows the application to request that the captive stream - /// remain open after the deflation or inflation occurs. By default, after - /// Close() is called on the stream, the captive stream is also - /// closed. In some cases this is not desired, for example if the stream is a - /// memory stream that will be re-read after compressed data has been written - /// to it. Specify true for the parameter to leave - /// the stream open. - /// - /// - /// - /// The (Compress or Decompress) also - /// establishes the "direction" of the stream. A GZipStream with - /// CompressionMode.Compress works only through Write(). A GZipStream - /// with CompressionMode.Decompress works only through Read(). - /// - /// - /// - /// The GZipStream will use the default compression level. If you want - /// to specify the compression level, see . - /// - /// - /// - /// See the other overloads of this constructor for example code. - /// - /// - /// - /// - /// - /// The stream which will be read or written. This is called the "captive" - /// stream in other places in this documentation. - /// - /// - /// Indicates whether the GZipStream will compress or decompress. - /// - /// - /// - /// true if the application would like the base stream to remain open after - /// inflation/deflation. - /// - public GZipStream(Stream stream, CompressionMode mode, bool leaveOpen) - : this(stream, mode, CompressionLevel.Default, leaveOpen) - { - } - - /// - /// Create a GZipStream using the specified CompressionMode and the - /// specified CompressionLevel, and explicitly specify whether the - /// stream should be left open after Deflation or Inflation. - /// - /// - /// - /// - /// - /// This constructor allows the application to request that the captive stream - /// remain open after the deflation or inflation occurs. By default, after - /// Close() is called on the stream, the captive stream is also - /// closed. In some cases this is not desired, for example if the stream is a - /// memory stream that will be re-read after compressed data has been written - /// to it. Specify true for the parameter to - /// leave the stream open. - /// - /// - /// - /// As noted in the class documentation, the CompressionMode (Compress - /// or Decompress) also establishes the "direction" of the stream. A - /// GZipStream with CompressionMode.Compress works only through - /// Write(). A GZipStream with CompressionMode.Decompress works only - /// through Read(). - /// - /// - /// - /// - /// - /// This example shows how to use a GZipStream to compress data. - /// - /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - /// { - /// using (var raw = System.IO.File.Create(outputFile)) - /// { - /// using (Stream compressor = new GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, true)) - /// { - /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - /// int n; - /// while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - /// { - /// compressor.Write(buffer, 0, n); - /// } - /// } - /// } - /// } - /// - /// - /// Dim outputFile As String = (fileToCompress & ".compressed") - /// Using input As Stream = File.OpenRead(fileToCompress) - /// Using raw As FileStream = File.Create(outputFile) - /// Using compressor As Stream = New GZipStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression, True) - /// Dim buffer As Byte() = New Byte(4096) {} - /// Dim n As Integer = -1 - /// Do While (n <> 0) - /// If (n > 0) Then - /// compressor.Write(buffer, 0, n) - /// End If - /// n = input.Read(buffer, 0, buffer.Length) - /// Loop - /// End Using - /// End Using - /// End Using - /// - /// - /// The stream which will be read or written. - /// Indicates whether the GZipStream will compress or decompress. - /// true if the application would like the stream to remain open after inflation/deflation. - /// A tuning knob to trade speed for effectiveness. - public GZipStream(Stream stream, CompressionMode mode, CompressionLevel level, bool leaveOpen) - { - _baseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.GZIP, leaveOpen); - } - - #region Zlib properties - - /// - /// This property sets the flush behavior on the stream. - /// - virtual public FlushType FlushMode - { - get { return (this._baseStream._flushMode); } - set { - if (_disposed) throw new ObjectDisposedException("GZipStream"); - this._baseStream._flushMode = value; - } - } - - /// - /// The size of the working buffer for the compression codec. - /// - /// - /// - /// - /// The working buffer is used for all stream operations. The default size is - /// 1024 bytes. The minimum size is 128 bytes. You may get better performance - /// with a larger buffer. Then again, you might not. You would have to test - /// it. - /// - /// - /// - /// Set this before the first call to Read() or Write() on the - /// stream. If you try to set it afterwards, it will throw. - /// - /// - public int BufferSize - { - get - { - return this._baseStream._bufferSize; - } - set - { - if (_disposed) throw new ObjectDisposedException("GZipStream"); - if (this._baseStream._workingBuffer != null) - throw new ZlibException("The working buffer is already set."); - if (value < ZlibConstants.WorkingBufferSizeMin) - throw new ZlibException(String.Format("Don't be silly. {0} bytes?? Use a bigger buffer, at least {1}.", value, ZlibConstants.WorkingBufferSizeMin)); - this._baseStream._bufferSize = value; - } - } - - - /// Returns the total number of bytes input so far. - virtual public long TotalIn - { - get - { - return this._baseStream._z.TotalBytesIn; - } - } - - /// Returns the total number of bytes output so far. - virtual public long TotalOut - { - get - { - return this._baseStream._z.TotalBytesOut; - } - } - - #endregion - - #region Stream methods - - /// - /// Dispose the stream. - /// - /// - /// - /// This may or may not result in a Close() call on the captive - /// stream. See the constructors that have a leaveOpen parameter - /// for more information. - /// - /// - /// This method may be invoked in two distinct scenarios. If disposing - /// == true, the method has been called directly or indirectly by a - /// user's code, for example via the public Dispose() method. In this - /// case, both managed and unmanaged resources can be referenced and - /// disposed. If disposing == false, the method has been called by the - /// runtime from inside the object finalizer and this method should not - /// reference other objects; in that case only unmanaged resources must - /// be referenced or disposed. - /// - /// - /// - /// indicates whether the Dispose method was invoked by user code. - /// - protected override void Dispose(bool disposing) - { - try - { - if (!_disposed) - { - if (disposing && (this._baseStream != null)) - { - this._baseStream.Close(); - this._Crc32 = _baseStream.Crc32; - } - _disposed = true; - } - } - finally - { - base.Dispose(disposing); - } - } - - - /// - /// Indicates whether the stream can be read. - /// - /// - /// The return value depends on whether the captive stream supports reading. - /// - public override bool CanRead - { - get - { - if (_disposed) throw new ObjectDisposedException("GZipStream"); - return _baseStream._stream.CanRead; - } - } - - /// - /// Indicates whether the stream supports Seek operations. - /// - /// - /// Always returns false. - /// - public override bool CanSeek - { - get { return false; } - } - - - /// - /// Indicates whether the stream can be written. - /// - /// - /// The return value depends on whether the captive stream supports writing. - /// - public override bool CanWrite - { - get - { - if (_disposed) throw new ObjectDisposedException("GZipStream"); - return _baseStream._stream.CanWrite; - } - } - - /// - /// Flush the stream. - /// - public override void Flush() - { - if (_disposed) throw new ObjectDisposedException("GZipStream"); - _baseStream.Flush(); - } - - /// - /// Reading this property always throws a . - /// - public override long Length - { - get { throw new NotImplementedException(); } - } - - /// - /// The position of the stream pointer. - /// - /// - /// - /// Setting this property always throws a . Reading will return the total bytes - /// written out, if used in writing, or the total bytes read in, if used in - /// reading. The count may refer to compressed bytes or uncompressed bytes, - /// depending on how you've used the stream. - /// - public override long Position - { - get - { - if (this._baseStream._streamMode == Ionic.Zlib.ZlibBaseStream.StreamMode.Writer) - return this._baseStream._z.TotalBytesOut + _headerByteCount; - if (this._baseStream._streamMode == Ionic.Zlib.ZlibBaseStream.StreamMode.Reader) - return this._baseStream._z.TotalBytesIn + this._baseStream._gzipHeaderByteCount; - return 0; - } - - set { throw new NotImplementedException(); } - } - - /// - /// Read and decompress data from the source stream. - /// - /// - /// - /// With a GZipStream, decompression is done through reading. - /// - /// - /// - /// - /// byte[] working = new byte[WORKING_BUFFER_SIZE]; - /// using (System.IO.Stream input = System.IO.File.OpenRead(_CompressedFile)) - /// { - /// using (Stream decompressor= new Ionic.Zlib.GZipStream(input, CompressionMode.Decompress, true)) - /// { - /// using (var output = System.IO.File.Create(_DecompressedFile)) - /// { - /// int n; - /// while ((n= decompressor.Read(working, 0, working.Length)) !=0) - /// { - /// output.Write(working, 0, n); - /// } - /// } - /// } - /// } - /// - /// - /// The buffer into which the decompressed data should be placed. - /// the offset within that data array to put the first byte read. - /// the number of bytes to read. - /// the number of bytes actually read - public override int Read(byte[] buffer, int offset, int count) - { - if (_disposed) throw new ObjectDisposedException("GZipStream"); - int n = _baseStream.Read(buffer, offset, count); - - // Console.WriteLine("GZipStream::Read(buffer, off({0}), c({1}) = {2}", offset, count, n); - // Console.WriteLine( Util.FormatByteArray(buffer, offset, n) ); - - if (!_firstReadDone) - { - _firstReadDone = true; - FileName = _baseStream._GzipFileName; - Comment = _baseStream._GzipComment; - } - return n; - } - - - - /// - /// Calling this method always throws a . - /// - /// irrelevant; it will always throw! - /// irrelevant; it will always throw! - /// irrelevant! - public override long Seek(long offset, SeekOrigin origin) - { - throw new NotImplementedException(); - } - - /// - /// Calling this method always throws a . - /// - /// irrelevant; this method will always throw! - public override void SetLength(long value) - { - throw new NotImplementedException(); - } - - /// - /// Write data to the stream. - /// - /// - /// - /// - /// If you wish to use the GZipStream to compress data while writing, - /// you can create a GZipStream with CompressionMode.Compress, and a - /// writable output stream. Then call Write() on that GZipStream, - /// providing uncompressed data as input. The data sent to the output stream - /// will be the compressed form of the data written. - /// - /// - /// - /// A GZipStream can be used for Read() or Write(), but not - /// both. Writing implies compression. Reading implies decompression. - /// - /// - /// - /// The buffer holding data to write to the stream. - /// the offset within that data array to find the first byte to write. - /// the number of bytes to write. - public override void Write(byte[] buffer, int offset, int count) - { - if (_disposed) throw new ObjectDisposedException("GZipStream"); - if (_baseStream._streamMode == Ionic.Zlib.ZlibBaseStream.StreamMode.Undefined) - { - //Console.WriteLine("GZipStream: First write"); - if (_baseStream._wantCompress) - { - // first write in compression, therefore, emit the GZIP header - _headerByteCount = EmitHeader(); - } - else - { - throw new InvalidOperationException(); - } - } - - _baseStream.Write(buffer, offset, count); - } - #endregion - - - internal static readonly System.DateTime _unixEpoch = new System.DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); -#if SILVERLIGHT || NETCF - internal static readonly System.Text.Encoding iso8859dash1 = new Ionic.Encoding.Iso8859Dash1Encoding(); -#else - internal static readonly System.Text.Encoding iso8859dash1 = System.Text.Encoding.GetEncoding("iso-8859-1"); -#endif - - - private int EmitHeader() - { - byte[] commentBytes = (Comment == null) ? null : iso8859dash1.GetBytes(Comment); - byte[] filenameBytes = (FileName == null) ? null : iso8859dash1.GetBytes(FileName); - - int cbLength = (Comment == null) ? 0 : commentBytes.Length + 1; - int fnLength = (FileName == null) ? 0 : filenameBytes.Length + 1; - - int bufferLength = 10 + cbLength + fnLength; - byte[] header = new byte[bufferLength]; - int i = 0; - // ID - header[i++] = 0x1F; - header[i++] = 0x8B; - - // compression method - header[i++] = 8; - byte flag = 0; - if (Comment != null) - flag ^= 0x10; - if (FileName != null) - flag ^= 0x8; - - // flag - header[i++] = flag; - - // mtime - if (!LastModified.HasValue) LastModified = DateTime.Now; - System.TimeSpan delta = LastModified.Value - _unixEpoch; - Int32 timet = (Int32)delta.TotalSeconds; - Array.Copy(BitConverter.GetBytes(timet), 0, header, i, 4); - i += 4; - - // xflg - header[i++] = 0; // this field is totally useless - // OS - header[i++] = 0xFF; // 0xFF == unspecified - - // extra field length - only if FEXTRA is set, which it is not. - //header[i++]= 0; - //header[i++]= 0; - - // filename - if (fnLength != 0) - { - Array.Copy(filenameBytes, 0, header, i, fnLength - 1); - i += fnLength - 1; - header[i++] = 0; // terminate - } - - // comment - if (cbLength != 0) - { - Array.Copy(commentBytes, 0, header, i, cbLength - 1); - i += cbLength - 1; - header[i++] = 0; // terminate - } - - _baseStream._stream.Write(header, 0, header.Length); - - return header.Length; // bytes written - } - - - - /// - /// Compress a string into a byte array using GZip. - /// - /// - /// - /// Uncompress it with . - /// - /// - /// - /// - /// - /// - /// A string to compress. The string will first be encoded - /// using UTF8, then compressed. - /// - /// - /// The string in compressed form - public static byte[] CompressString(String s) - { - using (var ms = new MemoryStream()) - { - System.IO.Stream compressor = - new GZipStream(ms, CompressionMode.Compress, CompressionLevel.BestCompression); - ZlibBaseStream.CompressString(s, compressor); - return ms.ToArray(); - } - } - - - /// - /// Compress a byte array into a new byte array using GZip. - /// - /// - /// - /// Uncompress it with . - /// - /// - /// - /// - /// - /// - /// A buffer to compress. - /// - /// - /// The data in compressed form - public static byte[] CompressBuffer(byte[] b) - { - using (var ms = new MemoryStream()) - { - System.IO.Stream compressor = - new GZipStream( ms, CompressionMode.Compress, CompressionLevel.BestCompression ); - - ZlibBaseStream.CompressBuffer(b, compressor); - return ms.ToArray(); - } - } - - - /// - /// Uncompress a GZip'ed byte array into a single string. - /// - /// - /// - /// - /// - /// - /// A buffer containing GZIP-compressed data. - /// - /// - /// The uncompressed string - public static String UncompressString(byte[] compressed) - { - using (var input = new MemoryStream(compressed)) - { - Stream decompressor = new GZipStream(input, CompressionMode.Decompress); - return ZlibBaseStream.UncompressString(compressed, decompressor); - } - } - - - /// - /// Uncompress a GZip'ed byte array into a byte array. - /// - /// - /// - /// - /// - /// - /// A buffer containing data that has been compressed with GZip. - /// - /// - /// The data in uncompressed form - public static byte[] UncompressBuffer(byte[] compressed) - { - using (var input = new System.IO.MemoryStream(compressed)) - { - System.IO.Stream decompressor = - new GZipStream( input, CompressionMode.Decompress ); - - return ZlibBaseStream.UncompressBuffer(compressed, decompressor); - } - } - - - } -} diff --git a/DebugTools/MinecraftClientProxy/Compression/InfTree.cs b/DebugTools/MinecraftClientProxy/Compression/InfTree.cs deleted file mode 100644 index 0ddb30e446..0000000000 --- a/DebugTools/MinecraftClientProxy/Compression/InfTree.cs +++ /dev/null @@ -1,436 +0,0 @@ -// Inftree.cs -// ------------------------------------------------------------------ -// -// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation. -// All rights reserved. -// -// This code module is part of DotNetZip, a zipfile class library. -// -// ------------------------------------------------------------------ -// -// This code is licensed under the Microsoft Public License. -// See the file License.txt for the license details. -// More info on: http://dotnetzip.codeplex.com -// -// ------------------------------------------------------------------ -// -// last saved (in emacs): -// Time-stamp: <2009-October-28 12:43:54> -// -// ------------------------------------------------------------------ -// -// This module defines classes used in decompression. This code is derived -// from the jzlib implementation of zlib. In keeping with the license for jzlib, -// the copyright to that code is below. -// -// ------------------------------------------------------------------ -// -// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in -// the documentation and/or other materials provided with the distribution. -// -// 3. The names of the authors may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, -// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, -// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// ----------------------------------------------------------------------- -// -// This program is based on zlib-1.1.3; credit to authors -// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) -// and contributors of zlib. -// -// ----------------------------------------------------------------------- - - - -using System; -namespace Ionic.Zlib -{ - - sealed class InfTree - { - - private const int MANY = 1440; - - private const int Z_OK = 0; - private const int Z_STREAM_END = 1; - private const int Z_NEED_DICT = 2; - private const int Z_ERRNO = - 1; - private const int Z_STREAM_ERROR = - 2; - private const int Z_DATA_ERROR = - 3; - private const int Z_MEM_ERROR = - 4; - private const int Z_BUF_ERROR = - 5; - private const int Z_VERSION_ERROR = - 6; - - internal const int fixed_bl = 9; - internal const int fixed_bd = 5; - - //UPGRADE_NOTE: Final was removed from the declaration of 'fixed_tl'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" - internal static readonly int[] fixed_tl = new int[]{96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 192, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 160, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 224, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 144, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 208, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 176, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 240, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 200, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 168, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 232, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 152, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 216, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 184, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 248, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 196, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 164, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 228, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 148, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 212, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 180, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 244, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 204, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 172, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 236, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 156, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 220, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 188, 0, 8, 14, 0, 8, 142, 0, 8, 78, 0, 9, 252, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 194, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 162, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 226, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 146, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 210, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 178, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 242, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 202, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 170, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 234, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 154, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 218, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 186, - 0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 250, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 198, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 166, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 230, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 150, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 214, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 182, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 246, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 206, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 174, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 238, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 158, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 222, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 190, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 254, 96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 193, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 161, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 225, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 145, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 209, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 177, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 241, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 201, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 169, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 233, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 153, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 217, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 185, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 249, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 197, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 165, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 229, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 149, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 213, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 181, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 245, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 205, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 173, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 237, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 157, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 221, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 189, 0, 8, - 14, 0, 8, 142, 0, 8, 78, 0, 9, 253, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 195, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 163, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 227, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 147, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 211, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 179, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 243, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 203, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 171, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 235, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 155, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 219, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 187, 0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 251, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 199, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 167, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 231, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 151, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 215, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 183, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 247, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 207, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 175, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 239, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 159, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 223, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 191, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 255}; - //UPGRADE_NOTE: Final was removed from the declaration of 'fixed_td'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" - internal static readonly int[] fixed_td = new int[]{80, 5, 1, 87, 5, 257, 83, 5, 17, 91, 5, 4097, 81, 5, 5, 89, 5, 1025, 85, 5, 65, 93, 5, 16385, 80, 5, 3, 88, 5, 513, 84, 5, 33, 92, 5, 8193, 82, 5, 9, 90, 5, 2049, 86, 5, 129, 192, 5, 24577, 80, 5, 2, 87, 5, 385, 83, 5, 25, 91, 5, 6145, 81, 5, 7, 89, 5, 1537, 85, 5, 97, 93, 5, 24577, 80, 5, 4, 88, 5, 769, 84, 5, 49, 92, 5, 12289, 82, 5, 13, 90, 5, 3073, 86, 5, 193, 192, 5, 24577}; - - // Tables for deflate from PKZIP's appnote.txt. - //UPGRADE_NOTE: Final was removed from the declaration of 'cplens'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" - internal static readonly int[] cplens = new int[]{3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; - - // see note #13 above about 258 - //UPGRADE_NOTE: Final was removed from the declaration of 'cplext'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" - internal static readonly int[] cplext = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112}; - - //UPGRADE_NOTE: Final was removed from the declaration of 'cpdist'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" - internal static readonly int[] cpdist = new int[]{1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577}; - - //UPGRADE_NOTE: Final was removed from the declaration of 'cpdext'. "ms-help://MS.VSCC.v80/dv_commoner/local/redirect.htm?index='!DefaultContextWindowIndex'&keyword='jlca1003'" - internal static readonly int[] cpdext = new int[]{0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13}; - - // If BMAX needs to be larger than 16, then h and x[] should be uLong. - internal const int BMAX = 15; // maximum bit length of any code - - internal int[] hn = null; // hufts used in space - internal int[] v = null; // work area for huft_build - internal int[] c = null; // bit length count table - internal int[] r = null; // table entry for structure assignment - internal int[] u = null; // table stack - internal int[] x = null; // bit offsets, then code stack - - private int huft_build(int[] b, int bindex, int n, int s, int[] d, int[] e, int[] t, int[] m, int[] hp, int[] hn, int[] v) - { - // Given a list of code lengths and a maximum table size, make a set of - // tables to decode that set of codes. Return Z_OK on success, Z_BUF_ERROR - // if the given code set is incomplete (the tables are still built in this - // case), Z_DATA_ERROR if the input is invalid (an over-subscribed set of - // lengths), or Z_MEM_ERROR if not enough memory. - - int a; // counter for codes of length k - int f; // i repeats in table every f entries - int g; // maximum code length - int h; // table level - int i; // counter, current code - int j; // counter - int k; // number of bits in current code - int l; // bits per table (returned in m) - int mask; // (1 << w) - 1, to avoid cc -O bug on HP - int p; // pointer into c[], b[], or v[] - int q; // points to current table - int w; // bits before this table == (l * h) - int xp; // pointer into x - int y; // number of dummy codes added - int z; // number of entries in current table - - // Generate counts for each bit length - - p = 0; i = n; - do - { - c[b[bindex + p]]++; p++; i--; // assume all entries <= BMAX - } - while (i != 0); - - if (c[0] == n) - { - // null input--all zero length codes - t[0] = - 1; - m[0] = 0; - return Z_OK; - } - - // Find minimum and maximum length, bound *m by those - l = m[0]; - for (j = 1; j <= BMAX; j++) - if (c[j] != 0) - break; - k = j; // minimum code length - if (l < j) - { - l = j; - } - for (i = BMAX; i != 0; i--) - { - if (c[i] != 0) - break; - } - g = i; // maximum code length - if (l > i) - { - l = i; - } - m[0] = l; - - // Adjust last length count to fill out codes, if needed - for (y = 1 << j; j < i; j++, y <<= 1) - { - if ((y -= c[j]) < 0) - { - return Z_DATA_ERROR; - } - } - if ((y -= c[i]) < 0) - { - return Z_DATA_ERROR; - } - c[i] += y; - - // Generate starting offsets into the value table for each length - x[1] = j = 0; - p = 1; xp = 2; - while (--i != 0) - { - // note that i == g from above - x[xp] = (j += c[p]); - xp++; - p++; - } - - // Make a table of values in order of bit lengths - i = 0; p = 0; - do - { - if ((j = b[bindex + p]) != 0) - { - v[x[j]++] = i; - } - p++; - } - while (++i < n); - n = x[g]; // set n to length of v - - // Generate the Huffman codes and for each, make the table entries - x[0] = i = 0; // first Huffman code is zero - p = 0; // grab values in bit order - h = - 1; // no tables yet--level -1 - w = - l; // bits decoded == (l * h) - u[0] = 0; // just to keep compilers happy - q = 0; // ditto - z = 0; // ditto - - // go through the bit lengths (k already is bits in shortest code) - for (; k <= g; k++) - { - a = c[k]; - while (a-- != 0) - { - // here i is the Huffman code of length k bits for value *p - // make tables up to required level - while (k > w + l) - { - h++; - w += l; // previous table always l bits - // compute minimum size table less than or equal to l bits - z = g - w; - z = (z > l)?l:z; // table size upper limit - if ((f = 1 << (j = k - w)) > a + 1) - { - // try a k-w bit table - // too few codes for k-w bit table - f -= (a + 1); // deduct codes from patterns left - xp = k; - if (j < z) - { - while (++j < z) - { - // try smaller tables up to z bits - if ((f <<= 1) <= c[++xp]) - break; // enough codes to use up j bits - f -= c[xp]; // else deduct codes from patterns - } - } - } - z = 1 << j; // table entries for j-bit table - - // allocate new table - if (hn[0] + z > MANY) - { - // (note: doesn't matter for fixed) - return Z_DATA_ERROR; // overflow of MANY - } - u[h] = q = hn[0]; // DEBUG - hn[0] += z; - - // connect to last table, if there is one - if (h != 0) - { - x[h] = i; // save pattern for backing up - r[0] = (sbyte) j; // bits in this table - r[1] = (sbyte) l; // bits to dump before this table - j = SharedUtils.URShift(i, (w - l)); - r[2] = (int) (q - u[h - 1] - j); // offset to this table - Array.Copy(r, 0, hp, (u[h - 1] + j) * 3, 3); // connect to last table - } - else - { - t[0] = q; // first table is returned result - } - } - - // set up table entry in r - r[1] = (sbyte) (k - w); - if (p >= n) - { - r[0] = 128 + 64; // out of values--invalid code - } - else if (v[p] < s) - { - r[0] = (sbyte) (v[p] < 256?0:32 + 64); // 256 is end-of-block - r[2] = v[p++]; // simple code is just the value - } - else - { - r[0] = (sbyte) (e[v[p] - s] + 16 + 64); // non-simple--look up in lists - r[2] = d[v[p++] - s]; - } - - // fill code-like entries with r - f = 1 << (k - w); - for (j = SharedUtils.URShift(i, w); j < z; j += f) - { - Array.Copy(r, 0, hp, (q + j) * 3, 3); - } - - // backwards increment the k-bit code i - for (j = 1 << (k - 1); (i & j) != 0; j = SharedUtils.URShift(j, 1)) - { - i ^= j; - } - i ^= j; - - // backup over finished tables - mask = (1 << w) - 1; // needed on HP, cc -O bug - while ((i & mask) != x[h]) - { - h--; // don't need to update q - w -= l; - mask = (1 << w) - 1; - } - } - } - // Return Z_BUF_ERROR if we were given an incomplete table - return y != 0 && g != 1?Z_BUF_ERROR:Z_OK; - } - - internal int inflate_trees_bits(int[] c, int[] bb, int[] tb, int[] hp, ZlibCodec z) - { - int result; - initWorkArea(19); - hn[0] = 0; - result = huft_build(c, 0, 19, 19, null, null, tb, bb, hp, hn, v); - - if (result == Z_DATA_ERROR) - { - z.Message = "oversubscribed dynamic bit lengths tree"; - } - else if (result == Z_BUF_ERROR || bb[0] == 0) - { - z.Message = "incomplete dynamic bit lengths tree"; - result = Z_DATA_ERROR; - } - return result; - } - - internal int inflate_trees_dynamic(int nl, int nd, int[] c, int[] bl, int[] bd, int[] tl, int[] td, int[] hp, ZlibCodec z) - { - int result; - - // build literal/length tree - initWorkArea(288); - hn[0] = 0; - result = huft_build(c, 0, nl, 257, cplens, cplext, tl, bl, hp, hn, v); - if (result != Z_OK || bl[0] == 0) - { - if (result == Z_DATA_ERROR) - { - z.Message = "oversubscribed literal/length tree"; - } - else if (result != Z_MEM_ERROR) - { - z.Message = "incomplete literal/length tree"; - result = Z_DATA_ERROR; - } - return result; - } - - // build distance tree - initWorkArea(288); - result = huft_build(c, nl, nd, 0, cpdist, cpdext, td, bd, hp, hn, v); - - if (result != Z_OK || (bd[0] == 0 && nl > 257)) - { - if (result == Z_DATA_ERROR) - { - z.Message = "oversubscribed distance tree"; - } - else if (result == Z_BUF_ERROR) - { - z.Message = "incomplete distance tree"; - result = Z_DATA_ERROR; - } - else if (result != Z_MEM_ERROR) - { - z.Message = "empty distance tree with lengths"; - result = Z_DATA_ERROR; - } - return result; - } - - return Z_OK; - } - - internal static int inflate_trees_fixed(int[] bl, int[] bd, int[][] tl, int[][] td, ZlibCodec z) - { - bl[0] = fixed_bl; - bd[0] = fixed_bd; - tl[0] = fixed_tl; - td[0] = fixed_td; - return Z_OK; - } - - private void initWorkArea(int vsize) - { - if (hn == null) - { - hn = new int[1]; - v = new int[vsize]; - c = new int[BMAX + 1]; - r = new int[3]; - u = new int[BMAX]; - x = new int[BMAX + 1]; - } - else - { - if (v.Length < vsize) - { - v = new int[vsize]; - } - Array.Clear(v,0,vsize); - Array.Clear(c,0,BMAX+1); - r[0]=0; r[1]=0; r[2]=0; - // for(int i=0; i -// -// ------------------------------------------------------------------ -// -// This module defines classes for decompression. This code is derived -// from the jzlib implementation of zlib, but significantly modified. -// The object model is not the same, and many of the behaviors are -// different. Nonetheless, in keeping with the license for jzlib, I am -// reproducing the copyright to that code here. -// -// ------------------------------------------------------------------ -// -// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in -// the documentation and/or other materials provided with the distribution. -// -// 3. The names of the authors may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, -// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, -// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// ----------------------------------------------------------------------- -// -// This program is based on zlib-1.1.3; credit to authors -// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) -// and contributors of zlib. -// -// ----------------------------------------------------------------------- - - -using System; -namespace Ionic.Zlib -{ - sealed class InflateBlocks - { - private const int MANY = 1440; - - // Table for deflate from PKZIP's appnote.txt. - internal static readonly int[] border = new int[] { 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 }; - - private enum InflateBlockMode - { - TYPE = 0, // get type bits (3, including end bit) - LENS = 1, // get lengths for stored - STORED = 2, // processing stored block - TABLE = 3, // get table lengths - BTREE = 4, // get bit lengths tree for a dynamic block - DTREE = 5, // get length, distance trees for a dynamic block - CODES = 6, // processing fixed or dynamic block - DRY = 7, // output remaining window bytes - DONE = 8, // finished last block, done - BAD = 9, // ot a data error--stuck here - } - - private InflateBlockMode mode; // current inflate_block mode - - internal int left; // if STORED, bytes left to copy - - internal int table; // table lengths (14 bits) - internal int index; // index into blens (or border) - internal int[] blens; // bit lengths of codes - internal int[] bb = new int[1]; // bit length tree depth - internal int[] tb = new int[1]; // bit length decoding tree - - internal InflateCodes codes = new InflateCodes(); // if CODES, current state - - internal int last; // true if this block is the last block - - internal ZlibCodec _codec; // pointer back to this zlib stream - - // mode independent information - internal int bitk; // bits in bit buffer - internal int bitb; // bit buffer - internal int[] hufts; // single malloc for tree space - internal byte[] window; // sliding window - internal int end; // one byte after sliding window - internal int readAt; // window read pointer - internal int writeAt; // window write pointer - internal System.Object checkfn; // check function - internal uint check; // check on output - - internal InfTree inftree = new InfTree(); - - internal InflateBlocks(ZlibCodec codec, System.Object checkfn, int w) - { - _codec = codec; - hufts = new int[MANY * 3]; - window = new byte[w]; - end = w; - this.checkfn = checkfn; - mode = InflateBlockMode.TYPE; - Reset(); - } - - internal uint Reset() - { - uint oldCheck = check; - mode = InflateBlockMode.TYPE; - bitk = 0; - bitb = 0; - readAt = writeAt = 0; - - if (checkfn != null) - _codec._Adler32 = check = Adler.Adler32(0, null, 0, 0); - return oldCheck; - } - - - internal int Process(int r) - { - int t; // temporary storage - int b; // bit buffer - int k; // bits in bit buffer - int p; // input data pointer - int n; // bytes available there - int q; // output window write pointer - int m; // bytes to end of window or read pointer - - // copy input/output information to locals (UPDATE macro restores) - - p = _codec.NextIn; - n = _codec.AvailableBytesIn; - b = bitb; - k = bitk; - - q = writeAt; - m = (int)(q < readAt ? readAt - q - 1 : end - q); - - - // process input based on current state - while (true) - { - switch (mode) - { - case InflateBlockMode.TYPE: - - while (k < (3)) - { - if (n != 0) - { - r = ZlibConstants.Z_OK; - } - else - { - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - } - - n--; - b |= (_codec.InputBuffer[p++] & 0xff) << k; - k += 8; - } - t = (int)(b & 7); - last = t & 1; - - switch ((uint)t >> 1) - { - case 0: // stored - b >>= 3; k -= (3); - t = k & 7; // go to byte boundary - b >>= t; k -= t; - mode = InflateBlockMode.LENS; // get length of stored block - break; - - case 1: // fixed - int[] bl = new int[1]; - int[] bd = new int[1]; - int[][] tl = new int[1][]; - int[][] td = new int[1][]; - InfTree.inflate_trees_fixed(bl, bd, tl, td, _codec); - codes.Init(bl[0], bd[0], tl[0], 0, td[0], 0); - b >>= 3; k -= 3; - mode = InflateBlockMode.CODES; - break; - - case 2: // dynamic - b >>= 3; k -= 3; - mode = InflateBlockMode.TABLE; - break; - - case 3: // illegal - b >>= 3; k -= 3; - mode = InflateBlockMode.BAD; - _codec.Message = "invalid block type"; - r = ZlibConstants.Z_DATA_ERROR; - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - } - break; - - case InflateBlockMode.LENS: - - while (k < (32)) - { - if (n != 0) - { - r = ZlibConstants.Z_OK; - } - else - { - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - } - ; - n--; - b |= (_codec.InputBuffer[p++] & 0xff) << k; - k += 8; - } - - if ((((~b) >> 16) & 0xffff) != (b & 0xffff)) - { - mode = InflateBlockMode.BAD; - _codec.Message = "invalid stored block lengths"; - r = ZlibConstants.Z_DATA_ERROR; - - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - } - left = (b & 0xffff); - b = k = 0; // dump bits - mode = left != 0 ? InflateBlockMode.STORED : (last != 0 ? InflateBlockMode.DRY : InflateBlockMode.TYPE); - break; - - case InflateBlockMode.STORED: - if (n == 0) - { - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - } - - if (m == 0) - { - if (q == end && readAt != 0) - { - q = 0; m = (int)(q < readAt ? readAt - q - 1 : end - q); - } - if (m == 0) - { - writeAt = q; - r = Flush(r); - q = writeAt; m = (int)(q < readAt ? readAt - q - 1 : end - q); - if (q == end && readAt != 0) - { - q = 0; m = (int)(q < readAt ? readAt - q - 1 : end - q); - } - if (m == 0) - { - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - } - } - } - r = ZlibConstants.Z_OK; - - t = left; - if (t > n) - t = n; - if (t > m) - t = m; - Array.Copy(_codec.InputBuffer, p, window, q, t); - p += t; n -= t; - q += t; m -= t; - if ((left -= t) != 0) - break; - mode = last != 0 ? InflateBlockMode.DRY : InflateBlockMode.TYPE; - break; - - case InflateBlockMode.TABLE: - - while (k < (14)) - { - if (n != 0) - { - r = ZlibConstants.Z_OK; - } - else - { - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - } - - n--; - b |= (_codec.InputBuffer[p++] & 0xff) << k; - k += 8; - } - - table = t = (b & 0x3fff); - if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29) - { - mode = InflateBlockMode.BAD; - _codec.Message = "too many length or distance symbols"; - r = ZlibConstants.Z_DATA_ERROR; - - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - } - t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f); - if (blens == null || blens.Length < t) - { - blens = new int[t]; - } - else - { - Array.Clear(blens, 0, t); - // for (int i = 0; i < t; i++) - // { - // blens[i] = 0; - // } - } - - b >>= 14; - k -= 14; - - - index = 0; - mode = InflateBlockMode.BTREE; - goto case InflateBlockMode.BTREE; - - case InflateBlockMode.BTREE: - while (index < 4 + (table >> 10)) - { - while (k < (3)) - { - if (n != 0) - { - r = ZlibConstants.Z_OK; - } - else - { - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - } - - n--; - b |= (_codec.InputBuffer[p++] & 0xff) << k; - k += 8; - } - - blens[border[index++]] = b & 7; - - b >>= 3; k -= 3; - } - - while (index < 19) - { - blens[border[index++]] = 0; - } - - bb[0] = 7; - t = inftree.inflate_trees_bits(blens, bb, tb, hufts, _codec); - if (t != ZlibConstants.Z_OK) - { - r = t; - if (r == ZlibConstants.Z_DATA_ERROR) - { - blens = null; - mode = InflateBlockMode.BAD; - } - - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - } - - index = 0; - mode = InflateBlockMode.DTREE; - goto case InflateBlockMode.DTREE; - - case InflateBlockMode.DTREE: - while (true) - { - t = table; - if (!(index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))) - { - break; - } - - int i, j, c; - - t = bb[0]; - - while (k < t) - { - if (n != 0) - { - r = ZlibConstants.Z_OK; - } - else - { - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - } - - n--; - b |= (_codec.InputBuffer[p++] & 0xff) << k; - k += 8; - } - - t = hufts[(tb[0] + (b & InternalInflateConstants.InflateMask[t])) * 3 + 1]; - c = hufts[(tb[0] + (b & InternalInflateConstants.InflateMask[t])) * 3 + 2]; - - if (c < 16) - { - b >>= t; k -= t; - blens[index++] = c; - } - else - { - // c == 16..18 - i = c == 18 ? 7 : c - 14; - j = c == 18 ? 11 : 3; - - while (k < (t + i)) - { - if (n != 0) - { - r = ZlibConstants.Z_OK; - } - else - { - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - } - - n--; - b |= (_codec.InputBuffer[p++] & 0xff) << k; - k += 8; - } - - b >>= t; k -= t; - - j += (b & InternalInflateConstants.InflateMask[i]); - - b >>= i; k -= i; - - i = index; - t = table; - if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || (c == 16 && i < 1)) - { - blens = null; - mode = InflateBlockMode.BAD; - _codec.Message = "invalid bit length repeat"; - r = ZlibConstants.Z_DATA_ERROR; - - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - } - - c = (c == 16) ? blens[i - 1] : 0; - do - { - blens[i++] = c; - } - while (--j != 0); - index = i; - } - } - - tb[0] = -1; - { - int[] bl = new int[] { 9 }; // must be <= 9 for lookahead assumptions - int[] bd = new int[] { 6 }; // must be <= 9 for lookahead assumptions - int[] tl = new int[1]; - int[] td = new int[1]; - - t = table; - t = inftree.inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), blens, bl, bd, tl, td, hufts, _codec); - - if (t != ZlibConstants.Z_OK) - { - if (t == ZlibConstants.Z_DATA_ERROR) - { - blens = null; - mode = InflateBlockMode.BAD; - } - r = t; - - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - } - codes.Init(bl[0], bd[0], hufts, tl[0], hufts, td[0]); - } - mode = InflateBlockMode.CODES; - goto case InflateBlockMode.CODES; - - case InflateBlockMode.CODES: - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - - r = codes.Process(this, r); - if (r != ZlibConstants.Z_STREAM_END) - { - return Flush(r); - } - - r = ZlibConstants.Z_OK; - p = _codec.NextIn; - n = _codec.AvailableBytesIn; - b = bitb; - k = bitk; - q = writeAt; - m = (int)(q < readAt ? readAt - q - 1 : end - q); - - if (last == 0) - { - mode = InflateBlockMode.TYPE; - break; - } - mode = InflateBlockMode.DRY; - goto case InflateBlockMode.DRY; - - case InflateBlockMode.DRY: - writeAt = q; - r = Flush(r); - q = writeAt; m = (int)(q < readAt ? readAt - q - 1 : end - q); - if (readAt != writeAt) - { - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - } - mode = InflateBlockMode.DONE; - goto case InflateBlockMode.DONE; - - case InflateBlockMode.DONE: - r = ZlibConstants.Z_STREAM_END; - bitb = b; - bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - - case InflateBlockMode.BAD: - r = ZlibConstants.Z_DATA_ERROR; - - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - - - default: - r = ZlibConstants.Z_STREAM_ERROR; - - bitb = b; bitk = k; - _codec.AvailableBytesIn = n; - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - writeAt = q; - return Flush(r); - } - } - } - - - internal void Free() - { - Reset(); - window = null; - hufts = null; - } - - internal void SetDictionary(byte[] d, int start, int n) - { - Array.Copy(d, start, window, 0, n); - readAt = writeAt = n; - } - - // Returns true if inflate is currently at the end of a block generated - // by Z_SYNC_FLUSH or Z_FULL_FLUSH. - internal int SyncPoint() - { - return mode == InflateBlockMode.LENS ? 1 : 0; - } - - // copy as much as possible from the sliding window to the output area - internal int Flush(int r) - { - int nBytes; - - for (int pass = 0; pass < 2; pass++) - { - if (pass == 0) - { - // compute number of bytes to copy as far as end of window - nBytes = (int)((readAt <= writeAt ? writeAt : end) - readAt); - } - else - { - // compute bytes to copy - nBytes = writeAt - readAt; - } - - // workitem 8870 - if (nBytes == 0) - { - if (r == ZlibConstants.Z_BUF_ERROR) - r = ZlibConstants.Z_OK; - return r; - } - - if (nBytes > _codec.AvailableBytesOut) - nBytes = _codec.AvailableBytesOut; - - if (nBytes != 0 && r == ZlibConstants.Z_BUF_ERROR) - r = ZlibConstants.Z_OK; - - // update counters - _codec.AvailableBytesOut -= nBytes; - _codec.TotalBytesOut += nBytes; - - // update check information - if (checkfn != null) - _codec._Adler32 = check = Adler.Adler32(check, window, readAt, nBytes); - - // copy as far as end of window - Array.Copy(window, readAt, _codec.OutputBuffer, _codec.NextOut, nBytes); - _codec.NextOut += nBytes; - readAt += nBytes; - - // see if more to copy at beginning of window - if (readAt == end && pass == 0) - { - // wrap pointers - readAt = 0; - if (writeAt == end) - writeAt = 0; - } - else pass++; - } - - // done - return r; - } - } - - - internal static class InternalInflateConstants - { - // And'ing with mask[n] masks the lower n bits - internal static readonly int[] InflateMask = new int[] { - 0x00000000, 0x00000001, 0x00000003, 0x00000007, - 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, - 0x000000ff, 0x000001ff, 0x000003ff, 0x000007ff, - 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff }; - } - - - sealed class InflateCodes - { - // waiting for "i:"=input, - // "o:"=output, - // "x:"=nothing - private const int START = 0; // x: set up for LEN - private const int LEN = 1; // i: get length/literal/eob next - private const int LENEXT = 2; // i: getting length extra (have base) - private const int DIST = 3; // i: get distance next - private const int DISTEXT = 4; // i: getting distance extra - private const int COPY = 5; // o: copying bytes in window, waiting for space - private const int LIT = 6; // o: got literal, waiting for output space - private const int WASH = 7; // o: got eob, possibly still output waiting - private const int END = 8; // x: got eob and all data flushed - private const int BADCODE = 9; // x: got error - - internal int mode; // current inflate_codes mode - - // mode dependent information - internal int len; - - internal int[] tree; // pointer into tree - internal int tree_index = 0; - internal int need; // bits needed - - internal int lit; - - // if EXT or COPY, where and how much - internal int bitsToGet; // bits to get for extra - internal int dist; // distance back to copy from - - internal byte lbits; // ltree bits decoded per branch - internal byte dbits; // dtree bits decoder per branch - internal int[] ltree; // literal/length/eob tree - internal int ltree_index; // literal/length/eob tree - internal int[] dtree; // distance tree - internal int dtree_index; // distance tree - - internal InflateCodes() - { - } - - internal void Init(int bl, int bd, int[] tl, int tl_index, int[] td, int td_index) - { - mode = START; - lbits = (byte)bl; - dbits = (byte)bd; - ltree = tl; - ltree_index = tl_index; - dtree = td; - dtree_index = td_index; - tree = null; - } - - internal int Process(InflateBlocks blocks, int r) - { - int j; // temporary storage - int tindex; // temporary pointer - int e; // extra bits or operation - int b = 0; // bit buffer - int k = 0; // bits in bit buffer - int p = 0; // input data pointer - int n; // bytes available there - int q; // output window write pointer - int m; // bytes to end of window or read pointer - int f; // pointer to copy strings from - - ZlibCodec z = blocks._codec; - - // copy input/output information to locals (UPDATE macro restores) - p = z.NextIn; - n = z.AvailableBytesIn; - b = blocks.bitb; - k = blocks.bitk; - q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; - - // process input and output based on current state - while (true) - { - switch (mode) - { - // waiting for "i:"=input, "o:"=output, "x:"=nothing - case START: // x: set up for LEN - if (m >= 258 && n >= 10) - { - blocks.bitb = b; blocks.bitk = k; - z.AvailableBytesIn = n; - z.TotalBytesIn += p - z.NextIn; - z.NextIn = p; - blocks.writeAt = q; - r = InflateFast(lbits, dbits, ltree, ltree_index, dtree, dtree_index, blocks, z); - - p = z.NextIn; - n = z.AvailableBytesIn; - b = blocks.bitb; - k = blocks.bitk; - q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; - - if (r != ZlibConstants.Z_OK) - { - mode = (r == ZlibConstants.Z_STREAM_END) ? WASH : BADCODE; - break; - } - } - need = lbits; - tree = ltree; - tree_index = ltree_index; - - mode = LEN; - goto case LEN; - - case LEN: // i: get length/literal/eob next - j = need; - - while (k < j) - { - if (n != 0) - r = ZlibConstants.Z_OK; - else - { - blocks.bitb = b; blocks.bitk = k; - z.AvailableBytesIn = n; - z.TotalBytesIn += p - z.NextIn; - z.NextIn = p; - blocks.writeAt = q; - return blocks.Flush(r); - } - n--; - b |= (z.InputBuffer[p++] & 0xff) << k; - k += 8; - } - - tindex = (tree_index + (b & InternalInflateConstants.InflateMask[j])) * 3; - - b >>= (tree[tindex + 1]); - k -= (tree[tindex + 1]); - - e = tree[tindex]; - - if (e == 0) - { - // literal - lit = tree[tindex + 2]; - mode = LIT; - break; - } - if ((e & 16) != 0) - { - // length - bitsToGet = e & 15; - len = tree[tindex + 2]; - mode = LENEXT; - break; - } - if ((e & 64) == 0) - { - // next table - need = e; - tree_index = tindex / 3 + tree[tindex + 2]; - break; - } - if ((e & 32) != 0) - { - // end of block - mode = WASH; - break; - } - mode = BADCODE; // invalid code - z.Message = "invalid literal/length code"; - r = ZlibConstants.Z_DATA_ERROR; - - blocks.bitb = b; blocks.bitk = k; - z.AvailableBytesIn = n; - z.TotalBytesIn += p - z.NextIn; - z.NextIn = p; - blocks.writeAt = q; - return blocks.Flush(r); - - - case LENEXT: // i: getting length extra (have base) - j = bitsToGet; - - while (k < j) - { - if (n != 0) - r = ZlibConstants.Z_OK; - else - { - blocks.bitb = b; blocks.bitk = k; - z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; - blocks.writeAt = q; - return blocks.Flush(r); - } - n--; b |= (z.InputBuffer[p++] & 0xff) << k; - k += 8; - } - - len += (b & InternalInflateConstants.InflateMask[j]); - - b >>= j; - k -= j; - - need = dbits; - tree = dtree; - tree_index = dtree_index; - mode = DIST; - goto case DIST; - - case DIST: // i: get distance next - j = need; - - while (k < j) - { - if (n != 0) - r = ZlibConstants.Z_OK; - else - { - blocks.bitb = b; blocks.bitk = k; - z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; - blocks.writeAt = q; - return blocks.Flush(r); - } - n--; b |= (z.InputBuffer[p++] & 0xff) << k; - k += 8; - } - - tindex = (tree_index + (b & InternalInflateConstants.InflateMask[j])) * 3; - - b >>= tree[tindex + 1]; - k -= tree[tindex + 1]; - - e = (tree[tindex]); - if ((e & 0x10) != 0) - { - // distance - bitsToGet = e & 15; - dist = tree[tindex + 2]; - mode = DISTEXT; - break; - } - if ((e & 64) == 0) - { - // next table - need = e; - tree_index = tindex / 3 + tree[tindex + 2]; - break; - } - mode = BADCODE; // invalid code - z.Message = "invalid distance code"; - r = ZlibConstants.Z_DATA_ERROR; - - blocks.bitb = b; blocks.bitk = k; - z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; - blocks.writeAt = q; - return blocks.Flush(r); - - - case DISTEXT: // i: getting distance extra - j = bitsToGet; - - while (k < j) - { - if (n != 0) - r = ZlibConstants.Z_OK; - else - { - blocks.bitb = b; blocks.bitk = k; - z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; - blocks.writeAt = q; - return blocks.Flush(r); - } - n--; b |= (z.InputBuffer[p++] & 0xff) << k; - k += 8; - } - - dist += (b & InternalInflateConstants.InflateMask[j]); - - b >>= j; - k -= j; - - mode = COPY; - goto case COPY; - - case COPY: // o: copying bytes in window, waiting for space - f = q - dist; - while (f < 0) - { - // modulo window size-"while" instead - f += blocks.end; // of "if" handles invalid distances - } - while (len != 0) - { - if (m == 0) - { - if (q == blocks.end && blocks.readAt != 0) - { - q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; - } - if (m == 0) - { - blocks.writeAt = q; r = blocks.Flush(r); - q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; - - if (q == blocks.end && blocks.readAt != 0) - { - q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; - } - - if (m == 0) - { - blocks.bitb = b; blocks.bitk = k; - z.AvailableBytesIn = n; - z.TotalBytesIn += p - z.NextIn; - z.NextIn = p; - blocks.writeAt = q; - return blocks.Flush(r); - } - } - } - - blocks.window[q++] = blocks.window[f++]; m--; - - if (f == blocks.end) - f = 0; - len--; - } - mode = START; - break; - - case LIT: // o: got literal, waiting for output space - if (m == 0) - { - if (q == blocks.end && blocks.readAt != 0) - { - q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; - } - if (m == 0) - { - blocks.writeAt = q; r = blocks.Flush(r); - q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; - - if (q == blocks.end && blocks.readAt != 0) - { - q = 0; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; - } - if (m == 0) - { - blocks.bitb = b; blocks.bitk = k; - z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; - blocks.writeAt = q; - return blocks.Flush(r); - } - } - } - r = ZlibConstants.Z_OK; - - blocks.window[q++] = (byte)lit; m--; - - mode = START; - break; - - case WASH: // o: got eob, possibly more output - if (k > 7) - { - // return unused byte, if any - k -= 8; - n++; - p--; // can always return one - } - - blocks.writeAt = q; r = blocks.Flush(r); - q = blocks.writeAt; m = q < blocks.readAt ? blocks.readAt - q - 1 : blocks.end - q; - - if (blocks.readAt != blocks.writeAt) - { - blocks.bitb = b; blocks.bitk = k; - z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; - blocks.writeAt = q; - return blocks.Flush(r); - } - mode = END; - goto case END; - - case END: - r = ZlibConstants.Z_STREAM_END; - blocks.bitb = b; blocks.bitk = k; - z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; - blocks.writeAt = q; - return blocks.Flush(r); - - case BADCODE: // x: got error - - r = ZlibConstants.Z_DATA_ERROR; - - blocks.bitb = b; blocks.bitk = k; - z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; - blocks.writeAt = q; - return blocks.Flush(r); - - default: - r = ZlibConstants.Z_STREAM_ERROR; - - blocks.bitb = b; blocks.bitk = k; - z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; - blocks.writeAt = q; - return blocks.Flush(r); - } - } - } - - - // Called with number of bytes left to write in window at least 258 - // (the maximum string length) and number of input bytes available - // at least ten. The ten bytes are six bytes for the longest length/ - // distance pair plus four bytes for overloading the bit buffer. - - internal int InflateFast(int bl, int bd, int[] tl, int tl_index, int[] td, int td_index, InflateBlocks s, ZlibCodec z) - { - int t; // temporary pointer - int[] tp; // temporary pointer - int tp_index; // temporary pointer - int e; // extra bits or operation - int b; // bit buffer - int k; // bits in bit buffer - int p; // input data pointer - int n; // bytes available there - int q; // output window write pointer - int m; // bytes to end of window or read pointer - int ml; // mask for literal/length tree - int md; // mask for distance tree - int c; // bytes to copy - int d; // distance back to copy from - int r; // copy source pointer - - int tp_index_t_3; // (tp_index+t)*3 - - // load input, output, bit values - p = z.NextIn; n = z.AvailableBytesIn; b = s.bitb; k = s.bitk; - q = s.writeAt; m = q < s.readAt ? s.readAt - q - 1 : s.end - q; - - // initialize masks - ml = InternalInflateConstants.InflateMask[bl]; - md = InternalInflateConstants.InflateMask[bd]; - - // do until not enough input or output space for fast loop - do - { - // assume called with m >= 258 && n >= 10 - // get literal/length code - while (k < (20)) - { - // max bits for literal/length code - n--; - b |= (z.InputBuffer[p++] & 0xff) << k; k += 8; - } - - t = b & ml; - tp = tl; - tp_index = tl_index; - tp_index_t_3 = (tp_index + t) * 3; - if ((e = tp[tp_index_t_3]) == 0) - { - b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]); - - s.window[q++] = (byte)tp[tp_index_t_3 + 2]; - m--; - continue; - } - do - { - - b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]); - - if ((e & 16) != 0) - { - e &= 15; - c = tp[tp_index_t_3 + 2] + ((int)b & InternalInflateConstants.InflateMask[e]); - - b >>= e; k -= e; - - // decode distance base of block to copy - while (k < 15) - { - // max bits for distance code - n--; - b |= (z.InputBuffer[p++] & 0xff) << k; k += 8; - } - - t = b & md; - tp = td; - tp_index = td_index; - tp_index_t_3 = (tp_index + t) * 3; - e = tp[tp_index_t_3]; - - do - { - - b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]); - - if ((e & 16) != 0) - { - // get extra bits to add to distance base - e &= 15; - while (k < e) - { - // get extra bits (up to 13) - n--; - b |= (z.InputBuffer[p++] & 0xff) << k; k += 8; - } - - d = tp[tp_index_t_3 + 2] + (b & InternalInflateConstants.InflateMask[e]); - - b >>= e; k -= e; - - // do the copy - m -= c; - if (q >= d) - { - // offset before dest - // just copy - r = q - d; - if (q - r > 0 && 2 > (q - r)) - { - s.window[q++] = s.window[r++]; // minimum count is three, - s.window[q++] = s.window[r++]; // so unroll loop a little - c -= 2; - } - else - { - Array.Copy(s.window, r, s.window, q, 2); - q += 2; r += 2; c -= 2; - } - } - else - { - // else offset after destination - r = q - d; - do - { - r += s.end; // force pointer in window - } - while (r < 0); // covers invalid distances - e = s.end - r; - if (c > e) - { - // if source crosses, - c -= e; // wrapped copy - if (q - r > 0 && e > (q - r)) - { - do - { - s.window[q++] = s.window[r++]; - } - while (--e != 0); - } - else - { - Array.Copy(s.window, r, s.window, q, e); - q += e; r += e; e = 0; - } - r = 0; // copy rest from start of window - } - } - - // copy all or what's left - if (q - r > 0 && c > (q - r)) - { - do - { - s.window[q++] = s.window[r++]; - } - while (--c != 0); - } - else - { - Array.Copy(s.window, r, s.window, q, c); - q += c; r += c; c = 0; - } - break; - } - else if ((e & 64) == 0) - { - t += tp[tp_index_t_3 + 2]; - t += (b & InternalInflateConstants.InflateMask[e]); - tp_index_t_3 = (tp_index + t) * 3; - e = tp[tp_index_t_3]; - } - else - { - z.Message = "invalid distance code"; - - c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3); - - s.bitb = b; s.bitk = k; - z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; - s.writeAt = q; - - return ZlibConstants.Z_DATA_ERROR; - } - } - while (true); - break; - } - - if ((e & 64) == 0) - { - t += tp[tp_index_t_3 + 2]; - t += (b & InternalInflateConstants.InflateMask[e]); - tp_index_t_3 = (tp_index + t) * 3; - if ((e = tp[tp_index_t_3]) == 0) - { - b >>= (tp[tp_index_t_3 + 1]); k -= (tp[tp_index_t_3 + 1]); - s.window[q++] = (byte)tp[tp_index_t_3 + 2]; - m--; - break; - } - } - else if ((e & 32) != 0) - { - c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3); - - s.bitb = b; s.bitk = k; - z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; - s.writeAt = q; - - return ZlibConstants.Z_STREAM_END; - } - else - { - z.Message = "invalid literal/length code"; - - c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3); - - s.bitb = b; s.bitk = k; - z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; - s.writeAt = q; - - return ZlibConstants.Z_DATA_ERROR; - } - } - while (true); - } - while (m >= 258 && n >= 10); - - // not enough input or output--restore pointers and return - c = z.AvailableBytesIn - n; c = (k >> 3) < c ? k >> 3 : c; n += c; p -= c; k -= (c << 3); - - s.bitb = b; s.bitk = k; - z.AvailableBytesIn = n; z.TotalBytesIn += p - z.NextIn; z.NextIn = p; - s.writeAt = q; - - return ZlibConstants.Z_OK; - } - } - - - internal sealed class InflateManager - { - // preset dictionary flag in zlib header - private const int PRESET_DICT = 0x20; - - private const int Z_DEFLATED = 8; - - private enum InflateManagerMode - { - METHOD = 0, // waiting for method byte - FLAG = 1, // waiting for flag byte - DICT4 = 2, // four dictionary check bytes to go - DICT3 = 3, // three dictionary check bytes to go - DICT2 = 4, // two dictionary check bytes to go - DICT1 = 5, // one dictionary check byte to go - DICT0 = 6, // waiting for inflateSetDictionary - BLOCKS = 7, // decompressing blocks - CHECK4 = 8, // four check bytes to go - CHECK3 = 9, // three check bytes to go - CHECK2 = 10, // two check bytes to go - CHECK1 = 11, // one check byte to go - DONE = 12, // finished check, done - BAD = 13, // got an error--stay here - } - - private InflateManagerMode mode; // current inflate mode - internal ZlibCodec _codec; // pointer back to this zlib stream - - // mode dependent information - internal int method; // if FLAGS, method byte - - // if CHECK, check values to compare - internal uint computedCheck; // computed check value - internal uint expectedCheck; // stream check value - - // if BAD, inflateSync's marker bytes count - internal int marker; - - // mode independent information - //internal int nowrap; // flag for no wrapper - private bool _handleRfc1950HeaderBytes = true; - internal bool HandleRfc1950HeaderBytes - { - get { return _handleRfc1950HeaderBytes; } - set { _handleRfc1950HeaderBytes = value; } - } - internal int wbits; // log2(window size) (8..15, defaults to 15) - - internal InflateBlocks blocks; // current inflate_blocks state - - public InflateManager() { } - - public InflateManager(bool expectRfc1950HeaderBytes) - { - _handleRfc1950HeaderBytes = expectRfc1950HeaderBytes; - } - - internal int Reset() - { - _codec.TotalBytesIn = _codec.TotalBytesOut = 0; - _codec.Message = null; - mode = HandleRfc1950HeaderBytes ? InflateManagerMode.METHOD : InflateManagerMode.BLOCKS; - blocks.Reset(); - return ZlibConstants.Z_OK; - } - - internal int End() - { - if (blocks != null) - blocks.Free(); - blocks = null; - return ZlibConstants.Z_OK; - } - - internal int Initialize(ZlibCodec codec, int w) - { - _codec = codec; - _codec.Message = null; - blocks = null; - - // handle undocumented nowrap option (no zlib header or check) - //nowrap = 0; - //if (w < 0) - //{ - // w = - w; - // nowrap = 1; - //} - - // set window size - if (w < 8 || w > 15) - { - End(); - throw new ZlibException("Bad window size."); - - //return ZlibConstants.Z_STREAM_ERROR; - } - wbits = w; - - blocks = new InflateBlocks(codec, - HandleRfc1950HeaderBytes ? this : null, - 1 << w); - - // reset state - Reset(); - return ZlibConstants.Z_OK; - } - - - internal int Inflate(FlushType flush) - { - int b; - - if (_codec.InputBuffer == null) - throw new ZlibException("InputBuffer is null. "); - - // int f = (flush == FlushType.Finish) - // ? ZlibConstants.Z_BUF_ERROR - // : ZlibConstants.Z_OK; - - // workitem 8870 - int f = ZlibConstants.Z_OK; - int r = ZlibConstants.Z_BUF_ERROR; - - while (true) - { - switch (mode) - { - case InflateManagerMode.METHOD: - if (_codec.AvailableBytesIn == 0) return r; - r = f; - _codec.AvailableBytesIn--; - _codec.TotalBytesIn++; - if (((method = _codec.InputBuffer[_codec.NextIn++]) & 0xf) != Z_DEFLATED) - { - mode = InflateManagerMode.BAD; - _codec.Message = String.Format("unknown compression method (0x{0:X2})", method); - marker = 5; // can't try inflateSync - break; - } - if ((method >> 4) + 8 > wbits) - { - mode = InflateManagerMode.BAD; - _codec.Message = String.Format("invalid window size ({0})", (method >> 4) + 8); - marker = 5; // can't try inflateSync - break; - } - mode = InflateManagerMode.FLAG; - break; - - - case InflateManagerMode.FLAG: - if (_codec.AvailableBytesIn == 0) return r; - r = f; - _codec.AvailableBytesIn--; - _codec.TotalBytesIn++; - b = (_codec.InputBuffer[_codec.NextIn++]) & 0xff; - - if ((((method << 8) + b) % 31) != 0) - { - mode = InflateManagerMode.BAD; - _codec.Message = "incorrect header check"; - marker = 5; // can't try inflateSync - break; - } - - mode = ((b & PRESET_DICT) == 0) - ? InflateManagerMode.BLOCKS - : InflateManagerMode.DICT4; - break; - - case InflateManagerMode.DICT4: - if (_codec.AvailableBytesIn == 0) return r; - r = f; - _codec.AvailableBytesIn--; - _codec.TotalBytesIn++; - expectedCheck = (uint)((_codec.InputBuffer[_codec.NextIn++] << 24) & 0xff000000); - mode = InflateManagerMode.DICT3; - break; - - case InflateManagerMode.DICT3: - if (_codec.AvailableBytesIn == 0) return r; - r = f; - _codec.AvailableBytesIn--; - _codec.TotalBytesIn++; - expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 16) & 0x00ff0000); - mode = InflateManagerMode.DICT2; - break; - - case InflateManagerMode.DICT2: - - if (_codec.AvailableBytesIn == 0) return r; - r = f; - _codec.AvailableBytesIn--; - _codec.TotalBytesIn++; - expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 8) & 0x0000ff00); - mode = InflateManagerMode.DICT1; - break; - - - case InflateManagerMode.DICT1: - if (_codec.AvailableBytesIn == 0) return r; - r = f; - _codec.AvailableBytesIn--; _codec.TotalBytesIn++; - expectedCheck += (uint)(_codec.InputBuffer[_codec.NextIn++] & 0x000000ff); - _codec._Adler32 = expectedCheck; - mode = InflateManagerMode.DICT0; - return ZlibConstants.Z_NEED_DICT; - - - case InflateManagerMode.DICT0: - mode = InflateManagerMode.BAD; - _codec.Message = "need dictionary"; - marker = 0; // can try inflateSync - return ZlibConstants.Z_STREAM_ERROR; - - - case InflateManagerMode.BLOCKS: - r = blocks.Process(r); - if (r == ZlibConstants.Z_DATA_ERROR) - { - mode = InflateManagerMode.BAD; - marker = 0; // can try inflateSync - break; - } - - if (r == ZlibConstants.Z_OK) r = f; - - if (r != ZlibConstants.Z_STREAM_END) - return r; - - r = f; - computedCheck = blocks.Reset(); - if (!HandleRfc1950HeaderBytes) - { - mode = InflateManagerMode.DONE; - return ZlibConstants.Z_STREAM_END; - } - mode = InflateManagerMode.CHECK4; - break; - - case InflateManagerMode.CHECK4: - if (_codec.AvailableBytesIn == 0) return r; - r = f; - _codec.AvailableBytesIn--; - _codec.TotalBytesIn++; - expectedCheck = (uint)((_codec.InputBuffer[_codec.NextIn++] << 24) & 0xff000000); - mode = InflateManagerMode.CHECK3; - break; - - case InflateManagerMode.CHECK3: - if (_codec.AvailableBytesIn == 0) return r; - r = f; - _codec.AvailableBytesIn--; _codec.TotalBytesIn++; - expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 16) & 0x00ff0000); - mode = InflateManagerMode.CHECK2; - break; - - case InflateManagerMode.CHECK2: - if (_codec.AvailableBytesIn == 0) return r; - r = f; - _codec.AvailableBytesIn--; - _codec.TotalBytesIn++; - expectedCheck += (uint)((_codec.InputBuffer[_codec.NextIn++] << 8) & 0x0000ff00); - mode = InflateManagerMode.CHECK1; - break; - - case InflateManagerMode.CHECK1: - if (_codec.AvailableBytesIn == 0) return r; - r = f; - _codec.AvailableBytesIn--; _codec.TotalBytesIn++; - expectedCheck += (uint)(_codec.InputBuffer[_codec.NextIn++] & 0x000000ff); - if (computedCheck != expectedCheck) - { - mode = InflateManagerMode.BAD; - _codec.Message = "incorrect data check"; - marker = 5; // can't try inflateSync - break; - } - mode = InflateManagerMode.DONE; - return ZlibConstants.Z_STREAM_END; - - case InflateManagerMode.DONE: - return ZlibConstants.Z_STREAM_END; - - case InflateManagerMode.BAD: - throw new ZlibException(String.Format("Bad state ({0})", _codec.Message)); - - default: - throw new ZlibException("Stream error."); - - } - } - } - - - - internal int SetDictionary(byte[] dictionary) - { - int index = 0; - int length = dictionary.Length; - if (mode != InflateManagerMode.DICT0) - throw new ZlibException("Stream error."); - - if (Adler.Adler32(1, dictionary, 0, dictionary.Length) != _codec._Adler32) - { - return ZlibConstants.Z_DATA_ERROR; - } - - _codec._Adler32 = Adler.Adler32(0, null, 0, 0); - - if (length >= (1 << wbits)) - { - length = (1 << wbits) - 1; - index = dictionary.Length - length; - } - blocks.SetDictionary(dictionary, index, length); - mode = InflateManagerMode.BLOCKS; - return ZlibConstants.Z_OK; - } - - - private static readonly byte[] mark = new byte[] { 0, 0, 0xff, 0xff }; - - internal int Sync() - { - int n; // number of bytes to look at - int p; // pointer to bytes - int m; // number of marker bytes found in a row - long r, w; // temporaries to save total_in and total_out - - // set up - if (mode != InflateManagerMode.BAD) - { - mode = InflateManagerMode.BAD; - marker = 0; - } - if ((n = _codec.AvailableBytesIn) == 0) - return ZlibConstants.Z_BUF_ERROR; - p = _codec.NextIn; - m = marker; - - // search - while (n != 0 && m < 4) - { - if (_codec.InputBuffer[p] == mark[m]) - { - m++; - } - else if (_codec.InputBuffer[p] != 0) - { - m = 0; - } - else - { - m = 4 - m; - } - p++; n--; - } - - // restore - _codec.TotalBytesIn += p - _codec.NextIn; - _codec.NextIn = p; - _codec.AvailableBytesIn = n; - marker = m; - - // return no joy or set up to restart on a new block - if (m != 4) - { - return ZlibConstants.Z_DATA_ERROR; - } - r = _codec.TotalBytesIn; - w = _codec.TotalBytesOut; - Reset(); - _codec.TotalBytesIn = r; - _codec.TotalBytesOut = w; - mode = InflateManagerMode.BLOCKS; - return ZlibConstants.Z_OK; - } - - - // Returns true if inflate is currently at the end of a block generated - // by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP - // implementation to provide an additional safety check. PPP uses Z_SYNC_FLUSH - // but removes the length bytes of the resulting empty stored block. When - // decompressing, PPP checks that at the end of input packet, inflate is - // waiting for these length bytes. - internal int SyncPoint(ZlibCodec z) - { - return blocks.SyncPoint(); - } - } -} diff --git a/DebugTools/MinecraftClientProxy/Compression/Tree.cs b/DebugTools/MinecraftClientProxy/Compression/Tree.cs deleted file mode 100644 index 88eaa4babc..0000000000 --- a/DebugTools/MinecraftClientProxy/Compression/Tree.cs +++ /dev/null @@ -1,423 +0,0 @@ -// Tree.cs -// ------------------------------------------------------------------ -// -// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation. -// All rights reserved. -// -// This code module is part of DotNetZip, a zipfile class library. -// -// ------------------------------------------------------------------ -// -// This code is licensed under the Microsoft Public License. -// See the file License.txt for the license details. -// More info on: http://dotnetzip.codeplex.com -// -// ------------------------------------------------------------------ -// -// last saved (in emacs): -// Time-stamp: <2009-October-28 13:29:50> -// -// ------------------------------------------------------------------ -// -// This module defines classes for zlib compression and -// decompression. This code is derived from the jzlib implementation of -// zlib. In keeping with the license for jzlib, the copyright to that -// code is below. -// -// ------------------------------------------------------------------ -// -// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in -// the documentation and/or other materials provided with the distribution. -// -// 3. The names of the authors may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, -// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, -// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// ----------------------------------------------------------------------- -// -// This program is based on zlib-1.1.3; credit to authors -// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) -// and contributors of zlib. -// -// ----------------------------------------------------------------------- - - -using System; - -namespace Ionic.Zlib -{ - sealed class Tree - { - private static readonly int HEAP_SIZE = (2 * InternalConstants.L_CODES + 1); - - // extra bits for each length code - internal static readonly int[] ExtraLengthBits = new int[] - { - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, - 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 - }; - - // extra bits for each distance code - internal static readonly int[] ExtraDistanceBits = new int[] - { - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, - 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 - }; - - // extra bits for each bit length code - internal static readonly int[] extra_blbits = new int[]{0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7}; - - internal static readonly sbyte[] bl_order = new sbyte[]{16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; - - - // The lengths of the bit length codes are sent in order of decreasing - // probability, to avoid transmitting the lengths for unused bit - // length codes. - - internal const int Buf_size = 8 * 2; - - // see definition of array dist_code below - //internal const int DIST_CODE_LEN = 512; - - private static readonly sbyte[] _dist_code = new sbyte[] - { - 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, - 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, - 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 0, 0, 16, 17, 18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, - 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 - }; - - internal static readonly sbyte[] LengthCode = new sbyte[] - { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, - 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, - 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, - 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, - 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, - 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 - }; - - - internal static readonly int[] LengthBase = new int[] - { - 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, - 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 0 - }; - - - internal static readonly int[] DistanceBase = new int[] - { - 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, - 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 - }; - - - /// - /// Map from a distance to a distance code. - /// - /// - /// No side effects. _dist_code[256] and _dist_code[257] are never used. - /// - internal static int DistanceCode(int dist) - { - return (dist < 256) - ? _dist_code[dist] - : _dist_code[256 + SharedUtils.URShift(dist, 7)]; - } - - internal short[] dyn_tree; // the dynamic tree - internal int max_code; // largest code with non zero frequency - internal StaticTree staticTree; // the corresponding static tree - - // Compute the optimal bit lengths for a tree and update the total bit length - // for the current block. - // IN assertion: the fields freq and dad are set, heap[heap_max] and - // above are the tree nodes sorted by increasing frequency. - // OUT assertions: the field len is set to the optimal bit length, the - // array bl_count contains the frequencies for each bit length. - // The length opt_len is updated; static_len is also updated if stree is - // not null. - internal void gen_bitlen(DeflateManager s) - { - short[] tree = dyn_tree; - short[] stree = staticTree.treeCodes; - int[] extra = staticTree.extraBits; - int base_Renamed = staticTree.extraBase; - int max_length = staticTree.maxLength; - int h; // heap index - int n, m; // iterate over the tree elements - int bits; // bit length - int xbits; // extra bits - short f; // frequency - int overflow = 0; // number of elements with bit length too large - - for (bits = 0; bits <= InternalConstants.MAX_BITS; bits++) - s.bl_count[bits] = 0; - - // In a first pass, compute the optimal bit lengths (which may - // overflow in the case of the bit length tree). - tree[s.heap[s.heap_max] * 2 + 1] = 0; // root of the heap - - for (h = s.heap_max + 1; h < HEAP_SIZE; h++) - { - n = s.heap[h]; - bits = tree[tree[n * 2 + 1] * 2 + 1] + 1; - if (bits > max_length) - { - bits = max_length; overflow++; - } - tree[n * 2 + 1] = (short) bits; - // We overwrite tree[n*2+1] which is no longer needed - - if (n > max_code) - continue; // not a leaf node - - s.bl_count[bits]++; - xbits = 0; - if (n >= base_Renamed) - xbits = extra[n - base_Renamed]; - f = tree[n * 2]; - s.opt_len += f * (bits + xbits); - if (stree != null) - s.static_len += f * (stree[n * 2 + 1] + xbits); - } - if (overflow == 0) - return ; - - // This happens for example on obj2 and pic of the Calgary corpus - // Find the first bit length which could increase: - do - { - bits = max_length - 1; - while (s.bl_count[bits] == 0) - bits--; - s.bl_count[bits]--; // move one leaf down the tree - s.bl_count[bits + 1] = (short) (s.bl_count[bits + 1] + 2); // move one overflow item as its brother - s.bl_count[max_length]--; - // The brother of the overflow item also moves one step up, - // but this does not affect bl_count[max_length] - overflow -= 2; - } - while (overflow > 0); - - for (bits = max_length; bits != 0; bits--) - { - n = s.bl_count[bits]; - while (n != 0) - { - m = s.heap[--h]; - if (m > max_code) - continue; - if (tree[m * 2 + 1] != bits) - { - s.opt_len = (int) (s.opt_len + ((long) bits - (long) tree[m * 2 + 1]) * (long) tree[m * 2]); - tree[m * 2 + 1] = (short) bits; - } - n--; - } - } - } - - // Construct one Huffman tree and assigns the code bit strings and lengths. - // Update the total bit length for the current block. - // IN assertion: the field freq is set for all tree elements. - // OUT assertions: the fields len and code are set to the optimal bit length - // and corresponding code. The length opt_len is updated; static_len is - // also updated if stree is not null. The field max_code is set. - internal void build_tree(DeflateManager s) - { - short[] tree = dyn_tree; - short[] stree = staticTree.treeCodes; - int elems = staticTree.elems; - int n, m; // iterate over heap elements - int max_code = -1; // largest code with non zero frequency - int node; // new node being created - - // Construct the initial heap, with least frequent element in - // heap[1]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. - // heap[0] is not used. - s.heap_len = 0; - s.heap_max = HEAP_SIZE; - - for (n = 0; n < elems; n++) - { - if (tree[n * 2] != 0) - { - s.heap[++s.heap_len] = max_code = n; - s.depth[n] = 0; - } - else - { - tree[n * 2 + 1] = 0; - } - } - - // The pkzip format requires that at least one distance code exists, - // and that at least one bit should be sent even if there is only one - // possible code. So to avoid special checks later on we force at least - // two codes of non zero frequency. - while (s.heap_len < 2) - { - node = s.heap[++s.heap_len] = (max_code < 2?++max_code:0); - tree[node * 2] = 1; - s.depth[node] = 0; - s.opt_len--; - if (stree != null) - s.static_len -= stree[node * 2 + 1]; - // node is 0 or 1 so it does not have extra bits - } - this.max_code = max_code; - - // The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, - // establish sub-heaps of increasing lengths: - - for (n = s.heap_len / 2; n >= 1; n--) - s.pqdownheap(tree, n); - - // Construct the Huffman tree by repeatedly combining the least two - // frequent nodes. - - node = elems; // next internal node of the tree - do - { - // n = node of least frequency - n = s.heap[1]; - s.heap[1] = s.heap[s.heap_len--]; - s.pqdownheap(tree, 1); - m = s.heap[1]; // m = node of next least frequency - - s.heap[--s.heap_max] = n; // keep the nodes sorted by frequency - s.heap[--s.heap_max] = m; - - // Create a new node father of n and m - tree[node * 2] = unchecked((short) (tree[n * 2] + tree[m * 2])); - s.depth[node] = (sbyte) (System.Math.Max((byte) s.depth[n], (byte) s.depth[m]) + 1); - tree[n * 2 + 1] = tree[m * 2 + 1] = (short) node; - - // and insert the new node in the heap - s.heap[1] = node++; - s.pqdownheap(tree, 1); - } - while (s.heap_len >= 2); - - s.heap[--s.heap_max] = s.heap[1]; - - // At this point, the fields freq and dad are set. We can now - // generate the bit lengths. - - gen_bitlen(s); - - // The field len is now set, we can generate the bit codes - gen_codes(tree, max_code, s.bl_count); - } - - // Generate the codes for a given tree and bit counts (which need not be - // optimal). - // IN assertion: the array bl_count contains the bit length statistics for - // the given tree and the field len is set for all tree elements. - // OUT assertion: the field code is set for all tree elements of non - // zero code length. - internal static void gen_codes(short[] tree, int max_code, short[] bl_count) - { - short[] next_code = new short[InternalConstants.MAX_BITS + 1]; // next code value for each bit length - short code = 0; // running code value - int bits; // bit index - int n; // code index - - // The distribution counts are first used to generate the code values - // without bit reversal. - for (bits = 1; bits <= InternalConstants.MAX_BITS; bits++) - unchecked { - next_code[bits] = code = (short) ((code + bl_count[bits - 1]) << 1); - } - - // Check that the bit counts in bl_count are consistent. The last code - // must be all ones. - //Assert (code + bl_count[MAX_BITS]-1 == (1<>= 1; //SharedUtils.URShift(code, 1); - res <<= 1; - } - while (--len > 0); - return res >> 1; - } - } -} diff --git a/DebugTools/MinecraftClientProxy/Compression/Zlib.cs b/DebugTools/MinecraftClientProxy/Compression/Zlib.cs deleted file mode 100644 index b5604d4a75..0000000000 --- a/DebugTools/MinecraftClientProxy/Compression/Zlib.cs +++ /dev/null @@ -1,546 +0,0 @@ -// Zlib.cs -// ------------------------------------------------------------------ -// -// Copyright (c) 2009-2011 Dino Chiesa and Microsoft Corporation. -// All rights reserved. -// -// This code module is part of DotNetZip, a zipfile class library. -// -// ------------------------------------------------------------------ -// -// This code is licensed under the Microsoft Public License. -// See the file License.txt for the license details. -// More info on: http://dotnetzip.codeplex.com -// -// ------------------------------------------------------------------ -// -// Last Saved: <2011-August-03 19:52:28> -// -// ------------------------------------------------------------------ -// -// This module defines classes for ZLIB compression and -// decompression. This code is derived from the jzlib implementation of -// zlib, but significantly modified. The object model is not the same, -// and many of the behaviors are new or different. Nonetheless, in -// keeping with the license for jzlib, the copyright to that code is -// included below. -// -// ------------------------------------------------------------------ -// -// The following notice applies to jzlib: -// -// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in -// the documentation and/or other materials provided with the distribution. -// -// 3. The names of the authors may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, -// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, -// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// ----------------------------------------------------------------------- -// -// jzlib is based on zlib-1.1.3. -// -// The following notice applies to zlib: -// -// ----------------------------------------------------------------------- -// -// Copyright (C) 1995-2004 Jean-loup Gailly and Mark Adler -// -// The ZLIB software is provided 'as-is', without any express or implied -// warranty. In no event will the authors be held liable for any damages -// arising from the use of this software. -// -// Permission is granted to anyone to use this software for any purpose, -// including commercial applications, and to alter it and redistribute it -// freely, subject to the following restrictions: -// -// 1. The origin of this software must not be misrepresented; you must not -// claim that you wrote the original software. If you use this software -// in a product, an acknowledgment in the product documentation would be -// appreciated but is not required. -// 2. Altered source versions must be plainly marked as such, and must not be -// misrepresented as being the original software. -// 3. This notice may not be removed or altered from any source distribution. -// -// Jean-loup Gailly jloup@gzip.org -// Mark Adler madler@alumni.caltech.edu -// -// ----------------------------------------------------------------------- - - - -using System; -using Interop=System.Runtime.InteropServices; - -namespace Ionic.Zlib -{ - - /// - /// Describes how to flush the current deflate operation. - /// - /// - /// The different FlushType values are useful when using a Deflate in a streaming application. - /// - public enum FlushType - { - /// No flush at all. - None = 0, - - /// Closes the current block, but doesn't flush it to - /// the output. Used internally only in hypothetical - /// scenarios. This was supposed to be removed by Zlib, but it is - /// still in use in some edge cases. - /// - Partial, - - /// - /// Use this during compression to specify that all pending output should be - /// flushed to the output buffer and the output should be aligned on a byte - /// boundary. You might use this in a streaming communication scenario, so that - /// the decompressor can get all input data available so far. When using this - /// with a ZlibCodec, AvailableBytesIn will be zero after the call if - /// enough output space has been provided before the call. Flushing will - /// degrade compression and so it should be used only when necessary. - /// - Sync, - - /// - /// Use this during compression to specify that all output should be flushed, as - /// with FlushType.Sync, but also, the compression state should be reset - /// so that decompression can restart from this point if previous compressed - /// data has been damaged or if random access is desired. Using - /// FlushType.Full too often can significantly degrade the compression. - /// - Full, - - /// Signals the end of the compression/decompression stream. - Finish, - } - - - /// - /// The compression level to be used when using a DeflateStream or ZlibStream with CompressionMode.Compress. - /// - public enum CompressionLevel - { - /// - /// None means that the data will be simply stored, with no change at all. - /// If you are producing ZIPs for use on Mac OSX, be aware that archives produced with CompressionLevel.None - /// cannot be opened with the default zip reader. Use a different CompressionLevel. - /// - None= 0, - /// - /// Same as None. - /// - Level0 = 0, - - /// - /// The fastest but least effective compression. - /// - BestSpeed = 1, - - /// - /// A synonym for BestSpeed. - /// - Level1 = 1, - - /// - /// A little slower, but better, than level 1. - /// - Level2 = 2, - - /// - /// A little slower, but better, than level 2. - /// - Level3 = 3, - - /// - /// A little slower, but better, than level 3. - /// - Level4 = 4, - - /// - /// A little slower than level 4, but with better compression. - /// - Level5 = 5, - - /// - /// The default compression level, with a good balance of speed and compression efficiency. - /// - Default = 6, - /// - /// A synonym for Default. - /// - Level6 = 6, - - /// - /// Pretty good compression! - /// - Level7 = 7, - - /// - /// Better compression than Level7! - /// - Level8 = 8, - - /// - /// The "best" compression, where best means greatest reduction in size of the input data stream. - /// This is also the slowest compression. - /// - BestCompression = 9, - - /// - /// A synonym for BestCompression. - /// - Level9 = 9, - } - - /// - /// Describes options for how the compression algorithm is executed. Different strategies - /// work better on different sorts of data. The strategy parameter can affect the compression - /// ratio and the speed of compression but not the correctness of the compresssion. - /// - public enum CompressionStrategy - { - /// - /// The default strategy is probably the best for normal data. - /// - Default = 0, - - /// - /// The Filtered strategy is intended to be used most effectively with data produced by a - /// filter or predictor. By this definition, filtered data consists mostly of small - /// values with a somewhat random distribution. In this case, the compression algorithm - /// is tuned to compress them better. The effect of Filtered is to force more Huffman - /// coding and less string matching; it is a half-step between Default and HuffmanOnly. - /// - Filtered = 1, - - /// - /// Using HuffmanOnly will force the compressor to do Huffman encoding only, with no - /// string matching. - /// - HuffmanOnly = 2, - } - - - /// - /// An enum to specify the direction of transcoding - whether to compress or decompress. - /// - public enum CompressionMode - { - /// - /// Used to specify that the stream should compress the data. - /// - Compress= 0, - /// - /// Used to specify that the stream should decompress the data. - /// - Decompress = 1, - } - - - /// - /// A general purpose exception class for exceptions in the Zlib library. - /// - [Interop.GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000E")] - public class ZlibException : System.Exception - { - /// - /// The ZlibException class captures exception information generated - /// by the Zlib library. - /// - public ZlibException() - : base() - { - } - - /// - /// This ctor collects a message attached to the exception. - /// - /// the message for the exception. - public ZlibException(System.String s) - : base(s) - { - } - } - - - internal class SharedUtils - { - /// - /// Performs an unsigned bitwise right shift with the specified number - /// - /// Number to operate on - /// Ammount of bits to shift - /// The resulting number from the shift operation - public static int URShift(int number, int bits) - { - return (int)((uint)number >> bits); - } - -#if NOT - /// - /// Performs an unsigned bitwise right shift with the specified number - /// - /// Number to operate on - /// Ammount of bits to shift - /// The resulting number from the shift operation - public static long URShift(long number, int bits) - { - return (long) ((UInt64)number >> bits); - } -#endif - - /// - /// Reads a number of characters from the current source TextReader and writes - /// the data to the target array at the specified index. - /// - /// - /// The source TextReader to read from - /// Contains the array of characteres read from the source TextReader. - /// The starting index of the target array. - /// The maximum number of characters to read from the source TextReader. - /// - /// - /// The number of characters read. The number will be less than or equal to - /// count depending on the data available in the source TextReader. Returns -1 - /// if the end of the stream is reached. - /// - public static System.Int32 ReadInput(System.IO.TextReader sourceTextReader, byte[] target, int start, int count) - { - // Returns 0 bytes if not enough space in target - if (target.Length == 0) return 0; - - char[] charArray = new char[target.Length]; - int bytesRead = sourceTextReader.Read(charArray, start, count); - - // Returns -1 if EOF - if (bytesRead == 0) return -1; - - for (int index = start; index < start + bytesRead; index++) - target[index] = (byte)charArray[index]; - - return bytesRead; - } - - - internal static byte[] ToByteArray(System.String sourceString) - { - return System.Text.UTF8Encoding.UTF8.GetBytes(sourceString); - } - - - internal static char[] ToCharArray(byte[] byteArray) - { - return System.Text.UTF8Encoding.UTF8.GetChars(byteArray); - } - } - - internal static class InternalConstants - { - internal static readonly int MAX_BITS = 15; - internal static readonly int BL_CODES = 19; - internal static readonly int D_CODES = 30; - internal static readonly int LITERALS = 256; - internal static readonly int LENGTH_CODES = 29; - internal static readonly int L_CODES = (LITERALS + 1 + LENGTH_CODES); - - // Bit length codes must not exceed MAX_BL_BITS bits - internal static readonly int MAX_BL_BITS = 7; - - // repeat previous bit length 3-6 times (2 bits of repeat count) - internal static readonly int REP_3_6 = 16; - - // repeat a zero length 3-10 times (3 bits of repeat count) - internal static readonly int REPZ_3_10 = 17; - - // repeat a zero length 11-138 times (7 bits of repeat count) - internal static readonly int REPZ_11_138 = 18; - - } - - internal sealed class StaticTree - { - internal static readonly short[] lengthAndLiteralsTreeCodes = new short[] { - 12, 8, 140, 8, 76, 8, 204, 8, 44, 8, 172, 8, 108, 8, 236, 8, - 28, 8, 156, 8, 92, 8, 220, 8, 60, 8, 188, 8, 124, 8, 252, 8, - 2, 8, 130, 8, 66, 8, 194, 8, 34, 8, 162, 8, 98, 8, 226, 8, - 18, 8, 146, 8, 82, 8, 210, 8, 50, 8, 178, 8, 114, 8, 242, 8, - 10, 8, 138, 8, 74, 8, 202, 8, 42, 8, 170, 8, 106, 8, 234, 8, - 26, 8, 154, 8, 90, 8, 218, 8, 58, 8, 186, 8, 122, 8, 250, 8, - 6, 8, 134, 8, 70, 8, 198, 8, 38, 8, 166, 8, 102, 8, 230, 8, - 22, 8, 150, 8, 86, 8, 214, 8, 54, 8, 182, 8, 118, 8, 246, 8, - 14, 8, 142, 8, 78, 8, 206, 8, 46, 8, 174, 8, 110, 8, 238, 8, - 30, 8, 158, 8, 94, 8, 222, 8, 62, 8, 190, 8, 126, 8, 254, 8, - 1, 8, 129, 8, 65, 8, 193, 8, 33, 8, 161, 8, 97, 8, 225, 8, - 17, 8, 145, 8, 81, 8, 209, 8, 49, 8, 177, 8, 113, 8, 241, 8, - 9, 8, 137, 8, 73, 8, 201, 8, 41, 8, 169, 8, 105, 8, 233, 8, - 25, 8, 153, 8, 89, 8, 217, 8, 57, 8, 185, 8, 121, 8, 249, 8, - 5, 8, 133, 8, 69, 8, 197, 8, 37, 8, 165, 8, 101, 8, 229, 8, - 21, 8, 149, 8, 85, 8, 213, 8, 53, 8, 181, 8, 117, 8, 245, 8, - 13, 8, 141, 8, 77, 8, 205, 8, 45, 8, 173, 8, 109, 8, 237, 8, - 29, 8, 157, 8, 93, 8, 221, 8, 61, 8, 189, 8, 125, 8, 253, 8, - 19, 9, 275, 9, 147, 9, 403, 9, 83, 9, 339, 9, 211, 9, 467, 9, - 51, 9, 307, 9, 179, 9, 435, 9, 115, 9, 371, 9, 243, 9, 499, 9, - 11, 9, 267, 9, 139, 9, 395, 9, 75, 9, 331, 9, 203, 9, 459, 9, - 43, 9, 299, 9, 171, 9, 427, 9, 107, 9, 363, 9, 235, 9, 491, 9, - 27, 9, 283, 9, 155, 9, 411, 9, 91, 9, 347, 9, 219, 9, 475, 9, - 59, 9, 315, 9, 187, 9, 443, 9, 123, 9, 379, 9, 251, 9, 507, 9, - 7, 9, 263, 9, 135, 9, 391, 9, 71, 9, 327, 9, 199, 9, 455, 9, - 39, 9, 295, 9, 167, 9, 423, 9, 103, 9, 359, 9, 231, 9, 487, 9, - 23, 9, 279, 9, 151, 9, 407, 9, 87, 9, 343, 9, 215, 9, 471, 9, - 55, 9, 311, 9, 183, 9, 439, 9, 119, 9, 375, 9, 247, 9, 503, 9, - 15, 9, 271, 9, 143, 9, 399, 9, 79, 9, 335, 9, 207, 9, 463, 9, - 47, 9, 303, 9, 175, 9, 431, 9, 111, 9, 367, 9, 239, 9, 495, 9, - 31, 9, 287, 9, 159, 9, 415, 9, 95, 9, 351, 9, 223, 9, 479, 9, - 63, 9, 319, 9, 191, 9, 447, 9, 127, 9, 383, 9, 255, 9, 511, 9, - 0, 7, 64, 7, 32, 7, 96, 7, 16, 7, 80, 7, 48, 7, 112, 7, - 8, 7, 72, 7, 40, 7, 104, 7, 24, 7, 88, 7, 56, 7, 120, 7, - 4, 7, 68, 7, 36, 7, 100, 7, 20, 7, 84, 7, 52, 7, 116, 7, - 3, 8, 131, 8, 67, 8, 195, 8, 35, 8, 163, 8, 99, 8, 227, 8 - }; - - internal static readonly short[] distTreeCodes = new short[] { - 0, 5, 16, 5, 8, 5, 24, 5, 4, 5, 20, 5, 12, 5, 28, 5, - 2, 5, 18, 5, 10, 5, 26, 5, 6, 5, 22, 5, 14, 5, 30, 5, - 1, 5, 17, 5, 9, 5, 25, 5, 5, 5, 21, 5, 13, 5, 29, 5, - 3, 5, 19, 5, 11, 5, 27, 5, 7, 5, 23, 5 }; - - internal static readonly StaticTree Literals; - internal static readonly StaticTree Distances; - internal static readonly StaticTree BitLengths; - - internal short[] treeCodes; // static tree or null - internal int[] extraBits; // extra bits for each code or null - internal int extraBase; // base index for extra_bits - internal int elems; // max number of elements in the tree - internal int maxLength; // max bit length for the codes - - private StaticTree(short[] treeCodes, int[] extraBits, int extraBase, int elems, int maxLength) - { - this.treeCodes = treeCodes; - this.extraBits = extraBits; - this.extraBase = extraBase; - this.elems = elems; - this.maxLength = maxLength; - } - static StaticTree() - { - Literals = new StaticTree(lengthAndLiteralsTreeCodes, Tree.ExtraLengthBits, InternalConstants.LITERALS + 1, InternalConstants.L_CODES, InternalConstants.MAX_BITS); - Distances = new StaticTree(distTreeCodes, Tree.ExtraDistanceBits, 0, InternalConstants.D_CODES, InternalConstants.MAX_BITS); - BitLengths = new StaticTree(null, Tree.extra_blbits, 0, InternalConstants.BL_CODES, InternalConstants.MAX_BL_BITS); - } - } - - - - /// - /// Computes an Adler-32 checksum. - /// - /// - /// The Adler checksum is similar to a CRC checksum, but faster to compute, though less - /// reliable. It is used in producing RFC1950 compressed streams. The Adler checksum - /// is a required part of the "ZLIB" standard. Applications will almost never need to - /// use this class directly. - /// - /// - /// - public sealed class Adler - { - // largest prime smaller than 65536 - private static readonly uint BASE = 65521; - // NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 - private static readonly int NMAX = 5552; - - -#pragma warning disable 3001 -#pragma warning disable 3002 - - /// - /// Calculates the Adler32 checksum. - /// - /// - /// - /// This is used within ZLIB. You probably don't need to use this directly. - /// - /// - /// - /// To compute an Adler32 checksum on a byte array: - /// - /// var adler = Adler.Adler32(0, null, 0, 0); - /// adler = Adler.Adler32(adler, buffer, index, length); - /// - /// - public static uint Adler32(uint adler, byte[] buf, int index, int len) - { - if (buf == null) - return 1; - - uint s1 = (uint) (adler & 0xffff); - uint s2 = (uint) ((adler >> 16) & 0xffff); - - while (len > 0) - { - int k = len < NMAX ? len : NMAX; - len -= k; - while (k >= 16) - { - //s1 += (buf[index++] & 0xff); s2 += s1; - s1 += buf[index++]; s2 += s1; - s1 += buf[index++]; s2 += s1; - s1 += buf[index++]; s2 += s1; - s1 += buf[index++]; s2 += s1; - s1 += buf[index++]; s2 += s1; - s1 += buf[index++]; s2 += s1; - s1 += buf[index++]; s2 += s1; - s1 += buf[index++]; s2 += s1; - s1 += buf[index++]; s2 += s1; - s1 += buf[index++]; s2 += s1; - s1 += buf[index++]; s2 += s1; - s1 += buf[index++]; s2 += s1; - s1 += buf[index++]; s2 += s1; - s1 += buf[index++]; s2 += s1; - s1 += buf[index++]; s2 += s1; - s1 += buf[index++]; s2 += s1; - k -= 16; - } - if (k != 0) - { - do - { - s1 += buf[index++]; - s2 += s1; - } - while (--k != 0); - } - s1 %= BASE; - s2 %= BASE; - } - return (uint)((s2 << 16) | s1); - } -#pragma warning restore 3001 -#pragma warning restore 3002 - - } - -} diff --git a/DebugTools/MinecraftClientProxy/Compression/ZlibBaseStream.cs b/DebugTools/MinecraftClientProxy/Compression/ZlibBaseStream.cs deleted file mode 100644 index b085c0cb3c..0000000000 --- a/DebugTools/MinecraftClientProxy/Compression/ZlibBaseStream.cs +++ /dev/null @@ -1,627 +0,0 @@ -// ZlibBaseStream.cs -// ------------------------------------------------------------------ -// -// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation. -// All rights reserved. -// -// This code module is part of DotNetZip, a zipfile class library. -// -// ------------------------------------------------------------------ -// -// This code is licensed under the Microsoft Public License. -// See the file License.txt for the license details. -// More info on: http://dotnetzip.codeplex.com -// -// ------------------------------------------------------------------ -// -// last saved (in emacs): -// Time-stamp: <2011-August-06 21:22:38> -// -// ------------------------------------------------------------------ -// -// This module defines the ZlibBaseStream class, which is an intnernal -// base class for DeflateStream, ZlibStream and GZipStream. -// -// ------------------------------------------------------------------ - -using System; -using System.IO; - -namespace Ionic.Zlib -{ - - internal enum ZlibStreamFlavor { ZLIB = 1950, DEFLATE = 1951, GZIP = 1952 } - - internal class ZlibBaseStream : System.IO.Stream - { - protected internal ZlibCodec _z = null; // deferred init... new ZlibCodec(); - - protected internal StreamMode _streamMode = StreamMode.Undefined; - protected internal FlushType _flushMode; - protected internal ZlibStreamFlavor _flavor; - protected internal CompressionMode _compressionMode; - protected internal CompressionLevel _level; - protected internal bool _leaveOpen; - protected internal byte[] _workingBuffer; - protected internal int _bufferSize = ZlibConstants.WorkingBufferSizeDefault; - protected internal byte[] _buf1 = new byte[1]; - - protected internal System.IO.Stream _stream; - protected internal CompressionStrategy Strategy = CompressionStrategy.Default; - - // workitem 7159 - Ionic.Crc.CRC32 crc; - protected internal string _GzipFileName; - protected internal string _GzipComment; - protected internal DateTime _GzipMtime; - protected internal int _gzipHeaderByteCount; - - internal int Crc32 { get { if (crc == null) return 0; return crc.Crc32Result; } } - - public ZlibBaseStream(System.IO.Stream stream, - CompressionMode compressionMode, - CompressionLevel level, - ZlibStreamFlavor flavor, - bool leaveOpen) - : base() - { - this._flushMode = FlushType.None; - //this._workingBuffer = new byte[WORKING_BUFFER_SIZE_DEFAULT]; - this._stream = stream; - this._leaveOpen = leaveOpen; - this._compressionMode = compressionMode; - this._flavor = flavor; - this._level = level; - // workitem 7159 - if (flavor == ZlibStreamFlavor.GZIP) - { - this.crc = new Ionic.Crc.CRC32(); - } - } - - - protected internal bool _wantCompress - { - get - { - return (this._compressionMode == CompressionMode.Compress); - } - } - - private ZlibCodec z - { - get - { - if (_z == null) - { - bool wantRfc1950Header = (this._flavor == ZlibStreamFlavor.ZLIB); - _z = new ZlibCodec(); - if (this._compressionMode == CompressionMode.Decompress) - { - _z.InitializeInflate(wantRfc1950Header); - } - else - { - _z.Strategy = Strategy; - _z.InitializeDeflate(this._level, wantRfc1950Header); - } - } - return _z; - } - } - - - - private byte[] workingBuffer - { - get - { - if (_workingBuffer == null) - _workingBuffer = new byte[_bufferSize]; - return _workingBuffer; - } - } - - - - public override void Write(System.Byte[] buffer, int offset, int count) - { - // workitem 7159 - // calculate the CRC on the unccompressed data (before writing) - if (crc != null) - crc.SlurpBlock(buffer, offset, count); - - if (_streamMode == StreamMode.Undefined) - _streamMode = StreamMode.Writer; - else if (_streamMode != StreamMode.Writer) - throw new ZlibException("Cannot Write after Reading."); - - if (count == 0) - return; - - // first reference of z property will initialize the private var _z - z.InputBuffer = buffer; - _z.NextIn = offset; - _z.AvailableBytesIn = count; - bool done = false; - do - { - _z.OutputBuffer = workingBuffer; - _z.NextOut = 0; - _z.AvailableBytesOut = _workingBuffer.Length; - int rc = (_wantCompress) - ? _z.Deflate(_flushMode) - : _z.Inflate(_flushMode); - if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) - throw new ZlibException((_wantCompress ? "de" : "in") + "flating: " + _z.Message); - - //if (_workingBuffer.Length - _z.AvailableBytesOut > 0) - _stream.Write(_workingBuffer, 0, _workingBuffer.Length - _z.AvailableBytesOut); - - done = _z.AvailableBytesIn == 0 && _z.AvailableBytesOut != 0; - - // If GZIP and de-compress, we're done when 8 bytes remain. - if (_flavor == ZlibStreamFlavor.GZIP && !_wantCompress) - done = (_z.AvailableBytesIn == 8 && _z.AvailableBytesOut != 0); - - } - while (!done); - } - - - - private void finish() - { - if (_z == null) return; - - if (_streamMode == StreamMode.Writer) - { - bool done = false; - do - { - _z.OutputBuffer = workingBuffer; - _z.NextOut = 0; - _z.AvailableBytesOut = _workingBuffer.Length; - int rc = (_wantCompress) - ? _z.Deflate(FlushType.Finish) - : _z.Inflate(FlushType.Finish); - - if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) - { - string verb = (_wantCompress ? "de" : "in") + "flating"; - if (_z.Message == null) - throw new ZlibException(String.Format("{0}: (rc = {1})", verb, rc)); - else - throw new ZlibException(verb + ": " + _z.Message); - } - - if (_workingBuffer.Length - _z.AvailableBytesOut > 0) - { - _stream.Write(_workingBuffer, 0, _workingBuffer.Length - _z.AvailableBytesOut); - } - - done = _z.AvailableBytesIn == 0 && _z.AvailableBytesOut != 0; - // If GZIP and de-compress, we're done when 8 bytes remain. - if (_flavor == ZlibStreamFlavor.GZIP && !_wantCompress) - done = (_z.AvailableBytesIn == 8 && _z.AvailableBytesOut != 0); - - } - while (!done); - - Flush(); - - // workitem 7159 - if (_flavor == ZlibStreamFlavor.GZIP) - { - if (_wantCompress) - { - // Emit the GZIP trailer: CRC32 and size mod 2^32 - int c1 = crc.Crc32Result; - _stream.Write(BitConverter.GetBytes(c1), 0, 4); - int c2 = (Int32)(crc.TotalBytesRead & 0x00000000FFFFFFFF); - _stream.Write(BitConverter.GetBytes(c2), 0, 4); - } - else - { - throw new ZlibException("Writing with decompression is not supported."); - } - } - } - // workitem 7159 - else if (_streamMode == StreamMode.Reader) - { - if (_flavor == ZlibStreamFlavor.GZIP) - { - if (!_wantCompress) - { - // workitem 8501: handle edge case (decompress empty stream) - if (_z.TotalBytesOut == 0L) - return; - - // Read and potentially verify the GZIP trailer: - // CRC32 and size mod 2^32 - byte[] trailer = new byte[8]; - - // workitems 8679 & 12554 - if (_z.AvailableBytesIn < 8) - { - // Make sure we have read to the end of the stream - Array.Copy(_z.InputBuffer, _z.NextIn, trailer, 0, _z.AvailableBytesIn); - int bytesNeeded = 8 - _z.AvailableBytesIn; - int bytesRead = _stream.Read(trailer, - _z.AvailableBytesIn, - bytesNeeded); - if (bytesNeeded != bytesRead) - { - throw new ZlibException(String.Format("Missing or incomplete GZIP trailer. Expected 8 bytes, got {0}.", - _z.AvailableBytesIn + bytesRead)); - } - } - else - { - Array.Copy(_z.InputBuffer, _z.NextIn, trailer, 0, trailer.Length); - } - - Int32 crc32_expected = BitConverter.ToInt32(trailer, 0); - Int32 crc32_actual = crc.Crc32Result; - Int32 isize_expected = BitConverter.ToInt32(trailer, 4); - Int32 isize_actual = (Int32)(_z.TotalBytesOut & 0x00000000FFFFFFFF); - - if (crc32_actual != crc32_expected) - throw new ZlibException(String.Format("Bad CRC32 in GZIP trailer. (actual({0:X8})!=expected({1:X8}))", crc32_actual, crc32_expected)); - - if (isize_actual != isize_expected) - throw new ZlibException(String.Format("Bad size in GZIP trailer. (actual({0})!=expected({1}))", isize_actual, isize_expected)); - - } - else - { - throw new ZlibException("Reading with compression is not supported."); - } - } - } - } - - - private void end() - { - if (z == null) - return; - if (_wantCompress) - { - _z.EndDeflate(); - } - else - { - _z.EndInflate(); - } - _z = null; - } - - - public override void Close() - { - if (_stream == null) return; - try - { - finish(); - } - finally - { - end(); - if (!_leaveOpen) _stream.Close(); - _stream = null; - } - } - - public override void Flush() - { - _stream.Flush(); - } - - public override System.Int64 Seek(System.Int64 offset, System.IO.SeekOrigin origin) - { - throw new NotImplementedException(); - //_outStream.Seek(offset, origin); - } - public override void SetLength(System.Int64 value) - { - _stream.SetLength(value); - } - - -#if NOT - public int Read() - { - if (Read(_buf1, 0, 1) == 0) - return 0; - // calculate CRC after reading - if (crc!=null) - crc.SlurpBlock(_buf1,0,1); - return (_buf1[0] & 0xFF); - } -#endif - - private bool nomoreinput = false; - - - - private string ReadZeroTerminatedString() - { - var list = new System.Collections.Generic.List(); - bool done = false; - do - { - // workitem 7740 - int n = _stream.Read(_buf1, 0, 1); - if (n != 1) - throw new ZlibException("Unexpected EOF reading GZIP header."); - else - { - if (_buf1[0] == 0) - done = true; - else - list.Add(_buf1[0]); - } - } while (!done); - byte[] a = list.ToArray(); - return GZipStream.iso8859dash1.GetString(a, 0, a.Length); - } - - - private int _ReadAndValidateGzipHeader() - { - int totalBytesRead = 0; - // read the header on the first read - byte[] header = new byte[10]; - int n = _stream.Read(header, 0, header.Length); - - // workitem 8501: handle edge case (decompress empty stream) - if (n == 0) - return 0; - - if (n != 10) - throw new ZlibException("Not a valid GZIP stream."); - - if (header[0] != 0x1F || header[1] != 0x8B || header[2] != 8) - throw new ZlibException("Bad GZIP header."); - - Int32 timet = BitConverter.ToInt32(header, 4); - _GzipMtime = GZipStream._unixEpoch.AddSeconds(timet); - totalBytesRead += n; - if ((header[3] & 0x04) == 0x04) - { - // read and discard extra field - n = _stream.Read(header, 0, 2); // 2-byte length field - totalBytesRead += n; - - Int16 extraLength = (Int16)(header[0] + header[1] * 256); - byte[] extra = new byte[extraLength]; - n = _stream.Read(extra, 0, extra.Length); - if (n != extraLength) - throw new ZlibException("Unexpected end-of-file reading GZIP header."); - totalBytesRead += n; - } - if ((header[3] & 0x08) == 0x08) - _GzipFileName = ReadZeroTerminatedString(); - if ((header[3] & 0x10) == 0x010) - _GzipComment = ReadZeroTerminatedString(); - if ((header[3] & 0x02) == 0x02) - Read(_buf1, 0, 1); // CRC16, ignore - - return totalBytesRead; - } - - - - public override System.Int32 Read(System.Byte[] buffer, System.Int32 offset, System.Int32 count) - { - // According to MS documentation, any implementation of the IO.Stream.Read function must: - // (a) throw an exception if offset & count reference an invalid part of the buffer, - // or if count < 0, or if buffer is null - // (b) return 0 only upon EOF, or if count = 0 - // (c) if not EOF, then return at least 1 byte, up to bytes - - if (_streamMode == StreamMode.Undefined) - { - if (!this._stream.CanRead) throw new ZlibException("The stream is not readable."); - // for the first read, set up some controls. - _streamMode = StreamMode.Reader; - // (The first reference to _z goes through the private accessor which - // may initialize it.) - z.AvailableBytesIn = 0; - if (_flavor == ZlibStreamFlavor.GZIP) - { - _gzipHeaderByteCount = _ReadAndValidateGzipHeader(); - // workitem 8501: handle edge case (decompress empty stream) - if (_gzipHeaderByteCount == 0) - return 0; - } - } - - if (_streamMode != StreamMode.Reader) - throw new ZlibException("Cannot Read after Writing."); - - if (count == 0) return 0; - if (nomoreinput && _wantCompress) return 0; // workitem 8557 - if (buffer == null) throw new ArgumentNullException("buffer"); - if (count < 0) throw new ArgumentOutOfRangeException("count"); - if (offset < buffer.GetLowerBound(0)) throw new ArgumentOutOfRangeException("offset"); - if ((offset + count) > buffer.GetLength(0)) throw new ArgumentOutOfRangeException("count"); - - int rc = 0; - - // set up the output of the deflate/inflate codec: - _z.OutputBuffer = buffer; - _z.NextOut = offset; - _z.AvailableBytesOut = count; - - // This is necessary in case _workingBuffer has been resized. (new byte[]) - // (The first reference to _workingBuffer goes through the private accessor which - // may initialize it.) - _z.InputBuffer = workingBuffer; - - do - { - // need data in _workingBuffer in order to deflate/inflate. Here, we check if we have any. - if ((_z.AvailableBytesIn == 0) && (!nomoreinput)) - { - // No data available, so try to Read data from the captive stream. - _z.NextIn = 0; - _z.AvailableBytesIn = _stream.Read(_workingBuffer, 0, _workingBuffer.Length); - if (_z.AvailableBytesIn == 0) - nomoreinput = true; - - } - // we have data in InputBuffer; now compress or decompress as appropriate - rc = (_wantCompress) - ? _z.Deflate(_flushMode) - : _z.Inflate(_flushMode); - - if (nomoreinput && (rc == ZlibConstants.Z_BUF_ERROR)) - return 0; - - if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) - throw new ZlibException(String.Format("{0}flating: rc={1} msg={2}", (_wantCompress ? "de" : "in"), rc, _z.Message)); - - if ((nomoreinput || rc == ZlibConstants.Z_STREAM_END) && (_z.AvailableBytesOut == count)) - break; // nothing more to read - } - //while (_z.AvailableBytesOut == count && rc == ZlibConstants.Z_OK); - while (_z.AvailableBytesOut > 0 && !nomoreinput && rc == ZlibConstants.Z_OK); - - - // workitem 8557 - // is there more room in output? - if (_z.AvailableBytesOut > 0) - { - if (rc == ZlibConstants.Z_OK && _z.AvailableBytesIn == 0) - { - // deferred - } - - // are we completely done reading? - if (nomoreinput) - { - // and in compression? - if (_wantCompress) - { - // no more input data available; therefore we flush to - // try to complete the read - rc = _z.Deflate(FlushType.Finish); - - if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) - throw new ZlibException(String.Format("Deflating: rc={0} msg={1}", rc, _z.Message)); - } - } - } - - - rc = (count - _z.AvailableBytesOut); - - // calculate CRC after reading - if (crc != null) - crc.SlurpBlock(buffer, offset, rc); - - return rc; - } - - - - public override System.Boolean CanRead - { - get { return this._stream.CanRead; } - } - - public override System.Boolean CanSeek - { - get { return this._stream.CanSeek; } - } - - public override System.Boolean CanWrite - { - get { return this._stream.CanWrite; } - } - - public override System.Int64 Length - { - get { return _stream.Length; } - } - - public override long Position - { - get { throw new NotImplementedException(); } - set { throw new NotImplementedException(); } - } - - internal enum StreamMode - { - Writer, - Reader, - Undefined, - } - - - public static void CompressString(String s, Stream compressor) - { - byte[] uncompressed = System.Text.Encoding.UTF8.GetBytes(s); - using (compressor) - { - compressor.Write(uncompressed, 0, uncompressed.Length); - } - } - - public static void CompressBuffer(byte[] b, Stream compressor) - { - // workitem 8460 - using (compressor) - { - compressor.Write(b, 0, b.Length); - } - } - - public static String UncompressString(byte[] compressed, Stream decompressor) - { - // workitem 8460 - byte[] working = new byte[1024]; - var encoding = System.Text.Encoding.UTF8; - using (var output = new MemoryStream()) - { - using (decompressor) - { - int n; - while ((n = decompressor.Read(working, 0, working.Length)) != 0) - { - output.Write(working, 0, n); - } - } - - // reset to allow read from start - output.Seek(0, SeekOrigin.Begin); - var sr = new StreamReader(output, encoding); - return sr.ReadToEnd(); - } - } - - public static byte[] UncompressBuffer(byte[] compressed, Stream decompressor) - { - // workitem 8460 - byte[] working = new byte[1024]; - using (var output = new MemoryStream()) - { - using (decompressor) - { - int n; - while ((n = decompressor.Read(working, 0, working.Length)) != 0) - { - output.Write(working, 0, n); - } - } - return output.ToArray(); - } - } - - } - - -} diff --git a/DebugTools/MinecraftClientProxy/Compression/ZlibCodec.cs b/DebugTools/MinecraftClientProxy/Compression/ZlibCodec.cs deleted file mode 100644 index c8fdd7fdf8..0000000000 --- a/DebugTools/MinecraftClientProxy/Compression/ZlibCodec.cs +++ /dev/null @@ -1,717 +0,0 @@ -// ZlibCodec.cs -// ------------------------------------------------------------------ -// -// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation. -// All rights reserved. -// -// This code module is part of DotNetZip, a zipfile class library. -// -// ------------------------------------------------------------------ -// -// This code is licensed under the Microsoft Public License. -// See the file License.txt for the license details. -// More info on: http://dotnetzip.codeplex.com -// -// ------------------------------------------------------------------ -// -// last saved (in emacs): -// Time-stamp: <2009-November-03 15:40:51> -// -// ------------------------------------------------------------------ -// -// This module defines a Codec for ZLIB compression and -// decompression. This code extends code that was based the jzlib -// implementation of zlib, but this code is completely novel. The codec -// class is new, and encapsulates some behaviors that are new, and some -// that were present in other classes in the jzlib code base. In -// keeping with the license for jzlib, the copyright to the jzlib code -// is included below. -// -// ------------------------------------------------------------------ -// -// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in -// the documentation and/or other materials provided with the distribution. -// -// 3. The names of the authors may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, -// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, -// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// ----------------------------------------------------------------------- -// -// This program is based on zlib-1.1.3; credit to authors -// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) -// and contributors of zlib. -// -// ----------------------------------------------------------------------- - - -using System; -using Interop=System.Runtime.InteropServices; - -namespace Ionic.Zlib -{ - /// - /// Encoder and Decoder for ZLIB and DEFLATE (IETF RFC1950 and RFC1951). - /// - /// - /// - /// This class compresses and decompresses data according to the Deflate algorithm - /// and optionally, the ZLIB format, as documented in RFC 1950 - ZLIB and RFC 1951 - DEFLATE. - /// - [Interop.GuidAttribute("ebc25cf6-9120-4283-b972-0e5520d0000D")] - [Interop.ComVisible(true)] -#if !NETCF - [Interop.ClassInterface(Interop.ClassInterfaceType.AutoDispatch)] -#endif - sealed public class ZlibCodec - { - /// - /// The buffer from which data is taken. - /// - public byte[] InputBuffer; - - /// - /// An index into the InputBuffer array, indicating where to start reading. - /// - public int NextIn; - - /// - /// The number of bytes available in the InputBuffer, starting at NextIn. - /// - /// - /// Generally you should set this to InputBuffer.Length before the first Inflate() or Deflate() call. - /// The class will update this number as calls to Inflate/Deflate are made. - /// - public int AvailableBytesIn; - - /// - /// Total number of bytes read so far, through all calls to Inflate()/Deflate(). - /// - public long TotalBytesIn; - - /// - /// Buffer to store output data. - /// - public byte[] OutputBuffer; - - /// - /// An index into the OutputBuffer array, indicating where to start writing. - /// - public int NextOut; - - /// - /// The number of bytes available in the OutputBuffer, starting at NextOut. - /// - /// - /// Generally you should set this to OutputBuffer.Length before the first Inflate() or Deflate() call. - /// The class will update this number as calls to Inflate/Deflate are made. - /// - public int AvailableBytesOut; - - /// - /// Total number of bytes written to the output so far, through all calls to Inflate()/Deflate(). - /// - public long TotalBytesOut; - - /// - /// used for diagnostics, when something goes wrong! - /// - public System.String Message; - - internal DeflateManager dstate; - internal InflateManager istate; - - internal uint _Adler32; - - /// - /// The compression level to use in this codec. Useful only in compression mode. - /// - public CompressionLevel CompressLevel = CompressionLevel.Default; - - /// - /// The number of Window Bits to use. - /// - /// - /// This gauges the size of the sliding window, and hence the - /// compression effectiveness as well as memory consumption. It's best to just leave this - /// setting alone if you don't know what it is. The maximum value is 15 bits, which implies - /// a 32k window. - /// - public int WindowBits = ZlibConstants.WindowBitsDefault; - - /// - /// The compression strategy to use. - /// - /// - /// This is only effective in compression. The theory offered by ZLIB is that different - /// strategies could potentially produce significant differences in compression behavior - /// for different data sets. Unfortunately I don't have any good recommendations for how - /// to set it differently. When I tested changing the strategy I got minimally different - /// compression performance. It's best to leave this property alone if you don't have a - /// good feel for it. Or, you may want to produce a test harness that runs through the - /// different strategy options and evaluates them on different file types. If you do that, - /// let me know your results. - /// - public CompressionStrategy Strategy = CompressionStrategy.Default; - - - /// - /// The Adler32 checksum on the data transferred through the codec so far. You probably don't need to look at this. - /// - public int Adler32 { get { return (int)_Adler32; } } - - - /// - /// Create a ZlibCodec. - /// - /// - /// If you use this default constructor, you will later have to explicitly call - /// InitializeInflate() or InitializeDeflate() before using the ZlibCodec to compress - /// or decompress. - /// - public ZlibCodec() { } - - /// - /// Create a ZlibCodec that either compresses or decompresses. - /// - /// - /// Indicates whether the codec should compress (deflate) or decompress (inflate). - /// - public ZlibCodec(CompressionMode mode) - { - if (mode == CompressionMode.Compress) - { - int rc = InitializeDeflate(); - if (rc != ZlibConstants.Z_OK) throw new ZlibException("Cannot initialize for deflate."); - } - else if (mode == CompressionMode.Decompress) - { - int rc = InitializeInflate(); - if (rc != ZlibConstants.Z_OK) throw new ZlibException("Cannot initialize for inflate."); - } - else throw new ZlibException("Invalid ZlibStreamFlavor."); - } - - /// - /// Initialize the inflation state. - /// - /// - /// It is not necessary to call this before using the ZlibCodec to inflate data; - /// It is implicitly called when you call the constructor. - /// - /// Z_OK if everything goes well. - public int InitializeInflate() - { - return InitializeInflate(this.WindowBits); - } - - /// - /// Initialize the inflation state with an explicit flag to - /// govern the handling of RFC1950 header bytes. - /// - /// - /// - /// By default, the ZLIB header defined in RFC 1950 is expected. If - /// you want to read a zlib stream you should specify true for - /// expectRfc1950Header. If you have a deflate stream, you will want to specify - /// false. It is only necessary to invoke this initializer explicitly if you - /// want to specify false. - /// - /// - /// whether to expect an RFC1950 header byte - /// pair when reading the stream of data to be inflated. - /// - /// Z_OK if everything goes well. - public int InitializeInflate(bool expectRfc1950Header) - { - return InitializeInflate(this.WindowBits, expectRfc1950Header); - } - - /// - /// Initialize the ZlibCodec for inflation, with the specified number of window bits. - /// - /// The number of window bits to use. If you need to ask what that is, - /// then you shouldn't be calling this initializer. - /// Z_OK if all goes well. - public int InitializeInflate(int windowBits) - { - this.WindowBits = windowBits; - return InitializeInflate(windowBits, true); - } - - /// - /// Initialize the inflation state with an explicit flag to govern the handling of - /// RFC1950 header bytes. - /// - /// - /// - /// If you want to read a zlib stream you should specify true for - /// expectRfc1950Header. In this case, the library will expect to find a ZLIB - /// header, as defined in RFC - /// 1950, in the compressed stream. If you will be reading a DEFLATE or - /// GZIP stream, which does not have such a header, you will want to specify - /// false. - /// - /// - /// whether to expect an RFC1950 header byte pair when reading - /// the stream of data to be inflated. - /// The number of window bits to use. If you need to ask what that is, - /// then you shouldn't be calling this initializer. - /// Z_OK if everything goes well. - public int InitializeInflate(int windowBits, bool expectRfc1950Header) - { - this.WindowBits = windowBits; - if (dstate != null) throw new ZlibException("You may not call InitializeInflate() after calling InitializeDeflate()."); - istate = new InflateManager(expectRfc1950Header); - return istate.Initialize(this, windowBits); - } - - /// - /// Inflate the data in the InputBuffer, placing the result in the OutputBuffer. - /// - /// - /// You must have set InputBuffer and OutputBuffer, NextIn and NextOut, and AvailableBytesIn and - /// AvailableBytesOut before calling this method. - /// - /// - /// - /// private void InflateBuffer() - /// { - /// int bufferSize = 1024; - /// byte[] buffer = new byte[bufferSize]; - /// ZlibCodec decompressor = new ZlibCodec(); - /// - /// Console.WriteLine("\n============================================"); - /// Console.WriteLine("Size of Buffer to Inflate: {0} bytes.", CompressedBytes.Length); - /// MemoryStream ms = new MemoryStream(DecompressedBytes); - /// - /// int rc = decompressor.InitializeInflate(); - /// - /// decompressor.InputBuffer = CompressedBytes; - /// decompressor.NextIn = 0; - /// decompressor.AvailableBytesIn = CompressedBytes.Length; - /// - /// decompressor.OutputBuffer = buffer; - /// - /// // pass 1: inflate - /// do - /// { - /// decompressor.NextOut = 0; - /// decompressor.AvailableBytesOut = buffer.Length; - /// rc = decompressor.Inflate(FlushType.None); - /// - /// if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) - /// throw new Exception("inflating: " + decompressor.Message); - /// - /// ms.Write(decompressor.OutputBuffer, 0, buffer.Length - decompressor.AvailableBytesOut); - /// } - /// while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); - /// - /// // pass 2: finish and flush - /// do - /// { - /// decompressor.NextOut = 0; - /// decompressor.AvailableBytesOut = buffer.Length; - /// rc = decompressor.Inflate(FlushType.Finish); - /// - /// if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) - /// throw new Exception("inflating: " + decompressor.Message); - /// - /// if (buffer.Length - decompressor.AvailableBytesOut > 0) - /// ms.Write(buffer, 0, buffer.Length - decompressor.AvailableBytesOut); - /// } - /// while (decompressor.AvailableBytesIn > 0 || decompressor.AvailableBytesOut == 0); - /// - /// decompressor.EndInflate(); - /// } - /// - /// - /// - /// The flush to use when inflating. - /// Z_OK if everything goes well. - public int Inflate(FlushType flush) - { - if (istate == null) - throw new ZlibException("No Inflate State!"); - return istate.Inflate(flush); - } - - - /// - /// Ends an inflation session. - /// - /// - /// Call this after successively calling Inflate(). This will cause all buffers to be flushed. - /// After calling this you cannot call Inflate() without a intervening call to one of the - /// InitializeInflate() overloads. - /// - /// Z_OK if everything goes well. - public int EndInflate() - { - if (istate == null) - throw new ZlibException("No Inflate State!"); - int ret = istate.End(); - istate = null; - return ret; - } - - /// - /// I don't know what this does! - /// - /// Z_OK if everything goes well. - public int SyncInflate() - { - if (istate == null) - throw new ZlibException("No Inflate State!"); - return istate.Sync(); - } - - /// - /// Initialize the ZlibCodec for deflation operation. - /// - /// - /// The codec will use the MAX window bits and the default level of compression. - /// - /// - /// - /// int bufferSize = 40000; - /// byte[] CompressedBytes = new byte[bufferSize]; - /// byte[] DecompressedBytes = new byte[bufferSize]; - /// - /// ZlibCodec compressor = new ZlibCodec(); - /// - /// compressor.InitializeDeflate(CompressionLevel.Default); - /// - /// compressor.InputBuffer = System.Text.ASCIIEncoding.ASCII.GetBytes(TextToCompress); - /// compressor.NextIn = 0; - /// compressor.AvailableBytesIn = compressor.InputBuffer.Length; - /// - /// compressor.OutputBuffer = CompressedBytes; - /// compressor.NextOut = 0; - /// compressor.AvailableBytesOut = CompressedBytes.Length; - /// - /// while (compressor.TotalBytesIn != TextToCompress.Length && compressor.TotalBytesOut < bufferSize) - /// { - /// compressor.Deflate(FlushType.None); - /// } - /// - /// while (true) - /// { - /// int rc= compressor.Deflate(FlushType.Finish); - /// if (rc == ZlibConstants.Z_STREAM_END) break; - /// } - /// - /// compressor.EndDeflate(); - /// - /// - /// - /// Z_OK if all goes well. You generally don't need to check the return code. - public int InitializeDeflate() - { - return _InternalInitializeDeflate(true); - } - - /// - /// Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel. - /// - /// - /// The codec will use the maximum window bits (15) and the specified - /// CompressionLevel. It will emit a ZLIB stream as it compresses. - /// - /// The compression level for the codec. - /// Z_OK if all goes well. - public int InitializeDeflate(CompressionLevel level) - { - this.CompressLevel = level; - return _InternalInitializeDeflate(true); - } - - - /// - /// Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, - /// and the explicit flag governing whether to emit an RFC1950 header byte pair. - /// - /// - /// The codec will use the maximum window bits (15) and the specified CompressionLevel. - /// If you want to generate a zlib stream, you should specify true for - /// wantRfc1950Header. In this case, the library will emit a ZLIB - /// header, as defined in RFC - /// 1950, in the compressed stream. - /// - /// The compression level for the codec. - /// whether to emit an initial RFC1950 byte pair in the compressed stream. - /// Z_OK if all goes well. - public int InitializeDeflate(CompressionLevel level, bool wantRfc1950Header) - { - this.CompressLevel = level; - return _InternalInitializeDeflate(wantRfc1950Header); - } - - - /// - /// Initialize the ZlibCodec for deflation operation, using the specified CompressionLevel, - /// and the specified number of window bits. - /// - /// - /// The codec will use the specified number of window bits and the specified CompressionLevel. - /// - /// The compression level for the codec. - /// the number of window bits to use. If you don't know what this means, don't use this method. - /// Z_OK if all goes well. - public int InitializeDeflate(CompressionLevel level, int bits) - { - this.CompressLevel = level; - this.WindowBits = bits; - return _InternalInitializeDeflate(true); - } - - /// - /// Initialize the ZlibCodec for deflation operation, using the specified - /// CompressionLevel, the specified number of window bits, and the explicit flag - /// governing whether to emit an RFC1950 header byte pair. - /// - /// - /// The compression level for the codec. - /// whether to emit an initial RFC1950 byte pair in the compressed stream. - /// the number of window bits to use. If you don't know what this means, don't use this method. - /// Z_OK if all goes well. - public int InitializeDeflate(CompressionLevel level, int bits, bool wantRfc1950Header) - { - this.CompressLevel = level; - this.WindowBits = bits; - return _InternalInitializeDeflate(wantRfc1950Header); - } - - private int _InternalInitializeDeflate(bool wantRfc1950Header) - { - if (istate != null) throw new ZlibException("You may not call InitializeDeflate() after calling InitializeInflate()."); - dstate = new DeflateManager(); - dstate.WantRfc1950HeaderBytes = wantRfc1950Header; - - return dstate.Initialize(this, this.CompressLevel, this.WindowBits, this.Strategy); - } - - /// - /// Deflate one batch of data. - /// - /// - /// You must have set InputBuffer and OutputBuffer before calling this method. - /// - /// - /// - /// private void DeflateBuffer(CompressionLevel level) - /// { - /// int bufferSize = 1024; - /// byte[] buffer = new byte[bufferSize]; - /// ZlibCodec compressor = new ZlibCodec(); - /// - /// Console.WriteLine("\n============================================"); - /// Console.WriteLine("Size of Buffer to Deflate: {0} bytes.", UncompressedBytes.Length); - /// MemoryStream ms = new MemoryStream(); - /// - /// int rc = compressor.InitializeDeflate(level); - /// - /// compressor.InputBuffer = UncompressedBytes; - /// compressor.NextIn = 0; - /// compressor.AvailableBytesIn = UncompressedBytes.Length; - /// - /// compressor.OutputBuffer = buffer; - /// - /// // pass 1: deflate - /// do - /// { - /// compressor.NextOut = 0; - /// compressor.AvailableBytesOut = buffer.Length; - /// rc = compressor.Deflate(FlushType.None); - /// - /// if (rc != ZlibConstants.Z_OK && rc != ZlibConstants.Z_STREAM_END) - /// throw new Exception("deflating: " + compressor.Message); - /// - /// ms.Write(compressor.OutputBuffer, 0, buffer.Length - compressor.AvailableBytesOut); - /// } - /// while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); - /// - /// // pass 2: finish and flush - /// do - /// { - /// compressor.NextOut = 0; - /// compressor.AvailableBytesOut = buffer.Length; - /// rc = compressor.Deflate(FlushType.Finish); - /// - /// if (rc != ZlibConstants.Z_STREAM_END && rc != ZlibConstants.Z_OK) - /// throw new Exception("deflating: " + compressor.Message); - /// - /// if (buffer.Length - compressor.AvailableBytesOut > 0) - /// ms.Write(buffer, 0, buffer.Length - compressor.AvailableBytesOut); - /// } - /// while (compressor.AvailableBytesIn > 0 || compressor.AvailableBytesOut == 0); - /// - /// compressor.EndDeflate(); - /// - /// ms.Seek(0, SeekOrigin.Begin); - /// CompressedBytes = new byte[compressor.TotalBytesOut]; - /// ms.Read(CompressedBytes, 0, CompressedBytes.Length); - /// } - /// - /// - /// whether to flush all data as you deflate. Generally you will want to - /// use Z_NO_FLUSH here, in a series of calls to Deflate(), and then call EndDeflate() to - /// flush everything. - /// - /// Z_OK if all goes well. - public int Deflate(FlushType flush) - { - if (dstate == null) - throw new ZlibException("No Deflate State!"); - return dstate.Deflate(flush); - } - - /// - /// End a deflation session. - /// - /// - /// Call this after making a series of one or more calls to Deflate(). All buffers are flushed. - /// - /// Z_OK if all goes well. - public int EndDeflate() - { - if (dstate == null) - throw new ZlibException("No Deflate State!"); - //dinoch Tue, 03 Nov 2009 15:39 (test this) - //int ret = dstate.End(); - dstate = null; - return ZlibConstants.Z_OK; //ret; - } - - /// - /// Reset a codec for another deflation session. - /// - /// - /// Call this to reset the deflation state. For example if a thread is deflating - /// non-consecutive blocks, you can call Reset() after the Deflate(Sync) of the first - /// block and before the next Deflate(None) of the second block. - /// - /// Z_OK if all goes well. - public void ResetDeflate() - { - if (dstate == null) - throw new ZlibException("No Deflate State!"); - dstate.Reset(); - } - - - /// - /// Set the CompressionStrategy and CompressionLevel for a deflation session. - /// - /// the level of compression to use. - /// the strategy to use for compression. - /// Z_OK if all goes well. - public int SetDeflateParams(CompressionLevel level, CompressionStrategy strategy) - { - if (dstate == null) - throw new ZlibException("No Deflate State!"); - return dstate.SetParams(level, strategy); - } - - - /// - /// Set the dictionary to be used for either Inflation or Deflation. - /// - /// The dictionary bytes to use. - /// Z_OK if all goes well. - public int SetDictionary(byte[] dictionary) - { - if (istate != null) - return istate.SetDictionary(dictionary); - - if (dstate != null) - return dstate.SetDictionary(dictionary); - - throw new ZlibException("No Inflate or Deflate state!"); - } - - // Flush as much pending output as possible. All deflate() output goes - // through this function so some applications may wish to modify it - // to avoid allocating a large strm->next_out buffer and copying into it. - // (See also read_buf()). - internal void flush_pending() - { - int len = dstate.pendingCount; - - if (len > AvailableBytesOut) - len = AvailableBytesOut; - if (len == 0) - return; - - if (dstate.pending.Length <= dstate.nextPending || - OutputBuffer.Length <= NextOut || - dstate.pending.Length < (dstate.nextPending + len) || - OutputBuffer.Length < (NextOut + len)) - { - throw new ZlibException(String.Format("Invalid State. (pending.Length={0}, pendingCount={1})", - dstate.pending.Length, dstate.pendingCount)); - } - - Array.Copy(dstate.pending, dstate.nextPending, OutputBuffer, NextOut, len); - - NextOut += len; - dstate.nextPending += len; - TotalBytesOut += len; - AvailableBytesOut -= len; - dstate.pendingCount -= len; - if (dstate.pendingCount == 0) - { - dstate.nextPending = 0; - } - } - - // Read a new buffer from the current input stream, update the adler32 - // and total number of bytes read. All deflate() input goes through - // this function so some applications may wish to modify it to avoid - // allocating a large strm->next_in buffer and copying from it. - // (See also flush_pending()). - internal int read_buf(byte[] buf, int start, int size) - { - int len = AvailableBytesIn; - - if (len > size) - len = size; - if (len == 0) - return 0; - - AvailableBytesIn -= len; - - if (dstate.WantRfc1950HeaderBytes) - { - _Adler32 = Adler.Adler32(_Adler32, InputBuffer, NextIn, len); - } - Array.Copy(InputBuffer, NextIn, buf, start, len); - NextIn += len; - TotalBytesIn += len; - return len; - } - - } -} diff --git a/DebugTools/MinecraftClientProxy/Compression/ZlibConstants.cs b/DebugTools/MinecraftClientProxy/Compression/ZlibConstants.cs deleted file mode 100644 index 6a473afcc1..0000000000 --- a/DebugTools/MinecraftClientProxy/Compression/ZlibConstants.cs +++ /dev/null @@ -1,127 +0,0 @@ -// ZlibConstants.cs -// ------------------------------------------------------------------ -// -// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation. -// All rights reserved. -// -// This code module is part of DotNetZip, a zipfile class library. -// -// ------------------------------------------------------------------ -// -// This code is licensed under the Microsoft Public License. -// See the file License.txt for the license details. -// More info on: http://dotnetzip.codeplex.com -// -// ------------------------------------------------------------------ -// -// last saved (in emacs): -// Time-stamp: <2009-November-03 18:50:19> -// -// ------------------------------------------------------------------ -// -// This module defines constants used by the zlib class library. This -// code is derived from the jzlib implementation of zlib, but -// significantly modified. In keeping with the license for jzlib, the -// copyright to that code is included here. -// -// ------------------------------------------------------------------ -// -// Copyright (c) 2000,2001,2002,2003 ymnk, JCraft,Inc. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// -// 1. Redistributions of source code must retain the above copyright notice, -// this list of conditions and the following disclaimer. -// -// 2. Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in -// the documentation and/or other materials provided with the distribution. -// -// 3. The names of the authors may not be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, -// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND -// FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, -// INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, -// OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, -// EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// ----------------------------------------------------------------------- -// -// This program is based on zlib-1.1.3; credit to authors -// Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) -// and contributors of zlib. -// -// ----------------------------------------------------------------------- - - -using System; - -namespace Ionic.Zlib -{ - /// - /// A bunch of constants used in the Zlib interface. - /// - public static class ZlibConstants - { - /// - /// The maximum number of window bits for the Deflate algorithm. - /// - public const int WindowBitsMax = 15; // 32K LZ77 window - - /// - /// The default number of window bits for the Deflate algorithm. - /// - public const int WindowBitsDefault = WindowBitsMax; - - /// - /// indicates everything is A-OK - /// - public const int Z_OK = 0; - - /// - /// Indicates that the last operation reached the end of the stream. - /// - public const int Z_STREAM_END = 1; - - /// - /// The operation ended in need of a dictionary. - /// - public const int Z_NEED_DICT = 2; - - /// - /// There was an error with the stream - not enough data, not open and readable, etc. - /// - public const int Z_STREAM_ERROR = -2; - - /// - /// There was an error with the data - not enough data, bad data, etc. - /// - public const int Z_DATA_ERROR = -3; - - /// - /// There was an error with the working buffer. - /// - public const int Z_BUF_ERROR = -5; - - /// - /// The size of the working buffer used in the ZlibCodec class. Defaults to 8192 bytes. - /// -#if NETCF - public const int WorkingBufferSizeDefault = 8192; -#else - public const int WorkingBufferSizeDefault = 16384; -#endif - /// - /// The minimum size of the working buffer used in the ZlibCodec class. Currently it is 128 bytes. - /// - public const int WorkingBufferSizeMin = 1024; - } - -} diff --git a/DebugTools/MinecraftClientProxy/Compression/ZlibStream.cs b/DebugTools/MinecraftClientProxy/Compression/ZlibStream.cs deleted file mode 100644 index 4d01f8fd17..0000000000 --- a/DebugTools/MinecraftClientProxy/Compression/ZlibStream.cs +++ /dev/null @@ -1,725 +0,0 @@ -// ZlibStream.cs -// ------------------------------------------------------------------ -// -// Copyright (c) 2009 Dino Chiesa and Microsoft Corporation. -// All rights reserved. -// -// This code module is part of DotNetZip, a zipfile class library. -// -// ------------------------------------------------------------------ -// -// This code is licensed under the Microsoft Public License. -// See the file License.txt for the license details. -// More info on: http://dotnetzip.codeplex.com -// -// ------------------------------------------------------------------ -// -// last saved (in emacs): -// Time-stamp: <2011-July-31 14:53:33> -// -// ------------------------------------------------------------------ -// -// This module defines the ZlibStream class, which is similar in idea to -// the System.IO.Compression.DeflateStream and -// System.IO.Compression.GZipStream classes in the .NET BCL. -// -// ------------------------------------------------------------------ - -using System; -using System.IO; - -namespace Ionic.Zlib -{ - - /// - /// Represents a Zlib stream for compression or decompression. - /// - /// - /// - /// - /// The ZlibStream is a Decorator on a . It adds ZLIB compression or decompression to any - /// stream. - /// - /// - /// Using this stream, applications can compress or decompress data via - /// stream Read() and Write() operations. Either compresssion or - /// decompression can occur through either reading or writing. The compression - /// format used is ZLIB, which is documented in IETF RFC 1950, "ZLIB Compressed - /// Data Format Specification version 3.3". This implementation of ZLIB always uses - /// DEFLATE as the compression method. (see IETF RFC 1951, "DEFLATE - /// Compressed Data Format Specification version 1.3.") - /// - /// - /// The ZLIB format allows for varying compression methods, window sizes, and dictionaries. - /// This implementation always uses the DEFLATE compression method, a preset dictionary, - /// and 15 window bits by default. - /// - /// - /// - /// This class is similar to , except that it adds the - /// RFC1950 header and trailer bytes to a compressed stream when compressing, or expects - /// the RFC1950 header and trailer bytes when decompressing. It is also similar to the - /// . - /// - /// - /// - /// - public class ZlibStream : System.IO.Stream - { - internal ZlibBaseStream _baseStream; - bool _disposed; - - /// - /// Create a ZlibStream using the specified CompressionMode. - /// - /// - /// - /// - /// When mode is CompressionMode.Compress, the ZlibStream - /// will use the default compression level. The "captive" stream will be - /// closed when the ZlibStream is closed. - /// - /// - /// - /// - /// - /// This example uses a ZlibStream to compress a file, and writes the - /// compressed data to another file. - /// - /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - /// { - /// using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) - /// { - /// using (Stream compressor = new ZlibStream(raw, CompressionMode.Compress)) - /// { - /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - /// int n; - /// while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - /// { - /// compressor.Write(buffer, 0, n); - /// } - /// } - /// } - /// } - /// - /// - /// Using input As Stream = File.OpenRead(fileToCompress) - /// Using raw As FileStream = File.Create(fileToCompress & ".zlib") - /// Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress) - /// Dim buffer As Byte() = New Byte(4096) {} - /// Dim n As Integer = -1 - /// Do While (n <> 0) - /// If (n > 0) Then - /// compressor.Write(buffer, 0, n) - /// End If - /// n = input.Read(buffer, 0, buffer.Length) - /// Loop - /// End Using - /// End Using - /// End Using - /// - /// - /// - /// The stream which will be read or written. - /// Indicates whether the ZlibStream will compress or decompress. - public ZlibStream(System.IO.Stream stream, CompressionMode mode) - : this(stream, mode, CompressionLevel.Default, false) - { - } - - /// - /// Create a ZlibStream using the specified CompressionMode and - /// the specified CompressionLevel. - /// - /// - /// - /// - /// - /// When mode is CompressionMode.Decompress, the level parameter is ignored. - /// The "captive" stream will be closed when the ZlibStream is closed. - /// - /// - /// - /// - /// - /// This example uses a ZlibStream to compress data from a file, and writes the - /// compressed data to another file. - /// - /// - /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - /// { - /// using (var raw = System.IO.File.Create(fileToCompress + ".zlib")) - /// { - /// using (Stream compressor = new ZlibStream(raw, - /// CompressionMode.Compress, - /// CompressionLevel.BestCompression)) - /// { - /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - /// int n; - /// while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - /// { - /// compressor.Write(buffer, 0, n); - /// } - /// } - /// } - /// } - /// - /// - /// - /// Using input As Stream = File.OpenRead(fileToCompress) - /// Using raw As FileStream = File.Create(fileToCompress & ".zlib") - /// Using compressor As Stream = New ZlibStream(raw, CompressionMode.Compress, CompressionLevel.BestCompression) - /// Dim buffer As Byte() = New Byte(4096) {} - /// Dim n As Integer = -1 - /// Do While (n <> 0) - /// If (n > 0) Then - /// compressor.Write(buffer, 0, n) - /// End If - /// n = input.Read(buffer, 0, buffer.Length) - /// Loop - /// End Using - /// End Using - /// End Using - /// - /// - /// - /// The stream to be read or written while deflating or inflating. - /// Indicates whether the ZlibStream will compress or decompress. - /// A tuning knob to trade speed for effectiveness. - public ZlibStream(System.IO.Stream stream, CompressionMode mode, CompressionLevel level) - : this(stream, mode, level, false) - { - } - - /// - /// Create a ZlibStream using the specified CompressionMode, and - /// explicitly specify whether the captive stream should be left open after - /// Deflation or Inflation. - /// - /// - /// - /// - /// - /// When mode is CompressionMode.Compress, the ZlibStream will use - /// the default compression level. - /// - /// - /// - /// This constructor allows the application to request that the captive stream - /// remain open after the deflation or inflation occurs. By default, after - /// Close() is called on the stream, the captive stream is also - /// closed. In some cases this is not desired, for example if the stream is a - /// that will be re-read after - /// compression. Specify true for the parameter to leave the stream - /// open. - /// - /// - /// - /// See the other overloads of this constructor for example code. - /// - /// - /// - /// - /// The stream which will be read or written. This is called the - /// "captive" stream in other places in this documentation. - /// Indicates whether the ZlibStream will compress or decompress. - /// true if the application would like the stream to remain - /// open after inflation/deflation. - public ZlibStream(System.IO.Stream stream, CompressionMode mode, bool leaveOpen) - : this(stream, mode, CompressionLevel.Default, leaveOpen) - { - } - - /// - /// Create a ZlibStream using the specified CompressionMode - /// and the specified CompressionLevel, and explicitly specify - /// whether the stream should be left open after Deflation or Inflation. - /// - /// - /// - /// - /// - /// This constructor allows the application to request that the captive - /// stream remain open after the deflation or inflation occurs. By - /// default, after Close() is called on the stream, the captive - /// stream is also closed. In some cases this is not desired, for example - /// if the stream is a that will be - /// re-read after compression. Specify true for the parameter to leave the stream open. - /// - /// - /// - /// When mode is CompressionMode.Decompress, the level parameter is - /// ignored. - /// - /// - /// - /// - /// - /// - /// This example shows how to use a ZlibStream to compress the data from a file, - /// and store the result into another file. The filestream remains open to allow - /// additional data to be written to it. - /// - /// - /// using (var output = System.IO.File.Create(fileToCompress + ".zlib")) - /// { - /// using (System.IO.Stream input = System.IO.File.OpenRead(fileToCompress)) - /// { - /// using (Stream compressor = new ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, true)) - /// { - /// byte[] buffer = new byte[WORKING_BUFFER_SIZE]; - /// int n; - /// while ((n= input.Read(buffer, 0, buffer.Length)) != 0) - /// { - /// compressor.Write(buffer, 0, n); - /// } - /// } - /// } - /// // can write additional data to the output stream here - /// } - /// - /// - /// Using output As FileStream = File.Create(fileToCompress & ".zlib") - /// Using input As Stream = File.OpenRead(fileToCompress) - /// Using compressor As Stream = New ZlibStream(output, CompressionMode.Compress, CompressionLevel.BestCompression, True) - /// Dim buffer As Byte() = New Byte(4096) {} - /// Dim n As Integer = -1 - /// Do While (n <> 0) - /// If (n > 0) Then - /// compressor.Write(buffer, 0, n) - /// End If - /// n = input.Read(buffer, 0, buffer.Length) - /// Loop - /// End Using - /// End Using - /// ' can write additional data to the output stream here. - /// End Using - /// - /// - /// - /// The stream which will be read or written. - /// - /// Indicates whether the ZlibStream will compress or decompress. - /// - /// - /// true if the application would like the stream to remain open after - /// inflation/deflation. - /// - /// - /// - /// A tuning knob to trade speed for effectiveness. This parameter is - /// effective only when mode is CompressionMode.Compress. - /// - public ZlibStream(System.IO.Stream stream, CompressionMode mode, CompressionLevel level, bool leaveOpen) - { - _baseStream = new ZlibBaseStream(stream, mode, level, ZlibStreamFlavor.ZLIB, leaveOpen); - } - - #region Zlib properties - - /// - /// This property sets the flush behavior on the stream. - /// Sorry, though, not sure exactly how to describe all the various settings. - /// - virtual public FlushType FlushMode - { - get { return (this._baseStream._flushMode); } - set - { - if (_disposed) throw new ObjectDisposedException("ZlibStream"); - this._baseStream._flushMode = value; - } - } - - /// - /// The size of the working buffer for the compression codec. - /// - /// - /// - /// - /// The working buffer is used for all stream operations. The default size is - /// 1024 bytes. The minimum size is 128 bytes. You may get better performance - /// with a larger buffer. Then again, you might not. You would have to test - /// it. - /// - /// - /// - /// Set this before the first call to Read() or Write() on the - /// stream. If you try to set it afterwards, it will throw. - /// - /// - public int BufferSize - { - get - { - return this._baseStream._bufferSize; - } - set - { - if (_disposed) throw new ObjectDisposedException("ZlibStream"); - if (this._baseStream._workingBuffer != null) - throw new ZlibException("The working buffer is already set."); - if (value < ZlibConstants.WorkingBufferSizeMin) - throw new ZlibException(String.Format("Don't be silly. {0} bytes?? Use a bigger buffer, at least {1}.", value, ZlibConstants.WorkingBufferSizeMin)); - this._baseStream._bufferSize = value; - } - } - - /// Returns the total number of bytes input so far. - virtual public long TotalIn - { - get { return this._baseStream._z.TotalBytesIn; } - } - - /// Returns the total number of bytes output so far. - virtual public long TotalOut - { - get { return this._baseStream._z.TotalBytesOut; } - } - - #endregion - - #region System.IO.Stream methods - - /// - /// Dispose the stream. - /// - /// - /// - /// This may or may not result in a Close() call on the captive - /// stream. See the constructors that have a leaveOpen parameter - /// for more information. - /// - /// - /// This method may be invoked in two distinct scenarios. If disposing - /// == true, the method has been called directly or indirectly by a - /// user's code, for example via the public Dispose() method. In this - /// case, both managed and unmanaged resources can be referenced and - /// disposed. If disposing == false, the method has been called by the - /// runtime from inside the object finalizer and this method should not - /// reference other objects; in that case only unmanaged resources must - /// be referenced or disposed. - /// - /// - /// - /// indicates whether the Dispose method was invoked by user code. - /// - protected override void Dispose(bool disposing) - { - try - { - if (!_disposed) - { - if (disposing && (this._baseStream != null)) - this._baseStream.Close(); - _disposed = true; - } - } - finally - { - base.Dispose(disposing); - } - } - - - /// - /// Indicates whether the stream can be read. - /// - /// - /// The return value depends on whether the captive stream supports reading. - /// - public override bool CanRead - { - get - { - if (_disposed) throw new ObjectDisposedException("ZlibStream"); - return _baseStream._stream.CanRead; - } - } - - /// - /// Indicates whether the stream supports Seek operations. - /// - /// - /// Always returns false. - /// - public override bool CanSeek - { - get { return false; } - } - - /// - /// Indicates whether the stream can be written. - /// - /// - /// The return value depends on whether the captive stream supports writing. - /// - public override bool CanWrite - { - get - { - if (_disposed) throw new ObjectDisposedException("ZlibStream"); - return _baseStream._stream.CanWrite; - } - } - - /// - /// Flush the stream. - /// - public override void Flush() - { - if (_disposed) throw new ObjectDisposedException("ZlibStream"); - _baseStream.Flush(); - } - - /// - /// Reading this property always throws a . - /// - public override long Length - { - get { throw new NotSupportedException(); } - } - - /// - /// The position of the stream pointer. - /// - /// - /// - /// Setting this property always throws a . Reading will return the total bytes - /// written out, if used in writing, or the total bytes read in, if used in - /// reading. The count may refer to compressed bytes or uncompressed bytes, - /// depending on how you've used the stream. - /// - public override long Position - { - get - { - if (this._baseStream._streamMode == Ionic.Zlib.ZlibBaseStream.StreamMode.Writer) - return this._baseStream._z.TotalBytesOut; - if (this._baseStream._streamMode == Ionic.Zlib.ZlibBaseStream.StreamMode.Reader) - return this._baseStream._z.TotalBytesIn; - return 0; - } - - set { throw new NotSupportedException(); } - } - - /// - /// Read data from the stream. - /// - /// - /// - /// - /// - /// If you wish to use the ZlibStream to compress data while reading, - /// you can create a ZlibStream with CompressionMode.Compress, - /// providing an uncompressed data stream. Then call Read() on that - /// ZlibStream, and the data read will be compressed. If you wish to - /// use the ZlibStream to decompress data while reading, you can create - /// a ZlibStream with CompressionMode.Decompress, providing a - /// readable compressed data stream. Then call Read() on that - /// ZlibStream, and the data will be decompressed as it is read. - /// - /// - /// - /// A ZlibStream can be used for Read() or Write(), but - /// not both. - /// - /// - /// - /// - /// - /// The buffer into which the read data should be placed. - /// - /// - /// the offset within that data array to put the first byte read. - /// - /// the number of bytes to read. - /// - /// the number of bytes read - public override int Read(byte[] buffer, int offset, int count) - { - if (_disposed) throw new ObjectDisposedException("ZlibStream"); - return _baseStream.Read(buffer, offset, count); - } - - /// - /// Calling this method always throws a . - /// - /// - /// The offset to seek to.... - /// IF THIS METHOD ACTUALLY DID ANYTHING. - /// - /// - /// The reference specifying how to apply the offset.... IF - /// THIS METHOD ACTUALLY DID ANYTHING. - /// - /// - /// nothing. This method always throws. - public override long Seek(long offset, System.IO.SeekOrigin origin) - { - throw new NotSupportedException(); - } - - /// - /// Calling this method always throws a . - /// - /// - /// The new value for the stream length.... IF - /// THIS METHOD ACTUALLY DID ANYTHING. - /// - public override void SetLength(long value) - { - throw new NotSupportedException(); - } - - /// - /// Write data to the stream. - /// - /// - /// - /// - /// - /// If you wish to use the ZlibStream to compress data while writing, - /// you can create a ZlibStream with CompressionMode.Compress, - /// and a writable output stream. Then call Write() on that - /// ZlibStream, providing uncompressed data as input. The data sent to - /// the output stream will be the compressed form of the data written. If you - /// wish to use the ZlibStream to decompress data while writing, you - /// can create a ZlibStream with CompressionMode.Decompress, and a - /// writable output stream. Then call Write() on that stream, - /// providing previously compressed data. The data sent to the output stream - /// will be the decompressed form of the data written. - /// - /// - /// - /// A ZlibStream can be used for Read() or Write(), but not both. - /// - /// - /// The buffer holding data to write to the stream. - /// the offset within that data array to find the first byte to write. - /// the number of bytes to write. - public override void Write(byte[] buffer, int offset, int count) - { - if (_disposed) throw new ObjectDisposedException("ZlibStream"); - _baseStream.Write(buffer, offset, count); - } - #endregion - - - /// - /// Compress a string into a byte array using ZLIB. - /// - /// - /// - /// Uncompress it with . - /// - /// - /// - /// - /// - /// - /// - /// A string to compress. The string will first be encoded - /// using UTF8, then compressed. - /// - /// - /// The string in compressed form - public static byte[] CompressString(String s) - { - using (var ms = new MemoryStream()) - { - Stream compressor = - new ZlibStream(ms, CompressionMode.Compress, CompressionLevel.BestCompression); - ZlibBaseStream.CompressString(s, compressor); - return ms.ToArray(); - } - } - - - /// - /// Compress a byte array into a new byte array using ZLIB. - /// - /// - /// - /// Uncompress it with . - /// - /// - /// - /// - /// - /// - /// A buffer to compress. - /// - /// - /// The data in compressed form - public static byte[] CompressBuffer(byte[] b) - { - using (var ms = new MemoryStream()) - { - Stream compressor = - new ZlibStream( ms, CompressionMode.Compress, CompressionLevel.BestCompression ); - - ZlibBaseStream.CompressBuffer(b, compressor); - return ms.ToArray(); - } - } - - - /// - /// Uncompress a ZLIB-compressed byte array into a single string. - /// - /// - /// - /// - /// - /// - /// A buffer containing ZLIB-compressed data. - /// - /// - /// The uncompressed string - public static String UncompressString(byte[] compressed) - { - using (var input = new MemoryStream(compressed)) - { - Stream decompressor = - new ZlibStream(input, CompressionMode.Decompress); - - return ZlibBaseStream.UncompressString(compressed, decompressor); - } - } - - - /// - /// Uncompress a ZLIB-compressed byte array into a byte array. - /// - /// - /// - /// - /// - /// - /// A buffer containing ZLIB-compressed data. - /// - /// - /// The data in uncompressed form - public static byte[] UncompressBuffer(byte[] compressed) - { - using (var input = new MemoryStream(compressed)) - { - Stream decompressor = - new ZlibStream( input, CompressionMode.Decompress ); - - return ZlibBaseStream.UncompressBuffer(compressed, decompressor); - } - } - - } - - -} diff --git a/DebugTools/MinecraftClientProxy/MinecraftClientProxy.csproj b/DebugTools/MinecraftClientProxy/MinecraftClientProxy.csproj deleted file mode 100644 index 7a820e4e68..0000000000 --- a/DebugTools/MinecraftClientProxy/MinecraftClientProxy.csproj +++ /dev/null @@ -1,70 +0,0 @@ - - - - Debug - x86 - 8.0.30703 - 2.0 - {025E4E4C-F38B-46F6-8492-61B732018B1E} - Exe - Properties - MinecraftClientProxy - MinecraftClientProxy - v4.0 - Client - 512 - - - x86 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - x86 - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/DebugTools/MinecraftClientProxy/PacketProxy.cs b/DebugTools/MinecraftClientProxy/PacketProxy.cs deleted file mode 100644 index fb09890437..0000000000 --- a/DebugTools/MinecraftClientProxy/PacketProxy.cs +++ /dev/null @@ -1,309 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Net.Sockets; -using System.Threading; - -namespace MinecraftClient.Protocol.Handlers -{ - class PacketProxy - { - private int compression_treshold = 0; - private bool handshake_phase = true; - private bool login_phase = true; - TcpClient client; - TcpClient server; - - public PacketProxy(TcpClient client, TcpClient server) - { - this.client = client; - this.server = server; - } - - public void Run() - { - Thread t = new Thread(() => - { - try - { - do { Thread.Sleep(100); } - while (Update(true)); - } - catch (System.IO.IOException) { } - catch (SocketException) { } - catch (ObjectDisposedException) { } - }); - t.Name = "UpdaterServer"; - t.Start(); - - t = new Thread(() => - { - try - { - do { Thread.Sleep(100); } - while (Update(false)); - } - catch (System.IO.IOException) { } - catch (SocketException) { } - catch (ObjectDisposedException) { } - }); - t.Name = "UpdaterClient"; - t.Start(); - } - - private bool Update(bool server) - { - TcpClient c = server ? this.server : this.client; - if (c.Client == null || !c.Connected) { return false; } - try - { - while (c.Client.Available > 0) - { - int packetID = 0; - byte[] packetData = new byte[] { }; - byte[] packetRawData = new byte[] { }; - readNextPacket(c, ref packetID, ref packetData, ref packetRawData); - handlePacket(packetID, (byte[])packetData.Clone(), server); - (server ? this.client : this.server).Client.Send(packetRawData); - } - } - catch (SocketException) { return false; } - return true; - } - - private void readNextPacket(TcpClient c, ref int packetID, ref byte[] packetData, ref byte[] packetRawData) - { - int size = readNextVarIntRAW(c); - packetData = readDataRAW(c, size); - packetRawData = concatBytes(getVarInt(size), packetData); - - if (compression_treshold > 0) - { - int size_uncompressed = readNextVarInt(ref packetData); - if (size_uncompressed != 0) - packetData = ZlibUtils.Decompress(packetData, size_uncompressed); - } - - packetID = readNextVarInt(ref packetData); - } - - private void handlePacket(int packetID, byte[] packetData, bool server) - { - //Console.WriteLine((server ? "[S -> C] 0x" : "[C -> S] 0x") + packetID.ToString("x2")); - if (login_phase) - { - if (server) - { - switch (packetID) - { - case 0x00: - Console.WriteLine("[S -> C] Login rejected"); - break; - case 0x01: - Console.WriteLine("[S -> C] Encryption request"); - Console.WriteLine(@"[WARNING] ENCRYPTION IS NOT SUPPORTED BY PROXY !!"); - break; - case 0x02: - login_phase = false; - Console.WriteLine("[S -> C] Login successfull"); - break; - case 0x03: - compression_treshold = readNextVarInt(ref packetData); - Console.WriteLine("[S -> C] Compression Treshold: " + compression_treshold); - break; - } - } - else - { - switch (packetID) - { - case 0x00: - Console.WriteLine("[C -> S] " + (handshake_phase ? "Handshake" : "Login request")); - handshake_phase = false; - break; - } - } - } - else - { - if (!server) - { - double x, y, z; - bool g; - switch (packetID) - { - //Do debug work here - case 0x0C: - x = readNextDouble(ref packetData); - y = readNextDouble(ref packetData); - z = readNextDouble(ref packetData); - g = readNextBool(ref packetData); - Console.WriteLine("[C -> S] Location: " + x + ", " + y + ", " + z + ", " + g); - break; - case 0x0D: - x = readNextDouble(ref packetData); - y = readNextDouble(ref packetData); - z = readNextDouble(ref packetData); - readNextDouble(ref packetData); //skip 2 floats: look yaw & pitch - g = readNextBool(ref packetData); - Console.WriteLine("[C -> S] Location: " + x + ", " + y + ", " + z + ", (look)" + ", " + g); - break; - case 0x09: - byte window = readNextByte(ref packetData); - short slot = readNextShort(ref packetData); - byte button = readNextByte(ref packetData); - short action = readNextShort(ref packetData); - int mode = readNextVarInt(ref packetData); - bool slotPresent = readNextBool(ref packetData); - int itemId = -1; - byte itemCount = 0; - if (slotPresent) - { - itemId = readNextVarInt(ref packetData); - itemCount = readNextByte(ref packetData); - } - Console.WriteLine("[C -> S] Window #" + window + " click: #" + slot + " button " + button + " action " + action + " mode " + mode + " item " + itemId + " x" + itemCount); - break; - } - } - } - } - - public void Dispose() - { - try - { - client.Close(); - server.Close(); - } - catch { } - } - - private byte[] readDataRAW(TcpClient c, int offset) - { - if (offset > 0) - { - try - { - byte[] cache = new byte[offset]; - Receive(c, cache, 0, offset, SocketFlags.None); - return cache; - } - catch (OutOfMemoryException) { } - } - return new byte[] { }; - } - - private byte[] readData(int offset, ref byte[] cache) - { - List read = new List(); - List list = new List(cache); - while (offset > 0 && list.Count > 0) - { - read.Add(list[0]); - list.RemoveAt(0); - offset--; - } - cache = list.ToArray(); - return read.ToArray(); - } - - private string readNextString(ref byte[] cache) - { - int length = readNextVarInt(ref cache); - if (length > 0) - { - return Encoding.UTF8.GetString(readData(length, ref cache)); - } - else return ""; - } - - private bool readNextBool(ref byte[] cache) - { - byte[] rawValue = readData(1, ref cache); - return rawValue[0] != 0; - } - - private byte readNextByte(ref byte[] cache) - { - byte[] rawValue = readData(1, ref cache); - return rawValue[0]; - } - - private short readNextShort(ref byte[] cache) - { - byte[] rawValue = readData(2, ref cache); - Array.Reverse(rawValue); //Endianness - return BitConverter.ToInt16(rawValue, 0); - } - - private double readNextDouble(ref byte[] cache) - { - byte[] rawValue = readData(8, ref cache); - Array.Reverse(rawValue); //Endianness - return BitConverter.ToDouble(rawValue, 0); - } - - private int readNextVarIntRAW(TcpClient c) - { - int i = 0; - int j = 0; - int k = 0; - byte[] tmp = new byte[1]; - while (true) - { - Receive(c, tmp, 0, 1, SocketFlags.None); - k = tmp[0]; - i |= (k & 0x7F) << j++ * 7; - if (j > 5) throw new OverflowException("VarInt too big"); - if ((k & 0x80) != 128) break; - } - return i; - } - - private int readNextVarInt(ref byte[] cache) - { - int i = 0; - int j = 0; - int k = 0; - byte[] tmp = new byte[1]; - while (true) - { - tmp = readData(1, ref cache); - k = tmp[0]; - i |= (k & 0x7F) << j++ * 7; - if (j > 5) throw new OverflowException("VarInt too big"); - if ((k & 0x80) != 128) break; - } - return i; - } - - private static byte[] getVarInt(int paramInt) - { - List bytes = new List(); - while ((paramInt & -128) != 0) - { - bytes.Add((byte)(paramInt & 127 | 128)); - paramInt = (int)(((uint)paramInt) >> 7); - } - bytes.Add((byte)paramInt); - return bytes.ToArray(); - } - - private static byte[] concatBytes(params byte[][] bytes) - { - List result = new List(); - foreach (byte[] array in bytes) - result.AddRange(array); - return result.ToArray(); - } - - private void Receive(TcpClient c, byte[] buffer, int start, int offset, SocketFlags f) - { - int read = 0; - while (read < offset) - read += c.Client.Receive(buffer, start + read, offset - read, f); - } - } -} diff --git a/DebugTools/MinecraftClientProxy/Program.cs b/DebugTools/MinecraftClientProxy/Program.cs deleted file mode 100644 index e9cb23672e..0000000000 --- a/DebugTools/MinecraftClientProxy/Program.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Net.Sockets; -using System.Net; -using MinecraftClient.Protocol.Handlers; - -namespace MinecraftClientProxy -{ - class Program - { - static void Main(string[] args) - { - Console.WriteLine("Waiting for client on port 25565..."); - TcpListener listener = new TcpListener(IPAddress.Any, 25565); - listener.Start(); - TcpClient client = listener.AcceptTcpClient(); - - Console.WriteLine("Connecting to server on port 25566..."); - TcpClient server = new TcpClient("localhost", 25566); - - Console.WriteLine("Starting proxy...\n"); - new PacketProxy(client, server).Run(); - - Console.ReadLine(); - } - } -} diff --git a/DebugTools/MinecraftClientProxy/Properties/AssemblyInfo.cs b/DebugTools/MinecraftClientProxy/Properties/AssemblyInfo.cs deleted file mode 100644 index 4acf90ae2a..0000000000 --- a/DebugTools/MinecraftClientProxy/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MinecraftClientProxy")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("MinecraftClientProxy")] -[assembly: AssemblyCopyright("Copyright © 2015-2016 ORelio")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("0a3e2a48-94e9-4b02-96dd-5884585c561e")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/DebugTools/MinecraftClientProxy/ZlibUtils.cs b/DebugTools/MinecraftClientProxy/ZlibUtils.cs deleted file mode 100644 index 915aa2d29f..0000000000 --- a/DebugTools/MinecraftClientProxy/ZlibUtils.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Ionic.Zlib; - -namespace MinecraftClient.Protocol.Handlers -{ - /// - /// Quick Zlib compression handling for network packet compression. - /// Note: Underlying compression handling is taken from the DotNetZip Library. - /// This library is open source and provided under the Microsoft Public License. - /// More info about DotNetZip at dotnetzip.codeplex.com. - /// - - public static class ZlibUtils - { - /// - /// Decompress a byte array into another byte array of the specified size - /// - /// Data to decompress - /// Size of the data once decompressed - /// Decompressed data as a byte array - - public static byte[] Decompress(byte[] to_decompress, int size_uncompressed) - { - ZlibStream stream = new ZlibStream(new System.IO.MemoryStream(to_decompress, false), CompressionMode.Decompress); - byte[] packetData_decompressed = new byte[size_uncompressed]; - stream.Read(packetData_decompressed, 0, size_uncompressed); - stream.Close(); - return packetData_decompressed; - } - } -} diff --git a/DebugTools/README.txt b/DebugTools/README.txt deleted file mode 100644 index 7acbc0fae6..0000000000 --- a/DebugTools/README.txt +++ /dev/null @@ -1,6 +0,0 @@ -This part of the repository contains tools that may be useful for debugging - -MinecraftClientProxy - A proxy between a MCC/Vanilla client and an offline-mode server which can intercept packets - Useful to dump packets sent by a Vanilla minecraft client and compare them with packets from MCC - Example of use case: https://github.com/MCCTeam/Minecraft-Console-Client/issues/195 diff --git a/Directory.Build.props b/Directory.Build.props index 41d207620d..0ebaff3199 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -1,5 +1,6 @@ + MIT $(DefaultItemExcludes);**/bin/**;**/obj/** diff --git a/Docker/Dockerfile b/Docker/Dockerfile deleted file mode 100644 index 3e42aed8ff..0000000000 --- a/Docker/Dockerfile +++ /dev/null @@ -1,20 +0,0 @@ -# Using the .NET official image for .NET 6.0 -FROM mcr.microsoft.com/dotnet/sdk:6.0 - -# If you want to use a specific build, un-comment the ENV MCC_VERSION line (remove the # from the start) -# Then replace the with a version of your choice (Example: MCC_VERSION=20220817-29) -#ENV MCC_VERSION= - -# IF you want to use a specific platform then specific the ENV MCC_PLATFORM -# For example to use arm set the environment variable: MCC_PLATFORM=linux-arm64 -# `docker run -e MCC_PLATFORM=linux-arm64 -it localhost/minecraft-console-client` - -# Copy over the script and give it execution permissions -COPY start-latest.sh /opt/start-latest.sh -RUN chmod +x /opt/start-latest.sh - -RUN apt-get update && \ - apt-get install -y unzip && \ - mkdir /opt/data - -ENTRYPOINT ["/bin/sh", "-c", "/opt/start-latest.sh"] diff --git a/Docker/docker-compose.yml b/Docker/docker-compose.yml deleted file mode 100644 index 2bc25fac27..0000000000 --- a/Docker/docker-compose.yml +++ /dev/null @@ -1,9 +0,0 @@ -version: '2' - -services: - MCC: - image: 'minecraft-console-client:latest' - container_name: 'MinecraftConsoleClient' - # You could also comment out the volumes section if you don't want to mount the volume. That is up to you. If you do so it's harder to edit the .ini file if thats something you want to do. - volumes: - - './data:/opt/data' diff --git a/Docker/start-latest.sh b/Docker/start-latest.sh deleted file mode 100644 index 01cc5847ed..0000000000 --- a/Docker/start-latest.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh - -cd /opt/data || exit 1 - -echo "platform is ${MCC_PLATFORM}" - -if [ -e "./MinecraftClient" -a -n "$MCC_SKIP_REDOWNLOAD" ]; then - echo "Skip re-download MinecraftClient" -else - # Use the provided version tag or get the latest release tag - RELEASE_TAG=${MCC_VERSION:-$(curl -s -v https://github.com/MCCTeam/Minecraft-Console-Client/releases/latest 2>&1 | grep -i location: | tr -d '\r' | cut -d/ -f8)} - - # Taken from https://stackoverflow.com/a/70369688 - ARCH=$(arch | sed s/aarch64/arm64/ | sed s/x86_64/x64/) - - # Delete the old build - [ -e MinecraftClient ] && rm -- MinecraftClient - - echo "Donwloading MinecraftClient for ${RELEASE_TAG}-${ARCH}" - - # Download the specified build or the latest one - curl -L https://github.com/MCCTeam/Minecraft-Console-Client/releases/download/${RELEASE_TAG}/MinecraftClient-${RELEASE_TAG}-${MCC_PLATFORM:=linux}-${ARCH} --output MinecraftClient -fi - -# Set Executable -chmod +x ./MinecraftClient - -# Start the Client -./MinecraftClient diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..530040bce5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,15 @@ +# syntax=docker/dockerfile:1 +FROM mcr.microsoft.com/dotnet/sdk:10.0.401 AS build +WORKDIR /src +COPY . . +RUN test -f ConsoleInteractive/ConsoleInteractive/ConsoleInteractive/ConsoleInteractive.csproj +RUN dotnet publish src/Mcc.Cli/Mcc.Cli.csproj -c Release -o /out --self-contained false -p:PublishSingleFile=false -p:UseAppHost=false -p:ShouldUnsetParentConfigurationAndPlatform=false + +FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS runtime +WORKDIR /data +COPY --from=build /out /app +RUN mkdir -p /data/configurations /data/plugins /data/scripts && chown -R app:app /data +USER app +ENV MCC_PLUGINS=/data/plugins +ENTRYPOINT ["dotnet", "/app/Mcc.Cli.dll"] +CMD ["--configurations", "/data/configurations", "--console.General.ConsoleMode=classic"] diff --git a/LICENSE.md b/LICENSE.md index 417fbcbe92..7f2bd277d7 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,74 +1,21 @@ -# COMMON DEVELOPMENT AND DISTRIBUTION LICENSE (CDDL) Version 1.0 - -## 1. Definitions. - -* **1.1. Contributor** means each individual or entity that creates or contributes to the creation of Modifications. -* **1.2. Contributor Version** means the combination of the Original Software, prior Modifications used by a Contributor (if any), and the Modifications made by that particular Contributor. -* **1.3. Covered Software** means (a) the Original Software, or (b) Modifications, or (c) the combination of files containing Original Software with files containing Modifications, in each case including portions thereof. -* **1.4. Executable** means the Covered Software in any form other than Source Code. -* **1.5. Initial Developer** means the individual or entity that first makes Original Software available under this License. -* **1.6. Larger Work** means a work which combines Covered Software or portions thereof with code not governed by the terms of this License. -* **1.7. License** means this document. -* **1.8. Licensable** means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. -* **1.9. Modifications** means the Source Code and Executable form of any of the following: - * **A.** Any file that results from an addition to, deletion from or modification of the contents of a file containing Original Software or previous Modifications; - * **B.** Any new file that contains any part of the Original Software or previous Modification; or - * **C.** Any new file that is contributed or otherwise made available under the terms of this License. -* **1.10. Original Software** means the Source Code and Executable form of computer software code that is originally released under this License. -* **1.11. Patent Claims** means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. -* **1.12. Source Code** means (a) the common form of computer software code in which modifications are made and (b) associated documentation included in or with such code. -* **1.13. You (or Your)** means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, You includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, control means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. - -## 2. License Grants. - -* **2.1. The Initial Developer Grant.** Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, the Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license: - * **(a)** under intellectual property rights (other than patent or trademark) Licensable by Initial Developer, to use, reproduce, modify, display, perform, sublicense and distribute the Original Software (or portions thereof), with or without Modifications, and/or as part of a Larger Work; and - * **(b)** under Patent Claims infringed by the making, using or selling of Original Software, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Software (or portions thereof). - * **(c)** The licenses granted in Sections 2.1(a) and (b) are effective on the date Initial Developer first distributes or otherwise makes the Original Software available to a third party under the terms of this License. - * **(d)** Notwithstanding Section 2.1(b) above, no patent license is granted: (1) for code that You delete from the Original Software, or (2) for infringements caused by: (i) the modification of the Original Software, or (ii) the combination of the Original Software with other software or devices. - -* **2.2. Contributor Grant.** Conditioned upon Your compliance with Section 3.1 below and subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license: - * **(a)** under intellectual property rights (other than patent or trademark) Licensable by Contributor to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof), either on an unmodified basis, with other Modifications, as Covered Software and/or as part of a Larger Work; and - * **(b)** under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: (1) Modifications made by that Contributor (or portions thereof); and (2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). - * **(c)** The licenses granted in Sections 2.2(a) and 2.2(b) are effective on the date Contributor first distributes or otherwise makes the Modifications available to a third party. - * **(d)** Notwithstanding Section 2.2(b) above, no patent license is granted: (1) for any code that Contributor has deleted from the Contributor Version; (2) for infringements caused by: (i) third party modifications of Contributor Version, or (ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or (3) under Patent Claims infringed by Covered Software in the absence of Modifications made by that Contributor. - -## 3. Distribution Obligations. - -* **3.1. Availability of Source Code.** Any Covered Software that You distribute or otherwise make available in Executable form must also be made available in Source Code form and that Source Code form must be distributed only under the terms of this License. You must include a copy of this License with every copy of the Source Code form of the Covered Software You distribute or otherwise make available. You must inform recipients of any such Covered Software in Executable form as to how they can obtain such Covered Software in Source Code form in a reasonable manner on or through a medium customarily used for software exchange. -* **3.2. Modifications.** The Modifications that You create or to which You contribute are governed by the terms of this License. You represent that You believe Your Modifications are Your original creation(s) and/or You have sufficient rights to grant the rights conveyed by this License. -* **3.3. Required Notices.** You must include a notice in each of Your Modifications that identifies You as the Contributor of the Modification. You may not remove or alter any copyright, patent or trademark notices contained within the Covered Software, or any notices of licensing or any descriptive text giving attribution to any Contributor or the Initial Developer. -* **3.4. Application of Additional Terms.** You may not offer or impose any terms on any Covered Software in Source Code form that alters or restricts the applicable version of this License or the recipients rights hereunder. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Software. However, you may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear that any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. -* **3.5. Distribution of Executable Versions.** You may distribute the Executable form of the Covered Software under the terms of this License or under the terms of a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable form does not attempt to limit or alter the recipients rights in the Source Code form from the rights set forth in this License. If You distribute the Covered Software in Executable form under a different license, You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. -* **3.6. Larger Works.** You may create a Larger Work by combining Covered Software with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Software. - -## 4. Versions of the License. - -* **4.1. New Versions.** Sun Microsystems, Inc. is the initial license steward and may publish revised and/or new versions of this License from time to time. Each version will be given a distinguishing version number. Except as provided in Section 4.3, no one other than the license steward has the right to modify this License. -* **4.2. Effect of New Versions.** You may always continue to use, distribute or otherwise make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. If the Initial Developer includes a notice in the Original Software prohibiting it from being distributed or otherwise made available under any subsequent version of the License, You must distribute and make the Covered Software available under the terms of the version of the License under which You originally received the Covered Software. Otherwise, You may also choose to use, distribute or otherwise make the Covered Software available under the terms of any subsequent version of the License published by the license steward. -* **4.3. Modified Versions.** When You are an Initial Developer and You want to create a new license for Your Original Software, You may create and use a modified version of this License if You: (a) rename the license and remove any references to the name of the license steward (except to note that the license differs from this License); and (b) otherwise make it clear that the license contains terms which differ from this License. - -## 5. DISCLAIMER OF WARRANTY. - -COVERED SOFTWARE IS PROVIDED UNDER THIS LICENSE ON AN AS IS BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED SOFTWARE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED SOFTWARE IS WITH YOU. SHOULD ANY COVERED SOFTWARE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED SOFTWARE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. - -## 6. TERMINATION. -* **6.1.** This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. -* **6.2.** If You assert a patent infringement claim (excluding declaratory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You assert such claim is referred to as Participant) alleging that the Participant Software (meaning the Contributor Version where the Participant is a Contributor or the Original Software where the Participant is the Initial Developer) directly or indirectly infringes any patent, then any and all rights granted directly or indirectly to You by such Participant, the Initial Developer (if the Initial Developer is not the Participant) and all Contributors under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively and automatically at the expiration of such 60 day notice period, unless if within such 60 day period You withdraw Your claim with respect to the Participant Software against such Participant either unilaterally or pursuant to a written agreement with Participant. -* **6.3.** In the event of termination under Sections 6.1 or 6.2 above, all end user licenses that have been validly granted by You or any distributor hereunder prior to termination (excluding licenses granted to You by any distributor) shall survive termination. - -## 7. LIMITATION OF LIABILITY. - -UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED SOFTWARE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOST PROFITS, LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTYS NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. - -## 8. U.S. GOVERNMENT END USERS. - -The Covered Software is a commercial item, as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of commercial computer software (as that term is defined at 48 C.F.R.  252.227-7014(a)(1)) and commercial computer software documentation as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Software with only those rights set forth herein. This U.S. Government Rights clause is in lieu of, and supersedes, any other FAR, DFAR, or other clause or provision that addresses Government rights in computer software under this License. - -## 9. MISCELLANEOUS. - -This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by the law of the jurisdiction specified in a notice contained within the Original Software (except to the extent applicable law, if any, provides otherwise), excluding such jurisdictions conflict-of-law provisions. Any litigation relating to this License shall be subject to the jurisdiction of the courts located in the jurisdiction and venue specified in a notice contained within the Original Software, with the losing party responsible for costs, including, without limitation, court costs and reasonable attorneys fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. You agree that You alone are responsible for compliance with the United States export administration regulations (and the export control laws and regulation of any other countries) when You use, distribute or otherwise make available any Covered Software. - -## 10. RESPONSIBILITY FOR CLAIMS. - -As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. +MIT License + +Copyright (c) 2026 MCC Team and contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/Mcc.slnx b/Mcc.slnx new file mode 100644 index 0000000000..b5d7ab95d2 --- /dev/null +++ b/Mcc.slnx @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/MinecraftClient.Tests/AutoRelogRetryPolicyTests.cs b/MinecraftClient.Tests/AutoRelogRetryPolicyTests.cs deleted file mode 100644 index 8751664667..0000000000 --- a/MinecraftClient.Tests/AutoRelogRetryPolicyTests.cs +++ /dev/null @@ -1,176 +0,0 @@ -using MinecraftClient.ChatBots; -using MinecraftClient.Scripting; - -namespace MinecraftClient.Tests; - -public sealed class AutoRelogRetryPolicyTests -{ - [Fact] - public void DefaultConfigurationUsesUnlimitedRetries() - { - Assert.Equal(-1, new AutoRelog.Configs().Retries); - } - - [Fact] - public void UnlimitedRetriesNeverExhaust() - { - var policy = new AutoRelogRetryPolicy(new ManualTimeProvider()); - - for (int attempt = 1; attempt <= 100; attempt++) - { - Assert.True(policy.TryReserveAttempt(-1, out int retriesLeft)); - Assert.Equal(-1, retriesLeft); - Assert.Equal(attempt, policy.Attempts); - } - } - - [Fact] - public void ZeroRetriesDisablesReconnect() - { - var policy = new AutoRelogRetryPolicy(new ManualTimeProvider()); - - Assert.False(policy.TryReserveAttempt(0, out int retriesLeft)); - Assert.Equal(0, retriesLeft); - Assert.Equal(0, policy.Attempts); - } - - [Fact] - public void FiniteRetryLimitIsExact() - { - var policy = new AutoRelogRetryPolicy(new ManualTimeProvider()); - - Assert.True(policy.TryReserveAttempt(3, out int firstRetriesLeft)); - Assert.True(policy.TryReserveAttempt(3, out int secondRetriesLeft)); - Assert.True(policy.TryReserveAttempt(3, out int thirdRetriesLeft)); - Assert.False(policy.TryReserveAttempt(3, out int exhaustedRetriesLeft)); - - Assert.Equal(2, firstRetriesLeft); - Assert.Equal(1, secondRetriesLeft); - Assert.Equal(0, thirdRetriesLeft); - Assert.Equal(0, exhaustedRetriesLeft); - } - - [Fact] - public void RejectedRestartDoesNotConsumeRetry() - { - var policy = new AutoRelogRetryPolicy(new ManualTimeProvider()); - - Assert.True(policy.TryReserveAttempt(1, out _)); - policy.RollBackReservedAttempt(); - - Assert.True(policy.TryReserveAttempt(1, out int retriesLeft)); - Assert.Equal(0, retriesLeft); - } - - [Fact] - public void CoalescedDuplicateRollsBackOnlyItsOwnReservation() - { - var policy = new AutoRelogRetryPolicy(new ManualTimeProvider()); - - Assert.True(policy.TryReserveAttempt(2, out int firstRetriesLeft)); - Assert.True(policy.TryReserveAttempt(2, out int duplicateRetriesLeft)); - policy.RollBackReservedAttempt(); - - Assert.Equal(1, firstRetriesLeft); - Assert.Equal(0, duplicateRetriesLeft); - Assert.Equal(1, policy.Attempts); - Assert.True(policy.TryReserveAttempt(2, out int secondFailureRetriesLeft)); - Assert.Equal(0, secondFailureRetriesLeft); - Assert.False(policy.TryReserveAttempt(2, out _)); - } - - [Fact] - public void UnlimitedDuplicateRollbackKeepsUnlimitedBudget() - { - var policy = new AutoRelogRetryPolicy(new ManualTimeProvider()); - - Assert.True(policy.TryReserveAttempt(-1, out _)); - Assert.True(policy.TryReserveAttempt(-1, out _)); - policy.RollBackReservedAttempt(); - - Assert.Equal(1, policy.Attempts); - Assert.True(policy.TryReserveAttempt(-1, out int retriesLeft)); - Assert.Equal(-1, retriesLeft); - } - - [Fact] - public void StableConnectionResetsRetryBudget() - { - var timeProvider = new ManualTimeProvider(); - var policy = new AutoRelogRetryPolicy(timeProvider); - Assert.True(policy.TryReserveAttempt(1, out _)); - - policy.MarkJoined(); - timeProvider.Advance(AutoRelogRetryPolicy.StableConnectionThreshold - TimeSpan.FromMilliseconds(1)); - Assert.False(policy.ResetAfterStableConnection()); - - timeProvider.Advance(TimeSpan.FromMilliseconds(1)); - Assert.True(policy.ResetAfterStableConnection()); - Assert.Equal(0, policy.Attempts); - Assert.True(policy.TryReserveAttempt(1, out _)); - } - - [Fact] - public void TransportLossAlwaysReconnectsWhenEnabled() - { - bool reconnect = AutoRelogRetryPolicy.ShouldReconnect( - ChatBot.DisconnectReason.ConnectionLost, - "A transport-specific error without a configured phrase", - ignoreKickMessage: false, - ["Server is restarting"], - out string? matchedMessage); - - Assert.True(reconnect); - Assert.Null(matchedMessage); - } - - [Theory] - [InlineData(ChatBot.DisconnectReason.InGameKick)] - [InlineData(ChatBot.DisconnectReason.LoginRejected)] - public void ServerMessageMatchingIsCaseInsensitive(ChatBot.DisconnectReason reason) - { - bool reconnect = AutoRelogRetryPolicy.ShouldReconnect( - reason, - "THE SERVER IS RESTARTING NOW", - ignoreKickMessage: false, - ["server is restarting"], - out string? matchedMessage); - - Assert.True(reconnect); - Assert.Equal("server is restarting", matchedMessage); - } - - [Fact] - public void UserLogoutNeverReconnects() - { - Assert.False(AutoRelogRetryPolicy.ShouldReconnect( - ChatBot.DisconnectReason.UserLogout, - "Server is restarting", - ignoreKickMessage: true, - ["Server is restarting"], - out _)); - } - - [Fact] - public void IgnoreKickMessageAllowsNonmatchingServerKick() - { - Assert.True(AutoRelogRetryPolicy.ShouldReconnect( - ChatBot.DisconnectReason.InGameKick, - "Administrative removal", - ignoreKickMessage: true, - [], - out _)); - } - - private sealed class ManualTimeProvider : TimeProvider - { - private DateTimeOffset utcNow = DateTimeOffset.UnixEpoch; - - public override DateTimeOffset GetUtcNow() => utcNow; - - internal void Advance(TimeSpan duration) - { - utcNow += duration; - } - } -} diff --git a/MinecraftClient.Tests/BlockStatePropertiesTests.cs b/MinecraftClient.Tests/BlockStatePropertiesTests.cs deleted file mode 100644 index c141d58c40..0000000000 --- a/MinecraftClient.Tests/BlockStatePropertiesTests.cs +++ /dev/null @@ -1,108 +0,0 @@ -using MinecraftClient.Mapping; -using MinecraftClient.Mapping.BlockPalettes; - -namespace MinecraftClient.Tests; - -public sealed class BlockStatePropertiesTests -{ - private readonly Palette262 _palette = new(); - - [Theory] - [InlineData(32162, "north", "true", "inactive")] - [InlineData(32168, "north", "false", "unlocking")] - [InlineData(32193, "east", "false", "ejecting")] - public void VaultStatesExposeAllProperties( - int stateId, - string facing, - string ominous, - string vaultState) - { - IReadOnlyDictionary properties = _palette.GetStateProperties(stateId); - - Assert.Equal(facing, properties["facing"]); - Assert.Equal(ominous, properties["ominous"]); - Assert.Equal(vaultState, properties["vault_state"]); - } - - [Fact] - public void PropertiesUseServerReportedStateStride() - { - IReadOnlyDictionary properties = _palette.GetStateProperties(3989); - - Assert.Equal("left", properties["type"]); - Assert.Equal("north", properties["facing"]); - Assert.Equal("true", properties["waterlogged"]); - } - - [Fact] - public void StateWithoutPropertiesReturnsEmptyMap() - { - IReadOnlyDictionary properties = _palette.GetStateProperties(1); - - Assert.Empty(properties); - } - - public static TheoryData ModernPalettes => new() - { - { "1.13.2", new Palette113() }, - { "1.14.4", new Palette114() }, - { "1.15.2", new Palette115() }, - { "1.16.5", new Palette116() }, - { "1.17.1", new Palette117() }, - { "1.19.2", new Palette119() }, - { "1.19.3", new Palette1193() }, - { "1.19.4", new Palette1194() }, - { "1.20", new Palette120() }, - { "1.20.4", new Palette1204() }, - { "1.20.6", new Palette1206() }, - { "1.21.2", new Palette1212() }, - { "1.21.4", new Palette1214() }, - { "1.21.5", new Palette1215() }, - { "1.21.6", new Palette1216() }, - { "1.21.9", new Palette1219() }, - { "26.1", new Palette261() }, - { "26.2", new Palette262() } - }; - - [Theory] - [MemberData(nameof(ModernPalettes))] - public void EveryModernPaletteExposesOakLogAxis(string version, BlockPalette palette) - { - bool foundExpectedState = false; - - for (int stateId = 0; stateId <= ushort.MaxValue; stateId++) - { - if (palette.FromId(stateId) != Material.OakLog) - continue; - - IReadOnlyDictionary properties = palette.GetStateProperties(stateId); - if (properties.TryGetValue("axis", out string? axis) && axis == "x") - { - foundExpectedState = true; - break; - } - } - - Assert.True(foundExpectedState, $"Minecraft {version} did not expose oak_log[axis=x]"); - } - - [Fact] - public void LegacyPaletteExposesPackedMetadata() - { - BlockPalette previousPalette = Block.Palette; - try - { - Block.Palette = new Palette112(); - Block block = new(17, 4); - - IReadOnlyDictionary properties = block.GetStateProperties(); - - Assert.Equal(276, block.StateId); - Assert.Equal("4", properties["metadata"]); - } - finally - { - Block.Palette = previousPalette; - } - } -} diff --git a/MinecraftClient.Tests/CSharpRunnerTests.cs b/MinecraftClient.Tests/CSharpRunnerTests.cs deleted file mode 100644 index c6846997ff..0000000000 --- a/MinecraftClient.Tests/CSharpRunnerTests.cs +++ /dev/null @@ -1,14 +0,0 @@ -using MinecraftClient.Scripting; - -namespace MinecraftClient.Tests; - -public sealed class CSharpRunnerTests -{ - [Theory] - [InlineData("//using MinecraftClient.CommandHandler", "using MinecraftClient.CommandHandler;")] - [InlineData("//using MinecraftClient.CommandHandler;", "using MinecraftClient.CommandHandler;")] - public void NormalizeUsingDirectiveAddsMissingSemicolon(string directive, string expected) - { - Assert.Equal(expected, CSharpRunner.NormalizeUsingDirective(directive)); - } -} diff --git a/MinecraftClient.Tests/ChatTypeHolderTests.cs b/MinecraftClient.Tests/ChatTypeHolderTests.cs deleted file mode 100644 index eddfb43b1b..0000000000 --- a/MinecraftClient.Tests/ChatTypeHolderTests.cs +++ /dev/null @@ -1,159 +0,0 @@ -using MinecraftClient.Protocol.Handlers; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Tests; - -public sealed class ChatTypeHolderTests -{ - [Fact] - public void ReferenceHolderUsesOneBasedWireIdIn121AndNewer() - { - var dataTypes = new DataTypes(Protocol18Handler.MC_1_21_Version); - var packetData = new Queue(DataTypes.GetVarInt(2)); - - int chatTypeId = ChatParser.ReadChatTypeHolder( - dataTypes, - packetData, - Protocol18Handler.MC_1_21_Version, - out var directDecoration); - - Assert.Equal(1, chatTypeId); - Assert.Null(directDecoration); - Assert.Empty(packetData); - } - - [Fact] - public void RegistryIdRemainsUnchangedBefore121() - { - var dataTypes = new DataTypes(Protocol18Handler.MC_1_20_6_Version); - var packetData = new Queue(DataTypes.GetVarInt(2)); - - int chatTypeId = ChatParser.ReadChatTypeHolder( - dataTypes, - packetData, - Protocol18Handler.MC_1_20_6_Version, - out var directDecoration); - - Assert.Equal(2, chatTypeId); - Assert.Null(directDecoration); - Assert.Empty(packetData); - } - - [Fact] - public void DirectHolderConsumesChatAndNarrationDecorations() - { - var dataTypes = new DataTypes(Protocol18Handler.MC_1_21_Version); - var packetBytes = new List(); - packetBytes.AddRange(DataTypes.GetVarInt(0)); - AddDecoration(packetBytes, dataTypes, "chat.type.text", 0, 2); - AddDecoration(packetBytes, dataTypes, "chat.type.text.narrate", 0, 2); - var packetData = new Queue(packetBytes); - - int chatTypeId = ChatParser.ReadChatTypeHolder( - dataTypes, - packetData, - Protocol18Handler.MC_1_21_Version, - out var directDecoration); - - Assert.Equal(-1, chatTypeId); - Assert.NotNull(directDecoration); - Assert.Equal("chat.type.text", directDecoration.TranslationKey); - Assert.Equal( - [ChatParser.ChatTypeParameter.Sender, ChatParser.ChatTypeParameter.Content], - directDecoration.Parameters); - Assert.Empty(packetData); - } - - [Fact] - public void RegistryDecorationControlsParameterSelectionAndOrdering() - { - Dictionary? originalChatTypes = ChatParser.ChatId2Type; - try - { - ChatParser.ClearChatTypeDecorations(); - ChatParser.ChatId2Type = []; - var chatTypeData = new Dictionary - { - ["chat"] = new Dictionary - { - ["translation_key"] = "commands.message.display.outgoing", - ["parameters"] = new object[] { "target", "content" } - } - }; - ChatParser.ReadChatType(42, "example:custom_chat", chatTypeData); - var message = new ChatMessage( - "hello", - false, - 42, - Guid.Empty, - null, - "Alice", - "Bob", - DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), - null, - false); - - string rendered = ChatParser.ParseSignedChat(message); - - Assert.Equal("You whisper to Bob: hello", rendered); - } - finally - { - ChatParser.ClearChatTypeDecorations(); - ChatParser.ChatId2Type = originalChatTypes; - } - } - - [Fact] - public void UnknownTranslationKeyIsUsedAsVanillaFormatPattern() - { - Dictionary? originalChatTypes = ChatParser.ChatId2Type; - try - { - ChatParser.ClearChatTypeDecorations(); - ChatParser.ChatId2Type = []; - var chatTypeData = new Dictionary - { - ["chat"] = new Dictionary - { - ["translation_key"] = "%s", - ["parameters"] = new object[] { "sender", "content" } - } - }; - ChatParser.ReadChatType(42, "ordinary:custom_chat", chatTypeData); - var message = new ChatMessage( - "hello", - false, - 42, - Guid.Empty, - null, - "Alice » hello", - null, - DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(), - null, - false); - - string rendered = ChatParser.ParseSignedChat(message); - - Assert.Equal("Alice » hello", rendered); - } - finally - { - ChatParser.ClearChatTypeDecorations(); - ChatParser.ChatId2Type = originalChatTypes; - } - } - - private static void AddDecoration( - List packetBytes, - DataTypes dataTypes, - string translationKey, - params int[] parameters) - { - packetBytes.AddRange(dataTypes.GetString(translationKey)); - packetBytes.AddRange(DataTypes.GetVarInt(parameters.Length)); - foreach (int parameter in parameters) - packetBytes.AddRange(DataTypes.GetVarInt(parameter)); - packetBytes.AddRange(dataTypes.GetNbtTag(new Dictionary())); - } -} diff --git a/MinecraftClient.Tests/McClientConnectionFailureTests.cs b/MinecraftClient.Tests/McClientConnectionFailureTests.cs deleted file mode 100644 index 3789e53148..0000000000 --- a/MinecraftClient.Tests/McClientConnectionFailureTests.cs +++ /dev/null @@ -1,122 +0,0 @@ -using MinecraftClient.Scripting; - -namespace MinecraftClient.Tests; - -public sealed class McClientConnectionFailureTests -{ - [Fact] - public void LoginRejectedClaimPreventsSyntheticConnectionLostFallback() - { - var lifecycle = new ConnectionAttemptLifecycle(); - - Assert.True(lifecycle.TryBeginDisconnect()); - Assert.True(lifecycle.IsFailureClaimed); - Assert.False(lifecycle.TryBeginDisconnect()); - - lifecycle.CompleteDisconnect(); - - Assert.True(lifecycle.IsFailureClaimed); - Assert.False(lifecycle.TryBeginDisconnect()); - } - - [Fact] - public void UnclaimedGenericFailureCanBeClaimedExactlyOnce() - { - var lifecycle = new ConnectionAttemptLifecycle(); - - Assert.False(lifecycle.IsFailureClaimed); - Assert.True(lifecycle.TryBeginDisconnect()); - Assert.False(lifecycle.TryBeginDisconnect()); - } - - [Fact] - public void HeldBotsAreRestoredBeforeFailureAndReceiveOriginalMessageOnce() - { - const string rejectionMessage = "You are not white-listed on this server!"; - var bot = new RecordingBot(); - List heldBots = [bot]; - var loadedBots = new List(); - - ConnectionAttemptLifecycle.RestoreHeldBots(heldBots, loadedBots.Add); - foreach (ChatBot loadedBot in loadedBots) - loadedBot.OnDisconnect(ChatBot.DisconnectReason.LoginRejected, rejectionMessage); - - Assert.Empty(heldBots); - Assert.Single(loadedBots); - Assert.Equal(1, bot.DisconnectCount); - Assert.Equal(ChatBot.DisconnectReason.LoginRejected, bot.LastReason); - Assert.Equal(rejectionMessage, bot.LastMessage); - } - - [Fact] - public void OfflineRouteStaysOwnedAcrossReplacementAndSuccessfulHandoff() - { - var route = new AttemptOwnedRoute(); - int activations = 0; - int deactivations = 0; - - Assert.True(route.TryActivate(7, 7, () => activations++)); - Assert.False(route.TryActivate(7, 7, () => activations++)); - Assert.True(route.TryTransfer(7, 8)); - Assert.False(route.TryDeactivate(7, () => deactivations++)); - Assert.Equal(8, route.OwnerAttempt); - Assert.True(route.TryDeactivate(8, () => deactivations++)); - - Assert.Equal(1, activations); - Assert.Equal(1, deactivations); - Assert.Equal(-1, route.OwnerAttempt); - } - - [Fact] - public void InitialConnectionAttemptCanOwnOfflineRoute() - { - var route = new AttemptOwnedRoute(); - int activations = 0; - - Assert.True(route.TryActivate(0, 0, () => activations++)); - - Assert.Equal(1, activations); - Assert.Equal(0, route.OwnerAttempt); - } - - [Fact] - public void OlderAttemptCannotTakeAnEmptyOfflineRoute() - { - var route = new AttemptOwnedRoute(); - int activations = 0; - - Assert.False(route.TryActivate(4, 5, () => activations++)); - - Assert.Equal(0, activations); - Assert.Equal(-1, route.OwnerAttempt); - } - - [Fact] - public void StaleCleanupCannotClearNewerOfflineRoute() - { - var route = new AttemptOwnedRoute(); - int deactivations = 0; - - Assert.True(route.TryActivate(10, 10, () => { })); - Assert.True(route.TryActivate(11, 11, () => { })); - Assert.False(route.TryDeactivate(10, () => deactivations++)); - - Assert.Equal(11, route.OwnerAttempt); - Assert.Equal(0, deactivations); - } - - private sealed class RecordingBot : ChatBot - { - internal int DisconnectCount { get; private set; } - internal DisconnectReason? LastReason { get; private set; } - internal string? LastMessage { get; private set; } - - public override bool OnDisconnect(DisconnectReason reason, string message) - { - DisconnectCount++; - LastReason = reason; - LastMessage = message; - return false; - } - } -} diff --git a/MinecraftClient.Tests/MinecraftClient.Tests.csproj b/MinecraftClient.Tests/MinecraftClient.Tests.csproj deleted file mode 100644 index ebf278d35e..0000000000 --- a/MinecraftClient.Tests/MinecraftClient.Tests.csproj +++ /dev/null @@ -1,22 +0,0 @@ - - - net10.0 - enable - enable - false - true - - - - - - - runtime; build; native; contentfiles; analyzers; buildtransitive - all - - - - - - - diff --git a/MinecraftClient.Tests/RestartCoordinatorTests.cs b/MinecraftClient.Tests/RestartCoordinatorTests.cs deleted file mode 100644 index f9c9edef7e..0000000000 --- a/MinecraftClient.Tests/RestartCoordinatorTests.cs +++ /dev/null @@ -1,302 +0,0 @@ -namespace MinecraftClient.Tests; - -public sealed class RestartCoordinatorTests -{ - [Fact] - public async Task PreparationCompletesBeforeRequestCanExecute() - { - var completed = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - bool prepared = false; - - RestartCoordinator coordinator = null!; - coordinator = new RestartCoordinator( - (request, cancellationToken) => - { - Assert.True(Volatile.Read(ref prepared)); - Assert.True(coordinator.TryBeginCommit(request, out _)); - completed.SetResult(); - return Task.CompletedTask; - }, - exception => throw new Xunit.Sdk.XunitException(exception.ToString())); - using var cleanup = coordinator; - - Assert.True(coordinator.TrySchedule( - new RestartRequest(1, TimeSpan.Zero, true), - () => - { - Volatile.Write(ref prepared, true); - return true; - })); - await completed.Task.WaitAsync(TimeSpan.FromSeconds(5)); - } - - [Fact] - public async Task RejectedPreparationDoesNotPublishOrAdvanceAttempt() - { - var completed = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - int executions = 0; - - RestartCoordinator coordinator = null!; - coordinator = new RestartCoordinator( - (request, cancellationToken) => - { - Interlocked.Increment(ref executions); - Assert.True(coordinator.TryBeginCommit(request, out _)); - completed.SetResult(); - return Task.CompletedTask; - }, - exception => throw new Xunit.Sdk.XunitException(exception.ToString())); - using var cleanup = coordinator; - - Assert.False(coordinator.TrySchedule( - new RestartRequest(2, TimeSpan.Zero, true), - () => false)); - Assert.False(coordinator.HasScheduledRestart(2)); - - Assert.True(coordinator.TrySchedule(new RestartRequest(2, TimeSpan.Zero, true))); - await completed.Task.WaitAsync(TimeSpan.FromSeconds(5)); - - Assert.Equal(1, executions); - } - - [Fact] - public async Task FaultedSourceCleanupPreventsRestartExecution() - { - var failureReported = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - int executions = 0; - - using var coordinator = new RestartCoordinator( - (_, _) => - { - Interlocked.Increment(ref executions); - return Task.CompletedTask; - }, - exception => failureReported.SetResult(exception)); - - var cleanupFailure = new InvalidOperationException("cleanup failed"); - Assert.True(coordinator.TrySchedule(new RestartRequest( - 3, - TimeSpan.Zero, - true, - SourceCleanupCompletion: Task.FromException(cleanupFailure)))); - - Exception reportedException = await failureReported.Task.WaitAsync(TimeSpan.FromSeconds(5)); - - Assert.Same(cleanupFailure, reportedException); - Assert.Equal(0, executions); - } - - [Fact] - public async Task AutomaticSameAttemptIsCoalescedWhileQueued() - { - var blockerStarted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var releaseBlocker = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var queuedCompleted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - int queuedExecutions = 0; - - RestartCoordinator coordinator = null!; - coordinator = new RestartCoordinator( - async (request, cancellationToken) => - { - if (request.ConnectionAttempt == 9) - { - blockerStarted.SetResult(); - await releaseBlocker.Task.WaitAsync(cancellationToken); - return; - } - - Interlocked.Increment(ref queuedExecutions); - Assert.True(coordinator.TryBeginCommit(request, out _)); - queuedCompleted.SetResult(); - }, - exception => throw new Xunit.Sdk.XunitException(exception.ToString())); - using var cleanup = coordinator; - - Assert.True(coordinator.TrySchedule(new RestartRequest(9, TimeSpan.Zero, true))); - await blockerStarted.Task.WaitAsync(TimeSpan.FromSeconds(5)); - - Assert.True(coordinator.TrySchedule(new RestartRequest(10, TimeSpan.Zero, true))); - Assert.False(coordinator.TrySchedule(new RestartRequest(10, TimeSpan.Zero, true))); - Assert.True(coordinator.HasScheduledRestart(10)); - - releaseBlocker.SetResult(); - await queuedCompleted.Task.WaitAsync(TimeSpan.FromSeconds(5)); - - Assert.Equal(1, queuedExecutions); - } - - [Fact] - public async Task AutomaticSameAttemptIsCoalescedDuringCallback() - { - var callbackStarted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var releaseCallback = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var callbackCompleted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - int executions = 0; - - RestartCoordinator coordinator = null!; - coordinator = new RestartCoordinator( - async (request, cancellationToken) => - { - Interlocked.Increment(ref executions); - callbackStarted.SetResult(); - await releaseCallback.Task.WaitAsync(cancellationToken); - Assert.True(coordinator.TryBeginCommit(request, out _)); - callbackCompleted.SetResult(); - }, - exception => throw new Xunit.Sdk.XunitException(exception.ToString())); - using var cleanup = coordinator; - - Assert.True(coordinator.TrySchedule(new RestartRequest(42, TimeSpan.Zero, true))); - await callbackStarted.Task.WaitAsync(TimeSpan.FromSeconds(5)); - - Assert.False(coordinator.TrySchedule(new RestartRequest(42, TimeSpan.Zero, true))); - - releaseCallback.SetResult(); - await callbackCompleted.Task.WaitAsync(TimeSpan.FromSeconds(5)); - - Assert.Equal(1, executions); - } - - [Fact] - public async Task ExplicitReplacementDuringDelayUsesLatestSnapshotWithoutAnotherExecution() - { - var callbackStarted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var allowCommit = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var callbackCompleted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - RestartRequest committedRequest = default; - int executions = 0; - - RestartCoordinator coordinator = null!; - coordinator = new RestartCoordinator( - async (request, cancellationToken) => - { - Interlocked.Increment(ref executions); - callbackStarted.SetResult(); - await allowCommit.Task.WaitAsync(cancellationToken); - Assert.True(coordinator.TryBeginCommit(request, out committedRequest)); - callbackCompleted.SetResult(); - }, - exception => throw new Xunit.Sdk.XunitException(exception.ToString())); - using var cleanup = coordinator; - - Assert.True(coordinator.TrySchedule(new RestartRequest( - 50, - TimeSpan.FromSeconds(10), - true, - CreateSettingsSnapshot("first")))); - await callbackStarted.Task.WaitAsync(TimeSpan.FromSeconds(5)); - - Assert.True(coordinator.TrySchedule(new RestartRequest( - 50, - TimeSpan.Zero, - true, - CreateSettingsSnapshot("replacement"), - ReplaceUntilCommit: true))); - - allowCommit.SetResult(); - await callbackCompleted.Task.WaitAsync(TimeSpan.FromSeconds(5)); - - Assert.Equal(1, executions); - Assert.Equal("replacement", committedRequest.SettingsSnapshot?.Account.Login); - } - - [Fact] - public async Task RejectsSameAttemptReplacementAfterCommit() - { - var commitStarted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - var releaseCommit = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - RestartRequest committedRequest = default; - - RestartCoordinator coordinator = null!; - coordinator = new RestartCoordinator( - async (request, cancellationToken) => - { - Assert.True(coordinator.TryBeginCommit(request, out committedRequest)); - commitStarted.SetResult(); - await releaseCommit.Task.WaitAsync(cancellationToken); - }, - exception => throw new Xunit.Sdk.XunitException(exception.ToString())); - using var cleanup = coordinator; - - Assert.True(coordinator.TrySchedule(new RestartRequest( - 60, - TimeSpan.Zero, - true, - CreateSettingsSnapshot("committed")))); - await commitStarted.Task.WaitAsync(TimeSpan.FromSeconds(5)); - - Assert.False(coordinator.TrySchedule(new RestartRequest( - 60, - TimeSpan.Zero, - true, - CreateSettingsSnapshot("rejected"), - ReplaceUntilCommit: true))); - Assert.Equal("committed", committedRequest.SettingsSnapshot?.Account.Login); - - releaseCommit.SetResult(); - } - - [Fact] - public void RejectsStaleAttempt() - { - RestartCoordinator coordinator = null!; - coordinator = new RestartCoordinator( - (_, _) => Task.CompletedTask, - exception => throw new Xunit.Sdk.XunitException(exception.ToString())); - using var cleanup = coordinator; - - Assert.True(coordinator.TrySchedule(new RestartRequest(20, TimeSpan.Zero, true))); - Assert.False(coordinator.TrySchedule(new RestartRequest(19, TimeSpan.Zero, true))); - } - - [Fact] - public async Task RejectsCompletedAttempt() - { - var completed = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - RestartCoordinator coordinator = null!; - coordinator = new RestartCoordinator( - (request, cancellationToken) => - { - Assert.True(coordinator.TryBeginCommit(request, out _)); - completed.SetResult(); - return Task.CompletedTask; - }, - exception => throw new Xunit.Sdk.XunitException(exception.ToString())); - using var cleanup = coordinator; - - Assert.True(coordinator.TrySchedule(new RestartRequest(20, TimeSpan.Zero, true))); - await completed.Task.WaitAsync(TimeSpan.FromSeconds(5)); - Assert.True(SpinWait.SpinUntil(() => !coordinator.HasScheduledRestart(20), TimeSpan.FromSeconds(5))); - - Assert.False(coordinator.TrySchedule(new RestartRequest(20, TimeSpan.Zero, true))); - } - - [Fact] - public async Task TerminalStopCancelsInFlightWorkAndRejectsFurtherRestarts() - { - var callbackStarted = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously); - using var coordinator = new RestartCoordinator( - async (_, cancellationToken) => - { - callbackStarted.SetResult(); - await Task.Delay(Timeout.InfiniteTimeSpan, cancellationToken); - }, - exception => throw new Xunit.Sdk.XunitException(exception.ToString())); - - Assert.True(coordinator.TrySchedule(new RestartRequest(1, TimeSpan.Zero, true))); - await callbackStarted.Task.WaitAsync(TimeSpan.FromSeconds(5)); - - coordinator.Stop(); - - Assert.False(coordinator.TrySchedule(new RestartRequest(2, TimeSpan.Zero, true))); - Assert.False(coordinator.HasScheduledRestart(1)); - } - - private static RestartSettingsSnapshot CreateSettingsSnapshot(string account) - { - return new RestartSettingsSnapshot( - new Settings.MainConfigHelper.MainConfig.AccountInfoConfig(account, "-"), - "localhost", - 25565); - } -} diff --git a/MinecraftClient.Tests/SocketWrapperTests.cs b/MinecraftClient.Tests/SocketWrapperTests.cs deleted file mode 100644 index c04fb9b4d6..0000000000 --- a/MinecraftClient.Tests/SocketWrapperTests.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Net; -using System.Net.Sockets; -using MinecraftClient.Protocol.Handlers; - -namespace MinecraftClient.Tests; - -public sealed class SocketWrapperTests -{ - [Fact] - public async Task GracefulPeerCloseEndsReadInsteadOfSpinning() - { - var listener = new TcpListener(IPAddress.Loopback, 0); - listener.Start(); - try - { - using var client = new TcpClient(); - Task acceptTask = listener.AcceptTcpClientAsync(); - await client.ConnectAsync((IPEndPoint)listener.LocalEndpoint); - using TcpClient peer = await acceptTask; - var wrapper = new SocketWrapper(client); - - peer.Client.Shutdown(SocketShutdown.Both); - peer.Close(); - - Assert.True(SpinWait.SpinUntil(wrapper.HasDataAvailable, TimeSpan.FromSeconds(5))); - await Assert.ThrowsAsync( - () => Task.Run(() => wrapper.ReadDataRAW(1)).WaitAsync(TimeSpan.FromSeconds(5))); - } - finally - { - listener.Stop(); - } - } -} diff --git a/MinecraftClient.Tests/Usings.cs b/MinecraftClient.Tests/Usings.cs deleted file mode 100644 index c802f4480b..0000000000 --- a/MinecraftClient.Tests/Usings.cs +++ /dev/null @@ -1 +0,0 @@ -global using Xunit; diff --git a/MinecraftClient.sln b/MinecraftClient.sln deleted file mode 100644 index 3f24b2216d..0000000000 --- a/MinecraftClient.sln +++ /dev/null @@ -1,101 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.3.32901.215 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MinecraftClient", "MinecraftClient\MinecraftClient.csproj", "{1E2FACE4-F5CA-4323-9641-740C6A551770}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "ConsoleInteractive", "ConsoleInteractive\ConsoleInteractive\ConsoleInteractive\ConsoleInteractive.csproj", "{93DA4D71-EFAD-4493-BE21-A105AF663660}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "DebugTools", "DebugTools", "{02313C6C-37F1-D66D-F235-6A4537C03113}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MccMcpStdioHarness", "DebugTools\MccMcpStdioHarness\MccMcpStdioHarness.csproj", "{F032D2BB-A0A9-4726-A58F-C02F7EA606D6}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MccMcpWebPlayground", "DebugTools\MccMcpWebPlayground\MccMcpWebPlayground.csproj", "{5F620CF6-BC7D-449A-B779-2D51985059C6}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MinecraftClient.Tests", "MinecraftClient.Tests\MinecraftClient.Tests.csproj", "{44B63F7B-30E2-47DA-B2C8-A8742BC8AE0B}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Debug|x64 = Debug|x64 - Debug|x86 = Debug|x86 - Release|Any CPU = Release|Any CPU - Release|x64 = Release|x64 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {1E2FACE4-F5CA-4323-9641-740C6A551770}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E2FACE4-F5CA-4323-9641-740C6A551770}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E2FACE4-F5CA-4323-9641-740C6A551770}.Debug|x64.ActiveCfg = Debug|Any CPU - {1E2FACE4-F5CA-4323-9641-740C6A551770}.Debug|x64.Build.0 = Debug|Any CPU - {1E2FACE4-F5CA-4323-9641-740C6A551770}.Debug|x86.ActiveCfg = Debug|Any CPU - {1E2FACE4-F5CA-4323-9641-740C6A551770}.Debug|x86.Build.0 = Debug|Any CPU - {1E2FACE4-F5CA-4323-9641-740C6A551770}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E2FACE4-F5CA-4323-9641-740C6A551770}.Release|Any CPU.Build.0 = Release|Any CPU - {1E2FACE4-F5CA-4323-9641-740C6A551770}.Release|x64.ActiveCfg = Release|Any CPU - {1E2FACE4-F5CA-4323-9641-740C6A551770}.Release|x64.Build.0 = Release|Any CPU - {1E2FACE4-F5CA-4323-9641-740C6A551770}.Release|x86.ActiveCfg = Release|Any CPU - {1E2FACE4-F5CA-4323-9641-740C6A551770}.Release|x86.Build.0 = Release|Any CPU - {93DA4D71-EFAD-4493-BE21-A105AF663660}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {93DA4D71-EFAD-4493-BE21-A105AF663660}.Debug|Any CPU.Build.0 = Debug|Any CPU - {93DA4D71-EFAD-4493-BE21-A105AF663660}.Debug|x64.ActiveCfg = Debug|Any CPU - {93DA4D71-EFAD-4493-BE21-A105AF663660}.Debug|x64.Build.0 = Debug|Any CPU - {93DA4D71-EFAD-4493-BE21-A105AF663660}.Debug|x86.ActiveCfg = Debug|Any CPU - {93DA4D71-EFAD-4493-BE21-A105AF663660}.Debug|x86.Build.0 = Debug|Any CPU - {93DA4D71-EFAD-4493-BE21-A105AF663660}.Release|Any CPU.ActiveCfg = Release|Any CPU - {93DA4D71-EFAD-4493-BE21-A105AF663660}.Release|Any CPU.Build.0 = Release|Any CPU - {93DA4D71-EFAD-4493-BE21-A105AF663660}.Release|x64.ActiveCfg = Release|Any CPU - {93DA4D71-EFAD-4493-BE21-A105AF663660}.Release|x64.Build.0 = Release|Any CPU - {93DA4D71-EFAD-4493-BE21-A105AF663660}.Release|x86.ActiveCfg = Release|Any CPU - {93DA4D71-EFAD-4493-BE21-A105AF663660}.Release|x86.Build.0 = Release|Any CPU - {F032D2BB-A0A9-4726-A58F-C02F7EA606D6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F032D2BB-A0A9-4726-A58F-C02F7EA606D6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F032D2BB-A0A9-4726-A58F-C02F7EA606D6}.Debug|x64.ActiveCfg = Debug|Any CPU - {F032D2BB-A0A9-4726-A58F-C02F7EA606D6}.Debug|x64.Build.0 = Debug|Any CPU - {F032D2BB-A0A9-4726-A58F-C02F7EA606D6}.Debug|x86.ActiveCfg = Debug|Any CPU - {F032D2BB-A0A9-4726-A58F-C02F7EA606D6}.Debug|x86.Build.0 = Debug|Any CPU - {F032D2BB-A0A9-4726-A58F-C02F7EA606D6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F032D2BB-A0A9-4726-A58F-C02F7EA606D6}.Release|Any CPU.Build.0 = Release|Any CPU - {F032D2BB-A0A9-4726-A58F-C02F7EA606D6}.Release|x64.ActiveCfg = Release|Any CPU - {F032D2BB-A0A9-4726-A58F-C02F7EA606D6}.Release|x64.Build.0 = Release|Any CPU - {F032D2BB-A0A9-4726-A58F-C02F7EA606D6}.Release|x86.ActiveCfg = Release|Any CPU - {F032D2BB-A0A9-4726-A58F-C02F7EA606D6}.Release|x86.Build.0 = Release|Any CPU - {5F620CF6-BC7D-449A-B779-2D51985059C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5F620CF6-BC7D-449A-B779-2D51985059C6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5F620CF6-BC7D-449A-B779-2D51985059C6}.Debug|x64.ActiveCfg = Debug|Any CPU - {5F620CF6-BC7D-449A-B779-2D51985059C6}.Debug|x64.Build.0 = Debug|Any CPU - {5F620CF6-BC7D-449A-B779-2D51985059C6}.Debug|x86.ActiveCfg = Debug|Any CPU - {5F620CF6-BC7D-449A-B779-2D51985059C6}.Debug|x86.Build.0 = Debug|Any CPU - {5F620CF6-BC7D-449A-B779-2D51985059C6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5F620CF6-BC7D-449A-B779-2D51985059C6}.Release|Any CPU.Build.0 = Release|Any CPU - {5F620CF6-BC7D-449A-B779-2D51985059C6}.Release|x64.ActiveCfg = Release|Any CPU - {5F620CF6-BC7D-449A-B779-2D51985059C6}.Release|x64.Build.0 = Release|Any CPU - {5F620CF6-BC7D-449A-B779-2D51985059C6}.Release|x86.ActiveCfg = Release|Any CPU - {5F620CF6-BC7D-449A-B779-2D51985059C6}.Release|x86.Build.0 = Release|Any CPU - {44B63F7B-30E2-47DA-B2C8-A8742BC8AE0B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {44B63F7B-30E2-47DA-B2C8-A8742BC8AE0B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {44B63F7B-30E2-47DA-B2C8-A8742BC8AE0B}.Debug|x64.ActiveCfg = Debug|Any CPU - {44B63F7B-30E2-47DA-B2C8-A8742BC8AE0B}.Debug|x64.Build.0 = Debug|Any CPU - {44B63F7B-30E2-47DA-B2C8-A8742BC8AE0B}.Debug|x86.ActiveCfg = Debug|Any CPU - {44B63F7B-30E2-47DA-B2C8-A8742BC8AE0B}.Debug|x86.Build.0 = Debug|Any CPU - {44B63F7B-30E2-47DA-B2C8-A8742BC8AE0B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {44B63F7B-30E2-47DA-B2C8-A8742BC8AE0B}.Release|Any CPU.Build.0 = Release|Any CPU - {44B63F7B-30E2-47DA-B2C8-A8742BC8AE0B}.Release|x64.ActiveCfg = Release|Any CPU - {44B63F7B-30E2-47DA-B2C8-A8742BC8AE0B}.Release|x64.Build.0 = Release|Any CPU - {44B63F7B-30E2-47DA-B2C8-A8742BC8AE0B}.Release|x86.ActiveCfg = Release|Any CPU - {44B63F7B-30E2-47DA-B2C8-A8742BC8AE0B}.Release|x86.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {F032D2BB-A0A9-4726-A58F-C02F7EA606D6} = {02313C6C-37F1-D66D-F235-6A4537C03113} - {5F620CF6-BC7D-449A-B779-2D51985059C6} = {02313C6C-37F1-D66D-F235-6A4537C03113} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {6DED60F4-9CF4-4DB3-8966-582B2EBE8487} - RESX_ShowErrorsInErrorList = False - RESX_SortFileContentOnSave = False - EndGlobalSection -EndGlobal diff --git a/MinecraftClient/Achievement.cs b/MinecraftClient/Achievement.cs deleted file mode 100644 index 760e4054cd..0000000000 --- a/MinecraftClient/Achievement.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient -{ - /// - /// The type of an achievement or advancement. - /// - public enum AchievementType - { - Task, - Challenge, - Goal, - Legacy - } - - /// - /// Represents a Minecraft achievement (pre-1.12) or advancement (1.12+). - /// - /// Resource identifier, e.g. "minecraft:story/root" or "achievement.openInventory" - /// Display title (null for legacy achievements without display info) - /// Display description (null for legacy achievements without display info) - /// The frame type / achievement category - /// Whether this advancement is hidden in the UI - /// Whether all requirements have been met - /// OR-groups of criterion names; all groups must be satisfied - /// Per-criterion completion status - public record Achievement( - string Id, - string? Title, - string? Description, - AchievementType Type, - bool IsHidden, - bool IsCompleted, - IReadOnlyList> Requirements, - IReadOnlyDictionary CriteriaProgress); -} diff --git a/MinecraftClient/AutoTimeout.cs b/MinecraftClient/AutoTimeout.cs deleted file mode 100644 index 786be4db13..0000000000 --- a/MinecraftClient/AutoTimeout.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Threading; - -namespace MinecraftClient -{ - /// - /// Allow easy timeout on pieces of code - /// - /// - /// By ORelio - (c) 2014 - CDDL 1.0 - /// - public class AutoTimeout - { - /// - /// Perform the specified action with specified timeout - /// - /// Action to run - /// Maximum timeout in milliseconds - /// True if the action finished whithout timing out - public static bool Perform(Action action, int timeout) - { - return Perform(action, TimeSpan.FromMilliseconds(timeout)); - } - - /// - /// Perform the specified action with specified timeout - /// - /// Action to run - /// Maximum timeout - /// True if the action finished whithout timing out - public static bool Perform(Action action, TimeSpan timeout) - { - Thread thread = new(new ThreadStart(action)); - thread.Start(); - - bool success = thread.Join(timeout); - if (!success) - thread.Interrupt(); - - return success; - } - } -} \ No newline at end of file diff --git a/MinecraftClient/ChatBots/Alerts.cs b/MinecraftClient/ChatBots/Alerts.cs deleted file mode 100644 index f480e4892e..0000000000 --- a/MinecraftClient/ChatBots/Alerts.cs +++ /dev/null @@ -1,172 +0,0 @@ -using System; -using System.Linq; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - /// - /// This bot make the console beep on some specified words. Useful to detect when someone is talking to you, for example. - /// - public class Alerts : ChatBot - { - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "Alerts"; - - public bool Enabled = false; - - [TomlInlineComment("$ChatBot.Alerts.Beep_Enabled$")] - public bool Beep_Enabled = true; - - [TomlInlineComment("$ChatBot.Alerts.Trigger_By_Words$")] - public bool Trigger_By_Words = false; - - [TomlInlineComment("$ChatBot.Alerts.Trigger_By_Rain$")] - public bool Trigger_By_Rain = false; - - [TomlInlineComment("$ChatBot.Alerts.Trigger_By_Thunderstorm$")] - public bool Trigger_By_Thunderstorm = false; - - [TomlInlineComment("$ChatBot.Alerts.Log_To_File$")] - public bool Log_To_File = false; - - [TomlInlineComment("$ChatBot.Alerts.Log_File$")] - public string Log_File = @"alerts-log.txt"; - - [TomlPrecedingComment("$ChatBot.Alerts.Matches$")] - public string[] Matches = new string[] { "Yourname", " whispers ", "-> me", "admin", ".com" }; - - [TomlPrecedingComment("$ChatBot.Alerts.Excludes$")] - public string[] Excludes = new string[] { "myserver.com", "Yourname>:", "Player Yourname", "Yourname joined", "Yourname left", "[Lockette] (Admin)", " Yourname:", "Yourname is" }; - - public void OnSettingUpdate() - { - Log_File ??= string.Empty; - - if (!Enabled) return; - - bool checkSuccessed = true; - - if (Trigger_By_Words) - { - if (Log_To_File) - { - try - { - System.IO.File.AppendAllText(Log_File, string.Empty); - } - catch - { - checkSuccessed = false; - LogToConsole(BotName, "Can't write logs to " + System.IO.Path.GetFullPath(Log_File)); - } - } - } - - if (!checkSuccessed) - { - LogToConsole(BotName, Translations.general_bot_unload); - Enabled = false; - } - } - } - - float curRainLevel = 0; - float curThunderLevel = 0; - const float threshold = 0.2f; - - /// - /// Process text received from the server to display alerts - /// - /// Received text - public override void GetText(string text) - { - if (Config.Trigger_By_Words) - { - //Remove color codes and convert to lowercase - text = GetVerbatim(text).ToLower(); - - //Proceed only if no exclusions are found in text - if (!Config.Excludes.Any(exclusion => text.Contains(exclusion.ToLower()))) - { - //Show an alert for each alert item found in text, if any - foreach (string alert in Config.Matches.Where(alert => text.Contains(alert.ToLower()))) - { - if (Config.Beep_Enabled) - Console.Beep(); //Text found ! - - ConsoleIO.WriteLine(text.Replace(alert, "§c" + alert + "§r")); - - if (Config.Log_To_File && Config.Log_File.Length > 0) - { - DateTime now = DateTime.Now; - string TimeStamp = "[" + now.Year + '/' + now.Month + '/' + now.Day + ' ' + now.Hour + ':' + now.Minute + ']'; - System.IO.File.AppendAllText(Config.Log_File, TimeStamp + " " + GetVerbatim(text) + "\n"); - } - } - } - } - } - - public override void OnRainLevelChange(float level) - { - if (curRainLevel < threshold && level >= threshold) - { - if (Config.Trigger_By_Rain) - { - if (Config.Beep_Enabled) - { - Console.Beep(); - Console.Beep(); - } - LogToConsole("§c" + Translations.bot_alerts_start_rain); - } - } - else if (curRainLevel >= threshold && level < threshold) - { - if (Config.Trigger_By_Rain) - { - if (Config.Beep_Enabled) - { - Console.Beep(); - } - LogToConsole("§c" + Translations.bot_alerts_end_rain); - } - } - curRainLevel = level; - } - - public override void OnThunderLevelChange(float level) - { - if (curThunderLevel < threshold && level >= threshold) - { - if (Config.Trigger_By_Thunderstorm) - { - if (Config.Beep_Enabled) - { - Console.Beep(); - Console.Beep(); - } - LogToConsole("§c" + Translations.bot_alerts_start_thunderstorm); - } - } - else if (curThunderLevel >= threshold && level < threshold) - { - if (Config.Trigger_By_Thunderstorm) - { - if (Config.Beep_Enabled) - { - Console.Beep(); - } - LogToConsole("§c" + Translations.bot_alerts_end_thunderstorm); - } - } - curThunderLevel = level; - } - } -} diff --git a/MinecraftClient/ChatBots/AntiAFK.cs b/MinecraftClient/ChatBots/AntiAFK.cs deleted file mode 100644 index 4291e8dd7a..0000000000 --- a/MinecraftClient/ChatBots/AntiAFK.cs +++ /dev/null @@ -1,190 +0,0 @@ -using System; -using MinecraftClient.Mapping; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - /// - /// This bot sends a command every 60 seconds in order to stay non-afk. - /// - public class AntiAFK : ChatBot - { - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] private const string BotName = "AntiAFK"; - - public bool Enabled = false; - - [TomlInlineComment("$ChatBot.AntiAfk.Delay$")] - public Range Delay = new(60); - - [TomlInlineComment("$ChatBot.AntiAfk.Command$")] - public string Command = "/ping"; - - [TomlInlineComment("$ChatBot.AntiAfk.Use_Sneak$")] - public bool Use_Sneak = false; - - [TomlInlineComment("$ChatBot.AntiAfk.Use_Terrain_Handling$")] - public bool Use_Terrain_Handling = false; - - [TomlInlineComment("$ChatBot.AntiAfk.Walk_Range$")] - public int Walk_Range = 5; - - [TomlInlineComment("$ChatBot.AntiAfk.Walk_Retries$")] - public int Walk_Retries = 20; - - public void OnSettingUpdate() - { - if (Walk_Range <= 0) - { - Walk_Range = 5; - LogToConsole(BotName, Translations.bot_antiafk_invalid_walk_range); - } - - Delay.min = Math.Max(1.0, Delay.min); - Delay.max = Math.Max(1.0, Delay.max); - - double maxDelaySeconds = int.MaxValue / (double)Settings.ClientTicksPerSecond; - Delay.min = Math.Min(maxDelaySeconds, Delay.min); - Delay.max = Math.Min(maxDelaySeconds, Delay.max); - - if (Delay.min > Delay.max) - { - (Delay.min, Delay.max) = (Delay.max, Delay.min); - LogToConsole(BotName, Translations.bot_antiafk_swapping); - } - - Command ??= string.Empty; - } - - public struct Range - { - public double min, max; - - public Range() - { - min = 0; - max = 0; - } - - public Range(int value) - { - min = max = value; - } - - public Range(int min, int max) - { - this.min = min; - this.max = max; - } - } - } - - private int count, nextrun = Settings.DoubleToTick(5.0); - private bool previousSneakState = false; - private readonly Random random = new(); - - /// - /// This bot sends a /ping command every X seconds in order to stay non-afk. - /// - public AntiAFK() - { - count = 0; - } - - public override void Initialize() - { - if (Config.Use_Terrain_Handling) - { - if (!GetTerrainEnabled()) - { - LogToConsole(Translations.bot_antiafk_not_using_terrain_handling); - } - else - { - var movementLock = BotMovementLock.Instance; - if (movementLock is { IsLocked: true }) - LogToConsole( - $"§§6§1§0{string.Format(Translations.bot_antiafk_may_not_move, movementLock.LockedBy)}"); - } - } - } - - public override void Update() - { - count++; - - if (count < nextrun) return; - DoAntiAfkStuff(); - count = 0; - nextrun = random.Next(Settings.DoubleToTick(Config.Delay.min), Settings.DoubleToTick(Config.Delay.max)); - } - - private void DoAntiAfkStuff() - { - var isMovementLocked = BotMovementLock.Instance; - if (Config.Use_Terrain_Handling && GetTerrainEnabled() && isMovementLocked is { IsLocked: false }) - { - var currentLocation = GetCurrentLocation(); - - var moved = false; - var useAlternativeMethod = false; - var triesCounter = 0; - - while (!moved) - { - if (triesCounter++ >= Config.Walk_Retries) - { - useAlternativeMethod = true; - break; - } - - var goal = GetRandomLocationWithinRangeXZ(currentLocation, Config.Walk_Range); - - // Prevent getting the same location - while ((currentLocation.X == goal.X) && (currentLocation.Y == goal.Y) && - (currentLocation.Z == goal.Z)) - { - LogToConsole("Same location!, generating new one"); - goal = GetRandomLocationWithinRangeXZ(currentLocation, Config.Walk_Range); - } - - if (!Movement.CheckChunkLoading(GetWorld(), currentLocation, goal)) - { - useAlternativeMethod = true; - break; - } - - moved = MoveToLocation(goal, allowUnsafe: false, allowDirectTeleport: false); - } - - if (!useAlternativeMethod && Config.Use_Sneak) - { - // Solve the case when the bot was closed in 1x2, was sneaking, but then he was freed, this will make him not sneak anymore - previousSneakState = false; - Sneak(false); - return; - } - } - - SendText(Config.Command); - if (Config.Use_Sneak) - { - Sneak(previousSneakState); - previousSneakState = !previousSneakState; - } - - count = 0; - } - - private Location GetRandomLocationWithinRangeXZ(Location currentLocation, int range) - { - return new Location(currentLocation.X + random.Next(range * -1, range), currentLocation.Y, - currentLocation.Z + random.Next(range * -1, range)); - } - } -} diff --git a/MinecraftClient/ChatBots/AutoAttack.cs b/MinecraftClient/ChatBots/AutoAttack.cs deleted file mode 100644 index f851ca0af3..0000000000 --- a/MinecraftClient/ChatBots/AutoAttack.cs +++ /dev/null @@ -1,345 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Mapping; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - /// - /// The AutoAttack bot will automatically attack any hostile mob close to the player - /// - public class AutoAttack : ChatBot - { - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "AutoAttack"; - - public bool Enabled = false; - - [TomlInlineComment("$ChatBot.AutoAttack.Mode$")] - public AttackMode Mode = AttackMode.single; - - [TomlInlineComment("$ChatBot.AutoAttack.Priority$")] - public PriorityType Priority = PriorityType.distance; - - [TomlInlineComment("$ChatBot.AutoAttack.Cooldown_Time$")] - public CooldownConfig Cooldown_Time = new(); - - [TomlInlineComment("$ChatBot.AutoAttack.Interaction$")] - public InteractType Interaction = InteractType.Attack; - - [TomlInlineComment("$ChatBot.AutoAttack.Attack_Range$")] - public double Attack_Range = 4.0; - - [TomlInlineComment("$ChatBot.AutoAttack.Attack_Hostile$")] - public bool Attack_Hostile = true; - - [TomlInlineComment("$ChatBot.AutoAttack.Attack_Passive$")] - public bool Attack_Passive = false; - - [TomlInlineComment("$ChatBot.AutoAttack.List_Mode$")] - public ListType List_Mode = ListType.whitelist; - - [TomlInlineComment("$ChatBot.AutoAttack.Entites_List$")] - public List Entites_List = new() { EntityType.Zombie, EntityType.Cow }; - - public void OnSettingUpdate() - { - if (Cooldown_Time.Custom) - { - if (Cooldown_Time.Min <= 0) - Cooldown_Time.Min = 0.1; - if (Cooldown_Time.Max <= 0) - Cooldown_Time.Max = 0.1; - - if (Cooldown_Time.Min > Cooldown_Time.Max) - { - double temp = Cooldown_Time.Min; - Cooldown_Time.Min = Cooldown_Time.Max; - Cooldown_Time.Max = temp; - } - } - - if (Attack_Range < 1.0) - Attack_Range = 1.0; - - if (Attack_Range > 4.0) - Attack_Range = 4.0; - } - - public enum AttackMode { single, multi }; - - public enum PriorityType { distance, health }; - - public enum ListType { blacklist, whitelist }; - - public struct CooldownConfig - { - public bool Custom; - public bool RandomMode = false; - public double Min = 1.5; - public double Max = 2.5; - - public CooldownConfig() - { - Custom = false; - RandomMode = false; - Min = 1.5; - Max = 2.5; - } - } - } - - private readonly Dictionary entitiesToAttack = new(); // mobs within attack range - private int attackCooldown = 6; - private int attackCooldownCounter = 6; - private Double attackSpeed = 4; - private Double attackCooldownSeconds; - private readonly bool overrideAttackSpeed = false; - private readonly double attackRange = 4.0; - private Double serverTPS; - private float health = 100; - private readonly bool attackHostile = true; - private readonly bool attackPassive = false; - private readonly Random _random = new(); - - public AutoAttack() - { - overrideAttackSpeed = Config.Cooldown_Time.Custom; - if (Config.Cooldown_Time.Custom) - { - attackCooldownSeconds = Config.Cooldown_Time.Min; - attackCooldown = SecondsToAttackCooldownTicks(attackCooldownSeconds); - } - - attackHostile = Config.Attack_Hostile; - attackPassive = Config.Attack_Passive; - attackRange = Config.Attack_Range; - } - - public override void Initialize() - { - if (!GetEntityHandlingEnabled()) - { - LogToConsole(Translations.extra_entity_required); - LogToConsole(Translations.general_bot_unload); - UnloadBot(); - } - } - - public override void Update() - { - if (AutoEat.Eating | health == 0) - return; - - if (attackCooldownCounter == 0) - { - if (Config.Cooldown_Time.Custom && Config.Cooldown_Time.RandomMode) - { - double randomSeconds = _random.NextDouble() * (Config.Cooldown_Time.Max - Config.Cooldown_Time.Min) + Config.Cooldown_Time.Min; - attackCooldown = SecondsToAttackCooldownTicks(randomSeconds); - } - - attackCooldownCounter = attackCooldown; - if (entitiesToAttack.Count > 0) - { - if (Config.Mode == Configs.AttackMode.single) - { - int priorityEntity = 0; - if (Config.Priority == Configs.PriorityType.distance) // closest distance priority - { - double distance = 5; - foreach (var entity in entitiesToAttack) - { - var tmp = GetCurrentLocation().Distance(entity.Value.Location); - if (tmp < distance) - { - priorityEntity = entity.Key; - distance = tmp; - } - } - } - else // low health priority - { - float entityHealth = int.MaxValue; - foreach (var entity in entitiesToAttack) - { - if (entity.Value.Health < entityHealth) - { - priorityEntity = entity.Key; - entityHealth = entity.Value.Health; - } - } - } - - if (entitiesToAttack.ContainsKey(priorityEntity)) - { - // check entity distance and health again - if (ShouldAttackEntity(entitiesToAttack[priorityEntity])) - { - InteractEntity(priorityEntity, Config.Interaction); // hit the entity! - SendAnimation(Inventory.Hand.MainHand); // Arm animation - } - - - } - } - else - { - foreach (KeyValuePair entity in entitiesToAttack) - { - // check that we are in range once again. - if (ShouldAttackEntity(entity.Value)) - { - InteractEntity(entity.Key, Config.Interaction); // hit the entity! - } - - } - SendAnimation(Inventory.Hand.MainHand); // Arm animation - } - } - } - else - { - attackCooldownCounter--; - } - } - - public override void OnEntitySpawn(Entity entity) - { - ShouldAttackEntity(entity); - } - - public override void OnEntityDespawn(Entity entity) - { - if (entitiesToAttack.ContainsKey(entity.ID)) - { - entitiesToAttack.Remove(entity.ID); - } - } - - public override void OnEntityHealth(Entity entity, float health) - { - if (!IsAllowedToAttack(entity)) - return; - - if (entitiesToAttack.ContainsKey(entity.ID)) - { - entitiesToAttack[entity.ID].Health = health; - - if (entitiesToAttack[entity.ID].Health <= 0) - { - entitiesToAttack.Remove(entity.ID); - } - } - } - - private bool IsAllowedToAttack(Entity entity) - { - bool result = false; - - if (attackHostile && entity.Type.IsHostile()) - result = true; - - if (attackPassive && entity.Type.IsPassive()) - result = true; - - if (Config.Entites_List.Count > 0) - { - bool inList = Config.Entites_List.Contains(entity.Type); - if (Config.List_Mode == Configs.ListType.blacklist) - result = !inList && result; - else - result = inList; - } - - return result; - } - - public override void OnEntityMove(Entity entity) - { - ShouldAttackEntity(entity); - } - - public override void OnHealthUpdate(float health, int food) - { - this.health = health; - } - - public override void OnPlayerProperty(Dictionary prop) - { - if (overrideAttackSpeed) - return; - foreach (var attackSpeedKey in new[] { "generic.attackSpeed", "minecraft:generic.attack_speed" }) - { - // adjust auto attack cooldown for maximum attack damage - if (prop.ContainsKey(attackSpeedKey)) - { - if (attackSpeed != prop[attackSpeedKey]) - { - serverTPS = GetServerTPS(); - attackSpeed = prop[attackSpeedKey]; - attackCooldownSeconds = 1 / attackSpeed * (serverTPS / 20.0); // server tps will affect the cooldown - attackCooldown = SecondsToAttackCooldownTicks(attackCooldownSeconds); - } - } - } - } - - public override void OnServerTpsUpdate(double tps) - { - if (overrideAttackSpeed) - return; - - serverTPS = tps; - // re-calculate attack speed - attackCooldownSeconds = 1 / attackSpeed * (serverTPS / 20.0); // server tps will affect the cooldown - attackCooldown = SecondsToAttackCooldownTicks(attackCooldownSeconds); - } - - private static int SecondsToAttackCooldownTicks(double seconds) - { - seconds = Math.Min(int.MaxValue / (double)Settings.ClientTicksPerSecond, seconds); - return Math.Max(1, (int)Math.Truncate(seconds * Settings.ClientTicksPerSecond) + 1); - } - - /// - /// Checks to see if the entity should be attacked. If it should be attacked, it will add the entity - /// To a list of entities to attack every few ticks. - /// - /// The entity to handle - /// If the entity should be attacked - public bool ShouldAttackEntity(Entity entity) - { - if (!IsAllowedToAttack(entity) || entity.Health <= 0) - return false; - - bool isBeingAttacked = entitiesToAttack.ContainsKey(entity.ID); - if (GetCurrentLocation().Distance(entity.Location) <= attackRange) - { - // check to see if entity has not been marked as tracked, and if not, track it. - if (!isBeingAttacked) - { - entitiesToAttack.Add(entity.ID, entity); - } - - return true; - } - else - { - // remove marker on entity to attack it, as it is now out of range - if (isBeingAttacked) - { - entitiesToAttack.Remove(entity.ID); - } - - return false; - } - } - } -} diff --git a/MinecraftClient/ChatBots/AutoCraft.cs b/MinecraftClient/ChatBots/AutoCraft.cs deleted file mode 100644 index e0156941df..0000000000 --- a/MinecraftClient/ChatBots/AutoCraft.cs +++ /dev/null @@ -1,722 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.CommandHandler.Patch; -using MinecraftClient.Inventory; -using MinecraftClient.Mapping; -using MinecraftClient.Scripting; -using Tomlet.Attributes; -using static MinecraftClient.ChatBots.AutoCraft.Configs; - -namespace MinecraftClient.ChatBots -{ - public class AutoCraft : ChatBot - { - public const string CommandName = "autocraft"; - - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "AutoCraft"; - - public bool Enabled = false; - - [TomlInlineComment("$ChatBot.AutoCraft.CraftingTable$")] - public LocationConfig CraftingTable = new(123, 65, 456); - - [TomlInlineComment("$ChatBot.AutoCraft.OnFailure$")] - public OnFailConfig OnFailure = OnFailConfig.abort; - - [TomlPrecedingComment("$ChatBot.AutoCraft.Recipes$")] - public RecipeConfig[] Recipes = new RecipeConfig[] - { - new RecipeConfig( - Name: "Recipe-Name-1", - Type: CraftTypeConfig.player, - Result: ItemType.StoneBricks, - Slots: new ItemType[4] { ItemType.Stone, ItemType.Stone, ItemType.Stone, ItemType.Stone } - ), - new RecipeConfig( - Name: "Recipe-Name-2", - Type: CraftTypeConfig.table, - Result: ItemType.StoneBricks, - Slots: new ItemType[9] { - ItemType.Stone, ItemType.Stone, ItemType.Null, - ItemType.Stone, ItemType.Stone, ItemType.Null, - ItemType.Null, ItemType.Null, ItemType.Null, - } - ), - }; - - [NonSerialized] - public Location _Table_Location = Location.Zero; - - public void OnSettingUpdate() - { - _Table_Location = new Location(CraftingTable.X, CraftingTable.Y, CraftingTable.Z).ToFloor(); - - List nameList = new(); - foreach (RecipeConfig recipe in Recipes) - { - if (string.IsNullOrWhiteSpace(recipe.Name)) - { - recipe.Name = new Random().NextInt64().ToString(); - LogToConsole(BotName, Translations.bot_autoCraft_exception_name_miss); - } - if (nameList.Contains(recipe.Name)) - { - LogToConsole(BotName, string.Format(Translations.bot_autoCraft_exception_duplicate, recipe.Name)); - do - { - recipe.Name = new Random().NextInt64().ToString(); - } while (nameList.Contains(recipe.Name)); - } - nameList.Add(recipe.Name); - - int fixLength = -1; - if (recipe.Type == CraftTypeConfig.player && recipe.Slots.Length != 4) - fixLength = 4; - else if (recipe.Type == CraftTypeConfig.table && recipe.Slots.Length != 9) - fixLength = 9; - - if (fixLength > 0) - { - ItemType[] Slots = new ItemType[fixLength]; - for (int i = 0; i < fixLength; ++i) - Slots[i] = (i < recipe.Slots.Length) ? recipe.Slots[i] : ItemType.Null; - recipe.Slots = Slots; - LogToConsole(BotName, Translations.bot_autocraft_invaild_slots); - } - - if (recipe.Result == ItemType.Air || recipe.Result == ItemType.Null) - { - LogToConsole(BotName, Translations.bot_autocraft_invaild_result); - } - } - } - - public struct LocationConfig - { - public double X, Y, Z; - - public LocationConfig() - { - X = 0; - Y = 0; - Z = 0; - } - - public LocationConfig(double X, double Y, double Z) - { - this.X = X; - this.Y = Y; - this.Z = Z; - } - } - - public enum OnFailConfig { abort, wait } - - public record RecipeConfig - { - public string Name = "Recipe Name"; - - public CraftTypeConfig Type = CraftTypeConfig.player; - - public ItemType Result = ItemType.Air; - - public ItemType[] Slots = new ItemType[9] { - ItemType.Null, ItemType.Null, ItemType.Null, - ItemType.Null, ItemType.Null, ItemType.Null, - ItemType.Null, ItemType.Null, ItemType.Null, - }; - - public RecipeConfig() { } - - public RecipeConfig(string Name, CraftTypeConfig Type, ItemType Result, ItemType[] Slots) - { - this.Name = Name; - this.Type = Type; - this.Result = Result; - this.Slots = Slots; - } - } - - public enum CraftTypeConfig { player, table } - } - - private bool waitingForMaterials = false; - private bool waitingForUpdate = false; - private bool waitingForTable = false; - private bool craftingFailed = false; - private int inventoryInUse = -2; - private int index = 0; - private Recipe? recipeInUse; - private readonly List actionSteps = new(); - - private int updateDebounceValue = Settings.DoubleToTick(0.2); - private int updateDebounce = 0; - private readonly int updateTimeoutValue = Settings.ClientTicksPerSecond; - private int updateTimeout = 0; - private string timeoutAction = "unspecified"; - - private void ResetVar() - { - craftingFailed = false; - waitingForTable = false; - waitingForUpdate = false; - waitingForMaterials = false; - inventoryInUse = -2; - index = 0; - recipeInUse = null; - actionSteps.Clear(); - } - - private enum ActionType - { - LeftClick, - ShiftClick, - WaitForUpdate, - ResetCraftArea, - Repeat, - CheckResult - } - - /// - /// Represent a single action step of the whole crafting process - /// - private class ActionStep - { - /// - /// The action type of this action step - /// - public ActionType ActionType; - - /// - /// For storing data needed for processing - /// - /// -2 mean not used - public int Slot = -2; - - /// - /// For storing data needed for processing - /// - /// -2 mean not used - public int InventoryID = -2; - - /// - /// For storing data needed for processing - /// - public ItemType ItemType; - - public ActionStep(ActionType actionType) - { - ActionType = actionType; - } - public ActionStep(ActionType actionType, int inventoryID) - { - ActionType = actionType; - InventoryID = inventoryID; - } - public ActionStep(ActionType actionType, int inventoryID, int slot) - { - ActionType = actionType; - Slot = slot; - InventoryID = inventoryID; - } - public ActionStep(ActionType actionType, int inventoryID, ItemType itemType) - { - ActionType = actionType; - InventoryID = inventoryID; - ItemType = itemType; - } - } - - /// - /// Represent a crafting recipe - /// - private record Recipe - { - /// - /// The results item of this recipe - /// - public ItemType ResultItem; - - /// - /// Crafting table required for this recipe, playerInventory or Crafting - /// - public ContainerType CraftingAreaType; - - /// - /// Materials needed and their position - /// - /// position start with 1, from left to right, top to bottom - public Dictionary? Materials; - - public Recipe() { } - - public Recipe(Dictionary materials, ItemType resultItem, ContainerType type) - { - Materials = materials; - ResultItem = resultItem; - CraftingAreaType = type; - } - - /// - /// Convert the position of a defined recipe from playerInventory to Crafting - /// - /// - /// Converted recipe - /// so that it can be used in crafting table - public static Recipe ConvertToCraftingTable(Recipe recipe) - { - if (recipe.CraftingAreaType == ContainerType.PlayerInventory && recipe.Materials is not null) - { - if (recipe.Materials.ContainsKey(4)) - { - recipe.Materials[5] = recipe.Materials[4]; - recipe.Materials.Remove(4); - } - if (recipe.Materials.ContainsKey(3)) - { - recipe.Materials[4] = recipe.Materials[3]; - recipe.Materials.Remove(3); - } - } - return recipe; - } - } - - public override void Initialize() - { - if (!GetInventoryEnabled()) - { - LogToConsole(Translations.extra_inventory_required); - LogToConsole(Translations.general_bot_unload); - UnloadBot(); - return; - } - - McClient.dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CommandName) - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Then(l => l.Literal("list") - .Executes(r => OnCommandHelp(r.Source, "list"))) - .Then(l => l.Literal("start") - .Executes(r => OnCommandHelp(r.Source, "start"))) - .Then(l => l.Literal("stop") - .Executes(r => OnCommandHelp(r.Source, "stop"))) - .Then(l => l.Literal("help") - .Executes(r => OnCommandHelp(r.Source, "help"))) - ) - ); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Literal("list") - .Executes(r => OnCommandList(r.Source))) - .Then(l => l.Literal("start") - .Then(l => l.Argument("RecipeName", MccArguments.AutoCraftRecipeName()) - .Executes(r => OnCommandStart(r.Source, Arguments.GetString(r, "RecipeName"))))) - .Then(l => l.Literal("stop") - .Executes(r => OnCommandStop(r.Source))) - .Then(l => l.Literal("_help") - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Redirect(McClient.dispatcher.GetRoot().GetChild("help").GetChild(CommandName))) - ); - } - - public override void OnUnload() - { - McClient.dispatcher.Unregister(CommandName); - McClient.dispatcher.GetRoot().GetChild("help").RemoveChild(CommandName); - } - - private int OnCommandHelp(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "list" => Translations.bot_autoCraft_help_list, - "start" => Translations.bot_autoCraft_help_start, - "stop" => Translations.bot_autoCraft_help_stop, - "help" => Translations.bot_autoCraft_help_help, - _ => string.Format(Translations.bot_autoCraft_available_cmd, "load, list, reload, resetcfg, start, stop, help") - + '\n' + McClient.dispatcher.GetAllUsageString(CommandName, false), -#pragma warning restore format // @formatter:on - }); - } - - private int OnCommandList(CmdResult r) - { - StringBuilder nameList = new(); - foreach (RecipeConfig recipe in Config.Recipes) - nameList.Append(recipe.Name).Append(", "); - return r.SetAndReturn(CmdResult.Status.Done, string.Format(Translations.bot_autoCraft_cmd_list, Config.Recipes.Length, nameList.ToString())); - } - - private int OnCommandStart(CmdResult r, string name) - { - bool hasRecipe = false; - RecipeConfig? recipe = null; - foreach (RecipeConfig recipeConfig in Config.Recipes) - { - if (recipeConfig.Name == name) - { - hasRecipe = true; - recipe = recipeConfig; - break; - } - } - - if (hasRecipe) - { - ResetVar(); - PrepareCrafting(recipe!); - return r.SetAndReturn(CmdResult.Status.Done); - } - else - { - return r.SetAndReturn(CmdResult.Status.Fail, Translations.bot_autoCraft_recipe_not_exist); - } - } - - private int OnCommandStop(CmdResult r) - { - StopCrafting(); - return r.SetAndReturn(CmdResult.Status.Done, Translations.bot_autoCraft_stop); - } - - #region Core part of auto-crafting - - public override void OnInventoryUpdate(int inventoryId) - { - if ((waitingForUpdate && inventoryInUse == inventoryId) || (waitingForMaterials && inventoryInUse == inventoryId)) - { - // Because server might send us a LOT of update at once, even there is only a single slot updated. - // Using this to make sure we don't do things before inventory update finish - updateDebounce = updateDebounceValue; - } - } - - public override void OnInventoryOpen(int inventoryId) - { - if (waitingForTable) - { - if (GetInventories()[inventoryId].Type == ContainerType.Crafting) - { - waitingForTable = false; - ClearTimeout(); - // After table opened, we need to wait for server to update table inventory items - waitingForUpdate = true; - inventoryInUse = inventoryId; - PrepareCrafting(recipeInUse!); - } - } - } - - public override void Update() - { - if (updateDebounce > 0) - { - updateDebounce--; - if (updateDebounce <= 0) - InventoryUpdateFinished(); - } - if (updateTimeout > 0) - { - updateTimeout--; - if (updateTimeout <= 0) - HandleUpdateTimeout(); - } - } - - private void InventoryUpdateFinished() - { - if (waitingForUpdate || waitingForMaterials) - { - if (waitingForUpdate) - waitingForUpdate = false; - if (waitingForMaterials) - { - waitingForMaterials = false; - craftingFailed = false; - } - HandleNextStep(); - } - } - - private void OpenTable(Location location) - { - SendPlaceBlock(location, Direction.Up); - } - - /// - /// Prepare the crafting action steps by the given recipe name and start crafting - /// - /// Name of the recipe to craft - private void PrepareCrafting(RecipeConfig recipeConfig) - { - Dictionary materials = new(); - for (int i = 0; i < recipeConfig.Slots.Length; ++i) - if (recipeConfig.Slots[i] != ItemType.Null) - materials[i + 1] = recipeConfig.Slots[i]; - - ItemType ResultItem = recipeConfig.Result; - - ContainerType CraftingAreaType = - (recipeConfig.Type == CraftTypeConfig.player) ? ContainerType.PlayerInventory : ContainerType.Crafting; - - PrepareCrafting(new Recipe(materials, ResultItem, CraftingAreaType)); - } - - /// - /// Prepare the crafting action steps by the given recipe and start crafting - /// - /// Recipe to craft - private void PrepareCrafting(Recipe recipe) - { - recipeInUse = recipe; - if (recipeInUse.CraftingAreaType == ContainerType.PlayerInventory) - inventoryInUse = 0; - else - { - var inventories = GetInventories(); - foreach (var inventory in inventories) - if (inventory.Value.Type == ContainerType.Crafting) - inventoryInUse = inventory.Key; - if (inventoryInUse == -2) - { - // table required but not found. Try to open one - OpenTable(Config._Table_Location); - waitingForTable = true; - SetTimeout(Translations.bot_autoCraft_table_not_found); - return; - } - } - - if (recipe.Materials is not null) - { - foreach (KeyValuePair slot in recipe.Materials) - { - // Steps for moving items from inventory to crafting area - actionSteps.Add(new ActionStep(ActionType.LeftClick, inventoryInUse, slot.Value)); - actionSteps.Add(new ActionStep(ActionType.LeftClick, inventoryInUse, slot.Key)); - } - } - if (actionSteps.Count > 0) - { - // Wait for server to send us the crafting result - actionSteps.Add(new ActionStep(ActionType.WaitForUpdate, inventoryInUse, 0)); - // Check the crafting result is the item we want - actionSteps.Add(new ActionStep(ActionType.CheckResult, inventoryInUse, recipe.ResultItem)); - // Put item back to inventory. (Using shift-click can take all item at once) - actionSteps.Add(new ActionStep(ActionType.ShiftClick, inventoryInUse, 0)); - // We need to wait for server to update us after taking item from crafting result - actionSteps.Add(new ActionStep(ActionType.WaitForUpdate, inventoryInUse)); - // Repeat the whole process again - actionSteps.Add(new ActionStep(ActionType.Repeat)); - // Start crafting - LogToConsole(string.Format(Translations.bot_autoCraft_start, recipe.ResultItem)); - HandleNextStep(); - } - else LogToConsole(string.Format(Translations.bot_autoCraft_start_fail, recipe.ResultItem)); - } - - /// - /// Stop the crafting process by clearing crafting action steps and close the inventory - /// - private void StopCrafting() - { - actionSteps.Clear(); - // Put item back to inventory or they will be dropped - ClearCraftingArea(inventoryInUse); - // Closing inventory can make server to update our inventory - // Useful when - // - There are some items left in the crafting area - // - Resynchronize player inventory if using crafting table - if (GetInventories().ContainsKey(inventoryInUse)) - { - CloseInventory(inventoryInUse); - LogToConsole(string.Format(Translations.bot_autoCraft_close_inventory, inventoryInUse)); - } - } - - /// - /// Handle next crafting action step - /// - private void HandleNextStep() - { - while (actionSteps.Count > 0) - { - if (waitingForUpdate || waitingForMaterials || craftingFailed) break; - ActionStep step = actionSteps[index]; - index++; - switch (step.ActionType) - { - case ActionType.LeftClick: - if (step.Slot != -2) - { - WindowAction(step.InventoryID, step.Slot, WindowActionType.LeftClick); - } - else - { - int[] slots = GetInventories()[step.InventoryID].SearchItem(step.ItemType); - if (slots.Length > 0) - { - int ignoredSlot; - if (recipeInUse!.CraftingAreaType == ContainerType.PlayerInventory) - ignoredSlot = 9; - else - ignoredSlot = 10; - slots = slots.Where(slot => slot >= ignoredSlot).ToArray(); - if (slots.Length > 0) - WindowAction(step.InventoryID, slots[0], WindowActionType.LeftClick); - else - craftingFailed = true; - } - else craftingFailed = true; - } - break; - - case ActionType.ShiftClick: - if (step.Slot == 0) - { - WindowAction(step.InventoryID, step.Slot, WindowActionType.ShiftClick); - } - else craftingFailed = true; - break; - - // Compare the crafting result with the recipe result - case ActionType.CheckResult: - if (GetInventories()[step.InventoryID].Items.ContainsKey(0) - && GetInventories()[step.InventoryID].Items[0].Type == step.ItemType) - { - // OK - break; - } - else - { - // Bad, reset everything - ClearCraftingArea(step.InventoryID); - index = 0; - } - break; - - case ActionType.WaitForUpdate: - if (step.InventoryID != -2) - { - waitingForUpdate = true; - } - else craftingFailed = true; - break; - - case ActionType.ResetCraftArea: - if (step.InventoryID != -2) - ClearCraftingArea(step.InventoryID); - else - craftingFailed = true; - break; - - case ActionType.Repeat: - index = 0; - break; - } - HandleError(); - } - } - - /// - /// Handle any crafting error after a step was processed - /// - private void HandleError() - { - if (craftingFailed) - { - if (actionSteps[index - 1].ActionType == ActionType.LeftClick && actionSteps[index - 1].ItemType != ItemType.Air) - { - // Inform user the missing meterial name - LogToConsole(string.Format(Translations.bot_autoCraft_missing_material, actionSteps[index - 1].ItemType.ToString())); - } - if (Config.OnFailure == OnFailConfig.abort) - { - StopCrafting(); - LogToConsole(Translations.bot_autoCraft_aborted); - } - else - { - waitingForMaterials = true; - // Even though crafting failed, action step index will still increase - // we want to do that failed step again so decrease index by 1 - index--; - LogToConsole(Translations.bot_autoCraft_craft_fail); - } - } - } - - /// - /// Put any item left in the crafting area back to inventory - /// - /// Inventory ID to operate with - private void ClearCraftingArea(int inventoryId) - { - if (GetInventories().ContainsKey(inventoryId)) - { - var inventory = GetInventories()[inventoryId]; - int areaStart = 1; - int areaEnd = 4; - if (inventory.Type == ContainerType.Crafting) - { - areaEnd = 9; - } - List emptySlots = inventory.GetEmpytSlots().Where(s => s > 9).ToList(); - for (int i = areaStart; i <= areaEnd; i++) - { - if (inventory.Items.ContainsKey(i)) - { - if (emptySlots.Count != 0) - { - WindowAction(inventoryId, i, WindowActionType.LeftClick); - WindowAction(inventoryId, emptySlots[0], WindowActionType.LeftClick); - emptySlots.RemoveAt(0); - } - else - { - WindowAction(inventoryId, i, WindowActionType.DropItemStack); - } - } - } - } - } - - private void HandleUpdateTimeout() - { - LogToConsole(string.Format(Translations.bot_autoCraft_timeout, timeoutAction)); - } - - /// - /// Set the timeout. Used to detect the failure of open crafting table - /// - /// The reason to display if timeout - private void SetTimeout(string reason = "unspecified") - { - updateTimeout = updateTimeoutValue; - timeoutAction = reason; - } - - /// - /// Clear the timeout - /// - private void ClearTimeout() - { - updateTimeout = 0; - } - - #endregion - } -} diff --git a/MinecraftClient/ChatBots/AutoDig.cs b/MinecraftClient/ChatBots/AutoDig.cs deleted file mode 100644 index 04f3f6da94..0000000000 --- a/MinecraftClient/ChatBots/AutoDig.cs +++ /dev/null @@ -1,576 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.CommandHandler.Patch; -using MinecraftClient.Inventory; -using MinecraftClient.Mapping; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - public class AutoDig : ChatBot - { - public const string CommandName = "autodig"; - - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "AutoDig"; - - public bool Enabled = false; - - [TomlInlineComment("$ChatBot.AutoDig.Auto_Tool_Switch$")] - public bool Auto_Tool_Switch = false; - - [TomlInlineComment("$ChatBot.AutoDig.Apply_Efficiency_Enchantments$")] - public bool Apply_Efficiency_Enchantments = true; - - [TomlInlineComment("$ChatBot.AutoDig.Apply_Haste_Effects$")] - public bool Apply_Haste_Effects = true; - - [TomlInlineComment("$ChatBot.AutoDig.Durability_Limit$")] - public int Durability_Limit = 2; - - [TomlInlineComment("$ChatBot.AutoDig.Drop_Low_Durability_Tools$")] - public bool Drop_Low_Durability_Tools = false; - - [TomlInlineComment("$ChatBot.AutoDig.Mode$")] - public ModeType Mode = ModeType.lookat; - - [TomlPrecedingComment("$ChatBot.AutoDig.Locations$")] - public Coordination[] Locations = new Coordination[] { new(123.5, 64, 234.5), new(124.5, 63, 235.5) }; - - [TomlInlineComment("$ChatBot.AutoDig.Location_Order$")] - public OrderType Location_Order = OrderType.distance; - - [TomlInlineComment("$ChatBot.AutoDig.Auto_Start_Delay$")] - public double Auto_Start_Delay = 3.0; - - [TomlInlineComment("$ChatBot.AutoDig.Dig_Timeout$")] - public double Dig_Timeout = 60.0; - - [TomlInlineComment("$ChatBot.AutoDig.Log_Block_Dig$")] - public bool Log_Block_Dig = true; - - [TomlInlineComment("$ChatBot.AutoDig.List_Type$")] - public ListType List_Type = ListType.whitelist; - - public List Blocks = new() { Material.Cobblestone, Material.Stone }; - - [NonSerialized] - public Location[] _Locations = Array.Empty(); - - public void OnSettingUpdate() - { - Durability_Limit = Math.Max(0, Durability_Limit); - - if (Auto_Start_Delay >= 0) - Auto_Start_Delay = Math.Max(0.1, Auto_Start_Delay); - - if (Dig_Timeout >= 0) - Dig_Timeout = Math.Max(0.1, Dig_Timeout); - - _Locations = new Location[Locations.Length]; - for (int i = 0; i < Locations.Length; ++i) - _Locations[i] = new(Locations[i].x, Locations[i].y, Locations[i].z); - } - - public enum ModeType { lookat, fixedpos, both }; - - public enum ListType { blacklist, whitelist }; - - public enum OrderType { distance, index }; - - public struct Coordination - { - public double x, y, z; - - public Coordination() - { - x = 0; - y = 0; - z = 0; - } - - public Coordination(double x, double y, double z) - { - this.x = x; this.y = y; this.z = z; - } - } - } - - private bool inventoryEnabled; - - private int counter = 0; - private readonly Lock stateLock = new(); - private State state = State.WaitJoinGame; - - bool AlreadyWaitting = false; - private Location currentDig = Location.Zero; - - private enum State - { - WaitJoinGame, - WaitingStart, - Digging, - Stopping, - } - - public override void Initialize() - { - if (!GetTerrainEnabled()) - { - LogToConsole(Translations.extra_terrainandmovement_required); - LogToConsole(Translations.general_bot_unload); - UnloadBot(); - return; - } - - inventoryEnabled = GetInventoryEnabled(); - if (!inventoryEnabled && Config.Auto_Tool_Switch) - LogToConsole(Translations.bot_autodig_no_inv_handle); - - McClient.dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CommandName) - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Then(l => l.Literal("start") - .Executes(r => OnCommandHelp(r.Source, "start"))) - .Then(l => l.Literal("stop") - .Executes(r => OnCommandHelp(r.Source, "stop"))) - .Then(l => l.Literal("help") - .Executes(r => OnCommandHelp(r.Source, "help"))) - ) - ); - - var cmd = McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Literal("start") - .Executes(r => OnCommandStart(r.Source))) - .Then(l => l.Literal("stop") - .Executes(r => OnCommandStop(r.Source))) - .Then(l => l.Literal("_help") - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Redirect(McClient.dispatcher.GetRoot().GetChild("help").GetChild(CommandName))) - ); - - McClient.dispatcher.Register(l => l.Literal("digbot") - .Redirect(cmd) - ); - } - - public override void OnUnload() - { - McClient.dispatcher.Unregister("digbot"); - McClient.dispatcher.Unregister(CommandName); - McClient.dispatcher.GetRoot().GetChild("help").RemoveChild(CommandName); - } - - private int OnCommandHelp(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "start" => Translations.bot_autodig_help_start, - "stop" => Translations.bot_autodig_help_stop, - "help" => Translations.bot_autodig_help_help, - _ => string.Format(Translations.bot_autodig_available_cmd, "start, stop, help") - + '\n' + McClient.dispatcher.GetAllUsageString(CommandName, false), -#pragma warning restore format // @formatter:on - }); - } - - private int OnCommandStart(CmdResult r) - { - lock (stateLock) - { - counter = 0; - state = State.WaitingStart; - } - return r.SetAndReturn(CmdResult.Status.Done, Translations.bot_autodig_start); - } - - private int OnCommandStop(CmdResult r) - { - StopDigging(); - return r.SetAndReturn(CmdResult.Status.Done, Translations.bot_autodig_stop); - } - - private void StartDigging() - { - if (Config.Auto_Start_Delay > 0) - { - double delay = Config.Auto_Start_Delay; - LogToConsole(string.Format(Translations.bot_autodig_start_delay, delay)); - lock (stateLock) - { - counter = Settings.DoubleToTick(delay); - state = State.WaitingStart; - } - } - else - { - lock (stateLock) - { - state = State.WaitJoinGame; - } - } - } - - private void StopDigging() - { - state = State.Stopping; - lock (stateLock) - { - state = State.Stopping; - } - } - - private static int GetLegacyMaxDamage(ItemType itemType) - { - return itemType switch - { - ItemType.WoodenPickaxe or ItemType.WoodenAxe or ItemType.WoodenShovel or ItemType.WoodenSword or ItemType.WoodenHoe => 59, - ItemType.StonePickaxe or ItemType.StoneAxe or ItemType.StoneShovel or ItemType.StoneSword or ItemType.StoneHoe => 131, - ItemType.IronPickaxe or ItemType.IronAxe or ItemType.IronShovel or ItemType.IronSword or ItemType.IronHoe => 250, - ItemType.GoldenPickaxe or ItemType.GoldenAxe or ItemType.GoldenShovel or ItemType.GoldenSword or ItemType.GoldenHoe => 32, - ItemType.DiamondPickaxe or ItemType.DiamondAxe or ItemType.DiamondShovel or ItemType.DiamondSword or ItemType.DiamondHoe => 1561, - ItemType.NetheritePickaxe or ItemType.NetheriteAxe or ItemType.NetheriteShovel or ItemType.NetheriteSword or ItemType.NetheriteHoe => 2031, - ItemType.Shears => 238, - _ => 0 - }; - } - - private static int GetMaxDamage(Item item) - { - if (item.Components is not null) - { - var maxDamageComponent = item.Components.OfType().FirstOrDefault(); - if (maxDamageComponent is not null) - return maxDamageComponent.MaxDamage; - } - - return GetLegacyMaxDamage(item.Type); - } - - private static int GetRemainingDurability(Item item) - { - int maxDamage = GetMaxDamage(item); - return maxDamage > 0 ? maxDamage - item.Damage : int.MaxValue; - } - - private bool HasEnoughDurability(Item item) - { - return Config.Durability_Limit <= 0 || GetRemainingDurability(item) >= Config.Durability_Limit; - } - - private bool IsBelowDurabilityLimit(Item? item) - { - return item is not null && Config.Durability_Limit > 0 && GetRemainingDurability(item) < Config.Durability_Limit; - } - - private static bool IsRecommendedTool(Item? item, ItemType[] recommendedTools) - { - return item is not null && recommendedTools.Contains(item.Type); - } - - private bool SwapToolIntoHand(int sourceSlot, int handSlot) - { - return WindowAction(0, sourceSlot, WindowActionType.LeftClick) - && WindowAction(0, handSlot, WindowActionType.LeftClick) - && WindowAction(0, sourceSlot, WindowActionType.LeftClick); - } - - private bool EnsureSuitableTool(Material blockType) - { - if (!inventoryEnabled || !Config.Auto_Tool_Switch) - return true; - - ItemType[] recommendedTools = Material2Tool.GetCorrectToolForBlock(blockType); - if (recommendedTools.Length == 0) - return true; - - Container container = GetPlayerInventory(); - int handSlot = 36 + GetCurrentSlot(); - container.Items.TryGetValue(handSlot, out Item? currentTool); - - if (currentTool is not null && IsRecommendedTool(currentTool, recommendedTools) && HasEnoughDurability(currentTool)) - return true; - - foreach (ItemType recommendedTool in recommendedTools) - { - foreach ((int slot, Item item) in container.Items) - { - if (slot == handSlot || item.Type != recommendedTool || !HasEnoughDurability(item)) - continue; - - if (!SwapToolIntoHand(slot, handSlot)) - return false; - - LogToConsole(GetTimestamp() + ": " + string.Format(Translations.bot_autodig_switch, item.GetTypeString(), slot)); - - if (Config.Drop_Low_Durability_Tools && IsBelowDurabilityLimit(currentTool) && - WindowAction(0, slot, WindowActionType.DropItemStack)) - { - LogToConsole(GetTimestamp() + ": " + string.Format(Translations.bot_autodig_drop_low_durability, currentTool!.GetTypeString(), slot)); - } - - return true; - } - } - - return !IsBelowDurabilityLimit(currentTool); - } - - private static MiningCalculator.MiningOptions GetMiningOptions() - { - return new MiningCalculator.MiningOptions - { - ApplyEfficiencyEnchantments = Config.Apply_Efficiency_Enchantments, - ApplyHasteEffects = Config.Apply_Haste_Effects - }; - } - - public override void Update() - { - lock (stateLock) - { - switch (state) - { - case State.WaitJoinGame: - break; - case State.WaitingStart: - if (--counter < 0) - { - if (DoDigging()) - { - AlreadyWaitting = false; - state = State.Digging; - } - else - { - counter = 0; - state = State.WaitingStart; - } - } - break; - case State.Digging: - if (++counter > Settings.DoubleToTick(Config.Dig_Timeout)) - { - LogToConsole(GetTimestamp() + ": " + Translations.bot_autodig_dig_timeout); - state = State.WaitingStart; - counter = 0; - } - break; - case State.Stopping: - break; - } - } - } - - private bool DoDigging() - { - if (Config.Mode == Configs.ModeType.lookat || Config.Mode == Configs.ModeType.both) - { - (bool hasBlock, Location blockLoc, Block block) = GetLookingBlock(4.5, false); - if (!hasBlock) - { - if (!AlreadyWaitting) - { - AlreadyWaitting = true; - if (Config.Log_Block_Dig) - LogToConsole(Translations.cmd_dig_too_far); - } - return false; - } - else if (block.Type == Material.Air) - { - if (!AlreadyWaitting) - { - AlreadyWaitting = true; - if (Config.Log_Block_Dig) - LogToConsole(Translations.cmd_dig_no_block); - } - return false; - } - else if ((Config.List_Type == Configs.ListType.whitelist && Config.Blocks.Contains(block.Type)) || - (Config.List_Type == Configs.ListType.blacklist && !Config.Blocks.Contains(block.Type))) - { - if (Config.Mode == Configs.ModeType.lookat || - (Config.Mode == Configs.ModeType.both && Config._Locations.Contains(blockLoc))) - { - if (!EnsureSuitableTool(block.Type)) - return false; - - if (DigBlock(blockLoc, Direction.Down, lookAtBlock: false, miningOptions: GetMiningOptions())) - { - currentDig = blockLoc; - if (Config.Log_Block_Dig) - LogToConsole(string.Format(Translations.cmd_dig_dig, blockLoc.X, blockLoc.Y, blockLoc.Z, block.GetTypeString())); - return true; - } - else - { - LogToConsole(Translations.cmd_dig_fail); - return false; - } - } - else - { - if (!AlreadyWaitting) - { - AlreadyWaitting = true; - if (Config.Log_Block_Dig) - LogToConsole(Translations.bot_autodig_not_allow); - } - return false; - } - } - else - { - if (!AlreadyWaitting) - { - AlreadyWaitting = true; - if (Config.Log_Block_Dig) - LogToConsole(Translations.bot_autodig_not_allow); - } - return false; - } - } - else if (Config.Mode == Configs.ModeType.fixedpos && Config.Location_Order == Configs.OrderType.distance) - { - Location current = GetCurrentLocation(); - - double minDistance = double.MaxValue; - Location target = Location.Zero; - Block targetBlock = Block.Air; - foreach (Location location in Config._Locations) - { - Block block = GetWorld().GetBlock(location); - if (block.Type != Material.Air && - ((Config.List_Type == Configs.ListType.whitelist && Config.Blocks.Contains(block.Type)) || - (Config.List_Type == Configs.ListType.blacklist && !Config.Blocks.Contains(block.Type)))) - { - double distance = current.Distance(location); - if (distance < minDistance) - { - minDistance = distance; - target = location; - targetBlock = block; - } - } - } - - if (minDistance <= 6.0) - { - if (!EnsureSuitableTool(targetBlock.Type)) - return false; - - if (DigBlock(target, Direction.Down, lookAtBlock: true, miningOptions: GetMiningOptions())) - { - currentDig = target; - if (Config.Log_Block_Dig) - LogToConsole(string.Format(Translations.cmd_dig_dig, target.X, target.Y, target.Z, targetBlock.GetTypeString())); - return true; - } - else - { - LogToConsole(Translations.cmd_dig_fail); - return false; - } - } - else - { - if (!AlreadyWaitting) - { - AlreadyWaitting = true; - if (Config.Log_Block_Dig) - LogToConsole(Translations.cmd_dig_no_block); - } - return false; - } - } - else if (Config.Mode == Configs.ModeType.fixedpos && Config.Location_Order == Configs.OrderType.index) - { - for (int i = 0; i < Config._Locations.Length; ++i) - { - Location blockLoc = Config._Locations[i]; - Block block = GetWorld().GetBlock(blockLoc); - if (block.Type != Material.Air && - ((Config.List_Type == Configs.ListType.whitelist && Config.Blocks.Contains(block.Type)) || - (Config.List_Type == Configs.ListType.blacklist && !Config.Blocks.Contains(block.Type)))) - { - if (!EnsureSuitableTool(block.Type)) - return false; - - if (DigBlock(blockLoc, Direction.Down, lookAtBlock: true, miningOptions: GetMiningOptions())) - { - currentDig = blockLoc; - if (Config.Log_Block_Dig) - LogToConsole(string.Format(Translations.cmd_dig_dig, blockLoc.X, blockLoc.Y, blockLoc.Z, block.GetTypeString())); - return true; - } - else - { - LogToConsole(Translations.cmd_dig_fail); - return false; - } - } - } - - if (!AlreadyWaitting) - { - AlreadyWaitting = true; - if (Config.Log_Block_Dig) - LogToConsole(Translations.cmd_dig_no_block); - } - return false; - } - return false; - } - - public override void OnBlockChange(Location location, Block block) - { - if (location == currentDig) - { - lock (stateLock) - { - if (state == State.Digging && location == currentDig) - { - currentDig = Location.Zero; - counter = 0; - state = State.WaitingStart; - } - } - } - } - - public override void AfterGameJoined() - { - StartDigging(); - } - - public override void OnRespawn() - { - StartDigging(); - } - - public override void OnDeath() - { - StopDigging(); - } - - public override bool OnDisconnect(DisconnectReason reason, string message) - { - StopDigging(); - - return base.OnDisconnect(reason, message); - } - } -} diff --git a/MinecraftClient/ChatBots/AutoDrop.cs b/MinecraftClient/ChatBots/AutoDrop.cs deleted file mode 100644 index 5a7c56cbb6..0000000000 --- a/MinecraftClient/ChatBots/AutoDrop.cs +++ /dev/null @@ -1,244 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.CommandHandler.Patch; -using MinecraftClient.Inventory; -using MinecraftClient.Scripting; -using Tomlet.Attributes; -using static MinecraftClient.ChatBots.AutoDrop.Configs; - -namespace MinecraftClient.ChatBots -{ - public class AutoDrop : ChatBot - { - public const string CommandName = "autodrop"; - - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "AutoDrop"; - - public bool Enabled = false; - - [TomlInlineComment("$ChatBot.AutoDrop.Mode$")] - public DropMode Mode = DropMode.include; - - public List Items = new() { ItemType.Cobblestone, ItemType.Dirt }; - - public void OnSettingUpdate() { } - - public enum DropMode - { - include, // Items in list will be dropped - exclude, // Items in list will be kept - everything // Everything will be dropped - } - } - - private int updateDebounce = 0; - private readonly int updateDebounceValue = Settings.DoubleToTick(0.2); - private int inventoryUpdated = -1; - - public override void Initialize() - { - if (!GetInventoryEnabled()) - { - LogToConsole(Translations.extra_inventory_required); - LogToConsole(Translations.general_bot_unload); - UnloadBot(); - return; - } - - McClient.dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CommandName) - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Then(l => l.Literal("add") - .Executes(r => OnCommandHelp(r.Source, "add"))) - .Then(l => l.Literal("remove") - .Executes(r => OnCommandHelp(r.Source, "remove"))) - .Then(l => l.Literal("mode") - .Executes(r => OnCommandHelp(r.Source, "mode"))) - ) - ); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Literal("on") - .Executes(r => OnCommandEnable(r.Source, true))) - .Then(l => l.Literal("off") - .Executes(r => OnCommandEnable(r.Source, false))) - .Then(l => l.Literal("add") - .Then(l => l.Argument("ItemType", MccArguments.ItemType()) - .Executes(r => OnCommandAdd(r.Source, MccArguments.GetItemType(r, "ItemType"))))) - .Then(l => l.Literal("remove") - .Then(l => l.Argument("ItemType", MccArguments.ItemType()) - .Executes(r => OnCommandRemove(r.Source, MccArguments.GetItemType(r, "ItemType"))))) - .Then(l => l.Literal("list") - .Executes(r => OnCommandList(r.Source))) - .Then(l => l.Literal("mode") - .Then(l => l.Literal("include") - .Executes(r => OnCommandMode(r.Source, DropMode.include))) - .Then(l => l.Literal("exclude") - .Executes(r => OnCommandMode(r.Source, DropMode.exclude))) - .Then(l => l.Literal("everything") - .Executes(r => OnCommandMode(r.Source, DropMode.everything)))) - .Then(l => l.Literal("_help") - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Redirect(McClient.dispatcher.GetRoot().GetChild("help").GetChild(CommandName))) - ); - } - - public override void OnUnload() - { - McClient.dispatcher.Unregister(CommandName); - McClient.dispatcher.GetRoot().GetChild("help").RemoveChild(CommandName); - } - - private int OnCommandHelp(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "add" => Translations.cmd_inventory_help_usage + ": add ", - "remove" => Translations.cmd_inventory_help_usage + ": remove ", - "mode" => Translations.bot_autoDrop_unknown_mode, - _ => string.Format(Translations.general_available_cmd, "on, off, add, remove, list, mode") - + '\n' + McClient.dispatcher.GetAllUsageString(CommandName, false), -#pragma warning restore format // @formatter:on - }); - } - - private int OnCommandEnable(CmdResult r, bool enable) - { - if (enable) - { - Config.Enabled = true; - inventoryUpdated = 0; - OnUpdateFinish(); - return r.SetAndReturn(CmdResult.Status.Done, Translations.bot_autoDrop_on); - } - else - { - Config.Enabled = false; - return r.SetAndReturn(CmdResult.Status.Done, Translations.bot_autoDrop_off); - } - } - - private int OnCommandAdd(CmdResult r, ItemType item) - { - Config.Items.Add(item); - return r.SetAndReturn(CmdResult.Status.Done, string.Format(Translations.bot_autoDrop_added, item.ToString())); - } - - private int OnCommandRemove(CmdResult r, ItemType item) - { - if (Config.Items.Contains(item)) - { - Config.Items.Remove(item); - return r.SetAndReturn(CmdResult.Status.Done, string.Format(Translations.bot_autoDrop_removed, item.ToString())); - } - else - { - return r.SetAndReturn(CmdResult.Status.Fail, Translations.bot_autoDrop_not_in_list); - } - } - - private int OnCommandList(CmdResult r) - { - if (Config.Items.Count > 0) - return r.SetAndReturn(CmdResult.Status.Done, string.Format(Translations.bot_autoDrop_list, Config.Items.Count, string.Join("\n", Config.Items))); - else - return r.SetAndReturn(CmdResult.Status.Fail, Translations.bot_autoDrop_no_item); - } - - private int OnCommandMode(CmdResult r, DropMode mode) - { - Config.Mode = mode; - inventoryUpdated = 0; - OnUpdateFinish(); - return r.SetAndReturn(CmdResult.Status.Done, string.Format(Translations.bot_autoDrop_switched, Config.Mode.ToString())); - } - - public override void Update() - { - if (updateDebounce > 0) - { - updateDebounce--; - if (updateDebounce <= 0) - { - OnUpdateFinish(); - } - } - } - - public override void OnInventoryUpdate(int inventoryId) - { - if (Config.Enabled) - { - updateDebounce = updateDebounceValue; - // Always interact container if available (larger ID) because they included player inventory (ID 0) - if (inventoryId >= inventoryUpdated) - inventoryUpdated = inventoryId; - } - } - - private void OnUpdateFinish() - { - if (inventoryUpdated != -1) - { - if (!GetInventories().ContainsKey(inventoryUpdated)) - { - // Inventory updated but no inventory ? - LogDebugToConsole(string.Format(Translations.bot_autoDrop_no_inventory, inventoryUpdated)); - return; - } - var inventory = GetInventories()[inventoryUpdated]; - var items = inventory.Items.ToDictionary(entry => entry.Key, entry => entry.Value); - if (Config.Mode == DropMode.include) - { - foreach (var item in items) - { - // Ingore crafting result slot - if (item.Key == 0) - continue; - if (Config.Items.Contains(item.Value.Type)) - { - // Drop it !! - WindowAction(inventoryUpdated, item.Key, WindowActionType.DropItemStack); - } - } - } - else if (Config.Mode == DropMode.exclude) - { - foreach (var item in items) - { - // Ingore crafting result slot - if (item.Key == 0) - continue; - if (!Config.Items.Contains(item.Value.Type)) - { - // Drop it !! - WindowAction(inventoryUpdated, item.Key, WindowActionType.DropItemStack); - } - } - } - else - { - foreach (var item in items) - { - // Ingore crafting result slot - if (item.Key == 0) - continue; - // Drop it !! - WindowAction(inventoryUpdated, item.Key, WindowActionType.DropItemStack); - } - } - inventoryUpdated = -1; - } - } - } -} diff --git a/MinecraftClient/ChatBots/AutoEat.cs b/MinecraftClient/ChatBots/AutoEat.cs deleted file mode 100644 index eb9eea075c..0000000000 --- a/MinecraftClient/ChatBots/AutoEat.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using MinecraftClient.Inventory; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - public class AutoEat : ChatBot - { - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "AutoEat"; - - public bool Enabled = false; - - public int Threshold = 6; - - public void OnSettingUpdate() - { - if (Threshold > 20) - Threshold = 20; - else if (Threshold < 0) - Threshold = 0; - } - } - - byte LastSlot = 0; - public static bool Eating = false; - private int DelayCounter = 0; - - public override void Update() - { - if (DelayCounter > 0) - { - DelayCounter--; - if (DelayCounter == 0) - { - Eating = FindFoodAndEat(); - if (!Eating) - ChangeSlot(LastSlot); - } - } - } - - public override void OnHealthUpdate(float health, int food) - { - if (health <= 0) return; // player dead - if (((food <= Config.Threshold) || (food < 20 && health < 20)) && !Eating) - { - Eating = FindFoodAndEat(); - if (!Eating) - ChangeSlot(LastSlot); - } - // keep eating until full - if (food < 20 && Eating) - { - // delay 300ms - DelayCounter = 3; - } - if (food >= 20 && Eating) - { - Eating = false; - ChangeSlot(LastSlot); - } - } - - /// - /// Try to find food in the hotbar and eat it - /// - /// True if found - public bool FindFoodAndEat() - { - Container inventory = GetPlayerInventory(); - bool found = false; - byte CurrentSlot = GetCurrentSlot(); - if (!Eating) - LastSlot = CurrentSlot; - if (inventory.Items.ContainsKey(CurrentSlot + 36) && inventory.Items[CurrentSlot + 36].Type.IsFood()) - { - // no need to change slot - found = true; - } - else - { - for (int i = 36; i <= 44; i++) - { - if (!inventory.Items.ContainsKey(i)) continue; - if (inventory.Items[i].Type.IsFood()) - { - int slot = i - 36; - ChangeSlot((short)slot); - found = true; - break; - } - } - } - if (found) UseItemInHand(); - return found; - } - } -} diff --git a/MinecraftClient/ChatBots/AutoFishing.cs b/MinecraftClient/ChatBots/AutoFishing.cs deleted file mode 100644 index cf38156181..0000000000 --- a/MinecraftClient/ChatBots/AutoFishing.cs +++ /dev/null @@ -1,767 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.CommandHandler.Patch; -using MinecraftClient.Inventory; -using MinecraftClient.Mapping; -using MinecraftClient.Scripting; -using Tomlet.Attributes; -using static MinecraftClient.ChatBots.AutoFishing.Configs; - -namespace MinecraftClient.ChatBots -{ - /// - /// The AutoFishing bot semi-automates fishing. - /// The player needs to have a fishing rod in hand, then manually send it using the UseItem command. - /// - public class AutoFishing : ChatBot - { - public const string CommandName = "autofishing"; - - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "AutoFishing"; - - public bool Enabled = false; - - [TomlInlineComment("$ChatBot.AutoFishing.Antidespawn$")] - public bool Antidespawn = false; - - [TomlInlineComment("$ChatBot.AutoFishing.Mainhand$")] - public bool Mainhand = true; - - [TomlInlineComment("$ChatBot.AutoFishing.Auto_Start$")] - public bool Auto_Start = true; - - [TomlInlineComment("$ChatBot.AutoFishing.Cast_Delay$")] - public double Cast_Delay = 0.4; - - [TomlInlineComment("$ChatBot.AutoFishing.Fishing_Delay$")] - public double Fishing_Delay = 3.0; - - [TomlInlineComment("$ChatBot.AutoFishing.Fishing_Timeout$")] - public double Fishing_Timeout = 300.0; - - [TomlInlineComment("$ChatBot.AutoFishing.Durability_Limit$")] - public double Durability_Limit = 2; - - [TomlInlineComment("$ChatBot.AutoFishing.Auto_Rod_Switch$")] - public bool Auto_Rod_Switch = true; - - [TomlInlineComment("$ChatBot.AutoFishing.Stationary_Threshold$")] - public double Stationary_Threshold = 0.001; - - [TomlInlineComment("$ChatBot.AutoFishing.Hook_Threshold$")] - public double Hook_Threshold = 0.2; - - [TomlInlineComment("$ChatBot.AutoFishing.Enable_Velocity_Detection$")] - public bool Enable_Velocity_Detection = true; - - [TomlInlineComment("$ChatBot.AutoFishing.Velocity_Hook_Threshold$")] - public double Velocity_Hook_Threshold = -0.2; - - [TomlInlineComment("$ChatBot.AutoFishing.Enable_Sound_Detection$")] - public bool Enable_Sound_Detection = true; - - [TomlInlineComment("$ChatBot.AutoFishing.Sound_Distance$")] - public double Sound_Distance = 5.0; - - [TomlInlineComment("$ChatBot.AutoFishing.Detection_Warmup$")] - public double Detection_Warmup = 1.0; - - [TomlInlineComment("$ChatBot.AutoFishing.Log_Fish_Bobber$")] - public bool Log_Fish_Bobber = false; - - [TomlInlineComment("$ChatBot.AutoFishing.Enable_Move$")] - public bool Enable_Move = false; - - [TomlPrecedingComment("$ChatBot.AutoFishing.Movements$")] - public LocationConfig[] Movements = new LocationConfig[] - { - new LocationConfig(12.34, -23.45), - new LocationConfig(123.45, 64, -654.32, -25.14, 36.25), - new LocationConfig(-1245.63, 63.5, 1.2), - }; - - public void OnSettingUpdate() - { - if (Cast_Delay < 0) - Cast_Delay = 0; - - if (Fishing_Delay < 0) - Fishing_Delay = 0; - - if (Fishing_Timeout < 0) - Fishing_Timeout = 0; - - if (Durability_Limit < 0) - Durability_Limit = 0; - else if (Durability_Limit > 64) - Durability_Limit = 64; - - if (Stationary_Threshold < 0) - Stationary_Threshold = -Stationary_Threshold; - - if (Hook_Threshold < 0) - Hook_Threshold = -Hook_Threshold; - - if (Velocity_Hook_Threshold > 0) - Velocity_Hook_Threshold = -Velocity_Hook_Threshold; - - if (Sound_Distance < 0) - Sound_Distance = -Sound_Distance; - - if (Detection_Warmup < 0) - Detection_Warmup = 0; - } - - public struct LocationConfig - { - public Coordination? XYZ; - public Facing? facing; - - public LocationConfig() - { - XYZ = null; - facing = null; - } - - public LocationConfig(double yaw, double pitch) - { - this.XYZ = null; - this.facing = new(yaw, pitch); - } - - public LocationConfig(double x, double y, double z) - { - this.XYZ = new(x, y, z); - this.facing = null; - } - - public LocationConfig(double x, double y, double z, double yaw, double pitch) - { - this.XYZ = new(x, y, z); - this.facing = new(yaw, pitch); - } - - public struct Coordination - { - public double x, y, z; - - public Coordination() - { - x = 0; - y = 0; - z = 0; - } - - public Coordination(double x, double y, double z) - { - this.x = x; this.y = y; this.z = z; - } - } - - public struct Facing - { - public double yaw, pitch; - - public Facing() - { - yaw = 0; - pitch = 0; - } - - public Facing(double yaw, double pitch) - { - this.yaw = yaw; this.pitch = pitch; - } - } - } - } - - private int fishCount = 0; - private bool inventoryEnabled; - private int castTimeout = 12; - - private bool isFishing = false, isWaitingRod = false; - private Entity? fishingBobber; - private Location LastPos = Location.Zero; - private DateTime CaughtTime = DateTime.Now; - private DateTime BobberSpawnTime = DateTime.MinValue; - private int fishItemCounter = 15; - private Dictionary fishItemCnt = new(); - private Entity fishItem = new(-1, EntityType.Item, Location.Zero); - - private int counter = 0; - private readonly Lock stateLock = new(); - private FishingState state = FishingState.WaitJoinGame; - - private int curLocationIdx = 0, moveDir = 1; - float nextYaw = 0, nextPitch = 0; - - private enum FishingState - { - WaitJoinGame, - WaitingToCast, - CastingRod, - WaitingFishingBobber, - WaitingFishToBite, - StartMove, - WaitingMovement, - DurabilityCheck, - Stopping, - } - - public override void Initialize() - { - if (!GetEntityHandlingEnabled()) - { - LogToConsole(Translations.extra_entity_required); - state = FishingState.WaitJoinGame; - } - - inventoryEnabled = GetInventoryEnabled(); - if (!inventoryEnabled) - LogToConsole(Translations.bot_autoFish_no_inv_handle); - - McClient.dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CommandName) - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Then(l => l.Literal("start") - .Executes(r => OnCommandHelp(r.Source, "start"))) - .Then(l => l.Literal("stop") - .Executes(r => OnCommandHelp(r.Source, "stop"))) - .Then(l => l.Literal("status") - .Executes(r => OnCommandHelp(r.Source, "status"))) - .Then(l => l.Literal("help") - .Executes(r => OnCommandHelp(r.Source, "help"))) - ) - ); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Literal("start") - .Executes(r => OnCommandStart(r.Source))) - .Then(l => l.Literal("stop") - .Executes(r => OnCommandStop(r.Source))) - .Then(l => l.Literal("status") - .Executes(r => OnCommandStatus(r.Source)) - .Then(l => l.Literal("clear") - .Executes(r => OnCommandStatusClear(r.Source)))) - .Then(l => l.Literal("_help") - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Redirect(McClient.dispatcher.GetRoot().GetChild("help").GetChild(CommandName))) - ); - } - - public override void OnUnload() - { - McClient.dispatcher.Unregister(CommandName); - McClient.dispatcher.GetRoot().GetChild("help").RemoveChild(CommandName); - } - - private int OnCommandHelp(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "start" => Translations.bot_autoFish_help_start, - "stop" => Translations.bot_autoFish_help_stop, - "status" => Translations.bot_autoFish_help_status, - "help" => Translations.bot_autoFish_help_help, - _ => string.Format(Translations.bot_autoFish_available_cmd, "start, stop, status, help") - + '\n' + McClient.dispatcher.GetAllUsageString(CommandName, false), -#pragma warning restore format // @formatter:on - }); - } - - private int OnCommandStart(CmdResult r) - { - isFishing = false; - lock (stateLock) - { - isFishing = false; - counter = 0; - state = FishingState.StartMove; - } - return r.SetAndReturn(CmdResult.Status.Done, Translations.bot_autoFish_start); - } - - private int OnCommandStop(CmdResult r) - { - isFishing = false; - lock (stateLock) - { - isFishing = false; - if (state == FishingState.WaitingFishToBite) - UseFishRod(); - state = FishingState.Stopping; - } - StopFishing(); - return r.SetAndReturn(CmdResult.Status.Done, Translations.bot_autoFish_stop); - } - - private int OnCommandStatus(CmdResult r) - { - if (fishItemCnt.Count == 0) - return r.SetAndReturn(CmdResult.Status.Done, Translations.bot_autoFish_status_info); - - List> orderedList = fishItemCnt.OrderBy(x => x.Value).ToList(); - int maxLen = orderedList[^1].Value.ToString().Length; - StringBuilder sb = new(); - sb.Append(Translations.bot_autoFish_status_info); - foreach ((ItemType type, uint cnt) in orderedList) - { - sb.Append(Environment.NewLine); - - string cntStr = cnt.ToString(); - sb.Append(' ', maxLen - cntStr.Length).Append(cntStr); - sb.Append(" x "); - sb.Append(Item.GetTypeString(type)); - } - LogToConsole(sb.ToString()); - return r.SetAndReturn(CmdResult.Status.Done); - } - - private int OnCommandStatusClear(CmdResult r) - { - fishItemCnt = new(); - return r.SetAndReturn(CmdResult.Status.Done, Translations.bot_autoFish_status_clear); - } - - private void StartFishing() - { - isFishing = false; - if (Config.Auto_Start) - { - double delay = Config.Fishing_Delay; - LogToConsole(string.Format(Translations.bot_autoFish_start_at, delay)); - lock (stateLock) - { - isFishing = false; - counter = Settings.DoubleToTick(delay); - state = FishingState.StartMove; - } - } - else - { - lock (stateLock) - { - state = FishingState.WaitJoinGame; - } - } - } - - private void StopFishing() - { - isFishing = false; - lock (stateLock) - { - isFishing = false; - state = FishingState.Stopping; - } - fishItemCounter = 15; - } - - private void UseFishRod() - { - if (Config.Mainhand) - UseItemInHand(); - else - UseItemInLeftHand(); - } - - public override void Update() - { - if (fishItemCounter < 15) - ++fishItemCounter; - - lock (stateLock) - { - switch (state) - { - case FishingState.WaitJoinGame: - break; - case FishingState.WaitingToCast: - if (AutoEat.Eating) - counter = Settings.DoubleToTick(Config.Cast_Delay); - else if (--counter < 0) - state = FishingState.CastingRod; - break; - case FishingState.CastingRod: - UseFishRod(); - counter = 0; - state = FishingState.WaitingFishingBobber; - break; - case FishingState.WaitingFishingBobber: - if (++counter > castTimeout) - { - if (castTimeout < 6000) - castTimeout *= 2; // Exponential backoff - LogToConsole(GetShortTimestamp() + ": " + string.Format(Translations.bot_autoFish_cast_timeout, castTimeout / 10.0)); - - counter = Settings.DoubleToTick(Config.Cast_Delay); - state = FishingState.WaitingToCast; - } - break; - case FishingState.WaitingFishToBite: - if (++counter > Settings.DoubleToTick(Config.Fishing_Timeout)) - { - LogToConsole(GetShortTimestamp() + ": " + Translations.bot_autoFish_fishing_timeout); - - counter = Settings.DoubleToTick(Config.Cast_Delay); - state = FishingState.WaitingToCast; - } - break; - case FishingState.StartMove: - if (--counter < 0) - { - if (Config.Enable_Move && Config.Movements.Length > 0) - { - if (GetTerrainEnabled()) - { - UpdateLocation(Config.Movements); - state = FishingState.WaitingMovement; - } - else - { - LogToConsole(Translations.extra_terrainandmovement_required); - state = FishingState.WaitJoinGame; - } - } - else - { - counter = Settings.DoubleToTick(Config.Cast_Delay); - state = FishingState.DurabilityCheck; - goto case FishingState.DurabilityCheck; - } - } - break; - case FishingState.WaitingMovement: - if (!ClientIsMoving()) - { - LookAtLocation(nextYaw, nextPitch); - LogToConsole(string.Format(Translations.bot_autoFish_update_lookat, nextYaw, nextPitch)); - - state = FishingState.DurabilityCheck; - goto case FishingState.DurabilityCheck; - } - break; - case FishingState.DurabilityCheck: - if (DurabilityCheck()) - { - counter = Settings.DoubleToTick(Config.Cast_Delay); - state = FishingState.WaitingToCast; - } - break; - case FishingState.Stopping: - break; - } - } - } - - public override void OnEntitySpawn(Entity entity) - { - if (fishItemCounter < 15 && entity.Type == EntityType.Item && Math.Abs(entity.Location.Y - LastPos.Y) < 2.2 && - Math.Abs(entity.Location.X - LastPos.X) < 0.12 && Math.Abs(entity.Location.Z - LastPos.Z) < 0.12) - { - if (Config.Log_Fish_Bobber) - LogToConsole(string.Format("Item ({0}) spawn at {1}, distance = {2:0.00}", entity.ID, entity.Location, entity.Location.Distance(LastPos))); - fishItem = entity; - } - else if (entity.Type == EntityType.FishingBobber && entity.ObjectData == GetPlayerEntityID()) - { - if (Config.Log_Fish_Bobber) - LogToConsole(string.Format("FishingBobber spawn at {0}, distance = {1:0.00}", entity.Location, GetCurrentLocation().Distance(entity.Location))); - - fishItemCounter = 15; - - LogToConsole(GetShortTimestamp() + ": " + Translations.bot_autoFish_throw); - lock (stateLock) - { - fishingBobber = entity; - LastPos = entity.Location; - isFishing = true; - BobberSpawnTime = DateTime.Now; - - castTimeout = 24; - counter = 0; - state = FishingState.WaitingFishToBite; - } - } - } - - public override void OnEntityDespawn(Entity entity) - { - if (entity is not null && fishingBobber is not null && entity.Type == EntityType.FishingBobber && entity.ID == fishingBobber!.ID) - { - if (Config.Log_Fish_Bobber) - LogToConsole(string.Format("FishingBobber despawn at {0}", entity.Location)); - - if (isFishing) - { - isFishing = false; - - if (Config.Antidespawn) - { - LogToConsole(Translations.bot_autoFish_despawn); - - lock (stateLock) - { - counter = Settings.DoubleToTick(Config.Cast_Delay); - state = FishingState.WaitingToCast; - } - } - } - } - } - - public override void OnEntityMove(Entity entity) - { - if (isFishing && entity is not null && fishingBobber!.ID == entity.ID && - state == FishingState.WaitingFishToBite) - { - Location Pos = entity.Location; - double Dx = LastPos.X - Pos.X; - double Dy = LastPos.Y - Pos.Y; - double Dz = LastPos.Z - Pos.Z; - LastPos = Pos; - - if (Config.Log_Fish_Bobber) - LogToConsole(string.Format("FishingBobber {0} Dx={1:0.000000} Dy={2:0.000000} Dz={3:0.000000}", Pos, Dx, Math.Abs(Dy), Dz)); - - if (Math.Abs(Dx) < Math.Abs(Config.Stationary_Threshold) && - Math.Abs(Dz) < Math.Abs(Config.Stationary_Threshold) && - Math.Abs(Dy) > Math.Abs(Config.Hook_Threshold)) - { - TryCatchFish(); - } - } - } - - public override void OnEntityMetadata(Entity entity, Dictionary metadata) - { - if (fishItemCounter < 15 && entity.ID == fishItem.ID && metadata.TryGetValue(8, out object? itemObj)) - { - fishItemCounter = 15; - Item item = (Item)itemObj!; - LogToConsole(string.Format(Translations.bot_autoFish_got, item.ToFullString())); - if (fishItemCnt.ContainsKey(item.Type)) - fishItemCnt[item.Type] += (uint)item.Count; - else - fishItemCnt.Add(item.Type, (uint)item.Count); - } - } - - public override void OnEntityVelocity(Entity entity, double velocityX, double velocityY, double velocityZ) - { - if (!Config.Enable_Velocity_Detection || !CanUseAdvancedDetection()) - return; - - if (fishingBobber is null || entity.ID != fishingBobber.ID) - return; - - if (velocityY <= Config.Velocity_Hook_Threshold) - TryCatchFish(); - } - - public override void OnSoundEffect(string? soundName, Location? location, int category, float volume, float pitch, - Entity? sourceEntity) - { - if (!Config.Enable_Sound_Detection || !CanUseAdvancedDetection()) - return; - - if (!IsFishingBobberSplashSound(soundName)) - return; - - Location? soundLocation = location; - if (soundLocation is null && sourceEntity is not null) - soundLocation = sourceEntity.Location; - - if (soundLocation is null || fishingBobber is null) - return; - - if (soundLocation.Value.Distance(fishingBobber.Location) <= Config.Sound_Distance) - TryCatchFish(); - } - - public override void AfterGameJoined() - { - StartFishing(); - } - - public override void OnRespawn() - { - StartFishing(); - } - - public override void OnDeath() - { - StopFishing(); - } - - public override bool OnDisconnect(DisconnectReason reason, string message) - { - StopFishing(); - - fishingBobber = null; - LastPos = Location.Zero; - CaughtTime = DateTime.Now; - BobberSpawnTime = DateTime.MinValue; - - return base.OnDisconnect(reason, message); - } - - private bool CanUseAdvancedDetection() - { - if (!isFishing || fishingBobber is null || state != FishingState.WaitingFishToBite) - return false; - - return (DateTime.Now - BobberSpawnTime).TotalSeconds >= Config.Detection_Warmup; - } - - private void TryCatchFish() - { - if (!CanUseAdvancedDetection()) - return; - - // Prevent repeated catches from multiple packets of the same bite. - if ((DateTime.Now - CaughtTime).TotalSeconds <= 1) - return; - - isFishing = false; - CaughtTime = DateTime.Now; - OnCaughtFish(); - } - - private static bool IsFishingBobberSplashSound(string? soundName) - { - return string.Equals(soundName, "minecraft:entity.fishing_bobber.splash", - StringComparison.OrdinalIgnoreCase) - || string.Equals(soundName, "entity.fishing_bobber.splash", StringComparison.OrdinalIgnoreCase) - || string.Equals(soundName, "minecraft:entity.bobber.splash", StringComparison.OrdinalIgnoreCase) - || string.Equals(soundName, "entity.bobber.splash", StringComparison.OrdinalIgnoreCase); - } - - /// - /// Called when detected a fish is caught - /// - public void OnCaughtFish() - { - ++fishCount; - if (Config.Enable_Move && Config.Movements.Length > 0) - LogToConsole(GetShortTimestamp() + ": " + string.Format(Translations.bot_autoFish_caught_at, - fishingBobber!.Location.X, fishingBobber!.Location.Y, fishingBobber!.Location.Z, fishCount)); - else - LogToConsole(GetShortTimestamp() + ": " + string.Format(Translations.bot_autoFish_caught, fishCount)); - - lock (stateLock) - { - counter = 0; - state = FishingState.StartMove; - - fishItemCounter = 0; - UseFishRod(); - } - } - - private void UpdateLocation(LocationConfig[] locationList) - { - if (curLocationIdx >= locationList.Length) - { - curLocationIdx = Math.Max(0, locationList.Length - 2); - moveDir = -1; - } - else if (curLocationIdx < 0) - { - curLocationIdx = Math.Min(locationList.Length - 1, 1); - moveDir = 1; - } - - LocationConfig curConfig = locationList[curLocationIdx]; - - if (curConfig.facing is not null) - (nextYaw, nextPitch) = ((float)curConfig.facing.Value.yaw, (float)curConfig.facing.Value.pitch); - else - (nextYaw, nextPitch) = (GetYaw(), GetPitch()); - - if (curConfig.XYZ is not null) - { - Location current = GetCurrentLocation(); - Location goal = new(curConfig.XYZ.Value.x, curConfig.XYZ.Value.y, curConfig.XYZ.Value.z); - - bool isMoveSuccessed; - if (!Movement.CheckChunkLoading(GetWorld(), current, goal)) - { - isMoveSuccessed = false; - LogToConsole(string.Format(Translations.cmd_move_chunk_not_loaded, goal.X, goal.Y, goal.Z)); - } - else - { - isMoveSuccessed = MoveToLocation(goal, allowUnsafe: false, allowDirectTeleport: false); - } - - if (!isMoveSuccessed) - { - (nextYaw, nextPitch) = (GetYaw(), GetPitch()); - LogToConsole(string.Format(Translations.cmd_move_fail, goal)); - } - else - { - LogToConsole(string.Format(Translations.cmd_move_walk, goal, current)); - } - } - - curLocationIdx += moveDir; - } - - private bool DurabilityCheck() - { - if (!inventoryEnabled) - return true; - - bool useMainHand = Config.Mainhand; - Container container = GetPlayerInventory(); - - int itemSolt = useMainHand ? GetCurrentSlot() + 36 : 45; - - if (container.Items.TryGetValue(itemSolt, out Item? handItem) && - handItem.Type == ItemType.FishingRod && (64 - handItem.Damage) >= Config.Durability_Limit) - { - isWaitingRod = false; - return true; - } - else - { - if (!isWaitingRod) - LogToConsole(GetTimestamp() + ": " + Translations.bot_autoFish_no_rod); - - if (Config.Auto_Rod_Switch) - { - foreach ((int slot, Item item) in container.Items) - { - if (item.Type == ItemType.FishingRod && (64 - item.Damage) >= Config.Durability_Limit) - { - WindowAction(0, slot, WindowActionType.LeftClick); - WindowAction(0, itemSolt, WindowActionType.LeftClick); - WindowAction(0, slot, WindowActionType.LeftClick); - LogToConsole(GetTimestamp() + ": " + string.Format(Translations.bot_autoFish_switch, slot, (64 - item.Damage))); - isWaitingRod = false; - return true; - } - } - } - - isWaitingRod = true; - return false; - } - } - } -} diff --git a/MinecraftClient/ChatBots/AutoRelog.cs b/MinecraftClient/ChatBots/AutoRelog.cs deleted file mode 100644 index 3a07f7f434..0000000000 --- a/MinecraftClient/ChatBots/AutoRelog.cs +++ /dev/null @@ -1,203 +0,0 @@ -using System; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - /// - /// This bot automatically re-join the server if kick message contains predefined string (Server is restarting ...) - /// - public class AutoRelog : ChatBot - { - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "AutoRelog"; - - public bool Enabled = false; - - [TomlInlineComment("$ChatBot.AutoRelog.Delay$")] - public Range Delay = new(3); - - [TomlInlineComment("$ChatBot.AutoRelog.Retries$")] - public int Retries = -1; - - [TomlInlineComment("$ChatBot.AutoRelog.Ignore_Kick_Message$")] - public bool Ignore_Kick_Message = false; - - [TomlPrecedingComment("$ChatBot.AutoRelog.Kick_Messages$")] - public string[] Kick_Messages = new string[] { "Connection has been lost", "Server is restarting", "Server is full", "Too Many people" }; - - public void OnSettingUpdate() - { - Kick_Messages ??= Array.Empty(); - - if (!double.IsFinite(Delay.min)) - Delay.min = 0.1; - if (!double.IsFinite(Delay.max)) - Delay.max = 0.1; - - Delay.min = Math.Max(0.1, Delay.min); - Delay.max = Math.Max(0.1, Delay.max); - - double maxDelaySeconds = (uint.MaxValue - 1) / 1000D; - Delay.min = Math.Min(maxDelaySeconds, Delay.min); - Delay.max = Math.Min(maxDelaySeconds, Delay.max); - - if (Delay.min > Delay.max) - (Delay.min, Delay.max) = (Delay.max, Delay.min); - - if (Retries < -1) - Retries = -1; - } - - public struct Range - { - public double min, max; - - public Range() - { - min = 0; - max = 0; - } - - public Range(int value) - { - min = max = value; - } - - public Range(int min, int max) - { - this.min = min; - this.max = max; - } - } - } - - private static readonly AutoRelogRetryPolicy s_retryPolicy = new(TimeProvider.System); - private readonly long? sourceConnectionAttempt; - - /// - /// This bot automatically re-join the server if kick message contains predefined string - /// - /// Minimum delay before re-joining the server (in seconds) - /// Maximum delay before re-joining the server (in seconds) - /// Number of retries if connection fails (-1 = infinite) - public AutoRelog() : this(null) - { - } - - private AutoRelog(long? sourceConnectionAttempt) - { - this.sourceConnectionAttempt = sourceConnectionAttempt; - LogDebugToConsole(string.Format(Translations.bot_autoRelog_launch, Config.Retries)); - } - - public override void Initialize() - { - _Initialize(); - } - - public override void AfterGameJoined() - { - s_retryPolicy.MarkJoined(); - } - - public override void Update() - { - ResetRetriesAfterStableJoin(); - } - - private void _Initialize() - { - McClient.ReconnectionAttemptsLeft = Config.Retries; - if (Config.Ignore_Kick_Message) - { - LogDebugToConsole(Translations.bot_autoRelog_no_kick_msg); - } - } - - public override bool OnDisconnect(DisconnectReason reason, string message) - { - if (reason == DisconnectReason.UserLogout) - { - LogDebugToConsole(Translations.bot_autoRelog_ignore_user_logout); - return false; - } - - message = GetVerbatim(message); - LogDebugToConsole(string.Format(Translations.bot_autoRelog_disconnect_msg, message)); - - if (!AutoRelogRetryPolicy.ShouldReconnect( - reason, - message, - Config.Ignore_Kick_Message, - Config.Kick_Messages, - out string? matchedMessage)) - { - LogDebugToConsole(Translations.bot_autoRelog_reconnect_ignore); - return false; - } - - return LaunchDelayedReconnection(matchedMessage); - } - - private static void ResetRetriesAfterStableJoin() - { - if (s_retryPolicy.ResetAfterStableConnection()) - McClient.ReconnectionAttemptsLeft = Config.Retries; - } - - private static bool HasUnlimitedRetries() - { - return Config.Retries == -1; - } - - private bool LaunchDelayedReconnection(string? msg) - { - if (!s_retryPolicy.TryReserveAttempt(Config.Retries, out int retriesLeft)) - return false; - - double delay = Random.Shared.NextDouble() * (Config.Delay.max - Config.Delay.min) + Config.Delay.min; - LogDebugToConsole(string.Format(string.IsNullOrEmpty(msg) ? Translations.bot_autoRelog_reconnect_always : Translations.bot_autoRelog_reconnect, msg)); - - string retriesDisplay = HasUnlimitedRetries() - ? Translations.bot_autoRelog_retries_unlimited - : retriesLeft.ToString(); - - McClient.ReconnectionAttemptsLeft = retriesLeft; - long connectionAttempt = sourceConnectionAttempt ?? Handler.ConnectionAttempt; - if (Program.TryRestart( - connectionAttempt, - TimeSpan.FromSeconds(delay), - keepAccountAndServerSettings: true, - sourceCleanupCompletion: sourceConnectionAttempt.HasValue ? null : Handler.DisconnectCompletion)) - { - LogToConsole(string.Format(Translations.bot_autoRelog_wait_with_retries, delay, retriesDisplay)); - return true; - } - - s_retryPolicy.RollBackReservedAttempt(); - return Program.HasRestartPending(connectionAttempt); - } - - public static bool OnDisconnectStatic(DisconnectReason reason, string message) - { - return OnDisconnectStatic(reason, message, Program.CurrentConnectionAttempt); - } - - internal static bool OnDisconnectStatic(DisconnectReason reason, string message, long sourceConnectionAttempt) - { - if (Config.Enabled) - { - AutoRelog bot = new(sourceConnectionAttempt); - bot.Initialize(); - return bot.OnDisconnect(reason, message); - } - return false; - } - } -} diff --git a/MinecraftClient/ChatBots/AutoRelogRetryPolicy.cs b/MinecraftClient/ChatBots/AutoRelogRetryPolicy.cs deleted file mode 100644 index 259b707908..0000000000 --- a/MinecraftClient/ChatBots/AutoRelogRetryPolicy.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System; -using System.Threading; -using MinecraftClient.Scripting; - -namespace MinecraftClient.ChatBots -{ - internal sealed class AutoRelogRetryPolicy - { - internal static readonly TimeSpan StableConnectionThreshold = TimeSpan.FromSeconds(60); - - private readonly Lock stateLock = new(); - private readonly TimeProvider timeProvider; - private int attempts; - private DateTimeOffset? joinedAt; - - internal AutoRelogRetryPolicy(TimeProvider timeProvider) - { - ArgumentNullException.ThrowIfNull(timeProvider); - this.timeProvider = timeProvider; - } - - internal int Attempts - { - get - { - lock (stateLock) - return attempts; - } - } - - internal void MarkJoined() - { - lock (stateLock) - joinedAt = timeProvider.GetUtcNow(); - } - - internal bool ResetAfterStableConnection() - { - lock (stateLock) - { - if (attempts == 0 || joinedAt is not DateTimeOffset connectionStart) - return false; - - if (timeProvider.GetUtcNow() - connectionStart < StableConnectionThreshold) - return false; - - attempts = 0; - joinedAt = null; - return true; - } - } - - internal bool TryReserveAttempt(int retryLimit, out int retriesLeft) - { - lock (stateLock) - { - bool unlimited = retryLimit == -1; - if (!unlimited && attempts >= retryLimit) - { - retriesLeft = 0; - return false; - } - - attempts++; - joinedAt = null; - retriesLeft = unlimited ? -1 : Math.Max(0, retryLimit - attempts); - return true; - } - } - - internal void RollBackReservedAttempt() - { - lock (stateLock) - { - if (attempts > 0) - attempts--; - } - } - - internal static bool ShouldReconnect( - ChatBot.DisconnectReason reason, - string message, - bool ignoreKickMessage, - ReadOnlySpan kickMessages, - out string? matchedMessage) - { - matchedMessage = null; - - if (reason == ChatBot.DisconnectReason.UserLogout) - return false; - - if (reason == ChatBot.DisconnectReason.ConnectionLost || ignoreKickMessage) - return true; - - foreach (string candidate in kickMessages) - { - if (!string.IsNullOrEmpty(candidate) - && message.Contains(candidate, StringComparison.OrdinalIgnoreCase)) - { - matchedMessage = candidate; - return true; - } - } - - return false; - } - } -} diff --git a/MinecraftClient/ChatBots/AutoRespond.cs b/MinecraftClient/ChatBots/AutoRespond.cs deleted file mode 100644 index a9bb43eade..0000000000 --- a/MinecraftClient/ChatBots/AutoRespond.cs +++ /dev/null @@ -1,321 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Text; -using System.Text.RegularExpressions; -using MinecraftClient.CommandHandler; -using MinecraftClient.Scripting; -using Tomlet.Attributes; -using static MinecraftClient.Settings; - -namespace MinecraftClient.ChatBots -{ - /// - /// This bot automatically runs actions when a user sends a message matching a specified rule - /// - public class AutoRespond : ChatBot - { - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "AutoRespond"; - - public bool Enabled = false; - - public string Matches_File = @"matches.ini"; - - [TomlInlineComment("$ChatBot.AutoRespond.Match_Colors$")] - public bool Match_Colors = false; - - public void OnSettingUpdate() - { - Matches_File ??= string.Empty; - - if (!Enabled) return; - - if (!File.Exists(Matches_File)) - { - LogToConsole(BotName, string.Format(Translations.bot_autoRespond_file_not_found, Path.GetFullPath(Matches_File))); - LogToConsole(BotName, Translations.general_bot_unload); - Enabled = false; - } - } - } - - private List? respondRules; - private enum MessageType { Public, Private, Other }; - - /// - /// Describe a respond rule based on a simple match or a regex - /// - private class RespondRule - { - private readonly Regex? regex; - private readonly string? match; - private readonly string? actionPublic; - private readonly string? actionPrivate; - private readonly string? actionOther; - private readonly bool ownersOnly; - private readonly TimeSpan cooldown; - private DateTime cooldownExpiration; - - /// - /// Create a respond rule from a regex and a reponse message or command - /// - /// Regex - /// Internal command to run for public messages - /// Internal command to run for private messages - /// Internal command to run for any other messages - /// Only match messages from bot owners - /// Minimal cooldown between two matches - public RespondRule(Regex regex, string? actionPublic, string? actionPrivate, string? actionOther, bool ownersOnly, TimeSpan cooldown) - { - this.regex = regex; - match = null; - this.actionPublic = actionPublic; - this.actionPrivate = actionPrivate; - this.actionOther = actionOther; - this.ownersOnly = ownersOnly; - this.cooldown = cooldown; - cooldownExpiration = DateTime.MinValue; - } - - /// - /// Create a respond rule from a match string and a reponse message or command - /// - /// Match string - /// Internal command to run for public messages - /// Internal command to run for private messages - /// Only match messages from bot owners - /// Minimal cooldown between two matches - public RespondRule(string? match, string? actionPublic, string? actionPrivate, string? actionOther, bool ownersOnly, TimeSpan cooldown) - { - regex = null; - this.match = match; - this.actionPublic = actionPublic; - this.actionPrivate = actionPrivate; - this.actionOther = actionOther; - this.ownersOnly = ownersOnly; - this.cooldown = cooldown; - cooldownExpiration = DateTime.MinValue; - } - - /// - /// Match the respond rule to the specified string and return a message or command to send if a match is detected - /// - /// Player who have sent the message - /// Message to match against the regex or match string - /// Type of the message public/private message, or other message - /// Dictionary to populate with match variables in case of Regex match - /// Internal command to run as a response to this user, or null if no match has been detected - public string? Match(string username, string message, MessageType msgType, Dictionary localVars) - { - if (DateTime.Now < cooldownExpiration) - return null; - - string? toSend = null; - - if (ownersOnly && (String.IsNullOrEmpty(username) || !Settings.Config.Main.Advanced.BotOwners.Contains(username.ToLower()))) - return null; - - switch (msgType) - { - case MessageType.Public: toSend = actionPublic; break; - case MessageType.Private: toSend = actionPrivate; break; - case MessageType.Other: toSend = actionOther; break; - } - - if (String.IsNullOrEmpty(toSend)) - return null; - - if (regex is not null) - { - if (regex.IsMatch(message)) - { - cooldownExpiration = DateTime.Now + cooldown; - Match regexMatch = regex.Match(message); - localVars["match_0"] = regexMatch.Groups[0].Value; - for (int i = regexMatch.Groups.Count - 1; i >= 1; i--) - { - toSend = toSend.Replace("$" + i, regexMatch.Groups[i].Value); - localVars["match_" + i] = regexMatch.Groups[i].Value; - } - toSend = toSend.Replace("$u", username); - localVars["match_u"] = username; - return toSend; - } - } - else if (!String.IsNullOrEmpty(match)) - { - if (message.ToLower().Contains(match.ToLower())) - { - cooldownExpiration = DateTime.Now + cooldown; - localVars["match_0"] = message; - localVars["match_u"] = username; - return toSend.Replace("$u", username); - } - } - - return null; - } - - /// - /// Get a string representation of the RespondRule - /// - /// - public override string ToString() - { - return string.Format( - Translations.bot_autoRespond_match, - match, - regex, - actionPublic, - actionPrivate, - actionOther, - ownersOnly, - (int)cooldown.TotalSeconds - ); - } - } - - /// - /// Initialize the AutoRespond bot from the matches file - /// - public override void Initialize() - { - if (File.Exists(Config.Matches_File)) - { - Regex? matchRegex = null; - string? matchString = null; - string? matchAction = null; - string? matchActionPrivate = null; - string? matchActionOther = null; - bool ownersOnly = false; - TimeSpan cooldown = TimeSpan.Zero; - respondRules = new List(); - - LogDebugToConsole(string.Format(Translations.bot_autoRespond_loading, System.IO.Path.GetFullPath(Config.Matches_File))); - - foreach (string lineRAW in File.ReadAllLines(Config.Matches_File, Encoding.UTF8)) - { - string line = lineRAW.Split('#')[0].Trim(); - if (line.Length > 0) - { - if (line[0] == '[' && line[^1] == ']') - { - switch (line[1..^1].ToLower()) - { - case "match": - CheckAddMatch(matchRegex, matchString, matchAction, matchActionPrivate, matchActionOther, ownersOnly, cooldown); - matchRegex = null; - matchString = null; - matchAction = null; - matchActionPrivate = null; - matchActionOther = null; - ownersOnly = false; - cooldown = TimeSpan.Zero; - break; - } - } - else - { - string argName = line.Split('=')[0]; - if (line.Length > (argName.Length + 1)) - { - string argValue = line[(argName.Length + 1)..]; - switch (argName.ToLower()) - { - case "regex": matchRegex = new Regex(argValue); break; - case "match": matchString = argValue; break; - case "action": matchAction = argValue; break; - case "actionprivate": matchActionPrivate = argValue; break; - case "actionother": matchActionOther = argValue; break; - case "ownersonly": ownersOnly = bool.Parse(argValue); break; - case "cooldown": cooldown = TimeSpan.FromSeconds(int.Parse(argValue, NumberStyles.Any, CultureInfo.CurrentCulture)); break; - } - } - } - } - } - CheckAddMatch(matchRegex, matchString, matchAction, matchActionPrivate, matchActionOther, ownersOnly, cooldown); - } - else - { - LogToConsole(string.Format(Translations.bot_autoRespond_file_not_found, System.IO.Path.GetFullPath(Config.Matches_File))); - UnloadBot(); //No need to keep the bot active - } - } - - /// - /// Create a new respond rule from the provided arguments, only if they are valid: at least one match and one action - /// - /// Matching regex - /// Matching string - /// Action if the matching message is public - /// Action if the matching message is private - /// Only match messages from bot owners - /// Minimal cooldown between two matches - private void CheckAddMatch(Regex? matchRegex, string? matchString, string? matchAction, string? matchActionPrivate, string? matchActionOther, bool ownersOnly, TimeSpan cooldown) - { - if (matchRegex is not null || matchString is not null || matchAction is not null || matchActionPrivate is not null || matchActionOther is not null || ownersOnly || cooldown != TimeSpan.Zero) - { - RespondRule rule = matchRegex is not null - ? new RespondRule(matchRegex, matchAction, matchActionPrivate, matchActionOther, ownersOnly, cooldown) - : new RespondRule(matchString, matchAction, matchActionPrivate, matchActionOther, ownersOnly, cooldown); - - if (matchAction is not null || matchActionPrivate is not null || matchActionOther is not null) - { - if (matchRegex is not null || matchString is not null) - { - respondRules!.Add(rule); - LogDebugToConsole(string.Format(Translations.bot_autoRespond_loaded_match, rule)); - } - else LogDebugToConsole(string.Format(Translations.bot_autoRespond_no_trigger, rule)); - } - else LogDebugToConsole(string.Format(Translations.bot_autoRespond_no_action, rule)); - } - } - - /// - /// Process messages from the server and test them against all matches - /// - /// Text from the server - public override void GetText(string text) - { - //Remove colour codes - if (!Config.Match_Colors) - text = GetVerbatim(text); - - //Get Message type - string sender = "", message = ""; - MessageType msgType = MessageType.Other; - if (IsChatMessage(text, ref message, ref sender)) - msgType = MessageType.Public; - else if (IsPrivateMessage(text, ref message, ref sender)) - msgType = MessageType.Private; - else message = text; - - //Do not process messages sent by the bot itself - if (msgType == MessageType.Other || sender != InternalConfig.Username) - { - foreach (RespondRule rule in respondRules!) - { - Dictionary localVars = new(); - string? toPerform = rule.Match(sender, message, msgType, localVars); - if (!string.IsNullOrEmpty(toPerform)) - { - CmdResult response = new(); - LogToConsole(string.Format(Translations.bot_autoRespond_match_run, toPerform)); - PerformInternalCommand(toPerform, ref response, localVars); - if (response.status != CmdResult.Status.Done || !string.IsNullOrWhiteSpace(response.result)) - LogToConsole(response); - } - } - } - } - } -} diff --git a/MinecraftClient/ChatBots/ChatLog.cs b/MinecraftClient/ChatBots/ChatLog.cs deleted file mode 100644 index b4f94135d0..0000000000 --- a/MinecraftClient/ChatBots/ChatLog.cs +++ /dev/null @@ -1,152 +0,0 @@ -using System; -using System.IO; -using System.Threading; -using MinecraftClient.CommandHandler; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - /// - /// This bot saves the received messages in a text file. - /// - - public class ChatLog : ChatBot - { - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "ChatLog"; - - public bool Enabled = false; - - public bool Add_DateTime = true; - - public string Log_File = @"chatlog-%username%-%serverip%.txt"; - - public MessageFilter Filter = MessageFilter.messages; - - public void OnSettingUpdate() - { - Log_File ??= string.Empty; - - if (!Enabled) return; - - string Log_File_Full = Settings.Config.AppVar.ExpandVars(Log_File); - if (String.IsNullOrEmpty(Log_File_Full) || Log_File_Full.IndexOfAny(Path.GetInvalidPathChars()) >= 0) - { - LogToConsole(BotName, string.Format(Translations.bot_chatLog_invalid_file, Log_File_Full)); - LogToConsole(BotName, Translations.general_bot_unload); - Enabled = false; - } - } - - public enum MessageFilter { all, messages, chat, private_chat, internal_msg }; - } - - private bool saveOther = true; - private bool saveChat = true; - private bool savePrivate = true; - private bool saveInternal = true; - private readonly Lock logfileLock = new(); - - /// - /// This bot saves the messages received in the specified file, with some filters and date/time tagging. - /// - /// The file to save the log in - /// The kind of messages to save - /// Add a date and time before each message - - public ChatLog() - { - UpdateFilter(Config.Filter); - } - - public void UpdateFilter(Configs.MessageFilter filter) - { - switch (filter) - { - case Configs.MessageFilter.all: - saveOther = true; - savePrivate = true; - saveChat = true; - saveInternal = true; - break; - case Configs.MessageFilter.messages: - saveOther = false; - savePrivate = true; - saveChat = true; - saveInternal = false; - break; - case Configs.MessageFilter.chat: - saveOther = false; - savePrivate = false; - saveChat = true; - saveInternal = false; - break; - case Configs.MessageFilter.private_chat: - saveOther = false; - savePrivate = true; - saveChat = false; - saveInternal = false; - break; - case Configs.MessageFilter.internal_msg: - saveOther = false; - savePrivate = false; - saveChat = false; - saveInternal = true; - break; - } - } - - public override void GetText(string text) - { - text = GetVerbatim(text); - string sender = ""; - string message = ""; - - if (saveChat && IsChatMessage(text, ref message, ref sender)) - { - Save("Chat " + sender + ": " + message); - } - else if (savePrivate && IsPrivateMessage(text, ref message, ref sender)) - { - Save("Private " + sender + ": " + message); - } - else if (saveOther) - { - Save("Other: " + text); - } - } - - public override void OnInternalCommand(string commandName, string commandParams, CmdResult result) - { - if (saveInternal) - { - Save(string.Format("Internal {0}({1}): {2}", commandName, commandParams, result)); - } - } - - private void Save(string tosave) - { - if (Config.Add_DateTime) - tosave = GetTimestamp() + ' ' + tosave; - string Log_File_Full = Settings.Config.AppVar.ExpandVars(Config.Log_File); - lock (logfileLock) - { - string? directory = Path.GetDirectoryName(Log_File_Full); - if (!String.IsNullOrEmpty(directory) && !Directory.Exists(directory)) - Directory.CreateDirectory(directory); - FileStream stream = new(Log_File_Full, FileMode.OpenOrCreate); - StreamWriter writer = new(stream); - stream.Seek(0, SeekOrigin.End); - writer.WriteLine(tosave); - writer.Dispose(); - stream.Close(); - } - } - } -} diff --git a/MinecraftClient/ChatBots/DiscordBridge.cs b/MinecraftClient/ChatBots/DiscordBridge.cs deleted file mode 100644 index 3938ab6a7b..0000000000 --- a/MinecraftClient/ChatBots/DiscordBridge.cs +++ /dev/null @@ -1,529 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using System.Threading.Tasks; -using Brigadier.NET.Builder; -using DSharpPlus; -using DSharpPlus.Entities; -using DSharpPlus.Exceptions; -using Microsoft.Extensions.Logging; -using MinecraftClient.CommandHandler; -using MinecraftClient.CommandHandler.Patch; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - public class DiscordBridge : ChatBot - { - public const string CommandName = "dscbridge"; - - private enum BridgeDirection - { - Both = 0, - Minecraft, - Discord - } - - private static DiscordBridge? instance = null; - public bool IsConnected { get; private set; } - - private DiscordClient? discordBotClient; - private DiscordChannel? discordChannel; - private BridgeDirection bridgeDirection = BridgeDirection.Both; - - private readonly ConcurrentQueue aggregationBuffer = new(); - private Timer? aggregationTimer; - - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "DiscordBridge"; - - public bool Enabled = false; - - [TomlInlineComment("$ChatBot.DiscordBridge.Token$")] - public string Token = "your bot token here"; - - [TomlInlineComment("$ChatBot.DiscordBridge.GuildId$")] - public ulong GuildId = 1018553894831403028L; - - [TomlInlineComment("$ChatBot.DiscordBridge.ChannelId$")] - public ulong ChannelId = 1018565295654326364L; - - [TomlInlineComment("$ChatBot.DiscordBridge.OwnersIds$")] - public ulong[] OwnersIds = new[] { 978757810781323276UL }; - - [TomlInlineComment("$ChatBot.DiscordBridge.MessageSendTimeout$")] - public int Message_Send_Timeout = 3; - - [TomlInlineComment("$ChatBot.DiscordBridge.AllowOtherBotMessages$")] - public bool Allow_Other_Bot_Messages = false; - - [TomlInlineComment("$ChatBot.DiscordBridge.RelayAllMessages$")] - public bool Relay_All_Messages = false; - - [TomlInlineComment("$ChatBot.DiscordBridge.MessageAggregationInterval$")] - public double Message_Aggregation_Interval = 3.0; - - [TomlPrecedingComment("$ChatBot.DiscordBridge.Formats$")] - public string PrivateMessageFormat = "**[Private Message]** {username}: {message}"; - public string PublicMessageFormat = "{username}: {message}"; - public string TeleportRequestMessageFormat = "A new Teleport Request from **{username}**!"; - - public void OnSettingUpdate() - { - Message_Send_Timeout = Message_Send_Timeout <= 0 ? 3 : Message_Send_Timeout; - if (Message_Aggregation_Interval < 0) - Message_Aggregation_Interval = 0; - } - } - - public DiscordBridge() - { - instance = this; - } - - public override void Initialize() - { - McClient.dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CommandName) - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - ) - ); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Literal("direction") - .Then(l => l.Literal("both") - .Executes(r => OnCommandDirection(r.Source, BridgeDirection.Both))) - .Then(l => l.Literal("mc") - .Executes(r => OnCommandDirection(r.Source, BridgeDirection.Minecraft))) - .Then(l => l.Literal("discord") - .Executes(r => OnCommandDirection(r.Source, BridgeDirection.Discord))) - ) - .Then(l => l.Literal("_help") - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Redirect(McClient.dispatcher.GetRoot().GetChild("help").GetChild(CommandName))) - ); - - if (Config.Message_Aggregation_Interval > 0) - { - var intervalMs = (int)(Config.Message_Aggregation_Interval * 1000); - aggregationTimer = new Timer(_ => FlushAggregationBuffer(), null, intervalMs, intervalMs); - } - - Task.Run(async () => await MainAsync()); - } - - public override void OnUnload() - { - McClient.dispatcher.Unregister(CommandName); - McClient.dispatcher.GetRoot().GetChild("help").RemoveChild(CommandName); - StopAggregation(); - Disconnect(); - } - - private int OnCommandHelp(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => "dscbridge direction " - + '\n' + McClient.dispatcher.GetAllUsageString(CommandName, false), -#pragma warning restore format // @formatter:on - }); - } - - private int OnCommandDirection(CmdResult r, BridgeDirection direction) - { - string bridgeName; - switch (direction) - { - case BridgeDirection.Both: - bridgeName = Translations.bot_DiscordBridge_direction_both; - bridgeDirection = BridgeDirection.Both; - break; - - case BridgeDirection.Minecraft: - bridgeName = Translations.bot_DiscordBridge_direction_minecraft; - bridgeDirection = BridgeDirection.Minecraft; - break; - - case BridgeDirection.Discord: - bridgeName = Translations.bot_DiscordBridge_direction_discord; - bridgeDirection = BridgeDirection.Discord; - break; - - default: - goto case BridgeDirection.Both; - } - return r.SetAndReturn(CmdResult.Status.Done, string.Format(Translations.bot_DiscordBridge_direction, bridgeName)); - } - - private void FlushAggregationBuffer() - { - if (aggregationBuffer.IsEmpty || !CanSendMessages()) - return; - - var sb = new StringBuilder(); - while (aggregationBuffer.TryDequeue(out var line)) - { - if (sb.Length + line.Length + 1 > 1900) - { - SendMessage(sb.ToString()); - sb.Clear(); - } - - if (sb.Length > 0) - sb.AppendLine(); - sb.Append(line); - } - - if (sb.Length > 0) - SendMessage(sb.ToString()); - } - - private void StopAggregation() - { - if (aggregationTimer is not null) - { - aggregationTimer.Dispose(); - aggregationTimer = null; - } - - FlushAggregationBuffer(); - } - - ~DiscordBridge() - { - Disconnect(); - } - - private void Disconnect() - { - if (discordBotClient is not null) - { - try - { - if (discordChannel is not null) - discordBotClient.SendMessageAsync(discordChannel, new DiscordEmbedBuilder - { - Description = Translations.bot_DiscordBridge_disconnected, - Color = new DiscordColor(0xFF0000) - }).Wait(Config.Message_Send_Timeout * 1000); - } - catch (Exception e) - { - LogToConsole("§§4§l§f" + Translations.bot_DiscordBridge_canceled_sending); - LogDebugToConsole(e); - } - - discordBotClient.DisconnectAsync().Wait(); - IsConnected = false; - } - } - - public static DiscordBridge? GetInstance() - { - return instance; - } - - public override void GetText(string text) - { - if (!CanSendMessages()) - return; - - text = GetVerbatim(text).Trim(); - - if (string.IsNullOrEmpty(text)) - return; - - string message = ""; - string username = ""; - bool teleportRequest = false; - - if (IsPrivateMessage(text, ref message, ref username)) - message = Config.PrivateMessageFormat.Replace("{username}", username).Replace("{message}", message).Replace("{timestamp}", GetTimestamp()).Trim(); - else if (IsChatMessage(text, ref message, ref username)) - message = Config.PublicMessageFormat.Replace("{username}", username).Replace("{message}", message).Replace("{timestamp}", GetTimestamp()).Trim(); - else if (IsTeleportRequest(text, ref username)) - { - message = Config.TeleportRequestMessageFormat.Replace("{username}", username).Replace("{timestamp}", GetTimestamp()).Trim(); - teleportRequest = true; - } - else if (Config.Relay_All_Messages) - message = text; - else - return; - - if (teleportRequest) - { - var messageBuilder = new DiscordMessageBuilder() - .WithEmbed(new DiscordEmbedBuilder - { - Description = message, - Color = new DiscordColor(0x3399FF) - }) - .AddComponents(new DiscordComponent[]{ - new DiscordButtonComponent(ButtonStyle.Success, "accept_teleport", "Accept"), - new DiscordButtonComponent(ButtonStyle.Danger, "deny_teleport", "Deny") - }); - - SendMessage(messageBuilder); - return; - } - - string discordText = GetDiscordText(message); - - if (Config.Message_Aggregation_Interval > 0) - aggregationBuffer.Enqueue(discordText); - else - SendMessage(discordText); - } - - /// - /// Converts Minecraft § formatting codes to Discord Markdown equivalents - /// and strips remaining § codes. - /// Handles both properly closed formatting (§l...§r) and unclosed formatting (§l... end). - /// - private static string GetDiscordText(string text) - { - text = Regex.Replace(text, @"§l(.*?)(?:§r|$)", "**$1**"); - text = Regex.Replace(text, @"§m(.*?)(?:§r|$)", "~~$1~~"); - text = Regex.Replace(text, @"§n(.*?)(?:§r|$)", "__$1__"); - text = Regex.Replace(text, @"§o(.*?)(?:§r|$)", "*$1*"); - text = Regex.Replace(text, @"§.", ""); - return text; - } - - public void SendMessage(string message) - { - if (!CanSendMessages() || string.IsNullOrEmpty(message)) - return; - - try - { - discordBotClient!.SendMessageAsync(discordChannel, message).Wait(Config.Message_Send_Timeout * 1000); - } - catch (Exception e) - { - LogToConsole("§§4§l§f" + Translations.bot_DiscordBridge_canceled_sending); - LogDebugToConsole(e); - } - } - - public void SendMessage(DiscordMessageBuilder builder) - { - if (!CanSendMessages()) - return; - - try - { - discordBotClient!.SendMessageAsync(discordChannel, builder).Wait(Config.Message_Send_Timeout * 1000); - } - catch (Exception e) - { - LogToConsole("§§4§l§f" + Translations.bot_DiscordBridge_canceled_sending); - LogDebugToConsole(e); - } - } - - public void SendMessage(DiscordEmbedBuilder embedBuilder) - { - if (!CanSendMessages()) - return; - - try - { - discordBotClient!.SendMessageAsync(discordChannel, embedBuilder).Wait(Config.Message_Send_Timeout * 1000); - } - catch (Exception e) - { - LogToConsole("§§4§l§f" + Translations.bot_DiscordBridge_canceled_sending); - LogDebugToConsole(e); - } - } - public void SendImage(string filePath, string? text = null) - { - if (!CanSendMessages()) - return; - - try - { - using (var fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) - { - filePath = filePath[(filePath.IndexOf(Path.DirectorySeparatorChar) + 1)..]; - var messageBuilder = new DiscordMessageBuilder(); - - if (text is not null) - messageBuilder.WithContent(text); - - messageBuilder.AddFiles(new Dictionary() { { filePath, fs } }); - - discordBotClient!.SendMessageAsync(discordChannel, messageBuilder).Wait(Config.Message_Send_Timeout * 1000); - } - } - catch (Exception e) - { - LogToConsole("§§4§l§f" + Translations.bot_DiscordBridge_canceled_sending); - LogDebugToConsole(e); - } - } - - public void SendFile(FileStream fileStream) - { - if (!CanSendMessages()) - return; - - SendMessage(new DiscordMessageBuilder().AddFile(fileStream)); - } - - private bool CanSendMessages() - { - return discordBotClient is not null && discordChannel is not null && bridgeDirection != BridgeDirection.Minecraft; - } - - async Task MainAsync() - { - try - { - if (string.IsNullOrEmpty(Config.Token.Trim())) - { - LogToConsole(Translations.bot_DiscordBridge_missing_token); - UnloadBot(); - return; - } - - discordBotClient = new DiscordClient(new DiscordConfiguration() - { - Token = Config.Token.Trim(), - TokenType = TokenType.Bot, - AutoReconnect = true, - Intents = DiscordIntents.All, - MinimumLogLevel = Settings.Config.Logging.DebugMessages ? - (LogLevel.Trace | LogLevel.Information | LogLevel.Debug | LogLevel.Critical | LogLevel.Error | LogLevel.Warning) : LogLevel.None - }); - - try - { - await discordBotClient.GetGuildAsync(Config.GuildId); - } - catch (Exception e) - { - if (e is NotFoundException) - { - LogToConsole(string.Format(Translations.bot_DiscordBridge_guild_not_found, Config.GuildId)); - UnloadBot(); - return; - } - - LogDebugToConsole("Exception when trying to find the guild:"); - LogDebugToConsole(e); - } - - try - { - discordChannel = await discordBotClient.GetChannelAsync(Config.ChannelId); - } - catch (Exception e) - { - if (e is NotFoundException) - { - LogToConsole(string.Format(Translations.bot_DiscordBridge_channel_not_found, Config.ChannelId)); - UnloadBot(); - return; - } - - LogDebugToConsole("Exception when trying to find the channel:"); - LogDebugToConsole(e); - } - - discordBotClient.MessageCreated += async (source, e) => - { - if (e.Guild.Id != Config.GuildId) - return; - - if (e.Channel.Id != Config.ChannelId) - return; - - // Always ignore own messages to prevent loops - if (e.Author.Id == discordBotClient.CurrentUser.Id) - return; - - string message = e.Message.Content.Trim(); - - if (string.IsNullOrWhiteSpace(message)) - return; - - // Relay messages from other bots when configured, but never process commands from them. - // Skip relay when direction is Discord-only (Discord -> MC disabled). - if (e.Author.IsBot) - { - if (Config.Allow_Other_Bot_Messages && bridgeDirection != BridgeDirection.Discord) - SendText(message); - return; - } - - if (!Config.OwnersIds.Contains(e.Author.Id)) - return; - - if (bridgeDirection == BridgeDirection.Discord) - { - if (!message.StartsWith(".dscbridge")) - return; - } - - if (message.StartsWith(".")) - { - message = message[1..]; - await e.Message.CreateReactionAsync(DiscordEmoji.FromName(discordBotClient, ":gear:")); - - CmdResult result = new(); - PerformInternalCommand(message, ref result); - - await e.Message.DeleteOwnReactionAsync(DiscordEmoji.FromName(discordBotClient, ":gear:")); - await e.Message.CreateReactionAsync(DiscordEmoji.FromName(discordBotClient, ":white_check_mark:")); - await e.Message.RespondAsync($"{Translations.bot_DiscordBridge_command_executed}:\n```{result}```"); - } - else SendText(message); - }; - - discordBotClient.ComponentInteractionCreated += async (s, e) => - { - if (!(e.Id.Equals("accept_teleport") || e.Id.Equals("deny_teleport"))) - return; - - string result = e.Id.Equals("accept_teleport") ? "Accepted :white_check_mark:" : "Denied :x:"; - SendText(e.Id.Equals("accept_teleport") ? "/tpaccept" : "/tpdeny"); - await e.Interaction.CreateResponseAsync(InteractionResponseType.UpdateMessage, new DiscordInteractionResponseBuilder().WithContent(result)); - }; - - await discordBotClient.ConnectAsync(); - - await discordBotClient.SendMessageAsync(discordChannel, new DiscordEmbedBuilder - { - Description = Translations.bot_DiscordBridge_connected, - Color = new DiscordColor(0x00FF00) - }); - - IsConnected = true; - LogToConsole("§§2§l§f" + Translations.bot_DiscordBridge_connected); - await Task.Delay(-1); - } - catch (Exception e) - { - LogToConsole("§§4§l§f" + Translations.bot_DiscordBridge_unknown_error); - LogToConsole(e); - return; - } - } - } -} diff --git a/MinecraftClient/ChatBots/DiscordRpc.cs b/MinecraftClient/ChatBots/DiscordRpc.cs deleted file mode 100644 index e3ab09b36d..0000000000 --- a/MinecraftClient/ChatBots/DiscordRpc.cs +++ /dev/null @@ -1,727 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.IO.Pipes; -using System.Threading; -using DiscordRPC; -using DiscordRPC.IO; -using DiscordRPC.Logging; -using MinecraftClient.Mapping; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - /// - /// Displays a Discord Rich Presence status showing the player's - /// current Minecraft session information (server, health, dimension, etc.). - /// Requires a Discord Application ID from https://discord.com/developers/applications - /// - public class DiscordRpc : ChatBot - { - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "DiscordRpc"; - - public bool Enabled = false; - - [TomlInlineComment("$ChatBot.DiscordRpc.ApplicationId$")] - public string ApplicationId = string.Empty; - - [TomlInlineComment("$ChatBot.DiscordRpc.PresenceDetails$")] - public string PresenceDetails = "Playing on {server_host}:{server_port}"; - - [TomlInlineComment("$ChatBot.DiscordRpc.PresenceState$")] - public string PresenceState = "{dimension} - HP: {health}/{max_health}"; - - [TomlInlineComment("$ChatBot.DiscordRpc.LargeImageKey$")] - public string LargeImageKey = "mcc_icon"; - - [TomlInlineComment("$ChatBot.DiscordRpc.LargeImageText$")] - public string LargeImageText = "Minecraft Console Client"; - - [TomlInlineComment("$ChatBot.DiscordRpc.SmallImageKey$")] - public string SmallImageKey = string.Empty; - - [TomlInlineComment("$ChatBot.DiscordRpc.SmallImageText$")] - public string SmallImageText = string.Empty; - - [TomlInlineComment("$ChatBot.DiscordRpc.ShowServerAddress$")] - public bool ShowServerAddress = true; - - [TomlInlineComment("$ChatBot.DiscordRpc.ShowCoordinates$")] - public bool ShowCoordinates = true; - - [TomlInlineComment("$ChatBot.DiscordRpc.ShowHealth$")] - public bool ShowHealth = true; - - [TomlInlineComment("$ChatBot.DiscordRpc.ShowDimension$")] - public bool ShowDimension = true; - - [TomlInlineComment("$ChatBot.DiscordRpc.ShowGamemode$")] - public bool ShowGamemode = true; - - [TomlInlineComment("$ChatBot.DiscordRpc.ShowElapsedTime$")] - public bool ShowElapsedTime = true; - - [TomlInlineComment("$ChatBot.DiscordRpc.ShowPlayerCount$")] - public bool ShowPlayerCount = true; - - [TomlInlineComment("$ChatBot.DiscordRpc.UpdateIntervalSeconds$")] - public int UpdateIntervalSeconds = 10; - - public void OnSettingUpdate() - { - ApplicationId ??= string.Empty; - PresenceDetails ??= string.Empty; - PresenceState ??= string.Empty; - LargeImageKey ??= string.Empty; - LargeImageText ??= string.Empty; - SmallImageKey ??= string.Empty; - SmallImageText ??= string.Empty; - - if (UpdateIntervalSeconds < 1) - { - UpdateIntervalSeconds = 10; - LogToConsole(BotName, Translations.bot_DiscordRpc_invalid_interval); - } - } - } - - private DiscordRpcClient? _rpcClient; - private int _tickCounter; - private int _updateIntervalTicks; - private Timestamps? _sessionTimestamps; - private float _lastHealth; - - public override void Initialize() - { - if (string.IsNullOrWhiteSpace(Config.ApplicationId)) - { - LogToConsole(Translations.bot_DiscordRpc_missing_app_id); - UnloadBot(); - return; - } - - try - { - _rpcClient = OperatingSystem.IsLinux() - ? new DiscordRpcClient(Config.ApplicationId.Trim(), client: new DiscordRpcPipeClient()) - : new DiscordRpcClient(Config.ApplicationId.Trim()); - - _rpcClient.Logger = Settings.Config.Logging.DebugMessages - ? new ConsoleLogger(LogLevel.Trace) - : new ConsoleLogger(LogLevel.None); - - _rpcClient.OnReady += (_, e) => - { - LogToConsole(string.Format(Translations.bot_DiscordRpc_connected, e.User.Username)); - }; - - _rpcClient.OnConnectionFailed += (_, e) => - { - LogToConsole(string.Format(Translations.bot_DiscordRpc_connection_failed, e.FailedPipe)); - }; - - _rpcClient.Initialize(); - _updateIntervalTicks = Settings.DoubleToTick(Config.UpdateIntervalSeconds); - - LogToConsole(Translations.bot_DiscordRpc_initialized); - } - catch (Exception e) - { - LogToConsole(string.Format(Translations.bot_DiscordRpc_init_error, e.Message)); - LogDebugToConsole(e.StackTrace ?? string.Empty); - UnloadBot(); - } - } - - public override void OnUnload() - { - if (_rpcClient is { IsDisposed: false }) - { - _rpcClient.ClearPresence(); - _rpcClient.Dispose(); - } - - _rpcClient = null; - } - - public override void AfterGameJoined() - { - if (Config.ShowElapsedTime) - _sessionTimestamps = Timestamps.Now; - - _lastHealth = Handler.GetHealth(); - _tickCounter = 0; - SetPresence(); - } - - public override void Update() - { - _tickCounter++; - if (_tickCounter < _updateIntervalTicks) - return; - - _tickCounter = 0; - SetPresence(); - } - - public override void OnHealthUpdate(float health, int food) - { - _lastHealth = health; - } - - public override bool OnDisconnect(DisconnectReason reason, string message) - { - if (_rpcClient is { IsDisposed: false }) - _rpcClient.ClearPresence(); - - return false; - } - - private void SetPresence() - { - if (_rpcClient is null or { IsDisposed: true }) - return; - - try - { - string details = ReplacePlaceholders(Config.PresenceDetails); - string state = ReplacePlaceholders(Config.PresenceState); - - var presence = new RichPresence - { - Details = TruncateForDiscord(details, 128), - State = TruncateForDiscord(state, 128) - }; - - // Assets (images) - var assets = new Assets(); - bool hasAssets = false; - - if (!string.IsNullOrWhiteSpace(Config.LargeImageKey)) - { - assets.LargeImageKey = Config.LargeImageKey.Trim(); - assets.LargeImageText = TruncateForDiscord( - ReplacePlaceholders(Config.LargeImageText), 128); - hasAssets = true; - } - - if (!string.IsNullOrWhiteSpace(Config.SmallImageKey)) - { - assets.SmallImageKey = Config.SmallImageKey.Trim(); - assets.SmallImageText = TruncateForDiscord( - ReplacePlaceholders(Config.SmallImageText), 128); - hasAssets = true; - } - - if (hasAssets) - presence.Assets = assets; - - // Timestamps - if (Config.ShowElapsedTime && _sessionTimestamps is not null) - presence.Timestamps = _sessionTimestamps; - - // Player count as party - if (Config.ShowPlayerCount) - { - string[] onlinePlayers = GetOnlinePlayers(); - int playerCount = onlinePlayers.Length; - if (playerCount > 0) - { - presence.Party = new Party - { - ID = $"mcc_{GetServerHost()}_{GetServerPort()}", - Size = playerCount, - Max = playerCount - }; - } - } - - _rpcClient.SetPresence(presence); - } - catch (Exception e) - { - LogDebugToConsole(string.Format(Translations.bot_DiscordRpc_update_error, e.Message)); - } - } - - private string ReplacePlaceholders(string template) - { - if (string.IsNullOrEmpty(template)) - return string.Empty; - - string serverHost = Config.ShowServerAddress ? GetServerHost() : "Hidden"; - int serverPort = GetServerPort(); - string serverPortStr = Config.ShowServerAddress ? serverPort.ToString() : "****"; - string username = GetUsername(); - float health = Handler.GetHealth(); - int foodLevel = Handler.GetSaturation(); - Location location = GetCurrentLocation(); - string[] onlinePlayers = GetOnlinePlayers(); - int gamemode = GetGamemode(); - int protocolVersion = GetProtocolVersion(); - - string healthStr = Config.ShowHealth ? ((int)Math.Ceiling(health)).ToString() : "?"; - string maxHealthStr = Config.ShowHealth ? "20" : "?"; - string foodStr = Config.ShowHealth ? foodLevel.ToString() : "?"; - string xStr = Config.ShowCoordinates ? ((int)location.X).ToString() : "?"; - string yStr = Config.ShowCoordinates ? ((int)location.Y).ToString() : "?"; - string zStr = Config.ShowCoordinates ? ((int)location.Z).ToString() : "?"; - - string dimensionName = Config.ShowDimension ? "Unknown" : "Hidden"; - if (Config.ShowDimension) - { - try - { - var dim = World.GetDimension(); - dimensionName = dim.Name ?? "Unknown"; - - // Clean up the dimension name for display - if (dimensionName.StartsWith("minecraft:", StringComparison.Ordinal)) - dimensionName = dimensionName["minecraft:".Length..]; - - dimensionName = dimensionName switch - { - "overworld" => "Overworld", - "the_nether" => "The Nether", - "the_end" => "The End", - _ => dimensionName - }; - } - catch - { - // World may not be available - } - } - - string gamemodeStr = Config.ShowGamemode - ? gamemode switch - { - 0 => "Survival", - 1 => "Creative", - 2 => "Adventure", - 3 => "Spectator", - _ => "Unknown" - } - : "Hidden"; - - return template - .Replace("{server_host}", serverHost) - .Replace("{server_port}", serverPortStr) - .Replace("{username}", username) - .Replace("{health}", healthStr) - .Replace("{max_health}", maxHealthStr) - .Replace("{food}", foodStr) - .Replace("{dimension}", dimensionName) - .Replace("{gamemode}", gamemodeStr) - .Replace("{x}", xStr) - .Replace("{y}", yStr) - .Replace("{z}", zStr) - .Replace("{player_count}", onlinePlayers.Length.ToString()) - .Replace("{protocol}", protocolVersion.ToString()); - } - - private static string TruncateForDiscord(string value, int maxLength) - { - if (string.IsNullOrEmpty(value)) - return string.Empty; - - return value.Length <= maxLength ? value : value[..(maxLength - 3)] + "..."; - } - - /// - /// Flatpak Discord exposes the RPC socket under app/com.discordapp.Discord, - /// but the currently published DiscordRichPresence package does not probe that path. - /// - private sealed class DiscordRpcPipeClient : INamedPipeClient - { - private const string DiscordPipePrefix = "discord-ipc-"; - private const int MaximumPipeVariations = 10; - - private static readonly string[] s_unixPackageDirectories = - [ - // Official Discord clients - "app/com.discordapp.Discord", - "snap.discord", - - // Community desktop clients / wrappers - "app/dev.vencord.Vesktop", - ".flatpak/dev.vencord.Vesktop/xdg-run", - "app/org.equicord.equibop", - "app/io.github.equicord.equibop", - "app/xyz.armcord.ArmCord", - "app/io.github.spacingbat3.webcord" - ]; - - private readonly byte[] _buffer = new byte[PipeFrame.MAX_SIZE]; - private readonly Queue _frameQueue = new(); - private readonly Lock _frameQueueLock = new(); - private readonly Lock _streamLock = new(); - - private int _connectedPipe; - private NamedPipeClientStream? _stream; - private volatile bool _isClosed = true; - private volatile bool _isDisposed; - - public ILogger Logger { get; set; } = new NullLogger(); - - public bool IsConnected - { - get - { - if (_isClosed) - return false; - - lock (_streamLock) - return _stream is { IsConnected: true }; - } - } - - [Obsolete("The connected pipe is not neccessary information.")] - public int ConnectedPipe => _connectedPipe; - - public bool Connect(int pipe) - { - Logger.Trace("DiscordRpcPipeClient.Connect({0})", pipe); - - if (_isDisposed) - throw new ObjectDisposedException(nameof(DiscordRpcPipeClient)); - - if (pipe > 9) - throw new ArgumentOutOfRangeException(nameof(pipe), "Argument cannot be greater than 9"); - - int startPipe = pipe >= 0 ? pipe : 0; - - foreach (string pipeName in GetPipeCandidates(startPipe)) - { - if (AttemptConnection(pipeName)) - { - BeginReadStream(); - return true; - } - } - - return false; - } - - public bool ReadFrame(out PipeFrame frame) - { - if (_isDisposed) - throw new ObjectDisposedException(nameof(DiscordRpcPipeClient)); - - lock (_frameQueueLock) - { - if (_frameQueue.Count == 0) - { - frame = default; - return false; - } - - frame = _frameQueue.Dequeue(); - return true; - } - } - - public bool WriteFrame(PipeFrame frame) - { - if (_isDisposed) - throw new ObjectDisposedException(nameof(DiscordRpcPipeClient)); - - if (_isClosed || !IsConnected) - { - Logger.Error("Failed to write frame because the stream is closed"); - return false; - } - - try - { - frame.WriteStream(_stream); - return true; - } - catch (IOException io) - { - Logger.Error("Failed to write frame because of a IO Exception: {0}", io.Message); - } - catch (ObjectDisposedException) - { - Logger.Warning("Failed to write frame as the stream was already disposed"); - } - catch (InvalidOperationException) - { - Logger.Warning("Failed to write frame because of a invalid operation"); - } - - return false; - } - - public void Close() - { - if (_isClosed) - { - Logger.Warning("Tried to close a already closed pipe."); - return; - } - - try - { - lock (_streamLock) - { - if (_stream is not null) - { - try - { - _stream.Flush(); - _stream.Dispose(); - } - catch - { - } - - _stream = null; - _isClosed = true; - } - else - { - Logger.Warning("Stream was closed, but no stream was available to begin with!"); - } - } - } - catch (ObjectDisposedException) - { - Logger.Warning("Tried to dispose already disposed stream"); - } - finally - { - _isClosed = true; - } - } - - public void Dispose() - { - if (_isDisposed) - return; - - if (!_isClosed) - Close(); - - lock (_streamLock) - { - _stream?.Dispose(); - _stream = null; - } - - _isDisposed = true; - } - - private bool AttemptConnection(string pipeName) - { - if (_isDisposed) - throw new ObjectDisposedException(nameof(DiscordRpcPipeClient)); - - try - { - lock (_streamLock) - { - Logger.Info("Attempting to connect to {0}", pipeName); - _stream = new NamedPipeClientStream(".", pipeName, PipeDirection.InOut, PipeOptions.Asynchronous); - _stream.Connect(0); - - Logger.Trace("Waiting for connection..."); - while (!_stream.IsConnected) - Thread.Sleep(10); - } - - Logger.Info("Connected to {0}", pipeName); - _connectedPipe = int.Parse(pipeName[(pipeName.LastIndexOf('-') + 1)..], System.Globalization.CultureInfo.InvariantCulture); - _isClosed = false; - } - catch (Exception e) - { - Logger.Error("Failed connection to {0}. {1}", pipeName, e.Message); - Close(); - } - - Logger.Trace("Done. Result: {0}", _isClosed); - return !_isClosed; - } - - private void BeginReadStream() - { - if (_isClosed) - return; - - try - { - lock (_streamLock) - { - if (_stream is not { IsConnected: true }) - return; - - Logger.Trace("Beginning Read of {0} bytes", _buffer.Length); - _stream.BeginRead(_buffer, 0, _buffer.Length, EndReadStream, _stream.IsConnected); - } - } - catch (ObjectDisposedException) - { - Logger.Warning("Attempted to start reading from a disposed pipe"); - } - catch (InvalidOperationException) - { - Logger.Warning("Attempted to start reading from a closed pipe"); - } - catch (Exception e) - { - Logger.Error("An exception occurred while starting to read a stream: {0}", e.Message); - Logger.Error(e.StackTrace); - } - } - - private void EndReadStream(IAsyncResult callback) - { - Logger.Trace("Ending Read"); - int bytes; - - try - { - lock (_streamLock) - { - if (_stream is not { IsConnected: true }) - return; - - bytes = _stream.EndRead(callback); - } - } - catch (IOException) - { - Logger.Warning("Attempted to end reading from a closed pipe"); - return; - } - catch (NullReferenceException) - { - Logger.Warning("Attempted to read from a null pipe"); - return; - } - catch (ObjectDisposedException) - { - Logger.Warning("Attempted to end reading from a disposed pipe"); - return; - } - catch (Exception e) - { - Logger.Error("An exception occurred while ending a read of a stream: {0}", e.Message); - Logger.Error(e.StackTrace); - return; - } - - Logger.Trace("Read {0} bytes", bytes); - - if (bytes > 0) - { - using MemoryStream memory = new(_buffer, 0, bytes); - try - { - PipeFrame frame = new(); - if (frame.ReadStream(memory)) - { - Logger.Trace("Read a frame: {0}", frame.Opcode); - lock (_frameQueueLock) - _frameQueue.Enqueue(frame); - } - else - { - Logger.Error("Pipe failed to read from the data received by the stream."); - Close(); - } - } - catch (Exception e) - { - Logger.Error("An exception has occurred while trying to parse the pipe data: {0}", e.Message); - Close(); - } - } - else - { - Logger.Error("Empty frame was read on {0}, aborting.", Environment.OSVersion); - Close(); - } - - if (!_isClosed && IsConnected) - { - Logger.Trace("Starting another read"); - BeginReadStream(); - } - } - - private static IEnumerable GetPipeCandidates(int startPipe) - { - if (OperatingSystem.IsWindows()) - { - for (int i = startPipe; i < MaximumPipeVariations; i++) - yield return $"{DiscordPipePrefix}{i}"; - - yield break; - } - - foreach (string runtimeDir in GetUnixRuntimeDirectories()) - { - for (int index = startPipe; index < MaximumPipeVariations; index++) - { - string pipeFileName = $"{DiscordPipePrefix}{index}"; - - foreach (string packageDirectory in s_unixPackageDirectories) - { - string packagePipe = Path.Combine(runtimeDir, packageDirectory, pipeFileName); - if (File.Exists(packagePipe)) - yield return packagePipe; - } - - string defaultPipe = Path.Combine(runtimeDir, pipeFileName); - if (File.Exists(defaultPipe)) - yield return defaultPipe; - - foreach (string packageDirectory in s_unixPackageDirectories) - { - string packagePipe = Path.Combine(runtimeDir, packageDirectory, pipeFileName); - if (!File.Exists(packagePipe)) - yield return packagePipe; - } - - if (!File.Exists(defaultPipe)) - yield return defaultPipe; - } - } - } - - private static IEnumerable GetUnixRuntimeDirectories() - { - HashSet yielded = new(StringComparer.Ordinal); - - string[] candidates = - [ - Environment.GetEnvironmentVariable("XDG_RUNTIME_DIR") ?? string.Empty, - Environment.GetEnvironmentVariable("TMPDIR") ?? string.Empty, - Environment.GetEnvironmentVariable("TMP") ?? string.Empty, - Environment.GetEnvironmentVariable("TEMP") ?? string.Empty, - Path.GetTempPath(), - "/tmp" - ]; - - foreach (string candidate in candidates) - { - if (string.IsNullOrWhiteSpace(candidate)) - continue; - - string normalized = candidate.TrimEnd(Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar); - if (yielded.Add(normalized)) - yield return normalized; - } - } - } - } -} diff --git a/MinecraftClient/ChatBots/Farmer.cs b/MinecraftClient/ChatBots/Farmer.cs deleted file mode 100644 index fe33176a5c..0000000000 --- a/MinecraftClient/ChatBots/Farmer.cs +++ /dev/null @@ -1,911 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Threading; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.CommandHandler.Patch; -using MinecraftClient.Commands; -using MinecraftClient.Inventory; -using MinecraftClient.Mapping; -using MinecraftClient.Protocol.Handlers; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - public class Farmer : ChatBot - { - public const string CommandName = "farmer"; - - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] private const string BotName = "Farmer"; - - public bool Enabled = false; - - [TomlInlineComment("$ChatBot.Farmer.Delay_Between_Tasks$")] - public double Delay_Between_Tasks = 1.0; - - public void OnSettingUpdate() - { - if (Delay_Between_Tasks < 1.0) - Delay_Between_Tasks = 1.0; - } - } - - private enum State - { - SearchingForCropsToBreak = 0, - SearchingForFarmlandToPlant, - BoneMealingCrops, - CollectingItems - } - - public enum CropType - { - Beetroot, - Carrot, - Melon, - NetherWart, - Pumpkin, - Potato, - Wheat - } - - private State state = State.SearchingForCropsToBreak; - private CropType cropType = CropType.Wheat; - private int farmingRadius = 30; - private bool running = false; - private bool allowUnsafe = false; - private bool allowTeleport = false; - private bool debugEnabled = false; - - private int Delay_Between_Tasks_Millisecond => (int)Math.Round(Config.Delay_Between_Tasks * 1000); - - private const string commandDescription = - "farmer [radius:] [unsafe:] [teleport:] [debug:]|stop>"; - - public override void Initialize() - { - if (GetProtocolVersion() < Protocol18Handler.MC_1_8_Version) - { - LogToConsole(Translations.bot_farmer_not_implemented); - return; - } - - if (!GetTerrainEnabled()) - { - LogToConsole(Translations.bot_farmer_needs_terrain); - return; - } - - if (!GetInventoryEnabled()) - { - LogToConsole(Translations.bot_farmer_needs_inventory); - return; - } - - McClient.dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CommandName) - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - ) - ); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Literal("stop") - .Executes(r => OnCommandStop(r.Source))) - .Then(l => l.Literal("start") - .Then(l => l.Argument("CropType", MccArguments.FarmerCropType()) - .Executes(r => OnCommandStart(r.Source, MccArguments.GetFarmerCropType(r, "CropType"), null)) - .Then(l => l.Argument("OtherArgs", Arguments.GreedyString()) - .Executes(r => OnCommandStart(r.Source, MccArguments.GetFarmerCropType(r, "CropType"), - Arguments.GetString(r, "OtherArgs")))))) - .Then(l => l.Literal("_help") - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Redirect(McClient.dispatcher.GetRoot().GetChild("help").GetChild(CommandName))) - ); - } - - public override void OnUnload() - { - running = false; - BotMovementLock.Instance?.UnLock("Farmer"); - McClient.dispatcher.Unregister(CommandName); - McClient.dispatcher.GetRoot().GetChild("help").RemoveChild(CommandName); - } - - private int OnCommandHelp(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => Translations.bot_farmer_desc + ": " + commandDescription - + '\n' + McClient.dispatcher.GetAllUsageString(CommandName, false), -#pragma warning restore format // @formatter:on - }); - } - - private int OnCommandStop(CmdResult r) - { - if (!running) - { - return r.SetAndReturn(CmdResult.Status.Fail, Translations.bot_farmer_already_stopped); - } - else - { - running = false; - return r.SetAndReturn(CmdResult.Status.Done, Translations.bot_farmer_stopping); - } - } - - private int OnCommandStart(CmdResult r, CropType whatToFarm, string? otherArgs) - { - if (running) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.bot_farmer_already_running); - - if (!IsCropAvailableForProtocol(whatToFarm, GetProtocolVersion())) - return r.SetAndReturn(CmdResult.Status.Fail, - string.Format(Translations.bot_farmer_crop_unavailable, whatToFarm, "1.9")); - - var movementLock = BotMovementLock.Instance; - if (movementLock is { IsLocked: true }) - return r.SetAndReturn(CmdResult.Status.Fail, - string.Format(Translations.bot_common_movement_lock_held, "Farmer", movementLock.LockedBy)); - - var radius = 30; - - state = State.SearchingForFarmlandToPlant; - cropType = whatToFarm; - allowUnsafe = false; - allowTeleport = false; - debugEnabled = false; - - if (!string.IsNullOrWhiteSpace(otherArgs)) - { - var args = otherArgs.ToLower().Split(' ', StringSplitOptions.TrimEntries); - foreach (var currentArg in args) - { - if (!currentArg.Contains(':')) - { - LogToConsole( - $"§§6§1§0{string.Format(Translations.bot_farmer_warining_invalid_parameter, currentArg)}"); - continue; - } - - var parts = currentArg.Split(":", StringSplitOptions.TrimEntries); - - if (parts.Length != 2) - { - LogToConsole( - $"§§6§1§0{string.Format(Translations.bot_farmer_warining_invalid_parameter, currentArg)}"); - continue; - } - - switch (parts[0]) - { - case "r": - case "radius": - if (!int.TryParse(parts[1], NumberStyles.Any, CultureInfo.CurrentCulture, out radius)) - LogToConsole($"§§6§1§0{Translations.bot_farmer_invalid_radius}"); - - if (radius <= 0) - { - LogToConsole($"§§6§1§0{Translations.bot_farmer_invalid_radius}"); - radius = 30; - } - - break; - - case "f": - case "unsafe": - if (allowUnsafe) - break; - - if (parts[1].Equals("true") || parts[1].Equals("1")) - { - LogToConsole($"§§6§1§0{Translations.bot_farmer_warining_force_unsafe}"); - allowUnsafe = true; - } - else allowUnsafe = false; - - break; - - case "t": - case "teleport": - if (allowTeleport) - break; - - if (parts[1].Equals("true") || parts[1].Equals("1")) - { - LogToConsole($"§§4§1§f{Translations.bot_farmer_warining_allow_teleport}"); - allowTeleport = true; - } - else allowTeleport = false; - - break; - - case "d": - case "debug": - if (debugEnabled) - break; - - if (parts[1].Equals("true") || parts[1].Equals("1")) - { - LogToConsole("Debug enabled!"); - debugEnabled = true; - } - else debugEnabled = false; - - break; - } - } - } - - farmingRadius = radius; - running = true; - new Thread(() => MainProcess()).Start(); - - return r.SetAndReturn(CmdResult.Status.Done); - } - - public override void AfterGameJoined() - { - BotMovementLock.Instance?.UnLock("Farmer"); - running = false; - } - - public override bool OnDisconnect(DisconnectReason reason, string message) - { - BotMovementLock.Instance?.UnLock("Farmer"); - running = false; - return true; - } - - private void MainProcess() - { - var movementLock = BotMovementLock.Instance; - switch (movementLock) - { - case { IsLocked: false }: - if (!movementLock.Lock("Farmer")) - { - running = false; - LogToConsole($"§§6§1§0Farmer bot failed to obtain the movement lock for some reason!"); - LogToConsole($"§§6§1§0Disable other bots who have movement mechanics, and try again!"); - return; - } - - LogDebug($"Locked the movement for other bots!"); - break; - case { IsLocked: true }: - running = false; - LogToConsole($"§§6§1§0Farmer bot failed to obtain the movement lock for some reason!"); - LogToConsole($"§§6§1§0Disable other bots who have movement mechanics, and try again!"); - return; - } - - LogToConsole($"§§2§1§f{Translations.bot_farmer_started}"); - LogToConsole($"§§2§1§f {Translations.bot_farmer_crop_type}: {cropType}"); - LogToConsole($"§§2§1§f {Translations.bot_farmer_radius}: {farmingRadius}"); - - var itemTypes = new List - { - GetSeedItemTypeForCropType(cropType), - GetCropItemTypeForCropType(cropType) - }; - itemTypes = itemTypes.Distinct().ToList(); - - while (running) - { - // Don't do anything if the bot is currently eating, we wait for 1 second - if (AutoEat.Eating) - { - LogDebug("Eating..."); - Thread.Sleep(Delay_Between_Tasks_Millisecond); - continue; - } - - switch (state) - { - case State.SearchingForFarmlandToPlant: - LogDebug("Looking for farmland..."); - - var cropTypeToPlant = GetSeedItemTypeForCropType(cropType); - - // If we don't have any seeds on our hot bar, skip this step and try collecting some - if (!SwitchToItem(cropTypeToPlant)) - { - LogDebug("No seeds, trying to find some crops to break"); - state = State.SearchingForCropsToBreak; - Thread.Sleep(Delay_Between_Tasks_Millisecond); - continue; - } - - var farmlandToPlantOn = FindEmptyFarmland(farmingRadius); - - if (farmlandToPlantOn.Count == 0) - { - LogDebug("Could not find any farmland, trying to find some crops to break"); - state = State.SearchingForCropsToBreak; - Thread.Sleep(Delay_Between_Tasks_Millisecond); - continue; - } - - var i = 0; - foreach (var location in farmlandToPlantOn.TakeWhile(location => running)) - { - // Check only every second iteration, minor optimization xD - if (i % 2 == 0) - { - if (!HasItemOfTypeInInventory(cropTypeToPlant)) - { - LogDebug("Ran out of seeds, looking for crops to break..."); - state = State.SearchingForCropsToBreak; - Thread.Sleep(Delay_Between_Tasks_Millisecond); - continue; - } - } - - var yValue = Math.Floor(location.Y) + 1; - - // TODO: Figure out why this is not working. - // Why we need this: sometimes the server kicks the player for "invalid movement" packets. - /*if (cropType == CropType.NetherWart) - yValue = (double)(Math.Floor(location.Y) - 1.0) + (double)0.87500;*/ - - var location2 = new Location(Math.Floor(location.X) + 0.5, yValue, - Math.Floor(location.Z) + 0.5); - - if (WaitForMoveToLocation(location2)) - { - LogDebug("Moving to: " + location2); - - // Stop if we do not have any more seeds left - if (!SwitchToItem(GetSeedItemTypeForCropType(cropType))) - { - LogDebug("No seeds, trying to find some crops to break"); - break; - } - - var loc = new Location(Math.Floor(location.X), Math.Floor(location.Y), - Math.Floor(location.Z)); - LogDebug("Sending placeblock to: " + loc); - - SendPlaceBlock(loc, Direction.Up, lookAtBlock: true); - Thread.Sleep(300); - } - else LogDebug("Can't move to: " + location2); - - i++; - } - - LogDebug("Finished planting crops!"); - state = State.SearchingForCropsToBreak; - break; - - case State.SearchingForCropsToBreak: - LogDebug("Searching for crops to break..."); - - var cropsToCollect = findCrops(farmingRadius, cropType, true); - - if (cropsToCollect.Count == 0) - { - LogToConsole("No crops to break, trying to bone meal un-grown ones"); - state = State.BoneMealingCrops; - Thread.Sleep(Delay_Between_Tasks_Millisecond); - continue; - } - - // Switch to an axe for faster breaking if the bot has one in his inventory - if (cropType is CropType.Melon or CropType.Pumpkin) - { - // Start from Diamond axe, if not found, try a tier lower axe - var switched = SwitchToItem(ItemType.DiamondAxe); - - if (!switched) - switched = SwitchToItem(ItemType.IronAxe); - - if (!switched) - switched = SwitchToItem(ItemType.GoldenAxe); - - if (!switched) - SwitchToItem(ItemType.StoneAxe); - } - - foreach (var location in cropsToCollect.TakeWhile(location => running)) - { - // God damn C# rounding it to 0.94 - // This will be needed when bot bone meals carrots or potatoes which are at the first stage of growth, - // because sometimes the bot walks over crops and breaks them - // TODO: Figure out a fix - // new Location(Math.Floor(location.X) + 0.5, (double)((location.Y - 1) + (double)0.93750), Math.Floor(location.Z) + 0.5) - - if (WaitForMoveToLocation(location)) - WaitForDigBlock(location); - - // Allow some time to pickup the item - Thread.Sleep(cropType is CropType.Melon or CropType.Pumpkin ? 400 : 200); - } - - LogDebug("Finished breaking crops!"); - state = State.BoneMealingCrops; - break; - - case State.BoneMealingCrops: - // Can't be bone mealed - if (cropType == CropType.NetherWart) - { - state = State.SearchingForFarmlandToPlant; - Thread.Sleep(Delay_Between_Tasks_Millisecond); - continue; - } - - // If we don't have any bone meal on our hot bar, skip this step - if (!SwitchToItem(ItemType.BoneMeal)) - { - LogDebug("No bone meal, searching for some farmland to plant seeds on"); - state = State.SearchingForFarmlandToPlant; - Thread.Sleep(Delay_Between_Tasks_Millisecond); - continue; - } - - var cropsToBonemeal = findCrops(farmingRadius, cropType, false); - - if (cropsToBonemeal.Count == 0) - { - LogDebug("No crops to bone meal, searching for farmland to plant seeds on"); - state = State.SearchingForFarmlandToPlant; - Thread.Sleep(Delay_Between_Tasks_Millisecond); - continue; - } - - var i2 = 0; - foreach (var location in cropsToBonemeal.TakeWhile(location => running)) - { - // Check only every second iteration, minor optimization xD - if (i2 % 2 == 0) - { - if (!HasItemOfTypeInInventory(ItemType.BoneMeal)) - { - LogDebug("Ran out of Bone Meal, looking for farmland to plant on..."); - state = State.SearchingForFarmlandToPlant; - Thread.Sleep(Delay_Between_Tasks_Millisecond); - continue; - } - } - - if (WaitForMoveToLocation(location)) - { - // Stop if we do not have any more bone meal left - if (!SwitchToItem(ItemType.BoneMeal)) - { - LogDebug("No bone meal, searching for some farmland to plant seeds on..."); - break; - } - - var location2 = new Location(Math.Floor(location.X) + 0.5, location.Y, - Math.Floor(location.Z) + 0.5); - LogDebug("Trying to bone meal: " + location2); - - // Send like 4 bone meal attempts, it should do the job with 2-3, but sometimes doesn't do - for (var boneMealTimes = 0; - boneMealTimes < (cropType == CropType.Beetroot ? 6 : 5); - boneMealTimes++) - { - // TODO: Do a check if the carrot/potato is on the first growth stage - // if so, use: new Location(location.X, (double)(location.Y - 1) + (double)0.93750, location.Z) - SendPlaceBlock(location2, Direction.Down, lookAtBlock: true); - } - - Thread.Sleep(100); - } - - i2++; - } - - LogDebug("Finished bone mealing crops!"); - state = State.CollectingItems; - break; - - case State.CollectingItems: - LogDebug("Searching for items to collect..."); - - var currentLocation = GetCurrentLocation(); - var items = GetEntities() - .Where(x => - x.Value.Type == EntityType.Item && - x.Value.Location.Distance(currentLocation) <= farmingRadius && - itemTypes.Contains(x.Value.Item.Type)) - .Select(x => x.Value) - .ToList(); - items = items.OrderBy(x => x.Location.Distance(currentLocation)).ToList(); - - if (items.Any()) - { - LogDebug("Collecting items..."); - - foreach (var entity in items.TakeWhile(entity => running)) - WaitForMoveToLocation(entity.Location); - - LogDebug("Finished collecting items!"); - } - else LogDebug("No items to collect!"); - - state = State.SearchingForFarmlandToPlant; - break; - } - - LogDebug($"Waiting for {Config.Delay_Between_Tasks:0.00} seconds for next cycle."); - Thread.Sleep(Delay_Between_Tasks_Millisecond); - } - - movementLock?.UnLock("Farmer"); - LogDebug($"Unlocked the movement for other bots!"); - LogToConsole(Translations.bot_farmer_stopped); - } - - private static Material GetMaterialForCropType(CropType type) - { - return type switch - { - CropType.Beetroot => Material.Beetroots, - CropType.Carrot => Material.Carrots, - CropType.Melon => Material.Melon, - CropType.NetherWart => Material.NetherWart, - CropType.Pumpkin => Material.Pumpkin, - CropType.Potato => Material.Potatoes, - CropType.Wheat => Material.Wheat, - _ => throw new Exception("Material type for " + type.GetType().Name + " has not been mapped!") - }; - } - - private static ItemType GetSeedItemTypeForCropType(CropType type) - { - return type switch - { - CropType.Beetroot => ItemType.BeetrootSeeds, - CropType.Carrot => ItemType.Carrot, - CropType.Melon => ItemType.MelonSeeds, - CropType.NetherWart => ItemType.NetherWart, - CropType.Pumpkin => ItemType.PumpkinSeeds, - CropType.Potato => ItemType.Potato, - CropType.Wheat => ItemType.WheatSeeds, - _ => throw new Exception("Seed type for " + type.GetType().Name + " has not been mapped!") - }; - } - - private static ItemType GetCropItemTypeForCropType(CropType type) - { - return type switch - { - CropType.Beetroot => ItemType.Beetroot, - CropType.Carrot => ItemType.Carrot, - CropType.Melon => ItemType.Melon, - CropType.NetherWart => ItemType.NetherWart, - CropType.Pumpkin => ItemType.Pumpkin, - CropType.Potato => ItemType.Potato, - CropType.Wheat => ItemType.Wheat, - _ => throw new Exception("Item type for " + type.GetType().Name + " has not been mapped!") - }; - } - - private static bool IsCropAvailableForProtocol(CropType type, int protocolVersion) - { - return type switch - { - CropType.Beetroot => protocolVersion >= Protocol18Handler.MC_1_9_Version, - _ => true - }; - } - - private List FindEmptyFarmland(int radius) - { - return GetWorld() - .FindBlock(GetCurrentLocation(), - cropType == CropType.NetherWart ? Material.SoulSand : Material.Farmland, radius) - .Where(location => GetWorld().GetBlock(new Location(location.X, location.Y + 1, location.Z)).Type == - Material.Air) - .ToList(); - } - - private List findCrops(int radius, CropType cropType, bool fullyGrown) - { - var material = GetMaterialForCropType(cropType); - - // A bit of a hack to enable bone mealing melon and pumpkin stems - if (!fullyGrown && cropType is CropType.Melon or CropType.Pumpkin) - material = cropType == CropType.Melon ? Material.MelonStem : Material.PumpkinStem; - - return GetWorld() - .FindBlock(GetCurrentLocation(), material, radius) - .Where(location => - { - if (fullyGrown && material is Material.Melon or Material.Pumpkin) - return true; - - var isFullyGrown = IsCropFullyGrown(GetWorld().GetBlock(location), cropType, location); - return fullyGrown ? isFullyGrown : !isFullyGrown; - }) - .ToList(); - } - - private bool IsCropFullyGrown(Block block, CropType cropType, Location? location = null) - { - var protocolVersion = GetProtocolVersion(); - - if (protocolVersion < Protocol18Handler.MC_1_13_Version) - return IsLegacyCropFullyGrown(block, cropType, location); - - switch (cropType) - { - case CropType.Beetroot: - switch (protocolVersion) - { - case Protocol18Handler.MC_1_20_Version when block.BlockId == 12371: - case Protocol18Handler.MC_1_19_4_Version when block.BlockId == 12356: - case Protocol18Handler.MC_1_19_3_Version when block.BlockId == 11887: - case >= Protocol18Handler.MC_1_19_Version and <= Protocol18Handler.MC_1_19_2_Version - when block.BlockId == 10103: - case >= Protocol18Handler.MC_1_17_Version and <= Protocol18Handler.MC_1_18_2_Version - when block.BlockId == 9472: - case >= Protocol18Handler.MC_1_16_Version and <= Protocol18Handler.MC_1_16_5_Version - when block.BlockId == 9226: - case >= Protocol18Handler.MC_1_14_Version and <= Protocol18Handler.MC_1_15_2_Version - when block.BlockId == 8686: - case >= Protocol18Handler.MC_1_13_Version and < Protocol18Handler.MC_1_14_Version - when block.BlockId == 8162: - return true; - } - - break; - - case CropType.Carrot: - switch (protocolVersion) - { - case Protocol18Handler.MC_1_20_Version when block.BlockId == 8602: - case Protocol18Handler.MC_1_19_4_Version when block.BlockId == 8598: - case Protocol18Handler.MC_1_19_3_Version when block.BlockId == 8370: - case >= Protocol18Handler.MC_1_19_Version and <= Protocol18Handler.MC_1_19_2_Version - when block.BlockId == 6930: - case >= Protocol18Handler.MC_1_17_Version and <= Protocol18Handler.MC_1_18_2_Version - when block.BlockId == 6543: - case >= Protocol18Handler.MC_1_16_Version and <= Protocol18Handler.MC_1_16_5_Version - when block.BlockId == 6341: - case >= Protocol18Handler.MC_1_14_Version and <= Protocol18Handler.MC_1_15_2_Version - when block.BlockId == 5801: - case >= Protocol18Handler.MC_1_13_Version and < Protocol18Handler.MC_1_14_Version - when block.BlockId == 5295: - return true; - } - - break; - - // Checkin for stems and attached stems instead of Melons themselves - case CropType.Melon: - switch (protocolVersion) - { - case Protocol18Handler.MC_1_20_Version when block.BlockId is 6836 or 6820: - case Protocol18Handler.MC_1_19_4_Version when block.BlockId is 6808 or 6606: - case Protocol18Handler.MC_1_19_3_Version when block.BlockId is 6582 or 6832: - case >= Protocol18Handler.MC_1_19_Version and <= Protocol18Handler.MC_1_19_2_Version - when block.BlockId is 5166 or 5150: - case >= Protocol18Handler.MC_1_17_Version and <= Protocol18Handler.MC_1_18_2_Version - when block.BlockId is 4860 or 4844: - case >= Protocol18Handler.MC_1_16_Version and <= Protocol18Handler.MC_1_16_5_Version - when block.BlockId is 4791 or 4775: - case >= Protocol18Handler.MC_1_14_Version and <= Protocol18Handler.MC_1_15_2_Version - when block.BlockId is 4771 or 4755: - case >= Protocol18Handler.MC_1_13_Version and < Protocol18Handler.MC_1_14_Version - when block.BlockId is 4268 or 4252: - return true; - } - - break; - - case CropType.NetherWart: - switch (protocolVersion) - { - case Protocol18Handler.MC_1_20_Version when block.BlockId == 7388: - case Protocol18Handler.MC_1_19_4_Version when block.BlockId == 7384: - case Protocol18Handler.MC_1_19_3_Version when block.BlockId == 7158: - case >= Protocol18Handler.MC_1_19_Version and <= Protocol18Handler.MC_1_19_2_Version - when block.BlockId == 5718: - case >= Protocol18Handler.MC_1_17_Version and <= Protocol18Handler.MC_1_18_2_Version - when block.BlockId == 5332: - case >= Protocol18Handler.MC_1_16_Version and <= Protocol18Handler.MC_1_16_5_Version - when block.BlockId == 5135: - case >= Protocol18Handler.MC_1_14_Version and <= Protocol18Handler.MC_1_15_2_Version - when block.BlockId == 5115: - case >= Protocol18Handler.MC_1_13_Version and < Protocol18Handler.MC_1_14_Version - when block.BlockId == 4612: - return true; - } - - break; - - // Checkin for stems and attached stems instead of Pumpkins themselves - case CropType.Pumpkin: - switch (protocolVersion) - { - case Protocol18Handler.MC_1_20_Version when block.BlockId is 5849 or 6816: - case Protocol18Handler.MC_1_19_4_Version when block.BlockId is 5845 or 6824: - case Protocol18Handler.MC_1_19_3_Version when block.BlockId is 5683 or 6598: - case >= Protocol18Handler.MC_1_19_Version and <= Protocol18Handler.MC_1_19_2_Version - when block.BlockId is 5158 or 5146: - case >= Protocol18Handler.MC_1_17_Version and <= Protocol18Handler.MC_1_18_2_Version - when block.BlockId is 4852 or 4840: - case >= Protocol18Handler.MC_1_16_Version and <= Protocol18Handler.MC_1_16_5_Version - when block.BlockId is 4783 or 4771: - case >= Protocol18Handler.MC_1_14_Version and <= Protocol18Handler.MC_1_15_2_Version - when block.BlockId is 4763 or 4751: - case >= Protocol18Handler.MC_1_13_Version and < Protocol18Handler.MC_1_14_Version - when block.BlockId is 4260 or 4248: - return true; - } - - break; - - case CropType.Potato: - switch (protocolVersion) - { - case Protocol18Handler.MC_1_20_Version when block.BlockId == 8610: - case Protocol18Handler.MC_1_19_4_Version when block.BlockId == 8606: - case Protocol18Handler.MC_1_19_3_Version when block.BlockId == 8378: - case >= Protocol18Handler.MC_1_19_Version and <= Protocol18Handler.MC_1_19_2_Version - when block.BlockId == 6938: - case >= Protocol18Handler.MC_1_17_Version and <= Protocol18Handler.MC_1_18_2_Version - when block.BlockId == 6551: - case >= Protocol18Handler.MC_1_16_Version and <= Protocol18Handler.MC_1_16_5_Version - when block.BlockId == 6349: - case >= Protocol18Handler.MC_1_14_Version and <= Protocol18Handler.MC_1_15_2_Version - when block.BlockId == 5809: - case >= Protocol18Handler.MC_1_13_Version and < Protocol18Handler.MC_1_14_Version - when block.BlockId == 5303: - return true; - } - - break; - - case CropType.Wheat: - switch (protocolVersion) - { - case Protocol18Handler.MC_1_20_Version when block.BlockId == 4285: - case Protocol18Handler.MC_1_19_4_Version when block.BlockId == 4281: - case Protocol18Handler.MC_1_19_3_Version when block.BlockId == 4233: - case >= Protocol18Handler.MC_1_19_Version and <= Protocol18Handler.MC_1_19_2_Version - when block.BlockId == 3619: - case >= Protocol18Handler.MC_1_17_Version and <= Protocol18Handler.MC_1_18_2_Version - when block.BlockId == 3421: - case >= Protocol18Handler.MC_1_16_Version and <= Protocol18Handler.MC_1_16_5_Version - when block.BlockId == 3364: - case >= Protocol18Handler.MC_1_14_Version and <= Protocol18Handler.MC_1_15_2_Version - when block.BlockId == 3362: - case >= Protocol18Handler.MC_1_13_Version and < Protocol18Handler.MC_1_14_Version - when block.BlockId == 3059: - return true; - } - - break; - } - - return false; - } - - private bool IsLegacyCropFullyGrown(Block block, CropType cropType, Location? location) - { - return cropType switch - { - CropType.Beetroot => block.BlockId == 207 && block.BlockMeta >= 3, - CropType.Carrot => block.BlockId == 141 && block.BlockMeta >= 7, - CropType.Melon => block.BlockId == 105 - && (block.BlockMeta >= 7 || HasAdjacentBlock(location, Material.Melon)), - CropType.NetherWart => block.BlockId == 115 && block.BlockMeta >= 3, - CropType.Pumpkin => block.BlockId == 104 - && (block.BlockMeta >= 7 || HasAdjacentBlock(location, Material.Pumpkin)), - CropType.Potato => block.BlockId == 142 && block.BlockMeta >= 7, - CropType.Wheat => block.BlockId == 59 && block.BlockMeta >= 7, - _ => false - }; - } - - private bool HasAdjacentBlock(Location? location, Material material) - { - if (location is not Location stemLocation) - return false; - - var world = GetWorld(); - int x = (int)Math.Floor(stemLocation.X); - int y = (int)Math.Floor(stemLocation.Y); - int z = (int)Math.Floor(stemLocation.Z); - - Location[] adjacentLocations = - [ - new(x + 1, y, z), - new(x - 1, y, z), - new(x, y, z + 1), - new(x, y, z - 1) - ]; - - return adjacentLocations.Any(adjacentLocation => world.GetBlock(adjacentLocation).Type == material); - } - - // Yoinked from ReinforceZwei's AutoTree and adapted to search the whole of inventory in additon to the hotbar - private bool SwitchToItem(ItemType itemType) - { - var playerInventory = GetPlayerInventory(); - - if (playerInventory.Items.TryGetValue(GetCurrentSlot() - 36, out var value) && value.Type == itemType) - return true; // Already selected - - // Search the full inventory - var fullInventorySearch = new List(playerInventory.SearchItem(itemType)); - - // Search for the seed in the hot bar - var hotBarSearch = fullInventorySearch.Where(slot => slot is >= 36 and <= 44).ToList(); - - if (hotBarSearch.Count > 0) - { - ChangeSlot((short)(hotBarSearch[0] - 36)); - return true; - } - - if (fullInventorySearch.Count == 0) - return false; - - var movingHelper = new ItemMovingHelper(playerInventory, Handler); - movingHelper.Swap(fullInventorySearch[0], 36); - ChangeSlot(0); - - return true; - } - - // Yoinked from Daenges's Sugarcane Farmer - private bool WaitForMoveToLocation(Location pos, float tolerance = 2f) - { - if (MoveToLocation(location: pos, allowUnsafe: allowUnsafe, allowDirectTeleport: allowTeleport)) - { - LogDebug("Moving to: " + pos); - - while (GetCurrentLocation().Distance(pos) > tolerance) - Thread.Sleep(200); - - return true; - } - else LogDebug("Can't move to: " + pos); - - return false; - } - - // Yoinked from Daenges's Sugarcane Farmer - private bool WaitForDigBlock(Location block, int digTimeout = 1000) - { - if (!DigBlock(block.ToFloor(), Direction.Down)) return false; - short i = 0; // Maximum wait time of 10 sec. - while (GetWorld().GetBlock(block).Type != Material.Air && i <= digTimeout) - { - Thread.Sleep(100); - i++; - } - - return i <= digTimeout; - } - - private bool HasItemOfTypeInInventory(ItemType itemType) - { - return GetPlayerInventory().SearchItem(itemType).Length > 0; - } - - private void LogDebug(object text) - { - if (debugEnabled) - LogToConsole(text); - else LogDebugToConsole(text); - } - } -} diff --git a/MinecraftClient/ChatBots/FileInputBot.cs b/MinecraftClient/ChatBots/FileInputBot.cs deleted file mode 100644 index 7d0069e42d..0000000000 --- a/MinecraftClient/ChatBots/FileInputBot.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using System.IO; -using System.Threading; -using MinecraftClient.CommandHandler; -using MinecraftClient.Scripting; - -namespace MinecraftClient.ChatBots -{ - /// - /// Debug-only ChatBot that monitors a text file for commands. - /// Write lines to the file from any external tool (e.g. Cursor Shell) - /// and this bot will execute them as MCC internal commands. - /// - /// Usage from Cursor Shell: - /// Add-Content mcc_input.txt "inventory" - /// Add-Content mcc_input.txt "send /give @s diamond_sword 1" - /// - /// Lines starting with "/" are sent as server chat; others are treated - /// as MCC internal commands (same as typing in the MCC console). - /// - public class FileInputBot : ChatBot - { - private const string BotName = "FileInput"; - private string _filePath = string.Empty; - private long _lastPosition; - private int _tickCounter; - - public override void Initialize() - { - _filePath = Path.GetFullPath( - Environment.GetEnvironmentVariable("MCC_INPUT_FILE") ?? "mcc_input.txt"); - - if (File.Exists(_filePath)) - _lastPosition = new FileInfo(_filePath).Length; - else - File.WriteAllText(_filePath, ""); - - LogToConsole(BotName, $"Watching: {_filePath}"); - LogToConsole(BotName, "Write commands to this file to execute them."); - } - - public override void Update() - { - // Poll every ~500ms while the MCC main loop runs at 20 TPS. - if (++_tickCounter < Settings.DoubleToTick(0.5)) - return; - _tickCounter = 0; - - try - { - if (!File.Exists(_filePath)) - return; - - var info = new FileInfo(_filePath); - if (info.Length <= _lastPosition) - return; - - string newContent; - using (var fs = new FileStream(_filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) - { - fs.Seek(_lastPosition, SeekOrigin.Begin); - using var reader = new StreamReader(fs); - newContent = reader.ReadToEnd(); - } - _lastPosition = info.Length; - - foreach (var rawLine in newContent.Split('\n')) - { - var line = rawLine.Trim(); - if (string.IsNullOrEmpty(line)) - continue; - - LogToConsole(BotName, $"> {line}"); - - if (line.StartsWith("/")) - { - SendText(line); - } - else - { - CmdResult result = new(); - if (PerformInternalCommand(line, ref result)) - { - if (!string.IsNullOrEmpty(result.ToString())) - LogToConsole(BotName, result.ToString()); - } - else - { - // Not an internal command — send as chat - SendText(line); - } - } - } - } - catch (IOException) - { - // File may be temporarily locked by the writer - } - catch (Exception ex) - { - LogToConsole(BotName, $"Error: {ex.Message}"); - } - } - } -} diff --git a/MinecraftClient/ChatBots/FollowPlayer.cs b/MinecraftClient/ChatBots/FollowPlayer.cs deleted file mode 100644 index 09df5f0a88..0000000000 --- a/MinecraftClient/ChatBots/FollowPlayer.cs +++ /dev/null @@ -1,241 +0,0 @@ -using System; -using System.Linq; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.CommandHandler.Patch; -using MinecraftClient.Mapping; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - public class FollowPlayer : ChatBot - { - public const string CommandName = "follow"; - - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] private const string BotName = "FollowPlayer"; - - public bool Enabled = false; - - [TomlInlineComment("$ChatBot.FollowPlayer.Update_Limit$")] - public double Update_Limit = 1.5; - - [TomlInlineComment("$ChatBot.FollowPlayer.Stop_At_Distance$")] - public double Stop_At_Distance = 3.0; - - public void OnSettingUpdate() - { - if (Update_Limit < 0) - Update_Limit = 0; - - if (Stop_At_Distance < 0) - Stop_At_Distance = 0; - } - } - - private string? _playerToFollow = null; - private int _updateCounter = 0; - private bool _unsafeEnabled = false; - - public override void Initialize() - { - if (!GetEntityHandlingEnabled()) - { - LogToConsole(Translations.extra_entity_required); - LogToConsole(Translations.general_bot_unload); - UnloadBot(); - return; - } - - if (!GetTerrainEnabled()) - { - LogToConsole(Translations.extra_terrainandmovement_required); - LogToConsole(Translations.general_bot_unload); - UnloadBot(); - return; - } - - McClient.dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CommandName) - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - ) - ); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Literal("start") - .Then(l => l.Argument("PlayerName", MccArguments.PlayerName()) - .Executes(r => OnCommandStart(r.Source, Arguments.GetString(r, "PlayerName"), takeRisk: false)) - .Then(l => l.Literal("-f") - .Executes(r => - OnCommandStart(r.Source, Arguments.GetString(r, "PlayerName"), takeRisk: true))))) - .Then(l => l.Literal("stop") - .Executes(r => OnCommandStop(r.Source))) - .Then(l => l.Literal("_help") - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Redirect(McClient.dispatcher.GetRoot().GetChild("help").GetChild(CommandName))) - ); - } - - public override void OnUnload() - { - BotMovementLock.Instance?.UnLock("Follow Player"); - McClient.dispatcher.Unregister(CommandName); - McClient.dispatcher.GetRoot().GetChild("help").RemoveChild(CommandName); - } - - private int OnCommandHelp(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => Translations.cmd_follow_desc + ": " + Translations.cmd_follow_usage - + '\n' + McClient.dispatcher.GetAllUsageString(CommandName, false), -#pragma warning restore format // @formatter:on - }); - } - - private int OnCommandStart(CmdResult r, string name, bool takeRisk) - { - if (!IsValidName(name)) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_follow_invalid_name); - - var player = GetEntities().Values.ToList().Find(entity => - entity.Type == EntityType.Player - && !string.IsNullOrEmpty(entity.Name) - && entity.Name.Equals(name, StringComparison.OrdinalIgnoreCase)); - - if (player is null) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_follow_invalid_player); - - if (!CanMoveThere(player.Location)) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_follow_cant_reach_player); - - if (_playerToFollow is not null && _playerToFollow.Equals(name, StringComparison.OrdinalIgnoreCase)) - return r.SetAndReturn(CmdResult.Status.Fail, - string.Format(Translations.cmd_follow_already_following, _playerToFollow)); - - var movementLock = BotMovementLock.Instance; - if (movementLock is { IsLocked: true }) - return r.SetAndReturn(CmdResult.Status.Fail, - string.Format(Translations.bot_common_movement_lock_held, "Follow Player", movementLock.LockedBy)); - - var result = - string.Format( - _playerToFollow is not null ? Translations.cmd_follow_switched : Translations.cmd_follow_started, - player.Name!); - _playerToFollow = name.ToLower(); - - switch (movementLock) - { - case { IsLocked: false }: - if (!movementLock.Lock("Follow Player")) - { - LogToConsole($"§§6§1§0Follow Player bot failed to obtain the movement lock for some reason!"); - LogToConsole($"§§6§1§0Disable other bots who have movement mechanics, and try again!"); - return r.SetAndReturn(CmdResult.Status.Fail); - } - - break; - } - - if (!takeRisk) return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_follow_note); - _unsafeEnabled = true; - return r.SetAndReturn(CmdResult.Status.Done, - Translations.cmd_follow_note + '\n' + Translations.cmd_follow_unsafe_enabled); - } - - private int OnCommandStop(CmdResult r) - { - if (_playerToFollow is null) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_follow_already_stopped); - - var movementLock = BotMovementLock.Instance; - movementLock?.UnLock("Follow Player"); - _playerToFollow = null; - - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_follow_stopping); - } - - public override void Update() - { - _updateCounter++; - } - - public override void OnEntityMove(Entity entity) - { - if (entity.Type != EntityType.Player) - return; - - if (_playerToFollow is null || string.IsNullOrEmpty(entity.Name)) - return; - - if (_playerToFollow != entity.Name.ToLower()) - return; - - if (_updateCounter < Settings.DoubleToTick(Config.Update_Limit)) - return; - - _updateCounter = 0; - - if (!CanMoveThere(entity.Location)) - return; - - // Stop at specified distance from player (prevents pushing player around) - var distance = entity.Location.Distance(GetCurrentLocation()); - - if (distance < Config.Stop_At_Distance) - return; - - MoveToLocation(entity.Location, _unsafeEnabled); - } - - public override void OnEntitySpawn(Entity entity) - { - if (entity.Type != EntityType.Player) - return; - - if (_playerToFollow is not null && !string.IsNullOrEmpty(entity.Name) && - _playerToFollow.Equals(entity.Name, StringComparison.OrdinalIgnoreCase)) - { - LogToConsole(string.Format(Translations.cmd_follow_player_came_to_the_range, _playerToFollow)); - LogToConsole(Translations.cmd_follow_resuming); - } - } - - public override void OnEntityDespawn(Entity entity) - { - if (entity.Type != EntityType.Player) - return; - - if (_playerToFollow is not null && !string.IsNullOrEmpty(entity.Name) && - _playerToFollow.Equals(entity.Name, StringComparison.OrdinalIgnoreCase)) - { - LogToConsole(string.Format(Translations.cmd_follow_player_left_the_range, _playerToFollow)); - LogToConsole(Translations.cmd_follow_pausing); - } - } - - public override void OnPlayerLeave(Guid uuid, string? name) - { - if (_playerToFollow is not null && !string.IsNullOrEmpty(name) && - _playerToFollow.Equals(name, StringComparison.OrdinalIgnoreCase)) - { - LogToConsole(string.Format(Translations.cmd_follow_player_left, _playerToFollow)); - LogToConsole(Translations.cmd_follow_stopping); - _playerToFollow = null; - } - } - - private bool CanMoveThere(Location location) - { - var chunkColumn = GetWorld().GetChunkColumn(location); - return chunkColumn is not null && chunkColumn.FullyLoaded != false; - } - } -} \ No newline at end of file diff --git a/MinecraftClient/ChatBots/HangmanGame.cs b/MinecraftClient/ChatBots/HangmanGame.cs deleted file mode 100644 index ac04dd9ed7..0000000000 --- a/MinecraftClient/ChatBots/HangmanGame.cs +++ /dev/null @@ -1,200 +0,0 @@ -using System; -using System.Text; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - /// - /// In-Chat Hangman game - /// - - public class HangmanGame : ChatBot - { - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "HangmanGame"; - - public bool Enabled = false; - - public bool English = true; - - public string FileWords_EN = "hangman-en.txt"; - - public string FileWords_FR = "hangman-fr.txt"; - - public void OnSettingUpdate() - { - FileWords_EN ??= string.Empty; - FileWords_FR ??= string.Empty; - } - } - - private int vie = 0; - private readonly int vie_param = 10; - private int compteur = 0; - private readonly int compteur_param = 3000; //5 minutes - private bool running = false; - private bool[] discovered = Array.Empty(); - private string word = ""; - private string letters = ""; - - public override void Update() - { - if (running) - { - if (compteur > 0) - { - compteur--; - } - else - { - SendText(Config.English ? "You took too long to try a letter." : "Temps imparti écoulé !"); - SendText(Config.English ? "Game canceled." : "Partie annulée."); - running = false; - } - } - } - - public override void GetText(string text) - { - string message = ""; - string username = ""; - text = GetVerbatim(text); - - if (IsPrivateMessage(text, ref message, ref username)) - { - if (Settings.Config.Main.Advanced.BotOwners.Contains(username.ToLower())) - { - switch (message) - { - case "start": - Start(); - break; - case "stop": - running = false; - break; - default: - break; - } - } - } - else - { - if (running && IsChatMessage(text, ref message, ref username)) - { - if (message.Length == 1) - { - char letter = message.ToUpper()[0]; - if (letter >= 'A' && letter <= 'Z') - { - if (letters.Contains(letter)) - { - SendText(Config.English ? ("Letter " + letter + " has already been tried.") : ("Le " + letter + " a déjà été proposé.")); - } - else - { - letters += letter; - compteur = compteur_param; - - if (word.Contains(letter)) - { - for (int i = 0; i < word.Length; i++) { if (word[i] == letter) { discovered[i] = true; } } - SendText(Config.English ? ("Yes, the word contains a " + letter + '!') : ("Le " + letter + " figurait bien dans le mot :)")); - } - else - { - vie--; - if (vie == 0) - { - SendText(Config.English ? "Game Over! :]" : "Perdu ! Partie terminée :]"); - SendText(Config.English ? ("The word was: " + word) : ("Le mot était : " + word)); - running = false; - } - else SendText(Config.English ? ("The " + letter + "? No.") : ("Le " + letter + " ? Non.")); - } - - if (running) - { - SendText(Config.English ? ("Mysterious word: " + WordCached + " (lives : " + vie + ")") - : ("Mot mystère : " + WordCached + " (vie : " + vie + ")")); - } - - if (Winner) - { - SendText(Config.English ? ("Congrats, " + username + '!') : ("Félicitations, " + username + " !")); - running = false; - } - } - } - } - } - } - } - - private void Start() - { - vie = vie_param; - running = true; - letters = ""; - word = Chooseword(); - compteur = compteur_param; - discovered = new bool[word.Length]; - - SendText(Config.English ? "Hangman v1.0 - By ORelio" : "Pendu v1.0 - Par ORelio"); - SendText(Config.English ? ("Mysterious word: " + WordCached + " (lives : " + vie + ")") - : ("Mot mystère : " + WordCached + " (vie : " + vie + ")")); - SendText(Config.English ? ("Try some letters ... :)") : ("Proposez une lettre ... :)")); - } - - private string Chooseword() - { - if (System.IO.File.Exists(Config.English ? Config.FileWords_EN : Config.FileWords_FR)) - { - string[] dico = System.IO.File.ReadAllLines(Config.English ? Config.FileWords_EN : Config.FileWords_FR, Encoding.UTF8); - return dico[new Random().Next(dico.Length)]; - } - else - { - LogToConsole(Config.English ? "File not found: " + Config.FileWords_EN : "Fichier introuvable : " + Config.FileWords_FR); - return Config.English ? "WORDSAREMISSING" : "DICOMANQUANT"; - } - } - - private string WordCached - { - get - { - string printed = ""; - for (int i = 0; i < word.Length; i++) - { - if (discovered[i]) - { - printed += word[i]; - } - else printed += '_'; - } - return printed; - } - } - - private bool Winner - { - get - { - for (int i = 0; i < discovered.Length; i++) - { - if (!discovered[i]) - { - return false; - } - } - return true; - } - } - } -} diff --git a/MinecraftClient/ChatBots/ItemsCollector.cs b/MinecraftClient/ChatBots/ItemsCollector.cs deleted file mode 100644 index 0c513ffb30..0000000000 --- a/MinecraftClient/ChatBots/ItemsCollector.cs +++ /dev/null @@ -1,217 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.CommandHandler.Patch; -using MinecraftClient.Inventory; -using MinecraftClient.Mapping; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots; - -public class ItemsCollector : ChatBot -{ - public const string CommandName = "itemscollector"; - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] private const string BotName = "ItemsCollector"; - - public bool Enabled = false; - - [TomlInlineComment("$ChatBot.ItemsCollector.Collect_All_Item_Types$")] - public bool Collect_All_Item_Types = true; - - [TomlInlineComment("$ChatBot.ItemsCollector.Items_Whitelist$")] - public List Items_Whitelist = new() { ItemType.Diamond, ItemType.NetheriteIngot }; - - [TomlInlineComment("$ChatBot.ItemsCollector.Delay_Between_Tasks$")] - public int Delay_Between_Tasks = 300; - - [TomlInlineComment("$ChatBot.ItemsCollector.Collection_Radius$")] - public double Collection_Radius = 30.0; - - [TomlInlineComment("$ChatBot.ItemsCollector.Always_Return_To_Start$")] - public bool Always_Return_To_Start = true; - - [TomlInlineComment("$ChatBot.ItemsCollector.Prioritize_Clusters$")] - public bool Prioritize_Clusters = false; - - public void OnSettingUpdate() - { - if (Delay_Between_Tasks < 100) - Delay_Between_Tasks = 100; - } - } - - private bool running = false; - private Thread? mainProcessThread; - - public override void Initialize() - { - if (!GetEntityHandlingEnabled()) - { - LogToConsole(Translations.extra_entity_required); - LogToConsole(Translations.general_bot_unload); - UnloadBot(); - return; - } - - if (!GetTerrainEnabled()) - { - LogToConsole(Translations.extra_terrainandmovement_required); - LogToConsole(Translations.general_bot_unload); - UnloadBot(); - return; - } - - McClient.dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CommandName) - .Executes(r => OnCommandHelp(r.Source, string.Empty))) - ); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Literal("start") - .Executes(r => OnCommandStart(r.Source))) - .Then(l => l.Literal("stop") - .Executes(r => OnCommandStop(r.Source))) - .Then(l => l.Literal("_help") - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Redirect(McClient.dispatcher.GetRoot().GetChild("help").GetChild(CommandName))) - ); - } - - public override void OnUnload() - { - StopTheMainProcess(); - McClient.dispatcher.Unregister(CommandName); - McClient.dispatcher.GetRoot().GetChild("help").RemoveChild(CommandName); - } - - private int OnCommandHelp(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => Translations.cmd_items_collector_desc + ": " + Translations.cmd_items_collector_usage - + '\n' + McClient.dispatcher.GetAllUsageString(CommandName, false), -#pragma warning restore format // @formatter:on - }); - } - - private int OnCommandStart(CmdResult r) - { - if (running) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_items_collector_already_collecting); - - var movementLock = BotMovementLock.Instance; - if (movementLock is { IsLocked: true }) - return r.SetAndReturn(CmdResult.Status.Fail, - string.Format(Translations.bot_common_movement_lock_held, "Items Collector", movementLock.LockedBy)); - - if (!movementLock!.Lock("Items Collector")) - { - LogToConsole($"§§6§1§0Items Collector bot failed to obtain the movement lock for some reason!"); - LogToConsole($"§§6§1§0Disable other bots who have movement mechanics, and try again!"); - return r.SetAndReturn(CmdResult.Status.Fail); - } - - StartTheMainProcess(); - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_items_collector_started); - } - - private int OnCommandStop(CmdResult r) - { - if (!running) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_items_collector_already_not_collecting); - - StopTheMainProcess(); - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_items_collector_stopping); - } - - private void StartTheMainProcess() - { - running = true; - mainProcessThread = new Thread(MainProcess); - mainProcessThread.Start(); - } - - private void StopTheMainProcess() - { - running = false; - BotMovementLock.Instance?.UnLock("Items Collector"); - } - - private void MainProcess() - { - var startingLocation = GetCurrentLocation(); - - while (running) - { - var currentLocation = GetCurrentLocation(); - var items = GetEntities() - .Where(x => - x.Value.Type == EntityType.Item && - x.Value.Location.Distance(currentLocation) <= Config.Collection_Radius && - (Config.Collect_All_Item_Types || Config.Items_Whitelist.Contains(x.Value.Item.Type))) - .Select(x => x.Value) - .ToList(); - - if (Config.Prioritize_Clusters && items.Count > 1) - { - var centroid = new Location( - items.Average(x => x.Location.X), - items.Average(x => x.Location.Y), - items.Average(x => x.Location.Z) - ); - - items = items.OrderBy(x => x.Location.Distance(centroid) / items.Count).ToList(); - } - else items = items.OrderBy(x => x.Location.Distance(currentLocation)).ToList(); - - if (items.Any()) - { - foreach (var entity in items.TakeWhile(entity => running)) - WaitForMoveToLocation(entity.Location); - } - else - { - if (startingLocation.Distance(currentLocation) > 2f && Config.Always_Return_To_Start) - WaitForMoveToLocation(startingLocation); - } - - if (!running) - break; - - Thread.Sleep(Config.Delay_Between_Tasks); - } - - LogToConsole(Translations.cmd_items_collector_stopped); - } - - public override void AfterGameJoined() - { - StopTheMainProcess(); - } - - public override bool OnDisconnect(DisconnectReason reason, string message) - { - StopTheMainProcess(); - return true; - } - - private bool WaitForMoveToLocation(Location location, float tolerance = 1f) - { - if (!MoveToLocation(location)) return false; - while (GetCurrentLocation().Distance(location) > tolerance) - Thread.Sleep(200); - - return true; - } -} \ No newline at end of file diff --git a/MinecraftClient/ChatBots/Mailer.cs b/MinecraftClient/ChatBots/Mailer.cs deleted file mode 100644 index 1d84b74f6e..0000000000 --- a/MinecraftClient/ChatBots/Mailer.cs +++ /dev/null @@ -1,471 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Data; -using System.IO; -using System.Linq; -using System.Threading; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.CommandHandler.Patch; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - /// - /// ChatBot for storing and delivering Mails - /// - public class Mailer : ChatBot - { - public const string CommandName = "mailer"; - - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "Mailer"; - - public bool Enabled = false; - - public string DatabaseFile = "MailerDatabase.ini"; - - public string IgnoreListFile = "MailerIgnoreList.ini"; - - public bool PublicInteractions = false; - - public int MaxMailsPerPlayer = 10; - - public int MaxDatabaseSize = 10000; - - public int MailRetentionDays = 30; - - public void OnSettingUpdate() - { - DatabaseFile ??= string.Empty; - IgnoreListFile ??= string.Empty; - - if (!Enabled) return; - - bool checkSuccessed = true; - - if (Config.MaxDatabaseSize <= 0) - { - LogToConsole(BotName, Translations.bot_mailer_init_fail_db_size); - checkSuccessed = false; - } - - if (Config.MaxMailsPerPlayer <= 0) - { - LogToConsole(BotName, Translations.bot_mailer_init_fail_max_mails); - checkSuccessed = false; - } - - if (Config.MailRetentionDays <= 0) - { - LogToConsole(BotName, Translations.bot_mailer_init_fail_mail_retention); - checkSuccessed = false; - } - - if (!checkSuccessed) - { - LogToConsole(BotName, Translations.general_bot_unload); - Enabled = false; - } - } - } - - /// - /// Holds the list of ignored players - /// - private class IgnoreList : HashSet - { - /// - /// Read ignore list from file - /// - /// Path to the ignore list - /// Ignore list - public static IgnoreList FromFile(string filePath) - { - IgnoreList ignoreList = new(); - foreach (string line in FileMonitor.ReadAllLinesWithRetries(filePath)) - { - if (!line.StartsWith("#")) - { - string entry = line.ToLower(); - if (!ignoreList.Contains(entry)) - ignoreList.Add(entry); - } - } - return ignoreList; - } - - /// - /// Save ignore list to file - /// - /// Path to destination file - public void SaveToFile(string filePath) - { - List lines = new(); - lines.Add("#Ignored Players"); - foreach (string player in this) - lines.Add(player); - FileMonitor.WriteAllLinesWithRetries(filePath, lines); - } - } - - /// - /// Holds the Mail database: a collection of Mails sent from a player to another player - /// - private class MailDatabase : List - { - /// - /// Read mail database from file - /// - /// Path to the database - /// Mail database - public static MailDatabase FromFile(string filePath) - { - MailDatabase database = new(); - Dictionary> iniFileDict = INIFile.ParseFile(FileMonitor.ReadAllLinesWithRetries(filePath)); - foreach (KeyValuePair> iniSection in iniFileDict) - { - //iniSection.Key is "mailXX" but we don't need it here - string sender = iniSection.Value["sender"]; - string recipient = iniSection.Value["recipient"]; - string content = iniSection.Value["content"]; - DateTime timestamp = DateTime.Parse(iniSection.Value["timestamp"]); - bool anonymous = INIFile.Str2Bool(iniSection.Value["anonymous"]); - database.Add(new Mail(sender, recipient, content, anonymous, timestamp)); - } - return database; - } - - /// - /// Save mail database to file - /// - /// Path to destination file - public void SaveToFile(string filePath) - { - Dictionary> iniFileDict = new(); - int mailCount = 0; - foreach (Mail mail in this) - { - mailCount++; - Dictionary iniSection = new() - { -#pragma warning disable format // @formatter:off - ["sender"] = mail.Sender, - ["recipient"] = mail.Recipient, - ["content"] = mail.Content, - ["timestamp"] = mail.DateSent.ToString(), - ["anonymous"] = mail.Anonymous.ToString() -#pragma warning restore format // @formatter:on - }; - iniFileDict["mail" + mailCount] = iniSection; - } - FileMonitor.WriteAllLinesWithRetries(filePath, INIFile.Generate(iniFileDict, "Mail Database")); - } - } - - /// - /// Represents a Mail sent from a player to another player - /// - private class Mail - { - private readonly string sender; - private readonly string senderLower; - private readonly string recipient; - private readonly string recipientLower; - private readonly string message; - private readonly DateTime datesent; - private bool delivered; - private readonly bool anonymous; - - public Mail(string sender, string recipient, string message, bool anonymous, DateTime datesent) - { - this.sender = sender; - senderLower = sender.ToLower(); - this.recipient = recipient; - recipientLower = recipient.ToLower(); - this.message = message; - this.datesent = datesent; - delivered = false; - this.anonymous = anonymous; - } - - public string Sender { get { return sender; } } - public string SenderLowercase { get { return senderLower; } } - public string Recipient { get { return recipient; } } - public string RecipientLowercase { get { return recipientLower; } } - public string Content { get { return message; } } - public DateTime DateSent { get { return datesent; } } - public bool Delivered => delivered; - public bool Anonymous { get { return anonymous; } } - public void SetDelivered() { delivered = true; } - - public override string ToString() - { - return String.Format("{0} {1} {2} {3}", Sender, Recipient, Content, DateSent); - } - } - - // Internal variables - private int maxMessageLength = 0; - private DateTime nextMailSend = DateTime.Now; - private MailDatabase mailDatabase = new(); - private IgnoreList ignoreList = new(); - private FileMonitor? mailDbFileMonitor; - private FileMonitor? ignoreListFileMonitor; - private readonly Lock readWriteLock = new(); - - /// - /// Initialization of the Mailer bot - /// - public override void Initialize() - { - LogDebugToConsole(Translations.bot_mailer_init); - LogDebugToConsole(Translations.bot_mailer_init_db + Config.DatabaseFile); - LogDebugToConsole(Translations.bot_mailer_init_ignore + Config.IgnoreListFile); - LogDebugToConsole(Translations.bot_mailer_init_public + Config.PublicInteractions); - LogDebugToConsole(Translations.bot_mailer_init_max_mails + Config.MaxMailsPerPlayer); - LogDebugToConsole(Translations.bot_mailer_init_db_size + Config.MaxDatabaseSize); - LogDebugToConsole(Translations.bot_mailer_init_mail_retention + Config.MailRetentionDays + " days"); - - if (!File.Exists(Config.DatabaseFile)) - { - LogToConsole(string.Format(Translations.bot_mailer_create_db, Path.GetFullPath(Config.DatabaseFile))); - new MailDatabase().SaveToFile(Config.DatabaseFile); - } - - if (!File.Exists(Config.IgnoreListFile)) - { - LogToConsole(string.Format(Translations.bot_mailer_create_ignore, Path.GetFullPath(Config.IgnoreListFile))); - new IgnoreList().SaveToFile(Config.IgnoreListFile); - } - - lock (readWriteLock) - { - LogDebugToConsole(string.Format(Translations.bot_mailer_load_db, Path.GetFullPath(Config.DatabaseFile))); - mailDatabase = MailDatabase.FromFile(Config.DatabaseFile); - - LogDebugToConsole(string.Format(Translations.bot_mailer_load_ignore, Path.GetFullPath(Config.IgnoreListFile))); - ignoreList = IgnoreList.FromFile(Config.IgnoreListFile); - } - - //Initialize file monitors. In case the bot needs to unload for some reason in the future, do not forget to .Dispose() them - mailDbFileMonitor = new FileMonitor(Path.GetDirectoryName(Config.DatabaseFile)!, Path.GetFileName(Config.DatabaseFile), FileMonitorCallback); - ignoreListFileMonitor = new FileMonitor(Path.GetDirectoryName(Config.IgnoreListFile)!, Path.GetFileName(Config.IgnoreListFile), FileMonitorCallback); - - McClient.dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CommandName) - .Executes(r => OnCommandHelp(r.Source, string.Empty))) - ); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Literal("getmails") - .Executes(r => OnCommandGetMails())) - .Then(l => l.Literal("getignored") - .Executes(r => OnCommandGetIgnored())) - .Then(l => l.Literal("addignored") - .Then(l => l.Argument("username", Arguments.String()) - .Executes(r => OnCommandAddIgnored(Arguments.GetString(r, "username"))))) - .Then(l => l.Literal("removeignored") - .Then(l => l.Argument("username", Arguments.String()) - .Executes(r => OnCommandRemoveIgnored(Arguments.GetString(r, "username"))))) - .Then(l => l.Literal("_help") - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Redirect(McClient.dispatcher.GetRoot().GetChild("help").GetChild(CommandName))) - ); - } - - public override void OnUnload() - { - McClient.dispatcher.Unregister(CommandName); - McClient.dispatcher.GetRoot().GetChild("help").RemoveChild(CommandName); - } - - private int OnCommandHelp(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => Translations.bot_mailer_cmd_help + ": /mailer " - + '\n' + McClient.dispatcher.GetAllUsageString(CommandName, false), -#pragma warning restore format // @formatter:on - }); - } - - private int OnCommandGetMails() - { - LogToConsole(string.Format(Translations.bot_mailer_cmd_getmails, string.Join("\n", mailDatabase))); - return 1; - } - - private int OnCommandGetIgnored() - { - LogToConsole(string.Format(Translations.bot_mailer_cmd_getignored, string.Join("\n", ignoreList))); - return 1; - } - - private int OnCommandAddIgnored(string username) - { - if (IsValidName(username)) - { - username = username.ToLower(); - lock (readWriteLock) - { - if (!ignoreList.Contains(username)) - { - ignoreList.Add(username); - ignoreList.SaveToFile(Config.IgnoreListFile); - } - } - LogToConsole(string.Format(Translations.bot_mailer_cmd_ignore_added, username)); - return 1; - } - else - { - LogToConsole(string.Format(Translations.bot_mailer_cmd_ignore_invalid, "addignored")); - return 0; - } - } - - private int OnCommandRemoveIgnored(string username) - { - if (IsValidName(username)) - { - username = username.ToLower(); - lock (readWriteLock) - { - if (ignoreList.Contains(username)) - { - ignoreList.Remove(username); - ignoreList.SaveToFile(Config.IgnoreListFile); - } - } - LogToConsole(string.Format(Translations.bot_mailer_cmd_ignore_removed, username)); - return 1; - } - else - { - LogToConsole(string.Format(Translations.bot_mailer_cmd_ignore_invalid, "removeignored")); - return 0; - } - } - - /// - /// Standard settings for the bot. - /// - public override void AfterGameJoined() - { - maxMessageLength = GetMaxChatMessageLength() - - 44 // Deduct length of "/ 16CharPlayerName 16CharPlayerName mailed: " - - Settings.Config.Main.Advanced.PrivateMsgsCmdName.Length; // Deduct length of "tell" command - } - - /// - /// Process chat messages from the server - /// - public override void GetText(string text) - { - string message = ""; - string username = ""; - text = GetVerbatim(text); - - if (IsPrivateMessage(text, ref message, ref username) || (Config.PublicInteractions && IsChatMessage(text, ref message, ref username))) - { - string usernameLower = username.ToLower(); - if (!ignoreList.Contains(usernameLower)) - { - string command = message.Split(' ')[0].ToLower(); - switch (command) - { - case "mail": - case "tellonym": - if (usernameLower != GetUsername().ToLower() - && mailDatabase.Count < Config.MaxDatabaseSize - && mailDatabase.Where(mail => mail.SenderLowercase == usernameLower).Count() < Config.MaxMailsPerPlayer) - { - Queue args = new(Command.GetArgs(message)); - if (args.Count >= 2) - { - bool anonymous = (command == "tellonym"); - string recipient = args.Dequeue(); - message = string.Join(" ", args); - - if (IsValidName(recipient)) - { - if (message.Length <= maxMessageLength) - { - Mail mail = new(username, recipient, message, anonymous, DateTime.Now); - LogToConsole(string.Format(Translations.bot_mailer_saving, mail.ToString())); - lock (readWriteLock) - { - mailDatabase.Add(mail); - mailDatabase.SaveToFile(Config.DatabaseFile); - } - SendPrivateMessage(username, "Message saved!"); - } - else SendPrivateMessage(username, "Your message cannot be longer than " + maxMessageLength + " characters."); - } - else SendPrivateMessage(username, "Recipient '" + recipient + "' is not a valid player name."); - } - else SendPrivateMessage(username, "Usage: " + command + " "); - } - else SendPrivateMessage(username, "Couldn't save Message. Limit reached!"); - break; - } - } - else LogDebugToConsole(string.Format(Translations.bot_mailer_user_ignored, username)); - } - } - - /// - /// Called on each MCC tick, around 20 times per second - /// - public override void Update() - { - DateTime dateNow = DateTime.Now; - if (nextMailSend < dateNow) - { - LogDebugToConsole(string.Format(Translations.bot_mailer_process_mails, DateTime.Now)); - - // Process at most 3 mails at a time to avoid spamming. Other mails will be processed on next mail send - HashSet onlinePlayersLowercase = new(GetOnlinePlayers().Select(name => name.ToLower())); - foreach (Mail mail in mailDatabase.Where(mail => !mail.Delivered && onlinePlayersLowercase.Contains(mail.RecipientLowercase)).Take(3)) - { - string sender = mail.Anonymous ? "Anonymous" : mail.Sender; - SendPrivateMessage(mail.Recipient, sender + " mailed: " + mail.Content); - mail.SetDelivered(); - LogDebugToConsole(string.Format(Translations.bot_mailer_delivered, mail.ToString())); - } - - lock (readWriteLock) - { - mailDatabase.RemoveAll(mail => mail.Delivered); - mailDatabase.RemoveAll(mail => mail.DateSent.AddDays(Config.MailRetentionDays) < DateTime.Now); - mailDatabase.SaveToFile(Config.DatabaseFile); - } - - nextMailSend = dateNow.AddSeconds(10); - } - } - - /// - /// Called when the Mail Database or Ignore list has changed on disk - /// - /// - /// - private void FileMonitorCallback(object sender, FileSystemEventArgs e) - { - lock (readWriteLock) - { - mailDatabase = MailDatabase.FromFile(Config.DatabaseFile); - ignoreList = IgnoreList.FromFile(Config.IgnoreListFile); - } - } - } -} diff --git a/MinecraftClient/ChatBots/Map.cs b/MinecraftClient/ChatBots/Map.cs deleted file mode 100644 index a686c39a56..0000000000 --- a/MinecraftClient/ChatBots/Map.cs +++ /dev/null @@ -1,540 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Text; -using System.Threading.Tasks; -using Avalonia.Threading; -using Brigadier.NET; -using Brigadier.NET.Builder; -using ImageMagick; -using MinecraftClient.CommandHandler; -using MinecraftClient.CommandHandler.Patch; -using MinecraftClient.Mapping; -using MinecraftClient.Scripting; -using MinecraftClient.Tui; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - public class Map : ChatBot - { - public const string CommandName = "maps"; - - public static Configs Config = new(); - - public struct QueuedMap - { - public string FileName; - public int MapId; - } - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "Map"; - - public bool Enabled = false; - - [TomlInlineComment("$ChatBot.Map.Render_In_Console$")] - public bool Render_In_Console = true; - - [TomlInlineComment("$ChatBot.Map.Save_To_File$")] - public bool Save_To_File = false; - - [TomlInlineComment("$ChatBot.Map.Auto_Render_On_Update$")] - public bool Auto_Render_On_Update = false; - - [TomlInlineComment("$ChatBot.Map.Delete_All_On_Unload$")] - public bool Delete_All_On_Unload = true; - - [TomlInlineComment("$ChatBot.Map.Notify_On_First_Update$")] - public bool Notify_On_First_Update = true; - - [TomlInlineComment("$ChatBot.Map.Rasize_Rendered_Image$")] - public bool Rasize_Rendered_Image = false; - - [TomlInlineComment("$ChatBot.Map.Resize_To$")] - public int Resize_To = 512; - - [TomlPrecedingComment("$ChatBot.Map.Send_Rendered_To_Bridges$")] - public bool Send_Rendered_To_Discord = false; - public bool Send_Rendered_To_Telegram = false; - - public void OnSettingUpdate() - { - if (Resize_To <= 0) - Resize_To = 128; - } - } - - private readonly string baseDirectory = @"Rendered_Maps"; - - internal readonly Dictionary cachedMaps = new(); - - private readonly Queue discordQueue = new(); - - public override void Initialize() - { - if (!Directory.Exists(baseDirectory)) - Directory.CreateDirectory(baseDirectory); - - DeleteRenderedMaps(); - - McClient.dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CommandName) - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - ) - ); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Executes(r => OnCommandList(r.Source)) - .Then(l => l.Literal("list") - .Executes(r => OnCommandList(r.Source))) - .Then(l => l.Literal("render") - .Then(l => l.Argument("MapID", MccArguments.MapBotMapId()) - .Executes(r => OnCommandRender(r.Source, Arguments.GetInteger(r, "MapID"))))) - .Then(l => l.Literal("_help") - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Redirect(McClient.dispatcher.GetRoot().GetChild("help").GetChild(CommandName))) - ); - } - - public override void OnUnload() - { - McClient.dispatcher.Unregister(CommandName); - McClient.dispatcher.GetRoot().GetChild("help").RemoveChild(CommandName); - DeleteRenderedMaps(); - } - - private int OnCommandHelp(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => Translations.error_usage + ": /maps >" - + '\n' + McClient.dispatcher.GetAllUsageString(CommandName, false), -#pragma warning restore format // @formatter:on - }); - } - - private int OnCommandList(CmdResult r) - { - if (cachedMaps.Count == 0) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.bot_map_no_maps); - - LogToConsole(Translations.bot_map_received); - - foreach (var (key, value) in new SortedDictionary(cachedMaps)) - LogToConsole(string.Format(Translations.bot_map_list_item, key, value.LastUpdated)); - - return r.SetAndReturn(CmdResult.Status.Done); - } - - private int OnCommandRender(CmdResult r, int mapId) - { - if (!cachedMaps.ContainsKey(mapId)) - return r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.bot_map_cmd_not_found, mapId)); - - try - { - McMap map = cachedMaps[mapId]; - if (Config.Save_To_File) - SaveToFile(map); - - if (Config.Render_In_Console) - { - if (ConsoleIO.Backend is TuiConsoleBackend) - RenderInTui(map); - else - RenderInConsole(map); - } - - return r.SetAndReturn(CmdResult.Status.Done); - } - catch (Exception e) - { - LogDebugToConsole(e.StackTrace!); - return r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.bot_map_failed_to_render, mapId)); - } - } - - private void DeleteRenderedMaps() - { - if (Config.Delete_All_On_Unload) - { - DirectoryInfo di = new(baseDirectory); - FileInfo[] files = di.GetFiles(); - - foreach (FileInfo file in files) - file.Delete(); - } - } - - public override void OnMapData(int mapid, byte scale, bool trackingPosition, bool locked, List icons, byte columnsUpdated, byte rowsUpdated, byte mapCoulmnX, byte mapRowZ, byte[]? colors) - { - if (columnsUpdated == 0 && cachedMaps.ContainsKey(mapid)) - return; - - if (rowsUpdated <= 0 && columnsUpdated <= 0) - return; - - McMap map = new() - { - MapId = mapid, - Scale = scale, - TrackingPosition = trackingPosition, - Locked = locked, - MapIcons = icons, - Width = columnsUpdated, - Height = rowsUpdated, - X = mapCoulmnX, - Z = mapRowZ, - Colors = colors, - LastUpdated = DateTime.Now - }; - - if (!cachedMaps.ContainsKey(mapid)) - { - cachedMaps.Add(mapid, map); - - if (Config.Notify_On_First_Update) - LogToConsole(string.Format(Translations.bot_map_received_map, map.MapId)); - } - else - { - McMap old_map = cachedMaps[mapid]; - lock (old_map) - { - for (int x = 0; x < map.Width; ++x) - for (int y = 0; y < map.Height; ++y) - old_map.Colors![(map.X + x) + (map.Z + y) * old_map.Width] = map.Colors![x + y * map.Width]; - } - map = old_map; - } - - if (Config.Auto_Render_On_Update) - { - if (Config.Save_To_File) - SaveToFile(map); - - if (Config.Render_In_Console) - { - if (ConsoleIO.Backend is TuiConsoleBackend) - RenderInTui(map); - else - RenderInConsole(map); - } - } - } - - private void SaveToFile(McMap map) - { - string fileName = baseDirectory + Path.DirectorySeparatorChar + "Map_" + map.MapId.ToString().PadLeft(5, '0') + ".bmp"; - - if (File.Exists(fileName)) - File.Delete(fileName); - - using FileStream file = File.OpenWrite(fileName); - file.Write(BitConverter.GetBytes((ushort)0x4d42)); // WORD File Header bfType: "BM" - file.Write(BitConverter.GetBytes((uint)(14 + 40 + 3 * map.Width * map.Height))); // DWORD File Header bfSize - file.Write(BitConverter.GetBytes((ushort)0)); // WORD File Header bfReserved1 - file.Write(BitConverter.GetBytes((ushort)0)); // WORD File Header bfReserved2 - file.Write(BitConverter.GetBytes((uint)54)); // DWORD File Header bfOffBits - file.Write(BitConverter.GetBytes((uint)40)); // DWORD Info Header biSize - file.Write(BitConverter.GetBytes((uint)map.Width)); // LONG Info Header biWidth - file.Write(BitConverter.GetBytes((uint)map.Height)); // LONG Info Header biHeight - file.Write(BitConverter.GetBytes((ushort)1)); // WORD Info Header biPlanes - file.Write(BitConverter.GetBytes((ushort)24)); // WORD Info Header biBitCount - file.Write(BitConverter.GetBytes((uint)0x00)); // DWORD Info Header biCompression: BI_RGB - file.Write(BitConverter.GetBytes((uint)0)); // DWORD Info Header biSizeImage - file.Write(BitConverter.GetBytes((uint)0)); // LONG Info Header biXPelsPerMeter - file.Write(BitConverter.GetBytes((uint)0)); // LONG Info Header biYPelsPerMeter - file.Write(BitConverter.GetBytes((uint)0)); // DWORD Info Header biClrUsed - file.Write(BitConverter.GetBytes((uint)0)); // DWORD Info Header biClrImportant - Span pixel = stackalloc byte[3]; - for (int y = map.Height - 1; y >= 0; --y) - { - for (int x = 0; x < map.Width; ++x) - { - ColorRGBA color = MapColors.ColorByteToRGBA(map.Colors![x + y * map.Width]); - pixel[0] = color.B; pixel[1] = color.G; pixel[2] = color.R; - file.Write(pixel); - } - } - file.Close(); - - LogToConsole(string.Format(Translations.bot_map_rendered, map.MapId, fileName)); - - if (Config.Rasize_Rendered_Image) - { - using (var image = new MagickImage(fileName)) - { - uint resizeTo = (uint)Math.Max(Config.Resize_To, 1); - var size = new MagickGeometry(resizeTo, resizeTo); - size.IgnoreAspectRatio = true; - - image.Resize(size); - image.Write(fileName); - LogToConsole(string.Format(Translations.bot_map_resized_rendered_image, map.MapId, Config.Resize_To)); - } - } - - if (Config.Send_Rendered_To_Discord || Config.Send_Rendered_To_Telegram) - { - // We need to queue up images because Discord/Telegram Bridge is not ready immediatelly - if (DiscordBridge.Config.Enabled || TelegramBridge.Config.Enabled) - discordQueue.Enqueue(new QueuedMap { FileName = fileName, MapId = map.MapId }); - } - } - - public override void Update() - { - DiscordBridge? discordBridge = DiscordBridge.GetInstance(); - TelegramBridge? telegramBridge = TelegramBridge.GetInstance(); - - if (Config.Send_Rendered_To_Discord) - { - if (discordBridge is null || (discordBridge is not null && !discordBridge.IsConnected)) - return; - } - - if (Config.Send_Rendered_To_Telegram) - { - if (telegramBridge is null || (telegramBridge is not null && !telegramBridge.IsConnected)) - return; - } - - if (discordQueue.Count > 0) - { - QueuedMap map = discordQueue.Dequeue(); - string fileName = map.FileName; - - // We must convert to a PNG in order to send to Discord, BMP does not work - string newFileName = fileName.Replace(".bmp", ".png"); - using (var image = new MagickImage(fileName)) - { - image.Write(newFileName); - - if (Config.Send_Rendered_To_Discord) - discordBridge!.SendImage(newFileName, $"> A render of the map with an id: **{map.MapId}**"); - - if (Config.Send_Rendered_To_Telegram) - telegramBridge!.SendImage(newFileName, $"A render of the map with an id: *{map.MapId}*"); - - newFileName = Directory.GetCurrentDirectory() + Path.DirectorySeparatorChar + newFileName; - - if (Config.Send_Rendered_To_Discord) - LogToConsole(string.Format(Translations.bot_map_sent_to_discord, map.MapId)); - - if (Config.Send_Rendered_To_Telegram) - LogToConsole(string.Format(Translations.bot_map_sent_to_telegram, map.MapId)); - - // Wait for 2 seconds and then try until file is free for deletion - // 10 seconds timeout - Task.Run(async () => - { - await Task.Delay(2000); - - var time = Stopwatch.StartNew(); - - while (time.ElapsedMilliseconds < 10000) // 10 seconds - { - try - { - // Delete the temporary file - if (File.Exists(newFileName)) - File.Delete(newFileName); - } - catch (IOException) { } - } - }); - } - } - } - - private static void RenderInTui(McMap map) - { - var view = TuiConsoleBackend.Instance?.GetView(); - if (view is null) - return; - - Dispatcher.UIThread.Post(() => - { - if (view.HasOverlay && view.OverlayContent is MapOverlay existing) - { - existing.UpdateMap(map); - return; - } - - view.ShowOverlay(new MapOverlay(map)); - }); - } - - private static void RenderInConsole(McMap map) - { - StringBuilder sb = new(); - int safeBufWidth, safeBufHeight; - try { safeBufWidth = Console.BufferWidth; } catch { safeBufWidth = 120; } - try { safeBufHeight = Console.BufferHeight; } catch { safeBufHeight = 50; } - int consoleWidth = Math.Max(safeBufWidth, Settings.Config.Main.Advanced.MinTerminalWidth) / 2; - int consoleHeight = Math.Max(safeBufHeight, Settings.Config.Main.Advanced.MinTerminalHeight) - 1; - int scaleX = (map.Width + consoleWidth - 1) / consoleWidth; - int scaleY = (map.Height + consoleHeight - 1) / consoleHeight; - int scale = Math.Max(scaleX, scaleY); - if (scale > 1) - sb.AppendLine(string.Format(Translations.bot_map_scale, map.Width, map.Height, map.Width / scale, map.Height / scale)); - - for (int base_y = 0; base_y < map.Height; base_y += scale) - { - string lastFg = string.Empty, lagtBg = string.Empty; - for (int base_x = 0; base_x < map.Width; base_x += scale) - { - int RUL = 0, GUL = 0, BUL = 0, RUR = 0, GUR = 0, BUR = 0; - int RDL = 0, GDL = 0, BDL = 0, RDR = 0, GDR = 0, BDR = 0; - double mid = (double)(scale - 1) / 2; - for (int dy = 0; dy < scale; ++dy) - { - for (int dx = 0; dx < scale; ++dx) - { - int x = Math.Min(base_x + dx, map.Width - 1); - int y = Math.Min(base_y + dy, map.Height - 1); - ColorRGBA color = MapColors.ColorByteToRGBA(map.Colors![x + y * map.Width]); - if (dx <= mid) - { - if (dy <= mid) - { - RUL += color.R; GUL += color.G; BUL += color.B; - } - if (dy >= mid) - { - RDL += color.R; GDL += color.G; BDL += color.B; - } - } - if (dx >= mid) - { - if (dy <= mid) - { - RUR += color.R; GUR += color.G; BUR += color.B; - } - if (dy >= mid) - { - RDR += color.R; GDR += color.G; BDR += color.B; - } - } - } - } - - int pixel_cnt = ((scale + 1) / 2) * ((scale + 1) / 2); - RDL = (int)Math.Round((double)RDL / pixel_cnt); - GDL = (int)Math.Round((double)GDL / pixel_cnt); - BDL = (int)Math.Round((double)BDL / pixel_cnt); - RDR = (int)Math.Round((double)RDR / pixel_cnt); - GDR = (int)Math.Round((double)GDR / pixel_cnt); - BDR = (int)Math.Round((double)BDR / pixel_cnt); - - RUL = (int)Math.Round((double)RUL / pixel_cnt); - GUL = (int)Math.Round((double)GUL / pixel_cnt); - BUL = (int)Math.Round((double)BUL / pixel_cnt); - RUR = (int)Math.Round((double)RUR / pixel_cnt); - GUR = (int)Math.Round((double)GUR / pixel_cnt); - BUR = (int)Math.Round((double)BUR / pixel_cnt); - - string colorCode = ColorHelper.GetColorEscapeCode((byte)RUL, (byte)GUL, (byte)BUL, true); - if (lastFg != colorCode) { sb.Append(colorCode); lastFg = colorCode; } - colorCode = ColorHelper.GetColorEscapeCode((byte)RDL, (byte)GDL, (byte)BDL, false); - if (lagtBg != colorCode) { sb.Append(colorCode); lagtBg = colorCode; } - sb.Append('▀'); - - colorCode = ColorHelper.GetColorEscapeCode((byte)RUR, (byte)GUR, (byte)BUR, true); - if (lastFg != colorCode) { sb.Append(colorCode); lastFg = colorCode; } - colorCode = ColorHelper.GetColorEscapeCode((byte)RDR, (byte)GDR, (byte)BDR, false); - if (lagtBg != colorCode) { sb.Append(colorCode); lagtBg = colorCode; } - sb.Append('▀'); - } - if (base_y >= map.Height - scale) - sb.Append(ColorHelper.GetResetEscapeCode()); - else - sb.AppendLine(ColorHelper.GetResetEscapeCode()); - } - ConsoleIO.WriteLine(sb.ToString()); - } - } - - internal class McMap - { - public int MapId { get; set; } - public byte Scale { get; set; } - public bool TrackingPosition { get; set; } - public bool Locked { get; set; } - public List? MapIcons { get; set; } - public byte Width { get; set; } // rows - public byte Height { get; set; } // columns - public byte X { get; set; } - public byte Z { get; set; } - public byte[]? Colors; - public DateTime LastUpdated { get; set; } - } - - /// - /// Map packet base color palette. Colors are loaded from the embedded - /// MinimapBlockColors.json resource (map_palette section) generated by - /// tools/gen_block_color_map.py, which parses MapColor.java. - /// - internal static class MapColors - { - private static readonly Dictionary Colors; - - private static readonly byte[] ShadeMultipliers = [180, 220, 255, 135]; - - static MapColors() - { - Colors = new Dictionary(); - try - { - using var stream = System.Reflection.Assembly.GetExecutingAssembly() - .GetManifestResourceStream("MinimapBlockColors.json"); - if (stream is not null) - { - using var doc = System.Text.Json.JsonDocument.Parse(stream); - if (doc.RootElement.TryGetProperty("map_palette", out var palette)) - { - foreach (var prop in palette.EnumerateObject()) - { - if (!byte.TryParse(prop.Name, out byte id)) - continue; - var arr = prop.Value; - Colors[id] = [ - arr[0].GetByte(), - arr[1].GetByte(), - arr[2].GetByte() - ]; - } - } - } - } - catch (Exception ex) - { - ConsoleIO.WriteLogLine($"[Map] Failed to load map palette: {ex.Message}"); - } - } - - public static ColorRGBA ColorByteToRGBA(byte receivedColorId) - { - byte baseColorId = (byte)(receivedColorId >> 2); - - if (!Colors.TryGetValue(baseColorId, out byte[]? rgb)) - return new(248, 0, 248, 255, true); - - byte multiplier = ShadeMultipliers[receivedColorId & 3]; - - return new( - r: (byte)(rgb[0] * multiplier / 255), - g: (byte)(rgb[1] * multiplier / 255), - b: (byte)(rgb[2] * multiplier / 255), - a: 255 - ); - } - } -} diff --git a/MinecraftClient/ChatBots/McpServer.cs b/MinecraftClient/ChatBots/McpServer.cs deleted file mode 100644 index f9f7394d00..0000000000 --- a/MinecraftClient/ChatBots/McpServer.cs +++ /dev/null @@ -1,272 +0,0 @@ -using System; -using MinecraftClient.Mapping; -using MinecraftClient.Mcp; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - public class McpServer : ChatBot - { - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "McpServer"; - - [TomlInlineComment("$ChatBot.McpServer.Enabled$")] - public bool Enabled = false; - - [TomlPrecedingComment("$ChatBot.McpServer.Transport$")] - public MccMcpTransportConfig Transport = new(); - - [TomlPrecedingComment("$ChatBot.McpServer.Capabilities$")] - public MccMcpCapabilityToggles Capabilities = new(); - - public void OnSettingUpdate() - { - Transport ??= new MccMcpTransportConfig(); - Capabilities ??= new MccMcpCapabilityToggles(); - - if (Transport.Port is < 1 or > 65535) - Transport.Port = 33333; - - if (string.IsNullOrWhiteSpace(Transport.BindHost)) - Transport.BindHost = "127.0.0.1"; - - if (string.IsNullOrWhiteSpace(Transport.Route)) - Transport.Route = "/mcp"; - - if (!Transport.Route.StartsWith('/')) - Transport.Route = "/" + Transport.Route; - - if (string.IsNullOrWhiteSpace(Transport.AuthTokenEnvVar)) - Transport.AuthTokenEnvVar = "MCC_MCP_AUTH_TOKEN"; - } - } - - private MccEmbeddedMcpHost? host; - - public override void Initialize() - { - Config.OnSettingUpdate(); - } - - public override void AfterGameJoined() - { - if (!Config.Enabled) - return; - - ClearStores(); - - MccMcpConfig mcpConfig = new() - { - Enabled = Config.Enabled, - Transport = Config.Transport, - Capabilities = Config.Capabilities - }; - - host ??= new MccEmbeddedMcpHost(mcpConfig, new MccMcpCapabilities(() => Config.Capabilities)); - - if (host.IsRunning) - return; - - LogToConsole(Translations.bot_mcpserver_starting); - if (!host.Start(out string? error)) - { - if (error == "missing_auth_token") - LogToConsole(string.Format(Translations.bot_mcpserver_missing_auth_token, Config.Transport.AuthTokenEnvVar)); - LogToConsole(string.Format(Translations.bot_mcpserver_start_failed, error ?? "unknown")); - return; - } - - LogToConsole(string.Format(Translations.bot_mcpserver_started, host.Endpoint)); - } - - public override bool OnDisconnect(DisconnectReason reason, string message) - { - MccObservedStateStore.AddRecentEvent("disconnect", new - { - reason = reason.ToString(), - message - }); - StopHost(); - ClearStores(); - return false; - } - - public override void OnUnload() - { - StopHost(); - ClearStores(); - } - - public override void GetText(string text, string? json) - { - string clean = GetVerbatim(text); - if (string.IsNullOrWhiteSpace(clean)) - return; - - string kind = "system"; - string? sender = null; - string? message = null; - - string parsedMessage = string.Empty; - string parsedSender = string.Empty; - if (IsPrivateMessage(clean, ref parsedMessage, ref parsedSender)) - { - kind = "private"; - sender = parsedSender; - message = parsedMessage; - } - else if (IsChatMessage(clean, ref parsedMessage, ref parsedSender)) - { - kind = "chat"; - sender = parsedSender; - message = parsedMessage; - } - - MccObservedStateStore.AddChatHistoryEntry(new MccChatHistoryEntry - { - TimestampUtc = DateTimeOffset.UtcNow, - Kind = kind, - Text = clean, - Sender = sender, - Message = message, - Json = json - }); - } - - public override void OnTimeUpdate(long WorldAge, long TimeOfDay) - { - MccObservedStateStore.SetTime(WorldAge, TimeOfDay); - } - - public override void OnRainLevelChange(float level) - { - MccObservedStateStore.SetRainLevel(level); - MccObservedStateStore.AddRecentEvent("weather_rain", new { level }); - } - - public override void OnThunderLevelChange(float level) - { - MccObservedStateStore.SetThunderLevel(level); - MccObservedStateStore.AddRecentEvent("weather_thunder", new { level }); - } - - public override void OnDeath() - { - MccObservedStateStore.AddRecentEvent("death"); - } - - public override void OnRespawn() - { - MccObservedStateStore.AddRecentEvent("respawn"); - } - - public override void OnPlayerJoin(Guid uuid, string name) - { - MccObservedStateStore.AddRecentEvent("player_join", new - { - uuid, - name - }); - } - - public override void OnPlayerLeave(Guid uuid, string? name) - { - MccObservedStateStore.AddRecentEvent("player_leave", new - { - uuid, - name - }); - } - - public override void OnInventoryOpen(int inventoryId) - { - MccObservedStateStore.AddRecentEvent("inventory_open", new { inventoryId }); - } - - public override void OnInventoryClose(int inventoryId) - { - MccObservedStateStore.AddRecentEvent("inventory_close", new { inventoryId }); - } - - public override void OnTitle(int action, string titletext, string subtitletext, string actionbartext, int fadein, int stay, int fadeout, string json) - { - if (action == 2) - { - MccObservedStateStore.AddRecentEvent("actionbar", new - { - action, - text = actionbartext, - fadein, - stay, - fadeout, - json - }); - return; - } - - if (action is 0 or 1) - { - MccObservedStateStore.AddRecentEvent("title", new - { - action, - titleText = titletext, - subtitleText = subtitletext, - fadein, - stay, - fadeout, - json - }); - } - } - - public override void OnBlockBreakAnimation(Entity entity, Location location, byte stage) - { - MccObservedStateStore.AddRecentEvent("block_break_animation", new - { - entityId = entity.ID, - entityType = entity.Type.ToString(), - stage, - location = new - { - x = location.X, - y = location.Y, - z = location.Z - } - }); - } - - public override void OnEntityAnimation(Entity entity, byte animation) - { - MccObservedStateStore.AddRecentEvent("entity_animation", new - { - entityId = entity.ID, - entityType = entity.Type.ToString(), - animation, - name = entity.Name, - customName = entity.CustomName - }); - } - - private void StopHost() - { - if (host is null || !host.IsRunning) - return; - - if (host.Stop(out string? error)) - LogToConsole(Translations.bot_mcpserver_stopped); - else - LogToConsole(string.Format(Translations.bot_mcpserver_stop_failed, error ?? "unknown")); - } - - private static void ClearStores() - { - MccObservedStateStore.ClearAll(); - } - } -} diff --git a/MinecraftClient/ChatBots/PlayerListLogger.cs b/MinecraftClient/ChatBots/PlayerListLogger.cs deleted file mode 100644 index 333ff1fd01..0000000000 --- a/MinecraftClient/ChatBots/PlayerListLogger.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; -using System.Text; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - /// - /// This bot sends a /list command every X seconds and save the result. - /// - - public class PlayerListLogger : ChatBot - { - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "PlayerListLogger"; - - public bool Enabled = false; - - public string File = "playerlog.txt"; - - [TomlInlineComment("$ChatBot.PlayerListLogger.Delay$")] - public double Delay = 60; - - public void OnSettingUpdate() - { - File ??= string.Empty; - - if (Delay < 1.0) - Delay = 1.0; - } - } - - private int count = 0; - - public override void Update() - { - count++; - if (count >= Settings.DoubleToTick(Config.Delay)) - { - DateTime now = DateTime.Now; - - LogDebugToConsole("Saving Player List"); - - StringBuilder sb = new(); - sb.AppendLine(string.Format("[{0}/{1}/{2} {3}:{4}]", now.Year, now.Month, now.Day, now.Hour, now.Minute)); - sb.AppendLine(string.Join(", ", GetOnlinePlayers())).AppendLine(); - System.IO.File.AppendAllText(Settings.Config.AppVar.ExpandVars(Config.File), sb.ToString()); - - count = 0; - } - } - } -} diff --git a/MinecraftClient/ChatBots/RemoteControl.cs b/MinecraftClient/ChatBots/RemoteControl.cs deleted file mode 100644 index 301e16f85c..0000000000 --- a/MinecraftClient/ChatBots/RemoteControl.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System; -using MinecraftClient.CommandHandler; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - /// - /// Allow to perform operations using whispers to the bot - /// - - public class RemoteControl : ChatBot - { - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "RemoteControl"; - - public bool Enabled = false; - - public bool AutoTpaccept = true; - - public bool AutoTpaccept_Everyone = false; - - public void OnSettingUpdate() { } - } - - public override void GetText(string text) - { - text = GetVerbatim(text).Trim(); - string command = "", sender = ""; - if (IsPrivateMessage(text, ref command, ref sender) && Settings.Config.Main.Advanced.BotOwners.Contains(sender.ToLower().Trim())) - { - CmdResult response = new(); - PerformInternalCommand(command, ref response); - SendPrivateMessage(sender, response.ToString()); - } - else if (Config.AutoTpaccept - && IsTeleportRequest(text, ref sender) - && (Config.AutoTpaccept_Everyone || Settings.Config.Main.Advanced.BotOwners.Contains(sender.ToLower().Trim()))) - { - SendText("/tpaccept"); - } - } - } -} diff --git a/MinecraftClient/ChatBots/ReplayCapture.cs b/MinecraftClient/ChatBots/ReplayCapture.cs deleted file mode 100644 index 1c9b50cf74..0000000000 --- a/MinecraftClient/ChatBots/ReplayCapture.cs +++ /dev/null @@ -1,145 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.CommandHandler.Patch; -using MinecraftClient.Protocol; -using MinecraftClient.Scripting; -using Tomlet.Attributes; - -namespace MinecraftClient.ChatBots -{ - /// - /// Record and save replay file that can be used by the Replay mod (https://www.replaymod.com/) - /// - public class ReplayCapture : ChatBot - { - public const string CommandName = "replay"; - - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "ReplayCapture"; - - public bool Enabled = false; - - [TomlInlineComment("$ChatBot.ReplayCapture.Backup_Interval$")] - public double Backup_Interval = 300.0; - - public void OnSettingUpdate() - { - if (Backup_Interval < -1) - Backup_Interval = -1; - } - } - - private ReplayHandler? replay; - private int backupCounter = -1; - - public override void Initialize() - { - SetNetworkPacketEventEnabled(true); - replay = new ReplayHandler(GetProtocolVersion(), $"{GetServerHost()}:{GetServerPort()}"); - backupCounter = Settings.DoubleToTick(Config.Backup_Interval); - - McClient.dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CommandName) - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - ) - ); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Literal("save") - .Executes(r => OnCommandSave(r.Source))) - .Then(l => l.Literal("stop") - .Executes(r => OnCommandStop(r.Source))) - .Then(l => l.Literal("_help") - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Redirect(McClient.dispatcher.GetRoot().GetChild("help").GetChild(CommandName))) - ); - } - - public override void OnUnload() - { - McClient.dispatcher.Unregister(CommandName); - McClient.dispatcher.GetRoot().GetChild("help").RemoveChild(CommandName); - replay?.Dispose(); - replay = null; - } - - private int OnCommandHelp(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => string.Format(Translations.general_available_cmd, "save, stop") - + '\n' + McClient.dispatcher.GetAllUsageString(CommandName, false), -#pragma warning restore format // @formatter:on - }); - } - - private int OnCommandSave(CmdResult r) - { - try - { - if (replay is { RecordRunning: true }) - { - replay.CreateBackupReplay(Path.Combine(replay.ReplayFileDirectory, replay.GetReplayDefaultName())); - return r.SetAndReturn(CmdResult.Status.Done, Translations.bot_replayCapture_created); - } - else - return r.SetAndReturn(CmdResult.Status.Fail, Translations.bot_replayCapture_restart); - } - catch (Exception e) - { - return r.SetAndReturn(CmdResult.Status.Fail, e.Message); - } - } - - private int OnCommandStop(CmdResult r) - { - try - { - if (replay is { RecordRunning: true }) - { - replay.OnShutDown(); - return r.SetAndReturn(CmdResult.Status.Done, Translations.bot_replayCapture_stopped); - } - else - return r.SetAndReturn(CmdResult.Status.Fail, Translations.bot_replayCapture_restart); - } - catch (Exception e) - { - return r.SetAndReturn(CmdResult.Status.Fail, e.Message); - } - } - - public override void OnNetworkPacket(int packetID, List packetData, bool isLogin, bool isInbound) - { - replay?.AddPacket(packetID, packetData, isLogin, isInbound); - } - - public override void Update() - { - if (Config.Backup_Interval > 0 && replay is { RecordRunning: true }) - { - if (backupCounter <= 0) - { - replay.CreateBackupReplay(replay.GetBackupReplayPath()); - backupCounter = Settings.DoubleToTick(Config.Backup_Interval); - } - else backupCounter--; - } - } - - public override bool OnDisconnect(DisconnectReason reason, string message) - { - replay?.OnShutDown(); - return base.OnDisconnect(reason, message); - } - } -} diff --git a/MinecraftClient/ChatBots/Script.cs b/MinecraftClient/ChatBots/Script.cs deleted file mode 100644 index 4f764aa4c1..0000000000 --- a/MinecraftClient/ChatBots/Script.cs +++ /dev/null @@ -1,283 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.IO; -using System.Reflection; -using System.Text; -using System.Threading; -using MinecraftClient.CommandHandler; -using MinecraftClient.Scripting; - -namespace MinecraftClient.ChatBots -{ - /// - /// Runs a list of commands - /// - - public class Script : ChatBot - { - private string? file; - private string[] lines = Array.Empty(); - private string[] args = Array.Empty(); - private int sleepticks = Settings.ClientTicksPerSecond; - private int nextline = 0; - private readonly string? owner; - private bool csharp; - private Thread? thread; - private readonly Dictionary? localVars; - private readonly string? scriptOwnerKey; - - public Script(string filename) - { - ParseArguments(filename); - } - - public Script(string filename, string? ownername, Dictionary? localVars) - : this(filename) - { - owner = ownername; - this.localVars = localVars; - } - - internal Script(string filename, string? ownername, Dictionary? localVars, string? scriptOwnerKey) - : this(filename, ownername, localVars) - { - this.scriptOwnerKey = scriptOwnerKey; - SetScriptOwnerKey(scriptOwnerKey); - } - - private void ParseArguments(string argstr) - { - List args = new(); - StringBuilder str = new(); - - bool escape = false; - bool quotes = false; - - foreach (char c in argstr) - { - if (escape) - { - if (c != '"') - str.Append('\\'); - str.Append(c); - escape = false; - } - else - { - if (c == '\\') - escape = true; - else if (c == '"') - quotes = !quotes; - else if (c == ' ' && !quotes) - { - if (str.Length > 0) - args.Add(str.ToString()); - str.Clear(); - } - else str.Append(c); - } - } - - if (str.Length > 0) - args.Add(str.ToString()); - - if (args.Count > 0) - { - file = args[0]; - args.RemoveAt(0); - this.args = args.ToArray(); - } - else file = ""; - } - - public static bool LookForScript(ref string filename) - { - //Automatically look in subfolders and try to add ".txt" file extension - char dir_slash = Path.DirectorySeparatorChar; - string[] files = new string[] - { - filename, - filename + ".txt", - filename + ".cs", - "scripts" + dir_slash + filename, - "scripts" + dir_slash + filename + ".txt", - "scripts" + dir_slash + filename + ".cs", - "config" + dir_slash + filename, - "config" + dir_slash + filename + ".txt", - "config" + dir_slash + filename + ".cs", - }; - - foreach (string possible_file in files) - { - if (System.IO.File.Exists(possible_file)) - { - filename = possible_file; - return true; - } - } - - if (Settings.Config.Logging.DebugMessages) - { - string caller = "Script"; - try - { - StackFrame frame = new(1); - MethodBase method = frame.GetMethod()!; - Type type = method.DeclaringType!; - caller = type.Name; - } - catch { } - ConsoleIO.WriteLineFormatted(string.Format(Translations.bot_script_not_found, caller, filename)); - } - - return false; - } - - public override void Initialize() - { - //Load the given file from the startup parameters - if (LookForScript(ref file!)) - { - lines = System.IO.File.ReadAllLines(file, Encoding.UTF8); - csharp = file.EndsWith(".cs"); - thread = null; - - if (!String.IsNullOrEmpty(owner)) - SendPrivateMessage(owner, string.Format(Translations.bot_script_pm_loaded, file)); - } - else - { - LogToConsole(string.Format(Translations.bot_script_file_not_found, System.IO.Path.GetFullPath(file))); - - if (!String.IsNullOrEmpty(owner)) - SendPrivateMessage(owner, string.Format(Translations.bot_script_file_not_found, file)); - - UnloadBot(); //No need to keep the bot active - } - } - - public override bool OnDisconnect(DisconnectReason reason, string message) - { - UnloadBot(); - return false; - } - - public override void Update() - { - if (csharp) //C# compiled script - { - //Initialize thread on first update - if (thread is null) - { - thread = new Thread(() => - { - try - { - CSharpRunner.Run(this, lines, args, localVars, scriptName: file!, scriptOwnerKey: scriptOwnerKey); - } - catch (CSharpException e) - { - string errorMessage = string.Format(Translations.bot_script_fail, file, e.ExceptionType); - LogToConsole(errorMessage); - if (owner is not null) - SendPrivateMessage(owner, errorMessage); - LogToConsole(e.InnerException); - } - }) - { - Name = "MCC Script - " + file - }; - thread.Start(); - } - - //Unload bot once the thread has finished running - if (thread is not null && !thread.IsAlive) - { - UnloadBot(); - } - } - else //Classic MCC script interpreter - { - if (sleepticks > 0) { sleepticks--; } - else - { - if (nextline < lines.Length) //Is there an instruction left to interpret? - { - string instruction_line = lines[nextline].Trim(); // Removes all whitespaces at start and end of current line - nextline++; //Move the cursor so that the next time the following line will be interpreted - - if (instruction_line.Length > 1) - { - if (instruction_line[0] != '#' && instruction_line[0] != '/' && instruction_line[1] != '/') - { - instruction_line = Settings.Config.AppVar.ExpandVars(instruction_line, localVars); - string instruction_name = instruction_line.Split(' ')[0]; - switch (instruction_name.ToLower()) - { - case "wait": - int ticks = Settings.ClientTicksPerSecond; - try - { - if (instruction_line[5..].Contains("to", StringComparison.OrdinalIgnoreCase) || - instruction_line[5..].Contains("-")) - { - var processedLine = instruction_line.Replace("wait", "") - .Trim() - .ToLower(); - processedLine = string.Join("", processedLine.Split(default(string[]), StringSplitOptions.RemoveEmptyEntries)); - var parts = processedLine.Contains("to") ? processedLine.Split("to") : processedLine.Split("-"); - - if (parts.Length == 2) - { - var min = Convert.ToInt32(parts[0]); - var max = Convert.ToInt32(parts[1]); - - if (min > max) - { - (min, max) = (max, min); - LogToConsole(Translations.cmd_wait_random_min_bigger); - } - - ticks = new Random().Next(min, max); - } - else ticks = Convert.ToInt32(instruction_line[5..]); - } - else ticks = Convert.ToInt32(instruction_line[5..]); - } - catch { } - sleepticks = ticks; - break; - default: - CmdResult response = new(); - if (PerformInternalCommand(instruction_line, ref response)) - { - if (instruction_name.ToLower() != "log") - { - LogToConsole(instruction_line); - } - if (response.status != CmdResult.Status.Done || !string.IsNullOrWhiteSpace(response.result)) - { - LogToConsole(response); - } - } - else - { - Update(); //Unknown command : process next line immediately - } - break; - } - } - else { Update(); } //Comment: process next line immediately - } - } - else - { - //No more instructions to interpret - UnloadBot(); - } - } - } - } - } -} diff --git a/MinecraftClient/ChatBots/ScriptScheduler.cs b/MinecraftClient/ChatBots/ScriptScheduler.cs deleted file mode 100644 index f5af44ecd7..0000000000 --- a/MinecraftClient/ChatBots/ScriptScheduler.cs +++ /dev/null @@ -1,320 +0,0 @@ -using System; -using MinecraftClient.CommandHandler; -using MinecraftClient.Scripting; -using Tomlet.Attributes; -using static MinecraftClient.ChatBots.ScriptScheduler.Configs; - -namespace MinecraftClient.ChatBots -{ - /// - /// Trigger scripts on specific events - /// - - public class ScriptScheduler : ChatBot - { - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "ScriptScheduler"; - - public bool Enabled = false; - - public TaskConfig[] TaskList = new TaskConfig[] { - new TaskConfig( - Task_Name: "Task Name 1", - Trigger_On_First_Login: false, - Trigger_On_Login: false, - Trigger_On_Times: new(true, new TimeSpan[] { new(14, 00, 00) }), - Trigger_On_Interval: new(true, 3.6, 4.8), - Action: "send /hello" - ), - new TaskConfig( - Task_Name: "Task Name 2", - Trigger_On_First_Login: false, - Trigger_On_Login: true, - Trigger_On_Times: new(false, Array.Empty() ), - Trigger_On_Interval: new(false, 1, 10), - Action: "send /login pass" - ), - }; - - public void OnSettingUpdate() - { - foreach (TaskConfig task in TaskList) - { - task.Trigger_On_Interval.MinTime = Math.Max(0.1, task.Trigger_On_Interval.MinTime); - task.Trigger_On_Interval.MaxTime = Math.Max(0.1, task.Trigger_On_Interval.MaxTime); - if (task.Trigger_On_Interval.MinTime > task.Trigger_On_Interval.MaxTime) - (task.Trigger_On_Interval.MinTime, task.Trigger_On_Interval.MaxTime) = (task.Trigger_On_Interval.MaxTime, task.Trigger_On_Interval.MinTime); - - //Look for a valid action - if (!String.IsNullOrWhiteSpace(task.Action)) - { - //Look for a valid trigger - if (task.Trigger_On_Login - || task.Trigger_On_First_Login - || (task.Trigger_On_Times.Enable && task.Trigger_On_Times.Times.Length > 0) - || (task.Trigger_On_Interval.Enable && task.Trigger_On_Interval.MinTime > 0)) - { - if (Settings.Config.Logging.DebugMessages) - LogToConsole(BotName, string.Format(Translations.bot_scriptScheduler_loaded_task, Task2String(task))); - task.Trigger_On_Interval_Countdown = Settings.DoubleToTick(task.Trigger_On_Interval.MinTime); //Init countdown for interval - } - else - { - if (Settings.Config.Logging.DebugMessages) - LogToConsole(BotName, string.Format(Translations.bot_scriptScheduler_no_trigger, Task2String(task))); - } - } - else - { - task.Action ??= string.Empty; - if (Settings.Config.Logging.DebugMessages) - LogToConsole(BotName, string.Format(Translations.bot_scriptScheduler_no_action, Task2String(task))); - } - } - - if (Enabled && TaskList.Length == 0) - { - LogToConsole(BotName, Translations.general_bot_unload); - Enabled = false; - } - } - - public class TaskConfig - { - public string Task_Name = "Task Name (Can be empty)"; - public bool Trigger_On_First_Login = false; - public bool Trigger_On_Login = false; - public TriggerOnTimeConfig Trigger_On_Times = new(false, new TimeSpan[] { new(23, 59, 59) }); - public TriggerOnIntervalConfig Trigger_On_Interval = new(false, 1, 10); - public string Action = "send /hello"; - - [NonSerialized] - public bool Trigger_On_Time_Already_Triggered = false; - - [NonSerialized] - public int Trigger_On_Interval_Countdown = 0; - - public TaskConfig() { } - - public TaskConfig(string Task_Name, bool Trigger_On_First_Login, bool Trigger_On_Login, TriggerOnTimeConfig Trigger_On_Times, TriggerOnIntervalConfig Trigger_On_Interval, string Action) - { - this.Task_Name = Task_Name; - this.Trigger_On_First_Login = Trigger_On_First_Login; - this.Trigger_On_Login = Trigger_On_Login; - this.Trigger_On_Times = Trigger_On_Times; - this.Trigger_On_Interval = Trigger_On_Interval; - this.Action = Action; - } - - public struct TriggerOnTimeConfig - { - public bool Enable = false; - public TimeSpan[] Times; - - public TriggerOnTimeConfig() - { - Enable = false; - Times = Array.Empty(); - } - - public TriggerOnTimeConfig(bool Enable, TimeSpan[] Time) - { - this.Enable = Enable; - this.Times = Time; - } - - public TriggerOnTimeConfig(TimeSpan[] Time) - { - this.Enable = true; - this.Times = Time; - } - } - - public struct TriggerOnIntervalConfig - { - public bool Enable = false; - public double MinTime, MaxTime; - - public TriggerOnIntervalConfig() - { - Enable = false; - MinTime = 0; - MaxTime = 0; - } - - public TriggerOnIntervalConfig(double value) - { - this.Enable = true; - MinTime = MaxTime = value; - } - - public TriggerOnIntervalConfig(bool Enable, double value) - { - this.Enable = Enable; - MinTime = MaxTime = value; - } - - public TriggerOnIntervalConfig(double min, double max) - { - this.MinTime = min; - this.MaxTime = max; - } - - public TriggerOnIntervalConfig(bool Enable, double min, double max) - { - this.Enable = Enable; - this.MinTime = min; - this.MaxTime = max; - } - } - } - } - - private Random random = new(); - - private static bool firstlogin_done = false; - - private bool serverlogin_done = false; - private int verifytasks_timeleft = Settings.ClientTicksPerSecond; - private readonly int verifytasks_delay = Settings.ClientTicksPerSecond; - - public override void AfterGameJoined() - { - if (serverlogin_done) - return; - - serverlogin_done = true; - verifytasks_timeleft = verifytasks_delay; - RunLoginTasks(); - } - - public override void Update() - { - if (!serverlogin_done) - return; - - if (verifytasks_timeleft <= 0) - { - verifytasks_timeleft = verifytasks_delay; - for (int taskIndex = 0; taskIndex < Config.TaskList.Length; taskIndex++) - { - TaskConfig task = Config.TaskList[taskIndex]; - if (task.Trigger_On_Times.Enable) - { - bool matching_time_found = false; - - foreach (TimeSpan time in task.Trigger_On_Times.Times) - { - if (time.Hours == DateTime.Now.Hour && time.Minutes == DateTime.Now.Minute) - { - matching_time_found = true; - if (!task.Trigger_On_Time_Already_Triggered) - { - task.Trigger_On_Time_Already_Triggered = true; - RunTaskAction(task, taskIndex, string.Format(Translations.bot_scriptScheduler_running_time, task.Action)); - } - } - } - - if (!matching_time_found) - task.Trigger_On_Time_Already_Triggered = false; - } - } - } - else verifytasks_timeleft--; - - for (int taskIndex = 0; taskIndex < Config.TaskList.Length; taskIndex++) - { - TaskConfig task = Config.TaskList[taskIndex]; - if (task.Trigger_On_Interval.Enable) - { - if (task.Trigger_On_Interval_Countdown == 0) - { - task.Trigger_On_Interval_Countdown = random.Next( - Settings.DoubleToTick(task.Trigger_On_Interval.MinTime), Settings.DoubleToTick(task.Trigger_On_Interval.MaxTime) - ); - RunTaskAction(task, taskIndex, string.Format(Translations.bot_scriptScheduler_running_inverval, task.Action)); - } - else task.Trigger_On_Interval_Countdown--; - } - } - } - - public override bool OnDisconnect(DisconnectReason reason, string message) - { - serverlogin_done = false; - return false; - } - - private void RunLoginTasks() - { - bool isFirstLogin = !firstlogin_done; - - for (int taskIndex = 0; taskIndex < Config.TaskList.Length; taskIndex++) - { - TaskConfig task = Config.TaskList[taskIndex]; - if (task.Trigger_On_Login || (isFirstLogin && task.Trigger_On_First_Login)) - RunTaskAction(task, taskIndex, string.Format(Translations.bot_scriptScheduler_running_login, task.Action)); - } - - firstlogin_done = true; - } - - private void RunTaskAction(TaskConfig task, int taskIndex, string debugMessage) - { - LogDebugToConsole(debugMessage); - - if (TryRunOwnedScript(task, taskIndex)) - return; - - CmdResult response = new(); - PerformInternalCommand(task.Action, ref response); - if (response.status != CmdResult.Status.Done || !string.IsNullOrWhiteSpace(response.result)) - LogToConsole(response); - } - - private bool TryRunOwnedScript(TaskConfig task, int taskIndex) - { - string action = task.Action.Trim(); - const string scriptCommand = "script"; - if (!action.StartsWith(scriptCommand, StringComparison.OrdinalIgnoreCase)) - return false; - - if (action.Length == scriptCommand.Length || !char.IsWhiteSpace(action[scriptCommand.Length])) - return false; - - string scriptArgs = action[scriptCommand.Length..].Trim(); - if (string.IsNullOrWhiteSpace(scriptArgs)) - return false; - - string scriptOwnerKey = BuildScriptOwnerKey(task, taskIndex); - Handler.UnloadBotsByScriptOwnerKey(scriptOwnerKey); - Handler.BotLoad(new Script(scriptArgs, null, null, scriptOwnerKey)); - return true; - } - - private static string BuildScriptOwnerKey(TaskConfig task, int taskIndex) - { - return $"{nameof(ScriptScheduler)}:{taskIndex}:{task.Task_Name}:{task.Action.Trim()}"; - } - - private static string Task2String(TaskConfig task) - { - return string.Format( - Translations.bot_scriptScheduler_task, - task.Trigger_On_First_Login, - task.Trigger_On_Login, - task.Trigger_On_Times.Enable, - task.Trigger_On_Interval.Enable, - string.Join(", ", Array.ConvertAll(task.Trigger_On_Times.Times, time => time.ToString())), - task.Trigger_On_Interval.MinTime + '-' + task.Trigger_On_Interval.MaxTime, - task.Action - ); - } - } -} diff --git a/MinecraftClient/ChatBots/TelegramBridge.cs b/MinecraftClient/ChatBots/TelegramBridge.cs deleted file mode 100644 index f53ea28cc8..0000000000 --- a/MinecraftClient/ChatBots/TelegramBridge.cs +++ /dev/null @@ -1,400 +0,0 @@ -using System; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.CommandHandler.Patch; -using MinecraftClient.Scripting; -using Telegram.Bot; -using Telegram.Bot.Exceptions; -using Telegram.Bot.Polling; -using Telegram.Bot.Types; -using Telegram.Bot.Types.Enums; -using Tomlet.Attributes; -using File = System.IO.File; - -namespace MinecraftClient.ChatBots -{ - public class TelegramBridge : ChatBot - { - public const string CommandName = "tgbridge"; - - private enum BridgeDirection - { - Both = 0, - Minecraft, - Telegram - } - - private static TelegramBridge? instance = null; - public bool IsConnected { get; private set; } - - private TelegramBotClient? botClient; - private CancellationTokenSource? cancellationToken; - private BridgeDirection bridgeDirection = BridgeDirection.Both; - - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [NonSerialized] - private const string BotName = "TelegramBridge"; - - public bool Enabled = false; - - [TomlInlineComment("$ChatBot.TelegramBridge.Token$")] - public string Token = "your bot token here"; - - [TomlInlineComment("$ChatBot.TelegramBridge.ChannelId$")] - public string ChannelId = ""; - - [TomlInlineComment("$ChatBot.TelegramBridge.Authorized_Chat_Ids$")] - public long[] Authorized_Chat_Ids = Array.Empty(); - - [TomlInlineComment("$ChatBot.TelegramBridge.MessageSendTimeout$")] - public int Message_Send_Timeout = 3; - - [TomlPrecedingComment("$ChatBot.TelegramBridge.Formats$")] - public string PrivateMessageFormat = "*(Private Message)* {username}: {message}"; - public string PublicMessageFormat = "{username}: {message}"; - public string TeleportRequestMessageFormat = "A new Teleport Request from **{username}**!"; - - public void OnSettingUpdate() - { - Message_Send_Timeout = Message_Send_Timeout <= 0 ? 3 : Message_Send_Timeout; - } - } - - public TelegramBridge() - { - instance = this; - } - - public override void Initialize() - { - McClient.dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CommandName) - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - ) - ); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Literal("direction") - .Then(l => l.Literal("both") - .Executes(r => OnCommandDirection(r.Source, BridgeDirection.Both))) - .Then(l => l.Literal("mc") - .Executes(r => OnCommandDirection(r.Source, BridgeDirection.Minecraft))) - .Then(l => l.Literal("telegram") - .Executes(r => OnCommandDirection(r.Source, BridgeDirection.Telegram)))) - .Then(l => l.Literal("_help") - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Redirect(McClient.dispatcher.GetRoot().GetChild("help").GetChild(CommandName))) - ); - - Task.Run(async () => await MainAsync()); - } - - public override void OnUnload() - { - McClient.dispatcher.Unregister(CommandName); - McClient.dispatcher.GetRoot().GetChild("help").RemoveChild(CommandName); - Disconnect(); - } - - private int OnCommandHelp(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => Translations.error_usage + ": /tgbridge direction " - + '\n' + McClient.dispatcher.GetAllUsageString(CommandName, false), -#pragma warning restore format // @formatter:on - }); - } - - private int OnCommandDirection(CmdResult r, BridgeDirection direction) - { - string bridgeName; - switch (direction) - { - case BridgeDirection.Both: - bridgeName = Translations.bot_TelegramBridge_direction_both; - bridgeDirection = BridgeDirection.Both; - break; - - case BridgeDirection.Minecraft: - bridgeName = Translations.bot_TelegramBridge_direction_minecraft; - bridgeDirection = BridgeDirection.Minecraft; - break; - - case BridgeDirection.Telegram: - bridgeName = Translations.bot_TelegramBridge_direction_Telegram; - bridgeDirection = BridgeDirection.Telegram; - break; - - default: - goto case BridgeDirection.Both; - } - return r.SetAndReturn(CmdResult.Status.Done, string.Format(Translations.bot_TelegramBridge_direction, bridgeName)); - } - - ~TelegramBridge() - { - Disconnect(); - } - - private void Disconnect() - { - if (botClient is not null) - { - try - { - SendMessage(Translations.bot_TelegramBridge_disconnected); - cancellationToken?.Cancel(); - botClient = null; - } - catch (Exception e) - { - LogToConsole("§§4§l§f" + Translations.bot_TelegramBridge_canceled_sending); - LogDebugToConsole(e); - } - - IsConnected = false; - } - } - - public static TelegramBridge? GetInstance() - { - return instance; - } - - public override void GetText(string text) - { - if (!CanSendMessages()) - return; - - text = GetVerbatim(text).Trim(); - - // Stop the crash when an empty text is recived somehow - if (string.IsNullOrEmpty(text)) - return; - - string message = ""; - string username = ""; - - if (IsPrivateMessage(text, ref message, ref username)) - message = Config.PrivateMessageFormat.Replace("{username}", username).Replace("{message}", message).Replace("{timestamp}", GetTimestamp()).Trim(); - else if (IsChatMessage(text, ref message, ref username)) - message = Config.PublicMessageFormat.Replace("{username}", username).Replace("{message}", message).Replace("{timestamp}", GetTimestamp()).Trim(); - else if (IsTeleportRequest(text, ref username)) - message = Config.TeleportRequestMessageFormat.Replace("{username}", username).Replace("{timestamp}", GetTimestamp()).Trim(); - - else message = text; - - SendRawMessage(message); - } - - public void SendMessage(string message) - { - if (!CanSendMessages() || string.IsNullOrEmpty(message)) - return; - - try - { - botClient!.SendMessage(Config.ChannelId.Trim(), message, parseMode: ParseMode.Markdown).Wait(Config.Message_Send_Timeout); - } - catch (Exception e) - { - LogToConsole("§§4§l§f" + Translations.bot_TelegramBridge_canceled_sending); - LogDebugToConsole(e); - } - } - - public void SendRawMessage(string message) - { - if (!CanSendMessages() || string.IsNullOrEmpty(message)) - return; - - try - { - botClient!.SendMessage(Config.ChannelId.Trim(), message).Wait(Config.Message_Send_Timeout); - } - catch (Exception e) - { - LogToConsole("§§4§l§f" + Translations.bot_TelegramBridge_canceled_sending); - LogDebugToConsole(e); - } - } - - public void SendImage(string filePath, string? text = null) - { - if (!CanSendMessages()) - return; - - try - { - string fileName = filePath[(filePath.IndexOf(Path.DirectorySeparatorChar) + 1)..]; - - Stream stream = File.OpenRead(filePath); - botClient!.SendDocument( - Config.ChannelId.Trim(), - document: InputFile.FromStream(stream, fileName), - caption: text, - parseMode: ParseMode.Markdown).Wait(Config.Message_Send_Timeout * 1000); - } - catch (Exception e) - { - LogToConsole("§§4§l§f" + Translations.bot_TelegramBridge_canceled_sending); - LogDebugToConsole(e); - } - } - - private bool CanSendMessages() - { - return botClient is not null && !string.IsNullOrEmpty(Config.ChannelId.Trim()) && bridgeDirection != BridgeDirection.Minecraft; - } - - async Task MainAsync() - { - try - { - if (string.IsNullOrEmpty(Config.Token.Trim())) - { - LogToConsole(Translations.bot_TelegramBridge_missing_token); - UnloadBot(); - return; - } - - if (string.IsNullOrEmpty(Config.ChannelId.Trim())) - LogToConsole("§§4§l§f" + Translations.bot_TelegramBridge_missing_channel_id); - - botClient = new TelegramBotClient(Config.Token.Trim()); - cancellationToken = new CancellationTokenSource(); - - botClient.StartReceiving( - HandleUpdateAsync, - HandlePollingErrorAsync, - new ReceiverOptions - { - // receive all update types - AllowedUpdates = Array.Empty() - }, - cancellationToken.Token - ); - - IsConnected = true; - - SendMessage($"✅ {Translations.bot_TelegramBridge_connected}"); - LogToConsole($"§§2§l§f{Translations.bot_TelegramBridge_connected}"); - - if (Config.Authorized_Chat_Ids.Length == 0) - { - SendMessage($"⚠️ *{Translations.bot_TelegramBridge_missing_authorized_channels}* ⚠️"); - LogToConsole($"§§4§l§f{Translations.bot_TelegramBridge_missing_authorized_channels}"); - return; - } - - await Task.Delay(-1); - } - catch (Exception e) - { - LogToConsole($"§§4§l§f{Translations.bot_TelegramBridge_unknown_error}"); - LogToConsole(e); - return; - } - } - - private async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken _cancellationToken) - { - // Only process Message updates: https://core.telegram.org/bots/api#message - if (update.Message is not { } message) - return; - - // Only process text messages - if (message.Text is not { } messageText) - return; - - var chatId = message.Chat.Id; - var text = message.Text; - - if (string.IsNullOrEmpty(text) || string.IsNullOrWhiteSpace(text)) - return; - - if (text.ToLower().Contains("/start")) - return; - - if (text.ToLower().Contains(".chatid")) - { - await botClient.SendMessage(chatId: chatId, - text: $"Chat ID: {chatId}", - replyParameters: message.MessageId, - cancellationToken: _cancellationToken, - parseMode: ParseMode.Markdown); - return; - } - - if (Config.Authorized_Chat_Ids.Length > 0 && !Config.Authorized_Chat_Ids.Contains(chatId)) - { - LogDebugToConsole($"Unauthorized message '{messageText}' received in a chat with with an ID: {chatId} !"); - await botClient.SendMessage( - chatId: chatId, - text: Translations.bot_TelegramBridge_unauthorized, - replyParameters: message.MessageId, - cancellationToken: _cancellationToken, - parseMode: ParseMode.Markdown); - return; - } - - LogDebugToConsole($"Received a '{messageText}' message in a chat with with an ID: {chatId} ."); - - if (bridgeDirection == BridgeDirection.Telegram) - { - if (!text.StartsWith(".dscbridge")) - return; - } - - if (text.StartsWith(".")) - { - var command = text[1..]; - - if (command.ToLower().Contains("quit") || command.ToLower().Contains("exit")) - { - await botClient.SendMessage( - chatId: chatId, - text: $"{Translations.bot_TelegramBridge_quit_disabled}", - replyParameters: message.MessageId, - cancellationToken: _cancellationToken, - parseMode: ParseMode.Markdown); - return; ; - } - - CmdResult result = new(); - PerformInternalCommand(command, ref result); - - await botClient.SendMessage( - chatId: chatId, - text: $"{Translations.bot_TelegramBridge_command_executed}:\n\n{result}", - replyParameters: message.MessageId, - cancellationToken: _cancellationToken, - parseMode: ParseMode.Markdown); - } - else SendText(text); - } - - private Task HandlePollingErrorAsync(ITelegramBotClient botClient, Exception exception, CancellationToken _cancellationToken) - { - var ErrorMessage = exception switch - { - ApiRequestException apiRequestException - => $"Telegram API Error:\n[{apiRequestException.ErrorCode}]\n{apiRequestException.Message}", - _ => exception.ToString() - }; - - LogToConsole("§§4§l§f" + ErrorMessage); - return Task.CompletedTask; - } - } -} diff --git a/MinecraftClient/ChatBots/TestBot.cs b/MinecraftClient/ChatBots/TestBot.cs deleted file mode 100644 index 8b10353564..0000000000 --- a/MinecraftClient/ChatBots/TestBot.cs +++ /dev/null @@ -1,27 +0,0 @@ -using MinecraftClient.Scripting; - -namespace MinecraftClient.ChatBots -{ - /// - /// Example of message receiving. - /// - - public class TestBot : ChatBot - { - public override void GetText(string text) - { - string message = ""; - string username = ""; - text = GetVerbatim(text); - - if (IsPrivateMessage(text, ref message, ref username)) - { - LogToConsole(string.Format(Translations.bot_testBot_told, username, message)); - } - else if (IsChatMessage(text, ref message, ref username)) - { - LogToConsole(string.Format(Translations.bot_testBot_said, username, message)); - } - } - } -} diff --git a/MinecraftClient/ClassicConsoleBackend.cs b/MinecraftClient/ClassicConsoleBackend.cs deleted file mode 100644 index 38411413ab..0000000000 --- a/MinecraftClient/ClassicConsoleBackend.cs +++ /dev/null @@ -1,235 +0,0 @@ -using System; -using System.Text.RegularExpressions; - -namespace MinecraftClient -{ - /// - /// Console backend wrapping the ConsoleInteractive library (existing behavior). - /// - public partial class ClassicConsoleBackend : IConsoleBackend - { - private static readonly (byte R, byte G, byte B, char Code)[] McStandardColors = - [ - (0, 0, 0, '0'), // black - (0, 0, 170, '1'), // dark_blue - (0, 170, 0, '2'), // dark_green - (0, 170, 170, '3'), // dark_aqua - (170, 0, 0, '4'), // dark_red - (170, 0, 170, '5'), // dark_purple - (255, 170, 0, '6'), // gold - (170, 170, 170, '7'), // gray - (85, 85, 85, '8'), // dark_gray - (85, 85, 255, '9'), // blue - (85, 255, 85, 'a'), // green - (85, 255, 255, 'b'), // aqua - (255, 85, 85, 'c'), // red - (255, 85, 255, 'd'), // light_purple - (255, 255, 85, 'e'), // yellow - (255, 255, 255, 'f'), // white - ]; - - [GeneratedRegex("§#([0-9a-fA-F]{6})")] - private static partial Regex HexColorRegex(); - - private static char NearestMcColor(byte r, byte g, byte b) - { - int bestIdx = 0; - long bestDist = long.MaxValue; - - for (int i = 0; i < McStandardColors.Length; i++) - { - var (sr, sg, sb, _) = McStandardColors[i]; - long dr = r - sr; - long dg = g - sg; - long db = b - sb; - long dist = dr * dr + dg * dg + db * db; - if (dist < bestDist) - { - bestDist = dist; - bestIdx = i; - } - } - - return McStandardColors[bestIdx].Code; - } - - private static string ResolveHexColors(string text) - { - if (string.IsNullOrEmpty(text) || !text.Contains("§#", StringComparison.Ordinal)) - return text; - - return HexColorRegex().Replace(text, match => - { - ReadOnlySpan hex = match.Groups[1].ValueSpan; - byte r = (byte)((HexVal(hex[0]) << 4) | HexVal(hex[1])); - byte g = (byte)((HexVal(hex[2]) << 4) | HexVal(hex[3])); - byte b = (byte)((HexVal(hex[4]) << 4) | HexVal(hex[5])); - return ColorHelper.GetColorEscapeCode(r, g, b, foreground: true); - }); - } - - private static int HexVal(char c) => c switch - { - >= '0' and <= '9' => c - '0', - >= 'a' and <= 'f' => c - 'a' + 10, - >= 'A' and <= 'F' => c - 'A' + 10, - _ => 0 - }; - - public event EventHandler? MessageReceived; - public event EventHandler? OnInputChange; - - public bool DisplayUserInput - { - get => ConsoleInteractive.ConsoleReader.DisplayUesrInput; - set => ConsoleInteractive.ConsoleReader.DisplayUesrInput = value; - } - - public void Init() - { - ConsoleInteractive.ConsoleWriter.Init(); - } - - public void WriteLine(string text) - { - ConsoleInteractive.ConsoleWriter.WriteLine(text); - } - - public void WriteLineFormatted(string text) - { - ConsoleInteractive.ConsoleWriter.WriteLineFormatted(ResolveHexColors(text)); - } - - public void BeginReadThread() - { - ConsoleInteractive.ConsoleReader.MessageReceived += ForwardMessage; - ConsoleInteractive.ConsoleReader.OnInputChange += ForwardInputChange; - ConsoleInteractive.ConsoleReader.BeginReadThread(); - } - - public void StopReadThread() - { - ConsoleInteractive.ConsoleReader.StopReadThread(); - ConsoleInteractive.ConsoleReader.MessageReceived -= ForwardMessage; - ConsoleInteractive.ConsoleReader.OnInputChange -= ForwardInputChange; - } - - public string RequestImmediateInput() - { - return ConsoleInteractive.ConsoleReader.RequestImmediateInput(); - } - - public string? ReadPassword() - { - ConsoleInteractive.ConsoleReader.SetInputVisible(false); - var input = ConsoleInteractive.ConsoleReader.RequestImmediateInput(); - ConsoleInteractive.ConsoleReader.SetInputVisible(true); - return input; - } - - public void ClearInputBuffer() - { - ConsoleInteractive.ConsoleReader.ClearBuffer(); - } - - public void ClearScreen() - { - Console.Clear(); - ConsoleInteractive.ConsoleSuggestion.ClearSuggestions(); - } - - public void SetInputVisible(bool visible) - { - ConsoleInteractive.ConsoleReader.SetInputVisible(visible); - } - - public void SetBackreadBufferLimit(int limit) - { - ConsoleInteractive.ConsoleBuffer.SetBackreadBufferLimit(limit); - } - - public void Shutdown() - { - ConsoleInteractive.ConsoleSuggestion.ClearSuggestions(); - } - - #region Suggestion forwarding for classic mode - - public void UpdateSuggestions( - ConsoleInteractive.ConsoleSuggestion.Suggestion[] suggestions, - Tuple range) - { - ConsoleInteractive.ConsoleSuggestion.UpdateSuggestions(suggestions, range); - } - - public void ClearSuggestions() - { - ConsoleInteractive.ConsoleSuggestion.ClearSuggestions(); - } - - public void SetSuggestionColors( - string textColor, string textBgColor, - string hlTextColor, string hlTextBgColor, - string tooltipColor, string hlTooltipColor, - string arrowColor) - { - ConsoleInteractive.ConsoleSuggestion.SetColors( - textColor, textBgColor, - hlTextColor, hlTextBgColor, - tooltipColor, hlTooltipColor, - arrowColor); - } - - public bool EnableSuggestionColor - { - get => ConsoleInteractive.ConsoleSuggestion.EnableColor; - set => ConsoleInteractive.ConsoleSuggestion.EnableColor = value; - } - - public bool Enable24bitColor - { - get => ConsoleInteractive.ConsoleSuggestion.Enable24bitColor; - set => ConsoleInteractive.ConsoleSuggestion.Enable24bitColor = value; - } - - public bool UseBasicArrow - { - get => ConsoleInteractive.ConsoleSuggestion.UseBasicArrow; - set => ConsoleInteractive.ConsoleSuggestion.UseBasicArrow = value; - } - - public int SetMaxSuggestionLength(int length) - { - return ConsoleInteractive.ConsoleSuggestion.SetMaxSuggestionLength(length); - } - - public int SetMaxSuggestionCount(int count) - { - return ConsoleInteractive.ConsoleSuggestion.SetMaxSuggestionCount(count); - } - - public bool EnableWriterColor - { - get => ConsoleInteractive.ConsoleWriter.EnableColor; - set => ConsoleInteractive.ConsoleWriter.EnableColor = value; - } - - public bool UseVT100ColorCode - { - get => ConsoleInteractive.ConsoleWriter.UseVT100ColorCode; - set => ConsoleInteractive.ConsoleWriter.UseVT100ColorCode = value; - } - - #endregion - - private void ForwardMessage(object? sender, string e) - { - MessageReceived?.Invoke(sender, e); - } - - private void ForwardInputChange(object? sender, ConsoleInteractive.ConsoleReader.Buffer buffer) - { - OnInputChange?.Invoke(sender, new ConsoleInputBuffer(buffer.Text, buffer.CursorPosition)); - } - } -} diff --git a/MinecraftClient/ColorHelper.cs b/MinecraftClient/ColorHelper.cs deleted file mode 100644 index 4c7880aa3d..0000000000 --- a/MinecraftClient/ColorHelper.cs +++ /dev/null @@ -1,207 +0,0 @@ -using System; -using static MinecraftClient.Settings.ConsoleConfigHealper.ConsoleConfig; - -namespace MinecraftClient -{ - public static class ColorHelper - { - // ANSI escape code - Colors: https://en.wikipedia.org/wiki/ANSI_escape_code#Colors - - private static readonly Tuple[] ColorMap4 = new Tuple[] - { - new(new(0, 0, 0), 40), - new(new(128, 0, 0), 41), - new(new(0, 128, 0), 42), - new(new(151, 109, 77), 43), - new(new(45, 45, 180), 44), - new(new(128, 0, 128), 45), - new(new(138, 138, 220), 46), - new(new(174, 164, 115), 47), - new(new(96, 96, 96), 100), - new(new(255, 0, 0), 101), - new(new(127, 178, 56), 102), - new(new(213, 201, 140), 103), - new(new(64, 64, 255), 104), - new(new(255, 0, 255), 105), - new(new(0, 255, 255), 106), - new(new(255, 255, 255), 107), - }; - - private static readonly Tuple[] ColorMap8 = new Tuple[] - { - new(new(0, 0, 0), 0), - new(new(128, 0, 0), 1), - new(new(0, 128, 0), 2), - new(new(128, 128, 0), 3), - new(new(0, 0, 128), 4), - new(new(128, 0, 128), 5), - new(new(0, 128, 128), 6), - new(new(192, 192, 192), 7), - new(new(128, 128, 128), 8), - new(new(255, 0, 0), 9), - new(new(0, 255, 0), 10), - new(new(255, 255, 0), 11), - new(new(0, 0, 255), 12), - new(new(255, 0, 255), 13), - new(new(0, 255, 255), 14), - new(new(255, 255, 255), 15), - new(new(8, 8, 8), 232), - new(new(18, 18, 18), 233), - new(new(28, 28, 28), 234), - new(new(38, 38, 38), 235), - new(new(48, 48, 48), 236), - new(new(58, 58, 58), 237), - new(new(68, 68, 68), 238), - new(new(78, 78, 78), 239), - new(new(88, 88, 88), 240), - new(new(98, 98, 98), 241), - new(new(108, 108, 108), 242), - new(new(118, 118, 118), 243), - new(new(128, 128, 128), 244), - new(new(138, 138, 138), 245), - new(new(148, 148, 148), 246), - new(new(158, 158, 158), 247), - new(new(168, 168, 168), 248), - new(new(178, 178, 178), 249), - new(new(188, 188, 188), 250), - new(new(198, 198, 198), 251), - new(new(208, 208, 208), 252), - new(new(218, 218, 218), 253), - new(new(228, 228, 228), 254), - new(new(238, 238, 238), 255), - }; - - private static readonly byte[] ColorMap8_Step = new byte[] { 0, 95, 135, 175, 215, 255 }; - - public static string GetColorEscapeCode(byte R, byte G, byte B, bool foreground) - { - return GetColorEscapeCode(R, G, B, foreground, Settings.Config.Console.General.ConsoleColorMode); - } - - public static string GetColorEscapeCode(byte R, byte G, byte B, bool foreground, ConsoleColorModeType colorDepth) - { - switch (colorDepth) - { - case ConsoleColorModeType.disable: - return string.Empty; - - case ConsoleColorModeType.legacy_4bit: - { - ColorRGBA color = new(R, G, B); - int best_idx = 0; - double min_distance = ColorMap4[0].Item1.Distance(color); - for (int i = 1; i < ColorMap4.Length; ++i) - { - double distance = ColorMap4[i].Item1.Distance(color); - if (distance < min_distance) - { - min_distance = distance; - best_idx = i; - } - } - if (foreground) - return $"§{best_idx:x}"; - else - return $"§§{best_idx:x}"; - } - - case ConsoleColorModeType.vt100_4bit: - { - ColorRGBA color = new(R, G, B); - int best_idx = 0; - double min_distance = ColorMap4[0].Item1.Distance(color); - for (int i = 1; i < ColorMap4.Length; ++i) - { - double distance = ColorMap4[i].Item1.Distance(color); - if (distance < min_distance) - { - min_distance = distance; - best_idx = i; - } - } - return string.Format("\u001b[{0}m", ColorMap4[best_idx].Item2 - (foreground ? 10 : 0)); - } - - case ConsoleColorModeType.vt100_8bit: - { - ColorRGBA color = new(R, G, B); - int R_idx = (int)(R <= 95 ? Math.Round(R / 95.0) : 1 + Math.Round((R - 95.0) / 40.0)); - int G_idx = (int)(G <= 95 ? Math.Round(G / 95.0) : 1 + Math.Round((G - 95.0) / 40.0)); - int B_idx = (int)(B <= 95 ? Math.Round(B / 95.0) : 1 + Math.Round((B - 95.0) / 40.0)); - - int best_idx = -1; - double min_distance = color.Distance(new ColorRGBA(ColorMap8_Step[R_idx], - ColorMap8_Step[G_idx], - ColorMap8_Step[B_idx])); - for (int i = 0; i < ColorMap8.Length; ++i) - { - double distance = ColorMap8[i].Item1.Distance(color); - if (distance < min_distance) - { - min_distance = distance; - best_idx = i; - } - } - - if (best_idx == -1) - return string.Format("\u001B[{0};5;{1}m", (foreground ? 38 : 48), 16 + (36 * R_idx) + (6 * G_idx) + B_idx); - else - return string.Format("\u001B[{0};5;{1}m", (foreground ? 38 : 48), ColorMap8[best_idx].Item2); - } - - case ConsoleColorModeType.vt100_24bit: - return string.Format("\u001B[{0};2;{1};{2};{3}m", (foreground ? 38 : 48), R, G, B); - - default: - return string.Empty; - } - } - - public static string GetResetEscapeCode() - { - return "\u001b[0m"; - } - } - - public record struct ColorRGBA - { - public byte R { get; set; } - public byte G { get; set; } - public byte B { get; set; } - public byte A { get; set; } - public bool Unknown { get; set; } = false; - - public double Distance(ColorRGBA color) - { - double r_mean = (double)(this.R + color.R) / 2.0; - double R = this.R - color.R; - double G = this.G - color.G; - double B = this.B - color.B; - return Math.Sqrt((2.0 + r_mean / 256.0) * (R * R) + 4.0 * (G * G) + (2.0 + (255 - r_mean) / 256.0) * (B * B)); - } - public ColorRGBA(byte r, byte g, byte b, byte a, bool unknown) - { - R = r; - G = g; - B = b; - A = a; - Unknown = unknown; - } - - public ColorRGBA(byte r, byte g, byte b, byte a) - { - R = r; - G = g; - B = b; - A = a; - } - - public ColorRGBA(byte r, byte g, byte b) - { - R = r; - G = g; - B = b; - A = 255; - } - } -} diff --git a/MinecraftClient/Command.cs b/MinecraftClient/Command.cs deleted file mode 100644 index e606f0dd36..0000000000 --- a/MinecraftClient/Command.cs +++ /dev/null @@ -1,147 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using Brigadier.NET; -using MinecraftClient.CommandHandler; -using MinecraftClient.CommandHandler.Patch; - -namespace MinecraftClient -{ - /// - /// Represents an internal MCC command: Command name, source code and usage message - /// To add a new command, inherit from this class while adding the command class to the folder "Commands". - /// If inheriting from the 'Command' class and placed in the 'Commands' namespace, the command will be - /// automatically loaded and available in main chat prompt, scripts, remote control and command help. - /// - public abstract class Command - { - /// - /// The command name - /// - public abstract string CmdName { get; } - - /// - /// Command description with translation support. Please add your message in Translations.cs file and return mapping key in this property - /// - public abstract string CmdDesc { get; } - - /// - /// Get the translated version of command description. - /// - /// Translated command description - public string GetCmdDescTranslated() - { - char cmdChar = Settings.Config.Main.Advanced.InternalCmdChar.ToChar(); - - StringBuilder sb = new(); - string s = (string.IsNullOrEmpty(CmdUsage) || string.IsNullOrEmpty(CmdDesc)) ? string.Empty : ": "; // If either one is empty, no colon : - sb.Append("§e").Append(cmdChar).Append(CmdUsage).Append("§r").Append(s).AppendLine(CmdDesc); - sb.Append(McClient.dispatcher.GetAllUsageString(CmdName, false)); - return sb.ToString(); - } - - /// - /// Usage message, eg: 'name [args]' - /// - public abstract string CmdUsage { get; } - - /// - /// Register the command. - /// - public abstract void RegisterCommand(CommandDispatcher dispatcher); - - /// - /// Check if at least one argument has been passed to the command - /// - public static bool HasArg(string command) - { - int first_space = command.IndexOf(' '); - return (first_space > 0 && first_space < command.Length - 1); - } - - /// - /// Extract the argument string from the command - /// - /// Argument or "" if no argument - public static string GetArg(string command) - { - if (HasArg(command)) - return command[(command.IndexOf(' ') + 1)..]; - else - return string.Empty; - } - - /// - /// Extract the arguments as a string array from the command - /// - /// Argument array or empty array if no arguments - public static string[] GetArgs(string command) - { - string[] args = GetArg(command).Split(' ', StringSplitOptions.RemoveEmptyEntries); - if (args.Length == 1 && args[0] == string.Empty) - return Array.Empty(); - else - return args; - } - - /// - /// Extract arguments from a given string. Allows quotines and escaping them. - /// Similar to command line arguments in regular terminals. - /// - /// Provided arguments as a string - /// All extracted arguments in a string list - public static List ParseCommandLine(string cmdLine) - { - var args = new List(); - if (string.IsNullOrWhiteSpace(cmdLine)) return args; - - var currentArg = new StringBuilder(); - bool inQuotedArg = false; - - for (int i = 0; i < cmdLine.Length; i++) - { - if ((cmdLine[i] == '"' && i > 0 && cmdLine[i - 1] != '\\') || (cmdLine[i] == '"' && i == 0)) - { - if (inQuotedArg) - { - args.Add(currentArg.ToString()); - currentArg = new StringBuilder(); - inQuotedArg = false; - } - else - { - inQuotedArg = true; - } - } - else if (cmdLine[i] == ' ') - { - if (inQuotedArg) - { - currentArg.Append(cmdLine[i]); - } - else if (currentArg.Length > 0) - { - args.Add(currentArg.ToString()); - currentArg = new StringBuilder(); - } - } - else - { - if (cmdLine[i] == '\\' && cmdLine[i + 1] == '\"') - { - currentArg.Append('"'); - i += 1; - } - else - { - currentArg.Append(cmdLine[i]); - } - } - } - - if (currentArg.Length > 0) args.Add(currentArg.ToString()); - - return args; - } - } -} diff --git a/MinecraftClient/CommandHandler/ArgumentType/AccountNickArgumentType.cs b/MinecraftClient/CommandHandler/ArgumentType/AccountNickArgumentType.cs deleted file mode 100644 index 09d11de116..0000000000 --- a/MinecraftClient/CommandHandler/ArgumentType/AccountNickArgumentType.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.ArgumentTypes; -using Brigadier.NET.Context; -using Brigadier.NET.Suggestion; - -namespace MinecraftClient.CommandHandler.ArgumentType -{ - public class AccountNickArgumentType : ArgumentType - { - public override string Parse(IStringReader reader) - { - reader.SkipWhitespace(); - return reader.ReadString(); - } - - public override Task ListSuggestions(CommandContext context, SuggestionsBuilder builder) - { - var accountList = Settings.Config.Main.Advanced.AccountList; - foreach (var account in accountList) - builder.Suggest(account.Key); - return builder.BuildFuture(); - } - } -} \ No newline at end of file diff --git a/MinecraftClient/CommandHandler/ArgumentType/AutoCraftRecipeNameArgumentType.cs b/MinecraftClient/CommandHandler/ArgumentType/AutoCraftRecipeNameArgumentType.cs deleted file mode 100644 index 0d2bc0ebba..0000000000 --- a/MinecraftClient/CommandHandler/ArgumentType/AutoCraftRecipeNameArgumentType.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.ArgumentTypes; -using Brigadier.NET.Context; -using Brigadier.NET.Suggestion; - -namespace MinecraftClient.CommandHandler.ArgumentType -{ - public class AutoCraftRecipeNameArgumentType : ArgumentType - { - public override string Parse(IStringReader reader) - { - reader.SkipWhitespace(); - return reader.ReadString(); - } - - public override Task ListSuggestions(CommandContext context, SuggestionsBuilder builder) - { - var recipeList = Settings.Config.ChatBot.AutoCraft.Recipes; - foreach (var recipe in recipeList) - builder.Suggest(recipe.Name); - return builder.BuildFuture(); - } - } -} diff --git a/MinecraftClient/CommandHandler/ArgumentType/BotNameArgumentType.cs b/MinecraftClient/CommandHandler/ArgumentType/BotNameArgumentType.cs deleted file mode 100644 index b17bdf1c0b..0000000000 --- a/MinecraftClient/CommandHandler/ArgumentType/BotNameArgumentType.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.ArgumentTypes; -using Brigadier.NET.Context; -using Brigadier.NET.Suggestion; - -namespace MinecraftClient.CommandHandler.ArgumentType -{ - public class BotNameArgumentType : ArgumentType - { - public override string Parse(IStringReader reader) - { - reader.SkipWhitespace(); - return reader.ReadString(); - } - - public override Task ListSuggestions(CommandContext context, SuggestionsBuilder builder) - { - McClient? client = CmdResult.currentHandler; - if (client is not null) - { - var botList = client.GetLoadedChatBots(); - foreach (var bot in botList) - builder.Suggest(bot.GetType().Name); - } - return builder.BuildFuture(); - } - } -} diff --git a/MinecraftClient/CommandHandler/ArgumentType/EntityTypeArgumentType.cs b/MinecraftClient/CommandHandler/ArgumentType/EntityTypeArgumentType.cs deleted file mode 100644 index fc3ce124d6..0000000000 --- a/MinecraftClient/CommandHandler/ArgumentType/EntityTypeArgumentType.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.ArgumentTypes; -using Brigadier.NET.Context; -using Brigadier.NET.Exceptions; -using Brigadier.NET.Suggestion; -using MinecraftClient.Mapping; - -namespace MinecraftClient.CommandHandler.ArgumentType -{ - public class EntityTypeArgumentType : ArgumentType - { - public override EntityType Parse(IStringReader reader) - { - reader.SkipWhitespace(); - string entity = reader.ReadString(); - if (Enum.TryParse(entity, true, out EntityType entityType)) - return entityType; - else - throw CommandSyntaxException.BuiltInExceptions.LiteralIncorrect().CreateWithContext(reader, entity); - } - - public override Task ListSuggestions(CommandContext context, SuggestionsBuilder builder) - { - foreach (EntityType result in Enum.GetValues()) - { - string name = result.ToString(); - string localName = Entity.GetTypeString(result); - bool same = true; - for (int i = 0, j = 0; i < name.Length; ++i, ++j) - { - while (j < localName.Length && localName[j] == ' ') - ++j; - if (j >= localName.Length || name[i] != localName[j]) - { - same = false; - break; - } - } - if (same) - builder.Suggest(name); - else - builder.Suggest(name, new SuggestionTooltip(localName)); - } - - return builder.BuildFuture(); - } - } -} diff --git a/MinecraftClient/CommandHandler/ArgumentType/FarmerCropTypeArgumentType.cs b/MinecraftClient/CommandHandler/ArgumentType/FarmerCropTypeArgumentType.cs deleted file mode 100644 index 16ecdad42a..0000000000 --- a/MinecraftClient/CommandHandler/ArgumentType/FarmerCropTypeArgumentType.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.ArgumentTypes; -using Brigadier.NET.Context; -using Brigadier.NET.Exceptions; -using Brigadier.NET.Suggestion; -using static MinecraftClient.ChatBots.Farmer; - -namespace MinecraftClient.CommandHandler.ArgumentType -{ - public class FarmerCropTypeArgumentType : ArgumentType - { - public override CropType Parse(IStringReader reader) - { - reader.SkipWhitespace(); - string inputStr = reader.ReadString(); - if (Enum.TryParse(inputStr, true, out CropType cropType)) - return cropType; - else - throw CommandSyntaxException.BuiltInExceptions.LiteralIncorrect().CreateWithContext(reader, inputStr); - } - - public override Task ListSuggestions(CommandContext context, SuggestionsBuilder builder) - { - foreach (var result in Enum.GetNames(typeof(CropType))) - builder.Suggest(result); - return builder.BuildFuture(); - } - } -} diff --git a/MinecraftClient/CommandHandler/ArgumentType/HotbarSlotArgumentType.cs b/MinecraftClient/CommandHandler/ArgumentType/HotbarSlotArgumentType.cs deleted file mode 100644 index a71349b646..0000000000 --- a/MinecraftClient/CommandHandler/ArgumentType/HotbarSlotArgumentType.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.ArgumentTypes; -using Brigadier.NET.Context; -using Brigadier.NET.Suggestion; - -namespace MinecraftClient.CommandHandler.ArgumentType -{ - public class HotbarSlotArgumentType : ArgumentType - { - public override int Parse(IStringReader reader) - { - reader.SkipWhitespace(); - return reader.ReadInt(); - } - - public override Task ListSuggestions(CommandContext context, SuggestionsBuilder builder) - { - McClient? client = CmdResult.currentHandler; - if (client is not null) - { - Inventory.Container? inventory = client.GetInventory(0); - if (inventory is not null) - { - for (int i = 1; i <= 9; ++i) - { - if (inventory.Items.TryGetValue(i - 1 + 36, out Inventory.Item? item)) - { - string slotStr = i.ToString(); - if (slotStr.StartsWith(builder.RemainingLowerCase, StringComparison.InvariantCultureIgnoreCase)) - { - string itemDesc = item.Count == 1 ? item.GetTypeString() : string.Format("{0}x{1}", item.Count, item.GetTypeString()); - builder.Suggest(slotStr, new SuggestionTooltip(itemDesc)); - } - } - } - } - } - return builder.BuildFuture(); - } - } -} diff --git a/MinecraftClient/CommandHandler/ArgumentType/InventoryActionArgumentType.cs b/MinecraftClient/CommandHandler/ArgumentType/InventoryActionArgumentType.cs deleted file mode 100644 index 53bb43dac7..0000000000 --- a/MinecraftClient/CommandHandler/ArgumentType/InventoryActionArgumentType.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.ArgumentTypes; -using Brigadier.NET.Context; -using Brigadier.NET.Exceptions; -using Brigadier.NET.Suggestion; -using MinecraftClient.Inventory; - -namespace MinecraftClient.CommandHandler.ArgumentType -{ - public class InventoryActionArgumentType : ArgumentType - { - private WindowActionType[] SupportActions = new WindowActionType[] - { - WindowActionType.LeftClick, - WindowActionType.RightClick, - WindowActionType.MiddleClick, - WindowActionType.ShiftClick, - WindowActionType.ShiftRightClick, - }; - - public override WindowActionType Parse(IStringReader reader) - { - reader.SkipWhitespace(); - string inputStr = reader.ReadString().ToLower(); - return inputStr switch - { - "left" => WindowActionType.LeftClick, - "leftclick" => WindowActionType.LeftClick, - "right" => WindowActionType.RightClick, - "rightclick" => WindowActionType.RightClick, - "mid" => WindowActionType.MiddleClick, - "middle" => WindowActionType.MiddleClick, - "middleclick" => WindowActionType.MiddleClick, - "shift" => WindowActionType.ShiftClick, - "shiftclick" => WindowActionType.ShiftClick, - "shiftrightclick" => WindowActionType.ShiftRightClick, - _ => throw CommandSyntaxException.BuiltInExceptions.LiteralIncorrect().CreateWithContext(reader, inputStr) - }; - } - - public override Task ListSuggestions(CommandContext context, SuggestionsBuilder builder) - { - foreach (var action in SupportActions) - builder.Suggest(action.ToString()); - return builder.BuildFuture(); - } - } -} diff --git a/MinecraftClient/CommandHandler/ArgumentType/InventoryIdArgumentType.cs b/MinecraftClient/CommandHandler/ArgumentType/InventoryIdArgumentType.cs deleted file mode 100644 index d485f82aa8..0000000000 --- a/MinecraftClient/CommandHandler/ArgumentType/InventoryIdArgumentType.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.ArgumentTypes; -using Brigadier.NET.Context; -using Brigadier.NET.Suggestion; - -namespace MinecraftClient.CommandHandler.ArgumentType -{ - public class InventoryIdArgumentType : ArgumentType - { - public override int Parse(IStringReader reader) - { - reader.SkipWhitespace(); - return reader.ReadInt(); - } - - public override Task ListSuggestions(CommandContext context, SuggestionsBuilder builder) - { - McClient? client = CmdResult.currentHandler; - if (client is not null) - { - var invList = client.GetInventories(); - foreach (var inv in invList) - { - string invName = inv.Key.ToString(); - if (invName.StartsWith(builder.RemainingLowerCase, StringComparison.InvariantCultureIgnoreCase)) - { - string? invTitle = inv.Value.Title; - if (!string.IsNullOrWhiteSpace(invTitle)) - builder.Suggest(invName, new SuggestionTooltip(invTitle)); - else - builder.Suggest(invName); - } - } - } - return builder.BuildFuture(); - } - } -} diff --git a/MinecraftClient/CommandHandler/ArgumentType/InventorySlotArgumentType.cs b/MinecraftClient/CommandHandler/ArgumentType/InventorySlotArgumentType.cs deleted file mode 100644 index b9e019422a..0000000000 --- a/MinecraftClient/CommandHandler/ArgumentType/InventorySlotArgumentType.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using System.Linq; -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.ArgumentTypes; -using Brigadier.NET.Context; -using Brigadier.NET.Suggestion; - -namespace MinecraftClient.CommandHandler.ArgumentType -{ - public class InventorySlotArgumentType : ArgumentType - { - public override int Parse(IStringReader reader) - { - reader.SkipWhitespace(); - return reader.ReadInt(); - } - - public override Task ListSuggestions(CommandContext context, SuggestionsBuilder builder) - { - McClient? client = CmdResult.currentHandler; - if (client is not null && context.Nodes.Count >= 2) - { - string invName = context.Nodes[1].Range.Get(builder.Input); - if (!int.TryParse(invName, out int invId)) - invId = invName switch - { - "creativegive" => 0, - "creativedelete" => 0, - "player" => 0, - "container" => client.GetInventories().Keys.ToList().Max(), - _ => -1, - }; - - Inventory.Container? inventory = client.GetInventory(invId); - if (inventory is not null) - { - foreach ((int slot, Inventory.Item item) in inventory.Items) - { - if (item is not null && item.Count > 0) - { - string slotStr = slot.ToString(); - if (slotStr.StartsWith(builder.RemainingLowerCase, StringComparison.InvariantCultureIgnoreCase)) - { - string itemDesc = item.Count == 1 ? item.GetTypeString() : string.Format("{0}x{1}", item.Count, item.GetTypeString()); - builder.Suggest(slotStr, new SuggestionTooltip(itemDesc)); - } - } - } - } - } - return builder.BuildFuture(); - } - } -} diff --git a/MinecraftClient/CommandHandler/ArgumentType/ItemTypeArgumentType.cs b/MinecraftClient/CommandHandler/ArgumentType/ItemTypeArgumentType.cs deleted file mode 100644 index fcd270bfa3..0000000000 --- a/MinecraftClient/CommandHandler/ArgumentType/ItemTypeArgumentType.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.ArgumentTypes; -using Brigadier.NET.Context; -using Brigadier.NET.Exceptions; -using Brigadier.NET.Suggestion; -using MinecraftClient.Inventory; - -namespace MinecraftClient.CommandHandler.ArgumentType -{ - public class ItemTypeArgumentType : ArgumentType - { - public override ItemType Parse(IStringReader reader) - { - reader.SkipWhitespace(); - string entity = reader.ReadString(); - if (Enum.TryParse(entity, true, out ItemType itemType)) - return itemType; - else - throw CommandSyntaxException.BuiltInExceptions.LiteralIncorrect().CreateWithContext(reader, entity); - } - - public override Task ListSuggestions(CommandContext context, SuggestionsBuilder builder) - { - foreach (ItemType result in Enum.GetValues()) - { - if (result == ItemType.Unknown || result == ItemType.Null) - continue; - - string name = result.ToString(); - string localName = Item.GetTypeString(result); - bool same = true; - for (int i = 0, j = 0; i < name.Length; ++i, ++j) - { - while (j < localName.Length && localName[j] == ' ') - ++j; - if (j >= localName.Length || name[i] != localName[j]) - { - same = false; - break; - } - } - if (same) - builder.Suggest(name); - else - builder.Suggest(name, new SuggestionTooltip(localName)); - } - return builder.BuildFuture(); - } - } -} diff --git a/MinecraftClient/CommandHandler/ArgumentType/LocationArgumentType.cs b/MinecraftClient/CommandHandler/ArgumentType/LocationArgumentType.cs deleted file mode 100644 index fbd8a4dc6c..0000000000 --- a/MinecraftClient/CommandHandler/ArgumentType/LocationArgumentType.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.ArgumentTypes; -using Brigadier.NET.Context; -using Brigadier.NET.Suggestion; -using MinecraftClient.Mapping; - -namespace MinecraftClient.CommandHandler.ArgumentType -{ - public class LocationArgumentType : ArgumentType - { - public override Location Parse(IStringReader reader) - { - int[] status = new int[3]; - double[] coords = new double[3]; - for (int i = 0; i < 3; ++i) - { - reader.SkipWhitespace(); - if (reader.Peek() == '~' || reader.Peek() == '~') - { - status[i] = 1; - reader.Next(); - if (reader.CanRead()) - { - char next = reader.Peek(); - if (char.IsDigit(next) || next == '.' || next == '-') - coords[i] = reader.ReadDouble(); - else if (next == '+') - { - reader.Next(); - coords[i] = reader.ReadDouble(); - } - else coords[i] = 0; - } - else coords[i] = 0; - } - else - { - status[i] = 0; - coords[i] = reader.ReadDouble(); - } - } - - return new Location(coords[0], coords[1], coords[2], (byte)(status[0] | status[1] << 1 | status[2] << 2)); - } - - public override Task ListSuggestions(CommandContext context, SuggestionsBuilder builder) - { - McClient? client = CmdResult.currentHandler; - string[] args = builder.Remaining.Split(' ', StringSplitOptions.TrimEntries); - if (args.Length == 0 || (args.Length == 1 && string.IsNullOrWhiteSpace(args[0]))) - { - if (client is not null) - { - Location current = client.GetCurrentLocation(); - builder.Suggest(string.Format("{0:0.00}", current.X)); - builder.Suggest(string.Format("{0:0.00} {1:0.00}", current.X, current.Y)); - builder.Suggest(string.Format("{0:0.00} {1:0.00} {2:0.00}", current.X, current.Y, current.Z)); - } - else - { - builder.Suggest("~"); - builder.Suggest("~ ~"); - builder.Suggest("~ ~ ~"); - } - } - else if (args.Length == 1 || (args.Length == 2 && string.IsNullOrWhiteSpace(args[1]))) - { - string add = args.Length == 1 ? " " : string.Empty; - if (client is not null) - { - Location current = client.GetCurrentLocation(); - builder.Suggest(string.Format("{0}{2}{1:0.00}", builder.Remaining, current.Y, add)); - builder.Suggest(string.Format("{0}{3}{1:0.00} {2:0.00}", builder.Remaining, current.Y, current.Z, add)); - } - else - { - builder.Suggest(builder.Remaining + add + "~"); - builder.Suggest(builder.Remaining + add + "~ ~"); - } - } - else if (args.Length == 2 || (args.Length == 3 && string.IsNullOrWhiteSpace(args[2]))) - { - string add = args.Length == 2 ? " " : string.Empty; - if (client is not null) - { - Location current = client.GetCurrentLocation(); - builder.Suggest(string.Format("{0}{2}{1:0.00}", builder.Remaining, current.Z, add)); - } - else - { - builder.Suggest(builder.Remaining + add + "~"); - } - } - return builder.BuildFuture(); - } - } -} diff --git a/MinecraftClient/CommandHandler/ArgumentType/MapBotMapIdArgumentType.cs b/MinecraftClient/CommandHandler/ArgumentType/MapBotMapIdArgumentType.cs deleted file mode 100644 index 7b8b9b5dee..0000000000 --- a/MinecraftClient/CommandHandler/ArgumentType/MapBotMapIdArgumentType.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.ArgumentTypes; -using Brigadier.NET.Context; -using Brigadier.NET.Suggestion; -using MinecraftClient.ChatBots; - -namespace MinecraftClient.CommandHandler.ArgumentType -{ - public class MapBotMapIdArgumentType : ArgumentType - { - public override int Parse(IStringReader reader) - { - reader.SkipWhitespace(); - return reader.ReadInt(); - } - - public override Task ListSuggestions(CommandContext context, SuggestionsBuilder builder) - { - McClient? client = CmdResult.currentHandler; - if (client is not null) - { - var bot = (Map?)client.GetLoadedChatBots().Find(bot => bot.GetType().Name == "Map"); - if (bot is not null) - { - var mapList = bot.cachedMaps; - foreach (var map in mapList) - { - string mapName = map.Key.ToString(); - if (mapName.StartsWith(builder.RemainingLowerCase, StringComparison.InvariantCultureIgnoreCase)) - builder.Suggest(mapName); - } - } - } - return builder.BuildFuture(); - } - } -} diff --git a/MinecraftClient/CommandHandler/ArgumentType/PlayerNameArgumentType.cs b/MinecraftClient/CommandHandler/ArgumentType/PlayerNameArgumentType.cs deleted file mode 100644 index 4a6229246c..0000000000 --- a/MinecraftClient/CommandHandler/ArgumentType/PlayerNameArgumentType.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Linq; -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.ArgumentTypes; -using Brigadier.NET.Context; -using Brigadier.NET.Suggestion; -using MinecraftClient.Mapping; - -namespace MinecraftClient.CommandHandler.ArgumentType -{ - public class PlayerNameArgumentType : ArgumentType - { - public override string Parse(IStringReader reader) - { - reader.SkipWhitespace(); - return reader.ReadString(); - } - - public override Task ListSuggestions(CommandContext context, SuggestionsBuilder builder) - { - McClient? client = CmdResult.currentHandler; - if (client is not null) - { - var entityList = client.GetEntities().Values.ToList(); - foreach (var entity in entityList) - { - if (entity.Type != EntityType.Player || string.IsNullOrWhiteSpace(entity.Name)) - continue; - builder.Suggest(entity.Name); - } - builder.Suggest(client.GetUsername()); - } - return builder.BuildFuture(); - } - } -} diff --git a/MinecraftClient/CommandHandler/ArgumentType/ScriptNameArgumentType.cs b/MinecraftClient/CommandHandler/ArgumentType/ScriptNameArgumentType.cs deleted file mode 100644 index fe77a04c37..0000000000 --- a/MinecraftClient/CommandHandler/ArgumentType/ScriptNameArgumentType.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.ArgumentTypes; -using Brigadier.NET.Context; -using Brigadier.NET.Suggestion; - -namespace MinecraftClient.CommandHandler.ArgumentType -{ - public class ScriptNameArgumentType : ArgumentType - { - public override string Parse(IStringReader reader) - { - string remaining = reader.Remaining; - reader.Cursor += reader.RemainingLength; - return remaining; - } - - public override Task ListSuggestions(CommandContext context, SuggestionsBuilder builder) - { - try - { - string? dir = Path.GetDirectoryName(builder.Remaining); - if (!string.IsNullOrEmpty(dir) && Path.Exists(dir)) - { - foreach (string fileName in Directory.GetFiles(dir, "*.cs")) - builder.Suggest(fileName); - foreach (string fileName in Directory.GetFiles(dir, "*.txt")) - builder.Suggest(fileName); - } - } - catch (IOException) { } - catch (ArgumentException) { } - catch (UnauthorizedAccessException) { } - - try - { - foreach (string fileName in Directory.GetFiles("." + Path.DirectorySeparatorChar, "*.cs")) - builder.Suggest(fileName); - foreach (string fileName in Directory.GetFiles("." + Path.DirectorySeparatorChar, "*.txt")) - builder.Suggest(fileName); - } - catch (IOException) { } - catch (ArgumentException) { } - catch (UnauthorizedAccessException) { } - - return builder.BuildFuture(); - } - } -} diff --git a/MinecraftClient/CommandHandler/ArgumentType/ServerNickArgumentType.cs b/MinecraftClient/CommandHandler/ArgumentType/ServerNickArgumentType.cs deleted file mode 100644 index ae520f7ddb..0000000000 --- a/MinecraftClient/CommandHandler/ArgumentType/ServerNickArgumentType.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.ArgumentTypes; -using Brigadier.NET.Context; -using Brigadier.NET.Suggestion; - -namespace MinecraftClient.CommandHandler.ArgumentType -{ - public class ServerNickArgumentType : ArgumentType - { - public override string Parse(IStringReader reader) - { - reader.SkipWhitespace(); - return reader.ReadString(); - } - - public override Task ListSuggestions(CommandContext context, SuggestionsBuilder builder) - { - var serverList = Settings.Config.Main.Advanced.ServerList; - foreach (var server in serverList) - builder.Suggest(server.Key); - return builder.BuildFuture(); - } - } -} diff --git a/MinecraftClient/CommandHandler/ArgumentType/TupleArgumentType.cs b/MinecraftClient/CommandHandler/ArgumentType/TupleArgumentType.cs deleted file mode 100644 index 55157d99c8..0000000000 --- a/MinecraftClient/CommandHandler/ArgumentType/TupleArgumentType.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using Brigadier.NET; -using Brigadier.NET.ArgumentTypes; - -namespace MinecraftClient.CommandHandler.ArgumentType -{ - public class TupleArgumentType : ArgumentType> - { - public override Tuple Parse(IStringReader reader) - { - reader.SkipWhitespace(); - int int1 = reader.ReadInt(); - reader.SkipWhitespace(); - int int2 = reader.ReadInt(); - return new(int1, int2); - } - } -} diff --git a/MinecraftClient/CommandHandler/CmdResult.cs b/MinecraftClient/CommandHandler/CmdResult.cs deleted file mode 100644 index 9c4cd8405f..0000000000 --- a/MinecraftClient/CommandHandler/CmdResult.cs +++ /dev/null @@ -1,96 +0,0 @@ -using System; - -namespace MinecraftClient.CommandHandler -{ - public class CmdResult - { - public static readonly CmdResult Empty = new(); - - internal static McClient? currentHandler; - - public enum Status - { - NotRun = int.MinValue, - FailChunkNotLoad = -4, - FailNeedEntity = -3, - FailNeedInventory = -2, - FailNeedTerrain = -1, - Fail = 0, - Done = 1, - } - - public CmdResult() - { - this.status = Status.NotRun; - this.result = "Command did not run, cannot determine the result of the command."; - } - - public Status status; - - public string? result; - - public int SetAndReturn(Status status) - { - this.status = status; - this.result = status switch - { -#pragma warning disable format // @formatter:off - Status.NotRun => "Command did not run, cannot determine the result of the command.", - Status.FailChunkNotLoad => null, - Status.FailNeedEntity => Translations.extra_entity_required, - Status.FailNeedInventory => Translations.extra_inventory_required, - Status.FailNeedTerrain => Translations.extra_terrainandmovement_required, - Status.Fail => Translations.general_fail, - Status.Done => null, - _ => null, -#pragma warning restore format // @formatter:on - }; - return Convert.ToInt32(this.status); - } - - public int SetAndReturn(Status status, string? result) - { - this.status = status; - this.result = result; - return Convert.ToInt32(this.status); - } - - public int SetAndReturn(int code, string? result) - { - this.status = (Status)Enum.ToObject(typeof(Status), code); - if (!Enum.IsDefined(typeof(Status), status)) - throw new InvalidOperationException($"{code} is not a legal return value."); - this.result = result; - return code; - } - - public int SetAndReturn(bool result) - { - this.status = result ? Status.Done : Status.Fail; - this.result = result ? Translations.general_done : Translations.general_fail; - return Convert.ToInt32(this.status); - } - - public int SetAndReturn(string? result) - { - this.status = Status.Done; - this.result = result; - return Convert.ToInt32(this.status); - } - - public int SetAndReturn(string? resultstr, bool result) - { - this.status = result ? Status.Done : Status.Fail; - this.result = resultstr; - return Convert.ToInt32(this.status); - } - - public override string ToString() - { - if (result is not null) - return result; - else - return status.ToString(); - } - } -} diff --git a/MinecraftClient/CommandHandler/MccArguments.cs b/MinecraftClient/CommandHandler/MccArguments.cs deleted file mode 100644 index 78416bc109..0000000000 --- a/MinecraftClient/CommandHandler/MccArguments.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System; -using Brigadier.NET.Context; -using MinecraftClient.CommandHandler.ArgumentType; - -namespace MinecraftClient.CommandHandler -{ - public static class MccArguments - { - public static LocationArgumentType Location() - { - return new LocationArgumentType(); - } - - public static Mapping.Location GetLocation(CommandContext context, string name) - { - return context.GetArgument(name); - } - - public static TupleArgumentType Tuple() - { - return new TupleArgumentType(); - } - - public static Tuple GetTuple(CommandContext context, string name) - { - return context.GetArgument>(name); - } - - public static EntityTypeArgumentType EntityType() - { - return new EntityTypeArgumentType(); - } - - public static Mapping.EntityType GetEntityType(CommandContext context, string name) - { - return context.GetArgument(name); - } - - public static ItemTypeArgumentType ItemType() - { - return new ItemTypeArgumentType(); - } - - public static Inventory.ItemType GetItemType(CommandContext context, string name) - { - return context.GetArgument(name); - } - - public static BotNameArgumentType BotName() - { - return new BotNameArgumentType(); - } - - public static ServerNickArgumentType ServerNick() - { - return new ServerNickArgumentType(); - } - - public static AccountNickArgumentType AccountNick() - { - return new AccountNickArgumentType(); - } - - public static InventoryIdArgumentType InventoryId() - { - return new InventoryIdArgumentType(); - } - - public static InventoryActionArgumentType InventoryAction() - { - return new InventoryActionArgumentType(); - } - - public static InventorySlotArgumentType InventorySlot() - { - return new InventorySlotArgumentType(); - } - - public static Inventory.WindowActionType GetInventoryAction(CommandContext context, string name) - { - return context.GetArgument(name); - } - - public static AutoCraftRecipeNameArgumentType AutoCraftRecipeName() - { - return new AutoCraftRecipeNameArgumentType(); - } - - public static FarmerCropTypeArgumentType FarmerCropType() - { - return new FarmerCropTypeArgumentType(); - } - - public static ChatBots.Farmer.CropType GetFarmerCropType(CommandContext context, string name) - { - return context.GetArgument(name); - } - - public static PlayerNameArgumentType PlayerName() - { - return new PlayerNameArgumentType(); - } - - public static MapBotMapIdArgumentType MapBotMapId() - { - return new MapBotMapIdArgumentType(); - } - - public static HotbarSlotArgumentType HotbarSlot() - { - return new HotbarSlotArgumentType(); - } - - public static ScriptNameArgumentType ScriptName() - { - return new ScriptNameArgumentType(); - } - } -} diff --git a/MinecraftClient/CommandHandler/Patch/CommandDispatcherExtensions.cs b/MinecraftClient/CommandHandler/Patch/CommandDispatcherExtensions.cs deleted file mode 100644 index 37ef9cc492..0000000000 --- a/MinecraftClient/CommandHandler/Patch/CommandDispatcherExtensions.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.Text; -using Brigadier.NET; - -namespace MinecraftClient.CommandHandler.Patch -{ - public static class CommandDispatcherExtensions - { - /** - * This method unregisteres a previously declared command - * - * @param The name of the command to remove - */ - public static void Unregister(this CommandDispatcher commandDispatcher, string commandname) - { - commandDispatcher.GetRoot().RemoveChild(commandname); - } - - public static string GetAllUsageString(this CommandDispatcher commandDispatcher, string commandName, bool restricted) - { - char cmdChar = Settings.Config.Main.Advanced.InternalCmdChar.ToChar(); - try - { - string[] usages = commandDispatcher.GetAllUsage(commandDispatcher.GetRoot().GetChild(commandName), new(), restricted); - StringBuilder sb = new(); - sb.AppendLine("All Usages:"); - foreach (var usage in usages) - { - sb.Append(cmdChar).Append(commandName).Append(' '); - if (usage.Length > 0 && usage[0] == '_') - sb.AppendLine(usage.Replace("_help -> ", $"_help -> {cmdChar}help ")); - else - sb.AppendLine(usage); - } - sb.Remove(sb.Length - 1, 1); - return sb.ToString(); - } - catch - { - return string.Empty; - } - } - } -} \ No newline at end of file diff --git a/MinecraftClient/CommandHandler/Patch/CommandNodeExtensions.cs b/MinecraftClient/CommandHandler/Patch/CommandNodeExtensions.cs deleted file mode 100644 index 23e2a87f71..0000000000 --- a/MinecraftClient/CommandHandler/Patch/CommandNodeExtensions.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.Collections.Generic; -using System.Reflection; -using Brigadier.NET.Tree; - -namespace MinecraftClient.CommandHandler.Patch -{ - public static class CommandNodeExtensions - { - public static void RemoveChild(this CommandNode commandNode, string name) - { - var children = (IDictionary>) - typeof(CommandNode) - .GetField("_children", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)! - .GetValue(commandNode)!; - var literals = (IDictionary>) - typeof(CommandNode) - .GetField("_literals", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)! - .GetValue(commandNode)!; - var arguments = (IDictionary>) - typeof(CommandNode) - .GetField("_arguments", BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)! - .GetValue(commandNode)!; - - children.Remove(name); - literals.Remove(name); - } - } -} \ No newline at end of file diff --git a/MinecraftClient/CommandHandler/SuggestionTooltip.cs b/MinecraftClient/CommandHandler/SuggestionTooltip.cs deleted file mode 100644 index 330c63ed6a..0000000000 --- a/MinecraftClient/CommandHandler/SuggestionTooltip.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Brigadier.NET; - -namespace MinecraftClient.CommandHandler -{ - internal class SuggestionTooltip(string tooltip) : IMessage - { - public string String { get; set; } = tooltip; - } -} diff --git a/MinecraftClient/Commands/AchievementCommand.cs b/MinecraftClient/Commands/AchievementCommand.cs deleted file mode 100644 index ee99c4d7af..0000000000 --- a/MinecraftClient/Commands/AchievementCommand.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System.Linq; -using System.Text; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - public class AchievementCommand : Command - { - public override string CmdName => "achievement"; - public override string CmdUsage => "achievement "; - public override string CmdDesc => Translations.cmd_achievement_desc; - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - .Then(l => l.Literal("list") - .Executes(r => GetUsage(r.Source, "list"))) - .Then(l => l.Literal("locked") - .Executes(r => GetUsage(r.Source, "locked"))) - .Then(l => l.Literal("unlocked") - .Executes(r => GetUsage(r.Source, "unlocked"))) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => ListAchievements(r.Source, null)) - .Then(l => l.Literal("list") - .Executes(r => ListAchievements(r.Source, null))) - .Then(l => l.Literal("locked") - .Executes(r => ListAchievements(r.Source, false))) - .Then(l => l.Literal("unlocked") - .Executes(r => ListAchievements(r.Source, true))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format - "list" => GetCmdDescTranslated(), - "locked" => GetCmdDescTranslated(), - "unlocked" => GetCmdDescTranslated(), - _ => GetCmdDescTranslated(), -#pragma warning restore format - }); - } - - /// null = all, true = unlocked only, false = locked only - private static int ListAchievements(CmdResult r, bool? completed) - { - McClient handler = CmdResult.currentHandler!; - - Achievement[] items = completed switch - { - true => handler.GetUnlockedAchievements(), - false => handler.GetLockedAchievements(), - null => handler.GetAchievements() - }; - - if (items.Length == 0) - { - string msg = completed switch - { - true => Translations.cmd_achievement_none_unlocked, - false => Translations.cmd_achievement_none_locked, - _ => Translations.cmd_achievement_none - }; - return r.SetAndReturn(CmdResult.Status.Done, msg); - } - - string header = completed switch - { - true => Translations.cmd_achievement_header_unlocked, - false => Translations.cmd_achievement_header_locked, - _ => Translations.cmd_achievement_header - }; - - StringBuilder sb = new(); - sb.AppendLine(header); - - foreach (Achievement a in items.OrderBy(static a => a.Id)) - { - string status = a.IsCompleted - ? Translations.cmd_achievement_done - : Translations.cmd_achievement_todo; - - string display = a.Title is not null - ? string.Format(Translations.cmd_achievement_entry_titled, status, a.Title, a.Id, a.Type) - : string.Format(Translations.cmd_achievement_entry, status, a.Id, a.Type); - - sb.AppendLine(display); - } - - handler.Log.Info(sb.ToString().TrimEnd()); - return r.SetAndReturn(CmdResult.Status.Done); - } - } -} diff --git a/MinecraftClient/Commands/Animation.cs b/MinecraftClient/Commands/Animation.cs deleted file mode 100644 index b996211cbf..0000000000 --- a/MinecraftClient/Commands/Animation.cs +++ /dev/null @@ -1,55 +0,0 @@ -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - public class Animation : Command - { - public override string CmdName { get { return "animation"; } } - public override string CmdUsage { get { return "animation "; } } - public override string CmdDesc { get { return Translations.cmd_animation_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - .Then(l => l.Literal("mainhand") - .Executes(r => GetUsage(r.Source, "mainhand"))) - .Then(l => l.Literal("offhand") - .Executes(r => GetUsage(r.Source, "offhand"))) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => DoAnimation(r.Source, mainhand: true)) - .Then(l => l.Literal("mainhand") - .Executes(r => DoAnimation(r.Source, mainhand: true))) - .Then(l => l.Literal("offhand") - .Executes(r => DoAnimation(r.Source, mainhand: false))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "mainhand" => GetCmdDescTranslated(), - "offhand" => GetCmdDescTranslated(), - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private static int DoAnimation(CmdResult r, bool mainhand) - { - McClient handler = CmdResult.currentHandler!; - return r.SetAndReturn(handler.DoAnimation(mainhand ? 1 : 0)); - } - } -} diff --git a/MinecraftClient/Commands/Bed.cs b/MinecraftClient/Commands/Bed.cs deleted file mode 100644 index f3d4b995fb..0000000000 --- a/MinecraftClient/Commands/Bed.cs +++ /dev/null @@ -1,181 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Mapping; -using static MinecraftClient.CommandHandler.CmdResult; - -namespace MinecraftClient.Commands -{ - public class BedCommand : Command - { - public override string CmdName { get { return "bed"; } } - public override string CmdUsage { get { return "bed leave|sleep |sleep "; } } - public override string CmdDesc { get { return Translations.cmd_bed_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - .Then(l => l.Literal("leave") - .Executes(r => GetUsage(r.Source, "leave"))) - .Then(l => l.Literal("sleep") - .Executes(r => GetUsage(r.Source, "sleep"))) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Literal("leave") - .Executes(r => DoLeaveBed(r.Source))) - .Then(l => l.Literal("sleep") - .Then(l => l.Argument("Location", MccArguments.Location()) - .Executes(r => DoSleepBedWithLocation(r.Source, MccArguments.GetLocation(r, "Location")))) - .Then(l => l.Argument("Radius", Arguments.Double()) - .Executes(r => DoSleepBedWithRadius(r.Source, Arguments.GetDouble(r, "Radius"))))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "leave" => GetCmdDescTranslated(), - "sleep" => GetCmdDescTranslated(), - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private static int DoLeaveBed(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - return r.SetAndReturn(Translations.cmd_bed_leaving, handler.SendEntityAction(Protocol.EntityActionType.LeaveBed)); - } - - private static int DoSleepBedWithRadius(CmdResult r, double radius) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - handler.Log.Info(string.Format(Translations.cmd_bed_searching, radius)); - - Location current = handler.GetCurrentLocation(); - Location bedLocation = current; - - Material[] bedMaterialList = new Material[] - { - Material.BlackBed, - Material.BlueBed, - Material.BrownBed, - Material.CyanBed, - Material.GrayBed, - Material.GreenBed, - Material.LightBlueBed, - Material.LightGrayBed, - Material.LimeBed, - Material.MagentaBed, - Material.OrangeBed, - Material.PinkBed, - Material.PurpleBed, - Material.RedBed, - Material.WhiteBed, - Material.YellowBed - }; - - bool found = false; - foreach (Material material in bedMaterialList) - { - List beds = handler.GetWorld().FindBlock(current, material, radius); - - if (beds.Count > 0) - { - found = true; - bedLocation = beds.First(); - break; - } - } - - if (!found) - return r.SetAndReturn(Status.Fail, Translations.cmd_bed_bed_not_found); - - handler.Log.Info(string.Format(Translations.cmd_bed_found_a_bed_at, bedLocation.X, bedLocation.Y, bedLocation.Z)); - - if (!Movement.CheckChunkLoading(handler.GetWorld(), current, bedLocation)) - return r.SetAndReturn(Status.FailChunkNotLoad, - string.Format(Translations.cmd_move_chunk_not_loaded, bedLocation.X, bedLocation.Y, bedLocation.Z)); - - if (handler.MoveTo(bedLocation)) - { - Task.Factory.StartNew(() => - { - bool atTheLocation = false; - DateTime timeout = DateTime.Now.AddSeconds(60); - - while (DateTime.Now < timeout) - { - if (handler.GetCurrentLocation() == bedLocation || handler.GetCurrentLocation().Distance(bedLocation) <= 2.0) - { - atTheLocation = true; - break; - } - } - - if (!atTheLocation) - { - handler.Log.Info(string.Format(Translations.cmd_bed_failed_to_reach_in_time, bedLocation.X, bedLocation.Y, bedLocation.Z)); - return; - } - - handler.Log.Info(string.Format(Translations.cmd_bed_moving, bedLocation.X, bedLocation.Y, bedLocation.Z)); - - bool res = handler.PlaceBlock(bedLocation, Direction.Down); - - handler.Log.Info(string.Format( - Translations.cmd_bed_trying_to_use, - bedLocation.X, - bedLocation.Y, - bedLocation.Z, - res ? Translations.cmd_bed_in : Translations.cmd_bed_not_in - )); - }); - - return r.SetAndReturn(Status.Done); - } - else - { - return r.SetAndReturn(Status.Fail, Translations.cmd_bed_cant_reach_safely); - } - } - - private static int DoSleepBedWithLocation(CmdResult r, Location block) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - block.ToAbsolute(handler.GetCurrentLocation()); - Location blockCenter = block.ToCenter(); - - if (!handler.GetWorld().GetBlock(block).Type.IsBed()) - return r.SetAndReturn(Status.Fail, - string.Format(Translations.cmd_bed_not_a_bed, blockCenter.X, blockCenter.Y, blockCenter.Z)); - - return r.SetAndReturn(Status.Done, string.Format( - Translations.cmd_bed_trying_to_use, - blockCenter.X, - blockCenter.Y, - blockCenter.Z, - handler.PlaceBlock(block, Direction.Down) ? Translations.cmd_bed_in : Translations.cmd_bed_not_in - )); - } - } -} \ No newline at end of file diff --git a/MinecraftClient/Commands/BlockInfo.cs b/MinecraftClient/Commands/BlockInfo.cs deleted file mode 100644 index 61e177d07b..0000000000 --- a/MinecraftClient/Commands/BlockInfo.cs +++ /dev/null @@ -1,96 +0,0 @@ -using System.Text; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Mapping; -using static MinecraftClient.CommandHandler.CmdResult; - -namespace MinecraftClient.Commands -{ - public class BlockInfo : Command - { - public override string CmdName { get { return "blockinfo"; } } - public override string CmdUsage { get { return "blockinfo [-s]"; } } - public override string CmdDesc { get { return Translations.cmd_blockinfo_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - .Then(l => l.Literal("-s") - .Executes(r => GetUsage(r.Source, "-s"))) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => LogBlockInfo(r.Source, null, false)) - .Then(l => l.Literal("-s") - .Executes(r => LogBlockInfo(r.Source, null, true))) - .Then(l => l.Argument("Location", MccArguments.Location()) - .Executes(r => LogBlockInfo(r.Source, MccArguments.GetLocation(r, "Location"), false)) - .Then(l => l.Literal("-s") - .Executes(r => LogBlockInfo(r.Source, MccArguments.GetLocation(r, "Location"), true)))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "-s" => GetCmdDescTranslated(), - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private static int LogBlockInfo(CmdResult r, Location? targetBlock, bool reportSurrounding) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - if (targetBlock.HasValue) - targetBlock.Value.ToAbsolute(handler.GetCurrentLocation()); - else - targetBlock = handler.GetCurrentLocation(); - - Block block = handler.GetWorld().GetBlock(targetBlock.Value); - - handler.Log.Info($"{Translations.cmd_blockinfo_BlockType}: {block.GetTypeString()}"); - if (reportSurrounding) - { - StringBuilder sb = new(); - sb.AppendLine($"{Translations.cmd_blockinfo_BlocksAround}:"); - - double X = targetBlock.Value.X, Y = targetBlock.Value.Y, Z = targetBlock.Value.Z; - Block blockXPositive = handler.GetWorld().GetBlock(new Location(X + 1, Y, Z)); - Block blockXNegative = handler.GetWorld().GetBlock(new Location(X - 1, Y, Z)); - Block blockYPositive = handler.GetWorld().GetBlock(new Location(X, Y + 1, Z)); - Block blockYNegative = handler.GetWorld().GetBlock(new Location(X, Y - 1, Z)); - Block blockZPositive = handler.GetWorld().GetBlock(new Location(X, Y, Z + 1)); - Block blockZNegative = handler.GetWorld().GetBlock(new Location(X, Y, Z - 1)); - - sb.AppendLine($"[X {Translations.cmd_blockinfo_Positive}] {Translations.cmd_blockinfo_BlockType}: {blockXPositive.GetTypeString()}"); - sb.AppendLine($"[X {Translations.cmd_blockinfo_Negative}] {Translations.cmd_blockinfo_BlockType}: {blockXNegative.GetTypeString()}"); - - sb.AppendLine(" "); - - sb.AppendLine($"[Y {Translations.cmd_blockinfo_Positive}] {Translations.cmd_blockinfo_BlockType}: {blockYPositive.GetTypeString()}"); - sb.AppendLine($"[Y {Translations.cmd_blockinfo_Negative}] {Translations.cmd_blockinfo_BlockType}: {blockYNegative.GetTypeString()}"); - - sb.AppendLine(" "); - - sb.AppendLine($"[Z {Translations.cmd_blockinfo_Positive}] {Translations.cmd_blockinfo_BlockType}: {blockZPositive.GetTypeString()}"); - sb.AppendLine($"[Z {Translations.cmd_blockinfo_Negative}] {Translations.cmd_blockinfo_BlockType}: {blockZNegative.GetTypeString()}"); - - handler.Log.Info(sb.ToString()); - } - return r.SetAndReturn(Status.Done); - } - } -} diff --git a/MinecraftClient/Commands/Book.cs b/MinecraftClient/Commands/Book.cs deleted file mode 100644 index e035f27729..0000000000 --- a/MinecraftClient/Commands/Book.cs +++ /dev/null @@ -1,300 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Inventory; -using MinecraftClient.Tui; - -namespace MinecraftClient.Commands -{ - public class Book : Command - { - private const char PageDelimiter = '\f'; - - public override string CmdName => "book"; - public override string CmdUsage => Translations.cmd_book_usage; - public override string CmdDesc => Translations.cmd_book_desc; - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - .Then(l => l.Literal("read").Executes(r => GetUsage(r.Source, "read"))) - .Then(l => l.Literal("write").Executes(r => GetUsage(r.Source, "write"))) - .Then(l => l.Literal("edit").Executes(r => GetUsage(r.Source, "edit"))) - .Then(l => l.Literal("sign").Executes(r => GetUsage(r.Source, "sign"))))); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Literal("read") - .Executes(r => ReadBook(r.Source, null)) - .Then(l => l.Argument("Page", Arguments.Integer(min: 1)) - .Executes(r => ReadBook(r.Source, Arguments.GetInteger(r, "Page"))))) - .Then(l => l.Literal("write") - .Then(l => l.Literal("text") - .Then(l => l.Argument("Text", Arguments.GreedyString()) - .Executes(r => WriteBook(r.Source, Arguments.GetString(r, "Text"))))) - .Then(l => l.Literal("file") - .Then(l => l.Argument("Path", Arguments.GreedyString()) - .Executes(r => WriteBookFromFile(r.Source, Arguments.GetString(r, "Path")))))) - .Then(l => l.Literal("edit") - .Executes(r => OpenEditor(r.Source)) - .Then(l => l.Literal("page") - .Then(l => l.Argument("Page", Arguments.Integer(min: 1)) - .Then(l => l.Argument("Text", Arguments.GreedyString()) - .Executes(r => EditPage(r.Source, Arguments.GetInteger(r, "Page"), Arguments.GetString(r, "Text")))))) - .Then(l => l.Literal("insert") - .Then(l => l.Argument("Page", Arguments.Integer(min: 1)) - .Then(l => l.Argument("Text", Arguments.GreedyString()) - .Executes(r => InsertPage(r.Source, Arguments.GetInteger(r, "Page"), Arguments.GetString(r, "Text")))))) - .Then(l => l.Literal("delete") - .Then(l => l.Argument("Page", Arguments.Integer(min: 1)) - .Executes(r => DeletePage(r.Source, Arguments.GetInteger(r, "Page")))))) - .Then(l => l.Literal("sign") - .Then(l => l.Argument("Title", Arguments.GreedyString()) - .Executes(r => SignBook(r.Source, Arguments.GetString(r, "Title"))))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName)))); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { - "read" => Translations.cmd_book_help_read, - "write" => Translations.cmd_book_help_write, - "edit" => Translations.cmd_book_help_edit, - "sign" => Translations.cmd_book_help_sign, - _ => GetCmdDescTranslated() - }); - } - - private int ReadBook(CmdResult r, int? page) - { - McClient handler = CmdResult.currentHandler!; - if (!EnsureInventory(r, handler)) - return -1; - - if (!handler.TryGetHeldBookContent(out BookContent content)) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_book_not_holding_book); - - if (page is null && BookTuiHost.TryOpen(handler, BookHand.Main, editable: false)) - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_book_tui_opened); - - handler.Log.Info(FormatBook(content, page)); - return r.SetAndReturn(CmdResult.Status.Done); - } - - private int OpenEditor(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - if (!EnsureWritable(r, handler, out _, Translations.cmd_book_cannot_edit_signed)) - return -1; - - return BookTuiHost.TryOpen(handler, BookHand.Main, editable: true) - ? r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_book_tui_opened) - : r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_book_tui_required); - } - - private int WriteBook(CmdResult r, string text) - { - McClient handler = CmdResult.currentHandler!; - if (!EnsureWritable(r, handler, out _, Translations.cmd_book_cannot_edit_signed)) - return -1; - - IReadOnlyList pages = SplitPages(text); - if (!Validate(r, handler, pages, title: null)) - return -1; - - return handler.SendBookEdit(pages) - ? r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_book_write_sent) - : r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_book_write_failed); - } - - private int WriteBookFromFile(CmdResult r, string path) - { - if (!File.Exists(path)) - return r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_book_file_not_found, path)); - - return WriteBook(r, File.ReadAllText(path, Encoding.UTF8)); - } - - private int EditPage(CmdResult r, int page, string text) - { - McClient handler = CmdResult.currentHandler!; - if (!EnsureWritable(r, handler, out BookContent content, Translations.cmd_book_cannot_edit_signed)) - return -1; - - List pages = content.Pages.ToList(); - if (page > pages.Count) - return r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_book_page_out_of_range, page, pages.Count)); - - pages[page - 1] = DecodeInlineText(text); - if (!Validate(r, handler, pages, title: null)) - return -1; - - return handler.SendBookEdit(pages) - ? r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_book_edit_sent) - : r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_book_write_failed); - } - - private int InsertPage(CmdResult r, int page, string text) - { - McClient handler = CmdResult.currentHandler!; - if (!EnsureWritable(r, handler, out BookContent content, Translations.cmd_book_cannot_edit_signed)) - return -1; - - List pages = content.Pages.ToList(); - if (page > pages.Count + 1) - return r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_book_page_out_of_range, page, pages.Count)); - - pages.Insert(page - 1, DecodeInlineText(text)); - if (!Validate(r, handler, pages, title: null)) - return -1; - - return handler.SendBookEdit(pages) - ? r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_book_edit_sent) - : r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_book_write_failed); - } - - private int DeletePage(CmdResult r, int page) - { - McClient handler = CmdResult.currentHandler!; - if (!EnsureWritable(r, handler, out BookContent content, Translations.cmd_book_cannot_edit_signed)) - return -1; - - List pages = content.Pages.ToList(); - if (page > pages.Count) - return r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_book_page_out_of_range, page, pages.Count)); - - pages.RemoveAt(page - 1); - if (pages.Count == 0) - pages.Add(string.Empty); - - if (!Validate(r, handler, pages, title: null)) - return -1; - - return handler.SendBookEdit(pages) - ? r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_book_edit_sent) - : r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_book_write_failed); - } - - private int SignBook(CmdResult r, string title) - { - McClient handler = CmdResult.currentHandler!; - if (!EnsureWritable(r, handler, out BookContent content, Translations.cmd_book_already_signed)) - return -1; - - string normalizedTitle = title.Trim(); - if (!Validate(r, handler, content.Pages, normalizedTitle)) - return -1; - - return handler.SendBookEdit(content.Pages, normalizedTitle) - ? r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_book_sign_sent) - : r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_book_write_failed); - } - - private static bool EnsureInventory(CmdResult r, McClient handler) - { - if (handler.GetInventoryEnabled()) - return true; - - r.SetAndReturn(CmdResult.Status.FailNeedInventory); - return false; - } - - private static bool EnsureWritable(CmdResult r, McClient handler, out BookContent content, string signedBookMessage) - { - content = BookContent.EmptyWritable; - if (!EnsureInventory(r, handler)) - return false; - - Item? item = handler.GetHeldBook(); - if (!BookContentHelper.IsWritableBook(item)) - { - r.SetAndReturn(CmdResult.Status.Fail, GetWritableBookFailureMessage(item, signedBookMessage)); - return false; - } - - return BookContentHelper.TryRead(item, out content); - } - - private static string GetWritableBookFailureMessage(Item? item, string signedBookMessage) - { - return BookContentHelper.TryRead(item, out BookContent content) && content.IsSigned - ? signedBookMessage - : Translations.cmd_book_not_holding_writable; - } - - private static IReadOnlyList SplitPages(string text) - { - return BookContentHelper.NormalizePages(DecodeInlineText(text).Split(PageDelimiter)); - } - - private static string DecodeInlineText(string text) - { - return text.Replace("\\f", PageDelimiter.ToString(), StringComparison.Ordinal) - .Replace("\\n", "\n", StringComparison.Ordinal); - } - - private static bool Validate(CmdResult r, McClient handler, IReadOnlyList pages, string? title) - { - BookLimits limits = BookLimits.ForProtocol(handler.GetProtocolVersion()); - - if (pages.Count > limits.MaxPages) - { - r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_book_too_many_pages, pages.Count, limits.MaxPages)); - return false; - } - - for (int i = 0; i < pages.Count; i++) - { - if (pages[i].Length > limits.MaxPageLength) - { - r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_book_page_too_long, i + 1, pages[i].Length, limits.MaxPageLength)); - return false; - } - } - - if (title is not null && (title.Length == 0 || title.Length > limits.MaxTitleLength)) - { - r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_book_title_invalid, limits.MaxTitleLength)); - return false; - } - - return true; - } - - private static string FormatBook(BookContent content, int? page) - { - StringBuilder sb = new(); - sb.AppendLine(content.IsSigned - ? string.Format(Translations.cmd_book_header_signed, content.Title ?? string.Empty, content.Author ?? string.Empty) - : Translations.cmd_book_header_writable); - - if (page is not null) - { - int index = page.Value - 1; - if (index < 0 || index >= content.Pages.Count) - return string.Format(Translations.cmd_book_page_out_of_range, page.Value, content.Pages.Count); - - sb.AppendLine(string.Format(Translations.cmd_book_page_header, page.Value, content.Pages.Count)); - sb.Append(content.Pages[index]); - return sb.ToString(); - } - - for (int i = 0; i < content.Pages.Count; i++) - { - sb.AppendLine(string.Format(Translations.cmd_book_page_header, i + 1, content.Pages.Count)); - sb.AppendLine(content.Pages[i]); - } - - return sb.ToString().TrimEnd(); - } - } -} diff --git a/MinecraftClient/Commands/Bots.cs b/MinecraftClient/Commands/Bots.cs deleted file mode 100644 index 9a94615ebd..0000000000 --- a/MinecraftClient/Commands/Bots.cs +++ /dev/null @@ -1,97 +0,0 @@ -using System; -using System.Text; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Scripting; - -namespace MinecraftClient.Commands -{ - class Bots : Command - { - public override string CmdName { get { return "bots"; } } - public override string CmdUsage { get { return "bots [list|unload ]"; } } - public override string CmdDesc { get { return Translations.cmd_bots_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - .Then(l => l.Literal("list") - .Executes(r => GetUsage(r.Source, "list"))) - .Then(l => l.Literal("unload") - .Executes(r => GetUsage(r.Source, "unload"))) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => DoListBot(r.Source)) - .Then(l => l.Literal("list") - .Executes(r => DoListBot(r.Source))) - .Then(l => l.Literal("unload") - .Then(l => l.Argument("BotName", MccArguments.BotName()) - .Executes(r => DoUnloadBot(r.Source, Arguments.GetString(r, "BotName"))))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "list" => GetCmdDescTranslated(), - "unload" => GetCmdDescTranslated(), - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoListBot(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - int length = handler.GetLoadedChatBots().Count; - if (length == 0) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_bots_noloaded); - - StringBuilder sb = new(); - for (int i = 0; i < length; i++) - { - sb.Append(handler.GetLoadedChatBots()[i].GetType().Name); - if (i != length - 1) - sb.Append(" ,"); - } - - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_bots_list + ": " + sb.ToString()); - } - - private int DoUnloadBot(CmdResult r, string botName) - { - McClient handler = CmdResult.currentHandler!; - if (botName.ToLower().Equals("all", StringComparison.OrdinalIgnoreCase)) - { - if (handler.GetLoadedChatBots().Count == 0) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_bots_noloaded); - else - { - handler.UnloadAllBots(); - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_bots_unloaded_all); - } - } - else - { - ChatBot? bot = handler.GetLoadedChatBots().Find(bot => bot.GetType().Name.ToLower() == botName.ToLower()); - if (bot is null) - return r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_bots_notfound, botName)); - else - { - handler.BotUnLoad(bot); - return r.SetAndReturn(CmdResult.Status.Done, string.Format(Translations.cmd_bots_unloaded, botName)); - } - } - } - } -} diff --git a/MinecraftClient/Commands/ChangeSlot.cs b/MinecraftClient/Commands/ChangeSlot.cs deleted file mode 100644 index acbe2e8d3f..0000000000 --- a/MinecraftClient/Commands/ChangeSlot.cs +++ /dev/null @@ -1,53 +0,0 @@ -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using static MinecraftClient.CommandHandler.CmdResult; - -namespace MinecraftClient.Commands -{ - class ChangeSlot : Command - { - public override string CmdName { get { return "changeslot"; } } - public override string CmdUsage { get { return "changeslot <1-9>"; } } - public override string CmdDesc { get { return Translations.cmd_changeSlot_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Argument("Slot", MccArguments.HotbarSlot()) - .Executes(r => DoChangeSlot(r.Source, Arguments.GetInteger(r, "Slot")))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoChangeSlot(CmdResult r, int slot) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetInventoryEnabled()) - return r.SetAndReturn(Status.FailNeedInventory); - - if (handler.ChangeSlot((short)(slot - 1))) - return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_changeSlot_changed, slot)); - else - return r.SetAndReturn(Status.Fail, Translations.cmd_changeSlot_fail); - } - } -} diff --git a/MinecraftClient/Commands/Chunk.cs b/MinecraftClient/Commands/Chunk.cs deleted file mode 100644 index cbf821736d..0000000000 --- a/MinecraftClient/Commands/Chunk.cs +++ /dev/null @@ -1,289 +0,0 @@ -using System; -using System.Text; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Mapping; -using static MinecraftClient.CommandHandler.CmdResult; - -namespace MinecraftClient.Commands -{ - public class Chunk : Command - { - public override string CmdName { get { return "chunk"; } } - public override string CmdUsage { get { return "chunk status [chunkX chunkZ|locationX locationY locationZ]"; } } - public override string CmdDesc { get { return Translations.cmd_chunk_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - .Then(l => l.Literal("status") - .Executes(r => GetUsage(r.Source, "status"))) - .Then(l => l.Literal("_setloading") - .Executes(r => GetUsage(r.Source, "_setloading"))) - .Then(l => l.Literal("_setloaded") - .Executes(r => GetUsage(r.Source, "_setloaded"))) - .Then(l => l.Literal("_delete") - .Executes(r => GetUsage(r.Source, "_delete"))) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Literal("status") - .Executes(r => LogChunkStatus(r.Source)) - .Then(l => l.Argument("Location", MccArguments.Location()) - .Executes(r => LogChunkStatus(r.Source, pos: MccArguments.GetLocation(r, "Location")))) - .Then(l => l.Argument("Chunk", MccArguments.Tuple()) - .Executes(r => LogChunkStatus(r.Source, markedChunkPos: MccArguments.GetTuple(r, "Chunk"))))) - .Then(l => l.Literal("_setloading") - .Then(l => l.Argument("Location", MccArguments.Location()) - .Executes(r => DebugSetLoading(r.Source, pos: MccArguments.GetLocation(r, "Location")))) - .Then(l => l.Argument("Chunk", MccArguments.Tuple()) - .Executes(r => DebugSetLoading(r.Source, markedChunkPos: MccArguments.GetTuple(r, "Chunk"))))) - .Then(l => l.Literal("_setloaded") - .Then(l => l.Argument("Location", MccArguments.Location()) - .Executes(r => DebugSetLoaded(r.Source, pos: MccArguments.GetLocation(r, "Location")))) - .Then(l => l.Argument("Chunk", MccArguments.Tuple()) - .Executes(r => DebugSetLoaded(r.Source, markedChunkPos: MccArguments.GetTuple(r, "Chunk"))))) - .Then(l => l.Literal("_delete") - .Then(l => l.Argument("Location", MccArguments.Location()) - .Executes(r => DebugDelete(r.Source, pos: MccArguments.GetLocation(r, "Location")))) - .Then(l => l.Argument("Chunk", MccArguments.Tuple()) - .Executes(r => DebugDelete(r.Source, markedChunkPos: MccArguments.GetTuple(r, "Chunk"))))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "status" => GetCmdDescTranslated(), - "_setloading" => GetCmdDescTranslated(), - "_setloaded" => GetCmdDescTranslated(), - "_delete" => GetCmdDescTranslated(), - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private static int LogChunkStatus(CmdResult r, Location? pos = null, Tuple? markedChunkPos = null) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - World world = handler.GetWorld(); - Location current = handler.GetCurrentLocation(); - if (pos.HasValue) - pos.Value.ToAbsolute(current); - - (int markChunkX, int markChunkZ) = markedChunkPos ?? - (pos.HasValue ? new(pos.Value.ChunkX, pos.Value.ChunkZ) : new(current.ChunkX, current.ChunkZ)); - - StringBuilder sb = new(); - - sb.Append(World.GetChunkLoadingStatus(handler.GetWorld())); - sb.Append('\n'); - - sb.AppendLine(string.Format(Translations.cmd_chunk_current, current, current.ChunkX, current.ChunkZ)); - if (markedChunkPos is not null) - { - sb.Append(Translations.cmd_chunk_marked); - if (pos.HasValue) - sb.Append(string.Format("X:{0:0.00} Y:{1:0.00} Z:{2:0.00}, ", pos.Value.X, pos.Value.Y, pos.Value.Z)); - sb.AppendLine(string.Format(Translations.cmd_chunk_chunk_pos, markChunkX, markChunkZ)); ; - } - - int safeHeight; - int safeWidth; - try { safeHeight = Console.BufferHeight; } catch { safeHeight = 50; } - try { safeWidth = Console.BufferWidth; } catch { safeWidth = 120; } - int consoleHeight = Math.Max(Math.Max(safeHeight, Settings.Config.Main.Advanced.MinTerminalHeight) - 2, 25); - if (consoleHeight % 2 == 0) - --consoleHeight; - - int consoleWidth = Math.Max(Math.Max(safeWidth, Settings.Config.Main.Advanced.MinTerminalWidth) / 2, 17); - if (consoleWidth % 2 == 0) - --consoleWidth; - - int startZ = current.ChunkZ - consoleHeight, endZ = current.ChunkZ + consoleHeight; - int startX = current.ChunkX - consoleWidth, endX = current.ChunkX + consoleWidth; - - int leftMost = endX, rightMost = startX, topMost = endZ, bottomMost = startZ; - for (int z = startZ; z <= endZ; z++) - { - for (int x = startX; x <= endX; ++x) - { - if (world[x, z] is not null) - { - leftMost = Math.Min(leftMost, x); - rightMost = Math.Max(rightMost, x); - topMost = Math.Min(topMost, z); - bottomMost = Math.Max(bottomMost, z); - } - } - } - - // Include the player's location - topMost = Math.Min(topMost, current.ChunkZ); - bottomMost = Math.Max(bottomMost, current.ChunkZ); - leftMost = Math.Min(leftMost, current.ChunkX); - rightMost = Math.Max(rightMost, current.ChunkX); - - // Empty one row and one column each - --leftMost; ++rightMost; --topMost; ++bottomMost; - - // Resize according to limitations - if ((bottomMost - topMost + 1) > consoleHeight) - { - int delta = (bottomMost - topMost + 1) - consoleHeight; - if (bottomMost - (delta + 1) / 2 < current.ChunkZ + 1) - { - int bottomReduce = bottomMost - (current.ChunkZ + 1); - bottomMost -= bottomReduce; - topMost += delta - bottomReduce; - } - else if (topMost + delta / 2 > current.ChunkZ - 1) - { - int topAdd = topMost - (current.ChunkZ - 1); - topMost += topAdd; - bottomMost -= delta - topAdd; - } - else - { - topMost += delta / 2; - bottomMost -= (delta + 1) / 2; - } - } - if ((rightMost - leftMost + 1) > consoleWidth) - { - int delta = (rightMost - leftMost + 1) - consoleWidth; - if (rightMost - (delta + 1) / 2 < current.ChunkX + 1) - { - int rightReduce = rightMost - (current.ChunkX + 1); - rightMost -= rightReduce; - leftMost += delta - rightReduce; - } - else if (leftMost + delta / 2 > current.ChunkX - 1) - { - int leftAdd = leftMost - (current.ChunkX - 1); - leftMost += leftAdd; - rightMost -= delta - leftAdd; - } - else - { - leftMost += delta / 2; - rightMost -= (delta + 1) / 2; - } - } - - // Try to include the marker chunk - if (markedChunkPos is not null && - (((Math.Max(bottomMost, markChunkZ) - Math.Min(topMost, markChunkZ) + 1) > consoleHeight) || - ((Math.Max(rightMost, markChunkX) - Math.Min(leftMost, markChunkX) + 1) > consoleWidth))) - sb.AppendLine(Translations.cmd_chunk_outside); - else - { - topMost = Math.Min(topMost, markChunkZ); - bottomMost = Math.Max(bottomMost, markChunkZ); - leftMost = Math.Min(leftMost, markChunkX); - rightMost = Math.Max(rightMost, markChunkX); - } - - - // \ud83d\udd33: 🔳, \ud83d\udfe8: 🟨, \ud83d\udfe9: 🟩, \u25A1: □, \u25A3: ▣, \u25A0: ■ - string[] chunkStatusStr = Settings.Config.Main.Advanced.EnableEmoji ? - new string[] { "\ud83d\udd33", "\ud83d\udfe8", "\ud83d\udfe9" } : new string[] { "\u25A1", "\u25A3", "\u25A0" }; - - // Output - for (int z = topMost; z <= bottomMost; ++z) - { - for (int x = leftMost; x <= rightMost; ++x) - { - if (z == current.ChunkZ && x == current.ChunkX) - sb.Append("§§7"); // Player Location: background gray - else if (z == markChunkZ && x == markChunkX) - sb.Append("§§4"); // Marked chunk: background red - - ChunkColumn? chunkColumn = world[x, z]; - if (chunkColumn is null) - sb.Append(chunkStatusStr[0]); - else if (chunkColumn.FullyLoaded) - sb.Append(chunkStatusStr[2]); - else - sb.Append(chunkStatusStr[1]); - - if ((z == current.ChunkZ && x == current.ChunkX) || (z == markChunkZ && x == markChunkX)) - sb.Append("§§r"); // Reset background color - } - sb.Append('\n'); - } - - sb.Append(string.Format(Translations.cmd_chunk_icon, "§§7 §§r", "§§4 §§r", chunkStatusStr[0], chunkStatusStr[1], chunkStatusStr[2])); - handler.Log.Info(sb.ToString()); - - return r.SetAndReturn(Status.Done); - } - - private static int DebugSetLoading(CmdResult r, Location? pos = null, Tuple? markedChunkPos = null) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - if (pos.HasValue) - pos.Value.ToAbsolute(handler.GetCurrentLocation()); - handler.Log.Info(Translations.cmd_chunk_for_debug); - (int chunkX, int chunkZ) = markedChunkPos ?? new(pos!.Value.ChunkX, pos!.Value.ChunkZ); - ChunkColumn? chunkColumn = handler.GetWorld()[chunkX, chunkZ]; - if (chunkColumn is not null) - chunkColumn.FullyLoaded = false; - - if (chunkColumn is null) - return r.SetAndReturn(Status.Fail, "Fail: chunk dosen't exist!"); - else - return r.SetAndReturn(Status.Done, string.Format("Successfully marked chunk ({0}, {1}) as loading.", chunkX, chunkZ)); - } - - private static int DebugSetLoaded(CmdResult r, Location? pos = null, Tuple? markedChunkPos = null) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - if (pos.HasValue) - pos.Value.ToAbsolute(handler.GetCurrentLocation()); - handler.Log.Info(Translations.cmd_chunk_for_debug); - (int chunkX, int chunkZ) = markedChunkPos ?? new(pos!.Value.ChunkX, pos!.Value.ChunkZ); - ChunkColumn? chunkColumn = handler.GetWorld()[chunkX, chunkZ]; - if (chunkColumn is not null) - chunkColumn.FullyLoaded = false; - - if (chunkColumn is null) - return r.SetAndReturn(Status.Fail, "Fail: chunk dosen't exist!"); - else - return r.SetAndReturn(Status.Done, string.Format("Successfully marked chunk ({0}, {1}) as loaded.", chunkX, chunkZ)); - } - - private static int DebugDelete(CmdResult r, Location? pos = null, Tuple? markedChunkPos = null) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - if (pos.HasValue) - pos.Value.ToAbsolute(handler.GetCurrentLocation()); - handler.Log.Info(Translations.cmd_chunk_for_debug); - (int chunkX, int chunkZ) = markedChunkPos ?? new(pos!.Value.ChunkX, pos!.Value.ChunkZ); - handler.GetWorld()[chunkX, chunkZ] = null; - - return r.SetAndReturn(Status.Done, string.Format("Successfully deleted chunk ({0}, {1}).", chunkX, chunkZ)); - } - } -} diff --git a/MinecraftClient/Commands/ClearConsole.cs b/MinecraftClient/Commands/ClearConsole.cs deleted file mode 100644 index 68ff58ccb4..0000000000 --- a/MinecraftClient/Commands/ClearConsole.cs +++ /dev/null @@ -1,45 +0,0 @@ -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - public class ClearConsole : Command - { - public override string CmdName => "clear-console"; - public override string CmdUsage => "clear-console"; - public override string CmdDesc => Translations.cmd_clear_console_desc; - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source)) - ) - ); - - var clearConsole = dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => Execute(r.Source)) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - - dispatcher.Register(l => l.Literal("cc") - .Executes(r => Execute(r.Source)) - .Redirect(clearConsole) - ); - } - - private int GetUsage(CmdResult result) - { - return result.SetAndReturn(GetCmdDescTranslated()); - } - - private int Execute(CmdResult result) - { - ConsoleIO.ClearConsole(); - return result.SetAndReturn(CmdResult.Status.Done); - } - } -} diff --git a/MinecraftClient/Commands/Connect.cs b/MinecraftClient/Commands/Connect.cs deleted file mode 100644 index 51206462b7..0000000000 --- a/MinecraftClient/Commands/Connect.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using static MinecraftClient.CommandHandler.CmdResult; - -namespace MinecraftClient.Commands -{ - public class Connect : Command - { - public override string CmdName { get { return "connect"; } } - public override string CmdUsage { get { return "connect [account]"; } } - public override string CmdDesc { get { return Translations.cmd_connect_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Argument("ServerNick", MccArguments.ServerNick()) - .Executes(r => DoConnect(r.Source, Arguments.GetString(r, "ServerNick"), string.Empty)) - .Then(l => l.Argument("AccountNick", MccArguments.AccountNick()) - .Executes(r => DoConnect(r.Source, Arguments.GetString(r, "ServerNick"), Arguments.GetString(r, "AccountNick"))))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoConnect(CmdResult r, string server, string account) - { - RestartSettingsSnapshot previousSettings = Program.CaptureRestartSettings(); - if (!string.IsNullOrWhiteSpace(account) && !Settings.Config.Main.Advanced.SetAccount(account)) - return r.SetAndReturn(Status.Fail, string.Format(Translations.cmd_connect_unknown, account)); - - if (Settings.Config.Main.SetServerIP(new Settings.MainConfigHelper.MainConfig.ServerInfoConfig(server), true)) - { - if (Program.TryRestart( - Program.CurrentConnectionAttempt, - TimeSpan.Zero, - keepAccountAndServerSettings: true, - replaceUntilCommit: true)) - { - return r.SetAndReturn(Status.Done); - } - - Program.RestoreRestartSettings(previousSettings); - return r.SetAndReturn(Status.Fail); - } - else - { - Program.RestoreRestartSettings(previousSettings); - return r.SetAndReturn(Status.Fail, string.Format(Translations.cmd_connect_invalid_ip, server)); - } - } - - internal static string DoConnect(string command) - { - RestartSettingsSnapshot previousSettings = Program.CaptureRestartSettings(); - string[] args = GetArgs(command); - if (args.Length > 1 && !Settings.Config.Main.Advanced.SetAccount(args[1])) - return string.Format(Translations.cmd_connect_unknown, args[1]); - - if (Settings.Config.Main.SetServerIP(new Settings.MainConfigHelper.MainConfig.ServerInfoConfig(args[0]), true)) - { - if (Program.TryRestart( - Program.CurrentConnectionAttempt, - TimeSpan.Zero, - keepAccountAndServerSettings: true, - replaceUntilCommit: true)) - { - return string.Empty; - } - - Program.RestoreRestartSettings(previousSettings); - return Translations.general_fail; - } - else - { - Program.RestoreRestartSettings(previousSettings); - return string.Format(Translations.cmd_connect_invalid_ip, args[0]); - } - } - } -} diff --git a/MinecraftClient/Commands/ConsoleChat.cs b/MinecraftClient/Commands/ConsoleChat.cs deleted file mode 100644 index fd52a6e417..0000000000 --- a/MinecraftClient/Commands/ConsoleChat.cs +++ /dev/null @@ -1,49 +0,0 @@ -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - public class ConsoleChat : Command - { - public override string CmdName => "console-chat"; - public override string CmdUsage => "console-chat [on|off]"; - public override string CmdDesc => Translations.cmd_console_chat_desc; - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => SetChatVisibility(r.Source, null)) - .Then(l => l.Literal("on") - .Executes(r => SetChatVisibility(r.Source, true))) - .Then(l => l.Literal("off") - .Executes(r => SetChatVisibility(r.Source, false))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult result) - { - return result.SetAndReturn(GetCmdDescTranslated()); - } - - private int SetChatVisibility(CmdResult result, bool? visible) - { - ConsoleIO.ChatVisible = visible ?? !ConsoleIO.ChatVisible; - - return result.SetAndReturn( - CmdResult.Status.Done, - ConsoleIO.ChatVisible - ? Translations.cmd_console_chat_state_on - : Translations.cmd_console_chat_state_off); - } - } -} diff --git a/MinecraftClient/Commands/Debug.cs b/MinecraftClient/Commands/Debug.cs deleted file mode 100644 index 92184f1d25..0000000000 --- a/MinecraftClient/Commands/Debug.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System; -using System.Linq; -using System.Text; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Scripting; - -namespace MinecraftClient.Commands -{ - public class Debug : Command - { - public override string CmdName { get { return "debug"; } } - public override string CmdUsage { get { return "debug [on|off|state]"; } } - public override string CmdDesc { get { return Translations.cmd_debug_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => SetDebugMode(r.Source, true)) - .Then(l => l.Literal("on") - .Executes(r => SetDebugMode(r.Source, false, true))) - .Then(l => l.Literal("off") - .Executes(r => SetDebugMode(r.Source, false, false))) - .Then(l => l.Literal("state") - .Executes(r => ShowState(r.Source))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int SetDebugMode(CmdResult r, bool flip, bool mode = false) - { - McClient handler = CmdResult.currentHandler!; - - if (flip) - Settings.Config.Logging.DebugMessages = !Settings.Config.Logging.DebugMessages; - else - Settings.Config.Logging.DebugMessages = mode; - - handler.Log.DebugEnabled = Settings.Config.Logging.DebugMessages; - - if (Settings.Config.Logging.DebugMessages) - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_debug_state_on); - else - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_debug_state_off); - } - - private int ShowState(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - var sb = new StringBuilder(); - - sb.AppendLine($"§e=== {Translations.cmd_debug_state_header} ==="); - sb.AppendLine($"§7{Translations.cmd_debug_state_server,-10}§f{handler.GetServerHost()}:{handler.GetServerPort()}"); - sb.AppendLine($"§7{Translations.cmd_debug_state_username,-10}§f{handler.GetUsername()}"); - sb.AppendLine($"§7{Translations.cmd_debug_state_protocol,-10}§f{handler.GetProtocolVersion()}"); - sb.AppendLine($"§7{Translations.cmd_debug_state_gamemode,-10}§f{handler.GetGamemode()}"); - sb.AppendLine($"§7{Translations.cmd_debug_state_health,-10}§f{handler.GetHealth():F1}"); - sb.AppendLine($"§7{Translations.cmd_debug_state_food,-10}§f{handler.GetSaturation()}"); - - var loc = handler.GetCurrentLocation(); - sb.AppendLine($"§7{Translations.cmd_debug_state_location,-10}§f{loc.X:F2}, {loc.Y:F2}, {loc.Z:F2}"); - - sb.AppendLine($"§7{Translations.cmd_debug_state_tps,-10}§f{handler.GetServerTPS():F1}"); - - sb.AppendLine($"§7{Translations.cmd_debug_state_console,-10}§f{(ConsoleIO.Backend?.GetType().Name ?? "null")}"); - - var features = new StringBuilder(); - features.Append(handler.GetTerrainEnabled() ? "§aTerrain " : "§8Terrain "); - features.Append(handler.GetInventoryEnabled() ? "§aInventory " : "§8Inventory "); - features.Append(handler.GetEntityHandlingEnabled() ? "§aEntity " : "§8Entity "); - sb.AppendLine($"§7{Translations.cmd_debug_state_features,-10}{features}"); - - sb.AppendLine($"§7{Translations.cmd_debug_state_debug,-10}§f{(Settings.Config.Logging.DebugMessages ? "§aON" : "§cOFF")}"); - - var bots = handler.GetLoadedChatBots(); - sb.AppendLine($"§7{Translations.cmd_debug_state_bots} ({bots.Count}): §f{string.Join(", ", bots.Select(b => b.GetType().Name))}"); - - var players = handler.GetOnlinePlayers(); - sb.AppendLine($"§7{Translations.cmd_debug_state_players,-10}§f{string.Format(Translations.cmd_debug_state_online, players.Length)}"); - - handler.Log.Info(sb.ToString()); - return r.SetAndReturn(CmdResult.Status.Done); - } - } -} diff --git a/MinecraftClient/Commands/Dialog.cs b/MinecraftClient/Commands/Dialog.cs deleted file mode 100644 index 826fa5926f..0000000000 --- a/MinecraftClient/Commands/Dialog.cs +++ /dev/null @@ -1,108 +0,0 @@ -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Dialogs; -using MinecraftClient.Tui; - -namespace MinecraftClient.Commands; - -public class Dialog : Command -{ - public override string CmdName => "dialog"; - public override string CmdUsage => Translations.cmd_dialog_usage; - public override string CmdDesc => Translations.cmd_dialog_desc; - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source)))); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => Show(r.Source)) - .Then(l => l.Literal("show") - .Executes(r => Show(r.Source))) - .Then(l => l.Literal("open") - .Executes(r => Open(r.Source))) - .Then(l => l.Literal("set") - .Then(l => l.Argument("Input", Arguments.String()) - .Then(l => l.Argument("Value", Arguments.GreedyString()) - .Executes(r => SetInput(r.Source, Arguments.GetString(r, "Input"), Arguments.GetString(r, "Value")))))) - .Then(l => l.Literal("input") - .Then(l => l.Argument("Input", Arguments.String()) - .Then(l => l.Argument("Value", Arguments.GreedyString()) - .Executes(r => SetInput(r.Source, Arguments.GetString(r, "Input"), Arguments.GetString(r, "Value")))))) - .Then(l => l.Literal("click") - .Then(l => l.Argument("Index", Arguments.Integer(min: 1)) - .Executes(r => Click(r.Source, Arguments.GetInteger(r, "Index"))))) - .Then(l => l.Literal("click-label") - .Then(l => l.Argument("Label", Arguments.GreedyString()) - .Executes(r => ClickLabel(r.Source, Arguments.GetString(r, "Label"))))) - .Then(l => l.Literal("cancel") - .Executes(r => Cancel(r.Source))) - .Then(l => l.Literal("dismiss") - .Executes(r => Dismiss(r.Source))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName)))); - } - - private int GetUsage(CmdResult r) => r.SetAndReturn(GetCmdDescTranslated()); - - private static int Show(CmdResult r) - { - var handler = CmdResult.currentHandler!; - var current = handler.Dialogs.Current; - if (current is null) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.dialog_none); - - ConsoleIO.WriteLineFormatted(DialogFormatter.Render(current), acceptnewlines: true); - return r.SetAndReturn(CmdResult.Status.Done); - } - - private static int Open(CmdResult r) - { - var handler = CmdResult.currentHandler!; - var current = handler.Dialogs.Current; - if (current is null) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.dialog_none); - - if (ConsoleIO.Backend is not TuiConsoleBackend) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.dialog_tui_unavailable); - - return DialogTuiHost.TryOpen(handler, current, force: true) - ? r.SetAndReturn(CmdResult.Status.Done, Translations.dialog_tui_opened) - : r.SetAndReturn(CmdResult.Status.Fail, Translations.dialog_tui_unavailable); - } - - private static int SetInput(CmdResult r, string key, string value) - { - var result = CmdResult.currentHandler!.Dialogs.SetInput(key, value); - return r.SetAndReturn(result.Success ? CmdResult.Status.Done : CmdResult.Status.Fail, result.Message); - } - - private static int Click(CmdResult r, int index) - { - var result = CmdResult.currentHandler!.Dialogs.Click(index); - return r.SetAndReturn(result.Success ? CmdResult.Status.Done : CmdResult.Status.Fail, result.Message); - } - - private static int ClickLabel(CmdResult r, string label) - { - var result = CmdResult.currentHandler!.Dialogs.ClickLabel(label); - return r.SetAndReturn(result.Success ? CmdResult.Status.Done : CmdResult.Status.Fail, result.Message); - } - - private static int Cancel(CmdResult r) - { - var result = CmdResult.currentHandler!.Dialogs.Cancel(); - return r.SetAndReturn(result.Success ? CmdResult.Status.Done : CmdResult.Status.Fail, result.Message); - } - - private static int Dismiss(CmdResult r) - { - var result = CmdResult.currentHandler!.Dialogs.Dismiss(); - DialogTuiHost.CloseCurrent(); - return r.SetAndReturn(result.Success ? CmdResult.Status.Done : CmdResult.Status.Fail, result.Message); - } -} diff --git a/MinecraftClient/Commands/Dig.cs b/MinecraftClient/Commands/Dig.cs deleted file mode 100644 index 477e2c7742..0000000000 --- a/MinecraftClient/Commands/Dig.cs +++ /dev/null @@ -1,88 +0,0 @@ -using System; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Mapping; -using static MinecraftClient.CommandHandler.CmdResult; - -namespace MinecraftClient.Commands -{ - public class Dig : Command - { - public override string CmdName { get { return "dig"; } } - public override string CmdUsage { get { return "dig "; } } - public override string CmdDesc { get { return Translations.cmd_dig_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - // TODO Get blockFace direction from arguments - .Executes(r => DigLookAt(r.Source)) - .Then(l => l.Argument("Duration", Arguments.Double()) - .Executes(r => DigLookAt(r.Source, Arguments.GetDouble(r, "Duration")))) - .Then(l => l.Argument("Location", MccArguments.Location()) - .Executes(r => DigAt(r.Source, MccArguments.GetLocation(r, "Location"))) - .Then(l => l.Argument("Duration", Arguments.Double()) - .Executes(r => DigAt(r.Source, MccArguments.GetLocation(r, "Location"), Arguments.GetDouble(r, "Duration"))))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DigAt(CmdResult r, Location blockToBreak, double duration = 0) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - Location current = handler.GetCurrentLocation(); - blockToBreak = blockToBreak.ToAbsolute(current); - if (blockToBreak.DistanceSquared(current.EyesLocation()) > 25) - return r.SetAndReturn(Status.Fail, Translations.cmd_dig_too_far); - Block block = handler.GetWorld().GetBlock(blockToBreak); - if (block.Type == Material.Air) - return r.SetAndReturn(Status.Fail, Translations.cmd_dig_no_block); - else if (handler.DigBlock(blockToBreak, Direction.Down, duration: duration)) - { - blockToBreak = blockToBreak.ToCenter(); - return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_dig_dig, blockToBreak.X, blockToBreak.Y, blockToBreak.Z, block.GetTypeString())); - } - else - return r.SetAndReturn(Status.Fail, Translations.cmd_dig_fail); - } - - private int DigLookAt(CmdResult r, double duration = 0) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - (bool hasBlock, Location blockLoc, Block block) = RaycastHelper.RaycastBlock(handler, 4.5, false); - if (!hasBlock) - return r.SetAndReturn(Status.Fail, Translations.cmd_dig_too_far); - else if (block.Type == Material.Air) - return r.SetAndReturn(Status.Fail, Translations.cmd_dig_no_block); - else if (handler.DigBlock(blockLoc, Direction.Down, lookAtBlock: false, duration: duration)) - return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_dig_dig, blockLoc.X, blockLoc.Y, blockLoc.Z, block.GetTypeString())); - else - return r.SetAndReturn(Status.Fail, Translations.cmd_dig_fail); - } - } -} diff --git a/MinecraftClient/Commands/DropItem.cs b/MinecraftClient/Commands/DropItem.cs deleted file mode 100644 index 38cfc4b68b..0000000000 --- a/MinecraftClient/Commands/DropItem.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Inventory; -using static MinecraftClient.CommandHandler.CmdResult; - -namespace MinecraftClient.Commands -{ - class DropItem : Command - { - public override string CmdName { get { return "dropitem"; } } - public override string CmdUsage { get { return "dropitem "; } } - public override string CmdDesc { get { return Translations.cmd_dropItem_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Argument("ItemType", MccArguments.ItemType()) - .Executes(r => DoDropItem(r.Source, MccArguments.GetItemType(r, "ItemType")))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoDropItem(CmdResult r, ItemType itemType) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetInventoryEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - int inventoryId; - var inventories = handler.GetInventories(); - List availableIds = inventories.Keys.ToList(); - availableIds.Remove(0); // remove player inventory ID from list - if (availableIds.Count == 1) - inventoryId = availableIds[0]; // one container, use it - else - inventoryId = 0; - var p = inventories[inventoryId]; - int[] targetItems = p.SearchItem(itemType); - foreach (int slot in targetItems) - handler.DoWindowAction(inventoryId, slot, WindowActionType.DropItemStack); - - return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_dropItem_dropped, Item.GetTypeString(itemType), inventoryId)); - } - } -} diff --git a/MinecraftClient/Commands/EffectsCommand.cs b/MinecraftClient/Commands/EffectsCommand.cs deleted file mode 100644 index 700764aaa6..0000000000 --- a/MinecraftClient/Commands/EffectsCommand.cs +++ /dev/null @@ -1,67 +0,0 @@ -using System.Linq; -using System.Text; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - public class EffectsCommand : Command - { - public override string CmdName { get { return "effects"; } } - public override string CmdUsage { get { return "effects"; } } - public override string CmdDesc { get { return Translations.cmd_effects_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => ShowEffects(r.Source)) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int ShowEffects(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetEntityHandlingEnabled()) - return r.SetAndReturn(CmdResult.Status.FailNeedEntity); - - var effects = handler.GetPlayerEffects() - .Values - .Where(effectData => !effectData.IsExpired) - .OrderBy(effectData => effectData.Effect) - .ToArray(); - - if (effects.Length == 0) - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_effects_none); - - StringBuilder response = new(); - response.AppendLine(Translations.cmd_effects_header); - foreach (var effectData in effects) - { - response.AppendLine(string.Format(Translations.cmd_effects_entry, - effectData.GetDisplayName(), effectData.GetRemainingDurationText())); - } - - return r.SetAndReturn(CmdResult.Status.Done, response.ToString().TrimEnd()); - } - } -} diff --git a/MinecraftClient/Commands/Enchant.cs b/MinecraftClient/Commands/Enchant.cs deleted file mode 100644 index 1fc361f70c..0000000000 --- a/MinecraftClient/Commands/Enchant.cs +++ /dev/null @@ -1,109 +0,0 @@ -using System.Linq; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Commands -{ - public class Enchant : Command - { - public override string CmdName { get { return "enchant"; } } - public override string CmdUsage { get { return "enchant "; } } - public override string CmdDesc { get { return Translations.cmd_enchant_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - .Then(l => l.Literal("top") - .Executes(r => GetUsage(r.Source, "top"))) - .Then(l => l.Literal("middle") - .Executes(r => GetUsage(r.Source, "middle"))) - .Then(l => l.Literal("bottom") - .Executes(r => GetUsage(r.Source, "bottom"))) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Literal("top") - .Executes(r => DoEnchant(r.Source, slotId: 0))) - .Then(l => l.Literal("middle") - .Executes(r => DoEnchant(r.Source, slotId: 1))) - .Then(l => l.Literal("bottom") - .Executes(r => DoEnchant(r.Source, slotId: 2))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "top" => GetCmdDescTranslated(), - "middle" => GetCmdDescTranslated(), - "bottom" => GetCmdDescTranslated(), - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoEnchant(CmdResult r, int slotId) - { - McClient handler = CmdResult.currentHandler!; - Container? enchantingTable = null; - - foreach (var (id, container) in handler.GetInventories()) - { - if (container.Type == ContainerType.Enchantment) - { - enchantingTable = container; - break; - } - } - - if (enchantingTable is null) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_enchant_enchanting_table_not_opened); - - int[] emptySlots = enchantingTable.GetEmpytSlots(); - - if (emptySlots.Contains(0)) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_enchant_enchanting_no_item); - - if (emptySlots.Contains(1)) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_enchant_enchanting_no_lapis); - - Item lapisSlot = enchantingTable.Items[1]; - - if (lapisSlot.Type != ItemType.LapisLazuli || lapisSlot.Count < 3) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_enchant_enchanting_no_lapis); - - EnchantmentData? enchantment = handler.GetLastEnchantments(); - - if (enchantment is null) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_enchant_no_enchantments); - - short requiredLevel = slotId switch - { - 0 => enchantment.TopEnchantmentLevelRequirement, - 1 => enchantment.MiddleEnchantmentLevelRequirement, - 2 => enchantment.BottomEnchantmentLevelRequirement, - _ => 9999 - }; - - if (handler.GetLevel() < requiredLevel) - return r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_enchant_no_levels, handler.GetLevel(), requiredLevel)); - else - { - if (handler.ClickContainerButton(enchantingTable.ID, slotId)) - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_enchant_clicked); - else - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_enchant_not_clicked); - } - } - } -} diff --git a/MinecraftClient/Commands/Entitycmd.cs b/MinecraftClient/Commands/Entitycmd.cs deleted file mode 100644 index b0ed8a1be7..0000000000 --- a/MinecraftClient/Commands/Entitycmd.cs +++ /dev/null @@ -1,330 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Text; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Inventory; -using MinecraftClient.Mapping; -using static MinecraftClient.CommandHandler.CmdResult; - -namespace MinecraftClient.Commands -{ - class Entitycmd : Command - { - public override string CmdName { get { return "entity"; } } - public override string CmdUsage { get { return "entity [near] "; } } - public override string CmdDesc { get { return string.Empty; } } - - private enum ActionType { Attack, Use, List }; - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - .Then(l => l.Literal("near") - .Executes(r => GetUsage(r.Source, "near"))) - .Then(l => l.Literal("attack") - .Executes(r => GetUsage(r.Source, "attack"))) - .Then(l => l.Literal("use") - .Executes(r => GetUsage(r.Source, "use"))) - .Then(l => l.Literal("list") - .Executes(r => GetUsage(r.Source, "list"))) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => GetFullEntityList(r.Source)) - .Then(l => l.Literal("near") - .Executes(r => GetClosetEntityList(r.Source)) - .Then(l => l.Argument("EntityID", Arguments.Integer()) - .Executes(r => OperateWithId(r.Source, Arguments.GetInteger(r, "EntityID"), ActionType.List)) - .Then(l => l.Literal("attack") - .Executes(r => OperateWithId(r.Source, Arguments.GetInteger(r, "EntityID"), ActionType.Attack))) - .Then(l => l.Literal("use") - .Executes(r => OperateWithId(r.Source, Arguments.GetInteger(r, "EntityID"), ActionType.Use))) - .Then(l => l.Literal("list") - .Executes(r => OperateWithId(r.Source, Arguments.GetInteger(r, "EntityID"), ActionType.List)))) - .Then(l => l.Argument("EntityType", MccArguments.EntityType()) - .Executes(r => OperateWithType(r.Source, true, MccArguments.GetEntityType(r, "EntityType"), ActionType.List)) - .Then(l => l.Literal("attack") - .Executes(r => OperateWithType(r.Source, near: true, MccArguments.GetEntityType(r, "EntityType"), ActionType.Attack))) - .Then(l => l.Literal("use") - .Executes(r => OperateWithType(r.Source, near: true, MccArguments.GetEntityType(r, "EntityType"), ActionType.Use))) - .Then(l => l.Literal("list") - .Executes(r => OperateWithType(r.Source, near: true, MccArguments.GetEntityType(r, "EntityType"), ActionType.List))))) - .Then(l => l.Argument("EntityID", Arguments.Integer()) - .Executes(r => OperateWithId(r.Source, Arguments.GetInteger(r, "EntityID"), ActionType.List)) - .Then(l => l.Literal("attack") - .Executes(r => OperateWithId(r.Source, Arguments.GetInteger(r, "EntityID"), ActionType.Attack))) - .Then(l => l.Literal("use") - .Executes(r => OperateWithId(r.Source, Arguments.GetInteger(r, "EntityID"), ActionType.Use))) - .Then(l => l.Literal("list") - .Executes(r => OperateWithId(r.Source, Arguments.GetInteger(r, "EntityID"), ActionType.List)))) - .Then(l => l.Argument("EntityType", MccArguments.EntityType()) - .Executes(r => OperateWithType(r.Source, true, MccArguments.GetEntityType(r, "EntityType"), ActionType.List)) - .Then(l => l.Literal("attack") - .Executes(r => OperateWithType(r.Source, near: false, MccArguments.GetEntityType(r, "EntityType"), ActionType.Attack))) - .Then(l => l.Literal("use") - .Executes(r => OperateWithType(r.Source, near: false, MccArguments.GetEntityType(r, "EntityType"), ActionType.Use))) - .Then(l => l.Literal("list") - .Executes(r => OperateWithType(r.Source, near: false, MccArguments.GetEntityType(r, "EntityType"), ActionType.List)))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "near" => GetCmdDescTranslated(), - "attack" => GetCmdDescTranslated(), - "use" => GetCmdDescTranslated(), - "list" => GetCmdDescTranslated(), - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int GetFullEntityList(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetEntityHandlingEnabled()) - return r.SetAndReturn(Status.FailNeedEntity); - - Dictionary entities = handler.GetEntities(); - StringBuilder response = new(); - response.AppendLine(Translations.cmd_entityCmd_entities); - foreach (var entity2 in entities) - response.AppendLine(GetEntityInfoShort(entity2.Value)); - response.Append(GetCmdDescTranslated()); - handler.Log.Info(response.ToString()); - - return r.SetAndReturn(Status.Done); - } - - private int GetClosetEntityList(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetEntityHandlingEnabled()) - return r.SetAndReturn(Status.FailNeedEntity); - - if (TryGetClosetEntity(handler.GetEntities(), handler.GetCurrentLocation(), null, out Entity? closest)) - { - handler.Log.Info(GetEntityInfoDetailed(handler, closest)); - return r.SetAndReturn(Status.Done); - } - else - return r.SetAndReturn(Status.Fail, Translations.cmd_entityCmd_not_found); - } - - private int OperateWithId(CmdResult r, int entityID, ActionType action) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetEntityHandlingEnabled()) - return r.SetAndReturn(Status.FailNeedEntity); - - if (handler.GetEntities().TryGetValue(entityID, out Entity? entity)) - { - handler.Log.Info(InteractionWithEntity(handler, entity, action)); - return r.SetAndReturn(Status.Done); - } - else - return r.SetAndReturn(Status.Fail, Translations.cmd_entityCmd_not_found); - } - - private int OperateWithType(CmdResult r, bool near, EntityType entityType, ActionType action) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetEntityHandlingEnabled()) - return r.SetAndReturn(Status.FailNeedEntity); - - if (near) - { - if (TryGetClosetEntity(handler.GetEntities(), handler.GetCurrentLocation(), entityType, out Entity? closest)) - { - handler.Log.Info(InteractionWithEntity(handler, closest, action)); - return r.SetAndReturn(Status.Done); - } - else - return r.SetAndReturn(Status.Fail, Translations.cmd_entityCmd_not_found); - } - else - { - if (action == ActionType.Attack || action == ActionType.Use) - { - string actionst = Translations.cmd_entityCmd_attacked; - int actioncount = 0; - foreach (var entity2 in handler.GetEntities()) - { - if (entity2.Value.Type == entityType) - { - if (action == ActionType.Attack) - { - handler.InteractEntity(entity2.Key, InteractType.Attack); - actionst = Translations.cmd_entityCmd_attacked; - } - else if (action == ActionType.Use) - { - handler.InteractEntity(entity2.Key, InteractType.Interact); - actionst = Translations.cmd_entityCmd_used; - } - actioncount++; - } - } - handler.Log.Info(actioncount + " " + actionst); - return r.SetAndReturn(Status.Done); - } - else - { - StringBuilder response = new(); - response.AppendLine(Translations.cmd_entityCmd_entities); - foreach (var entity2 in handler.GetEntities()) - { - if (entity2.Value.Type == entityType) - { - response.AppendLine(GetEntityInfoShort(entity2.Value)); - } - } - response.Append(GetCmdDescTranslated()); - handler.Log.Info(response.ToString()); - return r.SetAndReturn(Status.Done); - } - } - } - - private static string GetEntityInfoShort(Entity entity) - { - int id = entity.ID; - float health = entity.Health; - int latency = entity.Latency; - string? nickname = entity.Name; - string? customname = entity.CustomName; - EntityPose pose = entity.Pose; - EntityType type = entity.Type; - Item item = entity.Item; - string location = $"X:{Math.Round(entity.Location.X, 2)}, Y:{Math.Round(entity.Location.Y, 2)}, Z:{Math.Round(entity.Location.Z, 2)}"; - - if (type == EntityType.Item || type == EntityType.ItemFrame || type == EntityType.EyeOfEnder || type == EntityType.Egg || type == EntityType.EnderPearl || type == EntityType.Potion || type == EntityType.SplashPotion || type == EntityType.LingeringPotion || type == EntityType.Fireball || type == EntityType.FireworkRocket) - return $" #{id}: {Translations.cmd_entityCmd_type}: {entity.GetTypeString()}, {Translations.cmd_entityCmd_item}: {item.GetTypeString()}, {Translations.cmd_entityCmd_location}: {location}"; - else if (type == EntityType.Player && !string.IsNullOrEmpty(nickname)) - return $" #{id}: {Translations.cmd_entityCmd_type}: {entity.GetTypeString()}, {Translations.cmd_entityCmd_nickname}: §8{nickname}§8, {Translations.cmd_entityCmd_latency}: {latency}, {Translations.cmd_entityCmd_health}: {health}, {Translations.cmd_entityCmd_pose}: {pose}, {Translations.cmd_entityCmd_location}: {location}"; - else if (type == EntityType.Player && !string.IsNullOrEmpty(customname)) - return $" #{id}: {Translations.cmd_entityCmd_type}: {entity.GetTypeString()}, {Translations.cmd_entityCmd_customname}: §8{customname.Replace("&", "§")}§8, {Translations.cmd_entityCmd_latency}: {latency}, {Translations.cmd_entityCmd_health}: {health}, {Translations.cmd_entityCmd_pose}: {pose}, {Translations.cmd_entityCmd_location}: {location}"; - else - return $" #{id}: {Translations.cmd_entityCmd_type}: {entity.GetTypeString()}, {Translations.cmd_entityCmd_health}: {health}, {Translations.cmd_entityCmd_location}: {location}"; - } - - private static string GetEntityInfoDetailed(McClient handler, Entity entity) - { - StringBuilder sb = new(); - int id = entity.ID; - float health = entity.Health; - int latency = entity.Latency; - Item item = entity.Item; - string? nickname = entity.Name; - string? customname = entity.CustomName; - EntityPose pose = entity.Pose; - EntityType type = entity.Type; - double distance = Math.Round(entity.Location.Distance(handler.GetCurrentLocation()), 2); - string location = $"X:{Math.Round(entity.Location.X, 2)}, Y:{Math.Round(entity.Location.Y, 2)}, Z:{Math.Round(entity.Location.Z, 2)}"; - - string color = "§a"; // Green - if (health < 10) - color = "§c"; // Red - else if (health < 15) - color = "§e"; // Yellow - - sb.Append($"{Translations.cmd_entityCmd_entity}: {id}\n [MCC] Type: {entity.GetTypeString()}"); - - if (!string.IsNullOrEmpty(nickname)) - sb.Append($"\n [MCC] {Translations.cmd_entityCmd_nickname}: {nickname}"); - else if (!string.IsNullOrEmpty(customname)) - sb.Append($"\n [MCC] {Translations.cmd_entityCmd_customname}: {customname.Replace("&", "§")}§8"); - - if (type == EntityType.Player) - { - sb.Append($"\n [MCC] {Translations.cmd_entityCmd_latency}: {latency}"); - } - else if (type == EntityType.Item || type == EntityType.ItemFrame || type == Mapping.EntityType.EyeOfEnder || type == Mapping.EntityType.Egg || type == Mapping.EntityType.EnderPearl || type == Mapping.EntityType.Potion || type == Mapping.EntityType.SplashPotion || type == Mapping.EntityType.LingeringPotion || type == Mapping.EntityType.Fireball || type == Mapping.EntityType.FireworkRocket) - { - string? displayName = item.DisplayName; - if (string.IsNullOrEmpty(displayName)) - sb.Append($"\n [MCC] {Translations.cmd_entityCmd_item}: {item.GetTypeString()} x{item.Count}"); - else - sb.Append($"\n [MCC] {Translations.cmd_entityCmd_item}: {item.GetTypeString()} x{item.Count} - {displayName}§8"); - } - - if (entity.Equipment is not null && entity.Equipment.Count >= 1) - { - sb.Append($"\n [MCC] {Translations.cmd_entityCmd_equipment}:"); - if (entity.Equipment.ContainsKey(0) && entity.Equipment[0] is not null) - sb.Append($"\n [MCC] {Translations.cmd_entityCmd_mainhand}: {entity.Equipment[0].GetTypeString()} x{entity.Equipment[0].Count}"); - if (entity.Equipment.ContainsKey(1) && entity.Equipment[1] is not null) - sb.Append($"\n [MCC] {Translations.cmd_entityCmd_offhand}: {entity.Equipment[1].GetTypeString()} x{entity.Equipment[1].Count}"); - if (entity.Equipment.ContainsKey(5) && entity.Equipment[5] is not null) - sb.Append($"\n [MCC] {Translations.cmd_entityCmd_helmet}: {entity.Equipment[5].GetTypeString()} x{entity.Equipment[5].Count}"); - if (entity.Equipment.ContainsKey(4) && entity.Equipment[4] is not null) - sb.Append($"\n [MCC] {Translations.cmd_entityCmd_chestplate}: {entity.Equipment[4].GetTypeString()} x{entity.Equipment[4].Count}"); - if (entity.Equipment.ContainsKey(3) && entity.Equipment[3] is not null) - sb.Append($"\n [MCC] {Translations.cmd_entityCmd_leggings}: {entity.Equipment[3].GetTypeString()} x{entity.Equipment[3].Count}"); - if (entity.Equipment.ContainsKey(2) && entity.Equipment[2] is not null) - sb.Append($"\n [MCC] {Translations.cmd_entityCmd_boots}: {entity.Equipment[2].GetTypeString()} x{entity.Equipment[2].Count}"); - } - - sb.Append($"\n [MCC] {Translations.cmd_entityCmd_pose}: {pose}"); - sb.Append($"\n [MCC] {Translations.cmd_entityCmd_health}: {color}{health}§8"); - sb.Append($"\n [MCC] {Translations.cmd_entityCmd_distance}: {distance}"); - sb.Append($"\n [MCC] {Translations.cmd_entityCmd_location}: {location}"); - - return sb.ToString(); - } - - private static bool TryGetClosetEntity(Dictionary entities, Location location, EntityType? entityType, [NotNullWhen(true)] out Entity? closest) - { - closest = null; - bool find = false; - double closest_distance = double.PositiveInfinity; - foreach (var entity in entities) - { - if (entityType.HasValue && entity.Value.Type != entityType) - continue; - - double distance = Math.Round(entity.Value.Location.Distance(location), 2); - if (distance < closest_distance) - { - find = true; - closest = entity.Value; - closest_distance = distance; - } - } - return find; - } - - private static string InteractionWithEntity(McClient handler, Entity entity, ActionType action) - { - switch (action) - { - case ActionType.Attack: - handler.InteractEntity(entity.ID, InteractType.Attack); - return Translations.cmd_entityCmd_attacked; - case ActionType.Use: - bool shouldInteractAt = entity.Type == EntityType.ArmorStand || - entity.Type == EntityType.ChestMinecart || - entity.Type == EntityType.ChestBoat; - - handler.InteractEntity(entity.ID, shouldInteractAt ? InteractType.InteractAt : InteractType.Interact); - return Translations.cmd_entityCmd_used; - case ActionType.List: - return GetEntityInfoDetailed(handler, entity); - default: - goto case ActionType.List; - } - } - } -} \ No newline at end of file diff --git a/MinecraftClient/Commands/ExecIf.cs b/MinecraftClient/Commands/ExecIf.cs deleted file mode 100644 index ca985bf4f4..0000000000 --- a/MinecraftClient/Commands/ExecIf.cs +++ /dev/null @@ -1,75 +0,0 @@ -using System; -using System.Collections.Generic; -using Brigadier.NET; -using Brigadier.NET.Builder; -using DynamicExpresso; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - class ExecIf : Command - { - public override string CmdName { get { return "execif"; } } - public override string CmdUsage { get { return "execif \"\" \"\""; } } - public override string CmdDesc { get { return Translations.cmd_execif_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Argument("Condition", Arguments.String()) - .Then(l => l.Argument("Command", Arguments.String()) - .Executes(r => HandleCommand(r.Source, Arguments.GetString(r, "Condition"), Arguments.GetString(r, "Command"))))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int HandleCommand(CmdResult r, string expressionText, string resultCommand) - { - McClient handler = CmdResult.currentHandler!; - try - { - var interpreter = new Interpreter(); - interpreter.SetVariable("MCC", handler); - interpreter.SetVariable("random", new Random()); - - foreach (KeyValuePair entry in Settings.Config.AppVar.GetVariables()) - interpreter.SetVariable(entry.Key, entry.Value); - - var result = interpreter.Eval(expressionText); - handler.Log.Debug("[Execif] Result Type: " + result.GetType().Name); - - if (result) - { - CmdResult output = new(); - handler.PerformInternalCommand(resultCommand, ref output); - - return r.SetAndReturn(CmdResult.Status.Done, string.Format(Translations.cmd_execif_executed, expressionText, resultCommand, output)); - } - else - { - return r.SetAndReturn(CmdResult.Status.Done); - } - } - catch (Exception e) - { - handler.Log.Error(string.Format(Translations.cmd_execif_error, e.Message)); - return r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_execif_error_occured, expressionText + " ---> " + resultCommand)); - } - } - } -} diff --git a/MinecraftClient/Commands/ExecMulti.cs b/MinecraftClient/Commands/ExecMulti.cs deleted file mode 100644 index 98c2fe7c7b..0000000000 --- a/MinecraftClient/Commands/ExecMulti.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - class ExecMulti : Command - { - public override string CmdName { get { return "execmulti"; } } - public override string CmdUsage { get { return "execmulti -> -> -> ..."; } } - public override string CmdDesc { get { return Translations.cmd_execmulti_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Argument("Commands", Arguments.GreedyString()) - .Executes(r => HandleCommand(r.Source, Arguments.GetString(r, "Commands")))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int HandleCommand(CmdResult r, string commandsString) - { - McClient handler = CmdResult.currentHandler!; - if (commandsString.Contains("execmulti", StringComparison.OrdinalIgnoreCase) || commandsString.Contains("execif", StringComparison.OrdinalIgnoreCase)) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_execmulti_prevent); - - IEnumerable commands = commandsString.Split("->", StringSplitOptions.TrimEntries) - .ToList() - .FindAll(command => !string.IsNullOrEmpty(command)); - - foreach (string cmd in commands) - { - CmdResult output = new(); - handler.PerformInternalCommand(cmd, ref output); - handler.Log.Info(string.Format(Translations.cmd_execmulti_executed, cmd, string.Format(Translations.cmd_execmulti_result, output))); - } - - return r.SetAndReturn(CmdResult.Status.Done); - } - } -} diff --git a/MinecraftClient/Commands/Exit.cs b/MinecraftClient/Commands/Exit.cs deleted file mode 100644 index d2ac389eb0..0000000000 --- a/MinecraftClient/Commands/Exit.cs +++ /dev/null @@ -1,58 +0,0 @@ -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - public class Exit : Command - { - public override string CmdName { get { return "exit"; } } - public override string CmdUsage { get { return "exit"; } } - public override string CmdDesc { get { return Translations.cmd_exit_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - var exit = dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => DoExit(r.Source, 0)) - .Then(l => l.Argument("ExitCode", Arguments.Integer()) - .Executes(r => DoExit(r.Source, Arguments.GetInteger(r, "ExitCode")))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - - dispatcher.Register(l => l.Literal("quit") - .Executes(r => DoExit(r.Source, 0)) - .Redirect(exit) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoExit(CmdResult r, int code = 0) - { - Program.Exit(code); - return r.SetAndReturn(CmdResult.Status.Done); - } - - internal static string DoExit(string command) - { - Program.Exit(); - return string.Empty; - } - } -} diff --git a/MinecraftClient/Commands/Health.cs b/MinecraftClient/Commands/Health.cs deleted file mode 100644 index 21df0efdb4..0000000000 --- a/MinecraftClient/Commands/Health.cs +++ /dev/null @@ -1,45 +0,0 @@ -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - class Health : Command - { - public override string CmdName { get { return "health"; } } - public override string CmdUsage { get { return "health"; } } - public override string CmdDesc { get { return Translations.cmd_health_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => LogHealth(r.Source)) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int LogHealth(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - return r.SetAndReturn(CmdResult.Status.Done, string.Format(Translations.cmd_health_response, handler.GetHealth(), handler.GetSaturation(), handler.GetLevel(), handler.GetTotalExperience())); - } - } -} diff --git a/MinecraftClient/Commands/Help.cs b/MinecraftClient/Commands/Help.cs deleted file mode 100644 index 18dbaf3e0a..0000000000 --- a/MinecraftClient/Commands/Help.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System; -using System.Text; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - internal class Help : Command - { - public override string CmdName => throw new NotImplementedException(); - public override string CmdDesc => throw new NotImplementedException(); - public override string CmdUsage => throw new NotImplementedException(); - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => - l.Literal("help") - .Executes(r => LogHelp(r.Source, dispatcher)) - ); - } - - private int LogHelp(CmdResult r, CommandDispatcher dispatcher) - { - McClient handler = CmdResult.currentHandler!; - var usage = dispatcher.GetSmartUsage(dispatcher.GetRoot(), CmdResult.Empty); - StringBuilder sb = new(); - foreach (var item in usage) - sb.AppendLine(Settings.Config.Main.Advanced.InternalCmdChar.ToChar() + item.Value); - handler.Log.Info(string.Format(Translations.icmd_list, sb.ToString(), Settings.Config.Main.Advanced.InternalCmdChar.ToChar())); - return r.SetAndReturn(CmdResult.Status.Done); - } - } -} diff --git a/MinecraftClient/Commands/Inventory.cs b/MinecraftClient/Commands/Inventory.cs deleted file mode 100644 index 77c5502126..0000000000 --- a/MinecraftClient/Commands/Inventory.cs +++ /dev/null @@ -1,504 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Inventory; -using MinecraftClient.Tui; - -namespace MinecraftClient.Commands -{ - class Inventory : Command - { - public override string CmdName { get { return "inventory"; } } - public override string CmdUsage { get { return GetBasicUsage(); } } - public override string CmdDesc { get { return Translations.cmd_inventory_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - .Then(l => l.Literal("list") - .Executes(r => GetUsage(r.Source, "list"))) - .Then(l => l.Literal("open") - .Executes(r => GetUsage(r.Source, "open"))) - .Then(l => l.Literal("close") - .Executes(r => GetUsage(r.Source, "close"))) - .Then(l => l.Literal("click") - .Executes(r => GetUsage(r.Source, "click"))) - .Then(l => l.Literal("drop") - .Executes(r => GetUsage(r.Source, "drop"))) - .Then(l => l.Literal("creativegive") - .Executes(r => GetUsage(r.Source, "creativegive"))) - .Then(l => l.Literal("creativedelete") - .Executes(r => GetUsage(r.Source, "creativedelete"))) - .Then(l => l.Literal("inventories") - .Executes(r => GetUsage(r.Source, "inventories"))) - .Then(l => l.Literal("search") - .Executes(r => GetUsage(r.Source, "search"))) - .Then(l => l.Literal("help") - .Executes(r => GetUsage(r.Source, "help"))) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => ListAllInventories(r.Source)) - .Then(l => l.Literal("creativegive") - .Then(l => l.Argument("Slot", MccArguments.InventorySlot()) - .Then(l => l.Argument("ItemType", MccArguments.ItemType()) - .Then(l => l.Argument("Count", Arguments.Integer(min: 1)) - .Executes(r => DoCreativeGive(r.Source, Arguments.GetInteger(r, "Slot"), MccArguments.GetItemType(r, "ItemType"), Arguments.GetInteger(r, "Count"))))))) - .Then(l => l.Literal("creativedelete") - .Then(l => l.Argument("Slot", MccArguments.InventorySlot()) - .Executes(r => DoCreativeDelete(r.Source, Arguments.GetInteger(r, "Slot"))))) - .Then(l => l.Literal("inventories") - .Executes(r => ListAvailableInventories(r.Source))) - .Then(l => l.Literal("search") - .Then(l => l.Argument("ItemType", MccArguments.ItemType()) - .Executes(r => SearchItem(r.Source, MccArguments.GetItemType(r, "ItemType"), null)) - .Then(l => l.Argument("Count", Arguments.Integer(0, 64)) - .Executes(r => SearchItem(r.Source, MccArguments.GetItemType(r, "ItemType"), Arguments.GetInteger(r, "Count")))))) - .Then(l => l.Argument("InventoryId", MccArguments.InventoryId()) - .Executes(r => DoOpenOrList(r.Source, Arguments.GetInteger(r, "InventoryId"))) - .Then(l => l.Literal("open") - .Executes(r => DoOpenTui(r.Source, Arguments.GetInteger(r, "InventoryId")))) - .Then(l => l.Literal("close") - .Executes(r => DoCloseAction(r.Source, Arguments.GetInteger(r, "InventoryId")))) - .Then(l => l.Literal("list") - .Executes(r => DoListAction(r.Source, Arguments.GetInteger(r, "InventoryId"))) - .Then(l => l.Argument("Slot", MccArguments.InventorySlot()) - .Executes(r => DoListAction(r.Source, Arguments.GetInteger(r, "InventoryId"), Arguments.GetInteger(r, "Slot"))))) - .Then(l => l.Literal("click") - .Then(l => l.Argument("Slot", MccArguments.InventorySlot()) - .Executes(r => DoClickAction(r.Source, Arguments.GetInteger(r, "InventoryId"), Arguments.GetInteger(r, "Slot"), WindowActionType.LeftClick)) - .Then(l => l.Argument("Action", MccArguments.InventoryAction()) - .Executes(r => DoClickAction(r.Source, Arguments.GetInteger(r, "InventoryId"), Arguments.GetInteger(r, "Slot"), MccArguments.GetInventoryAction(r, "Action")))))) - .Then(l => l.Literal("drop") - .Then(l => l.Argument("Slot", MccArguments.InventorySlot()) - .Executes(r => DoDropAction(r.Source, Arguments.GetInteger(r, "InventoryId"), Arguments.GetInteger(r, "Slot"), WindowActionType.DropItem)) - .Then(l => l.Literal("all") - .Executes(r => DoDropAction(r.Source, Arguments.GetInteger(r, "InventoryId"), Arguments.GetInteger(r, "Slot"), WindowActionType.DropItemStack)))))) - .Then(l => l.Literal("player") - .Then(l => l.Literal("list") - .Executes(r => DoListAction(r.Source, inventoryId: 0)) - .Then(l => l.Argument("Slot", MccArguments.InventorySlot()) - .Executes(r => DoListAction(r.Source, inventoryId: 0, Arguments.GetInteger(r, "Slot"))))) - .Then(l => l.Literal("click") - .Then(l => l.Argument("Slot", MccArguments.InventorySlot()) - .Executes(r => DoClickAction(r.Source, inventoryId: 0, Arguments.GetInteger(r, "Slot"), WindowActionType.LeftClick)) - .Then(l => l.Argument("Action", MccArguments.InventoryAction()) - .Executes(r => DoClickAction(r.Source, inventoryId: 0, Arguments.GetInteger(r, "Slot"), MccArguments.GetInventoryAction(r, "Action")))))) - .Then(l => l.Literal("drop") - .Then(l => l.Argument("Slot", MccArguments.InventorySlot()) - .Executes(r => DoDropAction(r.Source, inventoryId: 0, Arguments.GetInteger(r, "Slot"), WindowActionType.DropItem)) - .Then(l => l.Literal("all") - .Executes(r => DoDropAction(r.Source, inventoryId: 0, Arguments.GetInteger(r, "Slot"), WindowActionType.DropItemStack)))))) - .Then(l => l.Literal("container") - .Then(l => l.Literal("close") - .Executes(r => DoCloseAction(r.Source, inventoryId: null))) - .Then(l => l.Literal("list") - .Executes(r => DoListAction(r.Source, inventoryId: null)) - .Then(l => l.Argument("Slot", MccArguments.InventorySlot()) - .Executes(r => DoListAction(r.Source, inventoryId: null, Arguments.GetInteger(r, "Slot"))))) - .Then(l => l.Literal("click") - .Then(l => l.Argument("Slot", MccArguments.InventorySlot()) - .Executes(r => DoClickAction(r.Source, inventoryId: null, Arguments.GetInteger(r, "Slot"), WindowActionType.LeftClick)) - .Then(l => l.Argument("Action", MccArguments.InventoryAction()) - .Executes(r => DoClickAction(r.Source, inventoryId: null, Arguments.GetInteger(r, "Slot"), MccArguments.GetInventoryAction(r, "Action")))))) - .Then(l => l.Literal("drop") - .Then(l => l.Argument("Slot", MccArguments.InventorySlot()) - .Executes(r => DoDropAction(r.Source, inventoryId: null, Arguments.GetInteger(r, "Slot"), WindowActionType.DropItem)) - .Then(l => l.Literal("all") - .Executes(r => DoDropAction(r.Source, inventoryId: null, Arguments.GetInteger(r, "Slot"), WindowActionType.DropItemStack)))))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - string usageStr = ' ' + Translations.cmd_inventory_help_usage + ": "; - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "open" => Translations.cmd_inventory_help_open + usageStr + "/inventory open", - "list" => Translations.cmd_inventory_help_list + usageStr + "/inventory > list [slot]", - "close" => Translations.cmd_inventory_help_close + usageStr + "/inventory > close", - "click" => Translations.cmd_inventory_help_click + usageStr + "/inventory > click [left|right|middle|shift|shiftright]\nDefault is left click", - "drop" => Translations.cmd_inventory_help_drop + usageStr + "/inventory > drop [all]\nAll means drop full stack", - "creativegive" => Translations.cmd_inventory_help_creativegive + usageStr + "/inventory creativegive ", - "creativedelete" => Translations.cmd_inventory_help_creativedelete + usageStr + "/inventory creativedelete ", - "inventories" => Translations.cmd_inventory_help_inventories + usageStr + "/inventory inventories", - "search" => Translations.cmd_inventory_help_search + usageStr + "/inventory search [count]", - "help" => GetCmdDescTranslated(), - "action" => Translations.cmd_inventory_help_unknown + GetAvailableActions(), - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int GetMaximumInventoryId(McClient handler) - { - List availableIds = handler.GetInventories().Keys.ToList(); - return availableIds.Max(); // use foreground container - } - - private int ListAllInventories(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetInventoryEnabled()) - { - handler.Log.Info(Translations.extra_inventory_required); - return -1; - } - StringBuilder response = new(); - response.Append(Translations.cmd_inventory_inventories).Append(":\n"); - foreach ((int invId, Container inv) in handler.GetInventories()) - response.AppendLine(String.Format(" #{0}: {1}§8", invId, inv.Title)); - response.Append(CmdUsage); - handler.Log.Info(response.ToString()); - return r.SetAndReturn(CmdResult.Status.Done); - } - - private int DoCreativeGive(CmdResult r, int slot, ItemType itemType, int count) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetInventoryEnabled()) - return r.SetAndReturn(CmdResult.Status.FailNeedInventory); - - if (handler.GetGamemode() == 1) - { - if (handler.DoCreativeGive(slot, itemType, count, null)) - return r.SetAndReturn(CmdResult.Status.Done, string.Format(Translations.cmd_inventory_creative_done, itemType, count, slot)); - else - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_inventory_creative_fail); - } - else - { - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_inventory_need_creative); - } - } - - private int DoCreativeDelete(CmdResult r, int slot) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetInventoryEnabled()) - return r.SetAndReturn(CmdResult.Status.FailNeedInventory); - - if (handler.GetGamemode() == 1) - { - if (handler.DoCreativeGive(slot, ItemType.Null, 0, null)) - return r.SetAndReturn(CmdResult.Status.Done, string.Format(Translations.cmd_inventory_creative_delete, slot)); - else - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_inventory_creative_fail); - } - else - { - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_inventory_need_creative); - } - } - - private int ListAvailableInventories(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetInventoryEnabled()) - return r.SetAndReturn(CmdResult.Status.FailNeedInventory); - - Dictionary inventories = handler.GetInventories(); - List availableIds = inventories.Keys.ToList(); - StringBuilder response = new(); - response.AppendLine(Translations.cmd_inventory_inventories_available); - - foreach (int id in availableIds) - response.AppendLine(String.Format(" #{0} - {1}§8", id, inventories[id].Title)); - - handler.Log.Info(response.ToString()); - return r.SetAndReturn(CmdResult.Status.Done); - } - - private int SearchItem(CmdResult r, ItemType itemType, int? itemCount) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetInventoryEnabled()) - return r.SetAndReturn(CmdResult.Status.FailNeedInventory); - - Dictionary inventories = handler.GetInventories(); - Dictionary> foundItems = new(); - - List availableInventories = inventories.Values.ToList(); - - availableInventories.ForEach(inventory => - { - inventory.Items.Values - .ToList() - .FindAll(item => item.Type == itemType && (!itemCount.HasValue || item.Count == itemCount)) - .ForEach(item => - { - if (!foundItems.ContainsKey(inventory.ID)) - { - foundItems.Add(inventory.ID, new List() { item }); - return; - } - - List invItems = foundItems[inventory.ID]; - invItems.Add(item); - foundItems.Remove(inventory.ID); - foundItems.Add(inventory.ID, invItems); - }); - }); - - if (foundItems.Count == 0) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_inventory_no_found_items); - - StringBuilder response = new(); - - response.AppendLine(Translations.cmd_inventory_found_items + ":"); - - foreach ((int invId, List itemsList) in new SortedDictionary>(foundItems)) - { - if (itemsList.Count > 0) - { - response.AppendLine(String.Format("{0} (#{1}):", inventories[invId].Title, invId)); - - foreach (Item item in itemsList) - response.AppendLine(String.Format("\t- {0}", item.ToFullString())); - - response.AppendLine(" "); - } - } - - handler.Log.Info(response.ToString()); - return r.SetAndReturn(CmdResult.Status.Done); - } - - private int DoCloseAction(CmdResult r, int? inventoryId) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetInventoryEnabled()) - return r.SetAndReturn(CmdResult.Status.FailNeedInventory); - - if (!inventoryId.HasValue) - { - inventoryId = GetMaximumInventoryId(handler); - if (inventoryId == 0) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_inventory_container_not_found); - } - - Container? inventory = handler.GetInventory(inventoryId.Value); - if (inventory is null) - return r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_inventory_not_exist, inventoryId)); - - if (handler.CloseInventory(inventoryId.Value)) - return r.SetAndReturn(CmdResult.Status.Done, string.Format(Translations.cmd_inventory_close, inventoryId)); - else - return r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_inventory_close_fail, inventoryId)); - } - - private int DoListAction(CmdResult r, int? inventoryId, int? slot = null) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetInventoryEnabled()) - return r.SetAndReturn(CmdResult.Status.FailNeedInventory); - - if (!inventoryId.HasValue) - { - inventoryId = GetMaximumInventoryId(handler); - if (inventoryId == 0) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_inventory_container_not_found); - } - - Container? inventory = handler.GetInventory(inventoryId.Value); - if (inventory is null) - return r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_inventory_not_exist, inventoryId)); - - if (slot.HasValue) - { - StringBuilder single = new(); - single.Append(Translations.cmd_inventory_inventory); - single.AppendLine(String.Format(" #{0} - {1}§8", inventoryId, inventory.Title)); - - if (inventory.Items.TryGetValue(slot.Value, out Item? singleItem) && singleItem is not null) - { - int selectedHotbarSlot = handler.GetCurrentSlot() + 1; - bool isHotbar = inventory.IsHotbar(slot.Value, out int hotbar); - string hotbarString = isHotbar ? (hotbar + 1).ToString() : " "; - if ((hotbar + 1) == selectedHotbarSlot) - hotbarString = ">" + hotbarString; - single.AppendLine(String.Format("{0,2} | #{1,-2}: {2}", hotbarString, slot.Value, singleItem.ToFullString())); - } - else - { - single.AppendLine(String.Format("#{0}: _", slot.Value)); - } - - single.Remove(single.Length - 1, 1); // Remove last '\n' - handler.Log.Info(single.ToString()); - return r.SetAndReturn(CmdResult.Status.Done); - } - - StringBuilder response = new(); - response.Append(Translations.cmd_inventory_inventory); - response.AppendLine(String.Format(" #{0} - {1}§8", inventoryId, inventory.Title)); - - string? asciiArt = inventory.Type.GetAsciiArt(); - if (asciiArt is not null && Settings.Config.Main.Advanced.ShowInventoryLayout) - response.AppendLine(asciiArt); - - int selectedHotbar = handler.GetCurrentSlot() + 1; - foreach ((int itemId, Item item) in new SortedDictionary(inventory.Items)) - { - bool isHotbar = inventory.IsHotbar(itemId, out int hotbar); - string hotbarString = isHotbar ? (hotbar + 1).ToString() : " "; - if ((hotbar + 1) == selectedHotbar) - hotbarString = ">" + hotbarString; - response.AppendLine(String.Format("{0,2} | #{1,-2}: {2}", hotbarString, itemId, item.ToFullString())); - } - - if (inventoryId == 0) - response.AppendLine(string.Format(Translations.cmd_inventory_hotbar, (handler.GetCurrentSlot() + 1))); - - response.Remove(response.Length - 1, 1); // Remove last '\n' - handler.Log.Info(response.ToString()); - return r.SetAndReturn(CmdResult.Status.Done); - } - - private int DoClickAction(CmdResult r, int? inventoryId, int slot, WindowActionType actionType) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetInventoryEnabled()) - return r.SetAndReturn(CmdResult.Status.FailNeedInventory); - - if (!inventoryId.HasValue) - { - inventoryId = GetMaximumInventoryId(handler); - if (inventoryId == 0) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_inventory_container_not_found); - } - - Container? inventory = handler.GetInventory(inventoryId.Value); - if (inventory is null) - return r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_inventory_not_exist, inventoryId)); - - string keyName = actionType switch - { - WindowActionType.LeftClick => Translations.cmd_inventory_left, - WindowActionType.RightClick => Translations.cmd_inventory_right, - WindowActionType.MiddleClick => Translations.cmd_inventory_middle, - WindowActionType.ShiftClick => Translations.cmd_inventory_shiftclick, - WindowActionType.ShiftRightClick => Translations.cmd_inventory_shiftrightclick, - _ => "unknown", - }; - - handler.Log.Info(string.Format(Translations.cmd_inventory_clicking, keyName, slot, inventoryId)); - return r.SetAndReturn(handler.DoWindowAction(inventoryId.Value, slot, actionType)); - } - - private int DoDropAction(CmdResult r, int? inventoryId, int slot, WindowActionType actionType) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetInventoryEnabled()) - return r.SetAndReturn(CmdResult.Status.FailNeedInventory); - - if (!inventoryId.HasValue) - { - inventoryId = GetMaximumInventoryId(handler); - if (inventoryId == 0) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_inventory_container_not_found); - } - - Container? inventory = handler.GetInventory(inventoryId.Value); - if (inventory is null) - return r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_inventory_not_exist, inventoryId)); - - // check item exist - if (!inventory.Items.ContainsKey(slot)) - return r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_inventory_no_item, slot)); - - if (handler.DoWindowAction(inventoryId.Value, slot, actionType)) - { - if (actionType == WindowActionType.DropItemStack) - return r.SetAndReturn(CmdResult.Status.Done, string.Format(Translations.cmd_inventory_drop_stack, slot)); - else - return r.SetAndReturn(CmdResult.Status.Done, string.Format(Translations.cmd_inventory_drop, slot)); - } - else - { - return r.SetAndReturn(CmdResult.Status.Fail, "Drop Failed"); - } - } - - - private int DoOpenOrList(CmdResult r, int inventoryId) - { - if (ConsoleIO.Backend is TuiConsoleBackend) - return DoOpenTui(r, inventoryId); - return DoListAction(r, inventoryId); - } - - private int DoOpenTui(CmdResult r, int inventoryId) - { - McClient handler = CmdResult.currentHandler!; - - if (!handler.GetInventoryEnabled()) - return r.SetAndReturn(CmdResult.Status.FailNeedInventory); - - if (ConsoleIO.Backend is not TuiConsoleBackend) - { - handler.Log.Warn(Translations.cmd_inventory_tui_only); - return r.SetAndReturn(CmdResult.Status.Fail); - } - - if (InventoryTuiHost.IsRunning) - { - handler.Log.Warn(Translations.cmd_inventory_tui_already_running); - return r.SetAndReturn(CmdResult.Status.Fail); - } - - var container = handler.GetInventory(inventoryId); - if (container == null) - { - string msg = string.Format(Translations.cmd_inventory_not_exist, inventoryId); - handler.Log.Warn(msg); - return r.SetAndReturn(CmdResult.Status.Fail, msg); - } - - if (!Tui.ContainerViewBase.HasTuiSupport(container.Type)) - { - handler.Log.Warn(string.Format(Translations.cmd_inventory_tui_unsupported_container, inventoryId)); - return r.SetAndReturn(CmdResult.Status.Fail); - } - - handler.Log.Info(string.Format(Translations.cmd_inventory_tui_opening, inventoryId)); - - bool success = InventoryTuiHost.Launch(handler, inventoryId); - if (success) - { - handler.Log.Info(Translations.cmd_inventory_tui_opened); - return r.SetAndReturn(CmdResult.Status.Done); - } - else - { - handler.Log.Warn(Translations.cmd_inventory_tui_launch_failed); - return r.SetAndReturn(CmdResult.Status.Fail); - } - } - - #region Methods for commands help - - private static string GetAvailableActions() - { - return Translations.cmd_inventory_help_available + ": list, close, click, drop, creativegive, creativedelete."; - } - - private static string GetBasicUsage() - { - return Translations.cmd_inventory_help_basic + ": /inventory > ."; - } - - #endregion - } -} diff --git a/MinecraftClient/Commands/List.cs b/MinecraftClient/Commands/List.cs deleted file mode 100644 index 7e991f5535..0000000000 --- a/MinecraftClient/Commands/List.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - public class List : Command - { - public override string CmdName { get { return "list"; } } - public override string CmdUsage { get { return "list"; } } - public override string CmdDesc { get { return Translations.cmd_list_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => DoListPlayers(r.Source)) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoListPlayers(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - return r.SetAndReturn(CmdResult.Status.Done, string.Format(Translations.cmd_list_players, String.Join(", ", handler.GetOnlinePlayers()))); - } - } -} - diff --git a/MinecraftClient/Commands/Log.cs b/MinecraftClient/Commands/Log.cs deleted file mode 100644 index 8cdf3ecff6..0000000000 --- a/MinecraftClient/Commands/Log.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - public class Log : Command - { - public override string CmdName { get { return "log"; } } - public override string CmdUsage { get { return "log "; } } - public override string CmdDesc { get { return Translations.cmd_log_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Argument("String", Arguments.GreedyString()) - .Executes(r => DoLog(r.Source, Arguments.GetString(r, "String")))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoLog(CmdResult r, string command) - { - return r.SetAndReturn(CmdResult.Status.Done, command); - } - } -} diff --git a/MinecraftClient/Commands/Look.cs b/MinecraftClient/Commands/Look.cs deleted file mode 100644 index aedc474be9..0000000000 --- a/MinecraftClient/Commands/Look.cs +++ /dev/null @@ -1,122 +0,0 @@ -using System; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Mapping; -using static MinecraftClient.CommandHandler.CmdResult; - -namespace MinecraftClient.Commands -{ - public class Look : Command - { - public override string CmdName { get { return "look"; } } - public override string CmdUsage { get { return "look "; } } - public override string CmdDesc { get { return Translations.cmd_look_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - .Then(l => l.Literal("direction") - .Executes(r => GetUsage(r.Source, "direction"))) - .Then(l => l.Literal("angle") - .Executes(r => GetUsage(r.Source, "angle"))) - .Then(l => l.Literal("location") - .Executes(r => GetUsage(r.Source, "location"))) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => LogCurrentLooking(r.Source)) - .Then(l => l.Literal("up") - .Executes(r => LookAtDirection(r.Source, Direction.Up))) - .Then(l => l.Literal("down") - .Executes(r => LookAtDirection(r.Source, Direction.Down))) - .Then(l => l.Literal("east") - .Executes(r => LookAtDirection(r.Source, Direction.East))) - .Then(l => l.Literal("west") - .Executes(r => LookAtDirection(r.Source, Direction.West))) - .Then(l => l.Literal("north") - .Executes(r => LookAtDirection(r.Source, Direction.North))) - .Then(l => l.Literal("south") - .Executes(r => LookAtDirection(r.Source, Direction.South))) - .Then(l => l.Argument("Yaw", Arguments.Float()) - .Then(l => l.Argument("Pitch", Arguments.Float()) - .Executes(r => LookAtAngle(r.Source, Arguments.GetFloat(r, "Yaw"), Arguments.GetFloat(r, "Pitch"))))) - .Then(l => l.Argument("Location", MccArguments.Location()) - .Executes(r => LookAtLocation(r.Source, MccArguments.GetLocation(r, "Location")))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "direction" => GetCmdDescTranslated(), - "angle" => GetCmdDescTranslated(), - "location" => GetCmdDescTranslated(), - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int LogCurrentLooking(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - const double maxDistance = 8.0; - (bool hasBlock, Location target, Block block) = RaycastHelper.RaycastBlock(handler, maxDistance, false); - if (!hasBlock) - { - return r.SetAndReturn(Status.Fail, string.Format(Translations.cmd_look_noinspection, maxDistance)); - } - else - { - Location current = handler.GetCurrentLocation(), target_center = target.ToCenter(); - return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_look_inspection, block.Type, target.X, target.Y, target.Z, - current.Distance(target_center), current.EyesLocation().Distance(target_center))); - } - } - - private int LookAtDirection(CmdResult r, Direction direction) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - handler.UpdateLocation(handler.GetCurrentLocation(), direction); - handler.SendLocationUpdate(); - return r.SetAndReturn(Status.Done, "Looking " + direction.ToString()); - } - - private int LookAtAngle(CmdResult r, float yaw, float pitch) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - handler.UpdateLocation(handler.GetCurrentLocation(), yaw, pitch); - handler.SendLocationUpdate(); - return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_look_at, yaw.ToString("0.00"), pitch.ToString("0.00"))); - } - - private int LookAtLocation(CmdResult r, Location location) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - Location current = handler.GetCurrentLocation(); - handler.UpdateLocation(current, location); - handler.SendLocationUpdate(); - return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_look_block, location)); - } - } -} diff --git a/MinecraftClient/Commands/Minimap.cs b/MinecraftClient/Commands/Minimap.cs deleted file mode 100644 index 0b6ca00f54..0000000000 --- a/MinecraftClient/Commands/Minimap.cs +++ /dev/null @@ -1,284 +0,0 @@ -using System; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Tui; -using Avalonia.Threading; -using static MinecraftClient.CommandHandler.CmdResult; - -namespace MinecraftClient.Commands -{ - class Minimap : Command - { - public override string CmdName => "minimap"; - public override string CmdUsage => "minimap [on|off] | minimap zoom [in|out|<1-16>] | minimap names [players|hostile|neutral|passive] [on|off] | minimap names [all_on|all_off] | minimap position [top_left|top_right|center|bottom_left|bottom_right] | minimap cave [auto|on|off]"; - public override string CmdDesc => Translations.cmd_minimap_desc; - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => DoToggle(r.Source)) - .Then(l => l.Literal("on") - .Executes(r => DoOn(r.Source))) - .Then(l => l.Literal("off") - .Executes(r => DoOff(r.Source))) - .Then(l => l.Literal("zoom") - .Executes(r => DoZoomInfo(r.Source)) - .Then(l => l.Literal("in") - .Executes(r => DoZoomIn(r.Source))) - .Then(l => l.Literal("out") - .Executes(r => DoZoomOut(r.Source))) - .Then(l => l.Argument("level", Arguments.Integer(MinimapControl.MinZoom, MinimapControl.MaxZoom)) - .Executes(r => DoZoomSet(r.Source, Arguments.GetInteger(r, "level"))))) - .Then(l => l.Literal("names") - .Executes(r => DoNamesInfo(r.Source)) - .Then(l => l.Literal("all_on") - .Executes(r => DoNamesAll(r.Source, true))) - .Then(l => l.Literal("all_off") - .Executes(r => DoNamesAll(r.Source, false))) - .Then(l => l.Literal("players") - .Executes(r => DoNamesCatInfo(r.Source, MobCategory.Player)) - .Then(l => l.Literal("on") - .Executes(r => DoNamesCatSet(r.Source, MobCategory.Player, true))) - .Then(l => l.Literal("off") - .Executes(r => DoNamesCatSet(r.Source, MobCategory.Player, false)))) - .Then(l => l.Literal("hostile") - .Executes(r => DoNamesCatInfo(r.Source, MobCategory.Hostile)) - .Then(l => l.Literal("on") - .Executes(r => DoNamesCatSet(r.Source, MobCategory.Hostile, true))) - .Then(l => l.Literal("off") - .Executes(r => DoNamesCatSet(r.Source, MobCategory.Hostile, false)))) - .Then(l => l.Literal("neutral") - .Executes(r => DoNamesCatInfo(r.Source, MobCategory.Neutral)) - .Then(l => l.Literal("on") - .Executes(r => DoNamesCatSet(r.Source, MobCategory.Neutral, true))) - .Then(l => l.Literal("off") - .Executes(r => DoNamesCatSet(r.Source, MobCategory.Neutral, false)))) - .Then(l => l.Literal("passive") - .Executes(r => DoNamesCatInfo(r.Source, MobCategory.Passive)) - .Then(l => l.Literal("on") - .Executes(r => DoNamesCatSet(r.Source, MobCategory.Passive, true))) - .Then(l => l.Literal("off") - .Executes(r => DoNamesCatSet(r.Source, MobCategory.Passive, false))))) - .Then(l => l.Literal("position") - .Executes(r => DoPositionInfo(r.Source)) - .Then(l => l.Literal("top_left") - .Executes(r => DoPositionSet(r.Source, MinimapPosition.top_left))) - .Then(l => l.Literal("top_right") - .Executes(r => DoPositionSet(r.Source, MinimapPosition.top_right))) - .Then(l => l.Literal("center") - .Executes(r => DoPositionSet(r.Source, MinimapPosition.center))) - .Then(l => l.Literal("bottom_left") - .Executes(r => DoPositionSet(r.Source, MinimapPosition.bottom_left))) - .Then(l => l.Literal("bottom_right") - .Executes(r => DoPositionSet(r.Source, MinimapPosition.bottom_right)))) - .Then(l => l.Literal("cave") - .Executes(r => DoCaveInfo(r.Source)) - .Then(l => l.Literal("auto") - .Executes(r => DoCaveSet(r.Source, CaveModeOption.auto))) - .Then(l => l.Literal("on") - .Executes(r => DoCaveSet(r.Source, CaveModeOption.on))) - .Then(l => l.Literal("off") - .Executes(r => DoCaveSet(r.Source, CaveModeOption.off)))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help")?.GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string _) => - r.SetAndReturn(GetCmdDescTranslated()); - - private static MainTuiView? GetTuiView(CmdResult r) - { - if (ConsoleIO.Backend is not TuiConsoleBackend) - { - r.SetAndReturn(Status.Fail, Translations.cmd_minimap_tui_only); - return null; - } - return TuiConsoleBackend.Instance?.GetView(); - } - - private static int DoToggle(CmdResult r) - { - var view = GetTuiView(r); - if (view is null) return (int)r.status; - - bool wasVisible = view.IsMinimapVisible; - Dispatcher.UIThread.Post(() => view.ToggleMinimap()); - string msg = wasVisible - ? Translations.cmd_minimap_disabled - : Translations.cmd_minimap_enabled; - return r.SetAndReturn(Status.Done, msg); - } - - private static int DoOn(CmdResult r) - { - var view = GetTuiView(r); - if (view is null) return (int)r.status; - - Dispatcher.UIThread.Post(() => view.ShowMinimap()); - return r.SetAndReturn(Status.Done, Translations.cmd_minimap_enabled); - } - - private static int DoOff(CmdResult r) - { - var view = GetTuiView(r); - if (view is null) return (int)r.status; - - Dispatcher.UIThread.Post(() => view.HideMinimap()); - return r.SetAndReturn(Status.Done, Translations.cmd_minimap_disabled); - } - - private static int DoZoomInfo(CmdResult r) - { - var view = GetTuiView(r); - if (view is null) return (int)r.status; - - int current = view.GetMinimapZoom(); - return r.SetAndReturn(Status.Done, - string.Format(Translations.cmd_minimap_zoom_current, current, MinimapControl.MaxZoom)); - } - - private static int DoZoomIn(CmdResult r) - { - var view = GetTuiView(r); - if (view is null) return (int)r.status; - - int newLevel = Math.Max(view.GetMinimapZoom() - 1, MinimapControl.MinZoom); - Dispatcher.UIThread.Post(() => view.SetMinimapZoom(newLevel)); - return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_minimap_zoom_set, newLevel)); - } - - private static int DoZoomOut(CmdResult r) - { - var view = GetTuiView(r); - if (view is null) return (int)r.status; - - int newLevel = Math.Min(view.GetMinimapZoom() + 1, MinimapControl.MaxZoom); - Dispatcher.UIThread.Post(() => view.SetMinimapZoom(newLevel)); - return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_minimap_zoom_set, newLevel)); - } - - private static int DoZoomSet(CmdResult r, int level) - { - var view = GetTuiView(r); - if (view is null) return (int)r.status; - - Dispatcher.UIThread.Post(() => view.SetMinimapZoom(level)); - return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_minimap_zoom_set, level)); - } - - private static int DoNamesInfo(CmdResult r) - { - var view = GetTuiView(r); - if (view is null) return (int)r.status; - - var nc = view.GetMinimapNameConfig(); - string status = string.Format(Translations.cmd_minimap_names_status, - BoolStr(nc.Players), BoolStr(nc.Hostile), BoolStr(nc.Neutral), BoolStr(nc.Passive)); - return r.SetAndReturn(Status.Done, status); - } - - private static int DoNamesAll(CmdResult r, bool on) - { - var view = GetTuiView(r); - if (view is null) return (int)r.status; - - Dispatcher.UIThread.Post(() => - { - view.GetMinimapNameConfig().SetAll(on); - view.SyncMinimapNameConfig(); - }); - string msg = on ? Translations.cmd_minimap_names_all_on : Translations.cmd_minimap_names_all_off; - return r.SetAndReturn(Status.Done, msg); - } - - private static int DoNamesCatInfo(CmdResult r, MobCategory cat) - { - var view = GetTuiView(r); - if (view is null) return (int)r.status; - - var nc = view.GetMinimapNameConfig(); - bool val = cat switch - { - MobCategory.Player => nc.Players, - MobCategory.Hostile => nc.Hostile, - MobCategory.Neutral => nc.Neutral, - MobCategory.Passive => nc.Passive, - _ => false, - }; - return r.SetAndReturn(Status.Done, - string.Format(Translations.cmd_minimap_names_cat, cat, BoolStr(val))); - } - - private static int DoNamesCatSet(CmdResult r, MobCategory cat, bool on) - { - var view = GetTuiView(r); - if (view is null) return (int)r.status; - - Dispatcher.UIThread.Post(() => - { - var nc = view.GetMinimapNameConfig(); - switch (cat) - { - case MobCategory.Player: nc.Players = on; break; - case MobCategory.Hostile: nc.Hostile = on; break; - case MobCategory.Neutral: nc.Neutral = on; break; - case MobCategory.Passive: nc.Passive = on; break; - } - view.SyncMinimapNameConfig(); - }); - return r.SetAndReturn(Status.Done, - string.Format(Translations.cmd_minimap_names_cat_set, cat, BoolStr(on))); - } - - private static int DoPositionInfo(CmdResult r) - { - var view = GetTuiView(r); - if (view is null) return (int)r.status; - - var pos = view.GetMinimapPosition(); - return r.SetAndReturn(Status.Done, - string.Format(Translations.cmd_minimap_position_current, pos)); - } - - private static int DoPositionSet(CmdResult r, MinimapPosition pos) - { - var view = GetTuiView(r); - if (view is null) return (int)r.status; - - Dispatcher.UIThread.Post(() => view.SetMinimapPosition(pos)); - return r.SetAndReturn(Status.Done, - string.Format(Translations.cmd_minimap_position_set, pos)); - } - - private static int DoCaveInfo(CmdResult r) - { - var view = GetTuiView(r); - if (view is null) return (int)r.status; - - var mode = view.GetMinimapCaveMode(); - return r.SetAndReturn(Status.Done, - string.Format(Translations.cmd_minimap_cave_current, mode)); - } - - private static int DoCaveSet(CmdResult r, CaveModeOption mode) - { - var view = GetTuiView(r); - if (view is null) return (int)r.status; - - Dispatcher.UIThread.Post(() => view.SetMinimapCaveMode(mode)); - return r.SetAndReturn(Status.Done, - string.Format(Translations.cmd_minimap_cave_set, mode)); - } - - private static string BoolStr(bool v) => v ? "ON" : "OFF"; - } -} diff --git a/MinecraftClient/Commands/Move.cs b/MinecraftClient/Commands/Move.cs deleted file mode 100644 index fa94a06b44..0000000000 --- a/MinecraftClient/Commands/Move.cs +++ /dev/null @@ -1,202 +0,0 @@ -using System; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Mapping; -using static MinecraftClient.CommandHandler.CmdResult; - -namespace MinecraftClient.Commands -{ - public class Move : Command - { - public override string CmdName { get { return "move"; } } - public override string CmdUsage { get { return "move [-f]"; } } - public override string CmdDesc { get { return Translations.cmd_move_desc + " \"-f\": " + Translations.cmd_move_desc_force; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - .Then(l => l.Literal("enable") - .Executes(r => GetUsage(r.Source, "enable"))) - .Then(l => l.Literal("gravity") - .Executes(r => GetUsage(r.Source, "gravity"))) - .Then(l => l.Literal("direction") - .Executes(r => GetUsage(r.Source, "direction"))) - .Then(l => l.Literal("center") - .Executes(r => GetUsage(r.Source, "center"))) - .Then(l => l.Literal("get") - .Executes(r => GetUsage(r.Source, "get"))) - .Then(l => l.Literal("location") - .Executes(r => GetUsage(r.Source, "location"))) - .Then(l => l.Literal("-f") - .Executes(r => GetUsage(r.Source, "-f"))) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Literal("on") - .Executes(r => SetMovementEnable(r.Source, enable: true))) - .Then(l => l.Literal("off") - .Executes(r => SetMovementEnable(r.Source, enable: false))) - .Then(l => l.Literal("gravity") - .Executes(r => SetGravityEnable(r.Source, enable: null)) - .Then(l => l.Literal("on") - .Executes(r => SetGravityEnable(r.Source, enable: true))) - .Then(l => l.Literal("off") - .Executes(r => SetGravityEnable(r.Source, enable: false)))) - .Then(l => l.Literal("up") - .Executes(r => MoveOnDirection(r.Source, Direction.Up, false)) - .Then(l => l.Literal("-f") - .Executes(r => MoveOnDirection(r.Source, Direction.Up, true)))) - .Then(l => l.Literal("down") - .Executes(r => MoveOnDirection(r.Source, Direction.Down, false)) - .Then(l => l.Literal("-f") - .Executes(r => MoveOnDirection(r.Source, Direction.Down, true)))) - .Then(l => l.Literal("east") - .Executes(r => MoveOnDirection(r.Source, Direction.East, false)) - .Then(l => l.Literal("-f") - .Executes(r => MoveOnDirection(r.Source, Direction.East, true)))) - .Then(l => l.Literal("west") - .Executes(r => MoveOnDirection(r.Source, Direction.West, false)) - .Then(l => l.Literal("-f") - .Executes(r => MoveOnDirection(r.Source, Direction.West, true)))) - .Then(l => l.Literal("north") - .Executes(r => MoveOnDirection(r.Source, Direction.North, false)) - .Then(l => l.Literal("-f") - .Executes(r => MoveOnDirection(r.Source, Direction.North, true)))) - .Then(l => l.Literal("south") - .Executes(r => MoveOnDirection(r.Source, Direction.South, false)) - .Then(l => l.Literal("-f") - .Executes(r => MoveOnDirection(r.Source, Direction.South, true)))) - .Then(l => l.Literal("center") - .Executes(r => MoveToCenter(r.Source))) - .Then(l => l.Literal("get") - .Executes(r => GetCurrentLocation(r.Source))) - .Then(l => l.Argument("location", MccArguments.Location()) - .Executes(r => MoveToLocation(r.Source, MccArguments.GetLocation(r, "location"), false)) - .Then(l => l.Literal("-f") - .Executes(r => MoveToLocation(r.Source, MccArguments.GetLocation(r, "location"), true)))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "enable" => GetCmdDescTranslated(), - "gravity" => GetCmdDescTranslated(), - "direction" => GetCmdDescTranslated(), - "center" => GetCmdDescTranslated(), - "get" => GetCmdDescTranslated(), - "location" => GetCmdDescTranslated(), - "-f" => GetCmdDescTranslated(), - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int SetMovementEnable(CmdResult r, bool enable) - { - McClient handler = CmdResult.currentHandler!; - if (enable) - { - handler.SetTerrainEnabled(true); - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_move_enable); - } - else - { - handler.SetTerrainEnabled(false); - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_move_disable); - } - } - - private int SetGravityEnable(CmdResult r, bool? enable) - { - McClient handler = CmdResult.currentHandler!; - if (enable.HasValue) - Settings.InternalConfig.GravityEnabled = enable.Value; - - if (Settings.InternalConfig.GravityEnabled) - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_move_gravity_enabled); - else - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_move_gravity_disabled); - } - - private int GetCurrentLocation(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - return r.SetAndReturn(Status.Done, handler.GetCurrentLocation().ToString()); - } - - private int MoveToCenter(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - Location current = handler.GetCurrentLocation(); - Location currentCenter = new(Math.Floor(current.X) + 0.5, current.Y, Math.Floor(current.Z) + 0.5); - handler.MoveTo(currentCenter, allowDirectTeleport: true); - return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_move_walk, currentCenter, current)); - } - - private int MoveOnDirection(CmdResult r, Direction direction, bool takeRisk) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - Location goal = Movement.Move(handler.GetCurrentLocation(), direction); - - if (!Movement.CheckChunkLoading(handler.GetWorld(), handler.GetCurrentLocation(), goal)) - return r.SetAndReturn(Status.FailChunkNotLoad, string.Format(Translations.cmd_move_chunk_not_loaded, goal.X, goal.Y, goal.Z)); - - if (Movement.CanMove(handler.GetWorld(), handler.GetCurrentLocation(), direction)) - { - if (handler.MoveTo(goal, allowUnsafe: takeRisk)) - return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_move_moving, direction.ToString())); - else - return r.SetAndReturn(Status.Fail, takeRisk ? Translations.cmd_move_dir_fail : Translations.cmd_move_suggestforce); - } - else - { - return r.SetAndReturn(Status.Fail, Translations.cmd_move_dir_fail); - } - } - - private int MoveToLocation(CmdResult r, Location goal, bool takeRisk) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - Location current = handler.GetCurrentLocation(), currentCenter = current.ToCenter(); - goal.ToAbsolute(current); - - if (!Movement.CheckChunkLoading(handler.GetWorld(), current, goal)) - return r.SetAndReturn(Status.FailChunkNotLoad, string.Format(Translations.cmd_move_chunk_not_loaded, goal.X, goal.Y, goal.Z)); - - if (takeRisk || Movement.PlayerFitsHere(handler.GetWorld(), goal)) - { - if (current.ToFloor() == goal.ToFloor()) - handler.MoveTo(goal, allowDirectTeleport: true); - else if (!handler.MoveTo(goal, allowUnsafe: takeRisk)) - return r.SetAndReturn(Status.Fail, takeRisk ? string.Format(Translations.cmd_move_fail, goal) : string.Format(Translations.cmd_move_suggestforce, goal)); - return r.SetAndReturn(Status.Done, string.Format(Translations.cmd_move_walk, goal, current)); - } - else - { - return r.SetAndReturn(Status.Fail, string.Format(Translations.cmd_move_suggestforce, goal)); - } - } - } -} diff --git a/MinecraftClient/Commands/NameItem.cs b/MinecraftClient/Commands/NameItem.cs deleted file mode 100644 index 91f32e61f1..0000000000 --- a/MinecraftClient/Commands/NameItem.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System.Linq; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Commands -{ - public class NameItem : Command - { - public override string CmdName => "nameitem"; - public override string CmdUsage => "nameitem "; - - public override string CmdDesc => Translations.cmd_nameitem_desc; - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Argument("any", Arguments.GreedyString()) - .Executes(r => DoSetItemName(r.Source, Arguments.GetString(r, "any")))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoSetItemName(CmdResult r, string itemName) - { - var handler = CmdResult.currentHandler!; - - if (itemName.Trim().Length == 0) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_nameitem_item_name_empty); - - var currentInventory = handler.GetInventories().Count == 0 - ? null - : handler.GetInventories().Values.ToList().Last(); - - if (currentInventory is not { Type: ContainerType.Anvil }) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_nameitem_no_anvil_inventory_open); - - if (currentInventory.Items[0].IsEmpty) - return r.SetAndReturn(CmdResult.Status.Fail, - Translations.cmd_nameitem_first_slot_empty); - - return handler.SendRenameItem(itemName) - ? r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_nameitem_successful) - : r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_nameitem_failed); - } - } -} \ No newline at end of file diff --git a/MinecraftClient/Commands/RecipeBook.cs b/MinecraftClient/Commands/RecipeBook.cs deleted file mode 100644 index 4cf0d873f6..0000000000 --- a/MinecraftClient/Commands/RecipeBook.cs +++ /dev/null @@ -1,98 +0,0 @@ -using System.Text; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - public class RecipeBook : Command - { - public override string CmdName => "recipebook"; - public override string CmdUsage => "recipebook [recipe id]"; - public override string CmdDesc => Translations.cmd_recipebook_desc; - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - .Then(l => l.Literal("list") - .Executes(r => GetUsage(r.Source, "list"))) - .Then(l => l.Literal("craft") - .Executes(r => GetUsage(r.Source, "craft"))) - .Then(l => l.Literal("craftall") - .Executes(r => GetUsage(r.Source, "craftall"))) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Literal("list") - .Executes(r => ListRecipes(r.Source))) - .Then(l => l.Literal("craft") - .Then(l => l.Argument("RecipeId", Arguments.String()) - .Executes(r => CraftRecipe(r.Source, Arguments.GetString(r, "RecipeId"), makeAll: false)))) - .Then(l => l.Literal("craftall") - .Then(l => l.Argument("RecipeId", Arguments.String()) - .Executes(r => CraftRecipe(r.Source, Arguments.GetString(r, "RecipeId"), makeAll: true)))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "list" => GetCmdDescTranslated(), - "craft" => GetCmdDescTranslated(), - "craftall" => GetCmdDescTranslated(), - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int ListRecipes(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetInventoryEnabled()) - return r.SetAndReturn(CmdResult.Status.FailNeedInventory); - - RecipeBookRecipeEntry[] recipes = handler.GetUnlockedRecipes(); - if (recipes.Length == 0) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_recipebook_no_recipes); - - StringBuilder response = new(); - response.AppendLine(Translations.cmd_recipebook_list); - foreach (RecipeBookRecipeEntry recipe in recipes) - response.AppendLine("- " + recipe.DisplayText); - - handler.Log.Info(response.ToString().TrimEnd()); - return r.SetAndReturn(CmdResult.Status.Done); - } - - private int CraftRecipe(CmdResult r, string recipeId, bool makeAll) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetInventoryEnabled()) - return r.SetAndReturn(CmdResult.Status.FailNeedInventory); - - if (string.IsNullOrWhiteSpace(recipeId)) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_recipebook_recipe_id_empty); - - if (handler.GetProtocolVersion() < Protocol.Handlers.Protocol18Handler.MC_1_13_Version) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_recipebook_unsupported); - - if (handler.GetActiveRecipeBookInventory() is null) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_recipebook_no_active_inventory); - - string normalizedRecipeId = McClient.NormalizeRecipeArgument(recipeId, handler.GetProtocolVersion()); - string successMessage = string.Format(makeAll ? Translations.cmd_recipebook_craftall_sent : Translations.cmd_recipebook_craft_sent, normalizedRecipeId); - - return handler.SendPlaceRecipe(recipeId, makeAll) - ? r.SetAndReturn(CmdResult.Status.Done, successMessage) - : r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_recipebook_craft_failed, normalizedRecipeId)); - } - } -} diff --git a/MinecraftClient/Commands/Reco.cs b/MinecraftClient/Commands/Reco.cs deleted file mode 100644 index 05fbe6f617..0000000000 --- a/MinecraftClient/Commands/Reco.cs +++ /dev/null @@ -1,91 +0,0 @@ -using System; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - public class Reco : Command - { - public override string CmdName { get { return "reco"; } } - public override string CmdUsage { get { return "reco [account]"; } } - public override string CmdDesc { get { return Translations.cmd_reco_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => DoReconnect(r.Source, string.Empty)) - .Then(l => l.Argument("AccountNick", MccArguments.AccountNick()) - .Executes(r => DoReconnect(r.Source, Arguments.GetString(r, "AccountNick")))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoReconnect(CmdResult r, string account) - { - RestartSettingsSnapshot previousSettings = Program.CaptureRestartSettings(); - if (!string.IsNullOrWhiteSpace(account)) - { - account = account.Trim(); - if (!Settings.Config.Main.Advanced.SetAccount(account)) - return r.SetAndReturn(CmdResult.Status.Fail, string.Format(Translations.cmd_connect_unknown, account)); - } - - if (Program.TryRestart( - Program.CurrentConnectionAttempt, - TimeSpan.Zero, - keepAccountAndServerSettings: true, - replaceUntilCommit: true)) - { - return r.SetAndReturn(CmdResult.Status.Done); - } - - Program.RestoreRestartSettings(previousSettings); - return r.SetAndReturn(CmdResult.Status.Fail); - } - - internal static string DoReconnect(string command) - { - RestartSettingsSnapshot previousSettings = Program.CaptureRestartSettings(); - string[] args = GetArgs(command); - if (args.Length > 0) - { - string account = args[0].Trim(); - if (!Settings.Config.Main.Advanced.SetAccount(account)) - { - return string.Format(Translations.cmd_connect_unknown, account); - } - } - - if (Program.TryRestart( - Program.CurrentConnectionAttempt, - TimeSpan.Zero, - keepAccountAndServerSettings: true, - replaceUntilCommit: true)) - { - return string.Empty; - } - - Program.RestoreRestartSettings(previousSettings); - return Translations.general_fail; - } - } -} diff --git a/MinecraftClient/Commands/Reload.cs b/MinecraftClient/Commands/Reload.cs deleted file mode 100644 index 953591595b..0000000000 --- a/MinecraftClient/Commands/Reload.cs +++ /dev/null @@ -1,52 +0,0 @@ -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - class Reload : Command - { - public override string CmdName { get { return "reload"; } } - public override string CmdUsage { get { return "reload"; } } - public override string CmdDesc { get { return Translations.cmd_reload_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => DoReload(r.Source)) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoReload(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - handler.Log.Info(Translations.cmd_reload_started); - handler.ReloadSettings(); - handler.Log.Warn(Translations.cmd_reload_warning1); - handler.Log.Warn(Translations.cmd_reload_warning2); - handler.Log.Warn(Translations.cmd_reload_warning3); - handler.Log.Warn(Translations.cmd_reload_warning4); - - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_reload_finished); - } - } -} diff --git a/MinecraftClient/Commands/Respawn.cs b/MinecraftClient/Commands/Respawn.cs deleted file mode 100644 index f8dd542a88..0000000000 --- a/MinecraftClient/Commands/Respawn.cs +++ /dev/null @@ -1,46 +0,0 @@ -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - public class Respawn : Command - { - public override string CmdName { get { return "respawn"; } } - public override string CmdUsage { get { return "respawn"; } } - public override string CmdDesc { get { return Translations.cmd_respawn_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => DoRespawn(r.Source)) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoRespawn(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - handler.SendRespawnPacket(); - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_respawn_done); - } - } -} diff --git a/MinecraftClient/Commands/Script.cs b/MinecraftClient/Commands/Script.cs deleted file mode 100644 index 37a8da80cd..0000000000 --- a/MinecraftClient/Commands/Script.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Collections.Generic; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - public class Script : Command - { - public override string CmdName { get { return "script"; } } - public override string CmdUsage { get { return "script "; } } - public override string CmdDesc { get { return Translations.cmd_script_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Argument("Script", MccArguments.ScriptName()) - .Executes(r => DoExecuteScript(r.Source, Arguments.GetString(r, "Script"), null))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoExecuteScript(CmdResult r, string command, Dictionary? localVars) - { - McClient handler = CmdResult.currentHandler!; - handler.BotLoad(new ChatBots.Script(command.Trim(), null, localVars)); - return r.SetAndReturn(CmdResult.Status.Done); - } - } -} diff --git a/MinecraftClient/Commands/Send.cs b/MinecraftClient/Commands/Send.cs deleted file mode 100644 index cf6964eca4..0000000000 --- a/MinecraftClient/Commands/Send.cs +++ /dev/null @@ -1,44 +0,0 @@ -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - public class Send : Command - { - public override string CmdName { get { return "send"; } } - public override string CmdUsage { get { return "send "; } } - public override string CmdDesc { get { return Translations.cmd_send_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Argument("any", Arguments.GreedyString()) - .Executes(r => DoSendText(r.Source, Arguments.GetString(r, "any")))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoSendText(CmdResult r, string command) - { - McClient handler = CmdResult.currentHandler!; - handler.SendText(command); - return r.SetAndReturn(CmdResult.Status.Done); - } - } -} diff --git a/MinecraftClient/Commands/Set.cs b/MinecraftClient/Commands/Set.cs deleted file mode 100644 index 75d8bbd0fb..0000000000 --- a/MinecraftClient/Commands/Set.cs +++ /dev/null @@ -1,60 +0,0 @@ -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - public class Set : Command - { - public override string CmdName { get { return "set"; } } - public override string CmdUsage { get { return "set varname=value"; } } - public override string CmdDesc { get { return Translations.cmd_set_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Argument("Expression", Arguments.GreedyString()) - .Executes(r => DoSetVar(r.Source, Arguments.GetString(r, "Expression")))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoSetVar(CmdResult r, string command) - { - string[] temp = command.Trim().Split('='); - if (temp.Length > 1) - { - if (Settings.Config.AppVar.SetVar(temp[0], command[(temp[0].Length + 1)..])) - { - return r.SetAndReturn(CmdResult.Status.Done); //Success - } - else - { - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_set_format); - } - } - else - { - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_set_format); - } - } - } -} diff --git a/MinecraftClient/Commands/SetRnd.cs b/MinecraftClient/Commands/SetRnd.cs deleted file mode 100644 index c792b5d726..0000000000 --- a/MinecraftClient/Commands/SetRnd.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; -using System.Collections.Generic; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - class SetRnd : Command - { - public override string CmdName { get { return "setrnd"; } } - public override string CmdUsage { get { return Translations.cmd_setrnd_format; } } - public override string CmdDesc { get { return Translations.cmd_setrnd_desc; } } - private static readonly Random rand = new(); - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - .Then(l => l.Literal("range") - .Executes(r => GetUsage(r.Source, "range"))) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Argument("VarName", Arguments.String()) - .Then(l => l.Argument("Min", Arguments.Long()) - .Then(l => l.Literal("to") - .Then(l => l.Argument("Max", Arguments.Long()) - .Executes(r => DoSetRnd(r.Source, Arguments.GetString(r, "VarName"), Arguments.GetLong(r, "Min"), Arguments.GetLong(r, "Max")))))) - .Then(l => l.Argument("Expression", Arguments.GreedyString()) - .Executes(r => DoSetRnd(r.Source, Arguments.GetString(r, "VarName"), Arguments.GetString(r, "Expression"))))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "range" => GetCmdDescTranslated(), - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoSetRnd(CmdResult r, string var, string argString) - { - // process all arguments similar to regular terminals with quotes and escaping - List values = ParseCommandLine(argString); - - // create a variable or set it to one of the values - if (values.Count > 0 && Settings.Config.AppVar.SetVar(var, values[rand.Next(0, values.Count)])) - return r.SetAndReturn(CmdResult.Status.Done, string.Format("Set %{0}% to {1}.", var, Settings.Config.AppVar.GetVar(var))); - else - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_setrndstr_format); - } - - private int DoSetRnd(CmdResult r, string var, long min, long max) - { - // switch the values if they were entered in the wrong way - if (max < min) - (max, min) = (min, max); - - // create a variable or set it to num1 <= varlue < num2 - if (Settings.Config.AppVar.SetVar(var, rand.NextInt64(min, max))) - return r.SetAndReturn(CmdResult.Status.Fail, string.Format("Set %{0}% to {1}.", var, Settings.Config.AppVar.GetVar(var))); - else - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_setrndstr_format); - } - } -} diff --git a/MinecraftClient/Commands/Sneak.cs b/MinecraftClient/Commands/Sneak.cs deleted file mode 100644 index f6538736b2..0000000000 --- a/MinecraftClient/Commands/Sneak.cs +++ /dev/null @@ -1,59 +0,0 @@ -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - public class Sneak : Command - { - public override string CmdName => "sneak"; - public override string CmdUsage => "sneak"; - public override string CmdDesc => Translations.cmd_sneak_desc; - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => DoSneak(r.Source)) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoSneak(CmdResult r) - { - var handler = CmdResult.currentHandler!; - - if (handler.IsSneaking) - { - if (!handler.SendEntityAction(Protocol.EntityActionType.StopSneaking)) - return r.SetAndReturn(CmdResult.Status.Fail); - - handler.IsSneaking = false; - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_sneak_off); - } - - if (!handler.SendEntityAction(Protocol.EntityActionType.StartSneaking)) - return r.SetAndReturn(CmdResult.Status.Fail); - - handler.IsSneaking = true; - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_sneak_on); - } - } -} \ No newline at end of file diff --git a/MinecraftClient/Commands/Tab.cs b/MinecraftClient/Commands/Tab.cs deleted file mode 100644 index b5ea5c36a3..0000000000 --- a/MinecraftClient/Commands/Tab.cs +++ /dev/null @@ -1,50 +0,0 @@ -using Avalonia.Threading; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Tui; - -namespace MinecraftClient.Commands -{ - public class Tab : Command - { - public override string CmdName => "tab"; - public override string CmdUsage => "tab"; - public override string CmdDesc => Translations.cmd_tab_desc; - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source))) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => ShowTab(r.Source)) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r) => r.SetAndReturn(GetCmdDescTranslated()); - - private static int ShowTab(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - var snapshot = handler.GetTabListSnapshot(); - - if (ConsoleIO.Backend is TuiConsoleBackend) - { - var view = TuiConsoleBackend.Instance?.GetView(); - if (view is null) - return r.SetAndReturn(CmdResult.Status.Fail, Translations.cmd_tab_tui_unavailable); - - Dispatcher.UIThread.Post(() => view.ShowOverlay(new TabListOverlay(handler))); - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_tab_tui_opened); - } - - return r.SetAndReturn(CmdResult.Status.Done, TabListFormatter.Render(snapshot)); - } - } -} diff --git a/MinecraftClient/Commands/Teams.cs b/MinecraftClient/Commands/Teams.cs deleted file mode 100644 index af7a06d1cb..0000000000 --- a/MinecraftClient/Commands/Teams.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Mapping; - -namespace MinecraftClient.Commands -{ - public class Teams : Command - { - public override string CmdName => "teams"; - public override string CmdUsage => "teams"; - public override string CmdDesc => Translations.cmd_teams_desc; - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => DoListTeams(r.Source)) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private static int DoListTeams(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - Dictionary snapshot = handler.GetTeams(); - - if (snapshot.Count == 0) - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_teams_no_teams); - - var sb = new StringBuilder(); - foreach (var team in snapshot.Values.OrderBy(static t => t.Name, StringComparer.Ordinal)) - { - sb.AppendLine(string.Format(Translations.cmd_teams_team_header, - team.Name, - team.DisplayName, - team.Color, - team.Prefix, - team.Suffix, - team.NameTagVisibility, - team.CollisionRule, - team.AllowFriendlyFire, - team.SeeFriendlyInvisibles)); - - if (team.Members.Count == 0) - sb.AppendLine(Translations.cmd_teams_team_no_members); - else - sb.AppendLine(string.Format(Translations.cmd_teams_team_members, - team.Members.Count, - string.Join(", ", team.Members.OrderBy(static m => m, StringComparer.OrdinalIgnoreCase)))); - } - - return r.SetAndReturn(CmdResult.Status.Done, sb.ToString().TrimEnd()); - } - } -} diff --git a/MinecraftClient/Commands/Tps.cs b/MinecraftClient/Commands/Tps.cs deleted file mode 100644 index a30749bb7e..0000000000 --- a/MinecraftClient/Commands/Tps.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - class Tps : Command - { - public override string CmdName { get { return "tps"; } } - public override string CmdUsage { get { return "tps"; } } - public override string CmdDesc { get { return Translations.cmd_tps_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => DoLogTps(r.Source)) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int DoLogTps(CmdResult r) - { - McClient handler = CmdResult.currentHandler!; - var tps = Math.Round(handler.GetServerTPS(), 2); - string color; - if (tps < 10) - color = "§c"; // Red - else if (tps < 15) - color = "§e"; // Yellow - else - color = "§a"; // Green - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_tps_current + ": " + color + tps); - } - } -} diff --git a/MinecraftClient/Commands/Tryout.cs b/MinecraftClient/Commands/Tryout.cs deleted file mode 100644 index 8ae0829bbe..0000000000 --- a/MinecraftClient/Commands/Tryout.cs +++ /dev/null @@ -1,63 +0,0 @@ -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using static MinecraftClient.Settings.ConsoleConfigHealper.ConsoleConfig; - -namespace MinecraftClient.Commands -{ - public class Tryout : Command - { - public override string CmdName => "tryout"; - public override string CmdUsage => "tryout [list|tui]"; - public override string CmdDesc => Translations.cmd_tryout_desc; - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => ListTryouts(r.Source)) - .Then(l => l.Literal("list") - .Executes(r => ListTryouts(r.Source))) - .Then(l => l.Literal("tui") - .Executes(r => EnableTuiMode(r.Source))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r) - { - return r.SetAndReturn(GetCmdDescTranslated()); - } - - private int ListTryouts(CmdResult r) - { - return r.SetAndReturn(string.Join('\n', - GetCmdDescTranslated(), - string.Empty, - Translations.cmd_tryout_list_header, - $" - {Translations.cmd_tryout_list_tui}")); - } - - private int EnableTuiMode(CmdResult r) - { - var previousMode = Settings.Config.Console.General.ConsoleMode; - if (previousMode == ConsoleModeType.tui) - { - return r.SetAndReturn(CmdResult.Status.Done, Translations.cmd_tryout_tui_already_enabled); - } - - Settings.Config.Console.General.ConsoleMode = ConsoleModeType.tui; - Program.WriteBackSettings(); - - return r.SetAndReturn(CmdResult.Status.Done, - string.Format(Translations.cmd_tryout_tui_enabled, previousMode, ConsoleModeType.tui)); - } - } -} diff --git a/MinecraftClient/Commands/Upgrade.cs b/MinecraftClient/Commands/Upgrade.cs deleted file mode 100644 index 35ae378353..0000000000 --- a/MinecraftClient/Commands/Upgrade.cs +++ /dev/null @@ -1,78 +0,0 @@ -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; - -namespace MinecraftClient.Commands -{ - class Upgrade : Command - { - public override string CmdName { get { return "upgrade"; } } - public override string CmdUsage { get { return "upgrade [-f|check|cancel|download]"; } } - public override string CmdDesc { get { return string.Empty; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - .Then(l => l.Literal("cancel") - .Executes(r => GetUsage(r.Source, "cancel"))) - .Then(l => l.Literal("check") - .Executes(r => GetUsage(r.Source, "check"))) - .Then(l => l.Literal("download") - .Executes(r => GetUsage(r.Source, "download"))) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => DownloadUpdate(r.Source, force: false)) - .Then(l => l.Literal("-f") - .Executes(r => DownloadUpdate(r.Source, force: true))) - .Then(l => l.Literal("download") - .Executes(r => DownloadUpdate(r.Source, force: false)) - .Then(l => l.Literal("-f") - .Executes(r => DownloadUpdate(r.Source, force: true)))) - .Then(l => l.Literal("check") - .Executes(r => CheckUpdate(r.Source))) - .Then(l => l.Literal("cancel") - .Executes(r => CancelDownloadUpdate(r.Source))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "cancel" => GetCmdDescTranslated(), - "check" => GetCmdDescTranslated(), - "download" => GetCmdDescTranslated(), - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private static int DownloadUpdate(CmdResult r, bool force) - { - if (UpgradeHelper.DownloadLatestBuild(force)) - return r.SetAndReturn(CmdResult.Status.Done, Translations.mcc_update_start); - else - return r.SetAndReturn(CmdResult.Status.Fail, Translations.mcc_update_already_running); - } - - private static int CancelDownloadUpdate(CmdResult r) - { - UpgradeHelper.CancelDownloadUpdate(); - return r.SetAndReturn(CmdResult.Status.Done, Translations.mcc_update_cancel); - } - - private static int CheckUpdate(CmdResult r) - { - UpgradeHelper.CheckUpdate(forceUpdate: true); - return r.SetAndReturn(CmdResult.Status.Done, Translations.mcc_update_start); - } - } -} diff --git a/MinecraftClient/Commands/UseItem.cs b/MinecraftClient/Commands/UseItem.cs deleted file mode 100644 index 70ad0003ca..0000000000 --- a/MinecraftClient/Commands/UseItem.cs +++ /dev/null @@ -1,112 +0,0 @@ -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Inventory; -using MinecraftClient.Mapping; -using static MinecraftClient.CommandHandler.CmdResult; - -namespace MinecraftClient.Commands -{ - class UseItem : Command - { - public override string CmdName { get { return "useitem"; } } - public override string CmdUsage { get { return "useitem [mainhand|offhand] | useitem [x] [y] [z] [mainhand|offhand]"; } } - public override string CmdDesc { get { return Translations.cmd_useitem_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Executes(r => DoUseItem(r.Source)) - .Then(l => l.Literal("mainhand") - .Executes(r => DoUseItem(r.Source, Hand.MainHand))) - .Then(l => l.Literal("offhand") - .Executes(r => DoUseItem(r.Source, Hand.OffHand))) - .Then(l => l.Argument("Location", MccArguments.Location()) - .Executes(r => DoUseItemAtLocation(r.Source, MccArguments.GetLocation(r, "Location"), Hand.MainHand)) - .Then(l => l.Literal("mainhand") - .Executes(r => DoUseItemAtLocation(r.Source, MccArguments.GetLocation(r, "Location"), Hand.MainHand))) - .Then(l => l.Literal("offhand") - .Executes(r => DoUseItemAtLocation(r.Source, MccArguments.GetLocation(r, "Location"), Hand.OffHand)))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private static bool ShouldUseOffhandFood(McClient handler) - { - Container? inventory = handler.GetInventory(0); - if (inventory is null) - return false; - - if (!inventory.Items.TryGetValue(45, out Item? offhandItem) - || offhandItem.IsEmpty - || !offhandItem.Type.IsFood()) - return false; - - int mainHandSlot = 36 + handler.GetCurrentSlot(); - return !inventory.Items.TryGetValue(mainHandSlot, out Item? mainHandItem) - || mainHandItem.IsEmpty - || !mainHandItem.Type.IsFood(); - } - - private int DoUseItem(CmdResult r, Hand? requestedHand = null) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetInventoryEnabled()) - return r.SetAndReturn(Status.FailNeedInventory); - - Hand hand = requestedHand ?? (ShouldUseOffhandFood(handler) ? Hand.OffHand : Hand.MainHand); - bool useOffhandFood = !requestedHand.HasValue && hand == Hand.OffHand; - - if (!useOffhandFood && handler.GetTerrainEnabled()) - { - const double maxDistance = 4.5; - var raycast = RaycastHelper.RaycastBlock(handler, maxDistance, false); - if (raycast.Item1 && raycast.Item3.Type != Material.Air) - { - handler.PlaceBlock(raycast.Item2, Direction.Up, hand, lookAtBlock: true); - handler.DoAnimation((int)hand); - return r.SetAndReturn(Status.Done, Translations.cmd_useitem_use); - } - } - - if (hand == Hand.OffHand) - handler.UseItemOnLeftHand(); - else - handler.UseItemOnHand(); - - return r.SetAndReturn(Status.Done, Translations.cmd_useitem_use); - } - - private int DoUseItemAtLocation(CmdResult r, Location block, Hand hand) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - Location current = handler.GetCurrentLocation(); - block = block.ToAbsolute(current).ToFloor(); - handler.PlaceBlock(block, Direction.Up, hand, lookAtBlock: true); - handler.DoAnimation((int)hand); - return r.SetAndReturn(Status.Done, Translations.cmd_useitem_use); - } - - } -} diff --git a/MinecraftClient/Commands/Useblock.cs b/MinecraftClient/Commands/Useblock.cs deleted file mode 100644 index d4f964a65c..0000000000 --- a/MinecraftClient/Commands/Useblock.cs +++ /dev/null @@ -1,80 +0,0 @@ -using System; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.Inventory; -using MinecraftClient.Mapping; -using static MinecraftClient.CommandHandler.CmdResult; - -namespace MinecraftClient.Commands -{ - class Useblock : Command - { - public override string CmdName { get { return "useblock"; } } - public override string CmdUsage { get { return "useblock [mainhand|offhand]"; } } - public override string CmdDesc { get { return Translations.cmd_useblock_desc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CmdName) - .Executes(r => GetUsage(r.Source, string.Empty)) - ) - ); - - dispatcher.Register(l => l.Literal(CmdName) - .Then(l => l.Argument("Location", MccArguments.Location()) - .Executes(r => UseBlockAtLocation(r.Source, MccArguments.GetLocation(r, "Location"), Hand.MainHand)) - .Then(l => l.Literal("mainhand") - .Executes(r => UseBlockAtLocation(r.Source, MccArguments.GetLocation(r, "Location"), Hand.MainHand))) - .Then(l => l.Literal("offhand") - .Executes(r => UseBlockAtLocation(r.Source, MccArguments.GetLocation(r, "Location"), Hand.OffHand)))) - .Then(l => l.Literal("_help") - .Executes(r => GetUsage(r.Source, string.Empty)) - .Redirect(dispatcher.GetRoot().GetChild("help").GetChild(CmdName))) - ); - } - - private int GetUsage(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - _ => GetCmdDescTranslated(), -#pragma warning restore format // @formatter:on - }); - } - - private int UseBlockAtLocation(CmdResult r, Location block, Hand hand) - { - McClient handler = CmdResult.currentHandler!; - if (!handler.GetTerrainEnabled()) - return r.SetAndReturn(Status.FailNeedTerrain); - - Location current = handler.GetCurrentLocation(); - block = block.ToAbsolute(current).ToFloor(); - Location blockCenter = block.ToCenter(); - bool res = handler.PlaceBlock(block, GetFaceNearestPlayer(current, blockCenter), hand, lookAtBlock: true); - return r.SetAndReturn(string.Format(Translations.cmd_useblock_use, blockCenter.X, blockCenter.Y, blockCenter.Z, res ? "succeeded" : "failed"), res); - } - - private static Direction GetFaceNearestPlayer(Location playerLocation, Location blockCenter) - { - double dx = playerLocation.X - blockCenter.X; - double dy = playerLocation.Y - blockCenter.Y; - double dz = playerLocation.Z - blockCenter.Z; - - double absX = Math.Abs(dx); - double absY = Math.Abs(dy); - double absZ = Math.Abs(dz); - - if (absX >= absY && absX >= absZ) - return dx >= 0 ? Direction.East : Direction.West; - - if (absY >= absZ) - return dy >= 0 ? Direction.Up : Direction.Down; - - return dz >= 0 ? Direction.South : Direction.North; - } - } -} diff --git a/MinecraftClient/ConnectionAttemptLifecycle.cs b/MinecraftClient/ConnectionAttemptLifecycle.cs deleted file mode 100644 index 360ae01305..0000000000 --- a/MinecraftClient/ConnectionAttemptLifecycle.cs +++ /dev/null @@ -1,107 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading; -using MinecraftClient.Scripting; - -namespace MinecraftClient -{ - internal sealed class ConnectionAttemptLifecycle - { - private int disconnectState; - - internal bool IsFailureClaimed => Volatile.Read(ref disconnectState) != 0; - - internal bool TryBeginDisconnect() - { - return Interlocked.CompareExchange(ref disconnectState, 1, 0) == 0; - } - - internal void CompleteDisconnect() - { - Volatile.Write(ref disconnectState, 2); - } - - internal static void RestoreHeldBots(ICollection heldBots, Action loadBot) - { - ArgumentNullException.ThrowIfNull(heldBots); - ArgumentNullException.ThrowIfNull(loadBot); - - foreach (ChatBot bot in heldBots) - loadBot(bot); - heldBots.Clear(); - } - } - - internal sealed class AttemptOwnedRoute - { - private const long NoOwner = -1; - private readonly Lock stateLock = new(); - private long ownerAttempt = NoOwner; - - internal long OwnerAttempt - { - get - { - lock (stateLock) - return ownerAttempt; - } - } - - internal bool TryActivate(long connectionAttempt, long currentConnectionAttempt, Action activate) - { - ArgumentNullException.ThrowIfNull(activate); - - lock (stateLock) - { - if (connectionAttempt < currentConnectionAttempt || ownerAttempt >= connectionAttempt) - return false; - - ownerAttempt = connectionAttempt; - activate(); - return true; - } - } - - internal bool TryDeactivate(long connectionAttempt, Action deactivate) - { - ArgumentNullException.ThrowIfNull(deactivate); - - lock (stateLock) - { - if (ownerAttempt != connectionAttempt) - return false; - - ownerAttempt = NoOwner; - deactivate(); - return true; - } - } - - internal bool TryTransfer(long sourceConnectionAttempt, long targetConnectionAttempt) - { - lock (stateLock) - { - if (ownerAttempt != sourceConnectionAttempt) - return false; - - ownerAttempt = targetConnectionAttempt; - return true; - } - } - - internal bool TryDeactivate(Action deactivate) - { - ArgumentNullException.ThrowIfNull(deactivate); - - lock (stateLock) - { - if (ownerAttempt == NoOwner) - return false; - - ownerAttempt = NoOwner; - deactivate(); - return true; - } - } - } -} diff --git a/MinecraftClient/ConsoleIO.cs b/MinecraftClient/ConsoleIO.cs deleted file mode 100644 index 50a023fe91..0000000000 --- a/MinecraftClient/ConsoleIO.cs +++ /dev/null @@ -1,489 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using Brigadier.NET; -using FuzzySharp; -using MinecraftClient.CommandHandler; -using MinecraftClient.Scripting; -using MinecraftClient.Tui; -using static MinecraftClient.Settings; - -namespace MinecraftClient -{ - /// - /// Allows simultaneous console input and output without breaking user input - /// (Without having this annoying behaviour : User inp[Some Console output]ut) - /// Provide some fancy features such as formatted output, text pasting and tab-completion. - /// By ORelio - (c) 2012-2018 - Available under the CDDL-1.0 License - /// - public static class ConsoleIO - { - private static IAutoComplete? autocomplete_engine; - - /// - /// The active console backend. Set once during startup. - /// - public static IConsoleBackend Backend { get; set; } = null!; - - /// - /// Reset the IO mechanism and clear all buffers - /// - public static void Reset() - { - Backend?.ClearInputBuffer(); - } - - /// - /// Set an auto-completion engine for TAB autocompletion. - /// - /// Engine implementing the IAutoComplete interface - public static void SetAutoCompleteEngine(IAutoComplete engine) - { - autocomplete_engine = engine; - } - - /// - /// Determines whether to use basic IO (legacy flag, kept for compatibility). - /// In the new architecture this is true when Backend is BasicConsoleBackend. - /// - public static bool BasicIO = false; - - /// - /// Determines whether not to print color codes in BasicIO mode. - /// - public static bool BasicIO_NoColor = false; - - /// - /// Determine whether WriteLineFormatted() should prepend lines with timestamps by default. - /// - public static bool EnableTimestamps = false; - - /// - /// Determine whether chat lines should be displayed in the console. - /// - public static bool ChatVisible = true; - - /// - /// Specify a generic log line prefix for WriteLogLine() - /// - public static string LogPrefix = "§8[MCC] "; - - /// - /// Read a password from the standard input - /// - public static string? ReadPassword() - { - if (ConsoleInputRouter.IsStarted) - { - if (BasicIO || Backend is null) - return ConsoleInputRouter.ReadLine(); - - Backend.SetInputVisible(false); - try - { - return ConsoleInputRouter.ReadLine(); - } - finally - { - Backend.SetInputVisible(true); - } - } - - if (BasicIO) - return Console.ReadLine(); - return Backend.ReadPassword(); - } - - /// - /// Read a line from the standard input - /// - public static string ReadLine() - { - if (ConsoleInputRouter.IsStarted) - return ConsoleInputRouter.ReadLine(); - - if (BasicIO) - return Console.ReadLine() ?? String.Empty; - return Backend.RequestImmediateInput(); - } - - /// - /// Debug routine: print all keys pressed in the console - /// - public static void DebugReadInput() - { - ConsoleKeyInfo k; - while (true) - { - k = Console.ReadKey(true); - Console.WriteLine("Key: {0}\tChar: {1}\tModifiers: {2}", k.Key, k.KeyChar, k.Modifiers); - } - } - - /// - /// Write a string to the standard output with a trailing newline - /// - public static void WriteLine(string line) - { - if (BasicIO || Backend is null) - Console.WriteLine(line); - else - Backend.WriteLine(line); - } - - /// - /// Write a Minecraft-Like formatted string to the standard output, using §c color codes - /// for more info - /// - /// String to write - /// If false, space are printed instead of newlines - /// - /// If false, no timestamp is prepended. - /// If true, "hh-mm-ss" timestamp will be prepended. - /// If unspecified, value is retrieved from EnableTimestamps. - /// - public static void WriteLineFormatted(string str, bool acceptnewlines = false, bool? displayTimestamp = null) - { - StringBuilder output = new(); - - if (!String.IsNullOrEmpty(str)) - { - displayTimestamp ??= EnableTimestamps; - if (displayTimestamp.Value) - { - int hour = DateTime.Now.Hour, minute = DateTime.Now.Minute, second = DateTime.Now.Second; - output.Append(String.Format("{0}:{1}:{2} ", hour.ToString("00"), minute.ToString("00"), second.ToString("00"))); - } - if (!acceptnewlines) - { - str = str.Replace('\n', ' '); - } - if (BasicIO || Backend is null) - { - if (BasicIO_NoColor) - { - output.Append(ChatBot.GetVerbatim(str)); - } - else - { - output.Append(str); - } - Console.WriteLine(output.ToString()); - return; - } - output.Append(str); - output.Append("§r"); - Backend.WriteLineFormatted(output.ToString()); - } - } - - /// - /// Write a formatted chat line to the console when chat output is enabled. - /// - public static void WriteChatLineIfVisible(string str, bool acceptnewlines = false, bool? displayTimestamp = null) - { - if (!ChatVisible) - return; - - WriteLineFormatted(str, acceptnewlines, displayTimestamp); - } - - /// - /// Write a prefixed log line. Prefix is set in LogPrefix. - /// - /// Text of the log line - /// Allow line breaks - public static void WriteLogLine(string text, bool acceptnewlines = true) - { - if (!acceptnewlines) - text = text.Replace('\n', ' '); - WriteLineFormatted(LogPrefix + text, acceptnewlines); - } - - #region Subfunctions - - /// - /// Clear all text inside the input prompt - /// - private static void ClearLineAndBuffer() - { - if (BasicIO) return; - Backend.ClearInputBuffer(); - } - - /// - /// Clear the visible console output. - /// - public static void ClearConsole() - { - if (BasicIO || Backend is null) - { - try - { - Console.Clear(); - } - catch (IOException ex) - { - System.Diagnostics.Debug.WriteLine(ex); - } - catch (PlatformNotSupportedException ex) - { - System.Diagnostics.Debug.WriteLine(ex); - } - - return; - } - - Backend.ClearScreen(); - } - - #endregion - - internal static bool AutoCompleteDone = false; - internal static string[] AutoCompleteResult = Array.Empty(); - - private static HashSet Commands = new(); - private static string[] CommandsFromAutoComplete = Array.Empty(); - private static string[] CommandsFromDeclareCommands = Array.Empty(); - - private static Task _latestTask = Task.CompletedTask; - private static CancellationTokenSource? _cancellationTokenSource; - - private static void SendSuggestions( - ConsoleInteractive.ConsoleSuggestion.Suggestion[] classicSugs, - Tuple range) - { - if (Backend is ClassicConsoleBackend classic) - { - classic.UpdateSuggestions(classicSugs, range); - } - else if (Backend is TuiConsoleBackend tui) - { - var tuiSugs = new CommandSuggestion[classicSugs.Length]; - for (int i = 0; i < classicSugs.Length; i++) - tuiSugs[i] = new CommandSuggestion(classicSugs[i].Text, classicSugs[i].Tooltip); - tui.UpdateSuggestions(tuiSugs, (range.Item1, range.Item2)); - } - } - - private static void DoClearSuggestions() - { - if (Backend is ClassicConsoleBackend classic) - classic.ClearSuggestions(); - else if (Backend is TuiConsoleBackend tui) - tui.ClearSuggestions(); - } - - private static void MccAutocompleteHandler(ConsoleInputBuffer buffer) - { - string fullCommand = buffer.Text; - if (string.IsNullOrEmpty(fullCommand)) - { - DoClearSuggestions(); - return; - } - - var InternalCmdChar = Config.Main.Advanced.InternalCmdChar; - if (InternalCmdChar == MainConfigHelper.MainConfig.AdvancedConfig.InternalCmdCharType.none || fullCommand[0] == InternalCmdChar.ToChar()) - { - int offset = InternalCmdChar == MainConfigHelper.MainConfig.AdvancedConfig.InternalCmdCharType.none ? 0 : 1; - if (buffer.CursorPosition - offset < 0) - { - DoClearSuggestions(); - return; - } - _cancellationTokenSource?.Cancel(); - using var cts = new CancellationTokenSource(); - _cancellationTokenSource = cts; - var previousTask = _latestTask; - var newTask = new Task(async () => - { - string command = fullCommand[offset..]; - if (command.Length == 0) - { - List sugList = new(); - - sugList.Add(new("/")); - - var childs = McClient.dispatcher.GetRoot().Children; - if (childs is not null) - foreach (var child in childs) - sugList.Add(new(child.Name)); - - foreach (var cmd in Commands) - sugList.Add(new(cmd)); - - SendSuggestions(sugList.ToArray(), new(offset, offset)); - } - else if (command.Length > 0 && command[0] == '/' && !command.Contains(' ')) - { - var sorted = Process.ExtractSorted(command[1..], Commands); - var sugList = new ConsoleInteractive.ConsoleSuggestion.Suggestion[sorted.Count()]; - - int index = 0; - foreach (var sug in sorted) - sugList[index++] = new(sug.Value); - SendSuggestions(sugList, new(offset, offset + command.Length)); - } - else - { - CommandDispatcher? dispatcher = McClient.dispatcher; - if (dispatcher is null) - return; - - ParseResults parse = dispatcher.Parse(command, CmdResult.Empty); - - Brigadier.NET.Suggestion.Suggestions suggestions = await dispatcher.GetCompletionSuggestions(parse, buffer.CursorPosition - offset); - - int sugLen = suggestions.List.Count; - if (sugLen == 0) - { - DoClearSuggestions(); - return; - } - - Dictionary dictionary = new(); - foreach (var sug in suggestions.List) - dictionary.Add(sug.Text, sug.Tooltip?.String); - - var sugList = new ConsoleInteractive.ConsoleSuggestion.Suggestion[sugLen]; - if (cts.IsCancellationRequested) - return; - - Tuple range = new(suggestions.Range.Start + offset, suggestions.Range.End + offset); - var sorted = Process.ExtractSorted(fullCommand[range.Item1..range.Item2], dictionary.Keys); - if (cts.IsCancellationRequested) - return; - - int index = 0; - foreach (var sug in sorted) - sugList[index++] = new(sug.Value, dictionary[sug.Value] ?? string.Empty); - - SendSuggestions(sugList, range); - } - }, cts.Token); - _latestTask = newTask; - try { newTask.Start(); } catch { } - if (_cancellationTokenSource == cts) _cancellationTokenSource = null; - } - else - { - DoClearSuggestions(); - return; - } - } - - public static void AutocompleteHandler(object? sender, ConsoleInputBuffer buffer) - { - if (Settings.Config.Console.CommandSuggestion.Enable) - MccAutocompleteHandler(buffer); - } - - private static readonly string[] OfflineCommands = ["quit", "exit", "connect", "reco", "help"]; - - public static void OfflineAutocompleteHandler(object? sender, ConsoleInputBuffer buffer) - { - if (!Settings.Config.Console.CommandSuggestion.Enable) - return; - - string fullCommand = buffer.Text; - if (string.IsNullOrEmpty(fullCommand)) - { - DoClearSuggestions(); - return; - } - - var InternalCmdChar = Config.Main.Advanced.InternalCmdChar; - int offset = 0; - if (InternalCmdChar != MainConfigHelper.MainConfig.AdvancedConfig.InternalCmdCharType.none) - { - if (fullCommand[0] != InternalCmdChar.ToChar()) - { - DoClearSuggestions(); - return; - } - offset = 1; - } - - string command = fullCommand[offset..]; - if (command.Contains(' ')) - { - DoClearSuggestions(); - return; - } - - var sugList = new List(); - foreach (string cmd in OfflineCommands) - { - if (command.Length == 0 || cmd.StartsWith(command, StringComparison.OrdinalIgnoreCase)) - sugList.Add(new(cmd)); - } - - if (sugList.Count > 0) - SendSuggestions(sugList.ToArray(), new(offset, offset + command.Length)); - else - DoClearSuggestions(); - } - - public static void CancelAutocomplete() - { - _cancellationTokenSource?.Cancel(); - _latestTask = Task.CompletedTask; - DoClearSuggestions(); - - AutoCompleteDone = false; - AutoCompleteResult = Array.Empty(); - CommandsFromAutoComplete = Array.Empty(); - CommandsFromDeclareCommands = Array.Empty(); - } - - private static void MergeCommands() - { - Commands.Clear(); - foreach (string cmd in CommandsFromAutoComplete) - Commands.Add('/' + cmd); - foreach (string cmd in CommandsFromDeclareCommands) - Commands.Add('/' + cmd); - } - - public static void OnAutoCompleteDone(int transactionId, string[] result) - { - AutoCompleteResult = result; - if (transactionId == 0) - { - CommandsFromAutoComplete = result; - MergeCommands(); - } - AutoCompleteDone = true; - } - - public static void OnDeclareMinecraftCommand(string[] rootCommands) - { - CommandsFromDeclareCommands = rootCommands; - MergeCommands(); - } - - public static void InitCommandList(CommandDispatcher dispatcher) - { - autocomplete_engine!.AutoComplete("/"); - } - } - - /// - /// Interface for TAB autocompletion - /// Allows to use any object which has an AutoComplete() method using the IAutocomplete interface - /// - public interface IAutoComplete - { - /// - /// Provide a list of auto-complete strings based on the provided input behing the cursor - /// - /// Text behind the cursor, e.g. "my input comm" - /// List of auto-complete words, e.g. ["command", "comment"] - int AutoComplete(string BehindCursor); - } -} diff --git a/MinecraftClient/ConsoleInputRouter.cs b/MinecraftClient/ConsoleInputRouter.cs deleted file mode 100644 index 3343e4b2b3..0000000000 --- a/MinecraftClient/ConsoleInputRouter.cs +++ /dev/null @@ -1,187 +0,0 @@ -using System; -using System.Threading; -using System.Threading.Tasks; - -namespace MinecraftClient -{ - internal static class ConsoleInputRouter - { - private static readonly Lock StateLock = new(); - private static readonly CancellationTokenSource Shutdown = new(); - private static bool started; - private static Action? messageRoute; - private static EventHandler? inputChangeRoute; - private static TaskCompletionSource? pendingRead; - - internal static bool IsStarted - { - get - { - lock (StateLock) - return started; - } - } - - internal static void EnsureStarted() - { - lock (StateLock) - { - if (started) - return; - - started = true; - if (ConsoleIO.BasicIO || ConsoleIO.Backend is null) - { - var readThread = new Thread(() => ReadBasicInput(Shutdown.Token)) - { - Name = "MCC console input router", - }; - readThread.Start(); - return; - } - - try - { - ConsoleIO.Backend.MessageReceived += OnMessageReceived; - ConsoleIO.Backend.OnInputChange += OnInputChanged; - ConsoleIO.Backend.BeginReadThread(); - } - catch - { - ConsoleIO.Backend.MessageReceived -= OnMessageReceived; - ConsoleIO.Backend.OnInputChange -= OnInputChanged; - started = false; - throw; - } - } - } - - internal static void RouteToClient(McClient client) - { - ArgumentNullException.ThrowIfNull(client); - EnsureStarted(); - - lock (StateLock) - { - messageRoute = client.RouteConsoleInput; - inputChangeRoute = ConsoleIO.AutocompleteHandler; - } - } - - internal static void ClearClient(McClient client) - { - ArgumentNullException.ThrowIfNull(client); - - lock (StateLock) - { - if (messageRoute == client.RouteConsoleInput) - { - messageRoute = null; - inputChangeRoute = null; - } - } - } - - internal static void RouteOffline(Action handler) - { - ArgumentNullException.ThrowIfNull(handler); - EnsureStarted(); - - lock (StateLock) - { - messageRoute = handler; - inputChangeRoute = ConsoleIO.OfflineAutocompleteHandler; - } - } - - internal static void ClearOfflineRoute(Action handler) - { - ArgumentNullException.ThrowIfNull(handler); - - lock (StateLock) - { - if (messageRoute == handler) - { - messageRoute = null; - inputChangeRoute = null; - } - } - } - - internal static string ReadLine() - { - EnsureStarted(); - - TaskCompletionSource readCompletion = new(TaskCreationOptions.RunContinuationsAsynchronously); - lock (StateLock) - { - if (pendingRead is not null) - throw new InvalidOperationException(); - - pendingRead = readCompletion; - } - - return readCompletion.Task.GetAwaiter().GetResult(); - } - - internal static void ShutdownRouter() - { - lock (StateLock) - { - messageRoute = null; - inputChangeRoute = null; - pendingRead?.TrySetCanceled(); - pendingRead = null; - Shutdown.Cancel(); - } - } - - private static void ReadBasicInput(CancellationToken cancellationToken) - { - while (!cancellationToken.IsCancellationRequested) - { - string? input = Console.ReadLine(); - if (input is null) - return; - - DispatchMessage(input); - } - } - - private static void OnMessageReceived(object? sender, string message) - { - DispatchMessage(message); - } - - private static void OnInputChanged(object? sender, ConsoleInputBuffer input) - { - EventHandler? route; - lock (StateLock) - route = inputChangeRoute; - - route?.Invoke(sender, input); - } - - private static void DispatchMessage(string message) - { - TaskCompletionSource? readCompletion; - Action? route; - - lock (StateLock) - { - readCompletion = pendingRead; - if (readCompletion is not null) - pendingRead = null; - route = messageRoute; - } - - if (readCompletion is not null) - { - readCompletion.TrySetResult(message); - return; - } - - route?.Invoke(message); - } - } -} diff --git a/MinecraftClient/Crypto/AesCfb8Stream.cs b/MinecraftClient/Crypto/AesCfb8Stream.cs deleted file mode 100644 index b60eb84528..0000000000 --- a/MinecraftClient/Crypto/AesCfb8Stream.cs +++ /dev/null @@ -1,199 +0,0 @@ -using System; -using System.IO; -using System.Runtime.CompilerServices; -using System.Security.Cryptography; - -namespace MinecraftClient.Crypto -{ - public class AesCfb8Stream : Stream - { - public const int blockSize = 16; - - private readonly Aes? Aes = null; - private readonly FastAes? FastAes = null; - - private bool inStreamEnded = false; - - private readonly byte[] ReadStreamIV = new byte[16]; - private readonly byte[] WriteStreamIV = new byte[16]; - - public Stream BaseStream { get; set; } - - public AesCfb8Stream(Stream stream, byte[] key) - { - BaseStream = stream; - - if (FastAes.IsSupported()) - FastAes = new FastAes(key); - else - { - Aes = Aes.Create(); - Aes.BlockSize = 128; - Aes.KeySize = 128; - Aes.Key = key; - Aes.Mode = CipherMode.ECB; - Aes.Padding = PaddingMode.None; - } - - Array.Copy(key, ReadStreamIV, 16); - Array.Copy(key, WriteStreamIV, 16); - } - - public override bool CanRead - { - get { return true; } - } - - public override bool CanSeek - { - get { return false; } - } - - public override bool CanWrite - { - get { return true; } - } - - public override void Flush() - { - BaseStream.Flush(); - } - - public override long Length - { - get { throw new NotSupportedException(); } - } - - public override long Position - { - get - { - throw new NotSupportedException(); - } - set - { - throw new NotSupportedException(); - } - } - - public override int ReadByte() - { - if (inStreamEnded) - return -1; - - int inputBuf = BaseStream.ReadByte(); - if (inputBuf == -1) - { - inStreamEnded = true; - return -1; - } - - Span blockOutput = stackalloc byte[blockSize]; - if (FastAes is not null) - FastAes.EncryptEcb(ReadStreamIV, blockOutput); - else - Aes!.EncryptEcb(ReadStreamIV, blockOutput, PaddingMode.None); - - // Shift left - Array.Copy(ReadStreamIV, 1, ReadStreamIV, 0, blockSize - 1); - ReadStreamIV[blockSize - 1] = (byte)inputBuf; - - return (byte)(blockOutput[0] ^ inputBuf); - } - - [MethodImpl(MethodImplOptions.AggressiveOptimization)] - public override int Read(byte[] buffer, int outOffset, int required) - { - if (inStreamEnded) - return 0; - - Span blockOutput = stackalloc byte[blockSize]; - - byte[] inputBuf = new byte[blockSize + required]; - Array.Copy(ReadStreamIV, inputBuf, blockSize); - - for (int readed = 0, curRead; readed < required; readed += curRead) - { - curRead = BaseStream.Read(inputBuf, blockSize + readed, required - readed); - if (curRead == 0) - { - inStreamEnded = true; - return readed; - } - - int processEnd = readed + curRead; - if (FastAes is not null) - { - for (int idx = readed; idx < processEnd; idx++) - { - ReadOnlySpan blockInput = new(inputBuf, idx, blockSize); - FastAes.EncryptEcb(blockInput, blockOutput); - buffer[outOffset + idx] = (byte)(blockOutput[0] ^ inputBuf[idx + blockSize]); - } - } - else - { - for (int idx = readed; idx < processEnd; idx++) - { - ReadOnlySpan blockInput = new(inputBuf, idx, blockSize); - Aes!.EncryptEcb(blockInput, blockOutput, PaddingMode.None); - buffer[outOffset + idx] = (byte)(blockOutput[0] ^ inputBuf[idx + blockSize]); - } - } - } - - Array.Copy(inputBuf, required, ReadStreamIV, 0, blockSize); - - return required; - } - - public override long Seek(long offset, SeekOrigin origin) - { - throw new NotSupportedException(); - } - - public override void SetLength(long value) - { - throw new NotSupportedException(); - } - - public override void WriteByte(byte b) - { - Span blockOutput = stackalloc byte[blockSize]; - - if (FastAes is not null) - FastAes.EncryptEcb(WriteStreamIV, blockOutput); - else - Aes!.EncryptEcb(WriteStreamIV, blockOutput, PaddingMode.None); - - byte outputBuf = (byte)(blockOutput[0] ^ b); - - BaseStream.WriteByte(outputBuf); - - // Shift left - Array.Copy(WriteStreamIV, 1, WriteStreamIV, 0, blockSize - 1); - WriteStreamIV[blockSize - 1] = outputBuf; - } - - [MethodImpl(MethodImplOptions.AggressiveOptimization)] - public override void Write(byte[] input, int offset, int required) - { - byte[] outputBuf = new byte[blockSize + required]; - Array.Copy(WriteStreamIV, outputBuf, blockSize); - - Span blockOutput = stackalloc byte[blockSize]; - for (int wirtten = 0; wirtten < required; ++wirtten) - { - ReadOnlySpan blockInput = new(outputBuf, wirtten, blockSize); - if (FastAes is not null) - FastAes.EncryptEcb(blockInput, blockOutput); - else - Aes!.EncryptEcb(blockInput, blockOutput, PaddingMode.None); - outputBuf[blockSize + wirtten] = (byte)(blockOutput[0] ^ input[offset + wirtten]); - } - BaseStream.WriteAsync(outputBuf, blockSize, required); - - Array.Copy(outputBuf, required, WriteStreamIV, 0, blockSize); - } - } -} diff --git a/MinecraftClient/Crypto/CryptoHandler.cs b/MinecraftClient/Crypto/CryptoHandler.cs deleted file mode 100644 index 963c5dbc23..0000000000 --- a/MinecraftClient/Crypto/CryptoHandler.cs +++ /dev/null @@ -1,198 +0,0 @@ -using System; -using System.Linq; -using System.Security.Cryptography; -using System.Text; - -namespace MinecraftClient.Crypto -{ - /// - /// Methods for handling all the crypto stuff: RSA (Encryption Key Request), AES (Encrypted Stream), SHA-1 (Server Hash). - /// - - public static class CryptoHandler - { - public static byte[]? ClientAESPrivateKey; - - /// - /// Get a cryptographic service for encrypting data using the server's RSA public key - /// - /// Byte array containing the encoded key - /// Returns the corresponding RSA Crypto Service - - public static RSACryptoServiceProvider? DecodeRSAPublicKey(byte[] x509key) - { - /* Code from StackOverflow no. 18091460 */ - - byte[] SeqOID = { 0x2A, 0x86, 0x48, 0x86, 0xF7, 0x0D, 0x01, 0x01, 0x01 }; - - System.IO.MemoryStream ms = new(x509key); - System.IO.BinaryReader reader = new(ms); - - if (reader.ReadByte() == 0x30) - ReadASNLength(reader); //skip the size - else - return null; - - int identifierSize; //total length of Object Identifier section - if (reader.ReadByte() == 0x30) - identifierSize = ReadASNLength(reader); - else - return null; - - if (reader.ReadByte() == 0x06) //is the next element an object identifier? - { - int oidLength = ReadASNLength(reader); - byte[] oidBytes = new byte[oidLength]; - reader.Read(oidBytes, 0, oidBytes.Length); - if (oidBytes.SequenceEqual(SeqOID) == false) //is the object identifier rsaEncryption PKCS#1? - return null; - - int remainingBytes = identifierSize - 2 - oidBytes.Length; - reader.ReadBytes(remainingBytes); - } - - if (reader.ReadByte() == 0x03) //is the next element a bit string? - { - ReadASNLength(reader); //skip the size - reader.ReadByte(); //skip unused bits indicator - if (reader.ReadByte() == 0x30) - { - ReadASNLength(reader); //skip the size - if (reader.ReadByte() == 0x02) //is it an integer? - { - int modulusSize = ReadASNLength(reader); - byte[] modulus = new byte[modulusSize]; - reader.Read(modulus, 0, modulus.Length); - if (modulus[0] == 0x00) //strip off the first byte if it's 0 - { - byte[] tempModulus = new byte[modulus.Length - 1]; - Array.Copy(modulus, 1, tempModulus, 0, modulus.Length - 1); - modulus = tempModulus; - } - - if (reader.ReadByte() == 0x02) //is it an integer? - { - int exponentSize = ReadASNLength(reader); - byte[] exponent = new byte[exponentSize]; - reader.Read(exponent, 0, exponent.Length); - - RSACryptoServiceProvider RSA = new(); - RSAParameters RSAKeyInfo = new() - { - Modulus = modulus, - Exponent = exponent - }; - RSA.ImportParameters(RSAKeyInfo); - return RSA; - } - } - } - } - return null; - } - - /// - /// Subfunction for decrypting ASN.1 (x509) RSA certificate data fields lengths - /// - /// StreamReader containing the stream to decode - /// Return the read length - - private static int ReadASNLength(System.IO.BinaryReader reader) - { - //Note: this method only reads lengths up to 4 bytes long as - //this is satisfactory for the majority of situations. - int length = reader.ReadByte(); - if ((length & 0x00000080) == 0x00000080) //is the length greater than 1 byte - { - int count = length & 0x0000000f; - byte[] lengthBytes = new byte[4]; - reader.Read(lengthBytes, 4 - count, count); - Array.Reverse(lengthBytes); // - length = BitConverter.ToInt32(lengthBytes, 0); - } - return length; - } - - /// - /// Generate a new random AES key for symmetric encryption - /// - /// Returns a byte array containing the key - - public static byte[] GenerateAESPrivateKey() - { - Aes AES = Aes.Create(); - AES.KeySize = 128; - AES.GenerateKey(); - return AES.Key; - } - - /// - /// Get a SHA-1 hash for online-mode session checking - /// - /// Server ID hash - /// Server's RSA key - /// Secret key chosen by the client - /// Returns the corresponding SHA-1 hex hash - - public static string GetServerHash(string serverID, byte[] PublicKey, byte[] SecretKey) - { - byte[] hash = Digest(new byte[][] { Encoding.GetEncoding("iso-8859-1").GetBytes(serverID), SecretKey, PublicKey }); - bool negative = (hash[0] & 0x80) == 0x80; - if (negative) { hash = TwosComplementLittleEndian(hash); } - string result = GetHexString(hash).TrimStart('0'); - if (negative) { result = "-" + result; } - return result; - } - - /// - /// Generate a SHA-1 hash using several byte arrays - /// - /// array of byte arrays to hash - /// Returns the hashed data - - private static byte[] Digest(byte[][] tohash) - { - SHA1 sha1 = SHA1.Create(); - for (int i = 0; i < tohash.Length; i++) - sha1.TransformBlock(tohash[i], 0, tohash[i].Length, tohash[i], 0); - sha1.TransformFinalBlock(Array.Empty(), 0, 0); - return sha1.Hash!; - } - - /// - /// Converts a byte array to its hex string representation - /// - /// Byte array to convert - /// Returns the string representation - - private static string GetHexString(byte[] p) - { - string result = string.Empty; - for (int i = 0; i < p.Length; i++) - result += p[i].ToString("x2"); - return result; - } - - /// - /// Compute the two's complement of a little endian byte array - /// - /// Byte array to compute - /// Returns the corresponding two's complement - - private static byte[] TwosComplementLittleEndian(byte[] p) - { - int i; - bool carry = true; - for (i = p.Length - 1; i >= 0; i--) - { - p[i] = (byte)~p[i]; - if (carry) - { - carry = p[i] == 0xFF; - p[i]++; - } - } - return p; - } - } -} diff --git a/MinecraftClient/Crypto/FastAes.cs b/MinecraftClient/Crypto/FastAes.cs deleted file mode 100644 index e423caab0c..0000000000 --- a/MinecraftClient/Crypto/FastAes.cs +++ /dev/null @@ -1,97 +0,0 @@ -using System; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Runtime.Intrinsics; -using System.Runtime.Intrinsics.X86; - -namespace MinecraftClient.Crypto -{ - // Using the AES-NI instruction set - // https://gist.github.com/Thealexbarney/9f75883786a9f3100408ff795fb95d85 - public class FastAes - { - private Vector128[] RoundKeys { get; } - - public FastAes(Span key) - { - RoundKeys = KeyExpansion(key); - } - - /// - /// Detects if the required instruction set is supported - /// - /// Is it supported - public static bool IsSupported() - { - return Sse2.IsSupported && Aes.IsSupported; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public void EncryptEcb(ReadOnlySpan plaintext, Span destination) - { - Vector128[] keys = RoundKeys; - - ReadOnlySpan> blocks = MemoryMarshal.Cast>(plaintext); - Span> dest = MemoryMarshal.Cast>(destination); - - // Makes the JIT remove all the other range checks on keys - _ = keys[10]; - - for (int i = 0; i < blocks.Length; i++) - { - Vector128 b = blocks[i]; - - b = Sse2.Xor(b, keys[0]); - b = Aes.Encrypt(b, keys[1]); - b = Aes.Encrypt(b, keys[2]); - b = Aes.Encrypt(b, keys[3]); - b = Aes.Encrypt(b, keys[4]); - b = Aes.Encrypt(b, keys[5]); - b = Aes.Encrypt(b, keys[6]); - b = Aes.Encrypt(b, keys[7]); - b = Aes.Encrypt(b, keys[8]); - b = Aes.Encrypt(b, keys[9]); - b = Aes.EncryptLast(b, keys[10]); - - dest[i] = b; - } - } - - private static Vector128[] KeyExpansion(Span key) - { - var keys = new Vector128[20]; - - keys[0] = Unsafe.ReadUnaligned>(ref key[0]); - - ExpandRound(keys, 1, Aes.KeygenAssist(keys[0], 0x01)); - ExpandRound(keys, 2, Aes.KeygenAssist(keys[1], 0x02)); - ExpandRound(keys, 3, Aes.KeygenAssist(keys[2], 0x04)); - ExpandRound(keys, 4, Aes.KeygenAssist(keys[3], 0x08)); - ExpandRound(keys, 5, Aes.KeygenAssist(keys[4], 0x10)); - ExpandRound(keys, 6, Aes.KeygenAssist(keys[5], 0x20)); - ExpandRound(keys, 7, Aes.KeygenAssist(keys[6], 0x40)); - ExpandRound(keys, 8, Aes.KeygenAssist(keys[7], 0x80)); - ExpandRound(keys, 9, Aes.KeygenAssist(keys[8], 0x1b)); - ExpandRound(keys, 10, Aes.KeygenAssist(keys[9], 0x36)); - - for (int i = 1; i < 10; i++) - { - keys[10 + i] = Aes.InverseMixColumns(keys[i]); - } - - return keys; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - private static void ExpandRound(Vector128[] keys, int i, Vector128 assist) - { - Vector128 s = keys[i - 1]; - Vector128 t = Sse2.Shuffle(assist.AsUInt32(), 0xFF).AsByte(); - - s = Sse2.Xor(s, Sse2.ShiftLeftLogical128BitLane(s, 4)); - s = Sse2.Xor(s, Sse2.ShiftLeftLogical128BitLane(s, 8)); - - keys[i] = Sse2.Xor(s, t); - } - } -} diff --git a/MinecraftClient/Dialogs/DialogFormatter.cs b/MinecraftClient/Dialogs/DialogFormatter.cs deleted file mode 100644 index 9e836e3e29..0000000000 --- a/MinecraftClient/Dialogs/DialogFormatter.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System; -using System.Linq; -using System.Text; - -namespace MinecraftClient.Dialogs; - -public static class DialogFormatter -{ - public static string DisplayTitle(this DialogDefinition definition) - { - if (!string.IsNullOrWhiteSpace(definition.ExternalTitle)) - return definition.ExternalTitle!; - - return string.IsNullOrWhiteSpace(definition.Title) ? DisplayType(definition.Type) : definition.Title; - } - - private const int BoxWidth = 50; - - public static string Render(DialogInstance instance) - { - StringBuilder builder = new(); - string border = new('-', BoxWidth); - builder.AppendLine(border); - builder.AppendLine(" " + string.Format(Translations.dialog_render_header, instance.Revision, instance.Phase, instance.Definition.DisplayTitle())); - builder.AppendLine(border); - - foreach (var body in instance.Definition.Body.Where(static body => !string.IsNullOrWhiteSpace(body.Text))) - builder.AppendLine(body.Text); - - if (instance.Definition.Inputs.Count > 0) - { - builder.AppendLine(Translations.dialog_render_inputs); - foreach (var input in instance.Definition.Inputs) - { - instance.Values.TryGetValue(input.Key, out var value); - value ??= input.InitialValue; - builder.AppendLine(string.Format(Translations.dialog_render_input, input.Key, DescribeKind(input.Kind), input.Label, value, DescribeInput(input))); - } - } - - if (instance.Definition.Actions.Count > 0) - { - builder.AppendLine(Translations.dialog_render_actions); - foreach (var action in instance.Definition.Actions) - builder.AppendLine(string.Format(Translations.dialog_render_action, action.Index, action.Label, DescribeAction(action.Action))); - } - - builder.AppendLine(); - builder.AppendLine("§o" + Translations.dialog_render_help_hint + "§r"); - builder.Append(border); - return builder.ToString(); - } - - public static string DisplayType(string rawType) - { - return rawType switch - { - "minecraft:notice" => Translations.dialog_type_notice, - "minecraft:confirmation" => Translations.dialog_type_confirmation, - "minecraft:multi_action" => Translations.dialog_type_multi_action, - "minecraft:dialog_list" => Translations.dialog_type_dialog_list, - "minecraft:server_links" => Translations.dialog_type_server_links, - _ => string.IsNullOrEmpty(rawType) ? Translations.dialog_type_unknown : rawType - }; - } - - private static string DescribeKind(DialogInputKind kind) - { - return kind switch - { - DialogInputKind.Text => Translations.dialog_input_kind_text, - DialogInputKind.Boolean => Translations.dialog_input_kind_boolean, - DialogInputKind.SingleOption => Translations.dialog_input_kind_options, - DialogInputKind.NumberRange => Translations.dialog_input_kind_number, - _ => Translations.dialog_input_kind_unknown - }; - } - - private static string DescribeInput(DialogInput input) - { - return input.Kind switch - { - DialogInputKind.Text => string.Format(Translations.dialog_input_desc_text, input.MaxLength), - DialogInputKind.Boolean => string.Format(Translations.dialog_input_desc_boolean, input.OnTrue, input.OnFalse), - DialogInputKind.SingleOption => string.Format(Translations.dialog_input_desc_options, - string.Join(", ", input.Options?.Select(static option => option.Id) ?? [])), - DialogInputKind.NumberRange => string.Format(Translations.dialog_input_desc_number, input.Start, input.End), - _ => input.Type ?? Translations.dialog_input_desc_unknown - }; - } - - private static string DescribeAction(DialogActionDefinition? action) - { - if (action is null) - return Translations.dialog_action_desc_close; - - return action.Kind switch - { - DialogActionKind.RunCommand => Translations.dialog_action_desc_command, - DialogActionKind.CustomClick => Translations.dialog_action_desc_custom, - DialogActionKind.ShowDialog => Translations.dialog_action_desc_show_dialog, - DialogActionKind.OpenUrl => Translations.dialog_action_desc_open_url, - DialogActionKind.SuggestCommand => Translations.dialog_action_desc_suggest, - DialogActionKind.CopyToClipboard => Translations.dialog_action_desc_copy, - _ => action.Type ?? Translations.dialog_action_desc_unknown - }; - } -} diff --git a/MinecraftClient/Dialogs/DialogManager.cs b/MinecraftClient/Dialogs/DialogManager.cs deleted file mode 100644 index 40876b61b9..0000000000 --- a/MinecraftClient/Dialogs/DialogManager.cs +++ /dev/null @@ -1,445 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Threading; - -namespace MinecraftClient.Dialogs; - -public sealed class DialogManager -{ - private readonly McClient _client; - private readonly Lock _lock = new(); - private readonly Dictionary _registryById = new(); - private readonly Dictionary _registryByName = new(StringComparer.Ordinal); - private readonly List _serverLinks = []; - private DialogInstance? _current; - private int _revision; - - public DialogManager(McClient client) - { - ArgumentNullException.ThrowIfNull(client); - _client = client; - } - - public event Action? DialogShown; - public event Action? DialogCleared; - - public DialogInstance? Current - { - get - { - lock (_lock) - return _current; - } - } - - public void StoreRegistryDialog(int protocolId, string resourceId, DialogDefinition definition) - { - lock (_lock) - { - _registryById[protocolId] = definition; - _registryByName[resourceId] = definition; - } - } - - public void ClearRegistry() - { - lock (_lock) - { - _registryById.Clear(); - _registryByName.Clear(); - } - } - - public void SetServerLinks(IEnumerable links) - { - lock (_lock) - { - _serverLinks.Clear(); - _serverLinks.AddRange(links); - } - } - - public DialogInstance Show(DialogDefinition definition, DialogPhase phase) - { - DialogInstance instance; - lock (_lock) - { - var expanded = ExpandServerLinks(definition); - var values = expanded.Inputs.ToDictionary(static input => input.Key, static input => input.InitialValue, StringComparer.Ordinal); - instance = new DialogInstance(++_revision, phase, expanded, values, DateTimeOffset.UtcNow); - _current = instance; - } - - _client.Log.Info("§e" + string.Format(Translations.dialog_received, instance.Definition.DisplayTitle())); - DialogShown?.Invoke(instance); - return instance; - } - - public DialogInstance ShowRegistryReference(int protocolId, DialogPhase phase) - { - DialogDefinition? definition; - lock (_lock) - _registryById.TryGetValue(protocolId, out definition); - - if (definition is not null) - return Show(definition, phase); - - var unresolved = new DialogDefinition( - "minecraft:unresolved", - string.Format(CultureInfo.InvariantCulture, Translations.dialog_unresolved_title, protocolId), - null, - CanCloseWithEscape: true, - Pause: false, - DialogAfterAction.Close, - [new DialogBody(DialogBodyKind.Unknown, string.Format(CultureInfo.InvariantCulture, Translations.dialog_unresolved_body, protocolId))], - [], - [], - null, - IsResolved: false, - UnresolvedReference: protocolId.ToString(CultureInfo.InvariantCulture)); - return Show(unresolved, phase); - } - - public void Clear() - { - int revision; - lock (_lock) - { - revision = _current?.Revision ?? _revision; - _current = null; - } - - _client.Log.Info(Translations.dialog_cleared); - DialogCleared?.Invoke(revision); - } - - public DialogActionResult Dismiss() - { - int revision; - lock (_lock) - { - if (_current is null) - return new DialogActionResult(false, Translations.dialog_none); - - revision = _current.Revision; - _current = null; - } - - DialogCleared?.Invoke(revision); - return new DialogActionResult(true, Translations.dialog_dismissed); - } - - public DialogActionResult SetInput(string key, string value) - { - lock (_lock) - { - if (_current is null) - return new DialogActionResult(false, Translations.dialog_none); - - var input = _current.Definition.Inputs.FirstOrDefault(input => input.Key.Equals(key, StringComparison.Ordinal)); - if (input is null) - return new DialogActionResult(false, string.Format(Translations.dialog_input_unknown, key)); - - var normalized = NormalizeInputValue(input, value, out var error); - if (error is not null) - return new DialogActionResult(false, error); - - var values = _current.Values.ToDictionary(static pair => pair.Key, static pair => pair.Value, StringComparer.Ordinal); - values[key] = normalized; - _current = _current with { Values = values }; - return new DialogActionResult(true, string.Format(Translations.dialog_input_set, key, normalized)); - } - } - - public DialogActionResult Click(int index) - { - DialogButton? button; - DialogInstance? instance; - lock (_lock) - { - instance = _current; - button = instance?.Definition.Actions.FirstOrDefault(action => action.Index == index); - } - - if (instance is null) - return new DialogActionResult(false, Translations.dialog_none); - - if (button is null) - return new DialogActionResult(false, string.Format(Translations.dialog_action_unknown, index)); - - return Execute(instance, button.Action, ShouldCloseAfterAction(instance.Definition.AfterAction)); - } - - public DialogActionResult ClickLabel(string label) - { - DialogButton[] matches; - DialogInstance? instance; - lock (_lock) - { - instance = _current; - matches = instance?.Definition.Actions - .Where(action => action.Label.Equals(label, StringComparison.OrdinalIgnoreCase)) - .ToArray() ?? []; - } - - if (instance is null) - return new DialogActionResult(false, Translations.dialog_none); - - return matches.Length switch - { - 0 => new DialogActionResult(false, string.Format(Translations.dialog_action_label_unknown, label)), - > 1 => new DialogActionResult(false, string.Format(Translations.dialog_action_label_ambiguous, label)), - _ => Execute(instance, matches[0].Action, ShouldCloseAfterAction(instance.Definition.AfterAction)) - }; - } - - public DialogActionResult Cancel() - { - DialogInstance? instance; - lock (_lock) - instance = _current; - - if (instance is null) - return new DialogActionResult(false, Translations.dialog_none); - - if (!instance.Definition.CanCloseWithEscape && instance.Definition.CancelAction is null) - return new DialogActionResult(false, Translations.dialog_cannot_cancel); - - return Execute(instance, instance.Definition.CancelAction, closeWhenDone: true); - } - - private DialogActionResult Execute(DialogInstance instance, DialogActionDefinition? action, bool closeWhenDone) - { - if (!instance.Definition.IsResolved) - return new DialogActionResult(false, Translations.dialog_unresolved_action_disabled); - - if (action is null || action.Kind == DialogActionKind.None) - { - if (closeWhenDone) - _ = Dismiss(); - return new DialogActionResult(true, Translations.dialog_action_closed); - } - - var values = BuildActionValues(instance); - switch (action.Kind) - { - case DialogActionKind.RunCommand: - if (instance.Phase != DialogPhase.Play) - return new DialogActionResult(false, Translations.dialog_action_command_not_in_play); - - var command = ApplyTemplate(action.Value ?? string.Empty, values.TemplateValues); - _client.SendText(command); - if (closeWhenDone) - _ = Dismiss(); - return new DialogActionResult(true, string.Format(Translations.dialog_action_command_sent, command)); - - case DialogActionKind.CustomClick: - if (action.Id is null) - return new DialogActionResult(false, Translations.dialog_action_invalid); - - var payload = action.Type == "minecraft:custom" && action.Payload is null && values.TagValues.Count == 0 - ? null - : MergePayload(action.Payload, values.TagValues); - if (!_client.SendCustomClickAction(action.Id, payload)) - return new DialogActionResult(false, Translations.dialog_action_custom_failed); - - if (closeWhenDone) - _ = Dismiss(); - return new DialogActionResult(true, string.Format(Translations.dialog_action_custom_sent, action.Id)); - - case DialogActionKind.ShowDialog: - if (action.NestedDialog is not null) - { - Show(action.NestedDialog, instance.Phase); - return new DialogActionResult(true, Translations.dialog_action_nested_opened); - } - - if (action.DialogReferenceId is int referenceId) - { - ShowRegistryReference(referenceId, instance.Phase); - return new DialogActionResult(true, Translations.dialog_action_nested_opened); - } - - if (action.Value is not null) - { - DialogDefinition? referencedDialog; - lock (_lock) - _registryByName.TryGetValue(action.Value, out referencedDialog); - - if (referencedDialog is not null) - { - Show(referencedDialog, instance.Phase); - return new DialogActionResult(true, Translations.dialog_action_nested_opened); - } - } - - return new DialogActionResult(false, Translations.dialog_action_invalid); - - case DialogActionKind.OpenUrl: - return new DialogActionResult(true, string.Format(Translations.dialog_action_open_url, action.Value ?? string.Empty)); - - case DialogActionKind.SuggestCommand: - return new DialogActionResult(true, string.Format(Translations.dialog_action_suggest_command, action.Value ?? string.Empty)); - - case DialogActionKind.CopyToClipboard: - return new DialogActionResult(true, string.Format(Translations.dialog_action_copy, action.Value ?? string.Empty)); - - default: - return new DialogActionResult(false, string.Format(Translations.dialog_action_unsupported, action.Type ?? action.Kind.ToString())); - } - } - - private static bool ShouldCloseAfterAction(DialogAfterAction afterAction) - { - return afterAction == DialogAfterAction.Close; - } - - private DialogDefinition ExpandServerLinks(DialogDefinition definition) - { - if (!definition.Type.Equals("minecraft:server_links", StringComparison.Ordinal)) - return definition; - - var linkActions = _serverLinks - .Select((link, index) => new DialogButton( - index + 1, - link.Label, - new DialogActionDefinition(DialogActionKind.OpenUrl, Value: link.Url))) - .ToList(); - - if (definition.Actions.Count > 0) - linkActions.AddRange(definition.Actions.Select((button, i) => button with { Index = linkActions.Count + i + 1 })); - - return definition with { Actions = linkActions }; - } - - private static DialogActionValues BuildActionValues(DialogInstance instance) - { - Dictionary templateValues = new(StringComparer.Ordinal); - Dictionary tagValues = new(StringComparer.Ordinal); - - foreach (var input in instance.Definition.Inputs) - { - instance.Values.TryGetValue(input.Key, out var value); - value ??= input.InitialValue; - templateValues[input.Key] = ToTemplateValue(input, value); - tagValues[input.Key] = ToNbtValue(input, value); - } - - return new DialogActionValues(templateValues, tagValues); - } - - private static Dictionary MergePayload(Dictionary? basePayload, Dictionary inputTags) - { - Dictionary payload = basePayload is null - ? new(StringComparer.Ordinal) - : new(basePayload, StringComparer.Ordinal); - - foreach (var (key, value) in inputTags) - payload[key] = value; - - return payload; - } - - private static string NormalizeInputValue(DialogInput input, string value, out string? error) - { - error = null; - switch (input.Kind) - { - case DialogInputKind.Text: - if (value.Length > input.MaxLength) - { - error = string.Format(Translations.dialog_input_too_long, input.Key, input.MaxLength); - return input.InitialValue; - } - return value; - - case DialogInputKind.Boolean: - if (bool.TryParse(value, out var boolValue)) - return boolValue ? "true" : "false"; - - if (value.Equals(input.OnTrue, StringComparison.OrdinalIgnoreCase)) - return "true"; - - if (value.Equals(input.OnFalse, StringComparison.OrdinalIgnoreCase)) - return "false"; - - error = string.Format(Translations.dialog_input_boolean_invalid, input.Key); - return input.InitialValue; - - case DialogInputKind.SingleOption: - if (input.Options?.Any(option => option.Id.Equals(value, StringComparison.Ordinal)) == true) - return value; - - error = string.Format(Translations.dialog_input_option_invalid, input.Key); - return input.InitialValue; - - case DialogInputKind.NumberRange: - if (!float.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out var number)) - { - error = string.Format(Translations.dialog_input_number_invalid, input.Key); - return input.InitialValue; - } - - var min = Math.Min(input.Start, input.End); - var max = Math.Max(input.Start, input.End); - if (number < min || number > max) - { - error = string.Format(CultureInfo.InvariantCulture, Translations.dialog_input_number_range_invalid, input.Key, min, max); - return input.InitialValue; - } - - return NumberToString(number); - - default: - return value; - } - } - - private static string ToTemplateValue(DialogInput input, string value) - { - return input.Kind switch - { - DialogInputKind.Boolean => value.Equals("true", StringComparison.OrdinalIgnoreCase) ? input.OnTrue : input.OnFalse, - DialogInputKind.Text => EscapeStringTagWithoutQuotes(value), - _ => value - }; - } - - private static object ToNbtValue(DialogInput input, string value) - { - return input.Kind switch - { - DialogInputKind.Boolean => (byte)(value.Equals("true", StringComparison.OrdinalIgnoreCase) ? 1 : 0), - DialogInputKind.NumberRange when float.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out var number) => number, - _ => value - }; - } - - private static string ApplyTemplate(string template, IReadOnlyDictionary values) - { - var result = template; - foreach (var (key, value) in values) - result = result.Replace("$(" + key + ")", value, StringComparison.Ordinal); - - return result; - } - - private static string EscapeStringTagWithoutQuotes(string value) - { - return value.Replace("\\", "\\\\", StringComparison.Ordinal).Replace("\"", "\\\"", StringComparison.Ordinal); - } - - private static string NumberToString(float value) - { - var integer = (int)value; - return integer == value - ? integer.ToString(CultureInfo.InvariantCulture) - : value.ToString(CultureInfo.InvariantCulture); - } - - private sealed record DialogActionValues( - IReadOnlyDictionary TemplateValues, - Dictionary TagValues); -} diff --git a/MinecraftClient/Dialogs/DialogModels.cs b/MinecraftClient/Dialogs/DialogModels.cs deleted file mode 100644 index fc40b480a0..0000000000 --- a/MinecraftClient/Dialogs/DialogModels.cs +++ /dev/null @@ -1,110 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace MinecraftClient.Dialogs; - -public enum DialogPhase -{ - Configuration, - Play -} - -public enum DialogAfterAction -{ - Close, - None, - WaitForResponse -} - -public enum DialogBodyKind -{ - PlainMessage, - Item, - Unknown -} - -public enum DialogInputKind -{ - Text, - Boolean, - SingleOption, - NumberRange, - Unknown -} - -public enum DialogActionKind -{ - None, - RunCommand, - CustomClick, - ShowDialog, - OpenUrl, - SuggestCommand, - CopyToClipboard, - Unknown -} - -public sealed record DialogBody(DialogBodyKind Kind, string Text, string? Type = null); - -public sealed record DialogOption(string Id, string Display, bool Initial) -{ - public override string ToString() - { - return string.IsNullOrWhiteSpace(Display) ? Id : Display; - } -} - -public sealed record DialogInput( - string Key, - DialogInputKind Kind, - string Label, - string InitialValue, - int MaxLength = 32, - bool LabelVisible = true, - bool Multiline = false, - IReadOnlyList? Options = null, - string OnTrue = "true", - string OnFalse = "false", - float Start = 0, - float End = 1, - float? InitialNumber = null, - float? Step = null, - string? Type = null); - -public sealed record DialogActionDefinition( - DialogActionKind Kind, - string? Value = null, - string? Id = null, - Dictionary? Payload = null, - DialogDefinition? NestedDialog = null, - int? DialogReferenceId = null, - string? Type = null); - -public sealed record DialogButton(int Index, string Label, DialogActionDefinition? Action, bool IsCancel = false); - -public sealed record DialogServerLink(string Label, string Url); - -public sealed record DialogDefinition( - string Type, - string Title, - string? ExternalTitle, - bool CanCloseWithEscape, - bool Pause, - DialogAfterAction AfterAction, - IReadOnlyList Body, - IReadOnlyList Inputs, - IReadOnlyList Actions, - DialogActionDefinition? CancelAction, - int Columns = 1, - int ButtonWidth = 150, - bool IsResolved = true, - string? UnresolvedReference = null); - -public sealed record DialogInstance( - int Revision, - DialogPhase Phase, - DialogDefinition Definition, - IReadOnlyDictionary Values, - DateTimeOffset ReceivedAt); - -public sealed record DialogActionResult(bool Success, string Message); diff --git a/MinecraftClient/ExtensionMethods.cs b/MinecraftClient/ExtensionMethods.cs deleted file mode 100644 index f21b97bdf6..0000000000 --- a/MinecraftClient/ExtensionMethods.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Linq; - -namespace MinecraftClient -{ - public static class ExtensionMethods - { - public static string ToUnderscoreCase(this string str) - { - return string.Concat(str.Select((x, i) => i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString())).ToLower(); - } - } -} diff --git a/MinecraftClient/FileMonitor.cs b/MinecraftClient/FileMonitor.cs deleted file mode 100644 index 16f590a4f1..0000000000 --- a/MinecraftClient/FileMonitor.cs +++ /dev/null @@ -1,161 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; -using System.Threading; - -namespace MinecraftClient -{ - /// - /// Monitor file changes on disk - /// - public class FileMonitor : IDisposable - { - private readonly Tuple? monitor = null; - private readonly Tuple? polling = null; - - /// - /// Create a new FileMonitor and start monitoring - /// - /// Folder to monitor - /// Filename inside folder - /// Callback for file changes - public FileMonitor(string folder, string filename, FileSystemEventHandler handler) - { - if (Settings.Config.Logging.DebugMessages) - { - string callerClass = new System.Diagnostics.StackFrame(1).GetMethod()!.DeclaringType!.Name; - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.filemonitor_init, callerClass, Path.Combine(folder, filename))); - } - - try - { - monitor = new Tuple(new FileSystemWatcher(), new CancellationTokenSource()); - monitor.Item1.Path = folder; - monitor.Item1.IncludeSubdirectories = false; - monitor.Item1.Filter = filename; - monitor.Item1.NotifyFilter = NotifyFilters.LastWrite; - monitor.Item1.Changed += handler; - monitor.Item1.EnableRaisingEvents = true; - } - catch - { - if (Settings.Config.Logging.DebugMessages) - { - string callerClass = new System.Diagnostics.StackFrame(1).GetMethod()!.DeclaringType!.Name; - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.filemonitor_fail, callerClass)); - } - - monitor = null; - var cancellationTokenSource = new CancellationTokenSource(); - polling = new Tuple(new Thread(() => PollingThread(folder, filename, handler, cancellationTokenSource.Token)), cancellationTokenSource); - polling.Item1.Name = String.Format("{0} Polling thread: {1}", GetType().Name, Path.Combine(folder, filename)); - polling.Item1.Start(); - } - } - - /// - /// Stop monitoring and dispose the inner resources - /// - public void Dispose() - { - if (monitor is not null) - monitor.Item1.Dispose(); - if (polling is not null) - polling.Item2.Cancel(); - } - - /// - /// Fallback polling thread for use when operating system does not support FileSystemWatcher - /// - /// Folder to monitor - /// File name to monitor - /// Callback when file changes - private void PollingThread(string folder, string filename, FileSystemEventHandler handler, CancellationToken cancellationToken) - { - string filePath = Path.Combine(folder, filename); - DateTime lastWrite = GetLastWrite(filePath); - while (!cancellationToken.IsCancellationRequested) - { - Thread.Sleep(5000); - DateTime lastWriteNew = GetLastWrite(filePath); - if (lastWriteNew != lastWrite) - { - lastWrite = lastWriteNew; - handler(this, new FileSystemEventArgs(WatcherChangeTypes.Changed, folder, filename)); - } - } - } - - /// - /// Get last write for a given file - /// - /// File path to get last write from - /// Last write time, or DateTime.MinValue if the file does not exist - private DateTime GetLastWrite(string path) - { - FileInfo fileInfo = new(path); - if (fileInfo.Exists) - { - return fileInfo.LastWriteTime; - } - else return DateTime.MinValue; - } - - /// - /// Opens a text file, reads all lines of the file, and then closes the file. Retry several times if the file is in use - /// - /// The file to open for reading - /// Maximum read attempts - /// Encoding (default is UTF8) - /// Thrown when failing to read the file despite multiple retries - /// All lines - public static string[] ReadAllLinesWithRetries(string filePath, int maxTries = 3, Encoding? encoding = null) - { - int attempt = 0; - encoding ??= Encoding.UTF8; - while (true) - { - try - { - return File.ReadAllLines(filePath, encoding); - } - catch (IOException) - { - attempt++; - if (attempt < maxTries) - Thread.Sleep(new Random().Next(50, 100) * attempt); // Back-off like CSMA/CD - else throw; - } - } - } - - /// - /// Creates a new file, writes a collection of strings to the file, and then closes the file. - /// - /// The file to open for writing - /// The lines to write to the file - /// Maximum read attempts - /// Encoding (default is UTF8) - public static void WriteAllLinesWithRetries(string filePath, IEnumerable lines, int maxTries = 3, Encoding? encoding = null) - { - int attempt = 0; - encoding ??= Encoding.UTF8; - while (true) - { - try - { - File.WriteAllLines(filePath, lines, encoding); - return; - } - catch (IOException) - { - attempt++; - if (attempt < maxTries) - Thread.Sleep(new Random().Next(50, 100) * attempt); // Back-off like CSMA/CD - else throw; - } - } - } - } -} diff --git a/MinecraftClient/IConsoleBackend.cs b/MinecraftClient/IConsoleBackend.cs deleted file mode 100644 index 0fd2338928..0000000000 --- a/MinecraftClient/IConsoleBackend.cs +++ /dev/null @@ -1,73 +0,0 @@ -using System; - -namespace MinecraftClient -{ - /// - /// Input buffer state passed with OnInputChange events. - /// - public readonly struct ConsoleInputBuffer - { - public string Text { get; } - public int CursorPosition { get; } - - public ConsoleInputBuffer(string text, int cursorPosition) - { - Text = text; - CursorPosition = cursorPosition; - } - } - - /// - /// Backend-independent suggestion item used by the TUI autocomplete popup. - /// Mirrors the shape of ConsoleInteractive.ConsoleSuggestion.Suggestion - /// without requiring a dependency on the ConsoleInteractive assembly. - /// - public readonly struct CommandSuggestion - { - public string Text { get; } - public string Tooltip { get; } - - public CommandSuggestion(string text, string tooltip = "") - { - Text = text; - Tooltip = tooltip; - } - } - - /// - /// Abstraction over the console I/O backend. - /// Implementations: ClassicConsoleBackend (ConsoleInteractive), TuiConsoleBackend (Avalonia/Consolonia), BasicConsoleBackend (stdio). - /// - public interface IConsoleBackend - { - void Init(); - - void WriteLine(string text); - - void WriteLineFormatted(string text); - - void BeginReadThread(); - - void StopReadThread(); - - event EventHandler? MessageReceived; - - event EventHandler? OnInputChange; - - string RequestImmediateInput(); - - string? ReadPassword(); - - void ClearInputBuffer(); - - void ClearScreen(); - - bool DisplayUserInput { get; set; } - - void SetInputVisible(bool visible); - - void SetBackreadBufferLimit(int limit); - - void Shutdown(); - } -} diff --git a/MinecraftClient/INIFile.cs b/MinecraftClient/INIFile.cs deleted file mode 100644 index 87f8de7ec9..0000000000 --- a/MinecraftClient/INIFile.cs +++ /dev/null @@ -1,134 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Text; - -namespace MinecraftClient -{ - /// - /// INI File tools for parsing and generating user-friendly INI files - /// By ORelio (c) 2014-2020 - CDDL 1.0 - /// - static class INIFile - { - /// - /// Parse a INI file into a dictionary. - /// Values can be accessed like this: dict["section"]["setting"] - /// - /// INI file to parse - /// INI sections and keys will be converted to lowercase unless this parameter is set to false - /// If failed to read the file - /// Parsed data from INI file - public static Dictionary> ParseFile(string iniFile, bool lowerCase = true) - { - return ParseFile(File.ReadAllLines(iniFile, Encoding.UTF8), lowerCase); - } - - /// - /// Parse a INI file into a dictionary. - /// Values can be accessed like this: dict["section"]["setting"] - /// - /// INI file content to parse - /// INI sections and keys will be converted to lowercase unless this parameter is set to false - /// If failed to read the file - /// Parsed data from INI file - public static Dictionary> ParseFile(IEnumerable lines, bool lowerCase = true) - { - var iniContents = new Dictionary>(); - string iniSection = "default"; - foreach (string lineRaw in lines) - { - string line = lineRaw.Split('#')[0].Trim(); - if (line.Length > 0 && line[0] != ';') - { - if (line[0] == '[' && line[^1] == ']') - { - iniSection = line[1..^1]; - if (lowerCase) - iniSection = iniSection.ToLower(); - } - else - { - string argName = line.Split('=')[0]; - if (lowerCase) - argName = argName.ToLower(); - if (line.Length > (argName.Length + 1)) - { - string argValue = line[(argName.Length + 1)..]; - if (!iniContents.ContainsKey(iniSection)) - iniContents[iniSection] = new Dictionary(); - iniContents[iniSection][argName] = argValue; - } - } - } - } - return iniContents; - } - - /// - /// Write given data into an INI file - /// - /// File to write into - /// Data to put into the file - /// INI file description, inserted as a comment on first line of the INI file - /// Automatically change first char of section and keys to uppercase - public static void WriteFile(string iniFile, Dictionary> contents, string? description = null, bool autoCase = true) - { - File.WriteAllLines(iniFile, Generate(contents, description, autoCase), Encoding.UTF8); - } - - /// - /// Generate given data into the INI format - /// - /// Data to put into the INI format - /// INI file description, inserted as a comment on first line of the INI file - /// Automatically change first char of section and keys to uppercase - /// Lines of the INI file - public static string[] Generate(Dictionary> contents, string? description = null, bool autoCase = true) - { - List lines = new(); - if (!String.IsNullOrWhiteSpace(description)) - lines.Add('#' + description); - foreach (var section in contents) - { - if (lines.Count > 0) - lines.Add(""); - if (!String.IsNullOrEmpty(section.Key)) - { - lines.Add("[" + (autoCase ? char.ToUpper(section.Key[0]) + section.Key[1..] : section.Key) + ']'); - foreach (var item in section.Value) - if (!String.IsNullOrEmpty(item.Key)) - lines.Add((autoCase ? char.ToUpper(item.Key[0]) + item.Key[1..] : item.Key) + '=' + item.Value); - } - } - return lines.ToArray(); - } - - /// - /// Convert an integer from a string or return 0 if failed to parse - /// - /// String to parse - /// Int value - public static int Str2Int(string str) - { - try - { - return Convert.ToInt32(str); - } - catch - { - return 0; - } - } - - /// - /// Convert a 0/1 or True/False value to boolean - /// - /// String to parse - /// Boolean value - public static bool Str2Bool(string str) - { - return str.ToLower() == "true" || str == "1"; - } - } -} diff --git a/MinecraftClient/Inventory/BookContent.cs b/MinecraftClient/Inventory/BookContent.cs deleted file mode 100644 index 262e468002..0000000000 --- a/MinecraftClient/Inventory/BookContent.cs +++ /dev/null @@ -1,183 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text.Json; -using MinecraftClient.Protocol.Handlers; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Inventory; - -public enum BookHand -{ - Main = 0, - Off = 1 -} - -public sealed record BookLimits(int MaxPages, int MaxPageLength, int MaxTitleLength) -{ - public static BookLimits ForProtocol(int protocolVersion) - { - int maxPageLength = protocolVersion switch - { - >= Protocol18Handler.MC_1_21_2_Version => 1024, - >= Protocol18Handler.MC_1_17_Version => 8192, - _ => 32767 - }; - - int maxTitleLength = protocolVersion switch - { - >= Protocol18Handler.MC_1_21_2_Version => 32, - >= Protocol18Handler.MC_1_17_Version => 128, - _ => 16 - }; - - return new BookLimits(100, maxPageLength, maxTitleLength); - } -} - -public sealed record BookContent( - IReadOnlyList Pages, - string? Title, - string? Author, - int Generation, - bool IsSigned) -{ - public static BookContent EmptyWritable { get; } = new([string.Empty], null, null, 0, false); -} - -public static class BookContentHelper -{ - public static bool IsBook(Item? item) => item?.Type is ItemType.WritableBook or ItemType.WrittenBook; - - public static bool IsWritableBook(Item? item) => item?.Type == ItemType.WritableBook; - - public static bool TryRead(Item? item, out BookContent content) - { - content = BookContent.EmptyWritable; - - if (item is null || item.IsEmpty) - return false; - - return item.Type switch - { - ItemType.WritableBook => TryReadWritable(item, out content), - ItemType.WrittenBook => TryReadWritten(item, out content), - _ => false - }; - } - - public static Item CreateWritablePayload(Item currentBook, IReadOnlyList pages) - { - return new Item(ItemType.WritableBook, 1, currentBook.Data, new Dictionary - { - ["pages"] = pages.Cast().ToArray() - }); - } - - public static Item CreateWrittenPayload(Item currentBook, IReadOnlyList pages, string title, string author, bool encodePagesAsJson) - { - object[] encodedPages = pages - .Select(page => encodePagesAsJson ? ToJsonTextComponent(page) : page) - .Cast() - .ToArray(); - - return new Item(ItemType.WrittenBook, 1, currentBook.Data, new Dictionary - { - ["author"] = author, - ["title"] = title, - ["pages"] = encodedPages - }); - } - - public static IReadOnlyList NormalizePages(IEnumerable pages) - { - string[] normalized = pages.Select(page => page ?? string.Empty).ToArray(); - return normalized.Length == 0 ? [string.Empty] : normalized; - } - - private static bool TryReadWritable(Item item, out BookContent content) - { - if (item.Components is not null) - { - var component = item.Components.OfType().FirstOrDefault(); - if (component is not null) - { - content = new BookContent( - NormalizePages(component.Pages.Select(page => page.RawContent)), - null, - null, - 0, - IsSigned: false); - return true; - } - } - - content = new BookContent(ReadStringList(item.NBT, "pages", parseJson: false), null, null, 0, IsSigned: false); - return true; - } - - private static bool TryReadWritten(Item item, out BookContent content) - { - if (item.Components is not null) - { - var component = item.Components.OfType().FirstOrDefault(); - if (component is not null) - { - content = new BookContent( - NormalizePages(component.Pages.Select(page => page.RawContent)), - component.RawTitle, - component.Author, - component.Generation, - IsSigned: true); - return true; - } - } - - string? title = ReadString(item.NBT, "title"); - string? author = ReadString(item.NBT, "author"); - int generation = ReadInt(item.NBT, "generation"); - content = new BookContent(ReadStringList(item.NBT, "pages", parseJson: true), title, author, generation, IsSigned: true); - return true; - } - - private static IReadOnlyList ReadStringList(Dictionary? nbt, string key, bool parseJson) - { - if (nbt is null || !nbt.TryGetValue(key, out object? value) || value is not object[] values) - return [string.Empty]; - - string[] pages = values - .Select(value => value?.ToString() ?? string.Empty) - .Select(value => parseJson ? ChatParser.ParseText(value) : value) - .ToArray(); - - return pages.Length == 0 ? [string.Empty] : pages; - } - - private static string? ReadString(Dictionary? nbt, string key) - { - return nbt is not null && nbt.TryGetValue(key, out object? value) - ? value?.ToString() - : null; - } - - private static int ReadInt(Dictionary? nbt, string key) - { - if (nbt is null || !nbt.TryGetValue(key, out object? value) || value is null) - return 0; - - return value switch - { - int i => i, - short s => s, - byte b => b, - _ when int.TryParse(value.ToString(), out int parsed) => parsed, - _ => 0 - }; - } - - private static string ToJsonTextComponent(string text) - { - return JsonSerializer.Serialize(new Dictionary { ["text"] = text }); - } -} diff --git a/MinecraftClient/Inventory/BookPage.cs b/MinecraftClient/Inventory/BookPage.cs deleted file mode 100644 index 9240d77e67..0000000000 --- a/MinecraftClient/Inventory/BookPage.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory; - -public record BookPage( - string RawContent, - bool HasFilteredContent, - string? FilteredContent, - Dictionary? RawContentNbt = null, - Dictionary? FilteredContentNbt = null); \ No newline at end of file diff --git a/MinecraftClient/Inventory/Container.cs b/MinecraftClient/Inventory/Container.cs deleted file mode 100644 index f2258fee63..0000000000 --- a/MinecraftClient/Inventory/Container.cs +++ /dev/null @@ -1,271 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory -{ - /// - /// Represents a Minecraft inventory (player inventory, chest, etc.) - /// - public class Container - { - /// - /// ID of the container on the server - /// - public int ID; - - /// - /// Type of container - /// - public ContainerType Type; - - /// - /// title of container - /// - public string? Title; - - /// - /// state of container - /// - public int StateID; - - /// - /// Container Items - /// - public Dictionary Items; - - /// - /// Container Properties - /// Used for Frunaces, Enchanting Table, Beacon, Brewing stand, Stone cutter, Loom and Lectern - /// More info about: https://wiki.vg/Protocol#Set_Container_Property - /// - public Dictionary Properties; - - /// - /// Create an empty container with ID, Type and Title - /// - /// Container ID - /// Container Type - /// Container Title - public Container(int id, ContainerType type, string title) - { - ID = id; - Type = type; - Title = title; - Items = new(); - Properties = new(); - } - - /// - /// Create a container with ID, Type, Title and Items - /// - /// Container ID - /// Container Type - /// Container Title - /// Container Items (key: slot ID, value: item info) - public Container(int id, ContainerType type, string? title, Dictionary items) - { - ID = id; - Type = type; - Title = title; - Items = items; - Properties = new(); - } - - /// - /// Create an empty container with ID, Type and Title - /// - /// Container ID - /// Container Type - /// Container title - public Container(int id, ContainerTypeOld type, string title) - { - ID = id; - Title = title; - Type = ConvertType.ToNew(type); - Items = new(); - Properties = new(); - } - - /// - /// Create an empty container with ID, Type and Title - /// - /// Container ID - /// Container Type - /// Container Title - /// Protocol version for version-specific mapping - public Container(int id, int typeID, string title, int protocolVersion = 0) - { - ID = id; - Type = GetContainerType(typeID, protocolVersion); - Title = title; - Items = new(); - Properties = new(); - } - - /// - /// Create an empty container with Type - /// - /// Container Type - public Container(ContainerType type) - { - ID = -1; - Type = type; - Title = null; - Items = new(); - Properties = new(); - } - - /// - /// Create an empty container with T^ype and Items - /// - /// Container Type - /// Container Items (key: slot ID, value: item info) - public Container(ContainerType type, Dictionary items) - { - ID = -1; - Type = type; - Title = null; - Items = items; - Properties = new(); - } - - /// - /// Get container type from Type ID - /// - /// Container Type ID - /// Protocol version (menu registry changed across versions) - /// Container Type - public static ContainerType GetContainerType(int typeID, int protocolVersion = 0) - { - // MC 1.20.4 (protocol 765) added crafter_3x3 at index 7, shifting all subsequent IDs by +1. - // Registry order from decompiled MenuType.java: - // 1.14-1.20.2: generic_9x1..generic_3x3(6), anvil(7), beacon(8), ... stonecutter(22) - // 1.20.4+: generic_9x1..generic_3x3(6), crafter_3x3(7), anvil(8), beacon(9), ... stonecutter(24) - if (protocolVersion >= 765) - { - return typeID switch - { -#pragma warning disable format // @formatter:off - 0 => ContainerType.Generic_9x1, - 1 => ContainerType.Generic_9x2, - 2 => ContainerType.Generic_9x3, - 3 => ContainerType.Generic_9x4, - 4 => ContainerType.Generic_9x5, - 5 => ContainerType.Generic_9x6, - 6 => ContainerType.Generic_3x3, - 7 => ContainerType.Crafter, - 8 => ContainerType.Anvil, - 9 => ContainerType.Beacon, - 10 => ContainerType.BlastFurnace, - 11 => ContainerType.BrewingStand, - 12 => ContainerType.Crafting, - 13 => ContainerType.Enchantment, - 14 => ContainerType.Furnace, - 15 => ContainerType.Grindstone, - 16 => ContainerType.Hopper, - 17 => ContainerType.Lectern, - 18 => ContainerType.Loom, - 19 => ContainerType.Merchant, - 20 => ContainerType.ShulkerBox, - 21 => ContainerType.SmightingTable, - 22 => ContainerType.Smoker, - 23 => ContainerType.Cartography, - 24 => ContainerType.Stonecutter, - _ => ContainerType.Unknown, -#pragma warning restore format // @formatter:on - }; - } - - return typeID switch - { -#pragma warning disable format // @formatter:off - 0 => ContainerType.Generic_9x1, - 1 => ContainerType.Generic_9x2, - 2 => ContainerType.Generic_9x3, - 3 => ContainerType.Generic_9x4, - 4 => ContainerType.Generic_9x5, - 5 => ContainerType.Generic_9x6, - 6 => ContainerType.Generic_3x3, - 7 => ContainerType.Anvil, - 8 => ContainerType.Beacon, - 9 => ContainerType.BlastFurnace, - 10 => ContainerType.BrewingStand, - 11 => ContainerType.Crafting, - 12 => ContainerType.Enchantment, - 13 => ContainerType.Furnace, - 14 => ContainerType.Grindstone, - 15 => ContainerType.Hopper, - 16 => ContainerType.Lectern, - 17 => ContainerType.Loom, - 18 => ContainerType.Merchant, - 19 => ContainerType.ShulkerBox, - 20 => ContainerType.Smoker, - 21 => ContainerType.Cartography, - 22 => ContainerType.Stonecutter, - _ => ContainerType.Unknown, -#pragma warning restore format // @formatter:on - }; - } - - /// - /// Search an item in the container - /// - /// The item to search - /// An array of slot ID - public int[] SearchItem(ItemType itemType) - { - List result = new(); - if (Items is not null) - { - foreach (var item in Items) - { - if (item.Value.Type == itemType) - result.Add(item.Key); - } - } - return result.ToArray(); - } - - /// - /// List empty slots in the container - /// - /// An array of slot ID - /// Also depending on the container type, some empty slots cannot be used e.g. armor slots. This might cause issues. - public int[] GetEmpytSlots() - { - List result = new(); - for (int i = 0; i < Type.SlotCount(); i++) - { - result.Add(i); - } - foreach (var item in Items) - { - result.Remove(item.Key); - } - return result.ToArray(); - } - - /// - /// Check the given slot ID is a hotbar slot and give the hotbar number - /// - /// The slot ID to check - /// Zero-based, 0-8. -1 if not a hotbar - /// True if given slot ID is a hotbar slot - public bool IsHotbar(int slotId, out int hotbar) - { - int hotbarStart = Type.SlotCount() - 9; - // Remove offhand slot - if (Type == ContainerType.PlayerInventory) - hotbarStart--; - if ((slotId >= hotbarStart) && (slotId <= hotbarStart + 9)) - { - hotbar = slotId - hotbarStart; - return true; - } - else - { - hotbar = -1; - return false; - } - } - } -} diff --git a/MinecraftClient/Inventory/ContainerExtensions.cs b/MinecraftClient/Inventory/ContainerExtensions.cs deleted file mode 100644 index 6e6306356d..0000000000 --- a/MinecraftClient/Inventory/ContainerExtensions.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System; - -namespace MinecraftClient.Inventory; - -using System.Linq; -using System.Linq.Expressions; - -public enum ComparisonType -{ - Equals, - NotEquals, - Less, - LessOrEqual, - Greater, - GreaterOrEqual -} - -public static class ContainerExtensions -{ - public static bool IsFull(this Container container) => - container.Items.Values.All(item => item.Count >= item.Type.StackCount()); - - public static int FirstEmptySlot(this Container container) => - container.Items.FirstOrDefault(slot => slot.Value.IsEmpty).Key; - - public static int FirstSlotWithItem(this Container container, ItemType type, int? count = null, - ComparisonType comparison = ComparisonType.Equals) => - container.Items.FirstOrDefault(slot => - slot.Value.Type == type && - (!count.HasValue || CompareCounts(slot.Value.Count, count.Value, comparison))).Key; - - public static int LastSlotWithItem(this Container container, ItemType type, int? count = null, - ComparisonType comparison = ComparisonType.Equals) => - container.Items.LastOrDefault(slot => - slot.Value.Type == type && - (!count.HasValue || CompareCounts(slot.Value.Count, count.Value, comparison))) - .Key; - - // We could have used "Expression> comparison = null" instead of "ComparisonType comparison", but it would look ugly to use - private static bool CompareCounts(int value1, int value2, ComparisonType comparison) - { - var left = Expression.Constant(value1); - var right = Expression.Constant(value2); - - Expression binaryExpression = comparison switch - { - ComparisonType.Less => Expression.LessThan(left, right), - ComparisonType.LessOrEqual => Expression.LessThanOrEqual(left, right), - ComparisonType.Greater => Expression.GreaterThan(left, right), - ComparisonType.GreaterOrEqual => Expression.GreaterThanOrEqual(left, right), - ComparisonType.Equals => Expression.Equal(left, right), - ComparisonType.NotEquals => Expression.NotEqual(left, right), - _ => Expression.Equal(left, right) - }; - - return Expression.Lambda>(binaryExpression).Compile().Invoke(); - } -} \ No newline at end of file diff --git a/MinecraftClient/Inventory/ContainerType.cs b/MinecraftClient/Inventory/ContainerType.cs deleted file mode 100644 index e82878fe92..0000000000 --- a/MinecraftClient/Inventory/ContainerType.cs +++ /dev/null @@ -1,76 +0,0 @@ -namespace MinecraftClient.Inventory -{ - // For MC 1.14 after ONLY - public enum ContainerType - { - Generic_9x1, - Generic_9x2, - Generic_9x3, // chest, ender chest, minecart with chest, barrel - Generic_9x4, - Generic_9x5, - Generic_9x6, - Generic_3x3, - Crafter, - Anvil, - Beacon, - BlastFurnace, - BrewingStand, - Crafting, - Enchantment, - Furnace, - Grindstone, - Hopper, - Lectern, - Loom, - Merchant, - ShulkerBox, - SmightingTable, - Smoker, - Cartography, - Stonecutter, - // not in the wiki.vg list - PlayerInventory, - Unknown - } - public enum ContainerTypeOld - { - CONTAINER, - CHEST, - CRAFTING_TABLE, - FURNACE, - DISPENSER, - ENCHANTING_TABLE, - BREWING_STAND, - VILLAGER, - BEACON, - ANVIL, - HOPPER, - DROPPER, - SHULKER_BOX, - ENTITYHORSE - } - public static class ConvertType - { - public static ContainerType ToNew(ContainerTypeOld type) - { - return type switch - { -#pragma warning disable format // @formatter:off - ContainerTypeOld.CONTAINER => ContainerType.Unknown, - ContainerTypeOld.CHEST => ContainerType.Generic_9x3, - ContainerTypeOld.CRAFTING_TABLE => ContainerType.Crafting, - ContainerTypeOld.FURNACE => ContainerType.Furnace, - ContainerTypeOld.DISPENSER => ContainerType.Generic_3x3, - ContainerTypeOld.ENCHANTING_TABLE => ContainerType.Enchantment, - ContainerTypeOld.BREWING_STAND => ContainerType.BrewingStand, - ContainerTypeOld.VILLAGER => ContainerType.Merchant, - ContainerTypeOld.HOPPER => ContainerType.Hopper, - ContainerTypeOld.DROPPER => ContainerType.Generic_3x3, - ContainerTypeOld.SHULKER_BOX => ContainerType.ShulkerBox, - ContainerTypeOld.ENTITYHORSE => ContainerType.Unknown, - _ => ContainerType.Unknown, -#pragma warning restore format // @formatter:on - }; - } - } -} diff --git a/MinecraftClient/Inventory/ContainerTypeExtensions.cs b/MinecraftClient/Inventory/ContainerTypeExtensions.cs deleted file mode 100644 index 4644e55354..0000000000 --- a/MinecraftClient/Inventory/ContainerTypeExtensions.cs +++ /dev/null @@ -1,89 +0,0 @@ -namespace MinecraftClient.Inventory -{ - public static class ContainerTypeExtensions - { - /// - /// Get the slot count of the container - /// - /// - /// Slot count of the container - public static int SlotCount(this ContainerType c) - { - return c switch - { -#pragma warning disable format // @formatter:off - ContainerType.PlayerInventory => 46, - ContainerType.Generic_9x1 => 45, - ContainerType.Generic_9x2 => 54, - ContainerType.Generic_9x3 => 63, - ContainerType.Generic_9x4 => 72, - ContainerType.Generic_9x5 => 81, - ContainerType.Generic_9x6 => 90, - ContainerType.Generic_3x3 => 45, - ContainerType.Crafter => 45, - ContainerType.Crafting => 46, - ContainerType.BlastFurnace => 39, - ContainerType.Furnace => 39, - ContainerType.Smoker => 39, - ContainerType.Enchantment => 38, - ContainerType.BrewingStand => 41, - ContainerType.Merchant => 39, - ContainerType.Beacon => 37, - ContainerType.Anvil => 39, - ContainerType.Hopper => 41, - ContainerType.ShulkerBox => 63, - ContainerType.SmightingTable => 39, - ContainerType.Loom => 40, - ContainerType.Stonecutter => 38, - ContainerType.Lectern => 37, - ContainerType.Cartography => 39, - ContainerType.Grindstone => 39, - ContainerType.Unknown => 0, - _ => 0, -#pragma warning restore format // @formatter:on - }; - } - - /// - /// Get an ASCII art representation of the container - /// - /// - /// ASCII art representation or NULL if not implemented for this container type - public static string? GetAsciiArt(this ContainerType c) - { - return c switch - { -#pragma warning disable format // @formatter:off - ContainerType.PlayerInventory => AsciiArt.Container_PlayerInventory, - ContainerType.Generic_9x3 => AsciiArt.Container_Generic_9x3, - ContainerType.Generic_9x6 => AsciiArt.Container_Generic_9x6, - ContainerType.Generic_3x3 => AsciiArt.Container_Generic_3x3, - ContainerType.Crafter => AsciiArt.Container_Generic_3x3, - ContainerType.Crafting => AsciiArt.Container_Crafting, - ContainerType.BlastFurnace => AsciiArt.Container_Furnace, - ContainerType.Furnace => AsciiArt.Container_Furnace, - ContainerType.Smoker => AsciiArt.Container_Furnace, - ContainerType.Enchantment => AsciiArt.Container_EnchantingTable, - ContainerType.BrewingStand => AsciiArt.Container_BrewingStand, - ContainerType.Merchant => null, - ContainerType.Beacon => null, - ContainerType.Anvil => null, - ContainerType.Hopper => AsciiArt.Container_Hopper, - ContainerType.ShulkerBox => AsciiArt.Container_Generic_9x3, - ContainerType.Loom => null, - ContainerType.Stonecutter => null, - ContainerType.Lectern => null, - ContainerType.Cartography => null, - ContainerType.Grindstone => AsciiArt.Container_Grindstone, - ContainerType.Unknown => null, - ContainerType.Generic_9x1 => null, - ContainerType.Generic_9x2 => null, - ContainerType.Generic_9x4 => null, - ContainerType.Generic_9x5 => null, - ContainerType.SmightingTable => null, - _ => null, -#pragma warning restore format // @formatter:on - }; - } - } -} diff --git a/MinecraftClient/Inventory/EffectData.cs b/MinecraftClient/Inventory/EffectData.cs deleted file mode 100644 index c13e4312f6..0000000000 --- a/MinecraftClient/Inventory/EffectData.cs +++ /dev/null @@ -1,194 +0,0 @@ -namespace MinecraftClient.Inventory; - -using System; -using System.Collections.Generic; -using System.Linq; -using MinecraftClient.Protocol; -using MinecraftClient.Protocol.Message; - -/// -/// Represents an active status effect on an entity -/// -public class EffectData -{ - /// - /// The type of effect - /// - public Effects Effect { get; set; } - - /// - /// Effect amplifier (level - 1, e.g., 0 = level I, 1 = level II) - /// - public int Amplifier { get; set; } - - /// - /// Duration in ticks (20 ticks = 1 second). -1 for infinite. - /// - public int Duration { get; set; } - - /// - /// Effect flags (ambient, show particles, show icon) - /// - public byte Flags { get; set; } - - /// - /// Time when the effect was applied - /// - public DateTime StartTime { get; set; } - - public EffectData(Effects effect, int amplifier, int duration, byte flags) - { - Effect = effect; - Amplifier = amplifier; - Duration = duration; - Flags = flags; - StartTime = DateTime.UtcNow; - } - - /// - /// Check if this is an infinite duration effect - /// - public bool IsInfinite => Duration == -1 || Duration == int.MaxValue; - - /// - /// Check if the effect has expired - /// - public bool IsExpired - { - get - { - if (IsInfinite) return false; - return GetElapsedTicks() >= Duration; - } - } - - /// - /// Get remaining duration in ticks - /// - public int RemainingTicks - { - get - { - if (IsInfinite) return -1; - return Math.Max(0, Duration - GetElapsedTicks()); - } - } - - /// - /// Get remaining duration in seconds - /// - public int RemainingSeconds - { - get - { - if (IsInfinite) return -1; - return (RemainingTicks + 19) / 20; - } - } - - /// - /// Get the translated effect name from Minecraft translations - /// - public string GetTranslatedName() - { - var key = $"effect.minecraft.{Effect.ToString().ToUnderscoreCase()}"; - var translated = ChatParser.TranslateString(key); - return string.IsNullOrEmpty(translated) ? Effect.ToString() : translated; - } - - /// - /// Get the translated effect name with level when applicable - /// - public string GetDisplayName() - { - string translatedName = GetTranslatedName(); - if (Amplifier <= 0) - return translatedName; - - return string.Format(Translations.effect_name_with_amplifier, translatedName, - EnchantmentMapping.ConvertLevelToRomanNumbers(Amplifier + 1)); - } - - /// - /// Get the translated effect name prefixed with the best-fit indefinite article - /// - public string GetDisplayNameWithArticle() - { - string displayName = GetDisplayName(); - char? firstLetter = displayName - .TrimStart() - .FirstOrDefault(char.IsLetter); - - if (firstLetter is null) - return displayName; - - string article = "AEIOUaeiou".Contains(firstLetter.Value) - ? Translations.effect_article_an - : Translations.effect_article_a; - return $"{article} {displayName}"; - } - - /// - /// Get the configured short duration label for the remaining time - /// - public string GetRemainingDurationText() - { - return FormatShortDuration(RemainingSeconds); - } - - /// - /// Get the configured short duration label for the initial effect duration - /// - public string GetInitialDurationText() - { - if (IsInfinite) - return Translations.effect_duration_unlimited; - - int durationSeconds = (Duration + 19) / 20; - return FormatShortDuration(durationSeconds); - } - - /// - /// Format a duration for compact UI output - /// - /// Duration in seconds, -1 for unlimited - public static string FormatShortDuration(int seconds) - { - if (seconds < 0) - return Translations.effect_duration_short_unlimited; - - if (seconds < 60) - return string.Format(Translations.effect_duration_short_seconds, seconds); - - int minutes = seconds / 60; - int remainingSeconds = seconds % 60; - if (seconds < 3600) - { - return remainingSeconds == 0 - ? string.Format(Translations.effect_duration_short_minutes, minutes) - : string.Format(Translations.effect_duration_short_minutes_seconds, minutes, remainingSeconds); - } - - int hours = seconds / 3600; - int remainingMinutes = (seconds % 3600) / 60; - return remainingMinutes == 0 - ? string.Format(Translations.effect_duration_short_hours, hours) - : string.Format(Translations.effect_duration_short_hours_minutes, hours, remainingMinutes); - } - - private int GetElapsedTicks() - { - return (int)((DateTime.UtcNow - StartTime).TotalMilliseconds / 50); - } -} - -/// -/// Extension method for converting PascalCase to snake_case -/// -public static class StringExtensions -{ - public static string ToUnderscoreCase(this string str) - { - return string.Concat(str.Select((x, i) => i > 0 && char.IsUpper(x) ? "_" + x.ToString() : x.ToString())).ToLower(); - } -} diff --git a/MinecraftClient/Inventory/Effects.cs b/MinecraftClient/Inventory/Effects.cs deleted file mode 100644 index 7b5df3bd25..0000000000 --- a/MinecraftClient/Inventory/Effects.cs +++ /dev/null @@ -1,41 +0,0 @@ -namespace MinecraftClient.Inventory -{ - /// - /// Represents a Minecraft effects - /// - public enum Effects - { - Speed = 1, - Slowness = 2, - Haste = 3, - MiningFatigue = 4, - Strength = 5, - InstantHealth = 6, - InstantDamage = 7, - JumpBoost = 8, - Nausea = 9, - Regeneration = 10, - Resistance = 11, - FireResistance = 12, - WaterBreathing = 13, - Invisibility = 14, - Blindness = 15, - NightVision = 16, - Hunger = 17, - Weakness = 18, - Poison = 19, - Wither = 20, - HealthBoost = 21, - Absorption = 22, - Saturation = 23, - Glowing = 24, - Levitation = 25, - Luck = 26, - BadLuck = 27, - SlowFalling = 28, - ConduitPower = 29, - DolphinsGrace = 30, - BadOmen = 31, - HerooftheVillage = 32, - } -} diff --git a/MinecraftClient/Inventory/Enchantment.cs b/MinecraftClient/Inventory/Enchantment.cs deleted file mode 100644 index 09b513f998..0000000000 --- a/MinecraftClient/Inventory/Enchantment.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace MinecraftClient.Inventory; - -public record Enchantment(Enchantments Type, int Level); \ No newline at end of file diff --git a/MinecraftClient/Inventory/EnchantmentData.cs b/MinecraftClient/Inventory/EnchantmentData.cs deleted file mode 100644 index 55571d0c24..0000000000 --- a/MinecraftClient/Inventory/EnchantmentData.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace MinecraftClient.Inventory -{ - public record EnchantmentData - { - public Enchantments TopEnchantment { get; set; } - public Enchantments MiddleEnchantment { get; set; } - public Enchantments BottomEnchantment { get; set; } - - // Seed for rendering Standard Galactic Language (symbols in the enchanting table) (Useful for poeple who use MCC for the protocol) - public short Seed { get; set; } - - /// Enchantment levels are the levels of enchantment (eg. I, II, III, IV, V) (eg. Smite IV, Power III, Knockback II ..) - public short TopEnchantmentLevel { get; set; } - public short MiddleEnchantmentLevel { get; set; } - public short BottomEnchantmentLevel { get; set; } - - /// Enchantment level requirements are the levels that player needs to have in order to enchant the item - public short TopEnchantmentLevelRequirement { get; set; } - public short MiddleEnchantmentLevelRequirement { get; set; } - public short BottomEnchantmentLevelRequirement { get; set; } - } -} diff --git a/MinecraftClient/Inventory/EnchantmentMapping.cs b/MinecraftClient/Inventory/EnchantmentMapping.cs deleted file mode 100644 index f09bd420e4..0000000000 --- a/MinecraftClient/Inventory/EnchantmentMapping.cs +++ /dev/null @@ -1,420 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using MinecraftClient.Protocol.Handlers; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Inventory -{ - public class EnchantmentMapping - { - #pragma warning disable format // @formatter:off - // 1.14 - 1.15.2 - private static Dictionary enchantmentMappings114 = new() - { - //id type - { 0, Enchantments.Protection }, - { 1, Enchantments.FireProtection }, - { 2, Enchantments.FeatherFalling }, - { 3, Enchantments.BlastProtection }, - { 4, Enchantments.ProjectileProtection }, - { 5, Enchantments.Respiration }, - { 6, Enchantments.AquaAffinity }, - { 7, Enchantments.Thorns }, - { 8, Enchantments.DepthStrider }, - { 9, Enchantments.FrostWalker }, - { 10, Enchantments.BindingCurse }, - { 11, Enchantments.Sharpness }, - { 12, Enchantments.Smite }, - { 13, Enchantments.BaneOfArthropods }, - { 14, Enchantments.Knockback }, - { 15, Enchantments.FireAspect }, - { 16, Enchantments.Looting }, - { 17, Enchantments.Sweeping }, - { 18, Enchantments.Efficiency }, - { 19, Enchantments.SilkTouch }, - { 20, Enchantments.Unbreaking }, - { 21, Enchantments.Fortune }, - { 22, Enchantments.Power }, - { 23, Enchantments.Punch }, - { 24, Enchantments.Flame }, - { 25, Enchantments.Infinity }, - { 26, Enchantments.LuckOfTheSea }, - { 27, Enchantments.Lure }, - { 28, Enchantments.Loyalty }, - { 29, Enchantments.Impaling }, - { 30, Enchantments.Riptide }, - { 31, Enchantments.Channeling }, - { 32, Enchantments.Mending }, - { 33, Enchantments.VanishingCurse } - }; - - // 1.16 - 1.18 - private static Dictionary enchantmentMappings116 = new() - { - //id type - { 0, Enchantments.Protection }, - { 1, Enchantments.FireProtection }, - { 2, Enchantments.FeatherFalling }, - { 3, Enchantments.BlastProtection }, - { 4, Enchantments.ProjectileProtection }, - { 5, Enchantments.Respiration }, - { 6, Enchantments.AquaAffinity }, - { 7, Enchantments.Thorns }, - { 8, Enchantments.DepthStrider }, - { 9, Enchantments.FrostWalker }, - { 10, Enchantments.BindingCurse }, - { 11, Enchantments.SoulSpeed }, - { 12, Enchantments.Sharpness }, - { 13, Enchantments.Smite }, - { 14, Enchantments.BaneOfArthropods }, - { 15, Enchantments.Knockback }, - { 16, Enchantments.FireAspect }, - { 17, Enchantments.Looting }, - { 18, Enchantments.Sweeping }, - { 19, Enchantments.Efficiency }, - { 20, Enchantments.SilkTouch }, - { 21, Enchantments.Unbreaking }, - { 22, Enchantments.Fortune }, - { 23, Enchantments.Power }, - { 24, Enchantments.Punch }, - { 25, Enchantments.Flame }, - { 26, Enchantments.Infinity }, - { 27, Enchantments.LuckOfTheSea }, - { 28, Enchantments.Lure }, - { 29, Enchantments.Loyalty }, - { 30, Enchantments.Impaling }, - { 31, Enchantments.Riptide }, - { 32, Enchantments.Channeling }, - { 33, Enchantments.Multishot }, - { 34, Enchantments.QuickCharge }, - { 35, Enchantments.Piercing }, - { 36, Enchantments.Mending }, - { 37, Enchantments.VanishingCurse } - }; - - // 1.19 - 1.20.4 - private static Dictionary enchantmentMappings119 = new() - { - //id type - { 0, Enchantments.Protection }, - { 1, Enchantments.FireProtection }, - { 2, Enchantments.FeatherFalling }, - { 3, Enchantments.BlastProtection }, - { 4, Enchantments.ProjectileProtection }, - { 5, Enchantments.Respiration }, - { 6, Enchantments.AquaAffinity }, - { 7, Enchantments.Thorns }, - { 8, Enchantments.DepthStrider }, - { 9, Enchantments.FrostWalker }, - { 10, Enchantments.BindingCurse }, - { 11, Enchantments.SoulSpeed }, - { 12, Enchantments.SwiftSneak }, - { 13, Enchantments.Sharpness }, - { 14, Enchantments.Smite }, - { 15, Enchantments.BaneOfArthropods }, - { 16, Enchantments.Knockback }, - { 17, Enchantments.FireAspect }, - { 18, Enchantments.Looting }, - { 19, Enchantments.Sweeping }, - { 20, Enchantments.Efficiency }, - { 21, Enchantments.SilkTouch }, - { 22, Enchantments.Unbreaking }, - { 23, Enchantments.Fortune }, - { 24, Enchantments.Power }, - { 25, Enchantments.Punch }, - { 26, Enchantments.Flame }, - { 27, Enchantments.Infinity }, - { 28, Enchantments.LuckOfTheSea }, - { 29, Enchantments.Lure }, - { 30, Enchantments.Loyalty }, - { 31, Enchantments.Impaling }, - { 32, Enchantments.Riptide }, - { 33, Enchantments.Channeling }, - { 34, Enchantments.Multishot }, - { 35, Enchantments.QuickCharge }, - { 36, Enchantments.Piercing }, - { 37, Enchantments.Mending }, - { 38, Enchantments.VanishingCurse } - }; - - // 1.20.6 - 1.21.10 - private static Dictionary enchantmentMappings1206 = new() - { - //id type - { 0, Enchantments.Protection }, - { 1, Enchantments.FireProtection }, - { 2, Enchantments.FeatherFalling }, - { 3, Enchantments.BlastProtection }, - { 4, Enchantments.ProjectileProtection }, - { 5, Enchantments.Respiration }, - { 6, Enchantments.AquaAffinity }, - { 7, Enchantments.Thorns }, - { 8, Enchantments.DepthStrider }, - { 9, Enchantments.FrostWalker }, - { 10, Enchantments.BindingCurse }, - { 11, Enchantments.SoulSpeed }, - { 12, Enchantments.SwiftSneak }, - { 13, Enchantments.Sharpness }, - { 14, Enchantments.Smite }, - { 15, Enchantments.BaneOfArthropods }, - { 16, Enchantments.Knockback }, - { 17, Enchantments.FireAspect }, - { 18, Enchantments.Looting }, - { 19, Enchantments.Sweeping }, - { 20, Enchantments.Efficiency }, - { 21, Enchantments.SilkTouch }, - { 22, Enchantments.Unbreaking }, - { 23, Enchantments.Fortune }, - { 24, Enchantments.Power }, - { 25, Enchantments.Punch }, - { 26, Enchantments.Flame }, - { 27, Enchantments.Infinity }, - { 28, Enchantments.LuckOfTheSea }, - { 29, Enchantments.Lure }, - { 30, Enchantments.Loyalty }, - { 31, Enchantments.Impaling }, - { 32, Enchantments.Riptide }, - { 33, Enchantments.Channeling }, - { 34, Enchantments.Multishot }, - { 35, Enchantments.QuickCharge }, - { 36, Enchantments.Piercing }, - { 37, Enchantments.Density }, - { 38, Enchantments.Breach }, - { 39, Enchantments.WindBurst }, - { 40, Enchantments.Mending }, - { 41, Enchantments.VanishingCurse } - }; - - // 1.21.11+ - private static Dictionary enchantmentMappings12111 = new() - { - //id type - { 0, Enchantments.Protection }, - { 1, Enchantments.FireProtection }, - { 2, Enchantments.FeatherFalling }, - { 3, Enchantments.BlastProtection }, - { 4, Enchantments.ProjectileProtection }, - { 5, Enchantments.Respiration }, - { 6, Enchantments.AquaAffinity }, - { 7, Enchantments.Thorns }, - { 8, Enchantments.DepthStrider }, - { 9, Enchantments.FrostWalker }, - { 10, Enchantments.BindingCurse }, - { 11, Enchantments.SoulSpeed }, - { 12, Enchantments.SwiftSneak }, - { 13, Enchantments.Sharpness }, - { 14, Enchantments.Smite }, - { 15, Enchantments.BaneOfArthropods }, - { 16, Enchantments.Knockback }, - { 17, Enchantments.FireAspect }, - { 18, Enchantments.Looting }, - { 19, Enchantments.Sweeping }, - { 20, Enchantments.Efficiency }, - { 21, Enchantments.SilkTouch }, - { 22, Enchantments.Unbreaking }, - { 23, Enchantments.Fortune }, - { 24, Enchantments.Power }, - { 25, Enchantments.Punch }, - { 26, Enchantments.Flame }, - { 27, Enchantments.Infinity }, - { 28, Enchantments.LuckOfTheSea }, - { 29, Enchantments.Lure }, - { 30, Enchantments.Loyalty }, - { 31, Enchantments.Impaling }, - { 32, Enchantments.Riptide }, - { 33, Enchantments.Channeling }, - { 34, Enchantments.Multishot }, - { 35, Enchantments.QuickCharge }, - { 36, Enchantments.Piercing }, - { 37, Enchantments.Density }, - { 38, Enchantments.Breach }, - { 39, Enchantments.WindBurst }, - { 40, Enchantments.Lunge }, - { 41, Enchantments.Mending }, - { 42, Enchantments.VanishingCurse } - }; -#pragma warning restore format // @formatter:on - - public static Enchantments GetEnchantmentById(int protocolVersion, short id) - { - if (protocolVersion < Protocol18Handler.MC_1_14_Version) - throw new Exception("Enchantments mappings are not implemented below 1.14"); - - var map = GetMapForProtocolVersion(protocolVersion); - - if (!map.TryGetValue(id, out var value)) - throw new Exception($"Got an Unknown Enchantment ID {id}, please update the Mappings!"); - - return value; - } - - private static Dictionary? reverseDynamicEnchantmentMappings; - private static readonly Dictionary reverseEnchantmentMappings114 = CreateReverseMap(enchantmentMappings114); - private static readonly Dictionary reverseEnchantmentMappings116 = CreateReverseMap(enchantmentMappings116); - private static readonly Dictionary reverseEnchantmentMappings119 = CreateReverseMap(enchantmentMappings119); - private static readonly Dictionary reverseEnchantmentMappings1206 = CreateReverseMap(enchantmentMappings1206); - private static readonly Dictionary reverseEnchantmentMappings12111 = CreateReverseMap(enchantmentMappings12111); - private static Dictionary? dynamicEnchantmentIdMap; - - private static readonly Dictionary nameToEnchantment = new() - { - { "protection", Enchantments.Protection }, - { "fire_protection", Enchantments.FireProtection }, - { "feather_falling", Enchantments.FeatherFalling }, - { "blast_protection", Enchantments.BlastProtection }, - { "projectile_protection", Enchantments.ProjectileProtection }, - { "respiration", Enchantments.Respiration }, - { "aqua_affinity", Enchantments.AquaAffinity }, - { "thorns", Enchantments.Thorns }, - { "depth_strider", Enchantments.DepthStrider }, - { "frost_walker", Enchantments.FrostWalker }, - { "binding_curse", Enchantments.BindingCurse }, - { "soul_speed", Enchantments.SoulSpeed }, - { "swift_sneak", Enchantments.SwiftSneak }, - { "sharpness", Enchantments.Sharpness }, - { "smite", Enchantments.Smite }, - { "bane_of_arthropods", Enchantments.BaneOfArthropods }, - { "knockback", Enchantments.Knockback }, - { "fire_aspect", Enchantments.FireAspect }, - { "looting", Enchantments.Looting }, - { "sweeping_edge", Enchantments.Sweeping }, - { "efficiency", Enchantments.Efficiency }, - { "silk_touch", Enchantments.SilkTouch }, - { "unbreaking", Enchantments.Unbreaking }, - { "fortune", Enchantments.Fortune }, - { "power", Enchantments.Power }, - { "punch", Enchantments.Punch }, - { "flame", Enchantments.Flame }, - { "infinity", Enchantments.Infinity }, - { "luck_of_the_sea", Enchantments.LuckOfTheSea }, - { "lure", Enchantments.Lure }, - { "loyalty", Enchantments.Loyalty }, - { "lunge", Enchantments.Lunge }, - { "impaling", Enchantments.Impaling }, - { "riptide", Enchantments.Riptide }, - { "channeling", Enchantments.Channeling }, - { "multishot", Enchantments.Multishot }, - { "quick_charge", Enchantments.QuickCharge }, - { "piercing", Enchantments.Piercing }, - { "density", Enchantments.Density }, - { "breach", Enchantments.Breach }, - { "wind_burst", Enchantments.WindBurst }, - { "mending", Enchantments.Mending }, - { "vanishing_curse", Enchantments.VanishingCurse }, - }; - - /// - /// Set the dynamic enchantment ID map from server RegistryData. - /// Called during configuration phase when receiving minecraft:enchantment registry. - /// - public static void SetDynamicEnchantmentIdMap(Dictionary idMap) - { - dynamicEnchantmentIdMap = new(); - foreach (var kvp in idMap) - { - var name = kvp.Value.StartsWith("minecraft:") ? kvp.Value.Substring("minecraft:".Length) : kvp.Value; - if (nameToEnchantment.TryGetValue(name, out var enchantment)) - dynamicEnchantmentIdMap[kvp.Key] = enchantment; - } - reverseDynamicEnchantmentMappings = null; - } - - public static Enchantments GetEnchantmentByRegistryId1206(int protocolVersion, int id) - { - if (dynamicEnchantmentIdMap is not null && dynamicEnchantmentIdMap.TryGetValue(id, out var dynValue)) - return dynValue; - if (GetMapForProtocolVersion(protocolVersion).TryGetValue((short)id, out var value)) - return value; - return (Enchantments)(-1); - } - - public static int GetRegistryId1206ByEnchantment(int protocolVersion, Enchantments enchantment) - { - if (dynamicEnchantmentIdMap is not null) - { - if (reverseDynamicEnchantmentMappings is null) - { - reverseDynamicEnchantmentMappings = new(); - foreach (var kvp in dynamicEnchantmentIdMap) - reverseDynamicEnchantmentMappings[kvp.Value] = (short)kvp.Key; - } - - return reverseDynamicEnchantmentMappings.TryGetValue(enchantment, out var dynamicId) ? dynamicId : -1; - } - - var reverseMap = GetReverseMapForProtocolVersion(protocolVersion); - return reverseMap.TryGetValue(enchantment, out var id) ? id : -1; - } - - public static string GetEnchantmentName(Enchantments enchantment) - { - var translation = ChatParser.TranslateString("enchantment.minecraft." + enchantment.ToString().ToUnderscoreCase()); - return string.IsNullOrEmpty(translation) ? $"Unknown Enchantment with ID: {(short)enchantment} (Probably not named in the code yet)" : translation; - } - - public static string ConvertLevelToRomanNumbers(int num) - { - var result = string.Empty; - var romanNumbers = new Dictionary - { - {"M", 1000}, - {"CM", 900}, - {"D", 500}, - {"CD", 400}, - {"C", 100}, - {"XC", 90}, - {"L", 50}, - {"XL", 40}, - {"X", 10}, - {"IX", 9}, - {"V", 5}, - {"IV", 4}, - {"I", 1} - }; - - foreach (var pair in romanNumbers) - { - result += string.Join(string.Empty, Enumerable.Repeat(pair.Key, num / pair.Value)); - num %= pair.Value; - } - - return result; - } - - private static Dictionary GetMapForProtocolVersion(int protocolVersion) - { - return protocolVersion switch - { - >= Protocol18Handler.MC_1_14_Version and < Protocol18Handler.MC_1_16_Version => enchantmentMappings114, - >= Protocol18Handler.MC_1_16_Version and < Protocol18Handler.MC_1_19_Version => enchantmentMappings116, - >= Protocol18Handler.MC_1_19_Version and < Protocol18Handler.MC_1_20_6_Version => enchantmentMappings119, - >= Protocol18Handler.MC_1_20_6_Version and < Protocol18Handler.MC_1_21_11_Version => enchantmentMappings1206, - >= Protocol18Handler.MC_1_21_11_Version => enchantmentMappings12111, - _ => throw new Exception("Enchantments mappings are not implemented below 1.14") - }; - } - - private static Dictionary GetReverseMapForProtocolVersion(int protocolVersion) - { - return protocolVersion switch - { - >= Protocol18Handler.MC_1_14_Version and < Protocol18Handler.MC_1_16_Version => reverseEnchantmentMappings114, - >= Protocol18Handler.MC_1_16_Version and < Protocol18Handler.MC_1_19_Version => reverseEnchantmentMappings116, - >= Protocol18Handler.MC_1_19_Version and < Protocol18Handler.MC_1_20_6_Version => reverseEnchantmentMappings119, - >= Protocol18Handler.MC_1_20_6_Version and < Protocol18Handler.MC_1_21_11_Version => reverseEnchantmentMappings1206, - >= Protocol18Handler.MC_1_21_11_Version => reverseEnchantmentMappings12111, - _ => throw new Exception("Enchantments mappings are not implemented below 1.14") - }; - } - - private static Dictionary CreateReverseMap(Dictionary map) - { - Dictionary reverseMap = new(); - foreach (var kvp in map) - reverseMap[kvp.Value] = kvp.Key; - - return reverseMap; - } - } -} diff --git a/MinecraftClient/Inventory/EnchantmentPropertyInfo.cs b/MinecraftClient/Inventory/EnchantmentPropertyInfo.cs deleted file mode 100644 index 20c93d9477..0000000000 --- a/MinecraftClient/Inventory/EnchantmentPropertyInfo.cs +++ /dev/null @@ -1,23 +0,0 @@ -namespace MinecraftClient.Inventory -{ - public enum EnchantmentPropertyInfo - { - // Levels that are required to enchant an item - TopEnchantmentLevelRequirement = 0, - MiddleEnchantmentLevelRequirement, - BottomEnchantmentLevelRequirement, - - // Seed - EnchantmentSeed, - - // Enchantment ids - TopEnchantmentId, - MiddleEnchantmentId, - BottomEnchantmentId, - - // Shown on mouse hover over the top, middle and bottom slot - TopEnchantmentLevel, - MiddleEnchantmentLevel, - BottomEnchantmentLevel - } -} diff --git a/MinecraftClient/Inventory/Enchantments.cs b/MinecraftClient/Inventory/Enchantments.cs deleted file mode 100644 index 173ea995b5..0000000000 --- a/MinecraftClient/Inventory/Enchantments.cs +++ /dev/null @@ -1,50 +0,0 @@ -namespace MinecraftClient.Inventory -{ - // Not implemented for 1.14 - public enum Enchantments : short - { - AquaAffinity = 0, - BaneOfArthropods, - BindingCurse, - BlastProtection, - Breach, - Channeling, - DepthStrider, - Density, - Efficiency, - FeatherFalling, - FireAspect, - FireProtection, - Flame, - Fortune, - FrostWalker, - Impaling, - Infinity, - Knockback, - Looting, - LuckOfTheSea, - Loyalty, - Lunge, - Lure, - Mending, - Multishot, - Piercing, - Power, - ProjectileProtection, - Protection, - Punch, - QuickCharge, - Respiration, - Riptide, - Sharpness, - SilkTouch, - Smite, - SoulSpeed, - Sweeping, - SwiftSneak, - Thorns, - Unbreaking, - VanishingCurse, - WindBurst - } -} diff --git a/MinecraftClient/Inventory/Hand.cs b/MinecraftClient/Inventory/Hand.cs deleted file mode 100644 index a150fbc5b7..0000000000 --- a/MinecraftClient/Inventory/Hand.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace MinecraftClient.Inventory -{ - /// - /// Represents a Minecraft hand - /// - public enum Hand - { - MainHand = 0, - OffHand = 1, - } -} diff --git a/MinecraftClient/Inventory/Item.cs b/MinecraftClient/Inventory/Item.cs deleted file mode 100644 index 95f95b3723..0000000000 --- a/MinecraftClient/Inventory/Item.cs +++ /dev/null @@ -1,275 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Text; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Inventory -{ - /// - /// Represents an item inside a Container - /// - public class Item - { - /// - /// Item Type - /// - public ItemType Type; - - /// - /// Item Count - /// - public int Count; - - /// - /// Item Count - /// - public int Data; - - /// - /// Item Metadata - /// - public Dictionary? NBT; - - /// - /// 1.20.6+ structured components (raw list for round-trip serialization) - /// - public List? Components; - - /// - /// Create an item with ItemType, Count and Metadata - /// - /// Type of the item - /// Item Count - /// Item Metadata - public Item(ItemType itemType, int count, Dictionary? nbt) - { - Type = itemType; - Count = count; - NBT = nbt; - } - - public Item(ItemType itemType, int count, int data, Dictionary? nbt) : this(itemType, count, nbt) - { - Data = data; - } - - /// - /// Create a shallow clone with a specific count (preserves NBT and Components). - /// - public Item CloneWithCount(int count) - { - return new Item(Type, count, Data, NBT) { Components = Components }; - } - - /// - /// Check if the item slot is empty - /// - /// TRUE if the item is empty - public bool IsEmpty - { - get { return Type == ItemType.Air || Count == 0; } - } - - /// - /// Retrieve item display name. For 1.20.6+ reads from structured components - /// (CustomNameComponent, then ItemNameComponent as fallback); for older versions reads from NBT. - /// - public string? DisplayName - { - get - { - if (Components is not null) - { - var customName = Components.OfType().FirstOrDefault(); - if (customName is not null && !string.IsNullOrEmpty(customName.CustomName)) - return customName.CustomName; - - var itemName = Components.OfType().FirstOrDefault(); - if (itemName is not null && !string.IsNullOrEmpty(itemName.ItemName)) - return itemName.ItemName; - - return null; - } - - if (NBT is not null && NBT.ContainsKey("display")) - { - if (NBT["display"] is Dictionary displayProperties && - displayProperties.ContainsKey("Name")) - { - string? displayName = displayProperties["Name"] as string; - if (!String.IsNullOrEmpty(displayName)) - return ChatParser.ParseText(displayProperties["Name"].ToString() ?? string.Empty); - } - } - - return null; - } - } - - /// - /// Retrieve item lores. For 1.20.6+ reads from LoreNameComponent1206; for older versions reads from NBT. - /// - public string[]? Lores - { - get - { - if (Components is not null) - { - var loreComponent = Components.OfType().FirstOrDefault(); - if (loreComponent is not null && loreComponent.Lines.Count > 0) - return loreComponent.Lines.ToArray(); - - return null; - } - - List lores = new(); - if (NBT is not null && NBT.ContainsKey("display")) - { - if (NBT["display"] is Dictionary displayProperties && - displayProperties.ContainsKey("Lore")) - { - object[] displayName = (object[])displayProperties["Lore"]; - lores.AddRange(from string st in displayName - let str = ChatParser.ParseText(st.ToString()) - select str); - return lores.ToArray(); - } - } - - return null; - } - } - - /// - /// Retrieve item damage. For 1.20.6+ reads from DamageComponent; for older versions reads from NBT. - /// - public int Damage - { - get - { - if (Components is not null) - { - var damageComponent = Components.OfType().FirstOrDefault(); - if (damageComponent is not null) - return damageComponent.Damage; - - return 0; - } - - if (NBT is not null && NBT.ContainsKey("Damage")) - { - object damage = NBT["Damage"]; - if (damage is not null) - { - return int.Parse(damage.ToString() ?? string.Empty, NumberStyles.Any, - CultureInfo.CurrentCulture); - } - } - - return 0; - } - } - - /// - /// Retrieve enchantments from structured components (1.20.6+). Returns null for older versions. - /// Both normal enchantments (EnchantmentsComponent) and stored enchantments - /// (StoredEnchantmentsComponent, e.g. enchanted books) are checked. - /// - public List? EnchantmentList - { - get - { - if (Components is null) - return null; - - var enchComp = Components.OfType().FirstOrDefault(); - if (enchComp is not null && enchComp.Enchantments.Count > 0) - return enchComp.Enchantments; - - return null; - } - } - - public static string GetTypeString(ItemType type) - { - string type_str = type.ToString(); - string type_renamed = type_str.ToUnderscoreCase(); - string? res1 = ChatParser.TranslateString("item.minecraft." + type_renamed); - if (!string.IsNullOrEmpty(res1)) - return res1; - string? res2 = ChatParser.TranslateString("block.minecraft." + type_renamed); - if (!string.IsNullOrEmpty(res2)) - return res2; - return type_str; - } - - public string GetTypeString() - { - return GetTypeString(Type); - } - - public string ToFullString() - { - StringBuilder sb = new(); - sb.Append(ToString()); - - try - { - var enchList = EnchantmentList; - if (enchList is not null) - { - foreach (var ench in enchList) - { - string name = EnchantmentMapping.GetEnchantmentName(ench.Type); - string level = EnchantmentMapping.ConvertLevelToRomanNumbers(ench.Level); - sb.AppendFormat(" | {0} {1}", name, level); - } - } - else if (NBT is not null && (NBT.TryGetValue("Enchantments", out object? enchantments) || - NBT.TryGetValue("StoredEnchantments", out enchantments))) - { - foreach (Dictionary enchantment in (object[])enchantments) - { - short level = (short)enchantment["lvl"]; - string id = ((string)enchantment["id"]).Replace(':', '.'); - sb.AppendFormat(" | {0} {1}", - ChatParser.TranslateString("enchantment." + id) ?? id, - ChatParser.TranslateString("enchantment.level." + level) ?? level.ToString()); - } - } - - if (Lores is not null && Lores.Length > 0) - { - foreach (var lore in Lores) - sb.AppendFormat(" | {0}", lore); - } - } - catch (Exception) - { - } - - return sb.ToString(); - } - - public override string ToString() - { - StringBuilder sb = new(); - - sb.AppendFormat("x{0,-2} {1}", Count, GetTypeString()); - - string? displayName = DisplayName; - if (!String.IsNullOrEmpty(displayName)) - sb.AppendFormat(" - {0}§8", displayName); - - int damage = Damage; - if (damage != 0) - sb.AppendFormat(" | {0}: {1}", Translations.cmd_inventory_damage, damage); - - return sb.ToString(); - } - } -} diff --git a/MinecraftClient/Inventory/ItemMovingHelper.cs b/MinecraftClient/Inventory/ItemMovingHelper.cs deleted file mode 100644 index 16d7d4dec8..0000000000 --- a/MinecraftClient/Inventory/ItemMovingHelper.cs +++ /dev/null @@ -1,156 +0,0 @@ -using System.Collections.Generic; -using System.Linq; -using MinecraftClient.Scripting; - -namespace MinecraftClient.Inventory -{ - /// - /// Class that contains useful methods to move item around in a container - /// - public class ItemMovingHelper(Container c, McClient mc) - { - private readonly Container c = c; - private readonly McClient mc = mc; - - /// - /// Move an item fron source to dest. Source should contain an item and dest slot should be empty - /// - /// Source slot - /// Dest slot - /// Dest slot's container (only if dest slot is in other container) - /// True if success or false if Failed - public bool MoveTo(int source, int dest, Container? destContainer = null) - { - // Condition: source has item and dest has no item - if (ValidateSlots(source, dest, destContainer) && - HasItem(source) && - ((destContainer is not null && !HasItem(dest, destContainer)) || (destContainer is null && !HasItem(dest)))) - return mc.DoWindowAction(c.ID, source, WindowActionType.LeftClick) - && mc.DoWindowAction(destContainer is null ? c.ID : destContainer.ID, dest, WindowActionType.LeftClick); - else return false; - } - - /// - /// Swap two item. Both slots should contain item - /// - /// Slot 1 - /// Slot 2 - /// Slot2 container (only if slot2 is in other container) - /// True if success or False if Failed - public bool Swap(int slot1, int slot2, Container? destContainer = null) - { - // Condition: Both slot1 and slot2 has item - if (ValidateSlots(slot1, slot2, destContainer) && - HasItem(slot1) && - (destContainer is not null && HasItem(slot2, destContainer) || (destContainer is null && HasItem(slot2)))) - return mc.DoWindowAction(c.ID, slot1, WindowActionType.LeftClick) - && mc.DoWindowAction(destContainer is null ? c.ID : destContainer.ID, slot2, WindowActionType.LeftClick) - && mc.DoWindowAction(c.ID, slot1, WindowActionType.LeftClick); - else return false; - } - - /// - /// Drag a stack of item over a set of slots. Those slots should be empty or have the same item as source item - /// - /// Source item - /// Slots to be drag over - /// Which mouse key to use: StartDragLeft, StartDragRight or StartDragMiddle - /// True if success or false if Failed - /// - /// After calling this method, you will need to wait until the server have updated the player inventory before doing next inventory action - /// - public bool DragOverSlots(int source, IEnumerable slots, WindowActionType mouseKey = WindowActionType.StartDragLeft) - { - if (!HasItem(source)) - return false; - List availableSlots = new(slots.Count()); - // filter out different item type or non-empty slots (they will be ignored silently) - foreach (var slot in slots) - if (ItemTypeEqual(source, slot) || !HasItem(slot)) - availableSlots.Add(slot); - if (availableSlots.Count > 0) - { - WindowActionType startDragging = WindowActionType.StartDragLeft; - WindowActionType addDragging = WindowActionType.AddDragLeft; - WindowActionType endDragging = WindowActionType.EndDragLeft; - switch (mouseKey) - { - case WindowActionType.StartDragRight: - { - startDragging = WindowActionType.StartDragRight; - addDragging = WindowActionType.AddDragRight; - endDragging = WindowActionType.EndDragRight; - break; - } - case WindowActionType.StartDragMiddle: - { - startDragging = WindowActionType.StartDragMiddle; - addDragging = WindowActionType.AddDragMiddle; - endDragging = WindowActionType.EndDragMiddle; - break; - } - } - mc.DoWindowAction(c.ID, source, WindowActionType.LeftClick); // grab item - mc.DoWindowAction(c.ID, -999, startDragging); - foreach (var slot in availableSlots) - { - mc.DoWindowAction(c.ID, slot, addDragging); - } - mc.DoWindowAction(c.ID, -999, endDragging); - mc.DoWindowAction(c.ID, source, WindowActionType.LeftClick); // put down item left (if any) - return true; - } - else return false; - } - - /// - /// Validate two slot by comparing they are different and within the maximum slot count of the container - /// - /// Slot 1 - /// Slot 2 - /// Second container (only if slot2 is in other container) - /// The compare result - private bool ValidateSlots(int s1, int s2, Container? s2Container = null) - { - if (s2Container is null) - return (s1 != s2 && s1 < c.Type.SlotCount() && s2 < c.Type.SlotCount()); - else - return (s1 < c.Type.SlotCount() && s2 < s2Container.Type.SlotCount()); - } - - /// - /// Check if the slot has an item inside - /// - /// Slot ID - /// Specify another contianer (only if the slot is in other container) - /// True if has item - private bool HasItem(int slot, Container? c = null) - { - c ??= this.c; - return c.Items.ContainsKey(slot); - } - - /// - /// Check both slots item type are the same - /// - /// - /// - /// Second container (only if slot2 is in other container) - /// True if they are equal - private bool ItemTypeEqual(int slot1, int slot2, Container? s2Container = null) - { - if (s2Container is null) - { - if (HasItem(slot1) && HasItem(slot2)) - return c.Items[slot1].Type == c.Items[slot2].Type; - else return false; - } - else - { - if (HasItem(slot1) && HasItem(slot2, s2Container)) - return c.Items[slot1].Type == s2Container.Items[slot2].Type; - else return false; - } - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette.cs deleted file mode 100644 index c8cbe3162b..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public abstract class ItemPalette - { - protected abstract Dictionary GetDict(); - private readonly Dictionary DictReverse = new(); - - public ItemPalette() - { - // Index reverse mappings for use in ToId() - foreach (KeyValuePair entry in GetDict()) - { - if (DictReverse.ContainsKey(entry.Value)) - continue; - - DictReverse.Add(entry.Value, entry.Key); - } - - // Hardcoded placeholder types for internal and network use - DictReverse[ItemType.Unknown] = (int)ItemType.Unknown; - DictReverse[ItemType.Null] = (int)ItemType.Null; - } - - public ItemType FromId(int id) - { - // Unknown item types may appear on Forge servers for custom items - if (!GetDict().ContainsKey(id)) - return ItemType.Unknown; - - return GetDict()[id]; - } - - public int ToId(ItemType itemType) - { - return DictReverse[itemType]; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette110.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette110.cs deleted file mode 100644 index 7a6a6d7928..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette110.cs +++ /dev/null @@ -1,613 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - /// - /// For MC 1.8 - /// Done manually by Milutinke :( - /// - public class ItemPalette110 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette110() - { - // Mapping IDs are a derived from: (Item ID << 16) | Data - mappings[0] = ItemType.Air; - mappings[65536] = ItemType.Stone; - mappings[65537] = ItemType.Granite; - mappings[65538] = ItemType.PolishedGranite; - mappings[65539] = ItemType.Diorite; - mappings[65540] = ItemType.PolishedDiorite; - mappings[65541] = ItemType.Andesite; - mappings[65542] = ItemType.PolishedAndesite; - mappings[131072] = ItemType.GrassBlock; - mappings[196608] = ItemType.Dirt; - mappings[196609] = ItemType.CoarseDirt; - mappings[196610] = ItemType.Podzol; - mappings[262144] = ItemType.Cobblestone; - mappings[327680] = ItemType.OakPlanks; - mappings[327681] = ItemType.SprucePlanks; - mappings[327682] = ItemType.BirchPlanks; - mappings[327683] = ItemType.JunglePlanks; - mappings[327684] = ItemType.AcaciaPlanks; - mappings[327685] = ItemType.DarkOakPlanks; - mappings[393216] = ItemType.OakSapling; - mappings[393217] = ItemType.SpruceSapling; - mappings[393218] = ItemType.BirchSapling; - mappings[393219] = ItemType.JungleSapling; - mappings[393220] = ItemType.AcaciaSapling; - mappings[393221] = ItemType.DarkOakSapling; - mappings[458752] = ItemType.Bedrock; - mappings[524288] = ItemType.WaterBucket; // Still Water Block Item - mappings[589824] = ItemType.WaterBucket; // Flowing Water Block Item - mappings[655360] = ItemType.LavaBucket; // Still Lava Block Item - mappings[720896] = ItemType.LavaBucket; // Flowing Lava Block Item - mappings[786432] = ItemType.Sand; - mappings[786433] = ItemType.RedSand; - mappings[851968] = ItemType.Gravel; - mappings[917504] = ItemType.GoldOre; - mappings[983040] = ItemType.IronOre; - mappings[1048576] = ItemType.CoalOre; - mappings[1114112] = ItemType.OakLog; - mappings[1114113] = ItemType.SpruceLog; - mappings[1114114] = ItemType.BirchLog; - mappings[1114115] = ItemType.JungleLog; - mappings[1179648] = ItemType.OakLeaves; - mappings[1179649] = ItemType.SpruceLeaves; - mappings[1179650] = ItemType.BirchLeaves; - mappings[1179651] = ItemType.JungleLeaves; - mappings[1245184] = ItemType.Sponge; - mappings[1245185] = ItemType.WetSponge; - mappings[1310720] = ItemType.Glass; - mappings[1376256] = ItemType.LapisOre; - mappings[1441792] = ItemType.LapisBlock; - mappings[1507328] = ItemType.Dispenser; - mappings[1572864] = ItemType.Sandstone; - mappings[1572865] = ItemType.ChiseledSandstone; - mappings[1572866] = ItemType.SmoothSandstone; - mappings[1638400] = ItemType.NoteBlock; - mappings[1769472] = ItemType.PoweredRail; - mappings[1835008] = ItemType.DetectorRail; - mappings[1900544] = ItemType.StickyPiston; - mappings[1966080] = ItemType.Cobweb; - mappings[2031617] = ItemType.ShortGrass; - mappings[2031618] = ItemType.Fern; - mappings[2097152] = ItemType.DeadBush; - mappings[2162688] = ItemType.Piston; - mappings[2293760] = ItemType.WhiteWool; - mappings[2293761] = ItemType.OrangeWool; - mappings[2293762] = ItemType.MagentaWool; - mappings[2293763] = ItemType.LightBlueWool; - mappings[2293764] = ItemType.YellowWool; - mappings[2293765] = ItemType.LimeWool; - mappings[2293766] = ItemType.PinkWool; - mappings[2293767] = ItemType.GrayWool; - mappings[2293768] = ItemType.LightGrayWool; - mappings[2293769] = ItemType.CyanWool; - mappings[2293770] = ItemType.PurpleWool; - mappings[2293771] = ItemType.BlueWool; - mappings[2293772] = ItemType.BrownWool; - mappings[2293773] = ItemType.GreenWool; - mappings[2293774] = ItemType.RedWool; - mappings[2293775] = ItemType.BlackWool; - mappings[2424832] = ItemType.Dandelion; - mappings[2490368] = ItemType.Poppy; - mappings[2490369] = ItemType.BlueOrchid; - mappings[2490370] = ItemType.Allium; - mappings[2490371] = ItemType.AzureBluet; - mappings[2490372] = ItemType.RedTulip; - mappings[2490373] = ItemType.OrangeTulip; - mappings[2490374] = ItemType.WhiteTulip; - mappings[2490375] = ItemType.PinkTulip; - mappings[2490376] = ItemType.OxeyeDaisy; - mappings[2555904] = ItemType.BrownMushroom; - mappings[2621440] = ItemType.RedMushroom; - mappings[2686976] = ItemType.GoldBlock; - mappings[2752512] = ItemType.IronBlock; - mappings[2883584] = ItemType.StoneSlab; - mappings[2883585] = ItemType.SandstoneSlab; - mappings[2883587] = ItemType.CobblestoneSlab; - mappings[2883588] = ItemType.BrickSlab; - mappings[2883589] = ItemType.StoneBrickSlab; - mappings[2883590] = ItemType.NetherBrickSlab; - mappings[2883591] = ItemType.QuartzSlab; - mappings[2949120] = ItemType.Bricks; - mappings[3014656] = ItemType.Tnt; - mappings[3080192] = ItemType.Bookshelf; - mappings[3145728] = ItemType.MossyCobblestone; - mappings[3211264] = ItemType.Obsidian; - mappings[3276800] = ItemType.Torch; - mappings[3407872] = ItemType.Spawner; - mappings[3473408] = ItemType.OakStairs; - mappings[3538944] = ItemType.Chest; - mappings[3670016] = ItemType.DiamondOre; - mappings[3735552] = ItemType.DiamondBlock; - mappings[3801088] = ItemType.CraftingTable; - mappings[3932160] = ItemType.Farmland; - mappings[3997696] = ItemType.Furnace; - mappings[4259840] = ItemType.Ladder; - mappings[4390912] = ItemType.CobblestoneStairs; - mappings[4587520] = ItemType.StonePressurePlate; - mappings[4718592] = ItemType.OakPressurePlate; - mappings[5046272] = ItemType.StoneButton; - mappings[5177344] = ItemType.Ice; - mappings[5308416] = ItemType.Cactus; - mappings[5373952] = ItemType.Clay; - mappings[5505024] = ItemType.Jukebox; - mappings[5570560] = ItemType.OakFence; - mappings[5832704] = ItemType.Glowstone; - mappings[6225920] = ItemType.WhiteStainedGlass; - mappings[6225921] = ItemType.OrangeStainedGlass; - mappings[6225922] = ItemType.MagentaStainedGlass; - mappings[6225923] = ItemType.LightBlueStainedGlass; - mappings[6225924] = ItemType.YellowStainedGlass; - mappings[6225925] = ItemType.LimeStainedGlass; - mappings[6225926] = ItemType.PinkStainedGlass; - mappings[6225927] = ItemType.GrayStainedGlass; - mappings[6225928] = ItemType.LightGrayStainedGlass; - mappings[6225929] = ItemType.CyanStainedGlass; - mappings[6225930] = ItemType.PurpleStainedGlass; - mappings[6225931] = ItemType.BlueStainedGlass; - mappings[6225932] = ItemType.BrownStainedGlass; - mappings[6225933] = ItemType.GreenStainedGlass; - mappings[6225934] = ItemType.RedStainedGlass; - mappings[6225935] = ItemType.BlackStainedGlass; - mappings[6291456] = ItemType.OakTrapdoor; - mappings[6422528] = ItemType.StoneBricks; - mappings[6422529] = ItemType.MossyStoneBricks; - mappings[6422530] = ItemType.CrackedStoneBricks; - mappings[6422531] = ItemType.ChiseledStoneBricks; - mappings[6488064] = ItemType.BrownMushroomBlock; - mappings[6619136] = ItemType.IronBars; - mappings[6684672] = ItemType.GlassPane; - mappings[6946816] = ItemType.Vine; - mappings[7012352] = ItemType.OakFenceGate; - mappings[7077888] = ItemType.BrickStairs; - mappings[7143424] = ItemType.StoneBrickStairs; - mappings[7274496] = ItemType.LilyPad; - mappings[7602176] = ItemType.EnchantingTable; - mappings[7864320] = ItemType.EndPortalFrame; - mappings[7929856] = ItemType.EndStone; - mappings[7995392] = ItemType.DragonEgg; - mappings[8257536] = ItemType.OakSlab; - mappings[8257537] = ItemType.SpruceSlab; - mappings[8257538] = ItemType.BirchSlab; - mappings[8257539] = ItemType.JungleSlab; - mappings[8257540] = ItemType.AcaciaSlab; - mappings[8257541] = ItemType.DarkOakSlab; - mappings[8454144] = ItemType.EmeraldOre; - mappings[8519680] = ItemType.EnderChest; - mappings[8585216] = ItemType.TripwireHook; - mappings[8716288] = ItemType.EmeraldBlock; - mappings[8781824] = ItemType.SpruceStairs; - mappings[8847360] = ItemType.BirchStairs; - mappings[8912896] = ItemType.JungleStairs; - mappings[8978432] = ItemType.CommandBlock; - mappings[9043968] = ItemType.Beacon; - mappings[9109504] = ItemType.CobblestoneWall; - mappings[4325376] = ItemType.Rail; - mappings[4521984] = ItemType.Lever; - mappings[4784128] = ItemType.RedstoneOre; - mappings[4980736] = ItemType.RedstoneTorch; - mappings[5111808] = ItemType.Snow; - mappings[5242880] = ItemType.SnowBlock; - mappings[5636096] = ItemType.Pumpkin; - mappings[5701632] = ItemType.Netherrack; - mappings[5767168] = ItemType.SoulSand; - mappings[5963776] = ItemType.JackOLantern; - mappings[6356992] = ItemType.InfestedStone; - mappings[6356993] = ItemType.InfestedCobblestone; - mappings[6356994] = ItemType.InfestedStoneBricks; - mappings[6356995] = ItemType.InfestedMossyStoneBricks; - mappings[6356996] = ItemType.InfestedCrackedStoneBricks; - mappings[6356997] = ItemType.InfestedChiseledStoneBricks; - mappings[6553600] = ItemType.RedMushroomBlock; - mappings[6750208] = ItemType.Melon; - mappings[7208960] = ItemType.Mycelium; - mappings[7340032] = ItemType.NetherBricks; - mappings[7405568] = ItemType.NetherBrickFence; - mappings[7471104] = ItemType.NetherBrickStairs; - mappings[8060928] = ItemType.RedstoneLamp; - mappings[8388608] = ItemType.SandstoneStairs; - mappings[9109505] = ItemType.MossyCobblestoneWall; - mappings[9502720] = ItemType.Anvil; - mappings[9502721] = ItemType.ChippedAnvil; - mappings[9502722] = ItemType.DamagedAnvil; - mappings[9568256] = ItemType.TrappedChest; - mappings[9633792] = ItemType.LightWeightedPressurePlate; - mappings[9699328] = ItemType.HeavyWeightedPressurePlate; - mappings[9895936] = ItemType.DaylightDetector; - mappings[9961472] = ItemType.RedstoneBlock; - mappings[10027008] = ItemType.NetherQuartzOre; - mappings[10092544] = ItemType.Hopper; - mappings[10158080] = ItemType.QuartzBlock; - mappings[10158081] = ItemType.ChiseledQuartzBlock; - mappings[10158082] = ItemType.QuartzPillar; - mappings[10223616] = ItemType.QuartzStairs; - mappings[10289152] = ItemType.ActivatorRail; - mappings[10354688] = ItemType.Dropper; - mappings[10420224] = ItemType.WhiteTerracotta; - mappings[10420225] = ItemType.OrangeTerracotta; - mappings[10420226] = ItemType.MagentaTerracotta; - mappings[10420227] = ItemType.LightBlueTerracotta; - mappings[10420228] = ItemType.YellowTerracotta; - mappings[10420229] = ItemType.LimeTerracotta; - mappings[10420230] = ItemType.PinkTerracotta; - mappings[10420231] = ItemType.GrayTerracotta; - mappings[10420232] = ItemType.LightGrayTerracotta; - mappings[10420233] = ItemType.CyanTerracotta; - mappings[10420234] = ItemType.PurpleTerracotta; - mappings[10420235] = ItemType.BlueTerracotta; - mappings[10420236] = ItemType.BrownTerracotta; - mappings[10420237] = ItemType.GreenTerracotta; - mappings[10420238] = ItemType.RedTerracotta; - mappings[10420239] = ItemType.BlackTerracotta; - mappings[10485760] = ItemType.WhiteStainedGlassPane; - mappings[10485761] = ItemType.OrangeStainedGlassPane; - mappings[10485762] = ItemType.MagentaStainedGlassPane; - mappings[10485763] = ItemType.LightBlueStainedGlassPane; - mappings[10485764] = ItemType.YellowStainedGlassPane; - mappings[10485765] = ItemType.LimeStainedGlassPane; - mappings[10485766] = ItemType.PinkStainedGlassPane; - mappings[10485767] = ItemType.GrayStainedGlassPane; - mappings[10485768] = ItemType.LightGrayStainedGlassPane; - mappings[10485769] = ItemType.CyanStainedGlassPane; - mappings[10485770] = ItemType.PurpleStainedGlassPane; - mappings[10485771] = ItemType.BlueStainedGlassPane; - mappings[10485772] = ItemType.BrownStainedGlassPane; - mappings[10485773] = ItemType.GreenStainedGlassPane; - mappings[10485774] = ItemType.RedStainedGlassPane; - mappings[10485775] = ItemType.BlackStainedGlassPane; - mappings[10551296] = ItemType.AcaciaLeaves; - mappings[10551297] = ItemType.DarkOakLeaves; - mappings[10616832] = ItemType.AcaciaLog; - mappings[10616833] = ItemType.DarkOakLog; - mappings[10682368] = ItemType.AcaciaStairs; - mappings[10747904] = ItemType.DarkOakStairs; - mappings[10813440] = ItemType.SlimeBlock; - mappings[10878976] = ItemType.Barrier; - mappings[10944512] = ItemType.IronTrapdoor; - mappings[11010048] = ItemType.Prismarine; - mappings[11010049] = ItemType.PrismarineBricks; - mappings[11010050] = ItemType.DarkPrismarine; - mappings[11075584] = ItemType.SeaLantern; - mappings[11141120] = ItemType.HayBlock; - mappings[11206656] = ItemType.WhiteCarpet; - mappings[11206657] = ItemType.OrangeCarpet; - mappings[11206658] = ItemType.MagentaCarpet; - mappings[11206659] = ItemType.LightBlueCarpet; - mappings[11206660] = ItemType.YellowCarpet; - mappings[11206661] = ItemType.LimeCarpet; - mappings[11206662] = ItemType.PinkCarpet; - mappings[11206663] = ItemType.GrayCarpet; - mappings[11206664] = ItemType.LightGrayCarpet; - mappings[11206665] = ItemType.CyanCarpet; - mappings[11206666] = ItemType.PurpleCarpet; - mappings[11206667] = ItemType.BlueCarpet; - mappings[11206668] = ItemType.BrownCarpet; - mappings[11206669] = ItemType.GreenCarpet; - mappings[11206670] = ItemType.RedCarpet; - mappings[11206671] = ItemType.BlackCarpet; - mappings[11272192] = ItemType.Terracotta; - mappings[11337728] = ItemType.CoalBlock; - mappings[11403264] = ItemType.PackedIce; - mappings[11468800] = ItemType.Sunflower; - mappings[11468801] = ItemType.Lilac; - mappings[11468802] = ItemType.TallGrass; - mappings[11468803] = ItemType.LargeFern; - mappings[11468804] = ItemType.RoseBush; - mappings[11468805] = ItemType.Peony; - mappings[11730944] = ItemType.RedSandstone; - mappings[11730945] = ItemType.ChiseledRedSandstone; - mappings[11730946] = ItemType.SmoothRedSandstone; - mappings[11796480] = ItemType.RedSandstoneStairs; - mappings[11927552] = ItemType.RedSandstoneSlab; - mappings[11993088] = ItemType.SpruceFenceGate; - mappings[12058624] = ItemType.BirchFenceGate; - mappings[12124160] = ItemType.JungleFenceGate; - mappings[12189696] = ItemType.DarkOakFenceGate; - mappings[12255232] = ItemType.AcaciaFenceGate; - mappings[12320768] = ItemType.SpruceFence; - mappings[12386304] = ItemType.BirchFence; - mappings[12451840] = ItemType.JungleFence; - mappings[12517376] = ItemType.DarkOakFence; - mappings[12582912] = ItemType.AcaciaFence; - mappings[12976128] = ItemType.EndRod; - mappings[13041664] = ItemType.ChorusPlant; - mappings[13107200] = ItemType.ChorusFlower; - mappings[13172736] = ItemType.PurpurBlock; - mappings[13238272] = ItemType.PurpurPillar; - mappings[13303808] = ItemType.PurpurStairs; - mappings[13434880] = ItemType.PurpurSlab; - mappings[13500416] = ItemType.EndStoneBricks; - mappings[13631488] = ItemType.DirtPath; - mappings[13762560] = ItemType.RepeatingCommandBlock; - mappings[13828096] = ItemType.ChainCommandBlock; - mappings[13959168] = ItemType.MagmaBlock; - mappings[14024704] = ItemType.NetherWartBlock; - mappings[14090240] = ItemType.RedNetherBricks; - mappings[14155776] = ItemType.BoneBlock; - mappings[14221312] = ItemType.StructureVoid; - mappings[16711680] = ItemType.StructureBlock; - mappings[16777216] = ItemType.IronShovel; - mappings[16842752] = ItemType.IronPickaxe; - mappings[16908288] = ItemType.IronAxe; - mappings[16973824] = ItemType.FlintAndSteel; - mappings[17039360] = ItemType.Apple; - mappings[17104896] = ItemType.Bow; - mappings[17170432] = ItemType.Arrow; - mappings[17235968] = ItemType.Coal; - mappings[17235969] = ItemType.Charcoal; - mappings[17301504] = ItemType.Diamond; - mappings[17367040] = ItemType.IronIngot; - mappings[17432576] = ItemType.GoldIngot; - mappings[17498112] = ItemType.IronSword; - mappings[17825792] = ItemType.StoneSword; - mappings[17891328] = ItemType.StoneShovel; - mappings[17956864] = ItemType.StonePickaxe; - mappings[18022400] = ItemType.StoneAxe; - mappings[18087936] = ItemType.DiamondSword; - mappings[18153472] = ItemType.DiamondShovel; - mappings[18219008] = ItemType.DiamondPickaxe; - mappings[18284544] = ItemType.DiamondAxe; - mappings[18350080] = ItemType.Stick; - mappings[18415616] = ItemType.Bowl; - mappings[18481152] = ItemType.MushroomStew; - mappings[18546688] = ItemType.GoldenSword; - mappings[18612224] = ItemType.GoldenShovel; - mappings[18677760] = ItemType.GoldenPickaxe; - mappings[18743296] = ItemType.GoldenAxe; - mappings[18808832] = ItemType.String; - mappings[18874368] = ItemType.Feather; - mappings[18939904] = ItemType.Gunpowder; - mappings[19070976] = ItemType.StoneHoe; - mappings[19136512] = ItemType.IronHoe; - mappings[19202048] = ItemType.DiamondHoe; - mappings[19267584] = ItemType.GoldenHoe; - mappings[19464192] = ItemType.Bread; - mappings[19529728] = ItemType.LeatherHelmet; - mappings[19595264] = ItemType.LeatherChestplate; - mappings[19660800] = ItemType.LeatherLeggings; - mappings[19726336] = ItemType.LeatherBoots; - mappings[19791872] = ItemType.ChainmailHelmet; - mappings[19857408] = ItemType.ChainmailChestplate; - mappings[19922944] = ItemType.ChainmailLeggings; - mappings[19988480] = ItemType.ChainmailBoots; - mappings[20054016] = ItemType.IronHelmet; - mappings[20119552] = ItemType.IronChestplate; - mappings[20185088] = ItemType.IronLeggings; - mappings[20250624] = ItemType.IronBoots; - mappings[20316160] = ItemType.DiamondHelmet; - mappings[20381696] = ItemType.DiamondChestplate; - mappings[20447232] = ItemType.DiamondLeggings; - mappings[20512768] = ItemType.DiamondBoots; - mappings[20578304] = ItemType.GoldenHelmet; - mappings[20643840] = ItemType.GoldenChestplate; - mappings[20709376] = ItemType.GoldenLeggings; - mappings[20774912] = ItemType.GoldenBoots; - mappings[20840448] = ItemType.Flint; - mappings[20905984] = ItemType.Porkchop; - mappings[20971520] = ItemType.CookedPorkchop; - mappings[21037056] = ItemType.Painting; - mappings[21102592] = ItemType.GoldenApple; - mappings[21102593] = ItemType.EnchantedGoldenApple; - mappings[21168128] = ItemType.OakSign; - mappings[21299200] = ItemType.Bucket; - mappings[21430272] = ItemType.LavaBucket; - mappings[21495808] = ItemType.Minecart; - mappings[21561344] = ItemType.Saddle; - mappings[21626880] = ItemType.IronDoor; - mappings[21692416] = ItemType.Redstone; - mappings[21757952] = ItemType.Snowball; - mappings[21823488] = ItemType.OakBoat; - mappings[21889024] = ItemType.Leather; - mappings[21954560] = ItemType.MilkBucket; - mappings[22020096] = ItemType.Brick; - mappings[22085632] = ItemType.ClayBall; - mappings[22151168] = ItemType.SugarCane; - mappings[22216704] = ItemType.Paper; - mappings[22282240] = ItemType.Book; - mappings[22347776] = ItemType.SlimeBall; - mappings[22413312] = ItemType.ChestMinecart; - mappings[22478848] = ItemType.FurnaceMinecart; - mappings[22544384] = ItemType.Egg; - mappings[22609920] = ItemType.Compass; - mappings[22675456] = ItemType.FishingRod; - mappings[22740992] = ItemType.Clock; - mappings[22806528] = ItemType.GlowstoneDust; - mappings[22872064] = ItemType.Salmon; - mappings[22872065] = ItemType.Salmon; - mappings[22872066] = ItemType.TropicalFish; - mappings[22872067] = ItemType.Pufferfish; - mappings[22937600] = ItemType.CookedSalmon; - mappings[22937601] = ItemType.CookedSalmon; - mappings[23003136] = ItemType.InkSac; - mappings[23003137] = ItemType.RedDye; - mappings[23003138] = ItemType.GreenDye; - mappings[23003139] = ItemType.CocoaBeans; - mappings[23003140] = ItemType.LapisLazuli; - mappings[23003141] = ItemType.PurpleDye; - mappings[23003142] = ItemType.CyanDye; - mappings[23003143] = ItemType.LightGrayDye; - mappings[23003144] = ItemType.GrayDye; - mappings[23003145] = ItemType.PinkDye; - mappings[23003146] = ItemType.LimeDye; - mappings[23003147] = ItemType.YellowDye; - mappings[23003148] = ItemType.LightBlueDye; - mappings[23003149] = ItemType.MagentaDye; - mappings[23003150] = ItemType.OrangeDye; - mappings[23003151] = ItemType.BoneMeal; - mappings[23068672] = ItemType.Bone; - mappings[23134208] = ItemType.Sugar; - mappings[23199744] = ItemType.Cake; - mappings[23265280] = ItemType.RedBed; - mappings[23330816] = ItemType.Repeater; - mappings[23396352] = ItemType.Cookie; - mappings[23527424] = ItemType.Shears; - mappings[23592960] = ItemType.MelonSlice; - mappings[23658496] = ItemType.PumpkinSeeds; - mappings[23724032] = ItemType.MelonSeeds; - mappings[23789568] = ItemType.Beef; - mappings[23855104] = ItemType.CookedBeef; - mappings[23920640] = ItemType.Chicken; - mappings[23986176] = ItemType.CookedChicken; - mappings[24051712] = ItemType.RottenFlesh; - mappings[24117248] = ItemType.EnderPearl; - mappings[24182784] = ItemType.BlazeRod; - mappings[24248320] = ItemType.GhastTear; - mappings[24313856] = ItemType.GoldNugget; - mappings[24379392] = ItemType.NetherWart; - mappings[24444928] = ItemType.Potion; - mappings[24510464] = ItemType.GlassBottle; - mappings[24576000] = ItemType.SpiderEye; - mappings[24641536] = ItemType.FermentedSpiderEye; - mappings[24707072] = ItemType.BlazePowder; - mappings[24772608] = ItemType.MagmaCream; - mappings[24838144] = ItemType.BrewingStand; - mappings[24903680] = ItemType.Cauldron; - mappings[24969216] = ItemType.EnderEye; - mappings[25034752] = ItemType.GlisteringMelonSlice; - mappings[25100288] = ItemType.BatSpawnEgg; - mappings[25100288] = ItemType.BlazeSpawnEgg; - mappings[25100288] = ItemType.CaveSpiderSpawnEgg; - mappings[25100288] = ItemType.ChickenSpawnEgg; - mappings[25100288] = ItemType.CowSpawnEgg; - mappings[25100288] = ItemType.CreeperSpawnEgg; - mappings[25100288] = ItemType.EndermanSpawnEgg; - mappings[25100288] = ItemType.EndermiteSpawnEgg; - mappings[25100288] = ItemType.GhastSpawnEgg; - mappings[25100288] = ItemType.GuardianSpawnEgg; - mappings[25100288] = ItemType.HorseSpawnEgg; - mappings[25100288] = ItemType.MagmaCubeSpawnEgg; - mappings[25100288] = ItemType.MooshroomSpawnEgg; - mappings[25100288] = ItemType.OcelotSpawnEgg; - mappings[25100288] = ItemType.PigSpawnEgg; - mappings[25100288] = ItemType.PolarBearSpawnEgg; - mappings[25100288] = ItemType.RabbitSpawnEgg; - mappings[25100288] = ItemType.SheepSpawnEgg; - mappings[25100288] = ItemType.ShulkerSpawnEgg; - mappings[25100288] = ItemType.SilverfishSpawnEgg; - mappings[25100288] = ItemType.SkeletonSpawnEgg; - mappings[25100288] = ItemType.SlimeSpawnEgg; - mappings[25100288] = ItemType.SpiderSpawnEgg; - mappings[25100288] = ItemType.SquidSpawnEgg; - mappings[25100288] = ItemType.VillagerSpawnEgg; - mappings[25100288] = ItemType.WitchSpawnEgg; - mappings[25100288] = ItemType.WolfSpawnEgg; - mappings[25100288] = ItemType.ZombieSpawnEgg; - mappings[25100288] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[25165824] = ItemType.ExperienceBottle; - mappings[25231360] = ItemType.FireCharge; - mappings[25296896] = ItemType.WritableBook; - mappings[25362432] = ItemType.WrittenBook; - mappings[25427968] = ItemType.Emerald; - mappings[25493504] = ItemType.ItemFrame; - mappings[25559040] = ItemType.FlowerPot; - mappings[25624576] = ItemType.Carrot; - mappings[25690112] = ItemType.Potato; - mappings[25755648] = ItemType.BakedPotato; - mappings[25821184] = ItemType.PoisonousPotato; - mappings[25886720] = ItemType.Map; - mappings[25952256] = ItemType.GoldenCarrot; - mappings[26017792] = ItemType.SkeletonSkull; - mappings[26017793] = ItemType.WitherSkeletonSkull; - mappings[26017794] = ItemType.ZombieHead; - mappings[26017795] = ItemType.PlayerHead; - mappings[26017796] = ItemType.CreeperHead; - mappings[26017797] = ItemType.DragonHead; - mappings[26083328] = ItemType.CarrotOnAStick; - mappings[26148864] = ItemType.NetherStar; - mappings[26214400] = ItemType.PumpkinPie; - mappings[26279936] = ItemType.FireworkRocket; - mappings[26411008] = ItemType.EnchantedBook; - mappings[26476544] = ItemType.Comparator; - mappings[26542080] = ItemType.NetherBrick; - mappings[26607616] = ItemType.Quartz; - mappings[26673152] = ItemType.TntMinecart; - mappings[26738688] = ItemType.HopperMinecart; - mappings[26804224] = ItemType.PrismarineShard; - mappings[26869760] = ItemType.PrismarineCrystals; - mappings[26935296] = ItemType.Rabbit; - mappings[27000832] = ItemType.CookedRabbit; - mappings[27066368] = ItemType.RabbitStew; - mappings[27131904] = ItemType.RabbitFoot; - mappings[27197440] = ItemType.RabbitHide; - mappings[27262976] = ItemType.ArmorStand; - mappings[27328512] = ItemType.IronHorseArmor; - mappings[27394048] = ItemType.GoldenHorseArmor; - mappings[27459584] = ItemType.DiamondHorseArmor; - mappings[27525120] = ItemType.Lead; - mappings[27590656] = ItemType.NameTag; - mappings[27656192] = ItemType.CommandBlockMinecart; - mappings[27721728] = ItemType.Mutton; - mappings[27787264] = ItemType.CookedMutton; - mappings[27852800] = ItemType.BlackBanner; - mappings[27852801] = ItemType.RedBanner; - mappings[27852802] = ItemType.GreenBanner; - mappings[27852803] = ItemType.BrownBanner; - mappings[27852804] = ItemType.BlueBanner; - mappings[27852805] = ItemType.PurpleBanner; - mappings[27852806] = ItemType.CyanBanner; - mappings[27852807] = ItemType.LightGrayBanner; - mappings[27852808] = ItemType.GrayBanner; - mappings[27852809] = ItemType.PinkBanner; - mappings[27852810] = ItemType.LimeBanner; - mappings[27852811] = ItemType.YellowBanner; - mappings[27852812] = ItemType.LightBlueBanner; - mappings[27852813] = ItemType.MagentaBanner; - mappings[27852814] = ItemType.OrangeBanner; - mappings[27852815] = ItemType.WhiteBanner; - mappings[27918336] = ItemType.EndCrystal; - mappings[27983872] = ItemType.SpruceDoor; - mappings[28049408] = ItemType.BirchDoor; - mappings[28114944] = ItemType.JungleDoor; - mappings[28180480] = ItemType.AcaciaDoor; - mappings[28246016] = ItemType.DarkOakDoor; - mappings[28311552] = ItemType.ChorusFruit; - mappings[28377088] = ItemType.PoppedChorusFruit; - mappings[28442624] = ItemType.Beetroot; - mappings[28508160] = ItemType.BeetrootSeeds; - mappings[28573696] = ItemType.BeetrootSoup; - mappings[28639232] = ItemType.DragonBreath; - mappings[28704768] = ItemType.SplashPotion; - mappings[28770304] = ItemType.SpectralArrow; - mappings[28835840] = ItemType.Arrow; - mappings[28901376] = ItemType.LingeringPotion; - mappings[28966912] = ItemType.Shield; - mappings[29032448] = ItemType.Elytra; - mappings[29097984] = ItemType.SpruceBoat; - mappings[29163520] = ItemType.BirchBoat; - mappings[29229056] = ItemType.JungleBoat; - mappings[29294592] = ItemType.AcaciaBoat; - mappings[29360128] = ItemType.DarkOakBoat; - mappings[147849216] = ItemType.MusicDisc13; - mappings[147914752] = ItemType.MusicDiscCat; - mappings[147980288] = ItemType.MusicDiscBlocks; - mappings[148045824] = ItemType.MusicDiscChirp; - mappings[148111360] = ItemType.MusicDiscFar; - mappings[148176896] = ItemType.MusicDiscMall; - mappings[148242432] = ItemType.MusicDiscMellohi; - mappings[148307968] = ItemType.MusicDiscStal; - mappings[148373504] = ItemType.MusicDiscStrad; - mappings[148439040] = ItemType.MusicDiscWard; - mappings[148504576] = ItemType.MusicDisc11; - mappings[148570112] = ItemType.MusicDiscWait; - mappings[9371648] = ItemType.OakButton; - mappings[17563648] = ItemType.WoodenSword; - mappings[17629184] = ItemType.WoodenShovel; - mappings[17694720] = ItemType.WoodenPickaxe; - mappings[17760256] = ItemType.WoodenAxe; - mappings[19005440] = ItemType.WoodenHoe; - mappings[19333120] = ItemType.WheatSeeds; - mappings[19398656] = ItemType.Wheat; - mappings[21233664] = ItemType.OakDoor; - mappings[21364736] = ItemType.WaterBucket; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} \ No newline at end of file diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette111.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette111.cs deleted file mode 100644 index 02f2694809..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette111.cs +++ /dev/null @@ -1,646 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - /// - /// For MC 1.8 - /// Done manually by Milutinke :( - /// - public class ItemPalette111 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette111() - { - // Mapping IDs are a derived from: (Item ID << 16) | Data - mappings[0] = ItemType.Air; - mappings[65536] = ItemType.Stone; - mappings[65537] = ItemType.Granite; - mappings[65538] = ItemType.PolishedGranite; - mappings[65539] = ItemType.Diorite; - mappings[65540] = ItemType.PolishedDiorite; - mappings[65541] = ItemType.Andesite; - mappings[65542] = ItemType.PolishedAndesite; - mappings[131072] = ItemType.GrassBlock; - mappings[196608] = ItemType.Dirt; - mappings[196609] = ItemType.CoarseDirt; - mappings[196610] = ItemType.Podzol; - mappings[262144] = ItemType.Cobblestone; - mappings[327680] = ItemType.OakPlanks; - mappings[327681] = ItemType.SprucePlanks; - mappings[327682] = ItemType.BirchPlanks; - mappings[327683] = ItemType.JunglePlanks; - mappings[327684] = ItemType.AcaciaPlanks; - mappings[327685] = ItemType.DarkOakPlanks; - mappings[393216] = ItemType.OakSapling; - mappings[393217] = ItemType.SpruceSapling; - mappings[393218] = ItemType.BirchSapling; - mappings[393219] = ItemType.JungleSapling; - mappings[393220] = ItemType.AcaciaSapling; - mappings[393221] = ItemType.DarkOakSapling; - mappings[458752] = ItemType.Bedrock; - mappings[524288] = ItemType.WaterBucket; // Still Water Block Item - mappings[589824] = ItemType.WaterBucket; // Flowing Water Block Item - mappings[655360] = ItemType.LavaBucket; // Still Lava Block Item - mappings[720896] = ItemType.LavaBucket; // Flowing Lava Block Item - mappings[786432] = ItemType.Sand; - mappings[786433] = ItemType.RedSand; - mappings[851968] = ItemType.Gravel; - mappings[917504] = ItemType.GoldOre; - mappings[983040] = ItemType.IronOre; - mappings[1048576] = ItemType.CoalOre; - mappings[1114112] = ItemType.OakLog; - mappings[1114113] = ItemType.SpruceLog; - mappings[1114114] = ItemType.BirchLog; - mappings[1114115] = ItemType.JungleLog; - mappings[1179648] = ItemType.OakLeaves; - mappings[1179649] = ItemType.SpruceLeaves; - mappings[1179650] = ItemType.BirchLeaves; - mappings[1179651] = ItemType.JungleLeaves; - mappings[1245184] = ItemType.Sponge; - mappings[1245185] = ItemType.WetSponge; - mappings[1310720] = ItemType.Glass; - mappings[1376256] = ItemType.LapisOre; - mappings[1441792] = ItemType.LapisBlock; - mappings[1507328] = ItemType.Dispenser; - mappings[1572864] = ItemType.Sandstone; - mappings[1572865] = ItemType.ChiseledSandstone; - mappings[1572866] = ItemType.SmoothSandstone; - mappings[1638400] = ItemType.NoteBlock; - mappings[1769472] = ItemType.PoweredRail; - mappings[1835008] = ItemType.DetectorRail; - mappings[1900544] = ItemType.StickyPiston; - mappings[1966080] = ItemType.Cobweb; - mappings[2031617] = ItemType.ShortGrass; - mappings[2031618] = ItemType.Fern; - mappings[2097152] = ItemType.DeadBush; - mappings[2162688] = ItemType.Piston; - mappings[2293760] = ItemType.WhiteWool; - mappings[2293761] = ItemType.OrangeWool; - mappings[2293762] = ItemType.MagentaWool; - mappings[2293763] = ItemType.LightBlueWool; - mappings[2293764] = ItemType.YellowWool; - mappings[2293765] = ItemType.LimeWool; - mappings[2293766] = ItemType.PinkWool; - mappings[2293767] = ItemType.GrayWool; - mappings[2293768] = ItemType.LightGrayWool; - mappings[2293769] = ItemType.CyanWool; - mappings[2293770] = ItemType.PurpleWool; - mappings[2293771] = ItemType.BlueWool; - mappings[2293772] = ItemType.BrownWool; - mappings[2293773] = ItemType.GreenWool; - mappings[2293774] = ItemType.RedWool; - mappings[2293775] = ItemType.BlackWool; - mappings[2424832] = ItemType.Dandelion; - mappings[2490368] = ItemType.Poppy; - mappings[2490369] = ItemType.BlueOrchid; - mappings[2490370] = ItemType.Allium; - mappings[2490371] = ItemType.AzureBluet; - mappings[2490372] = ItemType.RedTulip; - mappings[2490373] = ItemType.OrangeTulip; - mappings[2490374] = ItemType.WhiteTulip; - mappings[2490375] = ItemType.PinkTulip; - mappings[2490376] = ItemType.OxeyeDaisy; - mappings[2555904] = ItemType.BrownMushroom; - mappings[2621440] = ItemType.RedMushroom; - mappings[2686976] = ItemType.GoldBlock; - mappings[2752512] = ItemType.IronBlock; - mappings[2883584] = ItemType.StoneSlab; - mappings[2883585] = ItemType.SandstoneSlab; - mappings[2883587] = ItemType.CobblestoneSlab; - mappings[2883588] = ItemType.BrickSlab; - mappings[2883589] = ItemType.StoneBrickSlab; - mappings[2883590] = ItemType.NetherBrickSlab; - mappings[2883591] = ItemType.QuartzSlab; - mappings[2949120] = ItemType.Bricks; - mappings[3014656] = ItemType.Tnt; - mappings[3080192] = ItemType.Bookshelf; - mappings[3145728] = ItemType.MossyCobblestone; - mappings[3211264] = ItemType.Obsidian; - mappings[3276800] = ItemType.Torch; - mappings[3407872] = ItemType.Spawner; - mappings[3473408] = ItemType.OakStairs; - mappings[3538944] = ItemType.Chest; - mappings[3670016] = ItemType.DiamondOre; - mappings[3735552] = ItemType.DiamondBlock; - mappings[3801088] = ItemType.CraftingTable; - mappings[3932160] = ItemType.Farmland; - mappings[3997696] = ItemType.Furnace; - mappings[4259840] = ItemType.Ladder; - mappings[4325376] = ItemType.Rail; - mappings[4390912] = ItemType.CobblestoneStairs; - mappings[4521984] = ItemType.Lever; - mappings[4587520] = ItemType.StonePressurePlate; - mappings[4718592] = ItemType.OakPressurePlate; - mappings[4784128] = ItemType.RedstoneOre; - mappings[4980736] = ItemType.RedstoneTorch; - mappings[5046272] = ItemType.StoneButton; - mappings[5111808] = ItemType.Snow; - mappings[5177344] = ItemType.Ice; - mappings[5242880] = ItemType.SnowBlock; - mappings[5308416] = ItemType.Cactus; - mappings[5373952] = ItemType.Clay; - mappings[5505024] = ItemType.Jukebox; - mappings[5570560] = ItemType.OakFence; - mappings[5636096] = ItemType.Pumpkin; - mappings[5701632] = ItemType.Netherrack; - mappings[5767168] = ItemType.SoulSand; - mappings[5832704] = ItemType.Glowstone; - mappings[5963776] = ItemType.JackOLantern; - mappings[6225920] = ItemType.WhiteStainedGlass; - mappings[6225921] = ItemType.OrangeStainedGlass; - mappings[6225922] = ItemType.MagentaStainedGlass; - mappings[6225923] = ItemType.LightBlueStainedGlass; - mappings[6225924] = ItemType.YellowStainedGlass; - mappings[6225925] = ItemType.LimeStainedGlass; - mappings[6225926] = ItemType.PinkStainedGlass; - mappings[6225927] = ItemType.GrayStainedGlass; - mappings[6225928] = ItemType.LightGrayStainedGlass; - mappings[6225929] = ItemType.CyanStainedGlass; - mappings[6225930] = ItemType.PurpleStainedGlass; - mappings[6225931] = ItemType.BlueStainedGlass; - mappings[6225932] = ItemType.BrownStainedGlass; - mappings[6225933] = ItemType.GreenStainedGlass; - mappings[6225934] = ItemType.RedStainedGlass; - mappings[6225935] = ItemType.BlackStainedGlass; - mappings[6291456] = ItemType.OakTrapdoor; - mappings[6356992] = ItemType.InfestedStone; - mappings[6356993] = ItemType.InfestedCobblestone; - mappings[6356994] = ItemType.InfestedStoneBricks; - mappings[6356995] = ItemType.InfestedMossyStoneBricks; - mappings[6356996] = ItemType.InfestedCrackedStoneBricks; - mappings[6356997] = ItemType.InfestedChiseledStoneBricks; - mappings[6422528] = ItemType.StoneBricks; - mappings[6422529] = ItemType.MossyStoneBricks; - mappings[6422530] = ItemType.CrackedStoneBricks; - mappings[6422531] = ItemType.ChiseledStoneBricks; - mappings[6488064] = ItemType.BrownMushroomBlock; - mappings[6553600] = ItemType.RedMushroomBlock; - mappings[6619136] = ItemType.IronBars; - mappings[6684672] = ItemType.GlassPane; - mappings[6750208] = ItemType.Melon; - mappings[6946816] = ItemType.Vine; - mappings[7012352] = ItemType.OakFenceGate; - mappings[7077888] = ItemType.BrickStairs; - mappings[7143424] = ItemType.StoneBrickStairs; - mappings[7208960] = ItemType.Mycelium; - mappings[7340032] = ItemType.NetherBricks; - mappings[7405568] = ItemType.NetherBrickFence; - mappings[7471104] = ItemType.NetherBrickStairs; - mappings[7602176] = ItemType.EnchantingTable; - mappings[7864320] = ItemType.EndPortalFrame; - mappings[7929856] = ItemType.EndStone; - mappings[7995392] = ItemType.DragonEgg; - mappings[8060928] = ItemType.RedstoneLamp; - mappings[8388608] = ItemType.SandstoneStairs; - mappings[8454144] = ItemType.EmeraldOre; - mappings[8519680] = ItemType.EnderChest; - mappings[8585216] = ItemType.TripwireHook; - mappings[8716288] = ItemType.EmeraldBlock; - mappings[8781824] = ItemType.SpruceStairs; - mappings[8847360] = ItemType.BirchStairs; - mappings[8912896] = ItemType.JungleStairs; - mappings[8978432] = ItemType.CommandBlock; - mappings[9043968] = ItemType.Beacon; - mappings[9109504] = ItemType.CobblestoneWall; - mappings[9109505] = ItemType.MossyCobblestoneWall; - mappings[9502720] = ItemType.Anvil; - mappings[9502721] = ItemType.ChippedAnvil; - mappings[9502722] = ItemType.DamagedAnvil; - mappings[9568256] = ItemType.TrappedChest; - mappings[9633792] = ItemType.LightWeightedPressurePlate; - mappings[9699328] = ItemType.HeavyWeightedPressurePlate; - mappings[9895936] = ItemType.DaylightDetector; - mappings[9961472] = ItemType.RedstoneBlock; - mappings[10027008] = ItemType.NetherQuartzOre; - mappings[10092544] = ItemType.Hopper; - mappings[10158080] = ItemType.QuartzBlock; - mappings[10158081] = ItemType.ChiseledQuartzBlock; - mappings[10158082] = ItemType.QuartzPillar; - mappings[10223616] = ItemType.QuartzStairs; - mappings[10289152] = ItemType.ActivatorRail; - mappings[10354688] = ItemType.Dropper; - mappings[10420224] = ItemType.WhiteTerracotta; - mappings[10420225] = ItemType.OrangeTerracotta; - mappings[10420226] = ItemType.MagentaTerracotta; - mappings[10420227] = ItemType.LightBlueTerracotta; - mappings[10420228] = ItemType.YellowTerracotta; - mappings[10420229] = ItemType.LimeTerracotta; - mappings[10420230] = ItemType.PinkTerracotta; - mappings[10420231] = ItemType.GrayTerracotta; - mappings[10420232] = ItemType.LightGrayTerracotta; - mappings[10420233] = ItemType.CyanTerracotta; - mappings[10420234] = ItemType.PurpleTerracotta; - mappings[10420235] = ItemType.BlueTerracotta; - mappings[10420236] = ItemType.BrownTerracotta; - mappings[10420237] = ItemType.GreenTerracotta; - mappings[10420238] = ItemType.RedTerracotta; - mappings[10420239] = ItemType.BlackTerracotta; - mappings[10485760] = ItemType.WhiteStainedGlassPane; - mappings[10485761] = ItemType.OrangeStainedGlassPane; - mappings[10485762] = ItemType.MagentaStainedGlassPane; - mappings[10485763] = ItemType.LightBlueStainedGlassPane; - mappings[10485764] = ItemType.YellowStainedGlassPane; - mappings[10485765] = ItemType.LimeStainedGlassPane; - mappings[10485766] = ItemType.PinkStainedGlassPane; - mappings[10485767] = ItemType.GrayStainedGlassPane; - mappings[10485768] = ItemType.LightGrayStainedGlassPane; - mappings[10485769] = ItemType.CyanStainedGlassPane; - mappings[10485770] = ItemType.PurpleStainedGlassPane; - mappings[10485771] = ItemType.BlueStainedGlassPane; - mappings[10485772] = ItemType.BrownStainedGlassPane; - mappings[10485773] = ItemType.GreenStainedGlassPane; - mappings[10485774] = ItemType.RedStainedGlassPane; - mappings[10485775] = ItemType.BlackStainedGlassPane; - mappings[10551296] = ItemType.AcaciaLeaves; - mappings[10551297] = ItemType.DarkOakLeaves; - mappings[10616832] = ItemType.AcaciaLog; - mappings[10616833] = ItemType.DarkOakLog; - mappings[10682368] = ItemType.AcaciaStairs; - mappings[10747904] = ItemType.DarkOakStairs; - mappings[10813440] = ItemType.SlimeBlock; - mappings[10878976] = ItemType.Barrier; - mappings[10944512] = ItemType.IronTrapdoor; - mappings[11010048] = ItemType.Prismarine; - mappings[11010049] = ItemType.PrismarineBricks; - mappings[11010050] = ItemType.DarkPrismarine; - mappings[11075584] = ItemType.SeaLantern; - mappings[11141120] = ItemType.HayBlock; - mappings[11206656] = ItemType.WhiteCarpet; - mappings[11206657] = ItemType.OrangeCarpet; - mappings[11206658] = ItemType.MagentaCarpet; - mappings[11206659] = ItemType.LightBlueCarpet; - mappings[11206660] = ItemType.YellowCarpet; - mappings[11206661] = ItemType.LimeCarpet; - mappings[11206662] = ItemType.PinkCarpet; - mappings[11206663] = ItemType.GrayCarpet; - mappings[11206664] = ItemType.LightGrayCarpet; - mappings[11206665] = ItemType.CyanCarpet; - mappings[11206666] = ItemType.PurpleCarpet; - mappings[11206667] = ItemType.BlueCarpet; - mappings[11206668] = ItemType.BrownCarpet; - mappings[11206669] = ItemType.GreenCarpet; - mappings[11206670] = ItemType.RedCarpet; - mappings[11206671] = ItemType.BlackCarpet; - mappings[11272192] = ItemType.Terracotta; - mappings[11337728] = ItemType.CoalBlock; - mappings[11403264] = ItemType.PackedIce; - mappings[11468800] = ItemType.Sunflower; - mappings[11468801] = ItemType.Lilac; - mappings[11468802] = ItemType.TallGrass; - mappings[11468803] = ItemType.LargeFern; - mappings[11468804] = ItemType.RoseBush; - mappings[11468805] = ItemType.Peony; - mappings[11730944] = ItemType.RedSandstone; - mappings[11730945] = ItemType.ChiseledRedSandstone; - mappings[11730946] = ItemType.SmoothRedSandstone; - mappings[11796480] = ItemType.RedSandstoneStairs; - mappings[11927552] = ItemType.RedSandstoneSlab; - mappings[11993088] = ItemType.SpruceFenceGate; - mappings[12058624] = ItemType.BirchFenceGate; - mappings[12124160] = ItemType.JungleFenceGate; - mappings[12189696] = ItemType.DarkOakFenceGate; - mappings[12255232] = ItemType.AcaciaFenceGate; - mappings[12320768] = ItemType.SpruceFence; - mappings[12386304] = ItemType.BirchFence; - mappings[12451840] = ItemType.JungleFence; - mappings[12517376] = ItemType.DarkOakFence; - mappings[12582912] = ItemType.AcaciaFence; - mappings[12976128] = ItemType.EndRod; - mappings[13041664] = ItemType.ChorusPlant; - mappings[13107200] = ItemType.ChorusFlower; - mappings[13172736] = ItemType.PurpurBlock; - mappings[13238272] = ItemType.PurpurPillar; - mappings[13303808] = ItemType.PurpurStairs; - mappings[13434880] = ItemType.PurpurSlab; - mappings[13500416] = ItemType.EndStoneBricks; - mappings[13631488] = ItemType.DirtPath; - mappings[13762560] = ItemType.RepeatingCommandBlock; - mappings[13828096] = ItemType.ChainCommandBlock; - mappings[13959168] = ItemType.MagmaBlock; - mappings[14024704] = ItemType.NetherWartBlock; - mappings[14090240] = ItemType.RedNetherBricks; - mappings[14155776] = ItemType.BoneBlock; - mappings[14221312] = ItemType.StructureVoid; - mappings[14286848] = ItemType.Observer; - mappings[14417920] = ItemType.OrangeShulkerBox; - mappings[14483456] = ItemType.MagentaShulkerBox; - mappings[14548992] = ItemType.LightBlueShulkerBox; - mappings[14680064] = ItemType.LimeShulkerBox; - mappings[14745600] = ItemType.PinkShulkerBox; - mappings[14811136] = ItemType.GrayShulkerBox; - mappings[14876672] = ItemType.LightGrayShulkerBox; - mappings[14942208] = ItemType.CyanShulkerBox; - mappings[15007744] = ItemType.PurpleShulkerBox; - mappings[15073280] = ItemType.BlueShulkerBox; - mappings[15138816] = ItemType.BrownShulkerBox; - mappings[15204352] = ItemType.GreenShulkerBox; - mappings[15269888] = ItemType.RedShulkerBox; - mappings[15335424] = ItemType.BlackShulkerBox; - mappings[16711680] = ItemType.StructureBlock; - mappings[16777216] = ItemType.IronShovel; - mappings[16842752] = ItemType.IronPickaxe; - mappings[16908288] = ItemType.IronAxe; - mappings[16973824] = ItemType.FlintAndSteel; - mappings[17039360] = ItemType.Apple; - mappings[17104896] = ItemType.Bow; - mappings[17170432] = ItemType.Arrow; - mappings[17235968] = ItemType.Coal; - mappings[17235969] = ItemType.Charcoal; - mappings[17301504] = ItemType.Diamond; - mappings[17367040] = ItemType.IronIngot; - mappings[17432576] = ItemType.GoldIngot; - mappings[17498112] = ItemType.IronSword; - mappings[17825792] = ItemType.StoneSword; - mappings[17891328] = ItemType.StoneShovel; - mappings[17956864] = ItemType.StonePickaxe; - mappings[18022400] = ItemType.StoneAxe; - mappings[18087936] = ItemType.DiamondSword; - mappings[18153472] = ItemType.DiamondShovel; - mappings[18219008] = ItemType.DiamondPickaxe; - mappings[18284544] = ItemType.DiamondAxe; - mappings[18350080] = ItemType.Stick; - mappings[18415616] = ItemType.Bowl; - mappings[18481152] = ItemType.MushroomStew; - mappings[18546688] = ItemType.GoldenSword; - mappings[18612224] = ItemType.GoldenShovel; - mappings[18677760] = ItemType.GoldenPickaxe; - mappings[18743296] = ItemType.GoldenAxe; - mappings[18808832] = ItemType.String; - mappings[18874368] = ItemType.Feather; - mappings[18939904] = ItemType.Gunpowder; - mappings[19070976] = ItemType.StoneHoe; - mappings[19136512] = ItemType.IronHoe; - mappings[19202048] = ItemType.DiamondHoe; - mappings[19267584] = ItemType.GoldenHoe; - mappings[19464192] = ItemType.Bread; - mappings[19529728] = ItemType.LeatherHelmet; - mappings[19660800] = ItemType.LeatherLeggings; - mappings[19791872] = ItemType.ChainmailHelmet; - mappings[19857408] = ItemType.ChainmailChestplate; - mappings[19922944] = ItemType.ChainmailLeggings; - mappings[19988480] = ItemType.ChainmailBoots; - mappings[20054016] = ItemType.IronHelmet; - mappings[20119552] = ItemType.IronChestplate; - mappings[20185088] = ItemType.IronLeggings; - mappings[20250624] = ItemType.IronBoots; - mappings[20316160] = ItemType.DiamondHelmet; - mappings[20381696] = ItemType.DiamondChestplate; - mappings[20447232] = ItemType.DiamondLeggings; - mappings[20512768] = ItemType.DiamondBoots; - mappings[20578304] = ItemType.GoldenHelmet; - mappings[20643840] = ItemType.GoldenChestplate; - mappings[20709376] = ItemType.GoldenLeggings; - mappings[20774912] = ItemType.GoldenBoots; - mappings[20840448] = ItemType.Flint; - mappings[20905984] = ItemType.Porkchop; - mappings[20971520] = ItemType.CookedPorkchop; - mappings[21037056] = ItemType.Painting; - mappings[21102592] = ItemType.GoldenApple; - mappings[21102593] = ItemType.EnchantedGoldenApple; - mappings[21168128] = ItemType.OakSign; - mappings[21299200] = ItemType.Bucket; - mappings[21495808] = ItemType.Minecart; - mappings[21561344] = ItemType.Saddle; - mappings[21626880] = ItemType.IronDoor; - mappings[21692416] = ItemType.Redstone; - mappings[21757952] = ItemType.Snowball; - mappings[21823488] = ItemType.OakBoat; - mappings[21954560] = ItemType.MilkBucket; - mappings[22020096] = ItemType.Brick; - mappings[22085632] = ItemType.ClayBall; - mappings[22151168] = ItemType.Sugar; - mappings[22216704] = ItemType.Paper; - mappings[22282240] = ItemType.Book; - mappings[22347776] = ItemType.SlimeBall; - mappings[22413312] = ItemType.ChestMinecart; - mappings[22478848] = ItemType.FurnaceMinecart; - mappings[22544384] = ItemType.Egg; - mappings[22609920] = ItemType.Compass; - mappings[22675456] = ItemType.FishingRod; - mappings[22740992] = ItemType.Clock; - mappings[22806528] = ItemType.GlowstoneDust; - mappings[22872064] = ItemType.Salmon; - mappings[22872065] = ItemType.Salmon; - mappings[22872066] = ItemType.TropicalFish; - mappings[22872067] = ItemType.Pufferfish; - mappings[22937600] = ItemType.CookedSalmon; - mappings[22937601] = ItemType.CookedSalmon; - mappings[23003136] = ItemType.InkSac; - mappings[23003137] = ItemType.RedDye; - mappings[23003138] = ItemType.GreenDye; - mappings[23003139] = ItemType.CocoaBeans; - mappings[23003140] = ItemType.LapisLazuli; - mappings[23003141] = ItemType.PurpleDye; - mappings[23003142] = ItemType.CyanDye; - mappings[23003143] = ItemType.LightGrayDye; - mappings[23003144] = ItemType.GrayDye; - mappings[23003145] = ItemType.PinkDye; - mappings[23003146] = ItemType.LimeDye; - mappings[23003147] = ItemType.YellowDye; - mappings[23003148] = ItemType.LightBlueDye; - mappings[23003149] = ItemType.MagentaDye; - mappings[23003150] = ItemType.OrangeDye; - mappings[23003151] = ItemType.BoneMeal; - mappings[23068672] = ItemType.Bone; - mappings[23134208] = ItemType.Sugar; - mappings[23199744] = ItemType.Cake; - mappings[23265280] = ItemType.RedBed; - mappings[23330816] = ItemType.Repeater; - mappings[23396352] = ItemType.Cookie; - mappings[23527424] = ItemType.Shears; - mappings[23592960] = ItemType.MelonSlice; - mappings[23658496] = ItemType.PumpkinSeeds; - mappings[23724032] = ItemType.MelonSeeds; - mappings[23789568] = ItemType.Beef; - mappings[23855104] = ItemType.CookedBeef; - mappings[23920640] = ItemType.Chicken; - mappings[23986176] = ItemType.CookedChicken; - mappings[24051712] = ItemType.RottenFlesh; - mappings[24117248] = ItemType.EnderPearl; - mappings[24182784] = ItemType.BlazeRod; - mappings[24248320] = ItemType.GhastTear; - mappings[24313856] = ItemType.GoldNugget; - mappings[24379392] = ItemType.NetherWart; - mappings[24444928] = ItemType.Potion; - mappings[24510464] = ItemType.GlassBottle; - mappings[24576000] = ItemType.SpiderEye; - mappings[24641536] = ItemType.FermentedSpiderEye; - mappings[24707072] = ItemType.BlazePowder; - mappings[24772608] = ItemType.MagmaCream; - mappings[24838144] = ItemType.BrewingStand; - mappings[24903680] = ItemType.Cauldron; - mappings[24969216] = ItemType.EnderEye; - mappings[25034752] = ItemType.GlisteringMelonSlice; - mappings[25100288] = ItemType.BatSpawnEgg; - mappings[25100288] = ItemType.BlazeSpawnEgg; - mappings[25100288] = ItemType.CaveSpiderSpawnEgg; - mappings[25100288] = ItemType.ChickenSpawnEgg; - mappings[25100288] = ItemType.CowSpawnEgg; - mappings[25100288] = ItemType.CreeperSpawnEgg; - mappings[25100288] = ItemType.DonkeySpawnEgg; - mappings[25100288] = ItemType.ElderGuardianSpawnEgg; - mappings[25100288] = ItemType.EndermanSpawnEgg; - mappings[25100288] = ItemType.EndermiteSpawnEgg; - mappings[25100288] = ItemType.EvokerSpawnEgg; - mappings[25100288] = ItemType.GhastSpawnEgg; - mappings[25100288] = ItemType.GuardianSpawnEgg; - mappings[25100288] = ItemType.HorseSpawnEgg; - mappings[25100288] = ItemType.HuskSpawnEgg; - mappings[25100288] = ItemType.LlamaSpawnEgg; - mappings[25100288] = ItemType.MagmaCubeSpawnEgg; - mappings[25100288] = ItemType.MooshroomSpawnEgg; - mappings[25100288] = ItemType.MuleSpawnEgg; - mappings[25100288] = ItemType.OcelotSpawnEgg; - mappings[25100288] = ItemType.PigSpawnEgg; - mappings[25100288] = ItemType.PolarBearSpawnEgg; - mappings[25100288] = ItemType.RabbitSpawnEgg; - mappings[25100288] = ItemType.SheepSpawnEgg; - mappings[25100288] = ItemType.ShulkerSpawnEgg; - mappings[25100288] = ItemType.SilverfishSpawnEgg; - mappings[25100288] = ItemType.SkeletonHorseSpawnEgg; - mappings[25100288] = ItemType.SkeletonSpawnEgg; - mappings[25100288] = ItemType.SlimeSpawnEgg; - mappings[25100288] = ItemType.SpiderSpawnEgg; - mappings[25100288] = ItemType.SquidSpawnEgg; - mappings[25100288] = ItemType.StraySpawnEgg; - mappings[25100288] = ItemType.VexSpawnEgg; - mappings[25100288] = ItemType.VillagerSpawnEgg; - mappings[25100288] = ItemType.VindicatorSpawnEgg; - mappings[25100288] = ItemType.WitchSpawnEgg; - mappings[25100288] = ItemType.WitherSkeletonSpawnEgg; - mappings[25100288] = ItemType.WolfSpawnEgg; - mappings[25100288] = ItemType.ZombieHorseSpawnEgg; - mappings[25100288] = ItemType.ZombieSpawnEgg; - mappings[25100288] = ItemType.ZombieVillagerSpawnEgg; - mappings[25100288] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[25165824] = ItemType.ExperienceBottle; - mappings[25231360] = ItemType.FireCharge; - mappings[25427968] = ItemType.Emerald; - mappings[25493504] = ItemType.ItemFrame; - mappings[25559040] = ItemType.FlowerPot; - mappings[25624576] = ItemType.Carrot; - mappings[25690112] = ItemType.Potato; - mappings[25755648] = ItemType.BakedPotato; - mappings[25821184] = ItemType.PoisonousPotato; - mappings[25886720] = ItemType.Map; - mappings[25952256] = ItemType.GoldenCarrot; - mappings[26017792] = ItemType.SkeletonSkull; - mappings[26017793] = ItemType.WitherSkeletonSkull; - mappings[26017794] = ItemType.ZombieHead; - mappings[26017795] = ItemType.PlayerHead; - mappings[26017796] = ItemType.CreeperHead; - mappings[26017797] = ItemType.DragonHead; - mappings[26083328] = ItemType.CarrotOnAStick; - mappings[26148864] = ItemType.NetherStar; - mappings[26214400] = ItemType.PumpkinPie; - mappings[26279936] = ItemType.FireworkRocket; - mappings[26411008] = ItemType.EnchantedBook; - mappings[26476544] = ItemType.Comparator; - mappings[26542080] = ItemType.NetherBrick; - mappings[26607616] = ItemType.Quartz; - mappings[26673152] = ItemType.TntMinecart; - mappings[26738688] = ItemType.HopperMinecart; - mappings[26804224] = ItemType.PrismarineShard; - mappings[26869760] = ItemType.PrismarineCrystals; - mappings[26935296] = ItemType.Rabbit; - mappings[27000832] = ItemType.CookedRabbit; - mappings[27066368] = ItemType.RabbitStew; - mappings[27131904] = ItemType.RabbitFoot; - mappings[27197440] = ItemType.RabbitHide; - mappings[27262976] = ItemType.ArmorStand; - mappings[27328512] = ItemType.IronHorseArmor; - mappings[27394048] = ItemType.GoldenHorseArmor; - mappings[27459584] = ItemType.DiamondHorseArmor; - mappings[27590656] = ItemType.NameTag; - mappings[27656192] = ItemType.CommandBlockMinecart; - mappings[27721728] = ItemType.Mutton; - mappings[27787264] = ItemType.CookedMutton; - mappings[27852800] = ItemType.BlackBanner; - mappings[27852801] = ItemType.RedBanner; - mappings[27852802] = ItemType.GreenBanner; - mappings[27852803] = ItemType.BrownBanner; - mappings[27852804] = ItemType.BlueBanner; - mappings[27852805] = ItemType.PurpleBanner; - mappings[27852806] = ItemType.CyanBanner; - mappings[27852807] = ItemType.LightGrayBanner; - mappings[27852808] = ItemType.GrayBanner; - mappings[27852809] = ItemType.PinkBanner; - mappings[27852810] = ItemType.LimeBanner; - mappings[27852811] = ItemType.YellowBanner; - mappings[27852812] = ItemType.LightBlueBanner; - mappings[27852813] = ItemType.MagentaBanner; - mappings[27852814] = ItemType.OrangeBanner; - mappings[27852815] = ItemType.WhiteBanner; - mappings[27918336] = ItemType.EndCrystal; - mappings[27983872] = ItemType.SpruceDoor; - mappings[28049408] = ItemType.BirchDoor; - mappings[28114944] = ItemType.JungleDoor; - mappings[28180480] = ItemType.AcaciaDoor; - mappings[28246016] = ItemType.DarkOakDoor; - mappings[28311552] = ItemType.ChorusFruit; - mappings[28377088] = ItemType.PoppedChorusFruit; - mappings[28442624] = ItemType.Beetroot; - mappings[28508160] = ItemType.BeetrootSeeds; - mappings[28573696] = ItemType.BeetrootSoup; - mappings[28639232] = ItemType.DragonBreath; - mappings[28704768] = ItemType.SplashPotion; - mappings[28770304] = ItemType.SpectralArrow; - mappings[28835840] = ItemType.Arrow; - mappings[28901376] = ItemType.LingeringPotion; - mappings[28966912] = ItemType.Shield; - mappings[29032448] = ItemType.Elytra; - mappings[29097984] = ItemType.SpruceBoat; - mappings[29163520] = ItemType.BirchBoat; - mappings[29229056] = ItemType.JungleBoat; - mappings[29294592] = ItemType.AcaciaBoat; - mappings[29360128] = ItemType.DarkOakBoat; - mappings[29425664] = ItemType.TotemOfUndying; - mappings[29622272] = ItemType.IronNugget; - mappings[19595264] = ItemType.LeatherChestplate; - mappings[19726336] = ItemType.LeatherBoots; - mappings[21430272] = ItemType.LavaBucket; - mappings[21889024] = ItemType.Leather; - mappings[27525120] = ItemType.Lead; - mappings[29491200] = ItemType.ShulkerShell; - mappings[147849216] = ItemType.MusicDisc13; - mappings[147914752] = ItemType.MusicDiscCat; - mappings[147980288] = ItemType.MusicDiscBlocks; - mappings[148045824] = ItemType.MusicDiscChirp; - mappings[148111360] = ItemType.MusicDiscFar; - mappings[148176896] = ItemType.MusicDiscMall; - mappings[148242432] = ItemType.MusicDiscMellohi; - mappings[148307968] = ItemType.MusicDiscStal; - mappings[148373504] = ItemType.MusicDiscStrad; - mappings[148439040] = ItemType.MusicDiscWard; - mappings[148504576] = ItemType.MusicDisc11; - mappings[148570112] = ItemType.MusicDiscWait; - mappings[7274496] = ItemType.LilyPad; - mappings[8257536] = ItemType.OakSlab; - mappings[8257537] = ItemType.SpruceSlab; - mappings[8257538] = ItemType.BirchSlab; - mappings[8257539] = ItemType.JungleSlab; - mappings[8257540] = ItemType.AcaciaSlab; - mappings[8257541] = ItemType.DarkOakSlab; - mappings[9371648] = ItemType.OakButton; - mappings[14352384] = ItemType.WhiteShulkerBox; - mappings[14614528] = ItemType.YellowShulkerBox; - mappings[17563648] = ItemType.WoodenSword; - mappings[17629184] = ItemType.WoodenShovel; - mappings[17694720] = ItemType.WoodenPickaxe; - mappings[17760256] = ItemType.WoodenAxe; - mappings[19005440] = ItemType.WoodenHoe; - mappings[19333120] = ItemType.WheatSeeds; - mappings[19398656] = ItemType.Wheat; - mappings[21233664] = ItemType.OakDoor; - mappings[21364736] = ItemType.WaterBucket; - mappings[25296896] = ItemType.WritableBook; - mappings[25362432] = ItemType.WrittenBook; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} \ No newline at end of file diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette112.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette112.cs deleted file mode 100644 index b6758b62c0..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette112.cs +++ /dev/null @@ -1,669 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - /// - /// For MC 1.8 - /// Done manually by Milutinke :( - /// - public class ItemPalette112 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette112() - { - // Mapping IDs are a derived from: (Item ID << 16) | Data - mappings[0] = ItemType.Air; - mappings[65536] = ItemType.Stone; - mappings[65537] = ItemType.Granite; - mappings[65538] = ItemType.PolishedGranite; - mappings[65539] = ItemType.Diorite; - mappings[65540] = ItemType.PolishedDiorite; - mappings[65541] = ItemType.Andesite; - mappings[65542] = ItemType.PolishedAndesite; - mappings[131072] = ItemType.GrassBlock; - mappings[196608] = ItemType.Dirt; - mappings[196609] = ItemType.CoarseDirt; - mappings[196610] = ItemType.Podzol; - mappings[262144] = ItemType.Cobblestone; - mappings[327680] = ItemType.OakPlanks; - mappings[327681] = ItemType.SprucePlanks; - mappings[327682] = ItemType.BirchPlanks; - mappings[327683] = ItemType.JunglePlanks; - mappings[327684] = ItemType.AcaciaPlanks; - mappings[327685] = ItemType.DarkOakPlanks; - mappings[393216] = ItemType.OakSapling; - mappings[393217] = ItemType.SpruceSapling; - mappings[393218] = ItemType.BirchSapling; - mappings[393219] = ItemType.JungleSapling; - mappings[393220] = ItemType.AcaciaSapling; - mappings[393221] = ItemType.DarkOakSapling; - mappings[458752] = ItemType.Bedrock; - mappings[524288] = ItemType.WaterBucket; // Still Water Block Item - mappings[589824] = ItemType.WaterBucket; // Flowing Water Block Item - mappings[655360] = ItemType.LavaBucket; // Still Lava Block Item - mappings[720896] = ItemType.LavaBucket; // Flowing Lava Block Item - mappings[786432] = ItemType.Sand; - mappings[786433] = ItemType.RedSand; - mappings[851968] = ItemType.Gravel; - mappings[917504] = ItemType.GoldOre; - mappings[983040] = ItemType.IronOre; - mappings[1048576] = ItemType.CoalOre; - mappings[1245184] = ItemType.Sponge; - mappings[1245185] = ItemType.WetSponge; - mappings[1310720] = ItemType.Glass; - mappings[1376256] = ItemType.LapisOre; - mappings[1441792] = ItemType.LapisBlock; - mappings[1507328] = ItemType.Dispenser; - mappings[1572864] = ItemType.Sandstone; - mappings[1572865] = ItemType.ChiseledSandstone; - mappings[1572866] = ItemType.SmoothSandstone; - mappings[1638400] = ItemType.NoteBlock; - mappings[1769472] = ItemType.PoweredRail; - mappings[1835008] = ItemType.DetectorRail; - mappings[1900544] = ItemType.StickyPiston; - mappings[2031617] = ItemType.ShortGrass; - mappings[2031618] = ItemType.Fern; - mappings[2097152] = ItemType.DeadBush; - mappings[2162688] = ItemType.Piston; - mappings[2490368] = ItemType.Poppy; - mappings[2490369] = ItemType.BlueOrchid; - mappings[2490370] = ItemType.Allium; - mappings[2490371] = ItemType.AzureBluet; - mappings[2490372] = ItemType.RedTulip; - mappings[2490373] = ItemType.OrangeTulip; - mappings[2490374] = ItemType.WhiteTulip; - mappings[2490375] = ItemType.PinkTulip; - mappings[2490376] = ItemType.OxeyeDaisy; - mappings[2555904] = ItemType.BrownMushroom; - mappings[2621440] = ItemType.RedMushroom; - mappings[2686976] = ItemType.GoldBlock; - mappings[2752512] = ItemType.IronBlock; - mappings[2883584] = ItemType.StoneSlab; - mappings[2883585] = ItemType.SandstoneSlab; - mappings[2883587] = ItemType.CobblestoneSlab; - mappings[2883588] = ItemType.BrickSlab; - mappings[2883589] = ItemType.StoneBrickSlab; - mappings[2883590] = ItemType.NetherBrickSlab; - mappings[2883591] = ItemType.QuartzSlab; - mappings[2949120] = ItemType.Bricks; - mappings[3014656] = ItemType.Tnt; - mappings[3080192] = ItemType.Bookshelf; - mappings[3145728] = ItemType.MossyCobblestone; - mappings[3211264] = ItemType.Obsidian; - mappings[3276800] = ItemType.Torch; - mappings[3407872] = ItemType.Spawner; - mappings[3473408] = ItemType.OakStairs; - mappings[3538944] = ItemType.Chest; - mappings[3670016] = ItemType.DiamondOre; - mappings[3735552] = ItemType.DiamondBlock; - mappings[3801088] = ItemType.CraftingTable; - mappings[3932160] = ItemType.Farmland; - mappings[3997696] = ItemType.Furnace; - mappings[4259840] = ItemType.Ladder; - mappings[4325376] = ItemType.Rail; - mappings[4390912] = ItemType.CobblestoneStairs; - mappings[4587520] = ItemType.StonePressurePlate; - mappings[4784128] = ItemType.RedstoneOre; - mappings[4980736] = ItemType.RedstoneTorch; - mappings[5046272] = ItemType.StoneButton; - mappings[5111808] = ItemType.Snow; - mappings[5177344] = ItemType.Ice; - mappings[5242880] = ItemType.SnowBlock; - mappings[5308416] = ItemType.Cactus; - mappings[5373952] = ItemType.Clay; - mappings[5505024] = ItemType.Jukebox; - mappings[5570560] = ItemType.OakFence; - mappings[5636096] = ItemType.Pumpkin; - mappings[5701632] = ItemType.Netherrack; - mappings[5767168] = ItemType.SoulSand; - mappings[5832704] = ItemType.Glowstone; - mappings[6225920] = ItemType.WhiteStainedGlass; - mappings[6225921] = ItemType.OrangeStainedGlass; - mappings[6225922] = ItemType.MagentaStainedGlass; - mappings[6225923] = ItemType.LightBlueStainedGlass; - mappings[6225924] = ItemType.YellowStainedGlass; - mappings[6225925] = ItemType.LimeStainedGlass; - mappings[6225926] = ItemType.PinkStainedGlass; - mappings[6225927] = ItemType.GrayStainedGlass; - mappings[6225928] = ItemType.LightGrayStainedGlass; - mappings[6225929] = ItemType.CyanStainedGlass; - mappings[6225930] = ItemType.PurpleStainedGlass; - mappings[6225931] = ItemType.BlueStainedGlass; - mappings[6225932] = ItemType.BrownStainedGlass; - mappings[6225933] = ItemType.GreenStainedGlass; - mappings[6225934] = ItemType.RedStainedGlass; - mappings[6225935] = ItemType.BlackStainedGlass; - mappings[6291456] = ItemType.OakTrapdoor; - mappings[6356992] = ItemType.InfestedStone; - mappings[6356993] = ItemType.InfestedCobblestone; - mappings[6356994] = ItemType.InfestedStoneBricks; - mappings[6356995] = ItemType.InfestedMossyStoneBricks; - mappings[6356996] = ItemType.InfestedCrackedStoneBricks; - mappings[6356997] = ItemType.InfestedChiseledStoneBricks; - mappings[6422528] = ItemType.StoneBricks; - mappings[6422529] = ItemType.MossyStoneBricks; - mappings[6422530] = ItemType.CrackedStoneBricks; - mappings[6422531] = ItemType.ChiseledStoneBricks; - mappings[6488064] = ItemType.BrownMushroomBlock; - mappings[6553600] = ItemType.RedMushroomBlock; - mappings[6619136] = ItemType.IronBars; - mappings[6684672] = ItemType.GlassPane; - mappings[6750208] = ItemType.Melon; - mappings[6946816] = ItemType.Vine; - mappings[7012352] = ItemType.OakFenceGate; - mappings[7077888] = ItemType.BrickStairs; - mappings[7143424] = ItemType.StoneBrickStairs; - mappings[7208960] = ItemType.Mycelium; - mappings[7340032] = ItemType.NetherBricks; - mappings[7405568] = ItemType.NetherBrickFence; - mappings[7471104] = ItemType.NetherBrickStairs; - mappings[7602176] = ItemType.EnchantingTable; - mappings[7864320] = ItemType.EndPortalFrame; - mappings[7929856] = ItemType.EndStone; - mappings[7995392] = ItemType.DragonEgg; - mappings[8060928] = ItemType.RedstoneLamp; - mappings[8388608] = ItemType.SandstoneStairs; - mappings[8454144] = ItemType.EmeraldOre; - mappings[8519680] = ItemType.EnderChest; - mappings[8585216] = ItemType.TripwireHook; - mappings[8716288] = ItemType.EmeraldBlock; - mappings[8781824] = ItemType.SpruceStairs; - mappings[8847360] = ItemType.BirchStairs; - mappings[8912896] = ItemType.JungleStairs; - mappings[8978432] = ItemType.CommandBlock; - mappings[9043968] = ItemType.Beacon; - mappings[9109504] = ItemType.CobblestoneWall; - mappings[9109505] = ItemType.MossyCobblestoneWall; - mappings[9502720] = ItemType.Anvil; - mappings[9502721] = ItemType.ChippedAnvil; - mappings[9502722] = ItemType.DamagedAnvil; - mappings[9568256] = ItemType.TrappedChest; - mappings[9699328] = ItemType.HeavyWeightedPressurePlate; - mappings[9895936] = ItemType.DaylightDetector; - mappings[9961472] = ItemType.RedstoneBlock; - mappings[10027008] = ItemType.NetherQuartzOre; - mappings[10092544] = ItemType.Hopper; - mappings[10158080] = ItemType.QuartzBlock; - mappings[10158081] = ItemType.ChiseledQuartzBlock; - mappings[10158082] = ItemType.QuartzPillar; - mappings[10223616] = ItemType.QuartzStairs; - mappings[10289152] = ItemType.ActivatorRail; - mappings[10354688] = ItemType.Dropper; - mappings[10420224] = ItemType.WhiteTerracotta; - mappings[10420225] = ItemType.OrangeTerracotta; - mappings[10420226] = ItemType.MagentaTerracotta; - mappings[10420227] = ItemType.LightBlueTerracotta; - mappings[10420228] = ItemType.YellowTerracotta; - mappings[10420229] = ItemType.LimeTerracotta; - mappings[10420230] = ItemType.PinkTerracotta; - mappings[10420231] = ItemType.GrayTerracotta; - mappings[10420232] = ItemType.LightGrayTerracotta; - mappings[10420233] = ItemType.CyanTerracotta; - mappings[10420234] = ItemType.PurpleTerracotta; - mappings[10420235] = ItemType.BlueTerracotta; - mappings[10420236] = ItemType.BrownTerracotta; - mappings[10420237] = ItemType.GreenTerracotta; - mappings[10420238] = ItemType.RedTerracotta; - mappings[10420239] = ItemType.BlackTerracotta; - mappings[10485760] = ItemType.WhiteStainedGlassPane; - mappings[10485761] = ItemType.OrangeStainedGlassPane; - mappings[10485762] = ItemType.MagentaStainedGlassPane; - mappings[10485763] = ItemType.LightBlueStainedGlassPane; - mappings[10485764] = ItemType.YellowStainedGlassPane; - mappings[10485765] = ItemType.LimeStainedGlassPane; - mappings[10485766] = ItemType.PinkStainedGlassPane; - mappings[10485767] = ItemType.GrayStainedGlassPane; - mappings[10485768] = ItemType.LightGrayStainedGlassPane; - mappings[10485769] = ItemType.CyanStainedGlassPane; - mappings[10485770] = ItemType.PurpleStainedGlassPane; - mappings[10485771] = ItemType.BlueStainedGlassPane; - mappings[10485772] = ItemType.BrownStainedGlassPane; - mappings[10485773] = ItemType.GreenStainedGlassPane; - mappings[10485774] = ItemType.RedStainedGlassPane; - mappings[10485775] = ItemType.BlackStainedGlassPane; - mappings[10682368] = ItemType.AcaciaStairs; - mappings[10747904] = ItemType.DarkOakStairs; - mappings[10813440] = ItemType.SlimeBlock; - mappings[10878976] = ItemType.Barrier; - mappings[10944512] = ItemType.IronTrapdoor; - mappings[11010048] = ItemType.Prismarine; - mappings[11010049] = ItemType.PrismarineBricks; - mappings[11010050] = ItemType.DarkPrismarine; - mappings[11075584] = ItemType.SeaLantern; - mappings[11141120] = ItemType.HayBlock; - mappings[11206656] = ItemType.WhiteCarpet; - mappings[11206657] = ItemType.OrangeCarpet; - mappings[11206658] = ItemType.MagentaCarpet; - mappings[11206659] = ItemType.LightBlueCarpet; - mappings[11206660] = ItemType.YellowCarpet; - mappings[11206661] = ItemType.LimeCarpet; - mappings[11206662] = ItemType.PinkCarpet; - mappings[11206663] = ItemType.GrayCarpet; - mappings[11206664] = ItemType.LightGrayCarpet; - mappings[11206665] = ItemType.CyanCarpet; - mappings[11206666] = ItemType.PurpleCarpet; - mappings[11206667] = ItemType.BlueCarpet; - mappings[11206668] = ItemType.BrownCarpet; - mappings[11206669] = ItemType.GreenCarpet; - mappings[11206670] = ItemType.RedCarpet; - mappings[11206671] = ItemType.BlackCarpet; - mappings[11272192] = ItemType.Terracotta; - mappings[11337728] = ItemType.CoalBlock; - mappings[11403264] = ItemType.PackedIce; - mappings[11468800] = ItemType.Sunflower; - mappings[11468801] = ItemType.Lilac; - mappings[11468802] = ItemType.TallGrass; - mappings[11468803] = ItemType.LargeFern; - mappings[11468804] = ItemType.RoseBush; - mappings[11468805] = ItemType.Peony; - mappings[11730944] = ItemType.RedSandstone; - mappings[11730945] = ItemType.ChiseledRedSandstone; - mappings[11730946] = ItemType.SmoothRedSandstone; - mappings[11796480] = ItemType.RedSandstoneStairs; - mappings[11927552] = ItemType.RedSandstoneSlab; - mappings[11993088] = ItemType.SpruceFenceGate; - mappings[12058624] = ItemType.BirchFenceGate; - mappings[12124160] = ItemType.JungleFenceGate; - mappings[12189696] = ItemType.DarkOakFenceGate; - mappings[12255232] = ItemType.AcaciaFenceGate; - mappings[12320768] = ItemType.SpruceFence; - mappings[12386304] = ItemType.BirchFence; - mappings[12451840] = ItemType.JungleFence; - mappings[12517376] = ItemType.DarkOakFence; - mappings[12582912] = ItemType.AcaciaFence; - mappings[12976128] = ItemType.EndRod; - mappings[13041664] = ItemType.ChorusPlant; - mappings[13107200] = ItemType.ChorusFlower; - mappings[13172736] = ItemType.PurpurBlock; - mappings[13238272] = ItemType.PurpurPillar; - mappings[13303808] = ItemType.PurpurStairs; - mappings[13434880] = ItemType.PurpurSlab; - mappings[13500416] = ItemType.EndStoneBricks; - mappings[13631488] = ItemType.DirtPath; - mappings[13762560] = ItemType.RepeatingCommandBlock; - mappings[13828096] = ItemType.ChainCommandBlock; - mappings[14024704] = ItemType.NetherWartBlock; - mappings[14090240] = ItemType.RedNetherBricks; - mappings[14155776] = ItemType.BoneBlock; - mappings[14221312] = ItemType.StructureVoid; - mappings[14286848] = ItemType.Observer; - mappings[14417920] = ItemType.OrangeShulkerBox; - mappings[14745600] = ItemType.PinkShulkerBox; - mappings[14811136] = ItemType.GrayShulkerBox; - mappings[14876672] = ItemType.LightGrayShulkerBox; - mappings[14942208] = ItemType.CyanShulkerBox; - mappings[15007744] = ItemType.PurpleShulkerBox; - mappings[15073280] = ItemType.BlueShulkerBox; - mappings[15138816] = ItemType.BrownShulkerBox; - mappings[15204352] = ItemType.GreenShulkerBox; - mappings[15269888] = ItemType.RedShulkerBox; - mappings[15335424] = ItemType.BlackShulkerBox; - mappings[15466496] = ItemType.OrangeGlazedTerracotta; - mappings[15794176] = ItemType.PinkGlazedTerracotta; - mappings[15859712] = ItemType.GrayGlazedTerracotta; - mappings[15925248] = ItemType.LightGrayGlazedTerracotta; - mappings[15990784] = ItemType.CyanGlazedTerracotta; - mappings[16056320] = ItemType.PurpleGlazedTerracotta; - mappings[16121856] = ItemType.BlueGlazedTerracotta; - mappings[16187392] = ItemType.BrownGlazedTerracotta; - mappings[16252928] = ItemType.GreenGlazedTerracotta; - mappings[16318464] = ItemType.RedGlazedTerracotta; - mappings[16384000] = ItemType.BlackGlazedTerracotta; - mappings[16449536] = ItemType.WhiteConcrete; - mappings[16449537] = ItemType.OrangeConcrete; - mappings[16449538] = ItemType.MagentaConcrete; - mappings[16449539] = ItemType.LightBlueConcrete; - mappings[16449540] = ItemType.YellowConcrete; - mappings[16449541] = ItemType.LimeConcrete; - mappings[16449542] = ItemType.PinkConcrete; - mappings[16449543] = ItemType.GrayConcrete; - mappings[16449544] = ItemType.LightGrayConcrete; - mappings[16449545] = ItemType.CyanConcrete; - mappings[16449546] = ItemType.PurpleConcrete; - mappings[16449547] = ItemType.BlueConcrete; - mappings[16449548] = ItemType.BrownConcrete; - mappings[16449549] = ItemType.GreenConcrete; - mappings[16449550] = ItemType.RedConcrete; - mappings[16449551] = ItemType.BlackConcrete; - mappings[16515072] = ItemType.WhiteConcretePowder; - mappings[16515073] = ItemType.OrangeConcretePowder; - mappings[16515074] = ItemType.MagentaConcretePowder; - mappings[16515075] = ItemType.LightBlueConcretePowder; - mappings[16515076] = ItemType.YellowConcretePowder; - mappings[16515077] = ItemType.LimeConcretePowder; - mappings[16515078] = ItemType.PinkConcretePowder; - mappings[16515079] = ItemType.GrayConcretePowder; - mappings[16515080] = ItemType.LightGrayConcretePowder; - mappings[16515081] = ItemType.CyanConcretePowder; - mappings[16515082] = ItemType.PurpleConcretePowder; - mappings[16515083] = ItemType.BlueConcretePowder; - mappings[16515084] = ItemType.BrownConcretePowder; - mappings[16515085] = ItemType.GreenConcretePowder; - mappings[16515086] = ItemType.RedConcretePowder; - mappings[16515087] = ItemType.BlackConcretePowder; - mappings[16711680] = ItemType.StructureBlock; - mappings[16777216] = ItemType.IronShovel; - mappings[16842752] = ItemType.IronPickaxe; - mappings[16908288] = ItemType.IronAxe; - mappings[16973824] = ItemType.FlintAndSteel; - mappings[17039360] = ItemType.Apple; - mappings[17104896] = ItemType.Bow; - mappings[17170432] = ItemType.Arrow; - mappings[17235968] = ItemType.Coal; - mappings[17235969] = ItemType.Charcoal; - mappings[17301504] = ItemType.Diamond; - mappings[17367040] = ItemType.IronIngot; - mappings[17432576] = ItemType.GoldIngot; - mappings[17498112] = ItemType.IronSword; - mappings[17825792] = ItemType.StoneSword; - mappings[17891328] = ItemType.StoneShovel; - mappings[17956864] = ItemType.StonePickaxe; - mappings[18022400] = ItemType.StoneAxe; - mappings[18087936] = ItemType.DiamondSword; - mappings[18153472] = ItemType.DiamondShovel; - mappings[18219008] = ItemType.DiamondPickaxe; - mappings[18284544] = ItemType.DiamondAxe; - mappings[18350080] = ItemType.Stick; - mappings[18415616] = ItemType.Bowl; - mappings[18481152] = ItemType.MushroomStew; - mappings[18546688] = ItemType.GoldenSword; - mappings[18612224] = ItemType.GoldenShovel; - mappings[18677760] = ItemType.GoldenPickaxe; - mappings[18743296] = ItemType.GoldenAxe; - mappings[18808832] = ItemType.String; - mappings[18874368] = ItemType.Feather; - mappings[18939904] = ItemType.Gunpowder; - mappings[19070976] = ItemType.StoneHoe; - mappings[19136512] = ItemType.IronHoe; - mappings[19202048] = ItemType.DiamondHoe; - mappings[19267584] = ItemType.GoldenHoe; - mappings[19464192] = ItemType.Bread; - mappings[19791872] = ItemType.ChainmailHelmet; - mappings[19857408] = ItemType.ChainmailChestplate; - mappings[19922944] = ItemType.ChainmailLeggings; - mappings[19988480] = ItemType.ChainmailBoots; - mappings[20054016] = ItemType.IronHelmet; - mappings[20119552] = ItemType.IronChestplate; - mappings[20185088] = ItemType.IronLeggings; - mappings[20250624] = ItemType.IronBoots; - mappings[20316160] = ItemType.DiamondHelmet; - mappings[20381696] = ItemType.DiamondChestplate; - mappings[20447232] = ItemType.DiamondLeggings; - mappings[20512768] = ItemType.DiamondBoots; - mappings[20578304] = ItemType.GoldenHelmet; - mappings[20643840] = ItemType.GoldenChestplate; - mappings[20709376] = ItemType.GoldenLeggings; - mappings[20774912] = ItemType.GoldenBoots; - mappings[20840448] = ItemType.Flint; - mappings[20905984] = ItemType.Porkchop; - mappings[20971520] = ItemType.CookedPorkchop; - mappings[21037056] = ItemType.Painting; - mappings[21102592] = ItemType.GoldenApple; - mappings[21102593] = ItemType.EnchantedGoldenApple; - mappings[21168128] = ItemType.OakSign; - mappings[21299200] = ItemType.Bucket; - mappings[21495808] = ItemType.Minecart; - mappings[21561344] = ItemType.Saddle; - mappings[21626880] = ItemType.IronDoor; - mappings[21692416] = ItemType.Redstone; - mappings[21757952] = ItemType.Snowball; - mappings[21823488] = ItemType.OakBoat; - mappings[21954560] = ItemType.MilkBucket; - mappings[22020096] = ItemType.Brick; - mappings[22085632] = ItemType.ClayBall; - mappings[22151168] = ItemType.SugarCane; - mappings[22216704] = ItemType.Paper; - mappings[22282240] = ItemType.Book; - mappings[22347776] = ItemType.SlimeBall; - mappings[22413312] = ItemType.ChestMinecart; - mappings[22478848] = ItemType.FurnaceMinecart; - mappings[22544384] = ItemType.Egg; - mappings[22609920] = ItemType.Compass; - mappings[22675456] = ItemType.FishingRod; - mappings[22740992] = ItemType.Clock; - mappings[22806528] = ItemType.GlowstoneDust; - mappings[22872064] = ItemType.Salmon; - mappings[22872065] = ItemType.Salmon; - mappings[22872066] = ItemType.TropicalFish; - mappings[22872067] = ItemType.Pufferfish; - mappings[22937600] = ItemType.CookedSalmon; - mappings[22937601] = ItemType.CookedSalmon; - mappings[23003136] = ItemType.InkSac; - mappings[23003137] = ItemType.RedDye; - mappings[23003138] = ItemType.GreenDye; - mappings[23003139] = ItemType.CocoaBeans; - mappings[23003140] = ItemType.LapisLazuli; - mappings[23003141] = ItemType.PurpleDye; - mappings[23003142] = ItemType.CyanDye; - mappings[23003143] = ItemType.LightGrayDye; - mappings[23003144] = ItemType.GrayDye; - mappings[23003145] = ItemType.PinkDye; - mappings[23003146] = ItemType.LimeDye; - mappings[23003147] = ItemType.YellowDye; - mappings[23003148] = ItemType.LightBlueDye; - mappings[23003149] = ItemType.MagentaDye; - mappings[23003150] = ItemType.OrangeDye; - mappings[23003151] = ItemType.BoneMeal; - mappings[23068672] = ItemType.Bone; - mappings[23134208] = ItemType.Sugar; - mappings[23199744] = ItemType.Cake; - mappings[23265280] = ItemType.WhiteBed; - mappings[23265281] = ItemType.OrangeBed; - mappings[23265282] = ItemType.MagentaBed; - mappings[23265283] = ItemType.LightBlueBed; - mappings[23265284] = ItemType.YellowBed; - mappings[23265285] = ItemType.LimeBed; - mappings[23265286] = ItemType.PinkBed; - mappings[23265287] = ItemType.GrayBed; - mappings[23265288] = ItemType.LightGrayBed; - mappings[23265289] = ItemType.CyanBed; - mappings[23265290] = ItemType.PurpleBed; - mappings[23265291] = ItemType.BlueBed; - mappings[23265292] = ItemType.BrownBed; - mappings[23265293] = ItemType.GreenBed; - mappings[23265294] = ItemType.RedBed; - mappings[23265295] = ItemType.BlackBed; - mappings[23330816] = ItemType.Repeater; - mappings[23396352] = ItemType.Cookie; - mappings[23527424] = ItemType.Shears; - mappings[23592960] = ItemType.MelonSlice; - mappings[23658496] = ItemType.PumpkinSeeds; - mappings[23724032] = ItemType.MelonSeeds; - mappings[23789568] = ItemType.Beef; - mappings[23855104] = ItemType.CookedBeef; - mappings[23920640] = ItemType.Chicken; - mappings[23986176] = ItemType.CookedChicken; - mappings[24051712] = ItemType.RottenFlesh; - mappings[24117248] = ItemType.EnderPearl; - mappings[24182784] = ItemType.BlazeRod; - mappings[24248320] = ItemType.GhastTear; - mappings[24313856] = ItemType.GoldNugget; - mappings[24379392] = ItemType.NetherWart; - mappings[24444928] = ItemType.Potion; - mappings[24510464] = ItemType.GlassBottle; - mappings[24576000] = ItemType.SpiderEye; - mappings[24641536] = ItemType.FermentedSpiderEye; - mappings[24707072] = ItemType.BlazePowder; - mappings[24838144] = ItemType.BrewingStand; - mappings[24903680] = ItemType.Cauldron; - mappings[24969216] = ItemType.EnderEye; - mappings[25034752] = ItemType.GlisteringMelonSlice; - mappings[25100288] = ItemType.BatSpawnEgg; - mappings[25165824] = ItemType.ExperienceBottle; - mappings[25231360] = ItemType.FireCharge; - mappings[25427968] = ItemType.Emerald; - mappings[25493504] = ItemType.ItemFrame; - mappings[25559040] = ItemType.FlowerPot; - mappings[25624576] = ItemType.Carrot; - mappings[25690112] = ItemType.Potato; - mappings[25755648] = ItemType.BakedPotato; - mappings[25821184] = ItemType.PoisonousPotato; - mappings[25952256] = ItemType.GoldenCarrot; - mappings[26017792] = ItemType.SkeletonSkull; - mappings[26017793] = ItemType.WitherSkeletonSkull; - mappings[26017794] = ItemType.ZombieHead; - mappings[26017795] = ItemType.PlayerHead; - mappings[26017796] = ItemType.CreeperHead; - mappings[26017797] = ItemType.DragonHead; - mappings[26083328] = ItemType.CarrotOnAStick; - mappings[26148864] = ItemType.NetherStar; - mappings[26214400] = ItemType.PumpkinPie; - mappings[26279936] = ItemType.FireworkRocket; - mappings[26411008] = ItemType.EnchantedBook; - mappings[26476544] = ItemType.Comparator; - mappings[26542080] = ItemType.NetherBrick; - mappings[26607616] = ItemType.Quartz; - mappings[26673152] = ItemType.TntMinecart; - mappings[26738688] = ItemType.HopperMinecart; - mappings[26804224] = ItemType.PrismarineShard; - mappings[26869760] = ItemType.PrismarineCrystals; - mappings[26935296] = ItemType.Rabbit; - mappings[27000832] = ItemType.CookedRabbit; - mappings[27066368] = ItemType.RabbitStew; - mappings[27131904] = ItemType.RabbitFoot; - mappings[27197440] = ItemType.RabbitHide; - mappings[27262976] = ItemType.ArmorStand; - mappings[27328512] = ItemType.IronHorseArmor; - mappings[27394048] = ItemType.GoldenHorseArmor; - mappings[27459584] = ItemType.DiamondHorseArmor; - mappings[27590656] = ItemType.NameTag; - mappings[27656192] = ItemType.CommandBlockMinecart; - mappings[27721728] = ItemType.Mutton; - mappings[27787264] = ItemType.CookedMutton; - mappings[27852800] = ItemType.BlackBanner; - mappings[27852801] = ItemType.RedBanner; - mappings[27852802] = ItemType.GreenBanner; - mappings[27852803] = ItemType.BrownBanner; - mappings[27852804] = ItemType.BlueBanner; - mappings[27852805] = ItemType.PurpleBanner; - mappings[27852806] = ItemType.CyanBanner; - mappings[27852807] = ItemType.LightGrayBanner; - mappings[27852808] = ItemType.GrayBanner; - mappings[27852809] = ItemType.PinkBanner; - mappings[27852810] = ItemType.LimeBanner; - mappings[27852811] = ItemType.YellowBanner; - mappings[27852812] = ItemType.LightBlueBanner; - mappings[27852813] = ItemType.MagentaBanner; - mappings[27852814] = ItemType.OrangeBanner; - mappings[27852815] = ItemType.WhiteBanner; - mappings[27918336] = ItemType.EndCrystal; - mappings[27983872] = ItemType.SpruceDoor; - mappings[28049408] = ItemType.BirchDoor; - mappings[28114944] = ItemType.JungleDoor; - mappings[28180480] = ItemType.AcaciaDoor; - mappings[28246016] = ItemType.DarkOakDoor; - mappings[28311552] = ItemType.ChorusFruit; - mappings[28377088] = ItemType.PoppedChorusFruit; - mappings[28442624] = ItemType.Beetroot; - mappings[28508160] = ItemType.BeetrootSeeds; - mappings[28573696] = ItemType.BeetrootSoup; - mappings[28639232] = ItemType.DragonBreath; - mappings[28704768] = ItemType.Potion; - mappings[28770304] = ItemType.SpectralArrow; - mappings[28835840] = ItemType.Arrow; - mappings[28966912] = ItemType.Shield; - mappings[29032448] = ItemType.Elytra; - mappings[29097984] = ItemType.SpruceBoat; - mappings[29163520] = ItemType.BirchBoat; - mappings[29229056] = ItemType.JungleBoat; - mappings[29294592] = ItemType.AcaciaBoat; - mappings[29360128] = ItemType.DarkOakBoat; - mappings[29425664] = ItemType.TotemOfUndying; - mappings[29491200] = ItemType.ShulkerShell; - mappings[29622272] = ItemType.IronNugget; - mappings[29687808] = ItemType.KnowledgeBook; - mappings[1114112] = ItemType.OakLog; - mappings[1114113] = ItemType.SpruceLog; - mappings[1114114] = ItemType.BirchLog; - mappings[1114115] = ItemType.JungleLog; - mappings[1179648] = ItemType.OakLeaves; - mappings[1179649] = ItemType.SpruceLeaves; - mappings[1179650] = ItemType.BirchLeaves; - mappings[1179651] = ItemType.JungleLeaves; - mappings[1966080] = ItemType.Cobweb; - mappings[2293760] = ItemType.WhiteWool; - mappings[2293761] = ItemType.OrangeWool; - mappings[2293762] = ItemType.MagentaWool; - mappings[2293763] = ItemType.LightBlueWool; - mappings[2293764] = ItemType.YellowWool; - mappings[2293765] = ItemType.LimeWool; - mappings[2293766] = ItemType.PinkWool; - mappings[2293767] = ItemType.GrayWool; - mappings[2293768] = ItemType.LightGrayWool; - mappings[2293769] = ItemType.CyanWool; - mappings[2293770] = ItemType.PurpleWool; - mappings[2293771] = ItemType.BlueWool; - mappings[2293772] = ItemType.BrownWool; - mappings[2293773] = ItemType.GreenWool; - mappings[2293774] = ItemType.RedWool; - mappings[2293775] = ItemType.BlackWool; - mappings[2424832] = ItemType.Dandelion; - mappings[4521984] = ItemType.Lever; - mappings[4718592] = ItemType.OakPressurePlate; - mappings[5963776] = ItemType.JackOLantern; - mappings[7274496] = ItemType.LilyPad; - mappings[8257536] = ItemType.OakSlab; - mappings[8257537] = ItemType.SpruceSlab; - mappings[8257538] = ItemType.BirchSlab; - mappings[8257539] = ItemType.JungleSlab; - mappings[8257540] = ItemType.AcaciaSlab; - mappings[8257541] = ItemType.DarkOakSlab; - mappings[9371648] = ItemType.OakButton; - mappings[9633792] = ItemType.LightWeightedPressurePlate; - mappings[10551296] = ItemType.AcaciaLeaves; - mappings[10551297] = ItemType.DarkOakLeaves; - mappings[10616832] = ItemType.AcaciaLog; - mappings[10616833] = ItemType.DarkOakLog; - mappings[13959168] = ItemType.MagmaBlock; - mappings[14352384] = ItemType.WhiteShulkerBox; - mappings[14483456] = ItemType.MagentaShulkerBox; - mappings[14548992] = ItemType.LightBlueShulkerBox; - mappings[14614528] = ItemType.YellowShulkerBox; - mappings[14680064] = ItemType.LimeShulkerBox; - mappings[15400960] = ItemType.WhiteGlazedTerracotta; - mappings[15532032] = ItemType.MagentaGlazedTerracotta; - mappings[15597568] = ItemType.LightBlueGlazedTerracotta; - mappings[15663104] = ItemType.YellowGlazedTerracotta; - mappings[15728640] = ItemType.LimeGlazedTerracotta; - mappings[17563648] = ItemType.WoodenSword; - mappings[17629184] = ItemType.WoodenShovel; - mappings[17694720] = ItemType.WoodenPickaxe; - mappings[17760256] = ItemType.WoodenAxe; - mappings[19005440] = ItemType.WoodenHoe; - mappings[19333120] = ItemType.WheatSeeds; - mappings[19398656] = ItemType.Wheat; - mappings[19529728] = ItemType.LeatherHelmet; - mappings[19595264] = ItemType.LeatherChestplate; - mappings[19660800] = ItemType.LeatherLeggings; - mappings[19726336] = ItemType.LeatherBoots; - mappings[21233664] = ItemType.OakDoor; - mappings[21364736] = ItemType.WaterBucket; - mappings[21430272] = ItemType.LavaBucket; - mappings[21889024] = ItemType.Leather; - mappings[24772608] = ItemType.MagmaCream; - mappings[25296896] = ItemType.WritableBook; - mappings[25362432] = ItemType.WrittenBook; - mappings[25886720] = ItemType.Map; - mappings[27525120] = ItemType.Lead; - mappings[28901376] = ItemType.LingeringPotion; - mappings[147849216] = ItemType.MusicDisc13; - mappings[147914752] = ItemType.MusicDiscCat; - mappings[147980288] = ItemType.MusicDiscBlocks; - mappings[148045824] = ItemType.MusicDiscChirp; - mappings[148111360] = ItemType.MusicDiscFar; - mappings[148176896] = ItemType.MusicDiscMall; - mappings[148242432] = ItemType.MusicDiscMellohi; - mappings[148307968] = ItemType.MusicDiscStal; - mappings[148373504] = ItemType.MusicDiscStrad; - mappings[148439040] = ItemType.MusicDiscWard; - mappings[148504576] = ItemType.MusicDisc11; - mappings[148570112] = ItemType.MusicDiscWait; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} \ No newline at end of file diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette113.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette113.cs deleted file mode 100644 index af292fa1a2..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette113.cs +++ /dev/null @@ -1,803 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette113 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette113() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.GrassBlock; - mappings[9] = ItemType.Dirt; - mappings[10] = ItemType.CoarseDirt; - mappings[11] = ItemType.Podzol; - mappings[12] = ItemType.Cobblestone; - mappings[13] = ItemType.OakPlanks; - mappings[14] = ItemType.SprucePlanks; - mappings[15] = ItemType.BirchPlanks; - mappings[16] = ItemType.JunglePlanks; - mappings[17] = ItemType.AcaciaPlanks; - mappings[18] = ItemType.DarkOakPlanks; - mappings[19] = ItemType.OakSapling; - mappings[20] = ItemType.SpruceSapling; - mappings[21] = ItemType.BirchSapling; - mappings[22] = ItemType.JungleSapling; - mappings[23] = ItemType.AcaciaSapling; - mappings[24] = ItemType.DarkOakSapling; - mappings[25] = ItemType.Bedrock; - mappings[26] = ItemType.Sand; - mappings[27] = ItemType.RedSand; - mappings[28] = ItemType.Gravel; - mappings[29] = ItemType.GoldOre; - mappings[30] = ItemType.IronOre; - mappings[31] = ItemType.CoalOre; - mappings[32] = ItemType.OakLog; - mappings[33] = ItemType.SpruceLog; - mappings[34] = ItemType.BirchLog; - mappings[35] = ItemType.JungleLog; - mappings[36] = ItemType.AcaciaLog; - mappings[37] = ItemType.DarkOakLog; - mappings[38] = ItemType.StrippedOakLog; - mappings[39] = ItemType.StrippedSpruceLog; - mappings[40] = ItemType.StrippedBirchLog; - mappings[41] = ItemType.StrippedJungleLog; - mappings[42] = ItemType.StrippedAcaciaLog; - mappings[43] = ItemType.StrippedDarkOakLog; - mappings[44] = ItemType.StrippedOakWood; - mappings[45] = ItemType.StrippedSpruceWood; - mappings[46] = ItemType.StrippedBirchWood; - mappings[47] = ItemType.StrippedJungleWood; - mappings[48] = ItemType.StrippedAcaciaWood; - mappings[49] = ItemType.StrippedDarkOakWood; - mappings[50] = ItemType.OakWood; - mappings[51] = ItemType.SpruceWood; - mappings[52] = ItemType.BirchWood; - mappings[53] = ItemType.JungleWood; - mappings[54] = ItemType.AcaciaWood; - mappings[55] = ItemType.DarkOakWood; - mappings[56] = ItemType.OakLeaves; - mappings[57] = ItemType.SpruceLeaves; - mappings[58] = ItemType.BirchLeaves; - mappings[59] = ItemType.JungleLeaves; - mappings[60] = ItemType.AcaciaLeaves; - mappings[61] = ItemType.DarkOakLeaves; - mappings[62] = ItemType.Sponge; - mappings[63] = ItemType.WetSponge; - mappings[64] = ItemType.Glass; - mappings[65] = ItemType.LapisOre; - mappings[66] = ItemType.LapisBlock; - mappings[67] = ItemType.Dispenser; - mappings[68] = ItemType.Sandstone; - mappings[69] = ItemType.ChiseledSandstone; - mappings[70] = ItemType.CutSandstone; - mappings[71] = ItemType.NoteBlock; - mappings[72] = ItemType.PoweredRail; - mappings[73] = ItemType.DetectorRail; - mappings[74] = ItemType.StickyPiston; - mappings[75] = ItemType.Cobweb; - mappings[76] = ItemType.ShortGrass; - mappings[77] = ItemType.Fern; - mappings[78] = ItemType.DeadBush; - mappings[79] = ItemType.Seagrass; - mappings[80] = ItemType.SeaPickle; - mappings[81] = ItemType.Piston; - mappings[82] = ItemType.WhiteWool; - mappings[83] = ItemType.OrangeWool; - mappings[84] = ItemType.MagentaWool; - mappings[85] = ItemType.LightBlueWool; - mappings[86] = ItemType.YellowWool; - mappings[87] = ItemType.LimeWool; - mappings[88] = ItemType.PinkWool; - mappings[89] = ItemType.GrayWool; - mappings[90] = ItemType.LightGrayWool; - mappings[91] = ItemType.CyanWool; - mappings[92] = ItemType.PurpleWool; - mappings[93] = ItemType.BlueWool; - mappings[94] = ItemType.BrownWool; - mappings[95] = ItemType.GreenWool; - mappings[96] = ItemType.RedWool; - mappings[97] = ItemType.BlackWool; - mappings[98] = ItemType.Dandelion; - mappings[99] = ItemType.Poppy; - mappings[100] = ItemType.BlueOrchid; - mappings[101] = ItemType.Allium; - mappings[102] = ItemType.AzureBluet; - mappings[103] = ItemType.RedTulip; - mappings[104] = ItemType.OrangeTulip; - mappings[105] = ItemType.WhiteTulip; - mappings[106] = ItemType.PinkTulip; - mappings[107] = ItemType.OxeyeDaisy; - mappings[108] = ItemType.BrownMushroom; - mappings[109] = ItemType.RedMushroom; - mappings[110] = ItemType.GoldBlock; - mappings[111] = ItemType.IronBlock; - mappings[112] = ItemType.OakSlab; - mappings[113] = ItemType.SpruceSlab; - mappings[114] = ItemType.BirchSlab; - mappings[115] = ItemType.JungleSlab; - mappings[116] = ItemType.AcaciaSlab; - mappings[117] = ItemType.DarkOakSlab; - mappings[118] = ItemType.StoneSlab; - mappings[119] = ItemType.SandstoneSlab; - mappings[120] = ItemType.PetrifiedOakSlab; - mappings[121] = ItemType.CobblestoneSlab; - mappings[122] = ItemType.BrickSlab; - mappings[123] = ItemType.StoneBrickSlab; - mappings[124] = ItemType.NetherBrickSlab; - mappings[125] = ItemType.QuartzSlab; - mappings[126] = ItemType.RedSandstoneSlab; - mappings[127] = ItemType.PurpurSlab; - mappings[128] = ItemType.PrismarineSlab; - mappings[129] = ItemType.PrismarineBrickSlab; - mappings[130] = ItemType.DarkPrismarineSlab; - mappings[131] = ItemType.SmoothQuartz; - mappings[132] = ItemType.SmoothRedSandstone; - mappings[133] = ItemType.SmoothSandstone; - mappings[134] = ItemType.SmoothStone; - mappings[135] = ItemType.Bricks; - mappings[136] = ItemType.Tnt; - mappings[137] = ItemType.Bookshelf; - mappings[138] = ItemType.MossyCobblestone; - mappings[139] = ItemType.Obsidian; - mappings[140] = ItemType.Torch; - mappings[141] = ItemType.EndRod; - mappings[142] = ItemType.ChorusPlant; - mappings[143] = ItemType.ChorusFlower; - mappings[144] = ItemType.PurpurBlock; - mappings[145] = ItemType.PurpurPillar; - mappings[146] = ItemType.PurpurStairs; - mappings[147] = ItemType.Spawner; - mappings[148] = ItemType.OakStairs; - mappings[149] = ItemType.Chest; - mappings[150] = ItemType.DiamondOre; - mappings[151] = ItemType.DiamondBlock; - mappings[152] = ItemType.CraftingTable; - mappings[153] = ItemType.Farmland; - mappings[154] = ItemType.Furnace; - mappings[155] = ItemType.Ladder; - mappings[156] = ItemType.Rail; - mappings[157] = ItemType.CobblestoneStairs; - mappings[158] = ItemType.Lever; - mappings[159] = ItemType.StonePressurePlate; - mappings[160] = ItemType.OakPressurePlate; - mappings[161] = ItemType.SprucePressurePlate; - mappings[162] = ItemType.BirchPressurePlate; - mappings[163] = ItemType.JunglePressurePlate; - mappings[164] = ItemType.AcaciaPressurePlate; - mappings[165] = ItemType.DarkOakPressurePlate; - mappings[166] = ItemType.RedstoneOre; - mappings[167] = ItemType.RedstoneTorch; - mappings[168] = ItemType.StoneButton; - mappings[169] = ItemType.Snow; - mappings[170] = ItemType.Ice; - mappings[171] = ItemType.SnowBlock; - mappings[172] = ItemType.Cactus; - mappings[173] = ItemType.Clay; - mappings[174] = ItemType.Jukebox; - mappings[175] = ItemType.OakFence; - mappings[176] = ItemType.SpruceFence; - mappings[177] = ItemType.BirchFence; - mappings[178] = ItemType.JungleFence; - mappings[179] = ItemType.AcaciaFence; - mappings[180] = ItemType.DarkOakFence; - mappings[181] = ItemType.Pumpkin; - mappings[182] = ItemType.CarvedPumpkin; - mappings[183] = ItemType.Netherrack; - mappings[184] = ItemType.SoulSand; - mappings[185] = ItemType.Glowstone; - mappings[186] = ItemType.JackOLantern; - mappings[187] = ItemType.OakTrapdoor; - mappings[188] = ItemType.SpruceTrapdoor; - mappings[189] = ItemType.BirchTrapdoor; - mappings[190] = ItemType.JungleTrapdoor; - mappings[191] = ItemType.AcaciaTrapdoor; - mappings[192] = ItemType.DarkOakTrapdoor; - mappings[193] = ItemType.InfestedStone; - mappings[194] = ItemType.InfestedCobblestone; - mappings[195] = ItemType.InfestedStoneBricks; - mappings[196] = ItemType.InfestedMossyStoneBricks; - mappings[197] = ItemType.InfestedCrackedStoneBricks; - mappings[198] = ItemType.InfestedChiseledStoneBricks; - mappings[199] = ItemType.StoneBricks; - mappings[200] = ItemType.MossyStoneBricks; - mappings[201] = ItemType.CrackedStoneBricks; - mappings[202] = ItemType.ChiseledStoneBricks; - mappings[203] = ItemType.BrownMushroomBlock; - mappings[204] = ItemType.RedMushroomBlock; - mappings[205] = ItemType.MushroomStem; - mappings[206] = ItemType.IronBars; - mappings[207] = ItemType.GlassPane; - mappings[208] = ItemType.Melon; - mappings[209] = ItemType.Vine; - mappings[210] = ItemType.OakFenceGate; - mappings[211] = ItemType.SpruceFenceGate; - mappings[212] = ItemType.BirchFenceGate; - mappings[213] = ItemType.JungleFenceGate; - mappings[214] = ItemType.AcaciaFenceGate; - mappings[215] = ItemType.DarkOakFenceGate; - mappings[216] = ItemType.BrickStairs; - mappings[217] = ItemType.StoneBrickStairs; - mappings[218] = ItemType.Mycelium; - mappings[219] = ItemType.LilyPad; - mappings[220] = ItemType.NetherBricks; - mappings[221] = ItemType.NetherBrickFence; - mappings[222] = ItemType.NetherBrickStairs; - mappings[223] = ItemType.EnchantingTable; - mappings[224] = ItemType.EndPortalFrame; - mappings[225] = ItemType.EndStone; - mappings[226] = ItemType.EndStoneBricks; - mappings[227] = ItemType.DragonEgg; - mappings[228] = ItemType.RedstoneLamp; - mappings[229] = ItemType.SandstoneStairs; - mappings[230] = ItemType.EmeraldOre; - mappings[231] = ItemType.EnderChest; - mappings[232] = ItemType.TripwireHook; - mappings[233] = ItemType.EmeraldBlock; - mappings[234] = ItemType.SpruceStairs; - mappings[235] = ItemType.BirchStairs; - mappings[236] = ItemType.JungleStairs; - mappings[237] = ItemType.CommandBlock; - mappings[238] = ItemType.Beacon; - mappings[239] = ItemType.CobblestoneWall; - mappings[240] = ItemType.MossyCobblestoneWall; - mappings[241] = ItemType.OakButton; - mappings[242] = ItemType.SpruceButton; - mappings[243] = ItemType.BirchButton; - mappings[244] = ItemType.JungleButton; - mappings[245] = ItemType.AcaciaButton; - mappings[246] = ItemType.DarkOakButton; - mappings[247] = ItemType.Anvil; - mappings[248] = ItemType.ChippedAnvil; - mappings[249] = ItemType.DamagedAnvil; - mappings[250] = ItemType.TrappedChest; - mappings[251] = ItemType.LightWeightedPressurePlate; - mappings[252] = ItemType.HeavyWeightedPressurePlate; - mappings[253] = ItemType.DaylightDetector; - mappings[254] = ItemType.RedstoneBlock; - mappings[255] = ItemType.NetherQuartzOre; - mappings[256] = ItemType.Hopper; - mappings[257] = ItemType.ChiseledQuartzBlock; - mappings[258] = ItemType.QuartzBlock; - mappings[259] = ItemType.QuartzPillar; - mappings[260] = ItemType.QuartzStairs; - mappings[261] = ItemType.ActivatorRail; - mappings[262] = ItemType.Dropper; - mappings[263] = ItemType.WhiteTerracotta; - mappings[264] = ItemType.OrangeTerracotta; - mappings[265] = ItemType.MagentaTerracotta; - mappings[266] = ItemType.LightBlueTerracotta; - mappings[267] = ItemType.YellowTerracotta; - mappings[268] = ItemType.LimeTerracotta; - mappings[269] = ItemType.PinkTerracotta; - mappings[270] = ItemType.GrayTerracotta; - mappings[271] = ItemType.LightGrayTerracotta; - mappings[272] = ItemType.CyanTerracotta; - mappings[273] = ItemType.PurpleTerracotta; - mappings[274] = ItemType.BlueTerracotta; - mappings[275] = ItemType.BrownTerracotta; - mappings[276] = ItemType.GreenTerracotta; - mappings[277] = ItemType.RedTerracotta; - mappings[278] = ItemType.BlackTerracotta; - mappings[279] = ItemType.Barrier; - mappings[280] = ItemType.IronTrapdoor; - mappings[281] = ItemType.HayBlock; - mappings[282] = ItemType.WhiteCarpet; - mappings[283] = ItemType.OrangeCarpet; - mappings[284] = ItemType.MagentaCarpet; - mappings[285] = ItemType.LightBlueCarpet; - mappings[286] = ItemType.YellowCarpet; - mappings[287] = ItemType.LimeCarpet; - mappings[288] = ItemType.PinkCarpet; - mappings[289] = ItemType.GrayCarpet; - mappings[290] = ItemType.LightGrayCarpet; - mappings[291] = ItemType.CyanCarpet; - mappings[292] = ItemType.PurpleCarpet; - mappings[293] = ItemType.BlueCarpet; - mappings[294] = ItemType.BrownCarpet; - mappings[295] = ItemType.GreenCarpet; - mappings[296] = ItemType.RedCarpet; - mappings[297] = ItemType.BlackCarpet; - mappings[298] = ItemType.Terracotta; - mappings[299] = ItemType.CoalBlock; - mappings[300] = ItemType.PackedIce; - mappings[301] = ItemType.AcaciaStairs; - mappings[302] = ItemType.DarkOakStairs; - mappings[303] = ItemType.SlimeBlock; - mappings[304] = ItemType.DirtPath; - mappings[305] = ItemType.Sunflower; - mappings[306] = ItemType.Lilac; - mappings[307] = ItemType.RoseBush; - mappings[308] = ItemType.Peony; - mappings[309] = ItemType.TallGrass; - mappings[310] = ItemType.LargeFern; - mappings[311] = ItemType.WhiteStainedGlass; - mappings[312] = ItemType.OrangeStainedGlass; - mappings[313] = ItemType.MagentaStainedGlass; - mappings[314] = ItemType.LightBlueStainedGlass; - mappings[315] = ItemType.YellowStainedGlass; - mappings[316] = ItemType.LimeStainedGlass; - mappings[317] = ItemType.PinkStainedGlass; - mappings[318] = ItemType.GrayStainedGlass; - mappings[319] = ItemType.LightGrayStainedGlass; - mappings[320] = ItemType.CyanStainedGlass; - mappings[321] = ItemType.PurpleStainedGlass; - mappings[322] = ItemType.BlueStainedGlass; - mappings[323] = ItemType.BrownStainedGlass; - mappings[324] = ItemType.GreenStainedGlass; - mappings[325] = ItemType.RedStainedGlass; - mappings[326] = ItemType.BlackStainedGlass; - mappings[327] = ItemType.WhiteStainedGlassPane; - mappings[328] = ItemType.OrangeStainedGlassPane; - mappings[329] = ItemType.MagentaStainedGlassPane; - mappings[330] = ItemType.LightBlueStainedGlassPane; - mappings[331] = ItemType.YellowStainedGlassPane; - mappings[332] = ItemType.LimeStainedGlassPane; - mappings[333] = ItemType.PinkStainedGlassPane; - mappings[334] = ItemType.GrayStainedGlassPane; - mappings[335] = ItemType.LightGrayStainedGlassPane; - mappings[336] = ItemType.CyanStainedGlassPane; - mappings[337] = ItemType.PurpleStainedGlassPane; - mappings[338] = ItemType.BlueStainedGlassPane; - mappings[339] = ItemType.BrownStainedGlassPane; - mappings[340] = ItemType.GreenStainedGlassPane; - mappings[341] = ItemType.RedStainedGlassPane; - mappings[342] = ItemType.BlackStainedGlassPane; - mappings[343] = ItemType.Prismarine; - mappings[344] = ItemType.PrismarineBricks; - mappings[345] = ItemType.DarkPrismarine; - mappings[346] = ItemType.PrismarineStairs; - mappings[347] = ItemType.PrismarineBrickStairs; - mappings[348] = ItemType.DarkPrismarineStairs; - mappings[349] = ItemType.SeaLantern; - mappings[350] = ItemType.RedSandstone; - mappings[351] = ItemType.ChiseledRedSandstone; - mappings[352] = ItemType.CutRedSandstone; - mappings[353] = ItemType.RedSandstoneStairs; - mappings[354] = ItemType.RepeatingCommandBlock; - mappings[355] = ItemType.ChainCommandBlock; - mappings[356] = ItemType.MagmaBlock; - mappings[357] = ItemType.NetherWartBlock; - mappings[358] = ItemType.RedNetherBricks; - mappings[359] = ItemType.BoneBlock; - mappings[360] = ItemType.StructureVoid; - mappings[361] = ItemType.Observer; - mappings[362] = ItemType.ShulkerBox; - mappings[363] = ItemType.WhiteShulkerBox; - mappings[364] = ItemType.OrangeShulkerBox; - mappings[365] = ItemType.MagentaShulkerBox; - mappings[366] = ItemType.LightBlueShulkerBox; - mappings[367] = ItemType.YellowShulkerBox; - mappings[368] = ItemType.LimeShulkerBox; - mappings[369] = ItemType.PinkShulkerBox; - mappings[370] = ItemType.GrayShulkerBox; - mappings[371] = ItemType.LightGrayShulkerBox; - mappings[372] = ItemType.CyanShulkerBox; - mappings[373] = ItemType.PurpleShulkerBox; - mappings[374] = ItemType.BlueShulkerBox; - mappings[375] = ItemType.BrownShulkerBox; - mappings[376] = ItemType.GreenShulkerBox; - mappings[377] = ItemType.RedShulkerBox; - mappings[378] = ItemType.BlackShulkerBox; - mappings[379] = ItemType.WhiteGlazedTerracotta; - mappings[380] = ItemType.OrangeGlazedTerracotta; - mappings[381] = ItemType.MagentaGlazedTerracotta; - mappings[382] = ItemType.LightBlueGlazedTerracotta; - mappings[383] = ItemType.YellowGlazedTerracotta; - mappings[384] = ItemType.LimeGlazedTerracotta; - mappings[385] = ItemType.PinkGlazedTerracotta; - mappings[386] = ItemType.GrayGlazedTerracotta; - mappings[387] = ItemType.LightGrayGlazedTerracotta; - mappings[388] = ItemType.CyanGlazedTerracotta; - mappings[389] = ItemType.PurpleGlazedTerracotta; - mappings[390] = ItemType.BlueGlazedTerracotta; - mappings[391] = ItemType.BrownGlazedTerracotta; - mappings[392] = ItemType.GreenGlazedTerracotta; - mappings[393] = ItemType.RedGlazedTerracotta; - mappings[394] = ItemType.BlackGlazedTerracotta; - mappings[395] = ItemType.WhiteConcrete; - mappings[396] = ItemType.OrangeConcrete; - mappings[397] = ItemType.MagentaConcrete; - mappings[398] = ItemType.LightBlueConcrete; - mappings[399] = ItemType.YellowConcrete; - mappings[400] = ItemType.LimeConcrete; - mappings[401] = ItemType.PinkConcrete; - mappings[402] = ItemType.GrayConcrete; - mappings[403] = ItemType.LightGrayConcrete; - mappings[404] = ItemType.CyanConcrete; - mappings[405] = ItemType.PurpleConcrete; - mappings[406] = ItemType.BlueConcrete; - mappings[407] = ItemType.BrownConcrete; - mappings[408] = ItemType.GreenConcrete; - mappings[409] = ItemType.RedConcrete; - mappings[410] = ItemType.BlackConcrete; - mappings[411] = ItemType.WhiteConcretePowder; - mappings[412] = ItemType.OrangeConcretePowder; - mappings[413] = ItemType.MagentaConcretePowder; - mappings[414] = ItemType.LightBlueConcretePowder; - mappings[415] = ItemType.YellowConcretePowder; - mappings[416] = ItemType.LimeConcretePowder; - mappings[417] = ItemType.PinkConcretePowder; - mappings[418] = ItemType.GrayConcretePowder; - mappings[419] = ItemType.LightGrayConcretePowder; - mappings[420] = ItemType.CyanConcretePowder; - mappings[421] = ItemType.PurpleConcretePowder; - mappings[422] = ItemType.BlueConcretePowder; - mappings[423] = ItemType.BrownConcretePowder; - mappings[424] = ItemType.GreenConcretePowder; - mappings[425] = ItemType.RedConcretePowder; - mappings[426] = ItemType.BlackConcretePowder; - mappings[427] = ItemType.TurtleEgg; - mappings[428] = ItemType.DeadTubeCoralBlock; - mappings[429] = ItemType.DeadBrainCoralBlock; - mappings[430] = ItemType.DeadBubbleCoralBlock; - mappings[431] = ItemType.DeadFireCoralBlock; - mappings[432] = ItemType.DeadHornCoralBlock; - mappings[433] = ItemType.TubeCoralBlock; - mappings[434] = ItemType.BrainCoralBlock; - mappings[435] = ItemType.BubbleCoralBlock; - mappings[436] = ItemType.FireCoralBlock; - mappings[437] = ItemType.HornCoralBlock; - mappings[438] = ItemType.TubeCoral; - mappings[439] = ItemType.BrainCoral; - mappings[440] = ItemType.BubbleCoral; - mappings[441] = ItemType.FireCoral; - mappings[442] = ItemType.HornCoral; - mappings[443] = ItemType.TubeCoralFan; - mappings[444] = ItemType.BrainCoralFan; - mappings[445] = ItemType.BubbleCoralFan; - mappings[446] = ItemType.FireCoralFan; - mappings[447] = ItemType.HornCoralFan; - mappings[448] = ItemType.DeadTubeCoralFan; - mappings[449] = ItemType.DeadBrainCoralFan; - mappings[450] = ItemType.DeadBubbleCoralFan; - mappings[451] = ItemType.DeadFireCoralFan; - mappings[452] = ItemType.DeadHornCoralFan; - mappings[453] = ItemType.BlueIce; - mappings[454] = ItemType.Conduit; - mappings[455] = ItemType.IronDoor; - mappings[456] = ItemType.OakDoor; - mappings[457] = ItemType.SpruceDoor; - mappings[458] = ItemType.BirchDoor; - mappings[459] = ItemType.JungleDoor; - mappings[460] = ItemType.AcaciaDoor; - mappings[461] = ItemType.DarkOakDoor; - mappings[462] = ItemType.Repeater; - mappings[463] = ItemType.Comparator; - mappings[464] = ItemType.StructureBlock; - mappings[465] = ItemType.TurtleHelmet; - mappings[466] = ItemType.TurtleScute; - mappings[467] = ItemType.IronShovel; - mappings[468] = ItemType.IronPickaxe; - mappings[469] = ItemType.IronAxe; - mappings[470] = ItemType.FlintAndSteel; - mappings[471] = ItemType.Apple; - mappings[472] = ItemType.Bow; - mappings[473] = ItemType.Arrow; - mappings[474] = ItemType.Coal; - mappings[475] = ItemType.Charcoal; - mappings[476] = ItemType.Diamond; - mappings[477] = ItemType.IronIngot; - mappings[478] = ItemType.GoldIngot; - mappings[479] = ItemType.IronSword; - mappings[480] = ItemType.WoodenSword; - mappings[481] = ItemType.WoodenShovel; - mappings[482] = ItemType.WoodenPickaxe; - mappings[483] = ItemType.WoodenAxe; - mappings[484] = ItemType.StoneSword; - mappings[485] = ItemType.StoneShovel; - mappings[486] = ItemType.StonePickaxe; - mappings[487] = ItemType.StoneAxe; - mappings[488] = ItemType.DiamondSword; - mappings[489] = ItemType.DiamondShovel; - mappings[490] = ItemType.DiamondPickaxe; - mappings[491] = ItemType.DiamondAxe; - mappings[492] = ItemType.Stick; - mappings[493] = ItemType.Bowl; - mappings[494] = ItemType.MushroomStew; - mappings[495] = ItemType.GoldenSword; - mappings[496] = ItemType.GoldenShovel; - mappings[497] = ItemType.GoldenPickaxe; - mappings[498] = ItemType.GoldenAxe; - mappings[499] = ItemType.String; - mappings[500] = ItemType.Feather; - mappings[501] = ItemType.Gunpowder; - mappings[502] = ItemType.WoodenHoe; - mappings[503] = ItemType.StoneHoe; - mappings[504] = ItemType.IronHoe; - mappings[505] = ItemType.DiamondHoe; - mappings[506] = ItemType.GoldenHoe; - mappings[507] = ItemType.WheatSeeds; - mappings[508] = ItemType.Wheat; - mappings[509] = ItemType.Bread; - mappings[510] = ItemType.LeatherHelmet; - mappings[511] = ItemType.LeatherChestplate; - mappings[512] = ItemType.LeatherLeggings; - mappings[513] = ItemType.LeatherBoots; - mappings[514] = ItemType.ChainmailHelmet; - mappings[515] = ItemType.ChainmailChestplate; - mappings[516] = ItemType.ChainmailLeggings; - mappings[517] = ItemType.ChainmailBoots; - mappings[518] = ItemType.IronHelmet; - mappings[519] = ItemType.IronChestplate; - mappings[520] = ItemType.IronLeggings; - mappings[521] = ItemType.IronBoots; - mappings[522] = ItemType.DiamondHelmet; - mappings[523] = ItemType.DiamondChestplate; - mappings[524] = ItemType.DiamondLeggings; - mappings[525] = ItemType.DiamondBoots; - mappings[526] = ItemType.GoldenHelmet; - mappings[527] = ItemType.GoldenChestplate; - mappings[528] = ItemType.GoldenLeggings; - mappings[529] = ItemType.GoldenBoots; - mappings[530] = ItemType.Flint; - mappings[531] = ItemType.Porkchop; - mappings[532] = ItemType.CookedPorkchop; - mappings[533] = ItemType.Painting; - mappings[534] = ItemType.GoldenApple; - mappings[535] = ItemType.EnchantedGoldenApple; - mappings[536] = ItemType.OakSign; - mappings[537] = ItemType.Bucket; - mappings[538] = ItemType.WaterBucket; - mappings[539] = ItemType.LavaBucket; - mappings[540] = ItemType.Minecart; - mappings[541] = ItemType.Saddle; - mappings[542] = ItemType.Redstone; - mappings[543] = ItemType.Snowball; - mappings[544] = ItemType.OakBoat; - mappings[545] = ItemType.Leather; - mappings[546] = ItemType.MilkBucket; - mappings[547] = ItemType.PufferfishBucket; - mappings[548] = ItemType.SalmonBucket; - mappings[549] = ItemType.CodBucket; - mappings[550] = ItemType.TropicalFishBucket; - mappings[551] = ItemType.Brick; - mappings[552] = ItemType.ClayBall; - mappings[553] = ItemType.SugarCane; - mappings[554] = ItemType.Kelp; - mappings[555] = ItemType.DriedKelpBlock; - mappings[556] = ItemType.Paper; - mappings[557] = ItemType.Book; - mappings[558] = ItemType.SlimeBall; - mappings[559] = ItemType.ChestMinecart; - mappings[560] = ItemType.FurnaceMinecart; - mappings[561] = ItemType.Egg; - mappings[562] = ItemType.Compass; - mappings[563] = ItemType.FishingRod; - mappings[564] = ItemType.Clock; - mappings[565] = ItemType.GlowstoneDust; - mappings[566] = ItemType.Cod; - mappings[567] = ItemType.Salmon; - mappings[568] = ItemType.TropicalFish; - mappings[569] = ItemType.Pufferfish; - mappings[570] = ItemType.CookedCod; - mappings[571] = ItemType.CookedSalmon; - mappings[572] = ItemType.InkSac; - mappings[573] = ItemType.RedDye; - mappings[574] = ItemType.GreenDye; - mappings[575] = ItemType.CocoaBeans; - mappings[576] = ItemType.LapisLazuli; - mappings[577] = ItemType.PurpleDye; - mappings[578] = ItemType.CyanDye; - mappings[579] = ItemType.LightGrayDye; - mappings[580] = ItemType.GrayDye; - mappings[581] = ItemType.PinkDye; - mappings[582] = ItemType.LimeDye; - mappings[583] = ItemType.YellowDye; - mappings[584] = ItemType.LightBlueDye; - mappings[585] = ItemType.MagentaDye; - mappings[586] = ItemType.OrangeDye; - mappings[587] = ItemType.BoneMeal; - mappings[588] = ItemType.Bone; - mappings[589] = ItemType.Sugar; - mappings[590] = ItemType.Cake; - mappings[591] = ItemType.WhiteBed; - mappings[592] = ItemType.OrangeBed; - mappings[593] = ItemType.MagentaBed; - mappings[594] = ItemType.LightBlueBed; - mappings[595] = ItemType.YellowBed; - mappings[596] = ItemType.LimeBed; - mappings[597] = ItemType.PinkBed; - mappings[598] = ItemType.GrayBed; - mappings[599] = ItemType.LightGrayBed; - mappings[600] = ItemType.CyanBed; - mappings[601] = ItemType.PurpleBed; - mappings[602] = ItemType.BlueBed; - mappings[603] = ItemType.BrownBed; - mappings[604] = ItemType.GreenBed; - mappings[605] = ItemType.RedBed; - mappings[606] = ItemType.BlackBed; - mappings[607] = ItemType.Cookie; - mappings[608] = ItemType.FilledMap; - mappings[609] = ItemType.Shears; - mappings[610] = ItemType.MelonSlice; - mappings[611] = ItemType.DriedKelp; - mappings[612] = ItemType.PumpkinSeeds; - mappings[613] = ItemType.MelonSeeds; - mappings[614] = ItemType.Beef; - mappings[615] = ItemType.CookedBeef; - mappings[616] = ItemType.Chicken; - mappings[617] = ItemType.CookedChicken; - mappings[618] = ItemType.RottenFlesh; - mappings[619] = ItemType.EnderPearl; - mappings[620] = ItemType.BlazeRod; - mappings[621] = ItemType.GhastTear; - mappings[622] = ItemType.GoldNugget; - mappings[623] = ItemType.NetherWart; - mappings[624] = ItemType.Potion; - mappings[625] = ItemType.GlassBottle; - mappings[626] = ItemType.SpiderEye; - mappings[627] = ItemType.FermentedSpiderEye; - mappings[628] = ItemType.BlazePowder; - mappings[629] = ItemType.MagmaCream; - mappings[630] = ItemType.BrewingStand; - mappings[631] = ItemType.Cauldron; - mappings[632] = ItemType.EnderEye; - mappings[633] = ItemType.GlisteringMelonSlice; - mappings[634] = ItemType.BatSpawnEgg; - mappings[635] = ItemType.BlazeSpawnEgg; - mappings[636] = ItemType.CaveSpiderSpawnEgg; - mappings[637] = ItemType.ChickenSpawnEgg; - mappings[638] = ItemType.CodSpawnEgg; - mappings[639] = ItemType.CowSpawnEgg; - mappings[640] = ItemType.CreeperSpawnEgg; - mappings[641] = ItemType.DolphinSpawnEgg; - mappings[642] = ItemType.DonkeySpawnEgg; - mappings[643] = ItemType.DrownedSpawnEgg; - mappings[644] = ItemType.ElderGuardianSpawnEgg; - mappings[645] = ItemType.EndermanSpawnEgg; - mappings[646] = ItemType.EndermiteSpawnEgg; - mappings[647] = ItemType.EvokerSpawnEgg; - mappings[648] = ItemType.GhastSpawnEgg; - mappings[649] = ItemType.GuardianSpawnEgg; - mappings[650] = ItemType.HorseSpawnEgg; - mappings[651] = ItemType.HuskSpawnEgg; - mappings[652] = ItemType.LlamaSpawnEgg; - mappings[653] = ItemType.MagmaCubeSpawnEgg; - mappings[654] = ItemType.MooshroomSpawnEgg; - mappings[655] = ItemType.MuleSpawnEgg; - mappings[656] = ItemType.OcelotSpawnEgg; - mappings[657] = ItemType.ParrotSpawnEgg; - mappings[658] = ItemType.PhantomSpawnEgg; - mappings[659] = ItemType.PigSpawnEgg; - mappings[660] = ItemType.PolarBearSpawnEgg; - mappings[661] = ItemType.PufferfishSpawnEgg; - mappings[662] = ItemType.RabbitSpawnEgg; - mappings[663] = ItemType.SalmonSpawnEgg; - mappings[664] = ItemType.SheepSpawnEgg; - mappings[665] = ItemType.ShulkerSpawnEgg; - mappings[666] = ItemType.SilverfishSpawnEgg; - mappings[667] = ItemType.SkeletonSpawnEgg; - mappings[668] = ItemType.SkeletonHorseSpawnEgg; - mappings[669] = ItemType.SlimeSpawnEgg; - mappings[670] = ItemType.SpiderSpawnEgg; - mappings[671] = ItemType.SquidSpawnEgg; - mappings[672] = ItemType.StraySpawnEgg; - mappings[673] = ItemType.TropicalFishSpawnEgg; - mappings[674] = ItemType.TurtleSpawnEgg; - mappings[675] = ItemType.VexSpawnEgg; - mappings[676] = ItemType.VillagerSpawnEgg; - mappings[677] = ItemType.VindicatorSpawnEgg; - mappings[678] = ItemType.WitchSpawnEgg; - mappings[679] = ItemType.WitherSkeletonSpawnEgg; - mappings[680] = ItemType.WolfSpawnEgg; - mappings[681] = ItemType.ZombieSpawnEgg; - mappings[682] = ItemType.ZombieHorseSpawnEgg; - mappings[683] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[684] = ItemType.ZombieVillagerSpawnEgg; - mappings[685] = ItemType.ExperienceBottle; - mappings[686] = ItemType.FireCharge; - mappings[687] = ItemType.WritableBook; - mappings[688] = ItemType.WrittenBook; - mappings[689] = ItemType.Emerald; - mappings[690] = ItemType.ItemFrame; - mappings[691] = ItemType.FlowerPot; - mappings[692] = ItemType.Carrot; - mappings[693] = ItemType.Potato; - mappings[694] = ItemType.BakedPotato; - mappings[695] = ItemType.PoisonousPotato; - mappings[696] = ItemType.Map; - mappings[697] = ItemType.GoldenCarrot; - mappings[698] = ItemType.SkeletonSkull; - mappings[699] = ItemType.WitherSkeletonSkull; - mappings[700] = ItemType.PlayerHead; - mappings[701] = ItemType.ZombieHead; - mappings[702] = ItemType.CreeperHead; - mappings[703] = ItemType.DragonHead; - mappings[704] = ItemType.CarrotOnAStick; - mappings[705] = ItemType.NetherStar; - mappings[706] = ItemType.PumpkinPie; - mappings[707] = ItemType.FireworkRocket; - mappings[708] = ItemType.FireworkStar; - mappings[709] = ItemType.EnchantedBook; - mappings[710] = ItemType.NetherBrick; - mappings[711] = ItemType.Quartz; - mappings[712] = ItemType.TntMinecart; - mappings[713] = ItemType.HopperMinecart; - mappings[714] = ItemType.PrismarineShard; - mappings[715] = ItemType.PrismarineCrystals; - mappings[716] = ItemType.Rabbit; - mappings[717] = ItemType.CookedRabbit; - mappings[718] = ItemType.RabbitStew; - mappings[719] = ItemType.RabbitFoot; - mappings[720] = ItemType.RabbitHide; - mappings[721] = ItemType.ArmorStand; - mappings[722] = ItemType.IronHorseArmor; - mappings[723] = ItemType.GoldenHorseArmor; - mappings[724] = ItemType.DiamondHorseArmor; - mappings[725] = ItemType.Lead; - mappings[726] = ItemType.NameTag; - mappings[727] = ItemType.CommandBlockMinecart; - mappings[728] = ItemType.Mutton; - mappings[729] = ItemType.CookedMutton; - mappings[730] = ItemType.WhiteBanner; - mappings[731] = ItemType.OrangeBanner; - mappings[732] = ItemType.MagentaBanner; - mappings[733] = ItemType.LightBlueBanner; - mappings[734] = ItemType.YellowBanner; - mappings[735] = ItemType.LimeBanner; - mappings[736] = ItemType.PinkBanner; - mappings[737] = ItemType.GrayBanner; - mappings[738] = ItemType.LightGrayBanner; - mappings[739] = ItemType.CyanBanner; - mappings[740] = ItemType.PurpleBanner; - mappings[741] = ItemType.BlueBanner; - mappings[742] = ItemType.BrownBanner; - mappings[743] = ItemType.GreenBanner; - mappings[744] = ItemType.RedBanner; - mappings[745] = ItemType.BlackBanner; - mappings[746] = ItemType.EndCrystal; - mappings[747] = ItemType.ChorusFruit; - mappings[748] = ItemType.PoppedChorusFruit; - mappings[749] = ItemType.Beetroot; - mappings[750] = ItemType.BeetrootSeeds; - mappings[751] = ItemType.BeetrootSoup; - mappings[752] = ItemType.DragonBreath; - mappings[753] = ItemType.SplashPotion; - mappings[754] = ItemType.SpectralArrow; - mappings[755] = ItemType.TippedArrow; - mappings[756] = ItemType.LingeringPotion; - mappings[757] = ItemType.Shield; - mappings[758] = ItemType.Elytra; - mappings[759] = ItemType.SpruceBoat; - mappings[760] = ItemType.BirchBoat; - mappings[761] = ItemType.JungleBoat; - mappings[762] = ItemType.AcaciaBoat; - mappings[763] = ItemType.DarkOakBoat; - mappings[764] = ItemType.TotemOfUndying; - mappings[765] = ItemType.ShulkerShell; - mappings[766] = ItemType.IronNugget; - mappings[767] = ItemType.KnowledgeBook; - mappings[768] = ItemType.DebugStick; - mappings[769] = ItemType.MusicDisc13; - mappings[770] = ItemType.MusicDiscCat; - mappings[771] = ItemType.MusicDiscBlocks; - mappings[772] = ItemType.MusicDiscChirp; - mappings[773] = ItemType.MusicDiscFar; - mappings[774] = ItemType.MusicDiscMall; - mappings[775] = ItemType.MusicDiscMellohi; - mappings[776] = ItemType.MusicDiscStal; - mappings[777] = ItemType.MusicDiscStrad; - mappings[778] = ItemType.MusicDiscWard; - mappings[779] = ItemType.MusicDisc11; - mappings[780] = ItemType.MusicDiscWait; - mappings[781] = ItemType.Trident; - mappings[782] = ItemType.PhantomMembrane; - mappings[783] = ItemType.NautilusShell; - mappings[784] = ItemType.HeartOfTheSea; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1132.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette1132.cs deleted file mode 100644 index da38b04199..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1132.cs +++ /dev/null @@ -1,808 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette1132 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette1132() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.GrassBlock; - mappings[9] = ItemType.Dirt; - mappings[10] = ItemType.CoarseDirt; - mappings[11] = ItemType.Podzol; - mappings[12] = ItemType.Cobblestone; - mappings[13] = ItemType.OakPlanks; - mappings[14] = ItemType.SprucePlanks; - mappings[15] = ItemType.BirchPlanks; - mappings[16] = ItemType.JunglePlanks; - mappings[17] = ItemType.AcaciaPlanks; - mappings[18] = ItemType.DarkOakPlanks; - mappings[19] = ItemType.OakSapling; - mappings[20] = ItemType.SpruceSapling; - mappings[21] = ItemType.BirchSapling; - mappings[22] = ItemType.JungleSapling; - mappings[23] = ItemType.AcaciaSapling; - mappings[24] = ItemType.DarkOakSapling; - mappings[25] = ItemType.Bedrock; - mappings[26] = ItemType.Sand; - mappings[27] = ItemType.RedSand; - mappings[28] = ItemType.Gravel; - mappings[29] = ItemType.GoldOre; - mappings[30] = ItemType.IronOre; - mappings[31] = ItemType.CoalOre; - mappings[32] = ItemType.OakLog; - mappings[33] = ItemType.SpruceLog; - mappings[34] = ItemType.BirchLog; - mappings[35] = ItemType.JungleLog; - mappings[36] = ItemType.AcaciaLog; - mappings[37] = ItemType.DarkOakLog; - mappings[38] = ItemType.StrippedOakLog; - mappings[39] = ItemType.StrippedSpruceLog; - mappings[40] = ItemType.StrippedBirchLog; - mappings[41] = ItemType.StrippedJungleLog; - mappings[42] = ItemType.StrippedAcaciaLog; - mappings[43] = ItemType.StrippedDarkOakLog; - mappings[44] = ItemType.StrippedOakWood; - mappings[45] = ItemType.StrippedSpruceWood; - mappings[46] = ItemType.StrippedBirchWood; - mappings[47] = ItemType.StrippedJungleWood; - mappings[48] = ItemType.StrippedAcaciaWood; - mappings[49] = ItemType.StrippedDarkOakWood; - mappings[50] = ItemType.OakWood; - mappings[51] = ItemType.SpruceWood; - mappings[52] = ItemType.BirchWood; - mappings[53] = ItemType.JungleWood; - mappings[54] = ItemType.AcaciaWood; - mappings[55] = ItemType.DarkOakWood; - mappings[56] = ItemType.OakLeaves; - mappings[57] = ItemType.SpruceLeaves; - mappings[58] = ItemType.BirchLeaves; - mappings[59] = ItemType.JungleLeaves; - mappings[60] = ItemType.AcaciaLeaves; - mappings[61] = ItemType.DarkOakLeaves; - mappings[62] = ItemType.Sponge; - mappings[63] = ItemType.WetSponge; - mappings[64] = ItemType.Glass; - mappings[65] = ItemType.LapisOre; - mappings[66] = ItemType.LapisBlock; - mappings[67] = ItemType.Dispenser; - mappings[68] = ItemType.Sandstone; - mappings[69] = ItemType.ChiseledSandstone; - mappings[70] = ItemType.CutSandstone; - mappings[71] = ItemType.NoteBlock; - mappings[72] = ItemType.PoweredRail; - mappings[73] = ItemType.DetectorRail; - mappings[74] = ItemType.StickyPiston; - mappings[75] = ItemType.Cobweb; - mappings[76] = ItemType.ShortGrass; - mappings[77] = ItemType.Fern; - mappings[78] = ItemType.DeadBush; - mappings[79] = ItemType.Seagrass; - mappings[80] = ItemType.SeaPickle; - mappings[81] = ItemType.Piston; - mappings[82] = ItemType.WhiteWool; - mappings[83] = ItemType.OrangeWool; - mappings[84] = ItemType.MagentaWool; - mappings[85] = ItemType.LightBlueWool; - mappings[86] = ItemType.YellowWool; - mappings[87] = ItemType.LimeWool; - mappings[88] = ItemType.PinkWool; - mappings[89] = ItemType.GrayWool; - mappings[90] = ItemType.LightGrayWool; - mappings[91] = ItemType.CyanWool; - mappings[92] = ItemType.PurpleWool; - mappings[93] = ItemType.BlueWool; - mappings[94] = ItemType.BrownWool; - mappings[95] = ItemType.GreenWool; - mappings[96] = ItemType.RedWool; - mappings[97] = ItemType.BlackWool; - mappings[98] = ItemType.Dandelion; - mappings[99] = ItemType.Poppy; - mappings[100] = ItemType.BlueOrchid; - mappings[101] = ItemType.Allium; - mappings[102] = ItemType.AzureBluet; - mappings[103] = ItemType.RedTulip; - mappings[104] = ItemType.OrangeTulip; - mappings[105] = ItemType.WhiteTulip; - mappings[106] = ItemType.PinkTulip; - mappings[107] = ItemType.OxeyeDaisy; - mappings[108] = ItemType.BrownMushroom; - mappings[109] = ItemType.RedMushroom; - mappings[110] = ItemType.GoldBlock; - mappings[111] = ItemType.IronBlock; - mappings[112] = ItemType.OakSlab; - mappings[113] = ItemType.SpruceSlab; - mappings[114] = ItemType.BirchSlab; - mappings[115] = ItemType.JungleSlab; - mappings[116] = ItemType.AcaciaSlab; - mappings[117] = ItemType.DarkOakSlab; - mappings[118] = ItemType.StoneSlab; - mappings[119] = ItemType.SandstoneSlab; - mappings[120] = ItemType.PetrifiedOakSlab; - mappings[121] = ItemType.CobblestoneSlab; - mappings[122] = ItemType.BrickSlab; - mappings[123] = ItemType.StoneBrickSlab; - mappings[124] = ItemType.NetherBrickSlab; - mappings[125] = ItemType.QuartzSlab; - mappings[126] = ItemType.RedSandstoneSlab; - mappings[127] = ItemType.PurpurSlab; - mappings[128] = ItemType.PrismarineSlab; - mappings[129] = ItemType.PrismarineBrickSlab; - mappings[130] = ItemType.DarkPrismarineSlab; - mappings[131] = ItemType.SmoothQuartz; - mappings[132] = ItemType.SmoothRedSandstone; - mappings[133] = ItemType.SmoothSandstone; - mappings[134] = ItemType.SmoothStone; - mappings[135] = ItemType.Bricks; - mappings[136] = ItemType.Tnt; - mappings[137] = ItemType.Bookshelf; - mappings[138] = ItemType.MossyCobblestone; - mappings[139] = ItemType.Obsidian; - mappings[140] = ItemType.Torch; - mappings[141] = ItemType.EndRod; - mappings[142] = ItemType.ChorusPlant; - mappings[143] = ItemType.ChorusFlower; - mappings[144] = ItemType.PurpurBlock; - mappings[145] = ItemType.PurpurPillar; - mappings[146] = ItemType.PurpurStairs; - mappings[147] = ItemType.Spawner; - mappings[148] = ItemType.OakStairs; - mappings[149] = ItemType.Chest; - mappings[150] = ItemType.DiamondOre; - mappings[151] = ItemType.DiamondBlock; - mappings[152] = ItemType.CraftingTable; - mappings[153] = ItemType.Farmland; - mappings[154] = ItemType.Furnace; - mappings[155] = ItemType.Ladder; - mappings[156] = ItemType.Rail; - mappings[157] = ItemType.CobblestoneStairs; - mappings[158] = ItemType.Lever; - mappings[159] = ItemType.StonePressurePlate; - mappings[160] = ItemType.OakPressurePlate; - mappings[161] = ItemType.SprucePressurePlate; - mappings[162] = ItemType.BirchPressurePlate; - mappings[163] = ItemType.JunglePressurePlate; - mappings[164] = ItemType.AcaciaPressurePlate; - mappings[165] = ItemType.DarkOakPressurePlate; - mappings[166] = ItemType.RedstoneOre; - mappings[167] = ItemType.RedstoneTorch; - mappings[168] = ItemType.StoneButton; - mappings[169] = ItemType.Snow; - mappings[170] = ItemType.Ice; - mappings[171] = ItemType.SnowBlock; - mappings[172] = ItemType.Cactus; - mappings[173] = ItemType.Clay; - mappings[174] = ItemType.Jukebox; - mappings[175] = ItemType.OakFence; - mappings[176] = ItemType.SpruceFence; - mappings[177] = ItemType.BirchFence; - mappings[178] = ItemType.JungleFence; - mappings[179] = ItemType.AcaciaFence; - mappings[180] = ItemType.DarkOakFence; - mappings[181] = ItemType.Pumpkin; - mappings[182] = ItemType.CarvedPumpkin; - mappings[183] = ItemType.Netherrack; - mappings[184] = ItemType.SoulSand; - mappings[185] = ItemType.Glowstone; - mappings[186] = ItemType.JackOLantern; - mappings[187] = ItemType.OakTrapdoor; - mappings[188] = ItemType.SpruceTrapdoor; - mappings[189] = ItemType.BirchTrapdoor; - mappings[190] = ItemType.JungleTrapdoor; - mappings[191] = ItemType.AcaciaTrapdoor; - mappings[192] = ItemType.DarkOakTrapdoor; - mappings[193] = ItemType.InfestedStone; - mappings[194] = ItemType.InfestedCobblestone; - mappings[195] = ItemType.InfestedStoneBricks; - mappings[196] = ItemType.InfestedMossyStoneBricks; - mappings[197] = ItemType.InfestedCrackedStoneBricks; - mappings[198] = ItemType.InfestedChiseledStoneBricks; - mappings[199] = ItemType.StoneBricks; - mappings[200] = ItemType.MossyStoneBricks; - mappings[201] = ItemType.CrackedStoneBricks; - mappings[202] = ItemType.ChiseledStoneBricks; - mappings[203] = ItemType.BrownMushroomBlock; - mappings[204] = ItemType.RedMushroomBlock; - mappings[205] = ItemType.MushroomStem; - mappings[206] = ItemType.IronBars; - mappings[207] = ItemType.GlassPane; - mappings[208] = ItemType.Melon; - mappings[209] = ItemType.Vine; - mappings[210] = ItemType.OakFenceGate; - mappings[211] = ItemType.SpruceFenceGate; - mappings[212] = ItemType.BirchFenceGate; - mappings[213] = ItemType.JungleFenceGate; - mappings[214] = ItemType.AcaciaFenceGate; - mappings[215] = ItemType.DarkOakFenceGate; - mappings[216] = ItemType.BrickStairs; - mappings[217] = ItemType.StoneBrickStairs; - mappings[218] = ItemType.Mycelium; - mappings[219] = ItemType.LilyPad; - mappings[220] = ItemType.NetherBricks; - mappings[221] = ItemType.NetherBrickFence; - mappings[222] = ItemType.NetherBrickStairs; - mappings[223] = ItemType.EnchantingTable; - mappings[224] = ItemType.EndPortalFrame; - mappings[225] = ItemType.EndStone; - mappings[226] = ItemType.EndStoneBricks; - mappings[227] = ItemType.DragonEgg; - mappings[228] = ItemType.RedstoneLamp; - mappings[229] = ItemType.SandstoneStairs; - mappings[230] = ItemType.EmeraldOre; - mappings[231] = ItemType.EnderChest; - mappings[232] = ItemType.TripwireHook; - mappings[233] = ItemType.EmeraldBlock; - mappings[234] = ItemType.SpruceStairs; - mappings[235] = ItemType.BirchStairs; - mappings[236] = ItemType.JungleStairs; - mappings[237] = ItemType.CommandBlock; - mappings[238] = ItemType.Beacon; - mappings[239] = ItemType.CobblestoneWall; - mappings[240] = ItemType.MossyCobblestoneWall; - mappings[241] = ItemType.OakButton; - mappings[242] = ItemType.SpruceButton; - mappings[243] = ItemType.BirchButton; - mappings[244] = ItemType.JungleButton; - mappings[245] = ItemType.AcaciaButton; - mappings[246] = ItemType.DarkOakButton; - mappings[247] = ItemType.Anvil; - mappings[248] = ItemType.ChippedAnvil; - mappings[249] = ItemType.DamagedAnvil; - mappings[250] = ItemType.TrappedChest; - mappings[251] = ItemType.LightWeightedPressurePlate; - mappings[252] = ItemType.HeavyWeightedPressurePlate; - mappings[253] = ItemType.DaylightDetector; - mappings[254] = ItemType.RedstoneBlock; - mappings[255] = ItemType.NetherQuartzOre; - mappings[256] = ItemType.Hopper; - mappings[257] = ItemType.ChiseledQuartzBlock; - mappings[258] = ItemType.QuartzBlock; - mappings[259] = ItemType.QuartzPillar; - mappings[260] = ItemType.QuartzStairs; - mappings[261] = ItemType.ActivatorRail; - mappings[262] = ItemType.Dropper; - mappings[263] = ItemType.WhiteTerracotta; - mappings[264] = ItemType.OrangeTerracotta; - mappings[265] = ItemType.MagentaTerracotta; - mappings[266] = ItemType.LightBlueTerracotta; - mappings[267] = ItemType.YellowTerracotta; - mappings[268] = ItemType.LimeTerracotta; - mappings[269] = ItemType.PinkTerracotta; - mappings[270] = ItemType.GrayTerracotta; - mappings[271] = ItemType.LightGrayTerracotta; - mappings[272] = ItemType.CyanTerracotta; - mappings[273] = ItemType.PurpleTerracotta; - mappings[274] = ItemType.BlueTerracotta; - mappings[275] = ItemType.BrownTerracotta; - mappings[276] = ItemType.GreenTerracotta; - mappings[277] = ItemType.RedTerracotta; - mappings[278] = ItemType.BlackTerracotta; - mappings[279] = ItemType.Barrier; - mappings[280] = ItemType.IronTrapdoor; - mappings[281] = ItemType.HayBlock; - mappings[282] = ItemType.WhiteCarpet; - mappings[283] = ItemType.OrangeCarpet; - mappings[284] = ItemType.MagentaCarpet; - mappings[285] = ItemType.LightBlueCarpet; - mappings[286] = ItemType.YellowCarpet; - mappings[287] = ItemType.LimeCarpet; - mappings[288] = ItemType.PinkCarpet; - mappings[289] = ItemType.GrayCarpet; - mappings[290] = ItemType.LightGrayCarpet; - mappings[291] = ItemType.CyanCarpet; - mappings[292] = ItemType.PurpleCarpet; - mappings[293] = ItemType.BlueCarpet; - mappings[294] = ItemType.BrownCarpet; - mappings[295] = ItemType.GreenCarpet; - mappings[296] = ItemType.RedCarpet; - mappings[297] = ItemType.BlackCarpet; - mappings[298] = ItemType.Terracotta; - mappings[299] = ItemType.CoalBlock; - mappings[300] = ItemType.PackedIce; - mappings[301] = ItemType.AcaciaStairs; - mappings[302] = ItemType.DarkOakStairs; - mappings[303] = ItemType.SlimeBlock; - mappings[304] = ItemType.DirtPath; - mappings[305] = ItemType.Sunflower; - mappings[306] = ItemType.Lilac; - mappings[307] = ItemType.RoseBush; - mappings[308] = ItemType.Peony; - mappings[309] = ItemType.TallGrass; - mappings[310] = ItemType.LargeFern; - mappings[311] = ItemType.WhiteStainedGlass; - mappings[312] = ItemType.OrangeStainedGlass; - mappings[313] = ItemType.MagentaStainedGlass; - mappings[314] = ItemType.LightBlueStainedGlass; - mappings[315] = ItemType.YellowStainedGlass; - mappings[316] = ItemType.LimeStainedGlass; - mappings[317] = ItemType.PinkStainedGlass; - mappings[318] = ItemType.GrayStainedGlass; - mappings[319] = ItemType.LightGrayStainedGlass; - mappings[320] = ItemType.CyanStainedGlass; - mappings[321] = ItemType.PurpleStainedGlass; - mappings[322] = ItemType.BlueStainedGlass; - mappings[323] = ItemType.BrownStainedGlass; - mappings[324] = ItemType.GreenStainedGlass; - mappings[325] = ItemType.RedStainedGlass; - mappings[326] = ItemType.BlackStainedGlass; - mappings[327] = ItemType.WhiteStainedGlassPane; - mappings[328] = ItemType.OrangeStainedGlassPane; - mappings[329] = ItemType.MagentaStainedGlassPane; - mappings[330] = ItemType.LightBlueStainedGlassPane; - mappings[331] = ItemType.YellowStainedGlassPane; - mappings[332] = ItemType.LimeStainedGlassPane; - mappings[333] = ItemType.PinkStainedGlassPane; - mappings[334] = ItemType.GrayStainedGlassPane; - mappings[335] = ItemType.LightGrayStainedGlassPane; - mappings[336] = ItemType.CyanStainedGlassPane; - mappings[337] = ItemType.PurpleStainedGlassPane; - mappings[338] = ItemType.BlueStainedGlassPane; - mappings[339] = ItemType.BrownStainedGlassPane; - mappings[340] = ItemType.GreenStainedGlassPane; - mappings[341] = ItemType.RedStainedGlassPane; - mappings[342] = ItemType.BlackStainedGlassPane; - mappings[343] = ItemType.Prismarine; - mappings[344] = ItemType.PrismarineBricks; - mappings[345] = ItemType.DarkPrismarine; - mappings[346] = ItemType.PrismarineStairs; - mappings[347] = ItemType.PrismarineBrickStairs; - mappings[348] = ItemType.DarkPrismarineStairs; - mappings[349] = ItemType.SeaLantern; - mappings[350] = ItemType.RedSandstone; - mappings[351] = ItemType.ChiseledRedSandstone; - mappings[352] = ItemType.CutRedSandstone; - mappings[353] = ItemType.RedSandstoneStairs; - mappings[354] = ItemType.RepeatingCommandBlock; - mappings[355] = ItemType.ChainCommandBlock; - mappings[356] = ItemType.MagmaBlock; - mappings[357] = ItemType.NetherWartBlock; - mappings[358] = ItemType.RedNetherBricks; - mappings[359] = ItemType.BoneBlock; - mappings[360] = ItemType.StructureVoid; - mappings[361] = ItemType.Observer; - mappings[362] = ItemType.ShulkerBox; - mappings[363] = ItemType.WhiteShulkerBox; - mappings[364] = ItemType.OrangeShulkerBox; - mappings[365] = ItemType.MagentaShulkerBox; - mappings[366] = ItemType.LightBlueShulkerBox; - mappings[367] = ItemType.YellowShulkerBox; - mappings[368] = ItemType.LimeShulkerBox; - mappings[369] = ItemType.PinkShulkerBox; - mappings[370] = ItemType.GrayShulkerBox; - mappings[371] = ItemType.LightGrayShulkerBox; - mappings[372] = ItemType.CyanShulkerBox; - mappings[373] = ItemType.PurpleShulkerBox; - mappings[374] = ItemType.BlueShulkerBox; - mappings[375] = ItemType.BrownShulkerBox; - mappings[376] = ItemType.GreenShulkerBox; - mappings[377] = ItemType.RedShulkerBox; - mappings[378] = ItemType.BlackShulkerBox; - mappings[379] = ItemType.WhiteGlazedTerracotta; - mappings[380] = ItemType.OrangeGlazedTerracotta; - mappings[381] = ItemType.MagentaGlazedTerracotta; - mappings[382] = ItemType.LightBlueGlazedTerracotta; - mappings[383] = ItemType.YellowGlazedTerracotta; - mappings[384] = ItemType.LimeGlazedTerracotta; - mappings[385] = ItemType.PinkGlazedTerracotta; - mappings[386] = ItemType.GrayGlazedTerracotta; - mappings[387] = ItemType.LightGrayGlazedTerracotta; - mappings[388] = ItemType.CyanGlazedTerracotta; - mappings[389] = ItemType.PurpleGlazedTerracotta; - mappings[390] = ItemType.BlueGlazedTerracotta; - mappings[391] = ItemType.BrownGlazedTerracotta; - mappings[392] = ItemType.GreenGlazedTerracotta; - mappings[393] = ItemType.RedGlazedTerracotta; - mappings[394] = ItemType.BlackGlazedTerracotta; - mappings[395] = ItemType.WhiteConcrete; - mappings[396] = ItemType.OrangeConcrete; - mappings[397] = ItemType.MagentaConcrete; - mappings[398] = ItemType.LightBlueConcrete; - mappings[399] = ItemType.YellowConcrete; - mappings[400] = ItemType.LimeConcrete; - mappings[401] = ItemType.PinkConcrete; - mappings[402] = ItemType.GrayConcrete; - mappings[403] = ItemType.LightGrayConcrete; - mappings[404] = ItemType.CyanConcrete; - mappings[405] = ItemType.PurpleConcrete; - mappings[406] = ItemType.BlueConcrete; - mappings[407] = ItemType.BrownConcrete; - mappings[408] = ItemType.GreenConcrete; - mappings[409] = ItemType.RedConcrete; - mappings[410] = ItemType.BlackConcrete; - mappings[411] = ItemType.WhiteConcretePowder; - mappings[412] = ItemType.OrangeConcretePowder; - mappings[413] = ItemType.MagentaConcretePowder; - mappings[414] = ItemType.LightBlueConcretePowder; - mappings[415] = ItemType.YellowConcretePowder; - mappings[416] = ItemType.LimeConcretePowder; - mappings[417] = ItemType.PinkConcretePowder; - mappings[418] = ItemType.GrayConcretePowder; - mappings[419] = ItemType.LightGrayConcretePowder; - mappings[420] = ItemType.CyanConcretePowder; - mappings[421] = ItemType.PurpleConcretePowder; - mappings[422] = ItemType.BlueConcretePowder; - mappings[423] = ItemType.BrownConcretePowder; - mappings[424] = ItemType.GreenConcretePowder; - mappings[425] = ItemType.RedConcretePowder; - mappings[426] = ItemType.BlackConcretePowder; - mappings[427] = ItemType.TurtleEgg; - mappings[428] = ItemType.DeadTubeCoralBlock; - mappings[429] = ItemType.DeadBrainCoralBlock; - mappings[430] = ItemType.DeadBubbleCoralBlock; - mappings[431] = ItemType.DeadFireCoralBlock; - mappings[432] = ItemType.DeadHornCoralBlock; - mappings[433] = ItemType.TubeCoralBlock; - mappings[434] = ItemType.BrainCoralBlock; - mappings[435] = ItemType.BubbleCoralBlock; - mappings[436] = ItemType.FireCoralBlock; - mappings[437] = ItemType.HornCoralBlock; - mappings[438] = ItemType.TubeCoral; - mappings[439] = ItemType.BrainCoral; - mappings[440] = ItemType.BubbleCoral; - mappings[441] = ItemType.FireCoral; - mappings[442] = ItemType.HornCoral; - mappings[443] = ItemType.DeadBrainCoral; - mappings[444] = ItemType.DeadBubbleCoral; - mappings[445] = ItemType.DeadFireCoral; - mappings[446] = ItemType.DeadHornCoral; - mappings[447] = ItemType.DeadTubeCoral; - mappings[448] = ItemType.TubeCoralFan; - mappings[449] = ItemType.BrainCoralFan; - mappings[450] = ItemType.BubbleCoralFan; - mappings[451] = ItemType.FireCoralFan; - mappings[452] = ItemType.HornCoralFan; - mappings[453] = ItemType.DeadTubeCoralFan; - mappings[454] = ItemType.DeadBrainCoralFan; - mappings[455] = ItemType.DeadBubbleCoralFan; - mappings[456] = ItemType.DeadFireCoralFan; - mappings[457] = ItemType.DeadHornCoralFan; - mappings[458] = ItemType.BlueIce; - mappings[459] = ItemType.Conduit; - mappings[460] = ItemType.IronDoor; - mappings[461] = ItemType.OakDoor; - mappings[462] = ItemType.SpruceDoor; - mappings[463] = ItemType.BirchDoor; - mappings[464] = ItemType.JungleDoor; - mappings[465] = ItemType.AcaciaDoor; - mappings[466] = ItemType.DarkOakDoor; - mappings[467] = ItemType.Repeater; - mappings[468] = ItemType.Comparator; - mappings[469] = ItemType.StructureBlock; - mappings[470] = ItemType.TurtleHelmet; - mappings[471] = ItemType.TurtleScute; - mappings[472] = ItemType.IronShovel; - mappings[473] = ItemType.IronPickaxe; - mappings[474] = ItemType.IronAxe; - mappings[475] = ItemType.FlintAndSteel; - mappings[476] = ItemType.Apple; - mappings[477] = ItemType.Bow; - mappings[478] = ItemType.Arrow; - mappings[479] = ItemType.Coal; - mappings[480] = ItemType.Charcoal; - mappings[481] = ItemType.Diamond; - mappings[482] = ItemType.IronIngot; - mappings[483] = ItemType.GoldIngot; - mappings[484] = ItemType.IronSword; - mappings[485] = ItemType.WoodenSword; - mappings[486] = ItemType.WoodenShovel; - mappings[487] = ItemType.WoodenPickaxe; - mappings[488] = ItemType.WoodenAxe; - mappings[489] = ItemType.StoneSword; - mappings[490] = ItemType.StoneShovel; - mappings[491] = ItemType.StonePickaxe; - mappings[492] = ItemType.StoneAxe; - mappings[493] = ItemType.DiamondSword; - mappings[494] = ItemType.DiamondShovel; - mappings[495] = ItemType.DiamondPickaxe; - mappings[496] = ItemType.DiamondAxe; - mappings[497] = ItemType.Stick; - mappings[498] = ItemType.Bowl; - mappings[499] = ItemType.MushroomStew; - mappings[500] = ItemType.GoldenSword; - mappings[501] = ItemType.GoldenShovel; - mappings[502] = ItemType.GoldenPickaxe; - mappings[503] = ItemType.GoldenAxe; - mappings[504] = ItemType.String; - mappings[505] = ItemType.Feather; - mappings[506] = ItemType.Gunpowder; - mappings[507] = ItemType.WoodenHoe; - mappings[508] = ItemType.StoneHoe; - mappings[509] = ItemType.IronHoe; - mappings[510] = ItemType.DiamondHoe; - mappings[511] = ItemType.GoldenHoe; - mappings[512] = ItemType.WheatSeeds; - mappings[513] = ItemType.Wheat; - mappings[514] = ItemType.Bread; - mappings[515] = ItemType.LeatherHelmet; - mappings[516] = ItemType.LeatherChestplate; - mappings[517] = ItemType.LeatherLeggings; - mappings[518] = ItemType.LeatherBoots; - mappings[519] = ItemType.ChainmailHelmet; - mappings[520] = ItemType.ChainmailChestplate; - mappings[521] = ItemType.ChainmailLeggings; - mappings[522] = ItemType.ChainmailBoots; - mappings[523] = ItemType.IronHelmet; - mappings[524] = ItemType.IronChestplate; - mappings[525] = ItemType.IronLeggings; - mappings[526] = ItemType.IronBoots; - mappings[527] = ItemType.DiamondHelmet; - mappings[528] = ItemType.DiamondChestplate; - mappings[529] = ItemType.DiamondLeggings; - mappings[530] = ItemType.DiamondBoots; - mappings[531] = ItemType.GoldenHelmet; - mappings[532] = ItemType.GoldenChestplate; - mappings[533] = ItemType.GoldenLeggings; - mappings[534] = ItemType.GoldenBoots; - mappings[535] = ItemType.Flint; - mappings[536] = ItemType.Porkchop; - mappings[537] = ItemType.CookedPorkchop; - mappings[538] = ItemType.Painting; - mappings[539] = ItemType.GoldenApple; - mappings[540] = ItemType.EnchantedGoldenApple; - mappings[541] = ItemType.OakSign; - mappings[542] = ItemType.Bucket; - mappings[543] = ItemType.WaterBucket; - mappings[544] = ItemType.LavaBucket; - mappings[545] = ItemType.Minecart; - mappings[546] = ItemType.Saddle; - mappings[547] = ItemType.Redstone; - mappings[548] = ItemType.Snowball; - mappings[549] = ItemType.OakBoat; - mappings[550] = ItemType.Leather; - mappings[551] = ItemType.MilkBucket; - mappings[552] = ItemType.PufferfishBucket; - mappings[553] = ItemType.SalmonBucket; - mappings[554] = ItemType.CodBucket; - mappings[555] = ItemType.TropicalFishBucket; - mappings[556] = ItemType.Brick; - mappings[557] = ItemType.ClayBall; - mappings[558] = ItemType.SugarCane; - mappings[559] = ItemType.Kelp; - mappings[560] = ItemType.DriedKelpBlock; - mappings[561] = ItemType.Paper; - mappings[562] = ItemType.Book; - mappings[563] = ItemType.SlimeBall; - mappings[564] = ItemType.ChestMinecart; - mappings[565] = ItemType.FurnaceMinecart; - mappings[566] = ItemType.Egg; - mappings[567] = ItemType.Compass; - mappings[568] = ItemType.FishingRod; - mappings[569] = ItemType.Clock; - mappings[570] = ItemType.GlowstoneDust; - mappings[571] = ItemType.Cod; - mappings[572] = ItemType.Salmon; - mappings[573] = ItemType.TropicalFish; - mappings[574] = ItemType.Pufferfish; - mappings[575] = ItemType.CookedCod; - mappings[576] = ItemType.CookedSalmon; - mappings[577] = ItemType.InkSac; - mappings[578] = ItemType.RedDye; - mappings[579] = ItemType.GreenDye; - mappings[580] = ItemType.CocoaBeans; - mappings[581] = ItemType.LapisLazuli; - mappings[582] = ItemType.PurpleDye; - mappings[583] = ItemType.CyanDye; - mappings[584] = ItemType.LightGrayDye; - mappings[585] = ItemType.GrayDye; - mappings[586] = ItemType.PinkDye; - mappings[587] = ItemType.LimeDye; - mappings[588] = ItemType.YellowDye; - mappings[589] = ItemType.LightBlueDye; - mappings[590] = ItemType.MagentaDye; - mappings[591] = ItemType.OrangeDye; - mappings[592] = ItemType.BoneMeal; - mappings[593] = ItemType.Bone; - mappings[594] = ItemType.Sugar; - mappings[595] = ItemType.Cake; - mappings[596] = ItemType.WhiteBed; - mappings[597] = ItemType.OrangeBed; - mappings[598] = ItemType.MagentaBed; - mappings[599] = ItemType.LightBlueBed; - mappings[600] = ItemType.YellowBed; - mappings[601] = ItemType.LimeBed; - mappings[602] = ItemType.PinkBed; - mappings[603] = ItemType.GrayBed; - mappings[604] = ItemType.LightGrayBed; - mappings[605] = ItemType.CyanBed; - mappings[606] = ItemType.PurpleBed; - mappings[607] = ItemType.BlueBed; - mappings[608] = ItemType.BrownBed; - mappings[609] = ItemType.GreenBed; - mappings[610] = ItemType.RedBed; - mappings[611] = ItemType.BlackBed; - mappings[612] = ItemType.Cookie; - mappings[613] = ItemType.FilledMap; - mappings[614] = ItemType.Shears; - mappings[615] = ItemType.MelonSlice; - mappings[616] = ItemType.DriedKelp; - mappings[617] = ItemType.PumpkinSeeds; - mappings[618] = ItemType.MelonSeeds; - mappings[619] = ItemType.Beef; - mappings[620] = ItemType.CookedBeef; - mappings[621] = ItemType.Chicken; - mappings[622] = ItemType.CookedChicken; - mappings[623] = ItemType.RottenFlesh; - mappings[624] = ItemType.EnderPearl; - mappings[625] = ItemType.BlazeRod; - mappings[626] = ItemType.GhastTear; - mappings[627] = ItemType.GoldNugget; - mappings[628] = ItemType.NetherWart; - mappings[629] = ItemType.Potion; - mappings[630] = ItemType.GlassBottle; - mappings[631] = ItemType.SpiderEye; - mappings[632] = ItemType.FermentedSpiderEye; - mappings[633] = ItemType.BlazePowder; - mappings[634] = ItemType.MagmaCream; - mappings[635] = ItemType.BrewingStand; - mappings[636] = ItemType.Cauldron; - mappings[637] = ItemType.EnderEye; - mappings[638] = ItemType.GlisteringMelonSlice; - mappings[639] = ItemType.BatSpawnEgg; - mappings[640] = ItemType.BlazeSpawnEgg; - mappings[641] = ItemType.CaveSpiderSpawnEgg; - mappings[642] = ItemType.ChickenSpawnEgg; - mappings[643] = ItemType.CodSpawnEgg; - mappings[644] = ItemType.CowSpawnEgg; - mappings[645] = ItemType.CreeperSpawnEgg; - mappings[646] = ItemType.DolphinSpawnEgg; - mappings[647] = ItemType.DonkeySpawnEgg; - mappings[648] = ItemType.DrownedSpawnEgg; - mappings[649] = ItemType.ElderGuardianSpawnEgg; - mappings[650] = ItemType.EndermanSpawnEgg; - mappings[651] = ItemType.EndermiteSpawnEgg; - mappings[652] = ItemType.EvokerSpawnEgg; - mappings[653] = ItemType.GhastSpawnEgg; - mappings[654] = ItemType.GuardianSpawnEgg; - mappings[655] = ItemType.HorseSpawnEgg; - mappings[656] = ItemType.HuskSpawnEgg; - mappings[657] = ItemType.LlamaSpawnEgg; - mappings[658] = ItemType.MagmaCubeSpawnEgg; - mappings[659] = ItemType.MooshroomSpawnEgg; - mappings[660] = ItemType.MuleSpawnEgg; - mappings[661] = ItemType.OcelotSpawnEgg; - mappings[662] = ItemType.ParrotSpawnEgg; - mappings[663] = ItemType.PhantomSpawnEgg; - mappings[664] = ItemType.PigSpawnEgg; - mappings[665] = ItemType.PolarBearSpawnEgg; - mappings[666] = ItemType.PufferfishSpawnEgg; - mappings[667] = ItemType.RabbitSpawnEgg; - mappings[668] = ItemType.SalmonSpawnEgg; - mappings[669] = ItemType.SheepSpawnEgg; - mappings[670] = ItemType.ShulkerSpawnEgg; - mappings[671] = ItemType.SilverfishSpawnEgg; - mappings[672] = ItemType.SkeletonSpawnEgg; - mappings[673] = ItemType.SkeletonHorseSpawnEgg; - mappings[674] = ItemType.SlimeSpawnEgg; - mappings[675] = ItemType.SpiderSpawnEgg; - mappings[676] = ItemType.SquidSpawnEgg; - mappings[677] = ItemType.StraySpawnEgg; - mappings[678] = ItemType.TropicalFishSpawnEgg; - mappings[679] = ItemType.TurtleSpawnEgg; - mappings[680] = ItemType.VexSpawnEgg; - mappings[681] = ItemType.VillagerSpawnEgg; - mappings[682] = ItemType.VindicatorSpawnEgg; - mappings[683] = ItemType.WitchSpawnEgg; - mappings[684] = ItemType.WitherSkeletonSpawnEgg; - mappings[685] = ItemType.WolfSpawnEgg; - mappings[686] = ItemType.ZombieSpawnEgg; - mappings[687] = ItemType.ZombieHorseSpawnEgg; - mappings[688] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[689] = ItemType.ZombieVillagerSpawnEgg; - mappings[690] = ItemType.ExperienceBottle; - mappings[691] = ItemType.FireCharge; - mappings[692] = ItemType.WritableBook; - mappings[693] = ItemType.WrittenBook; - mappings[694] = ItemType.Emerald; - mappings[695] = ItemType.ItemFrame; - mappings[696] = ItemType.FlowerPot; - mappings[697] = ItemType.Carrot; - mappings[698] = ItemType.Potato; - mappings[699] = ItemType.BakedPotato; - mappings[700] = ItemType.PoisonousPotato; - mappings[701] = ItemType.Map; - mappings[702] = ItemType.GoldenCarrot; - mappings[703] = ItemType.SkeletonSkull; - mappings[704] = ItemType.WitherSkeletonSkull; - mappings[705] = ItemType.PlayerHead; - mappings[706] = ItemType.ZombieHead; - mappings[707] = ItemType.CreeperHead; - mappings[708] = ItemType.DragonHead; - mappings[709] = ItemType.CarrotOnAStick; - mappings[710] = ItemType.NetherStar; - mappings[711] = ItemType.PumpkinPie; - mappings[712] = ItemType.FireworkRocket; - mappings[713] = ItemType.FireworkStar; - mappings[714] = ItemType.EnchantedBook; - mappings[715] = ItemType.NetherBrick; - mappings[716] = ItemType.Quartz; - mappings[717] = ItemType.TntMinecart; - mappings[718] = ItemType.HopperMinecart; - mappings[719] = ItemType.PrismarineShard; - mappings[720] = ItemType.PrismarineCrystals; - mappings[721] = ItemType.Rabbit; - mappings[722] = ItemType.CookedRabbit; - mappings[723] = ItemType.RabbitStew; - mappings[724] = ItemType.RabbitFoot; - mappings[725] = ItemType.RabbitHide; - mappings[726] = ItemType.ArmorStand; - mappings[727] = ItemType.IronHorseArmor; - mappings[728] = ItemType.GoldenHorseArmor; - mappings[729] = ItemType.DiamondHorseArmor; - mappings[730] = ItemType.Lead; - mappings[731] = ItemType.NameTag; - mappings[732] = ItemType.CommandBlockMinecart; - mappings[733] = ItemType.Mutton; - mappings[734] = ItemType.CookedMutton; - mappings[735] = ItemType.WhiteBanner; - mappings[736] = ItemType.OrangeBanner; - mappings[737] = ItemType.MagentaBanner; - mappings[738] = ItemType.LightBlueBanner; - mappings[739] = ItemType.YellowBanner; - mappings[740] = ItemType.LimeBanner; - mappings[741] = ItemType.PinkBanner; - mappings[742] = ItemType.GrayBanner; - mappings[743] = ItemType.LightGrayBanner; - mappings[744] = ItemType.CyanBanner; - mappings[745] = ItemType.PurpleBanner; - mappings[746] = ItemType.BlueBanner; - mappings[747] = ItemType.BrownBanner; - mappings[748] = ItemType.GreenBanner; - mappings[749] = ItemType.RedBanner; - mappings[750] = ItemType.BlackBanner; - mappings[751] = ItemType.EndCrystal; - mappings[752] = ItemType.ChorusFruit; - mappings[753] = ItemType.PoppedChorusFruit; - mappings[754] = ItemType.Beetroot; - mappings[755] = ItemType.BeetrootSeeds; - mappings[756] = ItemType.BeetrootSoup; - mappings[757] = ItemType.DragonBreath; - mappings[758] = ItemType.SplashPotion; - mappings[759] = ItemType.SpectralArrow; - mappings[760] = ItemType.TippedArrow; - mappings[761] = ItemType.LingeringPotion; - mappings[762] = ItemType.Shield; - mappings[763] = ItemType.Elytra; - mappings[764] = ItemType.SpruceBoat; - mappings[765] = ItemType.BirchBoat; - mappings[766] = ItemType.JungleBoat; - mappings[767] = ItemType.AcaciaBoat; - mappings[768] = ItemType.DarkOakBoat; - mappings[769] = ItemType.TotemOfUndying; - mappings[770] = ItemType.ShulkerShell; - mappings[771] = ItemType.IronNugget; - mappings[772] = ItemType.KnowledgeBook; - mappings[773] = ItemType.DebugStick; - mappings[774] = ItemType.MusicDisc13; - mappings[775] = ItemType.MusicDiscCat; - mappings[776] = ItemType.MusicDiscBlocks; - mappings[777] = ItemType.MusicDiscChirp; - mappings[778] = ItemType.MusicDiscFar; - mappings[779] = ItemType.MusicDiscMall; - mappings[780] = ItemType.MusicDiscMellohi; - mappings[781] = ItemType.MusicDiscStal; - mappings[782] = ItemType.MusicDiscStrad; - mappings[783] = ItemType.MusicDiscWard; - mappings[784] = ItemType.MusicDisc11; - mappings[785] = ItemType.MusicDiscWait; - mappings[786] = ItemType.Trident; - mappings[787] = ItemType.PhantomMembrane; - mappings[788] = ItemType.NautilusShell; - mappings[789] = ItemType.HeartOfTheSea; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette114.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette114.cs deleted file mode 100644 index c84079dad6..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette114.cs +++ /dev/null @@ -1,895 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette114 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette114() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.GrassBlock; - mappings[9] = ItemType.Dirt; - mappings[10] = ItemType.CoarseDirt; - mappings[11] = ItemType.Podzol; - mappings[12] = ItemType.Cobblestone; - mappings[13] = ItemType.OakPlanks; - mappings[14] = ItemType.SprucePlanks; - mappings[15] = ItemType.BirchPlanks; - mappings[16] = ItemType.JunglePlanks; - mappings[17] = ItemType.AcaciaPlanks; - mappings[18] = ItemType.DarkOakPlanks; - mappings[19] = ItemType.OakSapling; - mappings[20] = ItemType.SpruceSapling; - mappings[21] = ItemType.BirchSapling; - mappings[22] = ItemType.JungleSapling; - mappings[23] = ItemType.AcaciaSapling; - mappings[24] = ItemType.DarkOakSapling; - mappings[25] = ItemType.Bedrock; - mappings[26] = ItemType.Sand; - mappings[27] = ItemType.RedSand; - mappings[28] = ItemType.Gravel; - mappings[29] = ItemType.GoldOre; - mappings[30] = ItemType.IronOre; - mappings[31] = ItemType.CoalOre; - mappings[32] = ItemType.OakLog; - mappings[33] = ItemType.SpruceLog; - mappings[34] = ItemType.BirchLog; - mappings[35] = ItemType.JungleLog; - mappings[36] = ItemType.AcaciaLog; - mappings[37] = ItemType.DarkOakLog; - mappings[38] = ItemType.StrippedOakLog; - mappings[39] = ItemType.StrippedSpruceLog; - mappings[40] = ItemType.StrippedBirchLog; - mappings[41] = ItemType.StrippedJungleLog; - mappings[42] = ItemType.StrippedAcaciaLog; - mappings[43] = ItemType.StrippedDarkOakLog; - mappings[44] = ItemType.StrippedOakWood; - mappings[45] = ItemType.StrippedSpruceWood; - mappings[46] = ItemType.StrippedBirchWood; - mappings[47] = ItemType.StrippedJungleWood; - mappings[48] = ItemType.StrippedAcaciaWood; - mappings[49] = ItemType.StrippedDarkOakWood; - mappings[50] = ItemType.OakWood; - mappings[51] = ItemType.SpruceWood; - mappings[52] = ItemType.BirchWood; - mappings[53] = ItemType.JungleWood; - mappings[54] = ItemType.AcaciaWood; - mappings[55] = ItemType.DarkOakWood; - mappings[56] = ItemType.OakLeaves; - mappings[57] = ItemType.SpruceLeaves; - mappings[58] = ItemType.BirchLeaves; - mappings[59] = ItemType.JungleLeaves; - mappings[60] = ItemType.AcaciaLeaves; - mappings[61] = ItemType.DarkOakLeaves; - mappings[62] = ItemType.Sponge; - mappings[63] = ItemType.WetSponge; - mappings[64] = ItemType.Glass; - mappings[65] = ItemType.LapisOre; - mappings[66] = ItemType.LapisBlock; - mappings[67] = ItemType.Dispenser; - mappings[68] = ItemType.Sandstone; - mappings[69] = ItemType.ChiseledSandstone; - mappings[70] = ItemType.CutSandstone; - mappings[71] = ItemType.NoteBlock; - mappings[72] = ItemType.PoweredRail; - mappings[73] = ItemType.DetectorRail; - mappings[74] = ItemType.StickyPiston; - mappings[75] = ItemType.Cobweb; - mappings[76] = ItemType.ShortGrass; - mappings[77] = ItemType.Fern; - mappings[78] = ItemType.DeadBush; - mappings[79] = ItemType.Seagrass; - mappings[80] = ItemType.SeaPickle; - mappings[81] = ItemType.Piston; - mappings[82] = ItemType.WhiteWool; - mappings[83] = ItemType.OrangeWool; - mappings[84] = ItemType.MagentaWool; - mappings[85] = ItemType.LightBlueWool; - mappings[86] = ItemType.YellowWool; - mappings[87] = ItemType.LimeWool; - mappings[88] = ItemType.PinkWool; - mappings[89] = ItemType.GrayWool; - mappings[90] = ItemType.LightGrayWool; - mappings[91] = ItemType.CyanWool; - mappings[92] = ItemType.PurpleWool; - mappings[93] = ItemType.BlueWool; - mappings[94] = ItemType.BrownWool; - mappings[95] = ItemType.GreenWool; - mappings[96] = ItemType.RedWool; - mappings[97] = ItemType.BlackWool; - mappings[98] = ItemType.Dandelion; - mappings[99] = ItemType.Poppy; - mappings[100] = ItemType.BlueOrchid; - mappings[101] = ItemType.Allium; - mappings[102] = ItemType.AzureBluet; - mappings[103] = ItemType.RedTulip; - mappings[104] = ItemType.OrangeTulip; - mappings[105] = ItemType.WhiteTulip; - mappings[106] = ItemType.PinkTulip; - mappings[107] = ItemType.OxeyeDaisy; - mappings[108] = ItemType.Cornflower; - mappings[109] = ItemType.LilyOfTheValley; - mappings[110] = ItemType.WitherRose; - mappings[111] = ItemType.BrownMushroom; - mappings[112] = ItemType.RedMushroom; - mappings[113] = ItemType.GoldBlock; - mappings[114] = ItemType.IronBlock; - mappings[115] = ItemType.OakSlab; - mappings[116] = ItemType.SpruceSlab; - mappings[117] = ItemType.BirchSlab; - mappings[118] = ItemType.JungleSlab; - mappings[119] = ItemType.AcaciaSlab; - mappings[120] = ItemType.DarkOakSlab; - mappings[121] = ItemType.StoneSlab; - mappings[122] = ItemType.SmoothStoneSlab; - mappings[123] = ItemType.SandstoneSlab; - mappings[124] = ItemType.CutSandstoneSlab; - mappings[125] = ItemType.PetrifiedOakSlab; - mappings[126] = ItemType.CobblestoneSlab; - mappings[127] = ItemType.BrickSlab; - mappings[128] = ItemType.StoneBrickSlab; - mappings[129] = ItemType.NetherBrickSlab; - mappings[130] = ItemType.QuartzSlab; - mappings[131] = ItemType.RedSandstoneSlab; - mappings[132] = ItemType.CutRedSandstoneSlab; - mappings[133] = ItemType.PurpurSlab; - mappings[134] = ItemType.PrismarineSlab; - mappings[135] = ItemType.PrismarineBrickSlab; - mappings[136] = ItemType.DarkPrismarineSlab; - mappings[137] = ItemType.SmoothQuartz; - mappings[138] = ItemType.SmoothRedSandstone; - mappings[139] = ItemType.SmoothSandstone; - mappings[140] = ItemType.SmoothStone; - mappings[141] = ItemType.Bricks; - mappings[142] = ItemType.Tnt; - mappings[143] = ItemType.Bookshelf; - mappings[144] = ItemType.MossyCobblestone; - mappings[145] = ItemType.Obsidian; - mappings[146] = ItemType.Torch; - mappings[147] = ItemType.EndRod; - mappings[148] = ItemType.ChorusPlant; - mappings[149] = ItemType.ChorusFlower; - mappings[150] = ItemType.PurpurBlock; - mappings[151] = ItemType.PurpurPillar; - mappings[152] = ItemType.PurpurStairs; - mappings[153] = ItemType.Spawner; - mappings[154] = ItemType.OakStairs; - mappings[155] = ItemType.Chest; - mappings[156] = ItemType.DiamondOre; - mappings[157] = ItemType.DiamondBlock; - mappings[158] = ItemType.CraftingTable; - mappings[159] = ItemType.Farmland; - mappings[160] = ItemType.Furnace; - mappings[161] = ItemType.Ladder; - mappings[162] = ItemType.Rail; - mappings[163] = ItemType.CobblestoneStairs; - mappings[164] = ItemType.Lever; - mappings[165] = ItemType.StonePressurePlate; - mappings[166] = ItemType.OakPressurePlate; - mappings[167] = ItemType.SprucePressurePlate; - mappings[168] = ItemType.BirchPressurePlate; - mappings[169] = ItemType.JunglePressurePlate; - mappings[170] = ItemType.AcaciaPressurePlate; - mappings[171] = ItemType.DarkOakPressurePlate; - mappings[172] = ItemType.RedstoneOre; - mappings[173] = ItemType.RedstoneTorch; - mappings[174] = ItemType.StoneButton; - mappings[175] = ItemType.Snow; - mappings[176] = ItemType.Ice; - mappings[177] = ItemType.SnowBlock; - mappings[178] = ItemType.Cactus; - mappings[179] = ItemType.Clay; - mappings[180] = ItemType.Jukebox; - mappings[181] = ItemType.OakFence; - mappings[182] = ItemType.SpruceFence; - mappings[183] = ItemType.BirchFence; - mappings[184] = ItemType.JungleFence; - mappings[185] = ItemType.AcaciaFence; - mappings[186] = ItemType.DarkOakFence; - mappings[187] = ItemType.Pumpkin; - mappings[188] = ItemType.CarvedPumpkin; - mappings[189] = ItemType.Netherrack; - mappings[190] = ItemType.SoulSand; - mappings[191] = ItemType.Glowstone; - mappings[192] = ItemType.JackOLantern; - mappings[193] = ItemType.OakTrapdoor; - mappings[194] = ItemType.SpruceTrapdoor; - mappings[195] = ItemType.BirchTrapdoor; - mappings[196] = ItemType.JungleTrapdoor; - mappings[197] = ItemType.AcaciaTrapdoor; - mappings[198] = ItemType.DarkOakTrapdoor; - mappings[199] = ItemType.InfestedStone; - mappings[200] = ItemType.InfestedCobblestone; - mappings[201] = ItemType.InfestedStoneBricks; - mappings[202] = ItemType.InfestedMossyStoneBricks; - mappings[203] = ItemType.InfestedCrackedStoneBricks; - mappings[204] = ItemType.InfestedChiseledStoneBricks; - mappings[205] = ItemType.StoneBricks; - mappings[206] = ItemType.MossyStoneBricks; - mappings[207] = ItemType.CrackedStoneBricks; - mappings[208] = ItemType.ChiseledStoneBricks; - mappings[209] = ItemType.BrownMushroomBlock; - mappings[210] = ItemType.RedMushroomBlock; - mappings[211] = ItemType.MushroomStem; - mappings[212] = ItemType.IronBars; - mappings[213] = ItemType.GlassPane; - mappings[214] = ItemType.Melon; - mappings[215] = ItemType.Vine; - mappings[216] = ItemType.OakFenceGate; - mappings[217] = ItemType.SpruceFenceGate; - mappings[218] = ItemType.BirchFenceGate; - mappings[219] = ItemType.JungleFenceGate; - mappings[220] = ItemType.AcaciaFenceGate; - mappings[221] = ItemType.DarkOakFenceGate; - mappings[222] = ItemType.BrickStairs; - mappings[223] = ItemType.StoneBrickStairs; - mappings[224] = ItemType.Mycelium; - mappings[225] = ItemType.LilyPad; - mappings[226] = ItemType.NetherBricks; - mappings[227] = ItemType.NetherBrickFence; - mappings[228] = ItemType.NetherBrickStairs; - mappings[229] = ItemType.EnchantingTable; - mappings[230] = ItemType.EndPortalFrame; - mappings[231] = ItemType.EndStone; - mappings[232] = ItemType.EndStoneBricks; - mappings[233] = ItemType.DragonEgg; - mappings[234] = ItemType.RedstoneLamp; - mappings[235] = ItemType.SandstoneStairs; - mappings[236] = ItemType.EmeraldOre; - mappings[237] = ItemType.EnderChest; - mappings[238] = ItemType.TripwireHook; - mappings[239] = ItemType.EmeraldBlock; - mappings[240] = ItemType.SpruceStairs; - mappings[241] = ItemType.BirchStairs; - mappings[242] = ItemType.JungleStairs; - mappings[243] = ItemType.CommandBlock; - mappings[244] = ItemType.Beacon; - mappings[245] = ItemType.CobblestoneWall; - mappings[246] = ItemType.MossyCobblestoneWall; - mappings[247] = ItemType.BrickWall; - mappings[248] = ItemType.PrismarineWall; - mappings[249] = ItemType.RedSandstoneWall; - mappings[250] = ItemType.MossyStoneBrickWall; - mappings[251] = ItemType.GraniteWall; - mappings[252] = ItemType.StoneBrickWall; - mappings[253] = ItemType.NetherBrickWall; - mappings[254] = ItemType.AndesiteWall; - mappings[255] = ItemType.RedNetherBrickWall; - mappings[256] = ItemType.SandstoneWall; - mappings[257] = ItemType.EndStoneBrickWall; - mappings[258] = ItemType.DioriteWall; - mappings[259] = ItemType.OakButton; - mappings[260] = ItemType.SpruceButton; - mappings[261] = ItemType.BirchButton; - mappings[262] = ItemType.JungleButton; - mappings[263] = ItemType.AcaciaButton; - mappings[264] = ItemType.DarkOakButton; - mappings[265] = ItemType.Anvil; - mappings[266] = ItemType.ChippedAnvil; - mappings[267] = ItemType.DamagedAnvil; - mappings[268] = ItemType.TrappedChest; - mappings[269] = ItemType.LightWeightedPressurePlate; - mappings[270] = ItemType.HeavyWeightedPressurePlate; - mappings[271] = ItemType.DaylightDetector; - mappings[272] = ItemType.RedstoneBlock; - mappings[273] = ItemType.NetherQuartzOre; - mappings[274] = ItemType.Hopper; - mappings[275] = ItemType.ChiseledQuartzBlock; - mappings[276] = ItemType.QuartzBlock; - mappings[277] = ItemType.QuartzPillar; - mappings[278] = ItemType.QuartzStairs; - mappings[279] = ItemType.ActivatorRail; - mappings[280] = ItemType.Dropper; - mappings[281] = ItemType.WhiteTerracotta; - mappings[282] = ItemType.OrangeTerracotta; - mappings[283] = ItemType.MagentaTerracotta; - mappings[284] = ItemType.LightBlueTerracotta; - mappings[285] = ItemType.YellowTerracotta; - mappings[286] = ItemType.LimeTerracotta; - mappings[287] = ItemType.PinkTerracotta; - mappings[288] = ItemType.GrayTerracotta; - mappings[289] = ItemType.LightGrayTerracotta; - mappings[290] = ItemType.CyanTerracotta; - mappings[291] = ItemType.PurpleTerracotta; - mappings[292] = ItemType.BlueTerracotta; - mappings[293] = ItemType.BrownTerracotta; - mappings[294] = ItemType.GreenTerracotta; - mappings[295] = ItemType.RedTerracotta; - mappings[296] = ItemType.BlackTerracotta; - mappings[297] = ItemType.Barrier; - mappings[298] = ItemType.IronTrapdoor; - mappings[299] = ItemType.HayBlock; - mappings[300] = ItemType.WhiteCarpet; - mappings[301] = ItemType.OrangeCarpet; - mappings[302] = ItemType.MagentaCarpet; - mappings[303] = ItemType.LightBlueCarpet; - mappings[304] = ItemType.YellowCarpet; - mappings[305] = ItemType.LimeCarpet; - mappings[306] = ItemType.PinkCarpet; - mappings[307] = ItemType.GrayCarpet; - mappings[308] = ItemType.LightGrayCarpet; - mappings[309] = ItemType.CyanCarpet; - mappings[310] = ItemType.PurpleCarpet; - mappings[311] = ItemType.BlueCarpet; - mappings[312] = ItemType.BrownCarpet; - mappings[313] = ItemType.GreenCarpet; - mappings[314] = ItemType.RedCarpet; - mappings[315] = ItemType.BlackCarpet; - mappings[316] = ItemType.Terracotta; - mappings[317] = ItemType.CoalBlock; - mappings[318] = ItemType.PackedIce; - mappings[319] = ItemType.AcaciaStairs; - mappings[320] = ItemType.DarkOakStairs; - mappings[321] = ItemType.SlimeBlock; - mappings[322] = ItemType.DirtPath; - mappings[323] = ItemType.Sunflower; - mappings[324] = ItemType.Lilac; - mappings[325] = ItemType.RoseBush; - mappings[326] = ItemType.Peony; - mappings[327] = ItemType.TallGrass; - mappings[328] = ItemType.LargeFern; - mappings[329] = ItemType.WhiteStainedGlass; - mappings[330] = ItemType.OrangeStainedGlass; - mappings[331] = ItemType.MagentaStainedGlass; - mappings[332] = ItemType.LightBlueStainedGlass; - mappings[333] = ItemType.YellowStainedGlass; - mappings[334] = ItemType.LimeStainedGlass; - mappings[335] = ItemType.PinkStainedGlass; - mappings[336] = ItemType.GrayStainedGlass; - mappings[337] = ItemType.LightGrayStainedGlass; - mappings[338] = ItemType.CyanStainedGlass; - mappings[339] = ItemType.PurpleStainedGlass; - mappings[340] = ItemType.BlueStainedGlass; - mappings[341] = ItemType.BrownStainedGlass; - mappings[342] = ItemType.GreenStainedGlass; - mappings[343] = ItemType.RedStainedGlass; - mappings[344] = ItemType.BlackStainedGlass; - mappings[345] = ItemType.WhiteStainedGlassPane; - mappings[346] = ItemType.OrangeStainedGlassPane; - mappings[347] = ItemType.MagentaStainedGlassPane; - mappings[348] = ItemType.LightBlueStainedGlassPane; - mappings[349] = ItemType.YellowStainedGlassPane; - mappings[350] = ItemType.LimeStainedGlassPane; - mappings[351] = ItemType.PinkStainedGlassPane; - mappings[352] = ItemType.GrayStainedGlassPane; - mappings[353] = ItemType.LightGrayStainedGlassPane; - mappings[354] = ItemType.CyanStainedGlassPane; - mappings[355] = ItemType.PurpleStainedGlassPane; - mappings[356] = ItemType.BlueStainedGlassPane; - mappings[357] = ItemType.BrownStainedGlassPane; - mappings[358] = ItemType.GreenStainedGlassPane; - mappings[359] = ItemType.RedStainedGlassPane; - mappings[360] = ItemType.BlackStainedGlassPane; - mappings[361] = ItemType.Prismarine; - mappings[362] = ItemType.PrismarineBricks; - mappings[363] = ItemType.DarkPrismarine; - mappings[364] = ItemType.PrismarineStairs; - mappings[365] = ItemType.PrismarineBrickStairs; - mappings[366] = ItemType.DarkPrismarineStairs; - mappings[367] = ItemType.SeaLantern; - mappings[368] = ItemType.RedSandstone; - mappings[369] = ItemType.ChiseledRedSandstone; - mappings[370] = ItemType.CutRedSandstone; - mappings[371] = ItemType.RedSandstoneStairs; - mappings[372] = ItemType.RepeatingCommandBlock; - mappings[373] = ItemType.ChainCommandBlock; - mappings[374] = ItemType.MagmaBlock; - mappings[375] = ItemType.NetherWartBlock; - mappings[376] = ItemType.RedNetherBricks; - mappings[377] = ItemType.BoneBlock; - mappings[378] = ItemType.StructureVoid; - mappings[379] = ItemType.Observer; - mappings[380] = ItemType.ShulkerBox; - mappings[381] = ItemType.WhiteShulkerBox; - mappings[382] = ItemType.OrangeShulkerBox; - mappings[383] = ItemType.MagentaShulkerBox; - mappings[384] = ItemType.LightBlueShulkerBox; - mappings[385] = ItemType.YellowShulkerBox; - mappings[386] = ItemType.LimeShulkerBox; - mappings[387] = ItemType.PinkShulkerBox; - mappings[388] = ItemType.GrayShulkerBox; - mappings[389] = ItemType.LightGrayShulkerBox; - mappings[390] = ItemType.CyanShulkerBox; - mappings[391] = ItemType.PurpleShulkerBox; - mappings[392] = ItemType.BlueShulkerBox; - mappings[393] = ItemType.BrownShulkerBox; - mappings[394] = ItemType.GreenShulkerBox; - mappings[395] = ItemType.RedShulkerBox; - mappings[396] = ItemType.BlackShulkerBox; - mappings[397] = ItemType.WhiteGlazedTerracotta; - mappings[398] = ItemType.OrangeGlazedTerracotta; - mappings[399] = ItemType.MagentaGlazedTerracotta; - mappings[400] = ItemType.LightBlueGlazedTerracotta; - mappings[401] = ItemType.YellowGlazedTerracotta; - mappings[402] = ItemType.LimeGlazedTerracotta; - mappings[403] = ItemType.PinkGlazedTerracotta; - mappings[404] = ItemType.GrayGlazedTerracotta; - mappings[405] = ItemType.LightGrayGlazedTerracotta; - mappings[406] = ItemType.CyanGlazedTerracotta; - mappings[407] = ItemType.PurpleGlazedTerracotta; - mappings[408] = ItemType.BlueGlazedTerracotta; - mappings[409] = ItemType.BrownGlazedTerracotta; - mappings[410] = ItemType.GreenGlazedTerracotta; - mappings[411] = ItemType.RedGlazedTerracotta; - mappings[412] = ItemType.BlackGlazedTerracotta; - mappings[413] = ItemType.WhiteConcrete; - mappings[414] = ItemType.OrangeConcrete; - mappings[415] = ItemType.MagentaConcrete; - mappings[416] = ItemType.LightBlueConcrete; - mappings[417] = ItemType.YellowConcrete; - mappings[418] = ItemType.LimeConcrete; - mappings[419] = ItemType.PinkConcrete; - mappings[420] = ItemType.GrayConcrete; - mappings[421] = ItemType.LightGrayConcrete; - mappings[422] = ItemType.CyanConcrete; - mappings[423] = ItemType.PurpleConcrete; - mappings[424] = ItemType.BlueConcrete; - mappings[425] = ItemType.BrownConcrete; - mappings[426] = ItemType.GreenConcrete; - mappings[427] = ItemType.RedConcrete; - mappings[428] = ItemType.BlackConcrete; - mappings[429] = ItemType.WhiteConcretePowder; - mappings[430] = ItemType.OrangeConcretePowder; - mappings[431] = ItemType.MagentaConcretePowder; - mappings[432] = ItemType.LightBlueConcretePowder; - mappings[433] = ItemType.YellowConcretePowder; - mappings[434] = ItemType.LimeConcretePowder; - mappings[435] = ItemType.PinkConcretePowder; - mappings[436] = ItemType.GrayConcretePowder; - mappings[437] = ItemType.LightGrayConcretePowder; - mappings[438] = ItemType.CyanConcretePowder; - mappings[439] = ItemType.PurpleConcretePowder; - mappings[440] = ItemType.BlueConcretePowder; - mappings[441] = ItemType.BrownConcretePowder; - mappings[442] = ItemType.GreenConcretePowder; - mappings[443] = ItemType.RedConcretePowder; - mappings[444] = ItemType.BlackConcretePowder; - mappings[445] = ItemType.TurtleEgg; - mappings[446] = ItemType.DeadTubeCoralBlock; - mappings[447] = ItemType.DeadBrainCoralBlock; - mappings[448] = ItemType.DeadBubbleCoralBlock; - mappings[449] = ItemType.DeadFireCoralBlock; - mappings[450] = ItemType.DeadHornCoralBlock; - mappings[451] = ItemType.TubeCoralBlock; - mappings[452] = ItemType.BrainCoralBlock; - mappings[453] = ItemType.BubbleCoralBlock; - mappings[454] = ItemType.FireCoralBlock; - mappings[455] = ItemType.HornCoralBlock; - mappings[456] = ItemType.TubeCoral; - mappings[457] = ItemType.BrainCoral; - mappings[458] = ItemType.BubbleCoral; - mappings[459] = ItemType.FireCoral; - mappings[460] = ItemType.HornCoral; - mappings[461] = ItemType.DeadBrainCoral; - mappings[462] = ItemType.DeadBubbleCoral; - mappings[463] = ItemType.DeadFireCoral; - mappings[464] = ItemType.DeadHornCoral; - mappings[465] = ItemType.DeadTubeCoral; - mappings[466] = ItemType.TubeCoralFan; - mappings[467] = ItemType.BrainCoralFan; - mappings[468] = ItemType.BubbleCoralFan; - mappings[469] = ItemType.FireCoralFan; - mappings[470] = ItemType.HornCoralFan; - mappings[471] = ItemType.DeadTubeCoralFan; - mappings[472] = ItemType.DeadBrainCoralFan; - mappings[473] = ItemType.DeadBubbleCoralFan; - mappings[474] = ItemType.DeadFireCoralFan; - mappings[475] = ItemType.DeadHornCoralFan; - mappings[476] = ItemType.BlueIce; - mappings[477] = ItemType.Conduit; - mappings[478] = ItemType.PolishedGraniteStairs; - mappings[479] = ItemType.SmoothRedSandstoneStairs; - mappings[480] = ItemType.MossyStoneBrickStairs; - mappings[481] = ItemType.PolishedDioriteStairs; - mappings[482] = ItemType.MossyCobblestoneStairs; - mappings[483] = ItemType.EndStoneBrickStairs; - mappings[484] = ItemType.StoneStairs; - mappings[485] = ItemType.SmoothSandstoneStairs; - mappings[486] = ItemType.SmoothQuartzStairs; - mappings[487] = ItemType.GraniteStairs; - mappings[488] = ItemType.AndesiteStairs; - mappings[489] = ItemType.RedNetherBrickStairs; - mappings[490] = ItemType.PolishedAndesiteStairs; - mappings[491] = ItemType.DioriteStairs; - mappings[492] = ItemType.PolishedGraniteSlab; - mappings[493] = ItemType.SmoothRedSandstoneSlab; - mappings[494] = ItemType.MossyStoneBrickSlab; - mappings[495] = ItemType.PolishedDioriteSlab; - mappings[496] = ItemType.MossyCobblestoneSlab; - mappings[497] = ItemType.EndStoneBrickSlab; - mappings[498] = ItemType.SmoothSandstoneSlab; - mappings[499] = ItemType.SmoothQuartzSlab; - mappings[500] = ItemType.GraniteSlab; - mappings[501] = ItemType.AndesiteSlab; - mappings[502] = ItemType.RedNetherBrickSlab; - mappings[503] = ItemType.PolishedAndesiteSlab; - mappings[504] = ItemType.DioriteSlab; - mappings[505] = ItemType.Scaffolding; - mappings[506] = ItemType.IronDoor; - mappings[507] = ItemType.OakDoor; - mappings[508] = ItemType.SpruceDoor; - mappings[509] = ItemType.BirchDoor; - mappings[510] = ItemType.JungleDoor; - mappings[511] = ItemType.AcaciaDoor; - mappings[512] = ItemType.DarkOakDoor; - mappings[513] = ItemType.Repeater; - mappings[514] = ItemType.Comparator; - mappings[515] = ItemType.StructureBlock; - mappings[516] = ItemType.Jigsaw; - mappings[517] = ItemType.Composter; - mappings[518] = ItemType.TurtleHelmet; - mappings[519] = ItemType.TurtleScute; - mappings[520] = ItemType.IronShovel; - mappings[521] = ItemType.IronPickaxe; - mappings[522] = ItemType.IronAxe; - mappings[523] = ItemType.FlintAndSteel; - mappings[524] = ItemType.Apple; - mappings[525] = ItemType.Bow; - mappings[526] = ItemType.Arrow; - mappings[527] = ItemType.Coal; - mappings[528] = ItemType.Charcoal; - mappings[529] = ItemType.Diamond; - mappings[530] = ItemType.IronIngot; - mappings[531] = ItemType.GoldIngot; - mappings[532] = ItemType.IronSword; - mappings[533] = ItemType.WoodenSword; - mappings[534] = ItemType.WoodenShovel; - mappings[535] = ItemType.WoodenPickaxe; - mappings[536] = ItemType.WoodenAxe; - mappings[537] = ItemType.StoneSword; - mappings[538] = ItemType.StoneShovel; - mappings[539] = ItemType.StonePickaxe; - mappings[540] = ItemType.StoneAxe; - mappings[541] = ItemType.DiamondSword; - mappings[542] = ItemType.DiamondShovel; - mappings[543] = ItemType.DiamondPickaxe; - mappings[544] = ItemType.DiamondAxe; - mappings[545] = ItemType.Stick; - mappings[546] = ItemType.Bowl; - mappings[547] = ItemType.MushroomStew; - mappings[548] = ItemType.GoldenSword; - mappings[549] = ItemType.GoldenShovel; - mappings[550] = ItemType.GoldenPickaxe; - mappings[551] = ItemType.GoldenAxe; - mappings[552] = ItemType.String; - mappings[553] = ItemType.Feather; - mappings[554] = ItemType.Gunpowder; - mappings[555] = ItemType.WoodenHoe; - mappings[556] = ItemType.StoneHoe; - mappings[557] = ItemType.IronHoe; - mappings[558] = ItemType.DiamondHoe; - mappings[559] = ItemType.GoldenHoe; - mappings[560] = ItemType.WheatSeeds; - mappings[561] = ItemType.Wheat; - mappings[562] = ItemType.Bread; - mappings[563] = ItemType.LeatherHelmet; - mappings[564] = ItemType.LeatherChestplate; - mappings[565] = ItemType.LeatherLeggings; - mappings[566] = ItemType.LeatherBoots; - mappings[567] = ItemType.ChainmailHelmet; - mappings[568] = ItemType.ChainmailChestplate; - mappings[569] = ItemType.ChainmailLeggings; - mappings[570] = ItemType.ChainmailBoots; - mappings[571] = ItemType.IronHelmet; - mappings[572] = ItemType.IronChestplate; - mappings[573] = ItemType.IronLeggings; - mappings[574] = ItemType.IronBoots; - mappings[575] = ItemType.DiamondHelmet; - mappings[576] = ItemType.DiamondChestplate; - mappings[577] = ItemType.DiamondLeggings; - mappings[578] = ItemType.DiamondBoots; - mappings[579] = ItemType.GoldenHelmet; - mappings[580] = ItemType.GoldenChestplate; - mappings[581] = ItemType.GoldenLeggings; - mappings[582] = ItemType.GoldenBoots; - mappings[583] = ItemType.Flint; - mappings[584] = ItemType.Porkchop; - mappings[585] = ItemType.CookedPorkchop; - mappings[586] = ItemType.Painting; - mappings[587] = ItemType.GoldenApple; - mappings[588] = ItemType.EnchantedGoldenApple; - mappings[589] = ItemType.OakSign; - mappings[590] = ItemType.SpruceSign; - mappings[591] = ItemType.BirchSign; - mappings[592] = ItemType.JungleSign; - mappings[593] = ItemType.AcaciaSign; - mappings[594] = ItemType.DarkOakSign; - mappings[595] = ItemType.Bucket; - mappings[596] = ItemType.WaterBucket; - mappings[597] = ItemType.LavaBucket; - mappings[598] = ItemType.Minecart; - mappings[599] = ItemType.Saddle; - mappings[600] = ItemType.Redstone; - mappings[601] = ItemType.Snowball; - mappings[602] = ItemType.OakBoat; - mappings[603] = ItemType.Leather; - mappings[604] = ItemType.MilkBucket; - mappings[605] = ItemType.PufferfishBucket; - mappings[606] = ItemType.SalmonBucket; - mappings[607] = ItemType.CodBucket; - mappings[608] = ItemType.TropicalFishBucket; - mappings[609] = ItemType.Brick; - mappings[610] = ItemType.ClayBall; - mappings[611] = ItemType.SugarCane; - mappings[612] = ItemType.Kelp; - mappings[613] = ItemType.DriedKelpBlock; - mappings[614] = ItemType.Bamboo; - mappings[615] = ItemType.Paper; - mappings[616] = ItemType.Book; - mappings[617] = ItemType.SlimeBall; - mappings[618] = ItemType.ChestMinecart; - mappings[619] = ItemType.FurnaceMinecart; - mappings[620] = ItemType.Egg; - mappings[621] = ItemType.Compass; - mappings[622] = ItemType.FishingRod; - mappings[623] = ItemType.Clock; - mappings[624] = ItemType.GlowstoneDust; - mappings[625] = ItemType.Cod; - mappings[626] = ItemType.Salmon; - mappings[627] = ItemType.TropicalFish; - mappings[628] = ItemType.Pufferfish; - mappings[629] = ItemType.CookedCod; - mappings[630] = ItemType.CookedSalmon; - mappings[631] = ItemType.InkSac; - mappings[632] = ItemType.RedDye; - mappings[633] = ItemType.GreenDye; - mappings[634] = ItemType.CocoaBeans; - mappings[635] = ItemType.LapisLazuli; - mappings[636] = ItemType.PurpleDye; - mappings[637] = ItemType.CyanDye; - mappings[638] = ItemType.LightGrayDye; - mappings[639] = ItemType.GrayDye; - mappings[640] = ItemType.PinkDye; - mappings[641] = ItemType.LimeDye; - mappings[642] = ItemType.YellowDye; - mappings[643] = ItemType.LightBlueDye; - mappings[644] = ItemType.MagentaDye; - mappings[645] = ItemType.OrangeDye; - mappings[646] = ItemType.BoneMeal; - mappings[647] = ItemType.BlueDye; - mappings[648] = ItemType.BrownDye; - mappings[649] = ItemType.BlackDye; - mappings[650] = ItemType.WhiteDye; - mappings[651] = ItemType.Bone; - mappings[652] = ItemType.Sugar; - mappings[653] = ItemType.Cake; - mappings[654] = ItemType.WhiteBed; - mappings[655] = ItemType.OrangeBed; - mappings[656] = ItemType.MagentaBed; - mappings[657] = ItemType.LightBlueBed; - mappings[658] = ItemType.YellowBed; - mappings[659] = ItemType.LimeBed; - mappings[660] = ItemType.PinkBed; - mappings[661] = ItemType.GrayBed; - mappings[662] = ItemType.LightGrayBed; - mappings[663] = ItemType.CyanBed; - mappings[664] = ItemType.PurpleBed; - mappings[665] = ItemType.BlueBed; - mappings[666] = ItemType.BrownBed; - mappings[667] = ItemType.GreenBed; - mappings[668] = ItemType.RedBed; - mappings[669] = ItemType.BlackBed; - mappings[670] = ItemType.Cookie; - mappings[671] = ItemType.FilledMap; - mappings[672] = ItemType.Shears; - mappings[673] = ItemType.MelonSlice; - mappings[674] = ItemType.DriedKelp; - mappings[675] = ItemType.PumpkinSeeds; - mappings[676] = ItemType.MelonSeeds; - mappings[677] = ItemType.Beef; - mappings[678] = ItemType.CookedBeef; - mappings[679] = ItemType.Chicken; - mappings[680] = ItemType.CookedChicken; - mappings[681] = ItemType.RottenFlesh; - mappings[682] = ItemType.EnderPearl; - mappings[683] = ItemType.BlazeRod; - mappings[684] = ItemType.GhastTear; - mappings[685] = ItemType.GoldNugget; - mappings[686] = ItemType.NetherWart; - mappings[687] = ItemType.Potion; - mappings[688] = ItemType.GlassBottle; - mappings[689] = ItemType.SpiderEye; - mappings[690] = ItemType.FermentedSpiderEye; - mappings[691] = ItemType.BlazePowder; - mappings[692] = ItemType.MagmaCream; - mappings[693] = ItemType.BrewingStand; - mappings[694] = ItemType.Cauldron; - mappings[695] = ItemType.EnderEye; - mappings[696] = ItemType.GlisteringMelonSlice; - mappings[697] = ItemType.BatSpawnEgg; - mappings[698] = ItemType.BlazeSpawnEgg; - mappings[699] = ItemType.CatSpawnEgg; - mappings[700] = ItemType.CaveSpiderSpawnEgg; - mappings[701] = ItemType.ChickenSpawnEgg; - mappings[702] = ItemType.CodSpawnEgg; - mappings[703] = ItemType.CowSpawnEgg; - mappings[704] = ItemType.CreeperSpawnEgg; - mappings[705] = ItemType.DolphinSpawnEgg; - mappings[706] = ItemType.DonkeySpawnEgg; - mappings[707] = ItemType.DrownedSpawnEgg; - mappings[708] = ItemType.ElderGuardianSpawnEgg; - mappings[709] = ItemType.EndermanSpawnEgg; - mappings[710] = ItemType.EndermiteSpawnEgg; - mappings[711] = ItemType.EvokerSpawnEgg; - mappings[712] = ItemType.FoxSpawnEgg; - mappings[713] = ItemType.GhastSpawnEgg; - mappings[714] = ItemType.GuardianSpawnEgg; - mappings[715] = ItemType.HorseSpawnEgg; - mappings[716] = ItemType.HuskSpawnEgg; - mappings[717] = ItemType.LlamaSpawnEgg; - mappings[718] = ItemType.MagmaCubeSpawnEgg; - mappings[719] = ItemType.MooshroomSpawnEgg; - mappings[720] = ItemType.MuleSpawnEgg; - mappings[721] = ItemType.OcelotSpawnEgg; - mappings[722] = ItemType.PandaSpawnEgg; - mappings[723] = ItemType.ParrotSpawnEgg; - mappings[724] = ItemType.PhantomSpawnEgg; - mappings[725] = ItemType.PigSpawnEgg; - mappings[726] = ItemType.PillagerSpawnEgg; - mappings[727] = ItemType.PolarBearSpawnEgg; - mappings[728] = ItemType.PufferfishSpawnEgg; - mappings[729] = ItemType.RabbitSpawnEgg; - mappings[730] = ItemType.RavagerSpawnEgg; - mappings[731] = ItemType.SalmonSpawnEgg; - mappings[732] = ItemType.SheepSpawnEgg; - mappings[733] = ItemType.ShulkerSpawnEgg; - mappings[734] = ItemType.SilverfishSpawnEgg; - mappings[735] = ItemType.SkeletonSpawnEgg; - mappings[736] = ItemType.SkeletonHorseSpawnEgg; - mappings[737] = ItemType.SlimeSpawnEgg; - mappings[738] = ItemType.SpiderSpawnEgg; - mappings[739] = ItemType.SquidSpawnEgg; - mappings[740] = ItemType.StraySpawnEgg; - mappings[741] = ItemType.TraderLlamaSpawnEgg; - mappings[742] = ItemType.TropicalFishSpawnEgg; - mappings[743] = ItemType.TurtleSpawnEgg; - mappings[744] = ItemType.VexSpawnEgg; - mappings[745] = ItemType.VillagerSpawnEgg; - mappings[746] = ItemType.VindicatorSpawnEgg; - mappings[747] = ItemType.WanderingTraderSpawnEgg; - mappings[748] = ItemType.WitchSpawnEgg; - mappings[749] = ItemType.WitherSkeletonSpawnEgg; - mappings[750] = ItemType.WolfSpawnEgg; - mappings[751] = ItemType.ZombieSpawnEgg; - mappings[752] = ItemType.ZombieHorseSpawnEgg; - mappings[753] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[754] = ItemType.ZombieVillagerSpawnEgg; - mappings[755] = ItemType.ExperienceBottle; - mappings[756] = ItemType.FireCharge; - mappings[757] = ItemType.WritableBook; - mappings[758] = ItemType.WrittenBook; - mappings[759] = ItemType.Emerald; - mappings[760] = ItemType.ItemFrame; - mappings[761] = ItemType.FlowerPot; - mappings[762] = ItemType.Carrot; - mappings[763] = ItemType.Potato; - mappings[764] = ItemType.BakedPotato; - mappings[765] = ItemType.PoisonousPotato; - mappings[766] = ItemType.Map; - mappings[767] = ItemType.GoldenCarrot; - mappings[768] = ItemType.SkeletonSkull; - mappings[769] = ItemType.WitherSkeletonSkull; - mappings[770] = ItemType.PlayerHead; - mappings[771] = ItemType.ZombieHead; - mappings[772] = ItemType.CreeperHead; - mappings[773] = ItemType.DragonHead; - mappings[774] = ItemType.CarrotOnAStick; - mappings[775] = ItemType.NetherStar; - mappings[776] = ItemType.PumpkinPie; - mappings[777] = ItemType.FireworkRocket; - mappings[778] = ItemType.FireworkStar; - mappings[779] = ItemType.EnchantedBook; - mappings[780] = ItemType.NetherBrick; - mappings[781] = ItemType.Quartz; - mappings[782] = ItemType.TntMinecart; - mappings[783] = ItemType.HopperMinecart; - mappings[784] = ItemType.PrismarineShard; - mappings[785] = ItemType.PrismarineCrystals; - mappings[786] = ItemType.Rabbit; - mappings[787] = ItemType.CookedRabbit; - mappings[788] = ItemType.RabbitStew; - mappings[789] = ItemType.RabbitFoot; - mappings[790] = ItemType.RabbitHide; - mappings[791] = ItemType.ArmorStand; - mappings[792] = ItemType.IronHorseArmor; - mappings[793] = ItemType.GoldenHorseArmor; - mappings[794] = ItemType.DiamondHorseArmor; - mappings[795] = ItemType.LeatherHorseArmor; - mappings[796] = ItemType.Lead; - mappings[797] = ItemType.NameTag; - mappings[798] = ItemType.CommandBlockMinecart; - mappings[799] = ItemType.Mutton; - mappings[800] = ItemType.CookedMutton; - mappings[801] = ItemType.WhiteBanner; - mappings[802] = ItemType.OrangeBanner; - mappings[803] = ItemType.MagentaBanner; - mappings[804] = ItemType.LightBlueBanner; - mappings[805] = ItemType.YellowBanner; - mappings[806] = ItemType.LimeBanner; - mappings[807] = ItemType.PinkBanner; - mappings[808] = ItemType.GrayBanner; - mappings[809] = ItemType.LightGrayBanner; - mappings[810] = ItemType.CyanBanner; - mappings[811] = ItemType.PurpleBanner; - mappings[812] = ItemType.BlueBanner; - mappings[813] = ItemType.BrownBanner; - mappings[814] = ItemType.GreenBanner; - mappings[815] = ItemType.RedBanner; - mappings[816] = ItemType.BlackBanner; - mappings[817] = ItemType.EndCrystal; - mappings[818] = ItemType.ChorusFruit; - mappings[819] = ItemType.PoppedChorusFruit; - mappings[820] = ItemType.Beetroot; - mappings[821] = ItemType.BeetrootSeeds; - mappings[822] = ItemType.BeetrootSoup; - mappings[823] = ItemType.DragonBreath; - mappings[824] = ItemType.SplashPotion; - mappings[825] = ItemType.SpectralArrow; - mappings[826] = ItemType.TippedArrow; - mappings[827] = ItemType.LingeringPotion; - mappings[828] = ItemType.Shield; - mappings[829] = ItemType.Elytra; - mappings[830] = ItemType.SpruceBoat; - mappings[831] = ItemType.BirchBoat; - mappings[832] = ItemType.JungleBoat; - mappings[833] = ItemType.AcaciaBoat; - mappings[834] = ItemType.DarkOakBoat; - mappings[835] = ItemType.TotemOfUndying; - mappings[836] = ItemType.ShulkerShell; - mappings[837] = ItemType.IronNugget; - mappings[838] = ItemType.KnowledgeBook; - mappings[839] = ItemType.DebugStick; - mappings[840] = ItemType.MusicDisc13; - mappings[841] = ItemType.MusicDiscCat; - mappings[842] = ItemType.MusicDiscBlocks; - mappings[843] = ItemType.MusicDiscChirp; - mappings[844] = ItemType.MusicDiscFar; - mappings[845] = ItemType.MusicDiscMall; - mappings[846] = ItemType.MusicDiscMellohi; - mappings[847] = ItemType.MusicDiscStal; - mappings[848] = ItemType.MusicDiscStrad; - mappings[849] = ItemType.MusicDiscWard; - mappings[850] = ItemType.MusicDisc11; - mappings[851] = ItemType.MusicDiscWait; - mappings[852] = ItemType.Trident; - mappings[853] = ItemType.PhantomMembrane; - mappings[854] = ItemType.NautilusShell; - mappings[855] = ItemType.HeartOfTheSea; - mappings[856] = ItemType.Crossbow; - mappings[857] = ItemType.SuspiciousStew; - mappings[858] = ItemType.Loom; - mappings[859] = ItemType.FlowerBannerPattern; - mappings[860] = ItemType.CreeperBannerPattern; - mappings[861] = ItemType.SkullBannerPattern; - mappings[862] = ItemType.MojangBannerPattern; - mappings[863] = ItemType.GlobeBannerPattern; - mappings[864] = ItemType.Barrel; - mappings[865] = ItemType.Smoker; - mappings[866] = ItemType.BlastFurnace; - mappings[867] = ItemType.CartographyTable; - mappings[868] = ItemType.FletchingTable; - mappings[869] = ItemType.Grindstone; - mappings[870] = ItemType.Lectern; - mappings[871] = ItemType.SmithingTable; - mappings[872] = ItemType.Stonecutter; - mappings[873] = ItemType.Bell; - mappings[874] = ItemType.Lantern; - mappings[875] = ItemType.SweetBerries; - mappings[876] = ItemType.Campfire; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette115.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette115.cs deleted file mode 100644 index 35593662da..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette115.cs +++ /dev/null @@ -1,906 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - /// - /// For MC 1.15.2 or below - /// Generated by ItemPaletteGenerator.cs - /// - public class ItemPalette115 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette115() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.GrassBlock; - mappings[9] = ItemType.Dirt; - mappings[10] = ItemType.CoarseDirt; - mappings[11] = ItemType.Podzol; - mappings[12] = ItemType.Cobblestone; - mappings[13] = ItemType.OakPlanks; - mappings[14] = ItemType.SprucePlanks; - mappings[15] = ItemType.BirchPlanks; - mappings[16] = ItemType.JunglePlanks; - mappings[17] = ItemType.AcaciaPlanks; - mappings[18] = ItemType.DarkOakPlanks; - mappings[19] = ItemType.OakSapling; - mappings[20] = ItemType.SpruceSapling; - mappings[21] = ItemType.BirchSapling; - mappings[22] = ItemType.JungleSapling; - mappings[23] = ItemType.AcaciaSapling; - mappings[24] = ItemType.DarkOakSapling; - mappings[25] = ItemType.Bedrock; - mappings[26] = ItemType.Sand; - mappings[27] = ItemType.RedSand; - mappings[28] = ItemType.Gravel; - mappings[29] = ItemType.GoldOre; - mappings[30] = ItemType.IronOre; - mappings[31] = ItemType.CoalOre; - mappings[32] = ItemType.OakLog; - mappings[33] = ItemType.SpruceLog; - mappings[34] = ItemType.BirchLog; - mappings[35] = ItemType.JungleLog; - mappings[36] = ItemType.AcaciaLog; - mappings[37] = ItemType.DarkOakLog; - mappings[38] = ItemType.StrippedOakLog; - mappings[39] = ItemType.StrippedSpruceLog; - mappings[40] = ItemType.StrippedBirchLog; - mappings[41] = ItemType.StrippedJungleLog; - mappings[42] = ItemType.StrippedAcaciaLog; - mappings[43] = ItemType.StrippedDarkOakLog; - mappings[44] = ItemType.StrippedOakWood; - mappings[45] = ItemType.StrippedSpruceWood; - mappings[46] = ItemType.StrippedBirchWood; - mappings[47] = ItemType.StrippedJungleWood; - mappings[48] = ItemType.StrippedAcaciaWood; - mappings[49] = ItemType.StrippedDarkOakWood; - mappings[50] = ItemType.OakWood; - mappings[51] = ItemType.SpruceWood; - mappings[52] = ItemType.BirchWood; - mappings[53] = ItemType.JungleWood; - mappings[54] = ItemType.AcaciaWood; - mappings[55] = ItemType.DarkOakWood; - mappings[56] = ItemType.OakLeaves; - mappings[57] = ItemType.SpruceLeaves; - mappings[58] = ItemType.BirchLeaves; - mappings[59] = ItemType.JungleLeaves; - mappings[60] = ItemType.AcaciaLeaves; - mappings[61] = ItemType.DarkOakLeaves; - mappings[62] = ItemType.Sponge; - mappings[63] = ItemType.WetSponge; - mappings[64] = ItemType.Glass; - mappings[65] = ItemType.LapisOre; - mappings[66] = ItemType.LapisBlock; - mappings[67] = ItemType.Dispenser; - mappings[68] = ItemType.Sandstone; - mappings[69] = ItemType.ChiseledSandstone; - mappings[70] = ItemType.CutSandstone; - mappings[71] = ItemType.NoteBlock; - mappings[72] = ItemType.PoweredRail; - mappings[73] = ItemType.DetectorRail; - mappings[74] = ItemType.StickyPiston; - mappings[75] = ItemType.Cobweb; - mappings[76] = ItemType.ShortGrass; - mappings[77] = ItemType.Fern; - mappings[78] = ItemType.DeadBush; - mappings[79] = ItemType.Seagrass; - mappings[80] = ItemType.SeaPickle; - mappings[81] = ItemType.Piston; - mappings[82] = ItemType.WhiteWool; - mappings[83] = ItemType.OrangeWool; - mappings[84] = ItemType.MagentaWool; - mappings[85] = ItemType.LightBlueWool; - mappings[86] = ItemType.YellowWool; - mappings[87] = ItemType.LimeWool; - mappings[88] = ItemType.PinkWool; - mappings[89] = ItemType.GrayWool; - mappings[90] = ItemType.LightGrayWool; - mappings[91] = ItemType.CyanWool; - mappings[92] = ItemType.PurpleWool; - mappings[93] = ItemType.BlueWool; - mappings[94] = ItemType.BrownWool; - mappings[95] = ItemType.GreenWool; - mappings[96] = ItemType.RedWool; - mappings[97] = ItemType.BlackWool; - mappings[98] = ItemType.Dandelion; - mappings[99] = ItemType.Poppy; - mappings[100] = ItemType.BlueOrchid; - mappings[101] = ItemType.Allium; - mappings[102] = ItemType.AzureBluet; - mappings[103] = ItemType.RedTulip; - mappings[104] = ItemType.OrangeTulip; - mappings[105] = ItemType.WhiteTulip; - mappings[106] = ItemType.PinkTulip; - mappings[107] = ItemType.OxeyeDaisy; - mappings[108] = ItemType.Cornflower; - mappings[109] = ItemType.LilyOfTheValley; - mappings[110] = ItemType.WitherRose; - mappings[111] = ItemType.BrownMushroom; - mappings[112] = ItemType.RedMushroom; - mappings[113] = ItemType.GoldBlock; - mappings[114] = ItemType.IronBlock; - mappings[115] = ItemType.OakSlab; - mappings[116] = ItemType.SpruceSlab; - mappings[117] = ItemType.BirchSlab; - mappings[118] = ItemType.JungleSlab; - mappings[119] = ItemType.AcaciaSlab; - mappings[120] = ItemType.DarkOakSlab; - mappings[121] = ItemType.StoneSlab; - mappings[122] = ItemType.SmoothStoneSlab; - mappings[123] = ItemType.SandstoneSlab; - mappings[124] = ItemType.CutSandstoneSlab; - mappings[125] = ItemType.PetrifiedOakSlab; - mappings[126] = ItemType.CobblestoneSlab; - mappings[127] = ItemType.BrickSlab; - mappings[128] = ItemType.StoneBrickSlab; - mappings[129] = ItemType.NetherBrickSlab; - mappings[130] = ItemType.QuartzSlab; - mappings[131] = ItemType.RedSandstoneSlab; - mappings[132] = ItemType.CutRedSandstoneSlab; - mappings[133] = ItemType.PurpurSlab; - mappings[134] = ItemType.PrismarineSlab; - mappings[135] = ItemType.PrismarineBrickSlab; - mappings[136] = ItemType.DarkPrismarineSlab; - mappings[137] = ItemType.SmoothQuartz; - mappings[138] = ItemType.SmoothRedSandstone; - mappings[139] = ItemType.SmoothSandstone; - mappings[140] = ItemType.SmoothStone; - mappings[141] = ItemType.Bricks; - mappings[142] = ItemType.Tnt; - mappings[143] = ItemType.Bookshelf; - mappings[144] = ItemType.MossyCobblestone; - mappings[145] = ItemType.Obsidian; - mappings[146] = ItemType.Torch; - mappings[147] = ItemType.EndRod; - mappings[148] = ItemType.ChorusPlant; - mappings[149] = ItemType.ChorusFlower; - mappings[150] = ItemType.PurpurBlock; - mappings[151] = ItemType.PurpurPillar; - mappings[152] = ItemType.PurpurStairs; - mappings[153] = ItemType.Spawner; - mappings[154] = ItemType.OakStairs; - mappings[155] = ItemType.Chest; - mappings[156] = ItemType.DiamondOre; - mappings[157] = ItemType.DiamondBlock; - mappings[158] = ItemType.CraftingTable; - mappings[159] = ItemType.Farmland; - mappings[160] = ItemType.Furnace; - mappings[161] = ItemType.Ladder; - mappings[162] = ItemType.Rail; - mappings[163] = ItemType.CobblestoneStairs; - mappings[164] = ItemType.Lever; - mappings[165] = ItemType.StonePressurePlate; - mappings[166] = ItemType.OakPressurePlate; - mappings[167] = ItemType.SprucePressurePlate; - mappings[168] = ItemType.BirchPressurePlate; - mappings[169] = ItemType.JunglePressurePlate; - mappings[170] = ItemType.AcaciaPressurePlate; - mappings[171] = ItemType.DarkOakPressurePlate; - mappings[172] = ItemType.RedstoneOre; - mappings[173] = ItemType.RedstoneTorch; - mappings[174] = ItemType.StoneButton; - mappings[175] = ItemType.Snow; - mappings[176] = ItemType.Ice; - mappings[177] = ItemType.SnowBlock; - mappings[178] = ItemType.Cactus; - mappings[179] = ItemType.Clay; - mappings[180] = ItemType.Jukebox; - mappings[181] = ItemType.OakFence; - mappings[182] = ItemType.SpruceFence; - mappings[183] = ItemType.BirchFence; - mappings[184] = ItemType.JungleFence; - mappings[185] = ItemType.AcaciaFence; - mappings[186] = ItemType.DarkOakFence; - mappings[187] = ItemType.Pumpkin; - mappings[188] = ItemType.CarvedPumpkin; - mappings[189] = ItemType.Netherrack; - mappings[190] = ItemType.SoulSand; - mappings[191] = ItemType.Glowstone; - mappings[192] = ItemType.JackOLantern; - mappings[193] = ItemType.OakTrapdoor; - mappings[194] = ItemType.SpruceTrapdoor; - mappings[195] = ItemType.BirchTrapdoor; - mappings[196] = ItemType.JungleTrapdoor; - mappings[197] = ItemType.AcaciaTrapdoor; - mappings[198] = ItemType.DarkOakTrapdoor; - mappings[199] = ItemType.InfestedStone; - mappings[200] = ItemType.InfestedCobblestone; - mappings[201] = ItemType.InfestedStoneBricks; - mappings[202] = ItemType.InfestedMossyStoneBricks; - mappings[203] = ItemType.InfestedCrackedStoneBricks; - mappings[204] = ItemType.InfestedChiseledStoneBricks; - mappings[205] = ItemType.StoneBricks; - mappings[206] = ItemType.MossyStoneBricks; - mappings[207] = ItemType.CrackedStoneBricks; - mappings[208] = ItemType.ChiseledStoneBricks; - mappings[209] = ItemType.BrownMushroomBlock; - mappings[210] = ItemType.RedMushroomBlock; - mappings[211] = ItemType.MushroomStem; - mappings[212] = ItemType.IronBars; - mappings[213] = ItemType.GlassPane; - mappings[214] = ItemType.Melon; - mappings[215] = ItemType.Vine; - mappings[216] = ItemType.OakFenceGate; - mappings[217] = ItemType.SpruceFenceGate; - mappings[218] = ItemType.BirchFenceGate; - mappings[219] = ItemType.JungleFenceGate; - mappings[220] = ItemType.AcaciaFenceGate; - mappings[221] = ItemType.DarkOakFenceGate; - mappings[222] = ItemType.BrickStairs; - mappings[223] = ItemType.StoneBrickStairs; - mappings[224] = ItemType.Mycelium; - mappings[225] = ItemType.LilyPad; - mappings[226] = ItemType.NetherBricks; - mappings[227] = ItemType.NetherBrickFence; - mappings[228] = ItemType.NetherBrickStairs; - mappings[229] = ItemType.EnchantingTable; - mappings[230] = ItemType.EndPortalFrame; - mappings[231] = ItemType.EndStone; - mappings[232] = ItemType.EndStoneBricks; - mappings[233] = ItemType.DragonEgg; - mappings[234] = ItemType.RedstoneLamp; - mappings[235] = ItemType.SandstoneStairs; - mappings[236] = ItemType.EmeraldOre; - mappings[237] = ItemType.EnderChest; - mappings[238] = ItemType.TripwireHook; - mappings[239] = ItemType.EmeraldBlock; - mappings[240] = ItemType.SpruceStairs; - mappings[241] = ItemType.BirchStairs; - mappings[242] = ItemType.JungleStairs; - mappings[243] = ItemType.CommandBlock; - mappings[244] = ItemType.Beacon; - mappings[245] = ItemType.CobblestoneWall; - mappings[246] = ItemType.MossyCobblestoneWall; - mappings[247] = ItemType.BrickWall; - mappings[248] = ItemType.PrismarineWall; - mappings[249] = ItemType.RedSandstoneWall; - mappings[250] = ItemType.MossyStoneBrickWall; - mappings[251] = ItemType.GraniteWall; - mappings[252] = ItemType.StoneBrickWall; - mappings[253] = ItemType.NetherBrickWall; - mappings[254] = ItemType.AndesiteWall; - mappings[255] = ItemType.RedNetherBrickWall; - mappings[256] = ItemType.SandstoneWall; - mappings[257] = ItemType.EndStoneBrickWall; - mappings[258] = ItemType.DioriteWall; - mappings[259] = ItemType.OakButton; - mappings[260] = ItemType.SpruceButton; - mappings[261] = ItemType.BirchButton; - mappings[262] = ItemType.JungleButton; - mappings[263] = ItemType.AcaciaButton; - mappings[264] = ItemType.DarkOakButton; - mappings[265] = ItemType.Anvil; - mappings[266] = ItemType.ChippedAnvil; - mappings[267] = ItemType.DamagedAnvil; - mappings[268] = ItemType.TrappedChest; - mappings[269] = ItemType.LightWeightedPressurePlate; - mappings[270] = ItemType.HeavyWeightedPressurePlate; - mappings[271] = ItemType.DaylightDetector; - mappings[272] = ItemType.RedstoneBlock; - mappings[273] = ItemType.NetherQuartzOre; - mappings[274] = ItemType.Hopper; - mappings[275] = ItemType.ChiseledQuartzBlock; - mappings[276] = ItemType.QuartzBlock; - mappings[277] = ItemType.QuartzPillar; - mappings[278] = ItemType.QuartzStairs; - mappings[279] = ItemType.ActivatorRail; - mappings[280] = ItemType.Dropper; - mappings[281] = ItemType.WhiteTerracotta; - mappings[282] = ItemType.OrangeTerracotta; - mappings[283] = ItemType.MagentaTerracotta; - mappings[284] = ItemType.LightBlueTerracotta; - mappings[285] = ItemType.YellowTerracotta; - mappings[286] = ItemType.LimeTerracotta; - mappings[287] = ItemType.PinkTerracotta; - mappings[288] = ItemType.GrayTerracotta; - mappings[289] = ItemType.LightGrayTerracotta; - mappings[290] = ItemType.CyanTerracotta; - mappings[291] = ItemType.PurpleTerracotta; - mappings[292] = ItemType.BlueTerracotta; - mappings[293] = ItemType.BrownTerracotta; - mappings[294] = ItemType.GreenTerracotta; - mappings[295] = ItemType.RedTerracotta; - mappings[296] = ItemType.BlackTerracotta; - mappings[297] = ItemType.Barrier; - mappings[298] = ItemType.IronTrapdoor; - mappings[299] = ItemType.HayBlock; - mappings[300] = ItemType.WhiteCarpet; - mappings[301] = ItemType.OrangeCarpet; - mappings[302] = ItemType.MagentaCarpet; - mappings[303] = ItemType.LightBlueCarpet; - mappings[304] = ItemType.YellowCarpet; - mappings[305] = ItemType.LimeCarpet; - mappings[306] = ItemType.PinkCarpet; - mappings[307] = ItemType.GrayCarpet; - mappings[308] = ItemType.LightGrayCarpet; - mappings[309] = ItemType.CyanCarpet; - mappings[310] = ItemType.PurpleCarpet; - mappings[311] = ItemType.BlueCarpet; - mappings[312] = ItemType.BrownCarpet; - mappings[313] = ItemType.GreenCarpet; - mappings[314] = ItemType.RedCarpet; - mappings[315] = ItemType.BlackCarpet; - mappings[316] = ItemType.Terracotta; - mappings[317] = ItemType.CoalBlock; - mappings[318] = ItemType.PackedIce; - mappings[319] = ItemType.AcaciaStairs; - mappings[320] = ItemType.DarkOakStairs; - mappings[321] = ItemType.SlimeBlock; - mappings[322] = ItemType.DirtPath; - mappings[323] = ItemType.Sunflower; - mappings[324] = ItemType.Lilac; - mappings[325] = ItemType.RoseBush; - mappings[326] = ItemType.Peony; - mappings[327] = ItemType.TallGrass; - mappings[328] = ItemType.LargeFern; - mappings[329] = ItemType.WhiteStainedGlass; - mappings[330] = ItemType.OrangeStainedGlass; - mappings[331] = ItemType.MagentaStainedGlass; - mappings[332] = ItemType.LightBlueStainedGlass; - mappings[333] = ItemType.YellowStainedGlass; - mappings[334] = ItemType.LimeStainedGlass; - mappings[335] = ItemType.PinkStainedGlass; - mappings[336] = ItemType.GrayStainedGlass; - mappings[337] = ItemType.LightGrayStainedGlass; - mappings[338] = ItemType.CyanStainedGlass; - mappings[339] = ItemType.PurpleStainedGlass; - mappings[340] = ItemType.BlueStainedGlass; - mappings[341] = ItemType.BrownStainedGlass; - mappings[342] = ItemType.GreenStainedGlass; - mappings[343] = ItemType.RedStainedGlass; - mappings[344] = ItemType.BlackStainedGlass; - mappings[345] = ItemType.WhiteStainedGlassPane; - mappings[346] = ItemType.OrangeStainedGlassPane; - mappings[347] = ItemType.MagentaStainedGlassPane; - mappings[348] = ItemType.LightBlueStainedGlassPane; - mappings[349] = ItemType.YellowStainedGlassPane; - mappings[350] = ItemType.LimeStainedGlassPane; - mappings[351] = ItemType.PinkStainedGlassPane; - mappings[352] = ItemType.GrayStainedGlassPane; - mappings[353] = ItemType.LightGrayStainedGlassPane; - mappings[354] = ItemType.CyanStainedGlassPane; - mappings[355] = ItemType.PurpleStainedGlassPane; - mappings[356] = ItemType.BlueStainedGlassPane; - mappings[357] = ItemType.BrownStainedGlassPane; - mappings[358] = ItemType.GreenStainedGlassPane; - mappings[359] = ItemType.RedStainedGlassPane; - mappings[360] = ItemType.BlackStainedGlassPane; - mappings[361] = ItemType.Prismarine; - mappings[362] = ItemType.PrismarineBricks; - mappings[363] = ItemType.DarkPrismarine; - mappings[364] = ItemType.PrismarineStairs; - mappings[365] = ItemType.PrismarineBrickStairs; - mappings[366] = ItemType.DarkPrismarineStairs; - mappings[367] = ItemType.SeaLantern; - mappings[368] = ItemType.RedSandstone; - mappings[369] = ItemType.ChiseledRedSandstone; - mappings[370] = ItemType.CutRedSandstone; - mappings[371] = ItemType.RedSandstoneStairs; - mappings[372] = ItemType.RepeatingCommandBlock; - mappings[373] = ItemType.ChainCommandBlock; - mappings[374] = ItemType.MagmaBlock; - mappings[375] = ItemType.NetherWartBlock; - mappings[376] = ItemType.RedNetherBricks; - mappings[377] = ItemType.BoneBlock; - mappings[378] = ItemType.StructureVoid; - mappings[379] = ItemType.Observer; - mappings[380] = ItemType.ShulkerBox; - mappings[381] = ItemType.WhiteShulkerBox; - mappings[382] = ItemType.OrangeShulkerBox; - mappings[383] = ItemType.MagentaShulkerBox; - mappings[384] = ItemType.LightBlueShulkerBox; - mappings[385] = ItemType.YellowShulkerBox; - mappings[386] = ItemType.LimeShulkerBox; - mappings[387] = ItemType.PinkShulkerBox; - mappings[388] = ItemType.GrayShulkerBox; - mappings[389] = ItemType.LightGrayShulkerBox; - mappings[390] = ItemType.CyanShulkerBox; - mappings[391] = ItemType.PurpleShulkerBox; - mappings[392] = ItemType.BlueShulkerBox; - mappings[393] = ItemType.BrownShulkerBox; - mappings[394] = ItemType.GreenShulkerBox; - mappings[395] = ItemType.RedShulkerBox; - mappings[396] = ItemType.BlackShulkerBox; - mappings[397] = ItemType.WhiteGlazedTerracotta; - mappings[398] = ItemType.OrangeGlazedTerracotta; - mappings[399] = ItemType.MagentaGlazedTerracotta; - mappings[400] = ItemType.LightBlueGlazedTerracotta; - mappings[401] = ItemType.YellowGlazedTerracotta; - mappings[402] = ItemType.LimeGlazedTerracotta; - mappings[403] = ItemType.PinkGlazedTerracotta; - mappings[404] = ItemType.GrayGlazedTerracotta; - mappings[405] = ItemType.LightGrayGlazedTerracotta; - mappings[406] = ItemType.CyanGlazedTerracotta; - mappings[407] = ItemType.PurpleGlazedTerracotta; - mappings[408] = ItemType.BlueGlazedTerracotta; - mappings[409] = ItemType.BrownGlazedTerracotta; - mappings[410] = ItemType.GreenGlazedTerracotta; - mappings[411] = ItemType.RedGlazedTerracotta; - mappings[412] = ItemType.BlackGlazedTerracotta; - mappings[413] = ItemType.WhiteConcrete; - mappings[414] = ItemType.OrangeConcrete; - mappings[415] = ItemType.MagentaConcrete; - mappings[416] = ItemType.LightBlueConcrete; - mappings[417] = ItemType.YellowConcrete; - mappings[418] = ItemType.LimeConcrete; - mappings[419] = ItemType.PinkConcrete; - mappings[420] = ItemType.GrayConcrete; - mappings[421] = ItemType.LightGrayConcrete; - mappings[422] = ItemType.CyanConcrete; - mappings[423] = ItemType.PurpleConcrete; - mappings[424] = ItemType.BlueConcrete; - mappings[425] = ItemType.BrownConcrete; - mappings[426] = ItemType.GreenConcrete; - mappings[427] = ItemType.RedConcrete; - mappings[428] = ItemType.BlackConcrete; - mappings[429] = ItemType.WhiteConcretePowder; - mappings[430] = ItemType.OrangeConcretePowder; - mappings[431] = ItemType.MagentaConcretePowder; - mappings[432] = ItemType.LightBlueConcretePowder; - mappings[433] = ItemType.YellowConcretePowder; - mappings[434] = ItemType.LimeConcretePowder; - mappings[435] = ItemType.PinkConcretePowder; - mappings[436] = ItemType.GrayConcretePowder; - mappings[437] = ItemType.LightGrayConcretePowder; - mappings[438] = ItemType.CyanConcretePowder; - mappings[439] = ItemType.PurpleConcretePowder; - mappings[440] = ItemType.BlueConcretePowder; - mappings[441] = ItemType.BrownConcretePowder; - mappings[442] = ItemType.GreenConcretePowder; - mappings[443] = ItemType.RedConcretePowder; - mappings[444] = ItemType.BlackConcretePowder; - mappings[445] = ItemType.TurtleEgg; - mappings[446] = ItemType.DeadTubeCoralBlock; - mappings[447] = ItemType.DeadBrainCoralBlock; - mappings[448] = ItemType.DeadBubbleCoralBlock; - mappings[449] = ItemType.DeadFireCoralBlock; - mappings[450] = ItemType.DeadHornCoralBlock; - mappings[451] = ItemType.TubeCoralBlock; - mappings[452] = ItemType.BrainCoralBlock; - mappings[453] = ItemType.BubbleCoralBlock; - mappings[454] = ItemType.FireCoralBlock; - mappings[455] = ItemType.HornCoralBlock; - mappings[456] = ItemType.TubeCoral; - mappings[457] = ItemType.BrainCoral; - mappings[458] = ItemType.BubbleCoral; - mappings[459] = ItemType.FireCoral; - mappings[460] = ItemType.HornCoral; - mappings[461] = ItemType.DeadBrainCoral; - mappings[462] = ItemType.DeadBubbleCoral; - mappings[463] = ItemType.DeadFireCoral; - mappings[464] = ItemType.DeadHornCoral; - mappings[465] = ItemType.DeadTubeCoral; - mappings[466] = ItemType.TubeCoralFan; - mappings[467] = ItemType.BrainCoralFan; - mappings[468] = ItemType.BubbleCoralFan; - mappings[469] = ItemType.FireCoralFan; - mappings[470] = ItemType.HornCoralFan; - mappings[471] = ItemType.DeadTubeCoralFan; - mappings[472] = ItemType.DeadBrainCoralFan; - mappings[473] = ItemType.DeadBubbleCoralFan; - mappings[474] = ItemType.DeadFireCoralFan; - mappings[475] = ItemType.DeadHornCoralFan; - mappings[476] = ItemType.BlueIce; - mappings[477] = ItemType.Conduit; - mappings[478] = ItemType.PolishedGraniteStairs; - mappings[479] = ItemType.SmoothRedSandstoneStairs; - mappings[480] = ItemType.MossyStoneBrickStairs; - mappings[481] = ItemType.PolishedDioriteStairs; - mappings[482] = ItemType.MossyCobblestoneStairs; - mappings[483] = ItemType.EndStoneBrickStairs; - mappings[484] = ItemType.StoneStairs; - mappings[485] = ItemType.SmoothSandstoneStairs; - mappings[486] = ItemType.SmoothQuartzStairs; - mappings[487] = ItemType.GraniteStairs; - mappings[488] = ItemType.AndesiteStairs; - mappings[489] = ItemType.RedNetherBrickStairs; - mappings[490] = ItemType.PolishedAndesiteStairs; - mappings[491] = ItemType.DioriteStairs; - mappings[492] = ItemType.PolishedGraniteSlab; - mappings[493] = ItemType.SmoothRedSandstoneSlab; - mappings[494] = ItemType.MossyStoneBrickSlab; - mappings[495] = ItemType.PolishedDioriteSlab; - mappings[496] = ItemType.MossyCobblestoneSlab; - mappings[497] = ItemType.EndStoneBrickSlab; - mappings[498] = ItemType.SmoothSandstoneSlab; - mappings[499] = ItemType.SmoothQuartzSlab; - mappings[500] = ItemType.GraniteSlab; - mappings[501] = ItemType.AndesiteSlab; - mappings[502] = ItemType.RedNetherBrickSlab; - mappings[503] = ItemType.PolishedAndesiteSlab; - mappings[504] = ItemType.DioriteSlab; - mappings[505] = ItemType.Scaffolding; - mappings[506] = ItemType.IronDoor; - mappings[507] = ItemType.OakDoor; - mappings[508] = ItemType.SpruceDoor; - mappings[509] = ItemType.BirchDoor; - mappings[510] = ItemType.JungleDoor; - mappings[511] = ItemType.AcaciaDoor; - mappings[512] = ItemType.DarkOakDoor; - mappings[513] = ItemType.Repeater; - mappings[514] = ItemType.Comparator; - mappings[515] = ItemType.StructureBlock; - mappings[516] = ItemType.Jigsaw; - mappings[517] = ItemType.Composter; - mappings[518] = ItemType.TurtleHelmet; - mappings[519] = ItemType.TurtleScute; - mappings[520] = ItemType.IronShovel; - mappings[521] = ItemType.IronPickaxe; - mappings[522] = ItemType.IronAxe; - mappings[523] = ItemType.FlintAndSteel; - mappings[524] = ItemType.Apple; - mappings[525] = ItemType.Bow; - mappings[526] = ItemType.Arrow; - mappings[527] = ItemType.Coal; - mappings[528] = ItemType.Charcoal; - mappings[529] = ItemType.Diamond; - mappings[530] = ItemType.IronIngot; - mappings[531] = ItemType.GoldIngot; - mappings[532] = ItemType.IronSword; - mappings[533] = ItemType.WoodenSword; - mappings[534] = ItemType.WoodenShovel; - mappings[535] = ItemType.WoodenPickaxe; - mappings[536] = ItemType.WoodenAxe; - mappings[537] = ItemType.StoneSword; - mappings[538] = ItemType.StoneShovel; - mappings[539] = ItemType.StonePickaxe; - mappings[540] = ItemType.StoneAxe; - mappings[541] = ItemType.DiamondSword; - mappings[542] = ItemType.DiamondShovel; - mappings[543] = ItemType.DiamondPickaxe; - mappings[544] = ItemType.DiamondAxe; - mappings[545] = ItemType.Stick; - mappings[546] = ItemType.Bowl; - mappings[547] = ItemType.MushroomStew; - mappings[548] = ItemType.GoldenSword; - mappings[549] = ItemType.GoldenShovel; - mappings[550] = ItemType.GoldenPickaxe; - mappings[551] = ItemType.GoldenAxe; - mappings[552] = ItemType.String; - mappings[553] = ItemType.Feather; - mappings[554] = ItemType.Gunpowder; - mappings[555] = ItemType.WoodenHoe; - mappings[556] = ItemType.StoneHoe; - mappings[557] = ItemType.IronHoe; - mappings[558] = ItemType.DiamondHoe; - mappings[559] = ItemType.GoldenHoe; - mappings[560] = ItemType.WheatSeeds; - mappings[561] = ItemType.Wheat; - mappings[562] = ItemType.Bread; - mappings[563] = ItemType.LeatherHelmet; - mappings[564] = ItemType.LeatherChestplate; - mappings[565] = ItemType.LeatherLeggings; - mappings[566] = ItemType.LeatherBoots; - mappings[567] = ItemType.ChainmailHelmet; - mappings[568] = ItemType.ChainmailChestplate; - mappings[569] = ItemType.ChainmailLeggings; - mappings[570] = ItemType.ChainmailBoots; - mappings[571] = ItemType.IronHelmet; - mappings[572] = ItemType.IronChestplate; - mappings[573] = ItemType.IronLeggings; - mappings[574] = ItemType.IronBoots; - mappings[575] = ItemType.DiamondHelmet; - mappings[576] = ItemType.DiamondChestplate; - mappings[577] = ItemType.DiamondLeggings; - mappings[578] = ItemType.DiamondBoots; - mappings[579] = ItemType.GoldenHelmet; - mappings[580] = ItemType.GoldenChestplate; - mappings[581] = ItemType.GoldenLeggings; - mappings[582] = ItemType.GoldenBoots; - mappings[583] = ItemType.Flint; - mappings[584] = ItemType.Porkchop; - mappings[585] = ItemType.CookedPorkchop; - mappings[586] = ItemType.Painting; - mappings[587] = ItemType.GoldenApple; - mappings[588] = ItemType.EnchantedGoldenApple; - mappings[589] = ItemType.OakSign; - mappings[590] = ItemType.SpruceSign; - mappings[591] = ItemType.BirchSign; - mappings[592] = ItemType.JungleSign; - mappings[593] = ItemType.AcaciaSign; - mappings[594] = ItemType.DarkOakSign; - mappings[595] = ItemType.Bucket; - mappings[596] = ItemType.WaterBucket; - mappings[597] = ItemType.LavaBucket; - mappings[598] = ItemType.Minecart; - mappings[599] = ItemType.Saddle; - mappings[600] = ItemType.Redstone; - mappings[601] = ItemType.Snowball; - mappings[602] = ItemType.OakBoat; - mappings[603] = ItemType.Leather; - mappings[604] = ItemType.MilkBucket; - mappings[605] = ItemType.PufferfishBucket; - mappings[606] = ItemType.SalmonBucket; - mappings[607] = ItemType.CodBucket; - mappings[608] = ItemType.TropicalFishBucket; - mappings[609] = ItemType.Brick; - mappings[610] = ItemType.ClayBall; - mappings[611] = ItemType.SugarCane; - mappings[612] = ItemType.Kelp; - mappings[613] = ItemType.DriedKelpBlock; - mappings[614] = ItemType.Bamboo; - mappings[615] = ItemType.Paper; - mappings[616] = ItemType.Book; - mappings[617] = ItemType.SlimeBall; - mappings[618] = ItemType.ChestMinecart; - mappings[619] = ItemType.FurnaceMinecart; - mappings[620] = ItemType.Egg; - mappings[621] = ItemType.Compass; - mappings[622] = ItemType.FishingRod; - mappings[623] = ItemType.Clock; - mappings[624] = ItemType.GlowstoneDust; - mappings[625] = ItemType.Cod; - mappings[626] = ItemType.Salmon; - mappings[627] = ItemType.TropicalFish; - mappings[628] = ItemType.Pufferfish; - mappings[629] = ItemType.CookedCod; - mappings[630] = ItemType.CookedSalmon; - mappings[631] = ItemType.InkSac; - mappings[632] = ItemType.RedDye; - mappings[633] = ItemType.GreenDye; - mappings[634] = ItemType.CocoaBeans; - mappings[635] = ItemType.LapisLazuli; - mappings[636] = ItemType.PurpleDye; - mappings[637] = ItemType.CyanDye; - mappings[638] = ItemType.LightGrayDye; - mappings[639] = ItemType.GrayDye; - mappings[640] = ItemType.PinkDye; - mappings[641] = ItemType.LimeDye; - mappings[642] = ItemType.YellowDye; - mappings[643] = ItemType.LightBlueDye; - mappings[644] = ItemType.MagentaDye; - mappings[645] = ItemType.OrangeDye; - mappings[646] = ItemType.BoneMeal; - mappings[647] = ItemType.BlueDye; - mappings[648] = ItemType.BrownDye; - mappings[649] = ItemType.BlackDye; - mappings[650] = ItemType.WhiteDye; - mappings[651] = ItemType.Bone; - mappings[652] = ItemType.Sugar; - mappings[653] = ItemType.Cake; - mappings[654] = ItemType.WhiteBed; - mappings[655] = ItemType.OrangeBed; - mappings[656] = ItemType.MagentaBed; - mappings[657] = ItemType.LightBlueBed; - mappings[658] = ItemType.YellowBed; - mappings[659] = ItemType.LimeBed; - mappings[660] = ItemType.PinkBed; - mappings[661] = ItemType.GrayBed; - mappings[662] = ItemType.LightGrayBed; - mappings[663] = ItemType.CyanBed; - mappings[664] = ItemType.PurpleBed; - mappings[665] = ItemType.BlueBed; - mappings[666] = ItemType.BrownBed; - mappings[667] = ItemType.GreenBed; - mappings[668] = ItemType.RedBed; - mappings[669] = ItemType.BlackBed; - mappings[670] = ItemType.Cookie; - mappings[671] = ItemType.FilledMap; - mappings[672] = ItemType.Shears; - mappings[673] = ItemType.MelonSlice; - mappings[674] = ItemType.DriedKelp; - mappings[675] = ItemType.PumpkinSeeds; - mappings[676] = ItemType.MelonSeeds; - mappings[677] = ItemType.Beef; - mappings[678] = ItemType.CookedBeef; - mappings[679] = ItemType.Chicken; - mappings[680] = ItemType.CookedChicken; - mappings[681] = ItemType.RottenFlesh; - mappings[682] = ItemType.EnderPearl; - mappings[683] = ItemType.BlazeRod; - mappings[684] = ItemType.GhastTear; - mappings[685] = ItemType.GoldNugget; - mappings[686] = ItemType.NetherWart; - mappings[687] = ItemType.Potion; - mappings[688] = ItemType.GlassBottle; - mappings[689] = ItemType.SpiderEye; - mappings[690] = ItemType.FermentedSpiderEye; - mappings[691] = ItemType.BlazePowder; - mappings[692] = ItemType.MagmaCream; - mappings[693] = ItemType.BrewingStand; - mappings[694] = ItemType.Cauldron; - mappings[695] = ItemType.EnderEye; - mappings[696] = ItemType.GlisteringMelonSlice; - mappings[697] = ItemType.BatSpawnEgg; - mappings[698] = ItemType.BeeSpawnEgg; - mappings[699] = ItemType.BlazeSpawnEgg; - mappings[700] = ItemType.CatSpawnEgg; - mappings[701] = ItemType.CaveSpiderSpawnEgg; - mappings[702] = ItemType.ChickenSpawnEgg; - mappings[703] = ItemType.CodSpawnEgg; - mappings[704] = ItemType.CowSpawnEgg; - mappings[705] = ItemType.CreeperSpawnEgg; - mappings[706] = ItemType.DolphinSpawnEgg; - mappings[707] = ItemType.DonkeySpawnEgg; - mappings[708] = ItemType.DrownedSpawnEgg; - mappings[709] = ItemType.ElderGuardianSpawnEgg; - mappings[710] = ItemType.EndermanSpawnEgg; - mappings[711] = ItemType.EndermiteSpawnEgg; - mappings[712] = ItemType.EvokerSpawnEgg; - mappings[713] = ItemType.FoxSpawnEgg; - mappings[714] = ItemType.GhastSpawnEgg; - mappings[715] = ItemType.GuardianSpawnEgg; - mappings[716] = ItemType.HorseSpawnEgg; - mappings[717] = ItemType.HuskSpawnEgg; - mappings[718] = ItemType.LlamaSpawnEgg; - mappings[719] = ItemType.MagmaCubeSpawnEgg; - mappings[720] = ItemType.MooshroomSpawnEgg; - mappings[721] = ItemType.MuleSpawnEgg; - mappings[722] = ItemType.OcelotSpawnEgg; - mappings[723] = ItemType.PandaSpawnEgg; - mappings[724] = ItemType.ParrotSpawnEgg; - mappings[725] = ItemType.PhantomSpawnEgg; - mappings[726] = ItemType.PigSpawnEgg; - mappings[727] = ItemType.PillagerSpawnEgg; - mappings[728] = ItemType.PolarBearSpawnEgg; - mappings[729] = ItemType.PufferfishSpawnEgg; - mappings[730] = ItemType.RabbitSpawnEgg; - mappings[731] = ItemType.RavagerSpawnEgg; - mappings[732] = ItemType.SalmonSpawnEgg; - mappings[733] = ItemType.SheepSpawnEgg; - mappings[734] = ItemType.ShulkerSpawnEgg; - mappings[735] = ItemType.SilverfishSpawnEgg; - mappings[736] = ItemType.SkeletonSpawnEgg; - mappings[737] = ItemType.SkeletonHorseSpawnEgg; - mappings[738] = ItemType.SlimeSpawnEgg; - mappings[739] = ItemType.SpiderSpawnEgg; - mappings[740] = ItemType.SquidSpawnEgg; - mappings[741] = ItemType.StraySpawnEgg; - mappings[742] = ItemType.TraderLlamaSpawnEgg; - mappings[743] = ItemType.TropicalFishSpawnEgg; - mappings[744] = ItemType.TurtleSpawnEgg; - mappings[745] = ItemType.VexSpawnEgg; - mappings[746] = ItemType.VillagerSpawnEgg; - mappings[747] = ItemType.VindicatorSpawnEgg; - mappings[748] = ItemType.WanderingTraderSpawnEgg; - mappings[749] = ItemType.WitchSpawnEgg; - mappings[750] = ItemType.WitherSkeletonSpawnEgg; - mappings[751] = ItemType.WolfSpawnEgg; - mappings[752] = ItemType.ZombieSpawnEgg; - mappings[753] = ItemType.ZombieHorseSpawnEgg; - mappings[754] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[755] = ItemType.ZombieVillagerSpawnEgg; - mappings[756] = ItemType.ExperienceBottle; - mappings[757] = ItemType.FireCharge; - mappings[758] = ItemType.WritableBook; - mappings[759] = ItemType.WrittenBook; - mappings[760] = ItemType.Emerald; - mappings[761] = ItemType.ItemFrame; - mappings[762] = ItemType.FlowerPot; - mappings[763] = ItemType.Carrot; - mappings[764] = ItemType.Potato; - mappings[765] = ItemType.BakedPotato; - mappings[766] = ItemType.PoisonousPotato; - mappings[767] = ItemType.Map; - mappings[768] = ItemType.GoldenCarrot; - mappings[769] = ItemType.SkeletonSkull; - mappings[770] = ItemType.WitherSkeletonSkull; - mappings[771] = ItemType.PlayerHead; - mappings[772] = ItemType.ZombieHead; - mappings[773] = ItemType.CreeperHead; - mappings[774] = ItemType.DragonHead; - mappings[775] = ItemType.CarrotOnAStick; - mappings[776] = ItemType.NetherStar; - mappings[777] = ItemType.PumpkinPie; - mappings[778] = ItemType.FireworkRocket; - mappings[779] = ItemType.FireworkStar; - mappings[780] = ItemType.EnchantedBook; - mappings[781] = ItemType.NetherBrick; - mappings[782] = ItemType.Quartz; - mappings[783] = ItemType.TntMinecart; - mappings[784] = ItemType.HopperMinecart; - mappings[785] = ItemType.PrismarineShard; - mappings[786] = ItemType.PrismarineCrystals; - mappings[787] = ItemType.Rabbit; - mappings[788] = ItemType.CookedRabbit; - mappings[789] = ItemType.RabbitStew; - mappings[790] = ItemType.RabbitFoot; - mappings[791] = ItemType.RabbitHide; - mappings[792] = ItemType.ArmorStand; - mappings[793] = ItemType.IronHorseArmor; - mappings[794] = ItemType.GoldenHorseArmor; - mappings[795] = ItemType.DiamondHorseArmor; - mappings[796] = ItemType.LeatherHorseArmor; - mappings[797] = ItemType.Lead; - mappings[798] = ItemType.NameTag; - mappings[799] = ItemType.CommandBlockMinecart; - mappings[800] = ItemType.Mutton; - mappings[801] = ItemType.CookedMutton; - mappings[802] = ItemType.WhiteBanner; - mappings[803] = ItemType.OrangeBanner; - mappings[804] = ItemType.MagentaBanner; - mappings[805] = ItemType.LightBlueBanner; - mappings[806] = ItemType.YellowBanner; - mappings[807] = ItemType.LimeBanner; - mappings[808] = ItemType.PinkBanner; - mappings[809] = ItemType.GrayBanner; - mappings[810] = ItemType.LightGrayBanner; - mappings[811] = ItemType.CyanBanner; - mappings[812] = ItemType.PurpleBanner; - mappings[813] = ItemType.BlueBanner; - mappings[814] = ItemType.BrownBanner; - mappings[815] = ItemType.GreenBanner; - mappings[816] = ItemType.RedBanner; - mappings[817] = ItemType.BlackBanner; - mappings[818] = ItemType.EndCrystal; - mappings[819] = ItemType.ChorusFruit; - mappings[820] = ItemType.PoppedChorusFruit; - mappings[821] = ItemType.Beetroot; - mappings[822] = ItemType.BeetrootSeeds; - mappings[823] = ItemType.BeetrootSoup; - mappings[824] = ItemType.DragonBreath; - mappings[825] = ItemType.SplashPotion; - mappings[826] = ItemType.SpectralArrow; - mappings[827] = ItemType.TippedArrow; - mappings[828] = ItemType.LingeringPotion; - mappings[829] = ItemType.Shield; - mappings[830] = ItemType.Elytra; - mappings[831] = ItemType.SpruceBoat; - mappings[832] = ItemType.BirchBoat; - mappings[833] = ItemType.JungleBoat; - mappings[834] = ItemType.AcaciaBoat; - mappings[835] = ItemType.DarkOakBoat; - mappings[836] = ItemType.TotemOfUndying; - mappings[837] = ItemType.ShulkerShell; - mappings[838] = ItemType.IronNugget; - mappings[839] = ItemType.KnowledgeBook; - mappings[840] = ItemType.DebugStick; - mappings[841] = ItemType.MusicDisc13; - mappings[842] = ItemType.MusicDiscCat; - mappings[843] = ItemType.MusicDiscBlocks; - mappings[844] = ItemType.MusicDiscChirp; - mappings[845] = ItemType.MusicDiscFar; - mappings[846] = ItemType.MusicDiscMall; - mappings[847] = ItemType.MusicDiscMellohi; - mappings[848] = ItemType.MusicDiscStal; - mappings[849] = ItemType.MusicDiscStrad; - mappings[850] = ItemType.MusicDiscWard; - mappings[851] = ItemType.MusicDisc11; - mappings[852] = ItemType.MusicDiscWait; - mappings[853] = ItemType.Trident; - mappings[854] = ItemType.PhantomMembrane; - mappings[855] = ItemType.NautilusShell; - mappings[856] = ItemType.HeartOfTheSea; - mappings[857] = ItemType.Crossbow; - mappings[858] = ItemType.SuspiciousStew; - mappings[859] = ItemType.Loom; - mappings[860] = ItemType.FlowerBannerPattern; - mappings[861] = ItemType.CreeperBannerPattern; - mappings[862] = ItemType.SkullBannerPattern; - mappings[863] = ItemType.MojangBannerPattern; - mappings[864] = ItemType.GlobeBannerPattern; - mappings[865] = ItemType.Barrel; - mappings[866] = ItemType.Smoker; - mappings[867] = ItemType.BlastFurnace; - mappings[868] = ItemType.CartographyTable; - mappings[869] = ItemType.FletchingTable; - mappings[870] = ItemType.Grindstone; - mappings[871] = ItemType.Lectern; - mappings[872] = ItemType.SmithingTable; - mappings[873] = ItemType.Stonecutter; - mappings[874] = ItemType.Bell; - mappings[875] = ItemType.Lantern; - mappings[876] = ItemType.SweetBerries; - mappings[877] = ItemType.Campfire; - mappings[878] = ItemType.Honeycomb; - mappings[879] = ItemType.BeeNest; - mappings[880] = ItemType.Beehive; - mappings[881] = ItemType.HoneyBottle; - mappings[882] = ItemType.HoneyBlock; - mappings[883] = ItemType.HoneycombBlock; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1161.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette1161.cs deleted file mode 100644 index 4bdb9006af..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1161.cs +++ /dev/null @@ -1,997 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - /// - /// For MC 1.16 - 1.16.1 - /// Generated by ItemPaletteGenerator.cs - /// - public class ItemPalette1161 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette1161() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.GrassBlock; - mappings[9] = ItemType.Dirt; - mappings[10] = ItemType.CoarseDirt; - mappings[11] = ItemType.Podzol; - mappings[12] = ItemType.CrimsonNylium; - mappings[13] = ItemType.WarpedNylium; - mappings[14] = ItemType.Cobblestone; - mappings[15] = ItemType.OakPlanks; - mappings[16] = ItemType.SprucePlanks; - mappings[17] = ItemType.BirchPlanks; - mappings[18] = ItemType.JunglePlanks; - mappings[19] = ItemType.AcaciaPlanks; - mappings[20] = ItemType.DarkOakPlanks; - mappings[21] = ItemType.CrimsonPlanks; - mappings[22] = ItemType.WarpedPlanks; - mappings[23] = ItemType.OakSapling; - mappings[24] = ItemType.SpruceSapling; - mappings[25] = ItemType.BirchSapling; - mappings[26] = ItemType.JungleSapling; - mappings[27] = ItemType.AcaciaSapling; - mappings[28] = ItemType.DarkOakSapling; - mappings[29] = ItemType.Bedrock; - mappings[30] = ItemType.Sand; - mappings[31] = ItemType.RedSand; - mappings[32] = ItemType.Gravel; - mappings[33] = ItemType.GoldOre; - mappings[34] = ItemType.IronOre; - mappings[35] = ItemType.CoalOre; - mappings[36] = ItemType.NetherGoldOre; - mappings[37] = ItemType.OakLog; - mappings[38] = ItemType.SpruceLog; - mappings[39] = ItemType.BirchLog; - mappings[40] = ItemType.JungleLog; - mappings[41] = ItemType.AcaciaLog; - mappings[42] = ItemType.DarkOakLog; - mappings[43] = ItemType.CrimsonStem; - mappings[44] = ItemType.WarpedStem; - mappings[45] = ItemType.StrippedOakLog; - mappings[46] = ItemType.StrippedSpruceLog; - mappings[47] = ItemType.StrippedBirchLog; - mappings[48] = ItemType.StrippedJungleLog; - mappings[49] = ItemType.StrippedAcaciaLog; - mappings[50] = ItemType.StrippedDarkOakLog; - mappings[51] = ItemType.StrippedCrimsonStem; - mappings[52] = ItemType.StrippedWarpedStem; - mappings[53] = ItemType.StrippedOakWood; - mappings[54] = ItemType.StrippedSpruceWood; - mappings[55] = ItemType.StrippedBirchWood; - mappings[56] = ItemType.StrippedJungleWood; - mappings[57] = ItemType.StrippedAcaciaWood; - mappings[58] = ItemType.StrippedDarkOakWood; - mappings[59] = ItemType.StrippedCrimsonHyphae; - mappings[60] = ItemType.StrippedWarpedHyphae; - mappings[61] = ItemType.OakWood; - mappings[62] = ItemType.SpruceWood; - mappings[63] = ItemType.BirchWood; - mappings[64] = ItemType.JungleWood; - mappings[65] = ItemType.AcaciaWood; - mappings[66] = ItemType.DarkOakWood; - mappings[67] = ItemType.CrimsonHyphae; - mappings[68] = ItemType.WarpedHyphae; - mappings[69] = ItemType.OakLeaves; - mappings[70] = ItemType.SpruceLeaves; - mappings[71] = ItemType.BirchLeaves; - mappings[72] = ItemType.JungleLeaves; - mappings[73] = ItemType.AcaciaLeaves; - mappings[74] = ItemType.DarkOakLeaves; - mappings[75] = ItemType.Sponge; - mappings[76] = ItemType.WetSponge; - mappings[77] = ItemType.Glass; - mappings[78] = ItemType.LapisOre; - mappings[79] = ItemType.LapisBlock; - mappings[80] = ItemType.Dispenser; - mappings[81] = ItemType.Sandstone; - mappings[82] = ItemType.ChiseledSandstone; - mappings[83] = ItemType.CutSandstone; - mappings[84] = ItemType.NoteBlock; - mappings[85] = ItemType.PoweredRail; - mappings[86] = ItemType.DetectorRail; - mappings[87] = ItemType.StickyPiston; - mappings[88] = ItemType.Cobweb; - mappings[89] = ItemType.ShortGrass; - mappings[90] = ItemType.Fern; - mappings[91] = ItemType.DeadBush; - mappings[92] = ItemType.Seagrass; - mappings[93] = ItemType.SeaPickle; - mappings[94] = ItemType.Piston; - mappings[95] = ItemType.WhiteWool; - mappings[96] = ItemType.OrangeWool; - mappings[97] = ItemType.MagentaWool; - mappings[98] = ItemType.LightBlueWool; - mappings[99] = ItemType.YellowWool; - mappings[100] = ItemType.LimeWool; - mappings[101] = ItemType.PinkWool; - mappings[102] = ItemType.GrayWool; - mappings[103] = ItemType.LightGrayWool; - mappings[104] = ItemType.CyanWool; - mappings[105] = ItemType.PurpleWool; - mappings[106] = ItemType.BlueWool; - mappings[107] = ItemType.BrownWool; - mappings[108] = ItemType.GreenWool; - mappings[109] = ItemType.RedWool; - mappings[110] = ItemType.BlackWool; - mappings[111] = ItemType.Dandelion; - mappings[112] = ItemType.Poppy; - mappings[113] = ItemType.BlueOrchid; - mappings[114] = ItemType.Allium; - mappings[115] = ItemType.AzureBluet; - mappings[116] = ItemType.RedTulip; - mappings[117] = ItemType.OrangeTulip; - mappings[118] = ItemType.WhiteTulip; - mappings[119] = ItemType.PinkTulip; - mappings[120] = ItemType.OxeyeDaisy; - mappings[121] = ItemType.Cornflower; - mappings[122] = ItemType.LilyOfTheValley; - mappings[123] = ItemType.WitherRose; - mappings[124] = ItemType.BrownMushroom; - mappings[125] = ItemType.RedMushroom; - mappings[126] = ItemType.CrimsonFungus; - mappings[127] = ItemType.WarpedFungus; - mappings[128] = ItemType.CrimsonRoots; - mappings[129] = ItemType.WarpedRoots; - mappings[130] = ItemType.NetherSprouts; - mappings[131] = ItemType.WeepingVines; - mappings[132] = ItemType.TwistingVines; - mappings[133] = ItemType.SugarCane; - mappings[134] = ItemType.Kelp; - mappings[135] = ItemType.Bamboo; - mappings[136] = ItemType.GoldBlock; - mappings[137] = ItemType.IronBlock; - mappings[138] = ItemType.OakSlab; - mappings[139] = ItemType.SpruceSlab; - mappings[140] = ItemType.BirchSlab; - mappings[141] = ItemType.JungleSlab; - mappings[142] = ItemType.AcaciaSlab; - mappings[143] = ItemType.DarkOakSlab; - mappings[144] = ItemType.CrimsonSlab; - mappings[145] = ItemType.WarpedSlab; - mappings[146] = ItemType.StoneSlab; - mappings[147] = ItemType.SmoothStoneSlab; - mappings[148] = ItemType.SandstoneSlab; - mappings[149] = ItemType.CutSandstoneSlab; - mappings[150] = ItemType.PetrifiedOakSlab; - mappings[151] = ItemType.CobblestoneSlab; - mappings[152] = ItemType.BrickSlab; - mappings[153] = ItemType.StoneBrickSlab; - mappings[154] = ItemType.NetherBrickSlab; - mappings[155] = ItemType.QuartzSlab; - mappings[156] = ItemType.RedSandstoneSlab; - mappings[157] = ItemType.CutRedSandstoneSlab; - mappings[158] = ItemType.PurpurSlab; - mappings[159] = ItemType.PrismarineSlab; - mappings[160] = ItemType.PrismarineBrickSlab; - mappings[161] = ItemType.DarkPrismarineSlab; - mappings[162] = ItemType.SmoothQuartz; - mappings[163] = ItemType.SmoothRedSandstone; - mappings[164] = ItemType.SmoothSandstone; - mappings[165] = ItemType.SmoothStone; - mappings[166] = ItemType.Bricks; - mappings[167] = ItemType.Tnt; - mappings[168] = ItemType.Bookshelf; - mappings[169] = ItemType.MossyCobblestone; - mappings[170] = ItemType.Obsidian; - mappings[171] = ItemType.Torch; - mappings[172] = ItemType.EndRod; - mappings[173] = ItemType.ChorusPlant; - mappings[174] = ItemType.ChorusFlower; - mappings[175] = ItemType.PurpurBlock; - mappings[176] = ItemType.PurpurPillar; - mappings[177] = ItemType.PurpurStairs; - mappings[178] = ItemType.Spawner; - mappings[179] = ItemType.OakStairs; - mappings[180] = ItemType.Chest; - mappings[181] = ItemType.DiamondOre; - mappings[182] = ItemType.DiamondBlock; - mappings[183] = ItemType.CraftingTable; - mappings[184] = ItemType.Farmland; - mappings[185] = ItemType.Furnace; - mappings[186] = ItemType.Ladder; - mappings[187] = ItemType.Rail; - mappings[188] = ItemType.CobblestoneStairs; - mappings[189] = ItemType.Lever; - mappings[190] = ItemType.StonePressurePlate; - mappings[191] = ItemType.OakPressurePlate; - mappings[192] = ItemType.SprucePressurePlate; - mappings[193] = ItemType.BirchPressurePlate; - mappings[194] = ItemType.JunglePressurePlate; - mappings[195] = ItemType.AcaciaPressurePlate; - mappings[196] = ItemType.DarkOakPressurePlate; - mappings[197] = ItemType.CrimsonPressurePlate; - mappings[198] = ItemType.WarpedPressurePlate; - mappings[199] = ItemType.PolishedBlackstonePressurePlate; - mappings[200] = ItemType.RedstoneOre; - mappings[201] = ItemType.RedstoneTorch; - mappings[202] = ItemType.Snow; - mappings[203] = ItemType.Ice; - mappings[204] = ItemType.SnowBlock; - mappings[205] = ItemType.Cactus; - mappings[206] = ItemType.Clay; - mappings[207] = ItemType.Jukebox; - mappings[208] = ItemType.OakFence; - mappings[209] = ItemType.SpruceFence; - mappings[210] = ItemType.BirchFence; - mappings[211] = ItemType.JungleFence; - mappings[212] = ItemType.AcaciaFence; - mappings[213] = ItemType.DarkOakFence; - mappings[214] = ItemType.CrimsonFence; - mappings[215] = ItemType.WarpedFence; - mappings[216] = ItemType.Pumpkin; - mappings[217] = ItemType.CarvedPumpkin; - mappings[218] = ItemType.Netherrack; - mappings[219] = ItemType.SoulSand; - mappings[220] = ItemType.SoulSoil; - mappings[221] = ItemType.Basalt; - mappings[222] = ItemType.PolishedBasalt; - mappings[223] = ItemType.SoulTorch; - mappings[224] = ItemType.Glowstone; - mappings[225] = ItemType.JackOLantern; - mappings[226] = ItemType.OakTrapdoor; - mappings[227] = ItemType.SpruceTrapdoor; - mappings[228] = ItemType.BirchTrapdoor; - mappings[229] = ItemType.JungleTrapdoor; - mappings[230] = ItemType.AcaciaTrapdoor; - mappings[231] = ItemType.DarkOakTrapdoor; - mappings[232] = ItemType.CrimsonTrapdoor; - mappings[233] = ItemType.WarpedTrapdoor; - mappings[234] = ItemType.InfestedStone; - mappings[235] = ItemType.InfestedCobblestone; - mappings[236] = ItemType.InfestedStoneBricks; - mappings[237] = ItemType.InfestedMossyStoneBricks; - mappings[238] = ItemType.InfestedCrackedStoneBricks; - mappings[239] = ItemType.InfestedChiseledStoneBricks; - mappings[240] = ItemType.StoneBricks; - mappings[241] = ItemType.MossyStoneBricks; - mappings[242] = ItemType.CrackedStoneBricks; - mappings[243] = ItemType.ChiseledStoneBricks; - mappings[244] = ItemType.BrownMushroomBlock; - mappings[245] = ItemType.RedMushroomBlock; - mappings[246] = ItemType.MushroomStem; - mappings[247] = ItemType.IronBars; - mappings[248] = ItemType.Chain; - mappings[249] = ItemType.GlassPane; - mappings[250] = ItemType.Melon; - mappings[251] = ItemType.Vine; - mappings[252] = ItemType.OakFenceGate; - mappings[253] = ItemType.SpruceFenceGate; - mappings[254] = ItemType.BirchFenceGate; - mappings[255] = ItemType.JungleFenceGate; - mappings[256] = ItemType.AcaciaFenceGate; - mappings[257] = ItemType.DarkOakFenceGate; - mappings[258] = ItemType.CrimsonFenceGate; - mappings[259] = ItemType.WarpedFenceGate; - mappings[260] = ItemType.BrickStairs; - mappings[261] = ItemType.StoneBrickStairs; - mappings[262] = ItemType.Mycelium; - mappings[263] = ItemType.LilyPad; - mappings[264] = ItemType.NetherBricks; - mappings[265] = ItemType.CrackedNetherBricks; - mappings[266] = ItemType.ChiseledNetherBricks; - mappings[267] = ItemType.NetherBrickFence; - mappings[268] = ItemType.NetherBrickStairs; - mappings[269] = ItemType.EnchantingTable; - mappings[270] = ItemType.EndPortalFrame; - mappings[271] = ItemType.EndStone; - mappings[272] = ItemType.EndStoneBricks; - mappings[273] = ItemType.DragonEgg; - mappings[274] = ItemType.RedstoneLamp; - mappings[275] = ItemType.SandstoneStairs; - mappings[276] = ItemType.EmeraldOre; - mappings[277] = ItemType.EnderChest; - mappings[278] = ItemType.TripwireHook; - mappings[279] = ItemType.EmeraldBlock; - mappings[280] = ItemType.SpruceStairs; - mappings[281] = ItemType.BirchStairs; - mappings[282] = ItemType.JungleStairs; - mappings[283] = ItemType.CrimsonStairs; - mappings[284] = ItemType.WarpedStairs; - mappings[285] = ItemType.CommandBlock; - mappings[286] = ItemType.Beacon; - mappings[287] = ItemType.CobblestoneWall; - mappings[288] = ItemType.MossyCobblestoneWall; - mappings[289] = ItemType.BrickWall; - mappings[290] = ItemType.PrismarineWall; - mappings[291] = ItemType.RedSandstoneWall; - mappings[292] = ItemType.MossyStoneBrickWall; - mappings[293] = ItemType.GraniteWall; - mappings[294] = ItemType.StoneBrickWall; - mappings[295] = ItemType.NetherBrickWall; - mappings[296] = ItemType.AndesiteWall; - mappings[297] = ItemType.RedNetherBrickWall; - mappings[298] = ItemType.SandstoneWall; - mappings[299] = ItemType.EndStoneBrickWall; - mappings[300] = ItemType.DioriteWall; - mappings[301] = ItemType.BlackstoneWall; - mappings[302] = ItemType.PolishedBlackstoneWall; - mappings[303] = ItemType.PolishedBlackstoneBrickWall; - mappings[304] = ItemType.StoneButton; - mappings[305] = ItemType.OakButton; - mappings[306] = ItemType.SpruceButton; - mappings[307] = ItemType.BirchButton; - mappings[308] = ItemType.JungleButton; - mappings[309] = ItemType.AcaciaButton; - mappings[310] = ItemType.DarkOakButton; - mappings[311] = ItemType.CrimsonButton; - mappings[312] = ItemType.WarpedButton; - mappings[313] = ItemType.PolishedBlackstoneButton; - mappings[314] = ItemType.Anvil; - mappings[315] = ItemType.ChippedAnvil; - mappings[316] = ItemType.DamagedAnvil; - mappings[317] = ItemType.TrappedChest; - mappings[318] = ItemType.LightWeightedPressurePlate; - mappings[319] = ItemType.HeavyWeightedPressurePlate; - mappings[320] = ItemType.DaylightDetector; - mappings[321] = ItemType.RedstoneBlock; - mappings[322] = ItemType.NetherQuartzOre; - mappings[323] = ItemType.Hopper; - mappings[324] = ItemType.ChiseledQuartzBlock; - mappings[325] = ItemType.QuartzBlock; - mappings[326] = ItemType.QuartzBricks; - mappings[327] = ItemType.QuartzPillar; - mappings[328] = ItemType.QuartzStairs; - mappings[329] = ItemType.ActivatorRail; - mappings[330] = ItemType.Dropper; - mappings[331] = ItemType.WhiteTerracotta; - mappings[332] = ItemType.OrangeTerracotta; - mappings[333] = ItemType.MagentaTerracotta; - mappings[334] = ItemType.LightBlueTerracotta; - mappings[335] = ItemType.YellowTerracotta; - mappings[336] = ItemType.LimeTerracotta; - mappings[337] = ItemType.PinkTerracotta; - mappings[338] = ItemType.GrayTerracotta; - mappings[339] = ItemType.LightGrayTerracotta; - mappings[340] = ItemType.CyanTerracotta; - mappings[341] = ItemType.PurpleTerracotta; - mappings[342] = ItemType.BlueTerracotta; - mappings[343] = ItemType.BrownTerracotta; - mappings[344] = ItemType.GreenTerracotta; - mappings[345] = ItemType.RedTerracotta; - mappings[346] = ItemType.BlackTerracotta; - mappings[347] = ItemType.Barrier; - mappings[348] = ItemType.IronTrapdoor; - mappings[349] = ItemType.HayBlock; - mappings[350] = ItemType.WhiteCarpet; - mappings[351] = ItemType.OrangeCarpet; - mappings[352] = ItemType.MagentaCarpet; - mappings[353] = ItemType.LightBlueCarpet; - mappings[354] = ItemType.YellowCarpet; - mappings[355] = ItemType.LimeCarpet; - mappings[356] = ItemType.PinkCarpet; - mappings[357] = ItemType.GrayCarpet; - mappings[358] = ItemType.LightGrayCarpet; - mappings[359] = ItemType.CyanCarpet; - mappings[360] = ItemType.PurpleCarpet; - mappings[361] = ItemType.BlueCarpet; - mappings[362] = ItemType.BrownCarpet; - mappings[363] = ItemType.GreenCarpet; - mappings[364] = ItemType.RedCarpet; - mappings[365] = ItemType.BlackCarpet; - mappings[366] = ItemType.Terracotta; - mappings[367] = ItemType.CoalBlock; - mappings[368] = ItemType.PackedIce; - mappings[369] = ItemType.AcaciaStairs; - mappings[370] = ItemType.DarkOakStairs; - mappings[371] = ItemType.SlimeBlock; - mappings[372] = ItemType.DirtPath; - mappings[373] = ItemType.Sunflower; - mappings[374] = ItemType.Lilac; - mappings[375] = ItemType.RoseBush; - mappings[376] = ItemType.Peony; - mappings[377] = ItemType.TallGrass; - mappings[378] = ItemType.LargeFern; - mappings[379] = ItemType.WhiteStainedGlass; - mappings[380] = ItemType.OrangeStainedGlass; - mappings[381] = ItemType.MagentaStainedGlass; - mappings[382] = ItemType.LightBlueStainedGlass; - mappings[383] = ItemType.YellowStainedGlass; - mappings[384] = ItemType.LimeStainedGlass; - mappings[385] = ItemType.PinkStainedGlass; - mappings[386] = ItemType.GrayStainedGlass; - mappings[387] = ItemType.LightGrayStainedGlass; - mappings[388] = ItemType.CyanStainedGlass; - mappings[389] = ItemType.PurpleStainedGlass; - mappings[390] = ItemType.BlueStainedGlass; - mappings[391] = ItemType.BrownStainedGlass; - mappings[392] = ItemType.GreenStainedGlass; - mappings[393] = ItemType.RedStainedGlass; - mappings[394] = ItemType.BlackStainedGlass; - mappings[395] = ItemType.WhiteStainedGlassPane; - mappings[396] = ItemType.OrangeStainedGlassPane; - mappings[397] = ItemType.MagentaStainedGlassPane; - mappings[398] = ItemType.LightBlueStainedGlassPane; - mappings[399] = ItemType.YellowStainedGlassPane; - mappings[400] = ItemType.LimeStainedGlassPane; - mappings[401] = ItemType.PinkStainedGlassPane; - mappings[402] = ItemType.GrayStainedGlassPane; - mappings[403] = ItemType.LightGrayStainedGlassPane; - mappings[404] = ItemType.CyanStainedGlassPane; - mappings[405] = ItemType.PurpleStainedGlassPane; - mappings[406] = ItemType.BlueStainedGlassPane; - mappings[407] = ItemType.BrownStainedGlassPane; - mappings[408] = ItemType.GreenStainedGlassPane; - mappings[409] = ItemType.RedStainedGlassPane; - mappings[410] = ItemType.BlackStainedGlassPane; - mappings[411] = ItemType.Prismarine; - mappings[412] = ItemType.PrismarineBricks; - mappings[413] = ItemType.DarkPrismarine; - mappings[414] = ItemType.PrismarineStairs; - mappings[415] = ItemType.PrismarineBrickStairs; - mappings[416] = ItemType.DarkPrismarineStairs; - mappings[417] = ItemType.SeaLantern; - mappings[418] = ItemType.RedSandstone; - mappings[419] = ItemType.ChiseledRedSandstone; - mappings[420] = ItemType.CutRedSandstone; - mappings[421] = ItemType.RedSandstoneStairs; - mappings[422] = ItemType.RepeatingCommandBlock; - mappings[423] = ItemType.ChainCommandBlock; - mappings[424] = ItemType.MagmaBlock; - mappings[425] = ItemType.NetherWartBlock; - mappings[426] = ItemType.WarpedWartBlock; - mappings[427] = ItemType.RedNetherBricks; - mappings[428] = ItemType.BoneBlock; - mappings[429] = ItemType.StructureVoid; - mappings[430] = ItemType.Observer; - mappings[431] = ItemType.ShulkerBox; - mappings[432] = ItemType.WhiteShulkerBox; - mappings[433] = ItemType.OrangeShulkerBox; - mappings[434] = ItemType.MagentaShulkerBox; - mappings[435] = ItemType.LightBlueShulkerBox; - mappings[436] = ItemType.YellowShulkerBox; - mappings[437] = ItemType.LimeShulkerBox; - mappings[438] = ItemType.PinkShulkerBox; - mappings[439] = ItemType.GrayShulkerBox; - mappings[440] = ItemType.LightGrayShulkerBox; - mappings[441] = ItemType.CyanShulkerBox; - mappings[442] = ItemType.PurpleShulkerBox; - mappings[443] = ItemType.BlueShulkerBox; - mappings[444] = ItemType.BrownShulkerBox; - mappings[445] = ItemType.GreenShulkerBox; - mappings[446] = ItemType.RedShulkerBox; - mappings[447] = ItemType.BlackShulkerBox; - mappings[448] = ItemType.WhiteGlazedTerracotta; - mappings[449] = ItemType.OrangeGlazedTerracotta; - mappings[450] = ItemType.MagentaGlazedTerracotta; - mappings[451] = ItemType.LightBlueGlazedTerracotta; - mappings[452] = ItemType.YellowGlazedTerracotta; - mappings[453] = ItemType.LimeGlazedTerracotta; - mappings[454] = ItemType.PinkGlazedTerracotta; - mappings[455] = ItemType.GrayGlazedTerracotta; - mappings[456] = ItemType.LightGrayGlazedTerracotta; - mappings[457] = ItemType.CyanGlazedTerracotta; - mappings[458] = ItemType.PurpleGlazedTerracotta; - mappings[459] = ItemType.BlueGlazedTerracotta; - mappings[460] = ItemType.BrownGlazedTerracotta; - mappings[461] = ItemType.GreenGlazedTerracotta; - mappings[462] = ItemType.RedGlazedTerracotta; - mappings[463] = ItemType.BlackGlazedTerracotta; - mappings[464] = ItemType.WhiteConcrete; - mappings[465] = ItemType.OrangeConcrete; - mappings[466] = ItemType.MagentaConcrete; - mappings[467] = ItemType.LightBlueConcrete; - mappings[468] = ItemType.YellowConcrete; - mappings[469] = ItemType.LimeConcrete; - mappings[470] = ItemType.PinkConcrete; - mappings[471] = ItemType.GrayConcrete; - mappings[472] = ItemType.LightGrayConcrete; - mappings[473] = ItemType.CyanConcrete; - mappings[474] = ItemType.PurpleConcrete; - mappings[475] = ItemType.BlueConcrete; - mappings[476] = ItemType.BrownConcrete; - mappings[477] = ItemType.GreenConcrete; - mappings[478] = ItemType.RedConcrete; - mappings[479] = ItemType.BlackConcrete; - mappings[480] = ItemType.WhiteConcretePowder; - mappings[481] = ItemType.OrangeConcretePowder; - mappings[482] = ItemType.MagentaConcretePowder; - mappings[483] = ItemType.LightBlueConcretePowder; - mappings[484] = ItemType.YellowConcretePowder; - mappings[485] = ItemType.LimeConcretePowder; - mappings[486] = ItemType.PinkConcretePowder; - mappings[487] = ItemType.GrayConcretePowder; - mappings[488] = ItemType.LightGrayConcretePowder; - mappings[489] = ItemType.CyanConcretePowder; - mappings[490] = ItemType.PurpleConcretePowder; - mappings[491] = ItemType.BlueConcretePowder; - mappings[492] = ItemType.BrownConcretePowder; - mappings[493] = ItemType.GreenConcretePowder; - mappings[494] = ItemType.RedConcretePowder; - mappings[495] = ItemType.BlackConcretePowder; - mappings[496] = ItemType.TurtleEgg; - mappings[497] = ItemType.DeadTubeCoralBlock; - mappings[498] = ItemType.DeadBrainCoralBlock; - mappings[499] = ItemType.DeadBubbleCoralBlock; - mappings[500] = ItemType.DeadFireCoralBlock; - mappings[501] = ItemType.DeadHornCoralBlock; - mappings[502] = ItemType.TubeCoralBlock; - mappings[503] = ItemType.BrainCoralBlock; - mappings[504] = ItemType.BubbleCoralBlock; - mappings[505] = ItemType.FireCoralBlock; - mappings[506] = ItemType.HornCoralBlock; - mappings[507] = ItemType.TubeCoral; - mappings[508] = ItemType.BrainCoral; - mappings[509] = ItemType.BubbleCoral; - mappings[510] = ItemType.FireCoral; - mappings[511] = ItemType.HornCoral; - mappings[512] = ItemType.DeadBrainCoral; - mappings[513] = ItemType.DeadBubbleCoral; - mappings[514] = ItemType.DeadFireCoral; - mappings[515] = ItemType.DeadHornCoral; - mappings[516] = ItemType.DeadTubeCoral; - mappings[517] = ItemType.TubeCoralFan; - mappings[518] = ItemType.BrainCoralFan; - mappings[519] = ItemType.BubbleCoralFan; - mappings[520] = ItemType.FireCoralFan; - mappings[521] = ItemType.HornCoralFan; - mappings[522] = ItemType.DeadTubeCoralFan; - mappings[523] = ItemType.DeadBrainCoralFan; - mappings[524] = ItemType.DeadBubbleCoralFan; - mappings[525] = ItemType.DeadFireCoralFan; - mappings[526] = ItemType.DeadHornCoralFan; - mappings[527] = ItemType.BlueIce; - mappings[528] = ItemType.Conduit; - mappings[529] = ItemType.PolishedGraniteStairs; - mappings[530] = ItemType.SmoothRedSandstoneStairs; - mappings[531] = ItemType.MossyStoneBrickStairs; - mappings[532] = ItemType.PolishedDioriteStairs; - mappings[533] = ItemType.MossyCobblestoneStairs; - mappings[534] = ItemType.EndStoneBrickStairs; - mappings[535] = ItemType.StoneStairs; - mappings[536] = ItemType.SmoothSandstoneStairs; - mappings[537] = ItemType.SmoothQuartzStairs; - mappings[538] = ItemType.GraniteStairs; - mappings[539] = ItemType.AndesiteStairs; - mappings[540] = ItemType.RedNetherBrickStairs; - mappings[541] = ItemType.PolishedAndesiteStairs; - mappings[542] = ItemType.DioriteStairs; - mappings[543] = ItemType.PolishedGraniteSlab; - mappings[544] = ItemType.SmoothRedSandstoneSlab; - mappings[545] = ItemType.MossyStoneBrickSlab; - mappings[546] = ItemType.PolishedDioriteSlab; - mappings[547] = ItemType.MossyCobblestoneSlab; - mappings[548] = ItemType.EndStoneBrickSlab; - mappings[549] = ItemType.SmoothSandstoneSlab; - mappings[550] = ItemType.SmoothQuartzSlab; - mappings[551] = ItemType.GraniteSlab; - mappings[552] = ItemType.AndesiteSlab; - mappings[553] = ItemType.RedNetherBrickSlab; - mappings[554] = ItemType.PolishedAndesiteSlab; - mappings[555] = ItemType.DioriteSlab; - mappings[556] = ItemType.Scaffolding; - mappings[557] = ItemType.IronDoor; - mappings[558] = ItemType.OakDoor; - mappings[559] = ItemType.SpruceDoor; - mappings[560] = ItemType.BirchDoor; - mappings[561] = ItemType.JungleDoor; - mappings[562] = ItemType.AcaciaDoor; - mappings[563] = ItemType.DarkOakDoor; - mappings[564] = ItemType.CrimsonDoor; - mappings[565] = ItemType.WarpedDoor; - mappings[566] = ItemType.Repeater; - mappings[567] = ItemType.Comparator; - mappings[568] = ItemType.StructureBlock; - mappings[569] = ItemType.Jigsaw; - mappings[570] = ItemType.TurtleHelmet; - mappings[571] = ItemType.TurtleScute; - mappings[572] = ItemType.IronShovel; - mappings[573] = ItemType.IronPickaxe; - mappings[574] = ItemType.IronAxe; - mappings[575] = ItemType.FlintAndSteel; - mappings[576] = ItemType.Apple; - mappings[577] = ItemType.Bow; - mappings[578] = ItemType.Arrow; - mappings[579] = ItemType.Coal; - mappings[580] = ItemType.Charcoal; - mappings[581] = ItemType.Diamond; - mappings[582] = ItemType.IronIngot; - mappings[583] = ItemType.GoldIngot; - mappings[584] = ItemType.NetheriteIngot; - mappings[585] = ItemType.NetheriteScrap; - mappings[586] = ItemType.IronSword; - mappings[587] = ItemType.WoodenSword; - mappings[588] = ItemType.WoodenShovel; - mappings[589] = ItemType.WoodenPickaxe; - mappings[590] = ItemType.WoodenAxe; - mappings[591] = ItemType.StoneSword; - mappings[592] = ItemType.StoneShovel; - mappings[593] = ItemType.StonePickaxe; - mappings[594] = ItemType.StoneAxe; - mappings[595] = ItemType.DiamondSword; - mappings[596] = ItemType.DiamondShovel; - mappings[597] = ItemType.DiamondPickaxe; - mappings[598] = ItemType.DiamondAxe; - mappings[599] = ItemType.Stick; - mappings[600] = ItemType.Bowl; - mappings[601] = ItemType.MushroomStew; - mappings[602] = ItemType.GoldenSword; - mappings[603] = ItemType.GoldenShovel; - mappings[604] = ItemType.GoldenPickaxe; - mappings[605] = ItemType.GoldenAxe; - mappings[606] = ItemType.NetheriteSword; - mappings[607] = ItemType.NetheriteShovel; - mappings[608] = ItemType.NetheritePickaxe; - mappings[609] = ItemType.NetheriteAxe; - mappings[610] = ItemType.String; - mappings[611] = ItemType.Feather; - mappings[612] = ItemType.Gunpowder; - mappings[613] = ItemType.WoodenHoe; - mappings[614] = ItemType.StoneHoe; - mappings[615] = ItemType.IronHoe; - mappings[616] = ItemType.DiamondHoe; - mappings[617] = ItemType.GoldenHoe; - mappings[618] = ItemType.NetheriteHoe; - mappings[619] = ItemType.WheatSeeds; - mappings[620] = ItemType.Wheat; - mappings[621] = ItemType.Bread; - mappings[622] = ItemType.LeatherHelmet; - mappings[623] = ItemType.LeatherChestplate; - mappings[624] = ItemType.LeatherLeggings; - mappings[625] = ItemType.LeatherBoots; - mappings[626] = ItemType.ChainmailHelmet; - mappings[627] = ItemType.ChainmailChestplate; - mappings[628] = ItemType.ChainmailLeggings; - mappings[629] = ItemType.ChainmailBoots; - mappings[630] = ItemType.IronHelmet; - mappings[631] = ItemType.IronChestplate; - mappings[632] = ItemType.IronLeggings; - mappings[633] = ItemType.IronBoots; - mappings[634] = ItemType.DiamondHelmet; - mappings[635] = ItemType.DiamondChestplate; - mappings[636] = ItemType.DiamondLeggings; - mappings[637] = ItemType.DiamondBoots; - mappings[638] = ItemType.GoldenHelmet; - mappings[639] = ItemType.GoldenChestplate; - mappings[640] = ItemType.GoldenLeggings; - mappings[641] = ItemType.GoldenBoots; - mappings[642] = ItemType.NetheriteHelmet; - mappings[643] = ItemType.NetheriteChestplate; - mappings[644] = ItemType.NetheriteLeggings; - mappings[645] = ItemType.NetheriteBoots; - mappings[646] = ItemType.Flint; - mappings[647] = ItemType.Porkchop; - mappings[648] = ItemType.CookedPorkchop; - mappings[649] = ItemType.Painting; - mappings[650] = ItemType.GoldenApple; - mappings[651] = ItemType.EnchantedGoldenApple; - mappings[652] = ItemType.OakSign; - mappings[653] = ItemType.SpruceSign; - mappings[654] = ItemType.BirchSign; - mappings[655] = ItemType.JungleSign; - mappings[656] = ItemType.AcaciaSign; - mappings[657] = ItemType.DarkOakSign; - mappings[658] = ItemType.CrimsonSign; - mappings[659] = ItemType.WarpedSign; - mappings[660] = ItemType.Bucket; - mappings[661] = ItemType.WaterBucket; - mappings[662] = ItemType.LavaBucket; - mappings[663] = ItemType.Minecart; - mappings[664] = ItemType.Saddle; - mappings[665] = ItemType.Redstone; - mappings[666] = ItemType.Snowball; - mappings[667] = ItemType.OakBoat; - mappings[668] = ItemType.Leather; - mappings[669] = ItemType.MilkBucket; - mappings[670] = ItemType.PufferfishBucket; - mappings[671] = ItemType.SalmonBucket; - mappings[672] = ItemType.CodBucket; - mappings[673] = ItemType.TropicalFishBucket; - mappings[674] = ItemType.Brick; - mappings[675] = ItemType.ClayBall; - mappings[676] = ItemType.DriedKelpBlock; - mappings[677] = ItemType.Paper; - mappings[678] = ItemType.Book; - mappings[679] = ItemType.SlimeBall; - mappings[680] = ItemType.ChestMinecart; - mappings[681] = ItemType.FurnaceMinecart; - mappings[682] = ItemType.Egg; - mappings[683] = ItemType.Compass; - mappings[684] = ItemType.FishingRod; - mappings[685] = ItemType.Clock; - mappings[686] = ItemType.GlowstoneDust; - mappings[687] = ItemType.Cod; - mappings[688] = ItemType.Salmon; - mappings[689] = ItemType.TropicalFish; - mappings[690] = ItemType.Pufferfish; - mappings[691] = ItemType.CookedCod; - mappings[692] = ItemType.CookedSalmon; - mappings[693] = ItemType.InkSac; - mappings[694] = ItemType.RedDye; - mappings[695] = ItemType.GreenDye; - mappings[696] = ItemType.CocoaBeans; - mappings[697] = ItemType.LapisLazuli; - mappings[698] = ItemType.PurpleDye; - mappings[699] = ItemType.CyanDye; - mappings[700] = ItemType.LightGrayDye; - mappings[701] = ItemType.GrayDye; - mappings[702] = ItemType.PinkDye; - mappings[703] = ItemType.LimeDye; - mappings[704] = ItemType.YellowDye; - mappings[705] = ItemType.LightBlueDye; - mappings[706] = ItemType.MagentaDye; - mappings[707] = ItemType.OrangeDye; - mappings[708] = ItemType.BoneMeal; - mappings[709] = ItemType.BlueDye; - mappings[710] = ItemType.BrownDye; - mappings[711] = ItemType.BlackDye; - mappings[712] = ItemType.WhiteDye; - mappings[713] = ItemType.Bone; - mappings[714] = ItemType.Sugar; - mappings[715] = ItemType.Cake; - mappings[716] = ItemType.WhiteBed; - mappings[717] = ItemType.OrangeBed; - mappings[718] = ItemType.MagentaBed; - mappings[719] = ItemType.LightBlueBed; - mappings[720] = ItemType.YellowBed; - mappings[721] = ItemType.LimeBed; - mappings[722] = ItemType.PinkBed; - mappings[723] = ItemType.GrayBed; - mappings[724] = ItemType.LightGrayBed; - mappings[725] = ItemType.CyanBed; - mappings[726] = ItemType.PurpleBed; - mappings[727] = ItemType.BlueBed; - mappings[728] = ItemType.BrownBed; - mappings[729] = ItemType.GreenBed; - mappings[730] = ItemType.RedBed; - mappings[731] = ItemType.BlackBed; - mappings[732] = ItemType.Cookie; - mappings[733] = ItemType.FilledMap; - mappings[734] = ItemType.Shears; - mappings[735] = ItemType.MelonSlice; - mappings[736] = ItemType.DriedKelp; - mappings[737] = ItemType.PumpkinSeeds; - mappings[738] = ItemType.MelonSeeds; - mappings[739] = ItemType.Beef; - mappings[740] = ItemType.CookedBeef; - mappings[741] = ItemType.Chicken; - mappings[742] = ItemType.CookedChicken; - mappings[743] = ItemType.RottenFlesh; - mappings[744] = ItemType.EnderPearl; - mappings[745] = ItemType.BlazeRod; - mappings[746] = ItemType.GhastTear; - mappings[747] = ItemType.GoldNugget; - mappings[748] = ItemType.NetherWart; - mappings[749] = ItemType.Potion; - mappings[750] = ItemType.GlassBottle; - mappings[751] = ItemType.SpiderEye; - mappings[752] = ItemType.FermentedSpiderEye; - mappings[753] = ItemType.BlazePowder; - mappings[754] = ItemType.MagmaCream; - mappings[755] = ItemType.BrewingStand; - mappings[756] = ItemType.Cauldron; - mappings[757] = ItemType.EnderEye; - mappings[758] = ItemType.GlisteringMelonSlice; - mappings[759] = ItemType.BatSpawnEgg; - mappings[760] = ItemType.BeeSpawnEgg; - mappings[761] = ItemType.BlazeSpawnEgg; - mappings[762] = ItemType.CatSpawnEgg; - mappings[763] = ItemType.CaveSpiderSpawnEgg; - mappings[764] = ItemType.ChickenSpawnEgg; - mappings[765] = ItemType.CodSpawnEgg; - mappings[766] = ItemType.CowSpawnEgg; - mappings[767] = ItemType.CreeperSpawnEgg; - mappings[768] = ItemType.DolphinSpawnEgg; - mappings[769] = ItemType.DonkeySpawnEgg; - mappings[770] = ItemType.DrownedSpawnEgg; - mappings[771] = ItemType.ElderGuardianSpawnEgg; - mappings[772] = ItemType.EndermanSpawnEgg; - mappings[773] = ItemType.EndermiteSpawnEgg; - mappings[774] = ItemType.EvokerSpawnEgg; - mappings[775] = ItemType.FoxSpawnEgg; - mappings[776] = ItemType.GhastSpawnEgg; - mappings[777] = ItemType.GuardianSpawnEgg; - mappings[778] = ItemType.HoglinSpawnEgg; - mappings[779] = ItemType.HorseSpawnEgg; - mappings[780] = ItemType.HuskSpawnEgg; - mappings[781] = ItemType.LlamaSpawnEgg; - mappings[782] = ItemType.MagmaCubeSpawnEgg; - mappings[783] = ItemType.MooshroomSpawnEgg; - mappings[784] = ItemType.MuleSpawnEgg; - mappings[785] = ItemType.OcelotSpawnEgg; - mappings[786] = ItemType.PandaSpawnEgg; - mappings[787] = ItemType.ParrotSpawnEgg; - mappings[788] = ItemType.PhantomSpawnEgg; - mappings[789] = ItemType.PigSpawnEgg; - mappings[790] = ItemType.PiglinSpawnEgg; - mappings[791] = ItemType.PillagerSpawnEgg; - mappings[792] = ItemType.PolarBearSpawnEgg; - mappings[793] = ItemType.PufferfishSpawnEgg; - mappings[794] = ItemType.RabbitSpawnEgg; - mappings[795] = ItemType.RavagerSpawnEgg; - mappings[796] = ItemType.SalmonSpawnEgg; - mappings[797] = ItemType.SheepSpawnEgg; - mappings[798] = ItemType.ShulkerSpawnEgg; - mappings[799] = ItemType.SilverfishSpawnEgg; - mappings[800] = ItemType.SkeletonSpawnEgg; - mappings[801] = ItemType.SkeletonHorseSpawnEgg; - mappings[802] = ItemType.SlimeSpawnEgg; - mappings[803] = ItemType.SpiderSpawnEgg; - mappings[804] = ItemType.SquidSpawnEgg; - mappings[805] = ItemType.StraySpawnEgg; - mappings[806] = ItemType.StriderSpawnEgg; - mappings[807] = ItemType.TraderLlamaSpawnEgg; - mappings[808] = ItemType.TropicalFishSpawnEgg; - mappings[809] = ItemType.TurtleSpawnEgg; - mappings[810] = ItemType.VexSpawnEgg; - mappings[811] = ItemType.VillagerSpawnEgg; - mappings[812] = ItemType.VindicatorSpawnEgg; - mappings[813] = ItemType.WanderingTraderSpawnEgg; - mappings[814] = ItemType.WitchSpawnEgg; - mappings[815] = ItemType.WitherSkeletonSpawnEgg; - mappings[816] = ItemType.WolfSpawnEgg; - mappings[817] = ItemType.ZoglinSpawnEgg; - mappings[818] = ItemType.ZombieSpawnEgg; - mappings[819] = ItemType.ZombieHorseSpawnEgg; - mappings[820] = ItemType.ZombieVillagerSpawnEgg; - mappings[821] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[822] = ItemType.ExperienceBottle; - mappings[823] = ItemType.FireCharge; - mappings[824] = ItemType.WritableBook; - mappings[825] = ItemType.WrittenBook; - mappings[826] = ItemType.Emerald; - mappings[827] = ItemType.ItemFrame; - mappings[828] = ItemType.FlowerPot; - mappings[829] = ItemType.Carrot; - mappings[830] = ItemType.Potato; - mappings[831] = ItemType.BakedPotato; - mappings[832] = ItemType.PoisonousPotato; - mappings[833] = ItemType.Map; - mappings[834] = ItemType.GoldenCarrot; - mappings[835] = ItemType.SkeletonSkull; - mappings[836] = ItemType.WitherSkeletonSkull; - mappings[837] = ItemType.PlayerHead; - mappings[838] = ItemType.ZombieHead; - mappings[839] = ItemType.CreeperHead; - mappings[840] = ItemType.DragonHead; - mappings[841] = ItemType.CarrotOnAStick; - mappings[842] = ItemType.WarpedFungusOnAStick; - mappings[843] = ItemType.NetherStar; - mappings[844] = ItemType.PumpkinPie; - mappings[845] = ItemType.FireworkRocket; - mappings[846] = ItemType.FireworkStar; - mappings[847] = ItemType.EnchantedBook; - mappings[848] = ItemType.NetherBrick; - mappings[849] = ItemType.Quartz; - mappings[850] = ItemType.TntMinecart; - mappings[851] = ItemType.HopperMinecart; - mappings[852] = ItemType.PrismarineShard; - mappings[853] = ItemType.PrismarineCrystals; - mappings[854] = ItemType.Rabbit; - mappings[855] = ItemType.CookedRabbit; - mappings[856] = ItemType.RabbitStew; - mappings[857] = ItemType.RabbitFoot; - mappings[858] = ItemType.RabbitHide; - mappings[859] = ItemType.ArmorStand; - mappings[860] = ItemType.IronHorseArmor; - mappings[861] = ItemType.GoldenHorseArmor; - mappings[862] = ItemType.DiamondHorseArmor; - mappings[863] = ItemType.LeatherHorseArmor; - mappings[864] = ItemType.Lead; - mappings[865] = ItemType.NameTag; - mappings[866] = ItemType.CommandBlockMinecart; - mappings[867] = ItemType.Mutton; - mappings[868] = ItemType.CookedMutton; - mappings[869] = ItemType.WhiteBanner; - mappings[870] = ItemType.OrangeBanner; - mappings[871] = ItemType.MagentaBanner; - mappings[872] = ItemType.LightBlueBanner; - mappings[873] = ItemType.YellowBanner; - mappings[874] = ItemType.LimeBanner; - mappings[875] = ItemType.PinkBanner; - mappings[876] = ItemType.GrayBanner; - mappings[877] = ItemType.LightGrayBanner; - mappings[878] = ItemType.CyanBanner; - mappings[879] = ItemType.PurpleBanner; - mappings[880] = ItemType.BlueBanner; - mappings[881] = ItemType.BrownBanner; - mappings[882] = ItemType.GreenBanner; - mappings[883] = ItemType.RedBanner; - mappings[884] = ItemType.BlackBanner; - mappings[885] = ItemType.EndCrystal; - mappings[886] = ItemType.ChorusFruit; - mappings[887] = ItemType.PoppedChorusFruit; - mappings[888] = ItemType.Beetroot; - mappings[889] = ItemType.BeetrootSeeds; - mappings[890] = ItemType.BeetrootSoup; - mappings[891] = ItemType.DragonBreath; - mappings[892] = ItemType.SplashPotion; - mappings[893] = ItemType.SpectralArrow; - mappings[894] = ItemType.TippedArrow; - mappings[895] = ItemType.LingeringPotion; - mappings[896] = ItemType.Shield; - mappings[897] = ItemType.Elytra; - mappings[898] = ItemType.SpruceBoat; - mappings[899] = ItemType.BirchBoat; - mappings[900] = ItemType.JungleBoat; - mappings[901] = ItemType.AcaciaBoat; - mappings[902] = ItemType.DarkOakBoat; - mappings[903] = ItemType.TotemOfUndying; - mappings[904] = ItemType.ShulkerShell; - mappings[905] = ItemType.IronNugget; - mappings[906] = ItemType.KnowledgeBook; - mappings[907] = ItemType.DebugStick; - mappings[908] = ItemType.MusicDisc13; - mappings[909] = ItemType.MusicDiscCat; - mappings[910] = ItemType.MusicDiscBlocks; - mappings[911] = ItemType.MusicDiscChirp; - mappings[912] = ItemType.MusicDiscFar; - mappings[913] = ItemType.MusicDiscMall; - mappings[914] = ItemType.MusicDiscMellohi; - mappings[915] = ItemType.MusicDiscStal; - mappings[916] = ItemType.MusicDiscStrad; - mappings[917] = ItemType.MusicDiscWard; - mappings[918] = ItemType.MusicDisc11; - mappings[919] = ItemType.MusicDiscWait; - mappings[920] = ItemType.MusicDiscPigstep; - mappings[921] = ItemType.Trident; - mappings[922] = ItemType.PhantomMembrane; - mappings[923] = ItemType.NautilusShell; - mappings[924] = ItemType.HeartOfTheSea; - mappings[925] = ItemType.Crossbow; - mappings[926] = ItemType.SuspiciousStew; - mappings[927] = ItemType.Loom; - mappings[928] = ItemType.FlowerBannerPattern; - mappings[929] = ItemType.CreeperBannerPattern; - mappings[930] = ItemType.SkullBannerPattern; - mappings[931] = ItemType.MojangBannerPattern; - mappings[932] = ItemType.GlobeBannerPattern; - mappings[933] = ItemType.PiglinBannerPattern; - mappings[934] = ItemType.Composter; - mappings[935] = ItemType.Barrel; - mappings[936] = ItemType.Smoker; - mappings[937] = ItemType.BlastFurnace; - mappings[938] = ItemType.CartographyTable; - mappings[939] = ItemType.FletchingTable; - mappings[940] = ItemType.Grindstone; - mappings[941] = ItemType.Lectern; - mappings[942] = ItemType.SmithingTable; - mappings[943] = ItemType.Stonecutter; - mappings[944] = ItemType.Bell; - mappings[945] = ItemType.Lantern; - mappings[946] = ItemType.SoulLantern; - mappings[947] = ItemType.SweetBerries; - mappings[948] = ItemType.Campfire; - mappings[949] = ItemType.SoulCampfire; - mappings[950] = ItemType.Shroomlight; - mappings[951] = ItemType.Honeycomb; - mappings[952] = ItemType.BeeNest; - mappings[953] = ItemType.Beehive; - mappings[954] = ItemType.HoneyBottle; - mappings[955] = ItemType.HoneyBlock; - mappings[956] = ItemType.HoneycombBlock; - mappings[957] = ItemType.Lodestone; - mappings[958] = ItemType.NetheriteBlock; - mappings[959] = ItemType.AncientDebris; - mappings[960] = ItemType.Target; - mappings[961] = ItemType.CryingObsidian; - mappings[962] = ItemType.Blackstone; - mappings[963] = ItemType.BlackstoneSlab; - mappings[964] = ItemType.BlackstoneStairs; - mappings[965] = ItemType.GildedBlackstone; - mappings[966] = ItemType.PolishedBlackstone; - mappings[967] = ItemType.PolishedBlackstoneSlab; - mappings[968] = ItemType.PolishedBlackstoneStairs; - mappings[969] = ItemType.ChiseledPolishedBlackstone; - mappings[970] = ItemType.PolishedBlackstoneBricks; - mappings[971] = ItemType.PolishedBlackstoneBrickSlab; - mappings[972] = ItemType.PolishedBlackstoneBrickStairs; - mappings[973] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[974] = ItemType.RespawnAnchor; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1162.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette1162.cs deleted file mode 100644 index 5a82eef4ba..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1162.cs +++ /dev/null @@ -1,998 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - /// - /// For MC 1.16.2 - /// Generated by ItemPaletteGenerator.cs - /// - public class ItemPalette1162 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette1162() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.GrassBlock; - mappings[9] = ItemType.Dirt; - mappings[10] = ItemType.CoarseDirt; - mappings[11] = ItemType.Podzol; - mappings[12] = ItemType.CrimsonNylium; - mappings[13] = ItemType.WarpedNylium; - mappings[14] = ItemType.Cobblestone; - mappings[15] = ItemType.OakPlanks; - mappings[16] = ItemType.SprucePlanks; - mappings[17] = ItemType.BirchPlanks; - mappings[18] = ItemType.JunglePlanks; - mappings[19] = ItemType.AcaciaPlanks; - mappings[20] = ItemType.DarkOakPlanks; - mappings[21] = ItemType.CrimsonPlanks; - mappings[22] = ItemType.WarpedPlanks; - mappings[23] = ItemType.OakSapling; - mappings[24] = ItemType.SpruceSapling; - mappings[25] = ItemType.BirchSapling; - mappings[26] = ItemType.JungleSapling; - mappings[27] = ItemType.AcaciaSapling; - mappings[28] = ItemType.DarkOakSapling; - mappings[29] = ItemType.Bedrock; - mappings[30] = ItemType.Sand; - mappings[31] = ItemType.RedSand; - mappings[32] = ItemType.Gravel; - mappings[33] = ItemType.GoldOre; - mappings[34] = ItemType.IronOre; - mappings[35] = ItemType.CoalOre; - mappings[36] = ItemType.NetherGoldOre; - mappings[37] = ItemType.OakLog; - mappings[38] = ItemType.SpruceLog; - mappings[39] = ItemType.BirchLog; - mappings[40] = ItemType.JungleLog; - mappings[41] = ItemType.AcaciaLog; - mappings[42] = ItemType.DarkOakLog; - mappings[43] = ItemType.CrimsonStem; - mappings[44] = ItemType.WarpedStem; - mappings[45] = ItemType.StrippedOakLog; - mappings[46] = ItemType.StrippedSpruceLog; - mappings[47] = ItemType.StrippedBirchLog; - mappings[48] = ItemType.StrippedJungleLog; - mappings[49] = ItemType.StrippedAcaciaLog; - mappings[50] = ItemType.StrippedDarkOakLog; - mappings[51] = ItemType.StrippedCrimsonStem; - mappings[52] = ItemType.StrippedWarpedStem; - mappings[53] = ItemType.StrippedOakWood; - mappings[54] = ItemType.StrippedSpruceWood; - mappings[55] = ItemType.StrippedBirchWood; - mappings[56] = ItemType.StrippedJungleWood; - mappings[57] = ItemType.StrippedAcaciaWood; - mappings[58] = ItemType.StrippedDarkOakWood; - mappings[59] = ItemType.StrippedCrimsonHyphae; - mappings[60] = ItemType.StrippedWarpedHyphae; - mappings[61] = ItemType.OakWood; - mappings[62] = ItemType.SpruceWood; - mappings[63] = ItemType.BirchWood; - mappings[64] = ItemType.JungleWood; - mappings[65] = ItemType.AcaciaWood; - mappings[66] = ItemType.DarkOakWood; - mappings[67] = ItemType.CrimsonHyphae; - mappings[68] = ItemType.WarpedHyphae; - mappings[69] = ItemType.OakLeaves; - mappings[70] = ItemType.SpruceLeaves; - mappings[71] = ItemType.BirchLeaves; - mappings[72] = ItemType.JungleLeaves; - mappings[73] = ItemType.AcaciaLeaves; - mappings[74] = ItemType.DarkOakLeaves; - mappings[75] = ItemType.Sponge; - mappings[76] = ItemType.WetSponge; - mappings[77] = ItemType.Glass; - mappings[78] = ItemType.LapisOre; - mappings[79] = ItemType.LapisBlock; - mappings[80] = ItemType.Dispenser; - mappings[81] = ItemType.Sandstone; - mappings[82] = ItemType.ChiseledSandstone; - mappings[83] = ItemType.CutSandstone; - mappings[84] = ItemType.NoteBlock; - mappings[85] = ItemType.PoweredRail; - mappings[86] = ItemType.DetectorRail; - mappings[87] = ItemType.StickyPiston; - mappings[88] = ItemType.Cobweb; - mappings[89] = ItemType.ShortGrass; - mappings[90] = ItemType.Fern; - mappings[91] = ItemType.DeadBush; - mappings[92] = ItemType.Seagrass; - mappings[93] = ItemType.SeaPickle; - mappings[94] = ItemType.Piston; - mappings[95] = ItemType.WhiteWool; - mappings[96] = ItemType.OrangeWool; - mappings[97] = ItemType.MagentaWool; - mappings[98] = ItemType.LightBlueWool; - mappings[99] = ItemType.YellowWool; - mappings[100] = ItemType.LimeWool; - mappings[101] = ItemType.PinkWool; - mappings[102] = ItemType.GrayWool; - mappings[103] = ItemType.LightGrayWool; - mappings[104] = ItemType.CyanWool; - mappings[105] = ItemType.PurpleWool; - mappings[106] = ItemType.BlueWool; - mappings[107] = ItemType.BrownWool; - mappings[108] = ItemType.GreenWool; - mappings[109] = ItemType.RedWool; - mappings[110] = ItemType.BlackWool; - mappings[111] = ItemType.Dandelion; - mappings[112] = ItemType.Poppy; - mappings[113] = ItemType.BlueOrchid; - mappings[114] = ItemType.Allium; - mappings[115] = ItemType.AzureBluet; - mappings[116] = ItemType.RedTulip; - mappings[117] = ItemType.OrangeTulip; - mappings[118] = ItemType.WhiteTulip; - mappings[119] = ItemType.PinkTulip; - mappings[120] = ItemType.OxeyeDaisy; - mappings[121] = ItemType.Cornflower; - mappings[122] = ItemType.LilyOfTheValley; - mappings[123] = ItemType.WitherRose; - mappings[124] = ItemType.BrownMushroom; - mappings[125] = ItemType.RedMushroom; - mappings[126] = ItemType.CrimsonFungus; - mappings[127] = ItemType.WarpedFungus; - mappings[128] = ItemType.CrimsonRoots; - mappings[129] = ItemType.WarpedRoots; - mappings[130] = ItemType.NetherSprouts; - mappings[131] = ItemType.WeepingVines; - mappings[132] = ItemType.TwistingVines; - mappings[133] = ItemType.SugarCane; - mappings[134] = ItemType.Kelp; - mappings[135] = ItemType.Bamboo; - mappings[136] = ItemType.GoldBlock; - mappings[137] = ItemType.IronBlock; - mappings[138] = ItemType.OakSlab; - mappings[139] = ItemType.SpruceSlab; - mappings[140] = ItemType.BirchSlab; - mappings[141] = ItemType.JungleSlab; - mappings[142] = ItemType.AcaciaSlab; - mappings[143] = ItemType.DarkOakSlab; - mappings[144] = ItemType.CrimsonSlab; - mappings[145] = ItemType.WarpedSlab; - mappings[146] = ItemType.StoneSlab; - mappings[147] = ItemType.SmoothStoneSlab; - mappings[148] = ItemType.SandstoneSlab; - mappings[149] = ItemType.CutSandstoneSlab; - mappings[150] = ItemType.PetrifiedOakSlab; - mappings[151] = ItemType.CobblestoneSlab; - mappings[152] = ItemType.BrickSlab; - mappings[153] = ItemType.StoneBrickSlab; - mappings[154] = ItemType.NetherBrickSlab; - mappings[155] = ItemType.QuartzSlab; - mappings[156] = ItemType.RedSandstoneSlab; - mappings[157] = ItemType.CutRedSandstoneSlab; - mappings[158] = ItemType.PurpurSlab; - mappings[159] = ItemType.PrismarineSlab; - mappings[160] = ItemType.PrismarineBrickSlab; - mappings[161] = ItemType.DarkPrismarineSlab; - mappings[162] = ItemType.SmoothQuartz; - mappings[163] = ItemType.SmoothRedSandstone; - mappings[164] = ItemType.SmoothSandstone; - mappings[165] = ItemType.SmoothStone; - mappings[166] = ItemType.Bricks; - mappings[167] = ItemType.Tnt; - mappings[168] = ItemType.Bookshelf; - mappings[169] = ItemType.MossyCobblestone; - mappings[170] = ItemType.Obsidian; - mappings[171] = ItemType.Torch; - mappings[172] = ItemType.EndRod; - mappings[173] = ItemType.ChorusPlant; - mappings[174] = ItemType.ChorusFlower; - mappings[175] = ItemType.PurpurBlock; - mappings[176] = ItemType.PurpurPillar; - mappings[177] = ItemType.PurpurStairs; - mappings[178] = ItemType.Spawner; - mappings[179] = ItemType.OakStairs; - mappings[180] = ItemType.Chest; - mappings[181] = ItemType.DiamondOre; - mappings[182] = ItemType.DiamondBlock; - mappings[183] = ItemType.CraftingTable; - mappings[184] = ItemType.Farmland; - mappings[185] = ItemType.Furnace; - mappings[186] = ItemType.Ladder; - mappings[187] = ItemType.Rail; - mappings[188] = ItemType.CobblestoneStairs; - mappings[189] = ItemType.Lever; - mappings[190] = ItemType.StonePressurePlate; - mappings[191] = ItemType.OakPressurePlate; - mappings[192] = ItemType.SprucePressurePlate; - mappings[193] = ItemType.BirchPressurePlate; - mappings[194] = ItemType.JunglePressurePlate; - mappings[195] = ItemType.AcaciaPressurePlate; - mappings[196] = ItemType.DarkOakPressurePlate; - mappings[197] = ItemType.CrimsonPressurePlate; - mappings[198] = ItemType.WarpedPressurePlate; - mappings[199] = ItemType.PolishedBlackstonePressurePlate; - mappings[200] = ItemType.RedstoneOre; - mappings[201] = ItemType.RedstoneTorch; - mappings[202] = ItemType.Snow; - mappings[203] = ItemType.Ice; - mappings[204] = ItemType.SnowBlock; - mappings[205] = ItemType.Cactus; - mappings[206] = ItemType.Clay; - mappings[207] = ItemType.Jukebox; - mappings[208] = ItemType.OakFence; - mappings[209] = ItemType.SpruceFence; - mappings[210] = ItemType.BirchFence; - mappings[211] = ItemType.JungleFence; - mappings[212] = ItemType.AcaciaFence; - mappings[213] = ItemType.DarkOakFence; - mappings[214] = ItemType.CrimsonFence; - mappings[215] = ItemType.WarpedFence; - mappings[216] = ItemType.Pumpkin; - mappings[217] = ItemType.CarvedPumpkin; - mappings[218] = ItemType.Netherrack; - mappings[219] = ItemType.SoulSand; - mappings[220] = ItemType.SoulSoil; - mappings[221] = ItemType.Basalt; - mappings[222] = ItemType.PolishedBasalt; - mappings[223] = ItemType.SoulTorch; - mappings[224] = ItemType.Glowstone; - mappings[225] = ItemType.JackOLantern; - mappings[226] = ItemType.OakTrapdoor; - mappings[227] = ItemType.SpruceTrapdoor; - mappings[228] = ItemType.BirchTrapdoor; - mappings[229] = ItemType.JungleTrapdoor; - mappings[230] = ItemType.AcaciaTrapdoor; - mappings[231] = ItemType.DarkOakTrapdoor; - mappings[232] = ItemType.CrimsonTrapdoor; - mappings[233] = ItemType.WarpedTrapdoor; - mappings[234] = ItemType.InfestedStone; - mappings[235] = ItemType.InfestedCobblestone; - mappings[236] = ItemType.InfestedStoneBricks; - mappings[237] = ItemType.InfestedMossyStoneBricks; - mappings[238] = ItemType.InfestedCrackedStoneBricks; - mappings[239] = ItemType.InfestedChiseledStoneBricks; - mappings[240] = ItemType.StoneBricks; - mappings[241] = ItemType.MossyStoneBricks; - mappings[242] = ItemType.CrackedStoneBricks; - mappings[243] = ItemType.ChiseledStoneBricks; - mappings[244] = ItemType.BrownMushroomBlock; - mappings[245] = ItemType.RedMushroomBlock; - mappings[246] = ItemType.MushroomStem; - mappings[247] = ItemType.IronBars; - mappings[248] = ItemType.Chain; - mappings[249] = ItemType.GlassPane; - mappings[250] = ItemType.Melon; - mappings[251] = ItemType.Vine; - mappings[252] = ItemType.OakFenceGate; - mappings[253] = ItemType.SpruceFenceGate; - mappings[254] = ItemType.BirchFenceGate; - mappings[255] = ItemType.JungleFenceGate; - mappings[256] = ItemType.AcaciaFenceGate; - mappings[257] = ItemType.DarkOakFenceGate; - mappings[258] = ItemType.CrimsonFenceGate; - mappings[259] = ItemType.WarpedFenceGate; - mappings[260] = ItemType.BrickStairs; - mappings[261] = ItemType.StoneBrickStairs; - mappings[262] = ItemType.Mycelium; - mappings[263] = ItemType.LilyPad; - mappings[264] = ItemType.NetherBricks; - mappings[265] = ItemType.CrackedNetherBricks; - mappings[266] = ItemType.ChiseledNetherBricks; - mappings[267] = ItemType.NetherBrickFence; - mappings[268] = ItemType.NetherBrickStairs; - mappings[269] = ItemType.EnchantingTable; - mappings[270] = ItemType.EndPortalFrame; - mappings[271] = ItemType.EndStone; - mappings[272] = ItemType.EndStoneBricks; - mappings[273] = ItemType.DragonEgg; - mappings[274] = ItemType.RedstoneLamp; - mappings[275] = ItemType.SandstoneStairs; - mappings[276] = ItemType.EmeraldOre; - mappings[277] = ItemType.EnderChest; - mappings[278] = ItemType.TripwireHook; - mappings[279] = ItemType.EmeraldBlock; - mappings[280] = ItemType.SpruceStairs; - mappings[281] = ItemType.BirchStairs; - mappings[282] = ItemType.JungleStairs; - mappings[283] = ItemType.CrimsonStairs; - mappings[284] = ItemType.WarpedStairs; - mappings[285] = ItemType.CommandBlock; - mappings[286] = ItemType.Beacon; - mappings[287] = ItemType.CobblestoneWall; - mappings[288] = ItemType.MossyCobblestoneWall; - mappings[289] = ItemType.BrickWall; - mappings[290] = ItemType.PrismarineWall; - mappings[291] = ItemType.RedSandstoneWall; - mappings[292] = ItemType.MossyStoneBrickWall; - mappings[293] = ItemType.GraniteWall; - mappings[294] = ItemType.StoneBrickWall; - mappings[295] = ItemType.NetherBrickWall; - mappings[296] = ItemType.AndesiteWall; - mappings[297] = ItemType.RedNetherBrickWall; - mappings[298] = ItemType.SandstoneWall; - mappings[299] = ItemType.EndStoneBrickWall; - mappings[300] = ItemType.DioriteWall; - mappings[301] = ItemType.BlackstoneWall; - mappings[302] = ItemType.PolishedBlackstoneWall; - mappings[303] = ItemType.PolishedBlackstoneBrickWall; - mappings[304] = ItemType.StoneButton; - mappings[305] = ItemType.OakButton; - mappings[306] = ItemType.SpruceButton; - mappings[307] = ItemType.BirchButton; - mappings[308] = ItemType.JungleButton; - mappings[309] = ItemType.AcaciaButton; - mappings[310] = ItemType.DarkOakButton; - mappings[311] = ItemType.CrimsonButton; - mappings[312] = ItemType.WarpedButton; - mappings[313] = ItemType.PolishedBlackstoneButton; - mappings[314] = ItemType.Anvil; - mappings[315] = ItemType.ChippedAnvil; - mappings[316] = ItemType.DamagedAnvil; - mappings[317] = ItemType.TrappedChest; - mappings[318] = ItemType.LightWeightedPressurePlate; - mappings[319] = ItemType.HeavyWeightedPressurePlate; - mappings[320] = ItemType.DaylightDetector; - mappings[321] = ItemType.RedstoneBlock; - mappings[322] = ItemType.NetherQuartzOre; - mappings[323] = ItemType.Hopper; - mappings[324] = ItemType.ChiseledQuartzBlock; - mappings[325] = ItemType.QuartzBlock; - mappings[326] = ItemType.QuartzBricks; - mappings[327] = ItemType.QuartzPillar; - mappings[328] = ItemType.QuartzStairs; - mappings[329] = ItemType.ActivatorRail; - mappings[330] = ItemType.Dropper; - mappings[331] = ItemType.WhiteTerracotta; - mappings[332] = ItemType.OrangeTerracotta; - mappings[333] = ItemType.MagentaTerracotta; - mappings[334] = ItemType.LightBlueTerracotta; - mappings[335] = ItemType.YellowTerracotta; - mappings[336] = ItemType.LimeTerracotta; - mappings[337] = ItemType.PinkTerracotta; - mappings[338] = ItemType.GrayTerracotta; - mappings[339] = ItemType.LightGrayTerracotta; - mappings[340] = ItemType.CyanTerracotta; - mappings[341] = ItemType.PurpleTerracotta; - mappings[342] = ItemType.BlueTerracotta; - mappings[343] = ItemType.BrownTerracotta; - mappings[344] = ItemType.GreenTerracotta; - mappings[345] = ItemType.RedTerracotta; - mappings[346] = ItemType.BlackTerracotta; - mappings[347] = ItemType.Barrier; - mappings[348] = ItemType.IronTrapdoor; - mappings[349] = ItemType.HayBlock; - mappings[350] = ItemType.WhiteCarpet; - mappings[351] = ItemType.OrangeCarpet; - mappings[352] = ItemType.MagentaCarpet; - mappings[353] = ItemType.LightBlueCarpet; - mappings[354] = ItemType.YellowCarpet; - mappings[355] = ItemType.LimeCarpet; - mappings[356] = ItemType.PinkCarpet; - mappings[357] = ItemType.GrayCarpet; - mappings[358] = ItemType.LightGrayCarpet; - mappings[359] = ItemType.CyanCarpet; - mappings[360] = ItemType.PurpleCarpet; - mappings[361] = ItemType.BlueCarpet; - mappings[362] = ItemType.BrownCarpet; - mappings[363] = ItemType.GreenCarpet; - mappings[364] = ItemType.RedCarpet; - mappings[365] = ItemType.BlackCarpet; - mappings[366] = ItemType.Terracotta; - mappings[367] = ItemType.CoalBlock; - mappings[368] = ItemType.PackedIce; - mappings[369] = ItemType.AcaciaStairs; - mappings[370] = ItemType.DarkOakStairs; - mappings[371] = ItemType.SlimeBlock; - mappings[372] = ItemType.DirtPath; - mappings[373] = ItemType.Sunflower; - mappings[374] = ItemType.Lilac; - mappings[375] = ItemType.RoseBush; - mappings[376] = ItemType.Peony; - mappings[377] = ItemType.TallGrass; - mappings[378] = ItemType.LargeFern; - mappings[379] = ItemType.WhiteStainedGlass; - mappings[380] = ItemType.OrangeStainedGlass; - mappings[381] = ItemType.MagentaStainedGlass; - mappings[382] = ItemType.LightBlueStainedGlass; - mappings[383] = ItemType.YellowStainedGlass; - mappings[384] = ItemType.LimeStainedGlass; - mappings[385] = ItemType.PinkStainedGlass; - mappings[386] = ItemType.GrayStainedGlass; - mappings[387] = ItemType.LightGrayStainedGlass; - mappings[388] = ItemType.CyanStainedGlass; - mappings[389] = ItemType.PurpleStainedGlass; - mappings[390] = ItemType.BlueStainedGlass; - mappings[391] = ItemType.BrownStainedGlass; - mappings[392] = ItemType.GreenStainedGlass; - mappings[393] = ItemType.RedStainedGlass; - mappings[394] = ItemType.BlackStainedGlass; - mappings[395] = ItemType.WhiteStainedGlassPane; - mappings[396] = ItemType.OrangeStainedGlassPane; - mappings[397] = ItemType.MagentaStainedGlassPane; - mappings[398] = ItemType.LightBlueStainedGlassPane; - mappings[399] = ItemType.YellowStainedGlassPane; - mappings[400] = ItemType.LimeStainedGlassPane; - mappings[401] = ItemType.PinkStainedGlassPane; - mappings[402] = ItemType.GrayStainedGlassPane; - mappings[403] = ItemType.LightGrayStainedGlassPane; - mappings[404] = ItemType.CyanStainedGlassPane; - mappings[405] = ItemType.PurpleStainedGlassPane; - mappings[406] = ItemType.BlueStainedGlassPane; - mappings[407] = ItemType.BrownStainedGlassPane; - mappings[408] = ItemType.GreenStainedGlassPane; - mappings[409] = ItemType.RedStainedGlassPane; - mappings[410] = ItemType.BlackStainedGlassPane; - mappings[411] = ItemType.Prismarine; - mappings[412] = ItemType.PrismarineBricks; - mappings[413] = ItemType.DarkPrismarine; - mappings[414] = ItemType.PrismarineStairs; - mappings[415] = ItemType.PrismarineBrickStairs; - mappings[416] = ItemType.DarkPrismarineStairs; - mappings[417] = ItemType.SeaLantern; - mappings[418] = ItemType.RedSandstone; - mappings[419] = ItemType.ChiseledRedSandstone; - mappings[420] = ItemType.CutRedSandstone; - mappings[421] = ItemType.RedSandstoneStairs; - mappings[422] = ItemType.RepeatingCommandBlock; - mappings[423] = ItemType.ChainCommandBlock; - mappings[424] = ItemType.MagmaBlock; - mappings[425] = ItemType.NetherWartBlock; - mappings[426] = ItemType.WarpedWartBlock; - mappings[427] = ItemType.RedNetherBricks; - mappings[428] = ItemType.BoneBlock; - mappings[429] = ItemType.StructureVoid; - mappings[430] = ItemType.Observer; - mappings[431] = ItemType.ShulkerBox; - mappings[432] = ItemType.WhiteShulkerBox; - mappings[433] = ItemType.OrangeShulkerBox; - mappings[434] = ItemType.MagentaShulkerBox; - mappings[435] = ItemType.LightBlueShulkerBox; - mappings[436] = ItemType.YellowShulkerBox; - mappings[437] = ItemType.LimeShulkerBox; - mappings[438] = ItemType.PinkShulkerBox; - mappings[439] = ItemType.GrayShulkerBox; - mappings[440] = ItemType.LightGrayShulkerBox; - mappings[441] = ItemType.CyanShulkerBox; - mappings[442] = ItemType.PurpleShulkerBox; - mappings[443] = ItemType.BlueShulkerBox; - mappings[444] = ItemType.BrownShulkerBox; - mappings[445] = ItemType.GreenShulkerBox; - mappings[446] = ItemType.RedShulkerBox; - mappings[447] = ItemType.BlackShulkerBox; - mappings[448] = ItemType.WhiteGlazedTerracotta; - mappings[449] = ItemType.OrangeGlazedTerracotta; - mappings[450] = ItemType.MagentaGlazedTerracotta; - mappings[451] = ItemType.LightBlueGlazedTerracotta; - mappings[452] = ItemType.YellowGlazedTerracotta; - mappings[453] = ItemType.LimeGlazedTerracotta; - mappings[454] = ItemType.PinkGlazedTerracotta; - mappings[455] = ItemType.GrayGlazedTerracotta; - mappings[456] = ItemType.LightGrayGlazedTerracotta; - mappings[457] = ItemType.CyanGlazedTerracotta; - mappings[458] = ItemType.PurpleGlazedTerracotta; - mappings[459] = ItemType.BlueGlazedTerracotta; - mappings[460] = ItemType.BrownGlazedTerracotta; - mappings[461] = ItemType.GreenGlazedTerracotta; - mappings[462] = ItemType.RedGlazedTerracotta; - mappings[463] = ItemType.BlackGlazedTerracotta; - mappings[464] = ItemType.WhiteConcrete; - mappings[465] = ItemType.OrangeConcrete; - mappings[466] = ItemType.MagentaConcrete; - mappings[467] = ItemType.LightBlueConcrete; - mappings[468] = ItemType.YellowConcrete; - mappings[469] = ItemType.LimeConcrete; - mappings[470] = ItemType.PinkConcrete; - mappings[471] = ItemType.GrayConcrete; - mappings[472] = ItemType.LightGrayConcrete; - mappings[473] = ItemType.CyanConcrete; - mappings[474] = ItemType.PurpleConcrete; - mappings[475] = ItemType.BlueConcrete; - mappings[476] = ItemType.BrownConcrete; - mappings[477] = ItemType.GreenConcrete; - mappings[478] = ItemType.RedConcrete; - mappings[479] = ItemType.BlackConcrete; - mappings[480] = ItemType.WhiteConcretePowder; - mappings[481] = ItemType.OrangeConcretePowder; - mappings[482] = ItemType.MagentaConcretePowder; - mappings[483] = ItemType.LightBlueConcretePowder; - mappings[484] = ItemType.YellowConcretePowder; - mappings[485] = ItemType.LimeConcretePowder; - mappings[486] = ItemType.PinkConcretePowder; - mappings[487] = ItemType.GrayConcretePowder; - mappings[488] = ItemType.LightGrayConcretePowder; - mappings[489] = ItemType.CyanConcretePowder; - mappings[490] = ItemType.PurpleConcretePowder; - mappings[491] = ItemType.BlueConcretePowder; - mappings[492] = ItemType.BrownConcretePowder; - mappings[493] = ItemType.GreenConcretePowder; - mappings[494] = ItemType.RedConcretePowder; - mappings[495] = ItemType.BlackConcretePowder; - mappings[496] = ItemType.TurtleEgg; - mappings[497] = ItemType.DeadTubeCoralBlock; - mappings[498] = ItemType.DeadBrainCoralBlock; - mappings[499] = ItemType.DeadBubbleCoralBlock; - mappings[500] = ItemType.DeadFireCoralBlock; - mappings[501] = ItemType.DeadHornCoralBlock; - mappings[502] = ItemType.TubeCoralBlock; - mappings[503] = ItemType.BrainCoralBlock; - mappings[504] = ItemType.BubbleCoralBlock; - mappings[505] = ItemType.FireCoralBlock; - mappings[506] = ItemType.HornCoralBlock; - mappings[507] = ItemType.TubeCoral; - mappings[508] = ItemType.BrainCoral; - mappings[509] = ItemType.BubbleCoral; - mappings[510] = ItemType.FireCoral; - mappings[511] = ItemType.HornCoral; - mappings[512] = ItemType.DeadBrainCoral; - mappings[513] = ItemType.DeadBubbleCoral; - mappings[514] = ItemType.DeadFireCoral; - mappings[515] = ItemType.DeadHornCoral; - mappings[516] = ItemType.DeadTubeCoral; - mappings[517] = ItemType.TubeCoralFan; - mappings[518] = ItemType.BrainCoralFan; - mappings[519] = ItemType.BubbleCoralFan; - mappings[520] = ItemType.FireCoralFan; - mappings[521] = ItemType.HornCoralFan; - mappings[522] = ItemType.DeadTubeCoralFan; - mappings[523] = ItemType.DeadBrainCoralFan; - mappings[524] = ItemType.DeadBubbleCoralFan; - mappings[525] = ItemType.DeadFireCoralFan; - mappings[526] = ItemType.DeadHornCoralFan; - mappings[527] = ItemType.BlueIce; - mappings[528] = ItemType.Conduit; - mappings[529] = ItemType.PolishedGraniteStairs; - mappings[530] = ItemType.SmoothRedSandstoneStairs; - mappings[531] = ItemType.MossyStoneBrickStairs; - mappings[532] = ItemType.PolishedDioriteStairs; - mappings[533] = ItemType.MossyCobblestoneStairs; - mappings[534] = ItemType.EndStoneBrickStairs; - mappings[535] = ItemType.StoneStairs; - mappings[536] = ItemType.SmoothSandstoneStairs; - mappings[537] = ItemType.SmoothQuartzStairs; - mappings[538] = ItemType.GraniteStairs; - mappings[539] = ItemType.AndesiteStairs; - mappings[540] = ItemType.RedNetherBrickStairs; - mappings[541] = ItemType.PolishedAndesiteStairs; - mappings[542] = ItemType.DioriteStairs; - mappings[543] = ItemType.PolishedGraniteSlab; - mappings[544] = ItemType.SmoothRedSandstoneSlab; - mappings[545] = ItemType.MossyStoneBrickSlab; - mappings[546] = ItemType.PolishedDioriteSlab; - mappings[547] = ItemType.MossyCobblestoneSlab; - mappings[548] = ItemType.EndStoneBrickSlab; - mappings[549] = ItemType.SmoothSandstoneSlab; - mappings[550] = ItemType.SmoothQuartzSlab; - mappings[551] = ItemType.GraniteSlab; - mappings[552] = ItemType.AndesiteSlab; - mappings[553] = ItemType.RedNetherBrickSlab; - mappings[554] = ItemType.PolishedAndesiteSlab; - mappings[555] = ItemType.DioriteSlab; - mappings[556] = ItemType.Scaffolding; - mappings[557] = ItemType.IronDoor; - mappings[558] = ItemType.OakDoor; - mappings[559] = ItemType.SpruceDoor; - mappings[560] = ItemType.BirchDoor; - mappings[561] = ItemType.JungleDoor; - mappings[562] = ItemType.AcaciaDoor; - mappings[563] = ItemType.DarkOakDoor; - mappings[564] = ItemType.CrimsonDoor; - mappings[565] = ItemType.WarpedDoor; - mappings[566] = ItemType.Repeater; - mappings[567] = ItemType.Comparator; - mappings[568] = ItemType.StructureBlock; - mappings[569] = ItemType.Jigsaw; - mappings[570] = ItemType.TurtleHelmet; - mappings[571] = ItemType.TurtleScute; - mappings[572] = ItemType.FlintAndSteel; - mappings[573] = ItemType.Apple; - mappings[574] = ItemType.Bow; - mappings[575] = ItemType.Arrow; - mappings[576] = ItemType.Coal; - mappings[577] = ItemType.Charcoal; - mappings[578] = ItemType.Diamond; - mappings[579] = ItemType.IronIngot; - mappings[580] = ItemType.GoldIngot; - mappings[581] = ItemType.NetheriteIngot; - mappings[582] = ItemType.NetheriteScrap; - mappings[583] = ItemType.WoodenSword; - mappings[584] = ItemType.WoodenShovel; - mappings[585] = ItemType.WoodenPickaxe; - mappings[586] = ItemType.WoodenAxe; - mappings[587] = ItemType.WoodenHoe; - mappings[588] = ItemType.StoneSword; - mappings[589] = ItemType.StoneShovel; - mappings[590] = ItemType.StonePickaxe; - mappings[591] = ItemType.StoneAxe; - mappings[592] = ItemType.StoneHoe; - mappings[593] = ItemType.GoldenSword; - mappings[594] = ItemType.GoldenShovel; - mappings[595] = ItemType.GoldenPickaxe; - mappings[596] = ItemType.GoldenAxe; - mappings[597] = ItemType.GoldenHoe; - mappings[598] = ItemType.IronSword; - mappings[599] = ItemType.IronShovel; - mappings[600] = ItemType.IronPickaxe; - mappings[601] = ItemType.IronAxe; - mappings[602] = ItemType.IronHoe; - mappings[603] = ItemType.DiamondSword; - mappings[604] = ItemType.DiamondShovel; - mappings[605] = ItemType.DiamondPickaxe; - mappings[606] = ItemType.DiamondAxe; - mappings[607] = ItemType.DiamondHoe; - mappings[608] = ItemType.NetheriteSword; - mappings[609] = ItemType.NetheriteShovel; - mappings[610] = ItemType.NetheritePickaxe; - mappings[611] = ItemType.NetheriteAxe; - mappings[612] = ItemType.NetheriteHoe; - mappings[613] = ItemType.Stick; - mappings[614] = ItemType.Bowl; - mappings[615] = ItemType.MushroomStew; - mappings[616] = ItemType.String; - mappings[617] = ItemType.Feather; - mappings[618] = ItemType.Gunpowder; - mappings[619] = ItemType.WheatSeeds; - mappings[620] = ItemType.Wheat; - mappings[621] = ItemType.Bread; - mappings[622] = ItemType.LeatherHelmet; - mappings[623] = ItemType.LeatherChestplate; - mappings[624] = ItemType.LeatherLeggings; - mappings[625] = ItemType.LeatherBoots; - mappings[626] = ItemType.ChainmailHelmet; - mappings[627] = ItemType.ChainmailChestplate; - mappings[628] = ItemType.ChainmailLeggings; - mappings[629] = ItemType.ChainmailBoots; - mappings[630] = ItemType.IronHelmet; - mappings[631] = ItemType.IronChestplate; - mappings[632] = ItemType.IronLeggings; - mappings[633] = ItemType.IronBoots; - mappings[634] = ItemType.DiamondHelmet; - mappings[635] = ItemType.DiamondChestplate; - mappings[636] = ItemType.DiamondLeggings; - mappings[637] = ItemType.DiamondBoots; - mappings[638] = ItemType.GoldenHelmet; - mappings[639] = ItemType.GoldenChestplate; - mappings[640] = ItemType.GoldenLeggings; - mappings[641] = ItemType.GoldenBoots; - mappings[642] = ItemType.NetheriteHelmet; - mappings[643] = ItemType.NetheriteChestplate; - mappings[644] = ItemType.NetheriteLeggings; - mappings[645] = ItemType.NetheriteBoots; - mappings[646] = ItemType.Flint; - mappings[647] = ItemType.Porkchop; - mappings[648] = ItemType.CookedPorkchop; - mappings[649] = ItemType.Painting; - mappings[650] = ItemType.GoldenApple; - mappings[651] = ItemType.EnchantedGoldenApple; - mappings[652] = ItemType.OakSign; - mappings[653] = ItemType.SpruceSign; - mappings[654] = ItemType.BirchSign; - mappings[655] = ItemType.JungleSign; - mappings[656] = ItemType.AcaciaSign; - mappings[657] = ItemType.DarkOakSign; - mappings[658] = ItemType.CrimsonSign; - mappings[659] = ItemType.WarpedSign; - mappings[660] = ItemType.Bucket; - mappings[661] = ItemType.WaterBucket; - mappings[662] = ItemType.LavaBucket; - mappings[663] = ItemType.Minecart; - mappings[664] = ItemType.Saddle; - mappings[665] = ItemType.Redstone; - mappings[666] = ItemType.Snowball; - mappings[667] = ItemType.OakBoat; - mappings[668] = ItemType.Leather; - mappings[669] = ItemType.MilkBucket; - mappings[670] = ItemType.PufferfishBucket; - mappings[671] = ItemType.SalmonBucket; - mappings[672] = ItemType.CodBucket; - mappings[673] = ItemType.TropicalFishBucket; - mappings[674] = ItemType.Brick; - mappings[675] = ItemType.ClayBall; - mappings[676] = ItemType.DriedKelpBlock; - mappings[677] = ItemType.Paper; - mappings[678] = ItemType.Book; - mappings[679] = ItemType.SlimeBall; - mappings[680] = ItemType.ChestMinecart; - mappings[681] = ItemType.FurnaceMinecart; - mappings[682] = ItemType.Egg; - mappings[683] = ItemType.Compass; - mappings[684] = ItemType.FishingRod; - mappings[685] = ItemType.Clock; - mappings[686] = ItemType.GlowstoneDust; - mappings[687] = ItemType.Cod; - mappings[688] = ItemType.Salmon; - mappings[689] = ItemType.TropicalFish; - mappings[690] = ItemType.Pufferfish; - mappings[691] = ItemType.CookedCod; - mappings[692] = ItemType.CookedSalmon; - mappings[693] = ItemType.InkSac; - mappings[694] = ItemType.CocoaBeans; - mappings[695] = ItemType.LapisLazuli; - mappings[696] = ItemType.WhiteDye; - mappings[697] = ItemType.OrangeDye; - mappings[698] = ItemType.MagentaDye; - mappings[699] = ItemType.LightBlueDye; - mappings[700] = ItemType.YellowDye; - mappings[701] = ItemType.LimeDye; - mappings[702] = ItemType.PinkDye; - mappings[703] = ItemType.GrayDye; - mappings[704] = ItemType.LightGrayDye; - mappings[705] = ItemType.CyanDye; - mappings[706] = ItemType.PurpleDye; - mappings[707] = ItemType.BlueDye; - mappings[708] = ItemType.BrownDye; - mappings[709] = ItemType.GreenDye; - mappings[710] = ItemType.RedDye; - mappings[711] = ItemType.BlackDye; - mappings[712] = ItemType.BoneMeal; - mappings[713] = ItemType.Bone; - mappings[714] = ItemType.Sugar; - mappings[715] = ItemType.Cake; - mappings[716] = ItemType.WhiteBed; - mappings[717] = ItemType.OrangeBed; - mappings[718] = ItemType.MagentaBed; - mappings[719] = ItemType.LightBlueBed; - mappings[720] = ItemType.YellowBed; - mappings[721] = ItemType.LimeBed; - mappings[722] = ItemType.PinkBed; - mappings[723] = ItemType.GrayBed; - mappings[724] = ItemType.LightGrayBed; - mappings[725] = ItemType.CyanBed; - mappings[726] = ItemType.PurpleBed; - mappings[727] = ItemType.BlueBed; - mappings[728] = ItemType.BrownBed; - mappings[729] = ItemType.GreenBed; - mappings[730] = ItemType.RedBed; - mappings[731] = ItemType.BlackBed; - mappings[732] = ItemType.Cookie; - mappings[733] = ItemType.FilledMap; - mappings[734] = ItemType.Shears; - mappings[735] = ItemType.MelonSlice; - mappings[736] = ItemType.DriedKelp; - mappings[737] = ItemType.PumpkinSeeds; - mappings[738] = ItemType.MelonSeeds; - mappings[739] = ItemType.Beef; - mappings[740] = ItemType.CookedBeef; - mappings[741] = ItemType.Chicken; - mappings[742] = ItemType.CookedChicken; - mappings[743] = ItemType.RottenFlesh; - mappings[744] = ItemType.EnderPearl; - mappings[745] = ItemType.BlazeRod; - mappings[746] = ItemType.GhastTear; - mappings[747] = ItemType.GoldNugget; - mappings[748] = ItemType.NetherWart; - mappings[749] = ItemType.Potion; - mappings[750] = ItemType.GlassBottle; - mappings[751] = ItemType.SpiderEye; - mappings[752] = ItemType.FermentedSpiderEye; - mappings[753] = ItemType.BlazePowder; - mappings[754] = ItemType.MagmaCream; - mappings[755] = ItemType.BrewingStand; - mappings[756] = ItemType.Cauldron; - mappings[757] = ItemType.EnderEye; - mappings[758] = ItemType.GlisteringMelonSlice; - mappings[759] = ItemType.BatSpawnEgg; - mappings[760] = ItemType.BeeSpawnEgg; - mappings[761] = ItemType.BlazeSpawnEgg; - mappings[762] = ItemType.CatSpawnEgg; - mappings[763] = ItemType.CaveSpiderSpawnEgg; - mappings[764] = ItemType.ChickenSpawnEgg; - mappings[765] = ItemType.CodSpawnEgg; - mappings[766] = ItemType.CowSpawnEgg; - mappings[767] = ItemType.CreeperSpawnEgg; - mappings[768] = ItemType.DolphinSpawnEgg; - mappings[769] = ItemType.DonkeySpawnEgg; - mappings[770] = ItemType.DrownedSpawnEgg; - mappings[771] = ItemType.ElderGuardianSpawnEgg; - mappings[772] = ItemType.EndermanSpawnEgg; - mappings[773] = ItemType.EndermiteSpawnEgg; - mappings[774] = ItemType.EvokerSpawnEgg; - mappings[775] = ItemType.FoxSpawnEgg; - mappings[776] = ItemType.GhastSpawnEgg; - mappings[777] = ItemType.GuardianSpawnEgg; - mappings[778] = ItemType.HoglinSpawnEgg; - mappings[779] = ItemType.HorseSpawnEgg; - mappings[780] = ItemType.HuskSpawnEgg; - mappings[781] = ItemType.LlamaSpawnEgg; - mappings[782] = ItemType.MagmaCubeSpawnEgg; - mappings[783] = ItemType.MooshroomSpawnEgg; - mappings[784] = ItemType.MuleSpawnEgg; - mappings[785] = ItemType.OcelotSpawnEgg; - mappings[786] = ItemType.PandaSpawnEgg; - mappings[787] = ItemType.ParrotSpawnEgg; - mappings[788] = ItemType.PhantomSpawnEgg; - mappings[789] = ItemType.PigSpawnEgg; - mappings[790] = ItemType.PiglinSpawnEgg; - mappings[791] = ItemType.PiglinBruteSpawnEgg; - mappings[792] = ItemType.PillagerSpawnEgg; - mappings[793] = ItemType.PolarBearSpawnEgg; - mappings[794] = ItemType.PufferfishSpawnEgg; - mappings[795] = ItemType.RabbitSpawnEgg; - mappings[796] = ItemType.RavagerSpawnEgg; - mappings[797] = ItemType.SalmonSpawnEgg; - mappings[798] = ItemType.SheepSpawnEgg; - mappings[799] = ItemType.ShulkerSpawnEgg; - mappings[800] = ItemType.SilverfishSpawnEgg; - mappings[801] = ItemType.SkeletonSpawnEgg; - mappings[802] = ItemType.SkeletonHorseSpawnEgg; - mappings[803] = ItemType.SlimeSpawnEgg; - mappings[804] = ItemType.SpiderSpawnEgg; - mappings[805] = ItemType.SquidSpawnEgg; - mappings[806] = ItemType.StraySpawnEgg; - mappings[807] = ItemType.StriderSpawnEgg; - mappings[808] = ItemType.TraderLlamaSpawnEgg; - mappings[809] = ItemType.TropicalFishSpawnEgg; - mappings[810] = ItemType.TurtleSpawnEgg; - mappings[811] = ItemType.VexSpawnEgg; - mappings[812] = ItemType.VillagerSpawnEgg; - mappings[813] = ItemType.VindicatorSpawnEgg; - mappings[814] = ItemType.WanderingTraderSpawnEgg; - mappings[815] = ItemType.WitchSpawnEgg; - mappings[816] = ItemType.WitherSkeletonSpawnEgg; - mappings[817] = ItemType.WolfSpawnEgg; - mappings[818] = ItemType.ZoglinSpawnEgg; - mappings[819] = ItemType.ZombieSpawnEgg; - mappings[820] = ItemType.ZombieHorseSpawnEgg; - mappings[821] = ItemType.ZombieVillagerSpawnEgg; - mappings[822] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[823] = ItemType.ExperienceBottle; - mappings[824] = ItemType.FireCharge; - mappings[825] = ItemType.WritableBook; - mappings[826] = ItemType.WrittenBook; - mappings[827] = ItemType.Emerald; - mappings[828] = ItemType.ItemFrame; - mappings[829] = ItemType.FlowerPot; - mappings[830] = ItemType.Carrot; - mappings[831] = ItemType.Potato; - mappings[832] = ItemType.BakedPotato; - mappings[833] = ItemType.PoisonousPotato; - mappings[834] = ItemType.Map; - mappings[835] = ItemType.GoldenCarrot; - mappings[836] = ItemType.SkeletonSkull; - mappings[837] = ItemType.WitherSkeletonSkull; - mappings[838] = ItemType.PlayerHead; - mappings[839] = ItemType.ZombieHead; - mappings[840] = ItemType.CreeperHead; - mappings[841] = ItemType.DragonHead; - mappings[842] = ItemType.CarrotOnAStick; - mappings[843] = ItemType.WarpedFungusOnAStick; - mappings[844] = ItemType.NetherStar; - mappings[845] = ItemType.PumpkinPie; - mappings[846] = ItemType.FireworkRocket; - mappings[847] = ItemType.FireworkStar; - mappings[848] = ItemType.EnchantedBook; - mappings[849] = ItemType.NetherBrick; - mappings[850] = ItemType.Quartz; - mappings[851] = ItemType.TntMinecart; - mappings[852] = ItemType.HopperMinecart; - mappings[853] = ItemType.PrismarineShard; - mappings[854] = ItemType.PrismarineCrystals; - mappings[855] = ItemType.Rabbit; - mappings[856] = ItemType.CookedRabbit; - mappings[857] = ItemType.RabbitStew; - mappings[858] = ItemType.RabbitFoot; - mappings[859] = ItemType.RabbitHide; - mappings[860] = ItemType.ArmorStand; - mappings[861] = ItemType.IronHorseArmor; - mappings[862] = ItemType.GoldenHorseArmor; - mappings[863] = ItemType.DiamondHorseArmor; - mappings[864] = ItemType.LeatherHorseArmor; - mappings[865] = ItemType.Lead; - mappings[866] = ItemType.NameTag; - mappings[867] = ItemType.CommandBlockMinecart; - mappings[868] = ItemType.Mutton; - mappings[869] = ItemType.CookedMutton; - mappings[870] = ItemType.WhiteBanner; - mappings[871] = ItemType.OrangeBanner; - mappings[872] = ItemType.MagentaBanner; - mappings[873] = ItemType.LightBlueBanner; - mappings[874] = ItemType.YellowBanner; - mappings[875] = ItemType.LimeBanner; - mappings[876] = ItemType.PinkBanner; - mappings[877] = ItemType.GrayBanner; - mappings[878] = ItemType.LightGrayBanner; - mappings[879] = ItemType.CyanBanner; - mappings[880] = ItemType.PurpleBanner; - mappings[881] = ItemType.BlueBanner; - mappings[882] = ItemType.BrownBanner; - mappings[883] = ItemType.GreenBanner; - mappings[884] = ItemType.RedBanner; - mappings[885] = ItemType.BlackBanner; - mappings[886] = ItemType.EndCrystal; - mappings[887] = ItemType.ChorusFruit; - mappings[888] = ItemType.PoppedChorusFruit; - mappings[889] = ItemType.Beetroot; - mappings[890] = ItemType.BeetrootSeeds; - mappings[891] = ItemType.BeetrootSoup; - mappings[892] = ItemType.DragonBreath; - mappings[893] = ItemType.SplashPotion; - mappings[894] = ItemType.SpectralArrow; - mappings[895] = ItemType.TippedArrow; - mappings[896] = ItemType.LingeringPotion; - mappings[897] = ItemType.Shield; - mappings[898] = ItemType.Elytra; - mappings[899] = ItemType.SpruceBoat; - mappings[900] = ItemType.BirchBoat; - mappings[901] = ItemType.JungleBoat; - mappings[902] = ItemType.AcaciaBoat; - mappings[903] = ItemType.DarkOakBoat; - mappings[904] = ItemType.TotemOfUndying; - mappings[905] = ItemType.ShulkerShell; - mappings[906] = ItemType.IronNugget; - mappings[907] = ItemType.KnowledgeBook; - mappings[908] = ItemType.DebugStick; - mappings[909] = ItemType.MusicDisc13; - mappings[910] = ItemType.MusicDiscCat; - mappings[911] = ItemType.MusicDiscBlocks; - mappings[912] = ItemType.MusicDiscChirp; - mappings[913] = ItemType.MusicDiscFar; - mappings[914] = ItemType.MusicDiscMall; - mappings[915] = ItemType.MusicDiscMellohi; - mappings[916] = ItemType.MusicDiscStal; - mappings[917] = ItemType.MusicDiscStrad; - mappings[918] = ItemType.MusicDiscWard; - mappings[919] = ItemType.MusicDisc11; - mappings[920] = ItemType.MusicDiscWait; - mappings[921] = ItemType.MusicDiscPigstep; - mappings[922] = ItemType.Trident; - mappings[923] = ItemType.PhantomMembrane; - mappings[924] = ItemType.NautilusShell; - mappings[925] = ItemType.HeartOfTheSea; - mappings[926] = ItemType.Crossbow; - mappings[927] = ItemType.SuspiciousStew; - mappings[928] = ItemType.Loom; - mappings[929] = ItemType.FlowerBannerPattern; - mappings[930] = ItemType.CreeperBannerPattern; - mappings[931] = ItemType.SkullBannerPattern; - mappings[932] = ItemType.MojangBannerPattern; - mappings[933] = ItemType.GlobeBannerPattern; - mappings[934] = ItemType.PiglinBannerPattern; - mappings[935] = ItemType.Composter; - mappings[936] = ItemType.Barrel; - mappings[937] = ItemType.Smoker; - mappings[938] = ItemType.BlastFurnace; - mappings[939] = ItemType.CartographyTable; - mappings[940] = ItemType.FletchingTable; - mappings[941] = ItemType.Grindstone; - mappings[942] = ItemType.Lectern; - mappings[943] = ItemType.SmithingTable; - mappings[944] = ItemType.Stonecutter; - mappings[945] = ItemType.Bell; - mappings[946] = ItemType.Lantern; - mappings[947] = ItemType.SoulLantern; - mappings[948] = ItemType.SweetBerries; - mappings[949] = ItemType.Campfire; - mappings[950] = ItemType.SoulCampfire; - mappings[951] = ItemType.Shroomlight; - mappings[952] = ItemType.Honeycomb; - mappings[953] = ItemType.BeeNest; - mappings[954] = ItemType.Beehive; - mappings[955] = ItemType.HoneyBottle; - mappings[956] = ItemType.HoneyBlock; - mappings[957] = ItemType.HoneycombBlock; - mappings[958] = ItemType.Lodestone; - mappings[959] = ItemType.NetheriteBlock; - mappings[960] = ItemType.AncientDebris; - mappings[961] = ItemType.Target; - mappings[962] = ItemType.CryingObsidian; - mappings[963] = ItemType.Blackstone; - mappings[964] = ItemType.BlackstoneSlab; - mappings[965] = ItemType.BlackstoneStairs; - mappings[966] = ItemType.GildedBlackstone; - mappings[967] = ItemType.PolishedBlackstone; - mappings[968] = ItemType.PolishedBlackstoneSlab; - mappings[969] = ItemType.PolishedBlackstoneStairs; - mappings[970] = ItemType.ChiseledPolishedBlackstone; - mappings[971] = ItemType.PolishedBlackstoneBricks; - mappings[972] = ItemType.PolishedBlackstoneBrickSlab; - mappings[973] = ItemType.PolishedBlackstoneBrickStairs; - mappings[974] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[975] = ItemType.RespawnAnchor; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette117.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette117.cs deleted file mode 100644 index be1bd51716..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette117.cs +++ /dev/null @@ -1,1118 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette117 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette117() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.Deepslate; - mappings[9] = ItemType.CobbledDeepslate; - mappings[10] = ItemType.PolishedDeepslate; - mappings[11] = ItemType.Calcite; - mappings[12] = ItemType.Tuff; - mappings[13] = ItemType.DripstoneBlock; - mappings[14] = ItemType.GrassBlock; - mappings[15] = ItemType.Dirt; - mappings[16] = ItemType.CoarseDirt; - mappings[17] = ItemType.Podzol; - mappings[18] = ItemType.RootedDirt; - mappings[19] = ItemType.CrimsonNylium; - mappings[20] = ItemType.WarpedNylium; - mappings[21] = ItemType.Cobblestone; - mappings[22] = ItemType.OakPlanks; - mappings[23] = ItemType.SprucePlanks; - mappings[24] = ItemType.BirchPlanks; - mappings[25] = ItemType.JunglePlanks; - mappings[26] = ItemType.AcaciaPlanks; - mappings[27] = ItemType.DarkOakPlanks; - mappings[28] = ItemType.CrimsonPlanks; - mappings[29] = ItemType.WarpedPlanks; - mappings[30] = ItemType.OakSapling; - mappings[31] = ItemType.SpruceSapling; - mappings[32] = ItemType.BirchSapling; - mappings[33] = ItemType.JungleSapling; - mappings[34] = ItemType.AcaciaSapling; - mappings[35] = ItemType.DarkOakSapling; - mappings[36] = ItemType.Bedrock; - mappings[37] = ItemType.Sand; - mappings[38] = ItemType.RedSand; - mappings[39] = ItemType.Gravel; - mappings[40] = ItemType.CoalOre; - mappings[41] = ItemType.DeepslateCoalOre; - mappings[42] = ItemType.IronOre; - mappings[43] = ItemType.DeepslateIronOre; - mappings[44] = ItemType.CopperOre; - mappings[45] = ItemType.DeepslateCopperOre; - mappings[46] = ItemType.GoldOre; - mappings[47] = ItemType.DeepslateGoldOre; - mappings[48] = ItemType.RedstoneOre; - mappings[49] = ItemType.DeepslateRedstoneOre; - mappings[50] = ItemType.EmeraldOre; - mappings[51] = ItemType.DeepslateEmeraldOre; - mappings[52] = ItemType.LapisOre; - mappings[53] = ItemType.DeepslateLapisOre; - mappings[54] = ItemType.DiamondOre; - mappings[55] = ItemType.DeepslateDiamondOre; - mappings[56] = ItemType.NetherGoldOre; - mappings[57] = ItemType.NetherQuartzOre; - mappings[58] = ItemType.AncientDebris; - mappings[59] = ItemType.CoalBlock; - mappings[60] = ItemType.RawIronBlock; - mappings[61] = ItemType.RawCopperBlock; - mappings[62] = ItemType.RawGoldBlock; - mappings[63] = ItemType.AmethystBlock; - mappings[64] = ItemType.BuddingAmethyst; - mappings[65] = ItemType.IronBlock; - mappings[66] = ItemType.CopperBlock; - mappings[67] = ItemType.GoldBlock; - mappings[68] = ItemType.DiamondBlock; - mappings[69] = ItemType.NetheriteBlock; - mappings[70] = ItemType.ExposedCopper; - mappings[71] = ItemType.WeatheredCopper; - mappings[72] = ItemType.OxidizedCopper; - mappings[73] = ItemType.CutCopper; - mappings[74] = ItemType.ExposedCutCopper; - mappings[75] = ItemType.WeatheredCutCopper; - mappings[76] = ItemType.OxidizedCutCopper; - mappings[77] = ItemType.CutCopperStairs; - mappings[78] = ItemType.ExposedCutCopperStairs; - mappings[79] = ItemType.WeatheredCutCopperStairs; - mappings[80] = ItemType.OxidizedCutCopperStairs; - mappings[81] = ItemType.CutCopperSlab; - mappings[82] = ItemType.ExposedCutCopperSlab; - mappings[83] = ItemType.WeatheredCutCopperSlab; - mappings[84] = ItemType.OxidizedCutCopperSlab; - mappings[85] = ItemType.WaxedCopperBlock; - mappings[86] = ItemType.WaxedExposedCopper; - mappings[87] = ItemType.WaxedWeatheredCopper; - mappings[88] = ItemType.WaxedOxidizedCopper; - mappings[89] = ItemType.WaxedCutCopper; - mappings[90] = ItemType.WaxedExposedCutCopper; - mappings[91] = ItemType.WaxedWeatheredCutCopper; - mappings[92] = ItemType.WaxedOxidizedCutCopper; - mappings[93] = ItemType.WaxedCutCopperStairs; - mappings[94] = ItemType.WaxedExposedCutCopperStairs; - mappings[95] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[96] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[97] = ItemType.WaxedCutCopperSlab; - mappings[98] = ItemType.WaxedExposedCutCopperSlab; - mappings[99] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[100] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[101] = ItemType.OakLog; - mappings[102] = ItemType.SpruceLog; - mappings[103] = ItemType.BirchLog; - mappings[104] = ItemType.JungleLog; - mappings[105] = ItemType.AcaciaLog; - mappings[106] = ItemType.DarkOakLog; - mappings[107] = ItemType.CrimsonStem; - mappings[108] = ItemType.WarpedStem; - mappings[109] = ItemType.StrippedOakLog; - mappings[110] = ItemType.StrippedSpruceLog; - mappings[111] = ItemType.StrippedBirchLog; - mappings[112] = ItemType.StrippedJungleLog; - mappings[113] = ItemType.StrippedAcaciaLog; - mappings[114] = ItemType.StrippedDarkOakLog; - mappings[115] = ItemType.StrippedCrimsonStem; - mappings[116] = ItemType.StrippedWarpedStem; - mappings[117] = ItemType.StrippedOakWood; - mappings[118] = ItemType.StrippedSpruceWood; - mappings[119] = ItemType.StrippedBirchWood; - mappings[120] = ItemType.StrippedJungleWood; - mappings[121] = ItemType.StrippedAcaciaWood; - mappings[122] = ItemType.StrippedDarkOakWood; - mappings[123] = ItemType.StrippedCrimsonHyphae; - mappings[124] = ItemType.StrippedWarpedHyphae; - mappings[125] = ItemType.OakWood; - mappings[126] = ItemType.SpruceWood; - mappings[127] = ItemType.BirchWood; - mappings[128] = ItemType.JungleWood; - mappings[129] = ItemType.AcaciaWood; - mappings[130] = ItemType.DarkOakWood; - mappings[131] = ItemType.CrimsonHyphae; - mappings[132] = ItemType.WarpedHyphae; - mappings[133] = ItemType.OakLeaves; - mappings[134] = ItemType.SpruceLeaves; - mappings[135] = ItemType.BirchLeaves; - mappings[136] = ItemType.JungleLeaves; - mappings[137] = ItemType.AcaciaLeaves; - mappings[138] = ItemType.DarkOakLeaves; - mappings[139] = ItemType.AzaleaLeaves; - mappings[140] = ItemType.FloweringAzaleaLeaves; - mappings[141] = ItemType.Sponge; - mappings[142] = ItemType.WetSponge; - mappings[143] = ItemType.Glass; - mappings[144] = ItemType.TintedGlass; - mappings[145] = ItemType.LapisBlock; - mappings[146] = ItemType.Sandstone; - mappings[147] = ItemType.ChiseledSandstone; - mappings[148] = ItemType.CutSandstone; - mappings[149] = ItemType.Cobweb; - mappings[150] = ItemType.ShortGrass; - mappings[151] = ItemType.Fern; - mappings[152] = ItemType.Azalea; - mappings[153] = ItemType.FloweringAzalea; - mappings[154] = ItemType.DeadBush; - mappings[155] = ItemType.Seagrass; - mappings[156] = ItemType.SeaPickle; - mappings[157] = ItemType.WhiteWool; - mappings[158] = ItemType.OrangeWool; - mappings[159] = ItemType.MagentaWool; - mappings[160] = ItemType.LightBlueWool; - mappings[161] = ItemType.YellowWool; - mappings[162] = ItemType.LimeWool; - mappings[163] = ItemType.PinkWool; - mappings[164] = ItemType.GrayWool; - mappings[165] = ItemType.LightGrayWool; - mappings[166] = ItemType.CyanWool; - mappings[167] = ItemType.PurpleWool; - mappings[168] = ItemType.BlueWool; - mappings[169] = ItemType.BrownWool; - mappings[170] = ItemType.GreenWool; - mappings[171] = ItemType.RedWool; - mappings[172] = ItemType.BlackWool; - mappings[173] = ItemType.Dandelion; - mappings[174] = ItemType.Poppy; - mappings[175] = ItemType.BlueOrchid; - mappings[176] = ItemType.Allium; - mappings[177] = ItemType.AzureBluet; - mappings[178] = ItemType.RedTulip; - mappings[179] = ItemType.OrangeTulip; - mappings[180] = ItemType.WhiteTulip; - mappings[181] = ItemType.PinkTulip; - mappings[182] = ItemType.OxeyeDaisy; - mappings[183] = ItemType.Cornflower; - mappings[184] = ItemType.LilyOfTheValley; - mappings[185] = ItemType.WitherRose; - mappings[186] = ItemType.SporeBlossom; - mappings[187] = ItemType.BrownMushroom; - mappings[188] = ItemType.RedMushroom; - mappings[189] = ItemType.CrimsonFungus; - mappings[190] = ItemType.WarpedFungus; - mappings[191] = ItemType.CrimsonRoots; - mappings[192] = ItemType.WarpedRoots; - mappings[193] = ItemType.NetherSprouts; - mappings[194] = ItemType.WeepingVines; - mappings[195] = ItemType.TwistingVines; - mappings[196] = ItemType.SugarCane; - mappings[197] = ItemType.Kelp; - mappings[198] = ItemType.MossCarpet; - mappings[199] = ItemType.MossBlock; - mappings[200] = ItemType.HangingRoots; - mappings[201] = ItemType.BigDripleaf; - mappings[202] = ItemType.SmallDripleaf; - mappings[203] = ItemType.Bamboo; - mappings[204] = ItemType.OakSlab; - mappings[205] = ItemType.SpruceSlab; - mappings[206] = ItemType.BirchSlab; - mappings[207] = ItemType.JungleSlab; - mappings[208] = ItemType.AcaciaSlab; - mappings[209] = ItemType.DarkOakSlab; - mappings[210] = ItemType.CrimsonSlab; - mappings[211] = ItemType.WarpedSlab; - mappings[212] = ItemType.StoneSlab; - mappings[213] = ItemType.SmoothStoneSlab; - mappings[214] = ItemType.SandstoneSlab; - mappings[215] = ItemType.CutSandstoneSlab; - mappings[216] = ItemType.PetrifiedOakSlab; - mappings[217] = ItemType.CobblestoneSlab; - mappings[218] = ItemType.BrickSlab; - mappings[219] = ItemType.StoneBrickSlab; - mappings[220] = ItemType.NetherBrickSlab; - mappings[221] = ItemType.QuartzSlab; - mappings[222] = ItemType.RedSandstoneSlab; - mappings[223] = ItemType.CutRedSandstoneSlab; - mappings[224] = ItemType.PurpurSlab; - mappings[225] = ItemType.PrismarineSlab; - mappings[226] = ItemType.PrismarineBrickSlab; - mappings[227] = ItemType.DarkPrismarineSlab; - mappings[228] = ItemType.SmoothQuartz; - mappings[229] = ItemType.SmoothRedSandstone; - mappings[230] = ItemType.SmoothSandstone; - mappings[231] = ItemType.SmoothStone; - mappings[232] = ItemType.Bricks; - mappings[233] = ItemType.Bookshelf; - mappings[234] = ItemType.MossyCobblestone; - mappings[235] = ItemType.Obsidian; - mappings[236] = ItemType.Torch; - mappings[237] = ItemType.EndRod; - mappings[238] = ItemType.ChorusPlant; - mappings[239] = ItemType.ChorusFlower; - mappings[240] = ItemType.PurpurBlock; - mappings[241] = ItemType.PurpurPillar; - mappings[242] = ItemType.PurpurStairs; - mappings[243] = ItemType.Spawner; - mappings[244] = ItemType.OakStairs; - mappings[245] = ItemType.Chest; - mappings[246] = ItemType.CraftingTable; - mappings[247] = ItemType.Farmland; - mappings[248] = ItemType.Furnace; - mappings[249] = ItemType.Ladder; - mappings[250] = ItemType.CobblestoneStairs; - mappings[251] = ItemType.Snow; - mappings[252] = ItemType.Ice; - mappings[253] = ItemType.SnowBlock; - mappings[254] = ItemType.Cactus; - mappings[255] = ItemType.Clay; - mappings[256] = ItemType.Jukebox; - mappings[257] = ItemType.OakFence; - mappings[258] = ItemType.SpruceFence; - mappings[259] = ItemType.BirchFence; - mappings[260] = ItemType.JungleFence; - mappings[261] = ItemType.AcaciaFence; - mappings[262] = ItemType.DarkOakFence; - mappings[263] = ItemType.CrimsonFence; - mappings[264] = ItemType.WarpedFence; - mappings[265] = ItemType.Pumpkin; - mappings[266] = ItemType.CarvedPumpkin; - mappings[267] = ItemType.JackOLantern; - mappings[268] = ItemType.Netherrack; - mappings[269] = ItemType.SoulSand; - mappings[270] = ItemType.SoulSoil; - mappings[271] = ItemType.Basalt; - mappings[272] = ItemType.PolishedBasalt; - mappings[273] = ItemType.SmoothBasalt; - mappings[274] = ItemType.SoulTorch; - mappings[275] = ItemType.Glowstone; - mappings[276] = ItemType.InfestedStone; - mappings[277] = ItemType.InfestedCobblestone; - mappings[278] = ItemType.InfestedStoneBricks; - mappings[279] = ItemType.InfestedMossyStoneBricks; - mappings[280] = ItemType.InfestedCrackedStoneBricks; - mappings[281] = ItemType.InfestedChiseledStoneBricks; - mappings[282] = ItemType.InfestedDeepslate; - mappings[283] = ItemType.StoneBricks; - mappings[284] = ItemType.MossyStoneBricks; - mappings[285] = ItemType.CrackedStoneBricks; - mappings[286] = ItemType.ChiseledStoneBricks; - mappings[287] = ItemType.DeepslateBricks; - mappings[288] = ItemType.CrackedDeepslateBricks; - mappings[289] = ItemType.DeepslateTiles; - mappings[290] = ItemType.CrackedDeepslateTiles; - mappings[291] = ItemType.ChiseledDeepslate; - mappings[292] = ItemType.BrownMushroomBlock; - mappings[293] = ItemType.RedMushroomBlock; - mappings[294] = ItemType.MushroomStem; - mappings[295] = ItemType.IronBars; - mappings[296] = ItemType.Chain; - mappings[297] = ItemType.GlassPane; - mappings[298] = ItemType.Melon; - mappings[299] = ItemType.Vine; - mappings[300] = ItemType.GlowLichen; - mappings[301] = ItemType.BrickStairs; - mappings[302] = ItemType.StoneBrickStairs; - mappings[303] = ItemType.Mycelium; - mappings[304] = ItemType.LilyPad; - mappings[305] = ItemType.NetherBricks; - mappings[306] = ItemType.CrackedNetherBricks; - mappings[307] = ItemType.ChiseledNetherBricks; - mappings[308] = ItemType.NetherBrickFence; - mappings[309] = ItemType.NetherBrickStairs; - mappings[310] = ItemType.EnchantingTable; - mappings[311] = ItemType.EndPortalFrame; - mappings[312] = ItemType.EndStone; - mappings[313] = ItemType.EndStoneBricks; - mappings[314] = ItemType.DragonEgg; - mappings[315] = ItemType.SandstoneStairs; - mappings[316] = ItemType.EnderChest; - mappings[317] = ItemType.EmeraldBlock; - mappings[318] = ItemType.SpruceStairs; - mappings[319] = ItemType.BirchStairs; - mappings[320] = ItemType.JungleStairs; - mappings[321] = ItemType.CrimsonStairs; - mappings[322] = ItemType.WarpedStairs; - mappings[323] = ItemType.CommandBlock; - mappings[324] = ItemType.Beacon; - mappings[325] = ItemType.CobblestoneWall; - mappings[326] = ItemType.MossyCobblestoneWall; - mappings[327] = ItemType.BrickWall; - mappings[328] = ItemType.PrismarineWall; - mappings[329] = ItemType.RedSandstoneWall; - mappings[330] = ItemType.MossyStoneBrickWall; - mappings[331] = ItemType.GraniteWall; - mappings[332] = ItemType.StoneBrickWall; - mappings[333] = ItemType.NetherBrickWall; - mappings[334] = ItemType.AndesiteWall; - mappings[335] = ItemType.RedNetherBrickWall; - mappings[336] = ItemType.SandstoneWall; - mappings[337] = ItemType.EndStoneBrickWall; - mappings[338] = ItemType.DioriteWall; - mappings[339] = ItemType.BlackstoneWall; - mappings[340] = ItemType.PolishedBlackstoneWall; - mappings[341] = ItemType.PolishedBlackstoneBrickWall; - mappings[342] = ItemType.CobbledDeepslateWall; - mappings[343] = ItemType.PolishedDeepslateWall; - mappings[344] = ItemType.DeepslateBrickWall; - mappings[345] = ItemType.DeepslateTileWall; - mappings[346] = ItemType.Anvil; - mappings[347] = ItemType.ChippedAnvil; - mappings[348] = ItemType.DamagedAnvil; - mappings[349] = ItemType.ChiseledQuartzBlock; - mappings[350] = ItemType.QuartzBlock; - mappings[351] = ItemType.QuartzBricks; - mappings[352] = ItemType.QuartzPillar; - mappings[353] = ItemType.QuartzStairs; - mappings[354] = ItemType.WhiteTerracotta; - mappings[355] = ItemType.OrangeTerracotta; - mappings[356] = ItemType.MagentaTerracotta; - mappings[357] = ItemType.LightBlueTerracotta; - mappings[358] = ItemType.YellowTerracotta; - mappings[359] = ItemType.LimeTerracotta; - mappings[360] = ItemType.PinkTerracotta; - mappings[361] = ItemType.GrayTerracotta; - mappings[362] = ItemType.LightGrayTerracotta; - mappings[363] = ItemType.CyanTerracotta; - mappings[364] = ItemType.PurpleTerracotta; - mappings[365] = ItemType.BlueTerracotta; - mappings[366] = ItemType.BrownTerracotta; - mappings[367] = ItemType.GreenTerracotta; - mappings[368] = ItemType.RedTerracotta; - mappings[369] = ItemType.BlackTerracotta; - mappings[370] = ItemType.Barrier; - mappings[371] = ItemType.Light; - mappings[372] = ItemType.HayBlock; - mappings[373] = ItemType.WhiteCarpet; - mappings[374] = ItemType.OrangeCarpet; - mappings[375] = ItemType.MagentaCarpet; - mappings[376] = ItemType.LightBlueCarpet; - mappings[377] = ItemType.YellowCarpet; - mappings[378] = ItemType.LimeCarpet; - mappings[379] = ItemType.PinkCarpet; - mappings[380] = ItemType.GrayCarpet; - mappings[381] = ItemType.LightGrayCarpet; - mappings[382] = ItemType.CyanCarpet; - mappings[383] = ItemType.PurpleCarpet; - mappings[384] = ItemType.BlueCarpet; - mappings[385] = ItemType.BrownCarpet; - mappings[386] = ItemType.GreenCarpet; - mappings[387] = ItemType.RedCarpet; - mappings[388] = ItemType.BlackCarpet; - mappings[389] = ItemType.Terracotta; - mappings[390] = ItemType.PackedIce; - mappings[391] = ItemType.AcaciaStairs; - mappings[392] = ItemType.DarkOakStairs; - mappings[393] = ItemType.DirtPath; - mappings[394] = ItemType.Sunflower; - mappings[395] = ItemType.Lilac; - mappings[396] = ItemType.RoseBush; - mappings[397] = ItemType.Peony; - mappings[398] = ItemType.TallGrass; - mappings[399] = ItemType.LargeFern; - mappings[400] = ItemType.WhiteStainedGlass; - mappings[401] = ItemType.OrangeStainedGlass; - mappings[402] = ItemType.MagentaStainedGlass; - mappings[403] = ItemType.LightBlueStainedGlass; - mappings[404] = ItemType.YellowStainedGlass; - mappings[405] = ItemType.LimeStainedGlass; - mappings[406] = ItemType.PinkStainedGlass; - mappings[407] = ItemType.GrayStainedGlass; - mappings[408] = ItemType.LightGrayStainedGlass; - mappings[409] = ItemType.CyanStainedGlass; - mappings[410] = ItemType.PurpleStainedGlass; - mappings[411] = ItemType.BlueStainedGlass; - mappings[412] = ItemType.BrownStainedGlass; - mappings[413] = ItemType.GreenStainedGlass; - mappings[414] = ItemType.RedStainedGlass; - mappings[415] = ItemType.BlackStainedGlass; - mappings[416] = ItemType.WhiteStainedGlassPane; - mappings[417] = ItemType.OrangeStainedGlassPane; - mappings[418] = ItemType.MagentaStainedGlassPane; - mappings[419] = ItemType.LightBlueStainedGlassPane; - mappings[420] = ItemType.YellowStainedGlassPane; - mappings[421] = ItemType.LimeStainedGlassPane; - mappings[422] = ItemType.PinkStainedGlassPane; - mappings[423] = ItemType.GrayStainedGlassPane; - mappings[424] = ItemType.LightGrayStainedGlassPane; - mappings[425] = ItemType.CyanStainedGlassPane; - mappings[426] = ItemType.PurpleStainedGlassPane; - mappings[427] = ItemType.BlueStainedGlassPane; - mappings[428] = ItemType.BrownStainedGlassPane; - mappings[429] = ItemType.GreenStainedGlassPane; - mappings[430] = ItemType.RedStainedGlassPane; - mappings[431] = ItemType.BlackStainedGlassPane; - mappings[432] = ItemType.Prismarine; - mappings[433] = ItemType.PrismarineBricks; - mappings[434] = ItemType.DarkPrismarine; - mappings[435] = ItemType.PrismarineStairs; - mappings[436] = ItemType.PrismarineBrickStairs; - mappings[437] = ItemType.DarkPrismarineStairs; - mappings[438] = ItemType.SeaLantern; - mappings[439] = ItemType.RedSandstone; - mappings[440] = ItemType.ChiseledRedSandstone; - mappings[441] = ItemType.CutRedSandstone; - mappings[442] = ItemType.RedSandstoneStairs; - mappings[443] = ItemType.RepeatingCommandBlock; - mappings[444] = ItemType.ChainCommandBlock; - mappings[445] = ItemType.MagmaBlock; - mappings[446] = ItemType.NetherWartBlock; - mappings[447] = ItemType.WarpedWartBlock; - mappings[448] = ItemType.RedNetherBricks; - mappings[449] = ItemType.BoneBlock; - mappings[450] = ItemType.StructureVoid; - mappings[451] = ItemType.ShulkerBox; - mappings[452] = ItemType.WhiteShulkerBox; - mappings[453] = ItemType.OrangeShulkerBox; - mappings[454] = ItemType.MagentaShulkerBox; - mappings[455] = ItemType.LightBlueShulkerBox; - mappings[456] = ItemType.YellowShulkerBox; - mappings[457] = ItemType.LimeShulkerBox; - mappings[458] = ItemType.PinkShulkerBox; - mappings[459] = ItemType.GrayShulkerBox; - mappings[460] = ItemType.LightGrayShulkerBox; - mappings[461] = ItemType.CyanShulkerBox; - mappings[462] = ItemType.PurpleShulkerBox; - mappings[463] = ItemType.BlueShulkerBox; - mappings[464] = ItemType.BrownShulkerBox; - mappings[465] = ItemType.GreenShulkerBox; - mappings[466] = ItemType.RedShulkerBox; - mappings[467] = ItemType.BlackShulkerBox; - mappings[468] = ItemType.WhiteGlazedTerracotta; - mappings[469] = ItemType.OrangeGlazedTerracotta; - mappings[470] = ItemType.MagentaGlazedTerracotta; - mappings[471] = ItemType.LightBlueGlazedTerracotta; - mappings[472] = ItemType.YellowGlazedTerracotta; - mappings[473] = ItemType.LimeGlazedTerracotta; - mappings[474] = ItemType.PinkGlazedTerracotta; - mappings[475] = ItemType.GrayGlazedTerracotta; - mappings[476] = ItemType.LightGrayGlazedTerracotta; - mappings[477] = ItemType.CyanGlazedTerracotta; - mappings[478] = ItemType.PurpleGlazedTerracotta; - mappings[479] = ItemType.BlueGlazedTerracotta; - mappings[480] = ItemType.BrownGlazedTerracotta; - mappings[481] = ItemType.GreenGlazedTerracotta; - mappings[482] = ItemType.RedGlazedTerracotta; - mappings[483] = ItemType.BlackGlazedTerracotta; - mappings[484] = ItemType.WhiteConcrete; - mappings[485] = ItemType.OrangeConcrete; - mappings[486] = ItemType.MagentaConcrete; - mappings[487] = ItemType.LightBlueConcrete; - mappings[488] = ItemType.YellowConcrete; - mappings[489] = ItemType.LimeConcrete; - mappings[490] = ItemType.PinkConcrete; - mappings[491] = ItemType.GrayConcrete; - mappings[492] = ItemType.LightGrayConcrete; - mappings[493] = ItemType.CyanConcrete; - mappings[494] = ItemType.PurpleConcrete; - mappings[495] = ItemType.BlueConcrete; - mappings[496] = ItemType.BrownConcrete; - mappings[497] = ItemType.GreenConcrete; - mappings[498] = ItemType.RedConcrete; - mappings[499] = ItemType.BlackConcrete; - mappings[500] = ItemType.WhiteConcretePowder; - mappings[501] = ItemType.OrangeConcretePowder; - mappings[502] = ItemType.MagentaConcretePowder; - mappings[503] = ItemType.LightBlueConcretePowder; - mappings[504] = ItemType.YellowConcretePowder; - mappings[505] = ItemType.LimeConcretePowder; - mappings[506] = ItemType.PinkConcretePowder; - mappings[507] = ItemType.GrayConcretePowder; - mappings[508] = ItemType.LightGrayConcretePowder; - mappings[509] = ItemType.CyanConcretePowder; - mappings[510] = ItemType.PurpleConcretePowder; - mappings[511] = ItemType.BlueConcretePowder; - mappings[512] = ItemType.BrownConcretePowder; - mappings[513] = ItemType.GreenConcretePowder; - mappings[514] = ItemType.RedConcretePowder; - mappings[515] = ItemType.BlackConcretePowder; - mappings[516] = ItemType.TurtleEgg; - mappings[517] = ItemType.DeadTubeCoralBlock; - mappings[518] = ItemType.DeadBrainCoralBlock; - mappings[519] = ItemType.DeadBubbleCoralBlock; - mappings[520] = ItemType.DeadFireCoralBlock; - mappings[521] = ItemType.DeadHornCoralBlock; - mappings[522] = ItemType.TubeCoralBlock; - mappings[523] = ItemType.BrainCoralBlock; - mappings[524] = ItemType.BubbleCoralBlock; - mappings[525] = ItemType.FireCoralBlock; - mappings[526] = ItemType.HornCoralBlock; - mappings[527] = ItemType.TubeCoral; - mappings[528] = ItemType.BrainCoral; - mappings[529] = ItemType.BubbleCoral; - mappings[530] = ItemType.FireCoral; - mappings[531] = ItemType.HornCoral; - mappings[532] = ItemType.DeadBrainCoral; - mappings[533] = ItemType.DeadBubbleCoral; - mappings[534] = ItemType.DeadFireCoral; - mappings[535] = ItemType.DeadHornCoral; - mappings[536] = ItemType.DeadTubeCoral; - mappings[537] = ItemType.TubeCoralFan; - mappings[538] = ItemType.BrainCoralFan; - mappings[539] = ItemType.BubbleCoralFan; - mappings[540] = ItemType.FireCoralFan; - mappings[541] = ItemType.HornCoralFan; - mappings[542] = ItemType.DeadTubeCoralFan; - mappings[543] = ItemType.DeadBrainCoralFan; - mappings[544] = ItemType.DeadBubbleCoralFan; - mappings[545] = ItemType.DeadFireCoralFan; - mappings[546] = ItemType.DeadHornCoralFan; - mappings[547] = ItemType.BlueIce; - mappings[548] = ItemType.Conduit; - mappings[549] = ItemType.PolishedGraniteStairs; - mappings[550] = ItemType.SmoothRedSandstoneStairs; - mappings[551] = ItemType.MossyStoneBrickStairs; - mappings[552] = ItemType.PolishedDioriteStairs; - mappings[553] = ItemType.MossyCobblestoneStairs; - mappings[554] = ItemType.EndStoneBrickStairs; - mappings[555] = ItemType.StoneStairs; - mappings[556] = ItemType.SmoothSandstoneStairs; - mappings[557] = ItemType.SmoothQuartzStairs; - mappings[558] = ItemType.GraniteStairs; - mappings[559] = ItemType.AndesiteStairs; - mappings[560] = ItemType.RedNetherBrickStairs; - mappings[561] = ItemType.PolishedAndesiteStairs; - mappings[562] = ItemType.DioriteStairs; - mappings[563] = ItemType.CobbledDeepslateStairs; - mappings[564] = ItemType.PolishedDeepslateStairs; - mappings[565] = ItemType.DeepslateBrickStairs; - mappings[566] = ItemType.DeepslateTileStairs; - mappings[567] = ItemType.PolishedGraniteSlab; - mappings[568] = ItemType.SmoothRedSandstoneSlab; - mappings[569] = ItemType.MossyStoneBrickSlab; - mappings[570] = ItemType.PolishedDioriteSlab; - mappings[571] = ItemType.MossyCobblestoneSlab; - mappings[572] = ItemType.EndStoneBrickSlab; - mappings[573] = ItemType.SmoothSandstoneSlab; - mappings[574] = ItemType.SmoothQuartzSlab; - mappings[575] = ItemType.GraniteSlab; - mappings[576] = ItemType.AndesiteSlab; - mappings[577] = ItemType.RedNetherBrickSlab; - mappings[578] = ItemType.PolishedAndesiteSlab; - mappings[579] = ItemType.DioriteSlab; - mappings[580] = ItemType.CobbledDeepslateSlab; - mappings[581] = ItemType.PolishedDeepslateSlab; - mappings[582] = ItemType.DeepslateBrickSlab; - mappings[583] = ItemType.DeepslateTileSlab; - mappings[584] = ItemType.Scaffolding; - mappings[585] = ItemType.Redstone; - mappings[586] = ItemType.RedstoneTorch; - mappings[587] = ItemType.RedstoneBlock; - mappings[588] = ItemType.Repeater; - mappings[589] = ItemType.Comparator; - mappings[590] = ItemType.Piston; - mappings[591] = ItemType.StickyPiston; - mappings[592] = ItemType.SlimeBlock; - mappings[593] = ItemType.HoneyBlock; - mappings[594] = ItemType.Observer; - mappings[595] = ItemType.Hopper; - mappings[596] = ItemType.Dispenser; - mappings[597] = ItemType.Dropper; - mappings[598] = ItemType.Lectern; - mappings[599] = ItemType.Target; - mappings[600] = ItemType.Lever; - mappings[601] = ItemType.LightningRod; - mappings[602] = ItemType.DaylightDetector; - mappings[603] = ItemType.SculkSensor; - mappings[604] = ItemType.TripwireHook; - mappings[605] = ItemType.TrappedChest; - mappings[606] = ItemType.Tnt; - mappings[607] = ItemType.RedstoneLamp; - mappings[608] = ItemType.NoteBlock; - mappings[609] = ItemType.StoneButton; - mappings[610] = ItemType.PolishedBlackstoneButton; - mappings[611] = ItemType.OakButton; - mappings[612] = ItemType.SpruceButton; - mappings[613] = ItemType.BirchButton; - mappings[614] = ItemType.JungleButton; - mappings[615] = ItemType.AcaciaButton; - mappings[616] = ItemType.DarkOakButton; - mappings[617] = ItemType.CrimsonButton; - mappings[618] = ItemType.WarpedButton; - mappings[619] = ItemType.StonePressurePlate; - mappings[620] = ItemType.PolishedBlackstonePressurePlate; - mappings[621] = ItemType.LightWeightedPressurePlate; - mappings[622] = ItemType.HeavyWeightedPressurePlate; - mappings[623] = ItemType.OakPressurePlate; - mappings[624] = ItemType.SprucePressurePlate; - mappings[625] = ItemType.BirchPressurePlate; - mappings[626] = ItemType.JunglePressurePlate; - mappings[627] = ItemType.AcaciaPressurePlate; - mappings[628] = ItemType.DarkOakPressurePlate; - mappings[629] = ItemType.CrimsonPressurePlate; - mappings[630] = ItemType.WarpedPressurePlate; - mappings[631] = ItemType.IronDoor; - mappings[632] = ItemType.OakDoor; - mappings[633] = ItemType.SpruceDoor; - mappings[634] = ItemType.BirchDoor; - mappings[635] = ItemType.JungleDoor; - mappings[636] = ItemType.AcaciaDoor; - mappings[637] = ItemType.DarkOakDoor; - mappings[638] = ItemType.CrimsonDoor; - mappings[639] = ItemType.WarpedDoor; - mappings[640] = ItemType.IronTrapdoor; - mappings[641] = ItemType.OakTrapdoor; - mappings[642] = ItemType.SpruceTrapdoor; - mappings[643] = ItemType.BirchTrapdoor; - mappings[644] = ItemType.JungleTrapdoor; - mappings[645] = ItemType.AcaciaTrapdoor; - mappings[646] = ItemType.DarkOakTrapdoor; - mappings[647] = ItemType.CrimsonTrapdoor; - mappings[648] = ItemType.WarpedTrapdoor; - mappings[649] = ItemType.OakFenceGate; - mappings[650] = ItemType.SpruceFenceGate; - mappings[651] = ItemType.BirchFenceGate; - mappings[652] = ItemType.JungleFenceGate; - mappings[653] = ItemType.AcaciaFenceGate; - mappings[654] = ItemType.DarkOakFenceGate; - mappings[655] = ItemType.CrimsonFenceGate; - mappings[656] = ItemType.WarpedFenceGate; - mappings[657] = ItemType.PoweredRail; - mappings[658] = ItemType.DetectorRail; - mappings[659] = ItemType.Rail; - mappings[660] = ItemType.ActivatorRail; - mappings[661] = ItemType.Saddle; - mappings[662] = ItemType.Minecart; - mappings[663] = ItemType.ChestMinecart; - mappings[664] = ItemType.FurnaceMinecart; - mappings[665] = ItemType.TntMinecart; - mappings[666] = ItemType.HopperMinecart; - mappings[667] = ItemType.CarrotOnAStick; - mappings[668] = ItemType.WarpedFungusOnAStick; - mappings[669] = ItemType.Elytra; - mappings[670] = ItemType.OakBoat; - mappings[671] = ItemType.SpruceBoat; - mappings[672] = ItemType.BirchBoat; - mappings[673] = ItemType.JungleBoat; - mappings[674] = ItemType.AcaciaBoat; - mappings[675] = ItemType.DarkOakBoat; - mappings[676] = ItemType.StructureBlock; - mappings[677] = ItemType.Jigsaw; - mappings[678] = ItemType.TurtleHelmet; - mappings[679] = ItemType.TurtleScute; - mappings[680] = ItemType.FlintAndSteel; - mappings[681] = ItemType.Apple; - mappings[682] = ItemType.Bow; - mappings[683] = ItemType.Arrow; - mappings[684] = ItemType.Coal; - mappings[685] = ItemType.Charcoal; - mappings[686] = ItemType.Diamond; - mappings[687] = ItemType.Emerald; - mappings[688] = ItemType.LapisLazuli; - mappings[689] = ItemType.Quartz; - mappings[690] = ItemType.AmethystShard; - mappings[691] = ItemType.RawIron; - mappings[692] = ItemType.IronIngot; - mappings[693] = ItemType.RawCopper; - mappings[694] = ItemType.CopperIngot; - mappings[695] = ItemType.RawGold; - mappings[696] = ItemType.GoldIngot; - mappings[697] = ItemType.NetheriteIngot; - mappings[698] = ItemType.NetheriteScrap; - mappings[699] = ItemType.WoodenSword; - mappings[700] = ItemType.WoodenShovel; - mappings[701] = ItemType.WoodenPickaxe; - mappings[702] = ItemType.WoodenAxe; - mappings[703] = ItemType.WoodenHoe; - mappings[704] = ItemType.StoneSword; - mappings[705] = ItemType.StoneShovel; - mappings[706] = ItemType.StonePickaxe; - mappings[707] = ItemType.StoneAxe; - mappings[708] = ItemType.StoneHoe; - mappings[709] = ItemType.GoldenSword; - mappings[710] = ItemType.GoldenShovel; - mappings[711] = ItemType.GoldenPickaxe; - mappings[712] = ItemType.GoldenAxe; - mappings[713] = ItemType.GoldenHoe; - mappings[714] = ItemType.IronSword; - mappings[715] = ItemType.IronShovel; - mappings[716] = ItemType.IronPickaxe; - mappings[717] = ItemType.IronAxe; - mappings[718] = ItemType.IronHoe; - mappings[719] = ItemType.DiamondSword; - mappings[720] = ItemType.DiamondShovel; - mappings[721] = ItemType.DiamondPickaxe; - mappings[722] = ItemType.DiamondAxe; - mappings[723] = ItemType.DiamondHoe; - mappings[724] = ItemType.NetheriteSword; - mappings[725] = ItemType.NetheriteShovel; - mappings[726] = ItemType.NetheritePickaxe; - mappings[727] = ItemType.NetheriteAxe; - mappings[728] = ItemType.NetheriteHoe; - mappings[729] = ItemType.Stick; - mappings[730] = ItemType.Bowl; - mappings[731] = ItemType.MushroomStew; - mappings[732] = ItemType.String; - mappings[733] = ItemType.Feather; - mappings[734] = ItemType.Gunpowder; - mappings[735] = ItemType.WheatSeeds; - mappings[736] = ItemType.Wheat; - mappings[737] = ItemType.Bread; - mappings[738] = ItemType.LeatherHelmet; - mappings[739] = ItemType.LeatherChestplate; - mappings[740] = ItemType.LeatherLeggings; - mappings[741] = ItemType.LeatherBoots; - mappings[742] = ItemType.ChainmailHelmet; - mappings[743] = ItemType.ChainmailChestplate; - mappings[744] = ItemType.ChainmailLeggings; - mappings[745] = ItemType.ChainmailBoots; - mappings[746] = ItemType.IronHelmet; - mappings[747] = ItemType.IronChestplate; - mappings[748] = ItemType.IronLeggings; - mappings[749] = ItemType.IronBoots; - mappings[750] = ItemType.DiamondHelmet; - mappings[751] = ItemType.DiamondChestplate; - mappings[752] = ItemType.DiamondLeggings; - mappings[753] = ItemType.DiamondBoots; - mappings[754] = ItemType.GoldenHelmet; - mappings[755] = ItemType.GoldenChestplate; - mappings[756] = ItemType.GoldenLeggings; - mappings[757] = ItemType.GoldenBoots; - mappings[758] = ItemType.NetheriteHelmet; - mappings[759] = ItemType.NetheriteChestplate; - mappings[760] = ItemType.NetheriteLeggings; - mappings[761] = ItemType.NetheriteBoots; - mappings[762] = ItemType.Flint; - mappings[763] = ItemType.Porkchop; - mappings[764] = ItemType.CookedPorkchop; - mappings[765] = ItemType.Painting; - mappings[766] = ItemType.GoldenApple; - mappings[767] = ItemType.EnchantedGoldenApple; - mappings[768] = ItemType.OakSign; - mappings[769] = ItemType.SpruceSign; - mappings[770] = ItemType.BirchSign; - mappings[771] = ItemType.JungleSign; - mappings[772] = ItemType.AcaciaSign; - mappings[773] = ItemType.DarkOakSign; - mappings[774] = ItemType.CrimsonSign; - mappings[775] = ItemType.WarpedSign; - mappings[776] = ItemType.Bucket; - mappings[777] = ItemType.WaterBucket; - mappings[778] = ItemType.LavaBucket; - mappings[779] = ItemType.PowderSnowBucket; - mappings[780] = ItemType.Snowball; - mappings[781] = ItemType.Leather; - mappings[782] = ItemType.MilkBucket; - mappings[783] = ItemType.PufferfishBucket; - mappings[784] = ItemType.SalmonBucket; - mappings[785] = ItemType.CodBucket; - mappings[786] = ItemType.TropicalFishBucket; - mappings[787] = ItemType.AxolotlBucket; - mappings[788] = ItemType.Brick; - mappings[789] = ItemType.ClayBall; - mappings[790] = ItemType.DriedKelpBlock; - mappings[791] = ItemType.Paper; - mappings[792] = ItemType.Book; - mappings[793] = ItemType.SlimeBall; - mappings[794] = ItemType.Egg; - mappings[795] = ItemType.Compass; - mappings[796] = ItemType.Bundle; - mappings[797] = ItemType.FishingRod; - mappings[798] = ItemType.Clock; - mappings[799] = ItemType.Spyglass; - mappings[800] = ItemType.GlowstoneDust; - mappings[801] = ItemType.Cod; - mappings[802] = ItemType.Salmon; - mappings[803] = ItemType.TropicalFish; - mappings[804] = ItemType.Pufferfish; - mappings[805] = ItemType.CookedCod; - mappings[806] = ItemType.CookedSalmon; - mappings[807] = ItemType.InkSac; - mappings[808] = ItemType.GlowInkSac; - mappings[809] = ItemType.CocoaBeans; - mappings[810] = ItemType.WhiteDye; - mappings[811] = ItemType.OrangeDye; - mappings[812] = ItemType.MagentaDye; - mappings[813] = ItemType.LightBlueDye; - mappings[814] = ItemType.YellowDye; - mappings[815] = ItemType.LimeDye; - mappings[816] = ItemType.PinkDye; - mappings[817] = ItemType.GrayDye; - mappings[818] = ItemType.LightGrayDye; - mappings[819] = ItemType.CyanDye; - mappings[820] = ItemType.PurpleDye; - mappings[821] = ItemType.BlueDye; - mappings[822] = ItemType.BrownDye; - mappings[823] = ItemType.GreenDye; - mappings[824] = ItemType.RedDye; - mappings[825] = ItemType.BlackDye; - mappings[826] = ItemType.BoneMeal; - mappings[827] = ItemType.Bone; - mappings[828] = ItemType.Sugar; - mappings[829] = ItemType.Cake; - mappings[830] = ItemType.WhiteBed; - mappings[831] = ItemType.OrangeBed; - mappings[832] = ItemType.MagentaBed; - mappings[833] = ItemType.LightBlueBed; - mappings[834] = ItemType.YellowBed; - mappings[835] = ItemType.LimeBed; - mappings[836] = ItemType.PinkBed; - mappings[837] = ItemType.GrayBed; - mappings[838] = ItemType.LightGrayBed; - mappings[839] = ItemType.CyanBed; - mappings[840] = ItemType.PurpleBed; - mappings[841] = ItemType.BlueBed; - mappings[842] = ItemType.BrownBed; - mappings[843] = ItemType.GreenBed; - mappings[844] = ItemType.RedBed; - mappings[845] = ItemType.BlackBed; - mappings[846] = ItemType.Cookie; - mappings[847] = ItemType.FilledMap; - mappings[848] = ItemType.Shears; - mappings[849] = ItemType.MelonSlice; - mappings[850] = ItemType.DriedKelp; - mappings[851] = ItemType.PumpkinSeeds; - mappings[852] = ItemType.MelonSeeds; - mappings[853] = ItemType.Beef; - mappings[854] = ItemType.CookedBeef; - mappings[855] = ItemType.Chicken; - mappings[856] = ItemType.CookedChicken; - mappings[857] = ItemType.RottenFlesh; - mappings[858] = ItemType.EnderPearl; - mappings[859] = ItemType.BlazeRod; - mappings[860] = ItemType.GhastTear; - mappings[861] = ItemType.GoldNugget; - mappings[862] = ItemType.NetherWart; - mappings[863] = ItemType.Potion; - mappings[864] = ItemType.GlassBottle; - mappings[865] = ItemType.SpiderEye; - mappings[866] = ItemType.FermentedSpiderEye; - mappings[867] = ItemType.BlazePowder; - mappings[868] = ItemType.MagmaCream; - mappings[869] = ItemType.BrewingStand; - mappings[870] = ItemType.Cauldron; - mappings[871] = ItemType.EnderEye; - mappings[872] = ItemType.GlisteringMelonSlice; - mappings[873] = ItemType.AxolotlSpawnEgg; - mappings[874] = ItemType.BatSpawnEgg; - mappings[875] = ItemType.BeeSpawnEgg; - mappings[876] = ItemType.BlazeSpawnEgg; - mappings[877] = ItemType.CatSpawnEgg; - mappings[878] = ItemType.CaveSpiderSpawnEgg; - mappings[879] = ItemType.ChickenSpawnEgg; - mappings[880] = ItemType.CodSpawnEgg; - mappings[881] = ItemType.CowSpawnEgg; - mappings[882] = ItemType.CreeperSpawnEgg; - mappings[883] = ItemType.DolphinSpawnEgg; - mappings[884] = ItemType.DonkeySpawnEgg; - mappings[885] = ItemType.DrownedSpawnEgg; - mappings[886] = ItemType.ElderGuardianSpawnEgg; - mappings[887] = ItemType.EndermanSpawnEgg; - mappings[888] = ItemType.EndermiteSpawnEgg; - mappings[889] = ItemType.EvokerSpawnEgg; - mappings[890] = ItemType.FoxSpawnEgg; - mappings[891] = ItemType.GhastSpawnEgg; - mappings[892] = ItemType.GlowSquidSpawnEgg; - mappings[893] = ItemType.GoatSpawnEgg; - mappings[894] = ItemType.GuardianSpawnEgg; - mappings[895] = ItemType.HoglinSpawnEgg; - mappings[896] = ItemType.HorseSpawnEgg; - mappings[897] = ItemType.HuskSpawnEgg; - mappings[898] = ItemType.LlamaSpawnEgg; - mappings[899] = ItemType.MagmaCubeSpawnEgg; - mappings[900] = ItemType.MooshroomSpawnEgg; - mappings[901] = ItemType.MuleSpawnEgg; - mappings[902] = ItemType.OcelotSpawnEgg; - mappings[903] = ItemType.PandaSpawnEgg; - mappings[904] = ItemType.ParrotSpawnEgg; - mappings[905] = ItemType.PhantomSpawnEgg; - mappings[906] = ItemType.PigSpawnEgg; - mappings[907] = ItemType.PiglinSpawnEgg; - mappings[908] = ItemType.PiglinBruteSpawnEgg; - mappings[909] = ItemType.PillagerSpawnEgg; - mappings[910] = ItemType.PolarBearSpawnEgg; - mappings[911] = ItemType.PufferfishSpawnEgg; - mappings[912] = ItemType.RabbitSpawnEgg; - mappings[913] = ItemType.RavagerSpawnEgg; - mappings[914] = ItemType.SalmonSpawnEgg; - mappings[915] = ItemType.SheepSpawnEgg; - mappings[916] = ItemType.ShulkerSpawnEgg; - mappings[917] = ItemType.SilverfishSpawnEgg; - mappings[918] = ItemType.SkeletonSpawnEgg; - mappings[919] = ItemType.SkeletonHorseSpawnEgg; - mappings[920] = ItemType.SlimeSpawnEgg; - mappings[921] = ItemType.SpiderSpawnEgg; - mappings[922] = ItemType.SquidSpawnEgg; - mappings[923] = ItemType.StraySpawnEgg; - mappings[924] = ItemType.StriderSpawnEgg; - mappings[925] = ItemType.TraderLlamaSpawnEgg; - mappings[926] = ItemType.TropicalFishSpawnEgg; - mappings[927] = ItemType.TurtleSpawnEgg; - mappings[928] = ItemType.VexSpawnEgg; - mappings[929] = ItemType.VillagerSpawnEgg; - mappings[930] = ItemType.VindicatorSpawnEgg; - mappings[931] = ItemType.WanderingTraderSpawnEgg; - mappings[932] = ItemType.WitchSpawnEgg; - mappings[933] = ItemType.WitherSkeletonSpawnEgg; - mappings[934] = ItemType.WolfSpawnEgg; - mappings[935] = ItemType.ZoglinSpawnEgg; - mappings[936] = ItemType.ZombieSpawnEgg; - mappings[937] = ItemType.ZombieHorseSpawnEgg; - mappings[938] = ItemType.ZombieVillagerSpawnEgg; - mappings[939] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[940] = ItemType.ExperienceBottle; - mappings[941] = ItemType.FireCharge; - mappings[942] = ItemType.WritableBook; - mappings[943] = ItemType.WrittenBook; - mappings[944] = ItemType.ItemFrame; - mappings[945] = ItemType.GlowItemFrame; - mappings[946] = ItemType.FlowerPot; - mappings[947] = ItemType.Carrot; - mappings[948] = ItemType.Potato; - mappings[949] = ItemType.BakedPotato; - mappings[950] = ItemType.PoisonousPotato; - mappings[951] = ItemType.Map; - mappings[952] = ItemType.GoldenCarrot; - mappings[953] = ItemType.SkeletonSkull; - mappings[954] = ItemType.WitherSkeletonSkull; - mappings[955] = ItemType.PlayerHead; - mappings[956] = ItemType.ZombieHead; - mappings[957] = ItemType.CreeperHead; - mappings[958] = ItemType.DragonHead; - mappings[959] = ItemType.NetherStar; - mappings[960] = ItemType.PumpkinPie; - mappings[961] = ItemType.FireworkRocket; - mappings[962] = ItemType.FireworkStar; - mappings[963] = ItemType.EnchantedBook; - mappings[964] = ItemType.NetherBrick; - mappings[965] = ItemType.PrismarineShard; - mappings[966] = ItemType.PrismarineCrystals; - mappings[967] = ItemType.Rabbit; - mappings[968] = ItemType.CookedRabbit; - mappings[969] = ItemType.RabbitStew; - mappings[970] = ItemType.RabbitFoot; - mappings[971] = ItemType.RabbitHide; - mappings[972] = ItemType.ArmorStand; - mappings[973] = ItemType.IronHorseArmor; - mappings[974] = ItemType.GoldenHorseArmor; - mappings[975] = ItemType.DiamondHorseArmor; - mappings[976] = ItemType.LeatherHorseArmor; - mappings[977] = ItemType.Lead; - mappings[978] = ItemType.NameTag; - mappings[979] = ItemType.CommandBlockMinecart; - mappings[980] = ItemType.Mutton; - mappings[981] = ItemType.CookedMutton; - mappings[982] = ItemType.WhiteBanner; - mappings[983] = ItemType.OrangeBanner; - mappings[984] = ItemType.MagentaBanner; - mappings[985] = ItemType.LightBlueBanner; - mappings[986] = ItemType.YellowBanner; - mappings[987] = ItemType.LimeBanner; - mappings[988] = ItemType.PinkBanner; - mappings[989] = ItemType.GrayBanner; - mappings[990] = ItemType.LightGrayBanner; - mappings[991] = ItemType.CyanBanner; - mappings[992] = ItemType.PurpleBanner; - mappings[993] = ItemType.BlueBanner; - mappings[994] = ItemType.BrownBanner; - mappings[995] = ItemType.GreenBanner; - mappings[996] = ItemType.RedBanner; - mappings[997] = ItemType.BlackBanner; - mappings[998] = ItemType.EndCrystal; - mappings[999] = ItemType.ChorusFruit; - mappings[1000] = ItemType.PoppedChorusFruit; - mappings[1001] = ItemType.Beetroot; - mappings[1002] = ItemType.BeetrootSeeds; - mappings[1003] = ItemType.BeetrootSoup; - mappings[1004] = ItemType.DragonBreath; - mappings[1005] = ItemType.SplashPotion; - mappings[1006] = ItemType.SpectralArrow; - mappings[1007] = ItemType.TippedArrow; - mappings[1008] = ItemType.LingeringPotion; - mappings[1009] = ItemType.Shield; - mappings[1010] = ItemType.TotemOfUndying; - mappings[1011] = ItemType.ShulkerShell; - mappings[1012] = ItemType.IronNugget; - mappings[1013] = ItemType.KnowledgeBook; - mappings[1014] = ItemType.DebugStick; - mappings[1015] = ItemType.MusicDisc13; - mappings[1016] = ItemType.MusicDiscCat; - mappings[1017] = ItemType.MusicDiscBlocks; - mappings[1018] = ItemType.MusicDiscChirp; - mappings[1019] = ItemType.MusicDiscFar; - mappings[1020] = ItemType.MusicDiscMall; - mappings[1021] = ItemType.MusicDiscMellohi; - mappings[1022] = ItemType.MusicDiscStal; - mappings[1023] = ItemType.MusicDiscStrad; - mappings[1024] = ItemType.MusicDiscWard; - mappings[1025] = ItemType.MusicDisc11; - mappings[1026] = ItemType.MusicDiscWait; - mappings[1027] = ItemType.MusicDiscPigstep; - mappings[1028] = ItemType.Trident; - mappings[1029] = ItemType.PhantomMembrane; - mappings[1030] = ItemType.NautilusShell; - mappings[1031] = ItemType.HeartOfTheSea; - mappings[1032] = ItemType.Crossbow; - mappings[1033] = ItemType.SuspiciousStew; - mappings[1034] = ItemType.Loom; - mappings[1035] = ItemType.FlowerBannerPattern; - mappings[1036] = ItemType.CreeperBannerPattern; - mappings[1037] = ItemType.SkullBannerPattern; - mappings[1038] = ItemType.MojangBannerPattern; - mappings[1039] = ItemType.GlobeBannerPattern; - mappings[1040] = ItemType.PiglinBannerPattern; - mappings[1041] = ItemType.Composter; - mappings[1042] = ItemType.Barrel; - mappings[1043] = ItemType.Smoker; - mappings[1044] = ItemType.BlastFurnace; - mappings[1045] = ItemType.CartographyTable; - mappings[1046] = ItemType.FletchingTable; - mappings[1047] = ItemType.Grindstone; - mappings[1048] = ItemType.SmithingTable; - mappings[1049] = ItemType.Stonecutter; - mappings[1050] = ItemType.Bell; - mappings[1051] = ItemType.Lantern; - mappings[1052] = ItemType.SoulLantern; - mappings[1053] = ItemType.SweetBerries; - mappings[1054] = ItemType.GlowBerries; - mappings[1055] = ItemType.Campfire; - mappings[1056] = ItemType.SoulCampfire; - mappings[1057] = ItemType.Shroomlight; - mappings[1058] = ItemType.Honeycomb; - mappings[1059] = ItemType.BeeNest; - mappings[1060] = ItemType.Beehive; - mappings[1061] = ItemType.HoneyBottle; - mappings[1062] = ItemType.HoneycombBlock; - mappings[1063] = ItemType.Lodestone; - mappings[1064] = ItemType.CryingObsidian; - mappings[1065] = ItemType.Blackstone; - mappings[1066] = ItemType.BlackstoneSlab; - mappings[1067] = ItemType.BlackstoneStairs; - mappings[1068] = ItemType.GildedBlackstone; - mappings[1069] = ItemType.PolishedBlackstone; - mappings[1070] = ItemType.PolishedBlackstoneSlab; - mappings[1071] = ItemType.PolishedBlackstoneStairs; - mappings[1072] = ItemType.ChiseledPolishedBlackstone; - mappings[1073] = ItemType.PolishedBlackstoneBricks; - mappings[1074] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1075] = ItemType.PolishedBlackstoneBrickStairs; - mappings[1076] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[1077] = ItemType.RespawnAnchor; - mappings[1078] = ItemType.Candle; - mappings[1079] = ItemType.WhiteCandle; - mappings[1080] = ItemType.OrangeCandle; - mappings[1081] = ItemType.MagentaCandle; - mappings[1082] = ItemType.LightBlueCandle; - mappings[1083] = ItemType.YellowCandle; - mappings[1084] = ItemType.LimeCandle; - mappings[1085] = ItemType.PinkCandle; - mappings[1086] = ItemType.GrayCandle; - mappings[1087] = ItemType.LightGrayCandle; - mappings[1088] = ItemType.CyanCandle; - mappings[1089] = ItemType.PurpleCandle; - mappings[1090] = ItemType.BlueCandle; - mappings[1091] = ItemType.BrownCandle; - mappings[1092] = ItemType.GreenCandle; - mappings[1093] = ItemType.RedCandle; - mappings[1094] = ItemType.BlackCandle; - mappings[1095] = ItemType.SmallAmethystBud; - mappings[1096] = ItemType.MediumAmethystBud; - mappings[1097] = ItemType.LargeAmethystBud; - mappings[1098] = ItemType.AmethystCluster; - mappings[1099] = ItemType.PointedDripstone; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette118.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette118.cs deleted file mode 100644 index bc3f25ad21..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette118.cs +++ /dev/null @@ -1,1119 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette118 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette118() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.Deepslate; - mappings[9] = ItemType.CobbledDeepslate; - mappings[10] = ItemType.PolishedDeepslate; - mappings[11] = ItemType.Calcite; - mappings[12] = ItemType.Tuff; - mappings[13] = ItemType.DripstoneBlock; - mappings[14] = ItemType.GrassBlock; - mappings[15] = ItemType.Dirt; - mappings[16] = ItemType.CoarseDirt; - mappings[17] = ItemType.Podzol; - mappings[18] = ItemType.RootedDirt; - mappings[19] = ItemType.CrimsonNylium; - mappings[20] = ItemType.WarpedNylium; - mappings[21] = ItemType.Cobblestone; - mappings[22] = ItemType.OakPlanks; - mappings[23] = ItemType.SprucePlanks; - mappings[24] = ItemType.BirchPlanks; - mappings[25] = ItemType.JunglePlanks; - mappings[26] = ItemType.AcaciaPlanks; - mappings[27] = ItemType.DarkOakPlanks; - mappings[28] = ItemType.CrimsonPlanks; - mappings[29] = ItemType.WarpedPlanks; - mappings[30] = ItemType.OakSapling; - mappings[31] = ItemType.SpruceSapling; - mappings[32] = ItemType.BirchSapling; - mappings[33] = ItemType.JungleSapling; - mappings[34] = ItemType.AcaciaSapling; - mappings[35] = ItemType.DarkOakSapling; - mappings[36] = ItemType.Bedrock; - mappings[37] = ItemType.Sand; - mappings[38] = ItemType.RedSand; - mappings[39] = ItemType.Gravel; - mappings[40] = ItemType.CoalOre; - mappings[41] = ItemType.DeepslateCoalOre; - mappings[42] = ItemType.IronOre; - mappings[43] = ItemType.DeepslateIronOre; - mappings[44] = ItemType.CopperOre; - mappings[45] = ItemType.DeepslateCopperOre; - mappings[46] = ItemType.GoldOre; - mappings[47] = ItemType.DeepslateGoldOre; - mappings[48] = ItemType.RedstoneOre; - mappings[49] = ItemType.DeepslateRedstoneOre; - mappings[50] = ItemType.EmeraldOre; - mappings[51] = ItemType.DeepslateEmeraldOre; - mappings[52] = ItemType.LapisOre; - mappings[53] = ItemType.DeepslateLapisOre; - mappings[54] = ItemType.DiamondOre; - mappings[55] = ItemType.DeepslateDiamondOre; - mappings[56] = ItemType.NetherGoldOre; - mappings[57] = ItemType.NetherQuartzOre; - mappings[58] = ItemType.AncientDebris; - mappings[59] = ItemType.CoalBlock; - mappings[60] = ItemType.RawIronBlock; - mappings[61] = ItemType.RawCopperBlock; - mappings[62] = ItemType.RawGoldBlock; - mappings[63] = ItemType.AmethystBlock; - mappings[64] = ItemType.BuddingAmethyst; - mappings[65] = ItemType.IronBlock; - mappings[66] = ItemType.CopperBlock; - mappings[67] = ItemType.GoldBlock; - mappings[68] = ItemType.DiamondBlock; - mappings[69] = ItemType.NetheriteBlock; - mappings[70] = ItemType.ExposedCopper; - mappings[71] = ItemType.WeatheredCopper; - mappings[72] = ItemType.OxidizedCopper; - mappings[73] = ItemType.CutCopper; - mappings[74] = ItemType.ExposedCutCopper; - mappings[75] = ItemType.WeatheredCutCopper; - mappings[76] = ItemType.OxidizedCutCopper; - mappings[77] = ItemType.CutCopperStairs; - mappings[78] = ItemType.ExposedCutCopperStairs; - mappings[79] = ItemType.WeatheredCutCopperStairs; - mappings[80] = ItemType.OxidizedCutCopperStairs; - mappings[81] = ItemType.CutCopperSlab; - mappings[82] = ItemType.ExposedCutCopperSlab; - mappings[83] = ItemType.WeatheredCutCopperSlab; - mappings[84] = ItemType.OxidizedCutCopperSlab; - mappings[85] = ItemType.WaxedCopperBlock; - mappings[86] = ItemType.WaxedExposedCopper; - mappings[87] = ItemType.WaxedWeatheredCopper; - mappings[88] = ItemType.WaxedOxidizedCopper; - mappings[89] = ItemType.WaxedCutCopper; - mappings[90] = ItemType.WaxedExposedCutCopper; - mappings[91] = ItemType.WaxedWeatheredCutCopper; - mappings[92] = ItemType.WaxedOxidizedCutCopper; - mappings[93] = ItemType.WaxedCutCopperStairs; - mappings[94] = ItemType.WaxedExposedCutCopperStairs; - mappings[95] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[96] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[97] = ItemType.WaxedCutCopperSlab; - mappings[98] = ItemType.WaxedExposedCutCopperSlab; - mappings[99] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[100] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[101] = ItemType.OakLog; - mappings[102] = ItemType.SpruceLog; - mappings[103] = ItemType.BirchLog; - mappings[104] = ItemType.JungleLog; - mappings[105] = ItemType.AcaciaLog; - mappings[106] = ItemType.DarkOakLog; - mappings[107] = ItemType.CrimsonStem; - mappings[108] = ItemType.WarpedStem; - mappings[109] = ItemType.StrippedOakLog; - mappings[110] = ItemType.StrippedSpruceLog; - mappings[111] = ItemType.StrippedBirchLog; - mappings[112] = ItemType.StrippedJungleLog; - mappings[113] = ItemType.StrippedAcaciaLog; - mappings[114] = ItemType.StrippedDarkOakLog; - mappings[115] = ItemType.StrippedCrimsonStem; - mappings[116] = ItemType.StrippedWarpedStem; - mappings[117] = ItemType.StrippedOakWood; - mappings[118] = ItemType.StrippedSpruceWood; - mappings[119] = ItemType.StrippedBirchWood; - mappings[120] = ItemType.StrippedJungleWood; - mappings[121] = ItemType.StrippedAcaciaWood; - mappings[122] = ItemType.StrippedDarkOakWood; - mappings[123] = ItemType.StrippedCrimsonHyphae; - mappings[124] = ItemType.StrippedWarpedHyphae; - mappings[125] = ItemType.OakWood; - mappings[126] = ItemType.SpruceWood; - mappings[127] = ItemType.BirchWood; - mappings[128] = ItemType.JungleWood; - mappings[129] = ItemType.AcaciaWood; - mappings[130] = ItemType.DarkOakWood; - mappings[131] = ItemType.CrimsonHyphae; - mappings[132] = ItemType.WarpedHyphae; - mappings[133] = ItemType.OakLeaves; - mappings[134] = ItemType.SpruceLeaves; - mappings[135] = ItemType.BirchLeaves; - mappings[136] = ItemType.JungleLeaves; - mappings[137] = ItemType.AcaciaLeaves; - mappings[138] = ItemType.DarkOakLeaves; - mappings[139] = ItemType.AzaleaLeaves; - mappings[140] = ItemType.FloweringAzaleaLeaves; - mappings[141] = ItemType.Sponge; - mappings[142] = ItemType.WetSponge; - mappings[143] = ItemType.Glass; - mappings[144] = ItemType.TintedGlass; - mappings[145] = ItemType.LapisBlock; - mappings[146] = ItemType.Sandstone; - mappings[147] = ItemType.ChiseledSandstone; - mappings[148] = ItemType.CutSandstone; - mappings[149] = ItemType.Cobweb; - mappings[150] = ItemType.ShortGrass; - mappings[151] = ItemType.Fern; - mappings[152] = ItemType.Azalea; - mappings[153] = ItemType.FloweringAzalea; - mappings[154] = ItemType.DeadBush; - mappings[155] = ItemType.Seagrass; - mappings[156] = ItemType.SeaPickle; - mappings[157] = ItemType.WhiteWool; - mappings[158] = ItemType.OrangeWool; - mappings[159] = ItemType.MagentaWool; - mappings[160] = ItemType.LightBlueWool; - mappings[161] = ItemType.YellowWool; - mappings[162] = ItemType.LimeWool; - mappings[163] = ItemType.PinkWool; - mappings[164] = ItemType.GrayWool; - mappings[165] = ItemType.LightGrayWool; - mappings[166] = ItemType.CyanWool; - mappings[167] = ItemType.PurpleWool; - mappings[168] = ItemType.BlueWool; - mappings[169] = ItemType.BrownWool; - mappings[170] = ItemType.GreenWool; - mappings[171] = ItemType.RedWool; - mappings[172] = ItemType.BlackWool; - mappings[173] = ItemType.Dandelion; - mappings[174] = ItemType.Poppy; - mappings[175] = ItemType.BlueOrchid; - mappings[176] = ItemType.Allium; - mappings[177] = ItemType.AzureBluet; - mappings[178] = ItemType.RedTulip; - mappings[179] = ItemType.OrangeTulip; - mappings[180] = ItemType.WhiteTulip; - mappings[181] = ItemType.PinkTulip; - mappings[182] = ItemType.OxeyeDaisy; - mappings[183] = ItemType.Cornflower; - mappings[184] = ItemType.LilyOfTheValley; - mappings[185] = ItemType.WitherRose; - mappings[186] = ItemType.SporeBlossom; - mappings[187] = ItemType.BrownMushroom; - mappings[188] = ItemType.RedMushroom; - mappings[189] = ItemType.CrimsonFungus; - mappings[190] = ItemType.WarpedFungus; - mappings[191] = ItemType.CrimsonRoots; - mappings[192] = ItemType.WarpedRoots; - mappings[193] = ItemType.NetherSprouts; - mappings[194] = ItemType.WeepingVines; - mappings[195] = ItemType.TwistingVines; - mappings[196] = ItemType.SugarCane; - mappings[197] = ItemType.Kelp; - mappings[198] = ItemType.MossCarpet; - mappings[199] = ItemType.MossBlock; - mappings[200] = ItemType.HangingRoots; - mappings[201] = ItemType.BigDripleaf; - mappings[202] = ItemType.SmallDripleaf; - mappings[203] = ItemType.Bamboo; - mappings[204] = ItemType.OakSlab; - mappings[205] = ItemType.SpruceSlab; - mappings[206] = ItemType.BirchSlab; - mappings[207] = ItemType.JungleSlab; - mappings[208] = ItemType.AcaciaSlab; - mappings[209] = ItemType.DarkOakSlab; - mappings[210] = ItemType.CrimsonSlab; - mappings[211] = ItemType.WarpedSlab; - mappings[212] = ItemType.StoneSlab; - mappings[213] = ItemType.SmoothStoneSlab; - mappings[214] = ItemType.SandstoneSlab; - mappings[215] = ItemType.CutSandstoneSlab; - mappings[216] = ItemType.PetrifiedOakSlab; - mappings[217] = ItemType.CobblestoneSlab; - mappings[218] = ItemType.BrickSlab; - mappings[219] = ItemType.StoneBrickSlab; - mappings[220] = ItemType.NetherBrickSlab; - mappings[221] = ItemType.QuartzSlab; - mappings[222] = ItemType.RedSandstoneSlab; - mappings[223] = ItemType.CutRedSandstoneSlab; - mappings[224] = ItemType.PurpurSlab; - mappings[225] = ItemType.PrismarineSlab; - mappings[226] = ItemType.PrismarineBrickSlab; - mappings[227] = ItemType.DarkPrismarineSlab; - mappings[228] = ItemType.SmoothQuartz; - mappings[229] = ItemType.SmoothRedSandstone; - mappings[230] = ItemType.SmoothSandstone; - mappings[231] = ItemType.SmoothStone; - mappings[232] = ItemType.Bricks; - mappings[233] = ItemType.Bookshelf; - mappings[234] = ItemType.MossyCobblestone; - mappings[235] = ItemType.Obsidian; - mappings[236] = ItemType.Torch; - mappings[237] = ItemType.EndRod; - mappings[238] = ItemType.ChorusPlant; - mappings[239] = ItemType.ChorusFlower; - mappings[240] = ItemType.PurpurBlock; - mappings[241] = ItemType.PurpurPillar; - mappings[242] = ItemType.PurpurStairs; - mappings[243] = ItemType.Spawner; - mappings[244] = ItemType.OakStairs; - mappings[245] = ItemType.Chest; - mappings[246] = ItemType.CraftingTable; - mappings[247] = ItemType.Farmland; - mappings[248] = ItemType.Furnace; - mappings[249] = ItemType.Ladder; - mappings[250] = ItemType.CobblestoneStairs; - mappings[251] = ItemType.Snow; - mappings[252] = ItemType.Ice; - mappings[253] = ItemType.SnowBlock; - mappings[254] = ItemType.Cactus; - mappings[255] = ItemType.Clay; - mappings[256] = ItemType.Jukebox; - mappings[257] = ItemType.OakFence; - mappings[258] = ItemType.SpruceFence; - mappings[259] = ItemType.BirchFence; - mappings[260] = ItemType.JungleFence; - mappings[261] = ItemType.AcaciaFence; - mappings[262] = ItemType.DarkOakFence; - mappings[263] = ItemType.CrimsonFence; - mappings[264] = ItemType.WarpedFence; - mappings[265] = ItemType.Pumpkin; - mappings[266] = ItemType.CarvedPumpkin; - mappings[267] = ItemType.JackOLantern; - mappings[268] = ItemType.Netherrack; - mappings[269] = ItemType.SoulSand; - mappings[270] = ItemType.SoulSoil; - mappings[271] = ItemType.Basalt; - mappings[272] = ItemType.PolishedBasalt; - mappings[273] = ItemType.SmoothBasalt; - mappings[274] = ItemType.SoulTorch; - mappings[275] = ItemType.Glowstone; - mappings[276] = ItemType.InfestedStone; - mappings[277] = ItemType.InfestedCobblestone; - mappings[278] = ItemType.InfestedStoneBricks; - mappings[279] = ItemType.InfestedMossyStoneBricks; - mappings[280] = ItemType.InfestedCrackedStoneBricks; - mappings[281] = ItemType.InfestedChiseledStoneBricks; - mappings[282] = ItemType.InfestedDeepslate; - mappings[283] = ItemType.StoneBricks; - mappings[284] = ItemType.MossyStoneBricks; - mappings[285] = ItemType.CrackedStoneBricks; - mappings[286] = ItemType.ChiseledStoneBricks; - mappings[287] = ItemType.DeepslateBricks; - mappings[288] = ItemType.CrackedDeepslateBricks; - mappings[289] = ItemType.DeepslateTiles; - mappings[290] = ItemType.CrackedDeepslateTiles; - mappings[291] = ItemType.ChiseledDeepslate; - mappings[292] = ItemType.BrownMushroomBlock; - mappings[293] = ItemType.RedMushroomBlock; - mappings[294] = ItemType.MushroomStem; - mappings[295] = ItemType.IronBars; - mappings[296] = ItemType.Chain; - mappings[297] = ItemType.GlassPane; - mappings[298] = ItemType.Melon; - mappings[299] = ItemType.Vine; - mappings[300] = ItemType.GlowLichen; - mappings[301] = ItemType.BrickStairs; - mappings[302] = ItemType.StoneBrickStairs; - mappings[303] = ItemType.Mycelium; - mappings[304] = ItemType.LilyPad; - mappings[305] = ItemType.NetherBricks; - mappings[306] = ItemType.CrackedNetherBricks; - mappings[307] = ItemType.ChiseledNetherBricks; - mappings[308] = ItemType.NetherBrickFence; - mappings[309] = ItemType.NetherBrickStairs; - mappings[310] = ItemType.EnchantingTable; - mappings[311] = ItemType.EndPortalFrame; - mappings[312] = ItemType.EndStone; - mappings[313] = ItemType.EndStoneBricks; - mappings[314] = ItemType.DragonEgg; - mappings[315] = ItemType.SandstoneStairs; - mappings[316] = ItemType.EnderChest; - mappings[317] = ItemType.EmeraldBlock; - mappings[318] = ItemType.SpruceStairs; - mappings[319] = ItemType.BirchStairs; - mappings[320] = ItemType.JungleStairs; - mappings[321] = ItemType.CrimsonStairs; - mappings[322] = ItemType.WarpedStairs; - mappings[323] = ItemType.CommandBlock; - mappings[324] = ItemType.Beacon; - mappings[325] = ItemType.CobblestoneWall; - mappings[326] = ItemType.MossyCobblestoneWall; - mappings[327] = ItemType.BrickWall; - mappings[328] = ItemType.PrismarineWall; - mappings[329] = ItemType.RedSandstoneWall; - mappings[330] = ItemType.MossyStoneBrickWall; - mappings[331] = ItemType.GraniteWall; - mappings[332] = ItemType.StoneBrickWall; - mappings[333] = ItemType.NetherBrickWall; - mappings[334] = ItemType.AndesiteWall; - mappings[335] = ItemType.RedNetherBrickWall; - mappings[336] = ItemType.SandstoneWall; - mappings[337] = ItemType.EndStoneBrickWall; - mappings[338] = ItemType.DioriteWall; - mappings[339] = ItemType.BlackstoneWall; - mappings[340] = ItemType.PolishedBlackstoneWall; - mappings[341] = ItemType.PolishedBlackstoneBrickWall; - mappings[342] = ItemType.CobbledDeepslateWall; - mappings[343] = ItemType.PolishedDeepslateWall; - mappings[344] = ItemType.DeepslateBrickWall; - mappings[345] = ItemType.DeepslateTileWall; - mappings[346] = ItemType.Anvil; - mappings[347] = ItemType.ChippedAnvil; - mappings[348] = ItemType.DamagedAnvil; - mappings[349] = ItemType.ChiseledQuartzBlock; - mappings[350] = ItemType.QuartzBlock; - mappings[351] = ItemType.QuartzBricks; - mappings[352] = ItemType.QuartzPillar; - mappings[353] = ItemType.QuartzStairs; - mappings[354] = ItemType.WhiteTerracotta; - mappings[355] = ItemType.OrangeTerracotta; - mappings[356] = ItemType.MagentaTerracotta; - mappings[357] = ItemType.LightBlueTerracotta; - mappings[358] = ItemType.YellowTerracotta; - mappings[359] = ItemType.LimeTerracotta; - mappings[360] = ItemType.PinkTerracotta; - mappings[361] = ItemType.GrayTerracotta; - mappings[362] = ItemType.LightGrayTerracotta; - mappings[363] = ItemType.CyanTerracotta; - mappings[364] = ItemType.PurpleTerracotta; - mappings[365] = ItemType.BlueTerracotta; - mappings[366] = ItemType.BrownTerracotta; - mappings[367] = ItemType.GreenTerracotta; - mappings[368] = ItemType.RedTerracotta; - mappings[369] = ItemType.BlackTerracotta; - mappings[370] = ItemType.Barrier; - mappings[371] = ItemType.Light; - mappings[372] = ItemType.HayBlock; - mappings[373] = ItemType.WhiteCarpet; - mappings[374] = ItemType.OrangeCarpet; - mappings[375] = ItemType.MagentaCarpet; - mappings[376] = ItemType.LightBlueCarpet; - mappings[377] = ItemType.YellowCarpet; - mappings[378] = ItemType.LimeCarpet; - mappings[379] = ItemType.PinkCarpet; - mappings[380] = ItemType.GrayCarpet; - mappings[381] = ItemType.LightGrayCarpet; - mappings[382] = ItemType.CyanCarpet; - mappings[383] = ItemType.PurpleCarpet; - mappings[384] = ItemType.BlueCarpet; - mappings[385] = ItemType.BrownCarpet; - mappings[386] = ItemType.GreenCarpet; - mappings[387] = ItemType.RedCarpet; - mappings[388] = ItemType.BlackCarpet; - mappings[389] = ItemType.Terracotta; - mappings[390] = ItemType.PackedIce; - mappings[391] = ItemType.AcaciaStairs; - mappings[392] = ItemType.DarkOakStairs; - mappings[393] = ItemType.DirtPath; - mappings[394] = ItemType.Sunflower; - mappings[395] = ItemType.Lilac; - mappings[396] = ItemType.RoseBush; - mappings[397] = ItemType.Peony; - mappings[398] = ItemType.TallGrass; - mappings[399] = ItemType.LargeFern; - mappings[400] = ItemType.WhiteStainedGlass; - mappings[401] = ItemType.OrangeStainedGlass; - mappings[402] = ItemType.MagentaStainedGlass; - mappings[403] = ItemType.LightBlueStainedGlass; - mappings[404] = ItemType.YellowStainedGlass; - mappings[405] = ItemType.LimeStainedGlass; - mappings[406] = ItemType.PinkStainedGlass; - mappings[407] = ItemType.GrayStainedGlass; - mappings[408] = ItemType.LightGrayStainedGlass; - mappings[409] = ItemType.CyanStainedGlass; - mappings[410] = ItemType.PurpleStainedGlass; - mappings[411] = ItemType.BlueStainedGlass; - mappings[412] = ItemType.BrownStainedGlass; - mappings[413] = ItemType.GreenStainedGlass; - mappings[414] = ItemType.RedStainedGlass; - mappings[415] = ItemType.BlackStainedGlass; - mappings[416] = ItemType.WhiteStainedGlassPane; - mappings[417] = ItemType.OrangeStainedGlassPane; - mappings[418] = ItemType.MagentaStainedGlassPane; - mappings[419] = ItemType.LightBlueStainedGlassPane; - mappings[420] = ItemType.YellowStainedGlassPane; - mappings[421] = ItemType.LimeStainedGlassPane; - mappings[422] = ItemType.PinkStainedGlassPane; - mappings[423] = ItemType.GrayStainedGlassPane; - mappings[424] = ItemType.LightGrayStainedGlassPane; - mappings[425] = ItemType.CyanStainedGlassPane; - mappings[426] = ItemType.PurpleStainedGlassPane; - mappings[427] = ItemType.BlueStainedGlassPane; - mappings[428] = ItemType.BrownStainedGlassPane; - mappings[429] = ItemType.GreenStainedGlassPane; - mappings[430] = ItemType.RedStainedGlassPane; - mappings[431] = ItemType.BlackStainedGlassPane; - mappings[432] = ItemType.Prismarine; - mappings[433] = ItemType.PrismarineBricks; - mappings[434] = ItemType.DarkPrismarine; - mappings[435] = ItemType.PrismarineStairs; - mappings[436] = ItemType.PrismarineBrickStairs; - mappings[437] = ItemType.DarkPrismarineStairs; - mappings[438] = ItemType.SeaLantern; - mappings[439] = ItemType.RedSandstone; - mappings[440] = ItemType.ChiseledRedSandstone; - mappings[441] = ItemType.CutRedSandstone; - mappings[442] = ItemType.RedSandstoneStairs; - mappings[443] = ItemType.RepeatingCommandBlock; - mappings[444] = ItemType.ChainCommandBlock; - mappings[445] = ItemType.MagmaBlock; - mappings[446] = ItemType.NetherWartBlock; - mappings[447] = ItemType.WarpedWartBlock; - mappings[448] = ItemType.RedNetherBricks; - mappings[449] = ItemType.BoneBlock; - mappings[450] = ItemType.StructureVoid; - mappings[451] = ItemType.ShulkerBox; - mappings[452] = ItemType.WhiteShulkerBox; - mappings[453] = ItemType.OrangeShulkerBox; - mappings[454] = ItemType.MagentaShulkerBox; - mappings[455] = ItemType.LightBlueShulkerBox; - mappings[456] = ItemType.YellowShulkerBox; - mappings[457] = ItemType.LimeShulkerBox; - mappings[458] = ItemType.PinkShulkerBox; - mappings[459] = ItemType.GrayShulkerBox; - mappings[460] = ItemType.LightGrayShulkerBox; - mappings[461] = ItemType.CyanShulkerBox; - mappings[462] = ItemType.PurpleShulkerBox; - mappings[463] = ItemType.BlueShulkerBox; - mappings[464] = ItemType.BrownShulkerBox; - mappings[465] = ItemType.GreenShulkerBox; - mappings[466] = ItemType.RedShulkerBox; - mappings[467] = ItemType.BlackShulkerBox; - mappings[468] = ItemType.WhiteGlazedTerracotta; - mappings[469] = ItemType.OrangeGlazedTerracotta; - mappings[470] = ItemType.MagentaGlazedTerracotta; - mappings[471] = ItemType.LightBlueGlazedTerracotta; - mappings[472] = ItemType.YellowGlazedTerracotta; - mappings[473] = ItemType.LimeGlazedTerracotta; - mappings[474] = ItemType.PinkGlazedTerracotta; - mappings[475] = ItemType.GrayGlazedTerracotta; - mappings[476] = ItemType.LightGrayGlazedTerracotta; - mappings[477] = ItemType.CyanGlazedTerracotta; - mappings[478] = ItemType.PurpleGlazedTerracotta; - mappings[479] = ItemType.BlueGlazedTerracotta; - mappings[480] = ItemType.BrownGlazedTerracotta; - mappings[481] = ItemType.GreenGlazedTerracotta; - mappings[482] = ItemType.RedGlazedTerracotta; - mappings[483] = ItemType.BlackGlazedTerracotta; - mappings[484] = ItemType.WhiteConcrete; - mappings[485] = ItemType.OrangeConcrete; - mappings[486] = ItemType.MagentaConcrete; - mappings[487] = ItemType.LightBlueConcrete; - mappings[488] = ItemType.YellowConcrete; - mappings[489] = ItemType.LimeConcrete; - mappings[490] = ItemType.PinkConcrete; - mappings[491] = ItemType.GrayConcrete; - mappings[492] = ItemType.LightGrayConcrete; - mappings[493] = ItemType.CyanConcrete; - mappings[494] = ItemType.PurpleConcrete; - mappings[495] = ItemType.BlueConcrete; - mappings[496] = ItemType.BrownConcrete; - mappings[497] = ItemType.GreenConcrete; - mappings[498] = ItemType.RedConcrete; - mappings[499] = ItemType.BlackConcrete; - mappings[500] = ItemType.WhiteConcretePowder; - mappings[501] = ItemType.OrangeConcretePowder; - mappings[502] = ItemType.MagentaConcretePowder; - mappings[503] = ItemType.LightBlueConcretePowder; - mappings[504] = ItemType.YellowConcretePowder; - mappings[505] = ItemType.LimeConcretePowder; - mappings[506] = ItemType.PinkConcretePowder; - mappings[507] = ItemType.GrayConcretePowder; - mappings[508] = ItemType.LightGrayConcretePowder; - mappings[509] = ItemType.CyanConcretePowder; - mappings[510] = ItemType.PurpleConcretePowder; - mappings[511] = ItemType.BlueConcretePowder; - mappings[512] = ItemType.BrownConcretePowder; - mappings[513] = ItemType.GreenConcretePowder; - mappings[514] = ItemType.RedConcretePowder; - mappings[515] = ItemType.BlackConcretePowder; - mappings[516] = ItemType.TurtleEgg; - mappings[517] = ItemType.DeadTubeCoralBlock; - mappings[518] = ItemType.DeadBrainCoralBlock; - mappings[519] = ItemType.DeadBubbleCoralBlock; - mappings[520] = ItemType.DeadFireCoralBlock; - mappings[521] = ItemType.DeadHornCoralBlock; - mappings[522] = ItemType.TubeCoralBlock; - mappings[523] = ItemType.BrainCoralBlock; - mappings[524] = ItemType.BubbleCoralBlock; - mappings[525] = ItemType.FireCoralBlock; - mappings[526] = ItemType.HornCoralBlock; - mappings[527] = ItemType.TubeCoral; - mappings[528] = ItemType.BrainCoral; - mappings[529] = ItemType.BubbleCoral; - mappings[530] = ItemType.FireCoral; - mappings[531] = ItemType.HornCoral; - mappings[532] = ItemType.DeadBrainCoral; - mappings[533] = ItemType.DeadBubbleCoral; - mappings[534] = ItemType.DeadFireCoral; - mappings[535] = ItemType.DeadHornCoral; - mappings[536] = ItemType.DeadTubeCoral; - mappings[537] = ItemType.TubeCoralFan; - mappings[538] = ItemType.BrainCoralFan; - mappings[539] = ItemType.BubbleCoralFan; - mappings[540] = ItemType.FireCoralFan; - mappings[541] = ItemType.HornCoralFan; - mappings[542] = ItemType.DeadTubeCoralFan; - mappings[543] = ItemType.DeadBrainCoralFan; - mappings[544] = ItemType.DeadBubbleCoralFan; - mappings[545] = ItemType.DeadFireCoralFan; - mappings[546] = ItemType.DeadHornCoralFan; - mappings[547] = ItemType.BlueIce; - mappings[548] = ItemType.Conduit; - mappings[549] = ItemType.PolishedGraniteStairs; - mappings[550] = ItemType.SmoothRedSandstoneStairs; - mappings[551] = ItemType.MossyStoneBrickStairs; - mappings[552] = ItemType.PolishedDioriteStairs; - mappings[553] = ItemType.MossyCobblestoneStairs; - mappings[554] = ItemType.EndStoneBrickStairs; - mappings[555] = ItemType.StoneStairs; - mappings[556] = ItemType.SmoothSandstoneStairs; - mappings[557] = ItemType.SmoothQuartzStairs; - mappings[558] = ItemType.GraniteStairs; - mappings[559] = ItemType.AndesiteStairs; - mappings[560] = ItemType.RedNetherBrickStairs; - mappings[561] = ItemType.PolishedAndesiteStairs; - mappings[562] = ItemType.DioriteStairs; - mappings[563] = ItemType.CobbledDeepslateStairs; - mappings[564] = ItemType.PolishedDeepslateStairs; - mappings[565] = ItemType.DeepslateBrickStairs; - mappings[566] = ItemType.DeepslateTileStairs; - mappings[567] = ItemType.PolishedGraniteSlab; - mappings[568] = ItemType.SmoothRedSandstoneSlab; - mappings[569] = ItemType.MossyStoneBrickSlab; - mappings[570] = ItemType.PolishedDioriteSlab; - mappings[571] = ItemType.MossyCobblestoneSlab; - mappings[572] = ItemType.EndStoneBrickSlab; - mappings[573] = ItemType.SmoothSandstoneSlab; - mappings[574] = ItemType.SmoothQuartzSlab; - mappings[575] = ItemType.GraniteSlab; - mappings[576] = ItemType.AndesiteSlab; - mappings[577] = ItemType.RedNetherBrickSlab; - mappings[578] = ItemType.PolishedAndesiteSlab; - mappings[579] = ItemType.DioriteSlab; - mappings[580] = ItemType.CobbledDeepslateSlab; - mappings[581] = ItemType.PolishedDeepslateSlab; - mappings[582] = ItemType.DeepslateBrickSlab; - mappings[583] = ItemType.DeepslateTileSlab; - mappings[584] = ItemType.Scaffolding; - mappings[585] = ItemType.Redstone; - mappings[586] = ItemType.RedstoneTorch; - mappings[587] = ItemType.RedstoneBlock; - mappings[588] = ItemType.Repeater; - mappings[589] = ItemType.Comparator; - mappings[590] = ItemType.Piston; - mappings[591] = ItemType.StickyPiston; - mappings[592] = ItemType.SlimeBlock; - mappings[593] = ItemType.HoneyBlock; - mappings[594] = ItemType.Observer; - mappings[595] = ItemType.Hopper; - mappings[596] = ItemType.Dispenser; - mappings[597] = ItemType.Dropper; - mappings[598] = ItemType.Lectern; - mappings[599] = ItemType.Target; - mappings[600] = ItemType.Lever; - mappings[601] = ItemType.LightningRod; - mappings[602] = ItemType.DaylightDetector; - mappings[603] = ItemType.SculkSensor; - mappings[604] = ItemType.TripwireHook; - mappings[605] = ItemType.TrappedChest; - mappings[606] = ItemType.Tnt; - mappings[607] = ItemType.RedstoneLamp; - mappings[608] = ItemType.NoteBlock; - mappings[609] = ItemType.StoneButton; - mappings[610] = ItemType.PolishedBlackstoneButton; - mappings[611] = ItemType.OakButton; - mappings[612] = ItemType.SpruceButton; - mappings[613] = ItemType.BirchButton; - mappings[614] = ItemType.JungleButton; - mappings[615] = ItemType.AcaciaButton; - mappings[616] = ItemType.DarkOakButton; - mappings[617] = ItemType.CrimsonButton; - mappings[618] = ItemType.WarpedButton; - mappings[619] = ItemType.StonePressurePlate; - mappings[620] = ItemType.PolishedBlackstonePressurePlate; - mappings[621] = ItemType.LightWeightedPressurePlate; - mappings[622] = ItemType.HeavyWeightedPressurePlate; - mappings[623] = ItemType.OakPressurePlate; - mappings[624] = ItemType.SprucePressurePlate; - mappings[625] = ItemType.BirchPressurePlate; - mappings[626] = ItemType.JunglePressurePlate; - mappings[627] = ItemType.AcaciaPressurePlate; - mappings[628] = ItemType.DarkOakPressurePlate; - mappings[629] = ItemType.CrimsonPressurePlate; - mappings[630] = ItemType.WarpedPressurePlate; - mappings[631] = ItemType.IronDoor; - mappings[632] = ItemType.OakDoor; - mappings[633] = ItemType.SpruceDoor; - mappings[634] = ItemType.BirchDoor; - mappings[635] = ItemType.JungleDoor; - mappings[636] = ItemType.AcaciaDoor; - mappings[637] = ItemType.DarkOakDoor; - mappings[638] = ItemType.CrimsonDoor; - mappings[639] = ItemType.WarpedDoor; - mappings[640] = ItemType.IronTrapdoor; - mappings[641] = ItemType.OakTrapdoor; - mappings[642] = ItemType.SpruceTrapdoor; - mappings[643] = ItemType.BirchTrapdoor; - mappings[644] = ItemType.JungleTrapdoor; - mappings[645] = ItemType.AcaciaTrapdoor; - mappings[646] = ItemType.DarkOakTrapdoor; - mappings[647] = ItemType.CrimsonTrapdoor; - mappings[648] = ItemType.WarpedTrapdoor; - mappings[649] = ItemType.OakFenceGate; - mappings[650] = ItemType.SpruceFenceGate; - mappings[651] = ItemType.BirchFenceGate; - mappings[652] = ItemType.JungleFenceGate; - mappings[653] = ItemType.AcaciaFenceGate; - mappings[654] = ItemType.DarkOakFenceGate; - mappings[655] = ItemType.CrimsonFenceGate; - mappings[656] = ItemType.WarpedFenceGate; - mappings[657] = ItemType.PoweredRail; - mappings[658] = ItemType.DetectorRail; - mappings[659] = ItemType.Rail; - mappings[660] = ItemType.ActivatorRail; - mappings[661] = ItemType.Saddle; - mappings[662] = ItemType.Minecart; - mappings[663] = ItemType.ChestMinecart; - mappings[664] = ItemType.FurnaceMinecart; - mappings[665] = ItemType.TntMinecart; - mappings[666] = ItemType.HopperMinecart; - mappings[667] = ItemType.CarrotOnAStick; - mappings[668] = ItemType.WarpedFungusOnAStick; - mappings[669] = ItemType.Elytra; - mappings[670] = ItemType.OakBoat; - mappings[671] = ItemType.SpruceBoat; - mappings[672] = ItemType.BirchBoat; - mappings[673] = ItemType.JungleBoat; - mappings[674] = ItemType.AcaciaBoat; - mappings[675] = ItemType.DarkOakBoat; - mappings[676] = ItemType.StructureBlock; - mappings[677] = ItemType.Jigsaw; - mappings[678] = ItemType.TurtleHelmet; - mappings[679] = ItemType.TurtleScute; - mappings[680] = ItemType.FlintAndSteel; - mappings[681] = ItemType.Apple; - mappings[682] = ItemType.Bow; - mappings[683] = ItemType.Arrow; - mappings[684] = ItemType.Coal; - mappings[685] = ItemType.Charcoal; - mappings[686] = ItemType.Diamond; - mappings[687] = ItemType.Emerald; - mappings[688] = ItemType.LapisLazuli; - mappings[689] = ItemType.Quartz; - mappings[690] = ItemType.AmethystShard; - mappings[691] = ItemType.RawIron; - mappings[692] = ItemType.IronIngot; - mappings[693] = ItemType.RawCopper; - mappings[694] = ItemType.CopperIngot; - mappings[695] = ItemType.RawGold; - mappings[696] = ItemType.GoldIngot; - mappings[697] = ItemType.NetheriteIngot; - mappings[698] = ItemType.NetheriteScrap; - mappings[699] = ItemType.WoodenSword; - mappings[700] = ItemType.WoodenShovel; - mappings[701] = ItemType.WoodenPickaxe; - mappings[702] = ItemType.WoodenAxe; - mappings[703] = ItemType.WoodenHoe; - mappings[704] = ItemType.StoneSword; - mappings[705] = ItemType.StoneShovel; - mappings[706] = ItemType.StonePickaxe; - mappings[707] = ItemType.StoneAxe; - mappings[708] = ItemType.StoneHoe; - mappings[709] = ItemType.GoldenSword; - mappings[710] = ItemType.GoldenShovel; - mappings[711] = ItemType.GoldenPickaxe; - mappings[712] = ItemType.GoldenAxe; - mappings[713] = ItemType.GoldenHoe; - mappings[714] = ItemType.IronSword; - mappings[715] = ItemType.IronShovel; - mappings[716] = ItemType.IronPickaxe; - mappings[717] = ItemType.IronAxe; - mappings[718] = ItemType.IronHoe; - mappings[719] = ItemType.DiamondSword; - mappings[720] = ItemType.DiamondShovel; - mappings[721] = ItemType.DiamondPickaxe; - mappings[722] = ItemType.DiamondAxe; - mappings[723] = ItemType.DiamondHoe; - mappings[724] = ItemType.NetheriteSword; - mappings[725] = ItemType.NetheriteShovel; - mappings[726] = ItemType.NetheritePickaxe; - mappings[727] = ItemType.NetheriteAxe; - mappings[728] = ItemType.NetheriteHoe; - mappings[729] = ItemType.Stick; - mappings[730] = ItemType.Bowl; - mappings[731] = ItemType.MushroomStew; - mappings[732] = ItemType.String; - mappings[733] = ItemType.Feather; - mappings[734] = ItemType.Gunpowder; - mappings[735] = ItemType.WheatSeeds; - mappings[736] = ItemType.Wheat; - mappings[737] = ItemType.Bread; - mappings[738] = ItemType.LeatherHelmet; - mappings[739] = ItemType.LeatherChestplate; - mappings[740] = ItemType.LeatherLeggings; - mappings[741] = ItemType.LeatherBoots; - mappings[742] = ItemType.ChainmailHelmet; - mappings[743] = ItemType.ChainmailChestplate; - mappings[744] = ItemType.ChainmailLeggings; - mappings[745] = ItemType.ChainmailBoots; - mappings[746] = ItemType.IronHelmet; - mappings[747] = ItemType.IronChestplate; - mappings[748] = ItemType.IronLeggings; - mappings[749] = ItemType.IronBoots; - mappings[750] = ItemType.DiamondHelmet; - mappings[751] = ItemType.DiamondChestplate; - mappings[752] = ItemType.DiamondLeggings; - mappings[753] = ItemType.DiamondBoots; - mappings[754] = ItemType.GoldenHelmet; - mappings[755] = ItemType.GoldenChestplate; - mappings[756] = ItemType.GoldenLeggings; - mappings[757] = ItemType.GoldenBoots; - mappings[758] = ItemType.NetheriteHelmet; - mappings[759] = ItemType.NetheriteChestplate; - mappings[760] = ItemType.NetheriteLeggings; - mappings[761] = ItemType.NetheriteBoots; - mappings[762] = ItemType.Flint; - mappings[763] = ItemType.Porkchop; - mappings[764] = ItemType.CookedPorkchop; - mappings[765] = ItemType.Painting; - mappings[766] = ItemType.GoldenApple; - mappings[767] = ItemType.EnchantedGoldenApple; - mappings[768] = ItemType.OakSign; - mappings[769] = ItemType.SpruceSign; - mappings[770] = ItemType.BirchSign; - mappings[771] = ItemType.JungleSign; - mappings[772] = ItemType.AcaciaSign; - mappings[773] = ItemType.DarkOakSign; - mappings[774] = ItemType.CrimsonSign; - mappings[775] = ItemType.WarpedSign; - mappings[776] = ItemType.Bucket; - mappings[777] = ItemType.WaterBucket; - mappings[778] = ItemType.LavaBucket; - mappings[779] = ItemType.PowderSnowBucket; - mappings[780] = ItemType.Snowball; - mappings[781] = ItemType.Leather; - mappings[782] = ItemType.MilkBucket; - mappings[783] = ItemType.PufferfishBucket; - mappings[784] = ItemType.SalmonBucket; - mappings[785] = ItemType.CodBucket; - mappings[786] = ItemType.TropicalFishBucket; - mappings[787] = ItemType.AxolotlBucket; - mappings[788] = ItemType.Brick; - mappings[789] = ItemType.ClayBall; - mappings[790] = ItemType.DriedKelpBlock; - mappings[791] = ItemType.Paper; - mappings[792] = ItemType.Book; - mappings[793] = ItemType.SlimeBall; - mappings[794] = ItemType.Egg; - mappings[795] = ItemType.Compass; - mappings[796] = ItemType.Bundle; - mappings[797] = ItemType.FishingRod; - mappings[798] = ItemType.Clock; - mappings[799] = ItemType.Spyglass; - mappings[800] = ItemType.GlowstoneDust; - mappings[801] = ItemType.Cod; - mappings[802] = ItemType.Salmon; - mappings[803] = ItemType.TropicalFish; - mappings[804] = ItemType.Pufferfish; - mappings[805] = ItemType.CookedCod; - mappings[806] = ItemType.CookedSalmon; - mappings[807] = ItemType.InkSac; - mappings[808] = ItemType.GlowInkSac; - mappings[809] = ItemType.CocoaBeans; - mappings[810] = ItemType.WhiteDye; - mappings[811] = ItemType.OrangeDye; - mappings[812] = ItemType.MagentaDye; - mappings[813] = ItemType.LightBlueDye; - mappings[814] = ItemType.YellowDye; - mappings[815] = ItemType.LimeDye; - mappings[816] = ItemType.PinkDye; - mappings[817] = ItemType.GrayDye; - mappings[818] = ItemType.LightGrayDye; - mappings[819] = ItemType.CyanDye; - mappings[820] = ItemType.PurpleDye; - mappings[821] = ItemType.BlueDye; - mappings[822] = ItemType.BrownDye; - mappings[823] = ItemType.GreenDye; - mappings[824] = ItemType.RedDye; - mappings[825] = ItemType.BlackDye; - mappings[826] = ItemType.BoneMeal; - mappings[827] = ItemType.Bone; - mappings[828] = ItemType.Sugar; - mappings[829] = ItemType.Cake; - mappings[830] = ItemType.WhiteBed; - mappings[831] = ItemType.OrangeBed; - mappings[832] = ItemType.MagentaBed; - mappings[833] = ItemType.LightBlueBed; - mappings[834] = ItemType.YellowBed; - mappings[835] = ItemType.LimeBed; - mappings[836] = ItemType.PinkBed; - mappings[837] = ItemType.GrayBed; - mappings[838] = ItemType.LightGrayBed; - mappings[839] = ItemType.CyanBed; - mappings[840] = ItemType.PurpleBed; - mappings[841] = ItemType.BlueBed; - mappings[842] = ItemType.BrownBed; - mappings[843] = ItemType.GreenBed; - mappings[844] = ItemType.RedBed; - mappings[845] = ItemType.BlackBed; - mappings[846] = ItemType.Cookie; - mappings[847] = ItemType.FilledMap; - mappings[848] = ItemType.Shears; - mappings[849] = ItemType.MelonSlice; - mappings[850] = ItemType.DriedKelp; - mappings[851] = ItemType.PumpkinSeeds; - mappings[852] = ItemType.MelonSeeds; - mappings[853] = ItemType.Beef; - mappings[854] = ItemType.CookedBeef; - mappings[855] = ItemType.Chicken; - mappings[856] = ItemType.CookedChicken; - mappings[857] = ItemType.RottenFlesh; - mappings[858] = ItemType.EnderPearl; - mappings[859] = ItemType.BlazeRod; - mappings[860] = ItemType.GhastTear; - mappings[861] = ItemType.GoldNugget; - mappings[862] = ItemType.NetherWart; - mappings[863] = ItemType.Potion; - mappings[864] = ItemType.GlassBottle; - mappings[865] = ItemType.SpiderEye; - mappings[866] = ItemType.FermentedSpiderEye; - mappings[867] = ItemType.BlazePowder; - mappings[868] = ItemType.MagmaCream; - mappings[869] = ItemType.BrewingStand; - mappings[870] = ItemType.Cauldron; - mappings[871] = ItemType.EnderEye; - mappings[872] = ItemType.GlisteringMelonSlice; - mappings[873] = ItemType.AxolotlSpawnEgg; - mappings[874] = ItemType.BatSpawnEgg; - mappings[875] = ItemType.BeeSpawnEgg; - mappings[876] = ItemType.BlazeSpawnEgg; - mappings[877] = ItemType.CatSpawnEgg; - mappings[878] = ItemType.CaveSpiderSpawnEgg; - mappings[879] = ItemType.ChickenSpawnEgg; - mappings[880] = ItemType.CodSpawnEgg; - mappings[881] = ItemType.CowSpawnEgg; - mappings[882] = ItemType.CreeperSpawnEgg; - mappings[883] = ItemType.DolphinSpawnEgg; - mappings[884] = ItemType.DonkeySpawnEgg; - mappings[885] = ItemType.DrownedSpawnEgg; - mappings[886] = ItemType.ElderGuardianSpawnEgg; - mappings[887] = ItemType.EndermanSpawnEgg; - mappings[888] = ItemType.EndermiteSpawnEgg; - mappings[889] = ItemType.EvokerSpawnEgg; - mappings[890] = ItemType.FoxSpawnEgg; - mappings[891] = ItemType.GhastSpawnEgg; - mappings[892] = ItemType.GlowSquidSpawnEgg; - mappings[893] = ItemType.GoatSpawnEgg; - mappings[894] = ItemType.GuardianSpawnEgg; - mappings[895] = ItemType.HoglinSpawnEgg; - mappings[896] = ItemType.HorseSpawnEgg; - mappings[897] = ItemType.HuskSpawnEgg; - mappings[898] = ItemType.LlamaSpawnEgg; - mappings[899] = ItemType.MagmaCubeSpawnEgg; - mappings[900] = ItemType.MooshroomSpawnEgg; - mappings[901] = ItemType.MuleSpawnEgg; - mappings[902] = ItemType.OcelotSpawnEgg; - mappings[903] = ItemType.PandaSpawnEgg; - mappings[904] = ItemType.ParrotSpawnEgg; - mappings[905] = ItemType.PhantomSpawnEgg; - mappings[906] = ItemType.PigSpawnEgg; - mappings[907] = ItemType.PiglinSpawnEgg; - mappings[908] = ItemType.PiglinBruteSpawnEgg; - mappings[909] = ItemType.PillagerSpawnEgg; - mappings[910] = ItemType.PolarBearSpawnEgg; - mappings[911] = ItemType.PufferfishSpawnEgg; - mappings[912] = ItemType.RabbitSpawnEgg; - mappings[913] = ItemType.RavagerSpawnEgg; - mappings[914] = ItemType.SalmonSpawnEgg; - mappings[915] = ItemType.SheepSpawnEgg; - mappings[916] = ItemType.ShulkerSpawnEgg; - mappings[917] = ItemType.SilverfishSpawnEgg; - mappings[918] = ItemType.SkeletonSpawnEgg; - mappings[919] = ItemType.SkeletonHorseSpawnEgg; - mappings[920] = ItemType.SlimeSpawnEgg; - mappings[921] = ItemType.SpiderSpawnEgg; - mappings[922] = ItemType.SquidSpawnEgg; - mappings[923] = ItemType.StraySpawnEgg; - mappings[924] = ItemType.StriderSpawnEgg; - mappings[925] = ItemType.TraderLlamaSpawnEgg; - mappings[926] = ItemType.TropicalFishSpawnEgg; - mappings[927] = ItemType.TurtleSpawnEgg; - mappings[928] = ItemType.VexSpawnEgg; - mappings[929] = ItemType.VillagerSpawnEgg; - mappings[930] = ItemType.VindicatorSpawnEgg; - mappings[931] = ItemType.WanderingTraderSpawnEgg; - mappings[932] = ItemType.WitchSpawnEgg; - mappings[933] = ItemType.WitherSkeletonSpawnEgg; - mappings[934] = ItemType.WolfSpawnEgg; - mappings[935] = ItemType.ZoglinSpawnEgg; - mappings[936] = ItemType.ZombieSpawnEgg; - mappings[937] = ItemType.ZombieHorseSpawnEgg; - mappings[938] = ItemType.ZombieVillagerSpawnEgg; - mappings[939] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[940] = ItemType.ExperienceBottle; - mappings[941] = ItemType.FireCharge; - mappings[942] = ItemType.WritableBook; - mappings[943] = ItemType.WrittenBook; - mappings[944] = ItemType.ItemFrame; - mappings[945] = ItemType.GlowItemFrame; - mappings[946] = ItemType.FlowerPot; - mappings[947] = ItemType.Carrot; - mappings[948] = ItemType.Potato; - mappings[949] = ItemType.BakedPotato; - mappings[950] = ItemType.PoisonousPotato; - mappings[951] = ItemType.Map; - mappings[952] = ItemType.GoldenCarrot; - mappings[953] = ItemType.SkeletonSkull; - mappings[954] = ItemType.WitherSkeletonSkull; - mappings[955] = ItemType.PlayerHead; - mappings[956] = ItemType.ZombieHead; - mappings[957] = ItemType.CreeperHead; - mappings[958] = ItemType.DragonHead; - mappings[959] = ItemType.NetherStar; - mappings[960] = ItemType.PumpkinPie; - mappings[961] = ItemType.FireworkRocket; - mappings[962] = ItemType.FireworkStar; - mappings[963] = ItemType.EnchantedBook; - mappings[964] = ItemType.NetherBrick; - mappings[965] = ItemType.PrismarineShard; - mappings[966] = ItemType.PrismarineCrystals; - mappings[967] = ItemType.Rabbit; - mappings[968] = ItemType.CookedRabbit; - mappings[969] = ItemType.RabbitStew; - mappings[970] = ItemType.RabbitFoot; - mappings[971] = ItemType.RabbitHide; - mappings[972] = ItemType.ArmorStand; - mappings[973] = ItemType.IronHorseArmor; - mappings[974] = ItemType.GoldenHorseArmor; - mappings[975] = ItemType.DiamondHorseArmor; - mappings[976] = ItemType.LeatherHorseArmor; - mappings[977] = ItemType.Lead; - mappings[978] = ItemType.NameTag; - mappings[979] = ItemType.CommandBlockMinecart; - mappings[980] = ItemType.Mutton; - mappings[981] = ItemType.CookedMutton; - mappings[982] = ItemType.WhiteBanner; - mappings[983] = ItemType.OrangeBanner; - mappings[984] = ItemType.MagentaBanner; - mappings[985] = ItemType.LightBlueBanner; - mappings[986] = ItemType.YellowBanner; - mappings[987] = ItemType.LimeBanner; - mappings[988] = ItemType.PinkBanner; - mappings[989] = ItemType.GrayBanner; - mappings[990] = ItemType.LightGrayBanner; - mappings[991] = ItemType.CyanBanner; - mappings[992] = ItemType.PurpleBanner; - mappings[993] = ItemType.BlueBanner; - mappings[994] = ItemType.BrownBanner; - mappings[995] = ItemType.GreenBanner; - mappings[996] = ItemType.RedBanner; - mappings[997] = ItemType.BlackBanner; - mappings[998] = ItemType.EndCrystal; - mappings[999] = ItemType.ChorusFruit; - mappings[1000] = ItemType.PoppedChorusFruit; - mappings[1001] = ItemType.Beetroot; - mappings[1002] = ItemType.BeetrootSeeds; - mappings[1003] = ItemType.BeetrootSoup; - mappings[1004] = ItemType.DragonBreath; - mappings[1005] = ItemType.SplashPotion; - mappings[1006] = ItemType.SpectralArrow; - mappings[1007] = ItemType.TippedArrow; - mappings[1008] = ItemType.LingeringPotion; - mappings[1009] = ItemType.Shield; - mappings[1010] = ItemType.TotemOfUndying; - mappings[1011] = ItemType.ShulkerShell; - mappings[1012] = ItemType.IronNugget; - mappings[1013] = ItemType.KnowledgeBook; - mappings[1014] = ItemType.DebugStick; - mappings[1015] = ItemType.MusicDisc13; - mappings[1016] = ItemType.MusicDiscCat; - mappings[1017] = ItemType.MusicDiscBlocks; - mappings[1018] = ItemType.MusicDiscChirp; - mappings[1019] = ItemType.MusicDiscFar; - mappings[1020] = ItemType.MusicDiscMall; - mappings[1021] = ItemType.MusicDiscMellohi; - mappings[1022] = ItemType.MusicDiscStal; - mappings[1023] = ItemType.MusicDiscStrad; - mappings[1024] = ItemType.MusicDiscWard; - mappings[1025] = ItemType.MusicDisc11; - mappings[1026] = ItemType.MusicDiscWait; - mappings[1027] = ItemType.MusicDiscOtherside; - mappings[1028] = ItemType.MusicDiscPigstep; - mappings[1029] = ItemType.Trident; - mappings[1030] = ItemType.PhantomMembrane; - mappings[1031] = ItemType.NautilusShell; - mappings[1032] = ItemType.HeartOfTheSea; - mappings[1033] = ItemType.Crossbow; - mappings[1034] = ItemType.SuspiciousStew; - mappings[1035] = ItemType.Loom; - mappings[1036] = ItemType.FlowerBannerPattern; - mappings[1037] = ItemType.CreeperBannerPattern; - mappings[1038] = ItemType.SkullBannerPattern; - mappings[1039] = ItemType.MojangBannerPattern; - mappings[1040] = ItemType.GlobeBannerPattern; - mappings[1041] = ItemType.PiglinBannerPattern; - mappings[1042] = ItemType.Composter; - mappings[1043] = ItemType.Barrel; - mappings[1044] = ItemType.Smoker; - mappings[1045] = ItemType.BlastFurnace; - mappings[1046] = ItemType.CartographyTable; - mappings[1047] = ItemType.FletchingTable; - mappings[1048] = ItemType.Grindstone; - mappings[1049] = ItemType.SmithingTable; - mappings[1050] = ItemType.Stonecutter; - mappings[1051] = ItemType.Bell; - mappings[1052] = ItemType.Lantern; - mappings[1053] = ItemType.SoulLantern; - mappings[1054] = ItemType.SweetBerries; - mappings[1055] = ItemType.GlowBerries; - mappings[1056] = ItemType.Campfire; - mappings[1057] = ItemType.SoulCampfire; - mappings[1058] = ItemType.Shroomlight; - mappings[1059] = ItemType.Honeycomb; - mappings[1060] = ItemType.BeeNest; - mappings[1061] = ItemType.Beehive; - mappings[1062] = ItemType.HoneyBottle; - mappings[1063] = ItemType.HoneycombBlock; - mappings[1064] = ItemType.Lodestone; - mappings[1065] = ItemType.CryingObsidian; - mappings[1066] = ItemType.Blackstone; - mappings[1067] = ItemType.BlackstoneSlab; - mappings[1068] = ItemType.BlackstoneStairs; - mappings[1069] = ItemType.GildedBlackstone; - mappings[1070] = ItemType.PolishedBlackstone; - mappings[1071] = ItemType.PolishedBlackstoneSlab; - mappings[1072] = ItemType.PolishedBlackstoneStairs; - mappings[1073] = ItemType.ChiseledPolishedBlackstone; - mappings[1074] = ItemType.PolishedBlackstoneBricks; - mappings[1075] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1076] = ItemType.PolishedBlackstoneBrickStairs; - mappings[1077] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[1078] = ItemType.RespawnAnchor; - mappings[1079] = ItemType.Candle; - mappings[1080] = ItemType.WhiteCandle; - mappings[1081] = ItemType.OrangeCandle; - mappings[1082] = ItemType.MagentaCandle; - mappings[1083] = ItemType.LightBlueCandle; - mappings[1084] = ItemType.YellowCandle; - mappings[1085] = ItemType.LimeCandle; - mappings[1086] = ItemType.PinkCandle; - mappings[1087] = ItemType.GrayCandle; - mappings[1088] = ItemType.LightGrayCandle; - mappings[1089] = ItemType.CyanCandle; - mappings[1090] = ItemType.PurpleCandle; - mappings[1091] = ItemType.BlueCandle; - mappings[1092] = ItemType.BrownCandle; - mappings[1093] = ItemType.GreenCandle; - mappings[1094] = ItemType.RedCandle; - mappings[1095] = ItemType.BlackCandle; - mappings[1096] = ItemType.SmallAmethystBud; - mappings[1097] = ItemType.MediumAmethystBud; - mappings[1098] = ItemType.LargeAmethystBud; - mappings[1099] = ItemType.AmethystCluster; - mappings[1100] = ItemType.PointedDripstone; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette119.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette119.cs deleted file mode 100644 index a1ab48d320..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette119.cs +++ /dev/null @@ -1,1170 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette119 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette119() - { - mappings[706] = ItemType.AcaciaBoat; - mappings[638] = ItemType.AcaciaButton; - mappings[707] = ItemType.AcaciaChestBoat; - mappings[661] = ItemType.AcaciaDoor; - mappings[272] = ItemType.AcaciaFence; - mappings[680] = ItemType.AcaciaFenceGate; - mappings[146] = ItemType.AcaciaLeaves; - mappings[108] = ItemType.AcaciaLog; - mappings[27] = ItemType.AcaciaPlanks; - mappings[651] = ItemType.AcaciaPressurePlate; - mappings[36] = ItemType.AcaciaSapling; - mappings[808] = ItemType.AcaciaSign; - mappings[218] = ItemType.AcaciaSlab; - mappings[342] = ItemType.AcaciaStairs; - mappings[671] = ItemType.AcaciaTrapdoor; - mappings[137] = ItemType.AcaciaWood; - mappings[688] = ItemType.ActivatorRail; - mappings[0] = ItemType.Air; - mappings[912] = ItemType.AllaySpawnEgg; - mappings[186] = ItemType.Allium; - mappings[66] = ItemType.AmethystBlock; - mappings[1145] = ItemType.AmethystCluster; - mappings[726] = ItemType.AmethystShard; - mappings[61] = ItemType.AncientDebris; - mappings[6] = ItemType.Andesite; - mappings[599] = ItemType.AndesiteSlab; - mappings[582] = ItemType.AndesiteStairs; - mappings[359] = ItemType.AndesiteWall; - mappings[371] = ItemType.Anvil; - mappings[717] = ItemType.Apple; - mappings[1015] = ItemType.ArmorStand; - mappings[719] = ItemType.Arrow; - mappings[824] = ItemType.AxolotlBucket; - mappings[913] = ItemType.AxolotlSpawnEgg; - mappings[162] = ItemType.Azalea; - mappings[149] = ItemType.AzaleaLeaves; - mappings[187] = ItemType.AzureBluet; - mappings[992] = ItemType.BakedPotato; - mappings[213] = ItemType.Bamboo; - mappings[1089] = ItemType.Barrel; - mappings[395] = ItemType.Barrier; - mappings[283] = ItemType.Basalt; - mappings[914] = ItemType.BatSpawnEgg; - mappings[348] = ItemType.Beacon; - mappings[39] = ItemType.Bedrock; - mappings[1106] = ItemType.BeeNest; - mappings[915] = ItemType.BeeSpawnEgg; - mappings[892] = ItemType.Beef; - mappings[1107] = ItemType.Beehive; - mappings[1044] = ItemType.Beetroot; - mappings[1045] = ItemType.BeetrootSeeds; - mappings[1046] = ItemType.BeetrootSoup; - mappings[1097] = ItemType.Bell; - mappings[211] = ItemType.BigDripleaf; - mappings[702] = ItemType.BirchBoat; - mappings[636] = ItemType.BirchButton; - mappings[703] = ItemType.BirchChestBoat; - mappings[659] = ItemType.BirchDoor; - mappings[270] = ItemType.BirchFence; - mappings[678] = ItemType.BirchFenceGate; - mappings[144] = ItemType.BirchLeaves; - mappings[106] = ItemType.BirchLog; - mappings[25] = ItemType.BirchPlanks; - mappings[649] = ItemType.BirchPressurePlate; - mappings[34] = ItemType.BirchSapling; - mappings[806] = ItemType.BirchSign; - mappings[216] = ItemType.BirchSlab; - mappings[340] = ItemType.BirchStairs; - mappings[669] = ItemType.BirchTrapdoor; - mappings[135] = ItemType.BirchWood; - mappings[1040] = ItemType.BlackBanner; - mappings[884] = ItemType.BlackBed; - mappings[1141] = ItemType.BlackCandle; - mappings[413] = ItemType.BlackCarpet; - mappings[522] = ItemType.BlackConcrete; - mappings[538] = ItemType.BlackConcretePowder; - mappings[864] = ItemType.BlackDye; - mappings[506] = ItemType.BlackGlazedTerracotta; - mappings[490] = ItemType.BlackShulkerBox; - mappings[438] = ItemType.BlackStainedGlass; - mappings[454] = ItemType.BlackStainedGlassPane; - mappings[394] = ItemType.BlackTerracotta; - mappings[182] = ItemType.BlackWool; - mappings[1112] = ItemType.Blackstone; - mappings[1113] = ItemType.BlackstoneSlab; - mappings[1114] = ItemType.BlackstoneStairs; - mappings[364] = ItemType.BlackstoneWall; - mappings[1091] = ItemType.BlastFurnace; - mappings[906] = ItemType.BlazePowder; - mappings[898] = ItemType.BlazeRod; - mappings[916] = ItemType.BlazeSpawnEgg; - mappings[1036] = ItemType.BlueBanner; - mappings[880] = ItemType.BlueBed; - mappings[1137] = ItemType.BlueCandle; - mappings[409] = ItemType.BlueCarpet; - mappings[518] = ItemType.BlueConcrete; - mappings[534] = ItemType.BlueConcretePowder; - mappings[860] = ItemType.BlueDye; - mappings[502] = ItemType.BlueGlazedTerracotta; - mappings[570] = ItemType.BlueIce; - mappings[185] = ItemType.BlueOrchid; - mappings[486] = ItemType.BlueShulkerBox; - mappings[434] = ItemType.BlueStainedGlass; - mappings[450] = ItemType.BlueStainedGlassPane; - mappings[390] = ItemType.BlueTerracotta; - mappings[178] = ItemType.BlueWool; - mappings[866] = ItemType.Bone; - mappings[472] = ItemType.BoneBlock; - mappings[865] = ItemType.BoneMeal; - mappings[830] = ItemType.Book; - mappings[245] = ItemType.Bookshelf; - mappings[718] = ItemType.Bow; - mappings[766] = ItemType.Bowl; - mappings[551] = ItemType.BrainCoral; - mappings[546] = ItemType.BrainCoralBlock; - mappings[561] = ItemType.BrainCoralFan; - mappings[773] = ItemType.Bread; - mappings[908] = ItemType.BrewingStand; - mappings[826] = ItemType.Brick; - mappings[229] = ItemType.BrickSlab; - mappings[316] = ItemType.BrickStairs; - mappings[351] = ItemType.BrickWall; - mappings[244] = ItemType.Bricks; - mappings[1037] = ItemType.BrownBanner; - mappings[881] = ItemType.BrownBed; - mappings[1138] = ItemType.BrownCandle; - mappings[410] = ItemType.BrownCarpet; - mappings[519] = ItemType.BrownConcrete; - mappings[535] = ItemType.BrownConcretePowder; - mappings[861] = ItemType.BrownDye; - mappings[503] = ItemType.BrownGlazedTerracotta; - mappings[197] = ItemType.BrownMushroom; - mappings[307] = ItemType.BrownMushroomBlock; - mappings[487] = ItemType.BrownShulkerBox; - mappings[435] = ItemType.BrownStainedGlass; - mappings[451] = ItemType.BrownStainedGlassPane; - mappings[391] = ItemType.BrownTerracotta; - mappings[179] = ItemType.BrownWool; - mappings[552] = ItemType.BubbleCoral; - mappings[547] = ItemType.BubbleCoralBlock; - mappings[562] = ItemType.BubbleCoralFan; - mappings[813] = ItemType.Bucket; - mappings[67] = ItemType.BuddingAmethyst; - mappings[835] = ItemType.Bundle; - mappings[265] = ItemType.Cactus; - mappings[868] = ItemType.Cake; - mappings[11] = ItemType.Calcite; - mappings[1102] = ItemType.Campfire; - mappings[1125] = ItemType.Candle; - mappings[990] = ItemType.Carrot; - mappings[695] = ItemType.CarrotOnAStick; - mappings[1092] = ItemType.CartographyTable; - mappings[278] = ItemType.CarvedPumpkin; - mappings[917] = ItemType.CatSpawnEgg; - mappings[909] = ItemType.Cauldron; - mappings[918] = ItemType.CaveSpiderSpawnEgg; - mappings[311] = ItemType.Chain; - mappings[467] = ItemType.ChainCommandBlock; - mappings[781] = ItemType.ChainmailBoots; - mappings[779] = ItemType.ChainmailChestplate; - mappings[778] = ItemType.ChainmailHelmet; - mappings[780] = ItemType.ChainmailLeggings; - mappings[721] = ItemType.Charcoal; - mappings[256] = ItemType.Chest; - mappings[691] = ItemType.ChestMinecart; - mappings[894] = ItemType.Chicken; - mappings[919] = ItemType.ChickenSpawnEgg; - mappings[372] = ItemType.ChippedAnvil; - mappings[305] = ItemType.ChiseledDeepslate; - mappings[323] = ItemType.ChiseledNetherBricks; - mappings[1119] = ItemType.ChiseledPolishedBlackstone; - mappings[374] = ItemType.ChiseledQuartzBlock; - mappings[463] = ItemType.ChiseledRedSandstone; - mappings[157] = ItemType.ChiseledSandstone; - mappings[298] = ItemType.ChiseledStoneBricks; - mappings[251] = ItemType.ChorusFlower; - mappings[1042] = ItemType.ChorusFruit; - mappings[250] = ItemType.ChorusPlant; - mappings[266] = ItemType.Clay; - mappings[827] = ItemType.ClayBall; - mappings[837] = ItemType.Clock; - mappings[720] = ItemType.Coal; - mappings[62] = ItemType.CoalBlock; - mappings[43] = ItemType.CoalOre; - mappings[16] = ItemType.CoarseDirt; - mappings[9] = ItemType.CobbledDeepslate; - mappings[603] = ItemType.CobbledDeepslateSlab; - mappings[586] = ItemType.CobbledDeepslateStairs; - mappings[367] = ItemType.CobbledDeepslateWall; - mappings[22] = ItemType.Cobblestone; - mappings[228] = ItemType.CobblestoneSlab; - mappings[261] = ItemType.CobblestoneStairs; - mappings[349] = ItemType.CobblestoneWall; - mappings[159] = ItemType.Cobweb; - mappings[848] = ItemType.CocoaBeans; - mappings[840] = ItemType.Cod; - mappings[822] = ItemType.CodBucket; - mappings[920] = ItemType.CodSpawnEgg; - mappings[347] = ItemType.CommandBlock; - mappings[1022] = ItemType.CommandBlockMinecart; - mappings[612] = ItemType.Comparator; - mappings[833] = ItemType.Compass; - mappings[1088] = ItemType.Composter; - mappings[571] = ItemType.Conduit; - mappings[893] = ItemType.CookedBeef; - mappings[895] = ItemType.CookedChicken; - mappings[844] = ItemType.CookedCod; - mappings[1024] = ItemType.CookedMutton; - mappings[800] = ItemType.CookedPorkchop; - mappings[1011] = ItemType.CookedRabbit; - mappings[845] = ItemType.CookedSalmon; - mappings[885] = ItemType.Cookie; - mappings[69] = ItemType.CopperBlock; - mappings[730] = ItemType.CopperIngot; - mappings[47] = ItemType.CopperOre; - mappings[193] = ItemType.Cornflower; - mappings[921] = ItemType.CowSpawnEgg; - mappings[302] = ItemType.CrackedDeepslateBricks; - mappings[304] = ItemType.CrackedDeepslateTiles; - mappings[322] = ItemType.CrackedNetherBricks; - mappings[1123] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[297] = ItemType.CrackedStoneBricks; - mappings[257] = ItemType.CraftingTable; - mappings[1082] = ItemType.CreeperBannerPattern; - mappings[1000] = ItemType.CreeperHead; - mappings[922] = ItemType.CreeperSpawnEgg; - mappings[641] = ItemType.CrimsonButton; - mappings[664] = ItemType.CrimsonDoor; - mappings[275] = ItemType.CrimsonFence; - mappings[683] = ItemType.CrimsonFenceGate; - mappings[199] = ItemType.CrimsonFungus; - mappings[140] = ItemType.CrimsonHyphae; - mappings[20] = ItemType.CrimsonNylium; - mappings[30] = ItemType.CrimsonPlanks; - mappings[654] = ItemType.CrimsonPressurePlate; - mappings[201] = ItemType.CrimsonRoots; - mappings[811] = ItemType.CrimsonSign; - mappings[221] = ItemType.CrimsonSlab; - mappings[345] = ItemType.CrimsonStairs; - mappings[113] = ItemType.CrimsonStem; - mappings[674] = ItemType.CrimsonTrapdoor; - mappings[1078] = ItemType.Crossbow; - mappings[1111] = ItemType.CryingObsidian; - mappings[76] = ItemType.CutCopper; - mappings[84] = ItemType.CutCopperSlab; - mappings[80] = ItemType.CutCopperStairs; - mappings[464] = ItemType.CutRedSandstone; - mappings[235] = ItemType.CutRedSandstoneSlab; - mappings[158] = ItemType.CutSandstone; - mappings[226] = ItemType.CutSandstoneSlab; - mappings[1034] = ItemType.CyanBanner; - mappings[878] = ItemType.CyanBed; - mappings[1135] = ItemType.CyanCandle; - mappings[407] = ItemType.CyanCarpet; - mappings[516] = ItemType.CyanConcrete; - mappings[532] = ItemType.CyanConcretePowder; - mappings[858] = ItemType.CyanDye; - mappings[500] = ItemType.CyanGlazedTerracotta; - mappings[484] = ItemType.CyanShulkerBox; - mappings[432] = ItemType.CyanStainedGlass; - mappings[448] = ItemType.CyanStainedGlassPane; - mappings[388] = ItemType.CyanTerracotta; - mappings[176] = ItemType.CyanWool; - mappings[373] = ItemType.DamagedAnvil; - mappings[183] = ItemType.Dandelion; - mappings[708] = ItemType.DarkOakBoat; - mappings[639] = ItemType.DarkOakButton; - mappings[709] = ItemType.DarkOakChestBoat; - mappings[662] = ItemType.DarkOakDoor; - mappings[273] = ItemType.DarkOakFence; - mappings[681] = ItemType.DarkOakFenceGate; - mappings[147] = ItemType.DarkOakLeaves; - mappings[109] = ItemType.DarkOakLog; - mappings[28] = ItemType.DarkOakPlanks; - mappings[652] = ItemType.DarkOakPressurePlate; - mappings[37] = ItemType.DarkOakSapling; - mappings[809] = ItemType.DarkOakSign; - mappings[219] = ItemType.DarkOakSlab; - mappings[343] = ItemType.DarkOakStairs; - mappings[672] = ItemType.DarkOakTrapdoor; - mappings[138] = ItemType.DarkOakWood; - mappings[457] = ItemType.DarkPrismarine; - mappings[239] = ItemType.DarkPrismarineSlab; - mappings[460] = ItemType.DarkPrismarineStairs; - mappings[625] = ItemType.DaylightDetector; - mappings[555] = ItemType.DeadBrainCoral; - mappings[541] = ItemType.DeadBrainCoralBlock; - mappings[566] = ItemType.DeadBrainCoralFan; - mappings[556] = ItemType.DeadBubbleCoral; - mappings[542] = ItemType.DeadBubbleCoralBlock; - mappings[567] = ItemType.DeadBubbleCoralFan; - mappings[164] = ItemType.DeadBush; - mappings[557] = ItemType.DeadFireCoral; - mappings[543] = ItemType.DeadFireCoralBlock; - mappings[568] = ItemType.DeadFireCoralFan; - mappings[558] = ItemType.DeadHornCoral; - mappings[544] = ItemType.DeadHornCoralBlock; - mappings[569] = ItemType.DeadHornCoralFan; - mappings[559] = ItemType.DeadTubeCoral; - mappings[540] = ItemType.DeadTubeCoralBlock; - mappings[565] = ItemType.DeadTubeCoralFan; - mappings[1057] = ItemType.DebugStick; - mappings[8] = ItemType.Deepslate; - mappings[605] = ItemType.DeepslateBrickSlab; - mappings[588] = ItemType.DeepslateBrickStairs; - mappings[369] = ItemType.DeepslateBrickWall; - mappings[301] = ItemType.DeepslateBricks; - mappings[44] = ItemType.DeepslateCoalOre; - mappings[48] = ItemType.DeepslateCopperOre; - mappings[58] = ItemType.DeepslateDiamondOre; - mappings[54] = ItemType.DeepslateEmeraldOre; - mappings[50] = ItemType.DeepslateGoldOre; - mappings[46] = ItemType.DeepslateIronOre; - mappings[56] = ItemType.DeepslateLapisOre; - mappings[52] = ItemType.DeepslateRedstoneOre; - mappings[606] = ItemType.DeepslateTileSlab; - mappings[589] = ItemType.DeepslateTileStairs; - mappings[370] = ItemType.DeepslateTileWall; - mappings[303] = ItemType.DeepslateTiles; - mappings[686] = ItemType.DetectorRail; - mappings[722] = ItemType.Diamond; - mappings[758] = ItemType.DiamondAxe; - mappings[71] = ItemType.DiamondBlock; - mappings[789] = ItemType.DiamondBoots; - mappings[787] = ItemType.DiamondChestplate; - mappings[786] = ItemType.DiamondHelmet; - mappings[759] = ItemType.DiamondHoe; - mappings[1018] = ItemType.DiamondHorseArmor; - mappings[788] = ItemType.DiamondLeggings; - mappings[57] = ItemType.DiamondOre; - mappings[757] = ItemType.DiamondPickaxe; - mappings[756] = ItemType.DiamondShovel; - mappings[755] = ItemType.DiamondSword; - mappings[4] = ItemType.Diorite; - mappings[602] = ItemType.DioriteSlab; - mappings[585] = ItemType.DioriteStairs; - mappings[363] = ItemType.DioriteWall; - mappings[15] = ItemType.Dirt; - mappings[416] = ItemType.DirtPath; - mappings[1073] = ItemType.DiscFragment5; - mappings[619] = ItemType.Dispenser; - mappings[923] = ItemType.DolphinSpawnEgg; - mappings[924] = ItemType.DonkeySpawnEgg; - mappings[1047] = ItemType.DragonBreath; - mappings[334] = ItemType.DragonEgg; - mappings[1001] = ItemType.DragonHead; - mappings[889] = ItemType.DriedKelp; - mappings[828] = ItemType.DriedKelpBlock; - mappings[13] = ItemType.DripstoneBlock; - mappings[620] = ItemType.Dropper; - mappings[925] = ItemType.DrownedSpawnEgg; - mappings[1151] = ItemType.EchoShard; - mappings[832] = ItemType.Egg; - mappings[926] = ItemType.ElderGuardianSpawnEgg; - mappings[697] = ItemType.Elytra; - mappings[723] = ItemType.Emerald; - mappings[337] = ItemType.EmeraldBlock; - mappings[53] = ItemType.EmeraldOre; - mappings[1006] = ItemType.EnchantedBook; - mappings[803] = ItemType.EnchantedGoldenApple; - mappings[330] = ItemType.EnchantingTable; - mappings[1041] = ItemType.EndCrystal; - mappings[331] = ItemType.EndPortalFrame; - mappings[249] = ItemType.EndRod; - mappings[332] = ItemType.EndStone; - mappings[595] = ItemType.EndStoneBrickSlab; - mappings[577] = ItemType.EndStoneBrickStairs; - mappings[362] = ItemType.EndStoneBrickWall; - mappings[333] = ItemType.EndStoneBricks; - mappings[336] = ItemType.EnderChest; - mappings[910] = ItemType.EnderEye; - mappings[897] = ItemType.EnderPearl; - mappings[927] = ItemType.EndermanSpawnEgg; - mappings[928] = ItemType.EndermiteSpawnEgg; - mappings[929] = ItemType.EvokerSpawnEgg; - mappings[983] = ItemType.ExperienceBottle; - mappings[73] = ItemType.ExposedCopper; - mappings[77] = ItemType.ExposedCutCopper; - mappings[85] = ItemType.ExposedCutCopperSlab; - mappings[81] = ItemType.ExposedCutCopperStairs; - mappings[258] = ItemType.Farmland; - mappings[769] = ItemType.Feather; - mappings[905] = ItemType.FermentedSpiderEye; - mappings[161] = ItemType.Fern; - mappings[886] = ItemType.FilledMap; - mappings[984] = ItemType.FireCharge; - mappings[553] = ItemType.FireCoral; - mappings[548] = ItemType.FireCoralBlock; - mappings[563] = ItemType.FireCoralFan; - mappings[1004] = ItemType.FireworkRocket; - mappings[1005] = ItemType.FireworkStar; - mappings[836] = ItemType.FishingRod; - mappings[1093] = ItemType.FletchingTable; - mappings[798] = ItemType.Flint; - mappings[716] = ItemType.FlintAndSteel; - mappings[1081] = ItemType.FlowerBannerPattern; - mappings[989] = ItemType.FlowerPot; - mappings[163] = ItemType.FloweringAzalea; - mappings[150] = ItemType.FloweringAzaleaLeaves; - mappings[930] = ItemType.FoxSpawnEgg; - mappings[931] = ItemType.FrogSpawnEgg; - mappings[1150] = ItemType.Frogspawn; - mappings[259] = ItemType.Furnace; - mappings[692] = ItemType.FurnaceMinecart; - mappings[932] = ItemType.GhastSpawnEgg; - mappings[899] = ItemType.GhastTear; - mappings[1115] = ItemType.GildedBlackstone; - mappings[153] = ItemType.Glass; - mappings[903] = ItemType.GlassBottle; - mappings[312] = ItemType.GlassPane; - mappings[911] = ItemType.GlisteringMelonSlice; - mappings[1085] = ItemType.GlobeBannerPattern; - mappings[1101] = ItemType.GlowBerries; - mappings[847] = ItemType.GlowInkSac; - mappings[988] = ItemType.GlowItemFrame; - mappings[315] = ItemType.GlowLichen; - mappings[933] = ItemType.GlowSquidSpawnEgg; - mappings[287] = ItemType.Glowstone; - mappings[839] = ItemType.GlowstoneDust; - mappings[1087] = ItemType.GoatHorn; - mappings[934] = ItemType.GoatSpawnEgg; - mappings[70] = ItemType.GoldBlock; - mappings[732] = ItemType.GoldIngot; - mappings[900] = ItemType.GoldNugget; - mappings[49] = ItemType.GoldOre; - mappings[802] = ItemType.GoldenApple; - mappings[748] = ItemType.GoldenAxe; - mappings[793] = ItemType.GoldenBoots; - mappings[995] = ItemType.GoldenCarrot; - mappings[791] = ItemType.GoldenChestplate; - mappings[790] = ItemType.GoldenHelmet; - mappings[749] = ItemType.GoldenHoe; - mappings[1017] = ItemType.GoldenHorseArmor; - mappings[792] = ItemType.GoldenLeggings; - mappings[747] = ItemType.GoldenPickaxe; - mappings[746] = ItemType.GoldenShovel; - mappings[745] = ItemType.GoldenSword; - mappings[2] = ItemType.Granite; - mappings[598] = ItemType.GraniteSlab; - mappings[581] = ItemType.GraniteStairs; - mappings[355] = ItemType.GraniteWall; - mappings[160] = ItemType.ShortGrass; - mappings[14] = ItemType.GrassBlock; - mappings[42] = ItemType.Gravel; - mappings[1032] = ItemType.GrayBanner; - mappings[876] = ItemType.GrayBed; - mappings[1133] = ItemType.GrayCandle; - mappings[405] = ItemType.GrayCarpet; - mappings[514] = ItemType.GrayConcrete; - mappings[530] = ItemType.GrayConcretePowder; - mappings[856] = ItemType.GrayDye; - mappings[498] = ItemType.GrayGlazedTerracotta; - mappings[482] = ItemType.GrayShulkerBox; - mappings[430] = ItemType.GrayStainedGlass; - mappings[446] = ItemType.GrayStainedGlassPane; - mappings[386] = ItemType.GrayTerracotta; - mappings[174] = ItemType.GrayWool; - mappings[1038] = ItemType.GreenBanner; - mappings[882] = ItemType.GreenBed; - mappings[1139] = ItemType.GreenCandle; - mappings[411] = ItemType.GreenCarpet; - mappings[520] = ItemType.GreenConcrete; - mappings[536] = ItemType.GreenConcretePowder; - mappings[862] = ItemType.GreenDye; - mappings[504] = ItemType.GreenGlazedTerracotta; - mappings[488] = ItemType.GreenShulkerBox; - mappings[436] = ItemType.GreenStainedGlass; - mappings[452] = ItemType.GreenStainedGlassPane; - mappings[392] = ItemType.GreenTerracotta; - mappings[180] = ItemType.GreenWool; - mappings[1094] = ItemType.Grindstone; - mappings[935] = ItemType.GuardianSpawnEgg; - mappings[770] = ItemType.Gunpowder; - mappings[210] = ItemType.HangingRoots; - mappings[397] = ItemType.HayBlock; - mappings[1077] = ItemType.HeartOfTheSea; - mappings[646] = ItemType.HeavyWeightedPressurePlate; - mappings[936] = ItemType.HoglinSpawnEgg; - mappings[616] = ItemType.HoneyBlock; - mappings[1108] = ItemType.HoneyBottle; - mappings[1105] = ItemType.Honeycomb; - mappings[1109] = ItemType.HoneycombBlock; - mappings[618] = ItemType.Hopper; - mappings[694] = ItemType.HopperMinecart; - mappings[554] = ItemType.HornCoral; - mappings[549] = ItemType.HornCoralBlock; - mappings[564] = ItemType.HornCoralFan; - mappings[937] = ItemType.HorseSpawnEgg; - mappings[938] = ItemType.HuskSpawnEgg; - mappings[263] = ItemType.Ice; - mappings[293] = ItemType.InfestedChiseledStoneBricks; - mappings[289] = ItemType.InfestedCobblestone; - mappings[292] = ItemType.InfestedCrackedStoneBricks; - mappings[294] = ItemType.InfestedDeepslate; - mappings[291] = ItemType.InfestedMossyStoneBricks; - mappings[288] = ItemType.InfestedStone; - mappings[290] = ItemType.InfestedStoneBricks; - mappings[846] = ItemType.InkSac; - mappings[753] = ItemType.IronAxe; - mappings[310] = ItemType.IronBars; - mappings[68] = ItemType.IronBlock; - mappings[785] = ItemType.IronBoots; - mappings[783] = ItemType.IronChestplate; - mappings[656] = ItemType.IronDoor; - mappings[782] = ItemType.IronHelmet; - mappings[754] = ItemType.IronHoe; - mappings[1016] = ItemType.IronHorseArmor; - mappings[728] = ItemType.IronIngot; - mappings[784] = ItemType.IronLeggings; - mappings[1055] = ItemType.IronNugget; - mappings[45] = ItemType.IronOre; - mappings[752] = ItemType.IronPickaxe; - mappings[751] = ItemType.IronShovel; - mappings[750] = ItemType.IronSword; - mappings[666] = ItemType.IronTrapdoor; - mappings[987] = ItemType.ItemFrame; - mappings[279] = ItemType.JackOLantern; - mappings[713] = ItemType.Jigsaw; - mappings[267] = ItemType.Jukebox; - mappings[704] = ItemType.JungleBoat; - mappings[637] = ItemType.JungleButton; - mappings[705] = ItemType.JungleChestBoat; - mappings[660] = ItemType.JungleDoor; - mappings[271] = ItemType.JungleFence; - mappings[679] = ItemType.JungleFenceGate; - mappings[145] = ItemType.JungleLeaves; - mappings[107] = ItemType.JungleLog; - mappings[26] = ItemType.JunglePlanks; - mappings[650] = ItemType.JunglePressurePlate; - mappings[35] = ItemType.JungleSapling; - mappings[807] = ItemType.JungleSign; - mappings[217] = ItemType.JungleSlab; - mappings[341] = ItemType.JungleStairs; - mappings[670] = ItemType.JungleTrapdoor; - mappings[136] = ItemType.JungleWood; - mappings[207] = ItemType.Kelp; - mappings[1056] = ItemType.KnowledgeBook; - mappings[260] = ItemType.Ladder; - mappings[1098] = ItemType.Lantern; - mappings[155] = ItemType.LapisBlock; - mappings[724] = ItemType.LapisLazuli; - mappings[55] = ItemType.LapisOre; - mappings[1144] = ItemType.LargeAmethystBud; - mappings[422] = ItemType.LargeFern; - mappings[815] = ItemType.LavaBucket; - mappings[1020] = ItemType.Lead; - mappings[818] = ItemType.Leather; - mappings[777] = ItemType.LeatherBoots; - mappings[775] = ItemType.LeatherChestplate; - mappings[774] = ItemType.LeatherHelmet; - mappings[1019] = ItemType.LeatherHorseArmor; - mappings[776] = ItemType.LeatherLeggings; - mappings[621] = ItemType.Lectern; - mappings[623] = ItemType.Lever; - mappings[396] = ItemType.Light; - mappings[1028] = ItemType.LightBlueBanner; - mappings[872] = ItemType.LightBlueBed; - mappings[1129] = ItemType.LightBlueCandle; - mappings[401] = ItemType.LightBlueCarpet; - mappings[510] = ItemType.LightBlueConcrete; - mappings[526] = ItemType.LightBlueConcretePowder; - mappings[852] = ItemType.LightBlueDye; - mappings[494] = ItemType.LightBlueGlazedTerracotta; - mappings[478] = ItemType.LightBlueShulkerBox; - mappings[426] = ItemType.LightBlueStainedGlass; - mappings[442] = ItemType.LightBlueStainedGlassPane; - mappings[382] = ItemType.LightBlueTerracotta; - mappings[170] = ItemType.LightBlueWool; - mappings[1033] = ItemType.LightGrayBanner; - mappings[877] = ItemType.LightGrayBed; - mappings[1134] = ItemType.LightGrayCandle; - mappings[406] = ItemType.LightGrayCarpet; - mappings[515] = ItemType.LightGrayConcrete; - mappings[531] = ItemType.LightGrayConcretePowder; - mappings[857] = ItemType.LightGrayDye; - mappings[499] = ItemType.LightGrayGlazedTerracotta; - mappings[483] = ItemType.LightGrayShulkerBox; - mappings[431] = ItemType.LightGrayStainedGlass; - mappings[447] = ItemType.LightGrayStainedGlassPane; - mappings[387] = ItemType.LightGrayTerracotta; - mappings[175] = ItemType.LightGrayWool; - mappings[645] = ItemType.LightWeightedPressurePlate; - mappings[624] = ItemType.LightningRod; - mappings[418] = ItemType.Lilac; - mappings[194] = ItemType.LilyOfTheValley; - mappings[320] = ItemType.LilyPad; - mappings[1030] = ItemType.LimeBanner; - mappings[874] = ItemType.LimeBed; - mappings[1131] = ItemType.LimeCandle; - mappings[403] = ItemType.LimeCarpet; - mappings[512] = ItemType.LimeConcrete; - mappings[528] = ItemType.LimeConcretePowder; - mappings[854] = ItemType.LimeDye; - mappings[496] = ItemType.LimeGlazedTerracotta; - mappings[480] = ItemType.LimeShulkerBox; - mappings[428] = ItemType.LimeStainedGlass; - mappings[444] = ItemType.LimeStainedGlassPane; - mappings[384] = ItemType.LimeTerracotta; - mappings[172] = ItemType.LimeWool; - mappings[1051] = ItemType.LingeringPotion; - mappings[939] = ItemType.LlamaSpawnEgg; - mappings[1110] = ItemType.Lodestone; - mappings[1080] = ItemType.Loom; - mappings[1027] = ItemType.MagentaBanner; - mappings[871] = ItemType.MagentaBed; - mappings[1128] = ItemType.MagentaCandle; - mappings[400] = ItemType.MagentaCarpet; - mappings[509] = ItemType.MagentaConcrete; - mappings[525] = ItemType.MagentaConcretePowder; - mappings[851] = ItemType.MagentaDye; - mappings[493] = ItemType.MagentaGlazedTerracotta; - mappings[477] = ItemType.MagentaShulkerBox; - mappings[425] = ItemType.MagentaStainedGlass; - mappings[441] = ItemType.MagentaStainedGlassPane; - mappings[381] = ItemType.MagentaTerracotta; - mappings[169] = ItemType.MagentaWool; - mappings[468] = ItemType.MagmaBlock; - mappings[907] = ItemType.MagmaCream; - mappings[940] = ItemType.MagmaCubeSpawnEgg; - mappings[710] = ItemType.MangroveBoat; - mappings[640] = ItemType.MangroveButton; - mappings[711] = ItemType.MangroveChestBoat; - mappings[663] = ItemType.MangroveDoor; - mappings[274] = ItemType.MangroveFence; - mappings[682] = ItemType.MangroveFenceGate; - mappings[148] = ItemType.MangroveLeaves; - mappings[110] = ItemType.MangroveLog; - mappings[29] = ItemType.MangrovePlanks; - mappings[653] = ItemType.MangrovePressurePlate; - mappings[38] = ItemType.MangrovePropagule; - mappings[111] = ItemType.MangroveRoots; - mappings[810] = ItemType.MangroveSign; - mappings[220] = ItemType.MangroveSlab; - mappings[344] = ItemType.MangroveStairs; - mappings[673] = ItemType.MangroveTrapdoor; - mappings[139] = ItemType.MangroveWood; - mappings[994] = ItemType.Map; - mappings[1143] = ItemType.MediumAmethystBud; - mappings[313] = ItemType.Melon; - mappings[891] = ItemType.MelonSeeds; - mappings[888] = ItemType.MelonSlice; - mappings[819] = ItemType.MilkBucket; - mappings[690] = ItemType.Minecart; - mappings[1084] = ItemType.MojangBannerPattern; - mappings[941] = ItemType.MooshroomSpawnEgg; - mappings[209] = ItemType.MossBlock; - mappings[208] = ItemType.MossCarpet; - mappings[246] = ItemType.MossyCobblestone; - mappings[594] = ItemType.MossyCobblestoneSlab; - mappings[576] = ItemType.MossyCobblestoneStairs; - mappings[350] = ItemType.MossyCobblestoneWall; - mappings[592] = ItemType.MossyStoneBrickSlab; - mappings[574] = ItemType.MossyStoneBrickStairs; - mappings[354] = ItemType.MossyStoneBrickWall; - mappings[296] = ItemType.MossyStoneBricks; - mappings[19] = ItemType.Mud; - mappings[231] = ItemType.MudBrickSlab; - mappings[318] = ItemType.MudBrickStairs; - mappings[357] = ItemType.MudBrickWall; - mappings[300] = ItemType.MudBricks; - mappings[112] = ItemType.MuddyMangroveRoots; - mappings[942] = ItemType.MuleSpawnEgg; - mappings[309] = ItemType.MushroomStem; - mappings[767] = ItemType.MushroomStew; - mappings[1068] = ItemType.MusicDisc11; - mappings[1058] = ItemType.MusicDisc13; - mappings[1071] = ItemType.MusicDisc5; - mappings[1060] = ItemType.MusicDiscBlocks; - mappings[1059] = ItemType.MusicDiscCat; - mappings[1061] = ItemType.MusicDiscChirp; - mappings[1062] = ItemType.MusicDiscFar; - mappings[1063] = ItemType.MusicDiscMall; - mappings[1064] = ItemType.MusicDiscMellohi; - mappings[1070] = ItemType.MusicDiscOtherside; - mappings[1072] = ItemType.MusicDiscPigstep; - mappings[1065] = ItemType.MusicDiscStal; - mappings[1066] = ItemType.MusicDiscStrad; - mappings[1069] = ItemType.MusicDiscWait; - mappings[1067] = ItemType.MusicDiscWard; - mappings[1023] = ItemType.Mutton; - mappings[319] = ItemType.Mycelium; - mappings[1021] = ItemType.NameTag; - mappings[1076] = ItemType.NautilusShell; - mappings[1007] = ItemType.NetherBrick; - mappings[324] = ItemType.NetherBrickFence; - mappings[232] = ItemType.NetherBrickSlab; - mappings[325] = ItemType.NetherBrickStairs; - mappings[358] = ItemType.NetherBrickWall; - mappings[321] = ItemType.NetherBricks; - mappings[59] = ItemType.NetherGoldOre; - mappings[60] = ItemType.NetherQuartzOre; - mappings[203] = ItemType.NetherSprouts; - mappings[1002] = ItemType.NetherStar; - mappings[901] = ItemType.NetherWart; - mappings[469] = ItemType.NetherWartBlock; - mappings[763] = ItemType.NetheriteAxe; - mappings[72] = ItemType.NetheriteBlock; - mappings[797] = ItemType.NetheriteBoots; - mappings[795] = ItemType.NetheriteChestplate; - mappings[794] = ItemType.NetheriteHelmet; - mappings[764] = ItemType.NetheriteHoe; - mappings[733] = ItemType.NetheriteIngot; - mappings[796] = ItemType.NetheriteLeggings; - mappings[762] = ItemType.NetheritePickaxe; - mappings[734] = ItemType.NetheriteScrap; - mappings[761] = ItemType.NetheriteShovel; - mappings[760] = ItemType.NetheriteSword; - mappings[280] = ItemType.Netherrack; - mappings[631] = ItemType.NoteBlock; - mappings[698] = ItemType.OakBoat; - mappings[634] = ItemType.OakButton; - mappings[699] = ItemType.OakChestBoat; - mappings[657] = ItemType.OakDoor; - mappings[268] = ItemType.OakFence; - mappings[676] = ItemType.OakFenceGate; - mappings[142] = ItemType.OakLeaves; - mappings[104] = ItemType.OakLog; - mappings[23] = ItemType.OakPlanks; - mappings[647] = ItemType.OakPressurePlate; - mappings[32] = ItemType.OakSapling; - mappings[804] = ItemType.OakSign; - mappings[214] = ItemType.OakSlab; - mappings[338] = ItemType.OakStairs; - mappings[667] = ItemType.OakTrapdoor; - mappings[133] = ItemType.OakWood; - mappings[617] = ItemType.Observer; - mappings[247] = ItemType.Obsidian; - mappings[943] = ItemType.OcelotSpawnEgg; - mappings[1147] = ItemType.OchreFroglight; - mappings[1026] = ItemType.OrangeBanner; - mappings[870] = ItemType.OrangeBed; - mappings[1127] = ItemType.OrangeCandle; - mappings[399] = ItemType.OrangeCarpet; - mappings[508] = ItemType.OrangeConcrete; - mappings[524] = ItemType.OrangeConcretePowder; - mappings[850] = ItemType.OrangeDye; - mappings[492] = ItemType.OrangeGlazedTerracotta; - mappings[476] = ItemType.OrangeShulkerBox; - mappings[424] = ItemType.OrangeStainedGlass; - mappings[440] = ItemType.OrangeStainedGlassPane; - mappings[380] = ItemType.OrangeTerracotta; - mappings[189] = ItemType.OrangeTulip; - mappings[168] = ItemType.OrangeWool; - mappings[192] = ItemType.OxeyeDaisy; - mappings[75] = ItemType.OxidizedCopper; - mappings[79] = ItemType.OxidizedCutCopper; - mappings[87] = ItemType.OxidizedCutCopperSlab; - mappings[83] = ItemType.OxidizedCutCopperStairs; - mappings[415] = ItemType.PackedIce; - mappings[299] = ItemType.PackedMud; - mappings[801] = ItemType.Painting; - mappings[944] = ItemType.PandaSpawnEgg; - mappings[829] = ItemType.Paper; - mappings[945] = ItemType.ParrotSpawnEgg; - mappings[1149] = ItemType.PearlescentFroglight; - mappings[420] = ItemType.Peony; - mappings[227] = ItemType.PetrifiedOakSlab; - mappings[1075] = ItemType.PhantomMembrane; - mappings[946] = ItemType.PhantomSpawnEgg; - mappings[947] = ItemType.PigSpawnEgg; - mappings[1086] = ItemType.PiglinBannerPattern; - mappings[949] = ItemType.PiglinBruteSpawnEgg; - mappings[948] = ItemType.PiglinSpawnEgg; - mappings[950] = ItemType.PillagerSpawnEgg; - mappings[1031] = ItemType.PinkBanner; - mappings[875] = ItemType.PinkBed; - mappings[1132] = ItemType.PinkCandle; - mappings[404] = ItemType.PinkCarpet; - mappings[513] = ItemType.PinkConcrete; - mappings[529] = ItemType.PinkConcretePowder; - mappings[855] = ItemType.PinkDye; - mappings[497] = ItemType.PinkGlazedTerracotta; - mappings[481] = ItemType.PinkShulkerBox; - mappings[429] = ItemType.PinkStainedGlass; - mappings[445] = ItemType.PinkStainedGlassPane; - mappings[385] = ItemType.PinkTerracotta; - mappings[191] = ItemType.PinkTulip; - mappings[173] = ItemType.PinkWool; - mappings[613] = ItemType.Piston; - mappings[998] = ItemType.PlayerHead; - mappings[17] = ItemType.Podzol; - mappings[1146] = ItemType.PointedDripstone; - mappings[993] = ItemType.PoisonousPotato; - mappings[951] = ItemType.PolarBearSpawnEgg; - mappings[7] = ItemType.PolishedAndesite; - mappings[601] = ItemType.PolishedAndesiteSlab; - mappings[584] = ItemType.PolishedAndesiteStairs; - mappings[284] = ItemType.PolishedBasalt; - mappings[1116] = ItemType.PolishedBlackstone; - mappings[1121] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1122] = ItemType.PolishedBlackstoneBrickStairs; - mappings[366] = ItemType.PolishedBlackstoneBrickWall; - mappings[1120] = ItemType.PolishedBlackstoneBricks; - mappings[633] = ItemType.PolishedBlackstoneButton; - mappings[644] = ItemType.PolishedBlackstonePressurePlate; - mappings[1117] = ItemType.PolishedBlackstoneSlab; - mappings[1118] = ItemType.PolishedBlackstoneStairs; - mappings[365] = ItemType.PolishedBlackstoneWall; - mappings[10] = ItemType.PolishedDeepslate; - mappings[604] = ItemType.PolishedDeepslateSlab; - mappings[587] = ItemType.PolishedDeepslateStairs; - mappings[368] = ItemType.PolishedDeepslateWall; - mappings[5] = ItemType.PolishedDiorite; - mappings[593] = ItemType.PolishedDioriteSlab; - mappings[575] = ItemType.PolishedDioriteStairs; - mappings[3] = ItemType.PolishedGranite; - mappings[590] = ItemType.PolishedGraniteSlab; - mappings[572] = ItemType.PolishedGraniteStairs; - mappings[1043] = ItemType.PoppedChorusFruit; - mappings[184] = ItemType.Poppy; - mappings[799] = ItemType.Porkchop; - mappings[991] = ItemType.Potato; - mappings[902] = ItemType.Potion; - mappings[816] = ItemType.PowderSnowBucket; - mappings[685] = ItemType.PoweredRail; - mappings[455] = ItemType.Prismarine; - mappings[238] = ItemType.PrismarineBrickSlab; - mappings[459] = ItemType.PrismarineBrickStairs; - mappings[456] = ItemType.PrismarineBricks; - mappings[1009] = ItemType.PrismarineCrystals; - mappings[1008] = ItemType.PrismarineShard; - mappings[237] = ItemType.PrismarineSlab; - mappings[458] = ItemType.PrismarineStairs; - mappings[352] = ItemType.PrismarineWall; - mappings[843] = ItemType.Pufferfish; - mappings[820] = ItemType.PufferfishBucket; - mappings[952] = ItemType.PufferfishSpawnEgg; - mappings[277] = ItemType.Pumpkin; - mappings[1003] = ItemType.PumpkinPie; - mappings[890] = ItemType.PumpkinSeeds; - mappings[1035] = ItemType.PurpleBanner; - mappings[879] = ItemType.PurpleBed; - mappings[1136] = ItemType.PurpleCandle; - mappings[408] = ItemType.PurpleCarpet; - mappings[517] = ItemType.PurpleConcrete; - mappings[533] = ItemType.PurpleConcretePowder; - mappings[859] = ItemType.PurpleDye; - mappings[501] = ItemType.PurpleGlazedTerracotta; - mappings[485] = ItemType.PurpleShulkerBox; - mappings[433] = ItemType.PurpleStainedGlass; - mappings[449] = ItemType.PurpleStainedGlassPane; - mappings[389] = ItemType.PurpleTerracotta; - mappings[177] = ItemType.PurpleWool; - mappings[252] = ItemType.PurpurBlock; - mappings[253] = ItemType.PurpurPillar; - mappings[236] = ItemType.PurpurSlab; - mappings[254] = ItemType.PurpurStairs; - mappings[725] = ItemType.Quartz; - mappings[375] = ItemType.QuartzBlock; - mappings[376] = ItemType.QuartzBricks; - mappings[377] = ItemType.QuartzPillar; - mappings[233] = ItemType.QuartzSlab; - mappings[378] = ItemType.QuartzStairs; - mappings[1010] = ItemType.Rabbit; - mappings[1013] = ItemType.RabbitFoot; - mappings[1014] = ItemType.RabbitHide; - mappings[953] = ItemType.RabbitSpawnEgg; - mappings[1012] = ItemType.RabbitStew; - mappings[687] = ItemType.Rail; - mappings[954] = ItemType.RavagerSpawnEgg; - mappings[729] = ItemType.RawCopper; - mappings[64] = ItemType.RawCopperBlock; - mappings[731] = ItemType.RawGold; - mappings[65] = ItemType.RawGoldBlock; - mappings[727] = ItemType.RawIron; - mappings[63] = ItemType.RawIronBlock; - mappings[834] = ItemType.RecoveryCompass; - mappings[1039] = ItemType.RedBanner; - mappings[883] = ItemType.RedBed; - mappings[1140] = ItemType.RedCandle; - mappings[412] = ItemType.RedCarpet; - mappings[521] = ItemType.RedConcrete; - mappings[537] = ItemType.RedConcretePowder; - mappings[863] = ItemType.RedDye; - mappings[505] = ItemType.RedGlazedTerracotta; - mappings[198] = ItemType.RedMushroom; - mappings[308] = ItemType.RedMushroomBlock; - mappings[600] = ItemType.RedNetherBrickSlab; - mappings[583] = ItemType.RedNetherBrickStairs; - mappings[360] = ItemType.RedNetherBrickWall; - mappings[471] = ItemType.RedNetherBricks; - mappings[41] = ItemType.RedSand; - mappings[462] = ItemType.RedSandstone; - mappings[234] = ItemType.RedSandstoneSlab; - mappings[465] = ItemType.RedSandstoneStairs; - mappings[353] = ItemType.RedSandstoneWall; - mappings[489] = ItemType.RedShulkerBox; - mappings[437] = ItemType.RedStainedGlass; - mappings[453] = ItemType.RedStainedGlassPane; - mappings[393] = ItemType.RedTerracotta; - mappings[188] = ItemType.RedTulip; - mappings[181] = ItemType.RedWool; - mappings[608] = ItemType.Redstone; - mappings[610] = ItemType.RedstoneBlock; - mappings[630] = ItemType.RedstoneLamp; - mappings[51] = ItemType.RedstoneOre; - mappings[609] = ItemType.RedstoneTorch; - mappings[306] = ItemType.ReinforcedDeepslate; - mappings[611] = ItemType.Repeater; - mappings[466] = ItemType.RepeatingCommandBlock; - mappings[1124] = ItemType.RespawnAnchor; - mappings[18] = ItemType.RootedDirt; - mappings[419] = ItemType.RoseBush; - mappings[896] = ItemType.RottenFlesh; - mappings[689] = ItemType.Saddle; - mappings[841] = ItemType.Salmon; - mappings[821] = ItemType.SalmonBucket; - mappings[955] = ItemType.SalmonSpawnEgg; - mappings[40] = ItemType.Sand; - mappings[156] = ItemType.Sandstone; - mappings[225] = ItemType.SandstoneSlab; - mappings[335] = ItemType.SandstoneStairs; - mappings[361] = ItemType.SandstoneWall; - mappings[607] = ItemType.Scaffolding; - mappings[326] = ItemType.Sculk; - mappings[328] = ItemType.SculkCatalyst; - mappings[626] = ItemType.SculkSensor; - mappings[329] = ItemType.SculkShrieker; - mappings[327] = ItemType.SculkVein; - mappings[715] = ItemType.TurtleScute; - mappings[461] = ItemType.SeaLantern; - mappings[166] = ItemType.SeaPickle; - mappings[165] = ItemType.Seagrass; - mappings[887] = ItemType.Shears; - mappings[956] = ItemType.SheepSpawnEgg; - mappings[1052] = ItemType.Shield; - mappings[1104] = ItemType.Shroomlight; - mappings[474] = ItemType.ShulkerBox; - mappings[1054] = ItemType.ShulkerShell; - mappings[957] = ItemType.ShulkerSpawnEgg; - mappings[958] = ItemType.SilverfishSpawnEgg; - mappings[960] = ItemType.SkeletonHorseSpawnEgg; - mappings[996] = ItemType.SkeletonSkull; - mappings[959] = ItemType.SkeletonSpawnEgg; - mappings[1083] = ItemType.SkullBannerPattern; - mappings[831] = ItemType.SlimeBall; - mappings[615] = ItemType.SlimeBlock; - mappings[961] = ItemType.SlimeSpawnEgg; - mappings[1142] = ItemType.SmallAmethystBud; - mappings[212] = ItemType.SmallDripleaf; - mappings[1095] = ItemType.SmithingTable; - mappings[1090] = ItemType.Smoker; - mappings[285] = ItemType.SmoothBasalt; - mappings[240] = ItemType.SmoothQuartz; - mappings[597] = ItemType.SmoothQuartzSlab; - mappings[580] = ItemType.SmoothQuartzStairs; - mappings[241] = ItemType.SmoothRedSandstone; - mappings[591] = ItemType.SmoothRedSandstoneSlab; - mappings[573] = ItemType.SmoothRedSandstoneStairs; - mappings[242] = ItemType.SmoothSandstone; - mappings[596] = ItemType.SmoothSandstoneSlab; - mappings[579] = ItemType.SmoothSandstoneStairs; - mappings[243] = ItemType.SmoothStone; - mappings[224] = ItemType.SmoothStoneSlab; - mappings[262] = ItemType.Snow; - mappings[264] = ItemType.SnowBlock; - mappings[817] = ItemType.Snowball; - mappings[1103] = ItemType.SoulCampfire; - mappings[1099] = ItemType.SoulLantern; - mappings[281] = ItemType.SoulSand; - mappings[282] = ItemType.SoulSoil; - mappings[286] = ItemType.SoulTorch; - mappings[255] = ItemType.Spawner; - mappings[1049] = ItemType.SpectralArrow; - mappings[904] = ItemType.SpiderEye; - mappings[962] = ItemType.SpiderSpawnEgg; - mappings[1048] = ItemType.SplashPotion; - mappings[151] = ItemType.Sponge; - mappings[196] = ItemType.SporeBlossom; - mappings[700] = ItemType.SpruceBoat; - mappings[635] = ItemType.SpruceButton; - mappings[701] = ItemType.SpruceChestBoat; - mappings[658] = ItemType.SpruceDoor; - mappings[269] = ItemType.SpruceFence; - mappings[677] = ItemType.SpruceFenceGate; - mappings[143] = ItemType.SpruceLeaves; - mappings[105] = ItemType.SpruceLog; - mappings[24] = ItemType.SprucePlanks; - mappings[648] = ItemType.SprucePressurePlate; - mappings[33] = ItemType.SpruceSapling; - mappings[805] = ItemType.SpruceSign; - mappings[215] = ItemType.SpruceSlab; - mappings[339] = ItemType.SpruceStairs; - mappings[668] = ItemType.SpruceTrapdoor; - mappings[134] = ItemType.SpruceWood; - mappings[838] = ItemType.Spyglass; - mappings[963] = ItemType.SquidSpawnEgg; - mappings[765] = ItemType.Stick; - mappings[614] = ItemType.StickyPiston; - mappings[1] = ItemType.Stone; - mappings[743] = ItemType.StoneAxe; - mappings[230] = ItemType.StoneBrickSlab; - mappings[317] = ItemType.StoneBrickStairs; - mappings[356] = ItemType.StoneBrickWall; - mappings[295] = ItemType.StoneBricks; - mappings[632] = ItemType.StoneButton; - mappings[744] = ItemType.StoneHoe; - mappings[742] = ItemType.StonePickaxe; - mappings[643] = ItemType.StonePressurePlate; - mappings[741] = ItemType.StoneShovel; - mappings[223] = ItemType.StoneSlab; - mappings[578] = ItemType.StoneStairs; - mappings[740] = ItemType.StoneSword; - mappings[1096] = ItemType.Stonecutter; - mappings[964] = ItemType.StraySpawnEgg; - mappings[965] = ItemType.StriderSpawnEgg; - mappings[768] = ItemType.String; - mappings[119] = ItemType.StrippedAcaciaLog; - mappings[128] = ItemType.StrippedAcaciaWood; - mappings[117] = ItemType.StrippedBirchLog; - mappings[126] = ItemType.StrippedBirchWood; - mappings[131] = ItemType.StrippedCrimsonHyphae; - mappings[122] = ItemType.StrippedCrimsonStem; - mappings[120] = ItemType.StrippedDarkOakLog; - mappings[129] = ItemType.StrippedDarkOakWood; - mappings[118] = ItemType.StrippedJungleLog; - mappings[127] = ItemType.StrippedJungleWood; - mappings[121] = ItemType.StrippedMangroveLog; - mappings[130] = ItemType.StrippedMangroveWood; - mappings[115] = ItemType.StrippedOakLog; - mappings[124] = ItemType.StrippedOakWood; - mappings[116] = ItemType.StrippedSpruceLog; - mappings[125] = ItemType.StrippedSpruceWood; - mappings[132] = ItemType.StrippedWarpedHyphae; - mappings[123] = ItemType.StrippedWarpedStem; - mappings[712] = ItemType.StructureBlock; - mappings[473] = ItemType.StructureVoid; - mappings[867] = ItemType.Sugar; - mappings[206] = ItemType.SugarCane; - mappings[417] = ItemType.Sunflower; - mappings[1079] = ItemType.SuspiciousStew; - mappings[1100] = ItemType.SweetBerries; - mappings[825] = ItemType.TadpoleBucket; - mappings[966] = ItemType.TadpoleSpawnEgg; - mappings[421] = ItemType.TallGrass; - mappings[622] = ItemType.Target; - mappings[414] = ItemType.Terracotta; - mappings[154] = ItemType.TintedGlass; - mappings[1050] = ItemType.TippedArrow; - mappings[629] = ItemType.Tnt; - mappings[693] = ItemType.TntMinecart; - mappings[248] = ItemType.Torch; - mappings[1053] = ItemType.TotemOfUndying; - mappings[967] = ItemType.TraderLlamaSpawnEgg; - mappings[628] = ItemType.TrappedChest; - mappings[1074] = ItemType.Trident; - mappings[627] = ItemType.TripwireHook; - mappings[842] = ItemType.TropicalFish; - mappings[823] = ItemType.TropicalFishBucket; - mappings[968] = ItemType.TropicalFishSpawnEgg; - mappings[550] = ItemType.TubeCoral; - mappings[545] = ItemType.TubeCoralBlock; - mappings[560] = ItemType.TubeCoralFan; - mappings[12] = ItemType.Tuff; - mappings[539] = ItemType.TurtleEgg; - mappings[714] = ItemType.TurtleHelmet; - mappings[969] = ItemType.TurtleSpawnEgg; - mappings[205] = ItemType.TwistingVines; - mappings[1148] = ItemType.VerdantFroglight; - mappings[970] = ItemType.VexSpawnEgg; - mappings[971] = ItemType.VillagerSpawnEgg; - mappings[972] = ItemType.VindicatorSpawnEgg; - mappings[314] = ItemType.Vine; - mappings[973] = ItemType.WanderingTraderSpawnEgg; - mappings[974] = ItemType.WardenSpawnEgg; - mappings[642] = ItemType.WarpedButton; - mappings[665] = ItemType.WarpedDoor; - mappings[276] = ItemType.WarpedFence; - mappings[684] = ItemType.WarpedFenceGate; - mappings[200] = ItemType.WarpedFungus; - mappings[696] = ItemType.WarpedFungusOnAStick; - mappings[141] = ItemType.WarpedHyphae; - mappings[21] = ItemType.WarpedNylium; - mappings[31] = ItemType.WarpedPlanks; - mappings[655] = ItemType.WarpedPressurePlate; - mappings[202] = ItemType.WarpedRoots; - mappings[812] = ItemType.WarpedSign; - mappings[222] = ItemType.WarpedSlab; - mappings[346] = ItemType.WarpedStairs; - mappings[114] = ItemType.WarpedStem; - mappings[675] = ItemType.WarpedTrapdoor; - mappings[470] = ItemType.WarpedWartBlock; - mappings[814] = ItemType.WaterBucket; - mappings[88] = ItemType.WaxedCopperBlock; - mappings[92] = ItemType.WaxedCutCopper; - mappings[100] = ItemType.WaxedCutCopperSlab; - mappings[96] = ItemType.WaxedCutCopperStairs; - mappings[89] = ItemType.WaxedExposedCopper; - mappings[93] = ItemType.WaxedExposedCutCopper; - mappings[101] = ItemType.WaxedExposedCutCopperSlab; - mappings[97] = ItemType.WaxedExposedCutCopperStairs; - mappings[91] = ItemType.WaxedOxidizedCopper; - mappings[95] = ItemType.WaxedOxidizedCutCopper; - mappings[103] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[99] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[90] = ItemType.WaxedWeatheredCopper; - mappings[94] = ItemType.WaxedWeatheredCutCopper; - mappings[102] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[98] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[74] = ItemType.WeatheredCopper; - mappings[78] = ItemType.WeatheredCutCopper; - mappings[86] = ItemType.WeatheredCutCopperSlab; - mappings[82] = ItemType.WeatheredCutCopperStairs; - mappings[204] = ItemType.WeepingVines; - mappings[152] = ItemType.WetSponge; - mappings[772] = ItemType.Wheat; - mappings[771] = ItemType.WheatSeeds; - mappings[1025] = ItemType.WhiteBanner; - mappings[869] = ItemType.WhiteBed; - mappings[1126] = ItemType.WhiteCandle; - mappings[398] = ItemType.WhiteCarpet; - mappings[507] = ItemType.WhiteConcrete; - mappings[523] = ItemType.WhiteConcretePowder; - mappings[849] = ItemType.WhiteDye; - mappings[491] = ItemType.WhiteGlazedTerracotta; - mappings[475] = ItemType.WhiteShulkerBox; - mappings[423] = ItemType.WhiteStainedGlass; - mappings[439] = ItemType.WhiteStainedGlassPane; - mappings[379] = ItemType.WhiteTerracotta; - mappings[190] = ItemType.WhiteTulip; - mappings[167] = ItemType.WhiteWool; - mappings[975] = ItemType.WitchSpawnEgg; - mappings[195] = ItemType.WitherRose; - mappings[997] = ItemType.WitherSkeletonSkull; - mappings[976] = ItemType.WitherSkeletonSpawnEgg; - mappings[977] = ItemType.WolfSpawnEgg; - mappings[738] = ItemType.WoodenAxe; - mappings[739] = ItemType.WoodenHoe; - mappings[737] = ItemType.WoodenPickaxe; - mappings[736] = ItemType.WoodenShovel; - mappings[735] = ItemType.WoodenSword; - mappings[985] = ItemType.WritableBook; - mappings[986] = ItemType.WrittenBook; - mappings[1029] = ItemType.YellowBanner; - mappings[873] = ItemType.YellowBed; - mappings[1130] = ItemType.YellowCandle; - mappings[402] = ItemType.YellowCarpet; - mappings[511] = ItemType.YellowConcrete; - mappings[527] = ItemType.YellowConcretePowder; - mappings[853] = ItemType.YellowDye; - mappings[495] = ItemType.YellowGlazedTerracotta; - mappings[479] = ItemType.YellowShulkerBox; - mappings[427] = ItemType.YellowStainedGlass; - mappings[443] = ItemType.YellowStainedGlassPane; - mappings[383] = ItemType.YellowTerracotta; - mappings[171] = ItemType.YellowWool; - mappings[978] = ItemType.ZoglinSpawnEgg; - mappings[999] = ItemType.ZombieHead; - mappings[980] = ItemType.ZombieHorseSpawnEgg; - mappings[979] = ItemType.ZombieSpawnEgg; - mappings[981] = ItemType.ZombieVillagerSpawnEgg; - mappings[982] = ItemType.ZombifiedPiglinSpawnEgg; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1193.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette1193.cs deleted file mode 100644 index 6677721ea4..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1193.cs +++ /dev/null @@ -1,1204 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette1193 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette1193() - { - mappings[721] = ItemType.AcaciaBoat; - mappings[648] = ItemType.AcaciaButton; - mappings[722] = ItemType.AcaciaChestBoat; - mappings[673] = ItemType.AcaciaDoor; - mappings[279] = ItemType.AcaciaFence; - mappings[694] = ItemType.AcaciaFenceGate; - mappings[835] = ItemType.AcaciaHangingSign; - mappings[150] = ItemType.AcaciaLeaves; - mappings[110] = ItemType.AcaciaLog; - mappings[27] = ItemType.AcaciaPlanks; - mappings[662] = ItemType.AcaciaPressurePlate; - mappings[38] = ItemType.AcaciaSapling; - mappings[825] = ItemType.AcaciaSign; - mappings[222] = ItemType.AcaciaSlab; - mappings[350] = ItemType.AcaciaStairs; - mappings[684] = ItemType.AcaciaTrapdoor; - mappings[141] = ItemType.AcaciaWood; - mappings[703] = ItemType.ActivatorRail; - mappings[0] = ItemType.Air; - mappings[940] = ItemType.AllaySpawnEgg; - mappings[190] = ItemType.Allium; - mappings[68] = ItemType.AmethystBlock; - mappings[1179] = ItemType.AmethystCluster; - mappings[743] = ItemType.AmethystShard; - mappings[63] = ItemType.AncientDebris; - mappings[6] = ItemType.Andesite; - mappings[609] = ItemType.AndesiteSlab; - mappings[592] = ItemType.AndesiteStairs; - mappings[369] = ItemType.AndesiteWall; - mappings[381] = ItemType.Anvil; - mappings[734] = ItemType.Apple; - mappings[1049] = ItemType.ArmorStand; - mappings[736] = ItemType.Arrow; - mappings[852] = ItemType.AxolotlBucket; - mappings[941] = ItemType.AxolotlSpawnEgg; - mappings[166] = ItemType.Azalea; - mappings[153] = ItemType.AzaleaLeaves; - mappings[191] = ItemType.AzureBluet; - mappings[1025] = ItemType.BakedPotato; - mappings[217] = ItemType.Bamboo; - mappings[117] = ItemType.BambooBlock; - mappings[651] = ItemType.BambooButton; - mappings[728] = ItemType.BambooChestRaft; - mappings[676] = ItemType.BambooDoor; - mappings[282] = ItemType.BambooFence; - mappings[697] = ItemType.BambooFenceGate; - mappings[838] = ItemType.BambooHangingSign; - mappings[33] = ItemType.BambooMosaic; - mappings[226] = ItemType.BambooMosaicSlab; - mappings[354] = ItemType.BambooMosaicStairs; - mappings[30] = ItemType.BambooPlanks; - mappings[665] = ItemType.BambooPressurePlate; - mappings[727] = ItemType.BambooRaft; - mappings[828] = ItemType.BambooSign; - mappings[225] = ItemType.BambooSlab; - mappings[353] = ItemType.BambooStairs; - mappings[687] = ItemType.BambooTrapdoor; - mappings[1123] = ItemType.Barrel; - mappings[405] = ItemType.Barrier; - mappings[291] = ItemType.Basalt; - mappings[942] = ItemType.BatSpawnEgg; - mappings[358] = ItemType.Beacon; - mappings[41] = ItemType.Bedrock; - mappings[1140] = ItemType.BeeNest; - mappings[943] = ItemType.BeeSpawnEgg; - mappings[920] = ItemType.Beef; - mappings[1141] = ItemType.Beehive; - mappings[1078] = ItemType.Beetroot; - mappings[1079] = ItemType.BeetrootSeeds; - mappings[1080] = ItemType.BeetrootSoup; - mappings[1131] = ItemType.Bell; - mappings[215] = ItemType.BigDripleaf; - mappings[717] = ItemType.BirchBoat; - mappings[646] = ItemType.BirchButton; - mappings[718] = ItemType.BirchChestBoat; - mappings[671] = ItemType.BirchDoor; - mappings[277] = ItemType.BirchFence; - mappings[692] = ItemType.BirchFenceGate; - mappings[833] = ItemType.BirchHangingSign; - mappings[148] = ItemType.BirchLeaves; - mappings[108] = ItemType.BirchLog; - mappings[25] = ItemType.BirchPlanks; - mappings[660] = ItemType.BirchPressurePlate; - mappings[36] = ItemType.BirchSapling; - mappings[823] = ItemType.BirchSign; - mappings[220] = ItemType.BirchSlab; - mappings[348] = ItemType.BirchStairs; - mappings[682] = ItemType.BirchTrapdoor; - mappings[139] = ItemType.BirchWood; - mappings[1074] = ItemType.BlackBanner; - mappings[912] = ItemType.BlackBed; - mappings[1175] = ItemType.BlackCandle; - mappings[423] = ItemType.BlackCarpet; - mappings[532] = ItemType.BlackConcrete; - mappings[548] = ItemType.BlackConcretePowder; - mappings[892] = ItemType.BlackDye; - mappings[516] = ItemType.BlackGlazedTerracotta; - mappings[500] = ItemType.BlackShulkerBox; - mappings[448] = ItemType.BlackStainedGlass; - mappings[464] = ItemType.BlackStainedGlassPane; - mappings[404] = ItemType.BlackTerracotta; - mappings[186] = ItemType.BlackWool; - mappings[1146] = ItemType.Blackstone; - mappings[1147] = ItemType.BlackstoneSlab; - mappings[1148] = ItemType.BlackstoneStairs; - mappings[374] = ItemType.BlackstoneWall; - mappings[1125] = ItemType.BlastFurnace; - mappings[934] = ItemType.BlazePowder; - mappings[926] = ItemType.BlazeRod; - mappings[944] = ItemType.BlazeSpawnEgg; - mappings[1070] = ItemType.BlueBanner; - mappings[908] = ItemType.BlueBed; - mappings[1171] = ItemType.BlueCandle; - mappings[419] = ItemType.BlueCarpet; - mappings[528] = ItemType.BlueConcrete; - mappings[544] = ItemType.BlueConcretePowder; - mappings[888] = ItemType.BlueDye; - mappings[512] = ItemType.BlueGlazedTerracotta; - mappings[580] = ItemType.BlueIce; - mappings[189] = ItemType.BlueOrchid; - mappings[496] = ItemType.BlueShulkerBox; - mappings[444] = ItemType.BlueStainedGlass; - mappings[460] = ItemType.BlueStainedGlassPane; - mappings[400] = ItemType.BlueTerracotta; - mappings[182] = ItemType.BlueWool; - mappings[894] = ItemType.Bone; - mappings[482] = ItemType.BoneBlock; - mappings[893] = ItemType.BoneMeal; - mappings[858] = ItemType.Book; - mappings[251] = ItemType.Bookshelf; - mappings[735] = ItemType.Bow; - mappings[783] = ItemType.Bowl; - mappings[561] = ItemType.BrainCoral; - mappings[556] = ItemType.BrainCoralBlock; - mappings[571] = ItemType.BrainCoralFan; - mappings[790] = ItemType.Bread; - mappings[936] = ItemType.BrewingStand; - mappings[854] = ItemType.Brick; - mappings[235] = ItemType.BrickSlab; - mappings[324] = ItemType.BrickStairs; - mappings[361] = ItemType.BrickWall; - mappings[250] = ItemType.Bricks; - mappings[1071] = ItemType.BrownBanner; - mappings[909] = ItemType.BrownBed; - mappings[1172] = ItemType.BrownCandle; - mappings[420] = ItemType.BrownCarpet; - mappings[529] = ItemType.BrownConcrete; - mappings[545] = ItemType.BrownConcretePowder; - mappings[889] = ItemType.BrownDye; - mappings[513] = ItemType.BrownGlazedTerracotta; - mappings[201] = ItemType.BrownMushroom; - mappings[315] = ItemType.BrownMushroomBlock; - mappings[497] = ItemType.BrownShulkerBox; - mappings[445] = ItemType.BrownStainedGlass; - mappings[461] = ItemType.BrownStainedGlassPane; - mappings[401] = ItemType.BrownTerracotta; - mappings[183] = ItemType.BrownWool; - mappings[562] = ItemType.BubbleCoral; - mappings[557] = ItemType.BubbleCoralBlock; - mappings[572] = ItemType.BubbleCoralFan; - mappings[841] = ItemType.Bucket; - mappings[69] = ItemType.BuddingAmethyst; - mappings[863] = ItemType.Bundle; - mappings[272] = ItemType.Cactus; - mappings[896] = ItemType.Cake; - mappings[11] = ItemType.Calcite; - mappings[946] = ItemType.CamelSpawnEgg; - mappings[1136] = ItemType.Campfire; - mappings[1159] = ItemType.Candle; - mappings[1023] = ItemType.Carrot; - mappings[710] = ItemType.CarrotOnAStick; - mappings[1126] = ItemType.CartographyTable; - mappings[286] = ItemType.CarvedPumpkin; - mappings[945] = ItemType.CatSpawnEgg; - mappings[937] = ItemType.Cauldron; - mappings[947] = ItemType.CaveSpiderSpawnEgg; - mappings[319] = ItemType.Chain; - mappings[477] = ItemType.ChainCommandBlock; - mappings[798] = ItemType.ChainmailBoots; - mappings[796] = ItemType.ChainmailChestplate; - mappings[795] = ItemType.ChainmailHelmet; - mappings[797] = ItemType.ChainmailLeggings; - mappings[738] = ItemType.Charcoal; - mappings[263] = ItemType.Chest; - mappings[706] = ItemType.ChestMinecart; - mappings[922] = ItemType.Chicken; - mappings[948] = ItemType.ChickenSpawnEgg; - mappings[382] = ItemType.ChippedAnvil; - mappings[252] = ItemType.ChiseledBookshelf; - mappings[313] = ItemType.ChiseledDeepslate; - mappings[331] = ItemType.ChiseledNetherBricks; - mappings[1153] = ItemType.ChiseledPolishedBlackstone; - mappings[384] = ItemType.ChiseledQuartzBlock; - mappings[473] = ItemType.ChiseledRedSandstone; - mappings[161] = ItemType.ChiseledSandstone; - mappings[306] = ItemType.ChiseledStoneBricks; - mappings[258] = ItemType.ChorusFlower; - mappings[1076] = ItemType.ChorusFruit; - mappings[257] = ItemType.ChorusPlant; - mappings[273] = ItemType.Clay; - mappings[855] = ItemType.ClayBall; - mappings[865] = ItemType.Clock; - mappings[737] = ItemType.Coal; - mappings[64] = ItemType.CoalBlock; - mappings[45] = ItemType.CoalOre; - mappings[16] = ItemType.CoarseDirt; - mappings[9] = ItemType.CobbledDeepslate; - mappings[613] = ItemType.CobbledDeepslateSlab; - mappings[596] = ItemType.CobbledDeepslateStairs; - mappings[377] = ItemType.CobbledDeepslateWall; - mappings[22] = ItemType.Cobblestone; - mappings[234] = ItemType.CobblestoneSlab; - mappings[268] = ItemType.CobblestoneStairs; - mappings[359] = ItemType.CobblestoneWall; - mappings[163] = ItemType.Cobweb; - mappings[876] = ItemType.CocoaBeans; - mappings[868] = ItemType.Cod; - mappings[850] = ItemType.CodBucket; - mappings[949] = ItemType.CodSpawnEgg; - mappings[357] = ItemType.CommandBlock; - mappings[1056] = ItemType.CommandBlockMinecart; - mappings[622] = ItemType.Comparator; - mappings[861] = ItemType.Compass; - mappings[1122] = ItemType.Composter; - mappings[581] = ItemType.Conduit; - mappings[921] = ItemType.CookedBeef; - mappings[923] = ItemType.CookedChicken; - mappings[872] = ItemType.CookedCod; - mappings[1058] = ItemType.CookedMutton; - mappings[817] = ItemType.CookedPorkchop; - mappings[1045] = ItemType.CookedRabbit; - mappings[873] = ItemType.CookedSalmon; - mappings[913] = ItemType.Cookie; - mappings[71] = ItemType.CopperBlock; - mappings[747] = ItemType.CopperIngot; - mappings[49] = ItemType.CopperOre; - mappings[197] = ItemType.Cornflower; - mappings[950] = ItemType.CowSpawnEgg; - mappings[310] = ItemType.CrackedDeepslateBricks; - mappings[312] = ItemType.CrackedDeepslateTiles; - mappings[330] = ItemType.CrackedNetherBricks; - mappings[1157] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[305] = ItemType.CrackedStoneBricks; - mappings[264] = ItemType.CraftingTable; - mappings[1116] = ItemType.CreeperBannerPattern; - mappings[1033] = ItemType.CreeperHead; - mappings[951] = ItemType.CreeperSpawnEgg; - mappings[652] = ItemType.CrimsonButton; - mappings[677] = ItemType.CrimsonDoor; - mappings[283] = ItemType.CrimsonFence; - mappings[698] = ItemType.CrimsonFenceGate; - mappings[203] = ItemType.CrimsonFungus; - mappings[839] = ItemType.CrimsonHangingSign; - mappings[144] = ItemType.CrimsonHyphae; - mappings[20] = ItemType.CrimsonNylium; - mappings[31] = ItemType.CrimsonPlanks; - mappings[666] = ItemType.CrimsonPressurePlate; - mappings[205] = ItemType.CrimsonRoots; - mappings[829] = ItemType.CrimsonSign; - mappings[227] = ItemType.CrimsonSlab; - mappings[355] = ItemType.CrimsonStairs; - mappings[115] = ItemType.CrimsonStem; - mappings[688] = ItemType.CrimsonTrapdoor; - mappings[1112] = ItemType.Crossbow; - mappings[1145] = ItemType.CryingObsidian; - mappings[78] = ItemType.CutCopper; - mappings[86] = ItemType.CutCopperSlab; - mappings[82] = ItemType.CutCopperStairs; - mappings[474] = ItemType.CutRedSandstone; - mappings[241] = ItemType.CutRedSandstoneSlab; - mappings[162] = ItemType.CutSandstone; - mappings[232] = ItemType.CutSandstoneSlab; - mappings[1068] = ItemType.CyanBanner; - mappings[906] = ItemType.CyanBed; - mappings[1169] = ItemType.CyanCandle; - mappings[417] = ItemType.CyanCarpet; - mappings[526] = ItemType.CyanConcrete; - mappings[542] = ItemType.CyanConcretePowder; - mappings[886] = ItemType.CyanDye; - mappings[510] = ItemType.CyanGlazedTerracotta; - mappings[494] = ItemType.CyanShulkerBox; - mappings[442] = ItemType.CyanStainedGlass; - mappings[458] = ItemType.CyanStainedGlassPane; - mappings[398] = ItemType.CyanTerracotta; - mappings[180] = ItemType.CyanWool; - mappings[383] = ItemType.DamagedAnvil; - mappings[187] = ItemType.Dandelion; - mappings[723] = ItemType.DarkOakBoat; - mappings[649] = ItemType.DarkOakButton; - mappings[724] = ItemType.DarkOakChestBoat; - mappings[674] = ItemType.DarkOakDoor; - mappings[280] = ItemType.DarkOakFence; - mappings[695] = ItemType.DarkOakFenceGate; - mappings[836] = ItemType.DarkOakHangingSign; - mappings[151] = ItemType.DarkOakLeaves; - mappings[111] = ItemType.DarkOakLog; - mappings[28] = ItemType.DarkOakPlanks; - mappings[663] = ItemType.DarkOakPressurePlate; - mappings[39] = ItemType.DarkOakSapling; - mappings[826] = ItemType.DarkOakSign; - mappings[223] = ItemType.DarkOakSlab; - mappings[351] = ItemType.DarkOakStairs; - mappings[685] = ItemType.DarkOakTrapdoor; - mappings[142] = ItemType.DarkOakWood; - mappings[467] = ItemType.DarkPrismarine; - mappings[245] = ItemType.DarkPrismarineSlab; - mappings[470] = ItemType.DarkPrismarineStairs; - mappings[635] = ItemType.DaylightDetector; - mappings[565] = ItemType.DeadBrainCoral; - mappings[551] = ItemType.DeadBrainCoralBlock; - mappings[576] = ItemType.DeadBrainCoralFan; - mappings[566] = ItemType.DeadBubbleCoral; - mappings[552] = ItemType.DeadBubbleCoralBlock; - mappings[577] = ItemType.DeadBubbleCoralFan; - mappings[168] = ItemType.DeadBush; - mappings[567] = ItemType.DeadFireCoral; - mappings[553] = ItemType.DeadFireCoralBlock; - mappings[578] = ItemType.DeadFireCoralFan; - mappings[568] = ItemType.DeadHornCoral; - mappings[554] = ItemType.DeadHornCoralBlock; - mappings[579] = ItemType.DeadHornCoralFan; - mappings[569] = ItemType.DeadTubeCoral; - mappings[550] = ItemType.DeadTubeCoralBlock; - mappings[575] = ItemType.DeadTubeCoralFan; - mappings[1091] = ItemType.DebugStick; - mappings[8] = ItemType.Deepslate; - mappings[615] = ItemType.DeepslateBrickSlab; - mappings[598] = ItemType.DeepslateBrickStairs; - mappings[379] = ItemType.DeepslateBrickWall; - mappings[309] = ItemType.DeepslateBricks; - mappings[46] = ItemType.DeepslateCoalOre; - mappings[50] = ItemType.DeepslateCopperOre; - mappings[60] = ItemType.DeepslateDiamondOre; - mappings[56] = ItemType.DeepslateEmeraldOre; - mappings[52] = ItemType.DeepslateGoldOre; - mappings[48] = ItemType.DeepslateIronOre; - mappings[58] = ItemType.DeepslateLapisOre; - mappings[54] = ItemType.DeepslateRedstoneOre; - mappings[616] = ItemType.DeepslateTileSlab; - mappings[599] = ItemType.DeepslateTileStairs; - mappings[380] = ItemType.DeepslateTileWall; - mappings[311] = ItemType.DeepslateTiles; - mappings[701] = ItemType.DetectorRail; - mappings[739] = ItemType.Diamond; - mappings[775] = ItemType.DiamondAxe; - mappings[73] = ItemType.DiamondBlock; - mappings[806] = ItemType.DiamondBoots; - mappings[804] = ItemType.DiamondChestplate; - mappings[803] = ItemType.DiamondHelmet; - mappings[776] = ItemType.DiamondHoe; - mappings[1052] = ItemType.DiamondHorseArmor; - mappings[805] = ItemType.DiamondLeggings; - mappings[59] = ItemType.DiamondOre; - mappings[774] = ItemType.DiamondPickaxe; - mappings[773] = ItemType.DiamondShovel; - mappings[772] = ItemType.DiamondSword; - mappings[4] = ItemType.Diorite; - mappings[612] = ItemType.DioriteSlab; - mappings[595] = ItemType.DioriteStairs; - mappings[373] = ItemType.DioriteWall; - mappings[15] = ItemType.Dirt; - mappings[426] = ItemType.DirtPath; - mappings[1107] = ItemType.DiscFragment5; - mappings[629] = ItemType.Dispenser; - mappings[952] = ItemType.DolphinSpawnEgg; - mappings[953] = ItemType.DonkeySpawnEgg; - mappings[1081] = ItemType.DragonBreath; - mappings[342] = ItemType.DragonEgg; - mappings[1034] = ItemType.DragonHead; - mappings[917] = ItemType.DriedKelp; - mappings[856] = ItemType.DriedKelpBlock; - mappings[13] = ItemType.DripstoneBlock; - mappings[630] = ItemType.Dropper; - mappings[954] = ItemType.DrownedSpawnEgg; - mappings[1185] = ItemType.EchoShard; - mappings[860] = ItemType.Egg; - mappings[955] = ItemType.ElderGuardianSpawnEgg; - mappings[712] = ItemType.Elytra; - mappings[740] = ItemType.Emerald; - mappings[345] = ItemType.EmeraldBlock; - mappings[55] = ItemType.EmeraldOre; - mappings[1040] = ItemType.EnchantedBook; - mappings[820] = ItemType.EnchantedGoldenApple; - mappings[338] = ItemType.EnchantingTable; - mappings[1075] = ItemType.EndCrystal; - mappings[339] = ItemType.EndPortalFrame; - mappings[256] = ItemType.EndRod; - mappings[340] = ItemType.EndStone; - mappings[605] = ItemType.EndStoneBrickSlab; - mappings[587] = ItemType.EndStoneBrickStairs; - mappings[372] = ItemType.EndStoneBrickWall; - mappings[341] = ItemType.EndStoneBricks; - mappings[344] = ItemType.EnderChest; - mappings[956] = ItemType.EnderDragonSpawnEgg; - mappings[938] = ItemType.EnderEye; - mappings[925] = ItemType.EnderPearl; - mappings[957] = ItemType.EndermanSpawnEgg; - mappings[958] = ItemType.EndermiteSpawnEgg; - mappings[959] = ItemType.EvokerSpawnEgg; - mappings[1016] = ItemType.ExperienceBottle; - mappings[75] = ItemType.ExposedCopper; - mappings[79] = ItemType.ExposedCutCopper; - mappings[87] = ItemType.ExposedCutCopperSlab; - mappings[83] = ItemType.ExposedCutCopperStairs; - mappings[265] = ItemType.Farmland; - mappings[786] = ItemType.Feather; - mappings[933] = ItemType.FermentedSpiderEye; - mappings[165] = ItemType.Fern; - mappings[914] = ItemType.FilledMap; - mappings[1017] = ItemType.FireCharge; - mappings[563] = ItemType.FireCoral; - mappings[558] = ItemType.FireCoralBlock; - mappings[573] = ItemType.FireCoralFan; - mappings[1038] = ItemType.FireworkRocket; - mappings[1039] = ItemType.FireworkStar; - mappings[864] = ItemType.FishingRod; - mappings[1127] = ItemType.FletchingTable; - mappings[815] = ItemType.Flint; - mappings[733] = ItemType.FlintAndSteel; - mappings[1115] = ItemType.FlowerBannerPattern; - mappings[1022] = ItemType.FlowerPot; - mappings[167] = ItemType.FloweringAzalea; - mappings[154] = ItemType.FloweringAzaleaLeaves; - mappings[960] = ItemType.FoxSpawnEgg; - mappings[961] = ItemType.FrogSpawnEgg; - mappings[1184] = ItemType.Frogspawn; - mappings[266] = ItemType.Furnace; - mappings[707] = ItemType.FurnaceMinecart; - mappings[962] = ItemType.GhastSpawnEgg; - mappings[927] = ItemType.GhastTear; - mappings[1149] = ItemType.GildedBlackstone; - mappings[157] = ItemType.Glass; - mappings[931] = ItemType.GlassBottle; - mappings[320] = ItemType.GlassPane; - mappings[939] = ItemType.GlisteringMelonSlice; - mappings[1119] = ItemType.GlobeBannerPattern; - mappings[1135] = ItemType.GlowBerries; - mappings[875] = ItemType.GlowInkSac; - mappings[1021] = ItemType.GlowItemFrame; - mappings[323] = ItemType.GlowLichen; - mappings[963] = ItemType.GlowSquidSpawnEgg; - mappings[295] = ItemType.Glowstone; - mappings[867] = ItemType.GlowstoneDust; - mappings[1121] = ItemType.GoatHorn; - mappings[964] = ItemType.GoatSpawnEgg; - mappings[72] = ItemType.GoldBlock; - mappings[749] = ItemType.GoldIngot; - mappings[928] = ItemType.GoldNugget; - mappings[51] = ItemType.GoldOre; - mappings[819] = ItemType.GoldenApple; - mappings[765] = ItemType.GoldenAxe; - mappings[810] = ItemType.GoldenBoots; - mappings[1028] = ItemType.GoldenCarrot; - mappings[808] = ItemType.GoldenChestplate; - mappings[807] = ItemType.GoldenHelmet; - mappings[766] = ItemType.GoldenHoe; - mappings[1051] = ItemType.GoldenHorseArmor; - mappings[809] = ItemType.GoldenLeggings; - mappings[764] = ItemType.GoldenPickaxe; - mappings[763] = ItemType.GoldenShovel; - mappings[762] = ItemType.GoldenSword; - mappings[2] = ItemType.Granite; - mappings[608] = ItemType.GraniteSlab; - mappings[591] = ItemType.GraniteStairs; - mappings[365] = ItemType.GraniteWall; - mappings[164] = ItemType.ShortGrass; - mappings[14] = ItemType.GrassBlock; - mappings[44] = ItemType.Gravel; - mappings[1066] = ItemType.GrayBanner; - mappings[904] = ItemType.GrayBed; - mappings[1167] = ItemType.GrayCandle; - mappings[415] = ItemType.GrayCarpet; - mappings[524] = ItemType.GrayConcrete; - mappings[540] = ItemType.GrayConcretePowder; - mappings[884] = ItemType.GrayDye; - mappings[508] = ItemType.GrayGlazedTerracotta; - mappings[492] = ItemType.GrayShulkerBox; - mappings[440] = ItemType.GrayStainedGlass; - mappings[456] = ItemType.GrayStainedGlassPane; - mappings[396] = ItemType.GrayTerracotta; - mappings[178] = ItemType.GrayWool; - mappings[1072] = ItemType.GreenBanner; - mappings[910] = ItemType.GreenBed; - mappings[1173] = ItemType.GreenCandle; - mappings[421] = ItemType.GreenCarpet; - mappings[530] = ItemType.GreenConcrete; - mappings[546] = ItemType.GreenConcretePowder; - mappings[890] = ItemType.GreenDye; - mappings[514] = ItemType.GreenGlazedTerracotta; - mappings[498] = ItemType.GreenShulkerBox; - mappings[446] = ItemType.GreenStainedGlass; - mappings[462] = ItemType.GreenStainedGlassPane; - mappings[402] = ItemType.GreenTerracotta; - mappings[184] = ItemType.GreenWool; - mappings[1128] = ItemType.Grindstone; - mappings[965] = ItemType.GuardianSpawnEgg; - mappings[787] = ItemType.Gunpowder; - mappings[214] = ItemType.HangingRoots; - mappings[407] = ItemType.HayBlock; - mappings[1111] = ItemType.HeartOfTheSea; - mappings[657] = ItemType.HeavyWeightedPressurePlate; - mappings[966] = ItemType.HoglinSpawnEgg; - mappings[626] = ItemType.HoneyBlock; - mappings[1142] = ItemType.HoneyBottle; - mappings[1139] = ItemType.Honeycomb; - mappings[1143] = ItemType.HoneycombBlock; - mappings[628] = ItemType.Hopper; - mappings[709] = ItemType.HopperMinecart; - mappings[564] = ItemType.HornCoral; - mappings[559] = ItemType.HornCoralBlock; - mappings[574] = ItemType.HornCoralFan; - mappings[967] = ItemType.HorseSpawnEgg; - mappings[968] = ItemType.HuskSpawnEgg; - mappings[270] = ItemType.Ice; - mappings[301] = ItemType.InfestedChiseledStoneBricks; - mappings[297] = ItemType.InfestedCobblestone; - mappings[300] = ItemType.InfestedCrackedStoneBricks; - mappings[302] = ItemType.InfestedDeepslate; - mappings[299] = ItemType.InfestedMossyStoneBricks; - mappings[296] = ItemType.InfestedStone; - mappings[298] = ItemType.InfestedStoneBricks; - mappings[874] = ItemType.InkSac; - mappings[770] = ItemType.IronAxe; - mappings[318] = ItemType.IronBars; - mappings[70] = ItemType.IronBlock; - mappings[802] = ItemType.IronBoots; - mappings[800] = ItemType.IronChestplate; - mappings[668] = ItemType.IronDoor; - mappings[969] = ItemType.IronGolemSpawnEgg; - mappings[799] = ItemType.IronHelmet; - mappings[771] = ItemType.IronHoe; - mappings[1050] = ItemType.IronHorseArmor; - mappings[745] = ItemType.IronIngot; - mappings[801] = ItemType.IronLeggings; - mappings[1089] = ItemType.IronNugget; - mappings[47] = ItemType.IronOre; - mappings[769] = ItemType.IronPickaxe; - mappings[768] = ItemType.IronShovel; - mappings[767] = ItemType.IronSword; - mappings[679] = ItemType.IronTrapdoor; - mappings[1020] = ItemType.ItemFrame; - mappings[287] = ItemType.JackOLantern; - mappings[730] = ItemType.Jigsaw; - mappings[274] = ItemType.Jukebox; - mappings[719] = ItemType.JungleBoat; - mappings[647] = ItemType.JungleButton; - mappings[720] = ItemType.JungleChestBoat; - mappings[672] = ItemType.JungleDoor; - mappings[278] = ItemType.JungleFence; - mappings[693] = ItemType.JungleFenceGate; - mappings[834] = ItemType.JungleHangingSign; - mappings[149] = ItemType.JungleLeaves; - mappings[109] = ItemType.JungleLog; - mappings[26] = ItemType.JunglePlanks; - mappings[661] = ItemType.JunglePressurePlate; - mappings[37] = ItemType.JungleSapling; - mappings[824] = ItemType.JungleSign; - mappings[221] = ItemType.JungleSlab; - mappings[349] = ItemType.JungleStairs; - mappings[683] = ItemType.JungleTrapdoor; - mappings[140] = ItemType.JungleWood; - mappings[211] = ItemType.Kelp; - mappings[1090] = ItemType.KnowledgeBook; - mappings[267] = ItemType.Ladder; - mappings[1132] = ItemType.Lantern; - mappings[159] = ItemType.LapisBlock; - mappings[741] = ItemType.LapisLazuli; - mappings[57] = ItemType.LapisOre; - mappings[1178] = ItemType.LargeAmethystBud; - mappings[432] = ItemType.LargeFern; - mappings[843] = ItemType.LavaBucket; - mappings[1054] = ItemType.Lead; - mappings[846] = ItemType.Leather; - mappings[794] = ItemType.LeatherBoots; - mappings[792] = ItemType.LeatherChestplate; - mappings[791] = ItemType.LeatherHelmet; - mappings[1053] = ItemType.LeatherHorseArmor; - mappings[793] = ItemType.LeatherLeggings; - mappings[631] = ItemType.Lectern; - mappings[633] = ItemType.Lever; - mappings[406] = ItemType.Light; - mappings[1062] = ItemType.LightBlueBanner; - mappings[900] = ItemType.LightBlueBed; - mappings[1163] = ItemType.LightBlueCandle; - mappings[411] = ItemType.LightBlueCarpet; - mappings[520] = ItemType.LightBlueConcrete; - mappings[536] = ItemType.LightBlueConcretePowder; - mappings[880] = ItemType.LightBlueDye; - mappings[504] = ItemType.LightBlueGlazedTerracotta; - mappings[488] = ItemType.LightBlueShulkerBox; - mappings[436] = ItemType.LightBlueStainedGlass; - mappings[452] = ItemType.LightBlueStainedGlassPane; - mappings[392] = ItemType.LightBlueTerracotta; - mappings[174] = ItemType.LightBlueWool; - mappings[1067] = ItemType.LightGrayBanner; - mappings[905] = ItemType.LightGrayBed; - mappings[1168] = ItemType.LightGrayCandle; - mappings[416] = ItemType.LightGrayCarpet; - mappings[525] = ItemType.LightGrayConcrete; - mappings[541] = ItemType.LightGrayConcretePowder; - mappings[885] = ItemType.LightGrayDye; - mappings[509] = ItemType.LightGrayGlazedTerracotta; - mappings[493] = ItemType.LightGrayShulkerBox; - mappings[441] = ItemType.LightGrayStainedGlass; - mappings[457] = ItemType.LightGrayStainedGlassPane; - mappings[397] = ItemType.LightGrayTerracotta; - mappings[179] = ItemType.LightGrayWool; - mappings[656] = ItemType.LightWeightedPressurePlate; - mappings[634] = ItemType.LightningRod; - mappings[428] = ItemType.Lilac; - mappings[198] = ItemType.LilyOfTheValley; - mappings[328] = ItemType.LilyPad; - mappings[1064] = ItemType.LimeBanner; - mappings[902] = ItemType.LimeBed; - mappings[1165] = ItemType.LimeCandle; - mappings[413] = ItemType.LimeCarpet; - mappings[522] = ItemType.LimeConcrete; - mappings[538] = ItemType.LimeConcretePowder; - mappings[882] = ItemType.LimeDye; - mappings[506] = ItemType.LimeGlazedTerracotta; - mappings[490] = ItemType.LimeShulkerBox; - mappings[438] = ItemType.LimeStainedGlass; - mappings[454] = ItemType.LimeStainedGlassPane; - mappings[394] = ItemType.LimeTerracotta; - mappings[176] = ItemType.LimeWool; - mappings[1085] = ItemType.LingeringPotion; - mappings[970] = ItemType.LlamaSpawnEgg; - mappings[1144] = ItemType.Lodestone; - mappings[1114] = ItemType.Loom; - mappings[1061] = ItemType.MagentaBanner; - mappings[899] = ItemType.MagentaBed; - mappings[1162] = ItemType.MagentaCandle; - mappings[410] = ItemType.MagentaCarpet; - mappings[519] = ItemType.MagentaConcrete; - mappings[535] = ItemType.MagentaConcretePowder; - mappings[879] = ItemType.MagentaDye; - mappings[503] = ItemType.MagentaGlazedTerracotta; - mappings[487] = ItemType.MagentaShulkerBox; - mappings[435] = ItemType.MagentaStainedGlass; - mappings[451] = ItemType.MagentaStainedGlassPane; - mappings[391] = ItemType.MagentaTerracotta; - mappings[173] = ItemType.MagentaWool; - mappings[478] = ItemType.MagmaBlock; - mappings[935] = ItemType.MagmaCream; - mappings[971] = ItemType.MagmaCubeSpawnEgg; - mappings[725] = ItemType.MangroveBoat; - mappings[650] = ItemType.MangroveButton; - mappings[726] = ItemType.MangroveChestBoat; - mappings[675] = ItemType.MangroveDoor; - mappings[281] = ItemType.MangroveFence; - mappings[696] = ItemType.MangroveFenceGate; - mappings[837] = ItemType.MangroveHangingSign; - mappings[152] = ItemType.MangroveLeaves; - mappings[112] = ItemType.MangroveLog; - mappings[29] = ItemType.MangrovePlanks; - mappings[664] = ItemType.MangrovePressurePlate; - mappings[40] = ItemType.MangrovePropagule; - mappings[113] = ItemType.MangroveRoots; - mappings[827] = ItemType.MangroveSign; - mappings[224] = ItemType.MangroveSlab; - mappings[352] = ItemType.MangroveStairs; - mappings[686] = ItemType.MangroveTrapdoor; - mappings[143] = ItemType.MangroveWood; - mappings[1027] = ItemType.Map; - mappings[1177] = ItemType.MediumAmethystBud; - mappings[321] = ItemType.Melon; - mappings[919] = ItemType.MelonSeeds; - mappings[916] = ItemType.MelonSlice; - mappings[847] = ItemType.MilkBucket; - mappings[705] = ItemType.Minecart; - mappings[1118] = ItemType.MojangBannerPattern; - mappings[972] = ItemType.MooshroomSpawnEgg; - mappings[213] = ItemType.MossBlock; - mappings[212] = ItemType.MossCarpet; - mappings[253] = ItemType.MossyCobblestone; - mappings[604] = ItemType.MossyCobblestoneSlab; - mappings[586] = ItemType.MossyCobblestoneStairs; - mappings[360] = ItemType.MossyCobblestoneWall; - mappings[602] = ItemType.MossyStoneBrickSlab; - mappings[584] = ItemType.MossyStoneBrickStairs; - mappings[364] = ItemType.MossyStoneBrickWall; - mappings[304] = ItemType.MossyStoneBricks; - mappings[19] = ItemType.Mud; - mappings[237] = ItemType.MudBrickSlab; - mappings[326] = ItemType.MudBrickStairs; - mappings[367] = ItemType.MudBrickWall; - mappings[308] = ItemType.MudBricks; - mappings[114] = ItemType.MuddyMangroveRoots; - mappings[973] = ItemType.MuleSpawnEgg; - mappings[317] = ItemType.MushroomStem; - mappings[784] = ItemType.MushroomStew; - mappings[1102] = ItemType.MusicDisc11; - mappings[1092] = ItemType.MusicDisc13; - mappings[1105] = ItemType.MusicDisc5; - mappings[1094] = ItemType.MusicDiscBlocks; - mappings[1093] = ItemType.MusicDiscCat; - mappings[1095] = ItemType.MusicDiscChirp; - mappings[1096] = ItemType.MusicDiscFar; - mappings[1097] = ItemType.MusicDiscMall; - mappings[1098] = ItemType.MusicDiscMellohi; - mappings[1104] = ItemType.MusicDiscOtherside; - mappings[1106] = ItemType.MusicDiscPigstep; - mappings[1099] = ItemType.MusicDiscStal; - mappings[1100] = ItemType.MusicDiscStrad; - mappings[1103] = ItemType.MusicDiscWait; - mappings[1101] = ItemType.MusicDiscWard; - mappings[1057] = ItemType.Mutton; - mappings[327] = ItemType.Mycelium; - mappings[1055] = ItemType.NameTag; - mappings[1110] = ItemType.NautilusShell; - mappings[1041] = ItemType.NetherBrick; - mappings[332] = ItemType.NetherBrickFence; - mappings[238] = ItemType.NetherBrickSlab; - mappings[333] = ItemType.NetherBrickStairs; - mappings[368] = ItemType.NetherBrickWall; - mappings[329] = ItemType.NetherBricks; - mappings[61] = ItemType.NetherGoldOre; - mappings[62] = ItemType.NetherQuartzOre; - mappings[207] = ItemType.NetherSprouts; - mappings[1036] = ItemType.NetherStar; - mappings[929] = ItemType.NetherWart; - mappings[479] = ItemType.NetherWartBlock; - mappings[780] = ItemType.NetheriteAxe; - mappings[74] = ItemType.NetheriteBlock; - mappings[814] = ItemType.NetheriteBoots; - mappings[812] = ItemType.NetheriteChestplate; - mappings[811] = ItemType.NetheriteHelmet; - mappings[781] = ItemType.NetheriteHoe; - mappings[750] = ItemType.NetheriteIngot; - mappings[813] = ItemType.NetheriteLeggings; - mappings[779] = ItemType.NetheritePickaxe; - mappings[751] = ItemType.NetheriteScrap; - mappings[778] = ItemType.NetheriteShovel; - mappings[777] = ItemType.NetheriteSword; - mappings[288] = ItemType.Netherrack; - mappings[641] = ItemType.NoteBlock; - mappings[713] = ItemType.OakBoat; - mappings[644] = ItemType.OakButton; - mappings[714] = ItemType.OakChestBoat; - mappings[669] = ItemType.OakDoor; - mappings[275] = ItemType.OakFence; - mappings[690] = ItemType.OakFenceGate; - mappings[831] = ItemType.OakHangingSign; - mappings[146] = ItemType.OakLeaves; - mappings[106] = ItemType.OakLog; - mappings[23] = ItemType.OakPlanks; - mappings[658] = ItemType.OakPressurePlate; - mappings[34] = ItemType.OakSapling; - mappings[821] = ItemType.OakSign; - mappings[218] = ItemType.OakSlab; - mappings[346] = ItemType.OakStairs; - mappings[680] = ItemType.OakTrapdoor; - mappings[137] = ItemType.OakWood; - mappings[627] = ItemType.Observer; - mappings[254] = ItemType.Obsidian; - mappings[974] = ItemType.OcelotSpawnEgg; - mappings[1181] = ItemType.OchreFroglight; - mappings[1060] = ItemType.OrangeBanner; - mappings[898] = ItemType.OrangeBed; - mappings[1161] = ItemType.OrangeCandle; - mappings[409] = ItemType.OrangeCarpet; - mappings[518] = ItemType.OrangeConcrete; - mappings[534] = ItemType.OrangeConcretePowder; - mappings[878] = ItemType.OrangeDye; - mappings[502] = ItemType.OrangeGlazedTerracotta; - mappings[486] = ItemType.OrangeShulkerBox; - mappings[434] = ItemType.OrangeStainedGlass; - mappings[450] = ItemType.OrangeStainedGlassPane; - mappings[390] = ItemType.OrangeTerracotta; - mappings[193] = ItemType.OrangeTulip; - mappings[172] = ItemType.OrangeWool; - mappings[196] = ItemType.OxeyeDaisy; - mappings[77] = ItemType.OxidizedCopper; - mappings[81] = ItemType.OxidizedCutCopper; - mappings[89] = ItemType.OxidizedCutCopperSlab; - mappings[85] = ItemType.OxidizedCutCopperStairs; - mappings[425] = ItemType.PackedIce; - mappings[307] = ItemType.PackedMud; - mappings[818] = ItemType.Painting; - mappings[975] = ItemType.PandaSpawnEgg; - mappings[857] = ItemType.Paper; - mappings[976] = ItemType.ParrotSpawnEgg; - mappings[1183] = ItemType.PearlescentFroglight; - mappings[430] = ItemType.Peony; - mappings[233] = ItemType.PetrifiedOakSlab; - mappings[1109] = ItemType.PhantomMembrane; - mappings[977] = ItemType.PhantomSpawnEgg; - mappings[978] = ItemType.PigSpawnEgg; - mappings[1120] = ItemType.PiglinBannerPattern; - mappings[980] = ItemType.PiglinBruteSpawnEgg; - mappings[1035] = ItemType.PiglinHead; - mappings[979] = ItemType.PiglinSpawnEgg; - mappings[981] = ItemType.PillagerSpawnEgg; - mappings[1065] = ItemType.PinkBanner; - mappings[903] = ItemType.PinkBed; - mappings[1166] = ItemType.PinkCandle; - mappings[414] = ItemType.PinkCarpet; - mappings[523] = ItemType.PinkConcrete; - mappings[539] = ItemType.PinkConcretePowder; - mappings[883] = ItemType.PinkDye; - mappings[507] = ItemType.PinkGlazedTerracotta; - mappings[491] = ItemType.PinkShulkerBox; - mappings[439] = ItemType.PinkStainedGlass; - mappings[455] = ItemType.PinkStainedGlassPane; - mappings[395] = ItemType.PinkTerracotta; - mappings[195] = ItemType.PinkTulip; - mappings[177] = ItemType.PinkWool; - mappings[623] = ItemType.Piston; - mappings[1031] = ItemType.PlayerHead; - mappings[17] = ItemType.Podzol; - mappings[1180] = ItemType.PointedDripstone; - mappings[1026] = ItemType.PoisonousPotato; - mappings[982] = ItemType.PolarBearSpawnEgg; - mappings[7] = ItemType.PolishedAndesite; - mappings[611] = ItemType.PolishedAndesiteSlab; - mappings[594] = ItemType.PolishedAndesiteStairs; - mappings[292] = ItemType.PolishedBasalt; - mappings[1150] = ItemType.PolishedBlackstone; - mappings[1155] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1156] = ItemType.PolishedBlackstoneBrickStairs; - mappings[376] = ItemType.PolishedBlackstoneBrickWall; - mappings[1154] = ItemType.PolishedBlackstoneBricks; - mappings[643] = ItemType.PolishedBlackstoneButton; - mappings[655] = ItemType.PolishedBlackstonePressurePlate; - mappings[1151] = ItemType.PolishedBlackstoneSlab; - mappings[1152] = ItemType.PolishedBlackstoneStairs; - mappings[375] = ItemType.PolishedBlackstoneWall; - mappings[10] = ItemType.PolishedDeepslate; - mappings[614] = ItemType.PolishedDeepslateSlab; - mappings[597] = ItemType.PolishedDeepslateStairs; - mappings[378] = ItemType.PolishedDeepslateWall; - mappings[5] = ItemType.PolishedDiorite; - mappings[603] = ItemType.PolishedDioriteSlab; - mappings[585] = ItemType.PolishedDioriteStairs; - mappings[3] = ItemType.PolishedGranite; - mappings[600] = ItemType.PolishedGraniteSlab; - mappings[582] = ItemType.PolishedGraniteStairs; - mappings[1077] = ItemType.PoppedChorusFruit; - mappings[188] = ItemType.Poppy; - mappings[816] = ItemType.Porkchop; - mappings[1024] = ItemType.Potato; - mappings[930] = ItemType.Potion; - mappings[844] = ItemType.PowderSnowBucket; - mappings[700] = ItemType.PoweredRail; - mappings[465] = ItemType.Prismarine; - mappings[244] = ItemType.PrismarineBrickSlab; - mappings[469] = ItemType.PrismarineBrickStairs; - mappings[466] = ItemType.PrismarineBricks; - mappings[1043] = ItemType.PrismarineCrystals; - mappings[1042] = ItemType.PrismarineShard; - mappings[243] = ItemType.PrismarineSlab; - mappings[468] = ItemType.PrismarineStairs; - mappings[362] = ItemType.PrismarineWall; - mappings[871] = ItemType.Pufferfish; - mappings[848] = ItemType.PufferfishBucket; - mappings[983] = ItemType.PufferfishSpawnEgg; - mappings[285] = ItemType.Pumpkin; - mappings[1037] = ItemType.PumpkinPie; - mappings[918] = ItemType.PumpkinSeeds; - mappings[1069] = ItemType.PurpleBanner; - mappings[907] = ItemType.PurpleBed; - mappings[1170] = ItemType.PurpleCandle; - mappings[418] = ItemType.PurpleCarpet; - mappings[527] = ItemType.PurpleConcrete; - mappings[543] = ItemType.PurpleConcretePowder; - mappings[887] = ItemType.PurpleDye; - mappings[511] = ItemType.PurpleGlazedTerracotta; - mappings[495] = ItemType.PurpleShulkerBox; - mappings[443] = ItemType.PurpleStainedGlass; - mappings[459] = ItemType.PurpleStainedGlassPane; - mappings[399] = ItemType.PurpleTerracotta; - mappings[181] = ItemType.PurpleWool; - mappings[259] = ItemType.PurpurBlock; - mappings[260] = ItemType.PurpurPillar; - mappings[242] = ItemType.PurpurSlab; - mappings[261] = ItemType.PurpurStairs; - mappings[742] = ItemType.Quartz; - mappings[385] = ItemType.QuartzBlock; - mappings[386] = ItemType.QuartzBricks; - mappings[387] = ItemType.QuartzPillar; - mappings[239] = ItemType.QuartzSlab; - mappings[388] = ItemType.QuartzStairs; - mappings[1044] = ItemType.Rabbit; - mappings[1047] = ItemType.RabbitFoot; - mappings[1048] = ItemType.RabbitHide; - mappings[984] = ItemType.RabbitSpawnEgg; - mappings[1046] = ItemType.RabbitStew; - mappings[702] = ItemType.Rail; - mappings[985] = ItemType.RavagerSpawnEgg; - mappings[746] = ItemType.RawCopper; - mappings[66] = ItemType.RawCopperBlock; - mappings[748] = ItemType.RawGold; - mappings[67] = ItemType.RawGoldBlock; - mappings[744] = ItemType.RawIron; - mappings[65] = ItemType.RawIronBlock; - mappings[862] = ItemType.RecoveryCompass; - mappings[1073] = ItemType.RedBanner; - mappings[911] = ItemType.RedBed; - mappings[1174] = ItemType.RedCandle; - mappings[422] = ItemType.RedCarpet; - mappings[531] = ItemType.RedConcrete; - mappings[547] = ItemType.RedConcretePowder; - mappings[891] = ItemType.RedDye; - mappings[515] = ItemType.RedGlazedTerracotta; - mappings[202] = ItemType.RedMushroom; - mappings[316] = ItemType.RedMushroomBlock; - mappings[610] = ItemType.RedNetherBrickSlab; - mappings[593] = ItemType.RedNetherBrickStairs; - mappings[370] = ItemType.RedNetherBrickWall; - mappings[481] = ItemType.RedNetherBricks; - mappings[43] = ItemType.RedSand; - mappings[472] = ItemType.RedSandstone; - mappings[240] = ItemType.RedSandstoneSlab; - mappings[475] = ItemType.RedSandstoneStairs; - mappings[363] = ItemType.RedSandstoneWall; - mappings[499] = ItemType.RedShulkerBox; - mappings[447] = ItemType.RedStainedGlass; - mappings[463] = ItemType.RedStainedGlassPane; - mappings[403] = ItemType.RedTerracotta; - mappings[192] = ItemType.RedTulip; - mappings[185] = ItemType.RedWool; - mappings[618] = ItemType.Redstone; - mappings[620] = ItemType.RedstoneBlock; - mappings[640] = ItemType.RedstoneLamp; - mappings[53] = ItemType.RedstoneOre; - mappings[619] = ItemType.RedstoneTorch; - mappings[314] = ItemType.ReinforcedDeepslate; - mappings[621] = ItemType.Repeater; - mappings[476] = ItemType.RepeatingCommandBlock; - mappings[1158] = ItemType.RespawnAnchor; - mappings[18] = ItemType.RootedDirt; - mappings[429] = ItemType.RoseBush; - mappings[924] = ItemType.RottenFlesh; - mappings[704] = ItemType.Saddle; - mappings[869] = ItemType.Salmon; - mappings[849] = ItemType.SalmonBucket; - mappings[986] = ItemType.SalmonSpawnEgg; - mappings[42] = ItemType.Sand; - mappings[160] = ItemType.Sandstone; - mappings[231] = ItemType.SandstoneSlab; - mappings[343] = ItemType.SandstoneStairs; - mappings[371] = ItemType.SandstoneWall; - mappings[617] = ItemType.Scaffolding; - mappings[334] = ItemType.Sculk; - mappings[336] = ItemType.SculkCatalyst; - mappings[636] = ItemType.SculkSensor; - mappings[337] = ItemType.SculkShrieker; - mappings[335] = ItemType.SculkVein; - mappings[732] = ItemType.TurtleScute; - mappings[471] = ItemType.SeaLantern; - mappings[170] = ItemType.SeaPickle; - mappings[169] = ItemType.Seagrass; - mappings[915] = ItemType.Shears; - mappings[987] = ItemType.SheepSpawnEgg; - mappings[1086] = ItemType.Shield; - mappings[1138] = ItemType.Shroomlight; - mappings[484] = ItemType.ShulkerBox; - mappings[1088] = ItemType.ShulkerShell; - mappings[988] = ItemType.ShulkerSpawnEgg; - mappings[989] = ItemType.SilverfishSpawnEgg; - mappings[991] = ItemType.SkeletonHorseSpawnEgg; - mappings[1029] = ItemType.SkeletonSkull; - mappings[990] = ItemType.SkeletonSpawnEgg; - mappings[1117] = ItemType.SkullBannerPattern; - mappings[859] = ItemType.SlimeBall; - mappings[625] = ItemType.SlimeBlock; - mappings[992] = ItemType.SlimeSpawnEgg; - mappings[1176] = ItemType.SmallAmethystBud; - mappings[216] = ItemType.SmallDripleaf; - mappings[1129] = ItemType.SmithingTable; - mappings[1124] = ItemType.Smoker; - mappings[293] = ItemType.SmoothBasalt; - mappings[246] = ItemType.SmoothQuartz; - mappings[607] = ItemType.SmoothQuartzSlab; - mappings[590] = ItemType.SmoothQuartzStairs; - mappings[247] = ItemType.SmoothRedSandstone; - mappings[601] = ItemType.SmoothRedSandstoneSlab; - mappings[583] = ItemType.SmoothRedSandstoneStairs; - mappings[248] = ItemType.SmoothSandstone; - mappings[606] = ItemType.SmoothSandstoneSlab; - mappings[589] = ItemType.SmoothSandstoneStairs; - mappings[249] = ItemType.SmoothStone; - mappings[230] = ItemType.SmoothStoneSlab; - mappings[269] = ItemType.Snow; - mappings[271] = ItemType.SnowBlock; - mappings[993] = ItemType.SnowGolemSpawnEgg; - mappings[845] = ItemType.Snowball; - mappings[1137] = ItemType.SoulCampfire; - mappings[1133] = ItemType.SoulLantern; - mappings[289] = ItemType.SoulSand; - mappings[290] = ItemType.SoulSoil; - mappings[294] = ItemType.SoulTorch; - mappings[262] = ItemType.Spawner; - mappings[1083] = ItemType.SpectralArrow; - mappings[932] = ItemType.SpiderEye; - mappings[994] = ItemType.SpiderSpawnEgg; - mappings[1082] = ItemType.SplashPotion; - mappings[155] = ItemType.Sponge; - mappings[200] = ItemType.SporeBlossom; - mappings[715] = ItemType.SpruceBoat; - mappings[645] = ItemType.SpruceButton; - mappings[716] = ItemType.SpruceChestBoat; - mappings[670] = ItemType.SpruceDoor; - mappings[276] = ItemType.SpruceFence; - mappings[691] = ItemType.SpruceFenceGate; - mappings[832] = ItemType.SpruceHangingSign; - mappings[147] = ItemType.SpruceLeaves; - mappings[107] = ItemType.SpruceLog; - mappings[24] = ItemType.SprucePlanks; - mappings[659] = ItemType.SprucePressurePlate; - mappings[35] = ItemType.SpruceSapling; - mappings[822] = ItemType.SpruceSign; - mappings[219] = ItemType.SpruceSlab; - mappings[347] = ItemType.SpruceStairs; - mappings[681] = ItemType.SpruceTrapdoor; - mappings[138] = ItemType.SpruceWood; - mappings[866] = ItemType.Spyglass; - mappings[995] = ItemType.SquidSpawnEgg; - mappings[782] = ItemType.Stick; - mappings[624] = ItemType.StickyPiston; - mappings[1] = ItemType.Stone; - mappings[760] = ItemType.StoneAxe; - mappings[236] = ItemType.StoneBrickSlab; - mappings[325] = ItemType.StoneBrickStairs; - mappings[366] = ItemType.StoneBrickWall; - mappings[303] = ItemType.StoneBricks; - mappings[642] = ItemType.StoneButton; - mappings[761] = ItemType.StoneHoe; - mappings[759] = ItemType.StonePickaxe; - mappings[654] = ItemType.StonePressurePlate; - mappings[758] = ItemType.StoneShovel; - mappings[229] = ItemType.StoneSlab; - mappings[588] = ItemType.StoneStairs; - mappings[757] = ItemType.StoneSword; - mappings[1130] = ItemType.Stonecutter; - mappings[996] = ItemType.StraySpawnEgg; - mappings[997] = ItemType.StriderSpawnEgg; - mappings[785] = ItemType.String; - mappings[122] = ItemType.StrippedAcaciaLog; - mappings[131] = ItemType.StrippedAcaciaWood; - mappings[136] = ItemType.StrippedBambooBlock; - mappings[120] = ItemType.StrippedBirchLog; - mappings[129] = ItemType.StrippedBirchWood; - mappings[134] = ItemType.StrippedCrimsonHyphae; - mappings[125] = ItemType.StrippedCrimsonStem; - mappings[123] = ItemType.StrippedDarkOakLog; - mappings[132] = ItemType.StrippedDarkOakWood; - mappings[121] = ItemType.StrippedJungleLog; - mappings[130] = ItemType.StrippedJungleWood; - mappings[124] = ItemType.StrippedMangroveLog; - mappings[133] = ItemType.StrippedMangroveWood; - mappings[118] = ItemType.StrippedOakLog; - mappings[127] = ItemType.StrippedOakWood; - mappings[119] = ItemType.StrippedSpruceLog; - mappings[128] = ItemType.StrippedSpruceWood; - mappings[135] = ItemType.StrippedWarpedHyphae; - mappings[126] = ItemType.StrippedWarpedStem; - mappings[729] = ItemType.StructureBlock; - mappings[483] = ItemType.StructureVoid; - mappings[895] = ItemType.Sugar; - mappings[210] = ItemType.SugarCane; - mappings[427] = ItemType.Sunflower; - mappings[1113] = ItemType.SuspiciousStew; - mappings[1134] = ItemType.SweetBerries; - mappings[853] = ItemType.TadpoleBucket; - mappings[998] = ItemType.TadpoleSpawnEgg; - mappings[431] = ItemType.TallGrass; - mappings[632] = ItemType.Target; - mappings[424] = ItemType.Terracotta; - mappings[158] = ItemType.TintedGlass; - mappings[1084] = ItemType.TippedArrow; - mappings[639] = ItemType.Tnt; - mappings[708] = ItemType.TntMinecart; - mappings[255] = ItemType.Torch; - mappings[1087] = ItemType.TotemOfUndying; - mappings[999] = ItemType.TraderLlamaSpawnEgg; - mappings[638] = ItemType.TrappedChest; - mappings[1108] = ItemType.Trident; - mappings[637] = ItemType.TripwireHook; - mappings[870] = ItemType.TropicalFish; - mappings[851] = ItemType.TropicalFishBucket; - mappings[1000] = ItemType.TropicalFishSpawnEgg; - mappings[560] = ItemType.TubeCoral; - mappings[555] = ItemType.TubeCoralBlock; - mappings[570] = ItemType.TubeCoralFan; - mappings[12] = ItemType.Tuff; - mappings[549] = ItemType.TurtleEgg; - mappings[731] = ItemType.TurtleHelmet; - mappings[1001] = ItemType.TurtleSpawnEgg; - mappings[209] = ItemType.TwistingVines; - mappings[1182] = ItemType.VerdantFroglight; - mappings[1002] = ItemType.VexSpawnEgg; - mappings[1003] = ItemType.VillagerSpawnEgg; - mappings[1004] = ItemType.VindicatorSpawnEgg; - mappings[322] = ItemType.Vine; - mappings[1005] = ItemType.WanderingTraderSpawnEgg; - mappings[1006] = ItemType.WardenSpawnEgg; - mappings[653] = ItemType.WarpedButton; - mappings[678] = ItemType.WarpedDoor; - mappings[284] = ItemType.WarpedFence; - mappings[699] = ItemType.WarpedFenceGate; - mappings[204] = ItemType.WarpedFungus; - mappings[711] = ItemType.WarpedFungusOnAStick; - mappings[840] = ItemType.WarpedHangingSign; - mappings[145] = ItemType.WarpedHyphae; - mappings[21] = ItemType.WarpedNylium; - mappings[32] = ItemType.WarpedPlanks; - mappings[667] = ItemType.WarpedPressurePlate; - mappings[206] = ItemType.WarpedRoots; - mappings[830] = ItemType.WarpedSign; - mappings[228] = ItemType.WarpedSlab; - mappings[356] = ItemType.WarpedStairs; - mappings[116] = ItemType.WarpedStem; - mappings[689] = ItemType.WarpedTrapdoor; - mappings[480] = ItemType.WarpedWartBlock; - mappings[842] = ItemType.WaterBucket; - mappings[90] = ItemType.WaxedCopperBlock; - mappings[94] = ItemType.WaxedCutCopper; - mappings[102] = ItemType.WaxedCutCopperSlab; - mappings[98] = ItemType.WaxedCutCopperStairs; - mappings[91] = ItemType.WaxedExposedCopper; - mappings[95] = ItemType.WaxedExposedCutCopper; - mappings[103] = ItemType.WaxedExposedCutCopperSlab; - mappings[99] = ItemType.WaxedExposedCutCopperStairs; - mappings[93] = ItemType.WaxedOxidizedCopper; - mappings[97] = ItemType.WaxedOxidizedCutCopper; - mappings[105] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[101] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[92] = ItemType.WaxedWeatheredCopper; - mappings[96] = ItemType.WaxedWeatheredCutCopper; - mappings[104] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[100] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[76] = ItemType.WeatheredCopper; - mappings[80] = ItemType.WeatheredCutCopper; - mappings[88] = ItemType.WeatheredCutCopperSlab; - mappings[84] = ItemType.WeatheredCutCopperStairs; - mappings[208] = ItemType.WeepingVines; - mappings[156] = ItemType.WetSponge; - mappings[789] = ItemType.Wheat; - mappings[788] = ItemType.WheatSeeds; - mappings[1059] = ItemType.WhiteBanner; - mappings[897] = ItemType.WhiteBed; - mappings[1160] = ItemType.WhiteCandle; - mappings[408] = ItemType.WhiteCarpet; - mappings[517] = ItemType.WhiteConcrete; - mappings[533] = ItemType.WhiteConcretePowder; - mappings[877] = ItemType.WhiteDye; - mappings[501] = ItemType.WhiteGlazedTerracotta; - mappings[485] = ItemType.WhiteShulkerBox; - mappings[433] = ItemType.WhiteStainedGlass; - mappings[449] = ItemType.WhiteStainedGlassPane; - mappings[389] = ItemType.WhiteTerracotta; - mappings[194] = ItemType.WhiteTulip; - mappings[171] = ItemType.WhiteWool; - mappings[1007] = ItemType.WitchSpawnEgg; - mappings[199] = ItemType.WitherRose; - mappings[1030] = ItemType.WitherSkeletonSkull; - mappings[1009] = ItemType.WitherSkeletonSpawnEgg; - mappings[1008] = ItemType.WitherSpawnEgg; - mappings[1010] = ItemType.WolfSpawnEgg; - mappings[755] = ItemType.WoodenAxe; - mappings[756] = ItemType.WoodenHoe; - mappings[754] = ItemType.WoodenPickaxe; - mappings[753] = ItemType.WoodenShovel; - mappings[752] = ItemType.WoodenSword; - mappings[1018] = ItemType.WritableBook; - mappings[1019] = ItemType.WrittenBook; - mappings[1063] = ItemType.YellowBanner; - mappings[901] = ItemType.YellowBed; - mappings[1164] = ItemType.YellowCandle; - mappings[412] = ItemType.YellowCarpet; - mappings[521] = ItemType.YellowConcrete; - mappings[537] = ItemType.YellowConcretePowder; - mappings[881] = ItemType.YellowDye; - mappings[505] = ItemType.YellowGlazedTerracotta; - mappings[489] = ItemType.YellowShulkerBox; - mappings[437] = ItemType.YellowStainedGlass; - mappings[453] = ItemType.YellowStainedGlassPane; - mappings[393] = ItemType.YellowTerracotta; - mappings[175] = ItemType.YellowWool; - mappings[1011] = ItemType.ZoglinSpawnEgg; - mappings[1032] = ItemType.ZombieHead; - mappings[1013] = ItemType.ZombieHorseSpawnEgg; - mappings[1012] = ItemType.ZombieSpawnEgg; - mappings[1014] = ItemType.ZombieVillagerSpawnEgg; - mappings[1015] = ItemType.ZombifiedPiglinSpawnEgg; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1194.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette1194.cs deleted file mode 100644 index ef04e7dc62..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1194.cs +++ /dev/null @@ -1,1246 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette1194 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette1194() - { - mappings[740] = ItemType.AcaciaBoat; - mappings[662] = ItemType.AcaciaButton; - mappings[741] = ItemType.AcaciaChestBoat; - mappings[689] = ItemType.AcaciaDoor; - mappings[291] = ItemType.AcaciaFence; - mappings[712] = ItemType.AcaciaFenceGate; - mappings[857] = ItemType.AcaciaHangingSign; - mappings[157] = ItemType.AcaciaLeaves; - mappings[113] = ItemType.AcaciaLog; - mappings[27] = ItemType.AcaciaPlanks; - mappings[677] = ItemType.AcaciaPressurePlate; - mappings[39] = ItemType.AcaciaSapling; - mappings[846] = ItemType.AcaciaSign; - mappings[232] = ItemType.AcaciaSlab; - mappings[363] = ItemType.AcaciaStairs; - mappings[701] = ItemType.AcaciaTrapdoor; - mappings[147] = ItemType.AcaciaWood; - mappings[722] = ItemType.ActivatorRail; - mappings[0] = ItemType.Air; - mappings[963] = ItemType.AllaySpawnEgg; - mappings[198] = ItemType.Allium; - mappings[71] = ItemType.AmethystBlock; - mappings[1204] = ItemType.AmethystCluster; - mappings[764] = ItemType.AmethystShard; - mappings[66] = ItemType.AncientDebris; - mappings[6] = ItemType.Andesite; - mappings[623] = ItemType.AndesiteSlab; - mappings[606] = ItemType.AndesiteStairs; - mappings[383] = ItemType.AndesiteWall; - mappings[395] = ItemType.Anvil; - mappings[755] = ItemType.Apple; - mappings[1073] = ItemType.ArmorStand; - mappings[757] = ItemType.Arrow; - mappings[875] = ItemType.AxolotlBucket; - mappings[964] = ItemType.AxolotlSpawnEgg; - mappings[174] = ItemType.Azalea; - mappings[161] = ItemType.AzaleaLeaves; - mappings[199] = ItemType.AzureBluet; - mappings[1049] = ItemType.BakedPotato; - mappings[227] = ItemType.Bamboo; - mappings[121] = ItemType.BambooBlock; - mappings[666] = ItemType.BambooButton; - mappings[749] = ItemType.BambooChestRaft; - mappings[693] = ItemType.BambooDoor; - mappings[295] = ItemType.BambooFence; - mappings[716] = ItemType.BambooFenceGate; - mappings[861] = ItemType.BambooHangingSign; - mappings[34] = ItemType.BambooMosaic; - mappings[237] = ItemType.BambooMosaicSlab; - mappings[368] = ItemType.BambooMosaicStairs; - mappings[31] = ItemType.BambooPlanks; - mappings[681] = ItemType.BambooPressurePlate; - mappings[748] = ItemType.BambooRaft; - mappings[850] = ItemType.BambooSign; - mappings[236] = ItemType.BambooSlab; - mappings[367] = ItemType.BambooStairs; - mappings[705] = ItemType.BambooTrapdoor; - mappings[1148] = ItemType.Barrel; - mappings[419] = ItemType.Barrier; - mappings[304] = ItemType.Basalt; - mappings[965] = ItemType.BatSpawnEgg; - mappings[372] = ItemType.Beacon; - mappings[43] = ItemType.Bedrock; - mappings[1165] = ItemType.BeeNest; - mappings[966] = ItemType.BeeSpawnEgg; - mappings[943] = ItemType.Beef; - mappings[1166] = ItemType.Beehive; - mappings[1103] = ItemType.Beetroot; - mappings[1104] = ItemType.BeetrootSeeds; - mappings[1105] = ItemType.BeetrootSoup; - mappings[1156] = ItemType.Bell; - mappings[225] = ItemType.BigDripleaf; - mappings[736] = ItemType.BirchBoat; - mappings[660] = ItemType.BirchButton; - mappings[737] = ItemType.BirchChestBoat; - mappings[687] = ItemType.BirchDoor; - mappings[289] = ItemType.BirchFence; - mappings[710] = ItemType.BirchFenceGate; - mappings[855] = ItemType.BirchHangingSign; - mappings[155] = ItemType.BirchLeaves; - mappings[111] = ItemType.BirchLog; - mappings[25] = ItemType.BirchPlanks; - mappings[675] = ItemType.BirchPressurePlate; - mappings[37] = ItemType.BirchSapling; - mappings[844] = ItemType.BirchSign; - mappings[230] = ItemType.BirchSlab; - mappings[361] = ItemType.BirchStairs; - mappings[699] = ItemType.BirchTrapdoor; - mappings[145] = ItemType.BirchWood; - mappings[1098] = ItemType.BlackBanner; - mappings[935] = ItemType.BlackBed; - mappings[1200] = ItemType.BlackCandle; - mappings[437] = ItemType.BlackCarpet; - mappings[546] = ItemType.BlackConcrete; - mappings[562] = ItemType.BlackConcretePowder; - mappings[915] = ItemType.BlackDye; - mappings[530] = ItemType.BlackGlazedTerracotta; - mappings[514] = ItemType.BlackShulkerBox; - mappings[462] = ItemType.BlackStainedGlass; - mappings[478] = ItemType.BlackStainedGlassPane; - mappings[418] = ItemType.BlackTerracotta; - mappings[194] = ItemType.BlackWool; - mappings[1171] = ItemType.Blackstone; - mappings[1172] = ItemType.BlackstoneSlab; - mappings[1173] = ItemType.BlackstoneStairs; - mappings[388] = ItemType.BlackstoneWall; - mappings[1150] = ItemType.BlastFurnace; - mappings[957] = ItemType.BlazePowder; - mappings[949] = ItemType.BlazeRod; - mappings[967] = ItemType.BlazeSpawnEgg; - mappings[1094] = ItemType.BlueBanner; - mappings[931] = ItemType.BlueBed; - mappings[1196] = ItemType.BlueCandle; - mappings[433] = ItemType.BlueCarpet; - mappings[542] = ItemType.BlueConcrete; - mappings[558] = ItemType.BlueConcretePowder; - mappings[911] = ItemType.BlueDye; - mappings[526] = ItemType.BlueGlazedTerracotta; - mappings[594] = ItemType.BlueIce; - mappings[197] = ItemType.BlueOrchid; - mappings[510] = ItemType.BlueShulkerBox; - mappings[458] = ItemType.BlueStainedGlass; - mappings[474] = ItemType.BlueStainedGlassPane; - mappings[414] = ItemType.BlueTerracotta; - mappings[190] = ItemType.BlueWool; - mappings[917] = ItemType.Bone; - mappings[496] = ItemType.BoneBlock; - mappings[916] = ItemType.BoneMeal; - mappings[881] = ItemType.Book; - mappings[262] = ItemType.Bookshelf; - mappings[756] = ItemType.Bow; - mappings[804] = ItemType.Bowl; - mappings[575] = ItemType.BrainCoral; - mappings[570] = ItemType.BrainCoralBlock; - mappings[585] = ItemType.BrainCoralFan; - mappings[811] = ItemType.Bread; - mappings[959] = ItemType.BrewingStand; - mappings[877] = ItemType.Brick; - mappings[246] = ItemType.BrickSlab; - mappings[337] = ItemType.BrickStairs; - mappings[375] = ItemType.BrickWall; - mappings[261] = ItemType.Bricks; - mappings[1095] = ItemType.BrownBanner; - mappings[932] = ItemType.BrownBed; - mappings[1197] = ItemType.BrownCandle; - mappings[434] = ItemType.BrownCarpet; - mappings[543] = ItemType.BrownConcrete; - mappings[559] = ItemType.BrownConcretePowder; - mappings[912] = ItemType.BrownDye; - mappings[527] = ItemType.BrownGlazedTerracotta; - mappings[210] = ItemType.BrownMushroom; - mappings[328] = ItemType.BrownMushroomBlock; - mappings[511] = ItemType.BrownShulkerBox; - mappings[459] = ItemType.BrownStainedGlass; - mappings[475] = ItemType.BrownStainedGlassPane; - mappings[415] = ItemType.BrownTerracotta; - mappings[191] = ItemType.BrownWool; - mappings[1211] = ItemType.Brush; - mappings[576] = ItemType.BubbleCoral; - mappings[571] = ItemType.BubbleCoralBlock; - mappings[586] = ItemType.BubbleCoralFan; - mappings[864] = ItemType.Bucket; - mappings[72] = ItemType.BuddingAmethyst; - mappings[886] = ItemType.Bundle; - mappings[284] = ItemType.Cactus; - mappings[919] = ItemType.Cake; - mappings[11] = ItemType.Calcite; - mappings[969] = ItemType.CamelSpawnEgg; - mappings[1161] = ItemType.Campfire; - mappings[1184] = ItemType.Candle; - mappings[1047] = ItemType.Carrot; - mappings[729] = ItemType.CarrotOnAStick; - mappings[1151] = ItemType.CartographyTable; - mappings[299] = ItemType.CarvedPumpkin; - mappings[968] = ItemType.CatSpawnEgg; - mappings[960] = ItemType.Cauldron; - mappings[970] = ItemType.CaveSpiderSpawnEgg; - mappings[332] = ItemType.Chain; - mappings[491] = ItemType.ChainCommandBlock; - mappings[819] = ItemType.ChainmailBoots; - mappings[817] = ItemType.ChainmailChestplate; - mappings[816] = ItemType.ChainmailHelmet; - mappings[818] = ItemType.ChainmailLeggings; - mappings[759] = ItemType.Charcoal; - mappings[742] = ItemType.CherryBoat; - mappings[663] = ItemType.CherryButton; - mappings[743] = ItemType.CherryChestBoat; - mappings[690] = ItemType.CherryDoor; - mappings[292] = ItemType.CherryFence; - mappings[713] = ItemType.CherryFenceGate; - mappings[858] = ItemType.CherryHangingSign; - mappings[158] = ItemType.CherryLeaves; - mappings[114] = ItemType.CherryLog; - mappings[28] = ItemType.CherryPlanks; - mappings[678] = ItemType.CherryPressurePlate; - mappings[40] = ItemType.CherrySapling; - mappings[847] = ItemType.CherrySign; - mappings[233] = ItemType.CherrySlab; - mappings[364] = ItemType.CherryStairs; - mappings[702] = ItemType.CherryTrapdoor; - mappings[148] = ItemType.CherryWood; - mappings[275] = ItemType.Chest; - mappings[725] = ItemType.ChestMinecart; - mappings[945] = ItemType.Chicken; - mappings[971] = ItemType.ChickenSpawnEgg; - mappings[396] = ItemType.ChippedAnvil; - mappings[263] = ItemType.ChiseledBookshelf; - mappings[326] = ItemType.ChiseledDeepslate; - mappings[344] = ItemType.ChiseledNetherBricks; - mappings[1178] = ItemType.ChiseledPolishedBlackstone; - mappings[398] = ItemType.ChiseledQuartzBlock; - mappings[487] = ItemType.ChiseledRedSandstone; - mappings[169] = ItemType.ChiseledSandstone; - mappings[319] = ItemType.ChiseledStoneBricks; - mappings[270] = ItemType.ChorusFlower; - mappings[1100] = ItemType.ChorusFruit; - mappings[269] = ItemType.ChorusPlant; - mappings[285] = ItemType.Clay; - mappings[878] = ItemType.ClayBall; - mappings[888] = ItemType.Clock; - mappings[758] = ItemType.Coal; - mappings[67] = ItemType.CoalBlock; - mappings[48] = ItemType.CoalOre; - mappings[16] = ItemType.CoarseDirt; - mappings[1215] = ItemType.CoastArmorTrimSmithingTemplate; - mappings[9] = ItemType.CobbledDeepslate; - mappings[627] = ItemType.CobbledDeepslateSlab; - mappings[610] = ItemType.CobbledDeepslateStairs; - mappings[391] = ItemType.CobbledDeepslateWall; - mappings[22] = ItemType.Cobblestone; - mappings[245] = ItemType.CobblestoneSlab; - mappings[280] = ItemType.CobblestoneStairs; - mappings[373] = ItemType.CobblestoneWall; - mappings[171] = ItemType.Cobweb; - mappings[899] = ItemType.CocoaBeans; - mappings[891] = ItemType.Cod; - mappings[873] = ItemType.CodBucket; - mappings[972] = ItemType.CodSpawnEgg; - mappings[371] = ItemType.CommandBlock; - mappings[1080] = ItemType.CommandBlockMinecart; - mappings[636] = ItemType.Comparator; - mappings[884] = ItemType.Compass; - mappings[1147] = ItemType.Composter; - mappings[595] = ItemType.Conduit; - mappings[944] = ItemType.CookedBeef; - mappings[946] = ItemType.CookedChicken; - mappings[895] = ItemType.CookedCod; - mappings[1082] = ItemType.CookedMutton; - mappings[838] = ItemType.CookedPorkchop; - mappings[1069] = ItemType.CookedRabbit; - mappings[896] = ItemType.CookedSalmon; - mappings[936] = ItemType.Cookie; - mappings[74] = ItemType.CopperBlock; - mappings[768] = ItemType.CopperIngot; - mappings[52] = ItemType.CopperOre; - mappings[205] = ItemType.Cornflower; - mappings[973] = ItemType.CowSpawnEgg; - mappings[323] = ItemType.CrackedDeepslateBricks; - mappings[325] = ItemType.CrackedDeepslateTiles; - mappings[343] = ItemType.CrackedNetherBricks; - mappings[1182] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[318] = ItemType.CrackedStoneBricks; - mappings[276] = ItemType.CraftingTable; - mappings[1141] = ItemType.CreeperBannerPattern; - mappings[1057] = ItemType.CreeperHead; - mappings[974] = ItemType.CreeperSpawnEgg; - mappings[667] = ItemType.CrimsonButton; - mappings[694] = ItemType.CrimsonDoor; - mappings[296] = ItemType.CrimsonFence; - mappings[717] = ItemType.CrimsonFenceGate; - mappings[212] = ItemType.CrimsonFungus; - mappings[862] = ItemType.CrimsonHangingSign; - mappings[151] = ItemType.CrimsonHyphae; - mappings[20] = ItemType.CrimsonNylium; - mappings[32] = ItemType.CrimsonPlanks; - mappings[682] = ItemType.CrimsonPressurePlate; - mappings[214] = ItemType.CrimsonRoots; - mappings[851] = ItemType.CrimsonSign; - mappings[238] = ItemType.CrimsonSlab; - mappings[369] = ItemType.CrimsonStairs; - mappings[119] = ItemType.CrimsonStem; - mappings[706] = ItemType.CrimsonTrapdoor; - mappings[1137] = ItemType.Crossbow; - mappings[1170] = ItemType.CryingObsidian; - mappings[81] = ItemType.CutCopper; - mappings[89] = ItemType.CutCopperSlab; - mappings[85] = ItemType.CutCopperStairs; - mappings[488] = ItemType.CutRedSandstone; - mappings[252] = ItemType.CutRedSandstoneSlab; - mappings[170] = ItemType.CutSandstone; - mappings[243] = ItemType.CutSandstoneSlab; - mappings[1092] = ItemType.CyanBanner; - mappings[929] = ItemType.CyanBed; - mappings[1194] = ItemType.CyanCandle; - mappings[431] = ItemType.CyanCarpet; - mappings[540] = ItemType.CyanConcrete; - mappings[556] = ItemType.CyanConcretePowder; - mappings[909] = ItemType.CyanDye; - mappings[524] = ItemType.CyanGlazedTerracotta; - mappings[508] = ItemType.CyanShulkerBox; - mappings[456] = ItemType.CyanStainedGlass; - mappings[472] = ItemType.CyanStainedGlassPane; - mappings[412] = ItemType.CyanTerracotta; - mappings[188] = ItemType.CyanWool; - mappings[397] = ItemType.DamagedAnvil; - mappings[195] = ItemType.Dandelion; - mappings[744] = ItemType.DarkOakBoat; - mappings[664] = ItemType.DarkOakButton; - mappings[745] = ItemType.DarkOakChestBoat; - mappings[691] = ItemType.DarkOakDoor; - mappings[293] = ItemType.DarkOakFence; - mappings[714] = ItemType.DarkOakFenceGate; - mappings[859] = ItemType.DarkOakHangingSign; - mappings[159] = ItemType.DarkOakLeaves; - mappings[115] = ItemType.DarkOakLog; - mappings[29] = ItemType.DarkOakPlanks; - mappings[679] = ItemType.DarkOakPressurePlate; - mappings[41] = ItemType.DarkOakSapling; - mappings[848] = ItemType.DarkOakSign; - mappings[234] = ItemType.DarkOakSlab; - mappings[365] = ItemType.DarkOakStairs; - mappings[703] = ItemType.DarkOakTrapdoor; - mappings[149] = ItemType.DarkOakWood; - mappings[481] = ItemType.DarkPrismarine; - mappings[256] = ItemType.DarkPrismarineSlab; - mappings[484] = ItemType.DarkPrismarineStairs; - mappings[649] = ItemType.DaylightDetector; - mappings[579] = ItemType.DeadBrainCoral; - mappings[565] = ItemType.DeadBrainCoralBlock; - mappings[590] = ItemType.DeadBrainCoralFan; - mappings[580] = ItemType.DeadBubbleCoral; - mappings[566] = ItemType.DeadBubbleCoralBlock; - mappings[591] = ItemType.DeadBubbleCoralFan; - mappings[176] = ItemType.DeadBush; - mappings[581] = ItemType.DeadFireCoral; - mappings[567] = ItemType.DeadFireCoralBlock; - mappings[592] = ItemType.DeadFireCoralFan; - mappings[582] = ItemType.DeadHornCoral; - mappings[568] = ItemType.DeadHornCoralBlock; - mappings[593] = ItemType.DeadHornCoralFan; - mappings[583] = ItemType.DeadTubeCoral; - mappings[564] = ItemType.DeadTubeCoralBlock; - mappings[589] = ItemType.DeadTubeCoralFan; - mappings[1116] = ItemType.DebugStick; - mappings[264] = ItemType.DecoratedPot; - mappings[8] = ItemType.Deepslate; - mappings[629] = ItemType.DeepslateBrickSlab; - mappings[612] = ItemType.DeepslateBrickStairs; - mappings[393] = ItemType.DeepslateBrickWall; - mappings[322] = ItemType.DeepslateBricks; - mappings[49] = ItemType.DeepslateCoalOre; - mappings[53] = ItemType.DeepslateCopperOre; - mappings[63] = ItemType.DeepslateDiamondOre; - mappings[59] = ItemType.DeepslateEmeraldOre; - mappings[55] = ItemType.DeepslateGoldOre; - mappings[51] = ItemType.DeepslateIronOre; - mappings[61] = ItemType.DeepslateLapisOre; - mappings[57] = ItemType.DeepslateRedstoneOre; - mappings[630] = ItemType.DeepslateTileSlab; - mappings[613] = ItemType.DeepslateTileStairs; - mappings[394] = ItemType.DeepslateTileWall; - mappings[324] = ItemType.DeepslateTiles; - mappings[720] = ItemType.DetectorRail; - mappings[760] = ItemType.Diamond; - mappings[796] = ItemType.DiamondAxe; - mappings[76] = ItemType.DiamondBlock; - mappings[827] = ItemType.DiamondBoots; - mappings[825] = ItemType.DiamondChestplate; - mappings[824] = ItemType.DiamondHelmet; - mappings[797] = ItemType.DiamondHoe; - mappings[1076] = ItemType.DiamondHorseArmor; - mappings[826] = ItemType.DiamondLeggings; - mappings[62] = ItemType.DiamondOre; - mappings[795] = ItemType.DiamondPickaxe; - mappings[794] = ItemType.DiamondShovel; - mappings[793] = ItemType.DiamondSword; - mappings[4] = ItemType.Diorite; - mappings[626] = ItemType.DioriteSlab; - mappings[609] = ItemType.DioriteStairs; - mappings[387] = ItemType.DioriteWall; - mappings[15] = ItemType.Dirt; - mappings[440] = ItemType.DirtPath; - mappings[1132] = ItemType.DiscFragment5; - mappings[643] = ItemType.Dispenser; - mappings[975] = ItemType.DolphinSpawnEgg; - mappings[976] = ItemType.DonkeySpawnEgg; - mappings[1106] = ItemType.DragonBreath; - mappings[355] = ItemType.DragonEgg; - mappings[1058] = ItemType.DragonHead; - mappings[940] = ItemType.DriedKelp; - mappings[879] = ItemType.DriedKelpBlock; - mappings[13] = ItemType.DripstoneBlock; - mappings[644] = ItemType.Dropper; - mappings[977] = ItemType.DrownedSpawnEgg; - mappings[1214] = ItemType.DuneArmorTrimSmithingTemplate; - mappings[1210] = ItemType.EchoShard; - mappings[883] = ItemType.Egg; - mappings[978] = ItemType.ElderGuardianSpawnEgg; - mappings[731] = ItemType.Elytra; - mappings[761] = ItemType.Emerald; - mappings[358] = ItemType.EmeraldBlock; - mappings[58] = ItemType.EmeraldOre; - mappings[1064] = ItemType.EnchantedBook; - mappings[841] = ItemType.EnchantedGoldenApple; - mappings[351] = ItemType.EnchantingTable; - mappings[1099] = ItemType.EndCrystal; - mappings[352] = ItemType.EndPortalFrame; - mappings[268] = ItemType.EndRod; - mappings[353] = ItemType.EndStone; - mappings[619] = ItemType.EndStoneBrickSlab; - mappings[601] = ItemType.EndStoneBrickStairs; - mappings[386] = ItemType.EndStoneBrickWall; - mappings[354] = ItemType.EndStoneBricks; - mappings[357] = ItemType.EnderChest; - mappings[979] = ItemType.EnderDragonSpawnEgg; - mappings[961] = ItemType.EnderEye; - mappings[948] = ItemType.EnderPearl; - mappings[980] = ItemType.EndermanSpawnEgg; - mappings[981] = ItemType.EndermiteSpawnEgg; - mappings[982] = ItemType.EvokerSpawnEgg; - mappings[1040] = ItemType.ExperienceBottle; - mappings[78] = ItemType.ExposedCopper; - mappings[82] = ItemType.ExposedCutCopper; - mappings[90] = ItemType.ExposedCutCopperSlab; - mappings[86] = ItemType.ExposedCutCopperStairs; - mappings[1218] = ItemType.EyeArmorTrimSmithingTemplate; - mappings[277] = ItemType.Farmland; - mappings[807] = ItemType.Feather; - mappings[956] = ItemType.FermentedSpiderEye; - mappings[173] = ItemType.Fern; - mappings[937] = ItemType.FilledMap; - mappings[1041] = ItemType.FireCharge; - mappings[577] = ItemType.FireCoral; - mappings[572] = ItemType.FireCoralBlock; - mappings[587] = ItemType.FireCoralFan; - mappings[1062] = ItemType.FireworkRocket; - mappings[1063] = ItemType.FireworkStar; - mappings[887] = ItemType.FishingRod; - mappings[1152] = ItemType.FletchingTable; - mappings[836] = ItemType.Flint; - mappings[754] = ItemType.FlintAndSteel; - mappings[1140] = ItemType.FlowerBannerPattern; - mappings[1046] = ItemType.FlowerPot; - mappings[175] = ItemType.FloweringAzalea; - mappings[162] = ItemType.FloweringAzaleaLeaves; - mappings[983] = ItemType.FoxSpawnEgg; - mappings[984] = ItemType.FrogSpawnEgg; - mappings[1209] = ItemType.Frogspawn; - mappings[278] = ItemType.Furnace; - mappings[726] = ItemType.FurnaceMinecart; - mappings[985] = ItemType.GhastSpawnEgg; - mappings[950] = ItemType.GhastTear; - mappings[1174] = ItemType.GildedBlackstone; - mappings[165] = ItemType.Glass; - mappings[954] = ItemType.GlassBottle; - mappings[333] = ItemType.GlassPane; - mappings[962] = ItemType.GlisteringMelonSlice; - mappings[1144] = ItemType.GlobeBannerPattern; - mappings[1160] = ItemType.GlowBerries; - mappings[898] = ItemType.GlowInkSac; - mappings[1045] = ItemType.GlowItemFrame; - mappings[336] = ItemType.GlowLichen; - mappings[986] = ItemType.GlowSquidSpawnEgg; - mappings[308] = ItemType.Glowstone; - mappings[890] = ItemType.GlowstoneDust; - mappings[1146] = ItemType.GoatHorn; - mappings[987] = ItemType.GoatSpawnEgg; - mappings[75] = ItemType.GoldBlock; - mappings[770] = ItemType.GoldIngot; - mappings[951] = ItemType.GoldNugget; - mappings[54] = ItemType.GoldOre; - mappings[840] = ItemType.GoldenApple; - mappings[786] = ItemType.GoldenAxe; - mappings[831] = ItemType.GoldenBoots; - mappings[1052] = ItemType.GoldenCarrot; - mappings[829] = ItemType.GoldenChestplate; - mappings[828] = ItemType.GoldenHelmet; - mappings[787] = ItemType.GoldenHoe; - mappings[1075] = ItemType.GoldenHorseArmor; - mappings[830] = ItemType.GoldenLeggings; - mappings[785] = ItemType.GoldenPickaxe; - mappings[784] = ItemType.GoldenShovel; - mappings[783] = ItemType.GoldenSword; - mappings[2] = ItemType.Granite; - mappings[622] = ItemType.GraniteSlab; - mappings[605] = ItemType.GraniteStairs; - mappings[379] = ItemType.GraniteWall; - mappings[172] = ItemType.ShortGrass; - mappings[14] = ItemType.GrassBlock; - mappings[47] = ItemType.Gravel; - mappings[1090] = ItemType.GrayBanner; - mappings[927] = ItemType.GrayBed; - mappings[1192] = ItemType.GrayCandle; - mappings[429] = ItemType.GrayCarpet; - mappings[538] = ItemType.GrayConcrete; - mappings[554] = ItemType.GrayConcretePowder; - mappings[907] = ItemType.GrayDye; - mappings[522] = ItemType.GrayGlazedTerracotta; - mappings[506] = ItemType.GrayShulkerBox; - mappings[454] = ItemType.GrayStainedGlass; - mappings[470] = ItemType.GrayStainedGlassPane; - mappings[410] = ItemType.GrayTerracotta; - mappings[186] = ItemType.GrayWool; - mappings[1096] = ItemType.GreenBanner; - mappings[933] = ItemType.GreenBed; - mappings[1198] = ItemType.GreenCandle; - mappings[435] = ItemType.GreenCarpet; - mappings[544] = ItemType.GreenConcrete; - mappings[560] = ItemType.GreenConcretePowder; - mappings[913] = ItemType.GreenDye; - mappings[528] = ItemType.GreenGlazedTerracotta; - mappings[512] = ItemType.GreenShulkerBox; - mappings[460] = ItemType.GreenStainedGlass; - mappings[476] = ItemType.GreenStainedGlassPane; - mappings[416] = ItemType.GreenTerracotta; - mappings[192] = ItemType.GreenWool; - mappings[1153] = ItemType.Grindstone; - mappings[988] = ItemType.GuardianSpawnEgg; - mappings[808] = ItemType.Gunpowder; - mappings[224] = ItemType.HangingRoots; - mappings[421] = ItemType.HayBlock; - mappings[1136] = ItemType.HeartOfTheSea; - mappings[672] = ItemType.HeavyWeightedPressurePlate; - mappings[989] = ItemType.HoglinSpawnEgg; - mappings[640] = ItemType.HoneyBlock; - mappings[1167] = ItemType.HoneyBottle; - mappings[1164] = ItemType.Honeycomb; - mappings[1168] = ItemType.HoneycombBlock; - mappings[642] = ItemType.Hopper; - mappings[728] = ItemType.HopperMinecart; - mappings[578] = ItemType.HornCoral; - mappings[573] = ItemType.HornCoralBlock; - mappings[588] = ItemType.HornCoralFan; - mappings[990] = ItemType.HorseSpawnEgg; - mappings[991] = ItemType.HuskSpawnEgg; - mappings[282] = ItemType.Ice; - mappings[314] = ItemType.InfestedChiseledStoneBricks; - mappings[310] = ItemType.InfestedCobblestone; - mappings[313] = ItemType.InfestedCrackedStoneBricks; - mappings[315] = ItemType.InfestedDeepslate; - mappings[312] = ItemType.InfestedMossyStoneBricks; - mappings[309] = ItemType.InfestedStone; - mappings[311] = ItemType.InfestedStoneBricks; - mappings[897] = ItemType.InkSac; - mappings[791] = ItemType.IronAxe; - mappings[331] = ItemType.IronBars; - mappings[73] = ItemType.IronBlock; - mappings[823] = ItemType.IronBoots; - mappings[821] = ItemType.IronChestplate; - mappings[684] = ItemType.IronDoor; - mappings[992] = ItemType.IronGolemSpawnEgg; - mappings[820] = ItemType.IronHelmet; - mappings[792] = ItemType.IronHoe; - mappings[1074] = ItemType.IronHorseArmor; - mappings[766] = ItemType.IronIngot; - mappings[822] = ItemType.IronLeggings; - mappings[1114] = ItemType.IronNugget; - mappings[50] = ItemType.IronOre; - mappings[790] = ItemType.IronPickaxe; - mappings[789] = ItemType.IronShovel; - mappings[788] = ItemType.IronSword; - mappings[696] = ItemType.IronTrapdoor; - mappings[1044] = ItemType.ItemFrame; - mappings[300] = ItemType.JackOLantern; - mappings[751] = ItemType.Jigsaw; - mappings[286] = ItemType.Jukebox; - mappings[738] = ItemType.JungleBoat; - mappings[661] = ItemType.JungleButton; - mappings[739] = ItemType.JungleChestBoat; - mappings[688] = ItemType.JungleDoor; - mappings[290] = ItemType.JungleFence; - mappings[711] = ItemType.JungleFenceGate; - mappings[856] = ItemType.JungleHangingSign; - mappings[156] = ItemType.JungleLeaves; - mappings[112] = ItemType.JungleLog; - mappings[26] = ItemType.JunglePlanks; - mappings[676] = ItemType.JunglePressurePlate; - mappings[38] = ItemType.JungleSapling; - mappings[845] = ItemType.JungleSign; - mappings[231] = ItemType.JungleSlab; - mappings[362] = ItemType.JungleStairs; - mappings[700] = ItemType.JungleTrapdoor; - mappings[146] = ItemType.JungleWood; - mappings[220] = ItemType.Kelp; - mappings[1115] = ItemType.KnowledgeBook; - mappings[279] = ItemType.Ladder; - mappings[1157] = ItemType.Lantern; - mappings[167] = ItemType.LapisBlock; - mappings[762] = ItemType.LapisLazuli; - mappings[60] = ItemType.LapisOre; - mappings[1203] = ItemType.LargeAmethystBud; - mappings[446] = ItemType.LargeFern; - mappings[866] = ItemType.LavaBucket; - mappings[1078] = ItemType.Lead; - mappings[869] = ItemType.Leather; - mappings[815] = ItemType.LeatherBoots; - mappings[813] = ItemType.LeatherChestplate; - mappings[812] = ItemType.LeatherHelmet; - mappings[1077] = ItemType.LeatherHorseArmor; - mappings[814] = ItemType.LeatherLeggings; - mappings[645] = ItemType.Lectern; - mappings[647] = ItemType.Lever; - mappings[420] = ItemType.Light; - mappings[1086] = ItemType.LightBlueBanner; - mappings[923] = ItemType.LightBlueBed; - mappings[1188] = ItemType.LightBlueCandle; - mappings[425] = ItemType.LightBlueCarpet; - mappings[534] = ItemType.LightBlueConcrete; - mappings[550] = ItemType.LightBlueConcretePowder; - mappings[903] = ItemType.LightBlueDye; - mappings[518] = ItemType.LightBlueGlazedTerracotta; - mappings[502] = ItemType.LightBlueShulkerBox; - mappings[450] = ItemType.LightBlueStainedGlass; - mappings[466] = ItemType.LightBlueStainedGlassPane; - mappings[406] = ItemType.LightBlueTerracotta; - mappings[182] = ItemType.LightBlueWool; - mappings[1091] = ItemType.LightGrayBanner; - mappings[928] = ItemType.LightGrayBed; - mappings[1193] = ItemType.LightGrayCandle; - mappings[430] = ItemType.LightGrayCarpet; - mappings[539] = ItemType.LightGrayConcrete; - mappings[555] = ItemType.LightGrayConcretePowder; - mappings[908] = ItemType.LightGrayDye; - mappings[523] = ItemType.LightGrayGlazedTerracotta; - mappings[507] = ItemType.LightGrayShulkerBox; - mappings[455] = ItemType.LightGrayStainedGlass; - mappings[471] = ItemType.LightGrayStainedGlassPane; - mappings[411] = ItemType.LightGrayTerracotta; - mappings[187] = ItemType.LightGrayWool; - mappings[671] = ItemType.LightWeightedPressurePlate; - mappings[648] = ItemType.LightningRod; - mappings[442] = ItemType.Lilac; - mappings[206] = ItemType.LilyOfTheValley; - mappings[341] = ItemType.LilyPad; - mappings[1088] = ItemType.LimeBanner; - mappings[925] = ItemType.LimeBed; - mappings[1190] = ItemType.LimeCandle; - mappings[427] = ItemType.LimeCarpet; - mappings[536] = ItemType.LimeConcrete; - mappings[552] = ItemType.LimeConcretePowder; - mappings[905] = ItemType.LimeDye; - mappings[520] = ItemType.LimeGlazedTerracotta; - mappings[504] = ItemType.LimeShulkerBox; - mappings[452] = ItemType.LimeStainedGlass; - mappings[468] = ItemType.LimeStainedGlassPane; - mappings[408] = ItemType.LimeTerracotta; - mappings[184] = ItemType.LimeWool; - mappings[1110] = ItemType.LingeringPotion; - mappings[993] = ItemType.LlamaSpawnEgg; - mappings[1169] = ItemType.Lodestone; - mappings[1139] = ItemType.Loom; - mappings[1085] = ItemType.MagentaBanner; - mappings[922] = ItemType.MagentaBed; - mappings[1187] = ItemType.MagentaCandle; - mappings[424] = ItemType.MagentaCarpet; - mappings[533] = ItemType.MagentaConcrete; - mappings[549] = ItemType.MagentaConcretePowder; - mappings[902] = ItemType.MagentaDye; - mappings[517] = ItemType.MagentaGlazedTerracotta; - mappings[501] = ItemType.MagentaShulkerBox; - mappings[449] = ItemType.MagentaStainedGlass; - mappings[465] = ItemType.MagentaStainedGlassPane; - mappings[405] = ItemType.MagentaTerracotta; - mappings[181] = ItemType.MagentaWool; - mappings[492] = ItemType.MagmaBlock; - mappings[958] = ItemType.MagmaCream; - mappings[994] = ItemType.MagmaCubeSpawnEgg; - mappings[746] = ItemType.MangroveBoat; - mappings[665] = ItemType.MangroveButton; - mappings[747] = ItemType.MangroveChestBoat; - mappings[692] = ItemType.MangroveDoor; - mappings[294] = ItemType.MangroveFence; - mappings[715] = ItemType.MangroveFenceGate; - mappings[860] = ItemType.MangroveHangingSign; - mappings[160] = ItemType.MangroveLeaves; - mappings[116] = ItemType.MangroveLog; - mappings[30] = ItemType.MangrovePlanks; - mappings[680] = ItemType.MangrovePressurePlate; - mappings[42] = ItemType.MangrovePropagule; - mappings[117] = ItemType.MangroveRoots; - mappings[849] = ItemType.MangroveSign; - mappings[235] = ItemType.MangroveSlab; - mappings[366] = ItemType.MangroveStairs; - mappings[704] = ItemType.MangroveTrapdoor; - mappings[150] = ItemType.MangroveWood; - mappings[1051] = ItemType.Map; - mappings[1202] = ItemType.MediumAmethystBud; - mappings[334] = ItemType.Melon; - mappings[942] = ItemType.MelonSeeds; - mappings[939] = ItemType.MelonSlice; - mappings[870] = ItemType.MilkBucket; - mappings[724] = ItemType.Minecart; - mappings[1143] = ItemType.MojangBannerPattern; - mappings[995] = ItemType.MooshroomSpawnEgg; - mappings[223] = ItemType.MossBlock; - mappings[221] = ItemType.MossCarpet; - mappings[265] = ItemType.MossyCobblestone; - mappings[618] = ItemType.MossyCobblestoneSlab; - mappings[600] = ItemType.MossyCobblestoneStairs; - mappings[374] = ItemType.MossyCobblestoneWall; - mappings[616] = ItemType.MossyStoneBrickSlab; - mappings[598] = ItemType.MossyStoneBrickStairs; - mappings[378] = ItemType.MossyStoneBrickWall; - mappings[317] = ItemType.MossyStoneBricks; - mappings[19] = ItemType.Mud; - mappings[248] = ItemType.MudBrickSlab; - mappings[339] = ItemType.MudBrickStairs; - mappings[381] = ItemType.MudBrickWall; - mappings[321] = ItemType.MudBricks; - mappings[118] = ItemType.MuddyMangroveRoots; - mappings[996] = ItemType.MuleSpawnEgg; - mappings[330] = ItemType.MushroomStem; - mappings[805] = ItemType.MushroomStew; - mappings[1127] = ItemType.MusicDisc11; - mappings[1117] = ItemType.MusicDisc13; - mappings[1130] = ItemType.MusicDisc5; - mappings[1119] = ItemType.MusicDiscBlocks; - mappings[1118] = ItemType.MusicDiscCat; - mappings[1120] = ItemType.MusicDiscChirp; - mappings[1121] = ItemType.MusicDiscFar; - mappings[1122] = ItemType.MusicDiscMall; - mappings[1123] = ItemType.MusicDiscMellohi; - mappings[1129] = ItemType.MusicDiscOtherside; - mappings[1131] = ItemType.MusicDiscPigstep; - mappings[1124] = ItemType.MusicDiscStal; - mappings[1125] = ItemType.MusicDiscStrad; - mappings[1128] = ItemType.MusicDiscWait; - mappings[1126] = ItemType.MusicDiscWard; - mappings[1081] = ItemType.Mutton; - mappings[340] = ItemType.Mycelium; - mappings[1079] = ItemType.NameTag; - mappings[1135] = ItemType.NautilusShell; - mappings[1065] = ItemType.NetherBrick; - mappings[345] = ItemType.NetherBrickFence; - mappings[249] = ItemType.NetherBrickSlab; - mappings[346] = ItemType.NetherBrickStairs; - mappings[382] = ItemType.NetherBrickWall; - mappings[342] = ItemType.NetherBricks; - mappings[64] = ItemType.NetherGoldOre; - mappings[65] = ItemType.NetherQuartzOre; - mappings[216] = ItemType.NetherSprouts; - mappings[1060] = ItemType.NetherStar; - mappings[952] = ItemType.NetherWart; - mappings[493] = ItemType.NetherWartBlock; - mappings[801] = ItemType.NetheriteAxe; - mappings[77] = ItemType.NetheriteBlock; - mappings[835] = ItemType.NetheriteBoots; - mappings[833] = ItemType.NetheriteChestplate; - mappings[832] = ItemType.NetheriteHelmet; - mappings[802] = ItemType.NetheriteHoe; - mappings[771] = ItemType.NetheriteIngot; - mappings[834] = ItemType.NetheriteLeggings; - mappings[800] = ItemType.NetheritePickaxe; - mappings[772] = ItemType.NetheriteScrap; - mappings[799] = ItemType.NetheriteShovel; - mappings[798] = ItemType.NetheriteSword; - mappings[1212] = ItemType.NetheriteUpgradeSmithingTemplate; - mappings[301] = ItemType.Netherrack; - mappings[655] = ItemType.NoteBlock; - mappings[732] = ItemType.OakBoat; - mappings[658] = ItemType.OakButton; - mappings[733] = ItemType.OakChestBoat; - mappings[685] = ItemType.OakDoor; - mappings[287] = ItemType.OakFence; - mappings[708] = ItemType.OakFenceGate; - mappings[853] = ItemType.OakHangingSign; - mappings[153] = ItemType.OakLeaves; - mappings[109] = ItemType.OakLog; - mappings[23] = ItemType.OakPlanks; - mappings[673] = ItemType.OakPressurePlate; - mappings[35] = ItemType.OakSapling; - mappings[842] = ItemType.OakSign; - mappings[228] = ItemType.OakSlab; - mappings[359] = ItemType.OakStairs; - mappings[697] = ItemType.OakTrapdoor; - mappings[143] = ItemType.OakWood; - mappings[641] = ItemType.Observer; - mappings[266] = ItemType.Obsidian; - mappings[997] = ItemType.OcelotSpawnEgg; - mappings[1206] = ItemType.OchreFroglight; - mappings[1084] = ItemType.OrangeBanner; - mappings[921] = ItemType.OrangeBed; - mappings[1186] = ItemType.OrangeCandle; - mappings[423] = ItemType.OrangeCarpet; - mappings[532] = ItemType.OrangeConcrete; - mappings[548] = ItemType.OrangeConcretePowder; - mappings[901] = ItemType.OrangeDye; - mappings[516] = ItemType.OrangeGlazedTerracotta; - mappings[500] = ItemType.OrangeShulkerBox; - mappings[448] = ItemType.OrangeStainedGlass; - mappings[464] = ItemType.OrangeStainedGlassPane; - mappings[404] = ItemType.OrangeTerracotta; - mappings[201] = ItemType.OrangeTulip; - mappings[180] = ItemType.OrangeWool; - mappings[204] = ItemType.OxeyeDaisy; - mappings[80] = ItemType.OxidizedCopper; - mappings[84] = ItemType.OxidizedCutCopper; - mappings[92] = ItemType.OxidizedCutCopperSlab; - mappings[88] = ItemType.OxidizedCutCopperStairs; - mappings[439] = ItemType.PackedIce; - mappings[320] = ItemType.PackedMud; - mappings[839] = ItemType.Painting; - mappings[998] = ItemType.PandaSpawnEgg; - mappings[880] = ItemType.Paper; - mappings[999] = ItemType.ParrotSpawnEgg; - mappings[1208] = ItemType.PearlescentFroglight; - mappings[444] = ItemType.Peony; - mappings[244] = ItemType.PetrifiedOakSlab; - mappings[1134] = ItemType.PhantomMembrane; - mappings[1000] = ItemType.PhantomSpawnEgg; - mappings[1001] = ItemType.PigSpawnEgg; - mappings[1145] = ItemType.PiglinBannerPattern; - mappings[1003] = ItemType.PiglinBruteSpawnEgg; - mappings[1059] = ItemType.PiglinHead; - mappings[1002] = ItemType.PiglinSpawnEgg; - mappings[1004] = ItemType.PillagerSpawnEgg; - mappings[1089] = ItemType.PinkBanner; - mappings[926] = ItemType.PinkBed; - mappings[1191] = ItemType.PinkCandle; - mappings[428] = ItemType.PinkCarpet; - mappings[537] = ItemType.PinkConcrete; - mappings[553] = ItemType.PinkConcretePowder; - mappings[906] = ItemType.PinkDye; - mappings[521] = ItemType.PinkGlazedTerracotta; - mappings[222] = ItemType.PinkPetals; - mappings[505] = ItemType.PinkShulkerBox; - mappings[453] = ItemType.PinkStainedGlass; - mappings[469] = ItemType.PinkStainedGlassPane; - mappings[409] = ItemType.PinkTerracotta; - mappings[203] = ItemType.PinkTulip; - mappings[185] = ItemType.PinkWool; - mappings[637] = ItemType.Piston; - mappings[1055] = ItemType.PlayerHead; - mappings[17] = ItemType.Podzol; - mappings[1205] = ItemType.PointedDripstone; - mappings[1050] = ItemType.PoisonousPotato; - mappings[1005] = ItemType.PolarBearSpawnEgg; - mappings[7] = ItemType.PolishedAndesite; - mappings[625] = ItemType.PolishedAndesiteSlab; - mappings[608] = ItemType.PolishedAndesiteStairs; - mappings[305] = ItemType.PolishedBasalt; - mappings[1175] = ItemType.PolishedBlackstone; - mappings[1180] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1181] = ItemType.PolishedBlackstoneBrickStairs; - mappings[390] = ItemType.PolishedBlackstoneBrickWall; - mappings[1179] = ItemType.PolishedBlackstoneBricks; - mappings[657] = ItemType.PolishedBlackstoneButton; - mappings[670] = ItemType.PolishedBlackstonePressurePlate; - mappings[1176] = ItemType.PolishedBlackstoneSlab; - mappings[1177] = ItemType.PolishedBlackstoneStairs; - mappings[389] = ItemType.PolishedBlackstoneWall; - mappings[10] = ItemType.PolishedDeepslate; - mappings[628] = ItemType.PolishedDeepslateSlab; - mappings[611] = ItemType.PolishedDeepslateStairs; - mappings[392] = ItemType.PolishedDeepslateWall; - mappings[5] = ItemType.PolishedDiorite; - mappings[617] = ItemType.PolishedDioriteSlab; - mappings[599] = ItemType.PolishedDioriteStairs; - mappings[3] = ItemType.PolishedGranite; - mappings[614] = ItemType.PolishedGraniteSlab; - mappings[596] = ItemType.PolishedGraniteStairs; - mappings[1101] = ItemType.PoppedChorusFruit; - mappings[196] = ItemType.Poppy; - mappings[837] = ItemType.Porkchop; - mappings[1048] = ItemType.Potato; - mappings[953] = ItemType.Potion; - mappings[1224] = ItemType.ArcherPotterySherd; - mappings[1226] = ItemType.ArmsUpPotterySherd; - mappings[1225] = ItemType.PrizePotterySherd; - mappings[1227] = ItemType.SkullPotterySherd; - mappings[867] = ItemType.PowderSnowBucket; - mappings[719] = ItemType.PoweredRail; - mappings[479] = ItemType.Prismarine; - mappings[255] = ItemType.PrismarineBrickSlab; - mappings[483] = ItemType.PrismarineBrickStairs; - mappings[480] = ItemType.PrismarineBricks; - mappings[1067] = ItemType.PrismarineCrystals; - mappings[1066] = ItemType.PrismarineShard; - mappings[254] = ItemType.PrismarineSlab; - mappings[482] = ItemType.PrismarineStairs; - mappings[376] = ItemType.PrismarineWall; - mappings[894] = ItemType.Pufferfish; - mappings[871] = ItemType.PufferfishBucket; - mappings[1006] = ItemType.PufferfishSpawnEgg; - mappings[298] = ItemType.Pumpkin; - mappings[1061] = ItemType.PumpkinPie; - mappings[941] = ItemType.PumpkinSeeds; - mappings[1093] = ItemType.PurpleBanner; - mappings[930] = ItemType.PurpleBed; - mappings[1195] = ItemType.PurpleCandle; - mappings[432] = ItemType.PurpleCarpet; - mappings[541] = ItemType.PurpleConcrete; - mappings[557] = ItemType.PurpleConcretePowder; - mappings[910] = ItemType.PurpleDye; - mappings[525] = ItemType.PurpleGlazedTerracotta; - mappings[509] = ItemType.PurpleShulkerBox; - mappings[457] = ItemType.PurpleStainedGlass; - mappings[473] = ItemType.PurpleStainedGlassPane; - mappings[413] = ItemType.PurpleTerracotta; - mappings[189] = ItemType.PurpleWool; - mappings[271] = ItemType.PurpurBlock; - mappings[272] = ItemType.PurpurPillar; - mappings[253] = ItemType.PurpurSlab; - mappings[273] = ItemType.PurpurStairs; - mappings[763] = ItemType.Quartz; - mappings[399] = ItemType.QuartzBlock; - mappings[400] = ItemType.QuartzBricks; - mappings[401] = ItemType.QuartzPillar; - mappings[250] = ItemType.QuartzSlab; - mappings[402] = ItemType.QuartzStairs; - mappings[1068] = ItemType.Rabbit; - mappings[1071] = ItemType.RabbitFoot; - mappings[1072] = ItemType.RabbitHide; - mappings[1007] = ItemType.RabbitSpawnEgg; - mappings[1070] = ItemType.RabbitStew; - mappings[721] = ItemType.Rail; - mappings[1008] = ItemType.RavagerSpawnEgg; - mappings[767] = ItemType.RawCopper; - mappings[69] = ItemType.RawCopperBlock; - mappings[769] = ItemType.RawGold; - mappings[70] = ItemType.RawGoldBlock; - mappings[765] = ItemType.RawIron; - mappings[68] = ItemType.RawIronBlock; - mappings[885] = ItemType.RecoveryCompass; - mappings[1097] = ItemType.RedBanner; - mappings[934] = ItemType.RedBed; - mappings[1199] = ItemType.RedCandle; - mappings[436] = ItemType.RedCarpet; - mappings[545] = ItemType.RedConcrete; - mappings[561] = ItemType.RedConcretePowder; - mappings[914] = ItemType.RedDye; - mappings[529] = ItemType.RedGlazedTerracotta; - mappings[211] = ItemType.RedMushroom; - mappings[329] = ItemType.RedMushroomBlock; - mappings[624] = ItemType.RedNetherBrickSlab; - mappings[607] = ItemType.RedNetherBrickStairs; - mappings[384] = ItemType.RedNetherBrickWall; - mappings[495] = ItemType.RedNetherBricks; - mappings[46] = ItemType.RedSand; - mappings[486] = ItemType.RedSandstone; - mappings[251] = ItemType.RedSandstoneSlab; - mappings[489] = ItemType.RedSandstoneStairs; - mappings[377] = ItemType.RedSandstoneWall; - mappings[513] = ItemType.RedShulkerBox; - mappings[461] = ItemType.RedStainedGlass; - mappings[477] = ItemType.RedStainedGlassPane; - mappings[417] = ItemType.RedTerracotta; - mappings[200] = ItemType.RedTulip; - mappings[193] = ItemType.RedWool; - mappings[632] = ItemType.Redstone; - mappings[634] = ItemType.RedstoneBlock; - mappings[654] = ItemType.RedstoneLamp; - mappings[56] = ItemType.RedstoneOre; - mappings[633] = ItemType.RedstoneTorch; - mappings[327] = ItemType.ReinforcedDeepslate; - mappings[635] = ItemType.Repeater; - mappings[490] = ItemType.RepeatingCommandBlock; - mappings[1183] = ItemType.RespawnAnchor; - mappings[1222] = ItemType.RibArmorTrimSmithingTemplate; - mappings[18] = ItemType.RootedDirt; - mappings[443] = ItemType.RoseBush; - mappings[947] = ItemType.RottenFlesh; - mappings[723] = ItemType.Saddle; - mappings[892] = ItemType.Salmon; - mappings[872] = ItemType.SalmonBucket; - mappings[1009] = ItemType.SalmonSpawnEgg; - mappings[44] = ItemType.Sand; - mappings[168] = ItemType.Sandstone; - mappings[242] = ItemType.SandstoneSlab; - mappings[356] = ItemType.SandstoneStairs; - mappings[385] = ItemType.SandstoneWall; - mappings[631] = ItemType.Scaffolding; - mappings[347] = ItemType.Sculk; - mappings[349] = ItemType.SculkCatalyst; - mappings[650] = ItemType.SculkSensor; - mappings[350] = ItemType.SculkShrieker; - mappings[348] = ItemType.SculkVein; - mappings[753] = ItemType.TurtleScute; - mappings[485] = ItemType.SeaLantern; - mappings[178] = ItemType.SeaPickle; - mappings[177] = ItemType.Seagrass; - mappings[1213] = ItemType.SentryArmorTrimSmithingTemplate; - mappings[938] = ItemType.Shears; - mappings[1010] = ItemType.SheepSpawnEgg; - mappings[1111] = ItemType.Shield; - mappings[1163] = ItemType.Shroomlight; - mappings[498] = ItemType.ShulkerBox; - mappings[1113] = ItemType.ShulkerShell; - mappings[1011] = ItemType.ShulkerSpawnEgg; - mappings[1012] = ItemType.SilverfishSpawnEgg; - mappings[1014] = ItemType.SkeletonHorseSpawnEgg; - mappings[1053] = ItemType.SkeletonSkull; - mappings[1013] = ItemType.SkeletonSpawnEgg; - mappings[1142] = ItemType.SkullBannerPattern; - mappings[882] = ItemType.SlimeBall; - mappings[639] = ItemType.SlimeBlock; - mappings[1015] = ItemType.SlimeSpawnEgg; - mappings[1201] = ItemType.SmallAmethystBud; - mappings[226] = ItemType.SmallDripleaf; - mappings[1154] = ItemType.SmithingTable; - mappings[1149] = ItemType.Smoker; - mappings[306] = ItemType.SmoothBasalt; - mappings[257] = ItemType.SmoothQuartz; - mappings[621] = ItemType.SmoothQuartzSlab; - mappings[604] = ItemType.SmoothQuartzStairs; - mappings[258] = ItemType.SmoothRedSandstone; - mappings[615] = ItemType.SmoothRedSandstoneSlab; - mappings[597] = ItemType.SmoothRedSandstoneStairs; - mappings[259] = ItemType.SmoothSandstone; - mappings[620] = ItemType.SmoothSandstoneSlab; - mappings[603] = ItemType.SmoothSandstoneStairs; - mappings[260] = ItemType.SmoothStone; - mappings[241] = ItemType.SmoothStoneSlab; - mappings[1016] = ItemType.SnifferSpawnEgg; - mappings[1221] = ItemType.SnoutArmorTrimSmithingTemplate; - mappings[281] = ItemType.Snow; - mappings[283] = ItemType.SnowBlock; - mappings[1017] = ItemType.SnowGolemSpawnEgg; - mappings[868] = ItemType.Snowball; - mappings[1162] = ItemType.SoulCampfire; - mappings[1158] = ItemType.SoulLantern; - mappings[302] = ItemType.SoulSand; - mappings[303] = ItemType.SoulSoil; - mappings[307] = ItemType.SoulTorch; - mappings[274] = ItemType.Spawner; - mappings[1108] = ItemType.SpectralArrow; - mappings[955] = ItemType.SpiderEye; - mappings[1018] = ItemType.SpiderSpawnEgg; - mappings[1223] = ItemType.SpireArmorTrimSmithingTemplate; - mappings[1107] = ItemType.SplashPotion; - mappings[163] = ItemType.Sponge; - mappings[209] = ItemType.SporeBlossom; - mappings[734] = ItemType.SpruceBoat; - mappings[659] = ItemType.SpruceButton; - mappings[735] = ItemType.SpruceChestBoat; - mappings[686] = ItemType.SpruceDoor; - mappings[288] = ItemType.SpruceFence; - mappings[709] = ItemType.SpruceFenceGate; - mappings[854] = ItemType.SpruceHangingSign; - mappings[154] = ItemType.SpruceLeaves; - mappings[110] = ItemType.SpruceLog; - mappings[24] = ItemType.SprucePlanks; - mappings[674] = ItemType.SprucePressurePlate; - mappings[36] = ItemType.SpruceSapling; - mappings[843] = ItemType.SpruceSign; - mappings[229] = ItemType.SpruceSlab; - mappings[360] = ItemType.SpruceStairs; - mappings[698] = ItemType.SpruceTrapdoor; - mappings[144] = ItemType.SpruceWood; - mappings[889] = ItemType.Spyglass; - mappings[1019] = ItemType.SquidSpawnEgg; - mappings[803] = ItemType.Stick; - mappings[638] = ItemType.StickyPiston; - mappings[1] = ItemType.Stone; - mappings[781] = ItemType.StoneAxe; - mappings[247] = ItemType.StoneBrickSlab; - mappings[338] = ItemType.StoneBrickStairs; - mappings[380] = ItemType.StoneBrickWall; - mappings[316] = ItemType.StoneBricks; - mappings[656] = ItemType.StoneButton; - mappings[782] = ItemType.StoneHoe; - mappings[780] = ItemType.StonePickaxe; - mappings[669] = ItemType.StonePressurePlate; - mappings[779] = ItemType.StoneShovel; - mappings[240] = ItemType.StoneSlab; - mappings[602] = ItemType.StoneStairs; - mappings[778] = ItemType.StoneSword; - mappings[1155] = ItemType.Stonecutter; - mappings[1020] = ItemType.StraySpawnEgg; - mappings[1021] = ItemType.StriderSpawnEgg; - mappings[806] = ItemType.String; - mappings[126] = ItemType.StrippedAcaciaLog; - mappings[136] = ItemType.StrippedAcaciaWood; - mappings[142] = ItemType.StrippedBambooBlock; - mappings[124] = ItemType.StrippedBirchLog; - mappings[134] = ItemType.StrippedBirchWood; - mappings[127] = ItemType.StrippedCherryLog; - mappings[137] = ItemType.StrippedCherryWood; - mappings[140] = ItemType.StrippedCrimsonHyphae; - mappings[130] = ItemType.StrippedCrimsonStem; - mappings[128] = ItemType.StrippedDarkOakLog; - mappings[138] = ItemType.StrippedDarkOakWood; - mappings[125] = ItemType.StrippedJungleLog; - mappings[135] = ItemType.StrippedJungleWood; - mappings[129] = ItemType.StrippedMangroveLog; - mappings[139] = ItemType.StrippedMangroveWood; - mappings[122] = ItemType.StrippedOakLog; - mappings[132] = ItemType.StrippedOakWood; - mappings[123] = ItemType.StrippedSpruceLog; - mappings[133] = ItemType.StrippedSpruceWood; - mappings[141] = ItemType.StrippedWarpedHyphae; - mappings[131] = ItemType.StrippedWarpedStem; - mappings[750] = ItemType.StructureBlock; - mappings[497] = ItemType.StructureVoid; - mappings[918] = ItemType.Sugar; - mappings[219] = ItemType.SugarCane; - mappings[441] = ItemType.Sunflower; - mappings[45] = ItemType.SuspiciousSand; - mappings[1138] = ItemType.SuspiciousStew; - mappings[1159] = ItemType.SweetBerries; - mappings[876] = ItemType.TadpoleBucket; - mappings[1022] = ItemType.TadpoleSpawnEgg; - mappings[445] = ItemType.TallGrass; - mappings[646] = ItemType.Target; - mappings[438] = ItemType.Terracotta; - mappings[1220] = ItemType.TideArmorTrimSmithingTemplate; - mappings[166] = ItemType.TintedGlass; - mappings[1109] = ItemType.TippedArrow; - mappings[653] = ItemType.Tnt; - mappings[727] = ItemType.TntMinecart; - mappings[267] = ItemType.Torch; - mappings[208] = ItemType.Torchflower; - mappings[1102] = ItemType.TorchflowerSeeds; - mappings[1112] = ItemType.TotemOfUndying; - mappings[1023] = ItemType.TraderLlamaSpawnEgg; - mappings[652] = ItemType.TrappedChest; - mappings[1133] = ItemType.Trident; - mappings[651] = ItemType.TripwireHook; - mappings[893] = ItemType.TropicalFish; - mappings[874] = ItemType.TropicalFishBucket; - mappings[1024] = ItemType.TropicalFishSpawnEgg; - mappings[574] = ItemType.TubeCoral; - mappings[569] = ItemType.TubeCoralBlock; - mappings[584] = ItemType.TubeCoralFan; - mappings[12] = ItemType.Tuff; - mappings[563] = ItemType.TurtleEgg; - mappings[752] = ItemType.TurtleHelmet; - mappings[1025] = ItemType.TurtleSpawnEgg; - mappings[218] = ItemType.TwistingVines; - mappings[1207] = ItemType.VerdantFroglight; - mappings[1219] = ItemType.VexArmorTrimSmithingTemplate; - mappings[1026] = ItemType.VexSpawnEgg; - mappings[1027] = ItemType.VillagerSpawnEgg; - mappings[1028] = ItemType.VindicatorSpawnEgg; - mappings[335] = ItemType.Vine; - mappings[1029] = ItemType.WanderingTraderSpawnEgg; - mappings[1217] = ItemType.WardArmorTrimSmithingTemplate; - mappings[1030] = ItemType.WardenSpawnEgg; - mappings[668] = ItemType.WarpedButton; - mappings[695] = ItemType.WarpedDoor; - mappings[297] = ItemType.WarpedFence; - mappings[718] = ItemType.WarpedFenceGate; - mappings[213] = ItemType.WarpedFungus; - mappings[730] = ItemType.WarpedFungusOnAStick; - mappings[863] = ItemType.WarpedHangingSign; - mappings[152] = ItemType.WarpedHyphae; - mappings[21] = ItemType.WarpedNylium; - mappings[33] = ItemType.WarpedPlanks; - mappings[683] = ItemType.WarpedPressurePlate; - mappings[215] = ItemType.WarpedRoots; - mappings[852] = ItemType.WarpedSign; - mappings[239] = ItemType.WarpedSlab; - mappings[370] = ItemType.WarpedStairs; - mappings[120] = ItemType.WarpedStem; - mappings[707] = ItemType.WarpedTrapdoor; - mappings[494] = ItemType.WarpedWartBlock; - mappings[865] = ItemType.WaterBucket; - mappings[93] = ItemType.WaxedCopperBlock; - mappings[97] = ItemType.WaxedCutCopper; - mappings[105] = ItemType.WaxedCutCopperSlab; - mappings[101] = ItemType.WaxedCutCopperStairs; - mappings[94] = ItemType.WaxedExposedCopper; - mappings[98] = ItemType.WaxedExposedCutCopper; - mappings[106] = ItemType.WaxedExposedCutCopperSlab; - mappings[102] = ItemType.WaxedExposedCutCopperStairs; - mappings[96] = ItemType.WaxedOxidizedCopper; - mappings[100] = ItemType.WaxedOxidizedCutCopper; - mappings[108] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[104] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[95] = ItemType.WaxedWeatheredCopper; - mappings[99] = ItemType.WaxedWeatheredCutCopper; - mappings[107] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[103] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[79] = ItemType.WeatheredCopper; - mappings[83] = ItemType.WeatheredCutCopper; - mappings[91] = ItemType.WeatheredCutCopperSlab; - mappings[87] = ItemType.WeatheredCutCopperStairs; - mappings[217] = ItemType.WeepingVines; - mappings[164] = ItemType.WetSponge; - mappings[810] = ItemType.Wheat; - mappings[809] = ItemType.WheatSeeds; - mappings[1083] = ItemType.WhiteBanner; - mappings[920] = ItemType.WhiteBed; - mappings[1185] = ItemType.WhiteCandle; - mappings[422] = ItemType.WhiteCarpet; - mappings[531] = ItemType.WhiteConcrete; - mappings[547] = ItemType.WhiteConcretePowder; - mappings[900] = ItemType.WhiteDye; - mappings[515] = ItemType.WhiteGlazedTerracotta; - mappings[499] = ItemType.WhiteShulkerBox; - mappings[447] = ItemType.WhiteStainedGlass; - mappings[463] = ItemType.WhiteStainedGlassPane; - mappings[403] = ItemType.WhiteTerracotta; - mappings[202] = ItemType.WhiteTulip; - mappings[179] = ItemType.WhiteWool; - mappings[1216] = ItemType.WildArmorTrimSmithingTemplate; - mappings[1031] = ItemType.WitchSpawnEgg; - mappings[207] = ItemType.WitherRose; - mappings[1054] = ItemType.WitherSkeletonSkull; - mappings[1033] = ItemType.WitherSkeletonSpawnEgg; - mappings[1032] = ItemType.WitherSpawnEgg; - mappings[1034] = ItemType.WolfSpawnEgg; - mappings[776] = ItemType.WoodenAxe; - mappings[777] = ItemType.WoodenHoe; - mappings[775] = ItemType.WoodenPickaxe; - mappings[774] = ItemType.WoodenShovel; - mappings[773] = ItemType.WoodenSword; - mappings[1042] = ItemType.WritableBook; - mappings[1043] = ItemType.WrittenBook; - mappings[1087] = ItemType.YellowBanner; - mappings[924] = ItemType.YellowBed; - mappings[1189] = ItemType.YellowCandle; - mappings[426] = ItemType.YellowCarpet; - mappings[535] = ItemType.YellowConcrete; - mappings[551] = ItemType.YellowConcretePowder; - mappings[904] = ItemType.YellowDye; - mappings[519] = ItemType.YellowGlazedTerracotta; - mappings[503] = ItemType.YellowShulkerBox; - mappings[451] = ItemType.YellowStainedGlass; - mappings[467] = ItemType.YellowStainedGlassPane; - mappings[407] = ItemType.YellowTerracotta; - mappings[183] = ItemType.YellowWool; - mappings[1035] = ItemType.ZoglinSpawnEgg; - mappings[1056] = ItemType.ZombieHead; - mappings[1037] = ItemType.ZombieHorseSpawnEgg; - mappings[1036] = ItemType.ZombieSpawnEgg; - mappings[1038] = ItemType.ZombieVillagerSpawnEgg; - mappings[1039] = ItemType.ZombifiedPiglinSpawnEgg; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette120.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette120.cs deleted file mode 100644 index 2ca03bed78..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette120.cs +++ /dev/null @@ -1,1273 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette120 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette120() - { - mappings[744] = ItemType.AcaciaBoat; - mappings[666] = ItemType.AcaciaButton; - mappings[745] = ItemType.AcaciaChestBoat; - mappings[693] = ItemType.AcaciaDoor; - mappings[293] = ItemType.AcaciaFence; - mappings[716] = ItemType.AcaciaFenceGate; - mappings[861] = ItemType.AcaciaHangingSign; - mappings[158] = ItemType.AcaciaLeaves; - mappings[114] = ItemType.AcaciaLog; - mappings[27] = ItemType.AcaciaPlanks; - mappings[681] = ItemType.AcaciaPressurePlate; - mappings[39] = ItemType.AcaciaSapling; - mappings[850] = ItemType.AcaciaSign; - mappings[234] = ItemType.AcaciaSlab; - mappings[365] = ItemType.AcaciaStairs; - mappings[705] = ItemType.AcaciaTrapdoor; - mappings[148] = ItemType.AcaciaWood; - mappings[726] = ItemType.ActivatorRail; - mappings[0] = ItemType.Air; - mappings[967] = ItemType.AllaySpawnEgg; - mappings[199] = ItemType.Allium; - mappings[72] = ItemType.AmethystBlock; - mappings[1210] = ItemType.AmethystCluster; - mappings[768] = ItemType.AmethystShard; - mappings[67] = ItemType.AncientDebris; - mappings[6] = ItemType.Andesite; - mappings[626] = ItemType.AndesiteSlab; - mappings[609] = ItemType.AndesiteStairs; - mappings[385] = ItemType.AndesiteWall; - mappings[1235] = ItemType.AnglerPotterySherd; - mappings[397] = ItemType.Anvil; - mappings[759] = ItemType.Apple; - mappings[1236] = ItemType.ArcherPotterySherd; - mappings[1077] = ItemType.ArmorStand; - mappings[1237] = ItemType.ArmsUpPotterySherd; - mappings[761] = ItemType.Arrow; - mappings[879] = ItemType.AxolotlBucket; - mappings[968] = ItemType.AxolotlSpawnEgg; - mappings[175] = ItemType.Azalea; - mappings[162] = ItemType.AzaleaLeaves; - mappings[200] = ItemType.AzureBluet; - mappings[1053] = ItemType.BakedPotato; - mappings[229] = ItemType.Bamboo; - mappings[122] = ItemType.BambooBlock; - mappings[670] = ItemType.BambooButton; - mappings[753] = ItemType.BambooChestRaft; - mappings[697] = ItemType.BambooDoor; - mappings[297] = ItemType.BambooFence; - mappings[720] = ItemType.BambooFenceGate; - mappings[865] = ItemType.BambooHangingSign; - mappings[34] = ItemType.BambooMosaic; - mappings[239] = ItemType.BambooMosaicSlab; - mappings[370] = ItemType.BambooMosaicStairs; - mappings[31] = ItemType.BambooPlanks; - mappings[685] = ItemType.BambooPressurePlate; - mappings[752] = ItemType.BambooRaft; - mappings[854] = ItemType.BambooSign; - mappings[238] = ItemType.BambooSlab; - mappings[369] = ItemType.BambooStairs; - mappings[709] = ItemType.BambooTrapdoor; - mappings[1154] = ItemType.Barrel; - mappings[421] = ItemType.Barrier; - mappings[306] = ItemType.Basalt; - mappings[969] = ItemType.BatSpawnEgg; - mappings[374] = ItemType.Beacon; - mappings[43] = ItemType.Bedrock; - mappings[1171] = ItemType.BeeNest; - mappings[970] = ItemType.BeeSpawnEgg; - mappings[947] = ItemType.Beef; - mappings[1172] = ItemType.Beehive; - mappings[1108] = ItemType.Beetroot; - mappings[1109] = ItemType.BeetrootSeeds; - mappings[1110] = ItemType.BeetrootSoup; - mappings[1162] = ItemType.Bell; - mappings[227] = ItemType.BigDripleaf; - mappings[740] = ItemType.BirchBoat; - mappings[664] = ItemType.BirchButton; - mappings[741] = ItemType.BirchChestBoat; - mappings[691] = ItemType.BirchDoor; - mappings[291] = ItemType.BirchFence; - mappings[714] = ItemType.BirchFenceGate; - mappings[859] = ItemType.BirchHangingSign; - mappings[156] = ItemType.BirchLeaves; - mappings[112] = ItemType.BirchLog; - mappings[25] = ItemType.BirchPlanks; - mappings[679] = ItemType.BirchPressurePlate; - mappings[37] = ItemType.BirchSapling; - mappings[848] = ItemType.BirchSign; - mappings[232] = ItemType.BirchSlab; - mappings[363] = ItemType.BirchStairs; - mappings[703] = ItemType.BirchTrapdoor; - mappings[146] = ItemType.BirchWood; - mappings[1102] = ItemType.BlackBanner; - mappings[939] = ItemType.BlackBed; - mappings[1206] = ItemType.BlackCandle; - mappings[439] = ItemType.BlackCarpet; - mappings[548] = ItemType.BlackConcrete; - mappings[564] = ItemType.BlackConcretePowder; - mappings[919] = ItemType.BlackDye; - mappings[532] = ItemType.BlackGlazedTerracotta; - mappings[516] = ItemType.BlackShulkerBox; - mappings[464] = ItemType.BlackStainedGlass; - mappings[480] = ItemType.BlackStainedGlassPane; - mappings[420] = ItemType.BlackTerracotta; - mappings[195] = ItemType.BlackWool; - mappings[1177] = ItemType.Blackstone; - mappings[1178] = ItemType.BlackstoneSlab; - mappings[1179] = ItemType.BlackstoneStairs; - mappings[390] = ItemType.BlackstoneWall; - mappings[1238] = ItemType.BladePotterySherd; - mappings[1156] = ItemType.BlastFurnace; - mappings[961] = ItemType.BlazePowder; - mappings[953] = ItemType.BlazeRod; - mappings[971] = ItemType.BlazeSpawnEgg; - mappings[1098] = ItemType.BlueBanner; - mappings[935] = ItemType.BlueBed; - mappings[1202] = ItemType.BlueCandle; - mappings[435] = ItemType.BlueCarpet; - mappings[544] = ItemType.BlueConcrete; - mappings[560] = ItemType.BlueConcretePowder; - mappings[915] = ItemType.BlueDye; - mappings[528] = ItemType.BlueGlazedTerracotta; - mappings[597] = ItemType.BlueIce; - mappings[198] = ItemType.BlueOrchid; - mappings[512] = ItemType.BlueShulkerBox; - mappings[460] = ItemType.BlueStainedGlass; - mappings[476] = ItemType.BlueStainedGlassPane; - mappings[416] = ItemType.BlueTerracotta; - mappings[191] = ItemType.BlueWool; - mappings[921] = ItemType.Bone; - mappings[498] = ItemType.BoneBlock; - mappings[920] = ItemType.BoneMeal; - mappings[885] = ItemType.Book; - mappings[264] = ItemType.Bookshelf; - mappings[760] = ItemType.Bow; - mappings[808] = ItemType.Bowl; - mappings[578] = ItemType.BrainCoral; - mappings[573] = ItemType.BrainCoralBlock; - mappings[588] = ItemType.BrainCoralFan; - mappings[815] = ItemType.Bread; - mappings[1239] = ItemType.BrewerPotterySherd; - mappings[963] = ItemType.BrewingStand; - mappings[881] = ItemType.Brick; - mappings[248] = ItemType.BrickSlab; - mappings[339] = ItemType.BrickStairs; - mappings[377] = ItemType.BrickWall; - mappings[263] = ItemType.Bricks; - mappings[1099] = ItemType.BrownBanner; - mappings[936] = ItemType.BrownBed; - mappings[1203] = ItemType.BrownCandle; - mappings[436] = ItemType.BrownCarpet; - mappings[545] = ItemType.BrownConcrete; - mappings[561] = ItemType.BrownConcretePowder; - mappings[916] = ItemType.BrownDye; - mappings[529] = ItemType.BrownGlazedTerracotta; - mappings[212] = ItemType.BrownMushroom; - mappings[330] = ItemType.BrownMushroomBlock; - mappings[513] = ItemType.BrownShulkerBox; - mappings[461] = ItemType.BrownStainedGlass; - mappings[477] = ItemType.BrownStainedGlassPane; - mappings[417] = ItemType.BrownTerracotta; - mappings[192] = ItemType.BrownWool; - mappings[1217] = ItemType.Brush; - mappings[579] = ItemType.BubbleCoral; - mappings[574] = ItemType.BubbleCoralBlock; - mappings[589] = ItemType.BubbleCoralFan; - mappings[868] = ItemType.Bucket; - mappings[73] = ItemType.BuddingAmethyst; - mappings[890] = ItemType.Bundle; - mappings[1240] = ItemType.BurnPotterySherd; - mappings[286] = ItemType.Cactus; - mappings[923] = ItemType.Cake; - mappings[11] = ItemType.Calcite; - mappings[654] = ItemType.CalibratedSculkSensor; - mappings[973] = ItemType.CamelSpawnEgg; - mappings[1167] = ItemType.Campfire; - mappings[1190] = ItemType.Candle; - mappings[1051] = ItemType.Carrot; - mappings[733] = ItemType.CarrotOnAStick; - mappings[1157] = ItemType.CartographyTable; - mappings[301] = ItemType.CarvedPumpkin; - mappings[972] = ItemType.CatSpawnEgg; - mappings[964] = ItemType.Cauldron; - mappings[974] = ItemType.CaveSpiderSpawnEgg; - mappings[334] = ItemType.Chain; - mappings[493] = ItemType.ChainCommandBlock; - mappings[823] = ItemType.ChainmailBoots; - mappings[821] = ItemType.ChainmailChestplate; - mappings[820] = ItemType.ChainmailHelmet; - mappings[822] = ItemType.ChainmailLeggings; - mappings[763] = ItemType.Charcoal; - mappings[746] = ItemType.CherryBoat; - mappings[667] = ItemType.CherryButton; - mappings[747] = ItemType.CherryChestBoat; - mappings[694] = ItemType.CherryDoor; - mappings[294] = ItemType.CherryFence; - mappings[717] = ItemType.CherryFenceGate; - mappings[862] = ItemType.CherryHangingSign; - mappings[159] = ItemType.CherryLeaves; - mappings[115] = ItemType.CherryLog; - mappings[28] = ItemType.CherryPlanks; - mappings[682] = ItemType.CherryPressurePlate; - mappings[40] = ItemType.CherrySapling; - mappings[851] = ItemType.CherrySign; - mappings[235] = ItemType.CherrySlab; - mappings[366] = ItemType.CherryStairs; - mappings[706] = ItemType.CherryTrapdoor; - mappings[149] = ItemType.CherryWood; - mappings[277] = ItemType.Chest; - mappings[729] = ItemType.ChestMinecart; - mappings[949] = ItemType.Chicken; - mappings[975] = ItemType.ChickenSpawnEgg; - mappings[398] = ItemType.ChippedAnvil; - mappings[265] = ItemType.ChiseledBookshelf; - mappings[328] = ItemType.ChiseledDeepslate; - mappings[346] = ItemType.ChiseledNetherBricks; - mappings[1184] = ItemType.ChiseledPolishedBlackstone; - mappings[400] = ItemType.ChiseledQuartzBlock; - mappings[489] = ItemType.ChiseledRedSandstone; - mappings[170] = ItemType.ChiseledSandstone; - mappings[321] = ItemType.ChiseledStoneBricks; - mappings[272] = ItemType.ChorusFlower; - mappings[1104] = ItemType.ChorusFruit; - mappings[271] = ItemType.ChorusPlant; - mappings[287] = ItemType.Clay; - mappings[882] = ItemType.ClayBall; - mappings[892] = ItemType.Clock; - mappings[762] = ItemType.Coal; - mappings[68] = ItemType.CoalBlock; - mappings[49] = ItemType.CoalOre; - mappings[16] = ItemType.CoarseDirt; - mappings[1221] = ItemType.CoastArmorTrimSmithingTemplate; - mappings[9] = ItemType.CobbledDeepslate; - mappings[630] = ItemType.CobbledDeepslateSlab; - mappings[613] = ItemType.CobbledDeepslateStairs; - mappings[393] = ItemType.CobbledDeepslateWall; - mappings[22] = ItemType.Cobblestone; - mappings[247] = ItemType.CobblestoneSlab; - mappings[282] = ItemType.CobblestoneStairs; - mappings[375] = ItemType.CobblestoneWall; - mappings[172] = ItemType.Cobweb; - mappings[903] = ItemType.CocoaBeans; - mappings[895] = ItemType.Cod; - mappings[877] = ItemType.CodBucket; - mappings[976] = ItemType.CodSpawnEgg; - mappings[373] = ItemType.CommandBlock; - mappings[1084] = ItemType.CommandBlockMinecart; - mappings[639] = ItemType.Comparator; - mappings[888] = ItemType.Compass; - mappings[1153] = ItemType.Composter; - mappings[598] = ItemType.Conduit; - mappings[948] = ItemType.CookedBeef; - mappings[950] = ItemType.CookedChicken; - mappings[899] = ItemType.CookedCod; - mappings[1086] = ItemType.CookedMutton; - mappings[842] = ItemType.CookedPorkchop; - mappings[1073] = ItemType.CookedRabbit; - mappings[900] = ItemType.CookedSalmon; - mappings[940] = ItemType.Cookie; - mappings[75] = ItemType.CopperBlock; - mappings[772] = ItemType.CopperIngot; - mappings[53] = ItemType.CopperOre; - mappings[206] = ItemType.Cornflower; - mappings[977] = ItemType.CowSpawnEgg; - mappings[325] = ItemType.CrackedDeepslateBricks; - mappings[327] = ItemType.CrackedDeepslateTiles; - mappings[345] = ItemType.CrackedNetherBricks; - mappings[1188] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[320] = ItemType.CrackedStoneBricks; - mappings[278] = ItemType.CraftingTable; - mappings[1147] = ItemType.CreeperBannerPattern; - mappings[1061] = ItemType.CreeperHead; - mappings[978] = ItemType.CreeperSpawnEgg; - mappings[671] = ItemType.CrimsonButton; - mappings[698] = ItemType.CrimsonDoor; - mappings[298] = ItemType.CrimsonFence; - mappings[721] = ItemType.CrimsonFenceGate; - mappings[214] = ItemType.CrimsonFungus; - mappings[866] = ItemType.CrimsonHangingSign; - mappings[152] = ItemType.CrimsonHyphae; - mappings[20] = ItemType.CrimsonNylium; - mappings[32] = ItemType.CrimsonPlanks; - mappings[686] = ItemType.CrimsonPressurePlate; - mappings[216] = ItemType.CrimsonRoots; - mappings[855] = ItemType.CrimsonSign; - mappings[240] = ItemType.CrimsonSlab; - mappings[371] = ItemType.CrimsonStairs; - mappings[120] = ItemType.CrimsonStem; - mappings[710] = ItemType.CrimsonTrapdoor; - mappings[1143] = ItemType.Crossbow; - mappings[1176] = ItemType.CryingObsidian; - mappings[82] = ItemType.CutCopper; - mappings[90] = ItemType.CutCopperSlab; - mappings[86] = ItemType.CutCopperStairs; - mappings[490] = ItemType.CutRedSandstone; - mappings[254] = ItemType.CutRedSandstoneSlab; - mappings[171] = ItemType.CutSandstone; - mappings[245] = ItemType.CutSandstoneSlab; - mappings[1096] = ItemType.CyanBanner; - mappings[933] = ItemType.CyanBed; - mappings[1200] = ItemType.CyanCandle; - mappings[433] = ItemType.CyanCarpet; - mappings[542] = ItemType.CyanConcrete; - mappings[558] = ItemType.CyanConcretePowder; - mappings[913] = ItemType.CyanDye; - mappings[526] = ItemType.CyanGlazedTerracotta; - mappings[510] = ItemType.CyanShulkerBox; - mappings[458] = ItemType.CyanStainedGlass; - mappings[474] = ItemType.CyanStainedGlassPane; - mappings[414] = ItemType.CyanTerracotta; - mappings[189] = ItemType.CyanWool; - mappings[399] = ItemType.DamagedAnvil; - mappings[196] = ItemType.Dandelion; - mappings[1241] = ItemType.DangerPotterySherd; - mappings[748] = ItemType.DarkOakBoat; - mappings[668] = ItemType.DarkOakButton; - mappings[749] = ItemType.DarkOakChestBoat; - mappings[695] = ItemType.DarkOakDoor; - mappings[295] = ItemType.DarkOakFence; - mappings[718] = ItemType.DarkOakFenceGate; - mappings[863] = ItemType.DarkOakHangingSign; - mappings[160] = ItemType.DarkOakLeaves; - mappings[116] = ItemType.DarkOakLog; - mappings[29] = ItemType.DarkOakPlanks; - mappings[683] = ItemType.DarkOakPressurePlate; - mappings[41] = ItemType.DarkOakSapling; - mappings[852] = ItemType.DarkOakSign; - mappings[236] = ItemType.DarkOakSlab; - mappings[367] = ItemType.DarkOakStairs; - mappings[707] = ItemType.DarkOakTrapdoor; - mappings[150] = ItemType.DarkOakWood; - mappings[483] = ItemType.DarkPrismarine; - mappings[258] = ItemType.DarkPrismarineSlab; - mappings[486] = ItemType.DarkPrismarineStairs; - mappings[652] = ItemType.DaylightDetector; - mappings[582] = ItemType.DeadBrainCoral; - mappings[568] = ItemType.DeadBrainCoralBlock; - mappings[593] = ItemType.DeadBrainCoralFan; - mappings[583] = ItemType.DeadBubbleCoral; - mappings[569] = ItemType.DeadBubbleCoralBlock; - mappings[594] = ItemType.DeadBubbleCoralFan; - mappings[177] = ItemType.DeadBush; - mappings[584] = ItemType.DeadFireCoral; - mappings[570] = ItemType.DeadFireCoralBlock; - mappings[595] = ItemType.DeadFireCoralFan; - mappings[585] = ItemType.DeadHornCoral; - mappings[571] = ItemType.DeadHornCoralBlock; - mappings[596] = ItemType.DeadHornCoralFan; - mappings[586] = ItemType.DeadTubeCoral; - mappings[567] = ItemType.DeadTubeCoralBlock; - mappings[592] = ItemType.DeadTubeCoralFan; - mappings[1121] = ItemType.DebugStick; - mappings[266] = ItemType.DecoratedPot; - mappings[8] = ItemType.Deepslate; - mappings[632] = ItemType.DeepslateBrickSlab; - mappings[615] = ItemType.DeepslateBrickStairs; - mappings[395] = ItemType.DeepslateBrickWall; - mappings[324] = ItemType.DeepslateBricks; - mappings[50] = ItemType.DeepslateCoalOre; - mappings[54] = ItemType.DeepslateCopperOre; - mappings[64] = ItemType.DeepslateDiamondOre; - mappings[60] = ItemType.DeepslateEmeraldOre; - mappings[56] = ItemType.DeepslateGoldOre; - mappings[52] = ItemType.DeepslateIronOre; - mappings[62] = ItemType.DeepslateLapisOre; - mappings[58] = ItemType.DeepslateRedstoneOre; - mappings[633] = ItemType.DeepslateTileSlab; - mappings[616] = ItemType.DeepslateTileStairs; - mappings[396] = ItemType.DeepslateTileWall; - mappings[326] = ItemType.DeepslateTiles; - mappings[724] = ItemType.DetectorRail; - mappings[764] = ItemType.Diamond; - mappings[800] = ItemType.DiamondAxe; - mappings[77] = ItemType.DiamondBlock; - mappings[831] = ItemType.DiamondBoots; - mappings[829] = ItemType.DiamondChestplate; - mappings[828] = ItemType.DiamondHelmet; - mappings[801] = ItemType.DiamondHoe; - mappings[1080] = ItemType.DiamondHorseArmor; - mappings[830] = ItemType.DiamondLeggings; - mappings[63] = ItemType.DiamondOre; - mappings[799] = ItemType.DiamondPickaxe; - mappings[798] = ItemType.DiamondShovel; - mappings[797] = ItemType.DiamondSword; - mappings[4] = ItemType.Diorite; - mappings[629] = ItemType.DioriteSlab; - mappings[612] = ItemType.DioriteStairs; - mappings[389] = ItemType.DioriteWall; - mappings[15] = ItemType.Dirt; - mappings[442] = ItemType.DirtPath; - mappings[1138] = ItemType.DiscFragment5; - mappings[646] = ItemType.Dispenser; - mappings[979] = ItemType.DolphinSpawnEgg; - mappings[980] = ItemType.DonkeySpawnEgg; - mappings[1111] = ItemType.DragonBreath; - mappings[357] = ItemType.DragonEgg; - mappings[1062] = ItemType.DragonHead; - mappings[944] = ItemType.DriedKelp; - mappings[883] = ItemType.DriedKelpBlock; - mappings[13] = ItemType.DripstoneBlock; - mappings[647] = ItemType.Dropper; - mappings[981] = ItemType.DrownedSpawnEgg; - mappings[1220] = ItemType.DuneArmorTrimSmithingTemplate; - mappings[1216] = ItemType.EchoShard; - mappings[887] = ItemType.Egg; - mappings[982] = ItemType.ElderGuardianSpawnEgg; - mappings[735] = ItemType.Elytra; - mappings[765] = ItemType.Emerald; - mappings[360] = ItemType.EmeraldBlock; - mappings[59] = ItemType.EmeraldOre; - mappings[1068] = ItemType.EnchantedBook; - mappings[845] = ItemType.EnchantedGoldenApple; - mappings[353] = ItemType.EnchantingTable; - mappings[1103] = ItemType.EndCrystal; - mappings[354] = ItemType.EndPortalFrame; - mappings[270] = ItemType.EndRod; - mappings[355] = ItemType.EndStone; - mappings[622] = ItemType.EndStoneBrickSlab; - mappings[604] = ItemType.EndStoneBrickStairs; - mappings[388] = ItemType.EndStoneBrickWall; - mappings[356] = ItemType.EndStoneBricks; - mappings[359] = ItemType.EnderChest; - mappings[983] = ItemType.EnderDragonSpawnEgg; - mappings[965] = ItemType.EnderEye; - mappings[952] = ItemType.EnderPearl; - mappings[984] = ItemType.EndermanSpawnEgg; - mappings[985] = ItemType.EndermiteSpawnEgg; - mappings[986] = ItemType.EvokerSpawnEgg; - mappings[1044] = ItemType.ExperienceBottle; - mappings[1242] = ItemType.ExplorerPotterySherd; - mappings[79] = ItemType.ExposedCopper; - mappings[83] = ItemType.ExposedCutCopper; - mappings[91] = ItemType.ExposedCutCopperSlab; - mappings[87] = ItemType.ExposedCutCopperStairs; - mappings[1224] = ItemType.EyeArmorTrimSmithingTemplate; - mappings[279] = ItemType.Farmland; - mappings[811] = ItemType.Feather; - mappings[960] = ItemType.FermentedSpiderEye; - mappings[174] = ItemType.Fern; - mappings[941] = ItemType.FilledMap; - mappings[1045] = ItemType.FireCharge; - mappings[580] = ItemType.FireCoral; - mappings[575] = ItemType.FireCoralBlock; - mappings[590] = ItemType.FireCoralFan; - mappings[1066] = ItemType.FireworkRocket; - mappings[1067] = ItemType.FireworkStar; - mappings[891] = ItemType.FishingRod; - mappings[1158] = ItemType.FletchingTable; - mappings[840] = ItemType.Flint; - mappings[758] = ItemType.FlintAndSteel; - mappings[1146] = ItemType.FlowerBannerPattern; - mappings[1050] = ItemType.FlowerPot; - mappings[176] = ItemType.FloweringAzalea; - mappings[163] = ItemType.FloweringAzaleaLeaves; - mappings[987] = ItemType.FoxSpawnEgg; - mappings[1243] = ItemType.FriendPotterySherd; - mappings[988] = ItemType.FrogSpawnEgg; - mappings[1215] = ItemType.Frogspawn; - mappings[280] = ItemType.Furnace; - mappings[730] = ItemType.FurnaceMinecart; - mappings[989] = ItemType.GhastSpawnEgg; - mappings[954] = ItemType.GhastTear; - mappings[1180] = ItemType.GildedBlackstone; - mappings[166] = ItemType.Glass; - mappings[958] = ItemType.GlassBottle; - mappings[335] = ItemType.GlassPane; - mappings[966] = ItemType.GlisteringMelonSlice; - mappings[1150] = ItemType.GlobeBannerPattern; - mappings[1166] = ItemType.GlowBerries; - mappings[902] = ItemType.GlowInkSac; - mappings[1049] = ItemType.GlowItemFrame; - mappings[338] = ItemType.GlowLichen; - mappings[990] = ItemType.GlowSquidSpawnEgg; - mappings[310] = ItemType.Glowstone; - mappings[894] = ItemType.GlowstoneDust; - mappings[1152] = ItemType.GoatHorn; - mappings[991] = ItemType.GoatSpawnEgg; - mappings[76] = ItemType.GoldBlock; - mappings[774] = ItemType.GoldIngot; - mappings[955] = ItemType.GoldNugget; - mappings[55] = ItemType.GoldOre; - mappings[844] = ItemType.GoldenApple; - mappings[790] = ItemType.GoldenAxe; - mappings[835] = ItemType.GoldenBoots; - mappings[1056] = ItemType.GoldenCarrot; - mappings[833] = ItemType.GoldenChestplate; - mappings[832] = ItemType.GoldenHelmet; - mappings[791] = ItemType.GoldenHoe; - mappings[1079] = ItemType.GoldenHorseArmor; - mappings[834] = ItemType.GoldenLeggings; - mappings[789] = ItemType.GoldenPickaxe; - mappings[788] = ItemType.GoldenShovel; - mappings[787] = ItemType.GoldenSword; - mappings[2] = ItemType.Granite; - mappings[625] = ItemType.GraniteSlab; - mappings[608] = ItemType.GraniteStairs; - mappings[381] = ItemType.GraniteWall; - mappings[173] = ItemType.ShortGrass; - mappings[14] = ItemType.GrassBlock; - mappings[48] = ItemType.Gravel; - mappings[1094] = ItemType.GrayBanner; - mappings[931] = ItemType.GrayBed; - mappings[1198] = ItemType.GrayCandle; - mappings[431] = ItemType.GrayCarpet; - mappings[540] = ItemType.GrayConcrete; - mappings[556] = ItemType.GrayConcretePowder; - mappings[911] = ItemType.GrayDye; - mappings[524] = ItemType.GrayGlazedTerracotta; - mappings[508] = ItemType.GrayShulkerBox; - mappings[456] = ItemType.GrayStainedGlass; - mappings[472] = ItemType.GrayStainedGlassPane; - mappings[412] = ItemType.GrayTerracotta; - mappings[187] = ItemType.GrayWool; - mappings[1100] = ItemType.GreenBanner; - mappings[937] = ItemType.GreenBed; - mappings[1204] = ItemType.GreenCandle; - mappings[437] = ItemType.GreenCarpet; - mappings[546] = ItemType.GreenConcrete; - mappings[562] = ItemType.GreenConcretePowder; - mappings[917] = ItemType.GreenDye; - mappings[530] = ItemType.GreenGlazedTerracotta; - mappings[514] = ItemType.GreenShulkerBox; - mappings[462] = ItemType.GreenStainedGlass; - mappings[478] = ItemType.GreenStainedGlassPane; - mappings[418] = ItemType.GreenTerracotta; - mappings[193] = ItemType.GreenWool; - mappings[1159] = ItemType.Grindstone; - mappings[992] = ItemType.GuardianSpawnEgg; - mappings[812] = ItemType.Gunpowder; - mappings[226] = ItemType.HangingRoots; - mappings[423] = ItemType.HayBlock; - mappings[1142] = ItemType.HeartOfTheSea; - mappings[1244] = ItemType.HeartPotterySherd; - mappings[1245] = ItemType.HeartbreakPotterySherd; - mappings[676] = ItemType.HeavyWeightedPressurePlate; - mappings[993] = ItemType.HoglinSpawnEgg; - mappings[643] = ItemType.HoneyBlock; - mappings[1173] = ItemType.HoneyBottle; - mappings[1170] = ItemType.Honeycomb; - mappings[1174] = ItemType.HoneycombBlock; - mappings[645] = ItemType.Hopper; - mappings[732] = ItemType.HopperMinecart; - mappings[581] = ItemType.HornCoral; - mappings[576] = ItemType.HornCoralBlock; - mappings[591] = ItemType.HornCoralFan; - mappings[994] = ItemType.HorseSpawnEgg; - mappings[1234] = ItemType.HostArmorTrimSmithingTemplate; - mappings[1246] = ItemType.HowlPotterySherd; - mappings[995] = ItemType.HuskSpawnEgg; - mappings[284] = ItemType.Ice; - mappings[316] = ItemType.InfestedChiseledStoneBricks; - mappings[312] = ItemType.InfestedCobblestone; - mappings[315] = ItemType.InfestedCrackedStoneBricks; - mappings[317] = ItemType.InfestedDeepslate; - mappings[314] = ItemType.InfestedMossyStoneBricks; - mappings[311] = ItemType.InfestedStone; - mappings[313] = ItemType.InfestedStoneBricks; - mappings[901] = ItemType.InkSac; - mappings[795] = ItemType.IronAxe; - mappings[333] = ItemType.IronBars; - mappings[74] = ItemType.IronBlock; - mappings[827] = ItemType.IronBoots; - mappings[825] = ItemType.IronChestplate; - mappings[688] = ItemType.IronDoor; - mappings[996] = ItemType.IronGolemSpawnEgg; - mappings[824] = ItemType.IronHelmet; - mappings[796] = ItemType.IronHoe; - mappings[1078] = ItemType.IronHorseArmor; - mappings[770] = ItemType.IronIngot; - mappings[826] = ItemType.IronLeggings; - mappings[1119] = ItemType.IronNugget; - mappings[51] = ItemType.IronOre; - mappings[794] = ItemType.IronPickaxe; - mappings[793] = ItemType.IronShovel; - mappings[792] = ItemType.IronSword; - mappings[700] = ItemType.IronTrapdoor; - mappings[1048] = ItemType.ItemFrame; - mappings[302] = ItemType.JackOLantern; - mappings[755] = ItemType.Jigsaw; - mappings[288] = ItemType.Jukebox; - mappings[742] = ItemType.JungleBoat; - mappings[665] = ItemType.JungleButton; - mappings[743] = ItemType.JungleChestBoat; - mappings[692] = ItemType.JungleDoor; - mappings[292] = ItemType.JungleFence; - mappings[715] = ItemType.JungleFenceGate; - mappings[860] = ItemType.JungleHangingSign; - mappings[157] = ItemType.JungleLeaves; - mappings[113] = ItemType.JungleLog; - mappings[26] = ItemType.JunglePlanks; - mappings[680] = ItemType.JunglePressurePlate; - mappings[38] = ItemType.JungleSapling; - mappings[849] = ItemType.JungleSign; - mappings[233] = ItemType.JungleSlab; - mappings[364] = ItemType.JungleStairs; - mappings[704] = ItemType.JungleTrapdoor; - mappings[147] = ItemType.JungleWood; - mappings[222] = ItemType.Kelp; - mappings[1120] = ItemType.KnowledgeBook; - mappings[281] = ItemType.Ladder; - mappings[1163] = ItemType.Lantern; - mappings[168] = ItemType.LapisBlock; - mappings[766] = ItemType.LapisLazuli; - mappings[61] = ItemType.LapisOre; - mappings[1209] = ItemType.LargeAmethystBud; - mappings[448] = ItemType.LargeFern; - mappings[870] = ItemType.LavaBucket; - mappings[1082] = ItemType.Lead; - mappings[873] = ItemType.Leather; - mappings[819] = ItemType.LeatherBoots; - mappings[817] = ItemType.LeatherChestplate; - mappings[816] = ItemType.LeatherHelmet; - mappings[1081] = ItemType.LeatherHorseArmor; - mappings[818] = ItemType.LeatherLeggings; - mappings[648] = ItemType.Lectern; - mappings[650] = ItemType.Lever; - mappings[422] = ItemType.Light; - mappings[1090] = ItemType.LightBlueBanner; - mappings[927] = ItemType.LightBlueBed; - mappings[1194] = ItemType.LightBlueCandle; - mappings[427] = ItemType.LightBlueCarpet; - mappings[536] = ItemType.LightBlueConcrete; - mappings[552] = ItemType.LightBlueConcretePowder; - mappings[907] = ItemType.LightBlueDye; - mappings[520] = ItemType.LightBlueGlazedTerracotta; - mappings[504] = ItemType.LightBlueShulkerBox; - mappings[452] = ItemType.LightBlueStainedGlass; - mappings[468] = ItemType.LightBlueStainedGlassPane; - mappings[408] = ItemType.LightBlueTerracotta; - mappings[183] = ItemType.LightBlueWool; - mappings[1095] = ItemType.LightGrayBanner; - mappings[932] = ItemType.LightGrayBed; - mappings[1199] = ItemType.LightGrayCandle; - mappings[432] = ItemType.LightGrayCarpet; - mappings[541] = ItemType.LightGrayConcrete; - mappings[557] = ItemType.LightGrayConcretePowder; - mappings[912] = ItemType.LightGrayDye; - mappings[525] = ItemType.LightGrayGlazedTerracotta; - mappings[509] = ItemType.LightGrayShulkerBox; - mappings[457] = ItemType.LightGrayStainedGlass; - mappings[473] = ItemType.LightGrayStainedGlassPane; - mappings[413] = ItemType.LightGrayTerracotta; - mappings[188] = ItemType.LightGrayWool; - mappings[675] = ItemType.LightWeightedPressurePlate; - mappings[651] = ItemType.LightningRod; - mappings[444] = ItemType.Lilac; - mappings[207] = ItemType.LilyOfTheValley; - mappings[343] = ItemType.LilyPad; - mappings[1092] = ItemType.LimeBanner; - mappings[929] = ItemType.LimeBed; - mappings[1196] = ItemType.LimeCandle; - mappings[429] = ItemType.LimeCarpet; - mappings[538] = ItemType.LimeConcrete; - mappings[554] = ItemType.LimeConcretePowder; - mappings[909] = ItemType.LimeDye; - mappings[522] = ItemType.LimeGlazedTerracotta; - mappings[506] = ItemType.LimeShulkerBox; - mappings[454] = ItemType.LimeStainedGlass; - mappings[470] = ItemType.LimeStainedGlassPane; - mappings[410] = ItemType.LimeTerracotta; - mappings[185] = ItemType.LimeWool; - mappings[1115] = ItemType.LingeringPotion; - mappings[997] = ItemType.LlamaSpawnEgg; - mappings[1175] = ItemType.Lodestone; - mappings[1145] = ItemType.Loom; - mappings[1089] = ItemType.MagentaBanner; - mappings[926] = ItemType.MagentaBed; - mappings[1193] = ItemType.MagentaCandle; - mappings[426] = ItemType.MagentaCarpet; - mappings[535] = ItemType.MagentaConcrete; - mappings[551] = ItemType.MagentaConcretePowder; - mappings[906] = ItemType.MagentaDye; - mappings[519] = ItemType.MagentaGlazedTerracotta; - mappings[503] = ItemType.MagentaShulkerBox; - mappings[451] = ItemType.MagentaStainedGlass; - mappings[467] = ItemType.MagentaStainedGlassPane; - mappings[407] = ItemType.MagentaTerracotta; - mappings[182] = ItemType.MagentaWool; - mappings[494] = ItemType.MagmaBlock; - mappings[962] = ItemType.MagmaCream; - mappings[998] = ItemType.MagmaCubeSpawnEgg; - mappings[750] = ItemType.MangroveBoat; - mappings[669] = ItemType.MangroveButton; - mappings[751] = ItemType.MangroveChestBoat; - mappings[696] = ItemType.MangroveDoor; - mappings[296] = ItemType.MangroveFence; - mappings[719] = ItemType.MangroveFenceGate; - mappings[864] = ItemType.MangroveHangingSign; - mappings[161] = ItemType.MangroveLeaves; - mappings[117] = ItemType.MangroveLog; - mappings[30] = ItemType.MangrovePlanks; - mappings[684] = ItemType.MangrovePressurePlate; - mappings[42] = ItemType.MangrovePropagule; - mappings[118] = ItemType.MangroveRoots; - mappings[853] = ItemType.MangroveSign; - mappings[237] = ItemType.MangroveSlab; - mappings[368] = ItemType.MangroveStairs; - mappings[708] = ItemType.MangroveTrapdoor; - mappings[151] = ItemType.MangroveWood; - mappings[1055] = ItemType.Map; - mappings[1208] = ItemType.MediumAmethystBud; - mappings[336] = ItemType.Melon; - mappings[946] = ItemType.MelonSeeds; - mappings[943] = ItemType.MelonSlice; - mappings[874] = ItemType.MilkBucket; - mappings[728] = ItemType.Minecart; - mappings[1247] = ItemType.MinerPotterySherd; - mappings[1149] = ItemType.MojangBannerPattern; - mappings[999] = ItemType.MooshroomSpawnEgg; - mappings[225] = ItemType.MossBlock; - mappings[223] = ItemType.MossCarpet; - mappings[267] = ItemType.MossyCobblestone; - mappings[621] = ItemType.MossyCobblestoneSlab; - mappings[603] = ItemType.MossyCobblestoneStairs; - mappings[376] = ItemType.MossyCobblestoneWall; - mappings[619] = ItemType.MossyStoneBrickSlab; - mappings[601] = ItemType.MossyStoneBrickStairs; - mappings[380] = ItemType.MossyStoneBrickWall; - mappings[319] = ItemType.MossyStoneBricks; - mappings[1248] = ItemType.MournerPotterySherd; - mappings[19] = ItemType.Mud; - mappings[250] = ItemType.MudBrickSlab; - mappings[341] = ItemType.MudBrickStairs; - mappings[383] = ItemType.MudBrickWall; - mappings[323] = ItemType.MudBricks; - mappings[119] = ItemType.MuddyMangroveRoots; - mappings[1000] = ItemType.MuleSpawnEgg; - mappings[332] = ItemType.MushroomStem; - mappings[809] = ItemType.MushroomStew; - mappings[1132] = ItemType.MusicDisc11; - mappings[1122] = ItemType.MusicDisc13; - mappings[1136] = ItemType.MusicDisc5; - mappings[1124] = ItemType.MusicDiscBlocks; - mappings[1123] = ItemType.MusicDiscCat; - mappings[1125] = ItemType.MusicDiscChirp; - mappings[1126] = ItemType.MusicDiscFar; - mappings[1127] = ItemType.MusicDiscMall; - mappings[1128] = ItemType.MusicDiscMellohi; - mappings[1134] = ItemType.MusicDiscOtherside; - mappings[1137] = ItemType.MusicDiscPigstep; - mappings[1135] = ItemType.MusicDiscRelic; - mappings[1129] = ItemType.MusicDiscStal; - mappings[1130] = ItemType.MusicDiscStrad; - mappings[1133] = ItemType.MusicDiscWait; - mappings[1131] = ItemType.MusicDiscWard; - mappings[1085] = ItemType.Mutton; - mappings[342] = ItemType.Mycelium; - mappings[1083] = ItemType.NameTag; - mappings[1141] = ItemType.NautilusShell; - mappings[1069] = ItemType.NetherBrick; - mappings[347] = ItemType.NetherBrickFence; - mappings[251] = ItemType.NetherBrickSlab; - mappings[348] = ItemType.NetherBrickStairs; - mappings[384] = ItemType.NetherBrickWall; - mappings[344] = ItemType.NetherBricks; - mappings[65] = ItemType.NetherGoldOre; - mappings[66] = ItemType.NetherQuartzOre; - mappings[218] = ItemType.NetherSprouts; - mappings[1064] = ItemType.NetherStar; - mappings[956] = ItemType.NetherWart; - mappings[495] = ItemType.NetherWartBlock; - mappings[805] = ItemType.NetheriteAxe; - mappings[78] = ItemType.NetheriteBlock; - mappings[839] = ItemType.NetheriteBoots; - mappings[837] = ItemType.NetheriteChestplate; - mappings[836] = ItemType.NetheriteHelmet; - mappings[806] = ItemType.NetheriteHoe; - mappings[775] = ItemType.NetheriteIngot; - mappings[838] = ItemType.NetheriteLeggings; - mappings[804] = ItemType.NetheritePickaxe; - mappings[776] = ItemType.NetheriteScrap; - mappings[803] = ItemType.NetheriteShovel; - mappings[802] = ItemType.NetheriteSword; - mappings[1218] = ItemType.NetheriteUpgradeSmithingTemplate; - mappings[303] = ItemType.Netherrack; - mappings[659] = ItemType.NoteBlock; - mappings[736] = ItemType.OakBoat; - mappings[662] = ItemType.OakButton; - mappings[737] = ItemType.OakChestBoat; - mappings[689] = ItemType.OakDoor; - mappings[289] = ItemType.OakFence; - mappings[712] = ItemType.OakFenceGate; - mappings[857] = ItemType.OakHangingSign; - mappings[154] = ItemType.OakLeaves; - mappings[110] = ItemType.OakLog; - mappings[23] = ItemType.OakPlanks; - mappings[677] = ItemType.OakPressurePlate; - mappings[35] = ItemType.OakSapling; - mappings[846] = ItemType.OakSign; - mappings[230] = ItemType.OakSlab; - mappings[361] = ItemType.OakStairs; - mappings[701] = ItemType.OakTrapdoor; - mappings[144] = ItemType.OakWood; - mappings[644] = ItemType.Observer; - mappings[268] = ItemType.Obsidian; - mappings[1001] = ItemType.OcelotSpawnEgg; - mappings[1212] = ItemType.OchreFroglight; - mappings[1088] = ItemType.OrangeBanner; - mappings[925] = ItemType.OrangeBed; - mappings[1192] = ItemType.OrangeCandle; - mappings[425] = ItemType.OrangeCarpet; - mappings[534] = ItemType.OrangeConcrete; - mappings[550] = ItemType.OrangeConcretePowder; - mappings[905] = ItemType.OrangeDye; - mappings[518] = ItemType.OrangeGlazedTerracotta; - mappings[502] = ItemType.OrangeShulkerBox; - mappings[450] = ItemType.OrangeStainedGlass; - mappings[466] = ItemType.OrangeStainedGlassPane; - mappings[406] = ItemType.OrangeTerracotta; - mappings[202] = ItemType.OrangeTulip; - mappings[181] = ItemType.OrangeWool; - mappings[205] = ItemType.OxeyeDaisy; - mappings[81] = ItemType.OxidizedCopper; - mappings[85] = ItemType.OxidizedCutCopper; - mappings[93] = ItemType.OxidizedCutCopperSlab; - mappings[89] = ItemType.OxidizedCutCopperStairs; - mappings[441] = ItemType.PackedIce; - mappings[322] = ItemType.PackedMud; - mappings[843] = ItemType.Painting; - mappings[1002] = ItemType.PandaSpawnEgg; - mappings[884] = ItemType.Paper; - mappings[1003] = ItemType.ParrotSpawnEgg; - mappings[1214] = ItemType.PearlescentFroglight; - mappings[446] = ItemType.Peony; - mappings[246] = ItemType.PetrifiedOakSlab; - mappings[1140] = ItemType.PhantomMembrane; - mappings[1004] = ItemType.PhantomSpawnEgg; - mappings[1005] = ItemType.PigSpawnEgg; - mappings[1151] = ItemType.PiglinBannerPattern; - mappings[1007] = ItemType.PiglinBruteSpawnEgg; - mappings[1063] = ItemType.PiglinHead; - mappings[1006] = ItemType.PiglinSpawnEgg; - mappings[1008] = ItemType.PillagerSpawnEgg; - mappings[1093] = ItemType.PinkBanner; - mappings[930] = ItemType.PinkBed; - mappings[1197] = ItemType.PinkCandle; - mappings[430] = ItemType.PinkCarpet; - mappings[539] = ItemType.PinkConcrete; - mappings[555] = ItemType.PinkConcretePowder; - mappings[910] = ItemType.PinkDye; - mappings[523] = ItemType.PinkGlazedTerracotta; - mappings[224] = ItemType.PinkPetals; - mappings[507] = ItemType.PinkShulkerBox; - mappings[455] = ItemType.PinkStainedGlass; - mappings[471] = ItemType.PinkStainedGlassPane; - mappings[411] = ItemType.PinkTerracotta; - mappings[204] = ItemType.PinkTulip; - mappings[186] = ItemType.PinkWool; - mappings[640] = ItemType.Piston; - mappings[210] = ItemType.PitcherPlant; - mappings[1107] = ItemType.PitcherPod; - mappings[1059] = ItemType.PlayerHead; - mappings[1249] = ItemType.PlentyPotterySherd; - mappings[17] = ItemType.Podzol; - mappings[1211] = ItemType.PointedDripstone; - mappings[1054] = ItemType.PoisonousPotato; - mappings[1009] = ItemType.PolarBearSpawnEgg; - mappings[7] = ItemType.PolishedAndesite; - mappings[628] = ItemType.PolishedAndesiteSlab; - mappings[611] = ItemType.PolishedAndesiteStairs; - mappings[307] = ItemType.PolishedBasalt; - mappings[1181] = ItemType.PolishedBlackstone; - mappings[1186] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1187] = ItemType.PolishedBlackstoneBrickStairs; - mappings[392] = ItemType.PolishedBlackstoneBrickWall; - mappings[1185] = ItemType.PolishedBlackstoneBricks; - mappings[661] = ItemType.PolishedBlackstoneButton; - mappings[674] = ItemType.PolishedBlackstonePressurePlate; - mappings[1182] = ItemType.PolishedBlackstoneSlab; - mappings[1183] = ItemType.PolishedBlackstoneStairs; - mappings[391] = ItemType.PolishedBlackstoneWall; - mappings[10] = ItemType.PolishedDeepslate; - mappings[631] = ItemType.PolishedDeepslateSlab; - mappings[614] = ItemType.PolishedDeepslateStairs; - mappings[394] = ItemType.PolishedDeepslateWall; - mappings[5] = ItemType.PolishedDiorite; - mappings[620] = ItemType.PolishedDioriteSlab; - mappings[602] = ItemType.PolishedDioriteStairs; - mappings[3] = ItemType.PolishedGranite; - mappings[617] = ItemType.PolishedGraniteSlab; - mappings[599] = ItemType.PolishedGraniteStairs; - mappings[1105] = ItemType.PoppedChorusFruit; - mappings[197] = ItemType.Poppy; - mappings[841] = ItemType.Porkchop; - mappings[1052] = ItemType.Potato; - mappings[957] = ItemType.Potion; - mappings[871] = ItemType.PowderSnowBucket; - mappings[723] = ItemType.PoweredRail; - mappings[481] = ItemType.Prismarine; - mappings[257] = ItemType.PrismarineBrickSlab; - mappings[485] = ItemType.PrismarineBrickStairs; - mappings[482] = ItemType.PrismarineBricks; - mappings[1071] = ItemType.PrismarineCrystals; - mappings[1070] = ItemType.PrismarineShard; - mappings[256] = ItemType.PrismarineSlab; - mappings[484] = ItemType.PrismarineStairs; - mappings[378] = ItemType.PrismarineWall; - mappings[1250] = ItemType.PrizePotterySherd; - mappings[898] = ItemType.Pufferfish; - mappings[875] = ItemType.PufferfishBucket; - mappings[1010] = ItemType.PufferfishSpawnEgg; - mappings[300] = ItemType.Pumpkin; - mappings[1065] = ItemType.PumpkinPie; - mappings[945] = ItemType.PumpkinSeeds; - mappings[1097] = ItemType.PurpleBanner; - mappings[934] = ItemType.PurpleBed; - mappings[1201] = ItemType.PurpleCandle; - mappings[434] = ItemType.PurpleCarpet; - mappings[543] = ItemType.PurpleConcrete; - mappings[559] = ItemType.PurpleConcretePowder; - mappings[914] = ItemType.PurpleDye; - mappings[527] = ItemType.PurpleGlazedTerracotta; - mappings[511] = ItemType.PurpleShulkerBox; - mappings[459] = ItemType.PurpleStainedGlass; - mappings[475] = ItemType.PurpleStainedGlassPane; - mappings[415] = ItemType.PurpleTerracotta; - mappings[190] = ItemType.PurpleWool; - mappings[273] = ItemType.PurpurBlock; - mappings[274] = ItemType.PurpurPillar; - mappings[255] = ItemType.PurpurSlab; - mappings[275] = ItemType.PurpurStairs; - mappings[767] = ItemType.Quartz; - mappings[401] = ItemType.QuartzBlock; - mappings[402] = ItemType.QuartzBricks; - mappings[403] = ItemType.QuartzPillar; - mappings[252] = ItemType.QuartzSlab; - mappings[404] = ItemType.QuartzStairs; - mappings[1072] = ItemType.Rabbit; - mappings[1075] = ItemType.RabbitFoot; - mappings[1076] = ItemType.RabbitHide; - mappings[1011] = ItemType.RabbitSpawnEgg; - mappings[1074] = ItemType.RabbitStew; - mappings[725] = ItemType.Rail; - mappings[1233] = ItemType.RaiserArmorTrimSmithingTemplate; - mappings[1012] = ItemType.RavagerSpawnEgg; - mappings[771] = ItemType.RawCopper; - mappings[70] = ItemType.RawCopperBlock; - mappings[773] = ItemType.RawGold; - mappings[71] = ItemType.RawGoldBlock; - mappings[769] = ItemType.RawIron; - mappings[69] = ItemType.RawIronBlock; - mappings[889] = ItemType.RecoveryCompass; - mappings[1101] = ItemType.RedBanner; - mappings[938] = ItemType.RedBed; - mappings[1205] = ItemType.RedCandle; - mappings[438] = ItemType.RedCarpet; - mappings[547] = ItemType.RedConcrete; - mappings[563] = ItemType.RedConcretePowder; - mappings[918] = ItemType.RedDye; - mappings[531] = ItemType.RedGlazedTerracotta; - mappings[213] = ItemType.RedMushroom; - mappings[331] = ItemType.RedMushroomBlock; - mappings[627] = ItemType.RedNetherBrickSlab; - mappings[610] = ItemType.RedNetherBrickStairs; - mappings[386] = ItemType.RedNetherBrickWall; - mappings[497] = ItemType.RedNetherBricks; - mappings[47] = ItemType.RedSand; - mappings[488] = ItemType.RedSandstone; - mappings[253] = ItemType.RedSandstoneSlab; - mappings[491] = ItemType.RedSandstoneStairs; - mappings[379] = ItemType.RedSandstoneWall; - mappings[515] = ItemType.RedShulkerBox; - mappings[463] = ItemType.RedStainedGlass; - mappings[479] = ItemType.RedStainedGlassPane; - mappings[419] = ItemType.RedTerracotta; - mappings[201] = ItemType.RedTulip; - mappings[194] = ItemType.RedWool; - mappings[635] = ItemType.Redstone; - mappings[637] = ItemType.RedstoneBlock; - mappings[658] = ItemType.RedstoneLamp; - mappings[57] = ItemType.RedstoneOre; - mappings[636] = ItemType.RedstoneTorch; - mappings[329] = ItemType.ReinforcedDeepslate; - mappings[638] = ItemType.Repeater; - mappings[492] = ItemType.RepeatingCommandBlock; - mappings[1189] = ItemType.RespawnAnchor; - mappings[1228] = ItemType.RibArmorTrimSmithingTemplate; - mappings[18] = ItemType.RootedDirt; - mappings[445] = ItemType.RoseBush; - mappings[951] = ItemType.RottenFlesh; - mappings[727] = ItemType.Saddle; - mappings[896] = ItemType.Salmon; - mappings[876] = ItemType.SalmonBucket; - mappings[1013] = ItemType.SalmonSpawnEgg; - mappings[44] = ItemType.Sand; - mappings[169] = ItemType.Sandstone; - mappings[244] = ItemType.SandstoneSlab; - mappings[358] = ItemType.SandstoneStairs; - mappings[387] = ItemType.SandstoneWall; - mappings[634] = ItemType.Scaffolding; - mappings[349] = ItemType.Sculk; - mappings[351] = ItemType.SculkCatalyst; - mappings[653] = ItemType.SculkSensor; - mappings[352] = ItemType.SculkShrieker; - mappings[350] = ItemType.SculkVein; - mappings[757] = ItemType.TurtleScute; - mappings[487] = ItemType.SeaLantern; - mappings[179] = ItemType.SeaPickle; - mappings[178] = ItemType.Seagrass; - mappings[1219] = ItemType.SentryArmorTrimSmithingTemplate; - mappings[1231] = ItemType.ShaperArmorTrimSmithingTemplate; - mappings[1251] = ItemType.SheafPotterySherd; - mappings[942] = ItemType.Shears; - mappings[1014] = ItemType.SheepSpawnEgg; - mappings[1252] = ItemType.ShelterPotterySherd; - mappings[1116] = ItemType.Shield; - mappings[1169] = ItemType.Shroomlight; - mappings[500] = ItemType.ShulkerBox; - mappings[1118] = ItemType.ShulkerShell; - mappings[1015] = ItemType.ShulkerSpawnEgg; - mappings[1232] = ItemType.SilenceArmorTrimSmithingTemplate; - mappings[1016] = ItemType.SilverfishSpawnEgg; - mappings[1018] = ItemType.SkeletonHorseSpawnEgg; - mappings[1057] = ItemType.SkeletonSkull; - mappings[1017] = ItemType.SkeletonSpawnEgg; - mappings[1148] = ItemType.SkullBannerPattern; - mappings[1253] = ItemType.SkullPotterySherd; - mappings[886] = ItemType.SlimeBall; - mappings[642] = ItemType.SlimeBlock; - mappings[1019] = ItemType.SlimeSpawnEgg; - mappings[1207] = ItemType.SmallAmethystBud; - mappings[228] = ItemType.SmallDripleaf; - mappings[1160] = ItemType.SmithingTable; - mappings[1155] = ItemType.Smoker; - mappings[308] = ItemType.SmoothBasalt; - mappings[259] = ItemType.SmoothQuartz; - mappings[624] = ItemType.SmoothQuartzSlab; - mappings[607] = ItemType.SmoothQuartzStairs; - mappings[260] = ItemType.SmoothRedSandstone; - mappings[618] = ItemType.SmoothRedSandstoneSlab; - mappings[600] = ItemType.SmoothRedSandstoneStairs; - mappings[261] = ItemType.SmoothSandstone; - mappings[623] = ItemType.SmoothSandstoneSlab; - mappings[606] = ItemType.SmoothSandstoneStairs; - mappings[262] = ItemType.SmoothStone; - mappings[243] = ItemType.SmoothStoneSlab; - mappings[566] = ItemType.SnifferEgg; - mappings[1020] = ItemType.SnifferSpawnEgg; - mappings[1254] = ItemType.SnortPotterySherd; - mappings[1227] = ItemType.SnoutArmorTrimSmithingTemplate; - mappings[283] = ItemType.Snow; - mappings[285] = ItemType.SnowBlock; - mappings[1021] = ItemType.SnowGolemSpawnEgg; - mappings[872] = ItemType.Snowball; - mappings[1168] = ItemType.SoulCampfire; - mappings[1164] = ItemType.SoulLantern; - mappings[304] = ItemType.SoulSand; - mappings[305] = ItemType.SoulSoil; - mappings[309] = ItemType.SoulTorch; - mappings[276] = ItemType.Spawner; - mappings[1113] = ItemType.SpectralArrow; - mappings[959] = ItemType.SpiderEye; - mappings[1022] = ItemType.SpiderSpawnEgg; - mappings[1229] = ItemType.SpireArmorTrimSmithingTemplate; - mappings[1112] = ItemType.SplashPotion; - mappings[164] = ItemType.Sponge; - mappings[211] = ItemType.SporeBlossom; - mappings[738] = ItemType.SpruceBoat; - mappings[663] = ItemType.SpruceButton; - mappings[739] = ItemType.SpruceChestBoat; - mappings[690] = ItemType.SpruceDoor; - mappings[290] = ItemType.SpruceFence; - mappings[713] = ItemType.SpruceFenceGate; - mappings[858] = ItemType.SpruceHangingSign; - mappings[155] = ItemType.SpruceLeaves; - mappings[111] = ItemType.SpruceLog; - mappings[24] = ItemType.SprucePlanks; - mappings[678] = ItemType.SprucePressurePlate; - mappings[36] = ItemType.SpruceSapling; - mappings[847] = ItemType.SpruceSign; - mappings[231] = ItemType.SpruceSlab; - mappings[362] = ItemType.SpruceStairs; - mappings[702] = ItemType.SpruceTrapdoor; - mappings[145] = ItemType.SpruceWood; - mappings[893] = ItemType.Spyglass; - mappings[1023] = ItemType.SquidSpawnEgg; - mappings[807] = ItemType.Stick; - mappings[641] = ItemType.StickyPiston; - mappings[1] = ItemType.Stone; - mappings[785] = ItemType.StoneAxe; - mappings[249] = ItemType.StoneBrickSlab; - mappings[340] = ItemType.StoneBrickStairs; - mappings[382] = ItemType.StoneBrickWall; - mappings[318] = ItemType.StoneBricks; - mappings[660] = ItemType.StoneButton; - mappings[786] = ItemType.StoneHoe; - mappings[784] = ItemType.StonePickaxe; - mappings[673] = ItemType.StonePressurePlate; - mappings[783] = ItemType.StoneShovel; - mappings[242] = ItemType.StoneSlab; - mappings[605] = ItemType.StoneStairs; - mappings[782] = ItemType.StoneSword; - mappings[1161] = ItemType.Stonecutter; - mappings[1024] = ItemType.StraySpawnEgg; - mappings[1025] = ItemType.StriderSpawnEgg; - mappings[810] = ItemType.String; - mappings[127] = ItemType.StrippedAcaciaLog; - mappings[137] = ItemType.StrippedAcaciaWood; - mappings[143] = ItemType.StrippedBambooBlock; - mappings[125] = ItemType.StrippedBirchLog; - mappings[135] = ItemType.StrippedBirchWood; - mappings[128] = ItemType.StrippedCherryLog; - mappings[138] = ItemType.StrippedCherryWood; - mappings[141] = ItemType.StrippedCrimsonHyphae; - mappings[131] = ItemType.StrippedCrimsonStem; - mappings[129] = ItemType.StrippedDarkOakLog; - mappings[139] = ItemType.StrippedDarkOakWood; - mappings[126] = ItemType.StrippedJungleLog; - mappings[136] = ItemType.StrippedJungleWood; - mappings[130] = ItemType.StrippedMangroveLog; - mappings[140] = ItemType.StrippedMangroveWood; - mappings[123] = ItemType.StrippedOakLog; - mappings[133] = ItemType.StrippedOakWood; - mappings[124] = ItemType.StrippedSpruceLog; - mappings[134] = ItemType.StrippedSpruceWood; - mappings[142] = ItemType.StrippedWarpedHyphae; - mappings[132] = ItemType.StrippedWarpedStem; - mappings[754] = ItemType.StructureBlock; - mappings[499] = ItemType.StructureVoid; - mappings[922] = ItemType.Sugar; - mappings[221] = ItemType.SugarCane; - mappings[443] = ItemType.Sunflower; - mappings[46] = ItemType.SuspiciousGravel; - mappings[45] = ItemType.SuspiciousSand; - mappings[1144] = ItemType.SuspiciousStew; - mappings[1165] = ItemType.SweetBerries; - mappings[880] = ItemType.TadpoleBucket; - mappings[1026] = ItemType.TadpoleSpawnEgg; - mappings[447] = ItemType.TallGrass; - mappings[649] = ItemType.Target; - mappings[440] = ItemType.Terracotta; - mappings[1226] = ItemType.TideArmorTrimSmithingTemplate; - mappings[167] = ItemType.TintedGlass; - mappings[1114] = ItemType.TippedArrow; - mappings[657] = ItemType.Tnt; - mappings[731] = ItemType.TntMinecart; - mappings[269] = ItemType.Torch; - mappings[209] = ItemType.Torchflower; - mappings[1106] = ItemType.TorchflowerSeeds; - mappings[1117] = ItemType.TotemOfUndying; - mappings[1027] = ItemType.TraderLlamaSpawnEgg; - mappings[656] = ItemType.TrappedChest; - mappings[1139] = ItemType.Trident; - mappings[655] = ItemType.TripwireHook; - mappings[897] = ItemType.TropicalFish; - mappings[878] = ItemType.TropicalFishBucket; - mappings[1028] = ItemType.TropicalFishSpawnEgg; - mappings[577] = ItemType.TubeCoral; - mappings[572] = ItemType.TubeCoralBlock; - mappings[587] = ItemType.TubeCoralFan; - mappings[12] = ItemType.Tuff; - mappings[565] = ItemType.TurtleEgg; - mappings[756] = ItemType.TurtleHelmet; - mappings[1029] = ItemType.TurtleSpawnEgg; - mappings[220] = ItemType.TwistingVines; - mappings[1213] = ItemType.VerdantFroglight; - mappings[1225] = ItemType.VexArmorTrimSmithingTemplate; - mappings[1030] = ItemType.VexSpawnEgg; - mappings[1031] = ItemType.VillagerSpawnEgg; - mappings[1032] = ItemType.VindicatorSpawnEgg; - mappings[337] = ItemType.Vine; - mappings[1033] = ItemType.WanderingTraderSpawnEgg; - mappings[1223] = ItemType.WardArmorTrimSmithingTemplate; - mappings[1034] = ItemType.WardenSpawnEgg; - mappings[672] = ItemType.WarpedButton; - mappings[699] = ItemType.WarpedDoor; - mappings[299] = ItemType.WarpedFence; - mappings[722] = ItemType.WarpedFenceGate; - mappings[215] = ItemType.WarpedFungus; - mappings[734] = ItemType.WarpedFungusOnAStick; - mappings[867] = ItemType.WarpedHangingSign; - mappings[153] = ItemType.WarpedHyphae; - mappings[21] = ItemType.WarpedNylium; - mappings[33] = ItemType.WarpedPlanks; - mappings[687] = ItemType.WarpedPressurePlate; - mappings[217] = ItemType.WarpedRoots; - mappings[856] = ItemType.WarpedSign; - mappings[241] = ItemType.WarpedSlab; - mappings[372] = ItemType.WarpedStairs; - mappings[121] = ItemType.WarpedStem; - mappings[711] = ItemType.WarpedTrapdoor; - mappings[496] = ItemType.WarpedWartBlock; - mappings[869] = ItemType.WaterBucket; - mappings[94] = ItemType.WaxedCopperBlock; - mappings[98] = ItemType.WaxedCutCopper; - mappings[106] = ItemType.WaxedCutCopperSlab; - mappings[102] = ItemType.WaxedCutCopperStairs; - mappings[95] = ItemType.WaxedExposedCopper; - mappings[99] = ItemType.WaxedExposedCutCopper; - mappings[107] = ItemType.WaxedExposedCutCopperSlab; - mappings[103] = ItemType.WaxedExposedCutCopperStairs; - mappings[97] = ItemType.WaxedOxidizedCopper; - mappings[101] = ItemType.WaxedOxidizedCutCopper; - mappings[109] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[105] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[96] = ItemType.WaxedWeatheredCopper; - mappings[100] = ItemType.WaxedWeatheredCutCopper; - mappings[108] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[104] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[1230] = ItemType.WayfinderArmorTrimSmithingTemplate; - mappings[80] = ItemType.WeatheredCopper; - mappings[84] = ItemType.WeatheredCutCopper; - mappings[92] = ItemType.WeatheredCutCopperSlab; - mappings[88] = ItemType.WeatheredCutCopperStairs; - mappings[219] = ItemType.WeepingVines; - mappings[165] = ItemType.WetSponge; - mappings[814] = ItemType.Wheat; - mappings[813] = ItemType.WheatSeeds; - mappings[1087] = ItemType.WhiteBanner; - mappings[924] = ItemType.WhiteBed; - mappings[1191] = ItemType.WhiteCandle; - mappings[424] = ItemType.WhiteCarpet; - mappings[533] = ItemType.WhiteConcrete; - mappings[549] = ItemType.WhiteConcretePowder; - mappings[904] = ItemType.WhiteDye; - mappings[517] = ItemType.WhiteGlazedTerracotta; - mappings[501] = ItemType.WhiteShulkerBox; - mappings[449] = ItemType.WhiteStainedGlass; - mappings[465] = ItemType.WhiteStainedGlassPane; - mappings[405] = ItemType.WhiteTerracotta; - mappings[203] = ItemType.WhiteTulip; - mappings[180] = ItemType.WhiteWool; - mappings[1222] = ItemType.WildArmorTrimSmithingTemplate; - mappings[1035] = ItemType.WitchSpawnEgg; - mappings[208] = ItemType.WitherRose; - mappings[1058] = ItemType.WitherSkeletonSkull; - mappings[1037] = ItemType.WitherSkeletonSpawnEgg; - mappings[1036] = ItemType.WitherSpawnEgg; - mappings[1038] = ItemType.WolfSpawnEgg; - mappings[780] = ItemType.WoodenAxe; - mappings[781] = ItemType.WoodenHoe; - mappings[779] = ItemType.WoodenPickaxe; - mappings[778] = ItemType.WoodenShovel; - mappings[777] = ItemType.WoodenSword; - mappings[1046] = ItemType.WritableBook; - mappings[1047] = ItemType.WrittenBook; - mappings[1091] = ItemType.YellowBanner; - mappings[928] = ItemType.YellowBed; - mappings[1195] = ItemType.YellowCandle; - mappings[428] = ItemType.YellowCarpet; - mappings[537] = ItemType.YellowConcrete; - mappings[553] = ItemType.YellowConcretePowder; - mappings[908] = ItemType.YellowDye; - mappings[521] = ItemType.YellowGlazedTerracotta; - mappings[505] = ItemType.YellowShulkerBox; - mappings[453] = ItemType.YellowStainedGlass; - mappings[469] = ItemType.YellowStainedGlassPane; - mappings[409] = ItemType.YellowTerracotta; - mappings[184] = ItemType.YellowWool; - mappings[1039] = ItemType.ZoglinSpawnEgg; - mappings[1060] = ItemType.ZombieHead; - mappings[1041] = ItemType.ZombieHorseSpawnEgg; - mappings[1040] = ItemType.ZombieSpawnEgg; - mappings[1042] = ItemType.ZombieVillagerSpawnEgg; - mappings[1043] = ItemType.ZombifiedPiglinSpawnEgg; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1204.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette1204.cs deleted file mode 100644 index 3796e4cb9f..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1204.cs +++ /dev/null @@ -1,1330 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette1204 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette1204() - { - mappings[781] = ItemType.AcaciaBoat; - mappings[687] = ItemType.AcaciaButton; - mappings[782] = ItemType.AcaciaChestBoat; - mappings[714] = ItemType.AcaciaDoor; - mappings[314] = ItemType.AcaciaFence; - mappings[753] = ItemType.AcaciaFenceGate; - mappings[898] = ItemType.AcaciaHangingSign; - mappings[179] = ItemType.AcaciaLeaves; - mappings[135] = ItemType.AcaciaLog; - mappings[40] = ItemType.AcaciaPlanks; - mappings[702] = ItemType.AcaciaPressurePlate; - mappings[52] = ItemType.AcaciaSapling; - mappings[887] = ItemType.AcaciaSign; - mappings[255] = ItemType.AcaciaSlab; - mappings[386] = ItemType.AcaciaStairs; - mappings[734] = ItemType.AcaciaTrapdoor; - mappings[169] = ItemType.AcaciaWood; - mappings[763] = ItemType.ActivatorRail; - mappings[0] = ItemType.Air; - mappings[1005] = ItemType.AllaySpawnEgg; - mappings[220] = ItemType.Allium; - mappings[85] = ItemType.AmethystBlock; - mappings[1249] = ItemType.AmethystCluster; - mappings[805] = ItemType.AmethystShard; - mappings[80] = ItemType.AncientDebris; - mappings[6] = ItemType.Andesite; - mappings[647] = ItemType.AndesiteSlab; - mappings[630] = ItemType.AndesiteStairs; - mappings[406] = ItemType.AndesiteWall; - mappings[1274] = ItemType.AnglerPotterySherd; - mappings[418] = ItemType.Anvil; - mappings[796] = ItemType.Apple; - mappings[1275] = ItemType.ArcherPotterySherd; - mappings[1116] = ItemType.ArmorStand; - mappings[1276] = ItemType.ArmsUpPotterySherd; - mappings[798] = ItemType.Arrow; - mappings[916] = ItemType.AxolotlBucket; - mappings[1006] = ItemType.AxolotlSpawnEgg; - mappings[196] = ItemType.Azalea; - mappings[183] = ItemType.AzaleaLeaves; - mappings[221] = ItemType.AzureBluet; - mappings[1092] = ItemType.BakedPotato; - mappings[250] = ItemType.Bamboo; - mappings[143] = ItemType.BambooBlock; - mappings[691] = ItemType.BambooButton; - mappings[790] = ItemType.BambooChestRaft; - mappings[718] = ItemType.BambooDoor; - mappings[318] = ItemType.BambooFence; - mappings[757] = ItemType.BambooFenceGate; - mappings[902] = ItemType.BambooHangingSign; - mappings[47] = ItemType.BambooMosaic; - mappings[260] = ItemType.BambooMosaicSlab; - mappings[391] = ItemType.BambooMosaicStairs; - mappings[44] = ItemType.BambooPlanks; - mappings[706] = ItemType.BambooPressurePlate; - mappings[789] = ItemType.BambooRaft; - mappings[891] = ItemType.BambooSign; - mappings[259] = ItemType.BambooSlab; - mappings[390] = ItemType.BambooStairs; - mappings[738] = ItemType.BambooTrapdoor; - mappings[1193] = ItemType.Barrel; - mappings[442] = ItemType.Barrier; - mappings[327] = ItemType.Basalt; - mappings[1007] = ItemType.BatSpawnEgg; - mappings[395] = ItemType.Beacon; - mappings[56] = ItemType.Bedrock; - mappings[1210] = ItemType.BeeNest; - mappings[1008] = ItemType.BeeSpawnEgg; - mappings[985] = ItemType.Beef; - mappings[1211] = ItemType.Beehive; - mappings[1147] = ItemType.Beetroot; - mappings[1148] = ItemType.BeetrootSeeds; - mappings[1149] = ItemType.BeetrootSoup; - mappings[1201] = ItemType.Bell; - mappings[248] = ItemType.BigDripleaf; - mappings[777] = ItemType.BirchBoat; - mappings[685] = ItemType.BirchButton; - mappings[778] = ItemType.BirchChestBoat; - mappings[712] = ItemType.BirchDoor; - mappings[312] = ItemType.BirchFence; - mappings[751] = ItemType.BirchFenceGate; - mappings[896] = ItemType.BirchHangingSign; - mappings[177] = ItemType.BirchLeaves; - mappings[133] = ItemType.BirchLog; - mappings[38] = ItemType.BirchPlanks; - mappings[700] = ItemType.BirchPressurePlate; - mappings[50] = ItemType.BirchSapling; - mappings[885] = ItemType.BirchSign; - mappings[253] = ItemType.BirchSlab; - mappings[384] = ItemType.BirchStairs; - mappings[732] = ItemType.BirchTrapdoor; - mappings[167] = ItemType.BirchWood; - mappings[1141] = ItemType.BlackBanner; - mappings[976] = ItemType.BlackBed; - mappings[1245] = ItemType.BlackCandle; - mappings[460] = ItemType.BlackCarpet; - mappings[569] = ItemType.BlackConcrete; - mappings[585] = ItemType.BlackConcretePowder; - mappings[956] = ItemType.BlackDye; - mappings[553] = ItemType.BlackGlazedTerracotta; - mappings[537] = ItemType.BlackShulkerBox; - mappings[485] = ItemType.BlackStainedGlass; - mappings[501] = ItemType.BlackStainedGlassPane; - mappings[441] = ItemType.BlackTerracotta; - mappings[216] = ItemType.BlackWool; - mappings[1216] = ItemType.Blackstone; - mappings[1217] = ItemType.BlackstoneSlab; - mappings[1218] = ItemType.BlackstoneStairs; - mappings[411] = ItemType.BlackstoneWall; - mappings[1277] = ItemType.BladePotterySherd; - mappings[1195] = ItemType.BlastFurnace; - mappings[999] = ItemType.BlazePowder; - mappings[991] = ItemType.BlazeRod; - mappings[1009] = ItemType.BlazeSpawnEgg; - mappings[1137] = ItemType.BlueBanner; - mappings[972] = ItemType.BlueBed; - mappings[1241] = ItemType.BlueCandle; - mappings[456] = ItemType.BlueCarpet; - mappings[565] = ItemType.BlueConcrete; - mappings[581] = ItemType.BlueConcretePowder; - mappings[952] = ItemType.BlueDye; - mappings[549] = ItemType.BlueGlazedTerracotta; - mappings[618] = ItemType.BlueIce; - mappings[219] = ItemType.BlueOrchid; - mappings[533] = ItemType.BlueShulkerBox; - mappings[481] = ItemType.BlueStainedGlass; - mappings[497] = ItemType.BlueStainedGlassPane; - mappings[437] = ItemType.BlueTerracotta; - mappings[212] = ItemType.BlueWool; - mappings[958] = ItemType.Bone; - mappings[519] = ItemType.BoneBlock; - mappings[957] = ItemType.BoneMeal; - mappings[922] = ItemType.Book; - mappings[285] = ItemType.Bookshelf; - mappings[797] = ItemType.Bow; - mappings[845] = ItemType.Bowl; - mappings[599] = ItemType.BrainCoral; - mappings[594] = ItemType.BrainCoralBlock; - mappings[609] = ItemType.BrainCoralFan; - mappings[852] = ItemType.Bread; - mappings[1010] = ItemType.BreezeSpawnEgg; - mappings[1278] = ItemType.BrewerPotterySherd; - mappings[1001] = ItemType.BrewingStand; - mappings[918] = ItemType.Brick; - mappings[269] = ItemType.BrickSlab; - mappings[360] = ItemType.BrickStairs; - mappings[398] = ItemType.BrickWall; - mappings[284] = ItemType.Bricks; - mappings[1138] = ItemType.BrownBanner; - mappings[973] = ItemType.BrownBed; - mappings[1242] = ItemType.BrownCandle; - mappings[457] = ItemType.BrownCarpet; - mappings[566] = ItemType.BrownConcrete; - mappings[582] = ItemType.BrownConcretePowder; - mappings[953] = ItemType.BrownDye; - mappings[550] = ItemType.BrownGlazedTerracotta; - mappings[233] = ItemType.BrownMushroom; - mappings[351] = ItemType.BrownMushroomBlock; - mappings[534] = ItemType.BrownShulkerBox; - mappings[482] = ItemType.BrownStainedGlass; - mappings[498] = ItemType.BrownStainedGlassPane; - mappings[438] = ItemType.BrownTerracotta; - mappings[213] = ItemType.BrownWool; - mappings[1256] = ItemType.Brush; - mappings[600] = ItemType.BubbleCoral; - mappings[595] = ItemType.BubbleCoralBlock; - mappings[610] = ItemType.BubbleCoralFan; - mappings[905] = ItemType.Bucket; - mappings[86] = ItemType.BuddingAmethyst; - mappings[927] = ItemType.Bundle; - mappings[1279] = ItemType.BurnPotterySherd; - mappings[307] = ItemType.Cactus; - mappings[960] = ItemType.Cake; - mappings[11] = ItemType.Calcite; - mappings[675] = ItemType.CalibratedSculkSensor; - mappings[1012] = ItemType.CamelSpawnEgg; - mappings[1206] = ItemType.Campfire; - mappings[1229] = ItemType.Candle; - mappings[1090] = ItemType.Carrot; - mappings[770] = ItemType.CarrotOnAStick; - mappings[1196] = ItemType.CartographyTable; - mappings[322] = ItemType.CarvedPumpkin; - mappings[1011] = ItemType.CatSpawnEgg; - mappings[1002] = ItemType.Cauldron; - mappings[1013] = ItemType.CaveSpiderSpawnEgg; - mappings[355] = ItemType.Chain; - mappings[514] = ItemType.ChainCommandBlock; - mappings[860] = ItemType.ChainmailBoots; - mappings[858] = ItemType.ChainmailChestplate; - mappings[857] = ItemType.ChainmailHelmet; - mappings[859] = ItemType.ChainmailLeggings; - mappings[800] = ItemType.Charcoal; - mappings[783] = ItemType.CherryBoat; - mappings[688] = ItemType.CherryButton; - mappings[784] = ItemType.CherryChestBoat; - mappings[715] = ItemType.CherryDoor; - mappings[315] = ItemType.CherryFence; - mappings[754] = ItemType.CherryFenceGate; - mappings[899] = ItemType.CherryHangingSign; - mappings[180] = ItemType.CherryLeaves; - mappings[136] = ItemType.CherryLog; - mappings[41] = ItemType.CherryPlanks; - mappings[703] = ItemType.CherryPressurePlate; - mappings[53] = ItemType.CherrySapling; - mappings[888] = ItemType.CherrySign; - mappings[256] = ItemType.CherrySlab; - mappings[387] = ItemType.CherryStairs; - mappings[735] = ItemType.CherryTrapdoor; - mappings[170] = ItemType.CherryWood; - mappings[298] = ItemType.Chest; - mappings[766] = ItemType.ChestMinecart; - mappings[987] = ItemType.Chicken; - mappings[1014] = ItemType.ChickenSpawnEgg; - mappings[419] = ItemType.ChippedAnvil; - mappings[286] = ItemType.ChiseledBookshelf; - mappings[95] = ItemType.ChiseledCopper; - mappings[349] = ItemType.ChiseledDeepslate; - mappings[367] = ItemType.ChiseledNetherBricks; - mappings[1223] = ItemType.ChiseledPolishedBlackstone; - mappings[421] = ItemType.ChiseledQuartzBlock; - mappings[510] = ItemType.ChiseledRedSandstone; - mappings[191] = ItemType.ChiseledSandstone; - mappings[342] = ItemType.ChiseledStoneBricks; - mappings[16] = ItemType.ChiseledTuff; - mappings[25] = ItemType.ChiseledTuffBricks; - mappings[293] = ItemType.ChorusFlower; - mappings[1143] = ItemType.ChorusFruit; - mappings[292] = ItemType.ChorusPlant; - mappings[308] = ItemType.Clay; - mappings[919] = ItemType.ClayBall; - mappings[929] = ItemType.Clock; - mappings[799] = ItemType.Coal; - mappings[81] = ItemType.CoalBlock; - mappings[62] = ItemType.CoalOre; - mappings[29] = ItemType.CoarseDirt; - mappings[1260] = ItemType.CoastArmorTrimSmithingTemplate; - mappings[9] = ItemType.CobbledDeepslate; - mappings[651] = ItemType.CobbledDeepslateSlab; - mappings[634] = ItemType.CobbledDeepslateStairs; - mappings[414] = ItemType.CobbledDeepslateWall; - mappings[35] = ItemType.Cobblestone; - mappings[268] = ItemType.CobblestoneSlab; - mappings[303] = ItemType.CobblestoneStairs; - mappings[396] = ItemType.CobblestoneWall; - mappings[193] = ItemType.Cobweb; - mappings[940] = ItemType.CocoaBeans; - mappings[932] = ItemType.Cod; - mappings[914] = ItemType.CodBucket; - mappings[1015] = ItemType.CodSpawnEgg; - mappings[394] = ItemType.CommandBlock; - mappings[1123] = ItemType.CommandBlockMinecart; - mappings[660] = ItemType.Comparator; - mappings[925] = ItemType.Compass; - mappings[1192] = ItemType.Composter; - mappings[619] = ItemType.Conduit; - mappings[986] = ItemType.CookedBeef; - mappings[988] = ItemType.CookedChicken; - mappings[936] = ItemType.CookedCod; - mappings[1125] = ItemType.CookedMutton; - mappings[879] = ItemType.CookedPorkchop; - mappings[1112] = ItemType.CookedRabbit; - mappings[937] = ItemType.CookedSalmon; - mappings[977] = ItemType.Cookie; - mappings[88] = ItemType.CopperBlock; - mappings[1302] = ItemType.CopperBulb; - mappings[721] = ItemType.CopperDoor; - mappings[1294] = ItemType.CopperGrate; - mappings[809] = ItemType.CopperIngot; - mappings[66] = ItemType.CopperOre; - mappings[741] = ItemType.CopperTrapdoor; - mappings[227] = ItemType.Cornflower; - mappings[1016] = ItemType.CowSpawnEgg; - mappings[346] = ItemType.CrackedDeepslateBricks; - mappings[348] = ItemType.CrackedDeepslateTiles; - mappings[366] = ItemType.CrackedNetherBricks; - mappings[1227] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[341] = ItemType.CrackedStoneBricks; - mappings[978] = ItemType.Crafter; - mappings[299] = ItemType.CraftingTable; - mappings[1186] = ItemType.CreeperBannerPattern; - mappings[1100] = ItemType.CreeperHead; - mappings[1017] = ItemType.CreeperSpawnEgg; - mappings[692] = ItemType.CrimsonButton; - mappings[719] = ItemType.CrimsonDoor; - mappings[319] = ItemType.CrimsonFence; - mappings[758] = ItemType.CrimsonFenceGate; - mappings[235] = ItemType.CrimsonFungus; - mappings[903] = ItemType.CrimsonHangingSign; - mappings[173] = ItemType.CrimsonHyphae; - mappings[33] = ItemType.CrimsonNylium; - mappings[45] = ItemType.CrimsonPlanks; - mappings[707] = ItemType.CrimsonPressurePlate; - mappings[237] = ItemType.CrimsonRoots; - mappings[892] = ItemType.CrimsonSign; - mappings[261] = ItemType.CrimsonSlab; - mappings[392] = ItemType.CrimsonStairs; - mappings[141] = ItemType.CrimsonStem; - mappings[739] = ItemType.CrimsonTrapdoor; - mappings[1182] = ItemType.Crossbow; - mappings[1215] = ItemType.CryingObsidian; - mappings[99] = ItemType.CutCopper; - mappings[107] = ItemType.CutCopperSlab; - mappings[103] = ItemType.CutCopperStairs; - mappings[511] = ItemType.CutRedSandstone; - mappings[275] = ItemType.CutRedSandstoneSlab; - mappings[192] = ItemType.CutSandstone; - mappings[266] = ItemType.CutSandstoneSlab; - mappings[1135] = ItemType.CyanBanner; - mappings[970] = ItemType.CyanBed; - mappings[1239] = ItemType.CyanCandle; - mappings[454] = ItemType.CyanCarpet; - mappings[563] = ItemType.CyanConcrete; - mappings[579] = ItemType.CyanConcretePowder; - mappings[950] = ItemType.CyanDye; - mappings[547] = ItemType.CyanGlazedTerracotta; - mappings[531] = ItemType.CyanShulkerBox; - mappings[479] = ItemType.CyanStainedGlass; - mappings[495] = ItemType.CyanStainedGlassPane; - mappings[435] = ItemType.CyanTerracotta; - mappings[210] = ItemType.CyanWool; - mappings[420] = ItemType.DamagedAnvil; - mappings[217] = ItemType.Dandelion; - mappings[1280] = ItemType.DangerPotterySherd; - mappings[785] = ItemType.DarkOakBoat; - mappings[689] = ItemType.DarkOakButton; - mappings[786] = ItemType.DarkOakChestBoat; - mappings[716] = ItemType.DarkOakDoor; - mappings[316] = ItemType.DarkOakFence; - mappings[755] = ItemType.DarkOakFenceGate; - mappings[900] = ItemType.DarkOakHangingSign; - mappings[181] = ItemType.DarkOakLeaves; - mappings[137] = ItemType.DarkOakLog; - mappings[42] = ItemType.DarkOakPlanks; - mappings[704] = ItemType.DarkOakPressurePlate; - mappings[54] = ItemType.DarkOakSapling; - mappings[889] = ItemType.DarkOakSign; - mappings[257] = ItemType.DarkOakSlab; - mappings[388] = ItemType.DarkOakStairs; - mappings[736] = ItemType.DarkOakTrapdoor; - mappings[171] = ItemType.DarkOakWood; - mappings[504] = ItemType.DarkPrismarine; - mappings[279] = ItemType.DarkPrismarineSlab; - mappings[507] = ItemType.DarkPrismarineStairs; - mappings[673] = ItemType.DaylightDetector; - mappings[603] = ItemType.DeadBrainCoral; - mappings[589] = ItemType.DeadBrainCoralBlock; - mappings[614] = ItemType.DeadBrainCoralFan; - mappings[604] = ItemType.DeadBubbleCoral; - mappings[590] = ItemType.DeadBubbleCoralBlock; - mappings[615] = ItemType.DeadBubbleCoralFan; - mappings[198] = ItemType.DeadBush; - mappings[605] = ItemType.DeadFireCoral; - mappings[591] = ItemType.DeadFireCoralBlock; - mappings[616] = ItemType.DeadFireCoralFan; - mappings[606] = ItemType.DeadHornCoral; - mappings[592] = ItemType.DeadHornCoralBlock; - mappings[617] = ItemType.DeadHornCoralFan; - mappings[607] = ItemType.DeadTubeCoral; - mappings[588] = ItemType.DeadTubeCoralBlock; - mappings[613] = ItemType.DeadTubeCoralFan; - mappings[1160] = ItemType.DebugStick; - mappings[287] = ItemType.DecoratedPot; - mappings[8] = ItemType.Deepslate; - mappings[653] = ItemType.DeepslateBrickSlab; - mappings[636] = ItemType.DeepslateBrickStairs; - mappings[416] = ItemType.DeepslateBrickWall; - mappings[345] = ItemType.DeepslateBricks; - mappings[63] = ItemType.DeepslateCoalOre; - mappings[67] = ItemType.DeepslateCopperOre; - mappings[77] = ItemType.DeepslateDiamondOre; - mappings[73] = ItemType.DeepslateEmeraldOre; - mappings[69] = ItemType.DeepslateGoldOre; - mappings[65] = ItemType.DeepslateIronOre; - mappings[75] = ItemType.DeepslateLapisOre; - mappings[71] = ItemType.DeepslateRedstoneOre; - mappings[654] = ItemType.DeepslateTileSlab; - mappings[637] = ItemType.DeepslateTileStairs; - mappings[417] = ItemType.DeepslateTileWall; - mappings[347] = ItemType.DeepslateTiles; - mappings[761] = ItemType.DetectorRail; - mappings[801] = ItemType.Diamond; - mappings[837] = ItemType.DiamondAxe; - mappings[90] = ItemType.DiamondBlock; - mappings[868] = ItemType.DiamondBoots; - mappings[866] = ItemType.DiamondChestplate; - mappings[865] = ItemType.DiamondHelmet; - mappings[838] = ItemType.DiamondHoe; - mappings[1119] = ItemType.DiamondHorseArmor; - mappings[867] = ItemType.DiamondLeggings; - mappings[76] = ItemType.DiamondOre; - mappings[836] = ItemType.DiamondPickaxe; - mappings[835] = ItemType.DiamondShovel; - mappings[834] = ItemType.DiamondSword; - mappings[4] = ItemType.Diorite; - mappings[650] = ItemType.DioriteSlab; - mappings[633] = ItemType.DioriteStairs; - mappings[410] = ItemType.DioriteWall; - mappings[28] = ItemType.Dirt; - mappings[463] = ItemType.DirtPath; - mappings[1177] = ItemType.DiscFragment5; - mappings[667] = ItemType.Dispenser; - mappings[1018] = ItemType.DolphinSpawnEgg; - mappings[1019] = ItemType.DonkeySpawnEgg; - mappings[1150] = ItemType.DragonBreath; - mappings[378] = ItemType.DragonEgg; - mappings[1101] = ItemType.DragonHead; - mappings[982] = ItemType.DriedKelp; - mappings[920] = ItemType.DriedKelpBlock; - mappings[26] = ItemType.DripstoneBlock; - mappings[668] = ItemType.Dropper; - mappings[1020] = ItemType.DrownedSpawnEgg; - mappings[1259] = ItemType.DuneArmorTrimSmithingTemplate; - mappings[1255] = ItemType.EchoShard; - mappings[924] = ItemType.Egg; - mappings[1021] = ItemType.ElderGuardianSpawnEgg; - mappings[772] = ItemType.Elytra; - mappings[802] = ItemType.Emerald; - mappings[381] = ItemType.EmeraldBlock; - mappings[72] = ItemType.EmeraldOre; - mappings[1107] = ItemType.EnchantedBook; - mappings[882] = ItemType.EnchantedGoldenApple; - mappings[374] = ItemType.EnchantingTable; - mappings[1142] = ItemType.EndCrystal; - mappings[375] = ItemType.EndPortalFrame; - mappings[291] = ItemType.EndRod; - mappings[376] = ItemType.EndStone; - mappings[643] = ItemType.EndStoneBrickSlab; - mappings[625] = ItemType.EndStoneBrickStairs; - mappings[409] = ItemType.EndStoneBrickWall; - mappings[377] = ItemType.EndStoneBricks; - mappings[380] = ItemType.EnderChest; - mappings[1022] = ItemType.EnderDragonSpawnEgg; - mappings[1003] = ItemType.EnderEye; - mappings[990] = ItemType.EnderPearl; - mappings[1023] = ItemType.EndermanSpawnEgg; - mappings[1024] = ItemType.EndermiteSpawnEgg; - mappings[1025] = ItemType.EvokerSpawnEgg; - mappings[1083] = ItemType.ExperienceBottle; - mappings[1281] = ItemType.ExplorerPotterySherd; - mappings[96] = ItemType.ExposedChiseledCopper; - mappings[92] = ItemType.ExposedCopper; - mappings[1303] = ItemType.ExposedCopperBulb; - mappings[722] = ItemType.ExposedCopperDoor; - mappings[1295] = ItemType.ExposedCopperGrate; - mappings[742] = ItemType.ExposedCopperTrapdoor; - mappings[100] = ItemType.ExposedCutCopper; - mappings[108] = ItemType.ExposedCutCopperSlab; - mappings[104] = ItemType.ExposedCutCopperStairs; - mappings[1263] = ItemType.EyeArmorTrimSmithingTemplate; - mappings[300] = ItemType.Farmland; - mappings[848] = ItemType.Feather; - mappings[998] = ItemType.FermentedSpiderEye; - mappings[195] = ItemType.Fern; - mappings[979] = ItemType.FilledMap; - mappings[1084] = ItemType.FireCharge; - mappings[601] = ItemType.FireCoral; - mappings[596] = ItemType.FireCoralBlock; - mappings[611] = ItemType.FireCoralFan; - mappings[1105] = ItemType.FireworkRocket; - mappings[1106] = ItemType.FireworkStar; - mappings[928] = ItemType.FishingRod; - mappings[1197] = ItemType.FletchingTable; - mappings[877] = ItemType.Flint; - mappings[795] = ItemType.FlintAndSteel; - mappings[1185] = ItemType.FlowerBannerPattern; - mappings[1089] = ItemType.FlowerPot; - mappings[197] = ItemType.FloweringAzalea; - mappings[184] = ItemType.FloweringAzaleaLeaves; - mappings[1026] = ItemType.FoxSpawnEgg; - mappings[1282] = ItemType.FriendPotterySherd; - mappings[1027] = ItemType.FrogSpawnEgg; - mappings[1254] = ItemType.Frogspawn; - mappings[301] = ItemType.Furnace; - mappings[767] = ItemType.FurnaceMinecart; - mappings[1028] = ItemType.GhastSpawnEgg; - mappings[992] = ItemType.GhastTear; - mappings[1219] = ItemType.GildedBlackstone; - mappings[187] = ItemType.Glass; - mappings[996] = ItemType.GlassBottle; - mappings[356] = ItemType.GlassPane; - mappings[1004] = ItemType.GlisteringMelonSlice; - mappings[1189] = ItemType.GlobeBannerPattern; - mappings[1205] = ItemType.GlowBerries; - mappings[939] = ItemType.GlowInkSac; - mappings[1088] = ItemType.GlowItemFrame; - mappings[359] = ItemType.GlowLichen; - mappings[1029] = ItemType.GlowSquidSpawnEgg; - mappings[331] = ItemType.Glowstone; - mappings[931] = ItemType.GlowstoneDust; - mappings[1191] = ItemType.GoatHorn; - mappings[1030] = ItemType.GoatSpawnEgg; - mappings[89] = ItemType.GoldBlock; - mappings[811] = ItemType.GoldIngot; - mappings[993] = ItemType.GoldNugget; - mappings[68] = ItemType.GoldOre; - mappings[881] = ItemType.GoldenApple; - mappings[827] = ItemType.GoldenAxe; - mappings[872] = ItemType.GoldenBoots; - mappings[1095] = ItemType.GoldenCarrot; - mappings[870] = ItemType.GoldenChestplate; - mappings[869] = ItemType.GoldenHelmet; - mappings[828] = ItemType.GoldenHoe; - mappings[1118] = ItemType.GoldenHorseArmor; - mappings[871] = ItemType.GoldenLeggings; - mappings[826] = ItemType.GoldenPickaxe; - mappings[825] = ItemType.GoldenShovel; - mappings[824] = ItemType.GoldenSword; - mappings[2] = ItemType.Granite; - mappings[646] = ItemType.GraniteSlab; - mappings[629] = ItemType.GraniteStairs; - mappings[402] = ItemType.GraniteWall; - mappings[27] = ItemType.GrassBlock; - mappings[61] = ItemType.Gravel; - mappings[1133] = ItemType.GrayBanner; - mappings[968] = ItemType.GrayBed; - mappings[1237] = ItemType.GrayCandle; - mappings[452] = ItemType.GrayCarpet; - mappings[561] = ItemType.GrayConcrete; - mappings[577] = ItemType.GrayConcretePowder; - mappings[948] = ItemType.GrayDye; - mappings[545] = ItemType.GrayGlazedTerracotta; - mappings[529] = ItemType.GrayShulkerBox; - mappings[477] = ItemType.GrayStainedGlass; - mappings[493] = ItemType.GrayStainedGlassPane; - mappings[433] = ItemType.GrayTerracotta; - mappings[208] = ItemType.GrayWool; - mappings[1139] = ItemType.GreenBanner; - mappings[974] = ItemType.GreenBed; - mappings[1243] = ItemType.GreenCandle; - mappings[458] = ItemType.GreenCarpet; - mappings[567] = ItemType.GreenConcrete; - mappings[583] = ItemType.GreenConcretePowder; - mappings[954] = ItemType.GreenDye; - mappings[551] = ItemType.GreenGlazedTerracotta; - mappings[535] = ItemType.GreenShulkerBox; - mappings[483] = ItemType.GreenStainedGlass; - mappings[499] = ItemType.GreenStainedGlassPane; - mappings[439] = ItemType.GreenTerracotta; - mappings[214] = ItemType.GreenWool; - mappings[1198] = ItemType.Grindstone; - mappings[1031] = ItemType.GuardianSpawnEgg; - mappings[849] = ItemType.Gunpowder; - mappings[247] = ItemType.HangingRoots; - mappings[444] = ItemType.HayBlock; - mappings[1181] = ItemType.HeartOfTheSea; - mappings[1283] = ItemType.HeartPotterySherd; - mappings[1284] = ItemType.HeartbreakPotterySherd; - mappings[697] = ItemType.HeavyWeightedPressurePlate; - mappings[1032] = ItemType.HoglinSpawnEgg; - mappings[664] = ItemType.HoneyBlock; - mappings[1212] = ItemType.HoneyBottle; - mappings[1209] = ItemType.Honeycomb; - mappings[1213] = ItemType.HoneycombBlock; - mappings[666] = ItemType.Hopper; - mappings[769] = ItemType.HopperMinecart; - mappings[602] = ItemType.HornCoral; - mappings[597] = ItemType.HornCoralBlock; - mappings[612] = ItemType.HornCoralFan; - mappings[1033] = ItemType.HorseSpawnEgg; - mappings[1273] = ItemType.HostArmorTrimSmithingTemplate; - mappings[1285] = ItemType.HowlPotterySherd; - mappings[1034] = ItemType.HuskSpawnEgg; - mappings[305] = ItemType.Ice; - mappings[337] = ItemType.InfestedChiseledStoneBricks; - mappings[333] = ItemType.InfestedCobblestone; - mappings[336] = ItemType.InfestedCrackedStoneBricks; - mappings[338] = ItemType.InfestedDeepslate; - mappings[335] = ItemType.InfestedMossyStoneBricks; - mappings[332] = ItemType.InfestedStone; - mappings[334] = ItemType.InfestedStoneBricks; - mappings[938] = ItemType.InkSac; - mappings[832] = ItemType.IronAxe; - mappings[354] = ItemType.IronBars; - mappings[87] = ItemType.IronBlock; - mappings[864] = ItemType.IronBoots; - mappings[862] = ItemType.IronChestplate; - mappings[709] = ItemType.IronDoor; - mappings[1035] = ItemType.IronGolemSpawnEgg; - mappings[861] = ItemType.IronHelmet; - mappings[833] = ItemType.IronHoe; - mappings[1117] = ItemType.IronHorseArmor; - mappings[807] = ItemType.IronIngot; - mappings[863] = ItemType.IronLeggings; - mappings[1158] = ItemType.IronNugget; - mappings[64] = ItemType.IronOre; - mappings[831] = ItemType.IronPickaxe; - mappings[830] = ItemType.IronShovel; - mappings[829] = ItemType.IronSword; - mappings[729] = ItemType.IronTrapdoor; - mappings[1087] = ItemType.ItemFrame; - mappings[323] = ItemType.JackOLantern; - mappings[792] = ItemType.Jigsaw; - mappings[309] = ItemType.Jukebox; - mappings[779] = ItemType.JungleBoat; - mappings[686] = ItemType.JungleButton; - mappings[780] = ItemType.JungleChestBoat; - mappings[713] = ItemType.JungleDoor; - mappings[313] = ItemType.JungleFence; - mappings[752] = ItemType.JungleFenceGate; - mappings[897] = ItemType.JungleHangingSign; - mappings[178] = ItemType.JungleLeaves; - mappings[134] = ItemType.JungleLog; - mappings[39] = ItemType.JunglePlanks; - mappings[701] = ItemType.JunglePressurePlate; - mappings[51] = ItemType.JungleSapling; - mappings[886] = ItemType.JungleSign; - mappings[254] = ItemType.JungleSlab; - mappings[385] = ItemType.JungleStairs; - mappings[733] = ItemType.JungleTrapdoor; - mappings[168] = ItemType.JungleWood; - mappings[243] = ItemType.Kelp; - mappings[1159] = ItemType.KnowledgeBook; - mappings[302] = ItemType.Ladder; - mappings[1202] = ItemType.Lantern; - mappings[189] = ItemType.LapisBlock; - mappings[803] = ItemType.LapisLazuli; - mappings[74] = ItemType.LapisOre; - mappings[1248] = ItemType.LargeAmethystBud; - mappings[469] = ItemType.LargeFern; - mappings[907] = ItemType.LavaBucket; - mappings[1121] = ItemType.Lead; - mappings[910] = ItemType.Leather; - mappings[856] = ItemType.LeatherBoots; - mappings[854] = ItemType.LeatherChestplate; - mappings[853] = ItemType.LeatherHelmet; - mappings[1120] = ItemType.LeatherHorseArmor; - mappings[855] = ItemType.LeatherLeggings; - mappings[669] = ItemType.Lectern; - mappings[671] = ItemType.Lever; - mappings[443] = ItemType.Light; - mappings[1129] = ItemType.LightBlueBanner; - mappings[964] = ItemType.LightBlueBed; - mappings[1233] = ItemType.LightBlueCandle; - mappings[448] = ItemType.LightBlueCarpet; - mappings[557] = ItemType.LightBlueConcrete; - mappings[573] = ItemType.LightBlueConcretePowder; - mappings[944] = ItemType.LightBlueDye; - mappings[541] = ItemType.LightBlueGlazedTerracotta; - mappings[525] = ItemType.LightBlueShulkerBox; - mappings[473] = ItemType.LightBlueStainedGlass; - mappings[489] = ItemType.LightBlueStainedGlassPane; - mappings[429] = ItemType.LightBlueTerracotta; - mappings[204] = ItemType.LightBlueWool; - mappings[1134] = ItemType.LightGrayBanner; - mappings[969] = ItemType.LightGrayBed; - mappings[1238] = ItemType.LightGrayCandle; - mappings[453] = ItemType.LightGrayCarpet; - mappings[562] = ItemType.LightGrayConcrete; - mappings[578] = ItemType.LightGrayConcretePowder; - mappings[949] = ItemType.LightGrayDye; - mappings[546] = ItemType.LightGrayGlazedTerracotta; - mappings[530] = ItemType.LightGrayShulkerBox; - mappings[478] = ItemType.LightGrayStainedGlass; - mappings[494] = ItemType.LightGrayStainedGlassPane; - mappings[434] = ItemType.LightGrayTerracotta; - mappings[209] = ItemType.LightGrayWool; - mappings[696] = ItemType.LightWeightedPressurePlate; - mappings[672] = ItemType.LightningRod; - mappings[465] = ItemType.Lilac; - mappings[228] = ItemType.LilyOfTheValley; - mappings[364] = ItemType.LilyPad; - mappings[1131] = ItemType.LimeBanner; - mappings[966] = ItemType.LimeBed; - mappings[1235] = ItemType.LimeCandle; - mappings[450] = ItemType.LimeCarpet; - mappings[559] = ItemType.LimeConcrete; - mappings[575] = ItemType.LimeConcretePowder; - mappings[946] = ItemType.LimeDye; - mappings[543] = ItemType.LimeGlazedTerracotta; - mappings[527] = ItemType.LimeShulkerBox; - mappings[475] = ItemType.LimeStainedGlass; - mappings[491] = ItemType.LimeStainedGlassPane; - mappings[431] = ItemType.LimeTerracotta; - mappings[206] = ItemType.LimeWool; - mappings[1154] = ItemType.LingeringPotion; - mappings[1036] = ItemType.LlamaSpawnEgg; - mappings[1214] = ItemType.Lodestone; - mappings[1184] = ItemType.Loom; - mappings[1128] = ItemType.MagentaBanner; - mappings[963] = ItemType.MagentaBed; - mappings[1232] = ItemType.MagentaCandle; - mappings[447] = ItemType.MagentaCarpet; - mappings[556] = ItemType.MagentaConcrete; - mappings[572] = ItemType.MagentaConcretePowder; - mappings[943] = ItemType.MagentaDye; - mappings[540] = ItemType.MagentaGlazedTerracotta; - mappings[524] = ItemType.MagentaShulkerBox; - mappings[472] = ItemType.MagentaStainedGlass; - mappings[488] = ItemType.MagentaStainedGlassPane; - mappings[428] = ItemType.MagentaTerracotta; - mappings[203] = ItemType.MagentaWool; - mappings[515] = ItemType.MagmaBlock; - mappings[1000] = ItemType.MagmaCream; - mappings[1037] = ItemType.MagmaCubeSpawnEgg; - mappings[787] = ItemType.MangroveBoat; - mappings[690] = ItemType.MangroveButton; - mappings[788] = ItemType.MangroveChestBoat; - mappings[717] = ItemType.MangroveDoor; - mappings[317] = ItemType.MangroveFence; - mappings[756] = ItemType.MangroveFenceGate; - mappings[901] = ItemType.MangroveHangingSign; - mappings[182] = ItemType.MangroveLeaves; - mappings[138] = ItemType.MangroveLog; - mappings[43] = ItemType.MangrovePlanks; - mappings[705] = ItemType.MangrovePressurePlate; - mappings[55] = ItemType.MangrovePropagule; - mappings[139] = ItemType.MangroveRoots; - mappings[890] = ItemType.MangroveSign; - mappings[258] = ItemType.MangroveSlab; - mappings[389] = ItemType.MangroveStairs; - mappings[737] = ItemType.MangroveTrapdoor; - mappings[172] = ItemType.MangroveWood; - mappings[1094] = ItemType.Map; - mappings[1247] = ItemType.MediumAmethystBud; - mappings[357] = ItemType.Melon; - mappings[984] = ItemType.MelonSeeds; - mappings[981] = ItemType.MelonSlice; - mappings[911] = ItemType.MilkBucket; - mappings[765] = ItemType.Minecart; - mappings[1286] = ItemType.MinerPotterySherd; - mappings[1188] = ItemType.MojangBannerPattern; - mappings[1038] = ItemType.MooshroomSpawnEgg; - mappings[246] = ItemType.MossBlock; - mappings[244] = ItemType.MossCarpet; - mappings[288] = ItemType.MossyCobblestone; - mappings[642] = ItemType.MossyCobblestoneSlab; - mappings[624] = ItemType.MossyCobblestoneStairs; - mappings[397] = ItemType.MossyCobblestoneWall; - mappings[640] = ItemType.MossyStoneBrickSlab; - mappings[622] = ItemType.MossyStoneBrickStairs; - mappings[401] = ItemType.MossyStoneBrickWall; - mappings[340] = ItemType.MossyStoneBricks; - mappings[1287] = ItemType.MournerPotterySherd; - mappings[32] = ItemType.Mud; - mappings[271] = ItemType.MudBrickSlab; - mappings[362] = ItemType.MudBrickStairs; - mappings[404] = ItemType.MudBrickWall; - mappings[344] = ItemType.MudBricks; - mappings[140] = ItemType.MuddyMangroveRoots; - mappings[1039] = ItemType.MuleSpawnEgg; - mappings[353] = ItemType.MushroomStem; - mappings[846] = ItemType.MushroomStew; - mappings[1171] = ItemType.MusicDisc11; - mappings[1161] = ItemType.MusicDisc13; - mappings[1175] = ItemType.MusicDisc5; - mappings[1163] = ItemType.MusicDiscBlocks; - mappings[1162] = ItemType.MusicDiscCat; - mappings[1164] = ItemType.MusicDiscChirp; - mappings[1165] = ItemType.MusicDiscFar; - mappings[1166] = ItemType.MusicDiscMall; - mappings[1167] = ItemType.MusicDiscMellohi; - mappings[1173] = ItemType.MusicDiscOtherside; - mappings[1176] = ItemType.MusicDiscPigstep; - mappings[1174] = ItemType.MusicDiscRelic; - mappings[1168] = ItemType.MusicDiscStal; - mappings[1169] = ItemType.MusicDiscStrad; - mappings[1172] = ItemType.MusicDiscWait; - mappings[1170] = ItemType.MusicDiscWard; - mappings[1124] = ItemType.Mutton; - mappings[363] = ItemType.Mycelium; - mappings[1122] = ItemType.NameTag; - mappings[1180] = ItemType.NautilusShell; - mappings[1108] = ItemType.NetherBrick; - mappings[368] = ItemType.NetherBrickFence; - mappings[272] = ItemType.NetherBrickSlab; - mappings[369] = ItemType.NetherBrickStairs; - mappings[405] = ItemType.NetherBrickWall; - mappings[365] = ItemType.NetherBricks; - mappings[78] = ItemType.NetherGoldOre; - mappings[79] = ItemType.NetherQuartzOre; - mappings[239] = ItemType.NetherSprouts; - mappings[1103] = ItemType.NetherStar; - mappings[994] = ItemType.NetherWart; - mappings[516] = ItemType.NetherWartBlock; - mappings[842] = ItemType.NetheriteAxe; - mappings[91] = ItemType.NetheriteBlock; - mappings[876] = ItemType.NetheriteBoots; - mappings[874] = ItemType.NetheriteChestplate; - mappings[873] = ItemType.NetheriteHelmet; - mappings[843] = ItemType.NetheriteHoe; - mappings[812] = ItemType.NetheriteIngot; - mappings[875] = ItemType.NetheriteLeggings; - mappings[841] = ItemType.NetheritePickaxe; - mappings[813] = ItemType.NetheriteScrap; - mappings[840] = ItemType.NetheriteShovel; - mappings[839] = ItemType.NetheriteSword; - mappings[1257] = ItemType.NetheriteUpgradeSmithingTemplate; - mappings[324] = ItemType.Netherrack; - mappings[680] = ItemType.NoteBlock; - mappings[773] = ItemType.OakBoat; - mappings[683] = ItemType.OakButton; - mappings[774] = ItemType.OakChestBoat; - mappings[710] = ItemType.OakDoor; - mappings[310] = ItemType.OakFence; - mappings[749] = ItemType.OakFenceGate; - mappings[894] = ItemType.OakHangingSign; - mappings[175] = ItemType.OakLeaves; - mappings[131] = ItemType.OakLog; - mappings[36] = ItemType.OakPlanks; - mappings[698] = ItemType.OakPressurePlate; - mappings[48] = ItemType.OakSapling; - mappings[883] = ItemType.OakSign; - mappings[251] = ItemType.OakSlab; - mappings[382] = ItemType.OakStairs; - mappings[730] = ItemType.OakTrapdoor; - mappings[165] = ItemType.OakWood; - mappings[665] = ItemType.Observer; - mappings[289] = ItemType.Obsidian; - mappings[1040] = ItemType.OcelotSpawnEgg; - mappings[1251] = ItemType.OchreFroglight; - mappings[1127] = ItemType.OrangeBanner; - mappings[962] = ItemType.OrangeBed; - mappings[1231] = ItemType.OrangeCandle; - mappings[446] = ItemType.OrangeCarpet; - mappings[555] = ItemType.OrangeConcrete; - mappings[571] = ItemType.OrangeConcretePowder; - mappings[942] = ItemType.OrangeDye; - mappings[539] = ItemType.OrangeGlazedTerracotta; - mappings[523] = ItemType.OrangeShulkerBox; - mappings[471] = ItemType.OrangeStainedGlass; - mappings[487] = ItemType.OrangeStainedGlassPane; - mappings[427] = ItemType.OrangeTerracotta; - mappings[223] = ItemType.OrangeTulip; - mappings[202] = ItemType.OrangeWool; - mappings[226] = ItemType.OxeyeDaisy; - mappings[98] = ItemType.OxidizedChiseledCopper; - mappings[94] = ItemType.OxidizedCopper; - mappings[1305] = ItemType.OxidizedCopperBulb; - mappings[724] = ItemType.OxidizedCopperDoor; - mappings[1297] = ItemType.OxidizedCopperGrate; - mappings[744] = ItemType.OxidizedCopperTrapdoor; - mappings[102] = ItemType.OxidizedCutCopper; - mappings[110] = ItemType.OxidizedCutCopperSlab; - mappings[106] = ItemType.OxidizedCutCopperStairs; - mappings[462] = ItemType.PackedIce; - mappings[343] = ItemType.PackedMud; - mappings[880] = ItemType.Painting; - mappings[1041] = ItemType.PandaSpawnEgg; - mappings[921] = ItemType.Paper; - mappings[1042] = ItemType.ParrotSpawnEgg; - mappings[1253] = ItemType.PearlescentFroglight; - mappings[467] = ItemType.Peony; - mappings[267] = ItemType.PetrifiedOakSlab; - mappings[1179] = ItemType.PhantomMembrane; - mappings[1043] = ItemType.PhantomSpawnEgg; - mappings[1044] = ItemType.PigSpawnEgg; - mappings[1190] = ItemType.PiglinBannerPattern; - mappings[1046] = ItemType.PiglinBruteSpawnEgg; - mappings[1102] = ItemType.PiglinHead; - mappings[1045] = ItemType.PiglinSpawnEgg; - mappings[1047] = ItemType.PillagerSpawnEgg; - mappings[1132] = ItemType.PinkBanner; - mappings[967] = ItemType.PinkBed; - mappings[1236] = ItemType.PinkCandle; - mappings[451] = ItemType.PinkCarpet; - mappings[560] = ItemType.PinkConcrete; - mappings[576] = ItemType.PinkConcretePowder; - mappings[947] = ItemType.PinkDye; - mappings[544] = ItemType.PinkGlazedTerracotta; - mappings[245] = ItemType.PinkPetals; - mappings[528] = ItemType.PinkShulkerBox; - mappings[476] = ItemType.PinkStainedGlass; - mappings[492] = ItemType.PinkStainedGlassPane; - mappings[432] = ItemType.PinkTerracotta; - mappings[225] = ItemType.PinkTulip; - mappings[207] = ItemType.PinkWool; - mappings[661] = ItemType.Piston; - mappings[231] = ItemType.PitcherPlant; - mappings[1146] = ItemType.PitcherPod; - mappings[1098] = ItemType.PlayerHead; - mappings[1288] = ItemType.PlentyPotterySherd; - mappings[30] = ItemType.Podzol; - mappings[1250] = ItemType.PointedDripstone; - mappings[1093] = ItemType.PoisonousPotato; - mappings[1048] = ItemType.PolarBearSpawnEgg; - mappings[7] = ItemType.PolishedAndesite; - mappings[649] = ItemType.PolishedAndesiteSlab; - mappings[632] = ItemType.PolishedAndesiteStairs; - mappings[328] = ItemType.PolishedBasalt; - mappings[1220] = ItemType.PolishedBlackstone; - mappings[1225] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1226] = ItemType.PolishedBlackstoneBrickStairs; - mappings[413] = ItemType.PolishedBlackstoneBrickWall; - mappings[1224] = ItemType.PolishedBlackstoneBricks; - mappings[682] = ItemType.PolishedBlackstoneButton; - mappings[695] = ItemType.PolishedBlackstonePressurePlate; - mappings[1221] = ItemType.PolishedBlackstoneSlab; - mappings[1222] = ItemType.PolishedBlackstoneStairs; - mappings[412] = ItemType.PolishedBlackstoneWall; - mappings[10] = ItemType.PolishedDeepslate; - mappings[652] = ItemType.PolishedDeepslateSlab; - mappings[635] = ItemType.PolishedDeepslateStairs; - mappings[415] = ItemType.PolishedDeepslateWall; - mappings[5] = ItemType.PolishedDiorite; - mappings[641] = ItemType.PolishedDioriteSlab; - mappings[623] = ItemType.PolishedDioriteStairs; - mappings[3] = ItemType.PolishedGranite; - mappings[638] = ItemType.PolishedGraniteSlab; - mappings[620] = ItemType.PolishedGraniteStairs; - mappings[17] = ItemType.PolishedTuff; - mappings[18] = ItemType.PolishedTuffSlab; - mappings[19] = ItemType.PolishedTuffStairs; - mappings[20] = ItemType.PolishedTuffWall; - mappings[1144] = ItemType.PoppedChorusFruit; - mappings[218] = ItemType.Poppy; - mappings[878] = ItemType.Porkchop; - mappings[1091] = ItemType.Potato; - mappings[995] = ItemType.Potion; - mappings[908] = ItemType.PowderSnowBucket; - mappings[760] = ItemType.PoweredRail; - mappings[502] = ItemType.Prismarine; - mappings[278] = ItemType.PrismarineBrickSlab; - mappings[506] = ItemType.PrismarineBrickStairs; - mappings[503] = ItemType.PrismarineBricks; - mappings[1110] = ItemType.PrismarineCrystals; - mappings[1109] = ItemType.PrismarineShard; - mappings[277] = ItemType.PrismarineSlab; - mappings[505] = ItemType.PrismarineStairs; - mappings[399] = ItemType.PrismarineWall; - mappings[1289] = ItemType.PrizePotterySherd; - mappings[935] = ItemType.Pufferfish; - mappings[912] = ItemType.PufferfishBucket; - mappings[1049] = ItemType.PufferfishSpawnEgg; - mappings[321] = ItemType.Pumpkin; - mappings[1104] = ItemType.PumpkinPie; - mappings[983] = ItemType.PumpkinSeeds; - mappings[1136] = ItemType.PurpleBanner; - mappings[971] = ItemType.PurpleBed; - mappings[1240] = ItemType.PurpleCandle; - mappings[455] = ItemType.PurpleCarpet; - mappings[564] = ItemType.PurpleConcrete; - mappings[580] = ItemType.PurpleConcretePowder; - mappings[951] = ItemType.PurpleDye; - mappings[548] = ItemType.PurpleGlazedTerracotta; - mappings[532] = ItemType.PurpleShulkerBox; - mappings[480] = ItemType.PurpleStainedGlass; - mappings[496] = ItemType.PurpleStainedGlassPane; - mappings[436] = ItemType.PurpleTerracotta; - mappings[211] = ItemType.PurpleWool; - mappings[294] = ItemType.PurpurBlock; - mappings[295] = ItemType.PurpurPillar; - mappings[276] = ItemType.PurpurSlab; - mappings[296] = ItemType.PurpurStairs; - mappings[804] = ItemType.Quartz; - mappings[422] = ItemType.QuartzBlock; - mappings[423] = ItemType.QuartzBricks; - mappings[424] = ItemType.QuartzPillar; - mappings[273] = ItemType.QuartzSlab; - mappings[425] = ItemType.QuartzStairs; - mappings[1111] = ItemType.Rabbit; - mappings[1114] = ItemType.RabbitFoot; - mappings[1115] = ItemType.RabbitHide; - mappings[1050] = ItemType.RabbitSpawnEgg; - mappings[1113] = ItemType.RabbitStew; - mappings[762] = ItemType.Rail; - mappings[1272] = ItemType.RaiserArmorTrimSmithingTemplate; - mappings[1051] = ItemType.RavagerSpawnEgg; - mappings[808] = ItemType.RawCopper; - mappings[83] = ItemType.RawCopperBlock; - mappings[810] = ItemType.RawGold; - mappings[84] = ItemType.RawGoldBlock; - mappings[806] = ItemType.RawIron; - mappings[82] = ItemType.RawIronBlock; - mappings[926] = ItemType.RecoveryCompass; - mappings[1140] = ItemType.RedBanner; - mappings[975] = ItemType.RedBed; - mappings[1244] = ItemType.RedCandle; - mappings[459] = ItemType.RedCarpet; - mappings[568] = ItemType.RedConcrete; - mappings[584] = ItemType.RedConcretePowder; - mappings[955] = ItemType.RedDye; - mappings[552] = ItemType.RedGlazedTerracotta; - mappings[234] = ItemType.RedMushroom; - mappings[352] = ItemType.RedMushroomBlock; - mappings[648] = ItemType.RedNetherBrickSlab; - mappings[631] = ItemType.RedNetherBrickStairs; - mappings[407] = ItemType.RedNetherBrickWall; - mappings[518] = ItemType.RedNetherBricks; - mappings[60] = ItemType.RedSand; - mappings[509] = ItemType.RedSandstone; - mappings[274] = ItemType.RedSandstoneSlab; - mappings[512] = ItemType.RedSandstoneStairs; - mappings[400] = ItemType.RedSandstoneWall; - mappings[536] = ItemType.RedShulkerBox; - mappings[484] = ItemType.RedStainedGlass; - mappings[500] = ItemType.RedStainedGlassPane; - mappings[440] = ItemType.RedTerracotta; - mappings[222] = ItemType.RedTulip; - mappings[215] = ItemType.RedWool; - mappings[656] = ItemType.Redstone; - mappings[658] = ItemType.RedstoneBlock; - mappings[679] = ItemType.RedstoneLamp; - mappings[70] = ItemType.RedstoneOre; - mappings[657] = ItemType.RedstoneTorch; - mappings[350] = ItemType.ReinforcedDeepslate; - mappings[659] = ItemType.Repeater; - mappings[513] = ItemType.RepeatingCommandBlock; - mappings[1228] = ItemType.RespawnAnchor; - mappings[1267] = ItemType.RibArmorTrimSmithingTemplate; - mappings[31] = ItemType.RootedDirt; - mappings[466] = ItemType.RoseBush; - mappings[989] = ItemType.RottenFlesh; - mappings[764] = ItemType.Saddle; - mappings[933] = ItemType.Salmon; - mappings[913] = ItemType.SalmonBucket; - mappings[1052] = ItemType.SalmonSpawnEgg; - mappings[57] = ItemType.Sand; - mappings[190] = ItemType.Sandstone; - mappings[265] = ItemType.SandstoneSlab; - mappings[379] = ItemType.SandstoneStairs; - mappings[408] = ItemType.SandstoneWall; - mappings[655] = ItemType.Scaffolding; - mappings[370] = ItemType.Sculk; - mappings[372] = ItemType.SculkCatalyst; - mappings[674] = ItemType.SculkSensor; - mappings[373] = ItemType.SculkShrieker; - mappings[371] = ItemType.SculkVein; - mappings[794] = ItemType.TurtleScute; - mappings[508] = ItemType.SeaLantern; - mappings[200] = ItemType.SeaPickle; - mappings[199] = ItemType.Seagrass; - mappings[1258] = ItemType.SentryArmorTrimSmithingTemplate; - mappings[1270] = ItemType.ShaperArmorTrimSmithingTemplate; - mappings[1290] = ItemType.SheafPotterySherd; - mappings[980] = ItemType.Shears; - mappings[1053] = ItemType.SheepSpawnEgg; - mappings[1291] = ItemType.ShelterPotterySherd; - mappings[1155] = ItemType.Shield; - mappings[194] = ItemType.ShortGrass; - mappings[1208] = ItemType.Shroomlight; - mappings[521] = ItemType.ShulkerBox; - mappings[1157] = ItemType.ShulkerShell; - mappings[1054] = ItemType.ShulkerSpawnEgg; - mappings[1271] = ItemType.SilenceArmorTrimSmithingTemplate; - mappings[1055] = ItemType.SilverfishSpawnEgg; - mappings[1057] = ItemType.SkeletonHorseSpawnEgg; - mappings[1096] = ItemType.SkeletonSkull; - mappings[1056] = ItemType.SkeletonSpawnEgg; - mappings[1187] = ItemType.SkullBannerPattern; - mappings[1292] = ItemType.SkullPotterySherd; - mappings[923] = ItemType.SlimeBall; - mappings[663] = ItemType.SlimeBlock; - mappings[1058] = ItemType.SlimeSpawnEgg; - mappings[1246] = ItemType.SmallAmethystBud; - mappings[249] = ItemType.SmallDripleaf; - mappings[1199] = ItemType.SmithingTable; - mappings[1194] = ItemType.Smoker; - mappings[329] = ItemType.SmoothBasalt; - mappings[280] = ItemType.SmoothQuartz; - mappings[645] = ItemType.SmoothQuartzSlab; - mappings[628] = ItemType.SmoothQuartzStairs; - mappings[281] = ItemType.SmoothRedSandstone; - mappings[639] = ItemType.SmoothRedSandstoneSlab; - mappings[621] = ItemType.SmoothRedSandstoneStairs; - mappings[282] = ItemType.SmoothSandstone; - mappings[644] = ItemType.SmoothSandstoneSlab; - mappings[627] = ItemType.SmoothSandstoneStairs; - mappings[283] = ItemType.SmoothStone; - mappings[264] = ItemType.SmoothStoneSlab; - mappings[587] = ItemType.SnifferEgg; - mappings[1059] = ItemType.SnifferSpawnEgg; - mappings[1293] = ItemType.SnortPotterySherd; - mappings[1266] = ItemType.SnoutArmorTrimSmithingTemplate; - mappings[304] = ItemType.Snow; - mappings[306] = ItemType.SnowBlock; - mappings[1060] = ItemType.SnowGolemSpawnEgg; - mappings[909] = ItemType.Snowball; - mappings[1207] = ItemType.SoulCampfire; - mappings[1203] = ItemType.SoulLantern; - mappings[325] = ItemType.SoulSand; - mappings[326] = ItemType.SoulSoil; - mappings[330] = ItemType.SoulTorch; - mappings[297] = ItemType.Spawner; - mappings[1152] = ItemType.SpectralArrow; - mappings[997] = ItemType.SpiderEye; - mappings[1061] = ItemType.SpiderSpawnEgg; - mappings[1268] = ItemType.SpireArmorTrimSmithingTemplate; - mappings[1151] = ItemType.SplashPotion; - mappings[185] = ItemType.Sponge; - mappings[232] = ItemType.SporeBlossom; - mappings[775] = ItemType.SpruceBoat; - mappings[684] = ItemType.SpruceButton; - mappings[776] = ItemType.SpruceChestBoat; - mappings[711] = ItemType.SpruceDoor; - mappings[311] = ItemType.SpruceFence; - mappings[750] = ItemType.SpruceFenceGate; - mappings[895] = ItemType.SpruceHangingSign; - mappings[176] = ItemType.SpruceLeaves; - mappings[132] = ItemType.SpruceLog; - mappings[37] = ItemType.SprucePlanks; - mappings[699] = ItemType.SprucePressurePlate; - mappings[49] = ItemType.SpruceSapling; - mappings[884] = ItemType.SpruceSign; - mappings[252] = ItemType.SpruceSlab; - mappings[383] = ItemType.SpruceStairs; - mappings[731] = ItemType.SpruceTrapdoor; - mappings[166] = ItemType.SpruceWood; - mappings[930] = ItemType.Spyglass; - mappings[1062] = ItemType.SquidSpawnEgg; - mappings[844] = ItemType.Stick; - mappings[662] = ItemType.StickyPiston; - mappings[1] = ItemType.Stone; - mappings[822] = ItemType.StoneAxe; - mappings[270] = ItemType.StoneBrickSlab; - mappings[361] = ItemType.StoneBrickStairs; - mappings[403] = ItemType.StoneBrickWall; - mappings[339] = ItemType.StoneBricks; - mappings[681] = ItemType.StoneButton; - mappings[823] = ItemType.StoneHoe; - mappings[821] = ItemType.StonePickaxe; - mappings[694] = ItemType.StonePressurePlate; - mappings[820] = ItemType.StoneShovel; - mappings[263] = ItemType.StoneSlab; - mappings[626] = ItemType.StoneStairs; - mappings[819] = ItemType.StoneSword; - mappings[1200] = ItemType.Stonecutter; - mappings[1063] = ItemType.StraySpawnEgg; - mappings[1064] = ItemType.StriderSpawnEgg; - mappings[847] = ItemType.String; - mappings[148] = ItemType.StrippedAcaciaLog; - mappings[158] = ItemType.StrippedAcaciaWood; - mappings[164] = ItemType.StrippedBambooBlock; - mappings[146] = ItemType.StrippedBirchLog; - mappings[156] = ItemType.StrippedBirchWood; - mappings[149] = ItemType.StrippedCherryLog; - mappings[159] = ItemType.StrippedCherryWood; - mappings[162] = ItemType.StrippedCrimsonHyphae; - mappings[152] = ItemType.StrippedCrimsonStem; - mappings[150] = ItemType.StrippedDarkOakLog; - mappings[160] = ItemType.StrippedDarkOakWood; - mappings[147] = ItemType.StrippedJungleLog; - mappings[157] = ItemType.StrippedJungleWood; - mappings[151] = ItemType.StrippedMangroveLog; - mappings[161] = ItemType.StrippedMangroveWood; - mappings[144] = ItemType.StrippedOakLog; - mappings[154] = ItemType.StrippedOakWood; - mappings[145] = ItemType.StrippedSpruceLog; - mappings[155] = ItemType.StrippedSpruceWood; - mappings[163] = ItemType.StrippedWarpedHyphae; - mappings[153] = ItemType.StrippedWarpedStem; - mappings[791] = ItemType.StructureBlock; - mappings[520] = ItemType.StructureVoid; - mappings[959] = ItemType.Sugar; - mappings[242] = ItemType.SugarCane; - mappings[464] = ItemType.Sunflower; - mappings[59] = ItemType.SuspiciousGravel; - mappings[58] = ItemType.SuspiciousSand; - mappings[1183] = ItemType.SuspiciousStew; - mappings[1204] = ItemType.SweetBerries; - mappings[917] = ItemType.TadpoleBucket; - mappings[1065] = ItemType.TadpoleSpawnEgg; - mappings[468] = ItemType.TallGrass; - mappings[670] = ItemType.Target; - mappings[461] = ItemType.Terracotta; - mappings[1265] = ItemType.TideArmorTrimSmithingTemplate; - mappings[188] = ItemType.TintedGlass; - mappings[1153] = ItemType.TippedArrow; - mappings[678] = ItemType.Tnt; - mappings[768] = ItemType.TntMinecart; - mappings[290] = ItemType.Torch; - mappings[230] = ItemType.Torchflower; - mappings[1145] = ItemType.TorchflowerSeeds; - mappings[1156] = ItemType.TotemOfUndying; - mappings[1066] = ItemType.TraderLlamaSpawnEgg; - mappings[677] = ItemType.TrappedChest; - mappings[1311] = ItemType.TrialKey; - mappings[1310] = ItemType.TrialSpawner; - mappings[1178] = ItemType.Trident; - mappings[676] = ItemType.TripwireHook; - mappings[934] = ItemType.TropicalFish; - mappings[915] = ItemType.TropicalFishBucket; - mappings[1067] = ItemType.TropicalFishSpawnEgg; - mappings[598] = ItemType.TubeCoral; - mappings[593] = ItemType.TubeCoralBlock; - mappings[608] = ItemType.TubeCoralFan; - mappings[12] = ItemType.Tuff; - mappings[22] = ItemType.TuffBrickSlab; - mappings[23] = ItemType.TuffBrickStairs; - mappings[24] = ItemType.TuffBrickWall; - mappings[21] = ItemType.TuffBricks; - mappings[13] = ItemType.TuffSlab; - mappings[14] = ItemType.TuffStairs; - mappings[15] = ItemType.TuffWall; - mappings[586] = ItemType.TurtleEgg; - mappings[793] = ItemType.TurtleHelmet; - mappings[1068] = ItemType.TurtleSpawnEgg; - mappings[241] = ItemType.TwistingVines; - mappings[1252] = ItemType.VerdantFroglight; - mappings[1264] = ItemType.VexArmorTrimSmithingTemplate; - mappings[1069] = ItemType.VexSpawnEgg; - mappings[1070] = ItemType.VillagerSpawnEgg; - mappings[1071] = ItemType.VindicatorSpawnEgg; - mappings[358] = ItemType.Vine; - mappings[1072] = ItemType.WanderingTraderSpawnEgg; - mappings[1262] = ItemType.WardArmorTrimSmithingTemplate; - mappings[1073] = ItemType.WardenSpawnEgg; - mappings[693] = ItemType.WarpedButton; - mappings[720] = ItemType.WarpedDoor; - mappings[320] = ItemType.WarpedFence; - mappings[759] = ItemType.WarpedFenceGate; - mappings[236] = ItemType.WarpedFungus; - mappings[771] = ItemType.WarpedFungusOnAStick; - mappings[904] = ItemType.WarpedHangingSign; - mappings[174] = ItemType.WarpedHyphae; - mappings[34] = ItemType.WarpedNylium; - mappings[46] = ItemType.WarpedPlanks; - mappings[708] = ItemType.WarpedPressurePlate; - mappings[238] = ItemType.WarpedRoots; - mappings[893] = ItemType.WarpedSign; - mappings[262] = ItemType.WarpedSlab; - mappings[393] = ItemType.WarpedStairs; - mappings[142] = ItemType.WarpedStem; - mappings[740] = ItemType.WarpedTrapdoor; - mappings[517] = ItemType.WarpedWartBlock; - mappings[906] = ItemType.WaterBucket; - mappings[115] = ItemType.WaxedChiseledCopper; - mappings[111] = ItemType.WaxedCopperBlock; - mappings[1306] = ItemType.WaxedCopperBulb; - mappings[725] = ItemType.WaxedCopperDoor; - mappings[1298] = ItemType.WaxedCopperGrate; - mappings[745] = ItemType.WaxedCopperTrapdoor; - mappings[119] = ItemType.WaxedCutCopper; - mappings[127] = ItemType.WaxedCutCopperSlab; - mappings[123] = ItemType.WaxedCutCopperStairs; - mappings[116] = ItemType.WaxedExposedChiseledCopper; - mappings[112] = ItemType.WaxedExposedCopper; - mappings[1307] = ItemType.WaxedExposedCopperBulb; - mappings[726] = ItemType.WaxedExposedCopperDoor; - mappings[1299] = ItemType.WaxedExposedCopperGrate; - mappings[746] = ItemType.WaxedExposedCopperTrapdoor; - mappings[120] = ItemType.WaxedExposedCutCopper; - mappings[128] = ItemType.WaxedExposedCutCopperSlab; - mappings[124] = ItemType.WaxedExposedCutCopperStairs; - mappings[118] = ItemType.WaxedOxidizedChiseledCopper; - mappings[114] = ItemType.WaxedOxidizedCopper; - mappings[1309] = ItemType.WaxedOxidizedCopperBulb; - mappings[728] = ItemType.WaxedOxidizedCopperDoor; - mappings[1301] = ItemType.WaxedOxidizedCopperGrate; - mappings[748] = ItemType.WaxedOxidizedCopperTrapdoor; - mappings[122] = ItemType.WaxedOxidizedCutCopper; - mappings[130] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[126] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[117] = ItemType.WaxedWeatheredChiseledCopper; - mappings[113] = ItemType.WaxedWeatheredCopper; - mappings[1308] = ItemType.WaxedWeatheredCopperBulb; - mappings[727] = ItemType.WaxedWeatheredCopperDoor; - mappings[1300] = ItemType.WaxedWeatheredCopperGrate; - mappings[747] = ItemType.WaxedWeatheredCopperTrapdoor; - mappings[121] = ItemType.WaxedWeatheredCutCopper; - mappings[129] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[125] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[1269] = ItemType.WayfinderArmorTrimSmithingTemplate; - mappings[97] = ItemType.WeatheredChiseledCopper; - mappings[93] = ItemType.WeatheredCopper; - mappings[1304] = ItemType.WeatheredCopperBulb; - mappings[723] = ItemType.WeatheredCopperDoor; - mappings[1296] = ItemType.WeatheredCopperGrate; - mappings[743] = ItemType.WeatheredCopperTrapdoor; - mappings[101] = ItemType.WeatheredCutCopper; - mappings[109] = ItemType.WeatheredCutCopperSlab; - mappings[105] = ItemType.WeatheredCutCopperStairs; - mappings[240] = ItemType.WeepingVines; - mappings[186] = ItemType.WetSponge; - mappings[851] = ItemType.Wheat; - mappings[850] = ItemType.WheatSeeds; - mappings[1126] = ItemType.WhiteBanner; - mappings[961] = ItemType.WhiteBed; - mappings[1230] = ItemType.WhiteCandle; - mappings[445] = ItemType.WhiteCarpet; - mappings[554] = ItemType.WhiteConcrete; - mappings[570] = ItemType.WhiteConcretePowder; - mappings[941] = ItemType.WhiteDye; - mappings[538] = ItemType.WhiteGlazedTerracotta; - mappings[522] = ItemType.WhiteShulkerBox; - mappings[470] = ItemType.WhiteStainedGlass; - mappings[486] = ItemType.WhiteStainedGlassPane; - mappings[426] = ItemType.WhiteTerracotta; - mappings[224] = ItemType.WhiteTulip; - mappings[201] = ItemType.WhiteWool; - mappings[1261] = ItemType.WildArmorTrimSmithingTemplate; - mappings[1074] = ItemType.WitchSpawnEgg; - mappings[229] = ItemType.WitherRose; - mappings[1097] = ItemType.WitherSkeletonSkull; - mappings[1076] = ItemType.WitherSkeletonSpawnEgg; - mappings[1075] = ItemType.WitherSpawnEgg; - mappings[1077] = ItemType.WolfSpawnEgg; - mappings[817] = ItemType.WoodenAxe; - mappings[818] = ItemType.WoodenHoe; - mappings[816] = ItemType.WoodenPickaxe; - mappings[815] = ItemType.WoodenShovel; - mappings[814] = ItemType.WoodenSword; - mappings[1085] = ItemType.WritableBook; - mappings[1086] = ItemType.WrittenBook; - mappings[1130] = ItemType.YellowBanner; - mappings[965] = ItemType.YellowBed; - mappings[1234] = ItemType.YellowCandle; - mappings[449] = ItemType.YellowCarpet; - mappings[558] = ItemType.YellowConcrete; - mappings[574] = ItemType.YellowConcretePowder; - mappings[945] = ItemType.YellowDye; - mappings[542] = ItemType.YellowGlazedTerracotta; - mappings[526] = ItemType.YellowShulkerBox; - mappings[474] = ItemType.YellowStainedGlass; - mappings[490] = ItemType.YellowStainedGlassPane; - mappings[430] = ItemType.YellowTerracotta; - mappings[205] = ItemType.YellowWool; - mappings[1078] = ItemType.ZoglinSpawnEgg; - mappings[1099] = ItemType.ZombieHead; - mappings[1080] = ItemType.ZombieHorseSpawnEgg; - mappings[1079] = ItemType.ZombieSpawnEgg; - mappings[1081] = ItemType.ZombieVillagerSpawnEgg; - mappings[1082] = ItemType.ZombifiedPiglinSpawnEgg; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1206.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette1206.cs deleted file mode 100644 index d0dceeeb09..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1206.cs +++ /dev/null @@ -1,1348 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette1206 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette1206() - { - mappings[782] = ItemType.AcaciaBoat; - mappings[688] = ItemType.AcaciaButton; - mappings[783] = ItemType.AcaciaChestBoat; - mappings[715] = ItemType.AcaciaDoor; - mappings[315] = ItemType.AcaciaFence; - mappings[754] = ItemType.AcaciaFenceGate; - mappings[901] = ItemType.AcaciaHangingSign; - mappings[180] = ItemType.AcaciaLeaves; - mappings[136] = ItemType.AcaciaLog; - mappings[40] = ItemType.AcaciaPlanks; - mappings[703] = ItemType.AcaciaPressurePlate; - mappings[52] = ItemType.AcaciaSapling; - mappings[890] = ItemType.AcaciaSign; - mappings[256] = ItemType.AcaciaSlab; - mappings[387] = ItemType.AcaciaStairs; - mappings[735] = ItemType.AcaciaTrapdoor; - mappings[170] = ItemType.AcaciaWood; - mappings[764] = ItemType.ActivatorRail; - mappings[0] = ItemType.Air; - mappings[1009] = ItemType.AllaySpawnEgg; - mappings[221] = ItemType.Allium; - mappings[86] = ItemType.AmethystBlock; - mappings[1258] = ItemType.AmethystCluster; - mappings[808] = ItemType.AmethystShard; - mappings[80] = ItemType.AncientDebris; - mappings[6] = ItemType.Andesite; - mappings[648] = ItemType.AndesiteSlab; - mappings[631] = ItemType.AndesiteStairs; - mappings[407] = ItemType.AndesiteWall; - mappings[1285] = ItemType.AnglerPotterySherd; - mappings[419] = ItemType.Anvil; - mappings[799] = ItemType.Apple; - mappings[1286] = ItemType.ArcherPotterySherd; - mappings[796] = ItemType.ArmadilloScute; - mappings[1008] = ItemType.ArmadilloSpawnEgg; - mappings[1123] = ItemType.ArmorStand; - mappings[1287] = ItemType.ArmsUpPotterySherd; - mappings[801] = ItemType.Arrow; - mappings[919] = ItemType.AxolotlBucket; - mappings[1010] = ItemType.AxolotlSpawnEgg; - mappings[197] = ItemType.Azalea; - mappings[184] = ItemType.AzaleaLeaves; - mappings[222] = ItemType.AzureBluet; - mappings[1099] = ItemType.BakedPotato; - mappings[251] = ItemType.Bamboo; - mappings[144] = ItemType.BambooBlock; - mappings[692] = ItemType.BambooButton; - mappings[791] = ItemType.BambooChestRaft; - mappings[719] = ItemType.BambooDoor; - mappings[319] = ItemType.BambooFence; - mappings[758] = ItemType.BambooFenceGate; - mappings[905] = ItemType.BambooHangingSign; - mappings[47] = ItemType.BambooMosaic; - mappings[261] = ItemType.BambooMosaicSlab; - mappings[392] = ItemType.BambooMosaicStairs; - mappings[44] = ItemType.BambooPlanks; - mappings[707] = ItemType.BambooPressurePlate; - mappings[790] = ItemType.BambooRaft; - mappings[894] = ItemType.BambooSign; - mappings[260] = ItemType.BambooSlab; - mappings[391] = ItemType.BambooStairs; - mappings[739] = ItemType.BambooTrapdoor; - mappings[1202] = ItemType.Barrel; - mappings[443] = ItemType.Barrier; - mappings[328] = ItemType.Basalt; - mappings[1011] = ItemType.BatSpawnEgg; - mappings[396] = ItemType.Beacon; - mappings[56] = ItemType.Bedrock; - mappings[1219] = ItemType.BeeNest; - mappings[1012] = ItemType.BeeSpawnEgg; - mappings[988] = ItemType.Beef; - mappings[1220] = ItemType.Beehive; - mappings[1154] = ItemType.Beetroot; - mappings[1155] = ItemType.BeetrootSeeds; - mappings[1156] = ItemType.BeetrootSoup; - mappings[1210] = ItemType.Bell; - mappings[249] = ItemType.BigDripleaf; - mappings[778] = ItemType.BirchBoat; - mappings[686] = ItemType.BirchButton; - mappings[779] = ItemType.BirchChestBoat; - mappings[713] = ItemType.BirchDoor; - mappings[313] = ItemType.BirchFence; - mappings[752] = ItemType.BirchFenceGate; - mappings[899] = ItemType.BirchHangingSign; - mappings[178] = ItemType.BirchLeaves; - mappings[134] = ItemType.BirchLog; - mappings[38] = ItemType.BirchPlanks; - mappings[701] = ItemType.BirchPressurePlate; - mappings[50] = ItemType.BirchSapling; - mappings[888] = ItemType.BirchSign; - mappings[254] = ItemType.BirchSlab; - mappings[385] = ItemType.BirchStairs; - mappings[733] = ItemType.BirchTrapdoor; - mappings[168] = ItemType.BirchWood; - mappings[1148] = ItemType.BlackBanner; - mappings[979] = ItemType.BlackBed; - mappings[1254] = ItemType.BlackCandle; - mappings[461] = ItemType.BlackCarpet; - mappings[570] = ItemType.BlackConcrete; - mappings[586] = ItemType.BlackConcretePowder; - mappings[959] = ItemType.BlackDye; - mappings[554] = ItemType.BlackGlazedTerracotta; - mappings[538] = ItemType.BlackShulkerBox; - mappings[486] = ItemType.BlackStainedGlass; - mappings[502] = ItemType.BlackStainedGlassPane; - mappings[442] = ItemType.BlackTerracotta; - mappings[217] = ItemType.BlackWool; - mappings[1225] = ItemType.Blackstone; - mappings[1226] = ItemType.BlackstoneSlab; - mappings[1227] = ItemType.BlackstoneStairs; - mappings[412] = ItemType.BlackstoneWall; - mappings[1288] = ItemType.BladePotterySherd; - mappings[1204] = ItemType.BlastFurnace; - mappings[1002] = ItemType.BlazePowder; - mappings[994] = ItemType.BlazeRod; - mappings[1013] = ItemType.BlazeSpawnEgg; - mappings[1144] = ItemType.BlueBanner; - mappings[975] = ItemType.BlueBed; - mappings[1250] = ItemType.BlueCandle; - mappings[457] = ItemType.BlueCarpet; - mappings[566] = ItemType.BlueConcrete; - mappings[582] = ItemType.BlueConcretePowder; - mappings[955] = ItemType.BlueDye; - mappings[550] = ItemType.BlueGlazedTerracotta; - mappings[619] = ItemType.BlueIce; - mappings[220] = ItemType.BlueOrchid; - mappings[534] = ItemType.BlueShulkerBox; - mappings[482] = ItemType.BlueStainedGlass; - mappings[498] = ItemType.BlueStainedGlassPane; - mappings[438] = ItemType.BlueTerracotta; - mappings[213] = ItemType.BlueWool; - mappings[1014] = ItemType.BoggedSpawnEgg; - mappings[1284] = ItemType.BoltArmorTrimSmithingTemplate; - mappings[961] = ItemType.Bone; - mappings[520] = ItemType.BoneBlock; - mappings[960] = ItemType.BoneMeal; - mappings[925] = ItemType.Book; - mappings[286] = ItemType.Bookshelf; - mappings[800] = ItemType.Bow; - mappings[848] = ItemType.Bowl; - mappings[600] = ItemType.BrainCoral; - mappings[595] = ItemType.BrainCoralBlock; - mappings[610] = ItemType.BrainCoralFan; - mappings[855] = ItemType.Bread; - mappings[1329] = ItemType.BreezeRod; - mappings[1015] = ItemType.BreezeSpawnEgg; - mappings[1289] = ItemType.BrewerPotterySherd; - mappings[1004] = ItemType.BrewingStand; - mappings[921] = ItemType.Brick; - mappings[270] = ItemType.BrickSlab; - mappings[361] = ItemType.BrickStairs; - mappings[399] = ItemType.BrickWall; - mappings[285] = ItemType.Bricks; - mappings[1145] = ItemType.BrownBanner; - mappings[976] = ItemType.BrownBed; - mappings[1251] = ItemType.BrownCandle; - mappings[458] = ItemType.BrownCarpet; - mappings[567] = ItemType.BrownConcrete; - mappings[583] = ItemType.BrownConcretePowder; - mappings[956] = ItemType.BrownDye; - mappings[551] = ItemType.BrownGlazedTerracotta; - mappings[234] = ItemType.BrownMushroom; - mappings[352] = ItemType.BrownMushroomBlock; - mappings[535] = ItemType.BrownShulkerBox; - mappings[483] = ItemType.BrownStainedGlass; - mappings[499] = ItemType.BrownStainedGlassPane; - mappings[439] = ItemType.BrownTerracotta; - mappings[214] = ItemType.BrownWool; - mappings[1265] = ItemType.Brush; - mappings[601] = ItemType.BubbleCoral; - mappings[596] = ItemType.BubbleCoralBlock; - mappings[611] = ItemType.BubbleCoralFan; - mappings[908] = ItemType.Bucket; - mappings[87] = ItemType.BuddingAmethyst; - mappings[930] = ItemType.Bundle; - mappings[1290] = ItemType.BurnPotterySherd; - mappings[308] = ItemType.Cactus; - mappings[963] = ItemType.Cake; - mappings[11] = ItemType.Calcite; - mappings[676] = ItemType.CalibratedSculkSensor; - mappings[1017] = ItemType.CamelSpawnEgg; - mappings[1215] = ItemType.Campfire; - mappings[1238] = ItemType.Candle; - mappings[1097] = ItemType.Carrot; - mappings[771] = ItemType.CarrotOnAStick; - mappings[1205] = ItemType.CartographyTable; - mappings[323] = ItemType.CarvedPumpkin; - mappings[1016] = ItemType.CatSpawnEgg; - mappings[1005] = ItemType.Cauldron; - mappings[1018] = ItemType.CaveSpiderSpawnEgg; - mappings[356] = ItemType.Chain; - mappings[515] = ItemType.ChainCommandBlock; - mappings[863] = ItemType.ChainmailBoots; - mappings[861] = ItemType.ChainmailChestplate; - mappings[860] = ItemType.ChainmailHelmet; - mappings[862] = ItemType.ChainmailLeggings; - mappings[803] = ItemType.Charcoal; - mappings[784] = ItemType.CherryBoat; - mappings[689] = ItemType.CherryButton; - mappings[785] = ItemType.CherryChestBoat; - mappings[716] = ItemType.CherryDoor; - mappings[316] = ItemType.CherryFence; - mappings[755] = ItemType.CherryFenceGate; - mappings[902] = ItemType.CherryHangingSign; - mappings[181] = ItemType.CherryLeaves; - mappings[137] = ItemType.CherryLog; - mappings[41] = ItemType.CherryPlanks; - mappings[704] = ItemType.CherryPressurePlate; - mappings[53] = ItemType.CherrySapling; - mappings[891] = ItemType.CherrySign; - mappings[257] = ItemType.CherrySlab; - mappings[388] = ItemType.CherryStairs; - mappings[736] = ItemType.CherryTrapdoor; - mappings[171] = ItemType.CherryWood; - mappings[299] = ItemType.Chest; - mappings[767] = ItemType.ChestMinecart; - mappings[990] = ItemType.Chicken; - mappings[1019] = ItemType.ChickenSpawnEgg; - mappings[420] = ItemType.ChippedAnvil; - mappings[287] = ItemType.ChiseledBookshelf; - mappings[96] = ItemType.ChiseledCopper; - mappings[350] = ItemType.ChiseledDeepslate; - mappings[368] = ItemType.ChiseledNetherBricks; - mappings[1232] = ItemType.ChiseledPolishedBlackstone; - mappings[422] = ItemType.ChiseledQuartzBlock; - mappings[511] = ItemType.ChiseledRedSandstone; - mappings[192] = ItemType.ChiseledSandstone; - mappings[343] = ItemType.ChiseledStoneBricks; - mappings[16] = ItemType.ChiseledTuff; - mappings[25] = ItemType.ChiseledTuffBricks; - mappings[294] = ItemType.ChorusFlower; - mappings[1150] = ItemType.ChorusFruit; - mappings[293] = ItemType.ChorusPlant; - mappings[309] = ItemType.Clay; - mappings[922] = ItemType.ClayBall; - mappings[932] = ItemType.Clock; - mappings[802] = ItemType.Coal; - mappings[81] = ItemType.CoalBlock; - mappings[62] = ItemType.CoalOre; - mappings[29] = ItemType.CoarseDirt; - mappings[1269] = ItemType.CoastArmorTrimSmithingTemplate; - mappings[9] = ItemType.CobbledDeepslate; - mappings[652] = ItemType.CobbledDeepslateSlab; - mappings[635] = ItemType.CobbledDeepslateStairs; - mappings[415] = ItemType.CobbledDeepslateWall; - mappings[35] = ItemType.Cobblestone; - mappings[269] = ItemType.CobblestoneSlab; - mappings[304] = ItemType.CobblestoneStairs; - mappings[397] = ItemType.CobblestoneWall; - mappings[194] = ItemType.Cobweb; - mappings[943] = ItemType.CocoaBeans; - mappings[935] = ItemType.Cod; - mappings[917] = ItemType.CodBucket; - mappings[1020] = ItemType.CodSpawnEgg; - mappings[395] = ItemType.CommandBlock; - mappings[1130] = ItemType.CommandBlockMinecart; - mappings[661] = ItemType.Comparator; - mappings[928] = ItemType.Compass; - mappings[1201] = ItemType.Composter; - mappings[620] = ItemType.Conduit; - mappings[989] = ItemType.CookedBeef; - mappings[991] = ItemType.CookedChicken; - mappings[939] = ItemType.CookedCod; - mappings[1132] = ItemType.CookedMutton; - mappings[882] = ItemType.CookedPorkchop; - mappings[1119] = ItemType.CookedRabbit; - mappings[940] = ItemType.CookedSalmon; - mappings[980] = ItemType.Cookie; - mappings[89] = ItemType.CopperBlock; - mappings[1316] = ItemType.CopperBulb; - mappings[722] = ItemType.CopperDoor; - mappings[1308] = ItemType.CopperGrate; - mappings[812] = ItemType.CopperIngot; - mappings[66] = ItemType.CopperOre; - mappings[742] = ItemType.CopperTrapdoor; - mappings[228] = ItemType.Cornflower; - mappings[1021] = ItemType.CowSpawnEgg; - mappings[347] = ItemType.CrackedDeepslateBricks; - mappings[349] = ItemType.CrackedDeepslateTiles; - mappings[367] = ItemType.CrackedNetherBricks; - mappings[1236] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[342] = ItemType.CrackedStoneBricks; - mappings[981] = ItemType.Crafter; - mappings[300] = ItemType.CraftingTable; - mappings[1193] = ItemType.CreeperBannerPattern; - mappings[1107] = ItemType.CreeperHead; - mappings[1022] = ItemType.CreeperSpawnEgg; - mappings[693] = ItemType.CrimsonButton; - mappings[720] = ItemType.CrimsonDoor; - mappings[320] = ItemType.CrimsonFence; - mappings[759] = ItemType.CrimsonFenceGate; - mappings[236] = ItemType.CrimsonFungus; - mappings[906] = ItemType.CrimsonHangingSign; - mappings[174] = ItemType.CrimsonHyphae; - mappings[33] = ItemType.CrimsonNylium; - mappings[45] = ItemType.CrimsonPlanks; - mappings[708] = ItemType.CrimsonPressurePlate; - mappings[238] = ItemType.CrimsonRoots; - mappings[895] = ItemType.CrimsonSign; - mappings[262] = ItemType.CrimsonSlab; - mappings[393] = ItemType.CrimsonStairs; - mappings[142] = ItemType.CrimsonStem; - mappings[740] = ItemType.CrimsonTrapdoor; - mappings[1189] = ItemType.Crossbow; - mappings[1224] = ItemType.CryingObsidian; - mappings[100] = ItemType.CutCopper; - mappings[108] = ItemType.CutCopperSlab; - mappings[104] = ItemType.CutCopperStairs; - mappings[512] = ItemType.CutRedSandstone; - mappings[276] = ItemType.CutRedSandstoneSlab; - mappings[193] = ItemType.CutSandstone; - mappings[267] = ItemType.CutSandstoneSlab; - mappings[1142] = ItemType.CyanBanner; - mappings[973] = ItemType.CyanBed; - mappings[1248] = ItemType.CyanCandle; - mappings[455] = ItemType.CyanCarpet; - mappings[564] = ItemType.CyanConcrete; - mappings[580] = ItemType.CyanConcretePowder; - mappings[953] = ItemType.CyanDye; - mappings[548] = ItemType.CyanGlazedTerracotta; - mappings[532] = ItemType.CyanShulkerBox; - mappings[480] = ItemType.CyanStainedGlass; - mappings[496] = ItemType.CyanStainedGlassPane; - mappings[436] = ItemType.CyanTerracotta; - mappings[211] = ItemType.CyanWool; - mappings[421] = ItemType.DamagedAnvil; - mappings[218] = ItemType.Dandelion; - mappings[1291] = ItemType.DangerPotterySherd; - mappings[786] = ItemType.DarkOakBoat; - mappings[690] = ItemType.DarkOakButton; - mappings[787] = ItemType.DarkOakChestBoat; - mappings[717] = ItemType.DarkOakDoor; - mappings[317] = ItemType.DarkOakFence; - mappings[756] = ItemType.DarkOakFenceGate; - mappings[903] = ItemType.DarkOakHangingSign; - mappings[182] = ItemType.DarkOakLeaves; - mappings[138] = ItemType.DarkOakLog; - mappings[42] = ItemType.DarkOakPlanks; - mappings[705] = ItemType.DarkOakPressurePlate; - mappings[54] = ItemType.DarkOakSapling; - mappings[892] = ItemType.DarkOakSign; - mappings[258] = ItemType.DarkOakSlab; - mappings[389] = ItemType.DarkOakStairs; - mappings[737] = ItemType.DarkOakTrapdoor; - mappings[172] = ItemType.DarkOakWood; - mappings[505] = ItemType.DarkPrismarine; - mappings[280] = ItemType.DarkPrismarineSlab; - mappings[508] = ItemType.DarkPrismarineStairs; - mappings[674] = ItemType.DaylightDetector; - mappings[604] = ItemType.DeadBrainCoral; - mappings[590] = ItemType.DeadBrainCoralBlock; - mappings[615] = ItemType.DeadBrainCoralFan; - mappings[605] = ItemType.DeadBubbleCoral; - mappings[591] = ItemType.DeadBubbleCoralBlock; - mappings[616] = ItemType.DeadBubbleCoralFan; - mappings[199] = ItemType.DeadBush; - mappings[606] = ItemType.DeadFireCoral; - mappings[592] = ItemType.DeadFireCoralBlock; - mappings[617] = ItemType.DeadFireCoralFan; - mappings[607] = ItemType.DeadHornCoral; - mappings[593] = ItemType.DeadHornCoralBlock; - mappings[618] = ItemType.DeadHornCoralFan; - mappings[608] = ItemType.DeadTubeCoral; - mappings[589] = ItemType.DeadTubeCoralBlock; - mappings[614] = ItemType.DeadTubeCoralFan; - mappings[1167] = ItemType.DebugStick; - mappings[288] = ItemType.DecoratedPot; - mappings[8] = ItemType.Deepslate; - mappings[654] = ItemType.DeepslateBrickSlab; - mappings[637] = ItemType.DeepslateBrickStairs; - mappings[417] = ItemType.DeepslateBrickWall; - mappings[346] = ItemType.DeepslateBricks; - mappings[63] = ItemType.DeepslateCoalOre; - mappings[67] = ItemType.DeepslateCopperOre; - mappings[77] = ItemType.DeepslateDiamondOre; - mappings[73] = ItemType.DeepslateEmeraldOre; - mappings[69] = ItemType.DeepslateGoldOre; - mappings[65] = ItemType.DeepslateIronOre; - mappings[75] = ItemType.DeepslateLapisOre; - mappings[71] = ItemType.DeepslateRedstoneOre; - mappings[655] = ItemType.DeepslateTileSlab; - mappings[638] = ItemType.DeepslateTileStairs; - mappings[418] = ItemType.DeepslateTileWall; - mappings[348] = ItemType.DeepslateTiles; - mappings[762] = ItemType.DetectorRail; - mappings[804] = ItemType.Diamond; - mappings[840] = ItemType.DiamondAxe; - mappings[91] = ItemType.DiamondBlock; - mappings[871] = ItemType.DiamondBoots; - mappings[869] = ItemType.DiamondChestplate; - mappings[868] = ItemType.DiamondHelmet; - mappings[841] = ItemType.DiamondHoe; - mappings[1126] = ItemType.DiamondHorseArmor; - mappings[870] = ItemType.DiamondLeggings; - mappings[76] = ItemType.DiamondOre; - mappings[839] = ItemType.DiamondPickaxe; - mappings[838] = ItemType.DiamondShovel; - mappings[837] = ItemType.DiamondSword; - mappings[4] = ItemType.Diorite; - mappings[651] = ItemType.DioriteSlab; - mappings[634] = ItemType.DioriteStairs; - mappings[411] = ItemType.DioriteWall; - mappings[28] = ItemType.Dirt; - mappings[464] = ItemType.DirtPath; - mappings[1184] = ItemType.DiscFragment5; - mappings[668] = ItemType.Dispenser; - mappings[1023] = ItemType.DolphinSpawnEgg; - mappings[1024] = ItemType.DonkeySpawnEgg; - mappings[1157] = ItemType.DragonBreath; - mappings[379] = ItemType.DragonEgg; - mappings[1108] = ItemType.DragonHead; - mappings[985] = ItemType.DriedKelp; - mappings[923] = ItemType.DriedKelpBlock; - mappings[26] = ItemType.DripstoneBlock; - mappings[669] = ItemType.Dropper; - mappings[1025] = ItemType.DrownedSpawnEgg; - mappings[1268] = ItemType.DuneArmorTrimSmithingTemplate; - mappings[1264] = ItemType.EchoShard; - mappings[927] = ItemType.Egg; - mappings[1026] = ItemType.ElderGuardianSpawnEgg; - mappings[773] = ItemType.Elytra; - mappings[805] = ItemType.Emerald; - mappings[382] = ItemType.EmeraldBlock; - mappings[72] = ItemType.EmeraldOre; - mappings[1114] = ItemType.EnchantedBook; - mappings[885] = ItemType.EnchantedGoldenApple; - mappings[375] = ItemType.EnchantingTable; - mappings[1149] = ItemType.EndCrystal; - mappings[376] = ItemType.EndPortalFrame; - mappings[292] = ItemType.EndRod; - mappings[377] = ItemType.EndStone; - mappings[644] = ItemType.EndStoneBrickSlab; - mappings[626] = ItemType.EndStoneBrickStairs; - mappings[410] = ItemType.EndStoneBrickWall; - mappings[378] = ItemType.EndStoneBricks; - mappings[381] = ItemType.EnderChest; - mappings[1027] = ItemType.EnderDragonSpawnEgg; - mappings[1006] = ItemType.EnderEye; - mappings[993] = ItemType.EnderPearl; - mappings[1028] = ItemType.EndermanSpawnEgg; - mappings[1029] = ItemType.EndermiteSpawnEgg; - mappings[1030] = ItemType.EvokerSpawnEgg; - mappings[1088] = ItemType.ExperienceBottle; - mappings[1292] = ItemType.ExplorerPotterySherd; - mappings[97] = ItemType.ExposedChiseledCopper; - mappings[93] = ItemType.ExposedCopper; - mappings[1317] = ItemType.ExposedCopperBulb; - mappings[723] = ItemType.ExposedCopperDoor; - mappings[1309] = ItemType.ExposedCopperGrate; - mappings[743] = ItemType.ExposedCopperTrapdoor; - mappings[101] = ItemType.ExposedCutCopper; - mappings[109] = ItemType.ExposedCutCopperSlab; - mappings[105] = ItemType.ExposedCutCopperStairs; - mappings[1272] = ItemType.EyeArmorTrimSmithingTemplate; - mappings[301] = ItemType.Farmland; - mappings[851] = ItemType.Feather; - mappings[1001] = ItemType.FermentedSpiderEye; - mappings[196] = ItemType.Fern; - mappings[982] = ItemType.FilledMap; - mappings[1089] = ItemType.FireCharge; - mappings[602] = ItemType.FireCoral; - mappings[597] = ItemType.FireCoralBlock; - mappings[612] = ItemType.FireCoralFan; - mappings[1112] = ItemType.FireworkRocket; - mappings[1113] = ItemType.FireworkStar; - mappings[931] = ItemType.FishingRod; - mappings[1206] = ItemType.FletchingTable; - mappings[880] = ItemType.Flint; - mappings[798] = ItemType.FlintAndSteel; - mappings[1283] = ItemType.FlowArmorTrimSmithingTemplate; - mappings[1198] = ItemType.FlowBannerPattern; - mappings[1293] = ItemType.FlowPotterySherd; - mappings[1192] = ItemType.FlowerBannerPattern; - mappings[1096] = ItemType.FlowerPot; - mappings[198] = ItemType.FloweringAzalea; - mappings[185] = ItemType.FloweringAzaleaLeaves; - mappings[1031] = ItemType.FoxSpawnEgg; - mappings[1294] = ItemType.FriendPotterySherd; - mappings[1032] = ItemType.FrogSpawnEgg; - mappings[1263] = ItemType.Frogspawn; - mappings[302] = ItemType.Furnace; - mappings[768] = ItemType.FurnaceMinecart; - mappings[1033] = ItemType.GhastSpawnEgg; - mappings[995] = ItemType.GhastTear; - mappings[1228] = ItemType.GildedBlackstone; - mappings[188] = ItemType.Glass; - mappings[999] = ItemType.GlassBottle; - mappings[357] = ItemType.GlassPane; - mappings[1007] = ItemType.GlisteringMelonSlice; - mappings[1196] = ItemType.GlobeBannerPattern; - mappings[1214] = ItemType.GlowBerries; - mappings[942] = ItemType.GlowInkSac; - mappings[1095] = ItemType.GlowItemFrame; - mappings[360] = ItemType.GlowLichen; - mappings[1034] = ItemType.GlowSquidSpawnEgg; - mappings[332] = ItemType.Glowstone; - mappings[934] = ItemType.GlowstoneDust; - mappings[1200] = ItemType.GoatHorn; - mappings[1035] = ItemType.GoatSpawnEgg; - mappings[90] = ItemType.GoldBlock; - mappings[814] = ItemType.GoldIngot; - mappings[996] = ItemType.GoldNugget; - mappings[68] = ItemType.GoldOre; - mappings[884] = ItemType.GoldenApple; - mappings[830] = ItemType.GoldenAxe; - mappings[875] = ItemType.GoldenBoots; - mappings[1102] = ItemType.GoldenCarrot; - mappings[873] = ItemType.GoldenChestplate; - mappings[872] = ItemType.GoldenHelmet; - mappings[831] = ItemType.GoldenHoe; - mappings[1125] = ItemType.GoldenHorseArmor; - mappings[874] = ItemType.GoldenLeggings; - mappings[829] = ItemType.GoldenPickaxe; - mappings[828] = ItemType.GoldenShovel; - mappings[827] = ItemType.GoldenSword; - mappings[2] = ItemType.Granite; - mappings[647] = ItemType.GraniteSlab; - mappings[630] = ItemType.GraniteStairs; - mappings[403] = ItemType.GraniteWall; - mappings[27] = ItemType.GrassBlock; - mappings[61] = ItemType.Gravel; - mappings[1140] = ItemType.GrayBanner; - mappings[971] = ItemType.GrayBed; - mappings[1246] = ItemType.GrayCandle; - mappings[453] = ItemType.GrayCarpet; - mappings[562] = ItemType.GrayConcrete; - mappings[578] = ItemType.GrayConcretePowder; - mappings[951] = ItemType.GrayDye; - mappings[546] = ItemType.GrayGlazedTerracotta; - mappings[530] = ItemType.GrayShulkerBox; - mappings[478] = ItemType.GrayStainedGlass; - mappings[494] = ItemType.GrayStainedGlassPane; - mappings[434] = ItemType.GrayTerracotta; - mappings[209] = ItemType.GrayWool; - mappings[1146] = ItemType.GreenBanner; - mappings[977] = ItemType.GreenBed; - mappings[1252] = ItemType.GreenCandle; - mappings[459] = ItemType.GreenCarpet; - mappings[568] = ItemType.GreenConcrete; - mappings[584] = ItemType.GreenConcretePowder; - mappings[957] = ItemType.GreenDye; - mappings[552] = ItemType.GreenGlazedTerracotta; - mappings[536] = ItemType.GreenShulkerBox; - mappings[484] = ItemType.GreenStainedGlass; - mappings[500] = ItemType.GreenStainedGlassPane; - mappings[440] = ItemType.GreenTerracotta; - mappings[215] = ItemType.GreenWool; - mappings[1207] = ItemType.Grindstone; - mappings[1036] = ItemType.GuardianSpawnEgg; - mappings[852] = ItemType.Gunpowder; - mappings[1199] = ItemType.GusterBannerPattern; - mappings[1295] = ItemType.GusterPotterySherd; - mappings[248] = ItemType.HangingRoots; - mappings[445] = ItemType.HayBlock; - mappings[1188] = ItemType.HeartOfTheSea; - mappings[1296] = ItemType.HeartPotterySherd; - mappings[1297] = ItemType.HeartbreakPotterySherd; - mappings[85] = ItemType.HeavyCore; - mappings[698] = ItemType.HeavyWeightedPressurePlate; - mappings[1037] = ItemType.HoglinSpawnEgg; - mappings[665] = ItemType.HoneyBlock; - mappings[1221] = ItemType.HoneyBottle; - mappings[1218] = ItemType.Honeycomb; - mappings[1222] = ItemType.HoneycombBlock; - mappings[667] = ItemType.Hopper; - mappings[770] = ItemType.HopperMinecart; - mappings[603] = ItemType.HornCoral; - mappings[598] = ItemType.HornCoralBlock; - mappings[613] = ItemType.HornCoralFan; - mappings[1038] = ItemType.HorseSpawnEgg; - mappings[1282] = ItemType.HostArmorTrimSmithingTemplate; - mappings[1298] = ItemType.HowlPotterySherd; - mappings[1039] = ItemType.HuskSpawnEgg; - mappings[306] = ItemType.Ice; - mappings[338] = ItemType.InfestedChiseledStoneBricks; - mappings[334] = ItemType.InfestedCobblestone; - mappings[337] = ItemType.InfestedCrackedStoneBricks; - mappings[339] = ItemType.InfestedDeepslate; - mappings[336] = ItemType.InfestedMossyStoneBricks; - mappings[333] = ItemType.InfestedStone; - mappings[335] = ItemType.InfestedStoneBricks; - mappings[941] = ItemType.InkSac; - mappings[835] = ItemType.IronAxe; - mappings[355] = ItemType.IronBars; - mappings[88] = ItemType.IronBlock; - mappings[867] = ItemType.IronBoots; - mappings[865] = ItemType.IronChestplate; - mappings[710] = ItemType.IronDoor; - mappings[1040] = ItemType.IronGolemSpawnEgg; - mappings[864] = ItemType.IronHelmet; - mappings[836] = ItemType.IronHoe; - mappings[1124] = ItemType.IronHorseArmor; - mappings[810] = ItemType.IronIngot; - mappings[866] = ItemType.IronLeggings; - mappings[1165] = ItemType.IronNugget; - mappings[64] = ItemType.IronOre; - mappings[834] = ItemType.IronPickaxe; - mappings[833] = ItemType.IronShovel; - mappings[832] = ItemType.IronSword; - mappings[730] = ItemType.IronTrapdoor; - mappings[1094] = ItemType.ItemFrame; - mappings[324] = ItemType.JackOLantern; - mappings[793] = ItemType.Jigsaw; - mappings[310] = ItemType.Jukebox; - mappings[780] = ItemType.JungleBoat; - mappings[687] = ItemType.JungleButton; - mappings[781] = ItemType.JungleChestBoat; - mappings[714] = ItemType.JungleDoor; - mappings[314] = ItemType.JungleFence; - mappings[753] = ItemType.JungleFenceGate; - mappings[900] = ItemType.JungleHangingSign; - mappings[179] = ItemType.JungleLeaves; - mappings[135] = ItemType.JungleLog; - mappings[39] = ItemType.JunglePlanks; - mappings[702] = ItemType.JunglePressurePlate; - mappings[51] = ItemType.JungleSapling; - mappings[889] = ItemType.JungleSign; - mappings[255] = ItemType.JungleSlab; - mappings[386] = ItemType.JungleStairs; - mappings[734] = ItemType.JungleTrapdoor; - mappings[169] = ItemType.JungleWood; - mappings[244] = ItemType.Kelp; - mappings[1166] = ItemType.KnowledgeBook; - mappings[303] = ItemType.Ladder; - mappings[1211] = ItemType.Lantern; - mappings[190] = ItemType.LapisBlock; - mappings[806] = ItemType.LapisLazuli; - mappings[74] = ItemType.LapisOre; - mappings[1257] = ItemType.LargeAmethystBud; - mappings[470] = ItemType.LargeFern; - mappings[910] = ItemType.LavaBucket; - mappings[1128] = ItemType.Lead; - mappings[913] = ItemType.Leather; - mappings[859] = ItemType.LeatherBoots; - mappings[857] = ItemType.LeatherChestplate; - mappings[856] = ItemType.LeatherHelmet; - mappings[1127] = ItemType.LeatherHorseArmor; - mappings[858] = ItemType.LeatherLeggings; - mappings[670] = ItemType.Lectern; - mappings[672] = ItemType.Lever; - mappings[444] = ItemType.Light; - mappings[1136] = ItemType.LightBlueBanner; - mappings[967] = ItemType.LightBlueBed; - mappings[1242] = ItemType.LightBlueCandle; - mappings[449] = ItemType.LightBlueCarpet; - mappings[558] = ItemType.LightBlueConcrete; - mappings[574] = ItemType.LightBlueConcretePowder; - mappings[947] = ItemType.LightBlueDye; - mappings[542] = ItemType.LightBlueGlazedTerracotta; - mappings[526] = ItemType.LightBlueShulkerBox; - mappings[474] = ItemType.LightBlueStainedGlass; - mappings[490] = ItemType.LightBlueStainedGlassPane; - mappings[430] = ItemType.LightBlueTerracotta; - mappings[205] = ItemType.LightBlueWool; - mappings[1141] = ItemType.LightGrayBanner; - mappings[972] = ItemType.LightGrayBed; - mappings[1247] = ItemType.LightGrayCandle; - mappings[454] = ItemType.LightGrayCarpet; - mappings[563] = ItemType.LightGrayConcrete; - mappings[579] = ItemType.LightGrayConcretePowder; - mappings[952] = ItemType.LightGrayDye; - mappings[547] = ItemType.LightGrayGlazedTerracotta; - mappings[531] = ItemType.LightGrayShulkerBox; - mappings[479] = ItemType.LightGrayStainedGlass; - mappings[495] = ItemType.LightGrayStainedGlassPane; - mappings[435] = ItemType.LightGrayTerracotta; - mappings[210] = ItemType.LightGrayWool; - mappings[697] = ItemType.LightWeightedPressurePlate; - mappings[673] = ItemType.LightningRod; - mappings[466] = ItemType.Lilac; - mappings[229] = ItemType.LilyOfTheValley; - mappings[365] = ItemType.LilyPad; - mappings[1138] = ItemType.LimeBanner; - mappings[969] = ItemType.LimeBed; - mappings[1244] = ItemType.LimeCandle; - mappings[451] = ItemType.LimeCarpet; - mappings[560] = ItemType.LimeConcrete; - mappings[576] = ItemType.LimeConcretePowder; - mappings[949] = ItemType.LimeDye; - mappings[544] = ItemType.LimeGlazedTerracotta; - mappings[528] = ItemType.LimeShulkerBox; - mappings[476] = ItemType.LimeStainedGlass; - mappings[492] = ItemType.LimeStainedGlassPane; - mappings[432] = ItemType.LimeTerracotta; - mappings[207] = ItemType.LimeWool; - mappings[1161] = ItemType.LingeringPotion; - mappings[1041] = ItemType.LlamaSpawnEgg; - mappings[1223] = ItemType.Lodestone; - mappings[1191] = ItemType.Loom; - mappings[1093] = ItemType.Mace; - mappings[1135] = ItemType.MagentaBanner; - mappings[966] = ItemType.MagentaBed; - mappings[1241] = ItemType.MagentaCandle; - mappings[448] = ItemType.MagentaCarpet; - mappings[557] = ItemType.MagentaConcrete; - mappings[573] = ItemType.MagentaConcretePowder; - mappings[946] = ItemType.MagentaDye; - mappings[541] = ItemType.MagentaGlazedTerracotta; - mappings[525] = ItemType.MagentaShulkerBox; - mappings[473] = ItemType.MagentaStainedGlass; - mappings[489] = ItemType.MagentaStainedGlassPane; - mappings[429] = ItemType.MagentaTerracotta; - mappings[204] = ItemType.MagentaWool; - mappings[516] = ItemType.MagmaBlock; - mappings[1003] = ItemType.MagmaCream; - mappings[1042] = ItemType.MagmaCubeSpawnEgg; - mappings[788] = ItemType.MangroveBoat; - mappings[691] = ItemType.MangroveButton; - mappings[789] = ItemType.MangroveChestBoat; - mappings[718] = ItemType.MangroveDoor; - mappings[318] = ItemType.MangroveFence; - mappings[757] = ItemType.MangroveFenceGate; - mappings[904] = ItemType.MangroveHangingSign; - mappings[183] = ItemType.MangroveLeaves; - mappings[139] = ItemType.MangroveLog; - mappings[43] = ItemType.MangrovePlanks; - mappings[706] = ItemType.MangrovePressurePlate; - mappings[55] = ItemType.MangrovePropagule; - mappings[140] = ItemType.MangroveRoots; - mappings[893] = ItemType.MangroveSign; - mappings[259] = ItemType.MangroveSlab; - mappings[390] = ItemType.MangroveStairs; - mappings[738] = ItemType.MangroveTrapdoor; - mappings[173] = ItemType.MangroveWood; - mappings[1101] = ItemType.Map; - mappings[1256] = ItemType.MediumAmethystBud; - mappings[358] = ItemType.Melon; - mappings[987] = ItemType.MelonSeeds; - mappings[984] = ItemType.MelonSlice; - mappings[914] = ItemType.MilkBucket; - mappings[766] = ItemType.Minecart; - mappings[1299] = ItemType.MinerPotterySherd; - mappings[1195] = ItemType.MojangBannerPattern; - mappings[1043] = ItemType.MooshroomSpawnEgg; - mappings[247] = ItemType.MossBlock; - mappings[245] = ItemType.MossCarpet; - mappings[289] = ItemType.MossyCobblestone; - mappings[643] = ItemType.MossyCobblestoneSlab; - mappings[625] = ItemType.MossyCobblestoneStairs; - mappings[398] = ItemType.MossyCobblestoneWall; - mappings[641] = ItemType.MossyStoneBrickSlab; - mappings[623] = ItemType.MossyStoneBrickStairs; - mappings[402] = ItemType.MossyStoneBrickWall; - mappings[341] = ItemType.MossyStoneBricks; - mappings[1300] = ItemType.MournerPotterySherd; - mappings[32] = ItemType.Mud; - mappings[272] = ItemType.MudBrickSlab; - mappings[363] = ItemType.MudBrickStairs; - mappings[405] = ItemType.MudBrickWall; - mappings[345] = ItemType.MudBricks; - mappings[141] = ItemType.MuddyMangroveRoots; - mappings[1044] = ItemType.MuleSpawnEgg; - mappings[354] = ItemType.MushroomStem; - mappings[849] = ItemType.MushroomStew; - mappings[1178] = ItemType.MusicDisc11; - mappings[1168] = ItemType.MusicDisc13; - mappings[1182] = ItemType.MusicDisc5; - mappings[1170] = ItemType.MusicDiscBlocks; - mappings[1169] = ItemType.MusicDiscCat; - mappings[1171] = ItemType.MusicDiscChirp; - mappings[1172] = ItemType.MusicDiscFar; - mappings[1173] = ItemType.MusicDiscMall; - mappings[1174] = ItemType.MusicDiscMellohi; - mappings[1180] = ItemType.MusicDiscOtherside; - mappings[1183] = ItemType.MusicDiscPigstep; - mappings[1181] = ItemType.MusicDiscRelic; - mappings[1175] = ItemType.MusicDiscStal; - mappings[1176] = ItemType.MusicDiscStrad; - mappings[1179] = ItemType.MusicDiscWait; - mappings[1177] = ItemType.MusicDiscWard; - mappings[1131] = ItemType.Mutton; - mappings[364] = ItemType.Mycelium; - mappings[1129] = ItemType.NameTag; - mappings[1187] = ItemType.NautilusShell; - mappings[1115] = ItemType.NetherBrick; - mappings[369] = ItemType.NetherBrickFence; - mappings[273] = ItemType.NetherBrickSlab; - mappings[370] = ItemType.NetherBrickStairs; - mappings[406] = ItemType.NetherBrickWall; - mappings[366] = ItemType.NetherBricks; - mappings[78] = ItemType.NetherGoldOre; - mappings[79] = ItemType.NetherQuartzOre; - mappings[240] = ItemType.NetherSprouts; - mappings[1110] = ItemType.NetherStar; - mappings[997] = ItemType.NetherWart; - mappings[517] = ItemType.NetherWartBlock; - mappings[845] = ItemType.NetheriteAxe; - mappings[92] = ItemType.NetheriteBlock; - mappings[879] = ItemType.NetheriteBoots; - mappings[877] = ItemType.NetheriteChestplate; - mappings[876] = ItemType.NetheriteHelmet; - mappings[846] = ItemType.NetheriteHoe; - mappings[815] = ItemType.NetheriteIngot; - mappings[878] = ItemType.NetheriteLeggings; - mappings[844] = ItemType.NetheritePickaxe; - mappings[816] = ItemType.NetheriteScrap; - mappings[843] = ItemType.NetheriteShovel; - mappings[842] = ItemType.NetheriteSword; - mappings[1266] = ItemType.NetheriteUpgradeSmithingTemplate; - mappings[325] = ItemType.Netherrack; - mappings[681] = ItemType.NoteBlock; - mappings[774] = ItemType.OakBoat; - mappings[684] = ItemType.OakButton; - mappings[775] = ItemType.OakChestBoat; - mappings[711] = ItemType.OakDoor; - mappings[311] = ItemType.OakFence; - mappings[750] = ItemType.OakFenceGate; - mappings[897] = ItemType.OakHangingSign; - mappings[176] = ItemType.OakLeaves; - mappings[132] = ItemType.OakLog; - mappings[36] = ItemType.OakPlanks; - mappings[699] = ItemType.OakPressurePlate; - mappings[48] = ItemType.OakSapling; - mappings[886] = ItemType.OakSign; - mappings[252] = ItemType.OakSlab; - mappings[383] = ItemType.OakStairs; - mappings[731] = ItemType.OakTrapdoor; - mappings[166] = ItemType.OakWood; - mappings[666] = ItemType.Observer; - mappings[290] = ItemType.Obsidian; - mappings[1045] = ItemType.OcelotSpawnEgg; - mappings[1260] = ItemType.OchreFroglight; - mappings[1328] = ItemType.OminousBottle; - mappings[1326] = ItemType.OminousTrialKey; - mappings[1134] = ItemType.OrangeBanner; - mappings[965] = ItemType.OrangeBed; - mappings[1240] = ItemType.OrangeCandle; - mappings[447] = ItemType.OrangeCarpet; - mappings[556] = ItemType.OrangeConcrete; - mappings[572] = ItemType.OrangeConcretePowder; - mappings[945] = ItemType.OrangeDye; - mappings[540] = ItemType.OrangeGlazedTerracotta; - mappings[524] = ItemType.OrangeShulkerBox; - mappings[472] = ItemType.OrangeStainedGlass; - mappings[488] = ItemType.OrangeStainedGlassPane; - mappings[428] = ItemType.OrangeTerracotta; - mappings[224] = ItemType.OrangeTulip; - mappings[203] = ItemType.OrangeWool; - mappings[227] = ItemType.OxeyeDaisy; - mappings[99] = ItemType.OxidizedChiseledCopper; - mappings[95] = ItemType.OxidizedCopper; - mappings[1319] = ItemType.OxidizedCopperBulb; - mappings[725] = ItemType.OxidizedCopperDoor; - mappings[1311] = ItemType.OxidizedCopperGrate; - mappings[745] = ItemType.OxidizedCopperTrapdoor; - mappings[103] = ItemType.OxidizedCutCopper; - mappings[111] = ItemType.OxidizedCutCopperSlab; - mappings[107] = ItemType.OxidizedCutCopperStairs; - mappings[463] = ItemType.PackedIce; - mappings[344] = ItemType.PackedMud; - mappings[883] = ItemType.Painting; - mappings[1046] = ItemType.PandaSpawnEgg; - mappings[924] = ItemType.Paper; - mappings[1047] = ItemType.ParrotSpawnEgg; - mappings[1262] = ItemType.PearlescentFroglight; - mappings[468] = ItemType.Peony; - mappings[268] = ItemType.PetrifiedOakSlab; - mappings[1186] = ItemType.PhantomMembrane; - mappings[1048] = ItemType.PhantomSpawnEgg; - mappings[1049] = ItemType.PigSpawnEgg; - mappings[1197] = ItemType.PiglinBannerPattern; - mappings[1051] = ItemType.PiglinBruteSpawnEgg; - mappings[1109] = ItemType.PiglinHead; - mappings[1050] = ItemType.PiglinSpawnEgg; - mappings[1052] = ItemType.PillagerSpawnEgg; - mappings[1139] = ItemType.PinkBanner; - mappings[970] = ItemType.PinkBed; - mappings[1245] = ItemType.PinkCandle; - mappings[452] = ItemType.PinkCarpet; - mappings[561] = ItemType.PinkConcrete; - mappings[577] = ItemType.PinkConcretePowder; - mappings[950] = ItemType.PinkDye; - mappings[545] = ItemType.PinkGlazedTerracotta; - mappings[246] = ItemType.PinkPetals; - mappings[529] = ItemType.PinkShulkerBox; - mappings[477] = ItemType.PinkStainedGlass; - mappings[493] = ItemType.PinkStainedGlassPane; - mappings[433] = ItemType.PinkTerracotta; - mappings[226] = ItemType.PinkTulip; - mappings[208] = ItemType.PinkWool; - mappings[662] = ItemType.Piston; - mappings[232] = ItemType.PitcherPlant; - mappings[1153] = ItemType.PitcherPod; - mappings[1105] = ItemType.PlayerHead; - mappings[1301] = ItemType.PlentyPotterySherd; - mappings[30] = ItemType.Podzol; - mappings[1259] = ItemType.PointedDripstone; - mappings[1100] = ItemType.PoisonousPotato; - mappings[1053] = ItemType.PolarBearSpawnEgg; - mappings[7] = ItemType.PolishedAndesite; - mappings[650] = ItemType.PolishedAndesiteSlab; - mappings[633] = ItemType.PolishedAndesiteStairs; - mappings[329] = ItemType.PolishedBasalt; - mappings[1229] = ItemType.PolishedBlackstone; - mappings[1234] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1235] = ItemType.PolishedBlackstoneBrickStairs; - mappings[414] = ItemType.PolishedBlackstoneBrickWall; - mappings[1233] = ItemType.PolishedBlackstoneBricks; - mappings[683] = ItemType.PolishedBlackstoneButton; - mappings[696] = ItemType.PolishedBlackstonePressurePlate; - mappings[1230] = ItemType.PolishedBlackstoneSlab; - mappings[1231] = ItemType.PolishedBlackstoneStairs; - mappings[413] = ItemType.PolishedBlackstoneWall; - mappings[10] = ItemType.PolishedDeepslate; - mappings[653] = ItemType.PolishedDeepslateSlab; - mappings[636] = ItemType.PolishedDeepslateStairs; - mappings[416] = ItemType.PolishedDeepslateWall; - mappings[5] = ItemType.PolishedDiorite; - mappings[642] = ItemType.PolishedDioriteSlab; - mappings[624] = ItemType.PolishedDioriteStairs; - mappings[3] = ItemType.PolishedGranite; - mappings[639] = ItemType.PolishedGraniteSlab; - mappings[621] = ItemType.PolishedGraniteStairs; - mappings[17] = ItemType.PolishedTuff; - mappings[18] = ItemType.PolishedTuffSlab; - mappings[19] = ItemType.PolishedTuffStairs; - mappings[20] = ItemType.PolishedTuffWall; - mappings[1151] = ItemType.PoppedChorusFruit; - mappings[219] = ItemType.Poppy; - mappings[881] = ItemType.Porkchop; - mappings[1098] = ItemType.Potato; - mappings[998] = ItemType.Potion; - mappings[911] = ItemType.PowderSnowBucket; - mappings[761] = ItemType.PoweredRail; - mappings[503] = ItemType.Prismarine; - mappings[279] = ItemType.PrismarineBrickSlab; - mappings[507] = ItemType.PrismarineBrickStairs; - mappings[504] = ItemType.PrismarineBricks; - mappings[1117] = ItemType.PrismarineCrystals; - mappings[1116] = ItemType.PrismarineShard; - mappings[278] = ItemType.PrismarineSlab; - mappings[506] = ItemType.PrismarineStairs; - mappings[400] = ItemType.PrismarineWall; - mappings[1302] = ItemType.PrizePotterySherd; - mappings[938] = ItemType.Pufferfish; - mappings[915] = ItemType.PufferfishBucket; - mappings[1054] = ItemType.PufferfishSpawnEgg; - mappings[322] = ItemType.Pumpkin; - mappings[1111] = ItemType.PumpkinPie; - mappings[986] = ItemType.PumpkinSeeds; - mappings[1143] = ItemType.PurpleBanner; - mappings[974] = ItemType.PurpleBed; - mappings[1249] = ItemType.PurpleCandle; - mappings[456] = ItemType.PurpleCarpet; - mappings[565] = ItemType.PurpleConcrete; - mappings[581] = ItemType.PurpleConcretePowder; - mappings[954] = ItemType.PurpleDye; - mappings[549] = ItemType.PurpleGlazedTerracotta; - mappings[533] = ItemType.PurpleShulkerBox; - mappings[481] = ItemType.PurpleStainedGlass; - mappings[497] = ItemType.PurpleStainedGlassPane; - mappings[437] = ItemType.PurpleTerracotta; - mappings[212] = ItemType.PurpleWool; - mappings[295] = ItemType.PurpurBlock; - mappings[296] = ItemType.PurpurPillar; - mappings[277] = ItemType.PurpurSlab; - mappings[297] = ItemType.PurpurStairs; - mappings[807] = ItemType.Quartz; - mappings[423] = ItemType.QuartzBlock; - mappings[424] = ItemType.QuartzBricks; - mappings[425] = ItemType.QuartzPillar; - mappings[274] = ItemType.QuartzSlab; - mappings[426] = ItemType.QuartzStairs; - mappings[1118] = ItemType.Rabbit; - mappings[1121] = ItemType.RabbitFoot; - mappings[1122] = ItemType.RabbitHide; - mappings[1055] = ItemType.RabbitSpawnEgg; - mappings[1120] = ItemType.RabbitStew; - mappings[763] = ItemType.Rail; - mappings[1281] = ItemType.RaiserArmorTrimSmithingTemplate; - mappings[1056] = ItemType.RavagerSpawnEgg; - mappings[811] = ItemType.RawCopper; - mappings[83] = ItemType.RawCopperBlock; - mappings[813] = ItemType.RawGold; - mappings[84] = ItemType.RawGoldBlock; - mappings[809] = ItemType.RawIron; - mappings[82] = ItemType.RawIronBlock; - mappings[929] = ItemType.RecoveryCompass; - mappings[1147] = ItemType.RedBanner; - mappings[978] = ItemType.RedBed; - mappings[1253] = ItemType.RedCandle; - mappings[460] = ItemType.RedCarpet; - mappings[569] = ItemType.RedConcrete; - mappings[585] = ItemType.RedConcretePowder; - mappings[958] = ItemType.RedDye; - mappings[553] = ItemType.RedGlazedTerracotta; - mappings[235] = ItemType.RedMushroom; - mappings[353] = ItemType.RedMushroomBlock; - mappings[649] = ItemType.RedNetherBrickSlab; - mappings[632] = ItemType.RedNetherBrickStairs; - mappings[408] = ItemType.RedNetherBrickWall; - mappings[519] = ItemType.RedNetherBricks; - mappings[60] = ItemType.RedSand; - mappings[510] = ItemType.RedSandstone; - mappings[275] = ItemType.RedSandstoneSlab; - mappings[513] = ItemType.RedSandstoneStairs; - mappings[401] = ItemType.RedSandstoneWall; - mappings[537] = ItemType.RedShulkerBox; - mappings[485] = ItemType.RedStainedGlass; - mappings[501] = ItemType.RedStainedGlassPane; - mappings[441] = ItemType.RedTerracotta; - mappings[223] = ItemType.RedTulip; - mappings[216] = ItemType.RedWool; - mappings[657] = ItemType.Redstone; - mappings[659] = ItemType.RedstoneBlock; - mappings[680] = ItemType.RedstoneLamp; - mappings[70] = ItemType.RedstoneOre; - mappings[658] = ItemType.RedstoneTorch; - mappings[351] = ItemType.ReinforcedDeepslate; - mappings[660] = ItemType.Repeater; - mappings[514] = ItemType.RepeatingCommandBlock; - mappings[1237] = ItemType.RespawnAnchor; - mappings[1276] = ItemType.RibArmorTrimSmithingTemplate; - mappings[31] = ItemType.RootedDirt; - mappings[467] = ItemType.RoseBush; - mappings[992] = ItemType.RottenFlesh; - mappings[765] = ItemType.Saddle; - mappings[936] = ItemType.Salmon; - mappings[916] = ItemType.SalmonBucket; - mappings[1057] = ItemType.SalmonSpawnEgg; - mappings[57] = ItemType.Sand; - mappings[191] = ItemType.Sandstone; - mappings[266] = ItemType.SandstoneSlab; - mappings[380] = ItemType.SandstoneStairs; - mappings[409] = ItemType.SandstoneWall; - mappings[656] = ItemType.Scaffolding; - mappings[1303] = ItemType.ScrapePotterySherd; - mappings[371] = ItemType.Sculk; - mappings[373] = ItemType.SculkCatalyst; - mappings[675] = ItemType.SculkSensor; - mappings[374] = ItemType.SculkShrieker; - mappings[372] = ItemType.SculkVein; - mappings[509] = ItemType.SeaLantern; - mappings[201] = ItemType.SeaPickle; - mappings[200] = ItemType.Seagrass; - mappings[1267] = ItemType.SentryArmorTrimSmithingTemplate; - mappings[1279] = ItemType.ShaperArmorTrimSmithingTemplate; - mappings[1304] = ItemType.SheafPotterySherd; - mappings[983] = ItemType.Shears; - mappings[1058] = ItemType.SheepSpawnEgg; - mappings[1305] = ItemType.ShelterPotterySherd; - mappings[1162] = ItemType.Shield; - mappings[195] = ItemType.ShortGrass; - mappings[1217] = ItemType.Shroomlight; - mappings[522] = ItemType.ShulkerBox; - mappings[1164] = ItemType.ShulkerShell; - mappings[1059] = ItemType.ShulkerSpawnEgg; - mappings[1280] = ItemType.SilenceArmorTrimSmithingTemplate; - mappings[1060] = ItemType.SilverfishSpawnEgg; - mappings[1062] = ItemType.SkeletonHorseSpawnEgg; - mappings[1103] = ItemType.SkeletonSkull; - mappings[1061] = ItemType.SkeletonSpawnEgg; - mappings[1194] = ItemType.SkullBannerPattern; - mappings[1306] = ItemType.SkullPotterySherd; - mappings[926] = ItemType.SlimeBall; - mappings[664] = ItemType.SlimeBlock; - mappings[1063] = ItemType.SlimeSpawnEgg; - mappings[1255] = ItemType.SmallAmethystBud; - mappings[250] = ItemType.SmallDripleaf; - mappings[1208] = ItemType.SmithingTable; - mappings[1203] = ItemType.Smoker; - mappings[330] = ItemType.SmoothBasalt; - mappings[281] = ItemType.SmoothQuartz; - mappings[646] = ItemType.SmoothQuartzSlab; - mappings[629] = ItemType.SmoothQuartzStairs; - mappings[282] = ItemType.SmoothRedSandstone; - mappings[640] = ItemType.SmoothRedSandstoneSlab; - mappings[622] = ItemType.SmoothRedSandstoneStairs; - mappings[283] = ItemType.SmoothSandstone; - mappings[645] = ItemType.SmoothSandstoneSlab; - mappings[628] = ItemType.SmoothSandstoneStairs; - mappings[284] = ItemType.SmoothStone; - mappings[265] = ItemType.SmoothStoneSlab; - mappings[588] = ItemType.SnifferEgg; - mappings[1064] = ItemType.SnifferSpawnEgg; - mappings[1307] = ItemType.SnortPotterySherd; - mappings[1275] = ItemType.SnoutArmorTrimSmithingTemplate; - mappings[305] = ItemType.Snow; - mappings[307] = ItemType.SnowBlock; - mappings[1065] = ItemType.SnowGolemSpawnEgg; - mappings[912] = ItemType.Snowball; - mappings[1216] = ItemType.SoulCampfire; - mappings[1212] = ItemType.SoulLantern; - mappings[326] = ItemType.SoulSand; - mappings[327] = ItemType.SoulSoil; - mappings[331] = ItemType.SoulTorch; - mappings[298] = ItemType.Spawner; - mappings[1159] = ItemType.SpectralArrow; - mappings[1000] = ItemType.SpiderEye; - mappings[1066] = ItemType.SpiderSpawnEgg; - mappings[1277] = ItemType.SpireArmorTrimSmithingTemplate; - mappings[1158] = ItemType.SplashPotion; - mappings[186] = ItemType.Sponge; - mappings[233] = ItemType.SporeBlossom; - mappings[776] = ItemType.SpruceBoat; - mappings[685] = ItemType.SpruceButton; - mappings[777] = ItemType.SpruceChestBoat; - mappings[712] = ItemType.SpruceDoor; - mappings[312] = ItemType.SpruceFence; - mappings[751] = ItemType.SpruceFenceGate; - mappings[898] = ItemType.SpruceHangingSign; - mappings[177] = ItemType.SpruceLeaves; - mappings[133] = ItemType.SpruceLog; - mappings[37] = ItemType.SprucePlanks; - mappings[700] = ItemType.SprucePressurePlate; - mappings[49] = ItemType.SpruceSapling; - mappings[887] = ItemType.SpruceSign; - mappings[253] = ItemType.SpruceSlab; - mappings[384] = ItemType.SpruceStairs; - mappings[732] = ItemType.SpruceTrapdoor; - mappings[167] = ItemType.SpruceWood; - mappings[933] = ItemType.Spyglass; - mappings[1067] = ItemType.SquidSpawnEgg; - mappings[847] = ItemType.Stick; - mappings[663] = ItemType.StickyPiston; - mappings[1] = ItemType.Stone; - mappings[825] = ItemType.StoneAxe; - mappings[271] = ItemType.StoneBrickSlab; - mappings[362] = ItemType.StoneBrickStairs; - mappings[404] = ItemType.StoneBrickWall; - mappings[340] = ItemType.StoneBricks; - mappings[682] = ItemType.StoneButton; - mappings[826] = ItemType.StoneHoe; - mappings[824] = ItemType.StonePickaxe; - mappings[695] = ItemType.StonePressurePlate; - mappings[823] = ItemType.StoneShovel; - mappings[264] = ItemType.StoneSlab; - mappings[627] = ItemType.StoneStairs; - mappings[822] = ItemType.StoneSword; - mappings[1209] = ItemType.Stonecutter; - mappings[1068] = ItemType.StraySpawnEgg; - mappings[1069] = ItemType.StriderSpawnEgg; - mappings[850] = ItemType.String; - mappings[149] = ItemType.StrippedAcaciaLog; - mappings[159] = ItemType.StrippedAcaciaWood; - mappings[165] = ItemType.StrippedBambooBlock; - mappings[147] = ItemType.StrippedBirchLog; - mappings[157] = ItemType.StrippedBirchWood; - mappings[150] = ItemType.StrippedCherryLog; - mappings[160] = ItemType.StrippedCherryWood; - mappings[163] = ItemType.StrippedCrimsonHyphae; - mappings[153] = ItemType.StrippedCrimsonStem; - mappings[151] = ItemType.StrippedDarkOakLog; - mappings[161] = ItemType.StrippedDarkOakWood; - mappings[148] = ItemType.StrippedJungleLog; - mappings[158] = ItemType.StrippedJungleWood; - mappings[152] = ItemType.StrippedMangroveLog; - mappings[162] = ItemType.StrippedMangroveWood; - mappings[145] = ItemType.StrippedOakLog; - mappings[155] = ItemType.StrippedOakWood; - mappings[146] = ItemType.StrippedSpruceLog; - mappings[156] = ItemType.StrippedSpruceWood; - mappings[164] = ItemType.StrippedWarpedHyphae; - mappings[154] = ItemType.StrippedWarpedStem; - mappings[792] = ItemType.StructureBlock; - mappings[521] = ItemType.StructureVoid; - mappings[962] = ItemType.Sugar; - mappings[243] = ItemType.SugarCane; - mappings[465] = ItemType.Sunflower; - mappings[59] = ItemType.SuspiciousGravel; - mappings[58] = ItemType.SuspiciousSand; - mappings[1190] = ItemType.SuspiciousStew; - mappings[1213] = ItemType.SweetBerries; - mappings[920] = ItemType.TadpoleBucket; - mappings[1070] = ItemType.TadpoleSpawnEgg; - mappings[469] = ItemType.TallGrass; - mappings[671] = ItemType.Target; - mappings[462] = ItemType.Terracotta; - mappings[1274] = ItemType.TideArmorTrimSmithingTemplate; - mappings[189] = ItemType.TintedGlass; - mappings[1160] = ItemType.TippedArrow; - mappings[679] = ItemType.Tnt; - mappings[769] = ItemType.TntMinecart; - mappings[291] = ItemType.Torch; - mappings[231] = ItemType.Torchflower; - mappings[1152] = ItemType.TorchflowerSeeds; - mappings[1163] = ItemType.TotemOfUndying; - mappings[1071] = ItemType.TraderLlamaSpawnEgg; - mappings[678] = ItemType.TrappedChest; - mappings[1325] = ItemType.TrialKey; - mappings[1324] = ItemType.TrialSpawner; - mappings[1185] = ItemType.Trident; - mappings[677] = ItemType.TripwireHook; - mappings[937] = ItemType.TropicalFish; - mappings[918] = ItemType.TropicalFishBucket; - mappings[1072] = ItemType.TropicalFishSpawnEgg; - mappings[599] = ItemType.TubeCoral; - mappings[594] = ItemType.TubeCoralBlock; - mappings[609] = ItemType.TubeCoralFan; - mappings[12] = ItemType.Tuff; - mappings[22] = ItemType.TuffBrickSlab; - mappings[23] = ItemType.TuffBrickStairs; - mappings[24] = ItemType.TuffBrickWall; - mappings[21] = ItemType.TuffBricks; - mappings[13] = ItemType.TuffSlab; - mappings[14] = ItemType.TuffStairs; - mappings[15] = ItemType.TuffWall; - mappings[587] = ItemType.TurtleEgg; - mappings[794] = ItemType.TurtleHelmet; - mappings[795] = ItemType.TurtleScute; - mappings[1073] = ItemType.TurtleSpawnEgg; - mappings[242] = ItemType.TwistingVines; - mappings[1327] = ItemType.Vault; - mappings[1261] = ItemType.VerdantFroglight; - mappings[1273] = ItemType.VexArmorTrimSmithingTemplate; - mappings[1074] = ItemType.VexSpawnEgg; - mappings[1075] = ItemType.VillagerSpawnEgg; - mappings[1076] = ItemType.VindicatorSpawnEgg; - mappings[359] = ItemType.Vine; - mappings[1077] = ItemType.WanderingTraderSpawnEgg; - mappings[1271] = ItemType.WardArmorTrimSmithingTemplate; - mappings[1078] = ItemType.WardenSpawnEgg; - mappings[694] = ItemType.WarpedButton; - mappings[721] = ItemType.WarpedDoor; - mappings[321] = ItemType.WarpedFence; - mappings[760] = ItemType.WarpedFenceGate; - mappings[237] = ItemType.WarpedFungus; - mappings[772] = ItemType.WarpedFungusOnAStick; - mappings[907] = ItemType.WarpedHangingSign; - mappings[175] = ItemType.WarpedHyphae; - mappings[34] = ItemType.WarpedNylium; - mappings[46] = ItemType.WarpedPlanks; - mappings[709] = ItemType.WarpedPressurePlate; - mappings[239] = ItemType.WarpedRoots; - mappings[896] = ItemType.WarpedSign; - mappings[263] = ItemType.WarpedSlab; - mappings[394] = ItemType.WarpedStairs; - mappings[143] = ItemType.WarpedStem; - mappings[741] = ItemType.WarpedTrapdoor; - mappings[518] = ItemType.WarpedWartBlock; - mappings[909] = ItemType.WaterBucket; - mappings[116] = ItemType.WaxedChiseledCopper; - mappings[112] = ItemType.WaxedCopperBlock; - mappings[1320] = ItemType.WaxedCopperBulb; - mappings[726] = ItemType.WaxedCopperDoor; - mappings[1312] = ItemType.WaxedCopperGrate; - mappings[746] = ItemType.WaxedCopperTrapdoor; - mappings[120] = ItemType.WaxedCutCopper; - mappings[128] = ItemType.WaxedCutCopperSlab; - mappings[124] = ItemType.WaxedCutCopperStairs; - mappings[117] = ItemType.WaxedExposedChiseledCopper; - mappings[113] = ItemType.WaxedExposedCopper; - mappings[1321] = ItemType.WaxedExposedCopperBulb; - mappings[727] = ItemType.WaxedExposedCopperDoor; - mappings[1313] = ItemType.WaxedExposedCopperGrate; - mappings[747] = ItemType.WaxedExposedCopperTrapdoor; - mappings[121] = ItemType.WaxedExposedCutCopper; - mappings[129] = ItemType.WaxedExposedCutCopperSlab; - mappings[125] = ItemType.WaxedExposedCutCopperStairs; - mappings[119] = ItemType.WaxedOxidizedChiseledCopper; - mappings[115] = ItemType.WaxedOxidizedCopper; - mappings[1323] = ItemType.WaxedOxidizedCopperBulb; - mappings[729] = ItemType.WaxedOxidizedCopperDoor; - mappings[1315] = ItemType.WaxedOxidizedCopperGrate; - mappings[749] = ItemType.WaxedOxidizedCopperTrapdoor; - mappings[123] = ItemType.WaxedOxidizedCutCopper; - mappings[131] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[127] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[118] = ItemType.WaxedWeatheredChiseledCopper; - mappings[114] = ItemType.WaxedWeatheredCopper; - mappings[1322] = ItemType.WaxedWeatheredCopperBulb; - mappings[728] = ItemType.WaxedWeatheredCopperDoor; - mappings[1314] = ItemType.WaxedWeatheredCopperGrate; - mappings[748] = ItemType.WaxedWeatheredCopperTrapdoor; - mappings[122] = ItemType.WaxedWeatheredCutCopper; - mappings[130] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[126] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[1278] = ItemType.WayfinderArmorTrimSmithingTemplate; - mappings[98] = ItemType.WeatheredChiseledCopper; - mappings[94] = ItemType.WeatheredCopper; - mappings[1318] = ItemType.WeatheredCopperBulb; - mappings[724] = ItemType.WeatheredCopperDoor; - mappings[1310] = ItemType.WeatheredCopperGrate; - mappings[744] = ItemType.WeatheredCopperTrapdoor; - mappings[102] = ItemType.WeatheredCutCopper; - mappings[110] = ItemType.WeatheredCutCopperSlab; - mappings[106] = ItemType.WeatheredCutCopperStairs; - mappings[241] = ItemType.WeepingVines; - mappings[187] = ItemType.WetSponge; - mappings[854] = ItemType.Wheat; - mappings[853] = ItemType.WheatSeeds; - mappings[1133] = ItemType.WhiteBanner; - mappings[964] = ItemType.WhiteBed; - mappings[1239] = ItemType.WhiteCandle; - mappings[446] = ItemType.WhiteCarpet; - mappings[555] = ItemType.WhiteConcrete; - mappings[571] = ItemType.WhiteConcretePowder; - mappings[944] = ItemType.WhiteDye; - mappings[539] = ItemType.WhiteGlazedTerracotta; - mappings[523] = ItemType.WhiteShulkerBox; - mappings[471] = ItemType.WhiteStainedGlass; - mappings[487] = ItemType.WhiteStainedGlassPane; - mappings[427] = ItemType.WhiteTerracotta; - mappings[225] = ItemType.WhiteTulip; - mappings[202] = ItemType.WhiteWool; - mappings[1270] = ItemType.WildArmorTrimSmithingTemplate; - mappings[1090] = ItemType.WindCharge; - mappings[1079] = ItemType.WitchSpawnEgg; - mappings[230] = ItemType.WitherRose; - mappings[1104] = ItemType.WitherSkeletonSkull; - mappings[1081] = ItemType.WitherSkeletonSpawnEgg; - mappings[1080] = ItemType.WitherSpawnEgg; - mappings[797] = ItemType.WolfArmor; - mappings[1082] = ItemType.WolfSpawnEgg; - mappings[820] = ItemType.WoodenAxe; - mappings[821] = ItemType.WoodenHoe; - mappings[819] = ItemType.WoodenPickaxe; - mappings[818] = ItemType.WoodenShovel; - mappings[817] = ItemType.WoodenSword; - mappings[1091] = ItemType.WritableBook; - mappings[1092] = ItemType.WrittenBook; - mappings[1137] = ItemType.YellowBanner; - mappings[968] = ItemType.YellowBed; - mappings[1243] = ItemType.YellowCandle; - mappings[450] = ItemType.YellowCarpet; - mappings[559] = ItemType.YellowConcrete; - mappings[575] = ItemType.YellowConcretePowder; - mappings[948] = ItemType.YellowDye; - mappings[543] = ItemType.YellowGlazedTerracotta; - mappings[527] = ItemType.YellowShulkerBox; - mappings[475] = ItemType.YellowStainedGlass; - mappings[491] = ItemType.YellowStainedGlassPane; - mappings[431] = ItemType.YellowTerracotta; - mappings[206] = ItemType.YellowWool; - mappings[1083] = ItemType.ZoglinSpawnEgg; - mappings[1106] = ItemType.ZombieHead; - mappings[1085] = ItemType.ZombieHorseSpawnEgg; - mappings[1084] = ItemType.ZombieSpawnEgg; - mappings[1086] = ItemType.ZombieVillagerSpawnEgg; - mappings[1087] = ItemType.ZombifiedPiglinSpawnEgg; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette121.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette121.cs deleted file mode 100644 index 6759d89977..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette121.cs +++ /dev/null @@ -1,1351 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette121 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette121() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.Deepslate; - mappings[9] = ItemType.CobbledDeepslate; - mappings[10] = ItemType.PolishedDeepslate; - mappings[11] = ItemType.Calcite; - mappings[12] = ItemType.Tuff; - mappings[13] = ItemType.TuffSlab; - mappings[14] = ItemType.TuffStairs; - mappings[15] = ItemType.TuffWall; - mappings[16] = ItemType.ChiseledTuff; - mappings[17] = ItemType.PolishedTuff; - mappings[18] = ItemType.PolishedTuffSlab; - mappings[19] = ItemType.PolishedTuffStairs; - mappings[20] = ItemType.PolishedTuffWall; - mappings[21] = ItemType.TuffBricks; - mappings[22] = ItemType.TuffBrickSlab; - mappings[23] = ItemType.TuffBrickStairs; - mappings[24] = ItemType.TuffBrickWall; - mappings[25] = ItemType.ChiseledTuffBricks; - mappings[26] = ItemType.DripstoneBlock; - mappings[27] = ItemType.GrassBlock; - mappings[28] = ItemType.Dirt; - mappings[29] = ItemType.CoarseDirt; - mappings[30] = ItemType.Podzol; - mappings[31] = ItemType.RootedDirt; - mappings[32] = ItemType.Mud; - mappings[33] = ItemType.CrimsonNylium; - mappings[34] = ItemType.WarpedNylium; - mappings[35] = ItemType.Cobblestone; - mappings[36] = ItemType.OakPlanks; - mappings[37] = ItemType.SprucePlanks; - mappings[38] = ItemType.BirchPlanks; - mappings[39] = ItemType.JunglePlanks; - mappings[40] = ItemType.AcaciaPlanks; - mappings[41] = ItemType.CherryPlanks; - mappings[42] = ItemType.DarkOakPlanks; - mappings[43] = ItemType.MangrovePlanks; - mappings[44] = ItemType.BambooPlanks; - mappings[45] = ItemType.CrimsonPlanks; - mappings[46] = ItemType.WarpedPlanks; - mappings[47] = ItemType.BambooMosaic; - mappings[48] = ItemType.OakSapling; - mappings[49] = ItemType.SpruceSapling; - mappings[50] = ItemType.BirchSapling; - mappings[51] = ItemType.JungleSapling; - mappings[52] = ItemType.AcaciaSapling; - mappings[53] = ItemType.CherrySapling; - mappings[54] = ItemType.DarkOakSapling; - mappings[55] = ItemType.MangrovePropagule; - mappings[56] = ItemType.Bedrock; - mappings[57] = ItemType.Sand; - mappings[58] = ItemType.SuspiciousSand; - mappings[59] = ItemType.SuspiciousGravel; - mappings[60] = ItemType.RedSand; - mappings[61] = ItemType.Gravel; - mappings[62] = ItemType.CoalOre; - mappings[63] = ItemType.DeepslateCoalOre; - mappings[64] = ItemType.IronOre; - mappings[65] = ItemType.DeepslateIronOre; - mappings[66] = ItemType.CopperOre; - mappings[67] = ItemType.DeepslateCopperOre; - mappings[68] = ItemType.GoldOre; - mappings[69] = ItemType.DeepslateGoldOre; - mappings[70] = ItemType.RedstoneOre; - mappings[71] = ItemType.DeepslateRedstoneOre; - mappings[72] = ItemType.EmeraldOre; - mappings[73] = ItemType.DeepslateEmeraldOre; - mappings[74] = ItemType.LapisOre; - mappings[75] = ItemType.DeepslateLapisOre; - mappings[76] = ItemType.DiamondOre; - mappings[77] = ItemType.DeepslateDiamondOre; - mappings[78] = ItemType.NetherGoldOre; - mappings[79] = ItemType.NetherQuartzOre; - mappings[80] = ItemType.AncientDebris; - mappings[81] = ItemType.CoalBlock; - mappings[82] = ItemType.RawIronBlock; - mappings[83] = ItemType.RawCopperBlock; - mappings[84] = ItemType.RawGoldBlock; - mappings[85] = ItemType.HeavyCore; - mappings[86] = ItemType.AmethystBlock; - mappings[87] = ItemType.BuddingAmethyst; - mappings[88] = ItemType.IronBlock; - mappings[89] = ItemType.CopperBlock; - mappings[90] = ItemType.GoldBlock; - mappings[91] = ItemType.DiamondBlock; - mappings[92] = ItemType.NetheriteBlock; - mappings[93] = ItemType.ExposedCopper; - mappings[94] = ItemType.WeatheredCopper; - mappings[95] = ItemType.OxidizedCopper; - mappings[96] = ItemType.ChiseledCopper; - mappings[97] = ItemType.ExposedChiseledCopper; - mappings[98] = ItemType.WeatheredChiseledCopper; - mappings[99] = ItemType.OxidizedChiseledCopper; - mappings[100] = ItemType.CutCopper; - mappings[101] = ItemType.ExposedCutCopper; - mappings[102] = ItemType.WeatheredCutCopper; - mappings[103] = ItemType.OxidizedCutCopper; - mappings[104] = ItemType.CutCopperStairs; - mappings[105] = ItemType.ExposedCutCopperStairs; - mappings[106] = ItemType.WeatheredCutCopperStairs; - mappings[107] = ItemType.OxidizedCutCopperStairs; - mappings[108] = ItemType.CutCopperSlab; - mappings[109] = ItemType.ExposedCutCopperSlab; - mappings[110] = ItemType.WeatheredCutCopperSlab; - mappings[111] = ItemType.OxidizedCutCopperSlab; - mappings[112] = ItemType.WaxedCopperBlock; - mappings[113] = ItemType.WaxedExposedCopper; - mappings[114] = ItemType.WaxedWeatheredCopper; - mappings[115] = ItemType.WaxedOxidizedCopper; - mappings[116] = ItemType.WaxedChiseledCopper; - mappings[117] = ItemType.WaxedExposedChiseledCopper; - mappings[118] = ItemType.WaxedWeatheredChiseledCopper; - mappings[119] = ItemType.WaxedOxidizedChiseledCopper; - mappings[120] = ItemType.WaxedCutCopper; - mappings[121] = ItemType.WaxedExposedCutCopper; - mappings[122] = ItemType.WaxedWeatheredCutCopper; - mappings[123] = ItemType.WaxedOxidizedCutCopper; - mappings[124] = ItemType.WaxedCutCopperStairs; - mappings[125] = ItemType.WaxedExposedCutCopperStairs; - mappings[126] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[127] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[128] = ItemType.WaxedCutCopperSlab; - mappings[129] = ItemType.WaxedExposedCutCopperSlab; - mappings[130] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[131] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[132] = ItemType.OakLog; - mappings[133] = ItemType.SpruceLog; - mappings[134] = ItemType.BirchLog; - mappings[135] = ItemType.JungleLog; - mappings[136] = ItemType.AcaciaLog; - mappings[137] = ItemType.CherryLog; - mappings[138] = ItemType.DarkOakLog; - mappings[139] = ItemType.MangroveLog; - mappings[140] = ItemType.MangroveRoots; - mappings[141] = ItemType.MuddyMangroveRoots; - mappings[142] = ItemType.CrimsonStem; - mappings[143] = ItemType.WarpedStem; - mappings[144] = ItemType.BambooBlock; - mappings[145] = ItemType.StrippedOakLog; - mappings[146] = ItemType.StrippedSpruceLog; - mappings[147] = ItemType.StrippedBirchLog; - mappings[148] = ItemType.StrippedJungleLog; - mappings[149] = ItemType.StrippedAcaciaLog; - mappings[150] = ItemType.StrippedCherryLog; - mappings[151] = ItemType.StrippedDarkOakLog; - mappings[152] = ItemType.StrippedMangroveLog; - mappings[153] = ItemType.StrippedCrimsonStem; - mappings[154] = ItemType.StrippedWarpedStem; - mappings[155] = ItemType.StrippedOakWood; - mappings[156] = ItemType.StrippedSpruceWood; - mappings[157] = ItemType.StrippedBirchWood; - mappings[158] = ItemType.StrippedJungleWood; - mappings[159] = ItemType.StrippedAcaciaWood; - mappings[160] = ItemType.StrippedCherryWood; - mappings[161] = ItemType.StrippedDarkOakWood; - mappings[162] = ItemType.StrippedMangroveWood; - mappings[163] = ItemType.StrippedCrimsonHyphae; - mappings[164] = ItemType.StrippedWarpedHyphae; - mappings[165] = ItemType.StrippedBambooBlock; - mappings[166] = ItemType.OakWood; - mappings[167] = ItemType.SpruceWood; - mappings[168] = ItemType.BirchWood; - mappings[169] = ItemType.JungleWood; - mappings[170] = ItemType.AcaciaWood; - mappings[171] = ItemType.CherryWood; - mappings[172] = ItemType.DarkOakWood; - mappings[173] = ItemType.MangroveWood; - mappings[174] = ItemType.CrimsonHyphae; - mappings[175] = ItemType.WarpedHyphae; - mappings[176] = ItemType.OakLeaves; - mappings[177] = ItemType.SpruceLeaves; - mappings[178] = ItemType.BirchLeaves; - mappings[179] = ItemType.JungleLeaves; - mappings[180] = ItemType.AcaciaLeaves; - mappings[181] = ItemType.CherryLeaves; - mappings[182] = ItemType.DarkOakLeaves; - mappings[183] = ItemType.MangroveLeaves; - mappings[184] = ItemType.AzaleaLeaves; - mappings[185] = ItemType.FloweringAzaleaLeaves; - mappings[186] = ItemType.Sponge; - mappings[187] = ItemType.WetSponge; - mappings[188] = ItemType.Glass; - mappings[189] = ItemType.TintedGlass; - mappings[190] = ItemType.LapisBlock; - mappings[191] = ItemType.Sandstone; - mappings[192] = ItemType.ChiseledSandstone; - mappings[193] = ItemType.CutSandstone; - mappings[194] = ItemType.Cobweb; - mappings[195] = ItemType.ShortGrass; - mappings[196] = ItemType.Fern; - mappings[197] = ItemType.Azalea; - mappings[198] = ItemType.FloweringAzalea; - mappings[199] = ItemType.DeadBush; - mappings[200] = ItemType.Seagrass; - mappings[201] = ItemType.SeaPickle; - mappings[202] = ItemType.WhiteWool; - mappings[203] = ItemType.OrangeWool; - mappings[204] = ItemType.MagentaWool; - mappings[205] = ItemType.LightBlueWool; - mappings[206] = ItemType.YellowWool; - mappings[207] = ItemType.LimeWool; - mappings[208] = ItemType.PinkWool; - mappings[209] = ItemType.GrayWool; - mappings[210] = ItemType.LightGrayWool; - mappings[211] = ItemType.CyanWool; - mappings[212] = ItemType.PurpleWool; - mappings[213] = ItemType.BlueWool; - mappings[214] = ItemType.BrownWool; - mappings[215] = ItemType.GreenWool; - mappings[216] = ItemType.RedWool; - mappings[217] = ItemType.BlackWool; - mappings[218] = ItemType.Dandelion; - mappings[219] = ItemType.Poppy; - mappings[220] = ItemType.BlueOrchid; - mappings[221] = ItemType.Allium; - mappings[222] = ItemType.AzureBluet; - mappings[223] = ItemType.RedTulip; - mappings[224] = ItemType.OrangeTulip; - mappings[225] = ItemType.WhiteTulip; - mappings[226] = ItemType.PinkTulip; - mappings[227] = ItemType.OxeyeDaisy; - mappings[228] = ItemType.Cornflower; - mappings[229] = ItemType.LilyOfTheValley; - mappings[230] = ItemType.WitherRose; - mappings[231] = ItemType.Torchflower; - mappings[232] = ItemType.PitcherPlant; - mappings[233] = ItemType.SporeBlossom; - mappings[234] = ItemType.BrownMushroom; - mappings[235] = ItemType.RedMushroom; - mappings[236] = ItemType.CrimsonFungus; - mappings[237] = ItemType.WarpedFungus; - mappings[238] = ItemType.CrimsonRoots; - mappings[239] = ItemType.WarpedRoots; - mappings[240] = ItemType.NetherSprouts; - mappings[241] = ItemType.WeepingVines; - mappings[242] = ItemType.TwistingVines; - mappings[243] = ItemType.SugarCane; - mappings[244] = ItemType.Kelp; - mappings[245] = ItemType.MossCarpet; - mappings[246] = ItemType.PinkPetals; - mappings[247] = ItemType.MossBlock; - mappings[248] = ItemType.HangingRoots; - mappings[249] = ItemType.BigDripleaf; - mappings[250] = ItemType.SmallDripleaf; - mappings[251] = ItemType.Bamboo; - mappings[252] = ItemType.OakSlab; - mappings[253] = ItemType.SpruceSlab; - mappings[254] = ItemType.BirchSlab; - mappings[255] = ItemType.JungleSlab; - mappings[256] = ItemType.AcaciaSlab; - mappings[257] = ItemType.CherrySlab; - mappings[258] = ItemType.DarkOakSlab; - mappings[259] = ItemType.MangroveSlab; - mappings[260] = ItemType.BambooSlab; - mappings[261] = ItemType.BambooMosaicSlab; - mappings[262] = ItemType.CrimsonSlab; - mappings[263] = ItemType.WarpedSlab; - mappings[264] = ItemType.StoneSlab; - mappings[265] = ItemType.SmoothStoneSlab; - mappings[266] = ItemType.SandstoneSlab; - mappings[267] = ItemType.CutSandstoneSlab; - mappings[268] = ItemType.PetrifiedOakSlab; - mappings[269] = ItemType.CobblestoneSlab; - mappings[270] = ItemType.BrickSlab; - mappings[271] = ItemType.StoneBrickSlab; - mappings[272] = ItemType.MudBrickSlab; - mappings[273] = ItemType.NetherBrickSlab; - mappings[274] = ItemType.QuartzSlab; - mappings[275] = ItemType.RedSandstoneSlab; - mappings[276] = ItemType.CutRedSandstoneSlab; - mappings[277] = ItemType.PurpurSlab; - mappings[278] = ItemType.PrismarineSlab; - mappings[279] = ItemType.PrismarineBrickSlab; - mappings[280] = ItemType.DarkPrismarineSlab; - mappings[281] = ItemType.SmoothQuartz; - mappings[282] = ItemType.SmoothRedSandstone; - mappings[283] = ItemType.SmoothSandstone; - mappings[284] = ItemType.SmoothStone; - mappings[285] = ItemType.Bricks; - mappings[286] = ItemType.Bookshelf; - mappings[287] = ItemType.ChiseledBookshelf; - mappings[288] = ItemType.DecoratedPot; - mappings[289] = ItemType.MossyCobblestone; - mappings[290] = ItemType.Obsidian; - mappings[291] = ItemType.Torch; - mappings[292] = ItemType.EndRod; - mappings[293] = ItemType.ChorusPlant; - mappings[294] = ItemType.ChorusFlower; - mappings[295] = ItemType.PurpurBlock; - mappings[296] = ItemType.PurpurPillar; - mappings[297] = ItemType.PurpurStairs; - mappings[298] = ItemType.Spawner; - mappings[299] = ItemType.Chest; - mappings[300] = ItemType.CraftingTable; - mappings[301] = ItemType.Farmland; - mappings[302] = ItemType.Furnace; - mappings[303] = ItemType.Ladder; - mappings[304] = ItemType.CobblestoneStairs; - mappings[305] = ItemType.Snow; - mappings[306] = ItemType.Ice; - mappings[307] = ItemType.SnowBlock; - mappings[308] = ItemType.Cactus; - mappings[309] = ItemType.Clay; - mappings[310] = ItemType.Jukebox; - mappings[311] = ItemType.OakFence; - mappings[312] = ItemType.SpruceFence; - mappings[313] = ItemType.BirchFence; - mappings[314] = ItemType.JungleFence; - mappings[315] = ItemType.AcaciaFence; - mappings[316] = ItemType.CherryFence; - mappings[317] = ItemType.DarkOakFence; - mappings[318] = ItemType.MangroveFence; - mappings[319] = ItemType.BambooFence; - mappings[320] = ItemType.CrimsonFence; - mappings[321] = ItemType.WarpedFence; - mappings[322] = ItemType.Pumpkin; - mappings[323] = ItemType.CarvedPumpkin; - mappings[324] = ItemType.JackOLantern; - mappings[325] = ItemType.Netherrack; - mappings[326] = ItemType.SoulSand; - mappings[327] = ItemType.SoulSoil; - mappings[328] = ItemType.Basalt; - mappings[329] = ItemType.PolishedBasalt; - mappings[330] = ItemType.SmoothBasalt; - mappings[331] = ItemType.SoulTorch; - mappings[332] = ItemType.Glowstone; - mappings[333] = ItemType.InfestedStone; - mappings[334] = ItemType.InfestedCobblestone; - mappings[335] = ItemType.InfestedStoneBricks; - mappings[336] = ItemType.InfestedMossyStoneBricks; - mappings[337] = ItemType.InfestedCrackedStoneBricks; - mappings[338] = ItemType.InfestedChiseledStoneBricks; - mappings[339] = ItemType.InfestedDeepslate; - mappings[340] = ItemType.StoneBricks; - mappings[341] = ItemType.MossyStoneBricks; - mappings[342] = ItemType.CrackedStoneBricks; - mappings[343] = ItemType.ChiseledStoneBricks; - mappings[344] = ItemType.PackedMud; - mappings[345] = ItemType.MudBricks; - mappings[346] = ItemType.DeepslateBricks; - mappings[347] = ItemType.CrackedDeepslateBricks; - mappings[348] = ItemType.DeepslateTiles; - mappings[349] = ItemType.CrackedDeepslateTiles; - mappings[350] = ItemType.ChiseledDeepslate; - mappings[351] = ItemType.ReinforcedDeepslate; - mappings[352] = ItemType.BrownMushroomBlock; - mappings[353] = ItemType.RedMushroomBlock; - mappings[354] = ItemType.MushroomStem; - mappings[355] = ItemType.IronBars; - mappings[356] = ItemType.Chain; - mappings[357] = ItemType.GlassPane; - mappings[358] = ItemType.Melon; - mappings[359] = ItemType.Vine; - mappings[360] = ItemType.GlowLichen; - mappings[361] = ItemType.BrickStairs; - mappings[362] = ItemType.StoneBrickStairs; - mappings[363] = ItemType.MudBrickStairs; - mappings[364] = ItemType.Mycelium; - mappings[365] = ItemType.LilyPad; - mappings[366] = ItemType.NetherBricks; - mappings[367] = ItemType.CrackedNetherBricks; - mappings[368] = ItemType.ChiseledNetherBricks; - mappings[369] = ItemType.NetherBrickFence; - mappings[370] = ItemType.NetherBrickStairs; - mappings[371] = ItemType.Sculk; - mappings[372] = ItemType.SculkVein; - mappings[373] = ItemType.SculkCatalyst; - mappings[374] = ItemType.SculkShrieker; - mappings[375] = ItemType.EnchantingTable; - mappings[376] = ItemType.EndPortalFrame; - mappings[377] = ItemType.EndStone; - mappings[378] = ItemType.EndStoneBricks; - mappings[379] = ItemType.DragonEgg; - mappings[380] = ItemType.SandstoneStairs; - mappings[381] = ItemType.EnderChest; - mappings[382] = ItemType.EmeraldBlock; - mappings[383] = ItemType.OakStairs; - mappings[384] = ItemType.SpruceStairs; - mappings[385] = ItemType.BirchStairs; - mappings[386] = ItemType.JungleStairs; - mappings[387] = ItemType.AcaciaStairs; - mappings[388] = ItemType.CherryStairs; - mappings[389] = ItemType.DarkOakStairs; - mappings[390] = ItemType.MangroveStairs; - mappings[391] = ItemType.BambooStairs; - mappings[392] = ItemType.BambooMosaicStairs; - mappings[393] = ItemType.CrimsonStairs; - mappings[394] = ItemType.WarpedStairs; - mappings[395] = ItemType.CommandBlock; - mappings[396] = ItemType.Beacon; - mappings[397] = ItemType.CobblestoneWall; - mappings[398] = ItemType.MossyCobblestoneWall; - mappings[399] = ItemType.BrickWall; - mappings[400] = ItemType.PrismarineWall; - mappings[401] = ItemType.RedSandstoneWall; - mappings[402] = ItemType.MossyStoneBrickWall; - mappings[403] = ItemType.GraniteWall; - mappings[404] = ItemType.StoneBrickWall; - mappings[405] = ItemType.MudBrickWall; - mappings[406] = ItemType.NetherBrickWall; - mappings[407] = ItemType.AndesiteWall; - mappings[408] = ItemType.RedNetherBrickWall; - mappings[409] = ItemType.SandstoneWall; - mappings[410] = ItemType.EndStoneBrickWall; - mappings[411] = ItemType.DioriteWall; - mappings[412] = ItemType.BlackstoneWall; - mappings[413] = ItemType.PolishedBlackstoneWall; - mappings[414] = ItemType.PolishedBlackstoneBrickWall; - mappings[415] = ItemType.CobbledDeepslateWall; - mappings[416] = ItemType.PolishedDeepslateWall; - mappings[417] = ItemType.DeepslateBrickWall; - mappings[418] = ItemType.DeepslateTileWall; - mappings[419] = ItemType.Anvil; - mappings[420] = ItemType.ChippedAnvil; - mappings[421] = ItemType.DamagedAnvil; - mappings[422] = ItemType.ChiseledQuartzBlock; - mappings[423] = ItemType.QuartzBlock; - mappings[424] = ItemType.QuartzBricks; - mappings[425] = ItemType.QuartzPillar; - mappings[426] = ItemType.QuartzStairs; - mappings[427] = ItemType.WhiteTerracotta; - mappings[428] = ItemType.OrangeTerracotta; - mappings[429] = ItemType.MagentaTerracotta; - mappings[430] = ItemType.LightBlueTerracotta; - mappings[431] = ItemType.YellowTerracotta; - mappings[432] = ItemType.LimeTerracotta; - mappings[433] = ItemType.PinkTerracotta; - mappings[434] = ItemType.GrayTerracotta; - mappings[435] = ItemType.LightGrayTerracotta; - mappings[436] = ItemType.CyanTerracotta; - mappings[437] = ItemType.PurpleTerracotta; - mappings[438] = ItemType.BlueTerracotta; - mappings[439] = ItemType.BrownTerracotta; - mappings[440] = ItemType.GreenTerracotta; - mappings[441] = ItemType.RedTerracotta; - mappings[442] = ItemType.BlackTerracotta; - mappings[443] = ItemType.Barrier; - mappings[444] = ItemType.Light; - mappings[445] = ItemType.HayBlock; - mappings[446] = ItemType.WhiteCarpet; - mappings[447] = ItemType.OrangeCarpet; - mappings[448] = ItemType.MagentaCarpet; - mappings[449] = ItemType.LightBlueCarpet; - mappings[450] = ItemType.YellowCarpet; - mappings[451] = ItemType.LimeCarpet; - mappings[452] = ItemType.PinkCarpet; - mappings[453] = ItemType.GrayCarpet; - mappings[454] = ItemType.LightGrayCarpet; - mappings[455] = ItemType.CyanCarpet; - mappings[456] = ItemType.PurpleCarpet; - mappings[457] = ItemType.BlueCarpet; - mappings[458] = ItemType.BrownCarpet; - mappings[459] = ItemType.GreenCarpet; - mappings[460] = ItemType.RedCarpet; - mappings[461] = ItemType.BlackCarpet; - mappings[462] = ItemType.Terracotta; - mappings[463] = ItemType.PackedIce; - mappings[464] = ItemType.DirtPath; - mappings[465] = ItemType.Sunflower; - mappings[466] = ItemType.Lilac; - mappings[467] = ItemType.RoseBush; - mappings[468] = ItemType.Peony; - mappings[469] = ItemType.TallGrass; - mappings[470] = ItemType.LargeFern; - mappings[471] = ItemType.WhiteStainedGlass; - mappings[472] = ItemType.OrangeStainedGlass; - mappings[473] = ItemType.MagentaStainedGlass; - mappings[474] = ItemType.LightBlueStainedGlass; - mappings[475] = ItemType.YellowStainedGlass; - mappings[476] = ItemType.LimeStainedGlass; - mappings[477] = ItemType.PinkStainedGlass; - mappings[478] = ItemType.GrayStainedGlass; - mappings[479] = ItemType.LightGrayStainedGlass; - mappings[480] = ItemType.CyanStainedGlass; - mappings[481] = ItemType.PurpleStainedGlass; - mappings[482] = ItemType.BlueStainedGlass; - mappings[483] = ItemType.BrownStainedGlass; - mappings[484] = ItemType.GreenStainedGlass; - mappings[485] = ItemType.RedStainedGlass; - mappings[486] = ItemType.BlackStainedGlass; - mappings[487] = ItemType.WhiteStainedGlassPane; - mappings[488] = ItemType.OrangeStainedGlassPane; - mappings[489] = ItemType.MagentaStainedGlassPane; - mappings[490] = ItemType.LightBlueStainedGlassPane; - mappings[491] = ItemType.YellowStainedGlassPane; - mappings[492] = ItemType.LimeStainedGlassPane; - mappings[493] = ItemType.PinkStainedGlassPane; - mappings[494] = ItemType.GrayStainedGlassPane; - mappings[495] = ItemType.LightGrayStainedGlassPane; - mappings[496] = ItemType.CyanStainedGlassPane; - mappings[497] = ItemType.PurpleStainedGlassPane; - mappings[498] = ItemType.BlueStainedGlassPane; - mappings[499] = ItemType.BrownStainedGlassPane; - mappings[500] = ItemType.GreenStainedGlassPane; - mappings[501] = ItemType.RedStainedGlassPane; - mappings[502] = ItemType.BlackStainedGlassPane; - mappings[503] = ItemType.Prismarine; - mappings[504] = ItemType.PrismarineBricks; - mappings[505] = ItemType.DarkPrismarine; - mappings[506] = ItemType.PrismarineStairs; - mappings[507] = ItemType.PrismarineBrickStairs; - mappings[508] = ItemType.DarkPrismarineStairs; - mappings[509] = ItemType.SeaLantern; - mappings[510] = ItemType.RedSandstone; - mappings[511] = ItemType.ChiseledRedSandstone; - mappings[512] = ItemType.CutRedSandstone; - mappings[513] = ItemType.RedSandstoneStairs; - mappings[514] = ItemType.RepeatingCommandBlock; - mappings[515] = ItemType.ChainCommandBlock; - mappings[516] = ItemType.MagmaBlock; - mappings[517] = ItemType.NetherWartBlock; - mappings[518] = ItemType.WarpedWartBlock; - mappings[519] = ItemType.RedNetherBricks; - mappings[520] = ItemType.BoneBlock; - mappings[521] = ItemType.StructureVoid; - mappings[522] = ItemType.ShulkerBox; - mappings[523] = ItemType.WhiteShulkerBox; - mappings[524] = ItemType.OrangeShulkerBox; - mappings[525] = ItemType.MagentaShulkerBox; - mappings[526] = ItemType.LightBlueShulkerBox; - mappings[527] = ItemType.YellowShulkerBox; - mappings[528] = ItemType.LimeShulkerBox; - mappings[529] = ItemType.PinkShulkerBox; - mappings[530] = ItemType.GrayShulkerBox; - mappings[531] = ItemType.LightGrayShulkerBox; - mappings[532] = ItemType.CyanShulkerBox; - mappings[533] = ItemType.PurpleShulkerBox; - mappings[534] = ItemType.BlueShulkerBox; - mappings[535] = ItemType.BrownShulkerBox; - mappings[536] = ItemType.GreenShulkerBox; - mappings[537] = ItemType.RedShulkerBox; - mappings[538] = ItemType.BlackShulkerBox; - mappings[539] = ItemType.WhiteGlazedTerracotta; - mappings[540] = ItemType.OrangeGlazedTerracotta; - mappings[541] = ItemType.MagentaGlazedTerracotta; - mappings[542] = ItemType.LightBlueGlazedTerracotta; - mappings[543] = ItemType.YellowGlazedTerracotta; - mappings[544] = ItemType.LimeGlazedTerracotta; - mappings[545] = ItemType.PinkGlazedTerracotta; - mappings[546] = ItemType.GrayGlazedTerracotta; - mappings[547] = ItemType.LightGrayGlazedTerracotta; - mappings[548] = ItemType.CyanGlazedTerracotta; - mappings[549] = ItemType.PurpleGlazedTerracotta; - mappings[550] = ItemType.BlueGlazedTerracotta; - mappings[551] = ItemType.BrownGlazedTerracotta; - mappings[552] = ItemType.GreenGlazedTerracotta; - mappings[553] = ItemType.RedGlazedTerracotta; - mappings[554] = ItemType.BlackGlazedTerracotta; - mappings[555] = ItemType.WhiteConcrete; - mappings[556] = ItemType.OrangeConcrete; - mappings[557] = ItemType.MagentaConcrete; - mappings[558] = ItemType.LightBlueConcrete; - mappings[559] = ItemType.YellowConcrete; - mappings[560] = ItemType.LimeConcrete; - mappings[561] = ItemType.PinkConcrete; - mappings[562] = ItemType.GrayConcrete; - mappings[563] = ItemType.LightGrayConcrete; - mappings[564] = ItemType.CyanConcrete; - mappings[565] = ItemType.PurpleConcrete; - mappings[566] = ItemType.BlueConcrete; - mappings[567] = ItemType.BrownConcrete; - mappings[568] = ItemType.GreenConcrete; - mappings[569] = ItemType.RedConcrete; - mappings[570] = ItemType.BlackConcrete; - mappings[571] = ItemType.WhiteConcretePowder; - mappings[572] = ItemType.OrangeConcretePowder; - mappings[573] = ItemType.MagentaConcretePowder; - mappings[574] = ItemType.LightBlueConcretePowder; - mappings[575] = ItemType.YellowConcretePowder; - mappings[576] = ItemType.LimeConcretePowder; - mappings[577] = ItemType.PinkConcretePowder; - mappings[578] = ItemType.GrayConcretePowder; - mappings[579] = ItemType.LightGrayConcretePowder; - mappings[580] = ItemType.CyanConcretePowder; - mappings[581] = ItemType.PurpleConcretePowder; - mappings[582] = ItemType.BlueConcretePowder; - mappings[583] = ItemType.BrownConcretePowder; - mappings[584] = ItemType.GreenConcretePowder; - mappings[585] = ItemType.RedConcretePowder; - mappings[586] = ItemType.BlackConcretePowder; - mappings[587] = ItemType.TurtleEgg; - mappings[588] = ItemType.SnifferEgg; - mappings[589] = ItemType.DeadTubeCoralBlock; - mappings[590] = ItemType.DeadBrainCoralBlock; - mappings[591] = ItemType.DeadBubbleCoralBlock; - mappings[592] = ItemType.DeadFireCoralBlock; - mappings[593] = ItemType.DeadHornCoralBlock; - mappings[594] = ItemType.TubeCoralBlock; - mappings[595] = ItemType.BrainCoralBlock; - mappings[596] = ItemType.BubbleCoralBlock; - mappings[597] = ItemType.FireCoralBlock; - mappings[598] = ItemType.HornCoralBlock; - mappings[599] = ItemType.TubeCoral; - mappings[600] = ItemType.BrainCoral; - mappings[601] = ItemType.BubbleCoral; - mappings[602] = ItemType.FireCoral; - mappings[603] = ItemType.HornCoral; - mappings[604] = ItemType.DeadBrainCoral; - mappings[605] = ItemType.DeadBubbleCoral; - mappings[606] = ItemType.DeadFireCoral; - mappings[607] = ItemType.DeadHornCoral; - mappings[608] = ItemType.DeadTubeCoral; - mappings[609] = ItemType.TubeCoralFan; - mappings[610] = ItemType.BrainCoralFan; - mappings[611] = ItemType.BubbleCoralFan; - mappings[612] = ItemType.FireCoralFan; - mappings[613] = ItemType.HornCoralFan; - mappings[614] = ItemType.DeadTubeCoralFan; - mappings[615] = ItemType.DeadBrainCoralFan; - mappings[616] = ItemType.DeadBubbleCoralFan; - mappings[617] = ItemType.DeadFireCoralFan; - mappings[618] = ItemType.DeadHornCoralFan; - mappings[619] = ItemType.BlueIce; - mappings[620] = ItemType.Conduit; - mappings[621] = ItemType.PolishedGraniteStairs; - mappings[622] = ItemType.SmoothRedSandstoneStairs; - mappings[623] = ItemType.MossyStoneBrickStairs; - mappings[624] = ItemType.PolishedDioriteStairs; - mappings[625] = ItemType.MossyCobblestoneStairs; - mappings[626] = ItemType.EndStoneBrickStairs; - mappings[627] = ItemType.StoneStairs; - mappings[628] = ItemType.SmoothSandstoneStairs; - mappings[629] = ItemType.SmoothQuartzStairs; - mappings[630] = ItemType.GraniteStairs; - mappings[631] = ItemType.AndesiteStairs; - mappings[632] = ItemType.RedNetherBrickStairs; - mappings[633] = ItemType.PolishedAndesiteStairs; - mappings[634] = ItemType.DioriteStairs; - mappings[635] = ItemType.CobbledDeepslateStairs; - mappings[636] = ItemType.PolishedDeepslateStairs; - mappings[637] = ItemType.DeepslateBrickStairs; - mappings[638] = ItemType.DeepslateTileStairs; - mappings[639] = ItemType.PolishedGraniteSlab; - mappings[640] = ItemType.SmoothRedSandstoneSlab; - mappings[641] = ItemType.MossyStoneBrickSlab; - mappings[642] = ItemType.PolishedDioriteSlab; - mappings[643] = ItemType.MossyCobblestoneSlab; - mappings[644] = ItemType.EndStoneBrickSlab; - mappings[645] = ItemType.SmoothSandstoneSlab; - mappings[646] = ItemType.SmoothQuartzSlab; - mappings[647] = ItemType.GraniteSlab; - mappings[648] = ItemType.AndesiteSlab; - mappings[649] = ItemType.RedNetherBrickSlab; - mappings[650] = ItemType.PolishedAndesiteSlab; - mappings[651] = ItemType.DioriteSlab; - mappings[652] = ItemType.CobbledDeepslateSlab; - mappings[653] = ItemType.PolishedDeepslateSlab; - mappings[654] = ItemType.DeepslateBrickSlab; - mappings[655] = ItemType.DeepslateTileSlab; - mappings[656] = ItemType.Scaffolding; - mappings[657] = ItemType.Redstone; - mappings[658] = ItemType.RedstoneTorch; - mappings[659] = ItemType.RedstoneBlock; - mappings[660] = ItemType.Repeater; - mappings[661] = ItemType.Comparator; - mappings[662] = ItemType.Piston; - mappings[663] = ItemType.StickyPiston; - mappings[664] = ItemType.SlimeBlock; - mappings[665] = ItemType.HoneyBlock; - mappings[666] = ItemType.Observer; - mappings[667] = ItemType.Hopper; - mappings[668] = ItemType.Dispenser; - mappings[669] = ItemType.Dropper; - mappings[670] = ItemType.Lectern; - mappings[671] = ItemType.Target; - mappings[672] = ItemType.Lever; - mappings[673] = ItemType.LightningRod; - mappings[674] = ItemType.DaylightDetector; - mappings[675] = ItemType.SculkSensor; - mappings[676] = ItemType.CalibratedSculkSensor; - mappings[677] = ItemType.TripwireHook; - mappings[678] = ItemType.TrappedChest; - mappings[679] = ItemType.Tnt; - mappings[680] = ItemType.RedstoneLamp; - mappings[681] = ItemType.NoteBlock; - mappings[682] = ItemType.StoneButton; - mappings[683] = ItemType.PolishedBlackstoneButton; - mappings[684] = ItemType.OakButton; - mappings[685] = ItemType.SpruceButton; - mappings[686] = ItemType.BirchButton; - mappings[687] = ItemType.JungleButton; - mappings[688] = ItemType.AcaciaButton; - mappings[689] = ItemType.CherryButton; - mappings[690] = ItemType.DarkOakButton; - mappings[691] = ItemType.MangroveButton; - mappings[692] = ItemType.BambooButton; - mappings[693] = ItemType.CrimsonButton; - mappings[694] = ItemType.WarpedButton; - mappings[695] = ItemType.StonePressurePlate; - mappings[696] = ItemType.PolishedBlackstonePressurePlate; - mappings[697] = ItemType.LightWeightedPressurePlate; - mappings[698] = ItemType.HeavyWeightedPressurePlate; - mappings[699] = ItemType.OakPressurePlate; - mappings[700] = ItemType.SprucePressurePlate; - mappings[701] = ItemType.BirchPressurePlate; - mappings[702] = ItemType.JunglePressurePlate; - mappings[703] = ItemType.AcaciaPressurePlate; - mappings[704] = ItemType.CherryPressurePlate; - mappings[705] = ItemType.DarkOakPressurePlate; - mappings[706] = ItemType.MangrovePressurePlate; - mappings[707] = ItemType.BambooPressurePlate; - mappings[708] = ItemType.CrimsonPressurePlate; - mappings[709] = ItemType.WarpedPressurePlate; - mappings[710] = ItemType.IronDoor; - mappings[711] = ItemType.OakDoor; - mappings[712] = ItemType.SpruceDoor; - mappings[713] = ItemType.BirchDoor; - mappings[714] = ItemType.JungleDoor; - mappings[715] = ItemType.AcaciaDoor; - mappings[716] = ItemType.CherryDoor; - mappings[717] = ItemType.DarkOakDoor; - mappings[718] = ItemType.MangroveDoor; - mappings[719] = ItemType.BambooDoor; - mappings[720] = ItemType.CrimsonDoor; - mappings[721] = ItemType.WarpedDoor; - mappings[722] = ItemType.CopperDoor; - mappings[723] = ItemType.ExposedCopperDoor; - mappings[724] = ItemType.WeatheredCopperDoor; - mappings[725] = ItemType.OxidizedCopperDoor; - mappings[726] = ItemType.WaxedCopperDoor; - mappings[727] = ItemType.WaxedExposedCopperDoor; - mappings[728] = ItemType.WaxedWeatheredCopperDoor; - mappings[729] = ItemType.WaxedOxidizedCopperDoor; - mappings[730] = ItemType.IronTrapdoor; - mappings[731] = ItemType.OakTrapdoor; - mappings[732] = ItemType.SpruceTrapdoor; - mappings[733] = ItemType.BirchTrapdoor; - mappings[734] = ItemType.JungleTrapdoor; - mappings[735] = ItemType.AcaciaTrapdoor; - mappings[736] = ItemType.CherryTrapdoor; - mappings[737] = ItemType.DarkOakTrapdoor; - mappings[738] = ItemType.MangroveTrapdoor; - mappings[739] = ItemType.BambooTrapdoor; - mappings[740] = ItemType.CrimsonTrapdoor; - mappings[741] = ItemType.WarpedTrapdoor; - mappings[742] = ItemType.CopperTrapdoor; - mappings[743] = ItemType.ExposedCopperTrapdoor; - mappings[744] = ItemType.WeatheredCopperTrapdoor; - mappings[745] = ItemType.OxidizedCopperTrapdoor; - mappings[746] = ItemType.WaxedCopperTrapdoor; - mappings[747] = ItemType.WaxedExposedCopperTrapdoor; - mappings[748] = ItemType.WaxedWeatheredCopperTrapdoor; - mappings[749] = ItemType.WaxedOxidizedCopperTrapdoor; - mappings[750] = ItemType.OakFenceGate; - mappings[751] = ItemType.SpruceFenceGate; - mappings[752] = ItemType.BirchFenceGate; - mappings[753] = ItemType.JungleFenceGate; - mappings[754] = ItemType.AcaciaFenceGate; - mappings[755] = ItemType.CherryFenceGate; - mappings[756] = ItemType.DarkOakFenceGate; - mappings[757] = ItemType.MangroveFenceGate; - mappings[758] = ItemType.BambooFenceGate; - mappings[759] = ItemType.CrimsonFenceGate; - mappings[760] = ItemType.WarpedFenceGate; - mappings[761] = ItemType.PoweredRail; - mappings[762] = ItemType.DetectorRail; - mappings[763] = ItemType.Rail; - mappings[764] = ItemType.ActivatorRail; - mappings[765] = ItemType.Saddle; - mappings[766] = ItemType.Minecart; - mappings[767] = ItemType.ChestMinecart; - mappings[768] = ItemType.FurnaceMinecart; - mappings[769] = ItemType.TntMinecart; - mappings[770] = ItemType.HopperMinecart; - mappings[771] = ItemType.CarrotOnAStick; - mappings[772] = ItemType.WarpedFungusOnAStick; - mappings[773] = ItemType.Elytra; - mappings[774] = ItemType.OakBoat; - mappings[775] = ItemType.OakChestBoat; - mappings[776] = ItemType.SpruceBoat; - mappings[777] = ItemType.SpruceChestBoat; - mappings[778] = ItemType.BirchBoat; - mappings[779] = ItemType.BirchChestBoat; - mappings[780] = ItemType.JungleBoat; - mappings[781] = ItemType.JungleChestBoat; - mappings[782] = ItemType.AcaciaBoat; - mappings[783] = ItemType.AcaciaChestBoat; - mappings[784] = ItemType.CherryBoat; - mappings[785] = ItemType.CherryChestBoat; - mappings[786] = ItemType.DarkOakBoat; - mappings[787] = ItemType.DarkOakChestBoat; - mappings[788] = ItemType.MangroveBoat; - mappings[789] = ItemType.MangroveChestBoat; - mappings[790] = ItemType.BambooRaft; - mappings[791] = ItemType.BambooChestRaft; - mappings[792] = ItemType.StructureBlock; - mappings[793] = ItemType.Jigsaw; - mappings[794] = ItemType.TurtleHelmet; - mappings[795] = ItemType.TurtleScute; - mappings[796] = ItemType.ArmadilloScute; - mappings[797] = ItemType.WolfArmor; - mappings[798] = ItemType.FlintAndSteel; - mappings[799] = ItemType.Bowl; - mappings[800] = ItemType.Apple; - mappings[801] = ItemType.Bow; - mappings[802] = ItemType.Arrow; - mappings[803] = ItemType.Coal; - mappings[804] = ItemType.Charcoal; - mappings[805] = ItemType.Diamond; - mappings[806] = ItemType.Emerald; - mappings[807] = ItemType.LapisLazuli; - mappings[808] = ItemType.Quartz; - mappings[809] = ItemType.AmethystShard; - mappings[810] = ItemType.RawIron; - mappings[811] = ItemType.IronIngot; - mappings[812] = ItemType.RawCopper; - mappings[813] = ItemType.CopperIngot; - mappings[814] = ItemType.RawGold; - mappings[815] = ItemType.GoldIngot; - mappings[816] = ItemType.NetheriteIngot; - mappings[817] = ItemType.NetheriteScrap; - mappings[818] = ItemType.WoodenSword; - mappings[819] = ItemType.WoodenShovel; - mappings[820] = ItemType.WoodenPickaxe; - mappings[821] = ItemType.WoodenAxe; - mappings[822] = ItemType.WoodenHoe; - mappings[823] = ItemType.StoneSword; - mappings[824] = ItemType.StoneShovel; - mappings[825] = ItemType.StonePickaxe; - mappings[826] = ItemType.StoneAxe; - mappings[827] = ItemType.StoneHoe; - mappings[828] = ItemType.GoldenSword; - mappings[829] = ItemType.GoldenShovel; - mappings[830] = ItemType.GoldenPickaxe; - mappings[831] = ItemType.GoldenAxe; - mappings[832] = ItemType.GoldenHoe; - mappings[833] = ItemType.IronSword; - mappings[834] = ItemType.IronShovel; - mappings[835] = ItemType.IronPickaxe; - mappings[836] = ItemType.IronAxe; - mappings[837] = ItemType.IronHoe; - mappings[838] = ItemType.DiamondSword; - mappings[839] = ItemType.DiamondShovel; - mappings[840] = ItemType.DiamondPickaxe; - mappings[841] = ItemType.DiamondAxe; - mappings[842] = ItemType.DiamondHoe; - mappings[843] = ItemType.NetheriteSword; - mappings[844] = ItemType.NetheriteShovel; - mappings[845] = ItemType.NetheritePickaxe; - mappings[846] = ItemType.NetheriteAxe; - mappings[847] = ItemType.NetheriteHoe; - mappings[848] = ItemType.Stick; - mappings[849] = ItemType.MushroomStew; - mappings[850] = ItemType.String; - mappings[851] = ItemType.Feather; - mappings[852] = ItemType.Gunpowder; - mappings[853] = ItemType.WheatSeeds; - mappings[854] = ItemType.Wheat; - mappings[855] = ItemType.Bread; - mappings[856] = ItemType.LeatherHelmet; - mappings[857] = ItemType.LeatherChestplate; - mappings[858] = ItemType.LeatherLeggings; - mappings[859] = ItemType.LeatherBoots; - mappings[860] = ItemType.ChainmailHelmet; - mappings[861] = ItemType.ChainmailChestplate; - mappings[862] = ItemType.ChainmailLeggings; - mappings[863] = ItemType.ChainmailBoots; - mappings[864] = ItemType.IronHelmet; - mappings[865] = ItemType.IronChestplate; - mappings[866] = ItemType.IronLeggings; - mappings[867] = ItemType.IronBoots; - mappings[868] = ItemType.DiamondHelmet; - mappings[869] = ItemType.DiamondChestplate; - mappings[870] = ItemType.DiamondLeggings; - mappings[871] = ItemType.DiamondBoots; - mappings[872] = ItemType.GoldenHelmet; - mappings[873] = ItemType.GoldenChestplate; - mappings[874] = ItemType.GoldenLeggings; - mappings[875] = ItemType.GoldenBoots; - mappings[876] = ItemType.NetheriteHelmet; - mappings[877] = ItemType.NetheriteChestplate; - mappings[878] = ItemType.NetheriteLeggings; - mappings[879] = ItemType.NetheriteBoots; - mappings[880] = ItemType.Flint; - mappings[881] = ItemType.Porkchop; - mappings[882] = ItemType.CookedPorkchop; - mappings[883] = ItemType.Painting; - mappings[884] = ItemType.GoldenApple; - mappings[885] = ItemType.EnchantedGoldenApple; - mappings[886] = ItemType.OakSign; - mappings[887] = ItemType.SpruceSign; - mappings[888] = ItemType.BirchSign; - mappings[889] = ItemType.JungleSign; - mappings[890] = ItemType.AcaciaSign; - mappings[891] = ItemType.CherrySign; - mappings[892] = ItemType.DarkOakSign; - mappings[893] = ItemType.MangroveSign; - mappings[894] = ItemType.BambooSign; - mappings[895] = ItemType.CrimsonSign; - mappings[896] = ItemType.WarpedSign; - mappings[897] = ItemType.OakHangingSign; - mappings[898] = ItemType.SpruceHangingSign; - mappings[899] = ItemType.BirchHangingSign; - mappings[900] = ItemType.JungleHangingSign; - mappings[901] = ItemType.AcaciaHangingSign; - mappings[902] = ItemType.CherryHangingSign; - mappings[903] = ItemType.DarkOakHangingSign; - mappings[904] = ItemType.MangroveHangingSign; - mappings[905] = ItemType.BambooHangingSign; - mappings[906] = ItemType.CrimsonHangingSign; - mappings[907] = ItemType.WarpedHangingSign; - mappings[908] = ItemType.Bucket; - mappings[909] = ItemType.WaterBucket; - mappings[910] = ItemType.LavaBucket; - mappings[911] = ItemType.PowderSnowBucket; - mappings[912] = ItemType.Snowball; - mappings[913] = ItemType.Leather; - mappings[914] = ItemType.MilkBucket; - mappings[915] = ItemType.PufferfishBucket; - mappings[916] = ItemType.SalmonBucket; - mappings[917] = ItemType.CodBucket; - mappings[918] = ItemType.TropicalFishBucket; - mappings[919] = ItemType.AxolotlBucket; - mappings[920] = ItemType.TadpoleBucket; - mappings[921] = ItemType.Brick; - mappings[922] = ItemType.ClayBall; - mappings[923] = ItemType.DriedKelpBlock; - mappings[924] = ItemType.Paper; - mappings[925] = ItemType.Book; - mappings[926] = ItemType.SlimeBall; - mappings[927] = ItemType.Egg; - mappings[928] = ItemType.Compass; - mappings[929] = ItemType.RecoveryCompass; - mappings[930] = ItemType.Bundle; - mappings[931] = ItemType.FishingRod; - mappings[932] = ItemType.Clock; - mappings[933] = ItemType.Spyglass; - mappings[934] = ItemType.GlowstoneDust; - mappings[935] = ItemType.Cod; - mappings[936] = ItemType.Salmon; - mappings[937] = ItemType.TropicalFish; - mappings[938] = ItemType.Pufferfish; - mappings[939] = ItemType.CookedCod; - mappings[940] = ItemType.CookedSalmon; - mappings[941] = ItemType.InkSac; - mappings[942] = ItemType.GlowInkSac; - mappings[943] = ItemType.CocoaBeans; - mappings[944] = ItemType.WhiteDye; - mappings[945] = ItemType.OrangeDye; - mappings[946] = ItemType.MagentaDye; - mappings[947] = ItemType.LightBlueDye; - mappings[948] = ItemType.YellowDye; - mappings[949] = ItemType.LimeDye; - mappings[950] = ItemType.PinkDye; - mappings[951] = ItemType.GrayDye; - mappings[952] = ItemType.LightGrayDye; - mappings[953] = ItemType.CyanDye; - mappings[954] = ItemType.PurpleDye; - mappings[955] = ItemType.BlueDye; - mappings[956] = ItemType.BrownDye; - mappings[957] = ItemType.GreenDye; - mappings[958] = ItemType.RedDye; - mappings[959] = ItemType.BlackDye; - mappings[960] = ItemType.BoneMeal; - mappings[961] = ItemType.Bone; - mappings[962] = ItemType.Sugar; - mappings[963] = ItemType.Cake; - mappings[964] = ItemType.WhiteBed; - mappings[965] = ItemType.OrangeBed; - mappings[966] = ItemType.MagentaBed; - mappings[967] = ItemType.LightBlueBed; - mappings[968] = ItemType.YellowBed; - mappings[969] = ItemType.LimeBed; - mappings[970] = ItemType.PinkBed; - mappings[971] = ItemType.GrayBed; - mappings[972] = ItemType.LightGrayBed; - mappings[973] = ItemType.CyanBed; - mappings[974] = ItemType.PurpleBed; - mappings[975] = ItemType.BlueBed; - mappings[976] = ItemType.BrownBed; - mappings[977] = ItemType.GreenBed; - mappings[978] = ItemType.RedBed; - mappings[979] = ItemType.BlackBed; - mappings[980] = ItemType.Cookie; - mappings[981] = ItemType.Crafter; - mappings[982] = ItemType.FilledMap; - mappings[983] = ItemType.Shears; - mappings[984] = ItemType.MelonSlice; - mappings[985] = ItemType.DriedKelp; - mappings[986] = ItemType.PumpkinSeeds; - mappings[987] = ItemType.MelonSeeds; - mappings[988] = ItemType.Beef; - mappings[989] = ItemType.CookedBeef; - mappings[990] = ItemType.Chicken; - mappings[991] = ItemType.CookedChicken; - mappings[992] = ItemType.RottenFlesh; - mappings[993] = ItemType.EnderPearl; - mappings[994] = ItemType.BlazeRod; - mappings[995] = ItemType.GhastTear; - mappings[996] = ItemType.GoldNugget; - mappings[997] = ItemType.NetherWart; - mappings[998] = ItemType.Potion; - mappings[999] = ItemType.GlassBottle; - mappings[1000] = ItemType.SpiderEye; - mappings[1001] = ItemType.FermentedSpiderEye; - mappings[1002] = ItemType.BlazePowder; - mappings[1003] = ItemType.MagmaCream; - mappings[1004] = ItemType.BrewingStand; - mappings[1005] = ItemType.Cauldron; - mappings[1006] = ItemType.EnderEye; - mappings[1007] = ItemType.GlisteringMelonSlice; - mappings[1008] = ItemType.ArmadilloSpawnEgg; - mappings[1009] = ItemType.AllaySpawnEgg; - mappings[1010] = ItemType.AxolotlSpawnEgg; - mappings[1011] = ItemType.BatSpawnEgg; - mappings[1012] = ItemType.BeeSpawnEgg; - mappings[1013] = ItemType.BlazeSpawnEgg; - mappings[1014] = ItemType.BoggedSpawnEgg; - mappings[1015] = ItemType.BreezeSpawnEgg; - mappings[1016] = ItemType.CatSpawnEgg; - mappings[1017] = ItemType.CamelSpawnEgg; - mappings[1018] = ItemType.CaveSpiderSpawnEgg; - mappings[1019] = ItemType.ChickenSpawnEgg; - mappings[1020] = ItemType.CodSpawnEgg; - mappings[1021] = ItemType.CowSpawnEgg; - mappings[1022] = ItemType.CreeperSpawnEgg; - mappings[1023] = ItemType.DolphinSpawnEgg; - mappings[1024] = ItemType.DonkeySpawnEgg; - mappings[1025] = ItemType.DrownedSpawnEgg; - mappings[1026] = ItemType.ElderGuardianSpawnEgg; - mappings[1027] = ItemType.EnderDragonSpawnEgg; - mappings[1028] = ItemType.EndermanSpawnEgg; - mappings[1029] = ItemType.EndermiteSpawnEgg; - mappings[1030] = ItemType.EvokerSpawnEgg; - mappings[1031] = ItemType.FoxSpawnEgg; - mappings[1032] = ItemType.FrogSpawnEgg; - mappings[1033] = ItemType.GhastSpawnEgg; - mappings[1034] = ItemType.GlowSquidSpawnEgg; - mappings[1035] = ItemType.GoatSpawnEgg; - mappings[1036] = ItemType.GuardianSpawnEgg; - mappings[1037] = ItemType.HoglinSpawnEgg; - mappings[1038] = ItemType.HorseSpawnEgg; - mappings[1039] = ItemType.HuskSpawnEgg; - mappings[1040] = ItemType.IronGolemSpawnEgg; - mappings[1041] = ItemType.LlamaSpawnEgg; - mappings[1042] = ItemType.MagmaCubeSpawnEgg; - mappings[1043] = ItemType.MooshroomSpawnEgg; - mappings[1044] = ItemType.MuleSpawnEgg; - mappings[1045] = ItemType.OcelotSpawnEgg; - mappings[1046] = ItemType.PandaSpawnEgg; - mappings[1047] = ItemType.ParrotSpawnEgg; - mappings[1048] = ItemType.PhantomSpawnEgg; - mappings[1049] = ItemType.PigSpawnEgg; - mappings[1050] = ItemType.PiglinSpawnEgg; - mappings[1051] = ItemType.PiglinBruteSpawnEgg; - mappings[1052] = ItemType.PillagerSpawnEgg; - mappings[1053] = ItemType.PolarBearSpawnEgg; - mappings[1054] = ItemType.PufferfishSpawnEgg; - mappings[1055] = ItemType.RabbitSpawnEgg; - mappings[1056] = ItemType.RavagerSpawnEgg; - mappings[1057] = ItemType.SalmonSpawnEgg; - mappings[1058] = ItemType.SheepSpawnEgg; - mappings[1059] = ItemType.ShulkerSpawnEgg; - mappings[1060] = ItemType.SilverfishSpawnEgg; - mappings[1061] = ItemType.SkeletonSpawnEgg; - mappings[1062] = ItemType.SkeletonHorseSpawnEgg; - mappings[1063] = ItemType.SlimeSpawnEgg; - mappings[1064] = ItemType.SnifferSpawnEgg; - mappings[1065] = ItemType.SnowGolemSpawnEgg; - mappings[1066] = ItemType.SpiderSpawnEgg; - mappings[1067] = ItemType.SquidSpawnEgg; - mappings[1068] = ItemType.StraySpawnEgg; - mappings[1069] = ItemType.StriderSpawnEgg; - mappings[1070] = ItemType.TadpoleSpawnEgg; - mappings[1071] = ItemType.TraderLlamaSpawnEgg; - mappings[1072] = ItemType.TropicalFishSpawnEgg; - mappings[1073] = ItemType.TurtleSpawnEgg; - mappings[1074] = ItemType.VexSpawnEgg; - mappings[1075] = ItemType.VillagerSpawnEgg; - mappings[1076] = ItemType.VindicatorSpawnEgg; - mappings[1077] = ItemType.WanderingTraderSpawnEgg; - mappings[1078] = ItemType.WardenSpawnEgg; - mappings[1079] = ItemType.WitchSpawnEgg; - mappings[1080] = ItemType.WitherSpawnEgg; - mappings[1081] = ItemType.WitherSkeletonSpawnEgg; - mappings[1082] = ItemType.WolfSpawnEgg; - mappings[1083] = ItemType.ZoglinSpawnEgg; - mappings[1084] = ItemType.ZombieSpawnEgg; - mappings[1085] = ItemType.ZombieHorseSpawnEgg; - mappings[1086] = ItemType.ZombieVillagerSpawnEgg; - mappings[1087] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[1088] = ItemType.ExperienceBottle; - mappings[1089] = ItemType.FireCharge; - mappings[1090] = ItemType.WindCharge; - mappings[1091] = ItemType.WritableBook; - mappings[1092] = ItemType.WrittenBook; - mappings[1093] = ItemType.Mace; - mappings[1094] = ItemType.ItemFrame; - mappings[1095] = ItemType.GlowItemFrame; - mappings[1096] = ItemType.FlowerPot; - mappings[1097] = ItemType.Carrot; - mappings[1098] = ItemType.Potato; - mappings[1099] = ItemType.BakedPotato; - mappings[1100] = ItemType.PoisonousPotato; - mappings[1101] = ItemType.Map; - mappings[1102] = ItemType.GoldenCarrot; - mappings[1103] = ItemType.SkeletonSkull; - mappings[1104] = ItemType.WitherSkeletonSkull; - mappings[1105] = ItemType.PlayerHead; - mappings[1106] = ItemType.ZombieHead; - mappings[1107] = ItemType.CreeperHead; - mappings[1108] = ItemType.DragonHead; - mappings[1109] = ItemType.PiglinHead; - mappings[1110] = ItemType.NetherStar; - mappings[1111] = ItemType.PumpkinPie; - mappings[1112] = ItemType.FireworkRocket; - mappings[1113] = ItemType.FireworkStar; - mappings[1114] = ItemType.EnchantedBook; - mappings[1115] = ItemType.NetherBrick; - mappings[1116] = ItemType.PrismarineShard; - mappings[1117] = ItemType.PrismarineCrystals; - mappings[1118] = ItemType.Rabbit; - mappings[1119] = ItemType.CookedRabbit; - mappings[1120] = ItemType.RabbitStew; - mappings[1121] = ItemType.RabbitFoot; - mappings[1122] = ItemType.RabbitHide; - mappings[1123] = ItemType.ArmorStand; - mappings[1124] = ItemType.IronHorseArmor; - mappings[1125] = ItemType.GoldenHorseArmor; - mappings[1126] = ItemType.DiamondHorseArmor; - mappings[1127] = ItemType.LeatherHorseArmor; - mappings[1128] = ItemType.Lead; - mappings[1129] = ItemType.NameTag; - mappings[1130] = ItemType.CommandBlockMinecart; - mappings[1131] = ItemType.Mutton; - mappings[1132] = ItemType.CookedMutton; - mappings[1133] = ItemType.WhiteBanner; - mappings[1134] = ItemType.OrangeBanner; - mappings[1135] = ItemType.MagentaBanner; - mappings[1136] = ItemType.LightBlueBanner; - mappings[1137] = ItemType.YellowBanner; - mappings[1138] = ItemType.LimeBanner; - mappings[1139] = ItemType.PinkBanner; - mappings[1140] = ItemType.GrayBanner; - mappings[1141] = ItemType.LightGrayBanner; - mappings[1142] = ItemType.CyanBanner; - mappings[1143] = ItemType.PurpleBanner; - mappings[1144] = ItemType.BlueBanner; - mappings[1145] = ItemType.BrownBanner; - mappings[1146] = ItemType.GreenBanner; - mappings[1147] = ItemType.RedBanner; - mappings[1148] = ItemType.BlackBanner; - mappings[1149] = ItemType.EndCrystal; - mappings[1150] = ItemType.ChorusFruit; - mappings[1151] = ItemType.PoppedChorusFruit; - mappings[1152] = ItemType.TorchflowerSeeds; - mappings[1153] = ItemType.PitcherPod; - mappings[1154] = ItemType.Beetroot; - mappings[1155] = ItemType.BeetrootSeeds; - mappings[1156] = ItemType.BeetrootSoup; - mappings[1157] = ItemType.DragonBreath; - mappings[1158] = ItemType.SplashPotion; - mappings[1159] = ItemType.SpectralArrow; - mappings[1160] = ItemType.TippedArrow; - mappings[1161] = ItemType.LingeringPotion; - mappings[1162] = ItemType.Shield; - mappings[1163] = ItemType.TotemOfUndying; - mappings[1164] = ItemType.ShulkerShell; - mappings[1165] = ItemType.IronNugget; - mappings[1166] = ItemType.KnowledgeBook; - mappings[1167] = ItemType.DebugStick; - mappings[1168] = ItemType.MusicDisc13; - mappings[1169] = ItemType.MusicDiscCat; - mappings[1170] = ItemType.MusicDiscBlocks; - mappings[1171] = ItemType.MusicDiscChirp; - mappings[1172] = ItemType.MusicDiscCreator; - mappings[1173] = ItemType.MusicDiscCreatorMusicBox; - mappings[1174] = ItemType.MusicDiscFar; - mappings[1175] = ItemType.MusicDiscMall; - mappings[1176] = ItemType.MusicDiscMellohi; - mappings[1177] = ItemType.MusicDiscStal; - mappings[1178] = ItemType.MusicDiscStrad; - mappings[1179] = ItemType.MusicDiscWard; - mappings[1180] = ItemType.MusicDisc11; - mappings[1181] = ItemType.MusicDiscWait; - mappings[1182] = ItemType.MusicDiscOtherside; - mappings[1183] = ItemType.MusicDiscRelic; - mappings[1184] = ItemType.MusicDisc5; - mappings[1185] = ItemType.MusicDiscPigstep; - mappings[1186] = ItemType.MusicDiscPrecipice; - mappings[1187] = ItemType.DiscFragment5; - mappings[1188] = ItemType.Trident; - mappings[1189] = ItemType.PhantomMembrane; - mappings[1190] = ItemType.NautilusShell; - mappings[1191] = ItemType.HeartOfTheSea; - mappings[1192] = ItemType.Crossbow; - mappings[1193] = ItemType.SuspiciousStew; - mappings[1194] = ItemType.Loom; - mappings[1195] = ItemType.FlowerBannerPattern; - mappings[1196] = ItemType.CreeperBannerPattern; - mappings[1197] = ItemType.SkullBannerPattern; - mappings[1198] = ItemType.MojangBannerPattern; - mappings[1199] = ItemType.GlobeBannerPattern; - mappings[1200] = ItemType.PiglinBannerPattern; - mappings[1201] = ItemType.FlowBannerPattern; - mappings[1202] = ItemType.GusterBannerPattern; - mappings[1203] = ItemType.GoatHorn; - mappings[1204] = ItemType.Composter; - mappings[1205] = ItemType.Barrel; - mappings[1206] = ItemType.Smoker; - mappings[1207] = ItemType.BlastFurnace; - mappings[1208] = ItemType.CartographyTable; - mappings[1209] = ItemType.FletchingTable; - mappings[1210] = ItemType.Grindstone; - mappings[1211] = ItemType.SmithingTable; - mappings[1212] = ItemType.Stonecutter; - mappings[1213] = ItemType.Bell; - mappings[1214] = ItemType.Lantern; - mappings[1215] = ItemType.SoulLantern; - mappings[1216] = ItemType.SweetBerries; - mappings[1217] = ItemType.GlowBerries; - mappings[1218] = ItemType.Campfire; - mappings[1219] = ItemType.SoulCampfire; - mappings[1220] = ItemType.Shroomlight; - mappings[1221] = ItemType.Honeycomb; - mappings[1222] = ItemType.BeeNest; - mappings[1223] = ItemType.Beehive; - mappings[1224] = ItemType.HoneyBottle; - mappings[1225] = ItemType.HoneycombBlock; - mappings[1226] = ItemType.Lodestone; - mappings[1227] = ItemType.CryingObsidian; - mappings[1228] = ItemType.Blackstone; - mappings[1229] = ItemType.BlackstoneSlab; - mappings[1230] = ItemType.BlackstoneStairs; - mappings[1231] = ItemType.GildedBlackstone; - mappings[1232] = ItemType.PolishedBlackstone; - mappings[1233] = ItemType.PolishedBlackstoneSlab; - mappings[1234] = ItemType.PolishedBlackstoneStairs; - mappings[1235] = ItemType.ChiseledPolishedBlackstone; - mappings[1236] = ItemType.PolishedBlackstoneBricks; - mappings[1237] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1238] = ItemType.PolishedBlackstoneBrickStairs; - mappings[1239] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[1240] = ItemType.RespawnAnchor; - mappings[1241] = ItemType.Candle; - mappings[1242] = ItemType.WhiteCandle; - mappings[1243] = ItemType.OrangeCandle; - mappings[1244] = ItemType.MagentaCandle; - mappings[1245] = ItemType.LightBlueCandle; - mappings[1246] = ItemType.YellowCandle; - mappings[1247] = ItemType.LimeCandle; - mappings[1248] = ItemType.PinkCandle; - mappings[1249] = ItemType.GrayCandle; - mappings[1250] = ItemType.LightGrayCandle; - mappings[1251] = ItemType.CyanCandle; - mappings[1252] = ItemType.PurpleCandle; - mappings[1253] = ItemType.BlueCandle; - mappings[1254] = ItemType.BrownCandle; - mappings[1255] = ItemType.GreenCandle; - mappings[1256] = ItemType.RedCandle; - mappings[1257] = ItemType.BlackCandle; - mappings[1258] = ItemType.SmallAmethystBud; - mappings[1259] = ItemType.MediumAmethystBud; - mappings[1260] = ItemType.LargeAmethystBud; - mappings[1261] = ItemType.AmethystCluster; - mappings[1262] = ItemType.PointedDripstone; - mappings[1263] = ItemType.OchreFroglight; - mappings[1264] = ItemType.VerdantFroglight; - mappings[1265] = ItemType.PearlescentFroglight; - mappings[1266] = ItemType.Frogspawn; - mappings[1267] = ItemType.EchoShard; - mappings[1268] = ItemType.Brush; - mappings[1269] = ItemType.NetheriteUpgradeSmithingTemplate; - mappings[1270] = ItemType.SentryArmorTrimSmithingTemplate; - mappings[1271] = ItemType.DuneArmorTrimSmithingTemplate; - mappings[1272] = ItemType.CoastArmorTrimSmithingTemplate; - mappings[1273] = ItemType.WildArmorTrimSmithingTemplate; - mappings[1274] = ItemType.WardArmorTrimSmithingTemplate; - mappings[1275] = ItemType.EyeArmorTrimSmithingTemplate; - mappings[1276] = ItemType.VexArmorTrimSmithingTemplate; - mappings[1277] = ItemType.TideArmorTrimSmithingTemplate; - mappings[1278] = ItemType.SnoutArmorTrimSmithingTemplate; - mappings[1279] = ItemType.RibArmorTrimSmithingTemplate; - mappings[1280] = ItemType.SpireArmorTrimSmithingTemplate; - mappings[1281] = ItemType.WayfinderArmorTrimSmithingTemplate; - mappings[1282] = ItemType.ShaperArmorTrimSmithingTemplate; - mappings[1283] = ItemType.SilenceArmorTrimSmithingTemplate; - mappings[1284] = ItemType.RaiserArmorTrimSmithingTemplate; - mappings[1285] = ItemType.HostArmorTrimSmithingTemplate; - mappings[1286] = ItemType.FlowArmorTrimSmithingTemplate; - mappings[1287] = ItemType.BoltArmorTrimSmithingTemplate; - mappings[1288] = ItemType.AnglerPotterySherd; - mappings[1289] = ItemType.ArcherPotterySherd; - mappings[1290] = ItemType.ArmsUpPotterySherd; - mappings[1291] = ItemType.BladePotterySherd; - mappings[1292] = ItemType.BrewerPotterySherd; - mappings[1293] = ItemType.BurnPotterySherd; - mappings[1294] = ItemType.DangerPotterySherd; - mappings[1295] = ItemType.ExplorerPotterySherd; - mappings[1296] = ItemType.FlowPotterySherd; - mappings[1297] = ItemType.FriendPotterySherd; - mappings[1298] = ItemType.GusterPotterySherd; - mappings[1299] = ItemType.HeartPotterySherd; - mappings[1300] = ItemType.HeartbreakPotterySherd; - mappings[1301] = ItemType.HowlPotterySherd; - mappings[1302] = ItemType.MinerPotterySherd; - mappings[1303] = ItemType.MournerPotterySherd; - mappings[1304] = ItemType.PlentyPotterySherd; - mappings[1305] = ItemType.PrizePotterySherd; - mappings[1306] = ItemType.ScrapePotterySherd; - mappings[1307] = ItemType.SheafPotterySherd; - mappings[1308] = ItemType.ShelterPotterySherd; - mappings[1309] = ItemType.SkullPotterySherd; - mappings[1310] = ItemType.SnortPotterySherd; - mappings[1311] = ItemType.CopperGrate; - mappings[1312] = ItemType.ExposedCopperGrate; - mappings[1313] = ItemType.WeatheredCopperGrate; - mappings[1314] = ItemType.OxidizedCopperGrate; - mappings[1315] = ItemType.WaxedCopperGrate; - mappings[1316] = ItemType.WaxedExposedCopperGrate; - mappings[1317] = ItemType.WaxedWeatheredCopperGrate; - mappings[1318] = ItemType.WaxedOxidizedCopperGrate; - mappings[1319] = ItemType.CopperBulb; - mappings[1320] = ItemType.ExposedCopperBulb; - mappings[1321] = ItemType.WeatheredCopperBulb; - mappings[1322] = ItemType.OxidizedCopperBulb; - mappings[1323] = ItemType.WaxedCopperBulb; - mappings[1324] = ItemType.WaxedExposedCopperBulb; - mappings[1325] = ItemType.WaxedWeatheredCopperBulb; - mappings[1326] = ItemType.WaxedOxidizedCopperBulb; - mappings[1327] = ItemType.TrialSpawner; - mappings[1328] = ItemType.TrialKey; - mappings[1329] = ItemType.OminousTrialKey; - mappings[1330] = ItemType.Vault; - mappings[1331] = ItemType.OminousBottle; - mappings[1332] = ItemType.BreezeRod; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette12111.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette12111.cs deleted file mode 100644 index 30de90e84f..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette12111.cs +++ /dev/null @@ -1,1523 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette12111 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette12111() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.Deepslate; - mappings[9] = ItemType.CobbledDeepslate; - mappings[10] = ItemType.PolishedDeepslate; - mappings[11] = ItemType.Calcite; - mappings[12] = ItemType.Tuff; - mappings[13] = ItemType.TuffSlab; - mappings[14] = ItemType.TuffStairs; - mappings[15] = ItemType.TuffWall; - mappings[16] = ItemType.ChiseledTuff; - mappings[17] = ItemType.PolishedTuff; - mappings[18] = ItemType.PolishedTuffSlab; - mappings[19] = ItemType.PolishedTuffStairs; - mappings[20] = ItemType.PolishedTuffWall; - mappings[21] = ItemType.TuffBricks; - mappings[22] = ItemType.TuffBrickSlab; - mappings[23] = ItemType.TuffBrickStairs; - mappings[24] = ItemType.TuffBrickWall; - mappings[25] = ItemType.ChiseledTuffBricks; - mappings[26] = ItemType.DripstoneBlock; - mappings[27] = ItemType.GrassBlock; - mappings[28] = ItemType.Dirt; - mappings[29] = ItemType.CoarseDirt; - mappings[30] = ItemType.Podzol; - mappings[31] = ItemType.RootedDirt; - mappings[32] = ItemType.Mud; - mappings[33] = ItemType.CrimsonNylium; - mappings[34] = ItemType.WarpedNylium; - mappings[35] = ItemType.Cobblestone; - mappings[36] = ItemType.OakPlanks; - mappings[37] = ItemType.SprucePlanks; - mappings[38] = ItemType.BirchPlanks; - mappings[39] = ItemType.JunglePlanks; - mappings[40] = ItemType.AcaciaPlanks; - mappings[41] = ItemType.CherryPlanks; - mappings[42] = ItemType.DarkOakPlanks; - mappings[43] = ItemType.PaleOakPlanks; - mappings[44] = ItemType.MangrovePlanks; - mappings[45] = ItemType.BambooPlanks; - mappings[46] = ItemType.CrimsonPlanks; - mappings[47] = ItemType.WarpedPlanks; - mappings[48] = ItemType.BambooMosaic; - mappings[49] = ItemType.OakSapling; - mappings[50] = ItemType.SpruceSapling; - mappings[51] = ItemType.BirchSapling; - mappings[52] = ItemType.JungleSapling; - mappings[53] = ItemType.AcaciaSapling; - mappings[54] = ItemType.CherrySapling; - mappings[55] = ItemType.DarkOakSapling; - mappings[56] = ItemType.PaleOakSapling; - mappings[57] = ItemType.MangrovePropagule; - mappings[58] = ItemType.Bedrock; - mappings[59] = ItemType.Sand; - mappings[60] = ItemType.SuspiciousSand; - mappings[61] = ItemType.SuspiciousGravel; - mappings[62] = ItemType.RedSand; - mappings[63] = ItemType.Gravel; - mappings[64] = ItemType.CoalOre; - mappings[65] = ItemType.DeepslateCoalOre; - mappings[66] = ItemType.IronOre; - mappings[67] = ItemType.DeepslateIronOre; - mappings[68] = ItemType.CopperOre; - mappings[69] = ItemType.DeepslateCopperOre; - mappings[70] = ItemType.GoldOre; - mappings[71] = ItemType.DeepslateGoldOre; - mappings[72] = ItemType.RedstoneOre; - mappings[73] = ItemType.DeepslateRedstoneOre; - mappings[74] = ItemType.EmeraldOre; - mappings[75] = ItemType.DeepslateEmeraldOre; - mappings[76] = ItemType.LapisOre; - mappings[77] = ItemType.DeepslateLapisOre; - mappings[78] = ItemType.DiamondOre; - mappings[79] = ItemType.DeepslateDiamondOre; - mappings[80] = ItemType.NetherGoldOre; - mappings[81] = ItemType.NetherQuartzOre; - mappings[82] = ItemType.AncientDebris; - mappings[83] = ItemType.CoalBlock; - mappings[84] = ItemType.RawIronBlock; - mappings[85] = ItemType.RawCopperBlock; - mappings[86] = ItemType.RawGoldBlock; - mappings[87] = ItemType.HeavyCore; - mappings[88] = ItemType.AmethystBlock; - mappings[89] = ItemType.BuddingAmethyst; - mappings[90] = ItemType.IronBlock; - mappings[91] = ItemType.CopperBlock; - mappings[92] = ItemType.GoldBlock; - mappings[93] = ItemType.DiamondBlock; - mappings[94] = ItemType.NetheriteBlock; - mappings[95] = ItemType.ExposedCopper; - mappings[96] = ItemType.WeatheredCopper; - mappings[97] = ItemType.OxidizedCopper; - mappings[98] = ItemType.ChiseledCopper; - mappings[99] = ItemType.ExposedChiseledCopper; - mappings[100] = ItemType.WeatheredChiseledCopper; - mappings[101] = ItemType.OxidizedChiseledCopper; - mappings[102] = ItemType.CutCopper; - mappings[103] = ItemType.ExposedCutCopper; - mappings[104] = ItemType.WeatheredCutCopper; - mappings[105] = ItemType.OxidizedCutCopper; - mappings[106] = ItemType.CutCopperStairs; - mappings[107] = ItemType.ExposedCutCopperStairs; - mappings[108] = ItemType.WeatheredCutCopperStairs; - mappings[109] = ItemType.OxidizedCutCopperStairs; - mappings[110] = ItemType.CutCopperSlab; - mappings[111] = ItemType.ExposedCutCopperSlab; - mappings[112] = ItemType.WeatheredCutCopperSlab; - mappings[113] = ItemType.OxidizedCutCopperSlab; - mappings[114] = ItemType.WaxedCopperBlock; - mappings[115] = ItemType.WaxedExposedCopper; - mappings[116] = ItemType.WaxedWeatheredCopper; - mappings[117] = ItemType.WaxedOxidizedCopper; - mappings[118] = ItemType.WaxedChiseledCopper; - mappings[119] = ItemType.WaxedExposedChiseledCopper; - mappings[120] = ItemType.WaxedWeatheredChiseledCopper; - mappings[121] = ItemType.WaxedOxidizedChiseledCopper; - mappings[122] = ItemType.WaxedCutCopper; - mappings[123] = ItemType.WaxedExposedCutCopper; - mappings[124] = ItemType.WaxedWeatheredCutCopper; - mappings[125] = ItemType.WaxedOxidizedCutCopper; - mappings[126] = ItemType.WaxedCutCopperStairs; - mappings[127] = ItemType.WaxedExposedCutCopperStairs; - mappings[128] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[129] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[130] = ItemType.WaxedCutCopperSlab; - mappings[131] = ItemType.WaxedExposedCutCopperSlab; - mappings[132] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[133] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[134] = ItemType.OakLog; - mappings[135] = ItemType.SpruceLog; - mappings[136] = ItemType.BirchLog; - mappings[137] = ItemType.JungleLog; - mappings[138] = ItemType.AcaciaLog; - mappings[139] = ItemType.CherryLog; - mappings[140] = ItemType.PaleOakLog; - mappings[141] = ItemType.DarkOakLog; - mappings[142] = ItemType.MangroveLog; - mappings[143] = ItemType.MangroveRoots; - mappings[144] = ItemType.MuddyMangroveRoots; - mappings[145] = ItemType.CrimsonStem; - mappings[146] = ItemType.WarpedStem; - mappings[147] = ItemType.BambooBlock; - mappings[148] = ItemType.StrippedOakLog; - mappings[149] = ItemType.StrippedSpruceLog; - mappings[150] = ItemType.StrippedBirchLog; - mappings[151] = ItemType.StrippedJungleLog; - mappings[152] = ItemType.StrippedAcaciaLog; - mappings[153] = ItemType.StrippedCherryLog; - mappings[154] = ItemType.StrippedDarkOakLog; - mappings[155] = ItemType.StrippedPaleOakLog; - mappings[156] = ItemType.StrippedMangroveLog; - mappings[157] = ItemType.StrippedCrimsonStem; - mappings[158] = ItemType.StrippedWarpedStem; - mappings[159] = ItemType.StrippedOakWood; - mappings[160] = ItemType.StrippedSpruceWood; - mappings[161] = ItemType.StrippedBirchWood; - mappings[162] = ItemType.StrippedJungleWood; - mappings[163] = ItemType.StrippedAcaciaWood; - mappings[164] = ItemType.StrippedCherryWood; - mappings[165] = ItemType.StrippedDarkOakWood; - mappings[166] = ItemType.StrippedPaleOakWood; - mappings[167] = ItemType.StrippedMangroveWood; - mappings[168] = ItemType.StrippedCrimsonHyphae; - mappings[169] = ItemType.StrippedWarpedHyphae; - mappings[170] = ItemType.StrippedBambooBlock; - mappings[171] = ItemType.OakWood; - mappings[172] = ItemType.SpruceWood; - mappings[173] = ItemType.BirchWood; - mappings[174] = ItemType.JungleWood; - mappings[175] = ItemType.AcaciaWood; - mappings[176] = ItemType.CherryWood; - mappings[177] = ItemType.PaleOakWood; - mappings[178] = ItemType.DarkOakWood; - mappings[179] = ItemType.MangroveWood; - mappings[180] = ItemType.CrimsonHyphae; - mappings[181] = ItemType.WarpedHyphae; - mappings[182] = ItemType.OakLeaves; - mappings[183] = ItemType.SpruceLeaves; - mappings[184] = ItemType.BirchLeaves; - mappings[185] = ItemType.JungleLeaves; - mappings[186] = ItemType.AcaciaLeaves; - mappings[187] = ItemType.CherryLeaves; - mappings[188] = ItemType.DarkOakLeaves; - mappings[189] = ItemType.PaleOakLeaves; - mappings[190] = ItemType.MangroveLeaves; - mappings[191] = ItemType.AzaleaLeaves; - mappings[192] = ItemType.FloweringAzaleaLeaves; - mappings[193] = ItemType.Sponge; - mappings[194] = ItemType.WetSponge; - mappings[195] = ItemType.Glass; - mappings[196] = ItemType.TintedGlass; - mappings[197] = ItemType.LapisBlock; - mappings[198] = ItemType.Sandstone; - mappings[199] = ItemType.ChiseledSandstone; - mappings[200] = ItemType.CutSandstone; - mappings[201] = ItemType.Cobweb; - mappings[202] = ItemType.ShortGrass; - mappings[203] = ItemType.Fern; - mappings[204] = ItemType.Bush; - mappings[205] = ItemType.Azalea; - mappings[206] = ItemType.FloweringAzalea; - mappings[207] = ItemType.DeadBush; - mappings[208] = ItemType.FireflyBush; - mappings[209] = ItemType.ShortDryGrass; - mappings[210] = ItemType.TallDryGrass; - mappings[211] = ItemType.Seagrass; - mappings[212] = ItemType.SeaPickle; - mappings[213] = ItemType.WhiteWool; - mappings[214] = ItemType.OrangeWool; - mappings[215] = ItemType.MagentaWool; - mappings[216] = ItemType.LightBlueWool; - mappings[217] = ItemType.YellowWool; - mappings[218] = ItemType.LimeWool; - mappings[219] = ItemType.PinkWool; - mappings[220] = ItemType.GrayWool; - mappings[221] = ItemType.LightGrayWool; - mappings[222] = ItemType.CyanWool; - mappings[223] = ItemType.PurpleWool; - mappings[224] = ItemType.BlueWool; - mappings[225] = ItemType.BrownWool; - mappings[226] = ItemType.GreenWool; - mappings[227] = ItemType.RedWool; - mappings[228] = ItemType.BlackWool; - mappings[229] = ItemType.Dandelion; - mappings[230] = ItemType.OpenEyeblossom; - mappings[231] = ItemType.ClosedEyeblossom; - mappings[232] = ItemType.Poppy; - mappings[233] = ItemType.BlueOrchid; - mappings[234] = ItemType.Allium; - mappings[235] = ItemType.AzureBluet; - mappings[236] = ItemType.RedTulip; - mappings[237] = ItemType.OrangeTulip; - mappings[238] = ItemType.WhiteTulip; - mappings[239] = ItemType.PinkTulip; - mappings[240] = ItemType.OxeyeDaisy; - mappings[241] = ItemType.Cornflower; - mappings[242] = ItemType.LilyOfTheValley; - mappings[243] = ItemType.WitherRose; - mappings[244] = ItemType.Torchflower; - mappings[245] = ItemType.PitcherPlant; - mappings[246] = ItemType.SporeBlossom; - mappings[247] = ItemType.BrownMushroom; - mappings[248] = ItemType.RedMushroom; - mappings[249] = ItemType.CrimsonFungus; - mappings[250] = ItemType.WarpedFungus; - mappings[251] = ItemType.CrimsonRoots; - mappings[252] = ItemType.WarpedRoots; - mappings[253] = ItemType.NetherSprouts; - mappings[254] = ItemType.WeepingVines; - mappings[255] = ItemType.TwistingVines; - mappings[256] = ItemType.SugarCane; - mappings[257] = ItemType.Kelp; - mappings[258] = ItemType.PinkPetals; - mappings[259] = ItemType.Wildflowers; - mappings[260] = ItemType.LeafLitter; - mappings[261] = ItemType.MossCarpet; - mappings[262] = ItemType.MossBlock; - mappings[263] = ItemType.PaleMossCarpet; - mappings[264] = ItemType.PaleHangingMoss; - mappings[265] = ItemType.PaleMossBlock; - mappings[266] = ItemType.HangingRoots; - mappings[267] = ItemType.BigDripleaf; - mappings[268] = ItemType.SmallDripleaf; - mappings[269] = ItemType.Bamboo; - mappings[270] = ItemType.OakSlab; - mappings[271] = ItemType.SpruceSlab; - mappings[272] = ItemType.BirchSlab; - mappings[273] = ItemType.JungleSlab; - mappings[274] = ItemType.AcaciaSlab; - mappings[275] = ItemType.CherrySlab; - mappings[276] = ItemType.DarkOakSlab; - mappings[277] = ItemType.PaleOakSlab; - mappings[278] = ItemType.MangroveSlab; - mappings[279] = ItemType.BambooSlab; - mappings[280] = ItemType.BambooMosaicSlab; - mappings[281] = ItemType.CrimsonSlab; - mappings[282] = ItemType.WarpedSlab; - mappings[283] = ItemType.StoneSlab; - mappings[284] = ItemType.SmoothStoneSlab; - mappings[285] = ItemType.SandstoneSlab; - mappings[286] = ItemType.CutSandstoneSlab; - mappings[287] = ItemType.PetrifiedOakSlab; - mappings[288] = ItemType.CobblestoneSlab; - mappings[289] = ItemType.BrickSlab; - mappings[290] = ItemType.StoneBrickSlab; - mappings[291] = ItemType.MudBrickSlab; - mappings[292] = ItemType.NetherBrickSlab; - mappings[293] = ItemType.QuartzSlab; - mappings[294] = ItemType.RedSandstoneSlab; - mappings[295] = ItemType.CutRedSandstoneSlab; - mappings[296] = ItemType.PurpurSlab; - mappings[297] = ItemType.PrismarineSlab; - mappings[298] = ItemType.PrismarineBrickSlab; - mappings[299] = ItemType.DarkPrismarineSlab; - mappings[300] = ItemType.SmoothQuartz; - mappings[301] = ItemType.SmoothRedSandstone; - mappings[302] = ItemType.SmoothSandstone; - mappings[303] = ItemType.SmoothStone; - mappings[304] = ItemType.Bricks; - mappings[305] = ItemType.AcaciaShelf; - mappings[306] = ItemType.BambooShelf; - mappings[307] = ItemType.BirchShelf; - mappings[308] = ItemType.CherryShelf; - mappings[309] = ItemType.CrimsonShelf; - mappings[310] = ItemType.DarkOakShelf; - mappings[311] = ItemType.JungleShelf; - mappings[312] = ItemType.MangroveShelf; - mappings[313] = ItemType.OakShelf; - mappings[314] = ItemType.PaleOakShelf; - mappings[315] = ItemType.SpruceShelf; - mappings[316] = ItemType.WarpedShelf; - mappings[317] = ItemType.Bookshelf; - mappings[318] = ItemType.ChiseledBookshelf; - mappings[319] = ItemType.DecoratedPot; - mappings[320] = ItemType.MossyCobblestone; - mappings[321] = ItemType.Obsidian; - mappings[322] = ItemType.Torch; - mappings[323] = ItemType.EndRod; - mappings[324] = ItemType.ChorusPlant; - mappings[325] = ItemType.ChorusFlower; - mappings[326] = ItemType.PurpurBlock; - mappings[327] = ItemType.PurpurPillar; - mappings[328] = ItemType.PurpurStairs; - mappings[329] = ItemType.Spawner; - mappings[330] = ItemType.CreakingHeart; - mappings[331] = ItemType.Chest; - mappings[332] = ItemType.CraftingTable; - mappings[333] = ItemType.Farmland; - mappings[334] = ItemType.Furnace; - mappings[335] = ItemType.Ladder; - mappings[336] = ItemType.CobblestoneStairs; - mappings[337] = ItemType.Snow; - mappings[338] = ItemType.Ice; - mappings[339] = ItemType.SnowBlock; - mappings[340] = ItemType.Cactus; - mappings[341] = ItemType.CactusFlower; - mappings[342] = ItemType.Clay; - mappings[343] = ItemType.Jukebox; - mappings[344] = ItemType.OakFence; - mappings[345] = ItemType.SpruceFence; - mappings[346] = ItemType.BirchFence; - mappings[347] = ItemType.JungleFence; - mappings[348] = ItemType.AcaciaFence; - mappings[349] = ItemType.CherryFence; - mappings[350] = ItemType.DarkOakFence; - mappings[351] = ItemType.PaleOakFence; - mappings[352] = ItemType.MangroveFence; - mappings[353] = ItemType.BambooFence; - mappings[354] = ItemType.CrimsonFence; - mappings[355] = ItemType.WarpedFence; - mappings[356] = ItemType.Pumpkin; - mappings[357] = ItemType.CarvedPumpkin; - mappings[358] = ItemType.JackOLantern; - mappings[359] = ItemType.Netherrack; - mappings[360] = ItemType.SoulSand; - mappings[361] = ItemType.SoulSoil; - mappings[362] = ItemType.Basalt; - mappings[363] = ItemType.PolishedBasalt; - mappings[364] = ItemType.SmoothBasalt; - mappings[365] = ItemType.SoulTorch; - mappings[366] = ItemType.CopperTorch; - mappings[367] = ItemType.Glowstone; - mappings[368] = ItemType.InfestedStone; - mappings[369] = ItemType.InfestedCobblestone; - mappings[370] = ItemType.InfestedStoneBricks; - mappings[371] = ItemType.InfestedMossyStoneBricks; - mappings[372] = ItemType.InfestedCrackedStoneBricks; - mappings[373] = ItemType.InfestedChiseledStoneBricks; - mappings[374] = ItemType.InfestedDeepslate; - mappings[375] = ItemType.StoneBricks; - mappings[376] = ItemType.MossyStoneBricks; - mappings[377] = ItemType.CrackedStoneBricks; - mappings[378] = ItemType.ChiseledStoneBricks; - mappings[379] = ItemType.PackedMud; - mappings[380] = ItemType.MudBricks; - mappings[381] = ItemType.DeepslateBricks; - mappings[382] = ItemType.CrackedDeepslateBricks; - mappings[383] = ItemType.DeepslateTiles; - mappings[384] = ItemType.CrackedDeepslateTiles; - mappings[385] = ItemType.ChiseledDeepslate; - mappings[386] = ItemType.ReinforcedDeepslate; - mappings[387] = ItemType.BrownMushroomBlock; - mappings[388] = ItemType.RedMushroomBlock; - mappings[389] = ItemType.MushroomStem; - mappings[390] = ItemType.IronBars; - mappings[391] = ItemType.CopperBars; - mappings[392] = ItemType.ExposedCopperBars; - mappings[393] = ItemType.WeatheredCopperBars; - mappings[394] = ItemType.OxidizedCopperBars; - mappings[395] = ItemType.WaxedCopperBars; - mappings[396] = ItemType.WaxedExposedCopperBars; - mappings[397] = ItemType.WaxedWeatheredCopperBars; - mappings[398] = ItemType.WaxedOxidizedCopperBars; - mappings[399] = ItemType.IronChain; - mappings[400] = ItemType.CopperChain; - mappings[401] = ItemType.ExposedCopperChain; - mappings[402] = ItemType.WeatheredCopperChain; - mappings[403] = ItemType.OxidizedCopperChain; - mappings[404] = ItemType.WaxedCopperChain; - mappings[405] = ItemType.WaxedExposedCopperChain; - mappings[406] = ItemType.WaxedWeatheredCopperChain; - mappings[407] = ItemType.WaxedOxidizedCopperChain; - mappings[408] = ItemType.GlassPane; - mappings[409] = ItemType.Melon; - mappings[410] = ItemType.Vine; - mappings[411] = ItemType.GlowLichen; - mappings[412] = ItemType.ResinClump; - mappings[413] = ItemType.ResinBlock; - mappings[414] = ItemType.ResinBricks; - mappings[415] = ItemType.ResinBrickStairs; - mappings[416] = ItemType.ResinBrickSlab; - mappings[417] = ItemType.ResinBrickWall; - mappings[418] = ItemType.ChiseledResinBricks; - mappings[419] = ItemType.BrickStairs; - mappings[420] = ItemType.StoneBrickStairs; - mappings[421] = ItemType.MudBrickStairs; - mappings[422] = ItemType.Mycelium; - mappings[423] = ItemType.LilyPad; - mappings[424] = ItemType.NetherBricks; - mappings[425] = ItemType.CrackedNetherBricks; - mappings[426] = ItemType.ChiseledNetherBricks; - mappings[427] = ItemType.NetherBrickFence; - mappings[428] = ItemType.NetherBrickStairs; - mappings[429] = ItemType.Sculk; - mappings[430] = ItemType.SculkVein; - mappings[431] = ItemType.SculkCatalyst; - mappings[432] = ItemType.SculkShrieker; - mappings[433] = ItemType.EnchantingTable; - mappings[434] = ItemType.EndPortalFrame; - mappings[435] = ItemType.EndStone; - mappings[436] = ItemType.EndStoneBricks; - mappings[437] = ItemType.DragonEgg; - mappings[438] = ItemType.SandstoneStairs; - mappings[439] = ItemType.EnderChest; - mappings[440] = ItemType.EmeraldBlock; - mappings[441] = ItemType.OakStairs; - mappings[442] = ItemType.SpruceStairs; - mappings[443] = ItemType.BirchStairs; - mappings[444] = ItemType.JungleStairs; - mappings[445] = ItemType.AcaciaStairs; - mappings[446] = ItemType.CherryStairs; - mappings[447] = ItemType.DarkOakStairs; - mappings[448] = ItemType.PaleOakStairs; - mappings[449] = ItemType.MangroveStairs; - mappings[450] = ItemType.BambooStairs; - mappings[451] = ItemType.BambooMosaicStairs; - mappings[452] = ItemType.CrimsonStairs; - mappings[453] = ItemType.WarpedStairs; - mappings[454] = ItemType.CommandBlock; - mappings[455] = ItemType.Beacon; - mappings[456] = ItemType.CobblestoneWall; - mappings[457] = ItemType.MossyCobblestoneWall; - mappings[458] = ItemType.BrickWall; - mappings[459] = ItemType.PrismarineWall; - mappings[460] = ItemType.RedSandstoneWall; - mappings[461] = ItemType.MossyStoneBrickWall; - mappings[462] = ItemType.GraniteWall; - mappings[463] = ItemType.StoneBrickWall; - mappings[464] = ItemType.MudBrickWall; - mappings[465] = ItemType.NetherBrickWall; - mappings[466] = ItemType.AndesiteWall; - mappings[467] = ItemType.RedNetherBrickWall; - mappings[468] = ItemType.SandstoneWall; - mappings[469] = ItemType.EndStoneBrickWall; - mappings[470] = ItemType.DioriteWall; - mappings[471] = ItemType.BlackstoneWall; - mappings[472] = ItemType.PolishedBlackstoneWall; - mappings[473] = ItemType.PolishedBlackstoneBrickWall; - mappings[474] = ItemType.CobbledDeepslateWall; - mappings[475] = ItemType.PolishedDeepslateWall; - mappings[476] = ItemType.DeepslateBrickWall; - mappings[477] = ItemType.DeepslateTileWall; - mappings[478] = ItemType.Anvil; - mappings[479] = ItemType.ChippedAnvil; - mappings[480] = ItemType.DamagedAnvil; - mappings[481] = ItemType.ChiseledQuartzBlock; - mappings[482] = ItemType.QuartzBlock; - mappings[483] = ItemType.QuartzBricks; - mappings[484] = ItemType.QuartzPillar; - mappings[485] = ItemType.QuartzStairs; - mappings[486] = ItemType.WhiteTerracotta; - mappings[487] = ItemType.OrangeTerracotta; - mappings[488] = ItemType.MagentaTerracotta; - mappings[489] = ItemType.LightBlueTerracotta; - mappings[490] = ItemType.YellowTerracotta; - mappings[491] = ItemType.LimeTerracotta; - mappings[492] = ItemType.PinkTerracotta; - mappings[493] = ItemType.GrayTerracotta; - mappings[494] = ItemType.LightGrayTerracotta; - mappings[495] = ItemType.CyanTerracotta; - mappings[496] = ItemType.PurpleTerracotta; - mappings[497] = ItemType.BlueTerracotta; - mappings[498] = ItemType.BrownTerracotta; - mappings[499] = ItemType.GreenTerracotta; - mappings[500] = ItemType.RedTerracotta; - mappings[501] = ItemType.BlackTerracotta; - mappings[502] = ItemType.Barrier; - mappings[503] = ItemType.Light; - mappings[504] = ItemType.HayBlock; - mappings[505] = ItemType.WhiteCarpet; - mappings[506] = ItemType.OrangeCarpet; - mappings[507] = ItemType.MagentaCarpet; - mappings[508] = ItemType.LightBlueCarpet; - mappings[509] = ItemType.YellowCarpet; - mappings[510] = ItemType.LimeCarpet; - mappings[511] = ItemType.PinkCarpet; - mappings[512] = ItemType.GrayCarpet; - mappings[513] = ItemType.LightGrayCarpet; - mappings[514] = ItemType.CyanCarpet; - mappings[515] = ItemType.PurpleCarpet; - mappings[516] = ItemType.BlueCarpet; - mappings[517] = ItemType.BrownCarpet; - mappings[518] = ItemType.GreenCarpet; - mappings[519] = ItemType.RedCarpet; - mappings[520] = ItemType.BlackCarpet; - mappings[521] = ItemType.Terracotta; - mappings[522] = ItemType.PackedIce; - mappings[523] = ItemType.DirtPath; - mappings[524] = ItemType.Sunflower; - mappings[525] = ItemType.Lilac; - mappings[526] = ItemType.RoseBush; - mappings[527] = ItemType.Peony; - mappings[528] = ItemType.TallGrass; - mappings[529] = ItemType.LargeFern; - mappings[530] = ItemType.WhiteStainedGlass; - mappings[531] = ItemType.OrangeStainedGlass; - mappings[532] = ItemType.MagentaStainedGlass; - mappings[533] = ItemType.LightBlueStainedGlass; - mappings[534] = ItemType.YellowStainedGlass; - mappings[535] = ItemType.LimeStainedGlass; - mappings[536] = ItemType.PinkStainedGlass; - mappings[537] = ItemType.GrayStainedGlass; - mappings[538] = ItemType.LightGrayStainedGlass; - mappings[539] = ItemType.CyanStainedGlass; - mappings[540] = ItemType.PurpleStainedGlass; - mappings[541] = ItemType.BlueStainedGlass; - mappings[542] = ItemType.BrownStainedGlass; - mappings[543] = ItemType.GreenStainedGlass; - mappings[544] = ItemType.RedStainedGlass; - mappings[545] = ItemType.BlackStainedGlass; - mappings[546] = ItemType.WhiteStainedGlassPane; - mappings[547] = ItemType.OrangeStainedGlassPane; - mappings[548] = ItemType.MagentaStainedGlassPane; - mappings[549] = ItemType.LightBlueStainedGlassPane; - mappings[550] = ItemType.YellowStainedGlassPane; - mappings[551] = ItemType.LimeStainedGlassPane; - mappings[552] = ItemType.PinkStainedGlassPane; - mappings[553] = ItemType.GrayStainedGlassPane; - mappings[554] = ItemType.LightGrayStainedGlassPane; - mappings[555] = ItemType.CyanStainedGlassPane; - mappings[556] = ItemType.PurpleStainedGlassPane; - mappings[557] = ItemType.BlueStainedGlassPane; - mappings[558] = ItemType.BrownStainedGlassPane; - mappings[559] = ItemType.GreenStainedGlassPane; - mappings[560] = ItemType.RedStainedGlassPane; - mappings[561] = ItemType.BlackStainedGlassPane; - mappings[562] = ItemType.Prismarine; - mappings[563] = ItemType.PrismarineBricks; - mappings[564] = ItemType.DarkPrismarine; - mappings[565] = ItemType.PrismarineStairs; - mappings[566] = ItemType.PrismarineBrickStairs; - mappings[567] = ItemType.DarkPrismarineStairs; - mappings[568] = ItemType.SeaLantern; - mappings[569] = ItemType.RedSandstone; - mappings[570] = ItemType.ChiseledRedSandstone; - mappings[571] = ItemType.CutRedSandstone; - mappings[572] = ItemType.RedSandstoneStairs; - mappings[573] = ItemType.RepeatingCommandBlock; - mappings[574] = ItemType.ChainCommandBlock; - mappings[575] = ItemType.MagmaBlock; - mappings[576] = ItemType.NetherWartBlock; - mappings[577] = ItemType.WarpedWartBlock; - mappings[578] = ItemType.RedNetherBricks; - mappings[579] = ItemType.BoneBlock; - mappings[580] = ItemType.StructureVoid; - mappings[581] = ItemType.ShulkerBox; - mappings[582] = ItemType.WhiteShulkerBox; - mappings[583] = ItemType.OrangeShulkerBox; - mappings[584] = ItemType.MagentaShulkerBox; - mappings[585] = ItemType.LightBlueShulkerBox; - mappings[586] = ItemType.YellowShulkerBox; - mappings[587] = ItemType.LimeShulkerBox; - mappings[588] = ItemType.PinkShulkerBox; - mappings[589] = ItemType.GrayShulkerBox; - mappings[590] = ItemType.LightGrayShulkerBox; - mappings[591] = ItemType.CyanShulkerBox; - mappings[592] = ItemType.PurpleShulkerBox; - mappings[593] = ItemType.BlueShulkerBox; - mappings[594] = ItemType.BrownShulkerBox; - mappings[595] = ItemType.GreenShulkerBox; - mappings[596] = ItemType.RedShulkerBox; - mappings[597] = ItemType.BlackShulkerBox; - mappings[598] = ItemType.WhiteGlazedTerracotta; - mappings[599] = ItemType.OrangeGlazedTerracotta; - mappings[600] = ItemType.MagentaGlazedTerracotta; - mappings[601] = ItemType.LightBlueGlazedTerracotta; - mappings[602] = ItemType.YellowGlazedTerracotta; - mappings[603] = ItemType.LimeGlazedTerracotta; - mappings[604] = ItemType.PinkGlazedTerracotta; - mappings[605] = ItemType.GrayGlazedTerracotta; - mappings[606] = ItemType.LightGrayGlazedTerracotta; - mappings[607] = ItemType.CyanGlazedTerracotta; - mappings[608] = ItemType.PurpleGlazedTerracotta; - mappings[609] = ItemType.BlueGlazedTerracotta; - mappings[610] = ItemType.BrownGlazedTerracotta; - mappings[611] = ItemType.GreenGlazedTerracotta; - mappings[612] = ItemType.RedGlazedTerracotta; - mappings[613] = ItemType.BlackGlazedTerracotta; - mappings[614] = ItemType.WhiteConcrete; - mappings[615] = ItemType.OrangeConcrete; - mappings[616] = ItemType.MagentaConcrete; - mappings[617] = ItemType.LightBlueConcrete; - mappings[618] = ItemType.YellowConcrete; - mappings[619] = ItemType.LimeConcrete; - mappings[620] = ItemType.PinkConcrete; - mappings[621] = ItemType.GrayConcrete; - mappings[622] = ItemType.LightGrayConcrete; - mappings[623] = ItemType.CyanConcrete; - mappings[624] = ItemType.PurpleConcrete; - mappings[625] = ItemType.BlueConcrete; - mappings[626] = ItemType.BrownConcrete; - mappings[627] = ItemType.GreenConcrete; - mappings[628] = ItemType.RedConcrete; - mappings[629] = ItemType.BlackConcrete; - mappings[630] = ItemType.WhiteConcretePowder; - mappings[631] = ItemType.OrangeConcretePowder; - mappings[632] = ItemType.MagentaConcretePowder; - mappings[633] = ItemType.LightBlueConcretePowder; - mappings[634] = ItemType.YellowConcretePowder; - mappings[635] = ItemType.LimeConcretePowder; - mappings[636] = ItemType.PinkConcretePowder; - mappings[637] = ItemType.GrayConcretePowder; - mappings[638] = ItemType.LightGrayConcretePowder; - mappings[639] = ItemType.CyanConcretePowder; - mappings[640] = ItemType.PurpleConcretePowder; - mappings[641] = ItemType.BlueConcretePowder; - mappings[642] = ItemType.BrownConcretePowder; - mappings[643] = ItemType.GreenConcretePowder; - mappings[644] = ItemType.RedConcretePowder; - mappings[645] = ItemType.BlackConcretePowder; - mappings[646] = ItemType.TurtleEgg; - mappings[647] = ItemType.SnifferEgg; - mappings[648] = ItemType.DriedGhast; - mappings[649] = ItemType.DeadTubeCoralBlock; - mappings[650] = ItemType.DeadBrainCoralBlock; - mappings[651] = ItemType.DeadBubbleCoralBlock; - mappings[652] = ItemType.DeadFireCoralBlock; - mappings[653] = ItemType.DeadHornCoralBlock; - mappings[654] = ItemType.TubeCoralBlock; - mappings[655] = ItemType.BrainCoralBlock; - mappings[656] = ItemType.BubbleCoralBlock; - mappings[657] = ItemType.FireCoralBlock; - mappings[658] = ItemType.HornCoralBlock; - mappings[659] = ItemType.TubeCoral; - mappings[660] = ItemType.BrainCoral; - mappings[661] = ItemType.BubbleCoral; - mappings[662] = ItemType.FireCoral; - mappings[663] = ItemType.HornCoral; - mappings[664] = ItemType.DeadBrainCoral; - mappings[665] = ItemType.DeadBubbleCoral; - mappings[666] = ItemType.DeadFireCoral; - mappings[667] = ItemType.DeadHornCoral; - mappings[668] = ItemType.DeadTubeCoral; - mappings[669] = ItemType.TubeCoralFan; - mappings[670] = ItemType.BrainCoralFan; - mappings[671] = ItemType.BubbleCoralFan; - mappings[672] = ItemType.FireCoralFan; - mappings[673] = ItemType.HornCoralFan; - mappings[674] = ItemType.DeadTubeCoralFan; - mappings[675] = ItemType.DeadBrainCoralFan; - mappings[676] = ItemType.DeadBubbleCoralFan; - mappings[677] = ItemType.DeadFireCoralFan; - mappings[678] = ItemType.DeadHornCoralFan; - mappings[679] = ItemType.BlueIce; - mappings[680] = ItemType.Conduit; - mappings[681] = ItemType.PolishedGraniteStairs; - mappings[682] = ItemType.SmoothRedSandstoneStairs; - mappings[683] = ItemType.MossyStoneBrickStairs; - mappings[684] = ItemType.PolishedDioriteStairs; - mappings[685] = ItemType.MossyCobblestoneStairs; - mappings[686] = ItemType.EndStoneBrickStairs; - mappings[687] = ItemType.StoneStairs; - mappings[688] = ItemType.SmoothSandstoneStairs; - mappings[689] = ItemType.SmoothQuartzStairs; - mappings[690] = ItemType.GraniteStairs; - mappings[691] = ItemType.AndesiteStairs; - mappings[692] = ItemType.RedNetherBrickStairs; - mappings[693] = ItemType.PolishedAndesiteStairs; - mappings[694] = ItemType.DioriteStairs; - mappings[695] = ItemType.CobbledDeepslateStairs; - mappings[696] = ItemType.PolishedDeepslateStairs; - mappings[697] = ItemType.DeepslateBrickStairs; - mappings[698] = ItemType.DeepslateTileStairs; - mappings[699] = ItemType.PolishedGraniteSlab; - mappings[700] = ItemType.SmoothRedSandstoneSlab; - mappings[701] = ItemType.MossyStoneBrickSlab; - mappings[702] = ItemType.PolishedDioriteSlab; - mappings[703] = ItemType.MossyCobblestoneSlab; - mappings[704] = ItemType.EndStoneBrickSlab; - mappings[705] = ItemType.SmoothSandstoneSlab; - mappings[706] = ItemType.SmoothQuartzSlab; - mappings[707] = ItemType.GraniteSlab; - mappings[708] = ItemType.AndesiteSlab; - mappings[709] = ItemType.RedNetherBrickSlab; - mappings[710] = ItemType.PolishedAndesiteSlab; - mappings[711] = ItemType.DioriteSlab; - mappings[712] = ItemType.CobbledDeepslateSlab; - mappings[713] = ItemType.PolishedDeepslateSlab; - mappings[714] = ItemType.DeepslateBrickSlab; - mappings[715] = ItemType.DeepslateTileSlab; - mappings[716] = ItemType.Scaffolding; - mappings[717] = ItemType.Redstone; - mappings[718] = ItemType.RedstoneTorch; - mappings[719] = ItemType.RedstoneBlock; - mappings[720] = ItemType.Repeater; - mappings[721] = ItemType.Comparator; - mappings[722] = ItemType.Piston; - mappings[723] = ItemType.StickyPiston; - mappings[724] = ItemType.SlimeBlock; - mappings[725] = ItemType.HoneyBlock; - mappings[726] = ItemType.Observer; - mappings[727] = ItemType.Hopper; - mappings[728] = ItemType.Dispenser; - mappings[729] = ItemType.Dropper; - mappings[730] = ItemType.Lectern; - mappings[731] = ItemType.Target; - mappings[732] = ItemType.Lever; - mappings[733] = ItemType.LightningRod; - mappings[734] = ItemType.ExposedLightningRod; - mappings[735] = ItemType.WeatheredLightningRod; - mappings[736] = ItemType.OxidizedLightningRod; - mappings[737] = ItemType.WaxedLightningRod; - mappings[738] = ItemType.WaxedExposedLightningRod; - mappings[739] = ItemType.WaxedWeatheredLightningRod; - mappings[740] = ItemType.WaxedOxidizedLightningRod; - mappings[741] = ItemType.DaylightDetector; - mappings[742] = ItemType.SculkSensor; - mappings[743] = ItemType.CalibratedSculkSensor; - mappings[744] = ItemType.TripwireHook; - mappings[745] = ItemType.TrappedChest; - mappings[746] = ItemType.Tnt; - mappings[747] = ItemType.RedstoneLamp; - mappings[748] = ItemType.NoteBlock; - mappings[749] = ItemType.StoneButton; - mappings[750] = ItemType.PolishedBlackstoneButton; - mappings[751] = ItemType.OakButton; - mappings[752] = ItemType.SpruceButton; - mappings[753] = ItemType.BirchButton; - mappings[754] = ItemType.JungleButton; - mappings[755] = ItemType.AcaciaButton; - mappings[756] = ItemType.CherryButton; - mappings[757] = ItemType.DarkOakButton; - mappings[758] = ItemType.PaleOakButton; - mappings[759] = ItemType.MangroveButton; - mappings[760] = ItemType.BambooButton; - mappings[761] = ItemType.CrimsonButton; - mappings[762] = ItemType.WarpedButton; - mappings[763] = ItemType.StonePressurePlate; - mappings[764] = ItemType.PolishedBlackstonePressurePlate; - mappings[765] = ItemType.LightWeightedPressurePlate; - mappings[766] = ItemType.HeavyWeightedPressurePlate; - mappings[767] = ItemType.OakPressurePlate; - mappings[768] = ItemType.SprucePressurePlate; - mappings[769] = ItemType.BirchPressurePlate; - mappings[770] = ItemType.JunglePressurePlate; - mappings[771] = ItemType.AcaciaPressurePlate; - mappings[772] = ItemType.CherryPressurePlate; - mappings[773] = ItemType.DarkOakPressurePlate; - mappings[774] = ItemType.PaleOakPressurePlate; - mappings[775] = ItemType.MangrovePressurePlate; - mappings[776] = ItemType.BambooPressurePlate; - mappings[777] = ItemType.CrimsonPressurePlate; - mappings[778] = ItemType.WarpedPressurePlate; - mappings[779] = ItemType.IronDoor; - mappings[780] = ItemType.OakDoor; - mappings[781] = ItemType.SpruceDoor; - mappings[782] = ItemType.BirchDoor; - mappings[783] = ItemType.JungleDoor; - mappings[784] = ItemType.AcaciaDoor; - mappings[785] = ItemType.CherryDoor; - mappings[786] = ItemType.DarkOakDoor; - mappings[787] = ItemType.PaleOakDoor; - mappings[788] = ItemType.MangroveDoor; - mappings[789] = ItemType.BambooDoor; - mappings[790] = ItemType.CrimsonDoor; - mappings[791] = ItemType.WarpedDoor; - mappings[792] = ItemType.CopperDoor; - mappings[793] = ItemType.ExposedCopperDoor; - mappings[794] = ItemType.WeatheredCopperDoor; - mappings[795] = ItemType.OxidizedCopperDoor; - mappings[796] = ItemType.WaxedCopperDoor; - mappings[797] = ItemType.WaxedExposedCopperDoor; - mappings[798] = ItemType.WaxedWeatheredCopperDoor; - mappings[799] = ItemType.WaxedOxidizedCopperDoor; - mappings[800] = ItemType.IronTrapdoor; - mappings[801] = ItemType.OakTrapdoor; - mappings[802] = ItemType.SpruceTrapdoor; - mappings[803] = ItemType.BirchTrapdoor; - mappings[804] = ItemType.JungleTrapdoor; - mappings[805] = ItemType.AcaciaTrapdoor; - mappings[806] = ItemType.CherryTrapdoor; - mappings[807] = ItemType.DarkOakTrapdoor; - mappings[808] = ItemType.PaleOakTrapdoor; - mappings[809] = ItemType.MangroveTrapdoor; - mappings[810] = ItemType.BambooTrapdoor; - mappings[811] = ItemType.CrimsonTrapdoor; - mappings[812] = ItemType.WarpedTrapdoor; - mappings[813] = ItemType.CopperTrapdoor; - mappings[814] = ItemType.ExposedCopperTrapdoor; - mappings[815] = ItemType.WeatheredCopperTrapdoor; - mappings[816] = ItemType.OxidizedCopperTrapdoor; - mappings[817] = ItemType.WaxedCopperTrapdoor; - mappings[818] = ItemType.WaxedExposedCopperTrapdoor; - mappings[819] = ItemType.WaxedWeatheredCopperTrapdoor; - mappings[820] = ItemType.WaxedOxidizedCopperTrapdoor; - mappings[821] = ItemType.OakFenceGate; - mappings[822] = ItemType.SpruceFenceGate; - mappings[823] = ItemType.BirchFenceGate; - mappings[824] = ItemType.JungleFenceGate; - mappings[825] = ItemType.AcaciaFenceGate; - mappings[826] = ItemType.CherryFenceGate; - mappings[827] = ItemType.DarkOakFenceGate; - mappings[828] = ItemType.PaleOakFenceGate; - mappings[829] = ItemType.MangroveFenceGate; - mappings[830] = ItemType.BambooFenceGate; - mappings[831] = ItemType.CrimsonFenceGate; - mappings[832] = ItemType.WarpedFenceGate; - mappings[833] = ItemType.PoweredRail; - mappings[834] = ItemType.DetectorRail; - mappings[835] = ItemType.Rail; - mappings[836] = ItemType.ActivatorRail; - mappings[837] = ItemType.Saddle; - mappings[838] = ItemType.WhiteHarness; - mappings[839] = ItemType.OrangeHarness; - mappings[840] = ItemType.MagentaHarness; - mappings[841] = ItemType.LightBlueHarness; - mappings[842] = ItemType.YellowHarness; - mappings[843] = ItemType.LimeHarness; - mappings[844] = ItemType.PinkHarness; - mappings[845] = ItemType.GrayHarness; - mappings[846] = ItemType.LightGrayHarness; - mappings[847] = ItemType.CyanHarness; - mappings[848] = ItemType.PurpleHarness; - mappings[849] = ItemType.BlueHarness; - mappings[850] = ItemType.BrownHarness; - mappings[851] = ItemType.GreenHarness; - mappings[852] = ItemType.RedHarness; - mappings[853] = ItemType.BlackHarness; - mappings[854] = ItemType.Minecart; - mappings[855] = ItemType.ChestMinecart; - mappings[856] = ItemType.FurnaceMinecart; - mappings[857] = ItemType.TntMinecart; - mappings[858] = ItemType.HopperMinecart; - mappings[859] = ItemType.CarrotOnAStick; - mappings[860] = ItemType.WarpedFungusOnAStick; - mappings[861] = ItemType.PhantomMembrane; - mappings[862] = ItemType.Elytra; - mappings[863] = ItemType.OakBoat; - mappings[864] = ItemType.OakChestBoat; - mappings[865] = ItemType.SpruceBoat; - mappings[866] = ItemType.SpruceChestBoat; - mappings[867] = ItemType.BirchBoat; - mappings[868] = ItemType.BirchChestBoat; - mappings[869] = ItemType.JungleBoat; - mappings[870] = ItemType.JungleChestBoat; - mappings[871] = ItemType.AcaciaBoat; - mappings[872] = ItemType.AcaciaChestBoat; - mappings[873] = ItemType.CherryBoat; - mappings[874] = ItemType.CherryChestBoat; - mappings[875] = ItemType.DarkOakBoat; - mappings[876] = ItemType.DarkOakChestBoat; - mappings[877] = ItemType.PaleOakBoat; - mappings[878] = ItemType.PaleOakChestBoat; - mappings[879] = ItemType.MangroveBoat; - mappings[880] = ItemType.MangroveChestBoat; - mappings[881] = ItemType.BambooRaft; - mappings[882] = ItemType.BambooChestRaft; - mappings[883] = ItemType.StructureBlock; - mappings[884] = ItemType.Jigsaw; - mappings[885] = ItemType.TestBlock; - mappings[886] = ItemType.TestInstanceBlock; - mappings[887] = ItemType.TurtleHelmet; - mappings[888] = ItemType.TurtleScute; - mappings[889] = ItemType.ArmadilloScute; - mappings[890] = ItemType.WolfArmor; - mappings[891] = ItemType.FlintAndSteel; - mappings[892] = ItemType.Bowl; - mappings[893] = ItemType.Apple; - mappings[894] = ItemType.Bow; - mappings[895] = ItemType.Arrow; - mappings[896] = ItemType.Coal; - mappings[897] = ItemType.Charcoal; - mappings[898] = ItemType.Diamond; - mappings[899] = ItemType.Emerald; - mappings[900] = ItemType.LapisLazuli; - mappings[901] = ItemType.Quartz; - mappings[902] = ItemType.AmethystShard; - mappings[903] = ItemType.RawIron; - mappings[904] = ItemType.IronIngot; - mappings[905] = ItemType.RawCopper; - mappings[906] = ItemType.CopperIngot; - mappings[907] = ItemType.RawGold; - mappings[908] = ItemType.GoldIngot; - mappings[909] = ItemType.NetheriteIngot; - mappings[910] = ItemType.NetheriteScrap; - mappings[911] = ItemType.WoodenSword; - mappings[912] = ItemType.WoodenShovel; - mappings[913] = ItemType.WoodenPickaxe; - mappings[914] = ItemType.WoodenAxe; - mappings[915] = ItemType.WoodenHoe; - mappings[916] = ItemType.CopperSword; - mappings[917] = ItemType.CopperShovel; - mappings[918] = ItemType.CopperPickaxe; - mappings[919] = ItemType.CopperAxe; - mappings[920] = ItemType.CopperHoe; - mappings[921] = ItemType.StoneSword; - mappings[922] = ItemType.StoneShovel; - mappings[923] = ItemType.StonePickaxe; - mappings[924] = ItemType.StoneAxe; - mappings[925] = ItemType.StoneHoe; - mappings[926] = ItemType.GoldenSword; - mappings[927] = ItemType.GoldenShovel; - mappings[928] = ItemType.GoldenPickaxe; - mappings[929] = ItemType.GoldenAxe; - mappings[930] = ItemType.GoldenHoe; - mappings[931] = ItemType.IronSword; - mappings[932] = ItemType.IronShovel; - mappings[933] = ItemType.IronPickaxe; - mappings[934] = ItemType.IronAxe; - mappings[935] = ItemType.IronHoe; - mappings[936] = ItemType.DiamondSword; - mappings[937] = ItemType.DiamondShovel; - mappings[938] = ItemType.DiamondPickaxe; - mappings[939] = ItemType.DiamondAxe; - mappings[940] = ItemType.DiamondHoe; - mappings[941] = ItemType.NetheriteSword; - mappings[942] = ItemType.NetheriteShovel; - mappings[943] = ItemType.NetheritePickaxe; - mappings[944] = ItemType.NetheriteAxe; - mappings[945] = ItemType.NetheriteHoe; - mappings[946] = ItemType.Stick; - mappings[947] = ItemType.MushroomStew; - mappings[948] = ItemType.String; - mappings[949] = ItemType.Feather; - mappings[950] = ItemType.Gunpowder; - mappings[951] = ItemType.WheatSeeds; - mappings[952] = ItemType.Wheat; - mappings[953] = ItemType.Bread; - mappings[954] = ItemType.LeatherHelmet; - mappings[955] = ItemType.LeatherChestplate; - mappings[956] = ItemType.LeatherLeggings; - mappings[957] = ItemType.LeatherBoots; - mappings[958] = ItemType.CopperHelmet; - mappings[959] = ItemType.CopperChestplate; - mappings[960] = ItemType.CopperLeggings; - mappings[961] = ItemType.CopperBoots; - mappings[962] = ItemType.ChainmailHelmet; - mappings[963] = ItemType.ChainmailChestplate; - mappings[964] = ItemType.ChainmailLeggings; - mappings[965] = ItemType.ChainmailBoots; - mappings[966] = ItemType.IronHelmet; - mappings[967] = ItemType.IronChestplate; - mappings[968] = ItemType.IronLeggings; - mappings[969] = ItemType.IronBoots; - mappings[970] = ItemType.DiamondHelmet; - mappings[971] = ItemType.DiamondChestplate; - mappings[972] = ItemType.DiamondLeggings; - mappings[973] = ItemType.DiamondBoots; - mappings[974] = ItemType.GoldenHelmet; - mappings[975] = ItemType.GoldenChestplate; - mappings[976] = ItemType.GoldenLeggings; - mappings[977] = ItemType.GoldenBoots; - mappings[978] = ItemType.NetheriteHelmet; - mappings[979] = ItemType.NetheriteChestplate; - mappings[980] = ItemType.NetheriteLeggings; - mappings[981] = ItemType.NetheriteBoots; - mappings[982] = ItemType.Flint; - mappings[983] = ItemType.Porkchop; - mappings[984] = ItemType.CookedPorkchop; - mappings[985] = ItemType.Painting; - mappings[986] = ItemType.GoldenApple; - mappings[987] = ItemType.EnchantedGoldenApple; - mappings[988] = ItemType.OakSign; - mappings[989] = ItemType.SpruceSign; - mappings[990] = ItemType.BirchSign; - mappings[991] = ItemType.JungleSign; - mappings[992] = ItemType.AcaciaSign; - mappings[993] = ItemType.CherrySign; - mappings[994] = ItemType.DarkOakSign; - mappings[995] = ItemType.PaleOakSign; - mappings[996] = ItemType.MangroveSign; - mappings[997] = ItemType.BambooSign; - mappings[998] = ItemType.CrimsonSign; - mappings[999] = ItemType.WarpedSign; - mappings[1000] = ItemType.OakHangingSign; - mappings[1001] = ItemType.SpruceHangingSign; - mappings[1002] = ItemType.BirchHangingSign; - mappings[1003] = ItemType.JungleHangingSign; - mappings[1004] = ItemType.AcaciaHangingSign; - mappings[1005] = ItemType.CherryHangingSign; - mappings[1006] = ItemType.DarkOakHangingSign; - mappings[1007] = ItemType.PaleOakHangingSign; - mappings[1008] = ItemType.MangroveHangingSign; - mappings[1009] = ItemType.BambooHangingSign; - mappings[1010] = ItemType.CrimsonHangingSign; - mappings[1011] = ItemType.WarpedHangingSign; - mappings[1012] = ItemType.Bucket; - mappings[1013] = ItemType.WaterBucket; - mappings[1014] = ItemType.LavaBucket; - mappings[1015] = ItemType.PowderSnowBucket; - mappings[1016] = ItemType.Snowball; - mappings[1017] = ItemType.Leather; - mappings[1018] = ItemType.MilkBucket; - mappings[1019] = ItemType.PufferfishBucket; - mappings[1020] = ItemType.SalmonBucket; - mappings[1021] = ItemType.CodBucket; - mappings[1022] = ItemType.TropicalFishBucket; - mappings[1023] = ItemType.AxolotlBucket; - mappings[1024] = ItemType.TadpoleBucket; - mappings[1025] = ItemType.Brick; - mappings[1026] = ItemType.ClayBall; - mappings[1027] = ItemType.DriedKelpBlock; - mappings[1028] = ItemType.Paper; - mappings[1029] = ItemType.Book; - mappings[1030] = ItemType.SlimeBall; - mappings[1031] = ItemType.Egg; - mappings[1032] = ItemType.BlueEgg; - mappings[1033] = ItemType.BrownEgg; - mappings[1034] = ItemType.Compass; - mappings[1035] = ItemType.RecoveryCompass; - mappings[1036] = ItemType.Bundle; - mappings[1037] = ItemType.WhiteBundle; - mappings[1038] = ItemType.OrangeBundle; - mappings[1039] = ItemType.MagentaBundle; - mappings[1040] = ItemType.LightBlueBundle; - mappings[1041] = ItemType.YellowBundle; - mappings[1042] = ItemType.LimeBundle; - mappings[1043] = ItemType.PinkBundle; - mappings[1044] = ItemType.GrayBundle; - mappings[1045] = ItemType.LightGrayBundle; - mappings[1046] = ItemType.CyanBundle; - mappings[1047] = ItemType.PurpleBundle; - mappings[1048] = ItemType.BlueBundle; - mappings[1049] = ItemType.BrownBundle; - mappings[1050] = ItemType.GreenBundle; - mappings[1051] = ItemType.RedBundle; - mappings[1052] = ItemType.BlackBundle; - mappings[1053] = ItemType.FishingRod; - mappings[1054] = ItemType.Clock; - mappings[1055] = ItemType.Spyglass; - mappings[1056] = ItemType.GlowstoneDust; - mappings[1057] = ItemType.Cod; - mappings[1058] = ItemType.Salmon; - mappings[1059] = ItemType.TropicalFish; - mappings[1060] = ItemType.Pufferfish; - mappings[1061] = ItemType.CookedCod; - mappings[1062] = ItemType.CookedSalmon; - mappings[1063] = ItemType.InkSac; - mappings[1064] = ItemType.GlowInkSac; - mappings[1065] = ItemType.CocoaBeans; - mappings[1066] = ItemType.WhiteDye; - mappings[1067] = ItemType.OrangeDye; - mappings[1068] = ItemType.MagentaDye; - mappings[1069] = ItemType.LightBlueDye; - mappings[1070] = ItemType.YellowDye; - mappings[1071] = ItemType.LimeDye; - mappings[1072] = ItemType.PinkDye; - mappings[1073] = ItemType.GrayDye; - mappings[1074] = ItemType.LightGrayDye; - mappings[1075] = ItemType.CyanDye; - mappings[1076] = ItemType.PurpleDye; - mappings[1077] = ItemType.BlueDye; - mappings[1078] = ItemType.BrownDye; - mappings[1079] = ItemType.GreenDye; - mappings[1080] = ItemType.RedDye; - mappings[1081] = ItemType.BlackDye; - mappings[1082] = ItemType.BoneMeal; - mappings[1083] = ItemType.Bone; - mappings[1084] = ItemType.Sugar; - mappings[1085] = ItemType.Cake; - mappings[1086] = ItemType.WhiteBed; - mappings[1087] = ItemType.OrangeBed; - mappings[1088] = ItemType.MagentaBed; - mappings[1089] = ItemType.LightBlueBed; - mappings[1090] = ItemType.YellowBed; - mappings[1091] = ItemType.LimeBed; - mappings[1092] = ItemType.PinkBed; - mappings[1093] = ItemType.GrayBed; - mappings[1094] = ItemType.LightGrayBed; - mappings[1095] = ItemType.CyanBed; - mappings[1096] = ItemType.PurpleBed; - mappings[1097] = ItemType.BlueBed; - mappings[1098] = ItemType.BrownBed; - mappings[1099] = ItemType.GreenBed; - mappings[1100] = ItemType.RedBed; - mappings[1101] = ItemType.BlackBed; - mappings[1102] = ItemType.Cookie; - mappings[1103] = ItemType.Crafter; - mappings[1104] = ItemType.FilledMap; - mappings[1105] = ItemType.Shears; - mappings[1106] = ItemType.MelonSlice; - mappings[1107] = ItemType.DriedKelp; - mappings[1108] = ItemType.PumpkinSeeds; - mappings[1109] = ItemType.MelonSeeds; - mappings[1110] = ItemType.Beef; - mappings[1111] = ItemType.CookedBeef; - mappings[1112] = ItemType.Chicken; - mappings[1113] = ItemType.CookedChicken; - mappings[1114] = ItemType.RottenFlesh; - mappings[1115] = ItemType.EnderPearl; - mappings[1116] = ItemType.BlazeRod; - mappings[1117] = ItemType.GhastTear; - mappings[1118] = ItemType.GoldNugget; - mappings[1119] = ItemType.NetherWart; - mappings[1120] = ItemType.GlassBottle; - mappings[1121] = ItemType.Potion; - mappings[1122] = ItemType.SpiderEye; - mappings[1123] = ItemType.FermentedSpiderEye; - mappings[1124] = ItemType.BlazePowder; - mappings[1125] = ItemType.MagmaCream; - mappings[1126] = ItemType.BrewingStand; - mappings[1127] = ItemType.Cauldron; - mappings[1128] = ItemType.EnderEye; - mappings[1129] = ItemType.GlisteringMelonSlice; - mappings[1130] = ItemType.ChickenSpawnEgg; - mappings[1131] = ItemType.CowSpawnEgg; - mappings[1132] = ItemType.PigSpawnEgg; - mappings[1133] = ItemType.SheepSpawnEgg; - mappings[1134] = ItemType.CamelSpawnEgg; - mappings[1135] = ItemType.DonkeySpawnEgg; - mappings[1136] = ItemType.HorseSpawnEgg; - mappings[1137] = ItemType.MuleSpawnEgg; - mappings[1138] = ItemType.CatSpawnEgg; - mappings[1139] = ItemType.ParrotSpawnEgg; - mappings[1140] = ItemType.WolfSpawnEgg; - mappings[1141] = ItemType.ArmadilloSpawnEgg; - mappings[1142] = ItemType.BatSpawnEgg; - mappings[1143] = ItemType.BeeSpawnEgg; - mappings[1144] = ItemType.FoxSpawnEgg; - mappings[1145] = ItemType.GoatSpawnEgg; - mappings[1146] = ItemType.LlamaSpawnEgg; - mappings[1147] = ItemType.OcelotSpawnEgg; - mappings[1148] = ItemType.PandaSpawnEgg; - mappings[1149] = ItemType.PolarBearSpawnEgg; - mappings[1150] = ItemType.RabbitSpawnEgg; - mappings[1151] = ItemType.AxolotlSpawnEgg; - mappings[1152] = ItemType.CodSpawnEgg; - mappings[1153] = ItemType.DolphinSpawnEgg; - mappings[1154] = ItemType.FrogSpawnEgg; - mappings[1155] = ItemType.GlowSquidSpawnEgg; - mappings[1156] = ItemType.NautilusSpawnEgg; - mappings[1157] = ItemType.PufferfishSpawnEgg; - mappings[1158] = ItemType.SalmonSpawnEgg; - mappings[1159] = ItemType.SquidSpawnEgg; - mappings[1160] = ItemType.TadpoleSpawnEgg; - mappings[1161] = ItemType.TropicalFishSpawnEgg; - mappings[1162] = ItemType.TurtleSpawnEgg; - mappings[1163] = ItemType.AllaySpawnEgg; - mappings[1164] = ItemType.MooshroomSpawnEgg; - mappings[1165] = ItemType.SnifferSpawnEgg; - mappings[1166] = ItemType.CopperGolemSpawnEgg; - mappings[1167] = ItemType.IronGolemSpawnEgg; - mappings[1168] = ItemType.SnowGolemSpawnEgg; - mappings[1169] = ItemType.TraderLlamaSpawnEgg; - mappings[1170] = ItemType.VillagerSpawnEgg; - mappings[1171] = ItemType.WanderingTraderSpawnEgg; - mappings[1172] = ItemType.BoggedSpawnEgg; - mappings[1173] = ItemType.CamelHuskSpawnEgg; - mappings[1174] = ItemType.DrownedSpawnEgg; - mappings[1175] = ItemType.HuskSpawnEgg; - mappings[1176] = ItemType.ParchedSpawnEgg; - mappings[1177] = ItemType.SkeletonSpawnEgg; - mappings[1178] = ItemType.SkeletonHorseSpawnEgg; - mappings[1179] = ItemType.StraySpawnEgg; - mappings[1180] = ItemType.WitherSpawnEgg; - mappings[1181] = ItemType.WitherSkeletonSpawnEgg; - mappings[1182] = ItemType.ZombieSpawnEgg; - mappings[1183] = ItemType.ZombieHorseSpawnEgg; - mappings[1184] = ItemType.ZombieNautilusSpawnEgg; - mappings[1185] = ItemType.ZombieVillagerSpawnEgg; - mappings[1186] = ItemType.CaveSpiderSpawnEgg; - mappings[1187] = ItemType.SpiderSpawnEgg; - mappings[1188] = ItemType.BreezeSpawnEgg; - mappings[1189] = ItemType.CreakingSpawnEgg; - mappings[1190] = ItemType.CreeperSpawnEgg; - mappings[1191] = ItemType.ElderGuardianSpawnEgg; - mappings[1192] = ItemType.GuardianSpawnEgg; - mappings[1193] = ItemType.PhantomSpawnEgg; - mappings[1194] = ItemType.SilverfishSpawnEgg; - mappings[1195] = ItemType.SlimeSpawnEgg; - mappings[1196] = ItemType.WardenSpawnEgg; - mappings[1197] = ItemType.WitchSpawnEgg; - mappings[1198] = ItemType.EvokerSpawnEgg; - mappings[1199] = ItemType.PillagerSpawnEgg; - mappings[1200] = ItemType.RavagerSpawnEgg; - mappings[1201] = ItemType.VindicatorSpawnEgg; - mappings[1202] = ItemType.VexSpawnEgg; - mappings[1203] = ItemType.BlazeSpawnEgg; - mappings[1204] = ItemType.GhastSpawnEgg; - mappings[1205] = ItemType.HappyGhastSpawnEgg; - mappings[1206] = ItemType.HoglinSpawnEgg; - mappings[1207] = ItemType.MagmaCubeSpawnEgg; - mappings[1208] = ItemType.PiglinSpawnEgg; - mappings[1209] = ItemType.PiglinBruteSpawnEgg; - mappings[1210] = ItemType.StriderSpawnEgg; - mappings[1211] = ItemType.ZoglinSpawnEgg; - mappings[1212] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[1213] = ItemType.EnderDragonSpawnEgg; - mappings[1214] = ItemType.EndermanSpawnEgg; - mappings[1215] = ItemType.EndermiteSpawnEgg; - mappings[1216] = ItemType.ShulkerSpawnEgg; - mappings[1217] = ItemType.ExperienceBottle; - mappings[1218] = ItemType.FireCharge; - mappings[1219] = ItemType.WindCharge; - mappings[1220] = ItemType.WritableBook; - mappings[1221] = ItemType.WrittenBook; - mappings[1222] = ItemType.BreezeRod; - mappings[1223] = ItemType.Mace; - mappings[1224] = ItemType.ItemFrame; - mappings[1225] = ItemType.GlowItemFrame; - mappings[1226] = ItemType.FlowerPot; - mappings[1227] = ItemType.Carrot; - mappings[1228] = ItemType.Potato; - mappings[1229] = ItemType.BakedPotato; - mappings[1230] = ItemType.PoisonousPotato; - mappings[1231] = ItemType.Map; - mappings[1232] = ItemType.GoldenCarrot; - mappings[1233] = ItemType.SkeletonSkull; - mappings[1234] = ItemType.WitherSkeletonSkull; - mappings[1235] = ItemType.PlayerHead; - mappings[1236] = ItemType.ZombieHead; - mappings[1237] = ItemType.CreeperHead; - mappings[1238] = ItemType.DragonHead; - mappings[1239] = ItemType.PiglinHead; - mappings[1240] = ItemType.NetherStar; - mappings[1241] = ItemType.PumpkinPie; - mappings[1242] = ItemType.FireworkRocket; - mappings[1243] = ItemType.FireworkStar; - mappings[1244] = ItemType.EnchantedBook; - mappings[1245] = ItemType.NetherBrick; - mappings[1246] = ItemType.ResinBrick; - mappings[1247] = ItemType.PrismarineShard; - mappings[1248] = ItemType.PrismarineCrystals; - mappings[1249] = ItemType.Rabbit; - mappings[1250] = ItemType.CookedRabbit; - mappings[1251] = ItemType.RabbitStew; - mappings[1252] = ItemType.RabbitFoot; - mappings[1253] = ItemType.RabbitHide; - mappings[1254] = ItemType.ArmorStand; - mappings[1255] = ItemType.CopperHorseArmor; - mappings[1256] = ItemType.IronHorseArmor; - mappings[1257] = ItemType.GoldenHorseArmor; - mappings[1258] = ItemType.DiamondHorseArmor; - mappings[1259] = ItemType.NetheriteHorseArmor; - mappings[1260] = ItemType.LeatherHorseArmor; - mappings[1261] = ItemType.Lead; - mappings[1262] = ItemType.NameTag; - mappings[1263] = ItemType.CommandBlockMinecart; - mappings[1264] = ItemType.Mutton; - mappings[1265] = ItemType.CookedMutton; - mappings[1266] = ItemType.WhiteBanner; - mappings[1267] = ItemType.OrangeBanner; - mappings[1268] = ItemType.MagentaBanner; - mappings[1269] = ItemType.LightBlueBanner; - mappings[1270] = ItemType.YellowBanner; - mappings[1271] = ItemType.LimeBanner; - mappings[1272] = ItemType.PinkBanner; - mappings[1273] = ItemType.GrayBanner; - mappings[1274] = ItemType.LightGrayBanner; - mappings[1275] = ItemType.CyanBanner; - mappings[1276] = ItemType.PurpleBanner; - mappings[1277] = ItemType.BlueBanner; - mappings[1278] = ItemType.BrownBanner; - mappings[1279] = ItemType.GreenBanner; - mappings[1280] = ItemType.RedBanner; - mappings[1281] = ItemType.BlackBanner; - mappings[1282] = ItemType.EndCrystal; - mappings[1283] = ItemType.ChorusFruit; - mappings[1284] = ItemType.PoppedChorusFruit; - mappings[1285] = ItemType.TorchflowerSeeds; - mappings[1286] = ItemType.PitcherPod; - mappings[1287] = ItemType.Beetroot; - mappings[1288] = ItemType.BeetrootSeeds; - mappings[1289] = ItemType.BeetrootSoup; - mappings[1290] = ItemType.DragonBreath; - mappings[1291] = ItemType.SplashPotion; - mappings[1292] = ItemType.SpectralArrow; - mappings[1293] = ItemType.TippedArrow; - mappings[1294] = ItemType.LingeringPotion; - mappings[1295] = ItemType.Shield; - mappings[1296] = ItemType.WoodenSpear; - mappings[1297] = ItemType.StoneSpear; - mappings[1298] = ItemType.CopperSpear; - mappings[1299] = ItemType.IronSpear; - mappings[1300] = ItemType.GoldenSpear; - mappings[1301] = ItemType.DiamondSpear; - mappings[1302] = ItemType.NetheriteSpear; - mappings[1303] = ItemType.TotemOfUndying; - mappings[1304] = ItemType.ShulkerShell; - mappings[1305] = ItemType.IronNugget; - mappings[1306] = ItemType.CopperNugget; - mappings[1307] = ItemType.KnowledgeBook; - mappings[1308] = ItemType.DebugStick; - mappings[1309] = ItemType.MusicDisc13; - mappings[1310] = ItemType.MusicDiscCat; - mappings[1311] = ItemType.MusicDiscBlocks; - mappings[1312] = ItemType.MusicDiscChirp; - mappings[1313] = ItemType.MusicDiscCreator; - mappings[1314] = ItemType.MusicDiscCreatorMusicBox; - mappings[1315] = ItemType.MusicDiscFar; - mappings[1316] = ItemType.MusicDiscLavaChicken; - mappings[1317] = ItemType.MusicDiscMall; - mappings[1318] = ItemType.MusicDiscMellohi; - mappings[1319] = ItemType.MusicDiscStal; - mappings[1320] = ItemType.MusicDiscStrad; - mappings[1321] = ItemType.MusicDiscWard; - mappings[1322] = ItemType.MusicDisc11; - mappings[1323] = ItemType.MusicDiscWait; - mappings[1324] = ItemType.MusicDiscOtherside; - mappings[1325] = ItemType.MusicDiscRelic; - mappings[1326] = ItemType.MusicDisc5; - mappings[1327] = ItemType.MusicDiscPigstep; - mappings[1328] = ItemType.MusicDiscPrecipice; - mappings[1329] = ItemType.MusicDiscTears; - mappings[1330] = ItemType.DiscFragment5; - mappings[1331] = ItemType.Trident; - mappings[1332] = ItemType.NautilusShell; - mappings[1333] = ItemType.IronNautilusArmor; - mappings[1334] = ItemType.GoldenNautilusArmor; - mappings[1335] = ItemType.DiamondNautilusArmor; - mappings[1336] = ItemType.NetheriteNautilusArmor; - mappings[1337] = ItemType.CopperNautilusArmor; - mappings[1338] = ItemType.HeartOfTheSea; - mappings[1339] = ItemType.Crossbow; - mappings[1340] = ItemType.SuspiciousStew; - mappings[1341] = ItemType.Loom; - mappings[1342] = ItemType.FlowerBannerPattern; - mappings[1343] = ItemType.CreeperBannerPattern; - mappings[1344] = ItemType.SkullBannerPattern; - mappings[1345] = ItemType.MojangBannerPattern; - mappings[1346] = ItemType.GlobeBannerPattern; - mappings[1347] = ItemType.PiglinBannerPattern; - mappings[1348] = ItemType.FlowBannerPattern; - mappings[1349] = ItemType.GusterBannerPattern; - mappings[1350] = ItemType.FieldMasonedBannerPattern; - mappings[1351] = ItemType.BordureIndentedBannerPattern; - mappings[1352] = ItemType.GoatHorn; - mappings[1353] = ItemType.Composter; - mappings[1354] = ItemType.Barrel; - mappings[1355] = ItemType.Smoker; - mappings[1356] = ItemType.BlastFurnace; - mappings[1357] = ItemType.CartographyTable; - mappings[1358] = ItemType.FletchingTable; - mappings[1359] = ItemType.Grindstone; - mappings[1360] = ItemType.SmithingTable; - mappings[1361] = ItemType.Stonecutter; - mappings[1362] = ItemType.Bell; - mappings[1363] = ItemType.Lantern; - mappings[1364] = ItemType.SoulLantern; - mappings[1365] = ItemType.CopperLantern; - mappings[1366] = ItemType.ExposedCopperLantern; - mappings[1367] = ItemType.WeatheredCopperLantern; - mappings[1368] = ItemType.OxidizedCopperLantern; - mappings[1369] = ItemType.WaxedCopperLantern; - mappings[1370] = ItemType.WaxedExposedCopperLantern; - mappings[1371] = ItemType.WaxedWeatheredCopperLantern; - mappings[1372] = ItemType.WaxedOxidizedCopperLantern; - mappings[1373] = ItemType.SweetBerries; - mappings[1374] = ItemType.GlowBerries; - mappings[1375] = ItemType.Campfire; - mappings[1376] = ItemType.SoulCampfire; - mappings[1377] = ItemType.Shroomlight; - mappings[1378] = ItemType.Honeycomb; - mappings[1379] = ItemType.BeeNest; - mappings[1380] = ItemType.Beehive; - mappings[1381] = ItemType.HoneyBottle; - mappings[1382] = ItemType.HoneycombBlock; - mappings[1383] = ItemType.Lodestone; - mappings[1384] = ItemType.CryingObsidian; - mappings[1385] = ItemType.Blackstone; - mappings[1386] = ItemType.BlackstoneSlab; - mappings[1387] = ItemType.BlackstoneStairs; - mappings[1388] = ItemType.GildedBlackstone; - mappings[1389] = ItemType.PolishedBlackstone; - mappings[1390] = ItemType.PolishedBlackstoneSlab; - mappings[1391] = ItemType.PolishedBlackstoneStairs; - mappings[1392] = ItemType.ChiseledPolishedBlackstone; - mappings[1393] = ItemType.PolishedBlackstoneBricks; - mappings[1394] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1395] = ItemType.PolishedBlackstoneBrickStairs; - mappings[1396] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[1397] = ItemType.RespawnAnchor; - mappings[1398] = ItemType.Candle; - mappings[1399] = ItemType.WhiteCandle; - mappings[1400] = ItemType.OrangeCandle; - mappings[1401] = ItemType.MagentaCandle; - mappings[1402] = ItemType.LightBlueCandle; - mappings[1403] = ItemType.YellowCandle; - mappings[1404] = ItemType.LimeCandle; - mappings[1405] = ItemType.PinkCandle; - mappings[1406] = ItemType.GrayCandle; - mappings[1407] = ItemType.LightGrayCandle; - mappings[1408] = ItemType.CyanCandle; - mappings[1409] = ItemType.PurpleCandle; - mappings[1410] = ItemType.BlueCandle; - mappings[1411] = ItemType.BrownCandle; - mappings[1412] = ItemType.GreenCandle; - mappings[1413] = ItemType.RedCandle; - mappings[1414] = ItemType.BlackCandle; - mappings[1415] = ItemType.SmallAmethystBud; - mappings[1416] = ItemType.MediumAmethystBud; - mappings[1417] = ItemType.LargeAmethystBud; - mappings[1418] = ItemType.AmethystCluster; - mappings[1419] = ItemType.PointedDripstone; - mappings[1420] = ItemType.OchreFroglight; - mappings[1421] = ItemType.VerdantFroglight; - mappings[1422] = ItemType.PearlescentFroglight; - mappings[1423] = ItemType.Frogspawn; - mappings[1424] = ItemType.EchoShard; - mappings[1425] = ItemType.Brush; - mappings[1426] = ItemType.NetheriteUpgradeSmithingTemplate; - mappings[1427] = ItemType.SentryArmorTrimSmithingTemplate; - mappings[1428] = ItemType.DuneArmorTrimSmithingTemplate; - mappings[1429] = ItemType.CoastArmorTrimSmithingTemplate; - mappings[1430] = ItemType.WildArmorTrimSmithingTemplate; - mappings[1431] = ItemType.WardArmorTrimSmithingTemplate; - mappings[1432] = ItemType.EyeArmorTrimSmithingTemplate; - mappings[1433] = ItemType.VexArmorTrimSmithingTemplate; - mappings[1434] = ItemType.TideArmorTrimSmithingTemplate; - mappings[1435] = ItemType.SnoutArmorTrimSmithingTemplate; - mappings[1436] = ItemType.RibArmorTrimSmithingTemplate; - mappings[1437] = ItemType.SpireArmorTrimSmithingTemplate; - mappings[1438] = ItemType.WayfinderArmorTrimSmithingTemplate; - mappings[1439] = ItemType.ShaperArmorTrimSmithingTemplate; - mappings[1440] = ItemType.SilenceArmorTrimSmithingTemplate; - mappings[1441] = ItemType.RaiserArmorTrimSmithingTemplate; - mappings[1442] = ItemType.HostArmorTrimSmithingTemplate; - mappings[1443] = ItemType.FlowArmorTrimSmithingTemplate; - mappings[1444] = ItemType.BoltArmorTrimSmithingTemplate; - mappings[1445] = ItemType.AnglerPotterySherd; - mappings[1446] = ItemType.ArcherPotterySherd; - mappings[1447] = ItemType.ArmsUpPotterySherd; - mappings[1448] = ItemType.BladePotterySherd; - mappings[1449] = ItemType.BrewerPotterySherd; - mappings[1450] = ItemType.BurnPotterySherd; - mappings[1451] = ItemType.DangerPotterySherd; - mappings[1452] = ItemType.ExplorerPotterySherd; - mappings[1453] = ItemType.FlowPotterySherd; - mappings[1454] = ItemType.FriendPotterySherd; - mappings[1455] = ItemType.GusterPotterySherd; - mappings[1456] = ItemType.HeartPotterySherd; - mappings[1457] = ItemType.HeartbreakPotterySherd; - mappings[1458] = ItemType.HowlPotterySherd; - mappings[1459] = ItemType.MinerPotterySherd; - mappings[1460] = ItemType.MournerPotterySherd; - mappings[1461] = ItemType.PlentyPotterySherd; - mappings[1462] = ItemType.PrizePotterySherd; - mappings[1463] = ItemType.ScrapePotterySherd; - mappings[1464] = ItemType.SheafPotterySherd; - mappings[1465] = ItemType.ShelterPotterySherd; - mappings[1466] = ItemType.SkullPotterySherd; - mappings[1467] = ItemType.SnortPotterySherd; - mappings[1468] = ItemType.CopperGrate; - mappings[1469] = ItemType.ExposedCopperGrate; - mappings[1470] = ItemType.WeatheredCopperGrate; - mappings[1471] = ItemType.OxidizedCopperGrate; - mappings[1472] = ItemType.WaxedCopperGrate; - mappings[1473] = ItemType.WaxedExposedCopperGrate; - mappings[1474] = ItemType.WaxedWeatheredCopperGrate; - mappings[1475] = ItemType.WaxedOxidizedCopperGrate; - mappings[1476] = ItemType.CopperBulb; - mappings[1477] = ItemType.ExposedCopperBulb; - mappings[1478] = ItemType.WeatheredCopperBulb; - mappings[1479] = ItemType.OxidizedCopperBulb; - mappings[1480] = ItemType.WaxedCopperBulb; - mappings[1481] = ItemType.WaxedExposedCopperBulb; - mappings[1482] = ItemType.WaxedWeatheredCopperBulb; - mappings[1483] = ItemType.WaxedOxidizedCopperBulb; - mappings[1484] = ItemType.CopperChest; - mappings[1485] = ItemType.ExposedCopperChest; - mappings[1486] = ItemType.WeatheredCopperChest; - mappings[1487] = ItemType.OxidizedCopperChest; - mappings[1488] = ItemType.WaxedCopperChest; - mappings[1489] = ItemType.WaxedExposedCopperChest; - mappings[1490] = ItemType.WaxedWeatheredCopperChest; - mappings[1491] = ItemType.WaxedOxidizedCopperChest; - mappings[1492] = ItemType.CopperGolemStatue; - mappings[1493] = ItemType.ExposedCopperGolemStatue; - mappings[1494] = ItemType.WeatheredCopperGolemStatue; - mappings[1495] = ItemType.OxidizedCopperGolemStatue; - mappings[1496] = ItemType.WaxedCopperGolemStatue; - mappings[1497] = ItemType.WaxedExposedCopperGolemStatue; - mappings[1498] = ItemType.WaxedWeatheredCopperGolemStatue; - mappings[1499] = ItemType.WaxedOxidizedCopperGolemStatue; - mappings[1500] = ItemType.TrialSpawner; - mappings[1501] = ItemType.TrialKey; - mappings[1502] = ItemType.OminousTrialKey; - mappings[1503] = ItemType.Vault; - mappings[1504] = ItemType.OminousBottle; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1212.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette1212.cs deleted file mode 100644 index 42edc7fd36..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1212.cs +++ /dev/null @@ -1,1393 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette1212 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette1212() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.Deepslate; - mappings[9] = ItemType.CobbledDeepslate; - mappings[10] = ItemType.PolishedDeepslate; - mappings[11] = ItemType.Calcite; - mappings[12] = ItemType.Tuff; - mappings[13] = ItemType.TuffSlab; - mappings[14] = ItemType.TuffStairs; - mappings[15] = ItemType.TuffWall; - mappings[16] = ItemType.ChiseledTuff; - mappings[17] = ItemType.PolishedTuff; - mappings[18] = ItemType.PolishedTuffSlab; - mappings[19] = ItemType.PolishedTuffStairs; - mappings[20] = ItemType.PolishedTuffWall; - mappings[21] = ItemType.TuffBricks; - mappings[22] = ItemType.TuffBrickSlab; - mappings[23] = ItemType.TuffBrickStairs; - mappings[24] = ItemType.TuffBrickWall; - mappings[25] = ItemType.ChiseledTuffBricks; - mappings[26] = ItemType.DripstoneBlock; - mappings[27] = ItemType.GrassBlock; - mappings[28] = ItemType.Dirt; - mappings[29] = ItemType.CoarseDirt; - mappings[30] = ItemType.Podzol; - mappings[31] = ItemType.RootedDirt; - mappings[32] = ItemType.Mud; - mappings[33] = ItemType.CrimsonNylium; - mappings[34] = ItemType.WarpedNylium; - mappings[35] = ItemType.Cobblestone; - mappings[36] = ItemType.OakPlanks; - mappings[37] = ItemType.SprucePlanks; - mappings[38] = ItemType.BirchPlanks; - mappings[39] = ItemType.JunglePlanks; - mappings[40] = ItemType.AcaciaPlanks; - mappings[41] = ItemType.CherryPlanks; - mappings[42] = ItemType.DarkOakPlanks; - mappings[43] = ItemType.PaleOakPlanks; - mappings[44] = ItemType.MangrovePlanks; - mappings[45] = ItemType.BambooPlanks; - mappings[46] = ItemType.CrimsonPlanks; - mappings[47] = ItemType.WarpedPlanks; - mappings[48] = ItemType.BambooMosaic; - mappings[49] = ItemType.OakSapling; - mappings[50] = ItemType.SpruceSapling; - mappings[51] = ItemType.BirchSapling; - mappings[52] = ItemType.JungleSapling; - mappings[53] = ItemType.AcaciaSapling; - mappings[54] = ItemType.CherrySapling; - mappings[55] = ItemType.DarkOakSapling; - mappings[56] = ItemType.PaleOakSapling; - mappings[57] = ItemType.MangrovePropagule; - mappings[58] = ItemType.Bedrock; - mappings[59] = ItemType.Sand; - mappings[60] = ItemType.SuspiciousSand; - mappings[61] = ItemType.SuspiciousGravel; - mappings[62] = ItemType.RedSand; - mappings[63] = ItemType.Gravel; - mappings[64] = ItemType.CoalOre; - mappings[65] = ItemType.DeepslateCoalOre; - mappings[66] = ItemType.IronOre; - mappings[67] = ItemType.DeepslateIronOre; - mappings[68] = ItemType.CopperOre; - mappings[69] = ItemType.DeepslateCopperOre; - mappings[70] = ItemType.GoldOre; - mappings[71] = ItemType.DeepslateGoldOre; - mappings[72] = ItemType.RedstoneOre; - mappings[73] = ItemType.DeepslateRedstoneOre; - mappings[74] = ItemType.EmeraldOre; - mappings[75] = ItemType.DeepslateEmeraldOre; - mappings[76] = ItemType.LapisOre; - mappings[77] = ItemType.DeepslateLapisOre; - mappings[78] = ItemType.DiamondOre; - mappings[79] = ItemType.DeepslateDiamondOre; - mappings[80] = ItemType.NetherGoldOre; - mappings[81] = ItemType.NetherQuartzOre; - mappings[82] = ItemType.AncientDebris; - mappings[83] = ItemType.CoalBlock; - mappings[84] = ItemType.RawIronBlock; - mappings[85] = ItemType.RawCopperBlock; - mappings[86] = ItemType.RawGoldBlock; - mappings[87] = ItemType.HeavyCore; - mappings[88] = ItemType.AmethystBlock; - mappings[89] = ItemType.BuddingAmethyst; - mappings[90] = ItemType.IronBlock; - mappings[91] = ItemType.CopperBlock; - mappings[92] = ItemType.GoldBlock; - mappings[93] = ItemType.DiamondBlock; - mappings[94] = ItemType.NetheriteBlock; - mappings[95] = ItemType.ExposedCopper; - mappings[96] = ItemType.WeatheredCopper; - mappings[97] = ItemType.OxidizedCopper; - mappings[98] = ItemType.ChiseledCopper; - mappings[99] = ItemType.ExposedChiseledCopper; - mappings[100] = ItemType.WeatheredChiseledCopper; - mappings[101] = ItemType.OxidizedChiseledCopper; - mappings[102] = ItemType.CutCopper; - mappings[103] = ItemType.ExposedCutCopper; - mappings[104] = ItemType.WeatheredCutCopper; - mappings[105] = ItemType.OxidizedCutCopper; - mappings[106] = ItemType.CutCopperStairs; - mappings[107] = ItemType.ExposedCutCopperStairs; - mappings[108] = ItemType.WeatheredCutCopperStairs; - mappings[109] = ItemType.OxidizedCutCopperStairs; - mappings[110] = ItemType.CutCopperSlab; - mappings[111] = ItemType.ExposedCutCopperSlab; - mappings[112] = ItemType.WeatheredCutCopperSlab; - mappings[113] = ItemType.OxidizedCutCopperSlab; - mappings[114] = ItemType.WaxedCopperBlock; - mappings[115] = ItemType.WaxedExposedCopper; - mappings[116] = ItemType.WaxedWeatheredCopper; - mappings[117] = ItemType.WaxedOxidizedCopper; - mappings[118] = ItemType.WaxedChiseledCopper; - mappings[119] = ItemType.WaxedExposedChiseledCopper; - mappings[120] = ItemType.WaxedWeatheredChiseledCopper; - mappings[121] = ItemType.WaxedOxidizedChiseledCopper; - mappings[122] = ItemType.WaxedCutCopper; - mappings[123] = ItemType.WaxedExposedCutCopper; - mappings[124] = ItemType.WaxedWeatheredCutCopper; - mappings[125] = ItemType.WaxedOxidizedCutCopper; - mappings[126] = ItemType.WaxedCutCopperStairs; - mappings[127] = ItemType.WaxedExposedCutCopperStairs; - mappings[128] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[129] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[130] = ItemType.WaxedCutCopperSlab; - mappings[131] = ItemType.WaxedExposedCutCopperSlab; - mappings[132] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[133] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[134] = ItemType.OakLog; - mappings[135] = ItemType.SpruceLog; - mappings[136] = ItemType.BirchLog; - mappings[137] = ItemType.JungleLog; - mappings[138] = ItemType.AcaciaLog; - mappings[139] = ItemType.CherryLog; - mappings[140] = ItemType.PaleOakLog; - mappings[141] = ItemType.DarkOakLog; - mappings[142] = ItemType.MangroveLog; - mappings[143] = ItemType.MangroveRoots; - mappings[144] = ItemType.MuddyMangroveRoots; - mappings[145] = ItemType.CrimsonStem; - mappings[146] = ItemType.WarpedStem; - mappings[147] = ItemType.BambooBlock; - mappings[148] = ItemType.StrippedOakLog; - mappings[149] = ItemType.StrippedSpruceLog; - mappings[150] = ItemType.StrippedBirchLog; - mappings[151] = ItemType.StrippedJungleLog; - mappings[152] = ItemType.StrippedAcaciaLog; - mappings[153] = ItemType.StrippedCherryLog; - mappings[154] = ItemType.StrippedDarkOakLog; - mappings[155] = ItemType.StrippedPaleOakLog; - mappings[156] = ItemType.StrippedMangroveLog; - mappings[157] = ItemType.StrippedCrimsonStem; - mappings[158] = ItemType.StrippedWarpedStem; - mappings[159] = ItemType.StrippedOakWood; - mappings[160] = ItemType.StrippedSpruceWood; - mappings[161] = ItemType.StrippedBirchWood; - mappings[162] = ItemType.StrippedJungleWood; - mappings[163] = ItemType.StrippedAcaciaWood; - mappings[164] = ItemType.StrippedCherryWood; - mappings[165] = ItemType.StrippedDarkOakWood; - mappings[166] = ItemType.StrippedPaleOakWood; - mappings[167] = ItemType.StrippedMangroveWood; - mappings[168] = ItemType.StrippedCrimsonHyphae; - mappings[169] = ItemType.StrippedWarpedHyphae; - mappings[170] = ItemType.StrippedBambooBlock; - mappings[171] = ItemType.OakWood; - mappings[172] = ItemType.SpruceWood; - mappings[173] = ItemType.BirchWood; - mappings[174] = ItemType.JungleWood; - mappings[175] = ItemType.AcaciaWood; - mappings[176] = ItemType.CherryWood; - mappings[177] = ItemType.PaleOakWood; - mappings[178] = ItemType.DarkOakWood; - mappings[179] = ItemType.MangroveWood; - mappings[180] = ItemType.CrimsonHyphae; - mappings[181] = ItemType.WarpedHyphae; - mappings[182] = ItemType.OakLeaves; - mappings[183] = ItemType.SpruceLeaves; - mappings[184] = ItemType.BirchLeaves; - mappings[185] = ItemType.JungleLeaves; - mappings[186] = ItemType.AcaciaLeaves; - mappings[187] = ItemType.CherryLeaves; - mappings[188] = ItemType.DarkOakLeaves; - mappings[189] = ItemType.PaleOakLeaves; - mappings[190] = ItemType.MangroveLeaves; - mappings[191] = ItemType.AzaleaLeaves; - mappings[192] = ItemType.FloweringAzaleaLeaves; - mappings[193] = ItemType.Sponge; - mappings[194] = ItemType.WetSponge; - mappings[195] = ItemType.Glass; - mappings[196] = ItemType.TintedGlass; - mappings[197] = ItemType.LapisBlock; - mappings[198] = ItemType.Sandstone; - mappings[199] = ItemType.ChiseledSandstone; - mappings[200] = ItemType.CutSandstone; - mappings[201] = ItemType.Cobweb; - mappings[202] = ItemType.ShortGrass; - mappings[203] = ItemType.Fern; - mappings[204] = ItemType.Azalea; - mappings[205] = ItemType.FloweringAzalea; - mappings[206] = ItemType.DeadBush; - mappings[207] = ItemType.Seagrass; - mappings[208] = ItemType.SeaPickle; - mappings[209] = ItemType.WhiteWool; - mappings[210] = ItemType.OrangeWool; - mappings[211] = ItemType.MagentaWool; - mappings[212] = ItemType.LightBlueWool; - mappings[213] = ItemType.YellowWool; - mappings[214] = ItemType.LimeWool; - mappings[215] = ItemType.PinkWool; - mappings[216] = ItemType.GrayWool; - mappings[217] = ItemType.LightGrayWool; - mappings[218] = ItemType.CyanWool; - mappings[219] = ItemType.PurpleWool; - mappings[220] = ItemType.BlueWool; - mappings[221] = ItemType.BrownWool; - mappings[222] = ItemType.GreenWool; - mappings[223] = ItemType.RedWool; - mappings[224] = ItemType.BlackWool; - mappings[225] = ItemType.Dandelion; - mappings[226] = ItemType.Poppy; - mappings[227] = ItemType.BlueOrchid; - mappings[228] = ItemType.Allium; - mappings[229] = ItemType.AzureBluet; - mappings[230] = ItemType.RedTulip; - mappings[231] = ItemType.OrangeTulip; - mappings[232] = ItemType.WhiteTulip; - mappings[233] = ItemType.PinkTulip; - mappings[234] = ItemType.OxeyeDaisy; - mappings[235] = ItemType.Cornflower; - mappings[236] = ItemType.LilyOfTheValley; - mappings[237] = ItemType.WitherRose; - mappings[238] = ItemType.Torchflower; - mappings[239] = ItemType.PitcherPlant; - mappings[240] = ItemType.SporeBlossom; - mappings[241] = ItemType.BrownMushroom; - mappings[242] = ItemType.RedMushroom; - mappings[243] = ItemType.CrimsonFungus; - mappings[244] = ItemType.WarpedFungus; - mappings[245] = ItemType.CrimsonRoots; - mappings[246] = ItemType.WarpedRoots; - mappings[247] = ItemType.NetherSprouts; - mappings[248] = ItemType.WeepingVines; - mappings[249] = ItemType.TwistingVines; - mappings[250] = ItemType.SugarCane; - mappings[251] = ItemType.Kelp; - mappings[252] = ItemType.PinkPetals; - mappings[253] = ItemType.MossCarpet; - mappings[254] = ItemType.MossBlock; - mappings[255] = ItemType.PaleMossCarpet; - mappings[256] = ItemType.PaleHangingMoss; - mappings[257] = ItemType.PaleMossBlock; - mappings[258] = ItemType.HangingRoots; - mappings[259] = ItemType.BigDripleaf; - mappings[260] = ItemType.SmallDripleaf; - mappings[261] = ItemType.Bamboo; - mappings[262] = ItemType.OakSlab; - mappings[263] = ItemType.SpruceSlab; - mappings[264] = ItemType.BirchSlab; - mappings[265] = ItemType.JungleSlab; - mappings[266] = ItemType.AcaciaSlab; - mappings[267] = ItemType.CherrySlab; - mappings[268] = ItemType.DarkOakSlab; - mappings[269] = ItemType.PaleOakSlab; - mappings[270] = ItemType.MangroveSlab; - mappings[271] = ItemType.BambooSlab; - mappings[272] = ItemType.BambooMosaicSlab; - mappings[273] = ItemType.CrimsonSlab; - mappings[274] = ItemType.WarpedSlab; - mappings[275] = ItemType.StoneSlab; - mappings[276] = ItemType.SmoothStoneSlab; - mappings[277] = ItemType.SandstoneSlab; - mappings[278] = ItemType.CutSandstoneSlab; - mappings[279] = ItemType.PetrifiedOakSlab; - mappings[280] = ItemType.CobblestoneSlab; - mappings[281] = ItemType.BrickSlab; - mappings[282] = ItemType.StoneBrickSlab; - mappings[283] = ItemType.MudBrickSlab; - mappings[284] = ItemType.NetherBrickSlab; - mappings[285] = ItemType.QuartzSlab; - mappings[286] = ItemType.RedSandstoneSlab; - mappings[287] = ItemType.CutRedSandstoneSlab; - mappings[288] = ItemType.PurpurSlab; - mappings[289] = ItemType.PrismarineSlab; - mappings[290] = ItemType.PrismarineBrickSlab; - mappings[291] = ItemType.DarkPrismarineSlab; - mappings[292] = ItemType.SmoothQuartz; - mappings[293] = ItemType.SmoothRedSandstone; - mappings[294] = ItemType.SmoothSandstone; - mappings[295] = ItemType.SmoothStone; - mappings[296] = ItemType.Bricks; - mappings[297] = ItemType.Bookshelf; - mappings[298] = ItemType.ChiseledBookshelf; - mappings[299] = ItemType.DecoratedPot; - mappings[300] = ItemType.MossyCobblestone; - mappings[301] = ItemType.Obsidian; - mappings[302] = ItemType.Torch; - mappings[303] = ItemType.EndRod; - mappings[304] = ItemType.ChorusPlant; - mappings[305] = ItemType.ChorusFlower; - mappings[306] = ItemType.PurpurBlock; - mappings[307] = ItemType.PurpurPillar; - mappings[308] = ItemType.PurpurStairs; - mappings[309] = ItemType.Spawner; - mappings[310] = ItemType.CreakingHeart; - mappings[311] = ItemType.Chest; - mappings[312] = ItemType.CraftingTable; - mappings[313] = ItemType.Farmland; - mappings[314] = ItemType.Furnace; - mappings[315] = ItemType.Ladder; - mappings[316] = ItemType.CobblestoneStairs; - mappings[317] = ItemType.Snow; - mappings[318] = ItemType.Ice; - mappings[319] = ItemType.SnowBlock; - mappings[320] = ItemType.Cactus; - mappings[321] = ItemType.Clay; - mappings[322] = ItemType.Jukebox; - mappings[323] = ItemType.OakFence; - mappings[324] = ItemType.SpruceFence; - mappings[325] = ItemType.BirchFence; - mappings[326] = ItemType.JungleFence; - mappings[327] = ItemType.AcaciaFence; - mappings[328] = ItemType.CherryFence; - mappings[329] = ItemType.DarkOakFence; - mappings[330] = ItemType.PaleOakFence; - mappings[331] = ItemType.MangroveFence; - mappings[332] = ItemType.BambooFence; - mappings[333] = ItemType.CrimsonFence; - mappings[334] = ItemType.WarpedFence; - mappings[335] = ItemType.Pumpkin; - mappings[336] = ItemType.CarvedPumpkin; - mappings[337] = ItemType.JackOLantern; - mappings[338] = ItemType.Netherrack; - mappings[339] = ItemType.SoulSand; - mappings[340] = ItemType.SoulSoil; - mappings[341] = ItemType.Basalt; - mappings[342] = ItemType.PolishedBasalt; - mappings[343] = ItemType.SmoothBasalt; - mappings[344] = ItemType.SoulTorch; - mappings[345] = ItemType.Glowstone; - mappings[346] = ItemType.InfestedStone; - mappings[347] = ItemType.InfestedCobblestone; - mappings[348] = ItemType.InfestedStoneBricks; - mappings[349] = ItemType.InfestedMossyStoneBricks; - mappings[350] = ItemType.InfestedCrackedStoneBricks; - mappings[351] = ItemType.InfestedChiseledStoneBricks; - mappings[352] = ItemType.InfestedDeepslate; - mappings[353] = ItemType.StoneBricks; - mappings[354] = ItemType.MossyStoneBricks; - mappings[355] = ItemType.CrackedStoneBricks; - mappings[356] = ItemType.ChiseledStoneBricks; - mappings[357] = ItemType.PackedMud; - mappings[358] = ItemType.MudBricks; - mappings[359] = ItemType.DeepslateBricks; - mappings[360] = ItemType.CrackedDeepslateBricks; - mappings[361] = ItemType.DeepslateTiles; - mappings[362] = ItemType.CrackedDeepslateTiles; - mappings[363] = ItemType.ChiseledDeepslate; - mappings[364] = ItemType.ReinforcedDeepslate; - mappings[365] = ItemType.BrownMushroomBlock; - mappings[366] = ItemType.RedMushroomBlock; - mappings[367] = ItemType.MushroomStem; - mappings[368] = ItemType.IronBars; - mappings[369] = ItemType.Chain; - mappings[370] = ItemType.GlassPane; - mappings[371] = ItemType.Melon; - mappings[372] = ItemType.Vine; - mappings[373] = ItemType.GlowLichen; - mappings[374] = ItemType.BrickStairs; - mappings[375] = ItemType.StoneBrickStairs; - mappings[376] = ItemType.MudBrickStairs; - mappings[377] = ItemType.Mycelium; - mappings[378] = ItemType.LilyPad; - mappings[379] = ItemType.NetherBricks; - mappings[380] = ItemType.CrackedNetherBricks; - mappings[381] = ItemType.ChiseledNetherBricks; - mappings[382] = ItemType.NetherBrickFence; - mappings[383] = ItemType.NetherBrickStairs; - mappings[384] = ItemType.Sculk; - mappings[385] = ItemType.SculkVein; - mappings[386] = ItemType.SculkCatalyst; - mappings[387] = ItemType.SculkShrieker; - mappings[388] = ItemType.EnchantingTable; - mappings[389] = ItemType.EndPortalFrame; - mappings[390] = ItemType.EndStone; - mappings[391] = ItemType.EndStoneBricks; - mappings[392] = ItemType.DragonEgg; - mappings[393] = ItemType.SandstoneStairs; - mappings[394] = ItemType.EnderChest; - mappings[395] = ItemType.EmeraldBlock; - mappings[396] = ItemType.OakStairs; - mappings[397] = ItemType.SpruceStairs; - mappings[398] = ItemType.BirchStairs; - mappings[399] = ItemType.JungleStairs; - mappings[400] = ItemType.AcaciaStairs; - mappings[401] = ItemType.CherryStairs; - mappings[402] = ItemType.DarkOakStairs; - mappings[403] = ItemType.PaleOakStairs; - mappings[404] = ItemType.MangroveStairs; - mappings[405] = ItemType.BambooStairs; - mappings[406] = ItemType.BambooMosaicStairs; - mappings[407] = ItemType.CrimsonStairs; - mappings[408] = ItemType.WarpedStairs; - mappings[409] = ItemType.CommandBlock; - mappings[410] = ItemType.Beacon; - mappings[411] = ItemType.CobblestoneWall; - mappings[412] = ItemType.MossyCobblestoneWall; - mappings[413] = ItemType.BrickWall; - mappings[414] = ItemType.PrismarineWall; - mappings[415] = ItemType.RedSandstoneWall; - mappings[416] = ItemType.MossyStoneBrickWall; - mappings[417] = ItemType.GraniteWall; - mappings[418] = ItemType.StoneBrickWall; - mappings[419] = ItemType.MudBrickWall; - mappings[420] = ItemType.NetherBrickWall; - mappings[421] = ItemType.AndesiteWall; - mappings[422] = ItemType.RedNetherBrickWall; - mappings[423] = ItemType.SandstoneWall; - mappings[424] = ItemType.EndStoneBrickWall; - mappings[425] = ItemType.DioriteWall; - mappings[426] = ItemType.BlackstoneWall; - mappings[427] = ItemType.PolishedBlackstoneWall; - mappings[428] = ItemType.PolishedBlackstoneBrickWall; - mappings[429] = ItemType.CobbledDeepslateWall; - mappings[430] = ItemType.PolishedDeepslateWall; - mappings[431] = ItemType.DeepslateBrickWall; - mappings[432] = ItemType.DeepslateTileWall; - mappings[433] = ItemType.Anvil; - mappings[434] = ItemType.ChippedAnvil; - mappings[435] = ItemType.DamagedAnvil; - mappings[436] = ItemType.ChiseledQuartzBlock; - mappings[437] = ItemType.QuartzBlock; - mappings[438] = ItemType.QuartzBricks; - mappings[439] = ItemType.QuartzPillar; - mappings[440] = ItemType.QuartzStairs; - mappings[441] = ItemType.WhiteTerracotta; - mappings[442] = ItemType.OrangeTerracotta; - mappings[443] = ItemType.MagentaTerracotta; - mappings[444] = ItemType.LightBlueTerracotta; - mappings[445] = ItemType.YellowTerracotta; - mappings[446] = ItemType.LimeTerracotta; - mappings[447] = ItemType.PinkTerracotta; - mappings[448] = ItemType.GrayTerracotta; - mappings[449] = ItemType.LightGrayTerracotta; - mappings[450] = ItemType.CyanTerracotta; - mappings[451] = ItemType.PurpleTerracotta; - mappings[452] = ItemType.BlueTerracotta; - mappings[453] = ItemType.BrownTerracotta; - mappings[454] = ItemType.GreenTerracotta; - mappings[455] = ItemType.RedTerracotta; - mappings[456] = ItemType.BlackTerracotta; - mappings[457] = ItemType.Barrier; - mappings[458] = ItemType.Light; - mappings[459] = ItemType.HayBlock; - mappings[460] = ItemType.WhiteCarpet; - mappings[461] = ItemType.OrangeCarpet; - mappings[462] = ItemType.MagentaCarpet; - mappings[463] = ItemType.LightBlueCarpet; - mappings[464] = ItemType.YellowCarpet; - mappings[465] = ItemType.LimeCarpet; - mappings[466] = ItemType.PinkCarpet; - mappings[467] = ItemType.GrayCarpet; - mappings[468] = ItemType.LightGrayCarpet; - mappings[469] = ItemType.CyanCarpet; - mappings[470] = ItemType.PurpleCarpet; - mappings[471] = ItemType.BlueCarpet; - mappings[472] = ItemType.BrownCarpet; - mappings[473] = ItemType.GreenCarpet; - mappings[474] = ItemType.RedCarpet; - mappings[475] = ItemType.BlackCarpet; - mappings[476] = ItemType.Terracotta; - mappings[477] = ItemType.PackedIce; - mappings[478] = ItemType.DirtPath; - mappings[479] = ItemType.Sunflower; - mappings[480] = ItemType.Lilac; - mappings[481] = ItemType.RoseBush; - mappings[482] = ItemType.Peony; - mappings[483] = ItemType.TallGrass; - mappings[484] = ItemType.LargeFern; - mappings[485] = ItemType.WhiteStainedGlass; - mappings[486] = ItemType.OrangeStainedGlass; - mappings[487] = ItemType.MagentaStainedGlass; - mappings[488] = ItemType.LightBlueStainedGlass; - mappings[489] = ItemType.YellowStainedGlass; - mappings[490] = ItemType.LimeStainedGlass; - mappings[491] = ItemType.PinkStainedGlass; - mappings[492] = ItemType.GrayStainedGlass; - mappings[493] = ItemType.LightGrayStainedGlass; - mappings[494] = ItemType.CyanStainedGlass; - mappings[495] = ItemType.PurpleStainedGlass; - mappings[496] = ItemType.BlueStainedGlass; - mappings[497] = ItemType.BrownStainedGlass; - mappings[498] = ItemType.GreenStainedGlass; - mappings[499] = ItemType.RedStainedGlass; - mappings[500] = ItemType.BlackStainedGlass; - mappings[501] = ItemType.WhiteStainedGlassPane; - mappings[502] = ItemType.OrangeStainedGlassPane; - mappings[503] = ItemType.MagentaStainedGlassPane; - mappings[504] = ItemType.LightBlueStainedGlassPane; - mappings[505] = ItemType.YellowStainedGlassPane; - mappings[506] = ItemType.LimeStainedGlassPane; - mappings[507] = ItemType.PinkStainedGlassPane; - mappings[508] = ItemType.GrayStainedGlassPane; - mappings[509] = ItemType.LightGrayStainedGlassPane; - mappings[510] = ItemType.CyanStainedGlassPane; - mappings[511] = ItemType.PurpleStainedGlassPane; - mappings[512] = ItemType.BlueStainedGlassPane; - mappings[513] = ItemType.BrownStainedGlassPane; - mappings[514] = ItemType.GreenStainedGlassPane; - mappings[515] = ItemType.RedStainedGlassPane; - mappings[516] = ItemType.BlackStainedGlassPane; - mappings[517] = ItemType.Prismarine; - mappings[518] = ItemType.PrismarineBricks; - mappings[519] = ItemType.DarkPrismarine; - mappings[520] = ItemType.PrismarineStairs; - mappings[521] = ItemType.PrismarineBrickStairs; - mappings[522] = ItemType.DarkPrismarineStairs; - mappings[523] = ItemType.SeaLantern; - mappings[524] = ItemType.RedSandstone; - mappings[525] = ItemType.ChiseledRedSandstone; - mappings[526] = ItemType.CutRedSandstone; - mappings[527] = ItemType.RedSandstoneStairs; - mappings[528] = ItemType.RepeatingCommandBlock; - mappings[529] = ItemType.ChainCommandBlock; - mappings[530] = ItemType.MagmaBlock; - mappings[531] = ItemType.NetherWartBlock; - mappings[532] = ItemType.WarpedWartBlock; - mappings[533] = ItemType.RedNetherBricks; - mappings[534] = ItemType.BoneBlock; - mappings[535] = ItemType.StructureVoid; - mappings[536] = ItemType.ShulkerBox; - mappings[537] = ItemType.WhiteShulkerBox; - mappings[538] = ItemType.OrangeShulkerBox; - mappings[539] = ItemType.MagentaShulkerBox; - mappings[540] = ItemType.LightBlueShulkerBox; - mappings[541] = ItemType.YellowShulkerBox; - mappings[542] = ItemType.LimeShulkerBox; - mappings[543] = ItemType.PinkShulkerBox; - mappings[544] = ItemType.GrayShulkerBox; - mappings[545] = ItemType.LightGrayShulkerBox; - mappings[546] = ItemType.CyanShulkerBox; - mappings[547] = ItemType.PurpleShulkerBox; - mappings[548] = ItemType.BlueShulkerBox; - mappings[549] = ItemType.BrownShulkerBox; - mappings[550] = ItemType.GreenShulkerBox; - mappings[551] = ItemType.RedShulkerBox; - mappings[552] = ItemType.BlackShulkerBox; - mappings[553] = ItemType.WhiteGlazedTerracotta; - mappings[554] = ItemType.OrangeGlazedTerracotta; - mappings[555] = ItemType.MagentaGlazedTerracotta; - mappings[556] = ItemType.LightBlueGlazedTerracotta; - mappings[557] = ItemType.YellowGlazedTerracotta; - mappings[558] = ItemType.LimeGlazedTerracotta; - mappings[559] = ItemType.PinkGlazedTerracotta; - mappings[560] = ItemType.GrayGlazedTerracotta; - mappings[561] = ItemType.LightGrayGlazedTerracotta; - mappings[562] = ItemType.CyanGlazedTerracotta; - mappings[563] = ItemType.PurpleGlazedTerracotta; - mappings[564] = ItemType.BlueGlazedTerracotta; - mappings[565] = ItemType.BrownGlazedTerracotta; - mappings[566] = ItemType.GreenGlazedTerracotta; - mappings[567] = ItemType.RedGlazedTerracotta; - mappings[568] = ItemType.BlackGlazedTerracotta; - mappings[569] = ItemType.WhiteConcrete; - mappings[570] = ItemType.OrangeConcrete; - mappings[571] = ItemType.MagentaConcrete; - mappings[572] = ItemType.LightBlueConcrete; - mappings[573] = ItemType.YellowConcrete; - mappings[574] = ItemType.LimeConcrete; - mappings[575] = ItemType.PinkConcrete; - mappings[576] = ItemType.GrayConcrete; - mappings[577] = ItemType.LightGrayConcrete; - mappings[578] = ItemType.CyanConcrete; - mappings[579] = ItemType.PurpleConcrete; - mappings[580] = ItemType.BlueConcrete; - mappings[581] = ItemType.BrownConcrete; - mappings[582] = ItemType.GreenConcrete; - mappings[583] = ItemType.RedConcrete; - mappings[584] = ItemType.BlackConcrete; - mappings[585] = ItemType.WhiteConcretePowder; - mappings[586] = ItemType.OrangeConcretePowder; - mappings[587] = ItemType.MagentaConcretePowder; - mappings[588] = ItemType.LightBlueConcretePowder; - mappings[589] = ItemType.YellowConcretePowder; - mappings[590] = ItemType.LimeConcretePowder; - mappings[591] = ItemType.PinkConcretePowder; - mappings[592] = ItemType.GrayConcretePowder; - mappings[593] = ItemType.LightGrayConcretePowder; - mappings[594] = ItemType.CyanConcretePowder; - mappings[595] = ItemType.PurpleConcretePowder; - mappings[596] = ItemType.BlueConcretePowder; - mappings[597] = ItemType.BrownConcretePowder; - mappings[598] = ItemType.GreenConcretePowder; - mappings[599] = ItemType.RedConcretePowder; - mappings[600] = ItemType.BlackConcretePowder; - mappings[601] = ItemType.TurtleEgg; - mappings[602] = ItemType.SnifferEgg; - mappings[603] = ItemType.DeadTubeCoralBlock; - mappings[604] = ItemType.DeadBrainCoralBlock; - mappings[605] = ItemType.DeadBubbleCoralBlock; - mappings[606] = ItemType.DeadFireCoralBlock; - mappings[607] = ItemType.DeadHornCoralBlock; - mappings[608] = ItemType.TubeCoralBlock; - mappings[609] = ItemType.BrainCoralBlock; - mappings[610] = ItemType.BubbleCoralBlock; - mappings[611] = ItemType.FireCoralBlock; - mappings[612] = ItemType.HornCoralBlock; - mappings[613] = ItemType.TubeCoral; - mappings[614] = ItemType.BrainCoral; - mappings[615] = ItemType.BubbleCoral; - mappings[616] = ItemType.FireCoral; - mappings[617] = ItemType.HornCoral; - mappings[618] = ItemType.DeadBrainCoral; - mappings[619] = ItemType.DeadBubbleCoral; - mappings[620] = ItemType.DeadFireCoral; - mappings[621] = ItemType.DeadHornCoral; - mappings[622] = ItemType.DeadTubeCoral; - mappings[623] = ItemType.TubeCoralFan; - mappings[624] = ItemType.BrainCoralFan; - mappings[625] = ItemType.BubbleCoralFan; - mappings[626] = ItemType.FireCoralFan; - mappings[627] = ItemType.HornCoralFan; - mappings[628] = ItemType.DeadTubeCoralFan; - mappings[629] = ItemType.DeadBrainCoralFan; - mappings[630] = ItemType.DeadBubbleCoralFan; - mappings[631] = ItemType.DeadFireCoralFan; - mappings[632] = ItemType.DeadHornCoralFan; - mappings[633] = ItemType.BlueIce; - mappings[634] = ItemType.Conduit; - mappings[635] = ItemType.PolishedGraniteStairs; - mappings[636] = ItemType.SmoothRedSandstoneStairs; - mappings[637] = ItemType.MossyStoneBrickStairs; - mappings[638] = ItemType.PolishedDioriteStairs; - mappings[639] = ItemType.MossyCobblestoneStairs; - mappings[640] = ItemType.EndStoneBrickStairs; - mappings[641] = ItemType.StoneStairs; - mappings[642] = ItemType.SmoothSandstoneStairs; - mappings[643] = ItemType.SmoothQuartzStairs; - mappings[644] = ItemType.GraniteStairs; - mappings[645] = ItemType.AndesiteStairs; - mappings[646] = ItemType.RedNetherBrickStairs; - mappings[647] = ItemType.PolishedAndesiteStairs; - mappings[648] = ItemType.DioriteStairs; - mappings[649] = ItemType.CobbledDeepslateStairs; - mappings[650] = ItemType.PolishedDeepslateStairs; - mappings[651] = ItemType.DeepslateBrickStairs; - mappings[652] = ItemType.DeepslateTileStairs; - mappings[653] = ItemType.PolishedGraniteSlab; - mappings[654] = ItemType.SmoothRedSandstoneSlab; - mappings[655] = ItemType.MossyStoneBrickSlab; - mappings[656] = ItemType.PolishedDioriteSlab; - mappings[657] = ItemType.MossyCobblestoneSlab; - mappings[658] = ItemType.EndStoneBrickSlab; - mappings[659] = ItemType.SmoothSandstoneSlab; - mappings[660] = ItemType.SmoothQuartzSlab; - mappings[661] = ItemType.GraniteSlab; - mappings[662] = ItemType.AndesiteSlab; - mappings[663] = ItemType.RedNetherBrickSlab; - mappings[664] = ItemType.PolishedAndesiteSlab; - mappings[665] = ItemType.DioriteSlab; - mappings[666] = ItemType.CobbledDeepslateSlab; - mappings[667] = ItemType.PolishedDeepslateSlab; - mappings[668] = ItemType.DeepslateBrickSlab; - mappings[669] = ItemType.DeepslateTileSlab; - mappings[670] = ItemType.Scaffolding; - mappings[671] = ItemType.Redstone; - mappings[672] = ItemType.RedstoneTorch; - mappings[673] = ItemType.RedstoneBlock; - mappings[674] = ItemType.Repeater; - mappings[675] = ItemType.Comparator; - mappings[676] = ItemType.Piston; - mappings[677] = ItemType.StickyPiston; - mappings[678] = ItemType.SlimeBlock; - mappings[679] = ItemType.HoneyBlock; - mappings[680] = ItemType.Observer; - mappings[681] = ItemType.Hopper; - mappings[682] = ItemType.Dispenser; - mappings[683] = ItemType.Dropper; - mappings[684] = ItemType.Lectern; - mappings[685] = ItemType.Target; - mappings[686] = ItemType.Lever; - mappings[687] = ItemType.LightningRod; - mappings[688] = ItemType.DaylightDetector; - mappings[689] = ItemType.SculkSensor; - mappings[690] = ItemType.CalibratedSculkSensor; - mappings[691] = ItemType.TripwireHook; - mappings[692] = ItemType.TrappedChest; - mappings[693] = ItemType.Tnt; - mappings[694] = ItemType.RedstoneLamp; - mappings[695] = ItemType.NoteBlock; - mappings[696] = ItemType.StoneButton; - mappings[697] = ItemType.PolishedBlackstoneButton; - mappings[698] = ItemType.OakButton; - mappings[699] = ItemType.SpruceButton; - mappings[700] = ItemType.BirchButton; - mappings[701] = ItemType.JungleButton; - mappings[702] = ItemType.AcaciaButton; - mappings[703] = ItemType.CherryButton; - mappings[704] = ItemType.DarkOakButton; - mappings[705] = ItemType.PaleOakButton; - mappings[706] = ItemType.MangroveButton; - mappings[707] = ItemType.BambooButton; - mappings[708] = ItemType.CrimsonButton; - mappings[709] = ItemType.WarpedButton; - mappings[710] = ItemType.StonePressurePlate; - mappings[711] = ItemType.PolishedBlackstonePressurePlate; - mappings[712] = ItemType.LightWeightedPressurePlate; - mappings[713] = ItemType.HeavyWeightedPressurePlate; - mappings[714] = ItemType.OakPressurePlate; - mappings[715] = ItemType.SprucePressurePlate; - mappings[716] = ItemType.BirchPressurePlate; - mappings[717] = ItemType.JunglePressurePlate; - mappings[718] = ItemType.AcaciaPressurePlate; - mappings[719] = ItemType.CherryPressurePlate; - mappings[720] = ItemType.DarkOakPressurePlate; - mappings[721] = ItemType.PaleOakPressurePlate; - mappings[722] = ItemType.MangrovePressurePlate; - mappings[723] = ItemType.BambooPressurePlate; - mappings[724] = ItemType.CrimsonPressurePlate; - mappings[725] = ItemType.WarpedPressurePlate; - mappings[726] = ItemType.IronDoor; - mappings[727] = ItemType.OakDoor; - mappings[728] = ItemType.SpruceDoor; - mappings[729] = ItemType.BirchDoor; - mappings[730] = ItemType.JungleDoor; - mappings[731] = ItemType.AcaciaDoor; - mappings[732] = ItemType.CherryDoor; - mappings[733] = ItemType.DarkOakDoor; - mappings[734] = ItemType.PaleOakDoor; - mappings[735] = ItemType.MangroveDoor; - mappings[736] = ItemType.BambooDoor; - mappings[737] = ItemType.CrimsonDoor; - mappings[738] = ItemType.WarpedDoor; - mappings[739] = ItemType.CopperDoor; - mappings[740] = ItemType.ExposedCopperDoor; - mappings[741] = ItemType.WeatheredCopperDoor; - mappings[742] = ItemType.OxidizedCopperDoor; - mappings[743] = ItemType.WaxedCopperDoor; - mappings[744] = ItemType.WaxedExposedCopperDoor; - mappings[745] = ItemType.WaxedWeatheredCopperDoor; - mappings[746] = ItemType.WaxedOxidizedCopperDoor; - mappings[747] = ItemType.IronTrapdoor; - mappings[748] = ItemType.OakTrapdoor; - mappings[749] = ItemType.SpruceTrapdoor; - mappings[750] = ItemType.BirchTrapdoor; - mappings[751] = ItemType.JungleTrapdoor; - mappings[752] = ItemType.AcaciaTrapdoor; - mappings[753] = ItemType.CherryTrapdoor; - mappings[754] = ItemType.DarkOakTrapdoor; - mappings[755] = ItemType.PaleOakTrapdoor; - mappings[756] = ItemType.MangroveTrapdoor; - mappings[757] = ItemType.BambooTrapdoor; - mappings[758] = ItemType.CrimsonTrapdoor; - mappings[759] = ItemType.WarpedTrapdoor; - mappings[760] = ItemType.CopperTrapdoor; - mappings[761] = ItemType.ExposedCopperTrapdoor; - mappings[762] = ItemType.WeatheredCopperTrapdoor; - mappings[763] = ItemType.OxidizedCopperTrapdoor; - mappings[764] = ItemType.WaxedCopperTrapdoor; - mappings[765] = ItemType.WaxedExposedCopperTrapdoor; - mappings[766] = ItemType.WaxedWeatheredCopperTrapdoor; - mappings[767] = ItemType.WaxedOxidizedCopperTrapdoor; - mappings[768] = ItemType.OakFenceGate; - mappings[769] = ItemType.SpruceFenceGate; - mappings[770] = ItemType.BirchFenceGate; - mappings[771] = ItemType.JungleFenceGate; - mappings[772] = ItemType.AcaciaFenceGate; - mappings[773] = ItemType.CherryFenceGate; - mappings[774] = ItemType.DarkOakFenceGate; - mappings[775] = ItemType.PaleOakFenceGate; - mappings[776] = ItemType.MangroveFenceGate; - mappings[777] = ItemType.BambooFenceGate; - mappings[778] = ItemType.CrimsonFenceGate; - mappings[779] = ItemType.WarpedFenceGate; - mappings[780] = ItemType.PoweredRail; - mappings[781] = ItemType.DetectorRail; - mappings[782] = ItemType.Rail; - mappings[783] = ItemType.ActivatorRail; - mappings[784] = ItemType.Saddle; - mappings[785] = ItemType.Minecart; - mappings[786] = ItemType.ChestMinecart; - mappings[787] = ItemType.FurnaceMinecart; - mappings[788] = ItemType.TntMinecart; - mappings[789] = ItemType.HopperMinecart; - mappings[790] = ItemType.CarrotOnAStick; - mappings[791] = ItemType.WarpedFungusOnAStick; - mappings[792] = ItemType.PhantomMembrane; - mappings[793] = ItemType.Elytra; - mappings[794] = ItemType.OakBoat; - mappings[795] = ItemType.OakChestBoat; - mappings[796] = ItemType.SpruceBoat; - mappings[797] = ItemType.SpruceChestBoat; - mappings[798] = ItemType.BirchBoat; - mappings[799] = ItemType.BirchChestBoat; - mappings[800] = ItemType.JungleBoat; - mappings[801] = ItemType.JungleChestBoat; - mappings[802] = ItemType.AcaciaBoat; - mappings[803] = ItemType.AcaciaChestBoat; - mappings[804] = ItemType.CherryBoat; - mappings[805] = ItemType.CherryChestBoat; - mappings[806] = ItemType.DarkOakBoat; - mappings[807] = ItemType.DarkOakChestBoat; - mappings[808] = ItemType.PaleOakBoat; - mappings[809] = ItemType.PaleOakChestBoat; - mappings[810] = ItemType.MangroveBoat; - mappings[811] = ItemType.MangroveChestBoat; - mappings[812] = ItemType.BambooRaft; - mappings[813] = ItemType.BambooChestRaft; - mappings[814] = ItemType.StructureBlock; - mappings[815] = ItemType.Jigsaw; - mappings[816] = ItemType.TurtleHelmet; - mappings[817] = ItemType.TurtleScute; - mappings[818] = ItemType.ArmadilloScute; - mappings[819] = ItemType.WolfArmor; - mappings[820] = ItemType.FlintAndSteel; - mappings[821] = ItemType.Bowl; - mappings[822] = ItemType.Apple; - mappings[823] = ItemType.Bow; - mappings[824] = ItemType.Arrow; - mappings[825] = ItemType.Coal; - mappings[826] = ItemType.Charcoal; - mappings[827] = ItemType.Diamond; - mappings[828] = ItemType.Emerald; - mappings[829] = ItemType.LapisLazuli; - mappings[830] = ItemType.Quartz; - mappings[831] = ItemType.AmethystShard; - mappings[832] = ItemType.RawIron; - mappings[833] = ItemType.IronIngot; - mappings[834] = ItemType.RawCopper; - mappings[835] = ItemType.CopperIngot; - mappings[836] = ItemType.RawGold; - mappings[837] = ItemType.GoldIngot; - mappings[838] = ItemType.NetheriteIngot; - mappings[839] = ItemType.NetheriteScrap; - mappings[840] = ItemType.WoodenSword; - mappings[841] = ItemType.WoodenShovel; - mappings[842] = ItemType.WoodenPickaxe; - mappings[843] = ItemType.WoodenAxe; - mappings[844] = ItemType.WoodenHoe; - mappings[845] = ItemType.StoneSword; - mappings[846] = ItemType.StoneShovel; - mappings[847] = ItemType.StonePickaxe; - mappings[848] = ItemType.StoneAxe; - mappings[849] = ItemType.StoneHoe; - mappings[850] = ItemType.GoldenSword; - mappings[851] = ItemType.GoldenShovel; - mappings[852] = ItemType.GoldenPickaxe; - mappings[853] = ItemType.GoldenAxe; - mappings[854] = ItemType.GoldenHoe; - mappings[855] = ItemType.IronSword; - mappings[856] = ItemType.IronShovel; - mappings[857] = ItemType.IronPickaxe; - mappings[858] = ItemType.IronAxe; - mappings[859] = ItemType.IronHoe; - mappings[860] = ItemType.DiamondSword; - mappings[861] = ItemType.DiamondShovel; - mappings[862] = ItemType.DiamondPickaxe; - mappings[863] = ItemType.DiamondAxe; - mappings[864] = ItemType.DiamondHoe; - mappings[865] = ItemType.NetheriteSword; - mappings[866] = ItemType.NetheriteShovel; - mappings[867] = ItemType.NetheritePickaxe; - mappings[868] = ItemType.NetheriteAxe; - mappings[869] = ItemType.NetheriteHoe; - mappings[870] = ItemType.Stick; - mappings[871] = ItemType.MushroomStew; - mappings[872] = ItemType.String; - mappings[873] = ItemType.Feather; - mappings[874] = ItemType.Gunpowder; - mappings[875] = ItemType.WheatSeeds; - mappings[876] = ItemType.Wheat; - mappings[877] = ItemType.Bread; - mappings[878] = ItemType.LeatherHelmet; - mappings[879] = ItemType.LeatherChestplate; - mappings[880] = ItemType.LeatherLeggings; - mappings[881] = ItemType.LeatherBoots; - mappings[882] = ItemType.ChainmailHelmet; - mappings[883] = ItemType.ChainmailChestplate; - mappings[884] = ItemType.ChainmailLeggings; - mappings[885] = ItemType.ChainmailBoots; - mappings[886] = ItemType.IronHelmet; - mappings[887] = ItemType.IronChestplate; - mappings[888] = ItemType.IronLeggings; - mappings[889] = ItemType.IronBoots; - mappings[890] = ItemType.DiamondHelmet; - mappings[891] = ItemType.DiamondChestplate; - mappings[892] = ItemType.DiamondLeggings; - mappings[893] = ItemType.DiamondBoots; - mappings[894] = ItemType.GoldenHelmet; - mappings[895] = ItemType.GoldenChestplate; - mappings[896] = ItemType.GoldenLeggings; - mappings[897] = ItemType.GoldenBoots; - mappings[898] = ItemType.NetheriteHelmet; - mappings[899] = ItemType.NetheriteChestplate; - mappings[900] = ItemType.NetheriteLeggings; - mappings[901] = ItemType.NetheriteBoots; - mappings[902] = ItemType.Flint; - mappings[903] = ItemType.Porkchop; - mappings[904] = ItemType.CookedPorkchop; - mappings[905] = ItemType.Painting; - mappings[906] = ItemType.GoldenApple; - mappings[907] = ItemType.EnchantedGoldenApple; - mappings[908] = ItemType.OakSign; - mappings[909] = ItemType.SpruceSign; - mappings[910] = ItemType.BirchSign; - mappings[911] = ItemType.JungleSign; - mappings[912] = ItemType.AcaciaSign; - mappings[913] = ItemType.CherrySign; - mappings[914] = ItemType.DarkOakSign; - mappings[915] = ItemType.PaleOakSign; - mappings[916] = ItemType.MangroveSign; - mappings[917] = ItemType.BambooSign; - mappings[918] = ItemType.CrimsonSign; - mappings[919] = ItemType.WarpedSign; - mappings[920] = ItemType.OakHangingSign; - mappings[921] = ItemType.SpruceHangingSign; - mappings[922] = ItemType.BirchHangingSign; - mappings[923] = ItemType.JungleHangingSign; - mappings[924] = ItemType.AcaciaHangingSign; - mappings[925] = ItemType.CherryHangingSign; - mappings[926] = ItemType.DarkOakHangingSign; - mappings[927] = ItemType.PaleOakHangingSign; - mappings[928] = ItemType.MangroveHangingSign; - mappings[929] = ItemType.BambooHangingSign; - mappings[930] = ItemType.CrimsonHangingSign; - mappings[931] = ItemType.WarpedHangingSign; - mappings[932] = ItemType.Bucket; - mappings[933] = ItemType.WaterBucket; - mappings[934] = ItemType.LavaBucket; - mappings[935] = ItemType.PowderSnowBucket; - mappings[936] = ItemType.Snowball; - mappings[937] = ItemType.Leather; - mappings[938] = ItemType.MilkBucket; - mappings[939] = ItemType.PufferfishBucket; - mappings[940] = ItemType.SalmonBucket; - mappings[941] = ItemType.CodBucket; - mappings[942] = ItemType.TropicalFishBucket; - mappings[943] = ItemType.AxolotlBucket; - mappings[944] = ItemType.TadpoleBucket; - mappings[945] = ItemType.Brick; - mappings[946] = ItemType.ClayBall; - mappings[947] = ItemType.DriedKelpBlock; - mappings[948] = ItemType.Paper; - mappings[949] = ItemType.Book; - mappings[950] = ItemType.SlimeBall; - mappings[951] = ItemType.Egg; - mappings[952] = ItemType.Compass; - mappings[953] = ItemType.RecoveryCompass; - mappings[954] = ItemType.Bundle; - mappings[955] = ItemType.WhiteBundle; - mappings[956] = ItemType.OrangeBundle; - mappings[957] = ItemType.MagentaBundle; - mappings[958] = ItemType.LightBlueBundle; - mappings[959] = ItemType.YellowBundle; - mappings[960] = ItemType.LimeBundle; - mappings[961] = ItemType.PinkBundle; - mappings[962] = ItemType.GrayBundle; - mappings[963] = ItemType.LightGrayBundle; - mappings[964] = ItemType.CyanBundle; - mappings[965] = ItemType.PurpleBundle; - mappings[966] = ItemType.BlueBundle; - mappings[967] = ItemType.BrownBundle; - mappings[968] = ItemType.GreenBundle; - mappings[969] = ItemType.RedBundle; - mappings[970] = ItemType.BlackBundle; - mappings[971] = ItemType.FishingRod; - mappings[972] = ItemType.Clock; - mappings[973] = ItemType.Spyglass; - mappings[974] = ItemType.GlowstoneDust; - mappings[975] = ItemType.Cod; - mappings[976] = ItemType.Salmon; - mappings[977] = ItemType.TropicalFish; - mappings[978] = ItemType.Pufferfish; - mappings[979] = ItemType.CookedCod; - mappings[980] = ItemType.CookedSalmon; - mappings[981] = ItemType.InkSac; - mappings[982] = ItemType.GlowInkSac; - mappings[983] = ItemType.CocoaBeans; - mappings[984] = ItemType.WhiteDye; - mappings[985] = ItemType.OrangeDye; - mappings[986] = ItemType.MagentaDye; - mappings[987] = ItemType.LightBlueDye; - mappings[988] = ItemType.YellowDye; - mappings[989] = ItemType.LimeDye; - mappings[990] = ItemType.PinkDye; - mappings[991] = ItemType.GrayDye; - mappings[992] = ItemType.LightGrayDye; - mappings[993] = ItemType.CyanDye; - mappings[994] = ItemType.PurpleDye; - mappings[995] = ItemType.BlueDye; - mappings[996] = ItemType.BrownDye; - mappings[997] = ItemType.GreenDye; - mappings[998] = ItemType.RedDye; - mappings[999] = ItemType.BlackDye; - mappings[1000] = ItemType.BoneMeal; - mappings[1001] = ItemType.Bone; - mappings[1002] = ItemType.Sugar; - mappings[1003] = ItemType.Cake; - mappings[1004] = ItemType.WhiteBed; - mappings[1005] = ItemType.OrangeBed; - mappings[1006] = ItemType.MagentaBed; - mappings[1007] = ItemType.LightBlueBed; - mappings[1008] = ItemType.YellowBed; - mappings[1009] = ItemType.LimeBed; - mappings[1010] = ItemType.PinkBed; - mappings[1011] = ItemType.GrayBed; - mappings[1012] = ItemType.LightGrayBed; - mappings[1013] = ItemType.CyanBed; - mappings[1014] = ItemType.PurpleBed; - mappings[1015] = ItemType.BlueBed; - mappings[1016] = ItemType.BrownBed; - mappings[1017] = ItemType.GreenBed; - mappings[1018] = ItemType.RedBed; - mappings[1019] = ItemType.BlackBed; - mappings[1020] = ItemType.Cookie; - mappings[1021] = ItemType.Crafter; - mappings[1022] = ItemType.FilledMap; - mappings[1023] = ItemType.Shears; - mappings[1024] = ItemType.MelonSlice; - mappings[1025] = ItemType.DriedKelp; - mappings[1026] = ItemType.PumpkinSeeds; - mappings[1027] = ItemType.MelonSeeds; - mappings[1028] = ItemType.Beef; - mappings[1029] = ItemType.CookedBeef; - mappings[1030] = ItemType.Chicken; - mappings[1031] = ItemType.CookedChicken; - mappings[1032] = ItemType.RottenFlesh; - mappings[1033] = ItemType.EnderPearl; - mappings[1034] = ItemType.BlazeRod; - mappings[1035] = ItemType.GhastTear; - mappings[1036] = ItemType.GoldNugget; - mappings[1037] = ItemType.NetherWart; - mappings[1038] = ItemType.GlassBottle; - mappings[1039] = ItemType.Potion; - mappings[1040] = ItemType.SpiderEye; - mappings[1041] = ItemType.FermentedSpiderEye; - mappings[1042] = ItemType.BlazePowder; - mappings[1043] = ItemType.MagmaCream; - mappings[1044] = ItemType.BrewingStand; - mappings[1045] = ItemType.Cauldron; - mappings[1046] = ItemType.EnderEye; - mappings[1047] = ItemType.GlisteringMelonSlice; - mappings[1048] = ItemType.ArmadilloSpawnEgg; - mappings[1049] = ItemType.AllaySpawnEgg; - mappings[1050] = ItemType.AxolotlSpawnEgg; - mappings[1051] = ItemType.BatSpawnEgg; - mappings[1052] = ItemType.BeeSpawnEgg; - mappings[1053] = ItemType.BlazeSpawnEgg; - mappings[1054] = ItemType.BoggedSpawnEgg; - mappings[1055] = ItemType.BreezeSpawnEgg; - mappings[1056] = ItemType.CatSpawnEgg; - mappings[1057] = ItemType.CamelSpawnEgg; - mappings[1058] = ItemType.CaveSpiderSpawnEgg; - mappings[1059] = ItemType.ChickenSpawnEgg; - mappings[1060] = ItemType.CodSpawnEgg; - mappings[1061] = ItemType.CowSpawnEgg; - mappings[1062] = ItemType.CreeperSpawnEgg; - mappings[1063] = ItemType.DolphinSpawnEgg; - mappings[1064] = ItemType.DonkeySpawnEgg; - mappings[1065] = ItemType.DrownedSpawnEgg; - mappings[1066] = ItemType.ElderGuardianSpawnEgg; - mappings[1067] = ItemType.EnderDragonSpawnEgg; - mappings[1068] = ItemType.EndermanSpawnEgg; - mappings[1069] = ItemType.EndermiteSpawnEgg; - mappings[1070] = ItemType.EvokerSpawnEgg; - mappings[1071] = ItemType.FoxSpawnEgg; - mappings[1072] = ItemType.FrogSpawnEgg; - mappings[1073] = ItemType.GhastSpawnEgg; - mappings[1074] = ItemType.GlowSquidSpawnEgg; - mappings[1075] = ItemType.GoatSpawnEgg; - mappings[1076] = ItemType.GuardianSpawnEgg; - mappings[1077] = ItemType.HoglinSpawnEgg; - mappings[1078] = ItemType.HorseSpawnEgg; - mappings[1079] = ItemType.HuskSpawnEgg; - mappings[1080] = ItemType.IronGolemSpawnEgg; - mappings[1081] = ItemType.LlamaSpawnEgg; - mappings[1082] = ItemType.MagmaCubeSpawnEgg; - mappings[1083] = ItemType.MooshroomSpawnEgg; - mappings[1084] = ItemType.MuleSpawnEgg; - mappings[1085] = ItemType.OcelotSpawnEgg; - mappings[1086] = ItemType.PandaSpawnEgg; - mappings[1087] = ItemType.ParrotSpawnEgg; - mappings[1088] = ItemType.PhantomSpawnEgg; - mappings[1089] = ItemType.PigSpawnEgg; - mappings[1090] = ItemType.PiglinSpawnEgg; - mappings[1091] = ItemType.PiglinBruteSpawnEgg; - mappings[1092] = ItemType.PillagerSpawnEgg; - mappings[1093] = ItemType.PolarBearSpawnEgg; - mappings[1094] = ItemType.PufferfishSpawnEgg; - mappings[1095] = ItemType.RabbitSpawnEgg; - mappings[1096] = ItemType.RavagerSpawnEgg; - mappings[1097] = ItemType.SalmonSpawnEgg; - mappings[1098] = ItemType.SheepSpawnEgg; - mappings[1099] = ItemType.ShulkerSpawnEgg; - mappings[1100] = ItemType.SilverfishSpawnEgg; - mappings[1101] = ItemType.SkeletonSpawnEgg; - mappings[1102] = ItemType.SkeletonHorseSpawnEgg; - mappings[1103] = ItemType.SlimeSpawnEgg; - mappings[1104] = ItemType.SnifferSpawnEgg; - mappings[1105] = ItemType.SnowGolemSpawnEgg; - mappings[1106] = ItemType.SpiderSpawnEgg; - mappings[1107] = ItemType.SquidSpawnEgg; - mappings[1108] = ItemType.StraySpawnEgg; - mappings[1109] = ItemType.StriderSpawnEgg; - mappings[1110] = ItemType.TadpoleSpawnEgg; - mappings[1111] = ItemType.TraderLlamaSpawnEgg; - mappings[1112] = ItemType.TropicalFishSpawnEgg; - mappings[1113] = ItemType.TurtleSpawnEgg; - mappings[1114] = ItemType.VexSpawnEgg; - mappings[1115] = ItemType.VillagerSpawnEgg; - mappings[1116] = ItemType.VindicatorSpawnEgg; - mappings[1117] = ItemType.WanderingTraderSpawnEgg; - mappings[1118] = ItemType.WardenSpawnEgg; - mappings[1119] = ItemType.WitchSpawnEgg; - mappings[1120] = ItemType.WitherSpawnEgg; - mappings[1121] = ItemType.WitherSkeletonSpawnEgg; - mappings[1122] = ItemType.WolfSpawnEgg; - mappings[1123] = ItemType.ZoglinSpawnEgg; - mappings[1124] = ItemType.CreakingSpawnEgg; - mappings[1125] = ItemType.ZombieSpawnEgg; - mappings[1126] = ItemType.ZombieHorseSpawnEgg; - mappings[1127] = ItemType.ZombieVillagerSpawnEgg; - mappings[1128] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[1129] = ItemType.ExperienceBottle; - mappings[1130] = ItemType.FireCharge; - mappings[1131] = ItemType.WindCharge; - mappings[1132] = ItemType.WritableBook; - mappings[1133] = ItemType.WrittenBook; - mappings[1134] = ItemType.BreezeRod; - mappings[1135] = ItemType.Mace; - mappings[1136] = ItemType.ItemFrame; - mappings[1137] = ItemType.GlowItemFrame; - mappings[1138] = ItemType.FlowerPot; - mappings[1139] = ItemType.Carrot; - mappings[1140] = ItemType.Potato; - mappings[1141] = ItemType.BakedPotato; - mappings[1142] = ItemType.PoisonousPotato; - mappings[1143] = ItemType.Map; - mappings[1144] = ItemType.GoldenCarrot; - mappings[1145] = ItemType.SkeletonSkull; - mappings[1146] = ItemType.WitherSkeletonSkull; - mappings[1147] = ItemType.PlayerHead; - mappings[1148] = ItemType.ZombieHead; - mappings[1149] = ItemType.CreeperHead; - mappings[1150] = ItemType.DragonHead; - mappings[1151] = ItemType.PiglinHead; - mappings[1152] = ItemType.NetherStar; - mappings[1153] = ItemType.PumpkinPie; - mappings[1154] = ItemType.FireworkRocket; - mappings[1155] = ItemType.FireworkStar; - mappings[1156] = ItemType.EnchantedBook; - mappings[1157] = ItemType.NetherBrick; - mappings[1158] = ItemType.PrismarineShard; - mappings[1159] = ItemType.PrismarineCrystals; - mappings[1160] = ItemType.Rabbit; - mappings[1161] = ItemType.CookedRabbit; - mappings[1162] = ItemType.RabbitStew; - mappings[1163] = ItemType.RabbitFoot; - mappings[1164] = ItemType.RabbitHide; - mappings[1165] = ItemType.ArmorStand; - mappings[1166] = ItemType.IronHorseArmor; - mappings[1167] = ItemType.GoldenHorseArmor; - mappings[1168] = ItemType.DiamondHorseArmor; - mappings[1169] = ItemType.LeatherHorseArmor; - mappings[1170] = ItemType.Lead; - mappings[1171] = ItemType.NameTag; - mappings[1172] = ItemType.CommandBlockMinecart; - mappings[1173] = ItemType.Mutton; - mappings[1174] = ItemType.CookedMutton; - mappings[1175] = ItemType.WhiteBanner; - mappings[1176] = ItemType.OrangeBanner; - mappings[1177] = ItemType.MagentaBanner; - mappings[1178] = ItemType.LightBlueBanner; - mappings[1179] = ItemType.YellowBanner; - mappings[1180] = ItemType.LimeBanner; - mappings[1181] = ItemType.PinkBanner; - mappings[1182] = ItemType.GrayBanner; - mappings[1183] = ItemType.LightGrayBanner; - mappings[1184] = ItemType.CyanBanner; - mappings[1185] = ItemType.PurpleBanner; - mappings[1186] = ItemType.BlueBanner; - mappings[1187] = ItemType.BrownBanner; - mappings[1188] = ItemType.GreenBanner; - mappings[1189] = ItemType.RedBanner; - mappings[1190] = ItemType.BlackBanner; - mappings[1191] = ItemType.EndCrystal; - mappings[1192] = ItemType.ChorusFruit; - mappings[1193] = ItemType.PoppedChorusFruit; - mappings[1194] = ItemType.TorchflowerSeeds; - mappings[1195] = ItemType.PitcherPod; - mappings[1196] = ItemType.Beetroot; - mappings[1197] = ItemType.BeetrootSeeds; - mappings[1198] = ItemType.BeetrootSoup; - mappings[1199] = ItemType.DragonBreath; - mappings[1200] = ItemType.SplashPotion; - mappings[1201] = ItemType.SpectralArrow; - mappings[1202] = ItemType.TippedArrow; - mappings[1203] = ItemType.LingeringPotion; - mappings[1204] = ItemType.Shield; - mappings[1205] = ItemType.TotemOfUndying; - mappings[1206] = ItemType.ShulkerShell; - mappings[1207] = ItemType.IronNugget; - mappings[1208] = ItemType.KnowledgeBook; - mappings[1209] = ItemType.DebugStick; - mappings[1210] = ItemType.MusicDisc13; - mappings[1211] = ItemType.MusicDiscCat; - mappings[1212] = ItemType.MusicDiscBlocks; - mappings[1213] = ItemType.MusicDiscChirp; - mappings[1214] = ItemType.MusicDiscCreator; - mappings[1215] = ItemType.MusicDiscCreatorMusicBox; - mappings[1216] = ItemType.MusicDiscFar; - mappings[1217] = ItemType.MusicDiscMall; - mappings[1218] = ItemType.MusicDiscMellohi; - mappings[1219] = ItemType.MusicDiscStal; - mappings[1220] = ItemType.MusicDiscStrad; - mappings[1221] = ItemType.MusicDiscWard; - mappings[1222] = ItemType.MusicDisc11; - mappings[1223] = ItemType.MusicDiscWait; - mappings[1224] = ItemType.MusicDiscOtherside; - mappings[1225] = ItemType.MusicDiscRelic; - mappings[1226] = ItemType.MusicDisc5; - mappings[1227] = ItemType.MusicDiscPigstep; - mappings[1228] = ItemType.MusicDiscPrecipice; - mappings[1229] = ItemType.DiscFragment5; - mappings[1230] = ItemType.Trident; - mappings[1231] = ItemType.NautilusShell; - mappings[1232] = ItemType.HeartOfTheSea; - mappings[1233] = ItemType.Crossbow; - mappings[1234] = ItemType.SuspiciousStew; - mappings[1235] = ItemType.Loom; - mappings[1236] = ItemType.FlowerBannerPattern; - mappings[1237] = ItemType.CreeperBannerPattern; - mappings[1238] = ItemType.SkullBannerPattern; - mappings[1239] = ItemType.MojangBannerPattern; - mappings[1240] = ItemType.GlobeBannerPattern; - mappings[1241] = ItemType.PiglinBannerPattern; - mappings[1242] = ItemType.FlowBannerPattern; - mappings[1243] = ItemType.GusterBannerPattern; - mappings[1244] = ItemType.FieldMasonedBannerPattern; - mappings[1245] = ItemType.BordureIndentedBannerPattern; - mappings[1246] = ItemType.GoatHorn; - mappings[1247] = ItemType.Composter; - mappings[1248] = ItemType.Barrel; - mappings[1249] = ItemType.Smoker; - mappings[1250] = ItemType.BlastFurnace; - mappings[1251] = ItemType.CartographyTable; - mappings[1252] = ItemType.FletchingTable; - mappings[1253] = ItemType.Grindstone; - mappings[1254] = ItemType.SmithingTable; - mappings[1255] = ItemType.Stonecutter; - mappings[1256] = ItemType.Bell; - mappings[1257] = ItemType.Lantern; - mappings[1258] = ItemType.SoulLantern; - mappings[1259] = ItemType.SweetBerries; - mappings[1260] = ItemType.GlowBerries; - mappings[1261] = ItemType.Campfire; - mappings[1262] = ItemType.SoulCampfire; - mappings[1263] = ItemType.Shroomlight; - mappings[1264] = ItemType.Honeycomb; - mappings[1265] = ItemType.BeeNest; - mappings[1266] = ItemType.Beehive; - mappings[1267] = ItemType.HoneyBottle; - mappings[1268] = ItemType.HoneycombBlock; - mappings[1269] = ItemType.Lodestone; - mappings[1270] = ItemType.CryingObsidian; - mappings[1271] = ItemType.Blackstone; - mappings[1272] = ItemType.BlackstoneSlab; - mappings[1273] = ItemType.BlackstoneStairs; - mappings[1274] = ItemType.GildedBlackstone; - mappings[1275] = ItemType.PolishedBlackstone; - mappings[1276] = ItemType.PolishedBlackstoneSlab; - mappings[1277] = ItemType.PolishedBlackstoneStairs; - mappings[1278] = ItemType.ChiseledPolishedBlackstone; - mappings[1279] = ItemType.PolishedBlackstoneBricks; - mappings[1280] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1281] = ItemType.PolishedBlackstoneBrickStairs; - mappings[1282] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[1283] = ItemType.RespawnAnchor; - mappings[1284] = ItemType.Candle; - mappings[1285] = ItemType.WhiteCandle; - mappings[1286] = ItemType.OrangeCandle; - mappings[1287] = ItemType.MagentaCandle; - mappings[1288] = ItemType.LightBlueCandle; - mappings[1289] = ItemType.YellowCandle; - mappings[1290] = ItemType.LimeCandle; - mappings[1291] = ItemType.PinkCandle; - mappings[1292] = ItemType.GrayCandle; - mappings[1293] = ItemType.LightGrayCandle; - mappings[1294] = ItemType.CyanCandle; - mappings[1295] = ItemType.PurpleCandle; - mappings[1296] = ItemType.BlueCandle; - mappings[1297] = ItemType.BrownCandle; - mappings[1298] = ItemType.GreenCandle; - mappings[1299] = ItemType.RedCandle; - mappings[1300] = ItemType.BlackCandle; - mappings[1301] = ItemType.SmallAmethystBud; - mappings[1302] = ItemType.MediumAmethystBud; - mappings[1303] = ItemType.LargeAmethystBud; - mappings[1304] = ItemType.AmethystCluster; - mappings[1305] = ItemType.PointedDripstone; - mappings[1306] = ItemType.OchreFroglight; - mappings[1307] = ItemType.VerdantFroglight; - mappings[1308] = ItemType.PearlescentFroglight; - mappings[1309] = ItemType.Frogspawn; - mappings[1310] = ItemType.EchoShard; - mappings[1311] = ItemType.Brush; - mappings[1312] = ItemType.NetheriteUpgradeSmithingTemplate; - mappings[1313] = ItemType.SentryArmorTrimSmithingTemplate; - mappings[1314] = ItemType.DuneArmorTrimSmithingTemplate; - mappings[1315] = ItemType.CoastArmorTrimSmithingTemplate; - mappings[1316] = ItemType.WildArmorTrimSmithingTemplate; - mappings[1317] = ItemType.WardArmorTrimSmithingTemplate; - mappings[1318] = ItemType.EyeArmorTrimSmithingTemplate; - mappings[1319] = ItemType.VexArmorTrimSmithingTemplate; - mappings[1320] = ItemType.TideArmorTrimSmithingTemplate; - mappings[1321] = ItemType.SnoutArmorTrimSmithingTemplate; - mappings[1322] = ItemType.RibArmorTrimSmithingTemplate; - mappings[1323] = ItemType.SpireArmorTrimSmithingTemplate; - mappings[1324] = ItemType.WayfinderArmorTrimSmithingTemplate; - mappings[1325] = ItemType.ShaperArmorTrimSmithingTemplate; - mappings[1326] = ItemType.SilenceArmorTrimSmithingTemplate; - mappings[1327] = ItemType.RaiserArmorTrimSmithingTemplate; - mappings[1328] = ItemType.HostArmorTrimSmithingTemplate; - mappings[1329] = ItemType.FlowArmorTrimSmithingTemplate; - mappings[1330] = ItemType.BoltArmorTrimSmithingTemplate; - mappings[1331] = ItemType.AnglerPotterySherd; - mappings[1332] = ItemType.ArcherPotterySherd; - mappings[1333] = ItemType.ArmsUpPotterySherd; - mappings[1334] = ItemType.BladePotterySherd; - mappings[1335] = ItemType.BrewerPotterySherd; - mappings[1336] = ItemType.BurnPotterySherd; - mappings[1337] = ItemType.DangerPotterySherd; - mappings[1338] = ItemType.ExplorerPotterySherd; - mappings[1339] = ItemType.FlowPotterySherd; - mappings[1340] = ItemType.FriendPotterySherd; - mappings[1341] = ItemType.GusterPotterySherd; - mappings[1342] = ItemType.HeartPotterySherd; - mappings[1343] = ItemType.HeartbreakPotterySherd; - mappings[1344] = ItemType.HowlPotterySherd; - mappings[1345] = ItemType.MinerPotterySherd; - mappings[1346] = ItemType.MournerPotterySherd; - mappings[1347] = ItemType.PlentyPotterySherd; - mappings[1348] = ItemType.PrizePotterySherd; - mappings[1349] = ItemType.ScrapePotterySherd; - mappings[1350] = ItemType.SheafPotterySherd; - mappings[1351] = ItemType.ShelterPotterySherd; - mappings[1352] = ItemType.SkullPotterySherd; - mappings[1353] = ItemType.SnortPotterySherd; - mappings[1354] = ItemType.CopperGrate; - mappings[1355] = ItemType.ExposedCopperGrate; - mappings[1356] = ItemType.WeatheredCopperGrate; - mappings[1357] = ItemType.OxidizedCopperGrate; - mappings[1358] = ItemType.WaxedCopperGrate; - mappings[1359] = ItemType.WaxedExposedCopperGrate; - mappings[1360] = ItemType.WaxedWeatheredCopperGrate; - mappings[1361] = ItemType.WaxedOxidizedCopperGrate; - mappings[1362] = ItemType.CopperBulb; - mappings[1363] = ItemType.ExposedCopperBulb; - mappings[1364] = ItemType.WeatheredCopperBulb; - mappings[1365] = ItemType.OxidizedCopperBulb; - mappings[1366] = ItemType.WaxedCopperBulb; - mappings[1367] = ItemType.WaxedExposedCopperBulb; - mappings[1368] = ItemType.WaxedWeatheredCopperBulb; - mappings[1369] = ItemType.WaxedOxidizedCopperBulb; - mappings[1370] = ItemType.TrialSpawner; - mappings[1371] = ItemType.TrialKey; - mappings[1372] = ItemType.OminousTrialKey; - mappings[1373] = ItemType.Vault; - mappings[1374] = ItemType.OminousBottle; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1214.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette1214.cs deleted file mode 100644 index c0cf85a8fd..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1214.cs +++ /dev/null @@ -1,1403 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette1214 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette1214() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.Deepslate; - mappings[9] = ItemType.CobbledDeepslate; - mappings[10] = ItemType.PolishedDeepslate; - mappings[11] = ItemType.Calcite; - mappings[12] = ItemType.Tuff; - mappings[13] = ItemType.TuffSlab; - mappings[14] = ItemType.TuffStairs; - mappings[15] = ItemType.TuffWall; - mappings[16] = ItemType.ChiseledTuff; - mappings[17] = ItemType.PolishedTuff; - mappings[18] = ItemType.PolishedTuffSlab; - mappings[19] = ItemType.PolishedTuffStairs; - mappings[20] = ItemType.PolishedTuffWall; - mappings[21] = ItemType.TuffBricks; - mappings[22] = ItemType.TuffBrickSlab; - mappings[23] = ItemType.TuffBrickStairs; - mappings[24] = ItemType.TuffBrickWall; - mappings[25] = ItemType.ChiseledTuffBricks; - mappings[26] = ItemType.DripstoneBlock; - mappings[27] = ItemType.GrassBlock; - mappings[28] = ItemType.Dirt; - mappings[29] = ItemType.CoarseDirt; - mappings[30] = ItemType.Podzol; - mappings[31] = ItemType.RootedDirt; - mappings[32] = ItemType.Mud; - mappings[33] = ItemType.CrimsonNylium; - mappings[34] = ItemType.WarpedNylium; - mappings[35] = ItemType.Cobblestone; - mappings[36] = ItemType.OakPlanks; - mappings[37] = ItemType.SprucePlanks; - mappings[38] = ItemType.BirchPlanks; - mappings[39] = ItemType.JunglePlanks; - mappings[40] = ItemType.AcaciaPlanks; - mappings[41] = ItemType.CherryPlanks; - mappings[42] = ItemType.DarkOakPlanks; - mappings[43] = ItemType.PaleOakPlanks; - mappings[44] = ItemType.MangrovePlanks; - mappings[45] = ItemType.BambooPlanks; - mappings[46] = ItemType.CrimsonPlanks; - mappings[47] = ItemType.WarpedPlanks; - mappings[48] = ItemType.BambooMosaic; - mappings[49] = ItemType.OakSapling; - mappings[50] = ItemType.SpruceSapling; - mappings[51] = ItemType.BirchSapling; - mappings[52] = ItemType.JungleSapling; - mappings[53] = ItemType.AcaciaSapling; - mappings[54] = ItemType.CherrySapling; - mappings[55] = ItemType.DarkOakSapling; - mappings[56] = ItemType.PaleOakSapling; - mappings[57] = ItemType.MangrovePropagule; - mappings[58] = ItemType.Bedrock; - mappings[59] = ItemType.Sand; - mappings[60] = ItemType.SuspiciousSand; - mappings[61] = ItemType.SuspiciousGravel; - mappings[62] = ItemType.RedSand; - mappings[63] = ItemType.Gravel; - mappings[64] = ItemType.CoalOre; - mappings[65] = ItemType.DeepslateCoalOre; - mappings[66] = ItemType.IronOre; - mappings[67] = ItemType.DeepslateIronOre; - mappings[68] = ItemType.CopperOre; - mappings[69] = ItemType.DeepslateCopperOre; - mappings[70] = ItemType.GoldOre; - mappings[71] = ItemType.DeepslateGoldOre; - mappings[72] = ItemType.RedstoneOre; - mappings[73] = ItemType.DeepslateRedstoneOre; - mappings[74] = ItemType.EmeraldOre; - mappings[75] = ItemType.DeepslateEmeraldOre; - mappings[76] = ItemType.LapisOre; - mappings[77] = ItemType.DeepslateLapisOre; - mappings[78] = ItemType.DiamondOre; - mappings[79] = ItemType.DeepslateDiamondOre; - mappings[80] = ItemType.NetherGoldOre; - mappings[81] = ItemType.NetherQuartzOre; - mappings[82] = ItemType.AncientDebris; - mappings[83] = ItemType.CoalBlock; - mappings[84] = ItemType.RawIronBlock; - mappings[85] = ItemType.RawCopperBlock; - mappings[86] = ItemType.RawGoldBlock; - mappings[87] = ItemType.HeavyCore; - mappings[88] = ItemType.AmethystBlock; - mappings[89] = ItemType.BuddingAmethyst; - mappings[90] = ItemType.IronBlock; - mappings[91] = ItemType.CopperBlock; - mappings[92] = ItemType.GoldBlock; - mappings[93] = ItemType.DiamondBlock; - mappings[94] = ItemType.NetheriteBlock; - mappings[95] = ItemType.ExposedCopper; - mappings[96] = ItemType.WeatheredCopper; - mappings[97] = ItemType.OxidizedCopper; - mappings[98] = ItemType.ChiseledCopper; - mappings[99] = ItemType.ExposedChiseledCopper; - mappings[100] = ItemType.WeatheredChiseledCopper; - mappings[101] = ItemType.OxidizedChiseledCopper; - mappings[102] = ItemType.CutCopper; - mappings[103] = ItemType.ExposedCutCopper; - mappings[104] = ItemType.WeatheredCutCopper; - mappings[105] = ItemType.OxidizedCutCopper; - mappings[106] = ItemType.CutCopperStairs; - mappings[107] = ItemType.ExposedCutCopperStairs; - mappings[108] = ItemType.WeatheredCutCopperStairs; - mappings[109] = ItemType.OxidizedCutCopperStairs; - mappings[110] = ItemType.CutCopperSlab; - mappings[111] = ItemType.ExposedCutCopperSlab; - mappings[112] = ItemType.WeatheredCutCopperSlab; - mappings[113] = ItemType.OxidizedCutCopperSlab; - mappings[114] = ItemType.WaxedCopperBlock; - mappings[115] = ItemType.WaxedExposedCopper; - mappings[116] = ItemType.WaxedWeatheredCopper; - mappings[117] = ItemType.WaxedOxidizedCopper; - mappings[118] = ItemType.WaxedChiseledCopper; - mappings[119] = ItemType.WaxedExposedChiseledCopper; - mappings[120] = ItemType.WaxedWeatheredChiseledCopper; - mappings[121] = ItemType.WaxedOxidizedChiseledCopper; - mappings[122] = ItemType.WaxedCutCopper; - mappings[123] = ItemType.WaxedExposedCutCopper; - mappings[124] = ItemType.WaxedWeatheredCutCopper; - mappings[125] = ItemType.WaxedOxidizedCutCopper; - mappings[126] = ItemType.WaxedCutCopperStairs; - mappings[127] = ItemType.WaxedExposedCutCopperStairs; - mappings[128] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[129] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[130] = ItemType.WaxedCutCopperSlab; - mappings[131] = ItemType.WaxedExposedCutCopperSlab; - mappings[132] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[133] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[134] = ItemType.OakLog; - mappings[135] = ItemType.SpruceLog; - mappings[136] = ItemType.BirchLog; - mappings[137] = ItemType.JungleLog; - mappings[138] = ItemType.AcaciaLog; - mappings[139] = ItemType.CherryLog; - mappings[140] = ItemType.PaleOakLog; - mappings[141] = ItemType.DarkOakLog; - mappings[142] = ItemType.MangroveLog; - mappings[143] = ItemType.MangroveRoots; - mappings[144] = ItemType.MuddyMangroveRoots; - mappings[145] = ItemType.CrimsonStem; - mappings[146] = ItemType.WarpedStem; - mappings[147] = ItemType.BambooBlock; - mappings[148] = ItemType.StrippedOakLog; - mappings[149] = ItemType.StrippedSpruceLog; - mappings[150] = ItemType.StrippedBirchLog; - mappings[151] = ItemType.StrippedJungleLog; - mappings[152] = ItemType.StrippedAcaciaLog; - mappings[153] = ItemType.StrippedCherryLog; - mappings[154] = ItemType.StrippedDarkOakLog; - mappings[155] = ItemType.StrippedPaleOakLog; - mappings[156] = ItemType.StrippedMangroveLog; - mappings[157] = ItemType.StrippedCrimsonStem; - mappings[158] = ItemType.StrippedWarpedStem; - mappings[159] = ItemType.StrippedOakWood; - mappings[160] = ItemType.StrippedSpruceWood; - mappings[161] = ItemType.StrippedBirchWood; - mappings[162] = ItemType.StrippedJungleWood; - mappings[163] = ItemType.StrippedAcaciaWood; - mappings[164] = ItemType.StrippedCherryWood; - mappings[165] = ItemType.StrippedDarkOakWood; - mappings[166] = ItemType.StrippedPaleOakWood; - mappings[167] = ItemType.StrippedMangroveWood; - mappings[168] = ItemType.StrippedCrimsonHyphae; - mappings[169] = ItemType.StrippedWarpedHyphae; - mappings[170] = ItemType.StrippedBambooBlock; - mappings[171] = ItemType.OakWood; - mappings[172] = ItemType.SpruceWood; - mappings[173] = ItemType.BirchWood; - mappings[174] = ItemType.JungleWood; - mappings[175] = ItemType.AcaciaWood; - mappings[176] = ItemType.CherryWood; - mappings[177] = ItemType.PaleOakWood; - mappings[178] = ItemType.DarkOakWood; - mappings[179] = ItemType.MangroveWood; - mappings[180] = ItemType.CrimsonHyphae; - mappings[181] = ItemType.WarpedHyphae; - mappings[182] = ItemType.OakLeaves; - mappings[183] = ItemType.SpruceLeaves; - mappings[184] = ItemType.BirchLeaves; - mappings[185] = ItemType.JungleLeaves; - mappings[186] = ItemType.AcaciaLeaves; - mappings[187] = ItemType.CherryLeaves; - mappings[188] = ItemType.DarkOakLeaves; - mappings[189] = ItemType.PaleOakLeaves; - mappings[190] = ItemType.MangroveLeaves; - mappings[191] = ItemType.AzaleaLeaves; - mappings[192] = ItemType.FloweringAzaleaLeaves; - mappings[193] = ItemType.Sponge; - mappings[194] = ItemType.WetSponge; - mappings[195] = ItemType.Glass; - mappings[196] = ItemType.TintedGlass; - mappings[197] = ItemType.LapisBlock; - mappings[198] = ItemType.Sandstone; - mappings[199] = ItemType.ChiseledSandstone; - mappings[200] = ItemType.CutSandstone; - mappings[201] = ItemType.Cobweb; - mappings[202] = ItemType.ShortGrass; - mappings[203] = ItemType.Fern; - mappings[204] = ItemType.Azalea; - mappings[205] = ItemType.FloweringAzalea; - mappings[206] = ItemType.DeadBush; - mappings[207] = ItemType.Seagrass; - mappings[208] = ItemType.SeaPickle; - mappings[209] = ItemType.WhiteWool; - mappings[210] = ItemType.OrangeWool; - mappings[211] = ItemType.MagentaWool; - mappings[212] = ItemType.LightBlueWool; - mappings[213] = ItemType.YellowWool; - mappings[214] = ItemType.LimeWool; - mappings[215] = ItemType.PinkWool; - mappings[216] = ItemType.GrayWool; - mappings[217] = ItemType.LightGrayWool; - mappings[218] = ItemType.CyanWool; - mappings[219] = ItemType.PurpleWool; - mappings[220] = ItemType.BlueWool; - mappings[221] = ItemType.BrownWool; - mappings[222] = ItemType.GreenWool; - mappings[223] = ItemType.RedWool; - mappings[224] = ItemType.BlackWool; - mappings[225] = ItemType.Dandelion; - mappings[226] = ItemType.OpenEyeblossom; - mappings[227] = ItemType.ClosedEyeblossom; - mappings[228] = ItemType.Poppy; - mappings[229] = ItemType.BlueOrchid; - mappings[230] = ItemType.Allium; - mappings[231] = ItemType.AzureBluet; - mappings[232] = ItemType.RedTulip; - mappings[233] = ItemType.OrangeTulip; - mappings[234] = ItemType.WhiteTulip; - mappings[235] = ItemType.PinkTulip; - mappings[236] = ItemType.OxeyeDaisy; - mappings[237] = ItemType.Cornflower; - mappings[238] = ItemType.LilyOfTheValley; - mappings[239] = ItemType.WitherRose; - mappings[240] = ItemType.Torchflower; - mappings[241] = ItemType.PitcherPlant; - mappings[242] = ItemType.SporeBlossom; - mappings[243] = ItemType.BrownMushroom; - mappings[244] = ItemType.RedMushroom; - mappings[245] = ItemType.CrimsonFungus; - mappings[246] = ItemType.WarpedFungus; - mappings[247] = ItemType.CrimsonRoots; - mappings[248] = ItemType.WarpedRoots; - mappings[249] = ItemType.NetherSprouts; - mappings[250] = ItemType.WeepingVines; - mappings[251] = ItemType.TwistingVines; - mappings[252] = ItemType.SugarCane; - mappings[253] = ItemType.Kelp; - mappings[254] = ItemType.PinkPetals; - mappings[255] = ItemType.MossCarpet; - mappings[256] = ItemType.MossBlock; - mappings[257] = ItemType.PaleMossCarpet; - mappings[258] = ItemType.PaleHangingMoss; - mappings[259] = ItemType.PaleMossBlock; - mappings[260] = ItemType.HangingRoots; - mappings[261] = ItemType.BigDripleaf; - mappings[262] = ItemType.SmallDripleaf; - mappings[263] = ItemType.Bamboo; - mappings[264] = ItemType.OakSlab; - mappings[265] = ItemType.SpruceSlab; - mappings[266] = ItemType.BirchSlab; - mappings[267] = ItemType.JungleSlab; - mappings[268] = ItemType.AcaciaSlab; - mappings[269] = ItemType.CherrySlab; - mappings[270] = ItemType.DarkOakSlab; - mappings[271] = ItemType.PaleOakSlab; - mappings[272] = ItemType.MangroveSlab; - mappings[273] = ItemType.BambooSlab; - mappings[274] = ItemType.BambooMosaicSlab; - mappings[275] = ItemType.CrimsonSlab; - mappings[276] = ItemType.WarpedSlab; - mappings[277] = ItemType.StoneSlab; - mappings[278] = ItemType.SmoothStoneSlab; - mappings[279] = ItemType.SandstoneSlab; - mappings[280] = ItemType.CutSandstoneSlab; - mappings[281] = ItemType.PetrifiedOakSlab; - mappings[282] = ItemType.CobblestoneSlab; - mappings[283] = ItemType.BrickSlab; - mappings[284] = ItemType.StoneBrickSlab; - mappings[285] = ItemType.MudBrickSlab; - mappings[286] = ItemType.NetherBrickSlab; - mappings[287] = ItemType.QuartzSlab; - mappings[288] = ItemType.RedSandstoneSlab; - mappings[289] = ItemType.CutRedSandstoneSlab; - mappings[290] = ItemType.PurpurSlab; - mappings[291] = ItemType.PrismarineSlab; - mappings[292] = ItemType.PrismarineBrickSlab; - mappings[293] = ItemType.DarkPrismarineSlab; - mappings[294] = ItemType.SmoothQuartz; - mappings[295] = ItemType.SmoothRedSandstone; - mappings[296] = ItemType.SmoothSandstone; - mappings[297] = ItemType.SmoothStone; - mappings[298] = ItemType.Bricks; - mappings[299] = ItemType.Bookshelf; - mappings[300] = ItemType.ChiseledBookshelf; - mappings[301] = ItemType.DecoratedPot; - mappings[302] = ItemType.MossyCobblestone; - mappings[303] = ItemType.Obsidian; - mappings[304] = ItemType.Torch; - mappings[305] = ItemType.EndRod; - mappings[306] = ItemType.ChorusPlant; - mappings[307] = ItemType.ChorusFlower; - mappings[308] = ItemType.PurpurBlock; - mappings[309] = ItemType.PurpurPillar; - mappings[310] = ItemType.PurpurStairs; - mappings[311] = ItemType.Spawner; - mappings[312] = ItemType.CreakingHeart; - mappings[313] = ItemType.Chest; - mappings[314] = ItemType.CraftingTable; - mappings[315] = ItemType.Farmland; - mappings[316] = ItemType.Furnace; - mappings[317] = ItemType.Ladder; - mappings[318] = ItemType.CobblestoneStairs; - mappings[319] = ItemType.Snow; - mappings[320] = ItemType.Ice; - mappings[321] = ItemType.SnowBlock; - mappings[322] = ItemType.Cactus; - mappings[323] = ItemType.Clay; - mappings[324] = ItemType.Jukebox; - mappings[325] = ItemType.OakFence; - mappings[326] = ItemType.SpruceFence; - mappings[327] = ItemType.BirchFence; - mappings[328] = ItemType.JungleFence; - mappings[329] = ItemType.AcaciaFence; - mappings[330] = ItemType.CherryFence; - mappings[331] = ItemType.DarkOakFence; - mappings[332] = ItemType.PaleOakFence; - mappings[333] = ItemType.MangroveFence; - mappings[334] = ItemType.BambooFence; - mappings[335] = ItemType.CrimsonFence; - mappings[336] = ItemType.WarpedFence; - mappings[337] = ItemType.Pumpkin; - mappings[338] = ItemType.CarvedPumpkin; - mappings[339] = ItemType.JackOLantern; - mappings[340] = ItemType.Netherrack; - mappings[341] = ItemType.SoulSand; - mappings[342] = ItemType.SoulSoil; - mappings[343] = ItemType.Basalt; - mappings[344] = ItemType.PolishedBasalt; - mappings[345] = ItemType.SmoothBasalt; - mappings[346] = ItemType.SoulTorch; - mappings[347] = ItemType.Glowstone; - mappings[348] = ItemType.InfestedStone; - mappings[349] = ItemType.InfestedCobblestone; - mappings[350] = ItemType.InfestedStoneBricks; - mappings[351] = ItemType.InfestedMossyStoneBricks; - mappings[352] = ItemType.InfestedCrackedStoneBricks; - mappings[353] = ItemType.InfestedChiseledStoneBricks; - mappings[354] = ItemType.InfestedDeepslate; - mappings[355] = ItemType.StoneBricks; - mappings[356] = ItemType.MossyStoneBricks; - mappings[357] = ItemType.CrackedStoneBricks; - mappings[358] = ItemType.ChiseledStoneBricks; - mappings[359] = ItemType.PackedMud; - mappings[360] = ItemType.MudBricks; - mappings[361] = ItemType.DeepslateBricks; - mappings[362] = ItemType.CrackedDeepslateBricks; - mappings[363] = ItemType.DeepslateTiles; - mappings[364] = ItemType.CrackedDeepslateTiles; - mappings[365] = ItemType.ChiseledDeepslate; - mappings[366] = ItemType.ReinforcedDeepslate; - mappings[367] = ItemType.BrownMushroomBlock; - mappings[368] = ItemType.RedMushroomBlock; - mappings[369] = ItemType.MushroomStem; - mappings[370] = ItemType.IronBars; - mappings[371] = ItemType.Chain; - mappings[372] = ItemType.GlassPane; - mappings[373] = ItemType.Melon; - mappings[374] = ItemType.Vine; - mappings[375] = ItemType.GlowLichen; - mappings[376] = ItemType.ResinClump; - mappings[377] = ItemType.ResinBlock; - mappings[378] = ItemType.ResinBricks; - mappings[379] = ItemType.ResinBrickStairs; - mappings[380] = ItemType.ResinBrickSlab; - mappings[381] = ItemType.ResinBrickWall; - mappings[382] = ItemType.ChiseledResinBricks; - mappings[383] = ItemType.BrickStairs; - mappings[384] = ItemType.StoneBrickStairs; - mappings[385] = ItemType.MudBrickStairs; - mappings[386] = ItemType.Mycelium; - mappings[387] = ItemType.LilyPad; - mappings[388] = ItemType.NetherBricks; - mappings[389] = ItemType.CrackedNetherBricks; - mappings[390] = ItemType.ChiseledNetherBricks; - mappings[391] = ItemType.NetherBrickFence; - mappings[392] = ItemType.NetherBrickStairs; - mappings[393] = ItemType.Sculk; - mappings[394] = ItemType.SculkVein; - mappings[395] = ItemType.SculkCatalyst; - mappings[396] = ItemType.SculkShrieker; - mappings[397] = ItemType.EnchantingTable; - mappings[398] = ItemType.EndPortalFrame; - mappings[399] = ItemType.EndStone; - mappings[400] = ItemType.EndStoneBricks; - mappings[401] = ItemType.DragonEgg; - mappings[402] = ItemType.SandstoneStairs; - mappings[403] = ItemType.EnderChest; - mappings[404] = ItemType.EmeraldBlock; - mappings[405] = ItemType.OakStairs; - mappings[406] = ItemType.SpruceStairs; - mappings[407] = ItemType.BirchStairs; - mappings[408] = ItemType.JungleStairs; - mappings[409] = ItemType.AcaciaStairs; - mappings[410] = ItemType.CherryStairs; - mappings[411] = ItemType.DarkOakStairs; - mappings[412] = ItemType.PaleOakStairs; - mappings[413] = ItemType.MangroveStairs; - mappings[414] = ItemType.BambooStairs; - mappings[415] = ItemType.BambooMosaicStairs; - mappings[416] = ItemType.CrimsonStairs; - mappings[417] = ItemType.WarpedStairs; - mappings[418] = ItemType.CommandBlock; - mappings[419] = ItemType.Beacon; - mappings[420] = ItemType.CobblestoneWall; - mappings[421] = ItemType.MossyCobblestoneWall; - mappings[422] = ItemType.BrickWall; - mappings[423] = ItemType.PrismarineWall; - mappings[424] = ItemType.RedSandstoneWall; - mappings[425] = ItemType.MossyStoneBrickWall; - mappings[426] = ItemType.GraniteWall; - mappings[427] = ItemType.StoneBrickWall; - mappings[428] = ItemType.MudBrickWall; - mappings[429] = ItemType.NetherBrickWall; - mappings[430] = ItemType.AndesiteWall; - mappings[431] = ItemType.RedNetherBrickWall; - mappings[432] = ItemType.SandstoneWall; - mappings[433] = ItemType.EndStoneBrickWall; - mappings[434] = ItemType.DioriteWall; - mappings[435] = ItemType.BlackstoneWall; - mappings[436] = ItemType.PolishedBlackstoneWall; - mappings[437] = ItemType.PolishedBlackstoneBrickWall; - mappings[438] = ItemType.CobbledDeepslateWall; - mappings[439] = ItemType.PolishedDeepslateWall; - mappings[440] = ItemType.DeepslateBrickWall; - mappings[441] = ItemType.DeepslateTileWall; - mappings[442] = ItemType.Anvil; - mappings[443] = ItemType.ChippedAnvil; - mappings[444] = ItemType.DamagedAnvil; - mappings[445] = ItemType.ChiseledQuartzBlock; - mappings[446] = ItemType.QuartzBlock; - mappings[447] = ItemType.QuartzBricks; - mappings[448] = ItemType.QuartzPillar; - mappings[449] = ItemType.QuartzStairs; - mappings[450] = ItemType.WhiteTerracotta; - mappings[451] = ItemType.OrangeTerracotta; - mappings[452] = ItemType.MagentaTerracotta; - mappings[453] = ItemType.LightBlueTerracotta; - mappings[454] = ItemType.YellowTerracotta; - mappings[455] = ItemType.LimeTerracotta; - mappings[456] = ItemType.PinkTerracotta; - mappings[457] = ItemType.GrayTerracotta; - mappings[458] = ItemType.LightGrayTerracotta; - mappings[459] = ItemType.CyanTerracotta; - mappings[460] = ItemType.PurpleTerracotta; - mappings[461] = ItemType.BlueTerracotta; - mappings[462] = ItemType.BrownTerracotta; - mappings[463] = ItemType.GreenTerracotta; - mappings[464] = ItemType.RedTerracotta; - mappings[465] = ItemType.BlackTerracotta; - mappings[466] = ItemType.Barrier; - mappings[467] = ItemType.Light; - mappings[468] = ItemType.HayBlock; - mappings[469] = ItemType.WhiteCarpet; - mappings[470] = ItemType.OrangeCarpet; - mappings[471] = ItemType.MagentaCarpet; - mappings[472] = ItemType.LightBlueCarpet; - mappings[473] = ItemType.YellowCarpet; - mappings[474] = ItemType.LimeCarpet; - mappings[475] = ItemType.PinkCarpet; - mappings[476] = ItemType.GrayCarpet; - mappings[477] = ItemType.LightGrayCarpet; - mappings[478] = ItemType.CyanCarpet; - mappings[479] = ItemType.PurpleCarpet; - mappings[480] = ItemType.BlueCarpet; - mappings[481] = ItemType.BrownCarpet; - mappings[482] = ItemType.GreenCarpet; - mappings[483] = ItemType.RedCarpet; - mappings[484] = ItemType.BlackCarpet; - mappings[485] = ItemType.Terracotta; - mappings[486] = ItemType.PackedIce; - mappings[487] = ItemType.DirtPath; - mappings[488] = ItemType.Sunflower; - mappings[489] = ItemType.Lilac; - mappings[490] = ItemType.RoseBush; - mappings[491] = ItemType.Peony; - mappings[492] = ItemType.TallGrass; - mappings[493] = ItemType.LargeFern; - mappings[494] = ItemType.WhiteStainedGlass; - mappings[495] = ItemType.OrangeStainedGlass; - mappings[496] = ItemType.MagentaStainedGlass; - mappings[497] = ItemType.LightBlueStainedGlass; - mappings[498] = ItemType.YellowStainedGlass; - mappings[499] = ItemType.LimeStainedGlass; - mappings[500] = ItemType.PinkStainedGlass; - mappings[501] = ItemType.GrayStainedGlass; - mappings[502] = ItemType.LightGrayStainedGlass; - mappings[503] = ItemType.CyanStainedGlass; - mappings[504] = ItemType.PurpleStainedGlass; - mappings[505] = ItemType.BlueStainedGlass; - mappings[506] = ItemType.BrownStainedGlass; - mappings[507] = ItemType.GreenStainedGlass; - mappings[508] = ItemType.RedStainedGlass; - mappings[509] = ItemType.BlackStainedGlass; - mappings[510] = ItemType.WhiteStainedGlassPane; - mappings[511] = ItemType.OrangeStainedGlassPane; - mappings[512] = ItemType.MagentaStainedGlassPane; - mappings[513] = ItemType.LightBlueStainedGlassPane; - mappings[514] = ItemType.YellowStainedGlassPane; - mappings[515] = ItemType.LimeStainedGlassPane; - mappings[516] = ItemType.PinkStainedGlassPane; - mappings[517] = ItemType.GrayStainedGlassPane; - mappings[518] = ItemType.LightGrayStainedGlassPane; - mappings[519] = ItemType.CyanStainedGlassPane; - mappings[520] = ItemType.PurpleStainedGlassPane; - mappings[521] = ItemType.BlueStainedGlassPane; - mappings[522] = ItemType.BrownStainedGlassPane; - mappings[523] = ItemType.GreenStainedGlassPane; - mappings[524] = ItemType.RedStainedGlassPane; - mappings[525] = ItemType.BlackStainedGlassPane; - mappings[526] = ItemType.Prismarine; - mappings[527] = ItemType.PrismarineBricks; - mappings[528] = ItemType.DarkPrismarine; - mappings[529] = ItemType.PrismarineStairs; - mappings[530] = ItemType.PrismarineBrickStairs; - mappings[531] = ItemType.DarkPrismarineStairs; - mappings[532] = ItemType.SeaLantern; - mappings[533] = ItemType.RedSandstone; - mappings[534] = ItemType.ChiseledRedSandstone; - mappings[535] = ItemType.CutRedSandstone; - mappings[536] = ItemType.RedSandstoneStairs; - mappings[537] = ItemType.RepeatingCommandBlock; - mappings[538] = ItemType.ChainCommandBlock; - mappings[539] = ItemType.MagmaBlock; - mappings[540] = ItemType.NetherWartBlock; - mappings[541] = ItemType.WarpedWartBlock; - mappings[542] = ItemType.RedNetherBricks; - mappings[543] = ItemType.BoneBlock; - mappings[544] = ItemType.StructureVoid; - mappings[545] = ItemType.ShulkerBox; - mappings[546] = ItemType.WhiteShulkerBox; - mappings[547] = ItemType.OrangeShulkerBox; - mappings[548] = ItemType.MagentaShulkerBox; - mappings[549] = ItemType.LightBlueShulkerBox; - mappings[550] = ItemType.YellowShulkerBox; - mappings[551] = ItemType.LimeShulkerBox; - mappings[552] = ItemType.PinkShulkerBox; - mappings[553] = ItemType.GrayShulkerBox; - mappings[554] = ItemType.LightGrayShulkerBox; - mappings[555] = ItemType.CyanShulkerBox; - mappings[556] = ItemType.PurpleShulkerBox; - mappings[557] = ItemType.BlueShulkerBox; - mappings[558] = ItemType.BrownShulkerBox; - mappings[559] = ItemType.GreenShulkerBox; - mappings[560] = ItemType.RedShulkerBox; - mappings[561] = ItemType.BlackShulkerBox; - mappings[562] = ItemType.WhiteGlazedTerracotta; - mappings[563] = ItemType.OrangeGlazedTerracotta; - mappings[564] = ItemType.MagentaGlazedTerracotta; - mappings[565] = ItemType.LightBlueGlazedTerracotta; - mappings[566] = ItemType.YellowGlazedTerracotta; - mappings[567] = ItemType.LimeGlazedTerracotta; - mappings[568] = ItemType.PinkGlazedTerracotta; - mappings[569] = ItemType.GrayGlazedTerracotta; - mappings[570] = ItemType.LightGrayGlazedTerracotta; - mappings[571] = ItemType.CyanGlazedTerracotta; - mappings[572] = ItemType.PurpleGlazedTerracotta; - mappings[573] = ItemType.BlueGlazedTerracotta; - mappings[574] = ItemType.BrownGlazedTerracotta; - mappings[575] = ItemType.GreenGlazedTerracotta; - mappings[576] = ItemType.RedGlazedTerracotta; - mappings[577] = ItemType.BlackGlazedTerracotta; - mappings[578] = ItemType.WhiteConcrete; - mappings[579] = ItemType.OrangeConcrete; - mappings[580] = ItemType.MagentaConcrete; - mappings[581] = ItemType.LightBlueConcrete; - mappings[582] = ItemType.YellowConcrete; - mappings[583] = ItemType.LimeConcrete; - mappings[584] = ItemType.PinkConcrete; - mappings[585] = ItemType.GrayConcrete; - mappings[586] = ItemType.LightGrayConcrete; - mappings[587] = ItemType.CyanConcrete; - mappings[588] = ItemType.PurpleConcrete; - mappings[589] = ItemType.BlueConcrete; - mappings[590] = ItemType.BrownConcrete; - mappings[591] = ItemType.GreenConcrete; - mappings[592] = ItemType.RedConcrete; - mappings[593] = ItemType.BlackConcrete; - mappings[594] = ItemType.WhiteConcretePowder; - mappings[595] = ItemType.OrangeConcretePowder; - mappings[596] = ItemType.MagentaConcretePowder; - mappings[597] = ItemType.LightBlueConcretePowder; - mappings[598] = ItemType.YellowConcretePowder; - mappings[599] = ItemType.LimeConcretePowder; - mappings[600] = ItemType.PinkConcretePowder; - mappings[601] = ItemType.GrayConcretePowder; - mappings[602] = ItemType.LightGrayConcretePowder; - mappings[603] = ItemType.CyanConcretePowder; - mappings[604] = ItemType.PurpleConcretePowder; - mappings[605] = ItemType.BlueConcretePowder; - mappings[606] = ItemType.BrownConcretePowder; - mappings[607] = ItemType.GreenConcretePowder; - mappings[608] = ItemType.RedConcretePowder; - mappings[609] = ItemType.BlackConcretePowder; - mappings[610] = ItemType.TurtleEgg; - mappings[611] = ItemType.SnifferEgg; - mappings[612] = ItemType.DeadTubeCoralBlock; - mappings[613] = ItemType.DeadBrainCoralBlock; - mappings[614] = ItemType.DeadBubbleCoralBlock; - mappings[615] = ItemType.DeadFireCoralBlock; - mappings[616] = ItemType.DeadHornCoralBlock; - mappings[617] = ItemType.TubeCoralBlock; - mappings[618] = ItemType.BrainCoralBlock; - mappings[619] = ItemType.BubbleCoralBlock; - mappings[620] = ItemType.FireCoralBlock; - mappings[621] = ItemType.HornCoralBlock; - mappings[622] = ItemType.TubeCoral; - mappings[623] = ItemType.BrainCoral; - mappings[624] = ItemType.BubbleCoral; - mappings[625] = ItemType.FireCoral; - mappings[626] = ItemType.HornCoral; - mappings[627] = ItemType.DeadBrainCoral; - mappings[628] = ItemType.DeadBubbleCoral; - mappings[629] = ItemType.DeadFireCoral; - mappings[630] = ItemType.DeadHornCoral; - mappings[631] = ItemType.DeadTubeCoral; - mappings[632] = ItemType.TubeCoralFan; - mappings[633] = ItemType.BrainCoralFan; - mappings[634] = ItemType.BubbleCoralFan; - mappings[635] = ItemType.FireCoralFan; - mappings[636] = ItemType.HornCoralFan; - mappings[637] = ItemType.DeadTubeCoralFan; - mappings[638] = ItemType.DeadBrainCoralFan; - mappings[639] = ItemType.DeadBubbleCoralFan; - mappings[640] = ItemType.DeadFireCoralFan; - mappings[641] = ItemType.DeadHornCoralFan; - mappings[642] = ItemType.BlueIce; - mappings[643] = ItemType.Conduit; - mappings[644] = ItemType.PolishedGraniteStairs; - mappings[645] = ItemType.SmoothRedSandstoneStairs; - mappings[646] = ItemType.MossyStoneBrickStairs; - mappings[647] = ItemType.PolishedDioriteStairs; - mappings[648] = ItemType.MossyCobblestoneStairs; - mappings[649] = ItemType.EndStoneBrickStairs; - mappings[650] = ItemType.StoneStairs; - mappings[651] = ItemType.SmoothSandstoneStairs; - mappings[652] = ItemType.SmoothQuartzStairs; - mappings[653] = ItemType.GraniteStairs; - mappings[654] = ItemType.AndesiteStairs; - mappings[655] = ItemType.RedNetherBrickStairs; - mappings[656] = ItemType.PolishedAndesiteStairs; - mappings[657] = ItemType.DioriteStairs; - mappings[658] = ItemType.CobbledDeepslateStairs; - mappings[659] = ItemType.PolishedDeepslateStairs; - mappings[660] = ItemType.DeepslateBrickStairs; - mappings[661] = ItemType.DeepslateTileStairs; - mappings[662] = ItemType.PolishedGraniteSlab; - mappings[663] = ItemType.SmoothRedSandstoneSlab; - mappings[664] = ItemType.MossyStoneBrickSlab; - mappings[665] = ItemType.PolishedDioriteSlab; - mappings[666] = ItemType.MossyCobblestoneSlab; - mappings[667] = ItemType.EndStoneBrickSlab; - mappings[668] = ItemType.SmoothSandstoneSlab; - mappings[669] = ItemType.SmoothQuartzSlab; - mappings[670] = ItemType.GraniteSlab; - mappings[671] = ItemType.AndesiteSlab; - mappings[672] = ItemType.RedNetherBrickSlab; - mappings[673] = ItemType.PolishedAndesiteSlab; - mappings[674] = ItemType.DioriteSlab; - mappings[675] = ItemType.CobbledDeepslateSlab; - mappings[676] = ItemType.PolishedDeepslateSlab; - mappings[677] = ItemType.DeepslateBrickSlab; - mappings[678] = ItemType.DeepslateTileSlab; - mappings[679] = ItemType.Scaffolding; - mappings[680] = ItemType.Redstone; - mappings[681] = ItemType.RedstoneTorch; - mappings[682] = ItemType.RedstoneBlock; - mappings[683] = ItemType.Repeater; - mappings[684] = ItemType.Comparator; - mappings[685] = ItemType.Piston; - mappings[686] = ItemType.StickyPiston; - mappings[687] = ItemType.SlimeBlock; - mappings[688] = ItemType.HoneyBlock; - mappings[689] = ItemType.Observer; - mappings[690] = ItemType.Hopper; - mappings[691] = ItemType.Dispenser; - mappings[692] = ItemType.Dropper; - mappings[693] = ItemType.Lectern; - mappings[694] = ItemType.Target; - mappings[695] = ItemType.Lever; - mappings[696] = ItemType.LightningRod; - mappings[697] = ItemType.DaylightDetector; - mappings[698] = ItemType.SculkSensor; - mappings[699] = ItemType.CalibratedSculkSensor; - mappings[700] = ItemType.TripwireHook; - mappings[701] = ItemType.TrappedChest; - mappings[702] = ItemType.Tnt; - mappings[703] = ItemType.RedstoneLamp; - mappings[704] = ItemType.NoteBlock; - mappings[705] = ItemType.StoneButton; - mappings[706] = ItemType.PolishedBlackstoneButton; - mappings[707] = ItemType.OakButton; - mappings[708] = ItemType.SpruceButton; - mappings[709] = ItemType.BirchButton; - mappings[710] = ItemType.JungleButton; - mappings[711] = ItemType.AcaciaButton; - mappings[712] = ItemType.CherryButton; - mappings[713] = ItemType.DarkOakButton; - mappings[714] = ItemType.PaleOakButton; - mappings[715] = ItemType.MangroveButton; - mappings[716] = ItemType.BambooButton; - mappings[717] = ItemType.CrimsonButton; - mappings[718] = ItemType.WarpedButton; - mappings[719] = ItemType.StonePressurePlate; - mappings[720] = ItemType.PolishedBlackstonePressurePlate; - mappings[721] = ItemType.LightWeightedPressurePlate; - mappings[722] = ItemType.HeavyWeightedPressurePlate; - mappings[723] = ItemType.OakPressurePlate; - mappings[724] = ItemType.SprucePressurePlate; - mappings[725] = ItemType.BirchPressurePlate; - mappings[726] = ItemType.JunglePressurePlate; - mappings[727] = ItemType.AcaciaPressurePlate; - mappings[728] = ItemType.CherryPressurePlate; - mappings[729] = ItemType.DarkOakPressurePlate; - mappings[730] = ItemType.PaleOakPressurePlate; - mappings[731] = ItemType.MangrovePressurePlate; - mappings[732] = ItemType.BambooPressurePlate; - mappings[733] = ItemType.CrimsonPressurePlate; - mappings[734] = ItemType.WarpedPressurePlate; - mappings[735] = ItemType.IronDoor; - mappings[736] = ItemType.OakDoor; - mappings[737] = ItemType.SpruceDoor; - mappings[738] = ItemType.BirchDoor; - mappings[739] = ItemType.JungleDoor; - mappings[740] = ItemType.AcaciaDoor; - mappings[741] = ItemType.CherryDoor; - mappings[742] = ItemType.DarkOakDoor; - mappings[743] = ItemType.PaleOakDoor; - mappings[744] = ItemType.MangroveDoor; - mappings[745] = ItemType.BambooDoor; - mappings[746] = ItemType.CrimsonDoor; - mappings[747] = ItemType.WarpedDoor; - mappings[748] = ItemType.CopperDoor; - mappings[749] = ItemType.ExposedCopperDoor; - mappings[750] = ItemType.WeatheredCopperDoor; - mappings[751] = ItemType.OxidizedCopperDoor; - mappings[752] = ItemType.WaxedCopperDoor; - mappings[753] = ItemType.WaxedExposedCopperDoor; - mappings[754] = ItemType.WaxedWeatheredCopperDoor; - mappings[755] = ItemType.WaxedOxidizedCopperDoor; - mappings[756] = ItemType.IronTrapdoor; - mappings[757] = ItemType.OakTrapdoor; - mappings[758] = ItemType.SpruceTrapdoor; - mappings[759] = ItemType.BirchTrapdoor; - mappings[760] = ItemType.JungleTrapdoor; - mappings[761] = ItemType.AcaciaTrapdoor; - mappings[762] = ItemType.CherryTrapdoor; - mappings[763] = ItemType.DarkOakTrapdoor; - mappings[764] = ItemType.PaleOakTrapdoor; - mappings[765] = ItemType.MangroveTrapdoor; - mappings[766] = ItemType.BambooTrapdoor; - mappings[767] = ItemType.CrimsonTrapdoor; - mappings[768] = ItemType.WarpedTrapdoor; - mappings[769] = ItemType.CopperTrapdoor; - mappings[770] = ItemType.ExposedCopperTrapdoor; - mappings[771] = ItemType.WeatheredCopperTrapdoor; - mappings[772] = ItemType.OxidizedCopperTrapdoor; - mappings[773] = ItemType.WaxedCopperTrapdoor; - mappings[774] = ItemType.WaxedExposedCopperTrapdoor; - mappings[775] = ItemType.WaxedWeatheredCopperTrapdoor; - mappings[776] = ItemType.WaxedOxidizedCopperTrapdoor; - mappings[777] = ItemType.OakFenceGate; - mappings[778] = ItemType.SpruceFenceGate; - mappings[779] = ItemType.BirchFenceGate; - mappings[780] = ItemType.JungleFenceGate; - mappings[781] = ItemType.AcaciaFenceGate; - mappings[782] = ItemType.CherryFenceGate; - mappings[783] = ItemType.DarkOakFenceGate; - mappings[784] = ItemType.PaleOakFenceGate; - mappings[785] = ItemType.MangroveFenceGate; - mappings[786] = ItemType.BambooFenceGate; - mappings[787] = ItemType.CrimsonFenceGate; - mappings[788] = ItemType.WarpedFenceGate; - mappings[789] = ItemType.PoweredRail; - mappings[790] = ItemType.DetectorRail; - mappings[791] = ItemType.Rail; - mappings[792] = ItemType.ActivatorRail; - mappings[793] = ItemType.Saddle; - mappings[794] = ItemType.Minecart; - mappings[795] = ItemType.ChestMinecart; - mappings[796] = ItemType.FurnaceMinecart; - mappings[797] = ItemType.TntMinecart; - mappings[798] = ItemType.HopperMinecart; - mappings[799] = ItemType.CarrotOnAStick; - mappings[800] = ItemType.WarpedFungusOnAStick; - mappings[801] = ItemType.PhantomMembrane; - mappings[802] = ItemType.Elytra; - mappings[803] = ItemType.OakBoat; - mappings[804] = ItemType.OakChestBoat; - mappings[805] = ItemType.SpruceBoat; - mappings[806] = ItemType.SpruceChestBoat; - mappings[807] = ItemType.BirchBoat; - mappings[808] = ItemType.BirchChestBoat; - mappings[809] = ItemType.JungleBoat; - mappings[810] = ItemType.JungleChestBoat; - mappings[811] = ItemType.AcaciaBoat; - mappings[812] = ItemType.AcaciaChestBoat; - mappings[813] = ItemType.CherryBoat; - mappings[814] = ItemType.CherryChestBoat; - mappings[815] = ItemType.DarkOakBoat; - mappings[816] = ItemType.DarkOakChestBoat; - mappings[817] = ItemType.PaleOakBoat; - mappings[818] = ItemType.PaleOakChestBoat; - mappings[819] = ItemType.MangroveBoat; - mappings[820] = ItemType.MangroveChestBoat; - mappings[821] = ItemType.BambooRaft; - mappings[822] = ItemType.BambooChestRaft; - mappings[823] = ItemType.StructureBlock; - mappings[824] = ItemType.Jigsaw; - mappings[825] = ItemType.TurtleHelmet; - mappings[826] = ItemType.TurtleScute; - mappings[827] = ItemType.ArmadilloScute; - mappings[828] = ItemType.WolfArmor; - mappings[829] = ItemType.FlintAndSteel; - mappings[830] = ItemType.Bowl; - mappings[831] = ItemType.Apple; - mappings[832] = ItemType.Bow; - mappings[833] = ItemType.Arrow; - mappings[834] = ItemType.Coal; - mappings[835] = ItemType.Charcoal; - mappings[836] = ItemType.Diamond; - mappings[837] = ItemType.Emerald; - mappings[838] = ItemType.LapisLazuli; - mappings[839] = ItemType.Quartz; - mappings[840] = ItemType.AmethystShard; - mappings[841] = ItemType.RawIron; - mappings[842] = ItemType.IronIngot; - mappings[843] = ItemType.RawCopper; - mappings[844] = ItemType.CopperIngot; - mappings[845] = ItemType.RawGold; - mappings[846] = ItemType.GoldIngot; - mappings[847] = ItemType.NetheriteIngot; - mappings[848] = ItemType.NetheriteScrap; - mappings[849] = ItemType.WoodenSword; - mappings[850] = ItemType.WoodenShovel; - mappings[851] = ItemType.WoodenPickaxe; - mappings[852] = ItemType.WoodenAxe; - mappings[853] = ItemType.WoodenHoe; - mappings[854] = ItemType.StoneSword; - mappings[855] = ItemType.StoneShovel; - mappings[856] = ItemType.StonePickaxe; - mappings[857] = ItemType.StoneAxe; - mappings[858] = ItemType.StoneHoe; - mappings[859] = ItemType.GoldenSword; - mappings[860] = ItemType.GoldenShovel; - mappings[861] = ItemType.GoldenPickaxe; - mappings[862] = ItemType.GoldenAxe; - mappings[863] = ItemType.GoldenHoe; - mappings[864] = ItemType.IronSword; - mappings[865] = ItemType.IronShovel; - mappings[866] = ItemType.IronPickaxe; - mappings[867] = ItemType.IronAxe; - mappings[868] = ItemType.IronHoe; - mappings[869] = ItemType.DiamondSword; - mappings[870] = ItemType.DiamondShovel; - mappings[871] = ItemType.DiamondPickaxe; - mappings[872] = ItemType.DiamondAxe; - mappings[873] = ItemType.DiamondHoe; - mappings[874] = ItemType.NetheriteSword; - mappings[875] = ItemType.NetheriteShovel; - mappings[876] = ItemType.NetheritePickaxe; - mappings[877] = ItemType.NetheriteAxe; - mappings[878] = ItemType.NetheriteHoe; - mappings[879] = ItemType.Stick; - mappings[880] = ItemType.MushroomStew; - mappings[881] = ItemType.String; - mappings[882] = ItemType.Feather; - mappings[883] = ItemType.Gunpowder; - mappings[884] = ItemType.WheatSeeds; - mappings[885] = ItemType.Wheat; - mappings[886] = ItemType.Bread; - mappings[887] = ItemType.LeatherHelmet; - mappings[888] = ItemType.LeatherChestplate; - mappings[889] = ItemType.LeatherLeggings; - mappings[890] = ItemType.LeatherBoots; - mappings[891] = ItemType.ChainmailHelmet; - mappings[892] = ItemType.ChainmailChestplate; - mappings[893] = ItemType.ChainmailLeggings; - mappings[894] = ItemType.ChainmailBoots; - mappings[895] = ItemType.IronHelmet; - mappings[896] = ItemType.IronChestplate; - mappings[897] = ItemType.IronLeggings; - mappings[898] = ItemType.IronBoots; - mappings[899] = ItemType.DiamondHelmet; - mappings[900] = ItemType.DiamondChestplate; - mappings[901] = ItemType.DiamondLeggings; - mappings[902] = ItemType.DiamondBoots; - mappings[903] = ItemType.GoldenHelmet; - mappings[904] = ItemType.GoldenChestplate; - mappings[905] = ItemType.GoldenLeggings; - mappings[906] = ItemType.GoldenBoots; - mappings[907] = ItemType.NetheriteHelmet; - mappings[908] = ItemType.NetheriteChestplate; - mappings[909] = ItemType.NetheriteLeggings; - mappings[910] = ItemType.NetheriteBoots; - mappings[911] = ItemType.Flint; - mappings[912] = ItemType.Porkchop; - mappings[913] = ItemType.CookedPorkchop; - mappings[914] = ItemType.Painting; - mappings[915] = ItemType.GoldenApple; - mappings[916] = ItemType.EnchantedGoldenApple; - mappings[917] = ItemType.OakSign; - mappings[918] = ItemType.SpruceSign; - mappings[919] = ItemType.BirchSign; - mappings[920] = ItemType.JungleSign; - mappings[921] = ItemType.AcaciaSign; - mappings[922] = ItemType.CherrySign; - mappings[923] = ItemType.DarkOakSign; - mappings[924] = ItemType.PaleOakSign; - mappings[925] = ItemType.MangroveSign; - mappings[926] = ItemType.BambooSign; - mappings[927] = ItemType.CrimsonSign; - mappings[928] = ItemType.WarpedSign; - mappings[929] = ItemType.OakHangingSign; - mappings[930] = ItemType.SpruceHangingSign; - mappings[931] = ItemType.BirchHangingSign; - mappings[932] = ItemType.JungleHangingSign; - mappings[933] = ItemType.AcaciaHangingSign; - mappings[934] = ItemType.CherryHangingSign; - mappings[935] = ItemType.DarkOakHangingSign; - mappings[936] = ItemType.PaleOakHangingSign; - mappings[937] = ItemType.MangroveHangingSign; - mappings[938] = ItemType.BambooHangingSign; - mappings[939] = ItemType.CrimsonHangingSign; - mappings[940] = ItemType.WarpedHangingSign; - mappings[941] = ItemType.Bucket; - mappings[942] = ItemType.WaterBucket; - mappings[943] = ItemType.LavaBucket; - mappings[944] = ItemType.PowderSnowBucket; - mappings[945] = ItemType.Snowball; - mappings[946] = ItemType.Leather; - mappings[947] = ItemType.MilkBucket; - mappings[948] = ItemType.PufferfishBucket; - mappings[949] = ItemType.SalmonBucket; - mappings[950] = ItemType.CodBucket; - mappings[951] = ItemType.TropicalFishBucket; - mappings[952] = ItemType.AxolotlBucket; - mappings[953] = ItemType.TadpoleBucket; - mappings[954] = ItemType.Brick; - mappings[955] = ItemType.ClayBall; - mappings[956] = ItemType.DriedKelpBlock; - mappings[957] = ItemType.Paper; - mappings[958] = ItemType.Book; - mappings[959] = ItemType.SlimeBall; - mappings[960] = ItemType.Egg; - mappings[961] = ItemType.Compass; - mappings[962] = ItemType.RecoveryCompass; - mappings[963] = ItemType.Bundle; - mappings[964] = ItemType.WhiteBundle; - mappings[965] = ItemType.OrangeBundle; - mappings[966] = ItemType.MagentaBundle; - mappings[967] = ItemType.LightBlueBundle; - mappings[968] = ItemType.YellowBundle; - mappings[969] = ItemType.LimeBundle; - mappings[970] = ItemType.PinkBundle; - mappings[971] = ItemType.GrayBundle; - mappings[972] = ItemType.LightGrayBundle; - mappings[973] = ItemType.CyanBundle; - mappings[974] = ItemType.PurpleBundle; - mappings[975] = ItemType.BlueBundle; - mappings[976] = ItemType.BrownBundle; - mappings[977] = ItemType.GreenBundle; - mappings[978] = ItemType.RedBundle; - mappings[979] = ItemType.BlackBundle; - mappings[980] = ItemType.FishingRod; - mappings[981] = ItemType.Clock; - mappings[982] = ItemType.Spyglass; - mappings[983] = ItemType.GlowstoneDust; - mappings[984] = ItemType.Cod; - mappings[985] = ItemType.Salmon; - mappings[986] = ItemType.TropicalFish; - mappings[987] = ItemType.Pufferfish; - mappings[988] = ItemType.CookedCod; - mappings[989] = ItemType.CookedSalmon; - mappings[990] = ItemType.InkSac; - mappings[991] = ItemType.GlowInkSac; - mappings[992] = ItemType.CocoaBeans; - mappings[993] = ItemType.WhiteDye; - mappings[994] = ItemType.OrangeDye; - mappings[995] = ItemType.MagentaDye; - mappings[996] = ItemType.LightBlueDye; - mappings[997] = ItemType.YellowDye; - mappings[998] = ItemType.LimeDye; - mappings[999] = ItemType.PinkDye; - mappings[1000] = ItemType.GrayDye; - mappings[1001] = ItemType.LightGrayDye; - mappings[1002] = ItemType.CyanDye; - mappings[1003] = ItemType.PurpleDye; - mappings[1004] = ItemType.BlueDye; - mappings[1005] = ItemType.BrownDye; - mappings[1006] = ItemType.GreenDye; - mappings[1007] = ItemType.RedDye; - mappings[1008] = ItemType.BlackDye; - mappings[1009] = ItemType.BoneMeal; - mappings[1010] = ItemType.Bone; - mappings[1011] = ItemType.Sugar; - mappings[1012] = ItemType.Cake; - mappings[1013] = ItemType.WhiteBed; - mappings[1014] = ItemType.OrangeBed; - mappings[1015] = ItemType.MagentaBed; - mappings[1016] = ItemType.LightBlueBed; - mappings[1017] = ItemType.YellowBed; - mappings[1018] = ItemType.LimeBed; - mappings[1019] = ItemType.PinkBed; - mappings[1020] = ItemType.GrayBed; - mappings[1021] = ItemType.LightGrayBed; - mappings[1022] = ItemType.CyanBed; - mappings[1023] = ItemType.PurpleBed; - mappings[1024] = ItemType.BlueBed; - mappings[1025] = ItemType.BrownBed; - mappings[1026] = ItemType.GreenBed; - mappings[1027] = ItemType.RedBed; - mappings[1028] = ItemType.BlackBed; - mappings[1029] = ItemType.Cookie; - mappings[1030] = ItemType.Crafter; - mappings[1031] = ItemType.FilledMap; - mappings[1032] = ItemType.Shears; - mappings[1033] = ItemType.MelonSlice; - mappings[1034] = ItemType.DriedKelp; - mappings[1035] = ItemType.PumpkinSeeds; - mappings[1036] = ItemType.MelonSeeds; - mappings[1037] = ItemType.Beef; - mappings[1038] = ItemType.CookedBeef; - mappings[1039] = ItemType.Chicken; - mappings[1040] = ItemType.CookedChicken; - mappings[1041] = ItemType.RottenFlesh; - mappings[1042] = ItemType.EnderPearl; - mappings[1043] = ItemType.BlazeRod; - mappings[1044] = ItemType.GhastTear; - mappings[1045] = ItemType.GoldNugget; - mappings[1046] = ItemType.NetherWart; - mappings[1047] = ItemType.GlassBottle; - mappings[1048] = ItemType.Potion; - mappings[1049] = ItemType.SpiderEye; - mappings[1050] = ItemType.FermentedSpiderEye; - mappings[1051] = ItemType.BlazePowder; - mappings[1052] = ItemType.MagmaCream; - mappings[1053] = ItemType.BrewingStand; - mappings[1054] = ItemType.Cauldron; - mappings[1055] = ItemType.EnderEye; - mappings[1056] = ItemType.GlisteringMelonSlice; - mappings[1057] = ItemType.ArmadilloSpawnEgg; - mappings[1058] = ItemType.AllaySpawnEgg; - mappings[1059] = ItemType.AxolotlSpawnEgg; - mappings[1060] = ItemType.BatSpawnEgg; - mappings[1061] = ItemType.BeeSpawnEgg; - mappings[1062] = ItemType.BlazeSpawnEgg; - mappings[1063] = ItemType.BoggedSpawnEgg; - mappings[1064] = ItemType.BreezeSpawnEgg; - mappings[1065] = ItemType.CatSpawnEgg; - mappings[1066] = ItemType.CamelSpawnEgg; - mappings[1067] = ItemType.CaveSpiderSpawnEgg; - mappings[1068] = ItemType.ChickenSpawnEgg; - mappings[1069] = ItemType.CodSpawnEgg; - mappings[1070] = ItemType.CowSpawnEgg; - mappings[1071] = ItemType.CreeperSpawnEgg; - mappings[1072] = ItemType.DolphinSpawnEgg; - mappings[1073] = ItemType.DonkeySpawnEgg; - mappings[1074] = ItemType.DrownedSpawnEgg; - mappings[1075] = ItemType.ElderGuardianSpawnEgg; - mappings[1076] = ItemType.EnderDragonSpawnEgg; - mappings[1077] = ItemType.EndermanSpawnEgg; - mappings[1078] = ItemType.EndermiteSpawnEgg; - mappings[1079] = ItemType.EvokerSpawnEgg; - mappings[1080] = ItemType.FoxSpawnEgg; - mappings[1081] = ItemType.FrogSpawnEgg; - mappings[1082] = ItemType.GhastSpawnEgg; - mappings[1083] = ItemType.GlowSquidSpawnEgg; - mappings[1084] = ItemType.GoatSpawnEgg; - mappings[1085] = ItemType.GuardianSpawnEgg; - mappings[1086] = ItemType.HoglinSpawnEgg; - mappings[1087] = ItemType.HorseSpawnEgg; - mappings[1088] = ItemType.HuskSpawnEgg; - mappings[1089] = ItemType.IronGolemSpawnEgg; - mappings[1090] = ItemType.LlamaSpawnEgg; - mappings[1091] = ItemType.MagmaCubeSpawnEgg; - mappings[1092] = ItemType.MooshroomSpawnEgg; - mappings[1093] = ItemType.MuleSpawnEgg; - mappings[1094] = ItemType.OcelotSpawnEgg; - mappings[1095] = ItemType.PandaSpawnEgg; - mappings[1096] = ItemType.ParrotSpawnEgg; - mappings[1097] = ItemType.PhantomSpawnEgg; - mappings[1098] = ItemType.PigSpawnEgg; - mappings[1099] = ItemType.PiglinSpawnEgg; - mappings[1100] = ItemType.PiglinBruteSpawnEgg; - mappings[1101] = ItemType.PillagerSpawnEgg; - mappings[1102] = ItemType.PolarBearSpawnEgg; - mappings[1103] = ItemType.PufferfishSpawnEgg; - mappings[1104] = ItemType.RabbitSpawnEgg; - mappings[1105] = ItemType.RavagerSpawnEgg; - mappings[1106] = ItemType.SalmonSpawnEgg; - mappings[1107] = ItemType.SheepSpawnEgg; - mappings[1108] = ItemType.ShulkerSpawnEgg; - mappings[1109] = ItemType.SilverfishSpawnEgg; - mappings[1110] = ItemType.SkeletonSpawnEgg; - mappings[1111] = ItemType.SkeletonHorseSpawnEgg; - mappings[1112] = ItemType.SlimeSpawnEgg; - mappings[1113] = ItemType.SnifferSpawnEgg; - mappings[1114] = ItemType.SnowGolemSpawnEgg; - mappings[1115] = ItemType.SpiderSpawnEgg; - mappings[1116] = ItemType.SquidSpawnEgg; - mappings[1117] = ItemType.StraySpawnEgg; - mappings[1118] = ItemType.StriderSpawnEgg; - mappings[1119] = ItemType.TadpoleSpawnEgg; - mappings[1120] = ItemType.TraderLlamaSpawnEgg; - mappings[1121] = ItemType.TropicalFishSpawnEgg; - mappings[1122] = ItemType.TurtleSpawnEgg; - mappings[1123] = ItemType.VexSpawnEgg; - mappings[1124] = ItemType.VillagerSpawnEgg; - mappings[1125] = ItemType.VindicatorSpawnEgg; - mappings[1126] = ItemType.WanderingTraderSpawnEgg; - mappings[1127] = ItemType.WardenSpawnEgg; - mappings[1128] = ItemType.WitchSpawnEgg; - mappings[1129] = ItemType.WitherSpawnEgg; - mappings[1130] = ItemType.WitherSkeletonSpawnEgg; - mappings[1131] = ItemType.WolfSpawnEgg; - mappings[1132] = ItemType.ZoglinSpawnEgg; - mappings[1133] = ItemType.CreakingSpawnEgg; - mappings[1134] = ItemType.ZombieSpawnEgg; - mappings[1135] = ItemType.ZombieHorseSpawnEgg; - mappings[1136] = ItemType.ZombieVillagerSpawnEgg; - mappings[1137] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[1138] = ItemType.ExperienceBottle; - mappings[1139] = ItemType.FireCharge; - mappings[1140] = ItemType.WindCharge; - mappings[1141] = ItemType.WritableBook; - mappings[1142] = ItemType.WrittenBook; - mappings[1143] = ItemType.BreezeRod; - mappings[1144] = ItemType.Mace; - mappings[1145] = ItemType.ItemFrame; - mappings[1146] = ItemType.GlowItemFrame; - mappings[1147] = ItemType.FlowerPot; - mappings[1148] = ItemType.Carrot; - mappings[1149] = ItemType.Potato; - mappings[1150] = ItemType.BakedPotato; - mappings[1151] = ItemType.PoisonousPotato; - mappings[1152] = ItemType.Map; - mappings[1153] = ItemType.GoldenCarrot; - mappings[1154] = ItemType.SkeletonSkull; - mappings[1155] = ItemType.WitherSkeletonSkull; - mappings[1156] = ItemType.PlayerHead; - mappings[1157] = ItemType.ZombieHead; - mappings[1158] = ItemType.CreeperHead; - mappings[1159] = ItemType.DragonHead; - mappings[1160] = ItemType.PiglinHead; - mappings[1161] = ItemType.NetherStar; - mappings[1162] = ItemType.PumpkinPie; - mappings[1163] = ItemType.FireworkRocket; - mappings[1164] = ItemType.FireworkStar; - mappings[1165] = ItemType.EnchantedBook; - mappings[1166] = ItemType.NetherBrick; - mappings[1167] = ItemType.ResinBrick; - mappings[1168] = ItemType.PrismarineShard; - mappings[1169] = ItemType.PrismarineCrystals; - mappings[1170] = ItemType.Rabbit; - mappings[1171] = ItemType.CookedRabbit; - mappings[1172] = ItemType.RabbitStew; - mappings[1173] = ItemType.RabbitFoot; - mappings[1174] = ItemType.RabbitHide; - mappings[1175] = ItemType.ArmorStand; - mappings[1176] = ItemType.IronHorseArmor; - mappings[1177] = ItemType.GoldenHorseArmor; - mappings[1178] = ItemType.DiamondHorseArmor; - mappings[1179] = ItemType.LeatherHorseArmor; - mappings[1180] = ItemType.Lead; - mappings[1181] = ItemType.NameTag; - mappings[1182] = ItemType.CommandBlockMinecart; - mappings[1183] = ItemType.Mutton; - mappings[1184] = ItemType.CookedMutton; - mappings[1185] = ItemType.WhiteBanner; - mappings[1186] = ItemType.OrangeBanner; - mappings[1187] = ItemType.MagentaBanner; - mappings[1188] = ItemType.LightBlueBanner; - mappings[1189] = ItemType.YellowBanner; - mappings[1190] = ItemType.LimeBanner; - mappings[1191] = ItemType.PinkBanner; - mappings[1192] = ItemType.GrayBanner; - mappings[1193] = ItemType.LightGrayBanner; - mappings[1194] = ItemType.CyanBanner; - mappings[1195] = ItemType.PurpleBanner; - mappings[1196] = ItemType.BlueBanner; - mappings[1197] = ItemType.BrownBanner; - mappings[1198] = ItemType.GreenBanner; - mappings[1199] = ItemType.RedBanner; - mappings[1200] = ItemType.BlackBanner; - mappings[1201] = ItemType.EndCrystal; - mappings[1202] = ItemType.ChorusFruit; - mappings[1203] = ItemType.PoppedChorusFruit; - mappings[1204] = ItemType.TorchflowerSeeds; - mappings[1205] = ItemType.PitcherPod; - mappings[1206] = ItemType.Beetroot; - mappings[1207] = ItemType.BeetrootSeeds; - mappings[1208] = ItemType.BeetrootSoup; - mappings[1209] = ItemType.DragonBreath; - mappings[1210] = ItemType.SplashPotion; - mappings[1211] = ItemType.SpectralArrow; - mappings[1212] = ItemType.TippedArrow; - mappings[1213] = ItemType.LingeringPotion; - mappings[1214] = ItemType.Shield; - mappings[1215] = ItemType.TotemOfUndying; - mappings[1216] = ItemType.ShulkerShell; - mappings[1217] = ItemType.IronNugget; - mappings[1218] = ItemType.KnowledgeBook; - mappings[1219] = ItemType.DebugStick; - mappings[1220] = ItemType.MusicDisc13; - mappings[1221] = ItemType.MusicDiscCat; - mappings[1222] = ItemType.MusicDiscBlocks; - mappings[1223] = ItemType.MusicDiscChirp; - mappings[1224] = ItemType.MusicDiscCreator; - mappings[1225] = ItemType.MusicDiscCreatorMusicBox; - mappings[1226] = ItemType.MusicDiscFar; - mappings[1227] = ItemType.MusicDiscMall; - mappings[1228] = ItemType.MusicDiscMellohi; - mappings[1229] = ItemType.MusicDiscStal; - mappings[1230] = ItemType.MusicDiscStrad; - mappings[1231] = ItemType.MusicDiscWard; - mappings[1232] = ItemType.MusicDisc11; - mappings[1233] = ItemType.MusicDiscWait; - mappings[1234] = ItemType.MusicDiscOtherside; - mappings[1235] = ItemType.MusicDiscRelic; - mappings[1236] = ItemType.MusicDisc5; - mappings[1237] = ItemType.MusicDiscPigstep; - mappings[1238] = ItemType.MusicDiscPrecipice; - mappings[1239] = ItemType.DiscFragment5; - mappings[1240] = ItemType.Trident; - mappings[1241] = ItemType.NautilusShell; - mappings[1242] = ItemType.HeartOfTheSea; - mappings[1243] = ItemType.Crossbow; - mappings[1244] = ItemType.SuspiciousStew; - mappings[1245] = ItemType.Loom; - mappings[1246] = ItemType.FlowerBannerPattern; - mappings[1247] = ItemType.CreeperBannerPattern; - mappings[1248] = ItemType.SkullBannerPattern; - mappings[1249] = ItemType.MojangBannerPattern; - mappings[1250] = ItemType.GlobeBannerPattern; - mappings[1251] = ItemType.PiglinBannerPattern; - mappings[1252] = ItemType.FlowBannerPattern; - mappings[1253] = ItemType.GusterBannerPattern; - mappings[1254] = ItemType.FieldMasonedBannerPattern; - mappings[1255] = ItemType.BordureIndentedBannerPattern; - mappings[1256] = ItemType.GoatHorn; - mappings[1257] = ItemType.Composter; - mappings[1258] = ItemType.Barrel; - mappings[1259] = ItemType.Smoker; - mappings[1260] = ItemType.BlastFurnace; - mappings[1261] = ItemType.CartographyTable; - mappings[1262] = ItemType.FletchingTable; - mappings[1263] = ItemType.Grindstone; - mappings[1264] = ItemType.SmithingTable; - mappings[1265] = ItemType.Stonecutter; - mappings[1266] = ItemType.Bell; - mappings[1267] = ItemType.Lantern; - mappings[1268] = ItemType.SoulLantern; - mappings[1269] = ItemType.SweetBerries; - mappings[1270] = ItemType.GlowBerries; - mappings[1271] = ItemType.Campfire; - mappings[1272] = ItemType.SoulCampfire; - mappings[1273] = ItemType.Shroomlight; - mappings[1274] = ItemType.Honeycomb; - mappings[1275] = ItemType.BeeNest; - mappings[1276] = ItemType.Beehive; - mappings[1277] = ItemType.HoneyBottle; - mappings[1278] = ItemType.HoneycombBlock; - mappings[1279] = ItemType.Lodestone; - mappings[1280] = ItemType.CryingObsidian; - mappings[1281] = ItemType.Blackstone; - mappings[1282] = ItemType.BlackstoneSlab; - mappings[1283] = ItemType.BlackstoneStairs; - mappings[1284] = ItemType.GildedBlackstone; - mappings[1285] = ItemType.PolishedBlackstone; - mappings[1286] = ItemType.PolishedBlackstoneSlab; - mappings[1287] = ItemType.PolishedBlackstoneStairs; - mappings[1288] = ItemType.ChiseledPolishedBlackstone; - mappings[1289] = ItemType.PolishedBlackstoneBricks; - mappings[1290] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1291] = ItemType.PolishedBlackstoneBrickStairs; - mappings[1292] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[1293] = ItemType.RespawnAnchor; - mappings[1294] = ItemType.Candle; - mappings[1295] = ItemType.WhiteCandle; - mappings[1296] = ItemType.OrangeCandle; - mappings[1297] = ItemType.MagentaCandle; - mappings[1298] = ItemType.LightBlueCandle; - mappings[1299] = ItemType.YellowCandle; - mappings[1300] = ItemType.LimeCandle; - mappings[1301] = ItemType.PinkCandle; - mappings[1302] = ItemType.GrayCandle; - mappings[1303] = ItemType.LightGrayCandle; - mappings[1304] = ItemType.CyanCandle; - mappings[1305] = ItemType.PurpleCandle; - mappings[1306] = ItemType.BlueCandle; - mappings[1307] = ItemType.BrownCandle; - mappings[1308] = ItemType.GreenCandle; - mappings[1309] = ItemType.RedCandle; - mappings[1310] = ItemType.BlackCandle; - mappings[1311] = ItemType.SmallAmethystBud; - mappings[1312] = ItemType.MediumAmethystBud; - mappings[1313] = ItemType.LargeAmethystBud; - mappings[1314] = ItemType.AmethystCluster; - mappings[1315] = ItemType.PointedDripstone; - mappings[1316] = ItemType.OchreFroglight; - mappings[1317] = ItemType.VerdantFroglight; - mappings[1318] = ItemType.PearlescentFroglight; - mappings[1319] = ItemType.Frogspawn; - mappings[1320] = ItemType.EchoShard; - mappings[1321] = ItemType.Brush; - mappings[1322] = ItemType.NetheriteUpgradeSmithingTemplate; - mappings[1323] = ItemType.SentryArmorTrimSmithingTemplate; - mappings[1324] = ItemType.DuneArmorTrimSmithingTemplate; - mappings[1325] = ItemType.CoastArmorTrimSmithingTemplate; - mappings[1326] = ItemType.WildArmorTrimSmithingTemplate; - mappings[1327] = ItemType.WardArmorTrimSmithingTemplate; - mappings[1328] = ItemType.EyeArmorTrimSmithingTemplate; - mappings[1329] = ItemType.VexArmorTrimSmithingTemplate; - mappings[1330] = ItemType.TideArmorTrimSmithingTemplate; - mappings[1331] = ItemType.SnoutArmorTrimSmithingTemplate; - mappings[1332] = ItemType.RibArmorTrimSmithingTemplate; - mappings[1333] = ItemType.SpireArmorTrimSmithingTemplate; - mappings[1334] = ItemType.WayfinderArmorTrimSmithingTemplate; - mappings[1335] = ItemType.ShaperArmorTrimSmithingTemplate; - mappings[1336] = ItemType.SilenceArmorTrimSmithingTemplate; - mappings[1337] = ItemType.RaiserArmorTrimSmithingTemplate; - mappings[1338] = ItemType.HostArmorTrimSmithingTemplate; - mappings[1339] = ItemType.FlowArmorTrimSmithingTemplate; - mappings[1340] = ItemType.BoltArmorTrimSmithingTemplate; - mappings[1341] = ItemType.AnglerPotterySherd; - mappings[1342] = ItemType.ArcherPotterySherd; - mappings[1343] = ItemType.ArmsUpPotterySherd; - mappings[1344] = ItemType.BladePotterySherd; - mappings[1345] = ItemType.BrewerPotterySherd; - mappings[1346] = ItemType.BurnPotterySherd; - mappings[1347] = ItemType.DangerPotterySherd; - mappings[1348] = ItemType.ExplorerPotterySherd; - mappings[1349] = ItemType.FlowPotterySherd; - mappings[1350] = ItemType.FriendPotterySherd; - mappings[1351] = ItemType.GusterPotterySherd; - mappings[1352] = ItemType.HeartPotterySherd; - mappings[1353] = ItemType.HeartbreakPotterySherd; - mappings[1354] = ItemType.HowlPotterySherd; - mappings[1355] = ItemType.MinerPotterySherd; - mappings[1356] = ItemType.MournerPotterySherd; - mappings[1357] = ItemType.PlentyPotterySherd; - mappings[1358] = ItemType.PrizePotterySherd; - mappings[1359] = ItemType.ScrapePotterySherd; - mappings[1360] = ItemType.SheafPotterySherd; - mappings[1361] = ItemType.ShelterPotterySherd; - mappings[1362] = ItemType.SkullPotterySherd; - mappings[1363] = ItemType.SnortPotterySherd; - mappings[1364] = ItemType.CopperGrate; - mappings[1365] = ItemType.ExposedCopperGrate; - mappings[1366] = ItemType.WeatheredCopperGrate; - mappings[1367] = ItemType.OxidizedCopperGrate; - mappings[1368] = ItemType.WaxedCopperGrate; - mappings[1369] = ItemType.WaxedExposedCopperGrate; - mappings[1370] = ItemType.WaxedWeatheredCopperGrate; - mappings[1371] = ItemType.WaxedOxidizedCopperGrate; - mappings[1372] = ItemType.CopperBulb; - mappings[1373] = ItemType.ExposedCopperBulb; - mappings[1374] = ItemType.WeatheredCopperBulb; - mappings[1375] = ItemType.OxidizedCopperBulb; - mappings[1376] = ItemType.WaxedCopperBulb; - mappings[1377] = ItemType.WaxedExposedCopperBulb; - mappings[1378] = ItemType.WaxedWeatheredCopperBulb; - mappings[1379] = ItemType.WaxedOxidizedCopperBulb; - mappings[1380] = ItemType.TrialSpawner; - mappings[1381] = ItemType.TrialKey; - mappings[1382] = ItemType.OminousTrialKey; - mappings[1383] = ItemType.Vault; - mappings[1384] = ItemType.OminousBottle; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1215.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette1215.cs deleted file mode 100644 index 19795e509a..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1215.cs +++ /dev/null @@ -1,1414 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette1215 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette1215() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.Deepslate; - mappings[9] = ItemType.CobbledDeepslate; - mappings[10] = ItemType.PolishedDeepslate; - mappings[11] = ItemType.Calcite; - mappings[12] = ItemType.Tuff; - mappings[13] = ItemType.TuffSlab; - mappings[14] = ItemType.TuffStairs; - mappings[15] = ItemType.TuffWall; - mappings[16] = ItemType.ChiseledTuff; - mappings[17] = ItemType.PolishedTuff; - mappings[18] = ItemType.PolishedTuffSlab; - mappings[19] = ItemType.PolishedTuffStairs; - mappings[20] = ItemType.PolishedTuffWall; - mappings[21] = ItemType.TuffBricks; - mappings[22] = ItemType.TuffBrickSlab; - mappings[23] = ItemType.TuffBrickStairs; - mappings[24] = ItemType.TuffBrickWall; - mappings[25] = ItemType.ChiseledTuffBricks; - mappings[26] = ItemType.DripstoneBlock; - mappings[27] = ItemType.GrassBlock; - mappings[28] = ItemType.Dirt; - mappings[29] = ItemType.CoarseDirt; - mappings[30] = ItemType.Podzol; - mappings[31] = ItemType.RootedDirt; - mappings[32] = ItemType.Mud; - mappings[33] = ItemType.CrimsonNylium; - mappings[34] = ItemType.WarpedNylium; - mappings[35] = ItemType.Cobblestone; - mappings[36] = ItemType.OakPlanks; - mappings[37] = ItemType.SprucePlanks; - mappings[38] = ItemType.BirchPlanks; - mappings[39] = ItemType.JunglePlanks; - mappings[40] = ItemType.AcaciaPlanks; - mappings[41] = ItemType.CherryPlanks; - mappings[42] = ItemType.DarkOakPlanks; - mappings[43] = ItemType.PaleOakPlanks; - mappings[44] = ItemType.MangrovePlanks; - mappings[45] = ItemType.BambooPlanks; - mappings[46] = ItemType.CrimsonPlanks; - mappings[47] = ItemType.WarpedPlanks; - mappings[48] = ItemType.BambooMosaic; - mappings[49] = ItemType.OakSapling; - mappings[50] = ItemType.SpruceSapling; - mappings[51] = ItemType.BirchSapling; - mappings[52] = ItemType.JungleSapling; - mappings[53] = ItemType.AcaciaSapling; - mappings[54] = ItemType.CherrySapling; - mappings[55] = ItemType.DarkOakSapling; - mappings[56] = ItemType.PaleOakSapling; - mappings[57] = ItemType.MangrovePropagule; - mappings[58] = ItemType.Bedrock; - mappings[59] = ItemType.Sand; - mappings[60] = ItemType.SuspiciousSand; - mappings[61] = ItemType.SuspiciousGravel; - mappings[62] = ItemType.RedSand; - mappings[63] = ItemType.Gravel; - mappings[64] = ItemType.CoalOre; - mappings[65] = ItemType.DeepslateCoalOre; - mappings[66] = ItemType.IronOre; - mappings[67] = ItemType.DeepslateIronOre; - mappings[68] = ItemType.CopperOre; - mappings[69] = ItemType.DeepslateCopperOre; - mappings[70] = ItemType.GoldOre; - mappings[71] = ItemType.DeepslateGoldOre; - mappings[72] = ItemType.RedstoneOre; - mappings[73] = ItemType.DeepslateRedstoneOre; - mappings[74] = ItemType.EmeraldOre; - mappings[75] = ItemType.DeepslateEmeraldOre; - mappings[76] = ItemType.LapisOre; - mappings[77] = ItemType.DeepslateLapisOre; - mappings[78] = ItemType.DiamondOre; - mappings[79] = ItemType.DeepslateDiamondOre; - mappings[80] = ItemType.NetherGoldOre; - mappings[81] = ItemType.NetherQuartzOre; - mappings[82] = ItemType.AncientDebris; - mappings[83] = ItemType.CoalBlock; - mappings[84] = ItemType.RawIronBlock; - mappings[85] = ItemType.RawCopperBlock; - mappings[86] = ItemType.RawGoldBlock; - mappings[87] = ItemType.HeavyCore; - mappings[88] = ItemType.AmethystBlock; - mappings[89] = ItemType.BuddingAmethyst; - mappings[90] = ItemType.IronBlock; - mappings[91] = ItemType.CopperBlock; - mappings[92] = ItemType.GoldBlock; - mappings[93] = ItemType.DiamondBlock; - mappings[94] = ItemType.NetheriteBlock; - mappings[95] = ItemType.ExposedCopper; - mappings[96] = ItemType.WeatheredCopper; - mappings[97] = ItemType.OxidizedCopper; - mappings[98] = ItemType.ChiseledCopper; - mappings[99] = ItemType.ExposedChiseledCopper; - mappings[100] = ItemType.WeatheredChiseledCopper; - mappings[101] = ItemType.OxidizedChiseledCopper; - mappings[102] = ItemType.CutCopper; - mappings[103] = ItemType.ExposedCutCopper; - mappings[104] = ItemType.WeatheredCutCopper; - mappings[105] = ItemType.OxidizedCutCopper; - mappings[106] = ItemType.CutCopperStairs; - mappings[107] = ItemType.ExposedCutCopperStairs; - mappings[108] = ItemType.WeatheredCutCopperStairs; - mappings[109] = ItemType.OxidizedCutCopperStairs; - mappings[110] = ItemType.CutCopperSlab; - mappings[111] = ItemType.ExposedCutCopperSlab; - mappings[112] = ItemType.WeatheredCutCopperSlab; - mappings[113] = ItemType.OxidizedCutCopperSlab; - mappings[114] = ItemType.WaxedCopperBlock; - mappings[115] = ItemType.WaxedExposedCopper; - mappings[116] = ItemType.WaxedWeatheredCopper; - mappings[117] = ItemType.WaxedOxidizedCopper; - mappings[118] = ItemType.WaxedChiseledCopper; - mappings[119] = ItemType.WaxedExposedChiseledCopper; - mappings[120] = ItemType.WaxedWeatheredChiseledCopper; - mappings[121] = ItemType.WaxedOxidizedChiseledCopper; - mappings[122] = ItemType.WaxedCutCopper; - mappings[123] = ItemType.WaxedExposedCutCopper; - mappings[124] = ItemType.WaxedWeatheredCutCopper; - mappings[125] = ItemType.WaxedOxidizedCutCopper; - mappings[126] = ItemType.WaxedCutCopperStairs; - mappings[127] = ItemType.WaxedExposedCutCopperStairs; - mappings[128] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[129] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[130] = ItemType.WaxedCutCopperSlab; - mappings[131] = ItemType.WaxedExposedCutCopperSlab; - mappings[132] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[133] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[134] = ItemType.OakLog; - mappings[135] = ItemType.SpruceLog; - mappings[136] = ItemType.BirchLog; - mappings[137] = ItemType.JungleLog; - mappings[138] = ItemType.AcaciaLog; - mappings[139] = ItemType.CherryLog; - mappings[140] = ItemType.PaleOakLog; - mappings[141] = ItemType.DarkOakLog; - mappings[142] = ItemType.MangroveLog; - mappings[143] = ItemType.MangroveRoots; - mappings[144] = ItemType.MuddyMangroveRoots; - mappings[145] = ItemType.CrimsonStem; - mappings[146] = ItemType.WarpedStem; - mappings[147] = ItemType.BambooBlock; - mappings[148] = ItemType.StrippedOakLog; - mappings[149] = ItemType.StrippedSpruceLog; - mappings[150] = ItemType.StrippedBirchLog; - mappings[151] = ItemType.StrippedJungleLog; - mappings[152] = ItemType.StrippedAcaciaLog; - mappings[153] = ItemType.StrippedCherryLog; - mappings[154] = ItemType.StrippedDarkOakLog; - mappings[155] = ItemType.StrippedPaleOakLog; - mappings[156] = ItemType.StrippedMangroveLog; - mappings[157] = ItemType.StrippedCrimsonStem; - mappings[158] = ItemType.StrippedWarpedStem; - mappings[159] = ItemType.StrippedOakWood; - mappings[160] = ItemType.StrippedSpruceWood; - mappings[161] = ItemType.StrippedBirchWood; - mappings[162] = ItemType.StrippedJungleWood; - mappings[163] = ItemType.StrippedAcaciaWood; - mappings[164] = ItemType.StrippedCherryWood; - mappings[165] = ItemType.StrippedDarkOakWood; - mappings[166] = ItemType.StrippedPaleOakWood; - mappings[167] = ItemType.StrippedMangroveWood; - mappings[168] = ItemType.StrippedCrimsonHyphae; - mappings[169] = ItemType.StrippedWarpedHyphae; - mappings[170] = ItemType.StrippedBambooBlock; - mappings[171] = ItemType.OakWood; - mappings[172] = ItemType.SpruceWood; - mappings[173] = ItemType.BirchWood; - mappings[174] = ItemType.JungleWood; - mappings[175] = ItemType.AcaciaWood; - mappings[176] = ItemType.CherryWood; - mappings[177] = ItemType.PaleOakWood; - mappings[178] = ItemType.DarkOakWood; - mappings[179] = ItemType.MangroveWood; - mappings[180] = ItemType.CrimsonHyphae; - mappings[181] = ItemType.WarpedHyphae; - mappings[182] = ItemType.OakLeaves; - mappings[183] = ItemType.SpruceLeaves; - mappings[184] = ItemType.BirchLeaves; - mappings[185] = ItemType.JungleLeaves; - mappings[186] = ItemType.AcaciaLeaves; - mappings[187] = ItemType.CherryLeaves; - mappings[188] = ItemType.DarkOakLeaves; - mappings[189] = ItemType.PaleOakLeaves; - mappings[190] = ItemType.MangroveLeaves; - mappings[191] = ItemType.AzaleaLeaves; - mappings[192] = ItemType.FloweringAzaleaLeaves; - mappings[193] = ItemType.Sponge; - mappings[194] = ItemType.WetSponge; - mappings[195] = ItemType.Glass; - mappings[196] = ItemType.TintedGlass; - mappings[197] = ItemType.LapisBlock; - mappings[198] = ItemType.Sandstone; - mappings[199] = ItemType.ChiseledSandstone; - mappings[200] = ItemType.CutSandstone; - mappings[201] = ItemType.Cobweb; - mappings[202] = ItemType.ShortGrass; - mappings[203] = ItemType.Fern; - mappings[204] = ItemType.Bush; - mappings[205] = ItemType.Azalea; - mappings[206] = ItemType.FloweringAzalea; - mappings[207] = ItemType.DeadBush; - mappings[208] = ItemType.FireflyBush; - mappings[209] = ItemType.DryShortGrass; - mappings[210] = ItemType.DryTallGrass; - mappings[211] = ItemType.Seagrass; - mappings[212] = ItemType.SeaPickle; - mappings[213] = ItemType.WhiteWool; - mappings[214] = ItemType.OrangeWool; - mappings[215] = ItemType.MagentaWool; - mappings[216] = ItemType.LightBlueWool; - mappings[217] = ItemType.YellowWool; - mappings[218] = ItemType.LimeWool; - mappings[219] = ItemType.PinkWool; - mappings[220] = ItemType.GrayWool; - mappings[221] = ItemType.LightGrayWool; - mappings[222] = ItemType.CyanWool; - mappings[223] = ItemType.PurpleWool; - mappings[224] = ItemType.BlueWool; - mappings[225] = ItemType.BrownWool; - mappings[226] = ItemType.GreenWool; - mappings[227] = ItemType.RedWool; - mappings[228] = ItemType.BlackWool; - mappings[229] = ItemType.Dandelion; - mappings[230] = ItemType.OpenEyeblossom; - mappings[231] = ItemType.ClosedEyeblossom; - mappings[232] = ItemType.Poppy; - mappings[233] = ItemType.BlueOrchid; - mappings[234] = ItemType.Allium; - mappings[235] = ItemType.AzureBluet; - mappings[236] = ItemType.RedTulip; - mappings[237] = ItemType.OrangeTulip; - mappings[238] = ItemType.WhiteTulip; - mappings[239] = ItemType.PinkTulip; - mappings[240] = ItemType.OxeyeDaisy; - mappings[241] = ItemType.Cornflower; - mappings[242] = ItemType.LilyOfTheValley; - mappings[243] = ItemType.WitherRose; - mappings[244] = ItemType.Torchflower; - mappings[245] = ItemType.PitcherPlant; - mappings[246] = ItemType.SporeBlossom; - mappings[247] = ItemType.BrownMushroom; - mappings[248] = ItemType.RedMushroom; - mappings[249] = ItemType.CrimsonFungus; - mappings[250] = ItemType.WarpedFungus; - mappings[251] = ItemType.CrimsonRoots; - mappings[252] = ItemType.WarpedRoots; - mappings[253] = ItemType.NetherSprouts; - mappings[254] = ItemType.WeepingVines; - mappings[255] = ItemType.TwistingVines; - mappings[256] = ItemType.SugarCane; - mappings[257] = ItemType.Kelp; - mappings[258] = ItemType.PinkPetals; - mappings[259] = ItemType.Wildflowers; - mappings[260] = ItemType.LeafLitter; - mappings[261] = ItemType.MossCarpet; - mappings[262] = ItemType.MossBlock; - mappings[263] = ItemType.PaleMossCarpet; - mappings[264] = ItemType.PaleHangingMoss; - mappings[265] = ItemType.PaleMossBlock; - mappings[266] = ItemType.HangingRoots; - mappings[267] = ItemType.BigDripleaf; - mappings[268] = ItemType.SmallDripleaf; - mappings[269] = ItemType.Bamboo; - mappings[270] = ItemType.OakSlab; - mappings[271] = ItemType.SpruceSlab; - mappings[272] = ItemType.BirchSlab; - mappings[273] = ItemType.JungleSlab; - mappings[274] = ItemType.AcaciaSlab; - mappings[275] = ItemType.CherrySlab; - mappings[276] = ItemType.DarkOakSlab; - mappings[277] = ItemType.PaleOakSlab; - mappings[278] = ItemType.MangroveSlab; - mappings[279] = ItemType.BambooSlab; - mappings[280] = ItemType.BambooMosaicSlab; - mappings[281] = ItemType.CrimsonSlab; - mappings[282] = ItemType.WarpedSlab; - mappings[283] = ItemType.StoneSlab; - mappings[284] = ItemType.SmoothStoneSlab; - mappings[285] = ItemType.SandstoneSlab; - mappings[286] = ItemType.CutSandstoneSlab; - mappings[287] = ItemType.PetrifiedOakSlab; - mappings[288] = ItemType.CobblestoneSlab; - mappings[289] = ItemType.BrickSlab; - mappings[290] = ItemType.StoneBrickSlab; - mappings[291] = ItemType.MudBrickSlab; - mappings[292] = ItemType.NetherBrickSlab; - mappings[293] = ItemType.QuartzSlab; - mappings[294] = ItemType.RedSandstoneSlab; - mappings[295] = ItemType.CutRedSandstoneSlab; - mappings[296] = ItemType.PurpurSlab; - mappings[297] = ItemType.PrismarineSlab; - mappings[298] = ItemType.PrismarineBrickSlab; - mappings[299] = ItemType.DarkPrismarineSlab; - mappings[300] = ItemType.SmoothQuartz; - mappings[301] = ItemType.SmoothRedSandstone; - mappings[302] = ItemType.SmoothSandstone; - mappings[303] = ItemType.SmoothStone; - mappings[304] = ItemType.Bricks; - mappings[305] = ItemType.Bookshelf; - mappings[306] = ItemType.ChiseledBookshelf; - mappings[307] = ItemType.DecoratedPot; - mappings[308] = ItemType.MossyCobblestone; - mappings[309] = ItemType.Obsidian; - mappings[310] = ItemType.Torch; - mappings[311] = ItemType.EndRod; - mappings[312] = ItemType.ChorusPlant; - mappings[313] = ItemType.ChorusFlower; - mappings[314] = ItemType.PurpurBlock; - mappings[315] = ItemType.PurpurPillar; - mappings[316] = ItemType.PurpurStairs; - mappings[317] = ItemType.Spawner; - mappings[318] = ItemType.CreakingHeart; - mappings[319] = ItemType.Chest; - mappings[320] = ItemType.CraftingTable; - mappings[321] = ItemType.Farmland; - mappings[322] = ItemType.Furnace; - mappings[323] = ItemType.Ladder; - mappings[324] = ItemType.CobblestoneStairs; - mappings[325] = ItemType.Snow; - mappings[326] = ItemType.Ice; - mappings[327] = ItemType.SnowBlock; - mappings[328] = ItemType.Cactus; - mappings[329] = ItemType.CactusFlower; - mappings[330] = ItemType.Clay; - mappings[331] = ItemType.Jukebox; - mappings[332] = ItemType.OakFence; - mappings[333] = ItemType.SpruceFence; - mappings[334] = ItemType.BirchFence; - mappings[335] = ItemType.JungleFence; - mappings[336] = ItemType.AcaciaFence; - mappings[337] = ItemType.CherryFence; - mappings[338] = ItemType.DarkOakFence; - mappings[339] = ItemType.PaleOakFence; - mappings[340] = ItemType.MangroveFence; - mappings[341] = ItemType.BambooFence; - mappings[342] = ItemType.CrimsonFence; - mappings[343] = ItemType.WarpedFence; - mappings[344] = ItemType.Pumpkin; - mappings[345] = ItemType.CarvedPumpkin; - mappings[346] = ItemType.JackOLantern; - mappings[347] = ItemType.Netherrack; - mappings[348] = ItemType.SoulSand; - mappings[349] = ItemType.SoulSoil; - mappings[350] = ItemType.Basalt; - mappings[351] = ItemType.PolishedBasalt; - mappings[352] = ItemType.SmoothBasalt; - mappings[353] = ItemType.SoulTorch; - mappings[354] = ItemType.Glowstone; - mappings[355] = ItemType.InfestedStone; - mappings[356] = ItemType.InfestedCobblestone; - mappings[357] = ItemType.InfestedStoneBricks; - mappings[358] = ItemType.InfestedMossyStoneBricks; - mappings[359] = ItemType.InfestedCrackedStoneBricks; - mappings[360] = ItemType.InfestedChiseledStoneBricks; - mappings[361] = ItemType.InfestedDeepslate; - mappings[362] = ItemType.StoneBricks; - mappings[363] = ItemType.MossyStoneBricks; - mappings[364] = ItemType.CrackedStoneBricks; - mappings[365] = ItemType.ChiseledStoneBricks; - mappings[366] = ItemType.PackedMud; - mappings[367] = ItemType.MudBricks; - mappings[368] = ItemType.DeepslateBricks; - mappings[369] = ItemType.CrackedDeepslateBricks; - mappings[370] = ItemType.DeepslateTiles; - mappings[371] = ItemType.CrackedDeepslateTiles; - mappings[372] = ItemType.ChiseledDeepslate; - mappings[373] = ItemType.ReinforcedDeepslate; - mappings[374] = ItemType.BrownMushroomBlock; - mappings[375] = ItemType.RedMushroomBlock; - mappings[376] = ItemType.MushroomStem; - mappings[377] = ItemType.IronBars; - mappings[378] = ItemType.Chain; - mappings[379] = ItemType.GlassPane; - mappings[380] = ItemType.Melon; - mappings[381] = ItemType.Vine; - mappings[382] = ItemType.GlowLichen; - mappings[383] = ItemType.ResinClump; - mappings[384] = ItemType.ResinBlock; - mappings[385] = ItemType.ResinBricks; - mappings[386] = ItemType.ResinBrickStairs; - mappings[387] = ItemType.ResinBrickSlab; - mappings[388] = ItemType.ResinBrickWall; - mappings[389] = ItemType.ChiseledResinBricks; - mappings[390] = ItemType.BrickStairs; - mappings[391] = ItemType.StoneBrickStairs; - mappings[392] = ItemType.MudBrickStairs; - mappings[393] = ItemType.Mycelium; - mappings[394] = ItemType.LilyPad; - mappings[395] = ItemType.NetherBricks; - mappings[396] = ItemType.CrackedNetherBricks; - mappings[397] = ItemType.ChiseledNetherBricks; - mappings[398] = ItemType.NetherBrickFence; - mappings[399] = ItemType.NetherBrickStairs; - mappings[400] = ItemType.Sculk; - mappings[401] = ItemType.SculkVein; - mappings[402] = ItemType.SculkCatalyst; - mappings[403] = ItemType.SculkShrieker; - mappings[404] = ItemType.EnchantingTable; - mappings[405] = ItemType.EndPortalFrame; - mappings[406] = ItemType.EndStone; - mappings[407] = ItemType.EndStoneBricks; - mappings[408] = ItemType.DragonEgg; - mappings[409] = ItemType.SandstoneStairs; - mappings[410] = ItemType.EnderChest; - mappings[411] = ItemType.EmeraldBlock; - mappings[412] = ItemType.OakStairs; - mappings[413] = ItemType.SpruceStairs; - mappings[414] = ItemType.BirchStairs; - mappings[415] = ItemType.JungleStairs; - mappings[416] = ItemType.AcaciaStairs; - mappings[417] = ItemType.CherryStairs; - mappings[418] = ItemType.DarkOakStairs; - mappings[419] = ItemType.PaleOakStairs; - mappings[420] = ItemType.MangroveStairs; - mappings[421] = ItemType.BambooStairs; - mappings[422] = ItemType.BambooMosaicStairs; - mappings[423] = ItemType.CrimsonStairs; - mappings[424] = ItemType.WarpedStairs; - mappings[425] = ItemType.CommandBlock; - mappings[426] = ItemType.Beacon; - mappings[427] = ItemType.CobblestoneWall; - mappings[428] = ItemType.MossyCobblestoneWall; - mappings[429] = ItemType.BrickWall; - mappings[430] = ItemType.PrismarineWall; - mappings[431] = ItemType.RedSandstoneWall; - mappings[432] = ItemType.MossyStoneBrickWall; - mappings[433] = ItemType.GraniteWall; - mappings[434] = ItemType.StoneBrickWall; - mappings[435] = ItemType.MudBrickWall; - mappings[436] = ItemType.NetherBrickWall; - mappings[437] = ItemType.AndesiteWall; - mappings[438] = ItemType.RedNetherBrickWall; - mappings[439] = ItemType.SandstoneWall; - mappings[440] = ItemType.EndStoneBrickWall; - mappings[441] = ItemType.DioriteWall; - mappings[442] = ItemType.BlackstoneWall; - mappings[443] = ItemType.PolishedBlackstoneWall; - mappings[444] = ItemType.PolishedBlackstoneBrickWall; - mappings[445] = ItemType.CobbledDeepslateWall; - mappings[446] = ItemType.PolishedDeepslateWall; - mappings[447] = ItemType.DeepslateBrickWall; - mappings[448] = ItemType.DeepslateTileWall; - mappings[449] = ItemType.Anvil; - mappings[450] = ItemType.ChippedAnvil; - mappings[451] = ItemType.DamagedAnvil; - mappings[452] = ItemType.ChiseledQuartzBlock; - mappings[453] = ItemType.QuartzBlock; - mappings[454] = ItemType.QuartzBricks; - mappings[455] = ItemType.QuartzPillar; - mappings[456] = ItemType.QuartzStairs; - mappings[457] = ItemType.WhiteTerracotta; - mappings[458] = ItemType.OrangeTerracotta; - mappings[459] = ItemType.MagentaTerracotta; - mappings[460] = ItemType.LightBlueTerracotta; - mappings[461] = ItemType.YellowTerracotta; - mappings[462] = ItemType.LimeTerracotta; - mappings[463] = ItemType.PinkTerracotta; - mappings[464] = ItemType.GrayTerracotta; - mappings[465] = ItemType.LightGrayTerracotta; - mappings[466] = ItemType.CyanTerracotta; - mappings[467] = ItemType.PurpleTerracotta; - mappings[468] = ItemType.BlueTerracotta; - mappings[469] = ItemType.BrownTerracotta; - mappings[470] = ItemType.GreenTerracotta; - mappings[471] = ItemType.RedTerracotta; - mappings[472] = ItemType.BlackTerracotta; - mappings[473] = ItemType.Barrier; - mappings[474] = ItemType.Light; - mappings[475] = ItemType.HayBlock; - mappings[476] = ItemType.WhiteCarpet; - mappings[477] = ItemType.OrangeCarpet; - mappings[478] = ItemType.MagentaCarpet; - mappings[479] = ItemType.LightBlueCarpet; - mappings[480] = ItemType.YellowCarpet; - mappings[481] = ItemType.LimeCarpet; - mappings[482] = ItemType.PinkCarpet; - mappings[483] = ItemType.GrayCarpet; - mappings[484] = ItemType.LightGrayCarpet; - mappings[485] = ItemType.CyanCarpet; - mappings[486] = ItemType.PurpleCarpet; - mappings[487] = ItemType.BlueCarpet; - mappings[488] = ItemType.BrownCarpet; - mappings[489] = ItemType.GreenCarpet; - mappings[490] = ItemType.RedCarpet; - mappings[491] = ItemType.BlackCarpet; - mappings[492] = ItemType.Terracotta; - mappings[493] = ItemType.PackedIce; - mappings[494] = ItemType.DirtPath; - mappings[495] = ItemType.Sunflower; - mappings[496] = ItemType.Lilac; - mappings[497] = ItemType.RoseBush; - mappings[498] = ItemType.Peony; - mappings[499] = ItemType.TallGrass; - mappings[500] = ItemType.LargeFern; - mappings[501] = ItemType.WhiteStainedGlass; - mappings[502] = ItemType.OrangeStainedGlass; - mappings[503] = ItemType.MagentaStainedGlass; - mappings[504] = ItemType.LightBlueStainedGlass; - mappings[505] = ItemType.YellowStainedGlass; - mappings[506] = ItemType.LimeStainedGlass; - mappings[507] = ItemType.PinkStainedGlass; - mappings[508] = ItemType.GrayStainedGlass; - mappings[509] = ItemType.LightGrayStainedGlass; - mappings[510] = ItemType.CyanStainedGlass; - mappings[511] = ItemType.PurpleStainedGlass; - mappings[512] = ItemType.BlueStainedGlass; - mappings[513] = ItemType.BrownStainedGlass; - mappings[514] = ItemType.GreenStainedGlass; - mappings[515] = ItemType.RedStainedGlass; - mappings[516] = ItemType.BlackStainedGlass; - mappings[517] = ItemType.WhiteStainedGlassPane; - mappings[518] = ItemType.OrangeStainedGlassPane; - mappings[519] = ItemType.MagentaStainedGlassPane; - mappings[520] = ItemType.LightBlueStainedGlassPane; - mappings[521] = ItemType.YellowStainedGlassPane; - mappings[522] = ItemType.LimeStainedGlassPane; - mappings[523] = ItemType.PinkStainedGlassPane; - mappings[524] = ItemType.GrayStainedGlassPane; - mappings[525] = ItemType.LightGrayStainedGlassPane; - mappings[526] = ItemType.CyanStainedGlassPane; - mappings[527] = ItemType.PurpleStainedGlassPane; - mappings[528] = ItemType.BlueStainedGlassPane; - mappings[529] = ItemType.BrownStainedGlassPane; - mappings[530] = ItemType.GreenStainedGlassPane; - mappings[531] = ItemType.RedStainedGlassPane; - mappings[532] = ItemType.BlackStainedGlassPane; - mappings[533] = ItemType.Prismarine; - mappings[534] = ItemType.PrismarineBricks; - mappings[535] = ItemType.DarkPrismarine; - mappings[536] = ItemType.PrismarineStairs; - mappings[537] = ItemType.PrismarineBrickStairs; - mappings[538] = ItemType.DarkPrismarineStairs; - mappings[539] = ItemType.SeaLantern; - mappings[540] = ItemType.RedSandstone; - mappings[541] = ItemType.ChiseledRedSandstone; - mappings[542] = ItemType.CutRedSandstone; - mappings[543] = ItemType.RedSandstoneStairs; - mappings[544] = ItemType.RepeatingCommandBlock; - mappings[545] = ItemType.ChainCommandBlock; - mappings[546] = ItemType.MagmaBlock; - mappings[547] = ItemType.NetherWartBlock; - mappings[548] = ItemType.WarpedWartBlock; - mappings[549] = ItemType.RedNetherBricks; - mappings[550] = ItemType.BoneBlock; - mappings[551] = ItemType.StructureVoid; - mappings[552] = ItemType.ShulkerBox; - mappings[553] = ItemType.WhiteShulkerBox; - mappings[554] = ItemType.OrangeShulkerBox; - mappings[555] = ItemType.MagentaShulkerBox; - mappings[556] = ItemType.LightBlueShulkerBox; - mappings[557] = ItemType.YellowShulkerBox; - mappings[558] = ItemType.LimeShulkerBox; - mappings[559] = ItemType.PinkShulkerBox; - mappings[560] = ItemType.GrayShulkerBox; - mappings[561] = ItemType.LightGrayShulkerBox; - mappings[562] = ItemType.CyanShulkerBox; - mappings[563] = ItemType.PurpleShulkerBox; - mappings[564] = ItemType.BlueShulkerBox; - mappings[565] = ItemType.BrownShulkerBox; - mappings[566] = ItemType.GreenShulkerBox; - mappings[567] = ItemType.RedShulkerBox; - mappings[568] = ItemType.BlackShulkerBox; - mappings[569] = ItemType.WhiteGlazedTerracotta; - mappings[570] = ItemType.OrangeGlazedTerracotta; - mappings[571] = ItemType.MagentaGlazedTerracotta; - mappings[572] = ItemType.LightBlueGlazedTerracotta; - mappings[573] = ItemType.YellowGlazedTerracotta; - mappings[574] = ItemType.LimeGlazedTerracotta; - mappings[575] = ItemType.PinkGlazedTerracotta; - mappings[576] = ItemType.GrayGlazedTerracotta; - mappings[577] = ItemType.LightGrayGlazedTerracotta; - mappings[578] = ItemType.CyanGlazedTerracotta; - mappings[579] = ItemType.PurpleGlazedTerracotta; - mappings[580] = ItemType.BlueGlazedTerracotta; - mappings[581] = ItemType.BrownGlazedTerracotta; - mappings[582] = ItemType.GreenGlazedTerracotta; - mappings[583] = ItemType.RedGlazedTerracotta; - mappings[584] = ItemType.BlackGlazedTerracotta; - mappings[585] = ItemType.WhiteConcrete; - mappings[586] = ItemType.OrangeConcrete; - mappings[587] = ItemType.MagentaConcrete; - mappings[588] = ItemType.LightBlueConcrete; - mappings[589] = ItemType.YellowConcrete; - mappings[590] = ItemType.LimeConcrete; - mappings[591] = ItemType.PinkConcrete; - mappings[592] = ItemType.GrayConcrete; - mappings[593] = ItemType.LightGrayConcrete; - mappings[594] = ItemType.CyanConcrete; - mappings[595] = ItemType.PurpleConcrete; - mappings[596] = ItemType.BlueConcrete; - mappings[597] = ItemType.BrownConcrete; - mappings[598] = ItemType.GreenConcrete; - mappings[599] = ItemType.RedConcrete; - mappings[600] = ItemType.BlackConcrete; - mappings[601] = ItemType.WhiteConcretePowder; - mappings[602] = ItemType.OrangeConcretePowder; - mappings[603] = ItemType.MagentaConcretePowder; - mappings[604] = ItemType.LightBlueConcretePowder; - mappings[605] = ItemType.YellowConcretePowder; - mappings[606] = ItemType.LimeConcretePowder; - mappings[607] = ItemType.PinkConcretePowder; - mappings[608] = ItemType.GrayConcretePowder; - mappings[609] = ItemType.LightGrayConcretePowder; - mappings[610] = ItemType.CyanConcretePowder; - mappings[611] = ItemType.PurpleConcretePowder; - mappings[612] = ItemType.BlueConcretePowder; - mappings[613] = ItemType.BrownConcretePowder; - mappings[614] = ItemType.GreenConcretePowder; - mappings[615] = ItemType.RedConcretePowder; - mappings[616] = ItemType.BlackConcretePowder; - mappings[617] = ItemType.TurtleEgg; - mappings[618] = ItemType.SnifferEgg; - mappings[619] = ItemType.DeadTubeCoralBlock; - mappings[620] = ItemType.DeadBrainCoralBlock; - mappings[621] = ItemType.DeadBubbleCoralBlock; - mappings[622] = ItemType.DeadFireCoralBlock; - mappings[623] = ItemType.DeadHornCoralBlock; - mappings[624] = ItemType.TubeCoralBlock; - mappings[625] = ItemType.BrainCoralBlock; - mappings[626] = ItemType.BubbleCoralBlock; - mappings[627] = ItemType.FireCoralBlock; - mappings[628] = ItemType.HornCoralBlock; - mappings[629] = ItemType.TubeCoral; - mappings[630] = ItemType.BrainCoral; - mappings[631] = ItemType.BubbleCoral; - mappings[632] = ItemType.FireCoral; - mappings[633] = ItemType.HornCoral; - mappings[634] = ItemType.DeadBrainCoral; - mappings[635] = ItemType.DeadBubbleCoral; - mappings[636] = ItemType.DeadFireCoral; - mappings[637] = ItemType.DeadHornCoral; - mappings[638] = ItemType.DeadTubeCoral; - mappings[639] = ItemType.TubeCoralFan; - mappings[640] = ItemType.BrainCoralFan; - mappings[641] = ItemType.BubbleCoralFan; - mappings[642] = ItemType.FireCoralFan; - mappings[643] = ItemType.HornCoralFan; - mappings[644] = ItemType.DeadTubeCoralFan; - mappings[645] = ItemType.DeadBrainCoralFan; - mappings[646] = ItemType.DeadBubbleCoralFan; - mappings[647] = ItemType.DeadFireCoralFan; - mappings[648] = ItemType.DeadHornCoralFan; - mappings[649] = ItemType.BlueIce; - mappings[650] = ItemType.Conduit; - mappings[651] = ItemType.PolishedGraniteStairs; - mappings[652] = ItemType.SmoothRedSandstoneStairs; - mappings[653] = ItemType.MossyStoneBrickStairs; - mappings[654] = ItemType.PolishedDioriteStairs; - mappings[655] = ItemType.MossyCobblestoneStairs; - mappings[656] = ItemType.EndStoneBrickStairs; - mappings[657] = ItemType.StoneStairs; - mappings[658] = ItemType.SmoothSandstoneStairs; - mappings[659] = ItemType.SmoothQuartzStairs; - mappings[660] = ItemType.GraniteStairs; - mappings[661] = ItemType.AndesiteStairs; - mappings[662] = ItemType.RedNetherBrickStairs; - mappings[663] = ItemType.PolishedAndesiteStairs; - mappings[664] = ItemType.DioriteStairs; - mappings[665] = ItemType.CobbledDeepslateStairs; - mappings[666] = ItemType.PolishedDeepslateStairs; - mappings[667] = ItemType.DeepslateBrickStairs; - mappings[668] = ItemType.DeepslateTileStairs; - mappings[669] = ItemType.PolishedGraniteSlab; - mappings[670] = ItemType.SmoothRedSandstoneSlab; - mappings[671] = ItemType.MossyStoneBrickSlab; - mappings[672] = ItemType.PolishedDioriteSlab; - mappings[673] = ItemType.MossyCobblestoneSlab; - mappings[674] = ItemType.EndStoneBrickSlab; - mappings[675] = ItemType.SmoothSandstoneSlab; - mappings[676] = ItemType.SmoothQuartzSlab; - mappings[677] = ItemType.GraniteSlab; - mappings[678] = ItemType.AndesiteSlab; - mappings[679] = ItemType.RedNetherBrickSlab; - mappings[680] = ItemType.PolishedAndesiteSlab; - mappings[681] = ItemType.DioriteSlab; - mappings[682] = ItemType.CobbledDeepslateSlab; - mappings[683] = ItemType.PolishedDeepslateSlab; - mappings[684] = ItemType.DeepslateBrickSlab; - mappings[685] = ItemType.DeepslateTileSlab; - mappings[686] = ItemType.Scaffolding; - mappings[687] = ItemType.Redstone; - mappings[688] = ItemType.RedstoneTorch; - mappings[689] = ItemType.RedstoneBlock; - mappings[690] = ItemType.Repeater; - mappings[691] = ItemType.Comparator; - mappings[692] = ItemType.Piston; - mappings[693] = ItemType.StickyPiston; - mappings[694] = ItemType.SlimeBlock; - mappings[695] = ItemType.HoneyBlock; - mappings[696] = ItemType.Observer; - mappings[697] = ItemType.Hopper; - mappings[698] = ItemType.Dispenser; - mappings[699] = ItemType.Dropper; - mappings[700] = ItemType.Lectern; - mappings[701] = ItemType.Target; - mappings[702] = ItemType.Lever; - mappings[703] = ItemType.LightningRod; - mappings[704] = ItemType.DaylightDetector; - mappings[705] = ItemType.SculkSensor; - mappings[706] = ItemType.CalibratedSculkSensor; - mappings[707] = ItemType.TripwireHook; - mappings[708] = ItemType.TrappedChest; - mappings[709] = ItemType.Tnt; - mappings[710] = ItemType.RedstoneLamp; - mappings[711] = ItemType.NoteBlock; - mappings[712] = ItemType.StoneButton; - mappings[713] = ItemType.PolishedBlackstoneButton; - mappings[714] = ItemType.OakButton; - mappings[715] = ItemType.SpruceButton; - mappings[716] = ItemType.BirchButton; - mappings[717] = ItemType.JungleButton; - mappings[718] = ItemType.AcaciaButton; - mappings[719] = ItemType.CherryButton; - mappings[720] = ItemType.DarkOakButton; - mappings[721] = ItemType.PaleOakButton; - mappings[722] = ItemType.MangroveButton; - mappings[723] = ItemType.BambooButton; - mappings[724] = ItemType.CrimsonButton; - mappings[725] = ItemType.WarpedButton; - mappings[726] = ItemType.StonePressurePlate; - mappings[727] = ItemType.PolishedBlackstonePressurePlate; - mappings[728] = ItemType.LightWeightedPressurePlate; - mappings[729] = ItemType.HeavyWeightedPressurePlate; - mappings[730] = ItemType.OakPressurePlate; - mappings[731] = ItemType.SprucePressurePlate; - mappings[732] = ItemType.BirchPressurePlate; - mappings[733] = ItemType.JunglePressurePlate; - mappings[734] = ItemType.AcaciaPressurePlate; - mappings[735] = ItemType.CherryPressurePlate; - mappings[736] = ItemType.DarkOakPressurePlate; - mappings[737] = ItemType.PaleOakPressurePlate; - mappings[738] = ItemType.MangrovePressurePlate; - mappings[739] = ItemType.BambooPressurePlate; - mappings[740] = ItemType.CrimsonPressurePlate; - mappings[741] = ItemType.WarpedPressurePlate; - mappings[742] = ItemType.IronDoor; - mappings[743] = ItemType.OakDoor; - mappings[744] = ItemType.SpruceDoor; - mappings[745] = ItemType.BirchDoor; - mappings[746] = ItemType.JungleDoor; - mappings[747] = ItemType.AcaciaDoor; - mappings[748] = ItemType.CherryDoor; - mappings[749] = ItemType.DarkOakDoor; - mappings[750] = ItemType.PaleOakDoor; - mappings[751] = ItemType.MangroveDoor; - mappings[752] = ItemType.BambooDoor; - mappings[753] = ItemType.CrimsonDoor; - mappings[754] = ItemType.WarpedDoor; - mappings[755] = ItemType.CopperDoor; - mappings[756] = ItemType.ExposedCopperDoor; - mappings[757] = ItemType.WeatheredCopperDoor; - mappings[758] = ItemType.OxidizedCopperDoor; - mappings[759] = ItemType.WaxedCopperDoor; - mappings[760] = ItemType.WaxedExposedCopperDoor; - mappings[761] = ItemType.WaxedWeatheredCopperDoor; - mappings[762] = ItemType.WaxedOxidizedCopperDoor; - mappings[763] = ItemType.IronTrapdoor; - mappings[764] = ItemType.OakTrapdoor; - mappings[765] = ItemType.SpruceTrapdoor; - mappings[766] = ItemType.BirchTrapdoor; - mappings[767] = ItemType.JungleTrapdoor; - mappings[768] = ItemType.AcaciaTrapdoor; - mappings[769] = ItemType.CherryTrapdoor; - mappings[770] = ItemType.DarkOakTrapdoor; - mappings[771] = ItemType.PaleOakTrapdoor; - mappings[772] = ItemType.MangroveTrapdoor; - mappings[773] = ItemType.BambooTrapdoor; - mappings[774] = ItemType.CrimsonTrapdoor; - mappings[775] = ItemType.WarpedTrapdoor; - mappings[776] = ItemType.CopperTrapdoor; - mappings[777] = ItemType.ExposedCopperTrapdoor; - mappings[778] = ItemType.WeatheredCopperTrapdoor; - mappings[779] = ItemType.OxidizedCopperTrapdoor; - mappings[780] = ItemType.WaxedCopperTrapdoor; - mappings[781] = ItemType.WaxedExposedCopperTrapdoor; - mappings[782] = ItemType.WaxedWeatheredCopperTrapdoor; - mappings[783] = ItemType.WaxedOxidizedCopperTrapdoor; - mappings[784] = ItemType.OakFenceGate; - mappings[785] = ItemType.SpruceFenceGate; - mappings[786] = ItemType.BirchFenceGate; - mappings[787] = ItemType.JungleFenceGate; - mappings[788] = ItemType.AcaciaFenceGate; - mappings[789] = ItemType.CherryFenceGate; - mappings[790] = ItemType.DarkOakFenceGate; - mappings[791] = ItemType.PaleOakFenceGate; - mappings[792] = ItemType.MangroveFenceGate; - mappings[793] = ItemType.BambooFenceGate; - mappings[794] = ItemType.CrimsonFenceGate; - mappings[795] = ItemType.WarpedFenceGate; - mappings[796] = ItemType.PoweredRail; - mappings[797] = ItemType.DetectorRail; - mappings[798] = ItemType.Rail; - mappings[799] = ItemType.ActivatorRail; - mappings[800] = ItemType.Saddle; - mappings[801] = ItemType.Minecart; - mappings[802] = ItemType.ChestMinecart; - mappings[803] = ItemType.FurnaceMinecart; - mappings[804] = ItemType.TntMinecart; - mappings[805] = ItemType.HopperMinecart; - mappings[806] = ItemType.CarrotOnAStick; - mappings[807] = ItemType.WarpedFungusOnAStick; - mappings[808] = ItemType.PhantomMembrane; - mappings[809] = ItemType.Elytra; - mappings[810] = ItemType.OakBoat; - mappings[811] = ItemType.OakChestBoat; - mappings[812] = ItemType.SpruceBoat; - mappings[813] = ItemType.SpruceChestBoat; - mappings[814] = ItemType.BirchBoat; - mappings[815] = ItemType.BirchChestBoat; - mappings[816] = ItemType.JungleBoat; - mappings[817] = ItemType.JungleChestBoat; - mappings[818] = ItemType.AcaciaBoat; - mappings[819] = ItemType.AcaciaChestBoat; - mappings[820] = ItemType.CherryBoat; - mappings[821] = ItemType.CherryChestBoat; - mappings[822] = ItemType.DarkOakBoat; - mappings[823] = ItemType.DarkOakChestBoat; - mappings[824] = ItemType.PaleOakBoat; - mappings[825] = ItemType.PaleOakChestBoat; - mappings[826] = ItemType.MangroveBoat; - mappings[827] = ItemType.MangroveChestBoat; - mappings[828] = ItemType.BambooRaft; - mappings[829] = ItemType.BambooChestRaft; - mappings[830] = ItemType.StructureBlock; - mappings[831] = ItemType.Jigsaw; - mappings[832] = ItemType.TestBlock; - mappings[833] = ItemType.TestInstanceBlock; - mappings[834] = ItemType.TurtleHelmet; - mappings[835] = ItemType.TurtleScute; - mappings[836] = ItemType.ArmadilloScute; - mappings[837] = ItemType.WolfArmor; - mappings[838] = ItemType.FlintAndSteel; - mappings[839] = ItemType.Bowl; - mappings[840] = ItemType.Apple; - mappings[841] = ItemType.Bow; - mappings[842] = ItemType.Arrow; - mappings[843] = ItemType.Coal; - mappings[844] = ItemType.Charcoal; - mappings[845] = ItemType.Diamond; - mappings[846] = ItemType.Emerald; - mappings[847] = ItemType.LapisLazuli; - mappings[848] = ItemType.Quartz; - mappings[849] = ItemType.AmethystShard; - mappings[850] = ItemType.RawIron; - mappings[851] = ItemType.IronIngot; - mappings[852] = ItemType.RawCopper; - mappings[853] = ItemType.CopperIngot; - mappings[854] = ItemType.RawGold; - mappings[855] = ItemType.GoldIngot; - mappings[856] = ItemType.NetheriteIngot; - mappings[857] = ItemType.NetheriteScrap; - mappings[858] = ItemType.WoodenSword; - mappings[859] = ItemType.WoodenShovel; - mappings[860] = ItemType.WoodenPickaxe; - mappings[861] = ItemType.WoodenAxe; - mappings[862] = ItemType.WoodenHoe; - mappings[863] = ItemType.StoneSword; - mappings[864] = ItemType.StoneShovel; - mappings[865] = ItemType.StonePickaxe; - mappings[866] = ItemType.StoneAxe; - mappings[867] = ItemType.StoneHoe; - mappings[868] = ItemType.GoldenSword; - mappings[869] = ItemType.GoldenShovel; - mappings[870] = ItemType.GoldenPickaxe; - mappings[871] = ItemType.GoldenAxe; - mappings[872] = ItemType.GoldenHoe; - mappings[873] = ItemType.IronSword; - mappings[874] = ItemType.IronShovel; - mappings[875] = ItemType.IronPickaxe; - mappings[876] = ItemType.IronAxe; - mappings[877] = ItemType.IronHoe; - mappings[878] = ItemType.DiamondSword; - mappings[879] = ItemType.DiamondShovel; - mappings[880] = ItemType.DiamondPickaxe; - mappings[881] = ItemType.DiamondAxe; - mappings[882] = ItemType.DiamondHoe; - mappings[883] = ItemType.NetheriteSword; - mappings[884] = ItemType.NetheriteShovel; - mappings[885] = ItemType.NetheritePickaxe; - mappings[886] = ItemType.NetheriteAxe; - mappings[887] = ItemType.NetheriteHoe; - mappings[888] = ItemType.Stick; - mappings[889] = ItemType.MushroomStew; - mappings[890] = ItemType.String; - mappings[891] = ItemType.Feather; - mappings[892] = ItemType.Gunpowder; - mappings[893] = ItemType.WheatSeeds; - mappings[894] = ItemType.Wheat; - mappings[895] = ItemType.Bread; - mappings[896] = ItemType.LeatherHelmet; - mappings[897] = ItemType.LeatherChestplate; - mappings[898] = ItemType.LeatherLeggings; - mappings[899] = ItemType.LeatherBoots; - mappings[900] = ItemType.ChainmailHelmet; - mappings[901] = ItemType.ChainmailChestplate; - mappings[902] = ItemType.ChainmailLeggings; - mappings[903] = ItemType.ChainmailBoots; - mappings[904] = ItemType.IronHelmet; - mappings[905] = ItemType.IronChestplate; - mappings[906] = ItemType.IronLeggings; - mappings[907] = ItemType.IronBoots; - mappings[908] = ItemType.DiamondHelmet; - mappings[909] = ItemType.DiamondChestplate; - mappings[910] = ItemType.DiamondLeggings; - mappings[911] = ItemType.DiamondBoots; - mappings[912] = ItemType.GoldenHelmet; - mappings[913] = ItemType.GoldenChestplate; - mappings[914] = ItemType.GoldenLeggings; - mappings[915] = ItemType.GoldenBoots; - mappings[916] = ItemType.NetheriteHelmet; - mappings[917] = ItemType.NetheriteChestplate; - mappings[918] = ItemType.NetheriteLeggings; - mappings[919] = ItemType.NetheriteBoots; - mappings[920] = ItemType.Flint; - mappings[921] = ItemType.Porkchop; - mappings[922] = ItemType.CookedPorkchop; - mappings[923] = ItemType.Painting; - mappings[924] = ItemType.GoldenApple; - mappings[925] = ItemType.EnchantedGoldenApple; - mappings[926] = ItemType.OakSign; - mappings[927] = ItemType.SpruceSign; - mappings[928] = ItemType.BirchSign; - mappings[929] = ItemType.JungleSign; - mappings[930] = ItemType.AcaciaSign; - mappings[931] = ItemType.CherrySign; - mappings[932] = ItemType.DarkOakSign; - mappings[933] = ItemType.PaleOakSign; - mappings[934] = ItemType.MangroveSign; - mappings[935] = ItemType.BambooSign; - mappings[936] = ItemType.CrimsonSign; - mappings[937] = ItemType.WarpedSign; - mappings[938] = ItemType.OakHangingSign; - mappings[939] = ItemType.SpruceHangingSign; - mappings[940] = ItemType.BirchHangingSign; - mappings[941] = ItemType.JungleHangingSign; - mappings[942] = ItemType.AcaciaHangingSign; - mappings[943] = ItemType.CherryHangingSign; - mappings[944] = ItemType.DarkOakHangingSign; - mappings[945] = ItemType.PaleOakHangingSign; - mappings[946] = ItemType.MangroveHangingSign; - mappings[947] = ItemType.BambooHangingSign; - mappings[948] = ItemType.CrimsonHangingSign; - mappings[949] = ItemType.WarpedHangingSign; - mappings[950] = ItemType.Bucket; - mappings[951] = ItemType.WaterBucket; - mappings[952] = ItemType.LavaBucket; - mappings[953] = ItemType.PowderSnowBucket; - mappings[954] = ItemType.Snowball; - mappings[955] = ItemType.Leather; - mappings[956] = ItemType.MilkBucket; - mappings[957] = ItemType.PufferfishBucket; - mappings[958] = ItemType.SalmonBucket; - mappings[959] = ItemType.CodBucket; - mappings[960] = ItemType.TropicalFishBucket; - mappings[961] = ItemType.AxolotlBucket; - mappings[962] = ItemType.TadpoleBucket; - mappings[963] = ItemType.Brick; - mappings[964] = ItemType.ClayBall; - mappings[965] = ItemType.DriedKelpBlock; - mappings[966] = ItemType.Paper; - mappings[967] = ItemType.Book; - mappings[968] = ItemType.SlimeBall; - mappings[969] = ItemType.Egg; - mappings[970] = ItemType.BlueEgg; - mappings[971] = ItemType.BrownEgg; - mappings[972] = ItemType.Compass; - mappings[973] = ItemType.RecoveryCompass; - mappings[974] = ItemType.Bundle; - mappings[975] = ItemType.WhiteBundle; - mappings[976] = ItemType.OrangeBundle; - mappings[977] = ItemType.MagentaBundle; - mappings[978] = ItemType.LightBlueBundle; - mappings[979] = ItemType.YellowBundle; - mappings[980] = ItemType.LimeBundle; - mappings[981] = ItemType.PinkBundle; - mappings[982] = ItemType.GrayBundle; - mappings[983] = ItemType.LightGrayBundle; - mappings[984] = ItemType.CyanBundle; - mappings[985] = ItemType.PurpleBundle; - mappings[986] = ItemType.BlueBundle; - mappings[987] = ItemType.BrownBundle; - mappings[988] = ItemType.GreenBundle; - mappings[989] = ItemType.RedBundle; - mappings[990] = ItemType.BlackBundle; - mappings[991] = ItemType.FishingRod; - mappings[992] = ItemType.Clock; - mappings[993] = ItemType.Spyglass; - mappings[994] = ItemType.GlowstoneDust; - mappings[995] = ItemType.Cod; - mappings[996] = ItemType.Salmon; - mappings[997] = ItemType.TropicalFish; - mappings[998] = ItemType.Pufferfish; - mappings[999] = ItemType.CookedCod; - mappings[1000] = ItemType.CookedSalmon; - mappings[1001] = ItemType.InkSac; - mappings[1002] = ItemType.GlowInkSac; - mappings[1003] = ItemType.CocoaBeans; - mappings[1004] = ItemType.WhiteDye; - mappings[1005] = ItemType.OrangeDye; - mappings[1006] = ItemType.MagentaDye; - mappings[1007] = ItemType.LightBlueDye; - mappings[1008] = ItemType.YellowDye; - mappings[1009] = ItemType.LimeDye; - mappings[1010] = ItemType.PinkDye; - mappings[1011] = ItemType.GrayDye; - mappings[1012] = ItemType.LightGrayDye; - mappings[1013] = ItemType.CyanDye; - mappings[1014] = ItemType.PurpleDye; - mappings[1015] = ItemType.BlueDye; - mappings[1016] = ItemType.BrownDye; - mappings[1017] = ItemType.GreenDye; - mappings[1018] = ItemType.RedDye; - mappings[1019] = ItemType.BlackDye; - mappings[1020] = ItemType.BoneMeal; - mappings[1021] = ItemType.Bone; - mappings[1022] = ItemType.Sugar; - mappings[1023] = ItemType.Cake; - mappings[1024] = ItemType.WhiteBed; - mappings[1025] = ItemType.OrangeBed; - mappings[1026] = ItemType.MagentaBed; - mappings[1027] = ItemType.LightBlueBed; - mappings[1028] = ItemType.YellowBed; - mappings[1029] = ItemType.LimeBed; - mappings[1030] = ItemType.PinkBed; - mappings[1031] = ItemType.GrayBed; - mappings[1032] = ItemType.LightGrayBed; - mappings[1033] = ItemType.CyanBed; - mappings[1034] = ItemType.PurpleBed; - mappings[1035] = ItemType.BlueBed; - mappings[1036] = ItemType.BrownBed; - mappings[1037] = ItemType.GreenBed; - mappings[1038] = ItemType.RedBed; - mappings[1039] = ItemType.BlackBed; - mappings[1040] = ItemType.Cookie; - mappings[1041] = ItemType.Crafter; - mappings[1042] = ItemType.FilledMap; - mappings[1043] = ItemType.Shears; - mappings[1044] = ItemType.MelonSlice; - mappings[1045] = ItemType.DriedKelp; - mappings[1046] = ItemType.PumpkinSeeds; - mappings[1047] = ItemType.MelonSeeds; - mappings[1048] = ItemType.Beef; - mappings[1049] = ItemType.CookedBeef; - mappings[1050] = ItemType.Chicken; - mappings[1051] = ItemType.CookedChicken; - mappings[1052] = ItemType.RottenFlesh; - mappings[1053] = ItemType.EnderPearl; - mappings[1054] = ItemType.BlazeRod; - mappings[1055] = ItemType.GhastTear; - mappings[1056] = ItemType.GoldNugget; - mappings[1057] = ItemType.NetherWart; - mappings[1058] = ItemType.GlassBottle; - mappings[1059] = ItemType.Potion; - mappings[1060] = ItemType.SpiderEye; - mappings[1061] = ItemType.FermentedSpiderEye; - mappings[1062] = ItemType.BlazePowder; - mappings[1063] = ItemType.MagmaCream; - mappings[1064] = ItemType.BrewingStand; - mappings[1065] = ItemType.Cauldron; - mappings[1066] = ItemType.EnderEye; - mappings[1067] = ItemType.GlisteringMelonSlice; - mappings[1068] = ItemType.ArmadilloSpawnEgg; - mappings[1069] = ItemType.AllaySpawnEgg; - mappings[1070] = ItemType.AxolotlSpawnEgg; - mappings[1071] = ItemType.BatSpawnEgg; - mappings[1072] = ItemType.BeeSpawnEgg; - mappings[1073] = ItemType.BlazeSpawnEgg; - mappings[1074] = ItemType.BoggedSpawnEgg; - mappings[1075] = ItemType.BreezeSpawnEgg; - mappings[1076] = ItemType.CatSpawnEgg; - mappings[1077] = ItemType.CamelSpawnEgg; - mappings[1078] = ItemType.CaveSpiderSpawnEgg; - mappings[1079] = ItemType.ChickenSpawnEgg; - mappings[1080] = ItemType.CodSpawnEgg; - mappings[1081] = ItemType.CowSpawnEgg; - mappings[1082] = ItemType.CreeperSpawnEgg; - mappings[1083] = ItemType.DolphinSpawnEgg; - mappings[1084] = ItemType.DonkeySpawnEgg; - mappings[1085] = ItemType.DrownedSpawnEgg; - mappings[1086] = ItemType.ElderGuardianSpawnEgg; - mappings[1087] = ItemType.EnderDragonSpawnEgg; - mappings[1088] = ItemType.EndermanSpawnEgg; - mappings[1089] = ItemType.EndermiteSpawnEgg; - mappings[1090] = ItemType.EvokerSpawnEgg; - mappings[1091] = ItemType.FoxSpawnEgg; - mappings[1092] = ItemType.FrogSpawnEgg; - mappings[1093] = ItemType.GhastSpawnEgg; - mappings[1094] = ItemType.GlowSquidSpawnEgg; - mappings[1095] = ItemType.GoatSpawnEgg; - mappings[1096] = ItemType.GuardianSpawnEgg; - mappings[1097] = ItemType.HoglinSpawnEgg; - mappings[1098] = ItemType.HorseSpawnEgg; - mappings[1099] = ItemType.HuskSpawnEgg; - mappings[1100] = ItemType.IronGolemSpawnEgg; - mappings[1101] = ItemType.LlamaSpawnEgg; - mappings[1102] = ItemType.MagmaCubeSpawnEgg; - mappings[1103] = ItemType.MooshroomSpawnEgg; - mappings[1104] = ItemType.MuleSpawnEgg; - mappings[1105] = ItemType.OcelotSpawnEgg; - mappings[1106] = ItemType.PandaSpawnEgg; - mappings[1107] = ItemType.ParrotSpawnEgg; - mappings[1108] = ItemType.PhantomSpawnEgg; - mappings[1109] = ItemType.PigSpawnEgg; - mappings[1110] = ItemType.PiglinSpawnEgg; - mappings[1111] = ItemType.PiglinBruteSpawnEgg; - mappings[1112] = ItemType.PillagerSpawnEgg; - mappings[1113] = ItemType.PolarBearSpawnEgg; - mappings[1114] = ItemType.PufferfishSpawnEgg; - mappings[1115] = ItemType.RabbitSpawnEgg; - mappings[1116] = ItemType.RavagerSpawnEgg; - mappings[1117] = ItemType.SalmonSpawnEgg; - mappings[1118] = ItemType.SheepSpawnEgg; - mappings[1119] = ItemType.ShulkerSpawnEgg; - mappings[1120] = ItemType.SilverfishSpawnEgg; - mappings[1121] = ItemType.SkeletonSpawnEgg; - mappings[1122] = ItemType.SkeletonHorseSpawnEgg; - mappings[1123] = ItemType.SlimeSpawnEgg; - mappings[1124] = ItemType.SnifferSpawnEgg; - mappings[1125] = ItemType.SnowGolemSpawnEgg; - mappings[1126] = ItemType.SpiderSpawnEgg; - mappings[1127] = ItemType.SquidSpawnEgg; - mappings[1128] = ItemType.StraySpawnEgg; - mappings[1129] = ItemType.StriderSpawnEgg; - mappings[1130] = ItemType.TadpoleSpawnEgg; - mappings[1131] = ItemType.TraderLlamaSpawnEgg; - mappings[1132] = ItemType.TropicalFishSpawnEgg; - mappings[1133] = ItemType.TurtleSpawnEgg; - mappings[1134] = ItemType.VexSpawnEgg; - mappings[1135] = ItemType.VillagerSpawnEgg; - mappings[1136] = ItemType.VindicatorSpawnEgg; - mappings[1137] = ItemType.WanderingTraderSpawnEgg; - mappings[1138] = ItemType.WardenSpawnEgg; - mappings[1139] = ItemType.WitchSpawnEgg; - mappings[1140] = ItemType.WitherSpawnEgg; - mappings[1141] = ItemType.WitherSkeletonSpawnEgg; - mappings[1142] = ItemType.WolfSpawnEgg; - mappings[1143] = ItemType.ZoglinSpawnEgg; - mappings[1144] = ItemType.CreakingSpawnEgg; - mappings[1145] = ItemType.ZombieSpawnEgg; - mappings[1146] = ItemType.ZombieHorseSpawnEgg; - mappings[1147] = ItemType.ZombieVillagerSpawnEgg; - mappings[1148] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[1149] = ItemType.ExperienceBottle; - mappings[1150] = ItemType.FireCharge; - mappings[1151] = ItemType.WindCharge; - mappings[1152] = ItemType.WritableBook; - mappings[1153] = ItemType.WrittenBook; - mappings[1154] = ItemType.BreezeRod; - mappings[1155] = ItemType.Mace; - mappings[1156] = ItemType.ItemFrame; - mappings[1157] = ItemType.GlowItemFrame; - mappings[1158] = ItemType.FlowerPot; - mappings[1159] = ItemType.Carrot; - mappings[1160] = ItemType.Potato; - mappings[1161] = ItemType.BakedPotato; - mappings[1162] = ItemType.PoisonousPotato; - mappings[1163] = ItemType.Map; - mappings[1164] = ItemType.GoldenCarrot; - mappings[1165] = ItemType.SkeletonSkull; - mappings[1166] = ItemType.WitherSkeletonSkull; - mappings[1167] = ItemType.PlayerHead; - mappings[1168] = ItemType.ZombieHead; - mappings[1169] = ItemType.CreeperHead; - mappings[1170] = ItemType.DragonHead; - mappings[1171] = ItemType.PiglinHead; - mappings[1172] = ItemType.NetherStar; - mappings[1173] = ItemType.PumpkinPie; - mappings[1174] = ItemType.FireworkRocket; - mappings[1175] = ItemType.FireworkStar; - mappings[1176] = ItemType.EnchantedBook; - mappings[1177] = ItemType.NetherBrick; - mappings[1178] = ItemType.ResinBrick; - mappings[1179] = ItemType.PrismarineShard; - mappings[1180] = ItemType.PrismarineCrystals; - mappings[1181] = ItemType.Rabbit; - mappings[1182] = ItemType.CookedRabbit; - mappings[1183] = ItemType.RabbitStew; - mappings[1184] = ItemType.RabbitFoot; - mappings[1185] = ItemType.RabbitHide; - mappings[1186] = ItemType.ArmorStand; - mappings[1187] = ItemType.IronHorseArmor; - mappings[1188] = ItemType.GoldenHorseArmor; - mappings[1189] = ItemType.DiamondHorseArmor; - mappings[1190] = ItemType.LeatherHorseArmor; - mappings[1191] = ItemType.Lead; - mappings[1192] = ItemType.NameTag; - mappings[1193] = ItemType.CommandBlockMinecart; - mappings[1194] = ItemType.Mutton; - mappings[1195] = ItemType.CookedMutton; - mappings[1196] = ItemType.WhiteBanner; - mappings[1197] = ItemType.OrangeBanner; - mappings[1198] = ItemType.MagentaBanner; - mappings[1199] = ItemType.LightBlueBanner; - mappings[1200] = ItemType.YellowBanner; - mappings[1201] = ItemType.LimeBanner; - mappings[1202] = ItemType.PinkBanner; - mappings[1203] = ItemType.GrayBanner; - mappings[1204] = ItemType.LightGrayBanner; - mappings[1205] = ItemType.CyanBanner; - mappings[1206] = ItemType.PurpleBanner; - mappings[1207] = ItemType.BlueBanner; - mappings[1208] = ItemType.BrownBanner; - mappings[1209] = ItemType.GreenBanner; - mappings[1210] = ItemType.RedBanner; - mappings[1211] = ItemType.BlackBanner; - mappings[1212] = ItemType.EndCrystal; - mappings[1213] = ItemType.ChorusFruit; - mappings[1214] = ItemType.PoppedChorusFruit; - mappings[1215] = ItemType.TorchflowerSeeds; - mappings[1216] = ItemType.PitcherPod; - mappings[1217] = ItemType.Beetroot; - mappings[1218] = ItemType.BeetrootSeeds; - mappings[1219] = ItemType.BeetrootSoup; - mappings[1220] = ItemType.DragonBreath; - mappings[1221] = ItemType.SplashPotion; - mappings[1222] = ItemType.SpectralArrow; - mappings[1223] = ItemType.TippedArrow; - mappings[1224] = ItemType.LingeringPotion; - mappings[1225] = ItemType.Shield; - mappings[1226] = ItemType.TotemOfUndying; - mappings[1227] = ItemType.ShulkerShell; - mappings[1228] = ItemType.IronNugget; - mappings[1229] = ItemType.KnowledgeBook; - mappings[1230] = ItemType.DebugStick; - mappings[1231] = ItemType.MusicDisc13; - mappings[1232] = ItemType.MusicDiscCat; - mappings[1233] = ItemType.MusicDiscBlocks; - mappings[1234] = ItemType.MusicDiscChirp; - mappings[1235] = ItemType.MusicDiscCreator; - mappings[1236] = ItemType.MusicDiscCreatorMusicBox; - mappings[1237] = ItemType.MusicDiscFar; - mappings[1238] = ItemType.MusicDiscMall; - mappings[1239] = ItemType.MusicDiscMellohi; - mappings[1240] = ItemType.MusicDiscStal; - mappings[1241] = ItemType.MusicDiscStrad; - mappings[1242] = ItemType.MusicDiscWard; - mappings[1243] = ItemType.MusicDisc11; - mappings[1244] = ItemType.MusicDiscWait; - mappings[1245] = ItemType.MusicDiscOtherside; - mappings[1246] = ItemType.MusicDiscRelic; - mappings[1247] = ItemType.MusicDisc5; - mappings[1248] = ItemType.MusicDiscPigstep; - mappings[1249] = ItemType.MusicDiscPrecipice; - mappings[1250] = ItemType.DiscFragment5; - mappings[1251] = ItemType.Trident; - mappings[1252] = ItemType.NautilusShell; - mappings[1253] = ItemType.HeartOfTheSea; - mappings[1254] = ItemType.Crossbow; - mappings[1255] = ItemType.SuspiciousStew; - mappings[1256] = ItemType.Loom; - mappings[1257] = ItemType.FlowerBannerPattern; - mappings[1258] = ItemType.CreeperBannerPattern; - mappings[1259] = ItemType.SkullBannerPattern; - mappings[1260] = ItemType.MojangBannerPattern; - mappings[1261] = ItemType.GlobeBannerPattern; - mappings[1262] = ItemType.PiglinBannerPattern; - mappings[1263] = ItemType.FlowBannerPattern; - mappings[1264] = ItemType.GusterBannerPattern; - mappings[1265] = ItemType.FieldMasonedBannerPattern; - mappings[1266] = ItemType.BordureIndentedBannerPattern; - mappings[1267] = ItemType.GoatHorn; - mappings[1268] = ItemType.Composter; - mappings[1269] = ItemType.Barrel; - mappings[1270] = ItemType.Smoker; - mappings[1271] = ItemType.BlastFurnace; - mappings[1272] = ItemType.CartographyTable; - mappings[1273] = ItemType.FletchingTable; - mappings[1274] = ItemType.Grindstone; - mappings[1275] = ItemType.SmithingTable; - mappings[1276] = ItemType.Stonecutter; - mappings[1277] = ItemType.Bell; - mappings[1278] = ItemType.Lantern; - mappings[1279] = ItemType.SoulLantern; - mappings[1280] = ItemType.SweetBerries; - mappings[1281] = ItemType.GlowBerries; - mappings[1282] = ItemType.Campfire; - mappings[1283] = ItemType.SoulCampfire; - mappings[1284] = ItemType.Shroomlight; - mappings[1285] = ItemType.Honeycomb; - mappings[1286] = ItemType.BeeNest; - mappings[1287] = ItemType.Beehive; - mappings[1288] = ItemType.HoneyBottle; - mappings[1289] = ItemType.HoneycombBlock; - mappings[1290] = ItemType.Lodestone; - mappings[1291] = ItemType.CryingObsidian; - mappings[1292] = ItemType.Blackstone; - mappings[1293] = ItemType.BlackstoneSlab; - mappings[1294] = ItemType.BlackstoneStairs; - mappings[1295] = ItemType.GildedBlackstone; - mappings[1296] = ItemType.PolishedBlackstone; - mappings[1297] = ItemType.PolishedBlackstoneSlab; - mappings[1298] = ItemType.PolishedBlackstoneStairs; - mappings[1299] = ItemType.ChiseledPolishedBlackstone; - mappings[1300] = ItemType.PolishedBlackstoneBricks; - mappings[1301] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1302] = ItemType.PolishedBlackstoneBrickStairs; - mappings[1303] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[1304] = ItemType.RespawnAnchor; - mappings[1305] = ItemType.Candle; - mappings[1306] = ItemType.WhiteCandle; - mappings[1307] = ItemType.OrangeCandle; - mappings[1308] = ItemType.MagentaCandle; - mappings[1309] = ItemType.LightBlueCandle; - mappings[1310] = ItemType.YellowCandle; - mappings[1311] = ItemType.LimeCandle; - mappings[1312] = ItemType.PinkCandle; - mappings[1313] = ItemType.GrayCandle; - mappings[1314] = ItemType.LightGrayCandle; - mappings[1315] = ItemType.CyanCandle; - mappings[1316] = ItemType.PurpleCandle; - mappings[1317] = ItemType.BlueCandle; - mappings[1318] = ItemType.BrownCandle; - mappings[1319] = ItemType.GreenCandle; - mappings[1320] = ItemType.RedCandle; - mappings[1321] = ItemType.BlackCandle; - mappings[1322] = ItemType.SmallAmethystBud; - mappings[1323] = ItemType.MediumAmethystBud; - mappings[1324] = ItemType.LargeAmethystBud; - mappings[1325] = ItemType.AmethystCluster; - mappings[1326] = ItemType.PointedDripstone; - mappings[1327] = ItemType.OchreFroglight; - mappings[1328] = ItemType.VerdantFroglight; - mappings[1329] = ItemType.PearlescentFroglight; - mappings[1330] = ItemType.Frogspawn; - mappings[1331] = ItemType.EchoShard; - mappings[1332] = ItemType.Brush; - mappings[1333] = ItemType.NetheriteUpgradeSmithingTemplate; - mappings[1334] = ItemType.SentryArmorTrimSmithingTemplate; - mappings[1335] = ItemType.DuneArmorTrimSmithingTemplate; - mappings[1336] = ItemType.CoastArmorTrimSmithingTemplate; - mappings[1337] = ItemType.WildArmorTrimSmithingTemplate; - mappings[1338] = ItemType.WardArmorTrimSmithingTemplate; - mappings[1339] = ItemType.EyeArmorTrimSmithingTemplate; - mappings[1340] = ItemType.VexArmorTrimSmithingTemplate; - mappings[1341] = ItemType.TideArmorTrimSmithingTemplate; - mappings[1342] = ItemType.SnoutArmorTrimSmithingTemplate; - mappings[1343] = ItemType.RibArmorTrimSmithingTemplate; - mappings[1344] = ItemType.SpireArmorTrimSmithingTemplate; - mappings[1345] = ItemType.WayfinderArmorTrimSmithingTemplate; - mappings[1346] = ItemType.ShaperArmorTrimSmithingTemplate; - mappings[1347] = ItemType.SilenceArmorTrimSmithingTemplate; - mappings[1348] = ItemType.RaiserArmorTrimSmithingTemplate; - mappings[1349] = ItemType.HostArmorTrimSmithingTemplate; - mappings[1350] = ItemType.FlowArmorTrimSmithingTemplate; - mappings[1351] = ItemType.BoltArmorTrimSmithingTemplate; - mappings[1352] = ItemType.AnglerPotterySherd; - mappings[1353] = ItemType.ArcherPotterySherd; - mappings[1354] = ItemType.ArmsUpPotterySherd; - mappings[1355] = ItemType.BladePotterySherd; - mappings[1356] = ItemType.BrewerPotterySherd; - mappings[1357] = ItemType.BurnPotterySherd; - mappings[1358] = ItemType.DangerPotterySherd; - mappings[1359] = ItemType.ExplorerPotterySherd; - mappings[1360] = ItemType.FlowPotterySherd; - mappings[1361] = ItemType.FriendPotterySherd; - mappings[1362] = ItemType.GusterPotterySherd; - mappings[1363] = ItemType.HeartPotterySherd; - mappings[1364] = ItemType.HeartbreakPotterySherd; - mappings[1365] = ItemType.HowlPotterySherd; - mappings[1366] = ItemType.MinerPotterySherd; - mappings[1367] = ItemType.MournerPotterySherd; - mappings[1368] = ItemType.PlentyPotterySherd; - mappings[1369] = ItemType.PrizePotterySherd; - mappings[1370] = ItemType.ScrapePotterySherd; - mappings[1371] = ItemType.SheafPotterySherd; - mappings[1372] = ItemType.ShelterPotterySherd; - mappings[1373] = ItemType.SkullPotterySherd; - mappings[1374] = ItemType.SnortPotterySherd; - mappings[1375] = ItemType.CopperGrate; - mappings[1376] = ItemType.ExposedCopperGrate; - mappings[1377] = ItemType.WeatheredCopperGrate; - mappings[1378] = ItemType.OxidizedCopperGrate; - mappings[1379] = ItemType.WaxedCopperGrate; - mappings[1380] = ItemType.WaxedExposedCopperGrate; - mappings[1381] = ItemType.WaxedWeatheredCopperGrate; - mappings[1382] = ItemType.WaxedOxidizedCopperGrate; - mappings[1383] = ItemType.CopperBulb; - mappings[1384] = ItemType.ExposedCopperBulb; - mappings[1385] = ItemType.WeatheredCopperBulb; - mappings[1386] = ItemType.OxidizedCopperBulb; - mappings[1387] = ItemType.WaxedCopperBulb; - mappings[1388] = ItemType.WaxedExposedCopperBulb; - mappings[1389] = ItemType.WaxedWeatheredCopperBulb; - mappings[1390] = ItemType.WaxedOxidizedCopperBulb; - mappings[1391] = ItemType.TrialSpawner; - mappings[1392] = ItemType.TrialKey; - mappings[1393] = ItemType.OminousTrialKey; - mappings[1394] = ItemType.Vault; - mappings[1395] = ItemType.OminousBottle; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1216.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette1216.cs deleted file mode 100644 index 91472a53e6..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1216.cs +++ /dev/null @@ -1,1433 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette1216 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette1216() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.Deepslate; - mappings[9] = ItemType.CobbledDeepslate; - mappings[10] = ItemType.PolishedDeepslate; - mappings[11] = ItemType.Calcite; - mappings[12] = ItemType.Tuff; - mappings[13] = ItemType.TuffSlab; - mappings[14] = ItemType.TuffStairs; - mappings[15] = ItemType.TuffWall; - mappings[16] = ItemType.ChiseledTuff; - mappings[17] = ItemType.PolishedTuff; - mappings[18] = ItemType.PolishedTuffSlab; - mappings[19] = ItemType.PolishedTuffStairs; - mappings[20] = ItemType.PolishedTuffWall; - mappings[21] = ItemType.TuffBricks; - mappings[22] = ItemType.TuffBrickSlab; - mappings[23] = ItemType.TuffBrickStairs; - mappings[24] = ItemType.TuffBrickWall; - mappings[25] = ItemType.ChiseledTuffBricks; - mappings[26] = ItemType.DripstoneBlock; - mappings[27] = ItemType.GrassBlock; - mappings[28] = ItemType.Dirt; - mappings[29] = ItemType.CoarseDirt; - mappings[30] = ItemType.Podzol; - mappings[31] = ItemType.RootedDirt; - mappings[32] = ItemType.Mud; - mappings[33] = ItemType.CrimsonNylium; - mappings[34] = ItemType.WarpedNylium; - mappings[35] = ItemType.Cobblestone; - mappings[36] = ItemType.OakPlanks; - mappings[37] = ItemType.SprucePlanks; - mappings[38] = ItemType.BirchPlanks; - mappings[39] = ItemType.JunglePlanks; - mappings[40] = ItemType.AcaciaPlanks; - mappings[41] = ItemType.CherryPlanks; - mappings[42] = ItemType.DarkOakPlanks; - mappings[43] = ItemType.PaleOakPlanks; - mappings[44] = ItemType.MangrovePlanks; - mappings[45] = ItemType.BambooPlanks; - mappings[46] = ItemType.CrimsonPlanks; - mappings[47] = ItemType.WarpedPlanks; - mappings[48] = ItemType.BambooMosaic; - mappings[49] = ItemType.OakSapling; - mappings[50] = ItemType.SpruceSapling; - mappings[51] = ItemType.BirchSapling; - mappings[52] = ItemType.JungleSapling; - mappings[53] = ItemType.AcaciaSapling; - mappings[54] = ItemType.CherrySapling; - mappings[55] = ItemType.DarkOakSapling; - mappings[56] = ItemType.PaleOakSapling; - mappings[57] = ItemType.MangrovePropagule; - mappings[58] = ItemType.Bedrock; - mappings[59] = ItemType.Sand; - mappings[60] = ItemType.SuspiciousSand; - mappings[61] = ItemType.SuspiciousGravel; - mappings[62] = ItemType.RedSand; - mappings[63] = ItemType.Gravel; - mappings[64] = ItemType.CoalOre; - mappings[65] = ItemType.DeepslateCoalOre; - mappings[66] = ItemType.IronOre; - mappings[67] = ItemType.DeepslateIronOre; - mappings[68] = ItemType.CopperOre; - mappings[69] = ItemType.DeepslateCopperOre; - mappings[70] = ItemType.GoldOre; - mappings[71] = ItemType.DeepslateGoldOre; - mappings[72] = ItemType.RedstoneOre; - mappings[73] = ItemType.DeepslateRedstoneOre; - mappings[74] = ItemType.EmeraldOre; - mappings[75] = ItemType.DeepslateEmeraldOre; - mappings[76] = ItemType.LapisOre; - mappings[77] = ItemType.DeepslateLapisOre; - mappings[78] = ItemType.DiamondOre; - mappings[79] = ItemType.DeepslateDiamondOre; - mappings[80] = ItemType.NetherGoldOre; - mappings[81] = ItemType.NetherQuartzOre; - mappings[82] = ItemType.AncientDebris; - mappings[83] = ItemType.CoalBlock; - mappings[84] = ItemType.RawIronBlock; - mappings[85] = ItemType.RawCopperBlock; - mappings[86] = ItemType.RawGoldBlock; - mappings[87] = ItemType.HeavyCore; - mappings[88] = ItemType.AmethystBlock; - mappings[89] = ItemType.BuddingAmethyst; - mappings[90] = ItemType.IronBlock; - mappings[91] = ItemType.CopperBlock; - mappings[92] = ItemType.GoldBlock; - mappings[93] = ItemType.DiamondBlock; - mappings[94] = ItemType.NetheriteBlock; - mappings[95] = ItemType.ExposedCopper; - mappings[96] = ItemType.WeatheredCopper; - mappings[97] = ItemType.OxidizedCopper; - mappings[98] = ItemType.ChiseledCopper; - mappings[99] = ItemType.ExposedChiseledCopper; - mappings[100] = ItemType.WeatheredChiseledCopper; - mappings[101] = ItemType.OxidizedChiseledCopper; - mappings[102] = ItemType.CutCopper; - mappings[103] = ItemType.ExposedCutCopper; - mappings[104] = ItemType.WeatheredCutCopper; - mappings[105] = ItemType.OxidizedCutCopper; - mappings[106] = ItemType.CutCopperStairs; - mappings[107] = ItemType.ExposedCutCopperStairs; - mappings[108] = ItemType.WeatheredCutCopperStairs; - mappings[109] = ItemType.OxidizedCutCopperStairs; - mappings[110] = ItemType.CutCopperSlab; - mappings[111] = ItemType.ExposedCutCopperSlab; - mappings[112] = ItemType.WeatheredCutCopperSlab; - mappings[113] = ItemType.OxidizedCutCopperSlab; - mappings[114] = ItemType.WaxedCopperBlock; - mappings[115] = ItemType.WaxedExposedCopper; - mappings[116] = ItemType.WaxedWeatheredCopper; - mappings[117] = ItemType.WaxedOxidizedCopper; - mappings[118] = ItemType.WaxedChiseledCopper; - mappings[119] = ItemType.WaxedExposedChiseledCopper; - mappings[120] = ItemType.WaxedWeatheredChiseledCopper; - mappings[121] = ItemType.WaxedOxidizedChiseledCopper; - mappings[122] = ItemType.WaxedCutCopper; - mappings[123] = ItemType.WaxedExposedCutCopper; - mappings[124] = ItemType.WaxedWeatheredCutCopper; - mappings[125] = ItemType.WaxedOxidizedCutCopper; - mappings[126] = ItemType.WaxedCutCopperStairs; - mappings[127] = ItemType.WaxedExposedCutCopperStairs; - mappings[128] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[129] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[130] = ItemType.WaxedCutCopperSlab; - mappings[131] = ItemType.WaxedExposedCutCopperSlab; - mappings[132] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[133] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[134] = ItemType.OakLog; - mappings[135] = ItemType.SpruceLog; - mappings[136] = ItemType.BirchLog; - mappings[137] = ItemType.JungleLog; - mappings[138] = ItemType.AcaciaLog; - mappings[139] = ItemType.CherryLog; - mappings[140] = ItemType.PaleOakLog; - mappings[141] = ItemType.DarkOakLog; - mappings[142] = ItemType.MangroveLog; - mappings[143] = ItemType.MangroveRoots; - mappings[144] = ItemType.MuddyMangroveRoots; - mappings[145] = ItemType.CrimsonStem; - mappings[146] = ItemType.WarpedStem; - mappings[147] = ItemType.BambooBlock; - mappings[148] = ItemType.StrippedOakLog; - mappings[149] = ItemType.StrippedSpruceLog; - mappings[150] = ItemType.StrippedBirchLog; - mappings[151] = ItemType.StrippedJungleLog; - mappings[152] = ItemType.StrippedAcaciaLog; - mappings[153] = ItemType.StrippedCherryLog; - mappings[154] = ItemType.StrippedDarkOakLog; - mappings[155] = ItemType.StrippedPaleOakLog; - mappings[156] = ItemType.StrippedMangroveLog; - mappings[157] = ItemType.StrippedCrimsonStem; - mappings[158] = ItemType.StrippedWarpedStem; - mappings[159] = ItemType.StrippedOakWood; - mappings[160] = ItemType.StrippedSpruceWood; - mappings[161] = ItemType.StrippedBirchWood; - mappings[162] = ItemType.StrippedJungleWood; - mappings[163] = ItemType.StrippedAcaciaWood; - mappings[164] = ItemType.StrippedCherryWood; - mappings[165] = ItemType.StrippedDarkOakWood; - mappings[166] = ItemType.StrippedPaleOakWood; - mappings[167] = ItemType.StrippedMangroveWood; - mappings[168] = ItemType.StrippedCrimsonHyphae; - mappings[169] = ItemType.StrippedWarpedHyphae; - mappings[170] = ItemType.StrippedBambooBlock; - mappings[171] = ItemType.OakWood; - mappings[172] = ItemType.SpruceWood; - mappings[173] = ItemType.BirchWood; - mappings[174] = ItemType.JungleWood; - mappings[175] = ItemType.AcaciaWood; - mappings[176] = ItemType.CherryWood; - mappings[177] = ItemType.PaleOakWood; - mappings[178] = ItemType.DarkOakWood; - mappings[179] = ItemType.MangroveWood; - mappings[180] = ItemType.CrimsonHyphae; - mappings[181] = ItemType.WarpedHyphae; - mappings[182] = ItemType.OakLeaves; - mappings[183] = ItemType.SpruceLeaves; - mappings[184] = ItemType.BirchLeaves; - mappings[185] = ItemType.JungleLeaves; - mappings[186] = ItemType.AcaciaLeaves; - mappings[187] = ItemType.CherryLeaves; - mappings[188] = ItemType.DarkOakLeaves; - mappings[189] = ItemType.PaleOakLeaves; - mappings[190] = ItemType.MangroveLeaves; - mappings[191] = ItemType.AzaleaLeaves; - mappings[192] = ItemType.FloweringAzaleaLeaves; - mappings[193] = ItemType.Sponge; - mappings[194] = ItemType.WetSponge; - mappings[195] = ItemType.Glass; - mappings[196] = ItemType.TintedGlass; - mappings[197] = ItemType.LapisBlock; - mappings[198] = ItemType.Sandstone; - mappings[199] = ItemType.ChiseledSandstone; - mappings[200] = ItemType.CutSandstone; - mappings[201] = ItemType.Cobweb; - mappings[202] = ItemType.ShortGrass; - mappings[203] = ItemType.Fern; - mappings[204] = ItemType.Bush; - mappings[205] = ItemType.Azalea; - mappings[206] = ItemType.FloweringAzalea; - mappings[207] = ItemType.DeadBush; - mappings[208] = ItemType.FireflyBush; - mappings[209] = ItemType.DryShortGrass; - mappings[210] = ItemType.DryTallGrass; - mappings[211] = ItemType.Seagrass; - mappings[212] = ItemType.SeaPickle; - mappings[213] = ItemType.WhiteWool; - mappings[214] = ItemType.OrangeWool; - mappings[215] = ItemType.MagentaWool; - mappings[216] = ItemType.LightBlueWool; - mappings[217] = ItemType.YellowWool; - mappings[218] = ItemType.LimeWool; - mappings[219] = ItemType.PinkWool; - mappings[220] = ItemType.GrayWool; - mappings[221] = ItemType.LightGrayWool; - mappings[222] = ItemType.CyanWool; - mappings[223] = ItemType.PurpleWool; - mappings[224] = ItemType.BlueWool; - mappings[225] = ItemType.BrownWool; - mappings[226] = ItemType.GreenWool; - mappings[227] = ItemType.RedWool; - mappings[228] = ItemType.BlackWool; - mappings[229] = ItemType.Dandelion; - mappings[230] = ItemType.OpenEyeblossom; - mappings[231] = ItemType.ClosedEyeblossom; - mappings[232] = ItemType.Poppy; - mappings[233] = ItemType.BlueOrchid; - mappings[234] = ItemType.Allium; - mappings[235] = ItemType.AzureBluet; - mappings[236] = ItemType.RedTulip; - mappings[237] = ItemType.OrangeTulip; - mappings[238] = ItemType.WhiteTulip; - mappings[239] = ItemType.PinkTulip; - mappings[240] = ItemType.OxeyeDaisy; - mappings[241] = ItemType.Cornflower; - mappings[242] = ItemType.LilyOfTheValley; - mappings[243] = ItemType.WitherRose; - mappings[244] = ItemType.Torchflower; - mappings[245] = ItemType.PitcherPlant; - mappings[246] = ItemType.SporeBlossom; - mappings[247] = ItemType.BrownMushroom; - mappings[248] = ItemType.RedMushroom; - mappings[249] = ItemType.CrimsonFungus; - mappings[250] = ItemType.WarpedFungus; - mappings[251] = ItemType.CrimsonRoots; - mappings[252] = ItemType.WarpedRoots; - mappings[253] = ItemType.NetherSprouts; - mappings[254] = ItemType.WeepingVines; - mappings[255] = ItemType.TwistingVines; - mappings[256] = ItemType.SugarCane; - mappings[257] = ItemType.Kelp; - mappings[258] = ItemType.PinkPetals; - mappings[259] = ItemType.Wildflowers; - mappings[260] = ItemType.LeafLitter; - mappings[261] = ItemType.MossCarpet; - mappings[262] = ItemType.MossBlock; - mappings[263] = ItemType.PaleMossCarpet; - mappings[264] = ItemType.PaleHangingMoss; - mappings[265] = ItemType.PaleMossBlock; - mappings[266] = ItemType.HangingRoots; - mappings[267] = ItemType.BigDripleaf; - mappings[268] = ItemType.SmallDripleaf; - mappings[269] = ItemType.Bamboo; - mappings[270] = ItemType.OakSlab; - mappings[271] = ItemType.SpruceSlab; - mappings[272] = ItemType.BirchSlab; - mappings[273] = ItemType.JungleSlab; - mappings[274] = ItemType.AcaciaSlab; - mappings[275] = ItemType.CherrySlab; - mappings[276] = ItemType.DarkOakSlab; - mappings[277] = ItemType.PaleOakSlab; - mappings[278] = ItemType.MangroveSlab; - mappings[279] = ItemType.BambooSlab; - mappings[280] = ItemType.BambooMosaicSlab; - mappings[281] = ItemType.CrimsonSlab; - mappings[282] = ItemType.WarpedSlab; - mappings[283] = ItemType.StoneSlab; - mappings[284] = ItemType.SmoothStoneSlab; - mappings[285] = ItemType.SandstoneSlab; - mappings[286] = ItemType.CutSandstoneSlab; - mappings[287] = ItemType.PetrifiedOakSlab; - mappings[288] = ItemType.CobblestoneSlab; - mappings[289] = ItemType.BrickSlab; - mappings[290] = ItemType.StoneBrickSlab; - mappings[291] = ItemType.MudBrickSlab; - mappings[292] = ItemType.NetherBrickSlab; - mappings[293] = ItemType.QuartzSlab; - mappings[294] = ItemType.RedSandstoneSlab; - mappings[295] = ItemType.CutRedSandstoneSlab; - mappings[296] = ItemType.PurpurSlab; - mappings[297] = ItemType.PrismarineSlab; - mappings[298] = ItemType.PrismarineBrickSlab; - mappings[299] = ItemType.DarkPrismarineSlab; - mappings[300] = ItemType.SmoothQuartz; - mappings[301] = ItemType.SmoothRedSandstone; - mappings[302] = ItemType.SmoothSandstone; - mappings[303] = ItemType.SmoothStone; - mappings[304] = ItemType.Bricks; - mappings[305] = ItemType.Bookshelf; - mappings[306] = ItemType.ChiseledBookshelf; - mappings[307] = ItemType.DecoratedPot; - mappings[308] = ItemType.MossyCobblestone; - mappings[309] = ItemType.Obsidian; - mappings[310] = ItemType.Torch; - mappings[311] = ItemType.EndRod; - mappings[312] = ItemType.ChorusPlant; - mappings[313] = ItemType.ChorusFlower; - mappings[314] = ItemType.PurpurBlock; - mappings[315] = ItemType.PurpurPillar; - mappings[316] = ItemType.PurpurStairs; - mappings[317] = ItemType.Spawner; - mappings[318] = ItemType.CreakingHeart; - mappings[319] = ItemType.Chest; - mappings[320] = ItemType.CraftingTable; - mappings[321] = ItemType.Farmland; - mappings[322] = ItemType.Furnace; - mappings[323] = ItemType.Ladder; - mappings[324] = ItemType.CobblestoneStairs; - mappings[325] = ItemType.Snow; - mappings[326] = ItemType.Ice; - mappings[327] = ItemType.SnowBlock; - mappings[328] = ItemType.Cactus; - mappings[329] = ItemType.CactusFlower; - mappings[330] = ItemType.Clay; - mappings[331] = ItemType.Jukebox; - mappings[332] = ItemType.OakFence; - mappings[333] = ItemType.SpruceFence; - mappings[334] = ItemType.BirchFence; - mappings[335] = ItemType.JungleFence; - mappings[336] = ItemType.AcaciaFence; - mappings[337] = ItemType.CherryFence; - mappings[338] = ItemType.DarkOakFence; - mappings[339] = ItemType.PaleOakFence; - mappings[340] = ItemType.MangroveFence; - mappings[341] = ItemType.BambooFence; - mappings[342] = ItemType.CrimsonFence; - mappings[343] = ItemType.WarpedFence; - mappings[344] = ItemType.Pumpkin; - mappings[345] = ItemType.CarvedPumpkin; - mappings[346] = ItemType.JackOLantern; - mappings[347] = ItemType.Netherrack; - mappings[348] = ItemType.SoulSand; - mappings[349] = ItemType.SoulSoil; - mappings[350] = ItemType.Basalt; - mappings[351] = ItemType.PolishedBasalt; - mappings[352] = ItemType.SmoothBasalt; - mappings[353] = ItemType.SoulTorch; - mappings[354] = ItemType.Glowstone; - mappings[355] = ItemType.InfestedStone; - mappings[356] = ItemType.InfestedCobblestone; - mappings[357] = ItemType.InfestedStoneBricks; - mappings[358] = ItemType.InfestedMossyStoneBricks; - mappings[359] = ItemType.InfestedCrackedStoneBricks; - mappings[360] = ItemType.InfestedChiseledStoneBricks; - mappings[361] = ItemType.InfestedDeepslate; - mappings[362] = ItemType.StoneBricks; - mappings[363] = ItemType.MossyStoneBricks; - mappings[364] = ItemType.CrackedStoneBricks; - mappings[365] = ItemType.ChiseledStoneBricks; - mappings[366] = ItemType.PackedMud; - mappings[367] = ItemType.MudBricks; - mappings[368] = ItemType.DeepslateBricks; - mappings[369] = ItemType.CrackedDeepslateBricks; - mappings[370] = ItemType.DeepslateTiles; - mappings[371] = ItemType.CrackedDeepslateTiles; - mappings[372] = ItemType.ChiseledDeepslate; - mappings[373] = ItemType.ReinforcedDeepslate; - mappings[374] = ItemType.BrownMushroomBlock; - mappings[375] = ItemType.RedMushroomBlock; - mappings[376] = ItemType.MushroomStem; - mappings[377] = ItemType.IronBars; - mappings[378] = ItemType.Chain; - mappings[379] = ItemType.GlassPane; - mappings[380] = ItemType.Melon; - mappings[381] = ItemType.Vine; - mappings[382] = ItemType.GlowLichen; - mappings[383] = ItemType.ResinClump; - mappings[384] = ItemType.ResinBlock; - mappings[385] = ItemType.ResinBricks; - mappings[386] = ItemType.ResinBrickStairs; - mappings[387] = ItemType.ResinBrickSlab; - mappings[388] = ItemType.ResinBrickWall; - mappings[389] = ItemType.ChiseledResinBricks; - mappings[390] = ItemType.BrickStairs; - mappings[391] = ItemType.StoneBrickStairs; - mappings[392] = ItemType.MudBrickStairs; - mappings[393] = ItemType.Mycelium; - mappings[394] = ItemType.LilyPad; - mappings[395] = ItemType.NetherBricks; - mappings[396] = ItemType.CrackedNetherBricks; - mappings[397] = ItemType.ChiseledNetherBricks; - mappings[398] = ItemType.NetherBrickFence; - mappings[399] = ItemType.NetherBrickStairs; - mappings[400] = ItemType.Sculk; - mappings[401] = ItemType.SculkVein; - mappings[402] = ItemType.SculkCatalyst; - mappings[403] = ItemType.SculkShrieker; - mappings[404] = ItemType.EnchantingTable; - mappings[405] = ItemType.EndPortalFrame; - mappings[406] = ItemType.EndStone; - mappings[407] = ItemType.EndStoneBricks; - mappings[408] = ItemType.DragonEgg; - mappings[409] = ItemType.SandstoneStairs; - mappings[410] = ItemType.EnderChest; - mappings[411] = ItemType.EmeraldBlock; - mappings[412] = ItemType.OakStairs; - mappings[413] = ItemType.SpruceStairs; - mappings[414] = ItemType.BirchStairs; - mappings[415] = ItemType.JungleStairs; - mappings[416] = ItemType.AcaciaStairs; - mappings[417] = ItemType.CherryStairs; - mappings[418] = ItemType.DarkOakStairs; - mappings[419] = ItemType.PaleOakStairs; - mappings[420] = ItemType.MangroveStairs; - mappings[421] = ItemType.BambooStairs; - mappings[422] = ItemType.BambooMosaicStairs; - mappings[423] = ItemType.CrimsonStairs; - mappings[424] = ItemType.WarpedStairs; - mappings[425] = ItemType.CommandBlock; - mappings[426] = ItemType.Beacon; - mappings[427] = ItemType.CobblestoneWall; - mappings[428] = ItemType.MossyCobblestoneWall; - mappings[429] = ItemType.BrickWall; - mappings[430] = ItemType.PrismarineWall; - mappings[431] = ItemType.RedSandstoneWall; - mappings[432] = ItemType.MossyStoneBrickWall; - mappings[433] = ItemType.GraniteWall; - mappings[434] = ItemType.StoneBrickWall; - mappings[435] = ItemType.MudBrickWall; - mappings[436] = ItemType.NetherBrickWall; - mappings[437] = ItemType.AndesiteWall; - mappings[438] = ItemType.RedNetherBrickWall; - mappings[439] = ItemType.SandstoneWall; - mappings[440] = ItemType.EndStoneBrickWall; - mappings[441] = ItemType.DioriteWall; - mappings[442] = ItemType.BlackstoneWall; - mappings[443] = ItemType.PolishedBlackstoneWall; - mappings[444] = ItemType.PolishedBlackstoneBrickWall; - mappings[445] = ItemType.CobbledDeepslateWall; - mappings[446] = ItemType.PolishedDeepslateWall; - mappings[447] = ItemType.DeepslateBrickWall; - mappings[448] = ItemType.DeepslateTileWall; - mappings[449] = ItemType.Anvil; - mappings[450] = ItemType.ChippedAnvil; - mappings[451] = ItemType.DamagedAnvil; - mappings[452] = ItemType.ChiseledQuartzBlock; - mappings[453] = ItemType.QuartzBlock; - mappings[454] = ItemType.QuartzBricks; - mappings[455] = ItemType.QuartzPillar; - mappings[456] = ItemType.QuartzStairs; - mappings[457] = ItemType.WhiteTerracotta; - mappings[458] = ItemType.OrangeTerracotta; - mappings[459] = ItemType.MagentaTerracotta; - mappings[460] = ItemType.LightBlueTerracotta; - mappings[461] = ItemType.YellowTerracotta; - mappings[462] = ItemType.LimeTerracotta; - mappings[463] = ItemType.PinkTerracotta; - mappings[464] = ItemType.GrayTerracotta; - mappings[465] = ItemType.LightGrayTerracotta; - mappings[466] = ItemType.CyanTerracotta; - mappings[467] = ItemType.PurpleTerracotta; - mappings[468] = ItemType.BlueTerracotta; - mappings[469] = ItemType.BrownTerracotta; - mappings[470] = ItemType.GreenTerracotta; - mappings[471] = ItemType.RedTerracotta; - mappings[472] = ItemType.BlackTerracotta; - mappings[473] = ItemType.Barrier; - mappings[474] = ItemType.Light; - mappings[475] = ItemType.HayBlock; - mappings[476] = ItemType.WhiteCarpet; - mappings[477] = ItemType.OrangeCarpet; - mappings[478] = ItemType.MagentaCarpet; - mappings[479] = ItemType.LightBlueCarpet; - mappings[480] = ItemType.YellowCarpet; - mappings[481] = ItemType.LimeCarpet; - mappings[482] = ItemType.PinkCarpet; - mappings[483] = ItemType.GrayCarpet; - mappings[484] = ItemType.LightGrayCarpet; - mappings[485] = ItemType.CyanCarpet; - mappings[486] = ItemType.PurpleCarpet; - mappings[487] = ItemType.BlueCarpet; - mappings[488] = ItemType.BrownCarpet; - mappings[489] = ItemType.GreenCarpet; - mappings[490] = ItemType.RedCarpet; - mappings[491] = ItemType.BlackCarpet; - mappings[492] = ItemType.Terracotta; - mappings[493] = ItemType.PackedIce; - mappings[494] = ItemType.DirtPath; - mappings[495] = ItemType.Sunflower; - mappings[496] = ItemType.Lilac; - mappings[497] = ItemType.RoseBush; - mappings[498] = ItemType.Peony; - mappings[499] = ItemType.TallGrass; - mappings[500] = ItemType.LargeFern; - mappings[501] = ItemType.WhiteStainedGlass; - mappings[502] = ItemType.OrangeStainedGlass; - mappings[503] = ItemType.MagentaStainedGlass; - mappings[504] = ItemType.LightBlueStainedGlass; - mappings[505] = ItemType.YellowStainedGlass; - mappings[506] = ItemType.LimeStainedGlass; - mappings[507] = ItemType.PinkStainedGlass; - mappings[508] = ItemType.GrayStainedGlass; - mappings[509] = ItemType.LightGrayStainedGlass; - mappings[510] = ItemType.CyanStainedGlass; - mappings[511] = ItemType.PurpleStainedGlass; - mappings[512] = ItemType.BlueStainedGlass; - mappings[513] = ItemType.BrownStainedGlass; - mappings[514] = ItemType.GreenStainedGlass; - mappings[515] = ItemType.RedStainedGlass; - mappings[516] = ItemType.BlackStainedGlass; - mappings[517] = ItemType.WhiteStainedGlassPane; - mappings[518] = ItemType.OrangeStainedGlassPane; - mappings[519] = ItemType.MagentaStainedGlassPane; - mappings[520] = ItemType.LightBlueStainedGlassPane; - mappings[521] = ItemType.YellowStainedGlassPane; - mappings[522] = ItemType.LimeStainedGlassPane; - mappings[523] = ItemType.PinkStainedGlassPane; - mappings[524] = ItemType.GrayStainedGlassPane; - mappings[525] = ItemType.LightGrayStainedGlassPane; - mappings[526] = ItemType.CyanStainedGlassPane; - mappings[527] = ItemType.PurpleStainedGlassPane; - mappings[528] = ItemType.BlueStainedGlassPane; - mappings[529] = ItemType.BrownStainedGlassPane; - mappings[530] = ItemType.GreenStainedGlassPane; - mappings[531] = ItemType.RedStainedGlassPane; - mappings[532] = ItemType.BlackStainedGlassPane; - mappings[533] = ItemType.Prismarine; - mappings[534] = ItemType.PrismarineBricks; - mappings[535] = ItemType.DarkPrismarine; - mappings[536] = ItemType.PrismarineStairs; - mappings[537] = ItemType.PrismarineBrickStairs; - mappings[538] = ItemType.DarkPrismarineStairs; - mappings[539] = ItemType.SeaLantern; - mappings[540] = ItemType.RedSandstone; - mappings[541] = ItemType.ChiseledRedSandstone; - mappings[542] = ItemType.CutRedSandstone; - mappings[543] = ItemType.RedSandstoneStairs; - mappings[544] = ItemType.RepeatingCommandBlock; - mappings[545] = ItemType.ChainCommandBlock; - mappings[546] = ItemType.MagmaBlock; - mappings[547] = ItemType.NetherWartBlock; - mappings[548] = ItemType.WarpedWartBlock; - mappings[549] = ItemType.RedNetherBricks; - mappings[550] = ItemType.BoneBlock; - mappings[551] = ItemType.StructureVoid; - mappings[552] = ItemType.ShulkerBox; - mappings[553] = ItemType.WhiteShulkerBox; - mappings[554] = ItemType.OrangeShulkerBox; - mappings[555] = ItemType.MagentaShulkerBox; - mappings[556] = ItemType.LightBlueShulkerBox; - mappings[557] = ItemType.YellowShulkerBox; - mappings[558] = ItemType.LimeShulkerBox; - mappings[559] = ItemType.PinkShulkerBox; - mappings[560] = ItemType.GrayShulkerBox; - mappings[561] = ItemType.LightGrayShulkerBox; - mappings[562] = ItemType.CyanShulkerBox; - mappings[563] = ItemType.PurpleShulkerBox; - mappings[564] = ItemType.BlueShulkerBox; - mappings[565] = ItemType.BrownShulkerBox; - mappings[566] = ItemType.GreenShulkerBox; - mappings[567] = ItemType.RedShulkerBox; - mappings[568] = ItemType.BlackShulkerBox; - mappings[569] = ItemType.WhiteGlazedTerracotta; - mappings[570] = ItemType.OrangeGlazedTerracotta; - mappings[571] = ItemType.MagentaGlazedTerracotta; - mappings[572] = ItemType.LightBlueGlazedTerracotta; - mappings[573] = ItemType.YellowGlazedTerracotta; - mappings[574] = ItemType.LimeGlazedTerracotta; - mappings[575] = ItemType.PinkGlazedTerracotta; - mappings[576] = ItemType.GrayGlazedTerracotta; - mappings[577] = ItemType.LightGrayGlazedTerracotta; - mappings[578] = ItemType.CyanGlazedTerracotta; - mappings[579] = ItemType.PurpleGlazedTerracotta; - mappings[580] = ItemType.BlueGlazedTerracotta; - mappings[581] = ItemType.BrownGlazedTerracotta; - mappings[582] = ItemType.GreenGlazedTerracotta; - mappings[583] = ItemType.RedGlazedTerracotta; - mappings[584] = ItemType.BlackGlazedTerracotta; - mappings[585] = ItemType.WhiteConcrete; - mappings[586] = ItemType.OrangeConcrete; - mappings[587] = ItemType.MagentaConcrete; - mappings[588] = ItemType.LightBlueConcrete; - mappings[589] = ItemType.YellowConcrete; - mappings[590] = ItemType.LimeConcrete; - mappings[591] = ItemType.PinkConcrete; - mappings[592] = ItemType.GrayConcrete; - mappings[593] = ItemType.LightGrayConcrete; - mappings[594] = ItemType.CyanConcrete; - mappings[595] = ItemType.PurpleConcrete; - mappings[596] = ItemType.BlueConcrete; - mappings[597] = ItemType.BrownConcrete; - mappings[598] = ItemType.GreenConcrete; - mappings[599] = ItemType.RedConcrete; - mappings[600] = ItemType.BlackConcrete; - mappings[601] = ItemType.WhiteConcretePowder; - mappings[602] = ItemType.OrangeConcretePowder; - mappings[603] = ItemType.MagentaConcretePowder; - mappings[604] = ItemType.LightBlueConcretePowder; - mappings[605] = ItemType.YellowConcretePowder; - mappings[606] = ItemType.LimeConcretePowder; - mappings[607] = ItemType.PinkConcretePowder; - mappings[608] = ItemType.GrayConcretePowder; - mappings[609] = ItemType.LightGrayConcretePowder; - mappings[610] = ItemType.CyanConcretePowder; - mappings[611] = ItemType.PurpleConcretePowder; - mappings[612] = ItemType.BlueConcretePowder; - mappings[613] = ItemType.BrownConcretePowder; - mappings[614] = ItemType.GreenConcretePowder; - mappings[615] = ItemType.RedConcretePowder; - mappings[616] = ItemType.BlackConcretePowder; - mappings[617] = ItemType.TurtleEgg; - mappings[618] = ItemType.SnifferEgg; - mappings[619] = ItemType.DriedGhast; - mappings[620] = ItemType.DeadTubeCoralBlock; - mappings[621] = ItemType.DeadBrainCoralBlock; - mappings[622] = ItemType.DeadBubbleCoralBlock; - mappings[623] = ItemType.DeadFireCoralBlock; - mappings[624] = ItemType.DeadHornCoralBlock; - mappings[625] = ItemType.TubeCoralBlock; - mappings[626] = ItemType.BrainCoralBlock; - mappings[627] = ItemType.BubbleCoralBlock; - mappings[628] = ItemType.FireCoralBlock; - mappings[629] = ItemType.HornCoralBlock; - mappings[630] = ItemType.TubeCoral; - mappings[631] = ItemType.BrainCoral; - mappings[632] = ItemType.BubbleCoral; - mappings[633] = ItemType.FireCoral; - mappings[634] = ItemType.HornCoral; - mappings[635] = ItemType.DeadBrainCoral; - mappings[636] = ItemType.DeadBubbleCoral; - mappings[637] = ItemType.DeadFireCoral; - mappings[638] = ItemType.DeadHornCoral; - mappings[639] = ItemType.DeadTubeCoral; - mappings[640] = ItemType.TubeCoralFan; - mappings[641] = ItemType.BrainCoralFan; - mappings[642] = ItemType.BubbleCoralFan; - mappings[643] = ItemType.FireCoralFan; - mappings[644] = ItemType.HornCoralFan; - mappings[645] = ItemType.DeadTubeCoralFan; - mappings[646] = ItemType.DeadBrainCoralFan; - mappings[647] = ItemType.DeadBubbleCoralFan; - mappings[648] = ItemType.DeadFireCoralFan; - mappings[649] = ItemType.DeadHornCoralFan; - mappings[650] = ItemType.BlueIce; - mappings[651] = ItemType.Conduit; - mappings[652] = ItemType.PolishedGraniteStairs; - mappings[653] = ItemType.SmoothRedSandstoneStairs; - mappings[654] = ItemType.MossyStoneBrickStairs; - mappings[655] = ItemType.PolishedDioriteStairs; - mappings[656] = ItemType.MossyCobblestoneStairs; - mappings[657] = ItemType.EndStoneBrickStairs; - mappings[658] = ItemType.StoneStairs; - mappings[659] = ItemType.SmoothSandstoneStairs; - mappings[660] = ItemType.SmoothQuartzStairs; - mappings[661] = ItemType.GraniteStairs; - mappings[662] = ItemType.AndesiteStairs; - mappings[663] = ItemType.RedNetherBrickStairs; - mappings[664] = ItemType.PolishedAndesiteStairs; - mappings[665] = ItemType.DioriteStairs; - mappings[666] = ItemType.CobbledDeepslateStairs; - mappings[667] = ItemType.PolishedDeepslateStairs; - mappings[668] = ItemType.DeepslateBrickStairs; - mappings[669] = ItemType.DeepslateTileStairs; - mappings[670] = ItemType.PolishedGraniteSlab; - mappings[671] = ItemType.SmoothRedSandstoneSlab; - mappings[672] = ItemType.MossyStoneBrickSlab; - mappings[673] = ItemType.PolishedDioriteSlab; - mappings[674] = ItemType.MossyCobblestoneSlab; - mappings[675] = ItemType.EndStoneBrickSlab; - mappings[676] = ItemType.SmoothSandstoneSlab; - mappings[677] = ItemType.SmoothQuartzSlab; - mappings[678] = ItemType.GraniteSlab; - mappings[679] = ItemType.AndesiteSlab; - mappings[680] = ItemType.RedNetherBrickSlab; - mappings[681] = ItemType.PolishedAndesiteSlab; - mappings[682] = ItemType.DioriteSlab; - mappings[683] = ItemType.CobbledDeepslateSlab; - mappings[684] = ItemType.PolishedDeepslateSlab; - mappings[685] = ItemType.DeepslateBrickSlab; - mappings[686] = ItemType.DeepslateTileSlab; - mappings[687] = ItemType.Scaffolding; - mappings[688] = ItemType.Redstone; - mappings[689] = ItemType.RedstoneTorch; - mappings[690] = ItemType.RedstoneBlock; - mappings[691] = ItemType.Repeater; - mappings[692] = ItemType.Comparator; - mappings[693] = ItemType.Piston; - mappings[694] = ItemType.StickyPiston; - mappings[695] = ItemType.SlimeBlock; - mappings[696] = ItemType.HoneyBlock; - mappings[697] = ItemType.Observer; - mappings[698] = ItemType.Hopper; - mappings[699] = ItemType.Dispenser; - mappings[700] = ItemType.Dropper; - mappings[701] = ItemType.Lectern; - mappings[702] = ItemType.Target; - mappings[703] = ItemType.Lever; - mappings[704] = ItemType.LightningRod; - mappings[705] = ItemType.DaylightDetector; - mappings[706] = ItemType.SculkSensor; - mappings[707] = ItemType.CalibratedSculkSensor; - mappings[708] = ItemType.TripwireHook; - mappings[709] = ItemType.TrappedChest; - mappings[710] = ItemType.Tnt; - mappings[711] = ItemType.RedstoneLamp; - mappings[712] = ItemType.NoteBlock; - mappings[713] = ItemType.StoneButton; - mappings[714] = ItemType.PolishedBlackstoneButton; - mappings[715] = ItemType.OakButton; - mappings[716] = ItemType.SpruceButton; - mappings[717] = ItemType.BirchButton; - mappings[718] = ItemType.JungleButton; - mappings[719] = ItemType.AcaciaButton; - mappings[720] = ItemType.CherryButton; - mappings[721] = ItemType.DarkOakButton; - mappings[722] = ItemType.PaleOakButton; - mappings[723] = ItemType.MangroveButton; - mappings[724] = ItemType.BambooButton; - mappings[725] = ItemType.CrimsonButton; - mappings[726] = ItemType.WarpedButton; - mappings[727] = ItemType.StonePressurePlate; - mappings[728] = ItemType.PolishedBlackstonePressurePlate; - mappings[729] = ItemType.LightWeightedPressurePlate; - mappings[730] = ItemType.HeavyWeightedPressurePlate; - mappings[731] = ItemType.OakPressurePlate; - mappings[732] = ItemType.SprucePressurePlate; - mappings[733] = ItemType.BirchPressurePlate; - mappings[734] = ItemType.JunglePressurePlate; - mappings[735] = ItemType.AcaciaPressurePlate; - mappings[736] = ItemType.CherryPressurePlate; - mappings[737] = ItemType.DarkOakPressurePlate; - mappings[738] = ItemType.PaleOakPressurePlate; - mappings[739] = ItemType.MangrovePressurePlate; - mappings[740] = ItemType.BambooPressurePlate; - mappings[741] = ItemType.CrimsonPressurePlate; - mappings[742] = ItemType.WarpedPressurePlate; - mappings[743] = ItemType.IronDoor; - mappings[744] = ItemType.OakDoor; - mappings[745] = ItemType.SpruceDoor; - mappings[746] = ItemType.BirchDoor; - mappings[747] = ItemType.JungleDoor; - mappings[748] = ItemType.AcaciaDoor; - mappings[749] = ItemType.CherryDoor; - mappings[750] = ItemType.DarkOakDoor; - mappings[751] = ItemType.PaleOakDoor; - mappings[752] = ItemType.MangroveDoor; - mappings[753] = ItemType.BambooDoor; - mappings[754] = ItemType.CrimsonDoor; - mappings[755] = ItemType.WarpedDoor; - mappings[756] = ItemType.CopperDoor; - mappings[757] = ItemType.ExposedCopperDoor; - mappings[758] = ItemType.WeatheredCopperDoor; - mappings[759] = ItemType.OxidizedCopperDoor; - mappings[760] = ItemType.WaxedCopperDoor; - mappings[761] = ItemType.WaxedExposedCopperDoor; - mappings[762] = ItemType.WaxedWeatheredCopperDoor; - mappings[763] = ItemType.WaxedOxidizedCopperDoor; - mappings[764] = ItemType.IronTrapdoor; - mappings[765] = ItemType.OakTrapdoor; - mappings[766] = ItemType.SpruceTrapdoor; - mappings[767] = ItemType.BirchTrapdoor; - mappings[768] = ItemType.JungleTrapdoor; - mappings[769] = ItemType.AcaciaTrapdoor; - mappings[770] = ItemType.CherryTrapdoor; - mappings[771] = ItemType.DarkOakTrapdoor; - mappings[772] = ItemType.PaleOakTrapdoor; - mappings[773] = ItemType.MangroveTrapdoor; - mappings[774] = ItemType.BambooTrapdoor; - mappings[775] = ItemType.CrimsonTrapdoor; - mappings[776] = ItemType.WarpedTrapdoor; - mappings[777] = ItemType.CopperTrapdoor; - mappings[778] = ItemType.ExposedCopperTrapdoor; - mappings[779] = ItemType.WeatheredCopperTrapdoor; - mappings[780] = ItemType.OxidizedCopperTrapdoor; - mappings[781] = ItemType.WaxedCopperTrapdoor; - mappings[782] = ItemType.WaxedExposedCopperTrapdoor; - mappings[783] = ItemType.WaxedWeatheredCopperTrapdoor; - mappings[784] = ItemType.WaxedOxidizedCopperTrapdoor; - mappings[785] = ItemType.OakFenceGate; - mappings[786] = ItemType.SpruceFenceGate; - mappings[787] = ItemType.BirchFenceGate; - mappings[788] = ItemType.JungleFenceGate; - mappings[789] = ItemType.AcaciaFenceGate; - mappings[790] = ItemType.CherryFenceGate; - mappings[791] = ItemType.DarkOakFenceGate; - mappings[792] = ItemType.PaleOakFenceGate; - mappings[793] = ItemType.MangroveFenceGate; - mappings[794] = ItemType.BambooFenceGate; - mappings[795] = ItemType.CrimsonFenceGate; - mappings[796] = ItemType.WarpedFenceGate; - mappings[797] = ItemType.PoweredRail; - mappings[798] = ItemType.DetectorRail; - mappings[799] = ItemType.Rail; - mappings[800] = ItemType.ActivatorRail; - mappings[801] = ItemType.Saddle; - mappings[802] = ItemType.WhiteHarness; - mappings[803] = ItemType.OrangeHarness; - mappings[804] = ItemType.MagentaHarness; - mappings[805] = ItemType.LightBlueHarness; - mappings[806] = ItemType.YellowHarness; - mappings[807] = ItemType.LimeHarness; - mappings[808] = ItemType.PinkHarness; - mappings[809] = ItemType.GrayHarness; - mappings[810] = ItemType.LightGrayHarness; - mappings[811] = ItemType.CyanHarness; - mappings[812] = ItemType.PurpleHarness; - mappings[813] = ItemType.BlueHarness; - mappings[814] = ItemType.BrownHarness; - mappings[815] = ItemType.GreenHarness; - mappings[816] = ItemType.RedHarness; - mappings[817] = ItemType.BlackHarness; - mappings[818] = ItemType.Minecart; - mappings[819] = ItemType.ChestMinecart; - mappings[820] = ItemType.FurnaceMinecart; - mappings[821] = ItemType.TntMinecart; - mappings[822] = ItemType.HopperMinecart; - mappings[823] = ItemType.CarrotOnAStick; - mappings[824] = ItemType.WarpedFungusOnAStick; - mappings[825] = ItemType.PhantomMembrane; - mappings[826] = ItemType.Elytra; - mappings[827] = ItemType.OakBoat; - mappings[828] = ItemType.OakChestBoat; - mappings[829] = ItemType.SpruceBoat; - mappings[830] = ItemType.SpruceChestBoat; - mappings[831] = ItemType.BirchBoat; - mappings[832] = ItemType.BirchChestBoat; - mappings[833] = ItemType.JungleBoat; - mappings[834] = ItemType.JungleChestBoat; - mappings[835] = ItemType.AcaciaBoat; - mappings[836] = ItemType.AcaciaChestBoat; - mappings[837] = ItemType.CherryBoat; - mappings[838] = ItemType.CherryChestBoat; - mappings[839] = ItemType.DarkOakBoat; - mappings[840] = ItemType.DarkOakChestBoat; - mappings[841] = ItemType.PaleOakBoat; - mappings[842] = ItemType.PaleOakChestBoat; - mappings[843] = ItemType.MangroveBoat; - mappings[844] = ItemType.MangroveChestBoat; - mappings[845] = ItemType.BambooRaft; - mappings[846] = ItemType.BambooChestRaft; - mappings[847] = ItemType.StructureBlock; - mappings[848] = ItemType.Jigsaw; - mappings[849] = ItemType.TestBlock; - mappings[850] = ItemType.TestInstanceBlock; - mappings[851] = ItemType.TurtleHelmet; - mappings[852] = ItemType.TurtleScute; - mappings[853] = ItemType.ArmadilloScute; - mappings[854] = ItemType.WolfArmor; - mappings[855] = ItemType.FlintAndSteel; - mappings[856] = ItemType.Bowl; - mappings[857] = ItemType.Apple; - mappings[858] = ItemType.Bow; - mappings[859] = ItemType.Arrow; - mappings[860] = ItemType.Coal; - mappings[861] = ItemType.Charcoal; - mappings[862] = ItemType.Diamond; - mappings[863] = ItemType.Emerald; - mappings[864] = ItemType.LapisLazuli; - mappings[865] = ItemType.Quartz; - mappings[866] = ItemType.AmethystShard; - mappings[867] = ItemType.RawIron; - mappings[868] = ItemType.IronIngot; - mappings[869] = ItemType.RawCopper; - mappings[870] = ItemType.CopperIngot; - mappings[871] = ItemType.RawGold; - mappings[872] = ItemType.GoldIngot; - mappings[873] = ItemType.NetheriteIngot; - mappings[874] = ItemType.NetheriteScrap; - mappings[875] = ItemType.WoodenSword; - mappings[876] = ItemType.WoodenShovel; - mappings[877] = ItemType.WoodenPickaxe; - mappings[878] = ItemType.WoodenAxe; - mappings[879] = ItemType.WoodenHoe; - mappings[880] = ItemType.StoneSword; - mappings[881] = ItemType.StoneShovel; - mappings[882] = ItemType.StonePickaxe; - mappings[883] = ItemType.StoneAxe; - mappings[884] = ItemType.StoneHoe; - mappings[885] = ItemType.GoldenSword; - mappings[886] = ItemType.GoldenShovel; - mappings[887] = ItemType.GoldenPickaxe; - mappings[888] = ItemType.GoldenAxe; - mappings[889] = ItemType.GoldenHoe; - mappings[890] = ItemType.IronSword; - mappings[891] = ItemType.IronShovel; - mappings[892] = ItemType.IronPickaxe; - mappings[893] = ItemType.IronAxe; - mappings[894] = ItemType.IronHoe; - mappings[895] = ItemType.DiamondSword; - mappings[896] = ItemType.DiamondShovel; - mappings[897] = ItemType.DiamondPickaxe; - mappings[898] = ItemType.DiamondAxe; - mappings[899] = ItemType.DiamondHoe; - mappings[900] = ItemType.NetheriteSword; - mappings[901] = ItemType.NetheriteShovel; - mappings[902] = ItemType.NetheritePickaxe; - mappings[903] = ItemType.NetheriteAxe; - mappings[904] = ItemType.NetheriteHoe; - mappings[905] = ItemType.Stick; - mappings[906] = ItemType.MushroomStew; - mappings[907] = ItemType.String; - mappings[908] = ItemType.Feather; - mappings[909] = ItemType.Gunpowder; - mappings[910] = ItemType.WheatSeeds; - mappings[911] = ItemType.Wheat; - mappings[912] = ItemType.Bread; - mappings[913] = ItemType.LeatherHelmet; - mappings[914] = ItemType.LeatherChestplate; - mappings[915] = ItemType.LeatherLeggings; - mappings[916] = ItemType.LeatherBoots; - mappings[917] = ItemType.ChainmailHelmet; - mappings[918] = ItemType.ChainmailChestplate; - mappings[919] = ItemType.ChainmailLeggings; - mappings[920] = ItemType.ChainmailBoots; - mappings[921] = ItemType.IronHelmet; - mappings[922] = ItemType.IronChestplate; - mappings[923] = ItemType.IronLeggings; - mappings[924] = ItemType.IronBoots; - mappings[925] = ItemType.DiamondHelmet; - mappings[926] = ItemType.DiamondChestplate; - mappings[927] = ItemType.DiamondLeggings; - mappings[928] = ItemType.DiamondBoots; - mappings[929] = ItemType.GoldenHelmet; - mappings[930] = ItemType.GoldenChestplate; - mappings[931] = ItemType.GoldenLeggings; - mappings[932] = ItemType.GoldenBoots; - mappings[933] = ItemType.NetheriteHelmet; - mappings[934] = ItemType.NetheriteChestplate; - mappings[935] = ItemType.NetheriteLeggings; - mappings[936] = ItemType.NetheriteBoots; - mappings[937] = ItemType.Flint; - mappings[938] = ItemType.Porkchop; - mappings[939] = ItemType.CookedPorkchop; - mappings[940] = ItemType.Painting; - mappings[941] = ItemType.GoldenApple; - mappings[942] = ItemType.EnchantedGoldenApple; - mappings[943] = ItemType.OakSign; - mappings[944] = ItemType.SpruceSign; - mappings[945] = ItemType.BirchSign; - mappings[946] = ItemType.JungleSign; - mappings[947] = ItemType.AcaciaSign; - mappings[948] = ItemType.CherrySign; - mappings[949] = ItemType.DarkOakSign; - mappings[950] = ItemType.PaleOakSign; - mappings[951] = ItemType.MangroveSign; - mappings[952] = ItemType.BambooSign; - mappings[953] = ItemType.CrimsonSign; - mappings[954] = ItemType.WarpedSign; - mappings[955] = ItemType.OakHangingSign; - mappings[956] = ItemType.SpruceHangingSign; - mappings[957] = ItemType.BirchHangingSign; - mappings[958] = ItemType.JungleHangingSign; - mappings[959] = ItemType.AcaciaHangingSign; - mappings[960] = ItemType.CherryHangingSign; - mappings[961] = ItemType.DarkOakHangingSign; - mappings[962] = ItemType.PaleOakHangingSign; - mappings[963] = ItemType.MangroveHangingSign; - mappings[964] = ItemType.BambooHangingSign; - mappings[965] = ItemType.CrimsonHangingSign; - mappings[966] = ItemType.WarpedHangingSign; - mappings[967] = ItemType.Bucket; - mappings[968] = ItemType.WaterBucket; - mappings[969] = ItemType.LavaBucket; - mappings[970] = ItemType.PowderSnowBucket; - mappings[971] = ItemType.Snowball; - mappings[972] = ItemType.Leather; - mappings[973] = ItemType.MilkBucket; - mappings[974] = ItemType.PufferfishBucket; - mappings[975] = ItemType.SalmonBucket; - mappings[976] = ItemType.CodBucket; - mappings[977] = ItemType.TropicalFishBucket; - mappings[978] = ItemType.AxolotlBucket; - mappings[979] = ItemType.TadpoleBucket; - mappings[980] = ItemType.Brick; - mappings[981] = ItemType.ClayBall; - mappings[982] = ItemType.DriedKelpBlock; - mappings[983] = ItemType.Paper; - mappings[984] = ItemType.Book; - mappings[985] = ItemType.SlimeBall; - mappings[986] = ItemType.Egg; - mappings[987] = ItemType.BlueEgg; - mappings[988] = ItemType.BrownEgg; - mappings[989] = ItemType.Compass; - mappings[990] = ItemType.RecoveryCompass; - mappings[991] = ItemType.Bundle; - mappings[992] = ItemType.WhiteBundle; - mappings[993] = ItemType.OrangeBundle; - mappings[994] = ItemType.MagentaBundle; - mappings[995] = ItemType.LightBlueBundle; - mappings[996] = ItemType.YellowBundle; - mappings[997] = ItemType.LimeBundle; - mappings[998] = ItemType.PinkBundle; - mappings[999] = ItemType.GrayBundle; - mappings[1000] = ItemType.LightGrayBundle; - mappings[1001] = ItemType.CyanBundle; - mappings[1002] = ItemType.PurpleBundle; - mappings[1003] = ItemType.BlueBundle; - mappings[1004] = ItemType.BrownBundle; - mappings[1005] = ItemType.GreenBundle; - mappings[1006] = ItemType.RedBundle; - mappings[1007] = ItemType.BlackBundle; - mappings[1008] = ItemType.FishingRod; - mappings[1009] = ItemType.Clock; - mappings[1010] = ItemType.Spyglass; - mappings[1011] = ItemType.GlowstoneDust; - mappings[1012] = ItemType.Cod; - mappings[1013] = ItemType.Salmon; - mappings[1014] = ItemType.TropicalFish; - mappings[1015] = ItemType.Pufferfish; - mappings[1016] = ItemType.CookedCod; - mappings[1017] = ItemType.CookedSalmon; - mappings[1018] = ItemType.InkSac; - mappings[1019] = ItemType.GlowInkSac; - mappings[1020] = ItemType.CocoaBeans; - mappings[1021] = ItemType.WhiteDye; - mappings[1022] = ItemType.OrangeDye; - mappings[1023] = ItemType.MagentaDye; - mappings[1024] = ItemType.LightBlueDye; - mappings[1025] = ItemType.YellowDye; - mappings[1026] = ItemType.LimeDye; - mappings[1027] = ItemType.PinkDye; - mappings[1028] = ItemType.GrayDye; - mappings[1029] = ItemType.LightGrayDye; - mappings[1030] = ItemType.CyanDye; - mappings[1031] = ItemType.PurpleDye; - mappings[1032] = ItemType.BlueDye; - mappings[1033] = ItemType.BrownDye; - mappings[1034] = ItemType.GreenDye; - mappings[1035] = ItemType.RedDye; - mappings[1036] = ItemType.BlackDye; - mappings[1037] = ItemType.BoneMeal; - mappings[1038] = ItemType.Bone; - mappings[1039] = ItemType.Sugar; - mappings[1040] = ItemType.Cake; - mappings[1041] = ItemType.WhiteBed; - mappings[1042] = ItemType.OrangeBed; - mappings[1043] = ItemType.MagentaBed; - mappings[1044] = ItemType.LightBlueBed; - mappings[1045] = ItemType.YellowBed; - mappings[1046] = ItemType.LimeBed; - mappings[1047] = ItemType.PinkBed; - mappings[1048] = ItemType.GrayBed; - mappings[1049] = ItemType.LightGrayBed; - mappings[1050] = ItemType.CyanBed; - mappings[1051] = ItemType.PurpleBed; - mappings[1052] = ItemType.BlueBed; - mappings[1053] = ItemType.BrownBed; - mappings[1054] = ItemType.GreenBed; - mappings[1055] = ItemType.RedBed; - mappings[1056] = ItemType.BlackBed; - mappings[1057] = ItemType.Cookie; - mappings[1058] = ItemType.Crafter; - mappings[1059] = ItemType.FilledMap; - mappings[1060] = ItemType.Shears; - mappings[1061] = ItemType.MelonSlice; - mappings[1062] = ItemType.DriedKelp; - mappings[1063] = ItemType.PumpkinSeeds; - mappings[1064] = ItemType.MelonSeeds; - mappings[1065] = ItemType.Beef; - mappings[1066] = ItemType.CookedBeef; - mappings[1067] = ItemType.Chicken; - mappings[1068] = ItemType.CookedChicken; - mappings[1069] = ItemType.RottenFlesh; - mappings[1070] = ItemType.EnderPearl; - mappings[1071] = ItemType.BlazeRod; - mappings[1072] = ItemType.GhastTear; - mappings[1073] = ItemType.GoldNugget; - mappings[1074] = ItemType.NetherWart; - mappings[1075] = ItemType.GlassBottle; - mappings[1076] = ItemType.Potion; - mappings[1077] = ItemType.SpiderEye; - mappings[1078] = ItemType.FermentedSpiderEye; - mappings[1079] = ItemType.BlazePowder; - mappings[1080] = ItemType.MagmaCream; - mappings[1081] = ItemType.BrewingStand; - mappings[1082] = ItemType.Cauldron; - mappings[1083] = ItemType.EnderEye; - mappings[1084] = ItemType.GlisteringMelonSlice; - mappings[1085] = ItemType.ArmadilloSpawnEgg; - mappings[1086] = ItemType.AllaySpawnEgg; - mappings[1087] = ItemType.AxolotlSpawnEgg; - mappings[1088] = ItemType.BatSpawnEgg; - mappings[1089] = ItemType.BeeSpawnEgg; - mappings[1090] = ItemType.BlazeSpawnEgg; - mappings[1091] = ItemType.BoggedSpawnEgg; - mappings[1092] = ItemType.BreezeSpawnEgg; - mappings[1093] = ItemType.CatSpawnEgg; - mappings[1094] = ItemType.CamelSpawnEgg; - mappings[1095] = ItemType.CaveSpiderSpawnEgg; - mappings[1096] = ItemType.ChickenSpawnEgg; - mappings[1097] = ItemType.CodSpawnEgg; - mappings[1098] = ItemType.CowSpawnEgg; - mappings[1099] = ItemType.CreeperSpawnEgg; - mappings[1100] = ItemType.DolphinSpawnEgg; - mappings[1101] = ItemType.DonkeySpawnEgg; - mappings[1102] = ItemType.DrownedSpawnEgg; - mappings[1103] = ItemType.ElderGuardianSpawnEgg; - mappings[1104] = ItemType.EnderDragonSpawnEgg; - mappings[1105] = ItemType.EndermanSpawnEgg; - mappings[1106] = ItemType.EndermiteSpawnEgg; - mappings[1107] = ItemType.EvokerSpawnEgg; - mappings[1108] = ItemType.FoxSpawnEgg; - mappings[1109] = ItemType.FrogSpawnEgg; - mappings[1110] = ItemType.GhastSpawnEgg; - mappings[1111] = ItemType.HappyGhastSpawnEgg; - mappings[1112] = ItemType.GlowSquidSpawnEgg; - mappings[1113] = ItemType.GoatSpawnEgg; - mappings[1114] = ItemType.GuardianSpawnEgg; - mappings[1115] = ItemType.HoglinSpawnEgg; - mappings[1116] = ItemType.HorseSpawnEgg; - mappings[1117] = ItemType.HuskSpawnEgg; - mappings[1118] = ItemType.IronGolemSpawnEgg; - mappings[1119] = ItemType.LlamaSpawnEgg; - mappings[1120] = ItemType.MagmaCubeSpawnEgg; - mappings[1121] = ItemType.MooshroomSpawnEgg; - mappings[1122] = ItemType.MuleSpawnEgg; - mappings[1123] = ItemType.OcelotSpawnEgg; - mappings[1124] = ItemType.PandaSpawnEgg; - mappings[1125] = ItemType.ParrotSpawnEgg; - mappings[1126] = ItemType.PhantomSpawnEgg; - mappings[1127] = ItemType.PigSpawnEgg; - mappings[1128] = ItemType.PiglinSpawnEgg; - mappings[1129] = ItemType.PiglinBruteSpawnEgg; - mappings[1130] = ItemType.PillagerSpawnEgg; - mappings[1131] = ItemType.PolarBearSpawnEgg; - mappings[1132] = ItemType.PufferfishSpawnEgg; - mappings[1133] = ItemType.RabbitSpawnEgg; - mappings[1134] = ItemType.RavagerSpawnEgg; - mappings[1135] = ItemType.SalmonSpawnEgg; - mappings[1136] = ItemType.SheepSpawnEgg; - mappings[1137] = ItemType.ShulkerSpawnEgg; - mappings[1138] = ItemType.SilverfishSpawnEgg; - mappings[1139] = ItemType.SkeletonSpawnEgg; - mappings[1140] = ItemType.SkeletonHorseSpawnEgg; - mappings[1141] = ItemType.SlimeSpawnEgg; - mappings[1142] = ItemType.SnifferSpawnEgg; - mappings[1143] = ItemType.SnowGolemSpawnEgg; - mappings[1144] = ItemType.SpiderSpawnEgg; - mappings[1145] = ItemType.SquidSpawnEgg; - mappings[1146] = ItemType.StraySpawnEgg; - mappings[1147] = ItemType.StriderSpawnEgg; - mappings[1148] = ItemType.TadpoleSpawnEgg; - mappings[1149] = ItemType.TraderLlamaSpawnEgg; - mappings[1150] = ItemType.TropicalFishSpawnEgg; - mappings[1151] = ItemType.TurtleSpawnEgg; - mappings[1152] = ItemType.VexSpawnEgg; - mappings[1153] = ItemType.VillagerSpawnEgg; - mappings[1154] = ItemType.VindicatorSpawnEgg; - mappings[1155] = ItemType.WanderingTraderSpawnEgg; - mappings[1156] = ItemType.WardenSpawnEgg; - mappings[1157] = ItemType.WitchSpawnEgg; - mappings[1158] = ItemType.WitherSpawnEgg; - mappings[1159] = ItemType.WitherSkeletonSpawnEgg; - mappings[1160] = ItemType.WolfSpawnEgg; - mappings[1161] = ItemType.ZoglinSpawnEgg; - mappings[1162] = ItemType.CreakingSpawnEgg; - mappings[1163] = ItemType.ZombieSpawnEgg; - mappings[1164] = ItemType.ZombieHorseSpawnEgg; - mappings[1165] = ItemType.ZombieVillagerSpawnEgg; - mappings[1166] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[1167] = ItemType.ExperienceBottle; - mappings[1168] = ItemType.FireCharge; - mappings[1169] = ItemType.WindCharge; - mappings[1170] = ItemType.WritableBook; - mappings[1171] = ItemType.WrittenBook; - mappings[1172] = ItemType.BreezeRod; - mappings[1173] = ItemType.Mace; - mappings[1174] = ItemType.ItemFrame; - mappings[1175] = ItemType.GlowItemFrame; - mappings[1176] = ItemType.FlowerPot; - mappings[1177] = ItemType.Carrot; - mappings[1178] = ItemType.Potato; - mappings[1179] = ItemType.BakedPotato; - mappings[1180] = ItemType.PoisonousPotato; - mappings[1181] = ItemType.Map; - mappings[1182] = ItemType.GoldenCarrot; - mappings[1183] = ItemType.SkeletonSkull; - mappings[1184] = ItemType.WitherSkeletonSkull; - mappings[1185] = ItemType.PlayerHead; - mappings[1186] = ItemType.ZombieHead; - mappings[1187] = ItemType.CreeperHead; - mappings[1188] = ItemType.DragonHead; - mappings[1189] = ItemType.PiglinHead; - mappings[1190] = ItemType.NetherStar; - mappings[1191] = ItemType.PumpkinPie; - mappings[1192] = ItemType.FireworkRocket; - mappings[1193] = ItemType.FireworkStar; - mappings[1194] = ItemType.EnchantedBook; - mappings[1195] = ItemType.NetherBrick; - mappings[1196] = ItemType.ResinBrick; - mappings[1197] = ItemType.PrismarineShard; - mappings[1198] = ItemType.PrismarineCrystals; - mappings[1199] = ItemType.Rabbit; - mappings[1200] = ItemType.CookedRabbit; - mappings[1201] = ItemType.RabbitStew; - mappings[1202] = ItemType.RabbitFoot; - mappings[1203] = ItemType.RabbitHide; - mappings[1204] = ItemType.ArmorStand; - mappings[1205] = ItemType.IronHorseArmor; - mappings[1206] = ItemType.GoldenHorseArmor; - mappings[1207] = ItemType.DiamondHorseArmor; - mappings[1208] = ItemType.LeatherHorseArmor; - mappings[1209] = ItemType.Lead; - mappings[1210] = ItemType.NameTag; - mappings[1211] = ItemType.CommandBlockMinecart; - mappings[1212] = ItemType.Mutton; - mappings[1213] = ItemType.CookedMutton; - mappings[1214] = ItemType.WhiteBanner; - mappings[1215] = ItemType.OrangeBanner; - mappings[1216] = ItemType.MagentaBanner; - mappings[1217] = ItemType.LightBlueBanner; - mappings[1218] = ItemType.YellowBanner; - mappings[1219] = ItemType.LimeBanner; - mappings[1220] = ItemType.PinkBanner; - mappings[1221] = ItemType.GrayBanner; - mappings[1222] = ItemType.LightGrayBanner; - mappings[1223] = ItemType.CyanBanner; - mappings[1224] = ItemType.PurpleBanner; - mappings[1225] = ItemType.BlueBanner; - mappings[1226] = ItemType.BrownBanner; - mappings[1227] = ItemType.GreenBanner; - mappings[1228] = ItemType.RedBanner; - mappings[1229] = ItemType.BlackBanner; - mappings[1230] = ItemType.EndCrystal; - mappings[1231] = ItemType.ChorusFruit; - mappings[1232] = ItemType.PoppedChorusFruit; - mappings[1233] = ItemType.TorchflowerSeeds; - mappings[1234] = ItemType.PitcherPod; - mappings[1235] = ItemType.Beetroot; - mappings[1236] = ItemType.BeetrootSeeds; - mappings[1237] = ItemType.BeetrootSoup; - mappings[1238] = ItemType.DragonBreath; - mappings[1239] = ItemType.SplashPotion; - mappings[1240] = ItemType.SpectralArrow; - mappings[1241] = ItemType.TippedArrow; - mappings[1242] = ItemType.LingeringPotion; - mappings[1243] = ItemType.Shield; - mappings[1244] = ItemType.TotemOfUndying; - mappings[1245] = ItemType.ShulkerShell; - mappings[1246] = ItemType.IronNugget; - mappings[1247] = ItemType.KnowledgeBook; - mappings[1248] = ItemType.DebugStick; - mappings[1249] = ItemType.MusicDisc13; - mappings[1250] = ItemType.MusicDiscCat; - mappings[1251] = ItemType.MusicDiscBlocks; - mappings[1252] = ItemType.MusicDiscChirp; - mappings[1253] = ItemType.MusicDiscCreator; - mappings[1254] = ItemType.MusicDiscCreatorMusicBox; - mappings[1255] = ItemType.MusicDiscFar; - mappings[1256] = ItemType.MusicDiscMall; - mappings[1257] = ItemType.MusicDiscMellohi; - mappings[1258] = ItemType.MusicDiscStal; - mappings[1259] = ItemType.MusicDiscStrad; - mappings[1260] = ItemType.MusicDiscWard; - mappings[1261] = ItemType.MusicDisc11; - mappings[1262] = ItemType.MusicDiscWait; - mappings[1263] = ItemType.MusicDiscOtherside; - mappings[1264] = ItemType.MusicDiscRelic; - mappings[1265] = ItemType.MusicDisc5; - mappings[1266] = ItemType.MusicDiscPigstep; - mappings[1267] = ItemType.MusicDiscPrecipice; - mappings[1268] = ItemType.MusicDiscTears; - mappings[1269] = ItemType.DiscFragment5; - mappings[1270] = ItemType.Trident; - mappings[1271] = ItemType.NautilusShell; - mappings[1272] = ItemType.HeartOfTheSea; - mappings[1273] = ItemType.Crossbow; - mappings[1274] = ItemType.SuspiciousStew; - mappings[1275] = ItemType.Loom; - mappings[1276] = ItemType.FlowerBannerPattern; - mappings[1277] = ItemType.CreeperBannerPattern; - mappings[1278] = ItemType.SkullBannerPattern; - mappings[1279] = ItemType.MojangBannerPattern; - mappings[1280] = ItemType.GlobeBannerPattern; - mappings[1281] = ItemType.PiglinBannerPattern; - mappings[1282] = ItemType.FlowBannerPattern; - mappings[1283] = ItemType.GusterBannerPattern; - mappings[1284] = ItemType.FieldMasonedBannerPattern; - mappings[1285] = ItemType.BordureIndentedBannerPattern; - mappings[1286] = ItemType.GoatHorn; - mappings[1287] = ItemType.Composter; - mappings[1288] = ItemType.Barrel; - mappings[1289] = ItemType.Smoker; - mappings[1290] = ItemType.BlastFurnace; - mappings[1291] = ItemType.CartographyTable; - mappings[1292] = ItemType.FletchingTable; - mappings[1293] = ItemType.Grindstone; - mappings[1294] = ItemType.SmithingTable; - mappings[1295] = ItemType.Stonecutter; - mappings[1296] = ItemType.Bell; - mappings[1297] = ItemType.Lantern; - mappings[1298] = ItemType.SoulLantern; - mappings[1299] = ItemType.SweetBerries; - mappings[1300] = ItemType.GlowBerries; - mappings[1301] = ItemType.Campfire; - mappings[1302] = ItemType.SoulCampfire; - mappings[1303] = ItemType.Shroomlight; - mappings[1304] = ItemType.Honeycomb; - mappings[1305] = ItemType.BeeNest; - mappings[1306] = ItemType.Beehive; - mappings[1307] = ItemType.HoneyBottle; - mappings[1308] = ItemType.HoneycombBlock; - mappings[1309] = ItemType.Lodestone; - mappings[1310] = ItemType.CryingObsidian; - mappings[1311] = ItemType.Blackstone; - mappings[1312] = ItemType.BlackstoneSlab; - mappings[1313] = ItemType.BlackstoneStairs; - mappings[1314] = ItemType.GildedBlackstone; - mappings[1315] = ItemType.PolishedBlackstone; - mappings[1316] = ItemType.PolishedBlackstoneSlab; - mappings[1317] = ItemType.PolishedBlackstoneStairs; - mappings[1318] = ItemType.ChiseledPolishedBlackstone; - mappings[1319] = ItemType.PolishedBlackstoneBricks; - mappings[1320] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1321] = ItemType.PolishedBlackstoneBrickStairs; - mappings[1322] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[1323] = ItemType.RespawnAnchor; - mappings[1324] = ItemType.Candle; - mappings[1325] = ItemType.WhiteCandle; - mappings[1326] = ItemType.OrangeCandle; - mappings[1327] = ItemType.MagentaCandle; - mappings[1328] = ItemType.LightBlueCandle; - mappings[1329] = ItemType.YellowCandle; - mappings[1330] = ItemType.LimeCandle; - mappings[1331] = ItemType.PinkCandle; - mappings[1332] = ItemType.GrayCandle; - mappings[1333] = ItemType.LightGrayCandle; - mappings[1334] = ItemType.CyanCandle; - mappings[1335] = ItemType.PurpleCandle; - mappings[1336] = ItemType.BlueCandle; - mappings[1337] = ItemType.BrownCandle; - mappings[1338] = ItemType.GreenCandle; - mappings[1339] = ItemType.RedCandle; - mappings[1340] = ItemType.BlackCandle; - mappings[1341] = ItemType.SmallAmethystBud; - mappings[1342] = ItemType.MediumAmethystBud; - mappings[1343] = ItemType.LargeAmethystBud; - mappings[1344] = ItemType.AmethystCluster; - mappings[1345] = ItemType.PointedDripstone; - mappings[1346] = ItemType.OchreFroglight; - mappings[1347] = ItemType.VerdantFroglight; - mappings[1348] = ItemType.PearlescentFroglight; - mappings[1349] = ItemType.Frogspawn; - mappings[1350] = ItemType.EchoShard; - mappings[1351] = ItemType.Brush; - mappings[1352] = ItemType.NetheriteUpgradeSmithingTemplate; - mappings[1353] = ItemType.SentryArmorTrimSmithingTemplate; - mappings[1354] = ItemType.DuneArmorTrimSmithingTemplate; - mappings[1355] = ItemType.CoastArmorTrimSmithingTemplate; - mappings[1356] = ItemType.WildArmorTrimSmithingTemplate; - mappings[1357] = ItemType.WardArmorTrimSmithingTemplate; - mappings[1358] = ItemType.EyeArmorTrimSmithingTemplate; - mappings[1359] = ItemType.VexArmorTrimSmithingTemplate; - mappings[1360] = ItemType.TideArmorTrimSmithingTemplate; - mappings[1361] = ItemType.SnoutArmorTrimSmithingTemplate; - mappings[1362] = ItemType.RibArmorTrimSmithingTemplate; - mappings[1363] = ItemType.SpireArmorTrimSmithingTemplate; - mappings[1364] = ItemType.WayfinderArmorTrimSmithingTemplate; - mappings[1365] = ItemType.ShaperArmorTrimSmithingTemplate; - mappings[1366] = ItemType.SilenceArmorTrimSmithingTemplate; - mappings[1367] = ItemType.RaiserArmorTrimSmithingTemplate; - mappings[1368] = ItemType.HostArmorTrimSmithingTemplate; - mappings[1369] = ItemType.FlowArmorTrimSmithingTemplate; - mappings[1370] = ItemType.BoltArmorTrimSmithingTemplate; - mappings[1371] = ItemType.AnglerPotterySherd; - mappings[1372] = ItemType.ArcherPotterySherd; - mappings[1373] = ItemType.ArmsUpPotterySherd; - mappings[1374] = ItemType.BladePotterySherd; - mappings[1375] = ItemType.BrewerPotterySherd; - mappings[1376] = ItemType.BurnPotterySherd; - mappings[1377] = ItemType.DangerPotterySherd; - mappings[1378] = ItemType.ExplorerPotterySherd; - mappings[1379] = ItemType.FlowPotterySherd; - mappings[1380] = ItemType.FriendPotterySherd; - mappings[1381] = ItemType.GusterPotterySherd; - mappings[1382] = ItemType.HeartPotterySherd; - mappings[1383] = ItemType.HeartbreakPotterySherd; - mappings[1384] = ItemType.HowlPotterySherd; - mappings[1385] = ItemType.MinerPotterySherd; - mappings[1386] = ItemType.MournerPotterySherd; - mappings[1387] = ItemType.PlentyPotterySherd; - mappings[1388] = ItemType.PrizePotterySherd; - mappings[1389] = ItemType.ScrapePotterySherd; - mappings[1390] = ItemType.SheafPotterySherd; - mappings[1391] = ItemType.ShelterPotterySherd; - mappings[1392] = ItemType.SkullPotterySherd; - mappings[1393] = ItemType.SnortPotterySherd; - mappings[1394] = ItemType.CopperGrate; - mappings[1395] = ItemType.ExposedCopperGrate; - mappings[1396] = ItemType.WeatheredCopperGrate; - mappings[1397] = ItemType.OxidizedCopperGrate; - mappings[1398] = ItemType.WaxedCopperGrate; - mappings[1399] = ItemType.WaxedExposedCopperGrate; - mappings[1400] = ItemType.WaxedWeatheredCopperGrate; - mappings[1401] = ItemType.WaxedOxidizedCopperGrate; - mappings[1402] = ItemType.CopperBulb; - mappings[1403] = ItemType.ExposedCopperBulb; - mappings[1404] = ItemType.WeatheredCopperBulb; - mappings[1405] = ItemType.OxidizedCopperBulb; - mappings[1406] = ItemType.WaxedCopperBulb; - mappings[1407] = ItemType.WaxedExposedCopperBulb; - mappings[1408] = ItemType.WaxedWeatheredCopperBulb; - mappings[1409] = ItemType.WaxedOxidizedCopperBulb; - mappings[1410] = ItemType.TrialSpawner; - mappings[1411] = ItemType.TrialKey; - mappings[1412] = ItemType.OminousTrialKey; - mappings[1413] = ItemType.Vault; - mappings[1414] = ItemType.OminousBottle; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1217.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette1217.cs deleted file mode 100644 index a7026b9227..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1217.cs +++ /dev/null @@ -1,1434 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette1217 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette1217() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.Deepslate; - mappings[9] = ItemType.CobbledDeepslate; - mappings[10] = ItemType.PolishedDeepslate; - mappings[11] = ItemType.Calcite; - mappings[12] = ItemType.Tuff; - mappings[13] = ItemType.TuffSlab; - mappings[14] = ItemType.TuffStairs; - mappings[15] = ItemType.TuffWall; - mappings[16] = ItemType.ChiseledTuff; - mappings[17] = ItemType.PolishedTuff; - mappings[18] = ItemType.PolishedTuffSlab; - mappings[19] = ItemType.PolishedTuffStairs; - mappings[20] = ItemType.PolishedTuffWall; - mappings[21] = ItemType.TuffBricks; - mappings[22] = ItemType.TuffBrickSlab; - mappings[23] = ItemType.TuffBrickStairs; - mappings[24] = ItemType.TuffBrickWall; - mappings[25] = ItemType.ChiseledTuffBricks; - mappings[26] = ItemType.DripstoneBlock; - mappings[27] = ItemType.GrassBlock; - mappings[28] = ItemType.Dirt; - mappings[29] = ItemType.CoarseDirt; - mappings[30] = ItemType.Podzol; - mappings[31] = ItemType.RootedDirt; - mappings[32] = ItemType.Mud; - mappings[33] = ItemType.CrimsonNylium; - mappings[34] = ItemType.WarpedNylium; - mappings[35] = ItemType.Cobblestone; - mappings[36] = ItemType.OakPlanks; - mappings[37] = ItemType.SprucePlanks; - mappings[38] = ItemType.BirchPlanks; - mappings[39] = ItemType.JunglePlanks; - mappings[40] = ItemType.AcaciaPlanks; - mappings[41] = ItemType.CherryPlanks; - mappings[42] = ItemType.DarkOakPlanks; - mappings[43] = ItemType.PaleOakPlanks; - mappings[44] = ItemType.MangrovePlanks; - mappings[45] = ItemType.BambooPlanks; - mappings[46] = ItemType.CrimsonPlanks; - mappings[47] = ItemType.WarpedPlanks; - mappings[48] = ItemType.BambooMosaic; - mappings[49] = ItemType.OakSapling; - mappings[50] = ItemType.SpruceSapling; - mappings[51] = ItemType.BirchSapling; - mappings[52] = ItemType.JungleSapling; - mappings[53] = ItemType.AcaciaSapling; - mappings[54] = ItemType.CherrySapling; - mappings[55] = ItemType.DarkOakSapling; - mappings[56] = ItemType.PaleOakSapling; - mappings[57] = ItemType.MangrovePropagule; - mappings[58] = ItemType.Bedrock; - mappings[59] = ItemType.Sand; - mappings[60] = ItemType.SuspiciousSand; - mappings[61] = ItemType.SuspiciousGravel; - mappings[62] = ItemType.RedSand; - mappings[63] = ItemType.Gravel; - mappings[64] = ItemType.CoalOre; - mappings[65] = ItemType.DeepslateCoalOre; - mappings[66] = ItemType.IronOre; - mappings[67] = ItemType.DeepslateIronOre; - mappings[68] = ItemType.CopperOre; - mappings[69] = ItemType.DeepslateCopperOre; - mappings[70] = ItemType.GoldOre; - mappings[71] = ItemType.DeepslateGoldOre; - mappings[72] = ItemType.RedstoneOre; - mappings[73] = ItemType.DeepslateRedstoneOre; - mappings[74] = ItemType.EmeraldOre; - mappings[75] = ItemType.DeepslateEmeraldOre; - mappings[76] = ItemType.LapisOre; - mappings[77] = ItemType.DeepslateLapisOre; - mappings[78] = ItemType.DiamondOre; - mappings[79] = ItemType.DeepslateDiamondOre; - mappings[80] = ItemType.NetherGoldOre; - mappings[81] = ItemType.NetherQuartzOre; - mappings[82] = ItemType.AncientDebris; - mappings[83] = ItemType.CoalBlock; - mappings[84] = ItemType.RawIronBlock; - mappings[85] = ItemType.RawCopperBlock; - mappings[86] = ItemType.RawGoldBlock; - mappings[87] = ItemType.HeavyCore; - mappings[88] = ItemType.AmethystBlock; - mappings[89] = ItemType.BuddingAmethyst; - mappings[90] = ItemType.IronBlock; - mappings[91] = ItemType.CopperBlock; - mappings[92] = ItemType.GoldBlock; - mappings[93] = ItemType.DiamondBlock; - mappings[94] = ItemType.NetheriteBlock; - mappings[95] = ItemType.ExposedCopper; - mappings[96] = ItemType.WeatheredCopper; - mappings[97] = ItemType.OxidizedCopper; - mappings[98] = ItemType.ChiseledCopper; - mappings[99] = ItemType.ExposedChiseledCopper; - mappings[100] = ItemType.WeatheredChiseledCopper; - mappings[101] = ItemType.OxidizedChiseledCopper; - mappings[102] = ItemType.CutCopper; - mappings[103] = ItemType.ExposedCutCopper; - mappings[104] = ItemType.WeatheredCutCopper; - mappings[105] = ItemType.OxidizedCutCopper; - mappings[106] = ItemType.CutCopperStairs; - mappings[107] = ItemType.ExposedCutCopperStairs; - mappings[108] = ItemType.WeatheredCutCopperStairs; - mappings[109] = ItemType.OxidizedCutCopperStairs; - mappings[110] = ItemType.CutCopperSlab; - mappings[111] = ItemType.ExposedCutCopperSlab; - mappings[112] = ItemType.WeatheredCutCopperSlab; - mappings[113] = ItemType.OxidizedCutCopperSlab; - mappings[114] = ItemType.WaxedCopperBlock; - mappings[115] = ItemType.WaxedExposedCopper; - mappings[116] = ItemType.WaxedWeatheredCopper; - mappings[117] = ItemType.WaxedOxidizedCopper; - mappings[118] = ItemType.WaxedChiseledCopper; - mappings[119] = ItemType.WaxedExposedChiseledCopper; - mappings[120] = ItemType.WaxedWeatheredChiseledCopper; - mappings[121] = ItemType.WaxedOxidizedChiseledCopper; - mappings[122] = ItemType.WaxedCutCopper; - mappings[123] = ItemType.WaxedExposedCutCopper; - mappings[124] = ItemType.WaxedWeatheredCutCopper; - mappings[125] = ItemType.WaxedOxidizedCutCopper; - mappings[126] = ItemType.WaxedCutCopperStairs; - mappings[127] = ItemType.WaxedExposedCutCopperStairs; - mappings[128] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[129] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[130] = ItemType.WaxedCutCopperSlab; - mappings[131] = ItemType.WaxedExposedCutCopperSlab; - mappings[132] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[133] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[134] = ItemType.OakLog; - mappings[135] = ItemType.SpruceLog; - mappings[136] = ItemType.BirchLog; - mappings[137] = ItemType.JungleLog; - mappings[138] = ItemType.AcaciaLog; - mappings[139] = ItemType.CherryLog; - mappings[140] = ItemType.PaleOakLog; - mappings[141] = ItemType.DarkOakLog; - mappings[142] = ItemType.MangroveLog; - mappings[143] = ItemType.MangroveRoots; - mappings[144] = ItemType.MuddyMangroveRoots; - mappings[145] = ItemType.CrimsonStem; - mappings[146] = ItemType.WarpedStem; - mappings[147] = ItemType.BambooBlock; - mappings[148] = ItemType.StrippedOakLog; - mappings[149] = ItemType.StrippedSpruceLog; - mappings[150] = ItemType.StrippedBirchLog; - mappings[151] = ItemType.StrippedJungleLog; - mappings[152] = ItemType.StrippedAcaciaLog; - mappings[153] = ItemType.StrippedCherryLog; - mappings[154] = ItemType.StrippedDarkOakLog; - mappings[155] = ItemType.StrippedPaleOakLog; - mappings[156] = ItemType.StrippedMangroveLog; - mappings[157] = ItemType.StrippedCrimsonStem; - mappings[158] = ItemType.StrippedWarpedStem; - mappings[159] = ItemType.StrippedOakWood; - mappings[160] = ItemType.StrippedSpruceWood; - mappings[161] = ItemType.StrippedBirchWood; - mappings[162] = ItemType.StrippedJungleWood; - mappings[163] = ItemType.StrippedAcaciaWood; - mappings[164] = ItemType.StrippedCherryWood; - mappings[165] = ItemType.StrippedDarkOakWood; - mappings[166] = ItemType.StrippedPaleOakWood; - mappings[167] = ItemType.StrippedMangroveWood; - mappings[168] = ItemType.StrippedCrimsonHyphae; - mappings[169] = ItemType.StrippedWarpedHyphae; - mappings[170] = ItemType.StrippedBambooBlock; - mappings[171] = ItemType.OakWood; - mappings[172] = ItemType.SpruceWood; - mappings[173] = ItemType.BirchWood; - mappings[174] = ItemType.JungleWood; - mappings[175] = ItemType.AcaciaWood; - mappings[176] = ItemType.CherryWood; - mappings[177] = ItemType.PaleOakWood; - mappings[178] = ItemType.DarkOakWood; - mappings[179] = ItemType.MangroveWood; - mappings[180] = ItemType.CrimsonHyphae; - mappings[181] = ItemType.WarpedHyphae; - mappings[182] = ItemType.OakLeaves; - mappings[183] = ItemType.SpruceLeaves; - mappings[184] = ItemType.BirchLeaves; - mappings[185] = ItemType.JungleLeaves; - mappings[186] = ItemType.AcaciaLeaves; - mappings[187] = ItemType.CherryLeaves; - mappings[188] = ItemType.DarkOakLeaves; - mappings[189] = ItemType.PaleOakLeaves; - mappings[190] = ItemType.MangroveLeaves; - mappings[191] = ItemType.AzaleaLeaves; - mappings[192] = ItemType.FloweringAzaleaLeaves; - mappings[193] = ItemType.Sponge; - mappings[194] = ItemType.WetSponge; - mappings[195] = ItemType.Glass; - mappings[196] = ItemType.TintedGlass; - mappings[197] = ItemType.LapisBlock; - mappings[198] = ItemType.Sandstone; - mappings[199] = ItemType.ChiseledSandstone; - mappings[200] = ItemType.CutSandstone; - mappings[201] = ItemType.Cobweb; - mappings[202] = ItemType.ShortGrass; - mappings[203] = ItemType.Fern; - mappings[204] = ItemType.Bush; - mappings[205] = ItemType.Azalea; - mappings[206] = ItemType.FloweringAzalea; - mappings[207] = ItemType.DeadBush; - mappings[208] = ItemType.FireflyBush; - mappings[209] = ItemType.DryShortGrass; - mappings[210] = ItemType.DryTallGrass; - mappings[211] = ItemType.Seagrass; - mappings[212] = ItemType.SeaPickle; - mappings[213] = ItemType.WhiteWool; - mappings[214] = ItemType.OrangeWool; - mappings[215] = ItemType.MagentaWool; - mappings[216] = ItemType.LightBlueWool; - mappings[217] = ItemType.YellowWool; - mappings[218] = ItemType.LimeWool; - mappings[219] = ItemType.PinkWool; - mappings[220] = ItemType.GrayWool; - mappings[221] = ItemType.LightGrayWool; - mappings[222] = ItemType.CyanWool; - mappings[223] = ItemType.PurpleWool; - mappings[224] = ItemType.BlueWool; - mappings[225] = ItemType.BrownWool; - mappings[226] = ItemType.GreenWool; - mappings[227] = ItemType.RedWool; - mappings[228] = ItemType.BlackWool; - mappings[229] = ItemType.Dandelion; - mappings[230] = ItemType.OpenEyeblossom; - mappings[231] = ItemType.ClosedEyeblossom; - mappings[232] = ItemType.Poppy; - mappings[233] = ItemType.BlueOrchid; - mappings[234] = ItemType.Allium; - mappings[235] = ItemType.AzureBluet; - mappings[236] = ItemType.RedTulip; - mappings[237] = ItemType.OrangeTulip; - mappings[238] = ItemType.WhiteTulip; - mappings[239] = ItemType.PinkTulip; - mappings[240] = ItemType.OxeyeDaisy; - mappings[241] = ItemType.Cornflower; - mappings[242] = ItemType.LilyOfTheValley; - mappings[243] = ItemType.WitherRose; - mappings[244] = ItemType.Torchflower; - mappings[245] = ItemType.PitcherPlant; - mappings[246] = ItemType.SporeBlossom; - mappings[247] = ItemType.BrownMushroom; - mappings[248] = ItemType.RedMushroom; - mappings[249] = ItemType.CrimsonFungus; - mappings[250] = ItemType.WarpedFungus; - mappings[251] = ItemType.CrimsonRoots; - mappings[252] = ItemType.WarpedRoots; - mappings[253] = ItemType.NetherSprouts; - mappings[254] = ItemType.WeepingVines; - mappings[255] = ItemType.TwistingVines; - mappings[256] = ItemType.SugarCane; - mappings[257] = ItemType.Kelp; - mappings[258] = ItemType.PinkPetals; - mappings[259] = ItemType.Wildflowers; - mappings[260] = ItemType.LeafLitter; - mappings[261] = ItemType.MossCarpet; - mappings[262] = ItemType.MossBlock; - mappings[263] = ItemType.PaleMossCarpet; - mappings[264] = ItemType.PaleHangingMoss; - mappings[265] = ItemType.PaleMossBlock; - mappings[266] = ItemType.HangingRoots; - mappings[267] = ItemType.BigDripleaf; - mappings[268] = ItemType.SmallDripleaf; - mappings[269] = ItemType.Bamboo; - mappings[270] = ItemType.OakSlab; - mappings[271] = ItemType.SpruceSlab; - mappings[272] = ItemType.BirchSlab; - mappings[273] = ItemType.JungleSlab; - mappings[274] = ItemType.AcaciaSlab; - mappings[275] = ItemType.CherrySlab; - mappings[276] = ItemType.DarkOakSlab; - mappings[277] = ItemType.PaleOakSlab; - mappings[278] = ItemType.MangroveSlab; - mappings[279] = ItemType.BambooSlab; - mappings[280] = ItemType.BambooMosaicSlab; - mappings[281] = ItemType.CrimsonSlab; - mappings[282] = ItemType.WarpedSlab; - mappings[283] = ItemType.StoneSlab; - mappings[284] = ItemType.SmoothStoneSlab; - mappings[285] = ItemType.SandstoneSlab; - mappings[286] = ItemType.CutSandstoneSlab; - mappings[287] = ItemType.PetrifiedOakSlab; - mappings[288] = ItemType.CobblestoneSlab; - mappings[289] = ItemType.BrickSlab; - mappings[290] = ItemType.StoneBrickSlab; - mappings[291] = ItemType.MudBrickSlab; - mappings[292] = ItemType.NetherBrickSlab; - mappings[293] = ItemType.QuartzSlab; - mappings[294] = ItemType.RedSandstoneSlab; - mappings[295] = ItemType.CutRedSandstoneSlab; - mappings[296] = ItemType.PurpurSlab; - mappings[297] = ItemType.PrismarineSlab; - mappings[298] = ItemType.PrismarineBrickSlab; - mappings[299] = ItemType.DarkPrismarineSlab; - mappings[300] = ItemType.SmoothQuartz; - mappings[301] = ItemType.SmoothRedSandstone; - mappings[302] = ItemType.SmoothSandstone; - mappings[303] = ItemType.SmoothStone; - mappings[304] = ItemType.Bricks; - mappings[305] = ItemType.Bookshelf; - mappings[306] = ItemType.ChiseledBookshelf; - mappings[307] = ItemType.DecoratedPot; - mappings[308] = ItemType.MossyCobblestone; - mappings[309] = ItemType.Obsidian; - mappings[310] = ItemType.Torch; - mappings[311] = ItemType.EndRod; - mappings[312] = ItemType.ChorusPlant; - mappings[313] = ItemType.ChorusFlower; - mappings[314] = ItemType.PurpurBlock; - mappings[315] = ItemType.PurpurPillar; - mappings[316] = ItemType.PurpurStairs; - mappings[317] = ItemType.Spawner; - mappings[318] = ItemType.CreakingHeart; - mappings[319] = ItemType.Chest; - mappings[320] = ItemType.CraftingTable; - mappings[321] = ItemType.Farmland; - mappings[322] = ItemType.Furnace; - mappings[323] = ItemType.Ladder; - mappings[324] = ItemType.CobblestoneStairs; - mappings[325] = ItemType.Snow; - mappings[326] = ItemType.Ice; - mappings[327] = ItemType.SnowBlock; - mappings[328] = ItemType.Cactus; - mappings[329] = ItemType.CactusFlower; - mappings[330] = ItemType.Clay; - mappings[331] = ItemType.Jukebox; - mappings[332] = ItemType.OakFence; - mappings[333] = ItemType.SpruceFence; - mappings[334] = ItemType.BirchFence; - mappings[335] = ItemType.JungleFence; - mappings[336] = ItemType.AcaciaFence; - mappings[337] = ItemType.CherryFence; - mappings[338] = ItemType.DarkOakFence; - mappings[339] = ItemType.PaleOakFence; - mappings[340] = ItemType.MangroveFence; - mappings[341] = ItemType.BambooFence; - mappings[342] = ItemType.CrimsonFence; - mappings[343] = ItemType.WarpedFence; - mappings[344] = ItemType.Pumpkin; - mappings[345] = ItemType.CarvedPumpkin; - mappings[346] = ItemType.JackOLantern; - mappings[347] = ItemType.Netherrack; - mappings[348] = ItemType.SoulSand; - mappings[349] = ItemType.SoulSoil; - mappings[350] = ItemType.Basalt; - mappings[351] = ItemType.PolishedBasalt; - mappings[352] = ItemType.SmoothBasalt; - mappings[353] = ItemType.SoulTorch; - mappings[354] = ItemType.Glowstone; - mappings[355] = ItemType.InfestedStone; - mappings[356] = ItemType.InfestedCobblestone; - mappings[357] = ItemType.InfestedStoneBricks; - mappings[358] = ItemType.InfestedMossyStoneBricks; - mappings[359] = ItemType.InfestedCrackedStoneBricks; - mappings[360] = ItemType.InfestedChiseledStoneBricks; - mappings[361] = ItemType.InfestedDeepslate; - mappings[362] = ItemType.StoneBricks; - mappings[363] = ItemType.MossyStoneBricks; - mappings[364] = ItemType.CrackedStoneBricks; - mappings[365] = ItemType.ChiseledStoneBricks; - mappings[366] = ItemType.PackedMud; - mappings[367] = ItemType.MudBricks; - mappings[368] = ItemType.DeepslateBricks; - mappings[369] = ItemType.CrackedDeepslateBricks; - mappings[370] = ItemType.DeepslateTiles; - mappings[371] = ItemType.CrackedDeepslateTiles; - mappings[372] = ItemType.ChiseledDeepslate; - mappings[373] = ItemType.ReinforcedDeepslate; - mappings[374] = ItemType.BrownMushroomBlock; - mappings[375] = ItemType.RedMushroomBlock; - mappings[376] = ItemType.MushroomStem; - mappings[377] = ItemType.IronBars; - mappings[378] = ItemType.Chain; - mappings[379] = ItemType.GlassPane; - mappings[380] = ItemType.Melon; - mappings[381] = ItemType.Vine; - mappings[382] = ItemType.GlowLichen; - mappings[383] = ItemType.ResinClump; - mappings[384] = ItemType.ResinBlock; - mappings[385] = ItemType.ResinBricks; - mappings[386] = ItemType.ResinBrickStairs; - mappings[387] = ItemType.ResinBrickSlab; - mappings[388] = ItemType.ResinBrickWall; - mappings[389] = ItemType.ChiseledResinBricks; - mappings[390] = ItemType.BrickStairs; - mappings[391] = ItemType.StoneBrickStairs; - mappings[392] = ItemType.MudBrickStairs; - mappings[393] = ItemType.Mycelium; - mappings[394] = ItemType.LilyPad; - mappings[395] = ItemType.NetherBricks; - mappings[396] = ItemType.CrackedNetherBricks; - mappings[397] = ItemType.ChiseledNetherBricks; - mappings[398] = ItemType.NetherBrickFence; - mappings[399] = ItemType.NetherBrickStairs; - mappings[400] = ItemType.Sculk; - mappings[401] = ItemType.SculkVein; - mappings[402] = ItemType.SculkCatalyst; - mappings[403] = ItemType.SculkShrieker; - mappings[404] = ItemType.EnchantingTable; - mappings[405] = ItemType.EndPortalFrame; - mappings[406] = ItemType.EndStone; - mappings[407] = ItemType.EndStoneBricks; - mappings[408] = ItemType.DragonEgg; - mappings[409] = ItemType.SandstoneStairs; - mappings[410] = ItemType.EnderChest; - mappings[411] = ItemType.EmeraldBlock; - mappings[412] = ItemType.OakStairs; - mappings[413] = ItemType.SpruceStairs; - mappings[414] = ItemType.BirchStairs; - mappings[415] = ItemType.JungleStairs; - mappings[416] = ItemType.AcaciaStairs; - mappings[417] = ItemType.CherryStairs; - mappings[418] = ItemType.DarkOakStairs; - mappings[419] = ItemType.PaleOakStairs; - mappings[420] = ItemType.MangroveStairs; - mappings[421] = ItemType.BambooStairs; - mappings[422] = ItemType.BambooMosaicStairs; - mappings[423] = ItemType.CrimsonStairs; - mappings[424] = ItemType.WarpedStairs; - mappings[425] = ItemType.CommandBlock; - mappings[426] = ItemType.Beacon; - mappings[427] = ItemType.CobblestoneWall; - mappings[428] = ItemType.MossyCobblestoneWall; - mappings[429] = ItemType.BrickWall; - mappings[430] = ItemType.PrismarineWall; - mappings[431] = ItemType.RedSandstoneWall; - mappings[432] = ItemType.MossyStoneBrickWall; - mappings[433] = ItemType.GraniteWall; - mappings[434] = ItemType.StoneBrickWall; - mappings[435] = ItemType.MudBrickWall; - mappings[436] = ItemType.NetherBrickWall; - mappings[437] = ItemType.AndesiteWall; - mappings[438] = ItemType.RedNetherBrickWall; - mappings[439] = ItemType.SandstoneWall; - mappings[440] = ItemType.EndStoneBrickWall; - mappings[441] = ItemType.DioriteWall; - mappings[442] = ItemType.BlackstoneWall; - mappings[443] = ItemType.PolishedBlackstoneWall; - mappings[444] = ItemType.PolishedBlackstoneBrickWall; - mappings[445] = ItemType.CobbledDeepslateWall; - mappings[446] = ItemType.PolishedDeepslateWall; - mappings[447] = ItemType.DeepslateBrickWall; - mappings[448] = ItemType.DeepslateTileWall; - mappings[449] = ItemType.Anvil; - mappings[450] = ItemType.ChippedAnvil; - mappings[451] = ItemType.DamagedAnvil; - mappings[452] = ItemType.ChiseledQuartzBlock; - mappings[453] = ItemType.QuartzBlock; - mappings[454] = ItemType.QuartzBricks; - mappings[455] = ItemType.QuartzPillar; - mappings[456] = ItemType.QuartzStairs; - mappings[457] = ItemType.WhiteTerracotta; - mappings[458] = ItemType.OrangeTerracotta; - mappings[459] = ItemType.MagentaTerracotta; - mappings[460] = ItemType.LightBlueTerracotta; - mappings[461] = ItemType.YellowTerracotta; - mappings[462] = ItemType.LimeTerracotta; - mappings[463] = ItemType.PinkTerracotta; - mappings[464] = ItemType.GrayTerracotta; - mappings[465] = ItemType.LightGrayTerracotta; - mappings[466] = ItemType.CyanTerracotta; - mappings[467] = ItemType.PurpleTerracotta; - mappings[468] = ItemType.BlueTerracotta; - mappings[469] = ItemType.BrownTerracotta; - mappings[470] = ItemType.GreenTerracotta; - mappings[471] = ItemType.RedTerracotta; - mappings[472] = ItemType.BlackTerracotta; - mappings[473] = ItemType.Barrier; - mappings[474] = ItemType.Light; - mappings[475] = ItemType.HayBlock; - mappings[476] = ItemType.WhiteCarpet; - mappings[477] = ItemType.OrangeCarpet; - mappings[478] = ItemType.MagentaCarpet; - mappings[479] = ItemType.LightBlueCarpet; - mappings[480] = ItemType.YellowCarpet; - mappings[481] = ItemType.LimeCarpet; - mappings[482] = ItemType.PinkCarpet; - mappings[483] = ItemType.GrayCarpet; - mappings[484] = ItemType.LightGrayCarpet; - mappings[485] = ItemType.CyanCarpet; - mappings[486] = ItemType.PurpleCarpet; - mappings[487] = ItemType.BlueCarpet; - mappings[488] = ItemType.BrownCarpet; - mappings[489] = ItemType.GreenCarpet; - mappings[490] = ItemType.RedCarpet; - mappings[491] = ItemType.BlackCarpet; - mappings[492] = ItemType.Terracotta; - mappings[493] = ItemType.PackedIce; - mappings[494] = ItemType.DirtPath; - mappings[495] = ItemType.Sunflower; - mappings[496] = ItemType.Lilac; - mappings[497] = ItemType.RoseBush; - mappings[498] = ItemType.Peony; - mappings[499] = ItemType.TallGrass; - mappings[500] = ItemType.LargeFern; - mappings[501] = ItemType.WhiteStainedGlass; - mappings[502] = ItemType.OrangeStainedGlass; - mappings[503] = ItemType.MagentaStainedGlass; - mappings[504] = ItemType.LightBlueStainedGlass; - mappings[505] = ItemType.YellowStainedGlass; - mappings[506] = ItemType.LimeStainedGlass; - mappings[507] = ItemType.PinkStainedGlass; - mappings[508] = ItemType.GrayStainedGlass; - mappings[509] = ItemType.LightGrayStainedGlass; - mappings[510] = ItemType.CyanStainedGlass; - mappings[511] = ItemType.PurpleStainedGlass; - mappings[512] = ItemType.BlueStainedGlass; - mappings[513] = ItemType.BrownStainedGlass; - mappings[514] = ItemType.GreenStainedGlass; - mappings[515] = ItemType.RedStainedGlass; - mappings[516] = ItemType.BlackStainedGlass; - mappings[517] = ItemType.WhiteStainedGlassPane; - mappings[518] = ItemType.OrangeStainedGlassPane; - mappings[519] = ItemType.MagentaStainedGlassPane; - mappings[520] = ItemType.LightBlueStainedGlassPane; - mappings[521] = ItemType.YellowStainedGlassPane; - mappings[522] = ItemType.LimeStainedGlassPane; - mappings[523] = ItemType.PinkStainedGlassPane; - mappings[524] = ItemType.GrayStainedGlassPane; - mappings[525] = ItemType.LightGrayStainedGlassPane; - mappings[526] = ItemType.CyanStainedGlassPane; - mappings[527] = ItemType.PurpleStainedGlassPane; - mappings[528] = ItemType.BlueStainedGlassPane; - mappings[529] = ItemType.BrownStainedGlassPane; - mappings[530] = ItemType.GreenStainedGlassPane; - mappings[531] = ItemType.RedStainedGlassPane; - mappings[532] = ItemType.BlackStainedGlassPane; - mappings[533] = ItemType.Prismarine; - mappings[534] = ItemType.PrismarineBricks; - mappings[535] = ItemType.DarkPrismarine; - mappings[536] = ItemType.PrismarineStairs; - mappings[537] = ItemType.PrismarineBrickStairs; - mappings[538] = ItemType.DarkPrismarineStairs; - mappings[539] = ItemType.SeaLantern; - mappings[540] = ItemType.RedSandstone; - mappings[541] = ItemType.ChiseledRedSandstone; - mappings[542] = ItemType.CutRedSandstone; - mappings[543] = ItemType.RedSandstoneStairs; - mappings[544] = ItemType.RepeatingCommandBlock; - mappings[545] = ItemType.ChainCommandBlock; - mappings[546] = ItemType.MagmaBlock; - mappings[547] = ItemType.NetherWartBlock; - mappings[548] = ItemType.WarpedWartBlock; - mappings[549] = ItemType.RedNetherBricks; - mappings[550] = ItemType.BoneBlock; - mappings[551] = ItemType.StructureVoid; - mappings[552] = ItemType.ShulkerBox; - mappings[553] = ItemType.WhiteShulkerBox; - mappings[554] = ItemType.OrangeShulkerBox; - mappings[555] = ItemType.MagentaShulkerBox; - mappings[556] = ItemType.LightBlueShulkerBox; - mappings[557] = ItemType.YellowShulkerBox; - mappings[558] = ItemType.LimeShulkerBox; - mappings[559] = ItemType.PinkShulkerBox; - mappings[560] = ItemType.GrayShulkerBox; - mappings[561] = ItemType.LightGrayShulkerBox; - mappings[562] = ItemType.CyanShulkerBox; - mappings[563] = ItemType.PurpleShulkerBox; - mappings[564] = ItemType.BlueShulkerBox; - mappings[565] = ItemType.BrownShulkerBox; - mappings[566] = ItemType.GreenShulkerBox; - mappings[567] = ItemType.RedShulkerBox; - mappings[568] = ItemType.BlackShulkerBox; - mappings[569] = ItemType.WhiteGlazedTerracotta; - mappings[570] = ItemType.OrangeGlazedTerracotta; - mappings[571] = ItemType.MagentaGlazedTerracotta; - mappings[572] = ItemType.LightBlueGlazedTerracotta; - mappings[573] = ItemType.YellowGlazedTerracotta; - mappings[574] = ItemType.LimeGlazedTerracotta; - mappings[575] = ItemType.PinkGlazedTerracotta; - mappings[576] = ItemType.GrayGlazedTerracotta; - mappings[577] = ItemType.LightGrayGlazedTerracotta; - mappings[578] = ItemType.CyanGlazedTerracotta; - mappings[579] = ItemType.PurpleGlazedTerracotta; - mappings[580] = ItemType.BlueGlazedTerracotta; - mappings[581] = ItemType.BrownGlazedTerracotta; - mappings[582] = ItemType.GreenGlazedTerracotta; - mappings[583] = ItemType.RedGlazedTerracotta; - mappings[584] = ItemType.BlackGlazedTerracotta; - mappings[585] = ItemType.WhiteConcrete; - mappings[586] = ItemType.OrangeConcrete; - mappings[587] = ItemType.MagentaConcrete; - mappings[588] = ItemType.LightBlueConcrete; - mappings[589] = ItemType.YellowConcrete; - mappings[590] = ItemType.LimeConcrete; - mappings[591] = ItemType.PinkConcrete; - mappings[592] = ItemType.GrayConcrete; - mappings[593] = ItemType.LightGrayConcrete; - mappings[594] = ItemType.CyanConcrete; - mappings[595] = ItemType.PurpleConcrete; - mappings[596] = ItemType.BlueConcrete; - mappings[597] = ItemType.BrownConcrete; - mappings[598] = ItemType.GreenConcrete; - mappings[599] = ItemType.RedConcrete; - mappings[600] = ItemType.BlackConcrete; - mappings[601] = ItemType.WhiteConcretePowder; - mappings[602] = ItemType.OrangeConcretePowder; - mappings[603] = ItemType.MagentaConcretePowder; - mappings[604] = ItemType.LightBlueConcretePowder; - mappings[605] = ItemType.YellowConcretePowder; - mappings[606] = ItemType.LimeConcretePowder; - mappings[607] = ItemType.PinkConcretePowder; - mappings[608] = ItemType.GrayConcretePowder; - mappings[609] = ItemType.LightGrayConcretePowder; - mappings[610] = ItemType.CyanConcretePowder; - mappings[611] = ItemType.PurpleConcretePowder; - mappings[612] = ItemType.BlueConcretePowder; - mappings[613] = ItemType.BrownConcretePowder; - mappings[614] = ItemType.GreenConcretePowder; - mappings[615] = ItemType.RedConcretePowder; - mappings[616] = ItemType.BlackConcretePowder; - mappings[617] = ItemType.TurtleEgg; - mappings[618] = ItemType.SnifferEgg; - mappings[619] = ItemType.DriedGhast; - mappings[620] = ItemType.DeadTubeCoralBlock; - mappings[621] = ItemType.DeadBrainCoralBlock; - mappings[622] = ItemType.DeadBubbleCoralBlock; - mappings[623] = ItemType.DeadFireCoralBlock; - mappings[624] = ItemType.DeadHornCoralBlock; - mappings[625] = ItemType.TubeCoralBlock; - mappings[626] = ItemType.BrainCoralBlock; - mappings[627] = ItemType.BubbleCoralBlock; - mappings[628] = ItemType.FireCoralBlock; - mappings[629] = ItemType.HornCoralBlock; - mappings[630] = ItemType.TubeCoral; - mappings[631] = ItemType.BrainCoral; - mappings[632] = ItemType.BubbleCoral; - mappings[633] = ItemType.FireCoral; - mappings[634] = ItemType.HornCoral; - mappings[635] = ItemType.DeadBrainCoral; - mappings[636] = ItemType.DeadBubbleCoral; - mappings[637] = ItemType.DeadFireCoral; - mappings[638] = ItemType.DeadHornCoral; - mappings[639] = ItemType.DeadTubeCoral; - mappings[640] = ItemType.TubeCoralFan; - mappings[641] = ItemType.BrainCoralFan; - mappings[642] = ItemType.BubbleCoralFan; - mappings[643] = ItemType.FireCoralFan; - mappings[644] = ItemType.HornCoralFan; - mappings[645] = ItemType.DeadTubeCoralFan; - mappings[646] = ItemType.DeadBrainCoralFan; - mappings[647] = ItemType.DeadBubbleCoralFan; - mappings[648] = ItemType.DeadFireCoralFan; - mappings[649] = ItemType.DeadHornCoralFan; - mappings[650] = ItemType.BlueIce; - mappings[651] = ItemType.Conduit; - mappings[652] = ItemType.PolishedGraniteStairs; - mappings[653] = ItemType.SmoothRedSandstoneStairs; - mappings[654] = ItemType.MossyStoneBrickStairs; - mappings[655] = ItemType.PolishedDioriteStairs; - mappings[656] = ItemType.MossyCobblestoneStairs; - mappings[657] = ItemType.EndStoneBrickStairs; - mappings[658] = ItemType.StoneStairs; - mappings[659] = ItemType.SmoothSandstoneStairs; - mappings[660] = ItemType.SmoothQuartzStairs; - mappings[661] = ItemType.GraniteStairs; - mappings[662] = ItemType.AndesiteStairs; - mappings[663] = ItemType.RedNetherBrickStairs; - mappings[664] = ItemType.PolishedAndesiteStairs; - mappings[665] = ItemType.DioriteStairs; - mappings[666] = ItemType.CobbledDeepslateStairs; - mappings[667] = ItemType.PolishedDeepslateStairs; - mappings[668] = ItemType.DeepslateBrickStairs; - mappings[669] = ItemType.DeepslateTileStairs; - mappings[670] = ItemType.PolishedGraniteSlab; - mappings[671] = ItemType.SmoothRedSandstoneSlab; - mappings[672] = ItemType.MossyStoneBrickSlab; - mappings[673] = ItemType.PolishedDioriteSlab; - mappings[674] = ItemType.MossyCobblestoneSlab; - mappings[675] = ItemType.EndStoneBrickSlab; - mappings[676] = ItemType.SmoothSandstoneSlab; - mappings[677] = ItemType.SmoothQuartzSlab; - mappings[678] = ItemType.GraniteSlab; - mappings[679] = ItemType.AndesiteSlab; - mappings[680] = ItemType.RedNetherBrickSlab; - mappings[681] = ItemType.PolishedAndesiteSlab; - mappings[682] = ItemType.DioriteSlab; - mappings[683] = ItemType.CobbledDeepslateSlab; - mappings[684] = ItemType.PolishedDeepslateSlab; - mappings[685] = ItemType.DeepslateBrickSlab; - mappings[686] = ItemType.DeepslateTileSlab; - mappings[687] = ItemType.Scaffolding; - mappings[688] = ItemType.Redstone; - mappings[689] = ItemType.RedstoneTorch; - mappings[690] = ItemType.RedstoneBlock; - mappings[691] = ItemType.Repeater; - mappings[692] = ItemType.Comparator; - mappings[693] = ItemType.Piston; - mappings[694] = ItemType.StickyPiston; - mappings[695] = ItemType.SlimeBlock; - mappings[696] = ItemType.HoneyBlock; - mappings[697] = ItemType.Observer; - mappings[698] = ItemType.Hopper; - mappings[699] = ItemType.Dispenser; - mappings[700] = ItemType.Dropper; - mappings[701] = ItemType.Lectern; - mappings[702] = ItemType.Target; - mappings[703] = ItemType.Lever; - mappings[704] = ItemType.LightningRod; - mappings[705] = ItemType.DaylightDetector; - mappings[706] = ItemType.SculkSensor; - mappings[707] = ItemType.CalibratedSculkSensor; - mappings[708] = ItemType.TripwireHook; - mappings[709] = ItemType.TrappedChest; - mappings[710] = ItemType.Tnt; - mappings[711] = ItemType.RedstoneLamp; - mappings[712] = ItemType.NoteBlock; - mappings[713] = ItemType.StoneButton; - mappings[714] = ItemType.PolishedBlackstoneButton; - mappings[715] = ItemType.OakButton; - mappings[716] = ItemType.SpruceButton; - mappings[717] = ItemType.BirchButton; - mappings[718] = ItemType.JungleButton; - mappings[719] = ItemType.AcaciaButton; - mappings[720] = ItemType.CherryButton; - mappings[721] = ItemType.DarkOakButton; - mappings[722] = ItemType.PaleOakButton; - mappings[723] = ItemType.MangroveButton; - mappings[724] = ItemType.BambooButton; - mappings[725] = ItemType.CrimsonButton; - mappings[726] = ItemType.WarpedButton; - mappings[727] = ItemType.StonePressurePlate; - mappings[728] = ItemType.PolishedBlackstonePressurePlate; - mappings[729] = ItemType.LightWeightedPressurePlate; - mappings[730] = ItemType.HeavyWeightedPressurePlate; - mappings[731] = ItemType.OakPressurePlate; - mappings[732] = ItemType.SprucePressurePlate; - mappings[733] = ItemType.BirchPressurePlate; - mappings[734] = ItemType.JunglePressurePlate; - mappings[735] = ItemType.AcaciaPressurePlate; - mappings[736] = ItemType.CherryPressurePlate; - mappings[737] = ItemType.DarkOakPressurePlate; - mappings[738] = ItemType.PaleOakPressurePlate; - mappings[739] = ItemType.MangrovePressurePlate; - mappings[740] = ItemType.BambooPressurePlate; - mappings[741] = ItemType.CrimsonPressurePlate; - mappings[742] = ItemType.WarpedPressurePlate; - mappings[743] = ItemType.IronDoor; - mappings[744] = ItemType.OakDoor; - mappings[745] = ItemType.SpruceDoor; - mappings[746] = ItemType.BirchDoor; - mappings[747] = ItemType.JungleDoor; - mappings[748] = ItemType.AcaciaDoor; - mappings[749] = ItemType.CherryDoor; - mappings[750] = ItemType.DarkOakDoor; - mappings[751] = ItemType.PaleOakDoor; - mappings[752] = ItemType.MangroveDoor; - mappings[753] = ItemType.BambooDoor; - mappings[754] = ItemType.CrimsonDoor; - mappings[755] = ItemType.WarpedDoor; - mappings[756] = ItemType.CopperDoor; - mappings[757] = ItemType.ExposedCopperDoor; - mappings[758] = ItemType.WeatheredCopperDoor; - mappings[759] = ItemType.OxidizedCopperDoor; - mappings[760] = ItemType.WaxedCopperDoor; - mappings[761] = ItemType.WaxedExposedCopperDoor; - mappings[762] = ItemType.WaxedWeatheredCopperDoor; - mappings[763] = ItemType.WaxedOxidizedCopperDoor; - mappings[764] = ItemType.IronTrapdoor; - mappings[765] = ItemType.OakTrapdoor; - mappings[766] = ItemType.SpruceTrapdoor; - mappings[767] = ItemType.BirchTrapdoor; - mappings[768] = ItemType.JungleTrapdoor; - mappings[769] = ItemType.AcaciaTrapdoor; - mappings[770] = ItemType.CherryTrapdoor; - mappings[771] = ItemType.DarkOakTrapdoor; - mappings[772] = ItemType.PaleOakTrapdoor; - mappings[773] = ItemType.MangroveTrapdoor; - mappings[774] = ItemType.BambooTrapdoor; - mappings[775] = ItemType.CrimsonTrapdoor; - mappings[776] = ItemType.WarpedTrapdoor; - mappings[777] = ItemType.CopperTrapdoor; - mappings[778] = ItemType.ExposedCopperTrapdoor; - mappings[779] = ItemType.WeatheredCopperTrapdoor; - mappings[780] = ItemType.OxidizedCopperTrapdoor; - mappings[781] = ItemType.WaxedCopperTrapdoor; - mappings[782] = ItemType.WaxedExposedCopperTrapdoor; - mappings[783] = ItemType.WaxedWeatheredCopperTrapdoor; - mappings[784] = ItemType.WaxedOxidizedCopperTrapdoor; - mappings[785] = ItemType.OakFenceGate; - mappings[786] = ItemType.SpruceFenceGate; - mappings[787] = ItemType.BirchFenceGate; - mappings[788] = ItemType.JungleFenceGate; - mappings[789] = ItemType.AcaciaFenceGate; - mappings[790] = ItemType.CherryFenceGate; - mappings[791] = ItemType.DarkOakFenceGate; - mappings[792] = ItemType.PaleOakFenceGate; - mappings[793] = ItemType.MangroveFenceGate; - mappings[794] = ItemType.BambooFenceGate; - mappings[795] = ItemType.CrimsonFenceGate; - mappings[796] = ItemType.WarpedFenceGate; - mappings[797] = ItemType.PoweredRail; - mappings[798] = ItemType.DetectorRail; - mappings[799] = ItemType.Rail; - mappings[800] = ItemType.ActivatorRail; - mappings[801] = ItemType.Saddle; - mappings[802] = ItemType.WhiteHarness; - mappings[803] = ItemType.OrangeHarness; - mappings[804] = ItemType.MagentaHarness; - mappings[805] = ItemType.LightBlueHarness; - mappings[806] = ItemType.YellowHarness; - mappings[807] = ItemType.LimeHarness; - mappings[808] = ItemType.PinkHarness; - mappings[809] = ItemType.GrayHarness; - mappings[810] = ItemType.LightGrayHarness; - mappings[811] = ItemType.CyanHarness; - mappings[812] = ItemType.PurpleHarness; - mappings[813] = ItemType.BlueHarness; - mappings[814] = ItemType.BrownHarness; - mappings[815] = ItemType.GreenHarness; - mappings[816] = ItemType.RedHarness; - mappings[817] = ItemType.BlackHarness; - mappings[818] = ItemType.Minecart; - mappings[819] = ItemType.ChestMinecart; - mappings[820] = ItemType.FurnaceMinecart; - mappings[821] = ItemType.TntMinecart; - mappings[822] = ItemType.HopperMinecart; - mappings[823] = ItemType.CarrotOnAStick; - mappings[824] = ItemType.WarpedFungusOnAStick; - mappings[825] = ItemType.PhantomMembrane; - mappings[826] = ItemType.Elytra; - mappings[827] = ItemType.OakBoat; - mappings[828] = ItemType.OakChestBoat; - mappings[829] = ItemType.SpruceBoat; - mappings[830] = ItemType.SpruceChestBoat; - mappings[831] = ItemType.BirchBoat; - mappings[832] = ItemType.BirchChestBoat; - mappings[833] = ItemType.JungleBoat; - mappings[834] = ItemType.JungleChestBoat; - mappings[835] = ItemType.AcaciaBoat; - mappings[836] = ItemType.AcaciaChestBoat; - mappings[837] = ItemType.CherryBoat; - mappings[838] = ItemType.CherryChestBoat; - mappings[839] = ItemType.DarkOakBoat; - mappings[840] = ItemType.DarkOakChestBoat; - mappings[841] = ItemType.PaleOakBoat; - mappings[842] = ItemType.PaleOakChestBoat; - mappings[843] = ItemType.MangroveBoat; - mappings[844] = ItemType.MangroveChestBoat; - mappings[845] = ItemType.BambooRaft; - mappings[846] = ItemType.BambooChestRaft; - mappings[847] = ItemType.StructureBlock; - mappings[848] = ItemType.Jigsaw; - mappings[849] = ItemType.TestBlock; - mappings[850] = ItemType.TestInstanceBlock; - mappings[851] = ItemType.TurtleHelmet; - mappings[852] = ItemType.TurtleScute; - mappings[853] = ItemType.ArmadilloScute; - mappings[854] = ItemType.WolfArmor; - mappings[855] = ItemType.FlintAndSteel; - mappings[856] = ItemType.Bowl; - mappings[857] = ItemType.Apple; - mappings[858] = ItemType.Bow; - mappings[859] = ItemType.Arrow; - mappings[860] = ItemType.Coal; - mappings[861] = ItemType.Charcoal; - mappings[862] = ItemType.Diamond; - mappings[863] = ItemType.Emerald; - mappings[864] = ItemType.LapisLazuli; - mappings[865] = ItemType.Quartz; - mappings[866] = ItemType.AmethystShard; - mappings[867] = ItemType.RawIron; - mappings[868] = ItemType.IronIngot; - mappings[869] = ItemType.RawCopper; - mappings[870] = ItemType.CopperIngot; - mappings[871] = ItemType.RawGold; - mappings[872] = ItemType.GoldIngot; - mappings[873] = ItemType.NetheriteIngot; - mappings[874] = ItemType.NetheriteScrap; - mappings[875] = ItemType.WoodenSword; - mappings[876] = ItemType.WoodenShovel; - mappings[877] = ItemType.WoodenPickaxe; - mappings[878] = ItemType.WoodenAxe; - mappings[879] = ItemType.WoodenHoe; - mappings[880] = ItemType.StoneSword; - mappings[881] = ItemType.StoneShovel; - mappings[882] = ItemType.StonePickaxe; - mappings[883] = ItemType.StoneAxe; - mappings[884] = ItemType.StoneHoe; - mappings[885] = ItemType.GoldenSword; - mappings[886] = ItemType.GoldenShovel; - mappings[887] = ItemType.GoldenPickaxe; - mappings[888] = ItemType.GoldenAxe; - mappings[889] = ItemType.GoldenHoe; - mappings[890] = ItemType.IronSword; - mappings[891] = ItemType.IronShovel; - mappings[892] = ItemType.IronPickaxe; - mappings[893] = ItemType.IronAxe; - mappings[894] = ItemType.IronHoe; - mappings[895] = ItemType.DiamondSword; - mappings[896] = ItemType.DiamondShovel; - mappings[897] = ItemType.DiamondPickaxe; - mappings[898] = ItemType.DiamondAxe; - mappings[899] = ItemType.DiamondHoe; - mappings[900] = ItemType.NetheriteSword; - mappings[901] = ItemType.NetheriteShovel; - mappings[902] = ItemType.NetheritePickaxe; - mappings[903] = ItemType.NetheriteAxe; - mappings[904] = ItemType.NetheriteHoe; - mappings[905] = ItemType.Stick; - mappings[906] = ItemType.MushroomStew; - mappings[907] = ItemType.String; - mappings[908] = ItemType.Feather; - mappings[909] = ItemType.Gunpowder; - mappings[910] = ItemType.WheatSeeds; - mappings[911] = ItemType.Wheat; - mappings[912] = ItemType.Bread; - mappings[913] = ItemType.LeatherHelmet; - mappings[914] = ItemType.LeatherChestplate; - mappings[915] = ItemType.LeatherLeggings; - mappings[916] = ItemType.LeatherBoots; - mappings[917] = ItemType.ChainmailHelmet; - mappings[918] = ItemType.ChainmailChestplate; - mappings[919] = ItemType.ChainmailLeggings; - mappings[920] = ItemType.ChainmailBoots; - mappings[921] = ItemType.IronHelmet; - mappings[922] = ItemType.IronChestplate; - mappings[923] = ItemType.IronLeggings; - mappings[924] = ItemType.IronBoots; - mappings[925] = ItemType.DiamondHelmet; - mappings[926] = ItemType.DiamondChestplate; - mappings[927] = ItemType.DiamondLeggings; - mappings[928] = ItemType.DiamondBoots; - mappings[929] = ItemType.GoldenHelmet; - mappings[930] = ItemType.GoldenChestplate; - mappings[931] = ItemType.GoldenLeggings; - mappings[932] = ItemType.GoldenBoots; - mappings[933] = ItemType.NetheriteHelmet; - mappings[934] = ItemType.NetheriteChestplate; - mappings[935] = ItemType.NetheriteLeggings; - mappings[936] = ItemType.NetheriteBoots; - mappings[937] = ItemType.Flint; - mappings[938] = ItemType.Porkchop; - mappings[939] = ItemType.CookedPorkchop; - mappings[940] = ItemType.Painting; - mappings[941] = ItemType.GoldenApple; - mappings[942] = ItemType.EnchantedGoldenApple; - mappings[943] = ItemType.OakSign; - mappings[944] = ItemType.SpruceSign; - mappings[945] = ItemType.BirchSign; - mappings[946] = ItemType.JungleSign; - mappings[947] = ItemType.AcaciaSign; - mappings[948] = ItemType.CherrySign; - mappings[949] = ItemType.DarkOakSign; - mappings[950] = ItemType.PaleOakSign; - mappings[951] = ItemType.MangroveSign; - mappings[952] = ItemType.BambooSign; - mappings[953] = ItemType.CrimsonSign; - mappings[954] = ItemType.WarpedSign; - mappings[955] = ItemType.OakHangingSign; - mappings[956] = ItemType.SpruceHangingSign; - mappings[957] = ItemType.BirchHangingSign; - mappings[958] = ItemType.JungleHangingSign; - mappings[959] = ItemType.AcaciaHangingSign; - mappings[960] = ItemType.CherryHangingSign; - mappings[961] = ItemType.DarkOakHangingSign; - mappings[962] = ItemType.PaleOakHangingSign; - mappings[963] = ItemType.MangroveHangingSign; - mappings[964] = ItemType.BambooHangingSign; - mappings[965] = ItemType.CrimsonHangingSign; - mappings[966] = ItemType.WarpedHangingSign; - mappings[967] = ItemType.Bucket; - mappings[968] = ItemType.WaterBucket; - mappings[969] = ItemType.LavaBucket; - mappings[970] = ItemType.PowderSnowBucket; - mappings[971] = ItemType.Snowball; - mappings[972] = ItemType.Leather; - mappings[973] = ItemType.MilkBucket; - mappings[974] = ItemType.PufferfishBucket; - mappings[975] = ItemType.SalmonBucket; - mappings[976] = ItemType.CodBucket; - mappings[977] = ItemType.TropicalFishBucket; - mappings[978] = ItemType.AxolotlBucket; - mappings[979] = ItemType.TadpoleBucket; - mappings[980] = ItemType.Brick; - mappings[981] = ItemType.ClayBall; - mappings[982] = ItemType.DriedKelpBlock; - mappings[983] = ItemType.Paper; - mappings[984] = ItemType.Book; - mappings[985] = ItemType.SlimeBall; - mappings[986] = ItemType.Egg; - mappings[987] = ItemType.BlueEgg; - mappings[988] = ItemType.BrownEgg; - mappings[989] = ItemType.Compass; - mappings[990] = ItemType.RecoveryCompass; - mappings[991] = ItemType.Bundle; - mappings[992] = ItemType.WhiteBundle; - mappings[993] = ItemType.OrangeBundle; - mappings[994] = ItemType.MagentaBundle; - mappings[995] = ItemType.LightBlueBundle; - mappings[996] = ItemType.YellowBundle; - mappings[997] = ItemType.LimeBundle; - mappings[998] = ItemType.PinkBundle; - mappings[999] = ItemType.GrayBundle; - mappings[1000] = ItemType.LightGrayBundle; - mappings[1001] = ItemType.CyanBundle; - mappings[1002] = ItemType.PurpleBundle; - mappings[1003] = ItemType.BlueBundle; - mappings[1004] = ItemType.BrownBundle; - mappings[1005] = ItemType.GreenBundle; - mappings[1006] = ItemType.RedBundle; - mappings[1007] = ItemType.BlackBundle; - mappings[1008] = ItemType.FishingRod; - mappings[1009] = ItemType.Clock; - mappings[1010] = ItemType.Spyglass; - mappings[1011] = ItemType.GlowstoneDust; - mappings[1012] = ItemType.Cod; - mappings[1013] = ItemType.Salmon; - mappings[1014] = ItemType.TropicalFish; - mappings[1015] = ItemType.Pufferfish; - mappings[1016] = ItemType.CookedCod; - mappings[1017] = ItemType.CookedSalmon; - mappings[1018] = ItemType.InkSac; - mappings[1019] = ItemType.GlowInkSac; - mappings[1020] = ItemType.CocoaBeans; - mappings[1021] = ItemType.WhiteDye; - mappings[1022] = ItemType.OrangeDye; - mappings[1023] = ItemType.MagentaDye; - mappings[1024] = ItemType.LightBlueDye; - mappings[1025] = ItemType.YellowDye; - mappings[1026] = ItemType.LimeDye; - mappings[1027] = ItemType.PinkDye; - mappings[1028] = ItemType.GrayDye; - mappings[1029] = ItemType.LightGrayDye; - mappings[1030] = ItemType.CyanDye; - mappings[1031] = ItemType.PurpleDye; - mappings[1032] = ItemType.BlueDye; - mappings[1033] = ItemType.BrownDye; - mappings[1034] = ItemType.GreenDye; - mappings[1035] = ItemType.RedDye; - mappings[1036] = ItemType.BlackDye; - mappings[1037] = ItemType.BoneMeal; - mappings[1038] = ItemType.Bone; - mappings[1039] = ItemType.Sugar; - mappings[1040] = ItemType.Cake; - mappings[1041] = ItemType.WhiteBed; - mappings[1042] = ItemType.OrangeBed; - mappings[1043] = ItemType.MagentaBed; - mappings[1044] = ItemType.LightBlueBed; - mappings[1045] = ItemType.YellowBed; - mappings[1046] = ItemType.LimeBed; - mappings[1047] = ItemType.PinkBed; - mappings[1048] = ItemType.GrayBed; - mappings[1049] = ItemType.LightGrayBed; - mappings[1050] = ItemType.CyanBed; - mappings[1051] = ItemType.PurpleBed; - mappings[1052] = ItemType.BlueBed; - mappings[1053] = ItemType.BrownBed; - mappings[1054] = ItemType.GreenBed; - mappings[1055] = ItemType.RedBed; - mappings[1056] = ItemType.BlackBed; - mappings[1057] = ItemType.Cookie; - mappings[1058] = ItemType.Crafter; - mappings[1059] = ItemType.FilledMap; - mappings[1060] = ItemType.Shears; - mappings[1061] = ItemType.MelonSlice; - mappings[1062] = ItemType.DriedKelp; - mappings[1063] = ItemType.PumpkinSeeds; - mappings[1064] = ItemType.MelonSeeds; - mappings[1065] = ItemType.Beef; - mappings[1066] = ItemType.CookedBeef; - mappings[1067] = ItemType.Chicken; - mappings[1068] = ItemType.CookedChicken; - mappings[1069] = ItemType.RottenFlesh; - mappings[1070] = ItemType.EnderPearl; - mappings[1071] = ItemType.BlazeRod; - mappings[1072] = ItemType.GhastTear; - mappings[1073] = ItemType.GoldNugget; - mappings[1074] = ItemType.NetherWart; - mappings[1075] = ItemType.GlassBottle; - mappings[1076] = ItemType.Potion; - mappings[1077] = ItemType.SpiderEye; - mappings[1078] = ItemType.FermentedSpiderEye; - mappings[1079] = ItemType.BlazePowder; - mappings[1080] = ItemType.MagmaCream; - mappings[1081] = ItemType.BrewingStand; - mappings[1082] = ItemType.Cauldron; - mappings[1083] = ItemType.EnderEye; - mappings[1084] = ItemType.GlisteringMelonSlice; - mappings[1085] = ItemType.ArmadilloSpawnEgg; - mappings[1086] = ItemType.AllaySpawnEgg; - mappings[1087] = ItemType.AxolotlSpawnEgg; - mappings[1088] = ItemType.BatSpawnEgg; - mappings[1089] = ItemType.BeeSpawnEgg; - mappings[1090] = ItemType.BlazeSpawnEgg; - mappings[1091] = ItemType.BoggedSpawnEgg; - mappings[1092] = ItemType.BreezeSpawnEgg; - mappings[1093] = ItemType.CatSpawnEgg; - mappings[1094] = ItemType.CamelSpawnEgg; - mappings[1095] = ItemType.CaveSpiderSpawnEgg; - mappings[1096] = ItemType.ChickenSpawnEgg; - mappings[1097] = ItemType.CodSpawnEgg; - mappings[1098] = ItemType.CowSpawnEgg; - mappings[1099] = ItemType.CreeperSpawnEgg; - mappings[1100] = ItemType.DolphinSpawnEgg; - mappings[1101] = ItemType.DonkeySpawnEgg; - mappings[1102] = ItemType.DrownedSpawnEgg; - mappings[1103] = ItemType.ElderGuardianSpawnEgg; - mappings[1104] = ItemType.EnderDragonSpawnEgg; - mappings[1105] = ItemType.EndermanSpawnEgg; - mappings[1106] = ItemType.EndermiteSpawnEgg; - mappings[1107] = ItemType.EvokerSpawnEgg; - mappings[1108] = ItemType.FoxSpawnEgg; - mappings[1109] = ItemType.FrogSpawnEgg; - mappings[1110] = ItemType.GhastSpawnEgg; - mappings[1111] = ItemType.HappyGhastSpawnEgg; - mappings[1112] = ItemType.GlowSquidSpawnEgg; - mappings[1113] = ItemType.GoatSpawnEgg; - mappings[1114] = ItemType.GuardianSpawnEgg; - mappings[1115] = ItemType.HoglinSpawnEgg; - mappings[1116] = ItemType.HorseSpawnEgg; - mappings[1117] = ItemType.HuskSpawnEgg; - mappings[1118] = ItemType.IronGolemSpawnEgg; - mappings[1119] = ItemType.LlamaSpawnEgg; - mappings[1120] = ItemType.MagmaCubeSpawnEgg; - mappings[1121] = ItemType.MooshroomSpawnEgg; - mappings[1122] = ItemType.MuleSpawnEgg; - mappings[1123] = ItemType.OcelotSpawnEgg; - mappings[1124] = ItemType.PandaSpawnEgg; - mappings[1125] = ItemType.ParrotSpawnEgg; - mappings[1126] = ItemType.PhantomSpawnEgg; - mappings[1127] = ItemType.PigSpawnEgg; - mappings[1128] = ItemType.PiglinSpawnEgg; - mappings[1129] = ItemType.PiglinBruteSpawnEgg; - mappings[1130] = ItemType.PillagerSpawnEgg; - mappings[1131] = ItemType.PolarBearSpawnEgg; - mappings[1132] = ItemType.PufferfishSpawnEgg; - mappings[1133] = ItemType.RabbitSpawnEgg; - mappings[1134] = ItemType.RavagerSpawnEgg; - mappings[1135] = ItemType.SalmonSpawnEgg; - mappings[1136] = ItemType.SheepSpawnEgg; - mappings[1137] = ItemType.ShulkerSpawnEgg; - mappings[1138] = ItemType.SilverfishSpawnEgg; - mappings[1139] = ItemType.SkeletonSpawnEgg; - mappings[1140] = ItemType.SkeletonHorseSpawnEgg; - mappings[1141] = ItemType.SlimeSpawnEgg; - mappings[1142] = ItemType.SnifferSpawnEgg; - mappings[1143] = ItemType.SnowGolemSpawnEgg; - mappings[1144] = ItemType.SpiderSpawnEgg; - mappings[1145] = ItemType.SquidSpawnEgg; - mappings[1146] = ItemType.StraySpawnEgg; - mappings[1147] = ItemType.StriderSpawnEgg; - mappings[1148] = ItemType.TadpoleSpawnEgg; - mappings[1149] = ItemType.TraderLlamaSpawnEgg; - mappings[1150] = ItemType.TropicalFishSpawnEgg; - mappings[1151] = ItemType.TurtleSpawnEgg; - mappings[1152] = ItemType.VexSpawnEgg; - mappings[1153] = ItemType.VillagerSpawnEgg; - mappings[1154] = ItemType.VindicatorSpawnEgg; - mappings[1155] = ItemType.WanderingTraderSpawnEgg; - mappings[1156] = ItemType.WardenSpawnEgg; - mappings[1157] = ItemType.WitchSpawnEgg; - mappings[1158] = ItemType.WitherSpawnEgg; - mappings[1159] = ItemType.WitherSkeletonSpawnEgg; - mappings[1160] = ItemType.WolfSpawnEgg; - mappings[1161] = ItemType.ZoglinSpawnEgg; - mappings[1162] = ItemType.CreakingSpawnEgg; - mappings[1163] = ItemType.ZombieSpawnEgg; - mappings[1164] = ItemType.ZombieHorseSpawnEgg; - mappings[1165] = ItemType.ZombieVillagerSpawnEgg; - mappings[1166] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[1167] = ItemType.ExperienceBottle; - mappings[1168] = ItemType.FireCharge; - mappings[1169] = ItemType.WindCharge; - mappings[1170] = ItemType.WritableBook; - mappings[1171] = ItemType.WrittenBook; - mappings[1172] = ItemType.BreezeRod; - mappings[1173] = ItemType.Mace; - mappings[1174] = ItemType.ItemFrame; - mappings[1175] = ItemType.GlowItemFrame; - mappings[1176] = ItemType.FlowerPot; - mappings[1177] = ItemType.Carrot; - mappings[1178] = ItemType.Potato; - mappings[1179] = ItemType.BakedPotato; - mappings[1180] = ItemType.PoisonousPotato; - mappings[1181] = ItemType.Map; - mappings[1182] = ItemType.GoldenCarrot; - mappings[1183] = ItemType.SkeletonSkull; - mappings[1184] = ItemType.WitherSkeletonSkull; - mappings[1185] = ItemType.PlayerHead; - mappings[1186] = ItemType.ZombieHead; - mappings[1187] = ItemType.CreeperHead; - mappings[1188] = ItemType.DragonHead; - mappings[1189] = ItemType.PiglinHead; - mappings[1190] = ItemType.NetherStar; - mappings[1191] = ItemType.PumpkinPie; - mappings[1192] = ItemType.FireworkRocket; - mappings[1193] = ItemType.FireworkStar; - mappings[1194] = ItemType.EnchantedBook; - mappings[1195] = ItemType.NetherBrick; - mappings[1196] = ItemType.ResinBrick; - mappings[1197] = ItemType.PrismarineShard; - mappings[1198] = ItemType.PrismarineCrystals; - mappings[1199] = ItemType.Rabbit; - mappings[1200] = ItemType.CookedRabbit; - mappings[1201] = ItemType.RabbitStew; - mappings[1202] = ItemType.RabbitFoot; - mappings[1203] = ItemType.RabbitHide; - mappings[1204] = ItemType.ArmorStand; - mappings[1205] = ItemType.IronHorseArmor; - mappings[1206] = ItemType.GoldenHorseArmor; - mappings[1207] = ItemType.DiamondHorseArmor; - mappings[1208] = ItemType.LeatherHorseArmor; - mappings[1209] = ItemType.Lead; - mappings[1210] = ItemType.NameTag; - mappings[1211] = ItemType.CommandBlockMinecart; - mappings[1212] = ItemType.Mutton; - mappings[1213] = ItemType.CookedMutton; - mappings[1214] = ItemType.WhiteBanner; - mappings[1215] = ItemType.OrangeBanner; - mappings[1216] = ItemType.MagentaBanner; - mappings[1217] = ItemType.LightBlueBanner; - mappings[1218] = ItemType.YellowBanner; - mappings[1219] = ItemType.LimeBanner; - mappings[1220] = ItemType.PinkBanner; - mappings[1221] = ItemType.GrayBanner; - mappings[1222] = ItemType.LightGrayBanner; - mappings[1223] = ItemType.CyanBanner; - mappings[1224] = ItemType.PurpleBanner; - mappings[1225] = ItemType.BlueBanner; - mappings[1226] = ItemType.BrownBanner; - mappings[1227] = ItemType.GreenBanner; - mappings[1228] = ItemType.RedBanner; - mappings[1229] = ItemType.BlackBanner; - mappings[1230] = ItemType.EndCrystal; - mappings[1231] = ItemType.ChorusFruit; - mappings[1232] = ItemType.PoppedChorusFruit; - mappings[1233] = ItemType.TorchflowerSeeds; - mappings[1234] = ItemType.PitcherPod; - mappings[1235] = ItemType.Beetroot; - mappings[1236] = ItemType.BeetrootSeeds; - mappings[1237] = ItemType.BeetrootSoup; - mappings[1238] = ItemType.DragonBreath; - mappings[1239] = ItemType.SplashPotion; - mappings[1240] = ItemType.SpectralArrow; - mappings[1241] = ItemType.TippedArrow; - mappings[1242] = ItemType.LingeringPotion; - mappings[1243] = ItemType.Shield; - mappings[1244] = ItemType.TotemOfUndying; - mappings[1245] = ItemType.ShulkerShell; - mappings[1246] = ItemType.IronNugget; - mappings[1247] = ItemType.KnowledgeBook; - mappings[1248] = ItemType.DebugStick; - mappings[1249] = ItemType.MusicDisc13; - mappings[1250] = ItemType.MusicDiscCat; - mappings[1251] = ItemType.MusicDiscBlocks; - mappings[1252] = ItemType.MusicDiscChirp; - mappings[1253] = ItemType.MusicDiscCreator; - mappings[1254] = ItemType.MusicDiscCreatorMusicBox; - mappings[1255] = ItemType.MusicDiscFar; - mappings[1256] = ItemType.MusicDiscLavaChicken; - mappings[1257] = ItemType.MusicDiscMall; - mappings[1258] = ItemType.MusicDiscMellohi; - mappings[1259] = ItemType.MusicDiscStal; - mappings[1260] = ItemType.MusicDiscStrad; - mappings[1261] = ItemType.MusicDiscWard; - mappings[1262] = ItemType.MusicDisc11; - mappings[1263] = ItemType.MusicDiscWait; - mappings[1264] = ItemType.MusicDiscOtherside; - mappings[1265] = ItemType.MusicDiscRelic; - mappings[1266] = ItemType.MusicDisc5; - mappings[1267] = ItemType.MusicDiscPigstep; - mappings[1268] = ItemType.MusicDiscPrecipice; - mappings[1269] = ItemType.MusicDiscTears; - mappings[1270] = ItemType.DiscFragment5; - mappings[1271] = ItemType.Trident; - mappings[1272] = ItemType.NautilusShell; - mappings[1273] = ItemType.HeartOfTheSea; - mappings[1274] = ItemType.Crossbow; - mappings[1275] = ItemType.SuspiciousStew; - mappings[1276] = ItemType.Loom; - mappings[1277] = ItemType.FlowerBannerPattern; - mappings[1278] = ItemType.CreeperBannerPattern; - mappings[1279] = ItemType.SkullBannerPattern; - mappings[1280] = ItemType.MojangBannerPattern; - mappings[1281] = ItemType.GlobeBannerPattern; - mappings[1282] = ItemType.PiglinBannerPattern; - mappings[1283] = ItemType.FlowBannerPattern; - mappings[1284] = ItemType.GusterBannerPattern; - mappings[1285] = ItemType.FieldMasonedBannerPattern; - mappings[1286] = ItemType.BordureIndentedBannerPattern; - mappings[1287] = ItemType.GoatHorn; - mappings[1288] = ItemType.Composter; - mappings[1289] = ItemType.Barrel; - mappings[1290] = ItemType.Smoker; - mappings[1291] = ItemType.BlastFurnace; - mappings[1292] = ItemType.CartographyTable; - mappings[1293] = ItemType.FletchingTable; - mappings[1294] = ItemType.Grindstone; - mappings[1295] = ItemType.SmithingTable; - mappings[1296] = ItemType.Stonecutter; - mappings[1297] = ItemType.Bell; - mappings[1298] = ItemType.Lantern; - mappings[1299] = ItemType.SoulLantern; - mappings[1300] = ItemType.SweetBerries; - mappings[1301] = ItemType.GlowBerries; - mappings[1302] = ItemType.Campfire; - mappings[1303] = ItemType.SoulCampfire; - mappings[1304] = ItemType.Shroomlight; - mappings[1305] = ItemType.Honeycomb; - mappings[1306] = ItemType.BeeNest; - mappings[1307] = ItemType.Beehive; - mappings[1308] = ItemType.HoneyBottle; - mappings[1309] = ItemType.HoneycombBlock; - mappings[1310] = ItemType.Lodestone; - mappings[1311] = ItemType.CryingObsidian; - mappings[1312] = ItemType.Blackstone; - mappings[1313] = ItemType.BlackstoneSlab; - mappings[1314] = ItemType.BlackstoneStairs; - mappings[1315] = ItemType.GildedBlackstone; - mappings[1316] = ItemType.PolishedBlackstone; - mappings[1317] = ItemType.PolishedBlackstoneSlab; - mappings[1318] = ItemType.PolishedBlackstoneStairs; - mappings[1319] = ItemType.ChiseledPolishedBlackstone; - mappings[1320] = ItemType.PolishedBlackstoneBricks; - mappings[1321] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1322] = ItemType.PolishedBlackstoneBrickStairs; - mappings[1323] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[1324] = ItemType.RespawnAnchor; - mappings[1325] = ItemType.Candle; - mappings[1326] = ItemType.WhiteCandle; - mappings[1327] = ItemType.OrangeCandle; - mappings[1328] = ItemType.MagentaCandle; - mappings[1329] = ItemType.LightBlueCandle; - mappings[1330] = ItemType.YellowCandle; - mappings[1331] = ItemType.LimeCandle; - mappings[1332] = ItemType.PinkCandle; - mappings[1333] = ItemType.GrayCandle; - mappings[1334] = ItemType.LightGrayCandle; - mappings[1335] = ItemType.CyanCandle; - mappings[1336] = ItemType.PurpleCandle; - mappings[1337] = ItemType.BlueCandle; - mappings[1338] = ItemType.BrownCandle; - mappings[1339] = ItemType.GreenCandle; - mappings[1340] = ItemType.RedCandle; - mappings[1341] = ItemType.BlackCandle; - mappings[1342] = ItemType.SmallAmethystBud; - mappings[1343] = ItemType.MediumAmethystBud; - mappings[1344] = ItemType.LargeAmethystBud; - mappings[1345] = ItemType.AmethystCluster; - mappings[1346] = ItemType.PointedDripstone; - mappings[1347] = ItemType.OchreFroglight; - mappings[1348] = ItemType.VerdantFroglight; - mappings[1349] = ItemType.PearlescentFroglight; - mappings[1350] = ItemType.Frogspawn; - mappings[1351] = ItemType.EchoShard; - mappings[1352] = ItemType.Brush; - mappings[1353] = ItemType.NetheriteUpgradeSmithingTemplate; - mappings[1354] = ItemType.SentryArmorTrimSmithingTemplate; - mappings[1355] = ItemType.DuneArmorTrimSmithingTemplate; - mappings[1356] = ItemType.CoastArmorTrimSmithingTemplate; - mappings[1357] = ItemType.WildArmorTrimSmithingTemplate; - mappings[1358] = ItemType.WardArmorTrimSmithingTemplate; - mappings[1359] = ItemType.EyeArmorTrimSmithingTemplate; - mappings[1360] = ItemType.VexArmorTrimSmithingTemplate; - mappings[1361] = ItemType.TideArmorTrimSmithingTemplate; - mappings[1362] = ItemType.SnoutArmorTrimSmithingTemplate; - mappings[1363] = ItemType.RibArmorTrimSmithingTemplate; - mappings[1364] = ItemType.SpireArmorTrimSmithingTemplate; - mappings[1365] = ItemType.WayfinderArmorTrimSmithingTemplate; - mappings[1366] = ItemType.ShaperArmorTrimSmithingTemplate; - mappings[1367] = ItemType.SilenceArmorTrimSmithingTemplate; - mappings[1368] = ItemType.RaiserArmorTrimSmithingTemplate; - mappings[1369] = ItemType.HostArmorTrimSmithingTemplate; - mappings[1370] = ItemType.FlowArmorTrimSmithingTemplate; - mappings[1371] = ItemType.BoltArmorTrimSmithingTemplate; - mappings[1372] = ItemType.AnglerPotterySherd; - mappings[1373] = ItemType.ArcherPotterySherd; - mappings[1374] = ItemType.ArmsUpPotterySherd; - mappings[1375] = ItemType.BladePotterySherd; - mappings[1376] = ItemType.BrewerPotterySherd; - mappings[1377] = ItemType.BurnPotterySherd; - mappings[1378] = ItemType.DangerPotterySherd; - mappings[1379] = ItemType.ExplorerPotterySherd; - mappings[1380] = ItemType.FlowPotterySherd; - mappings[1381] = ItemType.FriendPotterySherd; - mappings[1382] = ItemType.GusterPotterySherd; - mappings[1383] = ItemType.HeartPotterySherd; - mappings[1384] = ItemType.HeartbreakPotterySherd; - mappings[1385] = ItemType.HowlPotterySherd; - mappings[1386] = ItemType.MinerPotterySherd; - mappings[1387] = ItemType.MournerPotterySherd; - mappings[1388] = ItemType.PlentyPotterySherd; - mappings[1389] = ItemType.PrizePotterySherd; - mappings[1390] = ItemType.ScrapePotterySherd; - mappings[1391] = ItemType.SheafPotterySherd; - mappings[1392] = ItemType.ShelterPotterySherd; - mappings[1393] = ItemType.SkullPotterySherd; - mappings[1394] = ItemType.SnortPotterySherd; - mappings[1395] = ItemType.CopperGrate; - mappings[1396] = ItemType.ExposedCopperGrate; - mappings[1397] = ItemType.WeatheredCopperGrate; - mappings[1398] = ItemType.OxidizedCopperGrate; - mappings[1399] = ItemType.WaxedCopperGrate; - mappings[1400] = ItemType.WaxedExposedCopperGrate; - mappings[1401] = ItemType.WaxedWeatheredCopperGrate; - mappings[1402] = ItemType.WaxedOxidizedCopperGrate; - mappings[1403] = ItemType.CopperBulb; - mappings[1404] = ItemType.ExposedCopperBulb; - mappings[1405] = ItemType.WeatheredCopperBulb; - mappings[1406] = ItemType.OxidizedCopperBulb; - mappings[1407] = ItemType.WaxedCopperBulb; - mappings[1408] = ItemType.WaxedExposedCopperBulb; - mappings[1409] = ItemType.WaxedWeatheredCopperBulb; - mappings[1410] = ItemType.WaxedOxidizedCopperBulb; - mappings[1411] = ItemType.TrialSpawner; - mappings[1412] = ItemType.TrialKey; - mappings[1413] = ItemType.OminousTrialKey; - mappings[1414] = ItemType.Vault; - mappings[1415] = ItemType.OminousBottle; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1219.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette1219.cs deleted file mode 100644 index db6985f7b0..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette1219.cs +++ /dev/null @@ -1,1506 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette1219 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette1219() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.Deepslate; - mappings[9] = ItemType.CobbledDeepslate; - mappings[10] = ItemType.PolishedDeepslate; - mappings[11] = ItemType.Calcite; - mappings[12] = ItemType.Tuff; - mappings[13] = ItemType.TuffSlab; - mappings[14] = ItemType.TuffStairs; - mappings[15] = ItemType.TuffWall; - mappings[16] = ItemType.ChiseledTuff; - mappings[17] = ItemType.PolishedTuff; - mappings[18] = ItemType.PolishedTuffSlab; - mappings[19] = ItemType.PolishedTuffStairs; - mappings[20] = ItemType.PolishedTuffWall; - mappings[21] = ItemType.TuffBricks; - mappings[22] = ItemType.TuffBrickSlab; - mappings[23] = ItemType.TuffBrickStairs; - mappings[24] = ItemType.TuffBrickWall; - mappings[25] = ItemType.ChiseledTuffBricks; - mappings[26] = ItemType.DripstoneBlock; - mappings[27] = ItemType.GrassBlock; - mappings[28] = ItemType.Dirt; - mappings[29] = ItemType.CoarseDirt; - mappings[30] = ItemType.Podzol; - mappings[31] = ItemType.RootedDirt; - mappings[32] = ItemType.Mud; - mappings[33] = ItemType.CrimsonNylium; - mappings[34] = ItemType.WarpedNylium; - mappings[35] = ItemType.Cobblestone; - mappings[36] = ItemType.OakPlanks; - mappings[37] = ItemType.SprucePlanks; - mappings[38] = ItemType.BirchPlanks; - mappings[39] = ItemType.JunglePlanks; - mappings[40] = ItemType.AcaciaPlanks; - mappings[41] = ItemType.CherryPlanks; - mappings[42] = ItemType.DarkOakPlanks; - mappings[43] = ItemType.PaleOakPlanks; - mappings[44] = ItemType.MangrovePlanks; - mappings[45] = ItemType.BambooPlanks; - mappings[46] = ItemType.CrimsonPlanks; - mappings[47] = ItemType.WarpedPlanks; - mappings[48] = ItemType.BambooMosaic; - mappings[49] = ItemType.OakSapling; - mappings[50] = ItemType.SpruceSapling; - mappings[51] = ItemType.BirchSapling; - mappings[52] = ItemType.JungleSapling; - mappings[53] = ItemType.AcaciaSapling; - mappings[54] = ItemType.CherrySapling; - mappings[55] = ItemType.DarkOakSapling; - mappings[56] = ItemType.PaleOakSapling; - mappings[57] = ItemType.MangrovePropagule; - mappings[58] = ItemType.Bedrock; - mappings[59] = ItemType.Sand; - mappings[60] = ItemType.SuspiciousSand; - mappings[61] = ItemType.SuspiciousGravel; - mappings[62] = ItemType.RedSand; - mappings[63] = ItemType.Gravel; - mappings[64] = ItemType.CoalOre; - mappings[65] = ItemType.DeepslateCoalOre; - mappings[66] = ItemType.IronOre; - mappings[67] = ItemType.DeepslateIronOre; - mappings[68] = ItemType.CopperOre; - mappings[69] = ItemType.DeepslateCopperOre; - mappings[70] = ItemType.GoldOre; - mappings[71] = ItemType.DeepslateGoldOre; - mappings[72] = ItemType.RedstoneOre; - mappings[73] = ItemType.DeepslateRedstoneOre; - mappings[74] = ItemType.EmeraldOre; - mappings[75] = ItemType.DeepslateEmeraldOre; - mappings[76] = ItemType.LapisOre; - mappings[77] = ItemType.DeepslateLapisOre; - mappings[78] = ItemType.DiamondOre; - mappings[79] = ItemType.DeepslateDiamondOre; - mappings[80] = ItemType.NetherGoldOre; - mappings[81] = ItemType.NetherQuartzOre; - mappings[82] = ItemType.AncientDebris; - mappings[83] = ItemType.CoalBlock; - mappings[84] = ItemType.RawIronBlock; - mappings[85] = ItemType.RawCopperBlock; - mappings[86] = ItemType.RawGoldBlock; - mappings[87] = ItemType.HeavyCore; - mappings[88] = ItemType.AmethystBlock; - mappings[89] = ItemType.BuddingAmethyst; - mappings[90] = ItemType.IronBlock; - mappings[91] = ItemType.CopperBlock; - mappings[92] = ItemType.GoldBlock; - mappings[93] = ItemType.DiamondBlock; - mappings[94] = ItemType.NetheriteBlock; - mappings[95] = ItemType.ExposedCopper; - mappings[96] = ItemType.WeatheredCopper; - mappings[97] = ItemType.OxidizedCopper; - mappings[98] = ItemType.ChiseledCopper; - mappings[99] = ItemType.ExposedChiseledCopper; - mappings[100] = ItemType.WeatheredChiseledCopper; - mappings[101] = ItemType.OxidizedChiseledCopper; - mappings[102] = ItemType.CutCopper; - mappings[103] = ItemType.ExposedCutCopper; - mappings[104] = ItemType.WeatheredCutCopper; - mappings[105] = ItemType.OxidizedCutCopper; - mappings[106] = ItemType.CutCopperStairs; - mappings[107] = ItemType.ExposedCutCopperStairs; - mappings[108] = ItemType.WeatheredCutCopperStairs; - mappings[109] = ItemType.OxidizedCutCopperStairs; - mappings[110] = ItemType.CutCopperSlab; - mappings[111] = ItemType.ExposedCutCopperSlab; - mappings[112] = ItemType.WeatheredCutCopperSlab; - mappings[113] = ItemType.OxidizedCutCopperSlab; - mappings[114] = ItemType.WaxedCopperBlock; - mappings[115] = ItemType.WaxedExposedCopper; - mappings[116] = ItemType.WaxedWeatheredCopper; - mappings[117] = ItemType.WaxedOxidizedCopper; - mappings[118] = ItemType.WaxedChiseledCopper; - mappings[119] = ItemType.WaxedExposedChiseledCopper; - mappings[120] = ItemType.WaxedWeatheredChiseledCopper; - mappings[121] = ItemType.WaxedOxidizedChiseledCopper; - mappings[122] = ItemType.WaxedCutCopper; - mappings[123] = ItemType.WaxedExposedCutCopper; - mappings[124] = ItemType.WaxedWeatheredCutCopper; - mappings[125] = ItemType.WaxedOxidizedCutCopper; - mappings[126] = ItemType.WaxedCutCopperStairs; - mappings[127] = ItemType.WaxedExposedCutCopperStairs; - mappings[128] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[129] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[130] = ItemType.WaxedCutCopperSlab; - mappings[131] = ItemType.WaxedExposedCutCopperSlab; - mappings[132] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[133] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[134] = ItemType.OakLog; - mappings[135] = ItemType.SpruceLog; - mappings[136] = ItemType.BirchLog; - mappings[137] = ItemType.JungleLog; - mappings[138] = ItemType.AcaciaLog; - mappings[139] = ItemType.CherryLog; - mappings[140] = ItemType.PaleOakLog; - mappings[141] = ItemType.DarkOakLog; - mappings[142] = ItemType.MangroveLog; - mappings[143] = ItemType.MangroveRoots; - mappings[144] = ItemType.MuddyMangroveRoots; - mappings[145] = ItemType.CrimsonStem; - mappings[146] = ItemType.WarpedStem; - mappings[147] = ItemType.BambooBlock; - mappings[148] = ItemType.StrippedOakLog; - mappings[149] = ItemType.StrippedSpruceLog; - mappings[150] = ItemType.StrippedBirchLog; - mappings[151] = ItemType.StrippedJungleLog; - mappings[152] = ItemType.StrippedAcaciaLog; - mappings[153] = ItemType.StrippedCherryLog; - mappings[154] = ItemType.StrippedDarkOakLog; - mappings[155] = ItemType.StrippedPaleOakLog; - mappings[156] = ItemType.StrippedMangroveLog; - mappings[157] = ItemType.StrippedCrimsonStem; - mappings[158] = ItemType.StrippedWarpedStem; - mappings[159] = ItemType.StrippedOakWood; - mappings[160] = ItemType.StrippedSpruceWood; - mappings[161] = ItemType.StrippedBirchWood; - mappings[162] = ItemType.StrippedJungleWood; - mappings[163] = ItemType.StrippedAcaciaWood; - mappings[164] = ItemType.StrippedCherryWood; - mappings[165] = ItemType.StrippedDarkOakWood; - mappings[166] = ItemType.StrippedPaleOakWood; - mappings[167] = ItemType.StrippedMangroveWood; - mappings[168] = ItemType.StrippedCrimsonHyphae; - mappings[169] = ItemType.StrippedWarpedHyphae; - mappings[170] = ItemType.StrippedBambooBlock; - mappings[171] = ItemType.OakWood; - mappings[172] = ItemType.SpruceWood; - mappings[173] = ItemType.BirchWood; - mappings[174] = ItemType.JungleWood; - mappings[175] = ItemType.AcaciaWood; - mappings[176] = ItemType.CherryWood; - mappings[177] = ItemType.PaleOakWood; - mappings[178] = ItemType.DarkOakWood; - mappings[179] = ItemType.MangroveWood; - mappings[180] = ItemType.CrimsonHyphae; - mappings[181] = ItemType.WarpedHyphae; - mappings[182] = ItemType.OakLeaves; - mappings[183] = ItemType.SpruceLeaves; - mappings[184] = ItemType.BirchLeaves; - mappings[185] = ItemType.JungleLeaves; - mappings[186] = ItemType.AcaciaLeaves; - mappings[187] = ItemType.CherryLeaves; - mappings[188] = ItemType.DarkOakLeaves; - mappings[189] = ItemType.PaleOakLeaves; - mappings[190] = ItemType.MangroveLeaves; - mappings[191] = ItemType.AzaleaLeaves; - mappings[192] = ItemType.FloweringAzaleaLeaves; - mappings[193] = ItemType.Sponge; - mappings[194] = ItemType.WetSponge; - mappings[195] = ItemType.Glass; - mappings[196] = ItemType.TintedGlass; - mappings[197] = ItemType.LapisBlock; - mappings[198] = ItemType.Sandstone; - mappings[199] = ItemType.ChiseledSandstone; - mappings[200] = ItemType.CutSandstone; - mappings[201] = ItemType.Cobweb; - mappings[202] = ItemType.ShortGrass; - mappings[203] = ItemType.Fern; - mappings[204] = ItemType.Bush; - mappings[205] = ItemType.Azalea; - mappings[206] = ItemType.FloweringAzalea; - mappings[207] = ItemType.DeadBush; - mappings[208] = ItemType.FireflyBush; - mappings[209] = ItemType.ShortDryGrass; - mappings[210] = ItemType.TallDryGrass; - mappings[211] = ItemType.Seagrass; - mappings[212] = ItemType.SeaPickle; - mappings[213] = ItemType.WhiteWool; - mappings[214] = ItemType.OrangeWool; - mappings[215] = ItemType.MagentaWool; - mappings[216] = ItemType.LightBlueWool; - mappings[217] = ItemType.YellowWool; - mappings[218] = ItemType.LimeWool; - mappings[219] = ItemType.PinkWool; - mappings[220] = ItemType.GrayWool; - mappings[221] = ItemType.LightGrayWool; - mappings[222] = ItemType.CyanWool; - mappings[223] = ItemType.PurpleWool; - mappings[224] = ItemType.BlueWool; - mappings[225] = ItemType.BrownWool; - mappings[226] = ItemType.GreenWool; - mappings[227] = ItemType.RedWool; - mappings[228] = ItemType.BlackWool; - mappings[229] = ItemType.Dandelion; - mappings[230] = ItemType.OpenEyeblossom; - mappings[231] = ItemType.ClosedEyeblossom; - mappings[232] = ItemType.Poppy; - mappings[233] = ItemType.BlueOrchid; - mappings[234] = ItemType.Allium; - mappings[235] = ItemType.AzureBluet; - mappings[236] = ItemType.RedTulip; - mappings[237] = ItemType.OrangeTulip; - mappings[238] = ItemType.WhiteTulip; - mappings[239] = ItemType.PinkTulip; - mappings[240] = ItemType.OxeyeDaisy; - mappings[241] = ItemType.Cornflower; - mappings[242] = ItemType.LilyOfTheValley; - mappings[243] = ItemType.WitherRose; - mappings[244] = ItemType.Torchflower; - mappings[245] = ItemType.PitcherPlant; - mappings[246] = ItemType.SporeBlossom; - mappings[247] = ItemType.BrownMushroom; - mappings[248] = ItemType.RedMushroom; - mappings[249] = ItemType.CrimsonFungus; - mappings[250] = ItemType.WarpedFungus; - mappings[251] = ItemType.CrimsonRoots; - mappings[252] = ItemType.WarpedRoots; - mappings[253] = ItemType.NetherSprouts; - mappings[254] = ItemType.WeepingVines; - mappings[255] = ItemType.TwistingVines; - mappings[256] = ItemType.SugarCane; - mappings[257] = ItemType.Kelp; - mappings[258] = ItemType.PinkPetals; - mappings[259] = ItemType.Wildflowers; - mappings[260] = ItemType.LeafLitter; - mappings[261] = ItemType.MossCarpet; - mappings[262] = ItemType.MossBlock; - mappings[263] = ItemType.PaleMossCarpet; - mappings[264] = ItemType.PaleHangingMoss; - mappings[265] = ItemType.PaleMossBlock; - mappings[266] = ItemType.HangingRoots; - mappings[267] = ItemType.BigDripleaf; - mappings[268] = ItemType.SmallDripleaf; - mappings[269] = ItemType.Bamboo; - mappings[270] = ItemType.OakSlab; - mappings[271] = ItemType.SpruceSlab; - mappings[272] = ItemType.BirchSlab; - mappings[273] = ItemType.JungleSlab; - mappings[274] = ItemType.AcaciaSlab; - mappings[275] = ItemType.CherrySlab; - mappings[276] = ItemType.DarkOakSlab; - mappings[277] = ItemType.PaleOakSlab; - mappings[278] = ItemType.MangroveSlab; - mappings[279] = ItemType.BambooSlab; - mappings[280] = ItemType.BambooMosaicSlab; - mappings[281] = ItemType.CrimsonSlab; - mappings[282] = ItemType.WarpedSlab; - mappings[283] = ItemType.StoneSlab; - mappings[284] = ItemType.SmoothStoneSlab; - mappings[285] = ItemType.SandstoneSlab; - mappings[286] = ItemType.CutSandstoneSlab; - mappings[287] = ItemType.PetrifiedOakSlab; - mappings[288] = ItemType.CobblestoneSlab; - mappings[289] = ItemType.BrickSlab; - mappings[290] = ItemType.StoneBrickSlab; - mappings[291] = ItemType.MudBrickSlab; - mappings[292] = ItemType.NetherBrickSlab; - mappings[293] = ItemType.QuartzSlab; - mappings[294] = ItemType.RedSandstoneSlab; - mappings[295] = ItemType.CutRedSandstoneSlab; - mappings[296] = ItemType.PurpurSlab; - mappings[297] = ItemType.PrismarineSlab; - mappings[298] = ItemType.PrismarineBrickSlab; - mappings[299] = ItemType.DarkPrismarineSlab; - mappings[300] = ItemType.SmoothQuartz; - mappings[301] = ItemType.SmoothRedSandstone; - mappings[302] = ItemType.SmoothSandstone; - mappings[303] = ItemType.SmoothStone; - mappings[304] = ItemType.Bricks; - mappings[305] = ItemType.AcaciaShelf; - mappings[306] = ItemType.BambooShelf; - mappings[307] = ItemType.BirchShelf; - mappings[308] = ItemType.CherryShelf; - mappings[309] = ItemType.CrimsonShelf; - mappings[310] = ItemType.DarkOakShelf; - mappings[311] = ItemType.JungleShelf; - mappings[312] = ItemType.MangroveShelf; - mappings[313] = ItemType.OakShelf; - mappings[314] = ItemType.PaleOakShelf; - mappings[315] = ItemType.SpruceShelf; - mappings[316] = ItemType.WarpedShelf; - mappings[317] = ItemType.Bookshelf; - mappings[318] = ItemType.ChiseledBookshelf; - mappings[319] = ItemType.DecoratedPot; - mappings[320] = ItemType.MossyCobblestone; - mappings[321] = ItemType.Obsidian; - mappings[322] = ItemType.Torch; - mappings[323] = ItemType.EndRod; - mappings[324] = ItemType.ChorusPlant; - mappings[325] = ItemType.ChorusFlower; - mappings[326] = ItemType.PurpurBlock; - mappings[327] = ItemType.PurpurPillar; - mappings[328] = ItemType.PurpurStairs; - mappings[329] = ItemType.Spawner; - mappings[330] = ItemType.CreakingHeart; - mappings[331] = ItemType.Chest; - mappings[332] = ItemType.CraftingTable; - mappings[333] = ItemType.Farmland; - mappings[334] = ItemType.Furnace; - mappings[335] = ItemType.Ladder; - mappings[336] = ItemType.CobblestoneStairs; - mappings[337] = ItemType.Snow; - mappings[338] = ItemType.Ice; - mappings[339] = ItemType.SnowBlock; - mappings[340] = ItemType.Cactus; - mappings[341] = ItemType.CactusFlower; - mappings[342] = ItemType.Clay; - mappings[343] = ItemType.Jukebox; - mappings[344] = ItemType.OakFence; - mappings[345] = ItemType.SpruceFence; - mappings[346] = ItemType.BirchFence; - mappings[347] = ItemType.JungleFence; - mappings[348] = ItemType.AcaciaFence; - mappings[349] = ItemType.CherryFence; - mappings[350] = ItemType.DarkOakFence; - mappings[351] = ItemType.PaleOakFence; - mappings[352] = ItemType.MangroveFence; - mappings[353] = ItemType.BambooFence; - mappings[354] = ItemType.CrimsonFence; - mappings[355] = ItemType.WarpedFence; - mappings[356] = ItemType.Pumpkin; - mappings[357] = ItemType.CarvedPumpkin; - mappings[358] = ItemType.JackOLantern; - mappings[359] = ItemType.Netherrack; - mappings[360] = ItemType.SoulSand; - mappings[361] = ItemType.SoulSoil; - mappings[362] = ItemType.Basalt; - mappings[363] = ItemType.PolishedBasalt; - mappings[364] = ItemType.SmoothBasalt; - mappings[365] = ItemType.SoulTorch; - mappings[366] = ItemType.CopperTorch; - mappings[367] = ItemType.Glowstone; - mappings[368] = ItemType.InfestedStone; - mappings[369] = ItemType.InfestedCobblestone; - mappings[370] = ItemType.InfestedStoneBricks; - mappings[371] = ItemType.InfestedMossyStoneBricks; - mappings[372] = ItemType.InfestedCrackedStoneBricks; - mappings[373] = ItemType.InfestedChiseledStoneBricks; - mappings[374] = ItemType.InfestedDeepslate; - mappings[375] = ItemType.StoneBricks; - mappings[376] = ItemType.MossyStoneBricks; - mappings[377] = ItemType.CrackedStoneBricks; - mappings[378] = ItemType.ChiseledStoneBricks; - mappings[379] = ItemType.PackedMud; - mappings[380] = ItemType.MudBricks; - mappings[381] = ItemType.DeepslateBricks; - mappings[382] = ItemType.CrackedDeepslateBricks; - mappings[383] = ItemType.DeepslateTiles; - mappings[384] = ItemType.CrackedDeepslateTiles; - mappings[385] = ItemType.ChiseledDeepslate; - mappings[386] = ItemType.ReinforcedDeepslate; - mappings[387] = ItemType.BrownMushroomBlock; - mappings[388] = ItemType.RedMushroomBlock; - mappings[389] = ItemType.MushroomStem; - mappings[390] = ItemType.IronBars; - mappings[391] = ItemType.CopperBars; - mappings[392] = ItemType.ExposedCopperBars; - mappings[393] = ItemType.WeatheredCopperBars; - mappings[394] = ItemType.OxidizedCopperBars; - mappings[395] = ItemType.WaxedCopperBars; - mappings[396] = ItemType.WaxedExposedCopperBars; - mappings[397] = ItemType.WaxedWeatheredCopperBars; - mappings[398] = ItemType.WaxedOxidizedCopperBars; - mappings[399] = ItemType.IronChain; - mappings[400] = ItemType.CopperChain; - mappings[401] = ItemType.ExposedCopperChain; - mappings[402] = ItemType.WeatheredCopperChain; - mappings[403] = ItemType.OxidizedCopperChain; - mappings[404] = ItemType.WaxedCopperChain; - mappings[405] = ItemType.WaxedExposedCopperChain; - mappings[406] = ItemType.WaxedWeatheredCopperChain; - mappings[407] = ItemType.WaxedOxidizedCopperChain; - mappings[408] = ItemType.GlassPane; - mappings[409] = ItemType.Melon; - mappings[410] = ItemType.Vine; - mappings[411] = ItemType.GlowLichen; - mappings[412] = ItemType.ResinClump; - mappings[413] = ItemType.ResinBlock; - mappings[414] = ItemType.ResinBricks; - mappings[415] = ItemType.ResinBrickStairs; - mappings[416] = ItemType.ResinBrickSlab; - mappings[417] = ItemType.ResinBrickWall; - mappings[418] = ItemType.ChiseledResinBricks; - mappings[419] = ItemType.BrickStairs; - mappings[420] = ItemType.StoneBrickStairs; - mappings[421] = ItemType.MudBrickStairs; - mappings[422] = ItemType.Mycelium; - mappings[423] = ItemType.LilyPad; - mappings[424] = ItemType.NetherBricks; - mappings[425] = ItemType.CrackedNetherBricks; - mappings[426] = ItemType.ChiseledNetherBricks; - mappings[427] = ItemType.NetherBrickFence; - mappings[428] = ItemType.NetherBrickStairs; - mappings[429] = ItemType.Sculk; - mappings[430] = ItemType.SculkVein; - mappings[431] = ItemType.SculkCatalyst; - mappings[432] = ItemType.SculkShrieker; - mappings[433] = ItemType.EnchantingTable; - mappings[434] = ItemType.EndPortalFrame; - mappings[435] = ItemType.EndStone; - mappings[436] = ItemType.EndStoneBricks; - mappings[437] = ItemType.DragonEgg; - mappings[438] = ItemType.SandstoneStairs; - mappings[439] = ItemType.EnderChest; - mappings[440] = ItemType.EmeraldBlock; - mappings[441] = ItemType.OakStairs; - mappings[442] = ItemType.SpruceStairs; - mappings[443] = ItemType.BirchStairs; - mappings[444] = ItemType.JungleStairs; - mappings[445] = ItemType.AcaciaStairs; - mappings[446] = ItemType.CherryStairs; - mappings[447] = ItemType.DarkOakStairs; - mappings[448] = ItemType.PaleOakStairs; - mappings[449] = ItemType.MangroveStairs; - mappings[450] = ItemType.BambooStairs; - mappings[451] = ItemType.BambooMosaicStairs; - mappings[452] = ItemType.CrimsonStairs; - mappings[453] = ItemType.WarpedStairs; - mappings[454] = ItemType.CommandBlock; - mappings[455] = ItemType.Beacon; - mappings[456] = ItemType.CobblestoneWall; - mappings[457] = ItemType.MossyCobblestoneWall; - mappings[458] = ItemType.BrickWall; - mappings[459] = ItemType.PrismarineWall; - mappings[460] = ItemType.RedSandstoneWall; - mappings[461] = ItemType.MossyStoneBrickWall; - mappings[462] = ItemType.GraniteWall; - mappings[463] = ItemType.StoneBrickWall; - mappings[464] = ItemType.MudBrickWall; - mappings[465] = ItemType.NetherBrickWall; - mappings[466] = ItemType.AndesiteWall; - mappings[467] = ItemType.RedNetherBrickWall; - mappings[468] = ItemType.SandstoneWall; - mappings[469] = ItemType.EndStoneBrickWall; - mappings[470] = ItemType.DioriteWall; - mappings[471] = ItemType.BlackstoneWall; - mappings[472] = ItemType.PolishedBlackstoneWall; - mappings[473] = ItemType.PolishedBlackstoneBrickWall; - mappings[474] = ItemType.CobbledDeepslateWall; - mappings[475] = ItemType.PolishedDeepslateWall; - mappings[476] = ItemType.DeepslateBrickWall; - mappings[477] = ItemType.DeepslateTileWall; - mappings[478] = ItemType.Anvil; - mappings[479] = ItemType.ChippedAnvil; - mappings[480] = ItemType.DamagedAnvil; - mappings[481] = ItemType.ChiseledQuartzBlock; - mappings[482] = ItemType.QuartzBlock; - mappings[483] = ItemType.QuartzBricks; - mappings[484] = ItemType.QuartzPillar; - mappings[485] = ItemType.QuartzStairs; - mappings[486] = ItemType.WhiteTerracotta; - mappings[487] = ItemType.OrangeTerracotta; - mappings[488] = ItemType.MagentaTerracotta; - mappings[489] = ItemType.LightBlueTerracotta; - mappings[490] = ItemType.YellowTerracotta; - mappings[491] = ItemType.LimeTerracotta; - mappings[492] = ItemType.PinkTerracotta; - mappings[493] = ItemType.GrayTerracotta; - mappings[494] = ItemType.LightGrayTerracotta; - mappings[495] = ItemType.CyanTerracotta; - mappings[496] = ItemType.PurpleTerracotta; - mappings[497] = ItemType.BlueTerracotta; - mappings[498] = ItemType.BrownTerracotta; - mappings[499] = ItemType.GreenTerracotta; - mappings[500] = ItemType.RedTerracotta; - mappings[501] = ItemType.BlackTerracotta; - mappings[502] = ItemType.Barrier; - mappings[503] = ItemType.Light; - mappings[504] = ItemType.HayBlock; - mappings[505] = ItemType.WhiteCarpet; - mappings[506] = ItemType.OrangeCarpet; - mappings[507] = ItemType.MagentaCarpet; - mappings[508] = ItemType.LightBlueCarpet; - mappings[509] = ItemType.YellowCarpet; - mappings[510] = ItemType.LimeCarpet; - mappings[511] = ItemType.PinkCarpet; - mappings[512] = ItemType.GrayCarpet; - mappings[513] = ItemType.LightGrayCarpet; - mappings[514] = ItemType.CyanCarpet; - mappings[515] = ItemType.PurpleCarpet; - mappings[516] = ItemType.BlueCarpet; - mappings[517] = ItemType.BrownCarpet; - mappings[518] = ItemType.GreenCarpet; - mappings[519] = ItemType.RedCarpet; - mappings[520] = ItemType.BlackCarpet; - mappings[521] = ItemType.Terracotta; - mappings[522] = ItemType.PackedIce; - mappings[523] = ItemType.DirtPath; - mappings[524] = ItemType.Sunflower; - mappings[525] = ItemType.Lilac; - mappings[526] = ItemType.RoseBush; - mappings[527] = ItemType.Peony; - mappings[528] = ItemType.TallGrass; - mappings[529] = ItemType.LargeFern; - mappings[530] = ItemType.WhiteStainedGlass; - mappings[531] = ItemType.OrangeStainedGlass; - mappings[532] = ItemType.MagentaStainedGlass; - mappings[533] = ItemType.LightBlueStainedGlass; - mappings[534] = ItemType.YellowStainedGlass; - mappings[535] = ItemType.LimeStainedGlass; - mappings[536] = ItemType.PinkStainedGlass; - mappings[537] = ItemType.GrayStainedGlass; - mappings[538] = ItemType.LightGrayStainedGlass; - mappings[539] = ItemType.CyanStainedGlass; - mappings[540] = ItemType.PurpleStainedGlass; - mappings[541] = ItemType.BlueStainedGlass; - mappings[542] = ItemType.BrownStainedGlass; - mappings[543] = ItemType.GreenStainedGlass; - mappings[544] = ItemType.RedStainedGlass; - mappings[545] = ItemType.BlackStainedGlass; - mappings[546] = ItemType.WhiteStainedGlassPane; - mappings[547] = ItemType.OrangeStainedGlassPane; - mappings[548] = ItemType.MagentaStainedGlassPane; - mappings[549] = ItemType.LightBlueStainedGlassPane; - mappings[550] = ItemType.YellowStainedGlassPane; - mappings[551] = ItemType.LimeStainedGlassPane; - mappings[552] = ItemType.PinkStainedGlassPane; - mappings[553] = ItemType.GrayStainedGlassPane; - mappings[554] = ItemType.LightGrayStainedGlassPane; - mappings[555] = ItemType.CyanStainedGlassPane; - mappings[556] = ItemType.PurpleStainedGlassPane; - mappings[557] = ItemType.BlueStainedGlassPane; - mappings[558] = ItemType.BrownStainedGlassPane; - mappings[559] = ItemType.GreenStainedGlassPane; - mappings[560] = ItemType.RedStainedGlassPane; - mappings[561] = ItemType.BlackStainedGlassPane; - mappings[562] = ItemType.Prismarine; - mappings[563] = ItemType.PrismarineBricks; - mappings[564] = ItemType.DarkPrismarine; - mappings[565] = ItemType.PrismarineStairs; - mappings[566] = ItemType.PrismarineBrickStairs; - mappings[567] = ItemType.DarkPrismarineStairs; - mappings[568] = ItemType.SeaLantern; - mappings[569] = ItemType.RedSandstone; - mappings[570] = ItemType.ChiseledRedSandstone; - mappings[571] = ItemType.CutRedSandstone; - mappings[572] = ItemType.RedSandstoneStairs; - mappings[573] = ItemType.RepeatingCommandBlock; - mappings[574] = ItemType.ChainCommandBlock; - mappings[575] = ItemType.MagmaBlock; - mappings[576] = ItemType.NetherWartBlock; - mappings[577] = ItemType.WarpedWartBlock; - mappings[578] = ItemType.RedNetherBricks; - mappings[579] = ItemType.BoneBlock; - mappings[580] = ItemType.StructureVoid; - mappings[581] = ItemType.ShulkerBox; - mappings[582] = ItemType.WhiteShulkerBox; - mappings[583] = ItemType.OrangeShulkerBox; - mappings[584] = ItemType.MagentaShulkerBox; - mappings[585] = ItemType.LightBlueShulkerBox; - mappings[586] = ItemType.YellowShulkerBox; - mappings[587] = ItemType.LimeShulkerBox; - mappings[588] = ItemType.PinkShulkerBox; - mappings[589] = ItemType.GrayShulkerBox; - mappings[590] = ItemType.LightGrayShulkerBox; - mappings[591] = ItemType.CyanShulkerBox; - mappings[592] = ItemType.PurpleShulkerBox; - mappings[593] = ItemType.BlueShulkerBox; - mappings[594] = ItemType.BrownShulkerBox; - mappings[595] = ItemType.GreenShulkerBox; - mappings[596] = ItemType.RedShulkerBox; - mappings[597] = ItemType.BlackShulkerBox; - mappings[598] = ItemType.WhiteGlazedTerracotta; - mappings[599] = ItemType.OrangeGlazedTerracotta; - mappings[600] = ItemType.MagentaGlazedTerracotta; - mappings[601] = ItemType.LightBlueGlazedTerracotta; - mappings[602] = ItemType.YellowGlazedTerracotta; - mappings[603] = ItemType.LimeGlazedTerracotta; - mappings[604] = ItemType.PinkGlazedTerracotta; - mappings[605] = ItemType.GrayGlazedTerracotta; - mappings[606] = ItemType.LightGrayGlazedTerracotta; - mappings[607] = ItemType.CyanGlazedTerracotta; - mappings[608] = ItemType.PurpleGlazedTerracotta; - mappings[609] = ItemType.BlueGlazedTerracotta; - mappings[610] = ItemType.BrownGlazedTerracotta; - mappings[611] = ItemType.GreenGlazedTerracotta; - mappings[612] = ItemType.RedGlazedTerracotta; - mappings[613] = ItemType.BlackGlazedTerracotta; - mappings[614] = ItemType.WhiteConcrete; - mappings[615] = ItemType.OrangeConcrete; - mappings[616] = ItemType.MagentaConcrete; - mappings[617] = ItemType.LightBlueConcrete; - mappings[618] = ItemType.YellowConcrete; - mappings[619] = ItemType.LimeConcrete; - mappings[620] = ItemType.PinkConcrete; - mappings[621] = ItemType.GrayConcrete; - mappings[622] = ItemType.LightGrayConcrete; - mappings[623] = ItemType.CyanConcrete; - mappings[624] = ItemType.PurpleConcrete; - mappings[625] = ItemType.BlueConcrete; - mappings[626] = ItemType.BrownConcrete; - mappings[627] = ItemType.GreenConcrete; - mappings[628] = ItemType.RedConcrete; - mappings[629] = ItemType.BlackConcrete; - mappings[630] = ItemType.WhiteConcretePowder; - mappings[631] = ItemType.OrangeConcretePowder; - mappings[632] = ItemType.MagentaConcretePowder; - mappings[633] = ItemType.LightBlueConcretePowder; - mappings[634] = ItemType.YellowConcretePowder; - mappings[635] = ItemType.LimeConcretePowder; - mappings[636] = ItemType.PinkConcretePowder; - mappings[637] = ItemType.GrayConcretePowder; - mappings[638] = ItemType.LightGrayConcretePowder; - mappings[639] = ItemType.CyanConcretePowder; - mappings[640] = ItemType.PurpleConcretePowder; - mappings[641] = ItemType.BlueConcretePowder; - mappings[642] = ItemType.BrownConcretePowder; - mappings[643] = ItemType.GreenConcretePowder; - mappings[644] = ItemType.RedConcretePowder; - mappings[645] = ItemType.BlackConcretePowder; - mappings[646] = ItemType.TurtleEgg; - mappings[647] = ItemType.SnifferEgg; - mappings[648] = ItemType.DriedGhast; - mappings[649] = ItemType.DeadTubeCoralBlock; - mappings[650] = ItemType.DeadBrainCoralBlock; - mappings[651] = ItemType.DeadBubbleCoralBlock; - mappings[652] = ItemType.DeadFireCoralBlock; - mappings[653] = ItemType.DeadHornCoralBlock; - mappings[654] = ItemType.TubeCoralBlock; - mappings[655] = ItemType.BrainCoralBlock; - mappings[656] = ItemType.BubbleCoralBlock; - mappings[657] = ItemType.FireCoralBlock; - mappings[658] = ItemType.HornCoralBlock; - mappings[659] = ItemType.TubeCoral; - mappings[660] = ItemType.BrainCoral; - mappings[661] = ItemType.BubbleCoral; - mappings[662] = ItemType.FireCoral; - mappings[663] = ItemType.HornCoral; - mappings[664] = ItemType.DeadBrainCoral; - mappings[665] = ItemType.DeadBubbleCoral; - mappings[666] = ItemType.DeadFireCoral; - mappings[667] = ItemType.DeadHornCoral; - mappings[668] = ItemType.DeadTubeCoral; - mappings[669] = ItemType.TubeCoralFan; - mappings[670] = ItemType.BrainCoralFan; - mappings[671] = ItemType.BubbleCoralFan; - mappings[672] = ItemType.FireCoralFan; - mappings[673] = ItemType.HornCoralFan; - mappings[674] = ItemType.DeadTubeCoralFan; - mappings[675] = ItemType.DeadBrainCoralFan; - mappings[676] = ItemType.DeadBubbleCoralFan; - mappings[677] = ItemType.DeadFireCoralFan; - mappings[678] = ItemType.DeadHornCoralFan; - mappings[679] = ItemType.BlueIce; - mappings[680] = ItemType.Conduit; - mappings[681] = ItemType.PolishedGraniteStairs; - mappings[682] = ItemType.SmoothRedSandstoneStairs; - mappings[683] = ItemType.MossyStoneBrickStairs; - mappings[684] = ItemType.PolishedDioriteStairs; - mappings[685] = ItemType.MossyCobblestoneStairs; - mappings[686] = ItemType.EndStoneBrickStairs; - mappings[687] = ItemType.StoneStairs; - mappings[688] = ItemType.SmoothSandstoneStairs; - mappings[689] = ItemType.SmoothQuartzStairs; - mappings[690] = ItemType.GraniteStairs; - mappings[691] = ItemType.AndesiteStairs; - mappings[692] = ItemType.RedNetherBrickStairs; - mappings[693] = ItemType.PolishedAndesiteStairs; - mappings[694] = ItemType.DioriteStairs; - mappings[695] = ItemType.CobbledDeepslateStairs; - mappings[696] = ItemType.PolishedDeepslateStairs; - mappings[697] = ItemType.DeepslateBrickStairs; - mappings[698] = ItemType.DeepslateTileStairs; - mappings[699] = ItemType.PolishedGraniteSlab; - mappings[700] = ItemType.SmoothRedSandstoneSlab; - mappings[701] = ItemType.MossyStoneBrickSlab; - mappings[702] = ItemType.PolishedDioriteSlab; - mappings[703] = ItemType.MossyCobblestoneSlab; - mappings[704] = ItemType.EndStoneBrickSlab; - mappings[705] = ItemType.SmoothSandstoneSlab; - mappings[706] = ItemType.SmoothQuartzSlab; - mappings[707] = ItemType.GraniteSlab; - mappings[708] = ItemType.AndesiteSlab; - mappings[709] = ItemType.RedNetherBrickSlab; - mappings[710] = ItemType.PolishedAndesiteSlab; - mappings[711] = ItemType.DioriteSlab; - mappings[712] = ItemType.CobbledDeepslateSlab; - mappings[713] = ItemType.PolishedDeepslateSlab; - mappings[714] = ItemType.DeepslateBrickSlab; - mappings[715] = ItemType.DeepslateTileSlab; - mappings[716] = ItemType.Scaffolding; - mappings[717] = ItemType.Redstone; - mappings[718] = ItemType.RedstoneTorch; - mappings[719] = ItemType.RedstoneBlock; - mappings[720] = ItemType.Repeater; - mappings[721] = ItemType.Comparator; - mappings[722] = ItemType.Piston; - mappings[723] = ItemType.StickyPiston; - mappings[724] = ItemType.SlimeBlock; - mappings[725] = ItemType.HoneyBlock; - mappings[726] = ItemType.Observer; - mappings[727] = ItemType.Hopper; - mappings[728] = ItemType.Dispenser; - mappings[729] = ItemType.Dropper; - mappings[730] = ItemType.Lectern; - mappings[731] = ItemType.Target; - mappings[732] = ItemType.Lever; - mappings[733] = ItemType.LightningRod; - mappings[734] = ItemType.ExposedLightningRod; - mappings[735] = ItemType.WeatheredLightningRod; - mappings[736] = ItemType.OxidizedLightningRod; - mappings[737] = ItemType.WaxedLightningRod; - mappings[738] = ItemType.WaxedExposedLightningRod; - mappings[739] = ItemType.WaxedWeatheredLightningRod; - mappings[740] = ItemType.WaxedOxidizedLightningRod; - mappings[741] = ItemType.DaylightDetector; - mappings[742] = ItemType.SculkSensor; - mappings[743] = ItemType.CalibratedSculkSensor; - mappings[744] = ItemType.TripwireHook; - mappings[745] = ItemType.TrappedChest; - mappings[746] = ItemType.Tnt; - mappings[747] = ItemType.RedstoneLamp; - mappings[748] = ItemType.NoteBlock; - mappings[749] = ItemType.StoneButton; - mappings[750] = ItemType.PolishedBlackstoneButton; - mappings[751] = ItemType.OakButton; - mappings[752] = ItemType.SpruceButton; - mappings[753] = ItemType.BirchButton; - mappings[754] = ItemType.JungleButton; - mappings[755] = ItemType.AcaciaButton; - mappings[756] = ItemType.CherryButton; - mappings[757] = ItemType.DarkOakButton; - mappings[758] = ItemType.PaleOakButton; - mappings[759] = ItemType.MangroveButton; - mappings[760] = ItemType.BambooButton; - mappings[761] = ItemType.CrimsonButton; - mappings[762] = ItemType.WarpedButton; - mappings[763] = ItemType.StonePressurePlate; - mappings[764] = ItemType.PolishedBlackstonePressurePlate; - mappings[765] = ItemType.LightWeightedPressurePlate; - mappings[766] = ItemType.HeavyWeightedPressurePlate; - mappings[767] = ItemType.OakPressurePlate; - mappings[768] = ItemType.SprucePressurePlate; - mappings[769] = ItemType.BirchPressurePlate; - mappings[770] = ItemType.JunglePressurePlate; - mappings[771] = ItemType.AcaciaPressurePlate; - mappings[772] = ItemType.CherryPressurePlate; - mappings[773] = ItemType.DarkOakPressurePlate; - mappings[774] = ItemType.PaleOakPressurePlate; - mappings[775] = ItemType.MangrovePressurePlate; - mappings[776] = ItemType.BambooPressurePlate; - mappings[777] = ItemType.CrimsonPressurePlate; - mappings[778] = ItemType.WarpedPressurePlate; - mappings[779] = ItemType.IronDoor; - mappings[780] = ItemType.OakDoor; - mappings[781] = ItemType.SpruceDoor; - mappings[782] = ItemType.BirchDoor; - mappings[783] = ItemType.JungleDoor; - mappings[784] = ItemType.AcaciaDoor; - mappings[785] = ItemType.CherryDoor; - mappings[786] = ItemType.DarkOakDoor; - mappings[787] = ItemType.PaleOakDoor; - mappings[788] = ItemType.MangroveDoor; - mappings[789] = ItemType.BambooDoor; - mappings[790] = ItemType.CrimsonDoor; - mappings[791] = ItemType.WarpedDoor; - mappings[792] = ItemType.CopperDoor; - mappings[793] = ItemType.ExposedCopperDoor; - mappings[794] = ItemType.WeatheredCopperDoor; - mappings[795] = ItemType.OxidizedCopperDoor; - mappings[796] = ItemType.WaxedCopperDoor; - mappings[797] = ItemType.WaxedExposedCopperDoor; - mappings[798] = ItemType.WaxedWeatheredCopperDoor; - mappings[799] = ItemType.WaxedOxidizedCopperDoor; - mappings[800] = ItemType.IronTrapdoor; - mappings[801] = ItemType.OakTrapdoor; - mappings[802] = ItemType.SpruceTrapdoor; - mappings[803] = ItemType.BirchTrapdoor; - mappings[804] = ItemType.JungleTrapdoor; - mappings[805] = ItemType.AcaciaTrapdoor; - mappings[806] = ItemType.CherryTrapdoor; - mappings[807] = ItemType.DarkOakTrapdoor; - mappings[808] = ItemType.PaleOakTrapdoor; - mappings[809] = ItemType.MangroveTrapdoor; - mappings[810] = ItemType.BambooTrapdoor; - mappings[811] = ItemType.CrimsonTrapdoor; - mappings[812] = ItemType.WarpedTrapdoor; - mappings[813] = ItemType.CopperTrapdoor; - mappings[814] = ItemType.ExposedCopperTrapdoor; - mappings[815] = ItemType.WeatheredCopperTrapdoor; - mappings[816] = ItemType.OxidizedCopperTrapdoor; - mappings[817] = ItemType.WaxedCopperTrapdoor; - mappings[818] = ItemType.WaxedExposedCopperTrapdoor; - mappings[819] = ItemType.WaxedWeatheredCopperTrapdoor; - mappings[820] = ItemType.WaxedOxidizedCopperTrapdoor; - mappings[821] = ItemType.OakFenceGate; - mappings[822] = ItemType.SpruceFenceGate; - mappings[823] = ItemType.BirchFenceGate; - mappings[824] = ItemType.JungleFenceGate; - mappings[825] = ItemType.AcaciaFenceGate; - mappings[826] = ItemType.CherryFenceGate; - mappings[827] = ItemType.DarkOakFenceGate; - mappings[828] = ItemType.PaleOakFenceGate; - mappings[829] = ItemType.MangroveFenceGate; - mappings[830] = ItemType.BambooFenceGate; - mappings[831] = ItemType.CrimsonFenceGate; - mappings[832] = ItemType.WarpedFenceGate; - mappings[833] = ItemType.PoweredRail; - mappings[834] = ItemType.DetectorRail; - mappings[835] = ItemType.Rail; - mappings[836] = ItemType.ActivatorRail; - mappings[837] = ItemType.Saddle; - mappings[838] = ItemType.WhiteHarness; - mappings[839] = ItemType.OrangeHarness; - mappings[840] = ItemType.MagentaHarness; - mappings[841] = ItemType.LightBlueHarness; - mappings[842] = ItemType.YellowHarness; - mappings[843] = ItemType.LimeHarness; - mappings[844] = ItemType.PinkHarness; - mappings[845] = ItemType.GrayHarness; - mappings[846] = ItemType.LightGrayHarness; - mappings[847] = ItemType.CyanHarness; - mappings[848] = ItemType.PurpleHarness; - mappings[849] = ItemType.BlueHarness; - mappings[850] = ItemType.BrownHarness; - mappings[851] = ItemType.GreenHarness; - mappings[852] = ItemType.RedHarness; - mappings[853] = ItemType.BlackHarness; - mappings[854] = ItemType.Minecart; - mappings[855] = ItemType.ChestMinecart; - mappings[856] = ItemType.FurnaceMinecart; - mappings[857] = ItemType.TntMinecart; - mappings[858] = ItemType.HopperMinecart; - mappings[859] = ItemType.CarrotOnAStick; - mappings[860] = ItemType.WarpedFungusOnAStick; - mappings[861] = ItemType.PhantomMembrane; - mappings[862] = ItemType.Elytra; - mappings[863] = ItemType.OakBoat; - mappings[864] = ItemType.OakChestBoat; - mappings[865] = ItemType.SpruceBoat; - mappings[866] = ItemType.SpruceChestBoat; - mappings[867] = ItemType.BirchBoat; - mappings[868] = ItemType.BirchChestBoat; - mappings[869] = ItemType.JungleBoat; - mappings[870] = ItemType.JungleChestBoat; - mappings[871] = ItemType.AcaciaBoat; - mappings[872] = ItemType.AcaciaChestBoat; - mappings[873] = ItemType.CherryBoat; - mappings[874] = ItemType.CherryChestBoat; - mappings[875] = ItemType.DarkOakBoat; - mappings[876] = ItemType.DarkOakChestBoat; - mappings[877] = ItemType.PaleOakBoat; - mappings[878] = ItemType.PaleOakChestBoat; - mappings[879] = ItemType.MangroveBoat; - mappings[880] = ItemType.MangroveChestBoat; - mappings[881] = ItemType.BambooRaft; - mappings[882] = ItemType.BambooChestRaft; - mappings[883] = ItemType.StructureBlock; - mappings[884] = ItemType.Jigsaw; - mappings[885] = ItemType.TestBlock; - mappings[886] = ItemType.TestInstanceBlock; - mappings[887] = ItemType.TurtleHelmet; - mappings[888] = ItemType.TurtleScute; - mappings[889] = ItemType.ArmadilloScute; - mappings[890] = ItemType.WolfArmor; - mappings[891] = ItemType.FlintAndSteel; - mappings[892] = ItemType.Bowl; - mappings[893] = ItemType.Apple; - mappings[894] = ItemType.Bow; - mappings[895] = ItemType.Arrow; - mappings[896] = ItemType.Coal; - mappings[897] = ItemType.Charcoal; - mappings[898] = ItemType.Diamond; - mappings[899] = ItemType.Emerald; - mappings[900] = ItemType.LapisLazuli; - mappings[901] = ItemType.Quartz; - mappings[902] = ItemType.AmethystShard; - mappings[903] = ItemType.RawIron; - mappings[904] = ItemType.IronIngot; - mappings[905] = ItemType.RawCopper; - mappings[906] = ItemType.CopperIngot; - mappings[907] = ItemType.RawGold; - mappings[908] = ItemType.GoldIngot; - mappings[909] = ItemType.NetheriteIngot; - mappings[910] = ItemType.NetheriteScrap; - mappings[911] = ItemType.WoodenSword; - mappings[912] = ItemType.WoodenShovel; - mappings[913] = ItemType.WoodenPickaxe; - mappings[914] = ItemType.WoodenAxe; - mappings[915] = ItemType.WoodenHoe; - mappings[916] = ItemType.CopperSword; - mappings[917] = ItemType.CopperShovel; - mappings[918] = ItemType.CopperPickaxe; - mappings[919] = ItemType.CopperAxe; - mappings[920] = ItemType.CopperHoe; - mappings[921] = ItemType.StoneSword; - mappings[922] = ItemType.StoneShovel; - mappings[923] = ItemType.StonePickaxe; - mappings[924] = ItemType.StoneAxe; - mappings[925] = ItemType.StoneHoe; - mappings[926] = ItemType.GoldenSword; - mappings[927] = ItemType.GoldenShovel; - mappings[928] = ItemType.GoldenPickaxe; - mappings[929] = ItemType.GoldenAxe; - mappings[930] = ItemType.GoldenHoe; - mappings[931] = ItemType.IronSword; - mappings[932] = ItemType.IronShovel; - mappings[933] = ItemType.IronPickaxe; - mappings[934] = ItemType.IronAxe; - mappings[935] = ItemType.IronHoe; - mappings[936] = ItemType.DiamondSword; - mappings[937] = ItemType.DiamondShovel; - mappings[938] = ItemType.DiamondPickaxe; - mappings[939] = ItemType.DiamondAxe; - mappings[940] = ItemType.DiamondHoe; - mappings[941] = ItemType.NetheriteSword; - mappings[942] = ItemType.NetheriteShovel; - mappings[943] = ItemType.NetheritePickaxe; - mappings[944] = ItemType.NetheriteAxe; - mappings[945] = ItemType.NetheriteHoe; - mappings[946] = ItemType.Stick; - mappings[947] = ItemType.MushroomStew; - mappings[948] = ItemType.String; - mappings[949] = ItemType.Feather; - mappings[950] = ItemType.Gunpowder; - mappings[951] = ItemType.WheatSeeds; - mappings[952] = ItemType.Wheat; - mappings[953] = ItemType.Bread; - mappings[954] = ItemType.LeatherHelmet; - mappings[955] = ItemType.LeatherChestplate; - mappings[956] = ItemType.LeatherLeggings; - mappings[957] = ItemType.LeatherBoots; - mappings[958] = ItemType.CopperHelmet; - mappings[959] = ItemType.CopperChestplate; - mappings[960] = ItemType.CopperLeggings; - mappings[961] = ItemType.CopperBoots; - mappings[962] = ItemType.ChainmailHelmet; - mappings[963] = ItemType.ChainmailChestplate; - mappings[964] = ItemType.ChainmailLeggings; - mappings[965] = ItemType.ChainmailBoots; - mappings[966] = ItemType.IronHelmet; - mappings[967] = ItemType.IronChestplate; - mappings[968] = ItemType.IronLeggings; - mappings[969] = ItemType.IronBoots; - mappings[970] = ItemType.DiamondHelmet; - mappings[971] = ItemType.DiamondChestplate; - mappings[972] = ItemType.DiamondLeggings; - mappings[973] = ItemType.DiamondBoots; - mappings[974] = ItemType.GoldenHelmet; - mappings[975] = ItemType.GoldenChestplate; - mappings[976] = ItemType.GoldenLeggings; - mappings[977] = ItemType.GoldenBoots; - mappings[978] = ItemType.NetheriteHelmet; - mappings[979] = ItemType.NetheriteChestplate; - mappings[980] = ItemType.NetheriteLeggings; - mappings[981] = ItemType.NetheriteBoots; - mappings[982] = ItemType.Flint; - mappings[983] = ItemType.Porkchop; - mappings[984] = ItemType.CookedPorkchop; - mappings[985] = ItemType.Painting; - mappings[986] = ItemType.GoldenApple; - mappings[987] = ItemType.EnchantedGoldenApple; - mappings[988] = ItemType.OakSign; - mappings[989] = ItemType.SpruceSign; - mappings[990] = ItemType.BirchSign; - mappings[991] = ItemType.JungleSign; - mappings[992] = ItemType.AcaciaSign; - mappings[993] = ItemType.CherrySign; - mappings[994] = ItemType.DarkOakSign; - mappings[995] = ItemType.PaleOakSign; - mappings[996] = ItemType.MangroveSign; - mappings[997] = ItemType.BambooSign; - mappings[998] = ItemType.CrimsonSign; - mappings[999] = ItemType.WarpedSign; - mappings[1000] = ItemType.OakHangingSign; - mappings[1001] = ItemType.SpruceHangingSign; - mappings[1002] = ItemType.BirchHangingSign; - mappings[1003] = ItemType.JungleHangingSign; - mappings[1004] = ItemType.AcaciaHangingSign; - mappings[1005] = ItemType.CherryHangingSign; - mappings[1006] = ItemType.DarkOakHangingSign; - mappings[1007] = ItemType.PaleOakHangingSign; - mappings[1008] = ItemType.MangroveHangingSign; - mappings[1009] = ItemType.BambooHangingSign; - mappings[1010] = ItemType.CrimsonHangingSign; - mappings[1011] = ItemType.WarpedHangingSign; - mappings[1012] = ItemType.Bucket; - mappings[1013] = ItemType.WaterBucket; - mappings[1014] = ItemType.LavaBucket; - mappings[1015] = ItemType.PowderSnowBucket; - mappings[1016] = ItemType.Snowball; - mappings[1017] = ItemType.Leather; - mappings[1018] = ItemType.MilkBucket; - mappings[1019] = ItemType.PufferfishBucket; - mappings[1020] = ItemType.SalmonBucket; - mappings[1021] = ItemType.CodBucket; - mappings[1022] = ItemType.TropicalFishBucket; - mappings[1023] = ItemType.AxolotlBucket; - mappings[1024] = ItemType.TadpoleBucket; - mappings[1025] = ItemType.Brick; - mappings[1026] = ItemType.ClayBall; - mappings[1027] = ItemType.DriedKelpBlock; - mappings[1028] = ItemType.Paper; - mappings[1029] = ItemType.Book; - mappings[1030] = ItemType.SlimeBall; - mappings[1031] = ItemType.Egg; - mappings[1032] = ItemType.BlueEgg; - mappings[1033] = ItemType.BrownEgg; - mappings[1034] = ItemType.Compass; - mappings[1035] = ItemType.RecoveryCompass; - mappings[1036] = ItemType.Bundle; - mappings[1037] = ItemType.WhiteBundle; - mappings[1038] = ItemType.OrangeBundle; - mappings[1039] = ItemType.MagentaBundle; - mappings[1040] = ItemType.LightBlueBundle; - mappings[1041] = ItemType.YellowBundle; - mappings[1042] = ItemType.LimeBundle; - mappings[1043] = ItemType.PinkBundle; - mappings[1044] = ItemType.GrayBundle; - mappings[1045] = ItemType.LightGrayBundle; - mappings[1046] = ItemType.CyanBundle; - mappings[1047] = ItemType.PurpleBundle; - mappings[1048] = ItemType.BlueBundle; - mappings[1049] = ItemType.BrownBundle; - mappings[1050] = ItemType.GreenBundle; - mappings[1051] = ItemType.RedBundle; - mappings[1052] = ItemType.BlackBundle; - mappings[1053] = ItemType.FishingRod; - mappings[1054] = ItemType.Clock; - mappings[1055] = ItemType.Spyglass; - mappings[1056] = ItemType.GlowstoneDust; - mappings[1057] = ItemType.Cod; - mappings[1058] = ItemType.Salmon; - mappings[1059] = ItemType.TropicalFish; - mappings[1060] = ItemType.Pufferfish; - mappings[1061] = ItemType.CookedCod; - mappings[1062] = ItemType.CookedSalmon; - mappings[1063] = ItemType.InkSac; - mappings[1064] = ItemType.GlowInkSac; - mappings[1065] = ItemType.CocoaBeans; - mappings[1066] = ItemType.WhiteDye; - mappings[1067] = ItemType.OrangeDye; - mappings[1068] = ItemType.MagentaDye; - mappings[1069] = ItemType.LightBlueDye; - mappings[1070] = ItemType.YellowDye; - mappings[1071] = ItemType.LimeDye; - mappings[1072] = ItemType.PinkDye; - mappings[1073] = ItemType.GrayDye; - mappings[1074] = ItemType.LightGrayDye; - mappings[1075] = ItemType.CyanDye; - mappings[1076] = ItemType.PurpleDye; - mappings[1077] = ItemType.BlueDye; - mappings[1078] = ItemType.BrownDye; - mappings[1079] = ItemType.GreenDye; - mappings[1080] = ItemType.RedDye; - mappings[1081] = ItemType.BlackDye; - mappings[1082] = ItemType.BoneMeal; - mappings[1083] = ItemType.Bone; - mappings[1084] = ItemType.Sugar; - mappings[1085] = ItemType.Cake; - mappings[1086] = ItemType.WhiteBed; - mappings[1087] = ItemType.OrangeBed; - mappings[1088] = ItemType.MagentaBed; - mappings[1089] = ItemType.LightBlueBed; - mappings[1090] = ItemType.YellowBed; - mappings[1091] = ItemType.LimeBed; - mappings[1092] = ItemType.PinkBed; - mappings[1093] = ItemType.GrayBed; - mappings[1094] = ItemType.LightGrayBed; - mappings[1095] = ItemType.CyanBed; - mappings[1096] = ItemType.PurpleBed; - mappings[1097] = ItemType.BlueBed; - mappings[1098] = ItemType.BrownBed; - mappings[1099] = ItemType.GreenBed; - mappings[1100] = ItemType.RedBed; - mappings[1101] = ItemType.BlackBed; - mappings[1102] = ItemType.Cookie; - mappings[1103] = ItemType.Crafter; - mappings[1104] = ItemType.FilledMap; - mappings[1105] = ItemType.Shears; - mappings[1106] = ItemType.MelonSlice; - mappings[1107] = ItemType.DriedKelp; - mappings[1108] = ItemType.PumpkinSeeds; - mappings[1109] = ItemType.MelonSeeds; - mappings[1110] = ItemType.Beef; - mappings[1111] = ItemType.CookedBeef; - mappings[1112] = ItemType.Chicken; - mappings[1113] = ItemType.CookedChicken; - mappings[1114] = ItemType.RottenFlesh; - mappings[1115] = ItemType.EnderPearl; - mappings[1116] = ItemType.BlazeRod; - mappings[1117] = ItemType.GhastTear; - mappings[1118] = ItemType.GoldNugget; - mappings[1119] = ItemType.NetherWart; - mappings[1120] = ItemType.GlassBottle; - mappings[1121] = ItemType.Potion; - mappings[1122] = ItemType.SpiderEye; - mappings[1123] = ItemType.FermentedSpiderEye; - mappings[1124] = ItemType.BlazePowder; - mappings[1125] = ItemType.MagmaCream; - mappings[1126] = ItemType.BrewingStand; - mappings[1127] = ItemType.Cauldron; - mappings[1128] = ItemType.EnderEye; - mappings[1129] = ItemType.GlisteringMelonSlice; - mappings[1130] = ItemType.ArmadilloSpawnEgg; - mappings[1131] = ItemType.AllaySpawnEgg; - mappings[1132] = ItemType.AxolotlSpawnEgg; - mappings[1133] = ItemType.BatSpawnEgg; - mappings[1134] = ItemType.BeeSpawnEgg; - mappings[1135] = ItemType.BlazeSpawnEgg; - mappings[1136] = ItemType.BoggedSpawnEgg; - mappings[1137] = ItemType.BreezeSpawnEgg; - mappings[1138] = ItemType.CatSpawnEgg; - mappings[1139] = ItemType.CamelSpawnEgg; - mappings[1140] = ItemType.CaveSpiderSpawnEgg; - mappings[1141] = ItemType.ChickenSpawnEgg; - mappings[1142] = ItemType.CodSpawnEgg; - mappings[1143] = ItemType.CopperGolemSpawnEgg; - mappings[1144] = ItemType.CowSpawnEgg; - mappings[1145] = ItemType.CreeperSpawnEgg; - mappings[1146] = ItemType.DolphinSpawnEgg; - mappings[1147] = ItemType.DonkeySpawnEgg; - mappings[1148] = ItemType.DrownedSpawnEgg; - mappings[1149] = ItemType.ElderGuardianSpawnEgg; - mappings[1150] = ItemType.EnderDragonSpawnEgg; - mappings[1151] = ItemType.EndermanSpawnEgg; - mappings[1152] = ItemType.EndermiteSpawnEgg; - mappings[1153] = ItemType.EvokerSpawnEgg; - mappings[1154] = ItemType.FoxSpawnEgg; - mappings[1155] = ItemType.FrogSpawnEgg; - mappings[1156] = ItemType.GhastSpawnEgg; - mappings[1157] = ItemType.HappyGhastSpawnEgg; - mappings[1158] = ItemType.GlowSquidSpawnEgg; - mappings[1159] = ItemType.GoatSpawnEgg; - mappings[1160] = ItemType.GuardianSpawnEgg; - mappings[1161] = ItemType.HoglinSpawnEgg; - mappings[1162] = ItemType.HorseSpawnEgg; - mappings[1163] = ItemType.HuskSpawnEgg; - mappings[1164] = ItemType.IronGolemSpawnEgg; - mappings[1165] = ItemType.LlamaSpawnEgg; - mappings[1166] = ItemType.MagmaCubeSpawnEgg; - mappings[1167] = ItemType.MooshroomSpawnEgg; - mappings[1168] = ItemType.MuleSpawnEgg; - mappings[1169] = ItemType.OcelotSpawnEgg; - mappings[1170] = ItemType.PandaSpawnEgg; - mappings[1171] = ItemType.ParrotSpawnEgg; - mappings[1172] = ItemType.PhantomSpawnEgg; - mappings[1173] = ItemType.PigSpawnEgg; - mappings[1174] = ItemType.PiglinSpawnEgg; - mappings[1175] = ItemType.PiglinBruteSpawnEgg; - mappings[1176] = ItemType.PillagerSpawnEgg; - mappings[1177] = ItemType.PolarBearSpawnEgg; - mappings[1178] = ItemType.PufferfishSpawnEgg; - mappings[1179] = ItemType.RabbitSpawnEgg; - mappings[1180] = ItemType.RavagerSpawnEgg; - mappings[1181] = ItemType.SalmonSpawnEgg; - mappings[1182] = ItemType.SheepSpawnEgg; - mappings[1183] = ItemType.ShulkerSpawnEgg; - mappings[1184] = ItemType.SilverfishSpawnEgg; - mappings[1185] = ItemType.SkeletonSpawnEgg; - mappings[1186] = ItemType.SkeletonHorseSpawnEgg; - mappings[1187] = ItemType.SlimeSpawnEgg; - mappings[1188] = ItemType.SnifferSpawnEgg; - mappings[1189] = ItemType.SnowGolemSpawnEgg; - mappings[1190] = ItemType.SpiderSpawnEgg; - mappings[1191] = ItemType.SquidSpawnEgg; - mappings[1192] = ItemType.StraySpawnEgg; - mappings[1193] = ItemType.StriderSpawnEgg; - mappings[1194] = ItemType.TadpoleSpawnEgg; - mappings[1195] = ItemType.TraderLlamaSpawnEgg; - mappings[1196] = ItemType.TropicalFishSpawnEgg; - mappings[1197] = ItemType.TurtleSpawnEgg; - mappings[1198] = ItemType.VexSpawnEgg; - mappings[1199] = ItemType.VillagerSpawnEgg; - mappings[1200] = ItemType.VindicatorSpawnEgg; - mappings[1201] = ItemType.WanderingTraderSpawnEgg; - mappings[1202] = ItemType.WardenSpawnEgg; - mappings[1203] = ItemType.WitchSpawnEgg; - mappings[1204] = ItemType.WitherSpawnEgg; - mappings[1205] = ItemType.WitherSkeletonSpawnEgg; - mappings[1206] = ItemType.WolfSpawnEgg; - mappings[1207] = ItemType.ZoglinSpawnEgg; - mappings[1208] = ItemType.CreakingSpawnEgg; - mappings[1209] = ItemType.ZombieSpawnEgg; - mappings[1210] = ItemType.ZombieHorseSpawnEgg; - mappings[1211] = ItemType.ZombieVillagerSpawnEgg; - mappings[1212] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[1213] = ItemType.ExperienceBottle; - mappings[1214] = ItemType.FireCharge; - mappings[1215] = ItemType.WindCharge; - mappings[1216] = ItemType.WritableBook; - mappings[1217] = ItemType.WrittenBook; - mappings[1218] = ItemType.BreezeRod; - mappings[1219] = ItemType.Mace; - mappings[1220] = ItemType.ItemFrame; - mappings[1221] = ItemType.GlowItemFrame; - mappings[1222] = ItemType.FlowerPot; - mappings[1223] = ItemType.Carrot; - mappings[1224] = ItemType.Potato; - mappings[1225] = ItemType.BakedPotato; - mappings[1226] = ItemType.PoisonousPotato; - mappings[1227] = ItemType.Map; - mappings[1228] = ItemType.GoldenCarrot; - mappings[1229] = ItemType.SkeletonSkull; - mappings[1230] = ItemType.WitherSkeletonSkull; - mappings[1231] = ItemType.PlayerHead; - mappings[1232] = ItemType.ZombieHead; - mappings[1233] = ItemType.CreeperHead; - mappings[1234] = ItemType.DragonHead; - mappings[1235] = ItemType.PiglinHead; - mappings[1236] = ItemType.NetherStar; - mappings[1237] = ItemType.PumpkinPie; - mappings[1238] = ItemType.FireworkRocket; - mappings[1239] = ItemType.FireworkStar; - mappings[1240] = ItemType.EnchantedBook; - mappings[1241] = ItemType.NetherBrick; - mappings[1242] = ItemType.ResinBrick; - mappings[1243] = ItemType.PrismarineShard; - mappings[1244] = ItemType.PrismarineCrystals; - mappings[1245] = ItemType.Rabbit; - mappings[1246] = ItemType.CookedRabbit; - mappings[1247] = ItemType.RabbitStew; - mappings[1248] = ItemType.RabbitFoot; - mappings[1249] = ItemType.RabbitHide; - mappings[1250] = ItemType.ArmorStand; - mappings[1251] = ItemType.CopperHorseArmor; - mappings[1252] = ItemType.IronHorseArmor; - mappings[1253] = ItemType.GoldenHorseArmor; - mappings[1254] = ItemType.DiamondHorseArmor; - mappings[1255] = ItemType.LeatherHorseArmor; - mappings[1256] = ItemType.Lead; - mappings[1257] = ItemType.NameTag; - mappings[1258] = ItemType.CommandBlockMinecart; - mappings[1259] = ItemType.Mutton; - mappings[1260] = ItemType.CookedMutton; - mappings[1261] = ItemType.WhiteBanner; - mappings[1262] = ItemType.OrangeBanner; - mappings[1263] = ItemType.MagentaBanner; - mappings[1264] = ItemType.LightBlueBanner; - mappings[1265] = ItemType.YellowBanner; - mappings[1266] = ItemType.LimeBanner; - mappings[1267] = ItemType.PinkBanner; - mappings[1268] = ItemType.GrayBanner; - mappings[1269] = ItemType.LightGrayBanner; - mappings[1270] = ItemType.CyanBanner; - mappings[1271] = ItemType.PurpleBanner; - mappings[1272] = ItemType.BlueBanner; - mappings[1273] = ItemType.BrownBanner; - mappings[1274] = ItemType.GreenBanner; - mappings[1275] = ItemType.RedBanner; - mappings[1276] = ItemType.BlackBanner; - mappings[1277] = ItemType.EndCrystal; - mappings[1278] = ItemType.ChorusFruit; - mappings[1279] = ItemType.PoppedChorusFruit; - mappings[1280] = ItemType.TorchflowerSeeds; - mappings[1281] = ItemType.PitcherPod; - mappings[1282] = ItemType.Beetroot; - mappings[1283] = ItemType.BeetrootSeeds; - mappings[1284] = ItemType.BeetrootSoup; - mappings[1285] = ItemType.DragonBreath; - mappings[1286] = ItemType.SplashPotion; - mappings[1287] = ItemType.SpectralArrow; - mappings[1288] = ItemType.TippedArrow; - mappings[1289] = ItemType.LingeringPotion; - mappings[1290] = ItemType.Shield; - mappings[1291] = ItemType.TotemOfUndying; - mappings[1292] = ItemType.ShulkerShell; - mappings[1293] = ItemType.IronNugget; - mappings[1294] = ItemType.CopperNugget; - mappings[1295] = ItemType.KnowledgeBook; - mappings[1296] = ItemType.DebugStick; - mappings[1297] = ItemType.MusicDisc13; - mappings[1298] = ItemType.MusicDiscCat; - mappings[1299] = ItemType.MusicDiscBlocks; - mappings[1300] = ItemType.MusicDiscChirp; - mappings[1301] = ItemType.MusicDiscCreator; - mappings[1302] = ItemType.MusicDiscCreatorMusicBox; - mappings[1303] = ItemType.MusicDiscFar; - mappings[1304] = ItemType.MusicDiscLavaChicken; - mappings[1305] = ItemType.MusicDiscMall; - mappings[1306] = ItemType.MusicDiscMellohi; - mappings[1307] = ItemType.MusicDiscStal; - mappings[1308] = ItemType.MusicDiscStrad; - mappings[1309] = ItemType.MusicDiscWard; - mappings[1310] = ItemType.MusicDisc11; - mappings[1311] = ItemType.MusicDiscWait; - mappings[1312] = ItemType.MusicDiscOtherside; - mappings[1313] = ItemType.MusicDiscRelic; - mappings[1314] = ItemType.MusicDisc5; - mappings[1315] = ItemType.MusicDiscPigstep; - mappings[1316] = ItemType.MusicDiscPrecipice; - mappings[1317] = ItemType.MusicDiscTears; - mappings[1318] = ItemType.DiscFragment5; - mappings[1319] = ItemType.Trident; - mappings[1320] = ItemType.NautilusShell; - mappings[1321] = ItemType.HeartOfTheSea; - mappings[1322] = ItemType.Crossbow; - mappings[1323] = ItemType.SuspiciousStew; - mappings[1324] = ItemType.Loom; - mappings[1325] = ItemType.FlowerBannerPattern; - mappings[1326] = ItemType.CreeperBannerPattern; - mappings[1327] = ItemType.SkullBannerPattern; - mappings[1328] = ItemType.MojangBannerPattern; - mappings[1329] = ItemType.GlobeBannerPattern; - mappings[1330] = ItemType.PiglinBannerPattern; - mappings[1331] = ItemType.FlowBannerPattern; - mappings[1332] = ItemType.GusterBannerPattern; - mappings[1333] = ItemType.FieldMasonedBannerPattern; - mappings[1334] = ItemType.BordureIndentedBannerPattern; - mappings[1335] = ItemType.GoatHorn; - mappings[1336] = ItemType.Composter; - mappings[1337] = ItemType.Barrel; - mappings[1338] = ItemType.Smoker; - mappings[1339] = ItemType.BlastFurnace; - mappings[1340] = ItemType.CartographyTable; - mappings[1341] = ItemType.FletchingTable; - mappings[1342] = ItemType.Grindstone; - mappings[1343] = ItemType.SmithingTable; - mappings[1344] = ItemType.Stonecutter; - mappings[1345] = ItemType.Bell; - mappings[1346] = ItemType.Lantern; - mappings[1347] = ItemType.SoulLantern; - mappings[1348] = ItemType.CopperLantern; - mappings[1349] = ItemType.ExposedCopperLantern; - mappings[1350] = ItemType.WeatheredCopperLantern; - mappings[1351] = ItemType.OxidizedCopperLantern; - mappings[1352] = ItemType.WaxedCopperLantern; - mappings[1353] = ItemType.WaxedExposedCopperLantern; - mappings[1354] = ItemType.WaxedWeatheredCopperLantern; - mappings[1355] = ItemType.WaxedOxidizedCopperLantern; - mappings[1356] = ItemType.SweetBerries; - mappings[1357] = ItemType.GlowBerries; - mappings[1358] = ItemType.Campfire; - mappings[1359] = ItemType.SoulCampfire; - mappings[1360] = ItemType.Shroomlight; - mappings[1361] = ItemType.Honeycomb; - mappings[1362] = ItemType.BeeNest; - mappings[1363] = ItemType.Beehive; - mappings[1364] = ItemType.HoneyBottle; - mappings[1365] = ItemType.HoneycombBlock; - mappings[1366] = ItemType.Lodestone; - mappings[1367] = ItemType.CryingObsidian; - mappings[1368] = ItemType.Blackstone; - mappings[1369] = ItemType.BlackstoneSlab; - mappings[1370] = ItemType.BlackstoneStairs; - mappings[1371] = ItemType.GildedBlackstone; - mappings[1372] = ItemType.PolishedBlackstone; - mappings[1373] = ItemType.PolishedBlackstoneSlab; - mappings[1374] = ItemType.PolishedBlackstoneStairs; - mappings[1375] = ItemType.ChiseledPolishedBlackstone; - mappings[1376] = ItemType.PolishedBlackstoneBricks; - mappings[1377] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1378] = ItemType.PolishedBlackstoneBrickStairs; - mappings[1379] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[1380] = ItemType.RespawnAnchor; - mappings[1381] = ItemType.Candle; - mappings[1382] = ItemType.WhiteCandle; - mappings[1383] = ItemType.OrangeCandle; - mappings[1384] = ItemType.MagentaCandle; - mappings[1385] = ItemType.LightBlueCandle; - mappings[1386] = ItemType.YellowCandle; - mappings[1387] = ItemType.LimeCandle; - mappings[1388] = ItemType.PinkCandle; - mappings[1389] = ItemType.GrayCandle; - mappings[1390] = ItemType.LightGrayCandle; - mappings[1391] = ItemType.CyanCandle; - mappings[1392] = ItemType.PurpleCandle; - mappings[1393] = ItemType.BlueCandle; - mappings[1394] = ItemType.BrownCandle; - mappings[1395] = ItemType.GreenCandle; - mappings[1396] = ItemType.RedCandle; - mappings[1397] = ItemType.BlackCandle; - mappings[1398] = ItemType.SmallAmethystBud; - mappings[1399] = ItemType.MediumAmethystBud; - mappings[1400] = ItemType.LargeAmethystBud; - mappings[1401] = ItemType.AmethystCluster; - mappings[1402] = ItemType.PointedDripstone; - mappings[1403] = ItemType.OchreFroglight; - mappings[1404] = ItemType.VerdantFroglight; - mappings[1405] = ItemType.PearlescentFroglight; - mappings[1406] = ItemType.Frogspawn; - mappings[1407] = ItemType.EchoShard; - mappings[1408] = ItemType.Brush; - mappings[1409] = ItemType.NetheriteUpgradeSmithingTemplate; - mappings[1410] = ItemType.SentryArmorTrimSmithingTemplate; - mappings[1411] = ItemType.DuneArmorTrimSmithingTemplate; - mappings[1412] = ItemType.CoastArmorTrimSmithingTemplate; - mappings[1413] = ItemType.WildArmorTrimSmithingTemplate; - mappings[1414] = ItemType.WardArmorTrimSmithingTemplate; - mappings[1415] = ItemType.EyeArmorTrimSmithingTemplate; - mappings[1416] = ItemType.VexArmorTrimSmithingTemplate; - mappings[1417] = ItemType.TideArmorTrimSmithingTemplate; - mappings[1418] = ItemType.SnoutArmorTrimSmithingTemplate; - mappings[1419] = ItemType.RibArmorTrimSmithingTemplate; - mappings[1420] = ItemType.SpireArmorTrimSmithingTemplate; - mappings[1421] = ItemType.WayfinderArmorTrimSmithingTemplate; - mappings[1422] = ItemType.ShaperArmorTrimSmithingTemplate; - mappings[1423] = ItemType.SilenceArmorTrimSmithingTemplate; - mappings[1424] = ItemType.RaiserArmorTrimSmithingTemplate; - mappings[1425] = ItemType.HostArmorTrimSmithingTemplate; - mappings[1426] = ItemType.FlowArmorTrimSmithingTemplate; - mappings[1427] = ItemType.BoltArmorTrimSmithingTemplate; - mappings[1428] = ItemType.AnglerPotterySherd; - mappings[1429] = ItemType.ArcherPotterySherd; - mappings[1430] = ItemType.ArmsUpPotterySherd; - mappings[1431] = ItemType.BladePotterySherd; - mappings[1432] = ItemType.BrewerPotterySherd; - mappings[1433] = ItemType.BurnPotterySherd; - mappings[1434] = ItemType.DangerPotterySherd; - mappings[1435] = ItemType.ExplorerPotterySherd; - mappings[1436] = ItemType.FlowPotterySherd; - mappings[1437] = ItemType.FriendPotterySherd; - mappings[1438] = ItemType.GusterPotterySherd; - mappings[1439] = ItemType.HeartPotterySherd; - mappings[1440] = ItemType.HeartbreakPotterySherd; - mappings[1441] = ItemType.HowlPotterySherd; - mappings[1442] = ItemType.MinerPotterySherd; - mappings[1443] = ItemType.MournerPotterySherd; - mappings[1444] = ItemType.PlentyPotterySherd; - mappings[1445] = ItemType.PrizePotterySherd; - mappings[1446] = ItemType.ScrapePotterySherd; - mappings[1447] = ItemType.SheafPotterySherd; - mappings[1448] = ItemType.ShelterPotterySherd; - mappings[1449] = ItemType.SkullPotterySherd; - mappings[1450] = ItemType.SnortPotterySherd; - mappings[1451] = ItemType.CopperGrate; - mappings[1452] = ItemType.ExposedCopperGrate; - mappings[1453] = ItemType.WeatheredCopperGrate; - mappings[1454] = ItemType.OxidizedCopperGrate; - mappings[1455] = ItemType.WaxedCopperGrate; - mappings[1456] = ItemType.WaxedExposedCopperGrate; - mappings[1457] = ItemType.WaxedWeatheredCopperGrate; - mappings[1458] = ItemType.WaxedOxidizedCopperGrate; - mappings[1459] = ItemType.CopperBulb; - mappings[1460] = ItemType.ExposedCopperBulb; - mappings[1461] = ItemType.WeatheredCopperBulb; - mappings[1462] = ItemType.OxidizedCopperBulb; - mappings[1463] = ItemType.WaxedCopperBulb; - mappings[1464] = ItemType.WaxedExposedCopperBulb; - mappings[1465] = ItemType.WaxedWeatheredCopperBulb; - mappings[1466] = ItemType.WaxedOxidizedCopperBulb; - mappings[1467] = ItemType.CopperChest; - mappings[1468] = ItemType.ExposedCopperChest; - mappings[1469] = ItemType.WeatheredCopperChest; - mappings[1470] = ItemType.OxidizedCopperChest; - mappings[1471] = ItemType.WaxedCopperChest; - mappings[1472] = ItemType.WaxedExposedCopperChest; - mappings[1473] = ItemType.WaxedWeatheredCopperChest; - mappings[1474] = ItemType.WaxedOxidizedCopperChest; - mappings[1475] = ItemType.CopperGolemStatue; - mappings[1476] = ItemType.ExposedCopperGolemStatue; - mappings[1477] = ItemType.WeatheredCopperGolemStatue; - mappings[1478] = ItemType.OxidizedCopperGolemStatue; - mappings[1479] = ItemType.WaxedCopperGolemStatue; - mappings[1480] = ItemType.WaxedExposedCopperGolemStatue; - mappings[1481] = ItemType.WaxedWeatheredCopperGolemStatue; - mappings[1482] = ItemType.WaxedOxidizedCopperGolemStatue; - mappings[1483] = ItemType.TrialSpawner; - mappings[1484] = ItemType.TrialKey; - mappings[1485] = ItemType.OminousTrialKey; - mappings[1486] = ItemType.Vault; - mappings[1487] = ItemType.OminousBottle; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette18.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette18.cs deleted file mode 100644 index 57f942d9f9..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette18.cs +++ /dev/null @@ -1,640 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - /// - /// For MC 1.8 - /// Done manually by Milutinke :( - /// - public class ItemPalette18 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette18() - { - // Mapping IDs are a derived from: (Item ID << 16) | Data - mappings[0] = ItemType.Air; - mappings[65536] = ItemType.Stone; - mappings[65537] = ItemType.Granite; - mappings[65538] = ItemType.PolishedGranite; - mappings[65539] = ItemType.Diorite; - mappings[65540] = ItemType.PolishedDiorite; - mappings[65541] = ItemType.Andesite; - mappings[65542] = ItemType.PolishedAndesite; - mappings[131072] = ItemType.GrassBlock; - mappings[196608] = ItemType.Dirt; - mappings[196609] = ItemType.CoarseDirt; - mappings[196610] = ItemType.Podzol; - mappings[262144] = ItemType.Cobblestone; - mappings[327680] = ItemType.OakPlanks; - mappings[327681] = ItemType.SprucePlanks; - mappings[327682] = ItemType.BirchPlanks; - mappings[327683] = ItemType.JunglePlanks; - mappings[327684] = ItemType.AcaciaPlanks; - mappings[327685] = ItemType.DarkOakPlanks; - mappings[393216] = ItemType.OakSapling; - mappings[393217] = ItemType.SpruceSapling; - mappings[393218] = ItemType.BirchSapling; - mappings[393219] = ItemType.JungleSapling; - mappings[393220] = ItemType.AcaciaSapling; - mappings[393221] = ItemType.DarkOakSapling; - mappings[458752] = ItemType.Bedrock; - mappings[524288] = ItemType.WaterBucket; // Still Water Block Item - mappings[589824] = ItemType.WaterBucket; // Flowing Water Block Item - mappings[655360] = ItemType.LavaBucket; // Still Lava Block Item - mappings[720896] = ItemType.LavaBucket; // Flowing Lava Block Item - mappings[786432] = ItemType.Sand; - mappings[786433] = ItemType.RedSand; - mappings[851968] = ItemType.Gravel; - mappings[917504] = ItemType.GoldOre; - mappings[983040] = ItemType.IronOre; - mappings[1048576] = ItemType.CoalOre; - mappings[1114112] = ItemType.OakLog; - mappings[1114113] = ItemType.SpruceLog; - mappings[1114114] = ItemType.BirchLog; - mappings[1114115] = ItemType.JungleLog; - mappings[1179648] = ItemType.OakLeaves; - mappings[1179649] = ItemType.SpruceLeaves; - mappings[1179650] = ItemType.BirchLeaves; - mappings[1179651] = ItemType.JungleLeaves; - mappings[1245184] = ItemType.Sponge; - mappings[1245185] = ItemType.WetSponge; - mappings[1310720] = ItemType.Glass; - mappings[1376256] = ItemType.LapisOre; - mappings[1441792] = ItemType.LapisBlock; - mappings[1507328] = ItemType.Dispenser; - mappings[1572864] = ItemType.Sandstone; - mappings[1572865] = ItemType.ChiseledSandstone; - mappings[1572866] = ItemType.SmoothSandstone; - mappings[1638400] = ItemType.NoteBlock; - mappings[1769472] = ItemType.PoweredRail; - mappings[1835008] = ItemType.DetectorRail; - mappings[1900544] = ItemType.StickyPiston; - mappings[2031617] = ItemType.ShortGrass; - mappings[2031618] = ItemType.Fern; - mappings[2097152] = ItemType.DeadBush; - mappings[2162688] = ItemType.Piston; - mappings[2490368] = ItemType.Poppy; - mappings[2490369] = ItemType.BlueOrchid; - mappings[2490370] = ItemType.Allium; - mappings[2490371] = ItemType.AzureBluet; - mappings[2490372] = ItemType.RedTulip; - mappings[2490373] = ItemType.OrangeTulip; - mappings[2490374] = ItemType.WhiteTulip; - mappings[2490375] = ItemType.PinkTulip; - mappings[2490376] = ItemType.OxeyeDaisy; - mappings[2555904] = ItemType.BrownMushroom; - mappings[2621440] = ItemType.RedMushroom; - mappings[2686976] = ItemType.GoldBlock; - mappings[2752512] = ItemType.IronBlock; - mappings[2883584] = ItemType.StoneSlab; - mappings[2883585] = ItemType.SandstoneSlab; - mappings[2883587] = ItemType.CobblestoneSlab; - mappings[2883588] = ItemType.BrickSlab; - mappings[2883589] = ItemType.StoneBrickSlab; - mappings[2883590] = ItemType.NetherBrickSlab; - mappings[2883591] = ItemType.QuartzSlab; - mappings[2949120] = ItemType.Bricks; - mappings[3014656] = ItemType.Tnt; - mappings[3080192] = ItemType.Bookshelf; - mappings[3145728] = ItemType.MossyCobblestone; - mappings[3211264] = ItemType.Obsidian; - mappings[3276800] = ItemType.Torch; - mappings[3407872] = ItemType.Spawner; - mappings[3473408] = ItemType.OakStairs; - mappings[3538944] = ItemType.Chest; - mappings[3670016] = ItemType.DiamondOre; - mappings[3735552] = ItemType.DiamondBlock; - mappings[3801088] = ItemType.CraftingTable; - mappings[3932160] = ItemType.Farmland; - mappings[3997696] = ItemType.Furnace; - mappings[4259840] = ItemType.Ladder; - mappings[4325376] = ItemType.Rail; - mappings[4390912] = ItemType.CobblestoneStairs; - mappings[4521984] = ItemType.Lever; - mappings[4587520] = ItemType.StonePressurePlate; - mappings[4784128] = ItemType.RedstoneOre; - mappings[4980736] = ItemType.RedstoneTorch; - mappings[5046272] = ItemType.StoneButton; - mappings[5111808] = ItemType.Snow; - mappings[5177344] = ItemType.Ice; - mappings[5242880] = ItemType.SnowBlock; - mappings[5308416] = ItemType.Cactus; - mappings[5373952] = ItemType.Clay; - mappings[5505024] = ItemType.Jukebox; - mappings[5570560] = ItemType.OakFence; - mappings[5636096] = ItemType.Pumpkin; - mappings[5701632] = ItemType.Netherrack; - mappings[5767168] = ItemType.SoulSand; - mappings[5832704] = ItemType.Glowstone; - mappings[5963776] = ItemType.JackOLantern; - mappings[6225920] = ItemType.WhiteStainedGlass; - mappings[6225921] = ItemType.OrangeStainedGlass; - mappings[6225922] = ItemType.MagentaStainedGlass; - mappings[6225923] = ItemType.LightBlueStainedGlass; - mappings[6225924] = ItemType.YellowStainedGlass; - mappings[6225925] = ItemType.LimeStainedGlass; - mappings[6225926] = ItemType.PinkStainedGlass; - mappings[6225927] = ItemType.GrayStainedGlass; - mappings[6225928] = ItemType.LightGrayStainedGlass; - mappings[6225929] = ItemType.CyanStainedGlass; - mappings[6225930] = ItemType.PurpleStainedGlass; - mappings[6225931] = ItemType.BlueStainedGlass; - mappings[6225932] = ItemType.BrownStainedGlass; - mappings[6225933] = ItemType.GreenStainedGlass; - mappings[6225934] = ItemType.RedStainedGlass; - mappings[6225935] = ItemType.BlackStainedGlass; - mappings[6291456] = ItemType.OakTrapdoor; - mappings[6356992] = ItemType.InfestedStone; - mappings[6356993] = ItemType.InfestedCobblestone; - mappings[6356994] = ItemType.InfestedStoneBricks; - mappings[6356995] = ItemType.InfestedMossyStoneBricks; - mappings[6356996] = ItemType.InfestedCrackedStoneBricks; - mappings[6356997] = ItemType.InfestedChiseledStoneBricks; - mappings[6422528] = ItemType.StoneBricks; - mappings[6422529] = ItemType.MossyStoneBricks; - mappings[6422530] = ItemType.CrackedStoneBricks; - mappings[6422531] = ItemType.ChiseledStoneBricks; - mappings[6488064] = ItemType.BrownMushroomBlock; - mappings[6553600] = ItemType.RedMushroomBlock; - mappings[6619136] = ItemType.IronBars; - mappings[6684672] = ItemType.GlassPane; - mappings[6750208] = ItemType.Melon; - mappings[6946816] = ItemType.Vine; - mappings[7012352] = ItemType.OakFenceGate; - mappings[7077888] = ItemType.BrickStairs; - mappings[7143424] = ItemType.StoneBrickStairs; - mappings[7208960] = ItemType.Mycelium; - mappings[7340032] = ItemType.NetherBricks; - mappings[7405568] = ItemType.NetherBrickFence; - mappings[7471104] = ItemType.NetherBrickStairs; - mappings[7602176] = ItemType.EnchantingTable; - mappings[7864320] = ItemType.EndPortalFrame; - mappings[7929856] = ItemType.EndStone; - mappings[7995392] = ItemType.DragonEgg; - mappings[8060928] = ItemType.RedstoneLamp; - mappings[8388608] = ItemType.SandstoneStairs; - mappings[8454144] = ItemType.EmeraldOre; - mappings[8519680] = ItemType.EnderChest; - mappings[8585216] = ItemType.TripwireHook; - mappings[8716288] = ItemType.EmeraldBlock; - mappings[8781824] = ItemType.SpruceStairs; - mappings[8847360] = ItemType.BirchStairs; - mappings[8912896] = ItemType.JungleStairs; - mappings[8978432] = ItemType.CommandBlock; - mappings[9043968] = ItemType.Beacon; - mappings[9109504] = ItemType.CobblestoneWall; - mappings[9109505] = ItemType.MossyCobblestoneWall; - mappings[9502720] = ItemType.Anvil; - mappings[9502721] = ItemType.ChippedAnvil; - mappings[9502722] = ItemType.DamagedAnvil; - mappings[9568256] = ItemType.TrappedChest; - mappings[9633792] = ItemType.LightWeightedPressurePlate; - mappings[9699328] = ItemType.HeavyWeightedPressurePlate; - mappings[9895936] = ItemType.DaylightDetector; - mappings[9961472] = ItemType.RedstoneBlock; - mappings[10027008] = ItemType.NetherQuartzOre; - mappings[10092544] = ItemType.Hopper; - mappings[10158080] = ItemType.QuartzBlock; - mappings[10158081] = ItemType.ChiseledQuartzBlock; - mappings[10158082] = ItemType.QuartzPillar; - mappings[10223616] = ItemType.QuartzStairs; - mappings[10289152] = ItemType.ActivatorRail; - mappings[10354688] = ItemType.Dropper; - mappings[10420224] = ItemType.WhiteTerracotta; - mappings[10420225] = ItemType.OrangeTerracotta; - mappings[10420226] = ItemType.MagentaTerracotta; - mappings[10420227] = ItemType.LightBlueTerracotta; - mappings[10420228] = ItemType.YellowTerracotta; - mappings[10420229] = ItemType.LimeTerracotta; - mappings[10420230] = ItemType.PinkTerracotta; - mappings[10420231] = ItemType.GrayTerracotta; - mappings[10420232] = ItemType.LightGrayTerracotta; - mappings[10420233] = ItemType.CyanTerracotta; - mappings[10420234] = ItemType.PurpleTerracotta; - mappings[10420235] = ItemType.BlueTerracotta; - mappings[10420236] = ItemType.BrownTerracotta; - mappings[10420237] = ItemType.GreenTerracotta; - mappings[10420238] = ItemType.RedTerracotta; - mappings[10420239] = ItemType.BlackTerracotta; - mappings[10485760] = ItemType.WhiteStainedGlassPane; - mappings[10485761] = ItemType.OrangeStainedGlassPane; - mappings[10485762] = ItemType.MagentaStainedGlassPane; - mappings[10485763] = ItemType.LightBlueStainedGlassPane; - mappings[10485764] = ItemType.YellowStainedGlassPane; - mappings[10485765] = ItemType.LimeStainedGlassPane; - mappings[10485766] = ItemType.PinkStainedGlassPane; - mappings[10485767] = ItemType.GrayStainedGlassPane; - mappings[10485768] = ItemType.LightGrayStainedGlassPane; - mappings[10485769] = ItemType.CyanStainedGlassPane; - mappings[10485770] = ItemType.PurpleStainedGlassPane; - mappings[10485771] = ItemType.BlueStainedGlassPane; - mappings[10485772] = ItemType.BrownStainedGlassPane; - mappings[10485773] = ItemType.GreenStainedGlassPane; - mappings[10485774] = ItemType.RedStainedGlassPane; - mappings[10485775] = ItemType.BlackStainedGlassPane; - mappings[10616832] = ItemType.AcaciaLog; - mappings[10616833] = ItemType.DarkOakLog; - mappings[10682368] = ItemType.AcaciaStairs; - mappings[10747904] = ItemType.DarkOakStairs; - mappings[10813440] = ItemType.SlimeBlock; - mappings[10878976] = ItemType.Barrier; - mappings[10944512] = ItemType.IronTrapdoor; - mappings[11010048] = ItemType.Prismarine; - mappings[11010049] = ItemType.PrismarineBricks; - mappings[11010050] = ItemType.DarkPrismarine; - mappings[11075584] = ItemType.SeaLantern; - mappings[11141120] = ItemType.HayBlock; - mappings[11206656] = ItemType.WhiteCarpet; - mappings[11206657] = ItemType.OrangeCarpet; - mappings[11206658] = ItemType.MagentaCarpet; - mappings[11206659] = ItemType.LightBlueCarpet; - mappings[11206660] = ItemType.YellowCarpet; - mappings[11206661] = ItemType.LimeCarpet; - mappings[11206662] = ItemType.PinkCarpet; - mappings[11206663] = ItemType.GrayCarpet; - mappings[11206664] = ItemType.LightGrayCarpet; - mappings[11206665] = ItemType.CyanCarpet; - mappings[11206666] = ItemType.PurpleCarpet; - mappings[11206667] = ItemType.BlueCarpet; - mappings[11206668] = ItemType.BrownCarpet; - mappings[11206669] = ItemType.GreenCarpet; - mappings[11206670] = ItemType.RedCarpet; - mappings[11206671] = ItemType.BlackCarpet; - mappings[11272192] = ItemType.Terracotta; - mappings[11337728] = ItemType.CoalBlock; - mappings[11403264] = ItemType.PackedIce; - mappings[11468800] = ItemType.Sunflower; - mappings[11468801] = ItemType.Lilac; - mappings[11468802] = ItemType.TallGrass; - mappings[11468803] = ItemType.LargeFern; - mappings[11468804] = ItemType.RoseBush; - mappings[11468805] = ItemType.Peony; - mappings[11730944] = ItemType.RedSandstone; - mappings[11730945] = ItemType.ChiseledRedSandstone; - mappings[11730946] = ItemType.SmoothRedSandstone; - mappings[11796480] = ItemType.RedSandstoneStairs; - mappings[11927552] = ItemType.RedSandstoneSlab; - mappings[11993088] = ItemType.SpruceFenceGate; - mappings[12058624] = ItemType.BirchFenceGate; - mappings[12124160] = ItemType.JungleFenceGate; - mappings[12189696] = ItemType.DarkOakFenceGate; - mappings[12255232] = ItemType.AcaciaFenceGate; - mappings[12320768] = ItemType.SpruceFence; - mappings[12386304] = ItemType.BirchFence; - mappings[12451840] = ItemType.JungleFence; - mappings[12517376] = ItemType.DarkOakFence; - mappings[12582912] = ItemType.AcaciaFence; - mappings[16777216] = ItemType.IronShovel; - mappings[16842752] = ItemType.IronPickaxe; - mappings[16908288] = ItemType.IronAxe; - mappings[16973824] = ItemType.FlintAndSteel; - mappings[17039360] = ItemType.Apple; - mappings[17104896] = ItemType.Bow; - mappings[17170432] = ItemType.Arrow; - mappings[17235968] = ItemType.Coal; - mappings[17235969] = ItemType.Charcoal; - mappings[17301504] = ItemType.Diamond; - mappings[17367040] = ItemType.IronIngot; - mappings[17432576] = ItemType.GoldIngot; - mappings[17498112] = ItemType.IronSword; - mappings[17825792] = ItemType.StoneSword; - mappings[17891328] = ItemType.StoneShovel; - mappings[17956864] = ItemType.StonePickaxe; - mappings[18022400] = ItemType.StoneAxe; - mappings[18087936] = ItemType.DiamondSword; - mappings[18153472] = ItemType.DiamondShovel; - mappings[18219008] = ItemType.DiamondPickaxe; - mappings[18284544] = ItemType.DiamondAxe; - mappings[18350080] = ItemType.Stick; - mappings[18415616] = ItemType.Bowl; - mappings[18481152] = ItemType.MushroomStew; - mappings[18546688] = ItemType.GoldenSword; - mappings[18612224] = ItemType.GoldenShovel; - mappings[18677760] = ItemType.GoldenPickaxe; - mappings[18743296] = ItemType.GoldenAxe; - mappings[18808832] = ItemType.String; - mappings[18874368] = ItemType.Feather; - mappings[18939904] = ItemType.Gunpowder; - mappings[19070976] = ItemType.StoneHoe; - mappings[19136512] = ItemType.IronHoe; - mappings[19202048] = ItemType.DiamondHoe; - mappings[19267584] = ItemType.GoldenHoe; - mappings[19464192] = ItemType.Bread; - mappings[19791872] = ItemType.ChainmailHelmet; - mappings[19857408] = ItemType.ChainmailChestplate; - mappings[19922944] = ItemType.ChainmailLeggings; - mappings[19988480] = ItemType.ChainmailBoots; - mappings[20054016] = ItemType.IronHelmet; - mappings[20119552] = ItemType.IronChestplate; - mappings[20185088] = ItemType.IronLeggings; - mappings[20250624] = ItemType.IronBoots; - mappings[20316160] = ItemType.DiamondHelmet; - mappings[20381696] = ItemType.DiamondChestplate; - mappings[20447232] = ItemType.DiamondLeggings; - mappings[20512768] = ItemType.DiamondBoots; - mappings[20578304] = ItemType.GoldenHelmet; - mappings[20643840] = ItemType.GoldenChestplate; - mappings[20709376] = ItemType.GoldenLeggings; - mappings[20774912] = ItemType.GoldenBoots; - mappings[20840448] = ItemType.Flint; - mappings[20905984] = ItemType.Porkchop; - mappings[20971520] = ItemType.CookedPorkchop; - mappings[21037056] = ItemType.Painting; - mappings[21102592] = ItemType.GoldenApple; - mappings[21102593] = ItemType.EnchantedGoldenApple; - mappings[21168128] = ItemType.OakSign; - mappings[21299200] = ItemType.Bucket; - mappings[21495808] = ItemType.Minecart; - mappings[21561344] = ItemType.Saddle; - mappings[21626880] = ItemType.IronDoor; - mappings[21692416] = ItemType.Redstone; - mappings[21757952] = ItemType.Snowball; - mappings[21823488] = ItemType.OakBoat; - mappings[21954560] = ItemType.MilkBucket; - mappings[22020096] = ItemType.Brick; - mappings[22085632] = ItemType.ClayBall; - mappings[22151168] = ItemType.SugarCane; - mappings[22216704] = ItemType.Paper; - mappings[22282240] = ItemType.Book; - mappings[22347776] = ItemType.SlimeBall; - mappings[22413312] = ItemType.ChestMinecart; - mappings[22478848] = ItemType.FurnaceMinecart; - mappings[22544384] = ItemType.Egg; - mappings[22609920] = ItemType.Compass; - mappings[22675456] = ItemType.FishingRod; - mappings[22740992] = ItemType.Clock; - mappings[22806528] = ItemType.GlowstoneDust; - mappings[22872064] = ItemType.Salmon; - mappings[22872065] = ItemType.Salmon; - mappings[22872066] = ItemType.TropicalFish; - mappings[22872067] = ItemType.Pufferfish; - mappings[22937600] = ItemType.CookedSalmon; - mappings[22937601] = ItemType.CookedSalmon; - mappings[23003136] = ItemType.InkSac; - mappings[23003137] = ItemType.RedDye; - mappings[23003138] = ItemType.GreenDye; - mappings[23003139] = ItemType.CocoaBeans; - mappings[23003140] = ItemType.LapisLazuli; - mappings[23003141] = ItemType.PurpleDye; - mappings[23003142] = ItemType.CyanDye; - mappings[23003143] = ItemType.LightGrayDye; - mappings[23003144] = ItemType.GrayDye; - mappings[23003145] = ItemType.PinkDye; - mappings[23003146] = ItemType.LimeDye; - mappings[23003147] = ItemType.YellowDye; - mappings[23003148] = ItemType.LightBlueDye; - mappings[23003149] = ItemType.MagentaDye; - mappings[23003150] = ItemType.OrangeDye; - mappings[23003151] = ItemType.BoneMeal; - mappings[23068672] = ItemType.Bone; - mappings[23134208] = ItemType.Sugar; - mappings[23199744] = ItemType.Cake; - mappings[23265280] = ItemType.RedBed; - mappings[23330816] = ItemType.Repeater; - mappings[23396352] = ItemType.Cookie; - mappings[23461888] = ItemType.FilledMap; - mappings[23527424] = ItemType.Shears; - mappings[23592960] = ItemType.MelonSlice; - mappings[23658496] = ItemType.PumpkinSeeds; - mappings[23724032] = ItemType.MelonSeeds; - mappings[23789568] = ItemType.Beef; - mappings[23855104] = ItemType.CookedBeef; - mappings[23920640] = ItemType.Chicken; - mappings[23986176] = ItemType.CookedChicken; - mappings[24051712] = ItemType.RottenFlesh; - mappings[24117248] = ItemType.EnderPearl; - mappings[24182784] = ItemType.BlazeRod; - mappings[24248320] = ItemType.GhastTear; - mappings[24313856] = ItemType.GoldNugget; - mappings[24379392] = ItemType.NetherWart; - mappings[24444928] = ItemType.Potion; // Water Bottle - mappings[24453121] = ItemType.Potion; // Regeneration - mappings[24453122] = ItemType.Potion; // Speed/Swiftness - mappings[24453124] = ItemType.Potion; // Poison - mappings[24453129] = ItemType.Potion; // Strength 3 min - mappings[24453131] = ItemType.Potion; // Jump Boost potion - mappings[24453153] = ItemType.Potion; // Regeneration II - mappings[24453154] = ItemType.Potion; // Speed/Swiftness II - mappings[24453155] = ItemType.Potion; // Fire Resistance 3 min - mappings[24453156] = ItemType.Potion; // Poison II - mappings[24453157] = ItemType.Potion; // Instant Health II - mappings[24453158] = ItemType.Potion; // Night Vision 3 min - mappings[24453160] = ItemType.Potion; // Weakness 1 min - mappings[24453161] = ItemType.Potion; // Strength 2 min - mappings[24453162] = ItemType.Potion; // Slowness - mappings[24453163] = ItemType.Potion; // Jump Boost/Leaping 1 min - mappings[24453164] = ItemType.Potion; // Instant Damage II - mappings[24453165] = ItemType.Potion; // Water Breathing 3 min - mappings[24453166] = ItemType.Potion; // Invisibility 3 min - mappings[24453185] = ItemType.Potion; // Regeneration 1 min - mappings[24453186] = ItemType.Potion; // Speed 1 min - mappings[24453187] = ItemType.Potion; // Fire Resistance - mappings[24453188] = ItemType.Potion; // Poison - mappings[24453189] = ItemType.Potion; // Instant Health - mappings[24453190] = ItemType.Potion; // Night Vision 8 min - mappings[24453192] = ItemType.Potion; // Weakness 4 min - mappings[24453193] = ItemType.Potion; // Strength 8 min - mappings[24453194] = ItemType.Potion; // Speed/Swiftness 4 min - mappings[24453195] = ItemType.Potion; // Jump Boost - mappings[24453196] = ItemType.Potion; // Harming/Instant Damage - mappings[24453197] = ItemType.Potion; // Water Breathing 8 min - mappings[24453198] = ItemType.Potion; // Invisibility 8 min - mappings[24461313] = ItemType.Potion; // Splash potion of Regeneration - mappings[24461314] = ItemType.Potion; // Splash potion of Speed/Swiftness 3 min - mappings[24461316] = ItemType.Potion; // Splash potion of Poison - mappings[24461321] = ItemType.Potion; // Splash potion of Strength 3 min - mappings[24461323] = ItemType.Potion; // Splash potion of Jump Boost 3 min - mappings[24461345] = ItemType.Potion; // Splash potion of Regeneration - mappings[24461346] = ItemType.Potion; // Splash potion of Speed/Swiftness 1 min - mappings[24461347] = ItemType.Potion; // Splash potion of Resistance 3 min - mappings[24461348] = ItemType.Potion; // Splash potion of Poison II - mappings[24461349] = ItemType.Potion; // Splash potion of Instant Health II - mappings[24461350] = ItemType.Potion; // Splash potion of Night Vision - mappings[24461352] = ItemType.Potion; // Splash potion of Weakness - mappings[24461353] = ItemType.Potion; // Splash potion of Strength - mappings[24461354] = ItemType.Potion; // Splash potion of Slowness - mappings[24461355] = ItemType.Potion; // Splash potion of Jump Boost - mappings[24461356] = ItemType.Potion; // Splash potion of Harming/Instant Damage II - mappings[24461357] = ItemType.Potion; // Splash potion of Water Breathing 3 min - mappings[24461358] = ItemType.Potion; // Splash potion of Invisibility 3 min - mappings[24461377] = ItemType.Potion; // Splash potion of Regeneration - mappings[24461378] = ItemType.Potion; // Splash potion of Speed 8 min - mappings[24461379] = ItemType.Potion; // Splash potion of Fire Resistance 8 min - mappings[24461380] = ItemType.Potion; // Splash potion of Poison - mappings[24461381] = ItemType.Potion; // Splash potion of Instant Health - mappings[24461382] = ItemType.Potion; // Splash potion of Night Vision 8 min - mappings[24461384] = ItemType.Potion; // Splash potion of Weakness 4 min - mappings[24461385] = ItemType.Potion; // Splash potion of Strength 8 min - mappings[24461386] = ItemType.Potion; // Splash potion of Slowness 4 min - mappings[24461387] = ItemType.Potion; // Splash potion of Jump Boost 8 min - mappings[24461388] = ItemType.Potion; // Splash potion of Harming/Instant Damage - mappings[24461389] = ItemType.Potion; // Splash potion of Water breathing 8 min - mappings[24461390] = ItemType.Potion; // Splash potion of Invisibility 7 min - mappings[24510464] = ItemType.GlassBottle; - mappings[24576000] = ItemType.SpiderEye; - mappings[24641536] = ItemType.FermentedSpiderEye; - mappings[24707072] = ItemType.BlazePowder; - mappings[24772608] = ItemType.MagmaCream; - mappings[24838144] = ItemType.BrewingStand; - mappings[24903680] = ItemType.Cauldron; - mappings[24969216] = ItemType.EnderEye; - mappings[25034752] = ItemType.GlisteringMelonSlice; - mappings[25100338] = ItemType.CreeperSpawnEgg; - mappings[25100339] = ItemType.SkeletonSpawnEgg; - mappings[25100340] = ItemType.SpiderSpawnEgg; - mappings[25100342] = ItemType.ZombieSpawnEgg; - mappings[25100343] = ItemType.SlimeSpawnEgg; - mappings[25100344] = ItemType.GhastSpawnEgg; - mappings[25100345] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[25100346] = ItemType.EndermanSpawnEgg; - mappings[25100347] = ItemType.CaveSpiderSpawnEgg; - mappings[25100348] = ItemType.SilverfishSpawnEgg; - mappings[25100349] = ItemType.BlazeSpawnEgg; - mappings[25100350] = ItemType.MagmaCubeSpawnEgg; - mappings[25100353] = ItemType.BatSpawnEgg; - mappings[25100354] = ItemType.WitchSpawnEgg; - mappings[25100355] = ItemType.EndermiteSpawnEgg; - mappings[25100356] = ItemType.GuardianSpawnEgg; - mappings[25100378] = ItemType.PigSpawnEgg; - mappings[25100379] = ItemType.SheepSpawnEgg; - mappings[25100380] = ItemType.CowSpawnEgg; - mappings[25100381] = ItemType.ChickenSpawnEgg; - mappings[25100382] = ItemType.SquidSpawnEgg; - mappings[25100383] = ItemType.WolfSpawnEgg; - mappings[25100384] = ItemType.MooshroomSpawnEgg; - mappings[25100386] = ItemType.OcelotSpawnEgg; - mappings[25100388] = ItemType.HorseSpawnEgg; - mappings[25100389] = ItemType.RabbitSpawnEgg; - mappings[25100408] = ItemType.VillagerSpawnEgg; - mappings[25165824] = ItemType.ExperienceBottle; - mappings[25231360] = ItemType.FireCharge; - mappings[25427968] = ItemType.Emerald; - mappings[25493504] = ItemType.ItemFrame; - mappings[25559040] = ItemType.FlowerPot; - mappings[25624576] = ItemType.Carrot; - mappings[25690112] = ItemType.Potato; - mappings[25755648] = ItemType.BakedPotato; - mappings[25821184] = ItemType.PoisonousPotato; - mappings[25886720] = ItemType.Map; - mappings[25952256] = ItemType.GoldenCarrot; - mappings[26017792] = ItemType.SkeletonSkull; - mappings[26017793] = ItemType.WitherSkeletonSkull; - mappings[26017794] = ItemType.ZombieHead; - mappings[26017795] = ItemType.PlayerHead; - mappings[26017796] = ItemType.CreeperHead; - mappings[26083328] = ItemType.CarrotOnAStick; - mappings[26148864] = ItemType.NetherStar; - mappings[26214400] = ItemType.PumpkinPie; - mappings[26279936] = ItemType.FireworkRocket; - mappings[26345472] = ItemType.FireworkStar; - mappings[26411008] = ItemType.EnchantedBook; - mappings[26476544] = ItemType.Comparator; - mappings[26542080] = ItemType.NetherBrick; - mappings[26607616] = ItemType.Quartz; - mappings[26673152] = ItemType.TntMinecart; - mappings[26738688] = ItemType.HopperMinecart; - mappings[26804224] = ItemType.PrismarineShard; - mappings[26869760] = ItemType.PrismarineCrystals; - mappings[26935296] = ItemType.Rabbit; - mappings[27000832] = ItemType.CookedRabbit; - mappings[27066368] = ItemType.RabbitStew; - mappings[27131904] = ItemType.RabbitFoot; - mappings[27197440] = ItemType.RabbitHide; - mappings[27262976] = ItemType.ArmorStand; - mappings[27328512] = ItemType.IronHorseArmor; - mappings[27394048] = ItemType.GoldenHorseArmor; - mappings[27459584] = ItemType.DiamondHorseArmor; - mappings[27590656] = ItemType.NameTag; - mappings[27656192] = ItemType.CommandBlockMinecart; - mappings[27721728] = ItemType.Mutton; - mappings[27787264] = ItemType.CookedMutton; - mappings[27852800] = ItemType.BlackBanner; - mappings[1966080] = ItemType.Cobweb; - mappings[2293760] = ItemType.WhiteWool; - mappings[2293761] = ItemType.OrangeWool; - mappings[2293762] = ItemType.MagentaWool; - mappings[2293763] = ItemType.LightBlueWool; - mappings[2293764] = ItemType.YellowWool; - mappings[2293765] = ItemType.LimeWool; - mappings[2293766] = ItemType.PinkWool; - mappings[2293767] = ItemType.GrayWool; - mappings[2293768] = ItemType.LightGrayWool; - mappings[2293769] = ItemType.CyanWool; - mappings[2293770] = ItemType.PurpleWool; - mappings[2293771] = ItemType.BlueWool; - mappings[2293772] = ItemType.BrownWool; - mappings[2293773] = ItemType.GreenWool; - mappings[2293774] = ItemType.RedWool; - mappings[2293775] = ItemType.BlackWool; - mappings[2424832] = ItemType.Dandelion; - mappings[4718592] = ItemType.OakPressurePlate; - mappings[7274496] = ItemType.LilyPad; - mappings[8257536] = ItemType.OakSlab; - mappings[8257537] = ItemType.SpruceSlab; - mappings[8257538] = ItemType.BirchSlab; - mappings[8257539] = ItemType.JungleSlab; - mappings[8257540] = ItemType.AcaciaSlab; - mappings[8257541] = ItemType.DarkOakSlab; - mappings[9371648] = ItemType.OakButton; - mappings[17563648] = ItemType.WoodenSword; - mappings[17629184] = ItemType.WoodenShovel; - mappings[17694720] = ItemType.WoodenPickaxe; - mappings[17760256] = ItemType.WoodenAxe; - mappings[19005440] = ItemType.WoodenHoe; - mappings[19333120] = ItemType.WheatSeeds; - mappings[19398656] = ItemType.Wheat; - mappings[21233664] = ItemType.OakDoor; - mappings[21364736] = ItemType.WaterBucket; - mappings[25296896] = ItemType.WritableBook; - mappings[25362432] = ItemType.WrittenBook; - mappings[27852801] = ItemType.RedBanner; - mappings[27852802] = ItemType.GreenBanner; - mappings[27852803] = ItemType.BrownBanner; - mappings[27852804] = ItemType.BlueBanner; - mappings[27852805] = ItemType.PurpleBanner; - mappings[27852806] = ItemType.CyanBanner; - mappings[27852807] = ItemType.LightGrayBanner; - mappings[27852808] = ItemType.GrayBanner; - mappings[27852809] = ItemType.PinkBanner; - mappings[27852810] = ItemType.LimeBanner; - mappings[27852811] = ItemType.YellowBanner; - mappings[27852812] = ItemType.LightBlueBanner; - mappings[27852813] = ItemType.MagentaBanner; - mappings[27852814] = ItemType.OrangeBanner; - mappings[27852815] = ItemType.WhiteBanner; - mappings[27983872] = ItemType.SpruceDoor; - mappings[28049408] = ItemType.BirchDoor; - mappings[28114944] = ItemType.JungleDoor; - mappings[28180480] = ItemType.AcaciaDoor; - mappings[28246016] = ItemType.DarkOakDoor; - mappings[10551296] = ItemType.AcaciaLeaves; - mappings[10551297] = ItemType.DarkOakLeaves; - mappings[19529728] = ItemType.LeatherHelmet; - mappings[19595264] = ItemType.LeatherChestplate; - mappings[19660800] = ItemType.LeatherLeggings; - mappings[19726336] = ItemType.LeatherBoots; - mappings[21430272] = ItemType.LavaBucket; - mappings[21889024] = ItemType.Leather; - mappings[27525120] = ItemType.Lead; - mappings[147849216] = ItemType.MusicDisc13; - mappings[147914752] = ItemType.MusicDiscCat; - mappings[147980288] = ItemType.MusicDiscBlocks; - mappings[148045824] = ItemType.MusicDiscChirp; - mappings[148111360] = ItemType.MusicDiscFar; - mappings[148176896] = ItemType.MusicDiscMall; - mappings[148242432] = ItemType.MusicDiscMellohi; - mappings[148307968] = ItemType.MusicDiscStal; - mappings[148373504] = ItemType.MusicDiscStrad; - mappings[148439040] = ItemType.MusicDiscWard; - mappings[148504576] = ItemType.MusicDisc11; - mappings[148570112] = ItemType.MusicDiscWait; - - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette19.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette19.cs deleted file mode 100644 index c4251f6240..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette19.cs +++ /dev/null @@ -1,607 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - /// - /// For MC 1.8 - /// Done manually by Milutinke :( - /// - public class ItemPalette19 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette19() - { - // Mapping IDs are a derived from: (Item ID << 16) | Data - mappings[0] = ItemType.Air; - mappings[65536] = ItemType.Stone; - mappings[65537] = ItemType.Granite; - mappings[65538] = ItemType.PolishedGranite; - mappings[65539] = ItemType.Diorite; - mappings[65540] = ItemType.PolishedDiorite; - mappings[65541] = ItemType.Andesite; - mappings[65542] = ItemType.PolishedAndesite; - mappings[131072] = ItemType.GrassBlock; - mappings[196608] = ItemType.Dirt; - mappings[196609] = ItemType.CoarseDirt; - mappings[196610] = ItemType.Podzol; - mappings[262144] = ItemType.Cobblestone; - mappings[327680] = ItemType.OakPlanks; - mappings[327681] = ItemType.SprucePlanks; - mappings[327682] = ItemType.BirchPlanks; - mappings[327683] = ItemType.JunglePlanks; - mappings[327684] = ItemType.AcaciaPlanks; - mappings[327685] = ItemType.DarkOakPlanks; - mappings[393216] = ItemType.OakSapling; - mappings[393217] = ItemType.SpruceSapling; - mappings[393218] = ItemType.BirchSapling; - mappings[393219] = ItemType.JungleSapling; - mappings[393220] = ItemType.AcaciaSapling; - mappings[393221] = ItemType.DarkOakSapling; - mappings[458752] = ItemType.Bedrock; - mappings[524288] = ItemType.WaterBucket; // Still Water Block Item - mappings[589824] = ItemType.WaterBucket; // Flowing Water Block Item - mappings[655360] = ItemType.LavaBucket; // Still Lava Block Item - mappings[720896] = ItemType.LavaBucket; // Flowing Lava Block Item - mappings[786432] = ItemType.Sand; - mappings[786433] = ItemType.RedSand; - mappings[851968] = ItemType.Gravel; - mappings[917504] = ItemType.GoldOre; - mappings[983040] = ItemType.IronOre; - mappings[1048576] = ItemType.CoalOre; - mappings[1114112] = ItemType.OakLog; - mappings[1114113] = ItemType.SpruceLog; - mappings[1114114] = ItemType.BirchLog; - mappings[1114115] = ItemType.JungleLog; - mappings[1179648] = ItemType.OakLeaves; - mappings[1179649] = ItemType.SpruceLeaves; - mappings[1179650] = ItemType.BirchLeaves; - mappings[1179651] = ItemType.JungleLeaves; - mappings[1245184] = ItemType.Sponge; - mappings[1245185] = ItemType.WetSponge; - mappings[1310720] = ItemType.Glass; - mappings[1376256] = ItemType.LapisOre; - mappings[1441792] = ItemType.LapisBlock; - mappings[1507328] = ItemType.Dispenser; - mappings[1769472] = ItemType.PoweredRail; - mappings[1835008] = ItemType.DetectorRail; - mappings[1900544] = ItemType.StickyPiston; - mappings[2031617] = ItemType.ShortGrass; - mappings[2031618] = ItemType.Fern; - mappings[2097152] = ItemType.DeadBush; - mappings[2293760] = ItemType.WhiteWool; - mappings[2293761] = ItemType.OrangeWool; - mappings[2293762] = ItemType.MagentaWool; - mappings[2293763] = ItemType.LightBlueWool; - mappings[2293764] = ItemType.YellowWool; - mappings[2293765] = ItemType.LimeWool; - mappings[2293766] = ItemType.PinkWool; - mappings[2293767] = ItemType.GrayWool; - mappings[2293768] = ItemType.LightGrayWool; - mappings[2293769] = ItemType.CyanWool; - mappings[2293770] = ItemType.PurpleWool; - mappings[2293771] = ItemType.BlueWool; - mappings[2293772] = ItemType.BrownWool; - mappings[2293773] = ItemType.GreenWool; - mappings[2293774] = ItemType.RedWool; - mappings[2293775] = ItemType.BlackWool; - mappings[2424832] = ItemType.Dandelion; - mappings[2555904] = ItemType.BrownMushroom; - mappings[2686976] = ItemType.GoldBlock; - mappings[2752512] = ItemType.IronBlock; - mappings[2883584] = ItemType.StoneSlab; - mappings[2883585] = ItemType.SandstoneSlab; - mappings[2883587] = ItemType.CobblestoneSlab; - mappings[2883588] = ItemType.BrickSlab; - mappings[2883589] = ItemType.StoneBrickSlab; - mappings[2883590] = ItemType.NetherBrickSlab; - mappings[2883591] = ItemType.QuartzSlab; - mappings[2949120] = ItemType.Bricks; - mappings[3014656] = ItemType.Tnt; - mappings[3080192] = ItemType.Bookshelf; - mappings[3276800] = ItemType.Torch; - mappings[3538944] = ItemType.Chest; - mappings[3670016] = ItemType.DiamondOre; - mappings[3735552] = ItemType.DiamondBlock; - mappings[3801088] = ItemType.CraftingTable; - mappings[3932160] = ItemType.Farmland; - mappings[3997696] = ItemType.Furnace; - mappings[4259840] = ItemType.Ladder; - mappings[4390912] = ItemType.CobblestoneStairs; - mappings[4587520] = ItemType.StonePressurePlate; - mappings[4718592] = ItemType.OakPressurePlate; - mappings[5046272] = ItemType.StoneButton; - mappings[5177344] = ItemType.Ice; - mappings[5308416] = ItemType.Cactus; - mappings[5373952] = ItemType.Clay; - mappings[5505024] = ItemType.Jukebox; - mappings[5570560] = ItemType.OakFence; - mappings[5832704] = ItemType.Glowstone; - mappings[6225920] = ItemType.WhiteStainedGlass; - mappings[6225921] = ItemType.OrangeStainedGlass; - mappings[6225922] = ItemType.MagentaStainedGlass; - mappings[6225923] = ItemType.LightBlueStainedGlass; - mappings[6225924] = ItemType.YellowStainedGlass; - mappings[6225925] = ItemType.LimeStainedGlass; - mappings[6225926] = ItemType.PinkStainedGlass; - mappings[6225927] = ItemType.GrayStainedGlass; - mappings[6225928] = ItemType.LightGrayStainedGlass; - mappings[6225929] = ItemType.CyanStainedGlass; - mappings[6225930] = ItemType.PurpleStainedGlass; - mappings[6225931] = ItemType.BlueStainedGlass; - mappings[6225932] = ItemType.BrownStainedGlass; - mappings[6225933] = ItemType.GreenStainedGlass; - mappings[6225934] = ItemType.RedStainedGlass; - mappings[6225935] = ItemType.BlackStainedGlass; - mappings[6291456] = ItemType.OakTrapdoor; - mappings[6422528] = ItemType.StoneBricks; - mappings[6422529] = ItemType.MossyStoneBricks; - mappings[6422530] = ItemType.CrackedStoneBricks; - mappings[6422531] = ItemType.ChiseledStoneBricks; - mappings[6488064] = ItemType.BrownMushroomBlock; - mappings[6619136] = ItemType.IronBars; - mappings[6684672] = ItemType.GlassPane; - mappings[6946816] = ItemType.Vine; - mappings[7012352] = ItemType.OakFenceGate; - mappings[7077888] = ItemType.BrickStairs; - mappings[7143424] = ItemType.StoneBrickStairs; - mappings[7602176] = ItemType.EnchantingTable; - mappings[7864320] = ItemType.EndPortalFrame; - mappings[7929856] = ItemType.EndStone; - mappings[7995392] = ItemType.DragonEgg; - mappings[8257536] = ItemType.OakSlab; - mappings[8257537] = ItemType.SpruceSlab; - mappings[8257538] = ItemType.BirchSlab; - mappings[8257539] = ItemType.JungleSlab; - mappings[8257540] = ItemType.AcaciaSlab; - mappings[8257541] = ItemType.DarkOakSlab; - mappings[8454144] = ItemType.EmeraldOre; - mappings[8519680] = ItemType.EnderChest; - mappings[8585216] = ItemType.TripwireHook; - mappings[8716288] = ItemType.EmeraldBlock; - mappings[8781824] = ItemType.SpruceStairs; - mappings[8847360] = ItemType.BirchStairs; - mappings[8912896] = ItemType.JungleStairs; - mappings[8978432] = ItemType.CommandBlock; - mappings[9043968] = ItemType.Beacon; - mappings[9109504] = ItemType.CobblestoneWall; - mappings[1572864] = ItemType.Sandstone; - mappings[1572865] = ItemType.ChiseledSandstone; - mappings[1572866] = ItemType.SmoothSandstone; - mappings[1638400] = ItemType.NoteBlock; - mappings[2162688] = ItemType.Piston; - mappings[2490368] = ItemType.Poppy; - mappings[2490369] = ItemType.BlueOrchid; - mappings[2490370] = ItemType.Allium; - mappings[2490371] = ItemType.AzureBluet; - mappings[2490372] = ItemType.RedTulip; - mappings[2490373] = ItemType.OrangeTulip; - mappings[2490374] = ItemType.WhiteTulip; - mappings[2490375] = ItemType.PinkTulip; - mappings[2490376] = ItemType.OxeyeDaisy; - mappings[2621440] = ItemType.RedMushroom; - mappings[3145728] = ItemType.MossyCobblestone; - mappings[3211264] = ItemType.Obsidian; - mappings[3407872] = ItemType.Spawner; - mappings[3473408] = ItemType.OakStairs; - mappings[4325376] = ItemType.Rail; - mappings[4521984] = ItemType.Lever; - mappings[4784128] = ItemType.RedstoneOre; - mappings[4980736] = ItemType.RedstoneTorch; - mappings[5111808] = ItemType.Snow; - mappings[5242880] = ItemType.SnowBlock; - mappings[5636096] = ItemType.Pumpkin; - mappings[5701632] = ItemType.Netherrack; - mappings[5767168] = ItemType.SoulSand; - mappings[5963776] = ItemType.JackOLantern; - mappings[6356992] = ItemType.InfestedStone; - mappings[6356993] = ItemType.InfestedCobblestone; - mappings[6356994] = ItemType.InfestedStoneBricks; - mappings[6356995] = ItemType.InfestedMossyStoneBricks; - mappings[6356996] = ItemType.InfestedCrackedStoneBricks; - mappings[6356997] = ItemType.InfestedChiseledStoneBricks; - mappings[6553600] = ItemType.RedMushroomBlock; - mappings[6750208] = ItemType.Melon; - mappings[7208960] = ItemType.Mycelium; - mappings[7340032] = ItemType.NetherBricks; - mappings[7405568] = ItemType.NetherBrickFence; - mappings[7471104] = ItemType.NetherBrickStairs; - mappings[8060928] = ItemType.RedstoneLamp; - mappings[8388608] = ItemType.SandstoneStairs; - mappings[9109505] = ItemType.MossyCobblestoneWall; - mappings[9371648] = ItemType.OakButton; - mappings[9502720] = ItemType.Anvil; - mappings[9502721] = ItemType.ChippedAnvil; - mappings[9502722] = ItemType.DamagedAnvil; - mappings[9568256] = ItemType.TrappedChest; - mappings[9633792] = ItemType.LightWeightedPressurePlate; - mappings[9699328] = ItemType.HeavyWeightedPressurePlate; - mappings[9895936] = ItemType.DaylightDetector; - mappings[9961472] = ItemType.RedstoneBlock; - mappings[10027008] = ItemType.NetherQuartzOre; - mappings[10092544] = ItemType.Hopper; - mappings[10158080] = ItemType.QuartzBlock; - mappings[10158081] = ItemType.ChiseledQuartzBlock; - mappings[10158082] = ItemType.QuartzPillar; - mappings[10223616] = ItemType.QuartzStairs; - mappings[10289152] = ItemType.ActivatorRail; - mappings[10354688] = ItemType.Dropper; - mappings[10420224] = ItemType.WhiteTerracotta; - mappings[10420225] = ItemType.OrangeTerracotta; - mappings[10420226] = ItemType.MagentaTerracotta; - mappings[10420227] = ItemType.LightBlueTerracotta; - mappings[10420228] = ItemType.YellowTerracotta; - mappings[10420229] = ItemType.LimeTerracotta; - mappings[10420230] = ItemType.PinkTerracotta; - mappings[10420231] = ItemType.GrayTerracotta; - mappings[10420232] = ItemType.LightGrayTerracotta; - mappings[10420233] = ItemType.CyanTerracotta; - mappings[10420234] = ItemType.PurpleTerracotta; - mappings[10420235] = ItemType.BlueTerracotta; - mappings[10420236] = ItemType.BrownTerracotta; - mappings[10420237] = ItemType.GreenTerracotta; - mappings[10420238] = ItemType.RedTerracotta; - mappings[10420239] = ItemType.BlackTerracotta; - mappings[10485760] = ItemType.WhiteStainedGlassPane; - mappings[10485761] = ItemType.OrangeStainedGlassPane; - mappings[10485762] = ItemType.MagentaStainedGlassPane; - mappings[10485763] = ItemType.LightBlueStainedGlassPane; - mappings[10485764] = ItemType.YellowStainedGlassPane; - mappings[10485765] = ItemType.LimeStainedGlassPane; - mappings[10485766] = ItemType.PinkStainedGlassPane; - mappings[10485767] = ItemType.GrayStainedGlassPane; - mappings[10485768] = ItemType.LightGrayStainedGlassPane; - mappings[10485769] = ItemType.CyanStainedGlassPane; - mappings[10485770] = ItemType.PurpleStainedGlassPane; - mappings[10485771] = ItemType.BlueStainedGlassPane; - mappings[10485772] = ItemType.BrownStainedGlassPane; - mappings[10485773] = ItemType.GreenStainedGlassPane; - mappings[10485774] = ItemType.RedStainedGlassPane; - mappings[10485775] = ItemType.BlackStainedGlassPane; - mappings[10551296] = ItemType.AcaciaLeaves; - mappings[10551297] = ItemType.DarkOakLeaves; - mappings[10616832] = ItemType.AcaciaLog; - mappings[10616833] = ItemType.DarkOakLog; - mappings[10682368] = ItemType.AcaciaStairs; - mappings[10747904] = ItemType.DarkOakStairs; - mappings[10813440] = ItemType.SlimeBlock; - mappings[10878976] = ItemType.Barrier; - mappings[10944512] = ItemType.IronTrapdoor; - mappings[11010048] = ItemType.Prismarine; - mappings[11010049] = ItemType.PrismarineBricks; - mappings[11010050] = ItemType.DarkPrismarine; - mappings[11075584] = ItemType.SeaLantern; - mappings[11141120] = ItemType.HayBlock; - mappings[11206656] = ItemType.WhiteCarpet; - mappings[11206657] = ItemType.OrangeCarpet; - mappings[11206658] = ItemType.MagentaCarpet; - mappings[11206659] = ItemType.LightBlueCarpet; - mappings[11206660] = ItemType.YellowCarpet; - mappings[11206661] = ItemType.LimeCarpet; - mappings[11206662] = ItemType.PinkCarpet; - mappings[11206663] = ItemType.GrayCarpet; - mappings[11206664] = ItemType.LightGrayCarpet; - mappings[11206665] = ItemType.CyanCarpet; - mappings[11206666] = ItemType.PurpleCarpet; - mappings[11206667] = ItemType.BlueCarpet; - mappings[11206668] = ItemType.BrownCarpet; - mappings[11206669] = ItemType.GreenCarpet; - mappings[11206670] = ItemType.RedCarpet; - mappings[11206671] = ItemType.BlackCarpet; - mappings[11272192] = ItemType.Terracotta; - mappings[11337728] = ItemType.CoalBlock; - mappings[11403264] = ItemType.PackedIce; - mappings[11468800] = ItemType.Sunflower; - mappings[11468801] = ItemType.Lilac; - mappings[11468802] = ItemType.TallGrass; - mappings[11468803] = ItemType.LargeFern; - mappings[11468804] = ItemType.RoseBush; - mappings[11468805] = ItemType.Peony; - mappings[11730944] = ItemType.RedSandstone; - mappings[11730945] = ItemType.ChiseledRedSandstone; - mappings[11730946] = ItemType.SmoothRedSandstone; - mappings[11796480] = ItemType.RedSandstoneStairs; - mappings[11927552] = ItemType.RedSandstoneSlab; - mappings[11993088] = ItemType.SpruceFenceGate; - mappings[12058624] = ItemType.BirchFenceGate; - mappings[12124160] = ItemType.JungleFenceGate; - mappings[12189696] = ItemType.DarkOakFenceGate; - mappings[12255232] = ItemType.AcaciaFenceGate; - mappings[12320768] = ItemType.SpruceFence; - mappings[12386304] = ItemType.BirchFence; - mappings[12451840] = ItemType.JungleFence; - mappings[12517376] = ItemType.DarkOakFence; - mappings[12582912] = ItemType.AcaciaFence; - mappings[12976128] = ItemType.EndRod; - mappings[13041664] = ItemType.ChorusPlant; - mappings[13107200] = ItemType.ChorusFlower; - mappings[13172736] = ItemType.PurpurBlock; - mappings[13238272] = ItemType.PurpurPillar; - mappings[13303808] = ItemType.PurpurStairs; - mappings[13434880] = ItemType.PurpurSlab; - mappings[13500416] = ItemType.EndStoneBricks; - mappings[13631488] = ItemType.DirtPath; - mappings[13762560] = ItemType.RepeatingCommandBlock; - mappings[13828096] = ItemType.ChainCommandBlock; - mappings[16777216] = ItemType.IronShovel; - mappings[16842752] = ItemType.IronPickaxe; - mappings[16908288] = ItemType.IronAxe; - mappings[16973824] = ItemType.FlintAndSteel; - mappings[17039360] = ItemType.Apple; - mappings[17104896] = ItemType.Bow; - mappings[17170432] = ItemType.Arrow; - mappings[17235968] = ItemType.Coal; - mappings[17235969] = ItemType.Charcoal; - mappings[17301504] = ItemType.Diamond; - mappings[17367040] = ItemType.IronIngot; - mappings[17432576] = ItemType.GoldIngot; - mappings[17498112] = ItemType.IronSword; - mappings[17563648] = ItemType.WoodenSword; - mappings[17629184] = ItemType.WoodenShovel; - mappings[17694720] = ItemType.WoodenPickaxe; - mappings[17760256] = ItemType.WoodenAxe; - mappings[17825792] = ItemType.StoneSword; - mappings[17891328] = ItemType.StoneShovel; - mappings[17956864] = ItemType.StonePickaxe; - mappings[18022400] = ItemType.StoneAxe; - mappings[18087936] = ItemType.DiamondSword; - mappings[18153472] = ItemType.DiamondShovel; - mappings[18219008] = ItemType.DiamondPickaxe; - mappings[18284544] = ItemType.DiamondAxe; - mappings[18350080] = ItemType.Stick; - mappings[18415616] = ItemType.Bowl; - mappings[18481152] = ItemType.MushroomStew; - mappings[18546688] = ItemType.GoldenSword; - mappings[18612224] = ItemType.GoldenShovel; - mappings[18677760] = ItemType.GoldenPickaxe; - mappings[18743296] = ItemType.GoldenAxe; - mappings[18808832] = ItemType.String; - mappings[18874368] = ItemType.Feather; - mappings[18939904] = ItemType.Gunpowder; - mappings[19005440] = ItemType.WoodenHoe; - mappings[19070976] = ItemType.StoneHoe; - mappings[19136512] = ItemType.IronHoe; - mappings[19202048] = ItemType.DiamondHoe; - mappings[19267584] = ItemType.GoldenHoe; - mappings[19333120] = ItemType.WheatSeeds; - mappings[19464192] = ItemType.Bread; - mappings[19529728] = ItemType.LeatherHelmet; - mappings[19595264] = ItemType.LeatherChestplate; - mappings[19660800] = ItemType.LeatherLeggings; - mappings[19726336] = ItemType.LeatherBoots; - mappings[19791872] = ItemType.ChainmailHelmet; - mappings[19857408] = ItemType.ChainmailChestplate; - mappings[19922944] = ItemType.ChainmailLeggings; - mappings[19988480] = ItemType.ChainmailBoots; - mappings[20054016] = ItemType.IronHelmet; - mappings[20119552] = ItemType.IronChestplate; - mappings[20185088] = ItemType.IronLeggings; - mappings[20250624] = ItemType.IronBoots; - mappings[20316160] = ItemType.DiamondHelmet; - mappings[20381696] = ItemType.DiamondChestplate; - mappings[20447232] = ItemType.DiamondLeggings; - mappings[20512768] = ItemType.DiamondBoots; - mappings[20578304] = ItemType.GoldenHelmet; - mappings[20643840] = ItemType.GoldenChestplate; - mappings[20709376] = ItemType.GoldenLeggings; - mappings[20774912] = ItemType.GoldenBoots; - mappings[20840448] = ItemType.Flint; - mappings[20905984] = ItemType.Porkchop; - mappings[20971520] = ItemType.CookedPorkchop; - mappings[21037056] = ItemType.Painting; - mappings[21102592] = ItemType.GoldenApple; - mappings[21102593] = ItemType.EnchantedGoldenApple; - mappings[21168128] = ItemType.OakSign; - mappings[21233664] = ItemType.OakDoor; - mappings[21299200] = ItemType.Bucket; - mappings[21430272] = ItemType.LavaBucket; - mappings[21495808] = ItemType.Minecart; - mappings[21561344] = ItemType.Saddle; - mappings[21626880] = ItemType.IronDoor; - mappings[21692416] = ItemType.Redstone; - mappings[21757952] = ItemType.Snowball; - mappings[21823488] = ItemType.OakBoat; - mappings[21889024] = ItemType.Leather; - mappings[21954560] = ItemType.MilkBucket; - mappings[22020096] = ItemType.Brick; - mappings[22085632] = ItemType.ClayBall; - mappings[22151168] = ItemType.SugarCane; - mappings[22216704] = ItemType.Paper; - mappings[22282240] = ItemType.Book; - mappings[22347776] = ItemType.SlimeBall; - mappings[22413312] = ItemType.ChestMinecart; - mappings[22478848] = ItemType.FurnaceMinecart; - mappings[22544384] = ItemType.Egg; - mappings[22609920] = ItemType.Compass; - mappings[22675456] = ItemType.FishingRod; - mappings[22740992] = ItemType.Clock; - mappings[22806528] = ItemType.GlowstoneDust; - mappings[22872064] = ItemType.Salmon; - mappings[22872065] = ItemType.Salmon; - mappings[22872066] = ItemType.TropicalFish; - mappings[22872067] = ItemType.Pufferfish; - mappings[22937600] = ItemType.CookedSalmon; - mappings[22937601] = ItemType.CookedSalmon; - mappings[23003136] = ItemType.InkSac; - mappings[23003137] = ItemType.RedDye; - mappings[23003138] = ItemType.GreenDye; - mappings[23003139] = ItemType.CocoaBeans; - mappings[23003140] = ItemType.LapisLazuli; - mappings[23003141] = ItemType.PurpleDye; - mappings[23003142] = ItemType.CyanDye; - mappings[23003143] = ItemType.LightGrayDye; - mappings[23003144] = ItemType.GrayDye; - mappings[23003145] = ItemType.PinkDye; - mappings[23003146] = ItemType.LimeDye; - mappings[23003147] = ItemType.YellowDye; - mappings[23003148] = ItemType.LightBlueDye; - mappings[23003149] = ItemType.MagentaDye; - mappings[23003150] = ItemType.OrangeDye; - mappings[23003151] = ItemType.BoneMeal; - mappings[23068672] = ItemType.Bone; - mappings[23134208] = ItemType.Sugar; - mappings[23199744] = ItemType.Cake; - mappings[23265280] = ItemType.RedBed; - mappings[23330816] = ItemType.Repeater; - mappings[23396352] = ItemType.Cookie; - mappings[23527424] = ItemType.Shears; - mappings[23592960] = ItemType.MelonSlice; - mappings[23658496] = ItemType.PumpkinSeeds; - mappings[23724032] = ItemType.MelonSeeds; - mappings[23789568] = ItemType.Beef; - mappings[23855104] = ItemType.CookedBeef; - mappings[23920640] = ItemType.Chicken; - mappings[23986176] = ItemType.CookedChicken; - mappings[24051712] = ItemType.RottenFlesh; - mappings[24117248] = ItemType.EnderPearl; - mappings[24182784] = ItemType.BlazeRod; - mappings[24248320] = ItemType.GhastTear; - mappings[24313856] = ItemType.GoldNugget; - mappings[24379392] = ItemType.NetherWart; - mappings[24444928] = ItemType.Potion; - mappings[24510464] = ItemType.GlassBottle; - mappings[24576000] = ItemType.SpiderEye; - mappings[24641536] = ItemType.FermentedSpiderEye; - mappings[24707072] = ItemType.BlazePowder; - mappings[24772608] = ItemType.MagmaCream; - mappings[24838144] = ItemType.BrewingStand; - mappings[24903680] = ItemType.Cauldron; - mappings[24969216] = ItemType.EnderEye; - mappings[25034752] = ItemType.GlisteringMelonSlice; - mappings[25100288] = ItemType.BatSpawnEgg; - mappings[25100288] = ItemType.BlazeSpawnEgg; - mappings[25100288] = ItemType.CaveSpiderSpawnEgg; - mappings[25100288] = ItemType.ChickenSpawnEgg; - mappings[25100288] = ItemType.CowSpawnEgg; - mappings[25100288] = ItemType.CreeperSpawnEgg; - mappings[25100288] = ItemType.EndermanSpawnEgg; - mappings[25100288] = ItemType.EndermiteSpawnEgg; - mappings[25100288] = ItemType.GhastSpawnEgg; - mappings[25100288] = ItemType.GuardianSpawnEgg; - mappings[25100288] = ItemType.HorseSpawnEgg; - mappings[25100288] = ItemType.MagmaCubeSpawnEgg; - mappings[25100288] = ItemType.MooshroomSpawnEgg; - mappings[25100288] = ItemType.OcelotSpawnEgg; - mappings[25100288] = ItemType.PigSpawnEgg; - mappings[25100288] = ItemType.RabbitSpawnEgg; - mappings[25100288] = ItemType.SheepSpawnEgg; - mappings[25100288] = ItemType.ShulkerSpawnEgg; - mappings[25100288] = ItemType.SilverfishSpawnEgg; - mappings[25100288] = ItemType.SkeletonSpawnEgg; - mappings[25100288] = ItemType.SlimeSpawnEgg; - mappings[25100288] = ItemType.SpiderSpawnEgg; - mappings[25100288] = ItemType.SquidSpawnEgg; - mappings[25100288] = ItemType.VillagerSpawnEgg; - mappings[25100288] = ItemType.WitchSpawnEgg; - mappings[25100288] = ItemType.WolfSpawnEgg; - mappings[25100288] = ItemType.ZombieSpawnEgg; - mappings[25100288] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[25165824] = ItemType.ExperienceBottle; - mappings[25231360] = ItemType.FireCharge; - mappings[25296896] = ItemType.WritableBook; - mappings[25362432] = ItemType.WrittenBook; - mappings[25427968] = ItemType.Emerald; - mappings[25493504] = ItemType.ItemFrame; - mappings[25559040] = ItemType.FlowerPot; - mappings[25624576] = ItemType.Carrot; - mappings[25690112] = ItemType.Potato; - mappings[25755648] = ItemType.BakedPotato; - mappings[25821184] = ItemType.PoisonousPotato; - mappings[25886720] = ItemType.Map; - mappings[25952256] = ItemType.GoldenCarrot; - mappings[26017792] = ItemType.SkeletonSkull; - mappings[26017793] = ItemType.WitherSkeletonSkull; - mappings[26017794] = ItemType.ZombieHead; - mappings[26017795] = ItemType.PlayerHead; - mappings[26017796] = ItemType.CreeperHead; - mappings[26017797] = ItemType.DragonHead; - mappings[26083328] = ItemType.CarrotOnAStick; - mappings[26148864] = ItemType.NetherStar; - mappings[26214400] = ItemType.PumpkinPie; - mappings[26279936] = ItemType.FireworkRocket; - mappings[26411008] = ItemType.EnchantedBook; - mappings[26476544] = ItemType.Comparator; - mappings[26542080] = ItemType.NetherBrick; - mappings[26607616] = ItemType.Quartz; - mappings[26673152] = ItemType.TntMinecart; - mappings[26738688] = ItemType.HopperMinecart; - mappings[26804224] = ItemType.PrismarineShard; - mappings[26869760] = ItemType.PrismarineCrystals; - mappings[26935296] = ItemType.Rabbit; - mappings[27000832] = ItemType.CookedRabbit; - mappings[27066368] = ItemType.RabbitStew; - mappings[27131904] = ItemType.RabbitFoot; - mappings[27197440] = ItemType.RabbitHide; - mappings[27262976] = ItemType.ArmorStand; - mappings[27328512] = ItemType.IronHorseArmor; - mappings[27394048] = ItemType.GoldenHorseArmor; - mappings[27459584] = ItemType.DiamondHorseArmor; - mappings[27525120] = ItemType.Lead; - mappings[27590656] = ItemType.NameTag; - mappings[27656192] = ItemType.CommandBlockMinecart; - mappings[27721728] = ItemType.Mutton; - mappings[27787264] = ItemType.CookedMutton; - mappings[27852800] = ItemType.BlackBanner; - mappings[27852801] = ItemType.RedBanner; - mappings[27852802] = ItemType.GreenBanner; - mappings[27852803] = ItemType.BrownBanner; - mappings[27852804] = ItemType.BlueBanner; - mappings[27852805] = ItemType.PurpleBanner; - mappings[27852806] = ItemType.CyanBanner; - mappings[27852807] = ItemType.LightGrayBanner; - mappings[27852808] = ItemType.GrayBanner; - mappings[27852809] = ItemType.PinkBanner; - mappings[27852810] = ItemType.LimeBanner; - mappings[27852811] = ItemType.YellowBanner; - mappings[27852812] = ItemType.LightBlueBanner; - mappings[27852813] = ItemType.MagentaBanner; - mappings[27852814] = ItemType.OrangeBanner; - mappings[27852815] = ItemType.WhiteBanner; - mappings[27918336] = ItemType.EndCrystal; - mappings[27983872] = ItemType.SpruceDoor; - mappings[28049408] = ItemType.BirchDoor; - mappings[28114944] = ItemType.JungleDoor; - mappings[28180480] = ItemType.AcaciaDoor; - mappings[28246016] = ItemType.DarkOakDoor; - mappings[28311552] = ItemType.ChorusFruit; - mappings[28377088] = ItemType.PoppedChorusFruit; - mappings[28442624] = ItemType.Beetroot; - mappings[28508160] = ItemType.BeetrootSeeds; - mappings[28573696] = ItemType.BeetrootSoup; - mappings[28639232] = ItemType.DragonBreath; - mappings[28704768] = ItemType.Potion; - mappings[28770304] = ItemType.SpectralArrow; - mappings[28835840] = ItemType.Arrow; - mappings[28901376] = ItemType.LingeringPotion; - mappings[28966912] = ItemType.Shield; - mappings[29032448] = ItemType.Elytra; - mappings[29097984] = ItemType.SpruceBoat; - mappings[29163520] = ItemType.BirchBoat; - mappings[29229056] = ItemType.JungleBoat; - mappings[29294592] = ItemType.AcaciaBoat; - mappings[29360128] = ItemType.DarkOakBoat; - mappings[147849216] = ItemType.MusicDisc13; - mappings[147914752] = ItemType.MusicDiscCat; - mappings[147980288] = ItemType.MusicDiscBlocks; - mappings[148045824] = ItemType.MusicDiscChirp; - mappings[148111360] = ItemType.MusicDiscFar; - mappings[148176896] = ItemType.MusicDiscMall; - mappings[148242432] = ItemType.MusicDiscMellohi; - mappings[148307968] = ItemType.MusicDiscStal; - mappings[148373504] = ItemType.MusicDiscStrad; - mappings[148439040] = ItemType.MusicDiscWard; - mappings[148504576] = ItemType.MusicDisc11; - mappings[148570112] = ItemType.MusicDiscWait; - mappings[1966080] = ItemType.Cobweb; - mappings[7274496] = ItemType.LilyPad; - mappings[19398656] = ItemType.Wheat; - mappings[21364736] = ItemType.WaterBucket; - - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette261.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette261.cs deleted file mode 100644 index 4acbe64456..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette261.cs +++ /dev/null @@ -1,1524 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette261 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette261() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.Deepslate; - mappings[9] = ItemType.CobbledDeepslate; - mappings[10] = ItemType.PolishedDeepslate; - mappings[11] = ItemType.Calcite; - mappings[12] = ItemType.Tuff; - mappings[13] = ItemType.TuffSlab; - mappings[14] = ItemType.TuffStairs; - mappings[15] = ItemType.TuffWall; - mappings[16] = ItemType.ChiseledTuff; - mappings[17] = ItemType.PolishedTuff; - mappings[18] = ItemType.PolishedTuffSlab; - mappings[19] = ItemType.PolishedTuffStairs; - mappings[20] = ItemType.PolishedTuffWall; - mappings[21] = ItemType.TuffBricks; - mappings[22] = ItemType.TuffBrickSlab; - mappings[23] = ItemType.TuffBrickStairs; - mappings[24] = ItemType.TuffBrickWall; - mappings[25] = ItemType.ChiseledTuffBricks; - mappings[26] = ItemType.DripstoneBlock; - mappings[27] = ItemType.GrassBlock; - mappings[28] = ItemType.Dirt; - mappings[29] = ItemType.CoarseDirt; - mappings[30] = ItemType.Podzol; - mappings[31] = ItemType.RootedDirt; - mappings[32] = ItemType.Mud; - mappings[33] = ItemType.CrimsonNylium; - mappings[34] = ItemType.WarpedNylium; - mappings[35] = ItemType.Cobblestone; - mappings[36] = ItemType.OakPlanks; - mappings[37] = ItemType.SprucePlanks; - mappings[38] = ItemType.BirchPlanks; - mappings[39] = ItemType.JunglePlanks; - mappings[40] = ItemType.AcaciaPlanks; - mappings[41] = ItemType.CherryPlanks; - mappings[42] = ItemType.DarkOakPlanks; - mappings[43] = ItemType.PaleOakPlanks; - mappings[44] = ItemType.MangrovePlanks; - mappings[45] = ItemType.BambooPlanks; - mappings[46] = ItemType.CrimsonPlanks; - mappings[47] = ItemType.WarpedPlanks; - mappings[48] = ItemType.BambooMosaic; - mappings[49] = ItemType.OakSapling; - mappings[50] = ItemType.SpruceSapling; - mappings[51] = ItemType.BirchSapling; - mappings[52] = ItemType.JungleSapling; - mappings[53] = ItemType.AcaciaSapling; - mappings[54] = ItemType.CherrySapling; - mappings[55] = ItemType.DarkOakSapling; - mappings[56] = ItemType.PaleOakSapling; - mappings[57] = ItemType.MangrovePropagule; - mappings[58] = ItemType.Bedrock; - mappings[59] = ItemType.Sand; - mappings[60] = ItemType.SuspiciousSand; - mappings[61] = ItemType.SuspiciousGravel; - mappings[62] = ItemType.RedSand; - mappings[63] = ItemType.Gravel; - mappings[64] = ItemType.CoalOre; - mappings[65] = ItemType.DeepslateCoalOre; - mappings[66] = ItemType.IronOre; - mappings[67] = ItemType.DeepslateIronOre; - mappings[68] = ItemType.CopperOre; - mappings[69] = ItemType.DeepslateCopperOre; - mappings[70] = ItemType.GoldOre; - mappings[71] = ItemType.DeepslateGoldOre; - mappings[72] = ItemType.RedstoneOre; - mappings[73] = ItemType.DeepslateRedstoneOre; - mappings[74] = ItemType.EmeraldOre; - mappings[75] = ItemType.DeepslateEmeraldOre; - mappings[76] = ItemType.LapisOre; - mappings[77] = ItemType.DeepslateLapisOre; - mappings[78] = ItemType.DiamondOre; - mappings[79] = ItemType.DeepslateDiamondOre; - mappings[80] = ItemType.NetherGoldOre; - mappings[81] = ItemType.NetherQuartzOre; - mappings[82] = ItemType.AncientDebris; - mappings[83] = ItemType.CoalBlock; - mappings[84] = ItemType.RawIronBlock; - mappings[85] = ItemType.RawCopperBlock; - mappings[86] = ItemType.RawGoldBlock; - mappings[87] = ItemType.HeavyCore; - mappings[88] = ItemType.AmethystBlock; - mappings[89] = ItemType.BuddingAmethyst; - mappings[90] = ItemType.IronBlock; - mappings[91] = ItemType.CopperBlock; - mappings[92] = ItemType.GoldBlock; - mappings[93] = ItemType.DiamondBlock; - mappings[94] = ItemType.NetheriteBlock; - mappings[95] = ItemType.ExposedCopper; - mappings[96] = ItemType.WeatheredCopper; - mappings[97] = ItemType.OxidizedCopper; - mappings[98] = ItemType.ChiseledCopper; - mappings[99] = ItemType.ExposedChiseledCopper; - mappings[100] = ItemType.WeatheredChiseledCopper; - mappings[101] = ItemType.OxidizedChiseledCopper; - mappings[102] = ItemType.CutCopper; - mappings[103] = ItemType.ExposedCutCopper; - mappings[104] = ItemType.WeatheredCutCopper; - mappings[105] = ItemType.OxidizedCutCopper; - mappings[106] = ItemType.CutCopperStairs; - mappings[107] = ItemType.ExposedCutCopperStairs; - mappings[108] = ItemType.WeatheredCutCopperStairs; - mappings[109] = ItemType.OxidizedCutCopperStairs; - mappings[110] = ItemType.CutCopperSlab; - mappings[111] = ItemType.ExposedCutCopperSlab; - mappings[112] = ItemType.WeatheredCutCopperSlab; - mappings[113] = ItemType.OxidizedCutCopperSlab; - mappings[114] = ItemType.WaxedCopperBlock; - mappings[115] = ItemType.WaxedExposedCopper; - mappings[116] = ItemType.WaxedWeatheredCopper; - mappings[117] = ItemType.WaxedOxidizedCopper; - mappings[118] = ItemType.WaxedChiseledCopper; - mappings[119] = ItemType.WaxedExposedChiseledCopper; - mappings[120] = ItemType.WaxedWeatheredChiseledCopper; - mappings[121] = ItemType.WaxedOxidizedChiseledCopper; - mappings[122] = ItemType.WaxedCutCopper; - mappings[123] = ItemType.WaxedExposedCutCopper; - mappings[124] = ItemType.WaxedWeatheredCutCopper; - mappings[125] = ItemType.WaxedOxidizedCutCopper; - mappings[126] = ItemType.WaxedCutCopperStairs; - mappings[127] = ItemType.WaxedExposedCutCopperStairs; - mappings[128] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[129] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[130] = ItemType.WaxedCutCopperSlab; - mappings[131] = ItemType.WaxedExposedCutCopperSlab; - mappings[132] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[133] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[134] = ItemType.OakLog; - mappings[135] = ItemType.SpruceLog; - mappings[136] = ItemType.BirchLog; - mappings[137] = ItemType.JungleLog; - mappings[138] = ItemType.AcaciaLog; - mappings[139] = ItemType.CherryLog; - mappings[140] = ItemType.PaleOakLog; - mappings[141] = ItemType.DarkOakLog; - mappings[142] = ItemType.MangroveLog; - mappings[143] = ItemType.MangroveRoots; - mappings[144] = ItemType.MuddyMangroveRoots; - mappings[145] = ItemType.CrimsonStem; - mappings[146] = ItemType.WarpedStem; - mappings[147] = ItemType.BambooBlock; - mappings[148] = ItemType.StrippedOakLog; - mappings[149] = ItemType.StrippedSpruceLog; - mappings[150] = ItemType.StrippedBirchLog; - mappings[151] = ItemType.StrippedJungleLog; - mappings[152] = ItemType.StrippedAcaciaLog; - mappings[153] = ItemType.StrippedCherryLog; - mappings[154] = ItemType.StrippedDarkOakLog; - mappings[155] = ItemType.StrippedPaleOakLog; - mappings[156] = ItemType.StrippedMangroveLog; - mappings[157] = ItemType.StrippedCrimsonStem; - mappings[158] = ItemType.StrippedWarpedStem; - mappings[159] = ItemType.StrippedOakWood; - mappings[160] = ItemType.StrippedSpruceWood; - mappings[161] = ItemType.StrippedBirchWood; - mappings[162] = ItemType.StrippedJungleWood; - mappings[163] = ItemType.StrippedAcaciaWood; - mappings[164] = ItemType.StrippedCherryWood; - mappings[165] = ItemType.StrippedDarkOakWood; - mappings[166] = ItemType.StrippedPaleOakWood; - mappings[167] = ItemType.StrippedMangroveWood; - mappings[168] = ItemType.StrippedCrimsonHyphae; - mappings[169] = ItemType.StrippedWarpedHyphae; - mappings[170] = ItemType.StrippedBambooBlock; - mappings[171] = ItemType.OakWood; - mappings[172] = ItemType.SpruceWood; - mappings[173] = ItemType.BirchWood; - mappings[174] = ItemType.JungleWood; - mappings[175] = ItemType.AcaciaWood; - mappings[176] = ItemType.CherryWood; - mappings[177] = ItemType.PaleOakWood; - mappings[178] = ItemType.DarkOakWood; - mappings[179] = ItemType.MangroveWood; - mappings[180] = ItemType.CrimsonHyphae; - mappings[181] = ItemType.WarpedHyphae; - mappings[182] = ItemType.OakLeaves; - mappings[183] = ItemType.SpruceLeaves; - mappings[184] = ItemType.BirchLeaves; - mappings[185] = ItemType.JungleLeaves; - mappings[186] = ItemType.AcaciaLeaves; - mappings[187] = ItemType.CherryLeaves; - mappings[188] = ItemType.DarkOakLeaves; - mappings[189] = ItemType.PaleOakLeaves; - mappings[190] = ItemType.MangroveLeaves; - mappings[191] = ItemType.AzaleaLeaves; - mappings[192] = ItemType.FloweringAzaleaLeaves; - mappings[193] = ItemType.Sponge; - mappings[194] = ItemType.WetSponge; - mappings[195] = ItemType.Glass; - mappings[196] = ItemType.TintedGlass; - mappings[197] = ItemType.LapisBlock; - mappings[198] = ItemType.Sandstone; - mappings[199] = ItemType.ChiseledSandstone; - mappings[200] = ItemType.CutSandstone; - mappings[201] = ItemType.Cobweb; - mappings[202] = ItemType.ShortGrass; - mappings[203] = ItemType.Fern; - mappings[204] = ItemType.Bush; - mappings[205] = ItemType.Azalea; - mappings[206] = ItemType.FloweringAzalea; - mappings[207] = ItemType.DeadBush; - mappings[208] = ItemType.FireflyBush; - mappings[209] = ItemType.ShortDryGrass; - mappings[210] = ItemType.TallDryGrass; - mappings[211] = ItemType.Seagrass; - mappings[212] = ItemType.SeaPickle; - mappings[213] = ItemType.WhiteWool; - mappings[214] = ItemType.OrangeWool; - mappings[215] = ItemType.MagentaWool; - mappings[216] = ItemType.LightBlueWool; - mappings[217] = ItemType.YellowWool; - mappings[218] = ItemType.LimeWool; - mappings[219] = ItemType.PinkWool; - mappings[220] = ItemType.GrayWool; - mappings[221] = ItemType.LightGrayWool; - mappings[222] = ItemType.CyanWool; - mappings[223] = ItemType.PurpleWool; - mappings[224] = ItemType.BlueWool; - mappings[225] = ItemType.BrownWool; - mappings[226] = ItemType.GreenWool; - mappings[227] = ItemType.RedWool; - mappings[228] = ItemType.BlackWool; - mappings[229] = ItemType.Dandelion; - mappings[230] = ItemType.GoldenDandelion; - mappings[231] = ItemType.OpenEyeblossom; - mappings[232] = ItemType.ClosedEyeblossom; - mappings[233] = ItemType.Poppy; - mappings[234] = ItemType.BlueOrchid; - mappings[235] = ItemType.Allium; - mappings[236] = ItemType.AzureBluet; - mappings[237] = ItemType.RedTulip; - mappings[238] = ItemType.OrangeTulip; - mappings[239] = ItemType.WhiteTulip; - mappings[240] = ItemType.PinkTulip; - mappings[241] = ItemType.OxeyeDaisy; - mappings[242] = ItemType.Cornflower; - mappings[243] = ItemType.LilyOfTheValley; - mappings[244] = ItemType.WitherRose; - mappings[245] = ItemType.Torchflower; - mappings[246] = ItemType.PitcherPlant; - mappings[247] = ItemType.SporeBlossom; - mappings[248] = ItemType.BrownMushroom; - mappings[249] = ItemType.RedMushroom; - mappings[250] = ItemType.CrimsonFungus; - mappings[251] = ItemType.WarpedFungus; - mappings[252] = ItemType.CrimsonRoots; - mappings[253] = ItemType.WarpedRoots; - mappings[254] = ItemType.NetherSprouts; - mappings[255] = ItemType.WeepingVines; - mappings[256] = ItemType.TwistingVines; - mappings[257] = ItemType.SugarCane; - mappings[258] = ItemType.Kelp; - mappings[259] = ItemType.PinkPetals; - mappings[260] = ItemType.Wildflowers; - mappings[261] = ItemType.LeafLitter; - mappings[262] = ItemType.MossCarpet; - mappings[263] = ItemType.MossBlock; - mappings[264] = ItemType.PaleMossCarpet; - mappings[265] = ItemType.PaleHangingMoss; - mappings[266] = ItemType.PaleMossBlock; - mappings[267] = ItemType.HangingRoots; - mappings[268] = ItemType.BigDripleaf; - mappings[269] = ItemType.SmallDripleaf; - mappings[270] = ItemType.Bamboo; - mappings[271] = ItemType.OakSlab; - mappings[272] = ItemType.SpruceSlab; - mappings[273] = ItemType.BirchSlab; - mappings[274] = ItemType.JungleSlab; - mappings[275] = ItemType.AcaciaSlab; - mappings[276] = ItemType.CherrySlab; - mappings[277] = ItemType.DarkOakSlab; - mappings[278] = ItemType.PaleOakSlab; - mappings[279] = ItemType.MangroveSlab; - mappings[280] = ItemType.BambooSlab; - mappings[281] = ItemType.BambooMosaicSlab; - mappings[282] = ItemType.CrimsonSlab; - mappings[283] = ItemType.WarpedSlab; - mappings[284] = ItemType.StoneSlab; - mappings[285] = ItemType.SmoothStoneSlab; - mappings[286] = ItemType.SandstoneSlab; - mappings[287] = ItemType.CutSandstoneSlab; - mappings[288] = ItemType.PetrifiedOakSlab; - mappings[289] = ItemType.CobblestoneSlab; - mappings[290] = ItemType.BrickSlab; - mappings[291] = ItemType.StoneBrickSlab; - mappings[292] = ItemType.MudBrickSlab; - mappings[293] = ItemType.NetherBrickSlab; - mappings[294] = ItemType.QuartzSlab; - mappings[295] = ItemType.RedSandstoneSlab; - mappings[296] = ItemType.CutRedSandstoneSlab; - mappings[297] = ItemType.PurpurSlab; - mappings[298] = ItemType.PrismarineSlab; - mappings[299] = ItemType.PrismarineBrickSlab; - mappings[300] = ItemType.DarkPrismarineSlab; - mappings[301] = ItemType.SmoothQuartz; - mappings[302] = ItemType.SmoothRedSandstone; - mappings[303] = ItemType.SmoothSandstone; - mappings[304] = ItemType.SmoothStone; - mappings[305] = ItemType.Bricks; - mappings[306] = ItemType.AcaciaShelf; - mappings[307] = ItemType.BambooShelf; - mappings[308] = ItemType.BirchShelf; - mappings[309] = ItemType.CherryShelf; - mappings[310] = ItemType.CrimsonShelf; - mappings[311] = ItemType.DarkOakShelf; - mappings[312] = ItemType.JungleShelf; - mappings[313] = ItemType.MangroveShelf; - mappings[314] = ItemType.OakShelf; - mappings[315] = ItemType.PaleOakShelf; - mappings[316] = ItemType.SpruceShelf; - mappings[317] = ItemType.WarpedShelf; - mappings[318] = ItemType.Bookshelf; - mappings[319] = ItemType.ChiseledBookshelf; - mappings[320] = ItemType.DecoratedPot; - mappings[321] = ItemType.MossyCobblestone; - mappings[322] = ItemType.Obsidian; - mappings[323] = ItemType.Torch; - mappings[324] = ItemType.EndRod; - mappings[325] = ItemType.ChorusPlant; - mappings[326] = ItemType.ChorusFlower; - mappings[327] = ItemType.PurpurBlock; - mappings[328] = ItemType.PurpurPillar; - mappings[329] = ItemType.PurpurStairs; - mappings[330] = ItemType.Spawner; - mappings[331] = ItemType.CreakingHeart; - mappings[332] = ItemType.Chest; - mappings[333] = ItemType.CraftingTable; - mappings[334] = ItemType.Farmland; - mappings[335] = ItemType.Furnace; - mappings[336] = ItemType.Ladder; - mappings[337] = ItemType.CobblestoneStairs; - mappings[338] = ItemType.Snow; - mappings[339] = ItemType.Ice; - mappings[340] = ItemType.SnowBlock; - mappings[341] = ItemType.Cactus; - mappings[342] = ItemType.CactusFlower; - mappings[343] = ItemType.Clay; - mappings[344] = ItemType.Jukebox; - mappings[345] = ItemType.OakFence; - mappings[346] = ItemType.SpruceFence; - mappings[347] = ItemType.BirchFence; - mappings[348] = ItemType.JungleFence; - mappings[349] = ItemType.AcaciaFence; - mappings[350] = ItemType.CherryFence; - mappings[351] = ItemType.DarkOakFence; - mappings[352] = ItemType.PaleOakFence; - mappings[353] = ItemType.MangroveFence; - mappings[354] = ItemType.BambooFence; - mappings[355] = ItemType.CrimsonFence; - mappings[356] = ItemType.WarpedFence; - mappings[357] = ItemType.Pumpkin; - mappings[358] = ItemType.CarvedPumpkin; - mappings[359] = ItemType.JackOLantern; - mappings[360] = ItemType.Netherrack; - mappings[361] = ItemType.SoulSand; - mappings[362] = ItemType.SoulSoil; - mappings[363] = ItemType.Basalt; - mappings[364] = ItemType.PolishedBasalt; - mappings[365] = ItemType.SmoothBasalt; - mappings[366] = ItemType.SoulTorch; - mappings[367] = ItemType.CopperTorch; - mappings[368] = ItemType.Glowstone; - mappings[369] = ItemType.InfestedStone; - mappings[370] = ItemType.InfestedCobblestone; - mappings[371] = ItemType.InfestedStoneBricks; - mappings[372] = ItemType.InfestedMossyStoneBricks; - mappings[373] = ItemType.InfestedCrackedStoneBricks; - mappings[374] = ItemType.InfestedChiseledStoneBricks; - mappings[375] = ItemType.InfestedDeepslate; - mappings[376] = ItemType.StoneBricks; - mappings[377] = ItemType.MossyStoneBricks; - mappings[378] = ItemType.CrackedStoneBricks; - mappings[379] = ItemType.ChiseledStoneBricks; - mappings[380] = ItemType.PackedMud; - mappings[381] = ItemType.MudBricks; - mappings[382] = ItemType.DeepslateBricks; - mappings[383] = ItemType.CrackedDeepslateBricks; - mappings[384] = ItemType.DeepslateTiles; - mappings[385] = ItemType.CrackedDeepslateTiles; - mappings[386] = ItemType.ChiseledDeepslate; - mappings[387] = ItemType.ReinforcedDeepslate; - mappings[388] = ItemType.BrownMushroomBlock; - mappings[389] = ItemType.RedMushroomBlock; - mappings[390] = ItemType.MushroomStem; - mappings[391] = ItemType.IronBars; - mappings[392] = ItemType.CopperBars; - mappings[393] = ItemType.ExposedCopperBars; - mappings[394] = ItemType.WeatheredCopperBars; - mappings[395] = ItemType.OxidizedCopperBars; - mappings[396] = ItemType.WaxedCopperBars; - mappings[397] = ItemType.WaxedExposedCopperBars; - mappings[398] = ItemType.WaxedWeatheredCopperBars; - mappings[399] = ItemType.WaxedOxidizedCopperBars; - mappings[400] = ItemType.IronChain; - mappings[401] = ItemType.CopperChain; - mappings[402] = ItemType.ExposedCopperChain; - mappings[403] = ItemType.WeatheredCopperChain; - mappings[404] = ItemType.OxidizedCopperChain; - mappings[405] = ItemType.WaxedCopperChain; - mappings[406] = ItemType.WaxedExposedCopperChain; - mappings[407] = ItemType.WaxedWeatheredCopperChain; - mappings[408] = ItemType.WaxedOxidizedCopperChain; - mappings[409] = ItemType.GlassPane; - mappings[410] = ItemType.Melon; - mappings[411] = ItemType.Vine; - mappings[412] = ItemType.GlowLichen; - mappings[413] = ItemType.ResinClump; - mappings[414] = ItemType.ResinBlock; - mappings[415] = ItemType.ResinBricks; - mappings[416] = ItemType.ResinBrickStairs; - mappings[417] = ItemType.ResinBrickSlab; - mappings[418] = ItemType.ResinBrickWall; - mappings[419] = ItemType.ChiseledResinBricks; - mappings[420] = ItemType.BrickStairs; - mappings[421] = ItemType.StoneBrickStairs; - mappings[422] = ItemType.MudBrickStairs; - mappings[423] = ItemType.Mycelium; - mappings[424] = ItemType.LilyPad; - mappings[425] = ItemType.NetherBricks; - mappings[426] = ItemType.CrackedNetherBricks; - mappings[427] = ItemType.ChiseledNetherBricks; - mappings[428] = ItemType.NetherBrickFence; - mappings[429] = ItemType.NetherBrickStairs; - mappings[430] = ItemType.Sculk; - mappings[431] = ItemType.SculkVein; - mappings[432] = ItemType.SculkCatalyst; - mappings[433] = ItemType.SculkShrieker; - mappings[434] = ItemType.EnchantingTable; - mappings[435] = ItemType.EndPortalFrame; - mappings[436] = ItemType.EndStone; - mappings[437] = ItemType.EndStoneBricks; - mappings[438] = ItemType.DragonEgg; - mappings[439] = ItemType.SandstoneStairs; - mappings[440] = ItemType.EnderChest; - mappings[441] = ItemType.EmeraldBlock; - mappings[442] = ItemType.OakStairs; - mappings[443] = ItemType.SpruceStairs; - mappings[444] = ItemType.BirchStairs; - mappings[445] = ItemType.JungleStairs; - mappings[446] = ItemType.AcaciaStairs; - mappings[447] = ItemType.CherryStairs; - mappings[448] = ItemType.DarkOakStairs; - mappings[449] = ItemType.PaleOakStairs; - mappings[450] = ItemType.MangroveStairs; - mappings[451] = ItemType.BambooStairs; - mappings[452] = ItemType.BambooMosaicStairs; - mappings[453] = ItemType.CrimsonStairs; - mappings[454] = ItemType.WarpedStairs; - mappings[455] = ItemType.CommandBlock; - mappings[456] = ItemType.Beacon; - mappings[457] = ItemType.CobblestoneWall; - mappings[458] = ItemType.MossyCobblestoneWall; - mappings[459] = ItemType.BrickWall; - mappings[460] = ItemType.PrismarineWall; - mappings[461] = ItemType.RedSandstoneWall; - mappings[462] = ItemType.MossyStoneBrickWall; - mappings[463] = ItemType.GraniteWall; - mappings[464] = ItemType.StoneBrickWall; - mappings[465] = ItemType.MudBrickWall; - mappings[466] = ItemType.NetherBrickWall; - mappings[467] = ItemType.AndesiteWall; - mappings[468] = ItemType.RedNetherBrickWall; - mappings[469] = ItemType.SandstoneWall; - mappings[470] = ItemType.EndStoneBrickWall; - mappings[471] = ItemType.DioriteWall; - mappings[472] = ItemType.BlackstoneWall; - mappings[473] = ItemType.PolishedBlackstoneWall; - mappings[474] = ItemType.PolishedBlackstoneBrickWall; - mappings[475] = ItemType.CobbledDeepslateWall; - mappings[476] = ItemType.PolishedDeepslateWall; - mappings[477] = ItemType.DeepslateBrickWall; - mappings[478] = ItemType.DeepslateTileWall; - mappings[479] = ItemType.Anvil; - mappings[480] = ItemType.ChippedAnvil; - mappings[481] = ItemType.DamagedAnvil; - mappings[482] = ItemType.ChiseledQuartzBlock; - mappings[483] = ItemType.QuartzBlock; - mappings[484] = ItemType.QuartzBricks; - mappings[485] = ItemType.QuartzPillar; - mappings[486] = ItemType.QuartzStairs; - mappings[487] = ItemType.WhiteTerracotta; - mappings[488] = ItemType.OrangeTerracotta; - mappings[489] = ItemType.MagentaTerracotta; - mappings[490] = ItemType.LightBlueTerracotta; - mappings[491] = ItemType.YellowTerracotta; - mappings[492] = ItemType.LimeTerracotta; - mappings[493] = ItemType.PinkTerracotta; - mappings[494] = ItemType.GrayTerracotta; - mappings[495] = ItemType.LightGrayTerracotta; - mappings[496] = ItemType.CyanTerracotta; - mappings[497] = ItemType.PurpleTerracotta; - mappings[498] = ItemType.BlueTerracotta; - mappings[499] = ItemType.BrownTerracotta; - mappings[500] = ItemType.GreenTerracotta; - mappings[501] = ItemType.RedTerracotta; - mappings[502] = ItemType.BlackTerracotta; - mappings[503] = ItemType.Barrier; - mappings[504] = ItemType.Light; - mappings[505] = ItemType.HayBlock; - mappings[506] = ItemType.WhiteCarpet; - mappings[507] = ItemType.OrangeCarpet; - mappings[508] = ItemType.MagentaCarpet; - mappings[509] = ItemType.LightBlueCarpet; - mappings[510] = ItemType.YellowCarpet; - mappings[511] = ItemType.LimeCarpet; - mappings[512] = ItemType.PinkCarpet; - mappings[513] = ItemType.GrayCarpet; - mappings[514] = ItemType.LightGrayCarpet; - mappings[515] = ItemType.CyanCarpet; - mappings[516] = ItemType.PurpleCarpet; - mappings[517] = ItemType.BlueCarpet; - mappings[518] = ItemType.BrownCarpet; - mappings[519] = ItemType.GreenCarpet; - mappings[520] = ItemType.RedCarpet; - mappings[521] = ItemType.BlackCarpet; - mappings[522] = ItemType.Terracotta; - mappings[523] = ItemType.PackedIce; - mappings[524] = ItemType.DirtPath; - mappings[525] = ItemType.Sunflower; - mappings[526] = ItemType.Lilac; - mappings[527] = ItemType.RoseBush; - mappings[528] = ItemType.Peony; - mappings[529] = ItemType.TallGrass; - mappings[530] = ItemType.LargeFern; - mappings[531] = ItemType.WhiteStainedGlass; - mappings[532] = ItemType.OrangeStainedGlass; - mappings[533] = ItemType.MagentaStainedGlass; - mappings[534] = ItemType.LightBlueStainedGlass; - mappings[535] = ItemType.YellowStainedGlass; - mappings[536] = ItemType.LimeStainedGlass; - mappings[537] = ItemType.PinkStainedGlass; - mappings[538] = ItemType.GrayStainedGlass; - mappings[539] = ItemType.LightGrayStainedGlass; - mappings[540] = ItemType.CyanStainedGlass; - mappings[541] = ItemType.PurpleStainedGlass; - mappings[542] = ItemType.BlueStainedGlass; - mappings[543] = ItemType.BrownStainedGlass; - mappings[544] = ItemType.GreenStainedGlass; - mappings[545] = ItemType.RedStainedGlass; - mappings[546] = ItemType.BlackStainedGlass; - mappings[547] = ItemType.WhiteStainedGlassPane; - mappings[548] = ItemType.OrangeStainedGlassPane; - mappings[549] = ItemType.MagentaStainedGlassPane; - mappings[550] = ItemType.LightBlueStainedGlassPane; - mappings[551] = ItemType.YellowStainedGlassPane; - mappings[552] = ItemType.LimeStainedGlassPane; - mappings[553] = ItemType.PinkStainedGlassPane; - mappings[554] = ItemType.GrayStainedGlassPane; - mappings[555] = ItemType.LightGrayStainedGlassPane; - mappings[556] = ItemType.CyanStainedGlassPane; - mappings[557] = ItemType.PurpleStainedGlassPane; - mappings[558] = ItemType.BlueStainedGlassPane; - mappings[559] = ItemType.BrownStainedGlassPane; - mappings[560] = ItemType.GreenStainedGlassPane; - mappings[561] = ItemType.RedStainedGlassPane; - mappings[562] = ItemType.BlackStainedGlassPane; - mappings[563] = ItemType.Prismarine; - mappings[564] = ItemType.PrismarineBricks; - mappings[565] = ItemType.DarkPrismarine; - mappings[566] = ItemType.PrismarineStairs; - mappings[567] = ItemType.PrismarineBrickStairs; - mappings[568] = ItemType.DarkPrismarineStairs; - mappings[569] = ItemType.SeaLantern; - mappings[570] = ItemType.RedSandstone; - mappings[571] = ItemType.ChiseledRedSandstone; - mappings[572] = ItemType.CutRedSandstone; - mappings[573] = ItemType.RedSandstoneStairs; - mappings[574] = ItemType.RepeatingCommandBlock; - mappings[575] = ItemType.ChainCommandBlock; - mappings[576] = ItemType.MagmaBlock; - mappings[577] = ItemType.NetherWartBlock; - mappings[578] = ItemType.WarpedWartBlock; - mappings[579] = ItemType.RedNetherBricks; - mappings[580] = ItemType.BoneBlock; - mappings[581] = ItemType.StructureVoid; - mappings[582] = ItemType.ShulkerBox; - mappings[583] = ItemType.WhiteShulkerBox; - mappings[584] = ItemType.OrangeShulkerBox; - mappings[585] = ItemType.MagentaShulkerBox; - mappings[586] = ItemType.LightBlueShulkerBox; - mappings[587] = ItemType.YellowShulkerBox; - mappings[588] = ItemType.LimeShulkerBox; - mappings[589] = ItemType.PinkShulkerBox; - mappings[590] = ItemType.GrayShulkerBox; - mappings[591] = ItemType.LightGrayShulkerBox; - mappings[592] = ItemType.CyanShulkerBox; - mappings[593] = ItemType.PurpleShulkerBox; - mappings[594] = ItemType.BlueShulkerBox; - mappings[595] = ItemType.BrownShulkerBox; - mappings[596] = ItemType.GreenShulkerBox; - mappings[597] = ItemType.RedShulkerBox; - mappings[598] = ItemType.BlackShulkerBox; - mappings[599] = ItemType.WhiteGlazedTerracotta; - mappings[600] = ItemType.OrangeGlazedTerracotta; - mappings[601] = ItemType.MagentaGlazedTerracotta; - mappings[602] = ItemType.LightBlueGlazedTerracotta; - mappings[603] = ItemType.YellowGlazedTerracotta; - mappings[604] = ItemType.LimeGlazedTerracotta; - mappings[605] = ItemType.PinkGlazedTerracotta; - mappings[606] = ItemType.GrayGlazedTerracotta; - mappings[607] = ItemType.LightGrayGlazedTerracotta; - mappings[608] = ItemType.CyanGlazedTerracotta; - mappings[609] = ItemType.PurpleGlazedTerracotta; - mappings[610] = ItemType.BlueGlazedTerracotta; - mappings[611] = ItemType.BrownGlazedTerracotta; - mappings[612] = ItemType.GreenGlazedTerracotta; - mappings[613] = ItemType.RedGlazedTerracotta; - mappings[614] = ItemType.BlackGlazedTerracotta; - mappings[615] = ItemType.WhiteConcrete; - mappings[616] = ItemType.OrangeConcrete; - mappings[617] = ItemType.MagentaConcrete; - mappings[618] = ItemType.LightBlueConcrete; - mappings[619] = ItemType.YellowConcrete; - mappings[620] = ItemType.LimeConcrete; - mappings[621] = ItemType.PinkConcrete; - mappings[622] = ItemType.GrayConcrete; - mappings[623] = ItemType.LightGrayConcrete; - mappings[624] = ItemType.CyanConcrete; - mappings[625] = ItemType.PurpleConcrete; - mappings[626] = ItemType.BlueConcrete; - mappings[627] = ItemType.BrownConcrete; - mappings[628] = ItemType.GreenConcrete; - mappings[629] = ItemType.RedConcrete; - mappings[630] = ItemType.BlackConcrete; - mappings[631] = ItemType.WhiteConcretePowder; - mappings[632] = ItemType.OrangeConcretePowder; - mappings[633] = ItemType.MagentaConcretePowder; - mappings[634] = ItemType.LightBlueConcretePowder; - mappings[635] = ItemType.YellowConcretePowder; - mappings[636] = ItemType.LimeConcretePowder; - mappings[637] = ItemType.PinkConcretePowder; - mappings[638] = ItemType.GrayConcretePowder; - mappings[639] = ItemType.LightGrayConcretePowder; - mappings[640] = ItemType.CyanConcretePowder; - mappings[641] = ItemType.PurpleConcretePowder; - mappings[642] = ItemType.BlueConcretePowder; - mappings[643] = ItemType.BrownConcretePowder; - mappings[644] = ItemType.GreenConcretePowder; - mappings[645] = ItemType.RedConcretePowder; - mappings[646] = ItemType.BlackConcretePowder; - mappings[647] = ItemType.TurtleEgg; - mappings[648] = ItemType.SnifferEgg; - mappings[649] = ItemType.DriedGhast; - mappings[650] = ItemType.DeadTubeCoralBlock; - mappings[651] = ItemType.DeadBrainCoralBlock; - mappings[652] = ItemType.DeadBubbleCoralBlock; - mappings[653] = ItemType.DeadFireCoralBlock; - mappings[654] = ItemType.DeadHornCoralBlock; - mappings[655] = ItemType.TubeCoralBlock; - mappings[656] = ItemType.BrainCoralBlock; - mappings[657] = ItemType.BubbleCoralBlock; - mappings[658] = ItemType.FireCoralBlock; - mappings[659] = ItemType.HornCoralBlock; - mappings[660] = ItemType.TubeCoral; - mappings[661] = ItemType.BrainCoral; - mappings[662] = ItemType.BubbleCoral; - mappings[663] = ItemType.FireCoral; - mappings[664] = ItemType.HornCoral; - mappings[665] = ItemType.DeadBrainCoral; - mappings[666] = ItemType.DeadBubbleCoral; - mappings[667] = ItemType.DeadFireCoral; - mappings[668] = ItemType.DeadHornCoral; - mappings[669] = ItemType.DeadTubeCoral; - mappings[670] = ItemType.TubeCoralFan; - mappings[671] = ItemType.BrainCoralFan; - mappings[672] = ItemType.BubbleCoralFan; - mappings[673] = ItemType.FireCoralFan; - mappings[674] = ItemType.HornCoralFan; - mappings[675] = ItemType.DeadTubeCoralFan; - mappings[676] = ItemType.DeadBrainCoralFan; - mappings[677] = ItemType.DeadBubbleCoralFan; - mappings[678] = ItemType.DeadFireCoralFan; - mappings[679] = ItemType.DeadHornCoralFan; - mappings[680] = ItemType.BlueIce; - mappings[681] = ItemType.Conduit; - mappings[682] = ItemType.PolishedGraniteStairs; - mappings[683] = ItemType.SmoothRedSandstoneStairs; - mappings[684] = ItemType.MossyStoneBrickStairs; - mappings[685] = ItemType.PolishedDioriteStairs; - mappings[686] = ItemType.MossyCobblestoneStairs; - mappings[687] = ItemType.EndStoneBrickStairs; - mappings[688] = ItemType.StoneStairs; - mappings[689] = ItemType.SmoothSandstoneStairs; - mappings[690] = ItemType.SmoothQuartzStairs; - mappings[691] = ItemType.GraniteStairs; - mappings[692] = ItemType.AndesiteStairs; - mappings[693] = ItemType.RedNetherBrickStairs; - mappings[694] = ItemType.PolishedAndesiteStairs; - mappings[695] = ItemType.DioriteStairs; - mappings[696] = ItemType.CobbledDeepslateStairs; - mappings[697] = ItemType.PolishedDeepslateStairs; - mappings[698] = ItemType.DeepslateBrickStairs; - mappings[699] = ItemType.DeepslateTileStairs; - mappings[700] = ItemType.PolishedGraniteSlab; - mappings[701] = ItemType.SmoothRedSandstoneSlab; - mappings[702] = ItemType.MossyStoneBrickSlab; - mappings[703] = ItemType.PolishedDioriteSlab; - mappings[704] = ItemType.MossyCobblestoneSlab; - mappings[705] = ItemType.EndStoneBrickSlab; - mappings[706] = ItemType.SmoothSandstoneSlab; - mappings[707] = ItemType.SmoothQuartzSlab; - mappings[708] = ItemType.GraniteSlab; - mappings[709] = ItemType.AndesiteSlab; - mappings[710] = ItemType.RedNetherBrickSlab; - mappings[711] = ItemType.PolishedAndesiteSlab; - mappings[712] = ItemType.DioriteSlab; - mappings[713] = ItemType.CobbledDeepslateSlab; - mappings[714] = ItemType.PolishedDeepslateSlab; - mappings[715] = ItemType.DeepslateBrickSlab; - mappings[716] = ItemType.DeepslateTileSlab; - mappings[717] = ItemType.Scaffolding; - mappings[718] = ItemType.Redstone; - mappings[719] = ItemType.RedstoneTorch; - mappings[720] = ItemType.RedstoneBlock; - mappings[721] = ItemType.Repeater; - mappings[722] = ItemType.Comparator; - mappings[723] = ItemType.Piston; - mappings[724] = ItemType.StickyPiston; - mappings[725] = ItemType.SlimeBlock; - mappings[726] = ItemType.HoneyBlock; - mappings[727] = ItemType.Observer; - mappings[728] = ItemType.Hopper; - mappings[729] = ItemType.Dispenser; - mappings[730] = ItemType.Dropper; - mappings[731] = ItemType.Lectern; - mappings[732] = ItemType.Target; - mappings[733] = ItemType.Lever; - mappings[734] = ItemType.LightningRod; - mappings[735] = ItemType.ExposedLightningRod; - mappings[736] = ItemType.WeatheredLightningRod; - mappings[737] = ItemType.OxidizedLightningRod; - mappings[738] = ItemType.WaxedLightningRod; - mappings[739] = ItemType.WaxedExposedLightningRod; - mappings[740] = ItemType.WaxedWeatheredLightningRod; - mappings[741] = ItemType.WaxedOxidizedLightningRod; - mappings[742] = ItemType.DaylightDetector; - mappings[743] = ItemType.SculkSensor; - mappings[744] = ItemType.CalibratedSculkSensor; - mappings[745] = ItemType.TripwireHook; - mappings[746] = ItemType.TrappedChest; - mappings[747] = ItemType.Tnt; - mappings[748] = ItemType.RedstoneLamp; - mappings[749] = ItemType.NoteBlock; - mappings[750] = ItemType.StoneButton; - mappings[751] = ItemType.PolishedBlackstoneButton; - mappings[752] = ItemType.OakButton; - mappings[753] = ItemType.SpruceButton; - mappings[754] = ItemType.BirchButton; - mappings[755] = ItemType.JungleButton; - mappings[756] = ItemType.AcaciaButton; - mappings[757] = ItemType.CherryButton; - mappings[758] = ItemType.DarkOakButton; - mappings[759] = ItemType.PaleOakButton; - mappings[760] = ItemType.MangroveButton; - mappings[761] = ItemType.BambooButton; - mappings[762] = ItemType.CrimsonButton; - mappings[763] = ItemType.WarpedButton; - mappings[764] = ItemType.StonePressurePlate; - mappings[765] = ItemType.PolishedBlackstonePressurePlate; - mappings[766] = ItemType.LightWeightedPressurePlate; - mappings[767] = ItemType.HeavyWeightedPressurePlate; - mappings[768] = ItemType.OakPressurePlate; - mappings[769] = ItemType.SprucePressurePlate; - mappings[770] = ItemType.BirchPressurePlate; - mappings[771] = ItemType.JunglePressurePlate; - mappings[772] = ItemType.AcaciaPressurePlate; - mappings[773] = ItemType.CherryPressurePlate; - mappings[774] = ItemType.DarkOakPressurePlate; - mappings[775] = ItemType.PaleOakPressurePlate; - mappings[776] = ItemType.MangrovePressurePlate; - mappings[777] = ItemType.BambooPressurePlate; - mappings[778] = ItemType.CrimsonPressurePlate; - mappings[779] = ItemType.WarpedPressurePlate; - mappings[780] = ItemType.IronDoor; - mappings[781] = ItemType.OakDoor; - mappings[782] = ItemType.SpruceDoor; - mappings[783] = ItemType.BirchDoor; - mappings[784] = ItemType.JungleDoor; - mappings[785] = ItemType.AcaciaDoor; - mappings[786] = ItemType.CherryDoor; - mappings[787] = ItemType.DarkOakDoor; - mappings[788] = ItemType.PaleOakDoor; - mappings[789] = ItemType.MangroveDoor; - mappings[790] = ItemType.BambooDoor; - mappings[791] = ItemType.CrimsonDoor; - mappings[792] = ItemType.WarpedDoor; - mappings[793] = ItemType.CopperDoor; - mappings[794] = ItemType.ExposedCopperDoor; - mappings[795] = ItemType.WeatheredCopperDoor; - mappings[796] = ItemType.OxidizedCopperDoor; - mappings[797] = ItemType.WaxedCopperDoor; - mappings[798] = ItemType.WaxedExposedCopperDoor; - mappings[799] = ItemType.WaxedWeatheredCopperDoor; - mappings[800] = ItemType.WaxedOxidizedCopperDoor; - mappings[801] = ItemType.IronTrapdoor; - mappings[802] = ItemType.OakTrapdoor; - mappings[803] = ItemType.SpruceTrapdoor; - mappings[804] = ItemType.BirchTrapdoor; - mappings[805] = ItemType.JungleTrapdoor; - mappings[806] = ItemType.AcaciaTrapdoor; - mappings[807] = ItemType.CherryTrapdoor; - mappings[808] = ItemType.DarkOakTrapdoor; - mappings[809] = ItemType.PaleOakTrapdoor; - mappings[810] = ItemType.MangroveTrapdoor; - mappings[811] = ItemType.BambooTrapdoor; - mappings[812] = ItemType.CrimsonTrapdoor; - mappings[813] = ItemType.WarpedTrapdoor; - mappings[814] = ItemType.CopperTrapdoor; - mappings[815] = ItemType.ExposedCopperTrapdoor; - mappings[816] = ItemType.WeatheredCopperTrapdoor; - mappings[817] = ItemType.OxidizedCopperTrapdoor; - mappings[818] = ItemType.WaxedCopperTrapdoor; - mappings[819] = ItemType.WaxedExposedCopperTrapdoor; - mappings[820] = ItemType.WaxedWeatheredCopperTrapdoor; - mappings[821] = ItemType.WaxedOxidizedCopperTrapdoor; - mappings[822] = ItemType.OakFenceGate; - mappings[823] = ItemType.SpruceFenceGate; - mappings[824] = ItemType.BirchFenceGate; - mappings[825] = ItemType.JungleFenceGate; - mappings[826] = ItemType.AcaciaFenceGate; - mappings[827] = ItemType.CherryFenceGate; - mappings[828] = ItemType.DarkOakFenceGate; - mappings[829] = ItemType.PaleOakFenceGate; - mappings[830] = ItemType.MangroveFenceGate; - mappings[831] = ItemType.BambooFenceGate; - mappings[832] = ItemType.CrimsonFenceGate; - mappings[833] = ItemType.WarpedFenceGate; - mappings[834] = ItemType.PoweredRail; - mappings[835] = ItemType.DetectorRail; - mappings[836] = ItemType.Rail; - mappings[837] = ItemType.ActivatorRail; - mappings[838] = ItemType.Saddle; - mappings[839] = ItemType.WhiteHarness; - mappings[840] = ItemType.OrangeHarness; - mappings[841] = ItemType.MagentaHarness; - mappings[842] = ItemType.LightBlueHarness; - mappings[843] = ItemType.YellowHarness; - mappings[844] = ItemType.LimeHarness; - mappings[845] = ItemType.PinkHarness; - mappings[846] = ItemType.GrayHarness; - mappings[847] = ItemType.LightGrayHarness; - mappings[848] = ItemType.CyanHarness; - mappings[849] = ItemType.PurpleHarness; - mappings[850] = ItemType.BlueHarness; - mappings[851] = ItemType.BrownHarness; - mappings[852] = ItemType.GreenHarness; - mappings[853] = ItemType.RedHarness; - mappings[854] = ItemType.BlackHarness; - mappings[855] = ItemType.Minecart; - mappings[856] = ItemType.ChestMinecart; - mappings[857] = ItemType.FurnaceMinecart; - mappings[858] = ItemType.TntMinecart; - mappings[859] = ItemType.HopperMinecart; - mappings[860] = ItemType.CarrotOnAStick; - mappings[861] = ItemType.WarpedFungusOnAStick; - mappings[862] = ItemType.PhantomMembrane; - mappings[863] = ItemType.Elytra; - mappings[864] = ItemType.OakBoat; - mappings[865] = ItemType.OakChestBoat; - mappings[866] = ItemType.SpruceBoat; - mappings[867] = ItemType.SpruceChestBoat; - mappings[868] = ItemType.BirchBoat; - mappings[869] = ItemType.BirchChestBoat; - mappings[870] = ItemType.JungleBoat; - mappings[871] = ItemType.JungleChestBoat; - mappings[872] = ItemType.AcaciaBoat; - mappings[873] = ItemType.AcaciaChestBoat; - mappings[874] = ItemType.CherryBoat; - mappings[875] = ItemType.CherryChestBoat; - mappings[876] = ItemType.DarkOakBoat; - mappings[877] = ItemType.DarkOakChestBoat; - mappings[878] = ItemType.PaleOakBoat; - mappings[879] = ItemType.PaleOakChestBoat; - mappings[880] = ItemType.MangroveBoat; - mappings[881] = ItemType.MangroveChestBoat; - mappings[882] = ItemType.BambooRaft; - mappings[883] = ItemType.BambooChestRaft; - mappings[884] = ItemType.StructureBlock; - mappings[885] = ItemType.Jigsaw; - mappings[886] = ItemType.TestBlock; - mappings[887] = ItemType.TestInstanceBlock; - mappings[888] = ItemType.TurtleHelmet; - mappings[889] = ItemType.TurtleScute; - mappings[890] = ItemType.ArmadilloScute; - mappings[891] = ItemType.WolfArmor; - mappings[892] = ItemType.FlintAndSteel; - mappings[893] = ItemType.Bowl; - mappings[894] = ItemType.Apple; - mappings[895] = ItemType.Bow; - mappings[896] = ItemType.Arrow; - mappings[897] = ItemType.Coal; - mappings[898] = ItemType.Charcoal; - mappings[899] = ItemType.Diamond; - mappings[900] = ItemType.Emerald; - mappings[901] = ItemType.LapisLazuli; - mappings[902] = ItemType.Quartz; - mappings[903] = ItemType.AmethystShard; - mappings[904] = ItemType.RawIron; - mappings[905] = ItemType.IronIngot; - mappings[906] = ItemType.RawCopper; - mappings[907] = ItemType.CopperIngot; - mappings[908] = ItemType.RawGold; - mappings[909] = ItemType.GoldIngot; - mappings[910] = ItemType.NetheriteIngot; - mappings[911] = ItemType.NetheriteScrap; - mappings[912] = ItemType.WoodenSword; - mappings[913] = ItemType.WoodenShovel; - mappings[914] = ItemType.WoodenPickaxe; - mappings[915] = ItemType.WoodenAxe; - mappings[916] = ItemType.WoodenHoe; - mappings[917] = ItemType.CopperSword; - mappings[918] = ItemType.CopperShovel; - mappings[919] = ItemType.CopperPickaxe; - mappings[920] = ItemType.CopperAxe; - mappings[921] = ItemType.CopperHoe; - mappings[922] = ItemType.StoneSword; - mappings[923] = ItemType.StoneShovel; - mappings[924] = ItemType.StonePickaxe; - mappings[925] = ItemType.StoneAxe; - mappings[926] = ItemType.StoneHoe; - mappings[927] = ItemType.GoldenSword; - mappings[928] = ItemType.GoldenShovel; - mappings[929] = ItemType.GoldenPickaxe; - mappings[930] = ItemType.GoldenAxe; - mappings[931] = ItemType.GoldenHoe; - mappings[932] = ItemType.IronSword; - mappings[933] = ItemType.IronShovel; - mappings[934] = ItemType.IronPickaxe; - mappings[935] = ItemType.IronAxe; - mappings[936] = ItemType.IronHoe; - mappings[937] = ItemType.DiamondSword; - mappings[938] = ItemType.DiamondShovel; - mappings[939] = ItemType.DiamondPickaxe; - mappings[940] = ItemType.DiamondAxe; - mappings[941] = ItemType.DiamondHoe; - mappings[942] = ItemType.NetheriteSword; - mappings[943] = ItemType.NetheriteShovel; - mappings[944] = ItemType.NetheritePickaxe; - mappings[945] = ItemType.NetheriteAxe; - mappings[946] = ItemType.NetheriteHoe; - mappings[947] = ItemType.Stick; - mappings[948] = ItemType.MushroomStew; - mappings[949] = ItemType.String; - mappings[950] = ItemType.Feather; - mappings[951] = ItemType.Gunpowder; - mappings[952] = ItemType.WheatSeeds; - mappings[953] = ItemType.Wheat; - mappings[954] = ItemType.Bread; - mappings[955] = ItemType.LeatherHelmet; - mappings[956] = ItemType.LeatherChestplate; - mappings[957] = ItemType.LeatherLeggings; - mappings[958] = ItemType.LeatherBoots; - mappings[959] = ItemType.CopperHelmet; - mappings[960] = ItemType.CopperChestplate; - mappings[961] = ItemType.CopperLeggings; - mappings[962] = ItemType.CopperBoots; - mappings[963] = ItemType.ChainmailHelmet; - mappings[964] = ItemType.ChainmailChestplate; - mappings[965] = ItemType.ChainmailLeggings; - mappings[966] = ItemType.ChainmailBoots; - mappings[967] = ItemType.IronHelmet; - mappings[968] = ItemType.IronChestplate; - mappings[969] = ItemType.IronLeggings; - mappings[970] = ItemType.IronBoots; - mappings[971] = ItemType.DiamondHelmet; - mappings[972] = ItemType.DiamondChestplate; - mappings[973] = ItemType.DiamondLeggings; - mappings[974] = ItemType.DiamondBoots; - mappings[975] = ItemType.GoldenHelmet; - mappings[976] = ItemType.GoldenChestplate; - mappings[977] = ItemType.GoldenLeggings; - mappings[978] = ItemType.GoldenBoots; - mappings[979] = ItemType.NetheriteHelmet; - mappings[980] = ItemType.NetheriteChestplate; - mappings[981] = ItemType.NetheriteLeggings; - mappings[982] = ItemType.NetheriteBoots; - mappings[983] = ItemType.Flint; - mappings[984] = ItemType.Porkchop; - mappings[985] = ItemType.CookedPorkchop; - mappings[986] = ItemType.Painting; - mappings[987] = ItemType.GoldenApple; - mappings[988] = ItemType.EnchantedGoldenApple; - mappings[989] = ItemType.OakSign; - mappings[990] = ItemType.SpruceSign; - mappings[991] = ItemType.BirchSign; - mappings[992] = ItemType.JungleSign; - mappings[993] = ItemType.AcaciaSign; - mappings[994] = ItemType.CherrySign; - mappings[995] = ItemType.DarkOakSign; - mappings[996] = ItemType.PaleOakSign; - mappings[997] = ItemType.MangroveSign; - mappings[998] = ItemType.BambooSign; - mappings[999] = ItemType.CrimsonSign; - mappings[1000] = ItemType.WarpedSign; - mappings[1001] = ItemType.OakHangingSign; - mappings[1002] = ItemType.SpruceHangingSign; - mappings[1003] = ItemType.BirchHangingSign; - mappings[1004] = ItemType.JungleHangingSign; - mappings[1005] = ItemType.AcaciaHangingSign; - mappings[1006] = ItemType.CherryHangingSign; - mappings[1007] = ItemType.DarkOakHangingSign; - mappings[1008] = ItemType.PaleOakHangingSign; - mappings[1009] = ItemType.MangroveHangingSign; - mappings[1010] = ItemType.BambooHangingSign; - mappings[1011] = ItemType.CrimsonHangingSign; - mappings[1012] = ItemType.WarpedHangingSign; - mappings[1013] = ItemType.Bucket; - mappings[1014] = ItemType.WaterBucket; - mappings[1015] = ItemType.LavaBucket; - mappings[1016] = ItemType.PowderSnowBucket; - mappings[1017] = ItemType.Snowball; - mappings[1018] = ItemType.Leather; - mappings[1019] = ItemType.MilkBucket; - mappings[1020] = ItemType.PufferfishBucket; - mappings[1021] = ItemType.SalmonBucket; - mappings[1022] = ItemType.CodBucket; - mappings[1023] = ItemType.TropicalFishBucket; - mappings[1024] = ItemType.AxolotlBucket; - mappings[1025] = ItemType.TadpoleBucket; - mappings[1026] = ItemType.Brick; - mappings[1027] = ItemType.ClayBall; - mappings[1028] = ItemType.DriedKelpBlock; - mappings[1029] = ItemType.Paper; - mappings[1030] = ItemType.Book; - mappings[1031] = ItemType.SlimeBall; - mappings[1032] = ItemType.Egg; - mappings[1033] = ItemType.BlueEgg; - mappings[1034] = ItemType.BrownEgg; - mappings[1035] = ItemType.Compass; - mappings[1036] = ItemType.RecoveryCompass; - mappings[1037] = ItemType.Bundle; - mappings[1038] = ItemType.WhiteBundle; - mappings[1039] = ItemType.OrangeBundle; - mappings[1040] = ItemType.MagentaBundle; - mappings[1041] = ItemType.LightBlueBundle; - mappings[1042] = ItemType.YellowBundle; - mappings[1043] = ItemType.LimeBundle; - mappings[1044] = ItemType.PinkBundle; - mappings[1045] = ItemType.GrayBundle; - mappings[1046] = ItemType.LightGrayBundle; - mappings[1047] = ItemType.CyanBundle; - mappings[1048] = ItemType.PurpleBundle; - mappings[1049] = ItemType.BlueBundle; - mappings[1050] = ItemType.BrownBundle; - mappings[1051] = ItemType.GreenBundle; - mappings[1052] = ItemType.RedBundle; - mappings[1053] = ItemType.BlackBundle; - mappings[1054] = ItemType.FishingRod; - mappings[1055] = ItemType.Clock; - mappings[1056] = ItemType.Spyglass; - mappings[1057] = ItemType.GlowstoneDust; - mappings[1058] = ItemType.Cod; - mappings[1059] = ItemType.Salmon; - mappings[1060] = ItemType.TropicalFish; - mappings[1061] = ItemType.Pufferfish; - mappings[1062] = ItemType.CookedCod; - mappings[1063] = ItemType.CookedSalmon; - mappings[1064] = ItemType.InkSac; - mappings[1065] = ItemType.GlowInkSac; - mappings[1066] = ItemType.CocoaBeans; - mappings[1067] = ItemType.WhiteDye; - mappings[1068] = ItemType.OrangeDye; - mappings[1069] = ItemType.MagentaDye; - mappings[1070] = ItemType.LightBlueDye; - mappings[1071] = ItemType.YellowDye; - mappings[1072] = ItemType.LimeDye; - mappings[1073] = ItemType.PinkDye; - mappings[1074] = ItemType.GrayDye; - mappings[1075] = ItemType.LightGrayDye; - mappings[1076] = ItemType.CyanDye; - mappings[1077] = ItemType.PurpleDye; - mappings[1078] = ItemType.BlueDye; - mappings[1079] = ItemType.BrownDye; - mappings[1080] = ItemType.GreenDye; - mappings[1081] = ItemType.RedDye; - mappings[1082] = ItemType.BlackDye; - mappings[1083] = ItemType.BoneMeal; - mappings[1084] = ItemType.Bone; - mappings[1085] = ItemType.Sugar; - mappings[1086] = ItemType.Cake; - mappings[1087] = ItemType.WhiteBed; - mappings[1088] = ItemType.OrangeBed; - mappings[1089] = ItemType.MagentaBed; - mappings[1090] = ItemType.LightBlueBed; - mappings[1091] = ItemType.YellowBed; - mappings[1092] = ItemType.LimeBed; - mappings[1093] = ItemType.PinkBed; - mappings[1094] = ItemType.GrayBed; - mappings[1095] = ItemType.LightGrayBed; - mappings[1096] = ItemType.CyanBed; - mappings[1097] = ItemType.PurpleBed; - mappings[1098] = ItemType.BlueBed; - mappings[1099] = ItemType.BrownBed; - mappings[1100] = ItemType.GreenBed; - mappings[1101] = ItemType.RedBed; - mappings[1102] = ItemType.BlackBed; - mappings[1103] = ItemType.Cookie; - mappings[1104] = ItemType.Crafter; - mappings[1105] = ItemType.FilledMap; - mappings[1106] = ItemType.Shears; - mappings[1107] = ItemType.MelonSlice; - mappings[1108] = ItemType.DriedKelp; - mappings[1109] = ItemType.PumpkinSeeds; - mappings[1110] = ItemType.MelonSeeds; - mappings[1111] = ItemType.Beef; - mappings[1112] = ItemType.CookedBeef; - mappings[1113] = ItemType.Chicken; - mappings[1114] = ItemType.CookedChicken; - mappings[1115] = ItemType.RottenFlesh; - mappings[1116] = ItemType.EnderPearl; - mappings[1117] = ItemType.BlazeRod; - mappings[1118] = ItemType.GhastTear; - mappings[1119] = ItemType.GoldNugget; - mappings[1120] = ItemType.NetherWart; - mappings[1121] = ItemType.GlassBottle; - mappings[1122] = ItemType.Potion; - mappings[1123] = ItemType.SpiderEye; - mappings[1124] = ItemType.FermentedSpiderEye; - mappings[1125] = ItemType.BlazePowder; - mappings[1126] = ItemType.MagmaCream; - mappings[1127] = ItemType.BrewingStand; - mappings[1128] = ItemType.Cauldron; - mappings[1129] = ItemType.EnderEye; - mappings[1130] = ItemType.GlisteringMelonSlice; - mappings[1131] = ItemType.ChickenSpawnEgg; - mappings[1132] = ItemType.CowSpawnEgg; - mappings[1133] = ItemType.PigSpawnEgg; - mappings[1134] = ItemType.SheepSpawnEgg; - mappings[1135] = ItemType.CamelSpawnEgg; - mappings[1136] = ItemType.DonkeySpawnEgg; - mappings[1137] = ItemType.HorseSpawnEgg; - mappings[1138] = ItemType.MuleSpawnEgg; - mappings[1139] = ItemType.CatSpawnEgg; - mappings[1140] = ItemType.ParrotSpawnEgg; - mappings[1141] = ItemType.WolfSpawnEgg; - mappings[1142] = ItemType.ArmadilloSpawnEgg; - mappings[1143] = ItemType.BatSpawnEgg; - mappings[1144] = ItemType.BeeSpawnEgg; - mappings[1145] = ItemType.FoxSpawnEgg; - mappings[1146] = ItemType.GoatSpawnEgg; - mappings[1147] = ItemType.LlamaSpawnEgg; - mappings[1148] = ItemType.OcelotSpawnEgg; - mappings[1149] = ItemType.PandaSpawnEgg; - mappings[1150] = ItemType.PolarBearSpawnEgg; - mappings[1151] = ItemType.RabbitSpawnEgg; - mappings[1152] = ItemType.AxolotlSpawnEgg; - mappings[1153] = ItemType.CodSpawnEgg; - mappings[1154] = ItemType.DolphinSpawnEgg; - mappings[1155] = ItemType.FrogSpawnEgg; - mappings[1156] = ItemType.GlowSquidSpawnEgg; - mappings[1157] = ItemType.NautilusSpawnEgg; - mappings[1158] = ItemType.PufferfishSpawnEgg; - mappings[1159] = ItemType.SalmonSpawnEgg; - mappings[1160] = ItemType.SquidSpawnEgg; - mappings[1161] = ItemType.TadpoleSpawnEgg; - mappings[1162] = ItemType.TropicalFishSpawnEgg; - mappings[1163] = ItemType.TurtleSpawnEgg; - mappings[1164] = ItemType.AllaySpawnEgg; - mappings[1165] = ItemType.MooshroomSpawnEgg; - mappings[1166] = ItemType.SnifferSpawnEgg; - mappings[1167] = ItemType.CopperGolemSpawnEgg; - mappings[1168] = ItemType.IronGolemSpawnEgg; - mappings[1169] = ItemType.SnowGolemSpawnEgg; - mappings[1170] = ItemType.TraderLlamaSpawnEgg; - mappings[1171] = ItemType.VillagerSpawnEgg; - mappings[1172] = ItemType.WanderingTraderSpawnEgg; - mappings[1173] = ItemType.BoggedSpawnEgg; - mappings[1174] = ItemType.CamelHuskSpawnEgg; - mappings[1175] = ItemType.DrownedSpawnEgg; - mappings[1176] = ItemType.HuskSpawnEgg; - mappings[1177] = ItemType.ParchedSpawnEgg; - mappings[1178] = ItemType.SkeletonSpawnEgg; - mappings[1179] = ItemType.SkeletonHorseSpawnEgg; - mappings[1180] = ItemType.StraySpawnEgg; - mappings[1181] = ItemType.WitherSpawnEgg; - mappings[1182] = ItemType.WitherSkeletonSpawnEgg; - mappings[1183] = ItemType.ZombieSpawnEgg; - mappings[1184] = ItemType.ZombieHorseSpawnEgg; - mappings[1185] = ItemType.ZombieNautilusSpawnEgg; - mappings[1186] = ItemType.ZombieVillagerSpawnEgg; - mappings[1187] = ItemType.CaveSpiderSpawnEgg; - mappings[1188] = ItemType.SpiderSpawnEgg; - mappings[1189] = ItemType.BreezeSpawnEgg; - mappings[1190] = ItemType.CreakingSpawnEgg; - mappings[1191] = ItemType.CreeperSpawnEgg; - mappings[1192] = ItemType.ElderGuardianSpawnEgg; - mappings[1193] = ItemType.GuardianSpawnEgg; - mappings[1194] = ItemType.PhantomSpawnEgg; - mappings[1195] = ItemType.SilverfishSpawnEgg; - mappings[1196] = ItemType.SlimeSpawnEgg; - mappings[1197] = ItemType.WardenSpawnEgg; - mappings[1198] = ItemType.WitchSpawnEgg; - mappings[1199] = ItemType.EvokerSpawnEgg; - mappings[1200] = ItemType.PillagerSpawnEgg; - mappings[1201] = ItemType.RavagerSpawnEgg; - mappings[1202] = ItemType.VindicatorSpawnEgg; - mappings[1203] = ItemType.VexSpawnEgg; - mappings[1204] = ItemType.BlazeSpawnEgg; - mappings[1205] = ItemType.GhastSpawnEgg; - mappings[1206] = ItemType.HappyGhastSpawnEgg; - mappings[1207] = ItemType.HoglinSpawnEgg; - mappings[1208] = ItemType.MagmaCubeSpawnEgg; - mappings[1209] = ItemType.PiglinSpawnEgg; - mappings[1210] = ItemType.PiglinBruteSpawnEgg; - mappings[1211] = ItemType.StriderSpawnEgg; - mappings[1212] = ItemType.ZoglinSpawnEgg; - mappings[1213] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[1214] = ItemType.EnderDragonSpawnEgg; - mappings[1215] = ItemType.EndermanSpawnEgg; - mappings[1216] = ItemType.EndermiteSpawnEgg; - mappings[1217] = ItemType.ShulkerSpawnEgg; - mappings[1218] = ItemType.ExperienceBottle; - mappings[1219] = ItemType.FireCharge; - mappings[1220] = ItemType.WindCharge; - mappings[1221] = ItemType.WritableBook; - mappings[1222] = ItemType.WrittenBook; - mappings[1223] = ItemType.BreezeRod; - mappings[1224] = ItemType.Mace; - mappings[1225] = ItemType.ItemFrame; - mappings[1226] = ItemType.GlowItemFrame; - mappings[1227] = ItemType.FlowerPot; - mappings[1228] = ItemType.Carrot; - mappings[1229] = ItemType.Potato; - mappings[1230] = ItemType.BakedPotato; - mappings[1231] = ItemType.PoisonousPotato; - mappings[1232] = ItemType.Map; - mappings[1233] = ItemType.GoldenCarrot; - mappings[1234] = ItemType.SkeletonSkull; - mappings[1235] = ItemType.WitherSkeletonSkull; - mappings[1236] = ItemType.PlayerHead; - mappings[1237] = ItemType.ZombieHead; - mappings[1238] = ItemType.CreeperHead; - mappings[1239] = ItemType.DragonHead; - mappings[1240] = ItemType.PiglinHead; - mappings[1241] = ItemType.NetherStar; - mappings[1242] = ItemType.PumpkinPie; - mappings[1243] = ItemType.FireworkRocket; - mappings[1244] = ItemType.FireworkStar; - mappings[1245] = ItemType.EnchantedBook; - mappings[1246] = ItemType.NetherBrick; - mappings[1247] = ItemType.ResinBrick; - mappings[1248] = ItemType.PrismarineShard; - mappings[1249] = ItemType.PrismarineCrystals; - mappings[1250] = ItemType.Rabbit; - mappings[1251] = ItemType.CookedRabbit; - mappings[1252] = ItemType.RabbitStew; - mappings[1253] = ItemType.RabbitFoot; - mappings[1254] = ItemType.RabbitHide; - mappings[1255] = ItemType.ArmorStand; - mappings[1256] = ItemType.CopperHorseArmor; - mappings[1257] = ItemType.IronHorseArmor; - mappings[1258] = ItemType.GoldenHorseArmor; - mappings[1259] = ItemType.DiamondHorseArmor; - mappings[1260] = ItemType.NetheriteHorseArmor; - mappings[1261] = ItemType.LeatherHorseArmor; - mappings[1262] = ItemType.Lead; - mappings[1263] = ItemType.NameTag; - mappings[1264] = ItemType.CommandBlockMinecart; - mappings[1265] = ItemType.Mutton; - mappings[1266] = ItemType.CookedMutton; - mappings[1267] = ItemType.WhiteBanner; - mappings[1268] = ItemType.OrangeBanner; - mappings[1269] = ItemType.MagentaBanner; - mappings[1270] = ItemType.LightBlueBanner; - mappings[1271] = ItemType.YellowBanner; - mappings[1272] = ItemType.LimeBanner; - mappings[1273] = ItemType.PinkBanner; - mappings[1274] = ItemType.GrayBanner; - mappings[1275] = ItemType.LightGrayBanner; - mappings[1276] = ItemType.CyanBanner; - mappings[1277] = ItemType.PurpleBanner; - mappings[1278] = ItemType.BlueBanner; - mappings[1279] = ItemType.BrownBanner; - mappings[1280] = ItemType.GreenBanner; - mappings[1281] = ItemType.RedBanner; - mappings[1282] = ItemType.BlackBanner; - mappings[1283] = ItemType.EndCrystal; - mappings[1284] = ItemType.ChorusFruit; - mappings[1285] = ItemType.PoppedChorusFruit; - mappings[1286] = ItemType.TorchflowerSeeds; - mappings[1287] = ItemType.PitcherPod; - mappings[1288] = ItemType.Beetroot; - mappings[1289] = ItemType.BeetrootSeeds; - mappings[1290] = ItemType.BeetrootSoup; - mappings[1291] = ItemType.DragonBreath; - mappings[1292] = ItemType.SplashPotion; - mappings[1293] = ItemType.SpectralArrow; - mappings[1294] = ItemType.TippedArrow; - mappings[1295] = ItemType.LingeringPotion; - mappings[1296] = ItemType.Shield; - mappings[1297] = ItemType.WoodenSpear; - mappings[1298] = ItemType.StoneSpear; - mappings[1299] = ItemType.CopperSpear; - mappings[1300] = ItemType.IronSpear; - mappings[1301] = ItemType.GoldenSpear; - mappings[1302] = ItemType.DiamondSpear; - mappings[1303] = ItemType.NetheriteSpear; - mappings[1304] = ItemType.TotemOfUndying; - mappings[1305] = ItemType.ShulkerShell; - mappings[1306] = ItemType.IronNugget; - mappings[1307] = ItemType.CopperNugget; - mappings[1308] = ItemType.KnowledgeBook; - mappings[1309] = ItemType.DebugStick; - mappings[1310] = ItemType.MusicDisc13; - mappings[1311] = ItemType.MusicDiscCat; - mappings[1312] = ItemType.MusicDiscBlocks; - mappings[1313] = ItemType.MusicDiscChirp; - mappings[1314] = ItemType.MusicDiscCreator; - mappings[1315] = ItemType.MusicDiscCreatorMusicBox; - mappings[1316] = ItemType.MusicDiscFar; - mappings[1317] = ItemType.MusicDiscLavaChicken; - mappings[1318] = ItemType.MusicDiscMall; - mappings[1319] = ItemType.MusicDiscMellohi; - mappings[1320] = ItemType.MusicDiscStal; - mappings[1321] = ItemType.MusicDiscStrad; - mappings[1322] = ItemType.MusicDiscWard; - mappings[1323] = ItemType.MusicDisc11; - mappings[1324] = ItemType.MusicDiscWait; - mappings[1325] = ItemType.MusicDiscOtherside; - mappings[1326] = ItemType.MusicDiscRelic; - mappings[1327] = ItemType.MusicDisc5; - mappings[1328] = ItemType.MusicDiscPigstep; - mappings[1329] = ItemType.MusicDiscPrecipice; - mappings[1330] = ItemType.MusicDiscTears; - mappings[1331] = ItemType.DiscFragment5; - mappings[1332] = ItemType.Trident; - mappings[1333] = ItemType.NautilusShell; - mappings[1334] = ItemType.IronNautilusArmor; - mappings[1335] = ItemType.GoldenNautilusArmor; - mappings[1336] = ItemType.DiamondNautilusArmor; - mappings[1337] = ItemType.NetheriteNautilusArmor; - mappings[1338] = ItemType.CopperNautilusArmor; - mappings[1339] = ItemType.HeartOfTheSea; - mappings[1340] = ItemType.Crossbow; - mappings[1341] = ItemType.SuspiciousStew; - mappings[1342] = ItemType.Loom; - mappings[1343] = ItemType.FlowerBannerPattern; - mappings[1344] = ItemType.CreeperBannerPattern; - mappings[1345] = ItemType.SkullBannerPattern; - mappings[1346] = ItemType.MojangBannerPattern; - mappings[1347] = ItemType.GlobeBannerPattern; - mappings[1348] = ItemType.PiglinBannerPattern; - mappings[1349] = ItemType.FlowBannerPattern; - mappings[1350] = ItemType.GusterBannerPattern; - mappings[1351] = ItemType.FieldMasonedBannerPattern; - mappings[1352] = ItemType.BordureIndentedBannerPattern; - mappings[1353] = ItemType.GoatHorn; - mappings[1354] = ItemType.Composter; - mappings[1355] = ItemType.Barrel; - mappings[1356] = ItemType.Smoker; - mappings[1357] = ItemType.BlastFurnace; - mappings[1358] = ItemType.CartographyTable; - mappings[1359] = ItemType.FletchingTable; - mappings[1360] = ItemType.Grindstone; - mappings[1361] = ItemType.SmithingTable; - mappings[1362] = ItemType.Stonecutter; - mappings[1363] = ItemType.Bell; - mappings[1364] = ItemType.Lantern; - mappings[1365] = ItemType.SoulLantern; - mappings[1366] = ItemType.CopperLantern; - mappings[1367] = ItemType.ExposedCopperLantern; - mappings[1368] = ItemType.WeatheredCopperLantern; - mappings[1369] = ItemType.OxidizedCopperLantern; - mappings[1370] = ItemType.WaxedCopperLantern; - mappings[1371] = ItemType.WaxedExposedCopperLantern; - mappings[1372] = ItemType.WaxedWeatheredCopperLantern; - mappings[1373] = ItemType.WaxedOxidizedCopperLantern; - mappings[1374] = ItemType.SweetBerries; - mappings[1375] = ItemType.GlowBerries; - mappings[1376] = ItemType.Campfire; - mappings[1377] = ItemType.SoulCampfire; - mappings[1378] = ItemType.Shroomlight; - mappings[1379] = ItemType.Honeycomb; - mappings[1380] = ItemType.BeeNest; - mappings[1381] = ItemType.Beehive; - mappings[1382] = ItemType.HoneyBottle; - mappings[1383] = ItemType.HoneycombBlock; - mappings[1384] = ItemType.Lodestone; - mappings[1385] = ItemType.CryingObsidian; - mappings[1386] = ItemType.Blackstone; - mappings[1387] = ItemType.BlackstoneSlab; - mappings[1388] = ItemType.BlackstoneStairs; - mappings[1389] = ItemType.GildedBlackstone; - mappings[1390] = ItemType.PolishedBlackstone; - mappings[1391] = ItemType.PolishedBlackstoneSlab; - mappings[1392] = ItemType.PolishedBlackstoneStairs; - mappings[1393] = ItemType.ChiseledPolishedBlackstone; - mappings[1394] = ItemType.PolishedBlackstoneBricks; - mappings[1395] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1396] = ItemType.PolishedBlackstoneBrickStairs; - mappings[1397] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[1398] = ItemType.RespawnAnchor; - mappings[1399] = ItemType.Candle; - mappings[1400] = ItemType.WhiteCandle; - mappings[1401] = ItemType.OrangeCandle; - mappings[1402] = ItemType.MagentaCandle; - mappings[1403] = ItemType.LightBlueCandle; - mappings[1404] = ItemType.YellowCandle; - mappings[1405] = ItemType.LimeCandle; - mappings[1406] = ItemType.PinkCandle; - mappings[1407] = ItemType.GrayCandle; - mappings[1408] = ItemType.LightGrayCandle; - mappings[1409] = ItemType.CyanCandle; - mappings[1410] = ItemType.PurpleCandle; - mappings[1411] = ItemType.BlueCandle; - mappings[1412] = ItemType.BrownCandle; - mappings[1413] = ItemType.GreenCandle; - mappings[1414] = ItemType.RedCandle; - mappings[1415] = ItemType.BlackCandle; - mappings[1416] = ItemType.SmallAmethystBud; - mappings[1417] = ItemType.MediumAmethystBud; - mappings[1418] = ItemType.LargeAmethystBud; - mappings[1419] = ItemType.AmethystCluster; - mappings[1420] = ItemType.PointedDripstone; - mappings[1421] = ItemType.OchreFroglight; - mappings[1422] = ItemType.VerdantFroglight; - mappings[1423] = ItemType.PearlescentFroglight; - mappings[1424] = ItemType.Frogspawn; - mappings[1425] = ItemType.EchoShard; - mappings[1426] = ItemType.Brush; - mappings[1427] = ItemType.NetheriteUpgradeSmithingTemplate; - mappings[1428] = ItemType.SentryArmorTrimSmithingTemplate; - mappings[1429] = ItemType.DuneArmorTrimSmithingTemplate; - mappings[1430] = ItemType.CoastArmorTrimSmithingTemplate; - mappings[1431] = ItemType.WildArmorTrimSmithingTemplate; - mappings[1432] = ItemType.WardArmorTrimSmithingTemplate; - mappings[1433] = ItemType.EyeArmorTrimSmithingTemplate; - mappings[1434] = ItemType.VexArmorTrimSmithingTemplate; - mappings[1435] = ItemType.TideArmorTrimSmithingTemplate; - mappings[1436] = ItemType.SnoutArmorTrimSmithingTemplate; - mappings[1437] = ItemType.RibArmorTrimSmithingTemplate; - mappings[1438] = ItemType.SpireArmorTrimSmithingTemplate; - mappings[1439] = ItemType.WayfinderArmorTrimSmithingTemplate; - mappings[1440] = ItemType.ShaperArmorTrimSmithingTemplate; - mappings[1441] = ItemType.SilenceArmorTrimSmithingTemplate; - mappings[1442] = ItemType.RaiserArmorTrimSmithingTemplate; - mappings[1443] = ItemType.HostArmorTrimSmithingTemplate; - mappings[1444] = ItemType.FlowArmorTrimSmithingTemplate; - mappings[1445] = ItemType.BoltArmorTrimSmithingTemplate; - mappings[1446] = ItemType.AnglerPotterySherd; - mappings[1447] = ItemType.ArcherPotterySherd; - mappings[1448] = ItemType.ArmsUpPotterySherd; - mappings[1449] = ItemType.BladePotterySherd; - mappings[1450] = ItemType.BrewerPotterySherd; - mappings[1451] = ItemType.BurnPotterySherd; - mappings[1452] = ItemType.DangerPotterySherd; - mappings[1453] = ItemType.ExplorerPotterySherd; - mappings[1454] = ItemType.FlowPotterySherd; - mappings[1455] = ItemType.FriendPotterySherd; - mappings[1456] = ItemType.GusterPotterySherd; - mappings[1457] = ItemType.HeartPotterySherd; - mappings[1458] = ItemType.HeartbreakPotterySherd; - mappings[1459] = ItemType.HowlPotterySherd; - mappings[1460] = ItemType.MinerPotterySherd; - mappings[1461] = ItemType.MournerPotterySherd; - mappings[1462] = ItemType.PlentyPotterySherd; - mappings[1463] = ItemType.PrizePotterySherd; - mappings[1464] = ItemType.ScrapePotterySherd; - mappings[1465] = ItemType.SheafPotterySherd; - mappings[1466] = ItemType.ShelterPotterySherd; - mappings[1467] = ItemType.SkullPotterySherd; - mappings[1468] = ItemType.SnortPotterySherd; - mappings[1469] = ItemType.CopperGrate; - mappings[1470] = ItemType.ExposedCopperGrate; - mappings[1471] = ItemType.WeatheredCopperGrate; - mappings[1472] = ItemType.OxidizedCopperGrate; - mappings[1473] = ItemType.WaxedCopperGrate; - mappings[1474] = ItemType.WaxedExposedCopperGrate; - mappings[1475] = ItemType.WaxedWeatheredCopperGrate; - mappings[1476] = ItemType.WaxedOxidizedCopperGrate; - mappings[1477] = ItemType.CopperBulb; - mappings[1478] = ItemType.ExposedCopperBulb; - mappings[1479] = ItemType.WeatheredCopperBulb; - mappings[1480] = ItemType.OxidizedCopperBulb; - mappings[1481] = ItemType.WaxedCopperBulb; - mappings[1482] = ItemType.WaxedExposedCopperBulb; - mappings[1483] = ItemType.WaxedWeatheredCopperBulb; - mappings[1484] = ItemType.WaxedOxidizedCopperBulb; - mappings[1485] = ItemType.CopperChest; - mappings[1486] = ItemType.ExposedCopperChest; - mappings[1487] = ItemType.WeatheredCopperChest; - mappings[1488] = ItemType.OxidizedCopperChest; - mappings[1489] = ItemType.WaxedCopperChest; - mappings[1490] = ItemType.WaxedExposedCopperChest; - mappings[1491] = ItemType.WaxedWeatheredCopperChest; - mappings[1492] = ItemType.WaxedOxidizedCopperChest; - mappings[1493] = ItemType.CopperGolemStatue; - mappings[1494] = ItemType.ExposedCopperGolemStatue; - mappings[1495] = ItemType.WeatheredCopperGolemStatue; - mappings[1496] = ItemType.OxidizedCopperGolemStatue; - mappings[1497] = ItemType.WaxedCopperGolemStatue; - mappings[1498] = ItemType.WaxedExposedCopperGolemStatue; - mappings[1499] = ItemType.WaxedWeatheredCopperGolemStatue; - mappings[1500] = ItemType.WaxedOxidizedCopperGolemStatue; - mappings[1501] = ItemType.TrialSpawner; - mappings[1502] = ItemType.TrialKey; - mappings[1503] = ItemType.OminousTrialKey; - mappings[1504] = ItemType.Vault; - mappings[1505] = ItemType.OminousBottle; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPalette262.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPalette262.cs deleted file mode 100644 index 9d92f488fd..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPalette262.cs +++ /dev/null @@ -1,1555 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public class ItemPalette262 : ItemPalette - { - private static readonly Dictionary mappings = new(); - - static ItemPalette262() - { - mappings[0] = ItemType.Air; - mappings[1] = ItemType.Stone; - mappings[2] = ItemType.Granite; - mappings[3] = ItemType.PolishedGranite; - mappings[4] = ItemType.Diorite; - mappings[5] = ItemType.PolishedDiorite; - mappings[6] = ItemType.Andesite; - mappings[7] = ItemType.PolishedAndesite; - mappings[8] = ItemType.Deepslate; - mappings[9] = ItemType.CobbledDeepslate; - mappings[10] = ItemType.PolishedDeepslate; - mappings[11] = ItemType.Calcite; - mappings[12] = ItemType.Tuff; - mappings[13] = ItemType.TuffSlab; - mappings[14] = ItemType.TuffStairs; - mappings[15] = ItemType.TuffWall; - mappings[16] = ItemType.ChiseledTuff; - mappings[17] = ItemType.PolishedTuff; - mappings[18] = ItemType.PolishedTuffSlab; - mappings[19] = ItemType.PolishedTuffStairs; - mappings[20] = ItemType.PolishedTuffWall; - mappings[21] = ItemType.TuffBricks; - mappings[22] = ItemType.TuffBrickSlab; - mappings[23] = ItemType.TuffBrickStairs; - mappings[24] = ItemType.TuffBrickWall; - mappings[25] = ItemType.ChiseledTuffBricks; - mappings[26] = ItemType.Sulfur; - mappings[27] = ItemType.PotentSulfur; - mappings[28] = ItemType.SulfurSlab; - mappings[29] = ItemType.SulfurStairs; - mappings[30] = ItemType.SulfurWall; - mappings[31] = ItemType.PolishedSulfur; - mappings[32] = ItemType.PolishedSulfurSlab; - mappings[33] = ItemType.PolishedSulfurStairs; - mappings[34] = ItemType.PolishedSulfurWall; - mappings[35] = ItemType.SulfurBricks; - mappings[36] = ItemType.SulfurBrickSlab; - mappings[37] = ItemType.SulfurBrickStairs; - mappings[38] = ItemType.SulfurBrickWall; - mappings[39] = ItemType.ChiseledSulfur; - mappings[40] = ItemType.Cinnabar; - mappings[41] = ItemType.CinnabarSlab; - mappings[42] = ItemType.CinnabarStairs; - mappings[43] = ItemType.CinnabarWall; - mappings[44] = ItemType.PolishedCinnabar; - mappings[45] = ItemType.PolishedCinnabarSlab; - mappings[46] = ItemType.PolishedCinnabarStairs; - mappings[47] = ItemType.PolishedCinnabarWall; - mappings[48] = ItemType.CinnabarBricks; - mappings[49] = ItemType.CinnabarBrickSlab; - mappings[50] = ItemType.CinnabarBrickStairs; - mappings[51] = ItemType.CinnabarBrickWall; - mappings[52] = ItemType.ChiseledCinnabar; - mappings[53] = ItemType.DripstoneBlock; - mappings[54] = ItemType.GrassBlock; - mappings[55] = ItemType.Dirt; - mappings[56] = ItemType.CoarseDirt; - mappings[57] = ItemType.Podzol; - mappings[58] = ItemType.RootedDirt; - mappings[59] = ItemType.Mud; - mappings[60] = ItemType.CrimsonNylium; - mappings[61] = ItemType.WarpedNylium; - mappings[62] = ItemType.Cobblestone; - mappings[63] = ItemType.OakPlanks; - mappings[64] = ItemType.SprucePlanks; - mappings[65] = ItemType.BirchPlanks; - mappings[66] = ItemType.JunglePlanks; - mappings[67] = ItemType.AcaciaPlanks; - mappings[68] = ItemType.CherryPlanks; - mappings[69] = ItemType.DarkOakPlanks; - mappings[70] = ItemType.PaleOakPlanks; - mappings[71] = ItemType.MangrovePlanks; - mappings[72] = ItemType.BambooPlanks; - mappings[73] = ItemType.CrimsonPlanks; - mappings[74] = ItemType.WarpedPlanks; - mappings[75] = ItemType.BambooMosaic; - mappings[76] = ItemType.OakSapling; - mappings[77] = ItemType.SpruceSapling; - mappings[78] = ItemType.BirchSapling; - mappings[79] = ItemType.JungleSapling; - mappings[80] = ItemType.AcaciaSapling; - mappings[81] = ItemType.CherrySapling; - mappings[82] = ItemType.DarkOakSapling; - mappings[83] = ItemType.PaleOakSapling; - mappings[84] = ItemType.MangrovePropagule; - mappings[85] = ItemType.Bedrock; - mappings[86] = ItemType.Sand; - mappings[87] = ItemType.SuspiciousSand; - mappings[88] = ItemType.SuspiciousGravel; - mappings[89] = ItemType.RedSand; - mappings[90] = ItemType.Gravel; - mappings[91] = ItemType.CoalOre; - mappings[92] = ItemType.DeepslateCoalOre; - mappings[93] = ItemType.IronOre; - mappings[94] = ItemType.DeepslateIronOre; - mappings[95] = ItemType.CopperOre; - mappings[96] = ItemType.DeepslateCopperOre; - mappings[97] = ItemType.GoldOre; - mappings[98] = ItemType.DeepslateGoldOre; - mappings[99] = ItemType.RedstoneOre; - mappings[100] = ItemType.DeepslateRedstoneOre; - mappings[101] = ItemType.EmeraldOre; - mappings[102] = ItemType.DeepslateEmeraldOre; - mappings[103] = ItemType.LapisOre; - mappings[104] = ItemType.DeepslateLapisOre; - mappings[105] = ItemType.DiamondOre; - mappings[106] = ItemType.DeepslateDiamondOre; - mappings[107] = ItemType.NetherGoldOre; - mappings[108] = ItemType.NetherQuartzOre; - mappings[109] = ItemType.AncientDebris; - mappings[110] = ItemType.CoalBlock; - mappings[111] = ItemType.RawIronBlock; - mappings[112] = ItemType.RawCopperBlock; - mappings[113] = ItemType.RawGoldBlock; - mappings[114] = ItemType.HeavyCore; - mappings[115] = ItemType.AmethystBlock; - mappings[116] = ItemType.BuddingAmethyst; - mappings[117] = ItemType.IronBlock; - mappings[118] = ItemType.CopperBlock; - mappings[119] = ItemType.ExposedCopper; - mappings[120] = ItemType.WeatheredCopper; - mappings[121] = ItemType.OxidizedCopper; - mappings[122] = ItemType.WaxedCopperBlock; - mappings[123] = ItemType.WaxedExposedCopper; - mappings[124] = ItemType.WaxedWeatheredCopper; - mappings[125] = ItemType.WaxedOxidizedCopper; - mappings[126] = ItemType.GoldBlock; - mappings[127] = ItemType.DiamondBlock; - mappings[128] = ItemType.NetheriteBlock; - mappings[129] = ItemType.ChiseledCopper; - mappings[130] = ItemType.ExposedChiseledCopper; - mappings[131] = ItemType.WeatheredChiseledCopper; - mappings[132] = ItemType.OxidizedChiseledCopper; - mappings[133] = ItemType.WaxedChiseledCopper; - mappings[134] = ItemType.WaxedExposedChiseledCopper; - mappings[135] = ItemType.WaxedWeatheredChiseledCopper; - mappings[136] = ItemType.WaxedOxidizedChiseledCopper; - mappings[137] = ItemType.CutCopper; - mappings[138] = ItemType.ExposedCutCopper; - mappings[139] = ItemType.WeatheredCutCopper; - mappings[140] = ItemType.OxidizedCutCopper; - mappings[141] = ItemType.WaxedCutCopper; - mappings[142] = ItemType.WaxedExposedCutCopper; - mappings[143] = ItemType.WaxedWeatheredCutCopper; - mappings[144] = ItemType.WaxedOxidizedCutCopper; - mappings[145] = ItemType.CutCopperStairs; - mappings[146] = ItemType.ExposedCutCopperStairs; - mappings[147] = ItemType.WeatheredCutCopperStairs; - mappings[148] = ItemType.OxidizedCutCopperStairs; - mappings[149] = ItemType.WaxedCutCopperStairs; - mappings[150] = ItemType.WaxedExposedCutCopperStairs; - mappings[151] = ItemType.WaxedWeatheredCutCopperStairs; - mappings[152] = ItemType.WaxedOxidizedCutCopperStairs; - mappings[153] = ItemType.CutCopperSlab; - mappings[154] = ItemType.ExposedCutCopperSlab; - mappings[155] = ItemType.WeatheredCutCopperSlab; - mappings[156] = ItemType.OxidizedCutCopperSlab; - mappings[157] = ItemType.WaxedCutCopperSlab; - mappings[158] = ItemType.WaxedExposedCutCopperSlab; - mappings[159] = ItemType.WaxedWeatheredCutCopperSlab; - mappings[160] = ItemType.WaxedOxidizedCutCopperSlab; - mappings[161] = ItemType.OakLog; - mappings[162] = ItemType.SpruceLog; - mappings[163] = ItemType.BirchLog; - mappings[164] = ItemType.JungleLog; - mappings[165] = ItemType.AcaciaLog; - mappings[166] = ItemType.CherryLog; - mappings[167] = ItemType.PaleOakLog; - mappings[168] = ItemType.DarkOakLog; - mappings[169] = ItemType.MangroveLog; - mappings[170] = ItemType.MangroveRoots; - mappings[171] = ItemType.MuddyMangroveRoots; - mappings[172] = ItemType.CrimsonStem; - mappings[173] = ItemType.WarpedStem; - mappings[174] = ItemType.BambooBlock; - mappings[175] = ItemType.StrippedOakLog; - mappings[176] = ItemType.StrippedSpruceLog; - mappings[177] = ItemType.StrippedBirchLog; - mappings[178] = ItemType.StrippedJungleLog; - mappings[179] = ItemType.StrippedAcaciaLog; - mappings[180] = ItemType.StrippedCherryLog; - mappings[181] = ItemType.StrippedDarkOakLog; - mappings[182] = ItemType.StrippedPaleOakLog; - mappings[183] = ItemType.StrippedMangroveLog; - mappings[184] = ItemType.StrippedCrimsonStem; - mappings[185] = ItemType.StrippedWarpedStem; - mappings[186] = ItemType.StrippedOakWood; - mappings[187] = ItemType.StrippedSpruceWood; - mappings[188] = ItemType.StrippedBirchWood; - mappings[189] = ItemType.StrippedJungleWood; - mappings[190] = ItemType.StrippedAcaciaWood; - mappings[191] = ItemType.StrippedCherryWood; - mappings[192] = ItemType.StrippedDarkOakWood; - mappings[193] = ItemType.StrippedPaleOakWood; - mappings[194] = ItemType.StrippedMangroveWood; - mappings[195] = ItemType.StrippedCrimsonHyphae; - mappings[196] = ItemType.StrippedWarpedHyphae; - mappings[197] = ItemType.StrippedBambooBlock; - mappings[198] = ItemType.OakWood; - mappings[199] = ItemType.SpruceWood; - mappings[200] = ItemType.BirchWood; - mappings[201] = ItemType.JungleWood; - mappings[202] = ItemType.AcaciaWood; - mappings[203] = ItemType.CherryWood; - mappings[204] = ItemType.PaleOakWood; - mappings[205] = ItemType.DarkOakWood; - mappings[206] = ItemType.MangroveWood; - mappings[207] = ItemType.CrimsonHyphae; - mappings[208] = ItemType.WarpedHyphae; - mappings[209] = ItemType.OakLeaves; - mappings[210] = ItemType.SpruceLeaves; - mappings[211] = ItemType.BirchLeaves; - mappings[212] = ItemType.JungleLeaves; - mappings[213] = ItemType.AcaciaLeaves; - mappings[214] = ItemType.CherryLeaves; - mappings[215] = ItemType.DarkOakLeaves; - mappings[216] = ItemType.PaleOakLeaves; - mappings[217] = ItemType.MangroveLeaves; - mappings[218] = ItemType.AzaleaLeaves; - mappings[219] = ItemType.FloweringAzaleaLeaves; - mappings[220] = ItemType.Sponge; - mappings[221] = ItemType.WetSponge; - mappings[222] = ItemType.Glass; - mappings[223] = ItemType.TintedGlass; - mappings[224] = ItemType.LapisBlock; - mappings[225] = ItemType.Sandstone; - mappings[226] = ItemType.ChiseledSandstone; - mappings[227] = ItemType.CutSandstone; - mappings[228] = ItemType.Cobweb; - mappings[229] = ItemType.ShortGrass; - mappings[230] = ItemType.Fern; - mappings[231] = ItemType.Bush; - mappings[232] = ItemType.Azalea; - mappings[233] = ItemType.FloweringAzalea; - mappings[234] = ItemType.DeadBush; - mappings[235] = ItemType.FireflyBush; - mappings[236] = ItemType.ShortDryGrass; - mappings[237] = ItemType.TallDryGrass; - mappings[238] = ItemType.Seagrass; - mappings[239] = ItemType.SeaPickle; - mappings[240] = ItemType.WhiteWool; - mappings[241] = ItemType.OrangeWool; - mappings[242] = ItemType.MagentaWool; - mappings[243] = ItemType.LightBlueWool; - mappings[244] = ItemType.YellowWool; - mappings[245] = ItemType.LimeWool; - mappings[246] = ItemType.PinkWool; - mappings[247] = ItemType.GrayWool; - mappings[248] = ItemType.LightGrayWool; - mappings[249] = ItemType.CyanWool; - mappings[250] = ItemType.PurpleWool; - mappings[251] = ItemType.BlueWool; - mappings[252] = ItemType.BrownWool; - mappings[253] = ItemType.GreenWool; - mappings[254] = ItemType.RedWool; - mappings[255] = ItemType.BlackWool; - mappings[256] = ItemType.Dandelion; - mappings[257] = ItemType.GoldenDandelion; - mappings[258] = ItemType.OpenEyeblossom; - mappings[259] = ItemType.ClosedEyeblossom; - mappings[260] = ItemType.Poppy; - mappings[261] = ItemType.BlueOrchid; - mappings[262] = ItemType.Allium; - mappings[263] = ItemType.AzureBluet; - mappings[264] = ItemType.RedTulip; - mappings[265] = ItemType.OrangeTulip; - mappings[266] = ItemType.WhiteTulip; - mappings[267] = ItemType.PinkTulip; - mappings[268] = ItemType.OxeyeDaisy; - mappings[269] = ItemType.Cornflower; - mappings[270] = ItemType.LilyOfTheValley; - mappings[271] = ItemType.WitherRose; - mappings[272] = ItemType.Torchflower; - mappings[273] = ItemType.PitcherPlant; - mappings[274] = ItemType.SporeBlossom; - mappings[275] = ItemType.BrownMushroom; - mappings[276] = ItemType.RedMushroom; - mappings[277] = ItemType.CrimsonFungus; - mappings[278] = ItemType.WarpedFungus; - mappings[279] = ItemType.CrimsonRoots; - mappings[280] = ItemType.WarpedRoots; - mappings[281] = ItemType.NetherSprouts; - mappings[282] = ItemType.WeepingVines; - mappings[283] = ItemType.TwistingVines; - mappings[284] = ItemType.SugarCane; - mappings[285] = ItemType.Kelp; - mappings[286] = ItemType.PinkPetals; - mappings[287] = ItemType.Wildflowers; - mappings[288] = ItemType.LeafLitter; - mappings[289] = ItemType.MossCarpet; - mappings[290] = ItemType.MossBlock; - mappings[291] = ItemType.PaleMossCarpet; - mappings[292] = ItemType.PaleHangingMoss; - mappings[293] = ItemType.PaleMossBlock; - mappings[294] = ItemType.HangingRoots; - mappings[295] = ItemType.BigDripleaf; - mappings[296] = ItemType.SmallDripleaf; - mappings[297] = ItemType.Bamboo; - mappings[298] = ItemType.OakSlab; - mappings[299] = ItemType.SpruceSlab; - mappings[300] = ItemType.BirchSlab; - mappings[301] = ItemType.JungleSlab; - mappings[302] = ItemType.AcaciaSlab; - mappings[303] = ItemType.CherrySlab; - mappings[304] = ItemType.DarkOakSlab; - mappings[305] = ItemType.PaleOakSlab; - mappings[306] = ItemType.MangroveSlab; - mappings[307] = ItemType.BambooSlab; - mappings[308] = ItemType.BambooMosaicSlab; - mappings[309] = ItemType.CrimsonSlab; - mappings[310] = ItemType.WarpedSlab; - mappings[311] = ItemType.StoneSlab; - mappings[312] = ItemType.SmoothStoneSlab; - mappings[313] = ItemType.SandstoneSlab; - mappings[314] = ItemType.CutSandstoneSlab; - mappings[315] = ItemType.PetrifiedOakSlab; - mappings[316] = ItemType.CobblestoneSlab; - mappings[317] = ItemType.BrickSlab; - mappings[318] = ItemType.StoneBrickSlab; - mappings[319] = ItemType.MudBrickSlab; - mappings[320] = ItemType.NetherBrickSlab; - mappings[321] = ItemType.QuartzSlab; - mappings[322] = ItemType.RedSandstoneSlab; - mappings[323] = ItemType.CutRedSandstoneSlab; - mappings[324] = ItemType.PurpurSlab; - mappings[325] = ItemType.PrismarineSlab; - mappings[326] = ItemType.PrismarineBrickSlab; - mappings[327] = ItemType.DarkPrismarineSlab; - mappings[328] = ItemType.SmoothQuartz; - mappings[329] = ItemType.SmoothRedSandstone; - mappings[330] = ItemType.SmoothSandstone; - mappings[331] = ItemType.SmoothStone; - mappings[332] = ItemType.Bricks; - mappings[333] = ItemType.AcaciaShelf; - mappings[334] = ItemType.BambooShelf; - mappings[335] = ItemType.BirchShelf; - mappings[336] = ItemType.CherryShelf; - mappings[337] = ItemType.CrimsonShelf; - mappings[338] = ItemType.DarkOakShelf; - mappings[339] = ItemType.JungleShelf; - mappings[340] = ItemType.MangroveShelf; - mappings[341] = ItemType.OakShelf; - mappings[342] = ItemType.PaleOakShelf; - mappings[343] = ItemType.SpruceShelf; - mappings[344] = ItemType.WarpedShelf; - mappings[345] = ItemType.Bookshelf; - mappings[346] = ItemType.ChiseledBookshelf; - mappings[347] = ItemType.DecoratedPot; - mappings[348] = ItemType.MossyCobblestone; - mappings[349] = ItemType.Obsidian; - mappings[350] = ItemType.Torch; - mappings[351] = ItemType.EndRod; - mappings[352] = ItemType.ChorusPlant; - mappings[353] = ItemType.ChorusFlower; - mappings[354] = ItemType.PurpurBlock; - mappings[355] = ItemType.PurpurPillar; - mappings[356] = ItemType.PurpurStairs; - mappings[357] = ItemType.Spawner; - mappings[358] = ItemType.CreakingHeart; - mappings[359] = ItemType.Chest; - mappings[360] = ItemType.CraftingTable; - mappings[361] = ItemType.Farmland; - mappings[362] = ItemType.Furnace; - mappings[363] = ItemType.Ladder; - mappings[364] = ItemType.CobblestoneStairs; - mappings[365] = ItemType.Snow; - mappings[366] = ItemType.Ice; - mappings[367] = ItemType.SnowBlock; - mappings[368] = ItemType.Cactus; - mappings[369] = ItemType.CactusFlower; - mappings[370] = ItemType.Clay; - mappings[371] = ItemType.Jukebox; - mappings[372] = ItemType.OakFence; - mappings[373] = ItemType.SpruceFence; - mappings[374] = ItemType.BirchFence; - mappings[375] = ItemType.JungleFence; - mappings[376] = ItemType.AcaciaFence; - mappings[377] = ItemType.CherryFence; - mappings[378] = ItemType.DarkOakFence; - mappings[379] = ItemType.PaleOakFence; - mappings[380] = ItemType.MangroveFence; - mappings[381] = ItemType.BambooFence; - mappings[382] = ItemType.CrimsonFence; - mappings[383] = ItemType.WarpedFence; - mappings[384] = ItemType.Pumpkin; - mappings[385] = ItemType.CarvedPumpkin; - mappings[386] = ItemType.JackOLantern; - mappings[387] = ItemType.Netherrack; - mappings[388] = ItemType.SoulSand; - mappings[389] = ItemType.SoulSoil; - mappings[390] = ItemType.Basalt; - mappings[391] = ItemType.PolishedBasalt; - mappings[392] = ItemType.SmoothBasalt; - mappings[393] = ItemType.SoulTorch; - mappings[394] = ItemType.CopperTorch; - mappings[395] = ItemType.Glowstone; - mappings[396] = ItemType.InfestedStone; - mappings[397] = ItemType.InfestedCobblestone; - mappings[398] = ItemType.InfestedStoneBricks; - mappings[399] = ItemType.InfestedMossyStoneBricks; - mappings[400] = ItemType.InfestedCrackedStoneBricks; - mappings[401] = ItemType.InfestedChiseledStoneBricks; - mappings[402] = ItemType.InfestedDeepslate; - mappings[403] = ItemType.StoneBricks; - mappings[404] = ItemType.MossyStoneBricks; - mappings[405] = ItemType.CrackedStoneBricks; - mappings[406] = ItemType.ChiseledStoneBricks; - mappings[407] = ItemType.PackedMud; - mappings[408] = ItemType.MudBricks; - mappings[409] = ItemType.DeepslateBricks; - mappings[410] = ItemType.CrackedDeepslateBricks; - mappings[411] = ItemType.DeepslateTiles; - mappings[412] = ItemType.CrackedDeepslateTiles; - mappings[413] = ItemType.ChiseledDeepslate; - mappings[414] = ItemType.ReinforcedDeepslate; - mappings[415] = ItemType.BrownMushroomBlock; - mappings[416] = ItemType.RedMushroomBlock; - mappings[417] = ItemType.MushroomStem; - mappings[418] = ItemType.IronBars; - mappings[419] = ItemType.CopperBars; - mappings[420] = ItemType.ExposedCopperBars; - mappings[421] = ItemType.WeatheredCopperBars; - mappings[422] = ItemType.OxidizedCopperBars; - mappings[423] = ItemType.WaxedCopperBars; - mappings[424] = ItemType.WaxedExposedCopperBars; - mappings[425] = ItemType.WaxedWeatheredCopperBars; - mappings[426] = ItemType.WaxedOxidizedCopperBars; - mappings[427] = ItemType.IronChain; - mappings[428] = ItemType.CopperChain; - mappings[429] = ItemType.ExposedCopperChain; - mappings[430] = ItemType.WeatheredCopperChain; - mappings[431] = ItemType.OxidizedCopperChain; - mappings[432] = ItemType.WaxedCopperChain; - mappings[433] = ItemType.WaxedExposedCopperChain; - mappings[434] = ItemType.WaxedWeatheredCopperChain; - mappings[435] = ItemType.WaxedOxidizedCopperChain; - mappings[436] = ItemType.GlassPane; - mappings[437] = ItemType.Melon; - mappings[438] = ItemType.Vine; - mappings[439] = ItemType.GlowLichen; - mappings[440] = ItemType.ResinClump; - mappings[441] = ItemType.ResinBlock; - mappings[442] = ItemType.ResinBricks; - mappings[443] = ItemType.ResinBrickStairs; - mappings[444] = ItemType.ResinBrickSlab; - mappings[445] = ItemType.ResinBrickWall; - mappings[446] = ItemType.ChiseledResinBricks; - mappings[447] = ItemType.BrickStairs; - mappings[448] = ItemType.StoneBrickStairs; - mappings[449] = ItemType.MudBrickStairs; - mappings[450] = ItemType.Mycelium; - mappings[451] = ItemType.LilyPad; - mappings[452] = ItemType.NetherBricks; - mappings[453] = ItemType.CrackedNetherBricks; - mappings[454] = ItemType.ChiseledNetherBricks; - mappings[455] = ItemType.NetherBrickFence; - mappings[456] = ItemType.NetherBrickStairs; - mappings[457] = ItemType.Sculk; - mappings[458] = ItemType.SculkVein; - mappings[459] = ItemType.SculkCatalyst; - mappings[460] = ItemType.SculkShrieker; - mappings[461] = ItemType.EnchantingTable; - mappings[462] = ItemType.EndPortalFrame; - mappings[463] = ItemType.EndStone; - mappings[464] = ItemType.EndStoneBricks; - mappings[465] = ItemType.DragonEgg; - mappings[466] = ItemType.SandstoneStairs; - mappings[467] = ItemType.EnderChest; - mappings[468] = ItemType.EmeraldBlock; - mappings[469] = ItemType.OakStairs; - mappings[470] = ItemType.SpruceStairs; - mappings[471] = ItemType.BirchStairs; - mappings[472] = ItemType.JungleStairs; - mappings[473] = ItemType.AcaciaStairs; - mappings[474] = ItemType.CherryStairs; - mappings[475] = ItemType.DarkOakStairs; - mappings[476] = ItemType.PaleOakStairs; - mappings[477] = ItemType.MangroveStairs; - mappings[478] = ItemType.BambooStairs; - mappings[479] = ItemType.BambooMosaicStairs; - mappings[480] = ItemType.CrimsonStairs; - mappings[481] = ItemType.WarpedStairs; - mappings[482] = ItemType.CommandBlock; - mappings[483] = ItemType.Beacon; - mappings[484] = ItemType.CobblestoneWall; - mappings[485] = ItemType.MossyCobblestoneWall; - mappings[486] = ItemType.BrickWall; - mappings[487] = ItemType.PrismarineWall; - mappings[488] = ItemType.RedSandstoneWall; - mappings[489] = ItemType.MossyStoneBrickWall; - mappings[490] = ItemType.GraniteWall; - mappings[491] = ItemType.StoneBrickWall; - mappings[492] = ItemType.MudBrickWall; - mappings[493] = ItemType.NetherBrickWall; - mappings[494] = ItemType.AndesiteWall; - mappings[495] = ItemType.RedNetherBrickWall; - mappings[496] = ItemType.SandstoneWall; - mappings[497] = ItemType.EndStoneBrickWall; - mappings[498] = ItemType.DioriteWall; - mappings[499] = ItemType.BlackstoneWall; - mappings[500] = ItemType.PolishedBlackstoneWall; - mappings[501] = ItemType.PolishedBlackstoneBrickWall; - mappings[502] = ItemType.CobbledDeepslateWall; - mappings[503] = ItemType.PolishedDeepslateWall; - mappings[504] = ItemType.DeepslateBrickWall; - mappings[505] = ItemType.DeepslateTileWall; - mappings[506] = ItemType.Anvil; - mappings[507] = ItemType.ChippedAnvil; - mappings[508] = ItemType.DamagedAnvil; - mappings[509] = ItemType.ChiseledQuartzBlock; - mappings[510] = ItemType.QuartzBlock; - mappings[511] = ItemType.QuartzBricks; - mappings[512] = ItemType.QuartzPillar; - mappings[513] = ItemType.QuartzStairs; - mappings[514] = ItemType.WhiteTerracotta; - mappings[515] = ItemType.OrangeTerracotta; - mappings[516] = ItemType.MagentaTerracotta; - mappings[517] = ItemType.LightBlueTerracotta; - mappings[518] = ItemType.YellowTerracotta; - mappings[519] = ItemType.LimeTerracotta; - mappings[520] = ItemType.PinkTerracotta; - mappings[521] = ItemType.GrayTerracotta; - mappings[522] = ItemType.LightGrayTerracotta; - mappings[523] = ItemType.CyanTerracotta; - mappings[524] = ItemType.PurpleTerracotta; - mappings[525] = ItemType.BlueTerracotta; - mappings[526] = ItemType.BrownTerracotta; - mappings[527] = ItemType.GreenTerracotta; - mappings[528] = ItemType.RedTerracotta; - mappings[529] = ItemType.BlackTerracotta; - mappings[530] = ItemType.Barrier; - mappings[531] = ItemType.Light; - mappings[532] = ItemType.HayBlock; - mappings[533] = ItemType.WhiteCarpet; - mappings[534] = ItemType.OrangeCarpet; - mappings[535] = ItemType.MagentaCarpet; - mappings[536] = ItemType.LightBlueCarpet; - mappings[537] = ItemType.YellowCarpet; - mappings[538] = ItemType.LimeCarpet; - mappings[539] = ItemType.PinkCarpet; - mappings[540] = ItemType.GrayCarpet; - mappings[541] = ItemType.LightGrayCarpet; - mappings[542] = ItemType.CyanCarpet; - mappings[543] = ItemType.PurpleCarpet; - mappings[544] = ItemType.BlueCarpet; - mappings[545] = ItemType.BrownCarpet; - mappings[546] = ItemType.GreenCarpet; - mappings[547] = ItemType.RedCarpet; - mappings[548] = ItemType.BlackCarpet; - mappings[549] = ItemType.Terracotta; - mappings[550] = ItemType.PackedIce; - mappings[551] = ItemType.DirtPath; - mappings[552] = ItemType.Sunflower; - mappings[553] = ItemType.Lilac; - mappings[554] = ItemType.RoseBush; - mappings[555] = ItemType.Peony; - mappings[556] = ItemType.TallGrass; - mappings[557] = ItemType.LargeFern; - mappings[558] = ItemType.WhiteStainedGlass; - mappings[559] = ItemType.OrangeStainedGlass; - mappings[560] = ItemType.MagentaStainedGlass; - mappings[561] = ItemType.LightBlueStainedGlass; - mappings[562] = ItemType.YellowStainedGlass; - mappings[563] = ItemType.LimeStainedGlass; - mappings[564] = ItemType.PinkStainedGlass; - mappings[565] = ItemType.GrayStainedGlass; - mappings[566] = ItemType.LightGrayStainedGlass; - mappings[567] = ItemType.CyanStainedGlass; - mappings[568] = ItemType.PurpleStainedGlass; - mappings[569] = ItemType.BlueStainedGlass; - mappings[570] = ItemType.BrownStainedGlass; - mappings[571] = ItemType.GreenStainedGlass; - mappings[572] = ItemType.RedStainedGlass; - mappings[573] = ItemType.BlackStainedGlass; - mappings[574] = ItemType.WhiteStainedGlassPane; - mappings[575] = ItemType.OrangeStainedGlassPane; - mappings[576] = ItemType.MagentaStainedGlassPane; - mappings[577] = ItemType.LightBlueStainedGlassPane; - mappings[578] = ItemType.YellowStainedGlassPane; - mappings[579] = ItemType.LimeStainedGlassPane; - mappings[580] = ItemType.PinkStainedGlassPane; - mappings[581] = ItemType.GrayStainedGlassPane; - mappings[582] = ItemType.LightGrayStainedGlassPane; - mappings[583] = ItemType.CyanStainedGlassPane; - mappings[584] = ItemType.PurpleStainedGlassPane; - mappings[585] = ItemType.BlueStainedGlassPane; - mappings[586] = ItemType.BrownStainedGlassPane; - mappings[587] = ItemType.GreenStainedGlassPane; - mappings[588] = ItemType.RedStainedGlassPane; - mappings[589] = ItemType.BlackStainedGlassPane; - mappings[590] = ItemType.Prismarine; - mappings[591] = ItemType.PrismarineBricks; - mappings[592] = ItemType.DarkPrismarine; - mappings[593] = ItemType.PrismarineStairs; - mappings[594] = ItemType.PrismarineBrickStairs; - mappings[595] = ItemType.DarkPrismarineStairs; - mappings[596] = ItemType.SeaLantern; - mappings[597] = ItemType.RedSandstone; - mappings[598] = ItemType.ChiseledRedSandstone; - mappings[599] = ItemType.CutRedSandstone; - mappings[600] = ItemType.RedSandstoneStairs; - mappings[601] = ItemType.RepeatingCommandBlock; - mappings[602] = ItemType.ChainCommandBlock; - mappings[603] = ItemType.MagmaBlock; - mappings[604] = ItemType.NetherWartBlock; - mappings[605] = ItemType.WarpedWartBlock; - mappings[606] = ItemType.RedNetherBricks; - mappings[607] = ItemType.BoneBlock; - mappings[608] = ItemType.StructureVoid; - mappings[609] = ItemType.ShulkerBox; - mappings[610] = ItemType.WhiteShulkerBox; - mappings[611] = ItemType.OrangeShulkerBox; - mappings[612] = ItemType.MagentaShulkerBox; - mappings[613] = ItemType.LightBlueShulkerBox; - mappings[614] = ItemType.YellowShulkerBox; - mappings[615] = ItemType.LimeShulkerBox; - mappings[616] = ItemType.PinkShulkerBox; - mappings[617] = ItemType.GrayShulkerBox; - mappings[618] = ItemType.LightGrayShulkerBox; - mappings[619] = ItemType.CyanShulkerBox; - mappings[620] = ItemType.PurpleShulkerBox; - mappings[621] = ItemType.BlueShulkerBox; - mappings[622] = ItemType.BrownShulkerBox; - mappings[623] = ItemType.GreenShulkerBox; - mappings[624] = ItemType.RedShulkerBox; - mappings[625] = ItemType.BlackShulkerBox; - mappings[626] = ItemType.WhiteGlazedTerracotta; - mappings[627] = ItemType.OrangeGlazedTerracotta; - mappings[628] = ItemType.MagentaGlazedTerracotta; - mappings[629] = ItemType.LightBlueGlazedTerracotta; - mappings[630] = ItemType.YellowGlazedTerracotta; - mappings[631] = ItemType.LimeGlazedTerracotta; - mappings[632] = ItemType.PinkGlazedTerracotta; - mappings[633] = ItemType.GrayGlazedTerracotta; - mappings[634] = ItemType.LightGrayGlazedTerracotta; - mappings[635] = ItemType.CyanGlazedTerracotta; - mappings[636] = ItemType.PurpleGlazedTerracotta; - mappings[637] = ItemType.BlueGlazedTerracotta; - mappings[638] = ItemType.BrownGlazedTerracotta; - mappings[639] = ItemType.GreenGlazedTerracotta; - mappings[640] = ItemType.RedGlazedTerracotta; - mappings[641] = ItemType.BlackGlazedTerracotta; - mappings[642] = ItemType.WhiteConcrete; - mappings[643] = ItemType.OrangeConcrete; - mappings[644] = ItemType.MagentaConcrete; - mappings[645] = ItemType.LightBlueConcrete; - mappings[646] = ItemType.YellowConcrete; - mappings[647] = ItemType.LimeConcrete; - mappings[648] = ItemType.PinkConcrete; - mappings[649] = ItemType.GrayConcrete; - mappings[650] = ItemType.LightGrayConcrete; - mappings[651] = ItemType.CyanConcrete; - mappings[652] = ItemType.PurpleConcrete; - mappings[653] = ItemType.BlueConcrete; - mappings[654] = ItemType.BrownConcrete; - mappings[655] = ItemType.GreenConcrete; - mappings[656] = ItemType.RedConcrete; - mappings[657] = ItemType.BlackConcrete; - mappings[658] = ItemType.WhiteConcretePowder; - mappings[659] = ItemType.OrangeConcretePowder; - mappings[660] = ItemType.MagentaConcretePowder; - mappings[661] = ItemType.LightBlueConcretePowder; - mappings[662] = ItemType.YellowConcretePowder; - mappings[663] = ItemType.LimeConcretePowder; - mappings[664] = ItemType.PinkConcretePowder; - mappings[665] = ItemType.GrayConcretePowder; - mappings[666] = ItemType.LightGrayConcretePowder; - mappings[667] = ItemType.CyanConcretePowder; - mappings[668] = ItemType.PurpleConcretePowder; - mappings[669] = ItemType.BlueConcretePowder; - mappings[670] = ItemType.BrownConcretePowder; - mappings[671] = ItemType.GreenConcretePowder; - mappings[672] = ItemType.RedConcretePowder; - mappings[673] = ItemType.BlackConcretePowder; - mappings[674] = ItemType.TurtleEgg; - mappings[675] = ItemType.SnifferEgg; - mappings[676] = ItemType.DriedGhast; - mappings[677] = ItemType.DeadTubeCoralBlock; - mappings[678] = ItemType.DeadBrainCoralBlock; - mappings[679] = ItemType.DeadBubbleCoralBlock; - mappings[680] = ItemType.DeadFireCoralBlock; - mappings[681] = ItemType.DeadHornCoralBlock; - mappings[682] = ItemType.TubeCoralBlock; - mappings[683] = ItemType.BrainCoralBlock; - mappings[684] = ItemType.BubbleCoralBlock; - mappings[685] = ItemType.FireCoralBlock; - mappings[686] = ItemType.HornCoralBlock; - mappings[687] = ItemType.TubeCoral; - mappings[688] = ItemType.BrainCoral; - mappings[689] = ItemType.BubbleCoral; - mappings[690] = ItemType.FireCoral; - mappings[691] = ItemType.HornCoral; - mappings[692] = ItemType.DeadBrainCoral; - mappings[693] = ItemType.DeadBubbleCoral; - mappings[694] = ItemType.DeadFireCoral; - mappings[695] = ItemType.DeadHornCoral; - mappings[696] = ItemType.DeadTubeCoral; - mappings[697] = ItemType.TubeCoralFan; - mappings[698] = ItemType.BrainCoralFan; - mappings[699] = ItemType.BubbleCoralFan; - mappings[700] = ItemType.FireCoralFan; - mappings[701] = ItemType.HornCoralFan; - mappings[702] = ItemType.DeadTubeCoralFan; - mappings[703] = ItemType.DeadBrainCoralFan; - mappings[704] = ItemType.DeadBubbleCoralFan; - mappings[705] = ItemType.DeadFireCoralFan; - mappings[706] = ItemType.DeadHornCoralFan; - mappings[707] = ItemType.BlueIce; - mappings[708] = ItemType.Conduit; - mappings[709] = ItemType.PolishedGraniteStairs; - mappings[710] = ItemType.SmoothRedSandstoneStairs; - mappings[711] = ItemType.MossyStoneBrickStairs; - mappings[712] = ItemType.PolishedDioriteStairs; - mappings[713] = ItemType.MossyCobblestoneStairs; - mappings[714] = ItemType.EndStoneBrickStairs; - mappings[715] = ItemType.StoneStairs; - mappings[716] = ItemType.SmoothSandstoneStairs; - mappings[717] = ItemType.SmoothQuartzStairs; - mappings[718] = ItemType.GraniteStairs; - mappings[719] = ItemType.AndesiteStairs; - mappings[720] = ItemType.RedNetherBrickStairs; - mappings[721] = ItemType.PolishedAndesiteStairs; - mappings[722] = ItemType.DioriteStairs; - mappings[723] = ItemType.CobbledDeepslateStairs; - mappings[724] = ItemType.PolishedDeepslateStairs; - mappings[725] = ItemType.DeepslateBrickStairs; - mappings[726] = ItemType.DeepslateTileStairs; - mappings[727] = ItemType.PolishedGraniteSlab; - mappings[728] = ItemType.SmoothRedSandstoneSlab; - mappings[729] = ItemType.MossyStoneBrickSlab; - mappings[730] = ItemType.PolishedDioriteSlab; - mappings[731] = ItemType.MossyCobblestoneSlab; - mappings[732] = ItemType.EndStoneBrickSlab; - mappings[733] = ItemType.SmoothSandstoneSlab; - mappings[734] = ItemType.SmoothQuartzSlab; - mappings[735] = ItemType.GraniteSlab; - mappings[736] = ItemType.AndesiteSlab; - mappings[737] = ItemType.RedNetherBrickSlab; - mappings[738] = ItemType.PolishedAndesiteSlab; - mappings[739] = ItemType.DioriteSlab; - mappings[740] = ItemType.CobbledDeepslateSlab; - mappings[741] = ItemType.PolishedDeepslateSlab; - mappings[742] = ItemType.DeepslateBrickSlab; - mappings[743] = ItemType.DeepslateTileSlab; - mappings[744] = ItemType.Scaffolding; - mappings[745] = ItemType.Redstone; - mappings[746] = ItemType.RedstoneTorch; - mappings[747] = ItemType.RedstoneBlock; - mappings[748] = ItemType.Repeater; - mappings[749] = ItemType.Comparator; - mappings[750] = ItemType.Piston; - mappings[751] = ItemType.StickyPiston; - mappings[752] = ItemType.SlimeBlock; - mappings[753] = ItemType.HoneyBlock; - mappings[754] = ItemType.Observer; - mappings[755] = ItemType.Hopper; - mappings[756] = ItemType.Dispenser; - mappings[757] = ItemType.Dropper; - mappings[758] = ItemType.Lectern; - mappings[759] = ItemType.Target; - mappings[760] = ItemType.Lever; - mappings[761] = ItemType.LightningRod; - mappings[762] = ItemType.ExposedLightningRod; - mappings[763] = ItemType.WeatheredLightningRod; - mappings[764] = ItemType.OxidizedLightningRod; - mappings[765] = ItemType.WaxedLightningRod; - mappings[766] = ItemType.WaxedExposedLightningRod; - mappings[767] = ItemType.WaxedWeatheredLightningRod; - mappings[768] = ItemType.WaxedOxidizedLightningRod; - mappings[769] = ItemType.DaylightDetector; - mappings[770] = ItemType.SculkSensor; - mappings[771] = ItemType.CalibratedSculkSensor; - mappings[772] = ItemType.TripwireHook; - mappings[773] = ItemType.TrappedChest; - mappings[774] = ItemType.Tnt; - mappings[775] = ItemType.RedstoneLamp; - mappings[776] = ItemType.NoteBlock; - mappings[777] = ItemType.StoneButton; - mappings[778] = ItemType.PolishedBlackstoneButton; - mappings[779] = ItemType.OakButton; - mappings[780] = ItemType.SpruceButton; - mappings[781] = ItemType.BirchButton; - mappings[782] = ItemType.JungleButton; - mappings[783] = ItemType.AcaciaButton; - mappings[784] = ItemType.CherryButton; - mappings[785] = ItemType.DarkOakButton; - mappings[786] = ItemType.PaleOakButton; - mappings[787] = ItemType.MangroveButton; - mappings[788] = ItemType.BambooButton; - mappings[789] = ItemType.CrimsonButton; - mappings[790] = ItemType.WarpedButton; - mappings[791] = ItemType.StonePressurePlate; - mappings[792] = ItemType.PolishedBlackstonePressurePlate; - mappings[793] = ItemType.LightWeightedPressurePlate; - mappings[794] = ItemType.HeavyWeightedPressurePlate; - mappings[795] = ItemType.OakPressurePlate; - mappings[796] = ItemType.SprucePressurePlate; - mappings[797] = ItemType.BirchPressurePlate; - mappings[798] = ItemType.JunglePressurePlate; - mappings[799] = ItemType.AcaciaPressurePlate; - mappings[800] = ItemType.CherryPressurePlate; - mappings[801] = ItemType.DarkOakPressurePlate; - mappings[802] = ItemType.PaleOakPressurePlate; - mappings[803] = ItemType.MangrovePressurePlate; - mappings[804] = ItemType.BambooPressurePlate; - mappings[805] = ItemType.CrimsonPressurePlate; - mappings[806] = ItemType.WarpedPressurePlate; - mappings[807] = ItemType.IronDoor; - mappings[808] = ItemType.OakDoor; - mappings[809] = ItemType.SpruceDoor; - mappings[810] = ItemType.BirchDoor; - mappings[811] = ItemType.JungleDoor; - mappings[812] = ItemType.AcaciaDoor; - mappings[813] = ItemType.CherryDoor; - mappings[814] = ItemType.DarkOakDoor; - mappings[815] = ItemType.PaleOakDoor; - mappings[816] = ItemType.MangroveDoor; - mappings[817] = ItemType.BambooDoor; - mappings[818] = ItemType.CrimsonDoor; - mappings[819] = ItemType.WarpedDoor; - mappings[820] = ItemType.CopperDoor; - mappings[821] = ItemType.ExposedCopperDoor; - mappings[822] = ItemType.WeatheredCopperDoor; - mappings[823] = ItemType.OxidizedCopperDoor; - mappings[824] = ItemType.WaxedCopperDoor; - mappings[825] = ItemType.WaxedExposedCopperDoor; - mappings[826] = ItemType.WaxedWeatheredCopperDoor; - mappings[827] = ItemType.WaxedOxidizedCopperDoor; - mappings[828] = ItemType.IronTrapdoor; - mappings[829] = ItemType.OakTrapdoor; - mappings[830] = ItemType.SpruceTrapdoor; - mappings[831] = ItemType.BirchTrapdoor; - mappings[832] = ItemType.JungleTrapdoor; - mappings[833] = ItemType.AcaciaTrapdoor; - mappings[834] = ItemType.CherryTrapdoor; - mappings[835] = ItemType.DarkOakTrapdoor; - mappings[836] = ItemType.PaleOakTrapdoor; - mappings[837] = ItemType.MangroveTrapdoor; - mappings[838] = ItemType.BambooTrapdoor; - mappings[839] = ItemType.CrimsonTrapdoor; - mappings[840] = ItemType.WarpedTrapdoor; - mappings[841] = ItemType.CopperTrapdoor; - mappings[842] = ItemType.ExposedCopperTrapdoor; - mappings[843] = ItemType.WeatheredCopperTrapdoor; - mappings[844] = ItemType.OxidizedCopperTrapdoor; - mappings[845] = ItemType.WaxedCopperTrapdoor; - mappings[846] = ItemType.WaxedExposedCopperTrapdoor; - mappings[847] = ItemType.WaxedWeatheredCopperTrapdoor; - mappings[848] = ItemType.WaxedOxidizedCopperTrapdoor; - mappings[849] = ItemType.OakFenceGate; - mappings[850] = ItemType.SpruceFenceGate; - mappings[851] = ItemType.BirchFenceGate; - mappings[852] = ItemType.JungleFenceGate; - mappings[853] = ItemType.AcaciaFenceGate; - mappings[854] = ItemType.CherryFenceGate; - mappings[855] = ItemType.DarkOakFenceGate; - mappings[856] = ItemType.PaleOakFenceGate; - mappings[857] = ItemType.MangroveFenceGate; - mappings[858] = ItemType.BambooFenceGate; - mappings[859] = ItemType.CrimsonFenceGate; - mappings[860] = ItemType.WarpedFenceGate; - mappings[861] = ItemType.PoweredRail; - mappings[862] = ItemType.DetectorRail; - mappings[863] = ItemType.Rail; - mappings[864] = ItemType.ActivatorRail; - mappings[865] = ItemType.Saddle; - mappings[866] = ItemType.WhiteHarness; - mappings[867] = ItemType.OrangeHarness; - mappings[868] = ItemType.MagentaHarness; - mappings[869] = ItemType.LightBlueHarness; - mappings[870] = ItemType.YellowHarness; - mappings[871] = ItemType.LimeHarness; - mappings[872] = ItemType.PinkHarness; - mappings[873] = ItemType.GrayHarness; - mappings[874] = ItemType.LightGrayHarness; - mappings[875] = ItemType.CyanHarness; - mappings[876] = ItemType.PurpleHarness; - mappings[877] = ItemType.BlueHarness; - mappings[878] = ItemType.BrownHarness; - mappings[879] = ItemType.GreenHarness; - mappings[880] = ItemType.RedHarness; - mappings[881] = ItemType.BlackHarness; - mappings[882] = ItemType.Minecart; - mappings[883] = ItemType.ChestMinecart; - mappings[884] = ItemType.FurnaceMinecart; - mappings[885] = ItemType.TntMinecart; - mappings[886] = ItemType.HopperMinecart; - mappings[887] = ItemType.CarrotOnAStick; - mappings[888] = ItemType.WarpedFungusOnAStick; - mappings[889] = ItemType.PhantomMembrane; - mappings[890] = ItemType.Elytra; - mappings[891] = ItemType.OakBoat; - mappings[892] = ItemType.OakChestBoat; - mappings[893] = ItemType.SpruceBoat; - mappings[894] = ItemType.SpruceChestBoat; - mappings[895] = ItemType.BirchBoat; - mappings[896] = ItemType.BirchChestBoat; - mappings[897] = ItemType.JungleBoat; - mappings[898] = ItemType.JungleChestBoat; - mappings[899] = ItemType.AcaciaBoat; - mappings[900] = ItemType.AcaciaChestBoat; - mappings[901] = ItemType.CherryBoat; - mappings[902] = ItemType.CherryChestBoat; - mappings[903] = ItemType.DarkOakBoat; - mappings[904] = ItemType.DarkOakChestBoat; - mappings[905] = ItemType.PaleOakBoat; - mappings[906] = ItemType.PaleOakChestBoat; - mappings[907] = ItemType.MangroveBoat; - mappings[908] = ItemType.MangroveChestBoat; - mappings[909] = ItemType.BambooRaft; - mappings[910] = ItemType.BambooChestRaft; - mappings[911] = ItemType.StructureBlock; - mappings[912] = ItemType.Jigsaw; - mappings[913] = ItemType.TestBlock; - mappings[914] = ItemType.TestInstanceBlock; - mappings[915] = ItemType.TurtleHelmet; - mappings[916] = ItemType.TurtleScute; - mappings[917] = ItemType.ArmadilloScute; - mappings[918] = ItemType.WolfArmor; - mappings[919] = ItemType.FlintAndSteel; - mappings[920] = ItemType.Bowl; - mappings[921] = ItemType.Apple; - mappings[922] = ItemType.Bow; - mappings[923] = ItemType.Arrow; - mappings[924] = ItemType.Coal; - mappings[925] = ItemType.Charcoal; - mappings[926] = ItemType.Diamond; - mappings[927] = ItemType.Emerald; - mappings[928] = ItemType.LapisLazuli; - mappings[929] = ItemType.Quartz; - mappings[930] = ItemType.AmethystShard; - mappings[931] = ItemType.RawIron; - mappings[932] = ItemType.IronIngot; - mappings[933] = ItemType.RawCopper; - mappings[934] = ItemType.CopperIngot; - mappings[935] = ItemType.RawGold; - mappings[936] = ItemType.GoldIngot; - mappings[937] = ItemType.NetheriteIngot; - mappings[938] = ItemType.NetheriteScrap; - mappings[939] = ItemType.WoodenSword; - mappings[940] = ItemType.WoodenShovel; - mappings[941] = ItemType.WoodenPickaxe; - mappings[942] = ItemType.WoodenAxe; - mappings[943] = ItemType.WoodenHoe; - mappings[944] = ItemType.CopperSword; - mappings[945] = ItemType.CopperShovel; - mappings[946] = ItemType.CopperPickaxe; - mappings[947] = ItemType.CopperAxe; - mappings[948] = ItemType.CopperHoe; - mappings[949] = ItemType.StoneSword; - mappings[950] = ItemType.StoneShovel; - mappings[951] = ItemType.StonePickaxe; - mappings[952] = ItemType.StoneAxe; - mappings[953] = ItemType.StoneHoe; - mappings[954] = ItemType.GoldenSword; - mappings[955] = ItemType.GoldenShovel; - mappings[956] = ItemType.GoldenPickaxe; - mappings[957] = ItemType.GoldenAxe; - mappings[958] = ItemType.GoldenHoe; - mappings[959] = ItemType.IronSword; - mappings[960] = ItemType.IronShovel; - mappings[961] = ItemType.IronPickaxe; - mappings[962] = ItemType.IronAxe; - mappings[963] = ItemType.IronHoe; - mappings[964] = ItemType.DiamondSword; - mappings[965] = ItemType.DiamondShovel; - mappings[966] = ItemType.DiamondPickaxe; - mappings[967] = ItemType.DiamondAxe; - mappings[968] = ItemType.DiamondHoe; - mappings[969] = ItemType.NetheriteSword; - mappings[970] = ItemType.NetheriteShovel; - mappings[971] = ItemType.NetheritePickaxe; - mappings[972] = ItemType.NetheriteAxe; - mappings[973] = ItemType.NetheriteHoe; - mappings[974] = ItemType.Stick; - mappings[975] = ItemType.MushroomStew; - mappings[976] = ItemType.String; - mappings[977] = ItemType.Feather; - mappings[978] = ItemType.Gunpowder; - mappings[979] = ItemType.WheatSeeds; - mappings[980] = ItemType.Wheat; - mappings[981] = ItemType.Bread; - mappings[982] = ItemType.LeatherHelmet; - mappings[983] = ItemType.LeatherChestplate; - mappings[984] = ItemType.LeatherLeggings; - mappings[985] = ItemType.LeatherBoots; - mappings[986] = ItemType.CopperHelmet; - mappings[987] = ItemType.CopperChestplate; - mappings[988] = ItemType.CopperLeggings; - mappings[989] = ItemType.CopperBoots; - mappings[990] = ItemType.ChainmailHelmet; - mappings[991] = ItemType.ChainmailChestplate; - mappings[992] = ItemType.ChainmailLeggings; - mappings[993] = ItemType.ChainmailBoots; - mappings[994] = ItemType.IronHelmet; - mappings[995] = ItemType.IronChestplate; - mappings[996] = ItemType.IronLeggings; - mappings[997] = ItemType.IronBoots; - mappings[998] = ItemType.DiamondHelmet; - mappings[999] = ItemType.DiamondChestplate; - mappings[1000] = ItemType.DiamondLeggings; - mappings[1001] = ItemType.DiamondBoots; - mappings[1002] = ItemType.GoldenHelmet; - mappings[1003] = ItemType.GoldenChestplate; - mappings[1004] = ItemType.GoldenLeggings; - mappings[1005] = ItemType.GoldenBoots; - mappings[1006] = ItemType.NetheriteHelmet; - mappings[1007] = ItemType.NetheriteChestplate; - mappings[1008] = ItemType.NetheriteLeggings; - mappings[1009] = ItemType.NetheriteBoots; - mappings[1010] = ItemType.Flint; - mappings[1011] = ItemType.Porkchop; - mappings[1012] = ItemType.CookedPorkchop; - mappings[1013] = ItemType.Painting; - mappings[1014] = ItemType.GoldenApple; - mappings[1015] = ItemType.EnchantedGoldenApple; - mappings[1016] = ItemType.OakSign; - mappings[1017] = ItemType.SpruceSign; - mappings[1018] = ItemType.BirchSign; - mappings[1019] = ItemType.JungleSign; - mappings[1020] = ItemType.AcaciaSign; - mappings[1021] = ItemType.CherrySign; - mappings[1022] = ItemType.DarkOakSign; - mappings[1023] = ItemType.PaleOakSign; - mappings[1024] = ItemType.MangroveSign; - mappings[1025] = ItemType.BambooSign; - mappings[1026] = ItemType.CrimsonSign; - mappings[1027] = ItemType.WarpedSign; - mappings[1028] = ItemType.OakHangingSign; - mappings[1029] = ItemType.SpruceHangingSign; - mappings[1030] = ItemType.BirchHangingSign; - mappings[1031] = ItemType.JungleHangingSign; - mappings[1032] = ItemType.AcaciaHangingSign; - mappings[1033] = ItemType.CherryHangingSign; - mappings[1034] = ItemType.DarkOakHangingSign; - mappings[1035] = ItemType.PaleOakHangingSign; - mappings[1036] = ItemType.MangroveHangingSign; - mappings[1037] = ItemType.BambooHangingSign; - mappings[1038] = ItemType.CrimsonHangingSign; - mappings[1039] = ItemType.WarpedHangingSign; - mappings[1040] = ItemType.Bucket; - mappings[1041] = ItemType.WaterBucket; - mappings[1042] = ItemType.LavaBucket; - mappings[1043] = ItemType.PowderSnowBucket; - mappings[1044] = ItemType.Snowball; - mappings[1045] = ItemType.Leather; - mappings[1046] = ItemType.MilkBucket; - mappings[1047] = ItemType.PufferfishBucket; - mappings[1048] = ItemType.SalmonBucket; - mappings[1049] = ItemType.CodBucket; - mappings[1050] = ItemType.TropicalFishBucket; - mappings[1051] = ItemType.AxolotlBucket; - mappings[1052] = ItemType.SulfurCubeBucket; - mappings[1053] = ItemType.TadpoleBucket; - mappings[1054] = ItemType.Brick; - mappings[1055] = ItemType.ClayBall; - mappings[1056] = ItemType.DriedKelpBlock; - mappings[1057] = ItemType.Paper; - mappings[1058] = ItemType.Book; - mappings[1059] = ItemType.SlimeBall; - mappings[1060] = ItemType.Egg; - mappings[1061] = ItemType.BlueEgg; - mappings[1062] = ItemType.BrownEgg; - mappings[1063] = ItemType.Compass; - mappings[1064] = ItemType.RecoveryCompass; - mappings[1065] = ItemType.Bundle; - mappings[1066] = ItemType.WhiteBundle; - mappings[1067] = ItemType.OrangeBundle; - mappings[1068] = ItemType.MagentaBundle; - mappings[1069] = ItemType.LightBlueBundle; - mappings[1070] = ItemType.YellowBundle; - mappings[1071] = ItemType.LimeBundle; - mappings[1072] = ItemType.PinkBundle; - mappings[1073] = ItemType.GrayBundle; - mappings[1074] = ItemType.LightGrayBundle; - mappings[1075] = ItemType.CyanBundle; - mappings[1076] = ItemType.PurpleBundle; - mappings[1077] = ItemType.BlueBundle; - mappings[1078] = ItemType.BrownBundle; - mappings[1079] = ItemType.GreenBundle; - mappings[1080] = ItemType.RedBundle; - mappings[1081] = ItemType.BlackBundle; - mappings[1082] = ItemType.FishingRod; - mappings[1083] = ItemType.Clock; - mappings[1084] = ItemType.Spyglass; - mappings[1085] = ItemType.GlowstoneDust; - mappings[1086] = ItemType.Cod; - mappings[1087] = ItemType.Salmon; - mappings[1088] = ItemType.TropicalFish; - mappings[1089] = ItemType.Pufferfish; - mappings[1090] = ItemType.CookedCod; - mappings[1091] = ItemType.CookedSalmon; - mappings[1092] = ItemType.InkSac; - mappings[1093] = ItemType.GlowInkSac; - mappings[1094] = ItemType.CocoaBeans; - mappings[1095] = ItemType.WhiteDye; - mappings[1096] = ItemType.OrangeDye; - mappings[1097] = ItemType.MagentaDye; - mappings[1098] = ItemType.LightBlueDye; - mappings[1099] = ItemType.YellowDye; - mappings[1100] = ItemType.LimeDye; - mappings[1101] = ItemType.PinkDye; - mappings[1102] = ItemType.GrayDye; - mappings[1103] = ItemType.LightGrayDye; - mappings[1104] = ItemType.CyanDye; - mappings[1105] = ItemType.PurpleDye; - mappings[1106] = ItemType.BlueDye; - mappings[1107] = ItemType.BrownDye; - mappings[1108] = ItemType.GreenDye; - mappings[1109] = ItemType.RedDye; - mappings[1110] = ItemType.BlackDye; - mappings[1111] = ItemType.BoneMeal; - mappings[1112] = ItemType.Bone; - mappings[1113] = ItemType.Sugar; - mappings[1114] = ItemType.Cake; - mappings[1115] = ItemType.WhiteBed; - mappings[1116] = ItemType.OrangeBed; - mappings[1117] = ItemType.MagentaBed; - mappings[1118] = ItemType.LightBlueBed; - mappings[1119] = ItemType.YellowBed; - mappings[1120] = ItemType.LimeBed; - mappings[1121] = ItemType.PinkBed; - mappings[1122] = ItemType.GrayBed; - mappings[1123] = ItemType.LightGrayBed; - mappings[1124] = ItemType.CyanBed; - mappings[1125] = ItemType.PurpleBed; - mappings[1126] = ItemType.BlueBed; - mappings[1127] = ItemType.BrownBed; - mappings[1128] = ItemType.GreenBed; - mappings[1129] = ItemType.RedBed; - mappings[1130] = ItemType.BlackBed; - mappings[1131] = ItemType.Cookie; - mappings[1132] = ItemType.Crafter; - mappings[1133] = ItemType.FilledMap; - mappings[1134] = ItemType.Shears; - mappings[1135] = ItemType.MelonSlice; - mappings[1136] = ItemType.DriedKelp; - mappings[1137] = ItemType.PumpkinSeeds; - mappings[1138] = ItemType.MelonSeeds; - mappings[1139] = ItemType.Beef; - mappings[1140] = ItemType.CookedBeef; - mappings[1141] = ItemType.Chicken; - mappings[1142] = ItemType.CookedChicken; - mappings[1143] = ItemType.RottenFlesh; - mappings[1144] = ItemType.EnderPearl; - mappings[1145] = ItemType.BlazeRod; - mappings[1146] = ItemType.GhastTear; - mappings[1147] = ItemType.GoldNugget; - mappings[1148] = ItemType.NetherWart; - mappings[1149] = ItemType.GlassBottle; - mappings[1150] = ItemType.Potion; - mappings[1151] = ItemType.SpiderEye; - mappings[1152] = ItemType.FermentedSpiderEye; - mappings[1153] = ItemType.BlazePowder; - mappings[1154] = ItemType.MagmaCream; - mappings[1155] = ItemType.BrewingStand; - mappings[1156] = ItemType.Cauldron; - mappings[1157] = ItemType.EnderEye; - mappings[1158] = ItemType.GlisteringMelonSlice; - mappings[1159] = ItemType.ChickenSpawnEgg; - mappings[1160] = ItemType.CowSpawnEgg; - mappings[1161] = ItemType.PigSpawnEgg; - mappings[1162] = ItemType.SheepSpawnEgg; - mappings[1163] = ItemType.CamelSpawnEgg; - mappings[1164] = ItemType.DonkeySpawnEgg; - mappings[1165] = ItemType.HorseSpawnEgg; - mappings[1166] = ItemType.MuleSpawnEgg; - mappings[1167] = ItemType.CatSpawnEgg; - mappings[1168] = ItemType.ParrotSpawnEgg; - mappings[1169] = ItemType.WolfSpawnEgg; - mappings[1170] = ItemType.ArmadilloSpawnEgg; - mappings[1171] = ItemType.BatSpawnEgg; - mappings[1172] = ItemType.BeeSpawnEgg; - mappings[1173] = ItemType.FoxSpawnEgg; - mappings[1174] = ItemType.GoatSpawnEgg; - mappings[1175] = ItemType.LlamaSpawnEgg; - mappings[1176] = ItemType.OcelotSpawnEgg; - mappings[1177] = ItemType.PandaSpawnEgg; - mappings[1178] = ItemType.PolarBearSpawnEgg; - mappings[1179] = ItemType.RabbitSpawnEgg; - mappings[1180] = ItemType.AxolotlSpawnEgg; - mappings[1181] = ItemType.CodSpawnEgg; - mappings[1182] = ItemType.DolphinSpawnEgg; - mappings[1183] = ItemType.FrogSpawnEgg; - mappings[1184] = ItemType.GlowSquidSpawnEgg; - mappings[1185] = ItemType.NautilusSpawnEgg; - mappings[1186] = ItemType.PufferfishSpawnEgg; - mappings[1187] = ItemType.SalmonSpawnEgg; - mappings[1188] = ItemType.SquidSpawnEgg; - mappings[1189] = ItemType.TadpoleSpawnEgg; - mappings[1190] = ItemType.TropicalFishSpawnEgg; - mappings[1191] = ItemType.TurtleSpawnEgg; - mappings[1192] = ItemType.AllaySpawnEgg; - mappings[1193] = ItemType.MooshroomSpawnEgg; - mappings[1194] = ItemType.SnifferSpawnEgg; - mappings[1195] = ItemType.SulfurCubeSpawnEgg; - mappings[1196] = ItemType.CopperGolemSpawnEgg; - mappings[1197] = ItemType.IronGolemSpawnEgg; - mappings[1198] = ItemType.SnowGolemSpawnEgg; - mappings[1199] = ItemType.TraderLlamaSpawnEgg; - mappings[1200] = ItemType.VillagerSpawnEgg; - mappings[1201] = ItemType.WanderingTraderSpawnEgg; - mappings[1202] = ItemType.BoggedSpawnEgg; - mappings[1203] = ItemType.CamelHuskSpawnEgg; - mappings[1204] = ItemType.DrownedSpawnEgg; - mappings[1205] = ItemType.HuskSpawnEgg; - mappings[1206] = ItemType.ParchedSpawnEgg; - mappings[1207] = ItemType.SkeletonSpawnEgg; - mappings[1208] = ItemType.SkeletonHorseSpawnEgg; - mappings[1209] = ItemType.StraySpawnEgg; - mappings[1210] = ItemType.WitherSpawnEgg; - mappings[1211] = ItemType.WitherSkeletonSpawnEgg; - mappings[1212] = ItemType.ZombieSpawnEgg; - mappings[1213] = ItemType.ZombieHorseSpawnEgg; - mappings[1214] = ItemType.ZombieNautilusSpawnEgg; - mappings[1215] = ItemType.ZombieVillagerSpawnEgg; - mappings[1216] = ItemType.CaveSpiderSpawnEgg; - mappings[1217] = ItemType.SpiderSpawnEgg; - mappings[1218] = ItemType.BreezeSpawnEgg; - mappings[1219] = ItemType.CreakingSpawnEgg; - mappings[1220] = ItemType.CreeperSpawnEgg; - mappings[1221] = ItemType.ElderGuardianSpawnEgg; - mappings[1222] = ItemType.GuardianSpawnEgg; - mappings[1223] = ItemType.PhantomSpawnEgg; - mappings[1224] = ItemType.SilverfishSpawnEgg; - mappings[1225] = ItemType.SlimeSpawnEgg; - mappings[1226] = ItemType.WardenSpawnEgg; - mappings[1227] = ItemType.WitchSpawnEgg; - mappings[1228] = ItemType.EvokerSpawnEgg; - mappings[1229] = ItemType.PillagerSpawnEgg; - mappings[1230] = ItemType.RavagerSpawnEgg; - mappings[1231] = ItemType.VindicatorSpawnEgg; - mappings[1232] = ItemType.VexSpawnEgg; - mappings[1233] = ItemType.BlazeSpawnEgg; - mappings[1234] = ItemType.GhastSpawnEgg; - mappings[1235] = ItemType.HappyGhastSpawnEgg; - mappings[1236] = ItemType.HoglinSpawnEgg; - mappings[1237] = ItemType.MagmaCubeSpawnEgg; - mappings[1238] = ItemType.PiglinSpawnEgg; - mappings[1239] = ItemType.PiglinBruteSpawnEgg; - mappings[1240] = ItemType.StriderSpawnEgg; - mappings[1241] = ItemType.ZoglinSpawnEgg; - mappings[1242] = ItemType.ZombifiedPiglinSpawnEgg; - mappings[1243] = ItemType.EnderDragonSpawnEgg; - mappings[1244] = ItemType.EndermanSpawnEgg; - mappings[1245] = ItemType.EndermiteSpawnEgg; - mappings[1246] = ItemType.ShulkerSpawnEgg; - mappings[1247] = ItemType.ExperienceBottle; - mappings[1248] = ItemType.FireCharge; - mappings[1249] = ItemType.WindCharge; - mappings[1250] = ItemType.WritableBook; - mappings[1251] = ItemType.WrittenBook; - mappings[1252] = ItemType.BreezeRod; - mappings[1253] = ItemType.Mace; - mappings[1254] = ItemType.ItemFrame; - mappings[1255] = ItemType.GlowItemFrame; - mappings[1256] = ItemType.FlowerPot; - mappings[1257] = ItemType.Carrot; - mappings[1258] = ItemType.Potato; - mappings[1259] = ItemType.BakedPotato; - mappings[1260] = ItemType.PoisonousPotato; - mappings[1261] = ItemType.Map; - mappings[1262] = ItemType.GoldenCarrot; - mappings[1263] = ItemType.SkeletonSkull; - mappings[1264] = ItemType.WitherSkeletonSkull; - mappings[1265] = ItemType.PlayerHead; - mappings[1266] = ItemType.ZombieHead; - mappings[1267] = ItemType.CreeperHead; - mappings[1268] = ItemType.DragonHead; - mappings[1269] = ItemType.PiglinHead; - mappings[1270] = ItemType.NetherStar; - mappings[1271] = ItemType.PumpkinPie; - mappings[1272] = ItemType.FireworkRocket; - mappings[1273] = ItemType.FireworkStar; - mappings[1274] = ItemType.EnchantedBook; - mappings[1275] = ItemType.NetherBrick; - mappings[1276] = ItemType.ResinBrick; - mappings[1277] = ItemType.PrismarineShard; - mappings[1278] = ItemType.PrismarineCrystals; - mappings[1279] = ItemType.Rabbit; - mappings[1280] = ItemType.CookedRabbit; - mappings[1281] = ItemType.RabbitStew; - mappings[1282] = ItemType.RabbitFoot; - mappings[1283] = ItemType.RabbitHide; - mappings[1284] = ItemType.ArmorStand; - mappings[1285] = ItemType.CopperHorseArmor; - mappings[1286] = ItemType.IronHorseArmor; - mappings[1287] = ItemType.GoldenHorseArmor; - mappings[1288] = ItemType.DiamondHorseArmor; - mappings[1289] = ItemType.NetheriteHorseArmor; - mappings[1290] = ItemType.LeatherHorseArmor; - mappings[1291] = ItemType.Lead; - mappings[1292] = ItemType.NameTag; - mappings[1293] = ItemType.CommandBlockMinecart; - mappings[1294] = ItemType.Mutton; - mappings[1295] = ItemType.CookedMutton; - mappings[1296] = ItemType.WhiteBanner; - mappings[1297] = ItemType.OrangeBanner; - mappings[1298] = ItemType.MagentaBanner; - mappings[1299] = ItemType.LightBlueBanner; - mappings[1300] = ItemType.YellowBanner; - mappings[1301] = ItemType.LimeBanner; - mappings[1302] = ItemType.PinkBanner; - mappings[1303] = ItemType.GrayBanner; - mappings[1304] = ItemType.LightGrayBanner; - mappings[1305] = ItemType.CyanBanner; - mappings[1306] = ItemType.PurpleBanner; - mappings[1307] = ItemType.BlueBanner; - mappings[1308] = ItemType.BrownBanner; - mappings[1309] = ItemType.GreenBanner; - mappings[1310] = ItemType.RedBanner; - mappings[1311] = ItemType.BlackBanner; - mappings[1312] = ItemType.EndCrystal; - mappings[1313] = ItemType.ChorusFruit; - mappings[1314] = ItemType.PoppedChorusFruit; - mappings[1315] = ItemType.TorchflowerSeeds; - mappings[1316] = ItemType.PitcherPod; - mappings[1317] = ItemType.Beetroot; - mappings[1318] = ItemType.BeetrootSeeds; - mappings[1319] = ItemType.BeetrootSoup; - mappings[1320] = ItemType.DragonBreath; - mappings[1321] = ItemType.SplashPotion; - mappings[1322] = ItemType.SpectralArrow; - mappings[1323] = ItemType.TippedArrow; - mappings[1324] = ItemType.LingeringPotion; - mappings[1325] = ItemType.Shield; - mappings[1326] = ItemType.WoodenSpear; - mappings[1327] = ItemType.StoneSpear; - mappings[1328] = ItemType.CopperSpear; - mappings[1329] = ItemType.IronSpear; - mappings[1330] = ItemType.GoldenSpear; - mappings[1331] = ItemType.DiamondSpear; - mappings[1332] = ItemType.NetheriteSpear; - mappings[1333] = ItemType.TotemOfUndying; - mappings[1334] = ItemType.ShulkerShell; - mappings[1335] = ItemType.IronNugget; - mappings[1336] = ItemType.CopperNugget; - mappings[1337] = ItemType.KnowledgeBook; - mappings[1338] = ItemType.DebugStick; - mappings[1339] = ItemType.MusicDisc13; - mappings[1340] = ItemType.MusicDiscCat; - mappings[1341] = ItemType.MusicDiscBlocks; - mappings[1342] = ItemType.MusicDiscBounce; - mappings[1343] = ItemType.MusicDiscChirp; - mappings[1344] = ItemType.MusicDiscCreator; - mappings[1345] = ItemType.MusicDiscCreatorMusicBox; - mappings[1346] = ItemType.MusicDiscFar; - mappings[1347] = ItemType.MusicDiscLavaChicken; - mappings[1348] = ItemType.MusicDiscMall; - mappings[1349] = ItemType.MusicDiscMellohi; - mappings[1350] = ItemType.MusicDiscStal; - mappings[1351] = ItemType.MusicDiscStrad; - mappings[1352] = ItemType.MusicDiscWard; - mappings[1353] = ItemType.MusicDisc11; - mappings[1354] = ItemType.MusicDiscWait; - mappings[1355] = ItemType.MusicDiscOtherside; - mappings[1356] = ItemType.MusicDiscRelic; - mappings[1357] = ItemType.MusicDisc5; - mappings[1358] = ItemType.MusicDiscPigstep; - mappings[1359] = ItemType.MusicDiscPrecipice; - mappings[1360] = ItemType.MusicDiscTears; - mappings[1361] = ItemType.DiscFragment5; - mappings[1362] = ItemType.Trident; - mappings[1363] = ItemType.NautilusShell; - mappings[1364] = ItemType.IronNautilusArmor; - mappings[1365] = ItemType.GoldenNautilusArmor; - mappings[1366] = ItemType.DiamondNautilusArmor; - mappings[1367] = ItemType.NetheriteNautilusArmor; - mappings[1368] = ItemType.CopperNautilusArmor; - mappings[1369] = ItemType.HeartOfTheSea; - mappings[1370] = ItemType.Crossbow; - mappings[1371] = ItemType.SuspiciousStew; - mappings[1372] = ItemType.Loom; - mappings[1373] = ItemType.FlowerBannerPattern; - mappings[1374] = ItemType.CreeperBannerPattern; - mappings[1375] = ItemType.SkullBannerPattern; - mappings[1376] = ItemType.MojangBannerPattern; - mappings[1377] = ItemType.GlobeBannerPattern; - mappings[1378] = ItemType.PiglinBannerPattern; - mappings[1379] = ItemType.FlowBannerPattern; - mappings[1380] = ItemType.GusterBannerPattern; - mappings[1381] = ItemType.FieldMasonedBannerPattern; - mappings[1382] = ItemType.BordureIndentedBannerPattern; - mappings[1383] = ItemType.GoatHorn; - mappings[1384] = ItemType.Composter; - mappings[1385] = ItemType.Barrel; - mappings[1386] = ItemType.Smoker; - mappings[1387] = ItemType.BlastFurnace; - mappings[1388] = ItemType.CartographyTable; - mappings[1389] = ItemType.FletchingTable; - mappings[1390] = ItemType.Grindstone; - mappings[1391] = ItemType.SmithingTable; - mappings[1392] = ItemType.Stonecutter; - mappings[1393] = ItemType.Bell; - mappings[1394] = ItemType.Lantern; - mappings[1395] = ItemType.SoulLantern; - mappings[1396] = ItemType.CopperLantern; - mappings[1397] = ItemType.ExposedCopperLantern; - mappings[1398] = ItemType.WeatheredCopperLantern; - mappings[1399] = ItemType.OxidizedCopperLantern; - mappings[1400] = ItemType.WaxedCopperLantern; - mappings[1401] = ItemType.WaxedExposedCopperLantern; - mappings[1402] = ItemType.WaxedWeatheredCopperLantern; - mappings[1403] = ItemType.WaxedOxidizedCopperLantern; - mappings[1404] = ItemType.SweetBerries; - mappings[1405] = ItemType.GlowBerries; - mappings[1406] = ItemType.Campfire; - mappings[1407] = ItemType.SoulCampfire; - mappings[1408] = ItemType.Shroomlight; - mappings[1409] = ItemType.Honeycomb; - mappings[1410] = ItemType.BeeNest; - mappings[1411] = ItemType.Beehive; - mappings[1412] = ItemType.HoneyBottle; - mappings[1413] = ItemType.HoneycombBlock; - mappings[1414] = ItemType.Lodestone; - mappings[1415] = ItemType.CryingObsidian; - mappings[1416] = ItemType.Blackstone; - mappings[1417] = ItemType.BlackstoneSlab; - mappings[1418] = ItemType.BlackstoneStairs; - mappings[1419] = ItemType.GildedBlackstone; - mappings[1420] = ItemType.PolishedBlackstone; - mappings[1421] = ItemType.PolishedBlackstoneSlab; - mappings[1422] = ItemType.PolishedBlackstoneStairs; - mappings[1423] = ItemType.ChiseledPolishedBlackstone; - mappings[1424] = ItemType.PolishedBlackstoneBricks; - mappings[1425] = ItemType.PolishedBlackstoneBrickSlab; - mappings[1426] = ItemType.PolishedBlackstoneBrickStairs; - mappings[1427] = ItemType.CrackedPolishedBlackstoneBricks; - mappings[1428] = ItemType.RespawnAnchor; - mappings[1429] = ItemType.Candle; - mappings[1430] = ItemType.WhiteCandle; - mappings[1431] = ItemType.OrangeCandle; - mappings[1432] = ItemType.MagentaCandle; - mappings[1433] = ItemType.LightBlueCandle; - mappings[1434] = ItemType.YellowCandle; - mappings[1435] = ItemType.LimeCandle; - mappings[1436] = ItemType.PinkCandle; - mappings[1437] = ItemType.GrayCandle; - mappings[1438] = ItemType.LightGrayCandle; - mappings[1439] = ItemType.CyanCandle; - mappings[1440] = ItemType.PurpleCandle; - mappings[1441] = ItemType.BlueCandle; - mappings[1442] = ItemType.BrownCandle; - mappings[1443] = ItemType.GreenCandle; - mappings[1444] = ItemType.RedCandle; - mappings[1445] = ItemType.BlackCandle; - mappings[1446] = ItemType.SmallAmethystBud; - mappings[1447] = ItemType.MediumAmethystBud; - mappings[1448] = ItemType.LargeAmethystBud; - mappings[1449] = ItemType.AmethystCluster; - mappings[1450] = ItemType.PointedDripstone; - mappings[1451] = ItemType.SulfurSpike; - mappings[1452] = ItemType.OchreFroglight; - mappings[1453] = ItemType.VerdantFroglight; - mappings[1454] = ItemType.PearlescentFroglight; - mappings[1455] = ItemType.Frogspawn; - mappings[1456] = ItemType.EchoShard; - mappings[1457] = ItemType.Brush; - mappings[1458] = ItemType.NetheriteUpgradeSmithingTemplate; - mappings[1459] = ItemType.SentryArmorTrimSmithingTemplate; - mappings[1460] = ItemType.DuneArmorTrimSmithingTemplate; - mappings[1461] = ItemType.CoastArmorTrimSmithingTemplate; - mappings[1462] = ItemType.WildArmorTrimSmithingTemplate; - mappings[1463] = ItemType.WardArmorTrimSmithingTemplate; - mappings[1464] = ItemType.EyeArmorTrimSmithingTemplate; - mappings[1465] = ItemType.VexArmorTrimSmithingTemplate; - mappings[1466] = ItemType.TideArmorTrimSmithingTemplate; - mappings[1467] = ItemType.SnoutArmorTrimSmithingTemplate; - mappings[1468] = ItemType.RibArmorTrimSmithingTemplate; - mappings[1469] = ItemType.SpireArmorTrimSmithingTemplate; - mappings[1470] = ItemType.WayfinderArmorTrimSmithingTemplate; - mappings[1471] = ItemType.ShaperArmorTrimSmithingTemplate; - mappings[1472] = ItemType.SilenceArmorTrimSmithingTemplate; - mappings[1473] = ItemType.RaiserArmorTrimSmithingTemplate; - mappings[1474] = ItemType.HostArmorTrimSmithingTemplate; - mappings[1475] = ItemType.FlowArmorTrimSmithingTemplate; - mappings[1476] = ItemType.BoltArmorTrimSmithingTemplate; - mappings[1477] = ItemType.AnglerPotterySherd; - mappings[1478] = ItemType.ArcherPotterySherd; - mappings[1479] = ItemType.ArmsUpPotterySherd; - mappings[1480] = ItemType.BladePotterySherd; - mappings[1481] = ItemType.BrewerPotterySherd; - mappings[1482] = ItemType.BurnPotterySherd; - mappings[1483] = ItemType.DangerPotterySherd; - mappings[1484] = ItemType.ExplorerPotterySherd; - mappings[1485] = ItemType.FlowPotterySherd; - mappings[1486] = ItemType.FriendPotterySherd; - mappings[1487] = ItemType.GusterPotterySherd; - mappings[1488] = ItemType.HeartPotterySherd; - mappings[1489] = ItemType.HeartbreakPotterySherd; - mappings[1490] = ItemType.HowlPotterySherd; - mappings[1491] = ItemType.MinerPotterySherd; - mappings[1492] = ItemType.MournerPotterySherd; - mappings[1493] = ItemType.PlentyPotterySherd; - mappings[1494] = ItemType.PrizePotterySherd; - mappings[1495] = ItemType.ScrapePotterySherd; - mappings[1496] = ItemType.SheafPotterySherd; - mappings[1497] = ItemType.ShelterPotterySherd; - mappings[1498] = ItemType.SkullPotterySherd; - mappings[1499] = ItemType.SnortPotterySherd; - mappings[1500] = ItemType.CopperGrate; - mappings[1501] = ItemType.ExposedCopperGrate; - mappings[1502] = ItemType.WeatheredCopperGrate; - mappings[1503] = ItemType.OxidizedCopperGrate; - mappings[1504] = ItemType.WaxedCopperGrate; - mappings[1505] = ItemType.WaxedExposedCopperGrate; - mappings[1506] = ItemType.WaxedWeatheredCopperGrate; - mappings[1507] = ItemType.WaxedOxidizedCopperGrate; - mappings[1508] = ItemType.CopperBulb; - mappings[1509] = ItemType.ExposedCopperBulb; - mappings[1510] = ItemType.WeatheredCopperBulb; - mappings[1511] = ItemType.OxidizedCopperBulb; - mappings[1512] = ItemType.WaxedCopperBulb; - mappings[1513] = ItemType.WaxedExposedCopperBulb; - mappings[1514] = ItemType.WaxedWeatheredCopperBulb; - mappings[1515] = ItemType.WaxedOxidizedCopperBulb; - mappings[1516] = ItemType.CopperChest; - mappings[1517] = ItemType.ExposedCopperChest; - mappings[1518] = ItemType.WeatheredCopperChest; - mappings[1519] = ItemType.OxidizedCopperChest; - mappings[1520] = ItemType.WaxedCopperChest; - mappings[1521] = ItemType.WaxedExposedCopperChest; - mappings[1522] = ItemType.WaxedWeatheredCopperChest; - mappings[1523] = ItemType.WaxedOxidizedCopperChest; - mappings[1524] = ItemType.CopperGolemStatue; - mappings[1525] = ItemType.ExposedCopperGolemStatue; - mappings[1526] = ItemType.WeatheredCopperGolemStatue; - mappings[1527] = ItemType.OxidizedCopperGolemStatue; - mappings[1528] = ItemType.WaxedCopperGolemStatue; - mappings[1529] = ItemType.WaxedExposedCopperGolemStatue; - mappings[1530] = ItemType.WaxedWeatheredCopperGolemStatue; - mappings[1531] = ItemType.WaxedOxidizedCopperGolemStatue; - mappings[1532] = ItemType.TrialSpawner; - mappings[1533] = ItemType.TrialKey; - mappings[1534] = ItemType.OminousTrialKey; - mappings[1535] = ItemType.Vault; - mappings[1536] = ItemType.OminousBottle; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Inventory/ItemPalettes/ItemPaletteGenerator.cs b/MinecraftClient/Inventory/ItemPalettes/ItemPaletteGenerator.cs deleted file mode 100644 index eed9b84435..0000000000 --- a/MinecraftClient/Inventory/ItemPalettes/ItemPaletteGenerator.cs +++ /dev/null @@ -1,24 +0,0 @@ -using MinecraftClient.Protocol; - -namespace MinecraftClient.Inventory.ItemPalettes -{ - public static class ItemPaletteGenerator - { - /// - /// Place below line to Program.cs - /// Inventory.ItemPalettes.ItemPaletteGenerator.GenerateItemType(@"your\path\to\registries.json"); - /// See https://wiki.vg/Data_Generators for getting those .json - /// - /// - public static void GenerateItemType(string registriesJsonFile) - { - DataTypeGenerator.GenerateEnumWithPalette( - registriesJsonFile, - "minecraft:item", - "ItemType", - "MinecraftClient.Inventory", - "ItemPalette", - "MinecraftClient.Inventory.ItemPalettes"); - } - } -} diff --git a/MinecraftClient/Inventory/ItemRarity.cs b/MinecraftClient/Inventory/ItemRarity.cs deleted file mode 100644 index a6cc03308e..0000000000 --- a/MinecraftClient/Inventory/ItemRarity.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace MinecraftClient.Inventory; - -public enum ItemRarity : int -{ - Common = 0, - Uncommon, - Rare, - Epic -} \ No newline at end of file diff --git a/MinecraftClient/Inventory/ItemType.cs b/MinecraftClient/Inventory/ItemType.cs deleted file mode 100644 index a6586b6715..0000000000 --- a/MinecraftClient/Inventory/ItemType.cs +++ /dev/null @@ -1,1558 +0,0 @@ -namespace MinecraftClient.Inventory -{ - /// - /// Generated using the --generator flag on the client - /// Typical steps to handle new item IDs for newer Minecraft versions: - /// 1. Generate registries.json using data reporting on Vanilla Minecraft (https://wiki.vg/Data_Generators) or download it from: https://github.com/PixiGeko/Minecraft-generated-data - /// 2. Generate temporary ItemTypeXXX.cs and ItemPaletteXXX.cs using the --generator flag on the client - /// 3. Perform a diff with existing versions, add missing entries in ItemType.cs and ItemTypeExtensions.cs - /// 4. If existing entity IDs were not randomized by Mojang, simply add missing entries to the latest existing ItemPaletteXXX.cs - /// 5. If existing entity IDs were randomized, add a new palette as ItemPaletteXXX.cs into the codebase - /// - public enum ItemType - { - Unknown = -2, // Unsupported item type (Forge mod custom item...) - Null = -1, // Unspecified item type (Used in the network protocol) - - AcaciaBoat, - AcaciaButton, - AcaciaChestBoat, - AcaciaDoor, - AcaciaFence, - AcaciaFenceGate, - AcaciaHangingSign, - AcaciaLeaves, - AcaciaLog, - AcaciaPlanks, - AcaciaPressurePlate, - AcaciaSapling, - AcaciaShelf, - AcaciaSign, - AcaciaSlab, - AcaciaStairs, - AcaciaTrapdoor, - AcaciaWood, - ActivatorRail, - Air, - AllaySpawnEgg, - Allium, - AmethystBlock, - AmethystCluster, - AmethystShard, - AncientDebris, - Andesite, - AndesiteSlab, - AndesiteStairs, - AndesiteWall, - AnglerPotterySherd, - Anvil, - Apple, - ArcherPotterySherd, - ArmadilloScute, - ArmadilloSpawnEgg, - ArmorStand, - ArmsUpPotterySherd, - Arrow, - AxolotlBucket, - AxolotlSpawnEgg, - Azalea, - AzaleaLeaves, - AzureBluet, - BakedPotato, - Bamboo, - BambooBlock, - BambooButton, - BambooChestRaft, - BambooDoor, - BambooFence, - BambooFenceGate, - BambooHangingSign, - BambooMosaic, - BambooMosaicSlab, - BambooMosaicStairs, - BambooPlanks, - BambooPressurePlate, - BambooRaft, - BambooShelf, - BambooSign, - BambooSlab, - BambooStairs, - BambooTrapdoor, - Barrel, - Barrier, - Basalt, - BatSpawnEgg, - Beacon, - Bedrock, - BeeNest, - BeeSpawnEgg, - Beef, - Beehive, - Beetroot, - BeetrootSeeds, - BeetrootSoup, - Bell, - BigDripleaf, - BirchBoat, - BirchButton, - BirchChestBoat, - BirchDoor, - BirchFence, - BirchFenceGate, - BirchHangingSign, - BirchLeaves, - BirchLog, - BirchPlanks, - BirchPressurePlate, - BirchSapling, - BirchShelf, - BirchSign, - BirchSlab, - BirchStairs, - BirchTrapdoor, - BirchWood, - BlackBanner, - BlackBed, - BlackBundle, - BlackCandle, - BlackCarpet, - BlackConcrete, - BlackConcretePowder, - BlackDye, - BlackGlazedTerracotta, - BlackHarness, - BlackShulkerBox, - BlackStainedGlass, - BlackStainedGlassPane, - BlackTerracotta, - BlackWool, - Blackstone, - BlackstoneSlab, - BlackstoneStairs, - BlackstoneWall, - BladePotterySherd, - BlastFurnace, - BlazePowder, - BlazeRod, - BlazeSpawnEgg, - BlueBanner, - BlueBed, - BlueBundle, - BlueCandle, - BlueCarpet, - BlueConcrete, - BlueConcretePowder, - BlueDye, - BlueEgg, - BlueGlazedTerracotta, - BlueHarness, - BlueIce, - BlueOrchid, - BlueShulkerBox, - BlueStainedGlass, - BlueStainedGlassPane, - BlueTerracotta, - BlueWool, - BoggedSpawnEgg, - BoltArmorTrimSmithingTemplate, - Bone, - BoneBlock, - BoneMeal, - Book, - Bookshelf, - BordureIndentedBannerPattern, - Bow, - Bowl, - BrainCoral, - BrainCoralBlock, - BrainCoralFan, - Bread, - BreezeRod, - BreezeSpawnEgg, - BrewerPotterySherd, - BrewingStand, - Brick, - BrickSlab, - BrickStairs, - BrickWall, - Bricks, - BrownBanner, - BrownBed, - BrownBundle, - BrownCandle, - BrownCarpet, - BrownConcrete, - BrownConcretePowder, - BrownDye, - BrownEgg, - BrownGlazedTerracotta, - BrownHarness, - BrownMushroom, - BrownMushroomBlock, - BrownShulkerBox, - BrownStainedGlass, - BrownStainedGlassPane, - BrownTerracotta, - BrownWool, - Brush, - BubbleCoral, - BubbleCoralBlock, - BubbleCoralFan, - Bucket, - BuddingAmethyst, - Bundle, - BurnPotterySherd, - Bush, - Cactus, - CactusFlower, - Cake, - Calcite, - CalibratedSculkSensor, - CamelHuskSpawnEgg, - CamelSpawnEgg, - Campfire, - Candle, - Carrot, - CarrotOnAStick, - CartographyTable, - CarvedPumpkin, - CatSpawnEgg, - Cauldron, - CaveSpiderSpawnEgg, - Chain, - ChainCommandBlock, - ChainmailBoots, - ChainmailChestplate, - ChainmailHelmet, - ChainmailLeggings, - Charcoal, - CherryBoat, - CherryButton, - CherryChestBoat, - CherryDoor, - CherryFence, - CherryFenceGate, - CherryHangingSign, - CherryLeaves, - CherryLog, - CherryPlanks, - CherryPressurePlate, - CherrySapling, - CherryShelf, - CherrySign, - CherrySlab, - CherryStairs, - CherryTrapdoor, - CherryWood, - Chest, - ChestMinecart, - Chicken, - ChickenSpawnEgg, - ChippedAnvil, - ChiseledBookshelf, - ChiseledCinnabar, - ChiseledCopper, - ChiseledDeepslate, - ChiseledNetherBricks, - ChiseledPolishedBlackstone, - ChiseledQuartzBlock, - ChiseledRedSandstone, - ChiseledResinBricks, - ChiseledSandstone, - ChiseledStoneBricks, - ChiseledSulfur, - ChiseledTuff, - ChiseledTuffBricks, - ChorusFlower, - ChorusFruit, - ChorusPlant, - Cinnabar, - CinnabarBrickSlab, - CinnabarBrickStairs, - CinnabarBrickWall, - CinnabarBricks, - CinnabarSlab, - CinnabarStairs, - CinnabarWall, - Clay, - ClayBall, - Clock, - ClosedEyeblossom, - Coal, - CoalBlock, - CoalOre, - CoarseDirt, - CoastArmorTrimSmithingTemplate, - CobbledDeepslate, - CobbledDeepslateSlab, - CobbledDeepslateStairs, - CobbledDeepslateWall, - Cobblestone, - CobblestoneSlab, - CobblestoneStairs, - CobblestoneWall, - Cobweb, - CocoaBeans, - Cod, - CodBucket, - CodSpawnEgg, - CommandBlock, - CommandBlockMinecart, - Comparator, - Compass, - Composter, - Conduit, - CookedBeef, - CookedChicken, - CookedCod, - CookedMutton, - CookedPorkchop, - CookedRabbit, - CookedSalmon, - Cookie, - CopperAxe, - CopperBars, - CopperBlock, - CopperBoots, - CopperBulb, - CopperChain, - CopperChest, - CopperChestplate, - CopperDoor, - CopperGolemSpawnEgg, - CopperGolemStatue, - CopperGrate, - CopperHelmet, - CopperHoe, - CopperHorseArmor, - CopperIngot, - CopperLantern, - CopperLeggings, - CopperNugget, - CopperNautilusArmor, - CopperOre, - CopperPickaxe, - CopperShovel, - CopperSpear, - CopperSword, - CopperTorch, - CopperTrapdoor, - Cornflower, - CowSpawnEgg, - CrackedDeepslateBricks, - CrackedDeepslateTiles, - CrackedNetherBricks, - CrackedPolishedBlackstoneBricks, - CrackedStoneBricks, - Crafter, - CraftingTable, - CreakingHeart, - CreakingSpawnEgg, - CreeperBannerPattern, - CreeperHead, - CreeperSpawnEgg, - CrimsonButton, - CrimsonDoor, - CrimsonFence, - CrimsonFenceGate, - CrimsonFungus, - CrimsonHangingSign, - CrimsonHyphae, - CrimsonNylium, - CrimsonPlanks, - CrimsonPressurePlate, - CrimsonRoots, - CrimsonShelf, - CrimsonSign, - CrimsonSlab, - CrimsonStairs, - CrimsonStem, - CrimsonTrapdoor, - Crossbow, - CryingObsidian, - CutCopper, - CutCopperSlab, - CutCopperStairs, - CutRedSandstone, - CutRedSandstoneSlab, - CutSandstone, - CutSandstoneSlab, - CyanBanner, - CyanBed, - CyanBundle, - CyanCandle, - CyanCarpet, - CyanConcrete, - CyanConcretePowder, - CyanDye, - CyanGlazedTerracotta, - CyanHarness, - CyanShulkerBox, - CyanStainedGlass, - CyanStainedGlassPane, - CyanTerracotta, - CyanWool, - DamagedAnvil, - Dandelion, - DangerPotterySherd, - DarkOakBoat, - DarkOakButton, - DarkOakChestBoat, - DarkOakDoor, - DarkOakFence, - DarkOakFenceGate, - DarkOakHangingSign, - DarkOakLeaves, - DarkOakLog, - DarkOakPlanks, - DarkOakPressurePlate, - DarkOakSapling, - DarkOakShelf, - DarkOakSign, - DarkOakSlab, - DarkOakStairs, - DarkOakTrapdoor, - DarkOakWood, - DarkPrismarine, - DarkPrismarineSlab, - DarkPrismarineStairs, - DaylightDetector, - DeadBrainCoral, - DeadBrainCoralBlock, - DeadBrainCoralFan, - DeadBubbleCoral, - DeadBubbleCoralBlock, - DeadBubbleCoralFan, - DeadBush, - DeadFireCoral, - DeadFireCoralBlock, - DeadFireCoralFan, - DeadHornCoral, - DeadHornCoralBlock, - DeadHornCoralFan, - DeadTubeCoral, - DeadTubeCoralBlock, - DeadTubeCoralFan, - DebugStick, - DecoratedPot, - Deepslate, - DeepslateBrickSlab, - DeepslateBrickStairs, - DeepslateBrickWall, - DeepslateBricks, - DeepslateCoalOre, - DeepslateCopperOre, - DeepslateDiamondOre, - DeepslateEmeraldOre, - DeepslateGoldOre, - DeepslateIronOre, - DeepslateLapisOre, - DeepslateRedstoneOre, - DeepslateTileSlab, - DeepslateTileStairs, - DeepslateTileWall, - DeepslateTiles, - DetectorRail, - Diamond, - DiamondAxe, - DiamondBlock, - DiamondBoots, - DiamondChestplate, - DiamondHelmet, - DiamondHoe, - DiamondHorseArmor, - DiamondLeggings, - DiamondNautilusArmor, - DiamondOre, - DiamondPickaxe, - DiamondSpear, - DiamondShovel, - DiamondSword, - Diorite, - DioriteSlab, - DioriteStairs, - DioriteWall, - Dirt, - DirtPath, - DiscFragment5, - Dispenser, - DolphinSpawnEgg, - DonkeySpawnEgg, - DragonBreath, - DragonEgg, - DragonHead, - DriedGhast, - DriedKelp, - DriedKelpBlock, - DripstoneBlock, - Dropper, - DrownedSpawnEgg, - DryShortGrass, - DryTallGrass, - DuneArmorTrimSmithingTemplate, - EchoShard, - Egg, - ElderGuardianSpawnEgg, - Elytra, - Emerald, - EmeraldBlock, - EmeraldOre, - EnchantedBook, - EnchantedGoldenApple, - EnchantingTable, - EndCrystal, - EndPortalFrame, - EndRod, - EndStone, - EndStoneBrickSlab, - EndStoneBrickStairs, - EndStoneBrickWall, - EndStoneBricks, - EnderChest, - EnderDragonSpawnEgg, - EnderEye, - EnderPearl, - EndermanSpawnEgg, - EndermiteSpawnEgg, - EvokerSpawnEgg, - ExperienceBottle, - ExplorerPotterySherd, - ExposedChiseledCopper, - ExposedCopper, - ExposedCopperBars, - ExposedCopperBulb, - ExposedCopperChain, - ExposedCopperChest, - ExposedCopperDoor, - ExposedCopperGolemStatue, - ExposedCopperGrate, - ExposedCopperLantern, - ExposedCopperTrapdoor, - ExposedCutCopper, - ExposedCutCopperSlab, - ExposedCutCopperStairs, - ExposedLightningRod, - EyeArmorTrimSmithingTemplate, - Farmland, - Feather, - FermentedSpiderEye, - Fern, - FieldMasonedBannerPattern, - FilledMap, - FireCharge, - FireCoral, - FireCoralBlock, - FireCoralFan, - FireflyBush, - FireworkRocket, - FireworkStar, - FishingRod, - FletchingTable, - Flint, - FlintAndSteel, - FlowArmorTrimSmithingTemplate, - FlowBannerPattern, - FlowPotterySherd, - FlowerBannerPattern, - FlowerPot, - FloweringAzalea, - FloweringAzaleaLeaves, - FoxSpawnEgg, - FriendPotterySherd, - FrogSpawnEgg, - Frogspawn, - Furnace, - FurnaceMinecart, - GhastSpawnEgg, - GhastTear, - GildedBlackstone, - Glass, - GlassBottle, - GlassPane, - GlisteringMelonSlice, - GlobeBannerPattern, - GlowBerries, - GlowInkSac, - GlowItemFrame, - GlowLichen, - GlowSquidSpawnEgg, - Glowstone, - GlowstoneDust, - GoatHorn, - GoatSpawnEgg, - GoldBlock, - GoldIngot, - GoldNugget, - GoldOre, - GoldenApple, - GoldenAxe, - GoldenBoots, - GoldenCarrot, - GoldenDandelion, - GoldenChestplate, - GoldenHelmet, - GoldenHoe, - GoldenHorseArmor, - GoldenLeggings, - GoldenNautilusArmor, - GoldenPickaxe, - GoldenShovel, - GoldenSpear, - GoldenSword, - Granite, - GraniteSlab, - GraniteStairs, - GraniteWall, - GrassBlock, - Gravel, - GrayBanner, - GrayBed, - GrayBundle, - GrayCandle, - GrayCarpet, - GrayConcrete, - GrayConcretePowder, - GrayDye, - GrayGlazedTerracotta, - GrayHarness, - GrayShulkerBox, - GrayStainedGlass, - GrayStainedGlassPane, - GrayTerracotta, - GrayWool, - GreenBanner, - GreenBed, - GreenBundle, - GreenCandle, - GreenCarpet, - GreenConcrete, - GreenConcretePowder, - GreenDye, - GreenGlazedTerracotta, - GreenHarness, - GreenShulkerBox, - GreenStainedGlass, - GreenStainedGlassPane, - GreenTerracotta, - GreenWool, - Grindstone, - GuardianSpawnEgg, - Gunpowder, - GusterBannerPattern, - GusterPotterySherd, - HangingRoots, - HappyGhastSpawnEgg, - HayBlock, - HeartOfTheSea, - HeartPotterySherd, - HeartbreakPotterySherd, - HeavyCore, - HeavyWeightedPressurePlate, - HoglinSpawnEgg, - HoneyBlock, - HoneyBottle, - Honeycomb, - HoneycombBlock, - Hopper, - HopperMinecart, - HornCoral, - HornCoralBlock, - HornCoralFan, - HorseSpawnEgg, - HostArmorTrimSmithingTemplate, - HowlPotterySherd, - HuskSpawnEgg, - Ice, - InfestedChiseledStoneBricks, - InfestedCobblestone, - InfestedCrackedStoneBricks, - InfestedDeepslate, - InfestedMossyStoneBricks, - InfestedStone, - InfestedStoneBricks, - InkSac, - IronAxe, - IronBars, - IronBlock, - IronBoots, - IronChain, - IronChestplate, - IronDoor, - IronGolemSpawnEgg, - IronHelmet, - IronHoe, - IronHorseArmor, - IronIngot, - IronLeggings, - IronNautilusArmor, - IronNugget, - IronOre, - IronPickaxe, - IronSpear, - IronShovel, - IronSword, - IronTrapdoor, - ItemFrame, - JackOLantern, - Jigsaw, - Jukebox, - JungleBoat, - JungleButton, - JungleChestBoat, - JungleDoor, - JungleFence, - JungleFenceGate, - JungleHangingSign, - JungleLeaves, - JungleLog, - JunglePlanks, - JunglePressurePlate, - JungleSapling, - JungleShelf, - JungleSign, - JungleSlab, - JungleStairs, - JungleTrapdoor, - JungleWood, - Kelp, - KnowledgeBook, - Ladder, - Lantern, - LapisBlock, - LapisLazuli, - LapisOre, - LargeAmethystBud, - LargeFern, - LavaBucket, - Lead, - LeafLitter, - Leather, - LeatherBoots, - LeatherChestplate, - LeatherHelmet, - LeatherHorseArmor, - LeatherLeggings, - Lectern, - Lever, - Light, - LightBlueBanner, - LightBlueBed, - LightBlueBundle, - LightBlueCandle, - LightBlueCarpet, - LightBlueConcrete, - LightBlueConcretePowder, - LightBlueDye, - LightBlueGlazedTerracotta, - LightBlueHarness, - LightBlueShulkerBox, - LightBlueStainedGlass, - LightBlueStainedGlassPane, - LightBlueTerracotta, - LightBlueWool, - LightGrayBanner, - LightGrayBed, - LightGrayBundle, - LightGrayCandle, - LightGrayCarpet, - LightGrayConcrete, - LightGrayConcretePowder, - LightGrayDye, - LightGrayGlazedTerracotta, - LightGrayHarness, - LightGrayShulkerBox, - LightGrayStainedGlass, - LightGrayStainedGlassPane, - LightGrayTerracotta, - LightGrayWool, - LightWeightedPressurePlate, - LightningRod, - Lilac, - LilyOfTheValley, - LilyPad, - LimeBanner, - LimeBed, - LimeBundle, - LimeCandle, - LimeCarpet, - LimeConcrete, - LimeConcretePowder, - LimeDye, - LimeGlazedTerracotta, - LimeHarness, - LimeShulkerBox, - LimeStainedGlass, - LimeStainedGlassPane, - LimeTerracotta, - LimeWool, - LingeringPotion, - LlamaSpawnEgg, - Lodestone, - Loom, - Mace, - MagentaBanner, - MagentaBed, - MagentaBundle, - MagentaCandle, - MagentaCarpet, - MagentaConcrete, - MagentaConcretePowder, - MagentaDye, - MagentaGlazedTerracotta, - MagentaHarness, - MagentaShulkerBox, - MagentaStainedGlass, - MagentaStainedGlassPane, - MagentaTerracotta, - MagentaWool, - MagmaBlock, - MagmaCream, - MagmaCubeSpawnEgg, - MangroveBoat, - MangroveButton, - MangroveChestBoat, - MangroveDoor, - MangroveFence, - MangroveFenceGate, - MangroveHangingSign, - MangroveLeaves, - MangroveLog, - MangrovePlanks, - MangrovePressurePlate, - MangrovePropagule, - MangroveRoots, - MangroveShelf, - MangroveSign, - MangroveSlab, - MangroveStairs, - MangroveTrapdoor, - MangroveWood, - Map, - MediumAmethystBud, - Melon, - MelonSeeds, - MelonSlice, - MilkBucket, - Minecart, - MinerPotterySherd, - MojangBannerPattern, - MooshroomSpawnEgg, - MossBlock, - MossCarpet, - MossyCobblestone, - MossyCobblestoneSlab, - MossyCobblestoneStairs, - MossyCobblestoneWall, - MossyStoneBrickSlab, - MossyStoneBrickStairs, - MossyStoneBrickWall, - MossyStoneBricks, - MournerPotterySherd, - Mud, - MudBrickSlab, - MudBrickStairs, - MudBrickWall, - MudBricks, - MuddyMangroveRoots, - MuleSpawnEgg, - MushroomStem, - MushroomStew, - MusicDisc11, - MusicDisc13, - MusicDisc5, - MusicDiscBlocks, - MusicDiscBounce, - MusicDiscCat, - MusicDiscChirp, - MusicDiscCreator, - MusicDiscCreatorMusicBox, - MusicDiscFar, - MusicDiscLavaChicken, - MusicDiscMall, - MusicDiscMellohi, - MusicDiscOtherside, - MusicDiscPigstep, - MusicDiscPrecipice, - MusicDiscRelic, - MusicDiscStal, - MusicDiscStrad, - MusicDiscTears, - MusicDiscWait, - MusicDiscWard, - Mutton, - Mycelium, - NameTag, - NautilusShell, - NautilusSpawnEgg, - NetherBrick, - NetherBrickFence, - NetherBrickSlab, - NetherBrickStairs, - NetherBrickWall, - NetherBricks, - NetherGoldOre, - NetherQuartzOre, - NetherSprouts, - NetherStar, - NetherWart, - NetherWartBlock, - NetheriteAxe, - NetheriteBlock, - NetheriteBoots, - NetheriteChestplate, - NetheriteHelmet, - NetheriteHoe, - NetheriteHorseArmor, - NetheriteIngot, - NetheriteLeggings, - NetheriteNautilusArmor, - NetheritePickaxe, - NetheriteScrap, - NetheriteShovel, - NetheriteSpear, - NetheriteSword, - NetheriteUpgradeSmithingTemplate, - Netherrack, - NoteBlock, - OakBoat, - OakButton, - OakChestBoat, - OakDoor, - OakFence, - OakFenceGate, - OakHangingSign, - OakLeaves, - OakLog, - OakPlanks, - OakPressurePlate, - OakSapling, - OakShelf, - OakSign, - OakSlab, - OakStairs, - OakTrapdoor, - OakWood, - Observer, - Obsidian, - OcelotSpawnEgg, - OchreFroglight, - OminousBottle, - OminousTrialKey, - OpenEyeblossom, - OrangeBanner, - OrangeBed, - OrangeBundle, - OrangeCandle, - OrangeCarpet, - OrangeConcrete, - OrangeConcretePowder, - OrangeDye, - OrangeGlazedTerracotta, - OrangeHarness, - OrangeShulkerBox, - OrangeStainedGlass, - OrangeStainedGlassPane, - OrangeTerracotta, - OrangeTulip, - OrangeWool, - OxeyeDaisy, - OxidizedChiseledCopper, - OxidizedCopper, - OxidizedCopperBars, - OxidizedCopperBulb, - OxidizedCopperChain, - OxidizedCopperChest, - OxidizedCopperDoor, - OxidizedCopperGolemStatue, - OxidizedCopperGrate, - OxidizedCopperLantern, - OxidizedCopperTrapdoor, - OxidizedCutCopper, - OxidizedCutCopperSlab, - OxidizedCutCopperStairs, - OxidizedLightningRod, - PackedIce, - PackedMud, - Painting, - PaleHangingMoss, - PaleMossBlock, - PaleMossCarpet, - PaleOakBoat, - PaleOakButton, - PaleOakChestBoat, - PaleOakDoor, - PaleOakFence, - PaleOakFenceGate, - PaleOakHangingSign, - PaleOakLeaves, - PaleOakLog, - PaleOakPlanks, - PaleOakPressurePlate, - PaleOakSapling, - PaleOakShelf, - PaleOakSign, - PaleOakSlab, - PaleOakStairs, - PaleOakTrapdoor, - PaleOakWood, - PandaSpawnEgg, - Paper, - ParchedSpawnEgg, - ParrotSpawnEgg, - PearlescentFroglight, - Peony, - PetrifiedOakSlab, - PhantomMembrane, - PhantomSpawnEgg, - PigSpawnEgg, - PiglinBannerPattern, - PiglinBruteSpawnEgg, - PiglinHead, - PiglinSpawnEgg, - PillagerSpawnEgg, - PinkBanner, - PinkBed, - PinkBundle, - PinkCandle, - PinkCarpet, - PinkConcrete, - PinkConcretePowder, - PinkDye, - PinkGlazedTerracotta, - PinkHarness, - PinkPetals, - PinkShulkerBox, - PinkStainedGlass, - PinkStainedGlassPane, - PinkTerracotta, - PinkTulip, - PinkWool, - Piston, - PitcherPlant, - PitcherPod, - PlayerHead, - PlentyPotterySherd, - Podzol, - PointedDripstone, - PoisonousPotato, - PolarBearSpawnEgg, - PolishedAndesite, - PolishedAndesiteSlab, - PolishedAndesiteStairs, - PolishedBasalt, - PolishedBlackstone, - PolishedBlackstoneBrickSlab, - PolishedBlackstoneBrickStairs, - PolishedBlackstoneBrickWall, - PolishedBlackstoneBricks, - PolishedBlackstoneButton, - PolishedBlackstonePressurePlate, - PolishedBlackstoneSlab, - PolishedBlackstoneStairs, - PolishedBlackstoneWall, - PolishedCinnabar, - PolishedCinnabarSlab, - PolishedCinnabarStairs, - PolishedCinnabarWall, - PolishedDeepslate, - PolishedDeepslateSlab, - PolishedDeepslateStairs, - PolishedDeepslateWall, - PolishedDiorite, - PolishedDioriteSlab, - PolishedDioriteStairs, - PolishedGranite, - PolishedGraniteSlab, - PolishedGraniteStairs, - PolishedSulfur, - PolishedSulfurSlab, - PolishedSulfurStairs, - PolishedSulfurWall, - PolishedTuff, - PolishedTuffSlab, - PolishedTuffStairs, - PolishedTuffWall, - PoppedChorusFruit, - Poppy, - Porkchop, - Potato, - PotentSulfur, - Potion, - PowderSnowBucket, - PoweredRail, - Prismarine, - PrismarineBrickSlab, - PrismarineBrickStairs, - PrismarineBricks, - PrismarineCrystals, - PrismarineShard, - PrismarineSlab, - PrismarineStairs, - PrismarineWall, - PrizePotterySherd, - Pufferfish, - PufferfishBucket, - PufferfishSpawnEgg, - Pumpkin, - PumpkinPie, - PumpkinSeeds, - PurpleBanner, - PurpleBed, - PurpleBundle, - PurpleCandle, - PurpleCarpet, - PurpleConcrete, - PurpleConcretePowder, - PurpleDye, - PurpleGlazedTerracotta, - PurpleHarness, - PurpleShulkerBox, - PurpleStainedGlass, - PurpleStainedGlassPane, - PurpleTerracotta, - PurpleWool, - PurpurBlock, - PurpurPillar, - PurpurSlab, - PurpurStairs, - Quartz, - QuartzBlock, - QuartzBricks, - QuartzPillar, - QuartzSlab, - QuartzStairs, - Rabbit, - RabbitFoot, - RabbitHide, - RabbitSpawnEgg, - RabbitStew, - Rail, - RaiserArmorTrimSmithingTemplate, - RavagerSpawnEgg, - RawCopper, - RawCopperBlock, - RawGold, - RawGoldBlock, - RawIron, - RawIronBlock, - RecoveryCompass, - RedBanner, - RedBed, - RedBundle, - RedCandle, - RedCarpet, - RedConcrete, - RedConcretePowder, - RedDye, - RedGlazedTerracotta, - RedHarness, - RedMushroom, - RedMushroomBlock, - RedNetherBrickSlab, - RedNetherBrickStairs, - RedNetherBrickWall, - RedNetherBricks, - RedSand, - RedSandstone, - RedSandstoneSlab, - RedSandstoneStairs, - RedSandstoneWall, - RedShulkerBox, - RedStainedGlass, - RedStainedGlassPane, - RedTerracotta, - RedTulip, - RedWool, - Redstone, - RedstoneBlock, - RedstoneLamp, - RedstoneOre, - RedstoneTorch, - ReinforcedDeepslate, - Repeater, - RepeatingCommandBlock, - ResinBlock, - ResinBrick, - ResinBrickSlab, - ResinBrickStairs, - ResinBrickWall, - ResinBricks, - ResinClump, - RespawnAnchor, - RibArmorTrimSmithingTemplate, - RootedDirt, - RoseBush, - RottenFlesh, - Saddle, - Salmon, - SalmonBucket, - SalmonSpawnEgg, - Sand, - Sandstone, - SandstoneSlab, - SandstoneStairs, - SandstoneWall, - Scaffolding, - ScrapePotterySherd, - Sculk, - SculkCatalyst, - SculkSensor, - SculkShrieker, - SculkVein, - SeaLantern, - SeaPickle, - Seagrass, - SentryArmorTrimSmithingTemplate, - ShaperArmorTrimSmithingTemplate, - SheafPotterySherd, - Shears, - SheepSpawnEgg, - ShelterPotterySherd, - Shield, - ShortDryGrass, - ShortGrass, - Shroomlight, - ShulkerBox, - ShulkerShell, - ShulkerSpawnEgg, - SilenceArmorTrimSmithingTemplate, - SilverfishSpawnEgg, - SkeletonHorseSpawnEgg, - SkeletonSkull, - SkeletonSpawnEgg, - SkullBannerPattern, - SkullPotterySherd, - SlimeBall, - SlimeBlock, - SlimeSpawnEgg, - SmallAmethystBud, - SmallDripleaf, - SmithingTable, - Smoker, - SmoothBasalt, - SmoothQuartz, - SmoothQuartzSlab, - SmoothQuartzStairs, - SmoothRedSandstone, - SmoothRedSandstoneSlab, - SmoothRedSandstoneStairs, - SmoothSandstone, - SmoothSandstoneSlab, - SmoothSandstoneStairs, - SmoothStone, - SmoothStoneSlab, - SnifferEgg, - SnifferSpawnEgg, - SnortPotterySherd, - SnoutArmorTrimSmithingTemplate, - Snow, - SnowBlock, - SnowGolemSpawnEgg, - Snowball, - SoulCampfire, - SoulLantern, - SoulSand, - SoulSoil, - SoulTorch, - Spawner, - SpectralArrow, - SpiderEye, - SpiderSpawnEgg, - SpireArmorTrimSmithingTemplate, - SplashPotion, - Sponge, - SporeBlossom, - SpruceBoat, - SpruceButton, - SpruceChestBoat, - SpruceDoor, - SpruceFence, - SpruceFenceGate, - SpruceHangingSign, - SpruceLeaves, - SpruceLog, - SprucePlanks, - SprucePressurePlate, - SpruceSapling, - SpruceShelf, - SpruceSign, - SpruceSlab, - SpruceStairs, - SpruceTrapdoor, - SpruceWood, - Spyglass, - SquidSpawnEgg, - Stick, - StickyPiston, - Stone, - StoneAxe, - StoneBrickSlab, - StoneBrickStairs, - StoneBrickWall, - StoneBricks, - StoneButton, - StoneHoe, - StonePickaxe, - StonePressurePlate, - StoneShovel, - StoneSlab, - StoneSpear, - StoneStairs, - StoneSword, - Stonecutter, - StraySpawnEgg, - StriderSpawnEgg, - String, - StrippedAcaciaLog, - StrippedAcaciaWood, - StrippedBambooBlock, - StrippedBirchLog, - StrippedBirchWood, - StrippedCherryLog, - StrippedCherryWood, - StrippedCrimsonHyphae, - StrippedCrimsonStem, - StrippedDarkOakLog, - StrippedDarkOakWood, - StrippedJungleLog, - StrippedJungleWood, - StrippedMangroveLog, - StrippedMangroveWood, - StrippedOakLog, - StrippedOakWood, - StrippedPaleOakLog, - StrippedPaleOakWood, - StrippedSpruceLog, - StrippedSpruceWood, - StrippedWarpedHyphae, - StrippedWarpedStem, - StructureBlock, - StructureVoid, - Sugar, - SugarCane, - Sulfur, - SulfurBrickSlab, - SulfurBrickStairs, - SulfurBrickWall, - SulfurBricks, - SulfurCubeBucket, - SulfurCubeSpawnEgg, - SulfurSlab, - SulfurSpike, - SulfurStairs, - SulfurWall, - Sunflower, - SuspiciousGravel, - SuspiciousSand, - SuspiciousStew, - SweetBerries, - TadpoleBucket, - TadpoleSpawnEgg, - TallDryGrass, - TallGrass, - Target, - Terracotta, - TestBlock, - TestInstanceBlock, - TideArmorTrimSmithingTemplate, - TintedGlass, - TippedArrow, - Tnt, - TntMinecart, - Torch, - Torchflower, - TorchflowerSeeds, - TotemOfUndying, - TraderLlamaSpawnEgg, - TrappedChest, - TrialKey, - TrialSpawner, - Trident, - TripwireHook, - TropicalFish, - TropicalFishBucket, - TropicalFishSpawnEgg, - TubeCoral, - TubeCoralBlock, - TubeCoralFan, - Tuff, - TuffBrickSlab, - TuffBrickStairs, - TuffBrickWall, - TuffBricks, - TuffSlab, - TuffStairs, - TuffWall, - TurtleEgg, - TurtleHelmet, - TurtleScute, - TurtleSpawnEgg, - TwistingVines, - Vault, - VerdantFroglight, - VexArmorTrimSmithingTemplate, - VexSpawnEgg, - VillagerSpawnEgg, - VindicatorSpawnEgg, - Vine, - WanderingTraderSpawnEgg, - WardArmorTrimSmithingTemplate, - WardenSpawnEgg, - WarpedButton, - WarpedDoor, - WarpedFence, - WarpedFenceGate, - WarpedFungus, - WarpedFungusOnAStick, - WarpedHangingSign, - WarpedHyphae, - WarpedNylium, - WarpedPlanks, - WarpedPressurePlate, - WarpedRoots, - WarpedShelf, - WarpedSign, - WarpedSlab, - WarpedStairs, - WarpedStem, - WarpedTrapdoor, - WarpedWartBlock, - WaterBucket, - WaxedChiseledCopper, - WaxedCopperBars, - WaxedCopperBlock, - WaxedCopperBulb, - WaxedCopperChain, - WaxedCopperChest, - WaxedCopperDoor, - WaxedCopperGolemStatue, - WaxedCopperGrate, - WaxedCopperLantern, - WaxedCopperTrapdoor, - WaxedCutCopper, - WaxedCutCopperSlab, - WaxedCutCopperStairs, - WaxedExposedChiseledCopper, - WaxedExposedCopper, - WaxedExposedCopperBars, - WaxedExposedCopperBulb, - WaxedExposedCopperChain, - WaxedExposedCopperChest, - WaxedExposedCopperDoor, - WaxedExposedCopperGolemStatue, - WaxedExposedCopperGrate, - WaxedExposedCopperLantern, - WaxedExposedCopperTrapdoor, - WaxedExposedCutCopper, - WaxedExposedCutCopperSlab, - WaxedExposedCutCopperStairs, - WaxedExposedLightningRod, - WaxedLightningRod, - WaxedOxidizedChiseledCopper, - WaxedOxidizedCopper, - WaxedOxidizedCopperBars, - WaxedOxidizedCopperBulb, - WaxedOxidizedCopperChain, - WaxedOxidizedCopperChest, - WaxedOxidizedCopperDoor, - WaxedOxidizedCopperGolemStatue, - WaxedOxidizedCopperGrate, - WaxedOxidizedCopperLantern, - WaxedOxidizedCopperTrapdoor, - WaxedOxidizedCutCopper, - WaxedOxidizedCutCopperSlab, - WaxedOxidizedCutCopperStairs, - WaxedOxidizedLightningRod, - WaxedWeatheredChiseledCopper, - WaxedWeatheredCopper, - WaxedWeatheredCopperBars, - WaxedWeatheredCopperBulb, - WaxedWeatheredCopperChain, - WaxedWeatheredCopperChest, - WaxedWeatheredCopperDoor, - WaxedWeatheredCopperGolemStatue, - WaxedWeatheredCopperGrate, - WaxedWeatheredCopperLantern, - WaxedWeatheredCopperTrapdoor, - WaxedWeatheredCutCopper, - WaxedWeatheredCutCopperSlab, - WaxedWeatheredCutCopperStairs, - WaxedWeatheredLightningRod, - WayfinderArmorTrimSmithingTemplate, - WeatheredChiseledCopper, - WeatheredCopper, - WeatheredCopperBars, - WeatheredCopperBulb, - WeatheredCopperChain, - WeatheredCopperChest, - WeatheredCopperDoor, - WeatheredCopperGolemStatue, - WeatheredCopperGrate, - WeatheredCopperLantern, - WeatheredCopperTrapdoor, - WeatheredCutCopper, - WeatheredCutCopperSlab, - WeatheredCutCopperStairs, - WeatheredLightningRod, - WeepingVines, - WetSponge, - Wheat, - WheatSeeds, - WhiteBanner, - WhiteBed, - WhiteBundle, - WhiteCandle, - WhiteCarpet, - WhiteConcrete, - WhiteConcretePowder, - WhiteDye, - WhiteGlazedTerracotta, - WhiteHarness, - WhiteShulkerBox, - WhiteStainedGlass, - WhiteStainedGlassPane, - WhiteTerracotta, - WhiteTulip, - WhiteWool, - WildArmorTrimSmithingTemplate, - Wildflowers, - WindCharge, - WitchSpawnEgg, - WitherRose, - WitherSkeletonSkull, - WitherSkeletonSpawnEgg, - WitherSpawnEgg, - WolfArmor, - WolfSpawnEgg, - WoodenAxe, - WoodenHoe, - WoodenPickaxe, - WoodenSpear, - WoodenShovel, - WoodenSword, - WritableBook, - WrittenBook, - YellowBanner, - YellowBed, - YellowBundle, - YellowCandle, - YellowCarpet, - YellowConcrete, - YellowConcretePowder, - YellowDye, - YellowGlazedTerracotta, - YellowHarness, - YellowShulkerBox, - YellowStainedGlass, - YellowStainedGlassPane, - YellowTerracotta, - YellowWool, - ZoglinSpawnEgg, - ZombieHead, - ZombieHorseSpawnEgg, - ZombieSpawnEgg, - ZombieNautilusSpawnEgg, - ZombieVillagerSpawnEgg, - ZombifiedPiglinSpawnEgg, - } -} diff --git a/MinecraftClient/Inventory/ItemTypeExtensions.cs b/MinecraftClient/Inventory/ItemTypeExtensions.cs deleted file mode 100644 index 0aac00ba07..0000000000 --- a/MinecraftClient/Inventory/ItemTypeExtensions.cs +++ /dev/null @@ -1,325 +0,0 @@ -using System; -using System.Linq; - -namespace MinecraftClient.Inventory -{ - public static class ItemTypeExtensions - { - public static bool IsFood(this ItemType m) - { - ItemType[] t = - { - ItemType.Apple, - ItemType.BakedPotato, - ItemType.Beetroot, - ItemType.Bread, - ItemType.Carrot, - ItemType.CookedChicken, - ItemType.CookedCod, - ItemType.CookedMutton, - ItemType.CookedPorkchop, - ItemType.CookedRabbit, - ItemType.CookedSalmon, - ItemType.Cookie, - ItemType.DriedKelp, - ItemType.EnchantedGoldenApple, - ItemType.GoldenApple, - ItemType.GoldenCarrot, - ItemType.MelonSlice, - ItemType.Potato, - ItemType.PumpkinPie, - ItemType.Beef, - ItemType.Chicken, - ItemType.Cod, - ItemType.Mutton, - ItemType.Porkchop, - ItemType.Rabbit, - ItemType.Salmon, - ItemType.CookedBeef, - ItemType.SweetBerries, - ItemType.TropicalFish - }; - return t.Contains(m); - } - - public static bool IsStackable(this ItemType m) - { - // these are non-stackable - ItemType[] t = - { - ItemType.AcaciaBoat, - ItemType.AcaciaChestBoat, - ItemType.AxolotlBucket, - ItemType.BirchBoat, - ItemType.BirchChestBoat, - ItemType.BlackBed, - ItemType.BlackBundle, - ItemType.BlackHarness, - ItemType.BlackShulkerBox, - ItemType.BlueBed, - ItemType.BlueBundle, - ItemType.BlueHarness, - ItemType.BlueShulkerBox, - ItemType.Bundle, - ItemType.Bow, - ItemType.BrownBed, - ItemType.BrownBundle, - ItemType.BrownHarness, - ItemType.BrownShulkerBox, - ItemType.BordureIndentedBannerPattern, - ItemType.BambooChestRaft, - ItemType.BambooRaft, - ItemType.Cake, - ItemType.ChainmailBoots, - ItemType.ChainmailChestplate, - ItemType.ChainmailHelmet, - ItemType.ChainmailLeggings, - ItemType.ChestMinecart, - ItemType.CodBucket, - ItemType.CommandBlockMinecart, - ItemType.CreeperBannerPattern, - ItemType.Crossbow, - ItemType.CopperAxe, - ItemType.CopperBoots, - ItemType.CopperChestplate, - ItemType.CopperHelmet, - ItemType.CopperHoe, - ItemType.CopperHorseArmor, - ItemType.CopperLeggings, - ItemType.CopperNautilusArmor, - ItemType.CopperPickaxe, - ItemType.CopperShovel, - ItemType.CopperSpear, - ItemType.CopperSword, - ItemType.CyanBed, - ItemType.CyanBundle, - ItemType.CyanHarness, - ItemType.CyanShulkerBox, - ItemType.CherryBoat, - ItemType.CherryChestBoat, - ItemType.DarkOakBoat, - ItemType.DarkOakChestBoat, - ItemType.DebugStick, - ItemType.DiamondAxe, - ItemType.DiamondBoots, - ItemType.DiamondChestplate, - ItemType.DiamondHelmet, - ItemType.DiamondHoe, - ItemType.DiamondHorseArmor, - ItemType.DiamondLeggings, - ItemType.DiamondNautilusArmor, - ItemType.DiamondPickaxe, - ItemType.DiamondShovel, - ItemType.DiamondSpear, - ItemType.DiamondSword, - ItemType.Elytra, - ItemType.EnchantedBook, - ItemType.FilledMap, - ItemType.FishingRod, - ItemType.FieldMasonedBannerPattern, - ItemType.FlintAndSteel, - ItemType.FurnaceMinecart, - ItemType.FlowBannerPattern, - ItemType.FlowerBannerPattern, - ItemType.GoatHorn, - ItemType.GlobeBannerPattern, - ItemType.GusterBannerPattern, - ItemType.GoldenAxe, - ItemType.GoldenBoots, - ItemType.GoldenChestplate, - ItemType.GoldenHelmet, - ItemType.GoldenHoe, - ItemType.GoldenHorseArmor, - ItemType.GoldenLeggings, - ItemType.GoldenNautilusArmor, - ItemType.GoldenPickaxe, - ItemType.GoldenShovel, - ItemType.GoldenSpear, - ItemType.GoldenSword, - ItemType.GrayBed, - ItemType.GrayBundle, - ItemType.GrayHarness, - ItemType.GrayShulkerBox, - ItemType.GreenBed, - ItemType.GreenBundle, - ItemType.GreenHarness, - ItemType.GreenShulkerBox, - ItemType.HopperMinecart, - ItemType.IronNautilusArmor, - ItemType.IronSpear, - ItemType.IronAxe, - ItemType.IronBoots, - ItemType.IronChestplate, - ItemType.IronHelmet, - ItemType.IronHoe, - ItemType.IronHorseArmor, - ItemType.IronLeggings, - ItemType.IronPickaxe, - ItemType.IronShovel, - ItemType.IronSword, - ItemType.Jigsaw, - ItemType.JungleBoat, - ItemType.JungleChestBoat, - ItemType.LavaBucket, - ItemType.LeatherBoots, - ItemType.LeatherChestplate, - ItemType.LeatherHelmet, - ItemType.LeatherHorseArmor, - ItemType.LeatherLeggings, - ItemType.LightBlueBed, - ItemType.LightBlueBundle, - ItemType.LightBlueHarness, - ItemType.LightBlueShulkerBox, - ItemType.LightGrayBed, - ItemType.LightGrayBundle, - ItemType.LightGrayHarness, - ItemType.LightGrayShulkerBox, - ItemType.LimeBed, - ItemType.LimeBundle, - ItemType.LimeHarness, - ItemType.LimeShulkerBox, - ItemType.LingeringPotion, - ItemType.Mace, - ItemType.MagentaBed, - ItemType.MagentaBundle, - ItemType.MagentaHarness, - ItemType.MagentaShulkerBox, - ItemType.MilkBucket, - ItemType.Minecart, - ItemType.MangroveBoat, - ItemType.MangroveChestBoat, - ItemType.MojangBannerPattern, - ItemType.MusicDisc5, - ItemType.MushroomStew, - ItemType.MusicDisc11, - ItemType.MusicDisc13, - ItemType.MusicDiscBlocks, - ItemType.MusicDiscCat, - ItemType.MusicDiscChirp, - ItemType.MusicDiscCreator, - ItemType.MusicDiscCreatorMusicBox, - ItemType.MusicDiscFar, - ItemType.MusicDiscLavaChicken, - ItemType.MusicDiscMall, - ItemType.MusicDiscMellohi, - ItemType.MusicDiscOtherside, - ItemType.MusicDiscPigstep, - ItemType.MusicDiscPrecipice, - ItemType.MusicDiscRelic, - ItemType.MusicDiscStal, - ItemType.MusicDiscStrad, - ItemType.MusicDiscTears, - ItemType.MusicDiscWait, - ItemType.MusicDiscWard, - ItemType.NetheriteHorseArmor, - ItemType.NetheriteNautilusArmor, - ItemType.NetheriteSpear, - ItemType.OakBoat, - ItemType.OakChestBoat, - ItemType.OrangeBed, - ItemType.OrangeBundle, - ItemType.OrangeHarness, - ItemType.OrangeShulkerBox, - ItemType.PaleOakBoat, - ItemType.PaleOakChestBoat, - ItemType.PinkBed, - ItemType.PinkBundle, - ItemType.PinkHarness, - ItemType.PinkShulkerBox, - ItemType.Potion, - ItemType.PowderSnowBucket, - ItemType.PufferfishBucket, - ItemType.PiglinBannerPattern, - ItemType.PurpleBed, - ItemType.PurpleBundle, - ItemType.PurpleHarness, - ItemType.PurpleShulkerBox, - ItemType.RabbitStew, - ItemType.RedBed, - ItemType.RedBundle, - ItemType.RedHarness, - ItemType.RedShulkerBox, - ItemType.Saddle, - ItemType.SalmonBucket, - ItemType.Shears, - ItemType.Shield, - ItemType.ShulkerBox, - ItemType.SkullBannerPattern, - ItemType.SplashPotion, - ItemType.SpruceBoat, - ItemType.SpruceChestBoat, - ItemType.Spyglass, - ItemType.StoneSpear, - ItemType.StoneAxe, - ItemType.StoneHoe, - ItemType.StonePickaxe, - ItemType.StoneShovel, - ItemType.StoneSword, - ItemType.StructureBlock, - ItemType.SuspiciousStew, - ItemType.TntMinecart, - ItemType.TotemOfUndying, - ItemType.Trident, - ItemType.TropicalFishBucket, - ItemType.TurtleHelmet, - ItemType.WaterBucket, - ItemType.WhiteBed, - ItemType.WhiteBundle, - ItemType.WhiteHarness, - ItemType.WhiteShulkerBox, - ItemType.WolfArmor, - ItemType.WoodenSpear, - ItemType.WoodenAxe, - ItemType.WoodenHoe, - ItemType.WoodenPickaxe, - ItemType.WoodenShovel, - ItemType.WoodenSword, - ItemType.WritableBook, - ItemType.WrittenBook, - ItemType.YellowBed, - ItemType.YellowBundle, - ItemType.YellowHarness, - ItemType.YellowShulkerBox - }; - return !t.Contains(m); - } - - public static int StackCount(this ItemType m) - { - // These are stack to 16 only - ItemType[] t = - { - ItemType.BlackBanner, - ItemType.BlueBanner, - ItemType.BrownBanner, - ItemType.CyanBanner, - ItemType.GrayBanner, - ItemType.GreenBanner, - ItemType.LightBlueBanner, - ItemType.LightGrayBanner, - ItemType.LimeBanner, - ItemType.MagentaBanner, - ItemType.OrangeBanner, - ItemType.PinkBanner, - ItemType.PurpleBanner, - ItemType.RedBanner, - ItemType.WhiteBanner, - ItemType.YellowBanner, - ItemType.ArmorStand, - ItemType.Bucket, - ItemType.BlueEgg, - ItemType.BrownEgg, - ItemType.Egg, - ItemType.EnderEye, - ItemType.HoneyBottle, - ItemType.Snowball - }; - if (m.IsStackable()) - return 64; - else if (t.Contains(m)) - return 16; - else - return 1; - } - } -} diff --git a/MinecraftClient/Inventory/SuspiciousStewEffect.cs b/MinecraftClient/Inventory/SuspiciousStewEffect.cs deleted file mode 100644 index 7b1b555395..0000000000 --- a/MinecraftClient/Inventory/SuspiciousStewEffect.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace MinecraftClient.Inventory; - -public record SuspiciousStewEffect(int TypeId, int Duration); \ No newline at end of file diff --git a/MinecraftClient/Inventory/TrimAssetOverride.cs b/MinecraftClient/Inventory/TrimAssetOverride.cs deleted file mode 100644 index 7047bde249..0000000000 --- a/MinecraftClient/Inventory/TrimAssetOverride.cs +++ /dev/null @@ -1,3 +0,0 @@ -namespace MinecraftClient.Inventory; - -public record TrimAssetOverride(int ArmorMaterialType, string AssetName); \ No newline at end of file diff --git a/MinecraftClient/Inventory/VillagerInfo.cs b/MinecraftClient/Inventory/VillagerInfo.cs deleted file mode 100644 index 426cd112c7..0000000000 --- a/MinecraftClient/Inventory/VillagerInfo.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace MinecraftClient.Inventory -{ - /// - /// Properties of a villager - /// - public record VillagerInfo - { - public int Level { get; set; } - public int Experience { get; set; } - public bool IsRegularVillager { get; set; } - public bool CanRestock { get; set; } - } -} diff --git a/MinecraftClient/Inventory/VillagerTrade.cs b/MinecraftClient/Inventory/VillagerTrade.cs deleted file mode 100644 index 46cd13e9da..0000000000 --- a/MinecraftClient/Inventory/VillagerTrade.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace MinecraftClient.Inventory -{ - /// - /// Represents a trade of a villager - /// - public record VillagerTrade( - Item InputItem1, - Item OutputItem, - Item? InputItem2, - bool TradeDisabled, - int NumberOfTradeUses, - int MaximumNumberOfTradeUses, - int Xp, - int SpecialPrice, - float PriceMultiplier, - int Demand); -} diff --git a/MinecraftClient/Inventory/WindowActionType.cs b/MinecraftClient/Inventory/WindowActionType.cs deleted file mode 100644 index 340a16ed59..0000000000 --- a/MinecraftClient/Inventory/WindowActionType.cs +++ /dev/null @@ -1,88 +0,0 @@ -namespace MinecraftClient.Inventory -{ - /// - /// Represents mouse interactions with an inventory window - /// - public enum WindowActionType - { - /// - /// Left click with mouse on a slot: grab or drop a whole item stack - /// - LeftClick, - - /// - /// Right click with mouse on a slot: grab half a stack or drop a single item - /// - RightClick, - - /// - /// Middle click with mouse on a slot: grab a full stack from creative inventory - /// - MiddleClick, - - /// - /// Shift+Left click with mouse on a slot: send a whole item stack to the hotbar or other inventory - /// - ShiftClick, - - /// - /// Shift+Right click with mouse on a slot: send a whole item stack to the hotbar or other inventory. Differece from ShiftClick is how it reported to server - /// - ShiftRightClick, - - /// - /// Drop a single item on ground - /// - DropItem, - - /// - /// Drop a whole item stack on ground - /// - DropItemStack, - - /// - /// Start hovering slots with left button pressed: Distribute evenly the stack on hovered slots - /// - StartDragLeft, - - /// - /// Start hovering slots with right button pressed: Drop one item on each hovered slot - /// - StartDragRight, - - /// - /// Start hovering slots with middle button pressed: Create one item stack on each hovered slot in creative mode - /// - StartDragMiddle, - - /// - /// Hover a slot to distribute evenly an item stack - /// - AddDragLeft, - - /// - /// Hover a slot to drop one item from an item stack - /// - AddDragRight, - - /// - /// Hover a slot to create one item stack in creative mode - /// - AddDragMiddle, - - /// - /// Stop hovering slots with left button pressed - /// - EndDragLeft, - - /// - /// Stop hovering slots with right button pressed - /// - EndDragRight, - - /// - /// Stop hovering slots with middble button pressed - /// - EndDragMiddle, - } -} diff --git a/MinecraftClient/Json.cs b/MinecraftClient/Json.cs deleted file mode 100644 index 08f5b24c4f..0000000000 --- a/MinecraftClient/Json.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System; -using System.Text.Encodings.Web; -using System.Text.Json; -using System.Text.Json.Nodes; - -namespace MinecraftClient; - -/// -/// JSON utilities backed by System.Text.Json. -/// -public static class Json -{ - private static readonly JsonSerializerOptions s_escapeOptions = new() - { - Encoder = JavaScriptEncoder.UnsafeRelaxedJsonEscaping - }; - - /// - /// Parse a JSON string into a mutable DOM. - /// Returns null for null, empty, or whitespace-only input. - /// Returns a wrapping the raw string when the input - /// is not valid JSON (e.g. a plain-text Minecraft MOTD or chat message). - /// - public static JsonNode? ParseJson(string? json) - { - if (string.IsNullOrWhiteSpace(json)) return null; - ReadOnlySpan text = json.AsSpan().TrimStart(); - if (!LooksLikeJson(text)) - return JsonValue.Create(json); - - try { return JsonNode.Parse(json); } - catch (JsonException) { return JsonValue.Create(json); } - } - - private static bool LooksLikeJson(ReadOnlySpan text) - { - if (text.IsEmpty) - return false; - - return text[0] switch - { - '{' or '"' => true, - '[' => LooksLikeJsonArray(text[1..]), - '-' => text.Length > 1 && char.IsAsciiDigit(text[1]), - >= '0' and <= '9' => true, - 't' or 'f' or 'n' => true, - _ => false - }; - } - - private static bool LooksLikeJsonArray(ReadOnlySpan text) - { - text = text.TrimStart(); - if (text.IsEmpty) - return false; - - return text[0] switch - { - ']' or '{' or '[' or '"' => true, - '-' => text.Length > 1 && char.IsAsciiDigit(text[1]), - >= '0' and <= '9' => true, - 't' or 'f' or 'n' => true, - _ => false - }; - } - - /// - /// Escape a string for embedding inside a JSON string literal. - /// Uses System.Text.Json serialization and strips the surrounding quotes. - /// - public static string EscapeString(string src) => - JsonSerializer.Serialize(src, s_escapeOptions)[1..^1]; -} - -/// -/// Extension helpers for that replicate the access patterns -/// of the former JSONData.StringValue property. -/// -public static class JsonNodeExtensions -{ - /// - /// Return the string representation of any JSON value. - /// Strings are returned without quotes; numbers, booleans, and null - /// are returned as their text representation. - /// - public static string GetStringValue(this JsonNode? node) => node switch - { - null => "null", - JsonValue val when val.TryGetValue(out var s) => s, - _ => node.ToJsonString() - }; -} diff --git a/MinecraftClient/LegacyAchievementCatalog.cs b/MinecraftClient/LegacyAchievementCatalog.cs deleted file mode 100644 index bce17f8d81..0000000000 --- a/MinecraftClient/LegacyAchievementCatalog.cs +++ /dev/null @@ -1,53 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace MinecraftClient -{ - internal static class LegacyAchievementCatalog - { - public static IReadOnlyList Ids { get; } = - [ - "achievement.openInventory", - "achievement.mineWood", - "achievement.buildWorkBench", - "achievement.buildPickaxe", - "achievement.buildFurnace", - "achievement.acquireIron", - "achievement.buildHoe", - "achievement.makeBread", - "achievement.bakeCake", - "achievement.buildBetterPickaxe", - "achievement.cookFish", - "achievement.onARail", - "achievement.buildSword", - "achievement.killEnemy", - "achievement.killCow", - "achievement.flyPig", - "achievement.snipeSkeleton", - "achievement.diamonds", - "achievement.diamondsToYou", - "achievement.portal", - "achievement.ghast", - "achievement.blazeRod", - "achievement.potion", - "achievement.theEnd", - "achievement.theEnd2", - "achievement.enchantments", - "achievement.overkill", - "achievement.bookcase", - "achievement.breedCow", - "achievement.spawnWither", - "achievement.killWither", - "achievement.fullBeacon", - "achievement.exploreAllBiomes", - "achievement.overpowered" - ]; - - private static readonly HashSet s_idSet = new(Ids, StringComparer.Ordinal); - - public static bool Contains(string id) - { - return s_idSet.Contains(id); - } - } -} diff --git a/MinecraftClient/Logger/FileLogLogger.cs b/MinecraftClient/Logger/FileLogLogger.cs deleted file mode 100644 index ab660bdf41..0000000000 --- a/MinecraftClient/Logger/FileLogLogger.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System; -using System.IO; -using System.Threading; -using MinecraftClient.Scripting; - -namespace MinecraftClient.Logger -{ - public class FileLogLogger : FilteredLogger - { - private readonly string logFile; - private readonly bool prependTimestamp; - private readonly Lock logFileLock = new(); - - public FileLogLogger(string file, bool prependTimestamp = false) - { - logFile = file; - this.prependTimestamp = prependTimestamp; - Save("### Log started at " + GetTimestamp() + " ###"); - } - - private void LogAndSave(string msg) - { - Log(msg); - Save(msg); - } - - private void Save(string msg) - { - try - { - if (!Settings.Config.Logging.SaveColorCodes) - msg = ChatBot.GetVerbatim(msg); - if (prependTimestamp) - msg = GetTimestamp() + ' ' + msg; - - string? directory = Path.GetDirectoryName(logFile); - if (!String.IsNullOrEmpty(directory) && !Directory.Exists(directory)) - Directory.CreateDirectory(directory); - lock (logFileLock) - { - FileStream stream = new(logFile, FileMode.OpenOrCreate); - StreamWriter writer = new(stream); - stream.Seek(0, SeekOrigin.End); - writer.WriteLine(msg); - writer.Dispose(); - stream.Close(); - } - } - catch (Exception e) - { - // Must use base since we already failed to write log - base.Error("Cannot write to log file: " + e.Message); - base.Debug("Stack trace: \n" + e.StackTrace); - } - } - - private static string GetTimestamp() - { - DateTime time = DateTime.Now; - return String.Format("{0}-{1}-{2} {3}:{4}:{5}", - time.Year.ToString("0000"), - time.Month.ToString("00"), - time.Day.ToString("00"), - time.Hour.ToString("00"), - time.Minute.ToString("00"), - time.Second.ToString("00")); - } - - public override void Chat(string msg) - { - if (ChatEnabled) - { - if (ShouldDisplay(FilterChannel.Chat, msg)) - { - ConsoleIO.WriteChatLineIfVisible(msg); - Save(msg); - } - else Debug("[Logger] One Chat message filtered: " + msg); - } - } - - public override void Debug(string msg) - { - if (DebugEnabled) - { - if (ShouldDisplay(FilterChannel.Debug, msg)) - { - LogAndSave("§8[DEBUG] " + msg); - } - } - } - - public override void PacketDebug(string msg) - { - if (Settings.Config.Logging.PacketDebugMessages) - { - if (ShouldDisplay(FilterChannel.Debug, msg)) - { - LogAndSave("§8[DEBUG] " + msg); - } - } - } - - public override void Error(string msg) - { - base.Error(msg); - if (ErrorEnabled) - Save(msg); - } - - public override void Info(string msg) - { - base.Info(msg); - if (InfoEnabled) - Save(msg); - } - - public override void Warn(string msg) - { - base.Warn(msg); - if (WarnEnabled) - Save(msg); - } - } -} diff --git a/MinecraftClient/Logger/FilteredLogger.cs b/MinecraftClient/Logger/FilteredLogger.cs deleted file mode 100644 index a520434c73..0000000000 --- a/MinecraftClient/Logger/FilteredLogger.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System.Text.RegularExpressions; -using static MinecraftClient.Settings; - -namespace MinecraftClient.Logger -{ - public class FilteredLogger : LoggerBase - { - protected enum FilterChannel { Debug, Chat } - - protected bool ShouldDisplay(FilterChannel channel, string msg) - { - if (Config.Logging.FilterMode == LoggingConfigHealper.LoggingConfig.FilterModeEnum.disable) - return true; - - Regex? regexToUse = null; - // Convert to bool for XOR later. Whitelist = 0, Blacklist = 1 - switch (channel) - { - case FilterChannel.Chat: - string chat = Config.Logging.ChatFilterRegex; - if (string.IsNullOrEmpty(chat)) - regexToUse = null; - else - regexToUse = new(chat); - break; - case FilterChannel.Debug: - string debug = Config.Logging.DebugFilterRegex; - if (string.IsNullOrEmpty(debug)) - regexToUse = null; - else - regexToUse = new(debug); - break; - } - if (regexToUse is not null) - { - // IsMatch and white/blacklist result can be represented using XOR - // e.g. matched(true) ^ blacklist(true) => shouldn't log(false) - if (Config.Logging.FilterMode == LoggingConfigHealper.LoggingConfig.FilterModeEnum.blacklist) - return !regexToUse.IsMatch(msg); - else if (Config.Logging.FilterMode == LoggingConfigHealper.LoggingConfig.FilterModeEnum.whitelist) - return regexToUse.IsMatch(msg); - else - return true; - } - else return true; - } - - public override void Debug(string msg) - { - if (DebugEnabled) - { - if (ShouldDisplay(FilterChannel.Debug, msg)) - { - Log("§8[DEBUG] " + msg); - } - // Don't write debug lines here as it could cause a stack overflow - } - } - - public override void PacketDebug(string msg) - { - if (Settings.Config.Logging.PacketDebugMessages) - { - if (ShouldDisplay(FilterChannel.Debug, msg)) - { - Log("§8[DEBUG] " + msg); - } - } - } - - public override void Info(string msg) - { - if (InfoEnabled) - ConsoleIO.WriteLogLine(msg); - } - - public override void Warn(string msg) - { - if (WarnEnabled) - Log("§6[WARN] " + msg); - } - - public override void Error(string msg) - { - if (ErrorEnabled) - Log("§c[ERROR] " + msg); - } - - public override void Chat(string msg) - { - if (ChatEnabled) - { - if (ShouldDisplay(FilterChannel.Chat, msg)) - { - ConsoleIO.WriteChatLineIfVisible(msg); - } - else Debug("[Logger] One Chat message filtered: " + msg); - } - } - } -} diff --git a/MinecraftClient/Logger/ILogger.cs b/MinecraftClient/Logger/ILogger.cs deleted file mode 100644 index 89a1b68667..0000000000 --- a/MinecraftClient/Logger/ILogger.cs +++ /dev/null @@ -1,35 +0,0 @@ -namespace MinecraftClient.Logger -{ - public interface ILogger - { - bool DebugEnabled { get; set; } - bool WarnEnabled { get; set; } - bool InfoEnabled { get; set; } - bool ErrorEnabled { get; set; } - bool ChatEnabled { get; set; } - - void Info(string msg); - void Info(string msg, params object[] args); - void Info(object msg); - - void Debug(string msg); - void Debug(string msg, params object[] args); - void Debug(object msg); - - void PacketDebug(string msg); - void PacketDebug(string msg, params object[] args); - void PacketDebug(object msg); - - void Warn(string msg); - void Warn(string msg, params object[] args); - void Warn(object msg); - - void Error(string msg); - void Error(string msg, params object[] args); - void Error(object msg); - - void Chat(string msg); - void Chat(string msg, params object[] args); - void Chat(object msg); - } -} diff --git a/MinecraftClient/Logger/LoggerBase.cs b/MinecraftClient/Logger/LoggerBase.cs deleted file mode 100644 index 500c43b6ea..0000000000 --- a/MinecraftClient/Logger/LoggerBase.cs +++ /dev/null @@ -1,106 +0,0 @@ -namespace MinecraftClient.Logger -{ - /// - /// Abstract class providing basic implementation of the ILogger interface - /// - public abstract class LoggerBase : ILogger - { - private bool debugEnabled = false; - private bool warnEnabled = true; - private bool infoEnabled = true; - private bool errorEnabled = true; - private bool chatEnabled = true; - public bool DebugEnabled { get { return debugEnabled; } set { debugEnabled = value; } } - public bool WarnEnabled { get { return warnEnabled; } set { warnEnabled = value; } } - public bool InfoEnabled { get { return infoEnabled; } set { infoEnabled = value; } } - public bool ErrorEnabled { get { return errorEnabled; } set { errorEnabled = value; } } - public bool ChatEnabled { get { return chatEnabled; } set { chatEnabled = value; } } - - public abstract void Chat(string msg); - - public void Chat(string msg, params object[] args) - { - Chat(string.Format(msg, args)); - } - - public void Chat(object msg) - { - Chat(msg.ToString() ?? string.Empty); - } - - public abstract void Debug(string msg); - - public void Debug(string msg, params object[] args) - { - Debug(string.Format(msg, args)); - } - - public void Debug(object msg) - { - Debug(msg.ToString() ?? string.Empty); - } - - public abstract void PacketDebug(string msg); - - public void PacketDebug(string msg, params object[] args) - { - PacketDebug(string.Format(msg, args)); - } - - public void PacketDebug(object msg) - { - PacketDebug(msg.ToString() ?? string.Empty); - } - - public abstract void Error(string msg); - - public void Error(string msg, params object[] args) - { - Error(string.Format(msg, args)); - } - - public void Error(object msg) - { - Error(msg.ToString() ?? string.Empty); - } - - public abstract void Info(string msg); - - public void Info(string msg, params object[] args) - { - Info(string.Format(msg, args)); - } - - public void Info(object msg) - { - Info(msg.ToString() ?? string.Empty); - } - - public abstract void Warn(string msg); - - public void Warn(string msg, params object[] args) - { - Warn(string.Format(msg, args)); - } - - public void Warn(object msg) - { - Warn(msg.ToString() ?? string.Empty); - } - - protected virtual void Log(object msg) - { - ConsoleIO.WriteLineFormatted(msg.ToString() ?? string.Empty); - } - - protected virtual void Log(string msg) - { - ConsoleIO.WriteLineFormatted(msg); - } - - protected virtual void Log(string msg, params object[] args) - { - ConsoleIO.WriteLineFormatted(string.Format(msg, args)); - } - } -} diff --git a/MinecraftClient/Mapping/Block.cs b/MinecraftClient/Mapping/Block.cs deleted file mode 100644 index 0bbe192c01..0000000000 --- a/MinecraftClient/Mapping/Block.cs +++ /dev/null @@ -1,153 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; -using MinecraftClient.Mapping.BlockPalettes; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Mapping -{ - /// - /// Represents a Minecraft Block - /// - public struct Block - { - public static readonly Block Air = new(0); - - /// - /// Get or set global block ID to Material mapping - /// The global Palette is a concept introduced with Minecraft 1.13 - /// - public static BlockPalette Palette { get; set; } = new Palette112(); - - /// - /// Storage for block ID and metadata, as ushort for compatibility, performance and lower memory footprint - /// For Minecraft 1.12 and lower, first 12 bits contain block ID (0-4095), last 4 bits contain metadata (0-15) - /// For Minecraft 1.13 and greater, all 16 bits are used to store block state ID (0-65535) - /// - private ushort blockIdAndMeta; - - /// - /// Id of the block - /// - public int BlockId - { - get - { - if (Palette.IdHasMetadata) - { - return blockIdAndMeta >> 4; - } - return blockIdAndMeta; - } - set - { - if (Palette.IdHasMetadata) - { - if (value > (ushort.MaxValue >> 4) || value < 0) - throw new ArgumentOutOfRangeException(nameof(value), "Invalid block ID. Accepted range: 0-4095"); - blockIdAndMeta = (ushort)(value << 4 | BlockMeta); - } - else - { - if (value > ushort.MaxValue || value < 0) - throw new ArgumentOutOfRangeException(nameof(value), "Invalid block ID. Accepted range: 0-65535"); - blockIdAndMeta = (ushort)value; - } - } - } - - /// - /// Metadata of the block. - /// This field has no effect starting with Minecraft 1.13. - /// - public byte BlockMeta - { - get - { - if (Palette.IdHasMetadata) - { - return (byte)(blockIdAndMeta & 0x0F); - } - return 0; - } - set - { - if (Palette.IdHasMetadata) - { - blockIdAndMeta = (ushort)((blockIdAndMeta & ~0x0F) | (value & 0x0F)); - } - } - } - - /// - /// Exact raw block state ID. For Minecraft 1.12 and older this contains the packed block ID and metadata. - /// - public int StateId => blockIdAndMeta; - - /// - /// Get the properties associated with this block's exact state ID. - /// - public IReadOnlyDictionary GetStateProperties() - { - if (Palette.IdHasMetadata) - { - return new Dictionary - { - ["metadata"] = BlockMeta.ToString(System.Globalization.CultureInfo.InvariantCulture) - }; - } - - return Palette.GetStateProperties(StateId); - } - - /// - /// Material of the block - /// - public Material Type - { - get - { - return Palette.FromId(BlockId); - } - } - - /// - /// Get a block of the specified type and metadata - /// - /// Block type - /// Block metadata - public Block(short type, byte metadata) - { - if (!Palette.IdHasMetadata) - throw new InvalidOperationException("Current global Palette does not support block Metadata"); - blockIdAndMeta = 0; - BlockId = type; - BlockMeta = metadata; - } - - /// - /// Get a block of the specified type and metadata OR block state - /// - /// Type and metadata packed in the same value OR block state - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public Block(ushort typeAndMeta) - { - blockIdAndMeta = typeAndMeta; - } - - public string GetTypeString() - { - string typeStr = Type.ToString(); - string? trans = ChatParser.TranslateString("block.minecraft." + typeStr.ToUnderscoreCase()); - return string.IsNullOrEmpty(trans) ? typeStr : trans; - } - - /// - /// String representation of the block - /// - public override string ToString() - { - return BlockId.ToString() + (BlockMeta != 0 ? ":" + BlockMeta.ToString() : ""); - } - } -} diff --git a/MinecraftClient/Mapping/BlockExtension.cs b/MinecraftClient/Mapping/BlockExtension.cs deleted file mode 100644 index a08057adc7..0000000000 --- a/MinecraftClient/Mapping/BlockExtension.cs +++ /dev/null @@ -1,444 +0,0 @@ -using MinecraftClient.Protocol.Handlers; - -namespace MinecraftClient.Mapping; - -public static class BlockExtension -{ - public static bool IsTopSlab(this Block block, int protocolVersion) - { - switch (protocolVersion) - { - case >= Protocol18Handler.MC_1_20_Version: - switch (block.BlockId) - { - case 11022: //OakSlab - case 11028: //SpruceSlab - case 11034: //BirchSlab - case 11040: //JungleSlab - case 11046: //AcaciaSlab - case 11058: //DarkOakSlab - case 11064: //MangroveSlab - case 18528: //CrimsonSlab - case 18534: //WarpedSlab - case 11082: //StoneSlab - case 11112: //CobblestoneSlab - case 13966: //MossyCobblestoneSlab - case 11088: //SmoothStoneSlab - case 11124: //StoneBrickSlab - case 13954: //MossyStoneBrickSlab - case 13990: //GraniteSlab - case 13942: //PolishedGraniteSlab - case 14014: //DioriteSlab - case 13960: //PolishedDioriteSlab - case 13996: //AndesiteSlab - case 14008: //PolishedAndesiteSlab - case 22534: //CobbledDeepslateSlab - case 22945: //PolishedDeepslateSlab - case 23767: //DeepslateBrickSlab - case 23356: //DeepslateTileSlab - case 11118: //BrickSlab - case 11130: //MudBrickSlab - case 11094: //SandstoneSlab - case 13978: //SmoothSandstoneSlab - case 11100: //CutSandstoneSlab - case 11148: //RedSandstoneSlab - case 13948: //SmoothRedSandstoneSlab - case 11154: //CutRedSandstoneSlab - case 10566: //PrismarineSlab - case 10572: //PrismarineBrickSlab - case 10578: //DarkPrismarineSlab - case 11136: //NetherBrickSlab - case 14002: //RedNetherBrickSlab - case 19725: //BlackstoneSlab - case 20226: //PolishedBlackstoneSlab - case 19735: //PolishedBlackstoneBrickSlab - case 13972: //EndStoneBrickSlab - case 11160: //PurpurSlab - case 11142: //QuartzSlab - case 13984: //SmoothQuartzSlab - case 21912: //CutCopperSlab - case 21906: //ExposedCutCopperSlab - case 21900: //WeatheredCutCopperSlab - case 21894: //OxidizedCutCopperSlab - case 22264: //WaxedCutCopperSlab - case 22258: //WaxedExposedCutCopperSlab - case 22252: //WaxedWeatheredCutCopperSlab - return true; - } - - break; - case Protocol18Handler.MC_1_19_4_Version: - switch (block.BlockId) - { - case 11018: // OakSlab - case 11024: // SpruceSlab - case 11030: // BirchSlab - case 11036: // JungleSlab - case 11042: // AcaciaSlab - case 11054: // DarkOakSlab - case 11060: // MangroveSlab - case 18510: // CrimsonSlab - case 18516: // WarpedSlab - case 11078: // StoneSlab - case 11108: // CobblestoneSlab - case 13948: // MossyCobblestoneSlab - case 11084: // SmoothStoneSlab - case 11120: // StoneBrickSlab - case 13936: // MossyStoneBrickSlab - case 13972: // GraniteSlab - case 13924: // PolishedGraniteSlab - case 13996: // DioriteSlab - case 13942: // PolishedDioriteSlab - case 13978: // AndesiteSlab - case 13990: // PolishedAndesiteSlab - case 22132: // CobbledDeepslateSlab - case 22543: // PolishedDeepslateSlab - case 23365: // DeepslateBrickSlab - case 22954: // DeepslateTileSlab - case 11114: // BrickSlab - case 11126: // MudBrickSlab - case 11090: // SandstoneSlab - case 13960: // SmoothSandstoneSlab - case 11096: // CutSandstoneSlab - case 11144: // RedSandstoneSlab - case 13930: // SmoothRedSandstoneSlab - case 11150: // CutRedSandstoneSlab - case 10562: // PrismarineSlab - case 10568: // PrismarineBrickSlab - case 10574: // DarkPrismarineSlab - case 11132: // NetherBrickSlab - case 13984: // RedNetherBrickSlab - case 19707: // BlackstoneSlab - case 20208: // PolishedBlackstoneSlab - case 19717: // PolishedBlackstoneBrickSlab - case 13954: // EndStoneBrickSlab - case 11156: // PurpurSlab - case 11138: // QuartzSlab - case 13966: // SmoothQuartzSlab - case 21510: // CutCopperSlab - case 21504: // ExposedCutCopperSlab - case 21498: // WeatheredCutCopperSlab - case 21492: // OxidizedCutCopperSlab - case 21862: // WaxedCutCopperSlab - case 21856: // WaxedExposedCutCopperSlab - case 21850: // WaxedWeatheredCutCopperSlab - case 21844: // WaxedOxidizedCutCopperSlab - return true; - } - - break; - case Protocol18Handler.MC_1_19_3_Version: - switch (block.BlockId) - { - case 10686: // OakSlab - case 10692: // SpruceSlab - case 10698: // BirchSlab - case 10704: // JungleSlab - case 10710: // AcaciaSlab - case 10716: // DarkOakSlab - case 10722: // MangroveSlab - case 18041: // CrimsonSlab - case 18047: // WarpedSlab - case 10740: // StoneSlab - case 10770: // CobblestoneSlab - case 13479: // MossyCobblestoneSlab - case 10746: // SmoothStoneSlab - case 10782: // StoneBrickSlab - case 13467: // MossyStoneBrickSlab - case 13503: // GraniteSlab - case 13455: // PolishedGraniteSlab - case 13527: // DioriteSlab - case 13473: // PolishedDioriteSlab - case 13509: // AndesiteSlab - case 13521: // PolishedAndesiteSlab - case 21647: // CobbledDeepslateSlab - case 22058: // PolishedDeepslateSlab - case 22880: // DeepslateBrickSlab - case 22469: // DeepslateTileSlab - case 10776: // BrickSlab - case 10788: // MudBrickSlab - case 10752: // SandstoneSlab - case 13491: // SmoothSandstoneSlab - case 10758: // CutSandstoneSlab - case 10806: // RedSandstoneSlab - case 13461: // SmoothRedSandstoneSlab - case 10812: // CutRedSandstoneSlab - case 10230: // PrismarineSlab - case 10236: // PrismarineBrickSlab - case 10242: // DarkPrismarineSlab - case 10794: // NetherBrickSlab - case 13515: // RedNetherBrickSlab - case 19238: // BlackstoneSlab - case 19739: // PolishedBlackstoneSlab - case 19248: // PolishedBlackstoneBrickSlab - case 13485: // EndStoneBrickSlab - case 10818: // PurpurSlab - case 10800: // QuartzSlab - case 13497: // SmoothQuartzSlab - case 21041: // CutCopperSlab - case 21035: // ExposedCutCopperSlab - case 21029: // WeatheredCutCopperSlab - case 21023: // OxidizedCutCopperSlab - case 21393: // WaxedCutCopperSlab - case 21387: // WaxedExposedCutCopperSlab - case 21381: // WaxedWeatheredCutCopperSlab - case 21375: // WaxedOxidizedCutCopperSlab - return true; - } - - break; - case >= Protocol18Handler.MC_1_19_Version: - switch (block.BlockId) - { - case 19257: // CutCopperSlab - case 19251: // ExposedCutCopperSlab - case 19245: // WeatheredCutCopperSlab - case 19239: // OxidizedCutCopperSlab - case 19609: // WaxedCutCopperSlab - case 19603: // WaxedExposedCutCopperSlab - case 19597: // WaxedWeatheredCutCopperSlab - case 19591: // WaxedOxidizedCutCopperSlab - case 9042: // OakSlab - case 9048: // SpruceSlab - case 9054: // BirchSlab - case 9060: // JungleSlab - case 9066: // AcaciaSlab - case 9072: // DarkOakSlab - case 9078: // MangroveSlab - case 16257: // CrimsonSlab - case 16263: // WarpedSlab - case 9084: // StoneSlab - case 9090: // SmoothStoneSlab - case 9096: // SandstoneSlab - case 9102: // CutSandstoneSlab - case 9108: // PetrifiedOakSlab - case 9114: // CobblestoneSlab - case 9120: // BrickSlab - case 9126: // StoneBrickSlab - case 9132: // MudBrickSlab - case 9138: // NetherBrickSlab - case 9144: // QuartzSlab - case 9150: // RedSandstoneSlab - case 9156: // CutRedSandstoneSlab - case 9162: // PurpurSlab - case 8586: // PrismarineSlab - case 8592: // PrismarineBrickSlab - case 8598: // DarkPrismarineSlab - case 11671: // PolishedGraniteSlab - case 11677: // SmoothRedSandstoneSlab - case 11683: // MossyStoneBrickSlab - case 11689: // PolishedDioriteSlab - case 11695: // MossyCobblestoneSlab - case 11701: // EndStoneBrickSlab - case 11707: // SmoothSandstoneSlab - case 11713: // SmoothQuartzSlab - case 11719: // GraniteSlab - case 11725: // AndesiteSlab - case 11731: // RedNetherBrickSlab - case 11737: // PolishedAndesiteSlab - case 11743: // DioriteSlab - case 19863: // CobbledDeepslateSlab - case 20274: // PolishedDeepslateSlab - case 21096: // DeepslateBrickSlab - case 20685: // DeepslateTileSlab - case 17454: // BlackstoneSlab - case 17955: // PolishedBlackstoneSlab - case 17464: // PolishedBlackstoneBrickSlab - return true; - } - - break; - case >= Protocol18Handler.MC_1_17_Version: - switch (block.BlockId) - { - case 18163: // CutCopperSlab - case 18157: // ExposedCutCopperSlab - case 18151: // WeatheredCutCopperSlab - case 18145: // OxidizedCutCopperSlab - case 18515: // WaxedCutCopperSlab - case 18509: // WaxedExposedCutCopperSlab - case 18503: // WaxedWeatheredCutCopperSlab - case 18497: // WaxedOxidizedCutCopperSlab - case 8551: // OakSlab - case 8557: // SpruceSlab - case 8563: // BirchSlab - case 8569: // JungleSlab - case 8575: // AcaciaSlab - case 8581: // DarkOakSlab - case 15302: // CrimsonSlab - case 15308: // WarpedSlab - case 8587: // StoneSlab - case 8593: // SmoothStoneSlab - case 8599: // SandstoneSlab - case 8605: // CutSandstoneSlab - case 8611: // PetrifiedOakSlab - case 8617: // CobblestoneSlab - case 8623: // BrickSlab - case 8629: // StoneBrickSlab - case 8635: // NetherBrickSlab - case 8641: // QuartzSlab - case 8647: // RedSandstoneSlab - case 8653: // CutRedSandstoneSlab - case 8659: // PurpurSlab - case 8095: // PrismarineSlab - case 8101: // PrismarineBrickSlab - case 8107: // DarkPrismarineSlab - case 11040: // PolishedGraniteSlab - case 11046: // SmoothRedSandstoneSlab - case 11052: // MossyStoneBrickSlab - case 11058: // PolishedDioriteSlab - case 11064: // MossyCobblestoneSlab - case 11070: // EndStoneBrickSlab - case 11076: // SmoothSandstoneSlab - case 11082: // SmoothQuartzSlab - case 11088: // GraniteSlab - case 11094: // AndesiteSlab - case 11100: // RedNetherBrickSlab - case 11106: // PolishedAndesiteSlab - case 11112: // DioriteSlab - case 18768: // CobbledDeepslateSlab - case 19179: // PolishedDeepslateSlab - case 20001: // DeepslateBrickSlab - case 19590: // DeepslateTileSlab - case 16499: // BlackstoneSlab - case 17000: // PolishedBlackstoneSlab - case 16509: // PolishedBlackstoneBrickSlab - return true; - } - - break; - case >= Protocol18Handler.MC_1_16_Version: - switch (block.BlockId) - { - case 8305: // OakSlab - case 8311: // SpruceSlab - case 8317: // BirchSlab - case 8323: // JungleSlab - case 8329: // AcaciaSlab - case 8335: // DarkOakSlab - case 15056: // CrimsonSlab - case 15062: // WarpedSlab - case 8341: // StoneSlab - case 8347: // SmoothStoneSlab - case 8353: // SandstoneSlab - case 8359: // CutSandstoneSlab - case 8365: // PetrifiedOakSlab - case 8371: // CobblestoneSlab - case 8377: // BrickSlab - case 8383: // StoneBrickSlab - case 8389: // NetherBrickSlab - case 8395: // QuartzSlab - case 8401: // RedSandstoneSlab - case 8407: // CutRedSandstoneSlab - case 8413: // PurpurSlab - case 7849: // PrismarineSlab - case 7855: // PrismarineBrickSlab - case 7861: // DarkPrismarineSlab - case 10794: // PolishedGraniteSlab - case 10800: // SmoothRedSandstoneSlab - case 10806: // MossyStoneBrickSlab - case 10812: // PolishedDioriteSlab - case 10818: // MossyCobblestoneSlab - case 10824: // EndStoneBrickSlab - case 10830: // SmoothSandstoneSlab - case 10836: // SmoothQuartzSlab - case 10842: // GraniteSlab - case 10848: // AndesiteSlab - case 10854: // RedNetherBrickSlab - case 10860: // PolishedAndesiteSlab - case 10866: // DioriteSlab - case 16253: // BlackstoneSlab - case 16754: // PolishedBlackstoneSlab - case 16263: // PolishedBlackstoneBrickSlab - return true; - } - - break; - case >= Protocol18Handler.MC_1_15_Version: - switch (block.BlockId) - { - case 7765: // OakSlab - case 7771: // SpruceSlab - case 7777: // BirchSlab - case 7783: // JungleSlab - case 7789: // AcaciaSlab - case 7795: // DarkOakSlab - case 7801: // StoneSlab - case 7807: // SmoothStoneSlab - case 7813: // SandstoneSlab - case 7819: // CutSandstoneSlab - case 7825: // PetrifiedOakSlab - case 7831: // CobblestoneSlab - case 7837: // BrickSlab - case 7843: // StoneBrickSlab - case 7849: // NetherBrickSlab - case 7855: // QuartzSlab - case 7861: // RedSandstoneSlab - case 7867: // CutRedSandstoneSlab - case 7873: // PurpurSlab - case 7309: // PrismarineSlab - case 7321: // DarkPrismarineSlab - case 10254: // PolishedGraniteSlab - case 10260: // SmoothRedSandstoneSlab - case 10266: // MossyStoneBrickSlab - case 10272: // PolishedDioriteSlab - case 10278: // MossyCobblestoneSlab - case 10284: // EndStoneBrickSlab - case 10290: // SmoothSandstoneSlab - case 10296: // SmoothQuartzSlab - case 10302: // GraniteSlab - case 10308: // AndesiteSlab - case 10314: // RedNetherBrickSlab - case 10320: // PolishedAndesiteSlab - case 10326: // DioriteSlab - return true; - } - - break; - case >= Protocol18Handler.MC_1_14_Version: - switch (block.BlockId) - { - case 7765: // OakSlab - case 7771: // SpruceSlab - case 7777: // BirchSlab - case 7783: // JungleSlab - case 7789: // AcaciaSlab - case 7795: // DarkOakSlab - case 7801: // StoneSlab - case 7807: // SmoothStoneSlab - case 7813: // SandstoneSlab - case 7819: // CutSandstoneSlab - case 7825: // PetrifiedOakSlab - case 7831: // CobblestoneSlab - case 7837: // BrickSlab - case 7843: // StoneBrickSlab - case 7849: // NetherBrickSlab - case 7855: // QuartzSlab - case 7861: // RedSandstoneSlab - case 7867: // CutRedSandstoneSlab - case 7873: // PurpurSlab - case 7309: // PrismarineSlab - case 7315: // PrismarineBrickSlab - case 7321: // DarkPrismarineSlab - case 10254: // PolishedGraniteSlab - case 10260: // SmoothRedSandstoneSlab - case 10266: // MossyStoneBrickSlab - case 10272: // PolishedDioriteSlab - case 10278: // MossyCobblestoneSlab - case 10284: // EndStoneBrickSlab - case 10290: // SmoothSandstoneSlab - case 10296: // SmoothQuartzSlab - case 10302: // GraniteSlab - case 10308: // AndesiteSlab - case 10314: // RedNetherBrickSlab - case 10320: // PolishedAndesiteSlab - case 10326: // DioriteSlab - return true; - } - - break; - } - - return false; - } -} \ No newline at end of file diff --git a/MinecraftClient/Mapping/BlockHardness.cs b/MinecraftClient/Mapping/BlockHardness.cs deleted file mode 100644 index 97d1df94a2..0000000000 --- a/MinecraftClient/Mapping/BlockHardness.cs +++ /dev/null @@ -1,1582 +0,0 @@ -using System.Collections.Frozen; -using System.Collections.Generic; - -namespace MinecraftClient.Mapping -{ - /// - /// Provides block hardness values and tool requirement data for mining calculations. - /// Data extracted from Minecraft 1.21.11 decompiled Blocks.java. - /// - public static class BlockHardness - { - /// - /// Default hardness for blocks not in the table. Uses stone-like hardness as a safe fallback. - /// - public const float DefaultHardness = 1.5f; - - /// - /// Get the hardness value for a block material. - /// Returns -1 for unbreakable blocks, 0 for instant-break blocks. - /// - public static float GetHardness(Material material) - { - if (HardnessTable.TryGetValue(material, out float hardness)) - return hardness; - return DefaultHardness; - } - - /// - /// Check whether a block requires the correct tool to get drops - /// and uses the 100 divisor instead of 30 when mined without the correct tool. - /// - public static bool RequiresCorrectTool(Material material) - { - return RequiresCorrectToolSet.Contains(material); - } - - private static readonly FrozenDictionary HardnessTable = new Dictionary - { - { Material.AcaciaButton, 0.5f }, - { Material.AcaciaDoor, 3.0f }, - { Material.AcaciaFence, 2.0f }, - { Material.AcaciaFenceGate, 2.0f }, - { Material.AcaciaHangingSign, 1.0f }, - { Material.AcaciaLeaves, 0.2f }, - { Material.AcaciaLog, 2.0f }, - { Material.AcaciaPlanks, 2.0f }, - { Material.AcaciaPressurePlate, 0.5f }, - { Material.AcaciaSapling, 0.0f }, - { Material.AcaciaShelf, 2.0f }, - { Material.AcaciaSign, 1.0f }, - { Material.AcaciaSlab, 2.0f }, - { Material.AcaciaStairs, 2.0f }, - { Material.AcaciaTrapdoor, 3.0f }, - { Material.AcaciaWallHangingSign, 1.0f }, - { Material.AcaciaWallSign, 1.0f }, - { Material.AcaciaWood, 2.0f }, - { Material.ActivatorRail, 0.7f }, - { Material.Air, 0.0f }, - { Material.Allium, 0.0f }, - { Material.AmethystBlock, 1.5f }, - { Material.AmethystCluster, 1.5f }, - { Material.AncientDebris, 30.0f }, - { Material.Andesite, 1.5f }, - { Material.AndesiteSlab, 1.5f }, - { Material.AndesiteStairs, 1.5f }, - { Material.AndesiteWall, 1.5f }, - { Material.Anvil, 5.0f }, - { Material.AttachedMelonStem, 0.0f }, - { Material.AttachedPumpkinStem, 0.0f }, - { Material.Azalea, 0.0f }, - { Material.AzaleaLeaves, 0.2f }, - { Material.AzureBluet, 0.0f }, - { Material.Bamboo, 0.0f }, - { Material.BambooBlock, 2.0f }, - { Material.BambooButton, 0.5f }, - { Material.BambooDoor, 3.0f }, - { Material.BambooFence, 2.0f }, - { Material.BambooFenceGate, 2.0f }, - { Material.BambooHangingSign, 1.0f }, - { Material.BambooMosaic, 2.0f }, - { Material.BambooMosaicSlab, 2.0f }, - { Material.BambooMosaicStairs, 2.0f }, - { Material.BambooPlanks, 2.0f }, - { Material.BambooPressurePlate, 0.5f }, - { Material.BambooSapling, 0.0f }, - { Material.BambooShelf, 2.0f }, - { Material.BambooSign, 1.0f }, - { Material.BambooSlab, 2.0f }, - { Material.BambooStairs, 2.0f }, - { Material.BambooTrapdoor, 3.0f }, - { Material.BambooWallHangingSign, 1.0f }, - { Material.BambooWallSign, 1.0f }, - { Material.Barrel, 2.5f }, - { Material.Barrier, -1.0f }, - { Material.Basalt, 1.25f }, - { Material.Beacon, 3.0f }, - { Material.Bedrock, -1.0f }, - { Material.BeeNest, 0.3f }, - { Material.Beehive, 0.6f }, - { Material.Beetroots, 0.0f }, - { Material.Bell, 5.0f }, - { Material.BigDripleaf, 0.1f }, - { Material.BigDripleafStem, 0.1f }, - { Material.BirchButton, 0.5f }, - { Material.BirchDoor, 3.0f }, - { Material.BirchFence, 2.0f }, - { Material.BirchFenceGate, 2.0f }, - { Material.BirchHangingSign, 1.0f }, - { Material.BirchLeaves, 0.2f }, - { Material.BirchLog, 2.0f }, - { Material.BirchPlanks, 2.0f }, - { Material.BirchPressurePlate, 0.5f }, - { Material.BirchSapling, 0.0f }, - { Material.BirchShelf, 2.0f }, - { Material.BirchSign, 1.0f }, - { Material.BirchSlab, 2.0f }, - { Material.BirchStairs, 2.0f }, - { Material.BirchTrapdoor, 3.0f }, - { Material.BirchWallHangingSign, 1.0f }, - { Material.BirchWallSign, 1.0f }, - { Material.BirchWood, 2.0f }, - { Material.BlackBanner, 1.0f }, - { Material.BlackBed, 0.2f }, - { Material.BlackCandle, 0.1f }, - { Material.BlackCandleCake, 0.5f }, - { Material.BlackCarpet, 0.1f }, - { Material.BlackConcrete, 1.8f }, - { Material.BlackConcretePowder, 0.5f }, - { Material.BlackGlazedTerracotta, 1.4f }, - { Material.BlackShulkerBox, 2.0f }, - { Material.BlackStainedGlass, 0.3f }, - { Material.BlackStainedGlassPane, 0.3f }, - { Material.BlackTerracotta, 1.25f }, - { Material.BlackWallBanner, 1.0f }, - { Material.BlackWool, 0.8f }, - { Material.Blackstone, 1.5f }, - { Material.BlackstoneSlab, 2.0f }, - { Material.BlackstoneStairs, 1.5f }, - { Material.BlackstoneWall, 1.5f }, - { Material.BlastFurnace, 3.5f }, - { Material.BlueBanner, 1.0f }, - { Material.BlueBed, 0.2f }, - { Material.BlueCandle, 0.1f }, - { Material.BlueCandleCake, 0.5f }, - { Material.BlueCarpet, 0.1f }, - { Material.BlueConcrete, 1.8f }, - { Material.BlueConcretePowder, 0.5f }, - { Material.BlueGlazedTerracotta, 1.4f }, - { Material.BlueIce, 2.8f }, - { Material.BlueOrchid, 0.0f }, - { Material.BlueShulkerBox, 2.0f }, - { Material.BlueStainedGlass, 0.3f }, - { Material.BlueStainedGlassPane, 0.3f }, - { Material.BlueTerracotta, 1.25f }, - { Material.BlueWallBanner, 1.0f }, - { Material.BlueWool, 0.8f }, - { Material.BoneBlock, 2.0f }, - { Material.Bookshelf, 1.5f }, - { Material.BrainCoral, 0.0f }, - { Material.BrainCoralBlock, 1.5f }, - { Material.BrainCoralFan, 0.0f }, - { Material.BrainCoralWallFan, 0.0f }, - { Material.BrewingStand, 0.5f }, - { Material.BrickSlab, 2.0f }, - { Material.BrickStairs, 2.0f }, - { Material.BrickWall, 2.0f }, - { Material.Bricks, 2.0f }, - { Material.BrownBanner, 1.0f }, - { Material.BrownBed, 0.2f }, - { Material.BrownCandle, 0.1f }, - { Material.BrownCandleCake, 0.5f }, - { Material.BrownCarpet, 0.1f }, - { Material.BrownConcrete, 1.8f }, - { Material.BrownConcretePowder, 0.5f }, - { Material.BrownGlazedTerracotta, 1.4f }, - { Material.BrownMushroom, 0.0f }, - { Material.BrownMushroomBlock, 0.2f }, - { Material.BrownShulkerBox, 2.0f }, - { Material.BrownStainedGlass, 0.3f }, - { Material.BrownStainedGlassPane, 0.3f }, - { Material.BrownTerracotta, 1.25f }, - { Material.BrownWallBanner, 1.0f }, - { Material.BrownWool, 0.8f }, - { Material.BubbleColumn, 0.0f }, - { Material.BubbleCoral, 0.0f }, - { Material.BubbleCoralBlock, 1.5f }, - { Material.BubbleCoralFan, 0.0f }, - { Material.BubbleCoralWallFan, 0.0f }, - { Material.BuddingAmethyst, 1.5f }, - { Material.Bush, 0.0f }, - { Material.Cactus, 0.4f }, - { Material.CactusFlower, 0.0f }, - { Material.Cake, 0.5f }, - { Material.Calcite, 0.75f }, - { Material.CalibratedSculkSensor, 1.5f }, - { Material.Campfire, 2.0f }, - { Material.Candle, 0.1f }, - { Material.CandleCake, 0.5f }, - { Material.Carrots, 0.0f }, - { Material.CartographyTable, 2.5f }, - { Material.CarvedPumpkin, 1.0f }, - { Material.Cauldron, 2.0f }, - { Material.CaveAir, 0.0f }, - { Material.CaveVines, 0.0f }, - { Material.CaveVinesPlant, 0.0f }, - { Material.ChainCommandBlock, -1.0f }, - { Material.CherryButton, 0.5f }, - { Material.CherryDoor, 3.0f }, - { Material.CherryFence, 2.0f }, - { Material.CherryFenceGate, 2.0f }, - { Material.CherryHangingSign, 1.0f }, - { Material.CherryLeaves, 0.2f }, - { Material.CherryLog, 2.0f }, - { Material.CherryPlanks, 2.0f }, - { Material.CherryPressurePlate, 0.5f }, - { Material.CherrySapling, 0.0f }, - { Material.CherryShelf, 2.0f }, - { Material.CherrySign, 1.0f }, - { Material.CherrySlab, 2.0f }, - { Material.CherryStairs, 2.0f }, - { Material.CherryTrapdoor, 3.0f }, - { Material.CherryWallHangingSign, 1.0f }, - { Material.CherryWallSign, 1.0f }, - { Material.CherryWood, 2.0f }, - { Material.Chest, 2.5f }, - { Material.ChippedAnvil, 5.0f }, - { Material.ChiseledBookshelf, 1.5f }, - { Material.ChiseledCopper, 3.0f }, - { Material.ChiseledDeepslate, 3.5f }, - { Material.ChiseledNetherBricks, 2.0f }, - { Material.ChiseledPolishedBlackstone, 1.5f }, - { Material.ChiseledQuartzBlock, 0.8f }, - { Material.ChiseledRedSandstone, 0.8f }, - { Material.ChiseledResinBricks, 1.5f }, - { Material.ChiseledSandstone, 0.8f }, - { Material.ChiseledStoneBricks, 1.5f }, - { Material.ChiseledTuff, 1.5f }, - { Material.ChiseledTuffBricks, 1.5f }, - { Material.ChorusFlower, 0.4f }, - { Material.ChorusPlant, 0.4f }, - { Material.Clay, 0.6f }, - { Material.ClosedEyeblossom, 0.0f }, - { Material.CoalBlock, 5.0f }, - { Material.CoalOre, 3.0f }, - { Material.CoarseDirt, 0.5f }, - { Material.CobbledDeepslate, 3.5f }, - { Material.CobbledDeepslateSlab, 3.5f }, - { Material.CobbledDeepslateStairs, 3.5f }, - { Material.CobbledDeepslateWall, 3.5f }, - { Material.Cobblestone, 2.0f }, - { Material.CobblestoneSlab, 2.0f }, - { Material.CobblestoneStairs, 2.0f }, - { Material.CobblestoneWall, 2.0f }, - { Material.Cobweb, 4.0f }, - { Material.Cocoa, 0.2f }, - { Material.CommandBlock, -1.0f }, - { Material.Comparator, 0.0f }, - { Material.Composter, 0.6f }, - { Material.Conduit, 3.0f }, - { Material.CopperBlock, 3.0f }, - { Material.CopperBulb, 3.0f }, - { Material.CopperChest, 3.0f }, - { Material.CopperDoor, 3.0f }, - { Material.CopperGolemStatue, 3.0f }, - { Material.CopperGrate, 3.0f }, - { Material.CopperOre, 3.0f }, - { Material.CopperTorch, 0.0f }, - { Material.CopperTrapdoor, 3.0f }, - { Material.CopperWallTorch, 0.0f }, - { Material.Cornflower, 0.0f }, - { Material.CrackedDeepslateBricks, 3.5f }, - { Material.CrackedDeepslateTiles, 3.5f }, - { Material.CrackedNetherBricks, 2.0f }, - { Material.CrackedPolishedBlackstoneBricks, 1.5f }, - { Material.CrackedStoneBricks, 1.5f }, - { Material.Crafter, 1.5f }, - { Material.CraftingTable, 2.5f }, - { Material.CreakingHeart, 10.0f }, - { Material.CreeperHead, 1.0f }, - { Material.CreeperWallHead, 1.0f }, - { Material.CrimsonButton, 0.5f }, - { Material.CrimsonDoor, 3.0f }, - { Material.CrimsonFence, 2.0f }, - { Material.CrimsonFenceGate, 2.0f }, - { Material.CrimsonFungus, 0.0f }, - { Material.CrimsonHangingSign, 1.0f }, - { Material.CrimsonHyphae, 2.0f }, - { Material.CrimsonNylium, 0.4f }, - { Material.CrimsonPlanks, 2.0f }, - { Material.CrimsonPressurePlate, 0.5f }, - { Material.CrimsonRoots, 0.0f }, - { Material.CrimsonShelf, 2.0f }, - { Material.CrimsonSign, 1.0f }, - { Material.CrimsonSlab, 2.0f }, - { Material.CrimsonStairs, 2.0f }, - { Material.CrimsonStem, 2.0f }, - { Material.CrimsonTrapdoor, 3.0f }, - { Material.CrimsonWallHangingSign, 1.0f }, - { Material.CrimsonWallSign, 1.0f }, - { Material.CryingObsidian, 50.0f }, - { Material.CutCopper, 3.0f }, - { Material.CutCopperSlab, 3.0f }, - { Material.CutCopperStairs, 3.0f }, - { Material.CutRedSandstone, 0.8f }, - { Material.CutRedSandstoneSlab, 2.0f }, - { Material.CutSandstone, 0.8f }, - { Material.CutSandstoneSlab, 2.0f }, - { Material.CyanBanner, 1.0f }, - { Material.CyanBed, 0.2f }, - { Material.CyanCandle, 0.1f }, - { Material.CyanCandleCake, 0.5f }, - { Material.CyanCarpet, 0.1f }, - { Material.CyanConcrete, 1.8f }, - { Material.CyanConcretePowder, 0.5f }, - { Material.CyanGlazedTerracotta, 1.4f }, - { Material.CyanShulkerBox, 2.0f }, - { Material.CyanStainedGlass, 0.3f }, - { Material.CyanStainedGlassPane, 0.3f }, - { Material.CyanTerracotta, 1.25f }, - { Material.CyanWallBanner, 1.0f }, - { Material.CyanWool, 0.8f }, - { Material.DamagedAnvil, 5.0f }, - { Material.Dandelion, 0.0f }, - { Material.DarkOakButton, 0.5f }, - { Material.DarkOakDoor, 3.0f }, - { Material.DarkOakFence, 2.0f }, - { Material.DarkOakFenceGate, 2.0f }, - { Material.DarkOakHangingSign, 1.0f }, - { Material.DarkOakLeaves, 0.2f }, - { Material.DarkOakLog, 2.0f }, - { Material.DarkOakPlanks, 2.0f }, - { Material.DarkOakPressurePlate, 0.5f }, - { Material.DarkOakSapling, 0.0f }, - { Material.DarkOakShelf, 2.0f }, - { Material.DarkOakSign, 1.0f }, - { Material.DarkOakSlab, 2.0f }, - { Material.DarkOakStairs, 2.0f }, - { Material.DarkOakTrapdoor, 3.0f }, - { Material.DarkOakWallHangingSign, 1.0f }, - { Material.DarkOakWallSign, 1.0f }, - { Material.DarkOakWood, 2.0f }, - { Material.DarkPrismarine, 1.5f }, - { Material.DarkPrismarineSlab, 1.5f }, - { Material.DarkPrismarineStairs, 1.5f }, - { Material.DaylightDetector, 0.2f }, - { Material.DeadBrainCoral, 0.0f }, - { Material.DeadBrainCoralBlock, 1.5f }, - { Material.DeadBrainCoralFan, 0.0f }, - { Material.DeadBrainCoralWallFan, 0.0f }, - { Material.DeadBubbleCoral, 0.0f }, - { Material.DeadBubbleCoralBlock, 1.5f }, - { Material.DeadBubbleCoralFan, 0.0f }, - { Material.DeadBubbleCoralWallFan, 0.0f }, - { Material.DeadBush, 0.0f }, - { Material.DeadFireCoral, 0.0f }, - { Material.DeadFireCoralBlock, 1.5f }, - { Material.DeadFireCoralFan, 0.0f }, - { Material.DeadFireCoralWallFan, 0.0f }, - { Material.DeadHornCoral, 0.0f }, - { Material.DeadHornCoralBlock, 1.5f }, - { Material.DeadHornCoralFan, 0.0f }, - { Material.DeadHornCoralWallFan, 0.0f }, - { Material.DeadTubeCoral, 0.0f }, - { Material.DeadTubeCoralBlock, 1.5f }, - { Material.DeadTubeCoralFan, 0.0f }, - { Material.DeadTubeCoralWallFan, 0.0f }, - { Material.DecoratedPot, 0.0f }, - { Material.Deepslate, 3.0f }, - { Material.DeepslateBrickSlab, 3.5f }, - { Material.DeepslateBrickStairs, 3.5f }, - { Material.DeepslateBrickWall, 3.5f }, - { Material.DeepslateBricks, 3.5f }, - { Material.DeepslateCoalOre, 4.5f }, - { Material.DeepslateCopperOre, 4.5f }, - { Material.DeepslateDiamondOre, 4.5f }, - { Material.DeepslateEmeraldOre, 4.5f }, - { Material.DeepslateGoldOre, 4.5f }, - { Material.DeepslateIronOre, 4.5f }, - { Material.DeepslateLapisOre, 4.5f }, - { Material.DeepslateRedstoneOre, 4.5f }, - { Material.DeepslateTileSlab, 3.5f }, - { Material.DeepslateTileStairs, 3.5f }, - { Material.DeepslateTileWall, 3.5f }, - { Material.DeepslateTiles, 3.5f }, - { Material.DetectorRail, 0.7f }, - { Material.DiamondBlock, 5.0f }, - { Material.DiamondOre, 3.0f }, - { Material.Diorite, 1.5f }, - { Material.DioriteSlab, 1.5f }, - { Material.DioriteStairs, 1.5f }, - { Material.DioriteWall, 1.5f }, - { Material.Dirt, 0.5f }, - { Material.DirtPath, 0.65f }, - { Material.Dispenser, 3.5f }, - { Material.DragonEgg, 3.0f }, - { Material.DragonHead, 1.0f }, - { Material.DragonWallHead, 1.0f }, - { Material.DriedGhast, 0.0f }, - { Material.DriedKelpBlock, 0.5f }, - { Material.DripstoneBlock, 1.5f }, - { Material.Dropper, 3.5f }, - { Material.EmeraldBlock, 5.0f }, - { Material.EmeraldOre, 3.0f }, - { Material.EnchantingTable, 5.0f }, - { Material.EndGateway, -1.0f }, - { Material.EndPortal, -1.0f }, - { Material.EndPortalFrame, -1.0f }, - { Material.EndRod, 0.0f }, - { Material.EndStone, 3.0f }, - { Material.EndStoneBrickSlab, 3.0f }, - { Material.EndStoneBrickStairs, 3.0f }, - { Material.EndStoneBrickWall, 3.0f }, - { Material.EndStoneBricks, 3.0f }, - { Material.EnderChest, 22.5f }, - { Material.ExposedChiseledCopper, 3.0f }, - { Material.ExposedCopper, 3.0f }, - { Material.ExposedCopperBulb, 3.0f }, - { Material.ExposedCopperChest, 3.0f }, - { Material.ExposedCopperDoor, 3.0f }, - { Material.ExposedCopperGolemStatue, 3.0f }, - { Material.ExposedCopperGrate, 3.0f }, - { Material.ExposedCopperTrapdoor, 3.0f }, - { Material.ExposedCutCopper, 3.0f }, - { Material.ExposedCutCopperSlab, 3.0f }, - { Material.ExposedCutCopperStairs, 3.0f }, - { Material.ExposedLightningRod, 3.0f }, - { Material.Farmland, 0.6f }, - { Material.Fern, 0.0f }, - { Material.Fire, 0.0f }, - { Material.FireCoral, 0.0f }, - { Material.FireCoralBlock, 1.5f }, - { Material.FireCoralFan, 0.0f }, - { Material.FireCoralWallFan, 0.0f }, - { Material.FireflyBush, 0.0f }, - { Material.FletchingTable, 2.5f }, - { Material.FlowerPot, 0.0f }, - { Material.FloweringAzalea, 0.0f }, - { Material.FloweringAzaleaLeaves, 0.2f }, - { Material.Frogspawn, 0.0f }, - { Material.FrostedIce, 0.5f }, - { Material.Furnace, 3.5f }, - { Material.GildedBlackstone, 1.5f }, - { Material.Glass, 0.3f }, - { Material.GlassPane, 0.3f }, - { Material.GlowLichen, 0.2f }, - { Material.Glowstone, 0.3f }, - { Material.GoldBlock, 3.0f }, - { Material.GoldOre, 3.0f }, - { Material.Granite, 1.5f }, - { Material.GraniteSlab, 1.5f }, - { Material.GraniteStairs, 1.5f }, - { Material.GraniteWall, 1.5f }, - { Material.GrassBlock, 0.6f }, - { Material.Gravel, 0.6f }, - { Material.GrayBanner, 1.0f }, - { Material.GrayBed, 0.2f }, - { Material.GrayCandle, 0.1f }, - { Material.GrayCandleCake, 0.5f }, - { Material.GrayCarpet, 0.1f }, - { Material.GrayConcrete, 1.8f }, - { Material.GrayConcretePowder, 0.5f }, - { Material.GrayGlazedTerracotta, 1.4f }, - { Material.GrayShulkerBox, 2.0f }, - { Material.GrayStainedGlass, 0.3f }, - { Material.GrayStainedGlassPane, 0.3f }, - { Material.GrayTerracotta, 1.25f }, - { Material.GrayWallBanner, 1.0f }, - { Material.GrayWool, 0.8f }, - { Material.GreenBanner, 1.0f }, - { Material.GreenBed, 0.2f }, - { Material.GreenCandle, 0.1f }, - { Material.GreenCandleCake, 0.5f }, - { Material.GreenCarpet, 0.1f }, - { Material.GreenConcrete, 1.8f }, - { Material.GreenConcretePowder, 0.5f }, - { Material.GreenGlazedTerracotta, 1.4f }, - { Material.GreenShulkerBox, 2.0f }, - { Material.GreenStainedGlass, 0.3f }, - { Material.GreenStainedGlassPane, 0.3f }, - { Material.GreenTerracotta, 1.25f }, - { Material.GreenWallBanner, 1.0f }, - { Material.GreenWool, 0.8f }, - { Material.Grindstone, 2.0f }, - { Material.HangingRoots, 0.0f }, - { Material.HayBlock, 0.5f }, - { Material.HeavyCore, 10.0f }, - { Material.HeavyWeightedPressurePlate, 0.5f }, - { Material.HoneyBlock, 0.0f }, - { Material.HoneycombBlock, 0.6f }, - { Material.Hopper, 3.0f }, - { Material.HornCoral, 0.0f }, - { Material.HornCoralBlock, 1.5f }, - { Material.HornCoralFan, 0.0f }, - { Material.HornCoralWallFan, 0.0f }, - { Material.Ice, 0.5f }, - { Material.InfestedChiseledStoneBricks, 0.0f }, - { Material.InfestedCobblestone, 0.0f }, - { Material.InfestedCrackedStoneBricks, 0.0f }, - { Material.InfestedDeepslate, 0.0f }, - { Material.InfestedMossyStoneBricks, 0.0f }, - { Material.InfestedStone, 0.0f }, - { Material.InfestedStoneBricks, 0.0f }, - { Material.IronBars, 5.0f }, - { Material.IronBlock, 5.0f }, - { Material.IronChain, 5.0f }, - { Material.IronDoor, 5.0f }, - { Material.IronOre, 3.0f }, - { Material.IronTrapdoor, 5.0f }, - { Material.JackOLantern, 1.0f }, - { Material.Jigsaw, -1.0f }, - { Material.Jukebox, 2.0f }, - { Material.JungleButton, 0.5f }, - { Material.JungleDoor, 3.0f }, - { Material.JungleFence, 2.0f }, - { Material.JungleFenceGate, 2.0f }, - { Material.JungleHangingSign, 1.0f }, - { Material.JungleLeaves, 0.2f }, - { Material.JungleLog, 2.0f }, - { Material.JunglePlanks, 2.0f }, - { Material.JunglePressurePlate, 0.5f }, - { Material.JungleSapling, 0.0f }, - { Material.JungleShelf, 2.0f }, - { Material.JungleSign, 1.0f }, - { Material.JungleSlab, 2.0f }, - { Material.JungleStairs, 2.0f }, - { Material.JungleTrapdoor, 3.0f }, - { Material.JungleWallHangingSign, 1.0f }, - { Material.JungleWallSign, 1.0f }, - { Material.JungleWood, 2.0f }, - { Material.Kelp, 0.0f }, - { Material.KelpPlant, 0.0f }, - { Material.Ladder, 0.4f }, - { Material.Lantern, 3.5f }, - { Material.LapisBlock, 3.0f }, - { Material.LapisOre, 3.0f }, - { Material.LargeAmethystBud, 1.5f }, - { Material.LargeFern, 0.0f }, - { Material.Lava, 100.0f }, - { Material.LavaCauldron, 2.0f }, - { Material.LeafLitter, 0.0f }, - { Material.Lectern, 2.5f }, - { Material.Lever, 0.5f }, - { Material.Light, -1.0f }, - { Material.LightBlueBanner, 1.0f }, - { Material.LightBlueBed, 0.2f }, - { Material.LightBlueCandle, 0.1f }, - { Material.LightBlueCandleCake, 0.5f }, - { Material.LightBlueCarpet, 0.1f }, - { Material.LightBlueConcrete, 1.8f }, - { Material.LightBlueConcretePowder, 0.5f }, - { Material.LightBlueGlazedTerracotta, 1.4f }, - { Material.LightBlueShulkerBox, 2.0f }, - { Material.LightBlueStainedGlass, 0.3f }, - { Material.LightBlueStainedGlassPane, 0.3f }, - { Material.LightBlueTerracotta, 1.25f }, - { Material.LightBlueWallBanner, 1.0f }, - { Material.LightBlueWool, 0.8f }, - { Material.LightGrayBanner, 1.0f }, - { Material.LightGrayBed, 0.2f }, - { Material.LightGrayCandle, 0.1f }, - { Material.LightGrayCandleCake, 0.5f }, - { Material.LightGrayCarpet, 0.1f }, - { Material.LightGrayConcrete, 1.8f }, - { Material.LightGrayConcretePowder, 0.5f }, - { Material.LightGrayGlazedTerracotta, 1.4f }, - { Material.LightGrayShulkerBox, 2.0f }, - { Material.LightGrayStainedGlass, 0.3f }, - { Material.LightGrayStainedGlassPane, 0.3f }, - { Material.LightGrayTerracotta, 1.25f }, - { Material.LightGrayWallBanner, 1.0f }, - { Material.LightGrayWool, 0.8f }, - { Material.LightWeightedPressurePlate, 0.5f }, - { Material.LightningRod, 3.0f }, - { Material.Lilac, 0.0f }, - { Material.LilyOfTheValley, 0.0f }, - { Material.LilyPad, 0.0f }, - { Material.LimeBanner, 1.0f }, - { Material.LimeBed, 0.2f }, - { Material.LimeCandle, 0.1f }, - { Material.LimeCandleCake, 0.5f }, - { Material.LimeCarpet, 0.1f }, - { Material.LimeConcrete, 1.8f }, - { Material.LimeConcretePowder, 0.5f }, - { Material.LimeGlazedTerracotta, 1.4f }, - { Material.LimeShulkerBox, 2.0f }, - { Material.LimeStainedGlass, 0.3f }, - { Material.LimeStainedGlassPane, 0.3f }, - { Material.LimeTerracotta, 1.25f }, - { Material.LimeWallBanner, 1.0f }, - { Material.LimeWool, 0.8f }, - { Material.Lodestone, 3.5f }, - { Material.Loom, 2.5f }, - { Material.MagentaBanner, 1.0f }, - { Material.MagentaBed, 0.2f }, - { Material.MagentaCandle, 0.1f }, - { Material.MagentaCandleCake, 0.5f }, - { Material.MagentaCarpet, 0.1f }, - { Material.MagentaConcrete, 1.8f }, - { Material.MagentaConcretePowder, 0.5f }, - { Material.MagentaGlazedTerracotta, 1.4f }, - { Material.MagentaShulkerBox, 2.0f }, - { Material.MagentaStainedGlass, 0.3f }, - { Material.MagentaStainedGlassPane, 0.3f }, - { Material.MagentaTerracotta, 1.25f }, - { Material.MagentaWallBanner, 1.0f }, - { Material.MagentaWool, 0.8f }, - { Material.MagmaBlock, 0.5f }, - { Material.MangroveButton, 0.5f }, - { Material.MangroveDoor, 3.0f }, - { Material.MangroveFence, 2.0f }, - { Material.MangroveFenceGate, 2.0f }, - { Material.MangroveHangingSign, 1.0f }, - { Material.MangroveLeaves, 0.2f }, - { Material.MangroveLog, 2.0f }, - { Material.MangrovePlanks, 2.0f }, - { Material.MangrovePressurePlate, 0.5f }, - { Material.MangrovePropagule, 0.0f }, - { Material.MangroveRoots, 0.7f }, - { Material.MangroveShelf, 2.0f }, - { Material.MangroveSign, 1.0f }, - { Material.MangroveSlab, 2.0f }, - { Material.MangroveStairs, 2.0f }, - { Material.MangroveTrapdoor, 3.0f }, - { Material.MangroveWallHangingSign, 1.0f }, - { Material.MangroveWallSign, 1.0f }, - { Material.MangroveWood, 2.0f }, - { Material.MediumAmethystBud, 1.5f }, - { Material.Melon, 1.0f }, - { Material.MelonStem, 0.0f }, - { Material.MossBlock, 0.1f }, - { Material.MossCarpet, 0.1f }, - { Material.MossyCobblestone, 2.0f }, - { Material.MossyCobblestoneSlab, 2.0f }, - { Material.MossyCobblestoneStairs, 2.0f }, - { Material.MossyCobblestoneWall, 2.0f }, - { Material.MossyStoneBrickSlab, 1.5f }, - { Material.MossyStoneBrickStairs, 1.5f }, - { Material.MossyStoneBrickWall, 1.5f }, - { Material.MossyStoneBricks, 1.5f }, - { Material.MovingPiston, -1.0f }, - { Material.Mud, 0.5f }, - { Material.MudBrickSlab, 1.5f }, - { Material.MudBrickStairs, 1.5f }, - { Material.MudBrickWall, 1.5f }, - { Material.MudBricks, 1.5f }, - { Material.MuddyMangroveRoots, 0.7f }, - { Material.MushroomStem, 0.2f }, - { Material.Mycelium, 0.6f }, - { Material.NetherBrickFence, 2.0f }, - { Material.NetherBrickSlab, 2.0f }, - { Material.NetherBrickStairs, 2.0f }, - { Material.NetherBrickWall, 2.0f }, - { Material.NetherBricks, 2.0f }, - { Material.NetherGoldOre, 3.0f }, - { Material.NetherPortal, -1.0f }, - { Material.NetherQuartzOre, 3.0f }, - { Material.NetherSprouts, 0.0f }, - { Material.NetherWart, 0.0f }, - { Material.NetherWartBlock, 1.0f }, - { Material.NetheriteBlock, 50.0f }, - { Material.Netherrack, 0.4f }, - { Material.NoteBlock, 0.8f }, - { Material.OakButton, 0.5f }, - { Material.OakDoor, 3.0f }, - { Material.OakFence, 2.0f }, - { Material.OakFenceGate, 2.0f }, - { Material.OakHangingSign, 1.0f }, - { Material.OakLeaves, 0.2f }, - { Material.OakLog, 2.0f }, - { Material.OakPlanks, 2.0f }, - { Material.OakPressurePlate, 0.5f }, - { Material.OakSapling, 0.0f }, - { Material.OakShelf, 2.0f }, - { Material.OakSign, 1.0f }, - { Material.OakSlab, 2.0f }, - { Material.OakStairs, 2.0f }, - { Material.OakTrapdoor, 3.0f }, - { Material.OakWallHangingSign, 1.0f }, - { Material.OakWallSign, 1.0f }, - { Material.OakWood, 2.0f }, - { Material.Observer, 3.0f }, - { Material.Obsidian, 50.0f }, - { Material.OchreFroglight, 0.3f }, - { Material.OpenEyeblossom, 0.0f }, - { Material.OrangeBanner, 1.0f }, - { Material.OrangeBed, 0.2f }, - { Material.OrangeCandle, 0.1f }, - { Material.OrangeCandleCake, 0.5f }, - { Material.OrangeCarpet, 0.1f }, - { Material.OrangeConcrete, 1.8f }, - { Material.OrangeConcretePowder, 0.5f }, - { Material.OrangeGlazedTerracotta, 1.4f }, - { Material.OrangeShulkerBox, 2.0f }, - { Material.OrangeStainedGlass, 0.3f }, - { Material.OrangeStainedGlassPane, 0.3f }, - { Material.OrangeTerracotta, 1.25f }, - { Material.OrangeTulip, 0.0f }, - { Material.OrangeWallBanner, 1.0f }, - { Material.OrangeWool, 0.8f }, - { Material.OxeyeDaisy, 0.0f }, - { Material.OxidizedChiseledCopper, 3.0f }, - { Material.OxidizedCopper, 3.0f }, - { Material.OxidizedCopperBulb, 3.0f }, - { Material.OxidizedCopperChest, 3.0f }, - { Material.OxidizedCopperDoor, 3.0f }, - { Material.OxidizedCopperGolemStatue, 3.0f }, - { Material.OxidizedCopperGrate, 3.0f }, - { Material.OxidizedCopperTrapdoor, 3.0f }, - { Material.OxidizedCutCopper, 3.0f }, - { Material.OxidizedCutCopperSlab, 3.0f }, - { Material.OxidizedCutCopperStairs, 3.0f }, - { Material.OxidizedLightningRod, 3.0f }, - { Material.PackedIce, 0.5f }, - { Material.PackedMud, 1.0f }, - { Material.PaleHangingMoss, 0.0f }, - { Material.PaleMossBlock, 0.1f }, - { Material.PaleMossCarpet, 0.1f }, - { Material.PaleOakButton, 0.5f }, - { Material.PaleOakDoor, 3.0f }, - { Material.PaleOakFence, 2.0f }, - { Material.PaleOakFenceGate, 2.0f }, - { Material.PaleOakHangingSign, 1.0f }, - { Material.PaleOakLeaves, 0.2f }, - { Material.PaleOakLog, 2.0f }, - { Material.PaleOakPlanks, 2.0f }, - { Material.PaleOakPressurePlate, 0.5f }, - { Material.PaleOakSapling, 0.0f }, - { Material.PaleOakShelf, 2.0f }, - { Material.PaleOakSign, 1.0f }, - { Material.PaleOakSlab, 2.0f }, - { Material.PaleOakStairs, 2.0f }, - { Material.PaleOakTrapdoor, 3.0f }, - { Material.PaleOakWallHangingSign, 1.0f }, - { Material.PaleOakWallSign, 1.0f }, - { Material.PaleOakWood, 2.0f }, - { Material.PearlescentFroglight, 0.3f }, - { Material.Peony, 0.0f }, - { Material.PetrifiedOakSlab, 2.0f }, - { Material.PiglinHead, 1.0f }, - { Material.PiglinWallHead, 1.0f }, - { Material.PinkBanner, 1.0f }, - { Material.PinkBed, 0.2f }, - { Material.PinkCandle, 0.1f }, - { Material.PinkCandleCake, 0.5f }, - { Material.PinkCarpet, 0.1f }, - { Material.PinkConcrete, 1.8f }, - { Material.PinkConcretePowder, 0.5f }, - { Material.PinkGlazedTerracotta, 1.4f }, - { Material.PinkPetals, 0.0f }, - { Material.PinkShulkerBox, 2.0f }, - { Material.PinkStainedGlass, 0.3f }, - { Material.PinkStainedGlassPane, 0.3f }, - { Material.PinkTerracotta, 1.25f }, - { Material.PinkTulip, 0.0f }, - { Material.PinkWallBanner, 1.0f }, - { Material.PinkWool, 0.8f }, - { Material.Piston, 0.0f }, - { Material.PistonHead, 1.5f }, - { Material.PitcherCrop, 0.0f }, - { Material.PitcherPlant, 0.0f }, - { Material.PlayerHead, 1.0f }, - { Material.PlayerWallHead, 1.0f }, - { Material.Podzol, 0.5f }, - { Material.PointedDripstone, 1.5f }, - { Material.PolishedAndesite, 1.5f }, - { Material.PolishedAndesiteSlab, 1.5f }, - { Material.PolishedAndesiteStairs, 1.5f }, - { Material.PolishedBasalt, 1.25f }, - { Material.PolishedBlackstone, 2.0f }, - { Material.PolishedBlackstoneBrickSlab, 2.0f }, - { Material.PolishedBlackstoneBrickStairs, 1.5f }, - { Material.PolishedBlackstoneBrickWall, 1.5f }, - { Material.PolishedBlackstoneBricks, 1.5f }, - { Material.PolishedBlackstoneButton, 0.5f }, - { Material.PolishedBlackstonePressurePlate, 0.5f }, - { Material.PolishedBlackstoneSlab, 2.0f }, - { Material.PolishedBlackstoneStairs, 2.0f }, - { Material.PolishedBlackstoneWall, 2.0f }, - { Material.PolishedDeepslate, 3.5f }, - { Material.PolishedDeepslateSlab, 3.5f }, - { Material.PolishedDeepslateStairs, 3.5f }, - { Material.PolishedDeepslateWall, 3.5f }, - { Material.PolishedDiorite, 1.5f }, - { Material.PolishedDioriteSlab, 1.5f }, - { Material.PolishedDioriteStairs, 1.5f }, - { Material.PolishedGranite, 1.5f }, - { Material.PolishedGraniteSlab, 1.5f }, - { Material.PolishedGraniteStairs, 1.5f }, - { Material.PolishedTuff, 1.5f }, - { Material.PolishedTuffSlab, 1.5f }, - { Material.PolishedTuffStairs, 1.5f }, - { Material.PolishedTuffWall, 1.5f }, - { Material.Poppy, 0.0f }, - { Material.Potatoes, 0.0f }, - { Material.PottedAcaciaSapling, 0.0f }, - { Material.PottedAllium, 0.0f }, - { Material.PottedAzaleaBush, 0.0f }, - { Material.PottedAzureBluet, 0.0f }, - { Material.PottedBamboo, 0.0f }, - { Material.PottedBirchSapling, 0.0f }, - { Material.PottedBlueOrchid, 0.0f }, - { Material.PottedBrownMushroom, 0.0f }, - { Material.PottedCactus, 0.0f }, - { Material.PottedCherrySapling, 0.0f }, - { Material.PottedClosedEyeblossom, 0.0f }, - { Material.PottedCornflower, 0.0f }, - { Material.PottedCrimsonFungus, 0.0f }, - { Material.PottedCrimsonRoots, 0.0f }, - { Material.PottedDandelion, 0.0f }, - { Material.PottedDarkOakSapling, 0.0f }, - { Material.PottedDeadBush, 0.0f }, - { Material.PottedFern, 0.0f }, - { Material.PottedFloweringAzaleaBush, 0.0f }, - { Material.PottedJungleSapling, 0.0f }, - { Material.PottedLilyOfTheValley, 0.0f }, - { Material.PottedMangrovePropagule, 0.0f }, - { Material.PottedOakSapling, 0.0f }, - { Material.PottedOpenEyeblossom, 0.0f }, - { Material.PottedOrangeTulip, 0.0f }, - { Material.PottedOxeyeDaisy, 0.0f }, - { Material.PottedPaleOakSapling, 0.0f }, - { Material.PottedPinkTulip, 0.0f }, - { Material.PottedPoppy, 0.0f }, - { Material.PottedRedMushroom, 0.0f }, - { Material.PottedRedTulip, 0.0f }, - { Material.PottedSpruceSapling, 0.0f }, - { Material.PottedTorchflower, 0.0f }, - { Material.PottedWarpedFungus, 0.0f }, - { Material.PottedWarpedRoots, 0.0f }, - { Material.PottedWhiteTulip, 0.0f }, - { Material.PottedWitherRose, 0.0f }, - { Material.PowderSnow, 0.25f }, - { Material.PowderSnowCauldron, 2.0f }, - { Material.PoweredRail, 0.7f }, - { Material.Prismarine, 1.5f }, - { Material.PrismarineBrickSlab, 1.5f }, - { Material.PrismarineBrickStairs, 1.5f }, - { Material.PrismarineBricks, 1.5f }, - { Material.PrismarineSlab, 1.5f }, - { Material.PrismarineStairs, 1.5f }, - { Material.PrismarineWall, 1.5f }, - { Material.Pumpkin, 1.0f }, - { Material.PumpkinStem, 0.0f }, - { Material.PurpleBanner, 1.0f }, - { Material.PurpleBed, 0.2f }, - { Material.PurpleCandle, 0.1f }, - { Material.PurpleCandleCake, 0.5f }, - { Material.PurpleCarpet, 0.1f }, - { Material.PurpleConcrete, 1.8f }, - { Material.PurpleConcretePowder, 0.5f }, - { Material.PurpleGlazedTerracotta, 1.4f }, - { Material.PurpleShulkerBox, 2.0f }, - { Material.PurpleStainedGlass, 0.3f }, - { Material.PurpleStainedGlassPane, 0.3f }, - { Material.PurpleTerracotta, 1.25f }, - { Material.PurpleWallBanner, 1.0f }, - { Material.PurpleWool, 0.8f }, - { Material.PurpurBlock, 1.5f }, - { Material.PurpurPillar, 1.5f }, - { Material.PurpurSlab, 2.0f }, - { Material.PurpurStairs, 1.5f }, - { Material.QuartzBlock, 0.8f }, - { Material.QuartzBricks, 0.8f }, - { Material.QuartzPillar, 0.8f }, - { Material.QuartzSlab, 2.0f }, - { Material.QuartzStairs, 0.8f }, - { Material.Rail, 0.7f }, - { Material.RawCopperBlock, 5.0f }, - { Material.RawGoldBlock, 5.0f }, - { Material.RawIronBlock, 5.0f }, - { Material.RedBanner, 1.0f }, - { Material.RedBed, 0.2f }, - { Material.RedCandle, 0.1f }, - { Material.RedCandleCake, 0.5f }, - { Material.RedCarpet, 0.1f }, - { Material.RedConcrete, 1.8f }, - { Material.RedConcretePowder, 0.5f }, - { Material.RedGlazedTerracotta, 1.4f }, - { Material.RedMushroom, 0.0f }, - { Material.RedMushroomBlock, 0.2f }, - { Material.RedNetherBrickSlab, 2.0f }, - { Material.RedNetherBrickStairs, 2.0f }, - { Material.RedNetherBrickWall, 2.0f }, - { Material.RedNetherBricks, 2.0f }, - { Material.RedSand, 0.5f }, - { Material.RedSandstone, 0.8f }, - { Material.RedSandstoneSlab, 2.0f }, - { Material.RedSandstoneStairs, 0.8f }, - { Material.RedSandstoneWall, 0.8f }, - { Material.RedShulkerBox, 2.0f }, - { Material.RedStainedGlass, 0.3f }, - { Material.RedStainedGlassPane, 0.3f }, - { Material.RedTerracotta, 1.25f }, - { Material.RedTulip, 0.0f }, - { Material.RedWallBanner, 1.0f }, - { Material.RedWool, 0.8f }, - { Material.RedstoneBlock, 5.0f }, - { Material.RedstoneLamp, 0.3f }, - { Material.RedstoneOre, 3.0f }, - { Material.RedstoneTorch, 0.0f }, - { Material.RedstoneWallTorch, 0.0f }, - { Material.RedstoneWire, 0.0f }, - { Material.ReinforcedDeepslate, 55.0f }, - { Material.Repeater, 0.0f }, - { Material.RepeatingCommandBlock, -1.0f }, - { Material.ResinBlock, 0.0f }, - { Material.ResinBrickSlab, 1.5f }, - { Material.ResinBrickStairs, 1.5f }, - { Material.ResinBrickWall, 1.5f }, - { Material.ResinBricks, 1.5f }, - { Material.ResinClump, 0.0f }, - { Material.RespawnAnchor, 50.0f }, - { Material.RootedDirt, 0.5f }, - { Material.RoseBush, 0.0f }, - { Material.Sand, 0.5f }, - { Material.Sandstone, 0.8f }, - { Material.SandstoneSlab, 2.0f }, - { Material.SandstoneStairs, 0.8f }, - { Material.SandstoneWall, 0.8f }, - { Material.Scaffolding, 0.0f }, - { Material.Sculk, 0.2f }, - { Material.SculkCatalyst, 3.0f }, - { Material.SculkSensor, 1.5f }, - { Material.SculkShrieker, 3.0f }, - { Material.SculkVein, 0.2f }, - { Material.SeaLantern, 0.3f }, - { Material.SeaPickle, 0.0f }, - { Material.Seagrass, 0.0f }, - { Material.ShortDryGrass, 0.0f }, - { Material.ShortGrass, 0.0f }, - { Material.Shroomlight, 1.0f }, - { Material.ShulkerBox, 2.0f }, - { Material.SkeletonSkull, 1.0f }, - { Material.SkeletonWallSkull, 1.0f }, - { Material.SlimeBlock, 0.0f }, - { Material.SmallAmethystBud, 1.5f }, - { Material.SmallDripleaf, 0.0f }, - { Material.SmithingTable, 2.5f }, - { Material.Smoker, 3.5f }, - { Material.SmoothBasalt, 1.25f }, - { Material.SmoothQuartz, 2.0f }, - { Material.SmoothQuartzSlab, 2.0f }, - { Material.SmoothQuartzStairs, 2.0f }, - { Material.SmoothRedSandstone, 2.0f }, - { Material.SmoothRedSandstoneSlab, 2.0f }, - { Material.SmoothRedSandstoneStairs, 2.0f }, - { Material.SmoothSandstone, 2.0f }, - { Material.SmoothSandstoneSlab, 2.0f }, - { Material.SmoothSandstoneStairs, 2.0f }, - { Material.SmoothStone, 2.0f }, - { Material.SmoothStoneSlab, 2.0f }, - { Material.SnifferEgg, 0.5f }, - { Material.Snow, 0.1f }, - { Material.SnowBlock, 0.2f }, - { Material.SoulCampfire, 2.0f }, - { Material.SoulFire, 0.0f }, - { Material.SoulLantern, 3.5f }, - { Material.SoulSand, 0.5f }, - { Material.SoulSoil, 0.5f }, - { Material.SoulTorch, 0.0f }, - { Material.SoulWallTorch, 0.0f }, - { Material.Spawner, 5.0f }, - { Material.Sponge, 0.6f }, - { Material.SporeBlossom, 0.0f }, - { Material.SpruceButton, 0.5f }, - { Material.SpruceDoor, 3.0f }, - { Material.SpruceFence, 2.0f }, - { Material.SpruceFenceGate, 2.0f }, - { Material.SpruceHangingSign, 1.0f }, - { Material.SpruceLeaves, 0.2f }, - { Material.SpruceLog, 2.0f }, - { Material.SprucePlanks, 2.0f }, - { Material.SprucePressurePlate, 0.5f }, - { Material.SpruceSapling, 0.0f }, - { Material.SpruceShelf, 2.0f }, - { Material.SpruceSign, 1.0f }, - { Material.SpruceSlab, 2.0f }, - { Material.SpruceStairs, 2.0f }, - { Material.SpruceTrapdoor, 3.0f }, - { Material.SpruceWallHangingSign, 1.0f }, - { Material.SpruceWallSign, 1.0f }, - { Material.SpruceWood, 2.0f }, - { Material.StickyPiston, 0.0f }, - { Material.Stone, 1.5f }, - { Material.StoneBrickSlab, 2.0f }, - { Material.StoneBrickStairs, 1.5f }, - { Material.StoneBrickWall, 1.5f }, - { Material.StoneBricks, 1.5f }, - { Material.StoneButton, 0.5f }, - { Material.StonePressurePlate, 0.5f }, - { Material.StoneSlab, 2.0f }, - { Material.StoneStairs, 1.5f }, - { Material.Stonecutter, 3.5f }, - { Material.StrippedAcaciaLog, 2.0f }, - { Material.StrippedAcaciaWood, 2.0f }, - { Material.StrippedBambooBlock, 2.0f }, - { Material.StrippedBirchLog, 2.0f }, - { Material.StrippedBirchWood, 2.0f }, - { Material.StrippedCherryLog, 2.0f }, - { Material.StrippedCherryWood, 2.0f }, - { Material.StrippedCrimsonHyphae, 2.0f }, - { Material.StrippedCrimsonStem, 2.0f }, - { Material.StrippedDarkOakLog, 2.0f }, - { Material.StrippedDarkOakWood, 2.0f }, - { Material.StrippedJungleLog, 2.0f }, - { Material.StrippedJungleWood, 2.0f }, - { Material.StrippedMangroveLog, 2.0f }, - { Material.StrippedMangroveWood, 2.0f }, - { Material.StrippedOakLog, 2.0f }, - { Material.StrippedOakWood, 2.0f }, - { Material.StrippedPaleOakLog, 2.0f }, - { Material.StrippedPaleOakWood, 2.0f }, - { Material.StrippedSpruceLog, 2.0f }, - { Material.StrippedSpruceWood, 2.0f }, - { Material.StrippedWarpedHyphae, 2.0f }, - { Material.StrippedWarpedStem, 2.0f }, - { Material.StructureBlock, -1.0f }, - { Material.StructureVoid, 0.0f }, - { Material.SugarCane, 0.0f }, - { Material.Sunflower, 0.0f }, - { Material.SuspiciousGravel, 0.25f }, - { Material.SuspiciousSand, 0.25f }, - { Material.SweetBerryBush, 0.0f }, - { Material.TallDryGrass, 0.0f }, - { Material.TallGrass, 0.0f }, - { Material.TallSeagrass, 0.0f }, - { Material.Target, 0.5f }, - { Material.Terracotta, 1.25f }, - { Material.TestBlock, -1.0f }, - { Material.TestInstanceBlock, -1.0f }, - { Material.TintedGlass, 0.3f }, - { Material.Tnt, 0.0f }, - { Material.Torch, 0.0f }, - { Material.Torchflower, 0.0f }, - { Material.TorchflowerCrop, 0.0f }, - { Material.TrappedChest, 2.5f }, - { Material.TrialSpawner, 50.0f }, - { Material.Tripwire, 0.0f }, - { Material.TripwireHook, 0.0f }, - { Material.TubeCoral, 0.0f }, - { Material.TubeCoralBlock, 1.5f }, - { Material.TubeCoralFan, 0.0f }, - { Material.TubeCoralWallFan, 0.0f }, - { Material.Tuff, 1.5f }, - { Material.TuffBrickSlab, 1.5f }, - { Material.TuffBrickStairs, 1.5f }, - { Material.TuffBrickWall, 1.5f }, - { Material.TuffBricks, 1.5f }, - { Material.TuffSlab, 1.5f }, - { Material.TuffStairs, 1.5f }, - { Material.TuffWall, 1.5f }, - { Material.TurtleEgg, 0.5f }, - { Material.TwistingVines, 0.0f }, - { Material.TwistingVinesPlant, 0.0f }, - { Material.Vault, 50.0f }, - { Material.VerdantFroglight, 0.3f }, - { Material.Vine, 0.2f }, - { Material.VoidAir, 0.0f }, - { Material.WallTorch, 0.0f }, - { Material.WarpedButton, 0.5f }, - { Material.WarpedDoor, 3.0f }, - { Material.WarpedFence, 2.0f }, - { Material.WarpedFenceGate, 2.0f }, - { Material.WarpedFungus, 0.0f }, - { Material.WarpedHangingSign, 1.0f }, - { Material.WarpedHyphae, 2.0f }, - { Material.WarpedNylium, 0.4f }, - { Material.WarpedPlanks, 2.0f }, - { Material.WarpedPressurePlate, 0.5f }, - { Material.WarpedRoots, 0.0f }, - { Material.WarpedShelf, 2.0f }, - { Material.WarpedSign, 1.0f }, - { Material.WarpedSlab, 2.0f }, - { Material.WarpedStairs, 2.0f }, - { Material.WarpedStem, 2.0f }, - { Material.WarpedTrapdoor, 3.0f }, - { Material.WarpedWallHangingSign, 1.0f }, - { Material.WarpedWallSign, 1.0f }, - { Material.WarpedWartBlock, 1.0f }, - { Material.Water, 100.0f }, - { Material.WaterCauldron, 2.0f }, - { Material.WaxedChiseledCopper, 3.0f }, - { Material.WaxedCopperBlock, 3.0f }, - { Material.WaxedCopperBulb, 3.0f }, - { Material.WaxedCopperChest, 3.0f }, - { Material.WaxedCopperDoor, 3.0f }, - { Material.WaxedCopperGolemStatue, 3.0f }, - { Material.WaxedCopperGrate, 3.0f }, - { Material.WaxedCopperTrapdoor, 3.0f }, - { Material.WaxedCutCopper, 3.0f }, - { Material.WaxedCutCopperSlab, 3.0f }, - { Material.WaxedCutCopperStairs, 3.0f }, - { Material.WaxedExposedChiseledCopper, 3.0f }, - { Material.WaxedExposedCopper, 3.0f }, - { Material.WaxedExposedCopperBulb, 3.0f }, - { Material.WaxedExposedCopperChest, 3.0f }, - { Material.WaxedExposedCopperDoor, 3.0f }, - { Material.WaxedExposedCopperGolemStatue, 3.0f }, - { Material.WaxedExposedCopperGrate, 3.0f }, - { Material.WaxedExposedCopperTrapdoor, 3.0f }, - { Material.WaxedExposedCutCopper, 3.0f }, - { Material.WaxedExposedCutCopperSlab, 3.0f }, - { Material.WaxedExposedCutCopperStairs, 3.0f }, - { Material.WaxedExposedLightningRod, 3.0f }, - { Material.WaxedLightningRod, 3.0f }, - { Material.WaxedOxidizedChiseledCopper, 3.0f }, - { Material.WaxedOxidizedCopper, 3.0f }, - { Material.WaxedOxidizedCopperBulb, 3.0f }, - { Material.WaxedOxidizedCopperChest, 3.0f }, - { Material.WaxedOxidizedCopperDoor, 3.0f }, - { Material.WaxedOxidizedCopperGolemStatue, 3.0f }, - { Material.WaxedOxidizedCopperGrate, 3.0f }, - { Material.WaxedOxidizedCopperTrapdoor, 3.0f }, - { Material.WaxedOxidizedCutCopper, 3.0f }, - { Material.WaxedOxidizedCutCopperSlab, 3.0f }, - { Material.WaxedOxidizedCutCopperStairs, 3.0f }, - { Material.WaxedOxidizedLightningRod, 3.0f }, - { Material.WaxedWeatheredChiseledCopper, 3.0f }, - { Material.WaxedWeatheredCopper, 3.0f }, - { Material.WaxedWeatheredCopperBulb, 3.0f }, - { Material.WaxedWeatheredCopperChest, 3.0f }, - { Material.WaxedWeatheredCopperDoor, 3.0f }, - { Material.WaxedWeatheredCopperGolemStatue, 3.0f }, - { Material.WaxedWeatheredCopperGrate, 3.0f }, - { Material.WaxedWeatheredCopperTrapdoor, 3.0f }, - { Material.WaxedWeatheredCutCopper, 3.0f }, - { Material.WaxedWeatheredCutCopperSlab, 3.0f }, - { Material.WaxedWeatheredCutCopperStairs, 3.0f }, - { Material.WaxedWeatheredLightningRod, 3.0f }, - { Material.WeatheredChiseledCopper, 3.0f }, - { Material.WeatheredCopper, 3.0f }, - { Material.WeatheredCopperBulb, 3.0f }, - { Material.WeatheredCopperChest, 3.0f }, - { Material.WeatheredCopperDoor, 3.0f }, - { Material.WeatheredCopperGolemStatue, 3.0f }, - { Material.WeatheredCopperGrate, 3.0f }, - { Material.WeatheredCopperTrapdoor, 3.0f }, - { Material.WeatheredCutCopper, 3.0f }, - { Material.WeatheredCutCopperSlab, 3.0f }, - { Material.WeatheredCutCopperStairs, 3.0f }, - { Material.WeatheredLightningRod, 3.0f }, - { Material.WeepingVines, 0.0f }, - { Material.WeepingVinesPlant, 0.0f }, - { Material.WetSponge, 0.6f }, - { Material.Wheat, 0.0f }, - { Material.WhiteBanner, 1.0f }, - { Material.WhiteBed, 0.2f }, - { Material.WhiteCandle, 0.1f }, - { Material.WhiteCandleCake, 0.5f }, - { Material.WhiteCarpet, 0.1f }, - { Material.WhiteConcrete, 1.8f }, - { Material.WhiteConcretePowder, 0.5f }, - { Material.WhiteGlazedTerracotta, 1.4f }, - { Material.WhiteShulkerBox, 2.0f }, - { Material.WhiteStainedGlass, 0.3f }, - { Material.WhiteStainedGlassPane, 0.3f }, - { Material.WhiteTerracotta, 1.25f }, - { Material.WhiteTulip, 0.0f }, - { Material.WhiteWallBanner, 1.0f }, - { Material.WhiteWool, 0.8f }, - { Material.Wildflowers, 0.0f }, - { Material.WitherRose, 0.0f }, - { Material.WitherSkeletonSkull, 1.0f }, - { Material.WitherSkeletonWallSkull, 1.0f }, - { Material.YellowBanner, 1.0f }, - { Material.YellowBed, 0.2f }, - { Material.YellowCandle, 0.1f }, - { Material.YellowCandleCake, 0.5f }, - { Material.YellowCarpet, 0.1f }, - { Material.YellowConcrete, 1.8f }, - { Material.YellowConcretePowder, 0.5f }, - { Material.YellowGlazedTerracotta, 1.4f }, - { Material.YellowShulkerBox, 2.0f }, - { Material.YellowStainedGlass, 0.3f }, - { Material.YellowStainedGlassPane, 0.3f }, - { Material.YellowTerracotta, 1.25f }, - { Material.YellowWallBanner, 1.0f }, - { Material.YellowWool, 0.8f }, - { Material.ZombieHead, 1.0f }, - { Material.ZombieWallHead, 1.0f }, - }.ToFrozenDictionary(); - - private static readonly FrozenSet RequiresCorrectToolSet = new HashSet - { - Material.AmethystBlock, - Material.AncientDebris, - Material.Andesite, - Material.AndesiteSlab, - Material.AndesiteStairs, - Material.AndesiteWall, - Material.Anvil, - Material.Basalt, - Material.BlackConcrete, - Material.BlackGlazedTerracotta, - Material.BlackTerracotta, - Material.Blackstone, - Material.BlackstoneSlab, - Material.BlackstoneStairs, - Material.BlackstoneWall, - Material.BlastFurnace, - Material.BlueConcrete, - Material.BlueGlazedTerracotta, - Material.BlueTerracotta, - Material.BoneBlock, - Material.BrainCoralBlock, - Material.BrickSlab, - Material.BrickStairs, - Material.BrickWall, - Material.Bricks, - Material.BrownConcrete, - Material.BrownGlazedTerracotta, - Material.BrownTerracotta, - Material.BubbleCoralBlock, - Material.BuddingAmethyst, - Material.Calcite, - Material.Cauldron, - Material.ChainCommandBlock, - Material.ChippedAnvil, - Material.ChiseledCopper, - Material.ChiseledDeepslate, - Material.ChiseledNetherBricks, - Material.ChiseledPolishedBlackstone, - Material.ChiseledQuartzBlock, - Material.ChiseledRedSandstone, - Material.ChiseledResinBricks, - Material.ChiseledSandstone, - Material.ChiseledStoneBricks, - Material.ChiseledTuff, - Material.ChiseledTuffBricks, - Material.CoalBlock, - Material.CoalOre, - Material.CobbledDeepslate, - Material.CobbledDeepslateSlab, - Material.CobbledDeepslateStairs, - Material.CobbledDeepslateWall, - Material.Cobblestone, - Material.CobblestoneSlab, - Material.CobblestoneStairs, - Material.CobblestoneWall, - Material.Cobweb, - Material.CommandBlock, - Material.CopperBlock, - Material.CopperBulb, - Material.CopperChest, - Material.CopperGrate, - Material.CopperOre, - Material.CopperTrapdoor, - Material.CrackedDeepslateBricks, - Material.CrackedDeepslateTiles, - Material.CrackedNetherBricks, - Material.CrackedPolishedBlackstoneBricks, - Material.CrackedStoneBricks, - Material.CrimsonNylium, - Material.CryingObsidian, - Material.CutCopper, - Material.CutCopperSlab, - Material.CutCopperStairs, - Material.CutRedSandstone, - Material.CutRedSandstoneSlab, - Material.CutSandstone, - Material.CutSandstoneSlab, - Material.CyanConcrete, - Material.CyanGlazedTerracotta, - Material.CyanTerracotta, - Material.DamagedAnvil, - Material.DarkPrismarine, - Material.DarkPrismarineSlab, - Material.DarkPrismarineStairs, - Material.DeadBrainCoral, - Material.DeadBrainCoralBlock, - Material.DeadBrainCoralFan, - Material.DeadBrainCoralWallFan, - Material.DeadBubbleCoral, - Material.DeadBubbleCoralBlock, - Material.DeadBubbleCoralFan, - Material.DeadBubbleCoralWallFan, - Material.DeadFireCoral, - Material.DeadFireCoralBlock, - Material.DeadFireCoralFan, - Material.DeadFireCoralWallFan, - Material.DeadHornCoral, - Material.DeadHornCoralBlock, - Material.DeadHornCoralFan, - Material.DeadHornCoralWallFan, - Material.DeadTubeCoral, - Material.DeadTubeCoralBlock, - Material.DeadTubeCoralFan, - Material.DeadTubeCoralWallFan, - Material.Deepslate, - Material.DeepslateBrickSlab, - Material.DeepslateBrickStairs, - Material.DeepslateBrickWall, - Material.DeepslateBricks, - Material.DeepslateCoalOre, - Material.DeepslateCopperOre, - Material.DeepslateDiamondOre, - Material.DeepslateEmeraldOre, - Material.DeepslateGoldOre, - Material.DeepslateIronOre, - Material.DeepslateLapisOre, - Material.DeepslateRedstoneOre, - Material.DeepslateTileSlab, - Material.DeepslateTileStairs, - Material.DeepslateTileWall, - Material.DeepslateTiles, - Material.DiamondBlock, - Material.DiamondOre, - Material.Diorite, - Material.DioriteSlab, - Material.DioriteStairs, - Material.DioriteWall, - Material.Dispenser, - Material.DripstoneBlock, - Material.Dropper, - Material.EmeraldBlock, - Material.EmeraldOre, - Material.EnchantingTable, - Material.EndStone, - Material.EndStoneBrickSlab, - Material.EndStoneBrickStairs, - Material.EndStoneBrickWall, - Material.EndStoneBricks, - Material.ExposedChiseledCopper, - Material.ExposedCopper, - Material.ExposedCopperBulb, - Material.ExposedCopperChest, - Material.ExposedCopperGrate, - Material.ExposedCopperTrapdoor, - Material.ExposedCutCopper, - Material.ExposedCutCopperSlab, - Material.ExposedCutCopperStairs, - Material.ExposedLightningRod, - Material.FireCoralBlock, - Material.Furnace, - Material.GildedBlackstone, - Material.GoldBlock, - Material.GoldOre, - Material.Granite, - Material.GraniteSlab, - Material.GraniteStairs, - Material.GraniteWall, - Material.GrayConcrete, - Material.GrayGlazedTerracotta, - Material.GrayTerracotta, - Material.GreenConcrete, - Material.GreenGlazedTerracotta, - Material.GreenTerracotta, - Material.Grindstone, - Material.Hopper, - Material.HornCoralBlock, - Material.IronBars, - Material.IronBlock, - Material.IronChain, - Material.IronOre, - Material.IronTrapdoor, - Material.Jigsaw, - Material.LapisBlock, - Material.LapisOre, - Material.LavaCauldron, - Material.LightBlueConcrete, - Material.LightBlueGlazedTerracotta, - Material.LightBlueTerracotta, - Material.LightGrayConcrete, - Material.LightGrayGlazedTerracotta, - Material.LightGrayTerracotta, - Material.LightningRod, - Material.LimeConcrete, - Material.LimeGlazedTerracotta, - Material.LimeTerracotta, - Material.Lodestone, - Material.MagentaConcrete, - Material.MagentaGlazedTerracotta, - Material.MagentaTerracotta, - Material.MagmaBlock, - Material.MossyCobblestone, - Material.MossyCobblestoneSlab, - Material.MossyCobblestoneStairs, - Material.MossyCobblestoneWall, - Material.MossyStoneBrickSlab, - Material.MossyStoneBrickStairs, - Material.MossyStoneBrickWall, - Material.MossyStoneBricks, - Material.MudBrickSlab, - Material.MudBrickStairs, - Material.MudBrickWall, - Material.MudBricks, - Material.NetherBrickFence, - Material.NetherBrickSlab, - Material.NetherBrickStairs, - Material.NetherBrickWall, - Material.NetherBricks, - Material.NetherGoldOre, - Material.NetherQuartzOre, - Material.NetheriteBlock, - Material.Netherrack, - Material.Observer, - Material.Obsidian, - Material.OrangeConcrete, - Material.OrangeGlazedTerracotta, - Material.OrangeTerracotta, - Material.OxidizedChiseledCopper, - Material.OxidizedCopper, - Material.OxidizedCopperBulb, - Material.OxidizedCopperChest, - Material.OxidizedCopperGrate, - Material.OxidizedCopperTrapdoor, - Material.OxidizedCutCopper, - Material.OxidizedCutCopperSlab, - Material.OxidizedCutCopperStairs, - Material.OxidizedLightningRod, - Material.PetrifiedOakSlab, - Material.PinkConcrete, - Material.PinkGlazedTerracotta, - Material.PinkTerracotta, - Material.PolishedAndesite, - Material.PolishedAndesiteSlab, - Material.PolishedAndesiteStairs, - Material.PolishedBasalt, - Material.PolishedBlackstone, - Material.PolishedBlackstoneBrickSlab, - Material.PolishedBlackstoneBrickStairs, - Material.PolishedBlackstoneBrickWall, - Material.PolishedBlackstoneBricks, - Material.PolishedBlackstoneSlab, - Material.PolishedBlackstoneStairs, - Material.PolishedBlackstoneWall, - Material.PolishedDeepslate, - Material.PolishedDeepslateSlab, - Material.PolishedDeepslateStairs, - Material.PolishedDeepslateWall, - Material.PolishedDiorite, - Material.PolishedDioriteSlab, - Material.PolishedDioriteStairs, - Material.PolishedGranite, - Material.PolishedGraniteSlab, - Material.PolishedGraniteStairs, - Material.PolishedTuff, - Material.PolishedTuffSlab, - Material.PolishedTuffStairs, - Material.PolishedTuffWall, - Material.PowderSnowCauldron, - Material.Prismarine, - Material.PrismarineBrickSlab, - Material.PrismarineBrickStairs, - Material.PrismarineBricks, - Material.PrismarineSlab, - Material.PrismarineStairs, - Material.PrismarineWall, - Material.PurpleConcrete, - Material.PurpleGlazedTerracotta, - Material.PurpleTerracotta, - Material.PurpurBlock, - Material.PurpurPillar, - Material.PurpurSlab, - Material.PurpurStairs, - Material.QuartzBlock, - Material.QuartzBricks, - Material.QuartzPillar, - Material.QuartzSlab, - Material.QuartzStairs, - Material.RawCopperBlock, - Material.RawGoldBlock, - Material.RawIronBlock, - Material.RedConcrete, - Material.RedGlazedTerracotta, - Material.RedNetherBrickSlab, - Material.RedNetherBrickStairs, - Material.RedNetherBrickWall, - Material.RedNetherBricks, - Material.RedSandstone, - Material.RedSandstoneSlab, - Material.RedSandstoneStairs, - Material.RedSandstoneWall, - Material.RedTerracotta, - Material.RedstoneBlock, - Material.RedstoneOre, - Material.RepeatingCommandBlock, - Material.ResinBrickSlab, - Material.ResinBrickStairs, - Material.ResinBrickWall, - Material.ResinBricks, - Material.RespawnAnchor, - Material.Sandstone, - Material.SandstoneSlab, - Material.SandstoneStairs, - Material.SandstoneWall, - Material.Smoker, - Material.SmoothBasalt, - Material.SmoothQuartz, - Material.SmoothQuartzSlab, - Material.SmoothQuartzStairs, - Material.SmoothRedSandstone, - Material.SmoothRedSandstoneSlab, - Material.SmoothRedSandstoneStairs, - Material.SmoothSandstone, - Material.SmoothSandstoneSlab, - Material.SmoothSandstoneStairs, - Material.SmoothStone, - Material.SmoothStoneSlab, - Material.Snow, - Material.SnowBlock, - Material.Spawner, - Material.Stone, - Material.StoneBrickSlab, - Material.StoneBrickStairs, - Material.StoneBrickWall, - Material.StoneBricks, - Material.StoneSlab, - Material.StoneStairs, - Material.Stonecutter, - Material.StructureBlock, - Material.Terracotta, - Material.TubeCoralBlock, - Material.Tuff, - Material.TuffBrickSlab, - Material.TuffBrickStairs, - Material.TuffBrickWall, - Material.TuffBricks, - Material.TuffSlab, - Material.TuffStairs, - Material.TuffWall, - Material.WarpedNylium, - Material.WaterCauldron, - Material.WaxedChiseledCopper, - Material.WaxedCopperBlock, - Material.WaxedCopperBulb, - Material.WaxedCopperChest, - Material.WaxedCopperGrate, - Material.WaxedCopperTrapdoor, - Material.WaxedCutCopper, - Material.WaxedCutCopperSlab, - Material.WaxedCutCopperStairs, - Material.WaxedExposedChiseledCopper, - Material.WaxedExposedCopper, - Material.WaxedExposedCopperBulb, - Material.WaxedExposedCopperChest, - Material.WaxedExposedCopperGrate, - Material.WaxedExposedCopperTrapdoor, - Material.WaxedExposedCutCopper, - Material.WaxedExposedCutCopperSlab, - Material.WaxedExposedCutCopperStairs, - Material.WaxedExposedLightningRod, - Material.WaxedLightningRod, - Material.WaxedOxidizedChiseledCopper, - Material.WaxedOxidizedCopper, - Material.WaxedOxidizedCopperBulb, - Material.WaxedOxidizedCopperChest, - Material.WaxedOxidizedCopperGrate, - Material.WaxedOxidizedCopperTrapdoor, - Material.WaxedOxidizedCutCopper, - Material.WaxedOxidizedCutCopperSlab, - Material.WaxedOxidizedCutCopperStairs, - Material.WaxedOxidizedLightningRod, - Material.WaxedWeatheredChiseledCopper, - Material.WaxedWeatheredCopper, - Material.WaxedWeatheredCopperBulb, - Material.WaxedWeatheredCopperChest, - Material.WaxedWeatheredCopperGrate, - Material.WaxedWeatheredCopperTrapdoor, - Material.WaxedWeatheredCutCopper, - Material.WaxedWeatheredCutCopperSlab, - Material.WaxedWeatheredCutCopperStairs, - Material.WaxedWeatheredLightningRod, - Material.WeatheredChiseledCopper, - Material.WeatheredCopper, - Material.WeatheredCopperBulb, - Material.WeatheredCopperChest, - Material.WeatheredCopperGrate, - Material.WeatheredCopperTrapdoor, - Material.WeatheredCutCopper, - Material.WeatheredCutCopperSlab, - Material.WeatheredCutCopperStairs, - Material.WeatheredLightningRod, - Material.WhiteConcrete, - Material.WhiteGlazedTerracotta, - Material.WhiteTerracotta, - Material.YellowConcrete, - Material.YellowGlazedTerracotta, - Material.YellowTerracotta, - }.ToFrozenSet(); - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/BlockPalette.cs b/MinecraftClient/Mapping/BlockPalettes/BlockPalette.cs deleted file mode 100644 index 41d24caa7d..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/BlockPalette.cs +++ /dev/null @@ -1,79 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - public abstract class BlockPalette - { - /// - /// Get mapping dictionary. Must be overriden with proper implementation. - /// - /// Palette dictionary - protected abstract Dictionary GetDict(); - - /// - /// Get material from block ID or block state ID - /// - /// Block ID (up to MC 1.12) or block state (MC 1.13+) - /// Material corresponding to the specified ID - public Material FromId(int id) - { - Dictionary materials = GetDict(); - if (materials.ContainsKey(id)) - return materials[id]; - return Material.Air; - } - - /// - /// Get block-state properties for a modern block state ID. - /// - /// Raw block state ID. - /// Block-state property names and values, or an empty map when unavailable. - public IReadOnlyDictionary GetStateProperties(int stateId) - { - BlockStateDefinition[] definitions = GetStateDefinitions(); - int low = 0; - int high = definitions.Length - 1; - - while (low <= high) - { - int middle = low + ((high - low) / 2); - BlockStateDefinition definition = definitions[middle]; - if (stateId < definition.FirstStateId) - { - high = middle - 1; - } - else if (stateId > definition.LastStateId) - { - low = middle + 1; - } - else - { - return definition.GetProperties(stateId); - } - } - - return BlockStateDefinition.EmptyProperties; - } - - /// - /// Get compact block-state definitions sorted by their first state ID. - /// - protected virtual BlockStateDefinition[] GetStateDefinitions() - { - return Array.Empty(); - } - - /// - /// Returns TRUE if block ID uses old metadata encoding with ID and Meta inside one ushort - /// Only Palette112 should override this. - /// - public virtual bool IdHasMetadata - { - get - { - return false; - } - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/BlockPalette120.cs b/MinecraftClient/Mapping/BlockPalettes/BlockPalette120.cs deleted file mode 100644 index fc85d5a85b..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/BlockPalette120.cs +++ /dev/null @@ -1,5148 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - public class Palette120 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette120() - { - for (int i = 8707; i <= 8730; i++) - materials[i] = Material.AcaciaButton; - for (int i = 11873; i <= 11936; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 11521; i <= 11552; i++) - materials[i] = Material.AcaciaFence; - for (int i = 11265; i <= 11296; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 5026; i <= 5089; i++) - materials[i] = Material.AcaciaHangingSign; - for (int i = 349; i <= 376; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 142; i <= 144; i++) - materials[i] = Material.AcaciaLog; - materials[19] = Material.AcaciaPlanks; - for (int i = 5724; i <= 5725; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 33; i <= 34; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 4398; i <= 4429; i++) - materials[i] = Material.AcaciaSign; - for (int i = 11045; i <= 11050; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 9744; i <= 9823; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 6218; i <= 6281; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 5562; i <= 5569; i++) - materials[i] = Material.AcaciaWallHangingSign; - for (int i = 4786; i <= 4793; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 201; i <= 203; i++) - materials[i] = Material.AcaciaWood; - for (int i = 9180; i <= 9203; i++) - materials[i] = Material.ActivatorRail; - materials[0] = Material.Air; - materials[2079] = Material.Allium; - materials[20890] = Material.AmethystBlock; - for (int i = 20892; i <= 20903; i++) - materials[i] = Material.AmethystCluster; - materials[19307] = Material.AncientDebris; - materials[6] = Material.Andesite; - for (int i = 13995; i <= 14000; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 13621; i <= 13700; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 16611; i <= 16934; i++) - materials[i] = Material.AndesiteWall; - for (int i = 8967; i <= 8970; i++) - materials[i] = Material.Anvil; - for (int i = 6817; i <= 6820; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 6813; i <= 6816; i++) - materials[i] = Material.AttachedPumpkinStem; - materials[22369] = Material.Azalea; - for (int i = 461; i <= 488; i++) - materials[i] = Material.AzaleaLeaves; - materials[2080] = Material.AzureBluet; - for (int i = 12804; i <= 12815; i++) - materials[i] = Material.Bamboo; - for (int i = 159; i <= 161; i++) - materials[i] = Material.BambooBlock; - for (int i = 8803; i <= 8826; i++) - materials[i] = Material.BambooButton; - for (int i = 12129; i <= 12192; i++) - materials[i] = Material.BambooDoor; - for (int i = 11649; i <= 11680; i++) - materials[i] = Material.BambooFence; - for (int i = 11393; i <= 11424; i++) - materials[i] = Material.BambooFenceGate; - for (int i = 5474; i <= 5537; i++) - materials[i] = Material.BambooHangingSign; - materials[24] = Material.BambooMosaic; - for (int i = 11075; i <= 11080; i++) - materials[i] = Material.BambooMosaicSlab; - for (int i = 10144; i <= 10223; i++) - materials[i] = Material.BambooMosaicStairs; - materials[23] = Material.BambooPlanks; - for (int i = 5732; i <= 5733; i++) - materials[i] = Material.BambooPressurePlate; - materials[12803] = Material.BambooSapling; - for (int i = 4558; i <= 4589; i++) - materials[i] = Material.BambooSign; - for (int i = 11069; i <= 11074; i++) - materials[i] = Material.BambooSlab; - for (int i = 10064; i <= 10143; i++) - materials[i] = Material.BambooStairs; - for (int i = 6474; i <= 6537; i++) - materials[i] = Material.BambooTrapdoor; - for (int i = 5618; i <= 5625; i++) - materials[i] = Material.BambooWallHangingSign; - for (int i = 4826; i <= 4833; i++) - materials[i] = Material.BambooWallSign; - for (int i = 18267; i <= 18278; i++) - materials[i] = Material.Barrel; - materials[10225] = Material.Barrier; - for (int i = 5853; i <= 5855; i++) - materials[i] = Material.Basalt; - materials[7918] = Material.Beacon; - materials[79] = Material.Bedrock; - for (int i = 19256; i <= 19279; i++) - materials[i] = Material.BeeNest; - for (int i = 19280; i <= 19303; i++) - materials[i] = Material.Beehive; - for (int i = 12368; i <= 12371; i++) - materials[i] = Material.Beetroots; - for (int i = 18330; i <= 18361; i++) - materials[i] = Material.Bell; - for (int i = 22389; i <= 22420; i++) - materials[i] = Material.BigDripleaf; - for (int i = 22421; i <= 22428; i++) - materials[i] = Material.BigDripleafStem; - for (int i = 8659; i <= 8682; i++) - materials[i] = Material.BirchButton; - for (int i = 11745; i <= 11808; i++) - materials[i] = Material.BirchDoor; - for (int i = 11457; i <= 11488; i++) - materials[i] = Material.BirchFence; - for (int i = 11201; i <= 11232; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 4962; i <= 5025; i++) - materials[i] = Material.BirchHangingSign; - for (int i = 293; i <= 320; i++) - materials[i] = Material.BirchLeaves; - for (int i = 136; i <= 138; i++) - materials[i] = Material.BirchLog; - materials[17] = Material.BirchPlanks; - for (int i = 5720; i <= 5721; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 29; i <= 30; i++) - materials[i] = Material.BirchSapling; - for (int i = 4366; i <= 4397; i++) - materials[i] = Material.BirchSign; - for (int i = 11033; i <= 11038; i++) - materials[i] = Material.BirchSlab; - for (int i = 7746; i <= 7825; i++) - materials[i] = Material.BirchStairs; - for (int i = 6090; i <= 6153; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 5554; i <= 5561; i++) - materials[i] = Material.BirchWallHangingSign; - for (int i = 4778; i <= 4785; i++) - materials[i] = Material.BirchWallSign; - for (int i = 195; i <= 197; i++) - materials[i] = Material.BirchWood; - for (int i = 10858; i <= 10873; i++) - materials[i] = Material.BlackBanner; - for (int i = 1928; i <= 1943; i++) - materials[i] = Material.BlackBed; - for (int i = 20840; i <= 20855; i++) - materials[i] = Material.BlackCandle; - for (int i = 20888; i <= 20889; i++) - materials[i] = Material.BlackCandleCake; - materials[10602] = Material.BlackCarpet; - materials[12602] = Material.BlackConcrete; - materials[12618] = Material.BlackConcretePowder; - for (int i = 12583; i <= 12586; i++) - materials[i] = Material.BlackGlazedTerracotta; - for (int i = 12517; i <= 12522; i++) - materials[i] = Material.BlackShulkerBox; - materials[5961] = Material.BlackStainedGlass; - for (int i = 9712; i <= 9743; i++) - materials[i] = Material.BlackStainedGlassPane; - materials[9231] = Material.BlackTerracotta; - for (int i = 10934; i <= 10937; i++) - materials[i] = Material.BlackWallBanner; - materials[2062] = Material.BlackWool; - materials[19319] = Material.Blackstone; - for (int i = 19724; i <= 19729; i++) - materials[i] = Material.BlackstoneSlab; - for (int i = 19320; i <= 19399; i++) - materials[i] = Material.BlackstoneStairs; - for (int i = 19400; i <= 19723; i++) - materials[i] = Material.BlackstoneWall; - for (int i = 18287; i <= 18294; i++) - materials[i] = Material.BlastFurnace; - for (int i = 10794; i <= 10809; i++) - materials[i] = Material.BlueBanner; - for (int i = 1864; i <= 1879; i++) - materials[i] = Material.BlueBed; - for (int i = 20776; i <= 20791; i++) - materials[i] = Material.BlueCandle; - for (int i = 20880; i <= 20881; i++) - materials[i] = Material.BlueCandleCake; - materials[10598] = Material.BlueCarpet; - materials[12598] = Material.BlueConcrete; - materials[12614] = Material.BlueConcretePowder; - for (int i = 12567; i <= 12570; i++) - materials[i] = Material.BlueGlazedTerracotta; - materials[12800] = Material.BlueIce; - materials[2078] = Material.BlueOrchid; - for (int i = 12493; i <= 12498; i++) - materials[i] = Material.BlueShulkerBox; - materials[5957] = Material.BlueStainedGlass; - for (int i = 9584; i <= 9615; i++) - materials[i] = Material.BlueStainedGlassPane; - materials[9227] = Material.BlueTerracotta; - for (int i = 10918; i <= 10921; i++) - materials[i] = Material.BlueWallBanner; - materials[2058] = Material.BlueWool; - for (int i = 12405; i <= 12407; i++) - materials[i] = Material.BoneBlock; - materials[2096] = Material.Bookshelf; - for (int i = 12684; i <= 12685; i++) - materials[i] = Material.BrainCoral; - materials[12668] = Material.BrainCoralBlock; - for (int i = 12704; i <= 12705; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 12760; i <= 12767; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 7390; i <= 7397; i++) - materials[i] = Material.BrewingStand; - for (int i = 11117; i <= 11122; i++) - materials[i] = Material.BrickSlab; - for (int i = 7029; i <= 7108; i++) - materials[i] = Material.BrickStairs; - for (int i = 14019; i <= 14342; i++) - materials[i] = Material.BrickWall; - materials[2093] = Material.Bricks; - for (int i = 10810; i <= 10825; i++) - materials[i] = Material.BrownBanner; - for (int i = 1880; i <= 1895; i++) - materials[i] = Material.BrownBed; - for (int i = 20792; i <= 20807; i++) - materials[i] = Material.BrownCandle; - for (int i = 20882; i <= 20883; i++) - materials[i] = Material.BrownCandleCake; - materials[10599] = Material.BrownCarpet; - materials[12599] = Material.BrownConcrete; - materials[12615] = Material.BrownConcretePowder; - for (int i = 12571; i <= 12574; i++) - materials[i] = Material.BrownGlazedTerracotta; - materials[2089] = Material.BrownMushroom; - for (int i = 6550; i <= 6613; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 12499; i <= 12504; i++) - materials[i] = Material.BrownShulkerBox; - materials[5958] = Material.BrownStainedGlass; - for (int i = 9616; i <= 9647; i++) - materials[i] = Material.BrownStainedGlassPane; - materials[9228] = Material.BrownTerracotta; - for (int i = 10922; i <= 10925; i++) - materials[i] = Material.BrownWallBanner; - materials[2059] = Material.BrownWool; - for (int i = 12819; i <= 12820; i++) - materials[i] = Material.BubbleColumn; - for (int i = 12686; i <= 12687; i++) - materials[i] = Material.BubbleCoral; - materials[12669] = Material.BubbleCoralBlock; - for (int i = 12706; i <= 12707; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 12768; i <= 12775; i++) - materials[i] = Material.BubbleCoralWallFan; - materials[20891] = Material.BuddingAmethyst; - for (int i = 5782; i <= 5797; i++) - materials[i] = Material.Cactus; - for (int i = 5875; i <= 5881; i++) - materials[i] = Material.Cake; - materials[20941] = Material.Calcite; - for (int i = 21040; i <= 21423; i++) - materials[i] = Material.CalibratedSculkSensor; - for (int i = 18370; i <= 18401; i++) - materials[i] = Material.Campfire; - for (int i = 20584; i <= 20599; i++) - materials[i] = Material.Candle; - for (int i = 20856; i <= 20857; i++) - materials[i] = Material.CandleCake; - for (int i = 8595; i <= 8602; i++) - materials[i] = Material.Carrots; - materials[18295] = Material.CartographyTable; - for (int i = 5867; i <= 5870; i++) - materials[i] = Material.CarvedPumpkin; - materials[7398] = Material.Cauldron; - materials[12818] = Material.CaveAir; - for (int i = 22314; i <= 22365; i++) - materials[i] = Material.CaveVines; - for (int i = 22366; i <= 22367; i++) - materials[i] = Material.CaveVinesPlant; - for (int i = 6774; i <= 6779; i++) - materials[i] = Material.Chain; - for (int i = 12386; i <= 12397; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 8731; i <= 8754; i++) - materials[i] = Material.CherryButton; - for (int i = 11937; i <= 12000; i++) - materials[i] = Material.CherryDoor; - for (int i = 11553; i <= 11584; i++) - materials[i] = Material.CherryFence; - for (int i = 11297; i <= 11328; i++) - materials[i] = Material.CherryFenceGate; - for (int i = 5090; i <= 5153; i++) - materials[i] = Material.CherryHangingSign; - for (int i = 377; i <= 404; i++) - materials[i] = Material.CherryLeaves; - for (int i = 145; i <= 147; i++) - materials[i] = Material.CherryLog; - materials[20] = Material.CherryPlanks; - for (int i = 5726; i <= 5727; i++) - materials[i] = Material.CherryPressurePlate; - for (int i = 35; i <= 36; i++) - materials[i] = Material.CherrySapling; - for (int i = 4430; i <= 4461; i++) - materials[i] = Material.CherrySign; - for (int i = 11051; i <= 11056; i++) - materials[i] = Material.CherrySlab; - for (int i = 9824; i <= 9903; i++) - materials[i] = Material.CherryStairs; - for (int i = 6282; i <= 6345; i++) - materials[i] = Material.CherryTrapdoor; - for (int i = 5570; i <= 5577; i++) - materials[i] = Material.CherryWallHangingSign; - for (int i = 4794; i <= 4801; i++) - materials[i] = Material.CherryWallSign; - for (int i = 204; i <= 206; i++) - materials[i] = Material.CherryWood; - for (int i = 2954; i <= 2977; i++) - materials[i] = Material.Chest; - for (int i = 8971; i <= 8974; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 2097; i <= 2352; i++) - materials[i] = Material.ChiseledBookshelf; - materials[24096] = Material.ChiseledDeepslate; - materials[20581] = Material.ChiseledNetherBricks; - materials[19733] = Material.ChiseledPolishedBlackstone; - materials[9096] = Material.ChiseledQuartzBlock; - materials[10939] = Material.ChiseledRedSandstone; - materials[536] = Material.ChiseledSandstone; - materials[6541] = Material.ChiseledStoneBricks; - for (int i = 12263; i <= 12268; i++) - materials[i] = Material.ChorusFlower; - for (int i = 12199; i <= 12262; i++) - materials[i] = Material.ChorusPlant; - materials[5798] = Material.Clay; - materials[10604] = Material.CoalBlock; - materials[127] = Material.CoalOre; - materials[11] = Material.CoarseDirt; - materials[22452] = Material.CobbledDeepslate; - for (int i = 22533; i <= 22538; i++) - materials[i] = Material.CobbledDeepslateSlab; - for (int i = 22453; i <= 22532; i++) - materials[i] = Material.CobbledDeepslateStairs; - for (int i = 22539; i <= 22862; i++) - materials[i] = Material.CobbledDeepslateWall; - materials[14] = Material.Cobblestone; - for (int i = 11111; i <= 11116; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 4682; i <= 4761; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 7919; i <= 8242; i++) - materials[i] = Material.CobblestoneWall; - materials[2004] = Material.Cobweb; - for (int i = 7419; i <= 7430; i++) - materials[i] = Material.Cocoa; - for (int i = 7906; i <= 7917; i++) - materials[i] = Material.CommandBlock; - for (int i = 9035; i <= 9050; i++) - materials[i] = Material.Comparator; - for (int i = 19231; i <= 19239; i++) - materials[i] = Material.Composter; - for (int i = 12801; i <= 12802; i++) - materials[i] = Material.Conduit; - materials[21566] = Material.CopperBlock; - materials[21567] = Material.CopperOre; - materials[2086] = Material.Cornflower; - materials[24097] = Material.CrackedDeepslateBricks; - materials[24098] = Material.CrackedDeepslateTiles; - materials[20582] = Material.CrackedNetherBricks; - materials[19732] = Material.CrackedPolishedBlackstoneBricks; - materials[6540] = Material.CrackedStoneBricks; - materials[4277] = Material.CraftingTable; - for (int i = 8907; i <= 8922; i++) - materials[i] = Material.CreeperHead; - for (int i = 8923; i <= 8926; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 18959; i <= 18982; i++) - materials[i] = Material.CrimsonButton; - for (int i = 19007; i <= 19070; i++) - materials[i] = Material.CrimsonDoor; - for (int i = 18543; i <= 18574; i++) - materials[i] = Material.CrimsonFence; - for (int i = 18735; i <= 18766; i++) - materials[i] = Material.CrimsonFenceGate; - materials[18468] = Material.CrimsonFungus; - for (int i = 5282; i <= 5345; i++) - materials[i] = Material.CrimsonHangingSign; - for (int i = 18461; i <= 18463; i++) - materials[i] = Material.CrimsonHyphae; - materials[18467] = Material.CrimsonNylium; - materials[18525] = Material.CrimsonPlanks; - for (int i = 18539; i <= 18540; i++) - materials[i] = Material.CrimsonPressurePlate; - materials[18524] = Material.CrimsonRoots; - for (int i = 19135; i <= 19166; i++) - materials[i] = Material.CrimsonSign; - for (int i = 18527; i <= 18532; i++) - materials[i] = Material.CrimsonSlab; - for (int i = 18799; i <= 18878; i++) - materials[i] = Material.CrimsonStairs; - for (int i = 18455; i <= 18457; i++) - materials[i] = Material.CrimsonStem; - for (int i = 18607; i <= 18670; i++) - materials[i] = Material.CrimsonTrapdoor; - for (int i = 5602; i <= 5609; i++) - materials[i] = Material.CrimsonWallHangingSign; - for (int i = 19199; i <= 19206; i++) - materials[i] = Material.CrimsonWallSign; - materials[19308] = Material.CryingObsidian; - materials[21572] = Material.CutCopper; - for (int i = 21911; i <= 21916; i++) - materials[i] = Material.CutCopperSlab; - for (int i = 21813; i <= 21892; i++) - materials[i] = Material.CutCopperStairs; - materials[10940] = Material.CutRedSandstone; - for (int i = 11153; i <= 11158; i++) - materials[i] = Material.CutRedSandstoneSlab; - materials[537] = Material.CutSandstone; - for (int i = 11099; i <= 11104; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 10762; i <= 10777; i++) - materials[i] = Material.CyanBanner; - for (int i = 1832; i <= 1847; i++) - materials[i] = Material.CyanBed; - for (int i = 20744; i <= 20759; i++) - materials[i] = Material.CyanCandle; - for (int i = 20876; i <= 20877; i++) - materials[i] = Material.CyanCandleCake; - materials[10596] = Material.CyanCarpet; - materials[12596] = Material.CyanConcrete; - materials[12612] = Material.CyanConcretePowder; - for (int i = 12559; i <= 12562; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 12481; i <= 12486; i++) - materials[i] = Material.CyanShulkerBox; - materials[5955] = Material.CyanStainedGlass; - for (int i = 9520; i <= 9551; i++) - materials[i] = Material.CyanStainedGlassPane; - materials[9225] = Material.CyanTerracotta; - for (int i = 10910; i <= 10913; i++) - materials[i] = Material.CyanWallBanner; - materials[2056] = Material.CyanWool; - for (int i = 8975; i <= 8978; i++) - materials[i] = Material.DamagedAnvil; - materials[2075] = Material.Dandelion; - for (int i = 8755; i <= 8778; i++) - materials[i] = Material.DarkOakButton; - for (int i = 12001; i <= 12064; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 11585; i <= 11616; i++) - materials[i] = Material.DarkOakFence; - for (int i = 11329; i <= 11360; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 5218; i <= 5281; i++) - materials[i] = Material.DarkOakHangingSign; - for (int i = 405; i <= 432; i++) - materials[i] = Material.DarkOakLeaves; - for (int i = 148; i <= 150; i++) - materials[i] = Material.DarkOakLog; - materials[21] = Material.DarkOakPlanks; - for (int i = 5728; i <= 5729; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 37; i <= 38; i++) - materials[i] = Material.DarkOakSapling; - for (int i = 4494; i <= 4525; i++) - materials[i] = Material.DarkOakSign; - for (int i = 11057; i <= 11062; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 9904; i <= 9983; i++) - materials[i] = Material.DarkOakStairs; - for (int i = 6346; i <= 6409; i++) - materials[i] = Material.DarkOakTrapdoor; - for (int i = 5586; i <= 5593; i++) - materials[i] = Material.DarkOakWallHangingSign; - for (int i = 4810; i <= 4817; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 207; i <= 209; i++) - materials[i] = Material.DarkOakWood; - materials[10324] = Material.DarkPrismarine; - for (int i = 10577; i <= 10582; i++) - materials[i] = Material.DarkPrismarineSlab; - for (int i = 10485; i <= 10564; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 9051; i <= 9082; i++) - materials[i] = Material.DaylightDetector; - for (int i = 12674; i <= 12675; i++) - materials[i] = Material.DeadBrainCoral; - materials[12663] = Material.DeadBrainCoralBlock; - for (int i = 12694; i <= 12695; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 12720; i <= 12727; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 12676; i <= 12677; i++) - materials[i] = Material.DeadBubbleCoral; - materials[12664] = Material.DeadBubbleCoralBlock; - for (int i = 12696; i <= 12697; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 12728; i <= 12735; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - materials[2007] = Material.DeadBush; - for (int i = 12678; i <= 12679; i++) - materials[i] = Material.DeadFireCoral; - materials[12665] = Material.DeadFireCoralBlock; - for (int i = 12698; i <= 12699; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 12736; i <= 12743; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 12680; i <= 12681; i++) - materials[i] = Material.DeadHornCoral; - materials[12666] = Material.DeadHornCoralBlock; - for (int i = 12700; i <= 12701; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 12744; i <= 12751; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 12672; i <= 12673; i++) - materials[i] = Material.DeadTubeCoral; - materials[12662] = Material.DeadTubeCoralBlock; - for (int i = 12692; i <= 12693; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 12712; i <= 12719; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 24119; i <= 24134; i++) - materials[i] = Material.DecoratedPot; - for (int i = 22449; i <= 22451; i++) - materials[i] = Material.Deepslate; - for (int i = 23766; i <= 23771; i++) - materials[i] = Material.DeepslateBrickSlab; - for (int i = 23686; i <= 23765; i++) - materials[i] = Material.DeepslateBrickStairs; - for (int i = 23772; i <= 24095; i++) - materials[i] = Material.DeepslateBrickWall; - materials[23685] = Material.DeepslateBricks; - materials[128] = Material.DeepslateCoalOre; - materials[21568] = Material.DeepslateCopperOre; - materials[4275] = Material.DeepslateDiamondOre; - materials[7512] = Material.DeepslateEmeraldOre; - materials[124] = Material.DeepslateGoldOre; - materials[126] = Material.DeepslateIronOre; - materials[521] = Material.DeepslateLapisOre; - for (int i = 5736; i <= 5737; i++) - materials[i] = Material.DeepslateRedstoneOre; - for (int i = 23355; i <= 23360; i++) - materials[i] = Material.DeepslateTileSlab; - for (int i = 23275; i <= 23354; i++) - materials[i] = Material.DeepslateTileStairs; - for (int i = 23361; i <= 23684; i++) - materials[i] = Material.DeepslateTileWall; - materials[23274] = Material.DeepslateTiles; - for (int i = 1968; i <= 1991; i++) - materials[i] = Material.DetectorRail; - materials[4276] = Material.DiamondBlock; - materials[4274] = Material.DiamondOre; - materials[4] = Material.Diorite; - for (int i = 14013; i <= 14018; i++) - materials[i] = Material.DioriteSlab; - for (int i = 13861; i <= 13940; i++) - materials[i] = Material.DioriteStairs; - for (int i = 17907; i <= 18230; i++) - materials[i] = Material.DioriteWall; - materials[10] = Material.Dirt; - materials[12372] = Material.DirtPath; - for (int i = 523; i <= 534; i++) - materials[i] = Material.Dispenser; - materials[7416] = Material.DragonEgg; - for (int i = 8927; i <= 8942; i++) - materials[i] = Material.DragonHead; - for (int i = 8943; i <= 8946; i++) - materials[i] = Material.DragonWallHead; - materials[12646] = Material.DriedKelpBlock; - materials[22313] = Material.DripstoneBlock; - for (int i = 9204; i <= 9215; i++) - materials[i] = Material.Dropper; - materials[7665] = Material.EmeraldBlock; - materials[7511] = Material.EmeraldOre; - materials[7389] = Material.EnchantingTable; - materials[12373] = Material.EndGateway; - materials[7406] = Material.EndPortal; - for (int i = 7407; i <= 7414; i++) - materials[i] = Material.EndPortalFrame; - for (int i = 12193; i <= 12198; i++) - materials[i] = Material.EndRod; - materials[7415] = Material.EndStone; - for (int i = 13971; i <= 13976; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 13221; i <= 13300; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 17583; i <= 17906; i++) - materials[i] = Material.EndStoneBrickWall; - materials[12353] = Material.EndStoneBricks; - for (int i = 7513; i <= 7520; i++) - materials[i] = Material.EnderChest; - materials[21565] = Material.ExposedCopper; - materials[21571] = Material.ExposedCutCopper; - for (int i = 21905; i <= 21910; i++) - materials[i] = Material.ExposedCutCopperSlab; - for (int i = 21733; i <= 21812; i++) - materials[i] = Material.ExposedCutCopperStairs; - for (int i = 4286; i <= 4293; i++) - materials[i] = Material.Farmland; - materials[2006] = Material.Fern; - for (int i = 2360; i <= 2871; i++) - materials[i] = Material.Fire; - for (int i = 12688; i <= 12689; i++) - materials[i] = Material.FireCoral; - materials[12670] = Material.FireCoralBlock; - for (int i = 12708; i <= 12709; i++) - materials[i] = Material.FireCoralFan; - for (int i = 12776; i <= 12783; i++) - materials[i] = Material.FireCoralWallFan; - materials[18296] = Material.FletchingTable; - materials[8567] = Material.FlowerPot; - materials[22370] = Material.FloweringAzalea; - for (int i = 489; i <= 516; i++) - materials[i] = Material.FloweringAzaleaLeaves; - materials[24117] = Material.Frogspawn; - for (int i = 12398; i <= 12401; i++) - materials[i] = Material.FrostedIce; - for (int i = 4294; i <= 4301; i++) - materials[i] = Material.Furnace; - materials[20144] = Material.GildedBlackstone; - materials[519] = Material.Glass; - for (int i = 6780; i <= 6811; i++) - materials[i] = Material.GlassPane; - for (int i = 6869; i <= 6996; i++) - materials[i] = Material.GlowLichen; - materials[5864] = Material.Glowstone; - materials[2091] = Material.GoldBlock; - materials[123] = Material.GoldOre; - materials[2] = Material.Granite; - for (int i = 13989; i <= 13994; i++) - materials[i] = Material.GraniteSlab; - for (int i = 13541; i <= 13620; i++) - materials[i] = Material.GraniteStairs; - for (int i = 15315; i <= 15638; i++) - materials[i] = Material.GraniteWall; - materials[2005] = Material.ShortGrass; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - materials[118] = Material.Gravel; - for (int i = 10730; i <= 10745; i++) - materials[i] = Material.GrayBanner; - for (int i = 1800; i <= 1815; i++) - materials[i] = Material.GrayBed; - for (int i = 20712; i <= 20727; i++) - materials[i] = Material.GrayCandle; - for (int i = 20872; i <= 20873; i++) - materials[i] = Material.GrayCandleCake; - materials[10594] = Material.GrayCarpet; - materials[12594] = Material.GrayConcrete; - materials[12610] = Material.GrayConcretePowder; - for (int i = 12551; i <= 12554; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 12469; i <= 12474; i++) - materials[i] = Material.GrayShulkerBox; - materials[5953] = Material.GrayStainedGlass; - for (int i = 9456; i <= 9487; i++) - materials[i] = Material.GrayStainedGlassPane; - materials[9223] = Material.GrayTerracotta; - for (int i = 10902; i <= 10905; i++) - materials[i] = Material.GrayWallBanner; - materials[2054] = Material.GrayWool; - for (int i = 10826; i <= 10841; i++) - materials[i] = Material.GreenBanner; - for (int i = 1896; i <= 1911; i++) - materials[i] = Material.GreenBed; - for (int i = 20808; i <= 20823; i++) - materials[i] = Material.GreenCandle; - for (int i = 20884; i <= 20885; i++) - materials[i] = Material.GreenCandleCake; - materials[10600] = Material.GreenCarpet; - materials[12600] = Material.GreenConcrete; - materials[12616] = Material.GreenConcretePowder; - for (int i = 12575; i <= 12578; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 12505; i <= 12510; i++) - materials[i] = Material.GreenShulkerBox; - materials[5959] = Material.GreenStainedGlass; - for (int i = 9648; i <= 9679; i++) - materials[i] = Material.GreenStainedGlassPane; - materials[9229] = Material.GreenTerracotta; - for (int i = 10926; i <= 10929; i++) - materials[i] = Material.GreenWallBanner; - materials[2060] = Material.GreenWool; - for (int i = 18297; i <= 18308; i++) - materials[i] = Material.Grindstone; - for (int i = 22445; i <= 22446; i++) - materials[i] = Material.HangingRoots; - for (int i = 10584; i <= 10586; i++) - materials[i] = Material.HayBlock; - for (int i = 9019; i <= 9034; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - materials[19304] = Material.HoneyBlock; - materials[19305] = Material.HoneycombBlock; - for (int i = 9085; i <= 9094; i++) - materials[i] = Material.Hopper; - for (int i = 12690; i <= 12691; i++) - materials[i] = Material.HornCoral; - materials[12671] = Material.HornCoralBlock; - for (int i = 12710; i <= 12711; i++) - materials[i] = Material.HornCoralFan; - for (int i = 12784; i <= 12791; i++) - materials[i] = Material.HornCoralWallFan; - materials[5780] = Material.Ice; - materials[6549] = Material.InfestedChiseledStoneBricks; - materials[6545] = Material.InfestedCobblestone; - materials[6548] = Material.InfestedCrackedStoneBricks; - for (int i = 24099; i <= 24101; i++) - materials[i] = Material.InfestedDeepslate; - materials[6547] = Material.InfestedMossyStoneBricks; - materials[6544] = Material.InfestedStone; - materials[6546] = Material.InfestedStoneBricks; - for (int i = 6742; i <= 6773; i++) - materials[i] = Material.IronBars; - materials[2092] = Material.IronBlock; - for (int i = 5652; i <= 5715; i++) - materials[i] = Material.IronDoor; - materials[125] = Material.IronOre; - for (int i = 10258; i <= 10321; i++) - materials[i] = Material.IronTrapdoor; - for (int i = 5871; i <= 5874; i++) - materials[i] = Material.JackOLantern; - for (int i = 19219; i <= 19230; i++) - materials[i] = Material.Jigsaw; - for (int i = 5815; i <= 5816; i++) - materials[i] = Material.Jukebox; - for (int i = 8683; i <= 8706; i++) - materials[i] = Material.JungleButton; - for (int i = 11809; i <= 11872; i++) - materials[i] = Material.JungleDoor; - for (int i = 11489; i <= 11520; i++) - materials[i] = Material.JungleFence; - for (int i = 11233; i <= 11264; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 5154; i <= 5217; i++) - materials[i] = Material.JungleHangingSign; - for (int i = 321; i <= 348; i++) - materials[i] = Material.JungleLeaves; - for (int i = 139; i <= 141; i++) - materials[i] = Material.JungleLog; - materials[18] = Material.JunglePlanks; - for (int i = 5722; i <= 5723; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 31; i <= 32; i++) - materials[i] = Material.JungleSapling; - for (int i = 4462; i <= 4493; i++) - materials[i] = Material.JungleSign; - for (int i = 11039; i <= 11044; i++) - materials[i] = Material.JungleSlab; - for (int i = 7826; i <= 7905; i++) - materials[i] = Material.JungleStairs; - for (int i = 6154; i <= 6217; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 5578; i <= 5585; i++) - materials[i] = Material.JungleWallHangingSign; - for (int i = 4802; i <= 4809; i++) - materials[i] = Material.JungleWallSign; - for (int i = 198; i <= 200; i++) - materials[i] = Material.JungleWood; - for (int i = 12619; i <= 12644; i++) - materials[i] = Material.Kelp; - materials[12645] = Material.KelpPlant; - for (int i = 4654; i <= 4661; i++) - materials[i] = Material.Ladder; - for (int i = 18362; i <= 18365; i++) - materials[i] = Material.Lantern; - materials[522] = Material.LapisBlock; - materials[520] = Material.LapisOre; - for (int i = 20904; i <= 20915; i++) - materials[i] = Material.LargeAmethystBud; - for (int i = 10616; i <= 10617; i++) - materials[i] = Material.LargeFern; - for (int i = 96; i <= 111; i++) - materials[i] = Material.Lava; - materials[7402] = Material.LavaCauldron; - for (int i = 18309; i <= 18324; i++) - materials[i] = Material.Lectern; - for (int i = 5626; i <= 5649; i++) - materials[i] = Material.Lever; - for (int i = 10226; i <= 10257; i++) - materials[i] = Material.Light; - for (int i = 10666; i <= 10681; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 1736; i <= 1751; i++) - materials[i] = Material.LightBlueBed; - for (int i = 20648; i <= 20663; i++) - materials[i] = Material.LightBlueCandle; - for (int i = 20864; i <= 20865; i++) - materials[i] = Material.LightBlueCandleCake; - materials[10590] = Material.LightBlueCarpet; - materials[12590] = Material.LightBlueConcrete; - materials[12606] = Material.LightBlueConcretePowder; - for (int i = 12535; i <= 12538; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 12445; i <= 12450; i++) - materials[i] = Material.LightBlueShulkerBox; - materials[5949] = Material.LightBlueStainedGlass; - for (int i = 9328; i <= 9359; i++) - materials[i] = Material.LightBlueStainedGlassPane; - materials[9219] = Material.LightBlueTerracotta; - for (int i = 10886; i <= 10889; i++) - materials[i] = Material.LightBlueWallBanner; - materials[2050] = Material.LightBlueWool; - for (int i = 10746; i <= 10761; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 1816; i <= 1831; i++) - materials[i] = Material.LightGrayBed; - for (int i = 20728; i <= 20743; i++) - materials[i] = Material.LightGrayCandle; - for (int i = 20874; i <= 20875; i++) - materials[i] = Material.LightGrayCandleCake; - materials[10595] = Material.LightGrayCarpet; - materials[12595] = Material.LightGrayConcrete; - materials[12611] = Material.LightGrayConcretePowder; - for (int i = 12555; i <= 12558; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 12475; i <= 12480; i++) - materials[i] = Material.LightGrayShulkerBox; - materials[5954] = Material.LightGrayStainedGlass; - for (int i = 9488; i <= 9519; i++) - materials[i] = Material.LightGrayStainedGlassPane; - materials[9224] = Material.LightGrayTerracotta; - for (int i = 10906; i <= 10909; i++) - materials[i] = Material.LightGrayWallBanner; - materials[2055] = Material.LightGrayWool; - for (int i = 9003; i <= 9018; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 22269; i <= 22292; i++) - materials[i] = Material.LightningRod; - for (int i = 10608; i <= 10609; i++) - materials[i] = Material.Lilac; - materials[2088] = Material.LilyOfTheValley; - materials[7271] = Material.LilyPad; - for (int i = 10698; i <= 10713; i++) - materials[i] = Material.LimeBanner; - for (int i = 1768; i <= 1783; i++) - materials[i] = Material.LimeBed; - for (int i = 20680; i <= 20695; i++) - materials[i] = Material.LimeCandle; - for (int i = 20868; i <= 20869; i++) - materials[i] = Material.LimeCandleCake; - materials[10592] = Material.LimeCarpet; - materials[12592] = Material.LimeConcrete; - materials[12608] = Material.LimeConcretePowder; - for (int i = 12543; i <= 12546; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 12457; i <= 12462; i++) - materials[i] = Material.LimeShulkerBox; - materials[5951] = Material.LimeStainedGlass; - for (int i = 9392; i <= 9423; i++) - materials[i] = Material.LimeStainedGlassPane; - materials[9221] = Material.LimeTerracotta; - for (int i = 10894; i <= 10897; i++) - materials[i] = Material.LimeWallBanner; - materials[2052] = Material.LimeWool; - materials[19318] = Material.Lodestone; - for (int i = 18263; i <= 18266; i++) - materials[i] = Material.Loom; - for (int i = 10650; i <= 10665; i++) - materials[i] = Material.MagentaBanner; - for (int i = 1720; i <= 1735; i++) - materials[i] = Material.MagentaBed; - for (int i = 20632; i <= 20647; i++) - materials[i] = Material.MagentaCandle; - for (int i = 20862; i <= 20863; i++) - materials[i] = Material.MagentaCandleCake; - materials[10589] = Material.MagentaCarpet; - materials[12589] = Material.MagentaConcrete; - materials[12605] = Material.MagentaConcretePowder; - for (int i = 12531; i <= 12534; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 12439; i <= 12444; i++) - materials[i] = Material.MagentaShulkerBox; - materials[5948] = Material.MagentaStainedGlass; - for (int i = 9296; i <= 9327; i++) - materials[i] = Material.MagentaStainedGlassPane; - materials[9218] = Material.MagentaTerracotta; - for (int i = 10882; i <= 10885; i++) - materials[i] = Material.MagentaWallBanner; - materials[2049] = Material.MagentaWool; - materials[12402] = Material.MagmaBlock; - for (int i = 8779; i <= 8802; i++) - materials[i] = Material.MangroveButton; - for (int i = 12065; i <= 12128; i++) - materials[i] = Material.MangroveDoor; - for (int i = 11617; i <= 11648; i++) - materials[i] = Material.MangroveFence; - for (int i = 11361; i <= 11392; i++) - materials[i] = Material.MangroveFenceGate; - for (int i = 5410; i <= 5473; i++) - materials[i] = Material.MangroveHangingSign; - for (int i = 433; i <= 460; i++) - materials[i] = Material.MangroveLeaves; - for (int i = 151; i <= 153; i++) - materials[i] = Material.MangroveLog; - materials[22] = Material.MangrovePlanks; - for (int i = 5730; i <= 5731; i++) - materials[i] = Material.MangrovePressurePlate; - for (int i = 39; i <= 78; i++) - materials[i] = Material.MangrovePropagule; - for (int i = 154; i <= 155; i++) - materials[i] = Material.MangroveRoots; - for (int i = 4526; i <= 4557; i++) - materials[i] = Material.MangroveSign; - for (int i = 11063; i <= 11068; i++) - materials[i] = Material.MangroveSlab; - for (int i = 9984; i <= 10063; i++) - materials[i] = Material.MangroveStairs; - for (int i = 6410; i <= 6473; i++) - materials[i] = Material.MangroveTrapdoor; - for (int i = 5594; i <= 5601; i++) - materials[i] = Material.MangroveWallHangingSign; - for (int i = 4818; i <= 4825; i++) - materials[i] = Material.MangroveWallSign; - for (int i = 210; i <= 212; i++) - materials[i] = Material.MangroveWood; - for (int i = 20916; i <= 20927; i++) - materials[i] = Material.MediumAmethystBud; - materials[6812] = Material.Melon; - for (int i = 6829; i <= 6836; i++) - materials[i] = Material.MelonStem; - materials[22388] = Material.MossBlock; - materials[22371] = Material.MossCarpet; - materials[2353] = Material.MossyCobblestone; - for (int i = 13965; i <= 13970; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 13141; i <= 13220; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 8243; i <= 8566; i++) - materials[i] = Material.MossyCobblestoneWall; - for (int i = 13953; i <= 13958; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 12981; i <= 13060; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 14991; i <= 15314; i++) - materials[i] = Material.MossyStoneBrickWall; - materials[6539] = Material.MossyStoneBricks; - for (int i = 2063; i <= 2074; i++) - materials[i] = Material.MovingPiston; - materials[22448] = Material.Mud; - for (int i = 11129; i <= 11134; i++) - materials[i] = Material.MudBrickSlab; - for (int i = 7189; i <= 7268; i++) - materials[i] = Material.MudBrickStairs; - for (int i = 15963; i <= 16286; i++) - materials[i] = Material.MudBrickWall; - materials[6543] = Material.MudBricks; - for (int i = 156; i <= 158; i++) - materials[i] = Material.MuddyMangroveRoots; - for (int i = 6678; i <= 6741; i++) - materials[i] = Material.MushroomStem; - for (int i = 7269; i <= 7270; i++) - materials[i] = Material.Mycelium; - for (int i = 7273; i <= 7304; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 11135; i <= 11140; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 7305; i <= 7384; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 16287; i <= 16610; i++) - materials[i] = Material.NetherBrickWall; - materials[7272] = Material.NetherBricks; - materials[129] = Material.NetherGoldOre; - for (int i = 5865; i <= 5866; i++) - materials[i] = Material.NetherPortal; - materials[9084] = Material.NetherQuartzOre; - materials[18454] = Material.NetherSprouts; - for (int i = 7385; i <= 7388; i++) - materials[i] = Material.NetherWart; - materials[12403] = Material.NetherWartBlock; - materials[19306] = Material.NetheriteBlock; - materials[5850] = Material.Netherrack; - for (int i = 538; i <= 1687; i++) - materials[i] = Material.NoteBlock; - for (int i = 8611; i <= 8634; i++) - materials[i] = Material.OakButton; - for (int i = 4590; i <= 4653; i++) - materials[i] = Material.OakDoor; - for (int i = 5817; i <= 5848; i++) - materials[i] = Material.OakFence; - for (int i = 6997; i <= 7028; i++) - materials[i] = Material.OakFenceGate; - for (int i = 4834; i <= 4897; i++) - materials[i] = Material.OakHangingSign; - for (int i = 237; i <= 264; i++) - materials[i] = Material.OakLeaves; - for (int i = 130; i <= 132; i++) - materials[i] = Material.OakLog; - materials[15] = Material.OakPlanks; - for (int i = 5716; i <= 5717; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 25; i <= 26; i++) - materials[i] = Material.OakSapling; - for (int i = 4302; i <= 4333; i++) - materials[i] = Material.OakSign; - for (int i = 11021; i <= 11026; i++) - materials[i] = Material.OakSlab; - for (int i = 2874; i <= 2953; i++) - materials[i] = Material.OakStairs; - for (int i = 5962; i <= 6025; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 5538; i <= 5545; i++) - materials[i] = Material.OakWallHangingSign; - for (int i = 4762; i <= 4769; i++) - materials[i] = Material.OakWallSign; - for (int i = 189; i <= 191; i++) - materials[i] = Material.OakWood; - for (int i = 12409; i <= 12420; i++) - materials[i] = Material.Observer; - materials[2354] = Material.Obsidian; - for (int i = 24108; i <= 24110; i++) - materials[i] = Material.OchreFroglight; - for (int i = 10634; i <= 10649; i++) - materials[i] = Material.OrangeBanner; - for (int i = 1704; i <= 1719; i++) - materials[i] = Material.OrangeBed; - for (int i = 20616; i <= 20631; i++) - materials[i] = Material.OrangeCandle; - for (int i = 20860; i <= 20861; i++) - materials[i] = Material.OrangeCandleCake; - materials[10588] = Material.OrangeCarpet; - materials[12588] = Material.OrangeConcrete; - materials[12604] = Material.OrangeConcretePowder; - for (int i = 12527; i <= 12530; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 12433; i <= 12438; i++) - materials[i] = Material.OrangeShulkerBox; - materials[5947] = Material.OrangeStainedGlass; - for (int i = 9264; i <= 9295; i++) - materials[i] = Material.OrangeStainedGlassPane; - materials[9217] = Material.OrangeTerracotta; - materials[2082] = Material.OrangeTulip; - for (int i = 10878; i <= 10881; i++) - materials[i] = Material.OrangeWallBanner; - materials[2048] = Material.OrangeWool; - materials[2085] = Material.OxeyeDaisy; - materials[21563] = Material.OxidizedCopper; - materials[21569] = Material.OxidizedCutCopper; - for (int i = 21893; i <= 21898; i++) - materials[i] = Material.OxidizedCutCopperSlab; - for (int i = 21573; i <= 21652; i++) - materials[i] = Material.OxidizedCutCopperStairs; - materials[10605] = Material.PackedIce; - materials[6542] = Material.PackedMud; - for (int i = 24114; i <= 24116; i++) - materials[i] = Material.PearlescentFroglight; - for (int i = 10612; i <= 10613; i++) - materials[i] = Material.Peony; - for (int i = 11105; i <= 11110; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 8947; i <= 8962; i++) - materials[i] = Material.PiglinHead; - for (int i = 8963; i <= 8966; i++) - materials[i] = Material.PiglinWallHead; - for (int i = 10714; i <= 10729; i++) - materials[i] = Material.PinkBanner; - for (int i = 1784; i <= 1799; i++) - materials[i] = Material.PinkBed; - for (int i = 20696; i <= 20711; i++) - materials[i] = Material.PinkCandle; - for (int i = 20870; i <= 20871; i++) - materials[i] = Material.PinkCandleCake; - materials[10593] = Material.PinkCarpet; - materials[12593] = Material.PinkConcrete; - materials[12609] = Material.PinkConcretePowder; - for (int i = 12547; i <= 12550; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 22372; i <= 22387; i++) - materials[i] = Material.PinkPetals; - for (int i = 12463; i <= 12468; i++) - materials[i] = Material.PinkShulkerBox; - materials[5952] = Material.PinkStainedGlass; - for (int i = 9424; i <= 9455; i++) - materials[i] = Material.PinkStainedGlassPane; - materials[9222] = Material.PinkTerracotta; - materials[2084] = Material.PinkTulip; - for (int i = 10898; i <= 10901; i++) - materials[i] = Material.PinkWallBanner; - materials[2053] = Material.PinkWool; - for (int i = 2011; i <= 2022; i++) - materials[i] = Material.Piston; - for (int i = 2023; i <= 2046; i++) - materials[i] = Material.PistonHead; - for (int i = 12356; i <= 12365; i++) - materials[i] = Material.PitcherCrop; - for (int i = 12366; i <= 12367; i++) - materials[i] = Material.PitcherPlant; - for (int i = 8887; i <= 8902; i++) - materials[i] = Material.PlayerHead; - for (int i = 8903; i <= 8906; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - for (int i = 22293; i <= 22312; i++) - materials[i] = Material.PointedDripstone; - materials[7] = Material.PolishedAndesite; - for (int i = 14007; i <= 14012; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 13781; i <= 13860; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 5856; i <= 5858; i++) - materials[i] = Material.PolishedBasalt; - materials[19730] = Material.PolishedBlackstone; - for (int i = 19734; i <= 19739; i++) - materials[i] = Material.PolishedBlackstoneBrickSlab; - for (int i = 19740; i <= 19819; i++) - materials[i] = Material.PolishedBlackstoneBrickStairs; - for (int i = 19820; i <= 20143; i++) - materials[i] = Material.PolishedBlackstoneBrickWall; - materials[19731] = Material.PolishedBlackstoneBricks; - for (int i = 20233; i <= 20256; i++) - materials[i] = Material.PolishedBlackstoneButton; - for (int i = 20231; i <= 20232; i++) - materials[i] = Material.PolishedBlackstonePressurePlate; - for (int i = 20225; i <= 20230; i++) - materials[i] = Material.PolishedBlackstoneSlab; - for (int i = 20145; i <= 20224; i++) - materials[i] = Material.PolishedBlackstoneStairs; - for (int i = 20257; i <= 20580; i++) - materials[i] = Material.PolishedBlackstoneWall; - materials[22863] = Material.PolishedDeepslate; - for (int i = 22944; i <= 22949; i++) - materials[i] = Material.PolishedDeepslateSlab; - for (int i = 22864; i <= 22943; i++) - materials[i] = Material.PolishedDeepslateStairs; - for (int i = 22950; i <= 23273; i++) - materials[i] = Material.PolishedDeepslateWall; - materials[5] = Material.PolishedDiorite; - for (int i = 13959; i <= 13964; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 13061; i <= 13140; i++) - materials[i] = Material.PolishedDioriteStairs; - materials[3] = Material.PolishedGranite; - for (int i = 13941; i <= 13946; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 12821; i <= 12900; i++) - materials[i] = Material.PolishedGraniteStairs; - materials[2077] = Material.Poppy; - for (int i = 8603; i <= 8610; i++) - materials[i] = Material.Potatoes; - materials[8573] = Material.PottedAcaciaSapling; - materials[8581] = Material.PottedAllium; - materials[24106] = Material.PottedAzaleaBush; - materials[8582] = Material.PottedAzureBluet; - materials[12816] = Material.PottedBamboo; - materials[8571] = Material.PottedBirchSapling; - materials[8580] = Material.PottedBlueOrchid; - materials[8592] = Material.PottedBrownMushroom; - materials[8594] = Material.PottedCactus; - materials[8574] = Material.PottedCherrySapling; - materials[8588] = Material.PottedCornflower; - materials[19314] = Material.PottedCrimsonFungus; - materials[19316] = Material.PottedCrimsonRoots; - materials[8578] = Material.PottedDandelion; - materials[8575] = Material.PottedDarkOakSapling; - materials[8593] = Material.PottedDeadBush; - materials[8577] = Material.PottedFern; - materials[24107] = Material.PottedFloweringAzaleaBush; - materials[8572] = Material.PottedJungleSapling; - materials[8589] = Material.PottedLilyOfTheValley; - materials[8576] = Material.PottedMangrovePropagule; - materials[8569] = Material.PottedOakSapling; - materials[8584] = Material.PottedOrangeTulip; - materials[8587] = Material.PottedOxeyeDaisy; - materials[8586] = Material.PottedPinkTulip; - materials[8579] = Material.PottedPoppy; - materials[8591] = Material.PottedRedMushroom; - materials[8583] = Material.PottedRedTulip; - materials[8570] = Material.PottedSpruceSapling; - materials[8568] = Material.PottedTorchflower; - materials[19315] = Material.PottedWarpedFungus; - materials[19317] = Material.PottedWarpedRoots; - materials[8585] = Material.PottedWhiteTulip; - materials[8590] = Material.PottedWitherRose; - materials[20943] = Material.PowderSnow; - for (int i = 7403; i <= 7405; i++) - materials[i] = Material.PowderSnowCauldron; - for (int i = 1944; i <= 1967; i++) - materials[i] = Material.PoweredRail; - materials[10322] = Material.Prismarine; - for (int i = 10571; i <= 10576; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 10405; i <= 10484; i++) - materials[i] = Material.PrismarineBrickStairs; - materials[10323] = Material.PrismarineBricks; - for (int i = 10565; i <= 10570; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 10325; i <= 10404; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 14343; i <= 14666; i++) - materials[i] = Material.PrismarineWall; - materials[5849] = Material.Pumpkin; - for (int i = 6821; i <= 6828; i++) - materials[i] = Material.PumpkinStem; - for (int i = 10778; i <= 10793; i++) - materials[i] = Material.PurpleBanner; - for (int i = 1848; i <= 1863; i++) - materials[i] = Material.PurpleBed; - for (int i = 20760; i <= 20775; i++) - materials[i] = Material.PurpleCandle; - for (int i = 20878; i <= 20879; i++) - materials[i] = Material.PurpleCandleCake; - materials[10597] = Material.PurpleCarpet; - materials[12597] = Material.PurpleConcrete; - materials[12613] = Material.PurpleConcretePowder; - for (int i = 12563; i <= 12566; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 12487; i <= 12492; i++) - materials[i] = Material.PurpleShulkerBox; - materials[5956] = Material.PurpleStainedGlass; - for (int i = 9552; i <= 9583; i++) - materials[i] = Material.PurpleStainedGlassPane; - materials[9226] = Material.PurpleTerracotta; - for (int i = 10914; i <= 10917; i++) - materials[i] = Material.PurpleWallBanner; - materials[2057] = Material.PurpleWool; - materials[12269] = Material.PurpurBlock; - for (int i = 12270; i <= 12272; i++) - materials[i] = Material.PurpurPillar; - for (int i = 11159; i <= 11164; i++) - materials[i] = Material.PurpurSlab; - for (int i = 12273; i <= 12352; i++) - materials[i] = Material.PurpurStairs; - materials[9095] = Material.QuartzBlock; - materials[20583] = Material.QuartzBricks; - for (int i = 9097; i <= 9099; i++) - materials[i] = Material.QuartzPillar; - for (int i = 11141; i <= 11146; i++) - materials[i] = Material.QuartzSlab; - for (int i = 9100; i <= 9179; i++) - materials[i] = Material.QuartzStairs; - for (int i = 4662; i <= 4681; i++) - materials[i] = Material.Rail; - materials[24104] = Material.RawCopperBlock; - materials[24105] = Material.RawGoldBlock; - materials[24103] = Material.RawIronBlock; - for (int i = 10842; i <= 10857; i++) - materials[i] = Material.RedBanner; - for (int i = 1912; i <= 1927; i++) - materials[i] = Material.RedBed; - for (int i = 20824; i <= 20839; i++) - materials[i] = Material.RedCandle; - for (int i = 20886; i <= 20887; i++) - materials[i] = Material.RedCandleCake; - materials[10601] = Material.RedCarpet; - materials[12601] = Material.RedConcrete; - materials[12617] = Material.RedConcretePowder; - for (int i = 12579; i <= 12582; i++) - materials[i] = Material.RedGlazedTerracotta; - materials[2090] = Material.RedMushroom; - for (int i = 6614; i <= 6677; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 14001; i <= 14006; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 13701; i <= 13780; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 16935; i <= 17258; i++) - materials[i] = Material.RedNetherBrickWall; - materials[12404] = Material.RedNetherBricks; - materials[117] = Material.RedSand; - materials[10938] = Material.RedSandstone; - for (int i = 11147; i <= 11152; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 10941; i <= 11020; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 14667; i <= 14990; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 12511; i <= 12516; i++) - materials[i] = Material.RedShulkerBox; - materials[5960] = Material.RedStainedGlass; - for (int i = 9680; i <= 9711; i++) - materials[i] = Material.RedStainedGlassPane; - materials[9230] = Material.RedTerracotta; - materials[2081] = Material.RedTulip; - for (int i = 10930; i <= 10933; i++) - materials[i] = Material.RedWallBanner; - materials[2061] = Material.RedWool; - materials[9083] = Material.RedstoneBlock; - for (int i = 7417; i <= 7418; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 5734; i <= 5735; i++) - materials[i] = Material.RedstoneOre; - for (int i = 5738; i <= 5739; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 5740; i <= 5747; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 2978; i <= 4273; i++) - materials[i] = Material.RedstoneWire; - materials[24118] = Material.ReinforcedDeepslate; - for (int i = 5882; i <= 5945; i++) - materials[i] = Material.Repeater; - for (int i = 12374; i <= 12385; i++) - materials[i] = Material.RepeatingCommandBlock; - for (int i = 19309; i <= 19313; i++) - materials[i] = Material.RespawnAnchor; - materials[22447] = Material.RootedDirt; - for (int i = 10610; i <= 10611; i++) - materials[i] = Material.RoseBush; - materials[112] = Material.Sand; - materials[535] = Material.Sandstone; - for (int i = 11093; i <= 11098; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 7431; i <= 7510; i++) - materials[i] = Material.SandstoneStairs; - for (int i = 17259; i <= 17582; i++) - materials[i] = Material.SandstoneWall; - for (int i = 18231; i <= 18262; i++) - materials[i] = Material.Scaffolding; - materials[21424] = Material.Sculk; - for (int i = 21553; i <= 21554; i++) - materials[i] = Material.SculkCatalyst; - for (int i = 20944; i <= 21039; i++) - materials[i] = Material.SculkSensor; - for (int i = 21555; i <= 21562; i++) - materials[i] = Material.SculkShrieker; - for (int i = 21425; i <= 21552; i++) - materials[i] = Material.SculkVein; - materials[10583] = Material.SeaLantern; - for (int i = 12792; i <= 12799; i++) - materials[i] = Material.SeaPickle; - materials[2008] = Material.Seagrass; - materials[18469] = Material.Shroomlight; - for (int i = 12421; i <= 12426; i++) - materials[i] = Material.ShulkerBox; - for (int i = 8827; i <= 8842; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 8843; i <= 8846; i++) - materials[i] = Material.SkeletonWallSkull; - materials[10224] = Material.SlimeBlock; - for (int i = 20928; i <= 20939; i++) - materials[i] = Material.SmallAmethystBud; - for (int i = 22429; i <= 22444; i++) - materials[i] = Material.SmallDripleaf; - materials[18325] = Material.SmithingTable; - for (int i = 18279; i <= 18286; i++) - materials[i] = Material.Smoker; - materials[24102] = Material.SmoothBasalt; - materials[11167] = Material.SmoothQuartz; - for (int i = 13983; i <= 13988; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 13461; i <= 13540; i++) - materials[i] = Material.SmoothQuartzStairs; - materials[11168] = Material.SmoothRedSandstone; - for (int i = 13947; i <= 13952; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 12901; i <= 12980; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - materials[11166] = Material.SmoothSandstone; - for (int i = 13977; i <= 13982; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 13381; i <= 13460; i++) - materials[i] = Material.SmoothSandstoneStairs; - materials[11165] = Material.SmoothStone; - for (int i = 11087; i <= 11092; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 12659; i <= 12661; i++) - materials[i] = Material.SnifferEgg; - for (int i = 5772; i <= 5779; i++) - materials[i] = Material.Snow; - materials[5781] = Material.SnowBlock; - for (int i = 18402; i <= 18433; i++) - materials[i] = Material.SoulCampfire; - materials[2872] = Material.SoulFire; - for (int i = 18366; i <= 18369; i++) - materials[i] = Material.SoulLantern; - materials[5851] = Material.SoulSand; - materials[5852] = Material.SoulSoil; - materials[5859] = Material.SoulTorch; - for (int i = 5860; i <= 5863; i++) - materials[i] = Material.SoulWallTorch; - materials[2873] = Material.Spawner; - materials[517] = Material.Sponge; - materials[22368] = Material.SporeBlossom; - for (int i = 8635; i <= 8658; i++) - materials[i] = Material.SpruceButton; - for (int i = 11681; i <= 11744; i++) - materials[i] = Material.SpruceDoor; - for (int i = 11425; i <= 11456; i++) - materials[i] = Material.SpruceFence; - for (int i = 11169; i <= 11200; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 4898; i <= 4961; i++) - materials[i] = Material.SpruceHangingSign; - for (int i = 265; i <= 292; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 133; i <= 135; i++) - materials[i] = Material.SpruceLog; - materials[16] = Material.SprucePlanks; - for (int i = 5718; i <= 5719; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 27; i <= 28; i++) - materials[i] = Material.SpruceSapling; - for (int i = 4334; i <= 4365; i++) - materials[i] = Material.SpruceSign; - for (int i = 11027; i <= 11032; i++) - materials[i] = Material.SpruceSlab; - for (int i = 7666; i <= 7745; i++) - materials[i] = Material.SpruceStairs; - for (int i = 6026; i <= 6089; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 5546; i <= 5553; i++) - materials[i] = Material.SpruceWallHangingSign; - for (int i = 4770; i <= 4777; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 192; i <= 194; i++) - materials[i] = Material.SpruceWood; - for (int i = 1992; i <= 2003; i++) - materials[i] = Material.StickyPiston; - materials[1] = Material.Stone; - for (int i = 11123; i <= 11128; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 7109; i <= 7188; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 15639; i <= 15962; i++) - materials[i] = Material.StoneBrickWall; - materials[6538] = Material.StoneBricks; - for (int i = 5748; i <= 5771; i++) - materials[i] = Material.StoneButton; - for (int i = 5650; i <= 5651; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 11081; i <= 11086; i++) - materials[i] = Material.StoneSlab; - for (int i = 13301; i <= 13380; i++) - materials[i] = Material.StoneStairs; - for (int i = 18326; i <= 18329; i++) - materials[i] = Material.Stonecutter; - for (int i = 171; i <= 173; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 225; i <= 227; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 186; i <= 188; i++) - materials[i] = Material.StrippedBambooBlock; - for (int i = 165; i <= 167; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 219; i <= 221; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 174; i <= 176; i++) - materials[i] = Material.StrippedCherryLog; - for (int i = 228; i <= 230; i++) - materials[i] = Material.StrippedCherryWood; - for (int i = 18464; i <= 18466; i++) - materials[i] = Material.StrippedCrimsonHyphae; - for (int i = 18458; i <= 18460; i++) - materials[i] = Material.StrippedCrimsonStem; - for (int i = 177; i <= 179; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 231; i <= 233; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 168; i <= 170; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 222; i <= 224; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 183; i <= 185; i++) - materials[i] = Material.StrippedMangroveLog; - for (int i = 234; i <= 236; i++) - materials[i] = Material.StrippedMangroveWood; - for (int i = 180; i <= 182; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 213; i <= 215; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 162; i <= 164; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 216; i <= 218; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 18447; i <= 18449; i++) - materials[i] = Material.StrippedWarpedHyphae; - for (int i = 18441; i <= 18443; i++) - materials[i] = Material.StrippedWarpedStem; - for (int i = 19215; i <= 19218; i++) - materials[i] = Material.StructureBlock; - materials[12408] = Material.StructureVoid; - for (int i = 5799; i <= 5814; i++) - materials[i] = Material.SugarCane; - for (int i = 10606; i <= 10607; i++) - materials[i] = Material.Sunflower; - for (int i = 119; i <= 122; i++) - materials[i] = Material.SuspiciousGravel; - for (int i = 113; i <= 116; i++) - materials[i] = Material.SuspiciousSand; - for (int i = 18434; i <= 18437; i++) - materials[i] = Material.SweetBerryBush; - for (int i = 10614; i <= 10615; i++) - materials[i] = Material.TallGrass; - for (int i = 2009; i <= 2010; i++) - materials[i] = Material.TallSeagrass; - for (int i = 19240; i <= 19255; i++) - materials[i] = Material.Target; - materials[10603] = Material.Terracotta; - materials[20942] = Material.TintedGlass; - for (int i = 2094; i <= 2095; i++) - materials[i] = Material.Tnt; - materials[2355] = Material.Torch; - materials[2076] = Material.Torchflower; - for (int i = 12354; i <= 12355; i++) - materials[i] = Material.TorchflowerCrop; - for (int i = 8979; i <= 9002; i++) - materials[i] = Material.TrappedChest; - for (int i = 7537; i <= 7664; i++) - materials[i] = Material.Tripwire; - for (int i = 7521; i <= 7536; i++) - materials[i] = Material.TripwireHook; - for (int i = 12682; i <= 12683; i++) - materials[i] = Material.TubeCoral; - materials[12667] = Material.TubeCoralBlock; - for (int i = 12702; i <= 12703; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 12752; i <= 12759; i++) - materials[i] = Material.TubeCoralWallFan; - materials[20940] = Material.Tuff; - for (int i = 12647; i <= 12658; i++) - materials[i] = Material.TurtleEgg; - for (int i = 18497; i <= 18522; i++) - materials[i] = Material.TwistingVines; - materials[18523] = Material.TwistingVinesPlant; - for (int i = 24111; i <= 24113; i++) - materials[i] = Material.VerdantFroglight; - for (int i = 6837; i <= 6868; i++) - materials[i] = Material.Vine; - materials[12817] = Material.VoidAir; - for (int i = 2356; i <= 2359; i++) - materials[i] = Material.WallTorch; - for (int i = 18983; i <= 19006; i++) - materials[i] = Material.WarpedButton; - for (int i = 19071; i <= 19134; i++) - materials[i] = Material.WarpedDoor; - for (int i = 18575; i <= 18606; i++) - materials[i] = Material.WarpedFence; - for (int i = 18767; i <= 18798; i++) - materials[i] = Material.WarpedFenceGate; - materials[18451] = Material.WarpedFungus; - for (int i = 5346; i <= 5409; i++) - materials[i] = Material.WarpedHangingSign; - for (int i = 18444; i <= 18446; i++) - materials[i] = Material.WarpedHyphae; - materials[18450] = Material.WarpedNylium; - materials[18526] = Material.WarpedPlanks; - for (int i = 18541; i <= 18542; i++) - materials[i] = Material.WarpedPressurePlate; - materials[18453] = Material.WarpedRoots; - for (int i = 19167; i <= 19198; i++) - materials[i] = Material.WarpedSign; - for (int i = 18533; i <= 18538; i++) - materials[i] = Material.WarpedSlab; - for (int i = 18879; i <= 18958; i++) - materials[i] = Material.WarpedStairs; - for (int i = 18438; i <= 18440; i++) - materials[i] = Material.WarpedStem; - for (int i = 18671; i <= 18734; i++) - materials[i] = Material.WarpedTrapdoor; - for (int i = 5610; i <= 5617; i++) - materials[i] = Material.WarpedWallHangingSign; - for (int i = 19207; i <= 19214; i++) - materials[i] = Material.WarpedWallSign; - materials[18452] = Material.WarpedWartBlock; - for (int i = 80; i <= 95; i++) - materials[i] = Material.Water; - for (int i = 7399; i <= 7401; i++) - materials[i] = Material.WaterCauldron; - materials[21917] = Material.WaxedCopperBlock; - materials[21924] = Material.WaxedCutCopper; - for (int i = 22263; i <= 22268; i++) - materials[i] = Material.WaxedCutCopperSlab; - for (int i = 22165; i <= 22244; i++) - materials[i] = Material.WaxedCutCopperStairs; - materials[21919] = Material.WaxedExposedCopper; - materials[21923] = Material.WaxedExposedCutCopper; - for (int i = 22257; i <= 22262; i++) - materials[i] = Material.WaxedExposedCutCopperSlab; - for (int i = 22085; i <= 22164; i++) - materials[i] = Material.WaxedExposedCutCopperStairs; - materials[21920] = Material.WaxedOxidizedCopper; - materials[21921] = Material.WaxedOxidizedCutCopper; - for (int i = 22245; i <= 22250; i++) - materials[i] = Material.WaxedOxidizedCutCopperSlab; - for (int i = 21925; i <= 22004; i++) - materials[i] = Material.WaxedOxidizedCutCopperStairs; - materials[21918] = Material.WaxedWeatheredCopper; - materials[21922] = Material.WaxedWeatheredCutCopper; - for (int i = 22251; i <= 22256; i++) - materials[i] = Material.WaxedWeatheredCutCopperSlab; - for (int i = 22005; i <= 22084; i++) - materials[i] = Material.WaxedWeatheredCutCopperStairs; - materials[21564] = Material.WeatheredCopper; - materials[21570] = Material.WeatheredCutCopper; - for (int i = 21899; i <= 21904; i++) - materials[i] = Material.WeatheredCutCopperSlab; - for (int i = 21653; i <= 21732; i++) - materials[i] = Material.WeatheredCutCopperStairs; - for (int i = 18470; i <= 18495; i++) - materials[i] = Material.WeepingVines; - materials[18496] = Material.WeepingVinesPlant; - materials[518] = Material.WetSponge; - for (int i = 4278; i <= 4285; i++) - materials[i] = Material.Wheat; - for (int i = 10618; i <= 10633; i++) - materials[i] = Material.WhiteBanner; - for (int i = 1688; i <= 1703; i++) - materials[i] = Material.WhiteBed; - for (int i = 20600; i <= 20615; i++) - materials[i] = Material.WhiteCandle; - for (int i = 20858; i <= 20859; i++) - materials[i] = Material.WhiteCandleCake; - materials[10587] = Material.WhiteCarpet; - materials[12587] = Material.WhiteConcrete; - materials[12603] = Material.WhiteConcretePowder; - for (int i = 12523; i <= 12526; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 12427; i <= 12432; i++) - materials[i] = Material.WhiteShulkerBox; - materials[5946] = Material.WhiteStainedGlass; - for (int i = 9232; i <= 9263; i++) - materials[i] = Material.WhiteStainedGlassPane; - materials[9216] = Material.WhiteTerracotta; - materials[2083] = Material.WhiteTulip; - for (int i = 10874; i <= 10877; i++) - materials[i] = Material.WhiteWallBanner; - materials[2047] = Material.WhiteWool; - materials[2087] = Material.WitherRose; - for (int i = 8847; i <= 8862; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 8863; i <= 8866; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 10682; i <= 10697; i++) - materials[i] = Material.YellowBanner; - for (int i = 1752; i <= 1767; i++) - materials[i] = Material.YellowBed; - for (int i = 20664; i <= 20679; i++) - materials[i] = Material.YellowCandle; - for (int i = 20866; i <= 20867; i++) - materials[i] = Material.YellowCandleCake; - materials[10591] = Material.YellowCarpet; - materials[12591] = Material.YellowConcrete; - materials[12607] = Material.YellowConcretePowder; - for (int i = 12539; i <= 12542; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 12451; i <= 12456; i++) - materials[i] = Material.YellowShulkerBox; - materials[5950] = Material.YellowStainedGlass; - for (int i = 9360; i <= 9391; i++) - materials[i] = Material.YellowStainedGlassPane; - materials[9220] = Material.YellowTerracotta; - for (int i = 10890; i <= 10893; i++) - materials[i] = Material.YellowWallBanner; - materials[2051] = Material.YellowWool; - for (int i = 8867; i <= 8882; i++) - materials[i] = Material.ZombieHead; - for (int i = 8883; i <= 8886; i++) - materials[i] = Material.ZombieWallHead; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(25, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(27, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(29, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(31, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(33, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(35, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(37, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(39, 40, - [ - new("age", ["0", "1", "2", "3", "4"], 8), - new("hanging", ["true", "false"], 4), - new("stage", ["0", "1"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(80, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(96, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(113, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(119, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(130, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(133, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(136, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(139, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(142, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(145, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(148, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(151, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(154, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(156, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(159, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(162, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(165, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(168, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(171, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(174, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(177, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(180, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(183, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(186, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(189, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(192, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(195, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(198, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(201, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(204, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(207, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(210, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(213, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(216, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(219, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(222, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(225, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(228, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(231, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(234, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(237, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(265, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(293, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(321, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(349, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(377, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(405, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(433, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(461, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(489, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(523, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(538, 1150, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling", "zombie", "skeleton", "creeper", "dragon", "wither_skeleton", "piglin", "custom_head"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1688, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1704, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1720, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1736, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1752, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1768, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1784, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1800, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1816, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1832, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1848, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1864, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1880, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1896, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1912, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1928, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1944, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(1968, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(1992, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2009, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(2011, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2023, 24, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2) - ]), - new(2063, 12, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 2) - ]), - new(2094, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(2097, 256, - [ - new("facing", ["north", "south", "west", "east"], 64), - new("slot_0_occupied", ["true", "false"], 32), - new("slot_1_occupied", ["true", "false"], 16), - new("slot_2_occupied", ["true", "false"], 8), - new("slot_3_occupied", ["true", "false"], 4), - new("slot_4_occupied", ["true", "false"], 2), - new("slot_5_occupied", ["true", "false"], 1) - ]), - new(2356, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(2360, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(2874, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2954, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(2978, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(4278, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4286, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4294, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(4302, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4334, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4366, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4398, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4430, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4462, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4494, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4526, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4558, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4590, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4654, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4662, 20, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4682, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4762, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4770, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4778, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4786, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4794, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4802, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4810, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4818, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4826, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4834, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4898, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4962, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5026, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5090, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5154, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5218, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5282, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5346, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5410, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5474, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5538, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5546, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5554, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5562, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5570, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5578, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5586, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5594, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5602, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5610, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5618, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5626, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5650, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5652, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5716, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5718, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5720, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5722, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5724, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5726, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5728, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5730, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5732, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5734, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5736, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5738, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5740, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(5748, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5772, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(5782, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5799, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5815, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(5817, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5853, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(5856, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(5860, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5865, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(5867, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5871, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5875, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(5882, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5962, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6026, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6090, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6154, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6218, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6282, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6346, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6410, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6474, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6550, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6614, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6678, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6742, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6774, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6780, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6813, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6817, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6821, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(6829, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(6837, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6869, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6997, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7029, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7109, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7189, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7269, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(7273, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7305, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7385, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(7390, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(7399, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(7403, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(7407, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7417, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(7419, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7431, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7513, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7521, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7537, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7666, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7746, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7826, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7906, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(7919, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(8243, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(8595, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8603, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8611, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8635, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8659, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8683, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8707, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8731, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8755, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8779, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8803, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8827, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8843, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8847, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8863, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8867, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8883, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8887, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8903, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8907, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8923, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8927, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8943, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8947, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8963, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8967, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8971, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8975, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8979, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(9003, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9019, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9035, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9051, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9085, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(9097, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(9100, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9180, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9204, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(9232, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9264, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9296, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9328, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9360, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9392, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9424, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9456, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9488, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9520, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9552, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9584, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9616, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9648, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9680, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9712, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9744, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9824, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9904, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9984, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10064, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10144, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10226, 32, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10258, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10325, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10405, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10485, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10565, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10571, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10577, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10584, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(10606, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10608, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10610, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10612, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10614, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10616, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10618, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10634, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10650, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10666, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10682, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10698, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10714, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10730, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10746, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10762, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10778, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10794, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10810, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10826, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10842, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10858, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10874, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10878, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10882, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10886, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10890, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10894, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10898, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10902, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10906, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10910, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10914, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10918, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10922, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10926, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10930, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10934, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10941, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11021, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11027, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11033, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11039, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11045, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11051, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11057, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11063, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11069, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11075, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11081, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11087, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11093, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11099, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11105, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11111, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11117, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11123, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11129, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11135, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11141, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11147, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11153, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11159, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11169, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11201, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11233, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11265, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11297, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11329, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11361, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11393, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11425, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11457, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11489, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11521, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11553, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11585, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11617, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11649, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11681, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11745, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11809, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11873, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11937, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12001, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12065, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12129, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12193, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12199, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12263, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(12270, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(12273, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12354, 2, - [ - new("age", ["0", "1"], 1) - ]), - new(12356, 10, - [ - new("age", ["0", "1", "2", "3", "4"], 2), - new("half", ["upper", "lower"], 1) - ]), - new(12366, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12368, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(12374, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12386, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12398, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(12405, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(12409, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12421, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12427, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12433, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12439, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12445, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12451, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12457, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12463, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12469, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12475, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12481, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12487, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12493, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12499, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12505, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12511, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12517, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12523, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12527, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12531, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12535, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12539, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12543, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12547, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12551, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12555, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12559, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12563, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12567, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12571, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12575, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12579, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12583, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12619, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(12647, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(12659, 3, - [ - new("hatch", ["0", "1", "2"], 1) - ]), - new(12672, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12674, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12676, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12678, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12680, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12682, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12684, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12686, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12688, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12690, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12692, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12694, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12696, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12698, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12700, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12702, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12704, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12706, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12708, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12710, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12712, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12720, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12728, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12736, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12744, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12752, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12760, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12768, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12776, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12784, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12792, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12801, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12804, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(12819, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(12821, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12901, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12981, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13061, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13141, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13221, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13301, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13381, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13461, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13541, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13621, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13701, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13781, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13861, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13941, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13947, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13953, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13959, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13965, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13971, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13977, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13983, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13989, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13995, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14001, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14007, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14013, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14019, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14343, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14667, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14991, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15315, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15639, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15963, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16287, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16611, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16935, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17259, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17583, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17907, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18231, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18263, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(18267, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(18279, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(18287, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(18297, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(18309, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18326, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(18330, 32, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18362, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18366, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18370, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18402, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18434, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(18438, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18441, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18444, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18447, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18455, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18458, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18461, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18464, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18470, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(18497, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(18527, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18533, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18539, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(18541, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(18543, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(18575, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(18607, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18671, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18735, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18767, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18799, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18879, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18959, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18983, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19007, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19071, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19135, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19167, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19199, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19207, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19215, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(19219, 12, - [ - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 1) - ]), - new(19231, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(19240, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(19256, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(19280, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(19309, 5, - [ - new("charges", ["0", "1", "2", "3", "4"], 1) - ]), - new(19320, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19400, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19724, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19734, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19740, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19820, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20145, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20225, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20231, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(20233, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20257, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20584, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20600, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20616, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20632, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20648, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20664, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20680, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20696, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20712, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20728, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20744, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20760, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20776, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20792, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20808, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20824, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20840, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20856, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20858, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20860, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20862, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20864, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20866, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20868, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20870, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20872, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20874, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20876, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20878, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20880, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20882, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20884, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20886, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20888, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20892, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20904, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20916, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20928, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20944, 96, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21040, 384, - [ - new("facing", ["north", "south", "west", "east"], 96), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21425, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(21553, 2, - [ - new("bloom", ["true", "false"], 1) - ]), - new(21555, 8, - [ - new("can_summon", ["true", "false"], 4), - new("shrieking", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21573, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21653, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21733, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21813, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21893, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21899, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21905, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21911, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21925, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22005, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22085, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22165, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22245, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22251, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22257, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22263, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22269, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22293, 20, - [ - new("thickness", ["tip_merge", "tip", "frustum", "middle", "base"], 4), - new("vertical_direction", ["up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22314, 52, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 2), - new("berries", ["true", "false"], 1) - ]), - new(22366, 2, - [ - new("berries", ["true", "false"], 1) - ]), - new(22372, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("flower_amount", ["1", "2", "3", "4"], 1) - ]), - new(22389, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("tilt", ["none", "unstable", "partial", "full"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22421, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22429, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("half", ["upper", "lower"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22445, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(22449, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(22453, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22533, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22539, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22864, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22944, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22950, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(23275, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23355, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23361, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(23686, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23766, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23772, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(24099, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(24108, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(24111, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(24114, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(24119, 16, - [ - new("cracked", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/BlockPaletteGenerator.cs b/MinecraftClient/Mapping/BlockPalettes/BlockPaletteGenerator.cs deleted file mode 100644 index 11f7f5d26b..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/BlockPaletteGenerator.cs +++ /dev/null @@ -1,159 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Text; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - /// - /// Generator for MCC Block Palette mappings - /// - /// - /// Example for generating MaterialXXX.cs and PaletteXXX.cs from blocks.json: - /// - /// MinecraftClient.Mapping.BlockPalettes.BlockPaletteGenerator.JsonToClass( - /// @"C:\Path\To\blocks.json", - /// @"C:\Path\To\Output\PaletteXXX.cs", - /// @"C:\Path\To\Output\MaterialXXX.cs" - /// ); - /// - /// Place the above example inside the Main() method of Program.cs, adjust paths then compile and run. - /// Do not forget to remove the temporay call to JsonToClass() from Main() once you are done. - /// - public static class BlockPaletteGenerator - { - /// - /// Generate mapping from Minecraft blocks.json - /// - /// path to blocks.json - /// java -cp minecraft_server.jar net.minecraft.data.Main --reports - /// state => block name mappings - public static void GenerateBlockPalette(string blocksJsonFile) - { - BlockPaletteGenerator.JsonToClass(blocksJsonFile, "Palette", "Material"); - } - - /// - /// Generate mapping from Minecraft blocks.json - /// - /// path to blocks.json - /// output path for blocks.cs - /// output path for material.cs - /// java -cp minecraft_server.jar net.minecraft.data.Main --reports - /// state => block name mappings - public static void JsonToClass(string blocksJsonFile, string outputClass, string? outputEnum = null) - { - string outputPalettePath = Path.Combine(Path.GetDirectoryName(blocksJsonFile)!, outputClass + "XXX.cs"); - string outputEnumPath = Path.Combine(Path.GetDirectoryName(blocksJsonFile)!, outputEnum + "XXX.cs"); - - HashSet knownStates = new(); - Dictionary> blocks = new(); - - var palette = Json.ParseJson(File.ReadAllText(blocksJsonFile, Encoding.UTF8))!.AsObject(); - foreach (var item in palette) - { - //minecraft:item_name => ItemName - string blockType = String.Concat( - item.Key.Replace("minecraft:", "") - .Split('_') - .Select(word => char.ToUpper(word[0]) + word.Substring(1)) - ); - - if (blocks.ContainsKey(blockType)) - throw new InvalidDataException("Duplicate block type " + blockType + "!?"); - blocks[blockType] = new HashSet(); - - foreach (var state in item.Value!["states"]!.AsArray()) - { - int id = int.Parse(state!["id"].GetStringValue(), NumberStyles.Any, CultureInfo.CurrentCulture); - - if (knownStates.Contains(id)) - throw new InvalidDataException("Duplicate state id " + id + "!?"); - - knownStates.Add(id); - blocks[blockType].Add(id); - } - } - - HashSet materials = new(); - List outFile = new(); - outFile.AddRange(new[] { - "using System.Collections.Generic;", - "", - "namespace MinecraftClient.Mapping.BlockPalettes", - "{", - " public class PaletteXXX : BlockPalette", - " {", - " private static readonly Dictionary materials = new();", - "", - " static PaletteXXX()", - " {", - }); - - foreach (KeyValuePair> blockType in blocks) - { - if (blockType.Value.Count > 0) - { - List idList = blockType.Value.ToList(); - string materialName = blockType.Key; - materials.Add(materialName); - - if (idList.Count > 1) - { - idList.Sort(); - Queue idQueue = new(idList); - - while (idQueue.Count > 0) - { - int startValue = idQueue.Dequeue(); - int endValue = startValue; - while (idQueue.Count > 0 && idQueue.Peek() == endValue + 1) - endValue = idQueue.Dequeue(); - if (endValue > startValue) - { - outFile.Add(" for (int i = " + startValue + "; i <= " + endValue + "; i++)"); - outFile.Add(" materials[i] = Material." + materialName + ";"); - } - else outFile.Add(" materials[" + startValue + "] = Material." + materialName + ";"); - } - } - else outFile.Add(" materials[" + idList[0] + "] = Material." + materialName + ";"); - } - else throw new InvalidDataException("No state id for block type " + blockType.Key + "!?"); - } - - outFile.AddRange(new[] { - " }", - "", - " protected override Dictionary GetDict()", - " {", - " return materials;", - " }", - " }", - "}" - }); - - File.WriteAllLines(outputPalettePath, outFile); - - if (outputEnum is not null) - { - outFile = new List(); - outFile.AddRange(new[] { - "namespace MinecraftClient.Mapping", - "{", - " public enum Material", - " {" - }); - foreach (string material in materials) - outFile.Add(" " + material + ","); - outFile.AddRange(new[] { - " }", - "}" - }); - File.WriteAllLines(outputEnumPath, outFile); - } - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/BlockStateDefinition.cs b/MinecraftClient/Mapping/BlockPalettes/BlockStateDefinition.cs deleted file mode 100644 index 2578f9aea8..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/BlockStateDefinition.cs +++ /dev/null @@ -1,71 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - /// - /// Compact description of the property combinations in a contiguous block-state range. - /// - public sealed class BlockStateDefinition - { - private static readonly IReadOnlyDictionary s_emptyProperties = - new ReadOnlyDictionary(new Dictionary()); - - private readonly BlockStatePropertyDefinition[] _properties; - public int FirstStateId { get; } - public int LastStateId { get; } - public static IReadOnlyDictionary EmptyProperties => s_emptyProperties; - - public BlockStateDefinition(int firstStateId, int stateCount, BlockStatePropertyDefinition[] properties) - { - ArgumentOutOfRangeException.ThrowIfNegative(firstStateId); - ArgumentOutOfRangeException.ThrowIfNegativeOrZero(stateCount); - ArgumentNullException.ThrowIfNull(properties); - - FirstStateId = firstStateId; - LastStateId = checked(firstStateId + stateCount - 1); - _properties = properties; - } - - public IReadOnlyDictionary GetProperties(int stateId) - { - if (stateId < FirstStateId || stateId > LastStateId) - return EmptyProperties; - - int offset = stateId - FirstStateId; - Dictionary result = new(_properties.Length, StringComparer.Ordinal); - for (int i = 0; i < _properties.Length; i++) - { - BlockStatePropertyDefinition property = _properties[i]; - int valueIndex = (offset / property.Stride) % property.Values.Length; - result[property.Name] = property.Values[valueIndex]; - } - - return result; - } - } - - /// - /// Property name and its values in Minecraft's block-state iteration order. - /// - public sealed class BlockStatePropertyDefinition - { - public string Name { get; } - public string[] Values { get; } - public int Stride { get; } - - public BlockStatePropertyDefinition(string name, string[] values, int stride) - { - ArgumentException.ThrowIfNullOrEmpty(name); - ArgumentNullException.ThrowIfNull(values); - if (values.Length == 0) - throw new ArgumentException("A block-state property must define at least one value.", nameof(values)); - ArgumentOutOfRangeException.ThrowIfNegativeOrZero(stride); - - Name = name; - Values = values; - Stride = stride; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette112.cs b/MinecraftClient/Mapping/BlockPalettes/Palette112.cs deleted file mode 100644 index 0a9aa9473d..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette112.cs +++ /dev/null @@ -1,202 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - /// - /// Defines mappings for pre-1.13 block IDs to post-1.13 Materials - /// Some block Ids could map to different blocks depending on BlockMeta, here we assumed BlockMeta = 0 - /// Some blocks previously had different IDs depending on state, they have been merged here - /// Comments correspond to changed material names since previous MCC versions - /// - public class Palette112 : BlockPalette - { - private static readonly Dictionary materials = new() - { - { 0, Material.Air }, - { 1, Material.Stone }, - { 2, Material.GrassBlock }, // Grass - { 3, Material.Dirt }, - { 4, Material.Cobblestone }, - { 5, Material.OakPlanks }, // Wood:0 - { 6, Material.OakSapling }, // Sapling:0 - { 7, Material.Bedrock }, - { 8, Material.Water }, // FlowingWater - { 9, Material.Water }, // StationaryWater - { 10, Material.Lava }, // FlowingLava - { 11, Material.Lava }, // StationaryLava - { 12, Material.Sand }, - { 13, Material.Gravel }, - { 14, Material.GoldOre }, - { 15, Material.IronOre }, - { 16, Material.CoalOre }, - { 17, Material.OakLog }, // Log:0 - { 18, Material.OakLeaves }, // Leaves:0 - { 19, Material.Sponge }, - { 20, Material.Glass }, - { 21, Material.LapisOre }, - { 22, Material.LapisBlock }, - { 23, Material.Dispenser }, - { 24, Material.Sandstone }, - { 25, Material.NoteBlock }, - { 26, Material.RedBed }, // Bed:0 - { 27, Material.PoweredRail }, - { 28, Material.DetectorRail }, - { 29, Material.StickyPiston }, // PistonStickyBase - { 30, Material.Cobweb }, // Web - { 31, Material.TallGrass }, // LongGrass - { 32, Material.DeadBush }, - { 33, Material.Piston }, // PistonBase - { 34, Material.PistonHead }, // PistonExtension - { 35, Material.WhiteWool }, // Wool:0 - { 36, Material.MovingPiston }, // PistonMovingPiece - { 37, Material.Dandelion }, // YellowFlower - { 38, Material.Poppy }, // RedRose - { 39, Material.BrownMushroom }, - { 40, Material.RedMushroom }, - { 41, Material.GoldBlock }, - { 42, Material.IronBlock }, - { 43, Material.StoneSlab }, // DoubleStep - { 44, Material.StoneSlab }, // Step - { 45, Material.Bricks }, // Brick - { 46, Material.Tnt }, - { 47, Material.Bookshelf }, - { 48, Material.MossyCobblestone }, - { 49, Material.Obsidian }, - { 50, Material.Torch }, - { 51, Material.Fire }, - { 52, Material.Spawner }, // MobSpawner - { 53, Material.OakStairs }, // WoodStairs:0 - { 54, Material.Chest }, - { 55, Material.RedstoneWire }, - { 56, Material.DiamondOre }, - { 57, Material.DiamondBlock }, - { 58, Material.CraftingTable }, // Workbench - { 59, Material.Wheat }, // Crops - { 60, Material.Farmland }, // Soil - { 61, Material.Furnace }, // Furnace - { 62, Material.Furnace }, // BurningFurnace - { 63, Material.OakWallSign }, // SignPost - { 64, Material.OakDoor }, // WoodenDoor:0 - { 65, Material.Ladder }, - { 66, Material.Rail }, // Rails - { 67, Material.CobblestoneStairs }, - { 68, Material.OakWallSign }, // WallSign - { 69, Material.Lever }, - { 70, Material.StonePressurePlate }, // StonePlate - { 71, Material.IronDoor }, // IronDoorBlock - { 72, Material.OakPressurePlate }, // WoodPlate:0 - { 73, Material.RedstoneOre }, // RedstoneOre - { 74, Material.RedstoneOre }, // GlowingRedstoneOre - { 75, Material.RedstoneTorch }, // RedstoneTorchOff - { 76, Material.RedstoneTorch }, // RedstoneTorchOn - { 77, Material.StoneButton }, - { 78, Material.Snow }, - { 79, Material.Ice }, - { 80, Material.SnowBlock }, - { 81, Material.Cactus }, - { 82, Material.Clay }, - { 83, Material.SugarCane }, // SugarCaneBlock - { 84, Material.Jukebox }, - { 85, Material.OakFence }, // Fence:0 - { 86, Material.Pumpkin }, - { 87, Material.Netherrack }, - { 88, Material.SoulSand }, - { 89, Material.Glowstone }, - { 90, Material.NetherPortal }, // Portal - { 91, Material.JackOLantern }, - { 92, Material.Cake }, // CakeBlock - { 93, Material.Repeater }, // DiodeBlockOff - { 94, Material.Repeater }, // DiodeBlockOn - { 95, Material.WhiteStainedGlass }, // StainedGlass:0 - { 96, Material.OakTrapdoor }, // TrapDoor - { 97, Material.InfestedStone }, // MonsterEggs:0 - { 98, Material.StoneBricks }, // SmoothBrick - { 99, Material.BrownMushroomBlock }, // HugeMushroom1 - { 100, Material.BrownMushroomBlock }, // HugeMushroom2 - { 101, Material.IronBars }, // IronFence - { 102, Material.GlassPane }, // ThinGlass - { 103, Material.Melon }, // MelonBlock - { 104, Material.PumpkinStem }, - { 105, Material.MelonStem }, - { 106, Material.Vine }, - { 107, Material.OakFenceGate }, // FenceGate:0 - { 108, Material.BrickStairs }, - { 109, Material.StoneBrickStairs }, // SmoothStairs - { 110, Material.Mycelium }, // Mycel - { 111, Material.LilyPad }, // WaterLily - { 112, Material.NetherBricks}, // NetherBrick - { 113, Material.NetherBrickFence }, // NetherFence - { 114, Material.NetherBrickStairs }, - { 115, Material.NetherWart }, // NetherWarts - { 116, Material.EnchantingTable }, // EnchantmentTable - { 117, Material.BrewingStand }, - { 118, Material.Cauldron }, - { 119, Material.EndPortal }, // EnderPortal - { 120, Material.EndPortalFrame }, // EnderPortalFrame - { 121, Material.EndStone }, // EnderStone - { 122, Material.DragonEgg }, - { 123, Material.RedstoneLamp }, // RedstoneLampOff - { 124, Material.RedstoneLamp }, // RedstoneLampOn - { 125, Material.OakSlab }, // WoodDoubleStep:0 - { 126, Material.OakSlab }, // WoodStep - { 127, Material.Cocoa }, - { 128, Material.SandstoneStairs }, - { 129, Material.EmeraldOre }, - { 130, Material.EnderChest }, - { 131, Material.TripwireHook }, - { 132, Material.Tripwire }, - { 133, Material.EmeraldBlock }, - { 134, Material.SpruceStairs }, // SpruceWoodStairs - { 135, Material.BirchStairs }, // BirchWoodStairs - { 136, Material.JungleStairs }, // JungleWoodStairs - { 137, Material.CommandBlock }, // Command - { 138, Material.Beacon }, - { 139, Material.CobblestoneWall }, // CobbleWall - { 140, Material.FlowerPot }, - { 141, Material.Carrots }, // Carrot - { 142, Material.Potatoes }, // Potato - { 143, Material.OakButton }, // WoodButton - { 144, Material.SkeletonSkull }, // Skull:0 - { 145, Material.Anvil }, - { 146, Material.TrappedChest }, - { 147, Material.LightWeightedPressurePlate }, // GoldPlate - { 148, Material.HeavyWeightedPressurePlate }, // IronPlate - { 149, Material.Comparator }, // RedstoneComparatorOff - { 150, Material.Comparator }, // RedstoneComparatorOn - { 151, Material.DaylightDetector }, - { 152, Material.RedstoneBlock }, - { 153, Material.QuartzBlock }, // QuartzOre - { 154, Material.Hopper }, - { 155, Material.QuartzBlock }, - { 156, Material.QuartzStairs }, - { 157, Material.ActivatorRail }, - { 158, Material.Dropper }, - { 159, Material.WhiteConcrete }, // StainedClay:0 - { 160, Material.WhiteStainedGlassPane }, // StainedGlassPane:0 - { 161, Material.OakLeaves }, // Leaves2:0 - { 162, Material.OakLog }, // Log2:0 - { 163, Material.AcaciaStairs }, - { 164, Material.DarkOakStairs }, - { 170, Material.HayBlock }, - { 171, Material.WhiteCarpet }, // Carpet:0 - { 172, Material.WhiteConcrete }, // HardClay - { 173, Material.CoalBlock }, - { 174, Material.PackedIce }, - { 175, Material.TallGrass }, // DoublePlant - { 207, Material.Beetroots }, // BeetrootBlock - }; - - protected override Dictionary GetDict() - { - return materials; - } - - public override bool IdHasMetadata - { - get - { - return true; - } - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette113.cs b/MinecraftClient/Mapping/BlockPalettes/Palette113.cs deleted file mode 100644 index f70b239318..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette113.cs +++ /dev/null @@ -1,2779 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - /// - /// Defines mappings for Minecraft 1.13. - /// Automatically generated using BlockPaletteGenerator.cs - /// - public class Palette113 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette113() - { - materials[0] = Material.Air; - materials[1] = Material.Stone; - materials[2] = Material.Granite; - materials[3] = Material.PolishedGranite; - materials[4] = Material.Diorite; - materials[5] = Material.PolishedDiorite; - materials[6] = Material.Andesite; - materials[7] = Material.PolishedAndesite; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - materials[10] = Material.Dirt; - materials[11] = Material.CoarseDirt; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - materials[14] = Material.Cobblestone; - materials[15] = Material.OakPlanks; - materials[16] = Material.SprucePlanks; - materials[17] = Material.BirchPlanks; - materials[18] = Material.JunglePlanks; - materials[19] = Material.AcaciaPlanks; - materials[20] = Material.DarkOakPlanks; - for (int i = 21; i <= 22; i++) - materials[i] = Material.OakSapling; - for (int i = 23; i <= 24; i++) - materials[i] = Material.SpruceSapling; - for (int i = 25; i <= 26; i++) - materials[i] = Material.BirchSapling; - for (int i = 27; i <= 28; i++) - materials[i] = Material.JungleSapling; - for (int i = 29; i <= 30; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 31; i <= 32; i++) - materials[i] = Material.DarkOakSapling; - materials[33] = Material.Bedrock; - for (int i = 34; i <= 49; i++) - materials[i] = Material.Water; - for (int i = 50; i <= 65; i++) - materials[i] = Material.Lava; - materials[66] = Material.Sand; - materials[67] = Material.RedSand; - materials[68] = Material.Gravel; - materials[69] = Material.GoldOre; - materials[70] = Material.IronOre; - materials[71] = Material.CoalOre; - for (int i = 72; i <= 74; i++) - materials[i] = Material.OakLog; - for (int i = 75; i <= 77; i++) - materials[i] = Material.SpruceLog; - for (int i = 78; i <= 80; i++) - materials[i] = Material.BirchLog; - for (int i = 81; i <= 83; i++) - materials[i] = Material.JungleLog; - for (int i = 84; i <= 86; i++) - materials[i] = Material.AcaciaLog; - for (int i = 87; i <= 89; i++) - materials[i] = Material.DarkOakLog; - for (int i = 90; i <= 92; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 93; i <= 95; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 96; i <= 98; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 99; i <= 101; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 102; i <= 104; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 105; i <= 107; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 108; i <= 110; i++) - materials[i] = Material.OakWood; - for (int i = 111; i <= 113; i++) - materials[i] = Material.SpruceWood; - for (int i = 114; i <= 116; i++) - materials[i] = Material.BirchWood; - for (int i = 117; i <= 119; i++) - materials[i] = Material.JungleWood; - for (int i = 120; i <= 122; i++) - materials[i] = Material.AcaciaWood; - for (int i = 123; i <= 125; i++) - materials[i] = Material.DarkOakWood; - for (int i = 126; i <= 128; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 129; i <= 131; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 132; i <= 134; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 135; i <= 137; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 138; i <= 140; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 141; i <= 143; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 144; i <= 157; i++) - materials[i] = Material.OakLeaves; - for (int i = 158; i <= 171; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 172; i <= 185; i++) - materials[i] = Material.BirchLeaves; - for (int i = 186; i <= 199; i++) - materials[i] = Material.JungleLeaves; - for (int i = 200; i <= 213; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 214; i <= 227; i++) - materials[i] = Material.DarkOakLeaves; - materials[228] = Material.Sponge; - materials[229] = Material.WetSponge; - materials[230] = Material.Glass; - materials[231] = Material.LapisOre; - materials[232] = Material.LapisBlock; - for (int i = 233; i <= 244; i++) - materials[i] = Material.Dispenser; - materials[245] = Material.Sandstone; - materials[246] = Material.ChiseledSandstone; - materials[247] = Material.CutSandstone; - for (int i = 248; i <= 747; i++) - materials[i] = Material.NoteBlock; - for (int i = 748; i <= 763; i++) - materials[i] = Material.WhiteBed; - for (int i = 764; i <= 779; i++) - materials[i] = Material.OrangeBed; - for (int i = 780; i <= 795; i++) - materials[i] = Material.MagentaBed; - for (int i = 796; i <= 811; i++) - materials[i] = Material.LightBlueBed; - for (int i = 812; i <= 827; i++) - materials[i] = Material.YellowBed; - for (int i = 828; i <= 843; i++) - materials[i] = Material.LimeBed; - for (int i = 844; i <= 859; i++) - materials[i] = Material.PinkBed; - for (int i = 860; i <= 875; i++) - materials[i] = Material.GrayBed; - for (int i = 876; i <= 891; i++) - materials[i] = Material.LightGrayBed; - for (int i = 892; i <= 907; i++) - materials[i] = Material.CyanBed; - for (int i = 908; i <= 923; i++) - materials[i] = Material.PurpleBed; - for (int i = 924; i <= 939; i++) - materials[i] = Material.BlueBed; - for (int i = 940; i <= 955; i++) - materials[i] = Material.BrownBed; - for (int i = 956; i <= 971; i++) - materials[i] = Material.GreenBed; - for (int i = 972; i <= 987; i++) - materials[i] = Material.RedBed; - for (int i = 988; i <= 1003; i++) - materials[i] = Material.BlackBed; - for (int i = 1004; i <= 1015; i++) - materials[i] = Material.PoweredRail; - for (int i = 1016; i <= 1027; i++) - materials[i] = Material.DetectorRail; - for (int i = 1028; i <= 1039; i++) - materials[i] = Material.StickyPiston; - materials[1040] = Material.Cobweb; - materials[1041] = Material.ShortGrass; - materials[1042] = Material.Fern; - materials[1043] = Material.DeadBush; - materials[1044] = Material.Seagrass; - for (int i = 1045; i <= 1046; i++) - materials[i] = Material.TallSeagrass; - for (int i = 1047; i <= 1058; i++) - materials[i] = Material.Piston; - for (int i = 1059; i <= 1082; i++) - materials[i] = Material.PistonHead; - materials[1083] = Material.WhiteWool; - materials[1084] = Material.OrangeWool; - materials[1085] = Material.MagentaWool; - materials[1086] = Material.LightBlueWool; - materials[1087] = Material.YellowWool; - materials[1088] = Material.LimeWool; - materials[1089] = Material.PinkWool; - materials[1090] = Material.GrayWool; - materials[1091] = Material.LightGrayWool; - materials[1092] = Material.CyanWool; - materials[1093] = Material.PurpleWool; - materials[1094] = Material.BlueWool; - materials[1095] = Material.BrownWool; - materials[1096] = Material.GreenWool; - materials[1097] = Material.RedWool; - materials[1098] = Material.BlackWool; - for (int i = 1099; i <= 1110; i++) - materials[i] = Material.MovingPiston; - materials[1111] = Material.Dandelion; - materials[1112] = Material.Poppy; - materials[1113] = Material.BlueOrchid; - materials[1114] = Material.Allium; - materials[1115] = Material.AzureBluet; - materials[1116] = Material.RedTulip; - materials[1117] = Material.OrangeTulip; - materials[1118] = Material.WhiteTulip; - materials[1119] = Material.PinkTulip; - materials[1120] = Material.OxeyeDaisy; - materials[1121] = Material.BrownMushroom; - materials[1122] = Material.RedMushroom; - materials[1123] = Material.GoldBlock; - materials[1124] = Material.IronBlock; - materials[1125] = Material.Bricks; - for (int i = 1126; i <= 1127; i++) - materials[i] = Material.Tnt; - materials[1128] = Material.Bookshelf; - materials[1129] = Material.MossyCobblestone; - materials[1130] = Material.Obsidian; - materials[1131] = Material.Torch; - for (int i = 1132; i <= 1135; i++) - materials[i] = Material.WallTorch; - for (int i = 1136; i <= 1647; i++) - materials[i] = Material.Fire; - materials[1648] = Material.Spawner; - for (int i = 1649; i <= 1728; i++) - materials[i] = Material.OakStairs; - for (int i = 1729; i <= 1752; i++) - materials[i] = Material.Chest; - for (int i = 1753; i <= 3048; i++) - materials[i] = Material.RedstoneWire; - materials[3049] = Material.DiamondOre; - materials[3050] = Material.DiamondBlock; - materials[3051] = Material.CraftingTable; - for (int i = 3052; i <= 3059; i++) - materials[i] = Material.Wheat; - for (int i = 3060; i <= 3067; i++) - materials[i] = Material.Farmland; - for (int i = 3068; i <= 3075; i++) - materials[i] = Material.Furnace; - for (int i = 3076; i <= 3107; i++) - materials[i] = Material.OakSign; - for (int i = 3108; i <= 3171; i++) - materials[i] = Material.OakDoor; - for (int i = 3172; i <= 3179; i++) - materials[i] = Material.Ladder; - for (int i = 3180; i <= 3189; i++) - materials[i] = Material.Rail; - for (int i = 3190; i <= 3269; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 3270; i <= 3277; i++) - materials[i] = Material.OakWallSign; - for (int i = 3278; i <= 3301; i++) - materials[i] = Material.Lever; - for (int i = 3302; i <= 3303; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 3304; i <= 3367; i++) - materials[i] = Material.IronDoor; - for (int i = 3368; i <= 3369; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 3370; i <= 3371; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 3372; i <= 3373; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 3374; i <= 3375; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 3376; i <= 3377; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 3378; i <= 3379; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 3380; i <= 3381; i++) - materials[i] = Material.RedstoneOre; - for (int i = 3382; i <= 3383; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 3384; i <= 3391; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 3392; i <= 3415; i++) - materials[i] = Material.StoneButton; - for (int i = 3416; i <= 3423; i++) - materials[i] = Material.Snow; - materials[3424] = Material.Ice; - materials[3425] = Material.SnowBlock; - for (int i = 3426; i <= 3441; i++) - materials[i] = Material.Cactus; - materials[3442] = Material.Clay; - for (int i = 3443; i <= 3458; i++) - materials[i] = Material.SugarCane; - for (int i = 3459; i <= 3460; i++) - materials[i] = Material.Jukebox; - for (int i = 3461; i <= 3492; i++) - materials[i] = Material.OakFence; - materials[3493] = Material.Pumpkin; - materials[3494] = Material.Netherrack; - materials[3495] = Material.SoulSand; - materials[3496] = Material.Glowstone; - for (int i = 3497; i <= 3498; i++) - materials[i] = Material.NetherPortal; - for (int i = 3499; i <= 3502; i++) - materials[i] = Material.CarvedPumpkin; - for (int i = 3503; i <= 3506; i++) - materials[i] = Material.JackOLantern; - for (int i = 3507; i <= 3513; i++) - materials[i] = Material.Cake; - for (int i = 3514; i <= 3577; i++) - materials[i] = Material.Repeater; - materials[3578] = Material.WhiteStainedGlass; - materials[3579] = Material.OrangeStainedGlass; - materials[3580] = Material.MagentaStainedGlass; - materials[3581] = Material.LightBlueStainedGlass; - materials[3582] = Material.YellowStainedGlass; - materials[3583] = Material.LimeStainedGlass; - materials[3584] = Material.PinkStainedGlass; - materials[3585] = Material.GrayStainedGlass; - materials[3586] = Material.LightGrayStainedGlass; - materials[3587] = Material.CyanStainedGlass; - materials[3588] = Material.PurpleStainedGlass; - materials[3589] = Material.BlueStainedGlass; - materials[3590] = Material.BrownStainedGlass; - materials[3591] = Material.GreenStainedGlass; - materials[3592] = Material.RedStainedGlass; - materials[3593] = Material.BlackStainedGlass; - for (int i = 3594; i <= 3657; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 3658; i <= 3721; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 3722; i <= 3785; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 3786; i <= 3849; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 3850; i <= 3913; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 3914; i <= 3977; i++) - materials[i] = Material.DarkOakTrapdoor; - materials[3978] = Material.InfestedStone; - materials[3979] = Material.InfestedCobblestone; - materials[3980] = Material.InfestedStoneBricks; - materials[3981] = Material.InfestedMossyStoneBricks; - materials[3982] = Material.InfestedCrackedStoneBricks; - materials[3983] = Material.InfestedChiseledStoneBricks; - materials[3984] = Material.StoneBricks; - materials[3985] = Material.MossyStoneBricks; - materials[3986] = Material.CrackedStoneBricks; - materials[3987] = Material.ChiseledStoneBricks; - for (int i = 3988; i <= 4051; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 4052; i <= 4115; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 4116; i <= 4179; i++) - materials[i] = Material.MushroomStem; - for (int i = 4180; i <= 4211; i++) - materials[i] = Material.IronBars; - for (int i = 4212; i <= 4243; i++) - materials[i] = Material.GlassPane; - materials[4244] = Material.Melon; - for (int i = 4245; i <= 4248; i++) - materials[i] = Material.AttachedPumpkinStem; - for (int i = 4249; i <= 4252; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 4253; i <= 4260; i++) - materials[i] = Material.PumpkinStem; - for (int i = 4261; i <= 4268; i++) - materials[i] = Material.MelonStem; - for (int i = 4269; i <= 4300; i++) - materials[i] = Material.Vine; - for (int i = 4301; i <= 4332; i++) - materials[i] = Material.OakFenceGate; - for (int i = 4333; i <= 4412; i++) - materials[i] = Material.BrickStairs; - for (int i = 4413; i <= 4492; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 4493; i <= 4494; i++) - materials[i] = Material.Mycelium; - materials[4495] = Material.LilyPad; - materials[4496] = Material.NetherBricks; - for (int i = 4497; i <= 4528; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 4529; i <= 4608; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 4609; i <= 4612; i++) - materials[i] = Material.NetherWart; - materials[4613] = Material.EnchantingTable; - for (int i = 4614; i <= 4621; i++) - materials[i] = Material.BrewingStand; - for (int i = 4622; i <= 4625; i++) - materials[i] = Material.Cauldron; - materials[4626] = Material.EndPortal; - for (int i = 4627; i <= 4634; i++) - materials[i] = Material.EndPortalFrame; - materials[4635] = Material.EndStone; - materials[4636] = Material.DragonEgg; - for (int i = 4637; i <= 4638; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 4639; i <= 4650; i++) - materials[i] = Material.Cocoa; - for (int i = 4651; i <= 4730; i++) - materials[i] = Material.SandstoneStairs; - materials[4731] = Material.EmeraldOre; - for (int i = 4732; i <= 4739; i++) - materials[i] = Material.EnderChest; - for (int i = 4740; i <= 4755; i++) - materials[i] = Material.TripwireHook; - for (int i = 4756; i <= 4883; i++) - materials[i] = Material.Tripwire; - materials[4884] = Material.EmeraldBlock; - for (int i = 4885; i <= 4964; i++) - materials[i] = Material.SpruceStairs; - for (int i = 4965; i <= 5044; i++) - materials[i] = Material.BirchStairs; - for (int i = 5045; i <= 5124; i++) - materials[i] = Material.JungleStairs; - for (int i = 5125; i <= 5136; i++) - materials[i] = Material.CommandBlock; - materials[5137] = Material.Beacon; - for (int i = 5138; i <= 5201; i++) - materials[i] = Material.CobblestoneWall; - for (int i = 5202; i <= 5265; i++) - materials[i] = Material.MossyCobblestoneWall; - materials[5266] = Material.FlowerPot; - materials[5267] = Material.PottedOakSapling; - materials[5268] = Material.PottedSpruceSapling; - materials[5269] = Material.PottedBirchSapling; - materials[5270] = Material.PottedJungleSapling; - materials[5271] = Material.PottedAcaciaSapling; - materials[5272] = Material.PottedDarkOakSapling; - materials[5273] = Material.PottedFern; - materials[5274] = Material.PottedDandelion; - materials[5275] = Material.PottedPoppy; - materials[5276] = Material.PottedBlueOrchid; - materials[5277] = Material.PottedAllium; - materials[5278] = Material.PottedAzureBluet; - materials[5279] = Material.PottedRedTulip; - materials[5280] = Material.PottedOrangeTulip; - materials[5281] = Material.PottedWhiteTulip; - materials[5282] = Material.PottedPinkTulip; - materials[5283] = Material.PottedOxeyeDaisy; - materials[5284] = Material.PottedRedMushroom; - materials[5285] = Material.PottedBrownMushroom; - materials[5286] = Material.PottedDeadBush; - materials[5287] = Material.PottedCactus; - for (int i = 5288; i <= 5295; i++) - materials[i] = Material.Carrots; - for (int i = 5296; i <= 5303; i++) - materials[i] = Material.Potatoes; - for (int i = 5304; i <= 5327; i++) - materials[i] = Material.OakButton; - for (int i = 5328; i <= 5351; i++) - materials[i] = Material.SpruceButton; - for (int i = 5352; i <= 5375; i++) - materials[i] = Material.BirchButton; - for (int i = 5376; i <= 5399; i++) - materials[i] = Material.JungleButton; - for (int i = 5400; i <= 5423; i++) - materials[i] = Material.AcaciaButton; - for (int i = 5424; i <= 5447; i++) - materials[i] = Material.DarkOakButton; - for (int i = 5448; i <= 5451; i++) - materials[i] = Material.SkeletonWallSkull; - for (int i = 5452; i <= 5467; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 5468; i <= 5471; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 5472; i <= 5487; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 5488; i <= 5491; i++) - materials[i] = Material.ZombieWallHead; - for (int i = 5492; i <= 5507; i++) - materials[i] = Material.ZombieHead; - for (int i = 5508; i <= 5511; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 5512; i <= 5527; i++) - materials[i] = Material.PlayerHead; - for (int i = 5528; i <= 5531; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 5532; i <= 5547; i++) - materials[i] = Material.CreeperHead; - for (int i = 5548; i <= 5551; i++) - materials[i] = Material.DragonWallHead; - for (int i = 5552; i <= 5567; i++) - materials[i] = Material.DragonHead; - for (int i = 5568; i <= 5571; i++) - materials[i] = Material.Anvil; - for (int i = 5572; i <= 5575; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 5576; i <= 5579; i++) - materials[i] = Material.DamagedAnvil; - for (int i = 5580; i <= 5603; i++) - materials[i] = Material.TrappedChest; - for (int i = 5604; i <= 5619; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 5620; i <= 5635; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - for (int i = 5636; i <= 5651; i++) - materials[i] = Material.Comparator; - for (int i = 5652; i <= 5683; i++) - materials[i] = Material.DaylightDetector; - materials[5684] = Material.RedstoneBlock; - materials[5685] = Material.NetherQuartzOre; - for (int i = 5686; i <= 5695; i++) - materials[i] = Material.Hopper; - materials[5696] = Material.QuartzBlock; - materials[5697] = Material.ChiseledQuartzBlock; - for (int i = 5698; i <= 5700; i++) - materials[i] = Material.QuartzPillar; - for (int i = 5701; i <= 5780; i++) - materials[i] = Material.QuartzStairs; - for (int i = 5781; i <= 5792; i++) - materials[i] = Material.ActivatorRail; - for (int i = 5793; i <= 5804; i++) - materials[i] = Material.Dropper; - materials[5805] = Material.WhiteTerracotta; - materials[5806] = Material.OrangeTerracotta; - materials[5807] = Material.MagentaTerracotta; - materials[5808] = Material.LightBlueTerracotta; - materials[5809] = Material.YellowTerracotta; - materials[5810] = Material.LimeTerracotta; - materials[5811] = Material.PinkTerracotta; - materials[5812] = Material.GrayTerracotta; - materials[5813] = Material.LightGrayTerracotta; - materials[5814] = Material.CyanTerracotta; - materials[5815] = Material.PurpleTerracotta; - materials[5816] = Material.BlueTerracotta; - materials[5817] = Material.BrownTerracotta; - materials[5818] = Material.GreenTerracotta; - materials[5819] = Material.RedTerracotta; - materials[5820] = Material.BlackTerracotta; - for (int i = 5821; i <= 5852; i++) - materials[i] = Material.WhiteStainedGlassPane; - for (int i = 5853; i <= 5884; i++) - materials[i] = Material.OrangeStainedGlassPane; - for (int i = 5885; i <= 5916; i++) - materials[i] = Material.MagentaStainedGlassPane; - for (int i = 5917; i <= 5948; i++) - materials[i] = Material.LightBlueStainedGlassPane; - for (int i = 5949; i <= 5980; i++) - materials[i] = Material.YellowStainedGlassPane; - for (int i = 5981; i <= 6012; i++) - materials[i] = Material.LimeStainedGlassPane; - for (int i = 6013; i <= 6044; i++) - materials[i] = Material.PinkStainedGlassPane; - for (int i = 6045; i <= 6076; i++) - materials[i] = Material.GrayStainedGlassPane; - for (int i = 6077; i <= 6108; i++) - materials[i] = Material.LightGrayStainedGlassPane; - for (int i = 6109; i <= 6140; i++) - materials[i] = Material.CyanStainedGlassPane; - for (int i = 6141; i <= 6172; i++) - materials[i] = Material.PurpleStainedGlassPane; - for (int i = 6173; i <= 6204; i++) - materials[i] = Material.BlueStainedGlassPane; - for (int i = 6205; i <= 6236; i++) - materials[i] = Material.BrownStainedGlassPane; - for (int i = 6237; i <= 6268; i++) - materials[i] = Material.GreenStainedGlassPane; - for (int i = 6269; i <= 6300; i++) - materials[i] = Material.RedStainedGlassPane; - for (int i = 6301; i <= 6332; i++) - materials[i] = Material.BlackStainedGlassPane; - for (int i = 6333; i <= 6412; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 6413; i <= 6492; i++) - materials[i] = Material.DarkOakStairs; - materials[6493] = Material.SlimeBlock; - materials[6494] = Material.Barrier; - for (int i = 6495; i <= 6558; i++) - materials[i] = Material.IronTrapdoor; - materials[6559] = Material.Prismarine; - materials[6560] = Material.PrismarineBricks; - materials[6561] = Material.DarkPrismarine; - for (int i = 6562; i <= 6641; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 6642; i <= 6721; i++) - materials[i] = Material.PrismarineBrickStairs; - for (int i = 6722; i <= 6801; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 6802; i <= 6807; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 6808; i <= 6813; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 6814; i <= 6819; i++) - materials[i] = Material.DarkPrismarineSlab; - materials[6820] = Material.SeaLantern; - for (int i = 6821; i <= 6823; i++) - materials[i] = Material.HayBlock; - materials[6824] = Material.WhiteCarpet; - materials[6825] = Material.OrangeCarpet; - materials[6826] = Material.MagentaCarpet; - materials[6827] = Material.LightBlueCarpet; - materials[6828] = Material.YellowCarpet; - materials[6829] = Material.LimeCarpet; - materials[6830] = Material.PinkCarpet; - materials[6831] = Material.GrayCarpet; - materials[6832] = Material.LightGrayCarpet; - materials[6833] = Material.CyanCarpet; - materials[6834] = Material.PurpleCarpet; - materials[6835] = Material.BlueCarpet; - materials[6836] = Material.BrownCarpet; - materials[6837] = Material.GreenCarpet; - materials[6838] = Material.RedCarpet; - materials[6839] = Material.BlackCarpet; - materials[6840] = Material.Terracotta; - materials[6841] = Material.CoalBlock; - materials[6842] = Material.PackedIce; - for (int i = 6843; i <= 6844; i++) - materials[i] = Material.Sunflower; - for (int i = 6845; i <= 6846; i++) - materials[i] = Material.Lilac; - for (int i = 6847; i <= 6848; i++) - materials[i] = Material.RoseBush; - for (int i = 6849; i <= 6850; i++) - materials[i] = Material.Peony; - for (int i = 6851; i <= 6852; i++) - materials[i] = Material.TallGrass; - for (int i = 6853; i <= 6854; i++) - materials[i] = Material.LargeFern; - for (int i = 6855; i <= 6870; i++) - materials[i] = Material.WhiteBanner; - for (int i = 6871; i <= 6886; i++) - materials[i] = Material.OrangeBanner; - for (int i = 6887; i <= 6902; i++) - materials[i] = Material.MagentaBanner; - for (int i = 6903; i <= 6918; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 6919; i <= 6934; i++) - materials[i] = Material.YellowBanner; - for (int i = 6935; i <= 6950; i++) - materials[i] = Material.LimeBanner; - for (int i = 6951; i <= 6966; i++) - materials[i] = Material.PinkBanner; - for (int i = 6967; i <= 6982; i++) - materials[i] = Material.GrayBanner; - for (int i = 6983; i <= 6998; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 6999; i <= 7014; i++) - materials[i] = Material.CyanBanner; - for (int i = 7015; i <= 7030; i++) - materials[i] = Material.PurpleBanner; - for (int i = 7031; i <= 7046; i++) - materials[i] = Material.BlueBanner; - for (int i = 7047; i <= 7062; i++) - materials[i] = Material.BrownBanner; - for (int i = 7063; i <= 7078; i++) - materials[i] = Material.GreenBanner; - for (int i = 7079; i <= 7094; i++) - materials[i] = Material.RedBanner; - for (int i = 7095; i <= 7110; i++) - materials[i] = Material.BlackBanner; - for (int i = 7111; i <= 7114; i++) - materials[i] = Material.WhiteWallBanner; - for (int i = 7115; i <= 7118; i++) - materials[i] = Material.OrangeWallBanner; - for (int i = 7119; i <= 7122; i++) - materials[i] = Material.MagentaWallBanner; - for (int i = 7123; i <= 7126; i++) - materials[i] = Material.LightBlueWallBanner; - for (int i = 7127; i <= 7130; i++) - materials[i] = Material.YellowWallBanner; - for (int i = 7131; i <= 7134; i++) - materials[i] = Material.LimeWallBanner; - for (int i = 7135; i <= 7138; i++) - materials[i] = Material.PinkWallBanner; - for (int i = 7139; i <= 7142; i++) - materials[i] = Material.GrayWallBanner; - for (int i = 7143; i <= 7146; i++) - materials[i] = Material.LightGrayWallBanner; - for (int i = 7147; i <= 7150; i++) - materials[i] = Material.CyanWallBanner; - for (int i = 7151; i <= 7154; i++) - materials[i] = Material.PurpleWallBanner; - for (int i = 7155; i <= 7158; i++) - materials[i] = Material.BlueWallBanner; - for (int i = 7159; i <= 7162; i++) - materials[i] = Material.BrownWallBanner; - for (int i = 7163; i <= 7166; i++) - materials[i] = Material.GreenWallBanner; - for (int i = 7167; i <= 7170; i++) - materials[i] = Material.RedWallBanner; - for (int i = 7171; i <= 7174; i++) - materials[i] = Material.BlackWallBanner; - materials[7175] = Material.RedSandstone; - materials[7176] = Material.ChiseledRedSandstone; - materials[7177] = Material.CutRedSandstone; - for (int i = 7178; i <= 7257; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 7258; i <= 7263; i++) - materials[i] = Material.OakSlab; - for (int i = 7264; i <= 7269; i++) - materials[i] = Material.SpruceSlab; - for (int i = 7270; i <= 7275; i++) - materials[i] = Material.BirchSlab; - for (int i = 7276; i <= 7281; i++) - materials[i] = Material.JungleSlab; - for (int i = 7282; i <= 7287; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 7288; i <= 7293; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 7294; i <= 7299; i++) - materials[i] = Material.StoneSlab; - for (int i = 7300; i <= 7305; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 7306; i <= 7311; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 7312; i <= 7317; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 7318; i <= 7323; i++) - materials[i] = Material.BrickSlab; - for (int i = 7324; i <= 7329; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 7330; i <= 7335; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 7336; i <= 7341; i++) - materials[i] = Material.QuartzSlab; - for (int i = 7342; i <= 7347; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 7348; i <= 7353; i++) - materials[i] = Material.PurpurSlab; - materials[7354] = Material.SmoothStone; - materials[7355] = Material.SmoothSandstone; - materials[7356] = Material.SmoothQuartz; - materials[7357] = Material.SmoothRedSandstone; - for (int i = 7358; i <= 7389; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 7390; i <= 7421; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 7422; i <= 7453; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 7454; i <= 7485; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 7486; i <= 7517; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 7518; i <= 7549; i++) - materials[i] = Material.SpruceFence; - for (int i = 7550; i <= 7581; i++) - materials[i] = Material.BirchFence; - for (int i = 7582; i <= 7613; i++) - materials[i] = Material.JungleFence; - for (int i = 7614; i <= 7645; i++) - materials[i] = Material.AcaciaFence; - for (int i = 7646; i <= 7677; i++) - materials[i] = Material.DarkOakFence; - for (int i = 7678; i <= 7741; i++) - materials[i] = Material.SpruceDoor; - for (int i = 7742; i <= 7805; i++) - materials[i] = Material.BirchDoor; - for (int i = 7806; i <= 7869; i++) - materials[i] = Material.JungleDoor; - for (int i = 7870; i <= 7933; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 7934; i <= 7997; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 7998; i <= 8003; i++) - materials[i] = Material.EndRod; - for (int i = 8004; i <= 8067; i++) - materials[i] = Material.ChorusPlant; - for (int i = 8068; i <= 8073; i++) - materials[i] = Material.ChorusFlower; - materials[8074] = Material.PurpurBlock; - for (int i = 8075; i <= 8077; i++) - materials[i] = Material.PurpurPillar; - for (int i = 8078; i <= 8157; i++) - materials[i] = Material.PurpurStairs; - materials[8158] = Material.EndStoneBricks; - for (int i = 8159; i <= 8162; i++) - materials[i] = Material.Beetroots; - materials[8163] = Material.DirtPath; - materials[8164] = Material.EndGateway; - for (int i = 8165; i <= 8176; i++) - materials[i] = Material.RepeatingCommandBlock; - for (int i = 8177; i <= 8188; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 8189; i <= 8192; i++) - materials[i] = Material.FrostedIce; - materials[8193] = Material.MagmaBlock; - materials[8194] = Material.NetherWartBlock; - materials[8195] = Material.RedNetherBricks; - for (int i = 8196; i <= 8198; i++) - materials[i] = Material.BoneBlock; - materials[8199] = Material.StructureVoid; - for (int i = 8200; i <= 8211; i++) - materials[i] = Material.Observer; - for (int i = 8212; i <= 8217; i++) - materials[i] = Material.ShulkerBox; - for (int i = 8218; i <= 8223; i++) - materials[i] = Material.WhiteShulkerBox; - for (int i = 8224; i <= 8229; i++) - materials[i] = Material.OrangeShulkerBox; - for (int i = 8230; i <= 8235; i++) - materials[i] = Material.MagentaShulkerBox; - for (int i = 8236; i <= 8241; i++) - materials[i] = Material.LightBlueShulkerBox; - for (int i = 8242; i <= 8247; i++) - materials[i] = Material.YellowShulkerBox; - for (int i = 8248; i <= 8253; i++) - materials[i] = Material.LimeShulkerBox; - for (int i = 8254; i <= 8259; i++) - materials[i] = Material.PinkShulkerBox; - for (int i = 8260; i <= 8265; i++) - materials[i] = Material.GrayShulkerBox; - for (int i = 8266; i <= 8271; i++) - materials[i] = Material.LightGrayShulkerBox; - for (int i = 8272; i <= 8277; i++) - materials[i] = Material.CyanShulkerBox; - for (int i = 8278; i <= 8283; i++) - materials[i] = Material.PurpleShulkerBox; - for (int i = 8284; i <= 8289; i++) - materials[i] = Material.BlueShulkerBox; - for (int i = 8290; i <= 8295; i++) - materials[i] = Material.BrownShulkerBox; - for (int i = 8296; i <= 8301; i++) - materials[i] = Material.GreenShulkerBox; - for (int i = 8302; i <= 8307; i++) - materials[i] = Material.RedShulkerBox; - for (int i = 8308; i <= 8313; i++) - materials[i] = Material.BlackShulkerBox; - for (int i = 8314; i <= 8317; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 8318; i <= 8321; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 8322; i <= 8325; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 8326; i <= 8329; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 8330; i <= 8333; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 8334; i <= 8337; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 8338; i <= 8341; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 8342; i <= 8345; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 8346; i <= 8349; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 8350; i <= 8353; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 8354; i <= 8357; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 8358; i <= 8361; i++) - materials[i] = Material.BlueGlazedTerracotta; - for (int i = 8362; i <= 8365; i++) - materials[i] = Material.BrownGlazedTerracotta; - for (int i = 8366; i <= 8369; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 8370; i <= 8373; i++) - materials[i] = Material.RedGlazedTerracotta; - for (int i = 8374; i <= 8377; i++) - materials[i] = Material.BlackGlazedTerracotta; - materials[8378] = Material.WhiteConcrete; - materials[8379] = Material.OrangeConcrete; - materials[8380] = Material.MagentaConcrete; - materials[8381] = Material.LightBlueConcrete; - materials[8382] = Material.YellowConcrete; - materials[8383] = Material.LimeConcrete; - materials[8384] = Material.PinkConcrete; - materials[8385] = Material.GrayConcrete; - materials[8386] = Material.LightGrayConcrete; - materials[8387] = Material.CyanConcrete; - materials[8388] = Material.PurpleConcrete; - materials[8389] = Material.BlueConcrete; - materials[8390] = Material.BrownConcrete; - materials[8391] = Material.GreenConcrete; - materials[8392] = Material.RedConcrete; - materials[8393] = Material.BlackConcrete; - materials[8394] = Material.WhiteConcretePowder; - materials[8395] = Material.OrangeConcretePowder; - materials[8396] = Material.MagentaConcretePowder; - materials[8397] = Material.LightBlueConcretePowder; - materials[8398] = Material.YellowConcretePowder; - materials[8399] = Material.LimeConcretePowder; - materials[8400] = Material.PinkConcretePowder; - materials[8401] = Material.GrayConcretePowder; - materials[8402] = Material.LightGrayConcretePowder; - materials[8403] = Material.CyanConcretePowder; - materials[8404] = Material.PurpleConcretePowder; - materials[8405] = Material.BlueConcretePowder; - materials[8406] = Material.BrownConcretePowder; - materials[8407] = Material.GreenConcretePowder; - materials[8408] = Material.RedConcretePowder; - materials[8409] = Material.BlackConcretePowder; - for (int i = 8410; i <= 8435; i++) - materials[i] = Material.Kelp; - materials[8436] = Material.KelpPlant; - materials[8437] = Material.DriedKelpBlock; - for (int i = 8438; i <= 8449; i++) - materials[i] = Material.TurtleEgg; - materials[8450] = Material.DeadTubeCoralBlock; - materials[8451] = Material.DeadBrainCoralBlock; - materials[8452] = Material.DeadBubbleCoralBlock; - materials[8453] = Material.DeadFireCoralBlock; - materials[8454] = Material.DeadHornCoralBlock; - materials[8455] = Material.TubeCoralBlock; - materials[8456] = Material.BrainCoralBlock; - materials[8457] = Material.BubbleCoralBlock; - materials[8458] = Material.FireCoralBlock; - materials[8459] = Material.HornCoralBlock; - for (int i = 8460; i <= 8461; i++) - materials[i] = Material.DeadTubeCoral; - for (int i = 8462; i <= 8463; i++) - materials[i] = Material.DeadBrainCoral; - for (int i = 8464; i <= 8465; i++) - materials[i] = Material.DeadBubbleCoral; - for (int i = 8466; i <= 8467; i++) - materials[i] = Material.DeadFireCoral; - for (int i = 8468; i <= 8469; i++) - materials[i] = Material.DeadHornCoral; - for (int i = 8470; i <= 8471; i++) - materials[i] = Material.TubeCoral; - for (int i = 8472; i <= 8473; i++) - materials[i] = Material.BrainCoral; - for (int i = 8474; i <= 8475; i++) - materials[i] = Material.BubbleCoral; - for (int i = 8476; i <= 8477; i++) - materials[i] = Material.FireCoral; - for (int i = 8478; i <= 8479; i++) - materials[i] = Material.HornCoral; - for (int i = 8480; i <= 8487; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 8488; i <= 8495; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 8496; i <= 8503; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - for (int i = 8504; i <= 8511; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 8512; i <= 8519; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 8520; i <= 8527; i++) - materials[i] = Material.TubeCoralWallFan; - for (int i = 8528; i <= 8535; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 8536; i <= 8543; i++) - materials[i] = Material.BubbleCoralWallFan; - for (int i = 8544; i <= 8551; i++) - materials[i] = Material.FireCoralWallFan; - for (int i = 8552; i <= 8559; i++) - materials[i] = Material.HornCoralWallFan; - for (int i = 8560; i <= 8561; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 8562; i <= 8563; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 8564; i <= 8565; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 8566; i <= 8567; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 8568; i <= 8569; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 8570; i <= 8571; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 8572; i <= 8573; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 8574; i <= 8575; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 8576; i <= 8577; i++) - materials[i] = Material.FireCoralFan; - for (int i = 8578; i <= 8579; i++) - materials[i] = Material.HornCoralFan; - for (int i = 8580; i <= 8587; i++) - materials[i] = Material.SeaPickle; - materials[8588] = Material.BlueIce; - for (int i = 8589; i <= 8590; i++) - materials[i] = Material.Conduit; - materials[8591] = Material.VoidAir; - materials[8592] = Material.CaveAir; - for (int i = 8593; i <= 8594; i++) - materials[i] = Material.BubbleColumn; - for (int i = 8595; i <= 8598; i++) - materials[i] = Material.StructureBlock; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(21, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(23, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(25, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(27, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(29, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(31, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(34, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(50, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(72, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(75, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(78, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(81, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(84, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(87, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(90, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(93, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(96, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(99, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(102, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(105, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(108, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(111, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(114, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(117, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(120, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(123, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(126, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(129, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(132, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(135, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(138, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(141, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(144, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(158, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(172, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(186, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(200, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(214, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(233, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(248, 500, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(748, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(764, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(780, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(796, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(812, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(828, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(844, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(860, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(876, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(892, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(908, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(924, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(940, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(956, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(972, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(988, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1004, 12, - [ - new("powered", ["true", "false"], 6), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 1) - ]), - new(1016, 12, - [ - new("powered", ["true", "false"], 6), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 1) - ]), - new(1028, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(1045, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(1047, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(1059, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2), - new("type", ["normal", "sticky"], 1) - ]), - new(1099, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("type", ["normal", "sticky"], 1) - ]), - new(1126, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(1132, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(1136, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(1649, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(1729, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("type", ["single", "left", "right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(1753, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(3052, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(3060, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(3068, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(3076, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3108, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3172, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3180, 10, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 1) - ]), - new(3190, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3270, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3278, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3302, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3304, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3368, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3370, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3372, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3374, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3376, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3378, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3380, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(3382, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(3384, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(3392, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3416, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(3426, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(3443, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(3459, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(3461, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(3497, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(3499, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(3503, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(3507, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(3514, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3594, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3658, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3722, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3786, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3850, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3914, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3988, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4052, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4116, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4180, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4212, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4245, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4249, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4253, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4261, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4269, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4301, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4333, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4413, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4493, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(4497, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4529, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4609, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(4614, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(4622, 4, - [ - new("level", ["0", "1", "2", "3"], 1) - ]), - new(4627, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4637, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(4639, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4651, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4732, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4740, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4756, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4885, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4965, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5045, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5125, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(5138, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5202, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5288, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(5296, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(5304, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5328, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5352, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5376, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5400, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5424, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5448, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5452, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5468, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5472, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5488, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5492, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5508, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5512, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5528, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5532, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5548, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5552, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5568, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5572, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5576, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5580, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("type", ["single", "left", "right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5604, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5620, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5636, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5652, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5686, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(5698, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(5701, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5781, 12, - [ - new("powered", ["true", "false"], 6), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 1) - ]), - new(5793, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(5821, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5853, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5885, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5917, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5949, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5981, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6013, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6045, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6077, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6109, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6141, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6173, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6205, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6237, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6269, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6301, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6333, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6413, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6495, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6562, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6642, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6722, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6802, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6808, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6814, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6821, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(6843, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(6845, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(6847, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(6849, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(6851, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(6853, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(6855, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6871, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6887, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6903, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6919, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6935, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6951, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6967, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6983, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6999, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7015, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7031, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7047, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7063, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7079, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7095, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7111, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7115, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7119, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7123, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7127, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7131, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7135, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7139, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7143, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7147, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7151, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7155, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7159, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7163, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7167, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7171, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7178, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7258, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7264, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7270, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7276, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7282, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7288, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7294, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7300, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7306, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7312, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7318, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7324, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7330, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7336, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7342, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7348, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7358, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7390, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7422, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7454, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7486, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7518, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7550, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7582, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7614, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7646, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7678, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7742, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7806, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7870, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7934, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7998, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8004, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8068, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(8075, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(8078, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8159, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(8165, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8177, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8189, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(8196, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(8200, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8212, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8218, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8224, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8230, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8236, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8242, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8248, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8254, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8260, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8266, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8272, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8278, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8284, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8290, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8296, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8302, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8308, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8314, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8318, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8322, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8326, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8330, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8334, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8338, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8342, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8346, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8350, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8354, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8358, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8362, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8366, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8370, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8374, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8410, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(8438, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(8460, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8462, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8464, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8466, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8468, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8470, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8472, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8474, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8476, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8478, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8480, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8488, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8496, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8504, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8512, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8520, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8528, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8536, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8544, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8552, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8560, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8562, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8564, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8566, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8568, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8570, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8572, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8574, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8576, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8578, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8580, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8589, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8593, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(8595, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette114.cs b/MinecraftClient/Mapping/BlockPalettes/Palette114.cs deleted file mode 100644 index 596c6475bf..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette114.cs +++ /dev/null @@ -1,3334 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - /// - /// Defines mappings for Minecraft 1.14. - /// Automatically generated using BlockPaletteGenerator.cs - /// - public class Palette114 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette114() - { - materials[0] = Material.Air; - materials[1] = Material.Stone; - materials[2] = Material.Granite; - materials[3] = Material.PolishedGranite; - materials[4] = Material.Diorite; - materials[5] = Material.PolishedDiorite; - materials[6] = Material.Andesite; - materials[7] = Material.PolishedAndesite; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - materials[10] = Material.Dirt; - materials[11] = Material.CoarseDirt; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - materials[14] = Material.Cobblestone; - materials[15] = Material.OakPlanks; - materials[16] = Material.SprucePlanks; - materials[17] = Material.BirchPlanks; - materials[18] = Material.JunglePlanks; - materials[19] = Material.AcaciaPlanks; - materials[20] = Material.DarkOakPlanks; - for (int i = 21; i <= 22; i++) - materials[i] = Material.OakSapling; - for (int i = 23; i <= 24; i++) - materials[i] = Material.SpruceSapling; - for (int i = 25; i <= 26; i++) - materials[i] = Material.BirchSapling; - for (int i = 27; i <= 28; i++) - materials[i] = Material.JungleSapling; - for (int i = 29; i <= 30; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 31; i <= 32; i++) - materials[i] = Material.DarkOakSapling; - materials[33] = Material.Bedrock; - for (int i = 34; i <= 49; i++) - materials[i] = Material.Water; - for (int i = 50; i <= 65; i++) - materials[i] = Material.Lava; - materials[66] = Material.Sand; - materials[67] = Material.RedSand; - materials[68] = Material.Gravel; - materials[69] = Material.GoldOre; - materials[70] = Material.IronOre; - materials[71] = Material.CoalOre; - for (int i = 72; i <= 74; i++) - materials[i] = Material.OakLog; - for (int i = 75; i <= 77; i++) - materials[i] = Material.SpruceLog; - for (int i = 78; i <= 80; i++) - materials[i] = Material.BirchLog; - for (int i = 81; i <= 83; i++) - materials[i] = Material.JungleLog; - for (int i = 84; i <= 86; i++) - materials[i] = Material.AcaciaLog; - for (int i = 87; i <= 89; i++) - materials[i] = Material.DarkOakLog; - for (int i = 90; i <= 92; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 93; i <= 95; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 96; i <= 98; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 99; i <= 101; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 102; i <= 104; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 105; i <= 107; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 108; i <= 110; i++) - materials[i] = Material.OakWood; - for (int i = 111; i <= 113; i++) - materials[i] = Material.SpruceWood; - for (int i = 114; i <= 116; i++) - materials[i] = Material.BirchWood; - for (int i = 117; i <= 119; i++) - materials[i] = Material.JungleWood; - for (int i = 120; i <= 122; i++) - materials[i] = Material.AcaciaWood; - for (int i = 123; i <= 125; i++) - materials[i] = Material.DarkOakWood; - for (int i = 126; i <= 128; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 129; i <= 131; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 132; i <= 134; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 135; i <= 137; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 138; i <= 140; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 141; i <= 143; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 144; i <= 157; i++) - materials[i] = Material.OakLeaves; - for (int i = 158; i <= 171; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 172; i <= 185; i++) - materials[i] = Material.BirchLeaves; - for (int i = 186; i <= 199; i++) - materials[i] = Material.JungleLeaves; - for (int i = 200; i <= 213; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 214; i <= 227; i++) - materials[i] = Material.DarkOakLeaves; - materials[228] = Material.Sponge; - materials[229] = Material.WetSponge; - materials[230] = Material.Glass; - materials[231] = Material.LapisOre; - materials[232] = Material.LapisBlock; - for (int i = 233; i <= 244; i++) - materials[i] = Material.Dispenser; - materials[245] = Material.Sandstone; - materials[246] = Material.ChiseledSandstone; - materials[247] = Material.CutSandstone; - for (int i = 248; i <= 1047; i++) - materials[i] = Material.NoteBlock; - for (int i = 1048; i <= 1063; i++) - materials[i] = Material.WhiteBed; - for (int i = 1064; i <= 1079; i++) - materials[i] = Material.OrangeBed; - for (int i = 1080; i <= 1095; i++) - materials[i] = Material.MagentaBed; - for (int i = 1096; i <= 1111; i++) - materials[i] = Material.LightBlueBed; - for (int i = 1112; i <= 1127; i++) - materials[i] = Material.YellowBed; - for (int i = 1128; i <= 1143; i++) - materials[i] = Material.LimeBed; - for (int i = 1144; i <= 1159; i++) - materials[i] = Material.PinkBed; - for (int i = 1160; i <= 1175; i++) - materials[i] = Material.GrayBed; - for (int i = 1176; i <= 1191; i++) - materials[i] = Material.LightGrayBed; - for (int i = 1192; i <= 1207; i++) - materials[i] = Material.CyanBed; - for (int i = 1208; i <= 1223; i++) - materials[i] = Material.PurpleBed; - for (int i = 1224; i <= 1239; i++) - materials[i] = Material.BlueBed; - for (int i = 1240; i <= 1255; i++) - materials[i] = Material.BrownBed; - for (int i = 1256; i <= 1271; i++) - materials[i] = Material.GreenBed; - for (int i = 1272; i <= 1287; i++) - materials[i] = Material.RedBed; - for (int i = 1288; i <= 1303; i++) - materials[i] = Material.BlackBed; - for (int i = 1304; i <= 1315; i++) - materials[i] = Material.PoweredRail; - for (int i = 1316; i <= 1327; i++) - materials[i] = Material.DetectorRail; - for (int i = 1328; i <= 1339; i++) - materials[i] = Material.StickyPiston; - materials[1340] = Material.Cobweb; - materials[1341] = Material.ShortGrass; - materials[1342] = Material.Fern; - materials[1343] = Material.DeadBush; - materials[1344] = Material.Seagrass; - for (int i = 1345; i <= 1346; i++) - materials[i] = Material.TallSeagrass; - for (int i = 1347; i <= 1358; i++) - materials[i] = Material.Piston; - for (int i = 1359; i <= 1382; i++) - materials[i] = Material.PistonHead; - materials[1383] = Material.WhiteWool; - materials[1384] = Material.OrangeWool; - materials[1385] = Material.MagentaWool; - materials[1386] = Material.LightBlueWool; - materials[1387] = Material.YellowWool; - materials[1388] = Material.LimeWool; - materials[1389] = Material.PinkWool; - materials[1390] = Material.GrayWool; - materials[1391] = Material.LightGrayWool; - materials[1392] = Material.CyanWool; - materials[1393] = Material.PurpleWool; - materials[1394] = Material.BlueWool; - materials[1395] = Material.BrownWool; - materials[1396] = Material.GreenWool; - materials[1397] = Material.RedWool; - materials[1398] = Material.BlackWool; - for (int i = 1399; i <= 1410; i++) - materials[i] = Material.MovingPiston; - materials[1411] = Material.Dandelion; - materials[1412] = Material.Poppy; - materials[1413] = Material.BlueOrchid; - materials[1414] = Material.Allium; - materials[1415] = Material.AzureBluet; - materials[1416] = Material.RedTulip; - materials[1417] = Material.OrangeTulip; - materials[1418] = Material.WhiteTulip; - materials[1419] = Material.PinkTulip; - materials[1420] = Material.OxeyeDaisy; - materials[1421] = Material.Cornflower; - materials[1422] = Material.WitherRose; - materials[1423] = Material.LilyOfTheValley; - materials[1424] = Material.BrownMushroom; - materials[1425] = Material.RedMushroom; - materials[1426] = Material.GoldBlock; - materials[1427] = Material.IronBlock; - materials[1428] = Material.Bricks; - for (int i = 1429; i <= 1430; i++) - materials[i] = Material.Tnt; - materials[1431] = Material.Bookshelf; - materials[1432] = Material.MossyCobblestone; - materials[1433] = Material.Obsidian; - materials[1434] = Material.Torch; - for (int i = 1435; i <= 1438; i++) - materials[i] = Material.WallTorch; - for (int i = 1439; i <= 1950; i++) - materials[i] = Material.Fire; - materials[1951] = Material.Spawner; - for (int i = 1952; i <= 2031; i++) - materials[i] = Material.OakStairs; - for (int i = 2032; i <= 2055; i++) - materials[i] = Material.Chest; - for (int i = 2056; i <= 3351; i++) - materials[i] = Material.RedstoneWire; - materials[3352] = Material.DiamondOre; - materials[3353] = Material.DiamondBlock; - materials[3354] = Material.CraftingTable; - for (int i = 3355; i <= 3362; i++) - materials[i] = Material.Wheat; - for (int i = 3363; i <= 3370; i++) - materials[i] = Material.Farmland; - for (int i = 3371; i <= 3378; i++) - materials[i] = Material.Furnace; - for (int i = 3379; i <= 3410; i++) - materials[i] = Material.OakSign; - for (int i = 3411; i <= 3442; i++) - materials[i] = Material.SpruceSign; - for (int i = 3443; i <= 3474; i++) - materials[i] = Material.BirchSign; - for (int i = 3475; i <= 3506; i++) - materials[i] = Material.AcaciaSign; - for (int i = 3507; i <= 3538; i++) - materials[i] = Material.JungleSign; - for (int i = 3539; i <= 3570; i++) - materials[i] = Material.DarkOakSign; - for (int i = 3571; i <= 3634; i++) - materials[i] = Material.OakDoor; - for (int i = 3635; i <= 3642; i++) - materials[i] = Material.Ladder; - for (int i = 3643; i <= 3652; i++) - materials[i] = Material.Rail; - for (int i = 3653; i <= 3732; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 3733; i <= 3740; i++) - materials[i] = Material.OakWallSign; - for (int i = 3741; i <= 3748; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 3749; i <= 3756; i++) - materials[i] = Material.BirchWallSign; - for (int i = 3757; i <= 3764; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 3765; i <= 3772; i++) - materials[i] = Material.JungleWallSign; - for (int i = 3773; i <= 3780; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 3781; i <= 3804; i++) - materials[i] = Material.Lever; - for (int i = 3805; i <= 3806; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 3807; i <= 3870; i++) - materials[i] = Material.IronDoor; - for (int i = 3871; i <= 3872; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 3873; i <= 3874; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 3875; i <= 3876; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 3877; i <= 3878; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 3879; i <= 3880; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 3881; i <= 3882; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 3883; i <= 3884; i++) - materials[i] = Material.RedstoneOre; - for (int i = 3885; i <= 3886; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 3887; i <= 3894; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 3895; i <= 3918; i++) - materials[i] = Material.StoneButton; - for (int i = 3919; i <= 3926; i++) - materials[i] = Material.Snow; - materials[3927] = Material.Ice; - materials[3928] = Material.SnowBlock; - for (int i = 3929; i <= 3944; i++) - materials[i] = Material.Cactus; - materials[3945] = Material.Clay; - for (int i = 3946; i <= 3961; i++) - materials[i] = Material.SugarCane; - for (int i = 3962; i <= 3963; i++) - materials[i] = Material.Jukebox; - for (int i = 3964; i <= 3995; i++) - materials[i] = Material.OakFence; - materials[3996] = Material.Pumpkin; - materials[3997] = Material.Netherrack; - materials[3998] = Material.SoulSand; - materials[3999] = Material.Glowstone; - for (int i = 4000; i <= 4001; i++) - materials[i] = Material.NetherPortal; - for (int i = 4002; i <= 4005; i++) - materials[i] = Material.CarvedPumpkin; - for (int i = 4006; i <= 4009; i++) - materials[i] = Material.JackOLantern; - for (int i = 4010; i <= 4016; i++) - materials[i] = Material.Cake; - for (int i = 4017; i <= 4080; i++) - materials[i] = Material.Repeater; - materials[4081] = Material.WhiteStainedGlass; - materials[4082] = Material.OrangeStainedGlass; - materials[4083] = Material.MagentaStainedGlass; - materials[4084] = Material.LightBlueStainedGlass; - materials[4085] = Material.YellowStainedGlass; - materials[4086] = Material.LimeStainedGlass; - materials[4087] = Material.PinkStainedGlass; - materials[4088] = Material.GrayStainedGlass; - materials[4089] = Material.LightGrayStainedGlass; - materials[4090] = Material.CyanStainedGlass; - materials[4091] = Material.PurpleStainedGlass; - materials[4092] = Material.BlueStainedGlass; - materials[4093] = Material.BrownStainedGlass; - materials[4094] = Material.GreenStainedGlass; - materials[4095] = Material.RedStainedGlass; - materials[4096] = Material.BlackStainedGlass; - for (int i = 4097; i <= 4160; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 4161; i <= 4224; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 4225; i <= 4288; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 4289; i <= 4352; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 4353; i <= 4416; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 4417; i <= 4480; i++) - materials[i] = Material.DarkOakTrapdoor; - materials[4481] = Material.StoneBricks; - materials[4482] = Material.MossyStoneBricks; - materials[4483] = Material.CrackedStoneBricks; - materials[4484] = Material.ChiseledStoneBricks; - materials[4485] = Material.InfestedStone; - materials[4486] = Material.InfestedCobblestone; - materials[4487] = Material.InfestedStoneBricks; - materials[4488] = Material.InfestedMossyStoneBricks; - materials[4489] = Material.InfestedCrackedStoneBricks; - materials[4490] = Material.InfestedChiseledStoneBricks; - for (int i = 4491; i <= 4554; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 4555; i <= 4618; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 4619; i <= 4682; i++) - materials[i] = Material.MushroomStem; - for (int i = 4683; i <= 4714; i++) - materials[i] = Material.IronBars; - for (int i = 4715; i <= 4746; i++) - materials[i] = Material.GlassPane; - materials[4747] = Material.Melon; - for (int i = 4748; i <= 4751; i++) - materials[i] = Material.AttachedPumpkinStem; - for (int i = 4752; i <= 4755; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 4756; i <= 4763; i++) - materials[i] = Material.PumpkinStem; - for (int i = 4764; i <= 4771; i++) - materials[i] = Material.MelonStem; - for (int i = 4772; i <= 4803; i++) - materials[i] = Material.Vine; - for (int i = 4804; i <= 4835; i++) - materials[i] = Material.OakFenceGate; - for (int i = 4836; i <= 4915; i++) - materials[i] = Material.BrickStairs; - for (int i = 4916; i <= 4995; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 4996; i <= 4997; i++) - materials[i] = Material.Mycelium; - materials[4998] = Material.LilyPad; - materials[4999] = Material.NetherBricks; - for (int i = 5000; i <= 5031; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 5032; i <= 5111; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 5112; i <= 5115; i++) - materials[i] = Material.NetherWart; - materials[5116] = Material.EnchantingTable; - for (int i = 5117; i <= 5124; i++) - materials[i] = Material.BrewingStand; - for (int i = 5125; i <= 5128; i++) - materials[i] = Material.Cauldron; - materials[5129] = Material.EndPortal; - for (int i = 5130; i <= 5137; i++) - materials[i] = Material.EndPortalFrame; - materials[5138] = Material.EndStone; - materials[5139] = Material.DragonEgg; - for (int i = 5140; i <= 5141; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 5142; i <= 5153; i++) - materials[i] = Material.Cocoa; - for (int i = 5154; i <= 5233; i++) - materials[i] = Material.SandstoneStairs; - materials[5234] = Material.EmeraldOre; - for (int i = 5235; i <= 5242; i++) - materials[i] = Material.EnderChest; - for (int i = 5243; i <= 5258; i++) - materials[i] = Material.TripwireHook; - for (int i = 5259; i <= 5386; i++) - materials[i] = Material.Tripwire; - materials[5387] = Material.EmeraldBlock; - for (int i = 5388; i <= 5467; i++) - materials[i] = Material.SpruceStairs; - for (int i = 5468; i <= 5547; i++) - materials[i] = Material.BirchStairs; - for (int i = 5548; i <= 5627; i++) - materials[i] = Material.JungleStairs; - for (int i = 5628; i <= 5639; i++) - materials[i] = Material.CommandBlock; - materials[5640] = Material.Beacon; - for (int i = 5641; i <= 5704; i++) - materials[i] = Material.CobblestoneWall; - for (int i = 5705; i <= 5768; i++) - materials[i] = Material.MossyCobblestoneWall; - materials[5769] = Material.FlowerPot; - materials[5770] = Material.PottedOakSapling; - materials[5771] = Material.PottedSpruceSapling; - materials[5772] = Material.PottedBirchSapling; - materials[5773] = Material.PottedJungleSapling; - materials[5774] = Material.PottedAcaciaSapling; - materials[5775] = Material.PottedDarkOakSapling; - materials[5776] = Material.PottedFern; - materials[5777] = Material.PottedDandelion; - materials[5778] = Material.PottedPoppy; - materials[5779] = Material.PottedBlueOrchid; - materials[5780] = Material.PottedAllium; - materials[5781] = Material.PottedAzureBluet; - materials[5782] = Material.PottedRedTulip; - materials[5783] = Material.PottedOrangeTulip; - materials[5784] = Material.PottedWhiteTulip; - materials[5785] = Material.PottedPinkTulip; - materials[5786] = Material.PottedOxeyeDaisy; - materials[5787] = Material.PottedCornflower; - materials[5788] = Material.PottedLilyOfTheValley; - materials[5789] = Material.PottedWitherRose; - materials[5790] = Material.PottedRedMushroom; - materials[5791] = Material.PottedBrownMushroom; - materials[5792] = Material.PottedDeadBush; - materials[5793] = Material.PottedCactus; - for (int i = 5794; i <= 5801; i++) - materials[i] = Material.Carrots; - for (int i = 5802; i <= 5809; i++) - materials[i] = Material.Potatoes; - for (int i = 5810; i <= 5833; i++) - materials[i] = Material.OakButton; - for (int i = 5834; i <= 5857; i++) - materials[i] = Material.SpruceButton; - for (int i = 5858; i <= 5881; i++) - materials[i] = Material.BirchButton; - for (int i = 5882; i <= 5905; i++) - materials[i] = Material.JungleButton; - for (int i = 5906; i <= 5929; i++) - materials[i] = Material.AcaciaButton; - for (int i = 5930; i <= 5953; i++) - materials[i] = Material.DarkOakButton; - for (int i = 5954; i <= 5969; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 5970; i <= 5973; i++) - materials[i] = Material.SkeletonWallSkull; - for (int i = 5974; i <= 5989; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 5990; i <= 5993; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 5994; i <= 6009; i++) - materials[i] = Material.ZombieHead; - for (int i = 6010; i <= 6013; i++) - materials[i] = Material.ZombieWallHead; - for (int i = 6014; i <= 6029; i++) - materials[i] = Material.PlayerHead; - for (int i = 6030; i <= 6033; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 6034; i <= 6049; i++) - materials[i] = Material.CreeperHead; - for (int i = 6050; i <= 6053; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 6054; i <= 6069; i++) - materials[i] = Material.DragonHead; - for (int i = 6070; i <= 6073; i++) - materials[i] = Material.DragonWallHead; - for (int i = 6074; i <= 6077; i++) - materials[i] = Material.Anvil; - for (int i = 6078; i <= 6081; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 6082; i <= 6085; i++) - materials[i] = Material.DamagedAnvil; - for (int i = 6086; i <= 6109; i++) - materials[i] = Material.TrappedChest; - for (int i = 6110; i <= 6125; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 6126; i <= 6141; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - for (int i = 6142; i <= 6157; i++) - materials[i] = Material.Comparator; - for (int i = 6158; i <= 6189; i++) - materials[i] = Material.DaylightDetector; - materials[6190] = Material.RedstoneBlock; - materials[6191] = Material.NetherQuartzOre; - for (int i = 6192; i <= 6201; i++) - materials[i] = Material.Hopper; - materials[6202] = Material.QuartzBlock; - materials[6203] = Material.ChiseledQuartzBlock; - for (int i = 6204; i <= 6206; i++) - materials[i] = Material.QuartzPillar; - for (int i = 6207; i <= 6286; i++) - materials[i] = Material.QuartzStairs; - for (int i = 6287; i <= 6298; i++) - materials[i] = Material.ActivatorRail; - for (int i = 6299; i <= 6310; i++) - materials[i] = Material.Dropper; - materials[6311] = Material.WhiteTerracotta; - materials[6312] = Material.OrangeTerracotta; - materials[6313] = Material.MagentaTerracotta; - materials[6314] = Material.LightBlueTerracotta; - materials[6315] = Material.YellowTerracotta; - materials[6316] = Material.LimeTerracotta; - materials[6317] = Material.PinkTerracotta; - materials[6318] = Material.GrayTerracotta; - materials[6319] = Material.LightGrayTerracotta; - materials[6320] = Material.CyanTerracotta; - materials[6321] = Material.PurpleTerracotta; - materials[6322] = Material.BlueTerracotta; - materials[6323] = Material.BrownTerracotta; - materials[6324] = Material.GreenTerracotta; - materials[6325] = Material.RedTerracotta; - materials[6326] = Material.BlackTerracotta; - for (int i = 6327; i <= 6358; i++) - materials[i] = Material.WhiteStainedGlassPane; - for (int i = 6359; i <= 6390; i++) - materials[i] = Material.OrangeStainedGlassPane; - for (int i = 6391; i <= 6422; i++) - materials[i] = Material.MagentaStainedGlassPane; - for (int i = 6423; i <= 6454; i++) - materials[i] = Material.LightBlueStainedGlassPane; - for (int i = 6455; i <= 6486; i++) - materials[i] = Material.YellowStainedGlassPane; - for (int i = 6487; i <= 6518; i++) - materials[i] = Material.LimeStainedGlassPane; - for (int i = 6519; i <= 6550; i++) - materials[i] = Material.PinkStainedGlassPane; - for (int i = 6551; i <= 6582; i++) - materials[i] = Material.GrayStainedGlassPane; - for (int i = 6583; i <= 6614; i++) - materials[i] = Material.LightGrayStainedGlassPane; - for (int i = 6615; i <= 6646; i++) - materials[i] = Material.CyanStainedGlassPane; - for (int i = 6647; i <= 6678; i++) - materials[i] = Material.PurpleStainedGlassPane; - for (int i = 6679; i <= 6710; i++) - materials[i] = Material.BlueStainedGlassPane; - for (int i = 6711; i <= 6742; i++) - materials[i] = Material.BrownStainedGlassPane; - for (int i = 6743; i <= 6774; i++) - materials[i] = Material.GreenStainedGlassPane; - for (int i = 6775; i <= 6806; i++) - materials[i] = Material.RedStainedGlassPane; - for (int i = 6807; i <= 6838; i++) - materials[i] = Material.BlackStainedGlassPane; - for (int i = 6839; i <= 6918; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 6919; i <= 6998; i++) - materials[i] = Material.DarkOakStairs; - materials[6999] = Material.SlimeBlock; - materials[7000] = Material.Barrier; - for (int i = 7001; i <= 7064; i++) - materials[i] = Material.IronTrapdoor; - materials[7065] = Material.Prismarine; - materials[7066] = Material.PrismarineBricks; - materials[7067] = Material.DarkPrismarine; - for (int i = 7068; i <= 7147; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 7148; i <= 7227; i++) - materials[i] = Material.PrismarineBrickStairs; - for (int i = 7228; i <= 7307; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 7308; i <= 7313; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 7314; i <= 7319; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 7320; i <= 7325; i++) - materials[i] = Material.DarkPrismarineSlab; - materials[7326] = Material.SeaLantern; - for (int i = 7327; i <= 7329; i++) - materials[i] = Material.HayBlock; - materials[7330] = Material.WhiteCarpet; - materials[7331] = Material.OrangeCarpet; - materials[7332] = Material.MagentaCarpet; - materials[7333] = Material.LightBlueCarpet; - materials[7334] = Material.YellowCarpet; - materials[7335] = Material.LimeCarpet; - materials[7336] = Material.PinkCarpet; - materials[7337] = Material.GrayCarpet; - materials[7338] = Material.LightGrayCarpet; - materials[7339] = Material.CyanCarpet; - materials[7340] = Material.PurpleCarpet; - materials[7341] = Material.BlueCarpet; - materials[7342] = Material.BrownCarpet; - materials[7343] = Material.GreenCarpet; - materials[7344] = Material.RedCarpet; - materials[7345] = Material.BlackCarpet; - materials[7346] = Material.Terracotta; - materials[7347] = Material.CoalBlock; - materials[7348] = Material.PackedIce; - for (int i = 7349; i <= 7350; i++) - materials[i] = Material.Sunflower; - for (int i = 7351; i <= 7352; i++) - materials[i] = Material.Lilac; - for (int i = 7353; i <= 7354; i++) - materials[i] = Material.RoseBush; - for (int i = 7355; i <= 7356; i++) - materials[i] = Material.Peony; - for (int i = 7357; i <= 7358; i++) - materials[i] = Material.TallGrass; - for (int i = 7359; i <= 7360; i++) - materials[i] = Material.LargeFern; - for (int i = 7361; i <= 7376; i++) - materials[i] = Material.WhiteBanner; - for (int i = 7377; i <= 7392; i++) - materials[i] = Material.OrangeBanner; - for (int i = 7393; i <= 7408; i++) - materials[i] = Material.MagentaBanner; - for (int i = 7409; i <= 7424; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 7425; i <= 7440; i++) - materials[i] = Material.YellowBanner; - for (int i = 7441; i <= 7456; i++) - materials[i] = Material.LimeBanner; - for (int i = 7457; i <= 7472; i++) - materials[i] = Material.PinkBanner; - for (int i = 7473; i <= 7488; i++) - materials[i] = Material.GrayBanner; - for (int i = 7489; i <= 7504; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 7505; i <= 7520; i++) - materials[i] = Material.CyanBanner; - for (int i = 7521; i <= 7536; i++) - materials[i] = Material.PurpleBanner; - for (int i = 7537; i <= 7552; i++) - materials[i] = Material.BlueBanner; - for (int i = 7553; i <= 7568; i++) - materials[i] = Material.BrownBanner; - for (int i = 7569; i <= 7584; i++) - materials[i] = Material.GreenBanner; - for (int i = 7585; i <= 7600; i++) - materials[i] = Material.RedBanner; - for (int i = 7601; i <= 7616; i++) - materials[i] = Material.BlackBanner; - for (int i = 7617; i <= 7620; i++) - materials[i] = Material.WhiteWallBanner; - for (int i = 7621; i <= 7624; i++) - materials[i] = Material.OrangeWallBanner; - for (int i = 7625; i <= 7628; i++) - materials[i] = Material.MagentaWallBanner; - for (int i = 7629; i <= 7632; i++) - materials[i] = Material.LightBlueWallBanner; - for (int i = 7633; i <= 7636; i++) - materials[i] = Material.YellowWallBanner; - for (int i = 7637; i <= 7640; i++) - materials[i] = Material.LimeWallBanner; - for (int i = 7641; i <= 7644; i++) - materials[i] = Material.PinkWallBanner; - for (int i = 7645; i <= 7648; i++) - materials[i] = Material.GrayWallBanner; - for (int i = 7649; i <= 7652; i++) - materials[i] = Material.LightGrayWallBanner; - for (int i = 7653; i <= 7656; i++) - materials[i] = Material.CyanWallBanner; - for (int i = 7657; i <= 7660; i++) - materials[i] = Material.PurpleWallBanner; - for (int i = 7661; i <= 7664; i++) - materials[i] = Material.BlueWallBanner; - for (int i = 7665; i <= 7668; i++) - materials[i] = Material.BrownWallBanner; - for (int i = 7669; i <= 7672; i++) - materials[i] = Material.GreenWallBanner; - for (int i = 7673; i <= 7676; i++) - materials[i] = Material.RedWallBanner; - for (int i = 7677; i <= 7680; i++) - materials[i] = Material.BlackWallBanner; - materials[7681] = Material.RedSandstone; - materials[7682] = Material.ChiseledRedSandstone; - materials[7683] = Material.CutRedSandstone; - for (int i = 7684; i <= 7763; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 7764; i <= 7769; i++) - materials[i] = Material.OakSlab; - for (int i = 7770; i <= 7775; i++) - materials[i] = Material.SpruceSlab; - for (int i = 7776; i <= 7781; i++) - materials[i] = Material.BirchSlab; - for (int i = 7782; i <= 7787; i++) - materials[i] = Material.JungleSlab; - for (int i = 7788; i <= 7793; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 7794; i <= 7799; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 7800; i <= 7805; i++) - materials[i] = Material.StoneSlab; - for (int i = 7806; i <= 7811; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 7812; i <= 7817; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 7818; i <= 7823; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 7824; i <= 7829; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 7830; i <= 7835; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 7836; i <= 7841; i++) - materials[i] = Material.BrickSlab; - for (int i = 7842; i <= 7847; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 7848; i <= 7853; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 7854; i <= 7859; i++) - materials[i] = Material.QuartzSlab; - for (int i = 7860; i <= 7865; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 7866; i <= 7871; i++) - materials[i] = Material.CutRedSandstoneSlab; - for (int i = 7872; i <= 7877; i++) - materials[i] = Material.PurpurSlab; - materials[7878] = Material.SmoothStone; - materials[7879] = Material.SmoothSandstone; - materials[7880] = Material.SmoothQuartz; - materials[7881] = Material.SmoothRedSandstone; - for (int i = 7882; i <= 7913; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 7914; i <= 7945; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 7946; i <= 7977; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 7978; i <= 8009; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 8010; i <= 8041; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 8042; i <= 8073; i++) - materials[i] = Material.SpruceFence; - for (int i = 8074; i <= 8105; i++) - materials[i] = Material.BirchFence; - for (int i = 8106; i <= 8137; i++) - materials[i] = Material.JungleFence; - for (int i = 8138; i <= 8169; i++) - materials[i] = Material.AcaciaFence; - for (int i = 8170; i <= 8201; i++) - materials[i] = Material.DarkOakFence; - for (int i = 8202; i <= 8265; i++) - materials[i] = Material.SpruceDoor; - for (int i = 8266; i <= 8329; i++) - materials[i] = Material.BirchDoor; - for (int i = 8330; i <= 8393; i++) - materials[i] = Material.JungleDoor; - for (int i = 8394; i <= 8457; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 8458; i <= 8521; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 8522; i <= 8527; i++) - materials[i] = Material.EndRod; - for (int i = 8528; i <= 8591; i++) - materials[i] = Material.ChorusPlant; - for (int i = 8592; i <= 8597; i++) - materials[i] = Material.ChorusFlower; - materials[8598] = Material.PurpurBlock; - for (int i = 8599; i <= 8601; i++) - materials[i] = Material.PurpurPillar; - for (int i = 8602; i <= 8681; i++) - materials[i] = Material.PurpurStairs; - materials[8682] = Material.EndStoneBricks; - for (int i = 8683; i <= 8686; i++) - materials[i] = Material.Beetroots; - materials[8687] = Material.DirtPath; - materials[8688] = Material.EndGateway; - for (int i = 8689; i <= 8700; i++) - materials[i] = Material.RepeatingCommandBlock; - for (int i = 8701; i <= 8712; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 8713; i <= 8716; i++) - materials[i] = Material.FrostedIce; - materials[8717] = Material.MagmaBlock; - materials[8718] = Material.NetherWartBlock; - materials[8719] = Material.RedNetherBricks; - for (int i = 8720; i <= 8722; i++) - materials[i] = Material.BoneBlock; - materials[8723] = Material.StructureVoid; - for (int i = 8724; i <= 8735; i++) - materials[i] = Material.Observer; - for (int i = 8736; i <= 8741; i++) - materials[i] = Material.ShulkerBox; - for (int i = 8742; i <= 8747; i++) - materials[i] = Material.WhiteShulkerBox; - for (int i = 8748; i <= 8753; i++) - materials[i] = Material.OrangeShulkerBox; - for (int i = 8754; i <= 8759; i++) - materials[i] = Material.MagentaShulkerBox; - for (int i = 8760; i <= 8765; i++) - materials[i] = Material.LightBlueShulkerBox; - for (int i = 8766; i <= 8771; i++) - materials[i] = Material.YellowShulkerBox; - for (int i = 8772; i <= 8777; i++) - materials[i] = Material.LimeShulkerBox; - for (int i = 8778; i <= 8783; i++) - materials[i] = Material.PinkShulkerBox; - for (int i = 8784; i <= 8789; i++) - materials[i] = Material.GrayShulkerBox; - for (int i = 8790; i <= 8795; i++) - materials[i] = Material.LightGrayShulkerBox; - for (int i = 8796; i <= 8801; i++) - materials[i] = Material.CyanShulkerBox; - for (int i = 8802; i <= 8807; i++) - materials[i] = Material.PurpleShulkerBox; - for (int i = 8808; i <= 8813; i++) - materials[i] = Material.BlueShulkerBox; - for (int i = 8814; i <= 8819; i++) - materials[i] = Material.BrownShulkerBox; - for (int i = 8820; i <= 8825; i++) - materials[i] = Material.GreenShulkerBox; - for (int i = 8826; i <= 8831; i++) - materials[i] = Material.RedShulkerBox; - for (int i = 8832; i <= 8837; i++) - materials[i] = Material.BlackShulkerBox; - for (int i = 8838; i <= 8841; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 8842; i <= 8845; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 8846; i <= 8849; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 8850; i <= 8853; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 8854; i <= 8857; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 8858; i <= 8861; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 8862; i <= 8865; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 8866; i <= 8869; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 8870; i <= 8873; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 8874; i <= 8877; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 8878; i <= 8881; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 8882; i <= 8885; i++) - materials[i] = Material.BlueGlazedTerracotta; - for (int i = 8886; i <= 8889; i++) - materials[i] = Material.BrownGlazedTerracotta; - for (int i = 8890; i <= 8893; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 8894; i <= 8897; i++) - materials[i] = Material.RedGlazedTerracotta; - for (int i = 8898; i <= 8901; i++) - materials[i] = Material.BlackGlazedTerracotta; - materials[8902] = Material.WhiteConcrete; - materials[8903] = Material.OrangeConcrete; - materials[8904] = Material.MagentaConcrete; - materials[8905] = Material.LightBlueConcrete; - materials[8906] = Material.YellowConcrete; - materials[8907] = Material.LimeConcrete; - materials[8908] = Material.PinkConcrete; - materials[8909] = Material.GrayConcrete; - materials[8910] = Material.LightGrayConcrete; - materials[8911] = Material.CyanConcrete; - materials[8912] = Material.PurpleConcrete; - materials[8913] = Material.BlueConcrete; - materials[8914] = Material.BrownConcrete; - materials[8915] = Material.GreenConcrete; - materials[8916] = Material.RedConcrete; - materials[8917] = Material.BlackConcrete; - materials[8918] = Material.WhiteConcretePowder; - materials[8919] = Material.OrangeConcretePowder; - materials[8920] = Material.MagentaConcretePowder; - materials[8921] = Material.LightBlueConcretePowder; - materials[8922] = Material.YellowConcretePowder; - materials[8923] = Material.LimeConcretePowder; - materials[8924] = Material.PinkConcretePowder; - materials[8925] = Material.GrayConcretePowder; - materials[8926] = Material.LightGrayConcretePowder; - materials[8927] = Material.CyanConcretePowder; - materials[8928] = Material.PurpleConcretePowder; - materials[8929] = Material.BlueConcretePowder; - materials[8930] = Material.BrownConcretePowder; - materials[8931] = Material.GreenConcretePowder; - materials[8932] = Material.RedConcretePowder; - materials[8933] = Material.BlackConcretePowder; - for (int i = 8934; i <= 8959; i++) - materials[i] = Material.Kelp; - materials[8960] = Material.KelpPlant; - materials[8961] = Material.DriedKelpBlock; - for (int i = 8962; i <= 8973; i++) - materials[i] = Material.TurtleEgg; - materials[8974] = Material.DeadTubeCoralBlock; - materials[8975] = Material.DeadBrainCoralBlock; - materials[8976] = Material.DeadBubbleCoralBlock; - materials[8977] = Material.DeadFireCoralBlock; - materials[8978] = Material.DeadHornCoralBlock; - materials[8979] = Material.TubeCoralBlock; - materials[8980] = Material.BrainCoralBlock; - materials[8981] = Material.BubbleCoralBlock; - materials[8982] = Material.FireCoralBlock; - materials[8983] = Material.HornCoralBlock; - for (int i = 8984; i <= 8985; i++) - materials[i] = Material.DeadTubeCoral; - for (int i = 8986; i <= 8987; i++) - materials[i] = Material.DeadBrainCoral; - for (int i = 8988; i <= 8989; i++) - materials[i] = Material.DeadBubbleCoral; - for (int i = 8990; i <= 8991; i++) - materials[i] = Material.DeadFireCoral; - for (int i = 8992; i <= 8993; i++) - materials[i] = Material.DeadHornCoral; - for (int i = 8994; i <= 8995; i++) - materials[i] = Material.TubeCoral; - for (int i = 8996; i <= 8997; i++) - materials[i] = Material.BrainCoral; - for (int i = 8998; i <= 8999; i++) - materials[i] = Material.BubbleCoral; - for (int i = 9000; i <= 9001; i++) - materials[i] = Material.FireCoral; - for (int i = 9002; i <= 9003; i++) - materials[i] = Material.HornCoral; - for (int i = 9004; i <= 9005; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 9006; i <= 9007; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 9008; i <= 9009; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 9010; i <= 9011; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 9012; i <= 9013; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 9014; i <= 9015; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 9016; i <= 9017; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 9018; i <= 9019; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 9020; i <= 9021; i++) - materials[i] = Material.FireCoralFan; - for (int i = 9022; i <= 9023; i++) - materials[i] = Material.HornCoralFan; - for (int i = 9024; i <= 9031; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 9032; i <= 9039; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 9040; i <= 9047; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - for (int i = 9048; i <= 9055; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 9056; i <= 9063; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 9064; i <= 9071; i++) - materials[i] = Material.TubeCoralWallFan; - for (int i = 9072; i <= 9079; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 9080; i <= 9087; i++) - materials[i] = Material.BubbleCoralWallFan; - for (int i = 9088; i <= 9095; i++) - materials[i] = Material.FireCoralWallFan; - for (int i = 9096; i <= 9103; i++) - materials[i] = Material.HornCoralWallFan; - for (int i = 9104; i <= 9111; i++) - materials[i] = Material.SeaPickle; - materials[9112] = Material.BlueIce; - for (int i = 9113; i <= 9114; i++) - materials[i] = Material.Conduit; - materials[9115] = Material.BambooSapling; - for (int i = 9116; i <= 9127; i++) - materials[i] = Material.Bamboo; - materials[9128] = Material.PottedBamboo; - materials[9129] = Material.VoidAir; - materials[9130] = Material.CaveAir; - for (int i = 9131; i <= 9132; i++) - materials[i] = Material.BubbleColumn; - for (int i = 9133; i <= 9212; i++) - materials[i] = Material.PolishedGraniteStairs; - for (int i = 9213; i <= 9292; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - for (int i = 9293; i <= 9372; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 9373; i <= 9452; i++) - materials[i] = Material.PolishedDioriteStairs; - for (int i = 9453; i <= 9532; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 9533; i <= 9612; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 9613; i <= 9692; i++) - materials[i] = Material.StoneStairs; - for (int i = 9693; i <= 9772; i++) - materials[i] = Material.SmoothSandstoneStairs; - for (int i = 9773; i <= 9852; i++) - materials[i] = Material.SmoothQuartzStairs; - for (int i = 9853; i <= 9932; i++) - materials[i] = Material.GraniteStairs; - for (int i = 9933; i <= 10012; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 10013; i <= 10092; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 10093; i <= 10172; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 10173; i <= 10252; i++) - materials[i] = Material.DioriteStairs; - for (int i = 10253; i <= 10258; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 10259; i <= 10264; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 10265; i <= 10270; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 10271; i <= 10276; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 10277; i <= 10282; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 10283; i <= 10288; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 10289; i <= 10294; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 10295; i <= 10300; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 10301; i <= 10306; i++) - materials[i] = Material.GraniteSlab; - for (int i = 10307; i <= 10312; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 10313; i <= 10318; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 10319; i <= 10324; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 10325; i <= 10330; i++) - materials[i] = Material.DioriteSlab; - for (int i = 10331; i <= 10394; i++) - materials[i] = Material.BrickWall; - for (int i = 10395; i <= 10458; i++) - materials[i] = Material.PrismarineWall; - for (int i = 10459; i <= 10522; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 10523; i <= 10586; i++) - materials[i] = Material.MossyStoneBrickWall; - for (int i = 10587; i <= 10650; i++) - materials[i] = Material.GraniteWall; - for (int i = 10651; i <= 10714; i++) - materials[i] = Material.StoneBrickWall; - for (int i = 10715; i <= 10778; i++) - materials[i] = Material.NetherBrickWall; - for (int i = 10779; i <= 10842; i++) - materials[i] = Material.AndesiteWall; - for (int i = 10843; i <= 10906; i++) - materials[i] = Material.RedNetherBrickWall; - for (int i = 10907; i <= 10970; i++) - materials[i] = Material.SandstoneWall; - for (int i = 10971; i <= 11034; i++) - materials[i] = Material.EndStoneBrickWall; - for (int i = 11035; i <= 11098; i++) - materials[i] = Material.DioriteWall; - for (int i = 11099; i <= 11130; i++) - materials[i] = Material.Scaffolding; - for (int i = 11131; i <= 11134; i++) - materials[i] = Material.Loom; - for (int i = 11135; i <= 11146; i++) - materials[i] = Material.Barrel; - for (int i = 11147; i <= 11154; i++) - materials[i] = Material.Smoker; - for (int i = 11155; i <= 11162; i++) - materials[i] = Material.BlastFurnace; - materials[11163] = Material.CartographyTable; - materials[11164] = Material.FletchingTable; - for (int i = 11165; i <= 11176; i++) - materials[i] = Material.Grindstone; - for (int i = 11177; i <= 11192; i++) - materials[i] = Material.Lectern; - materials[11193] = Material.SmithingTable; - for (int i = 11194; i <= 11197; i++) - materials[i] = Material.Stonecutter; - for (int i = 11198; i <= 11213; i++) - materials[i] = Material.Bell; - for (int i = 11214; i <= 11215; i++) - materials[i] = Material.Lantern; - for (int i = 11216; i <= 11247; i++) - materials[i] = Material.Campfire; - for (int i = 11248; i <= 11251; i++) - materials[i] = Material.SweetBerryBush; - for (int i = 11252; i <= 11255; i++) - materials[i] = Material.StructureBlock; - for (int i = 11256; i <= 11261; i++) - materials[i] = Material.Jigsaw; - for (int i = 11262; i <= 11270; i++) - materials[i] = Material.Composter; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(21, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(23, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(25, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(27, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(29, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(31, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(34, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(50, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(72, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(75, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(78, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(81, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(84, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(87, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(90, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(93, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(96, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(99, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(102, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(105, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(108, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(111, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(114, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(117, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(120, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(123, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(126, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(129, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(132, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(135, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(138, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(141, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(144, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(158, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(172, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(186, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(200, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(214, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(233, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(248, 800, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1048, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1064, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1080, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1096, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1112, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1128, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1144, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1160, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1176, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1192, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1208, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1224, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1240, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1256, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1272, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1288, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1304, 12, - [ - new("powered", ["true", "false"], 6), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 1) - ]), - new(1316, 12, - [ - new("powered", ["true", "false"], 6), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 1) - ]), - new(1328, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(1345, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(1347, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(1359, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2), - new("type", ["normal", "sticky"], 1) - ]), - new(1399, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("type", ["normal", "sticky"], 1) - ]), - new(1429, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(1435, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(1439, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(1952, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2032, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("type", ["single", "left", "right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2056, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(3355, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(3363, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(3371, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(3379, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3411, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3443, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3475, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3507, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3539, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3571, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3635, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3643, 10, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 1) - ]), - new(3653, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3733, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3741, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3749, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3757, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3765, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3773, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3781, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3805, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3807, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3871, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3873, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3875, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3877, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3879, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3881, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3883, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(3885, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(3887, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(3895, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3919, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(3929, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(3946, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(3962, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(3964, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4000, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(4002, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4006, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4010, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(4017, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4097, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4161, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4225, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4289, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4353, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4417, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4491, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4555, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4619, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4683, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4715, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4748, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4752, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4756, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4764, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4772, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4804, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4836, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4916, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4996, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(5000, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5032, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5112, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(5117, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(5125, 4, - [ - new("level", ["0", "1", "2", "3"], 1) - ]), - new(5130, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5140, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5142, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5154, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5235, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5243, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5259, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5388, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5468, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5548, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5628, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(5641, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5705, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5794, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(5802, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(5810, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5834, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5858, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5882, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5906, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5930, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5954, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5970, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5974, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5990, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5994, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6010, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6014, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6030, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6034, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6050, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6054, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6070, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6074, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6078, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6082, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6086, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("type", ["single", "left", "right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6110, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6126, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6142, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6158, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6192, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(6204, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(6207, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6287, 12, - [ - new("powered", ["true", "false"], 6), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 1) - ]), - new(6299, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(6327, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6359, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6391, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6423, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6455, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6487, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6519, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6551, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6583, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6615, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6647, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6679, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6711, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6743, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6775, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6807, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6839, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6919, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7001, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7068, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7148, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7228, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7308, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7314, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7320, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7327, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(7349, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7351, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7353, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7355, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7357, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7359, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7361, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7377, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7393, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7409, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7425, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7441, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7457, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7473, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7489, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7505, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7521, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7537, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7553, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7569, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7585, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7601, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7617, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7621, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7625, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7629, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7633, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7637, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7641, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7645, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7649, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7653, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7657, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7661, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7665, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7669, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7673, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7677, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7684, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7764, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7770, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7776, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7782, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7788, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7794, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7800, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7806, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7812, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7818, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7824, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7830, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7836, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7842, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7848, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7854, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7860, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7866, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7872, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7882, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7914, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7946, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7978, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8010, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8042, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8074, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8106, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8138, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8170, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8202, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8266, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8330, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8394, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8458, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8522, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8528, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8592, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(8599, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(8602, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8683, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(8689, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8701, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8713, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(8720, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(8724, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8736, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8742, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8748, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8754, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8760, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8766, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8772, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8778, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8784, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8790, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8796, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8802, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8808, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8814, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8820, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8826, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8832, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8838, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8842, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8846, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8850, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8854, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8858, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8862, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8866, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8870, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8874, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8878, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8882, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8886, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8890, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8894, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8898, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8934, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(8962, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(8984, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8986, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8988, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8990, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8992, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8994, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8996, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8998, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9000, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9002, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9004, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9006, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9008, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9010, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9012, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9014, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9016, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9018, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9020, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9022, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9024, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9032, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9040, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9048, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9056, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9064, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9072, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9080, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9088, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9096, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9104, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9113, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9116, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(9131, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(9133, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9213, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9293, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9373, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9453, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9533, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9613, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9693, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9773, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9853, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9933, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10013, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10093, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10173, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10253, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10259, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10265, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10271, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10277, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10283, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10289, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10295, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10301, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10307, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10313, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10319, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10325, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10331, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10395, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10459, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10523, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10587, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10651, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10715, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10779, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10843, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10907, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10971, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11035, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11099, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11131, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11135, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(11147, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(11155, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(11165, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11177, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11194, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11198, 16, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11214, 2, - [ - new("hanging", ["true", "false"], 1) - ]), - new(11216, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11248, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(11252, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(11256, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(11262, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette115.cs b/MinecraftClient/Mapping/BlockPalettes/Palette115.cs deleted file mode 100644 index e17cdd82ef..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette115.cs +++ /dev/null @@ -1,3351 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - /// - /// Defines mappings for Minecraft 1.15. - /// Automatically generated using BlockPaletteGenerator.cs - /// - public class Palette115 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette115() - { - materials[0] = Material.Air; - materials[1] = Material.Stone; - materials[2] = Material.Granite; - materials[3] = Material.PolishedGranite; - materials[4] = Material.Diorite; - materials[5] = Material.PolishedDiorite; - materials[6] = Material.Andesite; - materials[7] = Material.PolishedAndesite; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - materials[10] = Material.Dirt; - materials[11] = Material.CoarseDirt; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - materials[14] = Material.Cobblestone; - materials[15] = Material.OakPlanks; - materials[16] = Material.SprucePlanks; - materials[17] = Material.BirchPlanks; - materials[18] = Material.JunglePlanks; - materials[19] = Material.AcaciaPlanks; - materials[20] = Material.DarkOakPlanks; - for (int i = 21; i <= 22; i++) - materials[i] = Material.OakSapling; - for (int i = 23; i <= 24; i++) - materials[i] = Material.SpruceSapling; - for (int i = 25; i <= 26; i++) - materials[i] = Material.BirchSapling; - for (int i = 27; i <= 28; i++) - materials[i] = Material.JungleSapling; - for (int i = 29; i <= 30; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 31; i <= 32; i++) - materials[i] = Material.DarkOakSapling; - materials[33] = Material.Bedrock; - for (int i = 34; i <= 49; i++) - materials[i] = Material.Water; - for (int i = 50; i <= 65; i++) - materials[i] = Material.Lava; - materials[66] = Material.Sand; - materials[67] = Material.RedSand; - materials[68] = Material.Gravel; - materials[69] = Material.GoldOre; - materials[70] = Material.IronOre; - materials[71] = Material.CoalOre; - for (int i = 72; i <= 74; i++) - materials[i] = Material.OakLog; - for (int i = 75; i <= 77; i++) - materials[i] = Material.SpruceLog; - for (int i = 78; i <= 80; i++) - materials[i] = Material.BirchLog; - for (int i = 81; i <= 83; i++) - materials[i] = Material.JungleLog; - for (int i = 84; i <= 86; i++) - materials[i] = Material.AcaciaLog; - for (int i = 87; i <= 89; i++) - materials[i] = Material.DarkOakLog; - for (int i = 90; i <= 92; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 93; i <= 95; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 96; i <= 98; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 99; i <= 101; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 102; i <= 104; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 105; i <= 107; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 108; i <= 110; i++) - materials[i] = Material.OakWood; - for (int i = 111; i <= 113; i++) - materials[i] = Material.SpruceWood; - for (int i = 114; i <= 116; i++) - materials[i] = Material.BirchWood; - for (int i = 117; i <= 119; i++) - materials[i] = Material.JungleWood; - for (int i = 120; i <= 122; i++) - materials[i] = Material.AcaciaWood; - for (int i = 123; i <= 125; i++) - materials[i] = Material.DarkOakWood; - for (int i = 126; i <= 128; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 129; i <= 131; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 132; i <= 134; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 135; i <= 137; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 138; i <= 140; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 141; i <= 143; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 144; i <= 157; i++) - materials[i] = Material.OakLeaves; - for (int i = 158; i <= 171; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 172; i <= 185; i++) - materials[i] = Material.BirchLeaves; - for (int i = 186; i <= 199; i++) - materials[i] = Material.JungleLeaves; - for (int i = 200; i <= 213; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 214; i <= 227; i++) - materials[i] = Material.DarkOakLeaves; - materials[228] = Material.Sponge; - materials[229] = Material.WetSponge; - materials[230] = Material.Glass; - materials[231] = Material.LapisOre; - materials[232] = Material.LapisBlock; - for (int i = 233; i <= 244; i++) - materials[i] = Material.Dispenser; - materials[245] = Material.Sandstone; - materials[246] = Material.ChiseledSandstone; - materials[247] = Material.CutSandstone; - for (int i = 248; i <= 1047; i++) - materials[i] = Material.NoteBlock; - for (int i = 1048; i <= 1063; i++) - materials[i] = Material.WhiteBed; - for (int i = 1064; i <= 1079; i++) - materials[i] = Material.OrangeBed; - for (int i = 1080; i <= 1095; i++) - materials[i] = Material.MagentaBed; - for (int i = 1096; i <= 1111; i++) - materials[i] = Material.LightBlueBed; - for (int i = 1112; i <= 1127; i++) - materials[i] = Material.YellowBed; - for (int i = 1128; i <= 1143; i++) - materials[i] = Material.LimeBed; - for (int i = 1144; i <= 1159; i++) - materials[i] = Material.PinkBed; - for (int i = 1160; i <= 1175; i++) - materials[i] = Material.GrayBed; - for (int i = 1176; i <= 1191; i++) - materials[i] = Material.LightGrayBed; - for (int i = 1192; i <= 1207; i++) - materials[i] = Material.CyanBed; - for (int i = 1208; i <= 1223; i++) - materials[i] = Material.PurpleBed; - for (int i = 1224; i <= 1239; i++) - materials[i] = Material.BlueBed; - for (int i = 1240; i <= 1255; i++) - materials[i] = Material.BrownBed; - for (int i = 1256; i <= 1271; i++) - materials[i] = Material.GreenBed; - for (int i = 1272; i <= 1287; i++) - materials[i] = Material.RedBed; - for (int i = 1288; i <= 1303; i++) - materials[i] = Material.BlackBed; - for (int i = 1304; i <= 1315; i++) - materials[i] = Material.PoweredRail; - for (int i = 1316; i <= 1327; i++) - materials[i] = Material.DetectorRail; - for (int i = 1328; i <= 1339; i++) - materials[i] = Material.StickyPiston; - materials[1340] = Material.Cobweb; - materials[1341] = Material.ShortGrass; - materials[1342] = Material.Fern; - materials[1343] = Material.DeadBush; - materials[1344] = Material.Seagrass; - for (int i = 1345; i <= 1346; i++) - materials[i] = Material.TallSeagrass; - for (int i = 1347; i <= 1358; i++) - materials[i] = Material.Piston; - for (int i = 1359; i <= 1382; i++) - materials[i] = Material.PistonHead; - materials[1383] = Material.WhiteWool; - materials[1384] = Material.OrangeWool; - materials[1385] = Material.MagentaWool; - materials[1386] = Material.LightBlueWool; - materials[1387] = Material.YellowWool; - materials[1388] = Material.LimeWool; - materials[1389] = Material.PinkWool; - materials[1390] = Material.GrayWool; - materials[1391] = Material.LightGrayWool; - materials[1392] = Material.CyanWool; - materials[1393] = Material.PurpleWool; - materials[1394] = Material.BlueWool; - materials[1395] = Material.BrownWool; - materials[1396] = Material.GreenWool; - materials[1397] = Material.RedWool; - materials[1398] = Material.BlackWool; - for (int i = 1399; i <= 1410; i++) - materials[i] = Material.MovingPiston; - materials[1411] = Material.Dandelion; - materials[1412] = Material.Poppy; - materials[1413] = Material.BlueOrchid; - materials[1414] = Material.Allium; - materials[1415] = Material.AzureBluet; - materials[1416] = Material.RedTulip; - materials[1417] = Material.OrangeTulip; - materials[1418] = Material.WhiteTulip; - materials[1419] = Material.PinkTulip; - materials[1420] = Material.OxeyeDaisy; - materials[1421] = Material.Cornflower; - materials[1422] = Material.WitherRose; - materials[1423] = Material.LilyOfTheValley; - materials[1424] = Material.BrownMushroom; - materials[1425] = Material.RedMushroom; - materials[1426] = Material.GoldBlock; - materials[1427] = Material.IronBlock; - materials[1428] = Material.Bricks; - for (int i = 1429; i <= 1430; i++) - materials[i] = Material.Tnt; - materials[1431] = Material.Bookshelf; - materials[1432] = Material.MossyCobblestone; - materials[1433] = Material.Obsidian; - materials[1434] = Material.Torch; - for (int i = 1435; i <= 1438; i++) - materials[i] = Material.WallTorch; - for (int i = 1439; i <= 1950; i++) - materials[i] = Material.Fire; - materials[1951] = Material.Spawner; - for (int i = 1952; i <= 2031; i++) - materials[i] = Material.OakStairs; - for (int i = 2032; i <= 2055; i++) - materials[i] = Material.Chest; - for (int i = 2056; i <= 3351; i++) - materials[i] = Material.RedstoneWire; - materials[3352] = Material.DiamondOre; - materials[3353] = Material.DiamondBlock; - materials[3354] = Material.CraftingTable; - for (int i = 3355; i <= 3362; i++) - materials[i] = Material.Wheat; - for (int i = 3363; i <= 3370; i++) - materials[i] = Material.Farmland; - for (int i = 3371; i <= 3378; i++) - materials[i] = Material.Furnace; - for (int i = 3379; i <= 3410; i++) - materials[i] = Material.OakSign; - for (int i = 3411; i <= 3442; i++) - materials[i] = Material.SpruceSign; - for (int i = 3443; i <= 3474; i++) - materials[i] = Material.BirchSign; - for (int i = 3475; i <= 3506; i++) - materials[i] = Material.AcaciaSign; - for (int i = 3507; i <= 3538; i++) - materials[i] = Material.JungleSign; - for (int i = 3539; i <= 3570; i++) - materials[i] = Material.DarkOakSign; - for (int i = 3571; i <= 3634; i++) - materials[i] = Material.OakDoor; - for (int i = 3635; i <= 3642; i++) - materials[i] = Material.Ladder; - for (int i = 3643; i <= 3652; i++) - materials[i] = Material.Rail; - for (int i = 3653; i <= 3732; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 3733; i <= 3740; i++) - materials[i] = Material.OakWallSign; - for (int i = 3741; i <= 3748; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 3749; i <= 3756; i++) - materials[i] = Material.BirchWallSign; - for (int i = 3757; i <= 3764; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 3765; i <= 3772; i++) - materials[i] = Material.JungleWallSign; - for (int i = 3773; i <= 3780; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 3781; i <= 3804; i++) - materials[i] = Material.Lever; - for (int i = 3805; i <= 3806; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 3807; i <= 3870; i++) - materials[i] = Material.IronDoor; - for (int i = 3871; i <= 3872; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 3873; i <= 3874; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 3875; i <= 3876; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 3877; i <= 3878; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 3879; i <= 3880; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 3881; i <= 3882; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 3883; i <= 3884; i++) - materials[i] = Material.RedstoneOre; - for (int i = 3885; i <= 3886; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 3887; i <= 3894; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 3895; i <= 3918; i++) - materials[i] = Material.StoneButton; - for (int i = 3919; i <= 3926; i++) - materials[i] = Material.Snow; - materials[3927] = Material.Ice; - materials[3928] = Material.SnowBlock; - for (int i = 3929; i <= 3944; i++) - materials[i] = Material.Cactus; - materials[3945] = Material.Clay; - for (int i = 3946; i <= 3961; i++) - materials[i] = Material.SugarCane; - for (int i = 3962; i <= 3963; i++) - materials[i] = Material.Jukebox; - for (int i = 3964; i <= 3995; i++) - materials[i] = Material.OakFence; - materials[3996] = Material.Pumpkin; - materials[3997] = Material.Netherrack; - materials[3998] = Material.SoulSand; - materials[3999] = Material.Glowstone; - for (int i = 4000; i <= 4001; i++) - materials[i] = Material.NetherPortal; - for (int i = 4002; i <= 4005; i++) - materials[i] = Material.CarvedPumpkin; - for (int i = 4006; i <= 4009; i++) - materials[i] = Material.JackOLantern; - for (int i = 4010; i <= 4016; i++) - materials[i] = Material.Cake; - for (int i = 4017; i <= 4080; i++) - materials[i] = Material.Repeater; - materials[4081] = Material.WhiteStainedGlass; - materials[4082] = Material.OrangeStainedGlass; - materials[4083] = Material.MagentaStainedGlass; - materials[4084] = Material.LightBlueStainedGlass; - materials[4085] = Material.YellowStainedGlass; - materials[4086] = Material.LimeStainedGlass; - materials[4087] = Material.PinkStainedGlass; - materials[4088] = Material.GrayStainedGlass; - materials[4089] = Material.LightGrayStainedGlass; - materials[4090] = Material.CyanStainedGlass; - materials[4091] = Material.PurpleStainedGlass; - materials[4092] = Material.BlueStainedGlass; - materials[4093] = Material.BrownStainedGlass; - materials[4094] = Material.GreenStainedGlass; - materials[4095] = Material.RedStainedGlass; - materials[4096] = Material.BlackStainedGlass; - for (int i = 4097; i <= 4160; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 4161; i <= 4224; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 4225; i <= 4288; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 4289; i <= 4352; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 4353; i <= 4416; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 4417; i <= 4480; i++) - materials[i] = Material.DarkOakTrapdoor; - materials[4481] = Material.StoneBricks; - materials[4482] = Material.MossyStoneBricks; - materials[4483] = Material.CrackedStoneBricks; - materials[4484] = Material.ChiseledStoneBricks; - materials[4485] = Material.InfestedStone; - materials[4486] = Material.InfestedCobblestone; - materials[4487] = Material.InfestedStoneBricks; - materials[4488] = Material.InfestedMossyStoneBricks; - materials[4489] = Material.InfestedCrackedStoneBricks; - materials[4490] = Material.InfestedChiseledStoneBricks; - for (int i = 4491; i <= 4554; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 4555; i <= 4618; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 4619; i <= 4682; i++) - materials[i] = Material.MushroomStem; - for (int i = 4683; i <= 4714; i++) - materials[i] = Material.IronBars; - for (int i = 4715; i <= 4746; i++) - materials[i] = Material.GlassPane; - materials[4747] = Material.Melon; - for (int i = 4748; i <= 4751; i++) - materials[i] = Material.AttachedPumpkinStem; - for (int i = 4752; i <= 4755; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 4756; i <= 4763; i++) - materials[i] = Material.PumpkinStem; - for (int i = 4764; i <= 4771; i++) - materials[i] = Material.MelonStem; - for (int i = 4772; i <= 4803; i++) - materials[i] = Material.Vine; - for (int i = 4804; i <= 4835; i++) - materials[i] = Material.OakFenceGate; - for (int i = 4836; i <= 4915; i++) - materials[i] = Material.BrickStairs; - for (int i = 4916; i <= 4995; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 4996; i <= 4997; i++) - materials[i] = Material.Mycelium; - materials[4998] = Material.LilyPad; - materials[4999] = Material.NetherBricks; - for (int i = 5000; i <= 5031; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 5032; i <= 5111; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 5112; i <= 5115; i++) - materials[i] = Material.NetherWart; - materials[5116] = Material.EnchantingTable; - for (int i = 5117; i <= 5124; i++) - materials[i] = Material.BrewingStand; - for (int i = 5125; i <= 5128; i++) - materials[i] = Material.Cauldron; - materials[5129] = Material.EndPortal; - for (int i = 5130; i <= 5137; i++) - materials[i] = Material.EndPortalFrame; - materials[5138] = Material.EndStone; - materials[5139] = Material.DragonEgg; - for (int i = 5140; i <= 5141; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 5142; i <= 5153; i++) - materials[i] = Material.Cocoa; - for (int i = 5154; i <= 5233; i++) - materials[i] = Material.SandstoneStairs; - materials[5234] = Material.EmeraldOre; - for (int i = 5235; i <= 5242; i++) - materials[i] = Material.EnderChest; - for (int i = 5243; i <= 5258; i++) - materials[i] = Material.TripwireHook; - for (int i = 5259; i <= 5386; i++) - materials[i] = Material.Tripwire; - materials[5387] = Material.EmeraldBlock; - for (int i = 5388; i <= 5467; i++) - materials[i] = Material.SpruceStairs; - for (int i = 5468; i <= 5547; i++) - materials[i] = Material.BirchStairs; - for (int i = 5548; i <= 5627; i++) - materials[i] = Material.JungleStairs; - for (int i = 5628; i <= 5639; i++) - materials[i] = Material.CommandBlock; - materials[5640] = Material.Beacon; - for (int i = 5641; i <= 5704; i++) - materials[i] = Material.CobblestoneWall; - for (int i = 5705; i <= 5768; i++) - materials[i] = Material.MossyCobblestoneWall; - materials[5769] = Material.FlowerPot; - materials[5770] = Material.PottedOakSapling; - materials[5771] = Material.PottedSpruceSapling; - materials[5772] = Material.PottedBirchSapling; - materials[5773] = Material.PottedJungleSapling; - materials[5774] = Material.PottedAcaciaSapling; - materials[5775] = Material.PottedDarkOakSapling; - materials[5776] = Material.PottedFern; - materials[5777] = Material.PottedDandelion; - materials[5778] = Material.PottedPoppy; - materials[5779] = Material.PottedBlueOrchid; - materials[5780] = Material.PottedAllium; - materials[5781] = Material.PottedAzureBluet; - materials[5782] = Material.PottedRedTulip; - materials[5783] = Material.PottedOrangeTulip; - materials[5784] = Material.PottedWhiteTulip; - materials[5785] = Material.PottedPinkTulip; - materials[5786] = Material.PottedOxeyeDaisy; - materials[5787] = Material.PottedCornflower; - materials[5788] = Material.PottedLilyOfTheValley; - materials[5789] = Material.PottedWitherRose; - materials[5790] = Material.PottedRedMushroom; - materials[5791] = Material.PottedBrownMushroom; - materials[5792] = Material.PottedDeadBush; - materials[5793] = Material.PottedCactus; - for (int i = 5794; i <= 5801; i++) - materials[i] = Material.Carrots; - for (int i = 5802; i <= 5809; i++) - materials[i] = Material.Potatoes; - for (int i = 5810; i <= 5833; i++) - materials[i] = Material.OakButton; - for (int i = 5834; i <= 5857; i++) - materials[i] = Material.SpruceButton; - for (int i = 5858; i <= 5881; i++) - materials[i] = Material.BirchButton; - for (int i = 5882; i <= 5905; i++) - materials[i] = Material.JungleButton; - for (int i = 5906; i <= 5929; i++) - materials[i] = Material.AcaciaButton; - for (int i = 5930; i <= 5953; i++) - materials[i] = Material.DarkOakButton; - for (int i = 5954; i <= 5969; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 5970; i <= 5973; i++) - materials[i] = Material.SkeletonWallSkull; - for (int i = 5974; i <= 5989; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 5990; i <= 5993; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 5994; i <= 6009; i++) - materials[i] = Material.ZombieHead; - for (int i = 6010; i <= 6013; i++) - materials[i] = Material.ZombieWallHead; - for (int i = 6014; i <= 6029; i++) - materials[i] = Material.PlayerHead; - for (int i = 6030; i <= 6033; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 6034; i <= 6049; i++) - materials[i] = Material.CreeperHead; - for (int i = 6050; i <= 6053; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 6054; i <= 6069; i++) - materials[i] = Material.DragonHead; - for (int i = 6070; i <= 6073; i++) - materials[i] = Material.DragonWallHead; - for (int i = 6074; i <= 6077; i++) - materials[i] = Material.Anvil; - for (int i = 6078; i <= 6081; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 6082; i <= 6085; i++) - materials[i] = Material.DamagedAnvil; - for (int i = 6086; i <= 6109; i++) - materials[i] = Material.TrappedChest; - for (int i = 6110; i <= 6125; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 6126; i <= 6141; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - for (int i = 6142; i <= 6157; i++) - materials[i] = Material.Comparator; - for (int i = 6158; i <= 6189; i++) - materials[i] = Material.DaylightDetector; - materials[6190] = Material.RedstoneBlock; - materials[6191] = Material.NetherQuartzOre; - for (int i = 6192; i <= 6201; i++) - materials[i] = Material.Hopper; - materials[6202] = Material.QuartzBlock; - materials[6203] = Material.ChiseledQuartzBlock; - for (int i = 6204; i <= 6206; i++) - materials[i] = Material.QuartzPillar; - for (int i = 6207; i <= 6286; i++) - materials[i] = Material.QuartzStairs; - for (int i = 6287; i <= 6298; i++) - materials[i] = Material.ActivatorRail; - for (int i = 6299; i <= 6310; i++) - materials[i] = Material.Dropper; - materials[6311] = Material.WhiteTerracotta; - materials[6312] = Material.OrangeTerracotta; - materials[6313] = Material.MagentaTerracotta; - materials[6314] = Material.LightBlueTerracotta; - materials[6315] = Material.YellowTerracotta; - materials[6316] = Material.LimeTerracotta; - materials[6317] = Material.PinkTerracotta; - materials[6318] = Material.GrayTerracotta; - materials[6319] = Material.LightGrayTerracotta; - materials[6320] = Material.CyanTerracotta; - materials[6321] = Material.PurpleTerracotta; - materials[6322] = Material.BlueTerracotta; - materials[6323] = Material.BrownTerracotta; - materials[6324] = Material.GreenTerracotta; - materials[6325] = Material.RedTerracotta; - materials[6326] = Material.BlackTerracotta; - for (int i = 6327; i <= 6358; i++) - materials[i] = Material.WhiteStainedGlassPane; - for (int i = 6359; i <= 6390; i++) - materials[i] = Material.OrangeStainedGlassPane; - for (int i = 6391; i <= 6422; i++) - materials[i] = Material.MagentaStainedGlassPane; - for (int i = 6423; i <= 6454; i++) - materials[i] = Material.LightBlueStainedGlassPane; - for (int i = 6455; i <= 6486; i++) - materials[i] = Material.YellowStainedGlassPane; - for (int i = 6487; i <= 6518; i++) - materials[i] = Material.LimeStainedGlassPane; - for (int i = 6519; i <= 6550; i++) - materials[i] = Material.PinkStainedGlassPane; - for (int i = 6551; i <= 6582; i++) - materials[i] = Material.GrayStainedGlassPane; - for (int i = 6583; i <= 6614; i++) - materials[i] = Material.LightGrayStainedGlassPane; - for (int i = 6615; i <= 6646; i++) - materials[i] = Material.CyanStainedGlassPane; - for (int i = 6647; i <= 6678; i++) - materials[i] = Material.PurpleStainedGlassPane; - for (int i = 6679; i <= 6710; i++) - materials[i] = Material.BlueStainedGlassPane; - for (int i = 6711; i <= 6742; i++) - materials[i] = Material.BrownStainedGlassPane; - for (int i = 6743; i <= 6774; i++) - materials[i] = Material.GreenStainedGlassPane; - for (int i = 6775; i <= 6806; i++) - materials[i] = Material.RedStainedGlassPane; - for (int i = 6807; i <= 6838; i++) - materials[i] = Material.BlackStainedGlassPane; - for (int i = 6839; i <= 6918; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 6919; i <= 6998; i++) - materials[i] = Material.DarkOakStairs; - materials[6999] = Material.SlimeBlock; - materials[7000] = Material.Barrier; - for (int i = 7001; i <= 7064; i++) - materials[i] = Material.IronTrapdoor; - materials[7065] = Material.Prismarine; - materials[7066] = Material.PrismarineBricks; - materials[7067] = Material.DarkPrismarine; - for (int i = 7068; i <= 7147; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 7148; i <= 7227; i++) - materials[i] = Material.PrismarineBrickStairs; - for (int i = 7228; i <= 7307; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 7308; i <= 7313; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 7314; i <= 7319; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 7320; i <= 7325; i++) - materials[i] = Material.DarkPrismarineSlab; - materials[7326] = Material.SeaLantern; - for (int i = 7327; i <= 7329; i++) - materials[i] = Material.HayBlock; - materials[7330] = Material.WhiteCarpet; - materials[7331] = Material.OrangeCarpet; - materials[7332] = Material.MagentaCarpet; - materials[7333] = Material.LightBlueCarpet; - materials[7334] = Material.YellowCarpet; - materials[7335] = Material.LimeCarpet; - materials[7336] = Material.PinkCarpet; - materials[7337] = Material.GrayCarpet; - materials[7338] = Material.LightGrayCarpet; - materials[7339] = Material.CyanCarpet; - materials[7340] = Material.PurpleCarpet; - materials[7341] = Material.BlueCarpet; - materials[7342] = Material.BrownCarpet; - materials[7343] = Material.GreenCarpet; - materials[7344] = Material.RedCarpet; - materials[7345] = Material.BlackCarpet; - materials[7346] = Material.Terracotta; - materials[7347] = Material.CoalBlock; - materials[7348] = Material.PackedIce; - for (int i = 7349; i <= 7350; i++) - materials[i] = Material.Sunflower; - for (int i = 7351; i <= 7352; i++) - materials[i] = Material.Lilac; - for (int i = 7353; i <= 7354; i++) - materials[i] = Material.RoseBush; - for (int i = 7355; i <= 7356; i++) - materials[i] = Material.Peony; - for (int i = 7357; i <= 7358; i++) - materials[i] = Material.TallGrass; - for (int i = 7359; i <= 7360; i++) - materials[i] = Material.LargeFern; - for (int i = 7361; i <= 7376; i++) - materials[i] = Material.WhiteBanner; - for (int i = 7377; i <= 7392; i++) - materials[i] = Material.OrangeBanner; - for (int i = 7393; i <= 7408; i++) - materials[i] = Material.MagentaBanner; - for (int i = 7409; i <= 7424; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 7425; i <= 7440; i++) - materials[i] = Material.YellowBanner; - for (int i = 7441; i <= 7456; i++) - materials[i] = Material.LimeBanner; - for (int i = 7457; i <= 7472; i++) - materials[i] = Material.PinkBanner; - for (int i = 7473; i <= 7488; i++) - materials[i] = Material.GrayBanner; - for (int i = 7489; i <= 7504; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 7505; i <= 7520; i++) - materials[i] = Material.CyanBanner; - for (int i = 7521; i <= 7536; i++) - materials[i] = Material.PurpleBanner; - for (int i = 7537; i <= 7552; i++) - materials[i] = Material.BlueBanner; - for (int i = 7553; i <= 7568; i++) - materials[i] = Material.BrownBanner; - for (int i = 7569; i <= 7584; i++) - materials[i] = Material.GreenBanner; - for (int i = 7585; i <= 7600; i++) - materials[i] = Material.RedBanner; - for (int i = 7601; i <= 7616; i++) - materials[i] = Material.BlackBanner; - for (int i = 7617; i <= 7620; i++) - materials[i] = Material.WhiteWallBanner; - for (int i = 7621; i <= 7624; i++) - materials[i] = Material.OrangeWallBanner; - for (int i = 7625; i <= 7628; i++) - materials[i] = Material.MagentaWallBanner; - for (int i = 7629; i <= 7632; i++) - materials[i] = Material.LightBlueWallBanner; - for (int i = 7633; i <= 7636; i++) - materials[i] = Material.YellowWallBanner; - for (int i = 7637; i <= 7640; i++) - materials[i] = Material.LimeWallBanner; - for (int i = 7641; i <= 7644; i++) - materials[i] = Material.PinkWallBanner; - for (int i = 7645; i <= 7648; i++) - materials[i] = Material.GrayWallBanner; - for (int i = 7649; i <= 7652; i++) - materials[i] = Material.LightGrayWallBanner; - for (int i = 7653; i <= 7656; i++) - materials[i] = Material.CyanWallBanner; - for (int i = 7657; i <= 7660; i++) - materials[i] = Material.PurpleWallBanner; - for (int i = 7661; i <= 7664; i++) - materials[i] = Material.BlueWallBanner; - for (int i = 7665; i <= 7668; i++) - materials[i] = Material.BrownWallBanner; - for (int i = 7669; i <= 7672; i++) - materials[i] = Material.GreenWallBanner; - for (int i = 7673; i <= 7676; i++) - materials[i] = Material.RedWallBanner; - for (int i = 7677; i <= 7680; i++) - materials[i] = Material.BlackWallBanner; - materials[7681] = Material.RedSandstone; - materials[7682] = Material.ChiseledRedSandstone; - materials[7683] = Material.CutRedSandstone; - for (int i = 7684; i <= 7763; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 7764; i <= 7769; i++) - materials[i] = Material.OakSlab; - for (int i = 7770; i <= 7775; i++) - materials[i] = Material.SpruceSlab; - for (int i = 7776; i <= 7781; i++) - materials[i] = Material.BirchSlab; - for (int i = 7782; i <= 7787; i++) - materials[i] = Material.JungleSlab; - for (int i = 7788; i <= 7793; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 7794; i <= 7799; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 7800; i <= 7805; i++) - materials[i] = Material.StoneSlab; - for (int i = 7806; i <= 7811; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 7812; i <= 7817; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 7818; i <= 7823; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 7824; i <= 7829; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 7830; i <= 7835; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 7836; i <= 7841; i++) - materials[i] = Material.BrickSlab; - for (int i = 7842; i <= 7847; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 7848; i <= 7853; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 7854; i <= 7859; i++) - materials[i] = Material.QuartzSlab; - for (int i = 7860; i <= 7865; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 7866; i <= 7871; i++) - materials[i] = Material.CutRedSandstoneSlab; - for (int i = 7872; i <= 7877; i++) - materials[i] = Material.PurpurSlab; - materials[7878] = Material.SmoothStone; - materials[7879] = Material.SmoothSandstone; - materials[7880] = Material.SmoothQuartz; - materials[7881] = Material.SmoothRedSandstone; - for (int i = 7882; i <= 7913; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 7914; i <= 7945; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 7946; i <= 7977; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 7978; i <= 8009; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 8010; i <= 8041; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 8042; i <= 8073; i++) - materials[i] = Material.SpruceFence; - for (int i = 8074; i <= 8105; i++) - materials[i] = Material.BirchFence; - for (int i = 8106; i <= 8137; i++) - materials[i] = Material.JungleFence; - for (int i = 8138; i <= 8169; i++) - materials[i] = Material.AcaciaFence; - for (int i = 8170; i <= 8201; i++) - materials[i] = Material.DarkOakFence; - for (int i = 8202; i <= 8265; i++) - materials[i] = Material.SpruceDoor; - for (int i = 8266; i <= 8329; i++) - materials[i] = Material.BirchDoor; - for (int i = 8330; i <= 8393; i++) - materials[i] = Material.JungleDoor; - for (int i = 8394; i <= 8457; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 8458; i <= 8521; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 8522; i <= 8527; i++) - materials[i] = Material.EndRod; - for (int i = 8528; i <= 8591; i++) - materials[i] = Material.ChorusPlant; - for (int i = 8592; i <= 8597; i++) - materials[i] = Material.ChorusFlower; - materials[8598] = Material.PurpurBlock; - for (int i = 8599; i <= 8601; i++) - materials[i] = Material.PurpurPillar; - for (int i = 8602; i <= 8681; i++) - materials[i] = Material.PurpurStairs; - materials[8682] = Material.EndStoneBricks; - for (int i = 8683; i <= 8686; i++) - materials[i] = Material.Beetroots; - materials[8687] = Material.DirtPath; - materials[8688] = Material.EndGateway; - for (int i = 8689; i <= 8700; i++) - materials[i] = Material.RepeatingCommandBlock; - for (int i = 8701; i <= 8712; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 8713; i <= 8716; i++) - materials[i] = Material.FrostedIce; - materials[8717] = Material.MagmaBlock; - materials[8718] = Material.NetherWartBlock; - materials[8719] = Material.RedNetherBricks; - for (int i = 8720; i <= 8722; i++) - materials[i] = Material.BoneBlock; - materials[8723] = Material.StructureVoid; - for (int i = 8724; i <= 8735; i++) - materials[i] = Material.Observer; - for (int i = 8736; i <= 8741; i++) - materials[i] = Material.ShulkerBox; - for (int i = 8742; i <= 8747; i++) - materials[i] = Material.WhiteShulkerBox; - for (int i = 8748; i <= 8753; i++) - materials[i] = Material.OrangeShulkerBox; - for (int i = 8754; i <= 8759; i++) - materials[i] = Material.MagentaShulkerBox; - for (int i = 8760; i <= 8765; i++) - materials[i] = Material.LightBlueShulkerBox; - for (int i = 8766; i <= 8771; i++) - materials[i] = Material.YellowShulkerBox; - for (int i = 8772; i <= 8777; i++) - materials[i] = Material.LimeShulkerBox; - for (int i = 8778; i <= 8783; i++) - materials[i] = Material.PinkShulkerBox; - for (int i = 8784; i <= 8789; i++) - materials[i] = Material.GrayShulkerBox; - for (int i = 8790; i <= 8795; i++) - materials[i] = Material.LightGrayShulkerBox; - for (int i = 8796; i <= 8801; i++) - materials[i] = Material.CyanShulkerBox; - for (int i = 8802; i <= 8807; i++) - materials[i] = Material.PurpleShulkerBox; - for (int i = 8808; i <= 8813; i++) - materials[i] = Material.BlueShulkerBox; - for (int i = 8814; i <= 8819; i++) - materials[i] = Material.BrownShulkerBox; - for (int i = 8820; i <= 8825; i++) - materials[i] = Material.GreenShulkerBox; - for (int i = 8826; i <= 8831; i++) - materials[i] = Material.RedShulkerBox; - for (int i = 8832; i <= 8837; i++) - materials[i] = Material.BlackShulkerBox; - for (int i = 8838; i <= 8841; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 8842; i <= 8845; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 8846; i <= 8849; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 8850; i <= 8853; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 8854; i <= 8857; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 8858; i <= 8861; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 8862; i <= 8865; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 8866; i <= 8869; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 8870; i <= 8873; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 8874; i <= 8877; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 8878; i <= 8881; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 8882; i <= 8885; i++) - materials[i] = Material.BlueGlazedTerracotta; - for (int i = 8886; i <= 8889; i++) - materials[i] = Material.BrownGlazedTerracotta; - for (int i = 8890; i <= 8893; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 8894; i <= 8897; i++) - materials[i] = Material.RedGlazedTerracotta; - for (int i = 8898; i <= 8901; i++) - materials[i] = Material.BlackGlazedTerracotta; - materials[8902] = Material.WhiteConcrete; - materials[8903] = Material.OrangeConcrete; - materials[8904] = Material.MagentaConcrete; - materials[8905] = Material.LightBlueConcrete; - materials[8906] = Material.YellowConcrete; - materials[8907] = Material.LimeConcrete; - materials[8908] = Material.PinkConcrete; - materials[8909] = Material.GrayConcrete; - materials[8910] = Material.LightGrayConcrete; - materials[8911] = Material.CyanConcrete; - materials[8912] = Material.PurpleConcrete; - materials[8913] = Material.BlueConcrete; - materials[8914] = Material.BrownConcrete; - materials[8915] = Material.GreenConcrete; - materials[8916] = Material.RedConcrete; - materials[8917] = Material.BlackConcrete; - materials[8918] = Material.WhiteConcretePowder; - materials[8919] = Material.OrangeConcretePowder; - materials[8920] = Material.MagentaConcretePowder; - materials[8921] = Material.LightBlueConcretePowder; - materials[8922] = Material.YellowConcretePowder; - materials[8923] = Material.LimeConcretePowder; - materials[8924] = Material.PinkConcretePowder; - materials[8925] = Material.GrayConcretePowder; - materials[8926] = Material.LightGrayConcretePowder; - materials[8927] = Material.CyanConcretePowder; - materials[8928] = Material.PurpleConcretePowder; - materials[8929] = Material.BlueConcretePowder; - materials[8930] = Material.BrownConcretePowder; - materials[8931] = Material.GreenConcretePowder; - materials[8932] = Material.RedConcretePowder; - materials[8933] = Material.BlackConcretePowder; - for (int i = 8934; i <= 8959; i++) - materials[i] = Material.Kelp; - materials[8960] = Material.KelpPlant; - materials[8961] = Material.DriedKelpBlock; - for (int i = 8962; i <= 8973; i++) - materials[i] = Material.TurtleEgg; - materials[8974] = Material.DeadTubeCoralBlock; - materials[8975] = Material.DeadBrainCoralBlock; - materials[8976] = Material.DeadBubbleCoralBlock; - materials[8977] = Material.DeadFireCoralBlock; - materials[8978] = Material.DeadHornCoralBlock; - materials[8979] = Material.TubeCoralBlock; - materials[8980] = Material.BrainCoralBlock; - materials[8981] = Material.BubbleCoralBlock; - materials[8982] = Material.FireCoralBlock; - materials[8983] = Material.HornCoralBlock; - for (int i = 8984; i <= 8985; i++) - materials[i] = Material.DeadTubeCoral; - for (int i = 8986; i <= 8987; i++) - materials[i] = Material.DeadBrainCoral; - for (int i = 8988; i <= 8989; i++) - materials[i] = Material.DeadBubbleCoral; - for (int i = 8990; i <= 8991; i++) - materials[i] = Material.DeadFireCoral; - for (int i = 8992; i <= 8993; i++) - materials[i] = Material.DeadHornCoral; - for (int i = 8994; i <= 8995; i++) - materials[i] = Material.TubeCoral; - for (int i = 8996; i <= 8997; i++) - materials[i] = Material.BrainCoral; - for (int i = 8998; i <= 8999; i++) - materials[i] = Material.BubbleCoral; - for (int i = 9000; i <= 9001; i++) - materials[i] = Material.FireCoral; - for (int i = 9002; i <= 9003; i++) - materials[i] = Material.HornCoral; - for (int i = 9004; i <= 9005; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 9006; i <= 9007; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 9008; i <= 9009; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 9010; i <= 9011; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 9012; i <= 9013; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 9014; i <= 9015; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 9016; i <= 9017; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 9018; i <= 9019; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 9020; i <= 9021; i++) - materials[i] = Material.FireCoralFan; - for (int i = 9022; i <= 9023; i++) - materials[i] = Material.HornCoralFan; - for (int i = 9024; i <= 9031; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 9032; i <= 9039; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 9040; i <= 9047; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - for (int i = 9048; i <= 9055; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 9056; i <= 9063; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 9064; i <= 9071; i++) - materials[i] = Material.TubeCoralWallFan; - for (int i = 9072; i <= 9079; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 9080; i <= 9087; i++) - materials[i] = Material.BubbleCoralWallFan; - for (int i = 9088; i <= 9095; i++) - materials[i] = Material.FireCoralWallFan; - for (int i = 9096; i <= 9103; i++) - materials[i] = Material.HornCoralWallFan; - for (int i = 9104; i <= 9111; i++) - materials[i] = Material.SeaPickle; - materials[9112] = Material.BlueIce; - for (int i = 9113; i <= 9114; i++) - materials[i] = Material.Conduit; - materials[9115] = Material.BambooSapling; - for (int i = 9116; i <= 9127; i++) - materials[i] = Material.Bamboo; - materials[9128] = Material.PottedBamboo; - materials[9129] = Material.VoidAir; - materials[9130] = Material.CaveAir; - for (int i = 9131; i <= 9132; i++) - materials[i] = Material.BubbleColumn; - for (int i = 9133; i <= 9212; i++) - materials[i] = Material.PolishedGraniteStairs; - for (int i = 9213; i <= 9292; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - for (int i = 9293; i <= 9372; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 9373; i <= 9452; i++) - materials[i] = Material.PolishedDioriteStairs; - for (int i = 9453; i <= 9532; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 9533; i <= 9612; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 9613; i <= 9692; i++) - materials[i] = Material.StoneStairs; - for (int i = 9693; i <= 9772; i++) - materials[i] = Material.SmoothSandstoneStairs; - for (int i = 9773; i <= 9852; i++) - materials[i] = Material.SmoothQuartzStairs; - for (int i = 9853; i <= 9932; i++) - materials[i] = Material.GraniteStairs; - for (int i = 9933; i <= 10012; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 10013; i <= 10092; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 10093; i <= 10172; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 10173; i <= 10252; i++) - materials[i] = Material.DioriteStairs; - for (int i = 10253; i <= 10258; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 10259; i <= 10264; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 10265; i <= 10270; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 10271; i <= 10276; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 10277; i <= 10282; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 10283; i <= 10288; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 10289; i <= 10294; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 10295; i <= 10300; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 10301; i <= 10306; i++) - materials[i] = Material.GraniteSlab; - for (int i = 10307; i <= 10312; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 10313; i <= 10318; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 10319; i <= 10324; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 10325; i <= 10330; i++) - materials[i] = Material.DioriteSlab; - for (int i = 10331; i <= 10394; i++) - materials[i] = Material.BrickWall; - for (int i = 10395; i <= 10458; i++) - materials[i] = Material.PrismarineWall; - for (int i = 10459; i <= 10522; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 10523; i <= 10586; i++) - materials[i] = Material.MossyStoneBrickWall; - for (int i = 10587; i <= 10650; i++) - materials[i] = Material.GraniteWall; - for (int i = 10651; i <= 10714; i++) - materials[i] = Material.StoneBrickWall; - for (int i = 10715; i <= 10778; i++) - materials[i] = Material.NetherBrickWall; - for (int i = 10779; i <= 10842; i++) - materials[i] = Material.AndesiteWall; - for (int i = 10843; i <= 10906; i++) - materials[i] = Material.RedNetherBrickWall; - for (int i = 10907; i <= 10970; i++) - materials[i] = Material.SandstoneWall; - for (int i = 10971; i <= 11034; i++) - materials[i] = Material.EndStoneBrickWall; - for (int i = 11035; i <= 11098; i++) - materials[i] = Material.DioriteWall; - for (int i = 11099; i <= 11130; i++) - materials[i] = Material.Scaffolding; - for (int i = 11131; i <= 11134; i++) - materials[i] = Material.Loom; - for (int i = 11135; i <= 11146; i++) - materials[i] = Material.Barrel; - for (int i = 11147; i <= 11154; i++) - materials[i] = Material.Smoker; - for (int i = 11155; i <= 11162; i++) - materials[i] = Material.BlastFurnace; - materials[11163] = Material.CartographyTable; - materials[11164] = Material.FletchingTable; - for (int i = 11165; i <= 11176; i++) - materials[i] = Material.Grindstone; - for (int i = 11177; i <= 11192; i++) - materials[i] = Material.Lectern; - materials[11193] = Material.SmithingTable; - for (int i = 11194; i <= 11197; i++) - materials[i] = Material.Stonecutter; - for (int i = 11198; i <= 11229; i++) - materials[i] = Material.Bell; - for (int i = 11230; i <= 11231; i++) - materials[i] = Material.Lantern; - for (int i = 11232; i <= 11263; i++) - materials[i] = Material.Campfire; - for (int i = 11264; i <= 11267; i++) - materials[i] = Material.SweetBerryBush; - for (int i = 11268; i <= 11271; i++) - materials[i] = Material.StructureBlock; - for (int i = 11272; i <= 11277; i++) - materials[i] = Material.Jigsaw; - for (int i = 11278; i <= 11286; i++) - materials[i] = Material.Composter; - for (int i = 11287; i <= 11310; i++) - materials[i] = Material.BeeNest; - for (int i = 11311; i <= 11334; i++) - materials[i] = Material.Beehive; - materials[11335] = Material.HoneyBlock; - materials[11336] = Material.HoneycombBlock; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(21, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(23, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(25, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(27, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(29, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(31, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(34, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(50, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(72, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(75, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(78, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(81, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(84, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(87, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(90, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(93, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(96, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(99, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(102, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(105, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(108, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(111, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(114, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(117, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(120, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(123, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(126, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(129, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(132, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(135, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(138, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(141, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(144, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(158, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(172, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(186, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(200, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(214, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(233, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(248, 800, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1048, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1064, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1080, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1096, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1112, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1128, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1144, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1160, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1176, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1192, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1208, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1224, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1240, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1256, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1272, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1288, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1304, 12, - [ - new("powered", ["true", "false"], 6), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 1) - ]), - new(1316, 12, - [ - new("powered", ["true", "false"], 6), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 1) - ]), - new(1328, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(1345, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(1347, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(1359, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2), - new("type", ["normal", "sticky"], 1) - ]), - new(1399, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("type", ["normal", "sticky"], 1) - ]), - new(1429, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(1435, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(1439, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(1952, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2032, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("type", ["single", "left", "right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2056, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(3355, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(3363, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(3371, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(3379, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3411, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3443, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3475, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3507, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3539, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3571, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3635, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3643, 10, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 1) - ]), - new(3653, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3733, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3741, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3749, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3757, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3765, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3773, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3781, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3805, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3807, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3871, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3873, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3875, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3877, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3879, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3881, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3883, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(3885, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(3887, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(3895, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3919, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(3929, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(3946, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(3962, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(3964, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4000, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(4002, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4006, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4010, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(4017, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4097, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4161, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4225, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4289, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4353, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4417, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4491, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4555, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4619, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4683, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4715, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4748, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4752, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4756, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4764, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4772, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4804, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4836, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4916, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4996, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(5000, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5032, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5112, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(5117, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(5125, 4, - [ - new("level", ["0", "1", "2", "3"], 1) - ]), - new(5130, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5140, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5142, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5154, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5235, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5243, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5259, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5388, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5468, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5548, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5628, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(5641, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5705, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5794, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(5802, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(5810, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5834, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5858, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5882, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5906, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5930, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5954, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5970, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5974, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5990, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5994, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6010, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6014, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6030, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6034, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6050, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6054, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6070, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6074, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6078, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6082, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6086, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("type", ["single", "left", "right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6110, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6126, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6142, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6158, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6192, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(6204, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(6207, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6287, 12, - [ - new("powered", ["true", "false"], 6), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 1) - ]), - new(6299, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(6327, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6359, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6391, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6423, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6455, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6487, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6519, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6551, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6583, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6615, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6647, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6679, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6711, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6743, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6775, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6807, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6839, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6919, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7001, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7068, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7148, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7228, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7308, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7314, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7320, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7327, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(7349, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7351, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7353, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7355, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7357, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7359, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7361, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7377, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7393, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7409, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7425, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7441, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7457, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7473, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7489, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7505, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7521, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7537, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7553, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7569, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7585, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7601, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7617, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7621, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7625, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7629, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7633, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7637, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7641, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7645, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7649, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7653, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7657, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7661, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7665, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7669, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7673, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7677, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7684, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7764, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7770, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7776, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7782, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7788, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7794, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7800, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7806, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7812, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7818, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7824, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7830, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7836, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7842, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7848, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7854, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7860, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7866, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7872, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7882, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7914, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7946, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7978, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8010, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8042, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8074, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8106, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8138, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8170, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8202, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8266, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8330, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8394, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8458, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8522, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8528, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8592, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(8599, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(8602, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8683, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(8689, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8701, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8713, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(8720, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(8724, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8736, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8742, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8748, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8754, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8760, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8766, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8772, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8778, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8784, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8790, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8796, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8802, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8808, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8814, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8820, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8826, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8832, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8838, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8842, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8846, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8850, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8854, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8858, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8862, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8866, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8870, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8874, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8878, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8882, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8886, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8890, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8894, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8898, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8934, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(8962, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(8984, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8986, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8988, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8990, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8992, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8994, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8996, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(8998, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9000, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9002, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9004, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9006, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9008, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9010, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9012, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9014, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9016, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9018, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9020, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9022, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9024, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9032, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9040, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9048, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9056, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9064, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9072, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9080, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9088, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9096, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9104, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9113, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9116, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(9131, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(9133, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9213, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9293, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9373, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9453, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9533, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9613, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9693, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9773, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9853, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9933, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10013, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10093, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10173, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10253, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10259, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10265, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10271, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10277, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10283, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10289, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10295, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10301, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10307, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10313, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10319, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10325, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10331, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10395, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10459, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10523, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10587, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10651, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10715, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10779, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10843, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10907, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10971, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11035, 64, - [ - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11099, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11131, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11135, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(11147, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(11155, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(11165, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11177, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11194, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11198, 32, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11230, 2, - [ - new("hanging", ["true", "false"], 1) - ]), - new(11232, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11264, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(11268, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(11272, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(11278, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(11287, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(11311, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette116.cs b/MinecraftClient/Mapping/BlockPalettes/Palette116.cs deleted file mode 100644 index 59b77bf5cb..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette116.cs +++ /dev/null @@ -1,3756 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - public class Palette116 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette116() - { - materials[0] = Material.Air; - materials[1] = Material.Stone; - materials[2] = Material.Granite; - materials[3] = Material.PolishedGranite; - materials[4] = Material.Diorite; - materials[5] = Material.PolishedDiorite; - materials[6] = Material.Andesite; - materials[7] = Material.PolishedAndesite; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - materials[10] = Material.Dirt; - materials[11] = Material.CoarseDirt; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - materials[14] = Material.Cobblestone; - materials[15] = Material.OakPlanks; - materials[16] = Material.SprucePlanks; - materials[17] = Material.BirchPlanks; - materials[18] = Material.JunglePlanks; - materials[19] = Material.AcaciaPlanks; - materials[20] = Material.DarkOakPlanks; - for (int i = 21; i <= 22; i++) - materials[i] = Material.OakSapling; - for (int i = 23; i <= 24; i++) - materials[i] = Material.SpruceSapling; - for (int i = 25; i <= 26; i++) - materials[i] = Material.BirchSapling; - for (int i = 27; i <= 28; i++) - materials[i] = Material.JungleSapling; - for (int i = 29; i <= 30; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 31; i <= 32; i++) - materials[i] = Material.DarkOakSapling; - materials[33] = Material.Bedrock; - for (int i = 34; i <= 49; i++) - materials[i] = Material.Water; - for (int i = 50; i <= 65; i++) - materials[i] = Material.Lava; - materials[66] = Material.Sand; - materials[67] = Material.RedSand; - materials[68] = Material.Gravel; - materials[69] = Material.GoldOre; - materials[70] = Material.IronOre; - materials[71] = Material.CoalOre; - materials[72] = Material.NetherGoldOre; - for (int i = 73; i <= 75; i++) - materials[i] = Material.OakLog; - for (int i = 76; i <= 78; i++) - materials[i] = Material.SpruceLog; - for (int i = 79; i <= 81; i++) - materials[i] = Material.BirchLog; - for (int i = 82; i <= 84; i++) - materials[i] = Material.JungleLog; - for (int i = 85; i <= 87; i++) - materials[i] = Material.AcaciaLog; - for (int i = 88; i <= 90; i++) - materials[i] = Material.DarkOakLog; - for (int i = 91; i <= 93; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 94; i <= 96; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 97; i <= 99; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 100; i <= 102; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 103; i <= 105; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 106; i <= 108; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 109; i <= 111; i++) - materials[i] = Material.OakWood; - for (int i = 112; i <= 114; i++) - materials[i] = Material.SpruceWood; - for (int i = 115; i <= 117; i++) - materials[i] = Material.BirchWood; - for (int i = 118; i <= 120; i++) - materials[i] = Material.JungleWood; - for (int i = 121; i <= 123; i++) - materials[i] = Material.AcaciaWood; - for (int i = 124; i <= 126; i++) - materials[i] = Material.DarkOakWood; - for (int i = 127; i <= 129; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 130; i <= 132; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 133; i <= 135; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 136; i <= 138; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 139; i <= 141; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 142; i <= 144; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 145; i <= 158; i++) - materials[i] = Material.OakLeaves; - for (int i = 159; i <= 172; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 173; i <= 186; i++) - materials[i] = Material.BirchLeaves; - for (int i = 187; i <= 200; i++) - materials[i] = Material.JungleLeaves; - for (int i = 201; i <= 214; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 215; i <= 228; i++) - materials[i] = Material.DarkOakLeaves; - materials[229] = Material.Sponge; - materials[230] = Material.WetSponge; - materials[231] = Material.Glass; - materials[232] = Material.LapisOre; - materials[233] = Material.LapisBlock; - for (int i = 234; i <= 245; i++) - materials[i] = Material.Dispenser; - materials[246] = Material.Sandstone; - materials[247] = Material.ChiseledSandstone; - materials[248] = Material.CutSandstone; - for (int i = 249; i <= 1048; i++) - materials[i] = Material.NoteBlock; - for (int i = 1049; i <= 1064; i++) - materials[i] = Material.WhiteBed; - for (int i = 1065; i <= 1080; i++) - materials[i] = Material.OrangeBed; - for (int i = 1081; i <= 1096; i++) - materials[i] = Material.MagentaBed; - for (int i = 1097; i <= 1112; i++) - materials[i] = Material.LightBlueBed; - for (int i = 1113; i <= 1128; i++) - materials[i] = Material.YellowBed; - for (int i = 1129; i <= 1144; i++) - materials[i] = Material.LimeBed; - for (int i = 1145; i <= 1160; i++) - materials[i] = Material.PinkBed; - for (int i = 1161; i <= 1176; i++) - materials[i] = Material.GrayBed; - for (int i = 1177; i <= 1192; i++) - materials[i] = Material.LightGrayBed; - for (int i = 1193; i <= 1208; i++) - materials[i] = Material.CyanBed; - for (int i = 1209; i <= 1224; i++) - materials[i] = Material.PurpleBed; - for (int i = 1225; i <= 1240; i++) - materials[i] = Material.BlueBed; - for (int i = 1241; i <= 1256; i++) - materials[i] = Material.BrownBed; - for (int i = 1257; i <= 1272; i++) - materials[i] = Material.GreenBed; - for (int i = 1273; i <= 1288; i++) - materials[i] = Material.RedBed; - for (int i = 1289; i <= 1304; i++) - materials[i] = Material.BlackBed; - for (int i = 1305; i <= 1316; i++) - materials[i] = Material.PoweredRail; - for (int i = 1317; i <= 1328; i++) - materials[i] = Material.DetectorRail; - for (int i = 1329; i <= 1340; i++) - materials[i] = Material.StickyPiston; - materials[1341] = Material.Cobweb; - materials[1342] = Material.ShortGrass; - materials[1343] = Material.Fern; - materials[1344] = Material.DeadBush; - materials[1345] = Material.Seagrass; - for (int i = 1346; i <= 1347; i++) - materials[i] = Material.TallSeagrass; - for (int i = 1348; i <= 1359; i++) - materials[i] = Material.Piston; - for (int i = 1360; i <= 1383; i++) - materials[i] = Material.PistonHead; - materials[1384] = Material.WhiteWool; - materials[1385] = Material.OrangeWool; - materials[1386] = Material.MagentaWool; - materials[1387] = Material.LightBlueWool; - materials[1388] = Material.YellowWool; - materials[1389] = Material.LimeWool; - materials[1390] = Material.PinkWool; - materials[1391] = Material.GrayWool; - materials[1392] = Material.LightGrayWool; - materials[1393] = Material.CyanWool; - materials[1394] = Material.PurpleWool; - materials[1395] = Material.BlueWool; - materials[1396] = Material.BrownWool; - materials[1397] = Material.GreenWool; - materials[1398] = Material.RedWool; - materials[1399] = Material.BlackWool; - for (int i = 1400; i <= 1411; i++) - materials[i] = Material.MovingPiston; - materials[1412] = Material.Dandelion; - materials[1413] = Material.Poppy; - materials[1414] = Material.BlueOrchid; - materials[1415] = Material.Allium; - materials[1416] = Material.AzureBluet; - materials[1417] = Material.RedTulip; - materials[1418] = Material.OrangeTulip; - materials[1419] = Material.WhiteTulip; - materials[1420] = Material.PinkTulip; - materials[1421] = Material.OxeyeDaisy; - materials[1422] = Material.Cornflower; - materials[1423] = Material.WitherRose; - materials[1424] = Material.LilyOfTheValley; - materials[1425] = Material.BrownMushroom; - materials[1426] = Material.RedMushroom; - materials[1427] = Material.GoldBlock; - materials[1428] = Material.IronBlock; - materials[1429] = Material.Bricks; - for (int i = 1430; i <= 1431; i++) - materials[i] = Material.Tnt; - materials[1432] = Material.Bookshelf; - materials[1433] = Material.MossyCobblestone; - materials[1434] = Material.Obsidian; - materials[1435] = Material.Torch; - for (int i = 1436; i <= 1439; i++) - materials[i] = Material.WallTorch; - for (int i = 1440; i <= 1951; i++) - materials[i] = Material.Fire; - materials[1952] = Material.SoulFire; - materials[1953] = Material.Spawner; - for (int i = 1954; i <= 2033; i++) - materials[i] = Material.OakStairs; - for (int i = 2034; i <= 2057; i++) - materials[i] = Material.Chest; - for (int i = 2058; i <= 3353; i++) - materials[i] = Material.RedstoneWire; - materials[3354] = Material.DiamondOre; - materials[3355] = Material.DiamondBlock; - materials[3356] = Material.CraftingTable; - for (int i = 3357; i <= 3364; i++) - materials[i] = Material.Wheat; - for (int i = 3365; i <= 3372; i++) - materials[i] = Material.Farmland; - for (int i = 3373; i <= 3380; i++) - materials[i] = Material.Furnace; - for (int i = 3381; i <= 3412; i++) - materials[i] = Material.OakSign; - for (int i = 3413; i <= 3444; i++) - materials[i] = Material.SpruceSign; - for (int i = 3445; i <= 3476; i++) - materials[i] = Material.BirchSign; - for (int i = 3477; i <= 3508; i++) - materials[i] = Material.AcaciaSign; - for (int i = 3509; i <= 3540; i++) - materials[i] = Material.JungleSign; - for (int i = 3541; i <= 3572; i++) - materials[i] = Material.DarkOakSign; - for (int i = 3573; i <= 3636; i++) - materials[i] = Material.OakDoor; - for (int i = 3637; i <= 3644; i++) - materials[i] = Material.Ladder; - for (int i = 3645; i <= 3654; i++) - materials[i] = Material.Rail; - for (int i = 3655; i <= 3734; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 3735; i <= 3742; i++) - materials[i] = Material.OakWallSign; - for (int i = 3743; i <= 3750; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 3751; i <= 3758; i++) - materials[i] = Material.BirchWallSign; - for (int i = 3759; i <= 3766; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 3767; i <= 3774; i++) - materials[i] = Material.JungleWallSign; - for (int i = 3775; i <= 3782; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 3783; i <= 3806; i++) - materials[i] = Material.Lever; - for (int i = 3807; i <= 3808; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 3809; i <= 3872; i++) - materials[i] = Material.IronDoor; - for (int i = 3873; i <= 3874; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 3875; i <= 3876; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 3877; i <= 3878; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 3879; i <= 3880; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 3881; i <= 3882; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 3883; i <= 3884; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 3885; i <= 3886; i++) - materials[i] = Material.RedstoneOre; - for (int i = 3887; i <= 3888; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 3889; i <= 3896; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 3897; i <= 3920; i++) - materials[i] = Material.StoneButton; - for (int i = 3921; i <= 3928; i++) - materials[i] = Material.Snow; - materials[3929] = Material.Ice; - materials[3930] = Material.SnowBlock; - for (int i = 3931; i <= 3946; i++) - materials[i] = Material.Cactus; - materials[3947] = Material.Clay; - for (int i = 3948; i <= 3963; i++) - materials[i] = Material.SugarCane; - for (int i = 3964; i <= 3965; i++) - materials[i] = Material.Jukebox; - for (int i = 3966; i <= 3997; i++) - materials[i] = Material.OakFence; - materials[3998] = Material.Pumpkin; - materials[3999] = Material.Netherrack; - materials[4000] = Material.SoulSand; - materials[4001] = Material.SoulSoil; - for (int i = 4002; i <= 4004; i++) - materials[i] = Material.Basalt; - for (int i = 4005; i <= 4007; i++) - materials[i] = Material.PolishedBasalt; - materials[4008] = Material.SoulTorch; - for (int i = 4009; i <= 4012; i++) - materials[i] = Material.SoulWallTorch; - materials[4013] = Material.Glowstone; - for (int i = 4014; i <= 4015; i++) - materials[i] = Material.NetherPortal; - for (int i = 4016; i <= 4019; i++) - materials[i] = Material.CarvedPumpkin; - for (int i = 4020; i <= 4023; i++) - materials[i] = Material.JackOLantern; - for (int i = 4024; i <= 4030; i++) - materials[i] = Material.Cake; - for (int i = 4031; i <= 4094; i++) - materials[i] = Material.Repeater; - materials[4095] = Material.WhiteStainedGlass; - materials[4096] = Material.OrangeStainedGlass; - materials[4097] = Material.MagentaStainedGlass; - materials[4098] = Material.LightBlueStainedGlass; - materials[4099] = Material.YellowStainedGlass; - materials[4100] = Material.LimeStainedGlass; - materials[4101] = Material.PinkStainedGlass; - materials[4102] = Material.GrayStainedGlass; - materials[4103] = Material.LightGrayStainedGlass; - materials[4104] = Material.CyanStainedGlass; - materials[4105] = Material.PurpleStainedGlass; - materials[4106] = Material.BlueStainedGlass; - materials[4107] = Material.BrownStainedGlass; - materials[4108] = Material.GreenStainedGlass; - materials[4109] = Material.RedStainedGlass; - materials[4110] = Material.BlackStainedGlass; - for (int i = 4111; i <= 4174; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 4175; i <= 4238; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 4239; i <= 4302; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 4303; i <= 4366; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 4367; i <= 4430; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 4431; i <= 4494; i++) - materials[i] = Material.DarkOakTrapdoor; - materials[4495] = Material.StoneBricks; - materials[4496] = Material.MossyStoneBricks; - materials[4497] = Material.CrackedStoneBricks; - materials[4498] = Material.ChiseledStoneBricks; - materials[4499] = Material.InfestedStone; - materials[4500] = Material.InfestedCobblestone; - materials[4501] = Material.InfestedStoneBricks; - materials[4502] = Material.InfestedMossyStoneBricks; - materials[4503] = Material.InfestedCrackedStoneBricks; - materials[4504] = Material.InfestedChiseledStoneBricks; - for (int i = 4505; i <= 4568; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 4569; i <= 4632; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 4633; i <= 4696; i++) - materials[i] = Material.MushroomStem; - for (int i = 4697; i <= 4728; i++) - materials[i] = Material.IronBars; - for (int i = 4729; i <= 4734; i++) - materials[i] = Material.Chain; - for (int i = 4735; i <= 4766; i++) - materials[i] = Material.GlassPane; - materials[4767] = Material.Melon; - for (int i = 4768; i <= 4771; i++) - materials[i] = Material.AttachedPumpkinStem; - for (int i = 4772; i <= 4775; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 4776; i <= 4783; i++) - materials[i] = Material.PumpkinStem; - for (int i = 4784; i <= 4791; i++) - materials[i] = Material.MelonStem; - for (int i = 4792; i <= 4823; i++) - materials[i] = Material.Vine; - for (int i = 4824; i <= 4855; i++) - materials[i] = Material.OakFenceGate; - for (int i = 4856; i <= 4935; i++) - materials[i] = Material.BrickStairs; - for (int i = 4936; i <= 5015; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 5016; i <= 5017; i++) - materials[i] = Material.Mycelium; - materials[5018] = Material.LilyPad; - materials[5019] = Material.NetherBricks; - for (int i = 5020; i <= 5051; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 5052; i <= 5131; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 5132; i <= 5135; i++) - materials[i] = Material.NetherWart; - materials[5136] = Material.EnchantingTable; - for (int i = 5137; i <= 5144; i++) - materials[i] = Material.BrewingStand; - for (int i = 5145; i <= 5148; i++) - materials[i] = Material.Cauldron; - materials[5149] = Material.EndPortal; - for (int i = 5150; i <= 5157; i++) - materials[i] = Material.EndPortalFrame; - materials[5158] = Material.EndStone; - materials[5159] = Material.DragonEgg; - for (int i = 5160; i <= 5161; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 5162; i <= 5173; i++) - materials[i] = Material.Cocoa; - for (int i = 5174; i <= 5253; i++) - materials[i] = Material.SandstoneStairs; - materials[5254] = Material.EmeraldOre; - for (int i = 5255; i <= 5262; i++) - materials[i] = Material.EnderChest; - for (int i = 5263; i <= 5278; i++) - materials[i] = Material.TripwireHook; - for (int i = 5279; i <= 5406; i++) - materials[i] = Material.Tripwire; - materials[5407] = Material.EmeraldBlock; - for (int i = 5408; i <= 5487; i++) - materials[i] = Material.SpruceStairs; - for (int i = 5488; i <= 5567; i++) - materials[i] = Material.BirchStairs; - for (int i = 5568; i <= 5647; i++) - materials[i] = Material.JungleStairs; - for (int i = 5648; i <= 5659; i++) - materials[i] = Material.CommandBlock; - materials[5660] = Material.Beacon; - for (int i = 5661; i <= 5984; i++) - materials[i] = Material.CobblestoneWall; - for (int i = 5985; i <= 6308; i++) - materials[i] = Material.MossyCobblestoneWall; - materials[6309] = Material.FlowerPot; - materials[6310] = Material.PottedOakSapling; - materials[6311] = Material.PottedSpruceSapling; - materials[6312] = Material.PottedBirchSapling; - materials[6313] = Material.PottedJungleSapling; - materials[6314] = Material.PottedAcaciaSapling; - materials[6315] = Material.PottedDarkOakSapling; - materials[6316] = Material.PottedFern; - materials[6317] = Material.PottedDandelion; - materials[6318] = Material.PottedPoppy; - materials[6319] = Material.PottedBlueOrchid; - materials[6320] = Material.PottedAllium; - materials[6321] = Material.PottedAzureBluet; - materials[6322] = Material.PottedRedTulip; - materials[6323] = Material.PottedOrangeTulip; - materials[6324] = Material.PottedWhiteTulip; - materials[6325] = Material.PottedPinkTulip; - materials[6326] = Material.PottedOxeyeDaisy; - materials[6327] = Material.PottedCornflower; - materials[6328] = Material.PottedLilyOfTheValley; - materials[6329] = Material.PottedWitherRose; - materials[6330] = Material.PottedRedMushroom; - materials[6331] = Material.PottedBrownMushroom; - materials[6332] = Material.PottedDeadBush; - materials[6333] = Material.PottedCactus; - for (int i = 6334; i <= 6341; i++) - materials[i] = Material.Carrots; - for (int i = 6342; i <= 6349; i++) - materials[i] = Material.Potatoes; - for (int i = 6350; i <= 6373; i++) - materials[i] = Material.OakButton; - for (int i = 6374; i <= 6397; i++) - materials[i] = Material.SpruceButton; - for (int i = 6398; i <= 6421; i++) - materials[i] = Material.BirchButton; - for (int i = 6422; i <= 6445; i++) - materials[i] = Material.JungleButton; - for (int i = 6446; i <= 6469; i++) - materials[i] = Material.AcaciaButton; - for (int i = 6470; i <= 6493; i++) - materials[i] = Material.DarkOakButton; - for (int i = 6494; i <= 6509; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 6510; i <= 6513; i++) - materials[i] = Material.SkeletonWallSkull; - for (int i = 6514; i <= 6529; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 6530; i <= 6533; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 6534; i <= 6549; i++) - materials[i] = Material.ZombieHead; - for (int i = 6550; i <= 6553; i++) - materials[i] = Material.ZombieWallHead; - for (int i = 6554; i <= 6569; i++) - materials[i] = Material.PlayerHead; - for (int i = 6570; i <= 6573; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 6574; i <= 6589; i++) - materials[i] = Material.CreeperHead; - for (int i = 6590; i <= 6593; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 6594; i <= 6609; i++) - materials[i] = Material.DragonHead; - for (int i = 6610; i <= 6613; i++) - materials[i] = Material.DragonWallHead; - for (int i = 6614; i <= 6617; i++) - materials[i] = Material.Anvil; - for (int i = 6618; i <= 6621; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 6622; i <= 6625; i++) - materials[i] = Material.DamagedAnvil; - for (int i = 6626; i <= 6649; i++) - materials[i] = Material.TrappedChest; - for (int i = 6650; i <= 6665; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 6666; i <= 6681; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - for (int i = 6682; i <= 6697; i++) - materials[i] = Material.Comparator; - for (int i = 6698; i <= 6729; i++) - materials[i] = Material.DaylightDetector; - materials[6730] = Material.RedstoneBlock; - materials[6731] = Material.NetherQuartzOre; - for (int i = 6732; i <= 6741; i++) - materials[i] = Material.Hopper; - materials[6742] = Material.QuartzBlock; - materials[6743] = Material.ChiseledQuartzBlock; - for (int i = 6744; i <= 6746; i++) - materials[i] = Material.QuartzPillar; - for (int i = 6747; i <= 6826; i++) - materials[i] = Material.QuartzStairs; - for (int i = 6827; i <= 6838; i++) - materials[i] = Material.ActivatorRail; - for (int i = 6839; i <= 6850; i++) - materials[i] = Material.Dropper; - materials[6851] = Material.WhiteTerracotta; - materials[6852] = Material.OrangeTerracotta; - materials[6853] = Material.MagentaTerracotta; - materials[6854] = Material.LightBlueTerracotta; - materials[6855] = Material.YellowTerracotta; - materials[6856] = Material.LimeTerracotta; - materials[6857] = Material.PinkTerracotta; - materials[6858] = Material.GrayTerracotta; - materials[6859] = Material.LightGrayTerracotta; - materials[6860] = Material.CyanTerracotta; - materials[6861] = Material.PurpleTerracotta; - materials[6862] = Material.BlueTerracotta; - materials[6863] = Material.BrownTerracotta; - materials[6864] = Material.GreenTerracotta; - materials[6865] = Material.RedTerracotta; - materials[6866] = Material.BlackTerracotta; - for (int i = 6867; i <= 6898; i++) - materials[i] = Material.WhiteStainedGlassPane; - for (int i = 6899; i <= 6930; i++) - materials[i] = Material.OrangeStainedGlassPane; - for (int i = 6931; i <= 6962; i++) - materials[i] = Material.MagentaStainedGlassPane; - for (int i = 6963; i <= 6994; i++) - materials[i] = Material.LightBlueStainedGlassPane; - for (int i = 6995; i <= 7026; i++) - materials[i] = Material.YellowStainedGlassPane; - for (int i = 7027; i <= 7058; i++) - materials[i] = Material.LimeStainedGlassPane; - for (int i = 7059; i <= 7090; i++) - materials[i] = Material.PinkStainedGlassPane; - for (int i = 7091; i <= 7122; i++) - materials[i] = Material.GrayStainedGlassPane; - for (int i = 7123; i <= 7154; i++) - materials[i] = Material.LightGrayStainedGlassPane; - for (int i = 7155; i <= 7186; i++) - materials[i] = Material.CyanStainedGlassPane; - for (int i = 7187; i <= 7218; i++) - materials[i] = Material.PurpleStainedGlassPane; - for (int i = 7219; i <= 7250; i++) - materials[i] = Material.BlueStainedGlassPane; - for (int i = 7251; i <= 7282; i++) - materials[i] = Material.BrownStainedGlassPane; - for (int i = 7283; i <= 7314; i++) - materials[i] = Material.GreenStainedGlassPane; - for (int i = 7315; i <= 7346; i++) - materials[i] = Material.RedStainedGlassPane; - for (int i = 7347; i <= 7378; i++) - materials[i] = Material.BlackStainedGlassPane; - for (int i = 7379; i <= 7458; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 7459; i <= 7538; i++) - materials[i] = Material.DarkOakStairs; - materials[7539] = Material.SlimeBlock; - materials[7540] = Material.Barrier; - for (int i = 7541; i <= 7604; i++) - materials[i] = Material.IronTrapdoor; - materials[7605] = Material.Prismarine; - materials[7606] = Material.PrismarineBricks; - materials[7607] = Material.DarkPrismarine; - for (int i = 7608; i <= 7687; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 7688; i <= 7767; i++) - materials[i] = Material.PrismarineBrickStairs; - for (int i = 7768; i <= 7847; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 7848; i <= 7853; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 7854; i <= 7859; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 7860; i <= 7865; i++) - materials[i] = Material.DarkPrismarineSlab; - materials[7866] = Material.SeaLantern; - for (int i = 7867; i <= 7869; i++) - materials[i] = Material.HayBlock; - materials[7870] = Material.WhiteCarpet; - materials[7871] = Material.OrangeCarpet; - materials[7872] = Material.MagentaCarpet; - materials[7873] = Material.LightBlueCarpet; - materials[7874] = Material.YellowCarpet; - materials[7875] = Material.LimeCarpet; - materials[7876] = Material.PinkCarpet; - materials[7877] = Material.GrayCarpet; - materials[7878] = Material.LightGrayCarpet; - materials[7879] = Material.CyanCarpet; - materials[7880] = Material.PurpleCarpet; - materials[7881] = Material.BlueCarpet; - materials[7882] = Material.BrownCarpet; - materials[7883] = Material.GreenCarpet; - materials[7884] = Material.RedCarpet; - materials[7885] = Material.BlackCarpet; - materials[7886] = Material.Terracotta; - materials[7887] = Material.CoalBlock; - materials[7888] = Material.PackedIce; - for (int i = 7889; i <= 7890; i++) - materials[i] = Material.Sunflower; - for (int i = 7891; i <= 7892; i++) - materials[i] = Material.Lilac; - for (int i = 7893; i <= 7894; i++) - materials[i] = Material.RoseBush; - for (int i = 7895; i <= 7896; i++) - materials[i] = Material.Peony; - for (int i = 7897; i <= 7898; i++) - materials[i] = Material.TallGrass; - for (int i = 7899; i <= 7900; i++) - materials[i] = Material.LargeFern; - for (int i = 7901; i <= 7916; i++) - materials[i] = Material.WhiteBanner; - for (int i = 7917; i <= 7932; i++) - materials[i] = Material.OrangeBanner; - for (int i = 7933; i <= 7948; i++) - materials[i] = Material.MagentaBanner; - for (int i = 7949; i <= 7964; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 7965; i <= 7980; i++) - materials[i] = Material.YellowBanner; - for (int i = 7981; i <= 7996; i++) - materials[i] = Material.LimeBanner; - for (int i = 7997; i <= 8012; i++) - materials[i] = Material.PinkBanner; - for (int i = 8013; i <= 8028; i++) - materials[i] = Material.GrayBanner; - for (int i = 8029; i <= 8044; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 8045; i <= 8060; i++) - materials[i] = Material.CyanBanner; - for (int i = 8061; i <= 8076; i++) - materials[i] = Material.PurpleBanner; - for (int i = 8077; i <= 8092; i++) - materials[i] = Material.BlueBanner; - for (int i = 8093; i <= 8108; i++) - materials[i] = Material.BrownBanner; - for (int i = 8109; i <= 8124; i++) - materials[i] = Material.GreenBanner; - for (int i = 8125; i <= 8140; i++) - materials[i] = Material.RedBanner; - for (int i = 8141; i <= 8156; i++) - materials[i] = Material.BlackBanner; - for (int i = 8157; i <= 8160; i++) - materials[i] = Material.WhiteWallBanner; - for (int i = 8161; i <= 8164; i++) - materials[i] = Material.OrangeWallBanner; - for (int i = 8165; i <= 8168; i++) - materials[i] = Material.MagentaWallBanner; - for (int i = 8169; i <= 8172; i++) - materials[i] = Material.LightBlueWallBanner; - for (int i = 8173; i <= 8176; i++) - materials[i] = Material.YellowWallBanner; - for (int i = 8177; i <= 8180; i++) - materials[i] = Material.LimeWallBanner; - for (int i = 8181; i <= 8184; i++) - materials[i] = Material.PinkWallBanner; - for (int i = 8185; i <= 8188; i++) - materials[i] = Material.GrayWallBanner; - for (int i = 8189; i <= 8192; i++) - materials[i] = Material.LightGrayWallBanner; - for (int i = 8193; i <= 8196; i++) - materials[i] = Material.CyanWallBanner; - for (int i = 8197; i <= 8200; i++) - materials[i] = Material.PurpleWallBanner; - for (int i = 8201; i <= 8204; i++) - materials[i] = Material.BlueWallBanner; - for (int i = 8205; i <= 8208; i++) - materials[i] = Material.BrownWallBanner; - for (int i = 8209; i <= 8212; i++) - materials[i] = Material.GreenWallBanner; - for (int i = 8213; i <= 8216; i++) - materials[i] = Material.RedWallBanner; - for (int i = 8217; i <= 8220; i++) - materials[i] = Material.BlackWallBanner; - materials[8221] = Material.RedSandstone; - materials[8222] = Material.ChiseledRedSandstone; - materials[8223] = Material.CutRedSandstone; - for (int i = 8224; i <= 8303; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 8304; i <= 8309; i++) - materials[i] = Material.OakSlab; - for (int i = 8310; i <= 8315; i++) - materials[i] = Material.SpruceSlab; - for (int i = 8316; i <= 8321; i++) - materials[i] = Material.BirchSlab; - for (int i = 8322; i <= 8327; i++) - materials[i] = Material.JungleSlab; - for (int i = 8328; i <= 8333; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 8334; i <= 8339; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 8340; i <= 8345; i++) - materials[i] = Material.StoneSlab; - for (int i = 8346; i <= 8351; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 8352; i <= 8357; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 8358; i <= 8363; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 8364; i <= 8369; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 8370; i <= 8375; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 8376; i <= 8381; i++) - materials[i] = Material.BrickSlab; - for (int i = 8382; i <= 8387; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 8388; i <= 8393; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 8394; i <= 8399; i++) - materials[i] = Material.QuartzSlab; - for (int i = 8400; i <= 8405; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 8406; i <= 8411; i++) - materials[i] = Material.CutRedSandstoneSlab; - for (int i = 8412; i <= 8417; i++) - materials[i] = Material.PurpurSlab; - materials[8418] = Material.SmoothStone; - materials[8419] = Material.SmoothSandstone; - materials[8420] = Material.SmoothQuartz; - materials[8421] = Material.SmoothRedSandstone; - for (int i = 8422; i <= 8453; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 8454; i <= 8485; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 8486; i <= 8517; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 8518; i <= 8549; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 8550; i <= 8581; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 8582; i <= 8613; i++) - materials[i] = Material.SpruceFence; - for (int i = 8614; i <= 8645; i++) - materials[i] = Material.BirchFence; - for (int i = 8646; i <= 8677; i++) - materials[i] = Material.JungleFence; - for (int i = 8678; i <= 8709; i++) - materials[i] = Material.AcaciaFence; - for (int i = 8710; i <= 8741; i++) - materials[i] = Material.DarkOakFence; - for (int i = 8742; i <= 8805; i++) - materials[i] = Material.SpruceDoor; - for (int i = 8806; i <= 8869; i++) - materials[i] = Material.BirchDoor; - for (int i = 8870; i <= 8933; i++) - materials[i] = Material.JungleDoor; - for (int i = 8934; i <= 8997; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 8998; i <= 9061; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 9062; i <= 9067; i++) - materials[i] = Material.EndRod; - for (int i = 9068; i <= 9131; i++) - materials[i] = Material.ChorusPlant; - for (int i = 9132; i <= 9137; i++) - materials[i] = Material.ChorusFlower; - materials[9138] = Material.PurpurBlock; - for (int i = 9139; i <= 9141; i++) - materials[i] = Material.PurpurPillar; - for (int i = 9142; i <= 9221; i++) - materials[i] = Material.PurpurStairs; - materials[9222] = Material.EndStoneBricks; - for (int i = 9223; i <= 9226; i++) - materials[i] = Material.Beetroots; - materials[9227] = Material.DirtPath; - materials[9228] = Material.EndGateway; - for (int i = 9229; i <= 9240; i++) - materials[i] = Material.RepeatingCommandBlock; - for (int i = 9241; i <= 9252; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 9253; i <= 9256; i++) - materials[i] = Material.FrostedIce; - materials[9257] = Material.MagmaBlock; - materials[9258] = Material.NetherWartBlock; - materials[9259] = Material.RedNetherBricks; - for (int i = 9260; i <= 9262; i++) - materials[i] = Material.BoneBlock; - materials[9263] = Material.StructureVoid; - for (int i = 9264; i <= 9275; i++) - materials[i] = Material.Observer; - for (int i = 9276; i <= 9281; i++) - materials[i] = Material.ShulkerBox; - for (int i = 9282; i <= 9287; i++) - materials[i] = Material.WhiteShulkerBox; - for (int i = 9288; i <= 9293; i++) - materials[i] = Material.OrangeShulkerBox; - for (int i = 9294; i <= 9299; i++) - materials[i] = Material.MagentaShulkerBox; - for (int i = 9300; i <= 9305; i++) - materials[i] = Material.LightBlueShulkerBox; - for (int i = 9306; i <= 9311; i++) - materials[i] = Material.YellowShulkerBox; - for (int i = 9312; i <= 9317; i++) - materials[i] = Material.LimeShulkerBox; - for (int i = 9318; i <= 9323; i++) - materials[i] = Material.PinkShulkerBox; - for (int i = 9324; i <= 9329; i++) - materials[i] = Material.GrayShulkerBox; - for (int i = 9330; i <= 9335; i++) - materials[i] = Material.LightGrayShulkerBox; - for (int i = 9336; i <= 9341; i++) - materials[i] = Material.CyanShulkerBox; - for (int i = 9342; i <= 9347; i++) - materials[i] = Material.PurpleShulkerBox; - for (int i = 9348; i <= 9353; i++) - materials[i] = Material.BlueShulkerBox; - for (int i = 9354; i <= 9359; i++) - materials[i] = Material.BrownShulkerBox; - for (int i = 9360; i <= 9365; i++) - materials[i] = Material.GreenShulkerBox; - for (int i = 9366; i <= 9371; i++) - materials[i] = Material.RedShulkerBox; - for (int i = 9372; i <= 9377; i++) - materials[i] = Material.BlackShulkerBox; - for (int i = 9378; i <= 9381; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 9382; i <= 9385; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 9386; i <= 9389; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 9390; i <= 9393; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 9394; i <= 9397; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 9398; i <= 9401; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 9402; i <= 9405; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 9406; i <= 9409; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 9410; i <= 9413; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 9414; i <= 9417; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 9418; i <= 9421; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 9422; i <= 9425; i++) - materials[i] = Material.BlueGlazedTerracotta; - for (int i = 9426; i <= 9429; i++) - materials[i] = Material.BrownGlazedTerracotta; - for (int i = 9430; i <= 9433; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 9434; i <= 9437; i++) - materials[i] = Material.RedGlazedTerracotta; - for (int i = 9438; i <= 9441; i++) - materials[i] = Material.BlackGlazedTerracotta; - materials[9442] = Material.WhiteConcrete; - materials[9443] = Material.OrangeConcrete; - materials[9444] = Material.MagentaConcrete; - materials[9445] = Material.LightBlueConcrete; - materials[9446] = Material.YellowConcrete; - materials[9447] = Material.LimeConcrete; - materials[9448] = Material.PinkConcrete; - materials[9449] = Material.GrayConcrete; - materials[9450] = Material.LightGrayConcrete; - materials[9451] = Material.CyanConcrete; - materials[9452] = Material.PurpleConcrete; - materials[9453] = Material.BlueConcrete; - materials[9454] = Material.BrownConcrete; - materials[9455] = Material.GreenConcrete; - materials[9456] = Material.RedConcrete; - materials[9457] = Material.BlackConcrete; - materials[9458] = Material.WhiteConcretePowder; - materials[9459] = Material.OrangeConcretePowder; - materials[9460] = Material.MagentaConcretePowder; - materials[9461] = Material.LightBlueConcretePowder; - materials[9462] = Material.YellowConcretePowder; - materials[9463] = Material.LimeConcretePowder; - materials[9464] = Material.PinkConcretePowder; - materials[9465] = Material.GrayConcretePowder; - materials[9466] = Material.LightGrayConcretePowder; - materials[9467] = Material.CyanConcretePowder; - materials[9468] = Material.PurpleConcretePowder; - materials[9469] = Material.BlueConcretePowder; - materials[9470] = Material.BrownConcretePowder; - materials[9471] = Material.GreenConcretePowder; - materials[9472] = Material.RedConcretePowder; - materials[9473] = Material.BlackConcretePowder; - for (int i = 9474; i <= 9499; i++) - materials[i] = Material.Kelp; - materials[9500] = Material.KelpPlant; - materials[9501] = Material.DriedKelpBlock; - for (int i = 9502; i <= 9513; i++) - materials[i] = Material.TurtleEgg; - materials[9514] = Material.DeadTubeCoralBlock; - materials[9515] = Material.DeadBrainCoralBlock; - materials[9516] = Material.DeadBubbleCoralBlock; - materials[9517] = Material.DeadFireCoralBlock; - materials[9518] = Material.DeadHornCoralBlock; - materials[9519] = Material.TubeCoralBlock; - materials[9520] = Material.BrainCoralBlock; - materials[9521] = Material.BubbleCoralBlock; - materials[9522] = Material.FireCoralBlock; - materials[9523] = Material.HornCoralBlock; - for (int i = 9524; i <= 9525; i++) - materials[i] = Material.DeadTubeCoral; - for (int i = 9526; i <= 9527; i++) - materials[i] = Material.DeadBrainCoral; - for (int i = 9528; i <= 9529; i++) - materials[i] = Material.DeadBubbleCoral; - for (int i = 9530; i <= 9531; i++) - materials[i] = Material.DeadFireCoral; - for (int i = 9532; i <= 9533; i++) - materials[i] = Material.DeadHornCoral; - for (int i = 9534; i <= 9535; i++) - materials[i] = Material.TubeCoral; - for (int i = 9536; i <= 9537; i++) - materials[i] = Material.BrainCoral; - for (int i = 9538; i <= 9539; i++) - materials[i] = Material.BubbleCoral; - for (int i = 9540; i <= 9541; i++) - materials[i] = Material.FireCoral; - for (int i = 9542; i <= 9543; i++) - materials[i] = Material.HornCoral; - for (int i = 9544; i <= 9545; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 9546; i <= 9547; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 9548; i <= 9549; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 9550; i <= 9551; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 9552; i <= 9553; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 9554; i <= 9555; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 9556; i <= 9557; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 9558; i <= 9559; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 9560; i <= 9561; i++) - materials[i] = Material.FireCoralFan; - for (int i = 9562; i <= 9563; i++) - materials[i] = Material.HornCoralFan; - for (int i = 9564; i <= 9571; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 9572; i <= 9579; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 9580; i <= 9587; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - for (int i = 9588; i <= 9595; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 9596; i <= 9603; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 9604; i <= 9611; i++) - materials[i] = Material.TubeCoralWallFan; - for (int i = 9612; i <= 9619; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 9620; i <= 9627; i++) - materials[i] = Material.BubbleCoralWallFan; - for (int i = 9628; i <= 9635; i++) - materials[i] = Material.FireCoralWallFan; - for (int i = 9636; i <= 9643; i++) - materials[i] = Material.HornCoralWallFan; - for (int i = 9644; i <= 9651; i++) - materials[i] = Material.SeaPickle; - materials[9652] = Material.BlueIce; - for (int i = 9653; i <= 9654; i++) - materials[i] = Material.Conduit; - materials[9655] = Material.BambooSapling; - for (int i = 9656; i <= 9667; i++) - materials[i] = Material.Bamboo; - materials[9668] = Material.PottedBamboo; - materials[9669] = Material.VoidAir; - materials[9670] = Material.CaveAir; - for (int i = 9671; i <= 9672; i++) - materials[i] = Material.BubbleColumn; - for (int i = 9673; i <= 9752; i++) - materials[i] = Material.PolishedGraniteStairs; - for (int i = 9753; i <= 9832; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - for (int i = 9833; i <= 9912; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 9913; i <= 9992; i++) - materials[i] = Material.PolishedDioriteStairs; - for (int i = 9993; i <= 10072; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 10073; i <= 10152; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 10153; i <= 10232; i++) - materials[i] = Material.StoneStairs; - for (int i = 10233; i <= 10312; i++) - materials[i] = Material.SmoothSandstoneStairs; - for (int i = 10313; i <= 10392; i++) - materials[i] = Material.SmoothQuartzStairs; - for (int i = 10393; i <= 10472; i++) - materials[i] = Material.GraniteStairs; - for (int i = 10473; i <= 10552; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 10553; i <= 10632; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 10633; i <= 10712; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 10713; i <= 10792; i++) - materials[i] = Material.DioriteStairs; - for (int i = 10793; i <= 10798; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 10799; i <= 10804; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 10805; i <= 10810; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 10811; i <= 10816; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 10817; i <= 10822; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 10823; i <= 10828; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 10829; i <= 10834; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 10835; i <= 10840; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 10841; i <= 10846; i++) - materials[i] = Material.GraniteSlab; - for (int i = 10847; i <= 10852; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 10853; i <= 10858; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 10859; i <= 10864; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 10865; i <= 10870; i++) - materials[i] = Material.DioriteSlab; - for (int i = 10871; i <= 11194; i++) - materials[i] = Material.BrickWall; - for (int i = 11195; i <= 11518; i++) - materials[i] = Material.PrismarineWall; - for (int i = 11519; i <= 11842; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 11843; i <= 12166; i++) - materials[i] = Material.MossyStoneBrickWall; - for (int i = 12167; i <= 12490; i++) - materials[i] = Material.GraniteWall; - for (int i = 12491; i <= 12814; i++) - materials[i] = Material.StoneBrickWall; - for (int i = 12815; i <= 13138; i++) - materials[i] = Material.NetherBrickWall; - for (int i = 13139; i <= 13462; i++) - materials[i] = Material.AndesiteWall; - for (int i = 13463; i <= 13786; i++) - materials[i] = Material.RedNetherBrickWall; - for (int i = 13787; i <= 14110; i++) - materials[i] = Material.SandstoneWall; - for (int i = 14111; i <= 14434; i++) - materials[i] = Material.EndStoneBrickWall; - for (int i = 14435; i <= 14758; i++) - materials[i] = Material.DioriteWall; - for (int i = 14759; i <= 14790; i++) - materials[i] = Material.Scaffolding; - for (int i = 14791; i <= 14794; i++) - materials[i] = Material.Loom; - for (int i = 14795; i <= 14806; i++) - materials[i] = Material.Barrel; - for (int i = 14807; i <= 14814; i++) - materials[i] = Material.Smoker; - for (int i = 14815; i <= 14822; i++) - materials[i] = Material.BlastFurnace; - materials[14823] = Material.CartographyTable; - materials[14824] = Material.FletchingTable; - for (int i = 14825; i <= 14836; i++) - materials[i] = Material.Grindstone; - for (int i = 14837; i <= 14852; i++) - materials[i] = Material.Lectern; - materials[14853] = Material.SmithingTable; - for (int i = 14854; i <= 14857; i++) - materials[i] = Material.Stonecutter; - for (int i = 14858; i <= 14889; i++) - materials[i] = Material.Bell; - for (int i = 14890; i <= 14893; i++) - materials[i] = Material.Lantern; - for (int i = 14894; i <= 14897; i++) - materials[i] = Material.SoulLantern; - for (int i = 14898; i <= 14929; i++) - materials[i] = Material.Campfire; - for (int i = 14930; i <= 14961; i++) - materials[i] = Material.SoulCampfire; - for (int i = 14962; i <= 14965; i++) - materials[i] = Material.SweetBerryBush; - for (int i = 14966; i <= 14968; i++) - materials[i] = Material.WarpedStem; - for (int i = 14969; i <= 14971; i++) - materials[i] = Material.StrippedWarpedStem; - for (int i = 14972; i <= 14974; i++) - materials[i] = Material.WarpedHyphae; - for (int i = 14975; i <= 14977; i++) - materials[i] = Material.StrippedWarpedHyphae; - materials[14978] = Material.WarpedNylium; - materials[14979] = Material.WarpedFungus; - materials[14980] = Material.WarpedWartBlock; - materials[14981] = Material.WarpedRoots; - materials[14982] = Material.NetherSprouts; - for (int i = 14983; i <= 14985; i++) - materials[i] = Material.CrimsonStem; - for (int i = 14986; i <= 14988; i++) - materials[i] = Material.StrippedCrimsonStem; - for (int i = 14989; i <= 14991; i++) - materials[i] = Material.CrimsonHyphae; - for (int i = 14992; i <= 14994; i++) - materials[i] = Material.StrippedCrimsonHyphae; - materials[14995] = Material.CrimsonNylium; - materials[14996] = Material.CrimsonFungus; - materials[14997] = Material.Shroomlight; - for (int i = 14998; i <= 15023; i++) - materials[i] = Material.WeepingVines; - materials[15024] = Material.WeepingVinesPlant; - for (int i = 15025; i <= 15050; i++) - materials[i] = Material.TwistingVines; - materials[15051] = Material.TwistingVinesPlant; - materials[15052] = Material.CrimsonRoots; - materials[15053] = Material.CrimsonPlanks; - materials[15054] = Material.WarpedPlanks; - for (int i = 15055; i <= 15060; i++) - materials[i] = Material.CrimsonSlab; - for (int i = 15061; i <= 15066; i++) - materials[i] = Material.WarpedSlab; - for (int i = 15067; i <= 15068; i++) - materials[i] = Material.CrimsonPressurePlate; - for (int i = 15069; i <= 15070; i++) - materials[i] = Material.WarpedPressurePlate; - for (int i = 15071; i <= 15102; i++) - materials[i] = Material.CrimsonFence; - for (int i = 15103; i <= 15134; i++) - materials[i] = Material.WarpedFence; - for (int i = 15135; i <= 15198; i++) - materials[i] = Material.CrimsonTrapdoor; - for (int i = 15199; i <= 15262; i++) - materials[i] = Material.WarpedTrapdoor; - for (int i = 15263; i <= 15294; i++) - materials[i] = Material.CrimsonFenceGate; - for (int i = 15295; i <= 15326; i++) - materials[i] = Material.WarpedFenceGate; - for (int i = 15327; i <= 15406; i++) - materials[i] = Material.CrimsonStairs; - for (int i = 15407; i <= 15486; i++) - materials[i] = Material.WarpedStairs; - for (int i = 15487; i <= 15510; i++) - materials[i] = Material.CrimsonButton; - for (int i = 15511; i <= 15534; i++) - materials[i] = Material.WarpedButton; - for (int i = 15535; i <= 15598; i++) - materials[i] = Material.CrimsonDoor; - for (int i = 15599; i <= 15662; i++) - materials[i] = Material.WarpedDoor; - for (int i = 15663; i <= 15694; i++) - materials[i] = Material.CrimsonSign; - for (int i = 15695; i <= 15726; i++) - materials[i] = Material.WarpedSign; - for (int i = 15727; i <= 15734; i++) - materials[i] = Material.CrimsonWallSign; - for (int i = 15735; i <= 15742; i++) - materials[i] = Material.WarpedWallSign; - for (int i = 15743; i <= 15746; i++) - materials[i] = Material.StructureBlock; - for (int i = 15747; i <= 15758; i++) - materials[i] = Material.Jigsaw; - for (int i = 15759; i <= 15767; i++) - materials[i] = Material.Composter; - for (int i = 15768; i <= 15783; i++) - materials[i] = Material.Target; - for (int i = 15784; i <= 15807; i++) - materials[i] = Material.BeeNest; - for (int i = 15808; i <= 15831; i++) - materials[i] = Material.Beehive; - materials[15832] = Material.HoneyBlock; - materials[15833] = Material.HoneycombBlock; - materials[15834] = Material.NetheriteBlock; - materials[15835] = Material.AncientDebris; - materials[15836] = Material.CryingObsidian; - for (int i = 15837; i <= 15841; i++) - materials[i] = Material.RespawnAnchor; - materials[15842] = Material.PottedCrimsonFungus; - materials[15843] = Material.PottedWarpedFungus; - materials[15844] = Material.PottedCrimsonRoots; - materials[15845] = Material.PottedWarpedRoots; - materials[15846] = Material.Lodestone; - materials[15847] = Material.Blackstone; - for (int i = 15848; i <= 15927; i++) - materials[i] = Material.BlackstoneStairs; - for (int i = 15928; i <= 16251; i++) - materials[i] = Material.BlackstoneWall; - for (int i = 16252; i <= 16257; i++) - materials[i] = Material.BlackstoneSlab; - materials[16258] = Material.PolishedBlackstone; - materials[16259] = Material.PolishedBlackstoneBricks; - materials[16260] = Material.CrackedPolishedBlackstoneBricks; - materials[16261] = Material.ChiseledPolishedBlackstone; - for (int i = 16262; i <= 16267; i++) - materials[i] = Material.PolishedBlackstoneBrickSlab; - for (int i = 16268; i <= 16347; i++) - materials[i] = Material.PolishedBlackstoneBrickStairs; - for (int i = 16348; i <= 16671; i++) - materials[i] = Material.PolishedBlackstoneBrickWall; - materials[16672] = Material.GildedBlackstone; - for (int i = 16673; i <= 16752; i++) - materials[i] = Material.PolishedBlackstoneStairs; - for (int i = 16753; i <= 16758; i++) - materials[i] = Material.PolishedBlackstoneSlab; - for (int i = 16759; i <= 16760; i++) - materials[i] = Material.PolishedBlackstonePressurePlate; - for (int i = 16761; i <= 16784; i++) - materials[i] = Material.PolishedBlackstoneButton; - for (int i = 16785; i <= 17108; i++) - materials[i] = Material.PolishedBlackstoneWall; - materials[17109] = Material.ChiseledNetherBricks; - materials[17110] = Material.CrackedNetherBricks; - materials[17111] = Material.QuartzBricks; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(21, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(23, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(25, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(27, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(29, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(31, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(34, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(50, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(73, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(76, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(79, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(82, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(85, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(88, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(91, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(94, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(97, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(100, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(103, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(106, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(109, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(112, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(115, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(118, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(121, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(124, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(127, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(130, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(133, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(136, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(139, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(142, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(145, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(159, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(173, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(187, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(201, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(215, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(234, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(249, 800, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1049, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1065, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1081, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1097, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1113, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1129, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1145, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1161, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1177, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1193, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1209, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1225, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1241, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1257, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1273, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1289, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1305, 12, - [ - new("powered", ["true", "false"], 6), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 1) - ]), - new(1317, 12, - [ - new("powered", ["true", "false"], 6), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 1) - ]), - new(1329, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(1346, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(1348, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(1360, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2), - new("type", ["normal", "sticky"], 1) - ]), - new(1400, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("type", ["normal", "sticky"], 1) - ]), - new(1430, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(1436, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(1440, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(1954, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2034, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("type", ["single", "left", "right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2058, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(3357, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(3365, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(3373, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(3381, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3413, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3445, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3477, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3509, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3541, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3573, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3637, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3645, 10, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 1) - ]), - new(3655, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3735, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3743, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3751, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3759, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3767, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3775, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3783, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3807, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3809, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3873, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3875, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3877, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3879, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3881, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3883, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3885, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(3887, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(3889, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(3897, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3921, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(3931, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(3948, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(3964, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(3966, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4002, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(4005, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(4009, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4014, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(4016, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4020, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4024, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(4031, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4111, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4175, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4239, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4303, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4367, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4431, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4505, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4569, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4633, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4697, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4729, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4735, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4768, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4772, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4776, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4784, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4792, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4824, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4856, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4936, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5016, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(5020, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5052, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5132, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(5137, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(5145, 4, - [ - new("level", ["0", "1", "2", "3"], 1) - ]), - new(5150, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5160, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5162, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5174, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5255, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5263, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5279, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5408, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5488, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5568, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5648, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(5661, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(5985, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(6334, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(6342, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(6350, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6374, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6398, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6422, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6446, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6470, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6494, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6510, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6514, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6530, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6534, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6550, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6554, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6570, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6574, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6590, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6594, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6610, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6614, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6618, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6622, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6626, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("type", ["single", "left", "right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6650, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6666, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6682, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6698, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6732, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(6744, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(6747, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6827, 12, - [ - new("powered", ["true", "false"], 6), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 1) - ]), - new(6839, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(6867, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6899, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6931, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6963, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6995, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7027, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7059, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7091, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7123, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7155, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7187, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7219, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7251, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7283, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7315, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7347, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7379, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7459, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7541, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7608, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7688, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7768, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7848, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7854, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7860, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7867, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(7889, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7891, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7893, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7895, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7897, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7899, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(7901, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7917, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7933, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7949, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7965, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7981, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7997, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8013, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8029, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8045, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8061, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8077, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8093, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8109, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8125, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8141, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8157, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8161, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8165, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8169, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8173, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8177, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8181, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8185, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8189, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8193, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8197, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8201, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8205, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8209, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8213, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8217, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8224, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8304, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8310, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8316, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8322, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8328, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8334, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8340, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8346, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8352, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8358, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8364, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8370, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8376, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8382, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8388, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8394, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8400, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8406, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8412, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8422, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8454, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8486, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8518, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8550, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8582, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8614, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8646, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8678, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8710, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8742, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8806, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8870, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8934, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8998, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9062, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9068, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9132, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(9139, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(9142, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9223, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(9229, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9241, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9253, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(9260, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(9264, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9276, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9282, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9288, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9294, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9300, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9306, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9312, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9318, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9324, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9330, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9336, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9342, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9348, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9354, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9360, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9366, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9372, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9378, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9382, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9386, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9390, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9394, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9398, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9402, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9406, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9410, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9414, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9418, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9422, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9426, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9430, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9434, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9438, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9474, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(9502, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(9524, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9526, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9528, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9530, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9532, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9534, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9536, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9538, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9540, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9542, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9544, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9546, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9548, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9550, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9552, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9554, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9556, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9558, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9560, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9562, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9564, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9572, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9580, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9588, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9596, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9604, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9612, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9620, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9628, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9636, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9644, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9653, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9656, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(9671, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(9673, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9753, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9833, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9913, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9993, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10073, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10153, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10233, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10313, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10393, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10473, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10553, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10633, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10713, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10793, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10799, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10805, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10811, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10817, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10823, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10829, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10835, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10841, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10847, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10853, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10859, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10865, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10871, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(11195, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(11519, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(11843, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(12167, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(12491, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(12815, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(13139, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(13463, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(13787, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14111, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14435, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14759, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14791, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14795, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(14807, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(14815, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(14825, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14837, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14854, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14858, 32, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14890, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14894, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14898, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14930, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14962, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(14966, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(14969, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(14972, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(14975, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(14983, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(14986, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(14989, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(14992, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(14998, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(15025, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(15055, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15061, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15067, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(15069, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(15071, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(15103, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(15135, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15199, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15263, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(15295, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(15327, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15407, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15487, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(15511, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(15535, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(15599, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(15663, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15695, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15727, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15735, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15743, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(15747, 12, - [ - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 1) - ]), - new(15759, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(15768, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(15784, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(15808, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(15837, 5, - [ - new("charges", ["0", "1", "2", "3", "4"], 1) - ]), - new(15848, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15928, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16252, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16262, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16268, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16348, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16673, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16753, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16759, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(16761, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(16785, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette117.cs b/MinecraftClient/Mapping/BlockPalettes/Palette117.cs deleted file mode 100644 index 5bff909ce2..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette117.cs +++ /dev/null @@ -1,4437 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - public class Palette117 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette117() - { - materials[0] = Material.Air; - materials[1] = Material.Stone; - materials[2] = Material.Granite; - materials[3] = Material.PolishedGranite; - materials[4] = Material.Diorite; - materials[5] = Material.PolishedDiorite; - materials[6] = Material.Andesite; - materials[7] = Material.PolishedAndesite; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - materials[10] = Material.Dirt; - materials[11] = Material.CoarseDirt; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - materials[14] = Material.Cobblestone; - materials[15] = Material.OakPlanks; - materials[16] = Material.SprucePlanks; - materials[17] = Material.BirchPlanks; - materials[18] = Material.JunglePlanks; - materials[19] = Material.AcaciaPlanks; - materials[20] = Material.DarkOakPlanks; - for (int i = 21; i <= 22; i++) - materials[i] = Material.OakSapling; - for (int i = 23; i <= 24; i++) - materials[i] = Material.SpruceSapling; - for (int i = 25; i <= 26; i++) - materials[i] = Material.BirchSapling; - for (int i = 27; i <= 28; i++) - materials[i] = Material.JungleSapling; - for (int i = 29; i <= 30; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 31; i <= 32; i++) - materials[i] = Material.DarkOakSapling; - materials[33] = Material.Bedrock; - for (int i = 34; i <= 49; i++) - materials[i] = Material.Water; - for (int i = 50; i <= 65; i++) - materials[i] = Material.Lava; - materials[66] = Material.Sand; - materials[67] = Material.RedSand; - materials[68] = Material.Gravel; - materials[69] = Material.GoldOre; - materials[70] = Material.DeepslateGoldOre; - materials[71] = Material.IronOre; - materials[72] = Material.DeepslateIronOre; - materials[73] = Material.CoalOre; - materials[74] = Material.DeepslateCoalOre; - materials[75] = Material.NetherGoldOre; - for (int i = 76; i <= 78; i++) - materials[i] = Material.OakLog; - for (int i = 79; i <= 81; i++) - materials[i] = Material.SpruceLog; - for (int i = 82; i <= 84; i++) - materials[i] = Material.BirchLog; - for (int i = 85; i <= 87; i++) - materials[i] = Material.JungleLog; - for (int i = 88; i <= 90; i++) - materials[i] = Material.AcaciaLog; - for (int i = 91; i <= 93; i++) - materials[i] = Material.DarkOakLog; - for (int i = 94; i <= 96; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 97; i <= 99; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 100; i <= 102; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 103; i <= 105; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 106; i <= 108; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 109; i <= 111; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 112; i <= 114; i++) - materials[i] = Material.OakWood; - for (int i = 115; i <= 117; i++) - materials[i] = Material.SpruceWood; - for (int i = 118; i <= 120; i++) - materials[i] = Material.BirchWood; - for (int i = 121; i <= 123; i++) - materials[i] = Material.JungleWood; - for (int i = 124; i <= 126; i++) - materials[i] = Material.AcaciaWood; - for (int i = 127; i <= 129; i++) - materials[i] = Material.DarkOakWood; - for (int i = 130; i <= 132; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 133; i <= 135; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 136; i <= 138; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 139; i <= 141; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 142; i <= 144; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 145; i <= 147; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 148; i <= 161; i++) - materials[i] = Material.OakLeaves; - for (int i = 162; i <= 175; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 176; i <= 189; i++) - materials[i] = Material.BirchLeaves; - for (int i = 190; i <= 203; i++) - materials[i] = Material.JungleLeaves; - for (int i = 204; i <= 217; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 218; i <= 231; i++) - materials[i] = Material.DarkOakLeaves; - for (int i = 232; i <= 245; i++) - materials[i] = Material.AzaleaLeaves; - for (int i = 246; i <= 259; i++) - materials[i] = Material.FloweringAzaleaLeaves; - materials[260] = Material.Sponge; - materials[261] = Material.WetSponge; - materials[262] = Material.Glass; - materials[263] = Material.LapisOre; - materials[264] = Material.DeepslateLapisOre; - materials[265] = Material.LapisBlock; - for (int i = 266; i <= 277; i++) - materials[i] = Material.Dispenser; - materials[278] = Material.Sandstone; - materials[279] = Material.ChiseledSandstone; - materials[280] = Material.CutSandstone; - for (int i = 281; i <= 1080; i++) - materials[i] = Material.NoteBlock; - for (int i = 1081; i <= 1096; i++) - materials[i] = Material.WhiteBed; - for (int i = 1097; i <= 1112; i++) - materials[i] = Material.OrangeBed; - for (int i = 1113; i <= 1128; i++) - materials[i] = Material.MagentaBed; - for (int i = 1129; i <= 1144; i++) - materials[i] = Material.LightBlueBed; - for (int i = 1145; i <= 1160; i++) - materials[i] = Material.YellowBed; - for (int i = 1161; i <= 1176; i++) - materials[i] = Material.LimeBed; - for (int i = 1177; i <= 1192; i++) - materials[i] = Material.PinkBed; - for (int i = 1193; i <= 1208; i++) - materials[i] = Material.GrayBed; - for (int i = 1209; i <= 1224; i++) - materials[i] = Material.LightGrayBed; - for (int i = 1225; i <= 1240; i++) - materials[i] = Material.CyanBed; - for (int i = 1241; i <= 1256; i++) - materials[i] = Material.PurpleBed; - for (int i = 1257; i <= 1272; i++) - materials[i] = Material.BlueBed; - for (int i = 1273; i <= 1288; i++) - materials[i] = Material.BrownBed; - for (int i = 1289; i <= 1304; i++) - materials[i] = Material.GreenBed; - for (int i = 1305; i <= 1320; i++) - materials[i] = Material.RedBed; - for (int i = 1321; i <= 1336; i++) - materials[i] = Material.BlackBed; - for (int i = 1337; i <= 1360; i++) - materials[i] = Material.PoweredRail; - for (int i = 1361; i <= 1384; i++) - materials[i] = Material.DetectorRail; - for (int i = 1385; i <= 1396; i++) - materials[i] = Material.StickyPiston; - materials[1397] = Material.Cobweb; - materials[1398] = Material.ShortGrass; - materials[1399] = Material.Fern; - materials[1400] = Material.DeadBush; - materials[1401] = Material.Seagrass; - for (int i = 1402; i <= 1403; i++) - materials[i] = Material.TallSeagrass; - for (int i = 1404; i <= 1415; i++) - materials[i] = Material.Piston; - for (int i = 1416; i <= 1439; i++) - materials[i] = Material.PistonHead; - materials[1440] = Material.WhiteWool; - materials[1441] = Material.OrangeWool; - materials[1442] = Material.MagentaWool; - materials[1443] = Material.LightBlueWool; - materials[1444] = Material.YellowWool; - materials[1445] = Material.LimeWool; - materials[1446] = Material.PinkWool; - materials[1447] = Material.GrayWool; - materials[1448] = Material.LightGrayWool; - materials[1449] = Material.CyanWool; - materials[1450] = Material.PurpleWool; - materials[1451] = Material.BlueWool; - materials[1452] = Material.BrownWool; - materials[1453] = Material.GreenWool; - materials[1454] = Material.RedWool; - materials[1455] = Material.BlackWool; - for (int i = 1456; i <= 1467; i++) - materials[i] = Material.MovingPiston; - materials[1468] = Material.Dandelion; - materials[1469] = Material.Poppy; - materials[1470] = Material.BlueOrchid; - materials[1471] = Material.Allium; - materials[1472] = Material.AzureBluet; - materials[1473] = Material.RedTulip; - materials[1474] = Material.OrangeTulip; - materials[1475] = Material.WhiteTulip; - materials[1476] = Material.PinkTulip; - materials[1477] = Material.OxeyeDaisy; - materials[1478] = Material.Cornflower; - materials[1479] = Material.WitherRose; - materials[1480] = Material.LilyOfTheValley; - materials[1481] = Material.BrownMushroom; - materials[1482] = Material.RedMushroom; - materials[1483] = Material.GoldBlock; - materials[1484] = Material.IronBlock; - materials[1485] = Material.Bricks; - for (int i = 1486; i <= 1487; i++) - materials[i] = Material.Tnt; - materials[1488] = Material.Bookshelf; - materials[1489] = Material.MossyCobblestone; - materials[1490] = Material.Obsidian; - materials[1491] = Material.Torch; - for (int i = 1492; i <= 1495; i++) - materials[i] = Material.WallTorch; - for (int i = 1496; i <= 2007; i++) - materials[i] = Material.Fire; - materials[2008] = Material.SoulFire; - materials[2009] = Material.Spawner; - for (int i = 2010; i <= 2089; i++) - materials[i] = Material.OakStairs; - for (int i = 2090; i <= 2113; i++) - materials[i] = Material.Chest; - for (int i = 2114; i <= 3409; i++) - materials[i] = Material.RedstoneWire; - materials[3410] = Material.DiamondOre; - materials[3411] = Material.DeepslateDiamondOre; - materials[3412] = Material.DiamondBlock; - materials[3413] = Material.CraftingTable; - for (int i = 3414; i <= 3421; i++) - materials[i] = Material.Wheat; - for (int i = 3422; i <= 3429; i++) - materials[i] = Material.Farmland; - for (int i = 3430; i <= 3437; i++) - materials[i] = Material.Furnace; - for (int i = 3438; i <= 3469; i++) - materials[i] = Material.OakSign; - for (int i = 3470; i <= 3501; i++) - materials[i] = Material.SpruceSign; - for (int i = 3502; i <= 3533; i++) - materials[i] = Material.BirchSign; - for (int i = 3534; i <= 3565; i++) - materials[i] = Material.AcaciaSign; - for (int i = 3566; i <= 3597; i++) - materials[i] = Material.JungleSign; - for (int i = 3598; i <= 3629; i++) - materials[i] = Material.DarkOakSign; - for (int i = 3630; i <= 3693; i++) - materials[i] = Material.OakDoor; - for (int i = 3694; i <= 3701; i++) - materials[i] = Material.Ladder; - for (int i = 3702; i <= 3721; i++) - materials[i] = Material.Rail; - for (int i = 3722; i <= 3801; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 3802; i <= 3809; i++) - materials[i] = Material.OakWallSign; - for (int i = 3810; i <= 3817; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 3818; i <= 3825; i++) - materials[i] = Material.BirchWallSign; - for (int i = 3826; i <= 3833; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 3834; i <= 3841; i++) - materials[i] = Material.JungleWallSign; - for (int i = 3842; i <= 3849; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 3850; i <= 3873; i++) - materials[i] = Material.Lever; - for (int i = 3874; i <= 3875; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 3876; i <= 3939; i++) - materials[i] = Material.IronDoor; - for (int i = 3940; i <= 3941; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 3942; i <= 3943; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 3944; i <= 3945; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 3946; i <= 3947; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 3948; i <= 3949; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 3950; i <= 3951; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 3952; i <= 3953; i++) - materials[i] = Material.RedstoneOre; - for (int i = 3954; i <= 3955; i++) - materials[i] = Material.DeepslateRedstoneOre; - for (int i = 3956; i <= 3957; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 3958; i <= 3965; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 3966; i <= 3989; i++) - materials[i] = Material.StoneButton; - for (int i = 3990; i <= 3997; i++) - materials[i] = Material.Snow; - materials[3998] = Material.Ice; - materials[3999] = Material.SnowBlock; - for (int i = 4000; i <= 4015; i++) - materials[i] = Material.Cactus; - materials[4016] = Material.Clay; - for (int i = 4017; i <= 4032; i++) - materials[i] = Material.SugarCane; - for (int i = 4033; i <= 4034; i++) - materials[i] = Material.Jukebox; - for (int i = 4035; i <= 4066; i++) - materials[i] = Material.OakFence; - materials[4067] = Material.Pumpkin; - materials[4068] = Material.Netherrack; - materials[4069] = Material.SoulSand; - materials[4070] = Material.SoulSoil; - for (int i = 4071; i <= 4073; i++) - materials[i] = Material.Basalt; - for (int i = 4074; i <= 4076; i++) - materials[i] = Material.PolishedBasalt; - materials[4077] = Material.SoulTorch; - for (int i = 4078; i <= 4081; i++) - materials[i] = Material.SoulWallTorch; - materials[4082] = Material.Glowstone; - for (int i = 4083; i <= 4084; i++) - materials[i] = Material.NetherPortal; - for (int i = 4085; i <= 4088; i++) - materials[i] = Material.CarvedPumpkin; - for (int i = 4089; i <= 4092; i++) - materials[i] = Material.JackOLantern; - for (int i = 4093; i <= 4099; i++) - materials[i] = Material.Cake; - for (int i = 4100; i <= 4163; i++) - materials[i] = Material.Repeater; - materials[4164] = Material.WhiteStainedGlass; - materials[4165] = Material.OrangeStainedGlass; - materials[4166] = Material.MagentaStainedGlass; - materials[4167] = Material.LightBlueStainedGlass; - materials[4168] = Material.YellowStainedGlass; - materials[4169] = Material.LimeStainedGlass; - materials[4170] = Material.PinkStainedGlass; - materials[4171] = Material.GrayStainedGlass; - materials[4172] = Material.LightGrayStainedGlass; - materials[4173] = Material.CyanStainedGlass; - materials[4174] = Material.PurpleStainedGlass; - materials[4175] = Material.BlueStainedGlass; - materials[4176] = Material.BrownStainedGlass; - materials[4177] = Material.GreenStainedGlass; - materials[4178] = Material.RedStainedGlass; - materials[4179] = Material.BlackStainedGlass; - for (int i = 4180; i <= 4243; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 4244; i <= 4307; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 4308; i <= 4371; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 4372; i <= 4435; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 4436; i <= 4499; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 4500; i <= 4563; i++) - materials[i] = Material.DarkOakTrapdoor; - materials[4564] = Material.StoneBricks; - materials[4565] = Material.MossyStoneBricks; - materials[4566] = Material.CrackedStoneBricks; - materials[4567] = Material.ChiseledStoneBricks; - materials[4568] = Material.InfestedStone; - materials[4569] = Material.InfestedCobblestone; - materials[4570] = Material.InfestedStoneBricks; - materials[4571] = Material.InfestedMossyStoneBricks; - materials[4572] = Material.InfestedCrackedStoneBricks; - materials[4573] = Material.InfestedChiseledStoneBricks; - for (int i = 4574; i <= 4637; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 4638; i <= 4701; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 4702; i <= 4765; i++) - materials[i] = Material.MushroomStem; - for (int i = 4766; i <= 4797; i++) - materials[i] = Material.IronBars; - for (int i = 4798; i <= 4803; i++) - materials[i] = Material.Chain; - for (int i = 4804; i <= 4835; i++) - materials[i] = Material.GlassPane; - materials[4836] = Material.Melon; - for (int i = 4837; i <= 4840; i++) - materials[i] = Material.AttachedPumpkinStem; - for (int i = 4841; i <= 4844; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 4845; i <= 4852; i++) - materials[i] = Material.PumpkinStem; - for (int i = 4853; i <= 4860; i++) - materials[i] = Material.MelonStem; - for (int i = 4861; i <= 4892; i++) - materials[i] = Material.Vine; - for (int i = 4893; i <= 5020; i++) - materials[i] = Material.GlowLichen; - for (int i = 5021; i <= 5052; i++) - materials[i] = Material.OakFenceGate; - for (int i = 5053; i <= 5132; i++) - materials[i] = Material.BrickStairs; - for (int i = 5133; i <= 5212; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 5213; i <= 5214; i++) - materials[i] = Material.Mycelium; - materials[5215] = Material.LilyPad; - materials[5216] = Material.NetherBricks; - for (int i = 5217; i <= 5248; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 5249; i <= 5328; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 5329; i <= 5332; i++) - materials[i] = Material.NetherWart; - materials[5333] = Material.EnchantingTable; - for (int i = 5334; i <= 5341; i++) - materials[i] = Material.BrewingStand; - materials[5342] = Material.Cauldron; - for (int i = 5343; i <= 5345; i++) - materials[i] = Material.WaterCauldron; - materials[5346] = Material.LavaCauldron; - for (int i = 5347; i <= 5349; i++) - materials[i] = Material.PowderSnowCauldron; - materials[5350] = Material.EndPortal; - for (int i = 5351; i <= 5358; i++) - materials[i] = Material.EndPortalFrame; - materials[5359] = Material.EndStone; - materials[5360] = Material.DragonEgg; - for (int i = 5361; i <= 5362; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 5363; i <= 5374; i++) - materials[i] = Material.Cocoa; - for (int i = 5375; i <= 5454; i++) - materials[i] = Material.SandstoneStairs; - materials[5455] = Material.EmeraldOre; - materials[5456] = Material.DeepslateEmeraldOre; - for (int i = 5457; i <= 5464; i++) - materials[i] = Material.EnderChest; - for (int i = 5465; i <= 5480; i++) - materials[i] = Material.TripwireHook; - for (int i = 5481; i <= 5608; i++) - materials[i] = Material.Tripwire; - materials[5609] = Material.EmeraldBlock; - for (int i = 5610; i <= 5689; i++) - materials[i] = Material.SpruceStairs; - for (int i = 5690; i <= 5769; i++) - materials[i] = Material.BirchStairs; - for (int i = 5770; i <= 5849; i++) - materials[i] = Material.JungleStairs; - for (int i = 5850; i <= 5861; i++) - materials[i] = Material.CommandBlock; - materials[5862] = Material.Beacon; - for (int i = 5863; i <= 6186; i++) - materials[i] = Material.CobblestoneWall; - for (int i = 6187; i <= 6510; i++) - materials[i] = Material.MossyCobblestoneWall; - materials[6511] = Material.FlowerPot; - materials[6512] = Material.PottedOakSapling; - materials[6513] = Material.PottedSpruceSapling; - materials[6514] = Material.PottedBirchSapling; - materials[6515] = Material.PottedJungleSapling; - materials[6516] = Material.PottedAcaciaSapling; - materials[6517] = Material.PottedDarkOakSapling; - materials[6518] = Material.PottedFern; - materials[6519] = Material.PottedDandelion; - materials[6520] = Material.PottedPoppy; - materials[6521] = Material.PottedBlueOrchid; - materials[6522] = Material.PottedAllium; - materials[6523] = Material.PottedAzureBluet; - materials[6524] = Material.PottedRedTulip; - materials[6525] = Material.PottedOrangeTulip; - materials[6526] = Material.PottedWhiteTulip; - materials[6527] = Material.PottedPinkTulip; - materials[6528] = Material.PottedOxeyeDaisy; - materials[6529] = Material.PottedCornflower; - materials[6530] = Material.PottedLilyOfTheValley; - materials[6531] = Material.PottedWitherRose; - materials[6532] = Material.PottedRedMushroom; - materials[6533] = Material.PottedBrownMushroom; - materials[6534] = Material.PottedDeadBush; - materials[6535] = Material.PottedCactus; - for (int i = 6536; i <= 6543; i++) - materials[i] = Material.Carrots; - for (int i = 6544; i <= 6551; i++) - materials[i] = Material.Potatoes; - for (int i = 6552; i <= 6575; i++) - materials[i] = Material.OakButton; - for (int i = 6576; i <= 6599; i++) - materials[i] = Material.SpruceButton; - for (int i = 6600; i <= 6623; i++) - materials[i] = Material.BirchButton; - for (int i = 6624; i <= 6647; i++) - materials[i] = Material.JungleButton; - for (int i = 6648; i <= 6671; i++) - materials[i] = Material.AcaciaButton; - for (int i = 6672; i <= 6695; i++) - materials[i] = Material.DarkOakButton; - for (int i = 6696; i <= 6711; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 6712; i <= 6715; i++) - materials[i] = Material.SkeletonWallSkull; - for (int i = 6716; i <= 6731; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 6732; i <= 6735; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 6736; i <= 6751; i++) - materials[i] = Material.ZombieHead; - for (int i = 6752; i <= 6755; i++) - materials[i] = Material.ZombieWallHead; - for (int i = 6756; i <= 6771; i++) - materials[i] = Material.PlayerHead; - for (int i = 6772; i <= 6775; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 6776; i <= 6791; i++) - materials[i] = Material.CreeperHead; - for (int i = 6792; i <= 6795; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 6796; i <= 6811; i++) - materials[i] = Material.DragonHead; - for (int i = 6812; i <= 6815; i++) - materials[i] = Material.DragonWallHead; - for (int i = 6816; i <= 6819; i++) - materials[i] = Material.Anvil; - for (int i = 6820; i <= 6823; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 6824; i <= 6827; i++) - materials[i] = Material.DamagedAnvil; - for (int i = 6828; i <= 6851; i++) - materials[i] = Material.TrappedChest; - for (int i = 6852; i <= 6867; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 6868; i <= 6883; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - for (int i = 6884; i <= 6899; i++) - materials[i] = Material.Comparator; - for (int i = 6900; i <= 6931; i++) - materials[i] = Material.DaylightDetector; - materials[6932] = Material.RedstoneBlock; - materials[6933] = Material.NetherQuartzOre; - for (int i = 6934; i <= 6943; i++) - materials[i] = Material.Hopper; - materials[6944] = Material.QuartzBlock; - materials[6945] = Material.ChiseledQuartzBlock; - for (int i = 6946; i <= 6948; i++) - materials[i] = Material.QuartzPillar; - for (int i = 6949; i <= 7028; i++) - materials[i] = Material.QuartzStairs; - for (int i = 7029; i <= 7052; i++) - materials[i] = Material.ActivatorRail; - for (int i = 7053; i <= 7064; i++) - materials[i] = Material.Dropper; - materials[7065] = Material.WhiteTerracotta; - materials[7066] = Material.OrangeTerracotta; - materials[7067] = Material.MagentaTerracotta; - materials[7068] = Material.LightBlueTerracotta; - materials[7069] = Material.YellowTerracotta; - materials[7070] = Material.LimeTerracotta; - materials[7071] = Material.PinkTerracotta; - materials[7072] = Material.GrayTerracotta; - materials[7073] = Material.LightGrayTerracotta; - materials[7074] = Material.CyanTerracotta; - materials[7075] = Material.PurpleTerracotta; - materials[7076] = Material.BlueTerracotta; - materials[7077] = Material.BrownTerracotta; - materials[7078] = Material.GreenTerracotta; - materials[7079] = Material.RedTerracotta; - materials[7080] = Material.BlackTerracotta; - for (int i = 7081; i <= 7112; i++) - materials[i] = Material.WhiteStainedGlassPane; - for (int i = 7113; i <= 7144; i++) - materials[i] = Material.OrangeStainedGlassPane; - for (int i = 7145; i <= 7176; i++) - materials[i] = Material.MagentaStainedGlassPane; - for (int i = 7177; i <= 7208; i++) - materials[i] = Material.LightBlueStainedGlassPane; - for (int i = 7209; i <= 7240; i++) - materials[i] = Material.YellowStainedGlassPane; - for (int i = 7241; i <= 7272; i++) - materials[i] = Material.LimeStainedGlassPane; - for (int i = 7273; i <= 7304; i++) - materials[i] = Material.PinkStainedGlassPane; - for (int i = 7305; i <= 7336; i++) - materials[i] = Material.GrayStainedGlassPane; - for (int i = 7337; i <= 7368; i++) - materials[i] = Material.LightGrayStainedGlassPane; - for (int i = 7369; i <= 7400; i++) - materials[i] = Material.CyanStainedGlassPane; - for (int i = 7401; i <= 7432; i++) - materials[i] = Material.PurpleStainedGlassPane; - for (int i = 7433; i <= 7464; i++) - materials[i] = Material.BlueStainedGlassPane; - for (int i = 7465; i <= 7496; i++) - materials[i] = Material.BrownStainedGlassPane; - for (int i = 7497; i <= 7528; i++) - materials[i] = Material.GreenStainedGlassPane; - for (int i = 7529; i <= 7560; i++) - materials[i] = Material.RedStainedGlassPane; - for (int i = 7561; i <= 7592; i++) - materials[i] = Material.BlackStainedGlassPane; - for (int i = 7593; i <= 7672; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 7673; i <= 7752; i++) - materials[i] = Material.DarkOakStairs; - materials[7753] = Material.SlimeBlock; - materials[7754] = Material.Barrier; - for (int i = 7755; i <= 7786; i++) - materials[i] = Material.Light; - for (int i = 7787; i <= 7850; i++) - materials[i] = Material.IronTrapdoor; - materials[7851] = Material.Prismarine; - materials[7852] = Material.PrismarineBricks; - materials[7853] = Material.DarkPrismarine; - for (int i = 7854; i <= 7933; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 7934; i <= 8013; i++) - materials[i] = Material.PrismarineBrickStairs; - for (int i = 8014; i <= 8093; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 8094; i <= 8099; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 8100; i <= 8105; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 8106; i <= 8111; i++) - materials[i] = Material.DarkPrismarineSlab; - materials[8112] = Material.SeaLantern; - for (int i = 8113; i <= 8115; i++) - materials[i] = Material.HayBlock; - materials[8116] = Material.WhiteCarpet; - materials[8117] = Material.OrangeCarpet; - materials[8118] = Material.MagentaCarpet; - materials[8119] = Material.LightBlueCarpet; - materials[8120] = Material.YellowCarpet; - materials[8121] = Material.LimeCarpet; - materials[8122] = Material.PinkCarpet; - materials[8123] = Material.GrayCarpet; - materials[8124] = Material.LightGrayCarpet; - materials[8125] = Material.CyanCarpet; - materials[8126] = Material.PurpleCarpet; - materials[8127] = Material.BlueCarpet; - materials[8128] = Material.BrownCarpet; - materials[8129] = Material.GreenCarpet; - materials[8130] = Material.RedCarpet; - materials[8131] = Material.BlackCarpet; - materials[8132] = Material.Terracotta; - materials[8133] = Material.CoalBlock; - materials[8134] = Material.PackedIce; - for (int i = 8135; i <= 8136; i++) - materials[i] = Material.Sunflower; - for (int i = 8137; i <= 8138; i++) - materials[i] = Material.Lilac; - for (int i = 8139; i <= 8140; i++) - materials[i] = Material.RoseBush; - for (int i = 8141; i <= 8142; i++) - materials[i] = Material.Peony; - for (int i = 8143; i <= 8144; i++) - materials[i] = Material.TallGrass; - for (int i = 8145; i <= 8146; i++) - materials[i] = Material.LargeFern; - for (int i = 8147; i <= 8162; i++) - materials[i] = Material.WhiteBanner; - for (int i = 8163; i <= 8178; i++) - materials[i] = Material.OrangeBanner; - for (int i = 8179; i <= 8194; i++) - materials[i] = Material.MagentaBanner; - for (int i = 8195; i <= 8210; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 8211; i <= 8226; i++) - materials[i] = Material.YellowBanner; - for (int i = 8227; i <= 8242; i++) - materials[i] = Material.LimeBanner; - for (int i = 8243; i <= 8258; i++) - materials[i] = Material.PinkBanner; - for (int i = 8259; i <= 8274; i++) - materials[i] = Material.GrayBanner; - for (int i = 8275; i <= 8290; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 8291; i <= 8306; i++) - materials[i] = Material.CyanBanner; - for (int i = 8307; i <= 8322; i++) - materials[i] = Material.PurpleBanner; - for (int i = 8323; i <= 8338; i++) - materials[i] = Material.BlueBanner; - for (int i = 8339; i <= 8354; i++) - materials[i] = Material.BrownBanner; - for (int i = 8355; i <= 8370; i++) - materials[i] = Material.GreenBanner; - for (int i = 8371; i <= 8386; i++) - materials[i] = Material.RedBanner; - for (int i = 8387; i <= 8402; i++) - materials[i] = Material.BlackBanner; - for (int i = 8403; i <= 8406; i++) - materials[i] = Material.WhiteWallBanner; - for (int i = 8407; i <= 8410; i++) - materials[i] = Material.OrangeWallBanner; - for (int i = 8411; i <= 8414; i++) - materials[i] = Material.MagentaWallBanner; - for (int i = 8415; i <= 8418; i++) - materials[i] = Material.LightBlueWallBanner; - for (int i = 8419; i <= 8422; i++) - materials[i] = Material.YellowWallBanner; - for (int i = 8423; i <= 8426; i++) - materials[i] = Material.LimeWallBanner; - for (int i = 8427; i <= 8430; i++) - materials[i] = Material.PinkWallBanner; - for (int i = 8431; i <= 8434; i++) - materials[i] = Material.GrayWallBanner; - for (int i = 8435; i <= 8438; i++) - materials[i] = Material.LightGrayWallBanner; - for (int i = 8439; i <= 8442; i++) - materials[i] = Material.CyanWallBanner; - for (int i = 8443; i <= 8446; i++) - materials[i] = Material.PurpleWallBanner; - for (int i = 8447; i <= 8450; i++) - materials[i] = Material.BlueWallBanner; - for (int i = 8451; i <= 8454; i++) - materials[i] = Material.BrownWallBanner; - for (int i = 8455; i <= 8458; i++) - materials[i] = Material.GreenWallBanner; - for (int i = 8459; i <= 8462; i++) - materials[i] = Material.RedWallBanner; - for (int i = 8463; i <= 8466; i++) - materials[i] = Material.BlackWallBanner; - materials[8467] = Material.RedSandstone; - materials[8468] = Material.ChiseledRedSandstone; - materials[8469] = Material.CutRedSandstone; - for (int i = 8470; i <= 8549; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 8550; i <= 8555; i++) - materials[i] = Material.OakSlab; - for (int i = 8556; i <= 8561; i++) - materials[i] = Material.SpruceSlab; - for (int i = 8562; i <= 8567; i++) - materials[i] = Material.BirchSlab; - for (int i = 8568; i <= 8573; i++) - materials[i] = Material.JungleSlab; - for (int i = 8574; i <= 8579; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 8580; i <= 8585; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 8586; i <= 8591; i++) - materials[i] = Material.StoneSlab; - for (int i = 8592; i <= 8597; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 8598; i <= 8603; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 8604; i <= 8609; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 8610; i <= 8615; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 8616; i <= 8621; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 8622; i <= 8627; i++) - materials[i] = Material.BrickSlab; - for (int i = 8628; i <= 8633; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 8634; i <= 8639; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 8640; i <= 8645; i++) - materials[i] = Material.QuartzSlab; - for (int i = 8646; i <= 8651; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 8652; i <= 8657; i++) - materials[i] = Material.CutRedSandstoneSlab; - for (int i = 8658; i <= 8663; i++) - materials[i] = Material.PurpurSlab; - materials[8664] = Material.SmoothStone; - materials[8665] = Material.SmoothSandstone; - materials[8666] = Material.SmoothQuartz; - materials[8667] = Material.SmoothRedSandstone; - for (int i = 8668; i <= 8699; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 8700; i <= 8731; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 8732; i <= 8763; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 8764; i <= 8795; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 8796; i <= 8827; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 8828; i <= 8859; i++) - materials[i] = Material.SpruceFence; - for (int i = 8860; i <= 8891; i++) - materials[i] = Material.BirchFence; - for (int i = 8892; i <= 8923; i++) - materials[i] = Material.JungleFence; - for (int i = 8924; i <= 8955; i++) - materials[i] = Material.AcaciaFence; - for (int i = 8956; i <= 8987; i++) - materials[i] = Material.DarkOakFence; - for (int i = 8988; i <= 9051; i++) - materials[i] = Material.SpruceDoor; - for (int i = 9052; i <= 9115; i++) - materials[i] = Material.BirchDoor; - for (int i = 9116; i <= 9179; i++) - materials[i] = Material.JungleDoor; - for (int i = 9180; i <= 9243; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 9244; i <= 9307; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 9308; i <= 9313; i++) - materials[i] = Material.EndRod; - for (int i = 9314; i <= 9377; i++) - materials[i] = Material.ChorusPlant; - for (int i = 9378; i <= 9383; i++) - materials[i] = Material.ChorusFlower; - materials[9384] = Material.PurpurBlock; - for (int i = 9385; i <= 9387; i++) - materials[i] = Material.PurpurPillar; - for (int i = 9388; i <= 9467; i++) - materials[i] = Material.PurpurStairs; - materials[9468] = Material.EndStoneBricks; - for (int i = 9469; i <= 9472; i++) - materials[i] = Material.Beetroots; - materials[9473] = Material.DirtPath; - materials[9474] = Material.EndGateway; - for (int i = 9475; i <= 9486; i++) - materials[i] = Material.RepeatingCommandBlock; - for (int i = 9487; i <= 9498; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 9499; i <= 9502; i++) - materials[i] = Material.FrostedIce; - materials[9503] = Material.MagmaBlock; - materials[9504] = Material.NetherWartBlock; - materials[9505] = Material.RedNetherBricks; - for (int i = 9506; i <= 9508; i++) - materials[i] = Material.BoneBlock; - materials[9509] = Material.StructureVoid; - for (int i = 9510; i <= 9521; i++) - materials[i] = Material.Observer; - for (int i = 9522; i <= 9527; i++) - materials[i] = Material.ShulkerBox; - for (int i = 9528; i <= 9533; i++) - materials[i] = Material.WhiteShulkerBox; - for (int i = 9534; i <= 9539; i++) - materials[i] = Material.OrangeShulkerBox; - for (int i = 9540; i <= 9545; i++) - materials[i] = Material.MagentaShulkerBox; - for (int i = 9546; i <= 9551; i++) - materials[i] = Material.LightBlueShulkerBox; - for (int i = 9552; i <= 9557; i++) - materials[i] = Material.YellowShulkerBox; - for (int i = 9558; i <= 9563; i++) - materials[i] = Material.LimeShulkerBox; - for (int i = 9564; i <= 9569; i++) - materials[i] = Material.PinkShulkerBox; - for (int i = 9570; i <= 9575; i++) - materials[i] = Material.GrayShulkerBox; - for (int i = 9576; i <= 9581; i++) - materials[i] = Material.LightGrayShulkerBox; - for (int i = 9582; i <= 9587; i++) - materials[i] = Material.CyanShulkerBox; - for (int i = 9588; i <= 9593; i++) - materials[i] = Material.PurpleShulkerBox; - for (int i = 9594; i <= 9599; i++) - materials[i] = Material.BlueShulkerBox; - for (int i = 9600; i <= 9605; i++) - materials[i] = Material.BrownShulkerBox; - for (int i = 9606; i <= 9611; i++) - materials[i] = Material.GreenShulkerBox; - for (int i = 9612; i <= 9617; i++) - materials[i] = Material.RedShulkerBox; - for (int i = 9618; i <= 9623; i++) - materials[i] = Material.BlackShulkerBox; - for (int i = 9624; i <= 9627; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 9628; i <= 9631; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 9632; i <= 9635; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 9636; i <= 9639; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 9640; i <= 9643; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 9644; i <= 9647; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 9648; i <= 9651; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 9652; i <= 9655; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 9656; i <= 9659; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 9660; i <= 9663; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 9664; i <= 9667; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 9668; i <= 9671; i++) - materials[i] = Material.BlueGlazedTerracotta; - for (int i = 9672; i <= 9675; i++) - materials[i] = Material.BrownGlazedTerracotta; - for (int i = 9676; i <= 9679; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 9680; i <= 9683; i++) - materials[i] = Material.RedGlazedTerracotta; - for (int i = 9684; i <= 9687; i++) - materials[i] = Material.BlackGlazedTerracotta; - materials[9688] = Material.WhiteConcrete; - materials[9689] = Material.OrangeConcrete; - materials[9690] = Material.MagentaConcrete; - materials[9691] = Material.LightBlueConcrete; - materials[9692] = Material.YellowConcrete; - materials[9693] = Material.LimeConcrete; - materials[9694] = Material.PinkConcrete; - materials[9695] = Material.GrayConcrete; - materials[9696] = Material.LightGrayConcrete; - materials[9697] = Material.CyanConcrete; - materials[9698] = Material.PurpleConcrete; - materials[9699] = Material.BlueConcrete; - materials[9700] = Material.BrownConcrete; - materials[9701] = Material.GreenConcrete; - materials[9702] = Material.RedConcrete; - materials[9703] = Material.BlackConcrete; - materials[9704] = Material.WhiteConcretePowder; - materials[9705] = Material.OrangeConcretePowder; - materials[9706] = Material.MagentaConcretePowder; - materials[9707] = Material.LightBlueConcretePowder; - materials[9708] = Material.YellowConcretePowder; - materials[9709] = Material.LimeConcretePowder; - materials[9710] = Material.PinkConcretePowder; - materials[9711] = Material.GrayConcretePowder; - materials[9712] = Material.LightGrayConcretePowder; - materials[9713] = Material.CyanConcretePowder; - materials[9714] = Material.PurpleConcretePowder; - materials[9715] = Material.BlueConcretePowder; - materials[9716] = Material.BrownConcretePowder; - materials[9717] = Material.GreenConcretePowder; - materials[9718] = Material.RedConcretePowder; - materials[9719] = Material.BlackConcretePowder; - for (int i = 9720; i <= 9745; i++) - materials[i] = Material.Kelp; - materials[9746] = Material.KelpPlant; - materials[9747] = Material.DriedKelpBlock; - for (int i = 9748; i <= 9759; i++) - materials[i] = Material.TurtleEgg; - materials[9760] = Material.DeadTubeCoralBlock; - materials[9761] = Material.DeadBrainCoralBlock; - materials[9762] = Material.DeadBubbleCoralBlock; - materials[9763] = Material.DeadFireCoralBlock; - materials[9764] = Material.DeadHornCoralBlock; - materials[9765] = Material.TubeCoralBlock; - materials[9766] = Material.BrainCoralBlock; - materials[9767] = Material.BubbleCoralBlock; - materials[9768] = Material.FireCoralBlock; - materials[9769] = Material.HornCoralBlock; - for (int i = 9770; i <= 9771; i++) - materials[i] = Material.DeadTubeCoral; - for (int i = 9772; i <= 9773; i++) - materials[i] = Material.DeadBrainCoral; - for (int i = 9774; i <= 9775; i++) - materials[i] = Material.DeadBubbleCoral; - for (int i = 9776; i <= 9777; i++) - materials[i] = Material.DeadFireCoral; - for (int i = 9778; i <= 9779; i++) - materials[i] = Material.DeadHornCoral; - for (int i = 9780; i <= 9781; i++) - materials[i] = Material.TubeCoral; - for (int i = 9782; i <= 9783; i++) - materials[i] = Material.BrainCoral; - for (int i = 9784; i <= 9785; i++) - materials[i] = Material.BubbleCoral; - for (int i = 9786; i <= 9787; i++) - materials[i] = Material.FireCoral; - for (int i = 9788; i <= 9789; i++) - materials[i] = Material.HornCoral; - for (int i = 9790; i <= 9791; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 9792; i <= 9793; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 9794; i <= 9795; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 9796; i <= 9797; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 9798; i <= 9799; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 9800; i <= 9801; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 9802; i <= 9803; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 9804; i <= 9805; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 9806; i <= 9807; i++) - materials[i] = Material.FireCoralFan; - for (int i = 9808; i <= 9809; i++) - materials[i] = Material.HornCoralFan; - for (int i = 9810; i <= 9817; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 9818; i <= 9825; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 9826; i <= 9833; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - for (int i = 9834; i <= 9841; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 9842; i <= 9849; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 9850; i <= 9857; i++) - materials[i] = Material.TubeCoralWallFan; - for (int i = 9858; i <= 9865; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 9866; i <= 9873; i++) - materials[i] = Material.BubbleCoralWallFan; - for (int i = 9874; i <= 9881; i++) - materials[i] = Material.FireCoralWallFan; - for (int i = 9882; i <= 9889; i++) - materials[i] = Material.HornCoralWallFan; - for (int i = 9890; i <= 9897; i++) - materials[i] = Material.SeaPickle; - materials[9898] = Material.BlueIce; - for (int i = 9899; i <= 9900; i++) - materials[i] = Material.Conduit; - materials[9901] = Material.BambooSapling; - for (int i = 9902; i <= 9913; i++) - materials[i] = Material.Bamboo; - materials[9914] = Material.PottedBamboo; - materials[9915] = Material.VoidAir; - materials[9916] = Material.CaveAir; - for (int i = 9917; i <= 9918; i++) - materials[i] = Material.BubbleColumn; - for (int i = 9919; i <= 9998; i++) - materials[i] = Material.PolishedGraniteStairs; - for (int i = 9999; i <= 10078; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - for (int i = 10079; i <= 10158; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 10159; i <= 10238; i++) - materials[i] = Material.PolishedDioriteStairs; - for (int i = 10239; i <= 10318; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 10319; i <= 10398; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 10399; i <= 10478; i++) - materials[i] = Material.StoneStairs; - for (int i = 10479; i <= 10558; i++) - materials[i] = Material.SmoothSandstoneStairs; - for (int i = 10559; i <= 10638; i++) - materials[i] = Material.SmoothQuartzStairs; - for (int i = 10639; i <= 10718; i++) - materials[i] = Material.GraniteStairs; - for (int i = 10719; i <= 10798; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 10799; i <= 10878; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 10879; i <= 10958; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 10959; i <= 11038; i++) - materials[i] = Material.DioriteStairs; - for (int i = 11039; i <= 11044; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 11045; i <= 11050; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 11051; i <= 11056; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 11057; i <= 11062; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 11063; i <= 11068; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 11069; i <= 11074; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 11075; i <= 11080; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 11081; i <= 11086; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 11087; i <= 11092; i++) - materials[i] = Material.GraniteSlab; - for (int i = 11093; i <= 11098; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 11099; i <= 11104; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 11105; i <= 11110; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 11111; i <= 11116; i++) - materials[i] = Material.DioriteSlab; - for (int i = 11117; i <= 11440; i++) - materials[i] = Material.BrickWall; - for (int i = 11441; i <= 11764; i++) - materials[i] = Material.PrismarineWall; - for (int i = 11765; i <= 12088; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 12089; i <= 12412; i++) - materials[i] = Material.MossyStoneBrickWall; - for (int i = 12413; i <= 12736; i++) - materials[i] = Material.GraniteWall; - for (int i = 12737; i <= 13060; i++) - materials[i] = Material.StoneBrickWall; - for (int i = 13061; i <= 13384; i++) - materials[i] = Material.NetherBrickWall; - for (int i = 13385; i <= 13708; i++) - materials[i] = Material.AndesiteWall; - for (int i = 13709; i <= 14032; i++) - materials[i] = Material.RedNetherBrickWall; - for (int i = 14033; i <= 14356; i++) - materials[i] = Material.SandstoneWall; - for (int i = 14357; i <= 14680; i++) - materials[i] = Material.EndStoneBrickWall; - for (int i = 14681; i <= 15004; i++) - materials[i] = Material.DioriteWall; - for (int i = 15005; i <= 15036; i++) - materials[i] = Material.Scaffolding; - for (int i = 15037; i <= 15040; i++) - materials[i] = Material.Loom; - for (int i = 15041; i <= 15052; i++) - materials[i] = Material.Barrel; - for (int i = 15053; i <= 15060; i++) - materials[i] = Material.Smoker; - for (int i = 15061; i <= 15068; i++) - materials[i] = Material.BlastFurnace; - materials[15069] = Material.CartographyTable; - materials[15070] = Material.FletchingTable; - for (int i = 15071; i <= 15082; i++) - materials[i] = Material.Grindstone; - for (int i = 15083; i <= 15098; i++) - materials[i] = Material.Lectern; - materials[15099] = Material.SmithingTable; - for (int i = 15100; i <= 15103; i++) - materials[i] = Material.Stonecutter; - for (int i = 15104; i <= 15135; i++) - materials[i] = Material.Bell; - for (int i = 15136; i <= 15139; i++) - materials[i] = Material.Lantern; - for (int i = 15140; i <= 15143; i++) - materials[i] = Material.SoulLantern; - for (int i = 15144; i <= 15175; i++) - materials[i] = Material.Campfire; - for (int i = 15176; i <= 15207; i++) - materials[i] = Material.SoulCampfire; - for (int i = 15208; i <= 15211; i++) - materials[i] = Material.SweetBerryBush; - for (int i = 15212; i <= 15214; i++) - materials[i] = Material.WarpedStem; - for (int i = 15215; i <= 15217; i++) - materials[i] = Material.StrippedWarpedStem; - for (int i = 15218; i <= 15220; i++) - materials[i] = Material.WarpedHyphae; - for (int i = 15221; i <= 15223; i++) - materials[i] = Material.StrippedWarpedHyphae; - materials[15224] = Material.WarpedNylium; - materials[15225] = Material.WarpedFungus; - materials[15226] = Material.WarpedWartBlock; - materials[15227] = Material.WarpedRoots; - materials[15228] = Material.NetherSprouts; - for (int i = 15229; i <= 15231; i++) - materials[i] = Material.CrimsonStem; - for (int i = 15232; i <= 15234; i++) - materials[i] = Material.StrippedCrimsonStem; - for (int i = 15235; i <= 15237; i++) - materials[i] = Material.CrimsonHyphae; - for (int i = 15238; i <= 15240; i++) - materials[i] = Material.StrippedCrimsonHyphae; - materials[15241] = Material.CrimsonNylium; - materials[15242] = Material.CrimsonFungus; - materials[15243] = Material.Shroomlight; - for (int i = 15244; i <= 15269; i++) - materials[i] = Material.WeepingVines; - materials[15270] = Material.WeepingVinesPlant; - for (int i = 15271; i <= 15296; i++) - materials[i] = Material.TwistingVines; - materials[15297] = Material.TwistingVinesPlant; - materials[15298] = Material.CrimsonRoots; - materials[15299] = Material.CrimsonPlanks; - materials[15300] = Material.WarpedPlanks; - for (int i = 15301; i <= 15306; i++) - materials[i] = Material.CrimsonSlab; - for (int i = 15307; i <= 15312; i++) - materials[i] = Material.WarpedSlab; - for (int i = 15313; i <= 15314; i++) - materials[i] = Material.CrimsonPressurePlate; - for (int i = 15315; i <= 15316; i++) - materials[i] = Material.WarpedPressurePlate; - for (int i = 15317; i <= 15348; i++) - materials[i] = Material.CrimsonFence; - for (int i = 15349; i <= 15380; i++) - materials[i] = Material.WarpedFence; - for (int i = 15381; i <= 15444; i++) - materials[i] = Material.CrimsonTrapdoor; - for (int i = 15445; i <= 15508; i++) - materials[i] = Material.WarpedTrapdoor; - for (int i = 15509; i <= 15540; i++) - materials[i] = Material.CrimsonFenceGate; - for (int i = 15541; i <= 15572; i++) - materials[i] = Material.WarpedFenceGate; - for (int i = 15573; i <= 15652; i++) - materials[i] = Material.CrimsonStairs; - for (int i = 15653; i <= 15732; i++) - materials[i] = Material.WarpedStairs; - for (int i = 15733; i <= 15756; i++) - materials[i] = Material.CrimsonButton; - for (int i = 15757; i <= 15780; i++) - materials[i] = Material.WarpedButton; - for (int i = 15781; i <= 15844; i++) - materials[i] = Material.CrimsonDoor; - for (int i = 15845; i <= 15908; i++) - materials[i] = Material.WarpedDoor; - for (int i = 15909; i <= 15940; i++) - materials[i] = Material.CrimsonSign; - for (int i = 15941; i <= 15972; i++) - materials[i] = Material.WarpedSign; - for (int i = 15973; i <= 15980; i++) - materials[i] = Material.CrimsonWallSign; - for (int i = 15981; i <= 15988; i++) - materials[i] = Material.WarpedWallSign; - for (int i = 15989; i <= 15992; i++) - materials[i] = Material.StructureBlock; - for (int i = 15993; i <= 16004; i++) - materials[i] = Material.Jigsaw; - for (int i = 16005; i <= 16013; i++) - materials[i] = Material.Composter; - for (int i = 16014; i <= 16029; i++) - materials[i] = Material.Target; - for (int i = 16030; i <= 16053; i++) - materials[i] = Material.BeeNest; - for (int i = 16054; i <= 16077; i++) - materials[i] = Material.Beehive; - materials[16078] = Material.HoneyBlock; - materials[16079] = Material.HoneycombBlock; - materials[16080] = Material.NetheriteBlock; - materials[16081] = Material.AncientDebris; - materials[16082] = Material.CryingObsidian; - for (int i = 16083; i <= 16087; i++) - materials[i] = Material.RespawnAnchor; - materials[16088] = Material.PottedCrimsonFungus; - materials[16089] = Material.PottedWarpedFungus; - materials[16090] = Material.PottedCrimsonRoots; - materials[16091] = Material.PottedWarpedRoots; - materials[16092] = Material.Lodestone; - materials[16093] = Material.Blackstone; - for (int i = 16094; i <= 16173; i++) - materials[i] = Material.BlackstoneStairs; - for (int i = 16174; i <= 16497; i++) - materials[i] = Material.BlackstoneWall; - for (int i = 16498; i <= 16503; i++) - materials[i] = Material.BlackstoneSlab; - materials[16504] = Material.PolishedBlackstone; - materials[16505] = Material.PolishedBlackstoneBricks; - materials[16506] = Material.CrackedPolishedBlackstoneBricks; - materials[16507] = Material.ChiseledPolishedBlackstone; - for (int i = 16508; i <= 16513; i++) - materials[i] = Material.PolishedBlackstoneBrickSlab; - for (int i = 16514; i <= 16593; i++) - materials[i] = Material.PolishedBlackstoneBrickStairs; - for (int i = 16594; i <= 16917; i++) - materials[i] = Material.PolishedBlackstoneBrickWall; - materials[16918] = Material.GildedBlackstone; - for (int i = 16919; i <= 16998; i++) - materials[i] = Material.PolishedBlackstoneStairs; - for (int i = 16999; i <= 17004; i++) - materials[i] = Material.PolishedBlackstoneSlab; - for (int i = 17005; i <= 17006; i++) - materials[i] = Material.PolishedBlackstonePressurePlate; - for (int i = 17007; i <= 17030; i++) - materials[i] = Material.PolishedBlackstoneButton; - for (int i = 17031; i <= 17354; i++) - materials[i] = Material.PolishedBlackstoneWall; - materials[17355] = Material.ChiseledNetherBricks; - materials[17356] = Material.CrackedNetherBricks; - materials[17357] = Material.QuartzBricks; - for (int i = 17358; i <= 17373; i++) - materials[i] = Material.Candle; - for (int i = 17374; i <= 17389; i++) - materials[i] = Material.WhiteCandle; - for (int i = 17390; i <= 17405; i++) - materials[i] = Material.OrangeCandle; - for (int i = 17406; i <= 17421; i++) - materials[i] = Material.MagentaCandle; - for (int i = 17422; i <= 17437; i++) - materials[i] = Material.LightBlueCandle; - for (int i = 17438; i <= 17453; i++) - materials[i] = Material.YellowCandle; - for (int i = 17454; i <= 17469; i++) - materials[i] = Material.LimeCandle; - for (int i = 17470; i <= 17485; i++) - materials[i] = Material.PinkCandle; - for (int i = 17486; i <= 17501; i++) - materials[i] = Material.GrayCandle; - for (int i = 17502; i <= 17517; i++) - materials[i] = Material.LightGrayCandle; - for (int i = 17518; i <= 17533; i++) - materials[i] = Material.CyanCandle; - for (int i = 17534; i <= 17549; i++) - materials[i] = Material.PurpleCandle; - for (int i = 17550; i <= 17565; i++) - materials[i] = Material.BlueCandle; - for (int i = 17566; i <= 17581; i++) - materials[i] = Material.BrownCandle; - for (int i = 17582; i <= 17597; i++) - materials[i] = Material.GreenCandle; - for (int i = 17598; i <= 17613; i++) - materials[i] = Material.RedCandle; - for (int i = 17614; i <= 17629; i++) - materials[i] = Material.BlackCandle; - for (int i = 17630; i <= 17631; i++) - materials[i] = Material.CandleCake; - for (int i = 17632; i <= 17633; i++) - materials[i] = Material.WhiteCandleCake; - for (int i = 17634; i <= 17635; i++) - materials[i] = Material.OrangeCandleCake; - for (int i = 17636; i <= 17637; i++) - materials[i] = Material.MagentaCandleCake; - for (int i = 17638; i <= 17639; i++) - materials[i] = Material.LightBlueCandleCake; - for (int i = 17640; i <= 17641; i++) - materials[i] = Material.YellowCandleCake; - for (int i = 17642; i <= 17643; i++) - materials[i] = Material.LimeCandleCake; - for (int i = 17644; i <= 17645; i++) - materials[i] = Material.PinkCandleCake; - for (int i = 17646; i <= 17647; i++) - materials[i] = Material.GrayCandleCake; - for (int i = 17648; i <= 17649; i++) - materials[i] = Material.LightGrayCandleCake; - for (int i = 17650; i <= 17651; i++) - materials[i] = Material.CyanCandleCake; - for (int i = 17652; i <= 17653; i++) - materials[i] = Material.PurpleCandleCake; - for (int i = 17654; i <= 17655; i++) - materials[i] = Material.BlueCandleCake; - for (int i = 17656; i <= 17657; i++) - materials[i] = Material.BrownCandleCake; - for (int i = 17658; i <= 17659; i++) - materials[i] = Material.GreenCandleCake; - for (int i = 17660; i <= 17661; i++) - materials[i] = Material.RedCandleCake; - for (int i = 17662; i <= 17663; i++) - materials[i] = Material.BlackCandleCake; - materials[17664] = Material.AmethystBlock; - materials[17665] = Material.BuddingAmethyst; - for (int i = 17666; i <= 17677; i++) - materials[i] = Material.AmethystCluster; - for (int i = 17678; i <= 17689; i++) - materials[i] = Material.LargeAmethystBud; - for (int i = 17690; i <= 17701; i++) - materials[i] = Material.MediumAmethystBud; - for (int i = 17702; i <= 17713; i++) - materials[i] = Material.SmallAmethystBud; - materials[17714] = Material.Tuff; - materials[17715] = Material.Calcite; - materials[17716] = Material.TintedGlass; - materials[17717] = Material.PowderSnow; - for (int i = 17718; i <= 17813; i++) - materials[i] = Material.SculkSensor; - materials[17814] = Material.OxidizedCopper; - materials[17815] = Material.WeatheredCopper; - materials[17816] = Material.ExposedCopper; - materials[17817] = Material.CopperBlock; - materials[17818] = Material.CopperOre; - materials[17819] = Material.DeepslateCopperOre; - materials[17820] = Material.OxidizedCutCopper; - materials[17821] = Material.WeatheredCutCopper; - materials[17822] = Material.ExposedCutCopper; - materials[17823] = Material.CutCopper; - for (int i = 17824; i <= 17903; i++) - materials[i] = Material.OxidizedCutCopperStairs; - for (int i = 17904; i <= 17983; i++) - materials[i] = Material.WeatheredCutCopperStairs; - for (int i = 17984; i <= 18063; i++) - materials[i] = Material.ExposedCutCopperStairs; - for (int i = 18064; i <= 18143; i++) - materials[i] = Material.CutCopperStairs; - for (int i = 18144; i <= 18149; i++) - materials[i] = Material.OxidizedCutCopperSlab; - for (int i = 18150; i <= 18155; i++) - materials[i] = Material.WeatheredCutCopperSlab; - for (int i = 18156; i <= 18161; i++) - materials[i] = Material.ExposedCutCopperSlab; - for (int i = 18162; i <= 18167; i++) - materials[i] = Material.CutCopperSlab; - materials[18168] = Material.WaxedCopperBlock; - materials[18169] = Material.WaxedWeatheredCopper; - materials[18170] = Material.WaxedExposedCopper; - materials[18171] = Material.WaxedOxidizedCopper; - materials[18172] = Material.WaxedOxidizedCutCopper; - materials[18173] = Material.WaxedWeatheredCutCopper; - materials[18174] = Material.WaxedExposedCutCopper; - materials[18175] = Material.WaxedCutCopper; - for (int i = 18176; i <= 18255; i++) - materials[i] = Material.WaxedOxidizedCutCopperStairs; - for (int i = 18256; i <= 18335; i++) - materials[i] = Material.WaxedWeatheredCutCopperStairs; - for (int i = 18336; i <= 18415; i++) - materials[i] = Material.WaxedExposedCutCopperStairs; - for (int i = 18416; i <= 18495; i++) - materials[i] = Material.WaxedCutCopperStairs; - for (int i = 18496; i <= 18501; i++) - materials[i] = Material.WaxedOxidizedCutCopperSlab; - for (int i = 18502; i <= 18507; i++) - materials[i] = Material.WaxedWeatheredCutCopperSlab; - for (int i = 18508; i <= 18513; i++) - materials[i] = Material.WaxedExposedCutCopperSlab; - for (int i = 18514; i <= 18519; i++) - materials[i] = Material.WaxedCutCopperSlab; - for (int i = 18520; i <= 18543; i++) - materials[i] = Material.LightningRod; - for (int i = 18544; i <= 18563; i++) - materials[i] = Material.PointedDripstone; - materials[18564] = Material.DripstoneBlock; - for (int i = 18565; i <= 18616; i++) - materials[i] = Material.CaveVines; - for (int i = 18617; i <= 18618; i++) - materials[i] = Material.CaveVinesPlant; - materials[18619] = Material.SporeBlossom; - materials[18620] = Material.Azalea; - materials[18621] = Material.FloweringAzalea; - materials[18622] = Material.MossCarpet; - materials[18623] = Material.MossBlock; - for (int i = 18624; i <= 18655; i++) - materials[i] = Material.BigDripleaf; - for (int i = 18656; i <= 18663; i++) - materials[i] = Material.BigDripleafStem; - for (int i = 18664; i <= 18679; i++) - materials[i] = Material.SmallDripleaf; - for (int i = 18680; i <= 18681; i++) - materials[i] = Material.HangingRoots; - materials[18682] = Material.RootedDirt; - for (int i = 18683; i <= 18685; i++) - materials[i] = Material.Deepslate; - materials[18686] = Material.CobbledDeepslate; - for (int i = 18687; i <= 18766; i++) - materials[i] = Material.CobbledDeepslateStairs; - for (int i = 18767; i <= 18772; i++) - materials[i] = Material.CobbledDeepslateSlab; - for (int i = 18773; i <= 19096; i++) - materials[i] = Material.CobbledDeepslateWall; - materials[19097] = Material.PolishedDeepslate; - for (int i = 19098; i <= 19177; i++) - materials[i] = Material.PolishedDeepslateStairs; - for (int i = 19178; i <= 19183; i++) - materials[i] = Material.PolishedDeepslateSlab; - for (int i = 19184; i <= 19507; i++) - materials[i] = Material.PolishedDeepslateWall; - materials[19508] = Material.DeepslateTiles; - for (int i = 19509; i <= 19588; i++) - materials[i] = Material.DeepslateTileStairs; - for (int i = 19589; i <= 19594; i++) - materials[i] = Material.DeepslateTileSlab; - for (int i = 19595; i <= 19918; i++) - materials[i] = Material.DeepslateTileWall; - materials[19919] = Material.DeepslateBricks; - for (int i = 19920; i <= 19999; i++) - materials[i] = Material.DeepslateBrickStairs; - for (int i = 20000; i <= 20005; i++) - materials[i] = Material.DeepslateBrickSlab; - for (int i = 20006; i <= 20329; i++) - materials[i] = Material.DeepslateBrickWall; - materials[20330] = Material.ChiseledDeepslate; - materials[20331] = Material.CrackedDeepslateBricks; - materials[20332] = Material.CrackedDeepslateTiles; - for (int i = 20333; i <= 20335; i++) - materials[i] = Material.InfestedDeepslate; - materials[20336] = Material.SmoothBasalt; - materials[20337] = Material.RawIronBlock; - materials[20338] = Material.RawCopperBlock; - materials[20339] = Material.RawGoldBlock; - materials[20340] = Material.PottedAzaleaBush; - materials[20341] = Material.PottedFloweringAzaleaBush; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(21, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(23, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(25, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(27, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(29, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(31, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(34, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(50, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(76, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(79, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(82, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(85, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(88, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(91, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(94, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(97, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(100, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(103, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(106, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(109, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(112, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(115, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(118, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(121, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(124, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(127, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(130, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(133, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(136, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(139, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(142, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(145, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(148, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(162, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(176, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(190, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(204, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(218, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(232, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(246, 14, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 2), - new("persistent", ["true", "false"], 1) - ]), - new(266, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(281, 800, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1081, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1097, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1113, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1129, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1145, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1161, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1177, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1193, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1209, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1225, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1241, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1257, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1273, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1289, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1305, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1321, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1337, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(1361, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(1385, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(1402, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(1404, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(1416, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2), - new("type", ["normal", "sticky"], 1) - ]), - new(1456, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("type", ["normal", "sticky"], 1) - ]), - new(1486, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(1492, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(1496, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(2010, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2090, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("type", ["single", "left", "right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2114, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(3414, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(3422, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(3430, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(3438, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3470, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3502, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3534, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3566, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3598, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3630, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3694, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3702, 20, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3722, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3802, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3810, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3818, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3826, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3834, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3842, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3850, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3874, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3876, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3940, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3942, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3944, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3946, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3948, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3950, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(3952, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(3954, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(3956, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(3958, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(3966, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3990, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(4000, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(4017, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(4033, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(4035, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4071, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(4074, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(4078, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4083, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(4085, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4089, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4093, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(4100, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4180, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4244, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4308, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4372, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4436, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4500, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4574, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4638, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4702, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4766, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4798, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4804, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4837, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4841, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4845, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4853, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4861, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4893, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5021, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5053, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5133, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5213, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(5217, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5249, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5329, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(5334, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(5343, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(5347, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(5351, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5361, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5363, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5375, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5457, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5465, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5481, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5610, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5690, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5770, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5850, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(5863, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(6187, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(6536, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(6544, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(6552, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6576, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6600, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6624, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6648, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6672, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6696, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6712, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6716, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6732, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6736, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6752, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6756, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6772, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6776, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6792, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6796, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6812, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6816, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6820, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6824, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6828, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("type", ["single", "left", "right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6852, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6868, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6884, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6900, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6934, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(6946, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(6949, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7029, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7053, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(7081, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7113, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7145, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7177, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7209, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7241, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7273, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7305, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7337, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7369, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7401, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7433, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7465, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7497, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7529, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7561, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7593, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7673, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7755, 32, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7787, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7854, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7934, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8014, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8094, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8100, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8106, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8113, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(8135, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(8137, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(8139, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(8141, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(8143, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(8145, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(8147, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8163, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8179, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8195, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8211, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8227, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8243, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8259, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8275, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8291, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8307, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8323, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8339, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8355, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8371, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8387, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8403, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8407, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8411, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8415, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8419, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8423, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8427, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8431, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8435, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8439, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8443, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8447, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8451, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8455, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8459, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8463, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8470, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8550, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8556, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8562, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8568, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8574, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8580, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8586, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8592, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8598, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8604, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8610, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8616, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8622, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8628, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8634, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8640, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8646, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8652, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8658, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8668, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8700, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8732, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8764, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8796, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8828, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8860, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8892, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8924, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8956, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8988, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9052, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9116, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9180, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9244, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9308, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9314, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9378, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(9385, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(9388, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9469, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(9475, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9487, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9499, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(9506, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(9510, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9522, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9528, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9534, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9540, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9546, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9552, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9558, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9564, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9570, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9576, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9582, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9588, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9594, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9600, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9606, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9612, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9618, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9624, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9628, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9632, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9636, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9640, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9644, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9648, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9652, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9656, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9660, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9664, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9668, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9672, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9676, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9680, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9684, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9720, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(9748, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(9770, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9772, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9774, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9776, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9778, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9780, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9782, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9784, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9786, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9788, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9790, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9792, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9794, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9796, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9798, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9800, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9802, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9804, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9806, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9808, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9810, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9818, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9826, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9834, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9842, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9850, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9858, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9866, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9874, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9882, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9890, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9899, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(9902, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(9917, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(9919, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9999, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10079, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10159, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10239, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10319, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10399, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10479, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10559, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10639, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10719, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10799, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10879, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10959, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11039, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11045, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11051, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11057, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11063, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11069, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11075, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11081, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11087, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11093, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11099, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11105, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11111, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11117, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(11441, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(11765, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(12089, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(12413, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(12737, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(13061, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(13385, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(13709, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14033, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14357, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14681, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15005, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15037, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15041, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(15053, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(15061, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(15071, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15083, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(15100, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15104, 32, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(15136, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15140, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15144, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15176, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15208, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(15212, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(15215, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(15218, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(15221, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(15229, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(15232, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(15235, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(15238, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(15244, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(15271, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(15301, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15307, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15313, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(15315, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(15317, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(15349, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(15381, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15445, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15509, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(15541, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(15573, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15653, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15733, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(15757, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(15781, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(15845, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(15909, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15941, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15973, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15981, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15989, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(15993, 12, - [ - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 1) - ]), - new(16005, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(16014, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(16030, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(16054, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(16083, 5, - [ - new("charges", ["0", "1", "2", "3", "4"], 1) - ]), - new(16094, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16174, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16498, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16508, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16514, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16594, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16919, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16999, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17005, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(17007, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(17031, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17358, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17374, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17390, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17406, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17422, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17438, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17454, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17470, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17486, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17502, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17518, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17534, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17550, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17566, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17582, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17598, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17614, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17630, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17632, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17634, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17636, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17638, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17640, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17642, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17644, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17646, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17648, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17650, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17652, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17654, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17656, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17658, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17660, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17662, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(17666, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17678, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17690, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17702, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17718, 96, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17824, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17904, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17984, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18064, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18144, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18150, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18156, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18162, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18176, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18256, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18336, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18416, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18496, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18502, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18508, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18514, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18520, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18544, 20, - [ - new("thickness", ["tip_merge", "tip", "frustum", "middle", "base"], 4), - new("vertical_direction", ["up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18565, 52, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 2), - new("berries", ["true", "false"], 1) - ]), - new(18617, 2, - [ - new("berries", ["true", "false"], 1) - ]), - new(18624, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("tilt", ["none", "unstable", "partial", "full"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18656, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18664, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("half", ["upper", "lower"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18680, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(18683, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18687, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18767, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18773, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19098, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19178, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19184, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19509, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19589, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19595, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19920, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20000, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20006, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20333, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette119.cs b/MinecraftClient/Mapping/BlockPalettes/Palette119.cs deleted file mode 100644 index 952bcecd0a..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette119.cs +++ /dev/null @@ -1,4660 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - public class Palette119 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette119() - { - for (int i = 7035; i <= 7058; i++) - materials[i] = Material.AcaciaButton; - for (int i = 9747; i <= 9810; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 9459; i <= 9490; i++) - materials[i] = Material.AcaciaFence; - for (int i = 9267; i <= 9298; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 318; i <= 345; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 129; i <= 131; i++) - materials[i] = Material.AcaciaLog; - materials[19] = Material.AcaciaPlanks; - for (int i = 4186; i <= 4187; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 30; i <= 31; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 3732; i <= 3763; i++) - materials[i] = Material.AcaciaSign; - for (int i = 9065; i <= 9070; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 8004; i <= 8083; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 4676; i <= 4739; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 4056; i <= 4063; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 176; i <= 178; i++) - materials[i] = Material.AcaciaWood; - for (int i = 7440; i <= 7463; i++) - materials[i] = Material.ActivatorRail; - materials[0] = Material.Air; - materials[1669] = Material.Allium; - materials[18619] = Material.AmethystBlock; - for (int i = 18621; i <= 18632; i++) - materials[i] = Material.AmethystCluster; - materials[17036] = Material.AncientDebris; - materials[6] = Material.Andesite; - for (int i = 11724; i <= 11729; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 11350; i <= 11429; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 14340; i <= 14663; i++) - materials[i] = Material.AndesiteWall; - for (int i = 7227; i <= 7230; i++) - materials[i] = Material.Anvil; - for (int i = 5147; i <= 5150; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 5143; i <= 5146; i++) - materials[i] = Material.AttachedPumpkinStem; - materials[19714] = Material.Azalea; - for (int i = 402; i <= 429; i++) - materials[i] = Material.AzaleaLeaves; - materials[1670] = Material.AzureBluet; - for (int i = 10533; i <= 10544; i++) - materials[i] = Material.Bamboo; - materials[10532] = Material.BambooSapling; - for (int i = 15996; i <= 16007; i++) - materials[i] = Material.Barrel; - materials[8245] = Material.Barrier; - for (int i = 4311; i <= 4313; i++) - materials[i] = Material.Basalt; - materials[6248] = Material.Beacon; - materials[74] = Material.Bedrock; - for (int i = 16985; i <= 17008; i++) - materials[i] = Material.BeeNest; - for (int i = 17009; i <= 17032; i++) - materials[i] = Material.Beehive; - for (int i = 10100; i <= 10103; i++) - materials[i] = Material.Beetroots; - for (int i = 16059; i <= 16090; i++) - materials[i] = Material.Bell; - for (int i = 19718; i <= 19749; i++) - materials[i] = Material.BigDripleaf; - for (int i = 19750; i <= 19757; i++) - materials[i] = Material.BigDripleafStem; - for (int i = 6987; i <= 7010; i++) - materials[i] = Material.BirchButton; - for (int i = 9619; i <= 9682; i++) - materials[i] = Material.BirchDoor; - for (int i = 9395; i <= 9426; i++) - materials[i] = Material.BirchFence; - for (int i = 9203; i <= 9234; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 262; i <= 289; i++) - materials[i] = Material.BirchLeaves; - for (int i = 123; i <= 125; i++) - materials[i] = Material.BirchLog; - materials[17] = Material.BirchPlanks; - for (int i = 4182; i <= 4183; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 26; i <= 27; i++) - materials[i] = Material.BirchSapling; - for (int i = 3700; i <= 3731; i++) - materials[i] = Material.BirchSign; - for (int i = 9053; i <= 9058; i++) - materials[i] = Material.BirchSlab; - for (int i = 6076; i <= 6155; i++) - materials[i] = Material.BirchStairs; - for (int i = 4548; i <= 4611; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 4048; i <= 4055; i++) - materials[i] = Material.BirchWallSign; - for (int i = 170; i <= 172; i++) - materials[i] = Material.BirchWood; - for (int i = 8878; i <= 8893; i++) - materials[i] = Material.BlackBanner; - for (int i = 1519; i <= 1534; i++) - materials[i] = Material.BlackBed; - for (int i = 18569; i <= 18584; i++) - materials[i] = Material.BlackCandle; - for (int i = 18617; i <= 18618; i++) - materials[i] = Material.BlackCandleCake; - materials[8622] = Material.BlackCarpet; - materials[10334] = Material.BlackConcrete; - materials[10350] = Material.BlackConcretePowder; - for (int i = 10315; i <= 10318; i++) - materials[i] = Material.BlackGlazedTerracotta; - for (int i = 10249; i <= 10254; i++) - materials[i] = Material.BlackShulkerBox; - materials[4419] = Material.BlackStainedGlass; - for (int i = 7972; i <= 8003; i++) - materials[i] = Material.BlackStainedGlassPane; - materials[7491] = Material.BlackTerracotta; - for (int i = 8954; i <= 8957; i++) - materials[i] = Material.BlackWallBanner; - materials[1653] = Material.BlackWool; - materials[17048] = Material.Blackstone; - for (int i = 17453; i <= 17458; i++) - materials[i] = Material.BlackstoneSlab; - for (int i = 17049; i <= 17128; i++) - materials[i] = Material.BlackstoneStairs; - for (int i = 17129; i <= 17452; i++) - materials[i] = Material.BlackstoneWall; - for (int i = 16016; i <= 16023; i++) - materials[i] = Material.BlastFurnace; - for (int i = 8814; i <= 8829; i++) - materials[i] = Material.BlueBanner; - for (int i = 1455; i <= 1470; i++) - materials[i] = Material.BlueBed; - for (int i = 18505; i <= 18520; i++) - materials[i] = Material.BlueCandle; - for (int i = 18609; i <= 18610; i++) - materials[i] = Material.BlueCandleCake; - materials[8618] = Material.BlueCarpet; - materials[10330] = Material.BlueConcrete; - materials[10346] = Material.BlueConcretePowder; - for (int i = 10299; i <= 10302; i++) - materials[i] = Material.BlueGlazedTerracotta; - materials[10529] = Material.BlueIce; - materials[1668] = Material.BlueOrchid; - for (int i = 10225; i <= 10230; i++) - materials[i] = Material.BlueShulkerBox; - materials[4415] = Material.BlueStainedGlass; - for (int i = 7844; i <= 7875; i++) - materials[i] = Material.BlueStainedGlassPane; - materials[7487] = Material.BlueTerracotta; - for (int i = 8938; i <= 8941; i++) - materials[i] = Material.BlueWallBanner; - materials[1649] = Material.BlueWool; - for (int i = 10137; i <= 10139; i++) - materials[i] = Material.BoneBlock; - materials[1686] = Material.Bookshelf; - for (int i = 10413; i <= 10414; i++) - materials[i] = Material.BrainCoral; - materials[10397] = Material.BrainCoralBlock; - for (int i = 10433; i <= 10434; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 10489; i <= 10496; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 5720; i <= 5727; i++) - materials[i] = Material.BrewingStand; - for (int i = 9119; i <= 9124; i++) - materials[i] = Material.BrickSlab; - for (int i = 5359; i <= 5438; i++) - materials[i] = Material.BrickStairs; - for (int i = 11748; i <= 12071; i++) - materials[i] = Material.BrickWall; - materials[1683] = Material.Bricks; - for (int i = 8830; i <= 8845; i++) - materials[i] = Material.BrownBanner; - for (int i = 1471; i <= 1486; i++) - materials[i] = Material.BrownBed; - for (int i = 18521; i <= 18536; i++) - materials[i] = Material.BrownCandle; - for (int i = 18611; i <= 18612; i++) - materials[i] = Material.BrownCandleCake; - materials[8619] = Material.BrownCarpet; - materials[10331] = Material.BrownConcrete; - materials[10347] = Material.BrownConcretePowder; - for (int i = 10303; i <= 10306; i++) - materials[i] = Material.BrownGlazedTerracotta; - materials[1679] = Material.BrownMushroom; - for (int i = 4880; i <= 4943; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 10231; i <= 10236; i++) - materials[i] = Material.BrownShulkerBox; - materials[4416] = Material.BrownStainedGlass; - for (int i = 7876; i <= 7907; i++) - materials[i] = Material.BrownStainedGlassPane; - materials[7488] = Material.BrownTerracotta; - for (int i = 8942; i <= 8945; i++) - materials[i] = Material.BrownWallBanner; - materials[1650] = Material.BrownWool; - for (int i = 10548; i <= 10549; i++) - materials[i] = Material.BubbleColumn; - for (int i = 10415; i <= 10416; i++) - materials[i] = Material.BubbleCoral; - materials[10398] = Material.BubbleCoralBlock; - for (int i = 10435; i <= 10436; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 10497; i <= 10504; i++) - materials[i] = Material.BubbleCoralWallFan; - materials[18620] = Material.BuddingAmethyst; - for (int i = 4240; i <= 4255; i++) - materials[i] = Material.Cactus; - for (int i = 4333; i <= 4339; i++) - materials[i] = Material.Cake; - materials[18670] = Material.Calcite; - for (int i = 16099; i <= 16130; i++) - materials[i] = Material.Campfire; - for (int i = 18313; i <= 18328; i++) - materials[i] = Material.Candle; - for (int i = 18585; i <= 18586; i++) - materials[i] = Material.CandleCake; - for (int i = 6923; i <= 6930; i++) - materials[i] = Material.Carrots; - materials[16024] = Material.CartographyTable; - for (int i = 4325; i <= 4328; i++) - materials[i] = Material.CarvedPumpkin; - materials[5728] = Material.Cauldron; - materials[10547] = Material.CaveAir; - for (int i = 19659; i <= 19710; i++) - materials[i] = Material.CaveVines; - for (int i = 19711; i <= 19712; i++) - materials[i] = Material.CaveVinesPlant; - for (int i = 5104; i <= 5109; i++) - materials[i] = Material.Chain; - for (int i = 10118; i <= 10129; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 2288; i <= 2311; i++) - materials[i] = Material.Chest; - for (int i = 7231; i <= 7234; i++) - materials[i] = Material.ChippedAnvil; - materials[21425] = Material.ChiseledDeepslate; - materials[18310] = Material.ChiseledNetherBricks; - materials[17462] = Material.ChiseledPolishedBlackstone; - materials[7356] = Material.ChiseledQuartzBlock; - materials[8959] = Material.ChiseledRedSandstone; - materials[477] = Material.ChiseledSandstone; - materials[4871] = Material.ChiseledStoneBricks; - for (int i = 10009; i <= 10014; i++) - materials[i] = Material.ChorusFlower; - for (int i = 9945; i <= 10008; i++) - materials[i] = Material.ChorusPlant; - materials[4256] = Material.Clay; - materials[8624] = Material.CoalBlock; - materials[114] = Material.CoalOre; - materials[11] = Material.CoarseDirt; - materials[19781] = Material.CobbledDeepslate; - for (int i = 19862; i <= 19867; i++) - materials[i] = Material.CobbledDeepslateSlab; - for (int i = 19782; i <= 19861; i++) - materials[i] = Material.CobbledDeepslateStairs; - for (int i = 19868; i <= 20191; i++) - materials[i] = Material.CobbledDeepslateWall; - materials[14] = Material.Cobblestone; - for (int i = 9113; i <= 9118; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 3952; i <= 4031; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 6249; i <= 6572; i++) - materials[i] = Material.CobblestoneWall; - materials[1595] = Material.Cobweb; - for (int i = 5749; i <= 5760; i++) - materials[i] = Material.Cocoa; - for (int i = 6236; i <= 6247; i++) - materials[i] = Material.CommandBlock; - for (int i = 7295; i <= 7310; i++) - materials[i] = Material.Comparator; - for (int i = 16960; i <= 16968; i++) - materials[i] = Material.Composter; - for (int i = 10530; i <= 10531; i++) - materials[i] = Material.Conduit; - materials[18911] = Material.CopperBlock; - materials[18912] = Material.CopperOre; - materials[1676] = Material.Cornflower; - materials[21426] = Material.CrackedDeepslateBricks; - materials[21427] = Material.CrackedDeepslateTiles; - materials[18311] = Material.CrackedNetherBricks; - materials[17461] = Material.CrackedPolishedBlackstoneBricks; - materials[4870] = Material.CrackedStoneBricks; - materials[3611] = Material.CraftingTable; - for (int i = 7187; i <= 7202; i++) - materials[i] = Material.CreeperHead; - for (int i = 7203; i <= 7206; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 16688; i <= 16711; i++) - materials[i] = Material.CrimsonButton; - for (int i = 16736; i <= 16799; i++) - materials[i] = Material.CrimsonDoor; - for (int i = 16272; i <= 16303; i++) - materials[i] = Material.CrimsonFence; - for (int i = 16464; i <= 16495; i++) - materials[i] = Material.CrimsonFenceGate; - materials[16197] = Material.CrimsonFungus; - for (int i = 16190; i <= 16192; i++) - materials[i] = Material.CrimsonHyphae; - materials[16196] = Material.CrimsonNylium; - materials[16254] = Material.CrimsonPlanks; - for (int i = 16268; i <= 16269; i++) - materials[i] = Material.CrimsonPressurePlate; - materials[16253] = Material.CrimsonRoots; - for (int i = 16864; i <= 16895; i++) - materials[i] = Material.CrimsonSign; - for (int i = 16256; i <= 16261; i++) - materials[i] = Material.CrimsonSlab; - for (int i = 16528; i <= 16607; i++) - materials[i] = Material.CrimsonStairs; - for (int i = 16184; i <= 16186; i++) - materials[i] = Material.CrimsonStem; - for (int i = 16336; i <= 16399; i++) - materials[i] = Material.CrimsonTrapdoor; - for (int i = 16928; i <= 16935; i++) - materials[i] = Material.CrimsonWallSign; - materials[17037] = Material.CryingObsidian; - materials[18917] = Material.CutCopper; - for (int i = 19256; i <= 19261; i++) - materials[i] = Material.CutCopperSlab; - for (int i = 19158; i <= 19237; i++) - materials[i] = Material.CutCopperStairs; - materials[8960] = Material.CutRedSandstone; - for (int i = 9155; i <= 9160; i++) - materials[i] = Material.CutRedSandstoneSlab; - materials[478] = Material.CutSandstone; - for (int i = 9101; i <= 9106; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 8782; i <= 8797; i++) - materials[i] = Material.CyanBanner; - for (int i = 1423; i <= 1438; i++) - materials[i] = Material.CyanBed; - for (int i = 18473; i <= 18488; i++) - materials[i] = Material.CyanCandle; - for (int i = 18605; i <= 18606; i++) - materials[i] = Material.CyanCandleCake; - materials[8616] = Material.CyanCarpet; - materials[10328] = Material.CyanConcrete; - materials[10344] = Material.CyanConcretePowder; - for (int i = 10291; i <= 10294; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 10213; i <= 10218; i++) - materials[i] = Material.CyanShulkerBox; - materials[4413] = Material.CyanStainedGlass; - for (int i = 7780; i <= 7811; i++) - materials[i] = Material.CyanStainedGlassPane; - materials[7485] = Material.CyanTerracotta; - for (int i = 8930; i <= 8933; i++) - materials[i] = Material.CyanWallBanner; - materials[1647] = Material.CyanWool; - for (int i = 7235; i <= 7238; i++) - materials[i] = Material.DamagedAnvil; - materials[1666] = Material.Dandelion; - for (int i = 7059; i <= 7082; i++) - materials[i] = Material.DarkOakButton; - for (int i = 9811; i <= 9874; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 9491; i <= 9522; i++) - materials[i] = Material.DarkOakFence; - for (int i = 9299; i <= 9330; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 346; i <= 373; i++) - materials[i] = Material.DarkOakLeaves; - for (int i = 132; i <= 134; i++) - materials[i] = Material.DarkOakLog; - materials[20] = Material.DarkOakPlanks; - for (int i = 4188; i <= 4189; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 32; i <= 33; i++) - materials[i] = Material.DarkOakSapling; - for (int i = 3796; i <= 3827; i++) - materials[i] = Material.DarkOakSign; - for (int i = 9071; i <= 9076; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 8084; i <= 8163; i++) - materials[i] = Material.DarkOakStairs; - for (int i = 4740; i <= 4803; i++) - materials[i] = Material.DarkOakTrapdoor; - for (int i = 4072; i <= 4079; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 179; i <= 181; i++) - materials[i] = Material.DarkOakWood; - materials[8344] = Material.DarkPrismarine; - for (int i = 8597; i <= 8602; i++) - materials[i] = Material.DarkPrismarineSlab; - for (int i = 8505; i <= 8584; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 7311; i <= 7342; i++) - materials[i] = Material.DaylightDetector; - for (int i = 10403; i <= 10404; i++) - materials[i] = Material.DeadBrainCoral; - materials[10392] = Material.DeadBrainCoralBlock; - for (int i = 10423; i <= 10424; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 10449; i <= 10456; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 10405; i <= 10406; i++) - materials[i] = Material.DeadBubbleCoral; - materials[10393] = Material.DeadBubbleCoralBlock; - for (int i = 10425; i <= 10426; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 10457; i <= 10464; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - materials[1598] = Material.DeadBush; - for (int i = 10407; i <= 10408; i++) - materials[i] = Material.DeadFireCoral; - materials[10394] = Material.DeadFireCoralBlock; - for (int i = 10427; i <= 10428; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 10465; i <= 10472; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 10409; i <= 10410; i++) - materials[i] = Material.DeadHornCoral; - materials[10395] = Material.DeadHornCoralBlock; - for (int i = 10429; i <= 10430; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 10473; i <= 10480; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 10401; i <= 10402; i++) - materials[i] = Material.DeadTubeCoral; - materials[10391] = Material.DeadTubeCoralBlock; - for (int i = 10421; i <= 10422; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 10441; i <= 10448; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 19778; i <= 19780; i++) - materials[i] = Material.Deepslate; - for (int i = 21095; i <= 21100; i++) - materials[i] = Material.DeepslateBrickSlab; - for (int i = 21015; i <= 21094; i++) - materials[i] = Material.DeepslateBrickStairs; - for (int i = 21101; i <= 21424; i++) - materials[i] = Material.DeepslateBrickWall; - materials[21014] = Material.DeepslateBricks; - materials[115] = Material.DeepslateCoalOre; - materials[18913] = Material.DeepslateCopperOre; - materials[3609] = Material.DeepslateDiamondOre; - materials[5842] = Material.DeepslateEmeraldOre; - materials[111] = Material.DeepslateGoldOre; - materials[113] = Material.DeepslateIronOre; - materials[462] = Material.DeepslateLapisOre; - for (int i = 4194; i <= 4195; i++) - materials[i] = Material.DeepslateRedstoneOre; - for (int i = 20684; i <= 20689; i++) - materials[i] = Material.DeepslateTileSlab; - for (int i = 20604; i <= 20683; i++) - materials[i] = Material.DeepslateTileStairs; - for (int i = 20690; i <= 21013; i++) - materials[i] = Material.DeepslateTileWall; - materials[20603] = Material.DeepslateTiles; - for (int i = 1559; i <= 1582; i++) - materials[i] = Material.DetectorRail; - materials[3610] = Material.DiamondBlock; - materials[3608] = Material.DiamondOre; - materials[4] = Material.Diorite; - for (int i = 11742; i <= 11747; i++) - materials[i] = Material.DioriteSlab; - for (int i = 11590; i <= 11669; i++) - materials[i] = Material.DioriteStairs; - for (int i = 15636; i <= 15959; i++) - materials[i] = Material.DioriteWall; - materials[10] = Material.Dirt; - materials[10104] = Material.DirtPath; - for (int i = 464; i <= 475; i++) - materials[i] = Material.Dispenser; - materials[5746] = Material.DragonEgg; - for (int i = 7207; i <= 7222; i++) - materials[i] = Material.DragonHead; - for (int i = 7223; i <= 7226; i++) - materials[i] = Material.DragonWallHead; - materials[10378] = Material.DriedKelpBlock; - materials[19658] = Material.DripstoneBlock; - for (int i = 7464; i <= 7475; i++) - materials[i] = Material.Dropper; - materials[5995] = Material.EmeraldBlock; - materials[5841] = Material.EmeraldOre; - materials[5719] = Material.EnchantingTable; - materials[10105] = Material.EndGateway; - materials[5736] = Material.EndPortal; - for (int i = 5737; i <= 5744; i++) - materials[i] = Material.EndPortalFrame; - for (int i = 9939; i <= 9944; i++) - materials[i] = Material.EndRod; - materials[5745] = Material.EndStone; - for (int i = 11700; i <= 11705; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 10950; i <= 11029; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 15312; i <= 15635; i++) - materials[i] = Material.EndStoneBrickWall; - materials[10099] = Material.EndStoneBricks; - for (int i = 5843; i <= 5850; i++) - materials[i] = Material.EnderChest; - materials[18910] = Material.ExposedCopper; - materials[18916] = Material.ExposedCutCopper; - for (int i = 19250; i <= 19255; i++) - materials[i] = Material.ExposedCutCopperSlab; - for (int i = 19078; i <= 19157; i++) - materials[i] = Material.ExposedCutCopperStairs; - for (int i = 3620; i <= 3627; i++) - materials[i] = Material.Farmland; - materials[1597] = Material.Fern; - for (int i = 1694; i <= 2205; i++) - materials[i] = Material.Fire; - for (int i = 10417; i <= 10418; i++) - materials[i] = Material.FireCoral; - materials[10399] = Material.FireCoralBlock; - for (int i = 10437; i <= 10438; i++) - materials[i] = Material.FireCoralFan; - for (int i = 10505; i <= 10512; i++) - materials[i] = Material.FireCoralWallFan; - materials[16025] = Material.FletchingTable; - materials[6897] = Material.FlowerPot; - materials[19715] = Material.FloweringAzalea; - for (int i = 430; i <= 457; i++) - materials[i] = Material.FloweringAzaleaLeaves; - materials[21446] = Material.Frogspawn; - for (int i = 10130; i <= 10133; i++) - materials[i] = Material.FrostedIce; - for (int i = 3628; i <= 3635; i++) - materials[i] = Material.Furnace; - materials[17873] = Material.GildedBlackstone; - materials[460] = Material.Glass; - for (int i = 5110; i <= 5141; i++) - materials[i] = Material.GlassPane; - for (int i = 5199; i <= 5326; i++) - materials[i] = Material.GlowLichen; - materials[4322] = Material.Glowstone; - materials[1681] = Material.GoldBlock; - materials[110] = Material.GoldOre; - materials[2] = Material.Granite; - for (int i = 11718; i <= 11723; i++) - materials[i] = Material.GraniteSlab; - for (int i = 11270; i <= 11349; i++) - materials[i] = Material.GraniteStairs; - for (int i = 13044; i <= 13367; i++) - materials[i] = Material.GraniteWall; - materials[1596] = Material.ShortGrass; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - materials[109] = Material.Gravel; - for (int i = 8750; i <= 8765; i++) - materials[i] = Material.GrayBanner; - for (int i = 1391; i <= 1406; i++) - materials[i] = Material.GrayBed; - for (int i = 18441; i <= 18456; i++) - materials[i] = Material.GrayCandle; - for (int i = 18601; i <= 18602; i++) - materials[i] = Material.GrayCandleCake; - materials[8614] = Material.GrayCarpet; - materials[10326] = Material.GrayConcrete; - materials[10342] = Material.GrayConcretePowder; - for (int i = 10283; i <= 10286; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 10201; i <= 10206; i++) - materials[i] = Material.GrayShulkerBox; - materials[4411] = Material.GrayStainedGlass; - for (int i = 7716; i <= 7747; i++) - materials[i] = Material.GrayStainedGlassPane; - materials[7483] = Material.GrayTerracotta; - for (int i = 8922; i <= 8925; i++) - materials[i] = Material.GrayWallBanner; - materials[1645] = Material.GrayWool; - for (int i = 8846; i <= 8861; i++) - materials[i] = Material.GreenBanner; - for (int i = 1487; i <= 1502; i++) - materials[i] = Material.GreenBed; - for (int i = 18537; i <= 18552; i++) - materials[i] = Material.GreenCandle; - for (int i = 18613; i <= 18614; i++) - materials[i] = Material.GreenCandleCake; - materials[8620] = Material.GreenCarpet; - materials[10332] = Material.GreenConcrete; - materials[10348] = Material.GreenConcretePowder; - for (int i = 10307; i <= 10310; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 10237; i <= 10242; i++) - materials[i] = Material.GreenShulkerBox; - materials[4417] = Material.GreenStainedGlass; - for (int i = 7908; i <= 7939; i++) - materials[i] = Material.GreenStainedGlassPane; - materials[7489] = Material.GreenTerracotta; - for (int i = 8946; i <= 8949; i++) - materials[i] = Material.GreenWallBanner; - materials[1651] = Material.GreenWool; - for (int i = 16026; i <= 16037; i++) - materials[i] = Material.Grindstone; - for (int i = 19774; i <= 19775; i++) - materials[i] = Material.HangingRoots; - for (int i = 8604; i <= 8606; i++) - materials[i] = Material.HayBlock; - for (int i = 7279; i <= 7294; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - materials[17033] = Material.HoneyBlock; - materials[17034] = Material.HoneycombBlock; - for (int i = 7345; i <= 7354; i++) - materials[i] = Material.Hopper; - for (int i = 10419; i <= 10420; i++) - materials[i] = Material.HornCoral; - materials[10400] = Material.HornCoralBlock; - for (int i = 10439; i <= 10440; i++) - materials[i] = Material.HornCoralFan; - for (int i = 10513; i <= 10520; i++) - materials[i] = Material.HornCoralWallFan; - materials[4238] = Material.Ice; - materials[4879] = Material.InfestedChiseledStoneBricks; - materials[4875] = Material.InfestedCobblestone; - materials[4878] = Material.InfestedCrackedStoneBricks; - for (int i = 21428; i <= 21430; i++) - materials[i] = Material.InfestedDeepslate; - materials[4877] = Material.InfestedMossyStoneBricks; - materials[4874] = Material.InfestedStone; - materials[4876] = Material.InfestedStoneBricks; - for (int i = 5072; i <= 5103; i++) - materials[i] = Material.IronBars; - materials[1682] = Material.IronBlock; - for (int i = 4114; i <= 4177; i++) - materials[i] = Material.IronDoor; - materials[112] = Material.IronOre; - for (int i = 8278; i <= 8341; i++) - materials[i] = Material.IronTrapdoor; - for (int i = 4329; i <= 4332; i++) - materials[i] = Material.JackOLantern; - for (int i = 16948; i <= 16959; i++) - materials[i] = Material.Jigsaw; - for (int i = 4273; i <= 4274; i++) - materials[i] = Material.Jukebox; - for (int i = 7011; i <= 7034; i++) - materials[i] = Material.JungleButton; - for (int i = 9683; i <= 9746; i++) - materials[i] = Material.JungleDoor; - for (int i = 9427; i <= 9458; i++) - materials[i] = Material.JungleFence; - for (int i = 9235; i <= 9266; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 290; i <= 317; i++) - materials[i] = Material.JungleLeaves; - for (int i = 126; i <= 128; i++) - materials[i] = Material.JungleLog; - materials[18] = Material.JunglePlanks; - for (int i = 4184; i <= 4185; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 28; i <= 29; i++) - materials[i] = Material.JungleSapling; - for (int i = 3764; i <= 3795; i++) - materials[i] = Material.JungleSign; - for (int i = 9059; i <= 9064; i++) - materials[i] = Material.JungleSlab; - for (int i = 6156; i <= 6235; i++) - materials[i] = Material.JungleStairs; - for (int i = 4612; i <= 4675; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 4064; i <= 4071; i++) - materials[i] = Material.JungleWallSign; - for (int i = 173; i <= 175; i++) - materials[i] = Material.JungleWood; - for (int i = 10351; i <= 10376; i++) - materials[i] = Material.Kelp; - materials[10377] = Material.KelpPlant; - for (int i = 3924; i <= 3931; i++) - materials[i] = Material.Ladder; - for (int i = 16091; i <= 16094; i++) - materials[i] = Material.Lantern; - materials[463] = Material.LapisBlock; - materials[461] = Material.LapisOre; - for (int i = 18633; i <= 18644; i++) - materials[i] = Material.LargeAmethystBud; - for (int i = 8636; i <= 8637; i++) - materials[i] = Material.LargeFern; - for (int i = 91; i <= 106; i++) - materials[i] = Material.Lava; - materials[5732] = Material.LavaCauldron; - for (int i = 16038; i <= 16053; i++) - materials[i] = Material.Lectern; - for (int i = 4088; i <= 4111; i++) - materials[i] = Material.Lever; - for (int i = 8246; i <= 8277; i++) - materials[i] = Material.Light; - for (int i = 8686; i <= 8701; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 1327; i <= 1342; i++) - materials[i] = Material.LightBlueBed; - for (int i = 18377; i <= 18392; i++) - materials[i] = Material.LightBlueCandle; - for (int i = 18593; i <= 18594; i++) - materials[i] = Material.LightBlueCandleCake; - materials[8610] = Material.LightBlueCarpet; - materials[10322] = Material.LightBlueConcrete; - materials[10338] = Material.LightBlueConcretePowder; - for (int i = 10267; i <= 10270; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 10177; i <= 10182; i++) - materials[i] = Material.LightBlueShulkerBox; - materials[4407] = Material.LightBlueStainedGlass; - for (int i = 7588; i <= 7619; i++) - materials[i] = Material.LightBlueStainedGlassPane; - materials[7479] = Material.LightBlueTerracotta; - for (int i = 8906; i <= 8909; i++) - materials[i] = Material.LightBlueWallBanner; - materials[1641] = Material.LightBlueWool; - for (int i = 8766; i <= 8781; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 1407; i <= 1422; i++) - materials[i] = Material.LightGrayBed; - for (int i = 18457; i <= 18472; i++) - materials[i] = Material.LightGrayCandle; - for (int i = 18603; i <= 18604; i++) - materials[i] = Material.LightGrayCandleCake; - materials[8615] = Material.LightGrayCarpet; - materials[10327] = Material.LightGrayConcrete; - materials[10343] = Material.LightGrayConcretePowder; - for (int i = 10287; i <= 10290; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 10207; i <= 10212; i++) - materials[i] = Material.LightGrayShulkerBox; - materials[4412] = Material.LightGrayStainedGlass; - for (int i = 7748; i <= 7779; i++) - materials[i] = Material.LightGrayStainedGlassPane; - materials[7484] = Material.LightGrayTerracotta; - for (int i = 8926; i <= 8929; i++) - materials[i] = Material.LightGrayWallBanner; - materials[1646] = Material.LightGrayWool; - for (int i = 7263; i <= 7278; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 19614; i <= 19637; i++) - materials[i] = Material.LightningRod; - for (int i = 8628; i <= 8629; i++) - materials[i] = Material.Lilac; - materials[1678] = Material.LilyOfTheValley; - materials[5601] = Material.LilyPad; - for (int i = 8718; i <= 8733; i++) - materials[i] = Material.LimeBanner; - for (int i = 1359; i <= 1374; i++) - materials[i] = Material.LimeBed; - for (int i = 18409; i <= 18424; i++) - materials[i] = Material.LimeCandle; - for (int i = 18597; i <= 18598; i++) - materials[i] = Material.LimeCandleCake; - materials[8612] = Material.LimeCarpet; - materials[10324] = Material.LimeConcrete; - materials[10340] = Material.LimeConcretePowder; - for (int i = 10275; i <= 10278; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 10189; i <= 10194; i++) - materials[i] = Material.LimeShulkerBox; - materials[4409] = Material.LimeStainedGlass; - for (int i = 7652; i <= 7683; i++) - materials[i] = Material.LimeStainedGlassPane; - materials[7481] = Material.LimeTerracotta; - for (int i = 8914; i <= 8917; i++) - materials[i] = Material.LimeWallBanner; - materials[1643] = Material.LimeWool; - materials[17047] = Material.Lodestone; - for (int i = 15992; i <= 15995; i++) - materials[i] = Material.Loom; - for (int i = 8670; i <= 8685; i++) - materials[i] = Material.MagentaBanner; - for (int i = 1311; i <= 1326; i++) - materials[i] = Material.MagentaBed; - for (int i = 18361; i <= 18376; i++) - materials[i] = Material.MagentaCandle; - for (int i = 18591; i <= 18592; i++) - materials[i] = Material.MagentaCandleCake; - materials[8609] = Material.MagentaCarpet; - materials[10321] = Material.MagentaConcrete; - materials[10337] = Material.MagentaConcretePowder; - for (int i = 10263; i <= 10266; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 10171; i <= 10176; i++) - materials[i] = Material.MagentaShulkerBox; - materials[4406] = Material.MagentaStainedGlass; - for (int i = 7556; i <= 7587; i++) - materials[i] = Material.MagentaStainedGlassPane; - materials[7478] = Material.MagentaTerracotta; - for (int i = 8902; i <= 8905; i++) - materials[i] = Material.MagentaWallBanner; - materials[1640] = Material.MagentaWool; - materials[10134] = Material.MagmaBlock; - for (int i = 7083; i <= 7106; i++) - materials[i] = Material.MangroveButton; - for (int i = 9875; i <= 9938; i++) - materials[i] = Material.MangroveDoor; - for (int i = 9523; i <= 9554; i++) - materials[i] = Material.MangroveFence; - for (int i = 9331; i <= 9362; i++) - materials[i] = Material.MangroveFenceGate; - for (int i = 374; i <= 401; i++) - materials[i] = Material.MangroveLeaves; - for (int i = 135; i <= 137; i++) - materials[i] = Material.MangroveLog; - materials[21] = Material.MangrovePlanks; - for (int i = 4190; i <= 4191; i++) - materials[i] = Material.MangrovePressurePlate; - for (int i = 34; i <= 73; i++) - materials[i] = Material.MangrovePropagule; - for (int i = 138; i <= 139; i++) - materials[i] = Material.MangroveRoots; - for (int i = 3828; i <= 3859; i++) - materials[i] = Material.MangroveSign; - for (int i = 9077; i <= 9082; i++) - materials[i] = Material.MangroveSlab; - for (int i = 8164; i <= 8243; i++) - materials[i] = Material.MangroveStairs; - for (int i = 4804; i <= 4867; i++) - materials[i] = Material.MangroveTrapdoor; - for (int i = 4080; i <= 4087; i++) - materials[i] = Material.MangroveWallSign; - for (int i = 182; i <= 184; i++) - materials[i] = Material.MangroveWood; - for (int i = 18645; i <= 18656; i++) - materials[i] = Material.MediumAmethystBud; - materials[5142] = Material.Melon; - for (int i = 5159; i <= 5166; i++) - materials[i] = Material.MelonStem; - materials[19717] = Material.MossBlock; - materials[19716] = Material.MossCarpet; - materials[1687] = Material.MossyCobblestone; - for (int i = 11694; i <= 11699; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 10870; i <= 10949; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 6573; i <= 6896; i++) - materials[i] = Material.MossyCobblestoneWall; - for (int i = 11682; i <= 11687; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 10710; i <= 10789; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 12720; i <= 13043; i++) - materials[i] = Material.MossyStoneBrickWall; - materials[4869] = Material.MossyStoneBricks; - for (int i = 1654; i <= 1665; i++) - materials[i] = Material.MovingPiston; - materials[19777] = Material.Mud; - for (int i = 9131; i <= 9136; i++) - materials[i] = Material.MudBrickSlab; - for (int i = 5519; i <= 5598; i++) - materials[i] = Material.MudBrickStairs; - for (int i = 13692; i <= 14015; i++) - materials[i] = Material.MudBrickWall; - materials[4873] = Material.MudBricks; - for (int i = 140; i <= 142; i++) - materials[i] = Material.MuddyMangroveRoots; - for (int i = 5008; i <= 5071; i++) - materials[i] = Material.MushroomStem; - for (int i = 5599; i <= 5600; i++) - materials[i] = Material.Mycelium; - for (int i = 5603; i <= 5634; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 9137; i <= 9142; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 5635; i <= 5714; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 14016; i <= 14339; i++) - materials[i] = Material.NetherBrickWall; - materials[5602] = Material.NetherBricks; - materials[116] = Material.NetherGoldOre; - for (int i = 4323; i <= 4324; i++) - materials[i] = Material.NetherPortal; - materials[7344] = Material.NetherQuartzOre; - materials[16183] = Material.NetherSprouts; - for (int i = 5715; i <= 5718; i++) - materials[i] = Material.NetherWart; - materials[10135] = Material.NetherWartBlock; - materials[17035] = Material.NetheriteBlock; - materials[4308] = Material.Netherrack; - for (int i = 479; i <= 1278; i++) - materials[i] = Material.NoteBlock; - for (int i = 6939; i <= 6962; i++) - materials[i] = Material.OakButton; - for (int i = 3860; i <= 3923; i++) - materials[i] = Material.OakDoor; - for (int i = 4275; i <= 4306; i++) - materials[i] = Material.OakFence; - for (int i = 5327; i <= 5358; i++) - materials[i] = Material.OakFenceGate; - for (int i = 206; i <= 233; i++) - materials[i] = Material.OakLeaves; - for (int i = 117; i <= 119; i++) - materials[i] = Material.OakLog; - materials[15] = Material.OakPlanks; - for (int i = 4178; i <= 4179; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 22; i <= 23; i++) - materials[i] = Material.OakSapling; - for (int i = 3636; i <= 3667; i++) - materials[i] = Material.OakSign; - for (int i = 9041; i <= 9046; i++) - materials[i] = Material.OakSlab; - for (int i = 2208; i <= 2287; i++) - materials[i] = Material.OakStairs; - for (int i = 4420; i <= 4483; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 4032; i <= 4039; i++) - materials[i] = Material.OakWallSign; - for (int i = 164; i <= 166; i++) - materials[i] = Material.OakWood; - for (int i = 10141; i <= 10152; i++) - materials[i] = Material.Observer; - materials[1688] = Material.Obsidian; - for (int i = 21437; i <= 21439; i++) - materials[i] = Material.OchreFroglight; - for (int i = 8654; i <= 8669; i++) - materials[i] = Material.OrangeBanner; - for (int i = 1295; i <= 1310; i++) - materials[i] = Material.OrangeBed; - for (int i = 18345; i <= 18360; i++) - materials[i] = Material.OrangeCandle; - for (int i = 18589; i <= 18590; i++) - materials[i] = Material.OrangeCandleCake; - materials[8608] = Material.OrangeCarpet; - materials[10320] = Material.OrangeConcrete; - materials[10336] = Material.OrangeConcretePowder; - for (int i = 10259; i <= 10262; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 10165; i <= 10170; i++) - materials[i] = Material.OrangeShulkerBox; - materials[4405] = Material.OrangeStainedGlass; - for (int i = 7524; i <= 7555; i++) - materials[i] = Material.OrangeStainedGlassPane; - materials[7477] = Material.OrangeTerracotta; - materials[1672] = Material.OrangeTulip; - for (int i = 8898; i <= 8901; i++) - materials[i] = Material.OrangeWallBanner; - materials[1639] = Material.OrangeWool; - materials[1675] = Material.OxeyeDaisy; - materials[18908] = Material.OxidizedCopper; - materials[18914] = Material.OxidizedCutCopper; - for (int i = 19238; i <= 19243; i++) - materials[i] = Material.OxidizedCutCopperSlab; - for (int i = 18918; i <= 18997; i++) - materials[i] = Material.OxidizedCutCopperStairs; - materials[8625] = Material.PackedIce; - materials[4872] = Material.PackedMud; - for (int i = 21443; i <= 21445; i++) - materials[i] = Material.PearlescentFroglight; - for (int i = 8632; i <= 8633; i++) - materials[i] = Material.Peony; - for (int i = 9107; i <= 9112; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 8734; i <= 8749; i++) - materials[i] = Material.PinkBanner; - for (int i = 1375; i <= 1390; i++) - materials[i] = Material.PinkBed; - for (int i = 18425; i <= 18440; i++) - materials[i] = Material.PinkCandle; - for (int i = 18599; i <= 18600; i++) - materials[i] = Material.PinkCandleCake; - materials[8613] = Material.PinkCarpet; - materials[10325] = Material.PinkConcrete; - materials[10341] = Material.PinkConcretePowder; - for (int i = 10279; i <= 10282; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 10195; i <= 10200; i++) - materials[i] = Material.PinkShulkerBox; - materials[4410] = Material.PinkStainedGlass; - for (int i = 7684; i <= 7715; i++) - materials[i] = Material.PinkStainedGlassPane; - materials[7482] = Material.PinkTerracotta; - materials[1674] = Material.PinkTulip; - for (int i = 8918; i <= 8921; i++) - materials[i] = Material.PinkWallBanner; - materials[1644] = Material.PinkWool; - for (int i = 1602; i <= 1613; i++) - materials[i] = Material.Piston; - for (int i = 1614; i <= 1637; i++) - materials[i] = Material.PistonHead; - for (int i = 7167; i <= 7182; i++) - materials[i] = Material.PlayerHead; - for (int i = 7183; i <= 7186; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - for (int i = 19638; i <= 19657; i++) - materials[i] = Material.PointedDripstone; - materials[7] = Material.PolishedAndesite; - for (int i = 11736; i <= 11741; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 11510; i <= 11589; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 4314; i <= 4316; i++) - materials[i] = Material.PolishedBasalt; - materials[17459] = Material.PolishedBlackstone; - for (int i = 17463; i <= 17468; i++) - materials[i] = Material.PolishedBlackstoneBrickSlab; - for (int i = 17469; i <= 17548; i++) - materials[i] = Material.PolishedBlackstoneBrickStairs; - for (int i = 17549; i <= 17872; i++) - materials[i] = Material.PolishedBlackstoneBrickWall; - materials[17460] = Material.PolishedBlackstoneBricks; - for (int i = 17962; i <= 17985; i++) - materials[i] = Material.PolishedBlackstoneButton; - for (int i = 17960; i <= 17961; i++) - materials[i] = Material.PolishedBlackstonePressurePlate; - for (int i = 17954; i <= 17959; i++) - materials[i] = Material.PolishedBlackstoneSlab; - for (int i = 17874; i <= 17953; i++) - materials[i] = Material.PolishedBlackstoneStairs; - for (int i = 17986; i <= 18309; i++) - materials[i] = Material.PolishedBlackstoneWall; - materials[20192] = Material.PolishedDeepslate; - for (int i = 20273; i <= 20278; i++) - materials[i] = Material.PolishedDeepslateSlab; - for (int i = 20193; i <= 20272; i++) - materials[i] = Material.PolishedDeepslateStairs; - for (int i = 20279; i <= 20602; i++) - materials[i] = Material.PolishedDeepslateWall; - materials[5] = Material.PolishedDiorite; - for (int i = 11688; i <= 11693; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 10790; i <= 10869; i++) - materials[i] = Material.PolishedDioriteStairs; - materials[3] = Material.PolishedGranite; - for (int i = 11670; i <= 11675; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 10550; i <= 10629; i++) - materials[i] = Material.PolishedGraniteStairs; - materials[1667] = Material.Poppy; - for (int i = 6931; i <= 6938; i++) - materials[i] = Material.Potatoes; - materials[6902] = Material.PottedAcaciaSapling; - materials[6909] = Material.PottedAllium; - materials[21435] = Material.PottedAzaleaBush; - materials[6910] = Material.PottedAzureBluet; - materials[10545] = Material.PottedBamboo; - materials[6900] = Material.PottedBirchSapling; - materials[6908] = Material.PottedBlueOrchid; - materials[6920] = Material.PottedBrownMushroom; - materials[6922] = Material.PottedCactus; - materials[6916] = Material.PottedCornflower; - materials[17043] = Material.PottedCrimsonFungus; - materials[17045] = Material.PottedCrimsonRoots; - materials[6906] = Material.PottedDandelion; - materials[6903] = Material.PottedDarkOakSapling; - materials[6921] = Material.PottedDeadBush; - materials[6905] = Material.PottedFern; - materials[21436] = Material.PottedFloweringAzaleaBush; - materials[6901] = Material.PottedJungleSapling; - materials[6917] = Material.PottedLilyOfTheValley; - materials[6904] = Material.PottedMangrovePropagule; - materials[6898] = Material.PottedOakSapling; - materials[6912] = Material.PottedOrangeTulip; - materials[6915] = Material.PottedOxeyeDaisy; - materials[6914] = Material.PottedPinkTulip; - materials[6907] = Material.PottedPoppy; - materials[6919] = Material.PottedRedMushroom; - materials[6911] = Material.PottedRedTulip; - materials[6899] = Material.PottedSpruceSapling; - materials[17044] = Material.PottedWarpedFungus; - materials[17046] = Material.PottedWarpedRoots; - materials[6913] = Material.PottedWhiteTulip; - materials[6918] = Material.PottedWitherRose; - materials[18672] = Material.PowderSnow; - for (int i = 5733; i <= 5735; i++) - materials[i] = Material.PowderSnowCauldron; - for (int i = 1535; i <= 1558; i++) - materials[i] = Material.PoweredRail; - materials[8342] = Material.Prismarine; - for (int i = 8591; i <= 8596; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 8425; i <= 8504; i++) - materials[i] = Material.PrismarineBrickStairs; - materials[8343] = Material.PrismarineBricks; - for (int i = 8585; i <= 8590; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 8345; i <= 8424; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 12072; i <= 12395; i++) - materials[i] = Material.PrismarineWall; - materials[4307] = Material.Pumpkin; - for (int i = 5151; i <= 5158; i++) - materials[i] = Material.PumpkinStem; - for (int i = 8798; i <= 8813; i++) - materials[i] = Material.PurpleBanner; - for (int i = 1439; i <= 1454; i++) - materials[i] = Material.PurpleBed; - for (int i = 18489; i <= 18504; i++) - materials[i] = Material.PurpleCandle; - for (int i = 18607; i <= 18608; i++) - materials[i] = Material.PurpleCandleCake; - materials[8617] = Material.PurpleCarpet; - materials[10329] = Material.PurpleConcrete; - materials[10345] = Material.PurpleConcretePowder; - for (int i = 10295; i <= 10298; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 10219; i <= 10224; i++) - materials[i] = Material.PurpleShulkerBox; - materials[4414] = Material.PurpleStainedGlass; - for (int i = 7812; i <= 7843; i++) - materials[i] = Material.PurpleStainedGlassPane; - materials[7486] = Material.PurpleTerracotta; - for (int i = 8934; i <= 8937; i++) - materials[i] = Material.PurpleWallBanner; - materials[1648] = Material.PurpleWool; - materials[10015] = Material.PurpurBlock; - for (int i = 10016; i <= 10018; i++) - materials[i] = Material.PurpurPillar; - for (int i = 9161; i <= 9166; i++) - materials[i] = Material.PurpurSlab; - for (int i = 10019; i <= 10098; i++) - materials[i] = Material.PurpurStairs; - materials[7355] = Material.QuartzBlock; - materials[18312] = Material.QuartzBricks; - for (int i = 7357; i <= 7359; i++) - materials[i] = Material.QuartzPillar; - for (int i = 9143; i <= 9148; i++) - materials[i] = Material.QuartzSlab; - for (int i = 7360; i <= 7439; i++) - materials[i] = Material.QuartzStairs; - for (int i = 3932; i <= 3951; i++) - materials[i] = Material.Rail; - materials[21433] = Material.RawCopperBlock; - materials[21434] = Material.RawGoldBlock; - materials[21432] = Material.RawIronBlock; - for (int i = 8862; i <= 8877; i++) - materials[i] = Material.RedBanner; - for (int i = 1503; i <= 1518; i++) - materials[i] = Material.RedBed; - for (int i = 18553; i <= 18568; i++) - materials[i] = Material.RedCandle; - for (int i = 18615; i <= 18616; i++) - materials[i] = Material.RedCandleCake; - materials[8621] = Material.RedCarpet; - materials[10333] = Material.RedConcrete; - materials[10349] = Material.RedConcretePowder; - for (int i = 10311; i <= 10314; i++) - materials[i] = Material.RedGlazedTerracotta; - materials[1680] = Material.RedMushroom; - for (int i = 4944; i <= 5007; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 11730; i <= 11735; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 11430; i <= 11509; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 14664; i <= 14987; i++) - materials[i] = Material.RedNetherBrickWall; - materials[10136] = Material.RedNetherBricks; - materials[108] = Material.RedSand; - materials[8958] = Material.RedSandstone; - for (int i = 9149; i <= 9154; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 8961; i <= 9040; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 12396; i <= 12719; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 10243; i <= 10248; i++) - materials[i] = Material.RedShulkerBox; - materials[4418] = Material.RedStainedGlass; - for (int i = 7940; i <= 7971; i++) - materials[i] = Material.RedStainedGlassPane; - materials[7490] = Material.RedTerracotta; - materials[1671] = Material.RedTulip; - for (int i = 8950; i <= 8953; i++) - materials[i] = Material.RedWallBanner; - materials[1652] = Material.RedWool; - materials[7343] = Material.RedstoneBlock; - for (int i = 5747; i <= 5748; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 4192; i <= 4193; i++) - materials[i] = Material.RedstoneOre; - for (int i = 4196; i <= 4197; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 4198; i <= 4205; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 2312; i <= 3607; i++) - materials[i] = Material.RedstoneWire; - materials[21447] = Material.ReinforcedDeepslate; - for (int i = 4340; i <= 4403; i++) - materials[i] = Material.Repeater; - for (int i = 10106; i <= 10117; i++) - materials[i] = Material.RepeatingCommandBlock; - for (int i = 17038; i <= 17042; i++) - materials[i] = Material.RespawnAnchor; - materials[19776] = Material.RootedDirt; - for (int i = 8630; i <= 8631; i++) - materials[i] = Material.RoseBush; - materials[107] = Material.Sand; - materials[476] = Material.Sandstone; - for (int i = 9095; i <= 9100; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 5761; i <= 5840; i++) - materials[i] = Material.SandstoneStairs; - for (int i = 14988; i <= 15311; i++) - materials[i] = Material.SandstoneWall; - for (int i = 15960; i <= 15991; i++) - materials[i] = Material.Scaffolding; - materials[18769] = Material.Sculk; - for (int i = 18898; i <= 18899; i++) - materials[i] = Material.SculkCatalyst; - for (int i = 18673; i <= 18768; i++) - materials[i] = Material.SculkSensor; - for (int i = 18900; i <= 18907; i++) - materials[i] = Material.SculkShrieker; - for (int i = 18770; i <= 18897; i++) - materials[i] = Material.SculkVein; - materials[8603] = Material.SeaLantern; - for (int i = 10521; i <= 10528; i++) - materials[i] = Material.SeaPickle; - materials[1599] = Material.Seagrass; - materials[16198] = Material.Shroomlight; - for (int i = 10153; i <= 10158; i++) - materials[i] = Material.ShulkerBox; - for (int i = 7107; i <= 7122; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 7123; i <= 7126; i++) - materials[i] = Material.SkeletonWallSkull; - materials[8244] = Material.SlimeBlock; - for (int i = 18657; i <= 18668; i++) - materials[i] = Material.SmallAmethystBud; - for (int i = 19758; i <= 19773; i++) - materials[i] = Material.SmallDripleaf; - materials[16054] = Material.SmithingTable; - for (int i = 16008; i <= 16015; i++) - materials[i] = Material.Smoker; - materials[21431] = Material.SmoothBasalt; - materials[9169] = Material.SmoothQuartz; - for (int i = 11712; i <= 11717; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 11190; i <= 11269; i++) - materials[i] = Material.SmoothQuartzStairs; - materials[9170] = Material.SmoothRedSandstone; - for (int i = 11676; i <= 11681; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 10630; i <= 10709; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - materials[9168] = Material.SmoothSandstone; - for (int i = 11706; i <= 11711; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 11110; i <= 11189; i++) - materials[i] = Material.SmoothSandstoneStairs; - materials[9167] = Material.SmoothStone; - for (int i = 9089; i <= 9094; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 4230; i <= 4237; i++) - materials[i] = Material.Snow; - materials[4239] = Material.SnowBlock; - for (int i = 16131; i <= 16162; i++) - materials[i] = Material.SoulCampfire; - materials[2206] = Material.SoulFire; - for (int i = 16095; i <= 16098; i++) - materials[i] = Material.SoulLantern; - materials[4309] = Material.SoulSand; - materials[4310] = Material.SoulSoil; - materials[4317] = Material.SoulTorch; - for (int i = 4318; i <= 4321; i++) - materials[i] = Material.SoulWallTorch; - materials[2207] = Material.Spawner; - materials[458] = Material.Sponge; - materials[19713] = Material.SporeBlossom; - for (int i = 6963; i <= 6986; i++) - materials[i] = Material.SpruceButton; - for (int i = 9555; i <= 9618; i++) - materials[i] = Material.SpruceDoor; - for (int i = 9363; i <= 9394; i++) - materials[i] = Material.SpruceFence; - for (int i = 9171; i <= 9202; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 234; i <= 261; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 120; i <= 122; i++) - materials[i] = Material.SpruceLog; - materials[16] = Material.SprucePlanks; - for (int i = 4180; i <= 4181; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 24; i <= 25; i++) - materials[i] = Material.SpruceSapling; - for (int i = 3668; i <= 3699; i++) - materials[i] = Material.SpruceSign; - for (int i = 9047; i <= 9052; i++) - materials[i] = Material.SpruceSlab; - for (int i = 5996; i <= 6075; i++) - materials[i] = Material.SpruceStairs; - for (int i = 4484; i <= 4547; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 4040; i <= 4047; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 167; i <= 169; i++) - materials[i] = Material.SpruceWood; - for (int i = 1583; i <= 1594; i++) - materials[i] = Material.StickyPiston; - materials[1] = Material.Stone; - for (int i = 9125; i <= 9130; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 5439; i <= 5518; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 13368; i <= 13691; i++) - materials[i] = Material.StoneBrickWall; - materials[4868] = Material.StoneBricks; - for (int i = 4206; i <= 4229; i++) - materials[i] = Material.StoneButton; - for (int i = 4112; i <= 4113; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 9083; i <= 9088; i++) - materials[i] = Material.StoneSlab; - for (int i = 11030; i <= 11109; i++) - materials[i] = Material.StoneStairs; - for (int i = 16055; i <= 16058; i++) - materials[i] = Material.Stonecutter; - for (int i = 152; i <= 154; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 197; i <= 199; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 146; i <= 148; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 191; i <= 193; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 16193; i <= 16195; i++) - materials[i] = Material.StrippedCrimsonHyphae; - for (int i = 16187; i <= 16189; i++) - materials[i] = Material.StrippedCrimsonStem; - for (int i = 155; i <= 157; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 200; i <= 202; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 149; i <= 151; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 194; i <= 196; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 161; i <= 163; i++) - materials[i] = Material.StrippedMangroveLog; - for (int i = 203; i <= 205; i++) - materials[i] = Material.StrippedMangroveWood; - for (int i = 158; i <= 160; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 185; i <= 187; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 143; i <= 145; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 188; i <= 190; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 16176; i <= 16178; i++) - materials[i] = Material.StrippedWarpedHyphae; - for (int i = 16170; i <= 16172; i++) - materials[i] = Material.StrippedWarpedStem; - for (int i = 16944; i <= 16947; i++) - materials[i] = Material.StructureBlock; - materials[10140] = Material.StructureVoid; - for (int i = 4257; i <= 4272; i++) - materials[i] = Material.SugarCane; - for (int i = 8626; i <= 8627; i++) - materials[i] = Material.Sunflower; - for (int i = 16163; i <= 16166; i++) - materials[i] = Material.SweetBerryBush; - for (int i = 8634; i <= 8635; i++) - materials[i] = Material.TallGrass; - for (int i = 1600; i <= 1601; i++) - materials[i] = Material.TallSeagrass; - for (int i = 16969; i <= 16984; i++) - materials[i] = Material.Target; - materials[8623] = Material.Terracotta; - materials[18671] = Material.TintedGlass; - for (int i = 1684; i <= 1685; i++) - materials[i] = Material.Tnt; - materials[1689] = Material.Torch; - for (int i = 7239; i <= 7262; i++) - materials[i] = Material.TrappedChest; - for (int i = 5867; i <= 5994; i++) - materials[i] = Material.Tripwire; - for (int i = 5851; i <= 5866; i++) - materials[i] = Material.TripwireHook; - for (int i = 10411; i <= 10412; i++) - materials[i] = Material.TubeCoral; - materials[10396] = Material.TubeCoralBlock; - for (int i = 10431; i <= 10432; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 10481; i <= 10488; i++) - materials[i] = Material.TubeCoralWallFan; - materials[18669] = Material.Tuff; - for (int i = 10379; i <= 10390; i++) - materials[i] = Material.TurtleEgg; - for (int i = 16226; i <= 16251; i++) - materials[i] = Material.TwistingVines; - materials[16252] = Material.TwistingVinesPlant; - for (int i = 21440; i <= 21442; i++) - materials[i] = Material.VerdantFroglight; - for (int i = 5167; i <= 5198; i++) - materials[i] = Material.Vine; - materials[10546] = Material.VoidAir; - for (int i = 1690; i <= 1693; i++) - materials[i] = Material.WallTorch; - for (int i = 16712; i <= 16735; i++) - materials[i] = Material.WarpedButton; - for (int i = 16800; i <= 16863; i++) - materials[i] = Material.WarpedDoor; - for (int i = 16304; i <= 16335; i++) - materials[i] = Material.WarpedFence; - for (int i = 16496; i <= 16527; i++) - materials[i] = Material.WarpedFenceGate; - materials[16180] = Material.WarpedFungus; - for (int i = 16173; i <= 16175; i++) - materials[i] = Material.WarpedHyphae; - materials[16179] = Material.WarpedNylium; - materials[16255] = Material.WarpedPlanks; - for (int i = 16270; i <= 16271; i++) - materials[i] = Material.WarpedPressurePlate; - materials[16182] = Material.WarpedRoots; - for (int i = 16896; i <= 16927; i++) - materials[i] = Material.WarpedSign; - for (int i = 16262; i <= 16267; i++) - materials[i] = Material.WarpedSlab; - for (int i = 16608; i <= 16687; i++) - materials[i] = Material.WarpedStairs; - for (int i = 16167; i <= 16169; i++) - materials[i] = Material.WarpedStem; - for (int i = 16400; i <= 16463; i++) - materials[i] = Material.WarpedTrapdoor; - for (int i = 16936; i <= 16943; i++) - materials[i] = Material.WarpedWallSign; - materials[16181] = Material.WarpedWartBlock; - for (int i = 75; i <= 90; i++) - materials[i] = Material.Water; - for (int i = 5729; i <= 5731; i++) - materials[i] = Material.WaterCauldron; - materials[19262] = Material.WaxedCopperBlock; - materials[19269] = Material.WaxedCutCopper; - for (int i = 19608; i <= 19613; i++) - materials[i] = Material.WaxedCutCopperSlab; - for (int i = 19510; i <= 19589; i++) - materials[i] = Material.WaxedCutCopperStairs; - materials[19264] = Material.WaxedExposedCopper; - materials[19268] = Material.WaxedExposedCutCopper; - for (int i = 19602; i <= 19607; i++) - materials[i] = Material.WaxedExposedCutCopperSlab; - for (int i = 19430; i <= 19509; i++) - materials[i] = Material.WaxedExposedCutCopperStairs; - materials[19265] = Material.WaxedOxidizedCopper; - materials[19266] = Material.WaxedOxidizedCutCopper; - for (int i = 19590; i <= 19595; i++) - materials[i] = Material.WaxedOxidizedCutCopperSlab; - for (int i = 19270; i <= 19349; i++) - materials[i] = Material.WaxedOxidizedCutCopperStairs; - materials[19263] = Material.WaxedWeatheredCopper; - materials[19267] = Material.WaxedWeatheredCutCopper; - for (int i = 19596; i <= 19601; i++) - materials[i] = Material.WaxedWeatheredCutCopperSlab; - for (int i = 19350; i <= 19429; i++) - materials[i] = Material.WaxedWeatheredCutCopperStairs; - materials[18909] = Material.WeatheredCopper; - materials[18915] = Material.WeatheredCutCopper; - for (int i = 19244; i <= 19249; i++) - materials[i] = Material.WeatheredCutCopperSlab; - for (int i = 18998; i <= 19077; i++) - materials[i] = Material.WeatheredCutCopperStairs; - for (int i = 16199; i <= 16224; i++) - materials[i] = Material.WeepingVines; - materials[16225] = Material.WeepingVinesPlant; - materials[459] = Material.WetSponge; - for (int i = 3612; i <= 3619; i++) - materials[i] = Material.Wheat; - for (int i = 8638; i <= 8653; i++) - materials[i] = Material.WhiteBanner; - for (int i = 1279; i <= 1294; i++) - materials[i] = Material.WhiteBed; - for (int i = 18329; i <= 18344; i++) - materials[i] = Material.WhiteCandle; - for (int i = 18587; i <= 18588; i++) - materials[i] = Material.WhiteCandleCake; - materials[8607] = Material.WhiteCarpet; - materials[10319] = Material.WhiteConcrete; - materials[10335] = Material.WhiteConcretePowder; - for (int i = 10255; i <= 10258; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 10159; i <= 10164; i++) - materials[i] = Material.WhiteShulkerBox; - materials[4404] = Material.WhiteStainedGlass; - for (int i = 7492; i <= 7523; i++) - materials[i] = Material.WhiteStainedGlassPane; - materials[7476] = Material.WhiteTerracotta; - materials[1673] = Material.WhiteTulip; - for (int i = 8894; i <= 8897; i++) - materials[i] = Material.WhiteWallBanner; - materials[1638] = Material.WhiteWool; - materials[1677] = Material.WitherRose; - for (int i = 7127; i <= 7142; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 7143; i <= 7146; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 8702; i <= 8717; i++) - materials[i] = Material.YellowBanner; - for (int i = 1343; i <= 1358; i++) - materials[i] = Material.YellowBed; - for (int i = 18393; i <= 18408; i++) - materials[i] = Material.YellowCandle; - for (int i = 18595; i <= 18596; i++) - materials[i] = Material.YellowCandleCake; - materials[8611] = Material.YellowCarpet; - materials[10323] = Material.YellowConcrete; - materials[10339] = Material.YellowConcretePowder; - for (int i = 10271; i <= 10274; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 10183; i <= 10188; i++) - materials[i] = Material.YellowShulkerBox; - materials[4408] = Material.YellowStainedGlass; - for (int i = 7620; i <= 7651; i++) - materials[i] = Material.YellowStainedGlassPane; - materials[7480] = Material.YellowTerracotta; - for (int i = 8910; i <= 8913; i++) - materials[i] = Material.YellowWallBanner; - materials[1642] = Material.YellowWool; - for (int i = 7147; i <= 7162; i++) - materials[i] = Material.ZombieHead; - for (int i = 7163; i <= 7166; i++) - materials[i] = Material.ZombieWallHead; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(22, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(24, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(26, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(28, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(30, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(32, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(34, 40, - [ - new("age", ["0", "1", "2", "3", "4"], 8), - new("hanging", ["true", "false"], 4), - new("stage", ["0", "1"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(75, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(91, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(117, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(120, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(123, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(126, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(129, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(132, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(135, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(138, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(140, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(143, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(146, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(149, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(152, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(155, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(158, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(161, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(164, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(167, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(170, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(173, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(176, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(179, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(182, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(185, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(188, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(191, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(194, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(197, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(200, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(203, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(206, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(234, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(262, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(290, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(318, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(346, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(374, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(402, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(430, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(464, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(479, 800, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1279, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1295, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1311, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1327, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1343, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1359, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1375, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1391, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1407, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1423, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1439, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1455, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1471, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1487, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1503, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1519, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1535, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(1559, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(1583, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(1600, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(1602, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(1614, 24, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2) - ]), - new(1654, 12, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 2) - ]), - new(1684, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(1690, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(1694, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(2208, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2288, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(2312, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(3612, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(3620, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(3628, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(3636, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3668, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3700, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3732, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3764, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3796, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3828, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3860, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(3924, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3932, 20, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3952, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4032, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4040, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4048, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4056, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4064, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4072, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4080, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4088, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4112, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(4114, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4178, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(4180, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(4182, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(4184, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(4186, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(4188, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(4190, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(4192, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(4194, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(4196, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(4198, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(4206, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4230, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(4240, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(4257, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(4273, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(4275, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4311, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(4314, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(4318, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4323, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(4325, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4329, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(4333, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(4340, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4420, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4484, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4548, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4612, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4676, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4740, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4804, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4880, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(4944, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5008, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5072, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5104, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5110, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5143, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5147, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5151, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(5159, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(5167, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5199, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5327, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5359, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5439, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5519, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5599, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(5603, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5635, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5715, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(5720, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(5729, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(5733, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(5737, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5747, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5749, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5761, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5843, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5851, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5867, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5996, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6076, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6156, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6236, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(6249, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(6573, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(6923, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(6931, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(6939, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6963, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6987, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7011, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7035, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7059, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7083, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7107, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7123, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7127, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7143, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7147, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7163, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7167, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7183, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7187, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7203, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7207, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7223, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7227, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7231, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7235, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7239, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(7263, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7279, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7295, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7311, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(7345, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(7357, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(7360, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7440, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7464, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(7492, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7524, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7556, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7588, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7620, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7652, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7684, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7716, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7748, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7780, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7812, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7844, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7876, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7908, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7940, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7972, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8004, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8084, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8164, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8246, 32, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8278, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8345, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8425, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8505, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8585, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8591, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8597, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8604, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(8626, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(8628, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(8630, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(8632, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(8634, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(8636, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(8638, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8654, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8670, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8686, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8702, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8718, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8734, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8750, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8766, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8782, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8798, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8814, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8830, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8846, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8862, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8878, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8894, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8898, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8902, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8906, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8910, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8914, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8918, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8922, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8926, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8930, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8934, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8938, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8942, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8946, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8950, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8954, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8961, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9041, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9047, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9053, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9059, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9065, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9071, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9077, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9083, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9089, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9095, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9101, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9107, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9113, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9119, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9125, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9131, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9137, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9143, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9149, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9155, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9161, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9171, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9203, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9235, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9267, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9299, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9331, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9363, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9395, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9427, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9459, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9491, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9523, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9555, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9619, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9683, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9747, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9811, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9875, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9939, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9945, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10009, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(10016, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(10019, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10100, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(10106, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10118, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10130, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(10137, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(10141, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10153, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10159, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10165, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10171, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10177, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10183, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10189, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10195, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10201, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10207, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10213, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10219, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10225, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10231, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10237, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10243, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10249, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(10255, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10259, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10263, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10267, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10271, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10275, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10279, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10283, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10287, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10291, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10295, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10299, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10303, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10307, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10311, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10315, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10351, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(10379, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(10401, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10403, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10405, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10407, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10409, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10411, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10413, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10415, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10417, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10419, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10421, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10423, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10425, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10427, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10429, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10431, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10433, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10435, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10437, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10439, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10441, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10449, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10457, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10465, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10473, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10481, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10489, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10497, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10505, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10513, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10521, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10530, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10533, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(10548, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(10550, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10630, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10710, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10790, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10870, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10950, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11030, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11110, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11190, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11270, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11350, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11430, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11510, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11590, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11670, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11676, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11682, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11688, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11694, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11700, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11706, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11712, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11718, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11724, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11730, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11736, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11742, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11748, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(12072, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(12396, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(12720, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(13044, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(13368, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(13692, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14016, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14340, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14664, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14988, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15312, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15636, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15960, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15992, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15996, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(16008, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(16016, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(16026, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(16038, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(16055, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(16059, 32, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(16091, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16095, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16099, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16131, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16163, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(16167, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(16170, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(16173, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(16176, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(16184, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(16187, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(16190, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(16193, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(16199, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(16226, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(16256, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16262, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16268, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(16270, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(16272, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(16304, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(16336, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16400, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16464, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(16496, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(16528, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16608, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16688, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(16712, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(16736, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(16800, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(16864, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16896, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16928, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16936, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16944, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(16948, 12, - [ - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 1) - ]), - new(16960, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(16969, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(16985, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(17009, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(17038, 5, - [ - new("charges", ["0", "1", "2", "3", "4"], 1) - ]), - new(17049, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17129, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17453, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17463, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17469, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17549, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17874, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17954, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17960, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(17962, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(17986, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18313, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18329, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18345, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18361, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18377, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18393, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18409, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18425, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18441, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18457, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18473, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18489, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18505, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18521, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18537, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18553, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18569, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18585, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18587, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18589, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18591, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18593, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18595, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18597, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18599, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18601, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18603, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18605, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18607, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18609, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18611, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18613, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18615, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18617, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(18621, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18633, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18645, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18657, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18673, 96, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18770, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(18898, 2, - [ - new("bloom", ["true", "false"], 1) - ]), - new(18900, 8, - [ - new("can_summon", ["true", "false"], 4), - new("shrieking", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18918, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18998, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19078, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19158, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19238, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19244, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19250, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19256, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19270, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19350, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19430, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19510, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19590, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19596, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19602, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19608, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19614, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19638, 20, - [ - new("thickness", ["tip_merge", "tip", "frustum", "middle", "base"], 4), - new("vertical_direction", ["up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19659, 52, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 2), - new("berries", ["true", "false"], 1) - ]), - new(19711, 2, - [ - new("berries", ["true", "false"], 1) - ]), - new(19718, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("tilt", ["none", "unstable", "partial", "full"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19750, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19758, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("half", ["upper", "lower"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19774, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(19778, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19782, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19862, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19868, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20193, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20273, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20279, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20604, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20684, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20690, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(21015, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21095, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21101, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(21428, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(21437, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(21440, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(21443, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette1193.cs b/MinecraftClient/Mapping/BlockPalettes/Palette1193.cs deleted file mode 100644 index 7c5254ede8..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette1193.cs +++ /dev/null @@ -1,4947 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - public class Palette1193 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette1193() - { - for (int i = 8475; i <= 8498; i++) - materials[i] = Material.AcaciaButton; - for (int i = 11467; i <= 11530; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 11147; i <= 11178; i++) - materials[i] = Material.AcaciaFence; - for (int i = 10923; i <= 10954; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 4934; i <= 4997; i++) - materials[i] = Material.AcaciaHangingSign; - for (int i = 326; i <= 353; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 131; i <= 133; i++) - materials[i] = Material.AcaciaLog; - materials[19] = Material.AcaciaPlanks; - for (int i = 5560; i <= 5561; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 32; i <= 33; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 4346; i <= 4377; i++) - materials[i] = Material.AcaciaSign; - for (int i = 10709; i <= 10714; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 9488; i <= 9567; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 6052; i <= 6115; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 5406; i <= 5413; i++) - materials[i] = Material.AcaciaWallHangingSign; - for (int i = 4702; i <= 4709; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 184; i <= 186; i++) - materials[i] = Material.AcaciaWood; - for (int i = 8924; i <= 8947; i++) - materials[i] = Material.ActivatorRail; - materials[0] = Material.Air; - materials[2027] = Material.Allium; - materials[20403] = Material.AmethystBlock; - for (int i = 20405; i <= 20416; i++) - materials[i] = Material.AmethystCluster; - materials[18820] = Material.AncientDebris; - materials[6] = Material.Andesite; - for (int i = 13508; i <= 13513; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 13134; i <= 13213; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 16124; i <= 16447; i++) - materials[i] = Material.AndesiteWall; - for (int i = 8711; i <= 8714; i++) - materials[i] = Material.Anvil; - for (int i = 6587; i <= 6590; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 6583; i <= 6586; i++) - materials[i] = Material.AttachedPumpkinStem; - materials[21498] = Material.Azalea; - for (int i = 410; i <= 437; i++) - materials[i] = Material.AzaleaLeaves; - materials[2028] = Material.AzureBluet; - for (int i = 12317; i <= 12328; i++) - materials[i] = Material.Bamboo; - for (int i = 145; i <= 147; i++) - materials[i] = Material.BambooBlock; - for (int i = 8547; i <= 8570; i++) - materials[i] = Material.BambooButton; - for (int i = 11659; i <= 11722; i++) - materials[i] = Material.BambooDoor; - for (int i = 11243; i <= 11274; i++) - materials[i] = Material.BambooFence; - for (int i = 11019; i <= 11050; i++) - materials[i] = Material.BambooFenceGate; - for (int i = 5318; i <= 5381; i++) - materials[i] = Material.BambooHangingSign; - materials[23] = Material.BambooMosaic; - for (int i = 10733; i <= 10738; i++) - materials[i] = Material.BambooMosaicSlab; - for (int i = 9808; i <= 9887; i++) - materials[i] = Material.BambooMosaicStairs; - materials[22] = Material.BambooPlanks; - for (int i = 5566; i <= 5567; i++) - materials[i] = Material.BambooPressurePlate; - materials[12316] = Material.BambooSapling; - for (int i = 4474; i <= 4505; i++) - materials[i] = Material.BambooSign; - for (int i = 10727; i <= 10732; i++) - materials[i] = Material.BambooSlab; - for (int i = 9728; i <= 9807; i++) - materials[i] = Material.BambooStairs; - for (int i = 6244; i <= 6307; i++) - materials[i] = Material.BambooTrapdoor; - for (int i = 5454; i <= 5461; i++) - materials[i] = Material.BambooWallHangingSign; - for (int i = 4734; i <= 4741; i++) - materials[i] = Material.BambooWallSign; - for (int i = 17780; i <= 17791; i++) - materials[i] = Material.Barrel; - materials[9889] = Material.Barrier; - for (int i = 5687; i <= 5689; i++) - materials[i] = Material.Basalt; - materials[7688] = Material.Beacon; - materials[76] = Material.Bedrock; - for (int i = 18769; i <= 18792; i++) - materials[i] = Material.BeeNest; - for (int i = 18793; i <= 18816; i++) - materials[i] = Material.Beehive; - for (int i = 11884; i <= 11887; i++) - materials[i] = Material.Beetroots; - for (int i = 17843; i <= 17874; i++) - materials[i] = Material.Bell; - for (int i = 21502; i <= 21533; i++) - materials[i] = Material.BigDripleaf; - for (int i = 21534; i <= 21541; i++) - materials[i] = Material.BigDripleafStem; - for (int i = 8427; i <= 8450; i++) - materials[i] = Material.BirchButton; - for (int i = 11339; i <= 11402; i++) - materials[i] = Material.BirchDoor; - for (int i = 11083; i <= 11114; i++) - materials[i] = Material.BirchFence; - for (int i = 10859; i <= 10890; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 4870; i <= 4933; i++) - materials[i] = Material.BirchHangingSign; - for (int i = 270; i <= 297; i++) - materials[i] = Material.BirchLeaves; - for (int i = 125; i <= 127; i++) - materials[i] = Material.BirchLog; - materials[17] = Material.BirchPlanks; - for (int i = 5556; i <= 5557; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 28; i <= 29; i++) - materials[i] = Material.BirchSapling; - for (int i = 4314; i <= 4345; i++) - materials[i] = Material.BirchSign; - for (int i = 10697; i <= 10702; i++) - materials[i] = Material.BirchSlab; - for (int i = 7516; i <= 7595; i++) - materials[i] = Material.BirchStairs; - for (int i = 5924; i <= 5987; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 5398; i <= 5405; i++) - materials[i] = Material.BirchWallHangingSign; - for (int i = 4694; i <= 4701; i++) - materials[i] = Material.BirchWallSign; - for (int i = 178; i <= 180; i++) - materials[i] = Material.BirchWood; - for (int i = 10522; i <= 10537; i++) - materials[i] = Material.BlackBanner; - for (int i = 1877; i <= 1892; i++) - materials[i] = Material.BlackBed; - for (int i = 20353; i <= 20368; i++) - materials[i] = Material.BlackCandle; - for (int i = 20401; i <= 20402; i++) - materials[i] = Material.BlackCandleCake; - materials[10266] = Material.BlackCarpet; - materials[12118] = Material.BlackConcrete; - materials[12134] = Material.BlackConcretePowder; - for (int i = 12099; i <= 12102; i++) - materials[i] = Material.BlackGlazedTerracotta; - for (int i = 12033; i <= 12038; i++) - materials[i] = Material.BlackShulkerBox; - materials[5795] = Material.BlackStainedGlass; - for (int i = 9456; i <= 9487; i++) - materials[i] = Material.BlackStainedGlassPane; - materials[8975] = Material.BlackTerracotta; - for (int i = 10598; i <= 10601; i++) - materials[i] = Material.BlackWallBanner; - materials[2011] = Material.BlackWool; - materials[18832] = Material.Blackstone; - for (int i = 19237; i <= 19242; i++) - materials[i] = Material.BlackstoneSlab; - for (int i = 18833; i <= 18912; i++) - materials[i] = Material.BlackstoneStairs; - for (int i = 18913; i <= 19236; i++) - materials[i] = Material.BlackstoneWall; - for (int i = 17800; i <= 17807; i++) - materials[i] = Material.BlastFurnace; - for (int i = 10458; i <= 10473; i++) - materials[i] = Material.BlueBanner; - for (int i = 1813; i <= 1828; i++) - materials[i] = Material.BlueBed; - for (int i = 20289; i <= 20304; i++) - materials[i] = Material.BlueCandle; - for (int i = 20393; i <= 20394; i++) - materials[i] = Material.BlueCandleCake; - materials[10262] = Material.BlueCarpet; - materials[12114] = Material.BlueConcrete; - materials[12130] = Material.BlueConcretePowder; - for (int i = 12083; i <= 12086; i++) - materials[i] = Material.BlueGlazedTerracotta; - materials[12313] = Material.BlueIce; - materials[2026] = Material.BlueOrchid; - for (int i = 12009; i <= 12014; i++) - materials[i] = Material.BlueShulkerBox; - materials[5791] = Material.BlueStainedGlass; - for (int i = 9328; i <= 9359; i++) - materials[i] = Material.BlueStainedGlassPane; - materials[8971] = Material.BlueTerracotta; - for (int i = 10582; i <= 10585; i++) - materials[i] = Material.BlueWallBanner; - materials[2007] = Material.BlueWool; - for (int i = 11921; i <= 11923; i++) - materials[i] = Material.BoneBlock; - materials[2044] = Material.Bookshelf; - for (int i = 12197; i <= 12198; i++) - materials[i] = Material.BrainCoral; - materials[12181] = Material.BrainCoralBlock; - for (int i = 12217; i <= 12218; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 12273; i <= 12280; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 7160; i <= 7167; i++) - materials[i] = Material.BrewingStand; - for (int i = 10775; i <= 10780; i++) - materials[i] = Material.BrickSlab; - for (int i = 6799; i <= 6878; i++) - materials[i] = Material.BrickStairs; - for (int i = 13532; i <= 13855; i++) - materials[i] = Material.BrickWall; - materials[2041] = Material.Bricks; - for (int i = 10474; i <= 10489; i++) - materials[i] = Material.BrownBanner; - for (int i = 1829; i <= 1844; i++) - materials[i] = Material.BrownBed; - for (int i = 20305; i <= 20320; i++) - materials[i] = Material.BrownCandle; - for (int i = 20395; i <= 20396; i++) - materials[i] = Material.BrownCandleCake; - materials[10263] = Material.BrownCarpet; - materials[12115] = Material.BrownConcrete; - materials[12131] = Material.BrownConcretePowder; - for (int i = 12087; i <= 12090; i++) - materials[i] = Material.BrownGlazedTerracotta; - materials[2037] = Material.BrownMushroom; - for (int i = 6320; i <= 6383; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 12015; i <= 12020; i++) - materials[i] = Material.BrownShulkerBox; - materials[5792] = Material.BrownStainedGlass; - for (int i = 9360; i <= 9391; i++) - materials[i] = Material.BrownStainedGlassPane; - materials[8972] = Material.BrownTerracotta; - for (int i = 10586; i <= 10589; i++) - materials[i] = Material.BrownWallBanner; - materials[2008] = Material.BrownWool; - for (int i = 12332; i <= 12333; i++) - materials[i] = Material.BubbleColumn; - for (int i = 12199; i <= 12200; i++) - materials[i] = Material.BubbleCoral; - materials[12182] = Material.BubbleCoralBlock; - for (int i = 12219; i <= 12220; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 12281; i <= 12288; i++) - materials[i] = Material.BubbleCoralWallFan; - materials[20404] = Material.BuddingAmethyst; - for (int i = 5616; i <= 5631; i++) - materials[i] = Material.Cactus; - for (int i = 5709; i <= 5715; i++) - materials[i] = Material.Cake; - materials[20454] = Material.Calcite; - for (int i = 17883; i <= 17914; i++) - materials[i] = Material.Campfire; - for (int i = 20097; i <= 20112; i++) - materials[i] = Material.Candle; - for (int i = 20369; i <= 20370; i++) - materials[i] = Material.CandleCake; - for (int i = 8363; i <= 8370; i++) - materials[i] = Material.Carrots; - materials[17808] = Material.CartographyTable; - for (int i = 5701; i <= 5704; i++) - materials[i] = Material.CarvedPumpkin; - materials[7168] = Material.Cauldron; - materials[12331] = Material.CaveAir; - for (int i = 21443; i <= 21494; i++) - materials[i] = Material.CaveVines; - for (int i = 21495; i <= 21496; i++) - materials[i] = Material.CaveVinesPlant; - for (int i = 6544; i <= 6549; i++) - materials[i] = Material.Chain; - for (int i = 11902; i <= 11913; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 2902; i <= 2925; i++) - materials[i] = Material.Chest; - for (int i = 8715; i <= 8718; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 2045; i <= 2300; i++) - materials[i] = Material.ChiseledBookshelf; - materials[23209] = Material.ChiseledDeepslate; - materials[20094] = Material.ChiseledNetherBricks; - materials[19246] = Material.ChiseledPolishedBlackstone; - materials[8840] = Material.ChiseledQuartzBlock; - materials[10603] = Material.ChiseledRedSandstone; - materials[485] = Material.ChiseledSandstone; - materials[6311] = Material.ChiseledStoneBricks; - for (int i = 11793; i <= 11798; i++) - materials[i] = Material.ChorusFlower; - for (int i = 11729; i <= 11792; i++) - materials[i] = Material.ChorusPlant; - materials[5632] = Material.Clay; - materials[10268] = Material.CoalBlock; - materials[116] = Material.CoalOre; - materials[11] = Material.CoarseDirt; - materials[21565] = Material.CobbledDeepslate; - for (int i = 21646; i <= 21651; i++) - materials[i] = Material.CobbledDeepslateSlab; - for (int i = 21566; i <= 21645; i++) - materials[i] = Material.CobbledDeepslateStairs; - for (int i = 21652; i <= 21975; i++) - materials[i] = Material.CobbledDeepslateWall; - materials[14] = Material.Cobblestone; - for (int i = 10769; i <= 10774; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 4598; i <= 4677; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 7689; i <= 8012; i++) - materials[i] = Material.CobblestoneWall; - materials[1953] = Material.Cobweb; - for (int i = 7189; i <= 7200; i++) - materials[i] = Material.Cocoa; - for (int i = 7676; i <= 7687; i++) - materials[i] = Material.CommandBlock; - for (int i = 8779; i <= 8794; i++) - materials[i] = Material.Comparator; - for (int i = 18744; i <= 18752; i++) - materials[i] = Material.Composter; - for (int i = 12314; i <= 12315; i++) - materials[i] = Material.Conduit; - materials[20695] = Material.CopperBlock; - materials[20696] = Material.CopperOre; - materials[2034] = Material.Cornflower; - materials[23210] = Material.CrackedDeepslateBricks; - materials[23211] = Material.CrackedDeepslateTiles; - materials[20095] = Material.CrackedNetherBricks; - materials[19245] = Material.CrackedPolishedBlackstoneBricks; - materials[6310] = Material.CrackedStoneBricks; - materials[4225] = Material.CraftingTable; - for (int i = 8651; i <= 8666; i++) - materials[i] = Material.CreeperHead; - for (int i = 8667; i <= 8670; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 18472; i <= 18495; i++) - materials[i] = Material.CrimsonButton; - for (int i = 18520; i <= 18583; i++) - materials[i] = Material.CrimsonDoor; - for (int i = 18056; i <= 18087; i++) - materials[i] = Material.CrimsonFence; - for (int i = 18248; i <= 18279; i++) - materials[i] = Material.CrimsonFenceGate; - materials[17981] = Material.CrimsonFungus; - for (int i = 5126; i <= 5189; i++) - materials[i] = Material.CrimsonHangingSign; - for (int i = 17974; i <= 17976; i++) - materials[i] = Material.CrimsonHyphae; - materials[17980] = Material.CrimsonNylium; - materials[18038] = Material.CrimsonPlanks; - for (int i = 18052; i <= 18053; i++) - materials[i] = Material.CrimsonPressurePlate; - materials[18037] = Material.CrimsonRoots; - for (int i = 18648; i <= 18679; i++) - materials[i] = Material.CrimsonSign; - for (int i = 18040; i <= 18045; i++) - materials[i] = Material.CrimsonSlab; - for (int i = 18312; i <= 18391; i++) - materials[i] = Material.CrimsonStairs; - for (int i = 17968; i <= 17970; i++) - materials[i] = Material.CrimsonStem; - for (int i = 18120; i <= 18183; i++) - materials[i] = Material.CrimsonTrapdoor; - for (int i = 5438; i <= 5445; i++) - materials[i] = Material.CrimsonWallHangingSign; - for (int i = 18712; i <= 18719; i++) - materials[i] = Material.CrimsonWallSign; - materials[18821] = Material.CryingObsidian; - materials[20701] = Material.CutCopper; - for (int i = 21040; i <= 21045; i++) - materials[i] = Material.CutCopperSlab; - for (int i = 20942; i <= 21021; i++) - materials[i] = Material.CutCopperStairs; - materials[10604] = Material.CutRedSandstone; - for (int i = 10811; i <= 10816; i++) - materials[i] = Material.CutRedSandstoneSlab; - materials[486] = Material.CutSandstone; - for (int i = 10757; i <= 10762; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 10426; i <= 10441; i++) - materials[i] = Material.CyanBanner; - for (int i = 1781; i <= 1796; i++) - materials[i] = Material.CyanBed; - for (int i = 20257; i <= 20272; i++) - materials[i] = Material.CyanCandle; - for (int i = 20389; i <= 20390; i++) - materials[i] = Material.CyanCandleCake; - materials[10260] = Material.CyanCarpet; - materials[12112] = Material.CyanConcrete; - materials[12128] = Material.CyanConcretePowder; - for (int i = 12075; i <= 12078; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 11997; i <= 12002; i++) - materials[i] = Material.CyanShulkerBox; - materials[5789] = Material.CyanStainedGlass; - for (int i = 9264; i <= 9295; i++) - materials[i] = Material.CyanStainedGlassPane; - materials[8969] = Material.CyanTerracotta; - for (int i = 10574; i <= 10577; i++) - materials[i] = Material.CyanWallBanner; - materials[2005] = Material.CyanWool; - for (int i = 8719; i <= 8722; i++) - materials[i] = Material.DamagedAnvil; - materials[2024] = Material.Dandelion; - for (int i = 8499; i <= 8522; i++) - materials[i] = Material.DarkOakButton; - for (int i = 11531; i <= 11594; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 11179; i <= 11210; i++) - materials[i] = Material.DarkOakFence; - for (int i = 10955; i <= 10986; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 5062; i <= 5125; i++) - materials[i] = Material.DarkOakHangingSign; - for (int i = 354; i <= 381; i++) - materials[i] = Material.DarkOakLeaves; - for (int i = 134; i <= 136; i++) - materials[i] = Material.DarkOakLog; - materials[20] = Material.DarkOakPlanks; - for (int i = 5562; i <= 5563; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 34; i <= 35; i++) - materials[i] = Material.DarkOakSapling; - for (int i = 4410; i <= 4441; i++) - materials[i] = Material.DarkOakSign; - for (int i = 10715; i <= 10720; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 9568; i <= 9647; i++) - materials[i] = Material.DarkOakStairs; - for (int i = 6116; i <= 6179; i++) - materials[i] = Material.DarkOakTrapdoor; - for (int i = 5422; i <= 5429; i++) - materials[i] = Material.DarkOakWallHangingSign; - for (int i = 4718; i <= 4725; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 187; i <= 189; i++) - materials[i] = Material.DarkOakWood; - materials[9988] = Material.DarkPrismarine; - for (int i = 10241; i <= 10246; i++) - materials[i] = Material.DarkPrismarineSlab; - for (int i = 10149; i <= 10228; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 8795; i <= 8826; i++) - materials[i] = Material.DaylightDetector; - for (int i = 12187; i <= 12188; i++) - materials[i] = Material.DeadBrainCoral; - materials[12176] = Material.DeadBrainCoralBlock; - for (int i = 12207; i <= 12208; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 12233; i <= 12240; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 12189; i <= 12190; i++) - materials[i] = Material.DeadBubbleCoral; - materials[12177] = Material.DeadBubbleCoralBlock; - for (int i = 12209; i <= 12210; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 12241; i <= 12248; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - materials[1956] = Material.DeadBush; - for (int i = 12191; i <= 12192; i++) - materials[i] = Material.DeadFireCoral; - materials[12178] = Material.DeadFireCoralBlock; - for (int i = 12211; i <= 12212; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 12249; i <= 12256; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 12193; i <= 12194; i++) - materials[i] = Material.DeadHornCoral; - materials[12179] = Material.DeadHornCoralBlock; - for (int i = 12213; i <= 12214; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 12257; i <= 12264; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 12185; i <= 12186; i++) - materials[i] = Material.DeadTubeCoral; - materials[12175] = Material.DeadTubeCoralBlock; - for (int i = 12205; i <= 12206; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 12225; i <= 12232; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 21562; i <= 21564; i++) - materials[i] = Material.Deepslate; - for (int i = 22879; i <= 22884; i++) - materials[i] = Material.DeepslateBrickSlab; - for (int i = 22799; i <= 22878; i++) - materials[i] = Material.DeepslateBrickStairs; - for (int i = 22885; i <= 23208; i++) - materials[i] = Material.DeepslateBrickWall; - materials[22798] = Material.DeepslateBricks; - materials[117] = Material.DeepslateCoalOre; - materials[20697] = Material.DeepslateCopperOre; - materials[4223] = Material.DeepslateDiamondOre; - materials[7282] = Material.DeepslateEmeraldOre; - materials[113] = Material.DeepslateGoldOre; - materials[115] = Material.DeepslateIronOre; - materials[470] = Material.DeepslateLapisOre; - for (int i = 5570; i <= 5571; i++) - materials[i] = Material.DeepslateRedstoneOre; - for (int i = 22468; i <= 22473; i++) - materials[i] = Material.DeepslateTileSlab; - for (int i = 22388; i <= 22467; i++) - materials[i] = Material.DeepslateTileStairs; - for (int i = 22474; i <= 22797; i++) - materials[i] = Material.DeepslateTileWall; - materials[22387] = Material.DeepslateTiles; - for (int i = 1917; i <= 1940; i++) - materials[i] = Material.DetectorRail; - materials[4224] = Material.DiamondBlock; - materials[4222] = Material.DiamondOre; - materials[4] = Material.Diorite; - for (int i = 13526; i <= 13531; i++) - materials[i] = Material.DioriteSlab; - for (int i = 13374; i <= 13453; i++) - materials[i] = Material.DioriteStairs; - for (int i = 17420; i <= 17743; i++) - materials[i] = Material.DioriteWall; - materials[10] = Material.Dirt; - materials[11888] = Material.DirtPath; - for (int i = 472; i <= 483; i++) - materials[i] = Material.Dispenser; - materials[7186] = Material.DragonEgg; - for (int i = 8671; i <= 8686; i++) - materials[i] = Material.DragonHead; - for (int i = 8687; i <= 8690; i++) - materials[i] = Material.DragonWallHead; - materials[12162] = Material.DriedKelpBlock; - materials[21442] = Material.DripstoneBlock; - for (int i = 8948; i <= 8959; i++) - materials[i] = Material.Dropper; - materials[7435] = Material.EmeraldBlock; - materials[7281] = Material.EmeraldOre; - materials[7159] = Material.EnchantingTable; - materials[11889] = Material.EndGateway; - materials[7176] = Material.EndPortal; - for (int i = 7177; i <= 7184; i++) - materials[i] = Material.EndPortalFrame; - for (int i = 11723; i <= 11728; i++) - materials[i] = Material.EndRod; - materials[7185] = Material.EndStone; - for (int i = 13484; i <= 13489; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 12734; i <= 12813; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 17096; i <= 17419; i++) - materials[i] = Material.EndStoneBrickWall; - materials[11883] = Material.EndStoneBricks; - for (int i = 7283; i <= 7290; i++) - materials[i] = Material.EnderChest; - materials[20694] = Material.ExposedCopper; - materials[20700] = Material.ExposedCutCopper; - for (int i = 21034; i <= 21039; i++) - materials[i] = Material.ExposedCutCopperSlab; - for (int i = 20862; i <= 20941; i++) - materials[i] = Material.ExposedCutCopperStairs; - for (int i = 4234; i <= 4241; i++) - materials[i] = Material.Farmland; - materials[1955] = Material.Fern; - for (int i = 2308; i <= 2819; i++) - materials[i] = Material.Fire; - for (int i = 12201; i <= 12202; i++) - materials[i] = Material.FireCoral; - materials[12183] = Material.FireCoralBlock; - for (int i = 12221; i <= 12222; i++) - materials[i] = Material.FireCoralFan; - for (int i = 12289; i <= 12296; i++) - materials[i] = Material.FireCoralWallFan; - materials[17809] = Material.FletchingTable; - materials[8337] = Material.FlowerPot; - materials[21499] = Material.FloweringAzalea; - for (int i = 438; i <= 465; i++) - materials[i] = Material.FloweringAzaleaLeaves; - materials[23230] = Material.Frogspawn; - for (int i = 11914; i <= 11917; i++) - materials[i] = Material.FrostedIce; - for (int i = 4242; i <= 4249; i++) - materials[i] = Material.Furnace; - materials[19657] = Material.GildedBlackstone; - materials[468] = Material.Glass; - for (int i = 6550; i <= 6581; i++) - materials[i] = Material.GlassPane; - for (int i = 6639; i <= 6766; i++) - materials[i] = Material.GlowLichen; - materials[5698] = Material.Glowstone; - materials[2039] = Material.GoldBlock; - materials[112] = Material.GoldOre; - materials[2] = Material.Granite; - for (int i = 13502; i <= 13507; i++) - materials[i] = Material.GraniteSlab; - for (int i = 13054; i <= 13133; i++) - materials[i] = Material.GraniteStairs; - for (int i = 14828; i <= 15151; i++) - materials[i] = Material.GraniteWall; - materials[1954] = Material.ShortGrass; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - materials[111] = Material.Gravel; - for (int i = 10394; i <= 10409; i++) - materials[i] = Material.GrayBanner; - for (int i = 1749; i <= 1764; i++) - materials[i] = Material.GrayBed; - for (int i = 20225; i <= 20240; i++) - materials[i] = Material.GrayCandle; - for (int i = 20385; i <= 20386; i++) - materials[i] = Material.GrayCandleCake; - materials[10258] = Material.GrayCarpet; - materials[12110] = Material.GrayConcrete; - materials[12126] = Material.GrayConcretePowder; - for (int i = 12067; i <= 12070; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 11985; i <= 11990; i++) - materials[i] = Material.GrayShulkerBox; - materials[5787] = Material.GrayStainedGlass; - for (int i = 9200; i <= 9231; i++) - materials[i] = Material.GrayStainedGlassPane; - materials[8967] = Material.GrayTerracotta; - for (int i = 10566; i <= 10569; i++) - materials[i] = Material.GrayWallBanner; - materials[2003] = Material.GrayWool; - for (int i = 10490; i <= 10505; i++) - materials[i] = Material.GreenBanner; - for (int i = 1845; i <= 1860; i++) - materials[i] = Material.GreenBed; - for (int i = 20321; i <= 20336; i++) - materials[i] = Material.GreenCandle; - for (int i = 20397; i <= 20398; i++) - materials[i] = Material.GreenCandleCake; - materials[10264] = Material.GreenCarpet; - materials[12116] = Material.GreenConcrete; - materials[12132] = Material.GreenConcretePowder; - for (int i = 12091; i <= 12094; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 12021; i <= 12026; i++) - materials[i] = Material.GreenShulkerBox; - materials[5793] = Material.GreenStainedGlass; - for (int i = 9392; i <= 9423; i++) - materials[i] = Material.GreenStainedGlassPane; - materials[8973] = Material.GreenTerracotta; - for (int i = 10590; i <= 10593; i++) - materials[i] = Material.GreenWallBanner; - materials[2009] = Material.GreenWool; - for (int i = 17810; i <= 17821; i++) - materials[i] = Material.Grindstone; - for (int i = 21558; i <= 21559; i++) - materials[i] = Material.HangingRoots; - for (int i = 10248; i <= 10250; i++) - materials[i] = Material.HayBlock; - for (int i = 8763; i <= 8778; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - materials[18817] = Material.HoneyBlock; - materials[18818] = Material.HoneycombBlock; - for (int i = 8829; i <= 8838; i++) - materials[i] = Material.Hopper; - for (int i = 12203; i <= 12204; i++) - materials[i] = Material.HornCoral; - materials[12184] = Material.HornCoralBlock; - for (int i = 12223; i <= 12224; i++) - materials[i] = Material.HornCoralFan; - for (int i = 12297; i <= 12304; i++) - materials[i] = Material.HornCoralWallFan; - materials[5614] = Material.Ice; - materials[6319] = Material.InfestedChiseledStoneBricks; - materials[6315] = Material.InfestedCobblestone; - materials[6318] = Material.InfestedCrackedStoneBricks; - for (int i = 23212; i <= 23214; i++) - materials[i] = Material.InfestedDeepslate; - materials[6317] = Material.InfestedMossyStoneBricks; - materials[6314] = Material.InfestedStone; - materials[6316] = Material.InfestedStoneBricks; - for (int i = 6512; i <= 6543; i++) - materials[i] = Material.IronBars; - materials[2040] = Material.IronBlock; - for (int i = 5488; i <= 5551; i++) - materials[i] = Material.IronDoor; - materials[114] = Material.IronOre; - for (int i = 9922; i <= 9985; i++) - materials[i] = Material.IronTrapdoor; - for (int i = 5705; i <= 5708; i++) - materials[i] = Material.JackOLantern; - for (int i = 18732; i <= 18743; i++) - materials[i] = Material.Jigsaw; - for (int i = 5649; i <= 5650; i++) - materials[i] = Material.Jukebox; - for (int i = 8451; i <= 8474; i++) - materials[i] = Material.JungleButton; - for (int i = 11403; i <= 11466; i++) - materials[i] = Material.JungleDoor; - for (int i = 11115; i <= 11146; i++) - materials[i] = Material.JungleFence; - for (int i = 10891; i <= 10922; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 4998; i <= 5061; i++) - materials[i] = Material.JungleHangingSign; - for (int i = 298; i <= 325; i++) - materials[i] = Material.JungleLeaves; - for (int i = 128; i <= 130; i++) - materials[i] = Material.JungleLog; - materials[18] = Material.JunglePlanks; - for (int i = 5558; i <= 5559; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 30; i <= 31; i++) - materials[i] = Material.JungleSapling; - for (int i = 4378; i <= 4409; i++) - materials[i] = Material.JungleSign; - for (int i = 10703; i <= 10708; i++) - materials[i] = Material.JungleSlab; - for (int i = 7596; i <= 7675; i++) - materials[i] = Material.JungleStairs; - for (int i = 5988; i <= 6051; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 5414; i <= 5421; i++) - materials[i] = Material.JungleWallHangingSign; - for (int i = 4710; i <= 4717; i++) - materials[i] = Material.JungleWallSign; - for (int i = 181; i <= 183; i++) - materials[i] = Material.JungleWood; - for (int i = 12135; i <= 12160; i++) - materials[i] = Material.Kelp; - materials[12161] = Material.KelpPlant; - for (int i = 4570; i <= 4577; i++) - materials[i] = Material.Ladder; - for (int i = 17875; i <= 17878; i++) - materials[i] = Material.Lantern; - materials[471] = Material.LapisBlock; - materials[469] = Material.LapisOre; - for (int i = 20417; i <= 20428; i++) - materials[i] = Material.LargeAmethystBud; - for (int i = 10280; i <= 10281; i++) - materials[i] = Material.LargeFern; - for (int i = 93; i <= 108; i++) - materials[i] = Material.Lava; - materials[7172] = Material.LavaCauldron; - for (int i = 17822; i <= 17837; i++) - materials[i] = Material.Lectern; - for (int i = 5462; i <= 5485; i++) - materials[i] = Material.Lever; - for (int i = 9890; i <= 9921; i++) - materials[i] = Material.Light; - for (int i = 10330; i <= 10345; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 1685; i <= 1700; i++) - materials[i] = Material.LightBlueBed; - for (int i = 20161; i <= 20176; i++) - materials[i] = Material.LightBlueCandle; - for (int i = 20377; i <= 20378; i++) - materials[i] = Material.LightBlueCandleCake; - materials[10254] = Material.LightBlueCarpet; - materials[12106] = Material.LightBlueConcrete; - materials[12122] = Material.LightBlueConcretePowder; - for (int i = 12051; i <= 12054; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 11961; i <= 11966; i++) - materials[i] = Material.LightBlueShulkerBox; - materials[5783] = Material.LightBlueStainedGlass; - for (int i = 9072; i <= 9103; i++) - materials[i] = Material.LightBlueStainedGlassPane; - materials[8963] = Material.LightBlueTerracotta; - for (int i = 10550; i <= 10553; i++) - materials[i] = Material.LightBlueWallBanner; - materials[1999] = Material.LightBlueWool; - for (int i = 10410; i <= 10425; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 1765; i <= 1780; i++) - materials[i] = Material.LightGrayBed; - for (int i = 20241; i <= 20256; i++) - materials[i] = Material.LightGrayCandle; - for (int i = 20387; i <= 20388; i++) - materials[i] = Material.LightGrayCandleCake; - materials[10259] = Material.LightGrayCarpet; - materials[12111] = Material.LightGrayConcrete; - materials[12127] = Material.LightGrayConcretePowder; - for (int i = 12071; i <= 12074; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 11991; i <= 11996; i++) - materials[i] = Material.LightGrayShulkerBox; - materials[5788] = Material.LightGrayStainedGlass; - for (int i = 9232; i <= 9263; i++) - materials[i] = Material.LightGrayStainedGlassPane; - materials[8968] = Material.LightGrayTerracotta; - for (int i = 10570; i <= 10573; i++) - materials[i] = Material.LightGrayWallBanner; - materials[2004] = Material.LightGrayWool; - for (int i = 8747; i <= 8762; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 21398; i <= 21421; i++) - materials[i] = Material.LightningRod; - for (int i = 10272; i <= 10273; i++) - materials[i] = Material.Lilac; - materials[2036] = Material.LilyOfTheValley; - materials[7041] = Material.LilyPad; - for (int i = 10362; i <= 10377; i++) - materials[i] = Material.LimeBanner; - for (int i = 1717; i <= 1732; i++) - materials[i] = Material.LimeBed; - for (int i = 20193; i <= 20208; i++) - materials[i] = Material.LimeCandle; - for (int i = 20381; i <= 20382; i++) - materials[i] = Material.LimeCandleCake; - materials[10256] = Material.LimeCarpet; - materials[12108] = Material.LimeConcrete; - materials[12124] = Material.LimeConcretePowder; - for (int i = 12059; i <= 12062; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 11973; i <= 11978; i++) - materials[i] = Material.LimeShulkerBox; - materials[5785] = Material.LimeStainedGlass; - for (int i = 9136; i <= 9167; i++) - materials[i] = Material.LimeStainedGlassPane; - materials[8965] = Material.LimeTerracotta; - for (int i = 10558; i <= 10561; i++) - materials[i] = Material.LimeWallBanner; - materials[2001] = Material.LimeWool; - materials[18831] = Material.Lodestone; - for (int i = 17776; i <= 17779; i++) - materials[i] = Material.Loom; - for (int i = 10314; i <= 10329; i++) - materials[i] = Material.MagentaBanner; - for (int i = 1669; i <= 1684; i++) - materials[i] = Material.MagentaBed; - for (int i = 20145; i <= 20160; i++) - materials[i] = Material.MagentaCandle; - for (int i = 20375; i <= 20376; i++) - materials[i] = Material.MagentaCandleCake; - materials[10253] = Material.MagentaCarpet; - materials[12105] = Material.MagentaConcrete; - materials[12121] = Material.MagentaConcretePowder; - for (int i = 12047; i <= 12050; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 11955; i <= 11960; i++) - materials[i] = Material.MagentaShulkerBox; - materials[5782] = Material.MagentaStainedGlass; - for (int i = 9040; i <= 9071; i++) - materials[i] = Material.MagentaStainedGlassPane; - materials[8962] = Material.MagentaTerracotta; - for (int i = 10546; i <= 10549; i++) - materials[i] = Material.MagentaWallBanner; - materials[1998] = Material.MagentaWool; - materials[11918] = Material.MagmaBlock; - for (int i = 8523; i <= 8546; i++) - materials[i] = Material.MangroveButton; - for (int i = 11595; i <= 11658; i++) - materials[i] = Material.MangroveDoor; - for (int i = 11211; i <= 11242; i++) - materials[i] = Material.MangroveFence; - for (int i = 10987; i <= 11018; i++) - materials[i] = Material.MangroveFenceGate; - for (int i = 5254; i <= 5317; i++) - materials[i] = Material.MangroveHangingSign; - for (int i = 382; i <= 409; i++) - materials[i] = Material.MangroveLeaves; - for (int i = 137; i <= 139; i++) - materials[i] = Material.MangroveLog; - materials[21] = Material.MangrovePlanks; - for (int i = 5564; i <= 5565; i++) - materials[i] = Material.MangrovePressurePlate; - for (int i = 36; i <= 75; i++) - materials[i] = Material.MangrovePropagule; - for (int i = 140; i <= 141; i++) - materials[i] = Material.MangroveRoots; - for (int i = 4442; i <= 4473; i++) - materials[i] = Material.MangroveSign; - for (int i = 10721; i <= 10726; i++) - materials[i] = Material.MangroveSlab; - for (int i = 9648; i <= 9727; i++) - materials[i] = Material.MangroveStairs; - for (int i = 6180; i <= 6243; i++) - materials[i] = Material.MangroveTrapdoor; - for (int i = 5430; i <= 5437; i++) - materials[i] = Material.MangroveWallHangingSign; - for (int i = 4726; i <= 4733; i++) - materials[i] = Material.MangroveWallSign; - for (int i = 190; i <= 192; i++) - materials[i] = Material.MangroveWood; - for (int i = 20429; i <= 20440; i++) - materials[i] = Material.MediumAmethystBud; - materials[6582] = Material.Melon; - for (int i = 6599; i <= 6606; i++) - materials[i] = Material.MelonStem; - materials[21501] = Material.MossBlock; - materials[21500] = Material.MossCarpet; - materials[2301] = Material.MossyCobblestone; - for (int i = 13478; i <= 13483; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 12654; i <= 12733; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 8013; i <= 8336; i++) - materials[i] = Material.MossyCobblestoneWall; - for (int i = 13466; i <= 13471; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 12494; i <= 12573; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 14504; i <= 14827; i++) - materials[i] = Material.MossyStoneBrickWall; - materials[6309] = Material.MossyStoneBricks; - for (int i = 2012; i <= 2023; i++) - materials[i] = Material.MovingPiston; - materials[21561] = Material.Mud; - for (int i = 10787; i <= 10792; i++) - materials[i] = Material.MudBrickSlab; - for (int i = 6959; i <= 7038; i++) - materials[i] = Material.MudBrickStairs; - for (int i = 15476; i <= 15799; i++) - materials[i] = Material.MudBrickWall; - materials[6313] = Material.MudBricks; - for (int i = 142; i <= 144; i++) - materials[i] = Material.MuddyMangroveRoots; - for (int i = 6448; i <= 6511; i++) - materials[i] = Material.MushroomStem; - for (int i = 7039; i <= 7040; i++) - materials[i] = Material.Mycelium; - for (int i = 7043; i <= 7074; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 10793; i <= 10798; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 7075; i <= 7154; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 15800; i <= 16123; i++) - materials[i] = Material.NetherBrickWall; - materials[7042] = Material.NetherBricks; - materials[118] = Material.NetherGoldOre; - for (int i = 5699; i <= 5700; i++) - materials[i] = Material.NetherPortal; - materials[8828] = Material.NetherQuartzOre; - materials[17967] = Material.NetherSprouts; - for (int i = 7155; i <= 7158; i++) - materials[i] = Material.NetherWart; - materials[11919] = Material.NetherWartBlock; - materials[18819] = Material.NetheriteBlock; - materials[5684] = Material.Netherrack; - for (int i = 487; i <= 1636; i++) - materials[i] = Material.NoteBlock; - for (int i = 8379; i <= 8402; i++) - materials[i] = Material.OakButton; - for (int i = 4506; i <= 4569; i++) - materials[i] = Material.OakDoor; - for (int i = 5651; i <= 5682; i++) - materials[i] = Material.OakFence; - for (int i = 6767; i <= 6798; i++) - materials[i] = Material.OakFenceGate; - for (int i = 4742; i <= 4805; i++) - materials[i] = Material.OakHangingSign; - for (int i = 214; i <= 241; i++) - materials[i] = Material.OakLeaves; - for (int i = 119; i <= 121; i++) - materials[i] = Material.OakLog; - materials[15] = Material.OakPlanks; - for (int i = 5552; i <= 5553; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 24; i <= 25; i++) - materials[i] = Material.OakSapling; - for (int i = 4250; i <= 4281; i++) - materials[i] = Material.OakSign; - for (int i = 10685; i <= 10690; i++) - materials[i] = Material.OakSlab; - for (int i = 2822; i <= 2901; i++) - materials[i] = Material.OakStairs; - for (int i = 5796; i <= 5859; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 5382; i <= 5389; i++) - materials[i] = Material.OakWallHangingSign; - for (int i = 4678; i <= 4685; i++) - materials[i] = Material.OakWallSign; - for (int i = 172; i <= 174; i++) - materials[i] = Material.OakWood; - for (int i = 11925; i <= 11936; i++) - materials[i] = Material.Observer; - materials[2302] = Material.Obsidian; - for (int i = 23221; i <= 23223; i++) - materials[i] = Material.OchreFroglight; - for (int i = 10298; i <= 10313; i++) - materials[i] = Material.OrangeBanner; - for (int i = 1653; i <= 1668; i++) - materials[i] = Material.OrangeBed; - for (int i = 20129; i <= 20144; i++) - materials[i] = Material.OrangeCandle; - for (int i = 20373; i <= 20374; i++) - materials[i] = Material.OrangeCandleCake; - materials[10252] = Material.OrangeCarpet; - materials[12104] = Material.OrangeConcrete; - materials[12120] = Material.OrangeConcretePowder; - for (int i = 12043; i <= 12046; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 11949; i <= 11954; i++) - materials[i] = Material.OrangeShulkerBox; - materials[5781] = Material.OrangeStainedGlass; - for (int i = 9008; i <= 9039; i++) - materials[i] = Material.OrangeStainedGlassPane; - materials[8961] = Material.OrangeTerracotta; - materials[2030] = Material.OrangeTulip; - for (int i = 10542; i <= 10545; i++) - materials[i] = Material.OrangeWallBanner; - materials[1997] = Material.OrangeWool; - materials[2033] = Material.OxeyeDaisy; - materials[20692] = Material.OxidizedCopper; - materials[20698] = Material.OxidizedCutCopper; - for (int i = 21022; i <= 21027; i++) - materials[i] = Material.OxidizedCutCopperSlab; - for (int i = 20702; i <= 20781; i++) - materials[i] = Material.OxidizedCutCopperStairs; - materials[10269] = Material.PackedIce; - materials[6312] = Material.PackedMud; - for (int i = 23227; i <= 23229; i++) - materials[i] = Material.PearlescentFroglight; - for (int i = 10276; i <= 10277; i++) - materials[i] = Material.Peony; - for (int i = 10763; i <= 10768; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 8691; i <= 8706; i++) - materials[i] = Material.PiglinHead; - for (int i = 8707; i <= 8710; i++) - materials[i] = Material.PiglinWallHead; - for (int i = 10378; i <= 10393; i++) - materials[i] = Material.PinkBanner; - for (int i = 1733; i <= 1748; i++) - materials[i] = Material.PinkBed; - for (int i = 20209; i <= 20224; i++) - materials[i] = Material.PinkCandle; - for (int i = 20383; i <= 20384; i++) - materials[i] = Material.PinkCandleCake; - materials[10257] = Material.PinkCarpet; - materials[12109] = Material.PinkConcrete; - materials[12125] = Material.PinkConcretePowder; - for (int i = 12063; i <= 12066; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 11979; i <= 11984; i++) - materials[i] = Material.PinkShulkerBox; - materials[5786] = Material.PinkStainedGlass; - for (int i = 9168; i <= 9199; i++) - materials[i] = Material.PinkStainedGlassPane; - materials[8966] = Material.PinkTerracotta; - materials[2032] = Material.PinkTulip; - for (int i = 10562; i <= 10565; i++) - materials[i] = Material.PinkWallBanner; - materials[2002] = Material.PinkWool; - for (int i = 1960; i <= 1971; i++) - materials[i] = Material.Piston; - for (int i = 1972; i <= 1995; i++) - materials[i] = Material.PistonHead; - for (int i = 8631; i <= 8646; i++) - materials[i] = Material.PlayerHead; - for (int i = 8647; i <= 8650; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - for (int i = 21422; i <= 21441; i++) - materials[i] = Material.PointedDripstone; - materials[7] = Material.PolishedAndesite; - for (int i = 13520; i <= 13525; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 13294; i <= 13373; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 5690; i <= 5692; i++) - materials[i] = Material.PolishedBasalt; - materials[19243] = Material.PolishedBlackstone; - for (int i = 19247; i <= 19252; i++) - materials[i] = Material.PolishedBlackstoneBrickSlab; - for (int i = 19253; i <= 19332; i++) - materials[i] = Material.PolishedBlackstoneBrickStairs; - for (int i = 19333; i <= 19656; i++) - materials[i] = Material.PolishedBlackstoneBrickWall; - materials[19244] = Material.PolishedBlackstoneBricks; - for (int i = 19746; i <= 19769; i++) - materials[i] = Material.PolishedBlackstoneButton; - for (int i = 19744; i <= 19745; i++) - materials[i] = Material.PolishedBlackstonePressurePlate; - for (int i = 19738; i <= 19743; i++) - materials[i] = Material.PolishedBlackstoneSlab; - for (int i = 19658; i <= 19737; i++) - materials[i] = Material.PolishedBlackstoneStairs; - for (int i = 19770; i <= 20093; i++) - materials[i] = Material.PolishedBlackstoneWall; - materials[21976] = Material.PolishedDeepslate; - for (int i = 22057; i <= 22062; i++) - materials[i] = Material.PolishedDeepslateSlab; - for (int i = 21977; i <= 22056; i++) - materials[i] = Material.PolishedDeepslateStairs; - for (int i = 22063; i <= 22386; i++) - materials[i] = Material.PolishedDeepslateWall; - materials[5] = Material.PolishedDiorite; - for (int i = 13472; i <= 13477; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 12574; i <= 12653; i++) - materials[i] = Material.PolishedDioriteStairs; - materials[3] = Material.PolishedGranite; - for (int i = 13454; i <= 13459; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 12334; i <= 12413; i++) - materials[i] = Material.PolishedGraniteStairs; - materials[2025] = Material.Poppy; - for (int i = 8371; i <= 8378; i++) - materials[i] = Material.Potatoes; - materials[8342] = Material.PottedAcaciaSapling; - materials[8349] = Material.PottedAllium; - materials[23219] = Material.PottedAzaleaBush; - materials[8350] = Material.PottedAzureBluet; - materials[12329] = Material.PottedBamboo; - materials[8340] = Material.PottedBirchSapling; - materials[8348] = Material.PottedBlueOrchid; - materials[8360] = Material.PottedBrownMushroom; - materials[8362] = Material.PottedCactus; - materials[8356] = Material.PottedCornflower; - materials[18827] = Material.PottedCrimsonFungus; - materials[18829] = Material.PottedCrimsonRoots; - materials[8346] = Material.PottedDandelion; - materials[8343] = Material.PottedDarkOakSapling; - materials[8361] = Material.PottedDeadBush; - materials[8345] = Material.PottedFern; - materials[23220] = Material.PottedFloweringAzaleaBush; - materials[8341] = Material.PottedJungleSapling; - materials[8357] = Material.PottedLilyOfTheValley; - materials[8344] = Material.PottedMangrovePropagule; - materials[8338] = Material.PottedOakSapling; - materials[8352] = Material.PottedOrangeTulip; - materials[8355] = Material.PottedOxeyeDaisy; - materials[8354] = Material.PottedPinkTulip; - materials[8347] = Material.PottedPoppy; - materials[8359] = Material.PottedRedMushroom; - materials[8351] = Material.PottedRedTulip; - materials[8339] = Material.PottedSpruceSapling; - materials[18828] = Material.PottedWarpedFungus; - materials[18830] = Material.PottedWarpedRoots; - materials[8353] = Material.PottedWhiteTulip; - materials[8358] = Material.PottedWitherRose; - materials[20456] = Material.PowderSnow; - for (int i = 7173; i <= 7175; i++) - materials[i] = Material.PowderSnowCauldron; - for (int i = 1893; i <= 1916; i++) - materials[i] = Material.PoweredRail; - materials[9986] = Material.Prismarine; - for (int i = 10235; i <= 10240; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 10069; i <= 10148; i++) - materials[i] = Material.PrismarineBrickStairs; - materials[9987] = Material.PrismarineBricks; - for (int i = 10229; i <= 10234; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 9989; i <= 10068; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 13856; i <= 14179; i++) - materials[i] = Material.PrismarineWall; - materials[5683] = Material.Pumpkin; - for (int i = 6591; i <= 6598; i++) - materials[i] = Material.PumpkinStem; - for (int i = 10442; i <= 10457; i++) - materials[i] = Material.PurpleBanner; - for (int i = 1797; i <= 1812; i++) - materials[i] = Material.PurpleBed; - for (int i = 20273; i <= 20288; i++) - materials[i] = Material.PurpleCandle; - for (int i = 20391; i <= 20392; i++) - materials[i] = Material.PurpleCandleCake; - materials[10261] = Material.PurpleCarpet; - materials[12113] = Material.PurpleConcrete; - materials[12129] = Material.PurpleConcretePowder; - for (int i = 12079; i <= 12082; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 12003; i <= 12008; i++) - materials[i] = Material.PurpleShulkerBox; - materials[5790] = Material.PurpleStainedGlass; - for (int i = 9296; i <= 9327; i++) - materials[i] = Material.PurpleStainedGlassPane; - materials[8970] = Material.PurpleTerracotta; - for (int i = 10578; i <= 10581; i++) - materials[i] = Material.PurpleWallBanner; - materials[2006] = Material.PurpleWool; - materials[11799] = Material.PurpurBlock; - for (int i = 11800; i <= 11802; i++) - materials[i] = Material.PurpurPillar; - for (int i = 10817; i <= 10822; i++) - materials[i] = Material.PurpurSlab; - for (int i = 11803; i <= 11882; i++) - materials[i] = Material.PurpurStairs; - materials[8839] = Material.QuartzBlock; - materials[20096] = Material.QuartzBricks; - for (int i = 8841; i <= 8843; i++) - materials[i] = Material.QuartzPillar; - for (int i = 10799; i <= 10804; i++) - materials[i] = Material.QuartzSlab; - for (int i = 8844; i <= 8923; i++) - materials[i] = Material.QuartzStairs; - for (int i = 4578; i <= 4597; i++) - materials[i] = Material.Rail; - materials[23217] = Material.RawCopperBlock; - materials[23218] = Material.RawGoldBlock; - materials[23216] = Material.RawIronBlock; - for (int i = 10506; i <= 10521; i++) - materials[i] = Material.RedBanner; - for (int i = 1861; i <= 1876; i++) - materials[i] = Material.RedBed; - for (int i = 20337; i <= 20352; i++) - materials[i] = Material.RedCandle; - for (int i = 20399; i <= 20400; i++) - materials[i] = Material.RedCandleCake; - materials[10265] = Material.RedCarpet; - materials[12117] = Material.RedConcrete; - materials[12133] = Material.RedConcretePowder; - for (int i = 12095; i <= 12098; i++) - materials[i] = Material.RedGlazedTerracotta; - materials[2038] = Material.RedMushroom; - for (int i = 6384; i <= 6447; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 13514; i <= 13519; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 13214; i <= 13293; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 16448; i <= 16771; i++) - materials[i] = Material.RedNetherBrickWall; - materials[11920] = Material.RedNetherBricks; - materials[110] = Material.RedSand; - materials[10602] = Material.RedSandstone; - for (int i = 10805; i <= 10810; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 10605; i <= 10684; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 14180; i <= 14503; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 12027; i <= 12032; i++) - materials[i] = Material.RedShulkerBox; - materials[5794] = Material.RedStainedGlass; - for (int i = 9424; i <= 9455; i++) - materials[i] = Material.RedStainedGlassPane; - materials[8974] = Material.RedTerracotta; - materials[2029] = Material.RedTulip; - for (int i = 10594; i <= 10597; i++) - materials[i] = Material.RedWallBanner; - materials[2010] = Material.RedWool; - materials[8827] = Material.RedstoneBlock; - for (int i = 7187; i <= 7188; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 5568; i <= 5569; i++) - materials[i] = Material.RedstoneOre; - for (int i = 5572; i <= 5573; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 5574; i <= 5581; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 2926; i <= 4221; i++) - materials[i] = Material.RedstoneWire; - materials[23231] = Material.ReinforcedDeepslate; - for (int i = 5716; i <= 5779; i++) - materials[i] = Material.Repeater; - for (int i = 11890; i <= 11901; i++) - materials[i] = Material.RepeatingCommandBlock; - for (int i = 18822; i <= 18826; i++) - materials[i] = Material.RespawnAnchor; - materials[21560] = Material.RootedDirt; - for (int i = 10274; i <= 10275; i++) - materials[i] = Material.RoseBush; - materials[109] = Material.Sand; - materials[484] = Material.Sandstone; - for (int i = 10751; i <= 10756; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 7201; i <= 7280; i++) - materials[i] = Material.SandstoneStairs; - for (int i = 16772; i <= 17095; i++) - materials[i] = Material.SandstoneWall; - for (int i = 17744; i <= 17775; i++) - materials[i] = Material.Scaffolding; - materials[20553] = Material.Sculk; - for (int i = 20682; i <= 20683; i++) - materials[i] = Material.SculkCatalyst; - for (int i = 20457; i <= 20552; i++) - materials[i] = Material.SculkSensor; - for (int i = 20684; i <= 20691; i++) - materials[i] = Material.SculkShrieker; - for (int i = 20554; i <= 20681; i++) - materials[i] = Material.SculkVein; - materials[10247] = Material.SeaLantern; - for (int i = 12305; i <= 12312; i++) - materials[i] = Material.SeaPickle; - materials[1957] = Material.Seagrass; - materials[17982] = Material.Shroomlight; - for (int i = 11937; i <= 11942; i++) - materials[i] = Material.ShulkerBox; - for (int i = 8571; i <= 8586; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 8587; i <= 8590; i++) - materials[i] = Material.SkeletonWallSkull; - materials[9888] = Material.SlimeBlock; - for (int i = 20441; i <= 20452; i++) - materials[i] = Material.SmallAmethystBud; - for (int i = 21542; i <= 21557; i++) - materials[i] = Material.SmallDripleaf; - materials[17838] = Material.SmithingTable; - for (int i = 17792; i <= 17799; i++) - materials[i] = Material.Smoker; - materials[23215] = Material.SmoothBasalt; - materials[10825] = Material.SmoothQuartz; - for (int i = 13496; i <= 13501; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 12974; i <= 13053; i++) - materials[i] = Material.SmoothQuartzStairs; - materials[10826] = Material.SmoothRedSandstone; - for (int i = 13460; i <= 13465; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 12414; i <= 12493; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - materials[10824] = Material.SmoothSandstone; - for (int i = 13490; i <= 13495; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 12894; i <= 12973; i++) - materials[i] = Material.SmoothSandstoneStairs; - materials[10823] = Material.SmoothStone; - for (int i = 10745; i <= 10750; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 5606; i <= 5613; i++) - materials[i] = Material.Snow; - materials[5615] = Material.SnowBlock; - for (int i = 17915; i <= 17946; i++) - materials[i] = Material.SoulCampfire; - materials[2820] = Material.SoulFire; - for (int i = 17879; i <= 17882; i++) - materials[i] = Material.SoulLantern; - materials[5685] = Material.SoulSand; - materials[5686] = Material.SoulSoil; - materials[5693] = Material.SoulTorch; - for (int i = 5694; i <= 5697; i++) - materials[i] = Material.SoulWallTorch; - materials[2821] = Material.Spawner; - materials[466] = Material.Sponge; - materials[21497] = Material.SporeBlossom; - for (int i = 8403; i <= 8426; i++) - materials[i] = Material.SpruceButton; - for (int i = 11275; i <= 11338; i++) - materials[i] = Material.SpruceDoor; - for (int i = 11051; i <= 11082; i++) - materials[i] = Material.SpruceFence; - for (int i = 10827; i <= 10858; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 4806; i <= 4869; i++) - materials[i] = Material.SpruceHangingSign; - for (int i = 242; i <= 269; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 122; i <= 124; i++) - materials[i] = Material.SpruceLog; - materials[16] = Material.SprucePlanks; - for (int i = 5554; i <= 5555; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 26; i <= 27; i++) - materials[i] = Material.SpruceSapling; - for (int i = 4282; i <= 4313; i++) - materials[i] = Material.SpruceSign; - for (int i = 10691; i <= 10696; i++) - materials[i] = Material.SpruceSlab; - for (int i = 7436; i <= 7515; i++) - materials[i] = Material.SpruceStairs; - for (int i = 5860; i <= 5923; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 5390; i <= 5397; i++) - materials[i] = Material.SpruceWallHangingSign; - for (int i = 4686; i <= 4693; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 175; i <= 177; i++) - materials[i] = Material.SpruceWood; - for (int i = 1941; i <= 1952; i++) - materials[i] = Material.StickyPiston; - materials[1] = Material.Stone; - for (int i = 10781; i <= 10786; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 6879; i <= 6958; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 15152; i <= 15475; i++) - materials[i] = Material.StoneBrickWall; - materials[6308] = Material.StoneBricks; - for (int i = 5582; i <= 5605; i++) - materials[i] = Material.StoneButton; - for (int i = 5486; i <= 5487; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 10739; i <= 10744; i++) - materials[i] = Material.StoneSlab; - for (int i = 12814; i <= 12893; i++) - materials[i] = Material.StoneStairs; - for (int i = 17839; i <= 17842; i++) - materials[i] = Material.Stonecutter; - for (int i = 157; i <= 159; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 205; i <= 207; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 169; i <= 171; i++) - materials[i] = Material.StrippedBambooBlock; - for (int i = 151; i <= 153; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 199; i <= 201; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 17977; i <= 17979; i++) - materials[i] = Material.StrippedCrimsonHyphae; - for (int i = 17971; i <= 17973; i++) - materials[i] = Material.StrippedCrimsonStem; - for (int i = 160; i <= 162; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 208; i <= 210; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 154; i <= 156; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 202; i <= 204; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 166; i <= 168; i++) - materials[i] = Material.StrippedMangroveLog; - for (int i = 211; i <= 213; i++) - materials[i] = Material.StrippedMangroveWood; - for (int i = 163; i <= 165; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 193; i <= 195; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 148; i <= 150; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 196; i <= 198; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 17960; i <= 17962; i++) - materials[i] = Material.StrippedWarpedHyphae; - for (int i = 17954; i <= 17956; i++) - materials[i] = Material.StrippedWarpedStem; - for (int i = 18728; i <= 18731; i++) - materials[i] = Material.StructureBlock; - materials[11924] = Material.StructureVoid; - for (int i = 5633; i <= 5648; i++) - materials[i] = Material.SugarCane; - for (int i = 10270; i <= 10271; i++) - materials[i] = Material.Sunflower; - for (int i = 17947; i <= 17950; i++) - materials[i] = Material.SweetBerryBush; - for (int i = 10278; i <= 10279; i++) - materials[i] = Material.TallGrass; - for (int i = 1958; i <= 1959; i++) - materials[i] = Material.TallSeagrass; - for (int i = 18753; i <= 18768; i++) - materials[i] = Material.Target; - materials[10267] = Material.Terracotta; - materials[20455] = Material.TintedGlass; - for (int i = 2042; i <= 2043; i++) - materials[i] = Material.Tnt; - materials[2303] = Material.Torch; - for (int i = 8723; i <= 8746; i++) - materials[i] = Material.TrappedChest; - for (int i = 7307; i <= 7434; i++) - materials[i] = Material.Tripwire; - for (int i = 7291; i <= 7306; i++) - materials[i] = Material.TripwireHook; - for (int i = 12195; i <= 12196; i++) - materials[i] = Material.TubeCoral; - materials[12180] = Material.TubeCoralBlock; - for (int i = 12215; i <= 12216; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 12265; i <= 12272; i++) - materials[i] = Material.TubeCoralWallFan; - materials[20453] = Material.Tuff; - for (int i = 12163; i <= 12174; i++) - materials[i] = Material.TurtleEgg; - for (int i = 18010; i <= 18035; i++) - materials[i] = Material.TwistingVines; - materials[18036] = Material.TwistingVinesPlant; - for (int i = 23224; i <= 23226; i++) - materials[i] = Material.VerdantFroglight; - for (int i = 6607; i <= 6638; i++) - materials[i] = Material.Vine; - materials[12330] = Material.VoidAir; - for (int i = 2304; i <= 2307; i++) - materials[i] = Material.WallTorch; - for (int i = 18496; i <= 18519; i++) - materials[i] = Material.WarpedButton; - for (int i = 18584; i <= 18647; i++) - materials[i] = Material.WarpedDoor; - for (int i = 18088; i <= 18119; i++) - materials[i] = Material.WarpedFence; - for (int i = 18280; i <= 18311; i++) - materials[i] = Material.WarpedFenceGate; - materials[17964] = Material.WarpedFungus; - for (int i = 5190; i <= 5253; i++) - materials[i] = Material.WarpedHangingSign; - for (int i = 17957; i <= 17959; i++) - materials[i] = Material.WarpedHyphae; - materials[17963] = Material.WarpedNylium; - materials[18039] = Material.WarpedPlanks; - for (int i = 18054; i <= 18055; i++) - materials[i] = Material.WarpedPressurePlate; - materials[17966] = Material.WarpedRoots; - for (int i = 18680; i <= 18711; i++) - materials[i] = Material.WarpedSign; - for (int i = 18046; i <= 18051; i++) - materials[i] = Material.WarpedSlab; - for (int i = 18392; i <= 18471; i++) - materials[i] = Material.WarpedStairs; - for (int i = 17951; i <= 17953; i++) - materials[i] = Material.WarpedStem; - for (int i = 18184; i <= 18247; i++) - materials[i] = Material.WarpedTrapdoor; - for (int i = 5446; i <= 5453; i++) - materials[i] = Material.WarpedWallHangingSign; - for (int i = 18720; i <= 18727; i++) - materials[i] = Material.WarpedWallSign; - materials[17965] = Material.WarpedWartBlock; - for (int i = 77; i <= 92; i++) - materials[i] = Material.Water; - for (int i = 7169; i <= 7171; i++) - materials[i] = Material.WaterCauldron; - materials[21046] = Material.WaxedCopperBlock; - materials[21053] = Material.WaxedCutCopper; - for (int i = 21392; i <= 21397; i++) - materials[i] = Material.WaxedCutCopperSlab; - for (int i = 21294; i <= 21373; i++) - materials[i] = Material.WaxedCutCopperStairs; - materials[21048] = Material.WaxedExposedCopper; - materials[21052] = Material.WaxedExposedCutCopper; - for (int i = 21386; i <= 21391; i++) - materials[i] = Material.WaxedExposedCutCopperSlab; - for (int i = 21214; i <= 21293; i++) - materials[i] = Material.WaxedExposedCutCopperStairs; - materials[21049] = Material.WaxedOxidizedCopper; - materials[21050] = Material.WaxedOxidizedCutCopper; - for (int i = 21374; i <= 21379; i++) - materials[i] = Material.WaxedOxidizedCutCopperSlab; - for (int i = 21054; i <= 21133; i++) - materials[i] = Material.WaxedOxidizedCutCopperStairs; - materials[21047] = Material.WaxedWeatheredCopper; - materials[21051] = Material.WaxedWeatheredCutCopper; - for (int i = 21380; i <= 21385; i++) - materials[i] = Material.WaxedWeatheredCutCopperSlab; - for (int i = 21134; i <= 21213; i++) - materials[i] = Material.WaxedWeatheredCutCopperStairs; - materials[20693] = Material.WeatheredCopper; - materials[20699] = Material.WeatheredCutCopper; - for (int i = 21028; i <= 21033; i++) - materials[i] = Material.WeatheredCutCopperSlab; - for (int i = 20782; i <= 20861; i++) - materials[i] = Material.WeatheredCutCopperStairs; - for (int i = 17983; i <= 18008; i++) - materials[i] = Material.WeepingVines; - materials[18009] = Material.WeepingVinesPlant; - materials[467] = Material.WetSponge; - for (int i = 4226; i <= 4233; i++) - materials[i] = Material.Wheat; - for (int i = 10282; i <= 10297; i++) - materials[i] = Material.WhiteBanner; - for (int i = 1637; i <= 1652; i++) - materials[i] = Material.WhiteBed; - for (int i = 20113; i <= 20128; i++) - materials[i] = Material.WhiteCandle; - for (int i = 20371; i <= 20372; i++) - materials[i] = Material.WhiteCandleCake; - materials[10251] = Material.WhiteCarpet; - materials[12103] = Material.WhiteConcrete; - materials[12119] = Material.WhiteConcretePowder; - for (int i = 12039; i <= 12042; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 11943; i <= 11948; i++) - materials[i] = Material.WhiteShulkerBox; - materials[5780] = Material.WhiteStainedGlass; - for (int i = 8976; i <= 9007; i++) - materials[i] = Material.WhiteStainedGlassPane; - materials[8960] = Material.WhiteTerracotta; - materials[2031] = Material.WhiteTulip; - for (int i = 10538; i <= 10541; i++) - materials[i] = Material.WhiteWallBanner; - materials[1996] = Material.WhiteWool; - materials[2035] = Material.WitherRose; - for (int i = 8591; i <= 8606; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 8607; i <= 8610; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 10346; i <= 10361; i++) - materials[i] = Material.YellowBanner; - for (int i = 1701; i <= 1716; i++) - materials[i] = Material.YellowBed; - for (int i = 20177; i <= 20192; i++) - materials[i] = Material.YellowCandle; - for (int i = 20379; i <= 20380; i++) - materials[i] = Material.YellowCandleCake; - materials[10255] = Material.YellowCarpet; - materials[12107] = Material.YellowConcrete; - materials[12123] = Material.YellowConcretePowder; - for (int i = 12055; i <= 12058; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 11967; i <= 11972; i++) - materials[i] = Material.YellowShulkerBox; - materials[5784] = Material.YellowStainedGlass; - for (int i = 9104; i <= 9135; i++) - materials[i] = Material.YellowStainedGlassPane; - materials[8964] = Material.YellowTerracotta; - for (int i = 10554; i <= 10557; i++) - materials[i] = Material.YellowWallBanner; - materials[2000] = Material.YellowWool; - for (int i = 8611; i <= 8626; i++) - materials[i] = Material.ZombieHead; - for (int i = 8627; i <= 8630; i++) - materials[i] = Material.ZombieWallHead; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(24, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(26, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(28, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(30, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(32, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(34, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(36, 40, - [ - new("age", ["0", "1", "2", "3", "4"], 8), - new("hanging", ["true", "false"], 4), - new("stage", ["0", "1"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(77, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(93, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(119, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(122, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(125, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(128, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(131, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(134, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(137, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(140, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(142, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(145, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(148, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(151, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(154, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(157, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(160, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(163, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(166, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(169, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(172, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(175, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(178, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(181, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(184, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(187, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(190, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(193, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(196, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(199, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(202, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(205, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(208, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(211, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(214, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(242, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(270, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(298, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(326, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(354, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(382, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(410, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(438, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(472, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(487, 1150, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling", "zombie", "skeleton", "creeper", "dragon", "wither_skeleton", "piglin", "custom_head"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1637, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1653, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1669, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1685, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1701, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1717, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1733, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1749, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1765, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1781, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1797, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1813, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1829, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1845, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1861, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1877, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1893, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(1917, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(1941, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(1958, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(1960, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(1972, 24, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2) - ]), - new(2012, 12, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 2) - ]), - new(2042, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(2045, 256, - [ - new("facing", ["north", "south", "west", "east"], 64), - new("slot_0_occupied", ["true", "false"], 32), - new("slot_1_occupied", ["true", "false"], 16), - new("slot_2_occupied", ["true", "false"], 8), - new("slot_3_occupied", ["true", "false"], 4), - new("slot_4_occupied", ["true", "false"], 2), - new("slot_5_occupied", ["true", "false"], 1) - ]), - new(2304, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(2308, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(2822, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2902, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(2926, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(4226, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4234, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4242, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(4250, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4282, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4314, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4346, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4378, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4410, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4442, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4474, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4506, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4570, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4578, 20, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4598, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4678, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4686, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4694, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4702, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4710, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4718, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4726, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4734, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4742, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4806, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4870, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4934, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4998, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5062, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5126, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5190, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5254, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5318, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5382, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5390, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5398, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5406, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5414, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5422, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5430, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5438, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5446, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5454, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5462, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5486, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5488, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5552, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5554, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5556, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5558, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5560, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5562, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5564, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5566, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5568, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5570, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5572, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5574, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(5582, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5606, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(5616, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5633, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5649, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(5651, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5687, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(5690, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(5694, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5699, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(5701, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5705, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5709, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(5716, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5796, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5860, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5924, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5988, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6052, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6116, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6180, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6244, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6320, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6384, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6448, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6512, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6544, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6550, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6583, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6587, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6591, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(6599, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(6607, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6639, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6767, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6799, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6879, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6959, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7039, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(7043, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7075, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7155, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(7160, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(7169, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(7173, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(7177, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7187, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(7189, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7201, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7283, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7291, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7307, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7436, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7516, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7596, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7676, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(7689, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(8013, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(8363, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8371, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8379, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8403, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8427, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8451, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8475, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8499, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8523, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8547, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8571, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8587, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8591, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8607, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8611, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8627, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8631, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8647, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8651, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8667, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8671, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8687, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8691, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8707, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8711, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8715, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8719, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8723, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(8747, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8763, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8779, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8795, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8829, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(8841, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(8844, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8924, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8948, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(8976, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9008, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9040, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9072, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9104, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9136, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9168, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9200, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9232, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9264, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9296, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9328, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9360, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9392, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9424, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9456, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9488, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9568, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9648, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9728, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9808, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9890, 32, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9922, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9989, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10069, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10149, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10229, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10235, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10241, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10248, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(10270, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10272, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10274, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10276, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10278, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10280, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10282, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10298, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10314, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10330, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10346, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10362, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10378, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10394, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10410, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10426, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10442, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10458, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10474, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10490, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10506, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10522, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10538, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10542, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10546, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10550, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10554, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10558, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10562, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10566, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10570, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10574, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10578, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10582, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10586, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10590, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10594, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10598, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10605, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10685, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10691, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10697, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10703, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10709, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10715, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10721, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10727, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10733, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10739, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10745, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10751, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10757, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10763, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10769, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10775, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10781, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10787, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10793, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10799, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10805, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10811, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10817, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10827, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10859, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10891, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10923, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10955, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10987, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11019, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11051, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11083, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11115, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11147, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11179, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11211, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11243, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11275, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11339, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11403, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11467, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11531, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11595, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11659, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11723, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(11729, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11793, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(11800, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(11803, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11884, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(11890, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(11902, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(11914, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(11921, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(11925, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11937, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(11943, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(11949, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(11955, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(11961, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(11967, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(11973, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(11979, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(11985, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(11991, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(11997, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12003, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12009, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12015, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12021, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12027, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12033, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12039, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12043, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12047, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12051, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12055, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12059, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12063, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12067, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12071, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12075, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12079, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12083, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12087, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12091, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12095, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12099, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12135, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(12163, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(12185, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12187, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12189, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12191, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12193, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12195, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12197, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12199, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12201, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12203, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12205, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12207, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12209, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12211, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12213, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12215, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12217, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12219, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12221, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12223, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12225, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12233, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12241, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12249, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12257, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12265, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12273, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12281, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12289, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12297, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12305, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12314, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12317, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(12332, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(12334, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12414, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12494, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12574, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12654, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12734, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12814, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12894, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12974, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13054, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13134, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13214, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13294, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13374, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13454, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13460, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13466, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13472, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13478, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13484, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13490, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13496, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13502, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13508, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13514, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13520, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13526, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13532, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(13856, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14180, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14504, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14828, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15152, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15476, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15800, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16124, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16448, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16772, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17096, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17420, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17744, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17776, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(17780, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(17792, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(17800, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(17810, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(17822, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(17839, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(17843, 32, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(17875, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17879, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17883, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17915, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(17947, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(17951, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(17954, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(17957, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(17960, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(17968, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(17971, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(17974, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(17977, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(17983, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(18010, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(18040, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18046, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18052, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(18054, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(18056, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(18088, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(18120, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18184, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18248, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18280, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18312, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18392, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18472, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18496, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18520, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18584, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18648, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18680, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18712, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18720, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18728, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(18732, 12, - [ - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 1) - ]), - new(18744, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(18753, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(18769, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(18793, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(18822, 5, - [ - new("charges", ["0", "1", "2", "3", "4"], 1) - ]), - new(18833, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18913, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19237, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19247, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19253, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19333, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19658, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19738, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19744, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(19746, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19770, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20097, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20113, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20129, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20145, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20161, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20177, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20193, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20209, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20225, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20241, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20257, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20273, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20289, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20305, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20321, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20337, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20353, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20369, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20371, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20373, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20375, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20377, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20379, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20381, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20383, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20385, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20387, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20389, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20391, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20393, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20395, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20397, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20399, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20401, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20405, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20417, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20429, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20441, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20457, 96, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20554, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(20682, 2, - [ - new("bloom", ["true", "false"], 1) - ]), - new(20684, 8, - [ - new("can_summon", ["true", "false"], 4), - new("shrieking", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20702, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20782, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20862, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20942, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21022, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21028, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21034, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21040, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21054, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21134, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21214, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21294, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21374, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21380, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21386, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21392, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21398, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21422, 20, - [ - new("thickness", ["tip_merge", "tip", "frustum", "middle", "base"], 4), - new("vertical_direction", ["up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21443, 52, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 2), - new("berries", ["true", "false"], 1) - ]), - new(21495, 2, - [ - new("berries", ["true", "false"], 1) - ]), - new(21502, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("tilt", ["none", "unstable", "partial", "full"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21534, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21542, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("half", ["upper", "lower"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21558, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(21562, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(21566, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21646, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21652, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(21977, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22057, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22063, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22388, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22468, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22474, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22799, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22879, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22885, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(23212, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(23221, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(23224, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(23227, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette1194.cs b/MinecraftClient/Mapping/BlockPalettes/Palette1194.cs deleted file mode 100644 index 89311f2545..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette1194.cs +++ /dev/null @@ -1,5113 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - public class Palette1194 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette1194() - { - for (int i = 8703; i <= 8726; i++) - materials[i] = Material.AcaciaButton; - for (int i = 11869; i <= 11932; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 11517; i <= 11548; i++) - materials[i] = Material.AcaciaFence; - for (int i = 11261; i <= 11292; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 5022; i <= 5085; i++) - materials[i] = Material.AcaciaHangingSign; - for (int i = 345; i <= 372; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 138; i <= 140; i++) - materials[i] = Material.AcaciaLog; - materials[19] = Material.AcaciaPlanks; - for (int i = 5720; i <= 5721; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 33; i <= 34; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 4394; i <= 4425; i++) - materials[i] = Material.AcaciaSign; - for (int i = 11041; i <= 11046; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 9740; i <= 9819; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 6214; i <= 6277; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 5558; i <= 5565; i++) - materials[i] = Material.AcaciaWallHangingSign; - for (int i = 4782; i <= 4789; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 197; i <= 199; i++) - materials[i] = Material.AcaciaWood; - for (int i = 9176; i <= 9199; i++) - materials[i] = Material.ActivatorRail; - materials[0] = Material.Air; - materials[2075] = Material.Allium; - materials[20872] = Material.AmethystBlock; - for (int i = 20874; i <= 20885; i++) - materials[i] = Material.AmethystCluster; - materials[19289] = Material.AncientDebris; - materials[6] = Material.Andesite; - for (int i = 13977; i <= 13982; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 13603; i <= 13682; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 16593; i <= 16916; i++) - materials[i] = Material.AndesiteWall; - for (int i = 8963; i <= 8966; i++) - materials[i] = Material.Anvil; - for (int i = 6813; i <= 6816; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 6809; i <= 6812; i++) - materials[i] = Material.AttachedPumpkinStem; - materials[21967] = Material.Azalea; - for (int i = 457; i <= 484; i++) - materials[i] = Material.AzaleaLeaves; - materials[2076] = Material.AzureBluet; - for (int i = 12786; i <= 12797; i++) - materials[i] = Material.Bamboo; - for (int i = 155; i <= 157; i++) - materials[i] = Material.BambooBlock; - for (int i = 8799; i <= 8822; i++) - materials[i] = Material.BambooButton; - for (int i = 12125; i <= 12188; i++) - materials[i] = Material.BambooDoor; - for (int i = 11645; i <= 11676; i++) - materials[i] = Material.BambooFence; - for (int i = 11389; i <= 11420; i++) - materials[i] = Material.BambooFenceGate; - for (int i = 5470; i <= 5533; i++) - materials[i] = Material.BambooHangingSign; - materials[24] = Material.BambooMosaic; - for (int i = 11071; i <= 11076; i++) - materials[i] = Material.BambooMosaicSlab; - for (int i = 10140; i <= 10219; i++) - materials[i] = Material.BambooMosaicStairs; - materials[23] = Material.BambooPlanks; - for (int i = 5728; i <= 5729; i++) - materials[i] = Material.BambooPressurePlate; - materials[12785] = Material.BambooSapling; - for (int i = 4554; i <= 4585; i++) - materials[i] = Material.BambooSign; - for (int i = 11065; i <= 11070; i++) - materials[i] = Material.BambooSlab; - for (int i = 10060; i <= 10139; i++) - materials[i] = Material.BambooStairs; - for (int i = 6470; i <= 6533; i++) - materials[i] = Material.BambooTrapdoor; - for (int i = 5614; i <= 5621; i++) - materials[i] = Material.BambooWallHangingSign; - for (int i = 4822; i <= 4829; i++) - materials[i] = Material.BambooWallSign; - for (int i = 18249; i <= 18260; i++) - materials[i] = Material.Barrel; - materials[10221] = Material.Barrier; - for (int i = 5849; i <= 5851; i++) - materials[i] = Material.Basalt; - materials[7914] = Material.Beacon; - materials[79] = Material.Bedrock; - for (int i = 19238; i <= 19261; i++) - materials[i] = Material.BeeNest; - for (int i = 19262; i <= 19285; i++) - materials[i] = Material.Beehive; - for (int i = 12353; i <= 12356; i++) - materials[i] = Material.Beetroots; - for (int i = 18312; i <= 18343; i++) - materials[i] = Material.Bell; - for (int i = 21987; i <= 22018; i++) - materials[i] = Material.BigDripleaf; - for (int i = 22019; i <= 22026; i++) - materials[i] = Material.BigDripleafStem; - for (int i = 8655; i <= 8678; i++) - materials[i] = Material.BirchButton; - for (int i = 11741; i <= 11804; i++) - materials[i] = Material.BirchDoor; - for (int i = 11453; i <= 11484; i++) - materials[i] = Material.BirchFence; - for (int i = 11197; i <= 11228; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 4958; i <= 5021; i++) - materials[i] = Material.BirchHangingSign; - for (int i = 289; i <= 316; i++) - materials[i] = Material.BirchLeaves; - for (int i = 132; i <= 134; i++) - materials[i] = Material.BirchLog; - materials[17] = Material.BirchPlanks; - for (int i = 5716; i <= 5717; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 29; i <= 30; i++) - materials[i] = Material.BirchSapling; - for (int i = 4362; i <= 4393; i++) - materials[i] = Material.BirchSign; - for (int i = 11029; i <= 11034; i++) - materials[i] = Material.BirchSlab; - for (int i = 7742; i <= 7821; i++) - materials[i] = Material.BirchStairs; - for (int i = 6086; i <= 6149; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 5550; i <= 5557; i++) - materials[i] = Material.BirchWallHangingSign; - for (int i = 4774; i <= 4781; i++) - materials[i] = Material.BirchWallSign; - for (int i = 191; i <= 193; i++) - materials[i] = Material.BirchWood; - for (int i = 10854; i <= 10869; i++) - materials[i] = Material.BlackBanner; - for (int i = 1924; i <= 1939; i++) - materials[i] = Material.BlackBed; - for (int i = 20822; i <= 20837; i++) - materials[i] = Material.BlackCandle; - for (int i = 20870; i <= 20871; i++) - materials[i] = Material.BlackCandleCake; - materials[10598] = Material.BlackCarpet; - materials[12587] = Material.BlackConcrete; - materials[12603] = Material.BlackConcretePowder; - for (int i = 12568; i <= 12571; i++) - materials[i] = Material.BlackGlazedTerracotta; - for (int i = 12502; i <= 12507; i++) - materials[i] = Material.BlackShulkerBox; - materials[5957] = Material.BlackStainedGlass; - for (int i = 9708; i <= 9739; i++) - materials[i] = Material.BlackStainedGlassPane; - materials[9227] = Material.BlackTerracotta; - for (int i = 10930; i <= 10933; i++) - materials[i] = Material.BlackWallBanner; - materials[2058] = Material.BlackWool; - materials[19301] = Material.Blackstone; - for (int i = 19706; i <= 19711; i++) - materials[i] = Material.BlackstoneSlab; - for (int i = 19302; i <= 19381; i++) - materials[i] = Material.BlackstoneStairs; - for (int i = 19382; i <= 19705; i++) - materials[i] = Material.BlackstoneWall; - for (int i = 18269; i <= 18276; i++) - materials[i] = Material.BlastFurnace; - for (int i = 10790; i <= 10805; i++) - materials[i] = Material.BlueBanner; - for (int i = 1860; i <= 1875; i++) - materials[i] = Material.BlueBed; - for (int i = 20758; i <= 20773; i++) - materials[i] = Material.BlueCandle; - for (int i = 20862; i <= 20863; i++) - materials[i] = Material.BlueCandleCake; - materials[10594] = Material.BlueCarpet; - materials[12583] = Material.BlueConcrete; - materials[12599] = Material.BlueConcretePowder; - for (int i = 12552; i <= 12555; i++) - materials[i] = Material.BlueGlazedTerracotta; - materials[12782] = Material.BlueIce; - materials[2074] = Material.BlueOrchid; - for (int i = 12478; i <= 12483; i++) - materials[i] = Material.BlueShulkerBox; - materials[5953] = Material.BlueStainedGlass; - for (int i = 9580; i <= 9611; i++) - materials[i] = Material.BlueStainedGlassPane; - materials[9223] = Material.BlueTerracotta; - for (int i = 10914; i <= 10917; i++) - materials[i] = Material.BlueWallBanner; - materials[2054] = Material.BlueWool; - for (int i = 12390; i <= 12392; i++) - materials[i] = Material.BoneBlock; - materials[2092] = Material.Bookshelf; - for (int i = 12666; i <= 12667; i++) - materials[i] = Material.BrainCoral; - materials[12650] = Material.BrainCoralBlock; - for (int i = 12686; i <= 12687; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 12742; i <= 12749; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 7386; i <= 7393; i++) - materials[i] = Material.BrewingStand; - for (int i = 11113; i <= 11118; i++) - materials[i] = Material.BrickSlab; - for (int i = 7025; i <= 7104; i++) - materials[i] = Material.BrickStairs; - for (int i = 14001; i <= 14324; i++) - materials[i] = Material.BrickWall; - materials[2089] = Material.Bricks; - for (int i = 10806; i <= 10821; i++) - materials[i] = Material.BrownBanner; - for (int i = 1876; i <= 1891; i++) - materials[i] = Material.BrownBed; - for (int i = 20774; i <= 20789; i++) - materials[i] = Material.BrownCandle; - for (int i = 20864; i <= 20865; i++) - materials[i] = Material.BrownCandleCake; - materials[10595] = Material.BrownCarpet; - materials[12584] = Material.BrownConcrete; - materials[12600] = Material.BrownConcretePowder; - for (int i = 12556; i <= 12559; i++) - materials[i] = Material.BrownGlazedTerracotta; - materials[2085] = Material.BrownMushroom; - for (int i = 6546; i <= 6609; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 12484; i <= 12489; i++) - materials[i] = Material.BrownShulkerBox; - materials[5954] = Material.BrownStainedGlass; - for (int i = 9612; i <= 9643; i++) - materials[i] = Material.BrownStainedGlassPane; - materials[9224] = Material.BrownTerracotta; - for (int i = 10918; i <= 10921; i++) - materials[i] = Material.BrownWallBanner; - materials[2055] = Material.BrownWool; - for (int i = 12801; i <= 12802; i++) - materials[i] = Material.BubbleColumn; - for (int i = 12668; i <= 12669; i++) - materials[i] = Material.BubbleCoral; - materials[12651] = Material.BubbleCoralBlock; - for (int i = 12688; i <= 12689; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 12750; i <= 12757; i++) - materials[i] = Material.BubbleCoralWallFan; - materials[20873] = Material.BuddingAmethyst; - for (int i = 5778; i <= 5793; i++) - materials[i] = Material.Cactus; - for (int i = 5871; i <= 5877; i++) - materials[i] = Material.Cake; - materials[20923] = Material.Calcite; - for (int i = 18352; i <= 18383; i++) - materials[i] = Material.Campfire; - for (int i = 20566; i <= 20581; i++) - materials[i] = Material.Candle; - for (int i = 20838; i <= 20839; i++) - materials[i] = Material.CandleCake; - for (int i = 8591; i <= 8598; i++) - materials[i] = Material.Carrots; - materials[18277] = Material.CartographyTable; - for (int i = 5863; i <= 5866; i++) - materials[i] = Material.CarvedPumpkin; - materials[7394] = Material.Cauldron; - materials[12800] = Material.CaveAir; - for (int i = 21912; i <= 21963; i++) - materials[i] = Material.CaveVines; - for (int i = 21964; i <= 21965; i++) - materials[i] = Material.CaveVinesPlant; - for (int i = 6770; i <= 6775; i++) - materials[i] = Material.Chain; - for (int i = 12371; i <= 12382; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 8727; i <= 8750; i++) - materials[i] = Material.CherryButton; - for (int i = 11933; i <= 11996; i++) - materials[i] = Material.CherryDoor; - for (int i = 11549; i <= 11580; i++) - materials[i] = Material.CherryFence; - for (int i = 11293; i <= 11324; i++) - materials[i] = Material.CherryFenceGate; - for (int i = 5086; i <= 5149; i++) - materials[i] = Material.CherryHangingSign; - for (int i = 373; i <= 400; i++) - materials[i] = Material.CherryLeaves; - for (int i = 141; i <= 143; i++) - materials[i] = Material.CherryLog; - materials[20] = Material.CherryPlanks; - for (int i = 5722; i <= 5723; i++) - materials[i] = Material.CherryPressurePlate; - for (int i = 35; i <= 36; i++) - materials[i] = Material.CherrySapling; - for (int i = 4426; i <= 4457; i++) - materials[i] = Material.CherrySign; - for (int i = 11047; i <= 11052; i++) - materials[i] = Material.CherrySlab; - for (int i = 9820; i <= 9899; i++) - materials[i] = Material.CherryStairs; - for (int i = 6278; i <= 6341; i++) - materials[i] = Material.CherryTrapdoor; - for (int i = 5566; i <= 5573; i++) - materials[i] = Material.CherryWallHangingSign; - for (int i = 4790; i <= 4797; i++) - materials[i] = Material.CherryWallSign; - for (int i = 200; i <= 202; i++) - materials[i] = Material.CherryWood; - for (int i = 2950; i <= 2973; i++) - materials[i] = Material.Chest; - for (int i = 8967; i <= 8970; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 2093; i <= 2348; i++) - materials[i] = Material.ChiseledBookshelf; - materials[23694] = Material.ChiseledDeepslate; - materials[20563] = Material.ChiseledNetherBricks; - materials[19715] = Material.ChiseledPolishedBlackstone; - materials[9092] = Material.ChiseledQuartzBlock; - materials[10935] = Material.ChiseledRedSandstone; - materials[532] = Material.ChiseledSandstone; - materials[6537] = Material.ChiseledStoneBricks; - for (int i = 12259; i <= 12264; i++) - materials[i] = Material.ChorusFlower; - for (int i = 12195; i <= 12258; i++) - materials[i] = Material.ChorusPlant; - materials[5794] = Material.Clay; - materials[10600] = Material.CoalBlock; - materials[123] = Material.CoalOre; - materials[11] = Material.CoarseDirt; - materials[22050] = Material.CobbledDeepslate; - for (int i = 22131; i <= 22136; i++) - materials[i] = Material.CobbledDeepslateSlab; - for (int i = 22051; i <= 22130; i++) - materials[i] = Material.CobbledDeepslateStairs; - for (int i = 22137; i <= 22460; i++) - materials[i] = Material.CobbledDeepslateWall; - materials[14] = Material.Cobblestone; - for (int i = 11107; i <= 11112; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 4678; i <= 4757; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 7915; i <= 8238; i++) - materials[i] = Material.CobblestoneWall; - materials[2000] = Material.Cobweb; - for (int i = 7415; i <= 7426; i++) - materials[i] = Material.Cocoa; - for (int i = 7902; i <= 7913; i++) - materials[i] = Material.CommandBlock; - for (int i = 9031; i <= 9046; i++) - materials[i] = Material.Comparator; - for (int i = 19213; i <= 19221; i++) - materials[i] = Material.Composter; - for (int i = 12783; i <= 12784; i++) - materials[i] = Material.Conduit; - materials[21164] = Material.CopperBlock; - materials[21165] = Material.CopperOre; - materials[2082] = Material.Cornflower; - materials[23695] = Material.CrackedDeepslateBricks; - materials[23696] = Material.CrackedDeepslateTiles; - materials[20564] = Material.CrackedNetherBricks; - materials[19714] = Material.CrackedPolishedBlackstoneBricks; - materials[6536] = Material.CrackedStoneBricks; - materials[4273] = Material.CraftingTable; - for (int i = 8903; i <= 8918; i++) - materials[i] = Material.CreeperHead; - for (int i = 8919; i <= 8922; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 18941; i <= 18964; i++) - materials[i] = Material.CrimsonButton; - for (int i = 18989; i <= 19052; i++) - materials[i] = Material.CrimsonDoor; - for (int i = 18525; i <= 18556; i++) - materials[i] = Material.CrimsonFence; - for (int i = 18717; i <= 18748; i++) - materials[i] = Material.CrimsonFenceGate; - materials[18450] = Material.CrimsonFungus; - for (int i = 5278; i <= 5341; i++) - materials[i] = Material.CrimsonHangingSign; - for (int i = 18443; i <= 18445; i++) - materials[i] = Material.CrimsonHyphae; - materials[18449] = Material.CrimsonNylium; - materials[18507] = Material.CrimsonPlanks; - for (int i = 18521; i <= 18522; i++) - materials[i] = Material.CrimsonPressurePlate; - materials[18506] = Material.CrimsonRoots; - for (int i = 19117; i <= 19148; i++) - materials[i] = Material.CrimsonSign; - for (int i = 18509; i <= 18514; i++) - materials[i] = Material.CrimsonSlab; - for (int i = 18781; i <= 18860; i++) - materials[i] = Material.CrimsonStairs; - for (int i = 18437; i <= 18439; i++) - materials[i] = Material.CrimsonStem; - for (int i = 18589; i <= 18652; i++) - materials[i] = Material.CrimsonTrapdoor; - for (int i = 5598; i <= 5605; i++) - materials[i] = Material.CrimsonWallHangingSign; - for (int i = 19181; i <= 19188; i++) - materials[i] = Material.CrimsonWallSign; - materials[19290] = Material.CryingObsidian; - materials[21170] = Material.CutCopper; - for (int i = 21509; i <= 21514; i++) - materials[i] = Material.CutCopperSlab; - for (int i = 21411; i <= 21490; i++) - materials[i] = Material.CutCopperStairs; - materials[10936] = Material.CutRedSandstone; - for (int i = 11149; i <= 11154; i++) - materials[i] = Material.CutRedSandstoneSlab; - materials[533] = Material.CutSandstone; - for (int i = 11095; i <= 11100; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 10758; i <= 10773; i++) - materials[i] = Material.CyanBanner; - for (int i = 1828; i <= 1843; i++) - materials[i] = Material.CyanBed; - for (int i = 20726; i <= 20741; i++) - materials[i] = Material.CyanCandle; - for (int i = 20858; i <= 20859; i++) - materials[i] = Material.CyanCandleCake; - materials[10592] = Material.CyanCarpet; - materials[12581] = Material.CyanConcrete; - materials[12597] = Material.CyanConcretePowder; - for (int i = 12544; i <= 12547; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 12466; i <= 12471; i++) - materials[i] = Material.CyanShulkerBox; - materials[5951] = Material.CyanStainedGlass; - for (int i = 9516; i <= 9547; i++) - materials[i] = Material.CyanStainedGlassPane; - materials[9221] = Material.CyanTerracotta; - for (int i = 10906; i <= 10909; i++) - materials[i] = Material.CyanWallBanner; - materials[2052] = Material.CyanWool; - for (int i = 8971; i <= 8974; i++) - materials[i] = Material.DamagedAnvil; - materials[2071] = Material.Dandelion; - for (int i = 8751; i <= 8774; i++) - materials[i] = Material.DarkOakButton; - for (int i = 11997; i <= 12060; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 11581; i <= 11612; i++) - materials[i] = Material.DarkOakFence; - for (int i = 11325; i <= 11356; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 5214; i <= 5277; i++) - materials[i] = Material.DarkOakHangingSign; - for (int i = 401; i <= 428; i++) - materials[i] = Material.DarkOakLeaves; - for (int i = 144; i <= 146; i++) - materials[i] = Material.DarkOakLog; - materials[21] = Material.DarkOakPlanks; - for (int i = 5724; i <= 5725; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 37; i <= 38; i++) - materials[i] = Material.DarkOakSapling; - for (int i = 4490; i <= 4521; i++) - materials[i] = Material.DarkOakSign; - for (int i = 11053; i <= 11058; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 9900; i <= 9979; i++) - materials[i] = Material.DarkOakStairs; - for (int i = 6342; i <= 6405; i++) - materials[i] = Material.DarkOakTrapdoor; - for (int i = 5582; i <= 5589; i++) - materials[i] = Material.DarkOakWallHangingSign; - for (int i = 4806; i <= 4813; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 203; i <= 205; i++) - materials[i] = Material.DarkOakWood; - materials[10320] = Material.DarkPrismarine; - for (int i = 10573; i <= 10578; i++) - materials[i] = Material.DarkPrismarineSlab; - for (int i = 10481; i <= 10560; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 9047; i <= 9078; i++) - materials[i] = Material.DaylightDetector; - for (int i = 12656; i <= 12657; i++) - materials[i] = Material.DeadBrainCoral; - materials[12645] = Material.DeadBrainCoralBlock; - for (int i = 12676; i <= 12677; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 12702; i <= 12709; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 12658; i <= 12659; i++) - materials[i] = Material.DeadBubbleCoral; - materials[12646] = Material.DeadBubbleCoralBlock; - for (int i = 12678; i <= 12679; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 12710; i <= 12717; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - materials[2003] = Material.DeadBush; - for (int i = 12660; i <= 12661; i++) - materials[i] = Material.DeadFireCoral; - materials[12647] = Material.DeadFireCoralBlock; - for (int i = 12680; i <= 12681; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 12718; i <= 12725; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 12662; i <= 12663; i++) - materials[i] = Material.DeadHornCoral; - materials[12648] = Material.DeadHornCoralBlock; - for (int i = 12682; i <= 12683; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 12726; i <= 12733; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 12654; i <= 12655; i++) - materials[i] = Material.DeadTubeCoral; - materials[12644] = Material.DeadTubeCoralBlock; - for (int i = 12674; i <= 12675; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 12694; i <= 12701; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 23717; i <= 23724; i++) - materials[i] = Material.DecoratedPot; - for (int i = 22047; i <= 22049; i++) - materials[i] = Material.Deepslate; - for (int i = 23364; i <= 23369; i++) - materials[i] = Material.DeepslateBrickSlab; - for (int i = 23284; i <= 23363; i++) - materials[i] = Material.DeepslateBrickStairs; - for (int i = 23370; i <= 23693; i++) - materials[i] = Material.DeepslateBrickWall; - materials[23283] = Material.DeepslateBricks; - materials[124] = Material.DeepslateCoalOre; - materials[21166] = Material.DeepslateCopperOre; - materials[4271] = Material.DeepslateDiamondOre; - materials[7508] = Material.DeepslateEmeraldOre; - materials[120] = Material.DeepslateGoldOre; - materials[122] = Material.DeepslateIronOre; - materials[517] = Material.DeepslateLapisOre; - for (int i = 5732; i <= 5733; i++) - materials[i] = Material.DeepslateRedstoneOre; - for (int i = 22953; i <= 22958; i++) - materials[i] = Material.DeepslateTileSlab; - for (int i = 22873; i <= 22952; i++) - materials[i] = Material.DeepslateTileStairs; - for (int i = 22959; i <= 23282; i++) - materials[i] = Material.DeepslateTileWall; - materials[22872] = Material.DeepslateTiles; - for (int i = 1964; i <= 1987; i++) - materials[i] = Material.DetectorRail; - materials[4272] = Material.DiamondBlock; - materials[4270] = Material.DiamondOre; - materials[4] = Material.Diorite; - for (int i = 13995; i <= 14000; i++) - materials[i] = Material.DioriteSlab; - for (int i = 13843; i <= 13922; i++) - materials[i] = Material.DioriteStairs; - for (int i = 17889; i <= 18212; i++) - materials[i] = Material.DioriteWall; - materials[10] = Material.Dirt; - materials[12357] = Material.DirtPath; - for (int i = 519; i <= 530; i++) - materials[i] = Material.Dispenser; - materials[7412] = Material.DragonEgg; - for (int i = 8923; i <= 8938; i++) - materials[i] = Material.DragonHead; - for (int i = 8939; i <= 8942; i++) - materials[i] = Material.DragonWallHead; - materials[12631] = Material.DriedKelpBlock; - materials[21911] = Material.DripstoneBlock; - for (int i = 9200; i <= 9211; i++) - materials[i] = Material.Dropper; - materials[7661] = Material.EmeraldBlock; - materials[7507] = Material.EmeraldOre; - materials[7385] = Material.EnchantingTable; - materials[12358] = Material.EndGateway; - materials[7402] = Material.EndPortal; - for (int i = 7403; i <= 7410; i++) - materials[i] = Material.EndPortalFrame; - for (int i = 12189; i <= 12194; i++) - materials[i] = Material.EndRod; - materials[7411] = Material.EndStone; - for (int i = 13953; i <= 13958; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 13203; i <= 13282; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 17565; i <= 17888; i++) - materials[i] = Material.EndStoneBrickWall; - materials[12349] = Material.EndStoneBricks; - for (int i = 7509; i <= 7516; i++) - materials[i] = Material.EnderChest; - materials[21163] = Material.ExposedCopper; - materials[21169] = Material.ExposedCutCopper; - for (int i = 21503; i <= 21508; i++) - materials[i] = Material.ExposedCutCopperSlab; - for (int i = 21331; i <= 21410; i++) - materials[i] = Material.ExposedCutCopperStairs; - for (int i = 4282; i <= 4289; i++) - materials[i] = Material.Farmland; - materials[2002] = Material.Fern; - for (int i = 2356; i <= 2867; i++) - materials[i] = Material.Fire; - for (int i = 12670; i <= 12671; i++) - materials[i] = Material.FireCoral; - materials[12652] = Material.FireCoralBlock; - for (int i = 12690; i <= 12691; i++) - materials[i] = Material.FireCoralFan; - for (int i = 12758; i <= 12765; i++) - materials[i] = Material.FireCoralWallFan; - materials[18278] = Material.FletchingTable; - materials[8563] = Material.FlowerPot; - materials[21968] = Material.FloweringAzalea; - for (int i = 485; i <= 512; i++) - materials[i] = Material.FloweringAzaleaLeaves; - materials[23715] = Material.Frogspawn; - for (int i = 12383; i <= 12386; i++) - materials[i] = Material.FrostedIce; - for (int i = 4290; i <= 4297; i++) - materials[i] = Material.Furnace; - materials[20126] = Material.GildedBlackstone; - materials[515] = Material.Glass; - for (int i = 6776; i <= 6807; i++) - materials[i] = Material.GlassPane; - for (int i = 6865; i <= 6992; i++) - materials[i] = Material.GlowLichen; - materials[5860] = Material.Glowstone; - materials[2087] = Material.GoldBlock; - materials[119] = Material.GoldOre; - materials[2] = Material.Granite; - for (int i = 13971; i <= 13976; i++) - materials[i] = Material.GraniteSlab; - for (int i = 13523; i <= 13602; i++) - materials[i] = Material.GraniteStairs; - for (int i = 15297; i <= 15620; i++) - materials[i] = Material.GraniteWall; - materials[2001] = Material.ShortGrass; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - materials[118] = Material.Gravel; - for (int i = 10726; i <= 10741; i++) - materials[i] = Material.GrayBanner; - for (int i = 1796; i <= 1811; i++) - materials[i] = Material.GrayBed; - for (int i = 20694; i <= 20709; i++) - materials[i] = Material.GrayCandle; - for (int i = 20854; i <= 20855; i++) - materials[i] = Material.GrayCandleCake; - materials[10590] = Material.GrayCarpet; - materials[12579] = Material.GrayConcrete; - materials[12595] = Material.GrayConcretePowder; - for (int i = 12536; i <= 12539; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 12454; i <= 12459; i++) - materials[i] = Material.GrayShulkerBox; - materials[5949] = Material.GrayStainedGlass; - for (int i = 9452; i <= 9483; i++) - materials[i] = Material.GrayStainedGlassPane; - materials[9219] = Material.GrayTerracotta; - for (int i = 10898; i <= 10901; i++) - materials[i] = Material.GrayWallBanner; - materials[2050] = Material.GrayWool; - for (int i = 10822; i <= 10837; i++) - materials[i] = Material.GreenBanner; - for (int i = 1892; i <= 1907; i++) - materials[i] = Material.GreenBed; - for (int i = 20790; i <= 20805; i++) - materials[i] = Material.GreenCandle; - for (int i = 20866; i <= 20867; i++) - materials[i] = Material.GreenCandleCake; - materials[10596] = Material.GreenCarpet; - materials[12585] = Material.GreenConcrete; - materials[12601] = Material.GreenConcretePowder; - for (int i = 12560; i <= 12563; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 12490; i <= 12495; i++) - materials[i] = Material.GreenShulkerBox; - materials[5955] = Material.GreenStainedGlass; - for (int i = 9644; i <= 9675; i++) - materials[i] = Material.GreenStainedGlassPane; - materials[9225] = Material.GreenTerracotta; - for (int i = 10922; i <= 10925; i++) - materials[i] = Material.GreenWallBanner; - materials[2056] = Material.GreenWool; - for (int i = 18279; i <= 18290; i++) - materials[i] = Material.Grindstone; - for (int i = 22043; i <= 22044; i++) - materials[i] = Material.HangingRoots; - for (int i = 10580; i <= 10582; i++) - materials[i] = Material.HayBlock; - for (int i = 9015; i <= 9030; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - materials[19286] = Material.HoneyBlock; - materials[19287] = Material.HoneycombBlock; - for (int i = 9081; i <= 9090; i++) - materials[i] = Material.Hopper; - for (int i = 12672; i <= 12673; i++) - materials[i] = Material.HornCoral; - materials[12653] = Material.HornCoralBlock; - for (int i = 12692; i <= 12693; i++) - materials[i] = Material.HornCoralFan; - for (int i = 12766; i <= 12773; i++) - materials[i] = Material.HornCoralWallFan; - materials[5776] = Material.Ice; - materials[6545] = Material.InfestedChiseledStoneBricks; - materials[6541] = Material.InfestedCobblestone; - materials[6544] = Material.InfestedCrackedStoneBricks; - for (int i = 23697; i <= 23699; i++) - materials[i] = Material.InfestedDeepslate; - materials[6543] = Material.InfestedMossyStoneBricks; - materials[6540] = Material.InfestedStone; - materials[6542] = Material.InfestedStoneBricks; - for (int i = 6738; i <= 6769; i++) - materials[i] = Material.IronBars; - materials[2088] = Material.IronBlock; - for (int i = 5648; i <= 5711; i++) - materials[i] = Material.IronDoor; - materials[121] = Material.IronOre; - for (int i = 10254; i <= 10317; i++) - materials[i] = Material.IronTrapdoor; - for (int i = 5867; i <= 5870; i++) - materials[i] = Material.JackOLantern; - for (int i = 19201; i <= 19212; i++) - materials[i] = Material.Jigsaw; - for (int i = 5811; i <= 5812; i++) - materials[i] = Material.Jukebox; - for (int i = 8679; i <= 8702; i++) - materials[i] = Material.JungleButton; - for (int i = 11805; i <= 11868; i++) - materials[i] = Material.JungleDoor; - for (int i = 11485; i <= 11516; i++) - materials[i] = Material.JungleFence; - for (int i = 11229; i <= 11260; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 5150; i <= 5213; i++) - materials[i] = Material.JungleHangingSign; - for (int i = 317; i <= 344; i++) - materials[i] = Material.JungleLeaves; - for (int i = 135; i <= 137; i++) - materials[i] = Material.JungleLog; - materials[18] = Material.JunglePlanks; - for (int i = 5718; i <= 5719; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 31; i <= 32; i++) - materials[i] = Material.JungleSapling; - for (int i = 4458; i <= 4489; i++) - materials[i] = Material.JungleSign; - for (int i = 11035; i <= 11040; i++) - materials[i] = Material.JungleSlab; - for (int i = 7822; i <= 7901; i++) - materials[i] = Material.JungleStairs; - for (int i = 6150; i <= 6213; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 5574; i <= 5581; i++) - materials[i] = Material.JungleWallHangingSign; - for (int i = 4798; i <= 4805; i++) - materials[i] = Material.JungleWallSign; - for (int i = 194; i <= 196; i++) - materials[i] = Material.JungleWood; - for (int i = 12604; i <= 12629; i++) - materials[i] = Material.Kelp; - materials[12630] = Material.KelpPlant; - for (int i = 4650; i <= 4657; i++) - materials[i] = Material.Ladder; - for (int i = 18344; i <= 18347; i++) - materials[i] = Material.Lantern; - materials[518] = Material.LapisBlock; - materials[516] = Material.LapisOre; - for (int i = 20886; i <= 20897; i++) - materials[i] = Material.LargeAmethystBud; - for (int i = 10612; i <= 10613; i++) - materials[i] = Material.LargeFern; - for (int i = 96; i <= 111; i++) - materials[i] = Material.Lava; - materials[7398] = Material.LavaCauldron; - for (int i = 18291; i <= 18306; i++) - materials[i] = Material.Lectern; - for (int i = 5622; i <= 5645; i++) - materials[i] = Material.Lever; - for (int i = 10222; i <= 10253; i++) - materials[i] = Material.Light; - for (int i = 10662; i <= 10677; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 1732; i <= 1747; i++) - materials[i] = Material.LightBlueBed; - for (int i = 20630; i <= 20645; i++) - materials[i] = Material.LightBlueCandle; - for (int i = 20846; i <= 20847; i++) - materials[i] = Material.LightBlueCandleCake; - materials[10586] = Material.LightBlueCarpet; - materials[12575] = Material.LightBlueConcrete; - materials[12591] = Material.LightBlueConcretePowder; - for (int i = 12520; i <= 12523; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 12430; i <= 12435; i++) - materials[i] = Material.LightBlueShulkerBox; - materials[5945] = Material.LightBlueStainedGlass; - for (int i = 9324; i <= 9355; i++) - materials[i] = Material.LightBlueStainedGlassPane; - materials[9215] = Material.LightBlueTerracotta; - for (int i = 10882; i <= 10885; i++) - materials[i] = Material.LightBlueWallBanner; - materials[2046] = Material.LightBlueWool; - for (int i = 10742; i <= 10757; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 1812; i <= 1827; i++) - materials[i] = Material.LightGrayBed; - for (int i = 20710; i <= 20725; i++) - materials[i] = Material.LightGrayCandle; - for (int i = 20856; i <= 20857; i++) - materials[i] = Material.LightGrayCandleCake; - materials[10591] = Material.LightGrayCarpet; - materials[12580] = Material.LightGrayConcrete; - materials[12596] = Material.LightGrayConcretePowder; - for (int i = 12540; i <= 12543; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 12460; i <= 12465; i++) - materials[i] = Material.LightGrayShulkerBox; - materials[5950] = Material.LightGrayStainedGlass; - for (int i = 9484; i <= 9515; i++) - materials[i] = Material.LightGrayStainedGlassPane; - materials[9220] = Material.LightGrayTerracotta; - for (int i = 10902; i <= 10905; i++) - materials[i] = Material.LightGrayWallBanner; - materials[2051] = Material.LightGrayWool; - for (int i = 8999; i <= 9014; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 21867; i <= 21890; i++) - materials[i] = Material.LightningRod; - for (int i = 10604; i <= 10605; i++) - materials[i] = Material.Lilac; - materials[2084] = Material.LilyOfTheValley; - materials[7267] = Material.LilyPad; - for (int i = 10694; i <= 10709; i++) - materials[i] = Material.LimeBanner; - for (int i = 1764; i <= 1779; i++) - materials[i] = Material.LimeBed; - for (int i = 20662; i <= 20677; i++) - materials[i] = Material.LimeCandle; - for (int i = 20850; i <= 20851; i++) - materials[i] = Material.LimeCandleCake; - materials[10588] = Material.LimeCarpet; - materials[12577] = Material.LimeConcrete; - materials[12593] = Material.LimeConcretePowder; - for (int i = 12528; i <= 12531; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 12442; i <= 12447; i++) - materials[i] = Material.LimeShulkerBox; - materials[5947] = Material.LimeStainedGlass; - for (int i = 9388; i <= 9419; i++) - materials[i] = Material.LimeStainedGlassPane; - materials[9217] = Material.LimeTerracotta; - for (int i = 10890; i <= 10893; i++) - materials[i] = Material.LimeWallBanner; - materials[2048] = Material.LimeWool; - materials[19300] = Material.Lodestone; - for (int i = 18245; i <= 18248; i++) - materials[i] = Material.Loom; - for (int i = 10646; i <= 10661; i++) - materials[i] = Material.MagentaBanner; - for (int i = 1716; i <= 1731; i++) - materials[i] = Material.MagentaBed; - for (int i = 20614; i <= 20629; i++) - materials[i] = Material.MagentaCandle; - for (int i = 20844; i <= 20845; i++) - materials[i] = Material.MagentaCandleCake; - materials[10585] = Material.MagentaCarpet; - materials[12574] = Material.MagentaConcrete; - materials[12590] = Material.MagentaConcretePowder; - for (int i = 12516; i <= 12519; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 12424; i <= 12429; i++) - materials[i] = Material.MagentaShulkerBox; - materials[5944] = Material.MagentaStainedGlass; - for (int i = 9292; i <= 9323; i++) - materials[i] = Material.MagentaStainedGlassPane; - materials[9214] = Material.MagentaTerracotta; - for (int i = 10878; i <= 10881; i++) - materials[i] = Material.MagentaWallBanner; - materials[2045] = Material.MagentaWool; - materials[12387] = Material.MagmaBlock; - for (int i = 8775; i <= 8798; i++) - materials[i] = Material.MangroveButton; - for (int i = 12061; i <= 12124; i++) - materials[i] = Material.MangroveDoor; - for (int i = 11613; i <= 11644; i++) - materials[i] = Material.MangroveFence; - for (int i = 11357; i <= 11388; i++) - materials[i] = Material.MangroveFenceGate; - for (int i = 5406; i <= 5469; i++) - materials[i] = Material.MangroveHangingSign; - for (int i = 429; i <= 456; i++) - materials[i] = Material.MangroveLeaves; - for (int i = 147; i <= 149; i++) - materials[i] = Material.MangroveLog; - materials[22] = Material.MangrovePlanks; - for (int i = 5726; i <= 5727; i++) - materials[i] = Material.MangrovePressurePlate; - for (int i = 39; i <= 78; i++) - materials[i] = Material.MangrovePropagule; - for (int i = 150; i <= 151; i++) - materials[i] = Material.MangroveRoots; - for (int i = 4522; i <= 4553; i++) - materials[i] = Material.MangroveSign; - for (int i = 11059; i <= 11064; i++) - materials[i] = Material.MangroveSlab; - for (int i = 9980; i <= 10059; i++) - materials[i] = Material.MangroveStairs; - for (int i = 6406; i <= 6469; i++) - materials[i] = Material.MangroveTrapdoor; - for (int i = 5590; i <= 5597; i++) - materials[i] = Material.MangroveWallHangingSign; - for (int i = 4814; i <= 4821; i++) - materials[i] = Material.MangroveWallSign; - for (int i = 206; i <= 208; i++) - materials[i] = Material.MangroveWood; - for (int i = 20898; i <= 20909; i++) - materials[i] = Material.MediumAmethystBud; - materials[6808] = Material.Melon; - for (int i = 6825; i <= 6832; i++) - materials[i] = Material.MelonStem; - materials[21986] = Material.MossBlock; - materials[21969] = Material.MossCarpet; - materials[2349] = Material.MossyCobblestone; - for (int i = 13947; i <= 13952; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 13123; i <= 13202; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 8239; i <= 8562; i++) - materials[i] = Material.MossyCobblestoneWall; - for (int i = 13935; i <= 13940; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 12963; i <= 13042; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 14973; i <= 15296; i++) - materials[i] = Material.MossyStoneBrickWall; - materials[6535] = Material.MossyStoneBricks; - for (int i = 2059; i <= 2070; i++) - materials[i] = Material.MovingPiston; - materials[22046] = Material.Mud; - for (int i = 11125; i <= 11130; i++) - materials[i] = Material.MudBrickSlab; - for (int i = 7185; i <= 7264; i++) - materials[i] = Material.MudBrickStairs; - for (int i = 15945; i <= 16268; i++) - materials[i] = Material.MudBrickWall; - materials[6539] = Material.MudBricks; - for (int i = 152; i <= 154; i++) - materials[i] = Material.MuddyMangroveRoots; - for (int i = 6674; i <= 6737; i++) - materials[i] = Material.MushroomStem; - for (int i = 7265; i <= 7266; i++) - materials[i] = Material.Mycelium; - for (int i = 7269; i <= 7300; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 11131; i <= 11136; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 7301; i <= 7380; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 16269; i <= 16592; i++) - materials[i] = Material.NetherBrickWall; - materials[7268] = Material.NetherBricks; - materials[125] = Material.NetherGoldOre; - for (int i = 5861; i <= 5862; i++) - materials[i] = Material.NetherPortal; - materials[9080] = Material.NetherQuartzOre; - materials[18436] = Material.NetherSprouts; - for (int i = 7381; i <= 7384; i++) - materials[i] = Material.NetherWart; - materials[12388] = Material.NetherWartBlock; - materials[19288] = Material.NetheriteBlock; - materials[5846] = Material.Netherrack; - for (int i = 534; i <= 1683; i++) - materials[i] = Material.NoteBlock; - for (int i = 8607; i <= 8630; i++) - materials[i] = Material.OakButton; - for (int i = 4586; i <= 4649; i++) - materials[i] = Material.OakDoor; - for (int i = 5813; i <= 5844; i++) - materials[i] = Material.OakFence; - for (int i = 6993; i <= 7024; i++) - materials[i] = Material.OakFenceGate; - for (int i = 4830; i <= 4893; i++) - materials[i] = Material.OakHangingSign; - for (int i = 233; i <= 260; i++) - materials[i] = Material.OakLeaves; - for (int i = 126; i <= 128; i++) - materials[i] = Material.OakLog; - materials[15] = Material.OakPlanks; - for (int i = 5712; i <= 5713; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 25; i <= 26; i++) - materials[i] = Material.OakSapling; - for (int i = 4298; i <= 4329; i++) - materials[i] = Material.OakSign; - for (int i = 11017; i <= 11022; i++) - materials[i] = Material.OakSlab; - for (int i = 2870; i <= 2949; i++) - materials[i] = Material.OakStairs; - for (int i = 5958; i <= 6021; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 5534; i <= 5541; i++) - materials[i] = Material.OakWallHangingSign; - for (int i = 4758; i <= 4765; i++) - materials[i] = Material.OakWallSign; - for (int i = 185; i <= 187; i++) - materials[i] = Material.OakWood; - for (int i = 12394; i <= 12405; i++) - materials[i] = Material.Observer; - materials[2350] = Material.Obsidian; - for (int i = 23706; i <= 23708; i++) - materials[i] = Material.OchreFroglight; - for (int i = 10630; i <= 10645; i++) - materials[i] = Material.OrangeBanner; - for (int i = 1700; i <= 1715; i++) - materials[i] = Material.OrangeBed; - for (int i = 20598; i <= 20613; i++) - materials[i] = Material.OrangeCandle; - for (int i = 20842; i <= 20843; i++) - materials[i] = Material.OrangeCandleCake; - materials[10584] = Material.OrangeCarpet; - materials[12573] = Material.OrangeConcrete; - materials[12589] = Material.OrangeConcretePowder; - for (int i = 12512; i <= 12515; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 12418; i <= 12423; i++) - materials[i] = Material.OrangeShulkerBox; - materials[5943] = Material.OrangeStainedGlass; - for (int i = 9260; i <= 9291; i++) - materials[i] = Material.OrangeStainedGlassPane; - materials[9213] = Material.OrangeTerracotta; - materials[2078] = Material.OrangeTulip; - for (int i = 10874; i <= 10877; i++) - materials[i] = Material.OrangeWallBanner; - materials[2044] = Material.OrangeWool; - materials[2081] = Material.OxeyeDaisy; - materials[21161] = Material.OxidizedCopper; - materials[21167] = Material.OxidizedCutCopper; - for (int i = 21491; i <= 21496; i++) - materials[i] = Material.OxidizedCutCopperSlab; - for (int i = 21171; i <= 21250; i++) - materials[i] = Material.OxidizedCutCopperStairs; - materials[10601] = Material.PackedIce; - materials[6538] = Material.PackedMud; - for (int i = 23712; i <= 23714; i++) - materials[i] = Material.PearlescentFroglight; - for (int i = 10608; i <= 10609; i++) - materials[i] = Material.Peony; - for (int i = 11101; i <= 11106; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 8943; i <= 8958; i++) - materials[i] = Material.PiglinHead; - for (int i = 8959; i <= 8962; i++) - materials[i] = Material.PiglinWallHead; - for (int i = 10710; i <= 10725; i++) - materials[i] = Material.PinkBanner; - for (int i = 1780; i <= 1795; i++) - materials[i] = Material.PinkBed; - for (int i = 20678; i <= 20693; i++) - materials[i] = Material.PinkCandle; - for (int i = 20852; i <= 20853; i++) - materials[i] = Material.PinkCandleCake; - materials[10589] = Material.PinkCarpet; - materials[12578] = Material.PinkConcrete; - materials[12594] = Material.PinkConcretePowder; - for (int i = 12532; i <= 12535; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 21970; i <= 21985; i++) - materials[i] = Material.PinkPetals; - for (int i = 12448; i <= 12453; i++) - materials[i] = Material.PinkShulkerBox; - materials[5948] = Material.PinkStainedGlass; - for (int i = 9420; i <= 9451; i++) - materials[i] = Material.PinkStainedGlassPane; - materials[9218] = Material.PinkTerracotta; - materials[2080] = Material.PinkTulip; - for (int i = 10894; i <= 10897; i++) - materials[i] = Material.PinkWallBanner; - materials[2049] = Material.PinkWool; - for (int i = 2007; i <= 2018; i++) - materials[i] = Material.Piston; - for (int i = 2019; i <= 2042; i++) - materials[i] = Material.PistonHead; - for (int i = 8883; i <= 8898; i++) - materials[i] = Material.PlayerHead; - for (int i = 8899; i <= 8902; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - for (int i = 21891; i <= 21910; i++) - materials[i] = Material.PointedDripstone; - materials[7] = Material.PolishedAndesite; - for (int i = 13989; i <= 13994; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 13763; i <= 13842; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 5852; i <= 5854; i++) - materials[i] = Material.PolishedBasalt; - materials[19712] = Material.PolishedBlackstone; - for (int i = 19716; i <= 19721; i++) - materials[i] = Material.PolishedBlackstoneBrickSlab; - for (int i = 19722; i <= 19801; i++) - materials[i] = Material.PolishedBlackstoneBrickStairs; - for (int i = 19802; i <= 20125; i++) - materials[i] = Material.PolishedBlackstoneBrickWall; - materials[19713] = Material.PolishedBlackstoneBricks; - for (int i = 20215; i <= 20238; i++) - materials[i] = Material.PolishedBlackstoneButton; - for (int i = 20213; i <= 20214; i++) - materials[i] = Material.PolishedBlackstonePressurePlate; - for (int i = 20207; i <= 20212; i++) - materials[i] = Material.PolishedBlackstoneSlab; - for (int i = 20127; i <= 20206; i++) - materials[i] = Material.PolishedBlackstoneStairs; - for (int i = 20239; i <= 20562; i++) - materials[i] = Material.PolishedBlackstoneWall; - materials[22461] = Material.PolishedDeepslate; - for (int i = 22542; i <= 22547; i++) - materials[i] = Material.PolishedDeepslateSlab; - for (int i = 22462; i <= 22541; i++) - materials[i] = Material.PolishedDeepslateStairs; - for (int i = 22548; i <= 22871; i++) - materials[i] = Material.PolishedDeepslateWall; - materials[5] = Material.PolishedDiorite; - for (int i = 13941; i <= 13946; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 13043; i <= 13122; i++) - materials[i] = Material.PolishedDioriteStairs; - materials[3] = Material.PolishedGranite; - for (int i = 13923; i <= 13928; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 12803; i <= 12882; i++) - materials[i] = Material.PolishedGraniteStairs; - materials[2073] = Material.Poppy; - for (int i = 8599; i <= 8606; i++) - materials[i] = Material.Potatoes; - materials[8569] = Material.PottedAcaciaSapling; - materials[8577] = Material.PottedAllium; - materials[23704] = Material.PottedAzaleaBush; - materials[8578] = Material.PottedAzureBluet; - materials[12798] = Material.PottedBamboo; - materials[8567] = Material.PottedBirchSapling; - materials[8576] = Material.PottedBlueOrchid; - materials[8588] = Material.PottedBrownMushroom; - materials[8590] = Material.PottedCactus; - materials[8570] = Material.PottedCherrySapling; - materials[8584] = Material.PottedCornflower; - materials[19296] = Material.PottedCrimsonFungus; - materials[19298] = Material.PottedCrimsonRoots; - materials[8574] = Material.PottedDandelion; - materials[8571] = Material.PottedDarkOakSapling; - materials[8589] = Material.PottedDeadBush; - materials[8573] = Material.PottedFern; - materials[23705] = Material.PottedFloweringAzaleaBush; - materials[8568] = Material.PottedJungleSapling; - materials[8585] = Material.PottedLilyOfTheValley; - materials[8572] = Material.PottedMangrovePropagule; - materials[8565] = Material.PottedOakSapling; - materials[8580] = Material.PottedOrangeTulip; - materials[8583] = Material.PottedOxeyeDaisy; - materials[8582] = Material.PottedPinkTulip; - materials[8575] = Material.PottedPoppy; - materials[8587] = Material.PottedRedMushroom; - materials[8579] = Material.PottedRedTulip; - materials[8566] = Material.PottedSpruceSapling; - materials[8564] = Material.PottedTorchflower; - materials[19297] = Material.PottedWarpedFungus; - materials[19299] = Material.PottedWarpedRoots; - materials[8581] = Material.PottedWhiteTulip; - materials[8586] = Material.PottedWitherRose; - materials[20925] = Material.PowderSnow; - for (int i = 7399; i <= 7401; i++) - materials[i] = Material.PowderSnowCauldron; - for (int i = 1940; i <= 1963; i++) - materials[i] = Material.PoweredRail; - materials[10318] = Material.Prismarine; - for (int i = 10567; i <= 10572; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 10401; i <= 10480; i++) - materials[i] = Material.PrismarineBrickStairs; - materials[10319] = Material.PrismarineBricks; - for (int i = 10561; i <= 10566; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 10321; i <= 10400; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 14325; i <= 14648; i++) - materials[i] = Material.PrismarineWall; - materials[5845] = Material.Pumpkin; - for (int i = 6817; i <= 6824; i++) - materials[i] = Material.PumpkinStem; - for (int i = 10774; i <= 10789; i++) - materials[i] = Material.PurpleBanner; - for (int i = 1844; i <= 1859; i++) - materials[i] = Material.PurpleBed; - for (int i = 20742; i <= 20757; i++) - materials[i] = Material.PurpleCandle; - for (int i = 20860; i <= 20861; i++) - materials[i] = Material.PurpleCandleCake; - materials[10593] = Material.PurpleCarpet; - materials[12582] = Material.PurpleConcrete; - materials[12598] = Material.PurpleConcretePowder; - for (int i = 12548; i <= 12551; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 12472; i <= 12477; i++) - materials[i] = Material.PurpleShulkerBox; - materials[5952] = Material.PurpleStainedGlass; - for (int i = 9548; i <= 9579; i++) - materials[i] = Material.PurpleStainedGlassPane; - materials[9222] = Material.PurpleTerracotta; - for (int i = 10910; i <= 10913; i++) - materials[i] = Material.PurpleWallBanner; - materials[2053] = Material.PurpleWool; - materials[12265] = Material.PurpurBlock; - for (int i = 12266; i <= 12268; i++) - materials[i] = Material.PurpurPillar; - for (int i = 11155; i <= 11160; i++) - materials[i] = Material.PurpurSlab; - for (int i = 12269; i <= 12348; i++) - materials[i] = Material.PurpurStairs; - materials[9091] = Material.QuartzBlock; - materials[20565] = Material.QuartzBricks; - for (int i = 9093; i <= 9095; i++) - materials[i] = Material.QuartzPillar; - for (int i = 11137; i <= 11142; i++) - materials[i] = Material.QuartzSlab; - for (int i = 9096; i <= 9175; i++) - materials[i] = Material.QuartzStairs; - for (int i = 4658; i <= 4677; i++) - materials[i] = Material.Rail; - materials[23702] = Material.RawCopperBlock; - materials[23703] = Material.RawGoldBlock; - materials[23701] = Material.RawIronBlock; - for (int i = 10838; i <= 10853; i++) - materials[i] = Material.RedBanner; - for (int i = 1908; i <= 1923; i++) - materials[i] = Material.RedBed; - for (int i = 20806; i <= 20821; i++) - materials[i] = Material.RedCandle; - for (int i = 20868; i <= 20869; i++) - materials[i] = Material.RedCandleCake; - materials[10597] = Material.RedCarpet; - materials[12586] = Material.RedConcrete; - materials[12602] = Material.RedConcretePowder; - for (int i = 12564; i <= 12567; i++) - materials[i] = Material.RedGlazedTerracotta; - materials[2086] = Material.RedMushroom; - for (int i = 6610; i <= 6673; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 13983; i <= 13988; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 13683; i <= 13762; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 16917; i <= 17240; i++) - materials[i] = Material.RedNetherBrickWall; - materials[12389] = Material.RedNetherBricks; - materials[117] = Material.RedSand; - materials[10934] = Material.RedSandstone; - for (int i = 11143; i <= 11148; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 10937; i <= 11016; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 14649; i <= 14972; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 12496; i <= 12501; i++) - materials[i] = Material.RedShulkerBox; - materials[5956] = Material.RedStainedGlass; - for (int i = 9676; i <= 9707; i++) - materials[i] = Material.RedStainedGlassPane; - materials[9226] = Material.RedTerracotta; - materials[2077] = Material.RedTulip; - for (int i = 10926; i <= 10929; i++) - materials[i] = Material.RedWallBanner; - materials[2057] = Material.RedWool; - materials[9079] = Material.RedstoneBlock; - for (int i = 7413; i <= 7414; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 5730; i <= 5731; i++) - materials[i] = Material.RedstoneOre; - for (int i = 5734; i <= 5735; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 5736; i <= 5743; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 2974; i <= 4269; i++) - materials[i] = Material.RedstoneWire; - materials[23716] = Material.ReinforcedDeepslate; - for (int i = 5878; i <= 5941; i++) - materials[i] = Material.Repeater; - for (int i = 12359; i <= 12370; i++) - materials[i] = Material.RepeatingCommandBlock; - for (int i = 19291; i <= 19295; i++) - materials[i] = Material.RespawnAnchor; - materials[22045] = Material.RootedDirt; - for (int i = 10606; i <= 10607; i++) - materials[i] = Material.RoseBush; - materials[112] = Material.Sand; - materials[531] = Material.Sandstone; - for (int i = 11089; i <= 11094; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 7427; i <= 7506; i++) - materials[i] = Material.SandstoneStairs; - for (int i = 17241; i <= 17564; i++) - materials[i] = Material.SandstoneWall; - for (int i = 18213; i <= 18244; i++) - materials[i] = Material.Scaffolding; - materials[21022] = Material.Sculk; - for (int i = 21151; i <= 21152; i++) - materials[i] = Material.SculkCatalyst; - for (int i = 20926; i <= 21021; i++) - materials[i] = Material.SculkSensor; - for (int i = 21153; i <= 21160; i++) - materials[i] = Material.SculkShrieker; - for (int i = 21023; i <= 21150; i++) - materials[i] = Material.SculkVein; - materials[10579] = Material.SeaLantern; - for (int i = 12774; i <= 12781; i++) - materials[i] = Material.SeaPickle; - materials[2004] = Material.Seagrass; - materials[18451] = Material.Shroomlight; - for (int i = 12406; i <= 12411; i++) - materials[i] = Material.ShulkerBox; - for (int i = 8823; i <= 8838; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 8839; i <= 8842; i++) - materials[i] = Material.SkeletonWallSkull; - materials[10220] = Material.SlimeBlock; - for (int i = 20910; i <= 20921; i++) - materials[i] = Material.SmallAmethystBud; - for (int i = 22027; i <= 22042; i++) - materials[i] = Material.SmallDripleaf; - materials[18307] = Material.SmithingTable; - for (int i = 18261; i <= 18268; i++) - materials[i] = Material.Smoker; - materials[23700] = Material.SmoothBasalt; - materials[11163] = Material.SmoothQuartz; - for (int i = 13965; i <= 13970; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 13443; i <= 13522; i++) - materials[i] = Material.SmoothQuartzStairs; - materials[11164] = Material.SmoothRedSandstone; - for (int i = 13929; i <= 13934; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 12883; i <= 12962; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - materials[11162] = Material.SmoothSandstone; - for (int i = 13959; i <= 13964; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 13363; i <= 13442; i++) - materials[i] = Material.SmoothSandstoneStairs; - materials[11161] = Material.SmoothStone; - for (int i = 11083; i <= 11088; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 5768; i <= 5775; i++) - materials[i] = Material.Snow; - materials[5777] = Material.SnowBlock; - for (int i = 18384; i <= 18415; i++) - materials[i] = Material.SoulCampfire; - materials[2868] = Material.SoulFire; - for (int i = 18348; i <= 18351; i++) - materials[i] = Material.SoulLantern; - materials[5847] = Material.SoulSand; - materials[5848] = Material.SoulSoil; - materials[5855] = Material.SoulTorch; - for (int i = 5856; i <= 5859; i++) - materials[i] = Material.SoulWallTorch; - materials[2869] = Material.Spawner; - materials[513] = Material.Sponge; - materials[21966] = Material.SporeBlossom; - for (int i = 8631; i <= 8654; i++) - materials[i] = Material.SpruceButton; - for (int i = 11677; i <= 11740; i++) - materials[i] = Material.SpruceDoor; - for (int i = 11421; i <= 11452; i++) - materials[i] = Material.SpruceFence; - for (int i = 11165; i <= 11196; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 4894; i <= 4957; i++) - materials[i] = Material.SpruceHangingSign; - for (int i = 261; i <= 288; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 129; i <= 131; i++) - materials[i] = Material.SpruceLog; - materials[16] = Material.SprucePlanks; - for (int i = 5714; i <= 5715; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 27; i <= 28; i++) - materials[i] = Material.SpruceSapling; - for (int i = 4330; i <= 4361; i++) - materials[i] = Material.SpruceSign; - for (int i = 11023; i <= 11028; i++) - materials[i] = Material.SpruceSlab; - for (int i = 7662; i <= 7741; i++) - materials[i] = Material.SpruceStairs; - for (int i = 6022; i <= 6085; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 5542; i <= 5549; i++) - materials[i] = Material.SpruceWallHangingSign; - for (int i = 4766; i <= 4773; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 188; i <= 190; i++) - materials[i] = Material.SpruceWood; - for (int i = 1988; i <= 1999; i++) - materials[i] = Material.StickyPiston; - materials[1] = Material.Stone; - for (int i = 11119; i <= 11124; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 7105; i <= 7184; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 15621; i <= 15944; i++) - materials[i] = Material.StoneBrickWall; - materials[6534] = Material.StoneBricks; - for (int i = 5744; i <= 5767; i++) - materials[i] = Material.StoneButton; - for (int i = 5646; i <= 5647; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 11077; i <= 11082; i++) - materials[i] = Material.StoneSlab; - for (int i = 13283; i <= 13362; i++) - materials[i] = Material.StoneStairs; - for (int i = 18308; i <= 18311; i++) - materials[i] = Material.Stonecutter; - for (int i = 167; i <= 169; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 221; i <= 223; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 182; i <= 184; i++) - materials[i] = Material.StrippedBambooBlock; - for (int i = 161; i <= 163; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 215; i <= 217; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 170; i <= 172; i++) - materials[i] = Material.StrippedCherryLog; - for (int i = 224; i <= 226; i++) - materials[i] = Material.StrippedCherryWood; - for (int i = 18446; i <= 18448; i++) - materials[i] = Material.StrippedCrimsonHyphae; - for (int i = 18440; i <= 18442; i++) - materials[i] = Material.StrippedCrimsonStem; - for (int i = 173; i <= 175; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 227; i <= 229; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 164; i <= 166; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 218; i <= 220; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 179; i <= 181; i++) - materials[i] = Material.StrippedMangroveLog; - for (int i = 230; i <= 232; i++) - materials[i] = Material.StrippedMangroveWood; - for (int i = 176; i <= 178; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 209; i <= 211; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 158; i <= 160; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 212; i <= 214; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 18429; i <= 18431; i++) - materials[i] = Material.StrippedWarpedHyphae; - for (int i = 18423; i <= 18425; i++) - materials[i] = Material.StrippedWarpedStem; - for (int i = 19197; i <= 19200; i++) - materials[i] = Material.StructureBlock; - materials[12393] = Material.StructureVoid; - for (int i = 5795; i <= 5810; i++) - materials[i] = Material.SugarCane; - for (int i = 10602; i <= 10603; i++) - materials[i] = Material.Sunflower; - for (int i = 113; i <= 116; i++) - materials[i] = Material.SuspiciousSand; - for (int i = 18416; i <= 18419; i++) - materials[i] = Material.SweetBerryBush; - for (int i = 10610; i <= 10611; i++) - materials[i] = Material.TallGrass; - for (int i = 2005; i <= 2006; i++) - materials[i] = Material.TallSeagrass; - for (int i = 19222; i <= 19237; i++) - materials[i] = Material.Target; - materials[10599] = Material.Terracotta; - materials[20924] = Material.TintedGlass; - for (int i = 2090; i <= 2091; i++) - materials[i] = Material.Tnt; - materials[2351] = Material.Torch; - materials[2072] = Material.Torchflower; - for (int i = 12350; i <= 12352; i++) - materials[i] = Material.TorchflowerCrop; - for (int i = 8975; i <= 8998; i++) - materials[i] = Material.TrappedChest; - for (int i = 7533; i <= 7660; i++) - materials[i] = Material.Tripwire; - for (int i = 7517; i <= 7532; i++) - materials[i] = Material.TripwireHook; - for (int i = 12664; i <= 12665; i++) - materials[i] = Material.TubeCoral; - materials[12649] = Material.TubeCoralBlock; - for (int i = 12684; i <= 12685; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 12734; i <= 12741; i++) - materials[i] = Material.TubeCoralWallFan; - materials[20922] = Material.Tuff; - for (int i = 12632; i <= 12643; i++) - materials[i] = Material.TurtleEgg; - for (int i = 18479; i <= 18504; i++) - materials[i] = Material.TwistingVines; - materials[18505] = Material.TwistingVinesPlant; - for (int i = 23709; i <= 23711; i++) - materials[i] = Material.VerdantFroglight; - for (int i = 6833; i <= 6864; i++) - materials[i] = Material.Vine; - materials[12799] = Material.VoidAir; - for (int i = 2352; i <= 2355; i++) - materials[i] = Material.WallTorch; - for (int i = 18965; i <= 18988; i++) - materials[i] = Material.WarpedButton; - for (int i = 19053; i <= 19116; i++) - materials[i] = Material.WarpedDoor; - for (int i = 18557; i <= 18588; i++) - materials[i] = Material.WarpedFence; - for (int i = 18749; i <= 18780; i++) - materials[i] = Material.WarpedFenceGate; - materials[18433] = Material.WarpedFungus; - for (int i = 5342; i <= 5405; i++) - materials[i] = Material.WarpedHangingSign; - for (int i = 18426; i <= 18428; i++) - materials[i] = Material.WarpedHyphae; - materials[18432] = Material.WarpedNylium; - materials[18508] = Material.WarpedPlanks; - for (int i = 18523; i <= 18524; i++) - materials[i] = Material.WarpedPressurePlate; - materials[18435] = Material.WarpedRoots; - for (int i = 19149; i <= 19180; i++) - materials[i] = Material.WarpedSign; - for (int i = 18515; i <= 18520; i++) - materials[i] = Material.WarpedSlab; - for (int i = 18861; i <= 18940; i++) - materials[i] = Material.WarpedStairs; - for (int i = 18420; i <= 18422; i++) - materials[i] = Material.WarpedStem; - for (int i = 18653; i <= 18716; i++) - materials[i] = Material.WarpedTrapdoor; - for (int i = 5606; i <= 5613; i++) - materials[i] = Material.WarpedWallHangingSign; - for (int i = 19189; i <= 19196; i++) - materials[i] = Material.WarpedWallSign; - materials[18434] = Material.WarpedWartBlock; - for (int i = 80; i <= 95; i++) - materials[i] = Material.Water; - for (int i = 7395; i <= 7397; i++) - materials[i] = Material.WaterCauldron; - materials[21515] = Material.WaxedCopperBlock; - materials[21522] = Material.WaxedCutCopper; - for (int i = 21861; i <= 21866; i++) - materials[i] = Material.WaxedCutCopperSlab; - for (int i = 21763; i <= 21842; i++) - materials[i] = Material.WaxedCutCopperStairs; - materials[21517] = Material.WaxedExposedCopper; - materials[21521] = Material.WaxedExposedCutCopper; - for (int i = 21855; i <= 21860; i++) - materials[i] = Material.WaxedExposedCutCopperSlab; - for (int i = 21683; i <= 21762; i++) - materials[i] = Material.WaxedExposedCutCopperStairs; - materials[21518] = Material.WaxedOxidizedCopper; - materials[21519] = Material.WaxedOxidizedCutCopper; - for (int i = 21843; i <= 21848; i++) - materials[i] = Material.WaxedOxidizedCutCopperSlab; - for (int i = 21523; i <= 21602; i++) - materials[i] = Material.WaxedOxidizedCutCopperStairs; - materials[21516] = Material.WaxedWeatheredCopper; - materials[21520] = Material.WaxedWeatheredCutCopper; - for (int i = 21849; i <= 21854; i++) - materials[i] = Material.WaxedWeatheredCutCopperSlab; - for (int i = 21603; i <= 21682; i++) - materials[i] = Material.WaxedWeatheredCutCopperStairs; - materials[21162] = Material.WeatheredCopper; - materials[21168] = Material.WeatheredCutCopper; - for (int i = 21497; i <= 21502; i++) - materials[i] = Material.WeatheredCutCopperSlab; - for (int i = 21251; i <= 21330; i++) - materials[i] = Material.WeatheredCutCopperStairs; - for (int i = 18452; i <= 18477; i++) - materials[i] = Material.WeepingVines; - materials[18478] = Material.WeepingVinesPlant; - materials[514] = Material.WetSponge; - for (int i = 4274; i <= 4281; i++) - materials[i] = Material.Wheat; - for (int i = 10614; i <= 10629; i++) - materials[i] = Material.WhiteBanner; - for (int i = 1684; i <= 1699; i++) - materials[i] = Material.WhiteBed; - for (int i = 20582; i <= 20597; i++) - materials[i] = Material.WhiteCandle; - for (int i = 20840; i <= 20841; i++) - materials[i] = Material.WhiteCandleCake; - materials[10583] = Material.WhiteCarpet; - materials[12572] = Material.WhiteConcrete; - materials[12588] = Material.WhiteConcretePowder; - for (int i = 12508; i <= 12511; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 12412; i <= 12417; i++) - materials[i] = Material.WhiteShulkerBox; - materials[5942] = Material.WhiteStainedGlass; - for (int i = 9228; i <= 9259; i++) - materials[i] = Material.WhiteStainedGlassPane; - materials[9212] = Material.WhiteTerracotta; - materials[2079] = Material.WhiteTulip; - for (int i = 10870; i <= 10873; i++) - materials[i] = Material.WhiteWallBanner; - materials[2043] = Material.WhiteWool; - materials[2083] = Material.WitherRose; - for (int i = 8843; i <= 8858; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 8859; i <= 8862; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 10678; i <= 10693; i++) - materials[i] = Material.YellowBanner; - for (int i = 1748; i <= 1763; i++) - materials[i] = Material.YellowBed; - for (int i = 20646; i <= 20661; i++) - materials[i] = Material.YellowCandle; - for (int i = 20848; i <= 20849; i++) - materials[i] = Material.YellowCandleCake; - materials[10587] = Material.YellowCarpet; - materials[12576] = Material.YellowConcrete; - materials[12592] = Material.YellowConcretePowder; - for (int i = 12524; i <= 12527; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 12436; i <= 12441; i++) - materials[i] = Material.YellowShulkerBox; - materials[5946] = Material.YellowStainedGlass; - for (int i = 9356; i <= 9387; i++) - materials[i] = Material.YellowStainedGlassPane; - materials[9216] = Material.YellowTerracotta; - for (int i = 10886; i <= 10889; i++) - materials[i] = Material.YellowWallBanner; - materials[2047] = Material.YellowWool; - for (int i = 8863; i <= 8878; i++) - materials[i] = Material.ZombieHead; - for (int i = 8879; i <= 8882; i++) - materials[i] = Material.ZombieWallHead; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(25, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(27, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(29, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(31, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(33, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(35, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(37, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(39, 40, - [ - new("age", ["0", "1", "2", "3", "4"], 8), - new("hanging", ["true", "false"], 4), - new("stage", ["0", "1"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(80, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(96, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(113, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(126, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(129, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(132, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(135, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(138, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(141, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(144, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(147, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(150, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(152, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(155, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(158, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(161, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(164, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(167, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(170, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(173, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(176, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(179, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(182, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(185, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(188, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(191, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(194, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(197, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(200, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(203, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(206, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(209, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(212, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(215, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(218, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(221, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(224, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(227, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(230, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(233, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(261, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(289, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(317, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(345, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(373, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(401, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(429, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(457, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(485, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(519, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(534, 1150, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling", "zombie", "skeleton", "creeper", "dragon", "wither_skeleton", "piglin", "custom_head"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1684, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1700, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1716, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1732, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1748, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1764, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1780, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1796, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1812, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1828, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1844, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1860, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1876, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1892, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1908, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1924, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1940, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(1964, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(1988, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2005, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(2007, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2019, 24, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2) - ]), - new(2059, 12, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 2) - ]), - new(2090, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(2093, 256, - [ - new("facing", ["north", "south", "west", "east"], 64), - new("slot_0_occupied", ["true", "false"], 32), - new("slot_1_occupied", ["true", "false"], 16), - new("slot_2_occupied", ["true", "false"], 8), - new("slot_3_occupied", ["true", "false"], 4), - new("slot_4_occupied", ["true", "false"], 2), - new("slot_5_occupied", ["true", "false"], 1) - ]), - new(2352, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(2356, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(2870, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2950, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(2974, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(4274, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4282, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4290, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(4298, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4330, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4362, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4394, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4426, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4458, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4490, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4522, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4554, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4586, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4650, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4658, 20, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4678, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4758, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4766, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4774, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4782, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4790, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4798, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4806, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4814, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4822, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4830, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4894, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4958, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5022, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5086, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5150, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5214, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5278, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5342, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5406, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5470, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5534, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5542, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5550, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5558, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5566, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5574, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5582, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5590, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5598, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5606, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5614, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5622, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5646, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5648, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5712, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5714, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5716, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5718, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5720, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5722, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5724, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5726, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5728, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5730, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5732, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5734, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5736, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(5744, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5768, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(5778, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5795, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5811, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(5813, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5849, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(5852, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(5856, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5861, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(5863, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5867, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5871, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(5878, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5958, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6022, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6086, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6150, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6214, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6278, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6342, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6406, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6470, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6546, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6610, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6674, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6738, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6770, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6776, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6809, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6813, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6817, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(6825, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(6833, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6865, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6993, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7025, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7105, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7185, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7265, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(7269, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7301, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7381, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(7386, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(7395, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(7399, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(7403, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7413, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(7415, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7427, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7509, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7517, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7533, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7662, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7742, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7822, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7902, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(7915, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(8239, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(8591, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8599, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8607, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8631, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8655, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8679, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8703, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8727, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8751, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8775, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8799, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8823, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8839, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8843, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8859, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8863, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8879, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8883, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8899, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8903, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8919, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8923, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8939, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8943, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8959, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8963, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8967, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8971, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8975, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(8999, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9015, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9031, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9047, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9081, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(9093, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(9096, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9176, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9200, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(9228, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9260, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9292, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9324, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9356, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9388, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9420, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9452, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9484, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9516, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9548, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9580, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9612, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9644, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9676, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9708, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9740, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9820, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9900, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9980, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10060, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10140, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10222, 32, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10254, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10321, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10401, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10481, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10561, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10567, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10573, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10580, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(10602, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10604, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10606, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10608, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10610, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10612, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10614, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10630, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10646, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10662, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10678, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10694, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10710, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10726, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10742, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10758, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10774, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10790, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10806, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10822, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10838, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10854, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10870, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10874, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10878, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10882, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10886, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10890, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10894, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10898, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10902, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10906, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10910, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10914, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10918, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10922, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10926, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10930, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10937, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11017, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11023, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11029, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11035, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11041, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11047, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11053, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11059, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11065, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11071, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11077, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11083, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11089, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11095, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11101, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11107, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11113, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11119, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11125, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11131, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11137, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11143, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11149, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11155, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11165, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11197, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11229, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11261, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11293, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11325, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11357, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11389, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11421, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11453, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11485, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11517, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11549, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11581, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11613, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11645, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11677, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11741, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11805, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11869, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11933, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11997, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12061, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12125, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12189, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12195, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12259, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(12266, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(12269, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12350, 3, - [ - new("age", ["0", "1", "2"], 1) - ]), - new(12353, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(12359, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12371, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12383, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(12390, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(12394, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12406, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12412, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12418, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12424, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12430, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12436, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12442, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12448, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12454, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12460, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12466, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12472, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12478, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12484, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12490, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12496, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12502, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12508, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12512, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12516, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12520, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12524, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12528, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12532, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12536, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12540, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12544, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12548, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12552, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12556, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12560, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12564, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12568, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12604, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(12632, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(12654, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12656, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12658, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12660, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12662, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12664, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12666, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12668, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12670, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12672, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12674, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12676, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12678, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12680, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12682, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12684, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12686, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12688, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12690, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12692, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12694, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12702, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12710, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12718, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12726, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12734, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12742, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12750, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12758, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12766, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12774, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12783, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12786, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(12801, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(12803, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12883, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12963, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13043, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13123, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13203, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13283, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13363, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13443, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13523, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13603, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13683, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13763, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13843, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13923, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13929, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13935, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13941, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13947, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13953, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13959, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13965, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13971, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13977, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13983, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13989, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13995, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14001, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14325, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14649, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14973, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15297, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15621, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15945, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16269, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16593, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16917, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17241, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17565, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17889, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18213, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18245, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(18249, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(18261, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(18269, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(18279, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(18291, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18308, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(18312, 32, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18344, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18348, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18352, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18384, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18416, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(18420, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18423, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18426, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18429, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18437, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18440, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18443, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18446, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18452, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(18479, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(18509, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18515, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18521, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(18523, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(18525, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(18557, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(18589, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18653, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18717, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18749, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18781, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18861, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18941, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18965, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18989, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19053, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19117, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19149, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19181, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19189, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19197, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(19201, 12, - [ - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 1) - ]), - new(19213, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(19222, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(19238, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(19262, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(19291, 5, - [ - new("charges", ["0", "1", "2", "3", "4"], 1) - ]), - new(19302, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19382, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19706, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19716, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19722, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19802, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20127, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20207, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20213, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(20215, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20239, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20566, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20582, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20598, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20614, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20630, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20646, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20662, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20678, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20694, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20710, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20726, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20742, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20758, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20774, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20790, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20806, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20822, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20838, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20840, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20842, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20844, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20846, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20848, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20850, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20852, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20854, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20856, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20858, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20860, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20862, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20864, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20866, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20868, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20870, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20874, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20886, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20898, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20910, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20926, 96, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21023, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(21151, 2, - [ - new("bloom", ["true", "false"], 1) - ]), - new(21153, 8, - [ - new("can_summon", ["true", "false"], 4), - new("shrieking", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21171, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21251, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21331, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21411, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21491, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21497, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21503, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21509, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21523, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21603, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21683, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21763, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21843, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21849, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21855, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21861, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21867, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21891, 20, - [ - new("thickness", ["tip_merge", "tip", "frustum", "middle", "base"], 4), - new("vertical_direction", ["up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21912, 52, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 2), - new("berries", ["true", "false"], 1) - ]), - new(21964, 2, - [ - new("berries", ["true", "false"], 1) - ]), - new(21970, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("flower_amount", ["1", "2", "3", "4"], 1) - ]), - new(21987, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("tilt", ["none", "unstable", "partial", "full"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22019, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22027, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("half", ["upper", "lower"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22043, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(22047, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(22051, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22131, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22137, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22462, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22542, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22548, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22873, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22953, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22959, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(23284, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23364, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23370, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(23697, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(23706, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(23709, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(23712, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(23717, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette1204.cs b/MinecraftClient/Mapping/BlockPalettes/Palette1204.cs deleted file mode 100644 index be64f26f9c..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette1204.cs +++ /dev/null @@ -1,5538 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - public class Palette1204 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette1204() - { - for (int i = 8707; i <= 8730; i++) - materials[i] = Material.AcaciaButton; - for (int i = 12014; i <= 12077; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 11662; i <= 11693; i++) - materials[i] = Material.AcaciaFence; - for (int i = 11406; i <= 11437; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 5026; i <= 5089; i++) - materials[i] = Material.AcaciaHangingSign; - for (int i = 349; i <= 376; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 142; i <= 144; i++) - materials[i] = Material.AcaciaLog; - materials[19] = Material.AcaciaPlanks; - for (int i = 5724; i <= 5725; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 33; i <= 34; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 4398; i <= 4429; i++) - materials[i] = Material.AcaciaSign; - for (int i = 11186; i <= 11191; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 9884; i <= 9963; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 6217; i <= 6280; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 5562; i <= 5569; i++) - materials[i] = Material.AcaciaWallHangingSign; - for (int i = 4786; i <= 4793; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 201; i <= 203; i++) - materials[i] = Material.AcaciaWood; - for (int i = 9320; i <= 9343; i++) - materials[i] = Material.ActivatorRail; - materials[0] = Material.Air; - materials[2079] = Material.Allium; - materials[21031] = Material.AmethystBlock; - for (int i = 21033; i <= 21044; i++) - materials[i] = Material.AmethystCluster; - materials[19448] = Material.AncientDebris; - materials[6] = Material.Andesite; - for (int i = 14136; i <= 14141; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 13762; i <= 13841; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 16752; i <= 17075; i++) - materials[i] = Material.AndesiteWall; - for (int i = 9107; i <= 9110; i++) - materials[i] = Material.Anvil; - for (int i = 6817; i <= 6820; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 6813; i <= 6816; i++) - materials[i] = Material.AttachedPumpkinStem; - materials[24824] = Material.Azalea; - for (int i = 461; i <= 488; i++) - materials[i] = Material.AzaleaLeaves; - materials[2080] = Material.AzureBluet; - for (int i = 12945; i <= 12956; i++) - materials[i] = Material.Bamboo; - for (int i = 159; i <= 161; i++) - materials[i] = Material.BambooBlock; - for (int i = 8803; i <= 8826; i++) - materials[i] = Material.BambooButton; - for (int i = 12270; i <= 12333; i++) - materials[i] = Material.BambooDoor; - for (int i = 11790; i <= 11821; i++) - materials[i] = Material.BambooFence; - for (int i = 11534; i <= 11565; i++) - materials[i] = Material.BambooFenceGate; - for (int i = 5474; i <= 5537; i++) - materials[i] = Material.BambooHangingSign; - materials[24] = Material.BambooMosaic; - for (int i = 11216; i <= 11221; i++) - materials[i] = Material.BambooMosaicSlab; - for (int i = 10284; i <= 10363; i++) - materials[i] = Material.BambooMosaicStairs; - materials[23] = Material.BambooPlanks; - for (int i = 5732; i <= 5733; i++) - materials[i] = Material.BambooPressurePlate; - materials[12944] = Material.BambooSapling; - for (int i = 4558; i <= 4589; i++) - materials[i] = Material.BambooSign; - for (int i = 11210; i <= 11215; i++) - materials[i] = Material.BambooSlab; - for (int i = 10204; i <= 10283; i++) - materials[i] = Material.BambooStairs; - for (int i = 6473; i <= 6536; i++) - materials[i] = Material.BambooTrapdoor; - for (int i = 5618; i <= 5625; i++) - materials[i] = Material.BambooWallHangingSign; - for (int i = 4826; i <= 4833; i++) - materials[i] = Material.BambooWallSign; - for (int i = 18408; i <= 18419; i++) - materials[i] = Material.Barrel; - for (int i = 10365; i <= 10366; i++) - materials[i] = Material.Barrier; - for (int i = 5852; i <= 5854; i++) - materials[i] = Material.Basalt; - materials[7918] = Material.Beacon; - materials[79] = Material.Bedrock; - for (int i = 19397; i <= 19420; i++) - materials[i] = Material.BeeNest; - for (int i = 19421; i <= 19444; i++) - materials[i] = Material.Beehive; - for (int i = 12509; i <= 12512; i++) - materials[i] = Material.Beetroots; - for (int i = 18471; i <= 18502; i++) - materials[i] = Material.Bell; - for (int i = 24844; i <= 24875; i++) - materials[i] = Material.BigDripleaf; - for (int i = 24876; i <= 24883; i++) - materials[i] = Material.BigDripleafStem; - for (int i = 8659; i <= 8682; i++) - materials[i] = Material.BirchButton; - for (int i = 11886; i <= 11949; i++) - materials[i] = Material.BirchDoor; - for (int i = 11598; i <= 11629; i++) - materials[i] = Material.BirchFence; - for (int i = 11342; i <= 11373; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 4962; i <= 5025; i++) - materials[i] = Material.BirchHangingSign; - for (int i = 293; i <= 320; i++) - materials[i] = Material.BirchLeaves; - for (int i = 136; i <= 138; i++) - materials[i] = Material.BirchLog; - materials[17] = Material.BirchPlanks; - for (int i = 5720; i <= 5721; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 29; i <= 30; i++) - materials[i] = Material.BirchSapling; - for (int i = 4366; i <= 4397; i++) - materials[i] = Material.BirchSign; - for (int i = 11174; i <= 11179; i++) - materials[i] = Material.BirchSlab; - for (int i = 7746; i <= 7825; i++) - materials[i] = Material.BirchStairs; - for (int i = 6089; i <= 6152; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 5554; i <= 5561; i++) - materials[i] = Material.BirchWallHangingSign; - for (int i = 4778; i <= 4785; i++) - materials[i] = Material.BirchWallSign; - for (int i = 195; i <= 197; i++) - materials[i] = Material.BirchWood; - for (int i = 10999; i <= 11014; i++) - materials[i] = Material.BlackBanner; - for (int i = 1928; i <= 1943; i++) - materials[i] = Material.BlackBed; - for (int i = 20981; i <= 20996; i++) - materials[i] = Material.BlackCandle; - for (int i = 21029; i <= 21030; i++) - materials[i] = Material.BlackCandleCake; - materials[10743] = Material.BlackCarpet; - materials[12743] = Material.BlackConcrete; - materials[12759] = Material.BlackConcretePowder; - for (int i = 12724; i <= 12727; i++) - materials[i] = Material.BlackGlazedTerracotta; - for (int i = 12658; i <= 12663; i++) - materials[i] = Material.BlackShulkerBox; - materials[5960] = Material.BlackStainedGlass; - for (int i = 9852; i <= 9883; i++) - materials[i] = Material.BlackStainedGlassPane; - materials[9371] = Material.BlackTerracotta; - for (int i = 11075; i <= 11078; i++) - materials[i] = Material.BlackWallBanner; - materials[2062] = Material.BlackWool; - materials[19460] = Material.Blackstone; - for (int i = 19865; i <= 19870; i++) - materials[i] = Material.BlackstoneSlab; - for (int i = 19461; i <= 19540; i++) - materials[i] = Material.BlackstoneStairs; - for (int i = 19541; i <= 19864; i++) - materials[i] = Material.BlackstoneWall; - for (int i = 18428; i <= 18435; i++) - materials[i] = Material.BlastFurnace; - for (int i = 10935; i <= 10950; i++) - materials[i] = Material.BlueBanner; - for (int i = 1864; i <= 1879; i++) - materials[i] = Material.BlueBed; - for (int i = 20917; i <= 20932; i++) - materials[i] = Material.BlueCandle; - for (int i = 21021; i <= 21022; i++) - materials[i] = Material.BlueCandleCake; - materials[10739] = Material.BlueCarpet; - materials[12739] = Material.BlueConcrete; - materials[12755] = Material.BlueConcretePowder; - for (int i = 12708; i <= 12711; i++) - materials[i] = Material.BlueGlazedTerracotta; - materials[12941] = Material.BlueIce; - materials[2078] = Material.BlueOrchid; - for (int i = 12634; i <= 12639; i++) - materials[i] = Material.BlueShulkerBox; - materials[5956] = Material.BlueStainedGlass; - for (int i = 9724; i <= 9755; i++) - materials[i] = Material.BlueStainedGlassPane; - materials[9367] = Material.BlueTerracotta; - for (int i = 11059; i <= 11062; i++) - materials[i] = Material.BlueWallBanner; - materials[2058] = Material.BlueWool; - for (int i = 12546; i <= 12548; i++) - materials[i] = Material.BoneBlock; - materials[2096] = Material.Bookshelf; - for (int i = 12825; i <= 12826; i++) - materials[i] = Material.BrainCoral; - materials[12809] = Material.BrainCoralBlock; - for (int i = 12845; i <= 12846; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 12901; i <= 12908; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 7390; i <= 7397; i++) - materials[i] = Material.BrewingStand; - for (int i = 11258; i <= 11263; i++) - materials[i] = Material.BrickSlab; - for (int i = 7029; i <= 7108; i++) - materials[i] = Material.BrickStairs; - for (int i = 14160; i <= 14483; i++) - materials[i] = Material.BrickWall; - materials[2093] = Material.Bricks; - for (int i = 10951; i <= 10966; i++) - materials[i] = Material.BrownBanner; - for (int i = 1880; i <= 1895; i++) - materials[i] = Material.BrownBed; - for (int i = 20933; i <= 20948; i++) - materials[i] = Material.BrownCandle; - for (int i = 21023; i <= 21024; i++) - materials[i] = Material.BrownCandleCake; - materials[10740] = Material.BrownCarpet; - materials[12740] = Material.BrownConcrete; - materials[12756] = Material.BrownConcretePowder; - for (int i = 12712; i <= 12715; i++) - materials[i] = Material.BrownGlazedTerracotta; - materials[2089] = Material.BrownMushroom; - for (int i = 6549; i <= 6612; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 12640; i <= 12645; i++) - materials[i] = Material.BrownShulkerBox; - materials[5957] = Material.BrownStainedGlass; - for (int i = 9756; i <= 9787; i++) - materials[i] = Material.BrownStainedGlassPane; - materials[9368] = Material.BrownTerracotta; - for (int i = 11063; i <= 11066; i++) - materials[i] = Material.BrownWallBanner; - materials[2059] = Material.BrownWool; - for (int i = 12960; i <= 12961; i++) - materials[i] = Material.BubbleColumn; - for (int i = 12827; i <= 12828; i++) - materials[i] = Material.BubbleCoral; - materials[12810] = Material.BubbleCoralBlock; - for (int i = 12847; i <= 12848; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 12909; i <= 12916; i++) - materials[i] = Material.BubbleCoralWallFan; - materials[21032] = Material.BuddingAmethyst; - for (int i = 5782; i <= 5797; i++) - materials[i] = Material.Cactus; - for (int i = 5874; i <= 5880; i++) - materials[i] = Material.Cake; - materials[22316] = Material.Calcite; - for (int i = 22415; i <= 22798; i++) - materials[i] = Material.CalibratedSculkSensor; - for (int i = 18511; i <= 18542; i++) - materials[i] = Material.Campfire; - for (int i = 20725; i <= 20740; i++) - materials[i] = Material.Candle; - for (int i = 20997; i <= 20998; i++) - materials[i] = Material.CandleCake; - for (int i = 8595; i <= 8602; i++) - materials[i] = Material.Carrots; - materials[18436] = Material.CartographyTable; - for (int i = 5866; i <= 5869; i++) - materials[i] = Material.CarvedPumpkin; - materials[7398] = Material.Cauldron; - materials[12959] = Material.CaveAir; - for (int i = 24769; i <= 24820; i++) - materials[i] = Material.CaveVines; - for (int i = 24821; i <= 24822; i++) - materials[i] = Material.CaveVinesPlant; - for (int i = 6773; i <= 6778; i++) - materials[i] = Material.Chain; - for (int i = 12527; i <= 12538; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 8731; i <= 8754; i++) - materials[i] = Material.CherryButton; - for (int i = 12078; i <= 12141; i++) - materials[i] = Material.CherryDoor; - for (int i = 11694; i <= 11725; i++) - materials[i] = Material.CherryFence; - for (int i = 11438; i <= 11469; i++) - materials[i] = Material.CherryFenceGate; - for (int i = 5090; i <= 5153; i++) - materials[i] = Material.CherryHangingSign; - for (int i = 377; i <= 404; i++) - materials[i] = Material.CherryLeaves; - for (int i = 145; i <= 147; i++) - materials[i] = Material.CherryLog; - materials[20] = Material.CherryPlanks; - for (int i = 5726; i <= 5727; i++) - materials[i] = Material.CherryPressurePlate; - for (int i = 35; i <= 36; i++) - materials[i] = Material.CherrySapling; - for (int i = 4430; i <= 4461; i++) - materials[i] = Material.CherrySign; - for (int i = 11192; i <= 11197; i++) - materials[i] = Material.CherrySlab; - for (int i = 9964; i <= 10043; i++) - materials[i] = Material.CherryStairs; - for (int i = 6281; i <= 6344; i++) - materials[i] = Material.CherryTrapdoor; - for (int i = 5570; i <= 5577; i++) - materials[i] = Material.CherryWallHangingSign; - for (int i = 4794; i <= 4801; i++) - materials[i] = Material.CherryWallSign; - for (int i = 204; i <= 206; i++) - materials[i] = Material.CherryWood; - for (int i = 2954; i <= 2977; i++) - materials[i] = Material.Chest; - for (int i = 9111; i <= 9114; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 2097; i <= 2352; i++) - materials[i] = Material.ChiseledBookshelf; - materials[22951] = Material.ChiseledCopper; - materials[26551] = Material.ChiseledDeepslate; - materials[20722] = Material.ChiseledNetherBricks; - materials[19874] = Material.ChiseledPolishedBlackstone; - materials[9236] = Material.ChiseledQuartzBlock; - materials[11080] = Material.ChiseledRedSandstone; - materials[536] = Material.ChiseledSandstone; - materials[6540] = Material.ChiseledStoneBricks; - materials[21903] = Material.ChiseledTuff; - materials[22315] = Material.ChiseledTuffBricks; - for (int i = 12404; i <= 12409; i++) - materials[i] = Material.ChorusFlower; - for (int i = 12340; i <= 12403; i++) - materials[i] = Material.ChorusPlant; - materials[5798] = Material.Clay; - materials[10745] = Material.CoalBlock; - materials[127] = Material.CoalOre; - materials[11] = Material.CoarseDirt; - materials[24907] = Material.CobbledDeepslate; - for (int i = 24988; i <= 24993; i++) - materials[i] = Material.CobbledDeepslateSlab; - for (int i = 24908; i <= 24987; i++) - materials[i] = Material.CobbledDeepslateStairs; - for (int i = 24994; i <= 25317; i++) - materials[i] = Material.CobbledDeepslateWall; - materials[14] = Material.Cobblestone; - for (int i = 11252; i <= 11257; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 4682; i <= 4761; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 7919; i <= 8242; i++) - materials[i] = Material.CobblestoneWall; - materials[2004] = Material.Cobweb; - for (int i = 7419; i <= 7430; i++) - materials[i] = Material.Cocoa; - for (int i = 7906; i <= 7917; i++) - materials[i] = Material.CommandBlock; - for (int i = 9175; i <= 9190; i++) - materials[i] = Material.Comparator; - for (int i = 19372; i <= 19380; i++) - materials[i] = Material.Composter; - for (int i = 12942; i <= 12943; i++) - materials[i] = Material.Conduit; - materials[22938] = Material.CopperBlock; - for (int i = 24692; i <= 24695; i++) - materials[i] = Material.CopperBulb; - for (int i = 23652; i <= 23715; i++) - materials[i] = Material.CopperDoor; - for (int i = 24676; i <= 24677; i++) - materials[i] = Material.CopperGrate; - materials[22942] = Material.CopperOre; - for (int i = 24164; i <= 24227; i++) - materials[i] = Material.CopperTrapdoor; - materials[2086] = Material.Cornflower; - materials[26552] = Material.CrackedDeepslateBricks; - materials[26553] = Material.CrackedDeepslateTiles; - materials[20723] = Material.CrackedNetherBricks; - materials[19873] = Material.CrackedPolishedBlackstoneBricks; - materials[6539] = Material.CrackedStoneBricks; - for (int i = 26590; i <= 26637; i++) - materials[i] = Material.Crafter; - materials[4277] = Material.CraftingTable; - for (int i = 8987; i <= 9018; i++) - materials[i] = Material.CreeperHead; - for (int i = 9019; i <= 9026; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 19100; i <= 19123; i++) - materials[i] = Material.CrimsonButton; - for (int i = 19148; i <= 19211; i++) - materials[i] = Material.CrimsonDoor; - for (int i = 18684; i <= 18715; i++) - materials[i] = Material.CrimsonFence; - for (int i = 18876; i <= 18907; i++) - materials[i] = Material.CrimsonFenceGate; - materials[18609] = Material.CrimsonFungus; - for (int i = 5282; i <= 5345; i++) - materials[i] = Material.CrimsonHangingSign; - for (int i = 18602; i <= 18604; i++) - materials[i] = Material.CrimsonHyphae; - materials[18608] = Material.CrimsonNylium; - materials[18666] = Material.CrimsonPlanks; - for (int i = 18680; i <= 18681; i++) - materials[i] = Material.CrimsonPressurePlate; - materials[18665] = Material.CrimsonRoots; - for (int i = 19276; i <= 19307; i++) - materials[i] = Material.CrimsonSign; - for (int i = 18668; i <= 18673; i++) - materials[i] = Material.CrimsonSlab; - for (int i = 18940; i <= 19019; i++) - materials[i] = Material.CrimsonStairs; - for (int i = 18596; i <= 18598; i++) - materials[i] = Material.CrimsonStem; - for (int i = 18748; i <= 18811; i++) - materials[i] = Material.CrimsonTrapdoor; - for (int i = 5602; i <= 5609; i++) - materials[i] = Material.CrimsonWallHangingSign; - for (int i = 19340; i <= 19347; i++) - materials[i] = Material.CrimsonWallSign; - materials[19449] = Material.CryingObsidian; - materials[22947] = Material.CutCopper; - for (int i = 23294; i <= 23299; i++) - materials[i] = Material.CutCopperSlab; - for (int i = 23196; i <= 23275; i++) - materials[i] = Material.CutCopperStairs; - materials[11081] = Material.CutRedSandstone; - for (int i = 11294; i <= 11299; i++) - materials[i] = Material.CutRedSandstoneSlab; - materials[537] = Material.CutSandstone; - for (int i = 11240; i <= 11245; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 10903; i <= 10918; i++) - materials[i] = Material.CyanBanner; - for (int i = 1832; i <= 1847; i++) - materials[i] = Material.CyanBed; - for (int i = 20885; i <= 20900; i++) - materials[i] = Material.CyanCandle; - for (int i = 21017; i <= 21018; i++) - materials[i] = Material.CyanCandleCake; - materials[10737] = Material.CyanCarpet; - materials[12737] = Material.CyanConcrete; - materials[12753] = Material.CyanConcretePowder; - for (int i = 12700; i <= 12703; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 12622; i <= 12627; i++) - materials[i] = Material.CyanShulkerBox; - materials[5954] = Material.CyanStainedGlass; - for (int i = 9660; i <= 9691; i++) - materials[i] = Material.CyanStainedGlassPane; - materials[9365] = Material.CyanTerracotta; - for (int i = 11051; i <= 11054; i++) - materials[i] = Material.CyanWallBanner; - materials[2056] = Material.CyanWool; - for (int i = 9115; i <= 9118; i++) - materials[i] = Material.DamagedAnvil; - materials[2075] = Material.Dandelion; - for (int i = 8755; i <= 8778; i++) - materials[i] = Material.DarkOakButton; - for (int i = 12142; i <= 12205; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 11726; i <= 11757; i++) - materials[i] = Material.DarkOakFence; - for (int i = 11470; i <= 11501; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 5218; i <= 5281; i++) - materials[i] = Material.DarkOakHangingSign; - for (int i = 405; i <= 432; i++) - materials[i] = Material.DarkOakLeaves; - for (int i = 148; i <= 150; i++) - materials[i] = Material.DarkOakLog; - materials[21] = Material.DarkOakPlanks; - for (int i = 5728; i <= 5729; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 37; i <= 38; i++) - materials[i] = Material.DarkOakSapling; - for (int i = 4494; i <= 4525; i++) - materials[i] = Material.DarkOakSign; - for (int i = 11198; i <= 11203; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 10044; i <= 10123; i++) - materials[i] = Material.DarkOakStairs; - for (int i = 6345; i <= 6408; i++) - materials[i] = Material.DarkOakTrapdoor; - for (int i = 5586; i <= 5593; i++) - materials[i] = Material.DarkOakWallHangingSign; - for (int i = 4810; i <= 4817; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 207; i <= 209; i++) - materials[i] = Material.DarkOakWood; - materials[10465] = Material.DarkPrismarine; - for (int i = 10718; i <= 10723; i++) - materials[i] = Material.DarkPrismarineSlab; - for (int i = 10626; i <= 10705; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 9191; i <= 9222; i++) - materials[i] = Material.DaylightDetector; - for (int i = 12815; i <= 12816; i++) - materials[i] = Material.DeadBrainCoral; - materials[12804] = Material.DeadBrainCoralBlock; - for (int i = 12835; i <= 12836; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 12861; i <= 12868; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 12817; i <= 12818; i++) - materials[i] = Material.DeadBubbleCoral; - materials[12805] = Material.DeadBubbleCoralBlock; - for (int i = 12837; i <= 12838; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 12869; i <= 12876; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - materials[2007] = Material.DeadBush; - for (int i = 12819; i <= 12820; i++) - materials[i] = Material.DeadFireCoral; - materials[12806] = Material.DeadFireCoralBlock; - for (int i = 12839; i <= 12840; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 12877; i <= 12884; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 12821; i <= 12822; i++) - materials[i] = Material.DeadHornCoral; - materials[12807] = Material.DeadHornCoralBlock; - for (int i = 12841; i <= 12842; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 12885; i <= 12892; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 12813; i <= 12814; i++) - materials[i] = Material.DeadTubeCoral; - materials[12803] = Material.DeadTubeCoralBlock; - for (int i = 12833; i <= 12834; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 12853; i <= 12860; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 26574; i <= 26589; i++) - materials[i] = Material.DecoratedPot; - for (int i = 24904; i <= 24906; i++) - materials[i] = Material.Deepslate; - for (int i = 26221; i <= 26226; i++) - materials[i] = Material.DeepslateBrickSlab; - for (int i = 26141; i <= 26220; i++) - materials[i] = Material.DeepslateBrickStairs; - for (int i = 26227; i <= 26550; i++) - materials[i] = Material.DeepslateBrickWall; - materials[26140] = Material.DeepslateBricks; - materials[128] = Material.DeepslateCoalOre; - materials[22943] = Material.DeepslateCopperOre; - materials[4275] = Material.DeepslateDiamondOre; - materials[7512] = Material.DeepslateEmeraldOre; - materials[124] = Material.DeepslateGoldOre; - materials[126] = Material.DeepslateIronOre; - materials[521] = Material.DeepslateLapisOre; - for (int i = 5736; i <= 5737; i++) - materials[i] = Material.DeepslateRedstoneOre; - for (int i = 25810; i <= 25815; i++) - materials[i] = Material.DeepslateTileSlab; - for (int i = 25730; i <= 25809; i++) - materials[i] = Material.DeepslateTileStairs; - for (int i = 25816; i <= 26139; i++) - materials[i] = Material.DeepslateTileWall; - materials[25729] = Material.DeepslateTiles; - for (int i = 1968; i <= 1991; i++) - materials[i] = Material.DetectorRail; - materials[4276] = Material.DiamondBlock; - materials[4274] = Material.DiamondOre; - materials[4] = Material.Diorite; - for (int i = 14154; i <= 14159; i++) - materials[i] = Material.DioriteSlab; - for (int i = 14002; i <= 14081; i++) - materials[i] = Material.DioriteStairs; - for (int i = 18048; i <= 18371; i++) - materials[i] = Material.DioriteWall; - materials[10] = Material.Dirt; - materials[12513] = Material.DirtPath; - for (int i = 523; i <= 534; i++) - materials[i] = Material.Dispenser; - materials[7416] = Material.DragonEgg; - for (int i = 9027; i <= 9058; i++) - materials[i] = Material.DragonHead; - for (int i = 9059; i <= 9066; i++) - materials[i] = Material.DragonWallHead; - materials[12787] = Material.DriedKelpBlock; - materials[24768] = Material.DripstoneBlock; - for (int i = 9344; i <= 9355; i++) - materials[i] = Material.Dropper; - materials[7665] = Material.EmeraldBlock; - materials[7511] = Material.EmeraldOre; - materials[7389] = Material.EnchantingTable; - materials[12514] = Material.EndGateway; - materials[7406] = Material.EndPortal; - for (int i = 7407; i <= 7414; i++) - materials[i] = Material.EndPortalFrame; - for (int i = 12334; i <= 12339; i++) - materials[i] = Material.EndRod; - materials[7415] = Material.EndStone; - for (int i = 14112; i <= 14117; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 13362; i <= 13441; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 17724; i <= 18047; i++) - materials[i] = Material.EndStoneBrickWall; - materials[12494] = Material.EndStoneBricks; - for (int i = 7513; i <= 7520; i++) - materials[i] = Material.EnderChest; - materials[22950] = Material.ExposedChiseledCopper; - materials[22939] = Material.ExposedCopper; - for (int i = 24696; i <= 24699; i++) - materials[i] = Material.ExposedCopperBulb; - for (int i = 23716; i <= 23779; i++) - materials[i] = Material.ExposedCopperDoor; - for (int i = 24678; i <= 24679; i++) - materials[i] = Material.ExposedCopperGrate; - for (int i = 24228; i <= 24291; i++) - materials[i] = Material.ExposedCopperTrapdoor; - materials[22946] = Material.ExposedCutCopper; - for (int i = 23288; i <= 23293; i++) - materials[i] = Material.ExposedCutCopperSlab; - for (int i = 23116; i <= 23195; i++) - materials[i] = Material.ExposedCutCopperStairs; - for (int i = 4286; i <= 4293; i++) - materials[i] = Material.Farmland; - materials[2006] = Material.Fern; - for (int i = 2360; i <= 2871; i++) - materials[i] = Material.Fire; - for (int i = 12829; i <= 12830; i++) - materials[i] = Material.FireCoral; - materials[12811] = Material.FireCoralBlock; - for (int i = 12849; i <= 12850; i++) - materials[i] = Material.FireCoralFan; - for (int i = 12917; i <= 12924; i++) - materials[i] = Material.FireCoralWallFan; - materials[18437] = Material.FletchingTable; - materials[8567] = Material.FlowerPot; - materials[24825] = Material.FloweringAzalea; - for (int i = 489; i <= 516; i++) - materials[i] = Material.FloweringAzaleaLeaves; - materials[26572] = Material.Frogspawn; - for (int i = 12539; i <= 12542; i++) - materials[i] = Material.FrostedIce; - for (int i = 4294; i <= 4301; i++) - materials[i] = Material.Furnace; - materials[20285] = Material.GildedBlackstone; - materials[519] = Material.Glass; - for (int i = 6779; i <= 6810; i++) - materials[i] = Material.GlassPane; - for (int i = 6869; i <= 6996; i++) - materials[i] = Material.GlowLichen; - materials[5863] = Material.Glowstone; - materials[2091] = Material.GoldBlock; - materials[123] = Material.GoldOre; - materials[2] = Material.Granite; - for (int i = 14130; i <= 14135; i++) - materials[i] = Material.GraniteSlab; - for (int i = 13682; i <= 13761; i++) - materials[i] = Material.GraniteStairs; - for (int i = 15456; i <= 15779; i++) - materials[i] = Material.GraniteWall; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - materials[118] = Material.Gravel; - for (int i = 10871; i <= 10886; i++) - materials[i] = Material.GrayBanner; - for (int i = 1800; i <= 1815; i++) - materials[i] = Material.GrayBed; - for (int i = 20853; i <= 20868; i++) - materials[i] = Material.GrayCandle; - for (int i = 21013; i <= 21014; i++) - materials[i] = Material.GrayCandleCake; - materials[10735] = Material.GrayCarpet; - materials[12735] = Material.GrayConcrete; - materials[12751] = Material.GrayConcretePowder; - for (int i = 12692; i <= 12695; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 12610; i <= 12615; i++) - materials[i] = Material.GrayShulkerBox; - materials[5952] = Material.GrayStainedGlass; - for (int i = 9596; i <= 9627; i++) - materials[i] = Material.GrayStainedGlassPane; - materials[9363] = Material.GrayTerracotta; - for (int i = 11043; i <= 11046; i++) - materials[i] = Material.GrayWallBanner; - materials[2054] = Material.GrayWool; - for (int i = 10967; i <= 10982; i++) - materials[i] = Material.GreenBanner; - for (int i = 1896; i <= 1911; i++) - materials[i] = Material.GreenBed; - for (int i = 20949; i <= 20964; i++) - materials[i] = Material.GreenCandle; - for (int i = 21025; i <= 21026; i++) - materials[i] = Material.GreenCandleCake; - materials[10741] = Material.GreenCarpet; - materials[12741] = Material.GreenConcrete; - materials[12757] = Material.GreenConcretePowder; - for (int i = 12716; i <= 12719; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 12646; i <= 12651; i++) - materials[i] = Material.GreenShulkerBox; - materials[5958] = Material.GreenStainedGlass; - for (int i = 9788; i <= 9819; i++) - materials[i] = Material.GreenStainedGlassPane; - materials[9369] = Material.GreenTerracotta; - for (int i = 11067; i <= 11070; i++) - materials[i] = Material.GreenWallBanner; - materials[2060] = Material.GreenWool; - for (int i = 18438; i <= 18449; i++) - materials[i] = Material.Grindstone; - for (int i = 24900; i <= 24901; i++) - materials[i] = Material.HangingRoots; - for (int i = 10725; i <= 10727; i++) - materials[i] = Material.HayBlock; - for (int i = 9159; i <= 9174; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - materials[19445] = Material.HoneyBlock; - materials[19446] = Material.HoneycombBlock; - for (int i = 9225; i <= 9234; i++) - materials[i] = Material.Hopper; - for (int i = 12831; i <= 12832; i++) - materials[i] = Material.HornCoral; - materials[12812] = Material.HornCoralBlock; - for (int i = 12851; i <= 12852; i++) - materials[i] = Material.HornCoralFan; - for (int i = 12925; i <= 12932; i++) - materials[i] = Material.HornCoralWallFan; - materials[5780] = Material.Ice; - materials[6548] = Material.InfestedChiseledStoneBricks; - materials[6544] = Material.InfestedCobblestone; - materials[6547] = Material.InfestedCrackedStoneBricks; - for (int i = 26554; i <= 26556; i++) - materials[i] = Material.InfestedDeepslate; - materials[6546] = Material.InfestedMossyStoneBricks; - materials[6543] = Material.InfestedStone; - materials[6545] = Material.InfestedStoneBricks; - for (int i = 6741; i <= 6772; i++) - materials[i] = Material.IronBars; - materials[2092] = Material.IronBlock; - for (int i = 5652; i <= 5715; i++) - materials[i] = Material.IronDoor; - materials[125] = Material.IronOre; - for (int i = 10399; i <= 10462; i++) - materials[i] = Material.IronTrapdoor; - for (int i = 5870; i <= 5873; i++) - materials[i] = Material.JackOLantern; - for (int i = 19360; i <= 19371; i++) - materials[i] = Material.Jigsaw; - for (int i = 5815; i <= 5816; i++) - materials[i] = Material.Jukebox; - for (int i = 8683; i <= 8706; i++) - materials[i] = Material.JungleButton; - for (int i = 11950; i <= 12013; i++) - materials[i] = Material.JungleDoor; - for (int i = 11630; i <= 11661; i++) - materials[i] = Material.JungleFence; - for (int i = 11374; i <= 11405; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 5154; i <= 5217; i++) - materials[i] = Material.JungleHangingSign; - for (int i = 321; i <= 348; i++) - materials[i] = Material.JungleLeaves; - for (int i = 139; i <= 141; i++) - materials[i] = Material.JungleLog; - materials[18] = Material.JunglePlanks; - for (int i = 5722; i <= 5723; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 31; i <= 32; i++) - materials[i] = Material.JungleSapling; - for (int i = 4462; i <= 4493; i++) - materials[i] = Material.JungleSign; - for (int i = 11180; i <= 11185; i++) - materials[i] = Material.JungleSlab; - for (int i = 7826; i <= 7905; i++) - materials[i] = Material.JungleStairs; - for (int i = 6153; i <= 6216; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 5578; i <= 5585; i++) - materials[i] = Material.JungleWallHangingSign; - for (int i = 4802; i <= 4809; i++) - materials[i] = Material.JungleWallSign; - for (int i = 198; i <= 200; i++) - materials[i] = Material.JungleWood; - for (int i = 12760; i <= 12785; i++) - materials[i] = Material.Kelp; - materials[12786] = Material.KelpPlant; - for (int i = 4654; i <= 4661; i++) - materials[i] = Material.Ladder; - for (int i = 18503; i <= 18506; i++) - materials[i] = Material.Lantern; - materials[522] = Material.LapisBlock; - materials[520] = Material.LapisOre; - for (int i = 21045; i <= 21056; i++) - materials[i] = Material.LargeAmethystBud; - for (int i = 10757; i <= 10758; i++) - materials[i] = Material.LargeFern; - for (int i = 96; i <= 111; i++) - materials[i] = Material.Lava; - materials[7402] = Material.LavaCauldron; - for (int i = 18450; i <= 18465; i++) - materials[i] = Material.Lectern; - for (int i = 5626; i <= 5649; i++) - materials[i] = Material.Lever; - for (int i = 10367; i <= 10398; i++) - materials[i] = Material.Light; - for (int i = 10807; i <= 10822; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 1736; i <= 1751; i++) - materials[i] = Material.LightBlueBed; - for (int i = 20789; i <= 20804; i++) - materials[i] = Material.LightBlueCandle; - for (int i = 21005; i <= 21006; i++) - materials[i] = Material.LightBlueCandleCake; - materials[10731] = Material.LightBlueCarpet; - materials[12731] = Material.LightBlueConcrete; - materials[12747] = Material.LightBlueConcretePowder; - for (int i = 12676; i <= 12679; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 12586; i <= 12591; i++) - materials[i] = Material.LightBlueShulkerBox; - materials[5948] = Material.LightBlueStainedGlass; - for (int i = 9468; i <= 9499; i++) - materials[i] = Material.LightBlueStainedGlassPane; - materials[9359] = Material.LightBlueTerracotta; - for (int i = 11027; i <= 11030; i++) - materials[i] = Material.LightBlueWallBanner; - materials[2050] = Material.LightBlueWool; - for (int i = 10887; i <= 10902; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 1816; i <= 1831; i++) - materials[i] = Material.LightGrayBed; - for (int i = 20869; i <= 20884; i++) - materials[i] = Material.LightGrayCandle; - for (int i = 21015; i <= 21016; i++) - materials[i] = Material.LightGrayCandleCake; - materials[10736] = Material.LightGrayCarpet; - materials[12736] = Material.LightGrayConcrete; - materials[12752] = Material.LightGrayConcretePowder; - for (int i = 12696; i <= 12699; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 12616; i <= 12621; i++) - materials[i] = Material.LightGrayShulkerBox; - materials[5953] = Material.LightGrayStainedGlass; - for (int i = 9628; i <= 9659; i++) - materials[i] = Material.LightGrayStainedGlassPane; - materials[9364] = Material.LightGrayTerracotta; - for (int i = 11047; i <= 11050; i++) - materials[i] = Material.LightGrayWallBanner; - materials[2055] = Material.LightGrayWool; - for (int i = 9143; i <= 9158; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 24724; i <= 24747; i++) - materials[i] = Material.LightningRod; - for (int i = 10749; i <= 10750; i++) - materials[i] = Material.Lilac; - materials[2088] = Material.LilyOfTheValley; - materials[7271] = Material.LilyPad; - for (int i = 10839; i <= 10854; i++) - materials[i] = Material.LimeBanner; - for (int i = 1768; i <= 1783; i++) - materials[i] = Material.LimeBed; - for (int i = 20821; i <= 20836; i++) - materials[i] = Material.LimeCandle; - for (int i = 21009; i <= 21010; i++) - materials[i] = Material.LimeCandleCake; - materials[10733] = Material.LimeCarpet; - materials[12733] = Material.LimeConcrete; - materials[12749] = Material.LimeConcretePowder; - for (int i = 12684; i <= 12687; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 12598; i <= 12603; i++) - materials[i] = Material.LimeShulkerBox; - materials[5950] = Material.LimeStainedGlass; - for (int i = 9532; i <= 9563; i++) - materials[i] = Material.LimeStainedGlassPane; - materials[9361] = Material.LimeTerracotta; - for (int i = 11035; i <= 11038; i++) - materials[i] = Material.LimeWallBanner; - materials[2052] = Material.LimeWool; - materials[19459] = Material.Lodestone; - for (int i = 18404; i <= 18407; i++) - materials[i] = Material.Loom; - for (int i = 10791; i <= 10806; i++) - materials[i] = Material.MagentaBanner; - for (int i = 1720; i <= 1735; i++) - materials[i] = Material.MagentaBed; - for (int i = 20773; i <= 20788; i++) - materials[i] = Material.MagentaCandle; - for (int i = 21003; i <= 21004; i++) - materials[i] = Material.MagentaCandleCake; - materials[10730] = Material.MagentaCarpet; - materials[12730] = Material.MagentaConcrete; - materials[12746] = Material.MagentaConcretePowder; - for (int i = 12672; i <= 12675; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 12580; i <= 12585; i++) - materials[i] = Material.MagentaShulkerBox; - materials[5947] = Material.MagentaStainedGlass; - for (int i = 9436; i <= 9467; i++) - materials[i] = Material.MagentaStainedGlassPane; - materials[9358] = Material.MagentaTerracotta; - for (int i = 11023; i <= 11026; i++) - materials[i] = Material.MagentaWallBanner; - materials[2049] = Material.MagentaWool; - materials[12543] = Material.MagmaBlock; - for (int i = 8779; i <= 8802; i++) - materials[i] = Material.MangroveButton; - for (int i = 12206; i <= 12269; i++) - materials[i] = Material.MangroveDoor; - for (int i = 11758; i <= 11789; i++) - materials[i] = Material.MangroveFence; - for (int i = 11502; i <= 11533; i++) - materials[i] = Material.MangroveFenceGate; - for (int i = 5410; i <= 5473; i++) - materials[i] = Material.MangroveHangingSign; - for (int i = 433; i <= 460; i++) - materials[i] = Material.MangroveLeaves; - for (int i = 151; i <= 153; i++) - materials[i] = Material.MangroveLog; - materials[22] = Material.MangrovePlanks; - for (int i = 5730; i <= 5731; i++) - materials[i] = Material.MangrovePressurePlate; - for (int i = 39; i <= 78; i++) - materials[i] = Material.MangrovePropagule; - for (int i = 154; i <= 155; i++) - materials[i] = Material.MangroveRoots; - for (int i = 4526; i <= 4557; i++) - materials[i] = Material.MangroveSign; - for (int i = 11204; i <= 11209; i++) - materials[i] = Material.MangroveSlab; - for (int i = 10124; i <= 10203; i++) - materials[i] = Material.MangroveStairs; - for (int i = 6409; i <= 6472; i++) - materials[i] = Material.MangroveTrapdoor; - for (int i = 5594; i <= 5601; i++) - materials[i] = Material.MangroveWallHangingSign; - for (int i = 4818; i <= 4825; i++) - materials[i] = Material.MangroveWallSign; - for (int i = 210; i <= 212; i++) - materials[i] = Material.MangroveWood; - for (int i = 21057; i <= 21068; i++) - materials[i] = Material.MediumAmethystBud; - materials[6812] = Material.Melon; - for (int i = 6829; i <= 6836; i++) - materials[i] = Material.MelonStem; - materials[24843] = Material.MossBlock; - materials[24826] = Material.MossCarpet; - materials[2353] = Material.MossyCobblestone; - for (int i = 14106; i <= 14111; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 13282; i <= 13361; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 8243; i <= 8566; i++) - materials[i] = Material.MossyCobblestoneWall; - for (int i = 14094; i <= 14099; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 13122; i <= 13201; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 15132; i <= 15455; i++) - materials[i] = Material.MossyStoneBrickWall; - materials[6538] = Material.MossyStoneBricks; - for (int i = 2063; i <= 2074; i++) - materials[i] = Material.MovingPiston; - materials[24903] = Material.Mud; - for (int i = 11270; i <= 11275; i++) - materials[i] = Material.MudBrickSlab; - for (int i = 7189; i <= 7268; i++) - materials[i] = Material.MudBrickStairs; - for (int i = 16104; i <= 16427; i++) - materials[i] = Material.MudBrickWall; - materials[6542] = Material.MudBricks; - for (int i = 156; i <= 158; i++) - materials[i] = Material.MuddyMangroveRoots; - for (int i = 6677; i <= 6740; i++) - materials[i] = Material.MushroomStem; - for (int i = 7269; i <= 7270; i++) - materials[i] = Material.Mycelium; - for (int i = 7273; i <= 7304; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 11276; i <= 11281; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 7305; i <= 7384; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 16428; i <= 16751; i++) - materials[i] = Material.NetherBrickWall; - materials[7272] = Material.NetherBricks; - materials[129] = Material.NetherGoldOre; - for (int i = 5864; i <= 5865; i++) - materials[i] = Material.NetherPortal; - materials[9224] = Material.NetherQuartzOre; - materials[18595] = Material.NetherSprouts; - for (int i = 7385; i <= 7388; i++) - materials[i] = Material.NetherWart; - materials[12544] = Material.NetherWartBlock; - materials[19447] = Material.NetheriteBlock; - materials[5849] = Material.Netherrack; - for (int i = 538; i <= 1687; i++) - materials[i] = Material.NoteBlock; - for (int i = 8611; i <= 8634; i++) - materials[i] = Material.OakButton; - for (int i = 4590; i <= 4653; i++) - materials[i] = Material.OakDoor; - for (int i = 5817; i <= 5848; i++) - materials[i] = Material.OakFence; - for (int i = 6997; i <= 7028; i++) - materials[i] = Material.OakFenceGate; - for (int i = 4834; i <= 4897; i++) - materials[i] = Material.OakHangingSign; - for (int i = 237; i <= 264; i++) - materials[i] = Material.OakLeaves; - for (int i = 130; i <= 132; i++) - materials[i] = Material.OakLog; - materials[15] = Material.OakPlanks; - for (int i = 5716; i <= 5717; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 25; i <= 26; i++) - materials[i] = Material.OakSapling; - for (int i = 4302; i <= 4333; i++) - materials[i] = Material.OakSign; - for (int i = 11162; i <= 11167; i++) - materials[i] = Material.OakSlab; - for (int i = 2874; i <= 2953; i++) - materials[i] = Material.OakStairs; - for (int i = 5961; i <= 6024; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 5538; i <= 5545; i++) - materials[i] = Material.OakWallHangingSign; - for (int i = 4762; i <= 4769; i++) - materials[i] = Material.OakWallSign; - for (int i = 189; i <= 191; i++) - materials[i] = Material.OakWood; - for (int i = 12550; i <= 12561; i++) - materials[i] = Material.Observer; - materials[2354] = Material.Obsidian; - for (int i = 26563; i <= 26565; i++) - materials[i] = Material.OchreFroglight; - for (int i = 10775; i <= 10790; i++) - materials[i] = Material.OrangeBanner; - for (int i = 1704; i <= 1719; i++) - materials[i] = Material.OrangeBed; - for (int i = 20757; i <= 20772; i++) - materials[i] = Material.OrangeCandle; - for (int i = 21001; i <= 21002; i++) - materials[i] = Material.OrangeCandleCake; - materials[10729] = Material.OrangeCarpet; - materials[12729] = Material.OrangeConcrete; - materials[12745] = Material.OrangeConcretePowder; - for (int i = 12668; i <= 12671; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 12574; i <= 12579; i++) - materials[i] = Material.OrangeShulkerBox; - materials[5946] = Material.OrangeStainedGlass; - for (int i = 9404; i <= 9435; i++) - materials[i] = Material.OrangeStainedGlassPane; - materials[9357] = Material.OrangeTerracotta; - materials[2082] = Material.OrangeTulip; - for (int i = 11019; i <= 11022; i++) - materials[i] = Material.OrangeWallBanner; - materials[2048] = Material.OrangeWool; - materials[2085] = Material.OxeyeDaisy; - materials[22948] = Material.OxidizedChiseledCopper; - materials[22941] = Material.OxidizedCopper; - for (int i = 24704; i <= 24707; i++) - materials[i] = Material.OxidizedCopperBulb; - for (int i = 23780; i <= 23843; i++) - materials[i] = Material.OxidizedCopperDoor; - for (int i = 24682; i <= 24683; i++) - materials[i] = Material.OxidizedCopperGrate; - for (int i = 24292; i <= 24355; i++) - materials[i] = Material.OxidizedCopperTrapdoor; - materials[22944] = Material.OxidizedCutCopper; - for (int i = 23276; i <= 23281; i++) - materials[i] = Material.OxidizedCutCopperSlab; - for (int i = 22956; i <= 23035; i++) - materials[i] = Material.OxidizedCutCopperStairs; - materials[10746] = Material.PackedIce; - materials[6541] = Material.PackedMud; - for (int i = 26569; i <= 26571; i++) - materials[i] = Material.PearlescentFroglight; - for (int i = 10753; i <= 10754; i++) - materials[i] = Material.Peony; - for (int i = 11246; i <= 11251; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 9067; i <= 9098; i++) - materials[i] = Material.PiglinHead; - for (int i = 9099; i <= 9106; i++) - materials[i] = Material.PiglinWallHead; - for (int i = 10855; i <= 10870; i++) - materials[i] = Material.PinkBanner; - for (int i = 1784; i <= 1799; i++) - materials[i] = Material.PinkBed; - for (int i = 20837; i <= 20852; i++) - materials[i] = Material.PinkCandle; - for (int i = 21011; i <= 21012; i++) - materials[i] = Material.PinkCandleCake; - materials[10734] = Material.PinkCarpet; - materials[12734] = Material.PinkConcrete; - materials[12750] = Material.PinkConcretePowder; - for (int i = 12688; i <= 12691; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 24827; i <= 24842; i++) - materials[i] = Material.PinkPetals; - for (int i = 12604; i <= 12609; i++) - materials[i] = Material.PinkShulkerBox; - materials[5951] = Material.PinkStainedGlass; - for (int i = 9564; i <= 9595; i++) - materials[i] = Material.PinkStainedGlassPane; - materials[9362] = Material.PinkTerracotta; - materials[2084] = Material.PinkTulip; - for (int i = 11039; i <= 11042; i++) - materials[i] = Material.PinkWallBanner; - materials[2053] = Material.PinkWool; - for (int i = 2011; i <= 2022; i++) - materials[i] = Material.Piston; - for (int i = 2023; i <= 2046; i++) - materials[i] = Material.PistonHead; - for (int i = 12497; i <= 12506; i++) - materials[i] = Material.PitcherCrop; - for (int i = 12507; i <= 12508; i++) - materials[i] = Material.PitcherPlant; - for (int i = 8947; i <= 8978; i++) - materials[i] = Material.PlayerHead; - for (int i = 8979; i <= 8986; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - for (int i = 24748; i <= 24767; i++) - materials[i] = Material.PointedDripstone; - materials[7] = Material.PolishedAndesite; - for (int i = 14148; i <= 14153; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 13922; i <= 14001; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 5855; i <= 5857; i++) - materials[i] = Material.PolishedBasalt; - materials[19871] = Material.PolishedBlackstone; - for (int i = 19875; i <= 19880; i++) - materials[i] = Material.PolishedBlackstoneBrickSlab; - for (int i = 19881; i <= 19960; i++) - materials[i] = Material.PolishedBlackstoneBrickStairs; - for (int i = 19961; i <= 20284; i++) - materials[i] = Material.PolishedBlackstoneBrickWall; - materials[19872] = Material.PolishedBlackstoneBricks; - for (int i = 20374; i <= 20397; i++) - materials[i] = Material.PolishedBlackstoneButton; - for (int i = 20372; i <= 20373; i++) - materials[i] = Material.PolishedBlackstonePressurePlate; - for (int i = 20366; i <= 20371; i++) - materials[i] = Material.PolishedBlackstoneSlab; - for (int i = 20286; i <= 20365; i++) - materials[i] = Material.PolishedBlackstoneStairs; - for (int i = 20398; i <= 20721; i++) - materials[i] = Material.PolishedBlackstoneWall; - materials[25318] = Material.PolishedDeepslate; - for (int i = 25399; i <= 25404; i++) - materials[i] = Material.PolishedDeepslateSlab; - for (int i = 25319; i <= 25398; i++) - materials[i] = Material.PolishedDeepslateStairs; - for (int i = 25405; i <= 25728; i++) - materials[i] = Material.PolishedDeepslateWall; - materials[5] = Material.PolishedDiorite; - for (int i = 14100; i <= 14105; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 13202; i <= 13281; i++) - materials[i] = Material.PolishedDioriteStairs; - materials[3] = Material.PolishedGranite; - for (int i = 14082; i <= 14087; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 12962; i <= 13041; i++) - materials[i] = Material.PolishedGraniteStairs; - materials[21492] = Material.PolishedTuff; - for (int i = 21493; i <= 21498; i++) - materials[i] = Material.PolishedTuffSlab; - for (int i = 21499; i <= 21578; i++) - materials[i] = Material.PolishedTuffStairs; - for (int i = 21579; i <= 21902; i++) - materials[i] = Material.PolishedTuffWall; - materials[2077] = Material.Poppy; - for (int i = 8603; i <= 8610; i++) - materials[i] = Material.Potatoes; - materials[8573] = Material.PottedAcaciaSapling; - materials[8581] = Material.PottedAllium; - materials[26561] = Material.PottedAzaleaBush; - materials[8582] = Material.PottedAzureBluet; - materials[12957] = Material.PottedBamboo; - materials[8571] = Material.PottedBirchSapling; - materials[8580] = Material.PottedBlueOrchid; - materials[8592] = Material.PottedBrownMushroom; - materials[8594] = Material.PottedCactus; - materials[8574] = Material.PottedCherrySapling; - materials[8588] = Material.PottedCornflower; - materials[19455] = Material.PottedCrimsonFungus; - materials[19457] = Material.PottedCrimsonRoots; - materials[8578] = Material.PottedDandelion; - materials[8575] = Material.PottedDarkOakSapling; - materials[8593] = Material.PottedDeadBush; - materials[8577] = Material.PottedFern; - materials[26562] = Material.PottedFloweringAzaleaBush; - materials[8572] = Material.PottedJungleSapling; - materials[8589] = Material.PottedLilyOfTheValley; - materials[8576] = Material.PottedMangrovePropagule; - materials[8569] = Material.PottedOakSapling; - materials[8584] = Material.PottedOrangeTulip; - materials[8587] = Material.PottedOxeyeDaisy; - materials[8586] = Material.PottedPinkTulip; - materials[8579] = Material.PottedPoppy; - materials[8591] = Material.PottedRedMushroom; - materials[8583] = Material.PottedRedTulip; - materials[8570] = Material.PottedSpruceSapling; - materials[8568] = Material.PottedTorchflower; - materials[19456] = Material.PottedWarpedFungus; - materials[19458] = Material.PottedWarpedRoots; - materials[8585] = Material.PottedWhiteTulip; - materials[8590] = Material.PottedWitherRose; - materials[22318] = Material.PowderSnow; - for (int i = 7403; i <= 7405; i++) - materials[i] = Material.PowderSnowCauldron; - for (int i = 1944; i <= 1967; i++) - materials[i] = Material.PoweredRail; - materials[10463] = Material.Prismarine; - for (int i = 10712; i <= 10717; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 10546; i <= 10625; i++) - materials[i] = Material.PrismarineBrickStairs; - materials[10464] = Material.PrismarineBricks; - for (int i = 10706; i <= 10711; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 10466; i <= 10545; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 14484; i <= 14807; i++) - materials[i] = Material.PrismarineWall; - materials[6811] = Material.Pumpkin; - for (int i = 6821; i <= 6828; i++) - materials[i] = Material.PumpkinStem; - for (int i = 10919; i <= 10934; i++) - materials[i] = Material.PurpleBanner; - for (int i = 1848; i <= 1863; i++) - materials[i] = Material.PurpleBed; - for (int i = 20901; i <= 20916; i++) - materials[i] = Material.PurpleCandle; - for (int i = 21019; i <= 21020; i++) - materials[i] = Material.PurpleCandleCake; - materials[10738] = Material.PurpleCarpet; - materials[12738] = Material.PurpleConcrete; - materials[12754] = Material.PurpleConcretePowder; - for (int i = 12704; i <= 12707; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 12628; i <= 12633; i++) - materials[i] = Material.PurpleShulkerBox; - materials[5955] = Material.PurpleStainedGlass; - for (int i = 9692; i <= 9723; i++) - materials[i] = Material.PurpleStainedGlassPane; - materials[9366] = Material.PurpleTerracotta; - for (int i = 11055; i <= 11058; i++) - materials[i] = Material.PurpleWallBanner; - materials[2057] = Material.PurpleWool; - materials[12410] = Material.PurpurBlock; - for (int i = 12411; i <= 12413; i++) - materials[i] = Material.PurpurPillar; - for (int i = 11300; i <= 11305; i++) - materials[i] = Material.PurpurSlab; - for (int i = 12414; i <= 12493; i++) - materials[i] = Material.PurpurStairs; - materials[9235] = Material.QuartzBlock; - materials[20724] = Material.QuartzBricks; - for (int i = 9237; i <= 9239; i++) - materials[i] = Material.QuartzPillar; - for (int i = 11282; i <= 11287; i++) - materials[i] = Material.QuartzSlab; - for (int i = 9240; i <= 9319; i++) - materials[i] = Material.QuartzStairs; - for (int i = 4662; i <= 4681; i++) - materials[i] = Material.Rail; - materials[26559] = Material.RawCopperBlock; - materials[26560] = Material.RawGoldBlock; - materials[26558] = Material.RawIronBlock; - for (int i = 10983; i <= 10998; i++) - materials[i] = Material.RedBanner; - for (int i = 1912; i <= 1927; i++) - materials[i] = Material.RedBed; - for (int i = 20965; i <= 20980; i++) - materials[i] = Material.RedCandle; - for (int i = 21027; i <= 21028; i++) - materials[i] = Material.RedCandleCake; - materials[10742] = Material.RedCarpet; - materials[12742] = Material.RedConcrete; - materials[12758] = Material.RedConcretePowder; - for (int i = 12720; i <= 12723; i++) - materials[i] = Material.RedGlazedTerracotta; - materials[2090] = Material.RedMushroom; - for (int i = 6613; i <= 6676; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 14142; i <= 14147; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 13842; i <= 13921; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 17076; i <= 17399; i++) - materials[i] = Material.RedNetherBrickWall; - materials[12545] = Material.RedNetherBricks; - materials[117] = Material.RedSand; - materials[11079] = Material.RedSandstone; - for (int i = 11288; i <= 11293; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 11082; i <= 11161; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 14808; i <= 15131; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 12652; i <= 12657; i++) - materials[i] = Material.RedShulkerBox; - materials[5959] = Material.RedStainedGlass; - for (int i = 9820; i <= 9851; i++) - materials[i] = Material.RedStainedGlassPane; - materials[9370] = Material.RedTerracotta; - materials[2081] = Material.RedTulip; - for (int i = 11071; i <= 11074; i++) - materials[i] = Material.RedWallBanner; - materials[2061] = Material.RedWool; - materials[9223] = Material.RedstoneBlock; - for (int i = 7417; i <= 7418; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 5734; i <= 5735; i++) - materials[i] = Material.RedstoneOre; - for (int i = 5738; i <= 5739; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 5740; i <= 5747; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 2978; i <= 4273; i++) - materials[i] = Material.RedstoneWire; - materials[26573] = Material.ReinforcedDeepslate; - for (int i = 5881; i <= 5944; i++) - materials[i] = Material.Repeater; - for (int i = 12515; i <= 12526; i++) - materials[i] = Material.RepeatingCommandBlock; - for (int i = 19450; i <= 19454; i++) - materials[i] = Material.RespawnAnchor; - materials[24902] = Material.RootedDirt; - for (int i = 10751; i <= 10752; i++) - materials[i] = Material.RoseBush; - materials[112] = Material.Sand; - materials[535] = Material.Sandstone; - for (int i = 11234; i <= 11239; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 7431; i <= 7510; i++) - materials[i] = Material.SandstoneStairs; - for (int i = 17400; i <= 17723; i++) - materials[i] = Material.SandstoneWall; - for (int i = 18372; i <= 18403; i++) - materials[i] = Material.Scaffolding; - materials[22799] = Material.Sculk; - for (int i = 22928; i <= 22929; i++) - materials[i] = Material.SculkCatalyst; - for (int i = 22319; i <= 22414; i++) - materials[i] = Material.SculkSensor; - for (int i = 22930; i <= 22937; i++) - materials[i] = Material.SculkShrieker; - for (int i = 22800; i <= 22927; i++) - materials[i] = Material.SculkVein; - materials[10724] = Material.SeaLantern; - for (int i = 12933; i <= 12940; i++) - materials[i] = Material.SeaPickle; - materials[2008] = Material.Seagrass; - materials[2005] = Material.ShortGrass; - materials[18610] = Material.Shroomlight; - for (int i = 12562; i <= 12567; i++) - materials[i] = Material.ShulkerBox; - for (int i = 8827; i <= 8858; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 8859; i <= 8866; i++) - materials[i] = Material.SkeletonWallSkull; - materials[10364] = Material.SlimeBlock; - for (int i = 21069; i <= 21080; i++) - materials[i] = Material.SmallAmethystBud; - for (int i = 24884; i <= 24899; i++) - materials[i] = Material.SmallDripleaf; - materials[18466] = Material.SmithingTable; - for (int i = 18420; i <= 18427; i++) - materials[i] = Material.Smoker; - materials[26557] = Material.SmoothBasalt; - materials[11308] = Material.SmoothQuartz; - for (int i = 14124; i <= 14129; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 13602; i <= 13681; i++) - materials[i] = Material.SmoothQuartzStairs; - materials[11309] = Material.SmoothRedSandstone; - for (int i = 14088; i <= 14093; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 13042; i <= 13121; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - materials[11307] = Material.SmoothSandstone; - for (int i = 14118; i <= 14123; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 13522; i <= 13601; i++) - materials[i] = Material.SmoothSandstoneStairs; - materials[11306] = Material.SmoothStone; - for (int i = 11228; i <= 11233; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 12800; i <= 12802; i++) - materials[i] = Material.SnifferEgg; - for (int i = 5772; i <= 5779; i++) - materials[i] = Material.Snow; - materials[5781] = Material.SnowBlock; - for (int i = 18543; i <= 18574; i++) - materials[i] = Material.SoulCampfire; - materials[2872] = Material.SoulFire; - for (int i = 18507; i <= 18510; i++) - materials[i] = Material.SoulLantern; - materials[5850] = Material.SoulSand; - materials[5851] = Material.SoulSoil; - materials[5858] = Material.SoulTorch; - for (int i = 5859; i <= 5862; i++) - materials[i] = Material.SoulWallTorch; - materials[2873] = Material.Spawner; - materials[517] = Material.Sponge; - materials[24823] = Material.SporeBlossom; - for (int i = 8635; i <= 8658; i++) - materials[i] = Material.SpruceButton; - for (int i = 11822; i <= 11885; i++) - materials[i] = Material.SpruceDoor; - for (int i = 11566; i <= 11597; i++) - materials[i] = Material.SpruceFence; - for (int i = 11310; i <= 11341; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 4898; i <= 4961; i++) - materials[i] = Material.SpruceHangingSign; - for (int i = 265; i <= 292; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 133; i <= 135; i++) - materials[i] = Material.SpruceLog; - materials[16] = Material.SprucePlanks; - for (int i = 5718; i <= 5719; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 27; i <= 28; i++) - materials[i] = Material.SpruceSapling; - for (int i = 4334; i <= 4365; i++) - materials[i] = Material.SpruceSign; - for (int i = 11168; i <= 11173; i++) - materials[i] = Material.SpruceSlab; - for (int i = 7666; i <= 7745; i++) - materials[i] = Material.SpruceStairs; - for (int i = 6025; i <= 6088; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 5546; i <= 5553; i++) - materials[i] = Material.SpruceWallHangingSign; - for (int i = 4770; i <= 4777; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 192; i <= 194; i++) - materials[i] = Material.SpruceWood; - for (int i = 1992; i <= 2003; i++) - materials[i] = Material.StickyPiston; - materials[1] = Material.Stone; - for (int i = 11264; i <= 11269; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 7109; i <= 7188; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 15780; i <= 16103; i++) - materials[i] = Material.StoneBrickWall; - materials[6537] = Material.StoneBricks; - for (int i = 5748; i <= 5771; i++) - materials[i] = Material.StoneButton; - for (int i = 5650; i <= 5651; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 11222; i <= 11227; i++) - materials[i] = Material.StoneSlab; - for (int i = 13442; i <= 13521; i++) - materials[i] = Material.StoneStairs; - for (int i = 18467; i <= 18470; i++) - materials[i] = Material.Stonecutter; - for (int i = 171; i <= 173; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 225; i <= 227; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 186; i <= 188; i++) - materials[i] = Material.StrippedBambooBlock; - for (int i = 165; i <= 167; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 219; i <= 221; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 174; i <= 176; i++) - materials[i] = Material.StrippedCherryLog; - for (int i = 228; i <= 230; i++) - materials[i] = Material.StrippedCherryWood; - for (int i = 18605; i <= 18607; i++) - materials[i] = Material.StrippedCrimsonHyphae; - for (int i = 18599; i <= 18601; i++) - materials[i] = Material.StrippedCrimsonStem; - for (int i = 177; i <= 179; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 231; i <= 233; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 168; i <= 170; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 222; i <= 224; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 183; i <= 185; i++) - materials[i] = Material.StrippedMangroveLog; - for (int i = 234; i <= 236; i++) - materials[i] = Material.StrippedMangroveWood; - for (int i = 180; i <= 182; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 213; i <= 215; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 162; i <= 164; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 216; i <= 218; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 18588; i <= 18590; i++) - materials[i] = Material.StrippedWarpedHyphae; - for (int i = 18582; i <= 18584; i++) - materials[i] = Material.StrippedWarpedStem; - for (int i = 19356; i <= 19359; i++) - materials[i] = Material.StructureBlock; - materials[12549] = Material.StructureVoid; - for (int i = 5799; i <= 5814; i++) - materials[i] = Material.SugarCane; - for (int i = 10747; i <= 10748; i++) - materials[i] = Material.Sunflower; - for (int i = 119; i <= 122; i++) - materials[i] = Material.SuspiciousGravel; - for (int i = 113; i <= 116; i++) - materials[i] = Material.SuspiciousSand; - for (int i = 18575; i <= 18578; i++) - materials[i] = Material.SweetBerryBush; - for (int i = 10755; i <= 10756; i++) - materials[i] = Material.TallGrass; - for (int i = 2009; i <= 2010; i++) - materials[i] = Material.TallSeagrass; - for (int i = 19381; i <= 19396; i++) - materials[i] = Material.Target; - materials[10744] = Material.Terracotta; - materials[22317] = Material.TintedGlass; - for (int i = 2094; i <= 2095; i++) - materials[i] = Material.Tnt; - materials[2355] = Material.Torch; - materials[2076] = Material.Torchflower; - for (int i = 12495; i <= 12496; i++) - materials[i] = Material.TorchflowerCrop; - for (int i = 9119; i <= 9142; i++) - materials[i] = Material.TrappedChest; - for (int i = 26638; i <= 26643; i++) - materials[i] = Material.TrialSpawner; - for (int i = 7537; i <= 7664; i++) - materials[i] = Material.Tripwire; - for (int i = 7521; i <= 7536; i++) - materials[i] = Material.TripwireHook; - for (int i = 12823; i <= 12824; i++) - materials[i] = Material.TubeCoral; - materials[12808] = Material.TubeCoralBlock; - for (int i = 12843; i <= 12844; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 12893; i <= 12900; i++) - materials[i] = Material.TubeCoralWallFan; - materials[21081] = Material.Tuff; - for (int i = 21905; i <= 21910; i++) - materials[i] = Material.TuffBrickSlab; - for (int i = 21911; i <= 21990; i++) - materials[i] = Material.TuffBrickStairs; - for (int i = 21991; i <= 22314; i++) - materials[i] = Material.TuffBrickWall; - materials[21904] = Material.TuffBricks; - for (int i = 21082; i <= 21087; i++) - materials[i] = Material.TuffSlab; - for (int i = 21088; i <= 21167; i++) - materials[i] = Material.TuffStairs; - for (int i = 21168; i <= 21491; i++) - materials[i] = Material.TuffWall; - for (int i = 12788; i <= 12799; i++) - materials[i] = Material.TurtleEgg; - for (int i = 18638; i <= 18663; i++) - materials[i] = Material.TwistingVines; - materials[18664] = Material.TwistingVinesPlant; - for (int i = 26566; i <= 26568; i++) - materials[i] = Material.VerdantFroglight; - for (int i = 6837; i <= 6868; i++) - materials[i] = Material.Vine; - materials[12958] = Material.VoidAir; - for (int i = 2356; i <= 2359; i++) - materials[i] = Material.WallTorch; - for (int i = 19124; i <= 19147; i++) - materials[i] = Material.WarpedButton; - for (int i = 19212; i <= 19275; i++) - materials[i] = Material.WarpedDoor; - for (int i = 18716; i <= 18747; i++) - materials[i] = Material.WarpedFence; - for (int i = 18908; i <= 18939; i++) - materials[i] = Material.WarpedFenceGate; - materials[18592] = Material.WarpedFungus; - for (int i = 5346; i <= 5409; i++) - materials[i] = Material.WarpedHangingSign; - for (int i = 18585; i <= 18587; i++) - materials[i] = Material.WarpedHyphae; - materials[18591] = Material.WarpedNylium; - materials[18667] = Material.WarpedPlanks; - for (int i = 18682; i <= 18683; i++) - materials[i] = Material.WarpedPressurePlate; - materials[18594] = Material.WarpedRoots; - for (int i = 19308; i <= 19339; i++) - materials[i] = Material.WarpedSign; - for (int i = 18674; i <= 18679; i++) - materials[i] = Material.WarpedSlab; - for (int i = 19020; i <= 19099; i++) - materials[i] = Material.WarpedStairs; - for (int i = 18579; i <= 18581; i++) - materials[i] = Material.WarpedStem; - for (int i = 18812; i <= 18875; i++) - materials[i] = Material.WarpedTrapdoor; - for (int i = 5610; i <= 5617; i++) - materials[i] = Material.WarpedWallHangingSign; - for (int i = 19348; i <= 19355; i++) - materials[i] = Material.WarpedWallSign; - materials[18593] = Material.WarpedWartBlock; - for (int i = 80; i <= 95; i++) - materials[i] = Material.Water; - for (int i = 7399; i <= 7401; i++) - materials[i] = Material.WaterCauldron; - materials[22955] = Material.WaxedChiseledCopper; - materials[23300] = Material.WaxedCopperBlock; - for (int i = 24708; i <= 24711; i++) - materials[i] = Material.WaxedCopperBulb; - for (int i = 23908; i <= 23971; i++) - materials[i] = Material.WaxedCopperDoor; - for (int i = 24684; i <= 24685; i++) - materials[i] = Material.WaxedCopperGrate; - for (int i = 24420; i <= 24483; i++) - materials[i] = Material.WaxedCopperTrapdoor; - materials[23307] = Material.WaxedCutCopper; - for (int i = 23646; i <= 23651; i++) - materials[i] = Material.WaxedCutCopperSlab; - for (int i = 23548; i <= 23627; i++) - materials[i] = Material.WaxedCutCopperStairs; - materials[22954] = Material.WaxedExposedChiseledCopper; - materials[23302] = Material.WaxedExposedCopper; - for (int i = 24712; i <= 24715; i++) - materials[i] = Material.WaxedExposedCopperBulb; - for (int i = 23972; i <= 24035; i++) - materials[i] = Material.WaxedExposedCopperDoor; - for (int i = 24686; i <= 24687; i++) - materials[i] = Material.WaxedExposedCopperGrate; - for (int i = 24484; i <= 24547; i++) - materials[i] = Material.WaxedExposedCopperTrapdoor; - materials[23306] = Material.WaxedExposedCutCopper; - for (int i = 23640; i <= 23645; i++) - materials[i] = Material.WaxedExposedCutCopperSlab; - for (int i = 23468; i <= 23547; i++) - materials[i] = Material.WaxedExposedCutCopperStairs; - materials[22952] = Material.WaxedOxidizedChiseledCopper; - materials[23303] = Material.WaxedOxidizedCopper; - for (int i = 24720; i <= 24723; i++) - materials[i] = Material.WaxedOxidizedCopperBulb; - for (int i = 24036; i <= 24099; i++) - materials[i] = Material.WaxedOxidizedCopperDoor; - for (int i = 24690; i <= 24691; i++) - materials[i] = Material.WaxedOxidizedCopperGrate; - for (int i = 24548; i <= 24611; i++) - materials[i] = Material.WaxedOxidizedCopperTrapdoor; - materials[23304] = Material.WaxedOxidizedCutCopper; - for (int i = 23628; i <= 23633; i++) - materials[i] = Material.WaxedOxidizedCutCopperSlab; - for (int i = 23308; i <= 23387; i++) - materials[i] = Material.WaxedOxidizedCutCopperStairs; - materials[22953] = Material.WaxedWeatheredChiseledCopper; - materials[23301] = Material.WaxedWeatheredCopper; - for (int i = 24716; i <= 24719; i++) - materials[i] = Material.WaxedWeatheredCopperBulb; - for (int i = 24100; i <= 24163; i++) - materials[i] = Material.WaxedWeatheredCopperDoor; - for (int i = 24688; i <= 24689; i++) - materials[i] = Material.WaxedWeatheredCopperGrate; - for (int i = 24612; i <= 24675; i++) - materials[i] = Material.WaxedWeatheredCopperTrapdoor; - materials[23305] = Material.WaxedWeatheredCutCopper; - for (int i = 23634; i <= 23639; i++) - materials[i] = Material.WaxedWeatheredCutCopperSlab; - for (int i = 23388; i <= 23467; i++) - materials[i] = Material.WaxedWeatheredCutCopperStairs; - materials[22949] = Material.WeatheredChiseledCopper; - materials[22940] = Material.WeatheredCopper; - for (int i = 24700; i <= 24703; i++) - materials[i] = Material.WeatheredCopperBulb; - for (int i = 23844; i <= 23907; i++) - materials[i] = Material.WeatheredCopperDoor; - for (int i = 24680; i <= 24681; i++) - materials[i] = Material.WeatheredCopperGrate; - for (int i = 24356; i <= 24419; i++) - materials[i] = Material.WeatheredCopperTrapdoor; - materials[22945] = Material.WeatheredCutCopper; - for (int i = 23282; i <= 23287; i++) - materials[i] = Material.WeatheredCutCopperSlab; - for (int i = 23036; i <= 23115; i++) - materials[i] = Material.WeatheredCutCopperStairs; - for (int i = 18611; i <= 18636; i++) - materials[i] = Material.WeepingVines; - materials[18637] = Material.WeepingVinesPlant; - materials[518] = Material.WetSponge; - for (int i = 4278; i <= 4285; i++) - materials[i] = Material.Wheat; - for (int i = 10759; i <= 10774; i++) - materials[i] = Material.WhiteBanner; - for (int i = 1688; i <= 1703; i++) - materials[i] = Material.WhiteBed; - for (int i = 20741; i <= 20756; i++) - materials[i] = Material.WhiteCandle; - for (int i = 20999; i <= 21000; i++) - materials[i] = Material.WhiteCandleCake; - materials[10728] = Material.WhiteCarpet; - materials[12728] = Material.WhiteConcrete; - materials[12744] = Material.WhiteConcretePowder; - for (int i = 12664; i <= 12667; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 12568; i <= 12573; i++) - materials[i] = Material.WhiteShulkerBox; - materials[5945] = Material.WhiteStainedGlass; - for (int i = 9372; i <= 9403; i++) - materials[i] = Material.WhiteStainedGlassPane; - materials[9356] = Material.WhiteTerracotta; - materials[2083] = Material.WhiteTulip; - for (int i = 11015; i <= 11018; i++) - materials[i] = Material.WhiteWallBanner; - materials[2047] = Material.WhiteWool; - materials[2087] = Material.WitherRose; - for (int i = 8867; i <= 8898; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 8899; i <= 8906; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 10823; i <= 10838; i++) - materials[i] = Material.YellowBanner; - for (int i = 1752; i <= 1767; i++) - materials[i] = Material.YellowBed; - for (int i = 20805; i <= 20820; i++) - materials[i] = Material.YellowCandle; - for (int i = 21007; i <= 21008; i++) - materials[i] = Material.YellowCandleCake; - materials[10732] = Material.YellowCarpet; - materials[12732] = Material.YellowConcrete; - materials[12748] = Material.YellowConcretePowder; - for (int i = 12680; i <= 12683; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 12592; i <= 12597; i++) - materials[i] = Material.YellowShulkerBox; - materials[5949] = Material.YellowStainedGlass; - for (int i = 9500; i <= 9531; i++) - materials[i] = Material.YellowStainedGlassPane; - materials[9360] = Material.YellowTerracotta; - for (int i = 11031; i <= 11034; i++) - materials[i] = Material.YellowWallBanner; - materials[2051] = Material.YellowWool; - for (int i = 8907; i <= 8938; i++) - materials[i] = Material.ZombieHead; - for (int i = 8939; i <= 8946; i++) - materials[i] = Material.ZombieWallHead; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(25, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(27, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(29, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(31, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(33, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(35, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(37, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(39, 40, - [ - new("age", ["0", "1", "2", "3", "4"], 8), - new("hanging", ["true", "false"], 4), - new("stage", ["0", "1"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(80, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(96, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(113, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(119, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(130, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(133, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(136, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(139, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(142, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(145, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(148, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(151, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(154, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(156, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(159, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(162, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(165, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(168, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(171, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(174, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(177, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(180, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(183, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(186, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(189, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(192, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(195, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(198, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(201, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(204, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(207, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(210, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(213, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(216, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(219, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(222, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(225, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(228, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(231, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(234, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(237, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(265, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(293, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(321, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(349, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(377, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(405, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(433, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(461, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(489, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(523, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(538, 1150, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling", "zombie", "skeleton", "creeper", "dragon", "wither_skeleton", "piglin", "custom_head"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1688, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1704, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1720, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1736, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1752, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1768, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1784, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1800, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1816, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1832, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1848, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1864, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1880, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1896, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1912, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1928, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1944, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(1968, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(1992, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2009, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(2011, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2023, 24, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2) - ]), - new(2063, 12, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 2) - ]), - new(2094, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(2097, 256, - [ - new("facing", ["north", "south", "west", "east"], 64), - new("slot_0_occupied", ["true", "false"], 32), - new("slot_1_occupied", ["true", "false"], 16), - new("slot_2_occupied", ["true", "false"], 8), - new("slot_3_occupied", ["true", "false"], 4), - new("slot_4_occupied", ["true", "false"], 2), - new("slot_5_occupied", ["true", "false"], 1) - ]), - new(2356, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(2360, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(2874, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2954, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(2978, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(4278, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4286, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4294, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(4302, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4334, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4366, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4398, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4430, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4462, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4494, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4526, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4558, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4590, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4654, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4662, 20, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4682, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4762, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4770, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4778, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4786, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4794, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4802, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4810, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4818, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4826, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4834, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4898, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4962, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5026, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5090, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5154, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5218, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5282, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5346, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5410, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5474, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5538, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5546, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5554, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5562, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5570, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5578, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5586, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5594, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5602, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5610, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5618, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5626, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5650, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5652, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5716, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5718, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5720, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5722, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5724, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5726, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5728, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5730, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5732, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5734, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5736, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5738, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5740, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(5748, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5772, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(5782, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5799, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5815, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(5817, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5852, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(5855, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(5859, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5864, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(5866, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5870, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5874, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(5881, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5961, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6025, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6089, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6153, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6217, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6281, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6345, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6409, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6473, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6549, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6613, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6677, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6741, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6773, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6779, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6813, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6817, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6821, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(6829, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(6837, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6869, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6997, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7029, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7109, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7189, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7269, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(7273, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7305, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7385, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(7390, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(7399, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(7403, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(7407, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7417, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(7419, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7431, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7513, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7521, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7537, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7666, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7746, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7826, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7906, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(7919, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(8243, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(8595, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8603, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8611, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8635, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8659, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8683, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8707, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8731, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8755, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8779, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8803, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8827, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8859, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8867, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8899, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8907, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8939, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8947, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8979, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8987, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9019, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9027, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9059, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9067, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9099, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9107, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9111, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9115, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9119, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(9143, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9159, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9175, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9191, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9225, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(9237, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(9240, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9320, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9344, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(9372, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9404, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9436, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9468, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9500, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9532, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9564, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9596, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9628, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9660, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9692, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9724, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9756, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9788, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9820, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9852, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9884, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9964, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10044, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10124, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10204, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10284, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10365, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10367, 32, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10399, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10466, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10546, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10626, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10706, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10712, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10718, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10725, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(10747, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10749, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10751, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10753, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10755, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10757, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10759, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10775, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10791, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10807, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10823, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10839, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10855, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10871, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10887, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10903, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10919, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10935, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10951, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10967, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10983, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10999, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11015, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11019, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11023, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11027, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11031, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11035, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11039, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11043, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11047, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11051, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11055, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11059, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11063, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11067, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11071, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11075, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11082, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11162, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11168, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11174, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11180, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11186, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11192, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11198, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11204, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11210, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11216, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11222, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11228, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11234, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11240, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11246, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11252, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11258, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11264, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11270, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11276, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11282, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11288, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11294, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11300, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11310, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11342, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11374, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11406, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11438, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11470, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11502, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11534, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11566, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11598, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11630, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11662, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11694, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11726, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11758, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11790, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11822, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11886, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11950, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12014, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12078, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12142, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12206, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12270, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12334, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12340, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12404, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(12411, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(12414, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12495, 2, - [ - new("age", ["0", "1"], 1) - ]), - new(12497, 10, - [ - new("age", ["0", "1", "2", "3", "4"], 2), - new("half", ["upper", "lower"], 1) - ]), - new(12507, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12509, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(12515, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12527, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12539, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(12546, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(12550, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12562, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12568, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12574, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12580, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12586, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12592, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12598, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12604, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12610, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12616, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12622, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12628, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12634, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12640, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12646, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12652, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12658, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12664, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12668, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12672, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12676, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12680, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12684, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12688, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12692, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12696, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12700, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12704, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12708, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12712, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12716, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12720, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12724, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12760, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(12788, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(12800, 3, - [ - new("hatch", ["0", "1", "2"], 1) - ]), - new(12813, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12815, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12817, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12819, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12821, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12823, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12825, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12827, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12829, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12831, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12833, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12835, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12837, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12839, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12841, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12843, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12845, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12847, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12849, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12851, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12853, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12861, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12869, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12877, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12885, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12893, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12901, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12909, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12917, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12925, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12933, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12942, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12945, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(12960, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(12962, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13042, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13122, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13202, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13282, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13362, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13442, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13522, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13602, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13682, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13762, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13842, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13922, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14002, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14082, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14088, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14094, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14100, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14106, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14112, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14118, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14124, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14130, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14136, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14142, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14148, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14154, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14160, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14484, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14808, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15132, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15456, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15780, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16104, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16428, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16752, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17076, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17400, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17724, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18048, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18372, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18404, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(18408, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(18420, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(18428, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(18438, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(18450, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18467, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(18471, 32, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18503, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18507, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18511, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18543, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18575, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(18579, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18582, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18585, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18588, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18596, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18599, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18602, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18605, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18611, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(18638, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(18668, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18674, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18680, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(18682, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(18684, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(18716, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(18748, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18812, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18876, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18908, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18940, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19020, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19100, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19124, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19148, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19212, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19276, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19308, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19340, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19348, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19356, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(19360, 12, - [ - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 1) - ]), - new(19372, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(19381, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(19397, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(19421, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(19450, 5, - [ - new("charges", ["0", "1", "2", "3", "4"], 1) - ]), - new(19461, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19541, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19865, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19875, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19881, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19961, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20286, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20366, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20372, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(20374, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20398, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20725, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20741, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20757, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20773, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20789, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20805, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20821, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20837, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20853, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20869, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20885, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20901, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20917, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20933, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20949, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20965, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20981, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20997, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20999, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21001, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21003, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21005, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21007, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21009, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21011, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21013, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21015, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21017, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21019, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21021, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21023, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21025, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21027, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21029, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21033, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21045, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21057, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21069, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21082, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21088, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21168, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(21493, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21499, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21579, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(21905, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21911, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21991, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22319, 96, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22415, 384, - [ - new("facing", ["north", "south", "west", "east"], 96), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22800, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(22928, 2, - [ - new("bloom", ["true", "false"], 1) - ]), - new(22930, 8, - [ - new("can_summon", ["true", "false"], 4), - new("shrieking", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22956, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23036, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23116, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23196, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23276, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23282, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23288, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23294, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23308, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23388, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23468, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23548, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23628, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23634, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23640, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23646, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23652, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(23716, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(23780, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(23844, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(23908, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(23972, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24036, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24100, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24164, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24228, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24292, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24356, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24420, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24484, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24548, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24612, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24676, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24678, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24680, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24682, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24684, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24686, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24688, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24690, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24692, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24696, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24700, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24704, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24708, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24712, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24716, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24720, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24724, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24748, 20, - [ - new("thickness", ["tip_merge", "tip", "frustum", "middle", "base"], 4), - new("vertical_direction", ["up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24769, 52, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 2), - new("berries", ["true", "false"], 1) - ]), - new(24821, 2, - [ - new("berries", ["true", "false"], 1) - ]), - new(24827, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("flower_amount", ["1", "2", "3", "4"], 1) - ]), - new(24844, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("tilt", ["none", "unstable", "partial", "full"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24876, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24884, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("half", ["upper", "lower"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24900, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24904, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(24908, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24988, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24994, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(25319, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25399, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25405, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(25730, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25810, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25816, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(26141, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26221, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26227, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(26554, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(26563, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(26566, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(26569, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(26574, 16, - [ - new("cracked", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26590, 48, - [ - new("crafting", ["true", "false"], 24), - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(26638, 6, - [ - new("trial_spawner_state", ["inactive", "waiting_for_players", "active", "waiting_for_reward_ejection", "ejecting_reward", "cooldown"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette1206.cs b/MinecraftClient/Mapping/BlockPalettes/Palette1206.cs deleted file mode 100644 index 01a9d60d4e..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette1206.cs +++ /dev/null @@ -1,5553 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - public class Palette1206 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette1206() - { - for (int i = 8707; i <= 8730; i++) - materials[i] = Material.AcaciaButton; - for (int i = 12014; i <= 12077; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 11662; i <= 11693; i++) - materials[i] = Material.AcaciaFence; - for (int i = 11406; i <= 11437; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 5026; i <= 5089; i++) - materials[i] = Material.AcaciaHangingSign; - for (int i = 349; i <= 376; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 142; i <= 144; i++) - materials[i] = Material.AcaciaLog; - materials[19] = Material.AcaciaPlanks; - for (int i = 5724; i <= 5725; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 33; i <= 34; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 4398; i <= 4429; i++) - materials[i] = Material.AcaciaSign; - for (int i = 11186; i <= 11191; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 9884; i <= 9963; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 6217; i <= 6280; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 5562; i <= 5569; i++) - materials[i] = Material.AcaciaWallHangingSign; - for (int i = 4786; i <= 4793; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 201; i <= 203; i++) - materials[i] = Material.AcaciaWood; - for (int i = 9320; i <= 9343; i++) - materials[i] = Material.ActivatorRail; - materials[0] = Material.Air; - materials[2079] = Material.Allium; - materials[21031] = Material.AmethystBlock; - for (int i = 21033; i <= 21044; i++) - materials[i] = Material.AmethystCluster; - materials[19448] = Material.AncientDebris; - materials[6] = Material.Andesite; - for (int i = 14136; i <= 14141; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 13762; i <= 13841; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 16752; i <= 17075; i++) - materials[i] = Material.AndesiteWall; - for (int i = 9107; i <= 9110; i++) - materials[i] = Material.Anvil; - for (int i = 6817; i <= 6820; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 6813; i <= 6816; i++) - materials[i] = Material.AttachedPumpkinStem; - materials[24824] = Material.Azalea; - for (int i = 461; i <= 488; i++) - materials[i] = Material.AzaleaLeaves; - materials[2080] = Material.AzureBluet; - for (int i = 12945; i <= 12956; i++) - materials[i] = Material.Bamboo; - for (int i = 159; i <= 161; i++) - materials[i] = Material.BambooBlock; - for (int i = 8803; i <= 8826; i++) - materials[i] = Material.BambooButton; - for (int i = 12270; i <= 12333; i++) - materials[i] = Material.BambooDoor; - for (int i = 11790; i <= 11821; i++) - materials[i] = Material.BambooFence; - for (int i = 11534; i <= 11565; i++) - materials[i] = Material.BambooFenceGate; - for (int i = 5474; i <= 5537; i++) - materials[i] = Material.BambooHangingSign; - materials[24] = Material.BambooMosaic; - for (int i = 11216; i <= 11221; i++) - materials[i] = Material.BambooMosaicSlab; - for (int i = 10284; i <= 10363; i++) - materials[i] = Material.BambooMosaicStairs; - materials[23] = Material.BambooPlanks; - for (int i = 5732; i <= 5733; i++) - materials[i] = Material.BambooPressurePlate; - materials[12944] = Material.BambooSapling; - for (int i = 4558; i <= 4589; i++) - materials[i] = Material.BambooSign; - for (int i = 11210; i <= 11215; i++) - materials[i] = Material.BambooSlab; - for (int i = 10204; i <= 10283; i++) - materials[i] = Material.BambooStairs; - for (int i = 6473; i <= 6536; i++) - materials[i] = Material.BambooTrapdoor; - for (int i = 5618; i <= 5625; i++) - materials[i] = Material.BambooWallHangingSign; - for (int i = 4826; i <= 4833; i++) - materials[i] = Material.BambooWallSign; - for (int i = 18408; i <= 18419; i++) - materials[i] = Material.Barrel; - for (int i = 10365; i <= 10366; i++) - materials[i] = Material.Barrier; - for (int i = 5852; i <= 5854; i++) - materials[i] = Material.Basalt; - materials[7918] = Material.Beacon; - materials[79] = Material.Bedrock; - for (int i = 19397; i <= 19420; i++) - materials[i] = Material.BeeNest; - for (int i = 19421; i <= 19444; i++) - materials[i] = Material.Beehive; - for (int i = 12509; i <= 12512; i++) - materials[i] = Material.Beetroots; - for (int i = 18471; i <= 18502; i++) - materials[i] = Material.Bell; - for (int i = 24844; i <= 24875; i++) - materials[i] = Material.BigDripleaf; - for (int i = 24876; i <= 24883; i++) - materials[i] = Material.BigDripleafStem; - for (int i = 8659; i <= 8682; i++) - materials[i] = Material.BirchButton; - for (int i = 11886; i <= 11949; i++) - materials[i] = Material.BirchDoor; - for (int i = 11598; i <= 11629; i++) - materials[i] = Material.BirchFence; - for (int i = 11342; i <= 11373; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 4962; i <= 5025; i++) - materials[i] = Material.BirchHangingSign; - for (int i = 293; i <= 320; i++) - materials[i] = Material.BirchLeaves; - for (int i = 136; i <= 138; i++) - materials[i] = Material.BirchLog; - materials[17] = Material.BirchPlanks; - for (int i = 5720; i <= 5721; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 29; i <= 30; i++) - materials[i] = Material.BirchSapling; - for (int i = 4366; i <= 4397; i++) - materials[i] = Material.BirchSign; - for (int i = 11174; i <= 11179; i++) - materials[i] = Material.BirchSlab; - for (int i = 7746; i <= 7825; i++) - materials[i] = Material.BirchStairs; - for (int i = 6089; i <= 6152; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 5554; i <= 5561; i++) - materials[i] = Material.BirchWallHangingSign; - for (int i = 4778; i <= 4785; i++) - materials[i] = Material.BirchWallSign; - for (int i = 195; i <= 197; i++) - materials[i] = Material.BirchWood; - for (int i = 10999; i <= 11014; i++) - materials[i] = Material.BlackBanner; - for (int i = 1928; i <= 1943; i++) - materials[i] = Material.BlackBed; - for (int i = 20981; i <= 20996; i++) - materials[i] = Material.BlackCandle; - for (int i = 21029; i <= 21030; i++) - materials[i] = Material.BlackCandleCake; - materials[10743] = Material.BlackCarpet; - materials[12743] = Material.BlackConcrete; - materials[12759] = Material.BlackConcretePowder; - for (int i = 12724; i <= 12727; i++) - materials[i] = Material.BlackGlazedTerracotta; - for (int i = 12658; i <= 12663; i++) - materials[i] = Material.BlackShulkerBox; - materials[5960] = Material.BlackStainedGlass; - for (int i = 9852; i <= 9883; i++) - materials[i] = Material.BlackStainedGlassPane; - materials[9371] = Material.BlackTerracotta; - for (int i = 11075; i <= 11078; i++) - materials[i] = Material.BlackWallBanner; - materials[2062] = Material.BlackWool; - materials[19460] = Material.Blackstone; - for (int i = 19865; i <= 19870; i++) - materials[i] = Material.BlackstoneSlab; - for (int i = 19461; i <= 19540; i++) - materials[i] = Material.BlackstoneStairs; - for (int i = 19541; i <= 19864; i++) - materials[i] = Material.BlackstoneWall; - for (int i = 18428; i <= 18435; i++) - materials[i] = Material.BlastFurnace; - for (int i = 10935; i <= 10950; i++) - materials[i] = Material.BlueBanner; - for (int i = 1864; i <= 1879; i++) - materials[i] = Material.BlueBed; - for (int i = 20917; i <= 20932; i++) - materials[i] = Material.BlueCandle; - for (int i = 21021; i <= 21022; i++) - materials[i] = Material.BlueCandleCake; - materials[10739] = Material.BlueCarpet; - materials[12739] = Material.BlueConcrete; - materials[12755] = Material.BlueConcretePowder; - for (int i = 12708; i <= 12711; i++) - materials[i] = Material.BlueGlazedTerracotta; - materials[12941] = Material.BlueIce; - materials[2078] = Material.BlueOrchid; - for (int i = 12634; i <= 12639; i++) - materials[i] = Material.BlueShulkerBox; - materials[5956] = Material.BlueStainedGlass; - for (int i = 9724; i <= 9755; i++) - materials[i] = Material.BlueStainedGlassPane; - materials[9367] = Material.BlueTerracotta; - for (int i = 11059; i <= 11062; i++) - materials[i] = Material.BlueWallBanner; - materials[2058] = Material.BlueWool; - for (int i = 12546; i <= 12548; i++) - materials[i] = Material.BoneBlock; - materials[2096] = Material.Bookshelf; - for (int i = 12825; i <= 12826; i++) - materials[i] = Material.BrainCoral; - materials[12809] = Material.BrainCoralBlock; - for (int i = 12845; i <= 12846; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 12901; i <= 12908; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 7390; i <= 7397; i++) - materials[i] = Material.BrewingStand; - for (int i = 11258; i <= 11263; i++) - materials[i] = Material.BrickSlab; - for (int i = 7029; i <= 7108; i++) - materials[i] = Material.BrickStairs; - for (int i = 14160; i <= 14483; i++) - materials[i] = Material.BrickWall; - materials[2093] = Material.Bricks; - for (int i = 10951; i <= 10966; i++) - materials[i] = Material.BrownBanner; - for (int i = 1880; i <= 1895; i++) - materials[i] = Material.BrownBed; - for (int i = 20933; i <= 20948; i++) - materials[i] = Material.BrownCandle; - for (int i = 21023; i <= 21024; i++) - materials[i] = Material.BrownCandleCake; - materials[10740] = Material.BrownCarpet; - materials[12740] = Material.BrownConcrete; - materials[12756] = Material.BrownConcretePowder; - for (int i = 12712; i <= 12715; i++) - materials[i] = Material.BrownGlazedTerracotta; - materials[2089] = Material.BrownMushroom; - for (int i = 6549; i <= 6612; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 12640; i <= 12645; i++) - materials[i] = Material.BrownShulkerBox; - materials[5957] = Material.BrownStainedGlass; - for (int i = 9756; i <= 9787; i++) - materials[i] = Material.BrownStainedGlassPane; - materials[9368] = Material.BrownTerracotta; - for (int i = 11063; i <= 11066; i++) - materials[i] = Material.BrownWallBanner; - materials[2059] = Material.BrownWool; - for (int i = 12960; i <= 12961; i++) - materials[i] = Material.BubbleColumn; - for (int i = 12827; i <= 12828; i++) - materials[i] = Material.BubbleCoral; - materials[12810] = Material.BubbleCoralBlock; - for (int i = 12847; i <= 12848; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 12909; i <= 12916; i++) - materials[i] = Material.BubbleCoralWallFan; - materials[21032] = Material.BuddingAmethyst; - for (int i = 5782; i <= 5797; i++) - materials[i] = Material.Cactus; - for (int i = 5874; i <= 5880; i++) - materials[i] = Material.Cake; - materials[22316] = Material.Calcite; - for (int i = 22415; i <= 22798; i++) - materials[i] = Material.CalibratedSculkSensor; - for (int i = 18511; i <= 18542; i++) - materials[i] = Material.Campfire; - for (int i = 20725; i <= 20740; i++) - materials[i] = Material.Candle; - for (int i = 20997; i <= 20998; i++) - materials[i] = Material.CandleCake; - for (int i = 8595; i <= 8602; i++) - materials[i] = Material.Carrots; - materials[18436] = Material.CartographyTable; - for (int i = 5866; i <= 5869; i++) - materials[i] = Material.CarvedPumpkin; - materials[7398] = Material.Cauldron; - materials[12959] = Material.CaveAir; - for (int i = 24769; i <= 24820; i++) - materials[i] = Material.CaveVines; - for (int i = 24821; i <= 24822; i++) - materials[i] = Material.CaveVinesPlant; - for (int i = 6773; i <= 6778; i++) - materials[i] = Material.Chain; - for (int i = 12527; i <= 12538; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 8731; i <= 8754; i++) - materials[i] = Material.CherryButton; - for (int i = 12078; i <= 12141; i++) - materials[i] = Material.CherryDoor; - for (int i = 11694; i <= 11725; i++) - materials[i] = Material.CherryFence; - for (int i = 11438; i <= 11469; i++) - materials[i] = Material.CherryFenceGate; - for (int i = 5090; i <= 5153; i++) - materials[i] = Material.CherryHangingSign; - for (int i = 377; i <= 404; i++) - materials[i] = Material.CherryLeaves; - for (int i = 145; i <= 147; i++) - materials[i] = Material.CherryLog; - materials[20] = Material.CherryPlanks; - for (int i = 5726; i <= 5727; i++) - materials[i] = Material.CherryPressurePlate; - for (int i = 35; i <= 36; i++) - materials[i] = Material.CherrySapling; - for (int i = 4430; i <= 4461; i++) - materials[i] = Material.CherrySign; - for (int i = 11192; i <= 11197; i++) - materials[i] = Material.CherrySlab; - for (int i = 9964; i <= 10043; i++) - materials[i] = Material.CherryStairs; - for (int i = 6281; i <= 6344; i++) - materials[i] = Material.CherryTrapdoor; - for (int i = 5570; i <= 5577; i++) - materials[i] = Material.CherryWallHangingSign; - for (int i = 4794; i <= 4801; i++) - materials[i] = Material.CherryWallSign; - for (int i = 204; i <= 206; i++) - materials[i] = Material.CherryWood; - for (int i = 2954; i <= 2977; i++) - materials[i] = Material.Chest; - for (int i = 9111; i <= 9114; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 2097; i <= 2352; i++) - materials[i] = Material.ChiseledBookshelf; - materials[22951] = Material.ChiseledCopper; - materials[26551] = Material.ChiseledDeepslate; - materials[20722] = Material.ChiseledNetherBricks; - materials[19874] = Material.ChiseledPolishedBlackstone; - materials[9236] = Material.ChiseledQuartzBlock; - materials[11080] = Material.ChiseledRedSandstone; - materials[536] = Material.ChiseledSandstone; - materials[6540] = Material.ChiseledStoneBricks; - materials[21903] = Material.ChiseledTuff; - materials[22315] = Material.ChiseledTuffBricks; - for (int i = 12404; i <= 12409; i++) - materials[i] = Material.ChorusFlower; - for (int i = 12340; i <= 12403; i++) - materials[i] = Material.ChorusPlant; - materials[5798] = Material.Clay; - materials[10745] = Material.CoalBlock; - materials[127] = Material.CoalOre; - materials[11] = Material.CoarseDirt; - materials[24907] = Material.CobbledDeepslate; - for (int i = 24988; i <= 24993; i++) - materials[i] = Material.CobbledDeepslateSlab; - for (int i = 24908; i <= 24987; i++) - materials[i] = Material.CobbledDeepslateStairs; - for (int i = 24994; i <= 25317; i++) - materials[i] = Material.CobbledDeepslateWall; - materials[14] = Material.Cobblestone; - for (int i = 11252; i <= 11257; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 4682; i <= 4761; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 7919; i <= 8242; i++) - materials[i] = Material.CobblestoneWall; - materials[2004] = Material.Cobweb; - for (int i = 7419; i <= 7430; i++) - materials[i] = Material.Cocoa; - for (int i = 7906; i <= 7917; i++) - materials[i] = Material.CommandBlock; - for (int i = 9175; i <= 9190; i++) - materials[i] = Material.Comparator; - for (int i = 19372; i <= 19380; i++) - materials[i] = Material.Composter; - for (int i = 12942; i <= 12943; i++) - materials[i] = Material.Conduit; - materials[22938] = Material.CopperBlock; - for (int i = 24692; i <= 24695; i++) - materials[i] = Material.CopperBulb; - for (int i = 23652; i <= 23715; i++) - materials[i] = Material.CopperDoor; - for (int i = 24676; i <= 24677; i++) - materials[i] = Material.CopperGrate; - materials[22942] = Material.CopperOre; - for (int i = 24164; i <= 24227; i++) - materials[i] = Material.CopperTrapdoor; - materials[2086] = Material.Cornflower; - materials[26552] = Material.CrackedDeepslateBricks; - materials[26553] = Material.CrackedDeepslateTiles; - materials[20723] = Material.CrackedNetherBricks; - materials[19873] = Material.CrackedPolishedBlackstoneBricks; - materials[6539] = Material.CrackedStoneBricks; - for (int i = 26590; i <= 26637; i++) - materials[i] = Material.Crafter; - materials[4277] = Material.CraftingTable; - for (int i = 8987; i <= 9018; i++) - materials[i] = Material.CreeperHead; - for (int i = 9019; i <= 9026; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 19100; i <= 19123; i++) - materials[i] = Material.CrimsonButton; - for (int i = 19148; i <= 19211; i++) - materials[i] = Material.CrimsonDoor; - for (int i = 18684; i <= 18715; i++) - materials[i] = Material.CrimsonFence; - for (int i = 18876; i <= 18907; i++) - materials[i] = Material.CrimsonFenceGate; - materials[18609] = Material.CrimsonFungus; - for (int i = 5282; i <= 5345; i++) - materials[i] = Material.CrimsonHangingSign; - for (int i = 18602; i <= 18604; i++) - materials[i] = Material.CrimsonHyphae; - materials[18608] = Material.CrimsonNylium; - materials[18666] = Material.CrimsonPlanks; - for (int i = 18680; i <= 18681; i++) - materials[i] = Material.CrimsonPressurePlate; - materials[18665] = Material.CrimsonRoots; - for (int i = 19276; i <= 19307; i++) - materials[i] = Material.CrimsonSign; - for (int i = 18668; i <= 18673; i++) - materials[i] = Material.CrimsonSlab; - for (int i = 18940; i <= 19019; i++) - materials[i] = Material.CrimsonStairs; - for (int i = 18596; i <= 18598; i++) - materials[i] = Material.CrimsonStem; - for (int i = 18748; i <= 18811; i++) - materials[i] = Material.CrimsonTrapdoor; - for (int i = 5602; i <= 5609; i++) - materials[i] = Material.CrimsonWallHangingSign; - for (int i = 19340; i <= 19347; i++) - materials[i] = Material.CrimsonWallSign; - materials[19449] = Material.CryingObsidian; - materials[22947] = Material.CutCopper; - for (int i = 23294; i <= 23299; i++) - materials[i] = Material.CutCopperSlab; - for (int i = 23196; i <= 23275; i++) - materials[i] = Material.CutCopperStairs; - materials[11081] = Material.CutRedSandstone; - for (int i = 11294; i <= 11299; i++) - materials[i] = Material.CutRedSandstoneSlab; - materials[537] = Material.CutSandstone; - for (int i = 11240; i <= 11245; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 10903; i <= 10918; i++) - materials[i] = Material.CyanBanner; - for (int i = 1832; i <= 1847; i++) - materials[i] = Material.CyanBed; - for (int i = 20885; i <= 20900; i++) - materials[i] = Material.CyanCandle; - for (int i = 21017; i <= 21018; i++) - materials[i] = Material.CyanCandleCake; - materials[10737] = Material.CyanCarpet; - materials[12737] = Material.CyanConcrete; - materials[12753] = Material.CyanConcretePowder; - for (int i = 12700; i <= 12703; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 12622; i <= 12627; i++) - materials[i] = Material.CyanShulkerBox; - materials[5954] = Material.CyanStainedGlass; - for (int i = 9660; i <= 9691; i++) - materials[i] = Material.CyanStainedGlassPane; - materials[9365] = Material.CyanTerracotta; - for (int i = 11051; i <= 11054; i++) - materials[i] = Material.CyanWallBanner; - materials[2056] = Material.CyanWool; - for (int i = 9115; i <= 9118; i++) - materials[i] = Material.DamagedAnvil; - materials[2075] = Material.Dandelion; - for (int i = 8755; i <= 8778; i++) - materials[i] = Material.DarkOakButton; - for (int i = 12142; i <= 12205; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 11726; i <= 11757; i++) - materials[i] = Material.DarkOakFence; - for (int i = 11470; i <= 11501; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 5218; i <= 5281; i++) - materials[i] = Material.DarkOakHangingSign; - for (int i = 405; i <= 432; i++) - materials[i] = Material.DarkOakLeaves; - for (int i = 148; i <= 150; i++) - materials[i] = Material.DarkOakLog; - materials[21] = Material.DarkOakPlanks; - for (int i = 5728; i <= 5729; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 37; i <= 38; i++) - materials[i] = Material.DarkOakSapling; - for (int i = 4494; i <= 4525; i++) - materials[i] = Material.DarkOakSign; - for (int i = 11198; i <= 11203; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 10044; i <= 10123; i++) - materials[i] = Material.DarkOakStairs; - for (int i = 6345; i <= 6408; i++) - materials[i] = Material.DarkOakTrapdoor; - for (int i = 5586; i <= 5593; i++) - materials[i] = Material.DarkOakWallHangingSign; - for (int i = 4810; i <= 4817; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 207; i <= 209; i++) - materials[i] = Material.DarkOakWood; - materials[10465] = Material.DarkPrismarine; - for (int i = 10718; i <= 10723; i++) - materials[i] = Material.DarkPrismarineSlab; - for (int i = 10626; i <= 10705; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 9191; i <= 9222; i++) - materials[i] = Material.DaylightDetector; - for (int i = 12815; i <= 12816; i++) - materials[i] = Material.DeadBrainCoral; - materials[12804] = Material.DeadBrainCoralBlock; - for (int i = 12835; i <= 12836; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 12861; i <= 12868; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 12817; i <= 12818; i++) - materials[i] = Material.DeadBubbleCoral; - materials[12805] = Material.DeadBubbleCoralBlock; - for (int i = 12837; i <= 12838; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 12869; i <= 12876; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - materials[2007] = Material.DeadBush; - for (int i = 12819; i <= 12820; i++) - materials[i] = Material.DeadFireCoral; - materials[12806] = Material.DeadFireCoralBlock; - for (int i = 12839; i <= 12840; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 12877; i <= 12884; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 12821; i <= 12822; i++) - materials[i] = Material.DeadHornCoral; - materials[12807] = Material.DeadHornCoralBlock; - for (int i = 12841; i <= 12842; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 12885; i <= 12892; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 12813; i <= 12814; i++) - materials[i] = Material.DeadTubeCoral; - materials[12803] = Material.DeadTubeCoralBlock; - for (int i = 12833; i <= 12834; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 12853; i <= 12860; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 26574; i <= 26589; i++) - materials[i] = Material.DecoratedPot; - for (int i = 24904; i <= 24906; i++) - materials[i] = Material.Deepslate; - for (int i = 26221; i <= 26226; i++) - materials[i] = Material.DeepslateBrickSlab; - for (int i = 26141; i <= 26220; i++) - materials[i] = Material.DeepslateBrickStairs; - for (int i = 26227; i <= 26550; i++) - materials[i] = Material.DeepslateBrickWall; - materials[26140] = Material.DeepslateBricks; - materials[128] = Material.DeepslateCoalOre; - materials[22943] = Material.DeepslateCopperOre; - materials[4275] = Material.DeepslateDiamondOre; - materials[7512] = Material.DeepslateEmeraldOre; - materials[124] = Material.DeepslateGoldOre; - materials[126] = Material.DeepslateIronOre; - materials[521] = Material.DeepslateLapisOre; - for (int i = 5736; i <= 5737; i++) - materials[i] = Material.DeepslateRedstoneOre; - for (int i = 25810; i <= 25815; i++) - materials[i] = Material.DeepslateTileSlab; - for (int i = 25730; i <= 25809; i++) - materials[i] = Material.DeepslateTileStairs; - for (int i = 25816; i <= 26139; i++) - materials[i] = Material.DeepslateTileWall; - materials[25729] = Material.DeepslateTiles; - for (int i = 1968; i <= 1991; i++) - materials[i] = Material.DetectorRail; - materials[4276] = Material.DiamondBlock; - materials[4274] = Material.DiamondOre; - materials[4] = Material.Diorite; - for (int i = 14154; i <= 14159; i++) - materials[i] = Material.DioriteSlab; - for (int i = 14002; i <= 14081; i++) - materials[i] = Material.DioriteStairs; - for (int i = 18048; i <= 18371; i++) - materials[i] = Material.DioriteWall; - materials[10] = Material.Dirt; - materials[12513] = Material.DirtPath; - for (int i = 523; i <= 534; i++) - materials[i] = Material.Dispenser; - materials[7416] = Material.DragonEgg; - for (int i = 9027; i <= 9058; i++) - materials[i] = Material.DragonHead; - for (int i = 9059; i <= 9066; i++) - materials[i] = Material.DragonWallHead; - materials[12787] = Material.DriedKelpBlock; - materials[24768] = Material.DripstoneBlock; - for (int i = 9344; i <= 9355; i++) - materials[i] = Material.Dropper; - materials[7665] = Material.EmeraldBlock; - materials[7511] = Material.EmeraldOre; - materials[7389] = Material.EnchantingTable; - materials[12514] = Material.EndGateway; - materials[7406] = Material.EndPortal; - for (int i = 7407; i <= 7414; i++) - materials[i] = Material.EndPortalFrame; - for (int i = 12334; i <= 12339; i++) - materials[i] = Material.EndRod; - materials[7415] = Material.EndStone; - for (int i = 14112; i <= 14117; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 13362; i <= 13441; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 17724; i <= 18047; i++) - materials[i] = Material.EndStoneBrickWall; - materials[12494] = Material.EndStoneBricks; - for (int i = 7513; i <= 7520; i++) - materials[i] = Material.EnderChest; - materials[22950] = Material.ExposedChiseledCopper; - materials[22939] = Material.ExposedCopper; - for (int i = 24696; i <= 24699; i++) - materials[i] = Material.ExposedCopperBulb; - for (int i = 23716; i <= 23779; i++) - materials[i] = Material.ExposedCopperDoor; - for (int i = 24678; i <= 24679; i++) - materials[i] = Material.ExposedCopperGrate; - for (int i = 24228; i <= 24291; i++) - materials[i] = Material.ExposedCopperTrapdoor; - materials[22946] = Material.ExposedCutCopper; - for (int i = 23288; i <= 23293; i++) - materials[i] = Material.ExposedCutCopperSlab; - for (int i = 23116; i <= 23195; i++) - materials[i] = Material.ExposedCutCopperStairs; - for (int i = 4286; i <= 4293; i++) - materials[i] = Material.Farmland; - materials[2006] = Material.Fern; - for (int i = 2360; i <= 2871; i++) - materials[i] = Material.Fire; - for (int i = 12829; i <= 12830; i++) - materials[i] = Material.FireCoral; - materials[12811] = Material.FireCoralBlock; - for (int i = 12849; i <= 12850; i++) - materials[i] = Material.FireCoralFan; - for (int i = 12917; i <= 12924; i++) - materials[i] = Material.FireCoralWallFan; - materials[18437] = Material.FletchingTable; - materials[8567] = Material.FlowerPot; - materials[24825] = Material.FloweringAzalea; - for (int i = 489; i <= 516; i++) - materials[i] = Material.FloweringAzaleaLeaves; - materials[26572] = Material.Frogspawn; - for (int i = 12539; i <= 12542; i++) - materials[i] = Material.FrostedIce; - for (int i = 4294; i <= 4301; i++) - materials[i] = Material.Furnace; - materials[20285] = Material.GildedBlackstone; - materials[519] = Material.Glass; - for (int i = 6779; i <= 6810; i++) - materials[i] = Material.GlassPane; - for (int i = 6869; i <= 6996; i++) - materials[i] = Material.GlowLichen; - materials[5863] = Material.Glowstone; - materials[2091] = Material.GoldBlock; - materials[123] = Material.GoldOre; - materials[2] = Material.Granite; - for (int i = 14130; i <= 14135; i++) - materials[i] = Material.GraniteSlab; - for (int i = 13682; i <= 13761; i++) - materials[i] = Material.GraniteStairs; - for (int i = 15456; i <= 15779; i++) - materials[i] = Material.GraniteWall; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - materials[118] = Material.Gravel; - for (int i = 10871; i <= 10886; i++) - materials[i] = Material.GrayBanner; - for (int i = 1800; i <= 1815; i++) - materials[i] = Material.GrayBed; - for (int i = 20853; i <= 20868; i++) - materials[i] = Material.GrayCandle; - for (int i = 21013; i <= 21014; i++) - materials[i] = Material.GrayCandleCake; - materials[10735] = Material.GrayCarpet; - materials[12735] = Material.GrayConcrete; - materials[12751] = Material.GrayConcretePowder; - for (int i = 12692; i <= 12695; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 12610; i <= 12615; i++) - materials[i] = Material.GrayShulkerBox; - materials[5952] = Material.GrayStainedGlass; - for (int i = 9596; i <= 9627; i++) - materials[i] = Material.GrayStainedGlassPane; - materials[9363] = Material.GrayTerracotta; - for (int i = 11043; i <= 11046; i++) - materials[i] = Material.GrayWallBanner; - materials[2054] = Material.GrayWool; - for (int i = 10967; i <= 10982; i++) - materials[i] = Material.GreenBanner; - for (int i = 1896; i <= 1911; i++) - materials[i] = Material.GreenBed; - for (int i = 20949; i <= 20964; i++) - materials[i] = Material.GreenCandle; - for (int i = 21025; i <= 21026; i++) - materials[i] = Material.GreenCandleCake; - materials[10741] = Material.GreenCarpet; - materials[12741] = Material.GreenConcrete; - materials[12757] = Material.GreenConcretePowder; - for (int i = 12716; i <= 12719; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 12646; i <= 12651; i++) - materials[i] = Material.GreenShulkerBox; - materials[5958] = Material.GreenStainedGlass; - for (int i = 9788; i <= 9819; i++) - materials[i] = Material.GreenStainedGlassPane; - materials[9369] = Material.GreenTerracotta; - for (int i = 11067; i <= 11070; i++) - materials[i] = Material.GreenWallBanner; - materials[2060] = Material.GreenWool; - for (int i = 18438; i <= 18449; i++) - materials[i] = Material.Grindstone; - for (int i = 24900; i <= 24901; i++) - materials[i] = Material.HangingRoots; - for (int i = 10725; i <= 10727; i++) - materials[i] = Material.HayBlock; - for (int i = 26682; i <= 26683; i++) - materials[i] = Material.HeavyCore; - for (int i = 9159; i <= 9174; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - materials[19445] = Material.HoneyBlock; - materials[19446] = Material.HoneycombBlock; - for (int i = 9225; i <= 9234; i++) - materials[i] = Material.Hopper; - for (int i = 12831; i <= 12832; i++) - materials[i] = Material.HornCoral; - materials[12812] = Material.HornCoralBlock; - for (int i = 12851; i <= 12852; i++) - materials[i] = Material.HornCoralFan; - for (int i = 12925; i <= 12932; i++) - materials[i] = Material.HornCoralWallFan; - materials[5780] = Material.Ice; - materials[6548] = Material.InfestedChiseledStoneBricks; - materials[6544] = Material.InfestedCobblestone; - materials[6547] = Material.InfestedCrackedStoneBricks; - for (int i = 26554; i <= 26556; i++) - materials[i] = Material.InfestedDeepslate; - materials[6546] = Material.InfestedMossyStoneBricks; - materials[6543] = Material.InfestedStone; - materials[6545] = Material.InfestedStoneBricks; - for (int i = 6741; i <= 6772; i++) - materials[i] = Material.IronBars; - materials[2092] = Material.IronBlock; - for (int i = 5652; i <= 5715; i++) - materials[i] = Material.IronDoor; - materials[125] = Material.IronOre; - for (int i = 10399; i <= 10462; i++) - materials[i] = Material.IronTrapdoor; - for (int i = 5870; i <= 5873; i++) - materials[i] = Material.JackOLantern; - for (int i = 19360; i <= 19371; i++) - materials[i] = Material.Jigsaw; - for (int i = 5815; i <= 5816; i++) - materials[i] = Material.Jukebox; - for (int i = 8683; i <= 8706; i++) - materials[i] = Material.JungleButton; - for (int i = 11950; i <= 12013; i++) - materials[i] = Material.JungleDoor; - for (int i = 11630; i <= 11661; i++) - materials[i] = Material.JungleFence; - for (int i = 11374; i <= 11405; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 5154; i <= 5217; i++) - materials[i] = Material.JungleHangingSign; - for (int i = 321; i <= 348; i++) - materials[i] = Material.JungleLeaves; - for (int i = 139; i <= 141; i++) - materials[i] = Material.JungleLog; - materials[18] = Material.JunglePlanks; - for (int i = 5722; i <= 5723; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 31; i <= 32; i++) - materials[i] = Material.JungleSapling; - for (int i = 4462; i <= 4493; i++) - materials[i] = Material.JungleSign; - for (int i = 11180; i <= 11185; i++) - materials[i] = Material.JungleSlab; - for (int i = 7826; i <= 7905; i++) - materials[i] = Material.JungleStairs; - for (int i = 6153; i <= 6216; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 5578; i <= 5585; i++) - materials[i] = Material.JungleWallHangingSign; - for (int i = 4802; i <= 4809; i++) - materials[i] = Material.JungleWallSign; - for (int i = 198; i <= 200; i++) - materials[i] = Material.JungleWood; - for (int i = 12760; i <= 12785; i++) - materials[i] = Material.Kelp; - materials[12786] = Material.KelpPlant; - for (int i = 4654; i <= 4661; i++) - materials[i] = Material.Ladder; - for (int i = 18503; i <= 18506; i++) - materials[i] = Material.Lantern; - materials[522] = Material.LapisBlock; - materials[520] = Material.LapisOre; - for (int i = 21045; i <= 21056; i++) - materials[i] = Material.LargeAmethystBud; - for (int i = 10757; i <= 10758; i++) - materials[i] = Material.LargeFern; - for (int i = 96; i <= 111; i++) - materials[i] = Material.Lava; - materials[7402] = Material.LavaCauldron; - for (int i = 18450; i <= 18465; i++) - materials[i] = Material.Lectern; - for (int i = 5626; i <= 5649; i++) - materials[i] = Material.Lever; - for (int i = 10367; i <= 10398; i++) - materials[i] = Material.Light; - for (int i = 10807; i <= 10822; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 1736; i <= 1751; i++) - materials[i] = Material.LightBlueBed; - for (int i = 20789; i <= 20804; i++) - materials[i] = Material.LightBlueCandle; - for (int i = 21005; i <= 21006; i++) - materials[i] = Material.LightBlueCandleCake; - materials[10731] = Material.LightBlueCarpet; - materials[12731] = Material.LightBlueConcrete; - materials[12747] = Material.LightBlueConcretePowder; - for (int i = 12676; i <= 12679; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 12586; i <= 12591; i++) - materials[i] = Material.LightBlueShulkerBox; - materials[5948] = Material.LightBlueStainedGlass; - for (int i = 9468; i <= 9499; i++) - materials[i] = Material.LightBlueStainedGlassPane; - materials[9359] = Material.LightBlueTerracotta; - for (int i = 11027; i <= 11030; i++) - materials[i] = Material.LightBlueWallBanner; - materials[2050] = Material.LightBlueWool; - for (int i = 10887; i <= 10902; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 1816; i <= 1831; i++) - materials[i] = Material.LightGrayBed; - for (int i = 20869; i <= 20884; i++) - materials[i] = Material.LightGrayCandle; - for (int i = 21015; i <= 21016; i++) - materials[i] = Material.LightGrayCandleCake; - materials[10736] = Material.LightGrayCarpet; - materials[12736] = Material.LightGrayConcrete; - materials[12752] = Material.LightGrayConcretePowder; - for (int i = 12696; i <= 12699; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 12616; i <= 12621; i++) - materials[i] = Material.LightGrayShulkerBox; - materials[5953] = Material.LightGrayStainedGlass; - for (int i = 9628; i <= 9659; i++) - materials[i] = Material.LightGrayStainedGlassPane; - materials[9364] = Material.LightGrayTerracotta; - for (int i = 11047; i <= 11050; i++) - materials[i] = Material.LightGrayWallBanner; - materials[2055] = Material.LightGrayWool; - for (int i = 9143; i <= 9158; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 24724; i <= 24747; i++) - materials[i] = Material.LightningRod; - for (int i = 10749; i <= 10750; i++) - materials[i] = Material.Lilac; - materials[2088] = Material.LilyOfTheValley; - materials[7271] = Material.LilyPad; - for (int i = 10839; i <= 10854; i++) - materials[i] = Material.LimeBanner; - for (int i = 1768; i <= 1783; i++) - materials[i] = Material.LimeBed; - for (int i = 20821; i <= 20836; i++) - materials[i] = Material.LimeCandle; - for (int i = 21009; i <= 21010; i++) - materials[i] = Material.LimeCandleCake; - materials[10733] = Material.LimeCarpet; - materials[12733] = Material.LimeConcrete; - materials[12749] = Material.LimeConcretePowder; - for (int i = 12684; i <= 12687; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 12598; i <= 12603; i++) - materials[i] = Material.LimeShulkerBox; - materials[5950] = Material.LimeStainedGlass; - for (int i = 9532; i <= 9563; i++) - materials[i] = Material.LimeStainedGlassPane; - materials[9361] = Material.LimeTerracotta; - for (int i = 11035; i <= 11038; i++) - materials[i] = Material.LimeWallBanner; - materials[2052] = Material.LimeWool; - materials[19459] = Material.Lodestone; - for (int i = 18404; i <= 18407; i++) - materials[i] = Material.Loom; - for (int i = 10791; i <= 10806; i++) - materials[i] = Material.MagentaBanner; - for (int i = 1720; i <= 1735; i++) - materials[i] = Material.MagentaBed; - for (int i = 20773; i <= 20788; i++) - materials[i] = Material.MagentaCandle; - for (int i = 21003; i <= 21004; i++) - materials[i] = Material.MagentaCandleCake; - materials[10730] = Material.MagentaCarpet; - materials[12730] = Material.MagentaConcrete; - materials[12746] = Material.MagentaConcretePowder; - for (int i = 12672; i <= 12675; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 12580; i <= 12585; i++) - materials[i] = Material.MagentaShulkerBox; - materials[5947] = Material.MagentaStainedGlass; - for (int i = 9436; i <= 9467; i++) - materials[i] = Material.MagentaStainedGlassPane; - materials[9358] = Material.MagentaTerracotta; - for (int i = 11023; i <= 11026; i++) - materials[i] = Material.MagentaWallBanner; - materials[2049] = Material.MagentaWool; - materials[12543] = Material.MagmaBlock; - for (int i = 8779; i <= 8802; i++) - materials[i] = Material.MangroveButton; - for (int i = 12206; i <= 12269; i++) - materials[i] = Material.MangroveDoor; - for (int i = 11758; i <= 11789; i++) - materials[i] = Material.MangroveFence; - for (int i = 11502; i <= 11533; i++) - materials[i] = Material.MangroveFenceGate; - for (int i = 5410; i <= 5473; i++) - materials[i] = Material.MangroveHangingSign; - for (int i = 433; i <= 460; i++) - materials[i] = Material.MangroveLeaves; - for (int i = 151; i <= 153; i++) - materials[i] = Material.MangroveLog; - materials[22] = Material.MangrovePlanks; - for (int i = 5730; i <= 5731; i++) - materials[i] = Material.MangrovePressurePlate; - for (int i = 39; i <= 78; i++) - materials[i] = Material.MangrovePropagule; - for (int i = 154; i <= 155; i++) - materials[i] = Material.MangroveRoots; - for (int i = 4526; i <= 4557; i++) - materials[i] = Material.MangroveSign; - for (int i = 11204; i <= 11209; i++) - materials[i] = Material.MangroveSlab; - for (int i = 10124; i <= 10203; i++) - materials[i] = Material.MangroveStairs; - for (int i = 6409; i <= 6472; i++) - materials[i] = Material.MangroveTrapdoor; - for (int i = 5594; i <= 5601; i++) - materials[i] = Material.MangroveWallHangingSign; - for (int i = 4818; i <= 4825; i++) - materials[i] = Material.MangroveWallSign; - for (int i = 210; i <= 212; i++) - materials[i] = Material.MangroveWood; - for (int i = 21057; i <= 21068; i++) - materials[i] = Material.MediumAmethystBud; - materials[6812] = Material.Melon; - for (int i = 6829; i <= 6836; i++) - materials[i] = Material.MelonStem; - materials[24843] = Material.MossBlock; - materials[24826] = Material.MossCarpet; - materials[2353] = Material.MossyCobblestone; - for (int i = 14106; i <= 14111; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 13282; i <= 13361; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 8243; i <= 8566; i++) - materials[i] = Material.MossyCobblestoneWall; - for (int i = 14094; i <= 14099; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 13122; i <= 13201; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 15132; i <= 15455; i++) - materials[i] = Material.MossyStoneBrickWall; - materials[6538] = Material.MossyStoneBricks; - for (int i = 2063; i <= 2074; i++) - materials[i] = Material.MovingPiston; - materials[24903] = Material.Mud; - for (int i = 11270; i <= 11275; i++) - materials[i] = Material.MudBrickSlab; - for (int i = 7189; i <= 7268; i++) - materials[i] = Material.MudBrickStairs; - for (int i = 16104; i <= 16427; i++) - materials[i] = Material.MudBrickWall; - materials[6542] = Material.MudBricks; - for (int i = 156; i <= 158; i++) - materials[i] = Material.MuddyMangroveRoots; - for (int i = 6677; i <= 6740; i++) - materials[i] = Material.MushroomStem; - for (int i = 7269; i <= 7270; i++) - materials[i] = Material.Mycelium; - for (int i = 7273; i <= 7304; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 11276; i <= 11281; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 7305; i <= 7384; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 16428; i <= 16751; i++) - materials[i] = Material.NetherBrickWall; - materials[7272] = Material.NetherBricks; - materials[129] = Material.NetherGoldOre; - for (int i = 5864; i <= 5865; i++) - materials[i] = Material.NetherPortal; - materials[9224] = Material.NetherQuartzOre; - materials[18595] = Material.NetherSprouts; - for (int i = 7385; i <= 7388; i++) - materials[i] = Material.NetherWart; - materials[12544] = Material.NetherWartBlock; - materials[19447] = Material.NetheriteBlock; - materials[5849] = Material.Netherrack; - for (int i = 538; i <= 1687; i++) - materials[i] = Material.NoteBlock; - for (int i = 8611; i <= 8634; i++) - materials[i] = Material.OakButton; - for (int i = 4590; i <= 4653; i++) - materials[i] = Material.OakDoor; - for (int i = 5817; i <= 5848; i++) - materials[i] = Material.OakFence; - for (int i = 6997; i <= 7028; i++) - materials[i] = Material.OakFenceGate; - for (int i = 4834; i <= 4897; i++) - materials[i] = Material.OakHangingSign; - for (int i = 237; i <= 264; i++) - materials[i] = Material.OakLeaves; - for (int i = 130; i <= 132; i++) - materials[i] = Material.OakLog; - materials[15] = Material.OakPlanks; - for (int i = 5716; i <= 5717; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 25; i <= 26; i++) - materials[i] = Material.OakSapling; - for (int i = 4302; i <= 4333; i++) - materials[i] = Material.OakSign; - for (int i = 11162; i <= 11167; i++) - materials[i] = Material.OakSlab; - for (int i = 2874; i <= 2953; i++) - materials[i] = Material.OakStairs; - for (int i = 5961; i <= 6024; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 5538; i <= 5545; i++) - materials[i] = Material.OakWallHangingSign; - for (int i = 4762; i <= 4769; i++) - materials[i] = Material.OakWallSign; - for (int i = 189; i <= 191; i++) - materials[i] = Material.OakWood; - for (int i = 12550; i <= 12561; i++) - materials[i] = Material.Observer; - materials[2354] = Material.Obsidian; - for (int i = 26563; i <= 26565; i++) - materials[i] = Material.OchreFroglight; - for (int i = 10775; i <= 10790; i++) - materials[i] = Material.OrangeBanner; - for (int i = 1704; i <= 1719; i++) - materials[i] = Material.OrangeBed; - for (int i = 20757; i <= 20772; i++) - materials[i] = Material.OrangeCandle; - for (int i = 21001; i <= 21002; i++) - materials[i] = Material.OrangeCandleCake; - materials[10729] = Material.OrangeCarpet; - materials[12729] = Material.OrangeConcrete; - materials[12745] = Material.OrangeConcretePowder; - for (int i = 12668; i <= 12671; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 12574; i <= 12579; i++) - materials[i] = Material.OrangeShulkerBox; - materials[5946] = Material.OrangeStainedGlass; - for (int i = 9404; i <= 9435; i++) - materials[i] = Material.OrangeStainedGlassPane; - materials[9357] = Material.OrangeTerracotta; - materials[2082] = Material.OrangeTulip; - for (int i = 11019; i <= 11022; i++) - materials[i] = Material.OrangeWallBanner; - materials[2048] = Material.OrangeWool; - materials[2085] = Material.OxeyeDaisy; - materials[22948] = Material.OxidizedChiseledCopper; - materials[22941] = Material.OxidizedCopper; - for (int i = 24704; i <= 24707; i++) - materials[i] = Material.OxidizedCopperBulb; - for (int i = 23780; i <= 23843; i++) - materials[i] = Material.OxidizedCopperDoor; - for (int i = 24682; i <= 24683; i++) - materials[i] = Material.OxidizedCopperGrate; - for (int i = 24292; i <= 24355; i++) - materials[i] = Material.OxidizedCopperTrapdoor; - materials[22944] = Material.OxidizedCutCopper; - for (int i = 23276; i <= 23281; i++) - materials[i] = Material.OxidizedCutCopperSlab; - for (int i = 22956; i <= 23035; i++) - materials[i] = Material.OxidizedCutCopperStairs; - materials[10746] = Material.PackedIce; - materials[6541] = Material.PackedMud; - for (int i = 26569; i <= 26571; i++) - materials[i] = Material.PearlescentFroglight; - for (int i = 10753; i <= 10754; i++) - materials[i] = Material.Peony; - for (int i = 11246; i <= 11251; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 9067; i <= 9098; i++) - materials[i] = Material.PiglinHead; - for (int i = 9099; i <= 9106; i++) - materials[i] = Material.PiglinWallHead; - for (int i = 10855; i <= 10870; i++) - materials[i] = Material.PinkBanner; - for (int i = 1784; i <= 1799; i++) - materials[i] = Material.PinkBed; - for (int i = 20837; i <= 20852; i++) - materials[i] = Material.PinkCandle; - for (int i = 21011; i <= 21012; i++) - materials[i] = Material.PinkCandleCake; - materials[10734] = Material.PinkCarpet; - materials[12734] = Material.PinkConcrete; - materials[12750] = Material.PinkConcretePowder; - for (int i = 12688; i <= 12691; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 24827; i <= 24842; i++) - materials[i] = Material.PinkPetals; - for (int i = 12604; i <= 12609; i++) - materials[i] = Material.PinkShulkerBox; - materials[5951] = Material.PinkStainedGlass; - for (int i = 9564; i <= 9595; i++) - materials[i] = Material.PinkStainedGlassPane; - materials[9362] = Material.PinkTerracotta; - materials[2084] = Material.PinkTulip; - for (int i = 11039; i <= 11042; i++) - materials[i] = Material.PinkWallBanner; - materials[2053] = Material.PinkWool; - for (int i = 2011; i <= 2022; i++) - materials[i] = Material.Piston; - for (int i = 2023; i <= 2046; i++) - materials[i] = Material.PistonHead; - for (int i = 12497; i <= 12506; i++) - materials[i] = Material.PitcherCrop; - for (int i = 12507; i <= 12508; i++) - materials[i] = Material.PitcherPlant; - for (int i = 8947; i <= 8978; i++) - materials[i] = Material.PlayerHead; - for (int i = 8979; i <= 8986; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - for (int i = 24748; i <= 24767; i++) - materials[i] = Material.PointedDripstone; - materials[7] = Material.PolishedAndesite; - for (int i = 14148; i <= 14153; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 13922; i <= 14001; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 5855; i <= 5857; i++) - materials[i] = Material.PolishedBasalt; - materials[19871] = Material.PolishedBlackstone; - for (int i = 19875; i <= 19880; i++) - materials[i] = Material.PolishedBlackstoneBrickSlab; - for (int i = 19881; i <= 19960; i++) - materials[i] = Material.PolishedBlackstoneBrickStairs; - for (int i = 19961; i <= 20284; i++) - materials[i] = Material.PolishedBlackstoneBrickWall; - materials[19872] = Material.PolishedBlackstoneBricks; - for (int i = 20374; i <= 20397; i++) - materials[i] = Material.PolishedBlackstoneButton; - for (int i = 20372; i <= 20373; i++) - materials[i] = Material.PolishedBlackstonePressurePlate; - for (int i = 20366; i <= 20371; i++) - materials[i] = Material.PolishedBlackstoneSlab; - for (int i = 20286; i <= 20365; i++) - materials[i] = Material.PolishedBlackstoneStairs; - for (int i = 20398; i <= 20721; i++) - materials[i] = Material.PolishedBlackstoneWall; - materials[25318] = Material.PolishedDeepslate; - for (int i = 25399; i <= 25404; i++) - materials[i] = Material.PolishedDeepslateSlab; - for (int i = 25319; i <= 25398; i++) - materials[i] = Material.PolishedDeepslateStairs; - for (int i = 25405; i <= 25728; i++) - materials[i] = Material.PolishedDeepslateWall; - materials[5] = Material.PolishedDiorite; - for (int i = 14100; i <= 14105; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 13202; i <= 13281; i++) - materials[i] = Material.PolishedDioriteStairs; - materials[3] = Material.PolishedGranite; - for (int i = 14082; i <= 14087; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 12962; i <= 13041; i++) - materials[i] = Material.PolishedGraniteStairs; - materials[21492] = Material.PolishedTuff; - for (int i = 21493; i <= 21498; i++) - materials[i] = Material.PolishedTuffSlab; - for (int i = 21499; i <= 21578; i++) - materials[i] = Material.PolishedTuffStairs; - for (int i = 21579; i <= 21902; i++) - materials[i] = Material.PolishedTuffWall; - materials[2077] = Material.Poppy; - for (int i = 8603; i <= 8610; i++) - materials[i] = Material.Potatoes; - materials[8573] = Material.PottedAcaciaSapling; - materials[8581] = Material.PottedAllium; - materials[26561] = Material.PottedAzaleaBush; - materials[8582] = Material.PottedAzureBluet; - materials[12957] = Material.PottedBamboo; - materials[8571] = Material.PottedBirchSapling; - materials[8580] = Material.PottedBlueOrchid; - materials[8592] = Material.PottedBrownMushroom; - materials[8594] = Material.PottedCactus; - materials[8574] = Material.PottedCherrySapling; - materials[8588] = Material.PottedCornflower; - materials[19455] = Material.PottedCrimsonFungus; - materials[19457] = Material.PottedCrimsonRoots; - materials[8578] = Material.PottedDandelion; - materials[8575] = Material.PottedDarkOakSapling; - materials[8593] = Material.PottedDeadBush; - materials[8577] = Material.PottedFern; - materials[26562] = Material.PottedFloweringAzaleaBush; - materials[8572] = Material.PottedJungleSapling; - materials[8589] = Material.PottedLilyOfTheValley; - materials[8576] = Material.PottedMangrovePropagule; - materials[8569] = Material.PottedOakSapling; - materials[8584] = Material.PottedOrangeTulip; - materials[8587] = Material.PottedOxeyeDaisy; - materials[8586] = Material.PottedPinkTulip; - materials[8579] = Material.PottedPoppy; - materials[8591] = Material.PottedRedMushroom; - materials[8583] = Material.PottedRedTulip; - materials[8570] = Material.PottedSpruceSapling; - materials[8568] = Material.PottedTorchflower; - materials[19456] = Material.PottedWarpedFungus; - materials[19458] = Material.PottedWarpedRoots; - materials[8585] = Material.PottedWhiteTulip; - materials[8590] = Material.PottedWitherRose; - materials[22318] = Material.PowderSnow; - for (int i = 7403; i <= 7405; i++) - materials[i] = Material.PowderSnowCauldron; - for (int i = 1944; i <= 1967; i++) - materials[i] = Material.PoweredRail; - materials[10463] = Material.Prismarine; - for (int i = 10712; i <= 10717; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 10546; i <= 10625; i++) - materials[i] = Material.PrismarineBrickStairs; - materials[10464] = Material.PrismarineBricks; - for (int i = 10706; i <= 10711; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 10466; i <= 10545; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 14484; i <= 14807; i++) - materials[i] = Material.PrismarineWall; - materials[6811] = Material.Pumpkin; - for (int i = 6821; i <= 6828; i++) - materials[i] = Material.PumpkinStem; - for (int i = 10919; i <= 10934; i++) - materials[i] = Material.PurpleBanner; - for (int i = 1848; i <= 1863; i++) - materials[i] = Material.PurpleBed; - for (int i = 20901; i <= 20916; i++) - materials[i] = Material.PurpleCandle; - for (int i = 21019; i <= 21020; i++) - materials[i] = Material.PurpleCandleCake; - materials[10738] = Material.PurpleCarpet; - materials[12738] = Material.PurpleConcrete; - materials[12754] = Material.PurpleConcretePowder; - for (int i = 12704; i <= 12707; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 12628; i <= 12633; i++) - materials[i] = Material.PurpleShulkerBox; - materials[5955] = Material.PurpleStainedGlass; - for (int i = 9692; i <= 9723; i++) - materials[i] = Material.PurpleStainedGlassPane; - materials[9366] = Material.PurpleTerracotta; - for (int i = 11055; i <= 11058; i++) - materials[i] = Material.PurpleWallBanner; - materials[2057] = Material.PurpleWool; - materials[12410] = Material.PurpurBlock; - for (int i = 12411; i <= 12413; i++) - materials[i] = Material.PurpurPillar; - for (int i = 11300; i <= 11305; i++) - materials[i] = Material.PurpurSlab; - for (int i = 12414; i <= 12493; i++) - materials[i] = Material.PurpurStairs; - materials[9235] = Material.QuartzBlock; - materials[20724] = Material.QuartzBricks; - for (int i = 9237; i <= 9239; i++) - materials[i] = Material.QuartzPillar; - for (int i = 11282; i <= 11287; i++) - materials[i] = Material.QuartzSlab; - for (int i = 9240; i <= 9319; i++) - materials[i] = Material.QuartzStairs; - for (int i = 4662; i <= 4681; i++) - materials[i] = Material.Rail; - materials[26559] = Material.RawCopperBlock; - materials[26560] = Material.RawGoldBlock; - materials[26558] = Material.RawIronBlock; - for (int i = 10983; i <= 10998; i++) - materials[i] = Material.RedBanner; - for (int i = 1912; i <= 1927; i++) - materials[i] = Material.RedBed; - for (int i = 20965; i <= 20980; i++) - materials[i] = Material.RedCandle; - for (int i = 21027; i <= 21028; i++) - materials[i] = Material.RedCandleCake; - materials[10742] = Material.RedCarpet; - materials[12742] = Material.RedConcrete; - materials[12758] = Material.RedConcretePowder; - for (int i = 12720; i <= 12723; i++) - materials[i] = Material.RedGlazedTerracotta; - materials[2090] = Material.RedMushroom; - for (int i = 6613; i <= 6676; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 14142; i <= 14147; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 13842; i <= 13921; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 17076; i <= 17399; i++) - materials[i] = Material.RedNetherBrickWall; - materials[12545] = Material.RedNetherBricks; - materials[117] = Material.RedSand; - materials[11079] = Material.RedSandstone; - for (int i = 11288; i <= 11293; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 11082; i <= 11161; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 14808; i <= 15131; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 12652; i <= 12657; i++) - materials[i] = Material.RedShulkerBox; - materials[5959] = Material.RedStainedGlass; - for (int i = 9820; i <= 9851; i++) - materials[i] = Material.RedStainedGlassPane; - materials[9370] = Material.RedTerracotta; - materials[2081] = Material.RedTulip; - for (int i = 11071; i <= 11074; i++) - materials[i] = Material.RedWallBanner; - materials[2061] = Material.RedWool; - materials[9223] = Material.RedstoneBlock; - for (int i = 7417; i <= 7418; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 5734; i <= 5735; i++) - materials[i] = Material.RedstoneOre; - for (int i = 5738; i <= 5739; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 5740; i <= 5747; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 2978; i <= 4273; i++) - materials[i] = Material.RedstoneWire; - materials[26573] = Material.ReinforcedDeepslate; - for (int i = 5881; i <= 5944; i++) - materials[i] = Material.Repeater; - for (int i = 12515; i <= 12526; i++) - materials[i] = Material.RepeatingCommandBlock; - for (int i = 19450; i <= 19454; i++) - materials[i] = Material.RespawnAnchor; - materials[24902] = Material.RootedDirt; - for (int i = 10751; i <= 10752; i++) - materials[i] = Material.RoseBush; - materials[112] = Material.Sand; - materials[535] = Material.Sandstone; - for (int i = 11234; i <= 11239; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 7431; i <= 7510; i++) - materials[i] = Material.SandstoneStairs; - for (int i = 17400; i <= 17723; i++) - materials[i] = Material.SandstoneWall; - for (int i = 18372; i <= 18403; i++) - materials[i] = Material.Scaffolding; - materials[22799] = Material.Sculk; - for (int i = 22928; i <= 22929; i++) - materials[i] = Material.SculkCatalyst; - for (int i = 22319; i <= 22414; i++) - materials[i] = Material.SculkSensor; - for (int i = 22930; i <= 22937; i++) - materials[i] = Material.SculkShrieker; - for (int i = 22800; i <= 22927; i++) - materials[i] = Material.SculkVein; - materials[10724] = Material.SeaLantern; - for (int i = 12933; i <= 12940; i++) - materials[i] = Material.SeaPickle; - materials[2008] = Material.Seagrass; - materials[2005] = Material.ShortGrass; - materials[18610] = Material.Shroomlight; - for (int i = 12562; i <= 12567; i++) - materials[i] = Material.ShulkerBox; - for (int i = 8827; i <= 8858; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 8859; i <= 8866; i++) - materials[i] = Material.SkeletonWallSkull; - materials[10364] = Material.SlimeBlock; - for (int i = 21069; i <= 21080; i++) - materials[i] = Material.SmallAmethystBud; - for (int i = 24884; i <= 24899; i++) - materials[i] = Material.SmallDripleaf; - materials[18466] = Material.SmithingTable; - for (int i = 18420; i <= 18427; i++) - materials[i] = Material.Smoker; - materials[26557] = Material.SmoothBasalt; - materials[11308] = Material.SmoothQuartz; - for (int i = 14124; i <= 14129; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 13602; i <= 13681; i++) - materials[i] = Material.SmoothQuartzStairs; - materials[11309] = Material.SmoothRedSandstone; - for (int i = 14088; i <= 14093; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 13042; i <= 13121; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - materials[11307] = Material.SmoothSandstone; - for (int i = 14118; i <= 14123; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 13522; i <= 13601; i++) - materials[i] = Material.SmoothSandstoneStairs; - materials[11306] = Material.SmoothStone; - for (int i = 11228; i <= 11233; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 12800; i <= 12802; i++) - materials[i] = Material.SnifferEgg; - for (int i = 5772; i <= 5779; i++) - materials[i] = Material.Snow; - materials[5781] = Material.SnowBlock; - for (int i = 18543; i <= 18574; i++) - materials[i] = Material.SoulCampfire; - materials[2872] = Material.SoulFire; - for (int i = 18507; i <= 18510; i++) - materials[i] = Material.SoulLantern; - materials[5850] = Material.SoulSand; - materials[5851] = Material.SoulSoil; - materials[5858] = Material.SoulTorch; - for (int i = 5859; i <= 5862; i++) - materials[i] = Material.SoulWallTorch; - materials[2873] = Material.Spawner; - materials[517] = Material.Sponge; - materials[24823] = Material.SporeBlossom; - for (int i = 8635; i <= 8658; i++) - materials[i] = Material.SpruceButton; - for (int i = 11822; i <= 11885; i++) - materials[i] = Material.SpruceDoor; - for (int i = 11566; i <= 11597; i++) - materials[i] = Material.SpruceFence; - for (int i = 11310; i <= 11341; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 4898; i <= 4961; i++) - materials[i] = Material.SpruceHangingSign; - for (int i = 265; i <= 292; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 133; i <= 135; i++) - materials[i] = Material.SpruceLog; - materials[16] = Material.SprucePlanks; - for (int i = 5718; i <= 5719; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 27; i <= 28; i++) - materials[i] = Material.SpruceSapling; - for (int i = 4334; i <= 4365; i++) - materials[i] = Material.SpruceSign; - for (int i = 11168; i <= 11173; i++) - materials[i] = Material.SpruceSlab; - for (int i = 7666; i <= 7745; i++) - materials[i] = Material.SpruceStairs; - for (int i = 6025; i <= 6088; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 5546; i <= 5553; i++) - materials[i] = Material.SpruceWallHangingSign; - for (int i = 4770; i <= 4777; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 192; i <= 194; i++) - materials[i] = Material.SpruceWood; - for (int i = 1992; i <= 2003; i++) - materials[i] = Material.StickyPiston; - materials[1] = Material.Stone; - for (int i = 11264; i <= 11269; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 7109; i <= 7188; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 15780; i <= 16103; i++) - materials[i] = Material.StoneBrickWall; - materials[6537] = Material.StoneBricks; - for (int i = 5748; i <= 5771; i++) - materials[i] = Material.StoneButton; - for (int i = 5650; i <= 5651; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 11222; i <= 11227; i++) - materials[i] = Material.StoneSlab; - for (int i = 13442; i <= 13521; i++) - materials[i] = Material.StoneStairs; - for (int i = 18467; i <= 18470; i++) - materials[i] = Material.Stonecutter; - for (int i = 171; i <= 173; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 225; i <= 227; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 186; i <= 188; i++) - materials[i] = Material.StrippedBambooBlock; - for (int i = 165; i <= 167; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 219; i <= 221; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 174; i <= 176; i++) - materials[i] = Material.StrippedCherryLog; - for (int i = 228; i <= 230; i++) - materials[i] = Material.StrippedCherryWood; - for (int i = 18605; i <= 18607; i++) - materials[i] = Material.StrippedCrimsonHyphae; - for (int i = 18599; i <= 18601; i++) - materials[i] = Material.StrippedCrimsonStem; - for (int i = 177; i <= 179; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 231; i <= 233; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 168; i <= 170; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 222; i <= 224; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 183; i <= 185; i++) - materials[i] = Material.StrippedMangroveLog; - for (int i = 234; i <= 236; i++) - materials[i] = Material.StrippedMangroveWood; - for (int i = 180; i <= 182; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 213; i <= 215; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 162; i <= 164; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 216; i <= 218; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 18588; i <= 18590; i++) - materials[i] = Material.StrippedWarpedHyphae; - for (int i = 18582; i <= 18584; i++) - materials[i] = Material.StrippedWarpedStem; - for (int i = 19356; i <= 19359; i++) - materials[i] = Material.StructureBlock; - materials[12549] = Material.StructureVoid; - for (int i = 5799; i <= 5814; i++) - materials[i] = Material.SugarCane; - for (int i = 10747; i <= 10748; i++) - materials[i] = Material.Sunflower; - for (int i = 119; i <= 122; i++) - materials[i] = Material.SuspiciousGravel; - for (int i = 113; i <= 116; i++) - materials[i] = Material.SuspiciousSand; - for (int i = 18575; i <= 18578; i++) - materials[i] = Material.SweetBerryBush; - for (int i = 10755; i <= 10756; i++) - materials[i] = Material.TallGrass; - for (int i = 2009; i <= 2010; i++) - materials[i] = Material.TallSeagrass; - for (int i = 19381; i <= 19396; i++) - materials[i] = Material.Target; - materials[10744] = Material.Terracotta; - materials[22317] = Material.TintedGlass; - for (int i = 2094; i <= 2095; i++) - materials[i] = Material.Tnt; - materials[2355] = Material.Torch; - materials[2076] = Material.Torchflower; - for (int i = 12495; i <= 12496; i++) - materials[i] = Material.TorchflowerCrop; - for (int i = 9119; i <= 9142; i++) - materials[i] = Material.TrappedChest; - for (int i = 26638; i <= 26649; i++) - materials[i] = Material.TrialSpawner; - for (int i = 7537; i <= 7664; i++) - materials[i] = Material.Tripwire; - for (int i = 7521; i <= 7536; i++) - materials[i] = Material.TripwireHook; - for (int i = 12823; i <= 12824; i++) - materials[i] = Material.TubeCoral; - materials[12808] = Material.TubeCoralBlock; - for (int i = 12843; i <= 12844; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 12893; i <= 12900; i++) - materials[i] = Material.TubeCoralWallFan; - materials[21081] = Material.Tuff; - for (int i = 21905; i <= 21910; i++) - materials[i] = Material.TuffBrickSlab; - for (int i = 21911; i <= 21990; i++) - materials[i] = Material.TuffBrickStairs; - for (int i = 21991; i <= 22314; i++) - materials[i] = Material.TuffBrickWall; - materials[21904] = Material.TuffBricks; - for (int i = 21082; i <= 21087; i++) - materials[i] = Material.TuffSlab; - for (int i = 21088; i <= 21167; i++) - materials[i] = Material.TuffStairs; - for (int i = 21168; i <= 21491; i++) - materials[i] = Material.TuffWall; - for (int i = 12788; i <= 12799; i++) - materials[i] = Material.TurtleEgg; - for (int i = 18638; i <= 18663; i++) - materials[i] = Material.TwistingVines; - materials[18664] = Material.TwistingVinesPlant; - for (int i = 26650; i <= 26681; i++) - materials[i] = Material.Vault; - for (int i = 26566; i <= 26568; i++) - materials[i] = Material.VerdantFroglight; - for (int i = 6837; i <= 6868; i++) - materials[i] = Material.Vine; - materials[12958] = Material.VoidAir; - for (int i = 2356; i <= 2359; i++) - materials[i] = Material.WallTorch; - for (int i = 19124; i <= 19147; i++) - materials[i] = Material.WarpedButton; - for (int i = 19212; i <= 19275; i++) - materials[i] = Material.WarpedDoor; - for (int i = 18716; i <= 18747; i++) - materials[i] = Material.WarpedFence; - for (int i = 18908; i <= 18939; i++) - materials[i] = Material.WarpedFenceGate; - materials[18592] = Material.WarpedFungus; - for (int i = 5346; i <= 5409; i++) - materials[i] = Material.WarpedHangingSign; - for (int i = 18585; i <= 18587; i++) - materials[i] = Material.WarpedHyphae; - materials[18591] = Material.WarpedNylium; - materials[18667] = Material.WarpedPlanks; - for (int i = 18682; i <= 18683; i++) - materials[i] = Material.WarpedPressurePlate; - materials[18594] = Material.WarpedRoots; - for (int i = 19308; i <= 19339; i++) - materials[i] = Material.WarpedSign; - for (int i = 18674; i <= 18679; i++) - materials[i] = Material.WarpedSlab; - for (int i = 19020; i <= 19099; i++) - materials[i] = Material.WarpedStairs; - for (int i = 18579; i <= 18581; i++) - materials[i] = Material.WarpedStem; - for (int i = 18812; i <= 18875; i++) - materials[i] = Material.WarpedTrapdoor; - for (int i = 5610; i <= 5617; i++) - materials[i] = Material.WarpedWallHangingSign; - for (int i = 19348; i <= 19355; i++) - materials[i] = Material.WarpedWallSign; - materials[18593] = Material.WarpedWartBlock; - for (int i = 80; i <= 95; i++) - materials[i] = Material.Water; - for (int i = 7399; i <= 7401; i++) - materials[i] = Material.WaterCauldron; - materials[22955] = Material.WaxedChiseledCopper; - materials[23300] = Material.WaxedCopperBlock; - for (int i = 24708; i <= 24711; i++) - materials[i] = Material.WaxedCopperBulb; - for (int i = 23908; i <= 23971; i++) - materials[i] = Material.WaxedCopperDoor; - for (int i = 24684; i <= 24685; i++) - materials[i] = Material.WaxedCopperGrate; - for (int i = 24420; i <= 24483; i++) - materials[i] = Material.WaxedCopperTrapdoor; - materials[23307] = Material.WaxedCutCopper; - for (int i = 23646; i <= 23651; i++) - materials[i] = Material.WaxedCutCopperSlab; - for (int i = 23548; i <= 23627; i++) - materials[i] = Material.WaxedCutCopperStairs; - materials[22954] = Material.WaxedExposedChiseledCopper; - materials[23302] = Material.WaxedExposedCopper; - for (int i = 24712; i <= 24715; i++) - materials[i] = Material.WaxedExposedCopperBulb; - for (int i = 23972; i <= 24035; i++) - materials[i] = Material.WaxedExposedCopperDoor; - for (int i = 24686; i <= 24687; i++) - materials[i] = Material.WaxedExposedCopperGrate; - for (int i = 24484; i <= 24547; i++) - materials[i] = Material.WaxedExposedCopperTrapdoor; - materials[23306] = Material.WaxedExposedCutCopper; - for (int i = 23640; i <= 23645; i++) - materials[i] = Material.WaxedExposedCutCopperSlab; - for (int i = 23468; i <= 23547; i++) - materials[i] = Material.WaxedExposedCutCopperStairs; - materials[22952] = Material.WaxedOxidizedChiseledCopper; - materials[23303] = Material.WaxedOxidizedCopper; - for (int i = 24720; i <= 24723; i++) - materials[i] = Material.WaxedOxidizedCopperBulb; - for (int i = 24036; i <= 24099; i++) - materials[i] = Material.WaxedOxidizedCopperDoor; - for (int i = 24690; i <= 24691; i++) - materials[i] = Material.WaxedOxidizedCopperGrate; - for (int i = 24548; i <= 24611; i++) - materials[i] = Material.WaxedOxidizedCopperTrapdoor; - materials[23304] = Material.WaxedOxidizedCutCopper; - for (int i = 23628; i <= 23633; i++) - materials[i] = Material.WaxedOxidizedCutCopperSlab; - for (int i = 23308; i <= 23387; i++) - materials[i] = Material.WaxedOxidizedCutCopperStairs; - materials[22953] = Material.WaxedWeatheredChiseledCopper; - materials[23301] = Material.WaxedWeatheredCopper; - for (int i = 24716; i <= 24719; i++) - materials[i] = Material.WaxedWeatheredCopperBulb; - for (int i = 24100; i <= 24163; i++) - materials[i] = Material.WaxedWeatheredCopperDoor; - for (int i = 24688; i <= 24689; i++) - materials[i] = Material.WaxedWeatheredCopperGrate; - for (int i = 24612; i <= 24675; i++) - materials[i] = Material.WaxedWeatheredCopperTrapdoor; - materials[23305] = Material.WaxedWeatheredCutCopper; - for (int i = 23634; i <= 23639; i++) - materials[i] = Material.WaxedWeatheredCutCopperSlab; - for (int i = 23388; i <= 23467; i++) - materials[i] = Material.WaxedWeatheredCutCopperStairs; - materials[22949] = Material.WeatheredChiseledCopper; - materials[22940] = Material.WeatheredCopper; - for (int i = 24700; i <= 24703; i++) - materials[i] = Material.WeatheredCopperBulb; - for (int i = 23844; i <= 23907; i++) - materials[i] = Material.WeatheredCopperDoor; - for (int i = 24680; i <= 24681; i++) - materials[i] = Material.WeatheredCopperGrate; - for (int i = 24356; i <= 24419; i++) - materials[i] = Material.WeatheredCopperTrapdoor; - materials[22945] = Material.WeatheredCutCopper; - for (int i = 23282; i <= 23287; i++) - materials[i] = Material.WeatheredCutCopperSlab; - for (int i = 23036; i <= 23115; i++) - materials[i] = Material.WeatheredCutCopperStairs; - for (int i = 18611; i <= 18636; i++) - materials[i] = Material.WeepingVines; - materials[18637] = Material.WeepingVinesPlant; - materials[518] = Material.WetSponge; - for (int i = 4278; i <= 4285; i++) - materials[i] = Material.Wheat; - for (int i = 10759; i <= 10774; i++) - materials[i] = Material.WhiteBanner; - for (int i = 1688; i <= 1703; i++) - materials[i] = Material.WhiteBed; - for (int i = 20741; i <= 20756; i++) - materials[i] = Material.WhiteCandle; - for (int i = 20999; i <= 21000; i++) - materials[i] = Material.WhiteCandleCake; - materials[10728] = Material.WhiteCarpet; - materials[12728] = Material.WhiteConcrete; - materials[12744] = Material.WhiteConcretePowder; - for (int i = 12664; i <= 12667; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 12568; i <= 12573; i++) - materials[i] = Material.WhiteShulkerBox; - materials[5945] = Material.WhiteStainedGlass; - for (int i = 9372; i <= 9403; i++) - materials[i] = Material.WhiteStainedGlassPane; - materials[9356] = Material.WhiteTerracotta; - materials[2083] = Material.WhiteTulip; - for (int i = 11015; i <= 11018; i++) - materials[i] = Material.WhiteWallBanner; - materials[2047] = Material.WhiteWool; - materials[2087] = Material.WitherRose; - for (int i = 8867; i <= 8898; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 8899; i <= 8906; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 10823; i <= 10838; i++) - materials[i] = Material.YellowBanner; - for (int i = 1752; i <= 1767; i++) - materials[i] = Material.YellowBed; - for (int i = 20805; i <= 20820; i++) - materials[i] = Material.YellowCandle; - for (int i = 21007; i <= 21008; i++) - materials[i] = Material.YellowCandleCake; - materials[10732] = Material.YellowCarpet; - materials[12732] = Material.YellowConcrete; - materials[12748] = Material.YellowConcretePowder; - for (int i = 12680; i <= 12683; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 12592; i <= 12597; i++) - materials[i] = Material.YellowShulkerBox; - materials[5949] = Material.YellowStainedGlass; - for (int i = 9500; i <= 9531; i++) - materials[i] = Material.YellowStainedGlassPane; - materials[9360] = Material.YellowTerracotta; - for (int i = 11031; i <= 11034; i++) - materials[i] = Material.YellowWallBanner; - materials[2051] = Material.YellowWool; - for (int i = 8907; i <= 8938; i++) - materials[i] = Material.ZombieHead; - for (int i = 8939; i <= 8946; i++) - materials[i] = Material.ZombieWallHead; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(25, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(27, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(29, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(31, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(33, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(35, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(37, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(39, 40, - [ - new("age", ["0", "1", "2", "3", "4"], 8), - new("hanging", ["true", "false"], 4), - new("stage", ["0", "1"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(80, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(96, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(113, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(119, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(130, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(133, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(136, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(139, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(142, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(145, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(148, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(151, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(154, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(156, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(159, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(162, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(165, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(168, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(171, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(174, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(177, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(180, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(183, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(186, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(189, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(192, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(195, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(198, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(201, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(204, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(207, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(210, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(213, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(216, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(219, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(222, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(225, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(228, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(231, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(234, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(237, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(265, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(293, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(321, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(349, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(377, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(405, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(433, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(461, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(489, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(523, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(538, 1150, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling", "zombie", "skeleton", "creeper", "dragon", "wither_skeleton", "piglin", "custom_head"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1688, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1704, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1720, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1736, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1752, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1768, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1784, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1800, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1816, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1832, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1848, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1864, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1880, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1896, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1912, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1928, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1944, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(1968, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(1992, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2009, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(2011, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2023, 24, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2) - ]), - new(2063, 12, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 2) - ]), - new(2094, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(2097, 256, - [ - new("facing", ["north", "south", "west", "east"], 64), - new("slot_0_occupied", ["true", "false"], 32), - new("slot_1_occupied", ["true", "false"], 16), - new("slot_2_occupied", ["true", "false"], 8), - new("slot_3_occupied", ["true", "false"], 4), - new("slot_4_occupied", ["true", "false"], 2), - new("slot_5_occupied", ["true", "false"], 1) - ]), - new(2356, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(2360, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(2874, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2954, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(2978, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(4278, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4286, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4294, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(4302, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4334, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4366, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4398, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4430, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4462, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4494, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4526, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4558, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4590, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4654, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4662, 20, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4682, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4762, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4770, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4778, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4786, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4794, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4802, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4810, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4818, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4826, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4834, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4898, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4962, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5026, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5090, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5154, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5218, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5282, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5346, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5410, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5474, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5538, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5546, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5554, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5562, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5570, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5578, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5586, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5594, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5602, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5610, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5618, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5626, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5650, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5652, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5716, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5718, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5720, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5722, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5724, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5726, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5728, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5730, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5732, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5734, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5736, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5738, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5740, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(5748, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5772, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(5782, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5799, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5815, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(5817, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(5852, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(5855, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(5859, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5864, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(5866, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5870, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(5874, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(5881, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5961, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6025, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6089, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6153, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6217, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6281, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6345, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6409, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6473, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6549, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6613, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6677, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6741, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6773, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6779, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6813, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6817, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6821, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(6829, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(6837, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6869, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6997, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7029, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7109, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7189, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7269, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(7273, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7305, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7385, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(7390, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(7399, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(7403, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(7407, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7417, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(7419, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7431, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7513, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7521, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7537, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7666, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7746, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7826, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7906, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(7919, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(8243, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(8595, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8603, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8611, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8635, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8659, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8683, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8707, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8731, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8755, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8779, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8803, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8827, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8859, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8867, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8899, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8907, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8939, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8947, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(8979, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8987, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9019, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9027, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9059, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9067, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9099, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9107, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9111, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9115, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9119, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(9143, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9159, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9175, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9191, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9225, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(9237, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(9240, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9320, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9344, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(9372, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9404, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9436, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9468, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9500, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9532, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9564, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9596, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9628, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9660, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9692, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9724, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9756, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9788, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9820, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9852, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9884, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9964, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10044, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10124, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10204, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10284, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10365, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10367, 32, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10399, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10466, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10546, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10626, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10706, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10712, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10718, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10725, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(10747, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10749, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10751, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10753, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10755, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10757, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(10759, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10775, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10791, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10807, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10823, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10839, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10855, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10871, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10887, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10903, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10919, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10935, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10951, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10967, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10983, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10999, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11015, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11019, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11023, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11027, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11031, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11035, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11039, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11043, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11047, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11051, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11055, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11059, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11063, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11067, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11071, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11075, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11082, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11162, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11168, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11174, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11180, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11186, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11192, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11198, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11204, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11210, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11216, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11222, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11228, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11234, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11240, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11246, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11252, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11258, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11264, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11270, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11276, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11282, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11288, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11294, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11300, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11310, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11342, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11374, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11406, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11438, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11470, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11502, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11534, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11566, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11598, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11630, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11662, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11694, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11726, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11758, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11790, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11822, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11886, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11950, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12014, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12078, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12142, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12206, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12270, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12334, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12340, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12404, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(12411, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(12414, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12495, 2, - [ - new("age", ["0", "1"], 1) - ]), - new(12497, 10, - [ - new("age", ["0", "1", "2", "3", "4"], 2), - new("half", ["upper", "lower"], 1) - ]), - new(12507, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12509, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(12515, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12527, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12539, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(12546, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(12550, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12562, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12568, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12574, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12580, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12586, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12592, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12598, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12604, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12610, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12616, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12622, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12628, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12634, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12640, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12646, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12652, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12658, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12664, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12668, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12672, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12676, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12680, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12684, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12688, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12692, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12696, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12700, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12704, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12708, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12712, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12716, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12720, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12724, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12760, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(12788, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(12800, 3, - [ - new("hatch", ["0", "1", "2"], 1) - ]), - new(12813, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12815, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12817, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12819, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12821, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12823, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12825, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12827, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12829, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12831, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12833, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12835, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12837, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12839, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12841, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12843, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12845, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12847, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12849, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12851, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12853, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12861, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12869, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12877, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12885, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12893, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12901, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12909, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12917, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12925, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12933, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12942, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12945, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(12960, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(12962, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13042, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13122, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13202, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13282, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13362, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13442, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13522, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13602, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13682, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13762, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13842, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13922, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14002, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14082, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14088, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14094, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14100, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14106, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14112, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14118, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14124, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14130, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14136, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14142, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14148, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14154, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14160, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14484, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14808, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15132, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15456, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15780, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16104, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16428, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16752, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17076, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17400, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17724, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18048, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18372, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18404, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(18408, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(18420, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(18428, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(18438, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(18450, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18467, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(18471, 32, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18503, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18507, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18511, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18543, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18575, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(18579, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18582, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18585, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18588, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18596, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18599, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18602, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18605, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(18611, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(18638, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(18668, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18674, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18680, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(18682, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(18684, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(18716, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(18748, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18812, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18876, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18908, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18940, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19020, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19100, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19124, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19148, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19212, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19276, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19308, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19340, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19348, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19356, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(19360, 12, - [ - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 1) - ]), - new(19372, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(19381, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(19397, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(19421, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(19450, 5, - [ - new("charges", ["0", "1", "2", "3", "4"], 1) - ]), - new(19461, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19541, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19865, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19875, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19881, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19961, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20286, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20366, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20372, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(20374, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20398, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20725, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20741, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20757, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20773, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20789, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20805, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20821, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20837, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20853, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20869, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20885, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20901, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20917, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20933, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20949, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20965, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20981, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20997, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(20999, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21001, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21003, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21005, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21007, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21009, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21011, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21013, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21015, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21017, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21019, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21021, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21023, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21025, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21027, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21029, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21033, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21045, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21057, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21069, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21082, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21088, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21168, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(21493, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21499, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21579, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(21905, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21911, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21991, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22319, 96, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22415, 384, - [ - new("facing", ["north", "south", "west", "east"], 96), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22800, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(22928, 2, - [ - new("bloom", ["true", "false"], 1) - ]), - new(22930, 8, - [ - new("can_summon", ["true", "false"], 4), - new("shrieking", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22956, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23036, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23116, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23196, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23276, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23282, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23288, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23294, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23308, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23388, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23468, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23548, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23628, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23634, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23640, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23646, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23652, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(23716, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(23780, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(23844, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(23908, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(23972, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24036, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24100, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24164, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24228, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24292, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24356, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24420, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24484, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24548, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24612, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24676, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24678, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24680, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24682, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24684, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24686, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24688, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24690, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24692, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24696, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24700, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24704, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24708, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24712, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24716, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24720, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24724, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24748, 20, - [ - new("thickness", ["tip_merge", "tip", "frustum", "middle", "base"], 4), - new("vertical_direction", ["up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24769, 52, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 2), - new("berries", ["true", "false"], 1) - ]), - new(24821, 2, - [ - new("berries", ["true", "false"], 1) - ]), - new(24827, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("flower_amount", ["1", "2", "3", "4"], 1) - ]), - new(24844, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("tilt", ["none", "unstable", "partial", "full"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24876, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24884, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("half", ["upper", "lower"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24900, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(24904, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(24908, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24988, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24994, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(25319, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25399, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25405, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(25730, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25810, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25816, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(26141, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26221, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26227, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(26554, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(26563, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(26566, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(26569, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(26574, 16, - [ - new("cracked", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26590, 48, - [ - new("crafting", ["true", "false"], 24), - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(26638, 12, - [ - new("ominous", ["true", "false"], 6), - new("trial_spawner_state", ["inactive", "waiting_for_players", "active", "waiting_for_reward_ejection", "ejecting_reward", "cooldown"], 1) - ]), - new(26650, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("ominous", ["true", "false"], 4), - new("vault_state", ["inactive", "active", "unlocking", "ejecting"], 1) - ]), - new(26682, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette1212.cs b/MinecraftClient/Mapping/BlockPalettes/Palette1212.cs deleted file mode 100644 index c00043da49..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette1212.cs +++ /dev/null @@ -1,5715 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - public class Palette1212 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette1212() - { - for (int i = 8938; i <= 8961; i++) - materials[i] = Material.AcaciaButton; - for (int i = 12419; i <= 12482; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 12035; i <= 12066; i++) - materials[i] = Material.AcaciaFence; - for (int i = 11747; i <= 11778; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 5118; i <= 5181; i++) - materials[i] = Material.AcaciaHangingSign; - for (int i = 364; i <= 391; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 148; i <= 150; i++) - materials[i] = Material.AcaciaLog; - materials[19] = Material.AcaciaPlanks; - for (int i = 5888; i <= 5889; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 37; i <= 38; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 4450; i <= 4481; i++) - materials[i] = Material.AcaciaSign; - for (int i = 11521; i <= 11526; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 10139; i <= 10218; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 6383; i <= 6446; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 5718; i <= 5725; i++) - materials[i] = Material.AcaciaWallHangingSign; - for (int i = 4870; i <= 4877; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 213; i <= 215; i++) - materials[i] = Material.AcaciaWood; - for (int i = 9575; i <= 9598; i++) - materials[i] = Material.ActivatorRail; - materials[0] = Material.Air; - materials[2122] = Material.Allium; - materials[21500] = Material.AmethystBlock; - for (int i = 21502; i <= 21513; i++) - materials[i] = Material.AmethystCluster; - materials[19917] = Material.AncientDebris; - materials[6] = Material.Andesite; - for (int i = 14605; i <= 14610; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 14231; i <= 14310; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 17221; i <= 17544; i++) - materials[i] = Material.AndesiteWall; - for (int i = 9362; i <= 9365; i++) - materials[i] = Material.Anvil; - for (int i = 7047; i <= 7050; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 7043; i <= 7046; i++) - materials[i] = Material.AttachedPumpkinStem; - materials[25293] = Material.Azalea; - for (int i = 504; i <= 531; i++) - materials[i] = Material.AzaleaLeaves; - materials[2123] = Material.AzureBluet; - for (int i = 13414; i <= 13425; i++) - materials[i] = Material.Bamboo; - for (int i = 168; i <= 170; i++) - materials[i] = Material.BambooBlock; - for (int i = 9058; i <= 9081; i++) - materials[i] = Material.BambooButton; - for (int i = 12739; i <= 12802; i++) - materials[i] = Material.BambooDoor; - for (int i = 12195; i <= 12226; i++) - materials[i] = Material.BambooFence; - for (int i = 11907; i <= 11938; i++) - materials[i] = Material.BambooFenceGate; - for (int i = 5630; i <= 5693; i++) - materials[i] = Material.BambooHangingSign; - materials[28] = Material.BambooMosaic; - for (int i = 11557; i <= 11562; i++) - materials[i] = Material.BambooMosaicSlab; - for (int i = 10619; i <= 10698; i++) - materials[i] = Material.BambooMosaicStairs; - materials[27] = Material.BambooPlanks; - for (int i = 5898; i <= 5899; i++) - materials[i] = Material.BambooPressurePlate; - materials[13413] = Material.BambooSapling; - for (int i = 4642; i <= 4673; i++) - materials[i] = Material.BambooSign; - for (int i = 11551; i <= 11556; i++) - materials[i] = Material.BambooSlab; - for (int i = 10539; i <= 10618; i++) - materials[i] = Material.BambooStairs; - for (int i = 6703; i <= 6766; i++) - materials[i] = Material.BambooTrapdoor; - for (int i = 5782; i <= 5789; i++) - materials[i] = Material.BambooWallHangingSign; - for (int i = 4918; i <= 4925; i++) - materials[i] = Material.BambooWallSign; - for (int i = 18877; i <= 18888; i++) - materials[i] = Material.Barrel; - for (int i = 10700; i <= 10701; i++) - materials[i] = Material.Barrier; - for (int i = 6018; i <= 6020; i++) - materials[i] = Material.Basalt; - materials[8148] = Material.Beacon; - materials[85] = Material.Bedrock; - for (int i = 19866; i <= 19889; i++) - materials[i] = Material.BeeNest; - for (int i = 19890; i <= 19913; i++) - materials[i] = Material.Beehive; - for (int i = 12978; i <= 12981; i++) - materials[i] = Material.Beetroots; - for (int i = 18940; i <= 18971; i++) - materials[i] = Material.Bell; - for (int i = 25313; i <= 25344; i++) - materials[i] = Material.BigDripleaf; - for (int i = 25345; i <= 25352; i++) - materials[i] = Material.BigDripleafStem; - for (int i = 8890; i <= 8913; i++) - materials[i] = Material.BirchButton; - for (int i = 12291; i <= 12354; i++) - materials[i] = Material.BirchDoor; - for (int i = 11971; i <= 12002; i++) - materials[i] = Material.BirchFence; - for (int i = 11683; i <= 11714; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 5054; i <= 5117; i++) - materials[i] = Material.BirchHangingSign; - for (int i = 308; i <= 335; i++) - materials[i] = Material.BirchLeaves; - for (int i = 142; i <= 144; i++) - materials[i] = Material.BirchLog; - materials[17] = Material.BirchPlanks; - for (int i = 5884; i <= 5885; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 33; i <= 34; i++) - materials[i] = Material.BirchSapling; - for (int i = 4418; i <= 4449; i++) - materials[i] = Material.BirchSign; - for (int i = 11509; i <= 11514; i++) - materials[i] = Material.BirchSlab; - for (int i = 7976; i <= 8055; i++) - materials[i] = Material.BirchStairs; - for (int i = 6255; i <= 6318; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 5710; i <= 5717; i++) - materials[i] = Material.BirchWallHangingSign; - for (int i = 4862; i <= 4869; i++) - materials[i] = Material.BirchWallSign; - for (int i = 207; i <= 209; i++) - materials[i] = Material.BirchWood; - for (int i = 11334; i <= 11349; i++) - materials[i] = Material.BlackBanner; - for (int i = 1971; i <= 1986; i++) - materials[i] = Material.BlackBed; - for (int i = 21450; i <= 21465; i++) - materials[i] = Material.BlackCandle; - for (int i = 21498; i <= 21499; i++) - materials[i] = Material.BlackCandleCake; - materials[11078] = Material.BlackCarpet; - materials[13212] = Material.BlackConcrete; - materials[13228] = Material.BlackConcretePowder; - for (int i = 13193; i <= 13196; i++) - materials[i] = Material.BlackGlazedTerracotta; - for (int i = 13127; i <= 13132; i++) - materials[i] = Material.BlackShulkerBox; - materials[6126] = Material.BlackStainedGlass; - for (int i = 10107; i <= 10138; i++) - materials[i] = Material.BlackStainedGlassPane; - materials[9626] = Material.BlackTerracotta; - for (int i = 11410; i <= 11413; i++) - materials[i] = Material.BlackWallBanner; - materials[2105] = Material.BlackWool; - materials[19929] = Material.Blackstone; - for (int i = 20334; i <= 20339; i++) - materials[i] = Material.BlackstoneSlab; - for (int i = 19930; i <= 20009; i++) - materials[i] = Material.BlackstoneStairs; - for (int i = 20010; i <= 20333; i++) - materials[i] = Material.BlackstoneWall; - for (int i = 18897; i <= 18904; i++) - materials[i] = Material.BlastFurnace; - for (int i = 11270; i <= 11285; i++) - materials[i] = Material.BlueBanner; - for (int i = 1907; i <= 1922; i++) - materials[i] = Material.BlueBed; - for (int i = 21386; i <= 21401; i++) - materials[i] = Material.BlueCandle; - for (int i = 21490; i <= 21491; i++) - materials[i] = Material.BlueCandleCake; - materials[11074] = Material.BlueCarpet; - materials[13208] = Material.BlueConcrete; - materials[13224] = Material.BlueConcretePowder; - for (int i = 13177; i <= 13180; i++) - materials[i] = Material.BlueGlazedTerracotta; - materials[13410] = Material.BlueIce; - materials[2121] = Material.BlueOrchid; - for (int i = 13103; i <= 13108; i++) - materials[i] = Material.BlueShulkerBox; - materials[6122] = Material.BlueStainedGlass; - for (int i = 9979; i <= 10010; i++) - materials[i] = Material.BlueStainedGlassPane; - materials[9622] = Material.BlueTerracotta; - for (int i = 11394; i <= 11397; i++) - materials[i] = Material.BlueWallBanner; - materials[2101] = Material.BlueWool; - for (int i = 13015; i <= 13017; i++) - materials[i] = Material.BoneBlock; - materials[2139] = Material.Bookshelf; - for (int i = 13294; i <= 13295; i++) - materials[i] = Material.BrainCoral; - materials[13278] = Material.BrainCoralBlock; - for (int i = 13314; i <= 13315; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 13370; i <= 13377; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 7620; i <= 7627; i++) - materials[i] = Material.BrewingStand; - for (int i = 11599; i <= 11604; i++) - materials[i] = Material.BrickSlab; - for (int i = 7259; i <= 7338; i++) - materials[i] = Material.BrickStairs; - for (int i = 14629; i <= 14952; i++) - materials[i] = Material.BrickWall; - materials[2136] = Material.Bricks; - for (int i = 11286; i <= 11301; i++) - materials[i] = Material.BrownBanner; - for (int i = 1923; i <= 1938; i++) - materials[i] = Material.BrownBed; - for (int i = 21402; i <= 21417; i++) - materials[i] = Material.BrownCandle; - for (int i = 21492; i <= 21493; i++) - materials[i] = Material.BrownCandleCake; - materials[11075] = Material.BrownCarpet; - materials[13209] = Material.BrownConcrete; - materials[13225] = Material.BrownConcretePowder; - for (int i = 13181; i <= 13184; i++) - materials[i] = Material.BrownGlazedTerracotta; - materials[2132] = Material.BrownMushroom; - for (int i = 6779; i <= 6842; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 13109; i <= 13114; i++) - materials[i] = Material.BrownShulkerBox; - materials[6123] = Material.BrownStainedGlass; - for (int i = 10011; i <= 10042; i++) - materials[i] = Material.BrownStainedGlassPane; - materials[9623] = Material.BrownTerracotta; - for (int i = 11398; i <= 11401; i++) - materials[i] = Material.BrownWallBanner; - materials[2102] = Material.BrownWool; - for (int i = 13429; i <= 13430; i++) - materials[i] = Material.BubbleColumn; - for (int i = 13296; i <= 13297; i++) - materials[i] = Material.BubbleCoral; - materials[13279] = Material.BubbleCoralBlock; - for (int i = 13316; i <= 13317; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 13378; i <= 13385; i++) - materials[i] = Material.BubbleCoralWallFan; - materials[21501] = Material.BuddingAmethyst; - for (int i = 5948; i <= 5963; i++) - materials[i] = Material.Cactus; - for (int i = 6040; i <= 6046; i++) - materials[i] = Material.Cake; - materials[22785] = Material.Calcite; - for (int i = 22884; i <= 23267; i++) - materials[i] = Material.CalibratedSculkSensor; - for (int i = 18980; i <= 19011; i++) - materials[i] = Material.Campfire; - for (int i = 21194; i <= 21209; i++) - materials[i] = Material.Candle; - for (int i = 21466; i <= 21467; i++) - materials[i] = Material.CandleCake; - for (int i = 8826; i <= 8833; i++) - materials[i] = Material.Carrots; - materials[18905] = Material.CartographyTable; - for (int i = 6032; i <= 6035; i++) - materials[i] = Material.CarvedPumpkin; - materials[7628] = Material.Cauldron; - materials[13428] = Material.CaveAir; - for (int i = 25238; i <= 25289; i++) - materials[i] = Material.CaveVines; - for (int i = 25290; i <= 25291; i++) - materials[i] = Material.CaveVinesPlant; - for (int i = 7003; i <= 7008; i++) - materials[i] = Material.Chain; - for (int i = 12996; i <= 13007; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 8962; i <= 8985; i++) - materials[i] = Material.CherryButton; - for (int i = 12483; i <= 12546; i++) - materials[i] = Material.CherryDoor; - for (int i = 12067; i <= 12098; i++) - materials[i] = Material.CherryFence; - for (int i = 11779; i <= 11810; i++) - materials[i] = Material.CherryFenceGate; - for (int i = 5182; i <= 5245; i++) - materials[i] = Material.CherryHangingSign; - for (int i = 392; i <= 419; i++) - materials[i] = Material.CherryLeaves; - for (int i = 151; i <= 153; i++) - materials[i] = Material.CherryLog; - materials[20] = Material.CherryPlanks; - for (int i = 5890; i <= 5891; i++) - materials[i] = Material.CherryPressurePlate; - for (int i = 39; i <= 40; i++) - materials[i] = Material.CherrySapling; - for (int i = 4482; i <= 4513; i++) - materials[i] = Material.CherrySign; - for (int i = 11527; i <= 11532; i++) - materials[i] = Material.CherrySlab; - for (int i = 10219; i <= 10298; i++) - materials[i] = Material.CherryStairs; - for (int i = 6447; i <= 6510; i++) - materials[i] = Material.CherryTrapdoor; - for (int i = 5726; i <= 5733; i++) - materials[i] = Material.CherryWallHangingSign; - for (int i = 4878; i <= 4885; i++) - materials[i] = Material.CherryWallSign; - for (int i = 216; i <= 218; i++) - materials[i] = Material.CherryWood; - for (int i = 3006; i <= 3029; i++) - materials[i] = Material.Chest; - for (int i = 9366; i <= 9369; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 2140; i <= 2395; i++) - materials[i] = Material.ChiseledBookshelf; - materials[23420] = Material.ChiseledCopper; - materials[27020] = Material.ChiseledDeepslate; - materials[21191] = Material.ChiseledNetherBricks; - materials[20343] = Material.ChiseledPolishedBlackstone; - materials[9491] = Material.ChiseledQuartzBlock; - materials[11415] = Material.ChiseledRedSandstone; - materials[579] = Material.ChiseledSandstone; - materials[6770] = Material.ChiseledStoneBricks; - materials[22372] = Material.ChiseledTuff; - materials[22784] = Material.ChiseledTuffBricks; - for (int i = 12873; i <= 12878; i++) - materials[i] = Material.ChorusFlower; - for (int i = 12809; i <= 12872; i++) - materials[i] = Material.ChorusPlant; - materials[5964] = Material.Clay; - materials[11080] = Material.CoalBlock; - materials[133] = Material.CoalOre; - materials[11] = Material.CoarseDirt; - materials[25376] = Material.CobbledDeepslate; - for (int i = 25457; i <= 25462; i++) - materials[i] = Material.CobbledDeepslateSlab; - for (int i = 25377; i <= 25456; i++) - materials[i] = Material.CobbledDeepslateStairs; - for (int i = 25463; i <= 25786; i++) - materials[i] = Material.CobbledDeepslateWall; - materials[14] = Material.Cobblestone; - for (int i = 11593; i <= 11598; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 4766; i <= 4845; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 8149; i <= 8472; i++) - materials[i] = Material.CobblestoneWall; - materials[2047] = Material.Cobweb; - for (int i = 7649; i <= 7660; i++) - materials[i] = Material.Cocoa; - for (int i = 8136; i <= 8147; i++) - materials[i] = Material.CommandBlock; - for (int i = 9430; i <= 9445; i++) - materials[i] = Material.Comparator; - for (int i = 19841; i <= 19849; i++) - materials[i] = Material.Composter; - for (int i = 13411; i <= 13412; i++) - materials[i] = Material.Conduit; - materials[23407] = Material.CopperBlock; - for (int i = 25161; i <= 25164; i++) - materials[i] = Material.CopperBulb; - for (int i = 24121; i <= 24184; i++) - materials[i] = Material.CopperDoor; - for (int i = 25145; i <= 25146; i++) - materials[i] = Material.CopperGrate; - materials[23411] = Material.CopperOre; - for (int i = 24633; i <= 24696; i++) - materials[i] = Material.CopperTrapdoor; - materials[2129] = Material.Cornflower; - materials[27021] = Material.CrackedDeepslateBricks; - materials[27022] = Material.CrackedDeepslateTiles; - materials[21192] = Material.CrackedNetherBricks; - materials[20342] = Material.CrackedPolishedBlackstoneBricks; - materials[6769] = Material.CrackedStoneBricks; - for (int i = 27059; i <= 27106; i++) - materials[i] = Material.Crafter; - materials[4329] = Material.CraftingTable; - for (int i = 2917; i <= 2925; i++) - materials[i] = Material.CreakingHeart; - for (int i = 9242; i <= 9273; i++) - materials[i] = Material.CreeperHead; - for (int i = 9274; i <= 9281; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 19569; i <= 19592; i++) - materials[i] = Material.CrimsonButton; - for (int i = 19617; i <= 19680; i++) - materials[i] = Material.CrimsonDoor; - for (int i = 19153; i <= 19184; i++) - materials[i] = Material.CrimsonFence; - for (int i = 19345; i <= 19376; i++) - materials[i] = Material.CrimsonFenceGate; - materials[19078] = Material.CrimsonFungus; - for (int i = 5438; i <= 5501; i++) - materials[i] = Material.CrimsonHangingSign; - for (int i = 19071; i <= 19073; i++) - materials[i] = Material.CrimsonHyphae; - materials[19077] = Material.CrimsonNylium; - materials[19135] = Material.CrimsonPlanks; - for (int i = 19149; i <= 19150; i++) - materials[i] = Material.CrimsonPressurePlate; - materials[19134] = Material.CrimsonRoots; - for (int i = 19745; i <= 19776; i++) - materials[i] = Material.CrimsonSign; - for (int i = 19137; i <= 19142; i++) - materials[i] = Material.CrimsonSlab; - for (int i = 19409; i <= 19488; i++) - materials[i] = Material.CrimsonStairs; - for (int i = 19065; i <= 19067; i++) - materials[i] = Material.CrimsonStem; - for (int i = 19217; i <= 19280; i++) - materials[i] = Material.CrimsonTrapdoor; - for (int i = 5766; i <= 5773; i++) - materials[i] = Material.CrimsonWallHangingSign; - for (int i = 19809; i <= 19816; i++) - materials[i] = Material.CrimsonWallSign; - materials[19918] = Material.CryingObsidian; - materials[23416] = Material.CutCopper; - for (int i = 23763; i <= 23768; i++) - materials[i] = Material.CutCopperSlab; - for (int i = 23665; i <= 23744; i++) - materials[i] = Material.CutCopperStairs; - materials[11416] = Material.CutRedSandstone; - for (int i = 11635; i <= 11640; i++) - materials[i] = Material.CutRedSandstoneSlab; - materials[580] = Material.CutSandstone; - for (int i = 11581; i <= 11586; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 11238; i <= 11253; i++) - materials[i] = Material.CyanBanner; - for (int i = 1875; i <= 1890; i++) - materials[i] = Material.CyanBed; - for (int i = 21354; i <= 21369; i++) - materials[i] = Material.CyanCandle; - for (int i = 21486; i <= 21487; i++) - materials[i] = Material.CyanCandleCake; - materials[11072] = Material.CyanCarpet; - materials[13206] = Material.CyanConcrete; - materials[13222] = Material.CyanConcretePowder; - for (int i = 13169; i <= 13172; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 13091; i <= 13096; i++) - materials[i] = Material.CyanShulkerBox; - materials[6120] = Material.CyanStainedGlass; - for (int i = 9915; i <= 9946; i++) - materials[i] = Material.CyanStainedGlassPane; - materials[9620] = Material.CyanTerracotta; - for (int i = 11386; i <= 11389; i++) - materials[i] = Material.CyanWallBanner; - materials[2099] = Material.CyanWool; - for (int i = 9370; i <= 9373; i++) - materials[i] = Material.DamagedAnvil; - materials[2118] = Material.Dandelion; - for (int i = 8986; i <= 9009; i++) - materials[i] = Material.DarkOakButton; - for (int i = 12547; i <= 12610; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 12099; i <= 12130; i++) - materials[i] = Material.DarkOakFence; - for (int i = 11811; i <= 11842; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 5310; i <= 5373; i++) - materials[i] = Material.DarkOakHangingSign; - for (int i = 420; i <= 447; i++) - materials[i] = Material.DarkOakLeaves; - for (int i = 154; i <= 156; i++) - materials[i] = Material.DarkOakLog; - materials[21] = Material.DarkOakPlanks; - for (int i = 5892; i <= 5893; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 41; i <= 42; i++) - materials[i] = Material.DarkOakSapling; - for (int i = 4546; i <= 4577; i++) - materials[i] = Material.DarkOakSign; - for (int i = 11533; i <= 11538; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 10299; i <= 10378; i++) - materials[i] = Material.DarkOakStairs; - for (int i = 6511; i <= 6574; i++) - materials[i] = Material.DarkOakTrapdoor; - for (int i = 5742; i <= 5749; i++) - materials[i] = Material.DarkOakWallHangingSign; - for (int i = 4894; i <= 4901; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 219; i <= 221; i++) - materials[i] = Material.DarkOakWood; - materials[10800] = Material.DarkPrismarine; - for (int i = 11053; i <= 11058; i++) - materials[i] = Material.DarkPrismarineSlab; - for (int i = 10961; i <= 11040; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 9446; i <= 9477; i++) - materials[i] = Material.DaylightDetector; - for (int i = 13284; i <= 13285; i++) - materials[i] = Material.DeadBrainCoral; - materials[13273] = Material.DeadBrainCoralBlock; - for (int i = 13304; i <= 13305; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 13330; i <= 13337; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 13286; i <= 13287; i++) - materials[i] = Material.DeadBubbleCoral; - materials[13274] = Material.DeadBubbleCoralBlock; - for (int i = 13306; i <= 13307; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 13338; i <= 13345; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - materials[2050] = Material.DeadBush; - for (int i = 13288; i <= 13289; i++) - materials[i] = Material.DeadFireCoral; - materials[13275] = Material.DeadFireCoralBlock; - for (int i = 13308; i <= 13309; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 13346; i <= 13353; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 13290; i <= 13291; i++) - materials[i] = Material.DeadHornCoral; - materials[13276] = Material.DeadHornCoralBlock; - for (int i = 13310; i <= 13311; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 13354; i <= 13361; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 13282; i <= 13283; i++) - materials[i] = Material.DeadTubeCoral; - materials[13272] = Material.DeadTubeCoralBlock; - for (int i = 13302; i <= 13303; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 13322; i <= 13329; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 27043; i <= 27058; i++) - materials[i] = Material.DecoratedPot; - for (int i = 25373; i <= 25375; i++) - materials[i] = Material.Deepslate; - for (int i = 26690; i <= 26695; i++) - materials[i] = Material.DeepslateBrickSlab; - for (int i = 26610; i <= 26689; i++) - materials[i] = Material.DeepslateBrickStairs; - for (int i = 26696; i <= 27019; i++) - materials[i] = Material.DeepslateBrickWall; - materials[26609] = Material.DeepslateBricks; - materials[134] = Material.DeepslateCoalOre; - materials[23412] = Material.DeepslateCopperOre; - materials[4327] = Material.DeepslateDiamondOre; - materials[7742] = Material.DeepslateEmeraldOre; - materials[130] = Material.DeepslateGoldOre; - materials[132] = Material.DeepslateIronOre; - materials[564] = Material.DeepslateLapisOre; - for (int i = 5902; i <= 5903; i++) - materials[i] = Material.DeepslateRedstoneOre; - for (int i = 26279; i <= 26284; i++) - materials[i] = Material.DeepslateTileSlab; - for (int i = 26199; i <= 26278; i++) - materials[i] = Material.DeepslateTileStairs; - for (int i = 26285; i <= 26608; i++) - materials[i] = Material.DeepslateTileWall; - materials[26198] = Material.DeepslateTiles; - for (int i = 2011; i <= 2034; i++) - materials[i] = Material.DetectorRail; - materials[4328] = Material.DiamondBlock; - materials[4326] = Material.DiamondOre; - materials[4] = Material.Diorite; - for (int i = 14623; i <= 14628; i++) - materials[i] = Material.DioriteSlab; - for (int i = 14471; i <= 14550; i++) - materials[i] = Material.DioriteStairs; - for (int i = 18517; i <= 18840; i++) - materials[i] = Material.DioriteWall; - materials[10] = Material.Dirt; - materials[12982] = Material.DirtPath; - for (int i = 566; i <= 577; i++) - materials[i] = Material.Dispenser; - materials[7646] = Material.DragonEgg; - for (int i = 9282; i <= 9313; i++) - materials[i] = Material.DragonHead; - for (int i = 9314; i <= 9321; i++) - materials[i] = Material.DragonWallHead; - materials[13256] = Material.DriedKelpBlock; - materials[25237] = Material.DripstoneBlock; - for (int i = 9599; i <= 9610; i++) - materials[i] = Material.Dropper; - materials[7895] = Material.EmeraldBlock; - materials[7741] = Material.EmeraldOre; - materials[7619] = Material.EnchantingTable; - materials[12983] = Material.EndGateway; - materials[7636] = Material.EndPortal; - for (int i = 7637; i <= 7644; i++) - materials[i] = Material.EndPortalFrame; - for (int i = 12803; i <= 12808; i++) - materials[i] = Material.EndRod; - materials[7645] = Material.EndStone; - for (int i = 14581; i <= 14586; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 13831; i <= 13910; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 18193; i <= 18516; i++) - materials[i] = Material.EndStoneBrickWall; - materials[12963] = Material.EndStoneBricks; - for (int i = 7743; i <= 7750; i++) - materials[i] = Material.EnderChest; - materials[23419] = Material.ExposedChiseledCopper; - materials[23408] = Material.ExposedCopper; - for (int i = 25165; i <= 25168; i++) - materials[i] = Material.ExposedCopperBulb; - for (int i = 24185; i <= 24248; i++) - materials[i] = Material.ExposedCopperDoor; - for (int i = 25147; i <= 25148; i++) - materials[i] = Material.ExposedCopperGrate; - for (int i = 24697; i <= 24760; i++) - materials[i] = Material.ExposedCopperTrapdoor; - materials[23415] = Material.ExposedCutCopper; - for (int i = 23757; i <= 23762; i++) - materials[i] = Material.ExposedCutCopperSlab; - for (int i = 23585; i <= 23664; i++) - materials[i] = Material.ExposedCutCopperStairs; - for (int i = 4338; i <= 4345; i++) - materials[i] = Material.Farmland; - materials[2049] = Material.Fern; - for (int i = 2403; i <= 2914; i++) - materials[i] = Material.Fire; - for (int i = 13298; i <= 13299; i++) - materials[i] = Material.FireCoral; - materials[13280] = Material.FireCoralBlock; - for (int i = 13318; i <= 13319; i++) - materials[i] = Material.FireCoralFan; - for (int i = 13386; i <= 13393; i++) - materials[i] = Material.FireCoralWallFan; - materials[18906] = Material.FletchingTable; - materials[8797] = Material.FlowerPot; - materials[25294] = Material.FloweringAzalea; - for (int i = 532; i <= 559; i++) - materials[i] = Material.FloweringAzaleaLeaves; - materials[27041] = Material.Frogspawn; - for (int i = 13008; i <= 13011; i++) - materials[i] = Material.FrostedIce; - for (int i = 4346; i <= 4353; i++) - materials[i] = Material.Furnace; - materials[20754] = Material.GildedBlackstone; - materials[562] = Material.Glass; - for (int i = 7009; i <= 7040; i++) - materials[i] = Material.GlassPane; - for (int i = 7099; i <= 7226; i++) - materials[i] = Material.GlowLichen; - materials[6029] = Material.Glowstone; - materials[2134] = Material.GoldBlock; - materials[129] = Material.GoldOre; - materials[2] = Material.Granite; - for (int i = 14599; i <= 14604; i++) - materials[i] = Material.GraniteSlab; - for (int i = 14151; i <= 14230; i++) - materials[i] = Material.GraniteStairs; - for (int i = 15925; i <= 16248; i++) - materials[i] = Material.GraniteWall; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - materials[124] = Material.Gravel; - for (int i = 11206; i <= 11221; i++) - materials[i] = Material.GrayBanner; - for (int i = 1843; i <= 1858; i++) - materials[i] = Material.GrayBed; - for (int i = 21322; i <= 21337; i++) - materials[i] = Material.GrayCandle; - for (int i = 21482; i <= 21483; i++) - materials[i] = Material.GrayCandleCake; - materials[11070] = Material.GrayCarpet; - materials[13204] = Material.GrayConcrete; - materials[13220] = Material.GrayConcretePowder; - for (int i = 13161; i <= 13164; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 13079; i <= 13084; i++) - materials[i] = Material.GrayShulkerBox; - materials[6118] = Material.GrayStainedGlass; - for (int i = 9851; i <= 9882; i++) - materials[i] = Material.GrayStainedGlassPane; - materials[9618] = Material.GrayTerracotta; - for (int i = 11378; i <= 11381; i++) - materials[i] = Material.GrayWallBanner; - materials[2097] = Material.GrayWool; - for (int i = 11302; i <= 11317; i++) - materials[i] = Material.GreenBanner; - for (int i = 1939; i <= 1954; i++) - materials[i] = Material.GreenBed; - for (int i = 21418; i <= 21433; i++) - materials[i] = Material.GreenCandle; - for (int i = 21494; i <= 21495; i++) - materials[i] = Material.GreenCandleCake; - materials[11076] = Material.GreenCarpet; - materials[13210] = Material.GreenConcrete; - materials[13226] = Material.GreenConcretePowder; - for (int i = 13185; i <= 13188; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 13115; i <= 13120; i++) - materials[i] = Material.GreenShulkerBox; - materials[6124] = Material.GreenStainedGlass; - for (int i = 10043; i <= 10074; i++) - materials[i] = Material.GreenStainedGlassPane; - materials[9624] = Material.GreenTerracotta; - for (int i = 11402; i <= 11405; i++) - materials[i] = Material.GreenWallBanner; - materials[2103] = Material.GreenWool; - for (int i = 18907; i <= 18918; i++) - materials[i] = Material.Grindstone; - for (int i = 25369; i <= 25370; i++) - materials[i] = Material.HangingRoots; - for (int i = 11060; i <= 11062; i++) - materials[i] = Material.HayBlock; - for (int i = 27151; i <= 27152; i++) - materials[i] = Material.HeavyCore; - for (int i = 9414; i <= 9429; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - materials[19914] = Material.HoneyBlock; - materials[19915] = Material.HoneycombBlock; - for (int i = 9480; i <= 9489; i++) - materials[i] = Material.Hopper; - for (int i = 13300; i <= 13301; i++) - materials[i] = Material.HornCoral; - materials[13281] = Material.HornCoralBlock; - for (int i = 13320; i <= 13321; i++) - materials[i] = Material.HornCoralFan; - for (int i = 13394; i <= 13401; i++) - materials[i] = Material.HornCoralWallFan; - materials[5946] = Material.Ice; - materials[6778] = Material.InfestedChiseledStoneBricks; - materials[6774] = Material.InfestedCobblestone; - materials[6777] = Material.InfestedCrackedStoneBricks; - for (int i = 27023; i <= 27025; i++) - materials[i] = Material.InfestedDeepslate; - materials[6776] = Material.InfestedMossyStoneBricks; - materials[6773] = Material.InfestedStone; - materials[6775] = Material.InfestedStoneBricks; - for (int i = 6971; i <= 7002; i++) - materials[i] = Material.IronBars; - materials[2135] = Material.IronBlock; - for (int i = 5816; i <= 5879; i++) - materials[i] = Material.IronDoor; - materials[131] = Material.IronOre; - for (int i = 10734; i <= 10797; i++) - materials[i] = Material.IronTrapdoor; - for (int i = 6036; i <= 6039; i++) - materials[i] = Material.JackOLantern; - for (int i = 19829; i <= 19840; i++) - materials[i] = Material.Jigsaw; - for (int i = 5981; i <= 5982; i++) - materials[i] = Material.Jukebox; - for (int i = 8914; i <= 8937; i++) - materials[i] = Material.JungleButton; - for (int i = 12355; i <= 12418; i++) - materials[i] = Material.JungleDoor; - for (int i = 12003; i <= 12034; i++) - materials[i] = Material.JungleFence; - for (int i = 11715; i <= 11746; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 5246; i <= 5309; i++) - materials[i] = Material.JungleHangingSign; - for (int i = 336; i <= 363; i++) - materials[i] = Material.JungleLeaves; - for (int i = 145; i <= 147; i++) - materials[i] = Material.JungleLog; - materials[18] = Material.JunglePlanks; - for (int i = 5886; i <= 5887; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 35; i <= 36; i++) - materials[i] = Material.JungleSapling; - for (int i = 4514; i <= 4545; i++) - materials[i] = Material.JungleSign; - for (int i = 11515; i <= 11520; i++) - materials[i] = Material.JungleSlab; - for (int i = 8056; i <= 8135; i++) - materials[i] = Material.JungleStairs; - for (int i = 6319; i <= 6382; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 5734; i <= 5741; i++) - materials[i] = Material.JungleWallHangingSign; - for (int i = 4886; i <= 4893; i++) - materials[i] = Material.JungleWallSign; - for (int i = 210; i <= 212; i++) - materials[i] = Material.JungleWood; - for (int i = 13229; i <= 13254; i++) - materials[i] = Material.Kelp; - materials[13255] = Material.KelpPlant; - for (int i = 4738; i <= 4745; i++) - materials[i] = Material.Ladder; - for (int i = 18972; i <= 18975; i++) - materials[i] = Material.Lantern; - materials[565] = Material.LapisBlock; - materials[563] = Material.LapisOre; - for (int i = 21514; i <= 21525; i++) - materials[i] = Material.LargeAmethystBud; - for (int i = 11092; i <= 11093; i++) - materials[i] = Material.LargeFern; - for (int i = 102; i <= 117; i++) - materials[i] = Material.Lava; - materials[7632] = Material.LavaCauldron; - for (int i = 18919; i <= 18934; i++) - materials[i] = Material.Lectern; - for (int i = 5790; i <= 5813; i++) - materials[i] = Material.Lever; - for (int i = 10702; i <= 10733; i++) - materials[i] = Material.Light; - for (int i = 11142; i <= 11157; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 1779; i <= 1794; i++) - materials[i] = Material.LightBlueBed; - for (int i = 21258; i <= 21273; i++) - materials[i] = Material.LightBlueCandle; - for (int i = 21474; i <= 21475; i++) - materials[i] = Material.LightBlueCandleCake; - materials[11066] = Material.LightBlueCarpet; - materials[13200] = Material.LightBlueConcrete; - materials[13216] = Material.LightBlueConcretePowder; - for (int i = 13145; i <= 13148; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 13055; i <= 13060; i++) - materials[i] = Material.LightBlueShulkerBox; - materials[6114] = Material.LightBlueStainedGlass; - for (int i = 9723; i <= 9754; i++) - materials[i] = Material.LightBlueStainedGlassPane; - materials[9614] = Material.LightBlueTerracotta; - for (int i = 11362; i <= 11365; i++) - materials[i] = Material.LightBlueWallBanner; - materials[2093] = Material.LightBlueWool; - for (int i = 11222; i <= 11237; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 1859; i <= 1874; i++) - materials[i] = Material.LightGrayBed; - for (int i = 21338; i <= 21353; i++) - materials[i] = Material.LightGrayCandle; - for (int i = 21484; i <= 21485; i++) - materials[i] = Material.LightGrayCandleCake; - materials[11071] = Material.LightGrayCarpet; - materials[13205] = Material.LightGrayConcrete; - materials[13221] = Material.LightGrayConcretePowder; - for (int i = 13165; i <= 13168; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 13085; i <= 13090; i++) - materials[i] = Material.LightGrayShulkerBox; - materials[6119] = Material.LightGrayStainedGlass; - for (int i = 9883; i <= 9914; i++) - materials[i] = Material.LightGrayStainedGlassPane; - materials[9619] = Material.LightGrayTerracotta; - for (int i = 11382; i <= 11385; i++) - materials[i] = Material.LightGrayWallBanner; - materials[2098] = Material.LightGrayWool; - for (int i = 9398; i <= 9413; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 25193; i <= 25216; i++) - materials[i] = Material.LightningRod; - for (int i = 11084; i <= 11085; i++) - materials[i] = Material.Lilac; - materials[2131] = Material.LilyOfTheValley; - materials[7501] = Material.LilyPad; - for (int i = 11174; i <= 11189; i++) - materials[i] = Material.LimeBanner; - for (int i = 1811; i <= 1826; i++) - materials[i] = Material.LimeBed; - for (int i = 21290; i <= 21305; i++) - materials[i] = Material.LimeCandle; - for (int i = 21478; i <= 21479; i++) - materials[i] = Material.LimeCandleCake; - materials[11068] = Material.LimeCarpet; - materials[13202] = Material.LimeConcrete; - materials[13218] = Material.LimeConcretePowder; - for (int i = 13153; i <= 13156; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 13067; i <= 13072; i++) - materials[i] = Material.LimeShulkerBox; - materials[6116] = Material.LimeStainedGlass; - for (int i = 9787; i <= 9818; i++) - materials[i] = Material.LimeStainedGlassPane; - materials[9616] = Material.LimeTerracotta; - for (int i = 11370; i <= 11373; i++) - materials[i] = Material.LimeWallBanner; - materials[2095] = Material.LimeWool; - materials[19928] = Material.Lodestone; - for (int i = 18873; i <= 18876; i++) - materials[i] = Material.Loom; - for (int i = 11126; i <= 11141; i++) - materials[i] = Material.MagentaBanner; - for (int i = 1763; i <= 1778; i++) - materials[i] = Material.MagentaBed; - for (int i = 21242; i <= 21257; i++) - materials[i] = Material.MagentaCandle; - for (int i = 21472; i <= 21473; i++) - materials[i] = Material.MagentaCandleCake; - materials[11065] = Material.MagentaCarpet; - materials[13199] = Material.MagentaConcrete; - materials[13215] = Material.MagentaConcretePowder; - for (int i = 13141; i <= 13144; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 13049; i <= 13054; i++) - materials[i] = Material.MagentaShulkerBox; - materials[6113] = Material.MagentaStainedGlass; - for (int i = 9691; i <= 9722; i++) - materials[i] = Material.MagentaStainedGlassPane; - materials[9613] = Material.MagentaTerracotta; - for (int i = 11358; i <= 11361; i++) - materials[i] = Material.MagentaWallBanner; - materials[2092] = Material.MagentaWool; - materials[13012] = Material.MagmaBlock; - for (int i = 9034; i <= 9057; i++) - materials[i] = Material.MangroveButton; - for (int i = 12675; i <= 12738; i++) - materials[i] = Material.MangroveDoor; - for (int i = 12163; i <= 12194; i++) - materials[i] = Material.MangroveFence; - for (int i = 11875; i <= 11906; i++) - materials[i] = Material.MangroveFenceGate; - for (int i = 5566; i <= 5629; i++) - materials[i] = Material.MangroveHangingSign; - for (int i = 476; i <= 503; i++) - materials[i] = Material.MangroveLeaves; - for (int i = 160; i <= 162; i++) - materials[i] = Material.MangroveLog; - materials[26] = Material.MangrovePlanks; - for (int i = 5896; i <= 5897; i++) - materials[i] = Material.MangrovePressurePlate; - for (int i = 45; i <= 84; i++) - materials[i] = Material.MangrovePropagule; - for (int i = 163; i <= 164; i++) - materials[i] = Material.MangroveRoots; - for (int i = 4610; i <= 4641; i++) - materials[i] = Material.MangroveSign; - for (int i = 11545; i <= 11550; i++) - materials[i] = Material.MangroveSlab; - for (int i = 10459; i <= 10538; i++) - materials[i] = Material.MangroveStairs; - for (int i = 6639; i <= 6702; i++) - materials[i] = Material.MangroveTrapdoor; - for (int i = 5758; i <= 5765; i++) - materials[i] = Material.MangroveWallHangingSign; - for (int i = 4910; i <= 4917; i++) - materials[i] = Material.MangroveWallSign; - for (int i = 222; i <= 224; i++) - materials[i] = Material.MangroveWood; - for (int i = 21526; i <= 21537; i++) - materials[i] = Material.MediumAmethystBud; - materials[7042] = Material.Melon; - for (int i = 7059; i <= 7066; i++) - materials[i] = Material.MelonStem; - materials[25312] = Material.MossBlock; - materials[25295] = Material.MossCarpet; - materials[2396] = Material.MossyCobblestone; - for (int i = 14575; i <= 14580; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 13751; i <= 13830; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 8473; i <= 8796; i++) - materials[i] = Material.MossyCobblestoneWall; - for (int i = 14563; i <= 14568; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 13591; i <= 13670; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 15601; i <= 15924; i++) - materials[i] = Material.MossyStoneBrickWall; - materials[6768] = Material.MossyStoneBricks; - for (int i = 2106; i <= 2117; i++) - materials[i] = Material.MovingPiston; - materials[25372] = Material.Mud; - for (int i = 11611; i <= 11616; i++) - materials[i] = Material.MudBrickSlab; - for (int i = 7419; i <= 7498; i++) - materials[i] = Material.MudBrickStairs; - for (int i = 16573; i <= 16896; i++) - materials[i] = Material.MudBrickWall; - materials[6772] = Material.MudBricks; - for (int i = 165; i <= 167; i++) - materials[i] = Material.MuddyMangroveRoots; - for (int i = 6907; i <= 6970; i++) - materials[i] = Material.MushroomStem; - for (int i = 7499; i <= 7500; i++) - materials[i] = Material.Mycelium; - for (int i = 7503; i <= 7534; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 11617; i <= 11622; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 7535; i <= 7614; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 16897; i <= 17220; i++) - materials[i] = Material.NetherBrickWall; - materials[7502] = Material.NetherBricks; - materials[135] = Material.NetherGoldOre; - for (int i = 6030; i <= 6031; i++) - materials[i] = Material.NetherPortal; - materials[9479] = Material.NetherQuartzOre; - materials[19064] = Material.NetherSprouts; - for (int i = 7615; i <= 7618; i++) - materials[i] = Material.NetherWart; - materials[13013] = Material.NetherWartBlock; - materials[19916] = Material.NetheriteBlock; - materials[6015] = Material.Netherrack; - for (int i = 581; i <= 1730; i++) - materials[i] = Material.NoteBlock; - for (int i = 8842; i <= 8865; i++) - materials[i] = Material.OakButton; - for (int i = 4674; i <= 4737; i++) - materials[i] = Material.OakDoor; - for (int i = 5983; i <= 6014; i++) - materials[i] = Material.OakFence; - for (int i = 7227; i <= 7258; i++) - materials[i] = Material.OakFenceGate; - for (int i = 4926; i <= 4989; i++) - materials[i] = Material.OakHangingSign; - for (int i = 252; i <= 279; i++) - materials[i] = Material.OakLeaves; - for (int i = 136; i <= 138; i++) - materials[i] = Material.OakLog; - materials[15] = Material.OakPlanks; - for (int i = 5880; i <= 5881; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 29; i <= 30; i++) - materials[i] = Material.OakSapling; - for (int i = 4354; i <= 4385; i++) - materials[i] = Material.OakSign; - for (int i = 11497; i <= 11502; i++) - materials[i] = Material.OakSlab; - for (int i = 2926; i <= 3005; i++) - materials[i] = Material.OakStairs; - for (int i = 6127; i <= 6190; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 5694; i <= 5701; i++) - materials[i] = Material.OakWallHangingSign; - for (int i = 4846; i <= 4853; i++) - materials[i] = Material.OakWallSign; - for (int i = 201; i <= 203; i++) - materials[i] = Material.OakWood; - for (int i = 13019; i <= 13030; i++) - materials[i] = Material.Observer; - materials[2397] = Material.Obsidian; - for (int i = 27032; i <= 27034; i++) - materials[i] = Material.OchreFroglight; - for (int i = 11110; i <= 11125; i++) - materials[i] = Material.OrangeBanner; - for (int i = 1747; i <= 1762; i++) - materials[i] = Material.OrangeBed; - for (int i = 21226; i <= 21241; i++) - materials[i] = Material.OrangeCandle; - for (int i = 21470; i <= 21471; i++) - materials[i] = Material.OrangeCandleCake; - materials[11064] = Material.OrangeCarpet; - materials[13198] = Material.OrangeConcrete; - materials[13214] = Material.OrangeConcretePowder; - for (int i = 13137; i <= 13140; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 13043; i <= 13048; i++) - materials[i] = Material.OrangeShulkerBox; - materials[6112] = Material.OrangeStainedGlass; - for (int i = 9659; i <= 9690; i++) - materials[i] = Material.OrangeStainedGlassPane; - materials[9612] = Material.OrangeTerracotta; - materials[2125] = Material.OrangeTulip; - for (int i = 11354; i <= 11357; i++) - materials[i] = Material.OrangeWallBanner; - materials[2091] = Material.OrangeWool; - materials[2128] = Material.OxeyeDaisy; - materials[23417] = Material.OxidizedChiseledCopper; - materials[23410] = Material.OxidizedCopper; - for (int i = 25173; i <= 25176; i++) - materials[i] = Material.OxidizedCopperBulb; - for (int i = 24249; i <= 24312; i++) - materials[i] = Material.OxidizedCopperDoor; - for (int i = 25151; i <= 25152; i++) - materials[i] = Material.OxidizedCopperGrate; - for (int i = 24761; i <= 24824; i++) - materials[i] = Material.OxidizedCopperTrapdoor; - materials[23413] = Material.OxidizedCutCopper; - for (int i = 23745; i <= 23750; i++) - materials[i] = Material.OxidizedCutCopperSlab; - for (int i = 23425; i <= 23504; i++) - materials[i] = Material.OxidizedCutCopperStairs; - materials[11081] = Material.PackedIce; - materials[6771] = Material.PackedMud; - for (int i = 27316; i <= 27317; i++) - materials[i] = Material.PaleHangingMoss; - materials[27153] = Material.PaleMossBlock; - for (int i = 27154; i <= 27315; i++) - materials[i] = Material.PaleMossCarpet; - for (int i = 9010; i <= 9033; i++) - materials[i] = Material.PaleOakButton; - for (int i = 12611; i <= 12674; i++) - materials[i] = Material.PaleOakDoor; - for (int i = 12131; i <= 12162; i++) - materials[i] = Material.PaleOakFence; - for (int i = 11843; i <= 11874; i++) - materials[i] = Material.PaleOakFenceGate; - for (int i = 5374; i <= 5437; i++) - materials[i] = Material.PaleOakHangingSign; - for (int i = 448; i <= 475; i++) - materials[i] = Material.PaleOakLeaves; - for (int i = 157; i <= 159; i++) - materials[i] = Material.PaleOakLog; - materials[25] = Material.PaleOakPlanks; - for (int i = 5894; i <= 5895; i++) - materials[i] = Material.PaleOakPressurePlate; - for (int i = 43; i <= 44; i++) - materials[i] = Material.PaleOakSapling; - for (int i = 4578; i <= 4609; i++) - materials[i] = Material.PaleOakSign; - for (int i = 11539; i <= 11544; i++) - materials[i] = Material.PaleOakSlab; - for (int i = 10379; i <= 10458; i++) - materials[i] = Material.PaleOakStairs; - for (int i = 6575; i <= 6638; i++) - materials[i] = Material.PaleOakTrapdoor; - for (int i = 5750; i <= 5757; i++) - materials[i] = Material.PaleOakWallHangingSign; - for (int i = 4902; i <= 4909; i++) - materials[i] = Material.PaleOakWallSign; - for (int i = 22; i <= 24; i++) - materials[i] = Material.PaleOakWood; - for (int i = 27038; i <= 27040; i++) - materials[i] = Material.PearlescentFroglight; - for (int i = 11088; i <= 11089; i++) - materials[i] = Material.Peony; - for (int i = 11587; i <= 11592; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 9322; i <= 9353; i++) - materials[i] = Material.PiglinHead; - for (int i = 9354; i <= 9361; i++) - materials[i] = Material.PiglinWallHead; - for (int i = 11190; i <= 11205; i++) - materials[i] = Material.PinkBanner; - for (int i = 1827; i <= 1842; i++) - materials[i] = Material.PinkBed; - for (int i = 21306; i <= 21321; i++) - materials[i] = Material.PinkCandle; - for (int i = 21480; i <= 21481; i++) - materials[i] = Material.PinkCandleCake; - materials[11069] = Material.PinkCarpet; - materials[13203] = Material.PinkConcrete; - materials[13219] = Material.PinkConcretePowder; - for (int i = 13157; i <= 13160; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 25296; i <= 25311; i++) - materials[i] = Material.PinkPetals; - for (int i = 13073; i <= 13078; i++) - materials[i] = Material.PinkShulkerBox; - materials[6117] = Material.PinkStainedGlass; - for (int i = 9819; i <= 9850; i++) - materials[i] = Material.PinkStainedGlassPane; - materials[9617] = Material.PinkTerracotta; - materials[2127] = Material.PinkTulip; - for (int i = 11374; i <= 11377; i++) - materials[i] = Material.PinkWallBanner; - materials[2096] = Material.PinkWool; - for (int i = 2054; i <= 2065; i++) - materials[i] = Material.Piston; - for (int i = 2066; i <= 2089; i++) - materials[i] = Material.PistonHead; - for (int i = 12966; i <= 12975; i++) - materials[i] = Material.PitcherCrop; - for (int i = 12976; i <= 12977; i++) - materials[i] = Material.PitcherPlant; - for (int i = 9202; i <= 9233; i++) - materials[i] = Material.PlayerHead; - for (int i = 9234; i <= 9241; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - for (int i = 25217; i <= 25236; i++) - materials[i] = Material.PointedDripstone; - materials[7] = Material.PolishedAndesite; - for (int i = 14617; i <= 14622; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 14391; i <= 14470; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 6021; i <= 6023; i++) - materials[i] = Material.PolishedBasalt; - materials[20340] = Material.PolishedBlackstone; - for (int i = 20344; i <= 20349; i++) - materials[i] = Material.PolishedBlackstoneBrickSlab; - for (int i = 20350; i <= 20429; i++) - materials[i] = Material.PolishedBlackstoneBrickStairs; - for (int i = 20430; i <= 20753; i++) - materials[i] = Material.PolishedBlackstoneBrickWall; - materials[20341] = Material.PolishedBlackstoneBricks; - for (int i = 20843; i <= 20866; i++) - materials[i] = Material.PolishedBlackstoneButton; - for (int i = 20841; i <= 20842; i++) - materials[i] = Material.PolishedBlackstonePressurePlate; - for (int i = 20835; i <= 20840; i++) - materials[i] = Material.PolishedBlackstoneSlab; - for (int i = 20755; i <= 20834; i++) - materials[i] = Material.PolishedBlackstoneStairs; - for (int i = 20867; i <= 21190; i++) - materials[i] = Material.PolishedBlackstoneWall; - materials[25787] = Material.PolishedDeepslate; - for (int i = 25868; i <= 25873; i++) - materials[i] = Material.PolishedDeepslateSlab; - for (int i = 25788; i <= 25867; i++) - materials[i] = Material.PolishedDeepslateStairs; - for (int i = 25874; i <= 26197; i++) - materials[i] = Material.PolishedDeepslateWall; - materials[5] = Material.PolishedDiorite; - for (int i = 14569; i <= 14574; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 13671; i <= 13750; i++) - materials[i] = Material.PolishedDioriteStairs; - materials[3] = Material.PolishedGranite; - for (int i = 14551; i <= 14556; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 13431; i <= 13510; i++) - materials[i] = Material.PolishedGraniteStairs; - materials[21961] = Material.PolishedTuff; - for (int i = 21962; i <= 21967; i++) - materials[i] = Material.PolishedTuffSlab; - for (int i = 21968; i <= 22047; i++) - materials[i] = Material.PolishedTuffStairs; - for (int i = 22048; i <= 22371; i++) - materials[i] = Material.PolishedTuffWall; - materials[2120] = Material.Poppy; - for (int i = 8834; i <= 8841; i++) - materials[i] = Material.Potatoes; - materials[8803] = Material.PottedAcaciaSapling; - materials[8812] = Material.PottedAllium; - materials[27030] = Material.PottedAzaleaBush; - materials[8813] = Material.PottedAzureBluet; - materials[13426] = Material.PottedBamboo; - materials[8801] = Material.PottedBirchSapling; - materials[8811] = Material.PottedBlueOrchid; - materials[8823] = Material.PottedBrownMushroom; - materials[8825] = Material.PottedCactus; - materials[8804] = Material.PottedCherrySapling; - materials[8819] = Material.PottedCornflower; - materials[19924] = Material.PottedCrimsonFungus; - materials[19926] = Material.PottedCrimsonRoots; - materials[8809] = Material.PottedDandelion; - materials[8805] = Material.PottedDarkOakSapling; - materials[8824] = Material.PottedDeadBush; - materials[8808] = Material.PottedFern; - materials[27031] = Material.PottedFloweringAzaleaBush; - materials[8802] = Material.PottedJungleSapling; - materials[8820] = Material.PottedLilyOfTheValley; - materials[8807] = Material.PottedMangrovePropagule; - materials[8799] = Material.PottedOakSapling; - materials[8815] = Material.PottedOrangeTulip; - materials[8818] = Material.PottedOxeyeDaisy; - materials[8806] = Material.PottedPaleOakSapling; - materials[8817] = Material.PottedPinkTulip; - materials[8810] = Material.PottedPoppy; - materials[8822] = Material.PottedRedMushroom; - materials[8814] = Material.PottedRedTulip; - materials[8800] = Material.PottedSpruceSapling; - materials[8798] = Material.PottedTorchflower; - materials[19925] = Material.PottedWarpedFungus; - materials[19927] = Material.PottedWarpedRoots; - materials[8816] = Material.PottedWhiteTulip; - materials[8821] = Material.PottedWitherRose; - materials[22787] = Material.PowderSnow; - for (int i = 7633; i <= 7635; i++) - materials[i] = Material.PowderSnowCauldron; - for (int i = 1987; i <= 2010; i++) - materials[i] = Material.PoweredRail; - materials[10798] = Material.Prismarine; - for (int i = 11047; i <= 11052; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 10881; i <= 10960; i++) - materials[i] = Material.PrismarineBrickStairs; - materials[10799] = Material.PrismarineBricks; - for (int i = 11041; i <= 11046; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 10801; i <= 10880; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 14953; i <= 15276; i++) - materials[i] = Material.PrismarineWall; - materials[7041] = Material.Pumpkin; - for (int i = 7051; i <= 7058; i++) - materials[i] = Material.PumpkinStem; - for (int i = 11254; i <= 11269; i++) - materials[i] = Material.PurpleBanner; - for (int i = 1891; i <= 1906; i++) - materials[i] = Material.PurpleBed; - for (int i = 21370; i <= 21385; i++) - materials[i] = Material.PurpleCandle; - for (int i = 21488; i <= 21489; i++) - materials[i] = Material.PurpleCandleCake; - materials[11073] = Material.PurpleCarpet; - materials[13207] = Material.PurpleConcrete; - materials[13223] = Material.PurpleConcretePowder; - for (int i = 13173; i <= 13176; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 13097; i <= 13102; i++) - materials[i] = Material.PurpleShulkerBox; - materials[6121] = Material.PurpleStainedGlass; - for (int i = 9947; i <= 9978; i++) - materials[i] = Material.PurpleStainedGlassPane; - materials[9621] = Material.PurpleTerracotta; - for (int i = 11390; i <= 11393; i++) - materials[i] = Material.PurpleWallBanner; - materials[2100] = Material.PurpleWool; - materials[12879] = Material.PurpurBlock; - for (int i = 12880; i <= 12882; i++) - materials[i] = Material.PurpurPillar; - for (int i = 11641; i <= 11646; i++) - materials[i] = Material.PurpurSlab; - for (int i = 12883; i <= 12962; i++) - materials[i] = Material.PurpurStairs; - materials[9490] = Material.QuartzBlock; - materials[21193] = Material.QuartzBricks; - for (int i = 9492; i <= 9494; i++) - materials[i] = Material.QuartzPillar; - for (int i = 11623; i <= 11628; i++) - materials[i] = Material.QuartzSlab; - for (int i = 9495; i <= 9574; i++) - materials[i] = Material.QuartzStairs; - for (int i = 4746; i <= 4765; i++) - materials[i] = Material.Rail; - materials[27028] = Material.RawCopperBlock; - materials[27029] = Material.RawGoldBlock; - materials[27027] = Material.RawIronBlock; - for (int i = 11318; i <= 11333; i++) - materials[i] = Material.RedBanner; - for (int i = 1955; i <= 1970; i++) - materials[i] = Material.RedBed; - for (int i = 21434; i <= 21449; i++) - materials[i] = Material.RedCandle; - for (int i = 21496; i <= 21497; i++) - materials[i] = Material.RedCandleCake; - materials[11077] = Material.RedCarpet; - materials[13211] = Material.RedConcrete; - materials[13227] = Material.RedConcretePowder; - for (int i = 13189; i <= 13192; i++) - materials[i] = Material.RedGlazedTerracotta; - materials[2133] = Material.RedMushroom; - for (int i = 6843; i <= 6906; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 14611; i <= 14616; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 14311; i <= 14390; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 17545; i <= 17868; i++) - materials[i] = Material.RedNetherBrickWall; - materials[13014] = Material.RedNetherBricks; - materials[123] = Material.RedSand; - materials[11414] = Material.RedSandstone; - for (int i = 11629; i <= 11634; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 11417; i <= 11496; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 15277; i <= 15600; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 13121; i <= 13126; i++) - materials[i] = Material.RedShulkerBox; - materials[6125] = Material.RedStainedGlass; - for (int i = 10075; i <= 10106; i++) - materials[i] = Material.RedStainedGlassPane; - materials[9625] = Material.RedTerracotta; - materials[2124] = Material.RedTulip; - for (int i = 11406; i <= 11409; i++) - materials[i] = Material.RedWallBanner; - materials[2104] = Material.RedWool; - materials[9478] = Material.RedstoneBlock; - for (int i = 7647; i <= 7648; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 5900; i <= 5901; i++) - materials[i] = Material.RedstoneOre; - for (int i = 5904; i <= 5905; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 5906; i <= 5913; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 3030; i <= 4325; i++) - materials[i] = Material.RedstoneWire; - materials[27042] = Material.ReinforcedDeepslate; - for (int i = 6047; i <= 6110; i++) - materials[i] = Material.Repeater; - for (int i = 12984; i <= 12995; i++) - materials[i] = Material.RepeatingCommandBlock; - for (int i = 19919; i <= 19923; i++) - materials[i] = Material.RespawnAnchor; - materials[25371] = Material.RootedDirt; - for (int i = 11086; i <= 11087; i++) - materials[i] = Material.RoseBush; - materials[118] = Material.Sand; - materials[578] = Material.Sandstone; - for (int i = 11575; i <= 11580; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 7661; i <= 7740; i++) - materials[i] = Material.SandstoneStairs; - for (int i = 17869; i <= 18192; i++) - materials[i] = Material.SandstoneWall; - for (int i = 18841; i <= 18872; i++) - materials[i] = Material.Scaffolding; - materials[23268] = Material.Sculk; - for (int i = 23397; i <= 23398; i++) - materials[i] = Material.SculkCatalyst; - for (int i = 22788; i <= 22883; i++) - materials[i] = Material.SculkSensor; - for (int i = 23399; i <= 23406; i++) - materials[i] = Material.SculkShrieker; - for (int i = 23269; i <= 23396; i++) - materials[i] = Material.SculkVein; - materials[11059] = Material.SeaLantern; - for (int i = 13402; i <= 13409; i++) - materials[i] = Material.SeaPickle; - materials[2051] = Material.Seagrass; - materials[2048] = Material.ShortGrass; - materials[19079] = Material.Shroomlight; - for (int i = 13031; i <= 13036; i++) - materials[i] = Material.ShulkerBox; - for (int i = 9082; i <= 9113; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 9114; i <= 9121; i++) - materials[i] = Material.SkeletonWallSkull; - materials[10699] = Material.SlimeBlock; - for (int i = 21538; i <= 21549; i++) - materials[i] = Material.SmallAmethystBud; - for (int i = 25353; i <= 25368; i++) - materials[i] = Material.SmallDripleaf; - materials[18935] = Material.SmithingTable; - for (int i = 18889; i <= 18896; i++) - materials[i] = Material.Smoker; - materials[27026] = Material.SmoothBasalt; - materials[11649] = Material.SmoothQuartz; - for (int i = 14593; i <= 14598; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 14071; i <= 14150; i++) - materials[i] = Material.SmoothQuartzStairs; - materials[11650] = Material.SmoothRedSandstone; - for (int i = 14557; i <= 14562; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 13511; i <= 13590; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - materials[11648] = Material.SmoothSandstone; - for (int i = 14587; i <= 14592; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 13991; i <= 14070; i++) - materials[i] = Material.SmoothSandstoneStairs; - materials[11647] = Material.SmoothStone; - for (int i = 11569; i <= 11574; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 13269; i <= 13271; i++) - materials[i] = Material.SnifferEgg; - for (int i = 5938; i <= 5945; i++) - materials[i] = Material.Snow; - materials[5947] = Material.SnowBlock; - for (int i = 19012; i <= 19043; i++) - materials[i] = Material.SoulCampfire; - materials[2915] = Material.SoulFire; - for (int i = 18976; i <= 18979; i++) - materials[i] = Material.SoulLantern; - materials[6016] = Material.SoulSand; - materials[6017] = Material.SoulSoil; - materials[6024] = Material.SoulTorch; - for (int i = 6025; i <= 6028; i++) - materials[i] = Material.SoulWallTorch; - materials[2916] = Material.Spawner; - materials[560] = Material.Sponge; - materials[25292] = Material.SporeBlossom; - for (int i = 8866; i <= 8889; i++) - materials[i] = Material.SpruceButton; - for (int i = 12227; i <= 12290; i++) - materials[i] = Material.SpruceDoor; - for (int i = 11939; i <= 11970; i++) - materials[i] = Material.SpruceFence; - for (int i = 11651; i <= 11682; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 4990; i <= 5053; i++) - materials[i] = Material.SpruceHangingSign; - for (int i = 280; i <= 307; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 139; i <= 141; i++) - materials[i] = Material.SpruceLog; - materials[16] = Material.SprucePlanks; - for (int i = 5882; i <= 5883; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 31; i <= 32; i++) - materials[i] = Material.SpruceSapling; - for (int i = 4386; i <= 4417; i++) - materials[i] = Material.SpruceSign; - for (int i = 11503; i <= 11508; i++) - materials[i] = Material.SpruceSlab; - for (int i = 7896; i <= 7975; i++) - materials[i] = Material.SpruceStairs; - for (int i = 6191; i <= 6254; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 5702; i <= 5709; i++) - materials[i] = Material.SpruceWallHangingSign; - for (int i = 4854; i <= 4861; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 204; i <= 206; i++) - materials[i] = Material.SpruceWood; - for (int i = 2035; i <= 2046; i++) - materials[i] = Material.StickyPiston; - materials[1] = Material.Stone; - for (int i = 11605; i <= 11610; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 7339; i <= 7418; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 16249; i <= 16572; i++) - materials[i] = Material.StoneBrickWall; - materials[6767] = Material.StoneBricks; - for (int i = 5914; i <= 5937; i++) - materials[i] = Material.StoneButton; - for (int i = 5814; i <= 5815; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 11563; i <= 11568; i++) - materials[i] = Material.StoneSlab; - for (int i = 13911; i <= 13990; i++) - materials[i] = Material.StoneStairs; - for (int i = 18936; i <= 18939; i++) - materials[i] = Material.Stonecutter; - for (int i = 180; i <= 182; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 237; i <= 239; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 198; i <= 200; i++) - materials[i] = Material.StrippedBambooBlock; - for (int i = 174; i <= 176; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 231; i <= 233; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 183; i <= 185; i++) - materials[i] = Material.StrippedCherryLog; - for (int i = 240; i <= 242; i++) - materials[i] = Material.StrippedCherryWood; - for (int i = 19074; i <= 19076; i++) - materials[i] = Material.StrippedCrimsonHyphae; - for (int i = 19068; i <= 19070; i++) - materials[i] = Material.StrippedCrimsonStem; - for (int i = 186; i <= 188; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 243; i <= 245; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 177; i <= 179; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 234; i <= 236; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 195; i <= 197; i++) - materials[i] = Material.StrippedMangroveLog; - for (int i = 249; i <= 251; i++) - materials[i] = Material.StrippedMangroveWood; - for (int i = 192; i <= 194; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 225; i <= 227; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 189; i <= 191; i++) - materials[i] = Material.StrippedPaleOakLog; - for (int i = 246; i <= 248; i++) - materials[i] = Material.StrippedPaleOakWood; - for (int i = 171; i <= 173; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 228; i <= 230; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 19057; i <= 19059; i++) - materials[i] = Material.StrippedWarpedHyphae; - for (int i = 19051; i <= 19053; i++) - materials[i] = Material.StrippedWarpedStem; - for (int i = 19825; i <= 19828; i++) - materials[i] = Material.StructureBlock; - materials[13018] = Material.StructureVoid; - for (int i = 5965; i <= 5980; i++) - materials[i] = Material.SugarCane; - for (int i = 11082; i <= 11083; i++) - materials[i] = Material.Sunflower; - for (int i = 125; i <= 128; i++) - materials[i] = Material.SuspiciousGravel; - for (int i = 119; i <= 122; i++) - materials[i] = Material.SuspiciousSand; - for (int i = 19044; i <= 19047; i++) - materials[i] = Material.SweetBerryBush; - for (int i = 11090; i <= 11091; i++) - materials[i] = Material.TallGrass; - for (int i = 2052; i <= 2053; i++) - materials[i] = Material.TallSeagrass; - for (int i = 19850; i <= 19865; i++) - materials[i] = Material.Target; - materials[11079] = Material.Terracotta; - materials[22786] = Material.TintedGlass; - for (int i = 2137; i <= 2138; i++) - materials[i] = Material.Tnt; - materials[2398] = Material.Torch; - materials[2119] = Material.Torchflower; - for (int i = 12964; i <= 12965; i++) - materials[i] = Material.TorchflowerCrop; - for (int i = 9374; i <= 9397; i++) - materials[i] = Material.TrappedChest; - for (int i = 27107; i <= 27118; i++) - materials[i] = Material.TrialSpawner; - for (int i = 7767; i <= 7894; i++) - materials[i] = Material.Tripwire; - for (int i = 7751; i <= 7766; i++) - materials[i] = Material.TripwireHook; - for (int i = 13292; i <= 13293; i++) - materials[i] = Material.TubeCoral; - materials[13277] = Material.TubeCoralBlock; - for (int i = 13312; i <= 13313; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 13362; i <= 13369; i++) - materials[i] = Material.TubeCoralWallFan; - materials[21550] = Material.Tuff; - for (int i = 22374; i <= 22379; i++) - materials[i] = Material.TuffBrickSlab; - for (int i = 22380; i <= 22459; i++) - materials[i] = Material.TuffBrickStairs; - for (int i = 22460; i <= 22783; i++) - materials[i] = Material.TuffBrickWall; - materials[22373] = Material.TuffBricks; - for (int i = 21551; i <= 21556; i++) - materials[i] = Material.TuffSlab; - for (int i = 21557; i <= 21636; i++) - materials[i] = Material.TuffStairs; - for (int i = 21637; i <= 21960; i++) - materials[i] = Material.TuffWall; - for (int i = 13257; i <= 13268; i++) - materials[i] = Material.TurtleEgg; - for (int i = 19107; i <= 19132; i++) - materials[i] = Material.TwistingVines; - materials[19133] = Material.TwistingVinesPlant; - for (int i = 27119; i <= 27150; i++) - materials[i] = Material.Vault; - for (int i = 27035; i <= 27037; i++) - materials[i] = Material.VerdantFroglight; - for (int i = 7067; i <= 7098; i++) - materials[i] = Material.Vine; - materials[13427] = Material.VoidAir; - for (int i = 2399; i <= 2402; i++) - materials[i] = Material.WallTorch; - for (int i = 19593; i <= 19616; i++) - materials[i] = Material.WarpedButton; - for (int i = 19681; i <= 19744; i++) - materials[i] = Material.WarpedDoor; - for (int i = 19185; i <= 19216; i++) - materials[i] = Material.WarpedFence; - for (int i = 19377; i <= 19408; i++) - materials[i] = Material.WarpedFenceGate; - materials[19061] = Material.WarpedFungus; - for (int i = 5502; i <= 5565; i++) - materials[i] = Material.WarpedHangingSign; - for (int i = 19054; i <= 19056; i++) - materials[i] = Material.WarpedHyphae; - materials[19060] = Material.WarpedNylium; - materials[19136] = Material.WarpedPlanks; - for (int i = 19151; i <= 19152; i++) - materials[i] = Material.WarpedPressurePlate; - materials[19063] = Material.WarpedRoots; - for (int i = 19777; i <= 19808; i++) - materials[i] = Material.WarpedSign; - for (int i = 19143; i <= 19148; i++) - materials[i] = Material.WarpedSlab; - for (int i = 19489; i <= 19568; i++) - materials[i] = Material.WarpedStairs; - for (int i = 19048; i <= 19050; i++) - materials[i] = Material.WarpedStem; - for (int i = 19281; i <= 19344; i++) - materials[i] = Material.WarpedTrapdoor; - for (int i = 5774; i <= 5781; i++) - materials[i] = Material.WarpedWallHangingSign; - for (int i = 19817; i <= 19824; i++) - materials[i] = Material.WarpedWallSign; - materials[19062] = Material.WarpedWartBlock; - for (int i = 86; i <= 101; i++) - materials[i] = Material.Water; - for (int i = 7629; i <= 7631; i++) - materials[i] = Material.WaterCauldron; - materials[23424] = Material.WaxedChiseledCopper; - materials[23769] = Material.WaxedCopperBlock; - for (int i = 25177; i <= 25180; i++) - materials[i] = Material.WaxedCopperBulb; - for (int i = 24377; i <= 24440; i++) - materials[i] = Material.WaxedCopperDoor; - for (int i = 25153; i <= 25154; i++) - materials[i] = Material.WaxedCopperGrate; - for (int i = 24889; i <= 24952; i++) - materials[i] = Material.WaxedCopperTrapdoor; - materials[23776] = Material.WaxedCutCopper; - for (int i = 24115; i <= 24120; i++) - materials[i] = Material.WaxedCutCopperSlab; - for (int i = 24017; i <= 24096; i++) - materials[i] = Material.WaxedCutCopperStairs; - materials[23423] = Material.WaxedExposedChiseledCopper; - materials[23771] = Material.WaxedExposedCopper; - for (int i = 25181; i <= 25184; i++) - materials[i] = Material.WaxedExposedCopperBulb; - for (int i = 24441; i <= 24504; i++) - materials[i] = Material.WaxedExposedCopperDoor; - for (int i = 25155; i <= 25156; i++) - materials[i] = Material.WaxedExposedCopperGrate; - for (int i = 24953; i <= 25016; i++) - materials[i] = Material.WaxedExposedCopperTrapdoor; - materials[23775] = Material.WaxedExposedCutCopper; - for (int i = 24109; i <= 24114; i++) - materials[i] = Material.WaxedExposedCutCopperSlab; - for (int i = 23937; i <= 24016; i++) - materials[i] = Material.WaxedExposedCutCopperStairs; - materials[23421] = Material.WaxedOxidizedChiseledCopper; - materials[23772] = Material.WaxedOxidizedCopper; - for (int i = 25189; i <= 25192; i++) - materials[i] = Material.WaxedOxidizedCopperBulb; - for (int i = 24505; i <= 24568; i++) - materials[i] = Material.WaxedOxidizedCopperDoor; - for (int i = 25159; i <= 25160; i++) - materials[i] = Material.WaxedOxidizedCopperGrate; - for (int i = 25017; i <= 25080; i++) - materials[i] = Material.WaxedOxidizedCopperTrapdoor; - materials[23773] = Material.WaxedOxidizedCutCopper; - for (int i = 24097; i <= 24102; i++) - materials[i] = Material.WaxedOxidizedCutCopperSlab; - for (int i = 23777; i <= 23856; i++) - materials[i] = Material.WaxedOxidizedCutCopperStairs; - materials[23422] = Material.WaxedWeatheredChiseledCopper; - materials[23770] = Material.WaxedWeatheredCopper; - for (int i = 25185; i <= 25188; i++) - materials[i] = Material.WaxedWeatheredCopperBulb; - for (int i = 24569; i <= 24632; i++) - materials[i] = Material.WaxedWeatheredCopperDoor; - for (int i = 25157; i <= 25158; i++) - materials[i] = Material.WaxedWeatheredCopperGrate; - for (int i = 25081; i <= 25144; i++) - materials[i] = Material.WaxedWeatheredCopperTrapdoor; - materials[23774] = Material.WaxedWeatheredCutCopper; - for (int i = 24103; i <= 24108; i++) - materials[i] = Material.WaxedWeatheredCutCopperSlab; - for (int i = 23857; i <= 23936; i++) - materials[i] = Material.WaxedWeatheredCutCopperStairs; - materials[23418] = Material.WeatheredChiseledCopper; - materials[23409] = Material.WeatheredCopper; - for (int i = 25169; i <= 25172; i++) - materials[i] = Material.WeatheredCopperBulb; - for (int i = 24313; i <= 24376; i++) - materials[i] = Material.WeatheredCopperDoor; - for (int i = 25149; i <= 25150; i++) - materials[i] = Material.WeatheredCopperGrate; - for (int i = 24825; i <= 24888; i++) - materials[i] = Material.WeatheredCopperTrapdoor; - materials[23414] = Material.WeatheredCutCopper; - for (int i = 23751; i <= 23756; i++) - materials[i] = Material.WeatheredCutCopperSlab; - for (int i = 23505; i <= 23584; i++) - materials[i] = Material.WeatheredCutCopperStairs; - for (int i = 19080; i <= 19105; i++) - materials[i] = Material.WeepingVines; - materials[19106] = Material.WeepingVinesPlant; - materials[561] = Material.WetSponge; - for (int i = 4330; i <= 4337; i++) - materials[i] = Material.Wheat; - for (int i = 11094; i <= 11109; i++) - materials[i] = Material.WhiteBanner; - for (int i = 1731; i <= 1746; i++) - materials[i] = Material.WhiteBed; - for (int i = 21210; i <= 21225; i++) - materials[i] = Material.WhiteCandle; - for (int i = 21468; i <= 21469; i++) - materials[i] = Material.WhiteCandleCake; - materials[11063] = Material.WhiteCarpet; - materials[13197] = Material.WhiteConcrete; - materials[13213] = Material.WhiteConcretePowder; - for (int i = 13133; i <= 13136; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 13037; i <= 13042; i++) - materials[i] = Material.WhiteShulkerBox; - materials[6111] = Material.WhiteStainedGlass; - for (int i = 9627; i <= 9658; i++) - materials[i] = Material.WhiteStainedGlassPane; - materials[9611] = Material.WhiteTerracotta; - materials[2126] = Material.WhiteTulip; - for (int i = 11350; i <= 11353; i++) - materials[i] = Material.WhiteWallBanner; - materials[2090] = Material.WhiteWool; - materials[2130] = Material.WitherRose; - for (int i = 9122; i <= 9153; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 9154; i <= 9161; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 11158; i <= 11173; i++) - materials[i] = Material.YellowBanner; - for (int i = 1795; i <= 1810; i++) - materials[i] = Material.YellowBed; - for (int i = 21274; i <= 21289; i++) - materials[i] = Material.YellowCandle; - for (int i = 21476; i <= 21477; i++) - materials[i] = Material.YellowCandleCake; - materials[11067] = Material.YellowCarpet; - materials[13201] = Material.YellowConcrete; - materials[13217] = Material.YellowConcretePowder; - for (int i = 13149; i <= 13152; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 13061; i <= 13066; i++) - materials[i] = Material.YellowShulkerBox; - materials[6115] = Material.YellowStainedGlass; - for (int i = 9755; i <= 9786; i++) - materials[i] = Material.YellowStainedGlassPane; - materials[9615] = Material.YellowTerracotta; - for (int i = 11366; i <= 11369; i++) - materials[i] = Material.YellowWallBanner; - materials[2094] = Material.YellowWool; - for (int i = 9162; i <= 9193; i++) - materials[i] = Material.ZombieHead; - for (int i = 9194; i <= 9201; i++) - materials[i] = Material.ZombieWallHead; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(22, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(29, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(31, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(33, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(35, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(37, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(39, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(41, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(43, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(45, 40, - [ - new("age", ["0", "1", "2", "3", "4"], 8), - new("hanging", ["true", "false"], 4), - new("stage", ["0", "1"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(86, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(102, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(119, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(125, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(136, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(139, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(142, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(145, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(148, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(151, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(154, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(157, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(160, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(163, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(165, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(168, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(171, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(174, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(177, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(180, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(183, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(186, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(189, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(192, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(195, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(198, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(201, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(204, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(207, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(210, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(213, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(216, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(219, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(222, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(225, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(228, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(231, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(234, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(237, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(240, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(243, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(246, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(249, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(252, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(280, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(308, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(336, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(364, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(392, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(420, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(448, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(476, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(504, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(532, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(566, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(581, 1150, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling", "zombie", "skeleton", "creeper", "dragon", "wither_skeleton", "piglin", "custom_head"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1731, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1747, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1763, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1779, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1795, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1811, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1827, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1843, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1859, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1875, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1891, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1907, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1923, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1939, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1955, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1971, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1987, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2011, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2035, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2052, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(2054, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2066, 24, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2) - ]), - new(2106, 12, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 2) - ]), - new(2137, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(2140, 256, - [ - new("facing", ["north", "south", "west", "east"], 64), - new("slot_0_occupied", ["true", "false"], 32), - new("slot_1_occupied", ["true", "false"], 16), - new("slot_2_occupied", ["true", "false"], 8), - new("slot_3_occupied", ["true", "false"], 4), - new("slot_4_occupied", ["true", "false"], 2), - new("slot_5_occupied", ["true", "false"], 1) - ]), - new(2399, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(2403, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(2917, 9, - [ - new("axis", ["x", "y", "z"], 3), - new("creaking", ["disabled", "dormant", "active"], 1) - ]), - new(2926, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3006, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(3030, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(4330, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4338, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4346, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(4354, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4386, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4418, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4450, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4482, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4514, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4546, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4578, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4610, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4642, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4674, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4738, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4746, 20, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4766, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4846, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4854, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4862, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4870, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4878, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4886, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4894, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4902, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4910, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4918, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4926, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4990, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5054, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5118, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5182, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5246, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5310, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5374, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5438, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5502, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5566, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5630, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5694, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5702, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5710, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5718, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5726, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5734, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5742, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5750, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5758, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5766, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5774, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5782, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5790, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5814, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5816, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5880, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5882, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5884, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5886, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5888, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5890, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5892, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5894, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5896, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5898, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5900, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5902, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5904, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5906, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(5914, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5938, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(5948, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5965, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5981, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(5983, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6018, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(6021, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(6025, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6030, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(6032, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6036, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6040, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(6047, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6127, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6191, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6255, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6319, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6383, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6447, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6511, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6575, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6639, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6703, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6779, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6843, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6907, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6971, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7003, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7009, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7043, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7047, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7051, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(7059, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(7067, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7099, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7227, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7259, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7339, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7419, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7499, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(7503, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7535, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7615, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(7620, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(7629, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(7633, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(7637, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7647, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(7649, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7661, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7743, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7751, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7767, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7896, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7976, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8056, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8136, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8149, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(8473, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(8826, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8834, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8842, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8866, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8890, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8914, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8938, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8962, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8986, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9010, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9034, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9058, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9082, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9114, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9122, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9154, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9162, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9194, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9202, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9234, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9242, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9274, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9282, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9314, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9322, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9354, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9362, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9366, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9370, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9374, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(9398, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9414, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9430, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9446, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9480, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(9492, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(9495, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9575, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9599, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(9627, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9659, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9691, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9723, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9755, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9787, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9819, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9851, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9883, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9915, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9947, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9979, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10011, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10043, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10075, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10107, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10139, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10219, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10299, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10379, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10459, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10539, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10619, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10700, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(10702, 32, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10734, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10801, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10881, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10961, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11041, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11047, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11053, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11060, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(11082, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11084, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11086, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11088, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11090, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11092, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11094, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11110, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11126, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11142, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11158, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11174, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11190, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11206, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11222, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11238, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11254, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11270, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11286, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11302, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11318, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11334, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11350, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11354, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11358, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11362, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11366, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11370, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11374, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11378, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11382, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11386, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11390, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11394, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11398, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11402, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11406, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11410, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11417, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11497, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11503, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11509, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11515, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11521, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11527, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11533, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11539, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11545, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11551, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11557, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11563, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11569, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11575, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11581, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11587, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11593, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11599, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11605, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11611, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11617, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11623, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11629, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11635, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11641, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11651, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11683, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11715, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11747, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11779, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11811, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11843, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11875, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11907, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11939, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11971, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12003, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12035, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12067, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12099, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12131, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12163, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12195, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12227, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12291, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12355, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12419, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12483, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12547, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12611, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12675, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12739, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12803, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12809, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12873, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(12880, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(12883, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12964, 2, - [ - new("age", ["0", "1"], 1) - ]), - new(12966, 10, - [ - new("age", ["0", "1", "2", "3", "4"], 2), - new("half", ["upper", "lower"], 1) - ]), - new(12976, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12978, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(12984, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(12996, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13008, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(13015, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(13019, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13031, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13037, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13043, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13049, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13055, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13061, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13067, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13073, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13079, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13085, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13091, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13097, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13103, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13109, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13115, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13121, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13127, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13133, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13137, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13141, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13145, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13149, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13153, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13157, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13161, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13165, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13169, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13173, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13177, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13181, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13185, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13189, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13193, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13229, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(13257, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(13269, 3, - [ - new("hatch", ["0", "1", "2"], 1) - ]), - new(13282, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13284, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13286, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13288, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13290, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13292, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13294, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13296, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13298, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13300, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13302, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13304, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13306, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13308, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13310, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13312, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13314, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13316, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13318, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13320, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13322, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13330, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13338, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13346, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13354, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13362, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13370, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13378, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13386, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13394, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13402, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13411, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13414, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(13429, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(13431, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13511, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13591, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13671, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13751, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13831, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13911, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13991, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14071, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14151, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14231, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14311, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14391, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14471, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14551, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14557, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14563, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14569, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14575, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14581, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14587, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14593, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14599, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14605, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14611, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14617, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14623, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14629, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(14953, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15277, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15601, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15925, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16249, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16573, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16897, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17221, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17545, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17869, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18193, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18517, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18841, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18873, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(18877, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(18889, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(18897, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(18907, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(18919, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18936, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(18940, 32, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(18972, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18976, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(18980, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19012, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19044, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(19048, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19051, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19054, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19057, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19065, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19068, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19071, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19074, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19080, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(19107, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(19137, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19143, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19149, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(19151, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(19153, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(19185, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(19217, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19281, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19345, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19377, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19409, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19489, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19569, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19593, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19617, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19681, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19745, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19777, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19809, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19817, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19825, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(19829, 12, - [ - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 1) - ]), - new(19841, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(19850, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(19866, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(19890, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(19919, 5, - [ - new("charges", ["0", "1", "2", "3", "4"], 1) - ]), - new(19930, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20010, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20334, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20344, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20350, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20430, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20755, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20835, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20841, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(20843, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20867, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(21194, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21210, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21226, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21242, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21258, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21274, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21290, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21306, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21322, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21338, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21354, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21370, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21386, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21402, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21418, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21434, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21450, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21466, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21468, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21470, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21472, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21474, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21476, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21478, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21480, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21482, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21484, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21486, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21488, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21490, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21492, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21494, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21496, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21498, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(21502, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21514, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21526, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21538, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21551, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21557, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21637, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(21962, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21968, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22048, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22374, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22380, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22460, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22788, 96, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22884, 384, - [ - new("facing", ["north", "south", "west", "east"], 96), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23269, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(23397, 2, - [ - new("bloom", ["true", "false"], 1) - ]), - new(23399, 8, - [ - new("can_summon", ["true", "false"], 4), - new("shrieking", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23425, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23505, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23585, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23665, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23745, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23751, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23757, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23763, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23777, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23857, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23937, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24017, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24097, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24103, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24109, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24115, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24121, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24185, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24249, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24313, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24377, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24441, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24505, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24569, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24633, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24697, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24761, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24825, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24889, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24953, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25017, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25081, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25145, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25147, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25149, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25151, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25153, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25155, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25157, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25159, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25161, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25165, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25169, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25173, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25177, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25181, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25185, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25189, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25193, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25217, 20, - [ - new("thickness", ["tip_merge", "tip", "frustum", "middle", "base"], 4), - new("vertical_direction", ["up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25238, 52, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 2), - new("berries", ["true", "false"], 1) - ]), - new(25290, 2, - [ - new("berries", ["true", "false"], 1) - ]), - new(25296, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("flower_amount", ["1", "2", "3", "4"], 1) - ]), - new(25313, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("tilt", ["none", "unstable", "partial", "full"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25345, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25353, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("half", ["upper", "lower"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25369, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25373, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(25377, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25457, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25463, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(25788, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25868, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25874, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(26199, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26279, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26285, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(26610, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26690, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26696, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(27023, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27032, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27035, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27038, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27043, 16, - [ - new("cracked", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27059, 48, - [ - new("crafting", ["true", "false"], 24), - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(27107, 12, - [ - new("ominous", ["true", "false"], 6), - new("trial_spawner_state", ["inactive", "waiting_for_players", "active", "waiting_for_reward_ejection", "ejecting_reward", "cooldown"], 1) - ]), - new(27119, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("ominous", ["true", "false"], 4), - new("vault_state", ["inactive", "active", "unlocking", "ejecting"], 1) - ]), - new(27151, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(27154, 162, - [ - new("bottom", ["true", "false"], 81), - new("east", ["none", "low", "tall"], 27), - new("north", ["none", "low", "tall"], 9), - new("south", ["none", "low", "tall"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(27316, 2, - [ - new("tip", ["true", "false"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette1214.cs b/MinecraftClient/Mapping/BlockPalettes/Palette1214.cs deleted file mode 100644 index 5d862fb6f2..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette1214.cs +++ /dev/null @@ -1,5762 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - public class Palette1214 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette1214() - { - for (int i = 9482; i <= 9505; i++) - materials[i] = Material.AcaciaButton; - for (int i = 12963; i <= 13026; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 12579; i <= 12610; i++) - materials[i] = Material.AcaciaFence; - for (int i = 12291; i <= 12322; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 5121; i <= 5184; i++) - materials[i] = Material.AcaciaHangingSign; - for (int i = 364; i <= 391; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 148; i <= 150; i++) - materials[i] = Material.AcaciaLog; - materials[19] = Material.AcaciaPlanks; - for (int i = 5891; i <= 5892; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 37; i <= 38; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 4453; i <= 4484; i++) - materials[i] = Material.AcaciaSign; - for (int i = 12065; i <= 12070; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 10683; i <= 10762; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 6386; i <= 6449; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 5721; i <= 5728; i++) - materials[i] = Material.AcaciaWallHangingSign; - for (int i = 4873; i <= 4880; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 213; i <= 215; i++) - materials[i] = Material.AcaciaWood; - for (int i = 10119; i <= 10142; i++) - materials[i] = Material.ActivatorRail; - materials[0] = Material.Air; - materials[2122] = Material.Allium; - materials[22044] = Material.AmethystBlock; - for (int i = 22046; i <= 22057; i++) - materials[i] = Material.AmethystCluster; - materials[20461] = Material.AncientDebris; - materials[6] = Material.Andesite; - for (int i = 15149; i <= 15154; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 14775; i <= 14854; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 17765; i <= 18088; i++) - materials[i] = Material.AndesiteWall; - for (int i = 9906; i <= 9909; i++) - materials[i] = Material.Anvil; - for (int i = 7050; i <= 7053; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 7046; i <= 7049; i++) - materials[i] = Material.AttachedPumpkinStem; - materials[25837] = Material.Azalea; - for (int i = 504; i <= 531; i++) - materials[i] = Material.AzaleaLeaves; - materials[2123] = Material.AzureBluet; - for (int i = 13958; i <= 13969; i++) - materials[i] = Material.Bamboo; - for (int i = 168; i <= 170; i++) - materials[i] = Material.BambooBlock; - for (int i = 9602; i <= 9625; i++) - materials[i] = Material.BambooButton; - for (int i = 13283; i <= 13346; i++) - materials[i] = Material.BambooDoor; - for (int i = 12739; i <= 12770; i++) - materials[i] = Material.BambooFence; - for (int i = 12451; i <= 12482; i++) - materials[i] = Material.BambooFenceGate; - for (int i = 5633; i <= 5696; i++) - materials[i] = Material.BambooHangingSign; - materials[28] = Material.BambooMosaic; - for (int i = 12101; i <= 12106; i++) - materials[i] = Material.BambooMosaicSlab; - for (int i = 11163; i <= 11242; i++) - materials[i] = Material.BambooMosaicStairs; - materials[27] = Material.BambooPlanks; - for (int i = 5901; i <= 5902; i++) - materials[i] = Material.BambooPressurePlate; - materials[13957] = Material.BambooSapling; - for (int i = 4645; i <= 4676; i++) - materials[i] = Material.BambooSign; - for (int i = 12095; i <= 12100; i++) - materials[i] = Material.BambooSlab; - for (int i = 11083; i <= 11162; i++) - materials[i] = Material.BambooStairs; - for (int i = 6706; i <= 6769; i++) - materials[i] = Material.BambooTrapdoor; - for (int i = 5785; i <= 5792; i++) - materials[i] = Material.BambooWallHangingSign; - for (int i = 4921; i <= 4928; i++) - materials[i] = Material.BambooWallSign; - for (int i = 19421; i <= 19432; i++) - materials[i] = Material.Barrel; - for (int i = 11244; i <= 11245; i++) - materials[i] = Material.Barrier; - for (int i = 6021; i <= 6023; i++) - materials[i] = Material.Basalt; - materials[8692] = Material.Beacon; - materials[85] = Material.Bedrock; - for (int i = 20410; i <= 20433; i++) - materials[i] = Material.BeeNest; - for (int i = 20434; i <= 20457; i++) - materials[i] = Material.Beehive; - for (int i = 13522; i <= 13525; i++) - materials[i] = Material.Beetroots; - for (int i = 19484; i <= 19515; i++) - materials[i] = Material.Bell; - for (int i = 25857; i <= 25888; i++) - materials[i] = Material.BigDripleaf; - for (int i = 25889; i <= 25896; i++) - materials[i] = Material.BigDripleafStem; - for (int i = 9434; i <= 9457; i++) - materials[i] = Material.BirchButton; - for (int i = 12835; i <= 12898; i++) - materials[i] = Material.BirchDoor; - for (int i = 12515; i <= 12546; i++) - materials[i] = Material.BirchFence; - for (int i = 12227; i <= 12258; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 5057; i <= 5120; i++) - materials[i] = Material.BirchHangingSign; - for (int i = 308; i <= 335; i++) - materials[i] = Material.BirchLeaves; - for (int i = 142; i <= 144; i++) - materials[i] = Material.BirchLog; - materials[17] = Material.BirchPlanks; - for (int i = 5887; i <= 5888; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 33; i <= 34; i++) - materials[i] = Material.BirchSapling; - for (int i = 4421; i <= 4452; i++) - materials[i] = Material.BirchSign; - for (int i = 12053; i <= 12058; i++) - materials[i] = Material.BirchSlab; - for (int i = 8520; i <= 8599; i++) - materials[i] = Material.BirchStairs; - for (int i = 6258; i <= 6321; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 5713; i <= 5720; i++) - materials[i] = Material.BirchWallHangingSign; - for (int i = 4865; i <= 4872; i++) - materials[i] = Material.BirchWallSign; - for (int i = 207; i <= 209; i++) - materials[i] = Material.BirchWood; - for (int i = 11878; i <= 11893; i++) - materials[i] = Material.BlackBanner; - for (int i = 1971; i <= 1986; i++) - materials[i] = Material.BlackBed; - for (int i = 21994; i <= 22009; i++) - materials[i] = Material.BlackCandle; - for (int i = 22042; i <= 22043; i++) - materials[i] = Material.BlackCandleCake; - materials[11622] = Material.BlackCarpet; - materials[13756] = Material.BlackConcrete; - materials[13772] = Material.BlackConcretePowder; - for (int i = 13737; i <= 13740; i++) - materials[i] = Material.BlackGlazedTerracotta; - for (int i = 13671; i <= 13676; i++) - materials[i] = Material.BlackShulkerBox; - materials[6129] = Material.BlackStainedGlass; - for (int i = 10651; i <= 10682; i++) - materials[i] = Material.BlackStainedGlassPane; - materials[10170] = Material.BlackTerracotta; - for (int i = 11954; i <= 11957; i++) - materials[i] = Material.BlackWallBanner; - materials[2105] = Material.BlackWool; - materials[20473] = Material.Blackstone; - for (int i = 20878; i <= 20883; i++) - materials[i] = Material.BlackstoneSlab; - for (int i = 20474; i <= 20553; i++) - materials[i] = Material.BlackstoneStairs; - for (int i = 20554; i <= 20877; i++) - materials[i] = Material.BlackstoneWall; - for (int i = 19441; i <= 19448; i++) - materials[i] = Material.BlastFurnace; - for (int i = 11814; i <= 11829; i++) - materials[i] = Material.BlueBanner; - for (int i = 1907; i <= 1922; i++) - materials[i] = Material.BlueBed; - for (int i = 21930; i <= 21945; i++) - materials[i] = Material.BlueCandle; - for (int i = 22034; i <= 22035; i++) - materials[i] = Material.BlueCandleCake; - materials[11618] = Material.BlueCarpet; - materials[13752] = Material.BlueConcrete; - materials[13768] = Material.BlueConcretePowder; - for (int i = 13721; i <= 13724; i++) - materials[i] = Material.BlueGlazedTerracotta; - materials[13954] = Material.BlueIce; - materials[2121] = Material.BlueOrchid; - for (int i = 13647; i <= 13652; i++) - materials[i] = Material.BlueShulkerBox; - materials[6125] = Material.BlueStainedGlass; - for (int i = 10523; i <= 10554; i++) - materials[i] = Material.BlueStainedGlassPane; - materials[10166] = Material.BlueTerracotta; - for (int i = 11938; i <= 11941; i++) - materials[i] = Material.BlueWallBanner; - materials[2101] = Material.BlueWool; - for (int i = 13559; i <= 13561; i++) - materials[i] = Material.BoneBlock; - materials[2139] = Material.Bookshelf; - for (int i = 13838; i <= 13839; i++) - materials[i] = Material.BrainCoral; - materials[13822] = Material.BrainCoralBlock; - for (int i = 13858; i <= 13859; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 13914; i <= 13921; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 8164; i <= 8171; i++) - materials[i] = Material.BrewingStand; - for (int i = 12143; i <= 12148; i++) - materials[i] = Material.BrickSlab; - for (int i = 7390; i <= 7469; i++) - materials[i] = Material.BrickStairs; - for (int i = 15173; i <= 15496; i++) - materials[i] = Material.BrickWall; - materials[2136] = Material.Bricks; - for (int i = 11830; i <= 11845; i++) - materials[i] = Material.BrownBanner; - for (int i = 1923; i <= 1938; i++) - materials[i] = Material.BrownBed; - for (int i = 21946; i <= 21961; i++) - materials[i] = Material.BrownCandle; - for (int i = 22036; i <= 22037; i++) - materials[i] = Material.BrownCandleCake; - materials[11619] = Material.BrownCarpet; - materials[13753] = Material.BrownConcrete; - materials[13769] = Material.BrownConcretePowder; - for (int i = 13725; i <= 13728; i++) - materials[i] = Material.BrownGlazedTerracotta; - materials[2132] = Material.BrownMushroom; - for (int i = 6782; i <= 6845; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 13653; i <= 13658; i++) - materials[i] = Material.BrownShulkerBox; - materials[6126] = Material.BrownStainedGlass; - for (int i = 10555; i <= 10586; i++) - materials[i] = Material.BrownStainedGlassPane; - materials[10167] = Material.BrownTerracotta; - for (int i = 11942; i <= 11945; i++) - materials[i] = Material.BrownWallBanner; - materials[2102] = Material.BrownWool; - for (int i = 13973; i <= 13974; i++) - materials[i] = Material.BubbleColumn; - for (int i = 13840; i <= 13841; i++) - materials[i] = Material.BubbleCoral; - materials[13823] = Material.BubbleCoralBlock; - for (int i = 13860; i <= 13861; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 13922; i <= 13929; i++) - materials[i] = Material.BubbleCoralWallFan; - materials[22045] = Material.BuddingAmethyst; - for (int i = 5951; i <= 5966; i++) - materials[i] = Material.Cactus; - for (int i = 6043; i <= 6049; i++) - materials[i] = Material.Cake; - materials[23329] = Material.Calcite; - for (int i = 23428; i <= 23811; i++) - materials[i] = Material.CalibratedSculkSensor; - for (int i = 19524; i <= 19555; i++) - materials[i] = Material.Campfire; - for (int i = 21738; i <= 21753; i++) - materials[i] = Material.Candle; - for (int i = 22010; i <= 22011; i++) - materials[i] = Material.CandleCake; - for (int i = 9370; i <= 9377; i++) - materials[i] = Material.Carrots; - materials[19449] = Material.CartographyTable; - for (int i = 6035; i <= 6038; i++) - materials[i] = Material.CarvedPumpkin; - materials[8172] = Material.Cauldron; - materials[13972] = Material.CaveAir; - for (int i = 25782; i <= 25833; i++) - materials[i] = Material.CaveVines; - for (int i = 25834; i <= 25835; i++) - materials[i] = Material.CaveVinesPlant; - for (int i = 7006; i <= 7011; i++) - materials[i] = Material.Chain; - for (int i = 13540; i <= 13551; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 9506; i <= 9529; i++) - materials[i] = Material.CherryButton; - for (int i = 13027; i <= 13090; i++) - materials[i] = Material.CherryDoor; - for (int i = 12611; i <= 12642; i++) - materials[i] = Material.CherryFence; - for (int i = 12323; i <= 12354; i++) - materials[i] = Material.CherryFenceGate; - for (int i = 5185; i <= 5248; i++) - materials[i] = Material.CherryHangingSign; - for (int i = 392; i <= 419; i++) - materials[i] = Material.CherryLeaves; - for (int i = 151; i <= 153; i++) - materials[i] = Material.CherryLog; - materials[20] = Material.CherryPlanks; - for (int i = 5893; i <= 5894; i++) - materials[i] = Material.CherryPressurePlate; - for (int i = 39; i <= 40; i++) - materials[i] = Material.CherrySapling; - for (int i = 4485; i <= 4516; i++) - materials[i] = Material.CherrySign; - for (int i = 12071; i <= 12076; i++) - materials[i] = Material.CherrySlab; - for (int i = 10763; i <= 10842; i++) - materials[i] = Material.CherryStairs; - for (int i = 6450; i <= 6513; i++) - materials[i] = Material.CherryTrapdoor; - for (int i = 5729; i <= 5736; i++) - materials[i] = Material.CherryWallHangingSign; - for (int i = 4881; i <= 4888; i++) - materials[i] = Material.CherryWallSign; - for (int i = 216; i <= 218; i++) - materials[i] = Material.CherryWood; - for (int i = 3009; i <= 3032; i++) - materials[i] = Material.Chest; - for (int i = 9910; i <= 9913; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 2140; i <= 2395; i++) - materials[i] = Material.ChiseledBookshelf; - materials[23964] = Material.ChiseledCopper; - materials[27564] = Material.ChiseledDeepslate; - materials[21735] = Material.ChiseledNetherBricks; - materials[20887] = Material.ChiseledPolishedBlackstone; - materials[10035] = Material.ChiseledQuartzBlock; - materials[11959] = Material.ChiseledRedSandstone; - materials[8045] = Material.ChiseledResinBricks; - materials[579] = Material.ChiseledSandstone; - materials[6773] = Material.ChiseledStoneBricks; - materials[22916] = Material.ChiseledTuff; - materials[23328] = Material.ChiseledTuffBricks; - for (int i = 13417; i <= 13422; i++) - materials[i] = Material.ChorusFlower; - for (int i = 13353; i <= 13416; i++) - materials[i] = Material.ChorusPlant; - materials[5967] = Material.Clay; - materials[27863] = Material.ClosedEyeblossom; - materials[11624] = Material.CoalBlock; - materials[133] = Material.CoalOre; - materials[11] = Material.CoarseDirt; - materials[25920] = Material.CobbledDeepslate; - for (int i = 26001; i <= 26006; i++) - materials[i] = Material.CobbledDeepslateSlab; - for (int i = 25921; i <= 26000; i++) - materials[i] = Material.CobbledDeepslateStairs; - for (int i = 26007; i <= 26330; i++) - materials[i] = Material.CobbledDeepslateWall; - materials[14] = Material.Cobblestone; - for (int i = 12137; i <= 12142; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 4769; i <= 4848; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 8693; i <= 9016; i++) - materials[i] = Material.CobblestoneWall; - materials[2047] = Material.Cobweb; - for (int i = 8193; i <= 8204; i++) - materials[i] = Material.Cocoa; - for (int i = 8680; i <= 8691; i++) - materials[i] = Material.CommandBlock; - for (int i = 9974; i <= 9989; i++) - materials[i] = Material.Comparator; - for (int i = 20385; i <= 20393; i++) - materials[i] = Material.Composter; - for (int i = 13955; i <= 13956; i++) - materials[i] = Material.Conduit; - materials[23951] = Material.CopperBlock; - for (int i = 25705; i <= 25708; i++) - materials[i] = Material.CopperBulb; - for (int i = 24665; i <= 24728; i++) - materials[i] = Material.CopperDoor; - for (int i = 25689; i <= 25690; i++) - materials[i] = Material.CopperGrate; - materials[23955] = Material.CopperOre; - for (int i = 25177; i <= 25240; i++) - materials[i] = Material.CopperTrapdoor; - materials[2129] = Material.Cornflower; - materials[27565] = Material.CrackedDeepslateBricks; - materials[27566] = Material.CrackedDeepslateTiles; - materials[21736] = Material.CrackedNetherBricks; - materials[20886] = Material.CrackedPolishedBlackstoneBricks; - materials[6772] = Material.CrackedStoneBricks; - for (int i = 27603; i <= 27650; i++) - materials[i] = Material.Crafter; - materials[4332] = Material.CraftingTable; - for (int i = 2917; i <= 2928; i++) - materials[i] = Material.CreakingHeart; - for (int i = 9786; i <= 9817; i++) - materials[i] = Material.CreeperHead; - for (int i = 9818; i <= 9825; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 20113; i <= 20136; i++) - materials[i] = Material.CrimsonButton; - for (int i = 20161; i <= 20224; i++) - materials[i] = Material.CrimsonDoor; - for (int i = 19697; i <= 19728; i++) - materials[i] = Material.CrimsonFence; - for (int i = 19889; i <= 19920; i++) - materials[i] = Material.CrimsonFenceGate; - materials[19622] = Material.CrimsonFungus; - for (int i = 5441; i <= 5504; i++) - materials[i] = Material.CrimsonHangingSign; - for (int i = 19615; i <= 19617; i++) - materials[i] = Material.CrimsonHyphae; - materials[19621] = Material.CrimsonNylium; - materials[19679] = Material.CrimsonPlanks; - for (int i = 19693; i <= 19694; i++) - materials[i] = Material.CrimsonPressurePlate; - materials[19678] = Material.CrimsonRoots; - for (int i = 20289; i <= 20320; i++) - materials[i] = Material.CrimsonSign; - for (int i = 19681; i <= 19686; i++) - materials[i] = Material.CrimsonSlab; - for (int i = 19953; i <= 20032; i++) - materials[i] = Material.CrimsonStairs; - for (int i = 19609; i <= 19611; i++) - materials[i] = Material.CrimsonStem; - for (int i = 19761; i <= 19824; i++) - materials[i] = Material.CrimsonTrapdoor; - for (int i = 5769; i <= 5776; i++) - materials[i] = Material.CrimsonWallHangingSign; - for (int i = 20353; i <= 20360; i++) - materials[i] = Material.CrimsonWallSign; - materials[20462] = Material.CryingObsidian; - materials[23960] = Material.CutCopper; - for (int i = 24307; i <= 24312; i++) - materials[i] = Material.CutCopperSlab; - for (int i = 24209; i <= 24288; i++) - materials[i] = Material.CutCopperStairs; - materials[11960] = Material.CutRedSandstone; - for (int i = 12179; i <= 12184; i++) - materials[i] = Material.CutRedSandstoneSlab; - materials[580] = Material.CutSandstone; - for (int i = 12125; i <= 12130; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 11782; i <= 11797; i++) - materials[i] = Material.CyanBanner; - for (int i = 1875; i <= 1890; i++) - materials[i] = Material.CyanBed; - for (int i = 21898; i <= 21913; i++) - materials[i] = Material.CyanCandle; - for (int i = 22030; i <= 22031; i++) - materials[i] = Material.CyanCandleCake; - materials[11616] = Material.CyanCarpet; - materials[13750] = Material.CyanConcrete; - materials[13766] = Material.CyanConcretePowder; - for (int i = 13713; i <= 13716; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 13635; i <= 13640; i++) - materials[i] = Material.CyanShulkerBox; - materials[6123] = Material.CyanStainedGlass; - for (int i = 10459; i <= 10490; i++) - materials[i] = Material.CyanStainedGlassPane; - materials[10164] = Material.CyanTerracotta; - for (int i = 11930; i <= 11933; i++) - materials[i] = Material.CyanWallBanner; - materials[2099] = Material.CyanWool; - for (int i = 9914; i <= 9917; i++) - materials[i] = Material.DamagedAnvil; - materials[2118] = Material.Dandelion; - for (int i = 9530; i <= 9553; i++) - materials[i] = Material.DarkOakButton; - for (int i = 13091; i <= 13154; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 12643; i <= 12674; i++) - materials[i] = Material.DarkOakFence; - for (int i = 12355; i <= 12386; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 5313; i <= 5376; i++) - materials[i] = Material.DarkOakHangingSign; - for (int i = 420; i <= 447; i++) - materials[i] = Material.DarkOakLeaves; - for (int i = 154; i <= 156; i++) - materials[i] = Material.DarkOakLog; - materials[21] = Material.DarkOakPlanks; - for (int i = 5895; i <= 5896; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 41; i <= 42; i++) - materials[i] = Material.DarkOakSapling; - for (int i = 4549; i <= 4580; i++) - materials[i] = Material.DarkOakSign; - for (int i = 12077; i <= 12082; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 10843; i <= 10922; i++) - materials[i] = Material.DarkOakStairs; - for (int i = 6514; i <= 6577; i++) - materials[i] = Material.DarkOakTrapdoor; - for (int i = 5745; i <= 5752; i++) - materials[i] = Material.DarkOakWallHangingSign; - for (int i = 4897; i <= 4904; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 219; i <= 221; i++) - materials[i] = Material.DarkOakWood; - materials[11344] = Material.DarkPrismarine; - for (int i = 11597; i <= 11602; i++) - materials[i] = Material.DarkPrismarineSlab; - for (int i = 11505; i <= 11584; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 9990; i <= 10021; i++) - materials[i] = Material.DaylightDetector; - for (int i = 13828; i <= 13829; i++) - materials[i] = Material.DeadBrainCoral; - materials[13817] = Material.DeadBrainCoralBlock; - for (int i = 13848; i <= 13849; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 13874; i <= 13881; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 13830; i <= 13831; i++) - materials[i] = Material.DeadBubbleCoral; - materials[13818] = Material.DeadBubbleCoralBlock; - for (int i = 13850; i <= 13851; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 13882; i <= 13889; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - materials[2050] = Material.DeadBush; - for (int i = 13832; i <= 13833; i++) - materials[i] = Material.DeadFireCoral; - materials[13819] = Material.DeadFireCoralBlock; - for (int i = 13852; i <= 13853; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 13890; i <= 13897; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 13834; i <= 13835; i++) - materials[i] = Material.DeadHornCoral; - materials[13820] = Material.DeadHornCoralBlock; - for (int i = 13854; i <= 13855; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 13898; i <= 13905; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 13826; i <= 13827; i++) - materials[i] = Material.DeadTubeCoral; - materials[13816] = Material.DeadTubeCoralBlock; - for (int i = 13846; i <= 13847; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 13866; i <= 13873; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 27587; i <= 27602; i++) - materials[i] = Material.DecoratedPot; - for (int i = 25917; i <= 25919; i++) - materials[i] = Material.Deepslate; - for (int i = 27234; i <= 27239; i++) - materials[i] = Material.DeepslateBrickSlab; - for (int i = 27154; i <= 27233; i++) - materials[i] = Material.DeepslateBrickStairs; - for (int i = 27240; i <= 27563; i++) - materials[i] = Material.DeepslateBrickWall; - materials[27153] = Material.DeepslateBricks; - materials[134] = Material.DeepslateCoalOre; - materials[23956] = Material.DeepslateCopperOre; - materials[4330] = Material.DeepslateDiamondOre; - materials[8286] = Material.DeepslateEmeraldOre; - materials[130] = Material.DeepslateGoldOre; - materials[132] = Material.DeepslateIronOre; - materials[564] = Material.DeepslateLapisOre; - for (int i = 5905; i <= 5906; i++) - materials[i] = Material.DeepslateRedstoneOre; - for (int i = 26823; i <= 26828; i++) - materials[i] = Material.DeepslateTileSlab; - for (int i = 26743; i <= 26822; i++) - materials[i] = Material.DeepslateTileStairs; - for (int i = 26829; i <= 27152; i++) - materials[i] = Material.DeepslateTileWall; - materials[26742] = Material.DeepslateTiles; - for (int i = 2011; i <= 2034; i++) - materials[i] = Material.DetectorRail; - materials[4331] = Material.DiamondBlock; - materials[4329] = Material.DiamondOre; - materials[4] = Material.Diorite; - for (int i = 15167; i <= 15172; i++) - materials[i] = Material.DioriteSlab; - for (int i = 15015; i <= 15094; i++) - materials[i] = Material.DioriteStairs; - for (int i = 19061; i <= 19384; i++) - materials[i] = Material.DioriteWall; - materials[10] = Material.Dirt; - materials[13526] = Material.DirtPath; - for (int i = 566; i <= 577; i++) - materials[i] = Material.Dispenser; - materials[8190] = Material.DragonEgg; - for (int i = 9826; i <= 9857; i++) - materials[i] = Material.DragonHead; - for (int i = 9858; i <= 9865; i++) - materials[i] = Material.DragonWallHead; - materials[13800] = Material.DriedKelpBlock; - materials[25781] = Material.DripstoneBlock; - for (int i = 10143; i <= 10154; i++) - materials[i] = Material.Dropper; - materials[8439] = Material.EmeraldBlock; - materials[8285] = Material.EmeraldOre; - materials[8163] = Material.EnchantingTable; - materials[13527] = Material.EndGateway; - materials[8180] = Material.EndPortal; - for (int i = 8181; i <= 8188; i++) - materials[i] = Material.EndPortalFrame; - for (int i = 13347; i <= 13352; i++) - materials[i] = Material.EndRod; - materials[8189] = Material.EndStone; - for (int i = 15125; i <= 15130; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 14375; i <= 14454; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 18737; i <= 19060; i++) - materials[i] = Material.EndStoneBrickWall; - materials[13507] = Material.EndStoneBricks; - for (int i = 8287; i <= 8294; i++) - materials[i] = Material.EnderChest; - materials[23963] = Material.ExposedChiseledCopper; - materials[23952] = Material.ExposedCopper; - for (int i = 25709; i <= 25712; i++) - materials[i] = Material.ExposedCopperBulb; - for (int i = 24729; i <= 24792; i++) - materials[i] = Material.ExposedCopperDoor; - for (int i = 25691; i <= 25692; i++) - materials[i] = Material.ExposedCopperGrate; - for (int i = 25241; i <= 25304; i++) - materials[i] = Material.ExposedCopperTrapdoor; - materials[23959] = Material.ExposedCutCopper; - for (int i = 24301; i <= 24306; i++) - materials[i] = Material.ExposedCutCopperSlab; - for (int i = 24129; i <= 24208; i++) - materials[i] = Material.ExposedCutCopperStairs; - for (int i = 4341; i <= 4348; i++) - materials[i] = Material.Farmland; - materials[2049] = Material.Fern; - for (int i = 2403; i <= 2914; i++) - materials[i] = Material.Fire; - for (int i = 13842; i <= 13843; i++) - materials[i] = Material.FireCoral; - materials[13824] = Material.FireCoralBlock; - for (int i = 13862; i <= 13863; i++) - materials[i] = Material.FireCoralFan; - for (int i = 13930; i <= 13937; i++) - materials[i] = Material.FireCoralWallFan; - materials[19450] = Material.FletchingTable; - materials[9341] = Material.FlowerPot; - materials[25838] = Material.FloweringAzalea; - for (int i = 532; i <= 559; i++) - materials[i] = Material.FloweringAzaleaLeaves; - materials[27585] = Material.Frogspawn; - for (int i = 13552; i <= 13555; i++) - materials[i] = Material.FrostedIce; - for (int i = 4349; i <= 4356; i++) - materials[i] = Material.Furnace; - materials[21298] = Material.GildedBlackstone; - materials[562] = Material.Glass; - for (int i = 7012; i <= 7043; i++) - materials[i] = Material.GlassPane; - for (int i = 7102; i <= 7229; i++) - materials[i] = Material.GlowLichen; - materials[6032] = Material.Glowstone; - materials[2134] = Material.GoldBlock; - materials[129] = Material.GoldOre; - materials[2] = Material.Granite; - for (int i = 15143; i <= 15148; i++) - materials[i] = Material.GraniteSlab; - for (int i = 14695; i <= 14774; i++) - materials[i] = Material.GraniteStairs; - for (int i = 16469; i <= 16792; i++) - materials[i] = Material.GraniteWall; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - materials[124] = Material.Gravel; - for (int i = 11750; i <= 11765; i++) - materials[i] = Material.GrayBanner; - for (int i = 1843; i <= 1858; i++) - materials[i] = Material.GrayBed; - for (int i = 21866; i <= 21881; i++) - materials[i] = Material.GrayCandle; - for (int i = 22026; i <= 22027; i++) - materials[i] = Material.GrayCandleCake; - materials[11614] = Material.GrayCarpet; - materials[13748] = Material.GrayConcrete; - materials[13764] = Material.GrayConcretePowder; - for (int i = 13705; i <= 13708; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 13623; i <= 13628; i++) - materials[i] = Material.GrayShulkerBox; - materials[6121] = Material.GrayStainedGlass; - for (int i = 10395; i <= 10426; i++) - materials[i] = Material.GrayStainedGlassPane; - materials[10162] = Material.GrayTerracotta; - for (int i = 11922; i <= 11925; i++) - materials[i] = Material.GrayWallBanner; - materials[2097] = Material.GrayWool; - for (int i = 11846; i <= 11861; i++) - materials[i] = Material.GreenBanner; - for (int i = 1939; i <= 1954; i++) - materials[i] = Material.GreenBed; - for (int i = 21962; i <= 21977; i++) - materials[i] = Material.GreenCandle; - for (int i = 22038; i <= 22039; i++) - materials[i] = Material.GreenCandleCake; - materials[11620] = Material.GreenCarpet; - materials[13754] = Material.GreenConcrete; - materials[13770] = Material.GreenConcretePowder; - for (int i = 13729; i <= 13732; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 13659; i <= 13664; i++) - materials[i] = Material.GreenShulkerBox; - materials[6127] = Material.GreenStainedGlass; - for (int i = 10587; i <= 10618; i++) - materials[i] = Material.GreenStainedGlassPane; - materials[10168] = Material.GreenTerracotta; - for (int i = 11946; i <= 11949; i++) - materials[i] = Material.GreenWallBanner; - materials[2103] = Material.GreenWool; - for (int i = 19451; i <= 19462; i++) - materials[i] = Material.Grindstone; - for (int i = 25913; i <= 25914; i++) - materials[i] = Material.HangingRoots; - for (int i = 11604; i <= 11606; i++) - materials[i] = Material.HayBlock; - for (int i = 27695; i <= 27696; i++) - materials[i] = Material.HeavyCore; - for (int i = 9958; i <= 9973; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - materials[20458] = Material.HoneyBlock; - materials[20459] = Material.HoneycombBlock; - for (int i = 10024; i <= 10033; i++) - materials[i] = Material.Hopper; - for (int i = 13844; i <= 13845; i++) - materials[i] = Material.HornCoral; - materials[13825] = Material.HornCoralBlock; - for (int i = 13864; i <= 13865; i++) - materials[i] = Material.HornCoralFan; - for (int i = 13938; i <= 13945; i++) - materials[i] = Material.HornCoralWallFan; - materials[5949] = Material.Ice; - materials[6781] = Material.InfestedChiseledStoneBricks; - materials[6777] = Material.InfestedCobblestone; - materials[6780] = Material.InfestedCrackedStoneBricks; - for (int i = 27567; i <= 27569; i++) - materials[i] = Material.InfestedDeepslate; - materials[6779] = Material.InfestedMossyStoneBricks; - materials[6776] = Material.InfestedStone; - materials[6778] = Material.InfestedStoneBricks; - for (int i = 6974; i <= 7005; i++) - materials[i] = Material.IronBars; - materials[2135] = Material.IronBlock; - for (int i = 5819; i <= 5882; i++) - materials[i] = Material.IronDoor; - materials[131] = Material.IronOre; - for (int i = 11278; i <= 11341; i++) - materials[i] = Material.IronTrapdoor; - for (int i = 6039; i <= 6042; i++) - materials[i] = Material.JackOLantern; - for (int i = 20373; i <= 20384; i++) - materials[i] = Material.Jigsaw; - for (int i = 5984; i <= 5985; i++) - materials[i] = Material.Jukebox; - for (int i = 9458; i <= 9481; i++) - materials[i] = Material.JungleButton; - for (int i = 12899; i <= 12962; i++) - materials[i] = Material.JungleDoor; - for (int i = 12547; i <= 12578; i++) - materials[i] = Material.JungleFence; - for (int i = 12259; i <= 12290; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 5249; i <= 5312; i++) - materials[i] = Material.JungleHangingSign; - for (int i = 336; i <= 363; i++) - materials[i] = Material.JungleLeaves; - for (int i = 145; i <= 147; i++) - materials[i] = Material.JungleLog; - materials[18] = Material.JunglePlanks; - for (int i = 5889; i <= 5890; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 35; i <= 36; i++) - materials[i] = Material.JungleSapling; - for (int i = 4517; i <= 4548; i++) - materials[i] = Material.JungleSign; - for (int i = 12059; i <= 12064; i++) - materials[i] = Material.JungleSlab; - for (int i = 8600; i <= 8679; i++) - materials[i] = Material.JungleStairs; - for (int i = 6322; i <= 6385; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 5737; i <= 5744; i++) - materials[i] = Material.JungleWallHangingSign; - for (int i = 4889; i <= 4896; i++) - materials[i] = Material.JungleWallSign; - for (int i = 210; i <= 212; i++) - materials[i] = Material.JungleWood; - for (int i = 13773; i <= 13798; i++) - materials[i] = Material.Kelp; - materials[13799] = Material.KelpPlant; - for (int i = 4741; i <= 4748; i++) - materials[i] = Material.Ladder; - for (int i = 19516; i <= 19519; i++) - materials[i] = Material.Lantern; - materials[565] = Material.LapisBlock; - materials[563] = Material.LapisOre; - for (int i = 22058; i <= 22069; i++) - materials[i] = Material.LargeAmethystBud; - for (int i = 11636; i <= 11637; i++) - materials[i] = Material.LargeFern; - for (int i = 102; i <= 117; i++) - materials[i] = Material.Lava; - materials[8176] = Material.LavaCauldron; - for (int i = 19463; i <= 19478; i++) - materials[i] = Material.Lectern; - for (int i = 5793; i <= 5816; i++) - materials[i] = Material.Lever; - for (int i = 11246; i <= 11277; i++) - materials[i] = Material.Light; - for (int i = 11686; i <= 11701; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 1779; i <= 1794; i++) - materials[i] = Material.LightBlueBed; - for (int i = 21802; i <= 21817; i++) - materials[i] = Material.LightBlueCandle; - for (int i = 22018; i <= 22019; i++) - materials[i] = Material.LightBlueCandleCake; - materials[11610] = Material.LightBlueCarpet; - materials[13744] = Material.LightBlueConcrete; - materials[13760] = Material.LightBlueConcretePowder; - for (int i = 13689; i <= 13692; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 13599; i <= 13604; i++) - materials[i] = Material.LightBlueShulkerBox; - materials[6117] = Material.LightBlueStainedGlass; - for (int i = 10267; i <= 10298; i++) - materials[i] = Material.LightBlueStainedGlassPane; - materials[10158] = Material.LightBlueTerracotta; - for (int i = 11906; i <= 11909; i++) - materials[i] = Material.LightBlueWallBanner; - materials[2093] = Material.LightBlueWool; - for (int i = 11766; i <= 11781; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 1859; i <= 1874; i++) - materials[i] = Material.LightGrayBed; - for (int i = 21882; i <= 21897; i++) - materials[i] = Material.LightGrayCandle; - for (int i = 22028; i <= 22029; i++) - materials[i] = Material.LightGrayCandleCake; - materials[11615] = Material.LightGrayCarpet; - materials[13749] = Material.LightGrayConcrete; - materials[13765] = Material.LightGrayConcretePowder; - for (int i = 13709; i <= 13712; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 13629; i <= 13634; i++) - materials[i] = Material.LightGrayShulkerBox; - materials[6122] = Material.LightGrayStainedGlass; - for (int i = 10427; i <= 10458; i++) - materials[i] = Material.LightGrayStainedGlassPane; - materials[10163] = Material.LightGrayTerracotta; - for (int i = 11926; i <= 11929; i++) - materials[i] = Material.LightGrayWallBanner; - materials[2098] = Material.LightGrayWool; - for (int i = 9942; i <= 9957; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 25737; i <= 25760; i++) - materials[i] = Material.LightningRod; - for (int i = 11628; i <= 11629; i++) - materials[i] = Material.Lilac; - materials[2131] = Material.LilyOfTheValley; - materials[7632] = Material.LilyPad; - for (int i = 11718; i <= 11733; i++) - materials[i] = Material.LimeBanner; - for (int i = 1811; i <= 1826; i++) - materials[i] = Material.LimeBed; - for (int i = 21834; i <= 21849; i++) - materials[i] = Material.LimeCandle; - for (int i = 22022; i <= 22023; i++) - materials[i] = Material.LimeCandleCake; - materials[11612] = Material.LimeCarpet; - materials[13746] = Material.LimeConcrete; - materials[13762] = Material.LimeConcretePowder; - for (int i = 13697; i <= 13700; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 13611; i <= 13616; i++) - materials[i] = Material.LimeShulkerBox; - materials[6119] = Material.LimeStainedGlass; - for (int i = 10331; i <= 10362; i++) - materials[i] = Material.LimeStainedGlassPane; - materials[10160] = Material.LimeTerracotta; - for (int i = 11914; i <= 11917; i++) - materials[i] = Material.LimeWallBanner; - materials[2095] = Material.LimeWool; - materials[20472] = Material.Lodestone; - for (int i = 19417; i <= 19420; i++) - materials[i] = Material.Loom; - for (int i = 11670; i <= 11685; i++) - materials[i] = Material.MagentaBanner; - for (int i = 1763; i <= 1778; i++) - materials[i] = Material.MagentaBed; - for (int i = 21786; i <= 21801; i++) - materials[i] = Material.MagentaCandle; - for (int i = 22016; i <= 22017; i++) - materials[i] = Material.MagentaCandleCake; - materials[11609] = Material.MagentaCarpet; - materials[13743] = Material.MagentaConcrete; - materials[13759] = Material.MagentaConcretePowder; - for (int i = 13685; i <= 13688; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 13593; i <= 13598; i++) - materials[i] = Material.MagentaShulkerBox; - materials[6116] = Material.MagentaStainedGlass; - for (int i = 10235; i <= 10266; i++) - materials[i] = Material.MagentaStainedGlassPane; - materials[10157] = Material.MagentaTerracotta; - for (int i = 11902; i <= 11905; i++) - materials[i] = Material.MagentaWallBanner; - materials[2092] = Material.MagentaWool; - materials[13556] = Material.MagmaBlock; - for (int i = 9578; i <= 9601; i++) - materials[i] = Material.MangroveButton; - for (int i = 13219; i <= 13282; i++) - materials[i] = Material.MangroveDoor; - for (int i = 12707; i <= 12738; i++) - materials[i] = Material.MangroveFence; - for (int i = 12419; i <= 12450; i++) - materials[i] = Material.MangroveFenceGate; - for (int i = 5569; i <= 5632; i++) - materials[i] = Material.MangroveHangingSign; - for (int i = 476; i <= 503; i++) - materials[i] = Material.MangroveLeaves; - for (int i = 160; i <= 162; i++) - materials[i] = Material.MangroveLog; - materials[26] = Material.MangrovePlanks; - for (int i = 5899; i <= 5900; i++) - materials[i] = Material.MangrovePressurePlate; - for (int i = 45; i <= 84; i++) - materials[i] = Material.MangrovePropagule; - for (int i = 163; i <= 164; i++) - materials[i] = Material.MangroveRoots; - for (int i = 4613; i <= 4644; i++) - materials[i] = Material.MangroveSign; - for (int i = 12089; i <= 12094; i++) - materials[i] = Material.MangroveSlab; - for (int i = 11003; i <= 11082; i++) - materials[i] = Material.MangroveStairs; - for (int i = 6642; i <= 6705; i++) - materials[i] = Material.MangroveTrapdoor; - for (int i = 5761; i <= 5768; i++) - materials[i] = Material.MangroveWallHangingSign; - for (int i = 4913; i <= 4920; i++) - materials[i] = Material.MangroveWallSign; - for (int i = 222; i <= 224; i++) - materials[i] = Material.MangroveWood; - for (int i = 22070; i <= 22081; i++) - materials[i] = Material.MediumAmethystBud; - materials[7045] = Material.Melon; - for (int i = 7062; i <= 7069; i++) - materials[i] = Material.MelonStem; - materials[25856] = Material.MossBlock; - materials[25839] = Material.MossCarpet; - materials[2396] = Material.MossyCobblestone; - for (int i = 15119; i <= 15124; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 14295; i <= 14374; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 9017; i <= 9340; i++) - materials[i] = Material.MossyCobblestoneWall; - for (int i = 15107; i <= 15112; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 14135; i <= 14214; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 16145; i <= 16468; i++) - materials[i] = Material.MossyStoneBrickWall; - materials[6771] = Material.MossyStoneBricks; - for (int i = 2106; i <= 2117; i++) - materials[i] = Material.MovingPiston; - materials[25916] = Material.Mud; - for (int i = 12155; i <= 12160; i++) - materials[i] = Material.MudBrickSlab; - for (int i = 7550; i <= 7629; i++) - materials[i] = Material.MudBrickStairs; - for (int i = 17117; i <= 17440; i++) - materials[i] = Material.MudBrickWall; - materials[6775] = Material.MudBricks; - for (int i = 165; i <= 167; i++) - materials[i] = Material.MuddyMangroveRoots; - for (int i = 6910; i <= 6973; i++) - materials[i] = Material.MushroomStem; - for (int i = 7630; i <= 7631; i++) - materials[i] = Material.Mycelium; - for (int i = 8047; i <= 8078; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 12161; i <= 12166; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 8079; i <= 8158; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 17441; i <= 17764; i++) - materials[i] = Material.NetherBrickWall; - materials[8046] = Material.NetherBricks; - materials[135] = Material.NetherGoldOre; - for (int i = 6033; i <= 6034; i++) - materials[i] = Material.NetherPortal; - materials[10023] = Material.NetherQuartzOre; - materials[19608] = Material.NetherSprouts; - for (int i = 8159; i <= 8162; i++) - materials[i] = Material.NetherWart; - materials[13557] = Material.NetherWartBlock; - materials[20460] = Material.NetheriteBlock; - materials[6018] = Material.Netherrack; - for (int i = 581; i <= 1730; i++) - materials[i] = Material.NoteBlock; - for (int i = 9386; i <= 9409; i++) - materials[i] = Material.OakButton; - for (int i = 4677; i <= 4740; i++) - materials[i] = Material.OakDoor; - for (int i = 5986; i <= 6017; i++) - materials[i] = Material.OakFence; - for (int i = 7358; i <= 7389; i++) - materials[i] = Material.OakFenceGate; - for (int i = 4929; i <= 4992; i++) - materials[i] = Material.OakHangingSign; - for (int i = 252; i <= 279; i++) - materials[i] = Material.OakLeaves; - for (int i = 136; i <= 138; i++) - materials[i] = Material.OakLog; - materials[15] = Material.OakPlanks; - for (int i = 5883; i <= 5884; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 29; i <= 30; i++) - materials[i] = Material.OakSapling; - for (int i = 4357; i <= 4388; i++) - materials[i] = Material.OakSign; - for (int i = 12041; i <= 12046; i++) - materials[i] = Material.OakSlab; - for (int i = 2929; i <= 3008; i++) - materials[i] = Material.OakStairs; - for (int i = 6130; i <= 6193; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 5697; i <= 5704; i++) - materials[i] = Material.OakWallHangingSign; - for (int i = 4849; i <= 4856; i++) - materials[i] = Material.OakWallSign; - for (int i = 201; i <= 203; i++) - materials[i] = Material.OakWood; - for (int i = 13563; i <= 13574; i++) - materials[i] = Material.Observer; - materials[2397] = Material.Obsidian; - for (int i = 27576; i <= 27578; i++) - materials[i] = Material.OchreFroglight; - materials[27862] = Material.OpenEyeblossom; - for (int i = 11654; i <= 11669; i++) - materials[i] = Material.OrangeBanner; - for (int i = 1747; i <= 1762; i++) - materials[i] = Material.OrangeBed; - for (int i = 21770; i <= 21785; i++) - materials[i] = Material.OrangeCandle; - for (int i = 22014; i <= 22015; i++) - materials[i] = Material.OrangeCandleCake; - materials[11608] = Material.OrangeCarpet; - materials[13742] = Material.OrangeConcrete; - materials[13758] = Material.OrangeConcretePowder; - for (int i = 13681; i <= 13684; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 13587; i <= 13592; i++) - materials[i] = Material.OrangeShulkerBox; - materials[6115] = Material.OrangeStainedGlass; - for (int i = 10203; i <= 10234; i++) - materials[i] = Material.OrangeStainedGlassPane; - materials[10156] = Material.OrangeTerracotta; - materials[2125] = Material.OrangeTulip; - for (int i = 11898; i <= 11901; i++) - materials[i] = Material.OrangeWallBanner; - materials[2091] = Material.OrangeWool; - materials[2128] = Material.OxeyeDaisy; - materials[23961] = Material.OxidizedChiseledCopper; - materials[23954] = Material.OxidizedCopper; - for (int i = 25717; i <= 25720; i++) - materials[i] = Material.OxidizedCopperBulb; - for (int i = 24793; i <= 24856; i++) - materials[i] = Material.OxidizedCopperDoor; - for (int i = 25695; i <= 25696; i++) - materials[i] = Material.OxidizedCopperGrate; - for (int i = 25305; i <= 25368; i++) - materials[i] = Material.OxidizedCopperTrapdoor; - materials[23957] = Material.OxidizedCutCopper; - for (int i = 24289; i <= 24294; i++) - materials[i] = Material.OxidizedCutCopperSlab; - for (int i = 23969; i <= 24048; i++) - materials[i] = Material.OxidizedCutCopperStairs; - materials[11625] = Material.PackedIce; - materials[6774] = Material.PackedMud; - for (int i = 27860; i <= 27861; i++) - materials[i] = Material.PaleHangingMoss; - materials[27697] = Material.PaleMossBlock; - for (int i = 27698; i <= 27859; i++) - materials[i] = Material.PaleMossCarpet; - for (int i = 9554; i <= 9577; i++) - materials[i] = Material.PaleOakButton; - for (int i = 13155; i <= 13218; i++) - materials[i] = Material.PaleOakDoor; - for (int i = 12675; i <= 12706; i++) - materials[i] = Material.PaleOakFence; - for (int i = 12387; i <= 12418; i++) - materials[i] = Material.PaleOakFenceGate; - for (int i = 5377; i <= 5440; i++) - materials[i] = Material.PaleOakHangingSign; - for (int i = 448; i <= 475; i++) - materials[i] = Material.PaleOakLeaves; - for (int i = 157; i <= 159; i++) - materials[i] = Material.PaleOakLog; - materials[25] = Material.PaleOakPlanks; - for (int i = 5897; i <= 5898; i++) - materials[i] = Material.PaleOakPressurePlate; - for (int i = 43; i <= 44; i++) - materials[i] = Material.PaleOakSapling; - for (int i = 4581; i <= 4612; i++) - materials[i] = Material.PaleOakSign; - for (int i = 12083; i <= 12088; i++) - materials[i] = Material.PaleOakSlab; - for (int i = 10923; i <= 11002; i++) - materials[i] = Material.PaleOakStairs; - for (int i = 6578; i <= 6641; i++) - materials[i] = Material.PaleOakTrapdoor; - for (int i = 5753; i <= 5760; i++) - materials[i] = Material.PaleOakWallHangingSign; - for (int i = 4905; i <= 4912; i++) - materials[i] = Material.PaleOakWallSign; - for (int i = 22; i <= 24; i++) - materials[i] = Material.PaleOakWood; - for (int i = 27582; i <= 27584; i++) - materials[i] = Material.PearlescentFroglight; - for (int i = 11632; i <= 11633; i++) - materials[i] = Material.Peony; - for (int i = 12131; i <= 12136; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 9866; i <= 9897; i++) - materials[i] = Material.PiglinHead; - for (int i = 9898; i <= 9905; i++) - materials[i] = Material.PiglinWallHead; - for (int i = 11734; i <= 11749; i++) - materials[i] = Material.PinkBanner; - for (int i = 1827; i <= 1842; i++) - materials[i] = Material.PinkBed; - for (int i = 21850; i <= 21865; i++) - materials[i] = Material.PinkCandle; - for (int i = 22024; i <= 22025; i++) - materials[i] = Material.PinkCandleCake; - materials[11613] = Material.PinkCarpet; - materials[13747] = Material.PinkConcrete; - materials[13763] = Material.PinkConcretePowder; - for (int i = 13701; i <= 13704; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 25840; i <= 25855; i++) - materials[i] = Material.PinkPetals; - for (int i = 13617; i <= 13622; i++) - materials[i] = Material.PinkShulkerBox; - materials[6120] = Material.PinkStainedGlass; - for (int i = 10363; i <= 10394; i++) - materials[i] = Material.PinkStainedGlassPane; - materials[10161] = Material.PinkTerracotta; - materials[2127] = Material.PinkTulip; - for (int i = 11918; i <= 11921; i++) - materials[i] = Material.PinkWallBanner; - materials[2096] = Material.PinkWool; - for (int i = 2054; i <= 2065; i++) - materials[i] = Material.Piston; - for (int i = 2066; i <= 2089; i++) - materials[i] = Material.PistonHead; - for (int i = 13510; i <= 13519; i++) - materials[i] = Material.PitcherCrop; - for (int i = 13520; i <= 13521; i++) - materials[i] = Material.PitcherPlant; - for (int i = 9746; i <= 9777; i++) - materials[i] = Material.PlayerHead; - for (int i = 9778; i <= 9785; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - for (int i = 25761; i <= 25780; i++) - materials[i] = Material.PointedDripstone; - materials[7] = Material.PolishedAndesite; - for (int i = 15161; i <= 15166; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 14935; i <= 15014; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 6024; i <= 6026; i++) - materials[i] = Material.PolishedBasalt; - materials[20884] = Material.PolishedBlackstone; - for (int i = 20888; i <= 20893; i++) - materials[i] = Material.PolishedBlackstoneBrickSlab; - for (int i = 20894; i <= 20973; i++) - materials[i] = Material.PolishedBlackstoneBrickStairs; - for (int i = 20974; i <= 21297; i++) - materials[i] = Material.PolishedBlackstoneBrickWall; - materials[20885] = Material.PolishedBlackstoneBricks; - for (int i = 21387; i <= 21410; i++) - materials[i] = Material.PolishedBlackstoneButton; - for (int i = 21385; i <= 21386; i++) - materials[i] = Material.PolishedBlackstonePressurePlate; - for (int i = 21379; i <= 21384; i++) - materials[i] = Material.PolishedBlackstoneSlab; - for (int i = 21299; i <= 21378; i++) - materials[i] = Material.PolishedBlackstoneStairs; - for (int i = 21411; i <= 21734; i++) - materials[i] = Material.PolishedBlackstoneWall; - materials[26331] = Material.PolishedDeepslate; - for (int i = 26412; i <= 26417; i++) - materials[i] = Material.PolishedDeepslateSlab; - for (int i = 26332; i <= 26411; i++) - materials[i] = Material.PolishedDeepslateStairs; - for (int i = 26418; i <= 26741; i++) - materials[i] = Material.PolishedDeepslateWall; - materials[5] = Material.PolishedDiorite; - for (int i = 15113; i <= 15118; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 14215; i <= 14294; i++) - materials[i] = Material.PolishedDioriteStairs; - materials[3] = Material.PolishedGranite; - for (int i = 15095; i <= 15100; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 13975; i <= 14054; i++) - materials[i] = Material.PolishedGraniteStairs; - materials[22505] = Material.PolishedTuff; - for (int i = 22506; i <= 22511; i++) - materials[i] = Material.PolishedTuffSlab; - for (int i = 22512; i <= 22591; i++) - materials[i] = Material.PolishedTuffStairs; - for (int i = 22592; i <= 22915; i++) - materials[i] = Material.PolishedTuffWall; - materials[2120] = Material.Poppy; - for (int i = 9378; i <= 9385; i++) - materials[i] = Material.Potatoes; - materials[9347] = Material.PottedAcaciaSapling; - materials[9356] = Material.PottedAllium; - materials[27574] = Material.PottedAzaleaBush; - materials[9357] = Material.PottedAzureBluet; - materials[13970] = Material.PottedBamboo; - materials[9345] = Material.PottedBirchSapling; - materials[9355] = Material.PottedBlueOrchid; - materials[9367] = Material.PottedBrownMushroom; - materials[9369] = Material.PottedCactus; - materials[9348] = Material.PottedCherrySapling; - materials[27865] = Material.PottedClosedEyeblossom; - materials[9363] = Material.PottedCornflower; - materials[20468] = Material.PottedCrimsonFungus; - materials[20470] = Material.PottedCrimsonRoots; - materials[9353] = Material.PottedDandelion; - materials[9349] = Material.PottedDarkOakSapling; - materials[9368] = Material.PottedDeadBush; - materials[9352] = Material.PottedFern; - materials[27575] = Material.PottedFloweringAzaleaBush; - materials[9346] = Material.PottedJungleSapling; - materials[9364] = Material.PottedLilyOfTheValley; - materials[9351] = Material.PottedMangrovePropagule; - materials[9343] = Material.PottedOakSapling; - materials[27864] = Material.PottedOpenEyeblossom; - materials[9359] = Material.PottedOrangeTulip; - materials[9362] = Material.PottedOxeyeDaisy; - materials[9350] = Material.PottedPaleOakSapling; - materials[9361] = Material.PottedPinkTulip; - materials[9354] = Material.PottedPoppy; - materials[9366] = Material.PottedRedMushroom; - materials[9358] = Material.PottedRedTulip; - materials[9344] = Material.PottedSpruceSapling; - materials[9342] = Material.PottedTorchflower; - materials[20469] = Material.PottedWarpedFungus; - materials[20471] = Material.PottedWarpedRoots; - materials[9360] = Material.PottedWhiteTulip; - materials[9365] = Material.PottedWitherRose; - materials[23331] = Material.PowderSnow; - for (int i = 8177; i <= 8179; i++) - materials[i] = Material.PowderSnowCauldron; - for (int i = 1987; i <= 2010; i++) - materials[i] = Material.PoweredRail; - materials[11342] = Material.Prismarine; - for (int i = 11591; i <= 11596; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 11425; i <= 11504; i++) - materials[i] = Material.PrismarineBrickStairs; - materials[11343] = Material.PrismarineBricks; - for (int i = 11585; i <= 11590; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 11345; i <= 11424; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 15497; i <= 15820; i++) - materials[i] = Material.PrismarineWall; - materials[7044] = Material.Pumpkin; - for (int i = 7054; i <= 7061; i++) - materials[i] = Material.PumpkinStem; - for (int i = 11798; i <= 11813; i++) - materials[i] = Material.PurpleBanner; - for (int i = 1891; i <= 1906; i++) - materials[i] = Material.PurpleBed; - for (int i = 21914; i <= 21929; i++) - materials[i] = Material.PurpleCandle; - for (int i = 22032; i <= 22033; i++) - materials[i] = Material.PurpleCandleCake; - materials[11617] = Material.PurpleCarpet; - materials[13751] = Material.PurpleConcrete; - materials[13767] = Material.PurpleConcretePowder; - for (int i = 13717; i <= 13720; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 13641; i <= 13646; i++) - materials[i] = Material.PurpleShulkerBox; - materials[6124] = Material.PurpleStainedGlass; - for (int i = 10491; i <= 10522; i++) - materials[i] = Material.PurpleStainedGlassPane; - materials[10165] = Material.PurpleTerracotta; - for (int i = 11934; i <= 11937; i++) - materials[i] = Material.PurpleWallBanner; - materials[2100] = Material.PurpleWool; - materials[13423] = Material.PurpurBlock; - for (int i = 13424; i <= 13426; i++) - materials[i] = Material.PurpurPillar; - for (int i = 12185; i <= 12190; i++) - materials[i] = Material.PurpurSlab; - for (int i = 13427; i <= 13506; i++) - materials[i] = Material.PurpurStairs; - materials[10034] = Material.QuartzBlock; - materials[21737] = Material.QuartzBricks; - for (int i = 10036; i <= 10038; i++) - materials[i] = Material.QuartzPillar; - for (int i = 12167; i <= 12172; i++) - materials[i] = Material.QuartzSlab; - for (int i = 10039; i <= 10118; i++) - materials[i] = Material.QuartzStairs; - for (int i = 4749; i <= 4768; i++) - materials[i] = Material.Rail; - materials[27572] = Material.RawCopperBlock; - materials[27573] = Material.RawGoldBlock; - materials[27571] = Material.RawIronBlock; - for (int i = 11862; i <= 11877; i++) - materials[i] = Material.RedBanner; - for (int i = 1955; i <= 1970; i++) - materials[i] = Material.RedBed; - for (int i = 21978; i <= 21993; i++) - materials[i] = Material.RedCandle; - for (int i = 22040; i <= 22041; i++) - materials[i] = Material.RedCandleCake; - materials[11621] = Material.RedCarpet; - materials[13755] = Material.RedConcrete; - materials[13771] = Material.RedConcretePowder; - for (int i = 13733; i <= 13736; i++) - materials[i] = Material.RedGlazedTerracotta; - materials[2133] = Material.RedMushroom; - for (int i = 6846; i <= 6909; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 15155; i <= 15160; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 14855; i <= 14934; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 18089; i <= 18412; i++) - materials[i] = Material.RedNetherBrickWall; - materials[13558] = Material.RedNetherBricks; - materials[123] = Material.RedSand; - materials[11958] = Material.RedSandstone; - for (int i = 12173; i <= 12178; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 11961; i <= 12040; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 15821; i <= 16144; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 13665; i <= 13670; i++) - materials[i] = Material.RedShulkerBox; - materials[6128] = Material.RedStainedGlass; - for (int i = 10619; i <= 10650; i++) - materials[i] = Material.RedStainedGlassPane; - materials[10169] = Material.RedTerracotta; - materials[2124] = Material.RedTulip; - for (int i = 11950; i <= 11953; i++) - materials[i] = Material.RedWallBanner; - materials[2104] = Material.RedWool; - materials[10022] = Material.RedstoneBlock; - for (int i = 8191; i <= 8192; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 5903; i <= 5904; i++) - materials[i] = Material.RedstoneOre; - for (int i = 5907; i <= 5908; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 5909; i <= 5916; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 3033; i <= 4328; i++) - materials[i] = Material.RedstoneWire; - materials[27586] = Material.ReinforcedDeepslate; - for (int i = 6050; i <= 6113; i++) - materials[i] = Material.Repeater; - for (int i = 13528; i <= 13539; i++) - materials[i] = Material.RepeatingCommandBlock; - materials[7633] = Material.ResinBlock; - for (int i = 7715; i <= 7720; i++) - materials[i] = Material.ResinBrickSlab; - for (int i = 7635; i <= 7714; i++) - materials[i] = Material.ResinBrickStairs; - for (int i = 7721; i <= 8044; i++) - materials[i] = Material.ResinBrickWall; - materials[7634] = Material.ResinBricks; - for (int i = 7230; i <= 7357; i++) - materials[i] = Material.ResinClump; - for (int i = 20463; i <= 20467; i++) - materials[i] = Material.RespawnAnchor; - materials[25915] = Material.RootedDirt; - for (int i = 11630; i <= 11631; i++) - materials[i] = Material.RoseBush; - materials[118] = Material.Sand; - materials[578] = Material.Sandstone; - for (int i = 12119; i <= 12124; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 8205; i <= 8284; i++) - materials[i] = Material.SandstoneStairs; - for (int i = 18413; i <= 18736; i++) - materials[i] = Material.SandstoneWall; - for (int i = 19385; i <= 19416; i++) - materials[i] = Material.Scaffolding; - materials[23812] = Material.Sculk; - for (int i = 23941; i <= 23942; i++) - materials[i] = Material.SculkCatalyst; - for (int i = 23332; i <= 23427; i++) - materials[i] = Material.SculkSensor; - for (int i = 23943; i <= 23950; i++) - materials[i] = Material.SculkShrieker; - for (int i = 23813; i <= 23940; i++) - materials[i] = Material.SculkVein; - materials[11603] = Material.SeaLantern; - for (int i = 13946; i <= 13953; i++) - materials[i] = Material.SeaPickle; - materials[2051] = Material.Seagrass; - materials[2048] = Material.ShortGrass; - materials[19623] = Material.Shroomlight; - for (int i = 13575; i <= 13580; i++) - materials[i] = Material.ShulkerBox; - for (int i = 9626; i <= 9657; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 9658; i <= 9665; i++) - materials[i] = Material.SkeletonWallSkull; - materials[11243] = Material.SlimeBlock; - for (int i = 22082; i <= 22093; i++) - materials[i] = Material.SmallAmethystBud; - for (int i = 25897; i <= 25912; i++) - materials[i] = Material.SmallDripleaf; - materials[19479] = Material.SmithingTable; - for (int i = 19433; i <= 19440; i++) - materials[i] = Material.Smoker; - materials[27570] = Material.SmoothBasalt; - materials[12193] = Material.SmoothQuartz; - for (int i = 15137; i <= 15142; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 14615; i <= 14694; i++) - materials[i] = Material.SmoothQuartzStairs; - materials[12194] = Material.SmoothRedSandstone; - for (int i = 15101; i <= 15106; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 14055; i <= 14134; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - materials[12192] = Material.SmoothSandstone; - for (int i = 15131; i <= 15136; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 14535; i <= 14614; i++) - materials[i] = Material.SmoothSandstoneStairs; - materials[12191] = Material.SmoothStone; - for (int i = 12113; i <= 12118; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 13813; i <= 13815; i++) - materials[i] = Material.SnifferEgg; - for (int i = 5941; i <= 5948; i++) - materials[i] = Material.Snow; - materials[5950] = Material.SnowBlock; - for (int i = 19556; i <= 19587; i++) - materials[i] = Material.SoulCampfire; - materials[2915] = Material.SoulFire; - for (int i = 19520; i <= 19523; i++) - materials[i] = Material.SoulLantern; - materials[6019] = Material.SoulSand; - materials[6020] = Material.SoulSoil; - materials[6027] = Material.SoulTorch; - for (int i = 6028; i <= 6031; i++) - materials[i] = Material.SoulWallTorch; - materials[2916] = Material.Spawner; - materials[560] = Material.Sponge; - materials[25836] = Material.SporeBlossom; - for (int i = 9410; i <= 9433; i++) - materials[i] = Material.SpruceButton; - for (int i = 12771; i <= 12834; i++) - materials[i] = Material.SpruceDoor; - for (int i = 12483; i <= 12514; i++) - materials[i] = Material.SpruceFence; - for (int i = 12195; i <= 12226; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 4993; i <= 5056; i++) - materials[i] = Material.SpruceHangingSign; - for (int i = 280; i <= 307; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 139; i <= 141; i++) - materials[i] = Material.SpruceLog; - materials[16] = Material.SprucePlanks; - for (int i = 5885; i <= 5886; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 31; i <= 32; i++) - materials[i] = Material.SpruceSapling; - for (int i = 4389; i <= 4420; i++) - materials[i] = Material.SpruceSign; - for (int i = 12047; i <= 12052; i++) - materials[i] = Material.SpruceSlab; - for (int i = 8440; i <= 8519; i++) - materials[i] = Material.SpruceStairs; - for (int i = 6194; i <= 6257; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 5705; i <= 5712; i++) - materials[i] = Material.SpruceWallHangingSign; - for (int i = 4857; i <= 4864; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 204; i <= 206; i++) - materials[i] = Material.SpruceWood; - for (int i = 2035; i <= 2046; i++) - materials[i] = Material.StickyPiston; - materials[1] = Material.Stone; - for (int i = 12149; i <= 12154; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 7470; i <= 7549; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 16793; i <= 17116; i++) - materials[i] = Material.StoneBrickWall; - materials[6770] = Material.StoneBricks; - for (int i = 5917; i <= 5940; i++) - materials[i] = Material.StoneButton; - for (int i = 5817; i <= 5818; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 12107; i <= 12112; i++) - materials[i] = Material.StoneSlab; - for (int i = 14455; i <= 14534; i++) - materials[i] = Material.StoneStairs; - for (int i = 19480; i <= 19483; i++) - materials[i] = Material.Stonecutter; - for (int i = 180; i <= 182; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 237; i <= 239; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 198; i <= 200; i++) - materials[i] = Material.StrippedBambooBlock; - for (int i = 174; i <= 176; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 231; i <= 233; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 183; i <= 185; i++) - materials[i] = Material.StrippedCherryLog; - for (int i = 240; i <= 242; i++) - materials[i] = Material.StrippedCherryWood; - for (int i = 19618; i <= 19620; i++) - materials[i] = Material.StrippedCrimsonHyphae; - for (int i = 19612; i <= 19614; i++) - materials[i] = Material.StrippedCrimsonStem; - for (int i = 186; i <= 188; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 243; i <= 245; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 177; i <= 179; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 234; i <= 236; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 195; i <= 197; i++) - materials[i] = Material.StrippedMangroveLog; - for (int i = 249; i <= 251; i++) - materials[i] = Material.StrippedMangroveWood; - for (int i = 192; i <= 194; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 225; i <= 227; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 189; i <= 191; i++) - materials[i] = Material.StrippedPaleOakLog; - for (int i = 246; i <= 248; i++) - materials[i] = Material.StrippedPaleOakWood; - for (int i = 171; i <= 173; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 228; i <= 230; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 19601; i <= 19603; i++) - materials[i] = Material.StrippedWarpedHyphae; - for (int i = 19595; i <= 19597; i++) - materials[i] = Material.StrippedWarpedStem; - for (int i = 20369; i <= 20372; i++) - materials[i] = Material.StructureBlock; - materials[13562] = Material.StructureVoid; - for (int i = 5968; i <= 5983; i++) - materials[i] = Material.SugarCane; - for (int i = 11626; i <= 11627; i++) - materials[i] = Material.Sunflower; - for (int i = 125; i <= 128; i++) - materials[i] = Material.SuspiciousGravel; - for (int i = 119; i <= 122; i++) - materials[i] = Material.SuspiciousSand; - for (int i = 19588; i <= 19591; i++) - materials[i] = Material.SweetBerryBush; - for (int i = 11634; i <= 11635; i++) - materials[i] = Material.TallGrass; - for (int i = 2052; i <= 2053; i++) - materials[i] = Material.TallSeagrass; - for (int i = 20394; i <= 20409; i++) - materials[i] = Material.Target; - materials[11623] = Material.Terracotta; - materials[23330] = Material.TintedGlass; - for (int i = 2137; i <= 2138; i++) - materials[i] = Material.Tnt; - materials[2398] = Material.Torch; - materials[2119] = Material.Torchflower; - for (int i = 13508; i <= 13509; i++) - materials[i] = Material.TorchflowerCrop; - for (int i = 9918; i <= 9941; i++) - materials[i] = Material.TrappedChest; - for (int i = 27651; i <= 27662; i++) - materials[i] = Material.TrialSpawner; - for (int i = 8311; i <= 8438; i++) - materials[i] = Material.Tripwire; - for (int i = 8295; i <= 8310; i++) - materials[i] = Material.TripwireHook; - for (int i = 13836; i <= 13837; i++) - materials[i] = Material.TubeCoral; - materials[13821] = Material.TubeCoralBlock; - for (int i = 13856; i <= 13857; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 13906; i <= 13913; i++) - materials[i] = Material.TubeCoralWallFan; - materials[22094] = Material.Tuff; - for (int i = 22918; i <= 22923; i++) - materials[i] = Material.TuffBrickSlab; - for (int i = 22924; i <= 23003; i++) - materials[i] = Material.TuffBrickStairs; - for (int i = 23004; i <= 23327; i++) - materials[i] = Material.TuffBrickWall; - materials[22917] = Material.TuffBricks; - for (int i = 22095; i <= 22100; i++) - materials[i] = Material.TuffSlab; - for (int i = 22101; i <= 22180; i++) - materials[i] = Material.TuffStairs; - for (int i = 22181; i <= 22504; i++) - materials[i] = Material.TuffWall; - for (int i = 13801; i <= 13812; i++) - materials[i] = Material.TurtleEgg; - for (int i = 19651; i <= 19676; i++) - materials[i] = Material.TwistingVines; - materials[19677] = Material.TwistingVinesPlant; - for (int i = 27663; i <= 27694; i++) - materials[i] = Material.Vault; - for (int i = 27579; i <= 27581; i++) - materials[i] = Material.VerdantFroglight; - for (int i = 7070; i <= 7101; i++) - materials[i] = Material.Vine; - materials[13971] = Material.VoidAir; - for (int i = 2399; i <= 2402; i++) - materials[i] = Material.WallTorch; - for (int i = 20137; i <= 20160; i++) - materials[i] = Material.WarpedButton; - for (int i = 20225; i <= 20288; i++) - materials[i] = Material.WarpedDoor; - for (int i = 19729; i <= 19760; i++) - materials[i] = Material.WarpedFence; - for (int i = 19921; i <= 19952; i++) - materials[i] = Material.WarpedFenceGate; - materials[19605] = Material.WarpedFungus; - for (int i = 5505; i <= 5568; i++) - materials[i] = Material.WarpedHangingSign; - for (int i = 19598; i <= 19600; i++) - materials[i] = Material.WarpedHyphae; - materials[19604] = Material.WarpedNylium; - materials[19680] = Material.WarpedPlanks; - for (int i = 19695; i <= 19696; i++) - materials[i] = Material.WarpedPressurePlate; - materials[19607] = Material.WarpedRoots; - for (int i = 20321; i <= 20352; i++) - materials[i] = Material.WarpedSign; - for (int i = 19687; i <= 19692; i++) - materials[i] = Material.WarpedSlab; - for (int i = 20033; i <= 20112; i++) - materials[i] = Material.WarpedStairs; - for (int i = 19592; i <= 19594; i++) - materials[i] = Material.WarpedStem; - for (int i = 19825; i <= 19888; i++) - materials[i] = Material.WarpedTrapdoor; - for (int i = 5777; i <= 5784; i++) - materials[i] = Material.WarpedWallHangingSign; - for (int i = 20361; i <= 20368; i++) - materials[i] = Material.WarpedWallSign; - materials[19606] = Material.WarpedWartBlock; - for (int i = 86; i <= 101; i++) - materials[i] = Material.Water; - for (int i = 8173; i <= 8175; i++) - materials[i] = Material.WaterCauldron; - materials[23968] = Material.WaxedChiseledCopper; - materials[24313] = Material.WaxedCopperBlock; - for (int i = 25721; i <= 25724; i++) - materials[i] = Material.WaxedCopperBulb; - for (int i = 24921; i <= 24984; i++) - materials[i] = Material.WaxedCopperDoor; - for (int i = 25697; i <= 25698; i++) - materials[i] = Material.WaxedCopperGrate; - for (int i = 25433; i <= 25496; i++) - materials[i] = Material.WaxedCopperTrapdoor; - materials[24320] = Material.WaxedCutCopper; - for (int i = 24659; i <= 24664; i++) - materials[i] = Material.WaxedCutCopperSlab; - for (int i = 24561; i <= 24640; i++) - materials[i] = Material.WaxedCutCopperStairs; - materials[23967] = Material.WaxedExposedChiseledCopper; - materials[24315] = Material.WaxedExposedCopper; - for (int i = 25725; i <= 25728; i++) - materials[i] = Material.WaxedExposedCopperBulb; - for (int i = 24985; i <= 25048; i++) - materials[i] = Material.WaxedExposedCopperDoor; - for (int i = 25699; i <= 25700; i++) - materials[i] = Material.WaxedExposedCopperGrate; - for (int i = 25497; i <= 25560; i++) - materials[i] = Material.WaxedExposedCopperTrapdoor; - materials[24319] = Material.WaxedExposedCutCopper; - for (int i = 24653; i <= 24658; i++) - materials[i] = Material.WaxedExposedCutCopperSlab; - for (int i = 24481; i <= 24560; i++) - materials[i] = Material.WaxedExposedCutCopperStairs; - materials[23965] = Material.WaxedOxidizedChiseledCopper; - materials[24316] = Material.WaxedOxidizedCopper; - for (int i = 25733; i <= 25736; i++) - materials[i] = Material.WaxedOxidizedCopperBulb; - for (int i = 25049; i <= 25112; i++) - materials[i] = Material.WaxedOxidizedCopperDoor; - for (int i = 25703; i <= 25704; i++) - materials[i] = Material.WaxedOxidizedCopperGrate; - for (int i = 25561; i <= 25624; i++) - materials[i] = Material.WaxedOxidizedCopperTrapdoor; - materials[24317] = Material.WaxedOxidizedCutCopper; - for (int i = 24641; i <= 24646; i++) - materials[i] = Material.WaxedOxidizedCutCopperSlab; - for (int i = 24321; i <= 24400; i++) - materials[i] = Material.WaxedOxidizedCutCopperStairs; - materials[23966] = Material.WaxedWeatheredChiseledCopper; - materials[24314] = Material.WaxedWeatheredCopper; - for (int i = 25729; i <= 25732; i++) - materials[i] = Material.WaxedWeatheredCopperBulb; - for (int i = 25113; i <= 25176; i++) - materials[i] = Material.WaxedWeatheredCopperDoor; - for (int i = 25701; i <= 25702; i++) - materials[i] = Material.WaxedWeatheredCopperGrate; - for (int i = 25625; i <= 25688; i++) - materials[i] = Material.WaxedWeatheredCopperTrapdoor; - materials[24318] = Material.WaxedWeatheredCutCopper; - for (int i = 24647; i <= 24652; i++) - materials[i] = Material.WaxedWeatheredCutCopperSlab; - for (int i = 24401; i <= 24480; i++) - materials[i] = Material.WaxedWeatheredCutCopperStairs; - materials[23962] = Material.WeatheredChiseledCopper; - materials[23953] = Material.WeatheredCopper; - for (int i = 25713; i <= 25716; i++) - materials[i] = Material.WeatheredCopperBulb; - for (int i = 24857; i <= 24920; i++) - materials[i] = Material.WeatheredCopperDoor; - for (int i = 25693; i <= 25694; i++) - materials[i] = Material.WeatheredCopperGrate; - for (int i = 25369; i <= 25432; i++) - materials[i] = Material.WeatheredCopperTrapdoor; - materials[23958] = Material.WeatheredCutCopper; - for (int i = 24295; i <= 24300; i++) - materials[i] = Material.WeatheredCutCopperSlab; - for (int i = 24049; i <= 24128; i++) - materials[i] = Material.WeatheredCutCopperStairs; - for (int i = 19624; i <= 19649; i++) - materials[i] = Material.WeepingVines; - materials[19650] = Material.WeepingVinesPlant; - materials[561] = Material.WetSponge; - for (int i = 4333; i <= 4340; i++) - materials[i] = Material.Wheat; - for (int i = 11638; i <= 11653; i++) - materials[i] = Material.WhiteBanner; - for (int i = 1731; i <= 1746; i++) - materials[i] = Material.WhiteBed; - for (int i = 21754; i <= 21769; i++) - materials[i] = Material.WhiteCandle; - for (int i = 22012; i <= 22013; i++) - materials[i] = Material.WhiteCandleCake; - materials[11607] = Material.WhiteCarpet; - materials[13741] = Material.WhiteConcrete; - materials[13757] = Material.WhiteConcretePowder; - for (int i = 13677; i <= 13680; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 13581; i <= 13586; i++) - materials[i] = Material.WhiteShulkerBox; - materials[6114] = Material.WhiteStainedGlass; - for (int i = 10171; i <= 10202; i++) - materials[i] = Material.WhiteStainedGlassPane; - materials[10155] = Material.WhiteTerracotta; - materials[2126] = Material.WhiteTulip; - for (int i = 11894; i <= 11897; i++) - materials[i] = Material.WhiteWallBanner; - materials[2090] = Material.WhiteWool; - materials[2130] = Material.WitherRose; - for (int i = 9666; i <= 9697; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 9698; i <= 9705; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 11702; i <= 11717; i++) - materials[i] = Material.YellowBanner; - for (int i = 1795; i <= 1810; i++) - materials[i] = Material.YellowBed; - for (int i = 21818; i <= 21833; i++) - materials[i] = Material.YellowCandle; - for (int i = 22020; i <= 22021; i++) - materials[i] = Material.YellowCandleCake; - materials[11611] = Material.YellowCarpet; - materials[13745] = Material.YellowConcrete; - materials[13761] = Material.YellowConcretePowder; - for (int i = 13693; i <= 13696; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 13605; i <= 13610; i++) - materials[i] = Material.YellowShulkerBox; - materials[6118] = Material.YellowStainedGlass; - for (int i = 10299; i <= 10330; i++) - materials[i] = Material.YellowStainedGlassPane; - materials[10159] = Material.YellowTerracotta; - for (int i = 11910; i <= 11913; i++) - materials[i] = Material.YellowWallBanner; - materials[2094] = Material.YellowWool; - for (int i = 9706; i <= 9737; i++) - materials[i] = Material.ZombieHead; - for (int i = 9738; i <= 9745; i++) - materials[i] = Material.ZombieWallHead; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(22, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(29, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(31, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(33, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(35, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(37, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(39, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(41, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(43, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(45, 40, - [ - new("age", ["0", "1", "2", "3", "4"], 8), - new("hanging", ["true", "false"], 4), - new("stage", ["0", "1"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(86, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(102, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(119, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(125, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(136, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(139, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(142, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(145, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(148, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(151, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(154, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(157, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(160, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(163, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(165, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(168, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(171, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(174, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(177, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(180, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(183, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(186, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(189, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(192, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(195, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(198, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(201, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(204, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(207, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(210, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(213, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(216, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(219, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(222, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(225, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(228, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(231, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(234, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(237, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(240, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(243, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(246, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(249, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(252, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(280, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(308, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(336, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(364, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(392, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(420, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(448, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(476, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(504, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(532, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(566, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(581, 1150, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling", "zombie", "skeleton", "creeper", "dragon", "wither_skeleton", "piglin", "custom_head"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1731, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1747, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1763, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1779, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1795, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1811, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1827, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1843, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1859, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1875, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1891, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1907, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1923, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1939, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1955, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1971, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1987, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2011, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2035, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2052, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(2054, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2066, 24, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2) - ]), - new(2106, 12, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 2) - ]), - new(2137, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(2140, 256, - [ - new("facing", ["north", "south", "west", "east"], 64), - new("slot_0_occupied", ["true", "false"], 32), - new("slot_1_occupied", ["true", "false"], 16), - new("slot_2_occupied", ["true", "false"], 8), - new("slot_3_occupied", ["true", "false"], 4), - new("slot_4_occupied", ["true", "false"], 2), - new("slot_5_occupied", ["true", "false"], 1) - ]), - new(2399, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(2403, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(2917, 12, - [ - new("active", ["true", "false"], 6), - new("axis", ["x", "y", "z"], 2), - new("natural", ["true", "false"], 1) - ]), - new(2929, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3009, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(3033, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(4333, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4341, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4349, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(4357, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4389, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4421, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4453, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4485, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4517, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4549, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4581, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4613, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4645, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4677, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4741, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4749, 20, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4769, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4849, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4857, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4865, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4873, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4881, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4889, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4897, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4905, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4913, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4921, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4929, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4993, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5057, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5121, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5185, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5249, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5313, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5377, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5441, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5505, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5569, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5633, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5697, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5705, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5713, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5721, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5729, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5737, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5745, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5753, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5761, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5769, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5777, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5785, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5793, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5817, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5819, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5883, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5885, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5887, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5889, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5891, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5893, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5895, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5897, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5899, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5901, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5903, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5905, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5907, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5909, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(5917, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5941, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(5951, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5968, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5984, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(5986, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6021, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(6024, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(6028, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6033, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(6035, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6039, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6043, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(6050, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6130, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6194, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6258, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6322, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6386, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6450, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6514, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6578, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6642, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6706, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6782, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6846, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6910, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6974, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7006, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7012, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7046, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7050, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7054, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(7062, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(7070, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7102, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7230, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7358, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7390, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7470, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7550, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7630, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(7635, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7715, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7721, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(8047, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8079, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8159, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(8164, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(8173, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(8177, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(8181, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8191, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(8193, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8205, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8287, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8295, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8311, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8440, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8520, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8600, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8680, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8693, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(9017, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(9370, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(9378, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(9386, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9410, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9434, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9458, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9482, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9506, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9530, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9554, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9578, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9602, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9626, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9658, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9666, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9698, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9706, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9738, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9746, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9778, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9786, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9818, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9826, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9858, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9866, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9898, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9906, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9910, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9914, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9918, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(9942, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9958, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9974, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9990, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10024, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(10036, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(10039, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10119, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10143, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(10171, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10203, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10235, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10267, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10299, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10331, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10363, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10395, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10427, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10459, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10491, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10523, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10555, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10587, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10619, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10651, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10683, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10763, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10843, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10923, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11003, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11083, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11163, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11244, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(11246, 32, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11278, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11345, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11425, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11505, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11585, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11591, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11597, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11604, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(11626, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11628, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11630, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11632, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11634, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11636, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11638, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11654, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11670, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11686, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11702, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11718, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11734, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11750, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11766, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11782, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11798, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11814, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11830, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11846, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11862, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11878, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11894, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11898, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11902, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11906, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11910, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11914, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11918, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11922, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11926, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11930, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11934, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11938, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11942, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11946, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11950, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11954, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11961, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12041, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12047, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12053, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12059, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12065, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12071, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12077, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12083, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12089, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12095, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12101, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12107, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12113, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12119, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12125, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12131, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12137, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12143, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12149, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12155, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12161, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12167, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12173, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12179, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12185, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12195, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12227, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12259, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12291, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12323, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12355, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12387, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12419, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12451, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12483, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12515, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12547, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12579, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12611, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12643, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12675, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12707, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12739, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12771, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12835, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12899, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12963, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13027, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13091, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13155, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13219, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13283, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13347, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13353, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13417, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(13424, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(13427, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13508, 2, - [ - new("age", ["0", "1"], 1) - ]), - new(13510, 10, - [ - new("age", ["0", "1", "2", "3", "4"], 2), - new("half", ["upper", "lower"], 1) - ]), - new(13520, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(13522, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(13528, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13540, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13552, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(13559, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(13563, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13575, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13581, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13587, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13593, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13599, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13605, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13611, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13617, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13623, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13629, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13635, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13641, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13647, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13653, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13659, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13665, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13671, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13677, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13681, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13685, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13689, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13693, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13697, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13701, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13705, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13709, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13713, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13717, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13721, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13725, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13729, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13733, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13737, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13773, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(13801, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(13813, 3, - [ - new("hatch", ["0", "1", "2"], 1) - ]), - new(13826, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13828, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13830, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13832, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13834, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13836, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13838, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13840, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13842, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13844, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13846, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13848, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13850, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13852, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13854, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13856, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13858, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13860, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13862, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13864, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13866, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13874, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13882, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13890, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13898, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13906, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13914, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13922, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13930, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13938, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13946, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13955, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13958, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(13973, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(13975, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14055, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14135, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14215, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14295, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14375, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14455, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14535, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14615, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14695, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14775, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14855, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14935, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15015, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15095, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15101, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15107, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15113, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15119, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15125, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15131, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15137, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15143, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15149, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15155, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15161, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15167, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15173, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15497, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15821, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16145, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16469, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16793, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17117, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17441, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17765, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18089, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18413, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18737, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19061, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19385, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19417, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(19421, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(19433, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(19441, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(19451, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(19463, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19480, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(19484, 32, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19516, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19520, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19524, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19556, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19588, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(19592, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19595, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19598, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19601, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19609, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19612, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19615, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19618, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19624, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(19651, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(19681, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19687, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19693, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(19695, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(19697, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(19729, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(19761, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19825, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19889, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19921, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19953, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20033, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20113, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20137, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20161, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20225, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20289, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20321, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20353, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20361, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20369, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(20373, 12, - [ - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 1) - ]), - new(20385, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(20394, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(20410, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(20434, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(20463, 5, - [ - new("charges", ["0", "1", "2", "3", "4"], 1) - ]), - new(20474, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20554, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20878, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20888, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20894, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20974, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(21299, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21379, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21385, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(21387, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21411, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(21738, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21754, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21770, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21786, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21802, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21818, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21834, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21850, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21866, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21882, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21898, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21914, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21930, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21946, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21962, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21978, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21994, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22010, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22012, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22014, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22016, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22018, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22020, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22022, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22024, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22026, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22028, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22030, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22032, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22034, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22036, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22038, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22040, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22042, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22046, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22058, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22070, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22082, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22095, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22101, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22181, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22506, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22512, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22592, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22918, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22924, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23004, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(23332, 96, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23428, 384, - [ - new("facing", ["north", "south", "west", "east"], 96), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23813, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(23941, 2, - [ - new("bloom", ["true", "false"], 1) - ]), - new(23943, 8, - [ - new("can_summon", ["true", "false"], 4), - new("shrieking", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23969, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24049, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24129, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24209, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24289, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24295, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24301, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24307, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24321, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24401, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24481, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24561, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24641, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24647, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24653, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24659, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24665, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24729, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24793, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24857, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24921, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24985, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25049, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25113, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25177, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25241, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25305, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25369, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25433, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25497, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25561, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25625, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25689, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25691, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25693, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25695, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25697, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25699, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25701, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25703, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25705, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25709, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25713, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25717, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25721, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25725, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25729, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25733, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25737, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25761, 20, - [ - new("thickness", ["tip_merge", "tip", "frustum", "middle", "base"], 4), - new("vertical_direction", ["up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25782, 52, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 2), - new("berries", ["true", "false"], 1) - ]), - new(25834, 2, - [ - new("berries", ["true", "false"], 1) - ]), - new(25840, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("flower_amount", ["1", "2", "3", "4"], 1) - ]), - new(25857, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("tilt", ["none", "unstable", "partial", "full"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25889, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25897, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("half", ["upper", "lower"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25913, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25917, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(25921, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26001, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26007, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(26332, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26412, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26418, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(26743, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26823, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26829, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(27154, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27234, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27240, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(27567, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27576, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27579, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27582, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27587, 16, - [ - new("cracked", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27603, 48, - [ - new("crafting", ["true", "false"], 24), - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(27651, 12, - [ - new("ominous", ["true", "false"], 6), - new("trial_spawner_state", ["inactive", "waiting_for_players", "active", "waiting_for_reward_ejection", "ejecting_reward", "cooldown"], 1) - ]), - new(27663, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("ominous", ["true", "false"], 4), - new("vault_state", ["inactive", "active", "unlocking", "ejecting"], 1) - ]), - new(27695, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(27698, 162, - [ - new("bottom", ["true", "false"], 81), - new("east", ["none", "low", "tall"], 27), - new("north", ["none", "low", "tall"], 9), - new("south", ["none", "low", "tall"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(27860, 2, - [ - new("tip", ["true", "false"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette1215.cs b/MinecraftClient/Mapping/BlockPalettes/Palette1215.cs deleted file mode 100644 index 85a52201ae..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette1215.cs +++ /dev/null @@ -1,5788 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - public class Palette1215 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette1215() - { - for (int i = 9492; i <= 9515; i++) - materials[i] = Material.AcaciaButton; - for (int i = 12973; i <= 13036; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 12589; i <= 12620; i++) - materials[i] = Material.AcaciaFence; - for (int i = 12301; i <= 12332; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 5130; i <= 5193; i++) - materials[i] = Material.AcaciaHangingSign; - for (int i = 364; i <= 391; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 148; i <= 150; i++) - materials[i] = Material.AcaciaLog; - materials[19] = Material.AcaciaPlanks; - for (int i = 5900; i <= 5901; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 37; i <= 38; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 4462; i <= 4493; i++) - materials[i] = Material.AcaciaSign; - for (int i = 12075; i <= 12080; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 10693; i <= 10772; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 6396; i <= 6459; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 5730; i <= 5737; i++) - materials[i] = Material.AcaciaWallHangingSign; - for (int i = 4882; i <= 4889; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 213; i <= 215; i++) - materials[i] = Material.AcaciaWood; - for (int i = 10129; i <= 10152; i++) - materials[i] = Material.ActivatorRail; - materials[0] = Material.Air; - materials[2125] = Material.Allium; - materials[22059] = Material.AmethystBlock; - for (int i = 22061; i <= 22072; i++) - materials[i] = Material.AmethystCluster; - materials[20476] = Material.AncientDebris; - materials[6] = Material.Andesite; - for (int i = 15159; i <= 15164; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 14785; i <= 14864; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 17775; i <= 18098; i++) - materials[i] = Material.AndesiteWall; - for (int i = 9916; i <= 9919; i++) - materials[i] = Material.Anvil; - for (int i = 7060; i <= 7063; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 7056; i <= 7059; i++) - materials[i] = Material.AttachedPumpkinStem; - materials[25852] = Material.Azalea; - for (int i = 504; i <= 531; i++) - materials[i] = Material.AzaleaLeaves; - materials[2126] = Material.AzureBluet; - for (int i = 13968; i <= 13979; i++) - materials[i] = Material.Bamboo; - for (int i = 168; i <= 170; i++) - materials[i] = Material.BambooBlock; - for (int i = 9612; i <= 9635; i++) - materials[i] = Material.BambooButton; - for (int i = 13293; i <= 13356; i++) - materials[i] = Material.BambooDoor; - for (int i = 12749; i <= 12780; i++) - materials[i] = Material.BambooFence; - for (int i = 12461; i <= 12492; i++) - materials[i] = Material.BambooFenceGate; - for (int i = 5642; i <= 5705; i++) - materials[i] = Material.BambooHangingSign; - materials[28] = Material.BambooMosaic; - for (int i = 12111; i <= 12116; i++) - materials[i] = Material.BambooMosaicSlab; - for (int i = 11173; i <= 11252; i++) - materials[i] = Material.BambooMosaicStairs; - materials[27] = Material.BambooPlanks; - for (int i = 5910; i <= 5911; i++) - materials[i] = Material.BambooPressurePlate; - materials[13967] = Material.BambooSapling; - for (int i = 4654; i <= 4685; i++) - materials[i] = Material.BambooSign; - for (int i = 12105; i <= 12110; i++) - materials[i] = Material.BambooSlab; - for (int i = 11093; i <= 11172; i++) - materials[i] = Material.BambooStairs; - for (int i = 6716; i <= 6779; i++) - materials[i] = Material.BambooTrapdoor; - for (int i = 5794; i <= 5801; i++) - materials[i] = Material.BambooWallHangingSign; - for (int i = 4930; i <= 4937; i++) - materials[i] = Material.BambooWallSign; - for (int i = 19431; i <= 19442; i++) - materials[i] = Material.Barrel; - for (int i = 11254; i <= 11255; i++) - materials[i] = Material.Barrier; - for (int i = 6031; i <= 6033; i++) - materials[i] = Material.Basalt; - materials[8702] = Material.Beacon; - materials[85] = Material.Bedrock; - for (int i = 20425; i <= 20448; i++) - materials[i] = Material.BeeNest; - for (int i = 20449; i <= 20472; i++) - materials[i] = Material.Beehive; - for (int i = 13532; i <= 13535; i++) - materials[i] = Material.Beetroots; - for (int i = 19494; i <= 19525; i++) - materials[i] = Material.Bell; - for (int i = 25904; i <= 25935; i++) - materials[i] = Material.BigDripleaf; - for (int i = 25936; i <= 25943; i++) - materials[i] = Material.BigDripleafStem; - for (int i = 9444; i <= 9467; i++) - materials[i] = Material.BirchButton; - for (int i = 12845; i <= 12908; i++) - materials[i] = Material.BirchDoor; - for (int i = 12525; i <= 12556; i++) - materials[i] = Material.BirchFence; - for (int i = 12237; i <= 12268; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 5066; i <= 5129; i++) - materials[i] = Material.BirchHangingSign; - for (int i = 308; i <= 335; i++) - materials[i] = Material.BirchLeaves; - for (int i = 142; i <= 144; i++) - materials[i] = Material.BirchLog; - materials[17] = Material.BirchPlanks; - for (int i = 5896; i <= 5897; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 33; i <= 34; i++) - materials[i] = Material.BirchSapling; - for (int i = 4430; i <= 4461; i++) - materials[i] = Material.BirchSign; - for (int i = 12063; i <= 12068; i++) - materials[i] = Material.BirchSlab; - for (int i = 8530; i <= 8609; i++) - materials[i] = Material.BirchStairs; - for (int i = 6268; i <= 6331; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 5722; i <= 5729; i++) - materials[i] = Material.BirchWallHangingSign; - for (int i = 4874; i <= 4881; i++) - materials[i] = Material.BirchWallSign; - for (int i = 207; i <= 209; i++) - materials[i] = Material.BirchWood; - for (int i = 11888; i <= 11903; i++) - materials[i] = Material.BlackBanner; - for (int i = 1971; i <= 1986; i++) - materials[i] = Material.BlackBed; - for (int i = 22009; i <= 22024; i++) - materials[i] = Material.BlackCandle; - for (int i = 22057; i <= 22058; i++) - materials[i] = Material.BlackCandleCake; - materials[11632] = Material.BlackCarpet; - materials[13766] = Material.BlackConcrete; - materials[13782] = Material.BlackConcretePowder; - for (int i = 13747; i <= 13750; i++) - materials[i] = Material.BlackGlazedTerracotta; - for (int i = 13681; i <= 13686; i++) - materials[i] = Material.BlackShulkerBox; - materials[6139] = Material.BlackStainedGlass; - for (int i = 10661; i <= 10692; i++) - materials[i] = Material.BlackStainedGlassPane; - materials[10180] = Material.BlackTerracotta; - for (int i = 11964; i <= 11967; i++) - materials[i] = Material.BlackWallBanner; - materials[2108] = Material.BlackWool; - materials[20488] = Material.Blackstone; - for (int i = 20893; i <= 20898; i++) - materials[i] = Material.BlackstoneSlab; - for (int i = 20489; i <= 20568; i++) - materials[i] = Material.BlackstoneStairs; - for (int i = 20569; i <= 20892; i++) - materials[i] = Material.BlackstoneWall; - for (int i = 19451; i <= 19458; i++) - materials[i] = Material.BlastFurnace; - for (int i = 11824; i <= 11839; i++) - materials[i] = Material.BlueBanner; - for (int i = 1907; i <= 1922; i++) - materials[i] = Material.BlueBed; - for (int i = 21945; i <= 21960; i++) - materials[i] = Material.BlueCandle; - for (int i = 22049; i <= 22050; i++) - materials[i] = Material.BlueCandleCake; - materials[11628] = Material.BlueCarpet; - materials[13762] = Material.BlueConcrete; - materials[13778] = Material.BlueConcretePowder; - for (int i = 13731; i <= 13734; i++) - materials[i] = Material.BlueGlazedTerracotta; - materials[13964] = Material.BlueIce; - materials[2124] = Material.BlueOrchid; - for (int i = 13657; i <= 13662; i++) - materials[i] = Material.BlueShulkerBox; - materials[6135] = Material.BlueStainedGlass; - for (int i = 10533; i <= 10564; i++) - materials[i] = Material.BlueStainedGlassPane; - materials[10176] = Material.BlueTerracotta; - for (int i = 11948; i <= 11951; i++) - materials[i] = Material.BlueWallBanner; - materials[2104] = Material.BlueWool; - for (int i = 13569; i <= 13571; i++) - materials[i] = Material.BoneBlock; - materials[2142] = Material.Bookshelf; - for (int i = 13848; i <= 13849; i++) - materials[i] = Material.BrainCoral; - materials[13832] = Material.BrainCoralBlock; - for (int i = 13868; i <= 13869; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 13924; i <= 13931; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 8174; i <= 8181; i++) - materials[i] = Material.BrewingStand; - for (int i = 12153; i <= 12158; i++) - materials[i] = Material.BrickSlab; - for (int i = 7400; i <= 7479; i++) - materials[i] = Material.BrickStairs; - for (int i = 15183; i <= 15506; i++) - materials[i] = Material.BrickWall; - materials[2139] = Material.Bricks; - for (int i = 11840; i <= 11855; i++) - materials[i] = Material.BrownBanner; - for (int i = 1923; i <= 1938; i++) - materials[i] = Material.BrownBed; - for (int i = 21961; i <= 21976; i++) - materials[i] = Material.BrownCandle; - for (int i = 22051; i <= 22052; i++) - materials[i] = Material.BrownCandleCake; - materials[11629] = Material.BrownCarpet; - materials[13763] = Material.BrownConcrete; - materials[13779] = Material.BrownConcretePowder; - for (int i = 13735; i <= 13738; i++) - materials[i] = Material.BrownGlazedTerracotta; - materials[2135] = Material.BrownMushroom; - for (int i = 6792; i <= 6855; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 13663; i <= 13668; i++) - materials[i] = Material.BrownShulkerBox; - materials[6136] = Material.BrownStainedGlass; - for (int i = 10565; i <= 10596; i++) - materials[i] = Material.BrownStainedGlassPane; - materials[10177] = Material.BrownTerracotta; - for (int i = 11952; i <= 11955; i++) - materials[i] = Material.BrownWallBanner; - materials[2105] = Material.BrownWool; - for (int i = 13983; i <= 13984; i++) - materials[i] = Material.BubbleColumn; - for (int i = 13850; i <= 13851; i++) - materials[i] = Material.BubbleCoral; - materials[13833] = Material.BubbleCoralBlock; - for (int i = 13870; i <= 13871; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 13932; i <= 13939; i++) - materials[i] = Material.BubbleCoralWallFan; - materials[22060] = Material.BuddingAmethyst; - materials[2051] = Material.Bush; - for (int i = 5960; i <= 5975; i++) - materials[i] = Material.Cactus; - materials[5976] = Material.CactusFlower; - for (int i = 6053; i <= 6059; i++) - materials[i] = Material.Cake; - materials[23344] = Material.Calcite; - for (int i = 23443; i <= 23826; i++) - materials[i] = Material.CalibratedSculkSensor; - for (int i = 19534; i <= 19565; i++) - materials[i] = Material.Campfire; - for (int i = 21753; i <= 21768; i++) - materials[i] = Material.Candle; - for (int i = 22025; i <= 22026; i++) - materials[i] = Material.CandleCake; - for (int i = 9380; i <= 9387; i++) - materials[i] = Material.Carrots; - materials[19459] = Material.CartographyTable; - for (int i = 6045; i <= 6048; i++) - materials[i] = Material.CarvedPumpkin; - materials[8182] = Material.Cauldron; - materials[13982] = Material.CaveAir; - for (int i = 25797; i <= 25848; i++) - materials[i] = Material.CaveVines; - for (int i = 25849; i <= 25850; i++) - materials[i] = Material.CaveVinesPlant; - for (int i = 7016; i <= 7021; i++) - materials[i] = Material.Chain; - for (int i = 13550; i <= 13561; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 9516; i <= 9539; i++) - materials[i] = Material.CherryButton; - for (int i = 13037; i <= 13100; i++) - materials[i] = Material.CherryDoor; - for (int i = 12621; i <= 12652; i++) - materials[i] = Material.CherryFence; - for (int i = 12333; i <= 12364; i++) - materials[i] = Material.CherryFenceGate; - for (int i = 5194; i <= 5257; i++) - materials[i] = Material.CherryHangingSign; - for (int i = 392; i <= 419; i++) - materials[i] = Material.CherryLeaves; - for (int i = 151; i <= 153; i++) - materials[i] = Material.CherryLog; - materials[20] = Material.CherryPlanks; - for (int i = 5902; i <= 5903; i++) - materials[i] = Material.CherryPressurePlate; - for (int i = 39; i <= 40; i++) - materials[i] = Material.CherrySapling; - for (int i = 4494; i <= 4525; i++) - materials[i] = Material.CherrySign; - for (int i = 12081; i <= 12086; i++) - materials[i] = Material.CherrySlab; - for (int i = 10773; i <= 10852; i++) - materials[i] = Material.CherryStairs; - for (int i = 6460; i <= 6523; i++) - materials[i] = Material.CherryTrapdoor; - for (int i = 5738; i <= 5745; i++) - materials[i] = Material.CherryWallHangingSign; - for (int i = 4890; i <= 4897; i++) - materials[i] = Material.CherryWallSign; - for (int i = 216; i <= 218; i++) - materials[i] = Material.CherryWood; - for (int i = 3018; i <= 3041; i++) - materials[i] = Material.Chest; - for (int i = 9920; i <= 9923; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 2143; i <= 2398; i++) - materials[i] = Material.ChiseledBookshelf; - materials[23979] = Material.ChiseledCopper; - materials[27611] = Material.ChiseledDeepslate; - materials[21750] = Material.ChiseledNetherBricks; - materials[20902] = Material.ChiseledPolishedBlackstone; - materials[10045] = Material.ChiseledQuartzBlock; - materials[11969] = Material.ChiseledRedSandstone; - materials[8055] = Material.ChiseledResinBricks; - materials[579] = Material.ChiseledSandstone; - materials[6783] = Material.ChiseledStoneBricks; - materials[22931] = Material.ChiseledTuff; - materials[23343] = Material.ChiseledTuffBricks; - for (int i = 13427; i <= 13432; i++) - materials[i] = Material.ChorusFlower; - for (int i = 13363; i <= 13426; i++) - materials[i] = Material.ChorusPlant; - materials[5977] = Material.Clay; - materials[27910] = Material.ClosedEyeblossom; - materials[11634] = Material.CoalBlock; - materials[133] = Material.CoalOre; - materials[11] = Material.CoarseDirt; - materials[25967] = Material.CobbledDeepslate; - for (int i = 26048; i <= 26053; i++) - materials[i] = Material.CobbledDeepslateSlab; - for (int i = 25968; i <= 26047; i++) - materials[i] = Material.CobbledDeepslateStairs; - for (int i = 26054; i <= 26377; i++) - materials[i] = Material.CobbledDeepslateWall; - materials[14] = Material.Cobblestone; - for (int i = 12147; i <= 12152; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 4778; i <= 4857; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 8703; i <= 9026; i++) - materials[i] = Material.CobblestoneWall; - materials[2047] = Material.Cobweb; - for (int i = 8203; i <= 8214; i++) - materials[i] = Material.Cocoa; - for (int i = 8690; i <= 8701; i++) - materials[i] = Material.CommandBlock; - for (int i = 9984; i <= 9999; i++) - materials[i] = Material.Comparator; - for (int i = 20400; i <= 20408; i++) - materials[i] = Material.Composter; - for (int i = 13965; i <= 13966; i++) - materials[i] = Material.Conduit; - materials[23966] = Material.CopperBlock; - for (int i = 25720; i <= 25723; i++) - materials[i] = Material.CopperBulb; - for (int i = 24680; i <= 24743; i++) - materials[i] = Material.CopperDoor; - for (int i = 25704; i <= 25705; i++) - materials[i] = Material.CopperGrate; - materials[23970] = Material.CopperOre; - for (int i = 25192; i <= 25255; i++) - materials[i] = Material.CopperTrapdoor; - materials[2132] = Material.Cornflower; - materials[27612] = Material.CrackedDeepslateBricks; - materials[27613] = Material.CrackedDeepslateTiles; - materials[21751] = Material.CrackedNetherBricks; - materials[20901] = Material.CrackedPolishedBlackstoneBricks; - materials[6782] = Material.CrackedStoneBricks; - for (int i = 27650; i <= 27697; i++) - materials[i] = Material.Crafter; - materials[4341] = Material.CraftingTable; - for (int i = 2920; i <= 2937; i++) - materials[i] = Material.CreakingHeart; - for (int i = 9796; i <= 9827; i++) - materials[i] = Material.CreeperHead; - for (int i = 9828; i <= 9835; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 20123; i <= 20146; i++) - materials[i] = Material.CrimsonButton; - for (int i = 20171; i <= 20234; i++) - materials[i] = Material.CrimsonDoor; - for (int i = 19707; i <= 19738; i++) - materials[i] = Material.CrimsonFence; - for (int i = 19899; i <= 19930; i++) - materials[i] = Material.CrimsonFenceGate; - materials[19632] = Material.CrimsonFungus; - for (int i = 5450; i <= 5513; i++) - materials[i] = Material.CrimsonHangingSign; - for (int i = 19625; i <= 19627; i++) - materials[i] = Material.CrimsonHyphae; - materials[19631] = Material.CrimsonNylium; - materials[19689] = Material.CrimsonPlanks; - for (int i = 19703; i <= 19704; i++) - materials[i] = Material.CrimsonPressurePlate; - materials[19688] = Material.CrimsonRoots; - for (int i = 20299; i <= 20330; i++) - materials[i] = Material.CrimsonSign; - for (int i = 19691; i <= 19696; i++) - materials[i] = Material.CrimsonSlab; - for (int i = 19963; i <= 20042; i++) - materials[i] = Material.CrimsonStairs; - for (int i = 19619; i <= 19621; i++) - materials[i] = Material.CrimsonStem; - for (int i = 19771; i <= 19834; i++) - materials[i] = Material.CrimsonTrapdoor; - for (int i = 5778; i <= 5785; i++) - materials[i] = Material.CrimsonWallHangingSign; - for (int i = 20363; i <= 20370; i++) - materials[i] = Material.CrimsonWallSign; - materials[20477] = Material.CryingObsidian; - materials[23975] = Material.CutCopper; - for (int i = 24322; i <= 24327; i++) - materials[i] = Material.CutCopperSlab; - for (int i = 24224; i <= 24303; i++) - materials[i] = Material.CutCopperStairs; - materials[11970] = Material.CutRedSandstone; - for (int i = 12189; i <= 12194; i++) - materials[i] = Material.CutRedSandstoneSlab; - materials[580] = Material.CutSandstone; - for (int i = 12135; i <= 12140; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 11792; i <= 11807; i++) - materials[i] = Material.CyanBanner; - for (int i = 1875; i <= 1890; i++) - materials[i] = Material.CyanBed; - for (int i = 21913; i <= 21928; i++) - materials[i] = Material.CyanCandle; - for (int i = 22045; i <= 22046; i++) - materials[i] = Material.CyanCandleCake; - materials[11626] = Material.CyanCarpet; - materials[13760] = Material.CyanConcrete; - materials[13776] = Material.CyanConcretePowder; - for (int i = 13723; i <= 13726; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 13645; i <= 13650; i++) - materials[i] = Material.CyanShulkerBox; - materials[6133] = Material.CyanStainedGlass; - for (int i = 10469; i <= 10500; i++) - materials[i] = Material.CyanStainedGlassPane; - materials[10174] = Material.CyanTerracotta; - for (int i = 11940; i <= 11943; i++) - materials[i] = Material.CyanWallBanner; - materials[2102] = Material.CyanWool; - for (int i = 9924; i <= 9927; i++) - materials[i] = Material.DamagedAnvil; - materials[2121] = Material.Dandelion; - for (int i = 9540; i <= 9563; i++) - materials[i] = Material.DarkOakButton; - for (int i = 13101; i <= 13164; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 12653; i <= 12684; i++) - materials[i] = Material.DarkOakFence; - for (int i = 12365; i <= 12396; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 5322; i <= 5385; i++) - materials[i] = Material.DarkOakHangingSign; - for (int i = 420; i <= 447; i++) - materials[i] = Material.DarkOakLeaves; - for (int i = 154; i <= 156; i++) - materials[i] = Material.DarkOakLog; - materials[21] = Material.DarkOakPlanks; - for (int i = 5904; i <= 5905; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 41; i <= 42; i++) - materials[i] = Material.DarkOakSapling; - for (int i = 4558; i <= 4589; i++) - materials[i] = Material.DarkOakSign; - for (int i = 12087; i <= 12092; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 10853; i <= 10932; i++) - materials[i] = Material.DarkOakStairs; - for (int i = 6524; i <= 6587; i++) - materials[i] = Material.DarkOakTrapdoor; - for (int i = 5754; i <= 5761; i++) - materials[i] = Material.DarkOakWallHangingSign; - for (int i = 4906; i <= 4913; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 219; i <= 221; i++) - materials[i] = Material.DarkOakWood; - materials[11354] = Material.DarkPrismarine; - for (int i = 11607; i <= 11612; i++) - materials[i] = Material.DarkPrismarineSlab; - for (int i = 11515; i <= 11594; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 10000; i <= 10031; i++) - materials[i] = Material.DaylightDetector; - for (int i = 13838; i <= 13839; i++) - materials[i] = Material.DeadBrainCoral; - materials[13827] = Material.DeadBrainCoralBlock; - for (int i = 13858; i <= 13859; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 13884; i <= 13891; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 13840; i <= 13841; i++) - materials[i] = Material.DeadBubbleCoral; - materials[13828] = Material.DeadBubbleCoralBlock; - for (int i = 13860; i <= 13861; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 13892; i <= 13899; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - materials[2050] = Material.DeadBush; - for (int i = 13842; i <= 13843; i++) - materials[i] = Material.DeadFireCoral; - materials[13829] = Material.DeadFireCoralBlock; - for (int i = 13862; i <= 13863; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 13900; i <= 13907; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 13844; i <= 13845; i++) - materials[i] = Material.DeadHornCoral; - materials[13830] = Material.DeadHornCoralBlock; - for (int i = 13864; i <= 13865; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 13908; i <= 13915; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 13836; i <= 13837; i++) - materials[i] = Material.DeadTubeCoral; - materials[13826] = Material.DeadTubeCoralBlock; - for (int i = 13856; i <= 13857; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 13876; i <= 13883; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 27634; i <= 27649; i++) - materials[i] = Material.DecoratedPot; - for (int i = 25964; i <= 25966; i++) - materials[i] = Material.Deepslate; - for (int i = 27281; i <= 27286; i++) - materials[i] = Material.DeepslateBrickSlab; - for (int i = 27201; i <= 27280; i++) - materials[i] = Material.DeepslateBrickStairs; - for (int i = 27287; i <= 27610; i++) - materials[i] = Material.DeepslateBrickWall; - materials[27200] = Material.DeepslateBricks; - materials[134] = Material.DeepslateCoalOre; - materials[23971] = Material.DeepslateCopperOre; - materials[4339] = Material.DeepslateDiamondOre; - materials[8296] = Material.DeepslateEmeraldOre; - materials[130] = Material.DeepslateGoldOre; - materials[132] = Material.DeepslateIronOre; - materials[564] = Material.DeepslateLapisOre; - for (int i = 5914; i <= 5915; i++) - materials[i] = Material.DeepslateRedstoneOre; - for (int i = 26870; i <= 26875; i++) - materials[i] = Material.DeepslateTileSlab; - for (int i = 26790; i <= 26869; i++) - materials[i] = Material.DeepslateTileStairs; - for (int i = 26876; i <= 27199; i++) - materials[i] = Material.DeepslateTileWall; - materials[26789] = Material.DeepslateTiles; - for (int i = 2011; i <= 2034; i++) - materials[i] = Material.DetectorRail; - materials[4340] = Material.DiamondBlock; - materials[4338] = Material.DiamondOre; - materials[4] = Material.Diorite; - for (int i = 15177; i <= 15182; i++) - materials[i] = Material.DioriteSlab; - for (int i = 15025; i <= 15104; i++) - materials[i] = Material.DioriteStairs; - for (int i = 19071; i <= 19394; i++) - materials[i] = Material.DioriteWall; - materials[10] = Material.Dirt; - materials[13536] = Material.DirtPath; - for (int i = 566; i <= 577; i++) - materials[i] = Material.Dispenser; - materials[8200] = Material.DragonEgg; - for (int i = 9836; i <= 9867; i++) - materials[i] = Material.DragonHead; - for (int i = 9868; i <= 9875; i++) - materials[i] = Material.DragonWallHead; - materials[13810] = Material.DriedKelpBlock; - materials[25796] = Material.DripstoneBlock; - for (int i = 10153; i <= 10164; i++) - materials[i] = Material.Dropper; - materials[8449] = Material.EmeraldBlock; - materials[8295] = Material.EmeraldOre; - materials[8173] = Material.EnchantingTable; - materials[13537] = Material.EndGateway; - materials[8190] = Material.EndPortal; - for (int i = 8191; i <= 8198; i++) - materials[i] = Material.EndPortalFrame; - for (int i = 13357; i <= 13362; i++) - materials[i] = Material.EndRod; - materials[8199] = Material.EndStone; - for (int i = 15135; i <= 15140; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 14385; i <= 14464; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 18747; i <= 19070; i++) - materials[i] = Material.EndStoneBrickWall; - materials[13517] = Material.EndStoneBricks; - for (int i = 8297; i <= 8304; i++) - materials[i] = Material.EnderChest; - materials[23978] = Material.ExposedChiseledCopper; - materials[23967] = Material.ExposedCopper; - for (int i = 25724; i <= 25727; i++) - materials[i] = Material.ExposedCopperBulb; - for (int i = 24744; i <= 24807; i++) - materials[i] = Material.ExposedCopperDoor; - for (int i = 25706; i <= 25707; i++) - materials[i] = Material.ExposedCopperGrate; - for (int i = 25256; i <= 25319; i++) - materials[i] = Material.ExposedCopperTrapdoor; - materials[23974] = Material.ExposedCutCopper; - for (int i = 24316; i <= 24321; i++) - materials[i] = Material.ExposedCutCopperSlab; - for (int i = 24144; i <= 24223; i++) - materials[i] = Material.ExposedCutCopperStairs; - for (int i = 4350; i <= 4357; i++) - materials[i] = Material.Farmland; - materials[2049] = Material.Fern; - for (int i = 2406; i <= 2917; i++) - materials[i] = Material.Fire; - for (int i = 13852; i <= 13853; i++) - materials[i] = Material.FireCoral; - materials[13834] = Material.FireCoralBlock; - for (int i = 13872; i <= 13873; i++) - materials[i] = Material.FireCoralFan; - for (int i = 13940; i <= 13947; i++) - materials[i] = Material.FireCoralWallFan; - materials[27913] = Material.FireflyBush; - materials[19460] = Material.FletchingTable; - materials[9351] = Material.FlowerPot; - materials[25853] = Material.FloweringAzalea; - for (int i = 532; i <= 559; i++) - materials[i] = Material.FloweringAzaleaLeaves; - materials[27632] = Material.Frogspawn; - for (int i = 13562; i <= 13565; i++) - materials[i] = Material.FrostedIce; - for (int i = 4358; i <= 4365; i++) - materials[i] = Material.Furnace; - materials[21313] = Material.GildedBlackstone; - materials[562] = Material.Glass; - for (int i = 7022; i <= 7053; i++) - materials[i] = Material.GlassPane; - for (int i = 7112; i <= 7239; i++) - materials[i] = Material.GlowLichen; - materials[6042] = Material.Glowstone; - materials[2137] = Material.GoldBlock; - materials[129] = Material.GoldOre; - materials[2] = Material.Granite; - for (int i = 15153; i <= 15158; i++) - materials[i] = Material.GraniteSlab; - for (int i = 14705; i <= 14784; i++) - materials[i] = Material.GraniteStairs; - for (int i = 16479; i <= 16802; i++) - materials[i] = Material.GraniteWall; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - materials[124] = Material.Gravel; - for (int i = 11760; i <= 11775; i++) - materials[i] = Material.GrayBanner; - for (int i = 1843; i <= 1858; i++) - materials[i] = Material.GrayBed; - for (int i = 21881; i <= 21896; i++) - materials[i] = Material.GrayCandle; - for (int i = 22041; i <= 22042; i++) - materials[i] = Material.GrayCandleCake; - materials[11624] = Material.GrayCarpet; - materials[13758] = Material.GrayConcrete; - materials[13774] = Material.GrayConcretePowder; - for (int i = 13715; i <= 13718; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 13633; i <= 13638; i++) - materials[i] = Material.GrayShulkerBox; - materials[6131] = Material.GrayStainedGlass; - for (int i = 10405; i <= 10436; i++) - materials[i] = Material.GrayStainedGlassPane; - materials[10172] = Material.GrayTerracotta; - for (int i = 11932; i <= 11935; i++) - materials[i] = Material.GrayWallBanner; - materials[2100] = Material.GrayWool; - for (int i = 11856; i <= 11871; i++) - materials[i] = Material.GreenBanner; - for (int i = 1939; i <= 1954; i++) - materials[i] = Material.GreenBed; - for (int i = 21977; i <= 21992; i++) - materials[i] = Material.GreenCandle; - for (int i = 22053; i <= 22054; i++) - materials[i] = Material.GreenCandleCake; - materials[11630] = Material.GreenCarpet; - materials[13764] = Material.GreenConcrete; - materials[13780] = Material.GreenConcretePowder; - for (int i = 13739; i <= 13742; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 13669; i <= 13674; i++) - materials[i] = Material.GreenShulkerBox; - materials[6137] = Material.GreenStainedGlass; - for (int i = 10597; i <= 10628; i++) - materials[i] = Material.GreenStainedGlassPane; - materials[10178] = Material.GreenTerracotta; - for (int i = 11956; i <= 11959; i++) - materials[i] = Material.GreenWallBanner; - materials[2106] = Material.GreenWool; - for (int i = 19461; i <= 19472; i++) - materials[i] = Material.Grindstone; - for (int i = 25960; i <= 25961; i++) - materials[i] = Material.HangingRoots; - for (int i = 11614; i <= 11616; i++) - materials[i] = Material.HayBlock; - for (int i = 27742; i <= 27743; i++) - materials[i] = Material.HeavyCore; - for (int i = 9968; i <= 9983; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - materials[20473] = Material.HoneyBlock; - materials[20474] = Material.HoneycombBlock; - for (int i = 10034; i <= 10043; i++) - materials[i] = Material.Hopper; - for (int i = 13854; i <= 13855; i++) - materials[i] = Material.HornCoral; - materials[13835] = Material.HornCoralBlock; - for (int i = 13874; i <= 13875; i++) - materials[i] = Material.HornCoralFan; - for (int i = 13948; i <= 13955; i++) - materials[i] = Material.HornCoralWallFan; - materials[5958] = Material.Ice; - materials[6791] = Material.InfestedChiseledStoneBricks; - materials[6787] = Material.InfestedCobblestone; - materials[6790] = Material.InfestedCrackedStoneBricks; - for (int i = 27614; i <= 27616; i++) - materials[i] = Material.InfestedDeepslate; - materials[6789] = Material.InfestedMossyStoneBricks; - materials[6786] = Material.InfestedStone; - materials[6788] = Material.InfestedStoneBricks; - for (int i = 6984; i <= 7015; i++) - materials[i] = Material.IronBars; - materials[2138] = Material.IronBlock; - for (int i = 5828; i <= 5891; i++) - materials[i] = Material.IronDoor; - materials[131] = Material.IronOre; - for (int i = 11288; i <= 11351; i++) - materials[i] = Material.IronTrapdoor; - for (int i = 6049; i <= 6052; i++) - materials[i] = Material.JackOLantern; - for (int i = 20383; i <= 20394; i++) - materials[i] = Material.Jigsaw; - for (int i = 5994; i <= 5995; i++) - materials[i] = Material.Jukebox; - for (int i = 9468; i <= 9491; i++) - materials[i] = Material.JungleButton; - for (int i = 12909; i <= 12972; i++) - materials[i] = Material.JungleDoor; - for (int i = 12557; i <= 12588; i++) - materials[i] = Material.JungleFence; - for (int i = 12269; i <= 12300; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 5258; i <= 5321; i++) - materials[i] = Material.JungleHangingSign; - for (int i = 336; i <= 363; i++) - materials[i] = Material.JungleLeaves; - for (int i = 145; i <= 147; i++) - materials[i] = Material.JungleLog; - materials[18] = Material.JunglePlanks; - for (int i = 5898; i <= 5899; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 35; i <= 36; i++) - materials[i] = Material.JungleSapling; - for (int i = 4526; i <= 4557; i++) - materials[i] = Material.JungleSign; - for (int i = 12069; i <= 12074; i++) - materials[i] = Material.JungleSlab; - for (int i = 8610; i <= 8689; i++) - materials[i] = Material.JungleStairs; - for (int i = 6332; i <= 6395; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 5746; i <= 5753; i++) - materials[i] = Material.JungleWallHangingSign; - for (int i = 4898; i <= 4905; i++) - materials[i] = Material.JungleWallSign; - for (int i = 210; i <= 212; i++) - materials[i] = Material.JungleWood; - for (int i = 13783; i <= 13808; i++) - materials[i] = Material.Kelp; - materials[13809] = Material.KelpPlant; - for (int i = 4750; i <= 4757; i++) - materials[i] = Material.Ladder; - for (int i = 19526; i <= 19529; i++) - materials[i] = Material.Lantern; - materials[565] = Material.LapisBlock; - materials[563] = Material.LapisOre; - for (int i = 22073; i <= 22084; i++) - materials[i] = Material.LargeAmethystBud; - for (int i = 11646; i <= 11647; i++) - materials[i] = Material.LargeFern; - for (int i = 102; i <= 117; i++) - materials[i] = Material.Lava; - materials[8186] = Material.LavaCauldron; - for (int i = 25887; i <= 25902; i++) - materials[i] = Material.LeafLitter; - for (int i = 19473; i <= 19488; i++) - materials[i] = Material.Lectern; - for (int i = 5802; i <= 5825; i++) - materials[i] = Material.Lever; - for (int i = 11256; i <= 11287; i++) - materials[i] = Material.Light; - for (int i = 11696; i <= 11711; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 1779; i <= 1794; i++) - materials[i] = Material.LightBlueBed; - for (int i = 21817; i <= 21832; i++) - materials[i] = Material.LightBlueCandle; - for (int i = 22033; i <= 22034; i++) - materials[i] = Material.LightBlueCandleCake; - materials[11620] = Material.LightBlueCarpet; - materials[13754] = Material.LightBlueConcrete; - materials[13770] = Material.LightBlueConcretePowder; - for (int i = 13699; i <= 13702; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 13609; i <= 13614; i++) - materials[i] = Material.LightBlueShulkerBox; - materials[6127] = Material.LightBlueStainedGlass; - for (int i = 10277; i <= 10308; i++) - materials[i] = Material.LightBlueStainedGlassPane; - materials[10168] = Material.LightBlueTerracotta; - for (int i = 11916; i <= 11919; i++) - materials[i] = Material.LightBlueWallBanner; - materials[2096] = Material.LightBlueWool; - for (int i = 11776; i <= 11791; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 1859; i <= 1874; i++) - materials[i] = Material.LightGrayBed; - for (int i = 21897; i <= 21912; i++) - materials[i] = Material.LightGrayCandle; - for (int i = 22043; i <= 22044; i++) - materials[i] = Material.LightGrayCandleCake; - materials[11625] = Material.LightGrayCarpet; - materials[13759] = Material.LightGrayConcrete; - materials[13775] = Material.LightGrayConcretePowder; - for (int i = 13719; i <= 13722; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 13639; i <= 13644; i++) - materials[i] = Material.LightGrayShulkerBox; - materials[6132] = Material.LightGrayStainedGlass; - for (int i = 10437; i <= 10468; i++) - materials[i] = Material.LightGrayStainedGlassPane; - materials[10173] = Material.LightGrayTerracotta; - for (int i = 11936; i <= 11939; i++) - materials[i] = Material.LightGrayWallBanner; - materials[2101] = Material.LightGrayWool; - for (int i = 9952; i <= 9967; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 25752; i <= 25775; i++) - materials[i] = Material.LightningRod; - for (int i = 11638; i <= 11639; i++) - materials[i] = Material.Lilac; - materials[2134] = Material.LilyOfTheValley; - materials[7642] = Material.LilyPad; - for (int i = 11728; i <= 11743; i++) - materials[i] = Material.LimeBanner; - for (int i = 1811; i <= 1826; i++) - materials[i] = Material.LimeBed; - for (int i = 21849; i <= 21864; i++) - materials[i] = Material.LimeCandle; - for (int i = 22037; i <= 22038; i++) - materials[i] = Material.LimeCandleCake; - materials[11622] = Material.LimeCarpet; - materials[13756] = Material.LimeConcrete; - materials[13772] = Material.LimeConcretePowder; - for (int i = 13707; i <= 13710; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 13621; i <= 13626; i++) - materials[i] = Material.LimeShulkerBox; - materials[6129] = Material.LimeStainedGlass; - for (int i = 10341; i <= 10372; i++) - materials[i] = Material.LimeStainedGlassPane; - materials[10170] = Material.LimeTerracotta; - for (int i = 11924; i <= 11927; i++) - materials[i] = Material.LimeWallBanner; - materials[2098] = Material.LimeWool; - materials[20487] = Material.Lodestone; - for (int i = 19427; i <= 19430; i++) - materials[i] = Material.Loom; - for (int i = 11680; i <= 11695; i++) - materials[i] = Material.MagentaBanner; - for (int i = 1763; i <= 1778; i++) - materials[i] = Material.MagentaBed; - for (int i = 21801; i <= 21816; i++) - materials[i] = Material.MagentaCandle; - for (int i = 22031; i <= 22032; i++) - materials[i] = Material.MagentaCandleCake; - materials[11619] = Material.MagentaCarpet; - materials[13753] = Material.MagentaConcrete; - materials[13769] = Material.MagentaConcretePowder; - for (int i = 13695; i <= 13698; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 13603; i <= 13608; i++) - materials[i] = Material.MagentaShulkerBox; - materials[6126] = Material.MagentaStainedGlass; - for (int i = 10245; i <= 10276; i++) - materials[i] = Material.MagentaStainedGlassPane; - materials[10167] = Material.MagentaTerracotta; - for (int i = 11912; i <= 11915; i++) - materials[i] = Material.MagentaWallBanner; - materials[2095] = Material.MagentaWool; - materials[13566] = Material.MagmaBlock; - for (int i = 9588; i <= 9611; i++) - materials[i] = Material.MangroveButton; - for (int i = 13229; i <= 13292; i++) - materials[i] = Material.MangroveDoor; - for (int i = 12717; i <= 12748; i++) - materials[i] = Material.MangroveFence; - for (int i = 12429; i <= 12460; i++) - materials[i] = Material.MangroveFenceGate; - for (int i = 5578; i <= 5641; i++) - materials[i] = Material.MangroveHangingSign; - for (int i = 476; i <= 503; i++) - materials[i] = Material.MangroveLeaves; - for (int i = 160; i <= 162; i++) - materials[i] = Material.MangroveLog; - materials[26] = Material.MangrovePlanks; - for (int i = 5908; i <= 5909; i++) - materials[i] = Material.MangrovePressurePlate; - for (int i = 45; i <= 84; i++) - materials[i] = Material.MangrovePropagule; - for (int i = 163; i <= 164; i++) - materials[i] = Material.MangroveRoots; - for (int i = 4622; i <= 4653; i++) - materials[i] = Material.MangroveSign; - for (int i = 12099; i <= 12104; i++) - materials[i] = Material.MangroveSlab; - for (int i = 11013; i <= 11092; i++) - materials[i] = Material.MangroveStairs; - for (int i = 6652; i <= 6715; i++) - materials[i] = Material.MangroveTrapdoor; - for (int i = 5770; i <= 5777; i++) - materials[i] = Material.MangroveWallHangingSign; - for (int i = 4922; i <= 4929; i++) - materials[i] = Material.MangroveWallSign; - for (int i = 222; i <= 224; i++) - materials[i] = Material.MangroveWood; - for (int i = 22085; i <= 22096; i++) - materials[i] = Material.MediumAmethystBud; - materials[7055] = Material.Melon; - for (int i = 7072; i <= 7079; i++) - materials[i] = Material.MelonStem; - materials[25903] = Material.MossBlock; - materials[25854] = Material.MossCarpet; - materials[2399] = Material.MossyCobblestone; - for (int i = 15129; i <= 15134; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 14305; i <= 14384; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 9027; i <= 9350; i++) - materials[i] = Material.MossyCobblestoneWall; - for (int i = 15117; i <= 15122; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 14145; i <= 14224; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 16155; i <= 16478; i++) - materials[i] = Material.MossyStoneBrickWall; - materials[6781] = Material.MossyStoneBricks; - for (int i = 2109; i <= 2120; i++) - materials[i] = Material.MovingPiston; - materials[25963] = Material.Mud; - for (int i = 12165; i <= 12170; i++) - materials[i] = Material.MudBrickSlab; - for (int i = 7560; i <= 7639; i++) - materials[i] = Material.MudBrickStairs; - for (int i = 17127; i <= 17450; i++) - materials[i] = Material.MudBrickWall; - materials[6785] = Material.MudBricks; - for (int i = 165; i <= 167; i++) - materials[i] = Material.MuddyMangroveRoots; - for (int i = 6920; i <= 6983; i++) - materials[i] = Material.MushroomStem; - for (int i = 7640; i <= 7641; i++) - materials[i] = Material.Mycelium; - for (int i = 8057; i <= 8088; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 12171; i <= 12176; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 8089; i <= 8168; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 17451; i <= 17774; i++) - materials[i] = Material.NetherBrickWall; - materials[8056] = Material.NetherBricks; - materials[135] = Material.NetherGoldOre; - for (int i = 6043; i <= 6044; i++) - materials[i] = Material.NetherPortal; - materials[10033] = Material.NetherQuartzOre; - materials[19618] = Material.NetherSprouts; - for (int i = 8169; i <= 8172; i++) - materials[i] = Material.NetherWart; - materials[13567] = Material.NetherWartBlock; - materials[20475] = Material.NetheriteBlock; - materials[6028] = Material.Netherrack; - for (int i = 581; i <= 1730; i++) - materials[i] = Material.NoteBlock; - for (int i = 9396; i <= 9419; i++) - materials[i] = Material.OakButton; - for (int i = 4686; i <= 4749; i++) - materials[i] = Material.OakDoor; - for (int i = 5996; i <= 6027; i++) - materials[i] = Material.OakFence; - for (int i = 7368; i <= 7399; i++) - materials[i] = Material.OakFenceGate; - for (int i = 4938; i <= 5001; i++) - materials[i] = Material.OakHangingSign; - for (int i = 252; i <= 279; i++) - materials[i] = Material.OakLeaves; - for (int i = 136; i <= 138; i++) - materials[i] = Material.OakLog; - materials[15] = Material.OakPlanks; - for (int i = 5892; i <= 5893; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 29; i <= 30; i++) - materials[i] = Material.OakSapling; - for (int i = 4366; i <= 4397; i++) - materials[i] = Material.OakSign; - for (int i = 12051; i <= 12056; i++) - materials[i] = Material.OakSlab; - for (int i = 2938; i <= 3017; i++) - materials[i] = Material.OakStairs; - for (int i = 6140; i <= 6203; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 5706; i <= 5713; i++) - materials[i] = Material.OakWallHangingSign; - for (int i = 4858; i <= 4865; i++) - materials[i] = Material.OakWallSign; - for (int i = 201; i <= 203; i++) - materials[i] = Material.OakWood; - for (int i = 13573; i <= 13584; i++) - materials[i] = Material.Observer; - materials[2400] = Material.Obsidian; - for (int i = 27623; i <= 27625; i++) - materials[i] = Material.OchreFroglight; - materials[27909] = Material.OpenEyeblossom; - for (int i = 11664; i <= 11679; i++) - materials[i] = Material.OrangeBanner; - for (int i = 1747; i <= 1762; i++) - materials[i] = Material.OrangeBed; - for (int i = 21785; i <= 21800; i++) - materials[i] = Material.OrangeCandle; - for (int i = 22029; i <= 22030; i++) - materials[i] = Material.OrangeCandleCake; - materials[11618] = Material.OrangeCarpet; - materials[13752] = Material.OrangeConcrete; - materials[13768] = Material.OrangeConcretePowder; - for (int i = 13691; i <= 13694; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 13597; i <= 13602; i++) - materials[i] = Material.OrangeShulkerBox; - materials[6125] = Material.OrangeStainedGlass; - for (int i = 10213; i <= 10244; i++) - materials[i] = Material.OrangeStainedGlassPane; - materials[10166] = Material.OrangeTerracotta; - materials[2128] = Material.OrangeTulip; - for (int i = 11908; i <= 11911; i++) - materials[i] = Material.OrangeWallBanner; - materials[2094] = Material.OrangeWool; - materials[2131] = Material.OxeyeDaisy; - materials[23976] = Material.OxidizedChiseledCopper; - materials[23969] = Material.OxidizedCopper; - for (int i = 25732; i <= 25735; i++) - materials[i] = Material.OxidizedCopperBulb; - for (int i = 24808; i <= 24871; i++) - materials[i] = Material.OxidizedCopperDoor; - for (int i = 25710; i <= 25711; i++) - materials[i] = Material.OxidizedCopperGrate; - for (int i = 25320; i <= 25383; i++) - materials[i] = Material.OxidizedCopperTrapdoor; - materials[23972] = Material.OxidizedCutCopper; - for (int i = 24304; i <= 24309; i++) - materials[i] = Material.OxidizedCutCopperSlab; - for (int i = 23984; i <= 24063; i++) - materials[i] = Material.OxidizedCutCopperStairs; - materials[11635] = Material.PackedIce; - materials[6784] = Material.PackedMud; - for (int i = 27907; i <= 27908; i++) - materials[i] = Material.PaleHangingMoss; - materials[27744] = Material.PaleMossBlock; - for (int i = 27745; i <= 27906; i++) - materials[i] = Material.PaleMossCarpet; - for (int i = 9564; i <= 9587; i++) - materials[i] = Material.PaleOakButton; - for (int i = 13165; i <= 13228; i++) - materials[i] = Material.PaleOakDoor; - for (int i = 12685; i <= 12716; i++) - materials[i] = Material.PaleOakFence; - for (int i = 12397; i <= 12428; i++) - materials[i] = Material.PaleOakFenceGate; - for (int i = 5386; i <= 5449; i++) - materials[i] = Material.PaleOakHangingSign; - for (int i = 448; i <= 475; i++) - materials[i] = Material.PaleOakLeaves; - for (int i = 157; i <= 159; i++) - materials[i] = Material.PaleOakLog; - materials[25] = Material.PaleOakPlanks; - for (int i = 5906; i <= 5907; i++) - materials[i] = Material.PaleOakPressurePlate; - for (int i = 43; i <= 44; i++) - materials[i] = Material.PaleOakSapling; - for (int i = 4590; i <= 4621; i++) - materials[i] = Material.PaleOakSign; - for (int i = 12093; i <= 12098; i++) - materials[i] = Material.PaleOakSlab; - for (int i = 10933; i <= 11012; i++) - materials[i] = Material.PaleOakStairs; - for (int i = 6588; i <= 6651; i++) - materials[i] = Material.PaleOakTrapdoor; - for (int i = 5762; i <= 5769; i++) - materials[i] = Material.PaleOakWallHangingSign; - for (int i = 4914; i <= 4921; i++) - materials[i] = Material.PaleOakWallSign; - for (int i = 22; i <= 24; i++) - materials[i] = Material.PaleOakWood; - for (int i = 27629; i <= 27631; i++) - materials[i] = Material.PearlescentFroglight; - for (int i = 11642; i <= 11643; i++) - materials[i] = Material.Peony; - for (int i = 12141; i <= 12146; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 9876; i <= 9907; i++) - materials[i] = Material.PiglinHead; - for (int i = 9908; i <= 9915; i++) - materials[i] = Material.PiglinWallHead; - for (int i = 11744; i <= 11759; i++) - materials[i] = Material.PinkBanner; - for (int i = 1827; i <= 1842; i++) - materials[i] = Material.PinkBed; - for (int i = 21865; i <= 21880; i++) - materials[i] = Material.PinkCandle; - for (int i = 22039; i <= 22040; i++) - materials[i] = Material.PinkCandleCake; - materials[11623] = Material.PinkCarpet; - materials[13757] = Material.PinkConcrete; - materials[13773] = Material.PinkConcretePowder; - for (int i = 13711; i <= 13714; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 25855; i <= 25870; i++) - materials[i] = Material.PinkPetals; - for (int i = 13627; i <= 13632; i++) - materials[i] = Material.PinkShulkerBox; - materials[6130] = Material.PinkStainedGlass; - for (int i = 10373; i <= 10404; i++) - materials[i] = Material.PinkStainedGlassPane; - materials[10171] = Material.PinkTerracotta; - materials[2130] = Material.PinkTulip; - for (int i = 11928; i <= 11931; i++) - materials[i] = Material.PinkWallBanner; - materials[2099] = Material.PinkWool; - for (int i = 2057; i <= 2068; i++) - materials[i] = Material.Piston; - for (int i = 2069; i <= 2092; i++) - materials[i] = Material.PistonHead; - for (int i = 13520; i <= 13529; i++) - materials[i] = Material.PitcherCrop; - for (int i = 13530; i <= 13531; i++) - materials[i] = Material.PitcherPlant; - for (int i = 9756; i <= 9787; i++) - materials[i] = Material.PlayerHead; - for (int i = 9788; i <= 9795; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - for (int i = 25776; i <= 25795; i++) - materials[i] = Material.PointedDripstone; - materials[7] = Material.PolishedAndesite; - for (int i = 15171; i <= 15176; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 14945; i <= 15024; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 6034; i <= 6036; i++) - materials[i] = Material.PolishedBasalt; - materials[20899] = Material.PolishedBlackstone; - for (int i = 20903; i <= 20908; i++) - materials[i] = Material.PolishedBlackstoneBrickSlab; - for (int i = 20909; i <= 20988; i++) - materials[i] = Material.PolishedBlackstoneBrickStairs; - for (int i = 20989; i <= 21312; i++) - materials[i] = Material.PolishedBlackstoneBrickWall; - materials[20900] = Material.PolishedBlackstoneBricks; - for (int i = 21402; i <= 21425; i++) - materials[i] = Material.PolishedBlackstoneButton; - for (int i = 21400; i <= 21401; i++) - materials[i] = Material.PolishedBlackstonePressurePlate; - for (int i = 21394; i <= 21399; i++) - materials[i] = Material.PolishedBlackstoneSlab; - for (int i = 21314; i <= 21393; i++) - materials[i] = Material.PolishedBlackstoneStairs; - for (int i = 21426; i <= 21749; i++) - materials[i] = Material.PolishedBlackstoneWall; - materials[26378] = Material.PolishedDeepslate; - for (int i = 26459; i <= 26464; i++) - materials[i] = Material.PolishedDeepslateSlab; - for (int i = 26379; i <= 26458; i++) - materials[i] = Material.PolishedDeepslateStairs; - for (int i = 26465; i <= 26788; i++) - materials[i] = Material.PolishedDeepslateWall; - materials[5] = Material.PolishedDiorite; - for (int i = 15123; i <= 15128; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 14225; i <= 14304; i++) - materials[i] = Material.PolishedDioriteStairs; - materials[3] = Material.PolishedGranite; - for (int i = 15105; i <= 15110; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 13985; i <= 14064; i++) - materials[i] = Material.PolishedGraniteStairs; - materials[22520] = Material.PolishedTuff; - for (int i = 22521; i <= 22526; i++) - materials[i] = Material.PolishedTuffSlab; - for (int i = 22527; i <= 22606; i++) - materials[i] = Material.PolishedTuffStairs; - for (int i = 22607; i <= 22930; i++) - materials[i] = Material.PolishedTuffWall; - materials[2123] = Material.Poppy; - for (int i = 9388; i <= 9395; i++) - materials[i] = Material.Potatoes; - materials[9357] = Material.PottedAcaciaSapling; - materials[9366] = Material.PottedAllium; - materials[27621] = Material.PottedAzaleaBush; - materials[9367] = Material.PottedAzureBluet; - materials[13980] = Material.PottedBamboo; - materials[9355] = Material.PottedBirchSapling; - materials[9365] = Material.PottedBlueOrchid; - materials[9377] = Material.PottedBrownMushroom; - materials[9379] = Material.PottedCactus; - materials[9358] = Material.PottedCherrySapling; - materials[27912] = Material.PottedClosedEyeblossom; - materials[9373] = Material.PottedCornflower; - materials[20483] = Material.PottedCrimsonFungus; - materials[20485] = Material.PottedCrimsonRoots; - materials[9363] = Material.PottedDandelion; - materials[9359] = Material.PottedDarkOakSapling; - materials[9378] = Material.PottedDeadBush; - materials[9362] = Material.PottedFern; - materials[27622] = Material.PottedFloweringAzaleaBush; - materials[9356] = Material.PottedJungleSapling; - materials[9374] = Material.PottedLilyOfTheValley; - materials[9361] = Material.PottedMangrovePropagule; - materials[9353] = Material.PottedOakSapling; - materials[27911] = Material.PottedOpenEyeblossom; - materials[9369] = Material.PottedOrangeTulip; - materials[9372] = Material.PottedOxeyeDaisy; - materials[9360] = Material.PottedPaleOakSapling; - materials[9371] = Material.PottedPinkTulip; - materials[9364] = Material.PottedPoppy; - materials[9376] = Material.PottedRedMushroom; - materials[9368] = Material.PottedRedTulip; - materials[9354] = Material.PottedSpruceSapling; - materials[9352] = Material.PottedTorchflower; - materials[20484] = Material.PottedWarpedFungus; - materials[20486] = Material.PottedWarpedRoots; - materials[9370] = Material.PottedWhiteTulip; - materials[9375] = Material.PottedWitherRose; - materials[23346] = Material.PowderSnow; - for (int i = 8187; i <= 8189; i++) - materials[i] = Material.PowderSnowCauldron; - for (int i = 1987; i <= 2010; i++) - materials[i] = Material.PoweredRail; - materials[11352] = Material.Prismarine; - for (int i = 11601; i <= 11606; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 11435; i <= 11514; i++) - materials[i] = Material.PrismarineBrickStairs; - materials[11353] = Material.PrismarineBricks; - for (int i = 11595; i <= 11600; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 11355; i <= 11434; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 15507; i <= 15830; i++) - materials[i] = Material.PrismarineWall; - materials[7054] = Material.Pumpkin; - for (int i = 7064; i <= 7071; i++) - materials[i] = Material.PumpkinStem; - for (int i = 11808; i <= 11823; i++) - materials[i] = Material.PurpleBanner; - for (int i = 1891; i <= 1906; i++) - materials[i] = Material.PurpleBed; - for (int i = 21929; i <= 21944; i++) - materials[i] = Material.PurpleCandle; - for (int i = 22047; i <= 22048; i++) - materials[i] = Material.PurpleCandleCake; - materials[11627] = Material.PurpleCarpet; - materials[13761] = Material.PurpleConcrete; - materials[13777] = Material.PurpleConcretePowder; - for (int i = 13727; i <= 13730; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 13651; i <= 13656; i++) - materials[i] = Material.PurpleShulkerBox; - materials[6134] = Material.PurpleStainedGlass; - for (int i = 10501; i <= 10532; i++) - materials[i] = Material.PurpleStainedGlassPane; - materials[10175] = Material.PurpleTerracotta; - for (int i = 11944; i <= 11947; i++) - materials[i] = Material.PurpleWallBanner; - materials[2103] = Material.PurpleWool; - materials[13433] = Material.PurpurBlock; - for (int i = 13434; i <= 13436; i++) - materials[i] = Material.PurpurPillar; - for (int i = 12195; i <= 12200; i++) - materials[i] = Material.PurpurSlab; - for (int i = 13437; i <= 13516; i++) - materials[i] = Material.PurpurStairs; - materials[10044] = Material.QuartzBlock; - materials[21752] = Material.QuartzBricks; - for (int i = 10046; i <= 10048; i++) - materials[i] = Material.QuartzPillar; - for (int i = 12177; i <= 12182; i++) - materials[i] = Material.QuartzSlab; - for (int i = 10049; i <= 10128; i++) - materials[i] = Material.QuartzStairs; - for (int i = 4758; i <= 4777; i++) - materials[i] = Material.Rail; - materials[27619] = Material.RawCopperBlock; - materials[27620] = Material.RawGoldBlock; - materials[27618] = Material.RawIronBlock; - for (int i = 11872; i <= 11887; i++) - materials[i] = Material.RedBanner; - for (int i = 1955; i <= 1970; i++) - materials[i] = Material.RedBed; - for (int i = 21993; i <= 22008; i++) - materials[i] = Material.RedCandle; - for (int i = 22055; i <= 22056; i++) - materials[i] = Material.RedCandleCake; - materials[11631] = Material.RedCarpet; - materials[13765] = Material.RedConcrete; - materials[13781] = Material.RedConcretePowder; - for (int i = 13743; i <= 13746; i++) - materials[i] = Material.RedGlazedTerracotta; - materials[2136] = Material.RedMushroom; - for (int i = 6856; i <= 6919; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 15165; i <= 15170; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 14865; i <= 14944; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 18099; i <= 18422; i++) - materials[i] = Material.RedNetherBrickWall; - materials[13568] = Material.RedNetherBricks; - materials[123] = Material.RedSand; - materials[11968] = Material.RedSandstone; - for (int i = 12183; i <= 12188; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 11971; i <= 12050; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 15831; i <= 16154; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 13675; i <= 13680; i++) - materials[i] = Material.RedShulkerBox; - materials[6138] = Material.RedStainedGlass; - for (int i = 10629; i <= 10660; i++) - materials[i] = Material.RedStainedGlassPane; - materials[10179] = Material.RedTerracotta; - materials[2127] = Material.RedTulip; - for (int i = 11960; i <= 11963; i++) - materials[i] = Material.RedWallBanner; - materials[2107] = Material.RedWool; - materials[10032] = Material.RedstoneBlock; - for (int i = 8201; i <= 8202; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 5912; i <= 5913; i++) - materials[i] = Material.RedstoneOre; - for (int i = 5916; i <= 5917; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 5918; i <= 5925; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 3042; i <= 4337; i++) - materials[i] = Material.RedstoneWire; - materials[27633] = Material.ReinforcedDeepslate; - for (int i = 6060; i <= 6123; i++) - materials[i] = Material.Repeater; - for (int i = 13538; i <= 13549; i++) - materials[i] = Material.RepeatingCommandBlock; - materials[7643] = Material.ResinBlock; - for (int i = 7725; i <= 7730; i++) - materials[i] = Material.ResinBrickSlab; - for (int i = 7645; i <= 7724; i++) - materials[i] = Material.ResinBrickStairs; - for (int i = 7731; i <= 8054; i++) - materials[i] = Material.ResinBrickWall; - materials[7644] = Material.ResinBricks; - for (int i = 7240; i <= 7367; i++) - materials[i] = Material.ResinClump; - for (int i = 20478; i <= 20482; i++) - materials[i] = Material.RespawnAnchor; - materials[25962] = Material.RootedDirt; - for (int i = 11640; i <= 11641; i++) - materials[i] = Material.RoseBush; - materials[118] = Material.Sand; - materials[578] = Material.Sandstone; - for (int i = 12129; i <= 12134; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 8215; i <= 8294; i++) - materials[i] = Material.SandstoneStairs; - for (int i = 18423; i <= 18746; i++) - materials[i] = Material.SandstoneWall; - for (int i = 19395; i <= 19426; i++) - materials[i] = Material.Scaffolding; - materials[23827] = Material.Sculk; - for (int i = 23956; i <= 23957; i++) - materials[i] = Material.SculkCatalyst; - for (int i = 23347; i <= 23442; i++) - materials[i] = Material.SculkSensor; - for (int i = 23958; i <= 23965; i++) - materials[i] = Material.SculkShrieker; - for (int i = 23828; i <= 23955; i++) - materials[i] = Material.SculkVein; - materials[11613] = Material.SeaLantern; - for (int i = 13956; i <= 13963; i++) - materials[i] = Material.SeaPickle; - materials[2054] = Material.Seagrass; - materials[2052] = Material.ShortDryGrass; - materials[2048] = Material.ShortGrass; - materials[19633] = Material.Shroomlight; - for (int i = 13585; i <= 13590; i++) - materials[i] = Material.ShulkerBox; - for (int i = 9636; i <= 9667; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 9668; i <= 9675; i++) - materials[i] = Material.SkeletonWallSkull; - materials[11253] = Material.SlimeBlock; - for (int i = 22097; i <= 22108; i++) - materials[i] = Material.SmallAmethystBud; - for (int i = 25944; i <= 25959; i++) - materials[i] = Material.SmallDripleaf; - materials[19489] = Material.SmithingTable; - for (int i = 19443; i <= 19450; i++) - materials[i] = Material.Smoker; - materials[27617] = Material.SmoothBasalt; - materials[12203] = Material.SmoothQuartz; - for (int i = 15147; i <= 15152; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 14625; i <= 14704; i++) - materials[i] = Material.SmoothQuartzStairs; - materials[12204] = Material.SmoothRedSandstone; - for (int i = 15111; i <= 15116; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 14065; i <= 14144; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - materials[12202] = Material.SmoothSandstone; - for (int i = 15141; i <= 15146; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 14545; i <= 14624; i++) - materials[i] = Material.SmoothSandstoneStairs; - materials[12201] = Material.SmoothStone; - for (int i = 12123; i <= 12128; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 13823; i <= 13825; i++) - materials[i] = Material.SnifferEgg; - for (int i = 5950; i <= 5957; i++) - materials[i] = Material.Snow; - materials[5959] = Material.SnowBlock; - for (int i = 19566; i <= 19597; i++) - materials[i] = Material.SoulCampfire; - materials[2918] = Material.SoulFire; - for (int i = 19530; i <= 19533; i++) - materials[i] = Material.SoulLantern; - materials[6029] = Material.SoulSand; - materials[6030] = Material.SoulSoil; - materials[6037] = Material.SoulTorch; - for (int i = 6038; i <= 6041; i++) - materials[i] = Material.SoulWallTorch; - materials[2919] = Material.Spawner; - materials[560] = Material.Sponge; - materials[25851] = Material.SporeBlossom; - for (int i = 9420; i <= 9443; i++) - materials[i] = Material.SpruceButton; - for (int i = 12781; i <= 12844; i++) - materials[i] = Material.SpruceDoor; - for (int i = 12493; i <= 12524; i++) - materials[i] = Material.SpruceFence; - for (int i = 12205; i <= 12236; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 5002; i <= 5065; i++) - materials[i] = Material.SpruceHangingSign; - for (int i = 280; i <= 307; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 139; i <= 141; i++) - materials[i] = Material.SpruceLog; - materials[16] = Material.SprucePlanks; - for (int i = 5894; i <= 5895; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 31; i <= 32; i++) - materials[i] = Material.SpruceSapling; - for (int i = 4398; i <= 4429; i++) - materials[i] = Material.SpruceSign; - for (int i = 12057; i <= 12062; i++) - materials[i] = Material.SpruceSlab; - for (int i = 8450; i <= 8529; i++) - materials[i] = Material.SpruceStairs; - for (int i = 6204; i <= 6267; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 5714; i <= 5721; i++) - materials[i] = Material.SpruceWallHangingSign; - for (int i = 4866; i <= 4873; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 204; i <= 206; i++) - materials[i] = Material.SpruceWood; - for (int i = 2035; i <= 2046; i++) - materials[i] = Material.StickyPiston; - materials[1] = Material.Stone; - for (int i = 12159; i <= 12164; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 7480; i <= 7559; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 16803; i <= 17126; i++) - materials[i] = Material.StoneBrickWall; - materials[6780] = Material.StoneBricks; - for (int i = 5926; i <= 5949; i++) - materials[i] = Material.StoneButton; - for (int i = 5826; i <= 5827; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 12117; i <= 12122; i++) - materials[i] = Material.StoneSlab; - for (int i = 14465; i <= 14544; i++) - materials[i] = Material.StoneStairs; - for (int i = 19490; i <= 19493; i++) - materials[i] = Material.Stonecutter; - for (int i = 180; i <= 182; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 237; i <= 239; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 198; i <= 200; i++) - materials[i] = Material.StrippedBambooBlock; - for (int i = 174; i <= 176; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 231; i <= 233; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 183; i <= 185; i++) - materials[i] = Material.StrippedCherryLog; - for (int i = 240; i <= 242; i++) - materials[i] = Material.StrippedCherryWood; - for (int i = 19628; i <= 19630; i++) - materials[i] = Material.StrippedCrimsonHyphae; - for (int i = 19622; i <= 19624; i++) - materials[i] = Material.StrippedCrimsonStem; - for (int i = 186; i <= 188; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 243; i <= 245; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 177; i <= 179; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 234; i <= 236; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 195; i <= 197; i++) - materials[i] = Material.StrippedMangroveLog; - for (int i = 249; i <= 251; i++) - materials[i] = Material.StrippedMangroveWood; - for (int i = 192; i <= 194; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 225; i <= 227; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 189; i <= 191; i++) - materials[i] = Material.StrippedPaleOakLog; - for (int i = 246; i <= 248; i++) - materials[i] = Material.StrippedPaleOakWood; - for (int i = 171; i <= 173; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 228; i <= 230; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 19611; i <= 19613; i++) - materials[i] = Material.StrippedWarpedHyphae; - for (int i = 19605; i <= 19607; i++) - materials[i] = Material.StrippedWarpedStem; - for (int i = 20379; i <= 20382; i++) - materials[i] = Material.StructureBlock; - materials[13572] = Material.StructureVoid; - for (int i = 5978; i <= 5993; i++) - materials[i] = Material.SugarCane; - for (int i = 11636; i <= 11637; i++) - materials[i] = Material.Sunflower; - for (int i = 125; i <= 128; i++) - materials[i] = Material.SuspiciousGravel; - for (int i = 119; i <= 122; i++) - materials[i] = Material.SuspiciousSand; - for (int i = 19598; i <= 19601; i++) - materials[i] = Material.SweetBerryBush; - materials[2053] = Material.TallDryGrass; - for (int i = 11644; i <= 11645; i++) - materials[i] = Material.TallGrass; - for (int i = 2055; i <= 2056; i++) - materials[i] = Material.TallSeagrass; - for (int i = 20409; i <= 20424; i++) - materials[i] = Material.Target; - materials[11633] = Material.Terracotta; - for (int i = 20395; i <= 20398; i++) - materials[i] = Material.TestBlock; - materials[20399] = Material.TestInstanceBlock; - materials[23345] = Material.TintedGlass; - for (int i = 2140; i <= 2141; i++) - materials[i] = Material.Tnt; - materials[2401] = Material.Torch; - materials[2122] = Material.Torchflower; - for (int i = 13518; i <= 13519; i++) - materials[i] = Material.TorchflowerCrop; - for (int i = 9928; i <= 9951; i++) - materials[i] = Material.TrappedChest; - for (int i = 27698; i <= 27709; i++) - materials[i] = Material.TrialSpawner; - for (int i = 8321; i <= 8448; i++) - materials[i] = Material.Tripwire; - for (int i = 8305; i <= 8320; i++) - materials[i] = Material.TripwireHook; - for (int i = 13846; i <= 13847; i++) - materials[i] = Material.TubeCoral; - materials[13831] = Material.TubeCoralBlock; - for (int i = 13866; i <= 13867; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 13916; i <= 13923; i++) - materials[i] = Material.TubeCoralWallFan; - materials[22109] = Material.Tuff; - for (int i = 22933; i <= 22938; i++) - materials[i] = Material.TuffBrickSlab; - for (int i = 22939; i <= 23018; i++) - materials[i] = Material.TuffBrickStairs; - for (int i = 23019; i <= 23342; i++) - materials[i] = Material.TuffBrickWall; - materials[22932] = Material.TuffBricks; - for (int i = 22110; i <= 22115; i++) - materials[i] = Material.TuffSlab; - for (int i = 22116; i <= 22195; i++) - materials[i] = Material.TuffStairs; - for (int i = 22196; i <= 22519; i++) - materials[i] = Material.TuffWall; - for (int i = 13811; i <= 13822; i++) - materials[i] = Material.TurtleEgg; - for (int i = 19661; i <= 19686; i++) - materials[i] = Material.TwistingVines; - materials[19687] = Material.TwistingVinesPlant; - for (int i = 27710; i <= 27741; i++) - materials[i] = Material.Vault; - for (int i = 27626; i <= 27628; i++) - materials[i] = Material.VerdantFroglight; - for (int i = 7080; i <= 7111; i++) - materials[i] = Material.Vine; - materials[13981] = Material.VoidAir; - for (int i = 2402; i <= 2405; i++) - materials[i] = Material.WallTorch; - for (int i = 20147; i <= 20170; i++) - materials[i] = Material.WarpedButton; - for (int i = 20235; i <= 20298; i++) - materials[i] = Material.WarpedDoor; - for (int i = 19739; i <= 19770; i++) - materials[i] = Material.WarpedFence; - for (int i = 19931; i <= 19962; i++) - materials[i] = Material.WarpedFenceGate; - materials[19615] = Material.WarpedFungus; - for (int i = 5514; i <= 5577; i++) - materials[i] = Material.WarpedHangingSign; - for (int i = 19608; i <= 19610; i++) - materials[i] = Material.WarpedHyphae; - materials[19614] = Material.WarpedNylium; - materials[19690] = Material.WarpedPlanks; - for (int i = 19705; i <= 19706; i++) - materials[i] = Material.WarpedPressurePlate; - materials[19617] = Material.WarpedRoots; - for (int i = 20331; i <= 20362; i++) - materials[i] = Material.WarpedSign; - for (int i = 19697; i <= 19702; i++) - materials[i] = Material.WarpedSlab; - for (int i = 20043; i <= 20122; i++) - materials[i] = Material.WarpedStairs; - for (int i = 19602; i <= 19604; i++) - materials[i] = Material.WarpedStem; - for (int i = 19835; i <= 19898; i++) - materials[i] = Material.WarpedTrapdoor; - for (int i = 5786; i <= 5793; i++) - materials[i] = Material.WarpedWallHangingSign; - for (int i = 20371; i <= 20378; i++) - materials[i] = Material.WarpedWallSign; - materials[19616] = Material.WarpedWartBlock; - for (int i = 86; i <= 101; i++) - materials[i] = Material.Water; - for (int i = 8183; i <= 8185; i++) - materials[i] = Material.WaterCauldron; - materials[23983] = Material.WaxedChiseledCopper; - materials[24328] = Material.WaxedCopperBlock; - for (int i = 25736; i <= 25739; i++) - materials[i] = Material.WaxedCopperBulb; - for (int i = 24936; i <= 24999; i++) - materials[i] = Material.WaxedCopperDoor; - for (int i = 25712; i <= 25713; i++) - materials[i] = Material.WaxedCopperGrate; - for (int i = 25448; i <= 25511; i++) - materials[i] = Material.WaxedCopperTrapdoor; - materials[24335] = Material.WaxedCutCopper; - for (int i = 24674; i <= 24679; i++) - materials[i] = Material.WaxedCutCopperSlab; - for (int i = 24576; i <= 24655; i++) - materials[i] = Material.WaxedCutCopperStairs; - materials[23982] = Material.WaxedExposedChiseledCopper; - materials[24330] = Material.WaxedExposedCopper; - for (int i = 25740; i <= 25743; i++) - materials[i] = Material.WaxedExposedCopperBulb; - for (int i = 25000; i <= 25063; i++) - materials[i] = Material.WaxedExposedCopperDoor; - for (int i = 25714; i <= 25715; i++) - materials[i] = Material.WaxedExposedCopperGrate; - for (int i = 25512; i <= 25575; i++) - materials[i] = Material.WaxedExposedCopperTrapdoor; - materials[24334] = Material.WaxedExposedCutCopper; - for (int i = 24668; i <= 24673; i++) - materials[i] = Material.WaxedExposedCutCopperSlab; - for (int i = 24496; i <= 24575; i++) - materials[i] = Material.WaxedExposedCutCopperStairs; - materials[23980] = Material.WaxedOxidizedChiseledCopper; - materials[24331] = Material.WaxedOxidizedCopper; - for (int i = 25748; i <= 25751; i++) - materials[i] = Material.WaxedOxidizedCopperBulb; - for (int i = 25064; i <= 25127; i++) - materials[i] = Material.WaxedOxidizedCopperDoor; - for (int i = 25718; i <= 25719; i++) - materials[i] = Material.WaxedOxidizedCopperGrate; - for (int i = 25576; i <= 25639; i++) - materials[i] = Material.WaxedOxidizedCopperTrapdoor; - materials[24332] = Material.WaxedOxidizedCutCopper; - for (int i = 24656; i <= 24661; i++) - materials[i] = Material.WaxedOxidizedCutCopperSlab; - for (int i = 24336; i <= 24415; i++) - materials[i] = Material.WaxedOxidizedCutCopperStairs; - materials[23981] = Material.WaxedWeatheredChiseledCopper; - materials[24329] = Material.WaxedWeatheredCopper; - for (int i = 25744; i <= 25747; i++) - materials[i] = Material.WaxedWeatheredCopperBulb; - for (int i = 25128; i <= 25191; i++) - materials[i] = Material.WaxedWeatheredCopperDoor; - for (int i = 25716; i <= 25717; i++) - materials[i] = Material.WaxedWeatheredCopperGrate; - for (int i = 25640; i <= 25703; i++) - materials[i] = Material.WaxedWeatheredCopperTrapdoor; - materials[24333] = Material.WaxedWeatheredCutCopper; - for (int i = 24662; i <= 24667; i++) - materials[i] = Material.WaxedWeatheredCutCopperSlab; - for (int i = 24416; i <= 24495; i++) - materials[i] = Material.WaxedWeatheredCutCopperStairs; - materials[23977] = Material.WeatheredChiseledCopper; - materials[23968] = Material.WeatheredCopper; - for (int i = 25728; i <= 25731; i++) - materials[i] = Material.WeatheredCopperBulb; - for (int i = 24872; i <= 24935; i++) - materials[i] = Material.WeatheredCopperDoor; - for (int i = 25708; i <= 25709; i++) - materials[i] = Material.WeatheredCopperGrate; - for (int i = 25384; i <= 25447; i++) - materials[i] = Material.WeatheredCopperTrapdoor; - materials[23973] = Material.WeatheredCutCopper; - for (int i = 24310; i <= 24315; i++) - materials[i] = Material.WeatheredCutCopperSlab; - for (int i = 24064; i <= 24143; i++) - materials[i] = Material.WeatheredCutCopperStairs; - for (int i = 19634; i <= 19659; i++) - materials[i] = Material.WeepingVines; - materials[19660] = Material.WeepingVinesPlant; - materials[561] = Material.WetSponge; - for (int i = 4342; i <= 4349; i++) - materials[i] = Material.Wheat; - for (int i = 11648; i <= 11663; i++) - materials[i] = Material.WhiteBanner; - for (int i = 1731; i <= 1746; i++) - materials[i] = Material.WhiteBed; - for (int i = 21769; i <= 21784; i++) - materials[i] = Material.WhiteCandle; - for (int i = 22027; i <= 22028; i++) - materials[i] = Material.WhiteCandleCake; - materials[11617] = Material.WhiteCarpet; - materials[13751] = Material.WhiteConcrete; - materials[13767] = Material.WhiteConcretePowder; - for (int i = 13687; i <= 13690; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 13591; i <= 13596; i++) - materials[i] = Material.WhiteShulkerBox; - materials[6124] = Material.WhiteStainedGlass; - for (int i = 10181; i <= 10212; i++) - materials[i] = Material.WhiteStainedGlassPane; - materials[10165] = Material.WhiteTerracotta; - materials[2129] = Material.WhiteTulip; - for (int i = 11904; i <= 11907; i++) - materials[i] = Material.WhiteWallBanner; - materials[2093] = Material.WhiteWool; - for (int i = 25871; i <= 25886; i++) - materials[i] = Material.Wildflowers; - materials[2133] = Material.WitherRose; - for (int i = 9676; i <= 9707; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 9708; i <= 9715; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 11712; i <= 11727; i++) - materials[i] = Material.YellowBanner; - for (int i = 1795; i <= 1810; i++) - materials[i] = Material.YellowBed; - for (int i = 21833; i <= 21848; i++) - materials[i] = Material.YellowCandle; - for (int i = 22035; i <= 22036; i++) - materials[i] = Material.YellowCandleCake; - materials[11621] = Material.YellowCarpet; - materials[13755] = Material.YellowConcrete; - materials[13771] = Material.YellowConcretePowder; - for (int i = 13703; i <= 13706; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 13615; i <= 13620; i++) - materials[i] = Material.YellowShulkerBox; - materials[6128] = Material.YellowStainedGlass; - for (int i = 10309; i <= 10340; i++) - materials[i] = Material.YellowStainedGlassPane; - materials[10169] = Material.YellowTerracotta; - for (int i = 11920; i <= 11923; i++) - materials[i] = Material.YellowWallBanner; - materials[2097] = Material.YellowWool; - for (int i = 9716; i <= 9747; i++) - materials[i] = Material.ZombieHead; - for (int i = 9748; i <= 9755; i++) - materials[i] = Material.ZombieWallHead; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(22, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(29, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(31, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(33, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(35, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(37, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(39, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(41, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(43, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(45, 40, - [ - new("age", ["0", "1", "2", "3", "4"], 8), - new("hanging", ["true", "false"], 4), - new("stage", ["0", "1"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(86, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(102, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(119, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(125, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(136, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(139, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(142, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(145, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(148, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(151, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(154, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(157, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(160, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(163, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(165, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(168, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(171, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(174, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(177, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(180, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(183, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(186, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(189, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(192, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(195, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(198, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(201, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(204, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(207, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(210, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(213, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(216, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(219, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(222, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(225, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(228, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(231, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(234, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(237, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(240, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(243, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(246, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(249, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(252, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(280, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(308, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(336, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(364, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(392, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(420, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(448, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(476, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(504, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(532, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(566, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(581, 1150, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling", "zombie", "skeleton", "creeper", "dragon", "wither_skeleton", "piglin", "custom_head"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1731, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1747, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1763, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1779, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1795, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1811, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1827, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1843, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1859, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1875, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1891, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1907, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1923, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1939, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1955, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1971, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1987, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2011, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2035, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2055, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(2057, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2069, 24, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2) - ]), - new(2109, 12, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 2) - ]), - new(2140, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(2143, 256, - [ - new("facing", ["north", "south", "west", "east"], 64), - new("slot_0_occupied", ["true", "false"], 32), - new("slot_1_occupied", ["true", "false"], 16), - new("slot_2_occupied", ["true", "false"], 8), - new("slot_3_occupied", ["true", "false"], 4), - new("slot_4_occupied", ["true", "false"], 2), - new("slot_5_occupied", ["true", "false"], 1) - ]), - new(2402, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(2406, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(2920, 18, - [ - new("axis", ["x", "y", "z"], 6), - new("creaking_heart_state", ["uprooted", "dormant", "awake"], 2), - new("natural", ["true", "false"], 1) - ]), - new(2938, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3018, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(3042, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(4342, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4350, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4358, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(4366, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4398, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4430, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4462, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4494, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4526, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4558, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4590, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4622, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4654, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4686, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4750, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4758, 20, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4778, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4858, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4866, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4874, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4882, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4890, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4898, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4906, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4914, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4922, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4930, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4938, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5002, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5066, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5130, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5194, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5258, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5322, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5386, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5450, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5514, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5578, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5642, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5706, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5714, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5722, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5730, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5738, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5746, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5754, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5762, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5770, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5778, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5786, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5794, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5802, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5826, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5828, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5892, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5894, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5896, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5898, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5900, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5902, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5904, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5906, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5908, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5910, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5912, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5914, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5916, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5918, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(5926, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5950, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(5960, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5978, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5994, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(5996, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6031, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(6034, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(6038, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6043, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(6045, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6049, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6053, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(6060, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6140, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6204, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6268, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6332, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6396, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6460, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6524, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6588, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6652, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6716, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6792, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6856, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6920, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6984, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7016, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7022, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7056, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7060, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7064, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(7072, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(7080, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7112, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7240, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7368, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7400, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7480, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7560, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7640, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(7645, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7725, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7731, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(8057, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8089, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8169, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(8174, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(8183, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(8187, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(8191, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8201, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(8203, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8215, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8297, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8305, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8321, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8450, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8530, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8610, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8690, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8703, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(9027, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(9380, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(9388, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(9396, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9420, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9444, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9468, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9492, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9516, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9540, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9564, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9588, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9612, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9636, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9668, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9676, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9708, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9716, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9748, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9756, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9788, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9796, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9828, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9836, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9868, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9876, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9908, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9916, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9920, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9924, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9928, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(9952, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9968, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9984, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10000, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10034, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(10046, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(10049, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10129, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10153, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(10181, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10213, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10245, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10277, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10309, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10341, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10373, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10405, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10437, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10469, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10501, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10533, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10565, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10597, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10629, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10661, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10693, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10773, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10853, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10933, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11013, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11093, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11173, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11254, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(11256, 32, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11288, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11355, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11435, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11515, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11595, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11601, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11607, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11614, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(11636, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11638, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11640, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11642, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11644, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11646, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11648, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11664, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11680, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11696, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11712, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11728, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11744, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11760, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11776, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11792, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11808, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11824, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11840, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11856, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11872, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11888, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11904, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11908, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11912, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11916, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11920, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11924, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11928, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11932, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11936, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11940, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11944, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11948, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11952, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11956, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11960, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11964, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11971, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12051, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12057, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12063, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12069, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12075, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12081, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12087, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12093, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12099, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12105, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12111, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12117, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12123, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12129, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12135, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12141, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12147, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12153, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12159, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12165, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12171, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12177, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12183, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12189, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12195, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12205, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12237, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12269, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12301, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12333, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12365, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12397, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12429, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12461, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12493, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12525, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12557, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12589, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12621, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12653, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12685, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12717, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12749, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12781, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12845, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12909, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12973, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13037, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13101, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13165, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13229, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13293, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13357, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13363, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13427, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(13434, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(13437, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13518, 2, - [ - new("age", ["0", "1"], 1) - ]), - new(13520, 10, - [ - new("age", ["0", "1", "2", "3", "4"], 2), - new("half", ["upper", "lower"], 1) - ]), - new(13530, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(13532, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(13538, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13550, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13562, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(13569, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(13573, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13585, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13591, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13597, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13603, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13609, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13615, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13621, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13627, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13633, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13639, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13645, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13651, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13657, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13663, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13669, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13675, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13681, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13687, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13691, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13695, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13699, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13703, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13707, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13711, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13715, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13719, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13723, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13727, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13731, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13735, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13739, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13743, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13747, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13783, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(13811, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(13823, 3, - [ - new("hatch", ["0", "1", "2"], 1) - ]), - new(13836, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13838, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13840, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13842, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13844, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13846, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13848, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13850, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13852, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13854, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13856, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13858, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13860, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13862, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13864, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13866, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13868, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13870, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13872, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13874, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13876, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13884, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13892, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13900, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13908, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13916, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13924, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13932, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13940, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13948, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13956, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13965, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13968, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(13983, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(13985, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14065, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14145, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14225, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14305, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14385, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14465, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14545, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14625, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14705, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14785, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14865, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14945, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15025, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15105, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15111, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15117, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15123, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15129, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15135, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15141, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15147, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15153, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15159, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15165, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15171, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15177, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15183, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15507, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15831, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16155, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16479, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16803, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17127, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17451, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17775, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18099, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18423, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18747, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19071, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19395, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19427, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(19431, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(19443, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(19451, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(19461, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(19473, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19490, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(19494, 32, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19526, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19530, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19534, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19566, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19598, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(19602, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19605, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19608, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19611, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19619, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19622, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19625, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19628, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19634, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(19661, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(19691, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19697, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19703, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(19705, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(19707, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(19739, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(19771, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19835, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19899, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19931, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19963, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20043, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20123, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20147, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20171, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20235, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20299, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20331, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20363, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20371, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20379, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(20383, 12, - [ - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 1) - ]), - new(20395, 4, - [ - new("mode", ["start", "log", "fail", "accept"], 1) - ]), - new(20400, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(20409, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(20425, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(20449, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(20478, 5, - [ - new("charges", ["0", "1", "2", "3", "4"], 1) - ]), - new(20489, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20569, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20893, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20903, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20909, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20989, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(21314, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21394, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21400, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(21402, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21426, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(21753, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21769, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21785, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21801, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21817, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21833, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21849, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21865, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21881, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21897, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21913, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21929, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21945, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21961, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21977, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21993, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22009, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22025, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22027, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22029, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22031, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22033, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22035, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22037, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22039, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22041, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22043, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22045, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22047, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22049, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22051, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22053, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22055, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22057, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22061, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22073, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22085, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22097, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22110, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22116, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22196, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22521, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22527, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22607, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22933, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22939, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23019, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(23347, 96, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23443, 384, - [ - new("facing", ["north", "south", "west", "east"], 96), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23828, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(23956, 2, - [ - new("bloom", ["true", "false"], 1) - ]), - new(23958, 8, - [ - new("can_summon", ["true", "false"], 4), - new("shrieking", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23984, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24064, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24144, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24224, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24304, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24310, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24316, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24322, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24336, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24416, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24496, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24576, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24656, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24662, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24668, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24674, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24680, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24744, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24808, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24872, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24936, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25000, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25064, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25128, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25192, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25256, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25320, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25384, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25448, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25512, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25576, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25640, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25704, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25706, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25708, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25710, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25712, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25714, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25716, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25718, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25720, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25724, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25728, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25732, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25736, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25740, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25744, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25748, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25752, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25776, 20, - [ - new("thickness", ["tip_merge", "tip", "frustum", "middle", "base"], 4), - new("vertical_direction", ["up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25797, 52, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 2), - new("berries", ["true", "false"], 1) - ]), - new(25849, 2, - [ - new("berries", ["true", "false"], 1) - ]), - new(25855, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("flower_amount", ["1", "2", "3", "4"], 1) - ]), - new(25871, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("flower_amount", ["1", "2", "3", "4"], 1) - ]), - new(25887, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("segment_amount", ["1", "2", "3", "4"], 1) - ]), - new(25904, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("tilt", ["none", "unstable", "partial", "full"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25936, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25944, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("half", ["upper", "lower"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25960, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25964, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(25968, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26048, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26054, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(26379, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26459, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26465, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(26790, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26870, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26876, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(27201, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27281, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27287, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(27614, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27623, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27626, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27629, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27634, 16, - [ - new("cracked", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27650, 48, - [ - new("crafting", ["true", "false"], 24), - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(27698, 12, - [ - new("ominous", ["true", "false"], 6), - new("trial_spawner_state", ["inactive", "waiting_for_players", "active", "waiting_for_reward_ejection", "ejecting_reward", "cooldown"], 1) - ]), - new(27710, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("ominous", ["true", "false"], 4), - new("vault_state", ["inactive", "active", "unlocking", "ejecting"], 1) - ]), - new(27742, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(27745, 162, - [ - new("bottom", ["true", "false"], 81), - new("east", ["none", "low", "tall"], 27), - new("north", ["none", "low", "tall"], 9), - new("south", ["none", "low", "tall"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(27907, 2, - [ - new("tip", ["true", "false"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette1216.cs b/MinecraftClient/Mapping/BlockPalettes/Palette1216.cs deleted file mode 100644 index 9b3005772e..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette1216.cs +++ /dev/null @@ -1,5796 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - public class Palette1216 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette1216() - { - for (int i = 9492; i <= 9515; i++) - materials[i] = Material.AcaciaButton; - for (int i = 12973; i <= 13036; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 12589; i <= 12620; i++) - materials[i] = Material.AcaciaFence; - for (int i = 12301; i <= 12332; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 5130; i <= 5193; i++) - materials[i] = Material.AcaciaHangingSign; - for (int i = 364; i <= 391; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 148; i <= 150; i++) - materials[i] = Material.AcaciaLog; - materials[19] = Material.AcaciaPlanks; - for (int i = 5900; i <= 5901; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 37; i <= 38; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 4462; i <= 4493; i++) - materials[i] = Material.AcaciaSign; - for (int i = 12075; i <= 12080; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 10693; i <= 10772; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 6396; i <= 6459; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 5730; i <= 5737; i++) - materials[i] = Material.AcaciaWallHangingSign; - for (int i = 4882; i <= 4889; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 213; i <= 215; i++) - materials[i] = Material.AcaciaWood; - for (int i = 10129; i <= 10152; i++) - materials[i] = Material.ActivatorRail; - materials[0] = Material.Air; - materials[2125] = Material.Allium; - materials[22091] = Material.AmethystBlock; - for (int i = 22093; i <= 22104; i++) - materials[i] = Material.AmethystCluster; - materials[20508] = Material.AncientDebris; - materials[6] = Material.Andesite; - for (int i = 15191; i <= 15196; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 14817; i <= 14896; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 17807; i <= 18130; i++) - materials[i] = Material.AndesiteWall; - for (int i = 9916; i <= 9919; i++) - materials[i] = Material.Anvil; - for (int i = 7060; i <= 7063; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 7056; i <= 7059; i++) - materials[i] = Material.AttachedPumpkinStem; - materials[25884] = Material.Azalea; - for (int i = 504; i <= 531; i++) - materials[i] = Material.AzaleaLeaves; - materials[2126] = Material.AzureBluet; - for (int i = 14000; i <= 14011; i++) - materials[i] = Material.Bamboo; - for (int i = 168; i <= 170; i++) - materials[i] = Material.BambooBlock; - for (int i = 9612; i <= 9635; i++) - materials[i] = Material.BambooButton; - for (int i = 13293; i <= 13356; i++) - materials[i] = Material.BambooDoor; - for (int i = 12749; i <= 12780; i++) - materials[i] = Material.BambooFence; - for (int i = 12461; i <= 12492; i++) - materials[i] = Material.BambooFenceGate; - for (int i = 5642; i <= 5705; i++) - materials[i] = Material.BambooHangingSign; - materials[28] = Material.BambooMosaic; - for (int i = 12111; i <= 12116; i++) - materials[i] = Material.BambooMosaicSlab; - for (int i = 11173; i <= 11252; i++) - materials[i] = Material.BambooMosaicStairs; - materials[27] = Material.BambooPlanks; - for (int i = 5910; i <= 5911; i++) - materials[i] = Material.BambooPressurePlate; - materials[13999] = Material.BambooSapling; - for (int i = 4654; i <= 4685; i++) - materials[i] = Material.BambooSign; - for (int i = 12105; i <= 12110; i++) - materials[i] = Material.BambooSlab; - for (int i = 11093; i <= 11172; i++) - materials[i] = Material.BambooStairs; - for (int i = 6716; i <= 6779; i++) - materials[i] = Material.BambooTrapdoor; - for (int i = 5794; i <= 5801; i++) - materials[i] = Material.BambooWallHangingSign; - for (int i = 4930; i <= 4937; i++) - materials[i] = Material.BambooWallSign; - for (int i = 19463; i <= 19474; i++) - materials[i] = Material.Barrel; - for (int i = 11254; i <= 11255; i++) - materials[i] = Material.Barrier; - for (int i = 6031; i <= 6033; i++) - materials[i] = Material.Basalt; - materials[8702] = Material.Beacon; - materials[85] = Material.Bedrock; - for (int i = 20457; i <= 20480; i++) - materials[i] = Material.BeeNest; - for (int i = 20481; i <= 20504; i++) - materials[i] = Material.Beehive; - for (int i = 13532; i <= 13535; i++) - materials[i] = Material.Beetroots; - for (int i = 19526; i <= 19557; i++) - materials[i] = Material.Bell; - for (int i = 25936; i <= 25967; i++) - materials[i] = Material.BigDripleaf; - for (int i = 25968; i <= 25975; i++) - materials[i] = Material.BigDripleafStem; - for (int i = 9444; i <= 9467; i++) - materials[i] = Material.BirchButton; - for (int i = 12845; i <= 12908; i++) - materials[i] = Material.BirchDoor; - for (int i = 12525; i <= 12556; i++) - materials[i] = Material.BirchFence; - for (int i = 12237; i <= 12268; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 5066; i <= 5129; i++) - materials[i] = Material.BirchHangingSign; - for (int i = 308; i <= 335; i++) - materials[i] = Material.BirchLeaves; - for (int i = 142; i <= 144; i++) - materials[i] = Material.BirchLog; - materials[17] = Material.BirchPlanks; - for (int i = 5896; i <= 5897; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 33; i <= 34; i++) - materials[i] = Material.BirchSapling; - for (int i = 4430; i <= 4461; i++) - materials[i] = Material.BirchSign; - for (int i = 12063; i <= 12068; i++) - materials[i] = Material.BirchSlab; - for (int i = 8530; i <= 8609; i++) - materials[i] = Material.BirchStairs; - for (int i = 6268; i <= 6331; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 5722; i <= 5729; i++) - materials[i] = Material.BirchWallHangingSign; - for (int i = 4874; i <= 4881; i++) - materials[i] = Material.BirchWallSign; - for (int i = 207; i <= 209; i++) - materials[i] = Material.BirchWood; - for (int i = 11888; i <= 11903; i++) - materials[i] = Material.BlackBanner; - for (int i = 1971; i <= 1986; i++) - materials[i] = Material.BlackBed; - for (int i = 22041; i <= 22056; i++) - materials[i] = Material.BlackCandle; - for (int i = 22089; i <= 22090; i++) - materials[i] = Material.BlackCandleCake; - materials[11632] = Material.BlackCarpet; - materials[13766] = Material.BlackConcrete; - materials[13782] = Material.BlackConcretePowder; - for (int i = 13747; i <= 13750; i++) - materials[i] = Material.BlackGlazedTerracotta; - for (int i = 13681; i <= 13686; i++) - materials[i] = Material.BlackShulkerBox; - materials[6139] = Material.BlackStainedGlass; - for (int i = 10661; i <= 10692; i++) - materials[i] = Material.BlackStainedGlassPane; - materials[10180] = Material.BlackTerracotta; - for (int i = 11964; i <= 11967; i++) - materials[i] = Material.BlackWallBanner; - materials[2108] = Material.BlackWool; - materials[20520] = Material.Blackstone; - for (int i = 20925; i <= 20930; i++) - materials[i] = Material.BlackstoneSlab; - for (int i = 20521; i <= 20600; i++) - materials[i] = Material.BlackstoneStairs; - for (int i = 20601; i <= 20924; i++) - materials[i] = Material.BlackstoneWall; - for (int i = 19483; i <= 19490; i++) - materials[i] = Material.BlastFurnace; - for (int i = 11824; i <= 11839; i++) - materials[i] = Material.BlueBanner; - for (int i = 1907; i <= 1922; i++) - materials[i] = Material.BlueBed; - for (int i = 21977; i <= 21992; i++) - materials[i] = Material.BlueCandle; - for (int i = 22081; i <= 22082; i++) - materials[i] = Material.BlueCandleCake; - materials[11628] = Material.BlueCarpet; - materials[13762] = Material.BlueConcrete; - materials[13778] = Material.BlueConcretePowder; - for (int i = 13731; i <= 13734; i++) - materials[i] = Material.BlueGlazedTerracotta; - materials[13996] = Material.BlueIce; - materials[2124] = Material.BlueOrchid; - for (int i = 13657; i <= 13662; i++) - materials[i] = Material.BlueShulkerBox; - materials[6135] = Material.BlueStainedGlass; - for (int i = 10533; i <= 10564; i++) - materials[i] = Material.BlueStainedGlassPane; - materials[10176] = Material.BlueTerracotta; - for (int i = 11948; i <= 11951; i++) - materials[i] = Material.BlueWallBanner; - materials[2104] = Material.BlueWool; - for (int i = 13569; i <= 13571; i++) - materials[i] = Material.BoneBlock; - materials[2142] = Material.Bookshelf; - for (int i = 13880; i <= 13881; i++) - materials[i] = Material.BrainCoral; - materials[13864] = Material.BrainCoralBlock; - for (int i = 13900; i <= 13901; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 13956; i <= 13963; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 8174; i <= 8181; i++) - materials[i] = Material.BrewingStand; - for (int i = 12153; i <= 12158; i++) - materials[i] = Material.BrickSlab; - for (int i = 7400; i <= 7479; i++) - materials[i] = Material.BrickStairs; - for (int i = 15215; i <= 15538; i++) - materials[i] = Material.BrickWall; - materials[2139] = Material.Bricks; - for (int i = 11840; i <= 11855; i++) - materials[i] = Material.BrownBanner; - for (int i = 1923; i <= 1938; i++) - materials[i] = Material.BrownBed; - for (int i = 21993; i <= 22008; i++) - materials[i] = Material.BrownCandle; - for (int i = 22083; i <= 22084; i++) - materials[i] = Material.BrownCandleCake; - materials[11629] = Material.BrownCarpet; - materials[13763] = Material.BrownConcrete; - materials[13779] = Material.BrownConcretePowder; - for (int i = 13735; i <= 13738; i++) - materials[i] = Material.BrownGlazedTerracotta; - materials[2135] = Material.BrownMushroom; - for (int i = 6792; i <= 6855; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 13663; i <= 13668; i++) - materials[i] = Material.BrownShulkerBox; - materials[6136] = Material.BrownStainedGlass; - for (int i = 10565; i <= 10596; i++) - materials[i] = Material.BrownStainedGlassPane; - materials[10177] = Material.BrownTerracotta; - for (int i = 11952; i <= 11955; i++) - materials[i] = Material.BrownWallBanner; - materials[2105] = Material.BrownWool; - for (int i = 14015; i <= 14016; i++) - materials[i] = Material.BubbleColumn; - for (int i = 13882; i <= 13883; i++) - materials[i] = Material.BubbleCoral; - materials[13865] = Material.BubbleCoralBlock; - for (int i = 13902; i <= 13903; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 13964; i <= 13971; i++) - materials[i] = Material.BubbleCoralWallFan; - materials[22092] = Material.BuddingAmethyst; - materials[2051] = Material.Bush; - for (int i = 5960; i <= 5975; i++) - materials[i] = Material.Cactus; - materials[5976] = Material.CactusFlower; - for (int i = 6053; i <= 6059; i++) - materials[i] = Material.Cake; - materials[23376] = Material.Calcite; - for (int i = 23475; i <= 23858; i++) - materials[i] = Material.CalibratedSculkSensor; - for (int i = 19566; i <= 19597; i++) - materials[i] = Material.Campfire; - for (int i = 21785; i <= 21800; i++) - materials[i] = Material.Candle; - for (int i = 22057; i <= 22058; i++) - materials[i] = Material.CandleCake; - for (int i = 9380; i <= 9387; i++) - materials[i] = Material.Carrots; - materials[19491] = Material.CartographyTable; - for (int i = 6045; i <= 6048; i++) - materials[i] = Material.CarvedPumpkin; - materials[8182] = Material.Cauldron; - materials[14014] = Material.CaveAir; - for (int i = 25829; i <= 25880; i++) - materials[i] = Material.CaveVines; - for (int i = 25881; i <= 25882; i++) - materials[i] = Material.CaveVinesPlant; - for (int i = 7016; i <= 7021; i++) - materials[i] = Material.Chain; - for (int i = 13550; i <= 13561; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 9516; i <= 9539; i++) - materials[i] = Material.CherryButton; - for (int i = 13037; i <= 13100; i++) - materials[i] = Material.CherryDoor; - for (int i = 12621; i <= 12652; i++) - materials[i] = Material.CherryFence; - for (int i = 12333; i <= 12364; i++) - materials[i] = Material.CherryFenceGate; - for (int i = 5194; i <= 5257; i++) - materials[i] = Material.CherryHangingSign; - for (int i = 392; i <= 419; i++) - materials[i] = Material.CherryLeaves; - for (int i = 151; i <= 153; i++) - materials[i] = Material.CherryLog; - materials[20] = Material.CherryPlanks; - for (int i = 5902; i <= 5903; i++) - materials[i] = Material.CherryPressurePlate; - for (int i = 39; i <= 40; i++) - materials[i] = Material.CherrySapling; - for (int i = 4494; i <= 4525; i++) - materials[i] = Material.CherrySign; - for (int i = 12081; i <= 12086; i++) - materials[i] = Material.CherrySlab; - for (int i = 10773; i <= 10852; i++) - materials[i] = Material.CherryStairs; - for (int i = 6460; i <= 6523; i++) - materials[i] = Material.CherryTrapdoor; - for (int i = 5738; i <= 5745; i++) - materials[i] = Material.CherryWallHangingSign; - for (int i = 4890; i <= 4897; i++) - materials[i] = Material.CherryWallSign; - for (int i = 216; i <= 218; i++) - materials[i] = Material.CherryWood; - for (int i = 3018; i <= 3041; i++) - materials[i] = Material.Chest; - for (int i = 9920; i <= 9923; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 2143; i <= 2398; i++) - materials[i] = Material.ChiseledBookshelf; - materials[24011] = Material.ChiseledCopper; - materials[27643] = Material.ChiseledDeepslate; - materials[21782] = Material.ChiseledNetherBricks; - materials[20934] = Material.ChiseledPolishedBlackstone; - materials[10045] = Material.ChiseledQuartzBlock; - materials[11969] = Material.ChiseledRedSandstone; - materials[8055] = Material.ChiseledResinBricks; - materials[579] = Material.ChiseledSandstone; - materials[6783] = Material.ChiseledStoneBricks; - materials[22963] = Material.ChiseledTuff; - materials[23375] = Material.ChiseledTuffBricks; - for (int i = 13427; i <= 13432; i++) - materials[i] = Material.ChorusFlower; - for (int i = 13363; i <= 13426; i++) - materials[i] = Material.ChorusPlant; - materials[5977] = Material.Clay; - materials[27942] = Material.ClosedEyeblossom; - materials[11634] = Material.CoalBlock; - materials[133] = Material.CoalOre; - materials[11] = Material.CoarseDirt; - materials[25999] = Material.CobbledDeepslate; - for (int i = 26080; i <= 26085; i++) - materials[i] = Material.CobbledDeepslateSlab; - for (int i = 26000; i <= 26079; i++) - materials[i] = Material.CobbledDeepslateStairs; - for (int i = 26086; i <= 26409; i++) - materials[i] = Material.CobbledDeepslateWall; - materials[14] = Material.Cobblestone; - for (int i = 12147; i <= 12152; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 4778; i <= 4857; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 8703; i <= 9026; i++) - materials[i] = Material.CobblestoneWall; - materials[2047] = Material.Cobweb; - for (int i = 8203; i <= 8214; i++) - materials[i] = Material.Cocoa; - for (int i = 8690; i <= 8701; i++) - materials[i] = Material.CommandBlock; - for (int i = 9984; i <= 9999; i++) - materials[i] = Material.Comparator; - for (int i = 20432; i <= 20440; i++) - materials[i] = Material.Composter; - for (int i = 13997; i <= 13998; i++) - materials[i] = Material.Conduit; - materials[23998] = Material.CopperBlock; - for (int i = 25752; i <= 25755; i++) - materials[i] = Material.CopperBulb; - for (int i = 24712; i <= 24775; i++) - materials[i] = Material.CopperDoor; - for (int i = 25736; i <= 25737; i++) - materials[i] = Material.CopperGrate; - materials[24002] = Material.CopperOre; - for (int i = 25224; i <= 25287; i++) - materials[i] = Material.CopperTrapdoor; - materials[2132] = Material.Cornflower; - materials[27644] = Material.CrackedDeepslateBricks; - materials[27645] = Material.CrackedDeepslateTiles; - materials[21783] = Material.CrackedNetherBricks; - materials[20933] = Material.CrackedPolishedBlackstoneBricks; - materials[6782] = Material.CrackedStoneBricks; - for (int i = 27682; i <= 27729; i++) - materials[i] = Material.Crafter; - materials[4341] = Material.CraftingTable; - for (int i = 2920; i <= 2937; i++) - materials[i] = Material.CreakingHeart; - for (int i = 9796; i <= 9827; i++) - materials[i] = Material.CreeperHead; - for (int i = 9828; i <= 9835; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 20155; i <= 20178; i++) - materials[i] = Material.CrimsonButton; - for (int i = 20203; i <= 20266; i++) - materials[i] = Material.CrimsonDoor; - for (int i = 19739; i <= 19770; i++) - materials[i] = Material.CrimsonFence; - for (int i = 19931; i <= 19962; i++) - materials[i] = Material.CrimsonFenceGate; - materials[19664] = Material.CrimsonFungus; - for (int i = 5450; i <= 5513; i++) - materials[i] = Material.CrimsonHangingSign; - for (int i = 19657; i <= 19659; i++) - materials[i] = Material.CrimsonHyphae; - materials[19663] = Material.CrimsonNylium; - materials[19721] = Material.CrimsonPlanks; - for (int i = 19735; i <= 19736; i++) - materials[i] = Material.CrimsonPressurePlate; - materials[19720] = Material.CrimsonRoots; - for (int i = 20331; i <= 20362; i++) - materials[i] = Material.CrimsonSign; - for (int i = 19723; i <= 19728; i++) - materials[i] = Material.CrimsonSlab; - for (int i = 19995; i <= 20074; i++) - materials[i] = Material.CrimsonStairs; - for (int i = 19651; i <= 19653; i++) - materials[i] = Material.CrimsonStem; - for (int i = 19803; i <= 19866; i++) - materials[i] = Material.CrimsonTrapdoor; - for (int i = 5778; i <= 5785; i++) - materials[i] = Material.CrimsonWallHangingSign; - for (int i = 20395; i <= 20402; i++) - materials[i] = Material.CrimsonWallSign; - materials[20509] = Material.CryingObsidian; - materials[24007] = Material.CutCopper; - for (int i = 24354; i <= 24359; i++) - materials[i] = Material.CutCopperSlab; - for (int i = 24256; i <= 24335; i++) - materials[i] = Material.CutCopperStairs; - materials[11970] = Material.CutRedSandstone; - for (int i = 12189; i <= 12194; i++) - materials[i] = Material.CutRedSandstoneSlab; - materials[580] = Material.CutSandstone; - for (int i = 12135; i <= 12140; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 11792; i <= 11807; i++) - materials[i] = Material.CyanBanner; - for (int i = 1875; i <= 1890; i++) - materials[i] = Material.CyanBed; - for (int i = 21945; i <= 21960; i++) - materials[i] = Material.CyanCandle; - for (int i = 22077; i <= 22078; i++) - materials[i] = Material.CyanCandleCake; - materials[11626] = Material.CyanCarpet; - materials[13760] = Material.CyanConcrete; - materials[13776] = Material.CyanConcretePowder; - for (int i = 13723; i <= 13726; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 13645; i <= 13650; i++) - materials[i] = Material.CyanShulkerBox; - materials[6133] = Material.CyanStainedGlass; - for (int i = 10469; i <= 10500; i++) - materials[i] = Material.CyanStainedGlassPane; - materials[10174] = Material.CyanTerracotta; - for (int i = 11940; i <= 11943; i++) - materials[i] = Material.CyanWallBanner; - materials[2102] = Material.CyanWool; - for (int i = 9924; i <= 9927; i++) - materials[i] = Material.DamagedAnvil; - materials[2121] = Material.Dandelion; - for (int i = 9540; i <= 9563; i++) - materials[i] = Material.DarkOakButton; - for (int i = 13101; i <= 13164; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 12653; i <= 12684; i++) - materials[i] = Material.DarkOakFence; - for (int i = 12365; i <= 12396; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 5322; i <= 5385; i++) - materials[i] = Material.DarkOakHangingSign; - for (int i = 420; i <= 447; i++) - materials[i] = Material.DarkOakLeaves; - for (int i = 154; i <= 156; i++) - materials[i] = Material.DarkOakLog; - materials[21] = Material.DarkOakPlanks; - for (int i = 5904; i <= 5905; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 41; i <= 42; i++) - materials[i] = Material.DarkOakSapling; - for (int i = 4558; i <= 4589; i++) - materials[i] = Material.DarkOakSign; - for (int i = 12087; i <= 12092; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 10853; i <= 10932; i++) - materials[i] = Material.DarkOakStairs; - for (int i = 6524; i <= 6587; i++) - materials[i] = Material.DarkOakTrapdoor; - for (int i = 5754; i <= 5761; i++) - materials[i] = Material.DarkOakWallHangingSign; - for (int i = 4906; i <= 4913; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 219; i <= 221; i++) - materials[i] = Material.DarkOakWood; - materials[11354] = Material.DarkPrismarine; - for (int i = 11607; i <= 11612; i++) - materials[i] = Material.DarkPrismarineSlab; - for (int i = 11515; i <= 11594; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 10000; i <= 10031; i++) - materials[i] = Material.DaylightDetector; - for (int i = 13870; i <= 13871; i++) - materials[i] = Material.DeadBrainCoral; - materials[13859] = Material.DeadBrainCoralBlock; - for (int i = 13890; i <= 13891; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 13916; i <= 13923; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 13872; i <= 13873; i++) - materials[i] = Material.DeadBubbleCoral; - materials[13860] = Material.DeadBubbleCoralBlock; - for (int i = 13892; i <= 13893; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 13924; i <= 13931; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - materials[2050] = Material.DeadBush; - for (int i = 13874; i <= 13875; i++) - materials[i] = Material.DeadFireCoral; - materials[13861] = Material.DeadFireCoralBlock; - for (int i = 13894; i <= 13895; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 13932; i <= 13939; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 13876; i <= 13877; i++) - materials[i] = Material.DeadHornCoral; - materials[13862] = Material.DeadHornCoralBlock; - for (int i = 13896; i <= 13897; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 13940; i <= 13947; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 13868; i <= 13869; i++) - materials[i] = Material.DeadTubeCoral; - materials[13858] = Material.DeadTubeCoralBlock; - for (int i = 13888; i <= 13889; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 13908; i <= 13915; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 27666; i <= 27681; i++) - materials[i] = Material.DecoratedPot; - for (int i = 25996; i <= 25998; i++) - materials[i] = Material.Deepslate; - for (int i = 27313; i <= 27318; i++) - materials[i] = Material.DeepslateBrickSlab; - for (int i = 27233; i <= 27312; i++) - materials[i] = Material.DeepslateBrickStairs; - for (int i = 27319; i <= 27642; i++) - materials[i] = Material.DeepslateBrickWall; - materials[27232] = Material.DeepslateBricks; - materials[134] = Material.DeepslateCoalOre; - materials[24003] = Material.DeepslateCopperOre; - materials[4339] = Material.DeepslateDiamondOre; - materials[8296] = Material.DeepslateEmeraldOre; - materials[130] = Material.DeepslateGoldOre; - materials[132] = Material.DeepslateIronOre; - materials[564] = Material.DeepslateLapisOre; - for (int i = 5914; i <= 5915; i++) - materials[i] = Material.DeepslateRedstoneOre; - for (int i = 26902; i <= 26907; i++) - materials[i] = Material.DeepslateTileSlab; - for (int i = 26822; i <= 26901; i++) - materials[i] = Material.DeepslateTileStairs; - for (int i = 26908; i <= 27231; i++) - materials[i] = Material.DeepslateTileWall; - materials[26821] = Material.DeepslateTiles; - for (int i = 2011; i <= 2034; i++) - materials[i] = Material.DetectorRail; - materials[4340] = Material.DiamondBlock; - materials[4338] = Material.DiamondOre; - materials[4] = Material.Diorite; - for (int i = 15209; i <= 15214; i++) - materials[i] = Material.DioriteSlab; - for (int i = 15057; i <= 15136; i++) - materials[i] = Material.DioriteStairs; - for (int i = 19103; i <= 19426; i++) - materials[i] = Material.DioriteWall; - materials[10] = Material.Dirt; - materials[13536] = Material.DirtPath; - for (int i = 566; i <= 577; i++) - materials[i] = Material.Dispenser; - materials[8200] = Material.DragonEgg; - for (int i = 9836; i <= 9867; i++) - materials[i] = Material.DragonHead; - for (int i = 9868; i <= 9875; i++) - materials[i] = Material.DragonWallHead; - for (int i = 13826; i <= 13857; i++) - materials[i] = Material.DriedGhast; - materials[13810] = Material.DriedKelpBlock; - materials[25828] = Material.DripstoneBlock; - for (int i = 10153; i <= 10164; i++) - materials[i] = Material.Dropper; - materials[8449] = Material.EmeraldBlock; - materials[8295] = Material.EmeraldOre; - materials[8173] = Material.EnchantingTable; - materials[13537] = Material.EndGateway; - materials[8190] = Material.EndPortal; - for (int i = 8191; i <= 8198; i++) - materials[i] = Material.EndPortalFrame; - for (int i = 13357; i <= 13362; i++) - materials[i] = Material.EndRod; - materials[8199] = Material.EndStone; - for (int i = 15167; i <= 15172; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 14417; i <= 14496; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 18779; i <= 19102; i++) - materials[i] = Material.EndStoneBrickWall; - materials[13517] = Material.EndStoneBricks; - for (int i = 8297; i <= 8304; i++) - materials[i] = Material.EnderChest; - materials[24010] = Material.ExposedChiseledCopper; - materials[23999] = Material.ExposedCopper; - for (int i = 25756; i <= 25759; i++) - materials[i] = Material.ExposedCopperBulb; - for (int i = 24776; i <= 24839; i++) - materials[i] = Material.ExposedCopperDoor; - for (int i = 25738; i <= 25739; i++) - materials[i] = Material.ExposedCopperGrate; - for (int i = 25288; i <= 25351; i++) - materials[i] = Material.ExposedCopperTrapdoor; - materials[24006] = Material.ExposedCutCopper; - for (int i = 24348; i <= 24353; i++) - materials[i] = Material.ExposedCutCopperSlab; - for (int i = 24176; i <= 24255; i++) - materials[i] = Material.ExposedCutCopperStairs; - for (int i = 4350; i <= 4357; i++) - materials[i] = Material.Farmland; - materials[2049] = Material.Fern; - for (int i = 2406; i <= 2917; i++) - materials[i] = Material.Fire; - for (int i = 13884; i <= 13885; i++) - materials[i] = Material.FireCoral; - materials[13866] = Material.FireCoralBlock; - for (int i = 13904; i <= 13905; i++) - materials[i] = Material.FireCoralFan; - for (int i = 13972; i <= 13979; i++) - materials[i] = Material.FireCoralWallFan; - materials[27945] = Material.FireflyBush; - materials[19492] = Material.FletchingTable; - materials[9351] = Material.FlowerPot; - materials[25885] = Material.FloweringAzalea; - for (int i = 532; i <= 559; i++) - materials[i] = Material.FloweringAzaleaLeaves; - materials[27664] = Material.Frogspawn; - for (int i = 13562; i <= 13565; i++) - materials[i] = Material.FrostedIce; - for (int i = 4358; i <= 4365; i++) - materials[i] = Material.Furnace; - materials[21345] = Material.GildedBlackstone; - materials[562] = Material.Glass; - for (int i = 7022; i <= 7053; i++) - materials[i] = Material.GlassPane; - for (int i = 7112; i <= 7239; i++) - materials[i] = Material.GlowLichen; - materials[6042] = Material.Glowstone; - materials[2137] = Material.GoldBlock; - materials[129] = Material.GoldOre; - materials[2] = Material.Granite; - for (int i = 15185; i <= 15190; i++) - materials[i] = Material.GraniteSlab; - for (int i = 14737; i <= 14816; i++) - materials[i] = Material.GraniteStairs; - for (int i = 16511; i <= 16834; i++) - materials[i] = Material.GraniteWall; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - materials[124] = Material.Gravel; - for (int i = 11760; i <= 11775; i++) - materials[i] = Material.GrayBanner; - for (int i = 1843; i <= 1858; i++) - materials[i] = Material.GrayBed; - for (int i = 21913; i <= 21928; i++) - materials[i] = Material.GrayCandle; - for (int i = 22073; i <= 22074; i++) - materials[i] = Material.GrayCandleCake; - materials[11624] = Material.GrayCarpet; - materials[13758] = Material.GrayConcrete; - materials[13774] = Material.GrayConcretePowder; - for (int i = 13715; i <= 13718; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 13633; i <= 13638; i++) - materials[i] = Material.GrayShulkerBox; - materials[6131] = Material.GrayStainedGlass; - for (int i = 10405; i <= 10436; i++) - materials[i] = Material.GrayStainedGlassPane; - materials[10172] = Material.GrayTerracotta; - for (int i = 11932; i <= 11935; i++) - materials[i] = Material.GrayWallBanner; - materials[2100] = Material.GrayWool; - for (int i = 11856; i <= 11871; i++) - materials[i] = Material.GreenBanner; - for (int i = 1939; i <= 1954; i++) - materials[i] = Material.GreenBed; - for (int i = 22009; i <= 22024; i++) - materials[i] = Material.GreenCandle; - for (int i = 22085; i <= 22086; i++) - materials[i] = Material.GreenCandleCake; - materials[11630] = Material.GreenCarpet; - materials[13764] = Material.GreenConcrete; - materials[13780] = Material.GreenConcretePowder; - for (int i = 13739; i <= 13742; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 13669; i <= 13674; i++) - materials[i] = Material.GreenShulkerBox; - materials[6137] = Material.GreenStainedGlass; - for (int i = 10597; i <= 10628; i++) - materials[i] = Material.GreenStainedGlassPane; - materials[10178] = Material.GreenTerracotta; - for (int i = 11956; i <= 11959; i++) - materials[i] = Material.GreenWallBanner; - materials[2106] = Material.GreenWool; - for (int i = 19493; i <= 19504; i++) - materials[i] = Material.Grindstone; - for (int i = 25992; i <= 25993; i++) - materials[i] = Material.HangingRoots; - for (int i = 11614; i <= 11616; i++) - materials[i] = Material.HayBlock; - for (int i = 27774; i <= 27775; i++) - materials[i] = Material.HeavyCore; - for (int i = 9968; i <= 9983; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - materials[20505] = Material.HoneyBlock; - materials[20506] = Material.HoneycombBlock; - for (int i = 10034; i <= 10043; i++) - materials[i] = Material.Hopper; - for (int i = 13886; i <= 13887; i++) - materials[i] = Material.HornCoral; - materials[13867] = Material.HornCoralBlock; - for (int i = 13906; i <= 13907; i++) - materials[i] = Material.HornCoralFan; - for (int i = 13980; i <= 13987; i++) - materials[i] = Material.HornCoralWallFan; - materials[5958] = Material.Ice; - materials[6791] = Material.InfestedChiseledStoneBricks; - materials[6787] = Material.InfestedCobblestone; - materials[6790] = Material.InfestedCrackedStoneBricks; - for (int i = 27646; i <= 27648; i++) - materials[i] = Material.InfestedDeepslate; - materials[6789] = Material.InfestedMossyStoneBricks; - materials[6786] = Material.InfestedStone; - materials[6788] = Material.InfestedStoneBricks; - for (int i = 6984; i <= 7015; i++) - materials[i] = Material.IronBars; - materials[2138] = Material.IronBlock; - for (int i = 5828; i <= 5891; i++) - materials[i] = Material.IronDoor; - materials[131] = Material.IronOre; - for (int i = 11288; i <= 11351; i++) - materials[i] = Material.IronTrapdoor; - for (int i = 6049; i <= 6052; i++) - materials[i] = Material.JackOLantern; - for (int i = 20415; i <= 20426; i++) - materials[i] = Material.Jigsaw; - for (int i = 5994; i <= 5995; i++) - materials[i] = Material.Jukebox; - for (int i = 9468; i <= 9491; i++) - materials[i] = Material.JungleButton; - for (int i = 12909; i <= 12972; i++) - materials[i] = Material.JungleDoor; - for (int i = 12557; i <= 12588; i++) - materials[i] = Material.JungleFence; - for (int i = 12269; i <= 12300; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 5258; i <= 5321; i++) - materials[i] = Material.JungleHangingSign; - for (int i = 336; i <= 363; i++) - materials[i] = Material.JungleLeaves; - for (int i = 145; i <= 147; i++) - materials[i] = Material.JungleLog; - materials[18] = Material.JunglePlanks; - for (int i = 5898; i <= 5899; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 35; i <= 36; i++) - materials[i] = Material.JungleSapling; - for (int i = 4526; i <= 4557; i++) - materials[i] = Material.JungleSign; - for (int i = 12069; i <= 12074; i++) - materials[i] = Material.JungleSlab; - for (int i = 8610; i <= 8689; i++) - materials[i] = Material.JungleStairs; - for (int i = 6332; i <= 6395; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 5746; i <= 5753; i++) - materials[i] = Material.JungleWallHangingSign; - for (int i = 4898; i <= 4905; i++) - materials[i] = Material.JungleWallSign; - for (int i = 210; i <= 212; i++) - materials[i] = Material.JungleWood; - for (int i = 13783; i <= 13808; i++) - materials[i] = Material.Kelp; - materials[13809] = Material.KelpPlant; - for (int i = 4750; i <= 4757; i++) - materials[i] = Material.Ladder; - for (int i = 19558; i <= 19561; i++) - materials[i] = Material.Lantern; - materials[565] = Material.LapisBlock; - materials[563] = Material.LapisOre; - for (int i = 22105; i <= 22116; i++) - materials[i] = Material.LargeAmethystBud; - for (int i = 11646; i <= 11647; i++) - materials[i] = Material.LargeFern; - for (int i = 102; i <= 117; i++) - materials[i] = Material.Lava; - materials[8186] = Material.LavaCauldron; - for (int i = 25919; i <= 25934; i++) - materials[i] = Material.LeafLitter; - for (int i = 19505; i <= 19520; i++) - materials[i] = Material.Lectern; - for (int i = 5802; i <= 5825; i++) - materials[i] = Material.Lever; - for (int i = 11256; i <= 11287; i++) - materials[i] = Material.Light; - for (int i = 11696; i <= 11711; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 1779; i <= 1794; i++) - materials[i] = Material.LightBlueBed; - for (int i = 21849; i <= 21864; i++) - materials[i] = Material.LightBlueCandle; - for (int i = 22065; i <= 22066; i++) - materials[i] = Material.LightBlueCandleCake; - materials[11620] = Material.LightBlueCarpet; - materials[13754] = Material.LightBlueConcrete; - materials[13770] = Material.LightBlueConcretePowder; - for (int i = 13699; i <= 13702; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 13609; i <= 13614; i++) - materials[i] = Material.LightBlueShulkerBox; - materials[6127] = Material.LightBlueStainedGlass; - for (int i = 10277; i <= 10308; i++) - materials[i] = Material.LightBlueStainedGlassPane; - materials[10168] = Material.LightBlueTerracotta; - for (int i = 11916; i <= 11919; i++) - materials[i] = Material.LightBlueWallBanner; - materials[2096] = Material.LightBlueWool; - for (int i = 11776; i <= 11791; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 1859; i <= 1874; i++) - materials[i] = Material.LightGrayBed; - for (int i = 21929; i <= 21944; i++) - materials[i] = Material.LightGrayCandle; - for (int i = 22075; i <= 22076; i++) - materials[i] = Material.LightGrayCandleCake; - materials[11625] = Material.LightGrayCarpet; - materials[13759] = Material.LightGrayConcrete; - materials[13775] = Material.LightGrayConcretePowder; - for (int i = 13719; i <= 13722; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 13639; i <= 13644; i++) - materials[i] = Material.LightGrayShulkerBox; - materials[6132] = Material.LightGrayStainedGlass; - for (int i = 10437; i <= 10468; i++) - materials[i] = Material.LightGrayStainedGlassPane; - materials[10173] = Material.LightGrayTerracotta; - for (int i = 11936; i <= 11939; i++) - materials[i] = Material.LightGrayWallBanner; - materials[2101] = Material.LightGrayWool; - for (int i = 9952; i <= 9967; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 25784; i <= 25807; i++) - materials[i] = Material.LightningRod; - for (int i = 11638; i <= 11639; i++) - materials[i] = Material.Lilac; - materials[2134] = Material.LilyOfTheValley; - materials[7642] = Material.LilyPad; - for (int i = 11728; i <= 11743; i++) - materials[i] = Material.LimeBanner; - for (int i = 1811; i <= 1826; i++) - materials[i] = Material.LimeBed; - for (int i = 21881; i <= 21896; i++) - materials[i] = Material.LimeCandle; - for (int i = 22069; i <= 22070; i++) - materials[i] = Material.LimeCandleCake; - materials[11622] = Material.LimeCarpet; - materials[13756] = Material.LimeConcrete; - materials[13772] = Material.LimeConcretePowder; - for (int i = 13707; i <= 13710; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 13621; i <= 13626; i++) - materials[i] = Material.LimeShulkerBox; - materials[6129] = Material.LimeStainedGlass; - for (int i = 10341; i <= 10372; i++) - materials[i] = Material.LimeStainedGlassPane; - materials[10170] = Material.LimeTerracotta; - for (int i = 11924; i <= 11927; i++) - materials[i] = Material.LimeWallBanner; - materials[2098] = Material.LimeWool; - materials[20519] = Material.Lodestone; - for (int i = 19459; i <= 19462; i++) - materials[i] = Material.Loom; - for (int i = 11680; i <= 11695; i++) - materials[i] = Material.MagentaBanner; - for (int i = 1763; i <= 1778; i++) - materials[i] = Material.MagentaBed; - for (int i = 21833; i <= 21848; i++) - materials[i] = Material.MagentaCandle; - for (int i = 22063; i <= 22064; i++) - materials[i] = Material.MagentaCandleCake; - materials[11619] = Material.MagentaCarpet; - materials[13753] = Material.MagentaConcrete; - materials[13769] = Material.MagentaConcretePowder; - for (int i = 13695; i <= 13698; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 13603; i <= 13608; i++) - materials[i] = Material.MagentaShulkerBox; - materials[6126] = Material.MagentaStainedGlass; - for (int i = 10245; i <= 10276; i++) - materials[i] = Material.MagentaStainedGlassPane; - materials[10167] = Material.MagentaTerracotta; - for (int i = 11912; i <= 11915; i++) - materials[i] = Material.MagentaWallBanner; - materials[2095] = Material.MagentaWool; - materials[13566] = Material.MagmaBlock; - for (int i = 9588; i <= 9611; i++) - materials[i] = Material.MangroveButton; - for (int i = 13229; i <= 13292; i++) - materials[i] = Material.MangroveDoor; - for (int i = 12717; i <= 12748; i++) - materials[i] = Material.MangroveFence; - for (int i = 12429; i <= 12460; i++) - materials[i] = Material.MangroveFenceGate; - for (int i = 5578; i <= 5641; i++) - materials[i] = Material.MangroveHangingSign; - for (int i = 476; i <= 503; i++) - materials[i] = Material.MangroveLeaves; - for (int i = 160; i <= 162; i++) - materials[i] = Material.MangroveLog; - materials[26] = Material.MangrovePlanks; - for (int i = 5908; i <= 5909; i++) - materials[i] = Material.MangrovePressurePlate; - for (int i = 45; i <= 84; i++) - materials[i] = Material.MangrovePropagule; - for (int i = 163; i <= 164; i++) - materials[i] = Material.MangroveRoots; - for (int i = 4622; i <= 4653; i++) - materials[i] = Material.MangroveSign; - for (int i = 12099; i <= 12104; i++) - materials[i] = Material.MangroveSlab; - for (int i = 11013; i <= 11092; i++) - materials[i] = Material.MangroveStairs; - for (int i = 6652; i <= 6715; i++) - materials[i] = Material.MangroveTrapdoor; - for (int i = 5770; i <= 5777; i++) - materials[i] = Material.MangroveWallHangingSign; - for (int i = 4922; i <= 4929; i++) - materials[i] = Material.MangroveWallSign; - for (int i = 222; i <= 224; i++) - materials[i] = Material.MangroveWood; - for (int i = 22117; i <= 22128; i++) - materials[i] = Material.MediumAmethystBud; - materials[7055] = Material.Melon; - for (int i = 7072; i <= 7079; i++) - materials[i] = Material.MelonStem; - materials[25935] = Material.MossBlock; - materials[25886] = Material.MossCarpet; - materials[2399] = Material.MossyCobblestone; - for (int i = 15161; i <= 15166; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 14337; i <= 14416; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 9027; i <= 9350; i++) - materials[i] = Material.MossyCobblestoneWall; - for (int i = 15149; i <= 15154; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 14177; i <= 14256; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 16187; i <= 16510; i++) - materials[i] = Material.MossyStoneBrickWall; - materials[6781] = Material.MossyStoneBricks; - for (int i = 2109; i <= 2120; i++) - materials[i] = Material.MovingPiston; - materials[25995] = Material.Mud; - for (int i = 12165; i <= 12170; i++) - materials[i] = Material.MudBrickSlab; - for (int i = 7560; i <= 7639; i++) - materials[i] = Material.MudBrickStairs; - for (int i = 17159; i <= 17482; i++) - materials[i] = Material.MudBrickWall; - materials[6785] = Material.MudBricks; - for (int i = 165; i <= 167; i++) - materials[i] = Material.MuddyMangroveRoots; - for (int i = 6920; i <= 6983; i++) - materials[i] = Material.MushroomStem; - for (int i = 7640; i <= 7641; i++) - materials[i] = Material.Mycelium; - for (int i = 8057; i <= 8088; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 12171; i <= 12176; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 8089; i <= 8168; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 17483; i <= 17806; i++) - materials[i] = Material.NetherBrickWall; - materials[8056] = Material.NetherBricks; - materials[135] = Material.NetherGoldOre; - for (int i = 6043; i <= 6044; i++) - materials[i] = Material.NetherPortal; - materials[10033] = Material.NetherQuartzOre; - materials[19650] = Material.NetherSprouts; - for (int i = 8169; i <= 8172; i++) - materials[i] = Material.NetherWart; - materials[13567] = Material.NetherWartBlock; - materials[20507] = Material.NetheriteBlock; - materials[6028] = Material.Netherrack; - for (int i = 581; i <= 1730; i++) - materials[i] = Material.NoteBlock; - for (int i = 9396; i <= 9419; i++) - materials[i] = Material.OakButton; - for (int i = 4686; i <= 4749; i++) - materials[i] = Material.OakDoor; - for (int i = 5996; i <= 6027; i++) - materials[i] = Material.OakFence; - for (int i = 7368; i <= 7399; i++) - materials[i] = Material.OakFenceGate; - for (int i = 4938; i <= 5001; i++) - materials[i] = Material.OakHangingSign; - for (int i = 252; i <= 279; i++) - materials[i] = Material.OakLeaves; - for (int i = 136; i <= 138; i++) - materials[i] = Material.OakLog; - materials[15] = Material.OakPlanks; - for (int i = 5892; i <= 5893; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 29; i <= 30; i++) - materials[i] = Material.OakSapling; - for (int i = 4366; i <= 4397; i++) - materials[i] = Material.OakSign; - for (int i = 12051; i <= 12056; i++) - materials[i] = Material.OakSlab; - for (int i = 2938; i <= 3017; i++) - materials[i] = Material.OakStairs; - for (int i = 6140; i <= 6203; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 5706; i <= 5713; i++) - materials[i] = Material.OakWallHangingSign; - for (int i = 4858; i <= 4865; i++) - materials[i] = Material.OakWallSign; - for (int i = 201; i <= 203; i++) - materials[i] = Material.OakWood; - for (int i = 13573; i <= 13584; i++) - materials[i] = Material.Observer; - materials[2400] = Material.Obsidian; - for (int i = 27655; i <= 27657; i++) - materials[i] = Material.OchreFroglight; - materials[27941] = Material.OpenEyeblossom; - for (int i = 11664; i <= 11679; i++) - materials[i] = Material.OrangeBanner; - for (int i = 1747; i <= 1762; i++) - materials[i] = Material.OrangeBed; - for (int i = 21817; i <= 21832; i++) - materials[i] = Material.OrangeCandle; - for (int i = 22061; i <= 22062; i++) - materials[i] = Material.OrangeCandleCake; - materials[11618] = Material.OrangeCarpet; - materials[13752] = Material.OrangeConcrete; - materials[13768] = Material.OrangeConcretePowder; - for (int i = 13691; i <= 13694; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 13597; i <= 13602; i++) - materials[i] = Material.OrangeShulkerBox; - materials[6125] = Material.OrangeStainedGlass; - for (int i = 10213; i <= 10244; i++) - materials[i] = Material.OrangeStainedGlassPane; - materials[10166] = Material.OrangeTerracotta; - materials[2128] = Material.OrangeTulip; - for (int i = 11908; i <= 11911; i++) - materials[i] = Material.OrangeWallBanner; - materials[2094] = Material.OrangeWool; - materials[2131] = Material.OxeyeDaisy; - materials[24008] = Material.OxidizedChiseledCopper; - materials[24001] = Material.OxidizedCopper; - for (int i = 25764; i <= 25767; i++) - materials[i] = Material.OxidizedCopperBulb; - for (int i = 24840; i <= 24903; i++) - materials[i] = Material.OxidizedCopperDoor; - for (int i = 25742; i <= 25743; i++) - materials[i] = Material.OxidizedCopperGrate; - for (int i = 25352; i <= 25415; i++) - materials[i] = Material.OxidizedCopperTrapdoor; - materials[24004] = Material.OxidizedCutCopper; - for (int i = 24336; i <= 24341; i++) - materials[i] = Material.OxidizedCutCopperSlab; - for (int i = 24016; i <= 24095; i++) - materials[i] = Material.OxidizedCutCopperStairs; - materials[11635] = Material.PackedIce; - materials[6784] = Material.PackedMud; - for (int i = 27939; i <= 27940; i++) - materials[i] = Material.PaleHangingMoss; - materials[27776] = Material.PaleMossBlock; - for (int i = 27777; i <= 27938; i++) - materials[i] = Material.PaleMossCarpet; - for (int i = 9564; i <= 9587; i++) - materials[i] = Material.PaleOakButton; - for (int i = 13165; i <= 13228; i++) - materials[i] = Material.PaleOakDoor; - for (int i = 12685; i <= 12716; i++) - materials[i] = Material.PaleOakFence; - for (int i = 12397; i <= 12428; i++) - materials[i] = Material.PaleOakFenceGate; - for (int i = 5386; i <= 5449; i++) - materials[i] = Material.PaleOakHangingSign; - for (int i = 448; i <= 475; i++) - materials[i] = Material.PaleOakLeaves; - for (int i = 157; i <= 159; i++) - materials[i] = Material.PaleOakLog; - materials[25] = Material.PaleOakPlanks; - for (int i = 5906; i <= 5907; i++) - materials[i] = Material.PaleOakPressurePlate; - for (int i = 43; i <= 44; i++) - materials[i] = Material.PaleOakSapling; - for (int i = 4590; i <= 4621; i++) - materials[i] = Material.PaleOakSign; - for (int i = 12093; i <= 12098; i++) - materials[i] = Material.PaleOakSlab; - for (int i = 10933; i <= 11012; i++) - materials[i] = Material.PaleOakStairs; - for (int i = 6588; i <= 6651; i++) - materials[i] = Material.PaleOakTrapdoor; - for (int i = 5762; i <= 5769; i++) - materials[i] = Material.PaleOakWallHangingSign; - for (int i = 4914; i <= 4921; i++) - materials[i] = Material.PaleOakWallSign; - for (int i = 22; i <= 24; i++) - materials[i] = Material.PaleOakWood; - for (int i = 27661; i <= 27663; i++) - materials[i] = Material.PearlescentFroglight; - for (int i = 11642; i <= 11643; i++) - materials[i] = Material.Peony; - for (int i = 12141; i <= 12146; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 9876; i <= 9907; i++) - materials[i] = Material.PiglinHead; - for (int i = 9908; i <= 9915; i++) - materials[i] = Material.PiglinWallHead; - for (int i = 11744; i <= 11759; i++) - materials[i] = Material.PinkBanner; - for (int i = 1827; i <= 1842; i++) - materials[i] = Material.PinkBed; - for (int i = 21897; i <= 21912; i++) - materials[i] = Material.PinkCandle; - for (int i = 22071; i <= 22072; i++) - materials[i] = Material.PinkCandleCake; - materials[11623] = Material.PinkCarpet; - materials[13757] = Material.PinkConcrete; - materials[13773] = Material.PinkConcretePowder; - for (int i = 13711; i <= 13714; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 25887; i <= 25902; i++) - materials[i] = Material.PinkPetals; - for (int i = 13627; i <= 13632; i++) - materials[i] = Material.PinkShulkerBox; - materials[6130] = Material.PinkStainedGlass; - for (int i = 10373; i <= 10404; i++) - materials[i] = Material.PinkStainedGlassPane; - materials[10171] = Material.PinkTerracotta; - materials[2130] = Material.PinkTulip; - for (int i = 11928; i <= 11931; i++) - materials[i] = Material.PinkWallBanner; - materials[2099] = Material.PinkWool; - for (int i = 2057; i <= 2068; i++) - materials[i] = Material.Piston; - for (int i = 2069; i <= 2092; i++) - materials[i] = Material.PistonHead; - for (int i = 13520; i <= 13529; i++) - materials[i] = Material.PitcherCrop; - for (int i = 13530; i <= 13531; i++) - materials[i] = Material.PitcherPlant; - for (int i = 9756; i <= 9787; i++) - materials[i] = Material.PlayerHead; - for (int i = 9788; i <= 9795; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - for (int i = 25808; i <= 25827; i++) - materials[i] = Material.PointedDripstone; - materials[7] = Material.PolishedAndesite; - for (int i = 15203; i <= 15208; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 14977; i <= 15056; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 6034; i <= 6036; i++) - materials[i] = Material.PolishedBasalt; - materials[20931] = Material.PolishedBlackstone; - for (int i = 20935; i <= 20940; i++) - materials[i] = Material.PolishedBlackstoneBrickSlab; - for (int i = 20941; i <= 21020; i++) - materials[i] = Material.PolishedBlackstoneBrickStairs; - for (int i = 21021; i <= 21344; i++) - materials[i] = Material.PolishedBlackstoneBrickWall; - materials[20932] = Material.PolishedBlackstoneBricks; - for (int i = 21434; i <= 21457; i++) - materials[i] = Material.PolishedBlackstoneButton; - for (int i = 21432; i <= 21433; i++) - materials[i] = Material.PolishedBlackstonePressurePlate; - for (int i = 21426; i <= 21431; i++) - materials[i] = Material.PolishedBlackstoneSlab; - for (int i = 21346; i <= 21425; i++) - materials[i] = Material.PolishedBlackstoneStairs; - for (int i = 21458; i <= 21781; i++) - materials[i] = Material.PolishedBlackstoneWall; - materials[26410] = Material.PolishedDeepslate; - for (int i = 26491; i <= 26496; i++) - materials[i] = Material.PolishedDeepslateSlab; - for (int i = 26411; i <= 26490; i++) - materials[i] = Material.PolishedDeepslateStairs; - for (int i = 26497; i <= 26820; i++) - materials[i] = Material.PolishedDeepslateWall; - materials[5] = Material.PolishedDiorite; - for (int i = 15155; i <= 15160; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 14257; i <= 14336; i++) - materials[i] = Material.PolishedDioriteStairs; - materials[3] = Material.PolishedGranite; - for (int i = 15137; i <= 15142; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 14017; i <= 14096; i++) - materials[i] = Material.PolishedGraniteStairs; - materials[22552] = Material.PolishedTuff; - for (int i = 22553; i <= 22558; i++) - materials[i] = Material.PolishedTuffSlab; - for (int i = 22559; i <= 22638; i++) - materials[i] = Material.PolishedTuffStairs; - for (int i = 22639; i <= 22962; i++) - materials[i] = Material.PolishedTuffWall; - materials[2123] = Material.Poppy; - for (int i = 9388; i <= 9395; i++) - materials[i] = Material.Potatoes; - materials[9357] = Material.PottedAcaciaSapling; - materials[9366] = Material.PottedAllium; - materials[27653] = Material.PottedAzaleaBush; - materials[9367] = Material.PottedAzureBluet; - materials[14012] = Material.PottedBamboo; - materials[9355] = Material.PottedBirchSapling; - materials[9365] = Material.PottedBlueOrchid; - materials[9377] = Material.PottedBrownMushroom; - materials[9379] = Material.PottedCactus; - materials[9358] = Material.PottedCherrySapling; - materials[27944] = Material.PottedClosedEyeblossom; - materials[9373] = Material.PottedCornflower; - materials[20515] = Material.PottedCrimsonFungus; - materials[20517] = Material.PottedCrimsonRoots; - materials[9363] = Material.PottedDandelion; - materials[9359] = Material.PottedDarkOakSapling; - materials[9378] = Material.PottedDeadBush; - materials[9362] = Material.PottedFern; - materials[27654] = Material.PottedFloweringAzaleaBush; - materials[9356] = Material.PottedJungleSapling; - materials[9374] = Material.PottedLilyOfTheValley; - materials[9361] = Material.PottedMangrovePropagule; - materials[9353] = Material.PottedOakSapling; - materials[27943] = Material.PottedOpenEyeblossom; - materials[9369] = Material.PottedOrangeTulip; - materials[9372] = Material.PottedOxeyeDaisy; - materials[9360] = Material.PottedPaleOakSapling; - materials[9371] = Material.PottedPinkTulip; - materials[9364] = Material.PottedPoppy; - materials[9376] = Material.PottedRedMushroom; - materials[9368] = Material.PottedRedTulip; - materials[9354] = Material.PottedSpruceSapling; - materials[9352] = Material.PottedTorchflower; - materials[20516] = Material.PottedWarpedFungus; - materials[20518] = Material.PottedWarpedRoots; - materials[9370] = Material.PottedWhiteTulip; - materials[9375] = Material.PottedWitherRose; - materials[23378] = Material.PowderSnow; - for (int i = 8187; i <= 8189; i++) - materials[i] = Material.PowderSnowCauldron; - for (int i = 1987; i <= 2010; i++) - materials[i] = Material.PoweredRail; - materials[11352] = Material.Prismarine; - for (int i = 11601; i <= 11606; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 11435; i <= 11514; i++) - materials[i] = Material.PrismarineBrickStairs; - materials[11353] = Material.PrismarineBricks; - for (int i = 11595; i <= 11600; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 11355; i <= 11434; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 15539; i <= 15862; i++) - materials[i] = Material.PrismarineWall; - materials[7054] = Material.Pumpkin; - for (int i = 7064; i <= 7071; i++) - materials[i] = Material.PumpkinStem; - for (int i = 11808; i <= 11823; i++) - materials[i] = Material.PurpleBanner; - for (int i = 1891; i <= 1906; i++) - materials[i] = Material.PurpleBed; - for (int i = 21961; i <= 21976; i++) - materials[i] = Material.PurpleCandle; - for (int i = 22079; i <= 22080; i++) - materials[i] = Material.PurpleCandleCake; - materials[11627] = Material.PurpleCarpet; - materials[13761] = Material.PurpleConcrete; - materials[13777] = Material.PurpleConcretePowder; - for (int i = 13727; i <= 13730; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 13651; i <= 13656; i++) - materials[i] = Material.PurpleShulkerBox; - materials[6134] = Material.PurpleStainedGlass; - for (int i = 10501; i <= 10532; i++) - materials[i] = Material.PurpleStainedGlassPane; - materials[10175] = Material.PurpleTerracotta; - for (int i = 11944; i <= 11947; i++) - materials[i] = Material.PurpleWallBanner; - materials[2103] = Material.PurpleWool; - materials[13433] = Material.PurpurBlock; - for (int i = 13434; i <= 13436; i++) - materials[i] = Material.PurpurPillar; - for (int i = 12195; i <= 12200; i++) - materials[i] = Material.PurpurSlab; - for (int i = 13437; i <= 13516; i++) - materials[i] = Material.PurpurStairs; - materials[10044] = Material.QuartzBlock; - materials[21784] = Material.QuartzBricks; - for (int i = 10046; i <= 10048; i++) - materials[i] = Material.QuartzPillar; - for (int i = 12177; i <= 12182; i++) - materials[i] = Material.QuartzSlab; - for (int i = 10049; i <= 10128; i++) - materials[i] = Material.QuartzStairs; - for (int i = 4758; i <= 4777; i++) - materials[i] = Material.Rail; - materials[27651] = Material.RawCopperBlock; - materials[27652] = Material.RawGoldBlock; - materials[27650] = Material.RawIronBlock; - for (int i = 11872; i <= 11887; i++) - materials[i] = Material.RedBanner; - for (int i = 1955; i <= 1970; i++) - materials[i] = Material.RedBed; - for (int i = 22025; i <= 22040; i++) - materials[i] = Material.RedCandle; - for (int i = 22087; i <= 22088; i++) - materials[i] = Material.RedCandleCake; - materials[11631] = Material.RedCarpet; - materials[13765] = Material.RedConcrete; - materials[13781] = Material.RedConcretePowder; - for (int i = 13743; i <= 13746; i++) - materials[i] = Material.RedGlazedTerracotta; - materials[2136] = Material.RedMushroom; - for (int i = 6856; i <= 6919; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 15197; i <= 15202; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 14897; i <= 14976; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 18131; i <= 18454; i++) - materials[i] = Material.RedNetherBrickWall; - materials[13568] = Material.RedNetherBricks; - materials[123] = Material.RedSand; - materials[11968] = Material.RedSandstone; - for (int i = 12183; i <= 12188; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 11971; i <= 12050; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 15863; i <= 16186; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 13675; i <= 13680; i++) - materials[i] = Material.RedShulkerBox; - materials[6138] = Material.RedStainedGlass; - for (int i = 10629; i <= 10660; i++) - materials[i] = Material.RedStainedGlassPane; - materials[10179] = Material.RedTerracotta; - materials[2127] = Material.RedTulip; - for (int i = 11960; i <= 11963; i++) - materials[i] = Material.RedWallBanner; - materials[2107] = Material.RedWool; - materials[10032] = Material.RedstoneBlock; - for (int i = 8201; i <= 8202; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 5912; i <= 5913; i++) - materials[i] = Material.RedstoneOre; - for (int i = 5916; i <= 5917; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 5918; i <= 5925; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 3042; i <= 4337; i++) - materials[i] = Material.RedstoneWire; - materials[27665] = Material.ReinforcedDeepslate; - for (int i = 6060; i <= 6123; i++) - materials[i] = Material.Repeater; - for (int i = 13538; i <= 13549; i++) - materials[i] = Material.RepeatingCommandBlock; - materials[7643] = Material.ResinBlock; - for (int i = 7725; i <= 7730; i++) - materials[i] = Material.ResinBrickSlab; - for (int i = 7645; i <= 7724; i++) - materials[i] = Material.ResinBrickStairs; - for (int i = 7731; i <= 8054; i++) - materials[i] = Material.ResinBrickWall; - materials[7644] = Material.ResinBricks; - for (int i = 7240; i <= 7367; i++) - materials[i] = Material.ResinClump; - for (int i = 20510; i <= 20514; i++) - materials[i] = Material.RespawnAnchor; - materials[25994] = Material.RootedDirt; - for (int i = 11640; i <= 11641; i++) - materials[i] = Material.RoseBush; - materials[118] = Material.Sand; - materials[578] = Material.Sandstone; - for (int i = 12129; i <= 12134; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 8215; i <= 8294; i++) - materials[i] = Material.SandstoneStairs; - for (int i = 18455; i <= 18778; i++) - materials[i] = Material.SandstoneWall; - for (int i = 19427; i <= 19458; i++) - materials[i] = Material.Scaffolding; - materials[23859] = Material.Sculk; - for (int i = 23988; i <= 23989; i++) - materials[i] = Material.SculkCatalyst; - for (int i = 23379; i <= 23474; i++) - materials[i] = Material.SculkSensor; - for (int i = 23990; i <= 23997; i++) - materials[i] = Material.SculkShrieker; - for (int i = 23860; i <= 23987; i++) - materials[i] = Material.SculkVein; - materials[11613] = Material.SeaLantern; - for (int i = 13988; i <= 13995; i++) - materials[i] = Material.SeaPickle; - materials[2054] = Material.Seagrass; - materials[2052] = Material.ShortDryGrass; - materials[2048] = Material.ShortGrass; - materials[19665] = Material.Shroomlight; - for (int i = 13585; i <= 13590; i++) - materials[i] = Material.ShulkerBox; - for (int i = 9636; i <= 9667; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 9668; i <= 9675; i++) - materials[i] = Material.SkeletonWallSkull; - materials[11253] = Material.SlimeBlock; - for (int i = 22129; i <= 22140; i++) - materials[i] = Material.SmallAmethystBud; - for (int i = 25976; i <= 25991; i++) - materials[i] = Material.SmallDripleaf; - materials[19521] = Material.SmithingTable; - for (int i = 19475; i <= 19482; i++) - materials[i] = Material.Smoker; - materials[27649] = Material.SmoothBasalt; - materials[12203] = Material.SmoothQuartz; - for (int i = 15179; i <= 15184; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 14657; i <= 14736; i++) - materials[i] = Material.SmoothQuartzStairs; - materials[12204] = Material.SmoothRedSandstone; - for (int i = 15143; i <= 15148; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 14097; i <= 14176; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - materials[12202] = Material.SmoothSandstone; - for (int i = 15173; i <= 15178; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 14577; i <= 14656; i++) - materials[i] = Material.SmoothSandstoneStairs; - materials[12201] = Material.SmoothStone; - for (int i = 12123; i <= 12128; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 13823; i <= 13825; i++) - materials[i] = Material.SnifferEgg; - for (int i = 5950; i <= 5957; i++) - materials[i] = Material.Snow; - materials[5959] = Material.SnowBlock; - for (int i = 19598; i <= 19629; i++) - materials[i] = Material.SoulCampfire; - materials[2918] = Material.SoulFire; - for (int i = 19562; i <= 19565; i++) - materials[i] = Material.SoulLantern; - materials[6029] = Material.SoulSand; - materials[6030] = Material.SoulSoil; - materials[6037] = Material.SoulTorch; - for (int i = 6038; i <= 6041; i++) - materials[i] = Material.SoulWallTorch; - materials[2919] = Material.Spawner; - materials[560] = Material.Sponge; - materials[25883] = Material.SporeBlossom; - for (int i = 9420; i <= 9443; i++) - materials[i] = Material.SpruceButton; - for (int i = 12781; i <= 12844; i++) - materials[i] = Material.SpruceDoor; - for (int i = 12493; i <= 12524; i++) - materials[i] = Material.SpruceFence; - for (int i = 12205; i <= 12236; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 5002; i <= 5065; i++) - materials[i] = Material.SpruceHangingSign; - for (int i = 280; i <= 307; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 139; i <= 141; i++) - materials[i] = Material.SpruceLog; - materials[16] = Material.SprucePlanks; - for (int i = 5894; i <= 5895; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 31; i <= 32; i++) - materials[i] = Material.SpruceSapling; - for (int i = 4398; i <= 4429; i++) - materials[i] = Material.SpruceSign; - for (int i = 12057; i <= 12062; i++) - materials[i] = Material.SpruceSlab; - for (int i = 8450; i <= 8529; i++) - materials[i] = Material.SpruceStairs; - for (int i = 6204; i <= 6267; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 5714; i <= 5721; i++) - materials[i] = Material.SpruceWallHangingSign; - for (int i = 4866; i <= 4873; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 204; i <= 206; i++) - materials[i] = Material.SpruceWood; - for (int i = 2035; i <= 2046; i++) - materials[i] = Material.StickyPiston; - materials[1] = Material.Stone; - for (int i = 12159; i <= 12164; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 7480; i <= 7559; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 16835; i <= 17158; i++) - materials[i] = Material.StoneBrickWall; - materials[6780] = Material.StoneBricks; - for (int i = 5926; i <= 5949; i++) - materials[i] = Material.StoneButton; - for (int i = 5826; i <= 5827; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 12117; i <= 12122; i++) - materials[i] = Material.StoneSlab; - for (int i = 14497; i <= 14576; i++) - materials[i] = Material.StoneStairs; - for (int i = 19522; i <= 19525; i++) - materials[i] = Material.Stonecutter; - for (int i = 180; i <= 182; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 237; i <= 239; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 198; i <= 200; i++) - materials[i] = Material.StrippedBambooBlock; - for (int i = 174; i <= 176; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 231; i <= 233; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 183; i <= 185; i++) - materials[i] = Material.StrippedCherryLog; - for (int i = 240; i <= 242; i++) - materials[i] = Material.StrippedCherryWood; - for (int i = 19660; i <= 19662; i++) - materials[i] = Material.StrippedCrimsonHyphae; - for (int i = 19654; i <= 19656; i++) - materials[i] = Material.StrippedCrimsonStem; - for (int i = 186; i <= 188; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 243; i <= 245; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 177; i <= 179; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 234; i <= 236; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 195; i <= 197; i++) - materials[i] = Material.StrippedMangroveLog; - for (int i = 249; i <= 251; i++) - materials[i] = Material.StrippedMangroveWood; - for (int i = 192; i <= 194; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 225; i <= 227; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 189; i <= 191; i++) - materials[i] = Material.StrippedPaleOakLog; - for (int i = 246; i <= 248; i++) - materials[i] = Material.StrippedPaleOakWood; - for (int i = 171; i <= 173; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 228; i <= 230; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 19643; i <= 19645; i++) - materials[i] = Material.StrippedWarpedHyphae; - for (int i = 19637; i <= 19639; i++) - materials[i] = Material.StrippedWarpedStem; - for (int i = 20411; i <= 20414; i++) - materials[i] = Material.StructureBlock; - materials[13572] = Material.StructureVoid; - for (int i = 5978; i <= 5993; i++) - materials[i] = Material.SugarCane; - for (int i = 11636; i <= 11637; i++) - materials[i] = Material.Sunflower; - for (int i = 125; i <= 128; i++) - materials[i] = Material.SuspiciousGravel; - for (int i = 119; i <= 122; i++) - materials[i] = Material.SuspiciousSand; - for (int i = 19630; i <= 19633; i++) - materials[i] = Material.SweetBerryBush; - materials[2053] = Material.TallDryGrass; - for (int i = 11644; i <= 11645; i++) - materials[i] = Material.TallGrass; - for (int i = 2055; i <= 2056; i++) - materials[i] = Material.TallSeagrass; - for (int i = 20441; i <= 20456; i++) - materials[i] = Material.Target; - materials[11633] = Material.Terracotta; - for (int i = 20427; i <= 20430; i++) - materials[i] = Material.TestBlock; - materials[20431] = Material.TestInstanceBlock; - materials[23377] = Material.TintedGlass; - for (int i = 2140; i <= 2141; i++) - materials[i] = Material.Tnt; - materials[2401] = Material.Torch; - materials[2122] = Material.Torchflower; - for (int i = 13518; i <= 13519; i++) - materials[i] = Material.TorchflowerCrop; - for (int i = 9928; i <= 9951; i++) - materials[i] = Material.TrappedChest; - for (int i = 27730; i <= 27741; i++) - materials[i] = Material.TrialSpawner; - for (int i = 8321; i <= 8448; i++) - materials[i] = Material.Tripwire; - for (int i = 8305; i <= 8320; i++) - materials[i] = Material.TripwireHook; - for (int i = 13878; i <= 13879; i++) - materials[i] = Material.TubeCoral; - materials[13863] = Material.TubeCoralBlock; - for (int i = 13898; i <= 13899; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 13948; i <= 13955; i++) - materials[i] = Material.TubeCoralWallFan; - materials[22141] = Material.Tuff; - for (int i = 22965; i <= 22970; i++) - materials[i] = Material.TuffBrickSlab; - for (int i = 22971; i <= 23050; i++) - materials[i] = Material.TuffBrickStairs; - for (int i = 23051; i <= 23374; i++) - materials[i] = Material.TuffBrickWall; - materials[22964] = Material.TuffBricks; - for (int i = 22142; i <= 22147; i++) - materials[i] = Material.TuffSlab; - for (int i = 22148; i <= 22227; i++) - materials[i] = Material.TuffStairs; - for (int i = 22228; i <= 22551; i++) - materials[i] = Material.TuffWall; - for (int i = 13811; i <= 13822; i++) - materials[i] = Material.TurtleEgg; - for (int i = 19693; i <= 19718; i++) - materials[i] = Material.TwistingVines; - materials[19719] = Material.TwistingVinesPlant; - for (int i = 27742; i <= 27773; i++) - materials[i] = Material.Vault; - for (int i = 27658; i <= 27660; i++) - materials[i] = Material.VerdantFroglight; - for (int i = 7080; i <= 7111; i++) - materials[i] = Material.Vine; - materials[14013] = Material.VoidAir; - for (int i = 2402; i <= 2405; i++) - materials[i] = Material.WallTorch; - for (int i = 20179; i <= 20202; i++) - materials[i] = Material.WarpedButton; - for (int i = 20267; i <= 20330; i++) - materials[i] = Material.WarpedDoor; - for (int i = 19771; i <= 19802; i++) - materials[i] = Material.WarpedFence; - for (int i = 19963; i <= 19994; i++) - materials[i] = Material.WarpedFenceGate; - materials[19647] = Material.WarpedFungus; - for (int i = 5514; i <= 5577; i++) - materials[i] = Material.WarpedHangingSign; - for (int i = 19640; i <= 19642; i++) - materials[i] = Material.WarpedHyphae; - materials[19646] = Material.WarpedNylium; - materials[19722] = Material.WarpedPlanks; - for (int i = 19737; i <= 19738; i++) - materials[i] = Material.WarpedPressurePlate; - materials[19649] = Material.WarpedRoots; - for (int i = 20363; i <= 20394; i++) - materials[i] = Material.WarpedSign; - for (int i = 19729; i <= 19734; i++) - materials[i] = Material.WarpedSlab; - for (int i = 20075; i <= 20154; i++) - materials[i] = Material.WarpedStairs; - for (int i = 19634; i <= 19636; i++) - materials[i] = Material.WarpedStem; - for (int i = 19867; i <= 19930; i++) - materials[i] = Material.WarpedTrapdoor; - for (int i = 5786; i <= 5793; i++) - materials[i] = Material.WarpedWallHangingSign; - for (int i = 20403; i <= 20410; i++) - materials[i] = Material.WarpedWallSign; - materials[19648] = Material.WarpedWartBlock; - for (int i = 86; i <= 101; i++) - materials[i] = Material.Water; - for (int i = 8183; i <= 8185; i++) - materials[i] = Material.WaterCauldron; - materials[24015] = Material.WaxedChiseledCopper; - materials[24360] = Material.WaxedCopperBlock; - for (int i = 25768; i <= 25771; i++) - materials[i] = Material.WaxedCopperBulb; - for (int i = 24968; i <= 25031; i++) - materials[i] = Material.WaxedCopperDoor; - for (int i = 25744; i <= 25745; i++) - materials[i] = Material.WaxedCopperGrate; - for (int i = 25480; i <= 25543; i++) - materials[i] = Material.WaxedCopperTrapdoor; - materials[24367] = Material.WaxedCutCopper; - for (int i = 24706; i <= 24711; i++) - materials[i] = Material.WaxedCutCopperSlab; - for (int i = 24608; i <= 24687; i++) - materials[i] = Material.WaxedCutCopperStairs; - materials[24014] = Material.WaxedExposedChiseledCopper; - materials[24362] = Material.WaxedExposedCopper; - for (int i = 25772; i <= 25775; i++) - materials[i] = Material.WaxedExposedCopperBulb; - for (int i = 25032; i <= 25095; i++) - materials[i] = Material.WaxedExposedCopperDoor; - for (int i = 25746; i <= 25747; i++) - materials[i] = Material.WaxedExposedCopperGrate; - for (int i = 25544; i <= 25607; i++) - materials[i] = Material.WaxedExposedCopperTrapdoor; - materials[24366] = Material.WaxedExposedCutCopper; - for (int i = 24700; i <= 24705; i++) - materials[i] = Material.WaxedExposedCutCopperSlab; - for (int i = 24528; i <= 24607; i++) - materials[i] = Material.WaxedExposedCutCopperStairs; - materials[24012] = Material.WaxedOxidizedChiseledCopper; - materials[24363] = Material.WaxedOxidizedCopper; - for (int i = 25780; i <= 25783; i++) - materials[i] = Material.WaxedOxidizedCopperBulb; - for (int i = 25096; i <= 25159; i++) - materials[i] = Material.WaxedOxidizedCopperDoor; - for (int i = 25750; i <= 25751; i++) - materials[i] = Material.WaxedOxidizedCopperGrate; - for (int i = 25608; i <= 25671; i++) - materials[i] = Material.WaxedOxidizedCopperTrapdoor; - materials[24364] = Material.WaxedOxidizedCutCopper; - for (int i = 24688; i <= 24693; i++) - materials[i] = Material.WaxedOxidizedCutCopperSlab; - for (int i = 24368; i <= 24447; i++) - materials[i] = Material.WaxedOxidizedCutCopperStairs; - materials[24013] = Material.WaxedWeatheredChiseledCopper; - materials[24361] = Material.WaxedWeatheredCopper; - for (int i = 25776; i <= 25779; i++) - materials[i] = Material.WaxedWeatheredCopperBulb; - for (int i = 25160; i <= 25223; i++) - materials[i] = Material.WaxedWeatheredCopperDoor; - for (int i = 25748; i <= 25749; i++) - materials[i] = Material.WaxedWeatheredCopperGrate; - for (int i = 25672; i <= 25735; i++) - materials[i] = Material.WaxedWeatheredCopperTrapdoor; - materials[24365] = Material.WaxedWeatheredCutCopper; - for (int i = 24694; i <= 24699; i++) - materials[i] = Material.WaxedWeatheredCutCopperSlab; - for (int i = 24448; i <= 24527; i++) - materials[i] = Material.WaxedWeatheredCutCopperStairs; - materials[24009] = Material.WeatheredChiseledCopper; - materials[24000] = Material.WeatheredCopper; - for (int i = 25760; i <= 25763; i++) - materials[i] = Material.WeatheredCopperBulb; - for (int i = 24904; i <= 24967; i++) - materials[i] = Material.WeatheredCopperDoor; - for (int i = 25740; i <= 25741; i++) - materials[i] = Material.WeatheredCopperGrate; - for (int i = 25416; i <= 25479; i++) - materials[i] = Material.WeatheredCopperTrapdoor; - materials[24005] = Material.WeatheredCutCopper; - for (int i = 24342; i <= 24347; i++) - materials[i] = Material.WeatheredCutCopperSlab; - for (int i = 24096; i <= 24175; i++) - materials[i] = Material.WeatheredCutCopperStairs; - for (int i = 19666; i <= 19691; i++) - materials[i] = Material.WeepingVines; - materials[19692] = Material.WeepingVinesPlant; - materials[561] = Material.WetSponge; - for (int i = 4342; i <= 4349; i++) - materials[i] = Material.Wheat; - for (int i = 11648; i <= 11663; i++) - materials[i] = Material.WhiteBanner; - for (int i = 1731; i <= 1746; i++) - materials[i] = Material.WhiteBed; - for (int i = 21801; i <= 21816; i++) - materials[i] = Material.WhiteCandle; - for (int i = 22059; i <= 22060; i++) - materials[i] = Material.WhiteCandleCake; - materials[11617] = Material.WhiteCarpet; - materials[13751] = Material.WhiteConcrete; - materials[13767] = Material.WhiteConcretePowder; - for (int i = 13687; i <= 13690; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 13591; i <= 13596; i++) - materials[i] = Material.WhiteShulkerBox; - materials[6124] = Material.WhiteStainedGlass; - for (int i = 10181; i <= 10212; i++) - materials[i] = Material.WhiteStainedGlassPane; - materials[10165] = Material.WhiteTerracotta; - materials[2129] = Material.WhiteTulip; - for (int i = 11904; i <= 11907; i++) - materials[i] = Material.WhiteWallBanner; - materials[2093] = Material.WhiteWool; - for (int i = 25903; i <= 25918; i++) - materials[i] = Material.Wildflowers; - materials[2133] = Material.WitherRose; - for (int i = 9676; i <= 9707; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 9708; i <= 9715; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 11712; i <= 11727; i++) - materials[i] = Material.YellowBanner; - for (int i = 1795; i <= 1810; i++) - materials[i] = Material.YellowBed; - for (int i = 21865; i <= 21880; i++) - materials[i] = Material.YellowCandle; - for (int i = 22067; i <= 22068; i++) - materials[i] = Material.YellowCandleCake; - materials[11621] = Material.YellowCarpet; - materials[13755] = Material.YellowConcrete; - materials[13771] = Material.YellowConcretePowder; - for (int i = 13703; i <= 13706; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 13615; i <= 13620; i++) - materials[i] = Material.YellowShulkerBox; - materials[6128] = Material.YellowStainedGlass; - for (int i = 10309; i <= 10340; i++) - materials[i] = Material.YellowStainedGlassPane; - materials[10169] = Material.YellowTerracotta; - for (int i = 11920; i <= 11923; i++) - materials[i] = Material.YellowWallBanner; - materials[2097] = Material.YellowWool; - for (int i = 9716; i <= 9747; i++) - materials[i] = Material.ZombieHead; - for (int i = 9748; i <= 9755; i++) - materials[i] = Material.ZombieWallHead; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(22, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(29, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(31, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(33, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(35, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(37, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(39, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(41, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(43, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(45, 40, - [ - new("age", ["0", "1", "2", "3", "4"], 8), - new("hanging", ["true", "false"], 4), - new("stage", ["0", "1"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(86, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(102, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(119, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(125, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(136, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(139, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(142, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(145, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(148, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(151, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(154, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(157, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(160, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(163, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(165, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(168, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(171, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(174, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(177, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(180, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(183, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(186, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(189, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(192, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(195, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(198, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(201, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(204, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(207, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(210, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(213, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(216, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(219, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(222, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(225, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(228, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(231, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(234, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(237, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(240, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(243, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(246, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(249, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(252, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(280, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(308, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(336, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(364, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(392, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(420, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(448, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(476, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(504, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(532, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(566, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(581, 1150, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling", "zombie", "skeleton", "creeper", "dragon", "wither_skeleton", "piglin", "custom_head"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1731, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1747, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1763, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1779, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1795, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1811, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1827, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1843, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1859, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1875, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1891, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1907, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1923, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1939, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1955, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1971, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1987, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2011, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2035, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2055, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(2057, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2069, 24, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2) - ]), - new(2109, 12, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 2) - ]), - new(2140, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(2143, 256, - [ - new("facing", ["north", "south", "west", "east"], 64), - new("slot_0_occupied", ["true", "false"], 32), - new("slot_1_occupied", ["true", "false"], 16), - new("slot_2_occupied", ["true", "false"], 8), - new("slot_3_occupied", ["true", "false"], 4), - new("slot_4_occupied", ["true", "false"], 2), - new("slot_5_occupied", ["true", "false"], 1) - ]), - new(2402, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(2406, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(2920, 18, - [ - new("axis", ["x", "y", "z"], 6), - new("creaking_heart_state", ["uprooted", "dormant", "awake"], 2), - new("natural", ["true", "false"], 1) - ]), - new(2938, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3018, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(3042, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(4342, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4350, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(4358, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(4366, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4398, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4430, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4462, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4494, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4526, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4558, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4590, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4622, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4654, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4686, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(4750, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4758, 20, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4778, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4858, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4866, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4874, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4882, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4890, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4898, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4906, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4914, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4922, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4930, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(4938, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5002, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5066, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5130, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5194, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5258, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5322, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5386, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5450, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5514, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5578, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5642, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5706, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5714, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5722, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5730, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5738, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5746, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5754, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5762, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5770, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5778, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5786, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5794, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5802, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5826, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5828, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5892, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5894, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5896, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5898, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5900, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5902, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5904, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5906, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5908, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5910, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(5912, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5914, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5916, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(5918, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(5926, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5950, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(5960, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5978, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(5994, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(5996, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6031, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(6034, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(6038, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6043, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(6045, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6049, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6053, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(6060, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6140, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6204, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6268, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6332, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6396, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6460, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6524, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6588, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6652, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6716, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6792, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6856, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6920, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6984, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7016, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7022, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7056, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7060, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7064, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(7072, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(7080, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7112, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7240, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7368, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7400, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7480, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7560, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7640, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(7645, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7725, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7731, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(8057, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8089, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8169, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(8174, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(8183, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(8187, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(8191, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8201, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(8203, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8215, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8297, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8305, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8321, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8450, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8530, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8610, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8690, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(8703, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(9027, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(9380, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(9388, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(9396, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9420, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9444, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9468, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9492, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9516, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9540, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9564, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9588, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9612, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9636, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9668, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9676, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9708, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9716, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9748, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9756, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9788, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9796, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9828, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9836, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9868, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9876, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9908, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9916, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9920, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9924, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9928, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(9952, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9968, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(9984, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10000, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10034, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(10046, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(10049, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10129, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10153, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(10181, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10213, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10245, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10277, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10309, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10341, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10373, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10405, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10437, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10469, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10501, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10533, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10565, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10597, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10629, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10661, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(10693, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10773, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10853, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(10933, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11013, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11093, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11173, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11254, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(11256, 32, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11288, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11355, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11435, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11515, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11595, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11601, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11607, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11614, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(11636, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11638, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11640, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11642, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11644, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11646, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(11648, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11664, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11680, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11696, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11712, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11728, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11744, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11760, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11776, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11792, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11808, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11824, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11840, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11856, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11872, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11888, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11904, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11908, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11912, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11916, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11920, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11924, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11928, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11932, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11936, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11940, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11944, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11948, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11952, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11956, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11960, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11964, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11971, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12051, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12057, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12063, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12069, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12075, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12081, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12087, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12093, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12099, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12105, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12111, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12117, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12123, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12129, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12135, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12141, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12147, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12153, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12159, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12165, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12171, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12177, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12183, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12189, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12195, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12205, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12237, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12269, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12301, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12333, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12365, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12397, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12429, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12461, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12493, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12525, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12557, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12589, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12621, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12653, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12685, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12717, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12749, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(12781, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12845, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12909, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(12973, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13037, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13101, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13165, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13229, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13293, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13357, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13363, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13427, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(13434, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(13437, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13518, 2, - [ - new("age", ["0", "1"], 1) - ]), - new(13520, 10, - [ - new("age", ["0", "1", "2", "3", "4"], 2), - new("half", ["upper", "lower"], 1) - ]), - new(13530, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(13532, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(13538, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13550, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13562, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(13569, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(13573, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13585, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13591, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13597, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13603, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13609, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13615, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13621, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13627, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13633, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13639, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13645, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13651, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13657, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13663, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13669, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13675, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13681, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(13687, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13691, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13695, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13699, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13703, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13707, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13711, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13715, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13719, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13723, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13727, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13731, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13735, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13739, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13743, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13747, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13783, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(13811, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(13823, 3, - [ - new("hatch", ["0", "1", "2"], 1) - ]), - new(13826, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("hydration", ["0", "1", "2", "3"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13868, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13870, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13872, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13874, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13876, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13878, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13880, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13882, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13884, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13886, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13888, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13890, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13892, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13894, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13896, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13898, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13900, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13902, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13904, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13906, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(13908, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13916, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13924, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13932, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13940, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13948, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13956, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13964, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13972, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13980, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13988, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13997, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14000, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(14015, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(14017, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14097, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14177, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14257, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14337, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14417, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14497, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14577, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14657, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14737, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14817, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14897, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14977, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15057, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15137, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15143, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15149, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15155, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15161, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15167, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15173, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15179, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15185, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15191, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15197, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15203, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15209, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15215, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15539, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(15863, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16187, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16511, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16835, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17159, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17483, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17807, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18131, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18455, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18779, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19103, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19427, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19459, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(19463, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(19475, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(19483, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(19493, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(19505, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19522, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(19526, 32, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19558, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19562, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19566, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19598, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19630, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(19634, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19637, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19640, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19643, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19651, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19654, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19657, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19660, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(19666, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(19693, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(19723, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19729, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19735, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(19737, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(19739, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(19771, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(19803, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19867, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(19931, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19963, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(19995, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20075, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20155, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20179, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20203, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20267, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20331, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20363, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20395, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20403, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20411, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(20415, 12, - [ - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 1) - ]), - new(20427, 4, - [ - new("mode", ["start", "log", "fail", "accept"], 1) - ]), - new(20432, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(20441, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(20457, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(20481, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(20510, 5, - [ - new("charges", ["0", "1", "2", "3", "4"], 1) - ]), - new(20521, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20601, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20925, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20935, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20941, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21021, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(21346, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21426, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21432, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(21434, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21458, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(21785, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21801, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21817, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21833, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21849, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21865, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21881, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21897, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21913, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21929, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21945, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21961, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21977, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21993, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22009, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22025, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22041, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22057, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22059, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22061, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22063, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22065, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22067, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22069, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22071, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22073, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22075, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22077, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22079, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22081, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22083, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22085, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22087, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22089, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(22093, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22105, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22117, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22129, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22142, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22148, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22228, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22553, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22559, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22639, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22965, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22971, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23051, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(23379, 96, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23475, 384, - [ - new("facing", ["north", "south", "west", "east"], 96), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23860, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(23988, 2, - [ - new("bloom", ["true", "false"], 1) - ]), - new(23990, 8, - [ - new("can_summon", ["true", "false"], 4), - new("shrieking", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24016, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24096, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24176, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24256, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24336, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24342, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24348, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24354, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24368, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24448, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24528, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24608, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24688, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24694, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24700, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24706, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24712, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24776, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24840, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24904, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(24968, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25032, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25096, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25160, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25224, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25288, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25352, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25416, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25480, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25544, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25608, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25672, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25736, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25738, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25740, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25742, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25744, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25746, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25748, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25750, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25752, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25756, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25760, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25764, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25768, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25772, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25776, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25780, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25784, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25808, 20, - [ - new("thickness", ["tip_merge", "tip", "frustum", "middle", "base"], 4), - new("vertical_direction", ["up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25829, 52, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 2), - new("berries", ["true", "false"], 1) - ]), - new(25881, 2, - [ - new("berries", ["true", "false"], 1) - ]), - new(25887, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("flower_amount", ["1", "2", "3", "4"], 1) - ]), - new(25903, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("flower_amount", ["1", "2", "3", "4"], 1) - ]), - new(25919, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("segment_amount", ["1", "2", "3", "4"], 1) - ]), - new(25936, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("tilt", ["none", "unstable", "partial", "full"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25968, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25976, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("half", ["upper", "lower"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25992, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(25996, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(26000, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26080, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26086, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(26411, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26491, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26497, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(26822, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26902, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26908, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(27233, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27313, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27319, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(27646, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27655, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27658, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27661, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27666, 16, - [ - new("cracked", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27682, 48, - [ - new("crafting", ["true", "false"], 24), - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(27730, 12, - [ - new("ominous", ["true", "false"], 6), - new("trial_spawner_state", ["inactive", "waiting_for_players", "active", "waiting_for_reward_ejection", "ejecting_reward", "cooldown"], 1) - ]), - new(27742, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("ominous", ["true", "false"], 4), - new("vault_state", ["inactive", "active", "unlocking", "ejecting"], 1) - ]), - new(27774, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(27777, 162, - [ - new("bottom", ["true", "false"], 81), - new("east", ["none", "low", "tall"], 27), - new("north", ["none", "low", "tall"], 9), - new("south", ["none", "low", "tall"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(27939, 2, - [ - new("tip", ["true", "false"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette1219.cs b/MinecraftClient/Mapping/BlockPalettes/Palette1219.cs deleted file mode 100644 index 7ac2ce5809..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette1219.cs +++ /dev/null @@ -1,6676 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - public class Palette1219 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette1219() - { - for (int i = 0; i <= 0; i++) - materials[i] = Material.Air; - for (int i = 1; i <= 1; i++) - materials[i] = Material.Stone; - for (int i = 2; i <= 2; i++) - materials[i] = Material.Granite; - for (int i = 3; i <= 3; i++) - materials[i] = Material.PolishedGranite; - for (int i = 4; i <= 4; i++) - materials[i] = Material.Diorite; - for (int i = 5; i <= 5; i++) - materials[i] = Material.PolishedDiorite; - for (int i = 6; i <= 6; i++) - materials[i] = Material.Andesite; - for (int i = 7; i <= 7; i++) - materials[i] = Material.PolishedAndesite; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - for (int i = 10; i <= 10; i++) - materials[i] = Material.Dirt; - for (int i = 11; i <= 11; i++) - materials[i] = Material.CoarseDirt; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - for (int i = 14; i <= 14; i++) - materials[i] = Material.Cobblestone; - for (int i = 15; i <= 15; i++) - materials[i] = Material.OakPlanks; - for (int i = 16; i <= 16; i++) - materials[i] = Material.SprucePlanks; - for (int i = 17; i <= 17; i++) - materials[i] = Material.BirchPlanks; - for (int i = 18; i <= 18; i++) - materials[i] = Material.JunglePlanks; - for (int i = 19; i <= 19; i++) - materials[i] = Material.AcaciaPlanks; - for (int i = 20; i <= 20; i++) - materials[i] = Material.CherryPlanks; - for (int i = 21; i <= 21; i++) - materials[i] = Material.DarkOakPlanks; - for (int i = 22; i <= 24; i++) - materials[i] = Material.PaleOakWood; - for (int i = 25; i <= 25; i++) - materials[i] = Material.PaleOakPlanks; - for (int i = 26; i <= 26; i++) - materials[i] = Material.MangrovePlanks; - for (int i = 27; i <= 27; i++) - materials[i] = Material.BambooPlanks; - for (int i = 28; i <= 28; i++) - materials[i] = Material.BambooMosaic; - for (int i = 29; i <= 30; i++) - materials[i] = Material.OakSapling; - for (int i = 31; i <= 32; i++) - materials[i] = Material.SpruceSapling; - for (int i = 33; i <= 34; i++) - materials[i] = Material.BirchSapling; - for (int i = 35; i <= 36; i++) - materials[i] = Material.JungleSapling; - for (int i = 37; i <= 38; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 39; i <= 40; i++) - materials[i] = Material.CherrySapling; - for (int i = 41; i <= 42; i++) - materials[i] = Material.DarkOakSapling; - for (int i = 43; i <= 44; i++) - materials[i] = Material.PaleOakSapling; - for (int i = 45; i <= 84; i++) - materials[i] = Material.MangrovePropagule; - for (int i = 85; i <= 85; i++) - materials[i] = Material.Bedrock; - for (int i = 86; i <= 101; i++) - materials[i] = Material.Water; - for (int i = 102; i <= 117; i++) - materials[i] = Material.Lava; - for (int i = 118; i <= 118; i++) - materials[i] = Material.Sand; - for (int i = 119; i <= 122; i++) - materials[i] = Material.SuspiciousSand; - for (int i = 123; i <= 123; i++) - materials[i] = Material.RedSand; - for (int i = 124; i <= 124; i++) - materials[i] = Material.Gravel; - for (int i = 125; i <= 128; i++) - materials[i] = Material.SuspiciousGravel; - for (int i = 129; i <= 129; i++) - materials[i] = Material.GoldOre; - for (int i = 130; i <= 130; i++) - materials[i] = Material.DeepslateGoldOre; - for (int i = 131; i <= 131; i++) - materials[i] = Material.IronOre; - for (int i = 132; i <= 132; i++) - materials[i] = Material.DeepslateIronOre; - for (int i = 133; i <= 133; i++) - materials[i] = Material.CoalOre; - for (int i = 134; i <= 134; i++) - materials[i] = Material.DeepslateCoalOre; - for (int i = 135; i <= 135; i++) - materials[i] = Material.NetherGoldOre; - for (int i = 136; i <= 138; i++) - materials[i] = Material.OakLog; - for (int i = 139; i <= 141; i++) - materials[i] = Material.SpruceLog; - for (int i = 142; i <= 144; i++) - materials[i] = Material.BirchLog; - for (int i = 145; i <= 147; i++) - materials[i] = Material.JungleLog; - for (int i = 148; i <= 150; i++) - materials[i] = Material.AcaciaLog; - for (int i = 151; i <= 153; i++) - materials[i] = Material.CherryLog; - for (int i = 154; i <= 156; i++) - materials[i] = Material.DarkOakLog; - for (int i = 157; i <= 159; i++) - materials[i] = Material.PaleOakLog; - for (int i = 160; i <= 162; i++) - materials[i] = Material.MangroveLog; - for (int i = 163; i <= 164; i++) - materials[i] = Material.MangroveRoots; - for (int i = 165; i <= 167; i++) - materials[i] = Material.MuddyMangroveRoots; - for (int i = 168; i <= 170; i++) - materials[i] = Material.BambooBlock; - for (int i = 171; i <= 173; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 174; i <= 176; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 177; i <= 179; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 180; i <= 182; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 183; i <= 185; i++) - materials[i] = Material.StrippedCherryLog; - for (int i = 186; i <= 188; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 189; i <= 191; i++) - materials[i] = Material.StrippedPaleOakLog; - for (int i = 192; i <= 194; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 195; i <= 197; i++) - materials[i] = Material.StrippedMangroveLog; - for (int i = 198; i <= 200; i++) - materials[i] = Material.StrippedBambooBlock; - for (int i = 201; i <= 203; i++) - materials[i] = Material.OakWood; - for (int i = 204; i <= 206; i++) - materials[i] = Material.SpruceWood; - for (int i = 207; i <= 209; i++) - materials[i] = Material.BirchWood; - for (int i = 210; i <= 212; i++) - materials[i] = Material.JungleWood; - for (int i = 213; i <= 215; i++) - materials[i] = Material.AcaciaWood; - for (int i = 216; i <= 218; i++) - materials[i] = Material.CherryWood; - for (int i = 219; i <= 221; i++) - materials[i] = Material.DarkOakWood; - for (int i = 222; i <= 224; i++) - materials[i] = Material.MangroveWood; - for (int i = 225; i <= 227; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 228; i <= 230; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 231; i <= 233; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 234; i <= 236; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 237; i <= 239; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 240; i <= 242; i++) - materials[i] = Material.StrippedCherryWood; - for (int i = 243; i <= 245; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 246; i <= 248; i++) - materials[i] = Material.StrippedPaleOakWood; - for (int i = 249; i <= 251; i++) - materials[i] = Material.StrippedMangroveWood; - for (int i = 252; i <= 279; i++) - materials[i] = Material.OakLeaves; - for (int i = 280; i <= 307; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 308; i <= 335; i++) - materials[i] = Material.BirchLeaves; - for (int i = 336; i <= 363; i++) - materials[i] = Material.JungleLeaves; - for (int i = 364; i <= 391; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 392; i <= 419; i++) - materials[i] = Material.CherryLeaves; - for (int i = 420; i <= 447; i++) - materials[i] = Material.DarkOakLeaves; - for (int i = 448; i <= 475; i++) - materials[i] = Material.PaleOakLeaves; - for (int i = 476; i <= 503; i++) - materials[i] = Material.MangroveLeaves; - for (int i = 504; i <= 531; i++) - materials[i] = Material.AzaleaLeaves; - for (int i = 532; i <= 559; i++) - materials[i] = Material.FloweringAzaleaLeaves; - for (int i = 560; i <= 560; i++) - materials[i] = Material.Sponge; - for (int i = 561; i <= 561; i++) - materials[i] = Material.WetSponge; - for (int i = 562; i <= 562; i++) - materials[i] = Material.Glass; - for (int i = 563; i <= 563; i++) - materials[i] = Material.LapisOre; - for (int i = 564; i <= 564; i++) - materials[i] = Material.DeepslateLapisOre; - for (int i = 565; i <= 565; i++) - materials[i] = Material.LapisBlock; - for (int i = 566; i <= 577; i++) - materials[i] = Material.Dispenser; - for (int i = 578; i <= 578; i++) - materials[i] = Material.Sandstone; - for (int i = 579; i <= 579; i++) - materials[i] = Material.ChiseledSandstone; - for (int i = 580; i <= 580; i++) - materials[i] = Material.CutSandstone; - for (int i = 581; i <= 1730; i++) - materials[i] = Material.NoteBlock; - for (int i = 1731; i <= 1746; i++) - materials[i] = Material.WhiteBed; - for (int i = 1747; i <= 1762; i++) - materials[i] = Material.OrangeBed; - for (int i = 1763; i <= 1778; i++) - materials[i] = Material.MagentaBed; - for (int i = 1779; i <= 1794; i++) - materials[i] = Material.LightBlueBed; - for (int i = 1795; i <= 1810; i++) - materials[i] = Material.YellowBed; - for (int i = 1811; i <= 1826; i++) - materials[i] = Material.LimeBed; - for (int i = 1827; i <= 1842; i++) - materials[i] = Material.PinkBed; - for (int i = 1843; i <= 1858; i++) - materials[i] = Material.GrayBed; - for (int i = 1859; i <= 1874; i++) - materials[i] = Material.LightGrayBed; - for (int i = 1875; i <= 1890; i++) - materials[i] = Material.CyanBed; - for (int i = 1891; i <= 1906; i++) - materials[i] = Material.PurpleBed; - for (int i = 1907; i <= 1922; i++) - materials[i] = Material.BlueBed; - for (int i = 1923; i <= 1938; i++) - materials[i] = Material.BrownBed; - for (int i = 1939; i <= 1954; i++) - materials[i] = Material.GreenBed; - for (int i = 1955; i <= 1970; i++) - materials[i] = Material.RedBed; - for (int i = 1971; i <= 1986; i++) - materials[i] = Material.BlackBed; - for (int i = 1987; i <= 2010; i++) - materials[i] = Material.PoweredRail; - for (int i = 2011; i <= 2034; i++) - materials[i] = Material.DetectorRail; - for (int i = 2035; i <= 2046; i++) - materials[i] = Material.StickyPiston; - for (int i = 2047; i <= 2047; i++) - materials[i] = Material.Cobweb; - for (int i = 2048; i <= 2048; i++) - materials[i] = Material.ShortGrass; - for (int i = 2049; i <= 2049; i++) - materials[i] = Material.Fern; - for (int i = 2050; i <= 2050; i++) - materials[i] = Material.DeadBush; - for (int i = 2051; i <= 2051; i++) - materials[i] = Material.Bush; - for (int i = 2052; i <= 2052; i++) - materials[i] = Material.ShortDryGrass; - for (int i = 2053; i <= 2053; i++) - materials[i] = Material.TallDryGrass; - for (int i = 2054; i <= 2054; i++) - materials[i] = Material.Seagrass; - for (int i = 2055; i <= 2056; i++) - materials[i] = Material.TallSeagrass; - for (int i = 2057; i <= 2068; i++) - materials[i] = Material.Piston; - for (int i = 2069; i <= 2092; i++) - materials[i] = Material.PistonHead; - for (int i = 2093; i <= 2093; i++) - materials[i] = Material.WhiteWool; - for (int i = 2094; i <= 2094; i++) - materials[i] = Material.OrangeWool; - for (int i = 2095; i <= 2095; i++) - materials[i] = Material.MagentaWool; - for (int i = 2096; i <= 2096; i++) - materials[i] = Material.LightBlueWool; - for (int i = 2097; i <= 2097; i++) - materials[i] = Material.YellowWool; - for (int i = 2098; i <= 2098; i++) - materials[i] = Material.LimeWool; - for (int i = 2099; i <= 2099; i++) - materials[i] = Material.PinkWool; - for (int i = 2100; i <= 2100; i++) - materials[i] = Material.GrayWool; - for (int i = 2101; i <= 2101; i++) - materials[i] = Material.LightGrayWool; - for (int i = 2102; i <= 2102; i++) - materials[i] = Material.CyanWool; - for (int i = 2103; i <= 2103; i++) - materials[i] = Material.PurpleWool; - for (int i = 2104; i <= 2104; i++) - materials[i] = Material.BlueWool; - for (int i = 2105; i <= 2105; i++) - materials[i] = Material.BrownWool; - for (int i = 2106; i <= 2106; i++) - materials[i] = Material.GreenWool; - for (int i = 2107; i <= 2107; i++) - materials[i] = Material.RedWool; - for (int i = 2108; i <= 2108; i++) - materials[i] = Material.BlackWool; - for (int i = 2109; i <= 2120; i++) - materials[i] = Material.MovingPiston; - for (int i = 2121; i <= 2121; i++) - materials[i] = Material.Dandelion; - for (int i = 2122; i <= 2122; i++) - materials[i] = Material.Torchflower; - for (int i = 2123; i <= 2123; i++) - materials[i] = Material.Poppy; - for (int i = 2124; i <= 2124; i++) - materials[i] = Material.BlueOrchid; - for (int i = 2125; i <= 2125; i++) - materials[i] = Material.Allium; - for (int i = 2126; i <= 2126; i++) - materials[i] = Material.AzureBluet; - for (int i = 2127; i <= 2127; i++) - materials[i] = Material.RedTulip; - for (int i = 2128; i <= 2128; i++) - materials[i] = Material.OrangeTulip; - for (int i = 2129; i <= 2129; i++) - materials[i] = Material.WhiteTulip; - for (int i = 2130; i <= 2130; i++) - materials[i] = Material.PinkTulip; - for (int i = 2131; i <= 2131; i++) - materials[i] = Material.OxeyeDaisy; - for (int i = 2132; i <= 2132; i++) - materials[i] = Material.Cornflower; - for (int i = 2133; i <= 2133; i++) - materials[i] = Material.WitherRose; - for (int i = 2134; i <= 2134; i++) - materials[i] = Material.LilyOfTheValley; - for (int i = 2135; i <= 2135; i++) - materials[i] = Material.BrownMushroom; - for (int i = 2136; i <= 2136; i++) - materials[i] = Material.RedMushroom; - for (int i = 2137; i <= 2137; i++) - materials[i] = Material.GoldBlock; - for (int i = 2138; i <= 2138; i++) - materials[i] = Material.IronBlock; - for (int i = 2139; i <= 2139; i++) - materials[i] = Material.Bricks; - for (int i = 2140; i <= 2141; i++) - materials[i] = Material.Tnt; - for (int i = 2142; i <= 2142; i++) - materials[i] = Material.Bookshelf; - for (int i = 2143; i <= 2398; i++) - materials[i] = Material.ChiseledBookshelf; - for (int i = 2399; i <= 2462; i++) - materials[i] = Material.AcaciaShelf; - for (int i = 2463; i <= 2526; i++) - materials[i] = Material.BambooShelf; - for (int i = 2527; i <= 2590; i++) - materials[i] = Material.BirchShelf; - for (int i = 2591; i <= 2654; i++) - materials[i] = Material.CherryShelf; - for (int i = 2655; i <= 2718; i++) - materials[i] = Material.CrimsonShelf; - for (int i = 2719; i <= 2782; i++) - materials[i] = Material.DarkOakShelf; - for (int i = 2783; i <= 2846; i++) - materials[i] = Material.JungleShelf; - for (int i = 2847; i <= 2910; i++) - materials[i] = Material.MangroveShelf; - for (int i = 2911; i <= 2974; i++) - materials[i] = Material.OakShelf; - for (int i = 2975; i <= 3038; i++) - materials[i] = Material.PaleOakShelf; - for (int i = 3039; i <= 3102; i++) - materials[i] = Material.SpruceShelf; - for (int i = 3103; i <= 3166; i++) - materials[i] = Material.WarpedShelf; - for (int i = 3167; i <= 3167; i++) - materials[i] = Material.MossyCobblestone; - for (int i = 3168; i <= 3168; i++) - materials[i] = Material.Obsidian; - for (int i = 3169; i <= 3169; i++) - materials[i] = Material.Torch; - for (int i = 3170; i <= 3173; i++) - materials[i] = Material.WallTorch; - for (int i = 3174; i <= 3685; i++) - materials[i] = Material.Fire; - for (int i = 3686; i <= 3686; i++) - materials[i] = Material.SoulFire; - for (int i = 3687; i <= 3687; i++) - materials[i] = Material.Spawner; - for (int i = 3688; i <= 3705; i++) - materials[i] = Material.CreakingHeart; - for (int i = 3706; i <= 3785; i++) - materials[i] = Material.OakStairs; - for (int i = 3786; i <= 3809; i++) - materials[i] = Material.Chest; - for (int i = 3810; i <= 5105; i++) - materials[i] = Material.RedstoneWire; - for (int i = 5106; i <= 5106; i++) - materials[i] = Material.DiamondOre; - for (int i = 5107; i <= 5107; i++) - materials[i] = Material.DeepslateDiamondOre; - for (int i = 5108; i <= 5108; i++) - materials[i] = Material.DiamondBlock; - for (int i = 5109; i <= 5109; i++) - materials[i] = Material.CraftingTable; - for (int i = 5110; i <= 5117; i++) - materials[i] = Material.Wheat; - for (int i = 5118; i <= 5125; i++) - materials[i] = Material.Farmland; - for (int i = 5126; i <= 5133; i++) - materials[i] = Material.Furnace; - for (int i = 5134; i <= 5165; i++) - materials[i] = Material.OakSign; - for (int i = 5166; i <= 5197; i++) - materials[i] = Material.SpruceSign; - for (int i = 5198; i <= 5229; i++) - materials[i] = Material.BirchSign; - for (int i = 5230; i <= 5261; i++) - materials[i] = Material.AcaciaSign; - for (int i = 5262; i <= 5293; i++) - materials[i] = Material.CherrySign; - for (int i = 5294; i <= 5325; i++) - materials[i] = Material.JungleSign; - for (int i = 5326; i <= 5357; i++) - materials[i] = Material.DarkOakSign; - for (int i = 5358; i <= 5389; i++) - materials[i] = Material.PaleOakSign; - for (int i = 5390; i <= 5421; i++) - materials[i] = Material.MangroveSign; - for (int i = 5422; i <= 5453; i++) - materials[i] = Material.BambooSign; - for (int i = 5454; i <= 5517; i++) - materials[i] = Material.OakDoor; - for (int i = 5518; i <= 5525; i++) - materials[i] = Material.Ladder; - for (int i = 5526; i <= 5545; i++) - materials[i] = Material.Rail; - for (int i = 5546; i <= 5625; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 5626; i <= 5633; i++) - materials[i] = Material.OakWallSign; - for (int i = 5634; i <= 5641; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 5642; i <= 5649; i++) - materials[i] = Material.BirchWallSign; - for (int i = 5650; i <= 5657; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 5658; i <= 5665; i++) - materials[i] = Material.CherryWallSign; - for (int i = 5666; i <= 5673; i++) - materials[i] = Material.JungleWallSign; - for (int i = 5674; i <= 5681; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 5682; i <= 5689; i++) - materials[i] = Material.PaleOakWallSign; - for (int i = 5690; i <= 5697; i++) - materials[i] = Material.MangroveWallSign; - for (int i = 5698; i <= 5705; i++) - materials[i] = Material.BambooWallSign; - for (int i = 5706; i <= 5769; i++) - materials[i] = Material.OakHangingSign; - for (int i = 5770; i <= 5833; i++) - materials[i] = Material.SpruceHangingSign; - for (int i = 5834; i <= 5897; i++) - materials[i] = Material.BirchHangingSign; - for (int i = 5898; i <= 5961; i++) - materials[i] = Material.AcaciaHangingSign; - for (int i = 5962; i <= 6025; i++) - materials[i] = Material.CherryHangingSign; - for (int i = 6026; i <= 6089; i++) - materials[i] = Material.JungleHangingSign; - for (int i = 6090; i <= 6153; i++) - materials[i] = Material.DarkOakHangingSign; - for (int i = 6154; i <= 6217; i++) - materials[i] = Material.PaleOakHangingSign; - for (int i = 6218; i <= 6281; i++) - materials[i] = Material.CrimsonHangingSign; - for (int i = 6282; i <= 6345; i++) - materials[i] = Material.WarpedHangingSign; - for (int i = 6346; i <= 6409; i++) - materials[i] = Material.MangroveHangingSign; - for (int i = 6410; i <= 6473; i++) - materials[i] = Material.BambooHangingSign; - for (int i = 6474; i <= 6481; i++) - materials[i] = Material.OakWallHangingSign; - for (int i = 6482; i <= 6489; i++) - materials[i] = Material.SpruceWallHangingSign; - for (int i = 6490; i <= 6497; i++) - materials[i] = Material.BirchWallHangingSign; - for (int i = 6498; i <= 6505; i++) - materials[i] = Material.AcaciaWallHangingSign; - for (int i = 6506; i <= 6513; i++) - materials[i] = Material.CherryWallHangingSign; - for (int i = 6514; i <= 6521; i++) - materials[i] = Material.JungleWallHangingSign; - for (int i = 6522; i <= 6529; i++) - materials[i] = Material.DarkOakWallHangingSign; - for (int i = 6530; i <= 6537; i++) - materials[i] = Material.PaleOakWallHangingSign; - for (int i = 6538; i <= 6545; i++) - materials[i] = Material.MangroveWallHangingSign; - for (int i = 6546; i <= 6553; i++) - materials[i] = Material.CrimsonWallHangingSign; - for (int i = 6554; i <= 6561; i++) - materials[i] = Material.WarpedWallHangingSign; - for (int i = 6562; i <= 6569; i++) - materials[i] = Material.BambooWallHangingSign; - for (int i = 6570; i <= 6593; i++) - materials[i] = Material.Lever; - for (int i = 6594; i <= 6595; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 6596; i <= 6659; i++) - materials[i] = Material.IronDoor; - for (int i = 6660; i <= 6661; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 6662; i <= 6663; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 6664; i <= 6665; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 6666; i <= 6667; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 6668; i <= 6669; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 6670; i <= 6671; i++) - materials[i] = Material.CherryPressurePlate; - for (int i = 6672; i <= 6673; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 6674; i <= 6675; i++) - materials[i] = Material.PaleOakPressurePlate; - for (int i = 6676; i <= 6677; i++) - materials[i] = Material.MangrovePressurePlate; - for (int i = 6678; i <= 6679; i++) - materials[i] = Material.BambooPressurePlate; - for (int i = 6680; i <= 6681; i++) - materials[i] = Material.RedstoneOre; - for (int i = 6682; i <= 6683; i++) - materials[i] = Material.DeepslateRedstoneOre; - for (int i = 6684; i <= 6685; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 6686; i <= 6693; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 6694; i <= 6717; i++) - materials[i] = Material.StoneButton; - for (int i = 6718; i <= 6725; i++) - materials[i] = Material.Snow; - for (int i = 6726; i <= 6726; i++) - materials[i] = Material.Ice; - for (int i = 6727; i <= 6727; i++) - materials[i] = Material.SnowBlock; - for (int i = 6728; i <= 6743; i++) - materials[i] = Material.Cactus; - for (int i = 6744; i <= 6744; i++) - materials[i] = Material.CactusFlower; - for (int i = 6745; i <= 6745; i++) - materials[i] = Material.Clay; - for (int i = 6746; i <= 6761; i++) - materials[i] = Material.SugarCane; - for (int i = 6762; i <= 6763; i++) - materials[i] = Material.Jukebox; - for (int i = 6764; i <= 6795; i++) - materials[i] = Material.OakFence; - for (int i = 6796; i <= 6796; i++) - materials[i] = Material.Netherrack; - for (int i = 6797; i <= 6797; i++) - materials[i] = Material.SoulSand; - for (int i = 6798; i <= 6798; i++) - materials[i] = Material.SoulSoil; - for (int i = 6799; i <= 6801; i++) - materials[i] = Material.Basalt; - for (int i = 6802; i <= 6804; i++) - materials[i] = Material.PolishedBasalt; - for (int i = 6805; i <= 6805; i++) - materials[i] = Material.SoulTorch; - for (int i = 6806; i <= 6809; i++) - materials[i] = Material.SoulWallTorch; - for (int i = 6810; i <= 6810; i++) - materials[i] = Material.CopperTorch; - for (int i = 6811; i <= 6814; i++) - materials[i] = Material.CopperWallTorch; - for (int i = 6815; i <= 6815; i++) - materials[i] = Material.Glowstone; - for (int i = 6816; i <= 6817; i++) - materials[i] = Material.NetherPortal; - for (int i = 6818; i <= 6821; i++) - materials[i] = Material.CarvedPumpkin; - for (int i = 6822; i <= 6825; i++) - materials[i] = Material.JackOLantern; - for (int i = 6826; i <= 6832; i++) - materials[i] = Material.Cake; - for (int i = 6833; i <= 6896; i++) - materials[i] = Material.Repeater; - for (int i = 6897; i <= 6897; i++) - materials[i] = Material.WhiteStainedGlass; - for (int i = 6898; i <= 6898; i++) - materials[i] = Material.OrangeStainedGlass; - for (int i = 6899; i <= 6899; i++) - materials[i] = Material.MagentaStainedGlass; - for (int i = 6900; i <= 6900; i++) - materials[i] = Material.LightBlueStainedGlass; - for (int i = 6901; i <= 6901; i++) - materials[i] = Material.YellowStainedGlass; - for (int i = 6902; i <= 6902; i++) - materials[i] = Material.LimeStainedGlass; - for (int i = 6903; i <= 6903; i++) - materials[i] = Material.PinkStainedGlass; - for (int i = 6904; i <= 6904; i++) - materials[i] = Material.GrayStainedGlass; - for (int i = 6905; i <= 6905; i++) - materials[i] = Material.LightGrayStainedGlass; - for (int i = 6906; i <= 6906; i++) - materials[i] = Material.CyanStainedGlass; - for (int i = 6907; i <= 6907; i++) - materials[i] = Material.PurpleStainedGlass; - for (int i = 6908; i <= 6908; i++) - materials[i] = Material.BlueStainedGlass; - for (int i = 6909; i <= 6909; i++) - materials[i] = Material.BrownStainedGlass; - for (int i = 6910; i <= 6910; i++) - materials[i] = Material.GreenStainedGlass; - for (int i = 6911; i <= 6911; i++) - materials[i] = Material.RedStainedGlass; - for (int i = 6912; i <= 6912; i++) - materials[i] = Material.BlackStainedGlass; - for (int i = 6913; i <= 6976; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 6977; i <= 7040; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 7041; i <= 7104; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 7105; i <= 7168; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 7169; i <= 7232; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 7233; i <= 7296; i++) - materials[i] = Material.CherryTrapdoor; - for (int i = 7297; i <= 7360; i++) - materials[i] = Material.DarkOakTrapdoor; - for (int i = 7361; i <= 7424; i++) - materials[i] = Material.PaleOakTrapdoor; - for (int i = 7425; i <= 7488; i++) - materials[i] = Material.MangroveTrapdoor; - for (int i = 7489; i <= 7552; i++) - materials[i] = Material.BambooTrapdoor; - for (int i = 7553; i <= 7553; i++) - materials[i] = Material.StoneBricks; - for (int i = 7554; i <= 7554; i++) - materials[i] = Material.MossyStoneBricks; - for (int i = 7555; i <= 7555; i++) - materials[i] = Material.CrackedStoneBricks; - for (int i = 7556; i <= 7556; i++) - materials[i] = Material.ChiseledStoneBricks; - for (int i = 7557; i <= 7557; i++) - materials[i] = Material.PackedMud; - for (int i = 7558; i <= 7558; i++) - materials[i] = Material.MudBricks; - for (int i = 7559; i <= 7559; i++) - materials[i] = Material.InfestedStone; - for (int i = 7560; i <= 7560; i++) - materials[i] = Material.InfestedCobblestone; - for (int i = 7561; i <= 7561; i++) - materials[i] = Material.InfestedStoneBricks; - for (int i = 7562; i <= 7562; i++) - materials[i] = Material.InfestedMossyStoneBricks; - for (int i = 7563; i <= 7563; i++) - materials[i] = Material.InfestedCrackedStoneBricks; - for (int i = 7564; i <= 7564; i++) - materials[i] = Material.InfestedChiseledStoneBricks; - for (int i = 7565; i <= 7628; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 7629; i <= 7692; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 7693; i <= 7756; i++) - materials[i] = Material.MushroomStem; - for (int i = 7757; i <= 7788; i++) - materials[i] = Material.IronBars; - for (int i = 7789; i <= 7820; i++) - materials[i] = Material.CopperBars; - for (int i = 7821; i <= 7852; i++) - materials[i] = Material.ExposedCopperBars; - for (int i = 7853; i <= 7884; i++) - materials[i] = Material.WeatheredCopperBars; - for (int i = 7885; i <= 7916; i++) - materials[i] = Material.OxidizedCopperBars; - for (int i = 7917; i <= 7948; i++) - materials[i] = Material.WaxedCopperBars; - for (int i = 7949; i <= 7980; i++) - materials[i] = Material.WaxedExposedCopperBars; - for (int i = 7981; i <= 8012; i++) - materials[i] = Material.WaxedWeatheredCopperBars; - for (int i = 8013; i <= 8044; i++) - materials[i] = Material.WaxedOxidizedCopperBars; - for (int i = 8045; i <= 8050; i++) - materials[i] = Material.IronChain; - for (int i = 8051; i <= 8056; i++) - materials[i] = Material.CopperChain; - for (int i = 8057; i <= 8062; i++) - materials[i] = Material.ExposedCopperChain; - for (int i = 8063; i <= 8068; i++) - materials[i] = Material.WeatheredCopperChain; - for (int i = 8069; i <= 8074; i++) - materials[i] = Material.OxidizedCopperChain; - for (int i = 8075; i <= 8080; i++) - materials[i] = Material.WaxedCopperChain; - for (int i = 8081; i <= 8086; i++) - materials[i] = Material.WaxedExposedCopperChain; - for (int i = 8087; i <= 8092; i++) - materials[i] = Material.WaxedWeatheredCopperChain; - for (int i = 8093; i <= 8098; i++) - materials[i] = Material.WaxedOxidizedCopperChain; - for (int i = 8099; i <= 8130; i++) - materials[i] = Material.GlassPane; - for (int i = 8131; i <= 8131; i++) - materials[i] = Material.Pumpkin; - for (int i = 8132; i <= 8132; i++) - materials[i] = Material.Melon; - for (int i = 8133; i <= 8136; i++) - materials[i] = Material.AttachedPumpkinStem; - for (int i = 8137; i <= 8140; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 8141; i <= 8148; i++) - materials[i] = Material.PumpkinStem; - for (int i = 8149; i <= 8156; i++) - materials[i] = Material.MelonStem; - for (int i = 8157; i <= 8188; i++) - materials[i] = Material.Vine; - for (int i = 8189; i <= 8316; i++) - materials[i] = Material.GlowLichen; - for (int i = 8317; i <= 8444; i++) - materials[i] = Material.ResinClump; - for (int i = 8445; i <= 8476; i++) - materials[i] = Material.OakFenceGate; - for (int i = 8477; i <= 8556; i++) - materials[i] = Material.BrickStairs; - for (int i = 8557; i <= 8636; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 8637; i <= 8716; i++) - materials[i] = Material.MudBrickStairs; - for (int i = 8717; i <= 8718; i++) - materials[i] = Material.Mycelium; - for (int i = 8719; i <= 8719; i++) - materials[i] = Material.LilyPad; - for (int i = 8720; i <= 8720; i++) - materials[i] = Material.ResinBlock; - for (int i = 8721; i <= 8721; i++) - materials[i] = Material.ResinBricks; - for (int i = 8722; i <= 8801; i++) - materials[i] = Material.ResinBrickStairs; - for (int i = 8802; i <= 8807; i++) - materials[i] = Material.ResinBrickSlab; - for (int i = 8808; i <= 9131; i++) - materials[i] = Material.ResinBrickWall; - for (int i = 9132; i <= 9132; i++) - materials[i] = Material.ChiseledResinBricks; - for (int i = 9133; i <= 9133; i++) - materials[i] = Material.NetherBricks; - for (int i = 9134; i <= 9165; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 9166; i <= 9245; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 9246; i <= 9249; i++) - materials[i] = Material.NetherWart; - for (int i = 9250; i <= 9250; i++) - materials[i] = Material.EnchantingTable; - for (int i = 9251; i <= 9258; i++) - materials[i] = Material.BrewingStand; - for (int i = 9259; i <= 9259; i++) - materials[i] = Material.Cauldron; - for (int i = 9260; i <= 9262; i++) - materials[i] = Material.WaterCauldron; - for (int i = 9263; i <= 9263; i++) - materials[i] = Material.LavaCauldron; - for (int i = 9264; i <= 9266; i++) - materials[i] = Material.PowderSnowCauldron; - for (int i = 9267; i <= 9267; i++) - materials[i] = Material.EndPortal; - for (int i = 9268; i <= 9275; i++) - materials[i] = Material.EndPortalFrame; - for (int i = 9276; i <= 9276; i++) - materials[i] = Material.EndStone; - for (int i = 9277; i <= 9277; i++) - materials[i] = Material.DragonEgg; - for (int i = 9278; i <= 9279; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 9280; i <= 9291; i++) - materials[i] = Material.Cocoa; - for (int i = 9292; i <= 9371; i++) - materials[i] = Material.SandstoneStairs; - for (int i = 9372; i <= 9372; i++) - materials[i] = Material.EmeraldOre; - for (int i = 9373; i <= 9373; i++) - materials[i] = Material.DeepslateEmeraldOre; - for (int i = 9374; i <= 9381; i++) - materials[i] = Material.EnderChest; - for (int i = 9382; i <= 9397; i++) - materials[i] = Material.TripwireHook; - for (int i = 9398; i <= 9525; i++) - materials[i] = Material.Tripwire; - for (int i = 9526; i <= 9526; i++) - materials[i] = Material.EmeraldBlock; - for (int i = 9527; i <= 9606; i++) - materials[i] = Material.SpruceStairs; - for (int i = 9607; i <= 9686; i++) - materials[i] = Material.BirchStairs; - for (int i = 9687; i <= 9766; i++) - materials[i] = Material.JungleStairs; - for (int i = 9767; i <= 9778; i++) - materials[i] = Material.CommandBlock; - for (int i = 9779; i <= 9779; i++) - materials[i] = Material.Beacon; - for (int i = 9780; i <= 10103; i++) - materials[i] = Material.CobblestoneWall; - for (int i = 10104; i <= 10427; i++) - materials[i] = Material.MossyCobblestoneWall; - for (int i = 10428; i <= 10428; i++) - materials[i] = Material.FlowerPot; - for (int i = 10429; i <= 10429; i++) - materials[i] = Material.PottedTorchflower; - for (int i = 10430; i <= 10430; i++) - materials[i] = Material.PottedOakSapling; - for (int i = 10431; i <= 10431; i++) - materials[i] = Material.PottedSpruceSapling; - for (int i = 10432; i <= 10432; i++) - materials[i] = Material.PottedBirchSapling; - for (int i = 10433; i <= 10433; i++) - materials[i] = Material.PottedJungleSapling; - for (int i = 10434; i <= 10434; i++) - materials[i] = Material.PottedAcaciaSapling; - for (int i = 10435; i <= 10435; i++) - materials[i] = Material.PottedCherrySapling; - for (int i = 10436; i <= 10436; i++) - materials[i] = Material.PottedDarkOakSapling; - for (int i = 10437; i <= 10437; i++) - materials[i] = Material.PottedPaleOakSapling; - for (int i = 10438; i <= 10438; i++) - materials[i] = Material.PottedMangrovePropagule; - for (int i = 10439; i <= 10439; i++) - materials[i] = Material.PottedFern; - for (int i = 10440; i <= 10440; i++) - materials[i] = Material.PottedDandelion; - for (int i = 10441; i <= 10441; i++) - materials[i] = Material.PottedPoppy; - for (int i = 10442; i <= 10442; i++) - materials[i] = Material.PottedBlueOrchid; - for (int i = 10443; i <= 10443; i++) - materials[i] = Material.PottedAllium; - for (int i = 10444; i <= 10444; i++) - materials[i] = Material.PottedAzureBluet; - for (int i = 10445; i <= 10445; i++) - materials[i] = Material.PottedRedTulip; - for (int i = 10446; i <= 10446; i++) - materials[i] = Material.PottedOrangeTulip; - for (int i = 10447; i <= 10447; i++) - materials[i] = Material.PottedWhiteTulip; - for (int i = 10448; i <= 10448; i++) - materials[i] = Material.PottedPinkTulip; - for (int i = 10449; i <= 10449; i++) - materials[i] = Material.PottedOxeyeDaisy; - for (int i = 10450; i <= 10450; i++) - materials[i] = Material.PottedCornflower; - for (int i = 10451; i <= 10451; i++) - materials[i] = Material.PottedLilyOfTheValley; - for (int i = 10452; i <= 10452; i++) - materials[i] = Material.PottedWitherRose; - for (int i = 10453; i <= 10453; i++) - materials[i] = Material.PottedRedMushroom; - for (int i = 10454; i <= 10454; i++) - materials[i] = Material.PottedBrownMushroom; - for (int i = 10455; i <= 10455; i++) - materials[i] = Material.PottedDeadBush; - for (int i = 10456; i <= 10456; i++) - materials[i] = Material.PottedCactus; - for (int i = 10457; i <= 10464; i++) - materials[i] = Material.Carrots; - for (int i = 10465; i <= 10472; i++) - materials[i] = Material.Potatoes; - for (int i = 10473; i <= 10496; i++) - materials[i] = Material.OakButton; - for (int i = 10497; i <= 10520; i++) - materials[i] = Material.SpruceButton; - for (int i = 10521; i <= 10544; i++) - materials[i] = Material.BirchButton; - for (int i = 10545; i <= 10568; i++) - materials[i] = Material.JungleButton; - for (int i = 10569; i <= 10592; i++) - materials[i] = Material.AcaciaButton; - for (int i = 10593; i <= 10616; i++) - materials[i] = Material.CherryButton; - for (int i = 10617; i <= 10640; i++) - materials[i] = Material.DarkOakButton; - for (int i = 10641; i <= 10664; i++) - materials[i] = Material.PaleOakButton; - for (int i = 10665; i <= 10688; i++) - materials[i] = Material.MangroveButton; - for (int i = 10689; i <= 10712; i++) - materials[i] = Material.BambooButton; - for (int i = 10713; i <= 10744; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 10745; i <= 10752; i++) - materials[i] = Material.SkeletonWallSkull; - for (int i = 10753; i <= 10784; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 10785; i <= 10792; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 10793; i <= 10824; i++) - materials[i] = Material.ZombieHead; - for (int i = 10825; i <= 10832; i++) - materials[i] = Material.ZombieWallHead; - for (int i = 10833; i <= 10864; i++) - materials[i] = Material.PlayerHead; - for (int i = 10865; i <= 10872; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 10873; i <= 10904; i++) - materials[i] = Material.CreeperHead; - for (int i = 10905; i <= 10912; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 10913; i <= 10944; i++) - materials[i] = Material.DragonHead; - for (int i = 10945; i <= 10952; i++) - materials[i] = Material.DragonWallHead; - for (int i = 10953; i <= 10984; i++) - materials[i] = Material.PiglinHead; - for (int i = 10985; i <= 10992; i++) - materials[i] = Material.PiglinWallHead; - for (int i = 10993; i <= 10996; i++) - materials[i] = Material.Anvil; - for (int i = 10997; i <= 11000; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 11001; i <= 11004; i++) - materials[i] = Material.DamagedAnvil; - for (int i = 11005; i <= 11028; i++) - materials[i] = Material.TrappedChest; - for (int i = 11029; i <= 11044; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 11045; i <= 11060; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - for (int i = 11061; i <= 11076; i++) - materials[i] = Material.Comparator; - for (int i = 11077; i <= 11108; i++) - materials[i] = Material.DaylightDetector; - for (int i = 11109; i <= 11109; i++) - materials[i] = Material.RedstoneBlock; - for (int i = 11110; i <= 11110; i++) - materials[i] = Material.NetherQuartzOre; - for (int i = 11111; i <= 11120; i++) - materials[i] = Material.Hopper; - for (int i = 11121; i <= 11121; i++) - materials[i] = Material.QuartzBlock; - for (int i = 11122; i <= 11122; i++) - materials[i] = Material.ChiseledQuartzBlock; - for (int i = 11123; i <= 11125; i++) - materials[i] = Material.QuartzPillar; - for (int i = 11126; i <= 11205; i++) - materials[i] = Material.QuartzStairs; - for (int i = 11206; i <= 11229; i++) - materials[i] = Material.ActivatorRail; - for (int i = 11230; i <= 11241; i++) - materials[i] = Material.Dropper; - for (int i = 11242; i <= 11242; i++) - materials[i] = Material.WhiteTerracotta; - for (int i = 11243; i <= 11243; i++) - materials[i] = Material.OrangeTerracotta; - for (int i = 11244; i <= 11244; i++) - materials[i] = Material.MagentaTerracotta; - for (int i = 11245; i <= 11245; i++) - materials[i] = Material.LightBlueTerracotta; - for (int i = 11246; i <= 11246; i++) - materials[i] = Material.YellowTerracotta; - for (int i = 11247; i <= 11247; i++) - materials[i] = Material.LimeTerracotta; - for (int i = 11248; i <= 11248; i++) - materials[i] = Material.PinkTerracotta; - for (int i = 11249; i <= 11249; i++) - materials[i] = Material.GrayTerracotta; - for (int i = 11250; i <= 11250; i++) - materials[i] = Material.LightGrayTerracotta; - for (int i = 11251; i <= 11251; i++) - materials[i] = Material.CyanTerracotta; - for (int i = 11252; i <= 11252; i++) - materials[i] = Material.PurpleTerracotta; - for (int i = 11253; i <= 11253; i++) - materials[i] = Material.BlueTerracotta; - for (int i = 11254; i <= 11254; i++) - materials[i] = Material.BrownTerracotta; - for (int i = 11255; i <= 11255; i++) - materials[i] = Material.GreenTerracotta; - for (int i = 11256; i <= 11256; i++) - materials[i] = Material.RedTerracotta; - for (int i = 11257; i <= 11257; i++) - materials[i] = Material.BlackTerracotta; - for (int i = 11258; i <= 11289; i++) - materials[i] = Material.WhiteStainedGlassPane; - for (int i = 11290; i <= 11321; i++) - materials[i] = Material.OrangeStainedGlassPane; - for (int i = 11322; i <= 11353; i++) - materials[i] = Material.MagentaStainedGlassPane; - for (int i = 11354; i <= 11385; i++) - materials[i] = Material.LightBlueStainedGlassPane; - for (int i = 11386; i <= 11417; i++) - materials[i] = Material.YellowStainedGlassPane; - for (int i = 11418; i <= 11449; i++) - materials[i] = Material.LimeStainedGlassPane; - for (int i = 11450; i <= 11481; i++) - materials[i] = Material.PinkStainedGlassPane; - for (int i = 11482; i <= 11513; i++) - materials[i] = Material.GrayStainedGlassPane; - for (int i = 11514; i <= 11545; i++) - materials[i] = Material.LightGrayStainedGlassPane; - for (int i = 11546; i <= 11577; i++) - materials[i] = Material.CyanStainedGlassPane; - for (int i = 11578; i <= 11609; i++) - materials[i] = Material.PurpleStainedGlassPane; - for (int i = 11610; i <= 11641; i++) - materials[i] = Material.BlueStainedGlassPane; - for (int i = 11642; i <= 11673; i++) - materials[i] = Material.BrownStainedGlassPane; - for (int i = 11674; i <= 11705; i++) - materials[i] = Material.GreenStainedGlassPane; - for (int i = 11706; i <= 11737; i++) - materials[i] = Material.RedStainedGlassPane; - for (int i = 11738; i <= 11769; i++) - materials[i] = Material.BlackStainedGlassPane; - for (int i = 11770; i <= 11849; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 11850; i <= 11929; i++) - materials[i] = Material.CherryStairs; - for (int i = 11930; i <= 12009; i++) - materials[i] = Material.DarkOakStairs; - for (int i = 12010; i <= 12089; i++) - materials[i] = Material.PaleOakStairs; - for (int i = 12090; i <= 12169; i++) - materials[i] = Material.MangroveStairs; - for (int i = 12170; i <= 12249; i++) - materials[i] = Material.BambooStairs; - for (int i = 12250; i <= 12329; i++) - materials[i] = Material.BambooMosaicStairs; - for (int i = 12330; i <= 12330; i++) - materials[i] = Material.SlimeBlock; - for (int i = 12331; i <= 12332; i++) - materials[i] = Material.Barrier; - for (int i = 12333; i <= 12364; i++) - materials[i] = Material.Light; - for (int i = 12365; i <= 12428; i++) - materials[i] = Material.IronTrapdoor; - for (int i = 12429; i <= 12429; i++) - materials[i] = Material.Prismarine; - for (int i = 12430; i <= 12430; i++) - materials[i] = Material.PrismarineBricks; - for (int i = 12431; i <= 12431; i++) - materials[i] = Material.DarkPrismarine; - for (int i = 12432; i <= 12511; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 12512; i <= 12591; i++) - materials[i] = Material.PrismarineBrickStairs; - for (int i = 12592; i <= 12671; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 12672; i <= 12677; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 12678; i <= 12683; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 12684; i <= 12689; i++) - materials[i] = Material.DarkPrismarineSlab; - for (int i = 12690; i <= 12690; i++) - materials[i] = Material.SeaLantern; - for (int i = 12691; i <= 12693; i++) - materials[i] = Material.HayBlock; - for (int i = 12694; i <= 12694; i++) - materials[i] = Material.WhiteCarpet; - for (int i = 12695; i <= 12695; i++) - materials[i] = Material.OrangeCarpet; - for (int i = 12696; i <= 12696; i++) - materials[i] = Material.MagentaCarpet; - for (int i = 12697; i <= 12697; i++) - materials[i] = Material.LightBlueCarpet; - for (int i = 12698; i <= 12698; i++) - materials[i] = Material.YellowCarpet; - for (int i = 12699; i <= 12699; i++) - materials[i] = Material.LimeCarpet; - for (int i = 12700; i <= 12700; i++) - materials[i] = Material.PinkCarpet; - for (int i = 12701; i <= 12701; i++) - materials[i] = Material.GrayCarpet; - for (int i = 12702; i <= 12702; i++) - materials[i] = Material.LightGrayCarpet; - for (int i = 12703; i <= 12703; i++) - materials[i] = Material.CyanCarpet; - for (int i = 12704; i <= 12704; i++) - materials[i] = Material.PurpleCarpet; - for (int i = 12705; i <= 12705; i++) - materials[i] = Material.BlueCarpet; - for (int i = 12706; i <= 12706; i++) - materials[i] = Material.BrownCarpet; - for (int i = 12707; i <= 12707; i++) - materials[i] = Material.GreenCarpet; - for (int i = 12708; i <= 12708; i++) - materials[i] = Material.RedCarpet; - for (int i = 12709; i <= 12709; i++) - materials[i] = Material.BlackCarpet; - for (int i = 12710; i <= 12710; i++) - materials[i] = Material.Terracotta; - for (int i = 12711; i <= 12711; i++) - materials[i] = Material.CoalBlock; - for (int i = 12712; i <= 12712; i++) - materials[i] = Material.PackedIce; - for (int i = 12713; i <= 12714; i++) - materials[i] = Material.Sunflower; - for (int i = 12715; i <= 12716; i++) - materials[i] = Material.Lilac; - for (int i = 12717; i <= 12718; i++) - materials[i] = Material.RoseBush; - for (int i = 12719; i <= 12720; i++) - materials[i] = Material.Peony; - for (int i = 12721; i <= 12722; i++) - materials[i] = Material.TallGrass; - for (int i = 12723; i <= 12724; i++) - materials[i] = Material.LargeFern; - for (int i = 12725; i <= 12740; i++) - materials[i] = Material.WhiteBanner; - for (int i = 12741; i <= 12756; i++) - materials[i] = Material.OrangeBanner; - for (int i = 12757; i <= 12772; i++) - materials[i] = Material.MagentaBanner; - for (int i = 12773; i <= 12788; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 12789; i <= 12804; i++) - materials[i] = Material.YellowBanner; - for (int i = 12805; i <= 12820; i++) - materials[i] = Material.LimeBanner; - for (int i = 12821; i <= 12836; i++) - materials[i] = Material.PinkBanner; - for (int i = 12837; i <= 12852; i++) - materials[i] = Material.GrayBanner; - for (int i = 12853; i <= 12868; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 12869; i <= 12884; i++) - materials[i] = Material.CyanBanner; - for (int i = 12885; i <= 12900; i++) - materials[i] = Material.PurpleBanner; - for (int i = 12901; i <= 12916; i++) - materials[i] = Material.BlueBanner; - for (int i = 12917; i <= 12932; i++) - materials[i] = Material.BrownBanner; - for (int i = 12933; i <= 12948; i++) - materials[i] = Material.GreenBanner; - for (int i = 12949; i <= 12964; i++) - materials[i] = Material.RedBanner; - for (int i = 12965; i <= 12980; i++) - materials[i] = Material.BlackBanner; - for (int i = 12981; i <= 12984; i++) - materials[i] = Material.WhiteWallBanner; - for (int i = 12985; i <= 12988; i++) - materials[i] = Material.OrangeWallBanner; - for (int i = 12989; i <= 12992; i++) - materials[i] = Material.MagentaWallBanner; - for (int i = 12993; i <= 12996; i++) - materials[i] = Material.LightBlueWallBanner; - for (int i = 12997; i <= 13000; i++) - materials[i] = Material.YellowWallBanner; - for (int i = 13001; i <= 13004; i++) - materials[i] = Material.LimeWallBanner; - for (int i = 13005; i <= 13008; i++) - materials[i] = Material.PinkWallBanner; - for (int i = 13009; i <= 13012; i++) - materials[i] = Material.GrayWallBanner; - for (int i = 13013; i <= 13016; i++) - materials[i] = Material.LightGrayWallBanner; - for (int i = 13017; i <= 13020; i++) - materials[i] = Material.CyanWallBanner; - for (int i = 13021; i <= 13024; i++) - materials[i] = Material.PurpleWallBanner; - for (int i = 13025; i <= 13028; i++) - materials[i] = Material.BlueWallBanner; - for (int i = 13029; i <= 13032; i++) - materials[i] = Material.BrownWallBanner; - for (int i = 13033; i <= 13036; i++) - materials[i] = Material.GreenWallBanner; - for (int i = 13037; i <= 13040; i++) - materials[i] = Material.RedWallBanner; - for (int i = 13041; i <= 13044; i++) - materials[i] = Material.BlackWallBanner; - for (int i = 13045; i <= 13045; i++) - materials[i] = Material.RedSandstone; - for (int i = 13046; i <= 13046; i++) - materials[i] = Material.ChiseledRedSandstone; - for (int i = 13047; i <= 13047; i++) - materials[i] = Material.CutRedSandstone; - for (int i = 13048; i <= 13127; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 13128; i <= 13133; i++) - materials[i] = Material.OakSlab; - for (int i = 13134; i <= 13139; i++) - materials[i] = Material.SpruceSlab; - for (int i = 13140; i <= 13145; i++) - materials[i] = Material.BirchSlab; - for (int i = 13146; i <= 13151; i++) - materials[i] = Material.JungleSlab; - for (int i = 13152; i <= 13157; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 13158; i <= 13163; i++) - materials[i] = Material.CherrySlab; - for (int i = 13164; i <= 13169; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 13170; i <= 13175; i++) - materials[i] = Material.PaleOakSlab; - for (int i = 13176; i <= 13181; i++) - materials[i] = Material.MangroveSlab; - for (int i = 13182; i <= 13187; i++) - materials[i] = Material.BambooSlab; - for (int i = 13188; i <= 13193; i++) - materials[i] = Material.BambooMosaicSlab; - for (int i = 13194; i <= 13199; i++) - materials[i] = Material.StoneSlab; - for (int i = 13200; i <= 13205; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 13206; i <= 13211; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 13212; i <= 13217; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 13218; i <= 13223; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 13224; i <= 13229; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 13230; i <= 13235; i++) - materials[i] = Material.BrickSlab; - for (int i = 13236; i <= 13241; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 13242; i <= 13247; i++) - materials[i] = Material.MudBrickSlab; - for (int i = 13248; i <= 13253; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 13254; i <= 13259; i++) - materials[i] = Material.QuartzSlab; - for (int i = 13260; i <= 13265; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 13266; i <= 13271; i++) - materials[i] = Material.CutRedSandstoneSlab; - for (int i = 13272; i <= 13277; i++) - materials[i] = Material.PurpurSlab; - for (int i = 13278; i <= 13278; i++) - materials[i] = Material.SmoothStone; - for (int i = 13279; i <= 13279; i++) - materials[i] = Material.SmoothSandstone; - for (int i = 13280; i <= 13280; i++) - materials[i] = Material.SmoothQuartz; - for (int i = 13281; i <= 13281; i++) - materials[i] = Material.SmoothRedSandstone; - for (int i = 13282; i <= 13313; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 13314; i <= 13345; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 13346; i <= 13377; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 13378; i <= 13409; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 13410; i <= 13441; i++) - materials[i] = Material.CherryFenceGate; - for (int i = 13442; i <= 13473; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 13474; i <= 13505; i++) - materials[i] = Material.PaleOakFenceGate; - for (int i = 13506; i <= 13537; i++) - materials[i] = Material.MangroveFenceGate; - for (int i = 13538; i <= 13569; i++) - materials[i] = Material.BambooFenceGate; - for (int i = 13570; i <= 13601; i++) - materials[i] = Material.SpruceFence; - for (int i = 13602; i <= 13633; i++) - materials[i] = Material.BirchFence; - for (int i = 13634; i <= 13665; i++) - materials[i] = Material.JungleFence; - for (int i = 13666; i <= 13697; i++) - materials[i] = Material.AcaciaFence; - for (int i = 13698; i <= 13729; i++) - materials[i] = Material.CherryFence; - for (int i = 13730; i <= 13761; i++) - materials[i] = Material.DarkOakFence; - for (int i = 13762; i <= 13793; i++) - materials[i] = Material.PaleOakFence; - for (int i = 13794; i <= 13825; i++) - materials[i] = Material.MangroveFence; - for (int i = 13826; i <= 13857; i++) - materials[i] = Material.BambooFence; - for (int i = 13858; i <= 13921; i++) - materials[i] = Material.SpruceDoor; - for (int i = 13922; i <= 13985; i++) - materials[i] = Material.BirchDoor; - for (int i = 13986; i <= 14049; i++) - materials[i] = Material.JungleDoor; - for (int i = 14050; i <= 14113; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 14114; i <= 14177; i++) - materials[i] = Material.CherryDoor; - for (int i = 14178; i <= 14241; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 14242; i <= 14305; i++) - materials[i] = Material.PaleOakDoor; - for (int i = 14306; i <= 14369; i++) - materials[i] = Material.MangroveDoor; - for (int i = 14370; i <= 14433; i++) - materials[i] = Material.BambooDoor; - for (int i = 14434; i <= 14439; i++) - materials[i] = Material.EndRod; - for (int i = 14440; i <= 14503; i++) - materials[i] = Material.ChorusPlant; - for (int i = 14504; i <= 14509; i++) - materials[i] = Material.ChorusFlower; - for (int i = 14510; i <= 14510; i++) - materials[i] = Material.PurpurBlock; - for (int i = 14511; i <= 14513; i++) - materials[i] = Material.PurpurPillar; - for (int i = 14514; i <= 14593; i++) - materials[i] = Material.PurpurStairs; - for (int i = 14594; i <= 14594; i++) - materials[i] = Material.EndStoneBricks; - for (int i = 14595; i <= 14596; i++) - materials[i] = Material.TorchflowerCrop; - for (int i = 14597; i <= 14606; i++) - materials[i] = Material.PitcherCrop; - for (int i = 14607; i <= 14608; i++) - materials[i] = Material.PitcherPlant; - for (int i = 14609; i <= 14612; i++) - materials[i] = Material.Beetroots; - for (int i = 14613; i <= 14613; i++) - materials[i] = Material.DirtPath; - for (int i = 14614; i <= 14614; i++) - materials[i] = Material.EndGateway; - for (int i = 14615; i <= 14626; i++) - materials[i] = Material.RepeatingCommandBlock; - for (int i = 14627; i <= 14638; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 14639; i <= 14642; i++) - materials[i] = Material.FrostedIce; - for (int i = 14643; i <= 14643; i++) - materials[i] = Material.MagmaBlock; - for (int i = 14644; i <= 14644; i++) - materials[i] = Material.NetherWartBlock; - for (int i = 14645; i <= 14645; i++) - materials[i] = Material.RedNetherBricks; - for (int i = 14646; i <= 14648; i++) - materials[i] = Material.BoneBlock; - for (int i = 14649; i <= 14649; i++) - materials[i] = Material.StructureVoid; - for (int i = 14650; i <= 14661; i++) - materials[i] = Material.Observer; - for (int i = 14662; i <= 14667; i++) - materials[i] = Material.ShulkerBox; - for (int i = 14668; i <= 14673; i++) - materials[i] = Material.WhiteShulkerBox; - for (int i = 14674; i <= 14679; i++) - materials[i] = Material.OrangeShulkerBox; - for (int i = 14680; i <= 14685; i++) - materials[i] = Material.MagentaShulkerBox; - for (int i = 14686; i <= 14691; i++) - materials[i] = Material.LightBlueShulkerBox; - for (int i = 14692; i <= 14697; i++) - materials[i] = Material.YellowShulkerBox; - for (int i = 14698; i <= 14703; i++) - materials[i] = Material.LimeShulkerBox; - for (int i = 14704; i <= 14709; i++) - materials[i] = Material.PinkShulkerBox; - for (int i = 14710; i <= 14715; i++) - materials[i] = Material.GrayShulkerBox; - for (int i = 14716; i <= 14721; i++) - materials[i] = Material.LightGrayShulkerBox; - for (int i = 14722; i <= 14727; i++) - materials[i] = Material.CyanShulkerBox; - for (int i = 14728; i <= 14733; i++) - materials[i] = Material.PurpleShulkerBox; - for (int i = 14734; i <= 14739; i++) - materials[i] = Material.BlueShulkerBox; - for (int i = 14740; i <= 14745; i++) - materials[i] = Material.BrownShulkerBox; - for (int i = 14746; i <= 14751; i++) - materials[i] = Material.GreenShulkerBox; - for (int i = 14752; i <= 14757; i++) - materials[i] = Material.RedShulkerBox; - for (int i = 14758; i <= 14763; i++) - materials[i] = Material.BlackShulkerBox; - for (int i = 14764; i <= 14767; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 14768; i <= 14771; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 14772; i <= 14775; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 14776; i <= 14779; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 14780; i <= 14783; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 14784; i <= 14787; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 14788; i <= 14791; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 14792; i <= 14795; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 14796; i <= 14799; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 14800; i <= 14803; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 14804; i <= 14807; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 14808; i <= 14811; i++) - materials[i] = Material.BlueGlazedTerracotta; - for (int i = 14812; i <= 14815; i++) - materials[i] = Material.BrownGlazedTerracotta; - for (int i = 14816; i <= 14819; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 14820; i <= 14823; i++) - materials[i] = Material.RedGlazedTerracotta; - for (int i = 14824; i <= 14827; i++) - materials[i] = Material.BlackGlazedTerracotta; - for (int i = 14828; i <= 14828; i++) - materials[i] = Material.WhiteConcrete; - for (int i = 14829; i <= 14829; i++) - materials[i] = Material.OrangeConcrete; - for (int i = 14830; i <= 14830; i++) - materials[i] = Material.MagentaConcrete; - for (int i = 14831; i <= 14831; i++) - materials[i] = Material.LightBlueConcrete; - for (int i = 14832; i <= 14832; i++) - materials[i] = Material.YellowConcrete; - for (int i = 14833; i <= 14833; i++) - materials[i] = Material.LimeConcrete; - for (int i = 14834; i <= 14834; i++) - materials[i] = Material.PinkConcrete; - for (int i = 14835; i <= 14835; i++) - materials[i] = Material.GrayConcrete; - for (int i = 14836; i <= 14836; i++) - materials[i] = Material.LightGrayConcrete; - for (int i = 14837; i <= 14837; i++) - materials[i] = Material.CyanConcrete; - for (int i = 14838; i <= 14838; i++) - materials[i] = Material.PurpleConcrete; - for (int i = 14839; i <= 14839; i++) - materials[i] = Material.BlueConcrete; - for (int i = 14840; i <= 14840; i++) - materials[i] = Material.BrownConcrete; - for (int i = 14841; i <= 14841; i++) - materials[i] = Material.GreenConcrete; - for (int i = 14842; i <= 14842; i++) - materials[i] = Material.RedConcrete; - for (int i = 14843; i <= 14843; i++) - materials[i] = Material.BlackConcrete; - for (int i = 14844; i <= 14844; i++) - materials[i] = Material.WhiteConcretePowder; - for (int i = 14845; i <= 14845; i++) - materials[i] = Material.OrangeConcretePowder; - for (int i = 14846; i <= 14846; i++) - materials[i] = Material.MagentaConcretePowder; - for (int i = 14847; i <= 14847; i++) - materials[i] = Material.LightBlueConcretePowder; - for (int i = 14848; i <= 14848; i++) - materials[i] = Material.YellowConcretePowder; - for (int i = 14849; i <= 14849; i++) - materials[i] = Material.LimeConcretePowder; - for (int i = 14850; i <= 14850; i++) - materials[i] = Material.PinkConcretePowder; - for (int i = 14851; i <= 14851; i++) - materials[i] = Material.GrayConcretePowder; - for (int i = 14852; i <= 14852; i++) - materials[i] = Material.LightGrayConcretePowder; - for (int i = 14853; i <= 14853; i++) - materials[i] = Material.CyanConcretePowder; - for (int i = 14854; i <= 14854; i++) - materials[i] = Material.PurpleConcretePowder; - for (int i = 14855; i <= 14855; i++) - materials[i] = Material.BlueConcretePowder; - for (int i = 14856; i <= 14856; i++) - materials[i] = Material.BrownConcretePowder; - for (int i = 14857; i <= 14857; i++) - materials[i] = Material.GreenConcretePowder; - for (int i = 14858; i <= 14858; i++) - materials[i] = Material.RedConcretePowder; - for (int i = 14859; i <= 14859; i++) - materials[i] = Material.BlackConcretePowder; - for (int i = 14860; i <= 14885; i++) - materials[i] = Material.Kelp; - for (int i = 14886; i <= 14886; i++) - materials[i] = Material.KelpPlant; - for (int i = 14887; i <= 14887; i++) - materials[i] = Material.DriedKelpBlock; - for (int i = 14888; i <= 14899; i++) - materials[i] = Material.TurtleEgg; - for (int i = 14900; i <= 14902; i++) - materials[i] = Material.SnifferEgg; - for (int i = 14903; i <= 14934; i++) - materials[i] = Material.DriedGhast; - for (int i = 14935; i <= 14935; i++) - materials[i] = Material.DeadTubeCoralBlock; - for (int i = 14936; i <= 14936; i++) - materials[i] = Material.DeadBrainCoralBlock; - for (int i = 14937; i <= 14937; i++) - materials[i] = Material.DeadBubbleCoralBlock; - for (int i = 14938; i <= 14938; i++) - materials[i] = Material.DeadFireCoralBlock; - for (int i = 14939; i <= 14939; i++) - materials[i] = Material.DeadHornCoralBlock; - for (int i = 14940; i <= 14940; i++) - materials[i] = Material.TubeCoralBlock; - for (int i = 14941; i <= 14941; i++) - materials[i] = Material.BrainCoralBlock; - for (int i = 14942; i <= 14942; i++) - materials[i] = Material.BubbleCoralBlock; - for (int i = 14943; i <= 14943; i++) - materials[i] = Material.FireCoralBlock; - for (int i = 14944; i <= 14944; i++) - materials[i] = Material.HornCoralBlock; - for (int i = 14945; i <= 14946; i++) - materials[i] = Material.DeadTubeCoral; - for (int i = 14947; i <= 14948; i++) - materials[i] = Material.DeadBrainCoral; - for (int i = 14949; i <= 14950; i++) - materials[i] = Material.DeadBubbleCoral; - for (int i = 14951; i <= 14952; i++) - materials[i] = Material.DeadFireCoral; - for (int i = 14953; i <= 14954; i++) - materials[i] = Material.DeadHornCoral; - for (int i = 14955; i <= 14956; i++) - materials[i] = Material.TubeCoral; - for (int i = 14957; i <= 14958; i++) - materials[i] = Material.BrainCoral; - for (int i = 14959; i <= 14960; i++) - materials[i] = Material.BubbleCoral; - for (int i = 14961; i <= 14962; i++) - materials[i] = Material.FireCoral; - for (int i = 14963; i <= 14964; i++) - materials[i] = Material.HornCoral; - for (int i = 14965; i <= 14966; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 14967; i <= 14968; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 14969; i <= 14970; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 14971; i <= 14972; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 14973; i <= 14974; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 14975; i <= 14976; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 14977; i <= 14978; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 14979; i <= 14980; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 14981; i <= 14982; i++) - materials[i] = Material.FireCoralFan; - for (int i = 14983; i <= 14984; i++) - materials[i] = Material.HornCoralFan; - for (int i = 14985; i <= 14992; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 14993; i <= 15000; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 15001; i <= 15008; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - for (int i = 15009; i <= 15016; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 15017; i <= 15024; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 15025; i <= 15032; i++) - materials[i] = Material.TubeCoralWallFan; - for (int i = 15033; i <= 15040; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 15041; i <= 15048; i++) - materials[i] = Material.BubbleCoralWallFan; - for (int i = 15049; i <= 15056; i++) - materials[i] = Material.FireCoralWallFan; - for (int i = 15057; i <= 15064; i++) - materials[i] = Material.HornCoralWallFan; - for (int i = 15065; i <= 15072; i++) - materials[i] = Material.SeaPickle; - for (int i = 15073; i <= 15073; i++) - materials[i] = Material.BlueIce; - for (int i = 15074; i <= 15075; i++) - materials[i] = Material.Conduit; - for (int i = 15076; i <= 15076; i++) - materials[i] = Material.BambooSapling; - for (int i = 15077; i <= 15088; i++) - materials[i] = Material.Bamboo; - for (int i = 15089; i <= 15089; i++) - materials[i] = Material.PottedBamboo; - for (int i = 15090; i <= 15090; i++) - materials[i] = Material.VoidAir; - for (int i = 15091; i <= 15091; i++) - materials[i] = Material.CaveAir; - for (int i = 15092; i <= 15093; i++) - materials[i] = Material.BubbleColumn; - for (int i = 15094; i <= 15173; i++) - materials[i] = Material.PolishedGraniteStairs; - for (int i = 15174; i <= 15253; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - for (int i = 15254; i <= 15333; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 15334; i <= 15413; i++) - materials[i] = Material.PolishedDioriteStairs; - for (int i = 15414; i <= 15493; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 15494; i <= 15573; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 15574; i <= 15653; i++) - materials[i] = Material.StoneStairs; - for (int i = 15654; i <= 15733; i++) - materials[i] = Material.SmoothSandstoneStairs; - for (int i = 15734; i <= 15813; i++) - materials[i] = Material.SmoothQuartzStairs; - for (int i = 15814; i <= 15893; i++) - materials[i] = Material.GraniteStairs; - for (int i = 15894; i <= 15973; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 15974; i <= 16053; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 16054; i <= 16133; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 16134; i <= 16213; i++) - materials[i] = Material.DioriteStairs; - for (int i = 16214; i <= 16219; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 16220; i <= 16225; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 16226; i <= 16231; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 16232; i <= 16237; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 16238; i <= 16243; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 16244; i <= 16249; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 16250; i <= 16255; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 16256; i <= 16261; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 16262; i <= 16267; i++) - materials[i] = Material.GraniteSlab; - for (int i = 16268; i <= 16273; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 16274; i <= 16279; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 16280; i <= 16285; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 16286; i <= 16291; i++) - materials[i] = Material.DioriteSlab; - for (int i = 16292; i <= 16615; i++) - materials[i] = Material.BrickWall; - for (int i = 16616; i <= 16939; i++) - materials[i] = Material.PrismarineWall; - for (int i = 16940; i <= 17263; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 17264; i <= 17587; i++) - materials[i] = Material.MossyStoneBrickWall; - for (int i = 17588; i <= 17911; i++) - materials[i] = Material.GraniteWall; - for (int i = 17912; i <= 18235; i++) - materials[i] = Material.StoneBrickWall; - for (int i = 18236; i <= 18559; i++) - materials[i] = Material.MudBrickWall; - for (int i = 18560; i <= 18883; i++) - materials[i] = Material.NetherBrickWall; - for (int i = 18884; i <= 19207; i++) - materials[i] = Material.AndesiteWall; - for (int i = 19208; i <= 19531; i++) - materials[i] = Material.RedNetherBrickWall; - for (int i = 19532; i <= 19855; i++) - materials[i] = Material.SandstoneWall; - for (int i = 19856; i <= 20179; i++) - materials[i] = Material.EndStoneBrickWall; - for (int i = 20180; i <= 20503; i++) - materials[i] = Material.DioriteWall; - for (int i = 20504; i <= 20535; i++) - materials[i] = Material.Scaffolding; - for (int i = 20536; i <= 20539; i++) - materials[i] = Material.Loom; - for (int i = 20540; i <= 20551; i++) - materials[i] = Material.Barrel; - for (int i = 20552; i <= 20559; i++) - materials[i] = Material.Smoker; - for (int i = 20560; i <= 20567; i++) - materials[i] = Material.BlastFurnace; - for (int i = 20568; i <= 20568; i++) - materials[i] = Material.CartographyTable; - for (int i = 20569; i <= 20569; i++) - materials[i] = Material.FletchingTable; - for (int i = 20570; i <= 20581; i++) - materials[i] = Material.Grindstone; - for (int i = 20582; i <= 20597; i++) - materials[i] = Material.Lectern; - for (int i = 20598; i <= 20598; i++) - materials[i] = Material.SmithingTable; - for (int i = 20599; i <= 20602; i++) - materials[i] = Material.Stonecutter; - for (int i = 20603; i <= 20634; i++) - materials[i] = Material.Bell; - for (int i = 20635; i <= 20638; i++) - materials[i] = Material.Lantern; - for (int i = 20639; i <= 20642; i++) - materials[i] = Material.SoulLantern; - for (int i = 20643; i <= 20646; i++) - materials[i] = Material.CopperLantern; - for (int i = 20647; i <= 20650; i++) - materials[i] = Material.ExposedCopperLantern; - for (int i = 20651; i <= 20654; i++) - materials[i] = Material.WeatheredCopperLantern; - for (int i = 20655; i <= 20658; i++) - materials[i] = Material.OxidizedCopperLantern; - for (int i = 20659; i <= 20662; i++) - materials[i] = Material.WaxedCopperLantern; - for (int i = 20663; i <= 20666; i++) - materials[i] = Material.WaxedExposedCopperLantern; - for (int i = 20667; i <= 20670; i++) - materials[i] = Material.WaxedWeatheredCopperLantern; - for (int i = 20671; i <= 20674; i++) - materials[i] = Material.WaxedOxidizedCopperLantern; - for (int i = 20675; i <= 20706; i++) - materials[i] = Material.Campfire; - for (int i = 20707; i <= 20738; i++) - materials[i] = Material.SoulCampfire; - for (int i = 20739; i <= 20742; i++) - materials[i] = Material.SweetBerryBush; - for (int i = 20743; i <= 20745; i++) - materials[i] = Material.WarpedStem; - for (int i = 20746; i <= 20748; i++) - materials[i] = Material.StrippedWarpedStem; - for (int i = 20749; i <= 20751; i++) - materials[i] = Material.WarpedHyphae; - for (int i = 20752; i <= 20754; i++) - materials[i] = Material.StrippedWarpedHyphae; - for (int i = 20755; i <= 20755; i++) - materials[i] = Material.WarpedNylium; - for (int i = 20756; i <= 20756; i++) - materials[i] = Material.WarpedFungus; - for (int i = 20757; i <= 20757; i++) - materials[i] = Material.WarpedWartBlock; - for (int i = 20758; i <= 20758; i++) - materials[i] = Material.WarpedRoots; - for (int i = 20759; i <= 20759; i++) - materials[i] = Material.NetherSprouts; - for (int i = 20760; i <= 20762; i++) - materials[i] = Material.CrimsonStem; - for (int i = 20763; i <= 20765; i++) - materials[i] = Material.StrippedCrimsonStem; - for (int i = 20766; i <= 20768; i++) - materials[i] = Material.CrimsonHyphae; - for (int i = 20769; i <= 20771; i++) - materials[i] = Material.StrippedCrimsonHyphae; - for (int i = 20772; i <= 20772; i++) - materials[i] = Material.CrimsonNylium; - for (int i = 20773; i <= 20773; i++) - materials[i] = Material.CrimsonFungus; - for (int i = 20774; i <= 20774; i++) - materials[i] = Material.Shroomlight; - for (int i = 20775; i <= 20800; i++) - materials[i] = Material.WeepingVines; - for (int i = 20801; i <= 20801; i++) - materials[i] = Material.WeepingVinesPlant; - for (int i = 20802; i <= 20827; i++) - materials[i] = Material.TwistingVines; - for (int i = 20828; i <= 20828; i++) - materials[i] = Material.TwistingVinesPlant; - for (int i = 20829; i <= 20829; i++) - materials[i] = Material.CrimsonRoots; - for (int i = 20830; i <= 20830; i++) - materials[i] = Material.CrimsonPlanks; - for (int i = 20831; i <= 20831; i++) - materials[i] = Material.WarpedPlanks; - for (int i = 20832; i <= 20837; i++) - materials[i] = Material.CrimsonSlab; - for (int i = 20838; i <= 20843; i++) - materials[i] = Material.WarpedSlab; - for (int i = 20844; i <= 20845; i++) - materials[i] = Material.CrimsonPressurePlate; - for (int i = 20846; i <= 20847; i++) - materials[i] = Material.WarpedPressurePlate; - for (int i = 20848; i <= 20879; i++) - materials[i] = Material.CrimsonFence; - for (int i = 20880; i <= 20911; i++) - materials[i] = Material.WarpedFence; - for (int i = 20912; i <= 20975; i++) - materials[i] = Material.CrimsonTrapdoor; - for (int i = 20976; i <= 21039; i++) - materials[i] = Material.WarpedTrapdoor; - for (int i = 21040; i <= 21071; i++) - materials[i] = Material.CrimsonFenceGate; - for (int i = 21072; i <= 21103; i++) - materials[i] = Material.WarpedFenceGate; - for (int i = 21104; i <= 21183; i++) - materials[i] = Material.CrimsonStairs; - for (int i = 21184; i <= 21263; i++) - materials[i] = Material.WarpedStairs; - for (int i = 21264; i <= 21287; i++) - materials[i] = Material.CrimsonButton; - for (int i = 21288; i <= 21311; i++) - materials[i] = Material.WarpedButton; - for (int i = 21312; i <= 21375; i++) - materials[i] = Material.CrimsonDoor; - for (int i = 21376; i <= 21439; i++) - materials[i] = Material.WarpedDoor; - for (int i = 21440; i <= 21471; i++) - materials[i] = Material.CrimsonSign; - for (int i = 21472; i <= 21503; i++) - materials[i] = Material.WarpedSign; - for (int i = 21504; i <= 21511; i++) - materials[i] = Material.CrimsonWallSign; - for (int i = 21512; i <= 21519; i++) - materials[i] = Material.WarpedWallSign; - for (int i = 21520; i <= 21523; i++) - materials[i] = Material.StructureBlock; - for (int i = 21524; i <= 21535; i++) - materials[i] = Material.Jigsaw; - for (int i = 21536; i <= 21539; i++) - materials[i] = Material.TestBlock; - for (int i = 21540; i <= 21540; i++) - materials[i] = Material.TestInstanceBlock; - for (int i = 21541; i <= 21549; i++) - materials[i] = Material.Composter; - for (int i = 21550; i <= 21565; i++) - materials[i] = Material.Target; - for (int i = 21566; i <= 21589; i++) - materials[i] = Material.BeeNest; - for (int i = 21590; i <= 21613; i++) - materials[i] = Material.Beehive; - for (int i = 21614; i <= 21614; i++) - materials[i] = Material.HoneyBlock; - for (int i = 21615; i <= 21615; i++) - materials[i] = Material.HoneycombBlock; - for (int i = 21616; i <= 21616; i++) - materials[i] = Material.NetheriteBlock; - for (int i = 21617; i <= 21617; i++) - materials[i] = Material.AncientDebris; - for (int i = 21618; i <= 21618; i++) - materials[i] = Material.CryingObsidian; - for (int i = 21619; i <= 21623; i++) - materials[i] = Material.RespawnAnchor; - for (int i = 21624; i <= 21624; i++) - materials[i] = Material.PottedCrimsonFungus; - for (int i = 21625; i <= 21625; i++) - materials[i] = Material.PottedWarpedFungus; - for (int i = 21626; i <= 21626; i++) - materials[i] = Material.PottedCrimsonRoots; - for (int i = 21627; i <= 21627; i++) - materials[i] = Material.PottedWarpedRoots; - for (int i = 21628; i <= 21628; i++) - materials[i] = Material.Lodestone; - for (int i = 21629; i <= 21629; i++) - materials[i] = Material.Blackstone; - for (int i = 21630; i <= 21709; i++) - materials[i] = Material.BlackstoneStairs; - for (int i = 21710; i <= 22033; i++) - materials[i] = Material.BlackstoneWall; - for (int i = 22034; i <= 22039; i++) - materials[i] = Material.BlackstoneSlab; - for (int i = 22040; i <= 22040; i++) - materials[i] = Material.PolishedBlackstone; - for (int i = 22041; i <= 22041; i++) - materials[i] = Material.PolishedBlackstoneBricks; - for (int i = 22042; i <= 22042; i++) - materials[i] = Material.CrackedPolishedBlackstoneBricks; - for (int i = 22043; i <= 22043; i++) - materials[i] = Material.ChiseledPolishedBlackstone; - for (int i = 22044; i <= 22049; i++) - materials[i] = Material.PolishedBlackstoneBrickSlab; - for (int i = 22050; i <= 22129; i++) - materials[i] = Material.PolishedBlackstoneBrickStairs; - for (int i = 22130; i <= 22453; i++) - materials[i] = Material.PolishedBlackstoneBrickWall; - for (int i = 22454; i <= 22454; i++) - materials[i] = Material.GildedBlackstone; - for (int i = 22455; i <= 22534; i++) - materials[i] = Material.PolishedBlackstoneStairs; - for (int i = 22535; i <= 22540; i++) - materials[i] = Material.PolishedBlackstoneSlab; - for (int i = 22541; i <= 22542; i++) - materials[i] = Material.PolishedBlackstonePressurePlate; - for (int i = 22543; i <= 22566; i++) - materials[i] = Material.PolishedBlackstoneButton; - for (int i = 22567; i <= 22890; i++) - materials[i] = Material.PolishedBlackstoneWall; - for (int i = 22891; i <= 22891; i++) - materials[i] = Material.ChiseledNetherBricks; - for (int i = 22892; i <= 22892; i++) - materials[i] = Material.CrackedNetherBricks; - for (int i = 22893; i <= 22893; i++) - materials[i] = Material.QuartzBricks; - for (int i = 22894; i <= 22909; i++) - materials[i] = Material.Candle; - for (int i = 22910; i <= 22925; i++) - materials[i] = Material.WhiteCandle; - for (int i = 22926; i <= 22941; i++) - materials[i] = Material.OrangeCandle; - for (int i = 22942; i <= 22957; i++) - materials[i] = Material.MagentaCandle; - for (int i = 22958; i <= 22973; i++) - materials[i] = Material.LightBlueCandle; - for (int i = 22974; i <= 22989; i++) - materials[i] = Material.YellowCandle; - for (int i = 22990; i <= 23005; i++) - materials[i] = Material.LimeCandle; - for (int i = 23006; i <= 23021; i++) - materials[i] = Material.PinkCandle; - for (int i = 23022; i <= 23037; i++) - materials[i] = Material.GrayCandle; - for (int i = 23038; i <= 23053; i++) - materials[i] = Material.LightGrayCandle; - for (int i = 23054; i <= 23069; i++) - materials[i] = Material.CyanCandle; - for (int i = 23070; i <= 23085; i++) - materials[i] = Material.PurpleCandle; - for (int i = 23086; i <= 23101; i++) - materials[i] = Material.BlueCandle; - for (int i = 23102; i <= 23117; i++) - materials[i] = Material.BrownCandle; - for (int i = 23118; i <= 23133; i++) - materials[i] = Material.GreenCandle; - for (int i = 23134; i <= 23149; i++) - materials[i] = Material.RedCandle; - for (int i = 23150; i <= 23165; i++) - materials[i] = Material.BlackCandle; - for (int i = 23166; i <= 23167; i++) - materials[i] = Material.CandleCake; - for (int i = 23168; i <= 23169; i++) - materials[i] = Material.WhiteCandleCake; - for (int i = 23170; i <= 23171; i++) - materials[i] = Material.OrangeCandleCake; - for (int i = 23172; i <= 23173; i++) - materials[i] = Material.MagentaCandleCake; - for (int i = 23174; i <= 23175; i++) - materials[i] = Material.LightBlueCandleCake; - for (int i = 23176; i <= 23177; i++) - materials[i] = Material.YellowCandleCake; - for (int i = 23178; i <= 23179; i++) - materials[i] = Material.LimeCandleCake; - for (int i = 23180; i <= 23181; i++) - materials[i] = Material.PinkCandleCake; - for (int i = 23182; i <= 23183; i++) - materials[i] = Material.GrayCandleCake; - for (int i = 23184; i <= 23185; i++) - materials[i] = Material.LightGrayCandleCake; - for (int i = 23186; i <= 23187; i++) - materials[i] = Material.CyanCandleCake; - for (int i = 23188; i <= 23189; i++) - materials[i] = Material.PurpleCandleCake; - for (int i = 23190; i <= 23191; i++) - materials[i] = Material.BlueCandleCake; - for (int i = 23192; i <= 23193; i++) - materials[i] = Material.BrownCandleCake; - for (int i = 23194; i <= 23195; i++) - materials[i] = Material.GreenCandleCake; - for (int i = 23196; i <= 23197; i++) - materials[i] = Material.RedCandleCake; - for (int i = 23198; i <= 23199; i++) - materials[i] = Material.BlackCandleCake; - for (int i = 23200; i <= 23200; i++) - materials[i] = Material.AmethystBlock; - for (int i = 23201; i <= 23201; i++) - materials[i] = Material.BuddingAmethyst; - for (int i = 23202; i <= 23213; i++) - materials[i] = Material.AmethystCluster; - for (int i = 23214; i <= 23225; i++) - materials[i] = Material.LargeAmethystBud; - for (int i = 23226; i <= 23237; i++) - materials[i] = Material.MediumAmethystBud; - for (int i = 23238; i <= 23249; i++) - materials[i] = Material.SmallAmethystBud; - for (int i = 23250; i <= 23250; i++) - materials[i] = Material.Tuff; - for (int i = 23251; i <= 23256; i++) - materials[i] = Material.TuffSlab; - for (int i = 23257; i <= 23336; i++) - materials[i] = Material.TuffStairs; - for (int i = 23337; i <= 23660; i++) - materials[i] = Material.TuffWall; - for (int i = 23661; i <= 23661; i++) - materials[i] = Material.PolishedTuff; - for (int i = 23662; i <= 23667; i++) - materials[i] = Material.PolishedTuffSlab; - for (int i = 23668; i <= 23747; i++) - materials[i] = Material.PolishedTuffStairs; - for (int i = 23748; i <= 24071; i++) - materials[i] = Material.PolishedTuffWall; - for (int i = 24072; i <= 24072; i++) - materials[i] = Material.ChiseledTuff; - for (int i = 24073; i <= 24073; i++) - materials[i] = Material.TuffBricks; - for (int i = 24074; i <= 24079; i++) - materials[i] = Material.TuffBrickSlab; - for (int i = 24080; i <= 24159; i++) - materials[i] = Material.TuffBrickStairs; - for (int i = 24160; i <= 24483; i++) - materials[i] = Material.TuffBrickWall; - for (int i = 24484; i <= 24484; i++) - materials[i] = Material.ChiseledTuffBricks; - for (int i = 24485; i <= 24485; i++) - materials[i] = Material.Calcite; - for (int i = 24486; i <= 24486; i++) - materials[i] = Material.TintedGlass; - for (int i = 24487; i <= 24487; i++) - materials[i] = Material.PowderSnow; - for (int i = 24488; i <= 24583; i++) - materials[i] = Material.SculkSensor; - for (int i = 24584; i <= 24967; i++) - materials[i] = Material.CalibratedSculkSensor; - for (int i = 24968; i <= 24968; i++) - materials[i] = Material.Sculk; - for (int i = 24969; i <= 25096; i++) - materials[i] = Material.SculkVein; - for (int i = 25097; i <= 25098; i++) - materials[i] = Material.SculkCatalyst; - for (int i = 25099; i <= 25106; i++) - materials[i] = Material.SculkShrieker; - for (int i = 25107; i <= 25107; i++) - materials[i] = Material.CopperBlock; - for (int i = 25108; i <= 25108; i++) - materials[i] = Material.ExposedCopper; - for (int i = 25109; i <= 25109; i++) - materials[i] = Material.WeatheredCopper; - for (int i = 25110; i <= 25110; i++) - materials[i] = Material.OxidizedCopper; - for (int i = 25111; i <= 25111; i++) - materials[i] = Material.CopperOre; - for (int i = 25112; i <= 25112; i++) - materials[i] = Material.DeepslateCopperOre; - for (int i = 25113; i <= 25113; i++) - materials[i] = Material.OxidizedCutCopper; - for (int i = 25114; i <= 25114; i++) - materials[i] = Material.WeatheredCutCopper; - for (int i = 25115; i <= 25115; i++) - materials[i] = Material.ExposedCutCopper; - for (int i = 25116; i <= 25116; i++) - materials[i] = Material.CutCopper; - for (int i = 25117; i <= 25117; i++) - materials[i] = Material.OxidizedChiseledCopper; - for (int i = 25118; i <= 25118; i++) - materials[i] = Material.WeatheredChiseledCopper; - for (int i = 25119; i <= 25119; i++) - materials[i] = Material.ExposedChiseledCopper; - for (int i = 25120; i <= 25120; i++) - materials[i] = Material.ChiseledCopper; - for (int i = 25121; i <= 25121; i++) - materials[i] = Material.WaxedOxidizedChiseledCopper; - for (int i = 25122; i <= 25122; i++) - materials[i] = Material.WaxedWeatheredChiseledCopper; - for (int i = 25123; i <= 25123; i++) - materials[i] = Material.WaxedExposedChiseledCopper; - for (int i = 25124; i <= 25124; i++) - materials[i] = Material.WaxedChiseledCopper; - for (int i = 25125; i <= 25204; i++) - materials[i] = Material.OxidizedCutCopperStairs; - for (int i = 25205; i <= 25284; i++) - materials[i] = Material.WeatheredCutCopperStairs; - for (int i = 25285; i <= 25364; i++) - materials[i] = Material.ExposedCutCopperStairs; - for (int i = 25365; i <= 25444; i++) - materials[i] = Material.CutCopperStairs; - for (int i = 25445; i <= 25450; i++) - materials[i] = Material.OxidizedCutCopperSlab; - for (int i = 25451; i <= 25456; i++) - materials[i] = Material.WeatheredCutCopperSlab; - for (int i = 25457; i <= 25462; i++) - materials[i] = Material.ExposedCutCopperSlab; - for (int i = 25463; i <= 25468; i++) - materials[i] = Material.CutCopperSlab; - for (int i = 25469; i <= 25469; i++) - materials[i] = Material.WaxedCopperBlock; - for (int i = 25470; i <= 25470; i++) - materials[i] = Material.WaxedWeatheredCopper; - for (int i = 25471; i <= 25471; i++) - materials[i] = Material.WaxedExposedCopper; - for (int i = 25472; i <= 25472; i++) - materials[i] = Material.WaxedOxidizedCopper; - for (int i = 25473; i <= 25473; i++) - materials[i] = Material.WaxedOxidizedCutCopper; - for (int i = 25474; i <= 25474; i++) - materials[i] = Material.WaxedWeatheredCutCopper; - for (int i = 25475; i <= 25475; i++) - materials[i] = Material.WaxedExposedCutCopper; - for (int i = 25476; i <= 25476; i++) - materials[i] = Material.WaxedCutCopper; - for (int i = 25477; i <= 25556; i++) - materials[i] = Material.WaxedOxidizedCutCopperStairs; - for (int i = 25557; i <= 25636; i++) - materials[i] = Material.WaxedWeatheredCutCopperStairs; - for (int i = 25637; i <= 25716; i++) - materials[i] = Material.WaxedExposedCutCopperStairs; - for (int i = 25717; i <= 25796; i++) - materials[i] = Material.WaxedCutCopperStairs; - for (int i = 25797; i <= 25802; i++) - materials[i] = Material.WaxedOxidizedCutCopperSlab; - for (int i = 25803; i <= 25808; i++) - materials[i] = Material.WaxedWeatheredCutCopperSlab; - for (int i = 25809; i <= 25814; i++) - materials[i] = Material.WaxedExposedCutCopperSlab; - for (int i = 25815; i <= 25820; i++) - materials[i] = Material.WaxedCutCopperSlab; - for (int i = 25821; i <= 25884; i++) - materials[i] = Material.CopperDoor; - for (int i = 25885; i <= 25948; i++) - materials[i] = Material.ExposedCopperDoor; - for (int i = 25949; i <= 26012; i++) - materials[i] = Material.OxidizedCopperDoor; - for (int i = 26013; i <= 26076; i++) - materials[i] = Material.WeatheredCopperDoor; - for (int i = 26077; i <= 26140; i++) - materials[i] = Material.WaxedCopperDoor; - for (int i = 26141; i <= 26204; i++) - materials[i] = Material.WaxedExposedCopperDoor; - for (int i = 26205; i <= 26268; i++) - materials[i] = Material.WaxedOxidizedCopperDoor; - for (int i = 26269; i <= 26332; i++) - materials[i] = Material.WaxedWeatheredCopperDoor; - for (int i = 26333; i <= 26396; i++) - materials[i] = Material.CopperTrapdoor; - for (int i = 26397; i <= 26460; i++) - materials[i] = Material.ExposedCopperTrapdoor; - for (int i = 26461; i <= 26524; i++) - materials[i] = Material.OxidizedCopperTrapdoor; - for (int i = 26525; i <= 26588; i++) - materials[i] = Material.WeatheredCopperTrapdoor; - for (int i = 26589; i <= 26652; i++) - materials[i] = Material.WaxedCopperTrapdoor; - for (int i = 26653; i <= 26716; i++) - materials[i] = Material.WaxedExposedCopperTrapdoor; - for (int i = 26717; i <= 26780; i++) - materials[i] = Material.WaxedOxidizedCopperTrapdoor; - for (int i = 26781; i <= 26844; i++) - materials[i] = Material.WaxedWeatheredCopperTrapdoor; - for (int i = 26845; i <= 26846; i++) - materials[i] = Material.CopperGrate; - for (int i = 26847; i <= 26848; i++) - materials[i] = Material.ExposedCopperGrate; - for (int i = 26849; i <= 26850; i++) - materials[i] = Material.WeatheredCopperGrate; - for (int i = 26851; i <= 26852; i++) - materials[i] = Material.OxidizedCopperGrate; - for (int i = 26853; i <= 26854; i++) - materials[i] = Material.WaxedCopperGrate; - for (int i = 26855; i <= 26856; i++) - materials[i] = Material.WaxedExposedCopperGrate; - for (int i = 26857; i <= 26858; i++) - materials[i] = Material.WaxedWeatheredCopperGrate; - for (int i = 26859; i <= 26860; i++) - materials[i] = Material.WaxedOxidizedCopperGrate; - for (int i = 26861; i <= 26864; i++) - materials[i] = Material.CopperBulb; - for (int i = 26865; i <= 26868; i++) - materials[i] = Material.ExposedCopperBulb; - for (int i = 26869; i <= 26872; i++) - materials[i] = Material.WeatheredCopperBulb; - for (int i = 26873; i <= 26876; i++) - materials[i] = Material.OxidizedCopperBulb; - for (int i = 26877; i <= 26880; i++) - materials[i] = Material.WaxedCopperBulb; - for (int i = 26881; i <= 26884; i++) - materials[i] = Material.WaxedExposedCopperBulb; - for (int i = 26885; i <= 26888; i++) - materials[i] = Material.WaxedWeatheredCopperBulb; - for (int i = 26889; i <= 26892; i++) - materials[i] = Material.WaxedOxidizedCopperBulb; - for (int i = 26893; i <= 26916; i++) - materials[i] = Material.CopperChest; - for (int i = 26917; i <= 26940; i++) - materials[i] = Material.ExposedCopperChest; - for (int i = 26941; i <= 26964; i++) - materials[i] = Material.WeatheredCopperChest; - for (int i = 26965; i <= 26988; i++) - materials[i] = Material.OxidizedCopperChest; - for (int i = 26989; i <= 27012; i++) - materials[i] = Material.WaxedCopperChest; - for (int i = 27013; i <= 27036; i++) - materials[i] = Material.WaxedExposedCopperChest; - for (int i = 27037; i <= 27060; i++) - materials[i] = Material.WaxedWeatheredCopperChest; - for (int i = 27061; i <= 27084; i++) - materials[i] = Material.WaxedOxidizedCopperChest; - for (int i = 27085; i <= 27116; i++) - materials[i] = Material.CopperGolemStatue; - for (int i = 27117; i <= 27148; i++) - materials[i] = Material.ExposedCopperGolemStatue; - for (int i = 27149; i <= 27180; i++) - materials[i] = Material.WeatheredCopperGolemStatue; - for (int i = 27181; i <= 27212; i++) - materials[i] = Material.OxidizedCopperGolemStatue; - for (int i = 27213; i <= 27244; i++) - materials[i] = Material.WaxedCopperGolemStatue; - for (int i = 27245; i <= 27276; i++) - materials[i] = Material.WaxedExposedCopperGolemStatue; - for (int i = 27277; i <= 27308; i++) - materials[i] = Material.WaxedWeatheredCopperGolemStatue; - for (int i = 27309; i <= 27340; i++) - materials[i] = Material.WaxedOxidizedCopperGolemStatue; - for (int i = 27341; i <= 27364; i++) - materials[i] = Material.LightningRod; - for (int i = 27365; i <= 27388; i++) - materials[i] = Material.ExposedLightningRod; - for (int i = 27389; i <= 27412; i++) - materials[i] = Material.WeatheredLightningRod; - for (int i = 27413; i <= 27436; i++) - materials[i] = Material.OxidizedLightningRod; - for (int i = 27437; i <= 27460; i++) - materials[i] = Material.WaxedLightningRod; - for (int i = 27461; i <= 27484; i++) - materials[i] = Material.WaxedExposedLightningRod; - for (int i = 27485; i <= 27508; i++) - materials[i] = Material.WaxedWeatheredLightningRod; - for (int i = 27509; i <= 27532; i++) - materials[i] = Material.WaxedOxidizedLightningRod; - for (int i = 27533; i <= 27552; i++) - materials[i] = Material.PointedDripstone; - for (int i = 27553; i <= 27553; i++) - materials[i] = Material.DripstoneBlock; - for (int i = 27554; i <= 27605; i++) - materials[i] = Material.CaveVines; - for (int i = 27606; i <= 27607; i++) - materials[i] = Material.CaveVinesPlant; - for (int i = 27608; i <= 27608; i++) - materials[i] = Material.SporeBlossom; - for (int i = 27609; i <= 27609; i++) - materials[i] = Material.Azalea; - for (int i = 27610; i <= 27610; i++) - materials[i] = Material.FloweringAzalea; - for (int i = 27611; i <= 27611; i++) - materials[i] = Material.MossCarpet; - for (int i = 27612; i <= 27627; i++) - materials[i] = Material.PinkPetals; - for (int i = 27628; i <= 27643; i++) - materials[i] = Material.Wildflowers; - for (int i = 27644; i <= 27659; i++) - materials[i] = Material.LeafLitter; - for (int i = 27660; i <= 27660; i++) - materials[i] = Material.MossBlock; - for (int i = 27661; i <= 27692; i++) - materials[i] = Material.BigDripleaf; - for (int i = 27693; i <= 27700; i++) - materials[i] = Material.BigDripleafStem; - for (int i = 27701; i <= 27716; i++) - materials[i] = Material.SmallDripleaf; - for (int i = 27717; i <= 27718; i++) - materials[i] = Material.HangingRoots; - for (int i = 27719; i <= 27719; i++) - materials[i] = Material.RootedDirt; - for (int i = 27720; i <= 27720; i++) - materials[i] = Material.Mud; - for (int i = 27721; i <= 27723; i++) - materials[i] = Material.Deepslate; - for (int i = 27724; i <= 27724; i++) - materials[i] = Material.CobbledDeepslate; - for (int i = 27725; i <= 27804; i++) - materials[i] = Material.CobbledDeepslateStairs; - for (int i = 27805; i <= 27810; i++) - materials[i] = Material.CobbledDeepslateSlab; - for (int i = 27811; i <= 28134; i++) - materials[i] = Material.CobbledDeepslateWall; - for (int i = 28135; i <= 28135; i++) - materials[i] = Material.PolishedDeepslate; - for (int i = 28136; i <= 28215; i++) - materials[i] = Material.PolishedDeepslateStairs; - for (int i = 28216; i <= 28221; i++) - materials[i] = Material.PolishedDeepslateSlab; - for (int i = 28222; i <= 28545; i++) - materials[i] = Material.PolishedDeepslateWall; - for (int i = 28546; i <= 28546; i++) - materials[i] = Material.DeepslateTiles; - for (int i = 28547; i <= 28626; i++) - materials[i] = Material.DeepslateTileStairs; - for (int i = 28627; i <= 28632; i++) - materials[i] = Material.DeepslateTileSlab; - for (int i = 28633; i <= 28956; i++) - materials[i] = Material.DeepslateTileWall; - for (int i = 28957; i <= 28957; i++) - materials[i] = Material.DeepslateBricks; - for (int i = 28958; i <= 29037; i++) - materials[i] = Material.DeepslateBrickStairs; - for (int i = 29038; i <= 29043; i++) - materials[i] = Material.DeepslateBrickSlab; - for (int i = 29044; i <= 29367; i++) - materials[i] = Material.DeepslateBrickWall; - for (int i = 29368; i <= 29368; i++) - materials[i] = Material.ChiseledDeepslate; - for (int i = 29369; i <= 29369; i++) - materials[i] = Material.CrackedDeepslateBricks; - for (int i = 29370; i <= 29370; i++) - materials[i] = Material.CrackedDeepslateTiles; - for (int i = 29371; i <= 29373; i++) - materials[i] = Material.InfestedDeepslate; - for (int i = 29374; i <= 29374; i++) - materials[i] = Material.SmoothBasalt; - for (int i = 29375; i <= 29375; i++) - materials[i] = Material.RawIronBlock; - for (int i = 29376; i <= 29376; i++) - materials[i] = Material.RawCopperBlock; - for (int i = 29377; i <= 29377; i++) - materials[i] = Material.RawGoldBlock; - for (int i = 29378; i <= 29378; i++) - materials[i] = Material.PottedAzaleaBush; - for (int i = 29379; i <= 29379; i++) - materials[i] = Material.PottedFloweringAzaleaBush; - for (int i = 29380; i <= 29382; i++) - materials[i] = Material.OchreFroglight; - for (int i = 29383; i <= 29385; i++) - materials[i] = Material.VerdantFroglight; - for (int i = 29386; i <= 29388; i++) - materials[i] = Material.PearlescentFroglight; - for (int i = 29389; i <= 29389; i++) - materials[i] = Material.Frogspawn; - for (int i = 29390; i <= 29390; i++) - materials[i] = Material.ReinforcedDeepslate; - for (int i = 29391; i <= 29406; i++) - materials[i] = Material.DecoratedPot; - for (int i = 29407; i <= 29454; i++) - materials[i] = Material.Crafter; - for (int i = 29455; i <= 29466; i++) - materials[i] = Material.TrialSpawner; - for (int i = 29467; i <= 29498; i++) - materials[i] = Material.Vault; - for (int i = 29499; i <= 29500; i++) - materials[i] = Material.HeavyCore; - for (int i = 29501; i <= 29501; i++) - materials[i] = Material.PaleMossBlock; - for (int i = 29502; i <= 29663; i++) - materials[i] = Material.PaleMossCarpet; - for (int i = 29664; i <= 29665; i++) - materials[i] = Material.PaleHangingMoss; - for (int i = 29666; i <= 29666; i++) - materials[i] = Material.OpenEyeblossom; - for (int i = 29667; i <= 29667; i++) - materials[i] = Material.ClosedEyeblossom; - for (int i = 29668; i <= 29668; i++) - materials[i] = Material.PottedOpenEyeblossom; - for (int i = 29669; i <= 29669; i++) - materials[i] = Material.PottedClosedEyeblossom; - for (int i = 29670; i <= 29670; i++) - materials[i] = Material.FireflyBush; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(22, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(29, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(31, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(33, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(35, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(37, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(39, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(41, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(43, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(45, 40, - [ - new("age", ["0", "1", "2", "3", "4"], 8), - new("hanging", ["true", "false"], 4), - new("stage", ["0", "1"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(86, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(102, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(119, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(125, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(136, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(139, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(142, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(145, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(148, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(151, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(154, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(157, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(160, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(163, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(165, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(168, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(171, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(174, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(177, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(180, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(183, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(186, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(189, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(192, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(195, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(198, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(201, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(204, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(207, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(210, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(213, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(216, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(219, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(222, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(225, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(228, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(231, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(234, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(237, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(240, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(243, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(246, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(249, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(252, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(280, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(308, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(336, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(364, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(392, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(420, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(448, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(476, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(504, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(532, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(566, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(581, 1150, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling", "zombie", "skeleton", "creeper", "dragon", "wither_skeleton", "piglin", "custom_head"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1731, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1747, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1763, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1779, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1795, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1811, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1827, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1843, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1859, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1875, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1891, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1907, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1923, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1939, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1955, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1971, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1987, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2011, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2035, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2055, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(2057, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2069, 24, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2) - ]), - new(2109, 12, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 2) - ]), - new(2140, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(2143, 256, - [ - new("facing", ["north", "south", "west", "east"], 64), - new("slot_0_occupied", ["true", "false"], 32), - new("slot_1_occupied", ["true", "false"], 16), - new("slot_2_occupied", ["true", "false"], 8), - new("slot_3_occupied", ["true", "false"], 4), - new("slot_4_occupied", ["true", "false"], 2), - new("slot_5_occupied", ["true", "false"], 1) - ]), - new(2399, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2463, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2527, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2591, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2655, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2719, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2783, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2847, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2911, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2975, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3039, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3103, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3170, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(3174, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(3688, 18, - [ - new("axis", ["x", "y", "z"], 6), - new("creaking_heart_state", ["uprooted", "dormant", "awake"], 2), - new("natural", ["true", "false"], 1) - ]), - new(3706, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3786, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(3810, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(5110, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(5118, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(5126, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(5134, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5166, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5198, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5230, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5262, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5294, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5326, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5358, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5390, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5422, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5454, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5518, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5526, 20, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5546, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5626, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5634, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5642, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5650, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5658, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5666, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5674, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5682, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5690, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5698, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5706, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5770, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5834, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5898, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5962, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6026, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6090, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6154, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6218, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6282, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6346, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6410, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6474, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6482, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6490, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6498, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6506, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6514, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6522, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6530, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6538, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6546, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6554, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6562, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6570, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6594, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6596, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6660, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6662, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6664, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6666, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6668, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6670, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6672, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6674, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6676, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6678, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6680, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(6682, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(6684, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(6686, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(6694, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6718, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(6728, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6746, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6762, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(6764, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(6799, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(6802, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(6806, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6811, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6816, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(6818, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6822, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(6826, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(6833, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6913, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6977, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7041, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7105, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7169, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7233, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7297, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7361, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7425, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7489, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7565, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7629, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7693, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7757, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7789, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7821, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7853, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7885, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7917, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7949, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7981, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8013, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8045, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8051, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8057, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8063, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8069, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8075, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8081, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8087, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8093, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8099, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8133, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8137, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8141, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8149, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8157, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8189, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8317, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8445, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8477, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8557, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8637, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8717, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(8722, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8802, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8808, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(9134, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9166, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9246, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(9251, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(9260, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(9264, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(9268, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9278, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(9280, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9292, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9374, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9382, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9398, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9527, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9607, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9687, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9767, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9780, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(10104, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(10457, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(10465, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(10473, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10497, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10521, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10545, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10569, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10593, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10617, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10641, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10665, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10689, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10713, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10745, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10753, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10785, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10793, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10825, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10833, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10865, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10873, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10905, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10913, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10945, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10953, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10985, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10993, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(10997, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11001, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11005, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(11029, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11045, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11061, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11077, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11111, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(11123, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(11126, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11206, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11230, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(11258, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11290, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11322, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11354, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11386, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11418, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11450, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11482, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11514, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11546, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11578, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11610, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11642, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11674, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11706, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11738, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11770, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11850, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11930, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12010, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12090, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12170, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12250, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12331, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12333, 32, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12365, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12432, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12512, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12592, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12672, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12678, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12684, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12691, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(12713, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12715, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12717, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12719, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12721, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12723, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12725, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12741, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12757, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12773, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12789, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12805, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12821, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12837, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12853, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12869, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12885, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12901, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12917, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12933, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12949, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12965, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12981, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12985, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12989, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12993, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(12997, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13001, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13005, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13009, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13013, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13017, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13021, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13025, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13029, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13033, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13037, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13041, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13048, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13128, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13134, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13140, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13146, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13152, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13158, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13164, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13170, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13176, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13182, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13188, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13194, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13200, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13206, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13212, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13218, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13224, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13230, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13236, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13242, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13248, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13254, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13260, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13266, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13272, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13282, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13314, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13346, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13378, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13410, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13442, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13474, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13506, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13538, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13570, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13602, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13634, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13666, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13698, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13730, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13762, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13794, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13826, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13858, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13922, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13986, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14050, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14114, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14178, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14242, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14306, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14370, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14434, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14440, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(14504, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(14511, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(14514, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14595, 2, - [ - new("age", ["0", "1"], 1) - ]), - new(14597, 10, - [ - new("age", ["0", "1", "2", "3", "4"], 2), - new("half", ["upper", "lower"], 1) - ]), - new(14607, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(14609, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(14615, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14627, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14639, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(14646, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(14650, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14662, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14668, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14674, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14680, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14686, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14692, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14698, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14704, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14710, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14716, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14722, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14728, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14734, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14740, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14746, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14752, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14758, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14764, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14768, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14772, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14776, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14780, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14784, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14788, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14792, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14796, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14800, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14804, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14808, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14812, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14816, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14820, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14824, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14860, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(14888, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(14900, 3, - [ - new("hatch", ["0", "1", "2"], 1) - ]), - new(14903, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("hydration", ["0", "1", "2", "3"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14945, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14947, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14949, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14951, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14953, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14955, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14957, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14959, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14961, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14963, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14965, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14967, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14969, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14971, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14973, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14975, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14977, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14979, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14981, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14983, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(14985, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14993, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15001, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15009, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15017, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15025, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15033, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15041, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15049, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15057, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15065, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15074, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15077, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(15092, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(15094, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15174, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15254, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15334, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15414, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15494, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15574, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15654, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15734, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15814, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15894, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15974, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16054, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16134, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16214, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16220, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16226, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16232, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16238, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16244, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16250, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16256, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16262, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16268, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16274, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16280, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16286, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16292, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16616, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16940, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17264, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17588, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17912, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18236, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18560, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18884, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19208, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19532, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19856, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20180, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20504, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20536, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(20540, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(20552, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(20560, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(20570, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(20582, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20599, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(20603, 32, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20635, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20639, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20643, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20647, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20651, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20655, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20659, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20663, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20667, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20671, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20675, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20707, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20739, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(20743, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20746, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20749, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20752, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20760, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20763, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20766, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20769, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20775, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(20802, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(20832, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20838, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20844, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(20846, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(20848, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(20880, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(20912, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20976, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21040, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21072, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21104, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21184, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21264, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21288, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21312, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21376, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21440, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21472, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21504, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21512, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21520, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(21524, 12, - [ - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 1) - ]), - new(21536, 4, - [ - new("mode", ["start", "log", "fail", "accept"], 1) - ]), - new(21541, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(21550, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(21566, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(21590, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(21619, 5, - [ - new("charges", ["0", "1", "2", "3", "4"], 1) - ]), - new(21630, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21710, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22034, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22044, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22050, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22130, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22455, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22535, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22541, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(22543, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(22567, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22894, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22910, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22926, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22942, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22958, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22974, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22990, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23006, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23022, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23038, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23054, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23070, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23086, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23102, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23118, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23134, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23150, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23166, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23168, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23170, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23172, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23174, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23176, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23178, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23180, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23182, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23184, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23186, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23188, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23190, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23192, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23194, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23196, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23198, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23202, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23214, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23226, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23238, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23251, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23257, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23337, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(23662, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23668, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23748, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(24074, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24080, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24160, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(24488, 96, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24584, 384, - [ - new("facing", ["north", "south", "west", "east"], 96), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24969, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(25097, 2, - [ - new("bloom", ["true", "false"], 1) - ]), - new(25099, 8, - [ - new("can_summon", ["true", "false"], 4), - new("shrieking", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25125, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25205, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25285, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25365, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25445, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25451, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25457, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25463, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25477, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25557, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25637, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25717, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25797, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25803, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25809, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25815, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25821, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25885, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(25949, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26013, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26077, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26141, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26205, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26269, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26333, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26397, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26461, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26525, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26589, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26653, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26717, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26781, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26845, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(26847, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(26849, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(26851, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(26853, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(26855, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(26857, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(26859, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(26861, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26865, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26869, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26873, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26877, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26881, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26885, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26889, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26893, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(26917, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(26941, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(26965, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(26989, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(27013, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(27037, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(27061, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(27085, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27117, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27149, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27181, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27213, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27245, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27277, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27309, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27341, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27365, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27389, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27413, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27437, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27461, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27485, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27509, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27533, 20, - [ - new("thickness", ["tip_merge", "tip", "frustum", "middle", "base"], 4), - new("vertical_direction", ["up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27554, 52, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 2), - new("berries", ["true", "false"], 1) - ]), - new(27606, 2, - [ - new("berries", ["true", "false"], 1) - ]), - new(27612, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("flower_amount", ["1", "2", "3", "4"], 1) - ]), - new(27628, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("flower_amount", ["1", "2", "3", "4"], 1) - ]), - new(27644, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("segment_amount", ["1", "2", "3", "4"], 1) - ]), - new(27661, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("tilt", ["none", "unstable", "partial", "full"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27693, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27701, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("half", ["upper", "lower"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27717, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(27721, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27725, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27805, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27811, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(28136, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28216, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28222, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(28547, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28627, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28633, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(28958, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29038, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29044, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(29371, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(29380, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(29383, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(29386, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(29391, 16, - [ - new("cracked", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29407, 48, - [ - new("crafting", ["true", "false"], 24), - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(29455, 12, - [ - new("ominous", ["true", "false"], 6), - new("trial_spawner_state", ["inactive", "waiting_for_players", "active", "waiting_for_reward_ejection", "ejecting_reward", "cooldown"], 1) - ]), - new(29467, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("ominous", ["true", "false"], 4), - new("vault_state", ["inactive", "active", "unlocking", "ejecting"], 1) - ]), - new(29499, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(29502, 162, - [ - new("bottom", ["true", "false"], 81), - new("east", ["none", "low", "tall"], 27), - new("north", ["none", "low", "tall"], 9), - new("south", ["none", "low", "tall"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(29664, 2, - [ - new("tip", ["true", "false"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette261.cs b/MinecraftClient/Mapping/BlockPalettes/Palette261.cs deleted file mode 100644 index d92594556f..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette261.cs +++ /dev/null @@ -1,6680 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - public class Palette261 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette261() - { - for (int i = 0; i <= 0; i++) - materials[i] = Material.Air; - for (int i = 1; i <= 1; i++) - materials[i] = Material.Stone; - for (int i = 2; i <= 2; i++) - materials[i] = Material.Granite; - for (int i = 3; i <= 3; i++) - materials[i] = Material.PolishedGranite; - for (int i = 4; i <= 4; i++) - materials[i] = Material.Diorite; - for (int i = 5; i <= 5; i++) - materials[i] = Material.PolishedDiorite; - for (int i = 6; i <= 6; i++) - materials[i] = Material.Andesite; - for (int i = 7; i <= 7; i++) - materials[i] = Material.PolishedAndesite; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - for (int i = 10; i <= 10; i++) - materials[i] = Material.Dirt; - for (int i = 11; i <= 11; i++) - materials[i] = Material.CoarseDirt; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - for (int i = 14; i <= 14; i++) - materials[i] = Material.Cobblestone; - for (int i = 15; i <= 15; i++) - materials[i] = Material.OakPlanks; - for (int i = 16; i <= 16; i++) - materials[i] = Material.SprucePlanks; - for (int i = 17; i <= 17; i++) - materials[i] = Material.BirchPlanks; - for (int i = 18; i <= 18; i++) - materials[i] = Material.JunglePlanks; - for (int i = 19; i <= 19; i++) - materials[i] = Material.AcaciaPlanks; - for (int i = 20; i <= 20; i++) - materials[i] = Material.CherryPlanks; - for (int i = 21; i <= 21; i++) - materials[i] = Material.DarkOakPlanks; - for (int i = 22; i <= 24; i++) - materials[i] = Material.PaleOakWood; - for (int i = 25; i <= 25; i++) - materials[i] = Material.PaleOakPlanks; - for (int i = 26; i <= 26; i++) - materials[i] = Material.MangrovePlanks; - for (int i = 27; i <= 27; i++) - materials[i] = Material.BambooPlanks; - for (int i = 28; i <= 28; i++) - materials[i] = Material.BambooMosaic; - for (int i = 29; i <= 30; i++) - materials[i] = Material.OakSapling; - for (int i = 31; i <= 32; i++) - materials[i] = Material.SpruceSapling; - for (int i = 33; i <= 34; i++) - materials[i] = Material.BirchSapling; - for (int i = 35; i <= 36; i++) - materials[i] = Material.JungleSapling; - for (int i = 37; i <= 38; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 39; i <= 40; i++) - materials[i] = Material.CherrySapling; - for (int i = 41; i <= 42; i++) - materials[i] = Material.DarkOakSapling; - for (int i = 43; i <= 44; i++) - materials[i] = Material.PaleOakSapling; - for (int i = 45; i <= 84; i++) - materials[i] = Material.MangrovePropagule; - for (int i = 85; i <= 85; i++) - materials[i] = Material.Bedrock; - for (int i = 86; i <= 101; i++) - materials[i] = Material.Water; - for (int i = 102; i <= 117; i++) - materials[i] = Material.Lava; - for (int i = 118; i <= 118; i++) - materials[i] = Material.Sand; - for (int i = 119; i <= 122; i++) - materials[i] = Material.SuspiciousSand; - for (int i = 123; i <= 123; i++) - materials[i] = Material.RedSand; - for (int i = 124; i <= 124; i++) - materials[i] = Material.Gravel; - for (int i = 125; i <= 128; i++) - materials[i] = Material.SuspiciousGravel; - for (int i = 129; i <= 129; i++) - materials[i] = Material.GoldOre; - for (int i = 130; i <= 130; i++) - materials[i] = Material.DeepslateGoldOre; - for (int i = 131; i <= 131; i++) - materials[i] = Material.IronOre; - for (int i = 132; i <= 132; i++) - materials[i] = Material.DeepslateIronOre; - for (int i = 133; i <= 133; i++) - materials[i] = Material.CoalOre; - for (int i = 134; i <= 134; i++) - materials[i] = Material.DeepslateCoalOre; - for (int i = 135; i <= 135; i++) - materials[i] = Material.NetherGoldOre; - for (int i = 136; i <= 138; i++) - materials[i] = Material.OakLog; - for (int i = 139; i <= 141; i++) - materials[i] = Material.SpruceLog; - for (int i = 142; i <= 144; i++) - materials[i] = Material.BirchLog; - for (int i = 145; i <= 147; i++) - materials[i] = Material.JungleLog; - for (int i = 148; i <= 150; i++) - materials[i] = Material.AcaciaLog; - for (int i = 151; i <= 153; i++) - materials[i] = Material.CherryLog; - for (int i = 154; i <= 156; i++) - materials[i] = Material.DarkOakLog; - for (int i = 157; i <= 159; i++) - materials[i] = Material.PaleOakLog; - for (int i = 160; i <= 162; i++) - materials[i] = Material.MangroveLog; - for (int i = 163; i <= 164; i++) - materials[i] = Material.MangroveRoots; - for (int i = 165; i <= 167; i++) - materials[i] = Material.MuddyMangroveRoots; - for (int i = 168; i <= 170; i++) - materials[i] = Material.BambooBlock; - for (int i = 171; i <= 173; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 174; i <= 176; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 177; i <= 179; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 180; i <= 182; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 183; i <= 185; i++) - materials[i] = Material.StrippedCherryLog; - for (int i = 186; i <= 188; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 189; i <= 191; i++) - materials[i] = Material.StrippedPaleOakLog; - for (int i = 192; i <= 194; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 195; i <= 197; i++) - materials[i] = Material.StrippedMangroveLog; - for (int i = 198; i <= 200; i++) - materials[i] = Material.StrippedBambooBlock; - for (int i = 201; i <= 203; i++) - materials[i] = Material.OakWood; - for (int i = 204; i <= 206; i++) - materials[i] = Material.SpruceWood; - for (int i = 207; i <= 209; i++) - materials[i] = Material.BirchWood; - for (int i = 210; i <= 212; i++) - materials[i] = Material.JungleWood; - for (int i = 213; i <= 215; i++) - materials[i] = Material.AcaciaWood; - for (int i = 216; i <= 218; i++) - materials[i] = Material.CherryWood; - for (int i = 219; i <= 221; i++) - materials[i] = Material.DarkOakWood; - for (int i = 222; i <= 224; i++) - materials[i] = Material.MangroveWood; - for (int i = 225; i <= 227; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 228; i <= 230; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 231; i <= 233; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 234; i <= 236; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 237; i <= 239; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 240; i <= 242; i++) - materials[i] = Material.StrippedCherryWood; - for (int i = 243; i <= 245; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 246; i <= 248; i++) - materials[i] = Material.StrippedPaleOakWood; - for (int i = 249; i <= 251; i++) - materials[i] = Material.StrippedMangroveWood; - for (int i = 252; i <= 279; i++) - materials[i] = Material.OakLeaves; - for (int i = 280; i <= 307; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 308; i <= 335; i++) - materials[i] = Material.BirchLeaves; - for (int i = 336; i <= 363; i++) - materials[i] = Material.JungleLeaves; - for (int i = 364; i <= 391; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 392; i <= 419; i++) - materials[i] = Material.CherryLeaves; - for (int i = 420; i <= 447; i++) - materials[i] = Material.DarkOakLeaves; - for (int i = 448; i <= 475; i++) - materials[i] = Material.PaleOakLeaves; - for (int i = 476; i <= 503; i++) - materials[i] = Material.MangroveLeaves; - for (int i = 504; i <= 531; i++) - materials[i] = Material.AzaleaLeaves; - for (int i = 532; i <= 559; i++) - materials[i] = Material.FloweringAzaleaLeaves; - for (int i = 560; i <= 560; i++) - materials[i] = Material.Sponge; - for (int i = 561; i <= 561; i++) - materials[i] = Material.WetSponge; - for (int i = 562; i <= 562; i++) - materials[i] = Material.Glass; - for (int i = 563; i <= 563; i++) - materials[i] = Material.LapisOre; - for (int i = 564; i <= 564; i++) - materials[i] = Material.DeepslateLapisOre; - for (int i = 565; i <= 565; i++) - materials[i] = Material.LapisBlock; - for (int i = 566; i <= 577; i++) - materials[i] = Material.Dispenser; - for (int i = 578; i <= 578; i++) - materials[i] = Material.Sandstone; - for (int i = 579; i <= 579; i++) - materials[i] = Material.ChiseledSandstone; - for (int i = 580; i <= 580; i++) - materials[i] = Material.CutSandstone; - for (int i = 581; i <= 1930; i++) - materials[i] = Material.NoteBlock; - for (int i = 1931; i <= 1946; i++) - materials[i] = Material.WhiteBed; - for (int i = 1947; i <= 1962; i++) - materials[i] = Material.OrangeBed; - for (int i = 1963; i <= 1978; i++) - materials[i] = Material.MagentaBed; - for (int i = 1979; i <= 1994; i++) - materials[i] = Material.LightBlueBed; - for (int i = 1995; i <= 2010; i++) - materials[i] = Material.YellowBed; - for (int i = 2011; i <= 2026; i++) - materials[i] = Material.LimeBed; - for (int i = 2027; i <= 2042; i++) - materials[i] = Material.PinkBed; - for (int i = 2043; i <= 2058; i++) - materials[i] = Material.GrayBed; - for (int i = 2059; i <= 2074; i++) - materials[i] = Material.LightGrayBed; - for (int i = 2075; i <= 2090; i++) - materials[i] = Material.CyanBed; - for (int i = 2091; i <= 2106; i++) - materials[i] = Material.PurpleBed; - for (int i = 2107; i <= 2122; i++) - materials[i] = Material.BlueBed; - for (int i = 2123; i <= 2138; i++) - materials[i] = Material.BrownBed; - for (int i = 2139; i <= 2154; i++) - materials[i] = Material.GreenBed; - for (int i = 2155; i <= 2170; i++) - materials[i] = Material.RedBed; - for (int i = 2171; i <= 2186; i++) - materials[i] = Material.BlackBed; - for (int i = 2187; i <= 2210; i++) - materials[i] = Material.PoweredRail; - for (int i = 2211; i <= 2234; i++) - materials[i] = Material.DetectorRail; - for (int i = 2235; i <= 2246; i++) - materials[i] = Material.StickyPiston; - for (int i = 2247; i <= 2247; i++) - materials[i] = Material.Cobweb; - for (int i = 2248; i <= 2248; i++) - materials[i] = Material.ShortGrass; - for (int i = 2249; i <= 2249; i++) - materials[i] = Material.Fern; - for (int i = 2250; i <= 2250; i++) - materials[i] = Material.DeadBush; - for (int i = 2251; i <= 2251; i++) - materials[i] = Material.Bush; - for (int i = 2252; i <= 2252; i++) - materials[i] = Material.ShortDryGrass; - for (int i = 2253; i <= 2253; i++) - materials[i] = Material.TallDryGrass; - for (int i = 2254; i <= 2254; i++) - materials[i] = Material.Seagrass; - for (int i = 2255; i <= 2256; i++) - materials[i] = Material.TallSeagrass; - for (int i = 2257; i <= 2268; i++) - materials[i] = Material.Piston; - for (int i = 2269; i <= 2292; i++) - materials[i] = Material.PistonHead; - for (int i = 2293; i <= 2293; i++) - materials[i] = Material.WhiteWool; - for (int i = 2294; i <= 2294; i++) - materials[i] = Material.OrangeWool; - for (int i = 2295; i <= 2295; i++) - materials[i] = Material.MagentaWool; - for (int i = 2296; i <= 2296; i++) - materials[i] = Material.LightBlueWool; - for (int i = 2297; i <= 2297; i++) - materials[i] = Material.YellowWool; - for (int i = 2298; i <= 2298; i++) - materials[i] = Material.LimeWool; - for (int i = 2299; i <= 2299; i++) - materials[i] = Material.PinkWool; - for (int i = 2300; i <= 2300; i++) - materials[i] = Material.GrayWool; - for (int i = 2301; i <= 2301; i++) - materials[i] = Material.LightGrayWool; - for (int i = 2302; i <= 2302; i++) - materials[i] = Material.CyanWool; - for (int i = 2303; i <= 2303; i++) - materials[i] = Material.PurpleWool; - for (int i = 2304; i <= 2304; i++) - materials[i] = Material.BlueWool; - for (int i = 2305; i <= 2305; i++) - materials[i] = Material.BrownWool; - for (int i = 2306; i <= 2306; i++) - materials[i] = Material.GreenWool; - for (int i = 2307; i <= 2307; i++) - materials[i] = Material.RedWool; - for (int i = 2308; i <= 2308; i++) - materials[i] = Material.BlackWool; - for (int i = 2309; i <= 2320; i++) - materials[i] = Material.MovingPiston; - for (int i = 2321; i <= 2321; i++) - materials[i] = Material.Dandelion; - for (int i = 2322; i <= 2322; i++) - materials[i] = Material.GoldenDandelion; - for (int i = 2323; i <= 2323; i++) - materials[i] = Material.Torchflower; - for (int i = 2324; i <= 2324; i++) - materials[i] = Material.Poppy; - for (int i = 2325; i <= 2325; i++) - materials[i] = Material.BlueOrchid; - for (int i = 2326; i <= 2326; i++) - materials[i] = Material.Allium; - for (int i = 2327; i <= 2327; i++) - materials[i] = Material.AzureBluet; - for (int i = 2328; i <= 2328; i++) - materials[i] = Material.RedTulip; - for (int i = 2329; i <= 2329; i++) - materials[i] = Material.OrangeTulip; - for (int i = 2330; i <= 2330; i++) - materials[i] = Material.WhiteTulip; - for (int i = 2331; i <= 2331; i++) - materials[i] = Material.PinkTulip; - for (int i = 2332; i <= 2332; i++) - materials[i] = Material.OxeyeDaisy; - for (int i = 2333; i <= 2333; i++) - materials[i] = Material.Cornflower; - for (int i = 2334; i <= 2334; i++) - materials[i] = Material.WitherRose; - for (int i = 2335; i <= 2335; i++) - materials[i] = Material.LilyOfTheValley; - for (int i = 2336; i <= 2336; i++) - materials[i] = Material.BrownMushroom; - for (int i = 2337; i <= 2337; i++) - materials[i] = Material.RedMushroom; - for (int i = 2338; i <= 2338; i++) - materials[i] = Material.GoldBlock; - for (int i = 2339; i <= 2339; i++) - materials[i] = Material.IronBlock; - for (int i = 2340; i <= 2340; i++) - materials[i] = Material.Bricks; - for (int i = 2341; i <= 2342; i++) - materials[i] = Material.Tnt; - for (int i = 2343; i <= 2343; i++) - materials[i] = Material.Bookshelf; - for (int i = 2344; i <= 2599; i++) - materials[i] = Material.ChiseledBookshelf; - for (int i = 2600; i <= 2663; i++) - materials[i] = Material.AcaciaShelf; - for (int i = 2664; i <= 2727; i++) - materials[i] = Material.BambooShelf; - for (int i = 2728; i <= 2791; i++) - materials[i] = Material.BirchShelf; - for (int i = 2792; i <= 2855; i++) - materials[i] = Material.CherryShelf; - for (int i = 2856; i <= 2919; i++) - materials[i] = Material.CrimsonShelf; - for (int i = 2920; i <= 2983; i++) - materials[i] = Material.DarkOakShelf; - for (int i = 2984; i <= 3047; i++) - materials[i] = Material.JungleShelf; - for (int i = 3048; i <= 3111; i++) - materials[i] = Material.MangroveShelf; - for (int i = 3112; i <= 3175; i++) - materials[i] = Material.OakShelf; - for (int i = 3176; i <= 3239; i++) - materials[i] = Material.PaleOakShelf; - for (int i = 3240; i <= 3303; i++) - materials[i] = Material.SpruceShelf; - for (int i = 3304; i <= 3367; i++) - materials[i] = Material.WarpedShelf; - for (int i = 3368; i <= 3368; i++) - materials[i] = Material.MossyCobblestone; - for (int i = 3369; i <= 3369; i++) - materials[i] = Material.Obsidian; - for (int i = 3370; i <= 3370; i++) - materials[i] = Material.Torch; - for (int i = 3371; i <= 3374; i++) - materials[i] = Material.WallTorch; - for (int i = 3375; i <= 3886; i++) - materials[i] = Material.Fire; - for (int i = 3887; i <= 3887; i++) - materials[i] = Material.SoulFire; - for (int i = 3888; i <= 3888; i++) - materials[i] = Material.Spawner; - for (int i = 3889; i <= 3906; i++) - materials[i] = Material.CreakingHeart; - for (int i = 3907; i <= 3986; i++) - materials[i] = Material.OakStairs; - for (int i = 3987; i <= 4010; i++) - materials[i] = Material.Chest; - for (int i = 4011; i <= 5306; i++) - materials[i] = Material.RedstoneWire; - for (int i = 5307; i <= 5307; i++) - materials[i] = Material.DiamondOre; - for (int i = 5308; i <= 5308; i++) - materials[i] = Material.DeepslateDiamondOre; - for (int i = 5309; i <= 5309; i++) - materials[i] = Material.DiamondBlock; - for (int i = 5310; i <= 5310; i++) - materials[i] = Material.CraftingTable; - for (int i = 5311; i <= 5318; i++) - materials[i] = Material.Wheat; - for (int i = 5319; i <= 5326; i++) - materials[i] = Material.Farmland; - for (int i = 5327; i <= 5334; i++) - materials[i] = Material.Furnace; - for (int i = 5335; i <= 5366; i++) - materials[i] = Material.OakSign; - for (int i = 5367; i <= 5398; i++) - materials[i] = Material.SpruceSign; - for (int i = 5399; i <= 5430; i++) - materials[i] = Material.BirchSign; - for (int i = 5431; i <= 5462; i++) - materials[i] = Material.AcaciaSign; - for (int i = 5463; i <= 5494; i++) - materials[i] = Material.CherrySign; - for (int i = 5495; i <= 5526; i++) - materials[i] = Material.JungleSign; - for (int i = 5527; i <= 5558; i++) - materials[i] = Material.DarkOakSign; - for (int i = 5559; i <= 5590; i++) - materials[i] = Material.PaleOakSign; - for (int i = 5591; i <= 5622; i++) - materials[i] = Material.MangroveSign; - for (int i = 5623; i <= 5654; i++) - materials[i] = Material.BambooSign; - for (int i = 5655; i <= 5718; i++) - materials[i] = Material.OakDoor; - for (int i = 5719; i <= 5726; i++) - materials[i] = Material.Ladder; - for (int i = 5727; i <= 5746; i++) - materials[i] = Material.Rail; - for (int i = 5747; i <= 5826; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 5827; i <= 5834; i++) - materials[i] = Material.OakWallSign; - for (int i = 5835; i <= 5842; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 5843; i <= 5850; i++) - materials[i] = Material.BirchWallSign; - for (int i = 5851; i <= 5858; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 5859; i <= 5866; i++) - materials[i] = Material.CherryWallSign; - for (int i = 5867; i <= 5874; i++) - materials[i] = Material.JungleWallSign; - for (int i = 5875; i <= 5882; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 5883; i <= 5890; i++) - materials[i] = Material.PaleOakWallSign; - for (int i = 5891; i <= 5898; i++) - materials[i] = Material.MangroveWallSign; - for (int i = 5899; i <= 5906; i++) - materials[i] = Material.BambooWallSign; - for (int i = 5907; i <= 5970; i++) - materials[i] = Material.OakHangingSign; - for (int i = 5971; i <= 6034; i++) - materials[i] = Material.SpruceHangingSign; - for (int i = 6035; i <= 6098; i++) - materials[i] = Material.BirchHangingSign; - for (int i = 6099; i <= 6162; i++) - materials[i] = Material.AcaciaHangingSign; - for (int i = 6163; i <= 6226; i++) - materials[i] = Material.CherryHangingSign; - for (int i = 6227; i <= 6290; i++) - materials[i] = Material.JungleHangingSign; - for (int i = 6291; i <= 6354; i++) - materials[i] = Material.DarkOakHangingSign; - for (int i = 6355; i <= 6418; i++) - materials[i] = Material.PaleOakHangingSign; - for (int i = 6419; i <= 6482; i++) - materials[i] = Material.CrimsonHangingSign; - for (int i = 6483; i <= 6546; i++) - materials[i] = Material.WarpedHangingSign; - for (int i = 6547; i <= 6610; i++) - materials[i] = Material.MangroveHangingSign; - for (int i = 6611; i <= 6674; i++) - materials[i] = Material.BambooHangingSign; - for (int i = 6675; i <= 6682; i++) - materials[i] = Material.OakWallHangingSign; - for (int i = 6683; i <= 6690; i++) - materials[i] = Material.SpruceWallHangingSign; - for (int i = 6691; i <= 6698; i++) - materials[i] = Material.BirchWallHangingSign; - for (int i = 6699; i <= 6706; i++) - materials[i] = Material.AcaciaWallHangingSign; - for (int i = 6707; i <= 6714; i++) - materials[i] = Material.CherryWallHangingSign; - for (int i = 6715; i <= 6722; i++) - materials[i] = Material.JungleWallHangingSign; - for (int i = 6723; i <= 6730; i++) - materials[i] = Material.DarkOakWallHangingSign; - for (int i = 6731; i <= 6738; i++) - materials[i] = Material.PaleOakWallHangingSign; - for (int i = 6739; i <= 6746; i++) - materials[i] = Material.MangroveWallHangingSign; - for (int i = 6747; i <= 6754; i++) - materials[i] = Material.CrimsonWallHangingSign; - for (int i = 6755; i <= 6762; i++) - materials[i] = Material.WarpedWallHangingSign; - for (int i = 6763; i <= 6770; i++) - materials[i] = Material.BambooWallHangingSign; - for (int i = 6771; i <= 6794; i++) - materials[i] = Material.Lever; - for (int i = 6795; i <= 6796; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 6797; i <= 6860; i++) - materials[i] = Material.IronDoor; - for (int i = 6861; i <= 6862; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 6863; i <= 6864; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 6865; i <= 6866; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 6867; i <= 6868; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 6869; i <= 6870; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 6871; i <= 6872; i++) - materials[i] = Material.CherryPressurePlate; - for (int i = 6873; i <= 6874; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 6875; i <= 6876; i++) - materials[i] = Material.PaleOakPressurePlate; - for (int i = 6877; i <= 6878; i++) - materials[i] = Material.MangrovePressurePlate; - for (int i = 6879; i <= 6880; i++) - materials[i] = Material.BambooPressurePlate; - for (int i = 6881; i <= 6882; i++) - materials[i] = Material.RedstoneOre; - for (int i = 6883; i <= 6884; i++) - materials[i] = Material.DeepslateRedstoneOre; - for (int i = 6885; i <= 6886; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 6887; i <= 6894; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 6895; i <= 6918; i++) - materials[i] = Material.StoneButton; - for (int i = 6919; i <= 6926; i++) - materials[i] = Material.Snow; - for (int i = 6927; i <= 6927; i++) - materials[i] = Material.Ice; - for (int i = 6928; i <= 6928; i++) - materials[i] = Material.SnowBlock; - for (int i = 6929; i <= 6944; i++) - materials[i] = Material.Cactus; - for (int i = 6945; i <= 6945; i++) - materials[i] = Material.CactusFlower; - for (int i = 6946; i <= 6946; i++) - materials[i] = Material.Clay; - for (int i = 6947; i <= 6962; i++) - materials[i] = Material.SugarCane; - for (int i = 6963; i <= 6964; i++) - materials[i] = Material.Jukebox; - for (int i = 6965; i <= 6996; i++) - materials[i] = Material.OakFence; - for (int i = 6997; i <= 6997; i++) - materials[i] = Material.Netherrack; - for (int i = 6998; i <= 6998; i++) - materials[i] = Material.SoulSand; - for (int i = 6999; i <= 6999; i++) - materials[i] = Material.SoulSoil; - for (int i = 7000; i <= 7002; i++) - materials[i] = Material.Basalt; - for (int i = 7003; i <= 7005; i++) - materials[i] = Material.PolishedBasalt; - for (int i = 7006; i <= 7006; i++) - materials[i] = Material.SoulTorch; - for (int i = 7007; i <= 7010; i++) - materials[i] = Material.SoulWallTorch; - for (int i = 7011; i <= 7011; i++) - materials[i] = Material.CopperTorch; - for (int i = 7012; i <= 7015; i++) - materials[i] = Material.CopperWallTorch; - for (int i = 7016; i <= 7016; i++) - materials[i] = Material.Glowstone; - for (int i = 7017; i <= 7018; i++) - materials[i] = Material.NetherPortal; - for (int i = 7019; i <= 7022; i++) - materials[i] = Material.CarvedPumpkin; - for (int i = 7023; i <= 7026; i++) - materials[i] = Material.JackOLantern; - for (int i = 7027; i <= 7033; i++) - materials[i] = Material.Cake; - for (int i = 7034; i <= 7097; i++) - materials[i] = Material.Repeater; - for (int i = 7098; i <= 7098; i++) - materials[i] = Material.WhiteStainedGlass; - for (int i = 7099; i <= 7099; i++) - materials[i] = Material.OrangeStainedGlass; - for (int i = 7100; i <= 7100; i++) - materials[i] = Material.MagentaStainedGlass; - for (int i = 7101; i <= 7101; i++) - materials[i] = Material.LightBlueStainedGlass; - for (int i = 7102; i <= 7102; i++) - materials[i] = Material.YellowStainedGlass; - for (int i = 7103; i <= 7103; i++) - materials[i] = Material.LimeStainedGlass; - for (int i = 7104; i <= 7104; i++) - materials[i] = Material.PinkStainedGlass; - for (int i = 7105; i <= 7105; i++) - materials[i] = Material.GrayStainedGlass; - for (int i = 7106; i <= 7106; i++) - materials[i] = Material.LightGrayStainedGlass; - for (int i = 7107; i <= 7107; i++) - materials[i] = Material.CyanStainedGlass; - for (int i = 7108; i <= 7108; i++) - materials[i] = Material.PurpleStainedGlass; - for (int i = 7109; i <= 7109; i++) - materials[i] = Material.BlueStainedGlass; - for (int i = 7110; i <= 7110; i++) - materials[i] = Material.BrownStainedGlass; - for (int i = 7111; i <= 7111; i++) - materials[i] = Material.GreenStainedGlass; - for (int i = 7112; i <= 7112; i++) - materials[i] = Material.RedStainedGlass; - for (int i = 7113; i <= 7113; i++) - materials[i] = Material.BlackStainedGlass; - for (int i = 7114; i <= 7177; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 7178; i <= 7241; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 7242; i <= 7305; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 7306; i <= 7369; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 7370; i <= 7433; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 7434; i <= 7497; i++) - materials[i] = Material.CherryTrapdoor; - for (int i = 7498; i <= 7561; i++) - materials[i] = Material.DarkOakTrapdoor; - for (int i = 7562; i <= 7625; i++) - materials[i] = Material.PaleOakTrapdoor; - for (int i = 7626; i <= 7689; i++) - materials[i] = Material.MangroveTrapdoor; - for (int i = 7690; i <= 7753; i++) - materials[i] = Material.BambooTrapdoor; - for (int i = 7754; i <= 7754; i++) - materials[i] = Material.StoneBricks; - for (int i = 7755; i <= 7755; i++) - materials[i] = Material.MossyStoneBricks; - for (int i = 7756; i <= 7756; i++) - materials[i] = Material.CrackedStoneBricks; - for (int i = 7757; i <= 7757; i++) - materials[i] = Material.ChiseledStoneBricks; - for (int i = 7758; i <= 7758; i++) - materials[i] = Material.PackedMud; - for (int i = 7759; i <= 7759; i++) - materials[i] = Material.MudBricks; - for (int i = 7760; i <= 7760; i++) - materials[i] = Material.InfestedStone; - for (int i = 7761; i <= 7761; i++) - materials[i] = Material.InfestedCobblestone; - for (int i = 7762; i <= 7762; i++) - materials[i] = Material.InfestedStoneBricks; - for (int i = 7763; i <= 7763; i++) - materials[i] = Material.InfestedMossyStoneBricks; - for (int i = 7764; i <= 7764; i++) - materials[i] = Material.InfestedCrackedStoneBricks; - for (int i = 7765; i <= 7765; i++) - materials[i] = Material.InfestedChiseledStoneBricks; - for (int i = 7766; i <= 7829; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 7830; i <= 7893; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 7894; i <= 7957; i++) - materials[i] = Material.MushroomStem; - for (int i = 7958; i <= 7989; i++) - materials[i] = Material.IronBars; - for (int i = 7990; i <= 8021; i++) - materials[i] = Material.CopperBars; - for (int i = 8022; i <= 8053; i++) - materials[i] = Material.ExposedCopperBars; - for (int i = 8054; i <= 8085; i++) - materials[i] = Material.WeatheredCopperBars; - for (int i = 8086; i <= 8117; i++) - materials[i] = Material.OxidizedCopperBars; - for (int i = 8118; i <= 8149; i++) - materials[i] = Material.WaxedCopperBars; - for (int i = 8150; i <= 8181; i++) - materials[i] = Material.WaxedExposedCopperBars; - for (int i = 8182; i <= 8213; i++) - materials[i] = Material.WaxedWeatheredCopperBars; - for (int i = 8214; i <= 8245; i++) - materials[i] = Material.WaxedOxidizedCopperBars; - for (int i = 8246; i <= 8251; i++) - materials[i] = Material.IronChain; - for (int i = 8252; i <= 8257; i++) - materials[i] = Material.CopperChain; - for (int i = 8258; i <= 8263; i++) - materials[i] = Material.ExposedCopperChain; - for (int i = 8264; i <= 8269; i++) - materials[i] = Material.WeatheredCopperChain; - for (int i = 8270; i <= 8275; i++) - materials[i] = Material.OxidizedCopperChain; - for (int i = 8276; i <= 8281; i++) - materials[i] = Material.WaxedCopperChain; - for (int i = 8282; i <= 8287; i++) - materials[i] = Material.WaxedExposedCopperChain; - for (int i = 8288; i <= 8293; i++) - materials[i] = Material.WaxedWeatheredCopperChain; - for (int i = 8294; i <= 8299; i++) - materials[i] = Material.WaxedOxidizedCopperChain; - for (int i = 8300; i <= 8331; i++) - materials[i] = Material.GlassPane; - for (int i = 8332; i <= 8332; i++) - materials[i] = Material.Pumpkin; - for (int i = 8333; i <= 8333; i++) - materials[i] = Material.Melon; - for (int i = 8334; i <= 8337; i++) - materials[i] = Material.AttachedPumpkinStem; - for (int i = 8338; i <= 8341; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 8342; i <= 8349; i++) - materials[i] = Material.PumpkinStem; - for (int i = 8350; i <= 8357; i++) - materials[i] = Material.MelonStem; - for (int i = 8358; i <= 8389; i++) - materials[i] = Material.Vine; - for (int i = 8390; i <= 8517; i++) - materials[i] = Material.GlowLichen; - for (int i = 8518; i <= 8645; i++) - materials[i] = Material.ResinClump; - for (int i = 8646; i <= 8677; i++) - materials[i] = Material.OakFenceGate; - for (int i = 8678; i <= 8757; i++) - materials[i] = Material.BrickStairs; - for (int i = 8758; i <= 8837; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 8838; i <= 8917; i++) - materials[i] = Material.MudBrickStairs; - for (int i = 8918; i <= 8919; i++) - materials[i] = Material.Mycelium; - for (int i = 8920; i <= 8920; i++) - materials[i] = Material.LilyPad; - for (int i = 8921; i <= 8921; i++) - materials[i] = Material.ResinBlock; - for (int i = 8922; i <= 8922; i++) - materials[i] = Material.ResinBricks; - for (int i = 8923; i <= 9002; i++) - materials[i] = Material.ResinBrickStairs; - for (int i = 9003; i <= 9008; i++) - materials[i] = Material.ResinBrickSlab; - for (int i = 9009; i <= 9332; i++) - materials[i] = Material.ResinBrickWall; - for (int i = 9333; i <= 9333; i++) - materials[i] = Material.ChiseledResinBricks; - for (int i = 9334; i <= 9334; i++) - materials[i] = Material.NetherBricks; - for (int i = 9335; i <= 9366; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 9367; i <= 9446; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 9447; i <= 9450; i++) - materials[i] = Material.NetherWart; - for (int i = 9451; i <= 9451; i++) - materials[i] = Material.EnchantingTable; - for (int i = 9452; i <= 9459; i++) - materials[i] = Material.BrewingStand; - for (int i = 9460; i <= 9460; i++) - materials[i] = Material.Cauldron; - for (int i = 9461; i <= 9463; i++) - materials[i] = Material.WaterCauldron; - for (int i = 9464; i <= 9464; i++) - materials[i] = Material.LavaCauldron; - for (int i = 9465; i <= 9467; i++) - materials[i] = Material.PowderSnowCauldron; - for (int i = 9468; i <= 9468; i++) - materials[i] = Material.EndPortal; - for (int i = 9469; i <= 9476; i++) - materials[i] = Material.EndPortalFrame; - for (int i = 9477; i <= 9477; i++) - materials[i] = Material.EndStone; - for (int i = 9478; i <= 9478; i++) - materials[i] = Material.DragonEgg; - for (int i = 9479; i <= 9480; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 9481; i <= 9492; i++) - materials[i] = Material.Cocoa; - for (int i = 9493; i <= 9572; i++) - materials[i] = Material.SandstoneStairs; - for (int i = 9573; i <= 9573; i++) - materials[i] = Material.EmeraldOre; - for (int i = 9574; i <= 9574; i++) - materials[i] = Material.DeepslateEmeraldOre; - for (int i = 9575; i <= 9582; i++) - materials[i] = Material.EnderChest; - for (int i = 9583; i <= 9598; i++) - materials[i] = Material.TripwireHook; - for (int i = 9599; i <= 9726; i++) - materials[i] = Material.Tripwire; - for (int i = 9727; i <= 9727; i++) - materials[i] = Material.EmeraldBlock; - for (int i = 9728; i <= 9807; i++) - materials[i] = Material.SpruceStairs; - for (int i = 9808; i <= 9887; i++) - materials[i] = Material.BirchStairs; - for (int i = 9888; i <= 9967; i++) - materials[i] = Material.JungleStairs; - for (int i = 9968; i <= 9979; i++) - materials[i] = Material.CommandBlock; - for (int i = 9980; i <= 9980; i++) - materials[i] = Material.Beacon; - for (int i = 9981; i <= 10304; i++) - materials[i] = Material.CobblestoneWall; - for (int i = 10305; i <= 10628; i++) - materials[i] = Material.MossyCobblestoneWall; - for (int i = 10629; i <= 10629; i++) - materials[i] = Material.FlowerPot; - for (int i = 10630; i <= 10630; i++) - materials[i] = Material.PottedTorchflower; - for (int i = 10631; i <= 10631; i++) - materials[i] = Material.PottedOakSapling; - for (int i = 10632; i <= 10632; i++) - materials[i] = Material.PottedSpruceSapling; - for (int i = 10633; i <= 10633; i++) - materials[i] = Material.PottedBirchSapling; - for (int i = 10634; i <= 10634; i++) - materials[i] = Material.PottedJungleSapling; - for (int i = 10635; i <= 10635; i++) - materials[i] = Material.PottedAcaciaSapling; - for (int i = 10636; i <= 10636; i++) - materials[i] = Material.PottedCherrySapling; - for (int i = 10637; i <= 10637; i++) - materials[i] = Material.PottedDarkOakSapling; - for (int i = 10638; i <= 10638; i++) - materials[i] = Material.PottedPaleOakSapling; - for (int i = 10639; i <= 10639; i++) - materials[i] = Material.PottedMangrovePropagule; - for (int i = 10640; i <= 10640; i++) - materials[i] = Material.PottedFern; - for (int i = 10641; i <= 10641; i++) - materials[i] = Material.PottedDandelion; - for (int i = 10642; i <= 10642; i++) - materials[i] = Material.PottedGoldenDandelion; - for (int i = 10643; i <= 10643; i++) - materials[i] = Material.PottedPoppy; - for (int i = 10644; i <= 10644; i++) - materials[i] = Material.PottedBlueOrchid; - for (int i = 10645; i <= 10645; i++) - materials[i] = Material.PottedAllium; - for (int i = 10646; i <= 10646; i++) - materials[i] = Material.PottedAzureBluet; - for (int i = 10647; i <= 10647; i++) - materials[i] = Material.PottedRedTulip; - for (int i = 10648; i <= 10648; i++) - materials[i] = Material.PottedOrangeTulip; - for (int i = 10649; i <= 10649; i++) - materials[i] = Material.PottedWhiteTulip; - for (int i = 10650; i <= 10650; i++) - materials[i] = Material.PottedPinkTulip; - for (int i = 10651; i <= 10651; i++) - materials[i] = Material.PottedOxeyeDaisy; - for (int i = 10652; i <= 10652; i++) - materials[i] = Material.PottedCornflower; - for (int i = 10653; i <= 10653; i++) - materials[i] = Material.PottedLilyOfTheValley; - for (int i = 10654; i <= 10654; i++) - materials[i] = Material.PottedWitherRose; - for (int i = 10655; i <= 10655; i++) - materials[i] = Material.PottedRedMushroom; - for (int i = 10656; i <= 10656; i++) - materials[i] = Material.PottedBrownMushroom; - for (int i = 10657; i <= 10657; i++) - materials[i] = Material.PottedDeadBush; - for (int i = 10658; i <= 10658; i++) - materials[i] = Material.PottedCactus; - for (int i = 10659; i <= 10666; i++) - materials[i] = Material.Carrots; - for (int i = 10667; i <= 10674; i++) - materials[i] = Material.Potatoes; - for (int i = 10675; i <= 10698; i++) - materials[i] = Material.OakButton; - for (int i = 10699; i <= 10722; i++) - materials[i] = Material.SpruceButton; - for (int i = 10723; i <= 10746; i++) - materials[i] = Material.BirchButton; - for (int i = 10747; i <= 10770; i++) - materials[i] = Material.JungleButton; - for (int i = 10771; i <= 10794; i++) - materials[i] = Material.AcaciaButton; - for (int i = 10795; i <= 10818; i++) - materials[i] = Material.CherryButton; - for (int i = 10819; i <= 10842; i++) - materials[i] = Material.DarkOakButton; - for (int i = 10843; i <= 10866; i++) - materials[i] = Material.PaleOakButton; - for (int i = 10867; i <= 10890; i++) - materials[i] = Material.MangroveButton; - for (int i = 10891; i <= 10914; i++) - materials[i] = Material.BambooButton; - for (int i = 10915; i <= 10946; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 10947; i <= 10954; i++) - materials[i] = Material.SkeletonWallSkull; - for (int i = 10955; i <= 10986; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 10987; i <= 10994; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 10995; i <= 11026; i++) - materials[i] = Material.ZombieHead; - for (int i = 11027; i <= 11034; i++) - materials[i] = Material.ZombieWallHead; - for (int i = 11035; i <= 11066; i++) - materials[i] = Material.PlayerHead; - for (int i = 11067; i <= 11074; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 11075; i <= 11106; i++) - materials[i] = Material.CreeperHead; - for (int i = 11107; i <= 11114; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 11115; i <= 11146; i++) - materials[i] = Material.DragonHead; - for (int i = 11147; i <= 11154; i++) - materials[i] = Material.DragonWallHead; - for (int i = 11155; i <= 11186; i++) - materials[i] = Material.PiglinHead; - for (int i = 11187; i <= 11194; i++) - materials[i] = Material.PiglinWallHead; - for (int i = 11195; i <= 11198; i++) - materials[i] = Material.Anvil; - for (int i = 11199; i <= 11202; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 11203; i <= 11206; i++) - materials[i] = Material.DamagedAnvil; - for (int i = 11207; i <= 11230; i++) - materials[i] = Material.TrappedChest; - for (int i = 11231; i <= 11246; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 11247; i <= 11262; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - for (int i = 11263; i <= 11278; i++) - materials[i] = Material.Comparator; - for (int i = 11279; i <= 11310; i++) - materials[i] = Material.DaylightDetector; - for (int i = 11311; i <= 11311; i++) - materials[i] = Material.RedstoneBlock; - for (int i = 11312; i <= 11312; i++) - materials[i] = Material.NetherQuartzOre; - for (int i = 11313; i <= 11322; i++) - materials[i] = Material.Hopper; - for (int i = 11323; i <= 11323; i++) - materials[i] = Material.QuartzBlock; - for (int i = 11324; i <= 11324; i++) - materials[i] = Material.ChiseledQuartzBlock; - for (int i = 11325; i <= 11327; i++) - materials[i] = Material.QuartzPillar; - for (int i = 11328; i <= 11407; i++) - materials[i] = Material.QuartzStairs; - for (int i = 11408; i <= 11431; i++) - materials[i] = Material.ActivatorRail; - for (int i = 11432; i <= 11443; i++) - materials[i] = Material.Dropper; - for (int i = 11444; i <= 11444; i++) - materials[i] = Material.WhiteTerracotta; - for (int i = 11445; i <= 11445; i++) - materials[i] = Material.OrangeTerracotta; - for (int i = 11446; i <= 11446; i++) - materials[i] = Material.MagentaTerracotta; - for (int i = 11447; i <= 11447; i++) - materials[i] = Material.LightBlueTerracotta; - for (int i = 11448; i <= 11448; i++) - materials[i] = Material.YellowTerracotta; - for (int i = 11449; i <= 11449; i++) - materials[i] = Material.LimeTerracotta; - for (int i = 11450; i <= 11450; i++) - materials[i] = Material.PinkTerracotta; - for (int i = 11451; i <= 11451; i++) - materials[i] = Material.GrayTerracotta; - for (int i = 11452; i <= 11452; i++) - materials[i] = Material.LightGrayTerracotta; - for (int i = 11453; i <= 11453; i++) - materials[i] = Material.CyanTerracotta; - for (int i = 11454; i <= 11454; i++) - materials[i] = Material.PurpleTerracotta; - for (int i = 11455; i <= 11455; i++) - materials[i] = Material.BlueTerracotta; - for (int i = 11456; i <= 11456; i++) - materials[i] = Material.BrownTerracotta; - for (int i = 11457; i <= 11457; i++) - materials[i] = Material.GreenTerracotta; - for (int i = 11458; i <= 11458; i++) - materials[i] = Material.RedTerracotta; - for (int i = 11459; i <= 11459; i++) - materials[i] = Material.BlackTerracotta; - for (int i = 11460; i <= 11491; i++) - materials[i] = Material.WhiteStainedGlassPane; - for (int i = 11492; i <= 11523; i++) - materials[i] = Material.OrangeStainedGlassPane; - for (int i = 11524; i <= 11555; i++) - materials[i] = Material.MagentaStainedGlassPane; - for (int i = 11556; i <= 11587; i++) - materials[i] = Material.LightBlueStainedGlassPane; - for (int i = 11588; i <= 11619; i++) - materials[i] = Material.YellowStainedGlassPane; - for (int i = 11620; i <= 11651; i++) - materials[i] = Material.LimeStainedGlassPane; - for (int i = 11652; i <= 11683; i++) - materials[i] = Material.PinkStainedGlassPane; - for (int i = 11684; i <= 11715; i++) - materials[i] = Material.GrayStainedGlassPane; - for (int i = 11716; i <= 11747; i++) - materials[i] = Material.LightGrayStainedGlassPane; - for (int i = 11748; i <= 11779; i++) - materials[i] = Material.CyanStainedGlassPane; - for (int i = 11780; i <= 11811; i++) - materials[i] = Material.PurpleStainedGlassPane; - for (int i = 11812; i <= 11843; i++) - materials[i] = Material.BlueStainedGlassPane; - for (int i = 11844; i <= 11875; i++) - materials[i] = Material.BrownStainedGlassPane; - for (int i = 11876; i <= 11907; i++) - materials[i] = Material.GreenStainedGlassPane; - for (int i = 11908; i <= 11939; i++) - materials[i] = Material.RedStainedGlassPane; - for (int i = 11940; i <= 11971; i++) - materials[i] = Material.BlackStainedGlassPane; - for (int i = 11972; i <= 12051; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 12052; i <= 12131; i++) - materials[i] = Material.CherryStairs; - for (int i = 12132; i <= 12211; i++) - materials[i] = Material.DarkOakStairs; - for (int i = 12212; i <= 12291; i++) - materials[i] = Material.PaleOakStairs; - for (int i = 12292; i <= 12371; i++) - materials[i] = Material.MangroveStairs; - for (int i = 12372; i <= 12451; i++) - materials[i] = Material.BambooStairs; - for (int i = 12452; i <= 12531; i++) - materials[i] = Material.BambooMosaicStairs; - for (int i = 12532; i <= 12532; i++) - materials[i] = Material.SlimeBlock; - for (int i = 12533; i <= 12534; i++) - materials[i] = Material.Barrier; - for (int i = 12535; i <= 12566; i++) - materials[i] = Material.Light; - for (int i = 12567; i <= 12630; i++) - materials[i] = Material.IronTrapdoor; - for (int i = 12631; i <= 12631; i++) - materials[i] = Material.Prismarine; - for (int i = 12632; i <= 12632; i++) - materials[i] = Material.PrismarineBricks; - for (int i = 12633; i <= 12633; i++) - materials[i] = Material.DarkPrismarine; - for (int i = 12634; i <= 12713; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 12714; i <= 12793; i++) - materials[i] = Material.PrismarineBrickStairs; - for (int i = 12794; i <= 12873; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 12874; i <= 12879; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 12880; i <= 12885; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 12886; i <= 12891; i++) - materials[i] = Material.DarkPrismarineSlab; - for (int i = 12892; i <= 12892; i++) - materials[i] = Material.SeaLantern; - for (int i = 12893; i <= 12895; i++) - materials[i] = Material.HayBlock; - for (int i = 12896; i <= 12896; i++) - materials[i] = Material.WhiteCarpet; - for (int i = 12897; i <= 12897; i++) - materials[i] = Material.OrangeCarpet; - for (int i = 12898; i <= 12898; i++) - materials[i] = Material.MagentaCarpet; - for (int i = 12899; i <= 12899; i++) - materials[i] = Material.LightBlueCarpet; - for (int i = 12900; i <= 12900; i++) - materials[i] = Material.YellowCarpet; - for (int i = 12901; i <= 12901; i++) - materials[i] = Material.LimeCarpet; - for (int i = 12902; i <= 12902; i++) - materials[i] = Material.PinkCarpet; - for (int i = 12903; i <= 12903; i++) - materials[i] = Material.GrayCarpet; - for (int i = 12904; i <= 12904; i++) - materials[i] = Material.LightGrayCarpet; - for (int i = 12905; i <= 12905; i++) - materials[i] = Material.CyanCarpet; - for (int i = 12906; i <= 12906; i++) - materials[i] = Material.PurpleCarpet; - for (int i = 12907; i <= 12907; i++) - materials[i] = Material.BlueCarpet; - for (int i = 12908; i <= 12908; i++) - materials[i] = Material.BrownCarpet; - for (int i = 12909; i <= 12909; i++) - materials[i] = Material.GreenCarpet; - for (int i = 12910; i <= 12910; i++) - materials[i] = Material.RedCarpet; - for (int i = 12911; i <= 12911; i++) - materials[i] = Material.BlackCarpet; - for (int i = 12912; i <= 12912; i++) - materials[i] = Material.Terracotta; - for (int i = 12913; i <= 12913; i++) - materials[i] = Material.CoalBlock; - for (int i = 12914; i <= 12914; i++) - materials[i] = Material.PackedIce; - for (int i = 12915; i <= 12916; i++) - materials[i] = Material.Sunflower; - for (int i = 12917; i <= 12918; i++) - materials[i] = Material.Lilac; - for (int i = 12919; i <= 12920; i++) - materials[i] = Material.RoseBush; - for (int i = 12921; i <= 12922; i++) - materials[i] = Material.Peony; - for (int i = 12923; i <= 12924; i++) - materials[i] = Material.TallGrass; - for (int i = 12925; i <= 12926; i++) - materials[i] = Material.LargeFern; - for (int i = 12927; i <= 12942; i++) - materials[i] = Material.WhiteBanner; - for (int i = 12943; i <= 12958; i++) - materials[i] = Material.OrangeBanner; - for (int i = 12959; i <= 12974; i++) - materials[i] = Material.MagentaBanner; - for (int i = 12975; i <= 12990; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 12991; i <= 13006; i++) - materials[i] = Material.YellowBanner; - for (int i = 13007; i <= 13022; i++) - materials[i] = Material.LimeBanner; - for (int i = 13023; i <= 13038; i++) - materials[i] = Material.PinkBanner; - for (int i = 13039; i <= 13054; i++) - materials[i] = Material.GrayBanner; - for (int i = 13055; i <= 13070; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 13071; i <= 13086; i++) - materials[i] = Material.CyanBanner; - for (int i = 13087; i <= 13102; i++) - materials[i] = Material.PurpleBanner; - for (int i = 13103; i <= 13118; i++) - materials[i] = Material.BlueBanner; - for (int i = 13119; i <= 13134; i++) - materials[i] = Material.BrownBanner; - for (int i = 13135; i <= 13150; i++) - materials[i] = Material.GreenBanner; - for (int i = 13151; i <= 13166; i++) - materials[i] = Material.RedBanner; - for (int i = 13167; i <= 13182; i++) - materials[i] = Material.BlackBanner; - for (int i = 13183; i <= 13186; i++) - materials[i] = Material.WhiteWallBanner; - for (int i = 13187; i <= 13190; i++) - materials[i] = Material.OrangeWallBanner; - for (int i = 13191; i <= 13194; i++) - materials[i] = Material.MagentaWallBanner; - for (int i = 13195; i <= 13198; i++) - materials[i] = Material.LightBlueWallBanner; - for (int i = 13199; i <= 13202; i++) - materials[i] = Material.YellowWallBanner; - for (int i = 13203; i <= 13206; i++) - materials[i] = Material.LimeWallBanner; - for (int i = 13207; i <= 13210; i++) - materials[i] = Material.PinkWallBanner; - for (int i = 13211; i <= 13214; i++) - materials[i] = Material.GrayWallBanner; - for (int i = 13215; i <= 13218; i++) - materials[i] = Material.LightGrayWallBanner; - for (int i = 13219; i <= 13222; i++) - materials[i] = Material.CyanWallBanner; - for (int i = 13223; i <= 13226; i++) - materials[i] = Material.PurpleWallBanner; - for (int i = 13227; i <= 13230; i++) - materials[i] = Material.BlueWallBanner; - for (int i = 13231; i <= 13234; i++) - materials[i] = Material.BrownWallBanner; - for (int i = 13235; i <= 13238; i++) - materials[i] = Material.GreenWallBanner; - for (int i = 13239; i <= 13242; i++) - materials[i] = Material.RedWallBanner; - for (int i = 13243; i <= 13246; i++) - materials[i] = Material.BlackWallBanner; - for (int i = 13247; i <= 13247; i++) - materials[i] = Material.RedSandstone; - for (int i = 13248; i <= 13248; i++) - materials[i] = Material.ChiseledRedSandstone; - for (int i = 13249; i <= 13249; i++) - materials[i] = Material.CutRedSandstone; - for (int i = 13250; i <= 13329; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 13330; i <= 13335; i++) - materials[i] = Material.OakSlab; - for (int i = 13336; i <= 13341; i++) - materials[i] = Material.SpruceSlab; - for (int i = 13342; i <= 13347; i++) - materials[i] = Material.BirchSlab; - for (int i = 13348; i <= 13353; i++) - materials[i] = Material.JungleSlab; - for (int i = 13354; i <= 13359; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 13360; i <= 13365; i++) - materials[i] = Material.CherrySlab; - for (int i = 13366; i <= 13371; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 13372; i <= 13377; i++) - materials[i] = Material.PaleOakSlab; - for (int i = 13378; i <= 13383; i++) - materials[i] = Material.MangroveSlab; - for (int i = 13384; i <= 13389; i++) - materials[i] = Material.BambooSlab; - for (int i = 13390; i <= 13395; i++) - materials[i] = Material.BambooMosaicSlab; - for (int i = 13396; i <= 13401; i++) - materials[i] = Material.StoneSlab; - for (int i = 13402; i <= 13407; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 13408; i <= 13413; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 13414; i <= 13419; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 13420; i <= 13425; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 13426; i <= 13431; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 13432; i <= 13437; i++) - materials[i] = Material.BrickSlab; - for (int i = 13438; i <= 13443; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 13444; i <= 13449; i++) - materials[i] = Material.MudBrickSlab; - for (int i = 13450; i <= 13455; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 13456; i <= 13461; i++) - materials[i] = Material.QuartzSlab; - for (int i = 13462; i <= 13467; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 13468; i <= 13473; i++) - materials[i] = Material.CutRedSandstoneSlab; - for (int i = 13474; i <= 13479; i++) - materials[i] = Material.PurpurSlab; - for (int i = 13480; i <= 13480; i++) - materials[i] = Material.SmoothStone; - for (int i = 13481; i <= 13481; i++) - materials[i] = Material.SmoothSandstone; - for (int i = 13482; i <= 13482; i++) - materials[i] = Material.SmoothQuartz; - for (int i = 13483; i <= 13483; i++) - materials[i] = Material.SmoothRedSandstone; - for (int i = 13484; i <= 13515; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 13516; i <= 13547; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 13548; i <= 13579; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 13580; i <= 13611; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 13612; i <= 13643; i++) - materials[i] = Material.CherryFenceGate; - for (int i = 13644; i <= 13675; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 13676; i <= 13707; i++) - materials[i] = Material.PaleOakFenceGate; - for (int i = 13708; i <= 13739; i++) - materials[i] = Material.MangroveFenceGate; - for (int i = 13740; i <= 13771; i++) - materials[i] = Material.BambooFenceGate; - for (int i = 13772; i <= 13803; i++) - materials[i] = Material.SpruceFence; - for (int i = 13804; i <= 13835; i++) - materials[i] = Material.BirchFence; - for (int i = 13836; i <= 13867; i++) - materials[i] = Material.JungleFence; - for (int i = 13868; i <= 13899; i++) - materials[i] = Material.AcaciaFence; - for (int i = 13900; i <= 13931; i++) - materials[i] = Material.CherryFence; - for (int i = 13932; i <= 13963; i++) - materials[i] = Material.DarkOakFence; - for (int i = 13964; i <= 13995; i++) - materials[i] = Material.PaleOakFence; - for (int i = 13996; i <= 14027; i++) - materials[i] = Material.MangroveFence; - for (int i = 14028; i <= 14059; i++) - materials[i] = Material.BambooFence; - for (int i = 14060; i <= 14123; i++) - materials[i] = Material.SpruceDoor; - for (int i = 14124; i <= 14187; i++) - materials[i] = Material.BirchDoor; - for (int i = 14188; i <= 14251; i++) - materials[i] = Material.JungleDoor; - for (int i = 14252; i <= 14315; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 14316; i <= 14379; i++) - materials[i] = Material.CherryDoor; - for (int i = 14380; i <= 14443; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 14444; i <= 14507; i++) - materials[i] = Material.PaleOakDoor; - for (int i = 14508; i <= 14571; i++) - materials[i] = Material.MangroveDoor; - for (int i = 14572; i <= 14635; i++) - materials[i] = Material.BambooDoor; - for (int i = 14636; i <= 14641; i++) - materials[i] = Material.EndRod; - for (int i = 14642; i <= 14705; i++) - materials[i] = Material.ChorusPlant; - for (int i = 14706; i <= 14711; i++) - materials[i] = Material.ChorusFlower; - for (int i = 14712; i <= 14712; i++) - materials[i] = Material.PurpurBlock; - for (int i = 14713; i <= 14715; i++) - materials[i] = Material.PurpurPillar; - for (int i = 14716; i <= 14795; i++) - materials[i] = Material.PurpurStairs; - for (int i = 14796; i <= 14796; i++) - materials[i] = Material.EndStoneBricks; - for (int i = 14797; i <= 14798; i++) - materials[i] = Material.TorchflowerCrop; - for (int i = 14799; i <= 14808; i++) - materials[i] = Material.PitcherCrop; - for (int i = 14809; i <= 14810; i++) - materials[i] = Material.PitcherPlant; - for (int i = 14811; i <= 14814; i++) - materials[i] = Material.Beetroots; - for (int i = 14815; i <= 14815; i++) - materials[i] = Material.DirtPath; - for (int i = 14816; i <= 14816; i++) - materials[i] = Material.EndGateway; - for (int i = 14817; i <= 14828; i++) - materials[i] = Material.RepeatingCommandBlock; - for (int i = 14829; i <= 14840; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 14841; i <= 14844; i++) - materials[i] = Material.FrostedIce; - for (int i = 14845; i <= 14845; i++) - materials[i] = Material.MagmaBlock; - for (int i = 14846; i <= 14846; i++) - materials[i] = Material.NetherWartBlock; - for (int i = 14847; i <= 14847; i++) - materials[i] = Material.RedNetherBricks; - for (int i = 14848; i <= 14850; i++) - materials[i] = Material.BoneBlock; - for (int i = 14851; i <= 14851; i++) - materials[i] = Material.StructureVoid; - for (int i = 14852; i <= 14863; i++) - materials[i] = Material.Observer; - for (int i = 14864; i <= 14869; i++) - materials[i] = Material.ShulkerBox; - for (int i = 14870; i <= 14875; i++) - materials[i] = Material.WhiteShulkerBox; - for (int i = 14876; i <= 14881; i++) - materials[i] = Material.OrangeShulkerBox; - for (int i = 14882; i <= 14887; i++) - materials[i] = Material.MagentaShulkerBox; - for (int i = 14888; i <= 14893; i++) - materials[i] = Material.LightBlueShulkerBox; - for (int i = 14894; i <= 14899; i++) - materials[i] = Material.YellowShulkerBox; - for (int i = 14900; i <= 14905; i++) - materials[i] = Material.LimeShulkerBox; - for (int i = 14906; i <= 14911; i++) - materials[i] = Material.PinkShulkerBox; - for (int i = 14912; i <= 14917; i++) - materials[i] = Material.GrayShulkerBox; - for (int i = 14918; i <= 14923; i++) - materials[i] = Material.LightGrayShulkerBox; - for (int i = 14924; i <= 14929; i++) - materials[i] = Material.CyanShulkerBox; - for (int i = 14930; i <= 14935; i++) - materials[i] = Material.PurpleShulkerBox; - for (int i = 14936; i <= 14941; i++) - materials[i] = Material.BlueShulkerBox; - for (int i = 14942; i <= 14947; i++) - materials[i] = Material.BrownShulkerBox; - for (int i = 14948; i <= 14953; i++) - materials[i] = Material.GreenShulkerBox; - for (int i = 14954; i <= 14959; i++) - materials[i] = Material.RedShulkerBox; - for (int i = 14960; i <= 14965; i++) - materials[i] = Material.BlackShulkerBox; - for (int i = 14966; i <= 14969; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 14970; i <= 14973; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 14974; i <= 14977; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 14978; i <= 14981; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 14982; i <= 14985; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 14986; i <= 14989; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 14990; i <= 14993; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 14994; i <= 14997; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 14998; i <= 15001; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 15002; i <= 15005; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 15006; i <= 15009; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 15010; i <= 15013; i++) - materials[i] = Material.BlueGlazedTerracotta; - for (int i = 15014; i <= 15017; i++) - materials[i] = Material.BrownGlazedTerracotta; - for (int i = 15018; i <= 15021; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 15022; i <= 15025; i++) - materials[i] = Material.RedGlazedTerracotta; - for (int i = 15026; i <= 15029; i++) - materials[i] = Material.BlackGlazedTerracotta; - for (int i = 15030; i <= 15030; i++) - materials[i] = Material.WhiteConcrete; - for (int i = 15031; i <= 15031; i++) - materials[i] = Material.OrangeConcrete; - for (int i = 15032; i <= 15032; i++) - materials[i] = Material.MagentaConcrete; - for (int i = 15033; i <= 15033; i++) - materials[i] = Material.LightBlueConcrete; - for (int i = 15034; i <= 15034; i++) - materials[i] = Material.YellowConcrete; - for (int i = 15035; i <= 15035; i++) - materials[i] = Material.LimeConcrete; - for (int i = 15036; i <= 15036; i++) - materials[i] = Material.PinkConcrete; - for (int i = 15037; i <= 15037; i++) - materials[i] = Material.GrayConcrete; - for (int i = 15038; i <= 15038; i++) - materials[i] = Material.LightGrayConcrete; - for (int i = 15039; i <= 15039; i++) - materials[i] = Material.CyanConcrete; - for (int i = 15040; i <= 15040; i++) - materials[i] = Material.PurpleConcrete; - for (int i = 15041; i <= 15041; i++) - materials[i] = Material.BlueConcrete; - for (int i = 15042; i <= 15042; i++) - materials[i] = Material.BrownConcrete; - for (int i = 15043; i <= 15043; i++) - materials[i] = Material.GreenConcrete; - for (int i = 15044; i <= 15044; i++) - materials[i] = Material.RedConcrete; - for (int i = 15045; i <= 15045; i++) - materials[i] = Material.BlackConcrete; - for (int i = 15046; i <= 15046; i++) - materials[i] = Material.WhiteConcretePowder; - for (int i = 15047; i <= 15047; i++) - materials[i] = Material.OrangeConcretePowder; - for (int i = 15048; i <= 15048; i++) - materials[i] = Material.MagentaConcretePowder; - for (int i = 15049; i <= 15049; i++) - materials[i] = Material.LightBlueConcretePowder; - for (int i = 15050; i <= 15050; i++) - materials[i] = Material.YellowConcretePowder; - for (int i = 15051; i <= 15051; i++) - materials[i] = Material.LimeConcretePowder; - for (int i = 15052; i <= 15052; i++) - materials[i] = Material.PinkConcretePowder; - for (int i = 15053; i <= 15053; i++) - materials[i] = Material.GrayConcretePowder; - for (int i = 15054; i <= 15054; i++) - materials[i] = Material.LightGrayConcretePowder; - for (int i = 15055; i <= 15055; i++) - materials[i] = Material.CyanConcretePowder; - for (int i = 15056; i <= 15056; i++) - materials[i] = Material.PurpleConcretePowder; - for (int i = 15057; i <= 15057; i++) - materials[i] = Material.BlueConcretePowder; - for (int i = 15058; i <= 15058; i++) - materials[i] = Material.BrownConcretePowder; - for (int i = 15059; i <= 15059; i++) - materials[i] = Material.GreenConcretePowder; - for (int i = 15060; i <= 15060; i++) - materials[i] = Material.RedConcretePowder; - for (int i = 15061; i <= 15061; i++) - materials[i] = Material.BlackConcretePowder; - for (int i = 15062; i <= 15087; i++) - materials[i] = Material.Kelp; - for (int i = 15088; i <= 15088; i++) - materials[i] = Material.KelpPlant; - for (int i = 15089; i <= 15089; i++) - materials[i] = Material.DriedKelpBlock; - for (int i = 15090; i <= 15101; i++) - materials[i] = Material.TurtleEgg; - for (int i = 15102; i <= 15104; i++) - materials[i] = Material.SnifferEgg; - for (int i = 15105; i <= 15136; i++) - materials[i] = Material.DriedGhast; - for (int i = 15137; i <= 15137; i++) - materials[i] = Material.DeadTubeCoralBlock; - for (int i = 15138; i <= 15138; i++) - materials[i] = Material.DeadBrainCoralBlock; - for (int i = 15139; i <= 15139; i++) - materials[i] = Material.DeadBubbleCoralBlock; - for (int i = 15140; i <= 15140; i++) - materials[i] = Material.DeadFireCoralBlock; - for (int i = 15141; i <= 15141; i++) - materials[i] = Material.DeadHornCoralBlock; - for (int i = 15142; i <= 15142; i++) - materials[i] = Material.TubeCoralBlock; - for (int i = 15143; i <= 15143; i++) - materials[i] = Material.BrainCoralBlock; - for (int i = 15144; i <= 15144; i++) - materials[i] = Material.BubbleCoralBlock; - for (int i = 15145; i <= 15145; i++) - materials[i] = Material.FireCoralBlock; - for (int i = 15146; i <= 15146; i++) - materials[i] = Material.HornCoralBlock; - for (int i = 15147; i <= 15148; i++) - materials[i] = Material.DeadTubeCoral; - for (int i = 15149; i <= 15150; i++) - materials[i] = Material.DeadBrainCoral; - for (int i = 15151; i <= 15152; i++) - materials[i] = Material.DeadBubbleCoral; - for (int i = 15153; i <= 15154; i++) - materials[i] = Material.DeadFireCoral; - for (int i = 15155; i <= 15156; i++) - materials[i] = Material.DeadHornCoral; - for (int i = 15157; i <= 15158; i++) - materials[i] = Material.TubeCoral; - for (int i = 15159; i <= 15160; i++) - materials[i] = Material.BrainCoral; - for (int i = 15161; i <= 15162; i++) - materials[i] = Material.BubbleCoral; - for (int i = 15163; i <= 15164; i++) - materials[i] = Material.FireCoral; - for (int i = 15165; i <= 15166; i++) - materials[i] = Material.HornCoral; - for (int i = 15167; i <= 15168; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 15169; i <= 15170; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 15171; i <= 15172; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 15173; i <= 15174; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 15175; i <= 15176; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 15177; i <= 15178; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 15179; i <= 15180; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 15181; i <= 15182; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 15183; i <= 15184; i++) - materials[i] = Material.FireCoralFan; - for (int i = 15185; i <= 15186; i++) - materials[i] = Material.HornCoralFan; - for (int i = 15187; i <= 15194; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 15195; i <= 15202; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 15203; i <= 15210; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - for (int i = 15211; i <= 15218; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 15219; i <= 15226; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 15227; i <= 15234; i++) - materials[i] = Material.TubeCoralWallFan; - for (int i = 15235; i <= 15242; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 15243; i <= 15250; i++) - materials[i] = Material.BubbleCoralWallFan; - for (int i = 15251; i <= 15258; i++) - materials[i] = Material.FireCoralWallFan; - for (int i = 15259; i <= 15266; i++) - materials[i] = Material.HornCoralWallFan; - for (int i = 15267; i <= 15274; i++) - materials[i] = Material.SeaPickle; - for (int i = 15275; i <= 15275; i++) - materials[i] = Material.BlueIce; - for (int i = 15276; i <= 15277; i++) - materials[i] = Material.Conduit; - for (int i = 15278; i <= 15278; i++) - materials[i] = Material.BambooSapling; - for (int i = 15279; i <= 15290; i++) - materials[i] = Material.Bamboo; - for (int i = 15291; i <= 15291; i++) - materials[i] = Material.PottedBamboo; - for (int i = 15292; i <= 15292; i++) - materials[i] = Material.VoidAir; - for (int i = 15293; i <= 15293; i++) - materials[i] = Material.CaveAir; - for (int i = 15294; i <= 15295; i++) - materials[i] = Material.BubbleColumn; - for (int i = 15296; i <= 15375; i++) - materials[i] = Material.PolishedGraniteStairs; - for (int i = 15376; i <= 15455; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - for (int i = 15456; i <= 15535; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 15536; i <= 15615; i++) - materials[i] = Material.PolishedDioriteStairs; - for (int i = 15616; i <= 15695; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 15696; i <= 15775; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 15776; i <= 15855; i++) - materials[i] = Material.StoneStairs; - for (int i = 15856; i <= 15935; i++) - materials[i] = Material.SmoothSandstoneStairs; - for (int i = 15936; i <= 16015; i++) - materials[i] = Material.SmoothQuartzStairs; - for (int i = 16016; i <= 16095; i++) - materials[i] = Material.GraniteStairs; - for (int i = 16096; i <= 16175; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 16176; i <= 16255; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 16256; i <= 16335; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 16336; i <= 16415; i++) - materials[i] = Material.DioriteStairs; - for (int i = 16416; i <= 16421; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 16422; i <= 16427; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 16428; i <= 16433; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 16434; i <= 16439; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 16440; i <= 16445; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 16446; i <= 16451; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 16452; i <= 16457; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 16458; i <= 16463; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 16464; i <= 16469; i++) - materials[i] = Material.GraniteSlab; - for (int i = 16470; i <= 16475; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 16476; i <= 16481; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 16482; i <= 16487; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 16488; i <= 16493; i++) - materials[i] = Material.DioriteSlab; - for (int i = 16494; i <= 16817; i++) - materials[i] = Material.BrickWall; - for (int i = 16818; i <= 17141; i++) - materials[i] = Material.PrismarineWall; - for (int i = 17142; i <= 17465; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 17466; i <= 17789; i++) - materials[i] = Material.MossyStoneBrickWall; - for (int i = 17790; i <= 18113; i++) - materials[i] = Material.GraniteWall; - for (int i = 18114; i <= 18437; i++) - materials[i] = Material.StoneBrickWall; - for (int i = 18438; i <= 18761; i++) - materials[i] = Material.MudBrickWall; - for (int i = 18762; i <= 19085; i++) - materials[i] = Material.NetherBrickWall; - for (int i = 19086; i <= 19409; i++) - materials[i] = Material.AndesiteWall; - for (int i = 19410; i <= 19733; i++) - materials[i] = Material.RedNetherBrickWall; - for (int i = 19734; i <= 20057; i++) - materials[i] = Material.SandstoneWall; - for (int i = 20058; i <= 20381; i++) - materials[i] = Material.EndStoneBrickWall; - for (int i = 20382; i <= 20705; i++) - materials[i] = Material.DioriteWall; - for (int i = 20706; i <= 20737; i++) - materials[i] = Material.Scaffolding; - for (int i = 20738; i <= 20741; i++) - materials[i] = Material.Loom; - for (int i = 20742; i <= 20753; i++) - materials[i] = Material.Barrel; - for (int i = 20754; i <= 20761; i++) - materials[i] = Material.Smoker; - for (int i = 20762; i <= 20769; i++) - materials[i] = Material.BlastFurnace; - for (int i = 20770; i <= 20770; i++) - materials[i] = Material.CartographyTable; - for (int i = 20771; i <= 20771; i++) - materials[i] = Material.FletchingTable; - for (int i = 20772; i <= 20783; i++) - materials[i] = Material.Grindstone; - for (int i = 20784; i <= 20799; i++) - materials[i] = Material.Lectern; - for (int i = 20800; i <= 20800; i++) - materials[i] = Material.SmithingTable; - for (int i = 20801; i <= 20804; i++) - materials[i] = Material.Stonecutter; - for (int i = 20805; i <= 20836; i++) - materials[i] = Material.Bell; - for (int i = 20837; i <= 20840; i++) - materials[i] = Material.Lantern; - for (int i = 20841; i <= 20844; i++) - materials[i] = Material.SoulLantern; - for (int i = 20845; i <= 20848; i++) - materials[i] = Material.CopperLantern; - for (int i = 20849; i <= 20852; i++) - materials[i] = Material.ExposedCopperLantern; - for (int i = 20853; i <= 20856; i++) - materials[i] = Material.WeatheredCopperLantern; - for (int i = 20857; i <= 20860; i++) - materials[i] = Material.OxidizedCopperLantern; - for (int i = 20861; i <= 20864; i++) - materials[i] = Material.WaxedCopperLantern; - for (int i = 20865; i <= 20868; i++) - materials[i] = Material.WaxedExposedCopperLantern; - for (int i = 20869; i <= 20872; i++) - materials[i] = Material.WaxedWeatheredCopperLantern; - for (int i = 20873; i <= 20876; i++) - materials[i] = Material.WaxedOxidizedCopperLantern; - for (int i = 20877; i <= 20908; i++) - materials[i] = Material.Campfire; - for (int i = 20909; i <= 20940; i++) - materials[i] = Material.SoulCampfire; - for (int i = 20941; i <= 20944; i++) - materials[i] = Material.SweetBerryBush; - for (int i = 20945; i <= 20947; i++) - materials[i] = Material.WarpedStem; - for (int i = 20948; i <= 20950; i++) - materials[i] = Material.StrippedWarpedStem; - for (int i = 20951; i <= 20953; i++) - materials[i] = Material.WarpedHyphae; - for (int i = 20954; i <= 20956; i++) - materials[i] = Material.StrippedWarpedHyphae; - for (int i = 20957; i <= 20957; i++) - materials[i] = Material.WarpedNylium; - for (int i = 20958; i <= 20958; i++) - materials[i] = Material.WarpedFungus; - for (int i = 20959; i <= 20959; i++) - materials[i] = Material.WarpedWartBlock; - for (int i = 20960; i <= 20960; i++) - materials[i] = Material.WarpedRoots; - for (int i = 20961; i <= 20961; i++) - materials[i] = Material.NetherSprouts; - for (int i = 20962; i <= 20964; i++) - materials[i] = Material.CrimsonStem; - for (int i = 20965; i <= 20967; i++) - materials[i] = Material.StrippedCrimsonStem; - for (int i = 20968; i <= 20970; i++) - materials[i] = Material.CrimsonHyphae; - for (int i = 20971; i <= 20973; i++) - materials[i] = Material.StrippedCrimsonHyphae; - for (int i = 20974; i <= 20974; i++) - materials[i] = Material.CrimsonNylium; - for (int i = 20975; i <= 20975; i++) - materials[i] = Material.CrimsonFungus; - for (int i = 20976; i <= 20976; i++) - materials[i] = Material.Shroomlight; - for (int i = 20977; i <= 21002; i++) - materials[i] = Material.WeepingVines; - for (int i = 21003; i <= 21003; i++) - materials[i] = Material.WeepingVinesPlant; - for (int i = 21004; i <= 21029; i++) - materials[i] = Material.TwistingVines; - for (int i = 21030; i <= 21030; i++) - materials[i] = Material.TwistingVinesPlant; - for (int i = 21031; i <= 21031; i++) - materials[i] = Material.CrimsonRoots; - for (int i = 21032; i <= 21032; i++) - materials[i] = Material.CrimsonPlanks; - for (int i = 21033; i <= 21033; i++) - materials[i] = Material.WarpedPlanks; - for (int i = 21034; i <= 21039; i++) - materials[i] = Material.CrimsonSlab; - for (int i = 21040; i <= 21045; i++) - materials[i] = Material.WarpedSlab; - for (int i = 21046; i <= 21047; i++) - materials[i] = Material.CrimsonPressurePlate; - for (int i = 21048; i <= 21049; i++) - materials[i] = Material.WarpedPressurePlate; - for (int i = 21050; i <= 21081; i++) - materials[i] = Material.CrimsonFence; - for (int i = 21082; i <= 21113; i++) - materials[i] = Material.WarpedFence; - for (int i = 21114; i <= 21177; i++) - materials[i] = Material.CrimsonTrapdoor; - for (int i = 21178; i <= 21241; i++) - materials[i] = Material.WarpedTrapdoor; - for (int i = 21242; i <= 21273; i++) - materials[i] = Material.CrimsonFenceGate; - for (int i = 21274; i <= 21305; i++) - materials[i] = Material.WarpedFenceGate; - for (int i = 21306; i <= 21385; i++) - materials[i] = Material.CrimsonStairs; - for (int i = 21386; i <= 21465; i++) - materials[i] = Material.WarpedStairs; - for (int i = 21466; i <= 21489; i++) - materials[i] = Material.CrimsonButton; - for (int i = 21490; i <= 21513; i++) - materials[i] = Material.WarpedButton; - for (int i = 21514; i <= 21577; i++) - materials[i] = Material.CrimsonDoor; - for (int i = 21578; i <= 21641; i++) - materials[i] = Material.WarpedDoor; - for (int i = 21642; i <= 21673; i++) - materials[i] = Material.CrimsonSign; - for (int i = 21674; i <= 21705; i++) - materials[i] = Material.WarpedSign; - for (int i = 21706; i <= 21713; i++) - materials[i] = Material.CrimsonWallSign; - for (int i = 21714; i <= 21721; i++) - materials[i] = Material.WarpedWallSign; - for (int i = 21722; i <= 21725; i++) - materials[i] = Material.StructureBlock; - for (int i = 21726; i <= 21737; i++) - materials[i] = Material.Jigsaw; - for (int i = 21738; i <= 21741; i++) - materials[i] = Material.TestBlock; - for (int i = 21742; i <= 21742; i++) - materials[i] = Material.TestInstanceBlock; - for (int i = 21743; i <= 21751; i++) - materials[i] = Material.Composter; - for (int i = 21752; i <= 21767; i++) - materials[i] = Material.Target; - for (int i = 21768; i <= 21791; i++) - materials[i] = Material.BeeNest; - for (int i = 21792; i <= 21815; i++) - materials[i] = Material.Beehive; - for (int i = 21816; i <= 21816; i++) - materials[i] = Material.HoneyBlock; - for (int i = 21817; i <= 21817; i++) - materials[i] = Material.HoneycombBlock; - for (int i = 21818; i <= 21818; i++) - materials[i] = Material.NetheriteBlock; - for (int i = 21819; i <= 21819; i++) - materials[i] = Material.AncientDebris; - for (int i = 21820; i <= 21820; i++) - materials[i] = Material.CryingObsidian; - for (int i = 21821; i <= 21825; i++) - materials[i] = Material.RespawnAnchor; - for (int i = 21826; i <= 21826; i++) - materials[i] = Material.PottedCrimsonFungus; - for (int i = 21827; i <= 21827; i++) - materials[i] = Material.PottedWarpedFungus; - for (int i = 21828; i <= 21828; i++) - materials[i] = Material.PottedCrimsonRoots; - for (int i = 21829; i <= 21829; i++) - materials[i] = Material.PottedWarpedRoots; - for (int i = 21830; i <= 21830; i++) - materials[i] = Material.Lodestone; - for (int i = 21831; i <= 21831; i++) - materials[i] = Material.Blackstone; - for (int i = 21832; i <= 21911; i++) - materials[i] = Material.BlackstoneStairs; - for (int i = 21912; i <= 22235; i++) - materials[i] = Material.BlackstoneWall; - for (int i = 22236; i <= 22241; i++) - materials[i] = Material.BlackstoneSlab; - for (int i = 22242; i <= 22242; i++) - materials[i] = Material.PolishedBlackstone; - for (int i = 22243; i <= 22243; i++) - materials[i] = Material.PolishedBlackstoneBricks; - for (int i = 22244; i <= 22244; i++) - materials[i] = Material.CrackedPolishedBlackstoneBricks; - for (int i = 22245; i <= 22245; i++) - materials[i] = Material.ChiseledPolishedBlackstone; - for (int i = 22246; i <= 22251; i++) - materials[i] = Material.PolishedBlackstoneBrickSlab; - for (int i = 22252; i <= 22331; i++) - materials[i] = Material.PolishedBlackstoneBrickStairs; - for (int i = 22332; i <= 22655; i++) - materials[i] = Material.PolishedBlackstoneBrickWall; - for (int i = 22656; i <= 22656; i++) - materials[i] = Material.GildedBlackstone; - for (int i = 22657; i <= 22736; i++) - materials[i] = Material.PolishedBlackstoneStairs; - for (int i = 22737; i <= 22742; i++) - materials[i] = Material.PolishedBlackstoneSlab; - for (int i = 22743; i <= 22744; i++) - materials[i] = Material.PolishedBlackstonePressurePlate; - for (int i = 22745; i <= 22768; i++) - materials[i] = Material.PolishedBlackstoneButton; - for (int i = 22769; i <= 23092; i++) - materials[i] = Material.PolishedBlackstoneWall; - for (int i = 23093; i <= 23093; i++) - materials[i] = Material.ChiseledNetherBricks; - for (int i = 23094; i <= 23094; i++) - materials[i] = Material.CrackedNetherBricks; - for (int i = 23095; i <= 23095; i++) - materials[i] = Material.QuartzBricks; - for (int i = 23096; i <= 23111; i++) - materials[i] = Material.Candle; - for (int i = 23112; i <= 23127; i++) - materials[i] = Material.WhiteCandle; - for (int i = 23128; i <= 23143; i++) - materials[i] = Material.OrangeCandle; - for (int i = 23144; i <= 23159; i++) - materials[i] = Material.MagentaCandle; - for (int i = 23160; i <= 23175; i++) - materials[i] = Material.LightBlueCandle; - for (int i = 23176; i <= 23191; i++) - materials[i] = Material.YellowCandle; - for (int i = 23192; i <= 23207; i++) - materials[i] = Material.LimeCandle; - for (int i = 23208; i <= 23223; i++) - materials[i] = Material.PinkCandle; - for (int i = 23224; i <= 23239; i++) - materials[i] = Material.GrayCandle; - for (int i = 23240; i <= 23255; i++) - materials[i] = Material.LightGrayCandle; - for (int i = 23256; i <= 23271; i++) - materials[i] = Material.CyanCandle; - for (int i = 23272; i <= 23287; i++) - materials[i] = Material.PurpleCandle; - for (int i = 23288; i <= 23303; i++) - materials[i] = Material.BlueCandle; - for (int i = 23304; i <= 23319; i++) - materials[i] = Material.BrownCandle; - for (int i = 23320; i <= 23335; i++) - materials[i] = Material.GreenCandle; - for (int i = 23336; i <= 23351; i++) - materials[i] = Material.RedCandle; - for (int i = 23352; i <= 23367; i++) - materials[i] = Material.BlackCandle; - for (int i = 23368; i <= 23369; i++) - materials[i] = Material.CandleCake; - for (int i = 23370; i <= 23371; i++) - materials[i] = Material.WhiteCandleCake; - for (int i = 23372; i <= 23373; i++) - materials[i] = Material.OrangeCandleCake; - for (int i = 23374; i <= 23375; i++) - materials[i] = Material.MagentaCandleCake; - for (int i = 23376; i <= 23377; i++) - materials[i] = Material.LightBlueCandleCake; - for (int i = 23378; i <= 23379; i++) - materials[i] = Material.YellowCandleCake; - for (int i = 23380; i <= 23381; i++) - materials[i] = Material.LimeCandleCake; - for (int i = 23382; i <= 23383; i++) - materials[i] = Material.PinkCandleCake; - for (int i = 23384; i <= 23385; i++) - materials[i] = Material.GrayCandleCake; - for (int i = 23386; i <= 23387; i++) - materials[i] = Material.LightGrayCandleCake; - for (int i = 23388; i <= 23389; i++) - materials[i] = Material.CyanCandleCake; - for (int i = 23390; i <= 23391; i++) - materials[i] = Material.PurpleCandleCake; - for (int i = 23392; i <= 23393; i++) - materials[i] = Material.BlueCandleCake; - for (int i = 23394; i <= 23395; i++) - materials[i] = Material.BrownCandleCake; - for (int i = 23396; i <= 23397; i++) - materials[i] = Material.GreenCandleCake; - for (int i = 23398; i <= 23399; i++) - materials[i] = Material.RedCandleCake; - for (int i = 23400; i <= 23401; i++) - materials[i] = Material.BlackCandleCake; - for (int i = 23402; i <= 23402; i++) - materials[i] = Material.AmethystBlock; - for (int i = 23403; i <= 23403; i++) - materials[i] = Material.BuddingAmethyst; - for (int i = 23404; i <= 23415; i++) - materials[i] = Material.AmethystCluster; - for (int i = 23416; i <= 23427; i++) - materials[i] = Material.LargeAmethystBud; - for (int i = 23428; i <= 23439; i++) - materials[i] = Material.MediumAmethystBud; - for (int i = 23440; i <= 23451; i++) - materials[i] = Material.SmallAmethystBud; - for (int i = 23452; i <= 23452; i++) - materials[i] = Material.Tuff; - for (int i = 23453; i <= 23458; i++) - materials[i] = Material.TuffSlab; - for (int i = 23459; i <= 23538; i++) - materials[i] = Material.TuffStairs; - for (int i = 23539; i <= 23862; i++) - materials[i] = Material.TuffWall; - for (int i = 23863; i <= 23863; i++) - materials[i] = Material.PolishedTuff; - for (int i = 23864; i <= 23869; i++) - materials[i] = Material.PolishedTuffSlab; - for (int i = 23870; i <= 23949; i++) - materials[i] = Material.PolishedTuffStairs; - for (int i = 23950; i <= 24273; i++) - materials[i] = Material.PolishedTuffWall; - for (int i = 24274; i <= 24274; i++) - materials[i] = Material.ChiseledTuff; - for (int i = 24275; i <= 24275; i++) - materials[i] = Material.TuffBricks; - for (int i = 24276; i <= 24281; i++) - materials[i] = Material.TuffBrickSlab; - for (int i = 24282; i <= 24361; i++) - materials[i] = Material.TuffBrickStairs; - for (int i = 24362; i <= 24685; i++) - materials[i] = Material.TuffBrickWall; - for (int i = 24686; i <= 24686; i++) - materials[i] = Material.ChiseledTuffBricks; - for (int i = 24687; i <= 24687; i++) - materials[i] = Material.Calcite; - for (int i = 24688; i <= 24688; i++) - materials[i] = Material.TintedGlass; - for (int i = 24689; i <= 24689; i++) - materials[i] = Material.PowderSnow; - for (int i = 24690; i <= 24785; i++) - materials[i] = Material.SculkSensor; - for (int i = 24786; i <= 25169; i++) - materials[i] = Material.CalibratedSculkSensor; - for (int i = 25170; i <= 25170; i++) - materials[i] = Material.Sculk; - for (int i = 25171; i <= 25298; i++) - materials[i] = Material.SculkVein; - for (int i = 25299; i <= 25300; i++) - materials[i] = Material.SculkCatalyst; - for (int i = 25301; i <= 25308; i++) - materials[i] = Material.SculkShrieker; - for (int i = 25309; i <= 25309; i++) - materials[i] = Material.CopperBlock; - for (int i = 25310; i <= 25310; i++) - materials[i] = Material.ExposedCopper; - for (int i = 25311; i <= 25311; i++) - materials[i] = Material.WeatheredCopper; - for (int i = 25312; i <= 25312; i++) - materials[i] = Material.OxidizedCopper; - for (int i = 25313; i <= 25313; i++) - materials[i] = Material.CopperOre; - for (int i = 25314; i <= 25314; i++) - materials[i] = Material.DeepslateCopperOre; - for (int i = 25315; i <= 25315; i++) - materials[i] = Material.OxidizedCutCopper; - for (int i = 25316; i <= 25316; i++) - materials[i] = Material.WeatheredCutCopper; - for (int i = 25317; i <= 25317; i++) - materials[i] = Material.ExposedCutCopper; - for (int i = 25318; i <= 25318; i++) - materials[i] = Material.CutCopper; - for (int i = 25319; i <= 25319; i++) - materials[i] = Material.OxidizedChiseledCopper; - for (int i = 25320; i <= 25320; i++) - materials[i] = Material.WeatheredChiseledCopper; - for (int i = 25321; i <= 25321; i++) - materials[i] = Material.ExposedChiseledCopper; - for (int i = 25322; i <= 25322; i++) - materials[i] = Material.ChiseledCopper; - for (int i = 25323; i <= 25323; i++) - materials[i] = Material.WaxedOxidizedChiseledCopper; - for (int i = 25324; i <= 25324; i++) - materials[i] = Material.WaxedWeatheredChiseledCopper; - for (int i = 25325; i <= 25325; i++) - materials[i] = Material.WaxedExposedChiseledCopper; - for (int i = 25326; i <= 25326; i++) - materials[i] = Material.WaxedChiseledCopper; - for (int i = 25327; i <= 25406; i++) - materials[i] = Material.OxidizedCutCopperStairs; - for (int i = 25407; i <= 25486; i++) - materials[i] = Material.WeatheredCutCopperStairs; - for (int i = 25487; i <= 25566; i++) - materials[i] = Material.ExposedCutCopperStairs; - for (int i = 25567; i <= 25646; i++) - materials[i] = Material.CutCopperStairs; - for (int i = 25647; i <= 25652; i++) - materials[i] = Material.OxidizedCutCopperSlab; - for (int i = 25653; i <= 25658; i++) - materials[i] = Material.WeatheredCutCopperSlab; - for (int i = 25659; i <= 25664; i++) - materials[i] = Material.ExposedCutCopperSlab; - for (int i = 25665; i <= 25670; i++) - materials[i] = Material.CutCopperSlab; - for (int i = 25671; i <= 25671; i++) - materials[i] = Material.WaxedCopperBlock; - for (int i = 25672; i <= 25672; i++) - materials[i] = Material.WaxedWeatheredCopper; - for (int i = 25673; i <= 25673; i++) - materials[i] = Material.WaxedExposedCopper; - for (int i = 25674; i <= 25674; i++) - materials[i] = Material.WaxedOxidizedCopper; - for (int i = 25675; i <= 25675; i++) - materials[i] = Material.WaxedOxidizedCutCopper; - for (int i = 25676; i <= 25676; i++) - materials[i] = Material.WaxedWeatheredCutCopper; - for (int i = 25677; i <= 25677; i++) - materials[i] = Material.WaxedExposedCutCopper; - for (int i = 25678; i <= 25678; i++) - materials[i] = Material.WaxedCutCopper; - for (int i = 25679; i <= 25758; i++) - materials[i] = Material.WaxedOxidizedCutCopperStairs; - for (int i = 25759; i <= 25838; i++) - materials[i] = Material.WaxedWeatheredCutCopperStairs; - for (int i = 25839; i <= 25918; i++) - materials[i] = Material.WaxedExposedCutCopperStairs; - for (int i = 25919; i <= 25998; i++) - materials[i] = Material.WaxedCutCopperStairs; - for (int i = 25999; i <= 26004; i++) - materials[i] = Material.WaxedOxidizedCutCopperSlab; - for (int i = 26005; i <= 26010; i++) - materials[i] = Material.WaxedWeatheredCutCopperSlab; - for (int i = 26011; i <= 26016; i++) - materials[i] = Material.WaxedExposedCutCopperSlab; - for (int i = 26017; i <= 26022; i++) - materials[i] = Material.WaxedCutCopperSlab; - for (int i = 26023; i <= 26086; i++) - materials[i] = Material.CopperDoor; - for (int i = 26087; i <= 26150; i++) - materials[i] = Material.ExposedCopperDoor; - for (int i = 26151; i <= 26214; i++) - materials[i] = Material.OxidizedCopperDoor; - for (int i = 26215; i <= 26278; i++) - materials[i] = Material.WeatheredCopperDoor; - for (int i = 26279; i <= 26342; i++) - materials[i] = Material.WaxedCopperDoor; - for (int i = 26343; i <= 26406; i++) - materials[i] = Material.WaxedExposedCopperDoor; - for (int i = 26407; i <= 26470; i++) - materials[i] = Material.WaxedOxidizedCopperDoor; - for (int i = 26471; i <= 26534; i++) - materials[i] = Material.WaxedWeatheredCopperDoor; - for (int i = 26535; i <= 26598; i++) - materials[i] = Material.CopperTrapdoor; - for (int i = 26599; i <= 26662; i++) - materials[i] = Material.ExposedCopperTrapdoor; - for (int i = 26663; i <= 26726; i++) - materials[i] = Material.OxidizedCopperTrapdoor; - for (int i = 26727; i <= 26790; i++) - materials[i] = Material.WeatheredCopperTrapdoor; - for (int i = 26791; i <= 26854; i++) - materials[i] = Material.WaxedCopperTrapdoor; - for (int i = 26855; i <= 26918; i++) - materials[i] = Material.WaxedExposedCopperTrapdoor; - for (int i = 26919; i <= 26982; i++) - materials[i] = Material.WaxedOxidizedCopperTrapdoor; - for (int i = 26983; i <= 27046; i++) - materials[i] = Material.WaxedWeatheredCopperTrapdoor; - for (int i = 27047; i <= 27048; i++) - materials[i] = Material.CopperGrate; - for (int i = 27049; i <= 27050; i++) - materials[i] = Material.ExposedCopperGrate; - for (int i = 27051; i <= 27052; i++) - materials[i] = Material.WeatheredCopperGrate; - for (int i = 27053; i <= 27054; i++) - materials[i] = Material.OxidizedCopperGrate; - for (int i = 27055; i <= 27056; i++) - materials[i] = Material.WaxedCopperGrate; - for (int i = 27057; i <= 27058; i++) - materials[i] = Material.WaxedExposedCopperGrate; - for (int i = 27059; i <= 27060; i++) - materials[i] = Material.WaxedWeatheredCopperGrate; - for (int i = 27061; i <= 27062; i++) - materials[i] = Material.WaxedOxidizedCopperGrate; - for (int i = 27063; i <= 27066; i++) - materials[i] = Material.CopperBulb; - for (int i = 27067; i <= 27070; i++) - materials[i] = Material.ExposedCopperBulb; - for (int i = 27071; i <= 27074; i++) - materials[i] = Material.WeatheredCopperBulb; - for (int i = 27075; i <= 27078; i++) - materials[i] = Material.OxidizedCopperBulb; - for (int i = 27079; i <= 27082; i++) - materials[i] = Material.WaxedCopperBulb; - for (int i = 27083; i <= 27086; i++) - materials[i] = Material.WaxedExposedCopperBulb; - for (int i = 27087; i <= 27090; i++) - materials[i] = Material.WaxedWeatheredCopperBulb; - for (int i = 27091; i <= 27094; i++) - materials[i] = Material.WaxedOxidizedCopperBulb; - for (int i = 27095; i <= 27118; i++) - materials[i] = Material.CopperChest; - for (int i = 27119; i <= 27142; i++) - materials[i] = Material.ExposedCopperChest; - for (int i = 27143; i <= 27166; i++) - materials[i] = Material.WeatheredCopperChest; - for (int i = 27167; i <= 27190; i++) - materials[i] = Material.OxidizedCopperChest; - for (int i = 27191; i <= 27214; i++) - materials[i] = Material.WaxedCopperChest; - for (int i = 27215; i <= 27238; i++) - materials[i] = Material.WaxedExposedCopperChest; - for (int i = 27239; i <= 27262; i++) - materials[i] = Material.WaxedWeatheredCopperChest; - for (int i = 27263; i <= 27286; i++) - materials[i] = Material.WaxedOxidizedCopperChest; - for (int i = 27287; i <= 27318; i++) - materials[i] = Material.CopperGolemStatue; - for (int i = 27319; i <= 27350; i++) - materials[i] = Material.ExposedCopperGolemStatue; - for (int i = 27351; i <= 27382; i++) - materials[i] = Material.WeatheredCopperGolemStatue; - for (int i = 27383; i <= 27414; i++) - materials[i] = Material.OxidizedCopperGolemStatue; - for (int i = 27415; i <= 27446; i++) - materials[i] = Material.WaxedCopperGolemStatue; - for (int i = 27447; i <= 27478; i++) - materials[i] = Material.WaxedExposedCopperGolemStatue; - for (int i = 27479; i <= 27510; i++) - materials[i] = Material.WaxedWeatheredCopperGolemStatue; - for (int i = 27511; i <= 27542; i++) - materials[i] = Material.WaxedOxidizedCopperGolemStatue; - for (int i = 27543; i <= 27566; i++) - materials[i] = Material.LightningRod; - for (int i = 27567; i <= 27590; i++) - materials[i] = Material.ExposedLightningRod; - for (int i = 27591; i <= 27614; i++) - materials[i] = Material.WeatheredLightningRod; - for (int i = 27615; i <= 27638; i++) - materials[i] = Material.OxidizedLightningRod; - for (int i = 27639; i <= 27662; i++) - materials[i] = Material.WaxedLightningRod; - for (int i = 27663; i <= 27686; i++) - materials[i] = Material.WaxedExposedLightningRod; - for (int i = 27687; i <= 27710; i++) - materials[i] = Material.WaxedWeatheredLightningRod; - for (int i = 27711; i <= 27734; i++) - materials[i] = Material.WaxedOxidizedLightningRod; - for (int i = 27735; i <= 27754; i++) - materials[i] = Material.PointedDripstone; - for (int i = 27755; i <= 27755; i++) - materials[i] = Material.DripstoneBlock; - for (int i = 27756; i <= 27807; i++) - materials[i] = Material.CaveVines; - for (int i = 27808; i <= 27809; i++) - materials[i] = Material.CaveVinesPlant; - for (int i = 27810; i <= 27810; i++) - materials[i] = Material.SporeBlossom; - for (int i = 27811; i <= 27811; i++) - materials[i] = Material.Azalea; - for (int i = 27812; i <= 27812; i++) - materials[i] = Material.FloweringAzalea; - for (int i = 27813; i <= 27813; i++) - materials[i] = Material.MossCarpet; - for (int i = 27814; i <= 27829; i++) - materials[i] = Material.PinkPetals; - for (int i = 27830; i <= 27845; i++) - materials[i] = Material.Wildflowers; - for (int i = 27846; i <= 27861; i++) - materials[i] = Material.LeafLitter; - for (int i = 27862; i <= 27862; i++) - materials[i] = Material.MossBlock; - for (int i = 27863; i <= 27894; i++) - materials[i] = Material.BigDripleaf; - for (int i = 27895; i <= 27902; i++) - materials[i] = Material.BigDripleafStem; - for (int i = 27903; i <= 27918; i++) - materials[i] = Material.SmallDripleaf; - for (int i = 27919; i <= 27920; i++) - materials[i] = Material.HangingRoots; - for (int i = 27921; i <= 27921; i++) - materials[i] = Material.RootedDirt; - for (int i = 27922; i <= 27922; i++) - materials[i] = Material.Mud; - for (int i = 27923; i <= 27925; i++) - materials[i] = Material.Deepslate; - for (int i = 27926; i <= 27926; i++) - materials[i] = Material.CobbledDeepslate; - for (int i = 27927; i <= 28006; i++) - materials[i] = Material.CobbledDeepslateStairs; - for (int i = 28007; i <= 28012; i++) - materials[i] = Material.CobbledDeepslateSlab; - for (int i = 28013; i <= 28336; i++) - materials[i] = Material.CobbledDeepslateWall; - for (int i = 28337; i <= 28337; i++) - materials[i] = Material.PolishedDeepslate; - for (int i = 28338; i <= 28417; i++) - materials[i] = Material.PolishedDeepslateStairs; - for (int i = 28418; i <= 28423; i++) - materials[i] = Material.PolishedDeepslateSlab; - for (int i = 28424; i <= 28747; i++) - materials[i] = Material.PolishedDeepslateWall; - for (int i = 28748; i <= 28748; i++) - materials[i] = Material.DeepslateTiles; - for (int i = 28749; i <= 28828; i++) - materials[i] = Material.DeepslateTileStairs; - for (int i = 28829; i <= 28834; i++) - materials[i] = Material.DeepslateTileSlab; - for (int i = 28835; i <= 29158; i++) - materials[i] = Material.DeepslateTileWall; - for (int i = 29159; i <= 29159; i++) - materials[i] = Material.DeepslateBricks; - for (int i = 29160; i <= 29239; i++) - materials[i] = Material.DeepslateBrickStairs; - for (int i = 29240; i <= 29245; i++) - materials[i] = Material.DeepslateBrickSlab; - for (int i = 29246; i <= 29569; i++) - materials[i] = Material.DeepslateBrickWall; - for (int i = 29570; i <= 29570; i++) - materials[i] = Material.ChiseledDeepslate; - for (int i = 29571; i <= 29571; i++) - materials[i] = Material.CrackedDeepslateBricks; - for (int i = 29572; i <= 29572; i++) - materials[i] = Material.CrackedDeepslateTiles; - for (int i = 29573; i <= 29575; i++) - materials[i] = Material.InfestedDeepslate; - for (int i = 29576; i <= 29576; i++) - materials[i] = Material.SmoothBasalt; - for (int i = 29577; i <= 29577; i++) - materials[i] = Material.RawIronBlock; - for (int i = 29578; i <= 29578; i++) - materials[i] = Material.RawCopperBlock; - for (int i = 29579; i <= 29579; i++) - materials[i] = Material.RawGoldBlock; - for (int i = 29580; i <= 29580; i++) - materials[i] = Material.PottedAzaleaBush; - for (int i = 29581; i <= 29581; i++) - materials[i] = Material.PottedFloweringAzaleaBush; - for (int i = 29582; i <= 29584; i++) - materials[i] = Material.OchreFroglight; - for (int i = 29585; i <= 29587; i++) - materials[i] = Material.VerdantFroglight; - for (int i = 29588; i <= 29590; i++) - materials[i] = Material.PearlescentFroglight; - for (int i = 29591; i <= 29591; i++) - materials[i] = Material.Frogspawn; - for (int i = 29592; i <= 29592; i++) - materials[i] = Material.ReinforcedDeepslate; - for (int i = 29593; i <= 29608; i++) - materials[i] = Material.DecoratedPot; - for (int i = 29609; i <= 29656; i++) - materials[i] = Material.Crafter; - for (int i = 29657; i <= 29668; i++) - materials[i] = Material.TrialSpawner; - for (int i = 29669; i <= 29700; i++) - materials[i] = Material.Vault; - for (int i = 29701; i <= 29702; i++) - materials[i] = Material.HeavyCore; - for (int i = 29703; i <= 29703; i++) - materials[i] = Material.PaleMossBlock; - for (int i = 29704; i <= 29865; i++) - materials[i] = Material.PaleMossCarpet; - for (int i = 29866; i <= 29867; i++) - materials[i] = Material.PaleHangingMoss; - for (int i = 29868; i <= 29868; i++) - materials[i] = Material.OpenEyeblossom; - for (int i = 29869; i <= 29869; i++) - materials[i] = Material.ClosedEyeblossom; - for (int i = 29870; i <= 29870; i++) - materials[i] = Material.PottedOpenEyeblossom; - for (int i = 29871; i <= 29871; i++) - materials[i] = Material.PottedClosedEyeblossom; - for (int i = 29872; i <= 29872; i++) - materials[i] = Material.FireflyBush; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(22, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(29, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(31, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(33, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(35, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(37, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(39, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(41, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(43, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(45, 40, - [ - new("age", ["0", "1", "2", "3", "4"], 8), - new("hanging", ["true", "false"], 4), - new("stage", ["0", "1"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(86, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(102, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(119, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(125, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(136, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(139, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(142, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(145, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(148, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(151, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(154, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(157, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(160, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(163, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(165, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(168, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(171, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(174, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(177, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(180, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(183, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(186, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(189, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(192, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(195, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(198, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(201, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(204, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(207, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(210, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(213, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(216, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(219, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(222, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(225, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(228, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(231, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(234, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(237, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(240, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(243, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(246, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(249, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(252, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(280, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(308, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(336, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(364, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(392, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(420, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(448, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(476, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(504, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(532, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(566, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(581, 1350, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling", "trumpet", "trumpet_exposed", "trumpet_oxidized", "trumpet_weathered", "zombie", "skeleton", "creeper", "dragon", "wither_skeleton", "piglin", "custom_head"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1931, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1947, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1963, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1979, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1995, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2011, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2027, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2043, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2059, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2075, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2091, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2107, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2123, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2139, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2155, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2171, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2187, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2211, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2235, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2255, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(2257, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2269, 24, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2) - ]), - new(2309, 12, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 2) - ]), - new(2341, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(2344, 256, - [ - new("facing", ["north", "south", "west", "east"], 64), - new("slot_0_occupied", ["true", "false"], 32), - new("slot_1_occupied", ["true", "false"], 16), - new("slot_2_occupied", ["true", "false"], 8), - new("slot_3_occupied", ["true", "false"], 4), - new("slot_4_occupied", ["true", "false"], 2), - new("slot_5_occupied", ["true", "false"], 1) - ]), - new(2600, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2664, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2728, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2792, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2856, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2920, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2984, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3048, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3112, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3176, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3240, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3304, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3371, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(3375, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(3889, 18, - [ - new("axis", ["x", "y", "z"], 6), - new("creaking_heart_state", ["uprooted", "dormant", "awake"], 2), - new("natural", ["true", "false"], 1) - ]), - new(3907, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3987, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(4011, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(5311, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(5319, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(5327, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(5335, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5367, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5399, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5431, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5463, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5495, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5527, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5559, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5591, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5623, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5655, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5719, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5727, 20, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5747, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5827, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5835, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5843, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5851, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5859, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5867, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5875, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5883, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5891, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5899, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5907, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5971, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6035, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6099, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6163, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6227, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6291, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6355, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6419, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6483, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6547, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6611, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6675, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6683, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6691, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6699, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6707, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6715, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6723, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6731, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6739, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6747, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6755, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6763, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6771, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6795, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6797, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6861, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6863, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6865, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6867, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6869, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6871, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6873, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6875, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6877, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6879, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6881, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(6883, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(6885, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(6887, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(6895, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6919, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(6929, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6947, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6963, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(6965, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7000, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(7003, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(7007, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7012, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7017, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(7019, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7023, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7027, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(7034, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7114, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7178, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7242, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7306, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7370, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7434, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7498, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7562, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7626, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7690, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7766, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7830, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7894, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7958, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7990, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8022, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8054, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8086, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8118, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8150, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8182, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8214, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8246, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8252, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8258, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8264, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8270, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8276, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8282, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8288, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8294, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8300, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8334, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8338, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8342, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8350, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8358, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8390, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8518, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8646, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8678, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8758, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8838, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8918, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(8923, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9003, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9009, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(9335, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9367, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9447, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(9452, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(9461, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(9465, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(9469, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9479, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(9481, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9493, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9575, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9583, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9599, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9728, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9808, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9888, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9968, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9981, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(10305, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(10659, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(10667, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(10675, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10699, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10723, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10747, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10771, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10795, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10819, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10843, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10867, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10891, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10915, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10947, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10955, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10987, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10995, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11027, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11035, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11067, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11075, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11107, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11115, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11147, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11155, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11187, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11195, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11199, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11203, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11207, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(11231, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11247, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11263, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11279, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11313, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(11325, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(11328, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11408, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11432, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(11460, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11492, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11524, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11556, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11588, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11620, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11652, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11684, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11716, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11748, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11780, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11812, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11844, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11876, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11908, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11940, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11972, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12052, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12132, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12212, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12292, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12372, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12452, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12533, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12535, 32, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12567, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12634, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12714, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12794, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12874, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12880, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12886, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12893, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(12915, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12917, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12919, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12921, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12923, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12925, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12927, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12943, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12959, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12975, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12991, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13007, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13023, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13039, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13055, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13071, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13087, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13103, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13119, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13135, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13151, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13167, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13183, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13187, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13191, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13195, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13199, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13203, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13207, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13211, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13215, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13219, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13223, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13227, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13231, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13235, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13239, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13243, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13250, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13330, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13336, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13342, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13348, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13354, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13360, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13366, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13372, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13378, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13384, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13390, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13396, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13402, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13408, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13414, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13420, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13426, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13432, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13438, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13444, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13450, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13456, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13462, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13468, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13474, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13484, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13516, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13548, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13580, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13612, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13644, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13676, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13708, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13740, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13772, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13804, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13836, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13868, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13900, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13932, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13964, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13996, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(14028, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(14060, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14124, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14188, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14252, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14316, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14380, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14444, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14508, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14572, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14636, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14642, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(14706, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(14713, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(14716, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14797, 2, - [ - new("age", ["0", "1"], 1) - ]), - new(14799, 10, - [ - new("age", ["0", "1", "2", "3", "4"], 2), - new("half", ["upper", "lower"], 1) - ]), - new(14809, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(14811, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(14817, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14829, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14841, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(14848, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(14852, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14864, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14870, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14876, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14882, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14888, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14894, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14900, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14906, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14912, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14918, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14924, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14930, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14936, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14942, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14948, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14954, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14960, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14966, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14970, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14974, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14978, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14982, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14986, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14990, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14994, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14998, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15002, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15006, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15010, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15014, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15018, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15022, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15026, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15062, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(15090, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(15102, 3, - [ - new("hatch", ["0", "1", "2"], 1) - ]), - new(15105, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("hydration", ["0", "1", "2", "3"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15147, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15149, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15151, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15153, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15155, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15157, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15159, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15161, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15163, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15165, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15167, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15169, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15171, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15173, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15175, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15177, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15179, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15181, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15183, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15185, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15187, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15195, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15203, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15211, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15219, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15227, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15235, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15243, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15251, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15259, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15267, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15276, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15279, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(15294, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(15296, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15376, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15456, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15536, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15616, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15696, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15776, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15856, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15936, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16016, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16096, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16176, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16256, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16336, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16416, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16422, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16428, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16434, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16440, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16446, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16452, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16458, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16464, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16470, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16476, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16482, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16488, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16494, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16818, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17142, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17466, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17790, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18114, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18438, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18762, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19086, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19410, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19734, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20058, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20382, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20706, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20738, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(20742, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(20754, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(20762, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(20772, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(20784, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20801, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(20805, 32, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20837, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20841, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20845, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20849, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20853, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20857, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20861, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20865, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20869, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20873, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20877, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20909, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20941, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(20945, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20948, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20951, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20954, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20962, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20965, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20968, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20971, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20977, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(21004, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(21034, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21040, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21046, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(21048, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(21050, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(21082, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(21114, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21178, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21242, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21274, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21306, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21386, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21466, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21490, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21514, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21578, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21642, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21674, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21706, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21714, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21722, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(21726, 12, - [ - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 1) - ]), - new(21738, 4, - [ - new("mode", ["start", "log", "fail", "accept"], 1) - ]), - new(21743, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(21752, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(21768, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(21792, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(21821, 5, - [ - new("charges", ["0", "1", "2", "3", "4"], 1) - ]), - new(21832, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21912, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22236, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22246, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22252, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22332, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22657, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22737, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22743, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(22745, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(22769, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(23096, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23112, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23128, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23144, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23160, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23176, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23192, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23208, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23224, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23240, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23256, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23272, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23288, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23304, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23320, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23336, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23352, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23368, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23370, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23372, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23374, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23376, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23378, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23380, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23382, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23384, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23386, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23388, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23390, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23392, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23394, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23396, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23398, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23400, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23404, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23416, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23428, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23440, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23453, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23459, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23539, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(23864, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23870, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23950, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(24276, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24282, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24362, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(24690, 96, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24786, 384, - [ - new("facing", ["north", "south", "west", "east"], 96), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25171, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(25299, 2, - [ - new("bloom", ["true", "false"], 1) - ]), - new(25301, 8, - [ - new("can_summon", ["true", "false"], 4), - new("shrieking", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25327, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25407, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25487, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25567, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25647, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25653, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25659, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25665, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25679, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25759, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25839, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25919, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25999, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26005, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26011, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26017, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26023, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26087, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26151, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26215, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26279, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26343, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26407, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26471, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(26535, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26599, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26663, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26727, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26791, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26855, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26919, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26983, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27047, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(27049, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(27051, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(27053, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(27055, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(27057, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(27059, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(27061, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(27063, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(27067, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(27071, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(27075, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(27079, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(27083, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(27087, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(27091, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(27095, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(27119, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(27143, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(27167, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(27191, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(27215, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(27239, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(27263, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(27287, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27319, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27351, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27383, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27415, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27447, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27479, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27511, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27543, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27567, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27591, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27615, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27639, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27663, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27687, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27711, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27735, 20, - [ - new("thickness", ["tip_merge", "tip", "frustum", "middle", "base"], 4), - new("vertical_direction", ["up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27756, 52, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 2), - new("berries", ["true", "false"], 1) - ]), - new(27808, 2, - [ - new("berries", ["true", "false"], 1) - ]), - new(27814, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("flower_amount", ["1", "2", "3", "4"], 1) - ]), - new(27830, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("flower_amount", ["1", "2", "3", "4"], 1) - ]), - new(27846, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("segment_amount", ["1", "2", "3", "4"], 1) - ]), - new(27863, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("tilt", ["none", "unstable", "partial", "full"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27895, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27903, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("half", ["upper", "lower"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27919, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(27923, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(27927, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28007, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28013, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(28338, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28418, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28424, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(28749, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28829, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28835, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(29160, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29240, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29246, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(29573, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(29582, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(29585, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(29588, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(29593, 16, - [ - new("cracked", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29609, 48, - [ - new("crafting", ["true", "false"], 24), - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(29657, 12, - [ - new("ominous", ["true", "false"], 6), - new("trial_spawner_state", ["inactive", "waiting_for_players", "active", "waiting_for_reward_ejection", "ejecting_reward", "cooldown"], 1) - ]), - new(29669, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("ominous", ["true", "false"], 4), - new("vault_state", ["inactive", "active", "unlocking", "ejecting"], 1) - ]), - new(29701, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(29704, 162, - [ - new("bottom", ["true", "false"], 81), - new("east", ["none", "low", "tall"], 27), - new("north", ["none", "low", "tall"], 9), - new("south", ["none", "low", "tall"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(29866, 2, - [ - new("tip", ["true", "false"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/BlockPalettes/Palette262.cs b/MinecraftClient/Mapping/BlockPalettes/Palette262.cs deleted file mode 100644 index 7b79dc1937..0000000000 --- a/MinecraftClient/Mapping/BlockPalettes/Palette262.cs +++ /dev/null @@ -1,6872 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.BlockPalettes -{ - public class Palette262 : BlockPalette - { - private static readonly Dictionary materials = new(); - - static Palette262() - { - for (int i = 0; i <= 0; i++) - materials[i] = Material.Air; - for (int i = 1; i <= 1; i++) - materials[i] = Material.Stone; - for (int i = 2; i <= 2; i++) - materials[i] = Material.Granite; - for (int i = 3; i <= 3; i++) - materials[i] = Material.PolishedGranite; - for (int i = 4; i <= 4; i++) - materials[i] = Material.Diorite; - for (int i = 5; i <= 5; i++) - materials[i] = Material.PolishedDiorite; - for (int i = 6; i <= 6; i++) - materials[i] = Material.Andesite; - for (int i = 7; i <= 7; i++) - materials[i] = Material.PolishedAndesite; - for (int i = 8; i <= 9; i++) - materials[i] = Material.GrassBlock; - for (int i = 10; i <= 10; i++) - materials[i] = Material.Dirt; - for (int i = 11; i <= 11; i++) - materials[i] = Material.CoarseDirt; - for (int i = 12; i <= 13; i++) - materials[i] = Material.Podzol; - for (int i = 14; i <= 14; i++) - materials[i] = Material.Cobblestone; - for (int i = 15; i <= 15; i++) - materials[i] = Material.OakPlanks; - for (int i = 16; i <= 16; i++) - materials[i] = Material.SprucePlanks; - for (int i = 17; i <= 17; i++) - materials[i] = Material.BirchPlanks; - for (int i = 18; i <= 18; i++) - materials[i] = Material.JunglePlanks; - for (int i = 19; i <= 19; i++) - materials[i] = Material.AcaciaPlanks; - for (int i = 20; i <= 20; i++) - materials[i] = Material.CherryPlanks; - for (int i = 21; i <= 21; i++) - materials[i] = Material.DarkOakPlanks; - for (int i = 22; i <= 24; i++) - materials[i] = Material.PaleOakWood; - for (int i = 25; i <= 25; i++) - materials[i] = Material.PaleOakPlanks; - for (int i = 26; i <= 26; i++) - materials[i] = Material.MangrovePlanks; - for (int i = 27; i <= 27; i++) - materials[i] = Material.BambooPlanks; - for (int i = 28; i <= 28; i++) - materials[i] = Material.BambooMosaic; - for (int i = 29; i <= 30; i++) - materials[i] = Material.OakSapling; - for (int i = 31; i <= 32; i++) - materials[i] = Material.SpruceSapling; - for (int i = 33; i <= 34; i++) - materials[i] = Material.BirchSapling; - for (int i = 35; i <= 36; i++) - materials[i] = Material.JungleSapling; - for (int i = 37; i <= 38; i++) - materials[i] = Material.AcaciaSapling; - for (int i = 39; i <= 40; i++) - materials[i] = Material.CherrySapling; - for (int i = 41; i <= 42; i++) - materials[i] = Material.DarkOakSapling; - for (int i = 43; i <= 44; i++) - materials[i] = Material.PaleOakSapling; - for (int i = 45; i <= 84; i++) - materials[i] = Material.MangrovePropagule; - for (int i = 85; i <= 85; i++) - materials[i] = Material.Bedrock; - for (int i = 86; i <= 101; i++) - materials[i] = Material.Water; - for (int i = 102; i <= 117; i++) - materials[i] = Material.Lava; - for (int i = 118; i <= 118; i++) - materials[i] = Material.Sand; - for (int i = 119; i <= 122; i++) - materials[i] = Material.SuspiciousSand; - for (int i = 123; i <= 123; i++) - materials[i] = Material.RedSand; - for (int i = 124; i <= 124; i++) - materials[i] = Material.Gravel; - for (int i = 125; i <= 128; i++) - materials[i] = Material.SuspiciousGravel; - for (int i = 129; i <= 129; i++) - materials[i] = Material.GoldOre; - for (int i = 130; i <= 130; i++) - materials[i] = Material.DeepslateGoldOre; - for (int i = 131; i <= 131; i++) - materials[i] = Material.IronOre; - for (int i = 132; i <= 132; i++) - materials[i] = Material.DeepslateIronOre; - for (int i = 133; i <= 133; i++) - materials[i] = Material.CoalOre; - for (int i = 134; i <= 134; i++) - materials[i] = Material.DeepslateCoalOre; - for (int i = 135; i <= 135; i++) - materials[i] = Material.NetherGoldOre; - for (int i = 136; i <= 138; i++) - materials[i] = Material.OakLog; - for (int i = 139; i <= 141; i++) - materials[i] = Material.SpruceLog; - for (int i = 142; i <= 144; i++) - materials[i] = Material.BirchLog; - for (int i = 145; i <= 147; i++) - materials[i] = Material.JungleLog; - for (int i = 148; i <= 150; i++) - materials[i] = Material.AcaciaLog; - for (int i = 151; i <= 153; i++) - materials[i] = Material.CherryLog; - for (int i = 154; i <= 156; i++) - materials[i] = Material.DarkOakLog; - for (int i = 157; i <= 159; i++) - materials[i] = Material.PaleOakLog; - for (int i = 160; i <= 162; i++) - materials[i] = Material.MangroveLog; - for (int i = 163; i <= 164; i++) - materials[i] = Material.MangroveRoots; - for (int i = 165; i <= 167; i++) - materials[i] = Material.MuddyMangroveRoots; - for (int i = 168; i <= 170; i++) - materials[i] = Material.BambooBlock; - for (int i = 171; i <= 173; i++) - materials[i] = Material.StrippedSpruceLog; - for (int i = 174; i <= 176; i++) - materials[i] = Material.StrippedBirchLog; - for (int i = 177; i <= 179; i++) - materials[i] = Material.StrippedJungleLog; - for (int i = 180; i <= 182; i++) - materials[i] = Material.StrippedAcaciaLog; - for (int i = 183; i <= 185; i++) - materials[i] = Material.StrippedCherryLog; - for (int i = 186; i <= 188; i++) - materials[i] = Material.StrippedDarkOakLog; - for (int i = 189; i <= 191; i++) - materials[i] = Material.StrippedPaleOakLog; - for (int i = 192; i <= 194; i++) - materials[i] = Material.StrippedOakLog; - for (int i = 195; i <= 197; i++) - materials[i] = Material.StrippedMangroveLog; - for (int i = 198; i <= 200; i++) - materials[i] = Material.StrippedBambooBlock; - for (int i = 201; i <= 203; i++) - materials[i] = Material.OakWood; - for (int i = 204; i <= 206; i++) - materials[i] = Material.SpruceWood; - for (int i = 207; i <= 209; i++) - materials[i] = Material.BirchWood; - for (int i = 210; i <= 212; i++) - materials[i] = Material.JungleWood; - for (int i = 213; i <= 215; i++) - materials[i] = Material.AcaciaWood; - for (int i = 216; i <= 218; i++) - materials[i] = Material.CherryWood; - for (int i = 219; i <= 221; i++) - materials[i] = Material.DarkOakWood; - for (int i = 222; i <= 224; i++) - materials[i] = Material.MangroveWood; - for (int i = 225; i <= 227; i++) - materials[i] = Material.StrippedOakWood; - for (int i = 228; i <= 230; i++) - materials[i] = Material.StrippedSpruceWood; - for (int i = 231; i <= 233; i++) - materials[i] = Material.StrippedBirchWood; - for (int i = 234; i <= 236; i++) - materials[i] = Material.StrippedJungleWood; - for (int i = 237; i <= 239; i++) - materials[i] = Material.StrippedAcaciaWood; - for (int i = 240; i <= 242; i++) - materials[i] = Material.StrippedCherryWood; - for (int i = 243; i <= 245; i++) - materials[i] = Material.StrippedDarkOakWood; - for (int i = 246; i <= 248; i++) - materials[i] = Material.StrippedPaleOakWood; - for (int i = 249; i <= 251; i++) - materials[i] = Material.StrippedMangroveWood; - for (int i = 252; i <= 279; i++) - materials[i] = Material.OakLeaves; - for (int i = 280; i <= 307; i++) - materials[i] = Material.SpruceLeaves; - for (int i = 308; i <= 335; i++) - materials[i] = Material.BirchLeaves; - for (int i = 336; i <= 363; i++) - materials[i] = Material.JungleLeaves; - for (int i = 364; i <= 391; i++) - materials[i] = Material.AcaciaLeaves; - for (int i = 392; i <= 419; i++) - materials[i] = Material.CherryLeaves; - for (int i = 420; i <= 447; i++) - materials[i] = Material.DarkOakLeaves; - for (int i = 448; i <= 475; i++) - materials[i] = Material.PaleOakLeaves; - for (int i = 476; i <= 503; i++) - materials[i] = Material.MangroveLeaves; - for (int i = 504; i <= 531; i++) - materials[i] = Material.AzaleaLeaves; - for (int i = 532; i <= 559; i++) - materials[i] = Material.FloweringAzaleaLeaves; - for (int i = 560; i <= 560; i++) - materials[i] = Material.Sponge; - for (int i = 561; i <= 561; i++) - materials[i] = Material.WetSponge; - for (int i = 562; i <= 562; i++) - materials[i] = Material.Glass; - for (int i = 563; i <= 563; i++) - materials[i] = Material.LapisOre; - for (int i = 564; i <= 564; i++) - materials[i] = Material.DeepslateLapisOre; - for (int i = 565; i <= 565; i++) - materials[i] = Material.LapisBlock; - for (int i = 566; i <= 577; i++) - materials[i] = Material.Dispenser; - for (int i = 578; i <= 578; i++) - materials[i] = Material.Sandstone; - for (int i = 579; i <= 579; i++) - materials[i] = Material.ChiseledSandstone; - for (int i = 580; i <= 580; i++) - materials[i] = Material.CutSandstone; - for (int i = 581; i <= 1930; i++) - materials[i] = Material.NoteBlock; - for (int i = 1931; i <= 1946; i++) - materials[i] = Material.WhiteBed; - for (int i = 1947; i <= 1962; i++) - materials[i] = Material.OrangeBed; - for (int i = 1963; i <= 1978; i++) - materials[i] = Material.MagentaBed; - for (int i = 1979; i <= 1994; i++) - materials[i] = Material.LightBlueBed; - for (int i = 1995; i <= 2010; i++) - materials[i] = Material.YellowBed; - for (int i = 2011; i <= 2026; i++) - materials[i] = Material.LimeBed; - for (int i = 2027; i <= 2042; i++) - materials[i] = Material.PinkBed; - for (int i = 2043; i <= 2058; i++) - materials[i] = Material.GrayBed; - for (int i = 2059; i <= 2074; i++) - materials[i] = Material.LightGrayBed; - for (int i = 2075; i <= 2090; i++) - materials[i] = Material.CyanBed; - for (int i = 2091; i <= 2106; i++) - materials[i] = Material.PurpleBed; - for (int i = 2107; i <= 2122; i++) - materials[i] = Material.BlueBed; - for (int i = 2123; i <= 2138; i++) - materials[i] = Material.BrownBed; - for (int i = 2139; i <= 2154; i++) - materials[i] = Material.GreenBed; - for (int i = 2155; i <= 2170; i++) - materials[i] = Material.RedBed; - for (int i = 2171; i <= 2186; i++) - materials[i] = Material.BlackBed; - for (int i = 2187; i <= 2210; i++) - materials[i] = Material.PoweredRail; - for (int i = 2211; i <= 2234; i++) - materials[i] = Material.DetectorRail; - for (int i = 2235; i <= 2246; i++) - materials[i] = Material.StickyPiston; - for (int i = 2247; i <= 2247; i++) - materials[i] = Material.Cobweb; - for (int i = 2248; i <= 2248; i++) - materials[i] = Material.ShortGrass; - for (int i = 2249; i <= 2249; i++) - materials[i] = Material.Fern; - for (int i = 2250; i <= 2250; i++) - materials[i] = Material.DeadBush; - for (int i = 2251; i <= 2251; i++) - materials[i] = Material.Bush; - for (int i = 2252; i <= 2252; i++) - materials[i] = Material.ShortDryGrass; - for (int i = 2253; i <= 2253; i++) - materials[i] = Material.TallDryGrass; - for (int i = 2254; i <= 2254; i++) - materials[i] = Material.Seagrass; - for (int i = 2255; i <= 2256; i++) - materials[i] = Material.TallSeagrass; - for (int i = 2257; i <= 2268; i++) - materials[i] = Material.Piston; - for (int i = 2269; i <= 2292; i++) - materials[i] = Material.PistonHead; - for (int i = 2293; i <= 2293; i++) - materials[i] = Material.WhiteWool; - for (int i = 2294; i <= 2294; i++) - materials[i] = Material.OrangeWool; - for (int i = 2295; i <= 2295; i++) - materials[i] = Material.MagentaWool; - for (int i = 2296; i <= 2296; i++) - materials[i] = Material.LightBlueWool; - for (int i = 2297; i <= 2297; i++) - materials[i] = Material.YellowWool; - for (int i = 2298; i <= 2298; i++) - materials[i] = Material.LimeWool; - for (int i = 2299; i <= 2299; i++) - materials[i] = Material.PinkWool; - for (int i = 2300; i <= 2300; i++) - materials[i] = Material.GrayWool; - for (int i = 2301; i <= 2301; i++) - materials[i] = Material.LightGrayWool; - for (int i = 2302; i <= 2302; i++) - materials[i] = Material.CyanWool; - for (int i = 2303; i <= 2303; i++) - materials[i] = Material.PurpleWool; - for (int i = 2304; i <= 2304; i++) - materials[i] = Material.BlueWool; - for (int i = 2305; i <= 2305; i++) - materials[i] = Material.BrownWool; - for (int i = 2306; i <= 2306; i++) - materials[i] = Material.GreenWool; - for (int i = 2307; i <= 2307; i++) - materials[i] = Material.RedWool; - for (int i = 2308; i <= 2308; i++) - materials[i] = Material.BlackWool; - for (int i = 2309; i <= 2320; i++) - materials[i] = Material.MovingPiston; - for (int i = 2321; i <= 2321; i++) - materials[i] = Material.Dandelion; - for (int i = 2322; i <= 2322; i++) - materials[i] = Material.GoldenDandelion; - for (int i = 2323; i <= 2323; i++) - materials[i] = Material.Torchflower; - for (int i = 2324; i <= 2324; i++) - materials[i] = Material.Poppy; - for (int i = 2325; i <= 2325; i++) - materials[i] = Material.BlueOrchid; - for (int i = 2326; i <= 2326; i++) - materials[i] = Material.Allium; - for (int i = 2327; i <= 2327; i++) - materials[i] = Material.AzureBluet; - for (int i = 2328; i <= 2328; i++) - materials[i] = Material.RedTulip; - for (int i = 2329; i <= 2329; i++) - materials[i] = Material.OrangeTulip; - for (int i = 2330; i <= 2330; i++) - materials[i] = Material.WhiteTulip; - for (int i = 2331; i <= 2331; i++) - materials[i] = Material.PinkTulip; - for (int i = 2332; i <= 2332; i++) - materials[i] = Material.OxeyeDaisy; - for (int i = 2333; i <= 2333; i++) - materials[i] = Material.Cornflower; - for (int i = 2334; i <= 2334; i++) - materials[i] = Material.WitherRose; - for (int i = 2335; i <= 2335; i++) - materials[i] = Material.LilyOfTheValley; - for (int i = 2336; i <= 2336; i++) - materials[i] = Material.BrownMushroom; - for (int i = 2337; i <= 2337; i++) - materials[i] = Material.RedMushroom; - for (int i = 2338; i <= 2338; i++) - materials[i] = Material.GoldBlock; - for (int i = 2339; i <= 2339; i++) - materials[i] = Material.IronBlock; - for (int i = 2340; i <= 2340; i++) - materials[i] = Material.Bricks; - for (int i = 2341; i <= 2342; i++) - materials[i] = Material.Tnt; - for (int i = 2343; i <= 2343; i++) - materials[i] = Material.Bookshelf; - for (int i = 2344; i <= 2599; i++) - materials[i] = Material.ChiseledBookshelf; - for (int i = 2600; i <= 2663; i++) - materials[i] = Material.AcaciaShelf; - for (int i = 2664; i <= 2727; i++) - materials[i] = Material.BambooShelf; - for (int i = 2728; i <= 2791; i++) - materials[i] = Material.BirchShelf; - for (int i = 2792; i <= 2855; i++) - materials[i] = Material.CherryShelf; - for (int i = 2856; i <= 2919; i++) - materials[i] = Material.CrimsonShelf; - for (int i = 2920; i <= 2983; i++) - materials[i] = Material.DarkOakShelf; - for (int i = 2984; i <= 3047; i++) - materials[i] = Material.JungleShelf; - for (int i = 3048; i <= 3111; i++) - materials[i] = Material.MangroveShelf; - for (int i = 3112; i <= 3175; i++) - materials[i] = Material.OakShelf; - for (int i = 3176; i <= 3239; i++) - materials[i] = Material.PaleOakShelf; - for (int i = 3240; i <= 3303; i++) - materials[i] = Material.SpruceShelf; - for (int i = 3304; i <= 3367; i++) - materials[i] = Material.WarpedShelf; - for (int i = 3368; i <= 3368; i++) - materials[i] = Material.MossyCobblestone; - for (int i = 3369; i <= 3369; i++) - materials[i] = Material.Obsidian; - for (int i = 3370; i <= 3370; i++) - materials[i] = Material.Torch; - for (int i = 3371; i <= 3374; i++) - materials[i] = Material.WallTorch; - for (int i = 3375; i <= 3886; i++) - materials[i] = Material.Fire; - for (int i = 3887; i <= 3887; i++) - materials[i] = Material.SoulFire; - for (int i = 3888; i <= 3888; i++) - materials[i] = Material.Spawner; - for (int i = 3889; i <= 3906; i++) - materials[i] = Material.CreakingHeart; - for (int i = 3907; i <= 3986; i++) - materials[i] = Material.OakStairs; - for (int i = 3987; i <= 4010; i++) - materials[i] = Material.Chest; - for (int i = 4011; i <= 5306; i++) - materials[i] = Material.RedstoneWire; - for (int i = 5307; i <= 5307; i++) - materials[i] = Material.DiamondOre; - for (int i = 5308; i <= 5308; i++) - materials[i] = Material.DeepslateDiamondOre; - for (int i = 5309; i <= 5309; i++) - materials[i] = Material.DiamondBlock; - for (int i = 5310; i <= 5310; i++) - materials[i] = Material.CraftingTable; - for (int i = 5311; i <= 5318; i++) - materials[i] = Material.Wheat; - for (int i = 5319; i <= 5326; i++) - materials[i] = Material.Farmland; - for (int i = 5327; i <= 5334; i++) - materials[i] = Material.Furnace; - for (int i = 5335; i <= 5366; i++) - materials[i] = Material.OakSign; - for (int i = 5367; i <= 5398; i++) - materials[i] = Material.SpruceSign; - for (int i = 5399; i <= 5430; i++) - materials[i] = Material.BirchSign; - for (int i = 5431; i <= 5462; i++) - materials[i] = Material.AcaciaSign; - for (int i = 5463; i <= 5494; i++) - materials[i] = Material.CherrySign; - for (int i = 5495; i <= 5526; i++) - materials[i] = Material.JungleSign; - for (int i = 5527; i <= 5558; i++) - materials[i] = Material.DarkOakSign; - for (int i = 5559; i <= 5590; i++) - materials[i] = Material.PaleOakSign; - for (int i = 5591; i <= 5622; i++) - materials[i] = Material.MangroveSign; - for (int i = 5623; i <= 5654; i++) - materials[i] = Material.BambooSign; - for (int i = 5655; i <= 5718; i++) - materials[i] = Material.OakDoor; - for (int i = 5719; i <= 5726; i++) - materials[i] = Material.Ladder; - for (int i = 5727; i <= 5746; i++) - materials[i] = Material.Rail; - for (int i = 5747; i <= 5826; i++) - materials[i] = Material.CobblestoneStairs; - for (int i = 5827; i <= 5834; i++) - materials[i] = Material.OakWallSign; - for (int i = 5835; i <= 5842; i++) - materials[i] = Material.SpruceWallSign; - for (int i = 5843; i <= 5850; i++) - materials[i] = Material.BirchWallSign; - for (int i = 5851; i <= 5858; i++) - materials[i] = Material.AcaciaWallSign; - for (int i = 5859; i <= 5866; i++) - materials[i] = Material.CherryWallSign; - for (int i = 5867; i <= 5874; i++) - materials[i] = Material.JungleWallSign; - for (int i = 5875; i <= 5882; i++) - materials[i] = Material.DarkOakWallSign; - for (int i = 5883; i <= 5890; i++) - materials[i] = Material.PaleOakWallSign; - for (int i = 5891; i <= 5898; i++) - materials[i] = Material.MangroveWallSign; - for (int i = 5899; i <= 5906; i++) - materials[i] = Material.BambooWallSign; - for (int i = 5907; i <= 5970; i++) - materials[i] = Material.OakHangingSign; - for (int i = 5971; i <= 6034; i++) - materials[i] = Material.SpruceHangingSign; - for (int i = 6035; i <= 6098; i++) - materials[i] = Material.BirchHangingSign; - for (int i = 6099; i <= 6162; i++) - materials[i] = Material.AcaciaHangingSign; - for (int i = 6163; i <= 6226; i++) - materials[i] = Material.CherryHangingSign; - for (int i = 6227; i <= 6290; i++) - materials[i] = Material.JungleHangingSign; - for (int i = 6291; i <= 6354; i++) - materials[i] = Material.DarkOakHangingSign; - for (int i = 6355; i <= 6418; i++) - materials[i] = Material.PaleOakHangingSign; - for (int i = 6419; i <= 6482; i++) - materials[i] = Material.CrimsonHangingSign; - for (int i = 6483; i <= 6546; i++) - materials[i] = Material.WarpedHangingSign; - for (int i = 6547; i <= 6610; i++) - materials[i] = Material.MangroveHangingSign; - for (int i = 6611; i <= 6674; i++) - materials[i] = Material.BambooHangingSign; - for (int i = 6675; i <= 6682; i++) - materials[i] = Material.OakWallHangingSign; - for (int i = 6683; i <= 6690; i++) - materials[i] = Material.SpruceWallHangingSign; - for (int i = 6691; i <= 6698; i++) - materials[i] = Material.BirchWallHangingSign; - for (int i = 6699; i <= 6706; i++) - materials[i] = Material.AcaciaWallHangingSign; - for (int i = 6707; i <= 6714; i++) - materials[i] = Material.CherryWallHangingSign; - for (int i = 6715; i <= 6722; i++) - materials[i] = Material.JungleWallHangingSign; - for (int i = 6723; i <= 6730; i++) - materials[i] = Material.DarkOakWallHangingSign; - for (int i = 6731; i <= 6738; i++) - materials[i] = Material.PaleOakWallHangingSign; - for (int i = 6739; i <= 6746; i++) - materials[i] = Material.MangroveWallHangingSign; - for (int i = 6747; i <= 6754; i++) - materials[i] = Material.CrimsonWallHangingSign; - for (int i = 6755; i <= 6762; i++) - materials[i] = Material.WarpedWallHangingSign; - for (int i = 6763; i <= 6770; i++) - materials[i] = Material.BambooWallHangingSign; - for (int i = 6771; i <= 6794; i++) - materials[i] = Material.Lever; - for (int i = 6795; i <= 6796; i++) - materials[i] = Material.StonePressurePlate; - for (int i = 6797; i <= 6860; i++) - materials[i] = Material.IronDoor; - for (int i = 6861; i <= 6862; i++) - materials[i] = Material.OakPressurePlate; - for (int i = 6863; i <= 6864; i++) - materials[i] = Material.SprucePressurePlate; - for (int i = 6865; i <= 6866; i++) - materials[i] = Material.BirchPressurePlate; - for (int i = 6867; i <= 6868; i++) - materials[i] = Material.JunglePressurePlate; - for (int i = 6869; i <= 6870; i++) - materials[i] = Material.AcaciaPressurePlate; - for (int i = 6871; i <= 6872; i++) - materials[i] = Material.CherryPressurePlate; - for (int i = 6873; i <= 6874; i++) - materials[i] = Material.DarkOakPressurePlate; - for (int i = 6875; i <= 6876; i++) - materials[i] = Material.PaleOakPressurePlate; - for (int i = 6877; i <= 6878; i++) - materials[i] = Material.MangrovePressurePlate; - for (int i = 6879; i <= 6880; i++) - materials[i] = Material.BambooPressurePlate; - for (int i = 6881; i <= 6882; i++) - materials[i] = Material.RedstoneOre; - for (int i = 6883; i <= 6884; i++) - materials[i] = Material.DeepslateRedstoneOre; - for (int i = 6885; i <= 6886; i++) - materials[i] = Material.RedstoneTorch; - for (int i = 6887; i <= 6894; i++) - materials[i] = Material.RedstoneWallTorch; - for (int i = 6895; i <= 6918; i++) - materials[i] = Material.StoneButton; - for (int i = 6919; i <= 6926; i++) - materials[i] = Material.Snow; - for (int i = 6927; i <= 6927; i++) - materials[i] = Material.Ice; - for (int i = 6928; i <= 6928; i++) - materials[i] = Material.SnowBlock; - for (int i = 6929; i <= 6944; i++) - materials[i] = Material.Cactus; - for (int i = 6945; i <= 6945; i++) - materials[i] = Material.CactusFlower; - for (int i = 6946; i <= 6946; i++) - materials[i] = Material.Clay; - for (int i = 6947; i <= 6962; i++) - materials[i] = Material.SugarCane; - for (int i = 6963; i <= 6964; i++) - materials[i] = Material.Jukebox; - for (int i = 6965; i <= 6996; i++) - materials[i] = Material.OakFence; - for (int i = 6997; i <= 6997; i++) - materials[i] = Material.Netherrack; - for (int i = 6998; i <= 6998; i++) - materials[i] = Material.SoulSand; - for (int i = 6999; i <= 6999; i++) - materials[i] = Material.SoulSoil; - for (int i = 7000; i <= 7002; i++) - materials[i] = Material.Basalt; - for (int i = 7003; i <= 7005; i++) - materials[i] = Material.PolishedBasalt; - for (int i = 7006; i <= 7006; i++) - materials[i] = Material.SoulTorch; - for (int i = 7007; i <= 7010; i++) - materials[i] = Material.SoulWallTorch; - for (int i = 7011; i <= 7011; i++) - materials[i] = Material.CopperTorch; - for (int i = 7012; i <= 7015; i++) - materials[i] = Material.CopperWallTorch; - for (int i = 7016; i <= 7016; i++) - materials[i] = Material.Glowstone; - for (int i = 7017; i <= 7018; i++) - materials[i] = Material.NetherPortal; - for (int i = 7019; i <= 7022; i++) - materials[i] = Material.CarvedPumpkin; - for (int i = 7023; i <= 7026; i++) - materials[i] = Material.JackOLantern; - for (int i = 7027; i <= 7033; i++) - materials[i] = Material.Cake; - for (int i = 7034; i <= 7097; i++) - materials[i] = Material.Repeater; - for (int i = 7098; i <= 7098; i++) - materials[i] = Material.WhiteStainedGlass; - for (int i = 7099; i <= 7099; i++) - materials[i] = Material.OrangeStainedGlass; - for (int i = 7100; i <= 7100; i++) - materials[i] = Material.MagentaStainedGlass; - for (int i = 7101; i <= 7101; i++) - materials[i] = Material.LightBlueStainedGlass; - for (int i = 7102; i <= 7102; i++) - materials[i] = Material.YellowStainedGlass; - for (int i = 7103; i <= 7103; i++) - materials[i] = Material.LimeStainedGlass; - for (int i = 7104; i <= 7104; i++) - materials[i] = Material.PinkStainedGlass; - for (int i = 7105; i <= 7105; i++) - materials[i] = Material.GrayStainedGlass; - for (int i = 7106; i <= 7106; i++) - materials[i] = Material.LightGrayStainedGlass; - for (int i = 7107; i <= 7107; i++) - materials[i] = Material.CyanStainedGlass; - for (int i = 7108; i <= 7108; i++) - materials[i] = Material.PurpleStainedGlass; - for (int i = 7109; i <= 7109; i++) - materials[i] = Material.BlueStainedGlass; - for (int i = 7110; i <= 7110; i++) - materials[i] = Material.BrownStainedGlass; - for (int i = 7111; i <= 7111; i++) - materials[i] = Material.GreenStainedGlass; - for (int i = 7112; i <= 7112; i++) - materials[i] = Material.RedStainedGlass; - for (int i = 7113; i <= 7113; i++) - materials[i] = Material.BlackStainedGlass; - for (int i = 7114; i <= 7177; i++) - materials[i] = Material.OakTrapdoor; - for (int i = 7178; i <= 7241; i++) - materials[i] = Material.SpruceTrapdoor; - for (int i = 7242; i <= 7305; i++) - materials[i] = Material.BirchTrapdoor; - for (int i = 7306; i <= 7369; i++) - materials[i] = Material.JungleTrapdoor; - for (int i = 7370; i <= 7433; i++) - materials[i] = Material.AcaciaTrapdoor; - for (int i = 7434; i <= 7497; i++) - materials[i] = Material.CherryTrapdoor; - for (int i = 7498; i <= 7561; i++) - materials[i] = Material.DarkOakTrapdoor; - for (int i = 7562; i <= 7625; i++) - materials[i] = Material.PaleOakTrapdoor; - for (int i = 7626; i <= 7689; i++) - materials[i] = Material.MangroveTrapdoor; - for (int i = 7690; i <= 7753; i++) - materials[i] = Material.BambooTrapdoor; - for (int i = 7754; i <= 7754; i++) - materials[i] = Material.StoneBricks; - for (int i = 7755; i <= 7755; i++) - materials[i] = Material.MossyStoneBricks; - for (int i = 7756; i <= 7756; i++) - materials[i] = Material.CrackedStoneBricks; - for (int i = 7757; i <= 7757; i++) - materials[i] = Material.ChiseledStoneBricks; - for (int i = 7758; i <= 7758; i++) - materials[i] = Material.PackedMud; - for (int i = 7759; i <= 7759; i++) - materials[i] = Material.MudBricks; - for (int i = 7760; i <= 7760; i++) - materials[i] = Material.InfestedStone; - for (int i = 7761; i <= 7761; i++) - materials[i] = Material.InfestedCobblestone; - for (int i = 7762; i <= 7762; i++) - materials[i] = Material.InfestedStoneBricks; - for (int i = 7763; i <= 7763; i++) - materials[i] = Material.InfestedMossyStoneBricks; - for (int i = 7764; i <= 7764; i++) - materials[i] = Material.InfestedCrackedStoneBricks; - for (int i = 7765; i <= 7765; i++) - materials[i] = Material.InfestedChiseledStoneBricks; - for (int i = 7766; i <= 7829; i++) - materials[i] = Material.BrownMushroomBlock; - for (int i = 7830; i <= 7893; i++) - materials[i] = Material.RedMushroomBlock; - for (int i = 7894; i <= 7957; i++) - materials[i] = Material.MushroomStem; - for (int i = 7958; i <= 7989; i++) - materials[i] = Material.IronBars; - for (int i = 7990; i <= 8021; i++) - materials[i] = Material.CopperBars; - for (int i = 8022; i <= 8053; i++) - materials[i] = Material.ExposedCopperBars; - for (int i = 8054; i <= 8085; i++) - materials[i] = Material.WeatheredCopperBars; - for (int i = 8086; i <= 8117; i++) - materials[i] = Material.OxidizedCopperBars; - for (int i = 8118; i <= 8149; i++) - materials[i] = Material.WaxedCopperBars; - for (int i = 8150; i <= 8181; i++) - materials[i] = Material.WaxedExposedCopperBars; - for (int i = 8182; i <= 8213; i++) - materials[i] = Material.WaxedWeatheredCopperBars; - for (int i = 8214; i <= 8245; i++) - materials[i] = Material.WaxedOxidizedCopperBars; - for (int i = 8246; i <= 8251; i++) - materials[i] = Material.IronChain; - for (int i = 8252; i <= 8257; i++) - materials[i] = Material.CopperChain; - for (int i = 8258; i <= 8263; i++) - materials[i] = Material.ExposedCopperChain; - for (int i = 8264; i <= 8269; i++) - materials[i] = Material.WeatheredCopperChain; - for (int i = 8270; i <= 8275; i++) - materials[i] = Material.OxidizedCopperChain; - for (int i = 8276; i <= 8281; i++) - materials[i] = Material.WaxedCopperChain; - for (int i = 8282; i <= 8287; i++) - materials[i] = Material.WaxedExposedCopperChain; - for (int i = 8288; i <= 8293; i++) - materials[i] = Material.WaxedWeatheredCopperChain; - for (int i = 8294; i <= 8299; i++) - materials[i] = Material.WaxedOxidizedCopperChain; - for (int i = 8300; i <= 8331; i++) - materials[i] = Material.GlassPane; - for (int i = 8332; i <= 8332; i++) - materials[i] = Material.Pumpkin; - for (int i = 8333; i <= 8333; i++) - materials[i] = Material.Melon; - for (int i = 8334; i <= 8337; i++) - materials[i] = Material.AttachedPumpkinStem; - for (int i = 8338; i <= 8341; i++) - materials[i] = Material.AttachedMelonStem; - for (int i = 8342; i <= 8349; i++) - materials[i] = Material.PumpkinStem; - for (int i = 8350; i <= 8357; i++) - materials[i] = Material.MelonStem; - for (int i = 8358; i <= 8389; i++) - materials[i] = Material.Vine; - for (int i = 8390; i <= 8517; i++) - materials[i] = Material.GlowLichen; - for (int i = 8518; i <= 8645; i++) - materials[i] = Material.ResinClump; - for (int i = 8646; i <= 8677; i++) - materials[i] = Material.OakFenceGate; - for (int i = 8678; i <= 8757; i++) - materials[i] = Material.BrickStairs; - for (int i = 8758; i <= 8837; i++) - materials[i] = Material.StoneBrickStairs; - for (int i = 8838; i <= 8917; i++) - materials[i] = Material.MudBrickStairs; - for (int i = 8918; i <= 8919; i++) - materials[i] = Material.Mycelium; - for (int i = 8920; i <= 8920; i++) - materials[i] = Material.LilyPad; - for (int i = 8921; i <= 8921; i++) - materials[i] = Material.ResinBlock; - for (int i = 8922; i <= 8922; i++) - materials[i] = Material.ResinBricks; - for (int i = 8923; i <= 9002; i++) - materials[i] = Material.ResinBrickStairs; - for (int i = 9003; i <= 9008; i++) - materials[i] = Material.ResinBrickSlab; - for (int i = 9009; i <= 9332; i++) - materials[i] = Material.ResinBrickWall; - for (int i = 9333; i <= 9333; i++) - materials[i] = Material.ChiseledResinBricks; - for (int i = 9334; i <= 9334; i++) - materials[i] = Material.NetherBricks; - for (int i = 9335; i <= 9366; i++) - materials[i] = Material.NetherBrickFence; - for (int i = 9367; i <= 9446; i++) - materials[i] = Material.NetherBrickStairs; - for (int i = 9447; i <= 9450; i++) - materials[i] = Material.NetherWart; - for (int i = 9451; i <= 9451; i++) - materials[i] = Material.EnchantingTable; - for (int i = 9452; i <= 9459; i++) - materials[i] = Material.BrewingStand; - for (int i = 9460; i <= 9460; i++) - materials[i] = Material.Cauldron; - for (int i = 9461; i <= 9463; i++) - materials[i] = Material.WaterCauldron; - for (int i = 9464; i <= 9464; i++) - materials[i] = Material.LavaCauldron; - for (int i = 9465; i <= 9467; i++) - materials[i] = Material.PowderSnowCauldron; - for (int i = 9468; i <= 9468; i++) - materials[i] = Material.EndPortal; - for (int i = 9469; i <= 9476; i++) - materials[i] = Material.EndPortalFrame; - for (int i = 9477; i <= 9477; i++) - materials[i] = Material.EndStone; - for (int i = 9478; i <= 9478; i++) - materials[i] = Material.DragonEgg; - for (int i = 9479; i <= 9480; i++) - materials[i] = Material.RedstoneLamp; - for (int i = 9481; i <= 9492; i++) - materials[i] = Material.Cocoa; - for (int i = 9493; i <= 9572; i++) - materials[i] = Material.SandstoneStairs; - for (int i = 9573; i <= 9573; i++) - materials[i] = Material.EmeraldOre; - for (int i = 9574; i <= 9574; i++) - materials[i] = Material.DeepslateEmeraldOre; - for (int i = 9575; i <= 9582; i++) - materials[i] = Material.EnderChest; - for (int i = 9583; i <= 9598; i++) - materials[i] = Material.TripwireHook; - for (int i = 9599; i <= 9726; i++) - materials[i] = Material.Tripwire; - for (int i = 9727; i <= 9727; i++) - materials[i] = Material.EmeraldBlock; - for (int i = 9728; i <= 9807; i++) - materials[i] = Material.SpruceStairs; - for (int i = 9808; i <= 9887; i++) - materials[i] = Material.BirchStairs; - for (int i = 9888; i <= 9967; i++) - materials[i] = Material.JungleStairs; - for (int i = 9968; i <= 9979; i++) - materials[i] = Material.CommandBlock; - for (int i = 9980; i <= 9980; i++) - materials[i] = Material.Beacon; - for (int i = 9981; i <= 10304; i++) - materials[i] = Material.CobblestoneWall; - for (int i = 10305; i <= 10628; i++) - materials[i] = Material.MossyCobblestoneWall; - for (int i = 10629; i <= 10629; i++) - materials[i] = Material.FlowerPot; - for (int i = 10630; i <= 10630; i++) - materials[i] = Material.PottedTorchflower; - for (int i = 10631; i <= 10631; i++) - materials[i] = Material.PottedOakSapling; - for (int i = 10632; i <= 10632; i++) - materials[i] = Material.PottedSpruceSapling; - for (int i = 10633; i <= 10633; i++) - materials[i] = Material.PottedBirchSapling; - for (int i = 10634; i <= 10634; i++) - materials[i] = Material.PottedJungleSapling; - for (int i = 10635; i <= 10635; i++) - materials[i] = Material.PottedAcaciaSapling; - for (int i = 10636; i <= 10636; i++) - materials[i] = Material.PottedCherrySapling; - for (int i = 10637; i <= 10637; i++) - materials[i] = Material.PottedDarkOakSapling; - for (int i = 10638; i <= 10638; i++) - materials[i] = Material.PottedPaleOakSapling; - for (int i = 10639; i <= 10639; i++) - materials[i] = Material.PottedMangrovePropagule; - for (int i = 10640; i <= 10640; i++) - materials[i] = Material.PottedFern; - for (int i = 10641; i <= 10641; i++) - materials[i] = Material.PottedDandelion; - for (int i = 10642; i <= 10642; i++) - materials[i] = Material.PottedGoldenDandelion; - for (int i = 10643; i <= 10643; i++) - materials[i] = Material.PottedPoppy; - for (int i = 10644; i <= 10644; i++) - materials[i] = Material.PottedBlueOrchid; - for (int i = 10645; i <= 10645; i++) - materials[i] = Material.PottedAllium; - for (int i = 10646; i <= 10646; i++) - materials[i] = Material.PottedAzureBluet; - for (int i = 10647; i <= 10647; i++) - materials[i] = Material.PottedRedTulip; - for (int i = 10648; i <= 10648; i++) - materials[i] = Material.PottedOrangeTulip; - for (int i = 10649; i <= 10649; i++) - materials[i] = Material.PottedWhiteTulip; - for (int i = 10650; i <= 10650; i++) - materials[i] = Material.PottedPinkTulip; - for (int i = 10651; i <= 10651; i++) - materials[i] = Material.PottedOxeyeDaisy; - for (int i = 10652; i <= 10652; i++) - materials[i] = Material.PottedCornflower; - for (int i = 10653; i <= 10653; i++) - materials[i] = Material.PottedLilyOfTheValley; - for (int i = 10654; i <= 10654; i++) - materials[i] = Material.PottedWitherRose; - for (int i = 10655; i <= 10655; i++) - materials[i] = Material.PottedRedMushroom; - for (int i = 10656; i <= 10656; i++) - materials[i] = Material.PottedBrownMushroom; - for (int i = 10657; i <= 10657; i++) - materials[i] = Material.PottedDeadBush; - for (int i = 10658; i <= 10658; i++) - materials[i] = Material.PottedCactus; - for (int i = 10659; i <= 10666; i++) - materials[i] = Material.Carrots; - for (int i = 10667; i <= 10674; i++) - materials[i] = Material.Potatoes; - for (int i = 10675; i <= 10698; i++) - materials[i] = Material.OakButton; - for (int i = 10699; i <= 10722; i++) - materials[i] = Material.SpruceButton; - for (int i = 10723; i <= 10746; i++) - materials[i] = Material.BirchButton; - for (int i = 10747; i <= 10770; i++) - materials[i] = Material.JungleButton; - for (int i = 10771; i <= 10794; i++) - materials[i] = Material.AcaciaButton; - for (int i = 10795; i <= 10818; i++) - materials[i] = Material.CherryButton; - for (int i = 10819; i <= 10842; i++) - materials[i] = Material.DarkOakButton; - for (int i = 10843; i <= 10866; i++) - materials[i] = Material.PaleOakButton; - for (int i = 10867; i <= 10890; i++) - materials[i] = Material.MangroveButton; - for (int i = 10891; i <= 10914; i++) - materials[i] = Material.BambooButton; - for (int i = 10915; i <= 10946; i++) - materials[i] = Material.SkeletonSkull; - for (int i = 10947; i <= 10954; i++) - materials[i] = Material.SkeletonWallSkull; - for (int i = 10955; i <= 10986; i++) - materials[i] = Material.WitherSkeletonSkull; - for (int i = 10987; i <= 10994; i++) - materials[i] = Material.WitherSkeletonWallSkull; - for (int i = 10995; i <= 11026; i++) - materials[i] = Material.ZombieHead; - for (int i = 11027; i <= 11034; i++) - materials[i] = Material.ZombieWallHead; - for (int i = 11035; i <= 11066; i++) - materials[i] = Material.PlayerHead; - for (int i = 11067; i <= 11074; i++) - materials[i] = Material.PlayerWallHead; - for (int i = 11075; i <= 11106; i++) - materials[i] = Material.CreeperHead; - for (int i = 11107; i <= 11114; i++) - materials[i] = Material.CreeperWallHead; - for (int i = 11115; i <= 11146; i++) - materials[i] = Material.DragonHead; - for (int i = 11147; i <= 11154; i++) - materials[i] = Material.DragonWallHead; - for (int i = 11155; i <= 11186; i++) - materials[i] = Material.PiglinHead; - for (int i = 11187; i <= 11194; i++) - materials[i] = Material.PiglinWallHead; - for (int i = 11195; i <= 11198; i++) - materials[i] = Material.Anvil; - for (int i = 11199; i <= 11202; i++) - materials[i] = Material.ChippedAnvil; - for (int i = 11203; i <= 11206; i++) - materials[i] = Material.DamagedAnvil; - for (int i = 11207; i <= 11230; i++) - materials[i] = Material.TrappedChest; - for (int i = 11231; i <= 11246; i++) - materials[i] = Material.LightWeightedPressurePlate; - for (int i = 11247; i <= 11262; i++) - materials[i] = Material.HeavyWeightedPressurePlate; - for (int i = 11263; i <= 11278; i++) - materials[i] = Material.Comparator; - for (int i = 11279; i <= 11310; i++) - materials[i] = Material.DaylightDetector; - for (int i = 11311; i <= 11311; i++) - materials[i] = Material.RedstoneBlock; - for (int i = 11312; i <= 11312; i++) - materials[i] = Material.NetherQuartzOre; - for (int i = 11313; i <= 11322; i++) - materials[i] = Material.Hopper; - for (int i = 11323; i <= 11323; i++) - materials[i] = Material.QuartzBlock; - for (int i = 11324; i <= 11324; i++) - materials[i] = Material.ChiseledQuartzBlock; - for (int i = 11325; i <= 11327; i++) - materials[i] = Material.QuartzPillar; - for (int i = 11328; i <= 11407; i++) - materials[i] = Material.QuartzStairs; - for (int i = 11408; i <= 11431; i++) - materials[i] = Material.ActivatorRail; - for (int i = 11432; i <= 11443; i++) - materials[i] = Material.Dropper; - for (int i = 11444; i <= 11444; i++) - materials[i] = Material.WhiteTerracotta; - for (int i = 11445; i <= 11445; i++) - materials[i] = Material.OrangeTerracotta; - for (int i = 11446; i <= 11446; i++) - materials[i] = Material.MagentaTerracotta; - for (int i = 11447; i <= 11447; i++) - materials[i] = Material.LightBlueTerracotta; - for (int i = 11448; i <= 11448; i++) - materials[i] = Material.YellowTerracotta; - for (int i = 11449; i <= 11449; i++) - materials[i] = Material.LimeTerracotta; - for (int i = 11450; i <= 11450; i++) - materials[i] = Material.PinkTerracotta; - for (int i = 11451; i <= 11451; i++) - materials[i] = Material.GrayTerracotta; - for (int i = 11452; i <= 11452; i++) - materials[i] = Material.LightGrayTerracotta; - for (int i = 11453; i <= 11453; i++) - materials[i] = Material.CyanTerracotta; - for (int i = 11454; i <= 11454; i++) - materials[i] = Material.PurpleTerracotta; - for (int i = 11455; i <= 11455; i++) - materials[i] = Material.BlueTerracotta; - for (int i = 11456; i <= 11456; i++) - materials[i] = Material.BrownTerracotta; - for (int i = 11457; i <= 11457; i++) - materials[i] = Material.GreenTerracotta; - for (int i = 11458; i <= 11458; i++) - materials[i] = Material.RedTerracotta; - for (int i = 11459; i <= 11459; i++) - materials[i] = Material.BlackTerracotta; - for (int i = 11460; i <= 11491; i++) - materials[i] = Material.WhiteStainedGlassPane; - for (int i = 11492; i <= 11523; i++) - materials[i] = Material.OrangeStainedGlassPane; - for (int i = 11524; i <= 11555; i++) - materials[i] = Material.MagentaStainedGlassPane; - for (int i = 11556; i <= 11587; i++) - materials[i] = Material.LightBlueStainedGlassPane; - for (int i = 11588; i <= 11619; i++) - materials[i] = Material.YellowStainedGlassPane; - for (int i = 11620; i <= 11651; i++) - materials[i] = Material.LimeStainedGlassPane; - for (int i = 11652; i <= 11683; i++) - materials[i] = Material.PinkStainedGlassPane; - for (int i = 11684; i <= 11715; i++) - materials[i] = Material.GrayStainedGlassPane; - for (int i = 11716; i <= 11747; i++) - materials[i] = Material.LightGrayStainedGlassPane; - for (int i = 11748; i <= 11779; i++) - materials[i] = Material.CyanStainedGlassPane; - for (int i = 11780; i <= 11811; i++) - materials[i] = Material.PurpleStainedGlassPane; - for (int i = 11812; i <= 11843; i++) - materials[i] = Material.BlueStainedGlassPane; - for (int i = 11844; i <= 11875; i++) - materials[i] = Material.BrownStainedGlassPane; - for (int i = 11876; i <= 11907; i++) - materials[i] = Material.GreenStainedGlassPane; - for (int i = 11908; i <= 11939; i++) - materials[i] = Material.RedStainedGlassPane; - for (int i = 11940; i <= 11971; i++) - materials[i] = Material.BlackStainedGlassPane; - for (int i = 11972; i <= 12051; i++) - materials[i] = Material.AcaciaStairs; - for (int i = 12052; i <= 12131; i++) - materials[i] = Material.CherryStairs; - for (int i = 12132; i <= 12211; i++) - materials[i] = Material.DarkOakStairs; - for (int i = 12212; i <= 12291; i++) - materials[i] = Material.PaleOakStairs; - for (int i = 12292; i <= 12371; i++) - materials[i] = Material.MangroveStairs; - for (int i = 12372; i <= 12451; i++) - materials[i] = Material.BambooStairs; - for (int i = 12452; i <= 12531; i++) - materials[i] = Material.BambooMosaicStairs; - for (int i = 12532; i <= 12532; i++) - materials[i] = Material.SlimeBlock; - for (int i = 12533; i <= 12534; i++) - materials[i] = Material.Barrier; - for (int i = 12535; i <= 12566; i++) - materials[i] = Material.Light; - for (int i = 12567; i <= 12630; i++) - materials[i] = Material.IronTrapdoor; - for (int i = 12631; i <= 12631; i++) - materials[i] = Material.Prismarine; - for (int i = 12632; i <= 12632; i++) - materials[i] = Material.PrismarineBricks; - for (int i = 12633; i <= 12633; i++) - materials[i] = Material.DarkPrismarine; - for (int i = 12634; i <= 12713; i++) - materials[i] = Material.PrismarineStairs; - for (int i = 12714; i <= 12793; i++) - materials[i] = Material.PrismarineBrickStairs; - for (int i = 12794; i <= 12873; i++) - materials[i] = Material.DarkPrismarineStairs; - for (int i = 12874; i <= 12879; i++) - materials[i] = Material.PrismarineSlab; - for (int i = 12880; i <= 12885; i++) - materials[i] = Material.PrismarineBrickSlab; - for (int i = 12886; i <= 12891; i++) - materials[i] = Material.DarkPrismarineSlab; - for (int i = 12892; i <= 12892; i++) - materials[i] = Material.SeaLantern; - for (int i = 12893; i <= 12895; i++) - materials[i] = Material.HayBlock; - for (int i = 12896; i <= 12896; i++) - materials[i] = Material.WhiteCarpet; - for (int i = 12897; i <= 12897; i++) - materials[i] = Material.OrangeCarpet; - for (int i = 12898; i <= 12898; i++) - materials[i] = Material.MagentaCarpet; - for (int i = 12899; i <= 12899; i++) - materials[i] = Material.LightBlueCarpet; - for (int i = 12900; i <= 12900; i++) - materials[i] = Material.YellowCarpet; - for (int i = 12901; i <= 12901; i++) - materials[i] = Material.LimeCarpet; - for (int i = 12902; i <= 12902; i++) - materials[i] = Material.PinkCarpet; - for (int i = 12903; i <= 12903; i++) - materials[i] = Material.GrayCarpet; - for (int i = 12904; i <= 12904; i++) - materials[i] = Material.LightGrayCarpet; - for (int i = 12905; i <= 12905; i++) - materials[i] = Material.CyanCarpet; - for (int i = 12906; i <= 12906; i++) - materials[i] = Material.PurpleCarpet; - for (int i = 12907; i <= 12907; i++) - materials[i] = Material.BlueCarpet; - for (int i = 12908; i <= 12908; i++) - materials[i] = Material.BrownCarpet; - for (int i = 12909; i <= 12909; i++) - materials[i] = Material.GreenCarpet; - for (int i = 12910; i <= 12910; i++) - materials[i] = Material.RedCarpet; - for (int i = 12911; i <= 12911; i++) - materials[i] = Material.BlackCarpet; - for (int i = 12912; i <= 12912; i++) - materials[i] = Material.Terracotta; - for (int i = 12913; i <= 12913; i++) - materials[i] = Material.CoalBlock; - for (int i = 12914; i <= 12914; i++) - materials[i] = Material.PackedIce; - for (int i = 12915; i <= 12916; i++) - materials[i] = Material.Sunflower; - for (int i = 12917; i <= 12918; i++) - materials[i] = Material.Lilac; - for (int i = 12919; i <= 12920; i++) - materials[i] = Material.RoseBush; - for (int i = 12921; i <= 12922; i++) - materials[i] = Material.Peony; - for (int i = 12923; i <= 12924; i++) - materials[i] = Material.TallGrass; - for (int i = 12925; i <= 12926; i++) - materials[i] = Material.LargeFern; - for (int i = 12927; i <= 12942; i++) - materials[i] = Material.WhiteBanner; - for (int i = 12943; i <= 12958; i++) - materials[i] = Material.OrangeBanner; - for (int i = 12959; i <= 12974; i++) - materials[i] = Material.MagentaBanner; - for (int i = 12975; i <= 12990; i++) - materials[i] = Material.LightBlueBanner; - for (int i = 12991; i <= 13006; i++) - materials[i] = Material.YellowBanner; - for (int i = 13007; i <= 13022; i++) - materials[i] = Material.LimeBanner; - for (int i = 13023; i <= 13038; i++) - materials[i] = Material.PinkBanner; - for (int i = 13039; i <= 13054; i++) - materials[i] = Material.GrayBanner; - for (int i = 13055; i <= 13070; i++) - materials[i] = Material.LightGrayBanner; - for (int i = 13071; i <= 13086; i++) - materials[i] = Material.CyanBanner; - for (int i = 13087; i <= 13102; i++) - materials[i] = Material.PurpleBanner; - for (int i = 13103; i <= 13118; i++) - materials[i] = Material.BlueBanner; - for (int i = 13119; i <= 13134; i++) - materials[i] = Material.BrownBanner; - for (int i = 13135; i <= 13150; i++) - materials[i] = Material.GreenBanner; - for (int i = 13151; i <= 13166; i++) - materials[i] = Material.RedBanner; - for (int i = 13167; i <= 13182; i++) - materials[i] = Material.BlackBanner; - for (int i = 13183; i <= 13186; i++) - materials[i] = Material.WhiteWallBanner; - for (int i = 13187; i <= 13190; i++) - materials[i] = Material.OrangeWallBanner; - for (int i = 13191; i <= 13194; i++) - materials[i] = Material.MagentaWallBanner; - for (int i = 13195; i <= 13198; i++) - materials[i] = Material.LightBlueWallBanner; - for (int i = 13199; i <= 13202; i++) - materials[i] = Material.YellowWallBanner; - for (int i = 13203; i <= 13206; i++) - materials[i] = Material.LimeWallBanner; - for (int i = 13207; i <= 13210; i++) - materials[i] = Material.PinkWallBanner; - for (int i = 13211; i <= 13214; i++) - materials[i] = Material.GrayWallBanner; - for (int i = 13215; i <= 13218; i++) - materials[i] = Material.LightGrayWallBanner; - for (int i = 13219; i <= 13222; i++) - materials[i] = Material.CyanWallBanner; - for (int i = 13223; i <= 13226; i++) - materials[i] = Material.PurpleWallBanner; - for (int i = 13227; i <= 13230; i++) - materials[i] = Material.BlueWallBanner; - for (int i = 13231; i <= 13234; i++) - materials[i] = Material.BrownWallBanner; - for (int i = 13235; i <= 13238; i++) - materials[i] = Material.GreenWallBanner; - for (int i = 13239; i <= 13242; i++) - materials[i] = Material.RedWallBanner; - for (int i = 13243; i <= 13246; i++) - materials[i] = Material.BlackWallBanner; - for (int i = 13247; i <= 13247; i++) - materials[i] = Material.RedSandstone; - for (int i = 13248; i <= 13248; i++) - materials[i] = Material.ChiseledRedSandstone; - for (int i = 13249; i <= 13249; i++) - materials[i] = Material.CutRedSandstone; - for (int i = 13250; i <= 13329; i++) - materials[i] = Material.RedSandstoneStairs; - for (int i = 13330; i <= 13335; i++) - materials[i] = Material.OakSlab; - for (int i = 13336; i <= 13341; i++) - materials[i] = Material.SpruceSlab; - for (int i = 13342; i <= 13347; i++) - materials[i] = Material.BirchSlab; - for (int i = 13348; i <= 13353; i++) - materials[i] = Material.JungleSlab; - for (int i = 13354; i <= 13359; i++) - materials[i] = Material.AcaciaSlab; - for (int i = 13360; i <= 13365; i++) - materials[i] = Material.CherrySlab; - for (int i = 13366; i <= 13371; i++) - materials[i] = Material.DarkOakSlab; - for (int i = 13372; i <= 13377; i++) - materials[i] = Material.PaleOakSlab; - for (int i = 13378; i <= 13383; i++) - materials[i] = Material.MangroveSlab; - for (int i = 13384; i <= 13389; i++) - materials[i] = Material.BambooSlab; - for (int i = 13390; i <= 13395; i++) - materials[i] = Material.BambooMosaicSlab; - for (int i = 13396; i <= 13401; i++) - materials[i] = Material.StoneSlab; - for (int i = 13402; i <= 13407; i++) - materials[i] = Material.SmoothStoneSlab; - for (int i = 13408; i <= 13413; i++) - materials[i] = Material.SandstoneSlab; - for (int i = 13414; i <= 13419; i++) - materials[i] = Material.CutSandstoneSlab; - for (int i = 13420; i <= 13425; i++) - materials[i] = Material.PetrifiedOakSlab; - for (int i = 13426; i <= 13431; i++) - materials[i] = Material.CobblestoneSlab; - for (int i = 13432; i <= 13437; i++) - materials[i] = Material.BrickSlab; - for (int i = 13438; i <= 13443; i++) - materials[i] = Material.StoneBrickSlab; - for (int i = 13444; i <= 13449; i++) - materials[i] = Material.MudBrickSlab; - for (int i = 13450; i <= 13455; i++) - materials[i] = Material.NetherBrickSlab; - for (int i = 13456; i <= 13461; i++) - materials[i] = Material.QuartzSlab; - for (int i = 13462; i <= 13467; i++) - materials[i] = Material.RedSandstoneSlab; - for (int i = 13468; i <= 13473; i++) - materials[i] = Material.CutRedSandstoneSlab; - for (int i = 13474; i <= 13479; i++) - materials[i] = Material.PurpurSlab; - for (int i = 13480; i <= 13480; i++) - materials[i] = Material.SmoothStone; - for (int i = 13481; i <= 13481; i++) - materials[i] = Material.SmoothSandstone; - for (int i = 13482; i <= 13482; i++) - materials[i] = Material.SmoothQuartz; - for (int i = 13483; i <= 13483; i++) - materials[i] = Material.SmoothRedSandstone; - for (int i = 13484; i <= 13515; i++) - materials[i] = Material.SpruceFenceGate; - for (int i = 13516; i <= 13547; i++) - materials[i] = Material.BirchFenceGate; - for (int i = 13548; i <= 13579; i++) - materials[i] = Material.JungleFenceGate; - for (int i = 13580; i <= 13611; i++) - materials[i] = Material.AcaciaFenceGate; - for (int i = 13612; i <= 13643; i++) - materials[i] = Material.CherryFenceGate; - for (int i = 13644; i <= 13675; i++) - materials[i] = Material.DarkOakFenceGate; - for (int i = 13676; i <= 13707; i++) - materials[i] = Material.PaleOakFenceGate; - for (int i = 13708; i <= 13739; i++) - materials[i] = Material.MangroveFenceGate; - for (int i = 13740; i <= 13771; i++) - materials[i] = Material.BambooFenceGate; - for (int i = 13772; i <= 13803; i++) - materials[i] = Material.SpruceFence; - for (int i = 13804; i <= 13835; i++) - materials[i] = Material.BirchFence; - for (int i = 13836; i <= 13867; i++) - materials[i] = Material.JungleFence; - for (int i = 13868; i <= 13899; i++) - materials[i] = Material.AcaciaFence; - for (int i = 13900; i <= 13931; i++) - materials[i] = Material.CherryFence; - for (int i = 13932; i <= 13963; i++) - materials[i] = Material.DarkOakFence; - for (int i = 13964; i <= 13995; i++) - materials[i] = Material.PaleOakFence; - for (int i = 13996; i <= 14027; i++) - materials[i] = Material.MangroveFence; - for (int i = 14028; i <= 14059; i++) - materials[i] = Material.BambooFence; - for (int i = 14060; i <= 14123; i++) - materials[i] = Material.SpruceDoor; - for (int i = 14124; i <= 14187; i++) - materials[i] = Material.BirchDoor; - for (int i = 14188; i <= 14251; i++) - materials[i] = Material.JungleDoor; - for (int i = 14252; i <= 14315; i++) - materials[i] = Material.AcaciaDoor; - for (int i = 14316; i <= 14379; i++) - materials[i] = Material.CherryDoor; - for (int i = 14380; i <= 14443; i++) - materials[i] = Material.DarkOakDoor; - for (int i = 14444; i <= 14507; i++) - materials[i] = Material.PaleOakDoor; - for (int i = 14508; i <= 14571; i++) - materials[i] = Material.MangroveDoor; - for (int i = 14572; i <= 14635; i++) - materials[i] = Material.BambooDoor; - for (int i = 14636; i <= 14641; i++) - materials[i] = Material.EndRod; - for (int i = 14642; i <= 14705; i++) - materials[i] = Material.ChorusPlant; - for (int i = 14706; i <= 14711; i++) - materials[i] = Material.ChorusFlower; - for (int i = 14712; i <= 14712; i++) - materials[i] = Material.PurpurBlock; - for (int i = 14713; i <= 14715; i++) - materials[i] = Material.PurpurPillar; - for (int i = 14716; i <= 14795; i++) - materials[i] = Material.PurpurStairs; - for (int i = 14796; i <= 14796; i++) - materials[i] = Material.EndStoneBricks; - for (int i = 14797; i <= 14798; i++) - materials[i] = Material.TorchflowerCrop; - for (int i = 14799; i <= 14808; i++) - materials[i] = Material.PitcherCrop; - for (int i = 14809; i <= 14810; i++) - materials[i] = Material.PitcherPlant; - for (int i = 14811; i <= 14814; i++) - materials[i] = Material.Beetroots; - for (int i = 14815; i <= 14815; i++) - materials[i] = Material.DirtPath; - for (int i = 14816; i <= 14816; i++) - materials[i] = Material.EndGateway; - for (int i = 14817; i <= 14828; i++) - materials[i] = Material.RepeatingCommandBlock; - for (int i = 14829; i <= 14840; i++) - materials[i] = Material.ChainCommandBlock; - for (int i = 14841; i <= 14844; i++) - materials[i] = Material.FrostedIce; - for (int i = 14845; i <= 14845; i++) - materials[i] = Material.MagmaBlock; - for (int i = 14846; i <= 14846; i++) - materials[i] = Material.NetherWartBlock; - for (int i = 14847; i <= 14847; i++) - materials[i] = Material.RedNetherBricks; - for (int i = 14848; i <= 14850; i++) - materials[i] = Material.BoneBlock; - for (int i = 14851; i <= 14851; i++) - materials[i] = Material.StructureVoid; - for (int i = 14852; i <= 14863; i++) - materials[i] = Material.Observer; - for (int i = 14864; i <= 14869; i++) - materials[i] = Material.ShulkerBox; - for (int i = 14870; i <= 14875; i++) - materials[i] = Material.WhiteShulkerBox; - for (int i = 14876; i <= 14881; i++) - materials[i] = Material.OrangeShulkerBox; - for (int i = 14882; i <= 14887; i++) - materials[i] = Material.MagentaShulkerBox; - for (int i = 14888; i <= 14893; i++) - materials[i] = Material.LightBlueShulkerBox; - for (int i = 14894; i <= 14899; i++) - materials[i] = Material.YellowShulkerBox; - for (int i = 14900; i <= 14905; i++) - materials[i] = Material.LimeShulkerBox; - for (int i = 14906; i <= 14911; i++) - materials[i] = Material.PinkShulkerBox; - for (int i = 14912; i <= 14917; i++) - materials[i] = Material.GrayShulkerBox; - for (int i = 14918; i <= 14923; i++) - materials[i] = Material.LightGrayShulkerBox; - for (int i = 14924; i <= 14929; i++) - materials[i] = Material.CyanShulkerBox; - for (int i = 14930; i <= 14935; i++) - materials[i] = Material.PurpleShulkerBox; - for (int i = 14936; i <= 14941; i++) - materials[i] = Material.BlueShulkerBox; - for (int i = 14942; i <= 14947; i++) - materials[i] = Material.BrownShulkerBox; - for (int i = 14948; i <= 14953; i++) - materials[i] = Material.GreenShulkerBox; - for (int i = 14954; i <= 14959; i++) - materials[i] = Material.RedShulkerBox; - for (int i = 14960; i <= 14965; i++) - materials[i] = Material.BlackShulkerBox; - for (int i = 14966; i <= 14969; i++) - materials[i] = Material.WhiteGlazedTerracotta; - for (int i = 14970; i <= 14973; i++) - materials[i] = Material.OrangeGlazedTerracotta; - for (int i = 14974; i <= 14977; i++) - materials[i] = Material.MagentaGlazedTerracotta; - for (int i = 14978; i <= 14981; i++) - materials[i] = Material.LightBlueGlazedTerracotta; - for (int i = 14982; i <= 14985; i++) - materials[i] = Material.YellowGlazedTerracotta; - for (int i = 14986; i <= 14989; i++) - materials[i] = Material.LimeGlazedTerracotta; - for (int i = 14990; i <= 14993; i++) - materials[i] = Material.PinkGlazedTerracotta; - for (int i = 14994; i <= 14997; i++) - materials[i] = Material.GrayGlazedTerracotta; - for (int i = 14998; i <= 15001; i++) - materials[i] = Material.LightGrayGlazedTerracotta; - for (int i = 15002; i <= 15005; i++) - materials[i] = Material.CyanGlazedTerracotta; - for (int i = 15006; i <= 15009; i++) - materials[i] = Material.PurpleGlazedTerracotta; - for (int i = 15010; i <= 15013; i++) - materials[i] = Material.BlueGlazedTerracotta; - for (int i = 15014; i <= 15017; i++) - materials[i] = Material.BrownGlazedTerracotta; - for (int i = 15018; i <= 15021; i++) - materials[i] = Material.GreenGlazedTerracotta; - for (int i = 15022; i <= 15025; i++) - materials[i] = Material.RedGlazedTerracotta; - for (int i = 15026; i <= 15029; i++) - materials[i] = Material.BlackGlazedTerracotta; - for (int i = 15030; i <= 15030; i++) - materials[i] = Material.WhiteConcrete; - for (int i = 15031; i <= 15031; i++) - materials[i] = Material.OrangeConcrete; - for (int i = 15032; i <= 15032; i++) - materials[i] = Material.MagentaConcrete; - for (int i = 15033; i <= 15033; i++) - materials[i] = Material.LightBlueConcrete; - for (int i = 15034; i <= 15034; i++) - materials[i] = Material.YellowConcrete; - for (int i = 15035; i <= 15035; i++) - materials[i] = Material.LimeConcrete; - for (int i = 15036; i <= 15036; i++) - materials[i] = Material.PinkConcrete; - for (int i = 15037; i <= 15037; i++) - materials[i] = Material.GrayConcrete; - for (int i = 15038; i <= 15038; i++) - materials[i] = Material.LightGrayConcrete; - for (int i = 15039; i <= 15039; i++) - materials[i] = Material.CyanConcrete; - for (int i = 15040; i <= 15040; i++) - materials[i] = Material.PurpleConcrete; - for (int i = 15041; i <= 15041; i++) - materials[i] = Material.BlueConcrete; - for (int i = 15042; i <= 15042; i++) - materials[i] = Material.BrownConcrete; - for (int i = 15043; i <= 15043; i++) - materials[i] = Material.GreenConcrete; - for (int i = 15044; i <= 15044; i++) - materials[i] = Material.RedConcrete; - for (int i = 15045; i <= 15045; i++) - materials[i] = Material.BlackConcrete; - for (int i = 15046; i <= 15046; i++) - materials[i] = Material.WhiteConcretePowder; - for (int i = 15047; i <= 15047; i++) - materials[i] = Material.OrangeConcretePowder; - for (int i = 15048; i <= 15048; i++) - materials[i] = Material.MagentaConcretePowder; - for (int i = 15049; i <= 15049; i++) - materials[i] = Material.LightBlueConcretePowder; - for (int i = 15050; i <= 15050; i++) - materials[i] = Material.YellowConcretePowder; - for (int i = 15051; i <= 15051; i++) - materials[i] = Material.LimeConcretePowder; - for (int i = 15052; i <= 15052; i++) - materials[i] = Material.PinkConcretePowder; - for (int i = 15053; i <= 15053; i++) - materials[i] = Material.GrayConcretePowder; - for (int i = 15054; i <= 15054; i++) - materials[i] = Material.LightGrayConcretePowder; - for (int i = 15055; i <= 15055; i++) - materials[i] = Material.CyanConcretePowder; - for (int i = 15056; i <= 15056; i++) - materials[i] = Material.PurpleConcretePowder; - for (int i = 15057; i <= 15057; i++) - materials[i] = Material.BlueConcretePowder; - for (int i = 15058; i <= 15058; i++) - materials[i] = Material.BrownConcretePowder; - for (int i = 15059; i <= 15059; i++) - materials[i] = Material.GreenConcretePowder; - for (int i = 15060; i <= 15060; i++) - materials[i] = Material.RedConcretePowder; - for (int i = 15061; i <= 15061; i++) - materials[i] = Material.BlackConcretePowder; - for (int i = 15062; i <= 15087; i++) - materials[i] = Material.Kelp; - for (int i = 15088; i <= 15088; i++) - materials[i] = Material.KelpPlant; - for (int i = 15089; i <= 15089; i++) - materials[i] = Material.DriedKelpBlock; - for (int i = 15090; i <= 15101; i++) - materials[i] = Material.TurtleEgg; - for (int i = 15102; i <= 15104; i++) - materials[i] = Material.SnifferEgg; - for (int i = 15105; i <= 15136; i++) - materials[i] = Material.DriedGhast; - for (int i = 15137; i <= 15137; i++) - materials[i] = Material.DeadTubeCoralBlock; - for (int i = 15138; i <= 15138; i++) - materials[i] = Material.DeadBrainCoralBlock; - for (int i = 15139; i <= 15139; i++) - materials[i] = Material.DeadBubbleCoralBlock; - for (int i = 15140; i <= 15140; i++) - materials[i] = Material.DeadFireCoralBlock; - for (int i = 15141; i <= 15141; i++) - materials[i] = Material.DeadHornCoralBlock; - for (int i = 15142; i <= 15142; i++) - materials[i] = Material.TubeCoralBlock; - for (int i = 15143; i <= 15143; i++) - materials[i] = Material.BrainCoralBlock; - for (int i = 15144; i <= 15144; i++) - materials[i] = Material.BubbleCoralBlock; - for (int i = 15145; i <= 15145; i++) - materials[i] = Material.FireCoralBlock; - for (int i = 15146; i <= 15146; i++) - materials[i] = Material.HornCoralBlock; - for (int i = 15147; i <= 15148; i++) - materials[i] = Material.DeadTubeCoral; - for (int i = 15149; i <= 15150; i++) - materials[i] = Material.DeadBrainCoral; - for (int i = 15151; i <= 15152; i++) - materials[i] = Material.DeadBubbleCoral; - for (int i = 15153; i <= 15154; i++) - materials[i] = Material.DeadFireCoral; - for (int i = 15155; i <= 15156; i++) - materials[i] = Material.DeadHornCoral; - for (int i = 15157; i <= 15158; i++) - materials[i] = Material.TubeCoral; - for (int i = 15159; i <= 15160; i++) - materials[i] = Material.BrainCoral; - for (int i = 15161; i <= 15162; i++) - materials[i] = Material.BubbleCoral; - for (int i = 15163; i <= 15164; i++) - materials[i] = Material.FireCoral; - for (int i = 15165; i <= 15166; i++) - materials[i] = Material.HornCoral; - for (int i = 15167; i <= 15168; i++) - materials[i] = Material.DeadTubeCoralFan; - for (int i = 15169; i <= 15170; i++) - materials[i] = Material.DeadBrainCoralFan; - for (int i = 15171; i <= 15172; i++) - materials[i] = Material.DeadBubbleCoralFan; - for (int i = 15173; i <= 15174; i++) - materials[i] = Material.DeadFireCoralFan; - for (int i = 15175; i <= 15176; i++) - materials[i] = Material.DeadHornCoralFan; - for (int i = 15177; i <= 15178; i++) - materials[i] = Material.TubeCoralFan; - for (int i = 15179; i <= 15180; i++) - materials[i] = Material.BrainCoralFan; - for (int i = 15181; i <= 15182; i++) - materials[i] = Material.BubbleCoralFan; - for (int i = 15183; i <= 15184; i++) - materials[i] = Material.FireCoralFan; - for (int i = 15185; i <= 15186; i++) - materials[i] = Material.HornCoralFan; - for (int i = 15187; i <= 15194; i++) - materials[i] = Material.DeadTubeCoralWallFan; - for (int i = 15195; i <= 15202; i++) - materials[i] = Material.DeadBrainCoralWallFan; - for (int i = 15203; i <= 15210; i++) - materials[i] = Material.DeadBubbleCoralWallFan; - for (int i = 15211; i <= 15218; i++) - materials[i] = Material.DeadFireCoralWallFan; - for (int i = 15219; i <= 15226; i++) - materials[i] = Material.DeadHornCoralWallFan; - for (int i = 15227; i <= 15234; i++) - materials[i] = Material.TubeCoralWallFan; - for (int i = 15235; i <= 15242; i++) - materials[i] = Material.BrainCoralWallFan; - for (int i = 15243; i <= 15250; i++) - materials[i] = Material.BubbleCoralWallFan; - for (int i = 15251; i <= 15258; i++) - materials[i] = Material.FireCoralWallFan; - for (int i = 15259; i <= 15266; i++) - materials[i] = Material.HornCoralWallFan; - for (int i = 15267; i <= 15274; i++) - materials[i] = Material.SeaPickle; - for (int i = 15275; i <= 15275; i++) - materials[i] = Material.BlueIce; - for (int i = 15276; i <= 15277; i++) - materials[i] = Material.Conduit; - for (int i = 15278; i <= 15278; i++) - materials[i] = Material.BambooSapling; - for (int i = 15279; i <= 15290; i++) - materials[i] = Material.Bamboo; - for (int i = 15291; i <= 15291; i++) - materials[i] = Material.PottedBamboo; - for (int i = 15292; i <= 15292; i++) - materials[i] = Material.VoidAir; - for (int i = 15293; i <= 15293; i++) - materials[i] = Material.CaveAir; - for (int i = 15294; i <= 15295; i++) - materials[i] = Material.BubbleColumn; - for (int i = 15296; i <= 15375; i++) - materials[i] = Material.PolishedGraniteStairs; - for (int i = 15376; i <= 15455; i++) - materials[i] = Material.SmoothRedSandstoneStairs; - for (int i = 15456; i <= 15535; i++) - materials[i] = Material.MossyStoneBrickStairs; - for (int i = 15536; i <= 15615; i++) - materials[i] = Material.PolishedDioriteStairs; - for (int i = 15616; i <= 15695; i++) - materials[i] = Material.MossyCobblestoneStairs; - for (int i = 15696; i <= 15775; i++) - materials[i] = Material.EndStoneBrickStairs; - for (int i = 15776; i <= 15855; i++) - materials[i] = Material.StoneStairs; - for (int i = 15856; i <= 15935; i++) - materials[i] = Material.SmoothSandstoneStairs; - for (int i = 15936; i <= 16015; i++) - materials[i] = Material.SmoothQuartzStairs; - for (int i = 16016; i <= 16095; i++) - materials[i] = Material.GraniteStairs; - for (int i = 16096; i <= 16175; i++) - materials[i] = Material.AndesiteStairs; - for (int i = 16176; i <= 16255; i++) - materials[i] = Material.RedNetherBrickStairs; - for (int i = 16256; i <= 16335; i++) - materials[i] = Material.PolishedAndesiteStairs; - for (int i = 16336; i <= 16415; i++) - materials[i] = Material.DioriteStairs; - for (int i = 16416; i <= 16421; i++) - materials[i] = Material.PolishedGraniteSlab; - for (int i = 16422; i <= 16427; i++) - materials[i] = Material.SmoothRedSandstoneSlab; - for (int i = 16428; i <= 16433; i++) - materials[i] = Material.MossyStoneBrickSlab; - for (int i = 16434; i <= 16439; i++) - materials[i] = Material.PolishedDioriteSlab; - for (int i = 16440; i <= 16445; i++) - materials[i] = Material.MossyCobblestoneSlab; - for (int i = 16446; i <= 16451; i++) - materials[i] = Material.EndStoneBrickSlab; - for (int i = 16452; i <= 16457; i++) - materials[i] = Material.SmoothSandstoneSlab; - for (int i = 16458; i <= 16463; i++) - materials[i] = Material.SmoothQuartzSlab; - for (int i = 16464; i <= 16469; i++) - materials[i] = Material.GraniteSlab; - for (int i = 16470; i <= 16475; i++) - materials[i] = Material.AndesiteSlab; - for (int i = 16476; i <= 16481; i++) - materials[i] = Material.RedNetherBrickSlab; - for (int i = 16482; i <= 16487; i++) - materials[i] = Material.PolishedAndesiteSlab; - for (int i = 16488; i <= 16493; i++) - materials[i] = Material.DioriteSlab; - for (int i = 16494; i <= 16817; i++) - materials[i] = Material.BrickWall; - for (int i = 16818; i <= 17141; i++) - materials[i] = Material.PrismarineWall; - for (int i = 17142; i <= 17465; i++) - materials[i] = Material.RedSandstoneWall; - for (int i = 17466; i <= 17789; i++) - materials[i] = Material.MossyStoneBrickWall; - for (int i = 17790; i <= 18113; i++) - materials[i] = Material.GraniteWall; - for (int i = 18114; i <= 18437; i++) - materials[i] = Material.StoneBrickWall; - for (int i = 18438; i <= 18761; i++) - materials[i] = Material.MudBrickWall; - for (int i = 18762; i <= 19085; i++) - materials[i] = Material.NetherBrickWall; - for (int i = 19086; i <= 19409; i++) - materials[i] = Material.AndesiteWall; - for (int i = 19410; i <= 19733; i++) - materials[i] = Material.RedNetherBrickWall; - for (int i = 19734; i <= 20057; i++) - materials[i] = Material.SandstoneWall; - for (int i = 20058; i <= 20381; i++) - materials[i] = Material.EndStoneBrickWall; - for (int i = 20382; i <= 20705; i++) - materials[i] = Material.DioriteWall; - for (int i = 20706; i <= 20737; i++) - materials[i] = Material.Scaffolding; - for (int i = 20738; i <= 20741; i++) - materials[i] = Material.Loom; - for (int i = 20742; i <= 20753; i++) - materials[i] = Material.Barrel; - for (int i = 20754; i <= 20761; i++) - materials[i] = Material.Smoker; - for (int i = 20762; i <= 20769; i++) - materials[i] = Material.BlastFurnace; - for (int i = 20770; i <= 20770; i++) - materials[i] = Material.CartographyTable; - for (int i = 20771; i <= 20771; i++) - materials[i] = Material.FletchingTable; - for (int i = 20772; i <= 20783; i++) - materials[i] = Material.Grindstone; - for (int i = 20784; i <= 20799; i++) - materials[i] = Material.Lectern; - for (int i = 20800; i <= 20800; i++) - materials[i] = Material.SmithingTable; - for (int i = 20801; i <= 20804; i++) - materials[i] = Material.Stonecutter; - for (int i = 20805; i <= 20836; i++) - materials[i] = Material.Bell; - for (int i = 20837; i <= 20840; i++) - materials[i] = Material.Lantern; - for (int i = 20841; i <= 20844; i++) - materials[i] = Material.SoulLantern; - for (int i = 20845; i <= 20848; i++) - materials[i] = Material.CopperLantern; - for (int i = 20849; i <= 20852; i++) - materials[i] = Material.ExposedCopperLantern; - for (int i = 20853; i <= 20856; i++) - materials[i] = Material.WeatheredCopperLantern; - for (int i = 20857; i <= 20860; i++) - materials[i] = Material.OxidizedCopperLantern; - for (int i = 20861; i <= 20864; i++) - materials[i] = Material.WaxedCopperLantern; - for (int i = 20865; i <= 20868; i++) - materials[i] = Material.WaxedExposedCopperLantern; - for (int i = 20869; i <= 20872; i++) - materials[i] = Material.WaxedWeatheredCopperLantern; - for (int i = 20873; i <= 20876; i++) - materials[i] = Material.WaxedOxidizedCopperLantern; - for (int i = 20877; i <= 20908; i++) - materials[i] = Material.Campfire; - for (int i = 20909; i <= 20940; i++) - materials[i] = Material.SoulCampfire; - for (int i = 20941; i <= 20944; i++) - materials[i] = Material.SweetBerryBush; - for (int i = 20945; i <= 20947; i++) - materials[i] = Material.WarpedStem; - for (int i = 20948; i <= 20950; i++) - materials[i] = Material.StrippedWarpedStem; - for (int i = 20951; i <= 20953; i++) - materials[i] = Material.WarpedHyphae; - for (int i = 20954; i <= 20956; i++) - materials[i] = Material.StrippedWarpedHyphae; - for (int i = 20957; i <= 20957; i++) - materials[i] = Material.WarpedNylium; - for (int i = 20958; i <= 20958; i++) - materials[i] = Material.WarpedFungus; - for (int i = 20959; i <= 20959; i++) - materials[i] = Material.WarpedWartBlock; - for (int i = 20960; i <= 20960; i++) - materials[i] = Material.WarpedRoots; - for (int i = 20961; i <= 20961; i++) - materials[i] = Material.NetherSprouts; - for (int i = 20962; i <= 20964; i++) - materials[i] = Material.CrimsonStem; - for (int i = 20965; i <= 20967; i++) - materials[i] = Material.StrippedCrimsonStem; - for (int i = 20968; i <= 20970; i++) - materials[i] = Material.CrimsonHyphae; - for (int i = 20971; i <= 20973; i++) - materials[i] = Material.StrippedCrimsonHyphae; - for (int i = 20974; i <= 20974; i++) - materials[i] = Material.CrimsonNylium; - for (int i = 20975; i <= 20975; i++) - materials[i] = Material.CrimsonFungus; - for (int i = 20976; i <= 20976; i++) - materials[i] = Material.Shroomlight; - for (int i = 20977; i <= 21002; i++) - materials[i] = Material.WeepingVines; - for (int i = 21003; i <= 21003; i++) - materials[i] = Material.WeepingVinesPlant; - for (int i = 21004; i <= 21029; i++) - materials[i] = Material.TwistingVines; - for (int i = 21030; i <= 21030; i++) - materials[i] = Material.TwistingVinesPlant; - for (int i = 21031; i <= 21031; i++) - materials[i] = Material.CrimsonRoots; - for (int i = 21032; i <= 21032; i++) - materials[i] = Material.CrimsonPlanks; - for (int i = 21033; i <= 21033; i++) - materials[i] = Material.WarpedPlanks; - for (int i = 21034; i <= 21039; i++) - materials[i] = Material.CrimsonSlab; - for (int i = 21040; i <= 21045; i++) - materials[i] = Material.WarpedSlab; - for (int i = 21046; i <= 21047; i++) - materials[i] = Material.CrimsonPressurePlate; - for (int i = 21048; i <= 21049; i++) - materials[i] = Material.WarpedPressurePlate; - for (int i = 21050; i <= 21081; i++) - materials[i] = Material.CrimsonFence; - for (int i = 21082; i <= 21113; i++) - materials[i] = Material.WarpedFence; - for (int i = 21114; i <= 21177; i++) - materials[i] = Material.CrimsonTrapdoor; - for (int i = 21178; i <= 21241; i++) - materials[i] = Material.WarpedTrapdoor; - for (int i = 21242; i <= 21273; i++) - materials[i] = Material.CrimsonFenceGate; - for (int i = 21274; i <= 21305; i++) - materials[i] = Material.WarpedFenceGate; - for (int i = 21306; i <= 21385; i++) - materials[i] = Material.CrimsonStairs; - for (int i = 21386; i <= 21465; i++) - materials[i] = Material.WarpedStairs; - for (int i = 21466; i <= 21489; i++) - materials[i] = Material.CrimsonButton; - for (int i = 21490; i <= 21513; i++) - materials[i] = Material.WarpedButton; - for (int i = 21514; i <= 21577; i++) - materials[i] = Material.CrimsonDoor; - for (int i = 21578; i <= 21641; i++) - materials[i] = Material.WarpedDoor; - for (int i = 21642; i <= 21673; i++) - materials[i] = Material.CrimsonSign; - for (int i = 21674; i <= 21705; i++) - materials[i] = Material.WarpedSign; - for (int i = 21706; i <= 21713; i++) - materials[i] = Material.CrimsonWallSign; - for (int i = 21714; i <= 21721; i++) - materials[i] = Material.WarpedWallSign; - for (int i = 21722; i <= 21725; i++) - materials[i] = Material.StructureBlock; - for (int i = 21726; i <= 21737; i++) - materials[i] = Material.Jigsaw; - for (int i = 21738; i <= 21741; i++) - materials[i] = Material.TestBlock; - for (int i = 21742; i <= 21742; i++) - materials[i] = Material.TestInstanceBlock; - for (int i = 21743; i <= 21751; i++) - materials[i] = Material.Composter; - for (int i = 21752; i <= 21767; i++) - materials[i] = Material.Target; - for (int i = 21768; i <= 21791; i++) - materials[i] = Material.BeeNest; - for (int i = 21792; i <= 21815; i++) - materials[i] = Material.Beehive; - for (int i = 21816; i <= 21816; i++) - materials[i] = Material.HoneyBlock; - for (int i = 21817; i <= 21817; i++) - materials[i] = Material.HoneycombBlock; - for (int i = 21818; i <= 21818; i++) - materials[i] = Material.NetheriteBlock; - for (int i = 21819; i <= 21819; i++) - materials[i] = Material.AncientDebris; - for (int i = 21820; i <= 21820; i++) - materials[i] = Material.CryingObsidian; - for (int i = 21821; i <= 21825; i++) - materials[i] = Material.RespawnAnchor; - for (int i = 21826; i <= 21826; i++) - materials[i] = Material.PottedCrimsonFungus; - for (int i = 21827; i <= 21827; i++) - materials[i] = Material.PottedWarpedFungus; - for (int i = 21828; i <= 21828; i++) - materials[i] = Material.PottedCrimsonRoots; - for (int i = 21829; i <= 21829; i++) - materials[i] = Material.PottedWarpedRoots; - for (int i = 21830; i <= 21830; i++) - materials[i] = Material.Lodestone; - for (int i = 21831; i <= 21831; i++) - materials[i] = Material.Blackstone; - for (int i = 21832; i <= 21911; i++) - materials[i] = Material.BlackstoneStairs; - for (int i = 21912; i <= 22235; i++) - materials[i] = Material.BlackstoneWall; - for (int i = 22236; i <= 22241; i++) - materials[i] = Material.BlackstoneSlab; - for (int i = 22242; i <= 22242; i++) - materials[i] = Material.PolishedBlackstone; - for (int i = 22243; i <= 22243; i++) - materials[i] = Material.PolishedBlackstoneBricks; - for (int i = 22244; i <= 22244; i++) - materials[i] = Material.CrackedPolishedBlackstoneBricks; - for (int i = 22245; i <= 22245; i++) - materials[i] = Material.ChiseledPolishedBlackstone; - for (int i = 22246; i <= 22251; i++) - materials[i] = Material.PolishedBlackstoneBrickSlab; - for (int i = 22252; i <= 22331; i++) - materials[i] = Material.PolishedBlackstoneBrickStairs; - for (int i = 22332; i <= 22655; i++) - materials[i] = Material.PolishedBlackstoneBrickWall; - for (int i = 22656; i <= 22656; i++) - materials[i] = Material.GildedBlackstone; - for (int i = 22657; i <= 22736; i++) - materials[i] = Material.PolishedBlackstoneStairs; - for (int i = 22737; i <= 22742; i++) - materials[i] = Material.PolishedBlackstoneSlab; - for (int i = 22743; i <= 22744; i++) - materials[i] = Material.PolishedBlackstonePressurePlate; - for (int i = 22745; i <= 22768; i++) - materials[i] = Material.PolishedBlackstoneButton; - for (int i = 22769; i <= 23092; i++) - materials[i] = Material.PolishedBlackstoneWall; - for (int i = 23093; i <= 23093; i++) - materials[i] = Material.ChiseledNetherBricks; - for (int i = 23094; i <= 23094; i++) - materials[i] = Material.CrackedNetherBricks; - for (int i = 23095; i <= 23095; i++) - materials[i] = Material.QuartzBricks; - for (int i = 23096; i <= 23111; i++) - materials[i] = Material.Candle; - for (int i = 23112; i <= 23127; i++) - materials[i] = Material.WhiteCandle; - for (int i = 23128; i <= 23143; i++) - materials[i] = Material.OrangeCandle; - for (int i = 23144; i <= 23159; i++) - materials[i] = Material.MagentaCandle; - for (int i = 23160; i <= 23175; i++) - materials[i] = Material.LightBlueCandle; - for (int i = 23176; i <= 23191; i++) - materials[i] = Material.YellowCandle; - for (int i = 23192; i <= 23207; i++) - materials[i] = Material.LimeCandle; - for (int i = 23208; i <= 23223; i++) - materials[i] = Material.PinkCandle; - for (int i = 23224; i <= 23239; i++) - materials[i] = Material.GrayCandle; - for (int i = 23240; i <= 23255; i++) - materials[i] = Material.LightGrayCandle; - for (int i = 23256; i <= 23271; i++) - materials[i] = Material.CyanCandle; - for (int i = 23272; i <= 23287; i++) - materials[i] = Material.PurpleCandle; - for (int i = 23288; i <= 23303; i++) - materials[i] = Material.BlueCandle; - for (int i = 23304; i <= 23319; i++) - materials[i] = Material.BrownCandle; - for (int i = 23320; i <= 23335; i++) - materials[i] = Material.GreenCandle; - for (int i = 23336; i <= 23351; i++) - materials[i] = Material.RedCandle; - for (int i = 23352; i <= 23367; i++) - materials[i] = Material.BlackCandle; - for (int i = 23368; i <= 23369; i++) - materials[i] = Material.CandleCake; - for (int i = 23370; i <= 23371; i++) - materials[i] = Material.WhiteCandleCake; - for (int i = 23372; i <= 23373; i++) - materials[i] = Material.OrangeCandleCake; - for (int i = 23374; i <= 23375; i++) - materials[i] = Material.MagentaCandleCake; - for (int i = 23376; i <= 23377; i++) - materials[i] = Material.LightBlueCandleCake; - for (int i = 23378; i <= 23379; i++) - materials[i] = Material.YellowCandleCake; - for (int i = 23380; i <= 23381; i++) - materials[i] = Material.LimeCandleCake; - for (int i = 23382; i <= 23383; i++) - materials[i] = Material.PinkCandleCake; - for (int i = 23384; i <= 23385; i++) - materials[i] = Material.GrayCandleCake; - for (int i = 23386; i <= 23387; i++) - materials[i] = Material.LightGrayCandleCake; - for (int i = 23388; i <= 23389; i++) - materials[i] = Material.CyanCandleCake; - for (int i = 23390; i <= 23391; i++) - materials[i] = Material.PurpleCandleCake; - for (int i = 23392; i <= 23393; i++) - materials[i] = Material.BlueCandleCake; - for (int i = 23394; i <= 23395; i++) - materials[i] = Material.BrownCandleCake; - for (int i = 23396; i <= 23397; i++) - materials[i] = Material.GreenCandleCake; - for (int i = 23398; i <= 23399; i++) - materials[i] = Material.RedCandleCake; - for (int i = 23400; i <= 23401; i++) - materials[i] = Material.BlackCandleCake; - for (int i = 23402; i <= 23402; i++) - materials[i] = Material.AmethystBlock; - for (int i = 23403; i <= 23403; i++) - materials[i] = Material.BuddingAmethyst; - for (int i = 23404; i <= 23415; i++) - materials[i] = Material.AmethystCluster; - for (int i = 23416; i <= 23427; i++) - materials[i] = Material.LargeAmethystBud; - for (int i = 23428; i <= 23439; i++) - materials[i] = Material.MediumAmethystBud; - for (int i = 23440; i <= 23451; i++) - materials[i] = Material.SmallAmethystBud; - for (int i = 23452; i <= 23452; i++) - materials[i] = Material.Tuff; - for (int i = 23453; i <= 23458; i++) - materials[i] = Material.TuffSlab; - for (int i = 23459; i <= 23538; i++) - materials[i] = Material.TuffStairs; - for (int i = 23539; i <= 23862; i++) - materials[i] = Material.TuffWall; - for (int i = 23863; i <= 23863; i++) - materials[i] = Material.PolishedTuff; - for (int i = 23864; i <= 23869; i++) - materials[i] = Material.PolishedTuffSlab; - for (int i = 23870; i <= 23949; i++) - materials[i] = Material.PolishedTuffStairs; - for (int i = 23950; i <= 24273; i++) - materials[i] = Material.PolishedTuffWall; - for (int i = 24274; i <= 24274; i++) - materials[i] = Material.ChiseledTuff; - for (int i = 24275; i <= 24275; i++) - materials[i] = Material.TuffBricks; - for (int i = 24276; i <= 24281; i++) - materials[i] = Material.TuffBrickSlab; - for (int i = 24282; i <= 24361; i++) - materials[i] = Material.TuffBrickStairs; - for (int i = 24362; i <= 24685; i++) - materials[i] = Material.TuffBrickWall; - for (int i = 24686; i <= 24686; i++) - materials[i] = Material.ChiseledTuffBricks; - for (int i = 24687; i <= 24687; i++) - materials[i] = Material.Sulfur; - for (int i = 24688; i <= 24692; i++) - materials[i] = Material.PotentSulfur; - for (int i = 24693; i <= 24698; i++) - materials[i] = Material.SulfurSlab; - for (int i = 24699; i <= 24778; i++) - materials[i] = Material.SulfurStairs; - for (int i = 24779; i <= 25102; i++) - materials[i] = Material.SulfurWall; - for (int i = 25103; i <= 25103; i++) - materials[i] = Material.PolishedSulfur; - for (int i = 25104; i <= 25109; i++) - materials[i] = Material.PolishedSulfurSlab; - for (int i = 25110; i <= 25189; i++) - materials[i] = Material.PolishedSulfurStairs; - for (int i = 25190; i <= 25513; i++) - materials[i] = Material.PolishedSulfurWall; - for (int i = 25514; i <= 25514; i++) - materials[i] = Material.SulfurBricks; - for (int i = 25515; i <= 25520; i++) - materials[i] = Material.SulfurBrickSlab; - for (int i = 25521; i <= 25600; i++) - materials[i] = Material.SulfurBrickStairs; - for (int i = 25601; i <= 25924; i++) - materials[i] = Material.SulfurBrickWall; - for (int i = 25925; i <= 25925; i++) - materials[i] = Material.ChiseledSulfur; - for (int i = 25926; i <= 25926; i++) - materials[i] = Material.Cinnabar; - for (int i = 25927; i <= 25932; i++) - materials[i] = Material.CinnabarSlab; - for (int i = 25933; i <= 26012; i++) - materials[i] = Material.CinnabarStairs; - for (int i = 26013; i <= 26336; i++) - materials[i] = Material.CinnabarWall; - for (int i = 26337; i <= 26337; i++) - materials[i] = Material.PolishedCinnabar; - for (int i = 26338; i <= 26343; i++) - materials[i] = Material.PolishedCinnabarSlab; - for (int i = 26344; i <= 26423; i++) - materials[i] = Material.PolishedCinnabarStairs; - for (int i = 26424; i <= 26747; i++) - materials[i] = Material.PolishedCinnabarWall; - for (int i = 26748; i <= 26748; i++) - materials[i] = Material.CinnabarBricks; - for (int i = 26749; i <= 26754; i++) - materials[i] = Material.CinnabarBrickSlab; - for (int i = 26755; i <= 26834; i++) - materials[i] = Material.CinnabarBrickStairs; - for (int i = 26835; i <= 27158; i++) - materials[i] = Material.CinnabarBrickWall; - for (int i = 27159; i <= 27159; i++) - materials[i] = Material.ChiseledCinnabar; - for (int i = 27160; i <= 27160; i++) - materials[i] = Material.Calcite; - for (int i = 27161; i <= 27161; i++) - materials[i] = Material.TintedGlass; - for (int i = 27162; i <= 27162; i++) - materials[i] = Material.PowderSnow; - for (int i = 27163; i <= 27258; i++) - materials[i] = Material.SculkSensor; - for (int i = 27259; i <= 27642; i++) - materials[i] = Material.CalibratedSculkSensor; - for (int i = 27643; i <= 27643; i++) - materials[i] = Material.Sculk; - for (int i = 27644; i <= 27771; i++) - materials[i] = Material.SculkVein; - for (int i = 27772; i <= 27773; i++) - materials[i] = Material.SculkCatalyst; - for (int i = 27774; i <= 27781; i++) - materials[i] = Material.SculkShrieker; - for (int i = 27782; i <= 27782; i++) - materials[i] = Material.CopperBlock; - for (int i = 27783; i <= 27783; i++) - materials[i] = Material.ExposedCopper; - for (int i = 27784; i <= 27784; i++) - materials[i] = Material.WeatheredCopper; - for (int i = 27785; i <= 27785; i++) - materials[i] = Material.OxidizedCopper; - for (int i = 27786; i <= 27786; i++) - materials[i] = Material.WaxedCopperBlock; - for (int i = 27787; i <= 27787; i++) - materials[i] = Material.WaxedExposedCopper; - for (int i = 27788; i <= 27788; i++) - materials[i] = Material.WaxedWeatheredCopper; - for (int i = 27789; i <= 27789; i++) - materials[i] = Material.WaxedOxidizedCopper; - for (int i = 27790; i <= 27790; i++) - materials[i] = Material.CopperOre; - for (int i = 27791; i <= 27791; i++) - materials[i] = Material.DeepslateCopperOre; - for (int i = 27792; i <= 27792; i++) - materials[i] = Material.CutCopper; - for (int i = 27793; i <= 27793; i++) - materials[i] = Material.ExposedCutCopper; - for (int i = 27794; i <= 27794; i++) - materials[i] = Material.WeatheredCutCopper; - for (int i = 27795; i <= 27795; i++) - materials[i] = Material.OxidizedCutCopper; - for (int i = 27796; i <= 27796; i++) - materials[i] = Material.WaxedCutCopper; - for (int i = 27797; i <= 27797; i++) - materials[i] = Material.WaxedExposedCutCopper; - for (int i = 27798; i <= 27798; i++) - materials[i] = Material.WaxedWeatheredCutCopper; - for (int i = 27799; i <= 27799; i++) - materials[i] = Material.WaxedOxidizedCutCopper; - for (int i = 27800; i <= 27800; i++) - materials[i] = Material.ChiseledCopper; - for (int i = 27801; i <= 27801; i++) - materials[i] = Material.ExposedChiseledCopper; - for (int i = 27802; i <= 27802; i++) - materials[i] = Material.WeatheredChiseledCopper; - for (int i = 27803; i <= 27803; i++) - materials[i] = Material.OxidizedChiseledCopper; - for (int i = 27804; i <= 27804; i++) - materials[i] = Material.WaxedChiseledCopper; - for (int i = 27805; i <= 27805; i++) - materials[i] = Material.WaxedExposedChiseledCopper; - for (int i = 27806; i <= 27806; i++) - materials[i] = Material.WaxedWeatheredChiseledCopper; - for (int i = 27807; i <= 27807; i++) - materials[i] = Material.WaxedOxidizedChiseledCopper; - for (int i = 27808; i <= 27887; i++) - materials[i] = Material.CutCopperStairs; - for (int i = 27888; i <= 27967; i++) - materials[i] = Material.ExposedCutCopperStairs; - for (int i = 27968; i <= 28047; i++) - materials[i] = Material.WeatheredCutCopperStairs; - for (int i = 28048; i <= 28127; i++) - materials[i] = Material.OxidizedCutCopperStairs; - for (int i = 28128; i <= 28207; i++) - materials[i] = Material.WaxedCutCopperStairs; - for (int i = 28208; i <= 28287; i++) - materials[i] = Material.WaxedExposedCutCopperStairs; - for (int i = 28288; i <= 28367; i++) - materials[i] = Material.WaxedWeatheredCutCopperStairs; - for (int i = 28368; i <= 28447; i++) - materials[i] = Material.WaxedOxidizedCutCopperStairs; - for (int i = 28448; i <= 28453; i++) - materials[i] = Material.CutCopperSlab; - for (int i = 28454; i <= 28459; i++) - materials[i] = Material.ExposedCutCopperSlab; - for (int i = 28460; i <= 28465; i++) - materials[i] = Material.WeatheredCutCopperSlab; - for (int i = 28466; i <= 28471; i++) - materials[i] = Material.OxidizedCutCopperSlab; - for (int i = 28472; i <= 28477; i++) - materials[i] = Material.WaxedCutCopperSlab; - for (int i = 28478; i <= 28483; i++) - materials[i] = Material.WaxedExposedCutCopperSlab; - for (int i = 28484; i <= 28489; i++) - materials[i] = Material.WaxedWeatheredCutCopperSlab; - for (int i = 28490; i <= 28495; i++) - materials[i] = Material.WaxedOxidizedCutCopperSlab; - for (int i = 28496; i <= 28559; i++) - materials[i] = Material.CopperDoor; - for (int i = 28560; i <= 28623; i++) - materials[i] = Material.ExposedCopperDoor; - for (int i = 28624; i <= 28687; i++) - materials[i] = Material.WeatheredCopperDoor; - for (int i = 28688; i <= 28751; i++) - materials[i] = Material.OxidizedCopperDoor; - for (int i = 28752; i <= 28815; i++) - materials[i] = Material.WaxedCopperDoor; - for (int i = 28816; i <= 28879; i++) - materials[i] = Material.WaxedExposedCopperDoor; - for (int i = 28880; i <= 28943; i++) - materials[i] = Material.WaxedWeatheredCopperDoor; - for (int i = 28944; i <= 29007; i++) - materials[i] = Material.WaxedOxidizedCopperDoor; - for (int i = 29008; i <= 29071; i++) - materials[i] = Material.CopperTrapdoor; - for (int i = 29072; i <= 29135; i++) - materials[i] = Material.ExposedCopperTrapdoor; - for (int i = 29136; i <= 29199; i++) - materials[i] = Material.WeatheredCopperTrapdoor; - for (int i = 29200; i <= 29263; i++) - materials[i] = Material.OxidizedCopperTrapdoor; - for (int i = 29264; i <= 29327; i++) - materials[i] = Material.WaxedCopperTrapdoor; - for (int i = 29328; i <= 29391; i++) - materials[i] = Material.WaxedExposedCopperTrapdoor; - for (int i = 29392; i <= 29455; i++) - materials[i] = Material.WaxedWeatheredCopperTrapdoor; - for (int i = 29456; i <= 29519; i++) - materials[i] = Material.WaxedOxidizedCopperTrapdoor; - for (int i = 29520; i <= 29521; i++) - materials[i] = Material.CopperGrate; - for (int i = 29522; i <= 29523; i++) - materials[i] = Material.ExposedCopperGrate; - for (int i = 29524; i <= 29525; i++) - materials[i] = Material.WeatheredCopperGrate; - for (int i = 29526; i <= 29527; i++) - materials[i] = Material.OxidizedCopperGrate; - for (int i = 29528; i <= 29529; i++) - materials[i] = Material.WaxedCopperGrate; - for (int i = 29530; i <= 29531; i++) - materials[i] = Material.WaxedExposedCopperGrate; - for (int i = 29532; i <= 29533; i++) - materials[i] = Material.WaxedWeatheredCopperGrate; - for (int i = 29534; i <= 29535; i++) - materials[i] = Material.WaxedOxidizedCopperGrate; - for (int i = 29536; i <= 29539; i++) - materials[i] = Material.CopperBulb; - for (int i = 29540; i <= 29543; i++) - materials[i] = Material.ExposedCopperBulb; - for (int i = 29544; i <= 29547; i++) - materials[i] = Material.WeatheredCopperBulb; - for (int i = 29548; i <= 29551; i++) - materials[i] = Material.OxidizedCopperBulb; - for (int i = 29552; i <= 29555; i++) - materials[i] = Material.WaxedCopperBulb; - for (int i = 29556; i <= 29559; i++) - materials[i] = Material.WaxedExposedCopperBulb; - for (int i = 29560; i <= 29563; i++) - materials[i] = Material.WaxedWeatheredCopperBulb; - for (int i = 29564; i <= 29567; i++) - materials[i] = Material.WaxedOxidizedCopperBulb; - for (int i = 29568; i <= 29591; i++) - materials[i] = Material.CopperChest; - for (int i = 29592; i <= 29615; i++) - materials[i] = Material.ExposedCopperChest; - for (int i = 29616; i <= 29639; i++) - materials[i] = Material.WeatheredCopperChest; - for (int i = 29640; i <= 29663; i++) - materials[i] = Material.OxidizedCopperChest; - for (int i = 29664; i <= 29687; i++) - materials[i] = Material.WaxedCopperChest; - for (int i = 29688; i <= 29711; i++) - materials[i] = Material.WaxedExposedCopperChest; - for (int i = 29712; i <= 29735; i++) - materials[i] = Material.WaxedWeatheredCopperChest; - for (int i = 29736; i <= 29759; i++) - materials[i] = Material.WaxedOxidizedCopperChest; - for (int i = 29760; i <= 29791; i++) - materials[i] = Material.CopperGolemStatue; - for (int i = 29792; i <= 29823; i++) - materials[i] = Material.ExposedCopperGolemStatue; - for (int i = 29824; i <= 29855; i++) - materials[i] = Material.WeatheredCopperGolemStatue; - for (int i = 29856; i <= 29887; i++) - materials[i] = Material.OxidizedCopperGolemStatue; - for (int i = 29888; i <= 29919; i++) - materials[i] = Material.WaxedCopperGolemStatue; - for (int i = 29920; i <= 29951; i++) - materials[i] = Material.WaxedExposedCopperGolemStatue; - for (int i = 29952; i <= 29983; i++) - materials[i] = Material.WaxedWeatheredCopperGolemStatue; - for (int i = 29984; i <= 30015; i++) - materials[i] = Material.WaxedOxidizedCopperGolemStatue; - for (int i = 30016; i <= 30039; i++) - materials[i] = Material.LightningRod; - for (int i = 30040; i <= 30063; i++) - materials[i] = Material.ExposedLightningRod; - for (int i = 30064; i <= 30087; i++) - materials[i] = Material.WeatheredLightningRod; - for (int i = 30088; i <= 30111; i++) - materials[i] = Material.OxidizedLightningRod; - for (int i = 30112; i <= 30135; i++) - materials[i] = Material.WaxedLightningRod; - for (int i = 30136; i <= 30159; i++) - materials[i] = Material.WaxedExposedLightningRod; - for (int i = 30160; i <= 30183; i++) - materials[i] = Material.WaxedWeatheredLightningRod; - for (int i = 30184; i <= 30207; i++) - materials[i] = Material.WaxedOxidizedLightningRod; - for (int i = 30208; i <= 30208; i++) - materials[i] = Material.DripstoneBlock; - for (int i = 30209; i <= 30228; i++) - materials[i] = Material.PointedDripstone; - for (int i = 30229; i <= 30248; i++) - materials[i] = Material.SulfurSpike; - for (int i = 30249; i <= 30300; i++) - materials[i] = Material.CaveVines; - for (int i = 30301; i <= 30302; i++) - materials[i] = Material.CaveVinesPlant; - for (int i = 30303; i <= 30303; i++) - materials[i] = Material.SporeBlossom; - for (int i = 30304; i <= 30304; i++) - materials[i] = Material.Azalea; - for (int i = 30305; i <= 30305; i++) - materials[i] = Material.FloweringAzalea; - for (int i = 30306; i <= 30306; i++) - materials[i] = Material.MossCarpet; - for (int i = 30307; i <= 30322; i++) - materials[i] = Material.PinkPetals; - for (int i = 30323; i <= 30338; i++) - materials[i] = Material.Wildflowers; - for (int i = 30339; i <= 30354; i++) - materials[i] = Material.LeafLitter; - for (int i = 30355; i <= 30355; i++) - materials[i] = Material.MossBlock; - for (int i = 30356; i <= 30387; i++) - materials[i] = Material.BigDripleaf; - for (int i = 30388; i <= 30395; i++) - materials[i] = Material.BigDripleafStem; - for (int i = 30396; i <= 30411; i++) - materials[i] = Material.SmallDripleaf; - for (int i = 30412; i <= 30413; i++) - materials[i] = Material.HangingRoots; - for (int i = 30414; i <= 30414; i++) - materials[i] = Material.RootedDirt; - for (int i = 30415; i <= 30415; i++) - materials[i] = Material.Mud; - for (int i = 30416; i <= 30418; i++) - materials[i] = Material.Deepslate; - for (int i = 30419; i <= 30419; i++) - materials[i] = Material.CobbledDeepslate; - for (int i = 30420; i <= 30499; i++) - materials[i] = Material.CobbledDeepslateStairs; - for (int i = 30500; i <= 30505; i++) - materials[i] = Material.CobbledDeepslateSlab; - for (int i = 30506; i <= 30829; i++) - materials[i] = Material.CobbledDeepslateWall; - for (int i = 30830; i <= 30830; i++) - materials[i] = Material.PolishedDeepslate; - for (int i = 30831; i <= 30910; i++) - materials[i] = Material.PolishedDeepslateStairs; - for (int i = 30911; i <= 30916; i++) - materials[i] = Material.PolishedDeepslateSlab; - for (int i = 30917; i <= 31240; i++) - materials[i] = Material.PolishedDeepslateWall; - for (int i = 31241; i <= 31241; i++) - materials[i] = Material.DeepslateTiles; - for (int i = 31242; i <= 31321; i++) - materials[i] = Material.DeepslateTileStairs; - for (int i = 31322; i <= 31327; i++) - materials[i] = Material.DeepslateTileSlab; - for (int i = 31328; i <= 31651; i++) - materials[i] = Material.DeepslateTileWall; - for (int i = 31652; i <= 31652; i++) - materials[i] = Material.DeepslateBricks; - for (int i = 31653; i <= 31732; i++) - materials[i] = Material.DeepslateBrickStairs; - for (int i = 31733; i <= 31738; i++) - materials[i] = Material.DeepslateBrickSlab; - for (int i = 31739; i <= 32062; i++) - materials[i] = Material.DeepslateBrickWall; - for (int i = 32063; i <= 32063; i++) - materials[i] = Material.ChiseledDeepslate; - for (int i = 32064; i <= 32064; i++) - materials[i] = Material.CrackedDeepslateBricks; - for (int i = 32065; i <= 32065; i++) - materials[i] = Material.CrackedDeepslateTiles; - for (int i = 32066; i <= 32068; i++) - materials[i] = Material.InfestedDeepslate; - for (int i = 32069; i <= 32069; i++) - materials[i] = Material.SmoothBasalt; - for (int i = 32070; i <= 32070; i++) - materials[i] = Material.RawIronBlock; - for (int i = 32071; i <= 32071; i++) - materials[i] = Material.RawCopperBlock; - for (int i = 32072; i <= 32072; i++) - materials[i] = Material.RawGoldBlock; - for (int i = 32073; i <= 32073; i++) - materials[i] = Material.PottedAzaleaBush; - for (int i = 32074; i <= 32074; i++) - materials[i] = Material.PottedFloweringAzaleaBush; - for (int i = 32075; i <= 32077; i++) - materials[i] = Material.OchreFroglight; - for (int i = 32078; i <= 32080; i++) - materials[i] = Material.VerdantFroglight; - for (int i = 32081; i <= 32083; i++) - materials[i] = Material.PearlescentFroglight; - for (int i = 32084; i <= 32084; i++) - materials[i] = Material.Frogspawn; - for (int i = 32085; i <= 32085; i++) - materials[i] = Material.ReinforcedDeepslate; - for (int i = 32086; i <= 32101; i++) - materials[i] = Material.DecoratedPot; - for (int i = 32102; i <= 32149; i++) - materials[i] = Material.Crafter; - for (int i = 32150; i <= 32161; i++) - materials[i] = Material.TrialSpawner; - for (int i = 32162; i <= 32193; i++) - materials[i] = Material.Vault; - for (int i = 32194; i <= 32195; i++) - materials[i] = Material.HeavyCore; - for (int i = 32196; i <= 32196; i++) - materials[i] = Material.PaleMossBlock; - for (int i = 32197; i <= 32358; i++) - materials[i] = Material.PaleMossCarpet; - for (int i = 32359; i <= 32360; i++) - materials[i] = Material.PaleHangingMoss; - for (int i = 32361; i <= 32361; i++) - materials[i] = Material.OpenEyeblossom; - for (int i = 32362; i <= 32362; i++) - materials[i] = Material.ClosedEyeblossom; - for (int i = 32363; i <= 32363; i++) - materials[i] = Material.PottedOpenEyeblossom; - for (int i = 32364; i <= 32364; i++) - materials[i] = Material.PottedClosedEyeblossom; - for (int i = 32365; i <= 32365; i++) - materials[i] = Material.FireflyBush; - } - - // - private static readonly BlockStateDefinition[] stateDefinitions = - [ - new(8, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(12, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(22, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(29, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(31, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(33, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(35, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(37, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(39, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(41, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(43, 2, - [ - new("stage", ["0", "1"], 1) - ]), - new(45, 40, - [ - new("age", ["0", "1", "2", "3", "4"], 8), - new("hanging", ["true", "false"], 4), - new("stage", ["0", "1"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(86, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(102, 16, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(119, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(125, 4, - [ - new("dusted", ["0", "1", "2", "3"], 1) - ]), - new(136, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(139, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(142, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(145, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(148, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(151, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(154, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(157, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(160, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(163, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(165, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(168, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(171, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(174, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(177, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(180, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(183, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(186, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(189, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(192, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(195, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(198, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(201, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(204, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(207, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(210, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(213, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(216, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(219, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(222, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(225, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(228, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(231, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(234, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(237, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(240, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(243, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(246, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(249, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(252, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(280, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(308, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(336, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(364, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(392, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(420, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(448, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(476, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(504, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(532, 28, - [ - new("distance", ["1", "2", "3", "4", "5", "6", "7"], 4), - new("persistent", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(566, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(581, 1350, - [ - new("instrument", ["harp", "basedrum", "snare", "hat", "bass", "flute", "bell", "guitar", "chime", "xylophone", "iron_xylophone", "cow_bell", "didgeridoo", "bit", "banjo", "pling", "trumpet", "trumpet_exposed", "trumpet_oxidized", "trumpet_weathered", "zombie", "skeleton", "creeper", "dragon", "wither_skeleton", "piglin", "custom_head"], 50), - new("note", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24"], 2), - new("powered", ["true", "false"], 1) - ]), - new(1931, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1947, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1963, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1979, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(1995, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2011, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2027, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2043, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2059, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2075, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2091, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2107, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2123, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2139, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2155, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2171, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("occupied", ["true", "false"], 2), - new("part", ["head", "foot"], 1) - ]), - new(2187, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2211, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2235, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2255, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(2257, 12, - [ - new("extended", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(2269, 24, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("short", ["true", "false"], 2) - ]), - new(2309, 12, - [ - new("type", ["normal", "sticky"], 1), - new("facing", ["north", "east", "south", "west", "up", "down"], 2) - ]), - new(2341, 2, - [ - new("unstable", ["true", "false"], 1) - ]), - new(2344, 256, - [ - new("facing", ["north", "south", "west", "east"], 64), - new("slot_0_occupied", ["true", "false"], 32), - new("slot_1_occupied", ["true", "false"], 16), - new("slot_2_occupied", ["true", "false"], 8), - new("slot_3_occupied", ["true", "false"], 4), - new("slot_4_occupied", ["true", "false"], 2), - new("slot_5_occupied", ["true", "false"], 1) - ]), - new(2600, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2664, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2728, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2792, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2856, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2920, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(2984, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3048, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3112, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3176, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3240, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3304, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("powered", ["true", "false"], 8), - new("side_chain", ["unconnected", "right", "center", "left"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3371, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(3375, 512, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(3889, 18, - [ - new("axis", ["x", "y", "z"], 6), - new("creaking_heart_state", ["uprooted", "dormant", "awake"], 2), - new("natural", ["true", "false"], 1) - ]), - new(3907, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(3987, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(4011, 1296, - [ - new("east", ["up", "side", "none"], 432), - new("north", ["up", "side", "none"], 144), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 9), - new("south", ["up", "side", "none"], 3), - new("west", ["up", "side", "none"], 1) - ]), - new(5311, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(5319, 8, - [ - new("moisture", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(5327, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(5335, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5367, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5399, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5431, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5463, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5495, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5527, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5559, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5591, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5623, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5655, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(5719, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5727, 20, - [ - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south", "south_east", "south_west", "north_west", "north_east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5747, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5827, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5835, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5843, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5851, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5859, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5867, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5875, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5883, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5891, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5899, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5907, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(5971, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6035, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6099, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6163, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6227, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6291, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6355, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6419, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6483, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6547, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6611, 64, - [ - new("attached", ["true", "false"], 32), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6675, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6683, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6691, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6699, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6707, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6715, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6723, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6731, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6739, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6747, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6755, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6763, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(6771, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6795, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6797, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6861, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6863, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6865, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6867, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6869, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6871, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6873, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6875, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6877, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6879, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(6881, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(6883, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(6885, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(6887, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(6895, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(6919, 8, - [ - new("layers", ["1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(6929, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6947, 16, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(6963, 2, - [ - new("has_record", ["true", "false"], 1) - ]), - new(6965, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7000, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(7003, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(7007, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7012, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7017, 2, - [ - new("axis", ["x", "z"], 1) - ]), - new(7019, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7023, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(7027, 7, - [ - new("bites", ["0", "1", "2", "3", "4", "5", "6"], 1) - ]), - new(7034, 64, - [ - new("delay", ["1", "2", "3", "4"], 16), - new("facing", ["north", "south", "west", "east"], 4), - new("locked", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(7114, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7178, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7242, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7306, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7370, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7434, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7498, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7562, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7626, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7690, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(7766, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7830, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7894, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7958, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(7990, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8022, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8054, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8086, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8118, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8150, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8182, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8214, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8246, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8252, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8258, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8264, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8270, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8276, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8282, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8288, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8294, 6, - [ - new("axis", ["x", "y", "z"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8300, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8334, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8338, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(8342, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8350, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(8358, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8390, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8518, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(8646, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(8678, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8758, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8838, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(8918, 2, - [ - new("snowy", ["true", "false"], 1) - ]), - new(8923, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9003, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9009, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(9335, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9367, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9447, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(9452, 8, - [ - new("has_bottle_0", ["true", "false"], 4), - new("has_bottle_1", ["true", "false"], 2), - new("has_bottle_2", ["true", "false"], 1) - ]), - new(9461, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(9465, 3, - [ - new("level", ["1", "2", "3"], 1) - ]), - new(9469, 8, - [ - new("eye", ["true", "false"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9479, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(9481, 12, - [ - new("age", ["0", "1", "2"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(9493, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9575, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9583, 16, - [ - new("attached", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(9599, 128, - [ - new("attached", ["true", "false"], 64), - new("disarmed", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("powered", ["true", "false"], 4), - new("south", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(9728, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9808, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9888, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(9968, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(9981, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(10305, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(10659, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(10667, 8, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7"], 1) - ]), - new(10675, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10699, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10723, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10747, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10771, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10795, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10819, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10843, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10867, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10891, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10915, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10947, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10955, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(10987, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(10995, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11027, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11035, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11067, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11075, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11107, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11115, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11147, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11155, 32, - [ - new("powered", ["true", "false"], 16), - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11187, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11195, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11199, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11203, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(11207, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(11231, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11247, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11263, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("mode", ["compare", "subtract"], 2), - new("powered", ["true", "false"], 1) - ]), - new(11279, 32, - [ - new("inverted", ["true", "false"], 16), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(11313, 10, - [ - new("enabled", ["true", "false"], 5), - new("facing", ["down", "north", "south", "west", "east"], 1) - ]), - new(11325, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(11328, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11408, 24, - [ - new("powered", ["true", "false"], 12), - new("shape", ["north_south", "east_west", "ascending_east", "ascending_west", "ascending_north", "ascending_south"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(11432, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(11460, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11492, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11524, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11556, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11588, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11620, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11652, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11684, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11716, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11748, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11780, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11812, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11844, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11876, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11908, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11940, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(11972, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12052, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12132, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12212, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12292, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12372, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12452, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12533, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(12535, 32, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12567, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12634, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12714, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12794, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12874, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12880, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12886, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(12893, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(12915, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12917, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12919, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12921, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12923, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12925, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(12927, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12943, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12959, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12975, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(12991, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13007, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13023, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13039, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13055, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13071, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13087, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13103, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13119, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13135, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13151, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13167, 16, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(13183, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13187, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13191, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13195, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13199, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13203, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13207, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13211, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13215, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13219, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13223, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13227, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13231, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13235, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13239, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13243, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(13250, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13330, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13336, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13342, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13348, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13354, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13360, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13366, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13372, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13378, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13384, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13390, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13396, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13402, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13408, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13414, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13420, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13426, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13432, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13438, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13444, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13450, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13456, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13462, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13468, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13474, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(13484, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13516, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13548, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13580, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13612, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13644, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13676, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13708, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13740, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(13772, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13804, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13836, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13868, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13900, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13932, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13964, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(13996, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(14028, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(14060, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14124, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14188, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14252, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14316, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14380, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14444, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14508, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14572, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14636, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14642, 64, - [ - new("down", ["true", "false"], 32), - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("up", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(14706, 6, - [ - new("age", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(14713, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(14716, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(14797, 2, - [ - new("age", ["0", "1"], 1) - ]), - new(14799, 10, - [ - new("age", ["0", "1", "2", "3", "4"], 2), - new("half", ["upper", "lower"], 1) - ]), - new(14809, 2, - [ - new("half", ["upper", "lower"], 1) - ]), - new(14811, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(14817, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14829, 12, - [ - new("conditional", ["true", "false"], 6), - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14841, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(14848, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(14852, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("powered", ["true", "false"], 1) - ]), - new(14864, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14870, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14876, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14882, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14888, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14894, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14900, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14906, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14912, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14918, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14924, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14930, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14936, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14942, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14948, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14954, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14960, 6, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 1) - ]), - new(14966, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14970, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14974, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14978, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14982, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14986, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14990, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14994, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(14998, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15002, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15006, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15010, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15014, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15018, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15022, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15026, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(15062, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(15090, 12, - [ - new("eggs", ["1", "2", "3", "4"], 3), - new("hatch", ["0", "1", "2"], 1) - ]), - new(15102, 3, - [ - new("hatch", ["0", "1", "2"], 1) - ]), - new(15105, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("hydration", ["0", "1", "2", "3"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15147, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15149, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15151, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15153, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15155, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15157, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15159, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15161, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15163, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15165, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15167, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15169, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15171, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15173, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15175, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15177, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15179, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15181, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15183, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15185, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15187, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15195, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15203, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15211, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15219, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15227, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15235, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15243, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15251, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15259, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15267, 8, - [ - new("pickles", ["1", "2", "3", "4"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15276, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(15279, 12, - [ - new("age", ["0", "1"], 6), - new("leaves", ["none", "small", "large"], 2), - new("stage", ["0", "1"], 1) - ]), - new(15294, 2, - [ - new("drag", ["true", "false"], 1) - ]), - new(15296, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15376, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15456, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15536, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15616, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15696, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15776, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15856, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(15936, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16016, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16096, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16176, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16256, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16336, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16416, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16422, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16428, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16434, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16440, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16446, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16452, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16458, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16464, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16470, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16476, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16482, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16488, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(16494, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(16818, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17142, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17466, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(17790, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18114, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18438, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(18762, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19086, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19410, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(19734, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20058, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20382, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(20706, 32, - [ - new("bottom", ["true", "false"], 16), - new("distance", ["0", "1", "2", "3", "4", "5", "6", "7"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20738, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(20742, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("open", ["true", "false"], 1) - ]), - new(20754, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(20762, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("lit", ["true", "false"], 1) - ]), - new(20772, 12, - [ - new("face", ["floor", "wall", "ceiling"], 4), - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(20784, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("has_book", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20801, 4, - [ - new("facing", ["north", "south", "west", "east"], 1) - ]), - new(20805, 32, - [ - new("attachment", ["floor", "ceiling", "single_wall", "double_wall"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(20837, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20841, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20845, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20849, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20853, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20857, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20861, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20865, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20869, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20873, 4, - [ - new("hanging", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20877, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20909, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("lit", ["true", "false"], 4), - new("signal_fire", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(20941, 4, - [ - new("age", ["0", "1", "2", "3"], 1) - ]), - new(20945, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20948, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20951, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20954, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20962, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20965, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20968, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20971, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(20977, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(21004, 26, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 1) - ]), - new(21034, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21040, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21046, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(21048, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(21050, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(21082, 32, - [ - new("east", ["true", "false"], 16), - new("north", ["true", "false"], 8), - new("south", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(21114, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21178, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21242, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21274, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("in_wall", ["true", "false"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21306, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21386, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21466, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21490, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21514, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21578, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(21642, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21674, 32, - [ - new("rotation", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21706, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21714, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21722, 4, - [ - new("mode", ["save", "load", "corner", "data"], 1) - ]), - new(21726, 12, - [ - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 1) - ]), - new(21738, 4, - [ - new("mode", ["start", "log", "fail", "accept"], 1) - ]), - new(21743, 9, - [ - new("level", ["0", "1", "2", "3", "4", "5", "6", "7", "8"], 1) - ]), - new(21752, 16, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 1) - ]), - new(21768, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(21792, 24, - [ - new("facing", ["north", "south", "west", "east"], 6), - new("honey_level", ["0", "1", "2", "3", "4", "5"], 1) - ]), - new(21821, 5, - [ - new("charges", ["0", "1", "2", "3", "4"], 1) - ]), - new(21832, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(21912, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22236, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22246, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22252, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22332, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(22657, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22737, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(22743, 2, - [ - new("powered", ["true", "false"], 1) - ]), - new(22745, 24, - [ - new("face", ["floor", "wall", "ceiling"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("powered", ["true", "false"], 1) - ]), - new(22769, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(23096, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23112, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23128, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23144, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23160, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23176, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23192, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23208, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23224, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23240, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23256, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23272, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23288, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23304, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23320, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23336, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23352, 16, - [ - new("candles", ["1", "2", "3", "4"], 4), - new("lit", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23368, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23370, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23372, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23374, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23376, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23378, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23380, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23382, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23384, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23386, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23388, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23390, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23392, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23394, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23396, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23398, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23400, 2, - [ - new("lit", ["true", "false"], 1) - ]), - new(23404, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23416, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23428, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23440, 12, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23453, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23459, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23539, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(23864, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23870, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(23950, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(24276, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24282, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24362, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(24688, 5, - [ - new("potent_sulfur_state", ["dry", "wet", "dormant", "erupting", "continuous"], 1) - ]), - new(24693, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24699, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(24779, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(25104, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25110, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25190, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(25515, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25521, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25601, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(25927, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(25933, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26013, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(26338, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26344, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26424, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(26749, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26755, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(26835, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(27163, 96, - [ - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27259, 384, - [ - new("facing", ["north", "south", "west", "east"], 96), - new("power", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15"], 6), - new("sculk_sensor_phase", ["inactive", "active", "cooldown"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27644, 128, - [ - new("down", ["true", "false"], 64), - new("east", ["true", "false"], 32), - new("north", ["true", "false"], 16), - new("south", ["true", "false"], 8), - new("up", ["true", "false"], 4), - new("waterlogged", ["true", "false"], 2), - new("west", ["true", "false"], 1) - ]), - new(27772, 2, - [ - new("bloom", ["true", "false"], 1) - ]), - new(27774, 8, - [ - new("can_summon", ["true", "false"], 4), - new("shrieking", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27808, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27888, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(27968, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28048, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28128, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28208, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28288, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28368, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28448, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28454, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28460, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28466, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28472, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28478, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28484, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28490, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(28496, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(28560, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(28624, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(28688, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(28752, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(28816, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(28880, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(28944, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["upper", "lower"], 8), - new("hinge", ["left", "right"], 4), - new("open", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(29008, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29072, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29136, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29200, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29264, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29328, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29392, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29456, 64, - [ - new("facing", ["north", "south", "west", "east"], 16), - new("half", ["top", "bottom"], 8), - new("open", ["true", "false"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29520, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(29522, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(29524, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(29526, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(29528, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(29530, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(29532, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(29534, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(29536, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(29540, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(29544, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(29548, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(29552, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(29556, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(29560, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(29564, 4, - [ - new("lit", ["true", "false"], 2), - new("powered", ["true", "false"], 1) - ]), - new(29568, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(29592, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(29616, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(29640, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(29664, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(29688, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(29712, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(29736, 24, - [ - new("type", ["single", "left", "right"], 2), - new("facing", ["north", "south", "west", "east"], 6), - new("waterlogged", ["true", "false"], 1) - ]), - new(29760, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29792, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29824, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29856, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29888, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29920, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29952, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(29984, 32, - [ - new("copper_golem_pose", ["standing", "sitting", "running", "star"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30016, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30040, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30064, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30088, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30112, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30136, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30160, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30184, 24, - [ - new("facing", ["north", "east", "south", "west", "up", "down"], 4), - new("powered", ["true", "false"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30209, 20, - [ - new("thickness", ["tip_merge", "tip", "frustum", "middle", "base"], 4), - new("vertical_direction", ["up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30229, 20, - [ - new("thickness", ["tip_merge", "tip", "frustum", "middle", "base"], 4), - new("vertical_direction", ["up", "down"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30249, 52, - [ - new("age", ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13", "14", "15", "16", "17", "18", "19", "20", "21", "22", "23", "24", "25"], 2), - new("berries", ["true", "false"], 1) - ]), - new(30301, 2, - [ - new("berries", ["true", "false"], 1) - ]), - new(30307, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("flower_amount", ["1", "2", "3", "4"], 1) - ]), - new(30323, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("flower_amount", ["1", "2", "3", "4"], 1) - ]), - new(30339, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("segment_amount", ["1", "2", "3", "4"], 1) - ]), - new(30356, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("tilt", ["none", "unstable", "partial", "full"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30388, 8, - [ - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30396, 16, - [ - new("facing", ["north", "south", "west", "east"], 4), - new("half", ["upper", "lower"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30412, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(30416, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(30420, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30500, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30506, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(30831, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30911, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(30917, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(31242, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(31322, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(31328, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(31653, 80, - [ - new("facing", ["north", "south", "west", "east"], 20), - new("half", ["top", "bottom"], 10), - new("shape", ["straight", "inner_left", "inner_right", "outer_left", "outer_right"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(31733, 6, - [ - new("type", ["top", "bottom", "double"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(31739, 324, - [ - new("east", ["none", "low", "tall"], 108), - new("north", ["none", "low", "tall"], 36), - new("south", ["none", "low", "tall"], 12), - new("up", ["true", "false"], 6), - new("waterlogged", ["true", "false"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(32066, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(32075, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(32078, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(32081, 3, - [ - new("axis", ["x", "y", "z"], 1) - ]), - new(32086, 16, - [ - new("cracked", ["true", "false"], 8), - new("facing", ["north", "south", "west", "east"], 2), - new("waterlogged", ["true", "false"], 1) - ]), - new(32102, 48, - [ - new("crafting", ["true", "false"], 24), - new("orientation", ["down_east", "down_north", "down_south", "down_west", "up_east", "up_north", "up_south", "up_west", "west_up", "east_up", "north_up", "south_up"], 2), - new("triggered", ["true", "false"], 1) - ]), - new(32150, 12, - [ - new("ominous", ["true", "false"], 6), - new("trial_spawner_state", ["inactive", "waiting_for_players", "active", "waiting_for_reward_ejection", "ejecting_reward", "cooldown"], 1) - ]), - new(32162, 32, - [ - new("facing", ["north", "south", "west", "east"], 8), - new("ominous", ["true", "false"], 4), - new("vault_state", ["inactive", "active", "unlocking", "ejecting"], 1) - ]), - new(32194, 2, - [ - new("waterlogged", ["true", "false"], 1) - ]), - new(32197, 162, - [ - new("bottom", ["true", "false"], 81), - new("east", ["none", "low", "tall"], 27), - new("north", ["none", "low", "tall"], 9), - new("south", ["none", "low", "tall"], 3), - new("west", ["none", "low", "tall"], 1) - ]), - new(32359, 2, - [ - new("tip", ["true", "false"], 1) - ]), - ]; - // - - protected override Dictionary GetDict() - { - return materials; - } - - protected override BlockStateDefinition[] GetStateDefinitions() - { - return stateDefinitions; - } - } -} diff --git a/MinecraftClient/Mapping/Chunk.cs b/MinecraftClient/Mapping/Chunk.cs deleted file mode 100644 index 4041343b23..0000000000 --- a/MinecraftClient/Mapping/Chunk.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System; -using System.Runtime.CompilerServices; - -namespace MinecraftClient.Mapping -{ - /// - /// Represent a chunk of terrain in a Minecraft world - /// - public class Chunk - { - public const int SizeX = 16; - public const int SizeY = 16; - public const int SizeZ = 16; - - /// - /// Blocks contained into the chunk - /// - private readonly Block[] blocks = new Block[SizeY * SizeZ * SizeX]; - - - /// - /// Read, or set the specified block - /// - /// Block X - /// Block Y - /// Block Z - /// chunk at the given location - public Block this[int blockX, int blockY, int blockZ] - { - get - { - if (blockX < 0 || blockX >= SizeX) - throw new ArgumentOutOfRangeException(nameof(blockX), "Must be between 0 and " + (SizeX - 1) + " (inclusive)"); - if (blockY < 0 || blockY >= SizeY) - throw new ArgumentOutOfRangeException(nameof(blockY), "Must be between 0 and " + (SizeY - 1) + " (inclusive)"); - if (blockZ < 0 || blockZ >= SizeZ) - throw new ArgumentOutOfRangeException(nameof(blockZ), "Must be between 0 and " + (SizeZ - 1) + " (inclusive)"); - - return blocks[(blockY << 8) | (blockZ << 4) | blockX]; - } - set - { - if (blockX < 0 || blockX >= SizeX) - throw new ArgumentOutOfRangeException(nameof(blockX), "Must be between 0 and " + (SizeX - 1) + " (inclusive)"); - if (blockY < 0 || blockY >= SizeY) - throw new ArgumentOutOfRangeException(nameof(blockY), "Must be between 0 and " + (SizeY - 1) + " (inclusive)"); - if (blockZ < 0 || blockZ >= SizeZ) - throw new ArgumentOutOfRangeException(nameof(blockZ), "Must be between 0 and " + (SizeZ - 1) + " (inclusive)"); - - blocks[(blockY << 8) | (blockZ << 4) | blockX] = value; - } - } - - /// - /// Used when parsing chunks - /// - /// Block X - /// Block Y - /// Block Z - /// Block - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public void SetWithoutCheck(int blockX, int blockY, int blockZ, Block block) - { - blocks[(blockY << 8) | (blockZ << 4) | blockX] = block; - } - - /// - /// Get block at the specified location - /// - /// Location, a modulo will be applied - /// The block - public Block GetBlock(Location location) - { - return this[location.ChunkBlockX, location.ChunkBlockY, location.ChunkBlockZ]; - } - } -} diff --git a/MinecraftClient/Mapping/ChunkColumn.cs b/MinecraftClient/Mapping/ChunkColumn.cs deleted file mode 100644 index 38f37c632d..0000000000 --- a/MinecraftClient/Mapping/ChunkColumn.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; - -namespace MinecraftClient.Mapping -{ - /// - /// Represent a column of chunks of terrain in a Minecraft world - /// - public class ChunkColumn - { - public int ColumnSize; - - public bool FullyLoaded = false; - - /// - /// Blocks contained into the chunk - /// - private readonly Chunk?[] chunks; - - /// - /// Create a new ChunkColumn - /// - public ChunkColumn(int size = 16) - { - ColumnSize = size; - chunks = new Chunk?[size]; - } - - /// - /// Get or set the specified chunk column - /// - /// ChunkColumn X - /// ChunkColumn Y - /// chunk at the given location - public Chunk? this[int chunkY] - { - get - { - return chunks[chunkY]; - } - set - { - chunks[chunkY] = value; - } - } - - /// - /// Get chunk at the specified location - /// - /// Location, a modulo will be applied - /// The chunk, or null if not loaded - public Chunk? GetChunk(Location location) - { - try - { - return this[location.ChunkY]; - } - catch (IndexOutOfRangeException) - { - return null; - } - } - } -} diff --git a/MinecraftClient/Mapping/CombatEventType.cs b/MinecraftClient/Mapping/CombatEventType.cs deleted file mode 100644 index cdafa893fa..0000000000 --- a/MinecraftClient/Mapping/CombatEventType.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace MinecraftClient.Mapping -{ - public enum CombatEventType - { - EnterCombat = 0, - EndCombat, - EntityDead - } -} diff --git a/MinecraftClient/Mapping/CommandBlockFlags.cs b/MinecraftClient/Mapping/CommandBlockFlags.cs deleted file mode 100644 index 74d920119a..0000000000 --- a/MinecraftClient/Mapping/CommandBlockFlags.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace MinecraftClient.Mapping -{ - /// - /// Represents a unit movement in the world - /// - /// - public enum CommandBlockFlags - { - TrackOutput = 0x01, - IsConditional = 0x02, - Automatic = 0x04, - } -} diff --git a/MinecraftClient/Mapping/CommandBlockMode.cs b/MinecraftClient/Mapping/CommandBlockMode.cs deleted file mode 100644 index f2f07507f3..0000000000 --- a/MinecraftClient/Mapping/CommandBlockMode.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace MinecraftClient.Mapping -{ - /// - /// Represents a unit movement in the world - /// - /// - public enum CommandBlockMode - { - Sequence = 0, - Auto = 1, - Redstone = 2, - } -} diff --git a/MinecraftClient/Mapping/Dimension.cs b/MinecraftClient/Mapping/Dimension.cs deleted file mode 100644 index f9e8380f40..0000000000 --- a/MinecraftClient/Mapping/Dimension.cs +++ /dev/null @@ -1,192 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace MinecraftClient.Mapping -{ - - /// - /// The dimension type, available after 1.16.2 - /// - public class Dimension - { - /// - /// The name of the dimension type (for example, "minecraft:overworld"). - /// - public readonly string Name; - - /// - /// Whether piglins shake and transform to zombified piglins. - /// - public readonly bool piglinSafe = false; - - /// - /// Possibly the light level(s) at which monsters can spawn. - /// - public readonly int monsterSpawnMinLightLevel = 0; - public readonly int monsterSpawnMaxLightLevel = 7; - public readonly int monsterSpawnBlockLightLimit = 0; - - /// - /// When false, compasses spin randomly. When true, nether portals can spawn zombified piglins. - /// - public readonly bool natural = true; - - /// - /// How much light the dimension has. - /// - public readonly float ambientLight = 0.0f; - - - /// - /// If set, the time of the day is the specified value. - /// Value: -1: not set - /// Value: [0, 24000]: time of the day - /// - public readonly long fixedTime = -1; - - /// - /// A resource location defining what block tag to use for infiniburn. - /// Value above 1.18.2: "#" or minecraft resource "#minecraft:...". - /// Value below 1.18.1: "" or minecraft resource "minecraft:...". - /// - public readonly string infiniburn = "#minecraft:infiniburn_overworld"; - - /// - /// Whether players can charge and use respawn anchors. - /// - public readonly bool respawnAnchorWorks = false; - - /// - /// Whether the dimension has skylight access or not. - /// - public readonly bool hasSkylight = true; - - /// - /// Whether players can use a bed to sleep. - /// - public readonly bool bedWorks = true; - - /// - /// unknown - /// Values: "minecraft:overworld", "minecraft:the_nether", "minecraft:the_end" or something else. - /// - public readonly string effects = "minecraft:overworld"; - - /// - /// Whether players with the Bad Omen effect can cause a raid. - /// - public readonly bool hasRaids = true; - - /// - /// The minimum Y level. - /// - public readonly int minY = 0; - - /// - /// The maximum Y level. - /// - public readonly int maxY = 256; - - /// - /// The maximum height. - /// - public readonly int height = 256; - - /// - /// The maximum height to which chorus fruits and nether portals can bring players within this dimension. - /// - public readonly int logicalHeight = 256; - - /// - /// The multiplier applied to coordinates when traveling to the dimension. - /// - public readonly double coordinateScale = 1.0; - - /// - /// Whether the dimensions behaves like the nether (water evaporates and sponges dry) or not. Also causes lava to spread thinner. - /// - public readonly bool ultrawarm = false; - - /// - /// Whether the dimension has a bedrock ceiling or not. When true, causes lava to spread faster. - /// - public readonly bool hasCeiling = false; - - /// - /// Default value used in version below 1.17 - /// - public Dimension() - { - Name = "minecraft:overworld"; - } - - /// - /// Create from the "Dimension Codec" NBT Tag Compound - /// - /// Dimension name - /// The dimension type (NBT Tag Compound) - public Dimension(string name, Dictionary nbt) - { - Name = name ?? throw new ArgumentNullException(nameof(name)); - - if (nbt is null) - throw new ArgumentNullException(nameof(nbt)); - - if (nbt.ContainsKey("piglin_safe")) - piglinSafe = Convert.ToBoolean(nbt["piglin_safe"]); - if (nbt.ContainsKey("monster_spawn_light_level")) - { - try - { - var monsterSpawnLightLevelObj = nbt["monster_spawn_light_level"]; - try - { - monsterSpawnMinLightLevel = monsterSpawnMaxLightLevel = Convert.ToInt32(monsterSpawnLightLevelObj); - } - catch (Exception) - { - var inclusive = (Dictionary)(((Dictionary)monsterSpawnLightLevelObj)["value"]); - monsterSpawnMinLightLevel = Convert.ToInt32(inclusive["min_inclusive"]); - monsterSpawnMaxLightLevel = Convert.ToInt32(inclusive["max_inclusive"]); - } - - } - catch (KeyNotFoundException) { } - } - if (nbt.ContainsKey("monster_spawn_block_light_limit")) - monsterSpawnBlockLightLimit = Convert.ToInt32(nbt["monster_spawn_block_light_limit"]); - if (nbt.ContainsKey("natural")) - natural = Convert.ToBoolean(nbt["natural"]); - if (nbt.ContainsKey("ambient_light")) - ambientLight = (float)Convert.ToDouble(nbt["ambient_light"]); - if (nbt.ContainsKey("fixed_time")) - fixedTime = Convert.ToInt64(nbt["fixed_time"]); - if (nbt.ContainsKey("infiniburn")) - infiniburn = Convert.ToString(nbt["infiniburn"]) ?? string.Empty; - if (nbt.ContainsKey("respawn_anchor_works")) - respawnAnchorWorks = Convert.ToBoolean(nbt["respawn_anchor_works"]); - if (nbt.ContainsKey("has_skylight")) - hasSkylight = Convert.ToBoolean(nbt["has_skylight"]); - if (nbt.ContainsKey("bed_works")) - bedWorks = Convert.ToBoolean(nbt["bed_works"]); - if (nbt.ContainsKey("effects")) - effects = Convert.ToString(nbt["effects"]) ?? string.Empty; - if (nbt.ContainsKey("has_raids")) - hasRaids = Convert.ToBoolean(nbt["has_raids"]); - if (nbt.ContainsKey("min_y")) - minY = Convert.ToInt32(nbt["min_y"]); - if (nbt.ContainsKey("height")) - height = Convert.ToInt32(nbt["height"]); - if (nbt.ContainsKey("min_y") && nbt.ContainsKey("height")) - maxY = minY + height; - if (nbt.ContainsKey("logical_height") && nbt["logical_height"].GetType() != typeof(byte)) - logicalHeight = Convert.ToInt32(nbt["logical_height"]); - if (nbt.ContainsKey("coordinate_scale")) - coordinateScale = Convert.ToDouble(nbt["coordinate_scale"]); - if (nbt.ContainsKey("ultrawarm")) - ultrawarm = Convert.ToBoolean(nbt["ultrawarm"]); - if (nbt.ContainsKey("has_ceiling")) - hasCeiling = Convert.ToBoolean(nbt["has_ceiling"]); - } - } -} diff --git a/MinecraftClient/Mapping/Direction.cs b/MinecraftClient/Mapping/Direction.cs deleted file mode 100644 index 97a2e1203d..0000000000 --- a/MinecraftClient/Mapping/Direction.cs +++ /dev/null @@ -1,22 +0,0 @@ -namespace MinecraftClient.Mapping -{ - /// - /// Represents a unit movement in the world - /// - /// - public enum Direction - { - South = 0, - West = 1, - North = 2, - East = 3, - - Up = 4, - Down = 5, - - NorthEast = 6, - SouthEast = 7, - SouthWest = 8, - NorthWest = 9, - } -} diff --git a/MinecraftClient/Mapping/DirectionExtensions.cs b/MinecraftClient/Mapping/DirectionExtensions.cs deleted file mode 100644 index 4f965cde9c..0000000000 --- a/MinecraftClient/Mapping/DirectionExtensions.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; - -namespace MinecraftClient.Mapping; - -public static class DirectionExtensions -{ - public static Direction GetOpposite(this Direction direction) => direction switch - { - Direction.SouthEast => Direction.NorthEast, - Direction.SouthWest => Direction.NorthWest, - Direction.NorthEast => Direction.SouthEast, - Direction.NorthWest => Direction.SouthWest, - Direction.West => Direction.East, - Direction.East => Direction.West, - Direction.North => Direction.South, - Direction.South => Direction.North, - Direction.Down => Direction.Up, - Direction.Up => Direction.Down, - _ => Direction.Up, - }; - - public static Direction[] HORIZONTAL = - [ - Direction.South, - Direction.West, - Direction.North, - Direction.East, - ]; - - public static Direction FromRotation(double rotation) - { - double floor = Math.Floor((rotation / 90.0) + 0.5); - int value = (int)floor & 3; - - return FromHorizontal(value); - } - - public static Direction FromHorizontal(int value) - { - return HORIZONTAL[Math.Abs(value % HORIZONTAL.Length)]; - } -} diff --git a/MinecraftClient/Mapping/Entity.cs b/MinecraftClient/Mapping/Entity.cs deleted file mode 100644 index 33b250f095..0000000000 --- a/MinecraftClient/Mapping/Entity.cs +++ /dev/null @@ -1,179 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Mapping -{ - /// - /// Represents an entity evolving into a Minecraft world - /// - public class Entity - { - /// - /// ID of the entity on the Minecraft server - /// - public int ID; - - /// - /// UUID of the entity if it is a player. - /// - public Guid UUID; - - /// - /// Nickname of the entity if it is a player. - /// - public string? Name; - - /// - /// CustomName of the entity. - /// - public string? CustomNameJson; - - /// - /// IsCustomNameVisible of the entity. - /// - public bool IsCustomNameVisible; - - /// - /// CustomName of the entity. - /// - public string? CustomName; - - /// - /// Latency of the entity if it is a player. - /// - public int Latency; - - /// - /// Entity type - /// - public EntityType Type; - - /// - /// Entity location in the Minecraft world - /// - public Location Location; - - /// - /// Entity head yaw - /// - /// Untested - public float Yaw = 0; - - /// - /// Entity head pitch - /// - /// Untested - public float Pitch = 0; - - /// - /// Used in Item Frame, Falling Block and Fishing Float. - /// See https://wiki.vg/Object_Data for details. - /// - /// Untested - public int ObjectData = -1; - - /// - /// Health of the entity - /// - public float Health; - - /// - /// Item of the entity if ItemFrame or Item - /// - public Item Item; - - /// - /// Entity pose in the Minecraft world - /// - public EntityPose Pose; - - /// - /// Entity metadata - /// - public Dictionary? Metadata; - - /// - /// Entity equipment - /// - public Dictionary Equipment; - - /// - /// Active status effects on this entity - /// - public Dictionary ActiveEffects { get; private set; } - - /// - /// Create a new entity based on Entity ID, Entity Type and location - /// - /// Entity ID - /// Entity Type Enum - /// Entity location - public Entity(int ID, EntityType type, Location location) - { - this.ID = ID; - Type = type; - Location = location; - Health = 1.0f; - Equipment = new Dictionary(); - ActiveEffects = new Dictionary(); - Item = new Item(ItemType.Air, 0, null); - } - - /// - /// Create a new entity based on Entity ID, Entity Type and location - /// - /// Entity ID - /// Entity Type Enum - /// Entity location - public Entity(int ID, EntityType type, Location location, byte yaw, byte pitch, int objectData) - { - this.ID = ID; - Type = type; - Location = location; - Health = 1.0f; - Equipment = new Dictionary(); - ActiveEffects = new Dictionary(); - Item = new Item(ItemType.Air, 0, null); - Yaw = yaw * (1F / 256) * 360; // to angle in 360 degree - Pitch = pitch * (1F / 256) * 360; - ObjectData = objectData; - } - - /// - /// Create a new entity based on Entity ID, Entity Type, location, name and UUID - /// - /// Entity ID - /// Entity Type Enum - /// Entity location - /// Player uuid - /// Player name - public Entity(int ID, EntityType type, Location location, Guid uuid, string? name, byte yaw, byte pitch) - { - this.ID = ID; - Type = type; - Location = location; - UUID = uuid; - Name = name; - Health = 1.0f; - Equipment = new Dictionary(); - ActiveEffects = new Dictionary(); - Item = new Item(ItemType.Air, 0, null); - Yaw = yaw * (1F / 256) * 360; // to angle in 360 degree - Pitch = pitch * (1F / 256) * 360; - } - - public static string GetTypeString(EntityType type) - { - string typeStr = type.ToString(); - string? trans = ChatParser.TranslateString("entity.minecraft." + typeStr.ToUnderscoreCase()); - return string.IsNullOrEmpty(trans) ? typeStr : trans; - } - - public string GetTypeString() - { - return GetTypeString(Type); - } - } -} diff --git a/MinecraftClient/Mapping/EntityMetaDataType.cs b/MinecraftClient/Mapping/EntityMetaDataType.cs deleted file mode 100644 index 5d89f185c6..0000000000 --- a/MinecraftClient/Mapping/EntityMetaDataType.cs +++ /dev/null @@ -1,144 +0,0 @@ -namespace MinecraftClient.Mapping; - -public enum EntityMetaDataType -{ - Byte, - Short, // 1.8 only - Int, // 1.8 only - Vector3Int, // 1.8 only (not used by the game) - VarInt, - VarLong, - Float, - String, - Chat, - OptionalChat, - Slot, - Boolean, - /// - /// Float x3 - /// - Rotation, - Position, - OptionalPosition, - /// - /// VarInt - /// - Direction, - OptionalUuid, - /// - /// Boolean + UUID (1.21.5+, replaces OptionalUuid) - /// - OptionalLivingEntityReference, - /// - /// VarInt - /// - BlockId, - /// - /// VarInt (0 for absent) - /// - OptionalBlockId, - Nbt, - Particle, - /// - /// List of Particle (1.20.6+) - /// - Particles, - /// - /// VarInt x3 - /// - VillagerData, - OptionalVarInt, - /// - /// VarInt - /// - Pose, - /// - /// VarInt - /// - CatVariant, - /// - /// VarInt (1.21.5+) - /// - CatSoundVariant, - /// - /// VarInt (1.20.6+) - /// - CowVariant, - /// - /// VarInt (1.21.5+) - /// - CowSoundVariant, - /// - /// VarInt (1.20.6+) - /// - WolfVariant, - /// - /// VarInt (1.21.5+) - /// - WolfSoundVariant, - FrogVariant, - /// - /// VarInt (1.21.5+) - /// - PigVariant, - /// - /// VarInt (1.21.5+) - /// - PigSoundVariant, - /// - /// VarInt (1.21.5+) - /// - ChickenVariant, - /// - /// VarInt (1.21.5+) - /// - ChickenSoundVariant, - /// - /// String + Position - /// - GlobalPosition, - /// - /// Boolean + String + Position - /// - OptionalGlobalPosition, - /// - /// VarInt - /// - PaintingVariant, - /// - /// VarInt - /// - SnifferState, - /// - /// VarInt (1.20.6+) - /// - ArmadilloState, - /// - /// VarInt (1.21.9+) - /// - CopperGolemState, - /// - /// VarInt (1.21.9+) - /// - WeatheringCopperState, - /// - /// Float x3 - /// - Vector3, - /// - /// Float x4 - /// - Quaternion, - /// - /// Either<GameProfile, Partial> + PlayerSkin.Patch (1.21.9+) - /// - ResolvableProfile, - /// - /// VarInt (1.21.11+, holder registry ID) - /// - ZombieNautilusVariant, - /// - /// VarInt (1.21.11+, 0=LEFT, 1=RIGHT) - /// - HumanoidArm -} \ No newline at end of file diff --git a/MinecraftClient/Mapping/EntityMetadataPalette.cs b/MinecraftClient/Mapping/EntityMetadataPalette.cs deleted file mode 100644 index 85f6c1b4ba..0000000000 --- a/MinecraftClient/Mapping/EntityMetadataPalette.cs +++ /dev/null @@ -1,34 +0,0 @@ -using MinecraftClient.Mapping.EntityMetadataPalettes; -using MinecraftClient.Protocol.Handlers; -using System; -using System.Collections.Generic; - -namespace MinecraftClient.Mapping; - -public abstract class EntityMetadataPalette -{ - public abstract Dictionary GetEntityMetadataMappingsList(); - - public EntityMetaDataType GetDataType(int typeId) - { - return GetEntityMetadataMappingsList()[typeId]; - } - - public static EntityMetadataPalette GetPalette(int protocolVersion) - { - return protocolVersion switch - { - <= Protocol18Handler.MC_1_8_Version => new EntityMetadataPalette18(), // 1.8 - <= Protocol18Handler.MC_1_12_2_Version => new EntityMetadataPalette1122(), // 1.9 - 1.12.2 - <= Protocol18Handler.MC_1_19_2_Version => new EntityMetadataPalette1191(), // 1.13 - 1.19.2 - <= Protocol18Handler.MC_1_19_3_Version => new EntityMetadataPalette1193(), // 1.19.3 - < Protocol18Handler.MC_1_20_6_Version => new EntityMetadataPalette1194(), // 1.19.4 - 1.20.4 - <= Protocol18Handler.MC_1_21_4_Version => new EntityMetadataPalette1206(), // 1.20.6 - 1.21.4 - <= Protocol18Handler.MC_1_21_7_Version => new EntityMetadataPalette1215(), // 1.21.5 - 1.21.8 - <= Protocol18Handler.MC_1_21_9_Version => new EntityMetadataPalette1219(), // 1.21.9 - 1.21.10 - <= Protocol18Handler.MC_1_21_11_Version => new EntityMetadataPalette12111(), // 1.21.11 - <= Protocol18Handler.MC_26_2_Version => new EntityMetadataPalette261(), // 26.1 - 26.2 (serializers unchanged in 26.2) - _ => throw new NotImplementedException() - }; - } -} \ No newline at end of file diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1122.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1122.cs deleted file mode 100644 index 1f9e08cf2c..0000000000 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1122.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityMetadataPalettes; - -public class EntityMetadataPalette1122 : EntityMetadataPalette -{ - // 1.9 - 1.12.2 - private readonly Dictionary entityMetadataMappings = new() - { - { 0, EntityMetaDataType.Byte }, - { 1, EntityMetaDataType.VarInt }, - { 2, EntityMetaDataType.Float }, - { 3, EntityMetaDataType.String }, - { 4, EntityMetaDataType.Chat }, - { 5, EntityMetaDataType.Slot }, - { 6, EntityMetaDataType.Boolean }, - { 7, EntityMetaDataType.Rotation }, - { 8, EntityMetaDataType.Position }, - { 9, EntityMetaDataType.OptionalPosition }, - { 10, EntityMetaDataType.Direction }, - { 11, EntityMetaDataType.OptionalUuid }, - { 12, EntityMetaDataType.OptionalBlockId }, - { 13, EntityMetaDataType.Nbt }, - }; - - public override Dictionary GetEntityMetadataMappingsList() - { - return entityMetadataMappings; - } -} \ No newline at end of file diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1191.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1191.cs deleted file mode 100644 index ef7f411781..0000000000 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1191.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityMetadataPalettes; - -/// -/// 1.13 - 1.19.2 -/// -public class EntityMetadataPalette1191 : EntityMetadataPalette -{ - private readonly Dictionary entityMetadataMappings = new() - { - { 0, EntityMetaDataType.Byte }, - { 1, EntityMetaDataType.VarInt }, - { 2, EntityMetaDataType.Float }, - { 3, EntityMetaDataType.String }, - { 4, EntityMetaDataType.Chat }, - { 5, EntityMetaDataType.OptionalChat }, - { 6, EntityMetaDataType.Slot }, - { 7, EntityMetaDataType.Boolean }, - { 8, EntityMetaDataType.Rotation }, - { 9, EntityMetaDataType.Position }, - { 10, EntityMetaDataType.OptionalPosition }, - { 11, EntityMetaDataType.Direction }, - { 12, EntityMetaDataType.OptionalUuid }, - { 13, EntityMetaDataType.OptionalBlockId }, - { 14, EntityMetaDataType.Nbt }, - { 15, EntityMetaDataType.Particle }, - { 16, EntityMetaDataType.VillagerData }, - { 17, EntityMetaDataType.OptionalVarInt }, - { 18, EntityMetaDataType.Pose }, - { 19, EntityMetaDataType.CatVariant }, - { 20, EntityMetaDataType.FrogVariant }, - { 21, EntityMetaDataType.OptionalGlobalPosition }, - { 22, EntityMetaDataType.PaintingVariant } - }; - - public override Dictionary GetEntityMetadataMappingsList() - { - return entityMetadataMappings; - } -} \ No newline at end of file diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1193.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1193.cs deleted file mode 100644 index 664b2cfaaf..0000000000 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1193.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityMetadataPalettes; - -/// -/// For 1.19.3 -/// -public class EntityMetadataPalette1193 : EntityMetadataPalette -{ - private readonly Dictionary entityMetadataMappings = new() - { - { 0, EntityMetaDataType.Byte }, - { 1, EntityMetaDataType.VarInt }, - { 2, EntityMetaDataType.VarLong }, - { 3, EntityMetaDataType.Float }, - { 4, EntityMetaDataType.String }, - { 5, EntityMetaDataType.Chat }, - { 6, EntityMetaDataType.OptionalChat }, - { 7, EntityMetaDataType.Slot }, - { 8, EntityMetaDataType.Boolean }, - { 9, EntityMetaDataType.Rotation }, - { 10, EntityMetaDataType.Position }, - { 11, EntityMetaDataType.OptionalPosition }, - { 12, EntityMetaDataType.Direction }, - { 13, EntityMetaDataType.OptionalUuid }, - { 14, EntityMetaDataType.OptionalBlockId }, - { 15, EntityMetaDataType.Nbt }, - { 16, EntityMetaDataType.Particle }, - { 17, EntityMetaDataType.VillagerData }, - { 18, EntityMetaDataType.OptionalVarInt }, - { 19, EntityMetaDataType.Pose }, - { 20, EntityMetaDataType.CatVariant }, - { 21, EntityMetaDataType.FrogVariant }, - { 22, EntityMetaDataType.OptionalGlobalPosition }, - { 23, EntityMetaDataType.PaintingVariant } - }; - - public override Dictionary GetEntityMetadataMappingsList() - { - return entityMetadataMappings; - } -} \ No newline at end of file diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1194.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1194.cs deleted file mode 100644 index 2b180afcc8..0000000000 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1194.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityMetadataPalettes; - -/// -/// For 1.19.4 -/// -public class EntityMetadataPalette1194 : EntityMetadataPalette -{ - private readonly Dictionary entityMetadataMappings = new() - { - { 0, EntityMetaDataType.Byte }, - { 1, EntityMetaDataType.VarInt }, - { 2, EntityMetaDataType.VarLong }, - { 3, EntityMetaDataType.Float }, - { 4, EntityMetaDataType.String }, - { 5, EntityMetaDataType.Chat }, - { 6, EntityMetaDataType.OptionalChat }, - { 7, EntityMetaDataType.Slot }, - { 8, EntityMetaDataType.Boolean }, - { 9, EntityMetaDataType.Rotation }, - { 10, EntityMetaDataType.Position }, - { 11, EntityMetaDataType.OptionalPosition }, - { 12, EntityMetaDataType.Direction }, - { 13, EntityMetaDataType.OptionalUuid }, - { 14, EntityMetaDataType.BlockId }, - { 15, EntityMetaDataType.OptionalBlockId }, - { 16, EntityMetaDataType.Nbt }, - { 17, EntityMetaDataType.Particle }, - { 18, EntityMetaDataType.VillagerData }, - { 19, EntityMetaDataType.OptionalVarInt }, - { 20, EntityMetaDataType.Pose }, - { 21, EntityMetaDataType.CatVariant }, - { 22, EntityMetaDataType.FrogVariant }, - { 23, EntityMetaDataType.OptionalGlobalPosition }, - { 24, EntityMetaDataType.PaintingVariant }, - { 25, EntityMetaDataType.SnifferState }, - { 26, EntityMetaDataType.Vector3 }, - { 27, EntityMetaDataType.Quaternion }, - }; - - public override Dictionary GetEntityMetadataMappingsList() - { - return entityMetadataMappings; - } -} \ No newline at end of file diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1206.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1206.cs deleted file mode 100644 index 67b61cc3cc..0000000000 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1206.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityMetadataPalettes; - -/// -/// For 1.20.6+ -/// Added PARTICLES (id 18), WOLF_VARIANT (id 23), ARMADILLO_STATE (id 28) -/// compared to 1.19.4 palette. -/// -public class EntityMetadataPalette1206 : EntityMetadataPalette -{ - private readonly Dictionary entityMetadataMappings = new() - { - { 0, EntityMetaDataType.Byte }, - { 1, EntityMetaDataType.VarInt }, - { 2, EntityMetaDataType.VarLong }, - { 3, EntityMetaDataType.Float }, - { 4, EntityMetaDataType.String }, - { 5, EntityMetaDataType.Chat }, - { 6, EntityMetaDataType.OptionalChat }, - { 7, EntityMetaDataType.Slot }, - { 8, EntityMetaDataType.Boolean }, - { 9, EntityMetaDataType.Rotation }, - { 10, EntityMetaDataType.Position }, - { 11, EntityMetaDataType.OptionalPosition }, - { 12, EntityMetaDataType.Direction }, - { 13, EntityMetaDataType.OptionalUuid }, - { 14, EntityMetaDataType.BlockId }, - { 15, EntityMetaDataType.OptionalBlockId }, - { 16, EntityMetaDataType.Nbt }, - { 17, EntityMetaDataType.Particle }, - { 18, EntityMetaDataType.Particles }, - { 19, EntityMetaDataType.VillagerData }, - { 20, EntityMetaDataType.OptionalVarInt }, - { 21, EntityMetaDataType.Pose }, - { 22, EntityMetaDataType.CatVariant }, - { 23, EntityMetaDataType.WolfVariant }, - { 24, EntityMetaDataType.FrogVariant }, - { 25, EntityMetaDataType.OptionalGlobalPosition }, - { 26, EntityMetaDataType.PaintingVariant }, - { 27, EntityMetaDataType.SnifferState }, - { 28, EntityMetaDataType.ArmadilloState }, - { 29, EntityMetaDataType.Vector3 }, - { 30, EntityMetaDataType.Quaternion }, - }; - - public override Dictionary GetEntityMetadataMappingsList() - { - return entityMetadataMappings; - } -} diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette12111.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette12111.cs deleted file mode 100644 index cff64189f6..0000000000 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette12111.cs +++ /dev/null @@ -1,54 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityMetadataPalettes; - -public class EntityMetadataPalette12111 : EntityMetadataPalette -{ - private readonly Dictionary entityMetadataMappings = new() - { - { 0, EntityMetaDataType.Byte }, - { 1, EntityMetaDataType.VarInt }, - { 2, EntityMetaDataType.VarLong }, - { 3, EntityMetaDataType.Float }, - { 4, EntityMetaDataType.String }, - { 5, EntityMetaDataType.Chat }, - { 6, EntityMetaDataType.OptionalChat }, - { 7, EntityMetaDataType.Slot }, - { 8, EntityMetaDataType.Boolean }, - { 9, EntityMetaDataType.Rotation }, - { 10, EntityMetaDataType.Position }, - { 11, EntityMetaDataType.OptionalPosition }, - { 12, EntityMetaDataType.Direction }, - { 13, EntityMetaDataType.OptionalLivingEntityReference }, - { 14, EntityMetaDataType.BlockId }, - { 15, EntityMetaDataType.OptionalBlockId }, - { 16, EntityMetaDataType.Particle }, - { 17, EntityMetaDataType.Particles }, - { 18, EntityMetaDataType.VillagerData }, - { 19, EntityMetaDataType.OptionalVarInt }, - { 20, EntityMetaDataType.Pose }, - { 21, EntityMetaDataType.CatVariant }, - { 22, EntityMetaDataType.CowVariant }, - { 23, EntityMetaDataType.WolfVariant }, - { 24, EntityMetaDataType.WolfSoundVariant }, - { 25, EntityMetaDataType.FrogVariant }, - { 26, EntityMetaDataType.PigVariant }, - { 27, EntityMetaDataType.ChickenVariant }, - { 28, EntityMetaDataType.ZombieNautilusVariant }, - { 29, EntityMetaDataType.OptionalGlobalPosition }, - { 30, EntityMetaDataType.PaintingVariant }, - { 31, EntityMetaDataType.SnifferState }, - { 32, EntityMetaDataType.ArmadilloState }, - { 33, EntityMetaDataType.CopperGolemState }, - { 34, EntityMetaDataType.WeatheringCopperState }, - { 35, EntityMetaDataType.Vector3 }, - { 36, EntityMetaDataType.Quaternion }, - { 37, EntityMetaDataType.ResolvableProfile }, - { 38, EntityMetaDataType.HumanoidArm }, - }; - - public override Dictionary GetEntityMetadataMappingsList() - { - return entityMetadataMappings; - } -} diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1215.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1215.cs deleted file mode 100644 index 71653f035c..0000000000 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1215.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityMetadataPalettes; - -public class EntityMetadataPalette1215 : EntityMetadataPalette -{ - private readonly Dictionary entityMetadataMappings = new() - { - { 0, EntityMetaDataType.Byte }, - { 1, EntityMetaDataType.VarInt }, - { 2, EntityMetaDataType.VarLong }, - { 3, EntityMetaDataType.Float }, - { 4, EntityMetaDataType.String }, - { 5, EntityMetaDataType.Chat }, - { 6, EntityMetaDataType.OptionalChat }, - { 7, EntityMetaDataType.Slot }, - { 8, EntityMetaDataType.Boolean }, - { 9, EntityMetaDataType.Rotation }, - { 10, EntityMetaDataType.Position }, - { 11, EntityMetaDataType.OptionalPosition }, - { 12, EntityMetaDataType.Direction }, - { 13, EntityMetaDataType.OptionalLivingEntityReference }, - { 14, EntityMetaDataType.BlockId }, - { 15, EntityMetaDataType.OptionalBlockId }, - { 16, EntityMetaDataType.Nbt }, - { 17, EntityMetaDataType.Particle }, - { 18, EntityMetaDataType.Particles }, - { 19, EntityMetaDataType.VillagerData }, - { 20, EntityMetaDataType.OptionalVarInt }, - { 21, EntityMetaDataType.Pose }, - { 22, EntityMetaDataType.CatVariant }, - { 23, EntityMetaDataType.CowVariant }, - { 24, EntityMetaDataType.WolfVariant }, - { 25, EntityMetaDataType.WolfSoundVariant }, - { 26, EntityMetaDataType.FrogVariant }, - { 27, EntityMetaDataType.PigVariant }, - { 28, EntityMetaDataType.ChickenVariant }, - { 29, EntityMetaDataType.OptionalGlobalPosition }, - { 30, EntityMetaDataType.PaintingVariant }, - { 31, EntityMetaDataType.SnifferState }, - { 32, EntityMetaDataType.ArmadilloState }, - { 33, EntityMetaDataType.Vector3 }, - { 34, EntityMetaDataType.Quaternion }, - }; - - public override Dictionary GetEntityMetadataMappingsList() - { - return entityMetadataMappings; - } -} diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1219.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1219.cs deleted file mode 100644 index 2fa5d35e10..0000000000 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette1219.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityMetadataPalettes; - -public class EntityMetadataPalette1219 : EntityMetadataPalette -{ - private readonly Dictionary entityMetadataMappings = new() - { - { 0, EntityMetaDataType.Byte }, - { 1, EntityMetaDataType.VarInt }, - { 2, EntityMetaDataType.VarLong }, - { 3, EntityMetaDataType.Float }, - { 4, EntityMetaDataType.String }, - { 5, EntityMetaDataType.Chat }, - { 6, EntityMetaDataType.OptionalChat }, - { 7, EntityMetaDataType.Slot }, - { 8, EntityMetaDataType.Boolean }, - { 9, EntityMetaDataType.Rotation }, - { 10, EntityMetaDataType.Position }, - { 11, EntityMetaDataType.OptionalPosition }, - { 12, EntityMetaDataType.Direction }, - { 13, EntityMetaDataType.OptionalLivingEntityReference }, - { 14, EntityMetaDataType.BlockId }, - { 15, EntityMetaDataType.OptionalBlockId }, - { 16, EntityMetaDataType.Particle }, - { 17, EntityMetaDataType.Particles }, - { 18, EntityMetaDataType.VillagerData }, - { 19, EntityMetaDataType.OptionalVarInt }, - { 20, EntityMetaDataType.Pose }, - { 21, EntityMetaDataType.CatVariant }, - { 22, EntityMetaDataType.CowVariant }, - { 23, EntityMetaDataType.WolfVariant }, - { 24, EntityMetaDataType.WolfSoundVariant }, - { 25, EntityMetaDataType.FrogVariant }, - { 26, EntityMetaDataType.PigVariant }, - { 27, EntityMetaDataType.ChickenVariant }, - { 28, EntityMetaDataType.OptionalGlobalPosition }, - { 29, EntityMetaDataType.PaintingVariant }, - { 30, EntityMetaDataType.SnifferState }, - { 31, EntityMetaDataType.ArmadilloState }, - { 32, EntityMetaDataType.CopperGolemState }, - { 33, EntityMetaDataType.WeatheringCopperState }, - { 34, EntityMetaDataType.Vector3 }, - { 35, EntityMetaDataType.Quaternion }, - { 36, EntityMetaDataType.ResolvableProfile }, - }; - - public override Dictionary GetEntityMetadataMappingsList() - { - return entityMetadataMappings; - } -} diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette18.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette18.cs deleted file mode 100644 index 41da3b2fa6..0000000000 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette18.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityMetadataPalettes; - -public class EntityMetadataPalette18 : EntityMetadataPalette -{ - // 1.8 : https://wiki.vg/index.php?title=Entity_metadata&oldid=6220 - private readonly Dictionary entityMetadataMappings = new() - { - { 0, EntityMetaDataType.Byte }, - { 1, EntityMetaDataType.Short }, - { 2, EntityMetaDataType.Int }, - { 3, EntityMetaDataType.Float }, - { 4, EntityMetaDataType.String }, - { 5, EntityMetaDataType.Slot }, - { 6, EntityMetaDataType.Vector3Int }, - { 7, EntityMetaDataType.Rotation } - }; - - public override Dictionary GetEntityMetadataMappingsList() - { - return entityMetadataMappings; - } -} \ No newline at end of file diff --git a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette261.cs b/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette261.cs deleted file mode 100644 index d604b4644e..0000000000 --- a/MinecraftClient/Mapping/EntityMetadataPalettes/EntityMetadataPalette261.cs +++ /dev/null @@ -1,58 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityMetadataPalettes; - -public class EntityMetadataPalette261 : EntityMetadataPalette -{ - private readonly Dictionary entityMetadataMappings = new() - { - { 0, EntityMetaDataType.Byte }, - { 1, EntityMetaDataType.VarInt }, - { 2, EntityMetaDataType.VarLong }, - { 3, EntityMetaDataType.Float }, - { 4, EntityMetaDataType.String }, - { 5, EntityMetaDataType.Chat }, - { 6, EntityMetaDataType.OptionalChat }, - { 7, EntityMetaDataType.Slot }, - { 8, EntityMetaDataType.Boolean }, - { 9, EntityMetaDataType.Rotation }, - { 10, EntityMetaDataType.Position }, - { 11, EntityMetaDataType.OptionalPosition }, - { 12, EntityMetaDataType.Direction }, - { 13, EntityMetaDataType.OptionalLivingEntityReference }, - { 14, EntityMetaDataType.BlockId }, - { 15, EntityMetaDataType.OptionalBlockId }, - { 16, EntityMetaDataType.Particle }, - { 17, EntityMetaDataType.Particles }, - { 18, EntityMetaDataType.VillagerData }, - { 19, EntityMetaDataType.OptionalVarInt }, - { 20, EntityMetaDataType.Pose }, - { 21, EntityMetaDataType.CatVariant }, - { 22, EntityMetaDataType.CatSoundVariant }, - { 23, EntityMetaDataType.CowVariant }, - { 24, EntityMetaDataType.CowSoundVariant }, - { 25, EntityMetaDataType.WolfVariant }, - { 26, EntityMetaDataType.WolfSoundVariant }, - { 27, EntityMetaDataType.FrogVariant }, - { 28, EntityMetaDataType.PigVariant }, - { 29, EntityMetaDataType.PigSoundVariant }, - { 30, EntityMetaDataType.ChickenVariant }, - { 31, EntityMetaDataType.ChickenSoundVariant }, - { 32, EntityMetaDataType.ZombieNautilusVariant }, - { 33, EntityMetaDataType.OptionalGlobalPosition }, - { 34, EntityMetaDataType.PaintingVariant }, - { 35, EntityMetaDataType.SnifferState }, - { 36, EntityMetaDataType.ArmadilloState }, - { 37, EntityMetaDataType.CopperGolemState }, - { 38, EntityMetaDataType.WeatheringCopperState }, - { 39, EntityMetaDataType.Vector3 }, - { 40, EntityMetaDataType.Quaternion }, - { 41, EntityMetaDataType.ResolvableProfile }, - { 42, EntityMetaDataType.HumanoidArm }, - }; - - public override Dictionary GetEntityMetadataMappingsList() - { - return entityMetadataMappings; - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette.cs deleted file mode 100644 index 0873d5d448..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public abstract class EntityPalette - { - /// - /// Get mapping dictionary. Must be overriden with proper implementation. - /// - /// Palette dictionary - protected abstract Dictionary GetDict(); - - /// - /// Get mapping dictionary for pre-1.14 non-living entities. - /// - /// Palette dictionary for non-living entities (pre-1.14) - protected virtual Dictionary? GetDictNonLiving() - { - return null; - } - - /// - /// Get entity type from type ID - /// - /// Entity type ID - /// EntityType corresponding to the specified ID - public EntityType FromId(int id, bool living) - { - Dictionary entityTypes = GetDict(); - Dictionary? entityTypesNonLiving = GetDictNonLiving(); - - if (entityTypesNonLiving is not null && !living) - { - //Pre-1.14 non-living entities have a different set of IDs (entityTypesNonLiving is not null) - if (entityTypesNonLiving.ContainsKey(id)) - return entityTypesNonLiving[id]; - } - else - { - //1.14+ entities have the same set of IDs regardless of living status - if (entityTypes.ContainsKey(id)) - return entityTypes[id]; - } - - throw new System.IO.InvalidDataException("Unknown Entity ID " + id + ". Is Entity Palette up to date for this Minecraft version?"); - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette11194.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette11194.cs deleted file mode 100644 index c715e07a7b..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette11194.cs +++ /dev/null @@ -1,142 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette1194 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette1194() - { - mappings[0] = EntityType.Allay; - mappings[1] = EntityType.AreaEffectCloud; - mappings[2] = EntityType.ArmorStand; - mappings[3] = EntityType.Arrow; - mappings[4] = EntityType.Axolotl; - mappings[5] = EntityType.Bat; - mappings[6] = EntityType.Bee; - mappings[7] = EntityType.Blaze; - mappings[8] = EntityType.BlockDisplay; - mappings[9] = EntityType.Boat; - mappings[10] = EntityType.Camel; - mappings[11] = EntityType.Cat; - mappings[12] = EntityType.CaveSpider; - mappings[13] = EntityType.ChestBoat; - mappings[14] = EntityType.ChestMinecart; - mappings[15] = EntityType.Chicken; - mappings[16] = EntityType.Cod; - mappings[17] = EntityType.CommandBlockMinecart; - mappings[18] = EntityType.Cow; - mappings[19] = EntityType.Creeper; - mappings[20] = EntityType.Dolphin; - mappings[21] = EntityType.Donkey; - mappings[22] = EntityType.DragonFireball; - mappings[23] = EntityType.Drowned; - mappings[24] = EntityType.Egg; - mappings[25] = EntityType.ElderGuardian; - mappings[26] = EntityType.EndCrystal; - mappings[27] = EntityType.EnderDragon; - mappings[28] = EntityType.EnderPearl; - mappings[29] = EntityType.Enderman; - mappings[30] = EntityType.Endermite; - mappings[31] = EntityType.Evoker; - mappings[32] = EntityType.EvokerFangs; - mappings[33] = EntityType.ExperienceBottle; - mappings[34] = EntityType.ExperienceOrb; - mappings[35] = EntityType.EyeOfEnder; - mappings[36] = EntityType.FallingBlock; - mappings[57] = EntityType.Fireball; - mappings[37] = EntityType.FireworkRocket; - mappings[123] = EntityType.FishingBobber; - mappings[38] = EntityType.Fox; - mappings[39] = EntityType.Frog; - mappings[40] = EntityType.FurnaceMinecart; - mappings[41] = EntityType.Ghast; - mappings[42] = EntityType.Giant; - mappings[43] = EntityType.GlowItemFrame; - mappings[44] = EntityType.GlowSquid; - mappings[45] = EntityType.Goat; - mappings[46] = EntityType.Guardian; - mappings[47] = EntityType.Hoglin; - mappings[48] = EntityType.HopperMinecart; - mappings[49] = EntityType.Horse; - mappings[50] = EntityType.Husk; - mappings[51] = EntityType.Illusioner; - mappings[52] = EntityType.Interaction; - mappings[53] = EntityType.IronGolem; - mappings[54] = EntityType.Item; - mappings[55] = EntityType.ItemDisplay; - mappings[56] = EntityType.ItemFrame; - mappings[58] = EntityType.LeashKnot; - mappings[59] = EntityType.LightningBolt; - mappings[60] = EntityType.Llama; - mappings[61] = EntityType.LlamaSpit; - mappings[62] = EntityType.MagmaCube; - mappings[63] = EntityType.Marker; - mappings[64] = EntityType.Minecart; - mappings[65] = EntityType.Mooshroom; - mappings[66] = EntityType.Mule; - mappings[67] = EntityType.Ocelot; - mappings[68] = EntityType.Painting; - mappings[69] = EntityType.Panda; - mappings[70] = EntityType.Parrot; - mappings[71] = EntityType.Phantom; - mappings[72] = EntityType.Pig; - mappings[73] = EntityType.Piglin; - mappings[74] = EntityType.PiglinBrute; - mappings[75] = EntityType.Pillager; - mappings[122] = EntityType.Player; - mappings[76] = EntityType.PolarBear; - mappings[77] = EntityType.Potion; - mappings[78] = EntityType.Pufferfish; - mappings[79] = EntityType.Rabbit; - mappings[80] = EntityType.Ravager; - mappings[81] = EntityType.Salmon; - mappings[82] = EntityType.Sheep; - mappings[83] = EntityType.Shulker; - mappings[84] = EntityType.ShulkerBullet; - mappings[85] = EntityType.Silverfish; - mappings[86] = EntityType.Skeleton; - mappings[87] = EntityType.SkeletonHorse; - mappings[88] = EntityType.Slime; - mappings[89] = EntityType.SmallFireball; - mappings[90] = EntityType.Sniffer; - mappings[91] = EntityType.SnowGolem; - mappings[92] = EntityType.Snowball; - mappings[93] = EntityType.SpawnerMinecart; - mappings[94] = EntityType.SpectralArrow; - mappings[95] = EntityType.Spider; - mappings[96] = EntityType.Squid; - mappings[97] = EntityType.Stray; - mappings[98] = EntityType.Strider; - mappings[99] = EntityType.Tadpole; - mappings[100] = EntityType.TextDisplay; - mappings[101] = EntityType.Tnt; - mappings[102] = EntityType.TntMinecart; - mappings[103] = EntityType.TraderLlama; - mappings[104] = EntityType.Trident; - mappings[105] = EntityType.TropicalFish; - mappings[106] = EntityType.Turtle; - mappings[107] = EntityType.Vex; - mappings[108] = EntityType.Villager; - mappings[109] = EntityType.Vindicator; - mappings[110] = EntityType.WanderingTrader; - mappings[111] = EntityType.Warden; - mappings[112] = EntityType.Witch; - mappings[113] = EntityType.Wither; - mappings[114] = EntityType.WitherSkeleton; - mappings[115] = EntityType.WitherSkull; - mappings[116] = EntityType.Wolf; - mappings[117] = EntityType.Zoglin; - mappings[118] = EntityType.Zombie; - mappings[119] = EntityType.ZombieHorse; - mappings[120] = EntityType.ZombieVillager; - mappings[121] = EntityType.ZombifiedPiglin; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette112.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette112.cs deleted file mode 100644 index b52595086e..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette112.cs +++ /dev/null @@ -1,141 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - /// - /// Defines mappings of entitiy IDs for 1.12.2 and below - /// Generated by ReinforceZwei using custom script - /// Data source: https://github.com/PrismarineJS/minecraft-data - /// - public class EntityPalette112 : EntityPalette - { - private static Dictionary mappingsObjects = new() - { - // https://wiki.vg/Entity_metadata#Objects - { 1, EntityType.Boat }, - { 2, EntityType.Item }, - { 3, EntityType.AreaEffectCloud }, - { 10, EntityType.Minecart }, - { 50, EntityType.Tnt }, - { 51, EntityType.EndCrystal }, - { 60, EntityType.Arrow }, - { 61, EntityType.Snowball }, - { 62, EntityType.Egg }, - { 63, EntityType.Fireball }, - { 64, EntityType.SmallFireball }, - { 65, EntityType.EnderPearl }, - { 66, EntityType.WitherSkull }, - { 67, EntityType.ShulkerBullet }, - { 68, EntityType.LlamaSpit }, - { 70, EntityType.FallingBlock }, - { 71, EntityType.ItemFrame }, - { 72, EntityType.EyeOfEnder }, - { 73, EntityType.Egg }, - { 75, EntityType.Snowball }, - { 76, EntityType.FireworkRocket }, - { 77, EntityType.LeashKnot }, - { 78, EntityType.ArmorStand }, - { 79, EntityType.EvokerFangs }, - { 90, EntityType.FishingBobber }, - { 91, EntityType.SpectralArrow }, - { 93, EntityType.DragonFireball }, - }; - - private static Dictionary mappingsMobs = new() - { - { 1, EntityType.Item }, - { 2, EntityType.ExperienceOrb }, - { 3, EntityType.AreaEffectCloud }, - { 4, EntityType.ElderGuardian }, - { 5, EntityType.WitherSkeleton }, - { 6, EntityType.Stray }, - { 7, EntityType.Egg }, - { 8, EntityType.LeashKnot }, - { 9, EntityType.Painting }, - { 10, EntityType.Arrow }, - { 11, EntityType.Snowball }, - { 12, EntityType.Fireball }, - { 13, EntityType.SmallFireball }, - { 14, EntityType.EnderPearl }, - { 15, EntityType.EyeOfEnder }, - { 16, EntityType.Potion }, - { 17, EntityType.ExperienceBottle }, - { 18, EntityType.ItemFrame }, - { 19, EntityType.WitherSkull }, - { 20, EntityType.Tnt }, - { 21, EntityType.FallingBlock }, - { 22, EntityType.FireworkRocket }, - { 23, EntityType.Husk }, - { 24, EntityType.SpectralArrow }, - { 25, EntityType.ShulkerBullet }, - { 26, EntityType.DragonFireball }, - { 27, EntityType.ZombieVillager }, - { 28, EntityType.SkeletonHorse }, - { 29, EntityType.ZombieHorse }, - { 30, EntityType.ArmorStand }, - { 31, EntityType.Donkey }, - { 32, EntityType.Mule }, - { 33, EntityType.EvokerFangs }, - { 34, EntityType.Evoker }, - { 35, EntityType.Vex }, - { 36, EntityType.Vindicator }, - { 37, EntityType.Illusioner }, - { 40, EntityType.CommandBlockMinecart }, - { 41, EntityType.Boat }, - { 42, EntityType.Minecart }, - { 43, EntityType.ChestMinecart }, - { 44, EntityType.FurnaceMinecart }, - { 45, EntityType.TntMinecart }, - { 46, EntityType.HopperMinecart }, - { 47, EntityType.SpawnerMinecart }, - { 50, EntityType.Creeper }, - { 51, EntityType.Skeleton }, - { 52, EntityType.Spider }, - { 53, EntityType.Giant }, - { 54, EntityType.Zombie }, - { 55, EntityType.Slime }, - { 56, EntityType.Ghast }, - { 57, EntityType.ZombifiedPiglin }, - { 58, EntityType.Enderman }, - { 59, EntityType.CaveSpider }, - { 60, EntityType.Silverfish }, - { 61, EntityType.Blaze }, - { 62, EntityType.MagmaCube }, - { 63, EntityType.EnderDragon }, - { 64, EntityType.Wither }, - { 65, EntityType.Bat }, - { 66, EntityType.Witch }, - { 67, EntityType.Endermite }, - { 68, EntityType.Guardian }, - { 69, EntityType.Shulker }, - { 90, EntityType.Pig }, - { 91, EntityType.Sheep }, - { 92, EntityType.Cow }, - { 93, EntityType.Chicken }, - { 94, EntityType.Squid }, - { 95, EntityType.Wolf }, - { 96, EntityType.Mooshroom }, - { 97, EntityType.SnowGolem }, - { 98, EntityType.Ocelot }, - { 99, EntityType.IronGolem }, - { 100, EntityType.Horse }, - { 101, EntityType.Rabbit }, - { 102, EntityType.PolarBear }, - { 103, EntityType.Llama }, - { 104, EntityType.LlamaSpit }, - { 105, EntityType.Parrot }, - { 120, EntityType.Villager }, - { 200, EntityType.EndCrystal }, - }; - - protected override Dictionary GetDict() - { - return mappingsMobs; - } - - protected override Dictionary GetDictNonLiving() - { - return mappingsObjects; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette113.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette113.cs deleted file mode 100644 index ab19e391af..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette113.cs +++ /dev/null @@ -1,155 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - /// - /// Defines mappings for Minecraft 1.13. - /// 1.13 and lower has 2 set of ids: One for non-living objects and one for living mobs - /// 1.14+ has only one set of ids for all types of entities - /// - public class EntityPalette113 : EntityPalette - { - private static Dictionary mappingsObjects = new() - { - // https://wiki.vg/Entity_metadata#Objects - { 1, EntityType.Boat }, - { 2, EntityType.Item }, - { 3, EntityType.AreaEffectCloud }, - { 10, EntityType.Minecart }, - { 50, EntityType.Tnt }, - { 51, EntityType.EndCrystal }, - { 60, EntityType.Arrow }, - { 61, EntityType.Snowball }, - { 62, EntityType.Egg }, - { 63, EntityType.Fireball }, - { 64, EntityType.SmallFireball }, - { 65, EntityType.EnderPearl }, - { 66, EntityType.WitherSkull }, - { 67, EntityType.ShulkerBullet }, - { 68, EntityType.LlamaSpit }, - { 70, EntityType.FallingBlock }, - { 71, EntityType.ItemFrame }, - { 72, EntityType.EyeOfEnder }, - { 73, EntityType.Potion }, - { 75, EntityType.ExperienceBottle }, - { 76, EntityType.FireworkRocket }, - { 77, EntityType.LeashKnot }, - { 78, EntityType.ArmorStand }, - { 79, EntityType.EvokerFangs }, - { 90, EntityType.FishingBobber }, - { 91, EntityType.SpectralArrow }, - { 93, EntityType.DragonFireball }, - { 94, EntityType.Trident }, - }; - - private static Dictionary mappingsMobs = new() - { - // https://wiki.vg/Entity_metadata#Mobs - { 0, EntityType.AreaEffectCloud }, - { 1, EntityType.ArmorStand }, - { 2, EntityType.Arrow }, - { 3, EntityType.Bat }, - { 4, EntityType.Blaze }, - { 5, EntityType.Boat }, - { 6, EntityType.CaveSpider }, - { 7, EntityType.Chicken }, - { 8, EntityType.Cod }, - { 9, EntityType.Cow }, - { 10, EntityType.Creeper }, - { 11, EntityType.Donkey }, - { 12, EntityType.Dolphin }, - { 13, EntityType.DragonFireball }, - { 14, EntityType.Drowned }, - { 15, EntityType.ElderGuardian }, - { 16, EntityType.EndCrystal }, - { 17, EntityType.EnderDragon }, - { 18, EntityType.Enderman }, - { 19, EntityType.Endermite }, - { 20, EntityType.EvokerFangs }, - { 21, EntityType.Evoker }, - { 22, EntityType.ExperienceBottle }, - { 23, EntityType.EyeOfEnder }, - { 24, EntityType.FallingBlock }, - { 25, EntityType.FireworkRocket }, - { 26, EntityType.Ghast }, - { 27, EntityType.Giant }, - { 28, EntityType.Guardian }, - { 29, EntityType.Horse }, - { 30, EntityType.Husk }, - { 31, EntityType.Illusioner }, - { 32, EntityType.Item }, - { 33, EntityType.ItemFrame }, - { 34, EntityType.Fireball }, - { 35, EntityType.LeashKnot }, - { 36, EntityType.Llama }, - { 37, EntityType.LlamaSpit }, - { 38, EntityType.MagmaCube }, - { 39, EntityType.Minecart }, - { 40, EntityType.ChestMinecart }, - { 41, EntityType.CommandBlockMinecart }, - { 42, EntityType.FurnaceMinecart }, - { 43, EntityType.HopperMinecart }, - { 44, EntityType.SpawnerMinecart }, - { 45, EntityType.TntMinecart }, - { 46, EntityType.Mule }, - { 47, EntityType.Mooshroom }, - { 48, EntityType.Ocelot }, - { 49, EntityType.Painting }, - { 50, EntityType.Parrot }, - { 51, EntityType.Pig }, - { 52, EntityType.Pufferfish }, - { 53, EntityType.ZombifiedPiglin }, - { 54, EntityType.PolarBear }, - { 55, EntityType.Tnt }, - { 56, EntityType.Rabbit }, - { 57, EntityType.Salmon }, - { 58, EntityType.Sheep }, - { 59, EntityType.Shulker }, - { 60, EntityType.ShulkerBullet }, - { 61, EntityType.Silverfish }, - { 62, EntityType.Skeleton }, - { 63, EntityType.SkeletonHorse }, - { 64, EntityType.Slime }, - { 65, EntityType.SmallFireball }, - { 66, EntityType.SnowGolem }, - { 67, EntityType.Snowball }, - { 68, EntityType.SpectralArrow }, - { 69, EntityType.Spider }, - { 70, EntityType.Squid }, - { 71, EntityType.Stray }, - { 72, EntityType.TropicalFish }, - { 73, EntityType.Turtle }, - { 74, EntityType.Egg }, - { 75, EntityType.EnderPearl }, - { 76, EntityType.ExperienceBottle }, - { 77, EntityType.Potion }, - { 78, EntityType.Vex }, - { 79, EntityType.Villager }, - { 80, EntityType.IronGolem }, - { 81, EntityType.Vindicator }, - { 82, EntityType.Witch }, - { 83, EntityType.Wither }, - { 84, EntityType.WitherSkeleton }, - { 85, EntityType.WitherSkull }, - { 86, EntityType.Wolf }, - { 87, EntityType.Zombie }, - { 88, EntityType.ZombieHorse }, - { 89, EntityType.ZombieVillager }, - { 90, EntityType.Phantom }, - { 91, EntityType.LightningBolt }, - { 92, EntityType.Player }, - { 93, EntityType.FishingBobber }, - { 94, EntityType.Trident }, - }; - - protected override Dictionary GetDict() - { - return mappingsMobs; - } - - protected override Dictionary GetDictNonLiving() - { - return mappingsObjects; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette114.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette114.cs deleted file mode 100644 index 403fcc0080..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette114.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - /// - /// Defines mappings for Minecraft 1.14. - /// Automatically generated using EntityPaletteGenerator.cs - /// - public class EntityPalette114 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette114() - { - mappings[0] = EntityType.AreaEffectCloud; - mappings[1] = EntityType.ArmorStand; - mappings[2] = EntityType.Arrow; - mappings[3] = EntityType.Bat; - mappings[4] = EntityType.Blaze; - mappings[5] = EntityType.Boat; - mappings[6] = EntityType.Cat; - mappings[7] = EntityType.CaveSpider; - mappings[8] = EntityType.Chicken; - mappings[9] = EntityType.Cod; - mappings[10] = EntityType.Cow; - mappings[11] = EntityType.Creeper; - mappings[12] = EntityType.Donkey; - mappings[13] = EntityType.Dolphin; - mappings[14] = EntityType.DragonFireball; - mappings[15] = EntityType.Drowned; - mappings[16] = EntityType.ElderGuardian; - mappings[17] = EntityType.EndCrystal; - mappings[18] = EntityType.EnderDragon; - mappings[19] = EntityType.Enderman; - mappings[20] = EntityType.Endermite; - mappings[21] = EntityType.EvokerFangs; - mappings[22] = EntityType.Evoker; - mappings[23] = EntityType.ExperienceOrb; - mappings[24] = EntityType.EyeOfEnder; - mappings[25] = EntityType.FallingBlock; - mappings[26] = EntityType.FireworkRocket; - mappings[27] = EntityType.Fox; - mappings[28] = EntityType.Ghast; - mappings[29] = EntityType.Giant; - mappings[30] = EntityType.Guardian; - mappings[31] = EntityType.Horse; - mappings[32] = EntityType.Husk; - mappings[33] = EntityType.Illusioner; - mappings[34] = EntityType.Item; - mappings[35] = EntityType.ItemFrame; - mappings[36] = EntityType.Fireball; - mappings[37] = EntityType.LeashKnot; - mappings[38] = EntityType.Llama; - mappings[39] = EntityType.LlamaSpit; - mappings[40] = EntityType.MagmaCube; - mappings[41] = EntityType.Minecart; - mappings[42] = EntityType.ChestMinecart; - mappings[43] = EntityType.CommandBlockMinecart; - mappings[44] = EntityType.FurnaceMinecart; - mappings[45] = EntityType.HopperMinecart; - mappings[46] = EntityType.SpawnerMinecart; - mappings[47] = EntityType.TntMinecart; - mappings[48] = EntityType.Mule; - mappings[49] = EntityType.Mooshroom; - mappings[50] = EntityType.Ocelot; - mappings[51] = EntityType.Painting; - mappings[52] = EntityType.Panda; - mappings[53] = EntityType.Parrot; - mappings[54] = EntityType.Pig; - mappings[55] = EntityType.Pufferfish; - mappings[56] = EntityType.ZombifiedPiglin; - mappings[57] = EntityType.PolarBear; - mappings[58] = EntityType.Tnt; - mappings[59] = EntityType.Rabbit; - mappings[60] = EntityType.Salmon; - mappings[61] = EntityType.Sheep; - mappings[62] = EntityType.Shulker; - mappings[63] = EntityType.ShulkerBullet; - mappings[64] = EntityType.Silverfish; - mappings[65] = EntityType.Skeleton; - mappings[66] = EntityType.SkeletonHorse; - mappings[67] = EntityType.Slime; - mappings[68] = EntityType.SmallFireball; - mappings[69] = EntityType.SnowGolem; - mappings[70] = EntityType.Snowball; - mappings[71] = EntityType.SpectralArrow; - mappings[72] = EntityType.Spider; - mappings[73] = EntityType.Squid; - mappings[74] = EntityType.Stray; - mappings[75] = EntityType.TraderLlama; - mappings[76] = EntityType.TropicalFish; - mappings[77] = EntityType.Turtle; - mappings[78] = EntityType.Egg; - mappings[79] = EntityType.EnderPearl; - mappings[80] = EntityType.ExperienceBottle; - mappings[81] = EntityType.Potion; - mappings[82] = EntityType.Trident; - mappings[83] = EntityType.Vex; - mappings[84] = EntityType.Villager; - mappings[85] = EntityType.IronGolem; - mappings[86] = EntityType.Vindicator; - mappings[87] = EntityType.Pillager; - mappings[88] = EntityType.WanderingTrader; - mappings[89] = EntityType.Witch; - mappings[90] = EntityType.Wither; - mappings[91] = EntityType.WitherSkeleton; - mappings[92] = EntityType.WitherSkull; - mappings[93] = EntityType.Wolf; - mappings[94] = EntityType.Zombie; - mappings[95] = EntityType.ZombieHorse; - mappings[96] = EntityType.ZombieVillager; - mappings[97] = EntityType.Phantom; - mappings[98] = EntityType.Ravager; - mappings[99] = EntityType.LightningBolt; - mappings[100] = EntityType.Player; - mappings[101] = EntityType.FishingBobber; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette115.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette115.cs deleted file mode 100644 index bd4887bef4..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette115.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - /// - /// Defines mappings for Minecraft 1.15. - /// Automatically generated using EntityPaletteGenerator.cs - /// - public class EntityPalette115 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette115() - { - mappings[0] = EntityType.AreaEffectCloud; - mappings[1] = EntityType.ArmorStand; - mappings[2] = EntityType.Arrow; - mappings[3] = EntityType.Bat; - mappings[4] = EntityType.Bee; - mappings[5] = EntityType.Blaze; - mappings[6] = EntityType.Boat; - mappings[7] = EntityType.Cat; - mappings[8] = EntityType.CaveSpider; - mappings[9] = EntityType.Chicken; - mappings[10] = EntityType.Cod; - mappings[11] = EntityType.Cow; - mappings[12] = EntityType.Creeper; - mappings[13] = EntityType.Donkey; - mappings[14] = EntityType.Dolphin; - mappings[15] = EntityType.DragonFireball; - mappings[16] = EntityType.Drowned; - mappings[17] = EntityType.ElderGuardian; - mappings[18] = EntityType.EndCrystal; - mappings[19] = EntityType.EnderDragon; - mappings[20] = EntityType.Enderman; - mappings[21] = EntityType.Endermite; - mappings[22] = EntityType.EvokerFangs; - mappings[23] = EntityType.Evoker; - mappings[24] = EntityType.ExperienceOrb; - mappings[25] = EntityType.EyeOfEnder; - mappings[26] = EntityType.FallingBlock; - mappings[27] = EntityType.FireworkRocket; - mappings[28] = EntityType.Fox; - mappings[29] = EntityType.Ghast; - mappings[30] = EntityType.Giant; - mappings[31] = EntityType.Guardian; - mappings[32] = EntityType.Horse; - mappings[33] = EntityType.Husk; - mappings[34] = EntityType.Illusioner; - mappings[35] = EntityType.Item; - mappings[36] = EntityType.ItemFrame; - mappings[37] = EntityType.Fireball; - mappings[38] = EntityType.LeashKnot; - mappings[39] = EntityType.Llama; - mappings[40] = EntityType.LlamaSpit; - mappings[41] = EntityType.MagmaCube; - mappings[42] = EntityType.Minecart; - mappings[43] = EntityType.ChestMinecart; - mappings[44] = EntityType.CommandBlockMinecart; - mappings[45] = EntityType.FurnaceMinecart; - mappings[46] = EntityType.HopperMinecart; - mappings[47] = EntityType.SpawnerMinecart; - mappings[48] = EntityType.TntMinecart; - mappings[49] = EntityType.Mule; - mappings[50] = EntityType.Mooshroom; - mappings[51] = EntityType.Ocelot; - mappings[52] = EntityType.Painting; - mappings[53] = EntityType.Panda; - mappings[54] = EntityType.Parrot; - mappings[55] = EntityType.Pig; - mappings[56] = EntityType.Pufferfish; - mappings[57] = EntityType.ZombifiedPiglin; - mappings[58] = EntityType.PolarBear; - mappings[59] = EntityType.Tnt; - mappings[60] = EntityType.Rabbit; - mappings[61] = EntityType.Salmon; - mappings[62] = EntityType.Sheep; - mappings[63] = EntityType.Shulker; - mappings[64] = EntityType.ShulkerBullet; - mappings[65] = EntityType.Silverfish; - mappings[66] = EntityType.Skeleton; - mappings[67] = EntityType.SkeletonHorse; - mappings[68] = EntityType.Slime; - mappings[69] = EntityType.SmallFireball; - mappings[70] = EntityType.SnowGolem; - mappings[71] = EntityType.Snowball; - mappings[72] = EntityType.SpectralArrow; - mappings[73] = EntityType.Spider; - mappings[74] = EntityType.Squid; - mappings[75] = EntityType.Stray; - mappings[76] = EntityType.TraderLlama; - mappings[77] = EntityType.TropicalFish; - mappings[78] = EntityType.Turtle; - mappings[79] = EntityType.Egg; - mappings[80] = EntityType.EnderPearl; - mappings[81] = EntityType.ExperienceBottle; - mappings[82] = EntityType.Potion; - mappings[83] = EntityType.Trident; - mappings[84] = EntityType.Vex; - mappings[85] = EntityType.Villager; - mappings[86] = EntityType.IronGolem; - mappings[87] = EntityType.Vindicator; - mappings[88] = EntityType.Pillager; - mappings[89] = EntityType.WanderingTrader; - mappings[90] = EntityType.Witch; - mappings[91] = EntityType.Wither; - mappings[92] = EntityType.WitherSkeleton; - mappings[93] = EntityType.WitherSkull; - mappings[94] = EntityType.Wolf; - mappings[95] = EntityType.Zombie; - mappings[96] = EntityType.ZombieHorse; - mappings[97] = EntityType.ZombieVillager; - mappings[98] = EntityType.Phantom; - mappings[99] = EntityType.Ravager; - mappings[100] = EntityType.LightningBolt; - mappings[101] = EntityType.Player; - mappings[102] = EntityType.FishingBobber; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1161.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette1161.cs deleted file mode 100644 index 4de8bdca56..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1161.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette1161 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette1161() - { - mappings[0] = EntityType.AreaEffectCloud; - mappings[1] = EntityType.ArmorStand; - mappings[2] = EntityType.Arrow; - mappings[3] = EntityType.Bat; - mappings[4] = EntityType.Bee; - mappings[5] = EntityType.Blaze; - mappings[6] = EntityType.Boat; - mappings[7] = EntityType.Cat; - mappings[8] = EntityType.CaveSpider; - mappings[9] = EntityType.Chicken; - mappings[10] = EntityType.Cod; - mappings[11] = EntityType.Cow; - mappings[12] = EntityType.Creeper; - mappings[13] = EntityType.Dolphin; - mappings[14] = EntityType.Donkey; - mappings[15] = EntityType.DragonFireball; - mappings[16] = EntityType.Drowned; - mappings[17] = EntityType.ElderGuardian; - mappings[18] = EntityType.EndCrystal; - mappings[19] = EntityType.EnderDragon; - mappings[20] = EntityType.Enderman; - mappings[21] = EntityType.Endermite; - mappings[22] = EntityType.Evoker; - mappings[23] = EntityType.EvokerFangs; - mappings[24] = EntityType.ExperienceOrb; - mappings[25] = EntityType.EyeOfEnder; - mappings[26] = EntityType.FallingBlock; - mappings[27] = EntityType.FireworkRocket; - mappings[28] = EntityType.Fox; - mappings[29] = EntityType.Ghast; - mappings[30] = EntityType.Giant; - mappings[31] = EntityType.Guardian; - mappings[32] = EntityType.Hoglin; - mappings[33] = EntityType.Horse; - mappings[34] = EntityType.Husk; - mappings[35] = EntityType.Illusioner; - mappings[36] = EntityType.IronGolem; - mappings[37] = EntityType.Item; - mappings[38] = EntityType.ItemFrame; - mappings[39] = EntityType.Fireball; - mappings[40] = EntityType.LeashKnot; - mappings[41] = EntityType.LightningBolt; - mappings[42] = EntityType.Llama; - mappings[43] = EntityType.LlamaSpit; - mappings[44] = EntityType.MagmaCube; - mappings[45] = EntityType.Minecart; - mappings[46] = EntityType.ChestMinecart; - mappings[47] = EntityType.CommandBlockMinecart; - mappings[48] = EntityType.FurnaceMinecart; - mappings[49] = EntityType.HopperMinecart; - mappings[50] = EntityType.SpawnerMinecart; - mappings[51] = EntityType.TntMinecart; - mappings[52] = EntityType.Mule; - mappings[53] = EntityType.Mooshroom; - mappings[54] = EntityType.Ocelot; - mappings[55] = EntityType.Painting; - mappings[56] = EntityType.Panda; - mappings[57] = EntityType.Parrot; - mappings[58] = EntityType.Phantom; - mappings[59] = EntityType.Pig; - mappings[60] = EntityType.Piglin; - mappings[61] = EntityType.Pillager; - mappings[62] = EntityType.PolarBear; - mappings[63] = EntityType.Tnt; - mappings[64] = EntityType.Pufferfish; - mappings[65] = EntityType.Rabbit; - mappings[66] = EntityType.Ravager; - mappings[67] = EntityType.Salmon; - mappings[68] = EntityType.Sheep; - mappings[69] = EntityType.Shulker; - mappings[70] = EntityType.ShulkerBullet; - mappings[71] = EntityType.Silverfish; - mappings[72] = EntityType.Skeleton; - mappings[73] = EntityType.SkeletonHorse; - mappings[74] = EntityType.Slime; - mappings[75] = EntityType.SmallFireball; - mappings[76] = EntityType.SnowGolem; - mappings[77] = EntityType.Snowball; - mappings[78] = EntityType.SpectralArrow; - mappings[79] = EntityType.Spider; - mappings[80] = EntityType.Squid; - mappings[81] = EntityType.Stray; - mappings[82] = EntityType.Strider; - mappings[83] = EntityType.Egg; - mappings[84] = EntityType.EnderPearl; - mappings[85] = EntityType.ExperienceBottle; - mappings[86] = EntityType.Potion; - mappings[87] = EntityType.Trident; - mappings[88] = EntityType.TraderLlama; - mappings[89] = EntityType.TropicalFish; - mappings[90] = EntityType.Turtle; - mappings[91] = EntityType.Vex; - mappings[92] = EntityType.Villager; - mappings[93] = EntityType.Vindicator; - mappings[94] = EntityType.WanderingTrader; - mappings[95] = EntityType.Witch; - mappings[96] = EntityType.Wither; - mappings[97] = EntityType.WitherSkeleton; - mappings[98] = EntityType.WitherSkull; - mappings[99] = EntityType.Wolf; - mappings[100] = EntityType.Zoglin; - mappings[101] = EntityType.Zombie; - mappings[102] = EntityType.ZombieHorse; - mappings[103] = EntityType.ZombieVillager; - mappings[104] = EntityType.ZombifiedPiglin; - mappings[105] = EntityType.Player; - mappings[106] = EntityType.FishingBobber; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1162.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette1162.cs deleted file mode 100644 index 606e2d9410..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1162.cs +++ /dev/null @@ -1,126 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette1162 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette1162() - { - mappings[0] = EntityType.AreaEffectCloud; - mappings[1] = EntityType.ArmorStand; - mappings[2] = EntityType.Arrow; - mappings[3] = EntityType.Bat; - mappings[4] = EntityType.Bee; - mappings[5] = EntityType.Blaze; - mappings[6] = EntityType.Boat; - mappings[7] = EntityType.Cat; - mappings[8] = EntityType.CaveSpider; - mappings[9] = EntityType.Chicken; - mappings[10] = EntityType.Cod; - mappings[11] = EntityType.Cow; - mappings[12] = EntityType.Creeper; - mappings[13] = EntityType.Dolphin; - mappings[14] = EntityType.Donkey; - mappings[15] = EntityType.DragonFireball; - mappings[16] = EntityType.Drowned; - mappings[17] = EntityType.ElderGuardian; - mappings[18] = EntityType.EndCrystal; - mappings[19] = EntityType.EnderDragon; - mappings[20] = EntityType.Enderman; - mappings[21] = EntityType.Endermite; - mappings[22] = EntityType.Evoker; - mappings[23] = EntityType.EvokerFangs; - mappings[24] = EntityType.ExperienceOrb; - mappings[25] = EntityType.EyeOfEnder; - mappings[26] = EntityType.FallingBlock; - mappings[27] = EntityType.FireworkRocket; - mappings[28] = EntityType.Fox; - mappings[29] = EntityType.Ghast; - mappings[30] = EntityType.Giant; - mappings[31] = EntityType.Guardian; - mappings[32] = EntityType.Hoglin; - mappings[33] = EntityType.Horse; - mappings[34] = EntityType.Husk; - mappings[35] = EntityType.Illusioner; - mappings[36] = EntityType.IronGolem; - mappings[37] = EntityType.Item; - mappings[38] = EntityType.ItemFrame; - mappings[39] = EntityType.Fireball; - mappings[40] = EntityType.LeashKnot; - mappings[41] = EntityType.LightningBolt; - mappings[42] = EntityType.Llama; - mappings[43] = EntityType.LlamaSpit; - mappings[44] = EntityType.MagmaCube; - mappings[45] = EntityType.Minecart; - mappings[46] = EntityType.ChestMinecart; - mappings[47] = EntityType.CommandBlockMinecart; - mappings[48] = EntityType.FurnaceMinecart; - mappings[49] = EntityType.HopperMinecart; - mappings[50] = EntityType.SpawnerMinecart; - mappings[51] = EntityType.TntMinecart; - mappings[52] = EntityType.Mule; - mappings[53] = EntityType.Mooshroom; - mappings[54] = EntityType.Ocelot; - mappings[55] = EntityType.Painting; - mappings[56] = EntityType.Panda; - mappings[57] = EntityType.Parrot; - mappings[58] = EntityType.Phantom; - mappings[59] = EntityType.Pig; - mappings[60] = EntityType.Piglin; - mappings[61] = EntityType.PiglinBrute; - mappings[62] = EntityType.Pillager; - mappings[63] = EntityType.PolarBear; - mappings[64] = EntityType.Tnt; - mappings[65] = EntityType.Pufferfish; - mappings[66] = EntityType.Rabbit; - mappings[67] = EntityType.Ravager; - mappings[68] = EntityType.Salmon; - mappings[69] = EntityType.Sheep; - mappings[70] = EntityType.Shulker; - mappings[71] = EntityType.ShulkerBullet; - mappings[72] = EntityType.Silverfish; - mappings[73] = EntityType.Skeleton; - mappings[74] = EntityType.SkeletonHorse; - mappings[75] = EntityType.Slime; - mappings[76] = EntityType.SmallFireball; - mappings[77] = EntityType.SnowGolem; - mappings[78] = EntityType.Snowball; - mappings[79] = EntityType.SpectralArrow; - mappings[80] = EntityType.Spider; - mappings[81] = EntityType.Squid; - mappings[82] = EntityType.Stray; - mappings[83] = EntityType.Strider; - mappings[84] = EntityType.Egg; - mappings[85] = EntityType.EnderPearl; - mappings[86] = EntityType.ExperienceBottle; - mappings[87] = EntityType.Potion; - mappings[88] = EntityType.Trident; - mappings[89] = EntityType.TraderLlama; - mappings[90] = EntityType.TropicalFish; - mappings[91] = EntityType.Turtle; - mappings[92] = EntityType.Vex; - mappings[93] = EntityType.Villager; - mappings[94] = EntityType.Vindicator; - mappings[95] = EntityType.WanderingTrader; - mappings[96] = EntityType.Witch; - mappings[97] = EntityType.Wither; - mappings[98] = EntityType.WitherSkeleton; - mappings[99] = EntityType.WitherSkull; - mappings[100] = EntityType.Wolf; - mappings[101] = EntityType.Zoglin; - mappings[102] = EntityType.Zombie; - mappings[103] = EntityType.ZombieHorse; - mappings[104] = EntityType.ZombieVillager; - mappings[105] = EntityType.ZombifiedPiglin; - mappings[106] = EntityType.Player; - mappings[107] = EntityType.FishingBobber; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette117.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette117.cs deleted file mode 100644 index 1658aa33ba..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette117.cs +++ /dev/null @@ -1,131 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette117 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette117() - { - mappings[0] = EntityType.AreaEffectCloud; - mappings[1] = EntityType.ArmorStand; - mappings[2] = EntityType.Arrow; - mappings[3] = EntityType.Axolotl; - mappings[4] = EntityType.Bat; - mappings[5] = EntityType.Bee; - mappings[6] = EntityType.Blaze; - mappings[7] = EntityType.Boat; - mappings[8] = EntityType.Cat; - mappings[9] = EntityType.CaveSpider; - mappings[10] = EntityType.Chicken; - mappings[11] = EntityType.Cod; - mappings[12] = EntityType.Cow; - mappings[13] = EntityType.Creeper; - mappings[14] = EntityType.Dolphin; - mappings[15] = EntityType.Donkey; - mappings[16] = EntityType.DragonFireball; - mappings[17] = EntityType.Drowned; - mappings[18] = EntityType.ElderGuardian; - mappings[19] = EntityType.EndCrystal; - mappings[20] = EntityType.EnderDragon; - mappings[21] = EntityType.Enderman; - mappings[22] = EntityType.Endermite; - mappings[23] = EntityType.Evoker; - mappings[24] = EntityType.EvokerFangs; - mappings[25] = EntityType.ExperienceOrb; - mappings[26] = EntityType.EyeOfEnder; - mappings[27] = EntityType.FallingBlock; - mappings[28] = EntityType.FireworkRocket; - mappings[29] = EntityType.Fox; - mappings[30] = EntityType.Ghast; - mappings[31] = EntityType.Giant; - mappings[32] = EntityType.GlowItemFrame; - mappings[33] = EntityType.GlowSquid; - mappings[34] = EntityType.Goat; - mappings[35] = EntityType.Guardian; - mappings[36] = EntityType.Hoglin; - mappings[37] = EntityType.Horse; - mappings[38] = EntityType.Husk; - mappings[39] = EntityType.Illusioner; - mappings[40] = EntityType.IronGolem; - mappings[41] = EntityType.Item; - mappings[42] = EntityType.ItemFrame; - mappings[43] = EntityType.Fireball; - mappings[44] = EntityType.LeashKnot; - mappings[45] = EntityType.LightningBolt; - mappings[46] = EntityType.Llama; - mappings[47] = EntityType.LlamaSpit; - mappings[48] = EntityType.MagmaCube; - mappings[49] = EntityType.Marker; - mappings[50] = EntityType.Minecart; - mappings[51] = EntityType.ChestMinecart; - mappings[52] = EntityType.CommandBlockMinecart; - mappings[53] = EntityType.FurnaceMinecart; - mappings[54] = EntityType.HopperMinecart; - mappings[55] = EntityType.SpawnerMinecart; - mappings[56] = EntityType.TntMinecart; - mappings[57] = EntityType.Mule; - mappings[58] = EntityType.Mooshroom; - mappings[59] = EntityType.Ocelot; - mappings[60] = EntityType.Painting; - mappings[61] = EntityType.Panda; - mappings[62] = EntityType.Parrot; - mappings[63] = EntityType.Phantom; - mappings[64] = EntityType.Pig; - mappings[65] = EntityType.Piglin; - mappings[66] = EntityType.PiglinBrute; - mappings[67] = EntityType.Pillager; - mappings[68] = EntityType.PolarBear; - mappings[69] = EntityType.Tnt; - mappings[70] = EntityType.Pufferfish; - mappings[71] = EntityType.Rabbit; - mappings[72] = EntityType.Ravager; - mappings[73] = EntityType.Salmon; - mappings[74] = EntityType.Sheep; - mappings[75] = EntityType.Shulker; - mappings[76] = EntityType.ShulkerBullet; - mappings[77] = EntityType.Silverfish; - mappings[78] = EntityType.Skeleton; - mappings[79] = EntityType.SkeletonHorse; - mappings[80] = EntityType.Slime; - mappings[81] = EntityType.SmallFireball; - mappings[82] = EntityType.SnowGolem; - mappings[83] = EntityType.Snowball; - mappings[84] = EntityType.SpectralArrow; - mappings[85] = EntityType.Spider; - mappings[86] = EntityType.Squid; - mappings[87] = EntityType.Stray; - mappings[88] = EntityType.Strider; - mappings[89] = EntityType.Egg; - mappings[90] = EntityType.EnderPearl; - mappings[91] = EntityType.ExperienceBottle; - mappings[92] = EntityType.Potion; - mappings[93] = EntityType.Trident; - mappings[94] = EntityType.TraderLlama; - mappings[95] = EntityType.TropicalFish; - mappings[96] = EntityType.Turtle; - mappings[97] = EntityType.Vex; - mappings[98] = EntityType.Villager; - mappings[99] = EntityType.Vindicator; - mappings[100] = EntityType.WanderingTrader; - mappings[101] = EntityType.Witch; - mappings[102] = EntityType.Wither; - mappings[103] = EntityType.WitherSkeleton; - mappings[104] = EntityType.WitherSkull; - mappings[105] = EntityType.Wolf; - mappings[106] = EntityType.Zoglin; - mappings[107] = EntityType.Zombie; - mappings[108] = EntityType.ZombieHorse; - mappings[109] = EntityType.ZombieVillager; - mappings[110] = EntityType.ZombifiedPiglin; - mappings[111] = EntityType.Player; - mappings[112] = EntityType.FishingBobber; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette119.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette119.cs deleted file mode 100644 index f4e352d5f6..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette119.cs +++ /dev/null @@ -1,136 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette119 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette119() - { - mappings[0] = EntityType.Allay; - mappings[1] = EntityType.AreaEffectCloud; - mappings[2] = EntityType.ArmorStand; - mappings[3] = EntityType.Arrow; - mappings[4] = EntityType.Axolotl; - mappings[5] = EntityType.Bat; - mappings[6] = EntityType.Bee; - mappings[7] = EntityType.Blaze; - mappings[8] = EntityType.Boat; - mappings[10] = EntityType.Cat; - mappings[11] = EntityType.CaveSpider; - mappings[9] = EntityType.ChestBoat; - mappings[54] = EntityType.ChestMinecart; - mappings[12] = EntityType.Chicken; - mappings[13] = EntityType.Cod; - mappings[55] = EntityType.CommandBlockMinecart; - mappings[14] = EntityType.Cow; - mappings[15] = EntityType.Creeper; - mappings[16] = EntityType.Dolphin; - mappings[17] = EntityType.Donkey; - mappings[18] = EntityType.DragonFireball; - mappings[19] = EntityType.Drowned; - mappings[93] = EntityType.Egg; - mappings[20] = EntityType.ElderGuardian; - mappings[21] = EntityType.EndCrystal; - mappings[22] = EntityType.EnderDragon; - mappings[94] = EntityType.EnderPearl; - mappings[23] = EntityType.Enderman; - mappings[24] = EntityType.Endermite; - mappings[25] = EntityType.Evoker; - mappings[26] = EntityType.EvokerFangs; - mappings[95] = EntityType.ExperienceBottle; - mappings[27] = EntityType.ExperienceOrb; - mappings[28] = EntityType.EyeOfEnder; - mappings[29] = EntityType.FallingBlock; - mappings[46] = EntityType.Fireball; - mappings[30] = EntityType.FireworkRocket; - mappings[117] = EntityType.FishingBobber; - mappings[31] = EntityType.Fox; - mappings[32] = EntityType.Frog; - mappings[56] = EntityType.FurnaceMinecart; - mappings[33] = EntityType.Ghast; - mappings[34] = EntityType.Giant; - mappings[35] = EntityType.GlowItemFrame; - mappings[36] = EntityType.GlowSquid; - mappings[37] = EntityType.Goat; - mappings[38] = EntityType.Guardian; - mappings[39] = EntityType.Hoglin; - mappings[57] = EntityType.HopperMinecart; - mappings[40] = EntityType.Horse; - mappings[41] = EntityType.Husk; - mappings[42] = EntityType.Illusioner; - mappings[43] = EntityType.IronGolem; - mappings[44] = EntityType.Item; - mappings[45] = EntityType.ItemFrame; - mappings[47] = EntityType.LeashKnot; - mappings[48] = EntityType.LightningBolt; - mappings[49] = EntityType.Llama; - mappings[50] = EntityType.LlamaSpit; - mappings[51] = EntityType.MagmaCube; - mappings[52] = EntityType.Marker; - mappings[53] = EntityType.Minecart; - mappings[61] = EntityType.Mooshroom; - mappings[60] = EntityType.Mule; - mappings[62] = EntityType.Ocelot; - mappings[63] = EntityType.Painting; - mappings[64] = EntityType.Panda; - mappings[65] = EntityType.Parrot; - mappings[66] = EntityType.Phantom; - mappings[67] = EntityType.Pig; - mappings[68] = EntityType.Piglin; - mappings[69] = EntityType.PiglinBrute; - mappings[70] = EntityType.Pillager; - mappings[116] = EntityType.Player; - mappings[71] = EntityType.PolarBear; - mappings[96] = EntityType.Potion; - mappings[73] = EntityType.Pufferfish; - mappings[74] = EntityType.Rabbit; - mappings[75] = EntityType.Ravager; - mappings[76] = EntityType.Salmon; - mappings[77] = EntityType.Sheep; - mappings[78] = EntityType.Shulker; - mappings[79] = EntityType.ShulkerBullet; - mappings[80] = EntityType.Silverfish; - mappings[81] = EntityType.Skeleton; - mappings[82] = EntityType.SkeletonHorse; - mappings[83] = EntityType.Slime; - mappings[84] = EntityType.SmallFireball; - mappings[85] = EntityType.SnowGolem; - mappings[86] = EntityType.Snowball; - mappings[58] = EntityType.SpawnerMinecart; - mappings[87] = EntityType.SpectralArrow; - mappings[88] = EntityType.Spider; - mappings[89] = EntityType.Squid; - mappings[90] = EntityType.Stray; - mappings[91] = EntityType.Strider; - mappings[92] = EntityType.Tadpole; - mappings[72] = EntityType.Tnt; - mappings[59] = EntityType.TntMinecart; - mappings[98] = EntityType.TraderLlama; - mappings[97] = EntityType.Trident; - mappings[99] = EntityType.TropicalFish; - mappings[100] = EntityType.Turtle; - mappings[101] = EntityType.Vex; - mappings[102] = EntityType.Villager; - mappings[103] = EntityType.Vindicator; - mappings[104] = EntityType.WanderingTrader; - mappings[105] = EntityType.Warden; - mappings[106] = EntityType.Witch; - mappings[107] = EntityType.Wither; - mappings[108] = EntityType.WitherSkeleton; - mappings[109] = EntityType.WitherSkull; - mappings[110] = EntityType.Wolf; - mappings[111] = EntityType.Zoglin; - mappings[112] = EntityType.Zombie; - mappings[113] = EntityType.ZombieHorse; - mappings[114] = EntityType.ZombieVillager; - mappings[115] = EntityType.ZombifiedPiglin; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1193.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette1193.cs deleted file mode 100644 index d02e09a7a5..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1193.cs +++ /dev/null @@ -1,137 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette1193 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette1193() - { - mappings[0] = EntityType.Allay; - mappings[1] = EntityType.AreaEffectCloud; - mappings[2] = EntityType.ArmorStand; - mappings[3] = EntityType.Arrow; - mappings[4] = EntityType.Axolotl; - mappings[5] = EntityType.Bat; - mappings[6] = EntityType.Bee; - mappings[7] = EntityType.Blaze; - mappings[8] = EntityType.Boat; - mappings[11] = EntityType.Camel; - mappings[10] = EntityType.Cat; - mappings[12] = EntityType.CaveSpider; - mappings[9] = EntityType.ChestBoat; - mappings[55] = EntityType.ChestMinecart; - mappings[13] = EntityType.Chicken; - mappings[14] = EntityType.Cod; - mappings[56] = EntityType.CommandBlockMinecart; - mappings[15] = EntityType.Cow; - mappings[16] = EntityType.Creeper; - mappings[17] = EntityType.Dolphin; - mappings[18] = EntityType.Donkey; - mappings[19] = EntityType.DragonFireball; - mappings[20] = EntityType.Drowned; - mappings[94] = EntityType.Egg; - mappings[21] = EntityType.ElderGuardian; - mappings[22] = EntityType.EndCrystal; - mappings[23] = EntityType.EnderDragon; - mappings[95] = EntityType.EnderPearl; - mappings[24] = EntityType.Enderman; - mappings[25] = EntityType.Endermite; - mappings[26] = EntityType.Evoker; - mappings[27] = EntityType.EvokerFangs; - mappings[96] = EntityType.ExperienceBottle; - mappings[28] = EntityType.ExperienceOrb; - mappings[29] = EntityType.EyeOfEnder; - mappings[30] = EntityType.FallingBlock; - mappings[47] = EntityType.Fireball; - mappings[31] = EntityType.FireworkRocket; - mappings[118] = EntityType.FishingBobber; - mappings[32] = EntityType.Fox; - mappings[33] = EntityType.Frog; - mappings[57] = EntityType.FurnaceMinecart; - mappings[34] = EntityType.Ghast; - mappings[35] = EntityType.Giant; - mappings[36] = EntityType.GlowItemFrame; - mappings[37] = EntityType.GlowSquid; - mappings[38] = EntityType.Goat; - mappings[39] = EntityType.Guardian; - mappings[40] = EntityType.Hoglin; - mappings[58] = EntityType.HopperMinecart; - mappings[41] = EntityType.Horse; - mappings[42] = EntityType.Husk; - mappings[43] = EntityType.Illusioner; - mappings[44] = EntityType.IronGolem; - mappings[45] = EntityType.Item; - mappings[46] = EntityType.ItemFrame; - mappings[48] = EntityType.LeashKnot; - mappings[49] = EntityType.LightningBolt; - mappings[50] = EntityType.Llama; - mappings[51] = EntityType.LlamaSpit; - mappings[52] = EntityType.MagmaCube; - mappings[53] = EntityType.Marker; - mappings[54] = EntityType.Minecart; - mappings[62] = EntityType.Mooshroom; - mappings[61] = EntityType.Mule; - mappings[63] = EntityType.Ocelot; - mappings[64] = EntityType.Painting; - mappings[65] = EntityType.Panda; - mappings[66] = EntityType.Parrot; - mappings[67] = EntityType.Phantom; - mappings[68] = EntityType.Pig; - mappings[69] = EntityType.Piglin; - mappings[70] = EntityType.PiglinBrute; - mappings[71] = EntityType.Pillager; - mappings[117] = EntityType.Player; - mappings[72] = EntityType.PolarBear; - mappings[97] = EntityType.Potion; - mappings[74] = EntityType.Pufferfish; - mappings[75] = EntityType.Rabbit; - mappings[76] = EntityType.Ravager; - mappings[77] = EntityType.Salmon; - mappings[78] = EntityType.Sheep; - mappings[79] = EntityType.Shulker; - mappings[80] = EntityType.ShulkerBullet; - mappings[81] = EntityType.Silverfish; - mappings[82] = EntityType.Skeleton; - mappings[83] = EntityType.SkeletonHorse; - mappings[84] = EntityType.Slime; - mappings[85] = EntityType.SmallFireball; - mappings[86] = EntityType.SnowGolem; - mappings[87] = EntityType.Snowball; - mappings[59] = EntityType.SpawnerMinecart; - mappings[88] = EntityType.SpectralArrow; - mappings[89] = EntityType.Spider; - mappings[90] = EntityType.Squid; - mappings[91] = EntityType.Stray; - mappings[92] = EntityType.Strider; - mappings[93] = EntityType.Tadpole; - mappings[73] = EntityType.Tnt; - mappings[60] = EntityType.TntMinecart; - mappings[99] = EntityType.TraderLlama; - mappings[98] = EntityType.Trident; - mappings[100] = EntityType.TropicalFish; - mappings[101] = EntityType.Turtle; - mappings[102] = EntityType.Vex; - mappings[103] = EntityType.Villager; - mappings[104] = EntityType.Vindicator; - mappings[105] = EntityType.WanderingTrader; - mappings[106] = EntityType.Warden; - mappings[107] = EntityType.Witch; - mappings[108] = EntityType.Wither; - mappings[109] = EntityType.WitherSkeleton; - mappings[110] = EntityType.WitherSkull; - mappings[111] = EntityType.Wolf; - mappings[112] = EntityType.Zoglin; - mappings[113] = EntityType.Zombie; - mappings[114] = EntityType.ZombieHorse; - mappings[115] = EntityType.ZombieVillager; - mappings[116] = EntityType.ZombifiedPiglin; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette120.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette120.cs deleted file mode 100644 index 254a9a3ba6..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette120.cs +++ /dev/null @@ -1,142 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette120 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette120() - { - mappings[0] = EntityType.Allay; - mappings[1] = EntityType.AreaEffectCloud; - mappings[2] = EntityType.ArmorStand; - mappings[3] = EntityType.Arrow; - mappings[4] = EntityType.Axolotl; - mappings[5] = EntityType.Bat; - mappings[6] = EntityType.Bee; - mappings[7] = EntityType.Blaze; - mappings[8] = EntityType.BlockDisplay; - mappings[9] = EntityType.Boat; - mappings[10] = EntityType.Camel; - mappings[11] = EntityType.Cat; - mappings[12] = EntityType.CaveSpider; - mappings[13] = EntityType.ChestBoat; - mappings[14] = EntityType.ChestMinecart; - mappings[15] = EntityType.Chicken; - mappings[16] = EntityType.Cod; - mappings[17] = EntityType.CommandBlockMinecart; - mappings[18] = EntityType.Cow; - mappings[19] = EntityType.Creeper; - mappings[20] = EntityType.Dolphin; - mappings[21] = EntityType.Donkey; - mappings[22] = EntityType.DragonFireball; - mappings[23] = EntityType.Drowned; - mappings[24] = EntityType.Egg; - mappings[25] = EntityType.ElderGuardian; - mappings[26] = EntityType.EndCrystal; - mappings[27] = EntityType.EnderDragon; - mappings[28] = EntityType.EnderPearl; - mappings[29] = EntityType.Enderman; - mappings[30] = EntityType.Endermite; - mappings[31] = EntityType.Evoker; - mappings[32] = EntityType.EvokerFangs; - mappings[33] = EntityType.ExperienceBottle; - mappings[34] = EntityType.ExperienceOrb; - mappings[35] = EntityType.EyeOfEnder; - mappings[36] = EntityType.FallingBlock; - mappings[57] = EntityType.Fireball; - mappings[37] = EntityType.FireworkRocket; - mappings[123] = EntityType.FishingBobber; - mappings[38] = EntityType.Fox; - mappings[39] = EntityType.Frog; - mappings[40] = EntityType.FurnaceMinecart; - mappings[41] = EntityType.Ghast; - mappings[42] = EntityType.Giant; - mappings[43] = EntityType.GlowItemFrame; - mappings[44] = EntityType.GlowSquid; - mappings[45] = EntityType.Goat; - mappings[46] = EntityType.Guardian; - mappings[47] = EntityType.Hoglin; - mappings[48] = EntityType.HopperMinecart; - mappings[49] = EntityType.Horse; - mappings[50] = EntityType.Husk; - mappings[51] = EntityType.Illusioner; - mappings[52] = EntityType.Interaction; - mappings[53] = EntityType.IronGolem; - mappings[54] = EntityType.Item; - mappings[55] = EntityType.ItemDisplay; - mappings[56] = EntityType.ItemFrame; - mappings[58] = EntityType.LeashKnot; - mappings[59] = EntityType.LightningBolt; - mappings[60] = EntityType.Llama; - mappings[61] = EntityType.LlamaSpit; - mappings[62] = EntityType.MagmaCube; - mappings[63] = EntityType.Marker; - mappings[64] = EntityType.Minecart; - mappings[65] = EntityType.Mooshroom; - mappings[66] = EntityType.Mule; - mappings[67] = EntityType.Ocelot; - mappings[68] = EntityType.Painting; - mappings[69] = EntityType.Panda; - mappings[70] = EntityType.Parrot; - mappings[71] = EntityType.Phantom; - mappings[72] = EntityType.Pig; - mappings[73] = EntityType.Piglin; - mappings[74] = EntityType.PiglinBrute; - mappings[75] = EntityType.Pillager; - mappings[122] = EntityType.Player; - mappings[76] = EntityType.PolarBear; - mappings[77] = EntityType.Potion; - mappings[78] = EntityType.Pufferfish; - mappings[79] = EntityType.Rabbit; - mappings[80] = EntityType.Ravager; - mappings[81] = EntityType.Salmon; - mappings[82] = EntityType.Sheep; - mappings[83] = EntityType.Shulker; - mappings[84] = EntityType.ShulkerBullet; - mappings[85] = EntityType.Silverfish; - mappings[86] = EntityType.Skeleton; - mappings[87] = EntityType.SkeletonHorse; - mappings[88] = EntityType.Slime; - mappings[89] = EntityType.SmallFireball; - mappings[90] = EntityType.Sniffer; - mappings[91] = EntityType.SnowGolem; - mappings[92] = EntityType.Snowball; - mappings[93] = EntityType.SpawnerMinecart; - mappings[94] = EntityType.SpectralArrow; - mappings[95] = EntityType.Spider; - mappings[96] = EntityType.Squid; - mappings[97] = EntityType.Stray; - mappings[98] = EntityType.Strider; - mappings[99] = EntityType.Tadpole; - mappings[100] = EntityType.TextDisplay; - mappings[101] = EntityType.Tnt; - mappings[102] = EntityType.TntMinecart; - mappings[103] = EntityType.TraderLlama; - mappings[104] = EntityType.Trident; - mappings[105] = EntityType.TropicalFish; - mappings[106] = EntityType.Turtle; - mappings[107] = EntityType.Vex; - mappings[108] = EntityType.Villager; - mappings[109] = EntityType.Vindicator; - mappings[110] = EntityType.WanderingTrader; - mappings[111] = EntityType.Warden; - mappings[112] = EntityType.Witch; - mappings[113] = EntityType.Wither; - mappings[114] = EntityType.WitherSkeleton; - mappings[115] = EntityType.WitherSkull; - mappings[116] = EntityType.Wolf; - mappings[117] = EntityType.Zoglin; - mappings[118] = EntityType.Zombie; - mappings[119] = EntityType.ZombieHorse; - mappings[120] = EntityType.ZombieVillager; - mappings[121] = EntityType.ZombifiedPiglin; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} \ No newline at end of file diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1204.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette1204.cs deleted file mode 100644 index 5cb31df3fb..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1204.cs +++ /dev/null @@ -1,144 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette1204 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette1204() - { - mappings[0] = EntityType.Allay; - mappings[1] = EntityType.AreaEffectCloud; - mappings[2] = EntityType.ArmorStand; - mappings[3] = EntityType.Arrow; - mappings[4] = EntityType.Axolotl; - mappings[5] = EntityType.Bat; - mappings[6] = EntityType.Bee; - mappings[7] = EntityType.Blaze; - mappings[8] = EntityType.BlockDisplay; - mappings[9] = EntityType.Boat; - mappings[10] = EntityType.Breeze; - mappings[11] = EntityType.Camel; - mappings[12] = EntityType.Cat; - mappings[13] = EntityType.CaveSpider; - mappings[14] = EntityType.ChestBoat; - mappings[15] = EntityType.ChestMinecart; - mappings[16] = EntityType.Chicken; - mappings[17] = EntityType.Cod; - mappings[18] = EntityType.CommandBlockMinecart; - mappings[19] = EntityType.Cow; - mappings[20] = EntityType.Creeper; - mappings[21] = EntityType.Dolphin; - mappings[22] = EntityType.Donkey; - mappings[23] = EntityType.DragonFireball; - mappings[24] = EntityType.Drowned; - mappings[25] = EntityType.Egg; - mappings[26] = EntityType.ElderGuardian; - mappings[27] = EntityType.EndCrystal; - mappings[28] = EntityType.EnderDragon; - mappings[29] = EntityType.EnderPearl; - mappings[30] = EntityType.Enderman; - mappings[31] = EntityType.Endermite; - mappings[32] = EntityType.Evoker; - mappings[33] = EntityType.EvokerFangs; - mappings[34] = EntityType.ExperienceBottle; - mappings[35] = EntityType.ExperienceOrb; - mappings[36] = EntityType.EyeOfEnder; - mappings[37] = EntityType.FallingBlock; - mappings[58] = EntityType.Fireball; - mappings[38] = EntityType.FireworkRocket; - mappings[125] = EntityType.FishingBobber; - mappings[39] = EntityType.Fox; - mappings[40] = EntityType.Frog; - mappings[41] = EntityType.FurnaceMinecart; - mappings[42] = EntityType.Ghast; - mappings[43] = EntityType.Giant; - mappings[44] = EntityType.GlowItemFrame; - mappings[45] = EntityType.GlowSquid; - mappings[46] = EntityType.Goat; - mappings[47] = EntityType.Guardian; - mappings[48] = EntityType.Hoglin; - mappings[49] = EntityType.HopperMinecart; - mappings[50] = EntityType.Horse; - mappings[51] = EntityType.Husk; - mappings[52] = EntityType.Illusioner; - mappings[53] = EntityType.Interaction; - mappings[54] = EntityType.IronGolem; - mappings[55] = EntityType.Item; - mappings[56] = EntityType.ItemDisplay; - mappings[57] = EntityType.ItemFrame; - mappings[59] = EntityType.LeashKnot; - mappings[60] = EntityType.LightningBolt; - mappings[61] = EntityType.Llama; - mappings[62] = EntityType.LlamaSpit; - mappings[63] = EntityType.MagmaCube; - mappings[64] = EntityType.Marker; - mappings[65] = EntityType.Minecart; - mappings[66] = EntityType.Mooshroom; - mappings[67] = EntityType.Mule; - mappings[68] = EntityType.Ocelot; - mappings[69] = EntityType.Painting; - mappings[70] = EntityType.Panda; - mappings[71] = EntityType.Parrot; - mappings[72] = EntityType.Phantom; - mappings[73] = EntityType.Pig; - mappings[74] = EntityType.Piglin; - mappings[75] = EntityType.PiglinBrute; - mappings[76] = EntityType.Pillager; - mappings[124] = EntityType.Player; - mappings[77] = EntityType.PolarBear; - mappings[78] = EntityType.Potion; - mappings[79] = EntityType.Pufferfish; - mappings[80] = EntityType.Rabbit; - mappings[81] = EntityType.Ravager; - mappings[82] = EntityType.Salmon; - mappings[83] = EntityType.Sheep; - mappings[84] = EntityType.Shulker; - mappings[85] = EntityType.ShulkerBullet; - mappings[86] = EntityType.Silverfish; - mappings[87] = EntityType.Skeleton; - mappings[88] = EntityType.SkeletonHorse; - mappings[89] = EntityType.Slime; - mappings[90] = EntityType.SmallFireball; - mappings[91] = EntityType.Sniffer; - mappings[92] = EntityType.SnowGolem; - mappings[93] = EntityType.Snowball; - mappings[94] = EntityType.SpawnerMinecart; - mappings[95] = EntityType.SpectralArrow; - mappings[96] = EntityType.Spider; - mappings[97] = EntityType.Squid; - mappings[98] = EntityType.Stray; - mappings[99] = EntityType.Strider; - mappings[100] = EntityType.Tadpole; - mappings[101] = EntityType.TextDisplay; - mappings[102] = EntityType.Tnt; - mappings[103] = EntityType.TntMinecart; - mappings[104] = EntityType.TraderLlama; - mappings[105] = EntityType.Trident; - mappings[106] = EntityType.TropicalFish; - mappings[107] = EntityType.Turtle; - mappings[108] = EntityType.Vex; - mappings[109] = EntityType.Villager; - mappings[110] = EntityType.Vindicator; - mappings[111] = EntityType.WanderingTrader; - mappings[112] = EntityType.Warden; - mappings[113] = EntityType.WindCharge; - mappings[114] = EntityType.Witch; - mappings[115] = EntityType.Wither; - mappings[116] = EntityType.WitherSkeleton; - mappings[117] = EntityType.WitherSkull; - mappings[118] = EntityType.Wolf; - mappings[119] = EntityType.Zoglin; - mappings[120] = EntityType.Zombie; - mappings[121] = EntityType.ZombieHorse; - mappings[122] = EntityType.ZombieVillager; - mappings[123] = EntityType.ZombifiedPiglin; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1206.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette1206.cs deleted file mode 100644 index 734a431d4c..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1206.cs +++ /dev/null @@ -1,148 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette1206 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette1206() - { - mappings[0] = EntityType.Allay; - mappings[1] = EntityType.AreaEffectCloud; - mappings[2] = EntityType.Armadillo; - mappings[3] = EntityType.ArmorStand; - mappings[4] = EntityType.Arrow; - mappings[5] = EntityType.Axolotl; - mappings[6] = EntityType.Bat; - mappings[7] = EntityType.Bee; - mappings[8] = EntityType.Blaze; - mappings[9] = EntityType.BlockDisplay; - mappings[10] = EntityType.Boat; - mappings[11] = EntityType.Bogged; - mappings[12] = EntityType.Breeze; - mappings[13] = EntityType.BreezeWindCharge; - mappings[14] = EntityType.Camel; - mappings[15] = EntityType.Cat; - mappings[16] = EntityType.CaveSpider; - mappings[17] = EntityType.ChestBoat; - mappings[18] = EntityType.ChestMinecart; - mappings[19] = EntityType.Chicken; - mappings[20] = EntityType.Cod; - mappings[21] = EntityType.CommandBlockMinecart; - mappings[22] = EntityType.Cow; - mappings[23] = EntityType.Creeper; - mappings[24] = EntityType.Dolphin; - mappings[25] = EntityType.Donkey; - mappings[26] = EntityType.DragonFireball; - mappings[27] = EntityType.Drowned; - mappings[28] = EntityType.Egg; - mappings[29] = EntityType.ElderGuardian; - mappings[30] = EntityType.EndCrystal; - mappings[31] = EntityType.EnderDragon; - mappings[32] = EntityType.EnderPearl; - mappings[33] = EntityType.Enderman; - mappings[34] = EntityType.Endermite; - mappings[35] = EntityType.Evoker; - mappings[36] = EntityType.EvokerFangs; - mappings[37] = EntityType.ExperienceBottle; - mappings[38] = EntityType.ExperienceOrb; - mappings[39] = EntityType.EyeOfEnder; - mappings[40] = EntityType.FallingBlock; - mappings[62] = EntityType.Fireball; - mappings[41] = EntityType.FireworkRocket; - mappings[129] = EntityType.FishingBobber; - mappings[42] = EntityType.Fox; - mappings[43] = EntityType.Frog; - mappings[44] = EntityType.FurnaceMinecart; - mappings[45] = EntityType.Ghast; - mappings[46] = EntityType.Giant; - mappings[47] = EntityType.GlowItemFrame; - mappings[48] = EntityType.GlowSquid; - mappings[49] = EntityType.Goat; - mappings[50] = EntityType.Guardian; - mappings[51] = EntityType.Hoglin; - mappings[52] = EntityType.HopperMinecart; - mappings[53] = EntityType.Horse; - mappings[54] = EntityType.Husk; - mappings[55] = EntityType.Illusioner; - mappings[56] = EntityType.Interaction; - mappings[57] = EntityType.IronGolem; - mappings[58] = EntityType.Item; - mappings[59] = EntityType.ItemDisplay; - mappings[60] = EntityType.ItemFrame; - mappings[63] = EntityType.LeashKnot; - mappings[64] = EntityType.LightningBolt; - mappings[65] = EntityType.Llama; - mappings[66] = EntityType.LlamaSpit; - mappings[67] = EntityType.MagmaCube; - mappings[68] = EntityType.Marker; - mappings[69] = EntityType.Minecart; - mappings[70] = EntityType.Mooshroom; - mappings[71] = EntityType.Mule; - mappings[72] = EntityType.Ocelot; - mappings[61] = EntityType.OminousItemSpawner; - mappings[73] = EntityType.Painting; - mappings[74] = EntityType.Panda; - mappings[75] = EntityType.Parrot; - mappings[76] = EntityType.Phantom; - mappings[77] = EntityType.Pig; - mappings[78] = EntityType.Piglin; - mappings[79] = EntityType.PiglinBrute; - mappings[80] = EntityType.Pillager; - mappings[128] = EntityType.Player; - mappings[81] = EntityType.PolarBear; - mappings[82] = EntityType.Potion; - mappings[83] = EntityType.Pufferfish; - mappings[84] = EntityType.Rabbit; - mappings[85] = EntityType.Ravager; - mappings[86] = EntityType.Salmon; - mappings[87] = EntityType.Sheep; - mappings[88] = EntityType.Shulker; - mappings[89] = EntityType.ShulkerBullet; - mappings[90] = EntityType.Silverfish; - mappings[91] = EntityType.Skeleton; - mappings[92] = EntityType.SkeletonHorse; - mappings[93] = EntityType.Slime; - mappings[94] = EntityType.SmallFireball; - mappings[95] = EntityType.Sniffer; - mappings[96] = EntityType.SnowGolem; - mappings[97] = EntityType.Snowball; - mappings[98] = EntityType.SpawnerMinecart; - mappings[99] = EntityType.SpectralArrow; - mappings[100] = EntityType.Spider; - mappings[101] = EntityType.Squid; - mappings[102] = EntityType.Stray; - mappings[103] = EntityType.Strider; - mappings[104] = EntityType.Tadpole; - mappings[105] = EntityType.TextDisplay; - mappings[106] = EntityType.Tnt; - mappings[107] = EntityType.TntMinecart; - mappings[108] = EntityType.TraderLlama; - mappings[109] = EntityType.Trident; - mappings[110] = EntityType.TropicalFish; - mappings[111] = EntityType.Turtle; - mappings[112] = EntityType.Vex; - mappings[113] = EntityType.Villager; - mappings[114] = EntityType.Vindicator; - mappings[115] = EntityType.WanderingTrader; - mappings[116] = EntityType.Warden; - mappings[117] = EntityType.WindCharge; - mappings[118] = EntityType.Witch; - mappings[119] = EntityType.Wither; - mappings[120] = EntityType.WitherSkeleton; - mappings[121] = EntityType.WitherSkull; - mappings[122] = EntityType.Wolf; - mappings[123] = EntityType.Zoglin; - mappings[124] = EntityType.Zombie; - mappings[125] = EntityType.ZombieHorse; - mappings[126] = EntityType.ZombieVillager; - mappings[127] = EntityType.ZombifiedPiglin; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette12111.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette12111.cs deleted file mode 100644 index 5c3cb5cab4..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette12111.cs +++ /dev/null @@ -1,175 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette12111 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette12111() - { - mappings[0] = EntityType.AcaciaBoat; - mappings[1] = EntityType.AcaciaChestBoat; - mappings[2] = EntityType.Allay; - mappings[3] = EntityType.AreaEffectCloud; - mappings[4] = EntityType.Armadillo; - mappings[5] = EntityType.ArmorStand; - mappings[6] = EntityType.Arrow; - mappings[7] = EntityType.Axolotl; - mappings[8] = EntityType.BambooChestRaft; - mappings[9] = EntityType.BambooRaft; - mappings[10] = EntityType.Bat; - mappings[11] = EntityType.Bee; - mappings[12] = EntityType.BirchBoat; - mappings[13] = EntityType.BirchChestBoat; - mappings[14] = EntityType.Blaze; - mappings[15] = EntityType.BlockDisplay; - mappings[16] = EntityType.Bogged; - mappings[17] = EntityType.Breeze; - mappings[18] = EntityType.BreezeWindCharge; - mappings[19] = EntityType.Camel; - mappings[20] = EntityType.CamelHusk; - mappings[21] = EntityType.Cat; - mappings[22] = EntityType.CaveSpider; - mappings[23] = EntityType.CherryBoat; - mappings[24] = EntityType.CherryChestBoat; - mappings[25] = EntityType.ChestMinecart; - mappings[26] = EntityType.Chicken; - mappings[27] = EntityType.Cod; - mappings[28] = EntityType.CopperGolem; - mappings[29] = EntityType.CommandBlockMinecart; - mappings[30] = EntityType.Cow; - mappings[31] = EntityType.Creaking; - mappings[32] = EntityType.Creeper; - mappings[33] = EntityType.DarkOakBoat; - mappings[34] = EntityType.DarkOakChestBoat; - mappings[35] = EntityType.Dolphin; - mappings[36] = EntityType.Donkey; - mappings[37] = EntityType.DragonFireball; - mappings[38] = EntityType.Drowned; - mappings[39] = EntityType.Egg; - mappings[40] = EntityType.ElderGuardian; - mappings[41] = EntityType.Enderman; - mappings[42] = EntityType.Endermite; - mappings[43] = EntityType.EnderDragon; - mappings[44] = EntityType.EnderPearl; - mappings[45] = EntityType.EndCrystal; - mappings[46] = EntityType.Evoker; - mappings[47] = EntityType.EvokerFangs; - mappings[48] = EntityType.ExperienceBottle; - mappings[49] = EntityType.ExperienceOrb; - mappings[50] = EntityType.EyeOfEnder; - mappings[51] = EntityType.FallingBlock; - mappings[52] = EntityType.Fireball; - mappings[53] = EntityType.FireworkRocket; - mappings[54] = EntityType.Fox; - mappings[55] = EntityType.Frog; - mappings[56] = EntityType.FurnaceMinecart; - mappings[57] = EntityType.Ghast; - mappings[58] = EntityType.HappyGhast; - mappings[59] = EntityType.Giant; - mappings[60] = EntityType.GlowItemFrame; - mappings[61] = EntityType.GlowSquid; - mappings[62] = EntityType.Goat; - mappings[63] = EntityType.Guardian; - mappings[64] = EntityType.Hoglin; - mappings[65] = EntityType.HopperMinecart; - mappings[66] = EntityType.Horse; - mappings[67] = EntityType.Husk; - mappings[68] = EntityType.Illusioner; - mappings[69] = EntityType.Interaction; - mappings[70] = EntityType.IronGolem; - mappings[71] = EntityType.Item; - mappings[72] = EntityType.ItemDisplay; - mappings[73] = EntityType.ItemFrame; - mappings[74] = EntityType.JungleBoat; - mappings[75] = EntityType.JungleChestBoat; - mappings[76] = EntityType.LeashKnot; - mappings[77] = EntityType.LightningBolt; - mappings[78] = EntityType.Llama; - mappings[79] = EntityType.LlamaSpit; - mappings[80] = EntityType.MagmaCube; - mappings[81] = EntityType.MangroveBoat; - mappings[82] = EntityType.MangroveChestBoat; - mappings[83] = EntityType.Mannequin; - mappings[84] = EntityType.Marker; - mappings[85] = EntityType.Minecart; - mappings[86] = EntityType.Mooshroom; - mappings[87] = EntityType.Mule; - mappings[88] = EntityType.Nautilus; - mappings[89] = EntityType.OakBoat; - mappings[90] = EntityType.OakChestBoat; - mappings[91] = EntityType.Ocelot; - mappings[92] = EntityType.OminousItemSpawner; - mappings[93] = EntityType.Painting; - mappings[94] = EntityType.PaleOakBoat; - mappings[95] = EntityType.PaleOakChestBoat; - mappings[96] = EntityType.Panda; - mappings[97] = EntityType.Parched; - mappings[98] = EntityType.Parrot; - mappings[99] = EntityType.Phantom; - mappings[100] = EntityType.Pig; - mappings[101] = EntityType.Piglin; - mappings[102] = EntityType.PiglinBrute; - mappings[103] = EntityType.Pillager; - mappings[104] = EntityType.PolarBear; - mappings[105] = EntityType.SplashPotion; - mappings[106] = EntityType.LingeringPotion; - mappings[107] = EntityType.Pufferfish; - mappings[108] = EntityType.Rabbit; - mappings[109] = EntityType.Ravager; - mappings[110] = EntityType.Salmon; - mappings[111] = EntityType.Sheep; - mappings[112] = EntityType.Shulker; - mappings[113] = EntityType.ShulkerBullet; - mappings[114] = EntityType.Silverfish; - mappings[115] = EntityType.Skeleton; - mappings[116] = EntityType.SkeletonHorse; - mappings[117] = EntityType.Slime; - mappings[118] = EntityType.SmallFireball; - mappings[119] = EntityType.Sniffer; - mappings[120] = EntityType.Snowball; - mappings[121] = EntityType.SnowGolem; - mappings[122] = EntityType.SpawnerMinecart; - mappings[123] = EntityType.SpectralArrow; - mappings[124] = EntityType.Spider; - mappings[125] = EntityType.SpruceBoat; - mappings[126] = EntityType.SpruceChestBoat; - mappings[127] = EntityType.Squid; - mappings[128] = EntityType.Stray; - mappings[129] = EntityType.Strider; - mappings[130] = EntityType.Tadpole; - mappings[131] = EntityType.TextDisplay; - mappings[132] = EntityType.Tnt; - mappings[133] = EntityType.TntMinecart; - mappings[134] = EntityType.TraderLlama; - mappings[135] = EntityType.Trident; - mappings[136] = EntityType.TropicalFish; - mappings[137] = EntityType.Turtle; - mappings[138] = EntityType.Vex; - mappings[139] = EntityType.Villager; - mappings[140] = EntityType.Vindicator; - mappings[141] = EntityType.WanderingTrader; - mappings[142] = EntityType.Warden; - mappings[143] = EntityType.WindCharge; - mappings[144] = EntityType.Witch; - mappings[145] = EntityType.Wither; - mappings[146] = EntityType.WitherSkeleton; - mappings[147] = EntityType.WitherSkull; - mappings[148] = EntityType.Wolf; - mappings[149] = EntityType.Zoglin; - mappings[150] = EntityType.Zombie; - mappings[151] = EntityType.ZombieHorse; - mappings[152] = EntityType.ZombieNautilus; - mappings[153] = EntityType.ZombieVillager; - mappings[154] = EntityType.ZombifiedPiglin; - mappings[155] = EntityType.Player; - mappings[156] = EntityType.FishingBobber; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1212.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette1212.cs deleted file mode 100644 index 894738d2a1..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1212.cs +++ /dev/null @@ -1,168 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette1212 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette1212() - { - mappings[0] = EntityType.AcaciaBoat; - mappings[1] = EntityType.AcaciaChestBoat; - mappings[2] = EntityType.Allay; - mappings[3] = EntityType.AreaEffectCloud; - mappings[4] = EntityType.Armadillo; - mappings[5] = EntityType.ArmorStand; - mappings[6] = EntityType.Arrow; - mappings[7] = EntityType.Axolotl; - mappings[8] = EntityType.BambooChestRaft; - mappings[9] = EntityType.BambooRaft; - mappings[10] = EntityType.Bat; - mappings[11] = EntityType.Bee; - mappings[12] = EntityType.BirchBoat; - mappings[13] = EntityType.BirchChestBoat; - mappings[14] = EntityType.Blaze; - mappings[15] = EntityType.BlockDisplay; - mappings[16] = EntityType.Bogged; - mappings[17] = EntityType.Breeze; - mappings[18] = EntityType.BreezeWindCharge; - mappings[19] = EntityType.Camel; - mappings[20] = EntityType.Cat; - mappings[21] = EntityType.CaveSpider; - mappings[22] = EntityType.CherryBoat; - mappings[23] = EntityType.CherryChestBoat; - mappings[24] = EntityType.ChestMinecart; - mappings[25] = EntityType.Chicken; - mappings[26] = EntityType.Cod; - mappings[27] = EntityType.CommandBlockMinecart; - mappings[28] = EntityType.Cow; - mappings[29] = EntityType.Creaking; - mappings[30] = EntityType.CreakingTransient; - mappings[31] = EntityType.Creeper; - mappings[32] = EntityType.DarkOakBoat; - mappings[33] = EntityType.DarkOakChestBoat; - mappings[34] = EntityType.Dolphin; - mappings[35] = EntityType.Donkey; - mappings[36] = EntityType.DragonFireball; - mappings[37] = EntityType.Drowned; - mappings[38] = EntityType.Egg; - mappings[39] = EntityType.ElderGuardian; - mappings[40] = EntityType.Enderman; - mappings[41] = EntityType.Endermite; - mappings[42] = EntityType.EnderDragon; - mappings[43] = EntityType.EnderPearl; - mappings[44] = EntityType.EndCrystal; - mappings[45] = EntityType.Evoker; - mappings[46] = EntityType.EvokerFangs; - mappings[47] = EntityType.ExperienceBottle; - mappings[48] = EntityType.ExperienceOrb; - mappings[49] = EntityType.EyeOfEnder; - mappings[50] = EntityType.FallingBlock; - mappings[51] = EntityType.Fireball; - mappings[52] = EntityType.FireworkRocket; - mappings[53] = EntityType.Fox; - mappings[54] = EntityType.Frog; - mappings[55] = EntityType.FurnaceMinecart; - mappings[56] = EntityType.Ghast; - mappings[57] = EntityType.Giant; - mappings[58] = EntityType.GlowItemFrame; - mappings[59] = EntityType.GlowSquid; - mappings[60] = EntityType.Goat; - mappings[61] = EntityType.Guardian; - mappings[62] = EntityType.Hoglin; - mappings[63] = EntityType.HopperMinecart; - mappings[64] = EntityType.Horse; - mappings[65] = EntityType.Husk; - mappings[66] = EntityType.Illusioner; - mappings[67] = EntityType.Interaction; - mappings[68] = EntityType.IronGolem; - mappings[69] = EntityType.Item; - mappings[70] = EntityType.ItemDisplay; - mappings[71] = EntityType.ItemFrame; - mappings[72] = EntityType.JungleBoat; - mappings[73] = EntityType.JungleChestBoat; - mappings[74] = EntityType.LeashKnot; - mappings[75] = EntityType.LightningBolt; - mappings[76] = EntityType.Llama; - mappings[77] = EntityType.LlamaSpit; - mappings[78] = EntityType.MagmaCube; - mappings[79] = EntityType.MangroveBoat; - mappings[80] = EntityType.MangroveChestBoat; - mappings[81] = EntityType.Marker; - mappings[82] = EntityType.Minecart; - mappings[83] = EntityType.Mooshroom; - mappings[84] = EntityType.Mule; - mappings[85] = EntityType.OakBoat; - mappings[86] = EntityType.OakChestBoat; - mappings[87] = EntityType.Ocelot; - mappings[88] = EntityType.OminousItemSpawner; - mappings[89] = EntityType.Painting; - mappings[90] = EntityType.PaleOakBoat; - mappings[91] = EntityType.PaleOakChestBoat; - mappings[92] = EntityType.Panda; - mappings[93] = EntityType.Parrot; - mappings[94] = EntityType.Phantom; - mappings[95] = EntityType.Pig; - mappings[96] = EntityType.Piglin; - mappings[97] = EntityType.PiglinBrute; - mappings[98] = EntityType.Pillager; - mappings[99] = EntityType.PolarBear; - mappings[100] = EntityType.Potion; - mappings[101] = EntityType.Pufferfish; - mappings[102] = EntityType.Rabbit; - mappings[103] = EntityType.Ravager; - mappings[104] = EntityType.Salmon; - mappings[105] = EntityType.Sheep; - mappings[106] = EntityType.Shulker; - mappings[107] = EntityType.ShulkerBullet; - mappings[108] = EntityType.Silverfish; - mappings[109] = EntityType.Skeleton; - mappings[110] = EntityType.SkeletonHorse; - mappings[111] = EntityType.Slime; - mappings[112] = EntityType.SmallFireball; - mappings[113] = EntityType.Sniffer; - mappings[114] = EntityType.Snowball; - mappings[115] = EntityType.SnowGolem; - mappings[116] = EntityType.SpawnerMinecart; - mappings[117] = EntityType.SpectralArrow; - mappings[118] = EntityType.Spider; - mappings[119] = EntityType.SpruceBoat; - mappings[120] = EntityType.SpruceChestBoat; - mappings[121] = EntityType.Squid; - mappings[122] = EntityType.Stray; - mappings[123] = EntityType.Strider; - mappings[124] = EntityType.Tadpole; - mappings[125] = EntityType.TextDisplay; - mappings[126] = EntityType.Tnt; - mappings[127] = EntityType.TntMinecart; - mappings[128] = EntityType.TraderLlama; - mappings[129] = EntityType.Trident; - mappings[130] = EntityType.TropicalFish; - mappings[131] = EntityType.Turtle; - mappings[132] = EntityType.Vex; - mappings[133] = EntityType.Villager; - mappings[134] = EntityType.Vindicator; - mappings[135] = EntityType.WanderingTrader; - mappings[136] = EntityType.Warden; - mappings[137] = EntityType.WindCharge; - mappings[138] = EntityType.Witch; - mappings[139] = EntityType.Wither; - mappings[140] = EntityType.WitherSkeleton; - mappings[141] = EntityType.WitherSkull; - mappings[142] = EntityType.Wolf; - mappings[143] = EntityType.Zoglin; - mappings[144] = EntityType.Zombie; - mappings[145] = EntityType.ZombieHorse; - mappings[146] = EntityType.ZombieVillager; - mappings[147] = EntityType.ZombifiedPiglin; - mappings[148] = EntityType.Player; - mappings[149] = EntityType.FishingBobber; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1214.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette1214.cs deleted file mode 100644 index dd047d1dba..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1214.cs +++ /dev/null @@ -1,168 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette1214 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette1214() - { - mappings[0] = EntityType.AcaciaBoat; - mappings[1] = EntityType.AcaciaChestBoat; - mappings[2] = EntityType.Allay; - mappings[3] = EntityType.AreaEffectCloud; - mappings[4] = EntityType.Armadillo; - mappings[5] = EntityType.ArmorStand; - mappings[6] = EntityType.Arrow; - mappings[7] = EntityType.Axolotl; - mappings[8] = EntityType.BambooChestRaft; - mappings[9] = EntityType.BambooRaft; - mappings[10] = EntityType.Bat; - mappings[11] = EntityType.Bee; - mappings[12] = EntityType.BirchBoat; - mappings[13] = EntityType.BirchChestBoat; - mappings[14] = EntityType.Blaze; - mappings[15] = EntityType.BlockDisplay; - mappings[16] = EntityType.Bogged; - mappings[17] = EntityType.Breeze; - mappings[18] = EntityType.BreezeWindCharge; - mappings[19] = EntityType.Camel; - mappings[20] = EntityType.Cat; - mappings[21] = EntityType.CaveSpider; - mappings[22] = EntityType.CherryBoat; - mappings[23] = EntityType.CherryChestBoat; - mappings[24] = EntityType.ChestMinecart; - mappings[25] = EntityType.Chicken; - mappings[26] = EntityType.Cod; - mappings[27] = EntityType.CommandBlockMinecart; - mappings[28] = EntityType.Cow; - mappings[29] = EntityType.Creaking; - // CreakingTransient removed in 1.21.4 - mappings[30] = EntityType.Creeper; - mappings[31] = EntityType.DarkOakBoat; - mappings[32] = EntityType.DarkOakChestBoat; - mappings[33] = EntityType.Dolphin; - mappings[34] = EntityType.Donkey; - mappings[35] = EntityType.DragonFireball; - mappings[36] = EntityType.Drowned; - mappings[37] = EntityType.Egg; - mappings[38] = EntityType.ElderGuardian; - mappings[39] = EntityType.Enderman; - mappings[40] = EntityType.Endermite; - mappings[41] = EntityType.EnderDragon; - mappings[42] = EntityType.EnderPearl; - mappings[43] = EntityType.EndCrystal; - mappings[44] = EntityType.Evoker; - mappings[45] = EntityType.EvokerFangs; - mappings[46] = EntityType.ExperienceBottle; - mappings[47] = EntityType.ExperienceOrb; - mappings[48] = EntityType.EyeOfEnder; - mappings[49] = EntityType.FallingBlock; - mappings[50] = EntityType.Fireball; - mappings[51] = EntityType.FireworkRocket; - mappings[52] = EntityType.Fox; - mappings[53] = EntityType.Frog; - mappings[54] = EntityType.FurnaceMinecart; - mappings[55] = EntityType.Ghast; - mappings[56] = EntityType.Giant; - mappings[57] = EntityType.GlowItemFrame; - mappings[58] = EntityType.GlowSquid; - mappings[59] = EntityType.Goat; - mappings[60] = EntityType.Guardian; - mappings[61] = EntityType.Hoglin; - mappings[62] = EntityType.HopperMinecart; - mappings[63] = EntityType.Horse; - mappings[64] = EntityType.Husk; - mappings[65] = EntityType.Illusioner; - mappings[66] = EntityType.Interaction; - mappings[67] = EntityType.IronGolem; - mappings[68] = EntityType.Item; - mappings[69] = EntityType.ItemDisplay; - mappings[70] = EntityType.ItemFrame; - mappings[71] = EntityType.JungleBoat; - mappings[72] = EntityType.JungleChestBoat; - mappings[73] = EntityType.LeashKnot; - mappings[74] = EntityType.LightningBolt; - mappings[75] = EntityType.Llama; - mappings[76] = EntityType.LlamaSpit; - mappings[77] = EntityType.MagmaCube; - mappings[78] = EntityType.MangroveBoat; - mappings[79] = EntityType.MangroveChestBoat; - mappings[80] = EntityType.Marker; - mappings[81] = EntityType.Minecart; - mappings[82] = EntityType.Mooshroom; - mappings[83] = EntityType.Mule; - mappings[84] = EntityType.OakBoat; - mappings[85] = EntityType.OakChestBoat; - mappings[86] = EntityType.Ocelot; - mappings[87] = EntityType.OminousItemSpawner; - mappings[88] = EntityType.Painting; - mappings[89] = EntityType.PaleOakBoat; - mappings[90] = EntityType.PaleOakChestBoat; - mappings[91] = EntityType.Panda; - mappings[92] = EntityType.Parrot; - mappings[93] = EntityType.Phantom; - mappings[94] = EntityType.Pig; - mappings[95] = EntityType.Piglin; - mappings[96] = EntityType.PiglinBrute; - mappings[97] = EntityType.Pillager; - mappings[98] = EntityType.PolarBear; - mappings[99] = EntityType.Potion; - mappings[100] = EntityType.Pufferfish; - mappings[101] = EntityType.Rabbit; - mappings[102] = EntityType.Ravager; - mappings[103] = EntityType.Salmon; - mappings[104] = EntityType.Sheep; - mappings[105] = EntityType.Shulker; - mappings[106] = EntityType.ShulkerBullet; - mappings[107] = EntityType.Silverfish; - mappings[108] = EntityType.Skeleton; - mappings[109] = EntityType.SkeletonHorse; - mappings[110] = EntityType.Slime; - mappings[111] = EntityType.SmallFireball; - mappings[112] = EntityType.Sniffer; - mappings[113] = EntityType.Snowball; - mappings[114] = EntityType.SnowGolem; - mappings[115] = EntityType.SpawnerMinecart; - mappings[116] = EntityType.SpectralArrow; - mappings[117] = EntityType.Spider; - mappings[118] = EntityType.SpruceBoat; - mappings[119] = EntityType.SpruceChestBoat; - mappings[120] = EntityType.Squid; - mappings[121] = EntityType.Stray; - mappings[122] = EntityType.Strider; - mappings[123] = EntityType.Tadpole; - mappings[124] = EntityType.TextDisplay; - mappings[125] = EntityType.Tnt; - mappings[126] = EntityType.TntMinecart; - mappings[127] = EntityType.TraderLlama; - mappings[128] = EntityType.Trident; - mappings[129] = EntityType.TropicalFish; - mappings[130] = EntityType.Turtle; - mappings[131] = EntityType.Vex; - mappings[132] = EntityType.Villager; - mappings[133] = EntityType.Vindicator; - mappings[134] = EntityType.WanderingTrader; - mappings[135] = EntityType.Warden; - mappings[136] = EntityType.WindCharge; - mappings[137] = EntityType.Witch; - mappings[138] = EntityType.Wither; - mappings[139] = EntityType.WitherSkeleton; - mappings[140] = EntityType.WitherSkull; - mappings[141] = EntityType.Wolf; - mappings[142] = EntityType.Zoglin; - mappings[143] = EntityType.Zombie; - mappings[144] = EntityType.ZombieHorse; - mappings[145] = EntityType.ZombieVillager; - mappings[146] = EntityType.ZombifiedPiglin; - mappings[147] = EntityType.Player; - mappings[148] = EntityType.FishingBobber; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1215.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette1215.cs deleted file mode 100644 index ebfe6ab381..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1215.cs +++ /dev/null @@ -1,168 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette1215 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette1215() - { - mappings[0] = EntityType.AcaciaBoat; - mappings[1] = EntityType.AcaciaChestBoat; - mappings[2] = EntityType.Allay; - mappings[3] = EntityType.AreaEffectCloud; - mappings[4] = EntityType.Armadillo; - mappings[5] = EntityType.ArmorStand; - mappings[6] = EntityType.Arrow; - mappings[7] = EntityType.Axolotl; - mappings[8] = EntityType.BambooChestRaft; - mappings[9] = EntityType.BambooRaft; - mappings[10] = EntityType.Bat; - mappings[11] = EntityType.Bee; - mappings[12] = EntityType.BirchBoat; - mappings[13] = EntityType.BirchChestBoat; - mappings[14] = EntityType.Blaze; - mappings[15] = EntityType.BlockDisplay; - mappings[16] = EntityType.Bogged; - mappings[17] = EntityType.Breeze; - mappings[18] = EntityType.BreezeWindCharge; - mappings[19] = EntityType.Camel; - mappings[20] = EntityType.Cat; - mappings[21] = EntityType.CaveSpider; - mappings[22] = EntityType.CherryBoat; - mappings[23] = EntityType.CherryChestBoat; - mappings[24] = EntityType.ChestMinecart; - mappings[25] = EntityType.Chicken; - mappings[26] = EntityType.Cod; - mappings[27] = EntityType.CommandBlockMinecart; - mappings[28] = EntityType.Cow; - mappings[29] = EntityType.Creaking; - mappings[30] = EntityType.Creeper; - mappings[31] = EntityType.DarkOakBoat; - mappings[32] = EntityType.DarkOakChestBoat; - mappings[33] = EntityType.Dolphin; - mappings[34] = EntityType.Donkey; - mappings[35] = EntityType.DragonFireball; - mappings[36] = EntityType.Drowned; - mappings[37] = EntityType.Egg; - mappings[38] = EntityType.ElderGuardian; - mappings[39] = EntityType.Enderman; - mappings[40] = EntityType.Endermite; - mappings[41] = EntityType.EnderDragon; - mappings[42] = EntityType.EnderPearl; - mappings[43] = EntityType.EndCrystal; - mappings[44] = EntityType.Evoker; - mappings[45] = EntityType.EvokerFangs; - mappings[46] = EntityType.ExperienceBottle; - mappings[47] = EntityType.ExperienceOrb; - mappings[48] = EntityType.EyeOfEnder; - mappings[49] = EntityType.FallingBlock; - mappings[50] = EntityType.Fireball; - mappings[51] = EntityType.FireworkRocket; - mappings[52] = EntityType.Fox; - mappings[53] = EntityType.Frog; - mappings[54] = EntityType.FurnaceMinecart; - mappings[55] = EntityType.Ghast; - mappings[56] = EntityType.Giant; - mappings[57] = EntityType.GlowItemFrame; - mappings[58] = EntityType.GlowSquid; - mappings[59] = EntityType.Goat; - mappings[60] = EntityType.Guardian; - mappings[61] = EntityType.Hoglin; - mappings[62] = EntityType.HopperMinecart; - mappings[63] = EntityType.Horse; - mappings[64] = EntityType.Husk; - mappings[65] = EntityType.Illusioner; - mappings[66] = EntityType.Interaction; - mappings[67] = EntityType.IronGolem; - mappings[68] = EntityType.Item; - mappings[69] = EntityType.ItemDisplay; - mappings[70] = EntityType.ItemFrame; - mappings[71] = EntityType.JungleBoat; - mappings[72] = EntityType.JungleChestBoat; - mappings[73] = EntityType.LeashKnot; - mappings[74] = EntityType.LightningBolt; - mappings[75] = EntityType.Llama; - mappings[76] = EntityType.LlamaSpit; - mappings[77] = EntityType.MagmaCube; - mappings[78] = EntityType.MangroveBoat; - mappings[79] = EntityType.MangroveChestBoat; - mappings[80] = EntityType.Marker; - mappings[81] = EntityType.Minecart; - mappings[82] = EntityType.Mooshroom; - mappings[83] = EntityType.Mule; - mappings[84] = EntityType.OakBoat; - mappings[85] = EntityType.OakChestBoat; - mappings[86] = EntityType.Ocelot; - mappings[87] = EntityType.OminousItemSpawner; - mappings[88] = EntityType.Painting; - mappings[89] = EntityType.PaleOakBoat; - mappings[90] = EntityType.PaleOakChestBoat; - mappings[91] = EntityType.Panda; - mappings[92] = EntityType.Parrot; - mappings[93] = EntityType.Phantom; - mappings[94] = EntityType.Pig; - mappings[95] = EntityType.Piglin; - mappings[96] = EntityType.PiglinBrute; - mappings[97] = EntityType.Pillager; - mappings[98] = EntityType.PolarBear; - mappings[99] = EntityType.SplashPotion; - mappings[100] = EntityType.LingeringPotion; - mappings[101] = EntityType.Pufferfish; - mappings[102] = EntityType.Rabbit; - mappings[103] = EntityType.Ravager; - mappings[104] = EntityType.Salmon; - mappings[105] = EntityType.Sheep; - mappings[106] = EntityType.Shulker; - mappings[107] = EntityType.ShulkerBullet; - mappings[108] = EntityType.Silverfish; - mappings[109] = EntityType.Skeleton; - mappings[110] = EntityType.SkeletonHorse; - mappings[111] = EntityType.Slime; - mappings[112] = EntityType.SmallFireball; - mappings[113] = EntityType.Sniffer; - mappings[114] = EntityType.Snowball; - mappings[115] = EntityType.SnowGolem; - mappings[116] = EntityType.SpawnerMinecart; - mappings[117] = EntityType.SpectralArrow; - mappings[118] = EntityType.Spider; - mappings[119] = EntityType.SpruceBoat; - mappings[120] = EntityType.SpruceChestBoat; - mappings[121] = EntityType.Squid; - mappings[122] = EntityType.Stray; - mappings[123] = EntityType.Strider; - mappings[124] = EntityType.Tadpole; - mappings[125] = EntityType.TextDisplay; - mappings[126] = EntityType.Tnt; - mappings[127] = EntityType.TntMinecart; - mappings[128] = EntityType.TraderLlama; - mappings[129] = EntityType.Trident; - mappings[130] = EntityType.TropicalFish; - mappings[131] = EntityType.Turtle; - mappings[132] = EntityType.Vex; - mappings[133] = EntityType.Villager; - mappings[134] = EntityType.Vindicator; - mappings[135] = EntityType.WanderingTrader; - mappings[136] = EntityType.Warden; - mappings[137] = EntityType.WindCharge; - mappings[138] = EntityType.Witch; - mappings[139] = EntityType.Wither; - mappings[140] = EntityType.WitherSkeleton; - mappings[141] = EntityType.WitherSkull; - mappings[142] = EntityType.Wolf; - mappings[143] = EntityType.Zoglin; - mappings[144] = EntityType.Zombie; - mappings[145] = EntityType.ZombieHorse; - mappings[146] = EntityType.ZombieVillager; - mappings[147] = EntityType.ZombifiedPiglin; - mappings[148] = EntityType.Player; - mappings[149] = EntityType.FishingBobber; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1216.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette1216.cs deleted file mode 100644 index c0cb6b7697..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1216.cs +++ /dev/null @@ -1,169 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette1216 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette1216() - { - mappings[0] = EntityType.AcaciaBoat; - mappings[1] = EntityType.AcaciaChestBoat; - mappings[2] = EntityType.Allay; - mappings[3] = EntityType.AreaEffectCloud; - mappings[4] = EntityType.Armadillo; - mappings[5] = EntityType.ArmorStand; - mappings[6] = EntityType.Arrow; - mappings[7] = EntityType.Axolotl; - mappings[8] = EntityType.BambooChestRaft; - mappings[9] = EntityType.BambooRaft; - mappings[10] = EntityType.Bat; - mappings[11] = EntityType.Bee; - mappings[12] = EntityType.BirchBoat; - mappings[13] = EntityType.BirchChestBoat; - mappings[14] = EntityType.Blaze; - mappings[15] = EntityType.BlockDisplay; - mappings[16] = EntityType.Bogged; - mappings[17] = EntityType.Breeze; - mappings[18] = EntityType.BreezeWindCharge; - mappings[19] = EntityType.Camel; - mappings[20] = EntityType.Cat; - mappings[21] = EntityType.CaveSpider; - mappings[22] = EntityType.CherryBoat; - mappings[23] = EntityType.CherryChestBoat; - mappings[24] = EntityType.ChestMinecart; - mappings[25] = EntityType.Chicken; - mappings[26] = EntityType.Cod; - mappings[27] = EntityType.CommandBlockMinecart; - mappings[28] = EntityType.Cow; - mappings[29] = EntityType.Creaking; - mappings[30] = EntityType.Creeper; - mappings[31] = EntityType.DarkOakBoat; - mappings[32] = EntityType.DarkOakChestBoat; - mappings[33] = EntityType.Dolphin; - mappings[34] = EntityType.Donkey; - mappings[35] = EntityType.DragonFireball; - mappings[36] = EntityType.Drowned; - mappings[37] = EntityType.Egg; - mappings[38] = EntityType.ElderGuardian; - mappings[39] = EntityType.Enderman; - mappings[40] = EntityType.Endermite; - mappings[41] = EntityType.EnderDragon; - mappings[42] = EntityType.EnderPearl; - mappings[43] = EntityType.EndCrystal; - mappings[44] = EntityType.Evoker; - mappings[45] = EntityType.EvokerFangs; - mappings[46] = EntityType.ExperienceBottle; - mappings[47] = EntityType.ExperienceOrb; - mappings[48] = EntityType.EyeOfEnder; - mappings[49] = EntityType.FallingBlock; - mappings[50] = EntityType.Fireball; - mappings[51] = EntityType.FireworkRocket; - mappings[52] = EntityType.Fox; - mappings[53] = EntityType.Frog; - mappings[54] = EntityType.FurnaceMinecart; - mappings[55] = EntityType.Ghast; - mappings[56] = EntityType.HappyGhast; - mappings[57] = EntityType.Giant; - mappings[58] = EntityType.GlowItemFrame; - mappings[59] = EntityType.GlowSquid; - mappings[60] = EntityType.Goat; - mappings[61] = EntityType.Guardian; - mappings[62] = EntityType.Hoglin; - mappings[63] = EntityType.HopperMinecart; - mappings[64] = EntityType.Horse; - mappings[65] = EntityType.Husk; - mappings[66] = EntityType.Illusioner; - mappings[67] = EntityType.Interaction; - mappings[68] = EntityType.IronGolem; - mappings[69] = EntityType.Item; - mappings[70] = EntityType.ItemDisplay; - mappings[71] = EntityType.ItemFrame; - mappings[72] = EntityType.JungleBoat; - mappings[73] = EntityType.JungleChestBoat; - mappings[74] = EntityType.LeashKnot; - mappings[75] = EntityType.LightningBolt; - mappings[76] = EntityType.Llama; - mappings[77] = EntityType.LlamaSpit; - mappings[78] = EntityType.MagmaCube; - mappings[79] = EntityType.MangroveBoat; - mappings[80] = EntityType.MangroveChestBoat; - mappings[81] = EntityType.Marker; - mappings[82] = EntityType.Minecart; - mappings[83] = EntityType.Mooshroom; - mappings[84] = EntityType.Mule; - mappings[85] = EntityType.OakBoat; - mappings[86] = EntityType.OakChestBoat; - mappings[87] = EntityType.Ocelot; - mappings[88] = EntityType.OminousItemSpawner; - mappings[89] = EntityType.Painting; - mappings[90] = EntityType.PaleOakBoat; - mappings[91] = EntityType.PaleOakChestBoat; - mappings[92] = EntityType.Panda; - mappings[93] = EntityType.Parrot; - mappings[94] = EntityType.Phantom; - mappings[95] = EntityType.Pig; - mappings[96] = EntityType.Piglin; - mappings[97] = EntityType.PiglinBrute; - mappings[98] = EntityType.Pillager; - mappings[99] = EntityType.PolarBear; - mappings[100] = EntityType.SplashPotion; - mappings[101] = EntityType.LingeringPotion; - mappings[102] = EntityType.Pufferfish; - mappings[103] = EntityType.Rabbit; - mappings[104] = EntityType.Ravager; - mappings[105] = EntityType.Salmon; - mappings[106] = EntityType.Sheep; - mappings[107] = EntityType.Shulker; - mappings[108] = EntityType.ShulkerBullet; - mappings[109] = EntityType.Silverfish; - mappings[110] = EntityType.Skeleton; - mappings[111] = EntityType.SkeletonHorse; - mappings[112] = EntityType.Slime; - mappings[113] = EntityType.SmallFireball; - mappings[114] = EntityType.Sniffer; - mappings[115] = EntityType.Snowball; - mappings[116] = EntityType.SnowGolem; - mappings[117] = EntityType.SpawnerMinecart; - mappings[118] = EntityType.SpectralArrow; - mappings[119] = EntityType.Spider; - mappings[120] = EntityType.SpruceBoat; - mappings[121] = EntityType.SpruceChestBoat; - mappings[122] = EntityType.Squid; - mappings[123] = EntityType.Stray; - mappings[124] = EntityType.Strider; - mappings[125] = EntityType.Tadpole; - mappings[126] = EntityType.TextDisplay; - mappings[127] = EntityType.Tnt; - mappings[128] = EntityType.TntMinecart; - mappings[129] = EntityType.TraderLlama; - mappings[130] = EntityType.Trident; - mappings[131] = EntityType.TropicalFish; - mappings[132] = EntityType.Turtle; - mappings[133] = EntityType.Vex; - mappings[134] = EntityType.Villager; - mappings[135] = EntityType.Vindicator; - mappings[136] = EntityType.WanderingTrader; - mappings[137] = EntityType.Warden; - mappings[138] = EntityType.WindCharge; - mappings[139] = EntityType.Witch; - mappings[140] = EntityType.Wither; - mappings[141] = EntityType.WitherSkeleton; - mappings[142] = EntityType.WitherSkull; - mappings[143] = EntityType.Wolf; - mappings[144] = EntityType.Zoglin; - mappings[145] = EntityType.Zombie; - mappings[146] = EntityType.ZombieHorse; - mappings[147] = EntityType.ZombieVillager; - mappings[148] = EntityType.ZombifiedPiglin; - mappings[149] = EntityType.Player; - mappings[150] = EntityType.FishingBobber; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1219.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette1219.cs deleted file mode 100644 index 448bdbcc14..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette1219.cs +++ /dev/null @@ -1,171 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette1219 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette1219() - { - mappings[0] = EntityType.AcaciaBoat; - mappings[1] = EntityType.AcaciaChestBoat; - mappings[2] = EntityType.Allay; - mappings[3] = EntityType.AreaEffectCloud; - mappings[4] = EntityType.Armadillo; - mappings[5] = EntityType.ArmorStand; - mappings[6] = EntityType.Arrow; - mappings[7] = EntityType.Axolotl; - mappings[8] = EntityType.BambooChestRaft; - mappings[9] = EntityType.BambooRaft; - mappings[10] = EntityType.Bat; - mappings[11] = EntityType.Bee; - mappings[12] = EntityType.BirchBoat; - mappings[13] = EntityType.BirchChestBoat; - mappings[14] = EntityType.Blaze; - mappings[15] = EntityType.BlockDisplay; - mappings[16] = EntityType.Bogged; - mappings[17] = EntityType.Breeze; - mappings[18] = EntityType.BreezeWindCharge; - mappings[19] = EntityType.Camel; - mappings[20] = EntityType.Cat; - mappings[21] = EntityType.CaveSpider; - mappings[22] = EntityType.CherryBoat; - mappings[23] = EntityType.CherryChestBoat; - mappings[24] = EntityType.ChestMinecart; - mappings[25] = EntityType.Chicken; - mappings[26] = EntityType.Cod; - mappings[27] = EntityType.CopperGolem; - mappings[28] = EntityType.CommandBlockMinecart; - mappings[29] = EntityType.Cow; - mappings[30] = EntityType.Creaking; - mappings[31] = EntityType.Creeper; - mappings[32] = EntityType.DarkOakBoat; - mappings[33] = EntityType.DarkOakChestBoat; - mappings[34] = EntityType.Dolphin; - mappings[35] = EntityType.Donkey; - mappings[36] = EntityType.DragonFireball; - mappings[37] = EntityType.Drowned; - mappings[38] = EntityType.Egg; - mappings[39] = EntityType.ElderGuardian; - mappings[40] = EntityType.Enderman; - mappings[41] = EntityType.Endermite; - mappings[42] = EntityType.EnderDragon; - mappings[43] = EntityType.EnderPearl; - mappings[44] = EntityType.EndCrystal; - mappings[45] = EntityType.Evoker; - mappings[46] = EntityType.EvokerFangs; - mappings[47] = EntityType.ExperienceBottle; - mappings[48] = EntityType.ExperienceOrb; - mappings[49] = EntityType.EyeOfEnder; - mappings[50] = EntityType.FallingBlock; - mappings[51] = EntityType.Fireball; - mappings[52] = EntityType.FireworkRocket; - mappings[53] = EntityType.Fox; - mappings[54] = EntityType.Frog; - mappings[55] = EntityType.FurnaceMinecart; - mappings[56] = EntityType.Ghast; - mappings[57] = EntityType.HappyGhast; - mappings[58] = EntityType.Giant; - mappings[59] = EntityType.GlowItemFrame; - mappings[60] = EntityType.GlowSquid; - mappings[61] = EntityType.Goat; - mappings[62] = EntityType.Guardian; - mappings[63] = EntityType.Hoglin; - mappings[64] = EntityType.HopperMinecart; - mappings[65] = EntityType.Horse; - mappings[66] = EntityType.Husk; - mappings[67] = EntityType.Illusioner; - mappings[68] = EntityType.Interaction; - mappings[69] = EntityType.IronGolem; - mappings[70] = EntityType.Item; - mappings[71] = EntityType.ItemDisplay; - mappings[72] = EntityType.ItemFrame; - mappings[73] = EntityType.JungleBoat; - mappings[74] = EntityType.JungleChestBoat; - mappings[75] = EntityType.LeashKnot; - mappings[76] = EntityType.LightningBolt; - mappings[77] = EntityType.Llama; - mappings[78] = EntityType.LlamaSpit; - mappings[79] = EntityType.MagmaCube; - mappings[80] = EntityType.MangroveBoat; - mappings[81] = EntityType.MangroveChestBoat; - mappings[82] = EntityType.Mannequin; - mappings[83] = EntityType.Marker; - mappings[84] = EntityType.Minecart; - mappings[85] = EntityType.Mooshroom; - mappings[86] = EntityType.Mule; - mappings[87] = EntityType.OakBoat; - mappings[88] = EntityType.OakChestBoat; - mappings[89] = EntityType.Ocelot; - mappings[90] = EntityType.OminousItemSpawner; - mappings[91] = EntityType.Painting; - mappings[92] = EntityType.PaleOakBoat; - mappings[93] = EntityType.PaleOakChestBoat; - mappings[94] = EntityType.Panda; - mappings[95] = EntityType.Parrot; - mappings[96] = EntityType.Phantom; - mappings[97] = EntityType.Pig; - mappings[98] = EntityType.Piglin; - mappings[99] = EntityType.PiglinBrute; - mappings[100] = EntityType.Pillager; - mappings[101] = EntityType.PolarBear; - mappings[102] = EntityType.SplashPotion; - mappings[103] = EntityType.LingeringPotion; - mappings[104] = EntityType.Pufferfish; - mappings[105] = EntityType.Rabbit; - mappings[106] = EntityType.Ravager; - mappings[107] = EntityType.Salmon; - mappings[108] = EntityType.Sheep; - mappings[109] = EntityType.Shulker; - mappings[110] = EntityType.ShulkerBullet; - mappings[111] = EntityType.Silverfish; - mappings[112] = EntityType.Skeleton; - mappings[113] = EntityType.SkeletonHorse; - mappings[114] = EntityType.Slime; - mappings[115] = EntityType.SmallFireball; - mappings[116] = EntityType.Sniffer; - mappings[117] = EntityType.Snowball; - mappings[118] = EntityType.SnowGolem; - mappings[119] = EntityType.SpawnerMinecart; - mappings[120] = EntityType.SpectralArrow; - mappings[121] = EntityType.Spider; - mappings[122] = EntityType.SpruceBoat; - mappings[123] = EntityType.SpruceChestBoat; - mappings[124] = EntityType.Squid; - mappings[125] = EntityType.Stray; - mappings[126] = EntityType.Strider; - mappings[127] = EntityType.Tadpole; - mappings[128] = EntityType.TextDisplay; - mappings[129] = EntityType.Tnt; - mappings[130] = EntityType.TntMinecart; - mappings[131] = EntityType.TraderLlama; - mappings[132] = EntityType.Trident; - mappings[133] = EntityType.TropicalFish; - mappings[134] = EntityType.Turtle; - mappings[135] = EntityType.Vex; - mappings[136] = EntityType.Villager; - mappings[137] = EntityType.Vindicator; - mappings[138] = EntityType.WanderingTrader; - mappings[139] = EntityType.Warden; - mappings[140] = EntityType.WindCharge; - mappings[141] = EntityType.Witch; - mappings[142] = EntityType.Wither; - mappings[143] = EntityType.WitherSkeleton; - mappings[144] = EntityType.WitherSkull; - mappings[145] = EntityType.Wolf; - mappings[146] = EntityType.Zoglin; - mappings[147] = EntityType.Zombie; - mappings[148] = EntityType.ZombieHorse; - mappings[149] = EntityType.ZombieVillager; - mappings[150] = EntityType.ZombifiedPiglin; - mappings[151] = EntityType.Player; - mappings[152] = EntityType.FishingBobber; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette18.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette18.cs deleted file mode 100644 index d85ed48a31..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette18.cs +++ /dev/null @@ -1,114 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - /// - /// Defines mappings of entitiy IDs for 1.8 - /// Manually typed out by Milutinke :( - /// Data source: https://pokechu22.github.io/Burger/1.8.json and https://wiki.vg/index.php?title=Entity_metadata&oldid=7415 - /// - public class EntityPalette18 : EntityPalette - { - private static Dictionary mappingsObjects = new() - { - // https://wiki.vg/Entity_metadata#Objects - { 1, EntityType.Boat }, - { 2, EntityType.Item }, - { 3, EntityType.AreaEffectCloud }, - { 10, EntityType.Minecart }, - { 50, EntityType.Tnt }, - { 51, EntityType.EndCrystal }, - { 60, EntityType.Arrow }, - { 61, EntityType.Snowball }, - { 62, EntityType.Egg }, - { 63, EntityType.Fireball }, - { 64, EntityType.SmallFireball }, - { 65, EntityType.EnderPearl }, - { 66, EntityType.WitherSkull }, - { 70, EntityType.FallingBlock }, - { 71, EntityType.ItemFrame }, - { 72, EntityType.EyeOfEnder }, - { 73, EntityType.Egg }, - { 75, EntityType.ExperienceBottle }, - { 76, EntityType.FireworkRocket }, - { 77, EntityType.LeashKnot }, - { 78, EntityType.ArmorStand }, - { 90, EntityType.FishingBobber }, - { 91, EntityType.SpectralArrow }, - { 93, EntityType.DragonFireball }, - }; - - private static Dictionary mappingsMobs = new() { - { 1, EntityType.Item }, - { 2, EntityType.ExperienceOrb }, - { 8, EntityType.LeashKnot }, - { 9, EntityType.Painting }, - { 10, EntityType.Arrow }, - { 11, EntityType.Snowball }, - { 12, EntityType.Fireball }, - { 13, EntityType.SmallFireball }, - { 14, EntityType.EnderPearl }, - { 15, EntityType.EyeOfEnder }, - { 16, EntityType.Potion }, - { 17, EntityType.ExperienceBottle }, - { 18, EntityType.ItemFrame }, - { 19, EntityType.WitherSkull }, - { 20, EntityType.Tnt }, - { 21, EntityType.FallingBlock }, - { 22, EntityType.FireworkRocket }, - { 30, EntityType.ArmorStand }, - { 40, EntityType.CommandBlockMinecart }, - { 41, EntityType.Boat }, - { 42, EntityType.Minecart }, - { 43, EntityType.ChestMinecart }, - { 44, EntityType.FurnaceMinecart }, - { 45, EntityType.TntMinecart }, - { 46, EntityType.HopperMinecart }, - { 47, EntityType.SpawnerMinecart }, - { 50, EntityType.Creeper }, - { 51, EntityType.Skeleton }, - { 52, EntityType.Spider }, - { 53, EntityType.Giant }, - { 54, EntityType.Zombie }, - { 55, EntityType.Slime }, - { 56, EntityType.Ghast }, - { 57, EntityType.ZombifiedPiglin }, - { 58, EntityType.Enderman }, - { 59, EntityType.CaveSpider }, - { 60, EntityType.Silverfish }, - { 61, EntityType.Blaze }, - { 62, EntityType.MagmaCube }, - { 63, EntityType.EnderDragon }, - { 64, EntityType.Wither }, - { 65, EntityType.Bat }, - { 66, EntityType.Witch }, - { 67, EntityType.Endermite }, - { 68, EntityType.Guardian }, - { 90, EntityType.Pig }, - { 91, EntityType.Sheep }, - { 92, EntityType.Cow }, - { 93, EntityType.Chicken }, - { 94, EntityType.Squid }, - { 95, EntityType.Wolf }, - { 96, EntityType.Mooshroom }, - { 97, EntityType.SnowGolem }, - { 98, EntityType.Cat }, - { 99, EntityType.IronGolem }, - { 100, EntityType.Horse }, - { 101, EntityType.Rabbit }, - { 120, EntityType.Villager }, - { 200, EntityType.EndCrystal } - }; - - protected override Dictionary GetDict() - { - return mappingsMobs; - } - - protected override Dictionary GetDictNonLiving() - { - return mappingsObjects; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette261.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette261.cs deleted file mode 100644 index a33d0b3b46..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette261.cs +++ /dev/null @@ -1,175 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette261 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette261() - { - mappings[0] = EntityType.AcaciaBoat; - mappings[1] = EntityType.AcaciaChestBoat; - mappings[2] = EntityType.Allay; - mappings[3] = EntityType.AreaEffectCloud; - mappings[4] = EntityType.Armadillo; - mappings[5] = EntityType.ArmorStand; - mappings[6] = EntityType.Arrow; - mappings[7] = EntityType.Axolotl; - mappings[8] = EntityType.BambooChestRaft; - mappings[9] = EntityType.BambooRaft; - mappings[10] = EntityType.Bat; - mappings[11] = EntityType.Bee; - mappings[12] = EntityType.BirchBoat; - mappings[13] = EntityType.BirchChestBoat; - mappings[14] = EntityType.Blaze; - mappings[15] = EntityType.BlockDisplay; - mappings[16] = EntityType.Bogged; - mappings[17] = EntityType.Breeze; - mappings[18] = EntityType.BreezeWindCharge; - mappings[19] = EntityType.Camel; - mappings[20] = EntityType.CamelHusk; - mappings[21] = EntityType.Cat; - mappings[22] = EntityType.CaveSpider; - mappings[23] = EntityType.CherryBoat; - mappings[24] = EntityType.CherryChestBoat; - mappings[25] = EntityType.ChestMinecart; - mappings[26] = EntityType.Chicken; - mappings[27] = EntityType.Cod; - mappings[28] = EntityType.CopperGolem; - mappings[29] = EntityType.CommandBlockMinecart; - mappings[30] = EntityType.Cow; - mappings[31] = EntityType.Creaking; - mappings[32] = EntityType.Creeper; - mappings[33] = EntityType.DarkOakBoat; - mappings[34] = EntityType.DarkOakChestBoat; - mappings[35] = EntityType.Dolphin; - mappings[36] = EntityType.Donkey; - mappings[37] = EntityType.DragonFireball; - mappings[38] = EntityType.Drowned; - mappings[39] = EntityType.Egg; - mappings[40] = EntityType.ElderGuardian; - mappings[41] = EntityType.Enderman; - mappings[42] = EntityType.Endermite; - mappings[43] = EntityType.EnderDragon; - mappings[44] = EntityType.EnderPearl; - mappings[45] = EntityType.EndCrystal; - mappings[46] = EntityType.Evoker; - mappings[47] = EntityType.EvokerFangs; - mappings[48] = EntityType.ExperienceBottle; - mappings[49] = EntityType.ExperienceOrb; - mappings[50] = EntityType.EyeOfEnder; - mappings[51] = EntityType.FallingBlock; - mappings[52] = EntityType.Fireball; - mappings[53] = EntityType.FireworkRocket; - mappings[54] = EntityType.Fox; - mappings[55] = EntityType.Frog; - mappings[56] = EntityType.FurnaceMinecart; - mappings[57] = EntityType.Ghast; - mappings[58] = EntityType.HappyGhast; - mappings[59] = EntityType.Giant; - mappings[60] = EntityType.GlowItemFrame; - mappings[61] = EntityType.GlowSquid; - mappings[62] = EntityType.Goat; - mappings[63] = EntityType.Guardian; - mappings[64] = EntityType.Hoglin; - mappings[65] = EntityType.HopperMinecart; - mappings[66] = EntityType.Horse; - mappings[67] = EntityType.Husk; - mappings[68] = EntityType.Illusioner; - mappings[69] = EntityType.Interaction; - mappings[70] = EntityType.IronGolem; - mappings[71] = EntityType.Item; - mappings[72] = EntityType.ItemDisplay; - mappings[73] = EntityType.ItemFrame; - mappings[74] = EntityType.JungleBoat; - mappings[75] = EntityType.JungleChestBoat; - mappings[76] = EntityType.LeashKnot; - mappings[77] = EntityType.LightningBolt; - mappings[78] = EntityType.Llama; - mappings[79] = EntityType.LlamaSpit; - mappings[80] = EntityType.MagmaCube; - mappings[81] = EntityType.MangroveBoat; - mappings[82] = EntityType.MangroveChestBoat; - mappings[83] = EntityType.Mannequin; - mappings[84] = EntityType.Marker; - mappings[85] = EntityType.Minecart; - mappings[86] = EntityType.Mooshroom; - mappings[87] = EntityType.Mule; - mappings[88] = EntityType.Nautilus; - mappings[89] = EntityType.OakBoat; - mappings[90] = EntityType.OakChestBoat; - mappings[91] = EntityType.Ocelot; - mappings[92] = EntityType.OminousItemSpawner; - mappings[93] = EntityType.Painting; - mappings[94] = EntityType.PaleOakBoat; - mappings[95] = EntityType.PaleOakChestBoat; - mappings[96] = EntityType.Panda; - mappings[97] = EntityType.Parched; - mappings[98] = EntityType.Parrot; - mappings[99] = EntityType.Phantom; - mappings[100] = EntityType.Pig; - mappings[101] = EntityType.Piglin; - mappings[102] = EntityType.PiglinBrute; - mappings[103] = EntityType.Pillager; - mappings[104] = EntityType.PolarBear; - mappings[105] = EntityType.SplashPotion; - mappings[106] = EntityType.LingeringPotion; - mappings[107] = EntityType.Pufferfish; - mappings[108] = EntityType.Rabbit; - mappings[109] = EntityType.Ravager; - mappings[110] = EntityType.Salmon; - mappings[111] = EntityType.Sheep; - mappings[112] = EntityType.Shulker; - mappings[113] = EntityType.ShulkerBullet; - mappings[114] = EntityType.Silverfish; - mappings[115] = EntityType.Skeleton; - mappings[116] = EntityType.SkeletonHorse; - mappings[117] = EntityType.Slime; - mappings[118] = EntityType.SmallFireball; - mappings[119] = EntityType.Sniffer; - mappings[120] = EntityType.Snowball; - mappings[121] = EntityType.SnowGolem; - mappings[122] = EntityType.SpawnerMinecart; - mappings[123] = EntityType.SpectralArrow; - mappings[124] = EntityType.Spider; - mappings[125] = EntityType.SpruceBoat; - mappings[126] = EntityType.SpruceChestBoat; - mappings[127] = EntityType.Squid; - mappings[128] = EntityType.Stray; - mappings[129] = EntityType.Strider; - mappings[130] = EntityType.Tadpole; - mappings[131] = EntityType.TextDisplay; - mappings[132] = EntityType.Tnt; - mappings[133] = EntityType.TntMinecart; - mappings[134] = EntityType.TraderLlama; - mappings[135] = EntityType.Trident; - mappings[136] = EntityType.TropicalFish; - mappings[137] = EntityType.Turtle; - mappings[138] = EntityType.Vex; - mappings[139] = EntityType.Villager; - mappings[140] = EntityType.Vindicator; - mappings[141] = EntityType.WanderingTrader; - mappings[142] = EntityType.Warden; - mappings[143] = EntityType.WindCharge; - mappings[144] = EntityType.Witch; - mappings[145] = EntityType.Wither; - mappings[146] = EntityType.WitherSkeleton; - mappings[147] = EntityType.WitherSkull; - mappings[148] = EntityType.Wolf; - mappings[149] = EntityType.Zoglin; - mappings[150] = EntityType.Zombie; - mappings[151] = EntityType.ZombieHorse; - mappings[152] = EntityType.ZombieNautilus; - mappings[153] = EntityType.ZombieVillager; - mappings[154] = EntityType.ZombifiedPiglin; - mappings[155] = EntityType.Player; - mappings[156] = EntityType.FishingBobber; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPalette262.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPalette262.cs deleted file mode 100644 index 326ec108d4..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPalette262.cs +++ /dev/null @@ -1,176 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - public class EntityPalette262 : EntityPalette - { - private static readonly Dictionary mappings = new(); - - static EntityPalette262() - { - mappings[0] = EntityType.AcaciaBoat; - mappings[1] = EntityType.AcaciaChestBoat; - mappings[2] = EntityType.Allay; - mappings[3] = EntityType.AreaEffectCloud; - mappings[4] = EntityType.Armadillo; - mappings[5] = EntityType.ArmorStand; - mappings[6] = EntityType.Arrow; - mappings[7] = EntityType.Axolotl; - mappings[8] = EntityType.BambooChestRaft; - mappings[9] = EntityType.BambooRaft; - mappings[10] = EntityType.Bat; - mappings[11] = EntityType.Bee; - mappings[12] = EntityType.BirchBoat; - mappings[13] = EntityType.BirchChestBoat; - mappings[14] = EntityType.Blaze; - mappings[15] = EntityType.BlockDisplay; - mappings[16] = EntityType.Bogged; - mappings[17] = EntityType.Breeze; - mappings[18] = EntityType.BreezeWindCharge; - mappings[19] = EntityType.Camel; - mappings[20] = EntityType.CamelHusk; - mappings[21] = EntityType.Cat; - mappings[22] = EntityType.CaveSpider; - mappings[23] = EntityType.CherryBoat; - mappings[24] = EntityType.CherryChestBoat; - mappings[25] = EntityType.ChestMinecart; - mappings[26] = EntityType.Chicken; - mappings[27] = EntityType.Cod; - mappings[28] = EntityType.CopperGolem; - mappings[29] = EntityType.CommandBlockMinecart; - mappings[30] = EntityType.Cow; - mappings[31] = EntityType.Creaking; - mappings[32] = EntityType.Creeper; - mappings[33] = EntityType.DarkOakBoat; - mappings[34] = EntityType.DarkOakChestBoat; - mappings[35] = EntityType.Dolphin; - mappings[36] = EntityType.Donkey; - mappings[37] = EntityType.DragonFireball; - mappings[38] = EntityType.Drowned; - mappings[39] = EntityType.Egg; - mappings[40] = EntityType.ElderGuardian; - mappings[41] = EntityType.Enderman; - mappings[42] = EntityType.Endermite; - mappings[43] = EntityType.EnderDragon; - mappings[44] = EntityType.EnderPearl; - mappings[45] = EntityType.EndCrystal; - mappings[46] = EntityType.Evoker; - mappings[47] = EntityType.EvokerFangs; - mappings[48] = EntityType.ExperienceBottle; - mappings[49] = EntityType.ExperienceOrb; - mappings[50] = EntityType.EyeOfEnder; - mappings[51] = EntityType.FallingBlock; - mappings[52] = EntityType.Fireball; - mappings[53] = EntityType.FireworkRocket; - mappings[54] = EntityType.Fox; - mappings[55] = EntityType.Frog; - mappings[56] = EntityType.FurnaceMinecart; - mappings[57] = EntityType.Ghast; - mappings[58] = EntityType.HappyGhast; - mappings[59] = EntityType.Giant; - mappings[60] = EntityType.GlowItemFrame; - mappings[61] = EntityType.GlowSquid; - mappings[62] = EntityType.Goat; - mappings[63] = EntityType.Guardian; - mappings[64] = EntityType.Hoglin; - mappings[65] = EntityType.HopperMinecart; - mappings[66] = EntityType.Horse; - mappings[67] = EntityType.Husk; - mappings[68] = EntityType.Illusioner; - mappings[69] = EntityType.Interaction; - mappings[70] = EntityType.IronGolem; - mappings[71] = EntityType.Item; - mappings[72] = EntityType.ItemDisplay; - mappings[73] = EntityType.ItemFrame; - mappings[74] = EntityType.JungleBoat; - mappings[75] = EntityType.JungleChestBoat; - mappings[76] = EntityType.LeashKnot; - mappings[77] = EntityType.LightningBolt; - mappings[78] = EntityType.Llama; - mappings[79] = EntityType.LlamaSpit; - mappings[80] = EntityType.MagmaCube; - mappings[81] = EntityType.MangroveBoat; - mappings[82] = EntityType.MangroveChestBoat; - mappings[83] = EntityType.Mannequin; - mappings[84] = EntityType.Marker; - mappings[85] = EntityType.Minecart; - mappings[86] = EntityType.Mooshroom; - mappings[87] = EntityType.Mule; - mappings[88] = EntityType.Nautilus; - mappings[89] = EntityType.OakBoat; - mappings[90] = EntityType.OakChestBoat; - mappings[91] = EntityType.Ocelot; - mappings[92] = EntityType.OminousItemSpawner; - mappings[93] = EntityType.Painting; - mappings[94] = EntityType.PaleOakBoat; - mappings[95] = EntityType.PaleOakChestBoat; - mappings[96] = EntityType.Panda; - mappings[97] = EntityType.Parched; - mappings[98] = EntityType.Parrot; - mappings[99] = EntityType.Phantom; - mappings[100] = EntityType.Pig; - mappings[101] = EntityType.Piglin; - mappings[102] = EntityType.PiglinBrute; - mappings[103] = EntityType.Pillager; - mappings[104] = EntityType.PolarBear; - mappings[105] = EntityType.SplashPotion; - mappings[106] = EntityType.LingeringPotion; - mappings[107] = EntityType.Pufferfish; - mappings[108] = EntityType.Rabbit; - mappings[109] = EntityType.Ravager; - mappings[110] = EntityType.Salmon; - mappings[111] = EntityType.Sheep; - mappings[112] = EntityType.Shulker; - mappings[113] = EntityType.ShulkerBullet; - mappings[114] = EntityType.Silverfish; - mappings[115] = EntityType.Skeleton; - mappings[116] = EntityType.SkeletonHorse; - mappings[117] = EntityType.Slime; - mappings[118] = EntityType.SmallFireball; - mappings[119] = EntityType.Sniffer; - mappings[120] = EntityType.Snowball; - mappings[121] = EntityType.SnowGolem; - mappings[122] = EntityType.SpawnerMinecart; - mappings[123] = EntityType.SpectralArrow; - mappings[124] = EntityType.Spider; - mappings[125] = EntityType.SpruceBoat; - mappings[126] = EntityType.SpruceChestBoat; - mappings[127] = EntityType.Squid; - mappings[128] = EntityType.Stray; - mappings[129] = EntityType.Strider; - mappings[130] = EntityType.SulfurCube; - mappings[131] = EntityType.Tadpole; - mappings[132] = EntityType.TextDisplay; - mappings[133] = EntityType.Tnt; - mappings[134] = EntityType.TntMinecart; - mappings[135] = EntityType.TraderLlama; - mappings[136] = EntityType.Trident; - mappings[137] = EntityType.TropicalFish; - mappings[138] = EntityType.Turtle; - mappings[139] = EntityType.Vex; - mappings[140] = EntityType.Villager; - mappings[141] = EntityType.Vindicator; - mappings[142] = EntityType.WanderingTrader; - mappings[143] = EntityType.Warden; - mappings[144] = EntityType.WindCharge; - mappings[145] = EntityType.Witch; - mappings[146] = EntityType.Wither; - mappings[147] = EntityType.WitherSkeleton; - mappings[148] = EntityType.WitherSkull; - mappings[149] = EntityType.Wolf; - mappings[150] = EntityType.Zoglin; - mappings[151] = EntityType.Zombie; - mappings[152] = EntityType.ZombieHorse; - mappings[153] = EntityType.ZombieNautilus; - mappings[154] = EntityType.ZombieVillager; - mappings[155] = EntityType.ZombifiedPiglin; - mappings[156] = EntityType.Player; - mappings[157] = EntityType.FishingBobber; - } - - protected override Dictionary GetDict() - { - return mappings; - } - } -} diff --git a/MinecraftClient/Mapping/EntityPalettes/EntityPaletteGenerator.cs b/MinecraftClient/Mapping/EntityPalettes/EntityPaletteGenerator.cs deleted file mode 100644 index 2ac06fcb23..0000000000 --- a/MinecraftClient/Mapping/EntityPalettes/EntityPaletteGenerator.cs +++ /dev/null @@ -1,23 +0,0 @@ -using MinecraftClient.Protocol; - -namespace MinecraftClient.Mapping.EntityPalettes -{ - /// - /// Generator for MCC ItemType enumeration - /// - public static class EntityPaletteGenerator - { - /// - /// Generate EntityType.cs from Minecraft registries.json - /// - /// path to registries.json - /// - /// java -cp minecraft_server.jar net.minecraft.data.Main --reports - /// For 1.18+: java -DbundlerMainClass=net.minecraft.data.Main -jar minecraft_server.jar --reports - /// - public static void GenerateEntityTypes(string registriesJsonFile) - { - DataTypeGenerator.GenerateEnumWithPalette(registriesJsonFile, "minecraft:entity_type", "EntityType", "MinecraftClient.Mapping", "EntityPalette", "MinecraftClient.Mapping.EntityPalettes"); - } - } -} diff --git a/MinecraftClient/Mapping/EntityPose.cs b/MinecraftClient/Mapping/EntityPose.cs deleted file mode 100644 index 1690b089fe..0000000000 --- a/MinecraftClient/Mapping/EntityPose.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace MinecraftClient.Mapping -{ - public enum EntityPose - { - Standing = 0, - FallFlying = 1, - Sleeping = 2, - Swimming = 3, - SpinAttack = 4, - Sneaking = 5, - Dying = 6, - } -} diff --git a/MinecraftClient/Mapping/EntityType.cs b/MinecraftClient/Mapping/EntityType.cs deleted file mode 100644 index 60db886907..0000000000 --- a/MinecraftClient/Mapping/EntityType.cs +++ /dev/null @@ -1,180 +0,0 @@ -namespace MinecraftClient.Mapping -{ - /// - /// Represents Minecraft Entity Types - /// - /// - /// Generated from registries.json using the --generator flag on the client - /// Typical steps to handle new entity IDs for newer Minecraft versions: - /// 1. Generate registries.json using data reporting on Vanilla Minecraft (https://wiki.vg/Data_Generators) or download it from: https://github.com/PixiGeko/Minecraft-generated-data - /// 2. Generate temporary EntityTypeXXX.cs and EntityPaletteXXX.cs using the --generator flag on the client - /// 3. Perform a diff with existing versions, add missing entries in EntityType.cs and EntityTypeExtensions.cs - /// 4. If existing entity IDs were not randomized by Mojang, simply add missing entries to the latest existing EntityPaletteXXX.cs - /// 5. If existing entity IDs were randomized, add a new palette as EntityPaletteXXX.cs into the codebase (worst case) - /// - public enum EntityType - { - AcaciaBoat, - AcaciaChestBoat, - Allay, - AreaEffectCloud, - Armadillo, - ArmorStand, - Arrow, - Axolotl, - BambooChestRaft, - BambooRaft, - Bat, - Bee, - BirchBoat, - BirchChestBoat, - Blaze, - BlockDisplay, - Boat, - Bogged, - Breeze, - BreezeWindCharge, - Camel, - CamelHusk, - Cat, - CaveSpider, - CherryBoat, - CherryChestBoat, - ChestBoat, - ChestMinecart, - Chicken, - Cod, - CommandBlockMinecart, - CopperGolem, - Cow, - Creaking, - CreakingTransient, - Creeper, - DarkOakBoat, - DarkOakChestBoat, - Dolphin, - Donkey, - DragonFireball, - Drowned, - Egg, - ElderGuardian, - EndCrystal, - EnderDragon, - EnderPearl, - Enderman, - Endermite, - Evoker, - EvokerFangs, - ExperienceBottle, - ExperienceOrb, - EyeOfEnder, - FallingBlock, - Fireball, - FireworkRocket, - FishingBobber, - Fox, - Frog, - FurnaceMinecart, - Ghast, - Giant, - GlowItemFrame, - GlowSquid, - Goat, - Guardian, - HappyGhast, - Hoglin, - HopperMinecart, - Horse, - Husk, - Illusioner, - Interaction, - IronGolem, - Item, - ItemDisplay, - ItemFrame, - JungleBoat, - JungleChestBoat, - LeashKnot, - LightningBolt, - Llama, - LlamaSpit, - MagmaCube, - MangroveBoat, - MangroveChestBoat, - Mannequin, - Marker, - Minecart, - Mooshroom, - Mule, - Nautilus, - OakBoat, - OakChestBoat, - Ocelot, - OminousItemSpawner, - Painting, - PaleOakBoat, - PaleOakChestBoat, - Panda, - Parched, - Parrot, - Phantom, - Pig, - Piglin, - PiglinBrute, - Pillager, - Player, - PolarBear, - SplashPotion, - LingeringPotion, - Potion, - Pufferfish, - Rabbit, - Ravager, - Salmon, - Sheep, - Shulker, - ShulkerBullet, - Silverfish, - Skeleton, - SkeletonHorse, - Slime, - SmallFireball, - Sniffer, - SnowGolem, - Snowball, - SpawnerMinecart, - SpectralArrow, - Spider, - SpruceBoat, - SpruceChestBoat, - Squid, - Stray, - Strider, - SulfurCube, - Tadpole, - TextDisplay, - Tnt, - TntMinecart, - TraderLlama, - Trident, - TropicalFish, - Turtle, - Vex, - Villager, - Vindicator, - WanderingTrader, - Warden, - WindCharge, - Witch, - Wither, - WitherSkeleton, - WitherSkull, - Wolf, - Zoglin, - Zombie, - ZombieHorse, - ZombieNautilus, - ZombieVillager, - ZombifiedPiglin, - } -} diff --git a/MinecraftClient/Mapping/EntityTypeExtensions.cs b/MinecraftClient/Mapping/EntityTypeExtensions.cs deleted file mode 100644 index 0e7a85fb4d..0000000000 --- a/MinecraftClient/Mapping/EntityTypeExtensions.cs +++ /dev/null @@ -1,124 +0,0 @@ -namespace MinecraftClient.Mapping -{ - public static class EntityTypeExtensions - { - /// - /// Return TRUE if the Entity is an hostile mob - /// - /// New mobs added in newer Minecraft versions might be absent from the list - /// TRUE if hostile - public static bool IsHostile(this EntityType e) - { - switch (e) - { - case EntityType.Blaze: - case EntityType.CaveSpider: - case EntityType.Creeper: - case EntityType.Drowned: - case EntityType.Enderman: - case EntityType.Endermite: - case EntityType.Evoker: - case EntityType.Ghast: - case EntityType.Guardian: - case EntityType.Hoglin: - case EntityType.Husk: - case EntityType.Illusioner: - case EntityType.MagmaCube: - case EntityType.Phantom: - case EntityType.Piglin: - case EntityType.PiglinBrute: - case EntityType.Pillager: - case EntityType.Ravager: - case EntityType.Shulker: - case EntityType.Silverfish: - case EntityType.Skeleton: - case EntityType.Slime: - case EntityType.Spider: - case EntityType.Stray: - case EntityType.Vex: - case EntityType.Vindicator: - case EntityType.Witch: - case EntityType.WitherSkeleton: - case EntityType.Zoglin: - case EntityType.Zombie: - case EntityType.ZombieVillager: - case EntityType.ZombifiedPiglin: - return true; - default: - return false; - } - } - - /// - /// Return TRUE if the Entity is a passive mob - /// - /// New mobs added in newer Minecraft versions might be absent from the list - /// TRUE if a passive mob - public static bool IsPassive(this EntityType e) - { - switch (e) - { - case EntityType.Bat: - case EntityType.Cat: - case EntityType.Chicken: - case EntityType.Cod: - case EntityType.Cow: - case EntityType.Dolphin: - case EntityType.Donkey: - case EntityType.Fox: - case EntityType.Frog: - case EntityType.GlowSquid: - case EntityType.Goat: - case EntityType.Horse: - case EntityType.IronGolem: - case EntityType.Llama: - case EntityType.Mooshroom: - case EntityType.Mule: - case EntityType.Ocelot: - case EntityType.Panda: - case EntityType.Parrot: - case EntityType.Pig: - case EntityType.Salmon: - case EntityType.Sheep: - case EntityType.Silverfish: - case EntityType.SnowGolem: - case EntityType.Squid: - case EntityType.Turtle: - case EntityType.Villager: - case EntityType.WanderingTrader: - case EntityType.Wolf: - case EntityType.ZombieHorse: - case EntityType.SkeletonHorse: - return true; - default: - return false; - } - } - - /// - /// Indicates whether the entity type contains an inner item - /// - /// TRUE if item holder (Item Entity, ItemFrame...) - public static bool ContainsItem(this EntityType e) - { - switch (e) - { - case EntityType.GlowItemFrame: - case EntityType.Item: - case EntityType.ItemFrame: - case EntityType.EyeOfEnder: - case EntityType.Egg: - case EntityType.EnderPearl: - case EntityType.Potion: - case EntityType.SplashPotion: - case EntityType.LingeringPotion: - case EntityType.Fireball: - case EntityType.FireworkRocket: - return true; - default: - return false; - } - ; - } - } -} diff --git a/MinecraftClient/Mapping/InteractType.cs b/MinecraftClient/Mapping/InteractType.cs deleted file mode 100644 index f54a1014e5..0000000000 --- a/MinecraftClient/Mapping/InteractType.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace MinecraftClient.Mapping -{ - public enum InteractType - { - Interact = 0, - Attack = 1, - InteractAt = 2, - } -} diff --git a/MinecraftClient/Mapping/Location.cs b/MinecraftClient/Mapping/Location.cs deleted file mode 100644 index abfda749d8..0000000000 --- a/MinecraftClient/Mapping/Location.cs +++ /dev/null @@ -1,440 +0,0 @@ -using System; -using System.Globalization; -using System.Runtime.CompilerServices; - -namespace MinecraftClient.Mapping -{ - /// - /// Represents a location into a Minecraft world - /// - public struct Location - { - public static readonly Location Zero = new(0, 0, 0); - - /// - /// The X Coordinate - /// - public double X; - - /// - /// The Y Coordinate (vertical) - /// - public double Y; - - /// - /// The Z coordinate - /// - public double Z; - - /// - /// Identifies whether the coordinates are absolute or relative. - /// true for relative coordinates, false for absolute coordinates. - /// X-axis: ((Status & (1 << 0)) > 0) - /// Y-axis: ((Status & (1 << 1)) > 0) - /// Z-axis: ((Status & (1 << 2)) > 0) - /// - public byte Status; - - /// - /// Create a new location - /// - public Location(double x, double y, double z) - { - X = x; - Y = y; - Z = z; - Status = 0; - } - - /// - /// Create a new location - /// - public Location(double x, double y, double z, byte status) - { - X = x; - Y = y; - Z = z; - Status = status; - } - - /// - /// Create a new location - /// - public Location(Location loc) - { - X = loc.X; - Y = loc.Y; - Z = loc.Z; - Status = loc.Status; - } - - /// - /// Create a new location - /// - /// Location of the chunk into the world - /// Location of the chunk into the world - /// Location of the block into the chunk - /// Location of the block into the world - /// Location of the block into the chunk - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Location(int chunkX, int chunkZ, int blockX, int blockY, int blockZ) - { - X = chunkX * Chunk.SizeX + blockX; - Y = blockY; - Z = chunkZ * Chunk.SizeZ + blockZ; - Status = 0; - } - - public Location ToAbsolute(Location based) - { - if ((Status & (1 << 0)) > 0) - X += based.X; - if ((Status & (1 << 1)) > 0) - Y += based.Y; - if ((Status & (1 << 2)) > 0) - Z += based.Z; - Status = 0; - return this; - } - - /// - /// Parse location from the string. - /// throw FormatException if the parsing fails. - /// - /// The string representation of the X-axis coordinate. - /// The string representation of the Y-axis coordinate. - /// The string representation of the Z-axis coordinate. - /// The location represented by the string. - public static Location Parse(string x, string y, string z) - { - Location.TryParse(x, y, z, out Location? res); - if (res is null) - throw new FormatException(); - else - return (Location)res; - } - - public static bool TryParse(string x, string y, string z, out Location? location) - { - string[] coord_str = [x.Trim(), y.Trim(), z.Trim()]; - double[] coord_res = new double[3]; - - for (int i = 0; i < 3; ++i) - { - if (!double.TryParse(coord_str[i], NumberStyles.Any, CultureInfo.CurrentCulture, out coord_res[i])) - { - location = null; - return false; - } - } - - location = new Location(coord_res[0], coord_res[1], coord_res[2]); - return true; - } - - /// - /// Parse location from the string (relative coordinate representation is supported). - /// throw FormatException if the parsing fails. - /// - /// Relative position base point. - /// The string representation of the X-axis coordinate. - /// The string representation of the Y-axis coordinate. - /// The string representation of the Z-axis coordinate. - /// The location represented by the string. - public static Location Parse(Location current, string x, string y, string z) - { - Location.TryParse(current, x, y, z, out Location? res); - if (res is null) - throw new FormatException(); - else - return (Location)res; - } - - public static bool TryParse(Location current, string x, string y, string z, out Location? location) - { - string[] coord_str = [x.Trim(), y.Trim(), z.Trim()]; - double[] coord_res = new double[3]; - double[] coord_cur = [current.X, current.Y, current.Z]; - - for (int i = 0; i < 3; ++i) - { - if (coord_str[i].StartsWith('~')) - { - if (coord_str[i].Length > 1) - { - if (!double.TryParse(coord_str[i][1..], NumberStyles.Any, CultureInfo.CurrentCulture, out coord_res[i])) - { - location = null; - return false; - } - coord_res[i] += coord_cur[i]; - } - else - coord_res[i] = coord_cur[i]; - } - else - { - if (!double.TryParse(coord_str[i], NumberStyles.Any, CultureInfo.CurrentCulture, out coord_res[i])) - { - location = null; - return false; - } - } - } - - location = new Location(coord_res[0], coord_res[1], coord_res[2]); - return true; - } - - /// - /// Round coordinates - /// - /// New location - public Location ToFloor() - { - return new Location(Math.Floor(X), Math.Floor(Y), Math.Floor(Z)); - } - - /// - /// Get the center coordinates - /// - /// New location - public Location ToCenter() - { - return new Location(Math.Floor(X) + 0.5, Y, Math.Floor(Z) + 0.5); - } - - /// - /// The X index of the corresponding chunk in the world - /// - public int ChunkX - { - get - { - return (int)Math.Floor(X / Chunk.SizeX); - } - } - - /// - /// The Y index of the corresponding chunk in the world - /// - public int ChunkY - { - get - { - return (int)Math.Floor((Y - World.GetDimension().minY) / Chunk.SizeY); - } - } - - /// - /// The Z index of the corresponding chunk in the world - /// - public int ChunkZ - { - get - { - return (int)Math.Floor(Z / Chunk.SizeZ); - } - } - - /// - /// The X index of the corresponding block in the corresponding chunk of the world - /// - public int ChunkBlockX - { - get - { - return ((int)Math.Floor(X) % Chunk.SizeX + Chunk.SizeX) % Chunk.SizeX; - } - } - - /// - /// The Y index of the corresponding block in the corresponding chunk of the world - /// - public int ChunkBlockY - { - get - { - return ((int)Math.Floor(Y) % Chunk.SizeY + Chunk.SizeY) % Chunk.SizeY; - } - } - - /// - /// The Z index of the corresponding block in the corresponding chunk of the world - /// - public int ChunkBlockZ - { - get - { - return ((int)Math.Floor(Z) % Chunk.SizeZ + Chunk.SizeZ) % Chunk.SizeZ; - } - } - - /// - /// Get a squared distance to the specified location - /// - /// Other location for computing distance - /// Distance to the specified location, without using a square root - public double DistanceSquared(Location location) - { - return ((X - location.X) * (X - location.X)) - + ((Y - location.Y) * (Y - location.Y)) - + ((Z - location.Z) * (Z - location.Z)); - } - - /// - /// Get exact distance to the specified location - /// - /// Other location for computing distance - /// Distance to the specified location, with square root so lower performances - public double Distance(Location location) - { - return Math.Sqrt(DistanceSquared(location)); - } - - /// - /// Considering the current location as Feet location, calculate Eyes location - /// - /// Player Eyes location - public Location EyesLocation() - { - return this + new Location(0, 1.62, 0); - } - - /// - /// Compare two locations. Locations are equals if the integer part of their coordinates are equals. - /// - /// Object to compare to - /// TRUE if the locations are equals - public override bool Equals(object? obj) - { - if (obj is null) - return false; - if (obj is Location location) - { - return ((int)X) == ((int)location.X) - && ((int)Y) == ((int)location.Y) - && ((int)Z) == ((int)location.Z); - } - return false; - } - - /// - /// Compare two locations. Locations are equals if the integer part of their coordinates are equals. - /// - /// First location to compare - /// Second location to compare - /// TRUE if the locations are equals - public static bool operator ==(Location loc1, Location loc2) - { - return loc1.Equals(loc2); - } - - /// - /// Compare two locations. Locations are not equals if the integer part of their coordinates are not equals. - /// - /// First location to compare - /// Second location to compare - /// TRUE if the locations are equals - public static bool operator !=(Location loc1, Location loc2) - { - return !loc1.Equals(loc2); - } - - /// - /// Sums two locations and returns the result. - /// - /// - /// Thrown if one of the provided location is null - /// - /// First location to sum - /// Second location to sum - /// Sum of the two locations - public static Location operator +(Location loc1, Location loc2) - { - return new Location - ( - loc1.X + loc2.X, - loc1.Y + loc2.Y, - loc1.Z + loc2.Z - ); - } - - /// - /// Substract a location to another - /// - /// - /// Thrown if one of the provided location is null - /// - /// First location - /// Location to substract to the first one - /// Sum of the two locations - public static Location operator -(Location loc1, Location loc2) - { - return new Location - ( - loc1.X - loc2.X, - loc1.Y - loc2.Y, - loc1.Z - loc2.Z - ); - } - - /// - /// Multiply a location by a scalar value - /// - /// Location to multiply - /// Scalar value - /// Product of the location and the scalar value - public static Location operator *(Location loc, double val) - { - return new Location - ( - loc.X * val, - loc.Y * val, - loc.Z * val - ); - } - - /// - /// Divide a location by a scalar value - /// - /// Location to divide - /// Scalar value - /// Result of the division - public static Location operator /(Location loc, double val) - { - return new Location - ( - loc.X / val, - loc.Y / val, - loc.Z / val - ); - } - - /// - /// DO NOT USE. Defined to comply with C# requirements requiring a GetHashCode() when overriding Equals() or == - /// - /// - /// A modulo will be applied if the location is outside the following ranges: - /// X: -4096 to +4095 - /// Y: -32 to +31 - /// Z: -4096 to +4095 - /// - /// A simplified version of the location - public override int GetHashCode() - { - return (((int)X) & ~((~0) << 13)) << 19 - | (((int)Y) & ~((~0) << 13)) << 13 - | (((int)Z) & ~((~0) << 06)) << 00; - } - - /// - /// Convert the location into a string representation - /// - /// String representation of the location - public override string ToString() - { - return String.Format("X:{0:0.00} Y:{1:0.00} Z:{2:0.00}", X, Y, Z); - } - } -} diff --git a/MinecraftClient/Mapping/MapIcon.cs b/MinecraftClient/Mapping/MapIcon.cs deleted file mode 100644 index e525f1a985..0000000000 --- a/MinecraftClient/Mapping/MapIcon.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace MinecraftClient.Mapping -{ - public record MapIcon - { - public MapIconType Type { get; set; } - public byte X { get; set; } - public byte Z { get; set; } - public byte Direction { get; set; } - public string? DisplayName { get; set; } = null; - } -} diff --git a/MinecraftClient/Mapping/MapIconType.cs b/MinecraftClient/Mapping/MapIconType.cs deleted file mode 100644 index 125527e549..0000000000 --- a/MinecraftClient/Mapping/MapIconType.cs +++ /dev/null @@ -1,33 +0,0 @@ -namespace MinecraftClient.Mapping -{ - public enum MapIconType - { - White_Arrow = 0, - Green_Arrow, - Red_Arrow, - Blue_Arrow, - White_Cross, - Red_Pointer, - White_Circle, - Small_White_Circle, - Mansion, - Temple, - White_Banner, - Orange_Banner, - Magenta_Banner, - Light_Blue_Banner, - Yellow_Banner, - Lime_Banner, - Pink_Banner, - Gray_Banner, - Light_Gray_Banner, - Cyan_Banner, - Purple_Banner, - Blue_Banner, - Brown_Banner, - Green_Banner, - Red_Banner, - Black_Banner, - Treasure_Marker - } -} diff --git a/MinecraftClient/Mapping/Material.cs b/MinecraftClient/Mapping/Material.cs deleted file mode 100644 index 6404fdb184..0000000000 --- a/MinecraftClient/Mapping/Material.cs +++ /dev/null @@ -1,1215 +0,0 @@ -namespace MinecraftClient.Mapping -{ - /// - /// Represents Minecraft Materials - /// - /// - /// Generated from blocks.json using the --generator flag on the client - /// Typical steps to handle new blocks for newer Minecraft versions: - /// 1. Generate blocks.json using data reporting on Vanilla Minecraft (https://wiki.vg/Data_Generators) or download it from: https://github.com/PixiGeko/Minecraft-generated-data - /// 2. Generate temporary MaterialXXX.cs and PaletteXXX.cs using the --generator flag on the client - /// 3. Perform a diff with existing versions, add missing entries in Material.cs and MaterialExtensions.cs - /// 4. If existing state IDs were not randomized by Mojang, simply add missing state entries to Palette113.cs - /// 5. If existing state IDs were randomized, add a new palette as PaletteXXX.cs into the codebase (worst case) - /// - public enum Material - { - AcaciaButton, - AcaciaDoor, - AcaciaFence, - AcaciaFenceGate, - AcaciaHangingSign, - AcaciaLeaves, - AcaciaLog, - AcaciaPlanks, - AcaciaPressurePlate, - AcaciaSapling, - AcaciaShelf, - AcaciaSign, - AcaciaSlab, - AcaciaStairs, - AcaciaTrapdoor, - AcaciaWallHangingSign, - AcaciaWallSign, - AcaciaWood, - ActivatorRail, - Air, - Allium, - AmethystBlock, - AmethystCluster, - AncientDebris, - Andesite, - AndesiteSlab, - AndesiteStairs, - AndesiteWall, - Anvil, - AttachedMelonStem, - AttachedPumpkinStem, - Azalea, - AzaleaLeaves, - AzureBluet, - Bamboo, - BambooBlock, - BambooButton, - BambooDoor, - BambooFence, - BambooFenceGate, - BambooHangingSign, - BambooMosaic, - BambooMosaicSlab, - BambooMosaicStairs, - BambooPlanks, - BambooPressurePlate, - BambooSapling, - BambooShelf, - BambooSign, - BambooSlab, - BambooStairs, - BambooTrapdoor, - BambooWallHangingSign, - BambooWallSign, - Barrel, - Barrier, - Basalt, - Beacon, - Bedrock, - BeeNest, - Beehive, - Beetroots, - Bell, - BigDripleaf, - BigDripleafStem, - BirchButton, - BirchDoor, - BirchFence, - BirchFenceGate, - BirchHangingSign, - BirchLeaves, - BirchLog, - BirchPlanks, - BirchPressurePlate, - BirchSapling, - BirchShelf, - BirchSign, - BirchSlab, - BirchStairs, - BirchTrapdoor, - BirchWallHangingSign, - BirchWallSign, - BirchWood, - BlackBanner, - BlackBed, - BlackCandle, - BlackCandleCake, - BlackCarpet, - BlackConcrete, - BlackConcretePowder, - BlackGlazedTerracotta, - BlackShulkerBox, - BlackStainedGlass, - BlackStainedGlassPane, - BlackTerracotta, - BlackWallBanner, - BlackWool, - Blackstone, - BlackstoneSlab, - BlackstoneStairs, - BlackstoneWall, - BlastFurnace, - BlueBanner, - BlueBed, - BlueCandle, - BlueCandleCake, - BlueCarpet, - BlueConcrete, - BlueConcretePowder, - BlueGlazedTerracotta, - BlueIce, - BlueOrchid, - BlueShulkerBox, - BlueStainedGlass, - BlueStainedGlassPane, - BlueTerracotta, - BlueWallBanner, - BlueWool, - BoneBlock, - Bookshelf, - BrainCoral, - BrainCoralBlock, - BrainCoralFan, - BrainCoralWallFan, - BrewingStand, - BrickSlab, - BrickStairs, - BrickWall, - Bricks, - BrownBanner, - BrownBed, - BrownCandle, - BrownCandleCake, - BrownCarpet, - BrownConcrete, - BrownConcretePowder, - BrownGlazedTerracotta, - BrownMushroom, - BrownMushroomBlock, - BrownShulkerBox, - BrownStainedGlass, - BrownStainedGlassPane, - BrownTerracotta, - BrownWallBanner, - BrownWool, - BubbleColumn, - BubbleCoral, - BubbleCoralBlock, - BubbleCoralFan, - BubbleCoralWallFan, - BuddingAmethyst, - Bush, - Cactus, - CactusFlower, - Cake, - Calcite, - CalibratedSculkSensor, - Campfire, - Candle, - CandleCake, - Carrots, - CartographyTable, - CarvedPumpkin, - Cauldron, - CaveAir, - CaveVines, - CaveVinesPlant, - Chain, - ChainCommandBlock, - CherryButton, - CherryDoor, - CherryFence, - CherryFenceGate, - CherryHangingSign, - CherryLeaves, - CherryLog, - CherryPlanks, - CherryPressurePlate, - CherrySapling, - CherryShelf, - CherrySign, - CherrySlab, - CherryStairs, - CherryTrapdoor, - CherryWallHangingSign, - CherryWallSign, - CherryWood, - Chest, - ChippedAnvil, - ChiseledBookshelf, - ChiseledCinnabar, - ChiseledCopper, - ChiseledDeepslate, - ChiseledNetherBricks, - ChiseledPolishedBlackstone, - ChiseledQuartzBlock, - ChiseledRedSandstone, - ChiseledResinBricks, - ChiseledSandstone, - ChiseledStoneBricks, - ChiseledSulfur, - ChiseledTuff, - ChiseledTuffBricks, - ChorusFlower, - ChorusPlant, - Cinnabar, - CinnabarBrickSlab, - CinnabarBrickStairs, - CinnabarBrickWall, - CinnabarBricks, - CinnabarSlab, - CinnabarStairs, - CinnabarWall, - Clay, - ClosedEyeblossom, - CoalBlock, - CoalOre, - CoarseDirt, - CobbledDeepslate, - CobbledDeepslateSlab, - CobbledDeepslateStairs, - CobbledDeepslateWall, - Cobblestone, - CobblestoneSlab, - CobblestoneStairs, - CobblestoneWall, - Cobweb, - Cocoa, - CommandBlock, - Comparator, - Composter, - Conduit, - CopperBars, - CopperBlock, - CopperBulb, - CopperChain, - CopperChest, - CopperDoor, - CopperGolemStatue, - CopperGrate, - CopperLantern, - CopperOre, - CopperTorch, - CopperTrapdoor, - CopperWallTorch, - Cornflower, - CrackedDeepslateBricks, - CrackedDeepslateTiles, - CrackedNetherBricks, - CrackedPolishedBlackstoneBricks, - CrackedStoneBricks, - Crafter, - CraftingTable, - CreakingHeart, - CreeperHead, - CreeperWallHead, - CrimsonButton, - CrimsonDoor, - CrimsonFence, - CrimsonFenceGate, - CrimsonFungus, - CrimsonHangingSign, - CrimsonHyphae, - CrimsonNylium, - CrimsonPlanks, - CrimsonPressurePlate, - CrimsonRoots, - CrimsonShelf, - CrimsonSign, - CrimsonSlab, - CrimsonStairs, - CrimsonStem, - CrimsonTrapdoor, - CrimsonWallHangingSign, - CrimsonWallSign, - CryingObsidian, - CutCopper, - CutCopperSlab, - CutCopperStairs, - CutRedSandstone, - CutRedSandstoneSlab, - CutSandstone, - CutSandstoneSlab, - CyanBanner, - CyanBed, - CyanCandle, - CyanCandleCake, - CyanCarpet, - CyanConcrete, - CyanConcretePowder, - CyanGlazedTerracotta, - CyanShulkerBox, - CyanStainedGlass, - CyanStainedGlassPane, - CyanTerracotta, - CyanWallBanner, - CyanWool, - DamagedAnvil, - Dandelion, - DarkOakButton, - DarkOakDoor, - DarkOakFence, - DarkOakFenceGate, - DarkOakHangingSign, - DarkOakLeaves, - DarkOakLog, - DarkOakPlanks, - DarkOakPressurePlate, - DarkOakSapling, - DarkOakShelf, - DarkOakSign, - DarkOakSlab, - DarkOakStairs, - DarkOakTrapdoor, - DarkOakWallHangingSign, - DarkOakWallSign, - DarkOakWood, - DarkPrismarine, - DarkPrismarineSlab, - DarkPrismarineStairs, - DaylightDetector, - DeadBrainCoral, - DeadBrainCoralBlock, - DeadBrainCoralFan, - DeadBrainCoralWallFan, - DeadBubbleCoral, - DeadBubbleCoralBlock, - DeadBubbleCoralFan, - DeadBubbleCoralWallFan, - DeadBush, - DeadFireCoral, - DeadFireCoralBlock, - DeadFireCoralFan, - DeadFireCoralWallFan, - DeadHornCoral, - DeadHornCoralBlock, - DeadHornCoralFan, - DeadHornCoralWallFan, - DeadTubeCoral, - DeadTubeCoralBlock, - DeadTubeCoralFan, - DeadTubeCoralWallFan, - DecoratedPot, - Deepslate, - DeepslateBrickSlab, - DeepslateBrickStairs, - DeepslateBrickWall, - DeepslateBricks, - DeepslateCoalOre, - DeepslateCopperOre, - DeepslateDiamondOre, - DeepslateEmeraldOre, - DeepslateGoldOre, - DeepslateIronOre, - DeepslateLapisOre, - DeepslateRedstoneOre, - DeepslateTileSlab, - DeepslateTileStairs, - DeepslateTileWall, - DeepslateTiles, - DetectorRail, - DiamondBlock, - DiamondOre, - Diorite, - DioriteSlab, - DioriteStairs, - DioriteWall, - Dirt, - DirtPath, - Dispenser, - DragonEgg, - DragonHead, - DragonWallHead, - DriedGhast, - DriedKelpBlock, - DripstoneBlock, - Dropper, - EmeraldBlock, - EmeraldOre, - EnchantingTable, - EndGateway, - EndPortal, - EndPortalFrame, - EndRod, - EndStone, - EndStoneBrickSlab, - EndStoneBrickStairs, - EndStoneBrickWall, - EndStoneBricks, - EnderChest, - ExposedChiseledCopper, - ExposedCopper, - ExposedCopperBars, - ExposedCopperBulb, - ExposedCopperChain, - ExposedCopperChest, - ExposedCopperDoor, - ExposedCopperGolemStatue, - ExposedCopperGrate, - ExposedCopperLantern, - ExposedCopperTrapdoor, - ExposedCutCopper, - ExposedCutCopperSlab, - ExposedCutCopperStairs, - ExposedLightningRod, - Farmland, - Fern, - Fire, - FireCoral, - FireCoralBlock, - FireCoralFan, - FireCoralWallFan, - FireflyBush, - FletchingTable, - FlowerPot, - FloweringAzalea, - FloweringAzaleaLeaves, - Frogspawn, - FrostedIce, - Furnace, - GildedBlackstone, - Glass, - GlassPane, - GlowLichen, - Glowstone, - GoldBlock, - GoldOre, - GoldenDandelion, - Granite, - GraniteSlab, - GraniteStairs, - GraniteWall, - GrassBlock, - Gravel, - GrayBanner, - GrayBed, - GrayCandle, - GrayCandleCake, - GrayCarpet, - GrayConcrete, - GrayConcretePowder, - GrayGlazedTerracotta, - GrayShulkerBox, - GrayStainedGlass, - GrayStainedGlassPane, - GrayTerracotta, - GrayWallBanner, - GrayWool, - GreenBanner, - GreenBed, - GreenCandle, - GreenCandleCake, - GreenCarpet, - GreenConcrete, - GreenConcretePowder, - GreenGlazedTerracotta, - GreenShulkerBox, - GreenStainedGlass, - GreenStainedGlassPane, - GreenTerracotta, - GreenWallBanner, - GreenWool, - Grindstone, - HangingRoots, - HayBlock, - HeavyCore, - HeavyWeightedPressurePlate, - HoneyBlock, - HoneycombBlock, - Hopper, - HornCoral, - HornCoralBlock, - HornCoralFan, - HornCoralWallFan, - Ice, - InfestedChiseledStoneBricks, - InfestedCobblestone, - InfestedCrackedStoneBricks, - InfestedDeepslate, - InfestedMossyStoneBricks, - InfestedStone, - InfestedStoneBricks, - IronBars, - IronBlock, - IronChain, - IronDoor, - IronOre, - IronTrapdoor, - JackOLantern, - Jigsaw, - Jukebox, - JungleButton, - JungleDoor, - JungleFence, - JungleFenceGate, - JungleHangingSign, - JungleLeaves, - JungleLog, - JunglePlanks, - JunglePressurePlate, - JungleSapling, - JungleShelf, - JungleSign, - JungleSlab, - JungleStairs, - JungleTrapdoor, - JungleWallHangingSign, - JungleWallSign, - JungleWood, - Kelp, - KelpPlant, - Ladder, - Lantern, - LapisBlock, - LapisOre, - LargeAmethystBud, - LargeFern, - Lava, - LavaCauldron, - LeafLitter, - Lectern, - Lever, - Light, - LightBlueBanner, - LightBlueBed, - LightBlueCandle, - LightBlueCandleCake, - LightBlueCarpet, - LightBlueConcrete, - LightBlueConcretePowder, - LightBlueGlazedTerracotta, - LightBlueShulkerBox, - LightBlueStainedGlass, - LightBlueStainedGlassPane, - LightBlueTerracotta, - LightBlueWallBanner, - LightBlueWool, - LightGrayBanner, - LightGrayBed, - LightGrayCandle, - LightGrayCandleCake, - LightGrayCarpet, - LightGrayConcrete, - LightGrayConcretePowder, - LightGrayGlazedTerracotta, - LightGrayShulkerBox, - LightGrayStainedGlass, - LightGrayStainedGlassPane, - LightGrayTerracotta, - LightGrayWallBanner, - LightGrayWool, - LightWeightedPressurePlate, - LightningRod, - Lilac, - LilyOfTheValley, - LilyPad, - LimeBanner, - LimeBed, - LimeCandle, - LimeCandleCake, - LimeCarpet, - LimeConcrete, - LimeConcretePowder, - LimeGlazedTerracotta, - LimeShulkerBox, - LimeStainedGlass, - LimeStainedGlassPane, - LimeTerracotta, - LimeWallBanner, - LimeWool, - Lodestone, - Loom, - MagentaBanner, - MagentaBed, - MagentaCandle, - MagentaCandleCake, - MagentaCarpet, - MagentaConcrete, - MagentaConcretePowder, - MagentaGlazedTerracotta, - MagentaShulkerBox, - MagentaStainedGlass, - MagentaStainedGlassPane, - MagentaTerracotta, - MagentaWallBanner, - MagentaWool, - MagmaBlock, - MangroveButton, - MangroveDoor, - MangroveFence, - MangroveFenceGate, - MangroveHangingSign, - MangroveLeaves, - MangroveLog, - MangrovePlanks, - MangrovePressurePlate, - MangrovePropagule, - MangroveRoots, - MangroveShelf, - MangroveSign, - MangroveSlab, - MangroveStairs, - MangroveTrapdoor, - MangroveWallHangingSign, - MangroveWallSign, - MangroveWood, - MediumAmethystBud, - Melon, - MelonStem, - MossBlock, - MossCarpet, - MossyCobblestone, - MossyCobblestoneSlab, - MossyCobblestoneStairs, - MossyCobblestoneWall, - MossyStoneBrickSlab, - MossyStoneBrickStairs, - MossyStoneBrickWall, - MossyStoneBricks, - MovingPiston, - Mud, - MudBrickSlab, - MudBrickStairs, - MudBrickWall, - MudBricks, - MuddyMangroveRoots, - MushroomStem, - Mycelium, - NetherBrickFence, - NetherBrickSlab, - NetherBrickStairs, - NetherBrickWall, - NetherBricks, - NetherGoldOre, - NetherPortal, - NetherQuartzOre, - NetherSprouts, - NetherWart, - NetherWartBlock, - NetheriteBlock, - Netherrack, - NoteBlock, - OakButton, - OakDoor, - OakFence, - OakFenceGate, - OakHangingSign, - OakLeaves, - OakLog, - OakPlanks, - OakPressurePlate, - OakSapling, - OakShelf, - OakSign, - OakSlab, - OakStairs, - OakTrapdoor, - OakWallHangingSign, - OakWallSign, - OakWood, - Observer, - Obsidian, - OchreFroglight, - OpenEyeblossom, - OrangeBanner, - OrangeBed, - OrangeCandle, - OrangeCandleCake, - OrangeCarpet, - OrangeConcrete, - OrangeConcretePowder, - OrangeGlazedTerracotta, - OrangeShulkerBox, - OrangeStainedGlass, - OrangeStainedGlassPane, - OrangeTerracotta, - OrangeTulip, - OrangeWallBanner, - OrangeWool, - OxeyeDaisy, - OxidizedChiseledCopper, - OxidizedCopper, - OxidizedCopperBars, - OxidizedCopperBulb, - OxidizedCopperChain, - OxidizedCopperChest, - OxidizedCopperDoor, - OxidizedCopperGolemStatue, - OxidizedCopperGrate, - OxidizedCopperLantern, - OxidizedCopperTrapdoor, - OxidizedCutCopper, - OxidizedCutCopperSlab, - OxidizedCutCopperStairs, - OxidizedLightningRod, - PackedIce, - PackedMud, - PaleHangingMoss, - PaleMossBlock, - PaleMossCarpet, - PaleOakButton, - PaleOakDoor, - PaleOakFence, - PaleOakFenceGate, - PaleOakHangingSign, - PaleOakLeaves, - PaleOakLog, - PaleOakPlanks, - PaleOakPressurePlate, - PaleOakSapling, - PaleOakShelf, - PaleOakSign, - PaleOakSlab, - PaleOakStairs, - PaleOakTrapdoor, - PaleOakWallHangingSign, - PaleOakWallSign, - PaleOakWood, - PearlescentFroglight, - Peony, - PetrifiedOakSlab, - PiglinHead, - PiglinWallHead, - PinkBanner, - PinkBed, - PinkCandle, - PinkCandleCake, - PinkCarpet, - PinkConcrete, - PinkConcretePowder, - PinkGlazedTerracotta, - PinkPetals, - PinkShulkerBox, - PinkStainedGlass, - PinkStainedGlassPane, - PinkTerracotta, - PinkTulip, - PinkWallBanner, - PinkWool, - Piston, - PistonHead, - PitcherCrop, - PitcherPlant, - PlayerHead, - PlayerWallHead, - Podzol, - PointedDripstone, - PolishedAndesite, - PolishedAndesiteSlab, - PolishedAndesiteStairs, - PolishedBasalt, - PolishedBlackstone, - PolishedBlackstoneBrickSlab, - PolishedBlackstoneBrickStairs, - PolishedBlackstoneBrickWall, - PolishedBlackstoneBricks, - PolishedBlackstoneButton, - PolishedBlackstonePressurePlate, - PolishedBlackstoneSlab, - PolishedBlackstoneStairs, - PolishedBlackstoneWall, - PolishedCinnabar, - PolishedCinnabarSlab, - PolishedCinnabarStairs, - PolishedCinnabarWall, - PolishedDeepslate, - PolishedDeepslateSlab, - PolishedDeepslateStairs, - PolishedDeepslateWall, - PolishedDiorite, - PolishedDioriteSlab, - PolishedDioriteStairs, - PolishedGranite, - PolishedGraniteSlab, - PolishedGraniteStairs, - PolishedSulfur, - PolishedSulfurSlab, - PolishedSulfurStairs, - PolishedSulfurWall, - PolishedTuff, - PolishedTuffSlab, - PolishedTuffStairs, - PolishedTuffWall, - Poppy, - Potatoes, - PotentSulfur, - PottedAcaciaSapling, - PottedAllium, - PottedAzaleaBush, - PottedAzureBluet, - PottedBamboo, - PottedBirchSapling, - PottedBlueOrchid, - PottedBrownMushroom, - PottedCactus, - PottedCherrySapling, - PottedClosedEyeblossom, - PottedCornflower, - PottedCrimsonFungus, - PottedCrimsonRoots, - PottedDandelion, - PottedDarkOakSapling, - PottedDeadBush, - PottedFern, - PottedFloweringAzaleaBush, - PottedGoldenDandelion, - PottedJungleSapling, - PottedLilyOfTheValley, - PottedMangrovePropagule, - PottedOakSapling, - PottedOpenEyeblossom, - PottedOrangeTulip, - PottedOxeyeDaisy, - PottedPaleOakSapling, - PottedPinkTulip, - PottedPoppy, - PottedRedMushroom, - PottedRedTulip, - PottedSpruceSapling, - PottedTorchflower, - PottedWarpedFungus, - PottedWarpedRoots, - PottedWhiteTulip, - PottedWitherRose, - PowderSnow, - PowderSnowCauldron, - PoweredRail, - Prismarine, - PrismarineBrickSlab, - PrismarineBrickStairs, - PrismarineBricks, - PrismarineSlab, - PrismarineStairs, - PrismarineWall, - Pumpkin, - PumpkinStem, - PurpleBanner, - PurpleBed, - PurpleCandle, - PurpleCandleCake, - PurpleCarpet, - PurpleConcrete, - PurpleConcretePowder, - PurpleGlazedTerracotta, - PurpleShulkerBox, - PurpleStainedGlass, - PurpleStainedGlassPane, - PurpleTerracotta, - PurpleWallBanner, - PurpleWool, - PurpurBlock, - PurpurPillar, - PurpurSlab, - PurpurStairs, - QuartzBlock, - QuartzBricks, - QuartzPillar, - QuartzSlab, - QuartzStairs, - Rail, - RawCopperBlock, - RawGoldBlock, - RawIronBlock, - RedBanner, - RedBed, - RedCandle, - RedCandleCake, - RedCarpet, - RedConcrete, - RedConcretePowder, - RedGlazedTerracotta, - RedMushroom, - RedMushroomBlock, - RedNetherBrickSlab, - RedNetherBrickStairs, - RedNetherBrickWall, - RedNetherBricks, - RedSand, - RedSandstone, - RedSandstoneSlab, - RedSandstoneStairs, - RedSandstoneWall, - RedShulkerBox, - RedStainedGlass, - RedStainedGlassPane, - RedTerracotta, - RedTulip, - RedWallBanner, - RedWool, - RedstoneBlock, - RedstoneLamp, - RedstoneOre, - RedstoneTorch, - RedstoneWallTorch, - RedstoneWire, - ReinforcedDeepslate, - Repeater, - RepeatingCommandBlock, - ResinBlock, - ResinBrickSlab, - ResinBrickStairs, - ResinBrickWall, - ResinBricks, - ResinClump, - RespawnAnchor, - RootedDirt, - RoseBush, - Sand, - Sandstone, - SandstoneSlab, - SandstoneStairs, - SandstoneWall, - Scaffolding, - Sculk, - SculkCatalyst, - SculkSensor, - SculkShrieker, - SculkVein, - SeaLantern, - SeaPickle, - Seagrass, - ShortDryGrass, - ShortGrass, - Shroomlight, - ShulkerBox, - SkeletonSkull, - SkeletonWallSkull, - SlimeBlock, - SmallAmethystBud, - SmallDripleaf, - SmithingTable, - Smoker, - SmoothBasalt, - SmoothQuartz, - SmoothQuartzSlab, - SmoothQuartzStairs, - SmoothRedSandstone, - SmoothRedSandstoneSlab, - SmoothRedSandstoneStairs, - SmoothSandstone, - SmoothSandstoneSlab, - SmoothSandstoneStairs, - SmoothStone, - SmoothStoneSlab, - SnifferEgg, - Snow, - SnowBlock, - SoulCampfire, - SoulFire, - SoulLantern, - SoulSand, - SoulSoil, - SoulTorch, - SoulWallTorch, - Spawner, - Sponge, - SporeBlossom, - SpruceButton, - SpruceDoor, - SpruceFence, - SpruceFenceGate, - SpruceHangingSign, - SpruceLeaves, - SpruceLog, - SprucePlanks, - SprucePressurePlate, - SpruceSapling, - SpruceShelf, - SpruceSign, - SpruceSlab, - SpruceStairs, - SpruceTrapdoor, - SpruceWallHangingSign, - SpruceWallSign, - SpruceWood, - StickyPiston, - Stone, - StoneBrickSlab, - StoneBrickStairs, - StoneBrickWall, - StoneBricks, - StoneButton, - StonePressurePlate, - StoneSlab, - StoneStairs, - Stonecutter, - StrippedAcaciaLog, - StrippedAcaciaWood, - StrippedBambooBlock, - StrippedBirchLog, - StrippedBirchWood, - StrippedCherryLog, - StrippedCherryWood, - StrippedCrimsonHyphae, - StrippedCrimsonStem, - StrippedDarkOakLog, - StrippedDarkOakWood, - StrippedJungleLog, - StrippedJungleWood, - StrippedMangroveLog, - StrippedMangroveWood, - StrippedOakLog, - StrippedOakWood, - StrippedPaleOakLog, - StrippedPaleOakWood, - StrippedSpruceLog, - StrippedSpruceWood, - StrippedWarpedHyphae, - StrippedWarpedStem, - StructureBlock, - StructureVoid, - SugarCane, - Sulfur, - SulfurBrickSlab, - SulfurBrickStairs, - SulfurBrickWall, - SulfurBricks, - SulfurSlab, - SulfurSpike, - SulfurStairs, - SulfurWall, - Sunflower, - SuspiciousGravel, - SuspiciousSand, - SweetBerryBush, - TallDryGrass, - TallGrass, - TallSeagrass, - Target, - Terracotta, - TestBlock, - TestInstanceBlock, - TintedGlass, - Tnt, - Torch, - Torchflower, - TorchflowerCrop, - TrappedChest, - TrialSpawner, - Tripwire, - TripwireHook, - TubeCoral, - TubeCoralBlock, - TubeCoralFan, - TubeCoralWallFan, - Tuff, - TuffBrickSlab, - TuffBrickStairs, - TuffBrickWall, - TuffBricks, - TuffSlab, - TuffStairs, - TuffWall, - TurtleEgg, - TwistingVines, - TwistingVinesPlant, - Vault, - VerdantFroglight, - Vine, - VoidAir, - WallTorch, - WarpedButton, - WarpedDoor, - WarpedFence, - WarpedFenceGate, - WarpedFungus, - WarpedHangingSign, - WarpedHyphae, - WarpedNylium, - WarpedPlanks, - WarpedPressurePlate, - WarpedRoots, - WarpedShelf, - WarpedSign, - WarpedSlab, - WarpedStairs, - WarpedStem, - WarpedTrapdoor, - WarpedWallHangingSign, - WarpedWallSign, - WarpedWartBlock, - Water, - WaterCauldron, - WaxedChiseledCopper, - WaxedCopperBars, - WaxedCopperBlock, - WaxedCopperBulb, - WaxedCopperChain, - WaxedCopperChest, - WaxedCopperDoor, - WaxedCopperGolemStatue, - WaxedCopperGrate, - WaxedCopperLantern, - WaxedCopperTrapdoor, - WaxedCutCopper, - WaxedCutCopperSlab, - WaxedCutCopperStairs, - WaxedExposedChiseledCopper, - WaxedExposedCopper, - WaxedExposedCopperBars, - WaxedExposedCopperBulb, - WaxedExposedCopperChain, - WaxedExposedCopperChest, - WaxedExposedCopperDoor, - WaxedExposedCopperGolemStatue, - WaxedExposedCopperGrate, - WaxedExposedCopperLantern, - WaxedExposedCopperTrapdoor, - WaxedExposedCutCopper, - WaxedExposedCutCopperSlab, - WaxedExposedCutCopperStairs, - WaxedExposedLightningRod, - WaxedLightningRod, - WaxedOxidizedChiseledCopper, - WaxedOxidizedCopper, - WaxedOxidizedCopperBars, - WaxedOxidizedCopperBulb, - WaxedOxidizedCopperChain, - WaxedOxidizedCopperChest, - WaxedOxidizedCopperDoor, - WaxedOxidizedCopperGolemStatue, - WaxedOxidizedCopperGrate, - WaxedOxidizedCopperLantern, - WaxedOxidizedCopperTrapdoor, - WaxedOxidizedCutCopper, - WaxedOxidizedCutCopperSlab, - WaxedOxidizedCutCopperStairs, - WaxedOxidizedLightningRod, - WaxedWeatheredChiseledCopper, - WaxedWeatheredCopper, - WaxedWeatheredCopperBars, - WaxedWeatheredCopperBulb, - WaxedWeatheredCopperChain, - WaxedWeatheredCopperChest, - WaxedWeatheredCopperDoor, - WaxedWeatheredCopperGolemStatue, - WaxedWeatheredCopperGrate, - WaxedWeatheredCopperLantern, - WaxedWeatheredCopperTrapdoor, - WaxedWeatheredCutCopper, - WaxedWeatheredCutCopperSlab, - WaxedWeatheredCutCopperStairs, - WaxedWeatheredLightningRod, - WeatheredChiseledCopper, - WeatheredCopper, - WeatheredCopperBars, - WeatheredCopperBulb, - WeatheredCopperChain, - WeatheredCopperChest, - WeatheredCopperDoor, - WeatheredCopperGolemStatue, - WeatheredCopperGrate, - WeatheredCopperLantern, - WeatheredCopperTrapdoor, - WeatheredCutCopper, - WeatheredCutCopperSlab, - WeatheredCutCopperStairs, - WeatheredLightningRod, - WeepingVines, - WeepingVinesPlant, - WetSponge, - Wheat, - WhiteBanner, - WhiteBed, - WhiteCandle, - WhiteCandleCake, - WhiteCarpet, - WhiteConcrete, - WhiteConcretePowder, - WhiteGlazedTerracotta, - WhiteShulkerBox, - WhiteStainedGlass, - WhiteStainedGlassPane, - WhiteTerracotta, - WhiteTulip, - WhiteWallBanner, - WhiteWool, - Wildflowers, - WitherRose, - WitherSkeletonSkull, - WitherSkeletonWallSkull, - YellowBanner, - YellowBed, - YellowCandle, - YellowCandleCake, - YellowCarpet, - YellowConcrete, - YellowConcretePowder, - YellowGlazedTerracotta, - YellowShulkerBox, - YellowStainedGlass, - YellowStainedGlassPane, - YellowTerracotta, - YellowWallBanner, - YellowWool, - ZombieHead, - ZombieWallHead, - } -} \ No newline at end of file diff --git a/MinecraftClient/Mapping/Material2Tool.cs b/MinecraftClient/Mapping/Material2Tool.cs deleted file mode 100644 index 659924807e..0000000000 --- a/MinecraftClient/Mapping/Material2Tool.cs +++ /dev/null @@ -1,782 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Mapping -{ - public static class Material2Tool - { - // Made with the following ressources: https://minecraft.wiki/w/Breaking - // Sorted in alphabetical order. - // Minable by Any Pickaxe. - private static readonly List pickaxeTier0 = new() - { - Material.ActivatorRail, - Material.Andesite, - Material.AndesiteSlab, - Material.AndesiteStairs, - Material.AndesiteWall, - Material.Anvil, - Material.Basalt, - Material.Bell, - Material.BlackConcrete, - Material.BlackGlazedTerracotta, - Material.BlackShulkerBox, - Material.BlackTerracotta, - Material.Blackstone, - Material.BlackstoneSlab, - Material.BlackstoneStairs, - Material.BlackstoneWall, - Material.BlastFurnace, - Material.BlueConcrete, - Material.BlueGlazedTerracotta, - Material.BlueIce, - Material.BlueShulkerBox, - Material.BlueTerracotta, - Material.BoneBlock, - Material.BrewingStand, - Material.BrickSlab, - Material.BrickStairs, - Material.BrickWall, - Material.Bricks, - Material.BrownConcrete, - Material.BrownGlazedTerracotta, - Material.BrownShulkerBox, - Material.BrownTerracotta, - Material.Calcite, - Material.Cauldron, - Material.Chain, - Material.ChippedAnvil, - Material.ChiseledDeepslate, - Material.ChiseledNetherBricks, - Material.ChiseledPolishedBlackstone, - Material.ChiseledQuartzBlock, - Material.ChiseledRedSandstone, - Material.ChiseledSandstone, - Material.ChiseledStoneBricks, - Material.CoalBlock, - Material.CoalOre, - Material.CobbledDeepslate, - Material.CobbledDeepslateSlab, - Material.CobbledDeepslateStairs, - Material.CobbledDeepslateWall, - Material.Cobblestone, - Material.CobblestoneSlab, - Material.CobblestoneStairs, - Material.CobblestoneWall, - Material.Conduit, - Material.CrackedDeepslateBricks, - Material.CrackedDeepslateTiles, - Material.CrackedNetherBricks, - Material.CrackedPolishedBlackstoneBricks, - Material.CrackedStoneBricks, - Material.CrimsonNylium, - Material.CutRedSandstone, - Material.CutRedSandstoneSlab, - Material.CutSandstone, - Material.CutSandstoneSlab, - Material.CyanConcrete, - Material.CyanGlazedTerracotta, - Material.CyanShulkerBox, - Material.CyanTerracotta, - Material.DamagedAnvil, - Material.DarkPrismarine, - Material.DarkPrismarineSlab, - Material.DarkPrismarineStairs, - Material.Deepslate, - Material.DeepslateBrickSlab, - Material.DeepslateBrickStairs, - Material.DeepslateBrickWall, - Material.DeepslateBricks, - Material.DeepslateCoalOre, - Material.DeepslateTileSlab, - Material.DeepslateTileStairs, - Material.DeepslateTileWall, - Material.DeepslateTiles, - Material.DetectorRail, - Material.Diorite, - Material.DioriteSlab, - Material.DioriteStairs, - Material.DioriteWall, - Material.Dispenser, - Material.DripstoneBlock, - Material.Dropper, - Material.EnchantingTable, - Material.EndRod, - Material.EndStone, - Material.EndStoneBrickSlab, - Material.EndStoneBrickStairs, - Material.EndStoneBrickWall, - Material.EndStoneBricks, - Material.EnderChest, - Material.FrostedIce, - Material.Furnace, - Material.GildedBlackstone, - Material.Glowstone, - Material.Granite, - Material.GraniteSlab, - Material.GraniteStairs, - Material.GraniteWall, - Material.GrayConcrete, - Material.GrayGlazedTerracotta, - Material.GrayShulkerBox, - Material.GrayTerracotta, - Material.GreenConcrete, - Material.GreenGlazedTerracotta, - Material.GreenShulkerBox, - Material.GreenTerracotta, - Material.Grindstone, - Material.HeavyWeightedPressurePlate, - Material.Hopper, - Material.Ice, - Material.IronBars, - Material.IronDoor, - Material.IronTrapdoor, - Material.Lantern, - Material.LavaCauldron, - Material.LightBlueConcrete, - Material.LightBlueGlazedTerracotta, - Material.LightBlueShulkerBox, - Material.LightBlueTerracotta, - Material.LightGrayConcrete, - Material.LightGrayGlazedTerracotta, - Material.LightGrayShulkerBox, - Material.LightGrayTerracotta, - Material.LightWeightedPressurePlate, - Material.LimeConcrete, - Material.LimeGlazedTerracotta, - Material.LimeShulkerBox, - Material.LimeTerracotta, - Material.Lodestone, - Material.MagentaConcrete, - Material.MagentaGlazedTerracotta, - Material.MagentaShulkerBox, - Material.MagentaTerracotta, - Material.MagmaBlock, - Material.MossyCobblestone, - Material.MossyCobblestoneSlab, - Material.MossyCobblestoneStairs, - Material.MossyCobblestoneWall, - Material.MossyStoneBrickSlab, - Material.MossyStoneBrickStairs, - Material.MossyStoneBrickWall, - Material.MossyStoneBricks, - Material.NetherBrickFence, - Material.NetherBrickSlab, - Material.NetherBrickStairs, - Material.NetherBrickWall, - Material.NetherBricks, - Material.NetherGoldOre, - Material.NetherQuartzOre, - Material.Netherrack, - Material.Observer, - Material.OrangeConcrete, - Material.OrangeGlazedTerracotta, - Material.OrangeShulkerBox, - Material.OrangeTerracotta, - Material.PackedIce, - Material.PetrifiedOakSlab, - Material.PinkConcrete, - Material.PinkGlazedTerracotta, - Material.PinkShulkerBox, - Material.PinkTerracotta, - Material.Piston, - Material.PointedDripstone, - Material.PolishedAndesite, - Material.PolishedAndesiteSlab, - Material.PolishedAndesiteStairs, - Material.PolishedBasalt, - Material.PolishedBlackstone, - Material.PolishedBlackstoneBrickSlab, - Material.PolishedBlackstoneBrickStairs, - Material.PolishedBlackstoneBrickWall, - Material.PolishedBlackstoneBricks, - Material.PolishedBlackstoneButton, - Material.PolishedBlackstonePressurePlate, - Material.PolishedBlackstoneSlab, - Material.PolishedBlackstoneStairs, - Material.PolishedBlackstoneWall, - Material.PolishedDiorite, - Material.PolishedDioriteSlab, - Material.PolishedDioriteStairs, - Material.PolishedGranite, - Material.PolishedGraniteSlab, - Material.PolishedGraniteStairs, - Material.PowderSnowCauldron, - Material.PoweredRail, - Material.Prismarine, - Material.PrismarineBrickSlab, - Material.PrismarineBrickStairs, - Material.PrismarineBricks, - Material.PrismarineSlab, - Material.PrismarineStairs, - Material.PrismarineWall, - Material.PurpleConcrete, - Material.PurpleGlazedTerracotta, - Material.PurpleShulkerBox, - Material.PurpleTerracotta, - Material.PurpurBlock, - Material.PurpurPillar, - Material.PurpurSlab, - Material.PurpurStairs, - Material.QuartzBlock, - Material.QuartzBricks, - Material.QuartzPillar, - Material.QuartzSlab, - Material.QuartzStairs, - Material.Rail, - Material.RedConcrete, - Material.RedGlazedTerracotta, - Material.RedNetherBrickSlab, - Material.RedNetherBrickStairs, - Material.RedNetherBrickWall, - Material.RedNetherBricks, - Material.RedSandstone, - Material.RedSandstoneSlab, - Material.RedSandstoneStairs, - Material.RedSandstoneWall, - Material.RedShulkerBox, - Material.RedTerracotta, - Material.RedstoneBlock, - Material.Sandstone, - Material.SandstoneSlab, - Material.SandstoneStairs, - Material.SandstoneWall, - Material.ShulkerBox, - Material.Smoker, - Material.SmoothBasalt, - Material.SmoothQuartz, - Material.SmoothQuartzSlab, - Material.SmoothQuartzStairs, - Material.SmoothRedSandstone, - Material.SmoothRedSandstoneSlab, - Material.SmoothRedSandstoneStairs, - Material.SmoothSandstone, - Material.SmoothSandstoneSlab, - Material.SmoothSandstoneStairs, - Material.SmoothStone, - Material.SmoothStoneSlab, - Material.Spawner, - Material.StickyPiston, - Material.Stone, - Material.StoneBrickSlab, - Material.StoneBrickStairs, - Material.StoneBrickWall, - Material.StoneBricks, - Material.StoneButton, - Material.StonePressurePlate, - Material.StoneSlab, - Material.StoneStairs, - Material.Stonecutter, - Material.Terracotta, - Material.Tuff, - Material.WarpedNylium, - Material.WaterCauldron, - Material.WhiteConcrete, - Material.WhiteGlazedTerracotta, - Material.WhiteShulkerBox, - Material.WhiteTerracotta, - Material.YellowConcrete, - Material.YellowGlazedTerracotta, - Material.YellowShulkerBox, - Material.YellowTerracotta, - }; - // Minable by Stone, iron, diamond, netherite. - private static readonly List pickaxeTier1 = new() - { - Material.CopperOre, - Material.CopperBlock, - Material.CutCopperSlab, - Material.CutCopperStairs, - Material.CutCopper, - Material.DeepslateCopperOre, - Material.DeepslateIronOre, - Material.DeepslateLapisOre, - Material.ExposedCopper, - Material.ExposedCutCopperSlab, - Material.ExposedCutCopperStairs, - Material.ExposedCutCopper, - Material.IronBlock, - Material.IronOre, - Material.LapisBlock, - Material.LapisOre, - Material.LightningRod, - Material.OxidizedCopper, - Material.OxidizedCutCopperSlab, - Material.OxidizedCutCopperStairs, - Material.OxidizedCutCopper, - Material.RawCopperBlock, - Material.RawIronBlock, - Material.Terracotta, - Material.WaxedCopperBlock, - Material.WaxedCutCopperSlab, - Material.WaxedCutCopperStairs, - Material.WaxedCutCopper, - Material.WaxedExposedCopper, - Material.WaxedExposedCutCopperSlab, - Material.WaxedExposedCutCopperStairs, - Material.WaxedExposedCutCopper, - Material.WaxedOxidizedCopper, - Material.WaxedOxidizedCutCopperSlab, - Material.WaxedOxidizedCutCopperStairs, - Material.WaxedOxidizedCutCopper, - Material.WaxedWeatheredCopper, - Material.WaxedWeatheredCutCopperSlab, - Material.WaxedWeatheredCutCopperStairs, - Material.WaxedWeatheredCutCopper, - Material.WeatheredCopper, - Material.WeatheredCutCopperSlab, - Material.WeatheredCutCopperStairs, - Material.WeatheredCutCopper, - }; - // Minable by Iron, diamond, netherite. - private static readonly List pickaxeTier2 = new() - { - Material.DeepslateDiamondOre, - Material.DeepslateEmeraldOre, - Material.DeepslateGoldOre, - Material.DeepslateRedstoneOre, - Material.DiamondBlock, - Material.DiamondOre, - Material.EmeraldBlock, - Material.EmeraldOre, - Material.GoldBlock, - Material.GoldOre, - Material.RawGoldBlock, - Material.RedstoneOre, - }; - // Minable by Diamond, Netherite. - private static readonly List pickaxeTier3 = new() - { - Material.AncientDebris, - Material.CryingObsidian, - Material.NetheriteBlock, - Material.Obsidian, - Material.RespawnAnchor - }; - - // Every shovel can mine every block (speed difference). - private static readonly List shovel = new() - { - Material.BlackConcretePowder, - Material.BlueConcretePowder, - Material.BrownConcretePowder, - Material.Clay, - Material.CoarseDirt, - Material.CyanConcretePowder, - Material.Dirt, - Material.Farmland, - Material.ShortGrass, - Material.GrassBlock, - Material.DirtPath, - Material.Gravel, - Material.GrayConcretePowder, - Material.GreenConcretePowder, - Material.LightBlueConcretePowder, - Material.LightGrayConcretePowder, - Material.LimeConcretePowder, - Material.TallGrass, - Material.MagentaConcretePowder, - Material.Mycelium, - Material.OrangeConcretePowder, - Material.PinkConcretePowder, - Material.Podzol, - Material.PrismarineSlab, - Material.PurpleConcretePowder, - Material.RedConcretePowder, - Material.RedSand, - Material.RootedDirt, - Material.Sand, - Material.Snow, - Material.SnowBlock, - Material.SoulSand, - Material.SoulSoil, - Material.WhiteConcretePowder, - Material.YellowConcretePowder, - }; - // Every axe can mine every block (speed difference). - private static readonly List axe = new() - { - Material.AcaciaButton, - Material.AcaciaDoor, - Material.AcaciaFence, - Material.AcaciaFenceGate, - Material.AcaciaLog, - Material.AcaciaPlanks, - Material.AcaciaPressurePlate, - Material.AcaciaSign, - Material.AcaciaSlab, - Material.AcaciaStairs, - Material.AcaciaTrapdoor, - Material.AcaciaWallSign, - Material.AcaciaWood, - Material.Barrel, - Material.BeeNest, - Material.Beehive, - Material.BigDripleaf, - Material.BirchButton, - Material.BirchDoor, - Material.BirchFence, - Material.BirchFenceGate, - Material.BirchLog, - Material.BirchPlanks, - Material.BirchPressurePlate, - Material.BirchSign, - Material.BirchSlab, - Material.BirchStairs, - Material.BirchTrapdoor, - Material.BirchWallSign, - Material.BirchWood, - Material.BlackBanner, - Material.BlackWallBanner, - Material.BlueBanner, - Material.BlueWallBanner, - Material.Bookshelf, - Material.BrownBanner, - Material.BrownMushroomBlock, - Material.BrownWallBanner, - Material.Campfire, - Material.CartographyTable, - Material.Chest, - Material.Cocoa, - Material.Composter, - Material.CraftingTable, - Material.CrimsonButton, - Material.CrimsonDoor, - Material.CrimsonFence, - Material.CrimsonFenceGate, - Material.CrimsonHyphae, - Material.CrimsonPlanks, - Material.CrimsonPressurePlate, - Material.CrimsonSign, - Material.CrimsonSlab, - Material.CrimsonStairs, - Material.CrimsonStem, - Material.CrimsonTrapdoor, - Material.CrimsonWallSign, - Material.CyanBanner, - Material.CyanWallBanner, - Material.DarkOakButton, - Material.DarkOakDoor, - Material.DarkOakFence, - Material.DarkOakFenceGate, - Material.DarkOakLog, - Material.DarkOakPlanks, - Material.DarkOakPressurePlate, - Material.DarkOakSign, - Material.DarkOakSlab, - Material.DarkOakStairs, - Material.DarkOakTrapdoor, - Material.DarkOakWallSign, - Material.DarkOakWood, - Material.DaylightDetector, - Material.FletchingTable, - Material.GrayBanner, - Material.GrayWallBanner, - Material.GreenBanner, - Material.GreenWallBanner, - Material.JackOLantern, - Material.Jukebox, - Material.JungleButton, - Material.JungleDoor, - Material.JungleFence, - Material.JungleFenceGate, - Material.JungleLog, - Material.JunglePlanks, - Material.JunglePressurePlate, - Material.JungleSign, - Material.JungleSlab, - Material.JungleStairs, - Material.JungleTrapdoor, - Material.JungleWallSign, - Material.JungleWood, - Material.Ladder, - Material.Lectern, - Material.LightBlueBanner, - Material.LightBlueWallBanner, - Material.LightGrayBanner, - Material.LightGrayWallBanner, - Material.LimeBanner, - Material.LimeWallBanner, - Material.Loom, - Material.MagentaBanner, - Material.MagentaWallBanner, - Material.Melon, - Material.MushroomStem, - Material.NoteBlock, - Material.OakButton, - Material.OakDoor, - Material.OakFence, - Material.OakFenceGate, - Material.OakLog, - Material.OakPlanks, - Material.OakPressurePlate, - Material.OakSign, - Material.OakSlab, - Material.OakStairs, - Material.OakTrapdoor, - Material.OakWallSign, - Material.OakWood, - Material.OrangeBanner, - Material.OrangeWallBanner, - Material.PinkBanner, - Material.PinkWallBanner, - Material.Pumpkin, - Material.PurpleBanner, - Material.PurpleWallBanner, - Material.RedBanner, - Material.RedMushroomBlock, - Material.RedWallBanner, - Material.SmithingTable, - Material.SoulCampfire, - Material.SpruceButton, - Material.SpruceDoor, - Material.SpruceFence, - Material.SpruceFenceGate, - Material.SpruceLog, - Material.SprucePlanks, - Material.SprucePressurePlate, - Material.SpruceSign, - Material.SpruceSlab, - Material.SpruceStairs, - Material.SpruceTrapdoor, - Material.SpruceWallSign, - Material.SpruceWood, - Material.StrippedAcaciaLog, - Material.StrippedAcaciaWood, - Material.StrippedBirchLog, - Material.StrippedBirchWood, - Material.StrippedCrimsonHyphae, - Material.StrippedCrimsonStem, - Material.StrippedDarkOakLog, - Material.StrippedDarkOakWood, - Material.StrippedDarkOakWood, - Material.StrippedJungleLog, - Material.StrippedJungleWood, - Material.StrippedOakLog, - Material.StrippedOakWood, - Material.StrippedSpruceLog, - Material.StrippedSpruceWood, - Material.StrippedWarpedHyphae, - Material.StrippedWarpedStem, - Material.TrappedChest, - Material.Vine, - Material.WarpedButton, - Material.WarpedDoor, - Material.WarpedFence, - Material.WarpedFenceGate, - Material.WarpedHyphae, - Material.WarpedPlanks, - Material.WarpedPressurePlate, - Material.WarpedSign, - Material.WarpedSlab, - Material.WarpedStairs, - Material.WarpedStem, - Material.WarpedTrapdoor, - Material.WarpedWallSign, - Material.WhiteBanner, - Material.WhiteWallBanner, - Material.YellowBanner, - Material.YellowWallBanner, - }; - // Every block a shear can mine. - private static readonly List shears = new() - { - Material.AcaciaLeaves, - Material.AzaleaLeaves, - Material.BirchLeaves, - Material.BlackWool, - Material.BlueWool, - Material.BrownWool, - Material.Cobweb, - Material.CyanWool, - Material.DarkOakLeaves, - Material.FloweringAzaleaLeaves, - Material.GrayWool, - Material.GreenWool, - Material.JungleLeaves, - Material.LightBlueWool, - Material.LightGrayWool, - Material.LimeWool, - Material.MagentaWool, - Material.OakLeaves, - Material.OrangeWool, - Material.PinkWool, - Material.PurpleWool, - Material.RedWool, - Material.SpruceLeaves, - Material.WhiteWool, - Material.YellowWool, - }; - // Every block that is mined with a sword. - private static readonly List sword = new() - { - Material.Bamboo, - Material.Cobweb, - Material.InfestedChiseledStoneBricks, - Material.InfestedDeepslate, - Material.InfestedCobblestone, - Material.InfestedCrackedStoneBricks, - Material.InfestedMossyStoneBricks, - Material.InfestedStone, - Material.InfestedStoneBricks, - }; - // Every block that can be mined with a hoe. - private static readonly List hoe = new() - { - Material.AcaciaLeaves, - Material.BirchLeaves, - Material.DarkOakLeaves, - Material.HayBlock, - Material.JungleLeaves, - Material.MossBlock, - Material.NetherWartBlock, - Material.OakLeaves, - Material.SculkSensor, - Material.Shroomlight, - Material.Sponge, - Material.SpruceLeaves, - Material.Target, - Material.WarpedWartBlock, - Material.WetSponge, - }; - // Liquids - private static readonly List bucket = new() - { - Material.Lava, - Material.Water - }; - - // Unbreakable Blocks - private static readonly List unbreakable = new() - { - Material.Air, - Material.Barrier, - Material.Bedrock, - Material.BubbleColumn, - Material.ChainCommandBlock, - Material.CommandBlock, - Material.EndGateway, - Material.EndPortal, - Material.EndPortalFrame, - Material.Jigsaw, - Material.NetherPortal, - Material.RepeatingCommandBlock, - Material.StructureBlock, - Material.StructureVoid - }; - - /// - /// Evaluates the right tool for the job - /// - /// Enter the Material of a block - /// Returns a list of tools that can be used, best to worst - public static ItemType[] GetCorrectToolForBlock(Material block) - { - if (pickaxeTier0.Contains(block)) - { - return new ItemType[] - { - ItemType.NetheritePickaxe, - ItemType.DiamondPickaxe, - ItemType.IronPickaxe, - ItemType.GoldenPickaxe, - ItemType.StonePickaxe, - ItemType.WoodenPickaxe, - }; - } - else if (pickaxeTier1.Contains(block)) - { - return new ItemType[] - { - ItemType.NetheritePickaxe, - ItemType.DiamondPickaxe, - ItemType.IronPickaxe, - ItemType.GoldenPickaxe, - ItemType.StonePickaxe, - }; - } - else if (pickaxeTier2.Contains(block)) - { - return new ItemType[] - { - ItemType.NetheritePickaxe, - ItemType.DiamondPickaxe, - ItemType.IronPickaxe, - }; - } - else if (pickaxeTier3.Contains(block)) - { - return new ItemType[] - { - ItemType.NetheritePickaxe, - ItemType.DiamondPickaxe, - }; - } - else if (shovel.Contains(block)) - { - return new ItemType[] - { - ItemType.NetheriteShovel, - ItemType.DiamondShovel, - ItemType.IronShovel, - ItemType.GoldenShovel, - ItemType.StoneShovel, - ItemType.WoodenShovel, - }; - } - else if (axe.Contains(block)) - { - return new ItemType[] - { - ItemType.NetheriteAxe, - ItemType.DiamondAxe, - ItemType.IronAxe, - ItemType.GoldenAxe, - ItemType.StoneAxe, - ItemType.WoodenAxe, - }; - } - else if (shears.Contains(block)) - { - return new ItemType[] - { - ItemType.Shears, - }; - } - else if (sword.Contains(block)) - { - return new ItemType[] - { - ItemType.NetheriteSword, - ItemType.DiamondSword, - ItemType.IronSword, - ItemType.GoldenSword, - ItemType.StoneSword, - ItemType.WoodenSword, - }; - } - else if (hoe.Contains(block)) - { - return new ItemType[] - { - ItemType.NetheriteHoe, - ItemType.DiamondHoe, - ItemType.IronHoe, - ItemType.GoldenHoe, - ItemType.StoneHoe, - ItemType.WoodenHoe, - }; - } - else if (bucket.Contains(block)) - { - return new ItemType[] - { - ItemType.Bucket, - }; - } - else { return System.Array.Empty(); } - } - - public static bool IsUnbreakable(Material block) { return unbreakable.Contains(block); } - } -} diff --git a/MinecraftClient/Mapping/MaterialExtensions.cs b/MinecraftClient/Mapping/MaterialExtensions.cs deleted file mode 100644 index 5d2fe06d92..0000000000 --- a/MinecraftClient/Mapping/MaterialExtensions.cs +++ /dev/null @@ -1,900 +0,0 @@ -namespace MinecraftClient.Mapping -{ - /// - /// Defines extension methods for the Material enumeration - /// - public static class MaterialExtensions - { - /// - /// Check if the player cannot pass through the specified material - /// - /// Material to test - /// True if the material is harmful - public static bool IsSolid(this Material m) - { - switch (m) - { - case Material.AcaciaDoor: - case Material.AcaciaFence: - case Material.AcaciaFenceGate: - case Material.AcaciaLeaves: - case Material.AcaciaLog: - case Material.AcaciaPlanks: - case Material.AcaciaSlab: - case Material.AcaciaStairs: - case Material.AcaciaTrapdoor: - case Material.AcaciaWood: - case Material.AmethystBlock: - case Material.AmethystCluster: - case Material.AncientDebris: - case Material.Andesite: - case Material.AndesiteSlab: - case Material.AndesiteStairs: - case Material.AndesiteWall: - case Material.Anvil: - case Material.Azalea: - case Material.AzaleaLeaves: - case Material.Bamboo: - case Material.Barrel: - case Material.Barrier: - case Material.Basalt: - case Material.Beacon: - case Material.Bedrock: - case Material.Beehive: - case Material.BeeNest: - case Material.Bell: - case Material.BirchDoor: - case Material.BirchFence: - case Material.BirchFenceGate: - case Material.BirchLeaves: - case Material.BirchLog: - case Material.BirchPlanks: - case Material.BirchSlab: - case Material.BirchStairs: - case Material.BirchTrapdoor: - case Material.BirchWood: - case Material.BlackBed: - case Material.BlackCandle: - case Material.BlackCandleCake: - case Material.BlackConcrete: - case Material.BlackConcretePowder: - case Material.BlackGlazedTerracotta: - case Material.BlackShulkerBox: - case Material.BlackStainedGlass: - case Material.BlackStainedGlassPane: - case Material.Blackstone: - case Material.BlackstoneSlab: - case Material.BlackstoneStairs: - case Material.BlackstoneWall: - case Material.BlackTerracotta: - case Material.BlackWool: - case Material.BlastFurnace: - case Material.BlueBed: - case Material.BlueCandle: - case Material.BlueCandleCake: - case Material.BlueConcrete: - case Material.BlueConcretePowder: - case Material.BlueGlazedTerracotta: - case Material.BlueIce: - case Material.BlueShulkerBox: - case Material.BlueStainedGlass: - case Material.BlueStainedGlassPane: - case Material.BlueTerracotta: - case Material.BlueWool: - case Material.BoneBlock: - case Material.Bookshelf: - case Material.BrainCoralBlock: - case Material.BrewingStand: - case Material.Bricks: - case Material.BrickSlab: - case Material.BrickStairs: - case Material.BrickWall: - case Material.BrownBed: - case Material.BrownCandle: - case Material.BrownCandleCake: - case Material.BrownConcrete: - case Material.BrownConcretePowder: - case Material.BrownGlazedTerracotta: - case Material.BrownMushroomBlock: - case Material.BrownShulkerBox: - case Material.BrownStainedGlass: - case Material.BrownStainedGlassPane: - case Material.BrownTerracotta: - case Material.BrownWool: - case Material.BubbleColumn: - case Material.BubbleCoralBlock: - case Material.BuddingAmethyst: - case Material.Cactus: - case Material.Cake: - case Material.Calcite: - case Material.Campfire: - case Material.Candle: - case Material.CandleCake: - case Material.CartographyTable: - case Material.CarvedPumpkin: - case Material.Cauldron: - case Material.Chain: - case Material.ChainCommandBlock: - case Material.Chest: - case Material.ChippedAnvil: - case Material.ChiseledDeepslate: - case Material.ChiseledNetherBricks: - case Material.ChiseledPolishedBlackstone: - case Material.ChiseledQuartzBlock: - case Material.ChiseledRedSandstone: - case Material.ChiseledResinBricks: - case Material.ChiseledSandstone: - case Material.ChiseledStoneBricks: - case Material.ChorusFlower: - case Material.ChorusPlant: - case Material.Clay: - case Material.CoalBlock: - case Material.CoalOre: - case Material.CoarseDirt: - case Material.CobbledDeepslate: - case Material.CobbledDeepslateSlab: - case Material.CobbledDeepslateStairs: - case Material.CobbledDeepslateWall: - case Material.Cobblestone: - case Material.CobblestoneSlab: - case Material.CobblestoneStairs: - case Material.CobblestoneWall: - case Material.CommandBlock: - case Material.Composter: - case Material.Conduit: - case Material.CopperBlock: - case Material.CopperOre: - case Material.CrackedDeepslateBricks: - case Material.CrackedDeepslateTiles: - case Material.CrackedNetherBricks: - case Material.CrackedPolishedBlackstoneBricks: - case Material.CrackedStoneBricks: - case Material.CraftingTable: - case Material.CreeperHead: - case Material.CreeperWallHead: - case Material.CrimsonDoor: - case Material.CrimsonFence: - case Material.CrimsonFenceGate: - case Material.CrimsonHyphae: - case Material.CrimsonNylium: - case Material.CrimsonPlanks: - case Material.CrimsonSlab: - case Material.CrimsonStairs: - case Material.CrimsonStem: - case Material.CrimsonTrapdoor: - case Material.CryingObsidian: - case Material.CutCopper: - case Material.CutCopperSlab: - case Material.CutCopperStairs: - case Material.CutRedSandstone: - case Material.CutRedSandstoneSlab: - case Material.CutSandstone: - case Material.CutSandstoneSlab: - case Material.CyanBed: - case Material.CyanCandle: - case Material.CyanCandleCake: - case Material.CyanConcrete: - case Material.CyanConcretePowder: - case Material.CyanGlazedTerracotta: - case Material.CyanShulkerBox: - case Material.CyanStainedGlass: - case Material.CyanStainedGlassPane: - case Material.CyanTerracotta: - case Material.CyanWool: - case Material.DamagedAnvil: - case Material.DarkOakDoor: - case Material.DarkOakFence: - case Material.DarkOakFenceGate: - case Material.DarkOakLeaves: - case Material.DarkOakLog: - case Material.DarkOakPlanks: - case Material.DarkOakSlab: - case Material.DarkOakStairs: - case Material.DarkOakTrapdoor: - case Material.DarkOakWood: - case Material.DarkPrismarine: - case Material.DarkPrismarineSlab: - case Material.DarkPrismarineStairs: - case Material.DaylightDetector: - case Material.DeadBrainCoralBlock: - case Material.DeadBubbleCoralBlock: - case Material.DeadFireCoralBlock: - case Material.DeadHornCoralBlock: - case Material.DeadTubeCoralBlock: - case Material.Deepslate: - case Material.DeepslateBricks: - case Material.DeepslateBrickSlab: - case Material.DeepslateBrickStairs: - case Material.DeepslateBrickWall: - case Material.DeepslateCoalOre: - case Material.DeepslateCopperOre: - case Material.DeepslateDiamondOre: - case Material.DeepslateEmeraldOre: - case Material.DeepslateGoldOre: - case Material.DeepslateIronOre: - case Material.DeepslateLapisOre: - case Material.DeepslateRedstoneOre: - case Material.DeepslateTiles: - case Material.DeepslateTileSlab: - case Material.DeepslateTileStairs: - case Material.DeepslateTileWall: - case Material.DiamondBlock: - case Material.DiamondOre: - case Material.Diorite: - case Material.DioriteSlab: - case Material.DioriteStairs: - case Material.DioriteWall: - case Material.Dirt: - case Material.DirtPath: - case Material.Dispenser: - case Material.DragonEgg: - case Material.DragonHead: - case Material.DragonWallHead: - case Material.DriedKelpBlock: - case Material.DripstoneBlock: - case Material.Dropper: - case Material.EmeraldBlock: - case Material.EmeraldOre: - case Material.EnchantingTable: - case Material.EnderChest: - case Material.EndPortalFrame: - case Material.EndRod: - case Material.EndStone: - case Material.EndStoneBricks: - case Material.EndStoneBrickSlab: - case Material.EndStoneBrickStairs: - case Material.EndStoneBrickWall: - case Material.ExposedCopper: - case Material.ExposedCutCopper: - case Material.ExposedCutCopperSlab: - case Material.ExposedCutCopperStairs: - case Material.Farmland: - case Material.FireCoralBlock: - case Material.FletchingTable: - case Material.FloweringAzalea: - case Material.FloweringAzaleaLeaves: - case Material.FlowerPot: - case Material.FrostedIce: - case Material.Furnace: - case Material.GildedBlackstone: - case Material.Glass: - case Material.GlassPane: - case Material.Glowstone: - case Material.GoldBlock: - case Material.GoldOre: - case Material.Granite: - case Material.GraniteSlab: - case Material.GraniteStairs: - case Material.GraniteWall: - case Material.GrassBlock: - case Material.Gravel: - case Material.GrayBed: - case Material.GrayCandle: - case Material.GrayCandleCake: - case Material.GrayConcrete: - case Material.GrayConcretePowder: - case Material.GrayGlazedTerracotta: - case Material.GrayShulkerBox: - case Material.GrayStainedGlass: - case Material.GrayStainedGlassPane: - case Material.GrayTerracotta: - case Material.GrayWool: - case Material.GreenBed: - case Material.GreenCandle: - case Material.GreenCandleCake: - case Material.GreenConcrete: - case Material.GreenConcretePowder: - case Material.GreenGlazedTerracotta: - case Material.GreenShulkerBox: - case Material.GreenStainedGlass: - case Material.GreenStainedGlassPane: - case Material.GreenTerracotta: - case Material.GreenWool: - case Material.Grindstone: - case Material.HayBlock: - case Material.HoneyBlock: - case Material.HoneycombBlock: - case Material.Hopper: - case Material.HornCoralBlock: - case Material.Ice: - case Material.InfestedChiseledStoneBricks: - case Material.InfestedCobblestone: - case Material.InfestedCrackedStoneBricks: - case Material.InfestedDeepslate: - case Material.InfestedMossyStoneBricks: - case Material.InfestedStone: - case Material.InfestedStoneBricks: - case Material.IronBars: - case Material.IronBlock: - case Material.IronDoor: - case Material.IronOre: - case Material.IronTrapdoor: - case Material.JackOLantern: - case Material.Jigsaw: - case Material.Jukebox: - case Material.JungleDoor: - case Material.JungleFence: - case Material.JungleFenceGate: - case Material.JungleLeaves: - case Material.JungleLog: - case Material.JunglePlanks: - case Material.JungleSlab: - case Material.JungleStairs: - case Material.JungleTrapdoor: - case Material.JungleWood: - case Material.Ladder: - case Material.Lantern: - case Material.LapisBlock: - case Material.LapisOre: - case Material.LargeAmethystBud: - case Material.LavaCauldron: - case Material.Lectern: - case Material.LightBlueBed: - case Material.LightBlueCandle: - case Material.LightBlueCandleCake: - case Material.LightBlueConcrete: - case Material.LightBlueConcretePowder: - case Material.LightBlueGlazedTerracotta: - case Material.LightBlueShulkerBox: - case Material.LightBlueStainedGlass: - case Material.LightBlueStainedGlassPane: - case Material.LightBlueTerracotta: - case Material.LightBlueWool: - case Material.LightGrayBed: - case Material.LightGrayCandle: - case Material.LightGrayCandleCake: - case Material.LightGrayConcrete: - case Material.LightGrayConcretePowder: - case Material.LightGrayGlazedTerracotta: - case Material.LightGrayShulkerBox: - case Material.LightGrayStainedGlass: - case Material.LightGrayStainedGlassPane: - case Material.LightGrayTerracotta: - case Material.LightGrayWool: - case Material.LightningRod: - case Material.LilyPad: - case Material.LimeBed: - case Material.LimeCandle: - case Material.LimeCandleCake: - case Material.LimeConcrete: - case Material.LimeConcretePowder: - case Material.LimeGlazedTerracotta: - case Material.LimeShulkerBox: - case Material.LimeStainedGlass: - case Material.LimeStainedGlassPane: - case Material.LimeTerracotta: - case Material.LimeWool: - case Material.Lodestone: - case Material.Loom: - case Material.MagentaBed: - case Material.MagentaCandle: - case Material.MagentaCandleCake: - case Material.MagentaConcrete: - case Material.MagentaConcretePowder: - case Material.MagentaGlazedTerracotta: - case Material.MagentaShulkerBox: - case Material.MagentaStainedGlass: - case Material.MagentaStainedGlassPane: - case Material.MagentaTerracotta: - case Material.MagentaWool: - case Material.MagmaBlock: - case Material.MangroveDoor: - case Material.MangroveFence: - case Material.MangroveFenceGate: - case Material.MangroveLeaves: - case Material.MangroveLog: - case Material.MangrovePlanks: - case Material.MangroveRoots: - case Material.MangroveSlab: - case Material.MangroveStairs: - case Material.MangroveTrapdoor: - case Material.MangroveWood: - case Material.MediumAmethystBud: - case Material.Melon: - case Material.MossBlock: - case Material.MossCarpet: - case Material.MossyCobblestone: - case Material.MossyCobblestoneSlab: - case Material.MossyCobblestoneStairs: - case Material.MossyCobblestoneWall: - case Material.MossyStoneBricks: - case Material.MossyStoneBrickSlab: - case Material.MossyStoneBrickStairs: - case Material.MossyStoneBrickWall: - case Material.MovingPiston: - case Material.Mud: - case Material.MudBricks: - case Material.MudBrickSlab: - case Material.MudBrickStairs: - case Material.MudBrickWall: - case Material.MuddyMangroveRoots: - case Material.MushroomStem: - case Material.Mycelium: - case Material.NetherBrickFence: - case Material.NetherBricks: - case Material.NetherBrickSlab: - case Material.NetherBrickStairs: - case Material.NetherBrickWall: - case Material.NetherGoldOre: - case Material.NetheriteBlock: - case Material.NetherQuartzOre: - case Material.Netherrack: - case Material.NetherWartBlock: - case Material.NoteBlock: - case Material.OakDoor: - case Material.OakFence: - case Material.OakFenceGate: - case Material.OakLeaves: - case Material.OakLog: - case Material.OakPlanks: - case Material.OakSlab: - case Material.OakStairs: - case Material.OakTrapdoor: - case Material.OakWood: - case Material.Observer: - case Material.Obsidian: - case Material.OchreFroglight: - case Material.OrangeBed: - case Material.OrangeCandle: - case Material.OrangeCandleCake: - case Material.OrangeConcrete: - case Material.OrangeConcretePowder: - case Material.OrangeGlazedTerracotta: - case Material.OrangeShulkerBox: - case Material.OrangeStainedGlass: - case Material.OrangeStainedGlassPane: - case Material.OrangeTerracotta: - case Material.OrangeWool: - case Material.OxidizedCopper: - case Material.OxidizedCutCopper: - case Material.OxidizedCutCopperSlab: - case Material.OxidizedCutCopperStairs: - case Material.PackedIce: - case Material.PackedMud: - case Material.PearlescentFroglight: - case Material.PetrifiedOakSlab: - case Material.PinkBed: - case Material.PinkCandle: - case Material.PinkCandleCake: - case Material.PinkConcrete: - case Material.PinkConcretePowder: - case Material.PinkGlazedTerracotta: - case Material.PinkShulkerBox: - case Material.PinkStainedGlass: - case Material.PinkStainedGlassPane: - case Material.PinkTerracotta: - case Material.PinkWool: - case Material.Piston: - case Material.PistonHead: - case Material.PlayerHead: - case Material.PlayerWallHead: - case Material.Podzol: - case Material.PointedDripstone: - case Material.PolishedAndesite: - case Material.PolishedAndesiteSlab: - case Material.PolishedAndesiteStairs: - case Material.PolishedBasalt: - case Material.PolishedBlackstone: - case Material.PolishedBlackstoneBricks: - case Material.PolishedBlackstoneBrickSlab: - case Material.PolishedBlackstoneBrickStairs: - case Material.PolishedBlackstoneBrickWall: - case Material.PolishedBlackstoneSlab: - case Material.PolishedBlackstoneStairs: - case Material.PolishedBlackstoneWall: - case Material.PolishedDeepslate: - case Material.PolishedDeepslateSlab: - case Material.PolishedDeepslateStairs: - case Material.PolishedDeepslateWall: - case Material.PolishedDiorite: - case Material.PolishedDioriteSlab: - case Material.PolishedDioriteStairs: - case Material.PolishedGranite: - case Material.PolishedGraniteSlab: - case Material.PolishedGraniteStairs: - case Material.PottedAcaciaSapling: - case Material.PottedAllium: - case Material.PottedAzaleaBush: - case Material.PottedAzureBluet: - case Material.PottedBamboo: - case Material.PottedBirchSapling: - case Material.PottedBlueOrchid: - case Material.PottedBrownMushroom: - case Material.PottedCactus: - case Material.PottedCherrySapling: - case Material.PottedClosedEyeblossom: - case Material.PottedCornflower: - case Material.PottedDandelion: - case Material.PottedDarkOakSapling: - case Material.PottedDeadBush: - case Material.PottedFern: - case Material.PottedFloweringAzaleaBush: - case Material.PottedJungleSapling: - case Material.PottedLilyOfTheValley: - case Material.PottedOakSapling: - case Material.PottedOpenEyeblossom: - case Material.PottedOrangeTulip: - case Material.PottedOxeyeDaisy: - case Material.PottedPinkTulip: - case Material.PottedPoppy: - case Material.PottedRedMushroom: - case Material.PottedRedTulip: - case Material.PottedSpruceSapling: - case Material.PottedWhiteTulip: - case Material.PottedWitherRose: - case Material.PowderSnowCauldron: - case Material.Prismarine: - case Material.PrismarineBricks: - case Material.PrismarineBrickSlab: - case Material.PrismarineBrickStairs: - case Material.PrismarineSlab: - case Material.PrismarineStairs: - case Material.PrismarineWall: - case Material.Pumpkin: - case Material.PurpleBed: - case Material.PurpleCandle: - case Material.PurpleCandleCake: - case Material.PurpleConcrete: - case Material.PurpleConcretePowder: - case Material.PurpleGlazedTerracotta: - case Material.PurpleShulkerBox: - case Material.PurpleStainedGlass: - case Material.PurpleStainedGlassPane: - case Material.PurpleTerracotta: - case Material.PurpleWool: - case Material.PurpurBlock: - case Material.PurpurPillar: - case Material.PurpurSlab: - case Material.PurpurStairs: - case Material.QuartzBlock: - case Material.QuartzBricks: - case Material.QuartzPillar: - case Material.QuartzSlab: - case Material.QuartzStairs: - case Material.RawCopperBlock: - case Material.RawGoldBlock: - case Material.RawIronBlock: - case Material.RedBed: - case Material.RedCandle: - case Material.RedCandleCake: - case Material.RedConcrete: - case Material.RedConcretePowder: - case Material.RedGlazedTerracotta: - case Material.RedMushroomBlock: - case Material.RedNetherBricks: - case Material.RedNetherBrickSlab: - case Material.RedNetherBrickStairs: - case Material.RedNetherBrickWall: - case Material.RedSand: - case Material.RedSandstone: - case Material.RedSandstoneSlab: - case Material.RedSandstoneStairs: - case Material.RedSandstoneWall: - case Material.RedShulkerBox: - case Material.RedStainedGlass: - case Material.RedStainedGlassPane: - case Material.RedstoneBlock: - case Material.RedstoneLamp: - case Material.RedstoneOre: - case Material.RedTerracotta: - case Material.RedWool: - case Material.ReinforcedDeepslate: - case Material.RepeatingCommandBlock: - case Material.ResinBlock: - case Material.ResinBrickStairs: - case Material.ResinBrickWall: - case Material.ResinBricks: - case Material.RespawnAnchor: - case Material.RootedDirt: - case Material.Sand: - case Material.Sandstone: - case Material.SandstoneSlab: - case Material.SandstoneStairs: - case Material.SandstoneWall: - case Material.Sculk: - case Material.SculkCatalyst: - case Material.SculkSensor: - case Material.SculkShrieker: - case Material.SculkVein: - case Material.SeaLantern: - case Material.SeaPickle: - case Material.Shroomlight: - case Material.ShulkerBox: - case Material.SkeletonSkull: - case Material.SkeletonWallSkull: - case Material.SlimeBlock: - case Material.SmallAmethystBud: - case Material.SmithingTable: - case Material.Smoker: - case Material.SmoothBasalt: - case Material.SmoothQuartz: - case Material.SmoothQuartzSlab: - case Material.SmoothQuartzStairs: - case Material.SmoothRedSandstone: - case Material.SmoothRedSandstoneSlab: - case Material.SmoothRedSandstoneStairs: - case Material.SmoothSandstone: - case Material.SmoothSandstoneSlab: - case Material.SmoothSandstoneStairs: - case Material.SmoothStone: - case Material.SmoothStoneSlab: - case Material.SnowBlock: - case Material.SoulCampfire: - case Material.SoulLantern: - case Material.SoulSand: - case Material.SoulSoil: - case Material.Spawner: - case Material.Sponge: - case Material.SpruceDoor: - case Material.SpruceFence: - case Material.SpruceFenceGate: - case Material.SpruceLeaves: - case Material.SpruceLog: - case Material.SprucePlanks: - case Material.SpruceSlab: - case Material.SpruceStairs: - case Material.SpruceTrapdoor: - case Material.SpruceWood: - case Material.StickyPiston: - case Material.Stone: - case Material.StoneBricks: - case Material.StoneBrickSlab: - case Material.StoneBrickStairs: - case Material.StoneBrickWall: - case Material.Stonecutter: - case Material.StoneSlab: - case Material.StoneStairs: - case Material.StrippedAcaciaLog: - case Material.StrippedAcaciaWood: - case Material.StrippedBirchLog: - case Material.StrippedBirchWood: - case Material.StrippedCrimsonHyphae: - case Material.StrippedCrimsonStem: - case Material.StrippedDarkOakLog: - case Material.StrippedDarkOakWood: - case Material.StrippedJungleLog: - case Material.StrippedJungleWood: - case Material.StrippedMangroveLog: - case Material.StrippedMangroveWood: - case Material.StrippedOakLog: - case Material.StrippedOakWood: - case Material.StrippedSpruceLog: - case Material.StrippedSpruceWood: - case Material.StrippedWarpedHyphae: - case Material.StrippedWarpedStem: - case Material.StructureBlock: - case Material.Target: - case Material.Terracotta: - case Material.TintedGlass: - case Material.Tnt: - case Material.TrappedChest: - case Material.TubeCoralBlock: - case Material.Tuff: - case Material.TurtleEgg: - case Material.VerdantFroglight: - case Material.WarpedDoor: - case Material.WarpedFence: - case Material.WarpedFenceGate: - case Material.WarpedHyphae: - case Material.WarpedNylium: - case Material.WarpedPlanks: - case Material.WarpedSlab: - case Material.WarpedStairs: - case Material.WarpedStem: - case Material.WarpedTrapdoor: - case Material.WarpedWartBlock: - case Material.WaterCauldron: - case Material.WaxedCopperBlock: - case Material.WaxedCutCopper: - case Material.WaxedCutCopperSlab: - case Material.WaxedCutCopperStairs: - case Material.WaxedExposedCopper: - case Material.WaxedExposedCutCopper: - case Material.WaxedExposedCutCopperSlab: - case Material.WaxedExposedCutCopperStairs: - case Material.WaxedOxidizedCopper: - case Material.WaxedOxidizedCutCopper: - case Material.WaxedOxidizedCutCopperSlab: - case Material.WaxedOxidizedCutCopperStairs: - case Material.WaxedWeatheredCopper: - case Material.WaxedWeatheredCutCopper: - case Material.WaxedWeatheredCutCopperSlab: - case Material.WaxedWeatheredCutCopperStairs: - case Material.WeatheredCopper: - case Material.WeatheredCutCopper: - case Material.WeatheredCutCopperSlab: - case Material.WeatheredCutCopperStairs: - case Material.WetSponge: - case Material.WhiteBed: - case Material.WhiteCandle: - case Material.WhiteCandleCake: - case Material.WhiteConcrete: - case Material.WhiteConcretePowder: - case Material.WhiteGlazedTerracotta: - case Material.WhiteShulkerBox: - case Material.WhiteStainedGlass: - case Material.WhiteStainedGlassPane: - case Material.WhiteTerracotta: - case Material.WhiteWool: - case Material.WitherSkeletonSkull: - case Material.WitherSkeletonWallSkull: - case Material.YellowBed: - case Material.YellowCandle: - case Material.YellowCandleCake: - case Material.YellowConcrete: - case Material.YellowConcretePowder: - case Material.YellowGlazedTerracotta: - case Material.YellowShulkerBox: - case Material.YellowStainedGlass: - case Material.YellowStainedGlassPane: - case Material.YellowTerracotta: - case Material.YellowWool: - case Material.ZombieHead: - case Material.ZombieWallHead: - return true; - default: - return false; - } - } - - /// - /// Check if contact with the provided material can harm players - /// - /// Material to test - /// True if the material is harmful - public static bool CanHarmPlayers(this Material m) - { - switch (m) - { - case Material.Fire: - case Material.Cactus: - case Material.Lava: - case Material.MagmaBlock: - case Material.Campfire: - case Material.PowderSnow: - return true; - default: - return false; - } - } - - /// - /// Check if the provided material is a liquid a player can swim into - /// - /// Material to test - /// True if the material is a liquid - public static bool IsLiquid(this Material m) - { - switch (m) - { - case Material.Water: - case Material.Lava: - return true; - default: - return false; - } - } - - /// - /// Check if the player can climb up this block - /// - /// Material to test - /// True if the material can be climbed on - public static bool CanBeClimbedOn(this Material m) - { - switch (m) - { - case Material.Ladder: - case Material.Vine: - case Material.TwistingVines: - case Material.TwistingVinesPlant: - case Material.WeepingVines: - case Material.WeepingVinesPlant: - return true; - default: - return false; - } - } - - /// - /// Check if the provided material is a bed - /// - /// Material to test - /// True if the material is a bed - public static bool IsBed(this Material m) - { - switch (m) - { - case Material.BlackBed: - case Material.BlueBed: - case Material.BrownBed: - case Material.CyanBed: - case Material.GrayBed: - case Material.GreenBed: - case Material.LightBlueBed: - case Material.LightGrayBed: - case Material.LimeBed: - case Material.MagentaBed: - case Material.OrangeBed: - case Material.PinkBed: - case Material.PurpleBed: - case Material.RedBed: - case Material.WhiteBed: - case Material.YellowBed: - return true; - default: - return false; - } - } - - /// - /// Check if the provided material is a slab - /// - /// Material to test - /// True if the material is a slab - public static bool IsSlab(this Material m) - { - switch (m) - { - case Material.AcaciaSlab: - case Material.AndesiteSlab: - case Material.BirchSlab: - case Material.BlackstoneSlab: - case Material.BrickSlab: - case Material.CobbledDeepslateSlab: - case Material.CobblestoneSlab: - case Material.CrimsonSlab: - case Material.CutCopperSlab: - case Material.CutRedSandstoneSlab: - case Material.CutSandstoneSlab: - case Material.DarkOakSlab: - case Material.DarkPrismarineSlab: - case Material.DeepslateBrickSlab: - case Material.DeepslateTileSlab: - case Material.DioriteSlab: - case Material.EndStoneBrickSlab: - case Material.ExposedCutCopperSlab: - case Material.GraniteSlab: - case Material.JungleSlab: - case Material.MangroveSlab: - case Material.MossyCobblestoneSlab: - case Material.MossyStoneBrickSlab: - case Material.MudBrickSlab: - case Material.NetherBrickSlab: - case Material.OakSlab: - case Material.OxidizedCutCopperSlab: - case Material.PetrifiedOakSlab: - case Material.PolishedAndesiteSlab: - case Material.PolishedBlackstoneBrickSlab: - case Material.PolishedBlackstoneSlab: - case Material.PolishedDeepslateSlab: - case Material.PolishedDioriteSlab: - case Material.PolishedGraniteSlab: - case Material.PrismarineBrickSlab: - case Material.PrismarineSlab: - case Material.PurpurSlab: - case Material.QuartzSlab: - case Material.RedNetherBrickSlab: - case Material.RedSandstoneSlab: - case Material.ResinBrickSlab: - case Material.SandstoneSlab: - case Material.SmoothQuartzSlab: - case Material.SmoothRedSandstoneSlab: - case Material.SmoothSandstoneSlab: - case Material.SmoothStoneSlab: - case Material.SpruceSlab: - case Material.StoneBrickSlab: - case Material.StoneSlab: - case Material.WarpedSlab: - case Material.WaxedCutCopperSlab: - case Material.WaxedExposedCutCopperSlab: - case Material.WaxedOxidizedCutCopperSlab: - case Material.WaxedWeatheredCutCopperSlab: - case Material.WeatheredCutCopperSlab: - return true; - default: - return false; - } - } - } -} \ No newline at end of file diff --git a/MinecraftClient/Mapping/MessageFilterType.cs b/MinecraftClient/Mapping/MessageFilterType.cs deleted file mode 100644 index 9c3cfe1ddf..0000000000 --- a/MinecraftClient/Mapping/MessageFilterType.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace MinecraftClient.Mapping -{ - public enum MessageFilterType - { - PassThrough = 0, - FullyFiltered, - PartiallyFiltered - } -} diff --git a/MinecraftClient/Mapping/MiningCalculator.cs b/MinecraftClient/Mapping/MiningCalculator.cs deleted file mode 100644 index 458057f24b..0000000000 --- a/MinecraftClient/Mapping/MiningCalculator.cs +++ /dev/null @@ -1,587 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Linq; -using MinecraftClient.Inventory; -using MinecraftClient.Protocol.Handlers; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; - -namespace MinecraftClient.Mapping -{ - /// - /// Computes dig duration in ticks for survival-style block breaking. - /// Version-aware across 1.8-1.21.11+, using tool speed, enchantments, effects, and attributes. - /// - public static class MiningCalculator - { - public sealed class MiningOptions - { - public static readonly MiningOptions Vanilla = new(); - - public bool ApplyEfficiencyEnchantments { get; init; } = true; - - public bool ApplyHasteEffects { get; init; } = true; - } - - /// - /// Compute the number of ticks required to break a block in survival mode. - /// Returns 0 for instant-break blocks, -1 for unbreakable blocks. - /// - /// The block material to break - /// The item in the player's main hand (null for empty hand) - /// The item in the player's helmet slot (null if empty, used for Aqua Affinity) - /// Currently active player effects - /// Cached player attribute values (from OnEntityProperties) - /// Whether the player's eyes are submerged in water - /// Whether the player is on the ground - /// The Minecraft protocol version - /// Ticks to break the block, 0 for instant, -1 for unbreakable - public static int ComputeDigTicks( - Material blockMaterial, - Item? heldItem, - Item? helmetItem, - Dictionary effects, - Dictionary playerAttributes, - bool isUnderwater, - bool isOnGround, - int protocolVersion, - MiningOptions? options = null) - { - options ??= MiningOptions.Vanilla; - float hardness = BlockHardness.GetHardness(blockMaterial); - - if (hardness < 0) - return -1; // Unbreakable - - if (hardness == 0) - return 0; // Instant break - - float destroySpeed = GetDestroySpeed( - blockMaterial, heldItem, helmetItem, effects, playerAttributes, - isUnderwater, isOnGround, protocolVersion, options); - - bool correctTool = HasCorrectToolForDrops(blockMaterial, heldItem, protocolVersion); - int divisor = correctTool ? 30 : 100; - - float destroyProgress = destroySpeed / hardness / divisor; - - if (destroyProgress >= 1.0f) - return 0; // Instant break - - return (int)MathF.Ceiling(1.0f / destroyProgress); - } - - /// - /// Compute the player's destroy speed for a given block, following vanilla formulas. - /// - private static float GetDestroySpeed( - Material blockMaterial, - Item? heldItem, - Item? helmetItem, - Dictionary effects, - Dictionary playerAttributes, - bool isUnderwater, - bool isOnGround, - int protocolVersion, - MiningOptions options) - { - float speed = GetToolSpeed(blockMaterial, heldItem, protocolVersion); - - if (speed > 1.0f && options.ApplyEfficiencyEnchantments) - { - speed += GetEfficiencyBonus(heldItem, playerAttributes, protocolVersion); - } - - if (options.ApplyHasteEffects) - { - int digSpeedAmplifier = GetDigSpeedAmplifier(effects); - if (digSpeedAmplifier >= 0) - speed *= 1.0f + (digSpeedAmplifier + 1) * 0.2f; - } - - // Mining Fatigue - if (effects.TryGetValue(Effects.MiningFatigue, out var fatigueData)) - { - float multiplier = fatigueData.Amplifier switch - { - 0 => 0.3f, - 1 => 0.09f, - 2 => 0.0027f, - _ => 8.1E-4f - }; - speed *= multiplier; - } - - // Attribute multipliers for modern versions - if (protocolVersion >= Protocol18Handler.MC_1_20_6_Version) - { - // BLOCK_BREAK_SPEED attribute (default 1.0) - if (playerAttributes.TryGetValue("player.block_break_speed", out double bbs)) - speed *= (float)bbs; - } - - // Underwater penalty - if (isUnderwater) - { - if (protocolVersion >= Protocol18Handler.MC_1_21_11_Version) - { - // 1.21.11+: Uses SUBMERGED_MINING_SPEED attribute (default 0.2) - double submergedSpeed = 0.2; - if (playerAttributes.TryGetValue("player.submerged_mining_speed", out double sms)) - submergedSpeed = sms; - speed *= (float)submergedSpeed; - } - else - { - // Pre-1.21.11: /5 unless Aqua Affinity - bool hasAquaAffinity = GetEnchantmentLevel(helmetItem, Enchantments.AquaAffinity, protocolVersion) > 0; - if (!hasAquaAffinity) - speed /= 5.0f; - } - } - - // Airborne penalty - if (!isOnGround) - speed /= 5.0f; - - return speed; - } - - /// - /// Get the base tool mining speed for a block. - /// For 1.20.6+ with ToolComponent, uses structured component data. - /// For older versions, uses hardcoded tool speed tables. - /// - private static float GetToolSpeed(Material blockMaterial, Item? heldItem, int protocolVersion) - { - if (heldItem is null) - return 1.0f; - - // Modern path: use ToolComponent from structured components - if (protocolVersion >= Protocol18Handler.MC_1_20_6_Version - && TryGetToolRules(heldItem, out List? rules, out float defaultMiningSpeed)) - { - foreach (var rule in rules) - { - if (rule.HasSpeed && MatchesBlockSet(rule.Blocks, blockMaterial)) - return rule.Speed; - } - - // Structured tool data covers modern mining rules, but keep the legacy fallback for - // explicit block holder-sets that MCC cannot resolve yet (for example cobweb). - if (defaultMiningSpeed > 1.0f) - return defaultMiningSpeed; - } - - // Legacy path: hardcoded tool speed tables - return GetLegacyToolSpeed(heldItem.Type, blockMaterial); - } - - /// - /// Check whether the tool provides correct drops for a block. - /// - private static bool HasCorrectToolForDrops(Material blockMaterial, Item? heldItem, int protocolVersion) - { - if (!BlockHardness.RequiresCorrectTool(blockMaterial)) - return true; - - if (heldItem is null) - return false; - - // Modern path: check ToolComponent rules - if (protocolVersion >= Protocol18Handler.MC_1_20_6_Version - && TryGetToolRules(heldItem, out List? rules, out _)) - { - foreach (var rule in rules) - { - if (rule.HasCorrectDropForBlocks && MatchesBlockSet(rule.Blocks, blockMaterial)) - return rule.CorrectDropForBlocks; - } - } - - // Legacy path, plus a modern fallback for direct block holder-sets MCC cannot resolve yet. - return IsCorrectToolLegacy(heldItem.Type, blockMaterial); - } - - private static bool TryGetToolRules( - Item heldItem, - [NotNullWhen(true)] out List? rules, - out float defaultMiningSpeed) - { - rules = null; - defaultMiningSpeed = 1.0f; - - if (heldItem.Components is null) - return false; - - if (heldItem.Components.OfType().FirstOrDefault() is ToolComponent toolComponent) - { - rules = toolComponent.Rules; - defaultMiningSpeed = toolComponent.DefaultMiningSpeed; - return true; - } - - if (heldItem.Components.OfType().FirstOrDefault() is ToolComponent1215 toolComponent1215) - { - rules = toolComponent1215.Rules; - defaultMiningSpeed = toolComponent1215.DefaultMiningSpeed; - return true; - } - - return false; - } - - /// - /// Match a block material against a ToolComponent BlockSetSubcomponent. - /// - private static bool MatchesBlockSet( - Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6.BlockSetSubcomponent blockSet, - Material blockMaterial) - { - if (blockSet.BlockIds is not null) - { - // Check against explicit block state IDs - foreach (int blockId in blockSet.BlockIds) - { - if (Block.Palette.FromId(blockId) == blockMaterial) - return true; - } - } - - if (blockSet.TagName is not null) - { - // Match against tag name (e.g., "minecraft:mineable/pickaxe") - return MatchesBlockTag(blockSet.TagName, blockMaterial); - } - - return false; - } - - /// - /// Approximate block tag matching using Material2Tool categories. - /// Tags like "minecraft:mineable/pickaxe" map to the appropriate tool categories. - /// - private static bool MatchesBlockTag(string tagName, Material blockMaterial) - { - // Normalize tag name - string tag = tagName.Replace("minecraft:", ""); - - ItemType[] tools = Material2Tool.GetCorrectToolForBlock(blockMaterial); - return tag switch - { - "mineable/pickaxe" => tools.Length > 0 && IsPickaxe(tools[0]), - "mineable/axe" => tools.Length > 0 && IsAxe(tools[0]), - "mineable/shovel" => tools.Length > 0 && IsShovel(tools[0]), - "mineable/hoe" => tools.Length > 0 && IsHoe(tools[0]), - "leaves" => IsLeaf(blockMaterial), - "wool" => IsWool(blockMaterial), - "incorrect_for_wooden_tool" => RequiresHigherTier(blockMaterial, 0), - "incorrect_for_gold_tool" => RequiresHigherTier(blockMaterial, 0), - "incorrect_for_stone_tool" => RequiresHigherTier(blockMaterial, 1), - "incorrect_for_copper_tool" => RequiresHigherTier(blockMaterial, 1), - "incorrect_for_iron_tool" => RequiresHigherTier(blockMaterial, 2), - "incorrect_for_diamond_tool" => RequiresHigherTier(blockMaterial, 3), - "incorrect_for_netherite_tool" => RequiresHigherTier(blockMaterial, 4), - _ => false - }; - } - - private static bool RequiresHigherTier(Material blockMaterial, int tier) - { - ItemType[] recommended = Material2Tool.GetCorrectToolForBlock(blockMaterial); - if (recommended.Length == 0) - return false; - - return GetRequiredTier(blockMaterial, recommended) > tier; - } - - /// - /// Get the enchantment level from an item, supporting both legacy NBT and modern structured components. - /// - public static int GetEnchantmentLevel(Item? item, Enchantments enchantment, int protocolVersion) - { - if (item is null) - return 0; - - // Modern path: structured components (1.20.6+) - var enchList = item.EnchantmentList; - if (enchList is not null) - { - var ench = enchList.FirstOrDefault(e => e.Type == enchantment); - if (ench is not null) - return ench.Level; - } - - // Legacy path: NBT data - if (item.NBT is not null && - item.NBT.TryGetValue("Enchantments", out object? enchantments)) - { - try - { - string enchNameLower = GetEnchantmentResourceName(enchantment); - foreach (Dictionary enchEntry in (object[])enchantments) - { - string id = ((string)enchEntry["id"]).ToLowerInvariant(); - if (id == enchNameLower || id == "minecraft:" + enchNameLower) - return (short)enchEntry["lvl"]; - } - } - catch - { - // NBT parsing failure - return 0 - } - } - - return 0; - } - - /// - /// Map Enchantments enum to Minecraft resource name (e.g., "efficiency"). - /// - private static string GetEnchantmentResourceName(Enchantments enchantment) - { - return enchantment switch - { - Enchantments.AquaAffinity => "aqua_affinity", - Enchantments.BaneOfArthropods => "bane_of_arthropods", - Enchantments.BlastProtection => "blast_protection", - Enchantments.Efficiency => "efficiency", - Enchantments.FeatherFalling => "feather_falling", - Enchantments.FireAspect => "fire_aspect", - Enchantments.FireProtection => "fire_protection", - Enchantments.FrostWalker => "frost_walker", - Enchantments.LuckOfTheSea => "luck_of_the_sea", - Enchantments.ProjectileProtection => "projectile_protection", - Enchantments.QuickCharge => "quick_charge", - Enchantments.SilkTouch => "silk_touch", - Enchantments.SoulSpeed => "soul_speed", - Enchantments.SwiftSneak => "swift_sneak", - Enchantments.VanishingCurse => "vanishing_curse", - Enchantments.BindingCurse => "binding_curse", - Enchantments.WindBurst => "wind_burst", - _ => enchantment.ToString().ToUnderscoreCase() - }; - } - - #region Legacy Tool Speed Tables - - /// - /// Legacy tool speed for pre-1.20.6 versions using hardcoded values. - /// - private static float GetLegacyToolSpeed(ItemType toolType, Material blockMaterial) - { - float specialToolSpeed = toolType switch - { - ItemType.Shears => GetShearsSpeed(blockMaterial), - _ when IsSword(toolType) && blockMaterial == Material.Cobweb => 15.0f, - _ => 1.0f - }; - - if (specialToolSpeed > 1.0f) - return specialToolSpeed; - - ItemType[] recommended = Material2Tool.GetCorrectToolForBlock(blockMaterial); - if (recommended.Length == 0) - return 1.0f; - - // Check if the held tool matches the recommended tool category - ToolCategory heldCategory = GetToolCategory(toolType); - ToolCategory neededCategory = GetToolCategory(recommended[0]); - - if (heldCategory == ToolCategory.None || heldCategory != neededCategory) - return 1.0f; - - return GetBaseToolSpeed(toolType); - } - - private static float GetBaseToolSpeed(ItemType toolType) - { - return toolType switch - { - // Wooden tools - ItemType.WoodenPickaxe or ItemType.WoodenAxe or ItemType.WoodenShovel or - ItemType.WoodenSword or ItemType.WoodenHoe => 2.0f, - - // Stone tools - ItemType.StonePickaxe or ItemType.StoneAxe or ItemType.StoneShovel or - ItemType.StoneSword or ItemType.StoneHoe => 4.0f, - - // Iron tools - ItemType.IronPickaxe or ItemType.IronAxe or ItemType.IronShovel or - ItemType.IronSword or ItemType.IronHoe => 6.0f, - - // Diamond tools - ItemType.DiamondPickaxe or ItemType.DiamondAxe or ItemType.DiamondShovel or - ItemType.DiamondSword or ItemType.DiamondHoe => 8.0f, - - // Netherite tools - ItemType.NetheritePickaxe or ItemType.NetheriteAxe or ItemType.NetheriteShovel or - ItemType.NetheriteSword or ItemType.NetheriteHoe => 9.0f, - - // Golden tools - ItemType.GoldenPickaxe or ItemType.GoldenAxe or ItemType.GoldenShovel or - ItemType.GoldenSword or ItemType.GoldenHoe => 12.0f, - - // Shears - ItemType.Shears => 2.0f, - - _ => 1.0f - }; - } - - /// - /// Check if the held tool is the correct tool for drops in legacy versions. - /// Uses Material2Tool's recommendations to determine correctness. - /// - private static bool IsCorrectToolLegacy(ItemType toolType, Material blockMaterial) - { - ItemType[] recommended = Material2Tool.GetCorrectToolForBlock(blockMaterial); - if (recommended.Length == 0) - return false; - - ToolCategory heldCategory = GetToolCategory(toolType); - ToolCategory neededCategory = GetToolCategory(recommended[0]); - - if (heldCategory == ToolCategory.None || heldCategory != neededCategory) - { - if (toolType == ItemType.Shears && blockMaterial == Material.Cobweb) - return true; - if (IsSword(toolType) && blockMaterial == Material.Cobweb) - return true; - return false; - } - - // Check tool tier requirement - int heldTier = GetToolTier(toolType); - int requiredTier = GetRequiredTier(blockMaterial, recommended); - - return heldTier >= requiredTier; - } - - /// - /// Get the minimum tool tier required for a block based on Material2Tool's recommendation ordering. - /// - private static int GetRequiredTier(Material blockMaterial, ItemType[] recommended) - { - if (recommended.Length == 0) - return 0; - - // Material2Tool lists tools from highest to lowest tier. - // The last tool in the array is the minimum required tier. - return GetToolTier(recommended[^1]); - } - - private enum ToolCategory - { - None, - Pickaxe, - Axe, - Shovel, - Hoe, - Sword, - Shears - } - - private static ToolCategory GetToolCategory(ItemType item) - { - if (IsPickaxe(item)) return ToolCategory.Pickaxe; - if (IsAxe(item)) return ToolCategory.Axe; - if (IsShovel(item)) return ToolCategory.Shovel; - if (IsHoe(item)) return ToolCategory.Hoe; - if (IsSword(item)) return ToolCategory.Sword; - if (item == ItemType.Shears) return ToolCategory.Shears; - return ToolCategory.None; - } - - private static int GetToolTier(ItemType item) - { - string name = item.ToString(); - if (name.StartsWith("Wooden")) return 0; - if (name.StartsWith("Golden")) return 0; - if (name.StartsWith("Stone")) return 1; - if (name.StartsWith("Iron")) return 2; - if (name.StartsWith("Diamond")) return 3; - if (name.StartsWith("Netherite")) return 4; - return 0; - } - - private static bool IsPickaxe(ItemType item) => - item is ItemType.WoodenPickaxe or ItemType.StonePickaxe or ItemType.IronPickaxe - or ItemType.GoldenPickaxe or ItemType.DiamondPickaxe or ItemType.NetheritePickaxe; - - private static bool IsAxe(ItemType item) => - item is ItemType.WoodenAxe or ItemType.StoneAxe or ItemType.IronAxe - or ItemType.GoldenAxe or ItemType.DiamondAxe or ItemType.NetheriteAxe; - - private static bool IsShovel(ItemType item) => - item is ItemType.WoodenShovel or ItemType.StoneShovel or ItemType.IronShovel - or ItemType.GoldenShovel or ItemType.DiamondShovel or ItemType.NetheriteShovel; - - private static bool IsHoe(ItemType item) => - item is ItemType.WoodenHoe or ItemType.StoneHoe or ItemType.IronHoe - or ItemType.GoldenHoe or ItemType.DiamondHoe or ItemType.NetheriteHoe; - - private static bool IsSword(ItemType item) => - item is ItemType.WoodenSword or ItemType.StoneSword or ItemType.IronSword - or ItemType.GoldenSword or ItemType.DiamondSword or ItemType.NetheriteSword; - - private static float GetShearsSpeed(Material block) - { - return block switch - { - Material.Cobweb => 15.0f, - Material.Vine or Material.GlowLichen => 2.0f, - _ when IsLeaf(block) => 15.0f, - _ when IsWool(block) => 5.0f, - _ => 1.0f - }; - } - - private static bool IsShearable(Material block) => - block == Material.Cobweb || IsLeaf(block) || IsWool(block) || block is Material.Vine or Material.GlowLichen; - - private static bool IsLeaf(Material block) => - block is Material.OakLeaves or Material.SpruceLeaves or Material.BirchLeaves - or Material.JungleLeaves or Material.AcaciaLeaves or Material.DarkOakLeaves - or Material.CherryLeaves or Material.MangroveLeaves or Material.AzaleaLeaves - or Material.FloweringAzaleaLeaves or Material.PaleOakLeaves; - - private static bool IsWool(Material block) => - block is Material.WhiteWool or Material.OrangeWool or Material.MagentaWool - or Material.LightBlueWool or Material.YellowWool or Material.LimeWool - or Material.PinkWool or Material.GrayWool or Material.LightGrayWool - or Material.CyanWool or Material.PurpleWool or Material.BlueWool - or Material.BrownWool or Material.GreenWool or Material.RedWool - or Material.BlackWool; - - private static float GetEfficiencyBonus(Item? heldItem, Dictionary playerAttributes, int protocolVersion) - { - if (protocolVersion >= Protocol18Handler.MC_1_21_11_Version - && playerAttributes.TryGetValue("player.mining_efficiency", out double miningEfficiency) - && miningEfficiency > 0.0) - { - return (float)miningEfficiency; - } - - int efficiencyLevel = GetEnchantmentLevel(heldItem, Enchantments.Efficiency, protocolVersion); - return efficiencyLevel > 0 ? efficiencyLevel * efficiencyLevel + 1 : 0.0f; - } - - private static int GetDigSpeedAmplifier(Dictionary effects) - { - int amplifier = -1; - - if (effects.TryGetValue(Effects.Haste, out var hasteData)) - amplifier = Math.Max(amplifier, hasteData.Amplifier); - - if (effects.TryGetValue(Effects.ConduitPower, out var conduitData)) - amplifier = Math.Max(amplifier, conduitData.Amplifier); - - return amplifier; - } - - #endregion - } -} diff --git a/MinecraftClient/Mapping/Movement.cs b/MinecraftClient/Mapping/Movement.cs deleted file mode 100644 index 0e972e09fd..0000000000 --- a/MinecraftClient/Mapping/Movement.cs +++ /dev/null @@ -1,716 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Tasks; - -namespace MinecraftClient.Mapping -{ - /// - /// Allows moving through a Minecraft world - /// - public static class Movement - { - /* ========= PATHFINDING METHODS ========= */ - - /// - /// Handle movements due to gravity - /// - /// World the player is currently located in - /// Location the player is currently at - /// Current vertical motion speed - /// Updated location after applying gravity - public static Location HandleGravity(World world, Location location, ref double motionY) - { - if (Settings.InternalConfig.GravityEnabled) - { - Location onFoots = new(location.X, Math.Floor(location.Y), location.Z); - Location belowFoots = Move(location, Direction.Down); - if (location.Y > Math.Truncate(location.Y) + 0.0001) - { - belowFoots = location; - belowFoots.Y = Math.Truncate(location.Y); - } - - if (!IsOnGround(world, location) && !IsSwimming(world, location)) - { - while (!IsOnGround(world, belowFoots) && belowFoots.Y >= 1 + World.GetDimension().minY) - belowFoots = Move(belowFoots, Direction.Down); - location = Move2Steps(location, belowFoots, ref motionY, true).Dequeue(); - } - else if (!world.GetBlock(onFoots).Type.IsSolid()) - location = Move2Steps(location, onFoots, ref motionY, true).Dequeue(); - } - - return location; - } - - /// - /// Return a list of possible moves for the player - /// - /// World the player is currently located in - /// Location the player is currently at - /// Allow possible but unsafe locations - /// A list of new locations the player can move to - public static IEnumerable GetAvailableMoves(World world, Location originLocation, - bool allowUnsafe = false) - { - Location location = originLocation.ToCenter(); - List availableMoves = new(); - if (IsOnGround(world, location) || IsSwimming(world, location)) - { - foreach (Direction dir in Enum.GetValues(typeof(Direction))) - { - Location dest = Move(location, dir); - if (CanMove(world, location, dir) && (allowUnsafe || IsSafe(world, dest))) - availableMoves.Add(dest); - } - } - else - { - foreach (Direction dir in new[] { Direction.East, Direction.West, Direction.North, Direction.South }) - if (CanMove(world, location, dir) && IsOnGround(world, Move(location, dir)) && - (allowUnsafe || IsSafe(world, Move(location, dir)))) - availableMoves.Add(Move(location, dir)); - availableMoves.Add(Move(location, Direction.Down)); - } - - return availableMoves; - } - - /// - /// Decompose a single move from a block to another into several steps - /// - /// - /// Allows moving by little steps instead or directly moving between blocks, - /// which would be rejected by anti-cheat plugins anyway. - /// - /// Start location - /// Destination location - /// Current vertical motion speed - /// Specify if performing falling steps - /// Amount of steps by block - /// A list of locations corresponding to the requested steps - public static Queue Move2Steps(Location start, Location goal, ref double motionY, - bool falling = false, int stepsByBlock = 8) - { - if (stepsByBlock <= 0) - stepsByBlock = 1; - - if (falling) - { - //Use MC-Like falling algorithm - double y = start.Y; - Queue fallSteps = new(); - fallSteps.Enqueue(start); - motionY -= 0.08D; - motionY *= 0.9800000190734863D; - y += motionY; - - if (y < goal.Y) - return new Queue(new[] { goal }); - - return new Queue(new[] { new Location(start.X, y, start.Z) }); - } - else - { - //Regular MCC moving algorithm - motionY = 0; //Reset motion speed - double totalStepsDouble = start.Distance(goal) * stepsByBlock; - int totalSteps = (int)Math.Ceiling(totalStepsDouble); - Location step = (goal - start) / totalSteps; - - if (totalStepsDouble >= 1) - { - Queue movementSteps = new(); - for (int i = 1; i <= totalSteps; i++) - movementSteps.Enqueue(start + step * i); - return movementSteps; - } - else - return new Queue(new[] { goal }); - } - } - - /// - /// Calculate a path from the start location to the destination location - /// - /// - /// Based on the A* pathfinding algorithm described on Wikipedia - /// - /// - /// World - /// Start location - /// Destination location - /// Allow possible but unsafe locations - /// If no valid path can be found, also allow locations within specified distance of destination - /// Do not get closer of destination than specified distance - /// How long to wait before stopping computation - /// When location is unreachable, computation will reach timeout, then optionally fallback to a close location within maxOffset - /// A list of locations, or null if calculation failed - public static Queue? CalculatePath(World world, Location start, Location goal, bool allowUnsafe, - int maxOffset, int minOffset, TimeSpan timeout) - { - CancellationTokenSource cts = new(); - Task?> pathfindingTask = Task.Factory.StartNew(() => - CalculatePath(world, start, goal, allowUnsafe, maxOffset, minOffset, cts.Token)); - pathfindingTask.Wait(timeout); - if (!pathfindingTask.IsCompleted) - { - cts.Cancel(); - pathfindingTask.Wait(); - } - - return pathfindingTask.Result; - } - - /// - /// Calculate a path from the start location to the destination location - /// - /// - /// Based on the A* pathfinding algorithm described on Wikipedia - /// - /// - /// World - /// Start location - /// Destination location - /// Allow possible but unsafe locations - /// If no valid path can be found, also allow locations within specified distance of destination - /// Do not get closer of destination than specified distance - /// Token for stopping computation after a certain time - /// A list of locations, or null if calculation failed - public static Queue? CalculatePath(World world, Location start, Location goal, bool allowUnsafe, - int maxOffset, int minOffset, CancellationToken ct) - { - // This is a bad configuration - if (minOffset > maxOffset) - throw new ArgumentException("minOffset must be lower or equal to maxOffset", nameof(minOffset)); - - // Round start coordinates for easier calculation - Location startLower = start.ToFloor(); - Location goalLower = goal.ToFloor(); - - // We always use distance squared so our limits must also be squared. - minOffset *= minOffset; - maxOffset *= maxOffset; - - // Prepare variables and datastructures for A* - - // Dictionary that contains the relation between all coordinates and resolves the final path - Dictionary cameFrom = new(); - // Create a Binary Heap for all open positions => Allows fast access to Nodes with lowest scores - BinaryHeap openSet = new(); - // Dictionary to keep track of the G-Score of every location - Dictionary gScoreDict = new(); - - // Set start values for variables - openSet.Insert(0, (int)startLower.DistanceSquared(goalLower), startLower); - gScoreDict[startLower] = 0; - BinaryHeap.Node? current = null; - - // Start of A* - - // Execute while we have nodes to process and we are not cancelled - while (openSet.Count() > 0 && !ct.IsCancellationRequested) - { - // Get the root node of the Binary Heap - // Node with the lowest F-Score or lowest H-Score on tie - current = openSet.GetRootLocation(); - - // Return if goal found and no maxOffset was given OR current node is between minOffset and maxOffset - if ((current.Location == goalLower && maxOffset <= 0) || - (maxOffset > 0 && current.HScore >= minOffset && current.HScore <= maxOffset)) - return ReconstructPath(cameFrom, current.Location, start, goal); - - // Discover neighbored blocks - foreach (Location neighbor in GetAvailableMoves(world, current.Location, allowUnsafe)) - { - // If we are cancelled: break - if (ct.IsCancellationRequested) - break; - - // tentative_GScore is the distance from start to the neighbor through current - int tentativeGScore = current.GScore + (int)current.Location.DistanceSquared(neighbor); - - // If the neighbor is not in the GScoreDict OR its current tentativeGScore is lower than the previously saved one: - if (!gScoreDict.TryGetValue(neighbor, out int existingGScore) || - tentativeGScore < existingGScore) - { - // Save the new relation between the neighbored block and the current one - cameFrom[neighbor] = current.Location; - gScoreDict[neighbor] = tentativeGScore; - - // If this location is not already included in the Binary Heap: save it - if (!openSet.ContainsLocation(neighbor)) - openSet.Insert(tentativeGScore, (int)neighbor.DistanceSquared(goalLower), neighbor); - } - } - } - - // Goal could not be reached. Set the path to the closest location if close enough - if (current is not null && openSet.MinHScoreNode is not null && - (maxOffset == int.MaxValue || openSet.MinHScoreNode.HScore <= maxOffset)) - return ReconstructPath(cameFrom, openSet.MinHScoreNode.Location, start, goal); - - return null; - } - - /// - /// Helper function for CalculatePath(). Backtrack from goal to start to reconstruct a step-by-step path. - /// - /// The collection of Locations that leads back to the start - /// Endpoint of our later walk - /// Start location - /// End location - /// the path that leads to current from the start position - private static Queue ReconstructPath(Dictionary cameFrom, Location current, - Location start, Location end) - { - int midPathCnt = 0; - List totalPath = new(); - - // Move from the center of the block to the final position - if (current != end && current == end.ToFloor()) - totalPath.Add(end); - - // Generate intermediate paths - totalPath.Add(current.ToCenter()); - while (cameFrom.ContainsKey(current)) - { - ++midPathCnt; - current = cameFrom[current]; - totalPath.Add(current.ToCenter()); - } - - if (midPathCnt <= 2 && start.DistanceSquared(end) < 2.0) - return new Queue(new[] { end }); - else - { - // Move to the center of the block first - if (current != start && current == start.ToFloor()) - totalPath.Add(start.ToCenter()); - - totalPath.Reverse(); - return new Queue(totalPath); - } - } - - /// - /// A datastructure to store Locations as Nodes and provide them in sorted and queued order. - /// !!! - /// CAN BE REPLACED WITH PriorityQueue IN .NET-6 - /// https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.priorityqueue-2?view=net-6.0 - /// !!! - /// - public class BinaryHeap - { - /// - /// Represents a location and its attributes - /// - public record Node(int GScore, int HScore, Location Location) - { - public int FScore => HScore + GScore; - } - - // List which contains all nodes in form of a Binary Heap - private readonly List heapList; - - // Hashset for quick checks of locations included in the heap - private readonly HashSet locationList; - public Node? MinHScoreNode; - - public BinaryHeap() - { - heapList = new(); - locationList = new(); - MinHScoreNode = null; - } - - /// - /// Insert a new location in the heap - /// - /// G-Score of the location - /// H-Score of the location - /// The location - public void Insert(int newGScore, int newHScore, Location loc) - { - // Begin at the end of the list - int i = heapList.Count; - - // Temporarily save the node created with the parameters to allow comparisons - Node newNode = new(newGScore, newHScore, loc); - - // Add new note to the end of the list - heapList.Add(newNode); - locationList.Add(loc); - - // Save node with the smallest H-Score => Distance to goal - if (MinHScoreNode is null || newNode.HScore < MinHScoreNode.HScore) - MinHScoreNode = newNode; - - if (i == 0) - return; - - // There is no need of sorting for one node. - // Go up the heap from child to parent and move parent down... - // while we are not looking at the root node AND the new node has better attributes than the parent node ((i - 1) / 2) - while (i > 0 && FirstNodeBetter(newNode /* Current Child */, - heapList[(i - 1) / 2] /* Corresponding Parent */)) - { - // Move parent down and replace current child -> New free space is created - heapList[i] = heapList[(i - 1) / 2]; - // Select the next parent to check - i = (i - 1) / 2; - } - - // Nodes were moved down at position I there is now a free space at the correct position for our new node: - // Insert new node in position - heapList[i] = newNode; - } - - /// - /// Obtain the root which represents the node the the best attributes currently - /// - /// node with the best attributes currently - /// - public Node GetRootLocation() - { - // The heap is empty. There is nothing to return. - if (heapList.Count == 0) - throw new InvalidOperationException("The heap is empty."); - - // Save the root node - var rootNode = heapList[0]; - locationList.Remove(rootNode.Location); - - // Temporarirly store the last item's value. - var lastNode = heapList[^1]; - - // Remove the last value. - heapList.RemoveAt(heapList.Count - 1); - - if (heapList.Count > 0) - { - // Start at the first index. - var currentParentPos = 0; - - // Go through the heap from root to bottom... - // Continue until the halfway point of the heap. - while (currentParentPos < heapList.Count / 2) - { - // Select the left child of the current parent - var currentChildPos = (2 * currentParentPos) + 1; - - // If the currently selected child is not the last entry of the list AND right child has better attributes - if ((currentChildPos < heapList.Count - 1) && FirstNodeBetter(heapList[currentChildPos + 1], - heapList[currentChildPos])) - { - // Select the right child - currentChildPos++; - } - - // If the last item is smaller than both siblings at the - // current height, break. - if (FirstNodeBetter(lastNode, heapList[currentChildPos])) - break; - - // Move the item at index j up one level. - heapList[currentParentPos] = heapList[currentChildPos]; - // Move index i to the appropriate branch. - currentParentPos = currentChildPos; - } - - // Insert the last node into the currently free position - heapList[currentParentPos] = lastNode; - } - - return rootNode; - } - - /// - /// Compares two nodes and evaluates their position to the goal. - /// - /// First node to compare - /// Second node to compare - /// True if the first node has a more promising position to the goal than the second - private static bool FirstNodeBetter(Node firstNode, Node secondNode) - { - // Is the FScore smaller? - return (firstNode.FScore < secondNode.FScore) || - // If FScore is equal, evaluate the h-score - (firstNode.FScore == secondNode.FScore && firstNode.HScore < secondNode.HScore); - } - - /// - /// Get the size of the heap - /// - /// size of the heap - public int Count() - { - return heapList.Count; - } - - /// - /// Check if the heap contains a node with a certain location - /// - /// Location to check - /// true if a node with the given location is in the heap - public bool ContainsLocation(Location loc) - { - return locationList.Contains(loc); - } - } - - /* ========= LOCATION PROPERTIES ========= */ - - // TODO: Find a way to remove this Hack for Vines here. - - /// - /// Check if the specified location is on the ground - /// - /// World for performing check - /// Location to check - /// True if the specified location is on the ground - public static bool IsOnGround(World world, Location location) - { - ChunkColumn? chunkColumn = world.GetChunkColumn(location); - if (chunkColumn is null || chunkColumn.FullyLoaded == false) - return true; // avoid moving downward in a not loaded chunk - - Location down = Move(location, Direction.Down); - Material currentMaterial = world.GetBlock(down).Type; - - var result = currentMaterial.IsSolid() - || currentMaterial == Material.TwistingVines || currentMaterial == Material.TwistingVinesPlant - || currentMaterial == Material.WeepingVines || currentMaterial == Material.WeepingVinesPlant - || currentMaterial == Material.Vine; - - var northCheck = 1 + Math.Floor(down.Z) - down.Z > 0.7; - var eastCheck = down.X - Math.Floor(down.X) > 0.7; - var southCheck = down.Z - Math.Floor(down.Z) > 0.7; - var westCheck = 1 + Math.Floor(down.X) - down.X > 0.7; - - if (!result && northCheck) - result |= IsSolidOrVine(world, Move(down, Direction.North)); - - if (!result && northCheck && eastCheck) - result |= IsSolidOrVine(world, Move(down, Direction.NorthEast)); - - if (!result && eastCheck) - result |= IsSolidOrVine(world, Move(down, Direction.East)); - - if (!result && eastCheck && southCheck) - result |= IsSolidOrVine(world, Move(down, Direction.SouthEast)); - - if (!result && southCheck) - result |= IsSolidOrVine(world, Move(down, Direction.South)); - - if (!result && southCheck && westCheck) - result |= IsSolidOrVine(world, Move(down, Direction.SouthWest)); - - if (!result && westCheck) - result |= IsSolidOrVine(world, Move(down, Direction.West)); - - if (!result && westCheck && northCheck) - result |= IsSolidOrVine(world, Move(down, Direction.NorthWest)); - - return result && (location.Y <= Math.Truncate(location.Y) + 0.0001); - } - - private static bool IsSolidOrVine(World world, Location location) - { - var block = world.GetBlock(location); - return block.Type.IsSolid() - || block.Type == Material.TwistingVines - || block.Type == Material.TwistingVinesPlant - || block.Type == Material.WeepingVines - || block.Type == Material.WeepingVinesPlant - || block.Type == Material.Vine; - } - - /// - /// Check if the specified location implies swimming - /// - /// World for performing check - /// Location to check - /// True if the specified location implies swimming - private static bool IsSwimming(World world, Location location) - { - return world.GetBlock(location).Type.IsLiquid(); - } - - /// - /// Check if the specified location can be climbed on - /// - /// World for performing check - /// Location to check - /// True if the specified location can be climbed on - private static bool IsClimbing(World world, Location location) - { - return world.GetBlock(location).Type.CanBeClimbedOn(); - } - - /// - /// Check if the specified location is safe - /// - /// World for performing check - /// Location to check - /// True if the destination location won't directly harm the player - private static bool IsSafe(World world, Location location) - { - return - //No block that can harm the player - !world.GetBlock(location).Type.CanHarmPlayers() - && !world.GetBlock(Move(location, Direction.Up)).Type.CanHarmPlayers() - && !world.GetBlock(Move(location, Direction.Down)).Type.CanHarmPlayers() - - //No fall from a too high place - && (world.GetBlock(Move(location, Direction.Down)).Type.IsSolid() || - IsClimbing(world, Move(location, Direction.Down)) - || world.GetBlock(Move(location, Direction.Down, 2)).Type.IsSolid() || - IsClimbing(world, Move(location, Direction.Down, 2)) - || world.GetBlock(Move(location, Direction.Down, 3)).Type.IsSolid() || - IsClimbing(world, Move(location, Direction.Down, 3))) - - //Not an underwater location - && !(world.GetBlock(Move(location, Direction.Up)).Type.IsLiquid()); - } - - /* ========= SIMPLE MOVEMENTS ========= */ - - /// - /// Check if the player can move in the specified direction - /// - /// World the player is currently located in - /// Location the player is currently at - /// Direction the player is moving to - /// True if the player can move in the specified direction - public static bool CanMove(World world, Location location, Direction direction) - { - switch (direction) - { - // Move vertical - case Direction.Down: - return IsClimbing(world, Move(location, Direction.Down)) || !IsOnGround(world, location); - case Direction.Up: - bool nextTwoBlocks = - !world.GetBlock(Move(Move(location, Direction.Up), Direction.Up)).Type.IsSolid(); - - // Check if the current block can be climbed on - if (IsClimbing(world, location)) - // Check if next block after the next one can be climbed upon - return IsClimbing(world, Move(location, Direction.Up)) || nextTwoBlocks; - - return (IsOnGround(world, location) || IsSwimming(world, location)) && nextTwoBlocks; - - // Move horizontal - case Direction.East: - case Direction.West: - case Direction.South: - case Direction.North: - return PlayerFitsHere(world, Move(location, direction)); - - // Move diagonal - case Direction.NorthEast: - return PlayerFitsHere(world, Move(location, Direction.North)) && - PlayerFitsHere(world, Move(location, Direction.East)) && - PlayerFitsHere(world, Move(location, direction)); - case Direction.SouthEast: - return PlayerFitsHere(world, Move(location, Direction.South)) && - PlayerFitsHere(world, Move(location, Direction.East)) && - PlayerFitsHere(world, Move(location, direction)); - case Direction.SouthWest: - return PlayerFitsHere(world, Move(location, Direction.South)) && - PlayerFitsHere(world, Move(location, Direction.West)) && - PlayerFitsHere(world, Move(location, direction)); - case Direction.NorthWest: - return PlayerFitsHere(world, Move(location, Direction.North)) && - PlayerFitsHere(world, Move(location, Direction.West)) && - PlayerFitsHere(world, Move(location, direction)); - - default: - throw new ArgumentException("Unknown direction", nameof(direction)); - } - } - - /// - /// Evaluates if a player fits in this location - /// - /// Current world - /// Location to check - /// True if a player is able to stand in this location - public static bool PlayerFitsHere(World world, Location location) - { - var canClimb = IsClimbing(world, location) && IsClimbing(world, Move(location, Direction.Up)); - var isNotSolid = !world.GetBlock(location).Type.IsSolid() && - !world.GetBlock(Move(location, Direction.Up)).Type.IsSolid(); - - // Handle slabs - if (!isNotSolid && world.GetBlock(Move(location, Direction.Up)) - .IsTopSlab(McClient.Instance!.GetProtocolVersion())) - isNotSolid = true; - - return canClimb || isNotSolid; - } - - /// - /// Get an updated location for moving in the specified direction - /// - /// Current location - /// Direction to move to - /// Distance, in blocks - /// Updated location - public static Location Move(Location location, Direction direction, int length = 1) - { - return location + Move(direction) * length; - } - - /// - /// Get a location delta for moving in the specified direction - /// - /// Direction to move to - /// A location delta for moving in that direction - private static Location Move(Direction direction) - { - return direction switch - { - // Move vertical - Direction.Down => new Location(0, -1, 0), - Direction.Up => new Location(0, 1, 0), - - // Move horizontal straight - Direction.East => new Location(1, 0, 0), - Direction.West => new Location(-1, 0, 0), - Direction.South => new Location(0, 0, 1), - Direction.North => new Location(0, 0, -1), - - // Move horizontal diagonal - Direction.NorthEast => Move(Direction.North) + Move(Direction.East), - Direction.SouthEast => Move(Direction.South) + Move(Direction.East), - Direction.SouthWest => Move(Direction.South) + Move(Direction.West), - Direction.NorthWest => Move(Direction.North) + Move(Direction.West), - - _ => throw new ArgumentException("Unknown direction", nameof(direction)) - }; - } - - /// - /// Check that the chunks at both the start and destination locations have been loaded - /// - /// Current world - /// Start location - /// Destination location - /// Is loading complete - public static bool CheckChunkLoading(World world, Location start, Location dest) - { - var chunkColumn = world.GetChunkColumn(dest); - if (chunkColumn is null || chunkColumn.FullyLoaded == false) - return false; - - chunkColumn = world.GetChunkColumn(start); - if (chunkColumn is null || chunkColumn.FullyLoaded == false) - return false; - - return true; - } - } -} \ No newline at end of file diff --git a/MinecraftClient/Mapping/PlayerTeam.cs b/MinecraftClient/Mapping/PlayerTeam.cs deleted file mode 100644 index 4ad7ca6453..0000000000 --- a/MinecraftClient/Mapping/PlayerTeam.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Mapping -{ - /// - /// Represents a Minecraft scoreboard team and its current state. - /// - public class PlayerTeam - { - /// Team internal name (up to 16 chars) - public string Name { get; set; } = string.Empty; - - /// Display name component (formatted text) - public string DisplayName { get; set; } = string.Empty; - - /// Friendly fire is allowed between team members - public bool AllowFriendlyFire { get; set; } - - /// Team members can see invisible teammates - public bool SeeFriendlyInvisibles { get; set; } - - /// - /// Nametag visibility rule. - /// Values: "always", "hideForOtherTeams", "hideForOwnTeam", "never" - /// - public string NameTagVisibility { get; set; } = string.Empty; - - /// - /// Collision rule. - /// Values: "always", "pushOtherTeams", "pushOwnTeam", "never" - /// - public string CollisionRule { get; set; } = string.Empty; - - /// - /// Team color as ChatFormatting enum ordinal (-1 = RESET/none, - /// 0–15 = BLACK … WHITE). - /// - public int Color { get; set; } = -1; - - /// Prefix displayed before member names (formatted text) - public string Prefix { get; set; } = string.Empty; - - /// Suffix displayed after member names (formatted text) - public string Suffix { get; set; } = string.Empty; - - /// Current set of player / entity names on this team - public HashSet Members { get; } = new(System.StringComparer.OrdinalIgnoreCase); - } -} diff --git a/MinecraftClient/Mapping/RaycastHelper.cs b/MinecraftClient/Mapping/RaycastHelper.cs deleted file mode 100644 index 483b0b86b0..0000000000 --- a/MinecraftClient/Mapping/RaycastHelper.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System; - -namespace MinecraftClient.Mapping -{ - public static class RaycastHelper - { - public static Tuple RaycastBlock(McClient handler, double maxDistance, bool includeFluids) - { - return RaycastBlock(handler.GetWorld(), handler.GetCurrentLocation(), handler.GetYaw(), handler.GetPitch(), maxDistance, includeFluids); - } - - public static Tuple RaycastBlock(World world, Location playerLocation, float yaw, float pitch, double maxDistance, bool includeFluids) - { - Location camera = playerLocation.EyesLocation(); - Location rotation = MathHelper.GetRotationVector(yaw, pitch); - Location end = camera + (rotation * maxDistance); - return Raycast(world, camera, end, includeFluids); - } - - public static Tuple RaycastEntity(McClient handler, double maxDistance) - { - throw new NotImplementedException(); - } - - private static Block CheckRaycastResult(World world, Location location, bool includeFluids) - { - Block block = world.GetBlock(location); - - if (!includeFluids && MaterialExtensions.IsLiquid(block.Type)) - return Block.Air; - else - return block; - } - - public static Tuple Raycast(World world, Location start, Location end, bool includeFluids) - { - if (start == end) - return new(false, Location.Zero, Block.Air); - - double start_x = MathHelper.Lerp(-1.0E-7, start.X, end.X); - double start_y = MathHelper.Lerp(-1.0E-7, start.Y, end.Y); - double start_z = MathHelper.Lerp(-1.0E-7, start.Z, end.Z); - double end_x = MathHelper.Lerp(-1.0E-7, end.X, start.X); - double end_y = MathHelper.Lerp(-1.0E-7, end.Y, start.Y); - double end_z = MathHelper.Lerp(-1.0E-7, end.Z, start.Z); - - Location res_location = new(Math.Floor(start_x), Math.Floor(start_y), Math.Floor(start_z)); - Block block = CheckRaycastResult(world, res_location, includeFluids); - if (block.Type != Material.Air) - return new(true, res_location, block); - - double dx = end_x - start_x; - double dy = end_y - start_y; - double dz = end_z - start_z; - int dx_sign = Math.Sign(dx); - int dy_sign = Math.Sign(dy); - int dz_sign = Math.Sign(dz); - double x_step = dx_sign == 0 ? double.MaxValue : (double)dx_sign / dx; - double y_step = dy_sign == 0 ? double.MaxValue : (double)dy_sign / dy; - double z_step = dz_sign == 0 ? double.MaxValue : (double)dz_sign / dz; - double x_frac = x_step * (dx_sign > 0 ? 1.0 - MathHelper.FractionalPart(start_x) : MathHelper.FractionalPart(start_x)); - double y_frac = y_step * (dy_sign > 0 ? 1.0 - MathHelper.FractionalPart(start_y) : MathHelper.FractionalPart(start_y)); - double z_frac = z_step * (dz_sign > 0 ? 1.0 - MathHelper.FractionalPart(start_z) : MathHelper.FractionalPart(start_z)); - - while (x_frac <= 1.0 || y_frac <= 1.0 || z_frac <= 1.0) - { - if (x_frac < y_frac) - { - if (x_frac < z_frac) - { - res_location.X += dx_sign; - x_frac += x_step; - } - else - { - res_location.Z += dz_sign; - z_frac += z_step; - } - } - else if (y_frac < z_frac) - { - res_location.Y += dy_sign; - y_frac += y_step; - } - else - { - res_location.Z += dz_sign; - z_frac += z_step; - } - - block = CheckRaycastResult(world, res_location, includeFluids); - if (block.Type != Material.Air) - return new(true, res_location, block); - } - - return new(false, Location.Zero, Block.Air); - } - } - - public static class MathHelper - { - public static Location GetRotationVector(float yaw, float pitch) - { - float yaw_rad = -yaw * (MathF.PI / 180); - (float yaw_sin, float yaw_cos) = MathF.SinCos(yaw_rad); - - float pitch_rad = pitch * (MathF.PI / 180); - (float pitch_sin, float pitch_cos) = MathF.SinCos(pitch_rad); - - return new(yaw_sin * pitch_cos, -pitch_sin, yaw_cos * pitch_cos); - } - - public static double Lerp(double delta, double start, double end) - { - return start + delta * (end - start); - } - - public static long Lfloor(double value) - { - long l = (long)value; - return value < (double)l ? l - 1L : l; - } - - public static double FractionalPart(double value) - { - return value - Lfloor(value); - } - } -} diff --git a/MinecraftClient/Mapping/VillagerInfo.cs b/MinecraftClient/Mapping/VillagerInfo.cs deleted file mode 100644 index 7cd38373b0..0000000000 --- a/MinecraftClient/Mapping/VillagerInfo.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace MinecraftClient -{ - /// - /// Information of a villager - /// - public class VillagerInfo - { - public int Level { get; set; } - public int Experience { get; set; } - public bool IsRegularVillager { get; set; } - public bool CanRestock { get; set; } - } -} diff --git a/MinecraftClient/Mapping/World.cs b/MinecraftClient/Mapping/World.cs deleted file mode 100644 index 832bf5d01d..0000000000 --- a/MinecraftClient/Mapping/World.cs +++ /dev/null @@ -1,511 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Linq; - -namespace MinecraftClient.Mapping -{ - /// - /// Represents a Minecraft World - /// - public class World - { - /// - /// The chunks contained into the Minecraft world - /// (int ChunkX, int ChunkZ): chunkX, chunkZ - /// - private ConcurrentDictionary<(int ChunkX, int ChunkZ), ChunkColumn> chunks = new(); - - /// - /// The dimension info of the world - /// - private static Dimension curDimension = new(); - - private static readonly Dictionary dimensionList = new(); - - /// - /// VarInt ID → dimension name mapping, populated from RegistryData in 1.20.6+ - /// - private static Dictionary dimensionIdMap = new(); - - /// - /// VarInt ID → attribute name mapping, populated from RegistryData (minecraft:attribute) in 1.20.6+ - /// - private static Dictionary attributeIdMap = new(); - - /// - /// Chunk data parsing progress - /// - public int chunkCnt = 0; - public int chunkLoadNotCompleted = 0; - - /// - /// Read, set or unload the specified chunk column - /// - /// ChunkColumn X - /// ChunkColumn Z - /// chunk at the given location - public ChunkColumn? this[int chunkX, int chunkZ] - { - get - { - chunks.TryGetValue((chunkX, chunkZ), out ChunkColumn? chunkColumn); - return chunkColumn; - } - set - { - var chunkCoord = (chunkX, chunkZ); - if (value is null) - chunks.TryRemove(chunkCoord, out _); - else - chunks.AddOrUpdate(chunkCoord, value, (_, _) => value); - } - } - - - /// - /// Storage of all dimensional data - 1.19.1 and above - /// - /// Registry Codec nbt data - public static void StoreDimensionList(Dictionary registryCodec) - { - const string namespacedDimensionTypeKey = "minecraft:dimension_type"; - const string legacyDimensionTypeKey = "dimension_type"; - - if (!registryCodec.TryGetValue(namespacedDimensionTypeKey, out var dimensionTypeRegistry) - && !registryCodec.TryGetValue(legacyDimensionTypeKey, out dimensionTypeRegistry)) - { - return; - } - - var dimensionListNbt = (object[])(((Dictionary)dimensionTypeRegistry)["value"]); - foreach (var (dimensionName, dimensionType) in from Dictionary dimensionNbt in dimensionListNbt - let dimensionName = (string)dimensionNbt["name"] - let dimensionType = (Dictionary)dimensionNbt["element"] - select (dimensionName, dimensionType)) - { - StoreOneDimension(dimensionName, dimensionType); - } - } - - public static void LoadDefaultDimensions1206Plus() - { - // TODO: Move this to a JSON file. - - var defaultRegistryCodec = new Dictionary - { - { "minecraft:dimension_type", new Dictionary - { - { "value", new object[] - { - new Dictionary - { - { "name", "minecraft:overworld" }, - { "id", 0 }, - { "element", new Dictionary - { - { "piglin_safe", (byte)0 }, - { "natural", 1 }, - { "ambient_light", 0.0 }, - { "monster_spawn_block_light_limit", 0 }, - { "infiniburn", "#minecraft:infiniburn_overworld" }, - { "respawn_anchor_works", 0 }, - { "has_skylight", 1 }, - { "bed_works", 1 }, - { "effects", "minecraft:overworld" }, - { "has_raids", 1 }, - { "logical_height", 384 }, - { "coordinate_scale", 1.0 }, - { "monster_spawn_light_level", new Dictionary - { - { "min_inclusive", 0 }, - { "max_inclusive", 7 }, - { "type", "minecraft:uniform" } - } - }, - { "min_y", -64 }, - { "ultrawarm", 0 }, - { "has_ceiling", 0 }, - { "height", 384 } - } - } - }, - new Dictionary - { - { "name", "minecraft:overworld_caves" }, - { "id", 1 }, - { "element", new Dictionary - { - { "piglin_safe", (byte)0 }, - { "natural", 1 }, - { "ambient_light", 0.0 }, - { "monster_spawn_block_light_limit", 0 }, - { "infiniburn", "#minecraft:infiniburn_overworld" }, - { "respawn_anchor_works", 0 }, - { "has_skylight", 1 }, - { "bed_works", 1 }, - { "effects", "minecraft:overworld" }, - { "has_raids", 1 }, - { "logical_height", 384 }, - { "coordinate_scale", 1.0 }, - { "monster_spawn_light_level", new Dictionary - { - { "min_inclusive", 0 }, - { "max_inclusive", 7 }, - { "type", "minecraft:uniform" } - } - }, - { "min_y", -64 }, - { "ultrawarm", 0 }, - { "has_ceiling", 1 }, - { "height", 384 } - } - } - }, - new Dictionary - { - { "name", "minecraft:the_end" }, - { "id", 2 }, - { "element", new Dictionary - { - { "piglin_safe", (byte)0 }, - { "natural", 0 }, - { "ambient_light", 0.0 }, - { "monster_spawn_block_light_limit", 0 }, - { "infiniburn", "#minecraft:infiniburn_end" }, - { "respawn_anchor_works", 0 }, - { "has_skylight", 0 }, - { "bed_works", 0 }, - { "effects", "minecraft:the_end" }, - { "fixed_time", 6000 }, - { "has_raids", 1 }, - { "logical_height", 256 }, - { "coordinate_scale", 1.0 }, - { "monster_spawn_light_level", new Dictionary - { - { "min_inclusive", 0 }, - { "max_inclusive", 7 }, - { "type", "minecraft:uniform" } - } - }, - { "min_y", 0 }, - { "ultrawarm", 0 }, - { "has_ceiling", 0 }, - { "height", 256 } - } - } - }, - new Dictionary - { - { "name", "minecraft:the_nether" }, - { "id", 3 }, - { "element", new Dictionary - { - { "piglin_safe", (byte)1 }, - { "natural", 0 }, - { "ambient_light", 0.1 }, - { "monster_spawn_block_light_limit", 15 }, - { "infiniburn", "#minecraft:infiniburn_nether" }, - { "respawn_anchor_works", 1 }, - { "has_skylight", 0 }, - { "bed_works", 0 }, - { "effects", "minecraft:the_nether" }, - { "fixed_time", 18000 }, - { "has_raids", 0 }, - { "logical_height", 128 }, - { "coordinate_scale", 8.0 }, - { "monster_spawn_light_level", 7 }, - { "min_y", 0 }, - { "ultrawarm", 1 }, - { "has_ceiling", 1 }, - { "height", 256 } - } - } - } - } - } - } - } - }; - - StoreDimensionList(defaultRegistryCodec); - } - - public static void SetDimensionIdMap(Dictionary idMap) - { - dimensionIdMap = idMap; - } - - public static string GetDimensionNameById(int id) - { - return dimensionIdMap.TryGetValue(id, out var name) ? name : "minecraft:overworld"; - } - - public static bool HasAnyDimension() - { - return dimensionList.Count > 0; - } - - public static void SetAttributeIdMap(Dictionary idMap) - { - attributeIdMap = idMap; - } - - /// - /// Get attribute name by its registry VarInt ID. Returns null if the ID is unknown. - /// When KnownDataPacks negotiation tells the server we already have vanilla data, - /// the server skips sending the attribute registry. In that case we fall back to - /// the built-in vanilla 1.20.6 attribute order (22 entries). - /// - public static string? GetAttributeNameById(int id) - { - if (attributeIdMap.Count == 0) - LoadDefaultAttributes(); - return attributeIdMap.TryGetValue(id, out var name) ? name : null; - } - - private static void LoadDefaultAttributes() - { - // Fallback for when the server doesn't send attribute registry via RegistryData. - // Matches 1.21.1 Attributes.java registration order. - // For 1.20.6+ servers, SetAttributeIdMap() overrides this with the actual registry. - attributeIdMap = new Dictionary - { - { 0, "generic.armor" }, - { 1, "generic.armor_toughness" }, - { 2, "generic.attack_damage" }, - { 3, "generic.attack_knockback" }, - { 4, "generic.attack_speed" }, - { 5, "player.block_break_speed" }, - { 6, "player.block_interaction_range" }, - { 7, "generic.burning_time" }, - { 8, "generic.explosion_knockback_resistance" }, - { 9, "player.entity_interaction_range" }, - { 10, "generic.fall_damage_multiplier" }, - { 11, "generic.flying_speed" }, - { 12, "generic.follow_range" }, - { 13, "generic.gravity" }, - { 14, "generic.jump_strength" }, - { 15, "generic.knockback_resistance" }, - { 16, "generic.luck" }, - { 17, "generic.max_absorption" }, - { 18, "generic.max_health" }, - { 19, "player.mining_efficiency" }, - { 20, "generic.movement_efficiency" }, - { 21, "generic.movement_speed" }, - { 22, "generic.oxygen_bonus" }, - { 23, "generic.safe_fall_distance" }, - { 24, "generic.scale" }, - { 25, "player.sneaking_speed" }, - { 26, "zombie.spawn_reinforcements" }, - { 27, "generic.step_height" }, - { 28, "player.submerged_mining_speed" }, - { 29, "player.sweeping_damage_ratio" }, - { 30, "generic.water_movement_efficiency" } - }; - } - - /// - /// Store one dimension - Directly used in 1.16.2 to 1.18.2 - /// - /// Dimension name - /// Dimension Type nbt data - public static void StoreOneDimension(string dimensionName, Dictionary dimensionType) - { - if (dimensionList.ContainsKey(dimensionName)) - dimensionList.Remove(dimensionName); - dimensionList.Add(dimensionName, new Dimension(dimensionName, dimensionType)); - } - - - /// - /// Set current dimension - 1.16 and above - /// - /// The name of the dimension type - /// The dimension type (NBT Tag Compound) - public static void SetDimension(string name) - { - // Try to get the dimension using the name as is - if (dimensionList.TryGetValue(name, out Dimension? dimension)) - { - curDimension = dimension; - return; // Dimension found - } - - // If not found, check if name lacks 'minecraft:' prefix and try again - if (!name.StartsWith("minecraft:")) - { - string prefixedName = "minecraft:" + name; - if (dimensionList.TryGetValue(prefixedName, out dimension)) - { - curDimension = dimension; - return; // Dimension found with prefixed name - } - } - else - { - string unprefixedName = name["minecraft:".Length..]; - if (dimensionList.TryGetValue(unprefixedName, out dimension)) - { - curDimension = dimension; - return; - } - } - - if (TryStoreDefaultVanillaDimension(name) - && dimensionList.TryGetValue(name, out dimension)) - { - curDimension = dimension; - return; - } - - // If still not found, dimension does not exist - throw new KeyNotFoundException($"Dimension '{name}' not found in dimensions dictionary."); - } - - private static bool TryStoreDefaultVanillaDimension(string name) - { - var normalizedName = name.StartsWith("minecraft:") - ? name - : "minecraft:" + name; - - if (normalizedName is not ("minecraft:overworld" or "minecraft:the_nether" or "minecraft:the_end")) - return false; - - StoreOneDimension(name, new Dictionary()); - return true; - } - - - - - /// - /// Get current dimension - /// - /// Current dimension - public static Dimension GetDimension() - { - return curDimension; - } - - /// - /// Set chunk column at the specified location - /// - /// ChunkColumn X - /// ChunkColumn Y - /// ChunkColumn Z - /// ChunkColumn size - /// Chunk data - /// Whether the ChunkColumn has been fully loaded - public void StoreChunk(int chunkX, int chunkY, int chunkZ, int chunkColumnSize, Chunk? chunk, bool loadCompleted) - { - ChunkColumn chunkColumn = chunks.GetOrAdd((chunkX, chunkZ), (_) => new(chunkColumnSize)); - chunkColumn[chunkY] = chunk; - if (loadCompleted) - chunkColumn.FullyLoaded = true; - } - - /// - /// Get chunk column at the specified location - /// - /// Location to retrieve chunk column - /// The chunk column - public ChunkColumn? GetChunkColumn(Location location) - { - return this[location.ChunkX, location.ChunkZ]; - } - - /// - /// Get block at the specified location - /// - /// Location to retrieve block from - /// Block at specified location or Air if the location is not loaded - public Block GetBlock(Location location) - { - ChunkColumn? column = GetChunkColumn(location); - if (column is not null) - { - Chunk? chunk = column.GetChunk(location); - if (chunk is not null) - return chunk.GetBlock(location); - } - return Block.Air; - } - - /// - /// Look for a block around the specified location - /// - /// Start location - /// Block type - /// Search radius - larger is slower: O^3 complexity - /// Block matching the specified block type - public List FindBlock(Location from, Material block, double radius) - { - return FindBlock(from, block, radius, radius, radius); - } - - /// - /// Look for a block around the specified location - /// - /// Start location - /// Block type - /// Search radius on the X axis - /// Search radius on the Y axis - /// Search radius on the Z axis - /// Block matching the specified block type - public List FindBlock(Location from, Material block, double radiusx, double radiusy, double radiusz) - { - Location minPoint = new Location(from.X - radiusx, from.Y - radiusy, from.Z - radiusz); - Location maxPoint = new Location(from.X + radiusx, from.Y + radiusy, from.Z + radiusz); - - List xRange = Enumerable.Range(Convert.ToInt32(Math.Floor(minPoint.X)), Convert.ToInt32(Math.Floor(maxPoint.X - minPoint.X)) + 1).ToList(); - List yRange = Enumerable.Range(Convert.ToInt32(Math.Floor(minPoint.Y)), Convert.ToInt32(Math.Floor(maxPoint.Y - minPoint.Y)) + 1).ToList(); - List zRange = Enumerable.Range(Convert.ToInt32(Math.Floor(minPoint.Z)), Convert.ToInt32(Math.Floor(maxPoint.Z - minPoint.Z)) + 1).ToList(); - - List listOfBlocks = xRange.SelectMany(x => yRange.SelectMany(y => zRange.Select(z => new Location(x, y, z)))).ToList(); - - return listOfBlocks.Where(loc => GetBlock(loc).Type == block).ToList(); - } - - /// - /// Set block at the specified location - /// - /// Location to set block to - /// Block to set - public void SetBlock(Location location, Block block) - { - ChunkColumn? column = this[location.ChunkX, location.ChunkZ]; - if (column is not null && location.ChunkY >= 0 && location.ChunkY < column.ColumnSize) - { - Chunk? chunk = column.GetChunk(location); - if (chunk is null) - column[location.ChunkY] = chunk = new Chunk(); - chunk[location.ChunkBlockX, location.ChunkBlockY, location.ChunkBlockZ] = block; - } - } - - /// - /// Clear all terrain data from the world - /// - public void Clear() - { - chunks = new(); - chunkCnt = 0; - chunkLoadNotCompleted = 0; - } - - public static string GetChunkLoadingStatus(World world) - { - double chunkLoadedRatio; - if (world.chunkCnt == 0) - chunkLoadedRatio = 0; - else - chunkLoadedRatio = (world.chunkCnt - world.chunkLoadNotCompleted) / (double)world.chunkCnt; - - string status = string.Format(Translations.cmd_move_chunk_loading_status, - chunkLoadedRatio, world.chunkCnt - world.chunkLoadNotCompleted, world.chunkCnt); - - return status; - } - } -} diff --git a/MinecraftClient/McClient.cs b/MinecraftClient/McClient.cs deleted file mode 100644 index 971449f2a7..0000000000 --- a/MinecraftClient/McClient.cs +++ /dev/null @@ -1,5280 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Net; -using System.Net.Sockets; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using Brigadier.NET; -using Brigadier.NET.Exceptions; -using MinecraftClient.ChatBots; -using MinecraftClient.CommandHandler; -using MinecraftClient.CommandHandler.Patch; -using MinecraftClient.Commands; -using MinecraftClient.Dialogs; -using MinecraftClient.Inventory; -using MinecraftClient.Logger; -using MinecraftClient.Mapping; -using MinecraftClient.Physics; -using MinecraftClient.Protocol; -using MinecraftClient.Protocol.Handlers; -using MinecraftClient.Protocol.Handlers.Forge; -using MinecraftClient.Protocol.Message; -using MinecraftClient.Protocol.ProfileKey; -using MinecraftClient.Protocol.Session; -using MinecraftClient.Proxy; -using MinecraftClient.Scripting; -using Sentry; -using static MinecraftClient.Settings; - -namespace MinecraftClient -{ - /// - /// The main client class, used to connect to a Minecraft server. - /// - public class McClient : IMinecraftComHandler - { - public static int ReconnectionAttemptsLeft = 0; - - public static CommandDispatcher dispatcher = new(); - private readonly Dictionary onlinePlayers = new(); - - private static bool commandsLoaded = false; - private readonly Lock tabListHeaderFooterLock = new(); - private string tabListHeader = string.Empty; - private string tabListFooter = string.Empty; - - private readonly Queue chatQueue = new(); - private static DateTime nextMessageSendTime = DateTime.MinValue; - - private readonly Queue threadTasks = new(); - private readonly Lock threadTasksLock = new(); - private readonly Lock recipeBookLock = new(); - private readonly Lock achievementsLock = new(); - - private readonly List bots = new(); - private static readonly List botsOnHold = new(); - private static readonly Dictionary inventories = new(); - private static readonly HashSet inventoriesWithFullContents = new(); - private readonly Dictionary unlockedRecipes = new(StringComparer.Ordinal); - private readonly Dictionary achievements = new(StringComparer.Ordinal); - private string? activeAdvancementTab; - - private readonly Dictionary> registeredBotPluginChannels = new(); - private readonly List registeredServerPluginChannels = new(); - - private bool terrainAndMovementsEnabled; - private bool terrainAndMovementsRequested = false; - private bool inventoryHandlingEnabled; - private bool inventoryHandlingRequested = false; - private bool entityHandlingEnabled; - - private readonly Lock locationLock = new(); - private bool locationReceived = false; - private readonly World world = new(); - private Queue? path; - private Location location; - private float? _yaw; // Used for calculation ONLY!!! Doesn't reflect the client yaw - private float? _pitch; // Used for calculation ONLY!!! Doesn't reflect the client pitch - private float playerYaw; - private float playerPitch; - private readonly PlayerPhysics playerPhysics = new(); - private readonly MovementInput physicsInput = new(); - private bool physicsInitialized = false; - private Location? pathTarget; // Current waypoint for physics-driven pathfinding - public enum MovementType { Sneak, Walk, Sprint } - private int sequenceId; // User for player block synchronization (Aka. digging, placing blocks, etc..) - private bool CanSendMessage = false; - - private string host; - private int port; - private readonly int protocolversion; - private readonly string username; - private Guid uuid; - private string uuidStr; - private readonly string sessionid; - private readonly PlayerKeyPair? playerKeyPair; - private DateTime lastKeepAlive; - private readonly Lock lastKeepAliveLock = new(); - private int respawnTicks = 0; - private int gamemode = 0; - private bool isSupportPreviewsChat; - private EnchantmentData? lastEnchantment = null; - - private int playerEntityID; - - private readonly Lock DigLock = new(); - private Tuple? LastDigPosition; - private int RemainingDiggingTime = 0; - - // player health and hunger - private float playerHealth; - private int playerFoodSaturation; - private int playerLevel; - private int playerTotalExperience; - private byte CurrentSlot = 0; - - // player effects - private readonly Dictionary playerEffects = new(); - - // player attributes (e.g., block_break_speed, mining_efficiency, submerged_mining_speed) - private readonly Dictionary playerAttributes = new(); - - // scoreboard teams (key = team name) - private readonly Dictionary teams = new(StringComparer.Ordinal); - - // Sneaking - public bool IsSneaking { get; set; } = false; - private bool isUnderSlab = false; - private DateTime nextSneakingUpdate = DateTime.Now; - - // Entity handling - private readonly Dictionary entities = new(); - private readonly Lock signDataLock = new(); - private readonly Dictionary<(int x, int y, int z), (string material, string typeLabel, string[] frontText, string[] backText, bool isWaxed)> knownSigns = new(); - - // server TPS - private long lastAge = 0; - private DateTime lastTime; - private double serverTPS = 0; - private double averageTPS = 20; - private const int maxSamples = 5; - private readonly List tpsSamples = new(maxSamples); - private double sampleSum = 0; - - // ChatBot OnNetworkPacket event - private bool networkPacketCaptureEnabled = false; - - // Cookies - private Dictionary Cookies { get; set; } = new(); - - public int GetServerPort() { return port; } - public string GetServerHost() { return host; } - public string GetUsername() { return username; } - public Guid GetUserUuid() { return uuid; } - public string GetUserUuidStr() { return uuidStr; } - public string GetSessionID() { return sessionid; } - public Location GetCurrentLocation() { return location; } - public float GetYaw() { return playerYaw; } - public int GetSequenceId() { return sequenceId; } - public float GetPitch() { return playerPitch; } - public World GetWorld() { return world; } - public double GetServerTPS() { return averageTPS; } - public bool GetIsSupportPreviewsChat() { return isSupportPreviewsChat; } - public float GetHealth() { return playerHealth; } - public int GetSaturation() { return playerFoodSaturation; } - - /// - /// Get the player's active effects - /// - /// Dictionary of active effects - public Dictionary GetPlayerEffects() - { - return new Dictionary(playerEffects); - } - - /// - /// Get a snapshot of all known scoreboard teams. - /// - /// Dictionary mapping team name to - public Dictionary GetTeams() - { - lock (teams) - return new Dictionary(teams, StringComparer.Ordinal); - } - - /// - /// Get the team that contains the given player/entity name, or null if not found. - /// - public PlayerTeam? GetPlayerTeam(string playerName) - { - lock (teams) - { - foreach (var team in teams.Values) - if (team.Members.Contains(playerName)) - return team; - return null; - } - } - - public int GetLevel() { return playerLevel; } - public int GetTotalExperience() { return playerTotalExperience; } - public byte GetCurrentSlot() { return CurrentSlot; } - public int GetGamemode() { return gamemode; } - public bool GetNetworkPacketCaptureEnabled() { return networkPacketCaptureEnabled; } - public int GetProtocolVersion() { return protocolversion; } - public ILogger GetLogger() { return Log; } - public int GetPlayerEntityID() { return playerEntityID; } - public List GetLoadedChatBots() { return new List(bots); } - public void GetCookie(string key, out byte[]? data) => Cookies.TryGetValue(key, out data); - public void SetCookie(string key, byte[] data) => Cookies[key] = data; - public void DeleteCookie(string key) => Cookies.Remove(key, out var data); - public void DeleteAllCookies() => Cookies?.Clear(); - public (Location location, string material, string typeLabel, string[] frontText, string[] backText, bool isWaxed)[] GetKnownSigns() - { - lock (signDataLock) - { - return knownSigns - .Select(pair => ( - location: new Location(pair.Key.x, pair.Key.y, pair.Key.z), - material: pair.Value.material, - typeLabel: pair.Value.typeLabel, - frontText: (string[])pair.Value.frontText.Clone(), - backText: (string[])pair.Value.backText.Clone(), - isWaxed: pair.Value.isWaxed)) - .ToArray(); - } - } - - TcpClient client = null!; - IMinecraftCom handler = null!; - SessionToken _sessionToken; - Tuple? timeoutdetector = null; - private int transferInProgress = 0; - private readonly ConnectionAttemptLifecycle connectionLifecycle = new(); - private int disconnectOwnerThreadId; - private readonly TaskCompletionSource disconnectCompletion = new(TaskCreationOptions.RunContinuationsAsynchronously); - - public ILogger Log; - public DialogManager Dialogs { get; } - internal long ConnectionAttempt { get; } - internal Task DisconnectCompletion => disconnectCompletion.Task; - - private static IMinecraftComHandler? instance; - public static IMinecraftComHandler? Instance => instance; - - /// - /// Starts the main chat client, wich will login to the server using the MinecraftCom class. - /// - /// A valid session obtained with MinecraftCom.GetLogin() - /// Key for message signing - /// The server IP - /// The server port to use - /// Minecraft protocol version to use - /// ForgeInfo item stating that Forge is enabled - public McClient(SessionToken session, PlayerKeyPair? playerKeyPair, string server_ip, ushort port, int protocolversion, ForgeInfo? forgeInfo) - : this(session, playerKeyPair, server_ip, port, protocolversion, forgeInfo, Program.CurrentConnectionAttempt) - { - } - - internal McClient( - SessionToken session, - PlayerKeyPair? playerKeyPair, - string server_ip, - ushort port, - int protocolversion, - ForgeInfo? forgeInfo, - long connectionAttempt) - { - CmdResult.currentHandler = this; - instance = this; - ConnectionAttempt = connectionAttempt; - - terrainAndMovementsEnabled = Config.Main.Advanced.TerrainAndMovements; - inventoryHandlingEnabled = Config.Main.Advanced.InventoryHandling; - entityHandlingEnabled = Config.Main.Advanced.EntityHandling; - - sessionid = session.ID; - if (!Guid.TryParse(session.PlayerID, out uuid)) - uuid = Guid.Empty; - uuidStr = session.PlayerID; - username = session.PlayerName; - host = server_ip; - this.port = port; - this.protocolversion = protocolversion; - this.playerKeyPair = playerKeyPair; - _sessionToken = session; - - Log = Settings.Config.Logging.LogToFile - ? new FileLogLogger(Config.AppVar.ExpandVars(Settings.Config.Logging.LogFile), Settings.Config.Logging.PrependTimestamp) - : new FilteredLogger(); - Log.DebugEnabled = Config.Logging.DebugMessages; - Log.InfoEnabled = Config.Logging.InfoMessages; - Log.ChatEnabled = Config.Logging.ChatMessages; - Log.WarnEnabled = Config.Logging.WarningMessages; - Log.ErrorEnabled = Config.Logging.ErrorMessages; - Dialogs = new DialogManager(this); - - // SENTRY: Send our client version and server version to Sentry - SentrySdk.ConfigureScope(scope => - { - scope.SetTag("Protocol Version", protocolversion.ToString()); - scope.SetTag("Minecraft Version", ProtocolHandler.ProtocolVersion2MCVer(protocolversion)); - scope.SetTag("MCC Build", Program.BuildInfo is null ? "Debug" : Program.BuildInfo); - - if (forgeInfo is not null) - scope.SetTag("Forge Version", forgeInfo.Version.ToString()); - - scope.Contexts["Server Information"] = new - { - ProtocolVersion = protocolversion, - MinecraftVersion = ProtocolHandler.ProtocolVersion2MCVer(protocolversion), - ForgeInfo = forgeInfo?.Version - }; - - scope.Contexts["Client Configuration"] = new - { - TerrainAndMovementsEnabled = terrainAndMovementsEnabled, - InventoryHandlingEnabled = inventoryHandlingEnabled, - EntityHandlingEnabled = entityHandlingEnabled - }; - }); - - SentrySdk.StartSession(); - - /* Load commands from Commands namespace */ - LoadCommands(); - - if (botsOnHold.Count == 0) - { - RegisterBots(); - } - else - { - ConnectionAttemptLifecycle.RestoreHeldBots(botsOnHold, bot => BotLoad(bot, false)); - } - - try - { - client = ProxyHandler.NewTcpClient(host, port); - client.ReceiveBufferSize = 1024 * 1024; - client.ReceiveTimeout = Config.Main.Advanced.TcpTimeout * 1000; // Default: 30 seconds - handler = Protocol.ProtocolHandler.GetProtocolHandler(client, protocolversion, forgeInfo, this); - if (forgeInfo is not null && forgeInfo.Version == FMLVersion.FML) - ChatParser.LoadForgeModTranslations(forgeInfo.Mods.Select(static mod => mod.ModID)); - Log.Info(Translations.mcc_version_supported); - - timeoutdetector = new(new Thread(new ParameterizedThreadStart(TimeoutDetector)), new CancellationTokenSource()); - timeoutdetector.Item1.Name = "MCC Connection timeout detector"; - timeoutdetector.Item1.Start(timeoutdetector.Item2.Token); - - try - { - if (handler.Login(this.playerKeyPair, session)) - { - Log.Info(string.Format(Translations.mcc_joined, Config.Main.Advanced.InternalCmdChar.ToLogString())); - - StartConsoleSession(); - } - else - { - Log.Error(Translations.error_login_failed); - goto Retry; - } - } - catch (Exception e) - { - Log.Error(e.GetType().Name + ": " + e.Message); - Log.Error(Translations.error_join); - goto Retry; - } - } - catch (SocketException e) - { - Log.Error(e.Message); - Log.Error(Translations.error_connect); - goto Retry; - } - - return; - - Retry: - if (timeoutdetector is not null) - { - timeoutdetector.Item2.Cancel(); - timeoutdetector = null; - } - - if (connectionLifecycle.IsFailureClaimed) - return; - - if (!InternalConfig.InteractiveMode) - { - StopConsoleSession(); - Program.HandleFailure(null, false, ChatBot.DisconnectReason.ConnectionLost); - return; - } - - if (!Config.ChatBot.AutoRelog.Enabled) - { - if (ReconnectionAttemptsLeft > 0) - { - Log.Info(string.Format(Translations.mcc_reconnect, ReconnectionAttemptsLeft)); - Thread.Sleep(5000); - ReconnectionAttemptsLeft--; - Program.Restart(); - return; - } - - StopConsoleSession(); - Program.HandleFailure(); - return; - } - - OnConnectionLost(ChatBot.DisconnectReason.ConnectionLost, Translations.mcc_disconnect_lost); - return; - } - - public void Transfer(string newHost, int newPort) - { - // Do not block here: a new handler can start processing packets before the - // previous transfer call fully unwinds, and waiting can deadlock main-thread work. - if (Interlocked.CompareExchange(ref transferInProgress, 1, 0) != 0) - { - Log.Warn($"Ignoring overlapping transfer to {newHost}:{newPort} because another transfer is still in progress."); - return; - } - - IMinecraftCom oldHandler = handler; - TcpClient oldClient = client; - string resolvedHost = newHost; - int resolvedPort = newPort; - - try - { - ResolveTransferAddress(ref resolvedHost, ref resolvedPort); - Log.Info($"Initiating a transfer to: {resolvedHost}:{resolvedPort}"); - - // Backup current bots before unloading, so they can be restored after successful transfer. - if (botsOnHold.Count == 0 && bots.Count > 0) - { - botsOnHold.AddRange(bots.Where(bot => bot.ScriptOwnerKey is null)); - } - - // Unload bots - UnloadAllBots(); - bots.Clear(); - - ResetStateForTransfer(); - - // Snapshot cookies before Dispose clears them - Dictionary savedCookies = new Dictionary(Cookies); - - // Retire the old handler so its updater exits without reporting a stale disconnect. - oldHandler.Dispose(); - oldClient.Close(); - - host = resolvedHost; - port = resolvedPort; - UpdateKeepAlive(); - - // Establish new connection - client = ProxyHandler.NewTcpClient(resolvedHost, resolvedPort); - client.ReceiveBufferSize = 1024 * 1024; - client.ReceiveTimeout = Config.Main.Advanced.TcpTimeout * 1000; - - // Reinitialize the protocol handler - handler = Protocol.ProtocolHandler.GetProtocolHandler(client, protocolversion, null, this); - Cookies = savedCookies; // Restore cookies for the new connection before login - Log.Info($"Connected to {resolvedHost}:{resolvedPort}"); - - // Retry login process - if (handler.Login(playerKeyPair, _sessionToken, isTransfer: true)) - { - foreach (var bot in botsOnHold) - BotLoad(bot, false); - botsOnHold.Clear(); - - UpdateKeepAlive(); - Log.Info($"Successfully transferred connection and logged in to {resolvedHost}:{resolvedPort}."); - - StartConsoleSession(); - } - else - { - Log.Error("Failed to login to the new host."); - throw new Exception("Login failed after transfer."); - } - } - catch (Exception ex) - { - Log.Error($"Transfer to {resolvedHost}:{resolvedPort} failed: {ex.Message}"); - - try - { - handler.Dispose(); - } - catch - { - } - - try - { - client.Close(); - } - catch - { - } - - // Handle reconnection attempts - if (timeoutdetector is not null) - { - timeoutdetector.Item2.Cancel(); - timeoutdetector = null; - } - - if (!InternalConfig.InteractiveMode) - { - StopConsoleSession(); - Program.HandleFailure(null, false, ChatBot.DisconnectReason.ConnectionLost); - return; - } - - if (ReconnectionAttemptsLeft > 0) - { - Log.Info($"Reconnecting... Attempts left: {ReconnectionAttemptsLeft}"); - Thread.Sleep(5000); - ReconnectionAttemptsLeft--; - Program.Restart(); - return; - } - - StopConsoleSession(); - Program.HandleFailure(); - } - finally - { - Interlocked.Exchange(ref transferInProgress, 0); - } - } - - private static void ResolveTransferAddress(ref string host, ref int port) - { - if (Config.Main.Advanced.ResolveSrvRecords == MainConfigHelper.MainConfig.AdvancedConfig.ResolveSrvRecordType.no - || port != 25565 - || IPAddress.TryParse(host, out _)) - { - return; - } - - ushort resolvedPort = (ushort)port; - ProtocolHandler.MinecraftServiceLookup(ref host, ref resolvedPort); - port = resolvedPort; - } - - private void StartConsoleSession() - { - Program.EndOfflinePrompt(ConnectionAttempt); - ConsoleInputRouter.RouteToClient(this); - } - - private void StopConsoleSession() - { - ConsoleInputRouter.ClearClient(this); - } - - private void ResetStateForTransfer() - { - ClearTasks(); - ConsoleIO.CancelAutocomplete(); - SetCanSendMessage(false); - - locationReceived = false; - physicsInitialized = false; - isUnderSlab = false; - path = null; - pathTarget = null; - _yaw = null; - _pitch = null; - LastDigPosition = null; - RemainingDiggingTime = 0; - nextSneakingUpdate = DateTime.Now; - - physicsInput.Reset(); - world.Clear(); - entities.Clear(); - ClearKnownSigns(); - ClearInventories(); - } - - /// - /// Register bots - /// - private void RegisterBots(bool reload = false) - { - if (Config.ChatBot.Alerts.Enabled) { BotLoad(new Alerts()); } - if (Config.ChatBot.AntiAFK.Enabled) { BotLoad(new AntiAFK()); } - if (Config.ChatBot.AutoAttack.Enabled) { BotLoad(new AutoAttack()); } - if (Config.ChatBot.AutoCraft.Enabled) { BotLoad(new AutoCraft()); } - if (Config.ChatBot.AutoDig.Enabled) { BotLoad(new AutoDig()); } - if (Config.ChatBot.AutoDrop.Enabled) { BotLoad(new AutoDrop()); } - if (Config.ChatBot.AutoEat.Enabled) { BotLoad(new AutoEat()); } - if (Config.ChatBot.AutoFishing.Enabled) { BotLoad(new AutoFishing()); } - if (Config.ChatBot.AutoRelog.Enabled) { BotLoad(new AutoRelog()); } - if (Config.ChatBot.AutoRespond.Enabled) { BotLoad(new AutoRespond()); } - if (Config.ChatBot.ChatLog.Enabled) { BotLoad(new ChatLog()); } - if (Config.ChatBot.DiscordBridge.Enabled) { BotLoad(new DiscordBridge()); } - if (Config.ChatBot.Farmer.Enabled) { BotLoad(new Farmer()); } - if (Config.ChatBot.FollowPlayer.Enabled) { BotLoad(new FollowPlayer()); } - if (Config.ChatBot.HangmanGame.Enabled) { BotLoad(new HangmanGame()); } - if (Config.ChatBot.Mailer.Enabled) { BotLoad(new Mailer()); } - if (Config.ChatBot.Map.Enabled) { BotLoad(new Map()); } - if (Config.ChatBot.PlayerListLogger.Enabled) { BotLoad(new PlayerListLogger()); } - if (Config.ChatBot.RemoteControl.Enabled) { BotLoad(new RemoteControl()); } - if (Config.ChatBot.ReplayCapture.Enabled) { BotLoad(new ReplayCapture()); } - if (Config.ChatBot.ScriptScheduler.Enabled) { BotLoad(new ScriptScheduler()); } - if (Config.ChatBot.TelegramBridge.Enabled) { BotLoad(new TelegramBridge()); } - if (Config.ChatBot.ItemsCollector.Enabled) { BotLoad(new ItemsCollector()); } - if (Config.ChatBot.DiscordRpc.Enabled) { BotLoad(new DiscordRpc()); } - if (Config.ChatBot.McpServer.Enabled) { BotLoad(new McpServer()); } - if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("MCC_FILE_INPUT"))) - BotLoad(new FileInputBot()); - } - - /// - /// Retrieve messages from the queue and send. - /// Note: requires external locking. - /// - private void TrySendMessageToServer() - { - if (!CanSendMessage) - return; - - while (chatQueue.Count > 0 && nextMessageSendTime < DateTime.Now) - { - string text = chatQueue.Dequeue(); - handler.SendChatMessage(text, playerKeyPair); - nextMessageSendTime = DateTime.Now + TimeSpan.FromSeconds(Config.Main.Advanced.MessageCooldown); - } - } - - /// - /// Called 20 times per second by the protocol handler - /// - public void OnUpdate() - { - foreach (ChatBot bot in bots.ToArray()) - { - try - { - bot.Update(); - bot.UpdateInternal(); - } - catch (Exception e) - { - if (e is not ThreadAbortException) - Log.Warn("Update: Got error from " + bot.ToString() + ": " + e.ToString()); - else - throw; //ThreadAbortException should not be caught - } - } - - if (nextSneakingUpdate < DateTime.Now) - { - if (world.GetBlock(new Location(location.X, location.Y + 1, location.Z)).IsTopSlab(protocolversion) && !IsSneaking) - { - isUnderSlab = true; - SendEntityAction(EntityActionType.StartSneaking); - } - else - { - if (isUnderSlab && !IsSneaking) - { - isUnderSlab = false; - SendEntityAction(EntityActionType.StopSneaking); - } - } - - nextSneakingUpdate = DateTime.Now.AddMilliseconds(300); - } - - lock (chatQueue) - { - TrySendMessageToServer(); - } - - if (terrainAndMovementsEnabled && locationReceived) - { - lock (locationLock) - { - if (!physicsInitialized) - { - BlockShapes.Initialize(); - playerPhysics.SetPosition(location.X, location.Y, location.Z); - playerPhysics.Yaw = playerYaw; - playerPhysics.Pitch = playerPitch; - physicsInitialized = true; - } - - // Navigate pathfinding: set input based on current path - UpdatePathfindingInput(); - - // Sync yaw/pitch if explicitly set (by commands/bots) - if (_yaw is not null) playerPhysics.Yaw = _yaw.Value; - if (_pitch is not null) playerPhysics.Pitch = _pitch.Value; - - // Update environment flags (water, lava, climbable) - playerPhysics.UpdateEnvironment(world); - - // Apply movement input - playerPhysics.ApplyInput(physicsInput); - - // Run one physics tick - playerPhysics.Tick(world); - - // Sync back to MCC location - location = new Location( - playerPhysics.Position.X, - playerPhysics.Position.Y, - playerPhysics.Position.Z); - - playerYaw = _yaw ?? playerYaw; - playerPitch = _pitch ?? playerPitch; - - // Send position packet - handler.SendLocationUpdate(location, playerPhysics.OnGround, playerPhysics.HorizontalCollision, _yaw, _pitch); - - _yaw = null; - _pitch = null; - } - } - - if (Config.Main.Advanced.AutoRespawn && respawnTicks > 0) - { - respawnTicks--; - if (respawnTicks == 0) - SendRespawnPacket(); - } - - // Check for expired effects - if (playerEffects.Count > 0) - { - var expiredEffects = playerEffects - .Where(e => e.Value.IsExpired) - .Select(e => e.Key) - .ToList(); - - foreach (var effect in expiredEffects) - { - if (!playerEffects.Remove(effect, out var effectData)) - continue; - - AnnouncePlayerEffectExpired(effectData); - - if (entities.TryGetValue(playerEntityID, out var playerEntity)) - playerEntity.ActiveEffects.Remove(effect); - } - } - - lock (threadTasksLock) - { - while (threadTasks.Count > 0) - { - Action taskToRun = threadTasks.Dequeue(); - taskToRun(); - } - } - - lock (DigLock) - { - if (RemainingDiggingTime > 0) - { - if (--RemainingDiggingTime == 0 && LastDigPosition is not null) - { - handler.SendPlayerDigging(2, LastDigPosition.Item1, LastDigPosition.Item2, sequenceId++); - Log.Info(string.Format(Translations.cmd_dig_end, LastDigPosition.Item1)); - } - else - { - DoAnimation((int)Hand.MainHand); - } - } - } - } - - #region Connection Lost and Disconnect from Server - - /// - /// Periodically checks for server keepalives and consider that connection has been lost if the last received keepalive is too old. - /// - private void TimeoutDetector(object? o) - { - UpdateKeepAlive(); - do - { - Thread.Sleep(TimeSpan.FromSeconds(15)); - - if (((CancellationToken)o!).IsCancellationRequested) - return; - - lock (lastKeepAliveLock) - { - if (lastKeepAlive.AddSeconds(Config.Main.Advanced.TcpTimeout) < DateTime.Now) - { - if (((CancellationToken)o!).IsCancellationRequested) - return; - - OnConnectionLost(ChatBot.DisconnectReason.ConnectionLost, Translations.error_timeout); - return; - } - } - } - while (!((CancellationToken)o!).IsCancellationRequested); - } - - /// - /// Update last keep alive to current time - /// - private void UpdateKeepAlive() - { - lock (lastKeepAliveLock) - { - lastKeepAlive = DateTime.Now; - } - } - - /// - /// Disconnect the client from the server (initiated from MCC) - /// - public void Disconnect() - { - if (!TryBeginDisconnect()) - { - if (Volatile.Read(ref disconnectOwnerThreadId) != Environment.CurrentManagedThreadId) - disconnectCompletion.Task.GetAwaiter().GetResult(); - return; - } - - try - { - DispatchBotEvent(bot => bot.OnDisconnect(ChatBot.DisconnectReason.UserLogout, string.Empty)); - } - finally - { - CompleteDisconnect(sendDisconnectPacket: true); - } - } - - /// - /// When connection has been lost, login was denied or played was kicked from the server - /// - public void OnConnectionLost(ChatBot.DisconnectReason reason, string message) - { - if (reason == ChatBot.DisconnectReason.UserLogout) - throw new InvalidOperationException(Translations.exception_user_logout); - - if (!TryBeginDisconnect()) - return; - - bool restartScheduled = false; - try - { - ConsoleIO.CancelAutocomplete(); - - world.Clear(); - ClearKnownSigns(); - - bool exitOnFailure = Program.PrepareExitOnFailure(); - - switch (reason) - { - case ChatBot.DisconnectReason.ConnectionLost: - message = Translations.mcc_disconnect_lost; - Log.Info(message); - break; - - case ChatBot.DisconnectReason.InGameKick: - Log.Info(Translations.mcc_disconnect_server); - Log.Info(message); - break; - - case ChatBot.DisconnectReason.LoginRejected: - Log.Info(Translations.mcc_disconnect_login); - Log.Info(message); - break; - } - - // Process AutoRelog last so every other bot can complete cleanup first. - List onDisconnectBotList = bots.Where(bot => bot is not AutoRelog).ToList(); - onDisconnectBotList.AddRange(bots.Where(bot => bot is AutoRelog)); - - foreach (ChatBot bot in onDisconnectBotList) - { - try - { - _ = bot.OnDisconnect(reason, message); - } - catch (Exception exception) when (exception is not ThreadAbortException) - { - Log.Warn("OnDisconnect: Got error from " + bot + ": " + exception); - } - } - - restartScheduled = !exitOnFailure && Program.HasRestartPending(ConnectionAttempt); - } - finally - { - CompleteDisconnect(sendDisconnectPacket: false); - } - - if (!restartScheduled) - Program.HandleFailure(null, false, reason); - } - - private bool TryBeginDisconnect() - { - if (!connectionLifecycle.TryBeginDisconnect()) - return false; - - Volatile.Write(ref disconnectOwnerThreadId, Environment.CurrentManagedThreadId); - instance = null; - StopConsoleSession(); - return true; - } - - private void CompleteDisconnect(bool sendDisconnectPacket) - { - try - { - foreach (ChatBot bot in bots.Where(bot => bot.ScriptOwnerKey is not null).ToList()) - { - try - { - BotUnLoad(bot); - } - catch (Exception exception) when (exception is not ThreadAbortException) - { - Log.Warn(exception.ToString()); - } - } - - botsOnHold.Clear(); - botsOnHold.AddRange(bots.Where(bot => bot.ScriptOwnerKey is null)); - - if (timeoutdetector is not null) - { - CancellationTokenSource timeoutCancellation = timeoutdetector.Item2; - timeoutdetector = null; - RunDisconnectCleanup(timeoutCancellation.Cancel); - } - - if (handler is not null) - { - if (sendDisconnectPacket) - RunDisconnectCleanup(handler.Disconnect); - RunDisconnectCleanup(handler.Dispose); - } - - if (client is not null) - RunDisconnectCleanup(client.Close); - ClearTasks(); - RunDisconnectCleanup(() => SentrySdk.EndSession()); - } - finally - { - connectionLifecycle.CompleteDisconnect(); - Volatile.Write(ref disconnectOwnerThreadId, 0); - disconnectCompletion.TrySetResult(true); - } - } - - private void RunDisconnectCleanup(Action cleanup) - { - try - { - cleanup(); - } - catch (Exception exception) when (exception is not ThreadAbortException) - { - Log.Warn(exception.ToString()); - } - } - - #endregion - - #region Command prompt and internal MCC commands - - private void ConsoleReaderOnMessageReceived(object? sender, string e) - { - if (client.Client is null) - return; - - if (client.Client.Connected) - InvokeOnMainThreadAsync(() => HandleCommandPromptText(e)); - } - - internal void RouteConsoleInput(string input) - { - ConsoleReaderOnMessageReceived(this, input); - } - - /// - /// Get the console message handler delegate for re-attaching after TUI mode. - /// - public EventHandler GetConsoleMessageHandler() - { - return ConsoleReaderOnMessageReceived; - } - - /// - /// Allows the user to send chat messages, commands, and leave the server. - /// Process text from the MCC command prompt on the main thread. - /// - private void HandleCommandPromptText(string text) - { - if (ConsoleIO.BasicIO && text.Length > 0 && text[0] == (char)0x00) - { - //Process a request from the GUI - string[] command = text[1..].Split((char)0x00); - switch (command[0].ToLower()) - { - case "autocomplete": - int id = handler.AutoComplete(command[1]); - while (!ConsoleIO.AutoCompleteDone) { Thread.Sleep(100); } - if (command.Length > 1) { ConsoleIO.WriteLine((char)0x00 + "autocomplete" + (char)0x00 + ConsoleIO.AutoCompleteResult); } - else ConsoleIO.WriteLine((char)0x00 + "autocomplete" + (char)0x00); - break; - } - } - else - { - text = text.Trim(); - - if (text.Length > 1 - && Config.Main.Advanced.InternalCmdChar == MainConfigHelper.MainConfig.AdvancedConfig.InternalCmdCharType.none - && text[0] == '/') - { - SendText(text); - } - else if (text.Length > 2 - && Config.Main.Advanced.InternalCmdChar != MainConfigHelper.MainConfig.AdvancedConfig.InternalCmdCharType.none - && text[0] == Config.Main.Advanced.InternalCmdChar.ToChar() - && text[1] == '/') - { - SendText(text[1..]); - } - else if (text.Length > 0) - { - if (Config.Main.Advanced.InternalCmdChar == MainConfigHelper.MainConfig.AdvancedConfig.InternalCmdCharType.none - || text[0] == Config.Main.Advanced.InternalCmdChar.ToChar()) - { - CmdResult result = new(); - string command = Config.Main.Advanced.InternalCmdChar.ToChar() == ' ' ? text : text[1..]; - if (!PerformInternalCommand(Config.AppVar.ExpandVars(command), ref result, Settings.Config.AppVar.GetVariables()) && Config.Main.Advanced.InternalCmdChar.ToChar() == '/') - { - SendText(text); - } - else if (result.status != CmdResult.Status.NotRun && (result.status != CmdResult.Status.Done || !string.IsNullOrWhiteSpace(result.result))) - { - Log.Info(result); - } - } - else - { - SendText(text); - } - } - } - } - - /// - /// Perform an internal MCC command (not a server command, use SendText() instead for that!) - /// - /// The command - /// May contain a confirmation or error message after processing the command, or "" otherwise. - /// Local variables passed along with the command - /// TRUE if the command was indeed an internal MCC command - public bool PerformInternalCommand(string command, ref CmdResult result, Dictionary? localVars = null) - { - /* Process the provided command */ - ParseResults parse; - try - { - parse = dispatcher.Parse(command, result); - } - catch (Exception e) - { - Log.Debug("Parse fail: " + e.GetFullMessage()); - return false; - } - - try - { - dispatcher.Execute(parse); - - foreach (ChatBot bot in bots.ToArray()) - { - try - { - bot.OnInternalCommand(command, string.Join(" ", Command.GetArgs(command)), result); - } - catch (Exception e) - { - if (e is not ThreadAbortException) - { - Log.Warn(string.Format(Translations.icmd_error, bot.ToString() ?? string.Empty, e.ToString())); - } - else throw; //ThreadAbortException should not be caught - } - } - - return true; - } - catch (CommandSyntaxException e) - { - if (parse.Context.Nodes.Count == 0) - { - return false; - } - else - { - Log.Info("§e" + e.Message ?? e.StackTrace ?? "Incorrect argument."); - Log.Info(dispatcher.GetAllUsageString(parse.Context.Nodes[0].Node.Name, false)); - return true; - } - } - } - - public void LoadCommands() - { - /* Load commands from the 'Commands' namespace */ - - if (!commandsLoaded) - { - Type[] cmds_classes = Program.GetTypesInNamespace("MinecraftClient.Commands"); - foreach (Type type in cmds_classes) - { - if (type.IsSubclassOf(typeof(Command))) - { - try - { - Command cmd = (Command)Activator.CreateInstance(type)!; - cmd.RegisterCommand(dispatcher); - } - catch (Exception e) - { - Log.Warn(e.Message); - } - } - } - commandsLoaded = true; - } - } - - /// - /// Reload settings and bots - /// - /// Marks if bots need to be hard reloaded - public void ReloadSettings() - { - Program.ReloadSettings(true); - ReloadBots(); - } - - /// - /// Reload loaded bots (Only builtin bots) - /// - public void ReloadBots() - { - UnloadAllBots(); - RegisterBots(true); - - if (client.Client.Connected) - bots.ForEach(bot => bot.AfterGameJoined()); - } - - /// - /// Unload All Bots - /// - public void UnloadAllBots() - { - foreach (ChatBot bot in GetLoadedChatBots()) - BotUnLoad(bot); - } - - #endregion - - #region Thread-Invoke: Cross-thread method calls - - /// - /// Invoke a task on the main thread, wait for completion and retrieve return value. - /// - /// Task to run with any type or return value - /// Any result returned from task, result type is inferred from the task - /// bool result = InvokeOnMainThread(methodThatReturnsAbool); - /// bool result = InvokeOnMainThread(() => methodThatReturnsAbool(argument)); - /// int result = InvokeOnMainThread(() => { yourCode(); return 42; }); - /// Type of the return value - public T InvokeOnMainThread(Func task) - { - if (!InvokeRequired) - { - return task(); - } - else - { - TaskWithResult taskWithResult = new(task); - lock (threadTasksLock) - { - threadTasks.Enqueue(taskWithResult.ExecuteSynchronously); - } - return taskWithResult.WaitGetResult(); - } - } - - /// - /// Invoke a task on the main thread and wait for completion - /// - /// Task to run without return value - /// InvokeOnMainThread(methodThatReturnsNothing); - /// InvokeOnMainThread(() => methodThatReturnsNothing(argument)); - /// InvokeOnMainThread(() => { yourCode(); }); - public void InvokeOnMainThread(Action task) - { - InvokeOnMainThread(() => { task(); return true; }); - } - - /// - /// Queue work for the network main thread without blocking the calling thread. - /// - internal void InvokeOnMainThreadAsync(Action task) - { - ArgumentNullException.ThrowIfNull(task); - - if (!InvokeRequired) - { - task(); - return; - } - - lock (threadTasksLock) - threadTasks.Enqueue(task); - } - - /// - /// Clear all tasks - /// - public void ClearTasks() - { - lock (threadTasksLock) - { - threadTasks.Clear(); - } - } - - /// - /// Check if running on a different thread and InvokeOnMainThread is required - /// - /// True if calling thread is not the main thread - public bool InvokeRequired - { - get - { - int callingThreadId = Environment.CurrentManagedThreadId; - if (handler is not null) - { - return handler.GetNetMainThreadId() != callingThreadId; - } - else - { - // net read thread (main thread) not yet ready - return false; - } - } - } - - #endregion - - #region Management: Load/Unload ChatBots and Enable/Disable settings - - /// - /// Load a new bot - /// - public void BotLoad(ChatBot b, bool init = true) - { - if (InvokeRequired) - { - InvokeOnMainThread(() => BotLoad(b, init)); - return; - } - - b.SetHandler(this); - bots.Add(b); - if (init) - DispatchBotEvent(bot => bot.Initialize(), [b]); - if (CanSendMessage) - DispatchBotEvent(bot => bot.AfterGameJoined(), [b]); - } - - /// - /// Unload a bot - /// - public void BotUnLoad(ChatBot b) - { - if (InvokeRequired) - { - InvokeOnMainThread(() => BotUnLoad(b)); - return; - } - - b.OnUnload(); - b.UnregisterChatBotCommands(); - - bots.RemoveAll(item => ReferenceEquals(item, b)); - - // ToList is needed to avoid an InvalidOperationException from modfiying the list while it's being iterated upon. - var botRegistrations = registeredBotPluginChannels.Where(entry => entry.Value.Contains(b)).ToList(); - foreach (var entry in botRegistrations) - { - UnregisterPluginChannel(entry.Key, b); - } - } - - internal void UnloadBotsByScriptOwnerKey(string scriptOwnerKey) - { - if (InvokeRequired) - { - InvokeOnMainThread(() => UnloadBotsByScriptOwnerKey(scriptOwnerKey)); - return; - } - - foreach (ChatBot bot in GetLoadedChatBots()) - { - if (bot.ScriptOwnerKey == scriptOwnerKey) - BotUnLoad(bot); - } - } - - /// - /// Clear bots - /// - public void BotClear() - { - InvokeOnMainThread(bots.Clear); - } - - /// - /// Get Terrain and Movements status. - /// - public bool GetTerrainEnabled() - { - return terrainAndMovementsEnabled; - } - - /// - /// Get Inventory Handling Mode - /// - public bool GetInventoryEnabled() - { - return inventoryHandlingEnabled; - } - - /// - /// Get entity handling status - /// - /// - /// Entity Handling cannot be enabled in runtime (or after joining server) - public bool GetEntityHandlingEnabled() - { - return entityHandlingEnabled; - } - - /// - /// Enable or disable Terrain and Movements. - /// Please note that Enabling will be deferred until next relog, respawn or world change. - /// - /// Enabled - /// TRUE if the setting was applied immediately, FALSE if delayed. - public bool SetTerrainEnabled(bool enabled) - { - if (InvokeRequired) - return InvokeOnMainThread(() => SetTerrainEnabled(enabled)); - - if (enabled) - { - if (!terrainAndMovementsEnabled) - { - terrainAndMovementsRequested = true; - return false; - } - } - else - { - terrainAndMovementsEnabled = false; - terrainAndMovementsRequested = false; - locationReceived = false; - world.Clear(); - } - return true; - } - - /// - /// Enable or disable Inventories. - /// Please note that Enabling will be deferred until next relog. - /// - /// Enabled - /// TRUE if the setting was applied immediately, FALSE if delayed. - public bool SetInventoryEnabled(bool enabled) - { - if (InvokeRequired) - return InvokeOnMainThread(() => SetInventoryEnabled(enabled)); - - if (enabled) - { - if (!inventoryHandlingEnabled) - { - inventoryHandlingRequested = true; - return false; - } - } - else - { - inventoryHandlingEnabled = false; - inventoryHandlingRequested = false; - inventories.Clear(); - ClearUnlockedRecipes(); - } - return true; - } - - /// - /// Enable or disable Entity handling. - /// Please note that Enabling will be deferred until next relog. - /// - /// Enabled - /// TRUE if the setting was applied immediately, FALSE if delayed. - public bool SetEntityHandlingEnabled(bool enabled) - { - if (InvokeRequired) - return InvokeOnMainThread(() => SetEntityHandlingEnabled(enabled)); - - if (!enabled) - { - if (entityHandlingEnabled) - { - entityHandlingEnabled = false; - return true; - } - else - { - return false; - } - } - else - { - // Entity Handling cannot be enabled in runtime (or after joining server) - return false; - } - } - - /// - /// Enable or disable network packet event calling. - /// - /// - /// Enable this may increase memory usage. - /// - /// - public void SetNetworkPacketCaptureEnabled(bool enabled) - { - if (InvokeRequired) - { - InvokeOnMainThread(() => SetNetworkPacketCaptureEnabled(enabled)); - return; - } - - networkPacketCaptureEnabled = enabled; - } - - #endregion - - #region Getters: Retrieve data for use in other methods or ChatBots - - /// - /// Gets the horizontal direction of the takeoff. - /// - /// Return direction of view - public Direction GetHorizontalFacing() - { - return DirectionExtensions.FromRotation(GetYaw()); - } - - /// - /// Get max length for chat messages - /// - /// Max length, in characters - public int GetMaxChatMessageLength() - { - return handler.GetMaxChatMessageLength(); - } - - /// - /// Get a list of disallowed characters in chat - /// - /// - public static char[] GetDisallowedChatCharacters() - { - return [(char)167, (char)127]; // Minecraft color code and ASCII code DEL - } - - /// - /// Get all inventories. ID 0 is the player inventory. - /// - /// All inventories - public Dictionary GetInventories() - { - return inventories; - } - - /// - /// Get all Entities - /// - /// Ladt Enchantments - public EnchantmentData? GetLastEnchantments() - { - return lastEnchantment; - } - - /// - /// Get all unlocked recipe book recipe identifiers. - /// - /// Unlocked recipe identifiers sorted alphabetically - public RecipeBookRecipeEntry[] GetUnlockedRecipes() - { - lock (recipeBookLock) - { - return unlockedRecipes.Values.OrderBy(static recipe => recipe.CommandId, StringComparer.Ordinal).ToArray(); - } - } - - /// - /// Get all achievements/advancements known to the client. - /// - /// Snapshot of all achievements - public Achievement[] GetAchievements() - { - lock (achievementsLock) - { - return [.. achievements.Values]; - } - } - - /// - /// Get only completed achievements/advancements. - /// - /// Snapshot of completed achievements - public Achievement[] GetUnlockedAchievements() - { - lock (achievementsLock) - { - return achievements.Values.Where(static a => a.IsCompleted).ToArray(); - } - } - - /// - /// Get only incomplete achievements/advancements. - /// - /// Snapshot of locked achievements - public Achievement[] GetLockedAchievements() - { - lock (achievementsLock) - { - return achievements.Values.Where(static a => !a.IsCompleted).ToArray(); - } - } - - /// - /// Get all Entities - /// - /// All Entities - public Dictionary GetEntities() - { - return entities; - } - - /// - /// Get all players latency - /// - /// All players latency - public Dictionary GetPlayersLatency() - { - Dictionary playersLatency = new(); - foreach (var player in onlinePlayers) - playersLatency.Add(player.Value.Name, player.Value.Ping); - return playersLatency; - } - - /// - /// Get client player's inventory items - /// - /// Window ID of the requested inventory - /// Item Dictionary indexed by Slot ID (Check wiki.vg for slot ID) - public Container? GetInventory(int inventoryID) - { - if (InvokeRequired) - return InvokeOnMainThread(() => GetInventory(inventoryID)); - - if (inventories.TryGetValue(inventoryID, out Container? inv)) - return inv; - else - return null; - } - - /// - /// Get client player's inventory items - /// - /// Item Dictionary indexed by Slot ID (Check wiki.vg for slot ID) - public Container GetPlayerInventory() - { - return GetInventory(0)!; - } - - /// - /// Get the currently active inventory if it supports recipe book crafting. - /// - /// Active recipe book inventory, or null if the active inventory does not support recipe book crafting - public Container? GetActiveRecipeBookInventory() - { - if (InvokeRequired) - return InvokeOnMainThread(() => GetActiveRecipeBookInventory()); - - if (inventories.Count == 0) - return null; - - Container activeInventory = inventories.MaxBy(static pair => pair.Key).Value; - return SupportsRecipeBook(activeInventory.Type) ? activeInventory : null; - } - - /// - /// Get a set of online player names - /// - /// Online player names - public string[] GetOnlinePlayers() - { - lock (onlinePlayers) - { - string[] playerNames = new string[onlinePlayers.Count]; - int idx = 0; - foreach (var player in onlinePlayers) - playerNames[idx++] = player.Value.Name; - return playerNames; - } - } - - /// - /// Get a dictionary of online player names and their corresponding UUID - /// - /// Dictionay of online players, key is UUID, value is Player name - public Dictionary GetOnlinePlayersWithUUID() - { - Dictionary uuid2Player = new(); - lock (onlinePlayers) - { - foreach (Guid key in onlinePlayers.Keys) - { - uuid2Player.Add(key.ToString(), onlinePlayers[key].Name); - } - } - return uuid2Player; - } - - /// - /// Get player info from uuid - /// - /// Player's UUID - /// Player info - public PlayerInfo? GetPlayerInfo(Guid uuid) - { - if (onlinePlayers.TryGetValue(uuid, out PlayerInfo? player)) - return player; - else - return null; - } - - internal TabListSnapshot GetTabListSnapshot() - { - List<(Guid Uuid, string Name, string DisplayName, int Gamemode, int Ping, int TabListOrder, bool Listed)> players; - lock (onlinePlayers) - { - players = onlinePlayers - .Select(static pair => ( - pair.Key, - pair.Value.Name, - pair.Value.DisplayName ?? string.Empty, - pair.Value.Gamemode, - pair.Value.Ping, - pair.Value.TabListOrder, - pair.Value.Listed)) - .ToList(); - } - - Dictionary teamSnapshot; - lock (teams) - { - teamSnapshot = teams.ToDictionary( - static pair => pair.Key, - static pair => - { - var sourceTeam = pair.Value; - var copy = new PlayerTeam - { - Name = sourceTeam.Name, - DisplayName = sourceTeam.DisplayName, - AllowFriendlyFire = sourceTeam.AllowFriendlyFire, - SeeFriendlyInvisibles = sourceTeam.SeeFriendlyInvisibles, - NameTagVisibility = sourceTeam.NameTagVisibility, - CollisionRule = sourceTeam.CollisionRule, - Color = sourceTeam.Color, - Prefix = sourceTeam.Prefix, - Suffix = sourceTeam.Suffix - }; - - foreach (string member in sourceTeam.Members) - copy.Members.Add(member); - - return copy; - }, - StringComparer.OrdinalIgnoreCase); - } - - string header; - string footer; - lock (tabListHeaderFooterLock) - { - header = tabListHeader; - footer = tabListFooter; - } - - var entries = players - .Select(player => - { - PlayerTeam? team = teamSnapshot.Values.FirstOrDefault( - team => team.Members.Contains(player.Name)); - - string displayName = !string.IsNullOrWhiteSpace(player.DisplayName) - ? player.DisplayName - : TabListFormatter.FormatTeamMemberName(player.Name, team); - - return new TabListEntry( - player.Uuid, - player.Name, - displayName, - team?.Name ?? string.Empty, - !string.IsNullOrWhiteSpace(team?.DisplayName) ? team.DisplayName : team?.Name ?? string.Empty, - player.Gamemode, - player.Ping, - player.TabListOrder, - player.Listed); - }) - .ToList(); - - return new TabListSnapshot(header, footer, entries); - } - - public PlayerKeyPair? GetPlayerKeyPair() - { - return playerKeyPair; - } - - #endregion - - #region Action methods: Perform an action on the Server - - /// - /// Move to the specified location - /// - /// Location to reach - /// Allow possible but unsafe locations thay may hurt the player: lava, cactus... - /// Allow non-vanilla direct teleport instead of computing path, but may cause invalid moves and/or trigger anti-cheat plugins - /// If no valid path can be found, also allow locations within specified distance of destination - /// Do not get closer of destination than specified distance - /// How long to wait until the path is evaluated (default: 5 seconds) - /// When location is unreachable, computation will reach timeout, then optionally fallback to a close location within maxOffset - /// True if a path has been found - public bool MoveTo(Location goal, bool allowUnsafe = false, bool allowDirectTeleport = false, int maxOffset = 0, int minOffset = 0, TimeSpan? timeout = null) - { - lock (locationLock) - { - if (allowDirectTeleport) - { - // 1-step path to the desired location without checking anything - UpdateLocation(goal, goal); // Update yaw and pitch to look at next step - handler.SendLocationUpdate(goal, Movement.IsOnGround(world, goal), false, _yaw, _pitch); - return true; - } - else - { - pathTarget = null; - path = Movement.CalculatePath(world, location, goal, allowUnsafe, maxOffset, minOffset, timeout ?? TimeSpan.FromSeconds(5)); - return path is not null; - } - } - } - - /// - /// Send a chat message or command to the server - /// - /// Text to send to the server - public void SendText(string text) - { - if (String.IsNullOrEmpty(text)) - return; - - if (!CanSendMessage) - { - Log.Warn(Translations.mcc_send_text_not_connected); - return; - } - - int maxLength = handler.GetMaxChatMessageLength(); - - lock (chatQueue) - { - if (text.Length > maxLength) //Message is too long? - { - if (text[0] == '/') - { - //Send the first 100/256 chars of the command - text = text[..maxLength]; - chatQueue.Enqueue(text); - } - else - { - //Split the message into several messages - while (text.Length > maxLength) - { - chatQueue.Enqueue(text[..maxLength]); - text = text[maxLength..]; - } - chatQueue.Enqueue(text); - } - } - else - chatQueue.Enqueue(text); - - TrySendMessageToServer(); - } - } - - public bool SendCustomClickAction(string id, Dictionary? payload) - { - if (InvokeRequired) - return InvokeOnMainThread(() => SendCustomClickAction(id, payload)); - - return handler.SendCustomClickAction(id, payload); - } - - /// - /// Allow to respawn after death - /// - /// True if packet successfully sent - public bool SendRespawnPacket() - { - if (InvokeRequired) - return InvokeOnMainThread(SendRespawnPacket); - - return handler.SendRespawnPacket(); - } - - /// - /// Registers the given plugin channel for the given bot. - /// - /// The channel to register. - /// The bot to register the channel for. - public void RegisterPluginChannel(string channel, ChatBot bot) - { - if (InvokeRequired) - { - InvokeOnMainThread(() => RegisterPluginChannel(channel, bot)); - return; - } - - if (registeredBotPluginChannels.ContainsKey(channel)) - { - registeredBotPluginChannels[channel].Add(bot); - } - else - { - List bots = new() - { - bot - }; - registeredBotPluginChannels[channel] = bots; - SendPluginChannelMessage("REGISTER", Encoding.UTF8.GetBytes(channel), true); - } - } - - /// - /// Unregisters the given plugin channel for the given bot. - /// - /// The channel to unregister. - /// The bot to unregister the channel for. - public void UnregisterPluginChannel(string channel, ChatBot bot) - { - if (InvokeRequired) - { - InvokeOnMainThread(() => UnregisterPluginChannel(channel, bot)); - return; - } - - if (registeredBotPluginChannels.ContainsKey(channel)) - { - List registeredBots = registeredBotPluginChannels[channel]; - registeredBots.RemoveAll(item => object.ReferenceEquals(item, bot)); - if (registeredBots.Count == 0) - { - registeredBotPluginChannels.Remove(channel); - SendPluginChannelMessage("UNREGISTER", Encoding.UTF8.GetBytes(channel), true); - } - } - } - - /// - /// Sends a plugin channel packet to the server. See http://wiki.vg/Plugin_channel for more information - /// about plugin channels. - /// - /// The channel to send the packet on. - /// The payload for the packet. - /// Whether the packet should be sent even if the server or the client hasn't registered it yet. - /// Whether the packet was sent: true if it was sent, false if there was a connection error or it wasn't registered. - public bool SendPluginChannelMessage(string channel, byte[] data, bool sendEvenIfNotRegistered = false) - { - if (InvokeRequired) - return InvokeOnMainThread(() => SendPluginChannelMessage(channel, data, sendEvenIfNotRegistered)); - - if (!sendEvenIfNotRegistered) - { - if (!registeredBotPluginChannels.ContainsKey(channel)) - { - return false; - } - if (!registeredServerPluginChannels.Contains(channel)) - { - return false; - } - } - return handler.SendPluginChannelPacket(channel, data); - } - - public Item? GetHeldBook(BookHand hand = BookHand.Main) - { - if (InvokeRequired) - return InvokeOnMainThread(() => GetHeldBook(hand)); - - if (!inventoryHandlingEnabled || !inventories.TryGetValue(0, out Container? inventory)) - return null; - - int slot = hand == BookHand.Off ? 45 : 36 + CurrentSlot; - return inventory.Items.TryGetValue(slot, out Item? item) ? item : null; - } - - public bool TryGetHeldBookContent(out BookContent content, BookHand hand = BookHand.Main) - { - if (InvokeRequired) - { - (bool ok, BookContent value) = InvokeOnMainThread(() => - { - bool ok = TryGetHeldBookContent(out BookContent value, hand); - return (ok, value); - }); - content = value; - return ok; - } - - return BookContentHelper.TryRead(GetHeldBook(hand), out content); - } - - public bool SendBookEdit(IReadOnlyList pages, string? title = null) - { - if (InvokeRequired) - return InvokeOnMainThread(() => SendBookEdit(pages, title)); - - Item? currentBook = GetHeldBook(BookHand.Main); - if (!BookContentHelper.IsWritableBook(currentBook)) - return false; - - IReadOnlyList normalizedPages = BookContentHelper.NormalizePages(pages); - bool sent = handler.SendEditBook(currentBook!, normalizedPages, title, username, CurrentSlot); - if (sent && GetProtocolVersion() < Protocol18Handler.MC_1_17_Version) - SetHeldBook(BookHand.Main, CreateLocalBookResult(currentBook!, normalizedPages, title)); - - return sent; - } - - private Item CreateLocalBookResult(Item currentBook, IReadOnlyList pages, string? title) - { - return title is null - ? BookContentHelper.CreateWritablePayload(currentBook, pages) - : BookContentHelper.CreateWrittenPayload( - currentBook, - pages, - title, - username, - encodePagesAsJson: GetProtocolVersion() < Protocol18Handler.MC_1_9_Version); - } - - private void SetHeldBook(BookHand hand, Item item) - { - if (!inventoryHandlingEnabled || !inventories.TryGetValue(0, out Container? inventory)) - return; - - int slot = hand == BookHand.Off ? 45 : 36 + CurrentSlot; - inventory.Items[slot] = item; - } - - /// - /// Send the Entity Action packet with the Specified ID - /// - /// TRUE if the item was successfully used - public bool SendEntityAction(EntityActionType entityAction) - { - return InvokeOnMainThread(() => handler.SendEntityAction(playerEntityID, (int)entityAction)); - } - - /// - /// Use the item currently in the player's hand - /// - /// TRUE if the item was successfully used - public bool UseItemOnHand() - { - return InvokeOnMainThread(() => handler.SendUseItem(0, sequenceId++)); - } - - /// - /// Use the item currently in the player's left hand - /// - /// TRUE if the item was successfully used - public bool UseItemOnLeftHand() - { - return InvokeOnMainThread(() => handler.SendUseItem(1, sequenceId++)); - } - - /// - /// Try to merge a slot - /// - /// The container where the item is located - /// Items to be processed - /// The ID of the slot of the item to be processed - /// The slot that was put down - /// The ID of the slot being put down - /// Record changes - /// Whether to fully merge - private static bool TryMergeSlot(Container inventory, Item item, int slotId, Item curItem, int curId, List> changedSlots) - { - int spaceLeft = curItem.Type.StackCount() - curItem.Count; - if (curItem.Type == item!.Type && spaceLeft > 0) - { - // Put item on that stack - if (item.Count <= spaceLeft) - { - // Can fit into the stack - curItem.Count += item.Count; - item.Count = 0; - - changedSlots.Add(new Tuple((short)curId, curItem)); - changedSlots.Add(new Tuple((short)slotId, null)); - - inventory.Items.Remove(slotId); - return true; - } - else - { - item.Count -= spaceLeft; - curItem.Count += spaceLeft; - - changedSlots.Add(new Tuple((short)curId, curItem)); - } - } - return false; - } - - /// - /// Store items in a new slot - /// - /// The container where the item is located - /// Items to be processed - /// The ID of the slot of the item to be processed - /// ID of the new slot - /// Record changes - private static void StoreInNewSlot(Container inventory, Item item, int slotId, int newSlotId, List> changedSlots) - { - Item newItem = item.CloneWithCount(item.Count); - inventory.Items[newSlotId] = newItem; - inventory.Items.Remove(slotId); - - changedSlots.Add(new Tuple((short)newSlotId, newItem)); - changedSlots.Add(new Tuple((short)slotId, null)); - } - - private static bool IsServerManagedOutputSlot(Container inventory, int slotId) - { - return (inventory.Type, slotId) switch - { - (ContainerType.PlayerInventory, 0) => true, - (ContainerType.Crafting, 0) => true, - (ContainerType.Anvil, 2) => true, - (ContainerType.BlastFurnace, 2) => true, - (ContainerType.Furnace, 2) => true, - (ContainerType.Smoker, 2) => true, - (ContainerType.Grindstone, 2) => true, - (ContainerType.Cartography, 2) => true, - (ContainerType.Merchant, 2) => true, - (ContainerType.Stonecutter, 1) => true, - (ContainerType.Loom, 3) => true, - (ContainerType.SmightingTable, 3) => true, - _ => false - }; - } - - private static bool TryGetMirroredPlayerInventoryRange(Container inventory, out int firstWindowSlot, out int lastWindowSlot) - { - firstWindowSlot = -1; - lastWindowSlot = -1; - - if (inventory.Type is ContainerType.PlayerInventory or ContainerType.Unknown) - return false; - - const int mirroredPlayerInventorySlotCount = 36; - int slotCount = inventory.Type.SlotCount(); - if (slotCount <= mirroredPlayerInventorySlotCount) - return false; - - firstWindowSlot = slotCount - mirroredPlayerInventorySlotCount; - lastWindowSlot = slotCount - 1; - return true; - } - - private static bool AreSameInventorySlot(Item? left, Item? right) - { - if (left is null || left.IsEmpty) - return right is null || right.IsEmpty; - if (right is null || right.IsEmpty) - return false; - - return left.Type == right.Type - && left.Count == right.Count - && left.Data == right.Data - && ReferenceEquals(left.NBT, right.NBT) - && ReferenceEquals(left.Components, right.Components); - } - - private bool SetPlayerInventorySlot(int playerInventorySlot, Item? item) - { - if (!inventories.TryGetValue(0, out Container? playerInventory)) - return false; - - if (item is null || item.IsEmpty) - return playerInventory.Items.Remove(playerInventorySlot); - - Item itemClone = item.CloneWithCount(item.Count); - - playerInventory.Items.TryGetValue(playerInventorySlot, out Item? previousItem); - if (AreSameInventorySlot(previousItem, itemClone)) - return false; - - playerInventory.Items[playerInventorySlot] = itemClone; - - return true; - } - - private bool SyncPlayerInventorySlotsFromWindow(Container? inventory) - { - if (inventory is null) - return false; - - if (!inventoriesWithFullContents.Contains(inventory.ID)) - return false; - - if (!TryGetMirroredPlayerInventoryRange(inventory, out int firstWindowSlot, out int lastWindowSlot)) - return false; - - if (!inventories.TryGetValue(0, out Container? playerInventory)) - return false; - - const int firstPlayerInventorySlot = 9; - const int lastPlayerInventorySlot = firstPlayerInventorySlot + 36 - 1; - Dictionary mirroredItems = new(); - - for (int windowSlot = firstWindowSlot; windowSlot <= lastWindowSlot; windowSlot++) - { - if (!inventory.Items.TryGetValue(windowSlot, out Item? item) || item.IsEmpty) - continue; - - int playerInventorySlot = windowSlot - firstWindowSlot + firstPlayerInventorySlot; - mirroredItems[playerInventorySlot] = item.CloneWithCount(item.Count); - } - - bool changed = false; - for (int playerInventorySlot = firstPlayerInventorySlot; playerInventorySlot <= lastPlayerInventorySlot; playerInventorySlot++) - { - playerInventory.Items.TryGetValue(playerInventorySlot, out Item? previousItem); - mirroredItems.TryGetValue(playerInventorySlot, out Item? mirroredItem); - if (AreSameInventorySlot(previousItem, mirroredItem)) - continue; - - changed = true; - break; - } - - if (!changed) - return false; - - for (int playerInventorySlot = firstPlayerInventorySlot; playerInventorySlot <= lastPlayerInventorySlot; playerInventorySlot++) - playerInventory.Items.Remove(playerInventorySlot); - - foreach ((int playerInventorySlot, Item item) in mirroredItems) - playerInventory.Items[playerInventorySlot] = item; - - return changed; - } - - /// - /// Click a slot in the specified window - /// - /// TRUE if the slot was successfully clicked - public bool DoWindowAction(int windowId, int slotId, WindowActionType action) - { - if (InvokeRequired) - return InvokeOnMainThread(() => DoWindowAction(windowId, slotId, action)); - - Item? item = null; - if (inventories.ContainsKey(windowId) && inventories[windowId].Items.ContainsKey(slotId)) - item = inventories[windowId].Items[slotId]; - - List> changedSlots = new(); // List - - // Update our inventory base on action type - Container inventory = GetInventory(windowId)!; - Container playerInventory = GetInventory(0)!; - if (inventory is not null) - { - switch (action) - { - case WindowActionType.LeftClick: - // Check if cursor have item (slot -1) - if (playerInventory.Items.ContainsKey(-1)) - { - // Result slots are server-managed and cannot accept cursor items directly. - if (IsServerManagedOutputSlot(inventory, slotId)) - break; - - // Check target slot also have item? - if (inventory.Items.ContainsKey(slotId)) - { - // Check if both item are the same? - if (inventory.Items[slotId].Type == playerInventory.Items[-1].Type) - { - int maxCount = inventory.Items[slotId].Type.StackCount(); - // Check item stacking - if ((inventory.Items[slotId].Count + playerInventory.Items[-1].Count) <= maxCount) - { - // Put cursor item to target - inventory.Items[slotId].Count += playerInventory.Items[-1].Count; - playerInventory.Items.Remove(-1); - } - else - { - // Leave some item on cursor - playerInventory.Items[-1].Count -= (maxCount - inventory.Items[slotId].Count); - inventory.Items[slotId].Count = maxCount; - } - } - else - { - // Swap two items - (inventory.Items[slotId], playerInventory.Items[-1]) = (playerInventory.Items[-1], inventory.Items[slotId]); - } - } - else - { - // Put cursor item to target - inventory.Items[slotId] = playerInventory.Items[-1]; - playerInventory.Items.Remove(-1); - } - - // Clean up cursor item if count reached zero - if (playerInventory.Items.TryGetValue(-1, out Item? cursorAfterLeft) && cursorAfterLeft.IsEmpty) - playerInventory.Items.Remove(-1); - - if (inventory.Items.ContainsKey(slotId)) - changedSlots.Add(new Tuple((short)slotId, inventory.Items[slotId])); - else - changedSlots.Add(new Tuple((short)slotId, null)); - } - else - { - // Check target slot have item? - if (inventory.Items.ContainsKey(slotId)) - { - if (IsServerManagedOutputSlot(inventory, slotId)) - break; - - // Put target slot item to cursor - playerInventory.Items[-1] = inventory.Items[slotId]; - inventory.Items.Remove(slotId); - - changedSlots.Add(new Tuple((short)slotId, null)); - } - } - break; - case WindowActionType.RightClick: - // Check if cursor have item (slot -1) - if (playerInventory.Items.ContainsKey(-1)) - { - if (IsServerManagedOutputSlot(inventory, slotId)) - break; - - // Check target slot have item? - if (inventory.Items.ContainsKey(slotId)) - { - // Check if both item are the same? - if (inventory.Items[slotId].Type == playerInventory.Items[-1].Type) - { - // Check item stacking - if (inventory.Items[slotId].Count < inventory.Items[slotId].Type.StackCount()) - { - // Drop 1 item count from cursor - playerInventory.Items[-1].Count--; - inventory.Items[slotId].Count++; - } - } - else - { - // Swap two items - (inventory.Items[slotId], playerInventory.Items[-1]) = (playerInventory.Items[-1], inventory.Items[slotId]); - } - } - else - { - // Drop 1 item count from cursor - Item itemTmp = playerInventory.Items[-1]; - Item itemClone = itemTmp.CloneWithCount(1); - inventory.Items[slotId] = itemClone; - playerInventory.Items[-1].Count--; - } - - // Clean up cursor item if count reached zero - if (playerInventory.Items.TryGetValue(-1, out Item? cursorItem) && cursorItem.IsEmpty) - playerInventory.Items.Remove(-1); - } - else - { - // Check target slot have item? - if (inventory.Items.ContainsKey(slotId)) - { - if (IsServerManagedOutputSlot(inventory, slotId)) - { - break; - } - if (inventory.Items[slotId].Count == 1) - { - // Only 1 item count. Put it to cursor - playerInventory.Items[-1] = inventory.Items[slotId]; - inventory.Items.Remove(slotId); - } - else - { - // Take half of the item stack to cursor - if (inventory.Items[slotId].Count % 2 == 0) - { - // Can be evenly divided - Item itemTmp = inventory.Items[slotId]; - playerInventory.Items[-1] = itemTmp.CloneWithCount(itemTmp.Count / 2); - inventory.Items[slotId].Count = itemTmp.Count / 2; - } - else - { - // Cannot be evenly divided. item count on cursor is always larger than item on inventory - Item itemTmp = inventory.Items[slotId]; - playerInventory.Items[-1] = itemTmp.CloneWithCount((itemTmp.Count + 1) / 2); - inventory.Items[slotId].Count = (itemTmp.Count - 1) / 2; - } - } - } - } - if (inventory.Items.ContainsKey(slotId)) - changedSlots.Add(new Tuple((short)slotId, inventory.Items[slotId])); - else - changedSlots.Add(new Tuple((short)slotId, null)); - break; - case WindowActionType.ShiftClick: - case WindowActionType.ShiftRightClick: - if (IsServerManagedOutputSlot(inventory, slotId)) - break; - if (item is not null) - { - /* Target slot have item */ - - bool lower2upper = false, upper2backpack = false, backpack2hotbar = false; // mutual exclusion - bool hotbarFirst = true; // Used when upper2backpack = true - int upperStartSlot = 9; - int upperEndSlot = 35; - int lowerStartSlot = 36; - - switch (inventory.Type) - { - case ContainerType.PlayerInventory: - if (slotId >= 0 && slotId <= 8 || slotId == 45) - { - if (slotId != 0) - hotbarFirst = false; - upper2backpack = true; - lowerStartSlot = 9; - } - else if (item is not null && false /* Check if wearable */) - { - lower2upper = true; - // upperStartSlot = ?; - // upperEndSlot = ?; - // Todo: Distinguish the type of equipment - } - else - { - if (slotId >= 9 && slotId <= 35) - { - backpack2hotbar = true; - lowerStartSlot = 36; - } - else - { - lower2upper = true; - upperStartSlot = 9; - upperEndSlot = 35; - } - } - break; - case ContainerType.Generic_9x1: - if (slotId >= 0 && slotId <= 8) - { - upper2backpack = true; - lowerStartSlot = 9; - } - else - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 8; - } - break; - case ContainerType.Generic_9x2: - if (slotId >= 0 && slotId <= 17) - { - upper2backpack = true; - lowerStartSlot = 18; - } - else - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 17; - } - break; - case ContainerType.Generic_9x3: - case ContainerType.ShulkerBox: - if (slotId >= 0 && slotId <= 26) - { - upper2backpack = true; - lowerStartSlot = 27; - } - else - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 26; - } - break; - case ContainerType.Generic_9x4: - if (slotId >= 0 && slotId <= 35) - { - upper2backpack = true; - lowerStartSlot = 36; - } - else - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 35; - } - break; - case ContainerType.Generic_9x5: - if (slotId >= 0 && slotId <= 44) - { - upper2backpack = true; - lowerStartSlot = 45; - } - else - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 44; - } - break; - case ContainerType.Generic_9x6: - if (slotId >= 0 && slotId <= 53) - { - upper2backpack = true; - lowerStartSlot = 54; - } - else - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 53; - } - break; - case ContainerType.Generic_3x3: - if (slotId >= 0 && slotId <= 8) - { - upper2backpack = true; - lowerStartSlot = 9; - } - else - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 8; - } - break; - case ContainerType.Anvil: - if (slotId >= 0 && slotId <= 2) - { - if (slotId >= 0 && slotId <= 1) - hotbarFirst = false; - upper2backpack = true; - lowerStartSlot = 3; - } - else - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 1; - } - break; - case ContainerType.Beacon: - if (slotId == 0) - { - hotbarFirst = false; - upper2backpack = true; - lowerStartSlot = 1; - } - else if (item is not null && item.Count == 1 && (item.Type == ItemType.NetheriteIngot || - item.Type == ItemType.Emerald || item.Type == ItemType.Diamond || item.Type == ItemType.GoldIngot || - item.Type == ItemType.IronIngot) && !inventory.Items.ContainsKey(0)) - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 0; - } - else - { - if (slotId >= 1 && slotId <= 27) - { - backpack2hotbar = true; - lowerStartSlot = 28; - } - else - { - lower2upper = true; - upperStartSlot = 1; - upperEndSlot = 27; - } - } - break; - case ContainerType.BlastFurnace: - case ContainerType.Furnace: - case ContainerType.Smoker: - if (slotId >= 0 && slotId <= 2) - { - if (slotId >= 0 && slotId <= 1) - hotbarFirst = false; - upper2backpack = true; - lowerStartSlot = 3; - } - else if (item is not null && false /* Check if it can be burned */) - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 0; - } - else - { - if (slotId >= 3 && slotId <= 29) - { - backpack2hotbar = true; - lowerStartSlot = 30; - } - else - { - lower2upper = true; - upperStartSlot = 3; - upperEndSlot = 29; - } - } - break; - case ContainerType.BrewingStand: - if (slotId >= 0 && slotId <= 3) - { - upper2backpack = true; - lowerStartSlot = 5; - } - else if (item is not null && item.Type == ItemType.BlazePowder) - { - lower2upper = true; - if (!inventory.Items.ContainsKey(4) || inventory.Items[4].Count < 64) - upperStartSlot = upperEndSlot = 4; - else - upperStartSlot = upperEndSlot = 3; - } - else if (item is not null && false /* Check if it can be used for alchemy */) - { - lower2upper = true; - upperStartSlot = upperEndSlot = 3; - } - else if (item is not null && (item.Type == ItemType.Potion || item.Type == ItemType.GlassBottle)) - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 2; - } - else - { - if (slotId >= 5 && slotId <= 31) - { - backpack2hotbar = true; - lowerStartSlot = 32; - } - else - { - lower2upper = true; - upperStartSlot = 5; - upperEndSlot = 31; - } - } - break; - case ContainerType.Crafting: - if (slotId >= 0 && slotId <= 9) - { - if (slotId >= 1 && slotId <= 9) - hotbarFirst = false; - upper2backpack = true; - lowerStartSlot = 10; - } - else - { - lower2upper = true; - upperStartSlot = 1; - upperEndSlot = 9; - } - break; - case ContainerType.Enchantment: - if (slotId >= 0 && slotId <= 1) - { - upper2backpack = true; - lowerStartSlot = 5; - } - else if (item is not null && item.Type == ItemType.LapisLazuli) - { - lower2upper = true; - upperStartSlot = upperEndSlot = 1; - } - else - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 0; - } - break; - case ContainerType.Grindstone: - if (slotId >= 0 && slotId <= 2) - { - if (slotId >= 0 && slotId <= 1) - hotbarFirst = false; - upper2backpack = true; - lowerStartSlot = 3; - } - else if (item is not null && false /* Check */) - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 1; - } - else - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 1; - } - break; - case ContainerType.Hopper: - if (slotId >= 0 && slotId <= 4) - { - upper2backpack = true; - lowerStartSlot = 5; - } - else - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 4; - } - break; - case ContainerType.Lectern: - return false; - // break; - case ContainerType.Loom: - if (slotId >= 0 && slotId <= 3) - { - if (slotId >= 0 && slotId <= 5) - hotbarFirst = false; - upper2backpack = true; - lowerStartSlot = 4; - } - else if (item is not null && false /* Check for availability for staining */) - { - lower2upper = true; - // upperStartSlot = ?; - // upperEndSlot = ?; - } - else - { - if (slotId >= 4 && slotId <= 30) - { - backpack2hotbar = true; - lowerStartSlot = 31; - } - else - { - lower2upper = true; - upperStartSlot = 4; - upperEndSlot = 30; - } - } - break; - case ContainerType.Merchant: - if (slotId >= 0 && slotId <= 2) - { - if (slotId >= 0 && slotId <= 1) - hotbarFirst = false; - upper2backpack = true; - lowerStartSlot = 3; - } - else if (item is not null && false /* Check if it is available for trading */) - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 1; - } - else - { - if (slotId >= 3 && slotId <= 29) - { - backpack2hotbar = true; - lowerStartSlot = 30; - } - else - { - lower2upper = true; - upperStartSlot = 3; - upperEndSlot = 29; - } - } - break; - case ContainerType.Cartography: - if (slotId >= 0 && slotId <= 2) - { - if (slotId >= 0 && slotId <= 1) - hotbarFirst = false; - upper2backpack = true; - lowerStartSlot = 3; - } - else if (item is not null && item.Type == ItemType.FilledMap) - { - lower2upper = true; - upperStartSlot = upperEndSlot = 0; - } - else if (item is not null && item.Type == ItemType.Map) - { - lower2upper = true; - upperStartSlot = upperEndSlot = 1; - } - else - { - if (slotId >= 3 && slotId <= 29) - { - backpack2hotbar = true; - lowerStartSlot = 30; - } - else - { - lower2upper = true; - upperStartSlot = 3; - upperEndSlot = 29; - } - } - break; - case ContainerType.Stonecutter: - if (slotId >= 0 && slotId <= 1) - { - if (slotId == 0) - hotbarFirst = false; - upper2backpack = true; - lowerStartSlot = 2; - } - else if (item is not null && false /* Check if it is available for stone cutteing */) - { - lower2upper = true; - upperStartSlot = 0; - upperEndSlot = 0; - } - else - { - if (slotId >= 2 && slotId <= 28) - { - backpack2hotbar = true; - lowerStartSlot = 29; - } - else - { - lower2upper = true; - upperStartSlot = 2; - upperEndSlot = 28; - } - } - break; - // TODO: Define more container type here - default: - return false; - } - - // Cursor have item or not doesn't matter - // If hotbar already have same item, will put on it first until every stack are full - // If no more same item , will put on the first empty slot (smaller slot id) - // If inventory full, item will not move - int itemCount = inventory.Items[slotId].Count; - if (lower2upper) - { - int firstEmptySlot = -1; - for (int i = upperStartSlot; i <= upperEndSlot; ++i) - { - if (inventory.Items.TryGetValue(i, out Item? curItem)) - { - if (TryMergeSlot(inventory, item!, slotId, curItem, i, changedSlots)) - break; - } - else if (firstEmptySlot == -1) - firstEmptySlot = i; - } - if (item!.Count > 0) - { - if (firstEmptySlot != -1) - StoreInNewSlot(inventory, item, slotId, firstEmptySlot, changedSlots); - else if (item.Count != itemCount) - changedSlots.Add(new Tuple((short)slotId, inventory.Items[slotId])); - } - } - else if (upper2backpack) - { - int hotbarEnd = lowerStartSlot + 4 * 9 - 1; - if (hotbarFirst) - { - int lastEmptySlot = -1; - for (int i = hotbarEnd; i >= lowerStartSlot; --i) - { - if (inventory.Items.TryGetValue(i, out Item? curItem)) - { - if (TryMergeSlot(inventory, item!, slotId, curItem, i, changedSlots)) - break; - } - else if (lastEmptySlot == -1) - lastEmptySlot = i; - } - if (item!.Count > 0) - { - if (lastEmptySlot != -1) - StoreInNewSlot(inventory, item, slotId, lastEmptySlot, changedSlots); - else if (item.Count != itemCount) - changedSlots.Add(new Tuple((short)slotId, inventory.Items[slotId])); - } - } - else - { - int firstEmptySlot = -1; - for (int i = lowerStartSlot; i <= hotbarEnd; ++i) - { - if (inventory.Items.TryGetValue(i, out Item? curItem)) - { - if (TryMergeSlot(inventory, item!, slotId, curItem, i, changedSlots)) - break; - } - else if (firstEmptySlot == -1) - firstEmptySlot = i; - } - if (item!.Count > 0) - { - if (firstEmptySlot != -1) - StoreInNewSlot(inventory, item, slotId, firstEmptySlot, changedSlots); - else if (item.Count != itemCount) - changedSlots.Add(new Tuple((short)slotId, inventory.Items[slotId])); - } - } - } - else if (backpack2hotbar) - { - int hotbarEnd = lowerStartSlot + 1 * 9 - 1; - - int firstEmptySlot = -1; - for (int i = lowerStartSlot; i <= hotbarEnd; ++i) - { - if (inventory.Items.TryGetValue(i, out Item? curItem)) - { - if (TryMergeSlot(inventory, item!, slotId, curItem, i, changedSlots)) - break; - } - else if (firstEmptySlot == -1) - firstEmptySlot = i; - } - if (item!.Count > 0) - { - if (firstEmptySlot != -1) - StoreInNewSlot(inventory, item, slotId, firstEmptySlot, changedSlots); - else if (item.Count != itemCount) - changedSlots.Add(new Tuple((short)slotId, inventory.Items[slotId])); - } - } - if (item!.Count <= 0 && inventory.Items.ContainsKey(slotId)) - { - inventory.Items.Remove(slotId); - changedSlots.Add(new Tuple((short)slotId, null)); - } - } - break; - case WindowActionType.DropItem: - if (inventory.Items.ContainsKey(slotId)) - { - inventory.Items[slotId].Count--; - changedSlots.Add(new Tuple((short)slotId, inventory.Items[slotId])); - } - - if (inventory.Items[slotId].Count <= 0) - { - inventory.Items.Remove(slotId); - changedSlots.Add(new Tuple((short)slotId, null)); - } - - break; - case WindowActionType.DropItemStack: - inventory.Items.Remove(slotId); - changedSlots.Add(new Tuple((short)slotId, null)); - break; - } - } - - SyncPlayerInventorySlotsFromWindow(inventory); - - return handler.SendWindowAction(windowId, slotId, action, item, changedSlots, inventories[windowId].StateID); - } - - /// - /// Give Creative Mode items into regular/survival Player Inventory - /// - /// (obviously) requires to be in creative mode - /// Destination inventory slot - /// Item type - /// Item count - /// Item NBT - /// TRUE if item given successfully - public bool DoCreativeGive(int slot, ItemType itemType, int count, Dictionary? nbt = null) - { - return InvokeOnMainThread(() => - { - if (!handler.SendCreativeInventoryAction(slot, itemType, count, nbt)) - return false; - - if (slot is >= 1 and <= 45) - SetPlayerInventorySlot(slot, new Item(itemType, count, nbt)); - - return true; - }); - } - - /// - /// Plays animation (Player arm swing) - /// - /// 0 for left arm, 1 for right arm - /// TRUE if animation successfully done - public bool DoAnimation(int animation) - { - return InvokeOnMainThread(() => handler.SendAnimation(animation, playerEntityID)); - } - - /// - /// Close the specified inventory window - /// - /// Window ID - /// TRUE if the window was successfully closed - /// Sending close window for inventory 0 can cause server to update our inventory if there are any item in the crafting area - public bool CloseInventory(int windowId) - { - if (InvokeRequired) - return InvokeOnMainThread(() => CloseInventory(windowId)); - - if (inventories.ContainsKey(windowId)) - { - if (windowId != 0) - { - inventories.Remove(windowId); - inventoriesWithFullContents.Remove(windowId); - } - bool result = handler.SendCloseWindow(windowId); - DispatchBotEvent(bot => bot.OnInventoryClose(windowId)); - return result; - } - return false; - } - - /// - /// Clean all inventory - /// - /// TRUE if the uccessfully clear - public bool ClearInventories() - { - if (!inventoryHandlingEnabled) - return false; - - if (InvokeRequired) - return InvokeOnMainThread(ClearInventories); - - inventories.Clear(); - inventoriesWithFullContents.Clear(); - inventories[0] = new Container(0, ContainerType.PlayerInventory, "Player Inventory"); - ClearUnlockedRecipes(); - return true; - } - - /// - /// Interact with an entity - /// - /// - /// Type of interaction (interact, attack...) - /// Hand.MainHand or Hand.OffHand - /// TRUE if interaction succeeded - public bool InteractEntity(int entityID, InteractType type, Hand hand = Hand.MainHand) - { - if (InvokeRequired) - return InvokeOnMainThread(() => InteractEntity(entityID, type, hand)); - - if (entities.ContainsKey(entityID)) - { - return type switch - { - InteractType.Interact => handler.SendInteractEntity(entityID, (int)type, (int)hand), - InteractType.InteractAt => handler.SendInteractEntity( - EntityID: entityID, - type: (int)type, - X: (float)entities[entityID].Location.X, - Y: (float)entities[entityID].Location.Y, - Z: (float)entities[entityID].Location.Z, - hand: (int)hand), - _ => handler.SendInteractEntity(entityID, (int)type), - }; - } - - return false; - } - - /// - /// Place the block at hand in the Minecraft world - /// - /// Location to place block to - /// Block face (e.g. Direction.Down when clicking on the block below to place this block) - /// Also look at the block before interacting - /// TRUE if successfully placed - public bool PlaceBlock(Location location, Direction blockFace, Hand hand = Hand.MainHand, bool lookAtBlock = false) - { - return InvokeOnMainThread(() => - { - if (lookAtBlock) - { - UpdateLocation(GetCurrentLocation(), location.ToCenter()); - handler.SendLocationUpdate(GetCurrentLocation(), Movement.IsOnGround(world, GetCurrentLocation()), false, _yaw, _pitch); - } - return handler.SendPlayerBlockPlacement((int)hand, location, blockFace, sequenceId++); - }); - } - - - /// - /// Attempt to dig a block at the specified location - /// - /// Location of block to dig - /// Also perform the "arm swing" animation - /// Also look at the block before digging - public bool DigBlock(Location location, Direction blockFace, bool swingArms = true, bool lookAtBlock = true, - double duration = 0, MiningCalculator.MiningOptions? miningOptions = null) - { - // TODO select best face from current player location - - if (!GetTerrainEnabled()) - return false; - - if (InvokeRequired) - return InvokeOnMainThread(() => DigBlock(location, blockFace, swingArms, lookAtBlock, duration, - miningOptions)); - - lock (DigLock) - { - if (RemainingDiggingTime > 0 && LastDigPosition is not null) - { - handler.SendPlayerDigging(1, LastDigPosition.Item1, LastDigPosition.Item2, sequenceId++); - Log.Info(string.Format(Translations.cmd_dig_cancel, LastDigPosition.Item1)); - } - - // Look at block before attempting to break it - if (lookAtBlock) - UpdateLocation(GetCurrentLocation(), location); - - // Auto-compute dig duration for survival/adventure mode when not explicitly supplied - bool autoComputedDuration = false; - if (duration <= 0 && protocolversion >= Protocol18Handler.MC_1_8_Version - && gamemode is 0 or 2) // Survival or Adventure - { - autoComputedDuration = true; - duration = ComputeAutoDigDuration(location, miningOptions); - } - - // Send dig start and dig end, will need to wait for server response to know dig result - // See https://wiki.vg/How_to_Write_a_Client#Digging for more details - bool result = handler.SendPlayerDigging(0, location, blockFace, sequenceId++) - && (!swingArms || DoAnimation((int)Hand.MainHand)); - - if (autoComputedDuration && duration <= 0) - return result; - - if (duration <= 0) - result &= handler.SendPlayerDigging(2, location, blockFace, sequenceId++); - else - { - LastDigPosition = new(location, blockFace); - RemainingDiggingTime = Settings.DoubleToTick(duration); - } - - return result; - } - } - - /// - /// Compute the automatic dig duration in seconds for a block, based on held tool, - /// enchantments, effects, attributes, and player state. - /// Returns 0 for instant-break blocks. - /// - private double ComputeAutoDigDuration(Location location, MiningCalculator.MiningOptions? miningOptions = null) - { - try - { - Block block = world.GetBlock(location); - Material blockMaterial = block.Type; - - if (blockMaterial == Material.Air) - return 0; - - // Get held item from player inventory - Item? heldItem = null; - Item? helmetItem = null; - if (inventories.TryGetValue(0, out var playerInv)) - { - int hotbarSlot = 36 + CurrentSlot; // Hotbar slots are 36-44 - playerInv.Items.TryGetValue(hotbarSlot, out heldItem); - playerInv.Items.TryGetValue(5, out helmetItem); // Slot 5 = helmet - } - - int ticks = MiningCalculator.ComputeDigTicks( - blockMaterial, - heldItem, - helmetItem, - playerEffects, - playerAttributes, - playerPhysics.InWater, - playerPhysics.OnGround, - protocolversion, - miningOptions); - - if (ticks < 0) - return -1; - - if (ticks == 0) - return 0; - - return (double)ticks / Settings.ClientTicksPerSecond; - } - catch - { - return ComputeConservativeAutoDigDuration(location); - } - } - - private double ComputeConservativeAutoDigDuration(Location location) - { - try - { - Block block = world.GetBlock(location); - if (block.Type == Material.Air) - return 0; - - int ticks = MiningCalculator.ComputeDigTicks( - blockMaterial: block.Type, - heldItem: null, - helmetItem: null, - effects: new(), - playerAttributes: new(), - isUnderwater: playerPhysics.InWater, - isOnGround: playerPhysics.OnGround, - protocolVersion: protocolversion); - - if (ticks < 0) - return -1; - - return ticks == 0 ? 1.0 : (double)ticks / Settings.ClientTicksPerSecond; - } - catch - { - return 1.0; - } - } - - /// - /// Change active slot in the player inventory - /// - /// Slot to activate (0 to 8) - /// TRUE if the slot was changed - public bool ChangeSlot(short slot) - { - if (slot < 0 || slot > 8) - return false; - - if (InvokeRequired) - return InvokeOnMainThread(() => ChangeSlot(slot)); - - CurrentSlot = Convert.ToByte(slot); - return handler.SendHeldItemChange(slot); - } - - /// - /// Drop the currently selected hotbar item like a real player pressing Q or Ctrl+Q. - /// - /// TRUE to drop the whole stack, FALSE to drop one item - /// TRUE if the packet was sent - public bool DropSelectedItem(bool dropEntireStack) - { - if (InvokeRequired) - return InvokeOnMainThread(() => DropSelectedItem(dropEntireStack)); - - Location actionLocation = GetCurrentLocation().ToFloor(); - int status = dropEntireStack ? 3 : 4; - bool sent = handler.SendPlayerDigging(status, actionLocation, Direction.Down, sequenceId++); - if (sent) - ApplySelectedItemDropPrediction(dropEntireStack); - - return sent; - } - - private void ApplySelectedItemDropPrediction(bool dropEntireStack) - { - if (!inventories.TryGetValue(0, out Container? playerInventory)) - return; - - int selectedSlotId = CurrentSlot + 36; - if (!playerInventory.Items.TryGetValue(selectedSlotId, out Item? heldItem) || heldItem.IsEmpty) - return; - - if (dropEntireStack || heldItem.Count <= 1) - playerInventory.Items.Remove(selectedSlotId); - else heldItem.Count--; - - DispatchBotEvent(bot => bot.OnInventoryUpdate(0)); - } - - /// - /// Update sign text - /// - /// sign location - /// text one - /// text two - /// text three - /// text1 four - public bool UpdateSign(Location location, string line1, string line2, string line3, string line4) - { - // TODO Open sign editor first https://wiki.vg/Protocol#Open_Sign_Editor - return InvokeOnMainThread(() => handler.SendUpdateSign(location, line1, line2, line3, line4)); - } - - /// - /// Select villager trade - /// - /// The slot of the trade, starts at 0. - public bool SelectTrade(int selectedSlot) - { - return InvokeOnMainThread(() => handler.SelectTrade(selectedSlot)); - } - - /// - /// Update command block - /// - /// command block location - /// command - /// command block mode - /// command block flags - public bool UpdateCommandBlock(Location location, string command, CommandBlockMode mode, CommandBlockFlags flags) - { - return InvokeOnMainThread(() => handler.UpdateCommandBlock(location, command, mode, flags)); - } - - /// - /// Teleport to player in spectator mode - /// - /// Player to teleport to - /// Teleporting to other entityies is NOT implemented yet - public bool Spectate(Entity entity) - { - if (entity.Type == EntityType.Player) - { - return SpectateByUUID(entity.UUID); - } - else - { - return false; - } - } - - /// - /// Teleport to player/entity in spectator mode - /// - /// UUID of player/entity to teleport to - public bool SpectateByUUID(Guid UUID) - { - if (GetGamemode() == 3) - { - if (InvokeRequired) - return InvokeOnMainThread(() => SpectateByUUID(UUID)); - return handler.SendSpectate(UUID); - } - else - { - return false; - } - } - - /// - /// Send the server a command to type in the item name in the Anvil inventory when it's open. - /// - /// The new item name - public bool SendRenameItem(string itemName) - { - if (inventories.Count == 0) - return false; - - if (inventories.Values.ToList().Last().Type != ContainerType.Anvil) - return false; - - return handler.SendRenameItem(itemName); - } - - /// - /// Send a recipe book craft request for the currently active crafting inventory. - /// - /// Recipe identifier to craft - /// True to craft as many items as possible - /// True if the packet was sent - public bool SendPlaceRecipe(string recipeId, bool makeAll) - { - if (InvokeRequired) - return InvokeOnMainThread(() => SendPlaceRecipe(recipeId, makeAll)); - - if (protocolversion < Protocol18Handler.MC_1_13_Version) - return false; - - Container? activeInventory = GetActiveRecipeBookInventory(); - if (activeInventory is null) - return false; - - string normalizedRecipeId = NormalizeRecipeArgument(recipeId, protocolversion); - if (normalizedRecipeId.Length == 0) - return false; - - return handler.SendPlaceRecipe(activeInventory.ID, normalizedRecipeId, makeAll); - } - #endregion - - #region Event handlers: An event occurs on the Server - - /// - /// Dispatch a ChatBot event with automatic exception handling - /// - /// - /// Example for calling SomeEvent() on all bots at once: - /// DispatchBotEvent(bot => bot.SomeEvent()); - /// - /// Action to execute on each bot - /// Only fire the event for the specified bot list (default: all bots) - private void DispatchBotEvent(Action action, IEnumerable? botList = null) - { - ChatBot[] selectedBots; - - if (botList is not null) - { - selectedBots = botList.ToArray(); - } - else - { - selectedBots = bots.ToArray(); - } - - foreach (ChatBot bot in selectedBots) - { - try - { - action(bot); - } - catch (Exception e) - { - if (e is not ThreadAbortException) - { - //Retrieve parent method name to determine which event caused the exception - System.Diagnostics.StackFrame frame = new(1); - System.Reflection.MethodBase method = frame.GetMethod()!; - string parentMethodName = method.Name; - - //Display a meaningful error message to help debugging the ChatBot - Log.Error(parentMethodName + ": Got error from " + bot.ToString() + ": " + e.ToString()); - } - else throw; //ThreadAbortException should not be caught here as in can happen when disconnecting from server - } - } - } - - /// - /// Called when a network packet received or sent - /// - /// - /// Only called if is set to True - /// - /// Packet ID - /// A copy of Packet Data - /// The packet is login phase or playing phase - /// The packet is received from server or sent by client - public void OnNetworkPacket(int packetID, List packetData, bool isLogin, bool isInbound) - { - DispatchBotEvent(bot => bot.OnNetworkPacket(packetID, packetData, isLogin, isInbound)); - } - - public void OnDialogRegistryData(int protocolId, string resourceId, DialogDefinition dialog) - { - Dialogs.StoreRegistryDialog(protocolId, resourceId, dialog); - } - - public void OnDialogShown(DialogDefinition dialog, DialogPhase phase) - { - var instance = Dialogs.Show(dialog, phase); - if (!Tui.DialogTuiHost.TryOpen(this, instance, force: phase == DialogPhase.Configuration)) - ConsoleIO.WriteLineFormatted(DialogFormatter.Render(instance), acceptnewlines: true); - } - - public void OnDialogRegistryReferenceShown(int protocolId, DialogPhase phase) - { - var instance = Dialogs.ShowRegistryReference(protocolId, phase); - if (!Tui.DialogTuiHost.TryOpen(this, instance, force: phase == DialogPhase.Configuration)) - ConsoleIO.WriteLineFormatted(DialogFormatter.Render(instance), acceptnewlines: true); - } - - public void OnDialogCleared() - { - Dialogs.Clear(); - Tui.DialogTuiHost.CloseCurrent(); - } - - public void OnServerLinksUpdated(IReadOnlyList links) - { - Dialogs.SetServerLinks(links); - } - - /// - /// Called when a server was successfully joined - /// - public void OnGameJoined(bool isOnlineMode) - { - if (protocolversion < Protocol18Handler.MC_1_19_3_Version || playerKeyPair is null || !isOnlineMode) - SetCanSendMessage(true); - else - SetCanSendMessage(false); - - string? bandString = Config.Main.Advanced.BrandInfo.ToBrandString(); - if (!String.IsNullOrWhiteSpace(bandString)) - handler.SendBrandInfo(bandString.Trim()); - - // 1.20.2+ expects ClientInformation during configuration; older servers still want it here. - if (Config.MCSettings.Enabled && protocolversion < Protocol18Handler.MC_1_20_2_Version) - handler.SendClientSettings( - Config.MCSettings.Locale, - Config.MCSettings.RenderDistance, - (byte)Config.MCSettings.Difficulty, - (byte)Config.MCSettings.ChatMode, - Config.MCSettings.ChatColors, - Config.MCSettings.Skin.GetByte(), - (byte)Config.MCSettings.MainHand); - - if (protocolversion >= Protocol18Handler.MC_1_19_3_Version - && playerKeyPair is not null && isOnlineMode) - handler.SendPlayerSession(playerKeyPair); - - if (inventoryHandlingRequested) - { - inventoryHandlingRequested = false; - inventoryHandlingEnabled = true; - Log.Info(Translations.extra_inventory_enabled); - } - - ClearInventories(); - - DispatchBotEvent(bot => bot.AfterGameJoined()); - - ConsoleIO.InitCommandList(dispatcher); - } - - /// - /// Called when the player respawns, which happens on login, respawn and world change. - /// - public void OnRespawn() - { - ClearTasks(); - - if (terrainAndMovementsRequested) - { - terrainAndMovementsEnabled = true; - terrainAndMovementsRequested = false; - Log.Info(Translations.extra_terrainandmovement_enabled); - } - - if (terrainAndMovementsEnabled) - { - world.Clear(); - } - - entities.Clear(); - ClearKnownSigns(); - ClearInventories(); - DispatchBotEvent(bot => bot.OnRespawn()); - } - - /// - /// Drive the physics engine input based on the current A* path. - /// Converts discrete waypoint pathfinding into continuous movement input. - /// - private void UpdatePathfindingInput() - { - physicsInput.Reset(); - - // Still heading toward a target (even if path queue is empty) - if (pathTarget is not null && ReachedWaypoint(pathTarget.Value)) - { - // Arrived at current waypoint — advance to next, or finish - if (path is not null && path.Count > 0) - { - pathTarget = path.Dequeue(); - if (Config.Main.Advanced.MoveHeadWhileWalking) - UpdateLocation(location, pathTarget.Value + new Location(0, 1, 0)); - } - else - { - pathTarget = null; - path = null; - } - } - - // Need a first target from a fresh path - if (pathTarget is null && path is not null && path.Count > 0) - { - pathTarget = path.Dequeue(); - if (Config.Main.Advanced.MoveHeadWhileWalking) - UpdateLocation(location, pathTarget.Value + new Location(0, 1, 0)); - } - - if (pathTarget is not null) - { - SetInputToward(pathTarget.Value); - } - } - - /// - /// Check if the player has approximately reached a waypoint. - /// - private bool ReachedWaypoint(Location target) - { - double dx = target.X - location.X; - double dz = target.Z - location.Z; - return dx * dx + dz * dz < 0.25; // within ~0.5 blocks horizontally - } - - /// - /// Set movement input to walk toward a target location. - /// Calculates the yaw needed and sets Forward + Sprint. - /// - private void SetInputToward(Location target) - { - double dx = target.X - location.X; - double dz = target.Z - location.Z; - double dy = target.Y - location.Y; - double distSqr = dx * dx + dz * dz; - - if (distSqr < 0.01) return; // Close enough horizontally - - // Calculate yaw to face target - float targetYaw = (float)(-Math.Atan2(dx, dz) / Math.PI * 180.0); - if (targetYaw < 0) targetYaw += 360; - playerPhysics.Yaw = targetYaw; - playerYaw = targetYaw; - - physicsInput.Forward = true; - - // Jump if target is above and we're on ground - if (dy > 0.5 && playerPhysics.OnGround) - physicsInput.Jump = true; - - // Map MovementSpeed setting: 1=sneak, 2-4=walk, 5=sprint - if (Config.Main.Advanced.MovementSpeed >= 5) - physicsInput.Sprint = true; - else if (Config.Main.Advanced.MovementSpeed <= 1) - physicsInput.Sneak = true; - } - - /// - /// Check if the client is currently processing a Movement. - /// - /// true if a movement is currently handled - public bool ClientIsMoving() - { - return terrainAndMovementsEnabled && locationReceived && path is not null && path.Count > 0; - } - - /// - /// Get the current goal - /// - /// Current goal of movement. Location.Zero if not set. - public Location GetCurrentMovementGoal() - { - return (ClientIsMoving() || path is null) ? Location.Zero : path.Last(); - } - - /// - /// Cancels the current movement - /// - /// True if there was an active path - public bool CancelMovement() - { - bool success = ClientIsMoving(); - path = null; - return success; - } - - /// - /// Change the amount of sent movement packets per time - /// - /// Set a new walking type - public void SetMovementSpeed(MovementType newSpeed) - { - switch (newSpeed) - { - case MovementType.Sneak: - // https://minecraft.wiki/w/Sneaking#Effects - Sneaking 1.31m/s - Config.Main.Advanced.MovementSpeed = 2; - break; - case MovementType.Walk: - // https://minecraft.wiki/w/Walking#Usage - Walking 4.317 m/s - Config.Main.Advanced.MovementSpeed = 4; - break; - case MovementType.Sprint: - // https://minecraft.wiki/w/Sprinting#Usage - Sprinting 5.612 m/s - Config.Main.Advanced.MovementSpeed = 5; - break; - } - } - - /// - /// Called when the server sends a new player location, - /// or if a ChatBot whishes to update the player's location. - /// - /// The new location - /// If true, the location is relative to the current location - public void UpdateLocation(Location location, bool relative) - { - lock (locationLock) - { - if (relative) - { - this.location += location; - } - else this.location = location; - locationReceived = true; - - // Sync physics engine position - if (physicsInitialized) - { - playerPhysics.Teleport(this.location.X, this.location.Y, this.location.Z); - } - } - } - - /// - /// Called when the server sends a new player location, - /// or if a ChatBot whishes to update the player's location. - /// - /// The new location - /// Yaw to look at - /// Pitch to look at - public void UpdateLocation(Location location, float yaw, float pitch) - { - _yaw = yaw; - _pitch = pitch; - UpdateLocation(location, false); - } - - /// - /// Send the current player position and look angles to the server. - /// - /// TRUE if the update packet was sent - public bool SendLocationUpdate() - { - if (InvokeRequired) - return InvokeOnMainThread(SendLocationUpdate); - - Location current = GetCurrentLocation(); - bool onGround = physicsInitialized ? playerPhysics.OnGround : Movement.IsOnGround(world, current); - bool horizontalCollision = physicsInitialized && playerPhysics.HorizontalCollision; - return handler.SendLocationUpdate(current, onGround, horizontalCollision, _yaw, _pitch); - } - - /// - /// Called when the server sends a new player location, - /// or if a ChatBot whishes to update the player's location. - /// - /// The new location - /// Block coordinates to look at - public void UpdateLocation(Location location, Location lookAtLocation) - { - double dx = lookAtLocation.X - (location.X - 0.5); - double dy = lookAtLocation.Y - (location.Y + 1); - double dz = lookAtLocation.Z - (location.Z - 0.5); - - double r = Math.Sqrt(dx * dx + dy * dy + dz * dz); - - float yaw = Convert.ToSingle(-Math.Atan2(dx, dz) / Math.PI * 180); - float pitch = Convert.ToSingle(-Math.Asin(dy / r) / Math.PI * 180); - if (yaw < 0) yaw += 360; - - UpdateLocation(location, yaw, pitch); - } - - /// - /// Called when the server sends a new player location, - /// or if a ChatBot whishes to update the player's location. - /// - /// The new location - /// Direction to look at - public void UpdateLocation(Location location, Direction direction) - { - float yaw = 0; - float pitch = 0; - - switch (direction) - { - case Direction.Up: - pitch = -90; - break; - case Direction.Down: - pitch = 90; - break; - case Direction.East: - yaw = 270; - break; - case Direction.West: - yaw = 90; - break; - case Direction.North: - yaw = 180; - break; - case Direction.South: - break; - default: - throw new ArgumentException(Translations.exception_unknown_direction, nameof(direction)); - } - - UpdateLocation(location, yaw, pitch); - } - - /// - /// Received chat/system message from the server - /// - /// Message received - public void OnTextReceived(ChatMessage message) - { - UpdateKeepAlive(); - - Log.Debug(string.Format(Translations.protocol_chat_raw_message, message.content)); - - List links = new(); - string messageText; - - // Used for 1.19+ to mark: system message, legal / illegal signature - string color = string.Empty; - - if (message.isSignedChat) - { - if (!Config.Signature.ShowIllegalSignedChat && !message.isSystemChat && !(bool)message.isSignatureLegal!) - return; - messageText = ChatParser.ParseSignedChat(message, links); - - if (message.isSystemChat) - { - if (Config.Signature.MarkSystemMessage) - color = "§7▌§r"; // Background Gray - } - else - { - if ((bool)message.isSignatureLegal!) - { - if (Config.Signature.ShowModifiedChat && message.unsignedContent is not null) - { - if (Config.Signature.MarkModifiedMsg) - color = "§6▌§r"; // Background Yellow - } - else - { - if (Config.Signature.MarkLegallySignedMsg) - color = "§2▌§r"; // Background Green - } - } - else - { - if (Config.Signature.MarkIllegallySignedMsg) - color = "§4▌§r"; // Background Red - } - } - } - else - { - if (message.isJson) - messageText = ChatParser.ParseText(message.content, links); - else - messageText = message.content; - } - - Log.Chat(color + messageText); - - if (Config.Main.Advanced.ShowChatLinks) - foreach (string link in links) - Log.Chat(string.Format(Translations.mcc_link, link)); - - DispatchBotEvent(bot => bot.GetText(messageText)); - DispatchBotEvent(bot => bot.GetText(messageText, message.content)); - } - - /// - /// Received a connection keep-alive from the server - /// - public void OnServerKeepAlive() - { - UpdateKeepAlive(); - } - - /// - /// When an inventory is opened - /// - /// The inventory - /// Inventory ID - public void OnInventoryOpen(int inventoryID, Container inventory) - { - inventoriesWithFullContents.Remove(inventoryID); - inventories[inventoryID] = inventory; - - if (inventoryID != 0) - { - Log.Info(string.Format(Translations.extra_inventory_open, inventoryID, inventory.Title)); - Log.Info(Translations.extra_inventory_interact); - DispatchBotEvent(bot => bot.OnInventoryOpen(inventoryID)); - - if (ConsoleIO.Backend is Tui.TuiConsoleBackend - && Tui.ContainerViewBase.HasTuiSupport(inventory.Type) - && Tui.InventoryTuiHost.CanLaunch) - { - Tui.InventoryTuiHost.Launch(this, inventoryID); - } - } - } - - /// - /// When an inventory is close - /// - /// Inventory ID - public void OnInventoryClose(int inventoryID) - { - if (inventories.ContainsKey(inventoryID)) - { - if (inventoryID == 0) - { - inventories[0].Items.Clear(); // Don't delete player inventory - inventoriesWithFullContents.Clear(); - } - else - { - inventories.Remove(inventoryID); - inventoriesWithFullContents.Remove(inventoryID); - } - } - - if (inventoryID != 0) - { - Log.Info(string.Format(Translations.extra_inventory_close, inventoryID)); - DispatchBotEvent(bot => bot.OnInventoryClose(inventoryID)); - } - - Tui.InventoryTuiHost.NotifyInventoryClosed(inventoryID); - } - - /// - /// When received window properties from server. - /// Used for Frunaces, Enchanting Table, Beacon, Brewing stand, Stone cutter, Loom and Lectern - /// More info about: https://wiki.vg/Protocol#Set_Container_Property - /// - /// Inventory ID - /// Property ID - /// Property Value - public void OnWindowProperties(byte inventoryID, short propertyId, short propertyValue) - { - if (!inventories.ContainsKey(inventoryID)) - return; - - Container inventory = inventories[inventoryID]; - - if (inventory.Properties.ContainsKey(propertyId)) - inventory.Properties.Remove(propertyId); - - inventory.Properties.Add(propertyId, propertyValue); - - DispatchBotEvent(bot => bot.OnInventoryProperties(inventoryID, propertyId, propertyValue)); - - if (inventory.Type == ContainerType.Enchantment) - { - // We got the last property for enchantment - if (propertyId == 9 && propertyValue != -1) - { - var topEnchantmentLevelRequirement = inventory.Properties[0]; - var middleEnchantmentLevelRequirement = inventory.Properties[1]; - var bottomEnchantmentLevelRequirement = inventory.Properties[2]; - - var topEnchantment = EnchantmentMapping.GetEnchantmentById( - GetProtocolVersion(), - inventory.Properties[4]); - - var middleEnchantment = EnchantmentMapping.GetEnchantmentById( - GetProtocolVersion(), - inventory.Properties[5]); - - var bottomEnchantment = EnchantmentMapping.GetEnchantmentById( - GetProtocolVersion(), - inventory.Properties[6]); - - var topEnchantmentLevel = inventory.Properties[7]; - var middleEnchantmentLevel = inventory.Properties[8]; - var bottomEnchantmentLevel = inventory.Properties[9]; - - var sb = new StringBuilder(); - - sb.AppendLine(Translations.Enchantment_enchantments_available + ":"); - - sb.AppendLine(Translations.Enchantment_tops_slot + ":\t" - + EnchantmentMapping.GetEnchantmentName(topEnchantment) + " " - + EnchantmentMapping.ConvertLevelToRomanNumbers(topEnchantmentLevel) + " (" - + topEnchantmentLevelRequirement + " " + Translations.Enchantment_levels + ")"); - - sb.AppendLine(Translations.Enchantment_middle_slot + ":\t" - + EnchantmentMapping.GetEnchantmentName(middleEnchantment) + " " - + EnchantmentMapping.ConvertLevelToRomanNumbers(middleEnchantmentLevel) + " (" - + middleEnchantmentLevelRequirement + " " + Translations.Enchantment_levels + ")"); - - sb.AppendLine(Translations.Enchantment_bottom_slot + ":\t" - + EnchantmentMapping.GetEnchantmentName(bottomEnchantment) + " " - + EnchantmentMapping.ConvertLevelToRomanNumbers(bottomEnchantmentLevel) + " (" - + bottomEnchantmentLevelRequirement + " " + Translations.Enchantment_levels + ")"); - - Log.Info(sb.ToString()); - - lastEnchantment = new(); - lastEnchantment.TopEnchantment = topEnchantment; - lastEnchantment.MiddleEnchantment = middleEnchantment; - lastEnchantment.BottomEnchantment = bottomEnchantment; - - lastEnchantment.Seed = inventory.Properties[3]; - - lastEnchantment.TopEnchantmentLevel = topEnchantmentLevel; - lastEnchantment.MiddleEnchantmentLevel = middleEnchantmentLevel; - lastEnchantment.BottomEnchantmentLevel = bottomEnchantmentLevel; - - lastEnchantment.TopEnchantmentLevelRequirement = topEnchantmentLevelRequirement; - lastEnchantment.MiddleEnchantmentLevelRequirement = middleEnchantmentLevelRequirement; - lastEnchantment.BottomEnchantmentLevelRequirement = bottomEnchantmentLevelRequirement; - - - DispatchBotEvent(bot => bot.OnEnchantments( - // Enchantments - topEnchantment, - middleEnchantment, - bottomEnchantment, - - // Enchantment levels - topEnchantmentLevel, - middleEnchantmentLevel, - bottomEnchantmentLevel, - - // Required levels for enchanting - topEnchantmentLevelRequirement, - middleEnchantmentLevelRequirement, - bottomEnchantmentLevelRequirement)); - - DispatchBotEvent(bot => bot.OnEnchantments(lastEnchantment)); - } - } - } - - /// - /// When received window items from server. - /// - /// Inventory ID - /// Item list, key = slot ID, value = Item information - public void OnWindowItems(byte inventoryID, Dictionary itemList, int stateId) - { - if (inventories.ContainsKey(inventoryID)) - { - // Filter out empty items (Count=0 or Air) that some servers may send - foreach (int key in itemList.Where(slot => slot.Value.IsEmpty).Select(slot => slot.Key).ToList()) - itemList.Remove(key); - - inventories[inventoryID].Items = itemList; - inventories[inventoryID].StateID = stateId; - inventoriesWithFullContents.Add(inventoryID); - bool playerInventoryChanged = SyncPlayerInventorySlotsFromWindow(inventories[inventoryID]); - if (playerInventoryChanged) - DispatchBotEvent(bot => bot.OnInventoryUpdate(0)); - DispatchBotEvent(bot => bot.OnInventoryUpdate(inventoryID)); - } - } - - /// - /// When a slot is set inside window items - /// - /// Window ID - /// Slot ID - /// Item (may be null for empty slot) - public void OnSetSlot(byte inventoryID, short slotID, Item? item, int stateId) - { - if (inventories.ContainsKey(inventoryID)) - inventories[inventoryID].StateID = stateId; - - // Handle inventoryID -2 - Add item to player inventory without animation - if (inventoryID == 254) - inventoryID = 0; - // Handle cursor item - if (inventoryID == 255 && slotID == -1) - { - inventoryID = 0; // Prevent key not found for some bots relied to this event - if (inventories.ContainsKey(0)) - { - if (item is not null && !item.IsEmpty) - inventories[0].Items[-1] = item; - else - inventories[0].Items.Remove(-1); - } - } - else - { - if (inventories.ContainsKey(inventoryID)) - { - if (item is null || item.IsEmpty) - { - if (inventories[inventoryID].Items.ContainsKey(slotID)) - inventories[inventoryID].Items.Remove(slotID); - } - else inventories[inventoryID].Items[slotID] = item; - - if (SyncPlayerInventorySlotsFromWindow(inventories[inventoryID])) - DispatchBotEvent(bot => bot.OnInventoryUpdate(0)); - } - } - DispatchBotEvent(bot => bot.OnInventoryUpdate(inventoryID)); - } - - /// - /// Set client player's ID for later receiving player's own properties - /// - /// Player Entity ID - public void OnReceivePlayerEntityID(int EntityID) - { - playerEntityID = EntityID; - } - - /// - /// Triggered when a new player joins the game - /// - /// player info - public void OnPlayerJoin(PlayerInfo player) - { - //Ignore placeholders eg 0000tab# from TabListPlus - if (Config.Main.Advanced.IgnoreInvalidPlayerName && !ChatBot.IsValidName(player.Name)) - return; - - if (player.Name == username) - { - // 1.19+ offline server is possible to return different uuid - uuid = player.Uuid; - uuidStr = player.Uuid.ToString().Replace("-", string.Empty); - } - - lock (onlinePlayers) - { - onlinePlayers[player.Uuid] = player; - } - - DispatchBotEvent(bot => bot.OnPlayerJoin(player.Uuid, player.Name)); - } - - /// - /// Triggered when a player has left the game - /// - /// UUID of the player - public void OnPlayerLeave(Guid uuid) - { - string? username = null; - - lock (onlinePlayers) - { - if (onlinePlayers.ContainsKey(uuid)) - { - username = onlinePlayers[uuid].Name; - onlinePlayers.Remove(uuid); - } - } - - DispatchBotEvent(bot => bot.OnPlayerLeave(uuid, username)); - } - - // - /// This method is called when a player has been killed by another entity - /// - /// Victim's entity - /// Killer's entity - public void OnPlayerKilled(int killerEntityId, string chatMessage) - { - if (!entities.ContainsKey(killerEntityId)) - return; - - DispatchBotEvent(bot => bot.OnKilled(entities[killerEntityId], chatMessage)); - } - - /// - /// Called when a plugin channel message was sent from the server. - /// - /// The channel the message was sent on - /// The data from the channel - public void OnPluginChannelMessage(string channel, byte[] data) - { - if (channel == "REGISTER") - { - string[] channels = Encoding.UTF8.GetString(data).Split('\0'); - foreach (string chan in channels) - { - if (!registeredServerPluginChannels.Contains(chan)) - { - registeredServerPluginChannels.Add(chan); - } - } - } - if (channel == "UNREGISTER") - { - string[] channels = Encoding.UTF8.GetString(data).Split('\0'); - foreach (string chan in channels) - { - registeredServerPluginChannels.Remove(chan); - } - } - - if (registeredBotPluginChannels.ContainsKey(channel)) - { - DispatchBotEvent(bot => bot.OnPluginMessage(channel, data), registeredBotPluginChannels[channel]); - } - } - - public void OnBookOpen(int hand) - { - if (InvokeRequired) - { - InvokeOnMainThread(() => OnBookOpen(hand)); - return; - } - - Tui.BookTuiHost.OpenFromServer(this, hand == (int)BookHand.Off ? BookHand.Off : BookHand.Main); - } - - /// - /// Called when an entity spawned - /// - public void OnSpawnEntity(Entity entity) - { - // The entity should not already exist, but if it does, let's consider the previous one is being destroyed - if (entities.ContainsKey(entity.ID)) - OnDestroyEntities(new[] { entity.ID }); - - entities.Add(entity.ID, entity); - DispatchBotEvent(bot => bot.OnEntitySpawn(entity)); - } - - private static bool ShouldAnnouncePlayerEffectGain(EffectData effectData, EffectData? previousPlayerEffect) - { - if (!Config.Main.Advanced.ShowEffectMessages) - return false; - - return previousPlayerEffect is null - || previousPlayerEffect.IsExpired - || previousPlayerEffect.Amplifier != effectData.Amplifier; - } - - private static void AnnouncePlayerEffectGain(EffectData effectData) - { - if (!Config.Main.Advanced.ShowEffectMessages) - return; - - ConsoleIO.WriteLine(string.Format(Translations.bot_effect_gained, - effectData.GetDisplayNameWithArticle(), effectData.GetInitialDurationText())); - } - - private static void AnnouncePlayerEffectExpired(EffectData effectData) - { - if (!Config.Main.Advanced.ShowEffectMessages) - return; - - ConsoleIO.WriteLine(string.Format(Translations.bot_effect_expired, effectData.GetDisplayName())); - } - - /// - /// Called when an entity effects - /// - public void OnEntityEffect(int entityid, Effects effect, int amplifier, int duration, byte flags, bool hasFactorData, Dictionary? factorCodec) - { - Entity? entity = null; - if (entities.TryGetValue(entityid, out var trackedEntity)) - { - entity = trackedEntity; - } - - var effectData = new EffectData(effect, amplifier, duration, flags); - entity?.ActiveEffects[effect] = effectData; - - if (entityid == playerEntityID) - { - playerEffects.TryGetValue(effect, out var previousPlayerEffect); - playerEffects[effect] = effectData; - - if (ShouldAnnouncePlayerEffectGain(effectData, previousPlayerEffect)) - AnnouncePlayerEffectGain(effectData); - } - - if (entity is not null) - DispatchBotEvent(bot => bot.OnEntityEffect(entity, effect, amplifier, duration, flags)); - } - - /// - /// Called when an entity has an effect removed - /// - /// Entity ID - /// Effect that was removed - public void OnRemoveEntityEffect(int entityid, Effects effect) - { - Entity? entity = null; - EffectData? removedEffectData = null; - - if (entities.TryGetValue(entityid, out var trackedEntity)) - { - entity = trackedEntity; - if (entity.ActiveEffects.Remove(effect, out var entityEffectData)) - removedEffectData = entityEffectData; - } - - if (entityid == playerEntityID && playerEffects.Remove(effect, out var playerEffectData)) - removedEffectData ??= playerEffectData; - - if (entityid == playerEntityID && removedEffectData is not null) - AnnouncePlayerEffectExpired(removedEffectData); - - if (entity is not null) - DispatchBotEvent(bot => bot.OnRemoveEntityEffect(entity, effect)); - } - - /// - /// Called when a player spawns or enters the client's render distance - /// - public void OnSpawnPlayer(int entityID, Guid uuid, Location location, byte yaw, byte pitch) - { - Entity playerEntity; - if (onlinePlayers.TryGetValue(uuid, out PlayerInfo? player)) - { - playerEntity = new(entityID, EntityType.Player, location, uuid, player.Name, yaw, pitch); - player.entity = playerEntity; - } - else - playerEntity = new(entityID, EntityType.Player, location, uuid, null, yaw, pitch); - OnSpawnEntity(playerEntity); - } - - /// - /// Called on Entity Equipment - /// - /// Entity ID - /// Equipment slot. 0: main hand, 1: off hand, 2-5: armor slot (2: boots, 3: leggings, 4: chestplate, 5: helmet) - /// Item) - public void OnEntityEquipment(int entityid, int slot, Item? item) - { - if (entities.ContainsKey(entityid)) - { - Entity entity = entities[entityid]; - if (entity.Equipment.ContainsKey(slot)) - entity.Equipment.Remove(slot); - if (item is not null) - entity.Equipment[slot] = item; - DispatchBotEvent(bot => bot.OnEntityEquipment(entities[entityid], slot, item)); - } - } - - /// - /// Called when the Game Mode has been updated for a player - /// - /// Player Name - /// Player UUID (Empty for initial gamemode on login) - /// New Game Mode (0: Survival, 1: Creative, 2: Adventure, 3: Spectator). - public void OnGamemodeUpdate(Guid uuid, int gamemode) - { - // Initial gamemode on login - if (uuid == Guid.Empty) - this.gamemode = gamemode; - - // Further regular gamemode change events - if (onlinePlayers.ContainsKey(uuid)) - { - string playerName = onlinePlayers[uuid].Name; - if (playerName == username) - this.gamemode = gamemode; - DispatchBotEvent(bot => bot.OnGamemodeUpdate(playerName, uuid, gamemode)); - } - } - - /// - /// Called when entities dead/despawn. - /// - public void OnDestroyEntities(int[] Entities) - { - foreach (int a in Entities) - { - if (entities.TryGetValue(a, out Entity? entity)) - { - DispatchBotEvent(bot => bot.OnEntityDespawn(entity)); - entities.Remove(a); - } - } - } - - /// - /// Called when an entity's position changed within 8 block of its previous position with rotation. - /// - /// - /// - /// - /// - /// - /// - /// - public void OnEntityPosition(int EntityID, Double Dx, Double Dy, Double Dz, float yaw, float pitch, bool onGround) - { - if (entities.ContainsKey(EntityID)) - { - Location L = entities[EntityID].Location; - L.X += Dx; - L.Y += Dy; - L.Z += Dz; - entities[EntityID].Location = L; - entities[EntityID].Yaw = yaw; - entities[EntityID].Pitch = pitch; - DispatchBotEvent(bot => bot.OnEntityMove(entities[EntityID])); - } - } - - /// - /// Called when an entity's position changed within 8 block of its previous position. - /// - /// - /// - /// - /// - /// - public void OnEntityPosition(int EntityID, Double Dx, Double Dy, Double Dz, bool onGround) - { - if (entities.ContainsKey(EntityID)) - { - Location L = entities[EntityID].Location; - L.X += Dx; - L.Y += Dy; - L.Z += Dz; - entities[EntityID].Location = L; - DispatchBotEvent(bot => bot.OnEntityMove(entities[EntityID])); - } - } - - /// - /// Called when an entity's rotation changed. - /// - /// - /// - /// - /// - public void OnEntityRotation(int EntityID, float yaw, float pitch, bool onGround) - { - if (entities.ContainsKey(EntityID)) - { - entities[EntityID].Yaw = yaw; - entities[EntityID].Pitch = pitch; - DispatchBotEvent(bot => bot.OnEntityRotate(entities[EntityID])); - } - } - - /// - /// Called when an entity moved over 8 block. - /// - /// - /// - /// - /// - /// - public void OnEntityTeleport(int EntityID, Double X, Double Y, Double Z, bool onGround) - { - if (entities.ContainsKey(EntityID)) - { - Location location = new(X, Y, Z); - entities[EntityID].Location = location; - DispatchBotEvent(bot => bot.OnEntityMove(entities[EntityID])); - } - } - - /// - /// Called when an entity velocity update is received. - /// - /// Entity ID - /// Velocity on X axis (blocks/tick) - /// Velocity on Y axis (blocks/tick) - /// Velocity on Z axis (blocks/tick) - public void OnEntityVelocity(int entityID, double velocityX, double velocityY, double velocityZ) - { - if (entities.TryGetValue(entityID, out Entity? entity)) - DispatchBotEvent(bot => bot.OnEntityVelocity(entity, velocityX, velocityY, velocityZ)); - } - - /// - /// Called when a sound packet is received. - /// - /// Sound key when available, otherwise null - /// Sound location when available - /// Sound category id from packet - /// Sound volume - /// Sound pitch - /// Source entity id for entity sound packets, if any - public void OnSoundEffect(string? soundName, Location? location, int category, float volume, float pitch, - int? entityID) - { - Entity? sourceEntity = null; - Location? resolvedLocation = location; - - if (entityID is int id && entities.TryGetValue(id, out Entity? entity)) - { - sourceEntity = entity; - resolvedLocation ??= entity.Location; - } - - DispatchBotEvent(bot => bot.OnSoundEffect(soundName, resolvedLocation, category, volume, pitch, - sourceEntity)); - } - - /// - /// Called when received entity properties from server. - /// - /// - /// - public void OnEntityProperties(int EntityID, Dictionary prop) - { - if (EntityID == playerEntityID) - { - foreach (var kvp in prop) - playerAttributes[kvp.Key] = kvp.Value; - - DispatchBotEvent(bot => bot.OnPlayerProperty(prop)); - } - } - - /// - /// Called when the status of an entity have been changed - /// - /// Entity ID - /// Status ID - public void OnEntityStatus(int entityID, byte status) - { - if (entityID == playerEntityID) - { - DispatchBotEvent(bot => bot.OnPlayerStatus(status)); - } - } - - /// - /// Called when server sent a Time Update packet. - /// - /// - /// - public void OnTimeUpdate(long WorldAge, long TimeOfDay) - { - // TimeUpdate sent every server tick hence used as timeout detect - UpdateKeepAlive(); - // calculate server tps - if (lastAge != 0) - { - DateTime currentTime = DateTime.Now; - long tickDiff = WorldAge - lastAge; - double tps = tickDiff / (currentTime - lastTime).TotalSeconds; - lastAge = WorldAge; - lastTime = currentTime; - if (tps > 0) - { - // A Minecraft server cannot genuinely exceed 20 TPS; values above 20 are - // caused by packet-timing jitter. Clamp instead of discarding so that a - // healthy server averages to 20 rather than being biased downward. - tps = Math.Min(tps, 20.0); - // calculate average tps - if (tpsSamples.Count >= maxSamples) - { - // full - sampleSum -= tpsSamples[0]; - tpsSamples.RemoveAt(0); - } - tpsSamples.Add(tps); - sampleSum += tps; - averageTPS = sampleSum / tpsSamples.Count; - serverTPS = tps; - DispatchBotEvent(bot => bot.OnServerTpsUpdate(tps)); - } - } - else - { - lastAge = WorldAge; - lastTime = DateTime.Now; - } - DispatchBotEvent(bot => bot.OnTimeUpdate(WorldAge, TimeOfDay)); - } - - /// - /// Called when client player's health changed, e.g. getting attack - /// - /// Player current health - public void OnUpdateHealth(float health, int food) - { - playerHealth = health; - playerFoodSaturation = food; - - if (health <= 0) - { - if (Config.Main.Advanced.AutoRespawn) - { - Log.Info(Translations.mcc_player_dead_respawn); - respawnTicks = Settings.ClientTicksPerSecond; - } - else - { - Log.Info(string.Format(Translations.mcc_player_dead, Config.Main.Advanced.InternalCmdChar.ToLogString())); - } - DispatchBotEvent(bot => bot.OnDeath()); - } - - DispatchBotEvent(bot => bot.OnHealthUpdate(health, food)); - } - - /// - /// Called when experience updates - /// - /// Between 0 and 1 - /// Level - /// Total Experience - public void OnSetExperience(float Experiencebar, int Level, int TotalExperience) - { - playerLevel = Level; - playerTotalExperience = TotalExperience; - DispatchBotEvent(bot => bot.OnSetExperience(Experiencebar, Level, TotalExperience)); - } - - /// - /// Called when and explosion occurs on the server - /// - /// Explosion location - /// Explosion strength - /// Amount of affected blocks - public void OnExplosion(Location location, float strength, int affectedBlocks) - { - DispatchBotEvent(bot => bot.OnExplosion(location, strength, affectedBlocks)); - } - - /// - /// Called when Latency is updated - /// - /// player uuid - /// Latency - public void OnLatencyUpdate(Guid uuid, int latency) - { - if (onlinePlayers.ContainsKey(uuid)) - { - PlayerInfo player = onlinePlayers[uuid]; - player.Ping = latency; - string playerName = player.Name; - foreach (KeyValuePair ent in entities) - { - if (ent.Value.UUID == uuid && ent.Value.Name == playerName) - { - ent.Value.Latency = latency; - DispatchBotEvent(bot => bot.OnLatencyUpdate(ent.Value, playerName, uuid, latency)); - break; - } - } - DispatchBotEvent(bot => bot.OnLatencyUpdate(playerName, uuid, latency)); - } - } - - /// - /// Called when held item change - /// - /// item slot - public void OnHeldItemChange(byte slot) - { - CurrentSlot = slot; - DispatchBotEvent(bot => bot.OnHeldItemChange(slot)); - } - - /// - /// Called when an update of the map is sent by the server, take a look at https://wiki.vg/Protocol#Map_Data for more info on the fields - /// Map format and colors: https://minecraft.wiki/w/Map_item_format - /// - /// Map ID of the map being modified - /// A scale of the Map, from 0 for a fully zoomed-in map (1 block per pixel) to 4 for a fully zoomed-out map (16 blocks per pixel) - /// Specifies whether player and item frame icons are shown - /// True if the map has been locked in a cartography table - /// A list of MapIcon objects of map icons, send only if trackingPosition is true - /// Numbs of columns that were updated (map width) (NOTE: If it is 0, the next fields are not used/are set to default values of 0 and null respectively) - /// Map height - /// x offset of the westernmost column - /// z offset of the northernmost row - /// a byte array of colors on the map - public void OnMapData(int mapid, byte scale, bool trackingPosition, bool locked, List icons, byte columnsUpdated, byte rowsUpdated, byte mapCoulmnX, byte mapCoulmnZ, byte[]? colors) - { - DispatchBotEvent(bot => bot.OnMapData(mapid, scale, trackingPosition, locked, icons, columnsUpdated, rowsUpdated, mapCoulmnX, mapCoulmnZ, colors)); - } - - /// - /// Received some Title from the server - /// 0 = set title, 1 = set subtitle, 3 = set action bar, 4 = set times and display, 4 = hide, 5 = reset - /// title text - /// suntitle text - /// action bar text - /// Fade In - /// Stay - /// Fade Out - /// json text - public void OnTitle(int action, string titletext, string subtitletext, string actionbartext, int fadein, int stay, int fadeout, string json) - { - DispatchBotEvent(bot => bot.OnTitle(action, titletext, subtitletext, actionbartext, fadein, stay, fadeout, json)); - } - - /// - /// Called when Soreboard Objective - /// - /// objective name - /// 0 to create the scoreboard. 1 to remove the scoreboard. 2 to update the display text. - /// Only if mode is 0 or 2. The text to be displayed for the score - /// Only if mode is 0 or 2. 0 = "integer", 1 = "hearts". - /// Number format: 0 - blank, 1 - styled, 2 - fixed - public void OnScoreboardObjective(string objectiveName, byte mode, string objectiveValue, int type, int numberFormat) - { - var json = objectiveValue; - objectiveValue = ChatParser.ParseText(objectiveValue); - DispatchBotEvent(bot => bot.OnScoreboardObjective(objectiveName, mode, objectiveValue, type, json, numberFormat)); - } - - /// - /// Called when DisplayScoreboard - /// - /// The entity whose score this is. For players, this is their username; for other entities, it is their UUID. - /// 0 to create/update an item. 1 to remove an item. - /// The name of the objective the score belongs to - /// The name of the objective the score belongs to, but with chat formatting - /// The score to be displayed next to the entry. Only sent when Action does not equal 1. - /// Number format: 0 - blank, 1 - styled, 2 - fixed - public void OnUpdateScore(string entityName, int action, string objectiveName, string objectiveDisplayName, int objectiveValue, int numberFormat) - { - DispatchBotEvent(bot => bot.OnUpdateScore(entityName, action, objectiveName, objectiveDisplayName, objectiveValue, numberFormat)); - } - - /// - /// Called when a Teams packet is received. Updates the internal team state and notifies bots. - /// - public void OnTeam(string teamName, byte method, string displayName, byte friendlyFlags, - string nameTagVisibility, string collisionRule, int color, - string prefix, string suffix, List players) - { - lock (teams) - { - switch (method) - { - case 0: // create - var newTeam = new PlayerTeam - { - Name = teamName, - DisplayName = displayName, - AllowFriendlyFire = (friendlyFlags & 0x01) != 0, - SeeFriendlyInvisibles = (friendlyFlags & 0x02) != 0, - NameTagVisibility = nameTagVisibility, - CollisionRule = collisionRule, - Color = color, - Prefix = prefix, - Suffix = suffix - }; - foreach (var p in players) - newTeam.Members.Add(p); - teams[teamName] = newTeam; - break; - - case 1: // remove - teams.Remove(teamName); - break; - - case 2: // update parameters - if (!teams.TryGetValue(teamName, out var updateTeam)) - { - updateTeam = new PlayerTeam { Name = teamName }; - teams[teamName] = updateTeam; - } - updateTeam.DisplayName = displayName; - updateTeam.AllowFriendlyFire = (friendlyFlags & 0x01) != 0; - updateTeam.SeeFriendlyInvisibles = (friendlyFlags & 0x02) != 0; - updateTeam.NameTagVisibility = nameTagVisibility; - updateTeam.CollisionRule = collisionRule; - updateTeam.Color = color; - updateTeam.Prefix = prefix; - updateTeam.Suffix = suffix; - break; - - case 3: // add players - if (!teams.TryGetValue(teamName, out var addTeam)) - { - addTeam = new PlayerTeam { Name = teamName }; - teams[teamName] = addTeam; - } - foreach (var p in players) - addTeam.Members.Add(p); - break; - - case 4: // remove players - if (teams.TryGetValue(teamName, out var removeTeam)) - foreach (var p in players) - removeTeam.Members.Remove(p); - break; - } - } - DispatchBotEvent(bot => bot.OnTeam(teamName, method, displayName, friendlyFlags, - nameTagVisibility, collisionRule, color, prefix, suffix, players)); - } - - - /// - /// Called when the client received the Tab Header and Footer - /// - /// Header - /// Footer - public void OnTabListHeaderAndFooter(string header, string footer) - { - lock (tabListHeaderFooterLock) - { - tabListHeader = header; - tabListFooter = footer; - } - DispatchBotEvent(bot => bot.OnTabListHeaderAndFooter(header, footer)); - } - - /// - /// Called when the health of an entity changed - /// - /// Entity ID - /// The health of the entity - public void OnEntityHealth(int entityID, float health) - { - if (entities.ContainsKey(entityID)) - { - entities[entityID].Health = health; - DispatchBotEvent(bot => bot.OnEntityHealth(entities[entityID], health)); - } - } - - /// - /// Called when the metadata of an entity changed - /// - /// Entity ID - /// The metadata of the entity - public void OnEntityMetadata(int entityID, Dictionary metadata) - { - if (entities.ContainsKey(entityID)) - { - Entity entity = entities[entityID]; - entity.Metadata = metadata; - int itemEntityMetadataFieldIndex = protocolversion < Protocol18Handler.MC_1_17_Version ? 7 : 8; - - if (entity.Type.ContainsItem() && metadata.TryGetValue(itemEntityMetadataFieldIndex, out object? itemObj) && itemObj is not null && itemObj.GetType() == typeof(Item)) - { - Item item = (Item)itemObj; - if (item is null) - entity.Item = new Item(ItemType.Air, 0, null); - else entity.Item = item; - } - if (metadata.TryGetValue(6, out object? poseObj) && poseObj is not null && poseObj.GetType() == typeof(Int32)) - { - entity.Pose = (EntityPose)poseObj; - } - if (metadata.TryGetValue(2, out object? nameObj) && nameObj is not null && nameObj.GetType() == typeof(string)) - { - string name = nameObj.ToString() ?? string.Empty; - entity.CustomNameJson = name; - entity.CustomName = ChatParser.ParseText(name); - } - if (metadata.TryGetValue(3, out object? nameVisableObj) && nameVisableObj is not null && nameVisableObj.GetType() == typeof(bool)) - { - entity.IsCustomNameVisible = bool.Parse(nameVisableObj.ToString() ?? string.Empty); - } - DispatchBotEvent(bot => bot.OnEntityMetadata(entity, metadata)); - } - } - - /// - /// Called when tradeList is recieved after interacting with villager - /// - /// Window ID - /// List of trades. - /// Contains Level, Experience, IsRegularVillager and CanRestock . - public void OnTradeList(int windowID, List trades, VillagerInfo villagerInfo) - { - DispatchBotEvent(bot => bot.OnTradeList(windowID, trades, villagerInfo)); - } - - /// - /// Will be called every player break block in gamemode 0 - /// - /// Player ID - /// Block location - /// Destroy stage, maximum 255 - public void OnBlockBreakAnimation(int entityId, Location location, byte stage) - { - if (entities.ContainsKey(entityId)) - { - Entity entity = entities[entityId]; - DispatchBotEvent(bot => bot.OnBlockBreakAnimation(entity, location, stage)); - } - } - - /// - /// Will be called every animations of the hit and place block - /// - /// Player ID - /// 0 = LMB, 1 = RMB (RMB Corrent not work) - public void OnEntityAnimation(int entityID, byte animation) - { - if (entities.ContainsKey(entityID)) - { - Entity entity = entities[entityID]; - DispatchBotEvent(bot => bot.OnEntityAnimation(entity, animation)); - } - } - - /// - /// Will be called when a Synchronization sequence is recevied, this sequence need to be sent when breaking or placing blocks - /// - /// Sequence ID - public void OnBlockChangeAck(int sequenceId) - { - this.sequenceId = sequenceId; - } - - /// - /// This method is called when the protocol handler receives server data - /// - /// Indicates if the server has a motd message - /// Server MOTD message - /// Indicates if the server has a an icon - /// Server icon in Base 64 format - /// Indicates if the server previews chat - public void OnServerDataRecived(bool hasMotd, string motd, bool hasIcon, string iconBase64, bool previewsChat) - { - isSupportPreviewsChat = previewsChat; - } - - /// - /// This method is called when the protocol handler receives "Set Display Chat Preview" packet - /// - /// Indicates if the server previews chat - public void OnChatPreviewSettingUpdate(bool previewsChat) - { - isSupportPreviewsChat = previewsChat; - } - - /// - /// This method is called when the protocol handler receives "Login Success" packet - /// - /// The player's UUID received from the server - /// The player's username received from the server - /// Tuple - public void OnLoginSuccess(Guid uuid, string userName, Tuple[]? playerProperty) - { - //string UUID = uuid.ToString().Replace("-", String.Empty); - //Log.Info("now UUID = " + this.uuid); - //Log.Info("new UUID = " + UUID); - ////handler.SetUserUUID(UUID); - - } - - /// - /// Used for a wide variety of game events, from weather to bed use to gamemode to demo messages. - /// - /// Event type - /// Depends on Reason - public void OnGameEvent(byte reason, float value) - { - switch (reason) - { - case 3: - OnGamemodeUpdate(Guid.Empty, (int)value); - break; - case 7: - DispatchBotEvent(bot => bot.OnRainLevelChange(value)); - break; - case 8: - DispatchBotEvent(bot => bot.OnThunderLevelChange(value)); - break; - } - } - - /// - /// Called when a block is changed. - /// - /// The location of the block. - /// The block - public void OnBlockChange(Location location, Block block) - { - world.SetBlock(location, block); - if (!IsSignMaterial(block.Type)) - RemoveKnownSign(location); - DispatchBotEvent(bot => bot.OnBlockChange(location, block)); - } - - public void OnBlockEntityData(Location location, Dictionary? nbt) - { - UpdateKnownSign(location, nbt); - } - - /// - /// Called when "AutoComplete" completes. - /// - /// The number of this result. - /// All commands. - public void OnAutoCompleteDone(int transactionId, string[] result) - { - ConsoleIO.OnAutoCompleteDone(transactionId, result); - } - - public void SetCanSendMessage(bool canSendMessage) - { - CanSendMessage = canSendMessage; - Log.Debug("CanSendMessage = " + canSendMessage); - } - - public void OnRecipeBookAdd(RecipeBookRecipeEntry[] recipes, bool replace) - { - lock (recipeBookLock) - { - if (replace) - unlockedRecipes.Clear(); - - foreach (RecipeBookRecipeEntry recipe in recipes) - { - // Guard against malformed server packets that send empty display IDs. - if (!string.IsNullOrWhiteSpace(recipe.CommandId)) - unlockedRecipes[recipe.CommandId] = recipe; - } - } - } - - public void OnRecipeBookRemove(string[] recipeIds) - { - lock (recipeBookLock) - { - foreach (string recipeId in recipeIds) - { - if (!string.IsNullOrWhiteSpace(recipeId)) - unlockedRecipes.Remove(recipeId); - } - } - } - - public void OnAchievementsUpdate(IReadOnlyList added, IReadOnlyList removedIds, bool reset) - { - lock (achievementsLock) - { - if (reset) - achievements.Clear(); - - // Remove entries - foreach (string id in removedIds) - achievements.Remove(id); - - // Add/update entries. For progress-only updates (no definition), - // merge with existing definition if available. - foreach (Achievement entry in added) - { - if (entry.Title is null && achievements.TryGetValue(entry.Id, out Achievement? existing)) - { - // Progress-only update - merge with existing definition - bool isCompleted = ComputeAchievementCompleted(existing.Requirements, entry.CriteriaProgress); - achievements[entry.Id] = existing with { IsCompleted = isCompleted, CriteriaProgress = entry.CriteriaProgress }; - } - else - { - achievements[entry.Id] = entry; - } - } - } - - DispatchBotEvent(bot => bot.OnAchievementUpdate(added, removedIds, reset)); - } - - public void OnSelectAdvancementTab(string? tabId) - { - activeAdvancementTab = tabId; - } - - /// - /// Compute whether an achievement is completed based on AND-of-ORs requirements. - /// - private static bool ComputeAchievementCompleted(IReadOnlyList> requirements, IReadOnlyDictionary criteria) - { - if (requirements.Count == 0) - return true; - - foreach (IReadOnlyList group in requirements) - { - bool groupSatisfied = false; - foreach (string criterion in group) - { - if (criteria.TryGetValue(criterion, out bool done) && done) - { - groupSatisfied = true; - break; - } - } - if (!groupSatisfied) - return false; - } - return true; - } - - /// - /// Send a click container button packet to the server. - /// Used for Enchanting table, Lectern, stone cutter and loom - /// - /// Id of the window being clicked - /// Id of the clicked button - /// True if packet was successfully sent - - public bool ClickContainerButton(int windowId, int buttonId) - { - return handler.ClickContainerButton(windowId, buttonId); - } - - private void ClearKnownSigns() - { - lock (signDataLock) - { - knownSigns.Clear(); - } - } - - private void RemoveKnownSign(Location location) - { - var key = ToBlockKey(location); - lock (signDataLock) - { - knownSigns.Remove(key); - } - } - - private void UpdateKnownSign(Location location, Dictionary? nbt) - { - var key = ToBlockKey(location); - var block = world.GetBlock(new Location(key.x, key.y, key.z)); - if (!IsSignMaterial(block.Type) || !TryExtractSignText(nbt, out string[] frontText, out string[] backText, out bool isWaxed)) - { - lock (signDataLock) - { - knownSigns.Remove(key); - } - - return; - } - - lock (signDataLock) - { - knownSigns[key] = (block.Type.ToString(), block.GetTypeString(), frontText, backText, isWaxed); - } - } - - private static bool TryExtractSignText(Dictionary? nbt, out string[] frontText, out string[] backText, out bool isWaxed) - { - frontText = ExtractSignLines(nbt, "front_text"); - backText = ExtractSignLines(nbt, "back_text"); - if (frontText.Length == 0 && backText.Length == 0) - frontText = ExtractLegacySignLines(nbt); - - isWaxed = nbt is not null - && nbt.TryGetValue("is_waxed", out object? waxedValue) - && waxedValue is bool waxed - && waxed; - return frontText.Length > 0 || backText.Length > 0; - } - - private static string[] ExtractSignLines(Dictionary? nbt, string sideKey) - { - if (nbt is null - || !nbt.TryGetValue(sideKey, out object? sideValue) - || sideValue is not Dictionary sideData - || !sideData.TryGetValue("messages", out object? messagesValue) - || messagesValue is not object[] messages) - { - return []; - } - - return messages - .Take(4) - .Select(ConvertSignMessage) - .ToArray(); - } - - private static string[] ExtractLegacySignLines(Dictionary? nbt) - { - if (nbt is null) - return []; - - List lines = new(4); - for (int i = 1; i <= 4; i++) - { - if (nbt.TryGetValue($"Text{i}", out object? value)) - lines.Add(ConvertSignMessage(value)); - } - - return lines.ToArray(); - } - - private static string ConvertSignMessage(object? value) - { - try - { - return value switch - { - null => string.Empty, - string text => ParseMaybeJsonText(text), - Dictionary nbt => ChatParser.ParseText(nbt), - object[] items => string.Concat(items.Select(ConvertSignMessage)), - _ => value.ToString() ?? string.Empty - }; - } - catch - { - return value?.ToString() ?? string.Empty; - } - } - - private static string ParseMaybeJsonText(string text) - { - string trimmed = text.Trim(); - if ((trimmed.StartsWith("{", StringComparison.Ordinal) && trimmed.EndsWith("}", StringComparison.Ordinal)) - || (trimmed.StartsWith("[", StringComparison.Ordinal) && trimmed.EndsWith("]", StringComparison.Ordinal))) - { - try - { - return ChatParser.ParseText(trimmed); - } - catch - { - } - } - - return text; - } - - private static bool IsSignMaterial(Material material) - { - return material.ToString().Contains("Sign", StringComparison.Ordinal); - } - - private static (int x, int y, int z) ToBlockKey(Location location) - { - Location blockLocation = location.ToFloor(); - return ((int)blockLocation.X, (int)blockLocation.Y, (int)blockLocation.Z); - } - - private static bool SupportsRecipeBook(ContainerType containerType) - { - return containerType switch - { - ContainerType.PlayerInventory or - ContainerType.Crafting or - ContainerType.Furnace or - ContainerType.BlastFurnace or - ContainerType.Smoker or - ContainerType.Stonecutter => true, - _ => false, - }; - } - - private void ClearUnlockedRecipes() - { - lock (recipeBookLock) - { - unlockedRecipes.Clear(); - } - } - - /// - /// Normalize a recipe argument for the target protocol version. - /// Legacy recipe-book packets use identifiers and default to the minecraft namespace. - /// 1.21.2+ recipe-book packets use numeric recipe display ids and should be left trimmed-only. - /// - internal static string NormalizeRecipeArgument(string recipeId, int protocolVersion) - { - return protocolVersion >= Protocol18Handler.MC_1_21_2_Version - ? recipeId.Trim() - : NormalizeRecipeId(recipeId); - } - - private static string NormalizeRecipeId(string recipeId) - { - string trimmedRecipeId = recipeId.Trim(); - if (trimmedRecipeId.Length == 0) - return string.Empty; - - return trimmedRecipeId.Contains(':', StringComparison.Ordinal) - ? trimmedRecipeId - : "minecraft:" + trimmedRecipeId; - } - - #endregion - } -} diff --git a/MinecraftClient/Mcp/IMccMcpCapabilities.cs b/MinecraftClient/Mcp/IMccMcpCapabilities.cs deleted file mode 100644 index 055fb56146..0000000000 --- a/MinecraftClient/Mcp/IMccMcpCapabilities.cs +++ /dev/null @@ -1,66 +0,0 @@ -namespace MinecraftClient.Mcp; - -public interface IMccMcpCapabilities -{ - MccMcpResult GetSessionStatus(); - MccMcpResult GetServerInfo(); - MccMcpResult GetPlayerState(); - MccMcpResult GetWorldState(); - MccMcpResult GetChunkStatus(double? x, double? y, double? z); - MccMcpResult RaycastBlock(double maxDistance, bool includeNeighbors); - MccMcpResult PreviewPath(double x, double y, double z, bool allowUnsafe, int maxOffset, int minOffset, int timeoutMs, int maxWaypoints); - MccMcpResult GetPlayersList(); - MccMcpResult GetPlayersDetailed(bool includeSelf, bool includeCoordinates); - MccMcpResult GetPlayerStats(); - MccMcpResult GetStatusEffects(); - MccMcpResult GetRecentEvents(long afterId, int maxCount, string? typeFilter); - MccMcpResult GetLoadedBots(); - MccMcpResult GetChatHistory(int maxCount, bool includeJson); - MccMcpResult GetInternalCommands(); - MccMcpResult GetMaterialsList(string? filter, int maxCount); - MccMcpResult GetBlockTypesList(string? filter, int maxCount); - MccMcpResult GetEntityTypesList(string? filter, int maxCount); - MccMcpResult SendChat(string text); - MccMcpResult QuitClient(); - MccMcpResult DisconnectClient(); - MccMcpResult Respawn(); - MccMcpResult RunInternalCommand(string command); - MccMcpResult PlayAnimation(string hand); - MccMcpResult ToggleSneak(bool enabled); - MccMcpResult ToggleSprint(bool enabled); - MccMcpResult UseItemOnHand(); - MccMcpResult ChangeHotbarSlot(int slot); - MccMcpResult SelectHotbarItem(string itemType, bool preferLowestSlot); - MccMcpResult UseItemOnBlock(double x, double y, double z); - MccMcpResult DigBlock(double x, double y, double z, double durationSeconds); - MccMcpResult PlaceBlock(int x, int y, int z, string face, string hand, bool lookAtBlock); - MccMcpResult InteractEntity(int entityId, string interaction, string hand); - MccMcpResult AttackEntity(int entityId); - MccMcpResult ScanNearbyBlocks(int radius, int maxCount, string? materialFilter); - MccMcpResult FindBlocks(string? query, int radius, int maxCount, bool exactMatch); - MccMcpResult IsPlayerNearby(string? playerName, double radius, bool includeSelf); - MccMcpResult LocatePlayer(string playerName, bool includeSelf); - MccMcpResult FindNearestEntity(string? typeFilter, string? nameFilter, double radius, bool includePlayers); - MccMcpResult CanReachPosition(double x, double y, double z, bool allowUnsafe, int maxOffset, int minOffset, int timeoutMs); - MccMcpResult MoveTo(double x, double y, double z, bool allowUnsafe, bool allowDirectTeleport, int maxOffset, int minOffset, int timeoutMs); - MccMcpResult MoveToPlayer(string playerName, bool allowUnsafe, bool allowDirectTeleport, int maxOffset, int minOffset, int timeoutMs); - MccMcpResult LookAt(double x, double y, double z); - MccMcpResult LookDirection(string direction); - MccMcpResult LookAngles(float yaw, float pitch); - MccMcpResult ListInventories(); - MccMcpResult GetInventorySnapshot(int inventoryId); - MccMcpResult SearchInventories(string query, int maxCount, bool exactMatch, bool includeContainers); - MccMcpResult OpenContainerAt(int x, int y, int z, int timeoutMs, bool closeCurrent); - MccMcpResult CloseContainer(int inventoryId, int timeoutMs); - MccMcpResult InventoryWindowAction(int inventoryId, int slotId, string actionType); - MccMcpResult DropInventoryItem(string itemType, int count, int inventoryId, bool preferStack); - MccMcpResult DepositContainerItem(string itemType, int count, int inventoryId, bool preferLargestStack); - MccMcpResult WithdrawContainerItem(string itemType, int count, int inventoryId, bool preferLargestStack); - MccMcpResult QueryEntities(int maxCount); - MccMcpResult ListEntities(int maxCount, string? typeFilter, double radius); - MccMcpResult GetEntityInfo(int entityId, bool includeMetadata, bool includeEquipment, bool includeEffects); - MccMcpResult FindSigns(string text, bool exactMatch, int radius, int maxCount, bool includeBackText); - MccMcpResult ListItemEntities(string? itemType, double radius, int maxCount); - MccMcpResult PickupItems(string itemType, double radius, int maxItems, bool allowUnsafe, int timeoutMs); - MccMcpResult GetWorldBlockAt(int x, int y, int z); -} diff --git a/MinecraftClient/Mcp/MccEmbeddedMcpHost.cs b/MinecraftClient/Mcp/MccEmbeddedMcpHost.cs deleted file mode 100644 index a40b718342..0000000000 --- a/MinecraftClient/Mcp/MccEmbeddedMcpHost.cs +++ /dev/null @@ -1,135 +0,0 @@ -using System; -using Microsoft.AspNetCore.Builder; -using Microsoft.AspNetCore.Hosting; -using Microsoft.AspNetCore.Http; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using ModelContextProtocol.Server; - -namespace MinecraftClient.Mcp; - -public sealed class MccEmbeddedMcpHost -{ - private readonly MccMcpConfig config; - private readonly IMccMcpCapabilities capabilities; - private readonly object stateLock = new(); - private WebApplication? app; - - public MccEmbeddedMcpHost(MccMcpConfig config, IMccMcpCapabilities capabilities) - { - this.config = config; - this.capabilities = capabilities; - } - - public bool IsRunning - { - get - { - lock (stateLock) - { - return app is not null; - } - } - } - - public string Endpoint => $"http://{config.Transport.BindHost}:{config.Transport.Port}{NormalizeRoute(config.Transport.Route)}"; - - public bool Start(out string? error) - { - lock (stateLock) - { - error = null; - if (app is not null) - return true; - - string route = NormalizeRoute(config.Transport.Route); - string bindHost = string.IsNullOrWhiteSpace(config.Transport.BindHost) ? "127.0.0.1" : config.Transport.BindHost.Trim(); - if (config.Transport.Port is < 1 or > 65535) - { - error = "invalid_port"; - return false; - } - - string? requiredToken = null; - if (config.Transport.RequireAuthToken) - { - requiredToken = Environment.GetEnvironmentVariable(config.Transport.AuthTokenEnvVar); - if (string.IsNullOrWhiteSpace(requiredToken)) - { - error = "missing_auth_token"; - return false; - } - } - - WebApplicationBuilder builder = WebApplication.CreateBuilder(); - builder.Logging.ClearProviders(); - builder.Logging.AddFilter(_ => false); - builder.Services.AddSingleton(capabilities); - builder.Services.AddSingleton(config); - builder.Services.AddSingleton(); - builder.Services.AddMcpServer() - .WithHttpTransport() - .WithTools() - .WithPrompts(); - - builder.WebHost.UseUrls($"http://{bindHost}:{config.Transport.Port}"); - WebApplication builtApp = builder.Build(); - - if (config.Transport.RequireAuthToken) - { - builtApp.Use(async (context, next) => - { - if (context.Request.Path.StartsWithSegments(route, StringComparison.OrdinalIgnoreCase)) - { - string auth = context.Request.Headers.Authorization.ToString(); - if (!auth.StartsWith("Bearer ", StringComparison.OrdinalIgnoreCase) - || !string.Equals(auth[7..], requiredToken, StringComparison.Ordinal)) - { - context.Response.StatusCode = StatusCodes.Status401Unauthorized; - await context.Response.WriteAsync("Unauthorized"); - return; - } - } - - await next(); - }); - } - - builtApp.MapMcp(route); - builtApp.StartAsync().GetAwaiter().GetResult(); - app = builtApp; - return true; - } - } - - public bool Stop(out string? error) - { - lock (stateLock) - { - error = null; - if (app is null) - return true; - - try - { - app.StopAsync().GetAwaiter().GetResult(); - app.DisposeAsync().AsTask().GetAwaiter().GetResult(); - app = null; - return true; - } - catch - { - error = "stop_failed"; - return false; - } - } - } - - private static string NormalizeRoute(string route) - { - string normalized = string.IsNullOrWhiteSpace(route) ? "/mcp" : route.Trim(); - if (!normalized.StartsWith('/')) - normalized = '/' + normalized; - return normalized; - } -} diff --git a/MinecraftClient/Mcp/MccMcpCapabilities.cs b/MinecraftClient/Mcp/MccMcpCapabilities.cs deleted file mode 100644 index a0fd431073..0000000000 --- a/MinecraftClient/Mcp/MccMcpCapabilities.cs +++ /dev/null @@ -1,3269 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using MinecraftClient.CommandHandler; -using MinecraftClient.Inventory; -using MinecraftClient.Mapping; -using MinecraftClient.Protocol; -using MinecraftClient.Protocol.Message; -using MinecraftClient.Scripting; - -namespace MinecraftClient.Mcp; - -public sealed class MccMcpCapabilities : IMccMcpCapabilities -{ - private static readonly StringComparer NameComparer = StringComparer.OrdinalIgnoreCase; - private static readonly double[] s_defaultDigAttemptDurations = [1.5, 3.0, 5.0]; - private const int CoordinateRoundingPrecision = 2; - private const double SelfEntityDistanceThreshold = 0.2; - private const int MaxBlockScanRadius = 12; - private const int MaxBlockFindRadius = 32; - private const double MaxRaycastDistance = 128.0; - private const double DigReachDistance = 5.0; - private const double DigReachDistanceSquared = DigReachDistance * DigReachDistance; - private const int DefaultPathQueryTimeoutMs = 5000; - private const int MinPathQueryTimeoutMs = 250; - private const int MaxPathQueryTimeoutMs = 15000; - private const int DefaultArrivalWaitMs = 3500; - private const int MinArrivalWaitMs = 250; - private const int MaxArrivalWaitMs = 15000; - private const double DefaultArrivalTolerance = 1.5; - private const int ArrivalPollIntervalMs = 125; - private const int MaxBlockVerifyWaitMs = 12000; - private const int DefaultContainerWaitMs = 5000; - private const int MinContainerWaitMs = 250; - private const int MaxContainerWaitMs = 20000; - private const int DefaultInventoryActionWaitMs = 3500; - private const int MaxPathPreviewWaypoints = 1000; - - private sealed class InternalCommandInfo - { - public required string Name { get; init; } - public required string Usage { get; init; } - public required string Description { get; init; } - } - - private sealed class NearbyPlayerSnapshot - { - public required int EntityId { get; init; } - public required Guid Uuid { get; init; } - public string? Name { get; set; } - public string? CustomName { get; init; } - public required double X { get; init; } - public required double Y { get; init; } - public required double Z { get; init; } - public required double Distance { get; init; } - public required int Latency { get; init; } - } - - private sealed class NearbyItemSnapshot - { - public required int EntityId { get; init; } - public required ItemType ItemType { get; init; } - public required string TypeLabel { get; init; } - public required int Count { get; init; } - public required double X { get; init; } - public required double Y { get; init; } - public required double Z { get; init; } - public required double Distance { get; init; } - } - - private enum InventoryTransferDirection - { - Deposit, - Withdraw - } - - private readonly Func togglesProvider; - private readonly MccGameApi game; - - public MccMcpCapabilities(Func togglesProvider) - { - this.togglesProvider = togglesProvider; - game = new MccGameApi(GetClient); - } - - private static McClient? GetClient() - { - return McClient.Instance as McClient; - } - - private static MccMcpResult NotConnected() - { - return MccMcpResult.Fail("disconnected"); - } - - private static MccMcpResult ToMcpResult(MccGameResult result) - { - return result.Success - ? MccMcpResult.Ok(message: result.Message) - : MccMcpResult.Fail(result.ErrorCode ?? "unknown", result.Message); - } - - private static MccMcpResult ToMcpResult(MccGameResult result) - { - return result.Success - ? MccMcpResult.Ok(result.Data, result.Message) - : MccMcpResult.Fail(result.ErrorCode ?? "unknown", result.Message, result.Data); - } - - private bool IsCategoryEnabled(Func selector) - { - return selector(togglesProvider()); - } - - public MccMcpResult GetSessionStatus() - { - if (!IsCategoryEnabled(t => t.SessionStatus)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - return client.InvokeOnMainThread(() => - { - Location location = client.GetCurrentLocation(); - return MccMcpResult.Ok(new - { - host = client.GetServerHost(), - port = client.GetServerPort(), - username = client.GetUsername(), - protocolVersion = client.GetProtocolVersion(), - terrainEnabled = client.GetTerrainEnabled(), - inventoryEnabled = client.GetInventoryEnabled(), - entityEnabled = client.GetEntityHandlingEnabled(), - location = ToCoordinate(location) - }); - }); - } - - public MccMcpResult GetServerInfo() - { - if (!IsCategoryEnabled(t => t.SessionStatus)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - return client.InvokeOnMainThread(() => MccMcpResult.Ok(new - { - host = client.GetServerHost(), - port = client.GetServerPort(), - tps = client.GetServerTPS() - })); - } - - public MccMcpResult GetPlayerState() - { - if (!IsCategoryEnabled(t => t.SessionStatus)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - return client.InvokeOnMainThread(() => - { - Location location = client.GetCurrentLocation(); - Dictionary effects = client.GetPlayerEffects(); - return MccMcpResult.Ok(new - { - nickname = client.GetUsername(), - username = client.GetUsername(), - health = client.GetHealth(), - saturation = client.GetSaturation(), - gamemode = client.GetGamemode(), - currentSlot = client.GetCurrentSlot() + 1, - yaw = client.GetYaw(), - pitch = client.GetPitch(), - location = ToCoordinate(location), - effects = effects.Values.Select(effect => new - { - id = effect.Effect.ToString(), - amplifier = effect.Amplifier, - remainingSeconds = effect.RemainingSeconds, - isInfinite = effect.IsInfinite - }).ToArray() - }); - }); - } - - public MccMcpResult GetWorldState() - { - if (!IsCategoryEnabled(t => t.SessionStatus)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - return client.InvokeOnMainThread(() => - { - Location location = client.GetCurrentLocation(); - World world = client.GetWorld(); - Dimension dimension = World.GetDimension(); - MccRuntimeStateSnapshot runtimeState = game.GetRuntimeState(); - int totalChunkCount = world.chunkCnt; - int pendingChunkCount = Math.Max(0, world.chunkLoadNotCompleted); - int loadedChunkCount = GetLoadedChunkCount(world); - - return MccMcpResult.Ok(new - { - host = client.GetServerHost(), - port = client.GetServerPort(), - username = client.GetUsername(), - protocol = client.GetProtocolVersion(), - protocolVersion = client.GetProtocolVersion(), - terrainEnabled = client.GetTerrainEnabled(), - inventoryEnabled = client.GetInventoryEnabled(), - entityEnabled = client.GetEntityHandlingEnabled(), - entityHandlingEnabled = client.GetEntityHandlingEnabled(), - location = ToCoordinate(location), - tps = client.GetServerTPS(), - dimension = dimension.Name, - dimensionDetails = new - { - name = dimension.Name, - minY = dimension.minY, - maxY = dimension.maxY, - height = dimension.height, - logicalHeight = dimension.logicalHeight, - coordinateScale = dimension.coordinateScale, - hasSkylight = dimension.hasSkylight, - hasCeiling = dimension.hasCeiling, - fixedTime = dimension.fixedTime >= 0 ? dimension.fixedTime : (long?)null - }, - loadedChunkCount, - pendingChunkCount, - totalChunkCount, - loadRatio = GetChunkLoadRatio(world), - worldAge = runtimeState.WorldAge, - timeOfDay = runtimeState.TimeOfDay, - rainLevel = runtimeState.RainLevel, - thunderLevel = runtimeState.ThunderLevel - }); - }); - } - - public MccMcpResult GetChunkStatus(double? x, double? y, double? z) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - - if (!HasCompleteCoordinateTriple(x, y, z)) - return MccMcpResult.Fail("invalid_args"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - return client.InvokeOnMainThread(() => - { - Location queryLocation = x.HasValue && y.HasValue && z.HasValue - ? new Location(x.Value, y.Value, z.Value) - : client.GetCurrentLocation(); - - World world = client.GetWorld(); - ChunkColumn? chunkColumn = world.GetChunkColumn(queryLocation); - return MccMcpResult.Ok(new - { - location = ToCoordinate(queryLocation), - chunk = new - { - x = queryLocation.ChunkX, - z = queryLocation.ChunkZ - }, - chunkX = queryLocation.ChunkX, - chunkZ = queryLocation.ChunkZ, - loaded = chunkColumn is not null, - fullyLoaded = chunkColumn?.FullyLoaded ?? false, - loadedChunkCount = GetLoadedChunkCount(world), - pendingChunkCount = Math.Max(0, world.chunkLoadNotCompleted), - totalChunkCount = world.chunkCnt, - loadRatio = GetChunkLoadRatio(world) - }); - }); - } - - public MccMcpResult RaycastBlock(double maxDistance, bool includeNeighbors) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - - if (maxDistance <= 0 || maxDistance > MaxRaycastDistance) - { - return MccMcpResult.Fail("invalid_args", data: new - { - parameter = "maxDistance", - minExclusive = 0, - max = MaxRaycastDistance - }); - } - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - return client.InvokeOnMainThread(() => - { - Location playerLocation = client.GetCurrentLocation(); - Location eyeLocation = playerLocation.EyesLocation(); - Tuple raycast = RaycastHelper.RaycastBlock(client, maxDistance, includeFluids: false); - if (!raycast.Item1) - { - return MccMcpResult.Ok(new - { - hit = false, - maxDistance, - playerLocation = ToCoordinate(playerLocation), - eyeLocation = ToCoordinate(eyeLocation), - location = (object?)null, - block = (object?)null, - distance = (double?)null, - eyeDistance = (double?)null, - neighbors = (object?)null - }); - } - - Location blockLocation = raycast.Item2; - Block block = raycast.Item3; - Location targetCenter = blockLocation.ToCenter(); - object? neighbors = includeNeighbors ? GetNeighborBlockSnapshot(client.GetWorld(), blockLocation) : null; - - return MccMcpResult.Ok(new - { - hit = true, - maxDistance, - playerLocation = ToCoordinate(playerLocation), - eyeLocation = ToCoordinate(eyeLocation), - location = ToCoordinate(blockLocation), - block = ToBlockState(block), - distance = playerLocation.Distance(targetCenter), - eyeDistance = eyeLocation.Distance(targetCenter), - neighbors - }); - }); - } - - public MccMcpResult PreviewPath(double x, double y, double z, bool allowUnsafe, int maxOffset, int minOffset, int timeoutMs, int maxWaypoints) - { - if (!IsCategoryEnabled(t => t.Movement)) - return MccMcpResult.Fail("capability_disabled"); - return ToMcpResult(game.PreviewPath(x, y, z, allowUnsafe, maxOffset, minOffset, timeoutMs, maxWaypoints)); - } - - public MccMcpResult GetPlayersList() - { - if (!IsCategoryEnabled(t => t.SessionStatus)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - return client.InvokeOnMainThread(() => MccMcpResult.Ok(new - { - players = client.GetOnlinePlayers() - })); - } - - public MccMcpResult GetPlayersDetailed(bool includeSelf, bool includeCoordinates) - { - if (!IsCategoryEnabled(t => t.SessionStatus)) - return MccMcpResult.Fail("capability_disabled"); - return ToMcpResult(game.GetPlayersDetailed(includeSelf, includeCoordinates)); - } - - public MccMcpResult GetPlayerStats() - { - if (!IsCategoryEnabled(t => t.SessionStatus)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - return client.InvokeOnMainThread(() => - { - Location location = client.GetCurrentLocation(); - return MccMcpResult.Ok(new - { - username = client.GetUsername(), - health = client.GetHealth(), - saturation = client.GetSaturation(), - level = client.GetLevel(), - totalExperience = client.GetTotalExperience(), - gamemode = client.GetGamemode(), - playerEntityId = client.GetPlayerEntityID(), - currentSlot = client.GetCurrentSlot() + 1, - yaw = client.GetYaw(), - pitch = client.GetPitch(), - location = ToCoordinate(location), - tps = client.GetServerTPS() - }); - }); - } - - public MccMcpResult GetStatusEffects() - { - if (!IsCategoryEnabled(t => t.SessionStatus)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - return client.InvokeOnMainThread(() => - { - var effects = client.GetPlayerEffects() - .Values - .Where(effect => !effect.IsExpired) - .OrderBy(effect => effect.Effect) - .Select(effect => new - { - id = effect.Effect.ToString(), - name = effect.GetDisplayName(), - amplifier = effect.Amplifier, - remainingSeconds = effect.RemainingSeconds, - isInfinite = effect.IsInfinite - }) - .ToArray(); - - return MccMcpResult.Ok(new - { - count = effects.Length, - effects - }); - }); - } - - public MccMcpResult GetRecentEvents(long afterId, int maxCount, string? typeFilter) - { - if (!IsCategoryEnabled(t => t.SessionStatus)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - return MccMcpResult.Ok(game.GetRecentEvents(afterId, maxCount, typeFilter)); - } - - public MccMcpResult GetLoadedBots() - { - if (!IsCategoryEnabled(t => t.SessionStatus)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - return client.InvokeOnMainThread(() => - { - var bots = client.GetLoadedChatBots() - .Select(bot => new - { - name = bot.GetType().Name, - fullTypeName = bot.GetType().FullName, - isScript = bot is MinecraftClient.ChatBots.Script - }) - .OrderBy(bot => bot.name, StringComparer.OrdinalIgnoreCase) - .ToArray(); - - return MccMcpResult.Ok(new - { - count = bots.Length, - bots - }); - }); - } - - public MccMcpResult GetChatHistory(int maxCount, bool includeJson) - { - if (!IsCategoryEnabled(t => t.SessionStatus)) - return MccMcpResult.Fail("capability_disabled"); - - if (GetClient() is null) - return NotConnected(); - - return MccMcpResult.Ok(game.GetChatHistory(maxCount, includeJson)); - } - - public MccMcpResult GetInternalCommands() - { - if (!IsCategoryEnabled(t => t.ChatAndCommands)) - return MccMcpResult.Fail("capability_disabled"); - - Type[] commandTypes = Program.GetTypesInNamespace("MinecraftClient.Commands"); - List commands = new(); - - foreach (Type type in commandTypes) - { - if (!type.IsSubclassOf(typeof(Command))) - continue; - - try - { - if (Activator.CreateInstance(type) is Command cmd) - { - commands.Add(new InternalCommandInfo - { - Name = cmd.CmdName, - Usage = cmd.CmdUsage, - Description = ChatBot.GetVerbatim(cmd.CmdDesc) - }); - } - } - catch - { - // ignore command constructors that fail for reflection-only list generation. - } - } - - InternalCommandInfo[] ordered = commands - .OrderBy(command => command.Name, StringComparer.OrdinalIgnoreCase) - .ToArray(); - - return MccMcpResult.Ok(new - { - count = ordered.Length, - commands = ordered.Select(command => new - { - name = command.Name, - usage = command.Usage, - description = command.Description - }).ToArray() - }); - } - - public MccMcpResult GetMaterialsList(string? filter, int maxCount) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - - int limit = Math.Clamp(maxCount, 1, 5000); - string? normalizedFilter = string.IsNullOrWhiteSpace(filter) ? null : filter.Trim(); - Material[] allMaterials = Enum.GetValues(); - var materials = allMaterials - .Select(material => new - { - name = material.ToString(), - typeLabel = GetMaterialTypeLabel(material) - }) - .Where(material => normalizedFilter is null - || TextMatchesFilter(material.name, normalizedFilter) - || TextMatchesFilter(material.typeLabel, normalizedFilter)) - .OrderBy(material => material.name, StringComparer.OrdinalIgnoreCase) - .Take(limit) - .ToArray(); - - return MccMcpResult.Ok(new - { - total = allMaterials.Length, - count = materials.Length, - filter = normalizedFilter, - materials - }); - } - - public MccMcpResult GetBlockTypesList(string? filter, int maxCount) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - - int limit = Math.Clamp(maxCount, 1, 5000); - string? normalizedFilter = string.IsNullOrWhiteSpace(filter) ? null : filter.Trim(); - Material[] allMaterials = Enum.GetValues(); - var blockTypes = allMaterials - .Select(material => new - { - name = material.ToString(), - typeLabel = GetMaterialTypeLabel(material) - }) - .Where(blockType => normalizedFilter is null - || TextMatchesFilter(blockType.name, normalizedFilter) - || TextMatchesFilter(blockType.typeLabel, normalizedFilter)) - .OrderBy(blockType => blockType.name, StringComparer.OrdinalIgnoreCase) - .Take(limit) - .ToArray(); - - return MccMcpResult.Ok(new - { - total = allMaterials.Length, - count = blockTypes.Length, - filter = normalizedFilter, - blockTypes - }); - } - - public MccMcpResult GetEntityTypesList(string? filter, int maxCount) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - - int limit = Math.Clamp(maxCount, 1, 5000); - string? normalizedFilter = string.IsNullOrWhiteSpace(filter) ? null : filter.Trim(); - EntityType[] allEntityTypes = Enum.GetValues(); - var entityTypes = allEntityTypes - .Select(entityType => new - { - name = entityType.ToString(), - typeLabel = Entity.GetTypeString(entityType) - }) - .Where(entityType => normalizedFilter is null - || TextMatchesFilter(entityType.name, normalizedFilter) - || TextMatchesFilter(entityType.typeLabel, normalizedFilter)) - .OrderBy(entityType => entityType.name, StringComparer.OrdinalIgnoreCase) - .Take(limit) - .ToArray(); - - return MccMcpResult.Ok(new - { - total = allEntityTypes.Length, - count = entityTypes.Length, - filter = normalizedFilter, - entityTypes - }); - } - - public MccMcpResult SendChat(string text) - { - if (!IsCategoryEnabled(t => t.ChatAndCommands)) - return MccMcpResult.Fail("capability_disabled"); - - if (string.IsNullOrWhiteSpace(text)) - return MccMcpResult.Fail("invalid_args"); - - string normalized = text.Trim(); - if (normalized.Equals("quit", StringComparison.OrdinalIgnoreCase) - || normalized.Equals("exit", StringComparison.OrdinalIgnoreCase)) - { - return MccMcpResult.Fail("internal_command_text_blocked"); - } - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - bool sent = client.InvokeOnMainThread(() => - { - client.SendText(normalized); - return true; - }); - - return sent ? MccMcpResult.Ok() : MccMcpResult.Fail("action_failed"); - } - - public MccMcpResult QuitClient() - { - if (!IsCategoryEnabled(t => t.ChatAndCommands)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - _ = Task.Run(async () => - { - await Task.Delay(150).ConfigureAwait(false); - Program.Exit(); - }); - - return MccMcpResult.Ok(new { quitting = true }); - } - - public MccMcpResult DisconnectClient() - { - if (!IsCategoryEnabled(t => t.ChatAndCommands)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - _ = Task.Run(async () => - { - await Task.Delay(150).ConfigureAwait(false); - client.Disconnect(); - }); - - return MccMcpResult.Ok(new { disconnecting = true }); - } - - public MccMcpResult Respawn() - { - if (!IsCategoryEnabled(t => t.ChatAndCommands)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - float health = client.InvokeOnMainThread(client.GetHealth); - if (health > 0) - { - return MccMcpResult.Fail("invalid_state", data: new - { - health - }); - } - - bool ok = client.InvokeOnMainThread(client.SendRespawnPacket); - return ok - ? MccMcpResult.Ok(new { success = true }) - : MccMcpResult.Fail("action_failed", data: new { success = false }); - } - - public MccMcpResult RunInternalCommand(string command) - { - if (!IsCategoryEnabled(t => t.ChatAndCommands)) - return MccMcpResult.Fail("capability_disabled"); - - if (string.IsNullOrWhiteSpace(command)) - return MccMcpResult.Fail("invalid_args"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - return ExecuteInternalCommand(client, command.Trim()); - } - - public MccMcpResult PlayAnimation(string hand) - { - if (!IsCategoryEnabled(t => t.Movement)) - return MccMcpResult.Fail("capability_disabled"); - - if (string.IsNullOrWhiteSpace(hand) || !Enum.TryParse(hand, true, out Hand parsedHand)) - return MccMcpResult.Fail("invalid_args"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - int animation = parsedHand == Hand.MainHand ? 1 : 0; - bool ok = client.DoAnimation(animation); - object resultData = new { success = ok, hand = parsedHand.ToString() }; - return ok - ? MccMcpResult.Ok(resultData) - : MccMcpResult.Fail("action_failed", data: resultData); - } - - public MccMcpResult ToggleSneak(bool enabled) - { - if (!IsCategoryEnabled(t => t.Movement)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - EntityActionType action = enabled ? EntityActionType.StartSneaking : EntityActionType.StopSneaking; - bool ok = client.InvokeOnMainThread(() => - { - bool actionResult = client.SendEntityAction(action); - if (actionResult) - client.IsSneaking = enabled; - return actionResult; - }); - - object resultData = new { success = ok, enabled }; - return ok - ? MccMcpResult.Ok(resultData) - : MccMcpResult.Fail("action_failed", data: resultData); - } - - public MccMcpResult ToggleSprint(bool enabled) - { - if (!IsCategoryEnabled(t => t.Movement)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - EntityActionType action = enabled ? EntityActionType.StartSprinting : EntityActionType.StopSprinting; - bool ok = client.SendEntityAction(action); - object resultData = new { success = ok, enabled }; - return ok - ? MccMcpResult.Ok(resultData) - : MccMcpResult.Fail("action_failed", data: resultData); - } - - public MccMcpResult UseItemOnHand() - { - if (!IsCategoryEnabled(t => t.Movement)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - bool ok = client.InvokeOnMainThread(() => client.UseItemOnHand()); - return MccMcpResult.Ok(new { success = ok }); - } - - public MccMcpResult ChangeHotbarSlot(int slot) - { - if (!IsCategoryEnabled(t => t.Inventory)) - return MccMcpResult.Fail("capability_disabled"); - - if (slot is < 1 or > 9) - return MccMcpResult.Fail("invalid_args"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetInventoryEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - bool ok = client.InvokeOnMainThread(() => client.ChangeSlot((short)(slot - 1))); - return MccMcpResult.Ok(new { success = ok, slot }); - } - - public MccMcpResult SelectHotbarItem(string itemType, bool preferLowestSlot) - { - if (!IsCategoryEnabled(t => t.Inventory)) - return MccMcpResult.Fail("capability_disabled"); - return ToMcpResult(game.SelectHotbarItem(itemType, preferLowestSlot)); - } - - public MccMcpResult UseItemOnBlock(double x, double y, double z) - { - if (!IsCategoryEnabled(t => t.Movement)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - string sx = x.ToString(CultureInfo.InvariantCulture); - string sy = y.ToString(CultureInfo.InvariantCulture); - string sz = z.ToString(CultureInfo.InvariantCulture); - return ExecuteInternalCommand(client, $"useitem {sx} {sy} {sz}"); - } - - public MccMcpResult DigBlock(double x, double y, double z, double durationSeconds) - { - if (!IsCategoryEnabled(t => t.Movement)) - return MccMcpResult.Fail("capability_disabled"); - - if (durationSeconds < 0) - { - return MccMcpResult.Fail("invalid_args", data: new - { - parameter = "durationSeconds", - min = 0 - }); - } - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - Location target = ToBlockLocation(x, y, z); - Location currentLocation = client.InvokeOnMainThread(client.GetCurrentLocation); - Location eyesLocation = currentLocation.EyesLocation(); - Location centeredTarget = target.ToCenter(); - Block beforeBlock = client.InvokeOnMainThread(() => client.GetWorld().GetBlock(target)); - if (beforeBlock.Type == Material.Air) - { - return MccMcpResult.Fail("invalid_state", data: new - { - target = ToCoordinate(target), - beforeBlock = ToBlockState(beforeBlock) - }); - } - - double distance = eyesLocation.Distance(centeredTarget); - if (distance > DigReachDistance) - { - return MccMcpResult.Fail("action_incomplete", data: new - { - reason = "too_far", - target = ToCoordinate(target), - playerLocation = ToCoordinate(currentLocation), - distance, - maxReach = DigReachDistance, - beforeBlock = ToBlockState(beforeBlock) - }); - } - - double[] attemptDurations = GetDigAttemptDurations(durationSeconds); - List attemptedDurations = new(); - Block afterBlock = beforeBlock; - bool changed = false; - bool commandAccepted = false; - - foreach (double attemptDuration in attemptDurations) - { - attemptedDurations.Add(attemptDuration); - bool accepted = client.InvokeOnMainThread(() => client.DigBlock(target, Direction.Down, duration: attemptDuration)); - commandAccepted |= accepted; - if (!accepted) - continue; - - if (WaitForBlockChange(client, target, beforeBlock, GetDigVerifyWaitMs(attemptDuration), out afterBlock)) - { - changed = true; - break; - } - } - - afterBlock = client.InvokeOnMainThread(() => client.GetWorld().GetBlock(target)); - object resultData = new - { - success = changed, - target = ToCoordinate(target), - beforeBlock = ToBlockState(beforeBlock), - afterBlock = ToBlockState(afterBlock), - commandAccepted, - changed, - destroyed = changed && afterBlock.Type == Material.Air, - attempts = attemptedDurations.Count, - attemptedDurationsSeconds = attemptedDurations.ToArray(), - distance, - playerLocation = ToCoordinate(currentLocation) - }; - - return changed - ? MccMcpResult.Ok(resultData) - : MccMcpResult.Fail("action_incomplete", data: resultData); - } - - public MccMcpResult PlaceBlock(int x, int y, int z, string face, string hand, bool lookAtBlock) - { - if (!IsCategoryEnabled(t => t.Movement)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - if (!Enum.TryParse(face, true, out Direction parsedFace)) - return MccMcpResult.Fail("invalid_args"); - - if (!Enum.TryParse(hand, true, out Hand parsedHand)) - return MccMcpResult.Fail("invalid_args"); - - Location location = new(x, y, z); - bool ok = client.InvokeOnMainThread(() => client.PlaceBlock(location, parsedFace, parsedHand, lookAtBlock)); - return MccMcpResult.Ok(new { success = ok, x, y, z, face = parsedFace.ToString(), hand = parsedHand.ToString(), lookAtBlock }); - } - - public MccMcpResult InteractEntity(int entityId, string interaction, string hand) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetEntityHandlingEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - if (!Enum.TryParse(interaction, true, out InteractType interactType)) - return MccMcpResult.Fail("invalid_args"); - - if (!Enum.TryParse(hand, true, out Hand parsedHand)) - return MccMcpResult.Fail("invalid_args"); - - bool ok = client.InvokeOnMainThread(() => client.InteractEntity(entityId, interactType, parsedHand)); - return MccMcpResult.Ok(new { success = ok, entityId, interaction = interactType.ToString(), hand = parsedHand.ToString() }); - } - - public MccMcpResult AttackEntity(int entityId) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetEntityHandlingEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - return client.InvokeOnMainThread(() => - { - if (!client.GetEntities().ContainsKey(entityId)) - return MccMcpResult.Fail("invalid_state", data: new { entityId }); - - bool ok = client.InteractEntity(entityId, InteractType.Attack); - object resultData = new - { - success = ok, - entityId, - interaction = InteractType.Attack.ToString() - }; - - return ok - ? MccMcpResult.Ok(resultData) - : MccMcpResult.Fail("action_failed", data: resultData); - }); - } - - public MccMcpResult ScanNearbyBlocks(int radius, int maxCount, string? materialFilter) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - - if (radius is < 1 or > MaxBlockScanRadius) - { - return MccMcpResult.Fail("invalid_args", data: new - { - parameter = "radius", - min = 1, - max = MaxBlockScanRadius - }); - } - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - int limit = Math.Clamp(maxCount, 1, 2000); - string? filter = string.IsNullOrWhiteSpace(materialFilter) ? null : materialFilter.Trim(); - - return client.InvokeOnMainThread(() => - { - Location playerLocation = client.GetCurrentLocation(); - int cx = (int)Math.Floor(playerLocation.X); - int cy = (int)Math.Floor(playerLocation.Y) - 1; - int cz = (int)Math.Floor(playerLocation.Z); - - List found = new(); - World world = client.GetWorld(); - for (int y = cy - radius; y <= cy + radius && found.Count < limit; y++) - { - for (int z = cz - radius; z <= cz + radius && found.Count < limit; z++) - { - for (int x = cx - radius; x <= cx + radius && found.Count < limit; x++) - { - Block block = world.GetBlock(new Location(x, y, z)); - if (block.Type == Material.Air) - continue; - - string material = block.Type.ToString(); - string typeLabel = block.GetTypeString(); - if (filter is not null - && !TextMatchesFilter(material, filter) - && !TextMatchesFilter(typeLabel, filter)) - { - continue; - } - - double dx = x + 0.5 - playerLocation.X; - double dy = y + 0.5 - playerLocation.Y; - double dz = z + 0.5 - playerLocation.Z; - found.Add(new - { - x, - y, - z, - material, - typeLabel, - blockId = block.BlockId, - blockMeta = block.BlockMeta, - stateId = block.StateId, - properties = block.GetStateProperties(), - distance = Math.Sqrt(dx * dx + dy * dy + dz * dz) - }); - } - } - } - - return MccMcpResult.Ok(new - { - center = new { x = cx, y = cy, z = cz }, - radius, - count = found.Count, - blocks = found.ToArray() - }); - }); - } - - public MccMcpResult FindBlocks(string? query, int radius, int maxCount, bool exactMatch) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - - if (radius is < 1 or > MaxBlockFindRadius) - { - return MccMcpResult.Fail("invalid_args", data: new - { - parameter = "radius", - min = 1, - max = MaxBlockFindRadius - }); - } - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - int limit = Math.Clamp(maxCount, 1, 5000); - string? filter = string.IsNullOrWhiteSpace(query) ? null : query.Trim(); - ParseBlockQuery(filter, out int? blockIdFilter, out int? blockMetaFilter); - - return client.InvokeOnMainThread(() => - { - Location playerLocation = client.GetCurrentLocation(); - int cx = (int)Math.Floor(playerLocation.X); - int cy = (int)Math.Floor(playerLocation.Y) - 1; - int cz = (int)Math.Floor(playerLocation.Z); - - List<(int x, int y, int z, string material, string typeLabel, int blockId, byte blockMeta, int stateId, IReadOnlyDictionary properties, double distance)> found = new(); - World world = client.GetWorld(); - - for (int y = cy - radius; y <= cy + radius && found.Count < limit; y++) - { - for (int z = cz - radius; z <= cz + radius && found.Count < limit; z++) - { - for (int x = cx - radius; x <= cx + radius && found.Count < limit; x++) - { - Block block = world.GetBlock(new Location(x, y, z)); - if (block.Type == Material.Air) - continue; - - if (!BlockMatches(block, filter, exactMatch, blockIdFilter, blockMetaFilter)) - continue; - - double dx = x + 0.5 - playerLocation.X; - double dy = y + 0.5 - playerLocation.Y; - double dz = z + 0.5 - playerLocation.Z; - - found.Add(( - x, - y, - z, - block.Type.ToString(), - block.GetTypeString(), - block.BlockId, - block.BlockMeta, - block.StateId, - block.GetStateProperties(), - Math.Sqrt(dx * dx + dy * dy + dz * dz))); - } - } - } - - return MccMcpResult.Ok(new - { - center = new { x = cx, y = cy, z = cz }, - radius, - query = filter, - exactMatch, - count = found.Count, - blocks = found - .OrderBy(entry => entry.distance) - .Select(entry => new - { - entry.x, - entry.y, - entry.z, - entry.material, - entry.typeLabel, - entry.blockId, - entry.blockMeta, - entry.stateId, - entry.properties, - entry.distance - }) - .ToArray() - }); - }); - } - - public MccMcpResult CanReachPosition(double x, double y, double z, bool allowUnsafe, int maxOffset, int minOffset, int timeoutMs) - { - if (!IsCategoryEnabled(t => t.Movement)) - return MccMcpResult.Fail("capability_disabled"); - - if (!AreValidPathOffsets(maxOffset, minOffset) || timeoutMs < 0) - { - return MccMcpResult.Fail("invalid_args", data: new - { - maxOffset, - minOffset, - timeoutMs - }); - } - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - Location goal = new(x, y, z); - Location startLocation = client.InvokeOnMainThread(client.GetCurrentLocation); - World world = client.InvokeOnMainThread(client.GetWorld); - int effectiveTimeoutMs = GetPathQueryTimeoutMs(timeoutMs); - Queue? path = Movement.CalculatePath( - world, - startLocation, - goal, - allowUnsafe, - maxOffset, - minOffset, - TimeSpan.FromMilliseconds(effectiveTimeoutMs)); - Location? finalWaypoint = path?.LastOrDefault(); - double? finalDistance = finalWaypoint is Location waypoint - ? GetDistance(waypoint, goal) - : null; - - return MccMcpResult.Ok(new - { - reachable = path is not null, - exactReachable = finalWaypoint is Location location && location.ToFloor() == goal.ToFloor(), - target = ToCoordinate(goal), - startLocation = ToCoordinate(startLocation), - finalWaypoint = finalWaypoint is Location finalLocation ? ToCoordinate(finalLocation) : null, - finalDistance, - waypointCount = path?.Count ?? 0, - allowUnsafe, - maxOffset, - minOffset, - timeoutMs = effectiveTimeoutMs - }); - } - - public MccMcpResult IsPlayerNearby(string? playerName, double radius, bool includeSelf) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - return ToMcpResult(game.IsPlayerNearby(playerName, radius, includeSelf)); - } - - public MccMcpResult LocatePlayer(string playerName, bool includeSelf) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - return ToMcpResult(game.LocatePlayer(playerName, includeSelf)); - } - - public MccMcpResult FindNearestEntity(string? typeFilter, string? nameFilter, double radius, bool includePlayers) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - return ToMcpResult(game.FindNearestEntity(typeFilter, nameFilter, radius, includePlayers)); - } - - public MccMcpResult MoveTo(double x, double y, double z, bool allowUnsafe, bool allowDirectTeleport, int maxOffset, int minOffset, int timeoutMs) - { - if (!IsCategoryEnabled(t => t.Movement)) - return MccMcpResult.Fail("capability_disabled"); - - if (!AreValidPathOffsets(maxOffset, minOffset) || timeoutMs < 0) - { - return MccMcpResult.Fail("invalid_args", data: new - { - maxOffset, - minOffset, - timeoutMs - }); - } - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - Location goal = new(x, y, z); - Location startLocation = client.InvokeOnMainThread(client.GetCurrentLocation); - TimeSpan? timeout = timeoutMs > 0 ? TimeSpan.FromMilliseconds(timeoutMs) : null; - bool pathFound = client.InvokeOnMainThread(() => client.MoveTo(goal, allowUnsafe, allowDirectTeleport, maxOffset, minOffset, timeout)); - - int verifyWaitMs = GetArrivalWaitMs(timeoutMs); - double tolerance = GetArrivalTolerance(maxOffset, minOffset); - Location? finalLocation = null; - bool arrived = pathFound && WaitForArrival(client, goal, verifyWaitMs, tolerance, out finalLocation); - finalLocation ??= client.InvokeOnMainThread(client.GetCurrentLocation); - object resultData = new - { - pathFound, - arrived, - tolerance, - verifyWaitMs, - target = ToCoordinate(goal), - startLocation = ToCoordinate(startLocation), - finalLocation = ToCoordinate(finalLocation.Value), - finalDistance = GetDistance(finalLocation.Value, goal), - distanceMoved = GetDistance(startLocation, finalLocation.Value), - allowUnsafe, - allowDirectTeleport, - maxOffset, - minOffset, - timeoutMs - }; - - return pathFound && arrived - ? MccMcpResult.Ok(resultData) - : MccMcpResult.Fail("action_incomplete", data: resultData); - } - - public MccMcpResult MoveToPlayer(string playerName, bool allowUnsafe, bool allowDirectTeleport, int maxOffset, int minOffset, int timeoutMs) - { - if (!IsCategoryEnabled(t => t.Movement)) - return MccMcpResult.Fail("capability_disabled"); - return ToMcpResult(game.MoveToPlayer(playerName, allowUnsafe, allowDirectTeleport, maxOffset, minOffset, timeoutMs)); - } - - public MccMcpResult LookAt(double x, double y, double z) - { - if (!IsCategoryEnabled(t => t.Movement)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - return client.InvokeOnMainThread(() => - { - Location current = client.GetCurrentLocation(); - Location target = new(x, y, z); - client.UpdateLocation(current, target); - bool success = client.SendLocationUpdate(); - return success - ? MccMcpResult.Ok(new - { - success, - yaw = client.GetYaw(), - pitch = client.GetPitch(), - location = ToCoordinate(current), - target = ToCoordinate(target) - }) - : MccMcpResult.Fail("action_failed", data: new - { - success, - target = ToCoordinate(target) - }); - }); - } - - public MccMcpResult LookDirection(string direction) - { - if (!IsCategoryEnabled(t => t.Movement)) - return MccMcpResult.Fail("capability_disabled"); - - if (string.IsNullOrWhiteSpace(direction) || !Enum.TryParse(direction, true, out Direction parsedDirection) || !IsSupportedLookDirection(parsedDirection)) - return MccMcpResult.Fail("invalid_args"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - return client.InvokeOnMainThread(() => - { - Location current = client.GetCurrentLocation(); - client.UpdateLocation(current, parsedDirection); - bool success = client.SendLocationUpdate(); - return success - ? MccMcpResult.Ok(new - { - success, - direction = parsedDirection.ToString(), - yaw = client.GetYaw(), - pitch = client.GetPitch(), - location = ToCoordinate(current) - }) - : MccMcpResult.Fail("action_failed", data: new - { - success, - direction = parsedDirection.ToString() - }); - }); - } - - public MccMcpResult LookAngles(float yaw, float pitch) - { - if (!IsCategoryEnabled(t => t.Movement)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - return client.InvokeOnMainThread(() => - { - Location current = client.GetCurrentLocation(); - client.UpdateLocation(current, yaw, pitch); - bool success = client.SendLocationUpdate(); - return success - ? MccMcpResult.Ok(new - { - success, - yaw = client.GetYaw(), - pitch = client.GetPitch(), - location = ToCoordinate(current) - }) - : MccMcpResult.Fail("action_failed", data: new - { - success, - yaw, - pitch, - location = ToCoordinate(current) - }); - }); - } - - public MccMcpResult GetInventorySnapshot(int inventoryId) - { - if (!IsCategoryEnabled(t => t.Inventory)) - return MccMcpResult.Fail("capability_disabled"); - return ToMcpResult(game.GetInventorySnapshot(inventoryId)); - } - - public MccMcpResult SearchInventories(string query, int maxCount, bool exactMatch, bool includeContainers) - { - if (!IsCategoryEnabled(t => t.Inventory)) - return MccMcpResult.Fail("capability_disabled"); - return ToMcpResult(game.SearchInventories(query, maxCount, exactMatch, includeContainers)); - } - - public MccMcpResult ListInventories() - { - if (!IsCategoryEnabled(t => t.Inventory)) - return MccMcpResult.Fail("capability_disabled"); - return ToMcpResult(game.ListInventories()); - } - - public MccMcpResult OpenContainerAt(int x, int y, int z, int timeoutMs, bool closeCurrent) - { - if (!IsCategoryEnabled(t => t.Inventory)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetInventoryEnabled() || !client.GetTerrainEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - Location location = new(x, y, z); - int waitMs = GetContainerWaitMs(timeoutMs); - (Block block, int activeContainerId) state = client.InvokeOnMainThread(() => - { - Block block = client.GetWorld().GetBlock(location); - return (block, GetActiveContainerId(client)); - }); - - if (!IsInteractableContainerMaterial(state.block.Type)) - { - return MccMcpResult.Fail("invalid_state", data: new - { - x, - y, - z, - block = ToBlockState(state.block), - activeContainerId = state.activeContainerId - }); - } - - return OpenContainerCore(client, location, state.block, state.activeContainerId, waitMs, closeCurrent); - } - - public MccMcpResult CloseContainer(int inventoryId, int timeoutMs) - { - if (!IsCategoryEnabled(t => t.Inventory)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetInventoryEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - int waitMs = GetContainerWaitMs(timeoutMs); - int resolvedInventoryId = client.InvokeOnMainThread(() => ResolveContainerInventoryId(client, inventoryId)); - if (resolvedInventoryId <= 0) - { - if (inventoryId < 0) - { - return MccMcpResult.Ok(new - { - success = true, - closed = false - }); - } - - return MccMcpResult.Fail("invalid_state", data: new { inventoryId }); - } - - bool closeAccepted = client.CloseInventory(resolvedInventoryId); - bool closed = closeAccepted && WaitForContainerClose(client, resolvedInventoryId, waitMs); - var resultData = new - { - success = closeAccepted && closed, - closeAccepted, - closed, - inventoryId = resolvedInventoryId, - timeoutMs = waitMs - }; - - return closeAccepted && closed - ? MccMcpResult.Ok(resultData) - : MccMcpResult.Fail("action_incomplete", data: resultData); - } - - public MccMcpResult InventoryWindowAction(int inventoryId, int slotId, string actionType) - { - if (!IsCategoryEnabled(t => t.Inventory)) - return MccMcpResult.Fail("capability_disabled"); - - if (string.IsNullOrWhiteSpace(actionType)) - return MccMcpResult.Fail("invalid_args"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetInventoryEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - if (!TryParseWindowAction(actionType, out WindowActionType parsedAction)) - return MccMcpResult.Fail("invalid_args"); - - bool ok = client.InvokeOnMainThread(() => client.DoWindowAction(inventoryId, slotId, parsedAction)); - return MccMcpResult.Ok(new { success = ok, normalizedActionType = parsedAction.ToString() }); - } - - public MccMcpResult DropInventoryItem(string itemType, int count, int inventoryId, bool preferStack) - { - if (!IsCategoryEnabled(t => t.Inventory)) - return MccMcpResult.Fail("capability_disabled"); - - if (string.IsNullOrWhiteSpace(itemType) || count <= 0) - return MccMcpResult.Fail("invalid_args"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetInventoryEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - if (!TryParseItemType(itemType, out ItemType parsedItemType)) - { - return MccMcpResult.Fail("invalid_args", data: new - { - itemType = itemType.Trim() - }); - } - - return client.InvokeOnMainThread(() => - { - Dictionary inventories = client.GetInventories(); - if (!inventories.TryGetValue(inventoryId, out Container? inventory)) - return MccMcpResult.Fail("invalid_state"); - - int cursorCount = GetCursorItemCount(inventory, parsedItemType); - var matchingSlotQuery = inventory.Items - .Where(pair => IsDroppableInventorySlot(inventory, pair.Key)) - .Where(pair => pair.Value.Type == parsedItemType && pair.Value.Count > 0) - .Select(pair => new - { - slot = pair.Key, - count = pair.Value.Count, - hotbarPriority = inventoryId == 0 && IsHotbarSlot(inventory, pair.Key) ? 0 : 1 - }); - var matchingSlots = (preferStack - ? matchingSlotQuery.OrderBy(pair => pair.hotbarPriority).ThenByDescending(pair => pair.count).ThenBy(pair => pair.slot) - : matchingSlotQuery.OrderBy(pair => pair.hotbarPriority).ThenBy(pair => pair.count).ThenBy(pair => pair.slot)) - .ToArray(); - - int beforeCount = matchingSlots.Sum(pair => pair.count); - if (beforeCount < count) - { - return MccMcpResult.Fail("invalid_state", data: new - { - itemType = parsedItemType.ToString(), - requestedCount = count, - availableCount = beforeCount, - cursorCount, - inventoryId - }); - } - - int remaining = count; - List touchedSlots = new(); - - foreach (var entry in matchingSlots) - { - if (remaining <= 0) - break; - - if (!inventory.Items.TryGetValue(entry.slot, out Item? currentItem) || currentItem.Count <= 0) - continue; - - int dropFromSlot = Math.Min(remaining, currentItem.Count); - touchedSlots.Add(entry.slot); - bool ok = TryDropInventorySlotItems(client, inventoryId, inventory, entry.slot, parsedItemType, dropFromSlot, out int droppedFromSlot); - - if (!ok) - { - Container? failedInventory = client.GetInventory(inventoryId); - int currentCount = failedInventory is null - ? 0 - : failedInventory.Items - .Where(pair => IsDroppableInventorySlot(failedInventory, pair.Key)) - .Where(pair => pair.Value.Type == parsedItemType) - .Sum(pair => pair.Value.Count); - return MccMcpResult.Fail("action_failed", data: new - { - itemType = parsedItemType.ToString(), - requestedCount = count, - droppedCount = count - remaining + droppedFromSlot, - remainingCount = remaining, - currentCount, - inventoryId, - touchedSlots = touchedSlots.ToArray() - }); - } - - remaining -= droppedFromSlot; - } - - Container? finalInventory = client.GetInventory(inventoryId); - int afterCount = finalInventory is null - ? 0 - : finalInventory.Items - .Where(pair => IsDroppableInventorySlot(finalInventory, pair.Key)) - .Where(pair => pair.Value.Type == parsedItemType) - .Sum(pair => pair.Value.Count); - int droppedCount = beforeCount - afterCount; - - if (remaining > 0) - { - return MccMcpResult.Fail("action_failed", data: new - { - itemType = parsedItemType.ToString(), - requestedCount = count, - droppedCount, - remainingCount = remaining, - beforeCount, - afterCount, - inventoryId, - touchedSlots = touchedSlots.ToArray() - }); - } - - return MccMcpResult.Ok(new - { - success = true, - itemType = parsedItemType.ToString(), - requestedCount = count, - droppedCount, - beforeCount, - afterCount, - inventoryId, - touchedSlots = touchedSlots.ToArray() - }); - }); - } - - public MccMcpResult DepositContainerItem(string itemType, int count, int inventoryId, bool preferLargestStack) - { - return TransferContainerItem(itemType, count, inventoryId, preferLargestStack, InventoryTransferDirection.Deposit); - } - - public MccMcpResult WithdrawContainerItem(string itemType, int count, int inventoryId, bool preferLargestStack) - { - return TransferContainerItem(itemType, count, inventoryId, preferLargestStack, InventoryTransferDirection.Withdraw); - } - - public MccMcpResult QueryEntities(int maxCount) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - return ToMcpResult(game.QueryEntities(maxCount)); - } - - public MccMcpResult ListEntities(int maxCount, string? typeFilter, double radius) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - return ToMcpResult(game.ListEntities(maxCount, typeFilter, radius)); - } - - public MccMcpResult GetEntityInfo(int entityId, bool includeMetadata, bool includeEquipment, bool includeEffects) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - return ToMcpResult(game.GetEntityInfo(entityId, includeMetadata, includeEquipment, includeEffects)); - } - - public MccMcpResult FindSigns(string text, bool exactMatch, int radius, int maxCount, bool includeBackText) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - - if (string.IsNullOrWhiteSpace(text) || radius is < 1 or > MaxBlockFindRadius) - return MccMcpResult.Fail("invalid_args"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - string filter = text.Trim(); - int limit = Math.Clamp(maxCount, 1, 500); - - return client.InvokeOnMainThread(() => - { - Location playerLocation = client.GetCurrentLocation(); - World world = client.GetWorld(); - var signs = client.GetKnownSigns() - .Select(sign => - { - double dx = sign.location.X + 0.5 - playerLocation.X; - double dy = sign.location.Y + 0.5 - playerLocation.Y; - double dz = sign.location.Z + 0.5 - playerLocation.Z; - return new - { - sign, - distance = Math.Sqrt(dx * dx + dy * dy + dz * dz) - }; - }) - .Where(entry => entry.distance <= radius) - .Where(entry => IsSignMaterial(world.GetBlock(entry.sign.location).Type)) - .Select(entry => - { - string[] frontText = entry.sign.frontText.Where(line => !string.IsNullOrWhiteSpace(line)).ToArray(); - string[] backText = includeBackText - ? entry.sign.backText.Where(line => !string.IsNullOrWhiteSpace(line)).ToArray() - : []; - string[] matchedLines = frontText - .Concat(backText) - .Where(line => exactMatch ? TextEqualsFilter(line, filter) : TextMatchesFilter(line, filter)) - .Distinct(NameComparer) - .ToArray(); - - return new - { - entry.sign, - entry.distance, - frontText, - backText, - matchedLines - }; - }) - .Where(entry => entry.matchedLines.Length > 0) - .OrderBy(entry => entry.distance) - .Take(limit) - .Select(entry => new - { - x = (int)Math.Floor(entry.sign.location.X), - y = (int)Math.Floor(entry.sign.location.Y), - z = (int)Math.Floor(entry.sign.location.Z), - material = entry.sign.material, - typeLabel = entry.sign.typeLabel, - distance = entry.distance, - isWaxed = entry.sign.isWaxed, - frontText = entry.frontText, - backText = entry.backText, - matchedLines = entry.matchedLines - }) - .ToArray(); - - return MccMcpResult.Ok(new - { - text = filter, - exactMatch, - radius, - includeBackText, - count = signs.Length, - signs - }); - }); - } - - public MccMcpResult ListItemEntities(string? itemType, double radius, int maxCount) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - return ToMcpResult(game.ListItemEntities(itemType, radius, maxCount)); - } - - public MccMcpResult PickupItems(string itemType, double radius, int maxItems, bool allowUnsafe, int timeoutMs) - { - if (!IsCategoryEnabled(t => t.EntityWorld) || !IsCategoryEnabled(t => t.Movement)) - return MccMcpResult.Fail("capability_disabled"); - return ToMcpResult(game.PickupItems(itemType, radius, maxItems, allowUnsafe, timeoutMs)); - } - - public MccMcpResult GetWorldBlockAt(int x, int y, int z) - { - if (!IsCategoryEnabled(t => t.EntityWorld)) - return MccMcpResult.Fail("capability_disabled"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - return client.InvokeOnMainThread(() => - { - Location location = new(x, y, z); - Block block = client.GetWorld().GetBlock(location); - return MccMcpResult.Ok(new - { - x, - y, - z, - material = block.Type.ToString(), - blockId = block.BlockId, - blockMeta = block.BlockMeta, - stateId = block.StateId, - properties = block.GetStateProperties() - }); - }); - } - - private static MccMcpResult OpenContainerCore(McClient client, Location location, Block block, int activeContainerId, int waitMs, bool closeCurrent) - { - if (activeContainerId > 0) - { - if (!closeCurrent) - { - return MccMcpResult.Fail("invalid_state", data: new - { - reason = "container_already_open", - activeContainerId, - x = location.X, - y = location.Y, - z = location.Z, - block = ToBlockState(block) - }); - } - - bool closeAccepted = client.CloseInventory(activeContainerId); - bool closed = closeAccepted && WaitForContainerClose(client, activeContainerId, waitMs); - if (!closeAccepted || !closed) - { - return MccMcpResult.Fail("action_incomplete", data: new - { - action = "close_previous_container", - activeContainerId, - closeAccepted, - closed, - timeoutMs = waitMs - }); - } - } - - HashSet beforeIds = client.InvokeOnMainThread(() => client.GetInventories().Keys.Where(id => id > 0).ToHashSet()); - int openedInventoryId = 0; - Container? openedInventory = null; - bool openAccepted = client.InvokeOnMainThread(() => client.PlaceBlock(location, Direction.Down, Hand.MainHand, lookAtBlock: true)); - bool opened = openAccepted && WaitForContainerOpen(client, beforeIds, waitMs, out openedInventoryId, out openedInventory); - var resultData = new - { - success = openAccepted && opened && openedInventory is not null, - openAccepted, - opened, - timeoutMs = waitMs, - x = location.X, - y = location.Y, - z = location.Z, - block = ToBlockState(block), - inventory = openedInventory is null - ? null - : new - { - id = openedInventoryId, - type = openedInventory.Type.ToString(), - title = openedInventory.Title, - slotCount = openedInventory.Type.SlotCount(), - nonEmptySlots = openedInventory.Items.Count - } - }; - - return openAccepted && opened && openedInventory is not null - ? MccMcpResult.Ok(resultData) - : MccMcpResult.Fail("action_incomplete", data: resultData); - } - - private MccMcpResult TransferContainerItem(string itemType, int count, int inventoryId, bool preferLargestStack, InventoryTransferDirection direction) - { - if (!IsCategoryEnabled(t => t.Inventory)) - return MccMcpResult.Fail("capability_disabled"); - - if (string.IsNullOrWhiteSpace(itemType) || count <= 0) - return MccMcpResult.Fail("invalid_args"); - - McClient? client = GetClient(); - if (client is null) - return NotConnected(); - - if (!client.GetInventoryEnabled()) - return MccMcpResult.Fail("feature_disabled"); - - if (!TryParseItemType(itemType, out ItemType parsedItemType)) - { - return MccMcpResult.Fail("invalid_args", data: new - { - itemType = itemType.Trim() - }); - } - - if (TryGetCursorItem(client, out Item? cursorItem)) - { - return MccMcpResult.Fail("invalid_state", data: new - { - reason = "cursor_item_present", - cursor = new { type = cursorItem!.Type.ToString(), count = cursorItem.Count } - }); - } - - int resolvedInventoryId = client.InvokeOnMainThread(() => ResolveContainerInventoryId(client, inventoryId)); - if (resolvedInventoryId <= 0) - { - return MccMcpResult.Fail("invalid_state", data: new - { - inventoryId - }); - } - - Container? initialInventory = client.InvokeOnMainThread(() => client.GetInventory(resolvedInventoryId)); - if (initialInventory is null) - return MccMcpResult.Fail("invalid_state", data: new { inventoryId = resolvedInventoryId }); - - if (!TryGetContainerSlotRanges(initialInventory.Type, out int containerStart, out int containerEnd, out int playerStart, out int playerEnd)) - { - return MccMcpResult.Fail("invalid_state", data: new - { - reason = "unsupported_container_type", - inventoryId = resolvedInventoryId, - type = initialInventory.Type.ToString() - }); - } - - int sourceStart = direction == InventoryTransferDirection.Deposit ? playerStart : containerStart; - int sourceEnd = direction == InventoryTransferDirection.Deposit ? playerEnd : containerEnd; - int targetStart = direction == InventoryTransferDirection.Deposit ? containerStart : playerStart; - int targetEnd = direction == InventoryTransferDirection.Deposit ? containerEnd : playerEnd; - - int beforePlayerCount = CountItemInRange(initialInventory, parsedItemType, playerStart, playerEnd); - int beforeContainerCount = CountItemInRange(initialInventory, parsedItemType, containerStart, containerEnd); - int availableCount = CountItemInRange(initialInventory, parsedItemType, sourceStart, sourceEnd); - if (availableCount < count) - { - return MccMcpResult.Fail("invalid_state", data: new - { - itemType = parsedItemType.ToString(), - requestedCount = count, - availableCount, - inventoryId = resolvedInventoryId, - direction = direction.ToString() - }); - } - - int remaining = count; - List touchedSourceSlots = new(); - List touchedTargetSlots = new(); - - while (remaining > 0) - { - Container? inventory = client.InvokeOnMainThread(() => client.GetInventory(resolvedInventoryId)); - if (inventory is null) - return MccMcpResult.Fail("invalid_state", data: new { inventoryId = resolvedInventoryId }); - - if (TryGetCursorItem(client, out cursorItem)) - { - return MccMcpResult.Fail("invalid_state", data: new - { - reason = "cursor_item_present_mid_transfer", - cursor = new { type = cursorItem!.Type.ToString(), count = cursorItem.Count } - }); - } - - var sourceSlots = GetOrderedItemSlots(inventory, parsedItemType, sourceStart, sourceEnd, preferLargestStack); - if (sourceSlots.Length == 0) - break; - - int beforeSourceCount = CountItemInRange(inventory, parsedItemType, sourceStart, sourceEnd); - int beforeTargetCount = CountItemInRange(inventory, parsedItemType, targetStart, targetEnd); - (int slot, int sourceCount) = sourceSlots[0]; - touchedSourceSlots.Add(slot); - - int movedCount; - List usedTargetSlots = new(); - if (sourceCount <= remaining || direction == InventoryTransferDirection.Withdraw) - { - if (!client.DoWindowAction(resolvedInventoryId, slot, WindowActionType.ShiftClick)) - { - return MccMcpResult.Fail("action_failed", data: new - { - itemType = parsedItemType.ToString(), - requestedCount = count, - remainingCount = remaining, - inventoryId = resolvedInventoryId, - sourceSlot = slot, - direction = direction.ToString() - }); - } - - if (direction == InventoryTransferDirection.Withdraw) - { - if (!WaitForRangeCount(client, resolvedInventoryId, parsedItemType, sourceStart, sourceEnd, countAfterShift => countAfterShift < beforeSourceCount, DefaultInventoryActionWaitMs, out Container? afterShift, out int afterSourceCount)) - { - afterShift = client.InvokeOnMainThread(() => client.GetInventory(resolvedInventoryId)); - afterSourceCount = afterShift is null ? beforeSourceCount : CountItemInRange(afterShift, parsedItemType, sourceStart, sourceEnd); - } - - movedCount = beforeSourceCount - afterSourceCount; - } - else - { - if (!WaitForRangeCount(client, resolvedInventoryId, parsedItemType, targetStart, targetEnd, countAfterShift => countAfterShift > beforeTargetCount, DefaultInventoryActionWaitMs, out Container? afterShift, out int afterTargetCount)) - { - afterShift = client.InvokeOnMainThread(() => client.GetInventory(resolvedInventoryId)); - afterTargetCount = afterShift is null ? beforeTargetCount : CountItemInRange(afterShift, parsedItemType, targetStart, targetEnd); - } - - movedCount = afterTargetCount - beforeTargetCount; - } - - if (direction == InventoryTransferDirection.Withdraw && movedCount > remaining) - { - int excessCount = movedCount - remaining; - MccMcpResult returnExcess = TransferContainerItem(parsedItemType.ToString(), excessCount, resolvedInventoryId, preferLargestStack, InventoryTransferDirection.Deposit); - if (!returnExcess.Success) - { - return MccMcpResult.Fail("action_incomplete", data: new - { - itemType = parsedItemType.ToString(), - requestedCount = count, - remainingCount = remaining, - inventoryId = resolvedInventoryId, - sourceSlot = slot, - direction = direction.ToString(), - excessCount, - returnExcess - }); - } - - movedCount -= excessCount; - } - } - else - { - movedCount = TransferPartialFromSlot( - client, - resolvedInventoryId, - slot, - parsedItemType, - remaining, - sourceStart, - sourceEnd, - targetStart, - targetEnd, - usedTargetSlots); - } - - if (movedCount <= 0) - { - Container? afterFailure = client.InvokeOnMainThread(() => client.GetInventory(resolvedInventoryId)); - return MccMcpResult.Fail("action_incomplete", data: new - { - itemType = parsedItemType.ToString(), - requestedCount = count, - remainingCount = remaining, - inventoryId = resolvedInventoryId, - sourceSlot = slot, - direction = direction.ToString(), - playerCount = afterFailure is null ? 0 : CountItemInRange(afterFailure, parsedItemType, playerStart, playerEnd), - containerCount = afterFailure is null ? 0 : CountItemInRange(afterFailure, parsedItemType, containerStart, containerEnd) - }); - } - - remaining -= movedCount; - touchedTargetSlots.AddRange(usedTargetSlots); - } - - Container? finalInventory = client.InvokeOnMainThread(() => client.GetInventory(resolvedInventoryId)); - if (finalInventory is null) - return MccMcpResult.Fail("invalid_state", data: new { inventoryId = resolvedInventoryId }); - - int afterPlayerCount = CountItemInRange(finalInventory, parsedItemType, playerStart, playerEnd); - int afterContainerCount = CountItemInRange(finalInventory, parsedItemType, containerStart, containerEnd); - int playerDelta = afterPlayerCount - beforePlayerCount; - int containerDelta = afterContainerCount - beforeContainerCount; - int movedTotal = direction == InventoryTransferDirection.Deposit - ? afterContainerCount - beforeContainerCount - : beforeContainerCount - afterContainerCount; - bool countsVerified = direction == InventoryTransferDirection.Deposit - ? containerDelta == count - : containerDelta == -count; - bool playerCountsMatchExpected = direction == InventoryTransferDirection.Deposit - ? playerDelta == -count - : playerDelta == count; - bool succeeded = remaining == 0 && countsVerified; - var resultData = new - { - success = succeeded, - direction = direction.ToString().ToLowerInvariant(), - itemType = parsedItemType.ToString(), - requestedCount = count, - movedCount = movedTotal, - beforePlayerCount, - afterPlayerCount, - beforeContainerCount, - afterContainerCount, - playerDelta, - containerDelta, - playerCountsMatchExpected, - verificationBasis = "container_delta", - inventoryId = resolvedInventoryId, - containerType = finalInventory.Type.ToString(), - touchedSourceSlots = touchedSourceSlots.Distinct().OrderBy(slot => slot).ToArray(), - touchedTargetSlots = touchedTargetSlots.Distinct().OrderBy(slot => slot).ToArray() - }; - - return succeeded - ? MccMcpResult.Ok(resultData) - : MccMcpResult.Fail("action_incomplete", data: resultData); - } - - private static MccMcpResult ExecuteInternalCommand(McClient client, string command) - { - return client.InvokeOnMainThread(() => - { - CmdResult result = new(); - bool ok = client.PerformInternalCommand(command, ref result); - return MccMcpResult.Ok(new - { - success = ok, - status = result.status.ToString(), - output = result.ToString() - }); - }); - } - - private static bool TryGetCursorItem(McClient client, out Item? cursorItem) - { - cursorItem = client.InvokeOnMainThread(() => - { - Container? playerInventory = client.GetInventory(0); - return playerInventory is not null && playerInventory.Items.TryGetValue(-1, out Item? item) ? item : null; - }); - return cursorItem is not null; - } - - private static int ResolveContainerInventoryId(McClient client, int inventoryId) - { - if (inventoryId > 0) - { - Container? inventory = client.GetInventory(inventoryId); - return inventory is not null && inventoryId != 0 ? inventoryId : 0; - } - - return GetActiveContainerId(client); - } - - private static int GetActiveContainerId(McClient client) - { - return client.GetInventories().Keys.Where(id => id > 0).DefaultIfEmpty(0).Max(); - } - - private static bool WaitForContainerOpen(McClient client, ISet beforeIds, int waitMs, out int inventoryId, out Container? inventory) - { - inventoryId = 0; - inventory = null; - DateTime deadline = DateTime.UtcNow.AddMilliseconds(waitMs); - while (true) - { - (int activeId, Container? activeInventory) state = client.InvokeOnMainThread(() => - { - int activeId = GetActiveContainerId(client); - Container? activeInventory = activeId > 0 ? client.GetInventory(activeId) : null; - return (activeId, activeInventory); - }); - - if (state.activeId > 0 && (!beforeIds.Contains(state.activeId) || beforeIds.Count == 0) && state.activeInventory is not null) - { - inventoryId = state.activeId; - inventory = state.activeInventory; - return true; - } - - if (DateTime.UtcNow >= deadline) - return false; - - Thread.Sleep(ArrivalPollIntervalMs); - } - } - - private static bool WaitForContainerClose(McClient client, int inventoryId, int waitMs) - { - DateTime deadline = DateTime.UtcNow.AddMilliseconds(waitMs); - while (true) - { - bool stillOpen = client.InvokeOnMainThread(() => client.GetInventories().ContainsKey(inventoryId)); - if (!stillOpen) - return true; - - if (DateTime.UtcNow >= deadline) - return false; - - Thread.Sleep(ArrivalPollIntervalMs); - } - } - - private static int GetContainerWaitMs(int timeoutMs) - { - if (timeoutMs <= 0) - return DefaultContainerWaitMs; - return Math.Clamp(timeoutMs, MinContainerWaitMs, MaxContainerWaitMs); - } - - private static bool TryGetContainerSlotRanges(ContainerType type, out int containerStart, out int containerEnd, out int playerStart, out int playerEnd) - { - containerStart = 0; - containerEnd = -1; - playerStart = 0; - playerEnd = -1; - - int containerSlots = type switch - { - ContainerType.Generic_9x1 => 9, - ContainerType.Generic_9x2 => 18, - ContainerType.Generic_9x3 => 27, - ContainerType.Generic_9x4 => 36, - ContainerType.Generic_9x5 => 45, - ContainerType.Generic_9x6 => 54, - ContainerType.Generic_3x3 => 9, - ContainerType.Hopper => 5, - ContainerType.ShulkerBox => 27, - ContainerType.Furnace or ContainerType.BlastFurnace or ContainerType.Smoker => 3, - ContainerType.Crafter => 9, - _ => -1 - }; - - if (containerSlots <= 0) - return false; - - int slotCount = type.SlotCount(); - if (slotCount <= containerSlots) - return false; - - containerEnd = containerSlots - 1; - playerStart = containerSlots; - playerEnd = slotCount - 1; - return true; - } - - private static bool IsSnapshotInventorySlot(Container inventory, int slotId) - { - return slotId >= 0 && slotId < inventory.Type.SlotCount(); - } - - private static bool IsDroppableInventorySlot(Container inventory, int slotId) - { - if (!IsSnapshotInventorySlot(inventory, slotId)) - return false; - - return !(slotId == 0 && (inventory.Type == ContainerType.PlayerInventory || inventory.Type == ContainerType.Crafting)); - } - - private static bool IsHotbarSlot(Container inventory, int slotId) - { - return inventory.IsHotbar(slotId, out _); - } - - private static object? TryBuildCursorSnapshot(Container inventory) - { - return inventory.Items.TryGetValue(-1, out Item? cursorItem) && cursorItem.Count > 0 - ? new - { - type = cursorItem.Type.ToString(), - count = cursorItem.Count - } - : null; - } - - private static int GetCursorItemCount(Container inventory, ItemType itemType) - { - return inventory.Items.TryGetValue(-1, out Item? cursorItem) && cursorItem.Type == itemType - ? cursorItem.Count - : 0; - } - - private static bool TryDropInventorySlotItems(McClient client, int inventoryId, Container inventory, int slotId, ItemType itemType, int dropCount, out int droppedCount) - { - droppedCount = 0; - if (!inventory.Items.TryGetValue(slotId, out Item? currentItem) || currentItem.Type != itemType || currentItem.Count <= 0) - return false; - - if (inventoryId == 0 && inventory.IsHotbar(slotId, out int hotbarSlot)) - { - return TryDropHotbarSlotItems(client, slotId, hotbarSlot, itemType, dropCount, currentItem.Count, out droppedCount); - } - - return TryDropWindowSlotItems(client, inventoryId, slotId, itemType, dropCount, currentItem.Count, out droppedCount); - } - - private static int CountItemInRange(Container inventory, ItemType itemType, int startSlot, int endSlot) - { - return inventory.Items - .Where(entry => entry.Key >= startSlot && entry.Key <= endSlot) - .Where(entry => entry.Value.Type == itemType) - .Sum(entry => entry.Value.Count); - } - - private static (int slot, int count)[] GetOrderedItemSlots(Container inventory, ItemType itemType, int startSlot, int endSlot, bool preferLargestStack) - { - var query = inventory.Items - .Where(entry => entry.Key >= startSlot && entry.Key <= endSlot) - .Where(entry => entry.Value.Type == itemType && entry.Value.Count > 0) - .Select(entry => (slot: entry.Key, count: entry.Value.Count)); - - return (preferLargestStack - ? query.OrderByDescending(entry => entry.count).ThenBy(entry => entry.slot) - : query.OrderBy(entry => entry.count).ThenBy(entry => entry.slot)) - .ToArray(); - } - - private static int TransferPartialFromSlot(McClient client, int inventoryId, int sourceSlot, ItemType itemType, int requestedCount, int sourceStart, int sourceEnd, int targetStart, int targetEnd, List touchedTargetSlots) - { - Container? inventory = client.InvokeOnMainThread(() => client.GetInventory(inventoryId)); - if (inventory is null || !inventory.Items.TryGetValue(sourceSlot, out Item? sourceItem) || sourceItem.Count <= 0) - return 0; - - int amountToMove = Math.Min(requestedCount, sourceItem.Count); - if (!client.DoWindowAction(inventoryId, sourceSlot, WindowActionType.LeftClick)) - return 0; - - if (!WaitForCursorItem(client, itemType, DefaultInventoryActionWaitMs, out _)) - return 0; - - int moved = 0; - while (moved < amountToMove) - { - inventory = client.InvokeOnMainThread(() => client.GetInventory(inventoryId)); - if (inventory is null || !TryGetCursorItem(client, out Item? cursorItem) || cursorItem is null || cursorItem.Type != itemType) - break; - - if (!TryFindTransferTargetSlot(inventory, itemType, targetStart, targetEnd, out int targetSlot, out int capacity)) - break; - - int step = Math.Min(amountToMove - moved, Math.Min(capacity, cursorItem.Count)); - int beforeTargetCount = GetSlotItemCount(inventory, targetSlot, itemType); - int beforeCursorCount = cursorItem.Count; - if (step <= 0 || !PlaceItemsFromCursor(client, inventoryId, targetSlot, step)) - break; - - if (!WaitForPlacement(client, inventoryId, targetSlot, itemType, beforeTargetCount, beforeCursorCount, step)) - break; - - touchedTargetSlots.Add(targetSlot); - moved += step; - } - - if (TryGetCursorItem(client, out Item? remainingCursor) && remainingCursor is not null && remainingCursor.Count > 0) - { - inventory = client.InvokeOnMainThread(() => client.GetInventory(inventoryId)); - if (inventory is null) - return 0; - - int returnSlot = GetReturnSlot(inventory, itemType, sourceStart, sourceEnd, sourceSlot); - if (!client.DoWindowAction(inventoryId, returnSlot, WindowActionType.LeftClick)) - return 0; - - if (!WaitForCursorClear(client, DefaultInventoryActionWaitMs)) - return 0; - } - - return TryGetCursorItem(client, out _) - ? 0 - : moved; - } - - private static bool TryFindTransferTargetSlot(Container inventory, ItemType itemType, int startSlot, int endSlot, out int targetSlot, out int capacity) - { - int maxStack = itemType.StackCount(); - for (int slot = startSlot; slot <= endSlot; slot++) - { - if (inventory.Items.TryGetValue(slot, out Item? item) && item.Type == itemType && item.Count < maxStack) - { - targetSlot = slot; - capacity = maxStack - item.Count; - return true; - } - } - - for (int slot = startSlot; slot <= endSlot; slot++) - { - if (!inventory.Items.ContainsKey(slot)) - { - targetSlot = slot; - capacity = maxStack; - return true; - } - } - - targetSlot = -1; - capacity = 0; - return false; - } - - private static bool PlaceItemsFromCursor(McClient client, int inventoryId, int targetSlot, int count) - { - if (count <= 0 || !TryGetCursorItem(client, out Item? cursorItem) || cursorItem is null) - return false; - - if (count == cursorItem.Count) - return client.DoWindowAction(inventoryId, targetSlot, WindowActionType.LeftClick); - - for (int i = 0; i < count; i++) - { - if (!client.DoWindowAction(inventoryId, targetSlot, WindowActionType.RightClick)) - return false; - } - - return true; - } - - private static int GetReturnSlot(Container inventory, ItemType itemType, int startSlot, int endSlot, int originalSourceSlot) - { - if (originalSourceSlot != 0) - return originalSourceSlot; - - int maxStack = itemType.StackCount(); - for (int slot = startSlot; slot <= endSlot; slot++) - { - if (slot == 0) - continue; - - if (inventory.Items.TryGetValue(slot, out Item? item) && item.Type == itemType && item.Count < maxStack) - return slot; - } - - for (int slot = startSlot; slot <= endSlot; slot++) - { - if (slot == 0) - continue; - - if (!inventory.Items.ContainsKey(slot)) - return slot; - } - - return originalSourceSlot; - } - - private static int GetSlotItemCount(Container inventory, int slot, ItemType itemType) - { - return inventory.Items.TryGetValue(slot, out Item? item) && item.Type == itemType ? item.Count : 0; - } - - private static bool TryDropHotbarSlotItems(McClient client, int slotId, int hotbarSlot, ItemType itemType, int dropCount, int availableInSlot, out int droppedCount) - { - droppedCount = 0; - byte previousSlot = client.GetCurrentSlot(); - bool restoreSlot = previousSlot != hotbarSlot; - - if (restoreSlot && !client.ChangeSlot((short)hotbarSlot)) - return false; - - try - { - if (dropCount >= availableInSlot) - { - if (!client.DropSelectedItem(dropEntireStack: true)) - return false; - - if (!WaitForSlotItemCount(client, 0, slotId, itemType, count => count == 0, DefaultInventoryActionWaitMs, out _, out _)) - return false; - - droppedCount = availableInSlot; - return true; - } - - int remaining = dropCount; - while (remaining > 0) - { - Container? currentInventory = client.GetInventory(0); - if (currentInventory is null) - return false; - - int beforeSlotCount = GetSlotItemCount(currentInventory, slotId, itemType); - if (beforeSlotCount <= 0) - break; - - if (!client.DropSelectedItem(dropEntireStack: false)) - return false; - - if (!WaitForSlotItemCount(client, 0, slotId, itemType, count => count <= beforeSlotCount - 1, DefaultInventoryActionWaitMs, out _, out _)) - return false; - - remaining--; - droppedCount++; - } - - return remaining == 0; - } - finally - { - if (restoreSlot) - client.ChangeSlot((short)previousSlot); - } - } - - private static bool TryDropWindowSlotItems(McClient client, int inventoryId, int slotId, ItemType itemType, int dropCount, int availableInSlot, out int droppedCount) - { - droppedCount = 0; - - if (dropCount >= availableInSlot) - { - if (!client.DoWindowAction(inventoryId, slotId, WindowActionType.DropItemStack)) - return false; - - if (!WaitForSlotItemCount(client, inventoryId, slotId, itemType, count => count == 0, DefaultInventoryActionWaitMs, out _, out _)) - return false; - - droppedCount = availableInSlot; - return true; - } - - int remaining = dropCount; - while (remaining > 0) - { - Container? currentInventory = client.GetInventory(inventoryId); - if (currentInventory is null) - return false; - - int beforeSlotCount = GetSlotItemCount(currentInventory, slotId, itemType); - if (beforeSlotCount <= 0) - break; - - if (!client.DoWindowAction(inventoryId, slotId, WindowActionType.DropItem)) - return false; - - if (!WaitForSlotItemCount(client, inventoryId, slotId, itemType, count => count <= beforeSlotCount - 1, DefaultInventoryActionWaitMs, out _, out _)) - return false; - - remaining--; - droppedCount++; - } - - return remaining == 0; - } - - private static bool WaitForCursorItem(McClient client, ItemType itemType, int waitMs, out Item? cursorItem) - { - cursorItem = null; - DateTime deadline = DateTime.UtcNow.AddMilliseconds(waitMs); - while (true) - { - if (TryGetCursorItem(client, out cursorItem) && cursorItem is not null && cursorItem.Type == itemType) - return true; - - if (DateTime.UtcNow >= deadline) - return false; - - Thread.Sleep(ArrivalPollIntervalMs); - } - } - - private static bool WaitForCursorClear(McClient client, int waitMs) - { - DateTime deadline = DateTime.UtcNow.AddMilliseconds(waitMs); - while (true) - { - if (!TryGetCursorItem(client, out _)) - return true; - - if (DateTime.UtcNow >= deadline) - return false; - - Thread.Sleep(ArrivalPollIntervalMs); - } - } - - private static bool WaitForPlacement(McClient client, int inventoryId, int targetSlot, ItemType itemType, int beforeTargetCount, int beforeCursorCount, int placedCount) - { - DateTime deadline = DateTime.UtcNow.AddMilliseconds(DefaultInventoryActionWaitMs); - while (true) - { - bool targetUpdated = false; - bool cursorUpdated = false; - - Container? inventory = client.InvokeOnMainThread(() => client.GetInventory(inventoryId)); - if (inventory is not null) - { - int currentTargetCount = GetSlotItemCount(inventory, targetSlot, itemType); - targetUpdated = currentTargetCount >= beforeTargetCount + placedCount; - } - - if (placedCount >= beforeCursorCount) - { - cursorUpdated = !TryGetCursorItem(client, out _); - } - else if (TryGetCursorItem(client, out Item? cursorItem) && cursorItem is not null && cursorItem.Type == itemType) - { - cursorUpdated = cursorItem.Count <= beforeCursorCount - placedCount; - } - - if (targetUpdated && cursorUpdated) - return true; - - if (DateTime.UtcNow >= deadline) - return false; - - Thread.Sleep(ArrivalPollIntervalMs); - } - } - - private static bool WaitForSlotItemCount(McClient client, int inventoryId, int slotId, ItemType itemType, Func predicate, int waitMs, out Container? inventory, out int itemCount) - { - inventory = null; - itemCount = 0; - DateTime deadline = DateTime.UtcNow.AddMilliseconds(waitMs); - while (true) - { - inventory = client.GetInventory(inventoryId); - if (inventory is not null) - { - itemCount = GetSlotItemCount(inventory, slotId, itemType); - if (predicate(itemCount)) - return true; - } - - if (DateTime.UtcNow >= deadline) - return false; - - Thread.Sleep(ArrivalPollIntervalMs); - } - } - - private static bool WaitForRangeCount(McClient client, int inventoryId, ItemType itemType, int startSlot, int endSlot, Func predicate, int waitMs, out Container? inventory, out int itemCount) - { - inventory = null; - itemCount = 0; - DateTime deadline = DateTime.UtcNow.AddMilliseconds(waitMs); - while (true) - { - inventory = client.InvokeOnMainThread(() => client.GetInventory(inventoryId)); - if (inventory is not null) - { - itemCount = CountItemInRange(inventory, itemType, startSlot, endSlot); - if (predicate(itemCount)) - return true; - } - - if (DateTime.UtcNow >= deadline) - return false; - - Thread.Sleep(ArrivalPollIntervalMs); - } - } - - private static List BuildTrackedPlayerSnapshots(McClient client, bool includeSelf) - { - Location playerLocation = client.GetCurrentLocation(); - string username = client.GetUsername(); - Dictionary uuidToName = client.GetOnlinePlayersWithUUID(); - string[] onlinePlayers = client.GetOnlinePlayers(); - - List trackedPlayers = client.GetEntities().Values - .Where(entity => entity.Type == EntityType.Player) - .Select(entity => - { - double dx = entity.Location.X - playerLocation.X; - double dy = entity.Location.Y - playerLocation.Y; - double dz = entity.Location.Z - playerLocation.Z; - double distance = Math.Sqrt(dx * dx + dy * dy + dz * dz); - string? rawName = ResolvePlayerEntityName(entity, uuidToName); - return new NearbyPlayerSnapshot - { - EntityId = entity.ID, - Uuid = entity.UUID, - Name = rawName, - CustomName = entity.CustomName, - X = entity.Location.X, - Y = entity.Location.Y, - Z = entity.Location.Z, - Distance = distance, - Latency = entity.Latency - }; - }) - .ToList(); - - if (!includeSelf) - { - trackedPlayers = trackedPlayers - .Where(player => !string.Equals(player.Name, username, StringComparison.OrdinalIgnoreCase)) - .Where(player => player.Distance > SelfEntityDistanceThreshold) - .ToList(); - } - - List unnamedTracked = trackedPlayers - .Where(player => string.IsNullOrWhiteSpace(player.Name)) - .OrderBy(player => player.Distance) - .ToList(); - if (unnamedTracked.Count == 0) - return trackedPlayers; - - HashSet assignedNames = trackedPlayers - .Select(player => player.Name) - .OfType() - .ToHashSet(NameComparer); - - string[] unmatchedOnline = onlinePlayers - .Where(name => includeSelf || !string.Equals(name, username, StringComparison.OrdinalIgnoreCase)) - .Where(name => !string.IsNullOrWhiteSpace(name)) - .Where(name => !assignedNames.Contains(name)) - .Distinct(NameComparer) - .ToArray(); - - if (unmatchedOnline.Length == 0) - return trackedPlayers; - - if (unnamedTracked.Count == 1 && unmatchedOnline.Length == 1) - { - unnamedTracked[0].Name = unmatchedOnline[0]; - return trackedPlayers; - } - - int pairCount = Math.Min(unnamedTracked.Count, unmatchedOnline.Length); - string[] sortedNames = unmatchedOnline - .OrderBy(name => name, NameComparer) - .ToArray(); - for (int i = 0; i < pairCount; i++) - unnamedTracked[i].Name = sortedNames[i]; - - return trackedPlayers; - } - - private static object? DescribeMetadataValue(object? value) - { - return value switch - { - null => null, - string s => s, - bool b => b, - byte b => b, - sbyte b => b, - short s => s, - ushort s => s, - int i => i, - uint i => i, - long l => l, - ulong l => l, - float f => f, - double d => d, - decimal d => d, - Enum e => e.ToString(), - Location location => ToCoordinate(location), - Item item => new { type = item.Type.ToString(), count = item.Count }, - byte[] data => new { bytes = data.Length }, - _ => value.ToString() - }; - } - - private static bool PlayerNameMatches(NearbyPlayerSnapshot player, string filter) - { - if (string.IsNullOrWhiteSpace(filter)) - return true; - - string trimmed = filter.Trim(); - if (!string.IsNullOrWhiteSpace(player.Name) && player.Name.Contains(trimmed, StringComparison.OrdinalIgnoreCase)) - return true; - - if (!string.IsNullOrWhiteSpace(player.CustomName) && player.CustomName.Contains(trimmed, StringComparison.OrdinalIgnoreCase)) - return true; - - return false; - } - - private static bool TryParseWindowAction(string rawActionType, out WindowActionType actionType) - { - if (Enum.TryParse(rawActionType, true, out actionType)) - return true; - - string normalized = NormalizeToken(rawActionType); - if (normalized.Length == 0) - return false; - - return normalized switch - { - "left" or "leftclick" => SetAction(WindowActionType.LeftClick, out actionType), - "right" or "rightclick" => SetAction(WindowActionType.RightClick, out actionType), - "middle" or "mid" or "middleclick" => SetAction(WindowActionType.MiddleClick, out actionType), - "shift" or "shiftclick" => SetAction(WindowActionType.ShiftClick, out actionType), - "shiftright" or "shiftrightclick" => SetAction(WindowActionType.ShiftRightClick, out actionType), - "drop" or "dropitem" or "q" => SetAction(WindowActionType.DropItem, out actionType), - "dropstack" or "dropall" or "dropitemstack" or "ctrlq" or "ctrldrop" => SetAction(WindowActionType.DropItemStack, out actionType), - _ => false - }; - } - - private static bool SetAction(WindowActionType value, out WindowActionType actionType) - { - actionType = value; - return true; - } - - private static bool TryParseItemType(string rawItemType, out ItemType itemType) - { - if (Enum.TryParse(rawItemType, true, out itemType) && itemType is not (ItemType.Unknown or ItemType.Null)) - return true; - - string normalized = NormalizeToken(rawItemType); - if (normalized.Length == 0) - { - itemType = ItemType.Unknown; - return false; - } - - foreach (ItemType candidate in Enum.GetValues()) - { - if (candidate is ItemType.Unknown or ItemType.Null) - continue; - if (NormalizeToken(candidate.ToString()) == normalized) - { - itemType = candidate; - return true; - } - } - - itemType = ItemType.Unknown; - return false; - } - - private static string NormalizeToken(string value) - { - if (string.IsNullOrWhiteSpace(value)) - return string.Empty; - - char[] buffer = value - .Where(char.IsLetterOrDigit) - .Select(char.ToLowerInvariant) - .ToArray(); - return new string(buffer); - } - - private static bool WaitForArrival(McClient client, Location goal, int waitMs, double tolerance, out Location? finalLocation) - { - finalLocation = null; - DateTime deadline = DateTime.UtcNow.AddMilliseconds(waitMs); - while (true) - { - Location location = client.InvokeOnMainThread(client.GetCurrentLocation); - finalLocation = location; - double distance = GetDistance(location, goal); - if (distance <= tolerance) - return true; - - if (DateTime.UtcNow >= deadline) - return false; - - Thread.Sleep(ArrivalPollIntervalMs); - } - } - - private static double GetDistance(Location from, Location to) - { - double dx = from.X - to.X; - double dy = from.Y - to.Y; - double dz = from.Z - to.Z; - return Math.Sqrt(dx * dx + dy * dy + dz * dz); - } - - private static int GetArrivalWaitMs(int timeoutMs) - { - if (timeoutMs <= 0) - return DefaultArrivalWaitMs; - return Math.Clamp(timeoutMs, MinArrivalWaitMs, MaxArrivalWaitMs); - } - - private static double GetArrivalTolerance(int maxOffset, int minOffset) - { - double toleranceFromOffset = Math.Max(maxOffset, minOffset) + 1.0; - return Math.Max(DefaultArrivalTolerance, toleranceFromOffset); - } - - private static int GetPathQueryTimeoutMs(int timeoutMs) - { - if (timeoutMs <= 0) - return DefaultPathQueryTimeoutMs; - return Math.Clamp(timeoutMs, MinPathQueryTimeoutMs, MaxPathQueryTimeoutMs); - } - - private static bool WaitForBlockChange(McClient client, Location target, Block beforeBlock, int waitMs, out Block afterBlock) - { - afterBlock = beforeBlock; - DateTime deadline = DateTime.UtcNow.AddMilliseconds(waitMs); - while (true) - { - Block current = client.InvokeOnMainThread(() => client.GetWorld().GetBlock(target)); - afterBlock = current; - if (!AreEquivalentBlocks(current, beforeBlock)) - return true; - - if (DateTime.UtcNow >= deadline) - return false; - - Thread.Sleep(ArrivalPollIntervalMs); - } - } - - private static bool AreEquivalentBlocks(Block left, Block right) - { - return left.BlockId == right.BlockId - && left.BlockMeta == right.BlockMeta - && left.Type == right.Type; - } - - private static double[] GetDigAttemptDurations(double durationSeconds) - { - if (durationSeconds > 0) - return [durationSeconds]; - return s_defaultDigAttemptDurations; - } - - private static int GetDigVerifyWaitMs(double durationSeconds) - { - int waitMs = (int)Math.Ceiling(durationSeconds * 1000) + 2000; - return Math.Clamp(waitMs, 1500, MaxBlockVerifyWaitMs); - } - - private static bool AreValidPathOffsets(int maxOffset, int minOffset) - { - return maxOffset >= 0 && minOffset >= 0 && minOffset <= maxOffset; - } - - private static bool HasCompleteCoordinateTriple(double? x, double? y, double? z) - { - return x.HasValue == y.HasValue && y.HasValue == z.HasValue; - } - - private static int GetLoadedChunkCount(World world) - { - return Math.Max(0, world.chunkCnt - Math.Max(0, world.chunkLoadNotCompleted)); - } - - private static double GetChunkLoadRatio(World world) - { - return world.chunkCnt > 0 - ? GetLoadedChunkCount(world) / (double)world.chunkCnt - : 0.0; - } - - private static object GetNeighborBlockSnapshot(World world, Location location) - { - Location blockLocation = location.ToFloor(); - Location north = new(blockLocation.X, blockLocation.Y, blockLocation.Z - 1); - Location south = new(blockLocation.X, blockLocation.Y, blockLocation.Z + 1); - Location east = new(blockLocation.X + 1, blockLocation.Y, blockLocation.Z); - Location west = new(blockLocation.X - 1, blockLocation.Y, blockLocation.Z); - Location above = new(blockLocation.X, blockLocation.Y + 1, blockLocation.Z); - Location below = new(blockLocation.X, blockLocation.Y - 1, blockLocation.Z); - - return new - { - north = new { location = ToCoordinate(north), block = ToBlockState(world.GetBlock(north)) }, - south = new { location = ToCoordinate(south), block = ToBlockState(world.GetBlock(south)) }, - east = new { location = ToCoordinate(east), block = ToBlockState(world.GetBlock(east)) }, - west = new { location = ToCoordinate(west), block = ToBlockState(world.GetBlock(west)) }, - above = new { location = ToCoordinate(above), block = ToBlockState(world.GetBlock(above)) }, - below = new { location = ToCoordinate(below), block = ToBlockState(world.GetBlock(below)) } - }; - } - - private static bool ItemMatches(Item item, string query, bool exactMatch, ItemType? exactItemType) - { - if (exactItemType.HasValue) - return item.Type == exactItemType.Value; - - string typeName = item.Type.ToString(); - string typeLabel = item.GetTypeString(); - return exactMatch - ? TextEqualsFilter(typeName, query) || TextEqualsFilter(typeLabel, query) - : TextMatchesFilter(typeName, query) || TextMatchesFilter(typeLabel, query); - } - - private static bool EntityNameMatches(string? name, string? customName, string filter) - { - return (!string.IsNullOrWhiteSpace(name) && TextMatchesFilter(name, filter)) - || (!string.IsNullOrWhiteSpace(customName) && TextMatchesFilter(customName, filter)); - } - - private static bool IsSupportedLookDirection(Direction direction) - { - return direction is Direction.Up or Direction.Down or Direction.North or Direction.South or Direction.East or Direction.West; - } - - private static NearbyItemSnapshot[] BuildNearbyItemSnapshots(McClient client, ItemType? itemType, double radius, int maxCount) - { - Location playerLocation = client.GetCurrentLocation(); - return client.GetEntities().Values - .Where(entity => entity.Type == EntityType.Item && !entity.Item.IsEmpty) - .Where(entity => !itemType.HasValue || entity.Item.Type == itemType.Value) - .Select(entity => - { - double dx = entity.Location.X - playerLocation.X; - double dy = entity.Location.Y - playerLocation.Y; - double dz = entity.Location.Z - playerLocation.Z; - return new NearbyItemSnapshot - { - EntityId = entity.ID, - ItemType = entity.Item.Type, - TypeLabel = entity.Item.GetTypeString(), - Count = entity.Item.Count, - X = entity.Location.X, - Y = entity.Location.Y, - Z = entity.Location.Z, - Distance = Math.Sqrt(dx * dx + dy * dy + dz * dz) - }; - }) - .Where(item => item.Distance <= radius) - .OrderBy(item => item.Distance) - .Take(maxCount) - .ToArray(); - } - - private static bool WaitForEntityRemoval(McClient client, int entityId, int waitMs) - { - DateTime deadline = DateTime.UtcNow.AddMilliseconds(waitMs); - while (true) - { - bool exists = client.InvokeOnMainThread(() => client.GetEntities().ContainsKey(entityId)); - if (!exists) - return true; - - if (DateTime.UtcNow >= deadline) - return false; - - Thread.Sleep(ArrivalPollIntervalMs); - } - } - - private static int GetInventoryItemCount(McClient client, ItemType itemType) - { - Container? inventory = client.GetInventory(0); - if (inventory is null) - return 0; - - return inventory.Items.Values - .Where(item => item.Type == itemType) - .Sum(item => item.Count); - } - - private static object ToCoordinate(Location location) - { - return ToCoordinate(location.X, location.Y, location.Z); - } - - private static object ToCoordinate(double x, double y, double z) - { - return new - { - x = RoundCoordinate(x), - y = RoundCoordinate(y), - z = RoundCoordinate(z) - }; - } - - private static double RoundCoordinate(double value) - { - return Math.Round(value, CoordinateRoundingPrecision, MidpointRounding.AwayFromZero); - } - - private static Location ToBlockLocation(double x, double y, double z) - { - return new Location(Math.Floor(x), Math.Floor(y), Math.Floor(z)); - } - - private static object ToBlockState(Block block) - { - return new - { - material = block.Type.ToString(), - typeLabel = block.GetTypeString(), - blockId = block.BlockId, - blockMeta = block.BlockMeta, - stateId = block.StateId, - properties = block.GetStateProperties() - }; - } - - private static string GetMaterialTypeLabel(Material material) - { - string key = "block.minecraft." + ToTranslationKey(material.ToString()); - string? translation = ChatParser.TranslateString(key); - return string.IsNullOrEmpty(translation) ? material.ToString() : translation; - } - - private static string ToTranslationKey(string value) - { - if (string.IsNullOrEmpty(value)) - return string.Empty; - - List chars = new(value.Length * 2); - for (int i = 0; i < value.Length; i++) - { - char current = value[i]; - if (char.IsUpper(current) && i > 0 && (char.IsLower(value[i - 1]) || char.IsDigit(value[i - 1]))) - chars.Add('_'); - chars.Add(char.ToLowerInvariant(current)); - } - - return new string(chars.ToArray()); - } - - private static bool IsSignMaterial(Material material) - { - return material.ToString().Contains("Sign", StringComparison.Ordinal); - } - - private static bool IsInteractableContainerMaterial(Material material) - { - string name = material.ToString(); - return name.Contains("Chest", StringComparison.Ordinal) - || name.Contains("Barrel", StringComparison.Ordinal) - || name.Contains("ShulkerBox", StringComparison.Ordinal) - || name.Contains("Hopper", StringComparison.Ordinal) - || name.Contains("Dispenser", StringComparison.Ordinal) - || name.Contains("Dropper", StringComparison.Ordinal) - || name.Contains("Furnace", StringComparison.Ordinal) - || name.Contains("Smoker", StringComparison.Ordinal) - || name.Contains("BlastFurnace", StringComparison.Ordinal) - || name.Contains("Crafter", StringComparison.Ordinal); - } - - private static string? ResolvePlayerEntityName(Entity entity, IReadOnlyDictionary uuidToName) - { - if (!string.IsNullOrWhiteSpace(entity.Name)) - return entity.Name; - - if (entity.UUID != Guid.Empty - && uuidToName.TryGetValue(entity.UUID.ToString(), out string? mappedName) - && !string.IsNullOrWhiteSpace(mappedName)) - { - return mappedName; - } - - if (!string.IsNullOrWhiteSpace(entity.CustomName)) - return entity.CustomName; - - return null; - } - - private static bool BlockMatches(Block block, string? filter, bool exactMatch, int? blockIdFilter, int? blockMetaFilter) - { - if (blockIdFilter.HasValue) - { - if (block.BlockId != blockIdFilter.Value) - return false; - if (blockMetaFilter.HasValue && block.BlockMeta != blockMetaFilter.Value) - return false; - return true; - } - - if (filter is null) - return true; - - string material = block.Type.ToString(); - string typeLabel = block.GetTypeString(); - if (exactMatch) - { - return TextEqualsFilter(material, filter) - || TextEqualsFilter(typeLabel, filter); - } - - return TextMatchesFilter(material, filter) - || TextMatchesFilter(typeLabel, filter); - } - - private static bool TextEqualsFilter(string text, string filter) - { - return text.Equals(filter, StringComparison.OrdinalIgnoreCase) - || NormalizeToken(text) == NormalizeToken(filter); - } - - private static bool TextMatchesFilter(string text, string filter) - { - if (text.Contains(filter, StringComparison.OrdinalIgnoreCase)) - return true; - - string normalizedFilter = NormalizeToken(filter); - if (normalizedFilter.Length == 0) - return false; - - return NormalizeToken(text).Contains(normalizedFilter, StringComparison.Ordinal); - } - - private static void ParseBlockQuery(string? query, out int? blockId, out int? blockMeta) - { - blockId = null; - blockMeta = null; - if (string.IsNullOrWhiteSpace(query)) - return; - - string trimmed = query.Trim(); - int separator = trimmed.IndexOf(':'); - if (separator >= 0) - { - string idPart = trimmed[..separator].Trim(); - string metaPart = trimmed[(separator + 1)..].Trim(); - if (int.TryParse(idPart, NumberStyles.Integer, CultureInfo.InvariantCulture, out int parsedId)) - { - blockId = parsedId; - if (int.TryParse(metaPart, NumberStyles.Integer, CultureInfo.InvariantCulture, out int parsedMeta)) - blockMeta = parsedMeta; - } - return; - } - - if (int.TryParse(trimmed, NumberStyles.Integer, CultureInfo.InvariantCulture, out int blockStateId)) - blockId = blockStateId; - } -} diff --git a/MinecraftClient/Mcp/MccMcpChatHistory.cs b/MinecraftClient/Mcp/MccMcpChatHistory.cs deleted file mode 100644 index 6cf314f1a4..0000000000 --- a/MinecraftClient/Mcp/MccMcpChatHistory.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Linq; -using MinecraftClient.Scripting; - -namespace MinecraftClient.Mcp; - -public sealed class MccMcpChatHistoryEntry -{ - public required DateTimeOffset TimestampUtc { get; init; } - public required string Kind { get; init; } - public required string Text { get; init; } - public string? Sender { get; init; } - public string? Message { get; init; } - public string? Json { get; init; } -} - -public static class MccMcpChatHistoryStore -{ - public static void Add(MccMcpChatHistoryEntry entry) - { - MccObservedStateStore.AddChatHistoryEntry(new MccChatHistoryEntry - { - TimestampUtc = entry.TimestampUtc, - Kind = entry.Kind, - Text = entry.Text, - Sender = entry.Sender, - Message = entry.Message, - Json = entry.Json - }); - } - - public static MccMcpChatHistoryEntry[] GetLatest(int maxCount) - { - return MccObservedStateStore.GetLatestChatHistory(maxCount) - .Select(entry => new MccMcpChatHistoryEntry - { - TimestampUtc = entry.TimestampUtc, - Kind = entry.Kind, - Text = entry.Text, - Sender = entry.Sender, - Message = entry.Message, - Json = entry.Json - }) - .ToArray(); - } - - public static void Clear() - { - MccObservedStateStore.ClearChatHistory(); - } -} diff --git a/MinecraftClient/Mcp/MccMcpConfig.cs b/MinecraftClient/Mcp/MccMcpConfig.cs deleted file mode 100644 index 1655be628a..0000000000 --- a/MinecraftClient/Mcp/MccMcpConfig.cs +++ /dev/null @@ -1,46 +0,0 @@ -using Tomlet.Attributes; - -namespace MinecraftClient.Mcp; - -public sealed class MccMcpConfig -{ - public bool Enabled { get; set; } - public MccMcpTransportConfig Transport { get; set; } = new(); - public MccMcpCapabilityToggles Capabilities { get; set; } = new(); -} - -public sealed class MccMcpTransportConfig -{ - [TomlInlineComment("$ChatBot.McpServer.Transport.BindHost$")] - public string BindHost { get; set; } = "127.0.0.1"; - - [TomlInlineComment("$ChatBot.McpServer.Transport.Port$")] - public int Port { get; set; } = 33333; - - [TomlInlineComment("$ChatBot.McpServer.Transport.Route$")] - public string Route { get; set; } = "/mcp"; - - [TomlInlineComment("$ChatBot.McpServer.Transport.RequireAuthToken$")] - public bool RequireAuthToken { get; set; } - - [TomlInlineComment("$ChatBot.McpServer.Transport.AuthTokenEnvVar$")] - public string AuthTokenEnvVar { get; set; } = "MCC_MCP_AUTH_TOKEN"; -} - -public sealed class MccMcpCapabilityToggles -{ - [TomlInlineComment("$ChatBot.McpServer.Capabilities.SessionStatus$")] - public bool SessionStatus { get; set; } = true; - - [TomlInlineComment("$ChatBot.McpServer.Capabilities.ChatAndCommands$")] - public bool ChatAndCommands { get; set; } = true; - - [TomlInlineComment("$ChatBot.McpServer.Capabilities.Movement$")] - public bool Movement { get; set; } = true; - - [TomlInlineComment("$ChatBot.McpServer.Capabilities.Inventory$")] - public bool Inventory { get; set; } = true; - - [TomlInlineComment("$ChatBot.McpServer.Capabilities.EntityWorld$")] - public bool EntityWorld { get; set; } = true; -} diff --git a/MinecraftClient/Mcp/MccMcpGuidanceProvider.cs b/MinecraftClient/Mcp/MccMcpGuidanceProvider.cs deleted file mode 100644 index 465d8592af..0000000000 --- a/MinecraftClient/Mcp/MccMcpGuidanceProvider.cs +++ /dev/null @@ -1,263 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Security.Cryptography; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text; -using System.Text.Json.Serialization; - -namespace MinecraftClient.Mcp; - -public sealed class MccMcpGuidanceProvider -{ - private const string EmbeddedPromptResourceSuffix = "MccMcpOperatorPrompt.md"; - private const string BestPracticesHeading = "## Best Practices"; - private const string ExampleScenariosHeading = "## Example Scenarios"; - - private readonly MccMcpConfig config; - private readonly Lazy guidanceDocument; - - public MccMcpGuidanceProvider(MccMcpConfig config) - { - this.config = config; - guidanceDocument = new Lazy(LoadGuidanceDocument); - } - - public string PromptName => "mcc_operator_prompt"; - - public string SkillName => "mcc-mcp-operator"; - - public string GetSystemPrompt() - { - GuidanceDocument document = guidanceDocument.Value; - MccMcpAgentCapabilityStatus capabilityStatus = BuildCapabilityStatus(); - StringBuilder builder = new(); - builder.AppendLine("You are an external agent controlling Minecraft Console Client (MCC) through its built-in MCP server."); - builder.AppendLine("Use the following MCP Operator Prompt as your system prompt. Treat the capability snapshot as authoritative and do not invent unsupported actions."); - builder.AppendLine(); - builder.AppendLine(document.BodyMarkdown); - builder.AppendLine(); - builder.AppendLine("Current capability snapshot"); - builder.AppendLine($"- sessionStatus: {FormatCapability(capabilityStatus.SessionStatus)}"); - builder.AppendLine($"- chatAndCommands: {FormatCapability(capabilityStatus.ChatAndCommands)}"); - builder.AppendLine($"- movement: {FormatCapability(capabilityStatus.Movement)}"); - builder.AppendLine($"- inventory: {FormatCapability(capabilityStatus.Inventory)}"); - builder.AppendLine($"- entityWorld: {FormatCapability(capabilityStatus.EntityWorld)}"); - return builder.ToString().Trim(); - } - - public MccMcpAgentGuidancePayload GetToolPayload() - { - GuidanceDocument document = guidanceDocument.Value; - return new MccMcpAgentGuidancePayload - { - PromptName = PromptName, - PromptMarkdown = document.PromptMarkdown, - SkillName = SkillName, - GuidanceVersion = document.GuidanceVersion, - SkillMarkdown = document.SkillMarkdown, - SystemPrompt = GetSystemPrompt(), - BestPractices = document.BestPractices, - ExampleScenarios = document.ExampleScenarios, - CapabilityStatus = BuildCapabilityStatus() - }; - } - - private GuidanceDocument LoadGuidanceDocument() - { - Assembly assembly = typeof(MccMcpGuidanceProvider).Assembly; - string resourceName = assembly.GetManifestResourceNames() - .FirstOrDefault(name => name.EndsWith(EmbeddedPromptResourceSuffix, StringComparison.Ordinal)) - ?? throw new InvalidOperationException($"Embedded MCP operator prompt resource '{EmbeddedPromptResourceSuffix}' was not found."); - - using Stream? stream = assembly.GetManifestResourceStream(resourceName); - if (stream is null) - throw new InvalidOperationException($"Embedded MCP operator prompt resource '{resourceName}' could not be opened."); - - using StreamReader reader = new(stream, Encoding.UTF8); - string promptMarkdown = reader.ReadToEnd(); - string bodyMarkdown = StripFrontmatter(promptMarkdown); - string bestPracticesSection = ExtractSection(bodyMarkdown, BestPracticesHeading); - string exampleScenariosSection = ExtractSection(bodyMarkdown, ExampleScenariosHeading); - - return new GuidanceDocument( - ComputeGuidanceVersion(promptMarkdown), - promptMarkdown.Replace("\r\n", "\n").Trim(), - bodyMarkdown, - ExtractBulletList(bestPracticesSection), - ExtractExampleScenarios(exampleScenariosSection)); - } - - private MccMcpAgentCapabilityStatus BuildCapabilityStatus() - { - return new MccMcpAgentCapabilityStatus - { - SessionStatus = config.Capabilities.SessionStatus, - ChatAndCommands = config.Capabilities.ChatAndCommands, - Movement = config.Capabilities.Movement, - Inventory = config.Capabilities.Inventory, - EntityWorld = config.Capabilities.EntityWorld - }; - } - - private static string StripFrontmatter(string markdown) - { - string normalized = markdown.Replace("\r\n", "\n"); - if (!normalized.StartsWith("---\n", StringComparison.Ordinal)) - return normalized.Trim(); - - int endOfFrontmatter = normalized.IndexOf("\n---\n", 4, StringComparison.Ordinal); - if (endOfFrontmatter < 0) - return normalized.Trim(); - - return normalized[(endOfFrontmatter + 5)..].Trim(); - } - - private static string ExtractSection(string markdownBody, string heading) - { - int headingIndex = markdownBody.IndexOf(heading, StringComparison.Ordinal); - if (headingIndex < 0) - return string.Empty; - - int sectionStart = headingIndex + heading.Length; - int nextHeading = markdownBody.IndexOf("\n## ", sectionStart, StringComparison.Ordinal); - string section = nextHeading >= 0 - ? markdownBody[sectionStart..nextHeading] - : markdownBody[sectionStart..]; - - return section.Trim(); - } - - private static string[] ExtractBulletList(string section) - { - return section - .Split('\n', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries) - .Where(line => line.StartsWith("- ", StringComparison.Ordinal)) - .Select(line => line[2..].Trim()) - .Where(line => line.Length > 0) - .ToArray(); - } - - private static MccMcpAgentScenario[] ExtractExampleScenarios(string section) - { - if (string.IsNullOrWhiteSpace(section)) - return []; - - List scenarios = []; - string? currentTitle = null; - List currentBodyLines = []; - - foreach (string rawLine in section.Split('\n')) - { - string line = rawLine.TrimEnd(); - if (line.StartsWith("### ", StringComparison.Ordinal)) - { - AddScenario(scenarios, currentTitle, currentBodyLines); - currentTitle = line[4..].Trim(); - currentBodyLines = []; - continue; - } - - if (currentTitle is not null) - currentBodyLines.Add(line); - } - - AddScenario(scenarios, currentTitle, currentBodyLines); - return scenarios.ToArray(); - } - - private static void AddScenario(List scenarios, string? title, List bodyLines) - { - if (string.IsNullOrWhiteSpace(title)) - return; - - string guidance = string.Join('\n', bodyLines) - .Trim(); - - scenarios.Add(new MccMcpAgentScenario - { - Title = title, - Guidance = guidance - }); - } - - private static string FormatCapability(bool enabled) - { - return enabled ? "enabled" : "disabled"; - } - - private static string ComputeGuidanceVersion(string markdown) - { - byte[] bytes = Encoding.UTF8.GetBytes(markdown.Replace("\r\n", "\n").Trim()); - byte[] hash = SHA256.HashData(bytes); - return Convert.ToHexString(hash[..8]).ToLowerInvariant(); - } - - private sealed record GuidanceDocument( - string GuidanceVersion, - string SkillMarkdown, - string BodyMarkdown, - string[] BestPractices, - MccMcpAgentScenario[] ExampleScenarios) - { - public string PromptMarkdown => SkillMarkdown; - } -} - -public sealed class MccMcpAgentGuidancePayload -{ - [JsonPropertyName("promptName")] - public string PromptName { get; init; } = string.Empty; - - [JsonPropertyName("promptMarkdown")] - public string PromptMarkdown { get; init; } = string.Empty; - - [JsonPropertyName("skillName")] - public string SkillName { get; init; } = string.Empty; - - [JsonPropertyName("guidanceVersion")] - public string GuidanceVersion { get; init; } = string.Empty; - - [JsonPropertyName("skillMarkdown")] - public string SkillMarkdown { get; init; } = string.Empty; - - [JsonPropertyName("systemPrompt")] - public string SystemPrompt { get; init; } = string.Empty; - - [JsonPropertyName("bestPractices")] - public string[] BestPractices { get; init; } = []; - - [JsonPropertyName("exampleScenarios")] - public MccMcpAgentScenario[] ExampleScenarios { get; init; } = []; - - [JsonPropertyName("capabilityStatus")] - public MccMcpAgentCapabilityStatus CapabilityStatus { get; init; } = new(); -} - -public sealed class MccMcpAgentScenario -{ - [JsonPropertyName("title")] - public string Title { get; init; } = string.Empty; - - [JsonPropertyName("guidance")] - public string Guidance { get; init; } = string.Empty; -} - -public sealed class MccMcpAgentCapabilityStatus -{ - [JsonPropertyName("sessionStatus")] - public bool SessionStatus { get; init; } - - [JsonPropertyName("chatAndCommands")] - public bool ChatAndCommands { get; init; } - - [JsonPropertyName("movement")] - public bool Movement { get; init; } - - [JsonPropertyName("inventory")] - public bool Inventory { get; init; } - - [JsonPropertyName("entityWorld")] - public bool EntityWorld { get; init; } -} diff --git a/MinecraftClient/Mcp/MccMcpPromptSet.cs b/MinecraftClient/Mcp/MccMcpPromptSet.cs deleted file mode 100644 index 970528a68f..0000000000 --- a/MinecraftClient/Mcp/MccMcpPromptSet.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System.ComponentModel; -using ModelContextProtocol.Server; - -namespace MinecraftClient.Mcp; - -public sealed class MccMcpPromptSet -{ - private readonly MccMcpGuidanceProvider guidanceProvider; - - public MccMcpPromptSet(MccMcpGuidanceProvider guidanceProvider) - { - this.guidanceProvider = guidanceProvider; - } - - [McpServerPrompt(Name = "mcc_operator_prompt"), Description("Get the canonical MCC MCP Operator Prompt for external agents using this MCP server.")] - public string OperatorPrompt() - { - return guidanceProvider.GetSystemPrompt(); - } -} diff --git a/MinecraftClient/Mcp/MccMcpRecentEventStore.cs b/MinecraftClient/Mcp/MccMcpRecentEventStore.cs deleted file mode 100644 index 69da1b5750..0000000000 --- a/MinecraftClient/Mcp/MccMcpRecentEventStore.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.Linq; -using MinecraftClient.Scripting; - -namespace MinecraftClient.Mcp; - -public sealed class MccMcpRecentEventEntry -{ - public required long Id { get; init; } - public required DateTimeOffset TimestampUtc { get; init; } - public required string Type { get; init; } - public object? Data { get; init; } -} - -public static class MccMcpRecentEventStore -{ - public static long Add(string type, object? data = null) - { - return MccObservedStateStore.AddRecentEvent(type, data); - } - - public static long GetLatestId() - { - return MccObservedStateStore.GetLatestRecentEventId(); - } - - public static MccMcpRecentEventEntry[] GetAfter(long afterId, int maxCount, string? typeFilter = null) - { - return MccObservedStateStore.GetRecentEventsAfter(afterId, maxCount, typeFilter) - .Select(entry => new MccMcpRecentEventEntry - { - Id = entry.Id, - TimestampUtc = entry.TimestampUtc, - Type = entry.Type, - Data = entry.Data - }) - .ToArray(); - } - - public static void Clear() - { - MccObservedStateStore.ClearRecentEvents(); - } -} diff --git a/MinecraftClient/Mcp/MccMcpResult.cs b/MinecraftClient/Mcp/MccMcpResult.cs deleted file mode 100644 index 0c12fbf259..0000000000 --- a/MinecraftClient/Mcp/MccMcpResult.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System; - -namespace MinecraftClient.Mcp; - -public sealed class MccMcpResult -{ - public bool Success { get; init; } - public string? ErrorCode { get; init; } - public string? Message { get; init; } - public object? Data { get; init; } - - public static MccMcpResult Ok(object? data = null, string? message = null) - { - return new MccMcpResult - { - Success = true, - Data = data, - Message = message - }; - } - - public static MccMcpResult Fail(string errorCode, string? message = null, object? data = null) - { - ArgumentException.ThrowIfNullOrEmpty(errorCode); - return new MccMcpResult - { - Success = false, - ErrorCode = errorCode, - Message = message, - Data = data - }; - } -} diff --git a/MinecraftClient/Mcp/MccMcpRuntimeStateStore.cs b/MinecraftClient/Mcp/MccMcpRuntimeStateStore.cs deleted file mode 100644 index c9c3daf0e1..0000000000 --- a/MinecraftClient/Mcp/MccMcpRuntimeStateStore.cs +++ /dev/null @@ -1,47 +0,0 @@ -using System; -using MinecraftClient.Scripting; - -namespace MinecraftClient.Mcp; - -public sealed class MccMcpRuntimeStateSnapshot -{ - public long? WorldAge { get; init; } - public long? TimeOfDay { get; init; } - public float? RainLevel { get; init; } - public float? ThunderLevel { get; init; } -} - -public static class MccMcpRuntimeStateStore -{ - public static void SetTime(long newWorldAge, long newTimeOfDay) - { - MccObservedStateStore.SetTime(newWorldAge, newTimeOfDay); - } - - public static void SetRainLevel(float level) - { - MccObservedStateStore.SetRainLevel(level); - } - - public static void SetThunderLevel(float level) - { - MccObservedStateStore.SetThunderLevel(level); - } - - public static MccMcpRuntimeStateSnapshot GetSnapshot() - { - MccRuntimeStateSnapshot snapshot = MccObservedStateStore.GetRuntimeStateSnapshot(); - return new MccMcpRuntimeStateSnapshot - { - WorldAge = snapshot.WorldAge, - TimeOfDay = snapshot.TimeOfDay, - RainLevel = snapshot.RainLevel, - ThunderLevel = snapshot.ThunderLevel - }; - } - - public static void Clear() - { - MccObservedStateStore.ClearRuntimeState(); - } -} diff --git a/MinecraftClient/Mcp/MccMcpToolSet.cs b/MinecraftClient/Mcp/MccMcpToolSet.cs deleted file mode 100644 index 84305e3480..0000000000 --- a/MinecraftClient/Mcp/MccMcpToolSet.cs +++ /dev/null @@ -1,401 +0,0 @@ -using System.ComponentModel; -using ModelContextProtocol.Server; - -namespace MinecraftClient.Mcp; - -[McpServerToolType] -public sealed class MccMcpToolSet -{ - private readonly IMccMcpCapabilities capabilities; - private readonly MccMcpGuidanceProvider guidanceProvider; - - public MccMcpToolSet(IMccMcpCapabilities capabilities, MccMcpGuidanceProvider guidanceProvider) - { - this.capabilities = capabilities; - this.guidanceProvider = guidanceProvider; - } - - [McpServerTool(Name = "mcc_session_status"), Description("Get current MCC session and feature status.")] - public object SessionStatus() - { - return capabilities.GetSessionStatus(); - } - - [McpServerTool(Name = "mcc_server_info"), Description("Get active MCC server connection info and current TPS.")] - public object ServerInfo() - { - return capabilities.GetServerInfo(); - } - - [McpServerTool(Name = "mcc_player_state"), Description("Get current controlled player state.")] - public object PlayerState() - { - return capabilities.GetPlayerState(); - } - - [McpServerTool(Name = "mcc_world_state"), Description("Get current world state, chunk loading progress, and last observed runtime time/weather values.")] - public object WorldState() - { - return capabilities.GetWorldState(); - } - - [McpServerTool(Name = "mcc_chunk_status"), Description("Get chunk loading status for the player location or an explicit world coordinate.")] - public object ChunkStatus(double? x = null, double? y = null, double? z = null) - { - return capabilities.GetChunkStatus(x, y, z); - } - - [McpServerTool(Name = "mcc_raycast_block"), Description("Raycast from the player's current view and return the first non-air block hit.")] - public object RaycastBlock(double maxDistance = 8.0, bool includeNeighbors = false) - { - return capabilities.RaycastBlock(maxDistance, includeNeighbors); - } - - [McpServerTool(Name = "mcc_path_preview"), Description("Compute a path preview to a target world coordinate without moving there.")] - public object PathPreview(double x, double y, double z, bool allowUnsafe = false, int maxOffset = 0, int minOffset = 0, int timeoutMs = 0, int maxWaypoints = 128) - { - return capabilities.PreviewPath(x, y, z, allowUnsafe, maxOffset, minOffset, timeoutMs, maxWaypoints); - } - - [McpServerTool(Name = "mcc_players_list"), Description("List currently known online players.")] - public object PlayersList() - { - return capabilities.GetPlayersList(); - } - - [McpServerTool(Name = "mcc_players_detailed"), Description("List online players with UUID, latency, gamemode, and tracked coordinates when available.")] - public object PlayersDetailed(bool includeSelf = false, bool includeCoordinates = true) - { - return capabilities.GetPlayersDetailed(includeSelf, includeCoordinates); - } - - [McpServerTool(Name = "mcc_player_stats"), Description("Get current controlled player stats, orientation, and location.")] - public object PlayerStats() - { - return capabilities.GetPlayerStats(); - } - - [McpServerTool(Name = "mcc_status_effects"), Description("Get active player status effects only.")] - public object StatusEffects() - { - return capabilities.GetStatusEffects(); - } - - [McpServerTool(Name = "mcc_recent_events"), Description("Get recent high-signal MCP runtime events after a given event ID.")] - public object RecentEvents(long afterId = 0, int maxCount = 50, string? typeFilter = null) - { - return capabilities.GetRecentEvents(afterId, maxCount, typeFilter); - } - - [McpServerTool(Name = "mcc_loaded_bots"), Description("List currently loaded MCC bots and scripts.")] - public object LoadedBots() - { - return capabilities.GetLoadedBots(); - } - - [McpServerTool(Name = "mcc_chat_history"), Description("Get recent chat/system lines seen by MCC.")] - public object ChatHistory(int maxCount = 50, bool includeJson = false) - { - return capabilities.GetChatHistory(maxCount, includeJson); - } - - [McpServerTool(Name = "mcc_internal_commands_list"), Description("List available MCC internal commands with usage and description.")] - public object InternalCommandsList() - { - return capabilities.GetInternalCommands(); - } - - [McpServerTool(Name = "mcc_agent_guidance"), Description("Get the canonical MCC MCP Operator Prompt bundle for external agents using this MCP server.")] - public object AgentGuidance() - { - return guidanceProvider.GetToolPayload(); - } - - [McpServerTool(Name = "mcc_materials_list"), Description("List known MCC material names with optional filtering.")] - public object MaterialsList(string? filter = null, int maxCount = 500) - { - return capabilities.GetMaterialsList(filter, maxCount); - } - - [McpServerTool(Name = "mcc_block_types_list"), Description("List known MCC block type names with optional filtering.")] - public object BlockTypesList(string? filter = null, int maxCount = 500) - { - return capabilities.GetBlockTypesList(filter, maxCount); - } - - [McpServerTool(Name = "mcc_entity_types_list"), Description("List known MCC entity type names with optional filtering.")] - public object EntityTypesList(string? filter = null, int maxCount = 500) - { - return capabilities.GetEntityTypesList(filter, maxCount); - } - - [McpServerTool(Name = "mcc_send_chat"), Description("Send chat text or slash-command to the connected Minecraft server.")] - public object SendChat([Description("Text to send to server chat.")] string text) - { - return capabilities.SendChat(text); - } - - [McpServerTool(Name = "mcc_quit_client"), Description("Quit MCC client process cleanly.")] - public object QuitClient() - { - return capabilities.QuitClient(); - } - - [McpServerTool(Name = "mcc_disconnect"), Description("Disconnect MCC from the current server without quitting the process.")] - public object Disconnect() - { - return capabilities.DisconnectClient(); - } - - [McpServerTool(Name = "mcc_respawn"), Description("Send the respawn packet when the controlled player is dead.")] - public object Respawn() - { - return capabilities.Respawn(); - } - - [McpServerTool(Name = "mcc_run_internal_command"), Description("Run an internal MCC command.")] - public object RunInternalCommand([Description("MCC command line without leading slash.")] string command) - { - return capabilities.RunInternalCommand(command); - } - - [McpServerTool(Name = "mcc_animation"), Description("Play a hand-swing animation with the selected hand.")] - public object Animation(string hand = "MainHand") - { - return capabilities.PlayAnimation(hand); - } - - [McpServerTool(Name = "mcc_toggle_sneak"), Description("Explicitly enable or disable sneaking.")] - public object ToggleSneak(bool enabled) - { - return capabilities.ToggleSneak(enabled); - } - - [McpServerTool(Name = "mcc_toggle_sprint"), Description("Explicitly send start or stop sprinting entity actions.")] - public object ToggleSprint(bool enabled) - { - return capabilities.ToggleSprint(enabled); - } - - [McpServerTool(Name = "mcc_change_hotbar_slot"), Description("Change active hotbar slot (1-9).")] - public object ChangeHotbarSlot(int slot) - { - return capabilities.ChangeHotbarSlot(slot); - } - - [McpServerTool(Name = "mcc_select_item"), Description("Select a hotbar item by item type without rearranging inventory contents.")] - public object SelectItem(string itemType, bool preferLowestSlot = true) - { - return capabilities.SelectHotbarItem(itemType, preferLowestSlot); - } - - [McpServerTool(Name = "mcc_use_item_on_hand"), Description("Use the currently held item.")] - public object UseItemOnHand() - { - return capabilities.UseItemOnHand(); - } - - [McpServerTool(Name = "mcc_use_item_on_block"), Description("Use currently held item on a target block location.")] - public object UseItemOnBlock(double x, double y, double z) - { - return capabilities.UseItemOnBlock(x, y, z); - } - - [McpServerTool(Name = "mcc_dig_block"), Description("Dig a block at target location.")] - public object DigBlock(double x, double y, double z, double durationSeconds = 0) - { - return capabilities.DigBlock(x, y, z, durationSeconds); - } - - [McpServerTool(Name = "mcc_place_block"), Description("Place the currently held block/item at a target block location.")] - public object PlaceBlock(int x, int y, int z, string face = "Up", string hand = "MainHand", bool lookAtBlock = false) - { - return capabilities.PlaceBlock(x, y, z, face, hand, lookAtBlock); - } - - [McpServerTool(Name = "mcc_entity_interact"), Description("Interact with a tracked entity.")] - public object EntityInteract(int entityId, string interaction = "Interact", string hand = "MainHand") - { - return capabilities.InteractEntity(entityId, interaction, hand); - } - - [McpServerTool(Name = "mcc_entity_attack"), Description("Attack a tracked entity explicitly.")] - public object EntityAttack(int entityId) - { - return capabilities.AttackEntity(entityId); - } - - [McpServerTool(Name = "mcc_block_scan"), Description("Scan nearby blocks around player location.")] - public object BlockScan(int radius = 3, int maxCount = 200, string? materialFilter = null) - { - return capabilities.ScanNearbyBlocks(radius, maxCount, materialFilter); - } - - [McpServerTool(Name = "mcc_blocks_find"), Description("Find nearby blocks by block name/type query or block ID.")] - public object BlocksFind(string? query = null, int radius = 6, int maxCount = 200, bool exactMatch = false) - { - return capabilities.FindBlocks(query, radius, maxCount, exactMatch); - } - - [McpServerTool(Name = "mcc_player_nearby"), Description("Check if any player, or a specific player, is nearby.")] - public object PlayerNearby(string? playerName = null, double radius = 32, bool includeSelf = false) - { - return capabilities.IsPlayerNearby(playerName, radius, includeSelf); - } - - [McpServerTool(Name = "mcc_player_locate"), Description("Locate a tracked player entity by name and return exact coordinates when available.")] - public object PlayerLocate(string playerName, bool includeSelf = false) - { - return capabilities.LocatePlayer(playerName, includeSelf); - } - - [McpServerTool(Name = "mcc_entity_nearest"), Description("Return the nearest tracked entity matching the requested filters.")] - public object EntityNearest(string? typeFilter = null, string? nameFilter = null, double radius = 64.0, bool includePlayers = true) - { - return capabilities.FindNearestEntity(typeFilter, nameFilter, radius, includePlayers); - } - - [McpServerTool(Name = "mcc_can_reach_position"), Description("Check whether MCC can currently path to a world coordinate without moving there.")] - public object CanReachPosition(double x, double y, double z, bool allowUnsafe = false, int maxOffset = 0, int minOffset = 0, int timeoutMs = 0) - { - return capabilities.CanReachPosition(x, y, z, allowUnsafe, maxOffset, minOffset, timeoutMs); - } - - [McpServerTool(Name = "mcc_move_to"), Description("Request movement/pathing to a world coordinate and verify arrival.")] - public object MoveTo(double x, double y, double z, bool allowUnsafe = false, bool allowDirectTeleport = false, int maxOffset = 0, int minOffset = 0, int timeoutMs = 0) - { - return capabilities.MoveTo(x, y, z, allowUnsafe, allowDirectTeleport, maxOffset, minOffset, timeoutMs); - } - - [McpServerTool(Name = "mcc_move_to_player"), Description("Locate a tracked player entity, request movement/pathing, and verify arrival.")] - public object MoveToPlayer(string playerName, bool allowUnsafe = false, bool allowDirectTeleport = false, int maxOffset = 0, int minOffset = 0, int timeoutMs = 0) - { - return capabilities.MoveToPlayer(playerName, allowUnsafe, allowDirectTeleport, maxOffset, minOffset, timeoutMs); - } - - [McpServerTool(Name = "mcc_look_at"), Description("Rotate player view toward world coordinates.")] - public object LookAt(double x, double y, double z) - { - return capabilities.LookAt(x, y, z); - } - - [McpServerTool(Name = "mcc_look_direction"), Description("Rotate player view to a cardinal direction or straight up/down.")] - public object LookDirection(string direction) - { - return capabilities.LookDirection(direction); - } - - [McpServerTool(Name = "mcc_look_angles"), Description("Rotate player view to explicit yaw and pitch angles.")] - public object LookAngles(float yaw, float pitch) - { - return capabilities.LookAngles(yaw, pitch); - } - - [McpServerTool(Name = "mcc_inventory_snapshot"), Description("Get a snapshot of one inventory.")] - public object InventorySnapshot([Description("Inventory ID. 0 is the player inventory.")] int inventoryId = 0) - { - return capabilities.GetInventorySnapshot(inventoryId); - } - - [McpServerTool(Name = "mcc_inventory_search"), Description("Search the player inventory and optionally open containers for items matching a query.")] - public object InventorySearch(string query, int maxCount = 100, bool exactMatch = false, bool includeContainers = true) - { - return capabilities.SearchInventories(query, maxCount, exactMatch, includeContainers); - } - - [McpServerTool(Name = "mcc_inventories_list"), Description("List currently open inventories and containers known to MCC.")] - public object InventoriesList() - { - return capabilities.ListInventories(); - } - - [McpServerTool(Name = "mcc_container_open_at"), Description("Open an interactable container block at world coordinates and wait for the container inventory to appear.")] - public object ContainerOpenAt(int x, int y, int z, int timeoutMs = 0, bool closeCurrent = true) - { - return capabilities.OpenContainerAt(x, y, z, timeoutMs, closeCurrent); - } - - [McpServerTool(Name = "mcc_container_close"), Description("Close an open non-player container. Use inventoryId=-1 to close the active container.")] - public object ContainerClose([Description("Container inventory ID, or -1 for the active non-player container.")] int inventoryId = -1, int timeoutMs = 0) - { - return capabilities.CloseContainer(inventoryId, timeoutMs); - } - - [McpServerTool(Name = "mcc_inventory_window_action"), Description("Perform a window action on an inventory slot.")] - public object InventoryWindowAction(int inventoryId, int slotId, [Description("WindowActionType enum name, e.g. LeftClick or ShiftClick.")] string actionType) - { - return capabilities.InventoryWindowAction(inventoryId, slotId, actionType); - } - - [McpServerTool(Name = "mcc_inventory_drop_item"), Description("Drop an exact item count from an inventory by item type.")] - public object InventoryDropItem( - [Description("Item type enum name (e.g. Diamond).")] string itemType, - [Description("Exact number of items to drop.")] int count, - [Description("Inventory ID. 0 is the player inventory.")] int inventoryId = 0, - [Description("Prefer dropping from larger stacks first when true.")] bool preferStack = false) - { - return capabilities.DropInventoryItem(itemType, count, inventoryId, preferStack); - } - - [McpServerTool(Name = "mcc_container_deposit_item"), Description("Move an exact item count from the player inventory into an open container and verify the transfer.")] - public object ContainerDepositItem( - [Description("Item type enum name (e.g. Diamond).")] string itemType, - [Description("Exact number of items to move into the container.")] int count, - [Description("Container inventory ID, or -1 for the active non-player container.")] int inventoryId = -1, - [Description("Prefer larger source stacks first when true.")] bool preferLargestStack = true) - { - return capabilities.DepositContainerItem(itemType, count, inventoryId, preferLargestStack); - } - - [McpServerTool(Name = "mcc_container_withdraw_item"), Description("Move an exact item count from an open container into the player inventory and verify the transfer.")] - public object ContainerWithdrawItem( - [Description("Item type enum name (e.g. Diamond).")] string itemType, - [Description("Exact number of items to move into the player inventory.")] int count, - [Description("Container inventory ID, or -1 for the active non-player container.")] int inventoryId = -1, - [Description("Prefer larger source stacks first when true.")] bool preferLargestStack = true) - { - return capabilities.WithdrawContainerItem(itemType, count, inventoryId, preferLargestStack); - } - - [McpServerTool(Name = "mcc_entities_query"), Description("Query tracked entities.")] - public object EntitiesQuery([Description("Maximum entities to return.")] int maxCount = 50) - { - return capabilities.QueryEntities(maxCount); - } - - [McpServerTool(Name = "mcc_entities_list"), Description("List tracked entities with optional type and radius filtering.")] - public object EntitiesList(int maxCount = 100, string? typeFilter = null, double radius = 0) - { - return capabilities.ListEntities(maxCount, typeFilter, radius); - } - - [McpServerTool(Name = "mcc_entity_info"), Description("Get detailed info for one tracked entity.")] - public object EntityInfo(int entityId, bool includeMetadata = false, bool includeEquipment = true, bool includeEffects = true) - { - return capabilities.GetEntityInfo(entityId, includeMetadata, includeEquipment, includeEffects); - } - - [McpServerTool(Name = "mcc_signs_find"), Description("Find nearby signs whose text exactly matches or contains the requested text.")] - public object SignsFind(string text, bool exactMatch = false, int radius = 16, int maxCount = 50, bool includeBackText = true) - { - return capabilities.FindSigns(text, exactMatch, radius, maxCount, includeBackText); - } - - [McpServerTool(Name = "mcc_items_list"), Description("List nearby dropped item entities with optional item type filtering.")] - public object ItemsList(string? itemType = null, double radius = 32, int maxCount = 100) - { - return capabilities.ListItemEntities(itemType, radius, maxCount); - } - - [McpServerTool(Name = "mcc_items_pickup"), Description("Move to and pick up nearby dropped items of a given item type.")] - public object ItemsPickup(string itemType, double radius = 32, int maxItems = 20, bool allowUnsafe = false, int timeoutMs = 0) - { - return capabilities.PickupItems(itemType, radius, maxItems, allowUnsafe, timeoutMs); - } - - [McpServerTool(Name = "mcc_world_block_at"), Description("Get block information at world coordinates.")] - public object WorldBlockAt(int x, int y, int z) - { - return capabilities.GetWorldBlockAt(x, y, z); - } -} diff --git a/MinecraftClient/Mcp/Prompts/MccMcpOperatorPrompt.md b/MinecraftClient/Mcp/Prompts/MccMcpOperatorPrompt.md deleted file mode 100644 index 7a24541de6..0000000000 --- a/MinecraftClient/Mcp/Prompts/MccMcpOperatorPrompt.md +++ /dev/null @@ -1,139 +0,0 @@ -# MCC MCP Operator Prompt - -Use the MCC MCP toolset as the source of truth for game state and action results. -Do not guess what happened from intent alone. -If tool results and fresh observations disagree, trust the freshest direct observation and report the conflict honestly. - -## Operating Loop - -1. Inspect the current situation before acting. -2. Make the shortest plan that can succeed. -3. Use the smallest set of high-signal tools needed to act. -4. Verify the outcome with fresh tool calls that read the state again after the action. -5. Report only what is verified, and clearly label anything inferred, conflicting, or still unknown. - -If the request is purely conversational and does not require MCC state, answer directly instead of wasting tool calls. -If the user asks for a before/after comparison, keep or obtain explicit before and after observations. If you do not have a verified baseline, say so instead of reconstructing history from memory. - -## Tool Selection Rules - -- Start with `mcc_session_status` whenever connection state, enabled capabilities, or feature availability is uncertain. -- Prefer direct inspection tools such as `mcc_world_state`, `mcc_chunk_status`, `mcc_player_state`, `mcc_player_stats`, `mcc_players_detailed`, `mcc_entities_list`, `mcc_entity_nearest`, `mcc_blocks_find`, `mcc_raycast_block`, `mcc_items_list`, `mcc_inventory_snapshot`, and `mcc_inventory_search` before taking physical actions. -- For player-relative tasks, prefer `mcc_player_locate` or `mcc_players_detailed` before movement so the target is grounded in a fresh tracked position. -- Prefer purpose-built action tools over low-level escape hatches. -- Prefer `mcc_container_open_at`, `mcc_container_deposit_item`, and `mcc_container_withdraw_item` over `mcc_inventory_window_action` for chest or container work. -- Use `mcc_path_preview`, `mcc_can_reach_position`, or a locating tool before pathing when reachability or final approach quality is uncertain. -- Use `mcc_select_item` instead of manual slot changes when the goal is "hold the right item now". -- Use `mcc_look_direction`, `mcc_look_angles`, or `mcc_look_at` before `mcc_raycast_block`, `mcc_use_item_on_block`, or precise block interaction when view direction matters. -- Use `mcc_recent_events` when verifying outcomes that should produce a clear runtime event, such as `inventory_open`, `inventory_close`, `death`, `respawn`, `title`, or `actionbar`. -- Use `mcc_status_effects` when active effects matter, instead of inferring them from health or movement behavior. -- Use `mcc_loaded_bots` when bot/script presence could affect observed behavior. -- For "give this item to that player" requests, remember there is usually no direct inventory-to-inventory transfer tool. The normal MCP-compatible handoff is to move near the player and drop the item near them unless a more specific interaction tool clearly applies. -- Use `mcc_run_internal_command` only when no purpose-built MCP tool covers the task cleanly. -- Treat `success=false`, `action_incomplete`, `capability_disabled`, `feature_disabled`, and `invalid_args` as failed or partial observations, not success. -- After `invalid_args`, simplify the call and try at most one nearby variant. Do not spam near-duplicate guesses. -- Do not repeat the same failing action over and over. If an action fails or arrives short, gather one new observation that changes the plan before retrying. - -## Verification Rules - -- World-state assumptions should be verified with `mcc_world_state` or `mcc_chunk_status` when chunk loading, dimension, or time/weather readiness affects the plan. -- When the user cares about deltas, keep explicit before and after evidence for the exact thing that changed. -- If an action tool reports success but a fresh observation disagrees, trust the fresh observation and report the action as failed, partial, or inconclusive. -- Movement is not complete just because a move request was accepted. Confirm `arrived=true` or verify the new location with a fresh state read. -- A later successful retry proves the final state, not that every earlier attempt also succeeded. -- A path preview is not proof of arrival. Treat `mcc_path_preview` as planning evidence only, then verify the actual move separately. -- Digging is not complete just because `mcc_dig_block` was invoked. Re-check the target block or nearby block search results. -- View-dependent block interaction should be verified with `mcc_raycast_block` or `mcc_world_block_at` before and after the action when precision matters. -- Item pickup is not complete just because the bot moved over an item. Re-check inventory state or nearby dropped-item entities. -- Hotbar selection is not complete just because `mcc_select_item` returned success. Confirm the selected slot or held state with `mcc_player_stats` or a fresh inventory read. -- Dropping an item is not fully verified from intent alone. Re-check the inventory with a fresh `mcc_inventory_snapshot`. When useful, also inspect nearby dropped-item entities with `mcc_items_list`. -- Removing an item from your inventory does not prove another player received it. It only proves the item left your inventory or moved elsewhere. Claim that you "gave" or "delivered" an item to a player only if the stronger claim is supported. Otherwise say that you dropped it near them. -- Container transfers are not complete just because a click or transfer request was accepted. Verify the resulting counts after the transfer. -- Entity targeting should be verified with `mcc_entity_nearest`, `mcc_entity_info`, or another fresh entity read if the target could have moved or despawned. -- Use `mcc_recent_events` to verify eventful outcomes such as inventory open/close, death, respawn, title/actionbar messages, or similar runtime signals. -- Chat or command effects should be verified through state changes, chat history, or another direct observation when possible. -- When evidence is partial, say exactly what was verified and what remains unverified. -- When observations conflict, report the conflict plainly instead of smoothing it over. - -## Best Practices - -- Query first, act second, verify third. -- Keep plans short and concrete. Long speculative tool chains usually make the result worse. -- Prefer high-signal tools that answer the real question directly. -- Prefer newer structured reads like `mcc_world_state`, `mcc_player_stats`, `mcc_players_detailed`, `mcc_inventory_search`, and `mcc_recent_events` when they answer the question more directly than older generic tools. -- Use structured inventory and container tools instead of raw slot manipulation whenever possible. -- Do not claim success from acceptance alone. Always pair actions with a follow-up observation. -- Use fresh post-action reads for high-value or irreversible actions such as dropping items, moving items between inventories, placing blocks, digging blocks, attacking entities, disconnecting, or quitting. -- Preserve baselines when the user is likely to ask "what changed?" or "what did you have before?" later. -- Distinguish verified facts, reasonable inferences, and unknowns in the final answer. -- Use precise verbs. "Moved near", "dropped", "opened", "deposited", "withdrew", and "picked up" are stronger and safer than vague success language. -- Reserve "gave to player", "delivered", or similar wording for cases where that stronger claim is actually supported by evidence. -- If a tool says a capability or feature is disabled, stop using tools from that category and explain the limitation. -- If a path fails or arrives short, revise the plan using the latest position instead of blindly retrying the same action. -- Use `mcc_quit_client` to stop MCC. Do not send bare `quit` or `exit` through chat. -- Keep the final response concise and grounded in the evidence you actually collected. - -## Example Scenarios - -### Move to a player and confirm proximity - -User intent: "Find Zarko and move near them." - -Good flow: -- call `mcc_player_locate` or `mcc_players_list` to confirm the player is known -- if needed, call `mcc_players_detailed` for exact coordinates and `mcc_path_preview` or `mcc_can_reach_position` for the target area -- call `mcc_move_to_player` -- verify `arrived=true` or confirm the new position with `mcc_player_stats` -- report whether proximity was verified or only partially achieved - -### Drop an item for a player and report the result honestly - -User intent: "Move to Zarko and give them one dirt." - -Good flow: -- call `mcc_player_locate` to ground the target player -- call `mcc_inventory_snapshot` or `mcc_inventory_search` if item availability is uncertain -- call `mcc_move_to_player` -- call `mcc_inventory_drop_item` -- verify the result with a fresh `mcc_inventory_snapshot` -- if useful, call `mcc_items_list` nearby to confirm a dropped item entity exists near the handoff location -- report "dropped 1 dirt near Zarko" unless you actually observed stronger delivery evidence such as pickup - -### Open a chest, move an exact item count, and verify the result - -User intent: "Put 5 diamonds in the chest at 11000 64 11021." - -Good flow: -- call `mcc_container_open_at` -- inspect current state with `mcc_inventory_search` or `mcc_inventory_snapshot` if item availability is unclear -- call `mcc_container_deposit_item` or `mcc_container_withdraw_item` -- verify the resulting counts from the transfer result and, when useful, a fresh inventory snapshot or `mcc_recent_events` -- report the exact verified delta, not just that the action was attempted - -### Collect nearby dropped items or dig target blocks and verify the outcome - -User intent: "Pick up nearby apples" or "Break those logs and collect them." - -Good flow: -- call `mcc_items_list`, `mcc_blocks_find`, or `mcc_raycast_block` to locate the target -- move only if the target is not already reachable from the current position -- call `mcc_items_pickup` for dropped items, or `mcc_dig_block` in a sensible order for blocks -- verify the result with `mcc_items_list`, `mcc_inventory_snapshot`, or a fresh block query -- if the result is partial, say what changed and what still remains - -### Answer a before/after question without inventing history - -User intent: "What changed after that action?" or "What did you have before?" - -Good flow: -- if you already captured before and after reads, compare them directly -- if you only have current state, say what is currently verified and explicitly note that the earlier baseline was not captured -- do not backfill a historical claim just because it would make the story sound consistent - -## Output Style - -- Lead with the outcome the user cares about. -- Include the small set of observations that justify the answer. -- If something failed, say what failed, what was verified anyway, and the next sensible step. -- If you dropped an item near a player but did not observe pickup, say exactly that. -- Do not embellish uncertain results. diff --git a/MinecraftClient/MinecraftClient.csproj b/MinecraftClient/MinecraftClient.csproj deleted file mode 100644 index 85d2374595..0000000000 --- a/MinecraftClient/MinecraftClient.csproj +++ /dev/null @@ -1,112 +0,0 @@ - - - net10.0 - Exe - publish\ - false - default - enable - true - true - - false - - - false - - - Resources\AppIcon.ico - - - MinecraftClient.Program - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - NU1701 - - - - - - - - - - - - - True - True - AsciiArt.resx - - - True - True - ConfigComments.resx - - - True - True - MinecraftAssets.resx - - - True - True - Translations.resx - - - - - ResXFileCodeGenerator - AsciiArt.Designer.cs - MinecraftClient - - - ResXFileCodeGenerator - ConfigComments.Designer.cs - MinecraftClient - - - ResXFileCodeGenerator - MinecraftAssets.Designer.cs - MinecraftClient - - - ResXFileCodeGenerator - Translations.Designer.cs - MinecraftClient - - - diff --git a/MinecraftClient/Physics/Aabb.cs b/MinecraftClient/Physics/Aabb.cs deleted file mode 100644 index 5ccff50249..0000000000 --- a/MinecraftClient/Physics/Aabb.cs +++ /dev/null @@ -1,195 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; - -namespace MinecraftClient.Physics -{ - /// - /// Axis-aligned bounding box, mirrors net.minecraft.world.phys.AABB. - /// Immutable — mutating methods return new instances. - /// - public readonly struct Aabb : IEquatable - { - public static readonly Aabb Empty = new(0, 0, 0, 0, 0, 0); - - public readonly double MinX, MinY, MinZ; - public readonly double MaxX, MaxY, MaxZ; - - public Aabb(double x1, double y1, double z1, double x2, double y2, double z2) - { - MinX = Math.Min(x1, x2); - MinY = Math.Min(y1, y2); - MinZ = Math.Min(z1, z2); - MaxX = Math.Max(x1, x2); - MaxY = Math.Max(y1, y2); - MaxZ = Math.Max(z1, z2); - } - - /// - /// Create a player-style AABB centered on feetX/Z with given width and height - /// - public static Aabb OfSize(double centerX, double feetY, double centerZ, double width, double height) - { - double hw = width / 2.0; - return new Aabb(centerX - hw, feetY, centerZ - hw, centerX + hw, feetY + height, centerZ + hw); - } - - /// - /// Full block AABB at given integer position - /// - public static Aabb BlockAt(int x, int y, int z) => - new(x, y, z, x + 1.0, y + 1.0, z + 1.0); - - public double XSize => MaxX - MinX; - public double YSize => MaxY - MinY; - public double ZSize => MaxZ - MinZ; - - public double Min(int axis) => axis switch { 0 => MinX, 1 => MinY, _ => MinZ }; - public double Max(int axis) => axis switch { 0 => MaxX, 1 => MaxY, _ => MaxZ }; - - /// - /// Expand toward a movement direction (vanilla expandTowards) - /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Aabb ExpandTowards(double dx, double dy, double dz) - { - double minX = MinX, minY = MinY, minZ = MinZ; - double maxX = MaxX, maxY = MaxY, maxZ = MaxZ; - if (dx < 0) minX += dx; else if (dx > 0) maxX += dx; - if (dy < 0) minY += dy; else if (dy > 0) maxY += dy; - if (dz < 0) minZ += dz; else if (dz > 0) maxZ += dz; - return new Aabb(minX, minY, minZ, maxX, maxY, maxZ); - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Aabb ExpandTowards(Vec3d v) => ExpandTowards(v.X, v.Y, v.Z); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Aabb Inflate(double x, double y, double z) => - new(MinX - x, MinY - y, MinZ - z, MaxX + x, MaxY + y, MaxZ + z); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Aabb Inflate(double v) => Inflate(v, v, v); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Aabb Deflate(double x, double y, double z) => Inflate(-x, -y, -z); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Aabb Move(double dx, double dy, double dz) => - new(MinX + dx, MinY + dy, MinZ + dz, MaxX + dx, MaxY + dy, MaxZ + dz); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Aabb Move(Vec3d v) => Move(v.X, v.Y, v.Z); - - /// - /// Strict overlap test (vanilla uses < and >, not <=) - /// - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public bool Intersects(Aabb other) => - MinX < other.MaxX && MaxX > other.MinX && - MinY < other.MaxY && MaxY > other.MinY && - MinZ < other.MaxZ && MaxZ > other.MinZ; - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public bool Intersects(double x1, double y1, double z1, double x2, double y2, double z2) => - MinX < x2 && MaxX > x1 && MinY < y2 && MaxY > y1 && MinZ < z2 && MaxZ > z1; - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public bool Contains(double x, double y, double z) => - x >= MinX && x < MaxX && y >= MinY && y < MaxY && z >= MinZ && z < MaxZ; - - /// - /// Collide this AABB along a single axis against another AABB. - /// Returns the clamped movement distance. - /// - /// - /// Clip entity movement along X against a block shape (other). - /// Vanilla semantics: VoxelShape.collide(Axis.X, entityBox, movement). - /// - public double CollideX(Aabb other, double movement) - { - if (other.MaxY <= MinY || other.MinY >= MaxY || other.MaxZ <= MinZ || other.MinZ >= MaxZ) - return movement; - if (movement > 0.0 && other.MinX >= MaxX) - { - double d = other.MinX - MaxX; - if (d < movement) movement = d; - } - else if (movement < 0.0 && other.MaxX <= MinX) - { - double d = other.MaxX - MinX; - if (d > movement) movement = d; - } - return movement; - } - - public double CollideY(Aabb other, double movement) - { - if (other.MaxX <= MinX || other.MinX >= MaxX || other.MaxZ <= MinZ || other.MinZ >= MaxZ) - return movement; - if (movement > 0.0 && other.MinY >= MaxY) - { - double d = other.MinY - MaxY; - if (d < movement) movement = d; - } - else if (movement < 0.0 && other.MaxY <= MinY) - { - double d = other.MaxY - MinY; - if (d > movement) movement = d; - } - return movement; - } - - public double CollideZ(Aabb other, double movement) - { - if (other.MaxX <= MinX || other.MinX >= MaxX || other.MaxY <= MinY || other.MinY >= MaxY) - return movement; - if (movement > 0.0 && other.MinZ >= MaxZ) - { - double d = other.MinZ - MaxZ; - if (d < movement) movement = d; - } - else if (movement < 0.0 && other.MaxZ <= MinZ) - { - double d = other.MaxZ - MinZ; - if (d > movement) movement = d; - } - return movement; - } - - /// - /// Collide along an axis (0=X, 1=Y, 2=Z) against another AABB - /// - public double Collide(int axis, Aabb other, double movement) - { - return axis switch - { - 0 => CollideX(other, movement), - 1 => CollideY(other, movement), - 2 => CollideZ(other, movement), - _ => movement - }; - } - - public Vec3d GetCenter() => new( - (MinX + MaxX) * 0.5, - (MinY + MaxY) * 0.5, - (MinZ + MaxZ) * 0.5); - - public Vec3d GetBottomCenter() => new( - (MinX + MaxX) * 0.5, - MinY, - (MinZ + MaxZ) * 0.5); - - public bool Equals(Aabb other) => - MinX == other.MinX && MinY == other.MinY && MinZ == other.MinZ && - MaxX == other.MaxX && MaxY == other.MaxY && MaxZ == other.MaxZ; - - public override bool Equals(object? obj) => obj is Aabb a && Equals(a); - public override int GetHashCode() => HashCode.Combine(MinX, MinY, MinZ, MaxX, MaxY, MaxZ); - public override string ToString() => $"AABB[{MinX:F3},{MinY:F3},{MinZ:F3} -> {MaxX:F3},{MaxY:F3},{MaxZ:F3}]"; - - public static bool operator ==(Aabb a, Aabb b) => a.Equals(b); - public static bool operator !=(Aabb a, Aabb b) => !a.Equals(b); - } -} diff --git a/MinecraftClient/Physics/BlockShapeData.json b/MinecraftClient/Physics/BlockShapeData.json deleted file mode 100644 index 71b589ffa2..0000000000 --- a/MinecraftClient/Physics/BlockShapeData.json +++ /dev/null @@ -1 +0,0 @@ -{"shapes":{"0":[],"1":[[0.0,0.0,0.0,1.0,1.0,1.0]],"2":[[0.0,0.0,0.0,0.1875,0.5625,0.1875],[0.8125,0.0,0.0,1.0,0.5625,0.1875],[0.0,0.1875,0.1875,1.0,0.5625,1.0],[0.1875,0.1875,0.0,0.8125,0.5625,0.1875]],"3":[[0.0,0.0,0.8125,0.1875,0.5625,1.0],[0.8125,0.0,0.8125,1.0,0.5625,1.0],[0.0,0.1875,0.0,1.0,0.5625,0.8125],[0.1875,0.1875,0.8125,0.8125,0.5625,1.0]],"4":[[0.0,0.0,0.0,0.1875,0.5625,0.1875],[0.0,0.0,0.8125,0.1875,0.5625,1.0],[0.0,0.1875,0.1875,1.0,0.5625,0.8125],[0.1875,0.1875,0.0,1.0,0.5625,0.1875],[0.1875,0.1875,0.8125,1.0,0.5625,1.0]],"5":[[0.8125,0.0,0.0,1.0,0.5625,0.1875],[0.8125,0.0,0.8125,1.0,0.5625,1.0],[0.0,0.1875,0.0,0.8125,0.5625,1.0],[0.8125,0.1875,0.1875,1.0,0.5625,0.8125]],"6":[[0.0,0.0,0.25,1.0,1.0,1.0]],"7":[[0.0,0.0,0.0,0.75,1.0,1.0]],"8":[[0.0,0.0,0.0,1.0,1.0,0.75]],"9":[[0.25,0.0,0.0,1.0,1.0,1.0]],"10":[[0.0,0.0,0.0,1.0,0.75,1.0]],"11":[[0.0,0.25,0.0,1.0,1.0,1.0]],"12":[[0.0,0.0,0.0,1.0,1.0,0.25],[0.375,0.375,0.25,0.625,0.625,1.0]],"13":[[0.0,0.0,0.0,1.0,1.0,0.25],[0.375,0.375,0.25,0.625,0.625,1.25]],"14":[[0.75,0.0,0.0,1.0,1.0,1.0],[0.0,0.375,0.375,0.75,0.625,0.625]],"15":[[0.75,0.0,0.0,1.0,1.0,1.0],[-0.25,0.375,0.375,0.75,0.625,0.625]],"16":[[0.0,0.0,0.75,1.0,1.0,1.0],[0.375,0.375,0.0,0.625,0.625,0.75]],"17":[[0.0,0.0,0.75,1.0,1.0,1.0],[0.375,0.375,-0.25,0.625,0.625,0.75]],"18":[[0.0,0.0,0.0,0.25,1.0,1.0],[0.25,0.375,0.375,1.0,0.625,0.625]],"19":[[0.0,0.0,0.0,0.25,1.0,1.0],[0.25,0.375,0.375,1.25,0.625,0.625]],"20":[[0.375,0.0,0.375,0.625,1.0,0.625],[0.0,0.75,0.0,0.375,1.0,1.0],[0.375,0.75,0.0,1.0,1.0,0.375],[0.375,0.75,0.625,1.0,1.0,1.0],[0.625,0.75,0.375,1.0,1.0,0.625]],"21":[[0.375,-0.25,0.375,0.625,1.0,0.625],[0.0,0.75,0.0,0.375,1.0,1.0],[0.375,0.75,0.0,1.0,1.0,0.375],[0.375,0.75,0.625,1.0,1.0,1.0],[0.625,0.75,0.375,1.0,1.0,0.625]],"22":[[0.0,0.0,0.0,1.0,0.25,1.0],[0.375,0.25,0.375,0.625,1.0,0.625]],"23":[[0.0,0.0,0.0,1.0,0.25,1.0],[0.375,0.25,0.375,0.625,1.25,0.625]],"24":[[0.0,0.0,0.6875,1.0,0.25,1.0],[0.0,0.25,0.8125,1.0,1.0,1.0],[0.0,0.75,0.6875,1.0,1.0,0.8125]],"25":[[0.0,0.0,0.0,1.0,0.25,0.3125],[0.0,0.25,0.0,1.0,1.0,0.1875],[0.0,0.75,0.1875,1.0,1.0,0.3125]],"26":[[0.6875,0.0,0.0,1.0,0.25,1.0],[0.8125,0.25,0.0,1.0,1.0,1.0],[0.6875,0.75,0.0,0.8125,1.0,1.0]],"27":[[0.0,0.0,0.0,0.3125,0.25,1.0],[0.0,0.25,0.0,0.1875,1.0,1.0],[0.1875,0.75,0.0,0.3125,1.0,1.0]],"28":[[0.0,0.0,0.0,1.0,1.0,0.5],[0.0,0.5,0.5,1.0,1.0,1.0]],"29":[[0.0,0.0,0.0,0.5,1.0,1.0],[0.5,0.0,0.0,1.0,1.0,0.5],[0.5,0.5,0.5,1.0,1.0,1.0]],"30":[[0.0,0.0,0.0,1.0,1.0,0.5],[0.5,0.0,0.5,1.0,1.0,1.0],[0.0,0.5,0.5,0.5,1.0,1.0]],"31":[[0.0,0.0,0.0,0.5,1.0,0.5],[0.0,0.5,0.5,1.0,1.0,1.0],[0.5,0.5,0.0,1.0,1.0,0.5]],"32":[[0.5,0.0,0.0,1.0,1.0,0.5],[0.0,0.5,0.0,0.5,1.0,1.0],[0.5,0.5,0.5,1.0,1.0,1.0]],"33":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,1.0,1.0,0.5]],"34":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,0.5,1.0,1.0],[0.5,0.5,0.0,1.0,1.0,0.5]],"35":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,1.0,1.0,0.5],[0.5,0.5,0.5,1.0,1.0,1.0]],"36":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,0.5,1.0,0.5]],"37":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.5,0.5,0.0,1.0,1.0,0.5]],"38":[[0.0,0.0,0.5,1.0,1.0,1.0],[0.0,0.5,0.0,1.0,1.0,0.5]],"39":[[0.0,0.0,0.5,1.0,1.0,1.0],[0.5,0.0,0.0,1.0,1.0,0.5],[0.0,0.5,0.0,0.5,1.0,0.5]],"40":[[0.0,0.0,0.0,0.5,1.0,1.0],[0.5,0.0,0.5,1.0,1.0,1.0],[0.5,0.5,0.0,1.0,1.0,0.5]],"41":[[0.5,0.0,0.5,1.0,1.0,1.0],[0.0,0.5,0.0,0.5,1.0,1.0],[0.5,0.5,0.0,1.0,1.0,0.5]],"42":[[0.0,0.0,0.5,0.5,1.0,1.0],[0.0,0.5,0.0,1.0,1.0,0.5],[0.5,0.5,0.5,1.0,1.0,1.0]],"43":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.5,1.0,1.0,1.0]],"44":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.5,1.0,1.0,1.0],[0.5,0.5,0.0,1.0,1.0,0.5]],"45":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,0.5,1.0,1.0],[0.5,0.5,0.5,1.0,1.0,1.0]],"46":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.5,0.5,0.5,1.0,1.0,1.0]],"47":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.5,0.5,1.0,1.0]],"48":[[0.0,0.0,0.0,0.5,1.0,1.0],[0.5,0.5,0.0,1.0,1.0,1.0]],"49":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.0,0.5,0.0,0.5,1.0,1.0]],"50":[[0.5,0.0,0.0,1.0,1.0,1.0],[0.0,0.5,0.0,0.5,1.0,1.0]],"51":[[0.0,0.0,0.0,1.0,0.5,1.0],[0.5,0.5,0.0,1.0,1.0,1.0]],"52":[[0.0625,0.0,0.0625,0.9375,0.875,0.9375]],"53":[[0.0625,0.0,0.0625,1.0,0.875,0.9375]],"54":[[0.0,0.0,0.0625,0.9375,0.875,0.9375]],"55":[[0.0625,0.0,0.0,0.9375,0.875,0.9375]],"56":[[0.0625,0.0,0.0625,0.9375,0.875,1.0]],"57":[[0.0,0.0,0.0,1.0,0.9375,1.0]],"58":[[0.0,0.0,0.0,0.1875,1.0,1.0]],"59":[[0.0,0.0,0.8125,1.0,1.0,1.0]],"60":[[0.8125,0.0,0.0,1.0,1.0,1.0]],"61":[[0.0,0.0,0.0,1.0,1.0,0.1875]],"62":[[0.0,0.0,0.8125,1.0,1.0,1.0]],"63":[[0.0,0.0,0.0,1.0,1.0,0.1875]],"64":[[0.8125,0.0,0.0,1.0,1.0,1.0]],"65":[[0.0,0.0,0.0,0.1875,1.0,1.0]],"66":[[0.0,0.875,0.375,1.0,1.0,0.625]],"67":[[0.375,0.875,0.0,0.625,1.0,1.0]],"68":[[0.0,0.0,0.0,1.0,0.125,1.0]],"69":[[0.0,0.0,0.0,1.0,0.25,1.0]],"70":[[0.0,0.0,0.0,1.0,0.375,1.0]],"71":[[0.0,0.0,0.0,1.0,0.5,1.0]],"72":[[0.0,0.0,0.0,1.0,0.625,1.0]],"73":[[0.0,0.0,0.0,1.0,0.75,1.0]],"74":[[0.0,0.0,0.0,1.0,0.875,1.0]],"75":[[0.0625,0.0,0.0625,0.9375,0.9375,0.9375]],"76":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"77":[[0.375,0.0,0.0,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"78":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"79":[[0.375,0.0,0.0,0.625,1.5,0.625],[0.625,0.0,0.375,1.0,1.5,0.625]],"80":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"81":[[0.375,0.0,0.375,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"82":[[0.0,0.0,0.375,1.0,1.5,0.625]],"83":[[0.375,0.0,0.375,1.0,1.5,0.625]],"84":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"85":[[0.375,0.0,0.0,0.625,1.5,1.0]],"86":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"87":[[0.375,0.0,0.0,0.625,1.5,0.625]],"88":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"89":[[0.375,0.0,0.375,0.625,1.5,1.0]],"90":[[0.0,0.0,0.375,0.625,1.5,0.625]],"91":[[0.375,0.0,0.375,0.625,1.5,0.625]],"92":[[0.0,0.0,0.0,1.0,0.875,1.0]],"93":[[0.0625,0.0,0.0625,0.9375,0.5,0.9375]],"94":[[0.1875,0.0,0.0625,0.9375,0.5,0.9375]],"95":[[0.3125,0.0,0.0625,0.9375,0.5,0.9375]],"96":[[0.4375,0.0,0.0625,0.9375,0.5,0.9375]],"97":[[0.5625,0.0,0.0625,0.9375,0.5,0.9375]],"98":[[0.6875,0.0,0.0625,0.9375,0.5,0.9375]],"99":[[0.8125,0.0,0.0625,0.9375,0.5,0.9375]],"100":[[0.0,0.0,0.0,1.0,0.125,1.0]],"101":[[0.0,0.0,0.8125,1.0,1.0,1.0]],"102":[[0.0,0.8125,0.0,1.0,1.0,1.0]],"103":[[0.0,0.0,0.0,1.0,0.1875,1.0]],"104":[[0.0,0.0,0.0,1.0,1.0,0.1875]],"105":[[0.8125,0.0,0.0,1.0,1.0,1.0]],"106":[[0.0,0.0,0.0,0.1875,1.0,1.0]],"107":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"108":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"109":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"110":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"111":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"112":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"113":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"114":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"115":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"116":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"117":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"118":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"119":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"120":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"121":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"122":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"123":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"124":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"125":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"126":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"127":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"128":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"129":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"130":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"131":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"132":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"133":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"134":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"135":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"136":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"137":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"138":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"139":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"140":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"141":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"142":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"143":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"144":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"145":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"146":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"147":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"148":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"149":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"150":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"151":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"152":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"153":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"154":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"155":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"156":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"157":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"158":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"159":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"160":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"161":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"162":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"163":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"164":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"165":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"166":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"167":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"168":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"169":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"170":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"171":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"172":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"173":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"174":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"175":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"176":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"177":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"178":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"179":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"180":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"181":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"182":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"183":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"184":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"185":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"186":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"187":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"188":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"189":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"190":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"191":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"192":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"193":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"194":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"195":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"196":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"197":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"198":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"199":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"200":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"201":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"202":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"203":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"204":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"205":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"206":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"207":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"208":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"209":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"210":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"211":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"212":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"213":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"214":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"215":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"216":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"217":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"218":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"219":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"220":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"221":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"222":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"223":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"224":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"225":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"226":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"227":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"228":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"229":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"230":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"231":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"232":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"233":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"234":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"235":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"236":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"237":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"238":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"239":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"240":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"241":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"242":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"243":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"244":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"245":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"246":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"247":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"248":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"249":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"250":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"251":[[0.0,0.40625,0.40625,1.0,0.59375,0.59375]],"252":[[0.40625,0.0,0.40625,0.59375,1.0,0.59375]],"253":[[0.40625,0.40625,0.0,0.59375,0.59375,1.0]],"254":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"255":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"256":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"257":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"258":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"259":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"260":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"261":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"262":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"263":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"264":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"265":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"266":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"267":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"268":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"269":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"270":[[0.0,0.0,0.375,1.0,1.5,0.625]],"271":[[0.375,0.0,0.0,0.625,1.5,1.0]],"272":[[0.0625,0.0,0.0625,0.9375,0.09375,0.9375]],"273":[[0.0,0.5,0.0,1.0,1.0,1.0]],"274":[[0.0,0.0,0.0,1.0,0.5,1.0]],"275":[[0.25,0.0,0.25,0.75,1.5,0.75]],"276":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"277":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"278":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"279":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"280":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"281":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"282":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"283":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"284":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"285":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"286":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"287":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"288":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"289":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"290":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"291":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"292":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"293":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"294":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"295":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"296":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"297":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"298":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"299":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"300":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"301":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"302":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"303":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"304":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"305":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"306":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"307":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"308":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"309":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"310":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"311":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"312":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"313":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"314":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"315":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"316":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"317":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"318":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"319":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"320":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"321":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"322":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"323":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"324":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"325":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"326":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"327":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"328":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"329":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"330":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"331":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"332":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"333":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"334":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"335":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"336":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"337":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"338":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"339":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"340":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"341":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"342":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"343":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"344":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"345":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"346":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"347":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"348":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"349":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"350":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"351":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"352":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"353":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"354":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"355":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"356":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"357":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"358":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"359":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"360":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"361":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"362":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"363":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"364":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"365":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"366":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"367":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"368":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"369":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"370":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"371":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"372":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"373":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"374":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"375":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"376":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"377":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"378":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"379":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"380":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"381":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"382":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"383":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"384":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"385":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"386":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"387":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"388":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"389":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"390":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"391":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"392":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"393":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"394":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"395":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"396":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"397":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"398":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"399":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"400":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"401":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"402":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"403":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"404":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"405":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"406":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"407":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"408":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"409":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"410":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"411":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"412":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"413":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"414":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"415":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"416":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"417":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"418":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"419":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"420":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"421":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"422":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"423":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"424":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"425":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"426":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"427":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"428":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"429":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"430":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"431":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"432":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"433":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"434":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"435":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"436":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"437":[[0.375,0.0,0.0,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"438":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"439":[[0.375,0.0,0.0,0.625,1.5,0.625],[0.625,0.0,0.375,1.0,1.5,0.625]],"440":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"441":[[0.375,0.0,0.375,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"442":[[0.0,0.0,0.375,1.0,1.5,0.625]],"443":[[0.375,0.0,0.375,1.0,1.5,0.625]],"444":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"445":[[0.375,0.0,0.0,0.625,1.5,1.0]],"446":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"447":[[0.375,0.0,0.0,0.625,1.5,0.625]],"448":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"449":[[0.375,0.0,0.375,0.625,1.5,1.0]],"450":[[0.0,0.0,0.375,0.625,1.5,0.625]],"451":[[0.375,0.0,0.375,0.625,1.5,0.625]],"452":[[0.0,0.0,0.0,1.0,0.75,1.0]],"453":[[0.0625,0.0,0.0625,0.9375,0.125,0.9375],[0.4375,0.125,0.4375,0.5625,0.875,0.5625]],"454":[[0.0,0.0,0.0,0.125,1.0,0.25],[0.0,0.0,0.75,0.125,1.0,1.0],[0.125,0.0,0.0,0.25,1.0,0.125],[0.125,0.0,0.875,0.25,1.0,1.0],[0.75,0.0,0.0,1.0,1.0,0.125],[0.75,0.0,0.875,1.0,1.0,1.0],[0.875,0.0,0.125,1.0,1.0,0.25],[0.875,0.0,0.75,1.0,1.0,0.875],[0.0,0.1875,0.25,1.0,0.25,0.75],[0.125,0.1875,0.125,0.875,0.25,0.25],[0.125,0.1875,0.75,0.875,0.25,0.875],[0.25,0.1875,0.0,0.75,1.0,0.125],[0.25,0.1875,0.875,0.75,1.0,1.0],[0.0,0.25,0.25,0.125,1.0,0.75],[0.875,0.25,0.25,1.0,1.0,0.75]],"455":[[0.0,0.0,0.0,1.0,0.8125,1.0],[0.25,0.8125,0.25,0.75,1.0,0.75]],"456":[[0.0,0.0,0.0,1.0,0.8125,1.0]],"457":[[0.0625,0.0,0.0625,0.9375,1.0,0.9375]],"458":[[0.375,0.4375,0.0625,0.625,0.75,0.3125]],"459":[[0.375,0.4375,0.6875,0.625,0.75,0.9375]],"460":[[0.0625,0.4375,0.375,0.3125,0.75,0.625]],"461":[[0.6875,0.4375,0.375,0.9375,0.75,0.625]],"462":[[0.3125,0.3125,0.0625,0.6875,0.75,0.4375]],"463":[[0.3125,0.3125,0.5625,0.6875,0.75,0.9375]],"464":[[0.0625,0.3125,0.3125,0.4375,0.75,0.6875]],"465":[[0.5625,0.3125,0.3125,0.9375,0.75,0.6875]],"466":[[0.25,0.1875,0.0625,0.75,0.75,0.5625]],"467":[[0.25,0.1875,0.4375,0.75,0.75,0.9375]],"468":[[0.0625,0.1875,0.25,0.5625,0.75,0.75]],"469":[[0.4375,0.1875,0.25,0.9375,0.75,0.75]],"470":[[0.0625,0.0,0.0625,0.9375,0.875,0.9375]],"471":[[0.25,0.0,0.25,0.75,1.5,0.75]],"472":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"473":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"474":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"475":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"476":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"477":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"478":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"479":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"480":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"481":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"482":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"483":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"484":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"485":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"486":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"487":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"488":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"489":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"490":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"491":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"492":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"493":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"494":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"495":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"496":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"497":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"498":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"499":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"500":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"501":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"502":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"503":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"504":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"505":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"506":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"507":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"508":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"509":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"510":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"511":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"512":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"513":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"514":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"515":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"516":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"517":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"518":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"519":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"520":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"521":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"522":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"523":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"524":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"525":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"526":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"527":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"528":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"529":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"530":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"531":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"532":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"533":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"534":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"535":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"536":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"537":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"538":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"539":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"540":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"541":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"542":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"543":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"544":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"545":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"546":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"547":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"548":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"549":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"550":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"551":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"552":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"553":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"554":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"555":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"556":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"557":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"558":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"559":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"560":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"561":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"562":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"563":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"564":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"565":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"566":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"567":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"568":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"569":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"570":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"571":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"572":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"573":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"574":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"575":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"576":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"577":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"578":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"579":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"580":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"581":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"582":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"583":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"584":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"585":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"586":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"587":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"588":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"589":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"590":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"591":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"592":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"593":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"594":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"595":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"596":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"597":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"598":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"599":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"600":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"601":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"602":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"603":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"604":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"605":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"606":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"607":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"608":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"609":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"610":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"611":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"612":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"613":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"614":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"615":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"616":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"617":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"618":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"619":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"620":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"621":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"622":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"623":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"624":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"625":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"626":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"627":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"628":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"629":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"630":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"631":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"632":[[0.25,0.0,0.25,0.75,1.5,0.75]],"633":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"634":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"635":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"636":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"637":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"638":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"639":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"640":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"641":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"642":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"643":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"644":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"645":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"646":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"647":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"648":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"649":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"650":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"651":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"652":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"653":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"654":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"655":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"656":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"657":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"658":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"659":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"660":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"661":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"662":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"663":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"664":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"665":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"666":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"667":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"668":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"669":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"670":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"671":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"672":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"673":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"674":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"675":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"676":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"677":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"678":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"679":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"680":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"681":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"682":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"683":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"684":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"685":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"686":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"687":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"688":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"689":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"690":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"691":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"692":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"693":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"694":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"695":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"696":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"697":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"698":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"699":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"700":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"701":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"702":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"703":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"704":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"705":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"706":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"707":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"708":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"709":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"710":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"711":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"712":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"713":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"714":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"715":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"716":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"717":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"718":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"719":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"720":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"721":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"722":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"723":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"724":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"725":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"726":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"727":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"728":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"729":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"730":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"731":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"732":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"733":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"734":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"735":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"736":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"737":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"738":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"739":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"740":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"741":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"742":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"743":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"744":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"745":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"746":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"747":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"748":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"749":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"750":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"751":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"752":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"753":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"754":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"755":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"756":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"757":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"758":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"759":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"760":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"761":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"762":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"763":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"764":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"765":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"766":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"767":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"768":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"769":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"770":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"771":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"772":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"773":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"774":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"775":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"776":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"777":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"778":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"779":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"780":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"781":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"782":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"783":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"784":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"785":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"786":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"787":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"788":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"789":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"790":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"791":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"792":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"793":[[0.3125,0.0,0.3125,0.6875,0.375,0.6875]],"794":[[0.25,0.0,0.25,0.75,0.5,0.75]],"795":[[0.25,0.25,0.5,0.75,0.75,1.0]],"796":[[0.25,0.25,0.0,0.75,0.75,0.5]],"797":[[0.5,0.25,0.25,1.0,0.75,0.75]],"798":[[0.0,0.25,0.25,0.5,0.75,0.75]],"799":[[0.1875,0.0,0.1875,0.8125,0.5,0.8125]],"800":[[0.1875,0.25,0.5,0.8125,0.75,1.0]],"801":[[0.1875,0.25,0.0,0.8125,0.75,0.5]],"802":[[0.5,0.25,0.1875,1.0,0.75,0.8125]],"803":[[0.0,0.25,0.1875,0.5,0.75,0.8125]],"804":[[0.125,0.0,0.125,0.875,0.25,0.875],[0.25,0.25,0.1875,0.75,0.3125,0.8125],[0.375,0.3125,0.25,0.625,1.0,0.75],[0.1875,0.625,0.0,0.375,1.0,1.0],[0.375,0.625,0.0,0.8125,1.0,0.25],[0.375,0.625,0.75,0.8125,1.0,1.0],[0.625,0.625,0.25,0.8125,1.0,0.75]],"805":[[0.125,0.0,0.125,0.875,0.25,0.875],[0.1875,0.25,0.25,0.8125,0.3125,0.75],[0.25,0.3125,0.375,0.75,1.0,0.625],[0.0,0.625,0.1875,0.25,1.0,0.8125],[0.25,0.625,0.1875,1.0,1.0,0.375],[0.25,0.625,0.625,1.0,1.0,0.8125],[0.75,0.625,0.375,1.0,1.0,0.625]],"806":[[0.0,0.0,0.0,1.0,0.375,1.0]],"807":[[0.375,0.0,0.375,0.625,0.6875,0.625],[0.25,0.25,0.25,0.375,0.6875,0.75],[0.375,0.25,0.25,0.75,0.6875,0.375],[0.375,0.25,0.625,0.75,0.6875,0.75],[0.625,0.25,0.375,0.75,0.6875,0.625],[0.0,0.625,0.0,0.25,0.6875,1.0],[0.25,0.625,0.0,1.0,0.6875,0.25],[0.25,0.625,0.75,1.0,0.6875,1.0],[0.75,0.625,0.25,1.0,0.6875,0.75],[0.0,0.6875,0.0,0.125,1.0,1.0],[0.125,0.6875,0.0,1.0,1.0,0.125],[0.125,0.6875,0.875,1.0,1.0,1.0],[0.875,0.6875,0.125,1.0,1.0,0.875]],"808":[[0.25,0.25,0.25,0.75,0.6875,0.75],[0.375,0.25,0.0,0.625,0.5,0.25],[0.0,0.625,0.0,0.25,0.6875,1.0],[0.25,0.625,0.0,1.0,0.6875,0.25],[0.25,0.625,0.75,1.0,0.6875,1.0],[0.75,0.625,0.25,1.0,0.6875,0.75],[0.0,0.6875,0.0,0.125,1.0,1.0],[0.125,0.6875,0.0,1.0,1.0,0.125],[0.125,0.6875,0.875,1.0,1.0,1.0],[0.875,0.6875,0.125,1.0,1.0,0.875]],"809":[[0.25,0.25,0.25,0.75,0.6875,0.75],[0.375,0.25,0.75,0.625,0.5,1.0],[0.0,0.625,0.0,0.25,0.6875,1.0],[0.25,0.625,0.0,1.0,0.6875,0.25],[0.25,0.625,0.75,1.0,0.6875,1.0],[0.75,0.625,0.25,1.0,0.6875,0.75],[0.0,0.6875,0.0,0.125,1.0,1.0],[0.125,0.6875,0.0,1.0,1.0,0.125],[0.125,0.6875,0.875,1.0,1.0,1.0],[0.875,0.6875,0.125,1.0,1.0,0.875]],"810":[[0.0,0.25,0.375,0.75,0.5,0.625],[0.25,0.25,0.25,0.75,0.6875,0.375],[0.25,0.25,0.625,0.75,0.6875,0.75],[0.25,0.5,0.375,0.75,0.6875,0.625],[0.0,0.625,0.0,0.25,0.6875,1.0],[0.25,0.625,0.0,1.0,0.6875,0.25],[0.25,0.625,0.75,1.0,0.6875,1.0],[0.75,0.625,0.25,1.0,0.6875,0.75],[0.0,0.6875,0.0,0.125,1.0,1.0],[0.125,0.6875,0.0,1.0,1.0,0.125],[0.125,0.6875,0.875,1.0,1.0,1.0],[0.875,0.6875,0.125,1.0,1.0,0.875]],"811":[[0.25,0.25,0.25,0.75,0.6875,0.75],[0.75,0.25,0.375,1.0,0.5,0.625],[0.0,0.625,0.0,0.25,0.6875,1.0],[0.25,0.625,0.0,1.0,0.6875,0.25],[0.25,0.625,0.75,1.0,0.6875,1.0],[0.75,0.625,0.25,1.0,0.6875,0.75],[0.0,0.6875,0.0,0.125,1.0,1.0],[0.125,0.6875,0.0,1.0,1.0,0.125],[0.125,0.6875,0.875,1.0,1.0,1.0],[0.875,0.6875,0.125,1.0,1.0,0.875]],"812":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"813":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"814":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"815":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"816":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"817":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"818":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"819":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"820":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"821":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"822":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"823":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"824":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"825":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"826":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"827":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"828":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"829":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"830":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"831":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"832":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"833":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"834":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"835":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"836":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"837":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"838":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"839":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"840":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"841":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"842":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"843":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"844":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"845":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"846":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"847":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"848":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"849":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"850":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"851":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"852":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"853":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"854":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"855":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"856":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"857":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"858":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"859":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"860":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"861":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"862":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"863":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"864":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"865":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"866":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"867":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"868":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"869":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"870":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"871":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"872":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"873":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"874":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"875":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"876":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"877":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"878":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"879":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"880":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"881":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"882":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"883":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"884":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"885":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"886":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"887":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"888":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"889":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"890":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"891":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"892":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"893":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"894":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"895":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"896":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"897":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"898":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"899":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"900":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"901":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"902":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"903":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"904":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"905":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"906":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"907":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"908":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"909":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"910":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"911":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"912":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"913":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"914":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"915":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"916":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"917":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"918":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"919":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"920":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"921":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"922":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"923":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"924":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"925":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"926":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"927":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"928":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"929":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"930":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"931":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"932":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"933":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"934":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"935":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"936":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"937":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"938":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"939":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"940":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"941":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"942":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"943":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"944":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"945":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"946":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"947":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"948":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"949":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"950":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"951":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"952":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"953":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"954":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"955":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"956":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"957":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"958":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"959":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"960":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"961":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"962":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"963":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"964":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"965":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"966":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"967":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"968":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"969":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"970":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"971":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"972":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"973":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"974":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"975":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"976":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"977":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"978":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"979":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"980":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"981":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"982":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"983":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"984":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"985":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"986":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"987":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"988":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"989":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"990":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"991":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"992":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"993":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"994":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"995":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"996":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"997":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"998":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"999":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"1000":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1001":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"1002":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"1003":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"1004":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1005":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"1006":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"1007":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"1008":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1009":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"1010":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"1011":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"1012":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1013":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"1014":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"1015":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"1016":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1017":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"1018":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"1019":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"1020":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1021":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"1022":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"1023":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"1024":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1025":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"1026":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"1027":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"1028":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1029":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"1030":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"1031":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"1032":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1033":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"1034":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"1035":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"1036":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1037":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"1038":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"1039":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"1040":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1041":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"1042":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"1043":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"1044":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1045":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"1046":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"1047":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"1048":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1049":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"1050":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"1051":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"1052":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1053":[[0.4375,0.0,0.0,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"1054":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"1055":[[0.4375,0.0,0.0,0.5625,1.0,0.5625],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"1056":[[0.0,0.0,0.4375,1.0,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1057":[[0.4375,0.0,0.4375,0.5625,1.0,1.0],[0.5625,0.0,0.4375,1.0,1.0,0.5625]],"1058":[[0.0,0.0,0.4375,1.0,1.0,0.5625]],"1059":[[0.4375,0.0,0.4375,1.0,1.0,0.5625]],"1060":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1061":[[0.4375,0.0,0.0,0.5625,1.0,1.0]],"1062":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.0,0.5625,1.0,0.4375]],"1063":[[0.4375,0.0,0.0,0.5625,1.0,0.5625]],"1064":[[0.0,0.0,0.4375,0.5625,1.0,0.5625],[0.4375,0.0,0.5625,0.5625,1.0,1.0]],"1065":[[0.4375,0.0,0.4375,0.5625,1.0,1.0]],"1066":[[0.0,0.0,0.4375,0.5625,1.0,0.5625]],"1067":[[0.4375,0.0,0.4375,0.5625,1.0,0.5625]],"1068":[[0.0,0.0,0.0,1.0,0.0625,1.0]],"1069":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1070":[[0.375,0.0,0.0,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1071":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1072":[[0.375,0.0,0.0,0.625,1.5,0.625],[0.625,0.0,0.375,1.0,1.5,0.625]],"1073":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1074":[[0.375,0.0,0.375,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1075":[[0.0,0.0,0.375,1.0,1.5,0.625]],"1076":[[0.375,0.0,0.375,1.0,1.5,0.625]],"1077":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1078":[[0.375,0.0,0.0,0.625,1.5,1.0]],"1079":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1080":[[0.375,0.0,0.0,0.625,1.5,0.625]],"1081":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1082":[[0.375,0.0,0.375,0.625,1.5,1.0]],"1083":[[0.0,0.0,0.375,0.625,1.5,0.625]],"1084":[[0.375,0.0,0.375,0.625,1.5,0.625]],"1085":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1086":[[0.375,0.0,0.0,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1087":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1088":[[0.375,0.0,0.0,0.625,1.5,0.625],[0.625,0.0,0.375,1.0,1.5,0.625]],"1089":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1090":[[0.375,0.0,0.375,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1091":[[0.0,0.0,0.375,1.0,1.5,0.625]],"1092":[[0.375,0.0,0.375,1.0,1.5,0.625]],"1093":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1094":[[0.375,0.0,0.0,0.625,1.5,1.0]],"1095":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1096":[[0.375,0.0,0.0,0.625,1.5,0.625]],"1097":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1098":[[0.375,0.0,0.375,0.625,1.5,1.0]],"1099":[[0.0,0.0,0.375,0.625,1.5,0.625]],"1100":[[0.375,0.0,0.375,0.625,1.5,0.625]],"1101":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1102":[[0.375,0.0,0.0,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1103":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1104":[[0.375,0.0,0.0,0.625,1.5,0.625],[0.625,0.0,0.375,1.0,1.5,0.625]],"1105":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1106":[[0.375,0.0,0.375,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1107":[[0.0,0.0,0.375,1.0,1.5,0.625]],"1108":[[0.375,0.0,0.375,1.0,1.5,0.625]],"1109":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1110":[[0.375,0.0,0.0,0.625,1.5,1.0]],"1111":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1112":[[0.375,0.0,0.0,0.625,1.5,0.625]],"1113":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1114":[[0.375,0.0,0.375,0.625,1.5,1.0]],"1115":[[0.0,0.0,0.375,0.625,1.5,0.625]],"1116":[[0.375,0.0,0.375,0.625,1.5,0.625]],"1117":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1118":[[0.375,0.0,0.0,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1119":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1120":[[0.375,0.0,0.0,0.625,1.5,0.625],[0.625,0.0,0.375,1.0,1.5,0.625]],"1121":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1122":[[0.375,0.0,0.375,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1123":[[0.0,0.0,0.375,1.0,1.5,0.625]],"1124":[[0.375,0.0,0.375,1.0,1.5,0.625]],"1125":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1126":[[0.375,0.0,0.0,0.625,1.5,1.0]],"1127":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1128":[[0.375,0.0,0.0,0.625,1.5,0.625]],"1129":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1130":[[0.375,0.0,0.375,0.625,1.5,1.0]],"1131":[[0.0,0.0,0.375,0.625,1.5,0.625]],"1132":[[0.375,0.0,0.375,0.625,1.5,0.625]],"1133":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1134":[[0.375,0.0,0.0,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1135":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1136":[[0.375,0.0,0.0,0.625,1.5,0.625],[0.625,0.0,0.375,1.0,1.5,0.625]],"1137":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1138":[[0.375,0.0,0.375,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1139":[[0.0,0.0,0.375,1.0,1.5,0.625]],"1140":[[0.375,0.0,0.375,1.0,1.5,0.625]],"1141":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1142":[[0.375,0.0,0.0,0.625,1.5,1.0]],"1143":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1144":[[0.375,0.0,0.0,0.625,1.5,0.625]],"1145":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1146":[[0.375,0.0,0.375,0.625,1.5,1.0]],"1147":[[0.0,0.0,0.375,0.625,1.5,0.625]],"1148":[[0.375,0.0,0.375,0.625,1.5,0.625]],"1149":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1150":[[0.375,0.0,0.0,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1151":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1152":[[0.375,0.0,0.0,0.625,1.5,0.625],[0.625,0.0,0.375,1.0,1.5,0.625]],"1153":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1154":[[0.375,0.0,0.375,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1155":[[0.0,0.0,0.375,1.0,1.5,0.625]],"1156":[[0.375,0.0,0.375,1.0,1.5,0.625]],"1157":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1158":[[0.375,0.0,0.0,0.625,1.5,1.0]],"1159":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1160":[[0.375,0.0,0.0,0.625,1.5,0.625]],"1161":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1162":[[0.375,0.0,0.375,0.625,1.5,1.0]],"1163":[[0.0,0.0,0.375,0.625,1.5,0.625]],"1164":[[0.375,0.0,0.375,0.625,1.5,0.625]],"1165":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1166":[[0.375,0.0,0.0,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1167":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1168":[[0.375,0.0,0.0,0.625,1.5,0.625],[0.625,0.0,0.375,1.0,1.5,0.625]],"1169":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1170":[[0.375,0.0,0.375,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1171":[[0.0,0.0,0.375,1.0,1.5,0.625]],"1172":[[0.375,0.0,0.375,1.0,1.5,0.625]],"1173":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1174":[[0.375,0.0,0.0,0.625,1.5,1.0]],"1175":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1176":[[0.375,0.0,0.0,0.625,1.5,0.625]],"1177":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1178":[[0.375,0.0,0.375,0.625,1.5,1.0]],"1179":[[0.0,0.0,0.375,0.625,1.5,0.625]],"1180":[[0.375,0.0,0.375,0.625,1.5,0.625]],"1181":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1182":[[0.375,0.0,0.0,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1183":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1184":[[0.375,0.0,0.0,0.625,1.5,0.625],[0.625,0.0,0.375,1.0,1.5,0.625]],"1185":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1186":[[0.375,0.0,0.375,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1187":[[0.0,0.0,0.375,1.0,1.5,0.625]],"1188":[[0.375,0.0,0.375,1.0,1.5,0.625]],"1189":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1190":[[0.375,0.0,0.0,0.625,1.5,1.0]],"1191":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1192":[[0.375,0.0,0.0,0.625,1.5,0.625]],"1193":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1194":[[0.375,0.0,0.375,0.625,1.5,1.0]],"1195":[[0.0,0.0,0.375,0.625,1.5,0.625]],"1196":[[0.375,0.0,0.375,0.625,1.5,0.625]],"1197":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1198":[[0.375,0.0,0.0,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1199":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1200":[[0.375,0.0,0.0,0.625,1.5,0.625],[0.625,0.0,0.375,1.0,1.5,0.625]],"1201":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1202":[[0.375,0.0,0.375,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"1203":[[0.0,0.0,0.375,1.0,1.5,0.625]],"1204":[[0.375,0.0,0.375,1.0,1.5,0.625]],"1205":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"1206":[[0.375,0.0,0.0,0.625,1.5,1.0]],"1207":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"1208":[[0.375,0.0,0.0,0.625,1.5,0.625]],"1209":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"1210":[[0.375,0.0,0.375,0.625,1.5,1.0]],"1211":[[0.0,0.0,0.375,0.625,1.5,0.625]],"1212":[[0.375,0.0,0.375,0.625,1.5,0.625]],"1213":[[0.375,0.375,0.0,0.625,0.625,1.0]],"1214":[[0.0,0.375,0.375,1.0,0.625,0.625]],"1215":[[0.375,0.0,0.375,0.625,1.0,0.625]],"1216":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.0,0.1875,0.1875,0.1875,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1217":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1218":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.0,0.1875,0.1875,0.1875,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1219":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1220":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.0,0.1875,0.1875,0.1875,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1221":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1222":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.0,0.1875,0.1875,0.1875,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1223":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1224":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.0,0.1875,0.1875,0.1875,0.8125,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1225":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1226":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.0,0.1875,0.1875,0.1875,0.8125,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1227":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1228":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.0,0.1875,0.1875,0.1875,0.8125,0.8125],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1229":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1230":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.0,0.1875,0.1875,0.1875,0.8125,0.8125],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1231":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1232":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.0,0.1875,0.1875,0.1875,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],"1233":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],"1234":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.0,0.1875,0.1875,0.1875,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],"1235":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],"1236":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.0,0.1875,0.1875,0.1875,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875]],"1237":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875]],"1238":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.0,0.1875,0.1875,0.1875,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875]],"1239":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875]],"1240":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.0,0.1875,0.1875,0.1875,0.8125,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],"1241":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],"1242":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.0,0.1875,0.1875,0.1875,0.8125,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],"1243":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],"1244":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125],[0.0,0.1875,0.1875,0.1875,0.8125,0.8125]],"1245":[[0.1875,0.0,0.1875,0.8125,1.0,0.8125]],"1246":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125],[0.0,0.1875,0.1875,0.1875,0.8125,0.8125]],"1247":[[0.1875,0.0,0.1875,0.8125,0.8125,0.8125]],"1248":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],"1249":[[0.1875,0.1875,0.0,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],"1250":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],"1251":[[0.1875,0.1875,0.0,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1252":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],"1253":[[0.1875,0.1875,0.0,0.8125,0.8125,0.8125],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],"1254":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875]],"1255":[[0.1875,0.1875,0.0,0.8125,0.8125,0.8125],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1256":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],"1257":[[0.1875,0.1875,0.1875,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],"1258":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],"1259":[[0.1875,0.1875,0.1875,0.8125,0.8125,1.0],[0.8125,0.1875,0.1875,1.0,0.8125,0.8125]],"1260":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],"1261":[[0.1875,0.1875,0.1875,1.0,0.8125,0.8125],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],"1262":[[0.0,0.1875,0.1875,1.0,0.8125,0.8125]],"1263":[[0.1875,0.1875,0.1875,1.0,0.8125,0.8125]],"1264":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],"1265":[[0.1875,0.1875,0.0,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],"1266":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],"1267":[[0.1875,0.1875,0.0,0.8125,0.8125,1.0]],"1268":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],"1269":[[0.1875,0.1875,0.0,0.8125,0.8125,0.8125],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],"1270":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.0,0.8125,0.8125,0.1875]],"1271":[[0.1875,0.1875,0.0,0.8125,0.8125,0.8125]],"1272":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],"1273":[[0.1875,0.1875,0.1875,0.8125,0.8125,1.0],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],"1274":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.1875,0.8125,0.8125,0.8125,1.0]],"1275":[[0.1875,0.1875,0.1875,0.8125,0.8125,1.0]],"1276":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125],[0.1875,0.8125,0.1875,0.8125,1.0,0.8125]],"1277":[[0.1875,0.1875,0.1875,0.8125,1.0,0.8125]],"1278":[[0.0,0.1875,0.1875,0.8125,0.8125,0.8125]],"1279":[[0.1875,0.1875,0.1875,0.8125,0.8125,0.8125]],"1280":[[0.3125,-0.0625,0.3125,0.6875,0.1875,0.6875]],"1281":[[0.1875,-0.0625,0.1875,0.8125,0.3125,0.8125]],"1282":[[0.0,0.0,0.0,1.0,0.9375,1.0]],"1283":[[0.1875,0.0,0.1875,0.75,0.4375,0.75]],"1284":[[0.0625,0.0,0.0625,0.9375,0.4375,0.9375]],"1285":[[0.0625,0.0,0.125,0.9375,1.0,0.875]],"1286":[[0.1875,0.0,0.1875,0.8125,0.625,0.8125]],"1287":[[0.375,0.0,0.375,0.625,0.375,0.625]],"1288":[[0.1875,0.0,0.1875,0.8125,0.375,0.8125]],"1289":[[0.125,0.0,0.125,0.875,0.375,0.875]],"1290":[[0.125,0.0,0.125,0.875,0.4375,0.875]],"1291":[[0.3125,0.3125,0.3125,0.6875,0.6875,0.6875]],"1292":[[0.15625,0.0,0.15625,0.34375,1.0,0.34375]],"1293":[[0.15625,0.0,0.15625,0.34375,1.0,0.34375]],"1294":[[0.15625,0.0,0.15625,0.34375,1.0,0.34375]],"1295":[[0.15625,0.0,0.15625,0.34375,1.0,0.34375]],"1296":[[0.15625,0.0,0.15625,0.34375,1.0,0.34375]],"1297":[[0.15625,0.0,0.15625,0.34375,1.0,0.34375]],"1298":[[0.15625,0.0,0.15625,0.34375,1.0,0.34375]],"1299":[[0.15625,0.0,0.15625,0.34375,1.0,0.34375]],"1300":[[0.15625,0.0,0.15625,0.34375,1.0,0.34375]],"1301":[[0.15625,0.0,0.15625,0.34375,1.0,0.34375]],"1302":[[0.15625,0.0,0.15625,0.34375,1.0,0.34375]],"1303":[[0.15625,0.0,0.15625,0.34375,1.0,0.34375]],"1304":[[0.25,0.0,0.25,0.75,1.5,0.75]],"1305":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1306":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1307":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"1308":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"1309":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1310":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1311":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1312":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"1313":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1314":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1315":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1316":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1317":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1318":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"1319":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1320":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1321":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1322":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1323":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1324":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"1325":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1326":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1327":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1328":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1329":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1330":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1331":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1332":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1333":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1334":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1335":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1336":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1337":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1338":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1339":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1340":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1341":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1342":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"1343":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1344":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1345":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1346":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1347":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1348":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1349":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1350":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1351":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1352":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1353":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1354":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1355":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1356":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1357":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1358":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1359":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1360":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"1361":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"1362":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"1363":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1364":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1365":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1366":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1367":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1368":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1369":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1370":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1371":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1372":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1373":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1374":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1375":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1376":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1377":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1378":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1379":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1380":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1381":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1382":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1383":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1384":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1385":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1386":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1387":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1388":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1389":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1390":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1391":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1392":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1393":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1394":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1395":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1396":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1397":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1398":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1399":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1400":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1401":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1402":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1403":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1404":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1405":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1406":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1407":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1408":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1409":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1410":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1411":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1412":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1413":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1414":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"1415":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"1416":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"1417":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1418":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1419":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1420":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1421":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1422":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1423":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1424":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1425":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1426":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1427":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1428":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1429":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1430":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1431":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1432":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1433":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1434":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1435":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1436":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1437":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1438":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1439":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1440":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1441":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1442":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1443":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1444":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1445":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1446":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1447":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1448":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1449":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1450":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1451":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1452":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1453":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1454":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1455":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1456":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1457":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1458":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1459":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1460":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1461":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1462":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1463":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1464":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1465":[[0.25,0.0,0.25,0.75,1.5,0.75]],"1466":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1467":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1468":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"1469":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"1470":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1471":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1472":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1473":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"1474":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1475":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1476":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1477":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1478":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1479":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"1480":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1481":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1482":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1483":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1484":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1485":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"1486":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1487":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1488":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1489":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1490":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1491":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1492":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1493":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1494":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1495":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1496":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1497":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1498":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1499":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1500":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1501":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1502":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1503":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"1504":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1505":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1506":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1507":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1508":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1509":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1510":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1511":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1512":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1513":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1514":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1515":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1516":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1517":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1518":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1519":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1520":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1521":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"1522":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"1523":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"1524":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1525":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1526":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1527":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1528":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1529":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1530":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1531":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1532":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1533":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1534":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1535":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1536":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1537":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1538":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1539":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1540":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1541":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1542":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1543":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1544":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1545":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1546":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1547":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1548":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1549":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1550":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1551":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1552":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1553":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1554":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1555":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1556":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1557":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1558":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1559":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1560":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1561":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1562":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1563":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1564":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1565":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1566":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1567":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1568":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1569":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1570":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1571":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1572":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1573":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1574":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1575":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"1576":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"1577":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"1578":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1579":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1580":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1581":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1582":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1583":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1584":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1585":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1586":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1587":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1588":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1589":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1590":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1591":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1592":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1593":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1594":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1595":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1596":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1597":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1598":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1599":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1600":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1601":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1602":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1603":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1604":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1605":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1606":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1607":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1608":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1609":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1610":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1611":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1612":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1613":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1614":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1615":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1616":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1617":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1618":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1619":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1620":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1621":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1622":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1623":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1624":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1625":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1626":[[0.25,0.0,0.25,0.75,1.5,0.75]],"1627":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1628":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1629":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"1630":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"1631":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1632":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1633":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1634":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"1635":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1636":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1637":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1638":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1639":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1640":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"1641":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1642":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1643":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1644":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1645":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1646":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"1647":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1648":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1649":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1650":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1651":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1652":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1653":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1654":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1655":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1656":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1657":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1658":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1659":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1660":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1661":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1662":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1663":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1664":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"1665":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1666":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1667":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1668":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1669":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1670":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1671":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1672":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1673":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1674":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1675":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1676":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1677":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1678":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1679":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1680":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1681":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1682":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"1683":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"1684":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"1685":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1686":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1687":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1688":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1689":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1690":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1691":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1692":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1693":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1694":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1695":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1696":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1697":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1698":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1699":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1700":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1701":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1702":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1703":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1704":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1705":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1706":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1707":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1708":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1709":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1710":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1711":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1712":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1713":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1714":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1715":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1716":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1717":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1718":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1719":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1720":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1721":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1722":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1723":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1724":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1725":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1726":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1727":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1728":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1729":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1730":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1731":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1732":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1733":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1734":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1735":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1736":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"1737":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"1738":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"1739":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1740":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1741":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1742":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1743":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1744":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1745":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1746":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1747":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1748":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1749":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1750":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1751":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1752":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1753":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1754":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1755":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1756":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1757":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1758":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1759":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1760":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1761":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1762":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1763":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1764":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1765":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1766":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1767":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1768":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1769":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1770":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1771":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1772":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1773":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1774":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1775":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1776":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1777":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1778":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1779":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1780":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1781":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1782":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1783":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1784":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1785":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1786":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1787":[[0.25,0.0,0.25,0.75,1.5,0.75]],"1788":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1789":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1790":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"1791":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"1792":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1793":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1794":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1795":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"1796":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1797":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1798":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1799":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1800":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1801":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"1802":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1803":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1804":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1805":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1806":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1807":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"1808":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1809":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1810":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1811":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1812":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1813":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1814":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1815":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1816":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1817":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1818":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1819":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1820":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1821":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1822":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1823":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1824":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1825":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"1826":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1827":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1828":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1829":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1830":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1831":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1832":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1833":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1834":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1835":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1836":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1837":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1838":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1839":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1840":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1841":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1842":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1843":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"1844":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"1845":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"1846":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1847":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1848":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1849":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1850":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1851":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1852":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1853":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1854":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1855":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1856":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1857":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1858":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1859":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1860":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1861":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1862":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1863":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1864":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1865":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1866":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1867":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1868":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1869":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1870":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1871":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1872":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1873":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1874":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1875":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1876":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1877":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1878":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1879":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1880":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1881":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1882":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1883":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1884":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1885":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1886":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1887":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1888":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1889":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1890":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1891":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1892":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1893":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1894":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1895":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1896":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1897":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"1898":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"1899":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"1900":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1901":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1902":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1903":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1904":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1905":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1906":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1907":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1908":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1909":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1910":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1911":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1912":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1913":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1914":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1915":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1916":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1917":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1918":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1919":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1920":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1921":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1922":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1923":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1924":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1925":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1926":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1927":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1928":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1929":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1930":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1931":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1932":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1933":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1934":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1935":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1936":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1937":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1938":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1939":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1940":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1941":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1942":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"1943":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1944":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1945":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"1946":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1947":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1948":[[0.25,0.0,0.25,0.75,1.5,0.75]],"1949":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1950":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"1951":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"1952":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"1953":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1954":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1955":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1956":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"1957":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1958":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1959":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1960":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1961":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1962":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"1963":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1964":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1965":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1966":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1967":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1968":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"1969":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1970":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1971":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1972":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1973":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1974":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1975":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1976":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1977":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1978":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1979":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1980":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1981":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1982":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1983":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1984":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1985":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"1986":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"1987":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1988":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"1989":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1990":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1991":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1992":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1993":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1994":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"1995":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1996":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1997":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"1998":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"1999":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2000":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2001":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2002":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2003":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2004":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"2005":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2006":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2007":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2008":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2009":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2010":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2011":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2012":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2013":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2014":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2015":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2016":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2017":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2018":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2019":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2020":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2021":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2022":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2023":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2024":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2025":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2026":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2027":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2028":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2029":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2030":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2031":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2032":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2033":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2034":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2035":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2036":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2037":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2038":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2039":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2040":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2041":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2042":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2043":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2044":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2045":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2046":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2047":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2048":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2049":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2050":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2051":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2052":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2053":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2054":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2055":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2056":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2057":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2058":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"2059":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2060":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2061":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2062":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2063":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2064":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2065":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2066":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2067":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2068":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2069":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2070":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2071":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2072":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2073":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2074":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2075":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2076":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2077":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2078":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2079":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2080":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2081":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2082":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2083":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2084":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2085":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2086":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2087":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2088":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2089":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2090":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2091":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2092":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2093":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2094":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2095":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2096":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2097":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2098":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2099":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2100":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2101":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2102":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2103":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2104":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2105":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2106":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2107":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2108":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2109":[[0.25,0.0,0.25,0.75,1.5,0.75]],"2110":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2111":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2112":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"2113":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"2114":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2115":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2116":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2117":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"2118":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2119":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2120":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2121":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2122":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2123":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"2124":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2125":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2126":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2127":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2128":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2129":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"2130":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2131":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2132":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2133":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2134":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2135":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2136":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2137":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2138":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2139":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2140":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2141":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2142":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2143":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2144":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2145":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2146":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2147":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"2148":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2149":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2150":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2151":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2152":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2153":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2154":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2155":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2156":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2157":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2158":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2159":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2160":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2161":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2162":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2163":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2164":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2165":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"2166":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2167":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2168":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2169":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2170":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2171":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2172":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2173":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2174":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2175":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2176":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2177":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2178":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2179":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2180":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2181":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2182":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2183":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2184":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2185":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2186":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2187":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2188":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2189":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2190":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2191":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2192":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2193":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2194":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2195":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2196":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2197":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2198":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2199":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2200":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2201":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2202":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2203":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2204":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2205":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2206":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2207":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2208":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2209":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2210":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2211":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2212":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2213":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2214":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2215":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2216":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2217":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2218":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2219":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"2220":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2221":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2222":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2223":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2224":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2225":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2226":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2227":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2228":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2229":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2230":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2231":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2232":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2233":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2234":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2235":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2236":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2237":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2238":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2239":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2240":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2241":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2242":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2243":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2244":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2245":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2246":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2247":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2248":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2249":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2250":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2251":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2252":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2253":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2254":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2255":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2256":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2257":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2258":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2259":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2260":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2261":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2262":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2263":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2264":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2265":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2266":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2267":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2268":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2269":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2270":[[0.25,0.0,0.25,0.75,1.5,0.75]],"2271":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2272":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2273":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"2274":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"2275":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2276":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2277":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2278":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"2279":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2280":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2281":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2282":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2283":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2284":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"2285":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2286":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2287":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2288":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2289":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2290":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"2291":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2292":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2293":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2294":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2295":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2296":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2297":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2298":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2299":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2300":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2301":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2302":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2303":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2304":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2305":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2306":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2307":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2308":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"2309":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2310":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2311":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2312":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2313":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2314":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2315":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2316":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2317":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2318":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2319":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2320":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2321":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2322":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2323":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2324":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2325":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2326":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"2327":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2328":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2329":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2330":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2331":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2332":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2333":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2334":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2335":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2336":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2337":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2338":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2339":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2340":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2341":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2342":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2343":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2344":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2345":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2346":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2347":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2348":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2349":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2350":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2351":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2352":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2353":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2354":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2355":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2356":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2357":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2358":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2359":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2360":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2361":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2362":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2363":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2364":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2365":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2366":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2367":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2368":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2369":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2370":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2371":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2372":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2373":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2374":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2375":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2376":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2377":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2378":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2379":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2380":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"2381":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2382":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2383":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2384":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2385":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2386":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2387":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2388":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2389":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2390":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2391":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2392":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2393":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2394":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2395":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2396":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2397":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2398":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2399":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2400":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2401":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2402":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2403":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2404":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2405":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2406":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2407":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2408":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2409":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2410":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2411":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2412":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2413":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2414":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2415":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2416":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2417":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2418":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2419":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2420":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2421":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2422":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2423":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2424":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2425":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2426":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2427":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2428":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2429":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2430":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2431":[[0.25,0.0,0.25,0.75,1.5,0.75]],"2432":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2433":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2434":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"2435":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"2436":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2437":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2438":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2439":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"2440":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2441":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2442":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2443":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2444":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2445":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"2446":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2447":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2448":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2449":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2450":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2451":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"2452":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2453":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2454":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2455":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2456":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2457":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2458":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2459":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2460":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2461":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2462":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2463":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2464":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2465":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2466":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2467":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2468":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2469":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"2470":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2471":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2472":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2473":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2474":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2475":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2476":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2477":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2478":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2479":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2480":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2481":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2482":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2483":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2484":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2485":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2486":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2487":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"2488":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2489":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2490":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2491":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2492":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2493":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2494":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2495":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2496":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2497":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2498":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2499":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2500":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2501":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2502":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2503":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2504":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2505":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2506":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2507":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2508":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2509":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2510":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2511":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2512":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2513":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2514":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2515":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2516":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2517":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2518":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2519":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2520":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2521":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2522":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2523":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2524":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2525":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2526":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2527":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2528":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2529":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2530":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2531":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2532":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2533":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2534":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2535":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2536":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2537":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2538":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2539":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2540":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2541":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"2542":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2543":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2544":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2545":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2546":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2547":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2548":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2549":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2550":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2551":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2552":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2553":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2554":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2555":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2556":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2557":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2558":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2559":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2560":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2561":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2562":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2563":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2564":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2565":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2566":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2567":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2568":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2569":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2570":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2571":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2572":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2573":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2574":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2575":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2576":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2577":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2578":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2579":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2580":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2581":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2582":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2583":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2584":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2585":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2586":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2587":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2588":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2589":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2590":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2591":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2592":[[0.25,0.0,0.25,0.75,1.5,0.75]],"2593":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2594":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2595":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"2596":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"2597":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2598":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2599":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2600":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"2601":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2602":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2603":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2604":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2605":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2606":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"2607":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2608":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2609":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2610":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2611":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2612":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"2613":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2614":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2615":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2616":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2617":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2618":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2619":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2620":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2621":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2622":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2623":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2624":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2625":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2626":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2627":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2628":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2629":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2630":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"2631":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2632":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2633":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2634":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2635":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2636":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2637":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2638":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2639":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2640":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2641":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2642":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2643":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2644":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2645":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2646":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2647":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2648":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"2649":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2650":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2651":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2652":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2653":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2654":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2655":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2656":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2657":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2658":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2659":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2660":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2661":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2662":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2663":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2664":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2665":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2666":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2667":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2668":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2669":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2670":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2671":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2672":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2673":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2674":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2675":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2676":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2677":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2678":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2679":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2680":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2681":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2682":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2683":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2684":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2685":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2686":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2687":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2688":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2689":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2690":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2691":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2692":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2693":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2694":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2695":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2696":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2697":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2698":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2699":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2700":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2701":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2702":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"2703":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2704":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2705":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2706":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2707":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2708":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2709":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2710":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2711":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2712":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2713":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2714":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2715":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2716":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2717":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2718":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2719":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2720":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2721":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2722":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2723":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2724":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2725":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2726":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2727":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2728":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2729":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2730":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2731":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2732":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2733":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2734":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2735":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2736":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2737":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2738":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2739":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2740":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2741":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2742":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2743":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2744":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2745":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2746":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2747":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2748":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2749":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2750":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2751":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2752":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2753":[[0.25,0.0,0.25,0.75,1.5,0.75]],"2754":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2755":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2756":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"2757":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"2758":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2759":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2760":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2761":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"2762":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2763":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2764":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2765":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2766":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2767":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"2768":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2769":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2770":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2771":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2772":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2773":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"2774":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2775":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2776":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2777":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2778":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2779":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2780":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2781":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2782":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2783":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2784":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2785":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2786":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2787":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2788":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2789":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2790":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2791":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"2792":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2793":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2794":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2795":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2796":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2797":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2798":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2799":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2800":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2801":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2802":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2803":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2804":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2805":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2806":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2807":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2808":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2809":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"2810":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2811":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2812":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2813":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2814":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2815":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2816":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2817":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2818":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2819":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2820":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2821":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2822":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2823":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2824":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2825":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2826":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2827":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2828":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2829":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2830":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2831":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2832":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2833":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2834":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2835":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2836":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2837":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2838":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2839":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2840":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2841":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2842":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2843":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2844":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2845":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2846":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2847":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2848":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2849":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2850":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2851":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2852":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2853":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2854":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2855":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2856":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2857":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2858":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2859":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2860":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2861":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2862":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2863":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"2864":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2865":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2866":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2867":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2868":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2869":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2870":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2871":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2872":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2873":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2874":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2875":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2876":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2877":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2878":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2879":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2880":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2881":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2882":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2883":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2884":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2885":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2886":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2887":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2888":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2889":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2890":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2891":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2892":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2893":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2894":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2895":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2896":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2897":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2898":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2899":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2900":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2901":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2902":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2903":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2904":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2905":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2906":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2907":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2908":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2909":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2910":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2911":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2912":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2913":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2914":[[0.25,0.0,0.25,0.75,1.5,0.75]],"2915":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2916":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2917":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"2918":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"2919":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2920":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2921":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2922":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"2923":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2924":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2925":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2926":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2927":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2928":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"2929":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2930":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2931":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2932":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2933":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2934":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"2935":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2936":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2937":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2938":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2939":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2940":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2941":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2942":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2943":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2944":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2945":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2946":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2947":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2948":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2949":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2950":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2951":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2952":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"2953":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2954":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2955":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2956":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2957":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2958":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2959":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2960":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2961":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2962":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2963":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2964":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"2965":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2966":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2967":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2968":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2969":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"2970":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"2971":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2972":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"2973":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2974":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2975":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2976":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2977":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2978":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2979":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2980":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2981":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2982":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2983":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2984":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2985":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2986":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2987":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"2988":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2989":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2990":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"2991":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2992":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2993":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2994":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"2995":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2996":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"2997":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"2998":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"2999":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3000":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3001":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3002":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3003":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3004":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3005":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3006":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3007":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3008":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3009":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3010":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3011":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3012":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3013":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3014":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3015":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3016":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3017":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3018":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3019":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3020":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3021":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3022":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3023":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3024":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"3025":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3026":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3027":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3028":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3029":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3030":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3031":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3032":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3033":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3034":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3035":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3036":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3037":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3038":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3039":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3040":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3041":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3042":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3043":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3044":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3045":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3046":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3047":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3048":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3049":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3050":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3051":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3052":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3053":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3054":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3055":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3056":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3057":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3058":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3059":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3060":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3061":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3062":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3063":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3064":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3065":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3066":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3067":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3068":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3069":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3070":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3071":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3072":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3073":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3074":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3075":[[0.25,0.0,0.25,0.75,1.5,0.75]],"3076":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3077":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3078":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"3079":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"3080":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3081":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3082":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3083":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"3084":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3085":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3086":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3087":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3088":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3089":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"3090":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3091":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3092":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3093":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3094":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3095":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"3096":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3097":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3098":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3099":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3100":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3101":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3102":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3103":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3104":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3105":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3106":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3107":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3108":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3109":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3110":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3111":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3112":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3113":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"3114":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3115":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3116":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3117":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3118":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3119":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3120":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3121":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3122":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3123":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3124":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3125":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3126":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3127":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3128":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3129":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3130":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3131":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"3132":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3133":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3134":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3135":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3136":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3137":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3138":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3139":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3140":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3141":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3142":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3143":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3144":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3145":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3146":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3147":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3148":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3149":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3150":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3151":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3152":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3153":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3154":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3155":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3156":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3157":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3158":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3159":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3160":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3161":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3162":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3163":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3164":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3165":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3166":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3167":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3168":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3169":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3170":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3171":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3172":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3173":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3174":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3175":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3176":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3177":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3178":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3179":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3180":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3181":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3182":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3183":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3184":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3185":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"3186":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3187":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3188":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3189":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3190":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3191":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3192":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3193":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3194":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3195":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3196":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3197":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3198":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3199":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3200":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3201":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3202":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3203":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3204":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3205":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3206":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3207":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3208":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3209":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3210":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3211":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3212":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3213":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3214":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3215":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3216":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3217":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3218":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3219":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3220":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3221":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3222":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3223":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3224":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3225":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3226":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3227":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3228":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3229":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3230":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3231":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3232":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3233":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3234":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3235":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3236":[[0.25,0.0,0.25,0.75,1.5,0.75]],"3237":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3238":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3239":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"3240":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"3241":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3242":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3243":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3244":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"3245":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3246":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3247":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3248":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3249":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3250":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"3251":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3252":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3253":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3254":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3255":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3256":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"3257":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3258":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3259":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3260":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3261":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3262":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3263":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3264":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3265":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3266":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3267":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3268":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3269":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3270":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3271":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3272":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3273":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3274":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"3275":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3276":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3277":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3278":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3279":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3280":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3281":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3282":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3283":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3284":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3285":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3286":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3287":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3288":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3289":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3290":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3291":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3292":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"3293":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3294":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3295":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3296":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3297":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3298":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3299":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3300":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3301":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3302":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3303":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3304":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3305":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3306":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3307":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3308":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3309":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3310":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3311":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3312":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3313":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3314":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3315":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3316":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3317":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3318":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3319":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3320":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3321":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3322":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3323":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3324":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3325":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3326":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3327":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3328":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3329":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3330":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3331":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3332":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3333":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3334":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3335":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3336":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3337":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3338":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3339":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3340":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3341":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3342":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3343":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3344":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3345":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3346":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"3347":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3348":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3349":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3350":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3351":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3352":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3353":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3354":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3355":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3356":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3357":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3358":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3359":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3360":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3361":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3362":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3363":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3364":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3365":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3366":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3367":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3368":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3369":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3370":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3371":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3372":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3373":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3374":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3375":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3376":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3377":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3378":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3379":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3380":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3381":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3382":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3383":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3384":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3385":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3386":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3387":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3388":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3389":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3390":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3391":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3392":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3393":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3394":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3395":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3396":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3397":[[0.0,0.0,0.0,0.125,1.0,0.125],[0.0,0.0,0.875,0.125,1.0,1.0],[0.875,0.0,0.0,1.0,1.0,0.125],[0.875,0.0,0.875,1.0,1.0,1.0],[0.0,0.875,0.125,1.0,1.0,0.875],[0.125,0.875,0.0,0.875,1.0,0.125],[0.125,0.875,0.875,0.875,1.0,1.0]],"3398":[[0.125,0.0,0.375,0.25,0.8125,0.625],[0.75,0.0,0.375,0.875,0.8125,0.625],[0.25,0.25,0.125,0.75,1.0,0.875],[0.125,0.4375,0.3125,0.25,0.8125,0.375],[0.125,0.4375,0.625,0.25,0.8125,0.6875],[0.75,0.4375,0.3125,0.875,0.8125,0.375],[0.75,0.4375,0.625,0.875,0.8125,0.6875]],"3399":[[0.125,0.0,0.375,0.25,0.8125,0.625],[0.75,0.0,0.375,0.875,0.8125,0.625],[0.25,0.25,0.125,0.75,1.0,0.875],[0.125,0.4375,0.3125,0.25,0.8125,0.375],[0.125,0.4375,0.625,0.25,0.8125,0.6875],[0.75,0.4375,0.3125,0.875,0.8125,0.375],[0.75,0.4375,0.625,0.875,0.8125,0.6875]],"3400":[[0.375,0.0,0.125,0.625,0.8125,0.25],[0.375,0.0,0.75,0.625,0.8125,0.875],[0.125,0.25,0.25,0.875,1.0,0.75],[0.3125,0.4375,0.125,0.375,0.8125,0.25],[0.3125,0.4375,0.75,0.375,0.8125,0.875],[0.625,0.4375,0.125,0.6875,0.8125,0.25],[0.625,0.4375,0.75,0.6875,0.8125,0.875]],"3401":[[0.375,0.0,0.125,0.625,0.8125,0.25],[0.375,0.0,0.75,0.625,0.8125,0.875],[0.125,0.25,0.25,0.875,1.0,0.75],[0.3125,0.4375,0.125,0.375,0.8125,0.25],[0.3125,0.4375,0.75,0.375,0.8125,0.875],[0.625,0.4375,0.125,0.6875,0.8125,0.25],[0.625,0.4375,0.75,0.6875,0.8125,0.875]],"3402":[[0.25,0.125,0.0,0.75,0.875,0.75],[0.125,0.3125,0.1875,0.25,0.6875,0.5625],[0.75,0.3125,0.1875,0.875,0.6875,0.5625],[0.125,0.375,0.5625,0.25,0.625,1.0],[0.75,0.375,0.5625,0.875,0.625,1.0]],"3403":[[0.25,0.125,0.25,0.75,0.875,1.0],[0.125,0.3125,0.4375,0.25,0.6875,0.8125],[0.75,0.3125,0.4375,0.875,0.6875,0.8125],[0.125,0.375,0.0,0.25,0.625,0.4375],[0.75,0.375,0.0,0.875,0.625,0.4375]],"3404":[[0.0,0.125,0.25,0.75,0.875,0.75],[0.1875,0.3125,0.125,0.5625,0.6875,0.25],[0.1875,0.3125,0.75,0.5625,0.6875,0.875],[0.5625,0.375,0.125,1.0,0.625,0.25],[0.5625,0.375,0.75,1.0,0.625,0.875]],"3405":[[0.25,0.125,0.25,1.0,0.875,0.75],[0.4375,0.3125,0.125,0.8125,0.6875,0.25],[0.4375,0.3125,0.75,0.8125,0.6875,0.875],[0.0,0.375,0.125,0.4375,0.625,0.25],[0.0,0.375,0.75,0.4375,0.625,0.875]],"3406":[[0.25,0.0,0.125,0.75,0.75,0.875],[0.125,0.1875,0.3125,0.25,0.5625,0.6875],[0.75,0.1875,0.3125,0.875,0.5625,0.6875],[0.125,0.5625,0.375,0.25,1.0,0.625],[0.75,0.5625,0.375,0.875,1.0,0.625]],"3407":[[0.25,0.0,0.125,0.75,0.75,0.875],[0.125,0.1875,0.3125,0.25,0.5625,0.6875],[0.75,0.1875,0.3125,0.875,0.5625,0.6875],[0.125,0.5625,0.375,0.25,1.0,0.625],[0.75,0.5625,0.375,0.875,1.0,0.625]],"3408":[[0.125,0.0,0.25,0.875,0.75,0.75],[0.3125,0.1875,0.125,0.6875,0.5625,0.25],[0.3125,0.1875,0.75,0.6875,0.5625,0.875],[0.375,0.5625,0.125,0.625,1.0,0.25],[0.375,0.5625,0.75,0.625,1.0,0.875]],"3409":[[0.125,0.0,0.25,0.875,0.75,0.75],[0.3125,0.1875,0.125,0.6875,0.5625,0.25],[0.3125,0.1875,0.75,0.6875,0.5625,0.875],[0.375,0.5625,0.125,0.625,1.0,0.25],[0.375,0.5625,0.75,0.625,1.0,0.875]],"3410":[[0.0,0.0,0.0,1.0,0.125,1.0],[0.25,0.125,0.25,0.75,0.875,0.75]],"3411":[[0.0,0.0,0.0,1.0,0.5625,1.0]],"3412":[[0.0,0.0,0.25,1.0,1.0,0.75]],"3413":[[0.25,0.0,0.0,0.75,1.0,1.0]],"3414":[[0.25,0.25,0.25,0.75,0.375,0.75],[0.3125,0.375,0.3125,0.6875,0.8125,0.6875],[0.4375,0.8125,0.4375,0.5625,1.0,0.5625]],"3415":[[0.25,0.25,0.25,0.75,0.375,0.75],[0.3125,0.375,0.3125,0.6875,0.8125,0.6875],[0.4375,0.8125,0.0,0.5625,0.9375,0.8125]],"3416":[[0.25,0.25,0.25,0.75,0.375,0.75],[0.3125,0.375,0.3125,0.6875,0.8125,0.6875],[0.4375,0.8125,0.1875,0.5625,0.9375,1.0]],"3417":[[0.25,0.25,0.25,0.75,0.375,0.75],[0.3125,0.375,0.3125,0.6875,0.8125,0.6875],[0.0,0.8125,0.4375,0.8125,0.9375,0.5625]],"3418":[[0.25,0.25,0.25,0.75,0.375,0.75],[0.3125,0.375,0.3125,0.6875,0.8125,0.6875],[0.1875,0.8125,0.4375,1.0,0.9375,0.5625]],"3419":[[0.25,0.25,0.25,0.75,0.375,0.75],[0.3125,0.375,0.3125,0.6875,0.8125,0.6875],[0.4375,0.8125,0.0,0.5625,0.9375,1.0]],"3420":[[0.25,0.25,0.25,0.75,0.375,0.75],[0.3125,0.375,0.3125,0.6875,0.8125,0.6875],[0.0,0.8125,0.4375,1.0,0.9375,0.5625]],"3421":[[0.3125,0.0625,0.3125,0.6875,0.5,0.6875],[0.375,0.5,0.375,0.625,0.625,0.625]],"3422":[[0.3125,0.0,0.3125,0.6875,0.4375,0.6875],[0.375,0.4375,0.375,0.625,0.5625,0.625]],"3423":[[0.0,0.0,0.0,1.0,0.4375,1.0]],"3424":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"3425":[[0.375,0.0,0.0,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"3426":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"3427":[[0.375,0.0,0.0,0.625,1.5,0.625],[0.625,0.0,0.375,1.0,1.5,0.625]],"3428":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"3429":[[0.375,0.0,0.375,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"3430":[[0.0,0.0,0.375,1.0,1.5,0.625]],"3431":[[0.375,0.0,0.375,1.0,1.5,0.625]],"3432":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"3433":[[0.375,0.0,0.0,0.625,1.5,1.0]],"3434":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"3435":[[0.375,0.0,0.0,0.625,1.5,0.625]],"3436":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"3437":[[0.375,0.0,0.375,0.625,1.5,1.0]],"3438":[[0.0,0.0,0.375,0.625,1.5,0.625]],"3439":[[0.375,0.0,0.375,0.625,1.5,0.625]],"3440":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"3441":[[0.375,0.0,0.0,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"3442":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"3443":[[0.375,0.0,0.0,0.625,1.5,0.625],[0.625,0.0,0.375,1.0,1.5,0.625]],"3444":[[0.0,0.0,0.375,1.0,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"3445":[[0.375,0.0,0.375,0.625,1.5,1.0],[0.625,0.0,0.375,1.0,1.5,0.625]],"3446":[[0.0,0.0,0.375,1.0,1.5,0.625]],"3447":[[0.375,0.0,0.375,1.0,1.5,0.625]],"3448":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375],[0.375,0.0,0.625,0.625,1.5,1.0]],"3449":[[0.375,0.0,0.0,0.625,1.5,1.0]],"3450":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.0,0.625,1.5,0.375]],"3451":[[0.375,0.0,0.0,0.625,1.5,0.625]],"3452":[[0.0,0.0,0.375,0.625,1.5,0.625],[0.375,0.0,0.625,0.625,1.5,1.0]],"3453":[[0.375,0.0,0.375,0.625,1.5,1.0]],"3454":[[0.0,0.0,0.375,0.625,1.5,0.625]],"3455":[[0.375,0.0,0.375,0.625,1.5,0.625]],"3456":[[0.0,0.0,0.0,1.0,0.125,1.0],[0.0,0.125,0.0,0.125,1.0,1.0],[0.125,0.125,0.0,1.0,1.0,0.125],[0.125,0.125,0.875,1.0,1.0,1.0],[0.875,0.125,0.125,1.0,1.0,0.875]],"3457":[[0.0625,0.0,0.0625,0.9375,0.9375,0.9375]],"3458":[[0.25,0.0,0.25,0.75,1.5,0.75]],"3459":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3460":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3461":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"3462":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"3463":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3464":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3465":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3466":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"3467":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3468":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3469":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3470":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3471":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3472":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"3473":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3474":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3475":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3476":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3477":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3478":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"3479":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3480":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3481":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3482":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3483":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3484":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3485":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3486":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3487":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3488":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3489":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3490":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3491":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3492":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3493":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3494":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3495":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3496":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"3497":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3498":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3499":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3500":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3501":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3502":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3503":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3504":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3505":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3506":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3507":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3508":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3509":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3510":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3511":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3512":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3513":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3514":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"3515":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3516":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3517":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3518":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3519":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3520":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3521":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3522":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3523":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3524":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3525":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3526":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3527":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3528":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3529":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3530":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3531":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3532":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3533":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3534":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3535":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3536":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3537":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3538":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3539":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3540":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3541":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3542":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3543":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3544":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3545":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3546":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3547":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3548":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3549":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3550":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3551":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3552":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3553":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3554":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3555":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3556":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3557":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3558":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3559":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3560":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3561":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3562":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3563":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3564":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3565":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3566":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3567":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3568":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"3569":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3570":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3571":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3572":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3573":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3574":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3575":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3576":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3577":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3578":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3579":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3580":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3581":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3582":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3583":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3584":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3585":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3586":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3587":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3588":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3589":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3590":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3591":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3592":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3593":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3594":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3595":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3596":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3597":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3598":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3599":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3600":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3601":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3602":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3603":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3604":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3605":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3606":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3607":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3608":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3609":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3610":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3611":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3612":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3613":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3614":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3615":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3616":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3617":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3618":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3619":[[0.25,0.0,0.25,0.75,1.5,0.75]],"3620":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3621":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3622":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"3623":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"3624":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3625":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3626":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3627":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"3628":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3629":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3630":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3631":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3632":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3633":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"3634":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3635":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3636":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3637":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3638":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3639":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"3640":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3641":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3642":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3643":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3644":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3645":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3646":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3647":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3648":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3649":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3650":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3651":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3652":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3653":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3654":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3655":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3656":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3657":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"3658":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3659":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3660":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3661":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3662":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3663":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3664":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3665":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3666":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3667":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3668":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3669":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3670":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3671":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3672":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3673":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3674":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3675":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"3676":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3677":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3678":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3679":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3680":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3681":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3682":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3683":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3684":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3685":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3686":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3687":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3688":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3689":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3690":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3691":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3692":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3693":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3694":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3695":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3696":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3697":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3698":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3699":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3700":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3701":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3702":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3703":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3704":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3705":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3706":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3707":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3708":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3709":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3710":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3711":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3712":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3713":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3714":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3715":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3716":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3717":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3718":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3719":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3720":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3721":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3722":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3723":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3724":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3725":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3726":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3727":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3728":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3729":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"3730":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3731":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3732":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3733":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3734":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3735":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3736":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3737":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3738":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3739":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3740":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3741":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3742":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3743":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3744":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3745":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3746":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3747":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3748":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3749":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3750":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3751":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3752":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3753":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3754":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3755":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3756":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3757":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3758":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3759":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3760":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3761":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3762":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3763":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3764":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3765":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3766":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3767":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3768":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3769":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3770":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3771":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3772":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3773":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3774":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3775":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3776":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3777":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3778":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3779":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3780":[[0.25,0.0,0.25,0.75,1.5,0.75]],"3781":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3782":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3783":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"3784":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"3785":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3786":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3787":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3788":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"3789":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3790":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3791":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3792":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3793":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3794":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"3795":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3796":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3797":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3798":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3799":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3800":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"3801":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3802":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3803":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3804":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3805":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3806":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3807":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3808":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3809":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3810":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3811":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3812":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3813":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3814":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3815":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3816":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3817":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3818":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"3819":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3820":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3821":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3822":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3823":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3824":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3825":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3826":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3827":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3828":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3829":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3830":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3831":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3832":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3833":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3834":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3835":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3836":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"3837":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3838":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3839":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3840":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3841":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3842":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3843":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3844":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3845":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3846":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3847":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3848":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3849":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3850":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3851":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3852":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3853":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3854":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3855":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3856":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3857":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3858":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3859":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3860":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3861":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3862":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3863":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3864":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3865":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3866":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3867":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3868":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3869":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3870":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3871":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3872":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3873":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3874":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3875":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3876":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3877":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3878":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3879":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3880":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3881":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3882":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3883":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3884":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3885":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3886":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3887":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3888":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3889":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3890":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"3891":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3892":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"3893":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3894":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3895":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3896":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3897":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3898":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3899":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3900":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3901":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3902":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3903":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3904":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3905":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3906":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3907":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3908":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3909":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3910":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3911":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3912":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3913":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3914":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3915":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3916":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3917":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3918":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3919":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3920":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3921":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3922":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3923":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3924":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3925":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3926":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3927":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3928":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3929":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3930":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3931":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3932":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3933":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3934":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3935":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"3936":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3937":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3938":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"3939":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3940":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3941":[[0.4375,0.0,0.4375,0.5625,0.375,0.5625]],"3942":[[0.3125,0.0,0.375,0.6875,0.375,0.5625]],"3943":[[0.3125,0.0,0.375,0.625,0.375,0.6875]],"3944":[[0.3125,0.0,0.3125,0.6875,0.375,0.625]],"3945":[[0.0625,0.0,0.0625,0.9375,0.5,0.9375],[0.4375,0.5,0.4375,0.5625,0.875,0.5625]],"3946":[[0.1875,0.1875,0.5625,0.8125,0.8125,1.0]],"3947":[[0.0,0.1875,0.1875,0.4375,0.8125,0.8125]],"3948":[[0.1875,0.1875,0.0,0.8125,0.8125,0.4375]],"3949":[[0.5625,0.1875,0.1875,1.0,0.8125,0.8125]],"3950":[[0.1875,0.0,0.1875,0.8125,0.4375,0.8125]],"3951":[[0.1875,0.5625,0.1875,0.8125,1.0,0.8125]],"3952":[[0.1875,0.1875,0.6875,0.8125,0.8125,1.0]],"3953":[[0.0,0.1875,0.1875,0.3125,0.8125,0.8125]],"3954":[[0.1875,0.1875,0.0,0.8125,0.8125,0.3125]],"3955":[[0.6875,0.1875,0.1875,1.0,0.8125,0.8125]],"3956":[[0.1875,0.0,0.1875,0.8125,0.3125,0.8125]],"3957":[[0.1875,0.6875,0.1875,0.8125,1.0,0.8125]],"3958":[[0.1875,0.1875,0.75,0.8125,0.8125,1.0]],"3959":[[0.0,0.1875,0.1875,0.25,0.8125,0.8125]],"3960":[[0.1875,0.1875,0.0,0.8125,0.8125,0.25]],"3961":[[0.75,0.1875,0.1875,1.0,0.8125,0.8125]],"3962":[[0.1875,0.0,0.1875,0.8125,0.25,0.8125]],"3963":[[0.1875,0.75,0.1875,0.8125,1.0,0.8125]],"3964":[[0.25,0.25,0.8125,0.75,0.75,1.0]],"3965":[[0.0,0.25,0.25,0.1875,0.75,0.75]],"3966":[[0.25,0.25,0.0,0.75,0.75,0.1875]],"3967":[[0.8125,0.25,0.25,1.0,0.75,0.75]],"3968":[[0.25,0.0,0.25,0.75,0.1875,0.75]],"3969":[[0.25,0.8125,0.25,0.75,1.0,0.75]],"3970":[[0.25,0.0,0.25,0.75,1.5,0.75]],"3971":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3972":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"3973":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"3974":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"3975":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3976":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3977":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3978":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"3979":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3980":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3981":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3982":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3983":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3984":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"3985":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3986":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3987":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3988":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3989":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"3990":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"3991":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3992":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"3993":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3994":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3995":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"3996":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"3997":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3998":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"3999":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4000":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4001":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4002":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4003":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4004":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4005":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4006":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4007":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4008":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"4009":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4010":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4011":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4012":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4013":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4014":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4015":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4016":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4017":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4018":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4019":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4020":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4021":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4022":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4023":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4024":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4025":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4026":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"4027":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4028":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4029":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4030":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4031":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4032":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4033":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4034":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4035":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4036":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4037":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4038":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4039":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4040":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4041":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4042":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4043":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4044":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4045":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4046":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4047":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4048":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4049":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4050":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4051":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4052":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4053":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4054":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4055":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4056":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4057":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4058":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4059":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4060":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4061":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4062":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4063":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4064":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4065":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4066":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4067":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4068":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4069":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4070":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4071":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4072":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4073":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4074":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4075":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4076":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4077":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4078":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4079":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4080":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"4081":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4082":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4083":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4084":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4085":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4086":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4087":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4088":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4089":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4090":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4091":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4092":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4093":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4094":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4095":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4096":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4097":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4098":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4099":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4100":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4101":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4102":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4103":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4104":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4105":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4106":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4107":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4108":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4109":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4110":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4111":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4112":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4113":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4114":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4115":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4116":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4117":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4118":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4119":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4120":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4121":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4122":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4123":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4124":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4125":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4126":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4127":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4128":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4129":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4130":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4131":[[0.25,0.0,0.25,0.75,1.5,0.75]],"4132":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4133":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4134":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"4135":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"4136":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4137":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4138":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4139":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"4140":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4141":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4142":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4143":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4144":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4145":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"4146":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4147":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4148":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4149":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4150":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4151":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"4152":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4153":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4154":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4155":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4156":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4157":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4158":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4159":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4160":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4161":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4162":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4163":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4164":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4165":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4166":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4167":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4168":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4169":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"4170":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4171":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4172":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4173":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4174":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4175":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4176":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4177":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4178":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4179":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4180":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4181":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4182":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4183":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4184":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4185":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4186":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4187":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"4188":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4189":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4190":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4191":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4192":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4193":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4194":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4195":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4196":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4197":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4198":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4199":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4200":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4201":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4202":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4203":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4204":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4205":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4206":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4207":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4208":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4209":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4210":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4211":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4212":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4213":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4214":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4215":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4216":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4217":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4218":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4219":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4220":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4221":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4222":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4223":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4224":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4225":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4226":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4227":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4228":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4229":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4230":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4231":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4232":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4233":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4234":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4235":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4236":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4237":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4238":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4239":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4240":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4241":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"4242":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4243":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4244":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4245":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4246":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4247":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4248":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4249":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4250":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4251":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4252":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4253":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4254":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4255":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4256":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4257":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4258":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4259":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4260":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4261":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4262":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4263":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4264":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4265":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4266":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4267":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4268":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4269":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4270":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4271":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4272":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4273":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4274":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4275":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4276":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4277":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4278":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4279":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4280":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4281":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4282":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4283":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4284":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4285":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4286":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4287":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4288":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4289":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4290":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4291":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4292":[[0.25,0.0,0.25,0.75,1.5,0.75]],"4293":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4294":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4295":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"4296":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"4297":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4298":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4299":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4300":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"4301":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4302":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4303":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4304":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4305":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4306":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"4307":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4308":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4309":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4310":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4311":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4312":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"4313":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4314":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4315":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4316":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4317":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4318":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4319":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4320":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4321":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4322":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4323":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4324":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4325":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4326":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4327":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4328":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4329":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4330":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"4331":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4332":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4333":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4334":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4335":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4336":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4337":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4338":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4339":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4340":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4341":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4342":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4343":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4344":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4345":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4346":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4347":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4348":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"4349":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4350":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4351":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4352":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4353":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4354":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4355":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4356":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4357":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4358":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4359":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4360":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4361":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4362":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4363":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4364":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4365":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4366":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4367":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4368":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4369":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4370":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4371":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4372":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4373":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4374":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4375":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4376":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4377":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4378":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4379":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4380":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4381":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4382":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4383":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4384":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4385":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4386":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4387":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4388":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4389":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4390":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4391":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4392":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4393":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4394":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4395":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4396":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4397":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4398":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4399":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4400":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4401":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4402":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"4403":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4404":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4405":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4406":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4407":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4408":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4409":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4410":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4411":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4412":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4413":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4414":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4415":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4416":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4417":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4418":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4419":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4420":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4421":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4422":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4423":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4424":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4425":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4426":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4427":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4428":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4429":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4430":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4431":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4432":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4433":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4434":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4435":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4436":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4437":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4438":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4439":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4440":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4441":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4442":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4443":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4444":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4445":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4446":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4447":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4448":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4449":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4450":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4451":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4452":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4453":[[0.0,0.0,0.0,1.0,0.5,1.0]],"4454":[[0.0,0.0,0.0,1.0,0.5,1.0]],"4455":[[0.1875,0.0,0.1875,0.8125,0.875,0.8125]],"4456":[[0.1875,0.0,0.1875,0.5625,1.0,0.5625]],"4457":[[0.1875,0.0,0.1875,0.5625,1.0,0.5625]],"4458":[[0.1875,0.0,0.1875,0.5625,1.0,0.5625]],"4459":[[0.1875,0.0,0.1875,0.5625,1.0,0.5625]],"4460":[[0.1875,0.0,0.1875,0.5625,0.6875,0.5625]],"4461":[[0.1875,0.0,0.1875,0.5625,0.6875,0.5625]],"4462":[[0.1875,0.3125,0.1875,0.5625,1.0,0.5625]],"4463":[[0.1875,0.3125,0.1875,0.5625,1.0,0.5625]],"4464":[[0.125,0.0,0.125,0.625,1.0,0.625]],"4465":[[0.125,0.0,0.125,0.625,1.0,0.625]],"4466":[[0.125,0.0,0.125,0.625,1.0,0.625]],"4467":[[0.125,0.0,0.125,0.625,1.0,0.625]],"4468":[[0.0625,0.0,0.0625,0.6875,1.0,0.6875]],"4469":[[0.0625,0.0,0.0625,0.6875,1.0,0.6875]],"4470":[[0.0625,0.0,0.0625,0.6875,1.0,0.6875]],"4471":[[0.0625,0.0,0.0625,0.6875,1.0,0.6875]],"4472":[[0.0,0.0,0.0,0.75,1.0,0.75]],"4473":[[0.0,0.0,0.0,0.75,1.0,0.75]],"4474":[[0.0,0.0,0.0,0.75,1.0,0.75]],"4475":[[0.0,0.0,0.0,0.75,1.0,0.75]],"4476":[[0.375,0.0,0.375,0.625,1.0,0.625],[0.0,0.5,0.0,0.375,1.0,1.0],[0.375,0.5,0.0,1.0,1.0,0.375],[0.375,0.5,0.625,1.0,1.0,1.0],[0.625,0.5,0.375,1.0,1.0,0.625]],"4477":[[0.0,0.6875,0.0,1.0,0.9375,1.0]],"4478":[[0.0,0.6875,0.0,1.0,0.9375,1.0]],"4479":[[0.0,0.6875,0.0,1.0,0.8125,1.0]],"4480":[[0.0,0.0,0.0,1.0,0.875,1.0]],"4481":[[0.25,0.0,0.25,0.75,1.5,0.75]],"4482":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4483":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4484":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"4485":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"4486":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4487":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4488":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4489":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"4490":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4491":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4492":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4493":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4494":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4495":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"4496":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4497":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4498":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4499":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4500":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4501":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"4502":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4503":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4504":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4505":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4506":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4507":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4508":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4509":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4510":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4511":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4512":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4513":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4514":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4515":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4516":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4517":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4518":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4519":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"4520":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4521":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4522":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4523":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4524":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4525":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4526":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4527":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4528":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4529":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4530":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4531":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4532":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4533":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4534":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4535":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4536":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4537":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"4538":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4539":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4540":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4541":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4542":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4543":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4544":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4545":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4546":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4547":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4548":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4549":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4550":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4551":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4552":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4553":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4554":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4555":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4556":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4557":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4558":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4559":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4560":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4561":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4562":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4563":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4564":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4565":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4566":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4567":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4568":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4569":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4570":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4571":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4572":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4573":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4574":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4575":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4576":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4577":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4578":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4579":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4580":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4581":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4582":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4583":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4584":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4585":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4586":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4587":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4588":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4589":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4590":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4591":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"4592":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4593":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4594":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4595":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4596":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4597":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4598":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4599":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4600":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4601":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4602":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4603":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4604":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4605":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4606":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4607":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4608":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4609":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4610":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4611":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4612":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4613":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4614":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4615":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4616":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4617":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4618":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4619":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4620":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4621":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4622":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4623":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4624":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4625":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4626":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4627":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4628":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4629":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4630":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4631":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4632":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4633":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4634":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4635":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4636":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4637":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4638":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4639":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4640":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4641":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4642":[[0.25,0.0,0.25,0.75,1.5,0.75]],"4643":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4644":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4645":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"4646":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"4647":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4648":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4649":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4650":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"4651":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4652":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4653":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4654":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4655":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4656":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"4657":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4658":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4659":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4660":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4661":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4662":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"4663":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4664":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4665":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4666":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4667":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4668":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4669":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4670":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4671":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4672":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4673":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4674":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4675":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4676":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4677":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4678":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4679":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4680":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"4681":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4682":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4683":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4684":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4685":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4686":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4687":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4688":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4689":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4690":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4691":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4692":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4693":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4694":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4695":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4696":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4697":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4698":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"4699":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4700":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4701":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4702":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4703":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4704":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4705":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4706":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4707":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4708":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4709":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4710":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4711":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4712":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4713":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4714":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4715":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4716":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4717":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4718":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4719":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4720":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4721":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4722":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4723":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4724":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4725":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4726":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4727":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4728":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4729":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4730":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4731":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4732":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4733":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4734":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4735":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4736":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4737":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4738":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4739":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4740":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4741":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4742":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4743":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4744":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4745":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4746":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4747":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4748":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4749":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4750":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4751":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4752":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"4753":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4754":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4755":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4756":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4757":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4758":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4759":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4760":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4761":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4762":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4763":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4764":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4765":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4766":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4767":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4768":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4769":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4770":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4771":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4772":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4773":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4774":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4775":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4776":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4777":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4778":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4779":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4780":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4781":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4782":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4783":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4784":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4785":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4786":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4787":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4788":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4789":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4790":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4791":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4792":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4793":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4794":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4795":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4796":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4797":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4798":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4799":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4800":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4801":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4802":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4803":[[0.25,0.0,0.25,0.75,1.5,0.75]],"4804":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4805":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4806":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"4807":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"4808":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4809":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4810":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4811":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"4812":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4813":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4814":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4815":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4816":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4817":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"4818":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4819":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4820":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4821":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4822":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4823":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"4824":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4825":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4826":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4827":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4828":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4829":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4830":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4831":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4832":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4833":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4834":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4835":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4836":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4837":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4838":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4839":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4840":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4841":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"4842":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4843":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4844":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4845":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4846":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4847":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4848":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4849":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4850":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4851":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4852":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4853":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4854":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4855":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4856":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4857":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4858":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4859":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"4860":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4861":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4862":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4863":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4864":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4865":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4866":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4867":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4868":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4869":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4870":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4871":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4872":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4873":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4874":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4875":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4876":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4877":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4878":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4879":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4880":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4881":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4882":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4883":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4884":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4885":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4886":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4887":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4888":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4889":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4890":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4891":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4892":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4893":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4894":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4895":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4896":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4897":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4898":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4899":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4900":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4901":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4902":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4903":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4904":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4905":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4906":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4907":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4908":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4909":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4910":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4911":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4912":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4913":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"4914":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4915":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"4916":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4917":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4918":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4919":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4920":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4921":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4922":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4923":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4924":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4925":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4926":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4927":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4928":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4929":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4930":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4931":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4932":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4933":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4934":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4935":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4936":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4937":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4938":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4939":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4940":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4941":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4942":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4943":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4944":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4945":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4946":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4947":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4948":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4949":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4950":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4951":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4952":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4953":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4954":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4955":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4956":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4957":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4958":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"4959":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4960":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4961":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"4962":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4963":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4964":[[0.25,0.0,0.25,0.75,1.5,0.75]],"4965":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4966":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"4967":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"4968":[[0.0,0.0,0.3125,0.6875,1.5,0.6875]],"4969":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4970":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4971":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4972":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"4973":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4974":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4975":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4976":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4977":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4978":[[0.3125,0.0,0.3125,0.6875,1.5,1.0]],"4979":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4980":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4981":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4982":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4983":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"4984":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"4985":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4986":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"4987":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4988":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4989":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4990":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4991":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4992":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4993":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4994":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4995":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"4996":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"4997":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4998":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"4999":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"5000":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"5001":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"5002":[[0.3125,0.0,0.0,0.6875,1.5,0.6875]],"5003":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"5004":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"5005":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5006":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5007":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5008":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"5009":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5010":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5011":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5012":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5013":[[0.0,0.0,0.3125,0.75,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5014":[[0.3125,0.0,0.0,0.6875,1.5,1.0]],"5015":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5016":[[0.0,0.0,0.3125,0.6875,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5017":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5018":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"5019":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"5020":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"5021":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"5022":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"5023":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5024":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5025":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5026":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"5027":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5028":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5029":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5030":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5031":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5032":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"5033":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5034":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5035":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5036":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"5037":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"5038":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"5039":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"5040":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"5041":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5042":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5043":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5044":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"5045":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5046":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5047":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5048":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5049":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5050":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"5051":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5052":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5053":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5054":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"5055":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"5056":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"5057":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"5058":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"5059":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5060":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5061":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5062":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"5063":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5064":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5065":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5066":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5067":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5068":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"5069":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5070":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5071":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5072":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"5073":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75]],"5074":[[0.3125,0.0,0.3125,1.0,1.5,0.6875]],"5075":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"5076":[[0.0,0.0,0.3125,1.0,1.5,0.6875]],"5077":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5078":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5079":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5080":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"5081":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5082":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5083":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5084":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5085":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5086":[[0.3125,0.0,0.3125,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"5087":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5088":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5089":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5090":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"5091":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"5092":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"5093":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"5094":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"5095":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5096":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5097":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5098":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"5099":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5100":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5101":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5102":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5103":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5104":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"5105":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5106":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5107":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5108":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"5109":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25]],"5110":[[0.3125,0.0,0.0,0.6875,1.5,0.6875],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"5111":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"5112":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125]],"5113":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5114":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5115":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5116":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"5117":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5118":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5119":[[0.25,0.0,0.25,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0],[0.75,0.0,0.3125,1.0,1.5,0.6875]],"5120":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5121":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.25,0.0,0.25,0.75,1.5,0.3125],[0.25,0.0,0.6875,0.75,1.5,0.75],[0.3125,0.0,0.0,0.6875,1.5,0.25],[0.3125,0.0,0.75,0.6875,1.5,1.0]],"5122":[[0.3125,0.0,0.0,0.6875,1.5,1.0],[0.6875,0.0,0.3125,1.0,1.5,0.6875]],"5123":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5124":[[0.0,0.0,0.3125,1.0,1.5,0.6875],[0.3125,0.0,0.0,0.6875,1.5,0.3125],[0.3125,0.0,0.6875,0.6875,1.5,1.0]],"5125":[[0.0625,0.0,0.0625,0.9375,1.0,0.9375]],"5126":[[0.25,0.0,0.25,0.75,0.5,0.75]],"5127":[[0.0,0.0,0.0,1.0,0.0625,1.0]]},"blocks":{"air":0,"stone":1,"granite":1,"polished_granite":1,"diorite":1,"polished_diorite":1,"andesite":1,"polished_andesite":1,"grass_block":1,"dirt":1,"coarse_dirt":1,"podzol":1,"cobblestone":1,"oak_planks":1,"spruce_planks":1,"birch_planks":1,"jungle_planks":1,"acacia_planks":1,"cherry_planks":1,"dark_oak_planks":1,"pale_oak_wood":1,"pale_oak_planks":1,"mangrove_planks":1,"bamboo_planks":1,"bamboo_mosaic":1,"oak_sapling":0,"spruce_sapling":0,"birch_sapling":0,"jungle_sapling":0,"acacia_sapling":0,"cherry_sapling":0,"dark_oak_sapling":0,"pale_oak_sapling":0,"mangrove_propagule":0,"bedrock":1,"water":0,"lava":0,"sand":1,"suspicious_sand":1,"red_sand":1,"gravel":1,"suspicious_gravel":1,"gold_ore":1,"deepslate_gold_ore":1,"iron_ore":1,"deepslate_iron_ore":1,"coal_ore":1,"deepslate_coal_ore":1,"nether_gold_ore":1,"oak_log":1,"spruce_log":1,"birch_log":1,"jungle_log":1,"acacia_log":1,"cherry_log":1,"dark_oak_log":1,"pale_oak_log":1,"mangrove_log":1,"mangrove_roots":1,"muddy_mangrove_roots":1,"bamboo_block":1,"stripped_spruce_log":1,"stripped_birch_log":1,"stripped_jungle_log":1,"stripped_acacia_log":1,"stripped_cherry_log":1,"stripped_dark_oak_log":1,"stripped_pale_oak_log":1,"stripped_oak_log":1,"stripped_mangrove_log":1,"stripped_bamboo_block":1,"oak_wood":1,"spruce_wood":1,"birch_wood":1,"jungle_wood":1,"acacia_wood":1,"cherry_wood":1,"dark_oak_wood":1,"mangrove_wood":1,"stripped_oak_wood":1,"stripped_spruce_wood":1,"stripped_birch_wood":1,"stripped_jungle_wood":1,"stripped_acacia_wood":1,"stripped_cherry_wood":1,"stripped_dark_oak_wood":1,"stripped_pale_oak_wood":1,"stripped_mangrove_wood":1,"oak_leaves":1,"spruce_leaves":1,"birch_leaves":1,"jungle_leaves":1,"acacia_leaves":1,"cherry_leaves":1,"dark_oak_leaves":1,"pale_oak_leaves":1,"mangrove_leaves":1,"azalea_leaves":1,"flowering_azalea_leaves":1,"sponge":1,"wet_sponge":1,"glass":1,"lapis_ore":1,"deepslate_lapis_ore":1,"lapis_block":1,"dispenser":1,"sandstone":1,"chiseled_sandstone":1,"cut_sandstone":1,"note_block":1,"white_bed":[2,3,2,3,3,2,3,2,4,5,4,5,5,4,5,4],"orange_bed":[2,3,2,3,3,2,3,2,4,5,4,5,5,4,5,4],"magenta_bed":[2,3,2,3,3,2,3,2,4,5,4,5,5,4,5,4],"light_blue_bed":[2,3,2,3,3,2,3,2,4,5,4,5,5,4,5,4],"yellow_bed":[2,3,2,3,3,2,3,2,4,5,4,5,5,4,5,4],"lime_bed":[2,3,2,3,3,2,3,2,4,5,4,5,5,4,5,4],"pink_bed":[2,3,2,3,3,2,3,2,4,5,4,5,5,4,5,4],"gray_bed":[2,3,2,3,3,2,3,2,4,5,4,5,5,4,5,4],"light_gray_bed":[2,3,2,3,3,2,3,2,4,5,4,5,5,4,5,4],"cyan_bed":[2,3,2,3,3,2,3,2,4,5,4,5,5,4,5,4],"purple_bed":[2,3,2,3,3,2,3,2,4,5,4,5,5,4,5,4],"blue_bed":[2,3,2,3,3,2,3,2,4,5,4,5,5,4,5,4],"brown_bed":[2,3,2,3,3,2,3,2,4,5,4,5,5,4,5,4],"green_bed":[2,3,2,3,3,2,3,2,4,5,4,5,5,4,5,4],"red_bed":[2,3,2,3,3,2,3,2,4,5,4,5,5,4,5,4],"black_bed":[2,3,2,3,3,2,3,2,4,5,4,5,5,4,5,4],"powered_rail":0,"detector_rail":0,"sticky_piston":[6,7,8,9,10,11,1,1,1,1,1,1],"cobweb":0,"short_grass":0,"fern":0,"dead_bush":0,"bush":0,"short_dry_grass":0,"tall_dry_grass":0,"seagrass":0,"tall_seagrass":0,"piston":[6,7,8,9,10,11,1,1,1,1,1,1],"piston_head":[12,12,13,13,14,14,15,15,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23],"white_wool":1,"orange_wool":1,"magenta_wool":1,"light_blue_wool":1,"yellow_wool":1,"lime_wool":1,"pink_wool":1,"gray_wool":1,"light_gray_wool":1,"cyan_wool":1,"purple_wool":1,"blue_wool":1,"brown_wool":1,"green_wool":1,"red_wool":1,"black_wool":1,"moving_piston":0,"dandelion":0,"torchflower":0,"poppy":0,"blue_orchid":0,"allium":0,"azure_bluet":0,"red_tulip":0,"orange_tulip":0,"white_tulip":0,"pink_tulip":0,"oxeye_daisy":0,"cornflower":0,"wither_rose":0,"lily_of_the_valley":0,"brown_mushroom":0,"red_mushroom":0,"gold_block":1,"iron_block":1,"bricks":1,"tnt":1,"bookshelf":1,"chiseled_bookshelf":1,"acacia_shelf":[24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27],"bamboo_shelf":[24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27],"birch_shelf":[24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27],"cherry_shelf":[24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27],"crimson_shelf":[24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27],"dark_oak_shelf":[24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27],"jungle_shelf":[24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27],"mangrove_shelf":[24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27],"oak_shelf":[24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27],"pale_oak_shelf":[24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27],"spruce_shelf":[24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27],"warped_shelf":[24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,25,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,26,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27,27],"mossy_cobblestone":1,"obsidian":1,"torch":0,"wall_torch":0,"fire":0,"soul_fire":0,"spawner":1,"creaking_heart":1,"oak_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"chest":[52,52,53,53,54,54,52,52,54,54,53,53,52,52,55,55,56,56,52,52,56,56,55,55],"redstone_wire":0,"diamond_ore":1,"deepslate_diamond_ore":1,"diamond_block":1,"crafting_table":1,"wheat":0,"farmland":57,"furnace":1,"oak_sign":0,"spruce_sign":0,"birch_sign":0,"acacia_sign":0,"cherry_sign":0,"jungle_sign":0,"dark_oak_sign":0,"pale_oak_sign":0,"mangrove_sign":0,"bamboo_sign":0,"oak_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"ladder":[62,62,63,63,64,64,65,65],"rail":0,"cobblestone_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"oak_wall_sign":0,"spruce_wall_sign":0,"birch_wall_sign":0,"acacia_wall_sign":0,"cherry_wall_sign":0,"jungle_wall_sign":0,"dark_oak_wall_sign":0,"pale_oak_wall_sign":0,"mangrove_wall_sign":0,"bamboo_wall_sign":0,"oak_hanging_sign":0,"spruce_hanging_sign":0,"birch_hanging_sign":0,"acacia_hanging_sign":0,"cherry_hanging_sign":0,"jungle_hanging_sign":0,"dark_oak_hanging_sign":0,"pale_oak_hanging_sign":0,"crimson_hanging_sign":0,"warped_hanging_sign":0,"mangrove_hanging_sign":0,"bamboo_hanging_sign":0,"oak_wall_hanging_sign":[66,66,66,66,67,67,67,67],"spruce_wall_hanging_sign":[66,66,66,66,67,67,67,67],"birch_wall_hanging_sign":[66,66,66,66,67,67,67,67],"acacia_wall_hanging_sign":[66,66,66,66,67,67,67,67],"cherry_wall_hanging_sign":[66,66,66,66,67,67,67,67],"jungle_wall_hanging_sign":[66,66,66,66,67,67,67,67],"dark_oak_wall_hanging_sign":[66,66,66,66,67,67,67,67],"pale_oak_wall_hanging_sign":[66,66,66,66,67,67,67,67],"mangrove_wall_hanging_sign":[66,66,66,66,67,67,67,67],"crimson_wall_hanging_sign":[66,66,66,66,67,67,67,67],"warped_wall_hanging_sign":[66,66,66,66,67,67,67,67],"bamboo_wall_hanging_sign":[66,66,66,66,67,67,67,67],"lever":0,"stone_pressure_plate":0,"iron_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"oak_pressure_plate":0,"spruce_pressure_plate":0,"birch_pressure_plate":0,"jungle_pressure_plate":0,"acacia_pressure_plate":0,"cherry_pressure_plate":0,"dark_oak_pressure_plate":0,"pale_oak_pressure_plate":0,"mangrove_pressure_plate":0,"bamboo_pressure_plate":0,"redstone_ore":1,"deepslate_redstone_ore":1,"redstone_torch":0,"redstone_wall_torch":0,"stone_button":0,"snow":[0,68,69,70,71,72,73,74],"ice":1,"snow_block":1,"cactus":75,"cactus_flower":0,"clay":1,"sugar_cane":0,"jukebox":1,"oak_fence":[76,77,76,77,78,79,78,79,80,81,80,81,82,83,82,83,84,85,84,85,86,87,86,87,88,89,88,89,90,91,90,91],"netherrack":1,"soul_sand":92,"soul_soil":1,"basalt":1,"polished_basalt":1,"soul_torch":0,"soul_wall_torch":0,"copper_torch":0,"copper_wall_torch":0,"glowstone":1,"nether_portal":0,"carved_pumpkin":1,"jack_o_lantern":1,"cake":[93,94,95,96,97,98,99],"repeater":100,"white_stained_glass":1,"orange_stained_glass":1,"magenta_stained_glass":1,"light_blue_stained_glass":1,"yellow_stained_glass":1,"lime_stained_glass":1,"pink_stained_glass":1,"gray_stained_glass":1,"light_gray_stained_glass":1,"cyan_stained_glass":1,"purple_stained_glass":1,"blue_stained_glass":1,"brown_stained_glass":1,"green_stained_glass":1,"red_stained_glass":1,"black_stained_glass":1,"oak_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"spruce_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"birch_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"jungle_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"acacia_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"cherry_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"dark_oak_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"pale_oak_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"mangrove_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"bamboo_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"stone_bricks":1,"mossy_stone_bricks":1,"cracked_stone_bricks":1,"chiseled_stone_bricks":1,"packed_mud":1,"mud_bricks":1,"infested_stone":1,"infested_cobblestone":1,"infested_stone_bricks":1,"infested_mossy_stone_bricks":1,"infested_cracked_stone_bricks":1,"infested_chiseled_stone_bricks":1,"brown_mushroom_block":1,"red_mushroom_block":1,"mushroom_stem":1,"iron_bars":[107,108,107,108,109,110,109,110,111,112,111,112,113,114,113,114,115,116,115,116,117,118,117,118,119,120,119,120,121,122,121,122],"copper_bars":[123,124,123,124,125,126,125,126,127,128,127,128,129,130,129,130,131,132,131,132,133,134,133,134,135,136,135,136,137,138,137,138],"exposed_copper_bars":[139,140,139,140,141,142,141,142,143,144,143,144,145,146,145,146,147,148,147,148,149,150,149,150,151,152,151,152,153,154,153,154],"weathered_copper_bars":[155,156,155,156,157,158,157,158,159,160,159,160,161,162,161,162,163,164,163,164,165,166,165,166,167,168,167,168,169,170,169,170],"oxidized_copper_bars":[171,172,171,172,173,174,173,174,175,176,175,176,177,178,177,178,179,180,179,180,181,182,181,182,183,184,183,184,185,186,185,186],"waxed_copper_bars":[187,188,187,188,189,190,189,190,191,192,191,192,193,194,193,194,195,196,195,196,197,198,197,198,199,200,199,200,201,202,201,202],"waxed_exposed_copper_bars":[203,204,203,204,205,206,205,206,207,208,207,208,209,210,209,210,211,212,211,212,213,214,213,214,215,216,215,216,217,218,217,218],"waxed_weathered_copper_bars":[219,220,219,220,221,222,221,222,223,224,223,224,225,226,225,226,227,228,227,228,229,230,229,230,231,232,231,232,233,234,233,234],"waxed_oxidized_copper_bars":[235,236,235,236,237,238,237,238,239,240,239,240,241,242,241,242,243,244,243,244,245,246,245,246,247,248,247,248,249,250,249,250],"iron_chain":[251,251,252,252,253,253],"copper_chain":[251,251,252,252,253,253],"exposed_copper_chain":[251,251,252,252,253,253],"weathered_copper_chain":[251,251,252,252,253,253],"oxidized_copper_chain":[251,251,252,252,253,253],"waxed_copper_chain":[251,251,252,252,253,253],"waxed_exposed_copper_chain":[251,251,252,252,253,253],"waxed_weathered_copper_chain":[251,251,252,252,253,253],"waxed_oxidized_copper_chain":[251,251,252,252,253,253],"glass_pane":[254,255,254,255,256,257,256,257,258,259,258,259,260,261,260,261,262,263,262,263,264,265,264,265,266,267,266,267,268,269,268,269],"pumpkin":1,"melon":1,"attached_pumpkin_stem":0,"attached_melon_stem":0,"pumpkin_stem":0,"melon_stem":0,"vine":0,"glow_lichen":0,"resin_clump":0,"oak_fence_gate":[0,0,270,270,0,0,270,270,0,0,270,270,0,0,270,270,0,0,271,271,0,0,271,271,0,0,271,271,0,0,271,271],"brick_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"stone_brick_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"mud_brick_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"mycelium":1,"lily_pad":272,"resin_block":1,"resin_bricks":1,"resin_brick_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"resin_brick_slab":[273,273,274,274,1,1],"resin_brick_wall":[275,276,277,275,276,277,0,278,279,0,278,279,280,281,282,280,281,282,283,284,285,283,284,285,286,287,288,286,287,288,289,290,291,289,290,291,292,293,294,292,293,294,295,296,297,295,296,297,298,299,300,298,299,300,301,302,303,301,302,303,304,305,306,304,305,306,307,308,309,307,308,309,310,311,312,310,311,312,313,314,315,313,314,315,316,317,318,316,317,318,319,320,321,319,320,321,322,323,324,322,323,324,325,326,327,325,326,327,328,329,330,328,329,330,331,332,333,331,332,333,334,335,336,334,335,336,337,338,339,337,338,339,340,341,342,340,341,342,343,344,345,343,344,345,346,347,348,346,347,348,349,350,351,349,350,351,352,353,354,352,353,354,355,356,357,355,356,357,358,359,360,358,359,360,361,362,363,361,362,363,364,365,366,364,365,366,367,368,369,367,368,369,370,371,372,370,371,372,373,374,375,373,374,375,376,377,378,376,377,378,379,380,381,379,380,381,382,383,384,382,383,384,385,386,387,385,386,387,388,389,390,388,389,390,391,392,393,391,392,393,394,395,396,394,395,396,397,398,399,397,398,399,400,401,402,400,401,402,403,404,405,403,404,405,406,407,408,406,407,408,409,410,411,409,410,411,412,413,414,412,413,414,415,416,417,415,416,417,418,419,420,418,419,420,421,422,423,421,422,423,424,425,426,424,425,426,427,428,429,427,428,429,430,431,432,430,431,432,433,434,435,433,434,435],"chiseled_resin_bricks":1,"nether_bricks":1,"nether_brick_fence":[436,437,436,437,438,439,438,439,440,441,440,441,442,443,442,443,444,445,444,445,446,447,446,447,448,449,448,449,450,451,450,451],"nether_brick_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"nether_wart":0,"enchanting_table":452,"brewing_stand":453,"cauldron":454,"water_cauldron":454,"lava_cauldron":454,"powder_snow_cauldron":454,"end_portal":0,"end_portal_frame":[455,455,455,455,456,456,456,456],"end_stone":1,"dragon_egg":457,"redstone_lamp":1,"cocoa":[458,459,460,461,462,463,464,465,466,467,468,469],"sandstone_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"emerald_ore":1,"deepslate_emerald_ore":1,"ender_chest":470,"tripwire_hook":0,"tripwire":0,"emerald_block":1,"spruce_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"birch_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"jungle_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"command_block":1,"beacon":1,"cobblestone_wall":[471,472,473,471,472,473,0,474,475,0,474,475,476,477,478,476,477,478,479,480,481,479,480,481,482,483,484,482,483,484,485,486,487,485,486,487,488,489,490,488,489,490,491,492,493,491,492,493,494,495,496,494,495,496,497,498,499,497,498,499,500,501,502,500,501,502,503,504,505,503,504,505,506,507,508,506,507,508,509,510,511,509,510,511,512,513,514,512,513,514,515,516,517,515,516,517,518,519,520,518,519,520,521,522,523,521,522,523,524,525,526,524,525,526,527,528,529,527,528,529,530,531,532,530,531,532,533,534,535,533,534,535,536,537,538,536,537,538,539,540,541,539,540,541,542,543,544,542,543,544,545,546,547,545,546,547,548,549,550,548,549,550,551,552,553,551,552,553,554,555,556,554,555,556,557,558,559,557,558,559,560,561,562,560,561,562,563,564,565,563,564,565,566,567,568,566,567,568,569,570,571,569,570,571,572,573,574,572,573,574,575,576,577,575,576,577,578,579,580,578,579,580,581,582,583,581,582,583,584,585,586,584,585,586,587,588,589,587,588,589,590,591,592,590,591,592,593,594,595,593,594,595,596,597,598,596,597,598,599,600,601,599,600,601,602,603,604,602,603,604,605,606,607,605,606,607,608,609,610,608,609,610,611,612,613,611,612,613,614,615,616,614,615,616,617,618,619,617,618,619,620,621,622,620,621,622,623,624,625,623,624,625,626,627,628,626,627,628,629,630,631,629,630,631],"mossy_cobblestone_wall":[632,633,634,632,633,634,0,635,636,0,635,636,637,638,639,637,638,639,640,641,642,640,641,642,643,644,645,643,644,645,646,647,648,646,647,648,649,650,651,649,650,651,652,653,654,652,653,654,655,656,657,655,656,657,658,659,660,658,659,660,661,662,663,661,662,663,664,665,666,664,665,666,667,668,669,667,668,669,670,671,672,670,671,672,673,674,675,673,674,675,676,677,678,676,677,678,679,680,681,679,680,681,682,683,684,682,683,684,685,686,687,685,686,687,688,689,690,688,689,690,691,692,693,691,692,693,694,695,696,694,695,696,697,698,699,697,698,699,700,701,702,700,701,702,703,704,705,703,704,705,706,707,708,706,707,708,709,710,711,709,710,711,712,713,714,712,713,714,715,716,717,715,716,717,718,719,720,718,719,720,721,722,723,721,722,723,724,725,726,724,725,726,727,728,729,727,728,729,730,731,732,730,731,732,733,734,735,733,734,735,736,737,738,736,737,738,739,740,741,739,740,741,742,743,744,742,743,744,745,746,747,745,746,747,748,749,750,748,749,750,751,752,753,751,752,753,754,755,756,754,755,756,757,758,759,757,758,759,760,761,762,760,761,762,763,764,765,763,764,765,766,767,768,766,767,768,769,770,771,769,770,771,772,773,774,772,773,774,775,776,777,775,776,777,778,779,780,778,779,780,781,782,783,781,782,783,784,785,786,784,785,786,787,788,789,787,788,789,790,791,792,790,791,792],"flower_pot":793,"potted_torchflower":793,"potted_oak_sapling":793,"potted_spruce_sapling":793,"potted_birch_sapling":793,"potted_jungle_sapling":793,"potted_acacia_sapling":793,"potted_cherry_sapling":793,"potted_dark_oak_sapling":793,"potted_pale_oak_sapling":793,"potted_mangrove_propagule":793,"potted_fern":793,"potted_dandelion":793,"potted_poppy":793,"potted_blue_orchid":793,"potted_allium":793,"potted_azure_bluet":793,"potted_red_tulip":793,"potted_orange_tulip":793,"potted_white_tulip":793,"potted_pink_tulip":793,"potted_oxeye_daisy":793,"potted_cornflower":793,"potted_lily_of_the_valley":793,"potted_wither_rose":793,"potted_red_mushroom":793,"potted_brown_mushroom":793,"potted_dead_bush":793,"potted_cactus":793,"carrots":0,"potatoes":0,"oak_button":0,"spruce_button":0,"birch_button":0,"jungle_button":0,"acacia_button":0,"cherry_button":0,"dark_oak_button":0,"pale_oak_button":0,"mangrove_button":0,"bamboo_button":0,"skeleton_skull":794,"skeleton_wall_skull":[795,795,796,796,797,797,798,798],"wither_skeleton_skull":794,"wither_skeleton_wall_skull":[795,795,796,796,797,797,798,798],"zombie_head":794,"zombie_wall_head":[795,795,796,796,797,797,798,798],"player_head":794,"player_wall_head":[795,795,796,796,797,797,798,798],"creeper_head":794,"creeper_wall_head":[795,795,796,796,797,797,798,798],"dragon_head":794,"dragon_wall_head":[795,795,796,796,797,797,798,798],"piglin_head":799,"piglin_wall_head":[800,800,801,801,802,802,803,803],"anvil":[804,804,805,805],"chipped_anvil":[804,804,805,805],"damaged_anvil":[804,804,805,805],"trapped_chest":[52,52,53,53,54,54,52,52,54,54,53,53,52,52,55,55,56,56,52,52,56,56,55,55],"light_weighted_pressure_plate":0,"heavy_weighted_pressure_plate":0,"comparator":100,"daylight_detector":806,"redstone_block":1,"nether_quartz_ore":1,"hopper":[807,808,809,810,811,807,808,809,810,811],"quartz_block":1,"chiseled_quartz_block":1,"quartz_pillar":1,"quartz_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"activator_rail":0,"dropper":1,"white_terracotta":1,"orange_terracotta":1,"magenta_terracotta":1,"light_blue_terracotta":1,"yellow_terracotta":1,"lime_terracotta":1,"pink_terracotta":1,"gray_terracotta":1,"light_gray_terracotta":1,"cyan_terracotta":1,"purple_terracotta":1,"blue_terracotta":1,"brown_terracotta":1,"green_terracotta":1,"red_terracotta":1,"black_terracotta":1,"white_stained_glass_pane":[812,813,812,813,814,815,814,815,816,817,816,817,818,819,818,819,820,821,820,821,822,823,822,823,824,825,824,825,826,827,826,827],"orange_stained_glass_pane":[828,829,828,829,830,831,830,831,832,833,832,833,834,835,834,835,836,837,836,837,838,839,838,839,840,841,840,841,842,843,842,843],"magenta_stained_glass_pane":[844,845,844,845,846,847,846,847,848,849,848,849,850,851,850,851,852,853,852,853,854,855,854,855,856,857,856,857,858,859,858,859],"light_blue_stained_glass_pane":[860,861,860,861,862,863,862,863,864,865,864,865,866,867,866,867,868,869,868,869,870,871,870,871,872,873,872,873,874,875,874,875],"yellow_stained_glass_pane":[876,877,876,877,878,879,878,879,880,881,880,881,882,883,882,883,884,885,884,885,886,887,886,887,888,889,888,889,890,891,890,891],"lime_stained_glass_pane":[892,893,892,893,894,895,894,895,896,897,896,897,898,899,898,899,900,901,900,901,902,903,902,903,904,905,904,905,906,907,906,907],"pink_stained_glass_pane":[908,909,908,909,910,911,910,911,912,913,912,913,914,915,914,915,916,917,916,917,918,919,918,919,920,921,920,921,922,923,922,923],"gray_stained_glass_pane":[924,925,924,925,926,927,926,927,928,929,928,929,930,931,930,931,932,933,932,933,934,935,934,935,936,937,936,937,938,939,938,939],"light_gray_stained_glass_pane":[940,941,940,941,942,943,942,943,944,945,944,945,946,947,946,947,948,949,948,949,950,951,950,951,952,953,952,953,954,955,954,955],"cyan_stained_glass_pane":[956,957,956,957,958,959,958,959,960,961,960,961,962,963,962,963,964,965,964,965,966,967,966,967,968,969,968,969,970,971,970,971],"purple_stained_glass_pane":[972,973,972,973,974,975,974,975,976,977,976,977,978,979,978,979,980,981,980,981,982,983,982,983,984,985,984,985,986,987,986,987],"blue_stained_glass_pane":[988,989,988,989,990,991,990,991,992,993,992,993,994,995,994,995,996,997,996,997,998,999,998,999,1000,1001,1000,1001,1002,1003,1002,1003],"brown_stained_glass_pane":[1004,1005,1004,1005,1006,1007,1006,1007,1008,1009,1008,1009,1010,1011,1010,1011,1012,1013,1012,1013,1014,1015,1014,1015,1016,1017,1016,1017,1018,1019,1018,1019],"green_stained_glass_pane":[1020,1021,1020,1021,1022,1023,1022,1023,1024,1025,1024,1025,1026,1027,1026,1027,1028,1029,1028,1029,1030,1031,1030,1031,1032,1033,1032,1033,1034,1035,1034,1035],"red_stained_glass_pane":[1036,1037,1036,1037,1038,1039,1038,1039,1040,1041,1040,1041,1042,1043,1042,1043,1044,1045,1044,1045,1046,1047,1046,1047,1048,1049,1048,1049,1050,1051,1050,1051],"black_stained_glass_pane":[1052,1053,1052,1053,1054,1055,1054,1055,1056,1057,1056,1057,1058,1059,1058,1059,1060,1061,1060,1061,1062,1063,1062,1063,1064,1065,1064,1065,1066,1067,1066,1067],"acacia_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"cherry_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"dark_oak_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"pale_oak_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"mangrove_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"bamboo_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"bamboo_mosaic_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"slime_block":1,"barrier":1,"light":0,"iron_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"prismarine":1,"prismarine_bricks":1,"dark_prismarine":1,"prismarine_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"prismarine_brick_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"dark_prismarine_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"prismarine_slab":[273,273,274,274,1,1],"prismarine_brick_slab":[273,273,274,274,1,1],"dark_prismarine_slab":[273,273,274,274,1,1],"sea_lantern":1,"hay_block":1,"white_carpet":1068,"orange_carpet":1068,"magenta_carpet":1068,"light_blue_carpet":1068,"yellow_carpet":1068,"lime_carpet":1068,"pink_carpet":1068,"gray_carpet":1068,"light_gray_carpet":1068,"cyan_carpet":1068,"purple_carpet":1068,"blue_carpet":1068,"brown_carpet":1068,"green_carpet":1068,"red_carpet":1068,"black_carpet":1068,"terracotta":1,"coal_block":1,"packed_ice":1,"sunflower":0,"lilac":0,"rose_bush":0,"peony":0,"tall_grass":0,"large_fern":0,"white_banner":0,"orange_banner":0,"magenta_banner":0,"light_blue_banner":0,"yellow_banner":0,"lime_banner":0,"pink_banner":0,"gray_banner":0,"light_gray_banner":0,"cyan_banner":0,"purple_banner":0,"blue_banner":0,"brown_banner":0,"green_banner":0,"red_banner":0,"black_banner":0,"white_wall_banner":0,"orange_wall_banner":0,"magenta_wall_banner":0,"light_blue_wall_banner":0,"yellow_wall_banner":0,"lime_wall_banner":0,"pink_wall_banner":0,"gray_wall_banner":0,"light_gray_wall_banner":0,"cyan_wall_banner":0,"purple_wall_banner":0,"blue_wall_banner":0,"brown_wall_banner":0,"green_wall_banner":0,"red_wall_banner":0,"black_wall_banner":0,"red_sandstone":1,"chiseled_red_sandstone":1,"cut_red_sandstone":1,"red_sandstone_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"oak_slab":[273,273,274,274,1,1],"spruce_slab":[273,273,274,274,1,1],"birch_slab":[273,273,274,274,1,1],"jungle_slab":[273,273,274,274,1,1],"acacia_slab":[273,273,274,274,1,1],"cherry_slab":[273,273,274,274,1,1],"dark_oak_slab":[273,273,274,274,1,1],"pale_oak_slab":[273,273,274,274,1,1],"mangrove_slab":[273,273,274,274,1,1],"bamboo_slab":[273,273,274,274,1,1],"bamboo_mosaic_slab":[273,273,274,274,1,1],"stone_slab":[273,273,274,274,1,1],"smooth_stone_slab":[273,273,274,274,1,1],"sandstone_slab":[273,273,274,274,1,1],"cut_sandstone_slab":[273,273,274,274,1,1],"petrified_oak_slab":[273,273,274,274,1,1],"cobblestone_slab":[273,273,274,274,1,1],"brick_slab":[273,273,274,274,1,1],"stone_brick_slab":[273,273,274,274,1,1],"mud_brick_slab":[273,273,274,274,1,1],"nether_brick_slab":[273,273,274,274,1,1],"quartz_slab":[273,273,274,274,1,1],"red_sandstone_slab":[273,273,274,274,1,1],"cut_red_sandstone_slab":[273,273,274,274,1,1],"purpur_slab":[273,273,274,274,1,1],"smooth_stone":1,"smooth_sandstone":1,"smooth_quartz":1,"smooth_red_sandstone":1,"spruce_fence_gate":[0,0,270,270,0,0,270,270,0,0,270,270,0,0,270,270,0,0,271,271,0,0,271,271,0,0,271,271,0,0,271,271],"birch_fence_gate":[0,0,270,270,0,0,270,270,0,0,270,270,0,0,270,270,0,0,271,271,0,0,271,271,0,0,271,271,0,0,271,271],"jungle_fence_gate":[0,0,270,270,0,0,270,270,0,0,270,270,0,0,270,270,0,0,271,271,0,0,271,271,0,0,271,271,0,0,271,271],"acacia_fence_gate":[0,0,270,270,0,0,270,270,0,0,270,270,0,0,270,270,0,0,271,271,0,0,271,271,0,0,271,271,0,0,271,271],"cherry_fence_gate":[0,0,270,270,0,0,270,270,0,0,270,270,0,0,270,270,0,0,271,271,0,0,271,271,0,0,271,271,0,0,271,271],"dark_oak_fence_gate":[0,0,270,270,0,0,270,270,0,0,270,270,0,0,270,270,0,0,271,271,0,0,271,271,0,0,271,271,0,0,271,271],"pale_oak_fence_gate":[0,0,270,270,0,0,270,270,0,0,270,270,0,0,270,270,0,0,271,271,0,0,271,271,0,0,271,271,0,0,271,271],"mangrove_fence_gate":[0,0,270,270,0,0,270,270,0,0,270,270,0,0,270,270,0,0,271,271,0,0,271,271,0,0,271,271,0,0,271,271],"bamboo_fence_gate":[0,0,270,270,0,0,270,270,0,0,270,270,0,0,270,270,0,0,271,271,0,0,271,271,0,0,271,271,0,0,271,271],"spruce_fence":[1069,1070,1069,1070,1071,1072,1071,1072,1073,1074,1073,1074,1075,1076,1075,1076,1077,1078,1077,1078,1079,1080,1079,1080,1081,1082,1081,1082,1083,1084,1083,1084],"birch_fence":[1085,1086,1085,1086,1087,1088,1087,1088,1089,1090,1089,1090,1091,1092,1091,1092,1093,1094,1093,1094,1095,1096,1095,1096,1097,1098,1097,1098,1099,1100,1099,1100],"jungle_fence":[1101,1102,1101,1102,1103,1104,1103,1104,1105,1106,1105,1106,1107,1108,1107,1108,1109,1110,1109,1110,1111,1112,1111,1112,1113,1114,1113,1114,1115,1116,1115,1116],"acacia_fence":[1117,1118,1117,1118,1119,1120,1119,1120,1121,1122,1121,1122,1123,1124,1123,1124,1125,1126,1125,1126,1127,1128,1127,1128,1129,1130,1129,1130,1131,1132,1131,1132],"cherry_fence":[1133,1134,1133,1134,1135,1136,1135,1136,1137,1138,1137,1138,1139,1140,1139,1140,1141,1142,1141,1142,1143,1144,1143,1144,1145,1146,1145,1146,1147,1148,1147,1148],"dark_oak_fence":[1149,1150,1149,1150,1151,1152,1151,1152,1153,1154,1153,1154,1155,1156,1155,1156,1157,1158,1157,1158,1159,1160,1159,1160,1161,1162,1161,1162,1163,1164,1163,1164],"pale_oak_fence":[1165,1166,1165,1166,1167,1168,1167,1168,1169,1170,1169,1170,1171,1172,1171,1172,1173,1174,1173,1174,1175,1176,1175,1176,1177,1178,1177,1178,1179,1180,1179,1180],"mangrove_fence":[1181,1182,1181,1182,1183,1184,1183,1184,1185,1186,1185,1186,1187,1188,1187,1188,1189,1190,1189,1190,1191,1192,1191,1192,1193,1194,1193,1194,1195,1196,1195,1196],"bamboo_fence":[1197,1198,1197,1198,1199,1200,1199,1200,1201,1202,1201,1202,1203,1204,1203,1204,1205,1206,1205,1206,1207,1208,1207,1208,1209,1210,1209,1210,1211,1212,1211,1212],"spruce_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"birch_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"jungle_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"acacia_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"cherry_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"dark_oak_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"pale_oak_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"mangrove_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"bamboo_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"end_rod":[1213,1214,1213,1214,1215,1215],"chorus_plant":[1216,1217,1218,1219,1220,1221,1222,1223,1224,1225,1226,1227,1228,1229,1230,1231,1232,1233,1234,1235,1236,1237,1238,1239,1240,1241,1242,1243,1244,1245,1246,1247,1248,1249,1250,1251,1252,1253,1254,1255,1256,1257,1258,1259,1260,1261,1262,1263,1264,1265,1266,1267,1268,1269,1270,1271,1272,1273,1274,1275,1276,1277,1278,1279],"chorus_flower":1,"purpur_block":1,"purpur_pillar":1,"purpur_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"end_stone_bricks":1,"torchflower_crop":0,"pitcher_crop":[0,1280,0,1281,0,1281,0,1281,0,1281],"pitcher_plant":0,"beetroots":0,"dirt_path":1282,"end_gateway":0,"repeating_command_block":1,"chain_command_block":1,"frosted_ice":1,"magma_block":1,"nether_wart_block":1,"red_nether_bricks":1,"bone_block":1,"structure_void":0,"observer":1,"shulker_box":1,"white_shulker_box":1,"orange_shulker_box":1,"magenta_shulker_box":1,"light_blue_shulker_box":1,"yellow_shulker_box":1,"lime_shulker_box":1,"pink_shulker_box":1,"gray_shulker_box":1,"light_gray_shulker_box":1,"cyan_shulker_box":1,"purple_shulker_box":1,"blue_shulker_box":1,"brown_shulker_box":1,"green_shulker_box":1,"red_shulker_box":1,"black_shulker_box":1,"white_glazed_terracotta":1,"orange_glazed_terracotta":1,"magenta_glazed_terracotta":1,"light_blue_glazed_terracotta":1,"yellow_glazed_terracotta":1,"lime_glazed_terracotta":1,"pink_glazed_terracotta":1,"gray_glazed_terracotta":1,"light_gray_glazed_terracotta":1,"cyan_glazed_terracotta":1,"purple_glazed_terracotta":1,"blue_glazed_terracotta":1,"brown_glazed_terracotta":1,"green_glazed_terracotta":1,"red_glazed_terracotta":1,"black_glazed_terracotta":1,"white_concrete":1,"orange_concrete":1,"magenta_concrete":1,"light_blue_concrete":1,"yellow_concrete":1,"lime_concrete":1,"pink_concrete":1,"gray_concrete":1,"light_gray_concrete":1,"cyan_concrete":1,"purple_concrete":1,"blue_concrete":1,"brown_concrete":1,"green_concrete":1,"red_concrete":1,"black_concrete":1,"white_concrete_powder":1,"orange_concrete_powder":1,"magenta_concrete_powder":1,"light_blue_concrete_powder":1,"yellow_concrete_powder":1,"lime_concrete_powder":1,"pink_concrete_powder":1,"gray_concrete_powder":1,"light_gray_concrete_powder":1,"cyan_concrete_powder":1,"purple_concrete_powder":1,"blue_concrete_powder":1,"brown_concrete_powder":1,"green_concrete_powder":1,"red_concrete_powder":1,"black_concrete_powder":1,"kelp":0,"kelp_plant":0,"dried_kelp_block":1,"turtle_egg":[1283,1283,1283,1284,1284,1284,1284,1284,1284,1284,1284,1284],"sniffer_egg":1285,"dried_ghast":1286,"dead_tube_coral_block":1,"dead_brain_coral_block":1,"dead_bubble_coral_block":1,"dead_fire_coral_block":1,"dead_horn_coral_block":1,"tube_coral_block":1,"brain_coral_block":1,"bubble_coral_block":1,"fire_coral_block":1,"horn_coral_block":1,"dead_tube_coral":0,"dead_brain_coral":0,"dead_bubble_coral":0,"dead_fire_coral":0,"dead_horn_coral":0,"tube_coral":0,"brain_coral":0,"bubble_coral":0,"fire_coral":0,"horn_coral":0,"dead_tube_coral_fan":0,"dead_brain_coral_fan":0,"dead_bubble_coral_fan":0,"dead_fire_coral_fan":0,"dead_horn_coral_fan":0,"tube_coral_fan":0,"brain_coral_fan":0,"bubble_coral_fan":0,"fire_coral_fan":0,"horn_coral_fan":0,"dead_tube_coral_wall_fan":0,"dead_brain_coral_wall_fan":0,"dead_bubble_coral_wall_fan":0,"dead_fire_coral_wall_fan":0,"dead_horn_coral_wall_fan":0,"tube_coral_wall_fan":0,"brain_coral_wall_fan":0,"bubble_coral_wall_fan":0,"fire_coral_wall_fan":0,"horn_coral_wall_fan":0,"sea_pickle":[1287,1287,1288,1288,1289,1289,1290,1290],"blue_ice":1,"conduit":1291,"bamboo_sapling":0,"bamboo":[1292,1293,1294,1295,1296,1297,1298,1299,1300,1301,1302,1303],"potted_bamboo":793,"void_air":0,"cave_air":0,"bubble_column":0,"polished_granite_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"smooth_red_sandstone_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"mossy_stone_brick_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"polished_diorite_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"mossy_cobblestone_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"end_stone_brick_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"stone_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"smooth_sandstone_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"smooth_quartz_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"granite_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"andesite_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"red_nether_brick_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"polished_andesite_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"diorite_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"polished_granite_slab":[273,273,274,274,1,1],"smooth_red_sandstone_slab":[273,273,274,274,1,1],"mossy_stone_brick_slab":[273,273,274,274,1,1],"polished_diorite_slab":[273,273,274,274,1,1],"mossy_cobblestone_slab":[273,273,274,274,1,1],"end_stone_brick_slab":[273,273,274,274,1,1],"smooth_sandstone_slab":[273,273,274,274,1,1],"smooth_quartz_slab":[273,273,274,274,1,1],"granite_slab":[273,273,274,274,1,1],"andesite_slab":[273,273,274,274,1,1],"red_nether_brick_slab":[273,273,274,274,1,1],"polished_andesite_slab":[273,273,274,274,1,1],"diorite_slab":[273,273,274,274,1,1],"brick_wall":[1304,1305,1306,1304,1305,1306,0,1307,1308,0,1307,1308,1309,1310,1311,1309,1310,1311,1312,1313,1314,1312,1313,1314,1315,1316,1317,1315,1316,1317,1318,1319,1320,1318,1319,1320,1321,1322,1323,1321,1322,1323,1324,1325,1326,1324,1325,1326,1327,1328,1329,1327,1328,1329,1330,1331,1332,1330,1331,1332,1333,1334,1335,1333,1334,1335,1336,1337,1338,1336,1337,1338,1339,1340,1341,1339,1340,1341,1342,1343,1344,1342,1343,1344,1345,1346,1347,1345,1346,1347,1348,1349,1350,1348,1349,1350,1351,1352,1353,1351,1352,1353,1354,1355,1356,1354,1355,1356,1357,1358,1359,1357,1358,1359,1360,1361,1362,1360,1361,1362,1363,1364,1365,1363,1364,1365,1366,1367,1368,1366,1367,1368,1369,1370,1371,1369,1370,1371,1372,1373,1374,1372,1373,1374,1375,1376,1377,1375,1376,1377,1378,1379,1380,1378,1379,1380,1381,1382,1383,1381,1382,1383,1384,1385,1386,1384,1385,1386,1387,1388,1389,1387,1388,1389,1390,1391,1392,1390,1391,1392,1393,1394,1395,1393,1394,1395,1396,1397,1398,1396,1397,1398,1399,1400,1401,1399,1400,1401,1402,1403,1404,1402,1403,1404,1405,1406,1407,1405,1406,1407,1408,1409,1410,1408,1409,1410,1411,1412,1413,1411,1412,1413,1414,1415,1416,1414,1415,1416,1417,1418,1419,1417,1418,1419,1420,1421,1422,1420,1421,1422,1423,1424,1425,1423,1424,1425,1426,1427,1428,1426,1427,1428,1429,1430,1431,1429,1430,1431,1432,1433,1434,1432,1433,1434,1435,1436,1437,1435,1436,1437,1438,1439,1440,1438,1439,1440,1441,1442,1443,1441,1442,1443,1444,1445,1446,1444,1445,1446,1447,1448,1449,1447,1448,1449,1450,1451,1452,1450,1451,1452,1453,1454,1455,1453,1454,1455,1456,1457,1458,1456,1457,1458,1459,1460,1461,1459,1460,1461,1462,1463,1464,1462,1463,1464],"prismarine_wall":[1465,1466,1467,1465,1466,1467,0,1468,1469,0,1468,1469,1470,1471,1472,1470,1471,1472,1473,1474,1475,1473,1474,1475,1476,1477,1478,1476,1477,1478,1479,1480,1481,1479,1480,1481,1482,1483,1484,1482,1483,1484,1485,1486,1487,1485,1486,1487,1488,1489,1490,1488,1489,1490,1491,1492,1493,1491,1492,1493,1494,1495,1496,1494,1495,1496,1497,1498,1499,1497,1498,1499,1500,1501,1502,1500,1501,1502,1503,1504,1505,1503,1504,1505,1506,1507,1508,1506,1507,1508,1509,1510,1511,1509,1510,1511,1512,1513,1514,1512,1513,1514,1515,1516,1517,1515,1516,1517,1518,1519,1520,1518,1519,1520,1521,1522,1523,1521,1522,1523,1524,1525,1526,1524,1525,1526,1527,1528,1529,1527,1528,1529,1530,1531,1532,1530,1531,1532,1533,1534,1535,1533,1534,1535,1536,1537,1538,1536,1537,1538,1539,1540,1541,1539,1540,1541,1542,1543,1544,1542,1543,1544,1545,1546,1547,1545,1546,1547,1548,1549,1550,1548,1549,1550,1551,1552,1553,1551,1552,1553,1554,1555,1556,1554,1555,1556,1557,1558,1559,1557,1558,1559,1560,1561,1562,1560,1561,1562,1563,1564,1565,1563,1564,1565,1566,1567,1568,1566,1567,1568,1569,1570,1571,1569,1570,1571,1572,1573,1574,1572,1573,1574,1575,1576,1577,1575,1576,1577,1578,1579,1580,1578,1579,1580,1581,1582,1583,1581,1582,1583,1584,1585,1586,1584,1585,1586,1587,1588,1589,1587,1588,1589,1590,1591,1592,1590,1591,1592,1593,1594,1595,1593,1594,1595,1596,1597,1598,1596,1597,1598,1599,1600,1601,1599,1600,1601,1602,1603,1604,1602,1603,1604,1605,1606,1607,1605,1606,1607,1608,1609,1610,1608,1609,1610,1611,1612,1613,1611,1612,1613,1614,1615,1616,1614,1615,1616,1617,1618,1619,1617,1618,1619,1620,1621,1622,1620,1621,1622,1623,1624,1625,1623,1624,1625],"red_sandstone_wall":[1626,1627,1628,1626,1627,1628,0,1629,1630,0,1629,1630,1631,1632,1633,1631,1632,1633,1634,1635,1636,1634,1635,1636,1637,1638,1639,1637,1638,1639,1640,1641,1642,1640,1641,1642,1643,1644,1645,1643,1644,1645,1646,1647,1648,1646,1647,1648,1649,1650,1651,1649,1650,1651,1652,1653,1654,1652,1653,1654,1655,1656,1657,1655,1656,1657,1658,1659,1660,1658,1659,1660,1661,1662,1663,1661,1662,1663,1664,1665,1666,1664,1665,1666,1667,1668,1669,1667,1668,1669,1670,1671,1672,1670,1671,1672,1673,1674,1675,1673,1674,1675,1676,1677,1678,1676,1677,1678,1679,1680,1681,1679,1680,1681,1682,1683,1684,1682,1683,1684,1685,1686,1687,1685,1686,1687,1688,1689,1690,1688,1689,1690,1691,1692,1693,1691,1692,1693,1694,1695,1696,1694,1695,1696,1697,1698,1699,1697,1698,1699,1700,1701,1702,1700,1701,1702,1703,1704,1705,1703,1704,1705,1706,1707,1708,1706,1707,1708,1709,1710,1711,1709,1710,1711,1712,1713,1714,1712,1713,1714,1715,1716,1717,1715,1716,1717,1718,1719,1720,1718,1719,1720,1721,1722,1723,1721,1722,1723,1724,1725,1726,1724,1725,1726,1727,1728,1729,1727,1728,1729,1730,1731,1732,1730,1731,1732,1733,1734,1735,1733,1734,1735,1736,1737,1738,1736,1737,1738,1739,1740,1741,1739,1740,1741,1742,1743,1744,1742,1743,1744,1745,1746,1747,1745,1746,1747,1748,1749,1750,1748,1749,1750,1751,1752,1753,1751,1752,1753,1754,1755,1756,1754,1755,1756,1757,1758,1759,1757,1758,1759,1760,1761,1762,1760,1761,1762,1763,1764,1765,1763,1764,1765,1766,1767,1768,1766,1767,1768,1769,1770,1771,1769,1770,1771,1772,1773,1774,1772,1773,1774,1775,1776,1777,1775,1776,1777,1778,1779,1780,1778,1779,1780,1781,1782,1783,1781,1782,1783,1784,1785,1786,1784,1785,1786],"mossy_stone_brick_wall":[1787,1788,1789,1787,1788,1789,0,1790,1791,0,1790,1791,1792,1793,1794,1792,1793,1794,1795,1796,1797,1795,1796,1797,1798,1799,1800,1798,1799,1800,1801,1802,1803,1801,1802,1803,1804,1805,1806,1804,1805,1806,1807,1808,1809,1807,1808,1809,1810,1811,1812,1810,1811,1812,1813,1814,1815,1813,1814,1815,1816,1817,1818,1816,1817,1818,1819,1820,1821,1819,1820,1821,1822,1823,1824,1822,1823,1824,1825,1826,1827,1825,1826,1827,1828,1829,1830,1828,1829,1830,1831,1832,1833,1831,1832,1833,1834,1835,1836,1834,1835,1836,1837,1838,1839,1837,1838,1839,1840,1841,1842,1840,1841,1842,1843,1844,1845,1843,1844,1845,1846,1847,1848,1846,1847,1848,1849,1850,1851,1849,1850,1851,1852,1853,1854,1852,1853,1854,1855,1856,1857,1855,1856,1857,1858,1859,1860,1858,1859,1860,1861,1862,1863,1861,1862,1863,1864,1865,1866,1864,1865,1866,1867,1868,1869,1867,1868,1869,1870,1871,1872,1870,1871,1872,1873,1874,1875,1873,1874,1875,1876,1877,1878,1876,1877,1878,1879,1880,1881,1879,1880,1881,1882,1883,1884,1882,1883,1884,1885,1886,1887,1885,1886,1887,1888,1889,1890,1888,1889,1890,1891,1892,1893,1891,1892,1893,1894,1895,1896,1894,1895,1896,1897,1898,1899,1897,1898,1899,1900,1901,1902,1900,1901,1902,1903,1904,1905,1903,1904,1905,1906,1907,1908,1906,1907,1908,1909,1910,1911,1909,1910,1911,1912,1913,1914,1912,1913,1914,1915,1916,1917,1915,1916,1917,1918,1919,1920,1918,1919,1920,1921,1922,1923,1921,1922,1923,1924,1925,1926,1924,1925,1926,1927,1928,1929,1927,1928,1929,1930,1931,1932,1930,1931,1932,1933,1934,1935,1933,1934,1935,1936,1937,1938,1936,1937,1938,1939,1940,1941,1939,1940,1941,1942,1943,1944,1942,1943,1944,1945,1946,1947,1945,1946,1947],"granite_wall":[1948,1949,1950,1948,1949,1950,0,1951,1952,0,1951,1952,1953,1954,1955,1953,1954,1955,1956,1957,1958,1956,1957,1958,1959,1960,1961,1959,1960,1961,1962,1963,1964,1962,1963,1964,1965,1966,1967,1965,1966,1967,1968,1969,1970,1968,1969,1970,1971,1972,1973,1971,1972,1973,1974,1975,1976,1974,1975,1976,1977,1978,1979,1977,1978,1979,1980,1981,1982,1980,1981,1982,1983,1984,1985,1983,1984,1985,1986,1987,1988,1986,1987,1988,1989,1990,1991,1989,1990,1991,1992,1993,1994,1992,1993,1994,1995,1996,1997,1995,1996,1997,1998,1999,2000,1998,1999,2000,2001,2002,2003,2001,2002,2003,2004,2005,2006,2004,2005,2006,2007,2008,2009,2007,2008,2009,2010,2011,2012,2010,2011,2012,2013,2014,2015,2013,2014,2015,2016,2017,2018,2016,2017,2018,2019,2020,2021,2019,2020,2021,2022,2023,2024,2022,2023,2024,2025,2026,2027,2025,2026,2027,2028,2029,2030,2028,2029,2030,2031,2032,2033,2031,2032,2033,2034,2035,2036,2034,2035,2036,2037,2038,2039,2037,2038,2039,2040,2041,2042,2040,2041,2042,2043,2044,2045,2043,2044,2045,2046,2047,2048,2046,2047,2048,2049,2050,2051,2049,2050,2051,2052,2053,2054,2052,2053,2054,2055,2056,2057,2055,2056,2057,2058,2059,2060,2058,2059,2060,2061,2062,2063,2061,2062,2063,2064,2065,2066,2064,2065,2066,2067,2068,2069,2067,2068,2069,2070,2071,2072,2070,2071,2072,2073,2074,2075,2073,2074,2075,2076,2077,2078,2076,2077,2078,2079,2080,2081,2079,2080,2081,2082,2083,2084,2082,2083,2084,2085,2086,2087,2085,2086,2087,2088,2089,2090,2088,2089,2090,2091,2092,2093,2091,2092,2093,2094,2095,2096,2094,2095,2096,2097,2098,2099,2097,2098,2099,2100,2101,2102,2100,2101,2102,2103,2104,2105,2103,2104,2105,2106,2107,2108,2106,2107,2108],"stone_brick_wall":[2109,2110,2111,2109,2110,2111,0,2112,2113,0,2112,2113,2114,2115,2116,2114,2115,2116,2117,2118,2119,2117,2118,2119,2120,2121,2122,2120,2121,2122,2123,2124,2125,2123,2124,2125,2126,2127,2128,2126,2127,2128,2129,2130,2131,2129,2130,2131,2132,2133,2134,2132,2133,2134,2135,2136,2137,2135,2136,2137,2138,2139,2140,2138,2139,2140,2141,2142,2143,2141,2142,2143,2144,2145,2146,2144,2145,2146,2147,2148,2149,2147,2148,2149,2150,2151,2152,2150,2151,2152,2153,2154,2155,2153,2154,2155,2156,2157,2158,2156,2157,2158,2159,2160,2161,2159,2160,2161,2162,2163,2164,2162,2163,2164,2165,2166,2167,2165,2166,2167,2168,2169,2170,2168,2169,2170,2171,2172,2173,2171,2172,2173,2174,2175,2176,2174,2175,2176,2177,2178,2179,2177,2178,2179,2180,2181,2182,2180,2181,2182,2183,2184,2185,2183,2184,2185,2186,2187,2188,2186,2187,2188,2189,2190,2191,2189,2190,2191,2192,2193,2194,2192,2193,2194,2195,2196,2197,2195,2196,2197,2198,2199,2200,2198,2199,2200,2201,2202,2203,2201,2202,2203,2204,2205,2206,2204,2205,2206,2207,2208,2209,2207,2208,2209,2210,2211,2212,2210,2211,2212,2213,2214,2215,2213,2214,2215,2216,2217,2218,2216,2217,2218,2219,2220,2221,2219,2220,2221,2222,2223,2224,2222,2223,2224,2225,2226,2227,2225,2226,2227,2228,2229,2230,2228,2229,2230,2231,2232,2233,2231,2232,2233,2234,2235,2236,2234,2235,2236,2237,2238,2239,2237,2238,2239,2240,2241,2242,2240,2241,2242,2243,2244,2245,2243,2244,2245,2246,2247,2248,2246,2247,2248,2249,2250,2251,2249,2250,2251,2252,2253,2254,2252,2253,2254,2255,2256,2257,2255,2256,2257,2258,2259,2260,2258,2259,2260,2261,2262,2263,2261,2262,2263,2264,2265,2266,2264,2265,2266,2267,2268,2269,2267,2268,2269],"mud_brick_wall":[2270,2271,2272,2270,2271,2272,0,2273,2274,0,2273,2274,2275,2276,2277,2275,2276,2277,2278,2279,2280,2278,2279,2280,2281,2282,2283,2281,2282,2283,2284,2285,2286,2284,2285,2286,2287,2288,2289,2287,2288,2289,2290,2291,2292,2290,2291,2292,2293,2294,2295,2293,2294,2295,2296,2297,2298,2296,2297,2298,2299,2300,2301,2299,2300,2301,2302,2303,2304,2302,2303,2304,2305,2306,2307,2305,2306,2307,2308,2309,2310,2308,2309,2310,2311,2312,2313,2311,2312,2313,2314,2315,2316,2314,2315,2316,2317,2318,2319,2317,2318,2319,2320,2321,2322,2320,2321,2322,2323,2324,2325,2323,2324,2325,2326,2327,2328,2326,2327,2328,2329,2330,2331,2329,2330,2331,2332,2333,2334,2332,2333,2334,2335,2336,2337,2335,2336,2337,2338,2339,2340,2338,2339,2340,2341,2342,2343,2341,2342,2343,2344,2345,2346,2344,2345,2346,2347,2348,2349,2347,2348,2349,2350,2351,2352,2350,2351,2352,2353,2354,2355,2353,2354,2355,2356,2357,2358,2356,2357,2358,2359,2360,2361,2359,2360,2361,2362,2363,2364,2362,2363,2364,2365,2366,2367,2365,2366,2367,2368,2369,2370,2368,2369,2370,2371,2372,2373,2371,2372,2373,2374,2375,2376,2374,2375,2376,2377,2378,2379,2377,2378,2379,2380,2381,2382,2380,2381,2382,2383,2384,2385,2383,2384,2385,2386,2387,2388,2386,2387,2388,2389,2390,2391,2389,2390,2391,2392,2393,2394,2392,2393,2394,2395,2396,2397,2395,2396,2397,2398,2399,2400,2398,2399,2400,2401,2402,2403,2401,2402,2403,2404,2405,2406,2404,2405,2406,2407,2408,2409,2407,2408,2409,2410,2411,2412,2410,2411,2412,2413,2414,2415,2413,2414,2415,2416,2417,2418,2416,2417,2418,2419,2420,2421,2419,2420,2421,2422,2423,2424,2422,2423,2424,2425,2426,2427,2425,2426,2427,2428,2429,2430,2428,2429,2430],"nether_brick_wall":[2431,2432,2433,2431,2432,2433,0,2434,2435,0,2434,2435,2436,2437,2438,2436,2437,2438,2439,2440,2441,2439,2440,2441,2442,2443,2444,2442,2443,2444,2445,2446,2447,2445,2446,2447,2448,2449,2450,2448,2449,2450,2451,2452,2453,2451,2452,2453,2454,2455,2456,2454,2455,2456,2457,2458,2459,2457,2458,2459,2460,2461,2462,2460,2461,2462,2463,2464,2465,2463,2464,2465,2466,2467,2468,2466,2467,2468,2469,2470,2471,2469,2470,2471,2472,2473,2474,2472,2473,2474,2475,2476,2477,2475,2476,2477,2478,2479,2480,2478,2479,2480,2481,2482,2483,2481,2482,2483,2484,2485,2486,2484,2485,2486,2487,2488,2489,2487,2488,2489,2490,2491,2492,2490,2491,2492,2493,2494,2495,2493,2494,2495,2496,2497,2498,2496,2497,2498,2499,2500,2501,2499,2500,2501,2502,2503,2504,2502,2503,2504,2505,2506,2507,2505,2506,2507,2508,2509,2510,2508,2509,2510,2511,2512,2513,2511,2512,2513,2514,2515,2516,2514,2515,2516,2517,2518,2519,2517,2518,2519,2520,2521,2522,2520,2521,2522,2523,2524,2525,2523,2524,2525,2526,2527,2528,2526,2527,2528,2529,2530,2531,2529,2530,2531,2532,2533,2534,2532,2533,2534,2535,2536,2537,2535,2536,2537,2538,2539,2540,2538,2539,2540,2541,2542,2543,2541,2542,2543,2544,2545,2546,2544,2545,2546,2547,2548,2549,2547,2548,2549,2550,2551,2552,2550,2551,2552,2553,2554,2555,2553,2554,2555,2556,2557,2558,2556,2557,2558,2559,2560,2561,2559,2560,2561,2562,2563,2564,2562,2563,2564,2565,2566,2567,2565,2566,2567,2568,2569,2570,2568,2569,2570,2571,2572,2573,2571,2572,2573,2574,2575,2576,2574,2575,2576,2577,2578,2579,2577,2578,2579,2580,2581,2582,2580,2581,2582,2583,2584,2585,2583,2584,2585,2586,2587,2588,2586,2587,2588,2589,2590,2591,2589,2590,2591],"andesite_wall":[2592,2593,2594,2592,2593,2594,0,2595,2596,0,2595,2596,2597,2598,2599,2597,2598,2599,2600,2601,2602,2600,2601,2602,2603,2604,2605,2603,2604,2605,2606,2607,2608,2606,2607,2608,2609,2610,2611,2609,2610,2611,2612,2613,2614,2612,2613,2614,2615,2616,2617,2615,2616,2617,2618,2619,2620,2618,2619,2620,2621,2622,2623,2621,2622,2623,2624,2625,2626,2624,2625,2626,2627,2628,2629,2627,2628,2629,2630,2631,2632,2630,2631,2632,2633,2634,2635,2633,2634,2635,2636,2637,2638,2636,2637,2638,2639,2640,2641,2639,2640,2641,2642,2643,2644,2642,2643,2644,2645,2646,2647,2645,2646,2647,2648,2649,2650,2648,2649,2650,2651,2652,2653,2651,2652,2653,2654,2655,2656,2654,2655,2656,2657,2658,2659,2657,2658,2659,2660,2661,2662,2660,2661,2662,2663,2664,2665,2663,2664,2665,2666,2667,2668,2666,2667,2668,2669,2670,2671,2669,2670,2671,2672,2673,2674,2672,2673,2674,2675,2676,2677,2675,2676,2677,2678,2679,2680,2678,2679,2680,2681,2682,2683,2681,2682,2683,2684,2685,2686,2684,2685,2686,2687,2688,2689,2687,2688,2689,2690,2691,2692,2690,2691,2692,2693,2694,2695,2693,2694,2695,2696,2697,2698,2696,2697,2698,2699,2700,2701,2699,2700,2701,2702,2703,2704,2702,2703,2704,2705,2706,2707,2705,2706,2707,2708,2709,2710,2708,2709,2710,2711,2712,2713,2711,2712,2713,2714,2715,2716,2714,2715,2716,2717,2718,2719,2717,2718,2719,2720,2721,2722,2720,2721,2722,2723,2724,2725,2723,2724,2725,2726,2727,2728,2726,2727,2728,2729,2730,2731,2729,2730,2731,2732,2733,2734,2732,2733,2734,2735,2736,2737,2735,2736,2737,2738,2739,2740,2738,2739,2740,2741,2742,2743,2741,2742,2743,2744,2745,2746,2744,2745,2746,2747,2748,2749,2747,2748,2749,2750,2751,2752,2750,2751,2752],"red_nether_brick_wall":[2753,2754,2755,2753,2754,2755,0,2756,2757,0,2756,2757,2758,2759,2760,2758,2759,2760,2761,2762,2763,2761,2762,2763,2764,2765,2766,2764,2765,2766,2767,2768,2769,2767,2768,2769,2770,2771,2772,2770,2771,2772,2773,2774,2775,2773,2774,2775,2776,2777,2778,2776,2777,2778,2779,2780,2781,2779,2780,2781,2782,2783,2784,2782,2783,2784,2785,2786,2787,2785,2786,2787,2788,2789,2790,2788,2789,2790,2791,2792,2793,2791,2792,2793,2794,2795,2796,2794,2795,2796,2797,2798,2799,2797,2798,2799,2800,2801,2802,2800,2801,2802,2803,2804,2805,2803,2804,2805,2806,2807,2808,2806,2807,2808,2809,2810,2811,2809,2810,2811,2812,2813,2814,2812,2813,2814,2815,2816,2817,2815,2816,2817,2818,2819,2820,2818,2819,2820,2821,2822,2823,2821,2822,2823,2824,2825,2826,2824,2825,2826,2827,2828,2829,2827,2828,2829,2830,2831,2832,2830,2831,2832,2833,2834,2835,2833,2834,2835,2836,2837,2838,2836,2837,2838,2839,2840,2841,2839,2840,2841,2842,2843,2844,2842,2843,2844,2845,2846,2847,2845,2846,2847,2848,2849,2850,2848,2849,2850,2851,2852,2853,2851,2852,2853,2854,2855,2856,2854,2855,2856,2857,2858,2859,2857,2858,2859,2860,2861,2862,2860,2861,2862,2863,2864,2865,2863,2864,2865,2866,2867,2868,2866,2867,2868,2869,2870,2871,2869,2870,2871,2872,2873,2874,2872,2873,2874,2875,2876,2877,2875,2876,2877,2878,2879,2880,2878,2879,2880,2881,2882,2883,2881,2882,2883,2884,2885,2886,2884,2885,2886,2887,2888,2889,2887,2888,2889,2890,2891,2892,2890,2891,2892,2893,2894,2895,2893,2894,2895,2896,2897,2898,2896,2897,2898,2899,2900,2901,2899,2900,2901,2902,2903,2904,2902,2903,2904,2905,2906,2907,2905,2906,2907,2908,2909,2910,2908,2909,2910,2911,2912,2913,2911,2912,2913],"sandstone_wall":[2914,2915,2916,2914,2915,2916,0,2917,2918,0,2917,2918,2919,2920,2921,2919,2920,2921,2922,2923,2924,2922,2923,2924,2925,2926,2927,2925,2926,2927,2928,2929,2930,2928,2929,2930,2931,2932,2933,2931,2932,2933,2934,2935,2936,2934,2935,2936,2937,2938,2939,2937,2938,2939,2940,2941,2942,2940,2941,2942,2943,2944,2945,2943,2944,2945,2946,2947,2948,2946,2947,2948,2949,2950,2951,2949,2950,2951,2952,2953,2954,2952,2953,2954,2955,2956,2957,2955,2956,2957,2958,2959,2960,2958,2959,2960,2961,2962,2963,2961,2962,2963,2964,2965,2966,2964,2965,2966,2967,2968,2969,2967,2968,2969,2970,2971,2972,2970,2971,2972,2973,2974,2975,2973,2974,2975,2976,2977,2978,2976,2977,2978,2979,2980,2981,2979,2980,2981,2982,2983,2984,2982,2983,2984,2985,2986,2987,2985,2986,2987,2988,2989,2990,2988,2989,2990,2991,2992,2993,2991,2992,2993,2994,2995,2996,2994,2995,2996,2997,2998,2999,2997,2998,2999,3000,3001,3002,3000,3001,3002,3003,3004,3005,3003,3004,3005,3006,3007,3008,3006,3007,3008,3009,3010,3011,3009,3010,3011,3012,3013,3014,3012,3013,3014,3015,3016,3017,3015,3016,3017,3018,3019,3020,3018,3019,3020,3021,3022,3023,3021,3022,3023,3024,3025,3026,3024,3025,3026,3027,3028,3029,3027,3028,3029,3030,3031,3032,3030,3031,3032,3033,3034,3035,3033,3034,3035,3036,3037,3038,3036,3037,3038,3039,3040,3041,3039,3040,3041,3042,3043,3044,3042,3043,3044,3045,3046,3047,3045,3046,3047,3048,3049,3050,3048,3049,3050,3051,3052,3053,3051,3052,3053,3054,3055,3056,3054,3055,3056,3057,3058,3059,3057,3058,3059,3060,3061,3062,3060,3061,3062,3063,3064,3065,3063,3064,3065,3066,3067,3068,3066,3067,3068,3069,3070,3071,3069,3070,3071,3072,3073,3074,3072,3073,3074],"end_stone_brick_wall":[3075,3076,3077,3075,3076,3077,0,3078,3079,0,3078,3079,3080,3081,3082,3080,3081,3082,3083,3084,3085,3083,3084,3085,3086,3087,3088,3086,3087,3088,3089,3090,3091,3089,3090,3091,3092,3093,3094,3092,3093,3094,3095,3096,3097,3095,3096,3097,3098,3099,3100,3098,3099,3100,3101,3102,3103,3101,3102,3103,3104,3105,3106,3104,3105,3106,3107,3108,3109,3107,3108,3109,3110,3111,3112,3110,3111,3112,3113,3114,3115,3113,3114,3115,3116,3117,3118,3116,3117,3118,3119,3120,3121,3119,3120,3121,3122,3123,3124,3122,3123,3124,3125,3126,3127,3125,3126,3127,3128,3129,3130,3128,3129,3130,3131,3132,3133,3131,3132,3133,3134,3135,3136,3134,3135,3136,3137,3138,3139,3137,3138,3139,3140,3141,3142,3140,3141,3142,3143,3144,3145,3143,3144,3145,3146,3147,3148,3146,3147,3148,3149,3150,3151,3149,3150,3151,3152,3153,3154,3152,3153,3154,3155,3156,3157,3155,3156,3157,3158,3159,3160,3158,3159,3160,3161,3162,3163,3161,3162,3163,3164,3165,3166,3164,3165,3166,3167,3168,3169,3167,3168,3169,3170,3171,3172,3170,3171,3172,3173,3174,3175,3173,3174,3175,3176,3177,3178,3176,3177,3178,3179,3180,3181,3179,3180,3181,3182,3183,3184,3182,3183,3184,3185,3186,3187,3185,3186,3187,3188,3189,3190,3188,3189,3190,3191,3192,3193,3191,3192,3193,3194,3195,3196,3194,3195,3196,3197,3198,3199,3197,3198,3199,3200,3201,3202,3200,3201,3202,3203,3204,3205,3203,3204,3205,3206,3207,3208,3206,3207,3208,3209,3210,3211,3209,3210,3211,3212,3213,3214,3212,3213,3214,3215,3216,3217,3215,3216,3217,3218,3219,3220,3218,3219,3220,3221,3222,3223,3221,3222,3223,3224,3225,3226,3224,3225,3226,3227,3228,3229,3227,3228,3229,3230,3231,3232,3230,3231,3232,3233,3234,3235,3233,3234,3235],"diorite_wall":[3236,3237,3238,3236,3237,3238,0,3239,3240,0,3239,3240,3241,3242,3243,3241,3242,3243,3244,3245,3246,3244,3245,3246,3247,3248,3249,3247,3248,3249,3250,3251,3252,3250,3251,3252,3253,3254,3255,3253,3254,3255,3256,3257,3258,3256,3257,3258,3259,3260,3261,3259,3260,3261,3262,3263,3264,3262,3263,3264,3265,3266,3267,3265,3266,3267,3268,3269,3270,3268,3269,3270,3271,3272,3273,3271,3272,3273,3274,3275,3276,3274,3275,3276,3277,3278,3279,3277,3278,3279,3280,3281,3282,3280,3281,3282,3283,3284,3285,3283,3284,3285,3286,3287,3288,3286,3287,3288,3289,3290,3291,3289,3290,3291,3292,3293,3294,3292,3293,3294,3295,3296,3297,3295,3296,3297,3298,3299,3300,3298,3299,3300,3301,3302,3303,3301,3302,3303,3304,3305,3306,3304,3305,3306,3307,3308,3309,3307,3308,3309,3310,3311,3312,3310,3311,3312,3313,3314,3315,3313,3314,3315,3316,3317,3318,3316,3317,3318,3319,3320,3321,3319,3320,3321,3322,3323,3324,3322,3323,3324,3325,3326,3327,3325,3326,3327,3328,3329,3330,3328,3329,3330,3331,3332,3333,3331,3332,3333,3334,3335,3336,3334,3335,3336,3337,3338,3339,3337,3338,3339,3340,3341,3342,3340,3341,3342,3343,3344,3345,3343,3344,3345,3346,3347,3348,3346,3347,3348,3349,3350,3351,3349,3350,3351,3352,3353,3354,3352,3353,3354,3355,3356,3357,3355,3356,3357,3358,3359,3360,3358,3359,3360,3361,3362,3363,3361,3362,3363,3364,3365,3366,3364,3365,3366,3367,3368,3369,3367,3368,3369,3370,3371,3372,3370,3371,3372,3373,3374,3375,3373,3374,3375,3376,3377,3378,3376,3377,3378,3379,3380,3381,3379,3380,3381,3382,3383,3384,3382,3383,3384,3385,3386,3387,3385,3386,3387,3388,3389,3390,3388,3389,3390,3391,3392,3393,3391,3392,3393,3394,3395,3396,3394,3395,3396],"scaffolding":3397,"loom":1,"barrel":1,"smoker":1,"blast_furnace":1,"cartography_table":1,"fletching_table":1,"grindstone":[3398,3399,3400,3401,3402,3403,3404,3405,3406,3407,3408,3409],"lectern":3410,"smithing_table":1,"stonecutter":3411,"bell":[3412,3412,3412,3412,3413,3413,3413,3413,3414,3414,3414,3414,3414,3414,3414,3414,3415,3415,3416,3416,3417,3417,3418,3418,3419,3419,3419,3419,3420,3420,3420,3420],"lantern":[3421,3421,3422,3422],"soul_lantern":[3421,3421,3422,3422],"copper_lantern":[3421,3421,3422,3422],"exposed_copper_lantern":[3421,3421,3422,3422],"weathered_copper_lantern":[3421,3421,3422,3422],"oxidized_copper_lantern":[3421,3421,3422,3422],"waxed_copper_lantern":[3421,3421,3422,3422],"waxed_exposed_copper_lantern":[3421,3421,3422,3422],"waxed_weathered_copper_lantern":[3421,3421,3422,3422],"waxed_oxidized_copper_lantern":[3421,3421,3422,3422],"campfire":3423,"soul_campfire":3423,"sweet_berry_bush":0,"warped_stem":1,"stripped_warped_stem":1,"warped_hyphae":1,"stripped_warped_hyphae":1,"warped_nylium":1,"warped_fungus":0,"warped_wart_block":1,"warped_roots":0,"nether_sprouts":0,"crimson_stem":1,"stripped_crimson_stem":1,"crimson_hyphae":1,"stripped_crimson_hyphae":1,"crimson_nylium":1,"crimson_fungus":0,"shroomlight":1,"weeping_vines":0,"weeping_vines_plant":0,"twisting_vines":0,"twisting_vines_plant":0,"crimson_roots":0,"crimson_planks":1,"warped_planks":1,"crimson_slab":[273,273,274,274,1,1],"warped_slab":[273,273,274,274,1,1],"crimson_pressure_plate":0,"warped_pressure_plate":0,"crimson_fence":[3424,3425,3424,3425,3426,3427,3426,3427,3428,3429,3428,3429,3430,3431,3430,3431,3432,3433,3432,3433,3434,3435,3434,3435,3436,3437,3436,3437,3438,3439,3438,3439],"warped_fence":[3440,3441,3440,3441,3442,3443,3442,3443,3444,3445,3444,3445,3446,3447,3446,3447,3448,3449,3448,3449,3450,3451,3450,3451,3452,3453,3452,3453,3454,3455,3454,3455],"crimson_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"warped_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"crimson_fence_gate":[0,0,270,270,0,0,270,270,0,0,270,270,0,0,270,270,0,0,271,271,0,0,271,271,0,0,271,271,0,0,271,271],"warped_fence_gate":[0,0,270,270,0,0,270,270,0,0,270,270,0,0,270,270,0,0,271,271,0,0,271,271,0,0,271,271,0,0,271,271],"crimson_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"warped_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"crimson_button":0,"warped_button":0,"crimson_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"warped_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"crimson_sign":0,"warped_sign":0,"crimson_wall_sign":0,"warped_wall_sign":0,"structure_block":1,"jigsaw":1,"test_block":1,"test_instance_block":1,"composter":3456,"target":1,"bee_nest":1,"beehive":1,"honey_block":3457,"honeycomb_block":1,"netherite_block":1,"ancient_debris":1,"crying_obsidian":1,"respawn_anchor":1,"potted_crimson_fungus":793,"potted_warped_fungus":793,"potted_crimson_roots":793,"potted_warped_roots":793,"lodestone":1,"blackstone":1,"blackstone_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"blackstone_wall":[3458,3459,3460,3458,3459,3460,0,3461,3462,0,3461,3462,3463,3464,3465,3463,3464,3465,3466,3467,3468,3466,3467,3468,3469,3470,3471,3469,3470,3471,3472,3473,3474,3472,3473,3474,3475,3476,3477,3475,3476,3477,3478,3479,3480,3478,3479,3480,3481,3482,3483,3481,3482,3483,3484,3485,3486,3484,3485,3486,3487,3488,3489,3487,3488,3489,3490,3491,3492,3490,3491,3492,3493,3494,3495,3493,3494,3495,3496,3497,3498,3496,3497,3498,3499,3500,3501,3499,3500,3501,3502,3503,3504,3502,3503,3504,3505,3506,3507,3505,3506,3507,3508,3509,3510,3508,3509,3510,3511,3512,3513,3511,3512,3513,3514,3515,3516,3514,3515,3516,3517,3518,3519,3517,3518,3519,3520,3521,3522,3520,3521,3522,3523,3524,3525,3523,3524,3525,3526,3527,3528,3526,3527,3528,3529,3530,3531,3529,3530,3531,3532,3533,3534,3532,3533,3534,3535,3536,3537,3535,3536,3537,3538,3539,3540,3538,3539,3540,3541,3542,3543,3541,3542,3543,3544,3545,3546,3544,3545,3546,3547,3548,3549,3547,3548,3549,3550,3551,3552,3550,3551,3552,3553,3554,3555,3553,3554,3555,3556,3557,3558,3556,3557,3558,3559,3560,3561,3559,3560,3561,3562,3563,3564,3562,3563,3564,3565,3566,3567,3565,3566,3567,3568,3569,3570,3568,3569,3570,3571,3572,3573,3571,3572,3573,3574,3575,3576,3574,3575,3576,3577,3578,3579,3577,3578,3579,3580,3581,3582,3580,3581,3582,3583,3584,3585,3583,3584,3585,3586,3587,3588,3586,3587,3588,3589,3590,3591,3589,3590,3591,3592,3593,3594,3592,3593,3594,3595,3596,3597,3595,3596,3597,3598,3599,3600,3598,3599,3600,3601,3602,3603,3601,3602,3603,3604,3605,3606,3604,3605,3606,3607,3608,3609,3607,3608,3609,3610,3611,3612,3610,3611,3612,3613,3614,3615,3613,3614,3615,3616,3617,3618,3616,3617,3618],"blackstone_slab":[273,273,274,274,1,1],"polished_blackstone":1,"polished_blackstone_bricks":1,"cracked_polished_blackstone_bricks":1,"chiseled_polished_blackstone":1,"polished_blackstone_brick_slab":[273,273,274,274,1,1],"polished_blackstone_brick_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"polished_blackstone_brick_wall":[3619,3620,3621,3619,3620,3621,0,3622,3623,0,3622,3623,3624,3625,3626,3624,3625,3626,3627,3628,3629,3627,3628,3629,3630,3631,3632,3630,3631,3632,3633,3634,3635,3633,3634,3635,3636,3637,3638,3636,3637,3638,3639,3640,3641,3639,3640,3641,3642,3643,3644,3642,3643,3644,3645,3646,3647,3645,3646,3647,3648,3649,3650,3648,3649,3650,3651,3652,3653,3651,3652,3653,3654,3655,3656,3654,3655,3656,3657,3658,3659,3657,3658,3659,3660,3661,3662,3660,3661,3662,3663,3664,3665,3663,3664,3665,3666,3667,3668,3666,3667,3668,3669,3670,3671,3669,3670,3671,3672,3673,3674,3672,3673,3674,3675,3676,3677,3675,3676,3677,3678,3679,3680,3678,3679,3680,3681,3682,3683,3681,3682,3683,3684,3685,3686,3684,3685,3686,3687,3688,3689,3687,3688,3689,3690,3691,3692,3690,3691,3692,3693,3694,3695,3693,3694,3695,3696,3697,3698,3696,3697,3698,3699,3700,3701,3699,3700,3701,3702,3703,3704,3702,3703,3704,3705,3706,3707,3705,3706,3707,3708,3709,3710,3708,3709,3710,3711,3712,3713,3711,3712,3713,3714,3715,3716,3714,3715,3716,3717,3718,3719,3717,3718,3719,3720,3721,3722,3720,3721,3722,3723,3724,3725,3723,3724,3725,3726,3727,3728,3726,3727,3728,3729,3730,3731,3729,3730,3731,3732,3733,3734,3732,3733,3734,3735,3736,3737,3735,3736,3737,3738,3739,3740,3738,3739,3740,3741,3742,3743,3741,3742,3743,3744,3745,3746,3744,3745,3746,3747,3748,3749,3747,3748,3749,3750,3751,3752,3750,3751,3752,3753,3754,3755,3753,3754,3755,3756,3757,3758,3756,3757,3758,3759,3760,3761,3759,3760,3761,3762,3763,3764,3762,3763,3764,3765,3766,3767,3765,3766,3767,3768,3769,3770,3768,3769,3770,3771,3772,3773,3771,3772,3773,3774,3775,3776,3774,3775,3776,3777,3778,3779,3777,3778,3779],"gilded_blackstone":1,"polished_blackstone_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"polished_blackstone_slab":[273,273,274,274,1,1],"polished_blackstone_pressure_plate":0,"polished_blackstone_button":0,"polished_blackstone_wall":[3780,3781,3782,3780,3781,3782,0,3783,3784,0,3783,3784,3785,3786,3787,3785,3786,3787,3788,3789,3790,3788,3789,3790,3791,3792,3793,3791,3792,3793,3794,3795,3796,3794,3795,3796,3797,3798,3799,3797,3798,3799,3800,3801,3802,3800,3801,3802,3803,3804,3805,3803,3804,3805,3806,3807,3808,3806,3807,3808,3809,3810,3811,3809,3810,3811,3812,3813,3814,3812,3813,3814,3815,3816,3817,3815,3816,3817,3818,3819,3820,3818,3819,3820,3821,3822,3823,3821,3822,3823,3824,3825,3826,3824,3825,3826,3827,3828,3829,3827,3828,3829,3830,3831,3832,3830,3831,3832,3833,3834,3835,3833,3834,3835,3836,3837,3838,3836,3837,3838,3839,3840,3841,3839,3840,3841,3842,3843,3844,3842,3843,3844,3845,3846,3847,3845,3846,3847,3848,3849,3850,3848,3849,3850,3851,3852,3853,3851,3852,3853,3854,3855,3856,3854,3855,3856,3857,3858,3859,3857,3858,3859,3860,3861,3862,3860,3861,3862,3863,3864,3865,3863,3864,3865,3866,3867,3868,3866,3867,3868,3869,3870,3871,3869,3870,3871,3872,3873,3874,3872,3873,3874,3875,3876,3877,3875,3876,3877,3878,3879,3880,3878,3879,3880,3881,3882,3883,3881,3882,3883,3884,3885,3886,3884,3885,3886,3887,3888,3889,3887,3888,3889,3890,3891,3892,3890,3891,3892,3893,3894,3895,3893,3894,3895,3896,3897,3898,3896,3897,3898,3899,3900,3901,3899,3900,3901,3902,3903,3904,3902,3903,3904,3905,3906,3907,3905,3906,3907,3908,3909,3910,3908,3909,3910,3911,3912,3913,3911,3912,3913,3914,3915,3916,3914,3915,3916,3917,3918,3919,3917,3918,3919,3920,3921,3922,3920,3921,3922,3923,3924,3925,3923,3924,3925,3926,3927,3928,3926,3927,3928,3929,3930,3931,3929,3930,3931,3932,3933,3934,3932,3933,3934,3935,3936,3937,3935,3936,3937,3938,3939,3940,3938,3939,3940],"chiseled_nether_bricks":1,"cracked_nether_bricks":1,"quartz_bricks":1,"candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"white_candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"orange_candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"magenta_candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"light_blue_candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"yellow_candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"lime_candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"pink_candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"gray_candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"light_gray_candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"cyan_candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"purple_candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"blue_candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"brown_candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"green_candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"red_candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"black_candle":[3941,3941,3941,3941,3942,3942,3942,3942,3943,3943,3943,3943,3944,3944,3944,3944],"candle_cake":3945,"white_candle_cake":3945,"orange_candle_cake":3945,"magenta_candle_cake":3945,"light_blue_candle_cake":3945,"yellow_candle_cake":3945,"lime_candle_cake":3945,"pink_candle_cake":3945,"gray_candle_cake":3945,"light_gray_candle_cake":3945,"cyan_candle_cake":3945,"purple_candle_cake":3945,"blue_candle_cake":3945,"brown_candle_cake":3945,"green_candle_cake":3945,"red_candle_cake":3945,"black_candle_cake":3945,"amethyst_block":1,"budding_amethyst":1,"amethyst_cluster":[3946,3946,3947,3947,3948,3948,3949,3949,3950,3950,3951,3951],"large_amethyst_bud":[3952,3952,3953,3953,3954,3954,3955,3955,3956,3956,3957,3957],"medium_amethyst_bud":[3958,3958,3959,3959,3960,3960,3961,3961,3962,3962,3963,3963],"small_amethyst_bud":[3964,3964,3965,3965,3966,3966,3967,3967,3968,3968,3969,3969],"tuff":1,"tuff_slab":[273,273,274,274,1,1],"tuff_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"tuff_wall":[3970,3971,3972,3970,3971,3972,0,3973,3974,0,3973,3974,3975,3976,3977,3975,3976,3977,3978,3979,3980,3978,3979,3980,3981,3982,3983,3981,3982,3983,3984,3985,3986,3984,3985,3986,3987,3988,3989,3987,3988,3989,3990,3991,3992,3990,3991,3992,3993,3994,3995,3993,3994,3995,3996,3997,3998,3996,3997,3998,3999,4000,4001,3999,4000,4001,4002,4003,4004,4002,4003,4004,4005,4006,4007,4005,4006,4007,4008,4009,4010,4008,4009,4010,4011,4012,4013,4011,4012,4013,4014,4015,4016,4014,4015,4016,4017,4018,4019,4017,4018,4019,4020,4021,4022,4020,4021,4022,4023,4024,4025,4023,4024,4025,4026,4027,4028,4026,4027,4028,4029,4030,4031,4029,4030,4031,4032,4033,4034,4032,4033,4034,4035,4036,4037,4035,4036,4037,4038,4039,4040,4038,4039,4040,4041,4042,4043,4041,4042,4043,4044,4045,4046,4044,4045,4046,4047,4048,4049,4047,4048,4049,4050,4051,4052,4050,4051,4052,4053,4054,4055,4053,4054,4055,4056,4057,4058,4056,4057,4058,4059,4060,4061,4059,4060,4061,4062,4063,4064,4062,4063,4064,4065,4066,4067,4065,4066,4067,4068,4069,4070,4068,4069,4070,4071,4072,4073,4071,4072,4073,4074,4075,4076,4074,4075,4076,4077,4078,4079,4077,4078,4079,4080,4081,4082,4080,4081,4082,4083,4084,4085,4083,4084,4085,4086,4087,4088,4086,4087,4088,4089,4090,4091,4089,4090,4091,4092,4093,4094,4092,4093,4094,4095,4096,4097,4095,4096,4097,4098,4099,4100,4098,4099,4100,4101,4102,4103,4101,4102,4103,4104,4105,4106,4104,4105,4106,4107,4108,4109,4107,4108,4109,4110,4111,4112,4110,4111,4112,4113,4114,4115,4113,4114,4115,4116,4117,4118,4116,4117,4118,4119,4120,4121,4119,4120,4121,4122,4123,4124,4122,4123,4124,4125,4126,4127,4125,4126,4127,4128,4129,4130,4128,4129,4130],"polished_tuff":1,"polished_tuff_slab":[273,273,274,274,1,1],"polished_tuff_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"polished_tuff_wall":[4131,4132,4133,4131,4132,4133,0,4134,4135,0,4134,4135,4136,4137,4138,4136,4137,4138,4139,4140,4141,4139,4140,4141,4142,4143,4144,4142,4143,4144,4145,4146,4147,4145,4146,4147,4148,4149,4150,4148,4149,4150,4151,4152,4153,4151,4152,4153,4154,4155,4156,4154,4155,4156,4157,4158,4159,4157,4158,4159,4160,4161,4162,4160,4161,4162,4163,4164,4165,4163,4164,4165,4166,4167,4168,4166,4167,4168,4169,4170,4171,4169,4170,4171,4172,4173,4174,4172,4173,4174,4175,4176,4177,4175,4176,4177,4178,4179,4180,4178,4179,4180,4181,4182,4183,4181,4182,4183,4184,4185,4186,4184,4185,4186,4187,4188,4189,4187,4188,4189,4190,4191,4192,4190,4191,4192,4193,4194,4195,4193,4194,4195,4196,4197,4198,4196,4197,4198,4199,4200,4201,4199,4200,4201,4202,4203,4204,4202,4203,4204,4205,4206,4207,4205,4206,4207,4208,4209,4210,4208,4209,4210,4211,4212,4213,4211,4212,4213,4214,4215,4216,4214,4215,4216,4217,4218,4219,4217,4218,4219,4220,4221,4222,4220,4221,4222,4223,4224,4225,4223,4224,4225,4226,4227,4228,4226,4227,4228,4229,4230,4231,4229,4230,4231,4232,4233,4234,4232,4233,4234,4235,4236,4237,4235,4236,4237,4238,4239,4240,4238,4239,4240,4241,4242,4243,4241,4242,4243,4244,4245,4246,4244,4245,4246,4247,4248,4249,4247,4248,4249,4250,4251,4252,4250,4251,4252,4253,4254,4255,4253,4254,4255,4256,4257,4258,4256,4257,4258,4259,4260,4261,4259,4260,4261,4262,4263,4264,4262,4263,4264,4265,4266,4267,4265,4266,4267,4268,4269,4270,4268,4269,4270,4271,4272,4273,4271,4272,4273,4274,4275,4276,4274,4275,4276,4277,4278,4279,4277,4278,4279,4280,4281,4282,4280,4281,4282,4283,4284,4285,4283,4284,4285,4286,4287,4288,4286,4287,4288,4289,4290,4291,4289,4290,4291],"chiseled_tuff":1,"tuff_bricks":1,"tuff_brick_slab":[273,273,274,274,1,1],"tuff_brick_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"tuff_brick_wall":[4292,4293,4294,4292,4293,4294,0,4295,4296,0,4295,4296,4297,4298,4299,4297,4298,4299,4300,4301,4302,4300,4301,4302,4303,4304,4305,4303,4304,4305,4306,4307,4308,4306,4307,4308,4309,4310,4311,4309,4310,4311,4312,4313,4314,4312,4313,4314,4315,4316,4317,4315,4316,4317,4318,4319,4320,4318,4319,4320,4321,4322,4323,4321,4322,4323,4324,4325,4326,4324,4325,4326,4327,4328,4329,4327,4328,4329,4330,4331,4332,4330,4331,4332,4333,4334,4335,4333,4334,4335,4336,4337,4338,4336,4337,4338,4339,4340,4341,4339,4340,4341,4342,4343,4344,4342,4343,4344,4345,4346,4347,4345,4346,4347,4348,4349,4350,4348,4349,4350,4351,4352,4353,4351,4352,4353,4354,4355,4356,4354,4355,4356,4357,4358,4359,4357,4358,4359,4360,4361,4362,4360,4361,4362,4363,4364,4365,4363,4364,4365,4366,4367,4368,4366,4367,4368,4369,4370,4371,4369,4370,4371,4372,4373,4374,4372,4373,4374,4375,4376,4377,4375,4376,4377,4378,4379,4380,4378,4379,4380,4381,4382,4383,4381,4382,4383,4384,4385,4386,4384,4385,4386,4387,4388,4389,4387,4388,4389,4390,4391,4392,4390,4391,4392,4393,4394,4395,4393,4394,4395,4396,4397,4398,4396,4397,4398,4399,4400,4401,4399,4400,4401,4402,4403,4404,4402,4403,4404,4405,4406,4407,4405,4406,4407,4408,4409,4410,4408,4409,4410,4411,4412,4413,4411,4412,4413,4414,4415,4416,4414,4415,4416,4417,4418,4419,4417,4418,4419,4420,4421,4422,4420,4421,4422,4423,4424,4425,4423,4424,4425,4426,4427,4428,4426,4427,4428,4429,4430,4431,4429,4430,4431,4432,4433,4434,4432,4433,4434,4435,4436,4437,4435,4436,4437,4438,4439,4440,4438,4439,4440,4441,4442,4443,4441,4442,4443,4444,4445,4446,4444,4445,4446,4447,4448,4449,4447,4448,4449,4450,4451,4452,4450,4451,4452],"chiseled_tuff_bricks":1,"calcite":1,"tinted_glass":1,"powder_snow":0,"sculk_sensor":4453,"calibrated_sculk_sensor":4453,"sculk":1,"sculk_vein":0,"sculk_catalyst":1,"sculk_shrieker":4454,"copper_block":1,"exposed_copper":1,"weathered_copper":1,"oxidized_copper":1,"copper_ore":1,"deepslate_copper_ore":1,"oxidized_cut_copper":1,"weathered_cut_copper":1,"exposed_cut_copper":1,"cut_copper":1,"oxidized_chiseled_copper":1,"weathered_chiseled_copper":1,"exposed_chiseled_copper":1,"chiseled_copper":1,"waxed_oxidized_chiseled_copper":1,"waxed_weathered_chiseled_copper":1,"waxed_exposed_chiseled_copper":1,"waxed_chiseled_copper":1,"oxidized_cut_copper_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"weathered_cut_copper_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"exposed_cut_copper_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"cut_copper_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"oxidized_cut_copper_slab":[273,273,274,274,1,1],"weathered_cut_copper_slab":[273,273,274,274,1,1],"exposed_cut_copper_slab":[273,273,274,274,1,1],"cut_copper_slab":[273,273,274,274,1,1],"waxed_copper_block":1,"waxed_weathered_copper":1,"waxed_exposed_copper":1,"waxed_oxidized_copper":1,"waxed_oxidized_cut_copper":1,"waxed_weathered_cut_copper":1,"waxed_exposed_cut_copper":1,"waxed_cut_copper":1,"waxed_oxidized_cut_copper_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"waxed_weathered_cut_copper_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"waxed_exposed_cut_copper_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"waxed_cut_copper_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"waxed_oxidized_cut_copper_slab":[273,273,274,274,1,1],"waxed_weathered_cut_copper_slab":[273,273,274,274,1,1],"waxed_exposed_cut_copper_slab":[273,273,274,274,1,1],"waxed_cut_copper_slab":[273,273,274,274,1,1],"copper_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"exposed_copper_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"oxidized_copper_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"weathered_copper_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"waxed_copper_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"waxed_exposed_copper_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"waxed_oxidized_copper_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"waxed_weathered_copper_door":[58,58,59,59,60,60,59,59,58,58,59,59,60,60,59,59,60,60,61,61,58,58,61,61,60,60,61,61,58,58,61,61,59,59,60,60,61,61,60,60,59,59,60,60,61,61,60,60,61,61,58,58,59,59,58,58,61,61,58,58,59,59,58,58],"copper_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"exposed_copper_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"oxidized_copper_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"weathered_copper_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"waxed_copper_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"waxed_exposed_copper_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"waxed_oxidized_copper_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"waxed_weathered_copper_trapdoor":[101,101,101,101,102,102,102,102,101,101,101,101,103,103,103,103,104,104,104,104,102,102,102,102,104,104,104,104,103,103,103,103,105,105,105,105,102,102,102,102,105,105,105,105,103,103,103,103,106,106,106,106,102,102,102,102,106,106,106,106,103,103,103,103],"copper_grate":1,"exposed_copper_grate":1,"weathered_copper_grate":1,"oxidized_copper_grate":1,"waxed_copper_grate":1,"waxed_exposed_copper_grate":1,"waxed_weathered_copper_grate":1,"waxed_oxidized_copper_grate":1,"copper_bulb":1,"exposed_copper_bulb":1,"weathered_copper_bulb":1,"oxidized_copper_bulb":1,"waxed_copper_bulb":1,"waxed_exposed_copper_bulb":1,"waxed_weathered_copper_bulb":1,"waxed_oxidized_copper_bulb":1,"copper_chest":[52,52,53,53,54,54,52,52,54,54,53,53,52,52,55,55,56,56,52,52,56,56,55,55],"exposed_copper_chest":[52,52,53,53,54,54,52,52,54,54,53,53,52,52,55,55,56,56,52,52,56,56,55,55],"weathered_copper_chest":[52,52,53,53,54,54,52,52,54,54,53,53,52,52,55,55,56,56,52,52,56,56,55,55],"oxidized_copper_chest":[52,52,53,53,54,54,52,52,54,54,53,53,52,52,55,55,56,56,52,52,56,56,55,55],"waxed_copper_chest":[52,52,53,53,54,54,52,52,54,54,53,53,52,52,55,55,56,56,52,52,56,56,55,55],"waxed_exposed_copper_chest":[52,52,53,53,54,54,52,52,54,54,53,53,52,52,55,55,56,56,52,52,56,56,55,55],"waxed_weathered_copper_chest":[52,52,53,53,54,54,52,52,54,54,53,53,52,52,55,55,56,56,52,52,56,56,55,55],"waxed_oxidized_copper_chest":[52,52,53,53,54,54,52,52,54,54,53,53,52,52,55,55,56,56,52,52,56,56,55,55],"copper_golem_statue":4455,"exposed_copper_golem_statue":4455,"weathered_copper_golem_statue":4455,"oxidized_copper_golem_statue":4455,"waxed_copper_golem_statue":4455,"waxed_exposed_copper_golem_statue":4455,"waxed_weathered_copper_golem_statue":4455,"waxed_oxidized_copper_golem_statue":4455,"lightning_rod":[1213,1213,1213,1213,1214,1214,1214,1214,1213,1213,1213,1213,1214,1214,1214,1214,1215,1215,1215,1215,1215,1215,1215,1215],"exposed_lightning_rod":[1213,1213,1213,1213,1214,1214,1214,1214,1213,1213,1213,1213,1214,1214,1214,1214,1215,1215,1215,1215,1215,1215,1215,1215],"weathered_lightning_rod":[1213,1213,1213,1213,1214,1214,1214,1214,1213,1213,1213,1213,1214,1214,1214,1214,1215,1215,1215,1215,1215,1215,1215,1215],"oxidized_lightning_rod":[1213,1213,1213,1213,1214,1214,1214,1214,1213,1213,1213,1213,1214,1214,1214,1214,1215,1215,1215,1215,1215,1215,1215,1215],"waxed_lightning_rod":[1213,1213,1213,1213,1214,1214,1214,1214,1213,1213,1213,1213,1214,1214,1214,1214,1215,1215,1215,1215,1215,1215,1215,1215],"waxed_exposed_lightning_rod":[1213,1213,1213,1213,1214,1214,1214,1214,1213,1213,1213,1213,1214,1214,1214,1214,1215,1215,1215,1215,1215,1215,1215,1215],"waxed_weathered_lightning_rod":[1213,1213,1213,1213,1214,1214,1214,1214,1213,1213,1213,1213,1214,1214,1214,1214,1215,1215,1215,1215,1215,1215,1215,1215],"waxed_oxidized_lightning_rod":[1213,1213,1213,1213,1214,1214,1214,1214,1213,1213,1213,1213,1214,1214,1214,1214,1215,1215,1215,1215,1215,1215,1215,1215],"pointed_dripstone":[4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475],"dripstone_block":1,"cave_vines":0,"cave_vines_plant":0,"spore_blossom":0,"azalea":4476,"flowering_azalea":4476,"moss_carpet":1068,"pink_petals":0,"wildflowers":0,"leaf_litter":0,"moss_block":1,"big_dripleaf":[4477,4477,4478,4478,4479,4479,0,0,4477,4477,4478,4478,4479,4479,0,0,4477,4477,4478,4478,4479,4479,0,0,4477,4477,4478,4478,4479,4479,0,0],"big_dripleaf_stem":0,"small_dripleaf":0,"hanging_roots":0,"rooted_dirt":1,"mud":4480,"deepslate":1,"cobbled_deepslate":1,"cobbled_deepslate_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"cobbled_deepslate_slab":[273,273,274,274,1,1],"cobbled_deepslate_wall":[4481,4482,4483,4481,4482,4483,0,4484,4485,0,4484,4485,4486,4487,4488,4486,4487,4488,4489,4490,4491,4489,4490,4491,4492,4493,4494,4492,4493,4494,4495,4496,4497,4495,4496,4497,4498,4499,4500,4498,4499,4500,4501,4502,4503,4501,4502,4503,4504,4505,4506,4504,4505,4506,4507,4508,4509,4507,4508,4509,4510,4511,4512,4510,4511,4512,4513,4514,4515,4513,4514,4515,4516,4517,4518,4516,4517,4518,4519,4520,4521,4519,4520,4521,4522,4523,4524,4522,4523,4524,4525,4526,4527,4525,4526,4527,4528,4529,4530,4528,4529,4530,4531,4532,4533,4531,4532,4533,4534,4535,4536,4534,4535,4536,4537,4538,4539,4537,4538,4539,4540,4541,4542,4540,4541,4542,4543,4544,4545,4543,4544,4545,4546,4547,4548,4546,4547,4548,4549,4550,4551,4549,4550,4551,4552,4553,4554,4552,4553,4554,4555,4556,4557,4555,4556,4557,4558,4559,4560,4558,4559,4560,4561,4562,4563,4561,4562,4563,4564,4565,4566,4564,4565,4566,4567,4568,4569,4567,4568,4569,4570,4571,4572,4570,4571,4572,4573,4574,4575,4573,4574,4575,4576,4577,4578,4576,4577,4578,4579,4580,4581,4579,4580,4581,4582,4583,4584,4582,4583,4584,4585,4586,4587,4585,4586,4587,4588,4589,4590,4588,4589,4590,4591,4592,4593,4591,4592,4593,4594,4595,4596,4594,4595,4596,4597,4598,4599,4597,4598,4599,4600,4601,4602,4600,4601,4602,4603,4604,4605,4603,4604,4605,4606,4607,4608,4606,4607,4608,4609,4610,4611,4609,4610,4611,4612,4613,4614,4612,4613,4614,4615,4616,4617,4615,4616,4617,4618,4619,4620,4618,4619,4620,4621,4622,4623,4621,4622,4623,4624,4625,4626,4624,4625,4626,4627,4628,4629,4627,4628,4629,4630,4631,4632,4630,4631,4632,4633,4634,4635,4633,4634,4635,4636,4637,4638,4636,4637,4638,4639,4640,4641,4639,4640,4641],"polished_deepslate":1,"polished_deepslate_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"polished_deepslate_slab":[273,273,274,274,1,1],"polished_deepslate_wall":[4642,4643,4644,4642,4643,4644,0,4645,4646,0,4645,4646,4647,4648,4649,4647,4648,4649,4650,4651,4652,4650,4651,4652,4653,4654,4655,4653,4654,4655,4656,4657,4658,4656,4657,4658,4659,4660,4661,4659,4660,4661,4662,4663,4664,4662,4663,4664,4665,4666,4667,4665,4666,4667,4668,4669,4670,4668,4669,4670,4671,4672,4673,4671,4672,4673,4674,4675,4676,4674,4675,4676,4677,4678,4679,4677,4678,4679,4680,4681,4682,4680,4681,4682,4683,4684,4685,4683,4684,4685,4686,4687,4688,4686,4687,4688,4689,4690,4691,4689,4690,4691,4692,4693,4694,4692,4693,4694,4695,4696,4697,4695,4696,4697,4698,4699,4700,4698,4699,4700,4701,4702,4703,4701,4702,4703,4704,4705,4706,4704,4705,4706,4707,4708,4709,4707,4708,4709,4710,4711,4712,4710,4711,4712,4713,4714,4715,4713,4714,4715,4716,4717,4718,4716,4717,4718,4719,4720,4721,4719,4720,4721,4722,4723,4724,4722,4723,4724,4725,4726,4727,4725,4726,4727,4728,4729,4730,4728,4729,4730,4731,4732,4733,4731,4732,4733,4734,4735,4736,4734,4735,4736,4737,4738,4739,4737,4738,4739,4740,4741,4742,4740,4741,4742,4743,4744,4745,4743,4744,4745,4746,4747,4748,4746,4747,4748,4749,4750,4751,4749,4750,4751,4752,4753,4754,4752,4753,4754,4755,4756,4757,4755,4756,4757,4758,4759,4760,4758,4759,4760,4761,4762,4763,4761,4762,4763,4764,4765,4766,4764,4765,4766,4767,4768,4769,4767,4768,4769,4770,4771,4772,4770,4771,4772,4773,4774,4775,4773,4774,4775,4776,4777,4778,4776,4777,4778,4779,4780,4781,4779,4780,4781,4782,4783,4784,4782,4783,4784,4785,4786,4787,4785,4786,4787,4788,4789,4790,4788,4789,4790,4791,4792,4793,4791,4792,4793,4794,4795,4796,4794,4795,4796,4797,4798,4799,4797,4798,4799,4800,4801,4802,4800,4801,4802],"deepslate_tiles":1,"deepslate_tile_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"deepslate_tile_slab":[273,273,274,274,1,1],"deepslate_tile_wall":[4803,4804,4805,4803,4804,4805,0,4806,4807,0,4806,4807,4808,4809,4810,4808,4809,4810,4811,4812,4813,4811,4812,4813,4814,4815,4816,4814,4815,4816,4817,4818,4819,4817,4818,4819,4820,4821,4822,4820,4821,4822,4823,4824,4825,4823,4824,4825,4826,4827,4828,4826,4827,4828,4829,4830,4831,4829,4830,4831,4832,4833,4834,4832,4833,4834,4835,4836,4837,4835,4836,4837,4838,4839,4840,4838,4839,4840,4841,4842,4843,4841,4842,4843,4844,4845,4846,4844,4845,4846,4847,4848,4849,4847,4848,4849,4850,4851,4852,4850,4851,4852,4853,4854,4855,4853,4854,4855,4856,4857,4858,4856,4857,4858,4859,4860,4861,4859,4860,4861,4862,4863,4864,4862,4863,4864,4865,4866,4867,4865,4866,4867,4868,4869,4870,4868,4869,4870,4871,4872,4873,4871,4872,4873,4874,4875,4876,4874,4875,4876,4877,4878,4879,4877,4878,4879,4880,4881,4882,4880,4881,4882,4883,4884,4885,4883,4884,4885,4886,4887,4888,4886,4887,4888,4889,4890,4891,4889,4890,4891,4892,4893,4894,4892,4893,4894,4895,4896,4897,4895,4896,4897,4898,4899,4900,4898,4899,4900,4901,4902,4903,4901,4902,4903,4904,4905,4906,4904,4905,4906,4907,4908,4909,4907,4908,4909,4910,4911,4912,4910,4911,4912,4913,4914,4915,4913,4914,4915,4916,4917,4918,4916,4917,4918,4919,4920,4921,4919,4920,4921,4922,4923,4924,4922,4923,4924,4925,4926,4927,4925,4926,4927,4928,4929,4930,4928,4929,4930,4931,4932,4933,4931,4932,4933,4934,4935,4936,4934,4935,4936,4937,4938,4939,4937,4938,4939,4940,4941,4942,4940,4941,4942,4943,4944,4945,4943,4944,4945,4946,4947,4948,4946,4947,4948,4949,4950,4951,4949,4950,4951,4952,4953,4954,4952,4953,4954,4955,4956,4957,4955,4956,4957,4958,4959,4960,4958,4959,4960,4961,4962,4963,4961,4962,4963],"deepslate_bricks":1,"deepslate_brick_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"deepslate_brick_slab":[273,273,274,274,1,1],"deepslate_brick_wall":[4964,4965,4966,4964,4965,4966,0,4967,4968,0,4967,4968,4969,4970,4971,4969,4970,4971,4972,4973,4974,4972,4973,4974,4975,4976,4977,4975,4976,4977,4978,4979,4980,4978,4979,4980,4981,4982,4983,4981,4982,4983,4984,4985,4986,4984,4985,4986,4987,4988,4989,4987,4988,4989,4990,4991,4992,4990,4991,4992,4993,4994,4995,4993,4994,4995,4996,4997,4998,4996,4997,4998,4999,5000,5001,4999,5000,5001,5002,5003,5004,5002,5003,5004,5005,5006,5007,5005,5006,5007,5008,5009,5010,5008,5009,5010,5011,5012,5013,5011,5012,5013,5014,5015,5016,5014,5015,5016,5017,5018,5019,5017,5018,5019,5020,5021,5022,5020,5021,5022,5023,5024,5025,5023,5024,5025,5026,5027,5028,5026,5027,5028,5029,5030,5031,5029,5030,5031,5032,5033,5034,5032,5033,5034,5035,5036,5037,5035,5036,5037,5038,5039,5040,5038,5039,5040,5041,5042,5043,5041,5042,5043,5044,5045,5046,5044,5045,5046,5047,5048,5049,5047,5048,5049,5050,5051,5052,5050,5051,5052,5053,5054,5055,5053,5054,5055,5056,5057,5058,5056,5057,5058,5059,5060,5061,5059,5060,5061,5062,5063,5064,5062,5063,5064,5065,5066,5067,5065,5066,5067,5068,5069,5070,5068,5069,5070,5071,5072,5073,5071,5072,5073,5074,5075,5076,5074,5075,5076,5077,5078,5079,5077,5078,5079,5080,5081,5082,5080,5081,5082,5083,5084,5085,5083,5084,5085,5086,5087,5088,5086,5087,5088,5089,5090,5091,5089,5090,5091,5092,5093,5094,5092,5093,5094,5095,5096,5097,5095,5096,5097,5098,5099,5100,5098,5099,5100,5101,5102,5103,5101,5102,5103,5104,5105,5106,5104,5105,5106,5107,5108,5109,5107,5108,5109,5110,5111,5112,5110,5111,5112,5113,5114,5115,5113,5114,5115,5116,5117,5118,5116,5117,5118,5119,5120,5121,5119,5120,5121,5122,5123,5124,5122,5123,5124],"chiseled_deepslate":1,"cracked_deepslate_bricks":1,"cracked_deepslate_tiles":1,"infested_deepslate":1,"smooth_basalt":1,"raw_iron_block":1,"raw_copper_block":1,"raw_gold_block":1,"potted_azalea_bush":793,"potted_flowering_azalea_bush":793,"ochre_froglight":1,"verdant_froglight":1,"pearlescent_froglight":1,"frogspawn":0,"reinforced_deepslate":1,"decorated_pot":5125,"crafter":1,"trial_spawner":1,"vault":1,"heavy_core":5126,"pale_moss_block":1,"pale_moss_carpet":[5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,5127,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"pale_hanging_moss":0,"open_eyeblossom":0,"closed_eyeblossom":0,"potted_open_eyeblossom":793,"potted_closed_eyeblossom":793,"firefly_bush":0,"sulfur":1,"potent_sulfur":1,"polished_sulfur":1,"sulfur_bricks":1,"chiseled_sulfur":1,"cinnabar":1,"polished_cinnabar":1,"cinnabar_bricks":1,"chiseled_cinnabar":1,"sulfur_slab":[273,273,274,274,1,1],"polished_sulfur_slab":[273,273,274,274,1,1],"sulfur_brick_slab":[273,273,274,274,1,1],"cinnabar_slab":[273,273,274,274,1,1],"polished_cinnabar_slab":[273,273,274,274,1,1],"cinnabar_brick_slab":[273,273,274,274,1,1],"sulfur_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"polished_sulfur_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"sulfur_brick_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"cinnabar_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"polished_cinnabar_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"cinnabar_brick_stairs":[28,28,29,29,30,30,31,31,32,32,33,33,34,34,35,35,36,36,37,37,38,38,39,39,40,40,41,41,42,42,43,43,44,44,45,45,46,46,47,47,48,48,40,40,29,29,42,42,31,31,49,49,45,45,34,34,47,47,36,36,50,50,30,30,39,39,32,32,41,41,51,51,35,35,44,44,37,37,46,46],"sulfur_wall":[2109,2110,2111,2109,2110,2111,0,2112,2113,0,2112,2113,2114,2115,2116,2114,2115,2116,2117,2118,2119,2117,2118,2119,2120,2121,2122,2120,2121,2122,2123,2124,2125,2123,2124,2125,2126,2127,2128,2126,2127,2128,2129,2130,2131,2129,2130,2131,2132,2133,2134,2132,2133,2134,2135,2136,2137,2135,2136,2137,2138,2139,2140,2138,2139,2140,2141,2142,2143,2141,2142,2143,2144,2145,2146,2144,2145,2146,2147,2148,2149,2147,2148,2149,2150,2151,2152,2150,2151,2152,2153,2154,2155,2153,2154,2155,2156,2157,2158,2156,2157,2158,2159,2160,2161,2159,2160,2161,2162,2163,2164,2162,2163,2164,2165,2166,2167,2165,2166,2167,2168,2169,2170,2168,2169,2170,2171,2172,2173,2171,2172,2173,2174,2175,2176,2174,2175,2176,2177,2178,2179,2177,2178,2179,2180,2181,2182,2180,2181,2182,2183,2184,2185,2183,2184,2185,2186,2187,2188,2186,2187,2188,2189,2190,2191,2189,2190,2191,2192,2193,2194,2192,2193,2194,2195,2196,2197,2195,2196,2197,2198,2199,2200,2198,2199,2200,2201,2202,2203,2201,2202,2203,2204,2205,2206,2204,2205,2206,2207,2208,2209,2207,2208,2209,2210,2211,2212,2210,2211,2212,2213,2214,2215,2213,2214,2215,2216,2217,2218,2216,2217,2218,2219,2220,2221,2219,2220,2221,2222,2223,2224,2222,2223,2224,2225,2226,2227,2225,2226,2227,2228,2229,2230,2228,2229,2230,2231,2232,2233,2231,2232,2233,2234,2235,2236,2234,2235,2236,2237,2238,2239,2237,2238,2239,2240,2241,2242,2240,2241,2242,2243,2244,2245,2243,2244,2245,2246,2247,2248,2246,2247,2248,2249,2250,2251,2249,2250,2251,2252,2253,2254,2252,2253,2254,2255,2256,2257,2255,2256,2257,2258,2259,2260,2258,2259,2260,2261,2262,2263,2261,2262,2263,2264,2265,2266,2264,2265,2266,2267,2268,2269,2267,2268,2269],"polished_sulfur_wall":[2109,2110,2111,2109,2110,2111,0,2112,2113,0,2112,2113,2114,2115,2116,2114,2115,2116,2117,2118,2119,2117,2118,2119,2120,2121,2122,2120,2121,2122,2123,2124,2125,2123,2124,2125,2126,2127,2128,2126,2127,2128,2129,2130,2131,2129,2130,2131,2132,2133,2134,2132,2133,2134,2135,2136,2137,2135,2136,2137,2138,2139,2140,2138,2139,2140,2141,2142,2143,2141,2142,2143,2144,2145,2146,2144,2145,2146,2147,2148,2149,2147,2148,2149,2150,2151,2152,2150,2151,2152,2153,2154,2155,2153,2154,2155,2156,2157,2158,2156,2157,2158,2159,2160,2161,2159,2160,2161,2162,2163,2164,2162,2163,2164,2165,2166,2167,2165,2166,2167,2168,2169,2170,2168,2169,2170,2171,2172,2173,2171,2172,2173,2174,2175,2176,2174,2175,2176,2177,2178,2179,2177,2178,2179,2180,2181,2182,2180,2181,2182,2183,2184,2185,2183,2184,2185,2186,2187,2188,2186,2187,2188,2189,2190,2191,2189,2190,2191,2192,2193,2194,2192,2193,2194,2195,2196,2197,2195,2196,2197,2198,2199,2200,2198,2199,2200,2201,2202,2203,2201,2202,2203,2204,2205,2206,2204,2205,2206,2207,2208,2209,2207,2208,2209,2210,2211,2212,2210,2211,2212,2213,2214,2215,2213,2214,2215,2216,2217,2218,2216,2217,2218,2219,2220,2221,2219,2220,2221,2222,2223,2224,2222,2223,2224,2225,2226,2227,2225,2226,2227,2228,2229,2230,2228,2229,2230,2231,2232,2233,2231,2232,2233,2234,2235,2236,2234,2235,2236,2237,2238,2239,2237,2238,2239,2240,2241,2242,2240,2241,2242,2243,2244,2245,2243,2244,2245,2246,2247,2248,2246,2247,2248,2249,2250,2251,2249,2250,2251,2252,2253,2254,2252,2253,2254,2255,2256,2257,2255,2256,2257,2258,2259,2260,2258,2259,2260,2261,2262,2263,2261,2262,2263,2264,2265,2266,2264,2265,2266,2267,2268,2269,2267,2268,2269],"sulfur_brick_wall":[2109,2110,2111,2109,2110,2111,0,2112,2113,0,2112,2113,2114,2115,2116,2114,2115,2116,2117,2118,2119,2117,2118,2119,2120,2121,2122,2120,2121,2122,2123,2124,2125,2123,2124,2125,2126,2127,2128,2126,2127,2128,2129,2130,2131,2129,2130,2131,2132,2133,2134,2132,2133,2134,2135,2136,2137,2135,2136,2137,2138,2139,2140,2138,2139,2140,2141,2142,2143,2141,2142,2143,2144,2145,2146,2144,2145,2146,2147,2148,2149,2147,2148,2149,2150,2151,2152,2150,2151,2152,2153,2154,2155,2153,2154,2155,2156,2157,2158,2156,2157,2158,2159,2160,2161,2159,2160,2161,2162,2163,2164,2162,2163,2164,2165,2166,2167,2165,2166,2167,2168,2169,2170,2168,2169,2170,2171,2172,2173,2171,2172,2173,2174,2175,2176,2174,2175,2176,2177,2178,2179,2177,2178,2179,2180,2181,2182,2180,2181,2182,2183,2184,2185,2183,2184,2185,2186,2187,2188,2186,2187,2188,2189,2190,2191,2189,2190,2191,2192,2193,2194,2192,2193,2194,2195,2196,2197,2195,2196,2197,2198,2199,2200,2198,2199,2200,2201,2202,2203,2201,2202,2203,2204,2205,2206,2204,2205,2206,2207,2208,2209,2207,2208,2209,2210,2211,2212,2210,2211,2212,2213,2214,2215,2213,2214,2215,2216,2217,2218,2216,2217,2218,2219,2220,2221,2219,2220,2221,2222,2223,2224,2222,2223,2224,2225,2226,2227,2225,2226,2227,2228,2229,2230,2228,2229,2230,2231,2232,2233,2231,2232,2233,2234,2235,2236,2234,2235,2236,2237,2238,2239,2237,2238,2239,2240,2241,2242,2240,2241,2242,2243,2244,2245,2243,2244,2245,2246,2247,2248,2246,2247,2248,2249,2250,2251,2249,2250,2251,2252,2253,2254,2252,2253,2254,2255,2256,2257,2255,2256,2257,2258,2259,2260,2258,2259,2260,2261,2262,2263,2261,2262,2263,2264,2265,2266,2264,2265,2266,2267,2268,2269,2267,2268,2269],"cinnabar_wall":[2109,2110,2111,2109,2110,2111,0,2112,2113,0,2112,2113,2114,2115,2116,2114,2115,2116,2117,2118,2119,2117,2118,2119,2120,2121,2122,2120,2121,2122,2123,2124,2125,2123,2124,2125,2126,2127,2128,2126,2127,2128,2129,2130,2131,2129,2130,2131,2132,2133,2134,2132,2133,2134,2135,2136,2137,2135,2136,2137,2138,2139,2140,2138,2139,2140,2141,2142,2143,2141,2142,2143,2144,2145,2146,2144,2145,2146,2147,2148,2149,2147,2148,2149,2150,2151,2152,2150,2151,2152,2153,2154,2155,2153,2154,2155,2156,2157,2158,2156,2157,2158,2159,2160,2161,2159,2160,2161,2162,2163,2164,2162,2163,2164,2165,2166,2167,2165,2166,2167,2168,2169,2170,2168,2169,2170,2171,2172,2173,2171,2172,2173,2174,2175,2176,2174,2175,2176,2177,2178,2179,2177,2178,2179,2180,2181,2182,2180,2181,2182,2183,2184,2185,2183,2184,2185,2186,2187,2188,2186,2187,2188,2189,2190,2191,2189,2190,2191,2192,2193,2194,2192,2193,2194,2195,2196,2197,2195,2196,2197,2198,2199,2200,2198,2199,2200,2201,2202,2203,2201,2202,2203,2204,2205,2206,2204,2205,2206,2207,2208,2209,2207,2208,2209,2210,2211,2212,2210,2211,2212,2213,2214,2215,2213,2214,2215,2216,2217,2218,2216,2217,2218,2219,2220,2221,2219,2220,2221,2222,2223,2224,2222,2223,2224,2225,2226,2227,2225,2226,2227,2228,2229,2230,2228,2229,2230,2231,2232,2233,2231,2232,2233,2234,2235,2236,2234,2235,2236,2237,2238,2239,2237,2238,2239,2240,2241,2242,2240,2241,2242,2243,2244,2245,2243,2244,2245,2246,2247,2248,2246,2247,2248,2249,2250,2251,2249,2250,2251,2252,2253,2254,2252,2253,2254,2255,2256,2257,2255,2256,2257,2258,2259,2260,2258,2259,2260,2261,2262,2263,2261,2262,2263,2264,2265,2266,2264,2265,2266,2267,2268,2269,2267,2268,2269],"polished_cinnabar_wall":[2109,2110,2111,2109,2110,2111,0,2112,2113,0,2112,2113,2114,2115,2116,2114,2115,2116,2117,2118,2119,2117,2118,2119,2120,2121,2122,2120,2121,2122,2123,2124,2125,2123,2124,2125,2126,2127,2128,2126,2127,2128,2129,2130,2131,2129,2130,2131,2132,2133,2134,2132,2133,2134,2135,2136,2137,2135,2136,2137,2138,2139,2140,2138,2139,2140,2141,2142,2143,2141,2142,2143,2144,2145,2146,2144,2145,2146,2147,2148,2149,2147,2148,2149,2150,2151,2152,2150,2151,2152,2153,2154,2155,2153,2154,2155,2156,2157,2158,2156,2157,2158,2159,2160,2161,2159,2160,2161,2162,2163,2164,2162,2163,2164,2165,2166,2167,2165,2166,2167,2168,2169,2170,2168,2169,2170,2171,2172,2173,2171,2172,2173,2174,2175,2176,2174,2175,2176,2177,2178,2179,2177,2178,2179,2180,2181,2182,2180,2181,2182,2183,2184,2185,2183,2184,2185,2186,2187,2188,2186,2187,2188,2189,2190,2191,2189,2190,2191,2192,2193,2194,2192,2193,2194,2195,2196,2197,2195,2196,2197,2198,2199,2200,2198,2199,2200,2201,2202,2203,2201,2202,2203,2204,2205,2206,2204,2205,2206,2207,2208,2209,2207,2208,2209,2210,2211,2212,2210,2211,2212,2213,2214,2215,2213,2214,2215,2216,2217,2218,2216,2217,2218,2219,2220,2221,2219,2220,2221,2222,2223,2224,2222,2223,2224,2225,2226,2227,2225,2226,2227,2228,2229,2230,2228,2229,2230,2231,2232,2233,2231,2232,2233,2234,2235,2236,2234,2235,2236,2237,2238,2239,2237,2238,2239,2240,2241,2242,2240,2241,2242,2243,2244,2245,2243,2244,2245,2246,2247,2248,2246,2247,2248,2249,2250,2251,2249,2250,2251,2252,2253,2254,2252,2253,2254,2255,2256,2257,2255,2256,2257,2258,2259,2260,2258,2259,2260,2261,2262,2263,2261,2262,2263,2264,2265,2266,2264,2265,2266,2267,2268,2269,2267,2268,2269],"cinnabar_brick_wall":[2109,2110,2111,2109,2110,2111,0,2112,2113,0,2112,2113,2114,2115,2116,2114,2115,2116,2117,2118,2119,2117,2118,2119,2120,2121,2122,2120,2121,2122,2123,2124,2125,2123,2124,2125,2126,2127,2128,2126,2127,2128,2129,2130,2131,2129,2130,2131,2132,2133,2134,2132,2133,2134,2135,2136,2137,2135,2136,2137,2138,2139,2140,2138,2139,2140,2141,2142,2143,2141,2142,2143,2144,2145,2146,2144,2145,2146,2147,2148,2149,2147,2148,2149,2150,2151,2152,2150,2151,2152,2153,2154,2155,2153,2154,2155,2156,2157,2158,2156,2157,2158,2159,2160,2161,2159,2160,2161,2162,2163,2164,2162,2163,2164,2165,2166,2167,2165,2166,2167,2168,2169,2170,2168,2169,2170,2171,2172,2173,2171,2172,2173,2174,2175,2176,2174,2175,2176,2177,2178,2179,2177,2178,2179,2180,2181,2182,2180,2181,2182,2183,2184,2185,2183,2184,2185,2186,2187,2188,2186,2187,2188,2189,2190,2191,2189,2190,2191,2192,2193,2194,2192,2193,2194,2195,2196,2197,2195,2196,2197,2198,2199,2200,2198,2199,2200,2201,2202,2203,2201,2202,2203,2204,2205,2206,2204,2205,2206,2207,2208,2209,2207,2208,2209,2210,2211,2212,2210,2211,2212,2213,2214,2215,2213,2214,2215,2216,2217,2218,2216,2217,2218,2219,2220,2221,2219,2220,2221,2222,2223,2224,2222,2223,2224,2225,2226,2227,2225,2226,2227,2228,2229,2230,2228,2229,2230,2231,2232,2233,2231,2232,2233,2234,2235,2236,2234,2235,2236,2237,2238,2239,2237,2238,2239,2240,2241,2242,2240,2241,2242,2243,2244,2245,2243,2244,2245,2246,2247,2248,2246,2247,2248,2249,2250,2251,2249,2250,2251,2252,2253,2254,2252,2253,2254,2255,2256,2257,2255,2256,2257,2258,2259,2260,2258,2259,2260,2261,2262,2263,2261,2262,2263,2264,2265,2266,2264,2265,2266,2267,2268,2269,2267,2268,2269],"sulfur_spike":[4456,4457,4458,4459,4460,4461,4462,4463,4464,4465,4466,4467,4468,4469,4470,4471,4472,4473,4474,4475]}} \ No newline at end of file diff --git a/MinecraftClient/Physics/BlockShapes.cs b/MinecraftClient/Physics/BlockShapes.cs deleted file mode 100644 index c960913c21..0000000000 --- a/MinecraftClient/Physics/BlockShapes.cs +++ /dev/null @@ -1,243 +0,0 @@ -using System; -using System.Collections.Frozen; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Text.Json; -using MinecraftClient.Mapping; -using MinecraftClient.Mapping.BlockPalettes; - -namespace MinecraftClient.Physics -{ - /// - /// Registry of block collision shapes. Maps block state IDs to collision AABBs. - /// Data sourced from PrismarineJS/minecraft-data blockCollisionShapes.json. - /// - public static class BlockShapes - { - private static readonly Aabb FullBlock = new(0, 0, 0, 1, 1, 1); - private static readonly Aabb[] FullBlockArray = { FullBlock }; - private static readonly Aabb[] EmptyArray = Array.Empty(); - - private static FrozenDictionary? stateToShape; - private static Dictionary? prismarineBlocks; - private static Dictionary? prismarineShapes; - - /// - /// Initialize the shape registry from embedded data + current palette. - /// Call once after the block palette is set. - /// - public static void Initialize() - { - LoadPrismarineData(); - BuildStateMap(); - } - - /// - /// Get collision shapes for a block state ID. - /// Returns empty array for air/passable blocks, single full-block for solid cubes, etc. - /// - public static Aabb[] GetShapes(int blockStateId) - { - if (stateToShape is not null && stateToShape.TryGetValue(blockStateId, out var shapes)) - return shapes; - return FallbackShape(blockStateId); - } - - /// - /// Get collision shapes for a Block at a specific position (state-aware) - /// - public static Aabb[] GetShapes(Block block) => GetShapes(block.BlockId); - - /// - /// Check if a block state is effectively empty (no collision) - /// - public static bool IsEmpty(int blockStateId) - { - var shapes = GetShapes(blockStateId); - return shapes.Length == 0; - } - - private static Aabb[] FallbackShape(int blockStateId) - { - Material mat = Block.Palette.FromId(blockStateId); - if (mat == Material.Air) return EmptyArray; - if (mat.IsLiquid()) return EmptyArray; - if (mat.IsSolid()) return FullBlockArray; - return EmptyArray; - } - - private static void LoadPrismarineData() - { - prismarineBlocks = new Dictionary(); - prismarineShapes = new Dictionary(); - - try - { - var assembly = Assembly.GetExecutingAssembly(); - using var stream = assembly.GetManifestResourceStream("BlockShapeData.json"); - if (stream is null) - { - ConsoleIO.WriteLineFormatted("§e[Physics] BlockShapeData.json not found as embedded resource"); - return; - } - using var doc = JsonDocument.Parse(stream); - var root = doc.RootElement; - - // Parse shapes: shapeId -> list of AABB boxes - if (root.TryGetProperty("shapes", out var shapesEl)) - { - foreach (var prop in shapesEl.EnumerateObject()) - { - if (int.TryParse(prop.Name, out int shapeId)) - { - var boxes = new List(); - foreach (var boxEl in prop.Value.EnumerateArray()) - { - var coords = new double[6]; - int idx = 0; - foreach (var c in boxEl.EnumerateArray()) - { - if (idx < 6) coords[idx++] = c.GetDouble(); - } - if (idx == 6) - boxes.Add(new Aabb(coords[0], coords[1], coords[2], coords[3], coords[4], coords[5])); - } - prismarineShapes[shapeId] = boxes.ToArray(); - } - } - } - - // Parse blocks: blockName -> shapeId (int) or list of shapeIds - if (root.TryGetProperty("blocks", out var blocksEl)) - { - foreach (var prop in blocksEl.EnumerateObject()) - { - string blockName = prop.Name; - if (prop.Value.ValueKind == JsonValueKind.Number) - { - prismarineBlocks[blockName] = prop.Value.GetInt32(); - } - else if (prop.Value.ValueKind == JsonValueKind.Array) - { - var ids = new List(); - foreach (var el in prop.Value.EnumerateArray()) - ids.Add(el.GetInt32()); - prismarineBlocks[blockName] = ids; - } - } - } - } - catch (Exception ex) - { - ConsoleIO.WriteLineFormatted($"§e[Physics] Failed to load BlockShapeData.json: {ex.Message}"); - } - } - - private static void BuildStateMap() - { - var builder = new Dictionary(); - - if (prismarineBlocks is null || prismarineShapes is null) - { - stateToShape = builder.ToFrozenDictionary(); - return; - } - - var palette = Block.Palette; - var dict = GetPaletteDict(palette); - if (dict is null) - { - stateToShape = builder.ToFrozenDictionary(); - return; - } - - // Group consecutive state IDs by Material to find state ranges per block - var materialRanges = new Dictionary>(); - int? rangeStart = null; - Material? currentMat = null; - - foreach (var kvp in dict.OrderBy(k => k.Key)) - { - if (currentMat == kvp.Value && rangeStart.HasValue && kvp.Key == (materialRanges[currentMat.Value].Last().end + 1)) - { - var ranges = materialRanges[currentMat.Value]; - ranges[ranges.Count - 1] = (ranges.Last().start, kvp.Key); - } - else - { - currentMat = kvp.Value; - if (!materialRanges.ContainsKey(currentMat.Value)) - materialRanges[currentMat.Value] = new List<(int, int)>(); - materialRanges[currentMat.Value].Add((kvp.Key, kvp.Key)); - } - } - - // Map each Material to PrismarineJS block name - foreach (var kvp in materialRanges) - { - string snakeName = MaterialToSnakeCase(kvp.Key); - if (!prismarineBlocks.TryGetValue(snakeName, out var blockShapeData)) - continue; - - int globalStateOffset = 0; - foreach (var (start, end) in kvp.Value) - { - int stateCount = end - start + 1; - - if (blockShapeData is int singleShapeId) - { - var shapes = prismarineShapes.GetValueOrDefault(singleShapeId, EmptyArray); - for (int sid = start; sid <= end; sid++) - builder[sid] = shapes; - } - else if (blockShapeData is List shapeIdList) - { - for (int i = 0; i < stateCount && (globalStateOffset + i) < shapeIdList.Count; i++) - { - int shapeId = shapeIdList[globalStateOffset + i]; - builder[start + i] = prismarineShapes.GetValueOrDefault(shapeId, EmptyArray); - } - } - globalStateOffset += stateCount; - } - } - stateToShape = builder.ToFrozenDictionary(); - } - - /// - /// Convert Material enum name (PascalCase) to snake_case block name - /// - private static string MaterialToSnakeCase(Material mat) - { - string name = mat.ToString(); - var sb = new System.Text.StringBuilder(name.Length + 5); - for (int i = 0; i < name.Length; i++) - { - char c = name[i]; - if (char.IsUpper(c) && i > 0) - sb.Append('_'); - sb.Append(char.ToLowerInvariant(c)); - } - return sb.ToString(); - } - - /// - /// Access the internal dictionary of a palette via reflection (all palettes store it the same way) - /// - private static Dictionary? GetPaletteDict(BlockPalette palette) - { - try - { - var method = palette.GetType().GetMethod("GetDict", - BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.FlattenHierarchy); - return method?.Invoke(palette, null) as Dictionary; - } - catch - { - return null; - } - } - } -} diff --git a/MinecraftClient/Physics/CollisionDetector.cs b/MinecraftClient/Physics/CollisionDetector.cs deleted file mode 100644 index 0788e93b01..0000000000 --- a/MinecraftClient/Physics/CollisionDetector.cs +++ /dev/null @@ -1,204 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Mapping; - -namespace MinecraftClient.Physics -{ - /// - /// Performs AABB collision detection against the block world. - /// Mirrors Entity.collide(), collideBoundingBox(), collideWithShapes() from vanilla MC. - /// - public static class CollisionDetector - { - /// - /// Resolve movement with full collision detection including step-up. - /// This is the main entry point, equivalent to Entity.collide(Vec3). - /// - public static Vec3d Collide(World world, Aabb entityBox, Vec3d movement, bool onGround, float maxUpStep) - { - if (movement.LengthSqr() == 0.0) - return movement; - - // Collect block collision shapes in the movement path - var colliders = CollectBlockColliders(world, entityBox.ExpandTowards(movement)); - Vec3d resolved = CollideWithShapes(movement, entityBox, colliders); - - bool blockedX = movement.X != resolved.X; - bool blockedZ = movement.Z != resolved.Z; - bool blockedY = movement.Y != resolved.Y; - bool hitGroundDuringMove = blockedY && movement.Y < 0.0; - - // Step-up logic: if blocked horizontally and on ground or just landed - if (maxUpStep > 0.0f && (hitGroundDuringMove || onGround) && (blockedX || blockedZ)) - { - // Try stepping up - Aabb stepBase = hitGroundDuringMove ? entityBox.Move(0, resolved.Y, 0) : entityBox; - Aabb expanded = stepBase.ExpandTowards(movement.X, maxUpStep, movement.Z) - .ExpandTowards(0, hitGroundDuringMove ? 0 : -1.0E-5, 0); - - var stepColliders = CollectBlockColliders(world, expanded); - - // Try various step heights - float[] candidateHeights = CollectCandidateStepHeights(stepBase, stepColliders, maxUpStep, (float)resolved.Y); - - foreach (float stepY in candidateHeights) - { - Vec3d stepMovement = new Vec3d(movement.X, stepY, movement.Z); - Vec3d stepResolved = CollideWithShapes(stepMovement, stepBase, stepColliders); - - if (stepResolved.HorizontalDistanceSqr() > resolved.HorizontalDistanceSqr()) - { - double yOffset = entityBox.MinY - stepBase.MinY; - return stepResolved.Subtract(0, yOffset, 0); - } - } - } - - return resolved; - } - - /// - /// Collide movement against a list of shapes using axis-separated resolution. - /// Matches Entity.collideWithShapes() — processes axes in order of smallest movement first. - /// - private static Vec3d CollideWithShapes(Vec3d movement, Aabb entityBox, List colliders) - { - if (colliders.Count == 0) - return movement; - - Vec3d accumulated = Vec3d.Zero; - int[] axisOrder = GetAxisStepOrder(movement); - - foreach (int axis in axisOrder) - { - double dist = movement.Get(axis); - if (dist == 0.0) continue; - - double resolved = CollideAxis(axis, entityBox.Move(accumulated), colliders, dist); - accumulated = accumulated.With(axis, resolved); - } - - return accumulated; - } - - /// - /// Get axis processing order: Y first if moving down, otherwise smallest absolute movement first. - /// Vanilla uses Direction.axisStepOrder(Vec3) which returns axes sorted by absolute movement. - /// - private static int[] GetAxisStepOrder(Vec3d movement) - { - double absX = Math.Abs(movement.X); - double absY = Math.Abs(movement.Y); - double absZ = Math.Abs(movement.Z); - - if (absX > absZ) - { - if (absZ > absY) - return new[] { 1, 2, 0 }; // Y Z X - if (absX > absY) - return new[] { 1, 0, 2 }; // Y X Z - return new[] { 0, 1, 2 }; // X Y Z - } - else - { - if (absX > absY) - return new[] { 1, 0, 2 }; // Y X Z - if (absZ > absY) - return new[] { 1, 2, 0 }; // Y Z X - return new[] { 2, 1, 0 }; // Z Y X - } - } - - /// - /// Collide along a single axis against all block shapes. - /// Equivalent to Shapes.collide(axis, box, shapes, distance). - /// - private static double CollideAxis(int axis, Aabb entityBox, List colliders, double movement) - { - foreach (var collider in colliders) - { - if (Math.Abs(movement) < PhysicsConsts.CollisionEpsilon) - return 0.0; - movement = entityBox.Collide(axis, collider, movement); - } - return movement; - } - - /// - /// Collect all block collision AABBs that overlap the given search area. - /// Equivalent to BlockCollisions iterator in vanilla. - /// - public static List CollectBlockColliders(World world, Aabb searchBox) - { - var result = new List(); - - int minBX = (int)Math.Floor(searchBox.MinX - PhysicsConsts.CollisionEpsilon) - 1; - int maxBX = (int)Math.Floor(searchBox.MaxX + PhysicsConsts.CollisionEpsilon) + 1; - int minBY = (int)Math.Floor(searchBox.MinY - PhysicsConsts.CollisionEpsilon) - 1; - int maxBY = (int)Math.Floor(searchBox.MaxY + PhysicsConsts.CollisionEpsilon) + 1; - int minBZ = (int)Math.Floor(searchBox.MinZ - PhysicsConsts.CollisionEpsilon) - 1; - int maxBZ = (int)Math.Floor(searchBox.MaxZ + PhysicsConsts.CollisionEpsilon) + 1; - - for (int bx = minBX; bx <= maxBX; bx++) - { - for (int bz = minBZ; bz <= maxBZ; bz++) - { - for (int by = minBY; by <= maxBY; by++) - { - Block block = world.GetBlock(new Location(bx, by, bz)); - Aabb[] shapes = BlockShapes.GetShapes(block); - - foreach (var shape in shapes) - { - Aabb worldShape = shape.Move(bx, by, bz); - if (worldShape.Intersects(searchBox)) - result.Add(worldShape); - } - } - } - } - - return result; - } - - /// - /// Collect candidate step-up heights, matching Entity.collectCandidateStepUpHeights(). - /// Returns sorted distinct step heights between current resolved Y and maxUpStep. - /// - private static float[] CollectCandidateStepHeights(Aabb stepBase, List colliders, float maxUpStep, float currentY) - { - var heights = new SortedSet(); - - foreach (var collider in colliders) - { - float h = (float)(collider.MaxY - stepBase.MinY); - if (h > currentY && h <= maxUpStep) - heights.Add(h); - } - - if (heights.Count == 0) - return new[] { maxUpStep }; - - var result = new float[heights.Count]; - heights.CopyTo(result); - return result; - } - - /// - /// Check if a position is on ground by testing for vertical collision below. - /// - public static bool IsOnGround(World world, Aabb entityBox) - { - Aabb testBox = entityBox.ExpandTowards(0, -0.06, 0); - return CollectBlockColliders(world, testBox).Count > 0; - } - - /// - /// Check if a given position has no collision (for checking if player fits somewhere). - /// - public static bool NoCollision(World world, Aabb entityBox) - { - return CollectBlockColliders(world, entityBox).Count == 0; - } - } -} diff --git a/MinecraftClient/Physics/MovementInput.cs b/MinecraftClient/Physics/MovementInput.cs deleted file mode 100644 index f1899d579e..0000000000 --- a/MinecraftClient/Physics/MovementInput.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; - -namespace MinecraftClient.Physics -{ - /// - /// Represents movement input state, equivalent to vanilla ClientInput / KeyboardInput. - /// - public class MovementInput - { - public bool Forward; - public bool Back; - public bool Left; - public bool Right; - public bool Jump; - public bool Sneak; - public bool Sprint; - - /// - /// Get the raw input vector (xxa, zza) before rotation. - /// Forward = +zza, Back = -zza, Left = +xxa, Right = -xxa. - /// Then normalized if magnitude > 1. - /// - public (float xxa, float zza) GetMoveVector() - { - float xxa = 0; - float zza = 0; - - if (Forward) zza += 1.0f; - if (Back) zza -= 1.0f; - if (Left) xxa += 1.0f; - if (Right) xxa -= 1.0f; - - float lenSqr = xxa * xxa + zza * zza; - if (lenSqr > 1.0f) - { - float len = MathF.Sqrt(lenSqr); - xxa /= len; - zza /= len; - } - - return (xxa, zza); - } - - public void Reset() - { - Forward = false; - Back = false; - Left = false; - Right = false; - Jump = false; - Sneak = false; - Sprint = false; - } - } -} diff --git a/MinecraftClient/Physics/PhysicsConsts.cs b/MinecraftClient/Physics/PhysicsConsts.cs deleted file mode 100644 index 95cb02c1fd..0000000000 --- a/MinecraftClient/Physics/PhysicsConsts.cs +++ /dev/null @@ -1,87 +0,0 @@ -namespace MinecraftClient.Physics -{ - /// - /// All physics constants matching vanilla Minecraft 1.21.11. - /// Values sourced from Entity.java, LivingEntity.java, Player.java, LocalPlayer.java. - /// - public static class PhysicsConsts - { - // --- Player dimensions --- - public const double PlayerWidth = 0.6; - public const double PlayerHeight = 1.8; - public const double PlayerSneakHeight = 1.5; - public const double PlayerSwimHeight = 0.6; - public const double PlayerEyeHeight = 1.62; - - // --- Gravity --- - public const double DefaultGravity = 0.08; - public const double SlowFallingCap = 0.01; - - // --- Step height --- - public const float StepHeight = 0.6f; - - // --- Friction / drag --- - public const float FrictionMultiplier = 0.91f; - public const float DragY = 0.98f; - public const float InputFriction = 0.98f; - public const float GroundAccelerationFactor = 0.21600002f; // 0.216 / (f^3) - public const float AirAcceleration = 0.02f; - - // --- Default block friction --- - public const float DefaultBlockFriction = 0.6f; - public const float IceFriction = 0.98f; - public const float PackedIceFriction = 0.98f; - public const float BlueIceFriction = 0.989f; - public const float SlimeBlockFriction = 0.8f; - - // --- Speed factors --- - public const float DefaultSpeedFactor = 1.0f; - public const float SoulSandSpeedFactor = 0.4f; - public const float HoneySpeedFactor = 0.4f; - - // --- Water --- - public const float WaterSlowDown = 0.8f; - public const float WaterSprintSlowDown = 0.9f; - public const float DolphinsGraceSlowDown = 0.96f; - public const float WaterBaseSpeed = 0.02f; - public const float WaterYDamping = 0.8f; - public const float WaterFloatImpulse = 0.04f; - - // --- Lava --- - public const float LavaSpeed = 0.02f; - public const double LavaHorizontalDamping = 0.5; - public const double LavaVerticalDamping = 0.8; - - // --- Jump --- - public const float BaseJumpPower = 0.42f; - public const double SprintJumpHorizontalBoost = 0.2; - - // --- Climb --- - public const float ClimbMaxSpeed = 0.15f; - public const double ClimbWallBump = 0.2; - - // --- Velocity zeroing thresholds (from LivingEntity.aiStep) --- - public const double PlayerHorizontalVelocityThresholdSqr = 9.0E-6; // < 0.003 length - public const double NonPlayerVelocityThreshold = 0.003; - public const double VerticalVelocityThreshold = 0.003; - - // --- Collision epsilon --- - public const double CollisionEpsilon = 1.0E-7; - - // --- Position packet sending (from LocalPlayer.sendPosition) --- - public const double PositionSendThresholdSqr = 4.0E-8; // (2e-4)^2 - public const int PositionReminderInterval = 20; - - // --- Flying detection --- - public const double FloatingYThreshold = -0.03125; - - // --- Elytra --- - public const double ElytraXZDrag = 0.99; - public const double ElytraYDrag = 0.98; - - // --- Creative/spectator fly --- - public const float DefaultFlySpeed = 0.05f; - public const double FlyVerticalDamping = 0.6; - public const double FlyVerticalBoostScale = 3.0; - } -} diff --git a/MinecraftClient/Physics/PlayerPhysics.cs b/MinecraftClient/Physics/PlayerPhysics.cs deleted file mode 100644 index bf18429f46..0000000000 --- a/MinecraftClient/Physics/PlayerPhysics.cs +++ /dev/null @@ -1,579 +0,0 @@ -using System; -using MinecraftClient.Mapping; - -namespace MinecraftClient.Physics -{ - /// - /// Core physics tick engine for the player, faithfully replicating vanilla 1.21.11 physics. - /// Mirrors the combined logic of Entity.move(), LivingEntity.aiStep()/travel()/travelInAir(), - /// Player.travel(), and LocalPlayer.aiStep(). - /// - public class PlayerPhysics - { - // --- State --- - public Vec3d Position; - public Vec3d DeltaMovement; - public float Yaw; - public float Pitch; - public bool OnGround; - public bool HorizontalCollision; - public bool VerticalCollision; - public bool VerticalCollisionBelow; - public double FallDistance; - public Vec3d StuckSpeedMultiplier = Vec3d.Zero; - - // Movement input - public float Xxa; // strafe - public float Zza; // forward - public float Yya; // vertical (creative fly) - public bool Jumping; - - // Movement mode flags - public bool Sprinting; - public bool Sneaking; - public bool CreativeFlying; - public bool InWater; - public bool InLava; - public bool OnClimbable; - public bool HasSlowFalling; - public bool HasLevitation; - public int LevitationAmplifier; - - // Player dimensions - public double PlayerWidth = PhysicsConsts.PlayerWidth; - public double PlayerHeight = PhysicsConsts.PlayerHeight; - - // Anti-jump-spam - private int noJumpDelay; - - // Tick counter for position packet timing - public int TickCount; - - // Movement speed attribute (base = 0.1 for players) - public float MovementSpeed = 0.1f; - - /// - /// Get the player's bounding box at current position - /// - public Aabb GetBoundingBox() - { - return Aabb.OfSize(Position.X, Position.Y, Position.Z, PlayerWidth, PlayerHeight); - } - - /// - /// Run one physics tick. Call at 20 TPS. - /// - public void Tick(World world) - { - TickCount++; - - // Velocity threshold zeroing (LivingEntity.aiStep) - ZeroTinyVelocity(); - - // Jump handling - HandleJumping(world); - - // Build travel input - Vec3d travelInput = new(Xxa, Yya, Zza); - - // Travel (dispatches to air/water/lava/fly) - Travel(world, travelInput); - - if (noJumpDelay > 0) - noJumpDelay--; - } - - /// - /// Apply the movement input from MovementInput to xxa/zza. - /// Call before Tick() each frame. - /// - public void ApplyInput(MovementInput input) - { - var (rawXxa, rawZza) = input.GetMoveVector(); - - // Scale by INPUT_FRICTION (0.98) — this matches LocalPlayer.modifyInput - rawXxa *= PhysicsConsts.InputFriction; - rawZza *= PhysicsConsts.InputFriction; - - // Sneak slowdown - if (input.Sneak) - { - rawXxa *= 0.3f; - rawZza *= 0.3f; - } - - Xxa = rawXxa; - Zza = rawZza; - Yya = 0; - Jumping = input.Jump; - Sneaking = input.Sneak; - Sprinting = input.Sprint; - - // Creative/spectator fly vertical - if (CreativeFlying) - { - if (input.Jump) - Yya += (float)(PhysicsConsts.DefaultFlySpeed * PhysicsConsts.FlyVerticalBoostScale); - if (input.Sneak) - Yya -= (float)(PhysicsConsts.DefaultFlySpeed * PhysicsConsts.FlyVerticalBoostScale); - } - } - - private void ZeroTinyVelocity() - { - double dx = DeltaMovement.X; - double dy = DeltaMovement.Y; - double dz = DeltaMovement.Z; - - // Player-specific: zero horizontal if combined length < 0.003 - if (dx * dx + dz * dz < PhysicsConsts.PlayerHorizontalVelocityThresholdSqr) - { - dx = 0; - dz = 0; - } - if (Math.Abs(dy) < PhysicsConsts.VerticalVelocityThreshold) - dy = 0; - - DeltaMovement = new Vec3d(dx, dy, dz); - } - - private void HandleJumping(World world) - { - if (!Jumping) { noJumpDelay = 0; return; } - - if (InWater || InLava) - { - // Jump in fluid: add upward impulse - DeltaMovement = DeltaMovement.Add(0, PhysicsConsts.WaterFloatImpulse, 0); - } - else if (OnGround && noJumpDelay == 0) - { - JumpFromGround(); - noJumpDelay = 10; - } - } - - private void JumpFromGround() - { - float jumpPower = PhysicsConsts.BaseJumpPower; - if (jumpPower <= 1.0E-5f) return; - - DeltaMovement = new Vec3d( - DeltaMovement.X, - Math.Max(jumpPower, DeltaMovement.Y), - DeltaMovement.Z); - - if (Sprinting) - { - float yawRad = Yaw * (MathF.PI / 180.0f); - DeltaMovement = DeltaMovement.Add( - -MathF.Sin(yawRad) * PhysicsConsts.SprintJumpHorizontalBoost, - 0, - MathF.Cos(yawRad) * PhysicsConsts.SprintJumpHorizontalBoost); - } - } - - private void Travel(World world, Vec3d input) - { - if (InWater && !CreativeFlying) - { - TravelInWater(world, input); - } - else if (InLava && !CreativeFlying) - { - TravelInLava(world, input); - } - else - { - TravelInAir(world, input); - } - } - - /// - /// Ground/air travel — LivingEntity.travelInAir(Vec3) - /// - private void TravelInAir(World world, Vec3d input) - { - // Get block friction at feet - float blockFriction = OnGround ? GetBlockFriction(world) : 1.0f; - float f = blockFriction * PhysicsConsts.FrictionMultiplier; - - // Apply input → velocity (handleRelativeFrictionAndCalculateMovement) - float speed = GetFrictionInfluencedSpeed(blockFriction); - MoveRelative(speed, input); - - // Handle climbable - HandleOnClimbable(); - - // Execute collision - Move(world, DeltaMovement); - - Vec3d postMoveVel = DeltaMovement; - double vy = postMoveVel.Y; - - // Climbing wall bump - if ((HorizontalCollision || Jumping) && OnClimbable) - { - vy = PhysicsConsts.ClimbWallBump; - } - - // Apply gravity - if (HasLevitation) - { - vy += (0.05 * (LevitationAmplifier + 1) - vy) * 0.2; - } - else - { - vy -= GetEffectiveGravity(); - } - - // Apply drag/friction - if (CreativeFlying) - { - // Player.travel override: creative fly preserves horizontal from parent, damps Y - DeltaMovement = new Vec3d(postMoveVel.X * f, vy * PhysicsConsts.FlyVerticalDamping, postMoveVel.Z * f); - } - else - { - DeltaMovement = new Vec3d(postMoveVel.X * f, vy * PhysicsConsts.DragY, postMoveVel.Z * f); - } - - // Block speed factor (soul sand, honey, etc.) - ApplyBlockSpeedFactor(world); - } - - /// - /// Water travel — LivingEntity.travelInWater(Vec3, ...) - /// - private void TravelInWater(World world, Vec3d input) - { - float slowDown = Sprinting ? PhysicsConsts.WaterSprintSlowDown : PhysicsConsts.WaterSlowDown; - float speed = PhysicsConsts.WaterBaseSpeed; - - MoveRelative(speed, input); - Move(world, DeltaMovement); - - Vec3d vel = DeltaMovement; - - // Climbing bump in water - if (HorizontalCollision && OnClimbable) - vel = new Vec3d(vel.X, PhysicsConsts.ClimbWallBump, vel.Z); - - vel = vel.Multiply(slowDown, PhysicsConsts.WaterYDamping, slowDown); - - // Gravity adjustment in water - double gravity = GetEffectiveGravity(); - if (gravity != 0.0) - { - double adjustedY = vel.Y; - bool falling = vel.Y <= 0.0; - if (falling && Math.Abs(vel.Y - 0.005) >= PhysicsConsts.VerticalVelocityThreshold) - { - adjustedY -= gravity / 16.0; - } - - if (!OnGround) - adjustedY -= gravity / 16.0; - - vel = new Vec3d(vel.X, adjustedY, vel.Z); - } - - DeltaMovement = vel; - } - - /// - /// Lava travel — LivingEntity.travelInLava(Vec3, ...) - /// - private void TravelInLava(World world, Vec3d input) - { - MoveRelative(PhysicsConsts.LavaSpeed, input); - Move(world, DeltaMovement); - - double gravity = GetEffectiveGravity(); - Vec3d vel = DeltaMovement; - vel = vel.Multiply(PhysicsConsts.LavaHorizontalDamping, PhysicsConsts.LavaVerticalDamping, PhysicsConsts.LavaHorizontalDamping); - - if (gravity != 0.0) - { - vel = vel.Add(0, -gravity / 4.0, 0); - } - - DeltaMovement = vel; - } - - /// - /// Add input vector rotated by yaw to deltaMovement. - /// Equivalent to Entity.moveRelative(float, Vec3) + getInputVector(). - /// - private void MoveRelative(float speed, Vec3d input) - { - Vec3d rotated = GetInputVector(input, speed, Yaw); - DeltaMovement = DeltaMovement.Add(rotated); - } - - /// - /// Rotate input by yaw and scale by speed. Equivalent to Entity.getInputVector(). - /// - private static Vec3d GetInputVector(Vec3d input, float speed, float yaw) - { - double lenSqr = input.LengthSqr(); - if (lenSqr < 1.0E-7) - return Vec3d.Zero; - - Vec3d scaled = (lenSqr > 1.0 ? input.Normalize() : input).Scale(speed); - float sinYaw = MathF.Sin(yaw * (MathF.PI / 180.0f)); - float cosYaw = MathF.Cos(yaw * (MathF.PI / 180.0f)); - - return new Vec3d( - scaled.X * cosYaw - scaled.Z * sinYaw, - scaled.Y, - scaled.Z * cosYaw + scaled.X * sinYaw); - } - - /// - /// Execute movement with collision detection. - /// Equivalent to Entity.move(MoverType.SELF, delta). - /// - private void Move(World world, Vec3d movement) - { - if (StuckSpeedMultiplier.LengthSqr() > 1.0E-7) - { - movement = movement.Multiply(StuckSpeedMultiplier); - StuckSpeedMultiplier = Vec3d.Zero; - DeltaMovement = Vec3d.Zero; - } - - // Sneak edge back-off - if (Sneaking && OnGround) - movement = MaybeBackOffFromEdge(world, movement); - - Aabb box = GetBoundingBox(); - Vec3d resolved = CollisionDetector.Collide(world, box, movement, OnGround, PhysicsConsts.StepHeight); - - double resolvedLenSqr = resolved.LengthSqr(); - if (resolvedLenSqr > 1.0E-7 || movement.LengthSqr() - resolvedLenSqr < 1.0E-7) - { - // Fall distance reset via trace (simplified: reset on hitting ground) - if (FallDistance != 0.0 && resolvedLenSqr >= 1.0) - { - // Simplified: just check vertical collision - } - - Position = Position.Add(resolved); - } - - // Collision flags - bool blockedX = !MthEqual(movement.X, resolved.X); - bool blockedZ = !MthEqual(movement.Z, resolved.Z); - HorizontalCollision = blockedX || blockedZ; - VerticalCollision = movement.Y != resolved.Y; - VerticalCollisionBelow = VerticalCollision && movement.Y < 0.0; - OnGround = VerticalCollisionBelow; - - // Fall distance tracking - if (OnGround) - FallDistance = 0; - else if (resolved.Y < 0) - FallDistance -= resolved.Y; - - // Zero velocity on blocked axes - if (HorizontalCollision) - { - DeltaMovement = new Vec3d( - blockedX ? 0 : DeltaMovement.X, - DeltaMovement.Y, - blockedZ ? 0 : DeltaMovement.Z); - } - - if (VerticalCollision) - { - // Slime block bounce would go here; for now just zero Y - DeltaMovement = new Vec3d(DeltaMovement.X, 0, DeltaMovement.Z); - } - } - - /// - /// Sneak edge detection: prevent walking off edges while sneaking. - /// Equivalent to Player.maybeBackOffFromEdge(Vec3, MoverType). - /// - private Vec3d MaybeBackOffFromEdge(World world, Vec3d movement) - { - if (movement.Y > 0) return movement; - - double step = 0.05; - double dx = movement.X; - double dz = movement.Z; - Aabb box = GetBoundingBox(); - - while (dx != 0.0 && CollisionDetector.CollectBlockColliders(world, - box.Move(dx, -1.0, 0)).Count == 0) - { - dx = dx < step && dx >= -step ? 0.0 : (dx > 0.0 ? dx - step : dx + step); - } - - while (dz != 0.0 && CollisionDetector.CollectBlockColliders(world, - box.Move(0, -1.0, dz)).Count == 0) - { - dz = dz < step && dz >= -step ? 0.0 : (dz > 0.0 ? dz - step : dz + step); - } - - while (dx != 0.0 && dz != 0.0 && CollisionDetector.CollectBlockColliders(world, - box.Move(dx, -1.0, dz)).Count == 0) - { - dx = dx < step && dx >= -step ? 0.0 : (dx > 0.0 ? dx - step : dx + step); - dz = dz < step && dz >= -step ? 0.0 : (dz > 0.0 ? dz - step : dz + step); - } - - return new Vec3d(dx, movement.Y, dz); - } - - /// - /// Clamp velocity for climbable blocks. - /// Equivalent to LivingEntity.handleOnClimbable(Vec3). - /// - private void HandleOnClimbable() - { - if (!OnClimbable) return; - - FallDistance = 0; - double vx = Math.Clamp(DeltaMovement.X, -PhysicsConsts.ClimbMaxSpeed, PhysicsConsts.ClimbMaxSpeed); - double vz = Math.Clamp(DeltaMovement.Z, -PhysicsConsts.ClimbMaxSpeed, PhysicsConsts.ClimbMaxSpeed); - double vy = Math.Max(DeltaMovement.Y, -PhysicsConsts.ClimbMaxSpeed); - - // Sneaking on ladder prevents sliding down - if (vy < 0.0 && Sneaking) - vy = 0.0; - - DeltaMovement = new Vec3d(vx, vy, vz); - } - - /// - /// Get effective gravity considering slow falling effect. - /// - private double GetEffectiveGravity() - { - double gravity = PhysicsConsts.DefaultGravity; - if (HasSlowFalling && DeltaMovement.Y <= 0.0) - return Math.Min(gravity, PhysicsConsts.SlowFallingCap); - return gravity; - } - - /// - /// Get speed based on friction: ground uses attribute speed * 0.216/(f^3), air uses 0.02. - /// Equivalent to LivingEntity.getFrictionInfluencedSpeed(float). - /// - private float GetFrictionInfluencedSpeed(float friction) - { - if (OnGround) - { - return MovementSpeed * (PhysicsConsts.GroundAccelerationFactor / (friction * friction * friction)); - } - else - { - return CreativeFlying ? MovementSpeed * 0.1f : PhysicsConsts.AirAcceleration; - } - } - - /// - /// Get the friction of the block below the player's feet. - /// - private float GetBlockFriction(World world) - { - Location belowFeet = new(Position.X, Position.Y - 0.5000010, Position.Z); - Material mat = world.GetBlock(belowFeet).Type; - return GetMaterialFriction(mat); - } - - /// - /// Apply block speed factor (soul sand, honey, etc.) - /// Equivalent to Entity.getBlockSpeedFactor(). - /// - private void ApplyBlockSpeedFactor(World world) - { - Location atFeet = new(Position.X, Position.Y, Position.Z); - Material mat = world.GetBlock(atFeet).Type; - float factor = GetMaterialSpeedFactor(mat); - - if (factor == 1.0f) - { - Location belowFeet = new(Position.X, Position.Y - 0.5000010, Position.Z); - mat = world.GetBlock(belowFeet).Type; - factor = GetMaterialSpeedFactor(mat); - } - - if (factor != 1.0f) - { - DeltaMovement = DeltaMovement.Multiply(factor, 1.0, factor); - } - } - - /// - /// Get friction value for a material. Default 0.6, special blocks differ. - /// - public static float GetMaterialFriction(Material mat) - { - return mat switch - { - Material.Ice or Material.PackedIce => PhysicsConsts.IceFriction, - Material.BlueIce => PhysicsConsts.BlueIceFriction, - Material.SlimeBlock => PhysicsConsts.SlimeBlockFriction, - Material.FrostedIce => PhysicsConsts.IceFriction, - _ => PhysicsConsts.DefaultBlockFriction - }; - } - - /// - /// Get speed factor for a material. - /// - public static float GetMaterialSpeedFactor(Material mat) - { - return mat switch - { - Material.SoulSand or Material.SoulSoil => PhysicsConsts.SoulSandSpeedFactor, - Material.HoneyBlock => PhysicsConsts.HoneySpeedFactor, - _ => PhysicsConsts.DefaultSpeedFactor - }; - } - - /// - /// Update environmental state flags (in water, in lava, on climbable, etc.) - /// Call before each Tick(). - /// - public void UpdateEnvironment(World world) - { - Location feetLoc = new(Position.X, Position.Y, Position.Z); - Location headLoc = new(Position.X, Position.Y + PlayerHeight * 0.5, Position.Z); - - Material feetBlock = world.GetBlock(feetLoc).Type; - Material headBlock = world.GetBlock(headLoc).Type; - - InWater = feetBlock == Material.Water || headBlock == Material.Water - || feetBlock == Material.BubbleColumn; - InLava = feetBlock == Material.Lava || headBlock == Material.Lava; - OnClimbable = feetBlock.CanBeClimbedOn(); - } - - /// - /// Set position from server teleport / initial spawn. - /// - public void SetPosition(double x, double y, double z) - { - Position = new Vec3d(x, y, z); - } - - /// - /// Set position and reset velocity (for teleports). - /// - public void Teleport(double x, double y, double z) - { - Position = new Vec3d(x, y, z); - DeltaMovement = Vec3d.Zero; - FallDistance = 0; - } - - private static bool MthEqual(double a, double b) - { - return Math.Abs(a - b) < 1.0E-5; - } - } -} diff --git a/MinecraftClient/Physics/Vec3d.cs b/MinecraftClient/Physics/Vec3d.cs deleted file mode 100644 index bbda4331c0..0000000000 --- a/MinecraftClient/Physics/Vec3d.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Runtime.CompilerServices; - -namespace MinecraftClient.Physics -{ - /// - /// Immutable 3D double vector, mirrors net.minecraft.world.phys.Vec3 - /// - public readonly struct Vec3d : IEquatable - { - public static readonly Vec3d Zero = new(0, 0, 0); - - public readonly double X; - public readonly double Y; - public readonly double Z; - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Vec3d(double x, double y, double z) - { - X = x; - Y = y; - Z = z; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Vec3d Add(double x, double y, double z) => new(X + x, Y + y, Z + z); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Vec3d Add(Vec3d other) => new(X + other.X, Y + other.Y, Z + other.Z); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Vec3d Subtract(Vec3d other) => new(X - other.X, Y - other.Y, Z - other.Z); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Vec3d Subtract(double x, double y, double z) => new(X - x, Y - y, Z - z); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Vec3d Scale(double factor) => new(X * factor, Y * factor, Z * factor); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Vec3d Multiply(double x, double y, double z) => new(X * x, Y * y, Z * z); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public Vec3d Multiply(Vec3d other) => new(X * other.X, Y * other.Y, Z * other.Z); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public double LengthSqr() => X * X + Y * Y + Z * Z; - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public double Length() => Math.Sqrt(LengthSqr()); - - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public double HorizontalDistanceSqr() => X * X + Z * Z; - - public Vec3d Normalize() - { - double len = Length(); - return len < 1.0E-7 ? Zero : new Vec3d(X / len, Y / len, Z / len); - } - - /// - /// Get component by axis index: 0=X, 1=Y, 2=Z - /// - public double Get(int axis) => axis switch - { - 0 => X, - 1 => Y, - 2 => Z, - _ => throw new ArgumentOutOfRangeException(nameof(axis)) - }; - - /// - /// Return a new Vec3d with one axis replaced - /// - public Vec3d With(int axis, double value) => axis switch - { - 0 => new Vec3d(value, Y, Z), - 1 => new Vec3d(X, value, Z), - 2 => new Vec3d(X, Y, value), - _ => throw new ArgumentOutOfRangeException(nameof(axis)) - }; - - public bool Equals(Vec3d other) => - X == other.X && Y == other.Y && Z == other.Z; - - public override bool Equals(object? obj) => - obj is Vec3d other && Equals(other); - - public override int GetHashCode() => - HashCode.Combine(X, Y, Z); - - public override string ToString() => - $"({X:F4}, {Y:F4}, {Z:F4})"; - - public static bool operator ==(Vec3d a, Vec3d b) => a.Equals(b); - public static bool operator !=(Vec3d a, Vec3d b) => !a.Equals(b); - public static Vec3d operator +(Vec3d a, Vec3d b) => a.Add(b); - public static Vec3d operator -(Vec3d a, Vec3d b) => a.Subtract(b); - public static Vec3d operator *(Vec3d a, double s) => a.Scale(s); - public static Vec3d operator -(Vec3d a) => new(-a.X, -a.Y, -a.Z); - } -} diff --git a/MinecraftClient/Program.cs b/MinecraftClient/Program.cs deleted file mode 100644 index dcf5daaf2c..0000000000 --- a/MinecraftClient/Program.cs +++ /dev/null @@ -1,1406 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Runtime.InteropServices; -using System.Runtime.Loader; -using System.Text; -using System.Threading; -using System.Threading.Tasks; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Mapping.BlockPalettes; -using MinecraftClient.Mapping.EntityPalettes; -using MinecraftClient.Protocol; -using MinecraftClient.Protocol.Handlers.Forge; -using MinecraftClient.Protocol.ProfileKey; -using MinecraftClient.Protocol.Session; -using MinecraftClient.Scripting; -using MinecraftClient.WinAPI; -using Sentry; -using static MinecraftClient.Settings; -using static MinecraftClient.Settings.ConsoleConfigHealper.ConsoleConfig; -using static MinecraftClient.Settings.MainConfigHelper.MainConfig.AdvancedConfig; -using static MinecraftClient.Settings.MainConfigHelper.MainConfig.GeneralConfig; - -namespace MinecraftClient -{ - /// - /// Minecraft Console Client by the MCC Team (c) 2012-2022. - /// Allows to connect to any Minecraft server, send and receive text, automated scripts. - /// This source code is released under the CDDL 1.0 License. - /// - /// - /// Typical steps to update MCC for a new Minecraft version - /// - Implement protocol changes (see Protocol18.cs) - /// - Handle new block types and states (see Material.cs) - /// - Add support for new entity types (see EntityType.cs) - /// - Add new item types for inventories (see ItemType.cs) - /// - Mark new version as handled (see ProtocolHandler.cs) - /// - Update MCHighestVersion field below (for versionning) - /// - static class Program - { - private static McClient? client; - public static string[]? startupargs; - public static CultureInfo ActualCulture = CultureInfo.CurrentCulture; - - public const string Version = MCHighestVersion; - public const string MCLowestVersion = "1.4.6"; - public const string MCHighestVersion = "26.2"; - public static readonly string? BuildInfo = null; - - private static IDisposable? _sentrySdk = null; - private static bool useMcVersionOnce = false; - private static readonly RestartCoordinator restartCoordinator = new(ExecuteRestartAsync, ReportRestartFailure); - private static long connectionAttempt; - private static readonly AttemptOwnedRoute offlinePromptRoute = new(); - private static int exitOnFailurePending; - private static string settingsIniPath = "MinecraftClient.ini"; - private static AuthenticationSelection? pendingAuthenticationSelection; - - // [SENTRY] - // Setting this string to an empty string will disable Sentry - private const string SentryDSN = ""; - - /// - /// Snapshot of all state collected before the console backend is initialized. - /// Passed to once the backend is ready. - /// - internal sealed class StartupState - { - public Settings.ConfigLoadResult ConfigResult { get; init; } - public bool NewlyGenerated { get; init; } - public bool SentryEnabled { get; init; } - } - - /// - /// The main entry point of Minecraft Console Client - /// - static void Main(string[] args) - { - // [SENTRY] Initialize Sentry SDK only if the DSN is not empty - if (SentryDSN != string.Empty) - { - _sentrySdk = SentrySdk.Init(options => - { - options.Dsn = SentryDSN; - options.AutoSessionTracking = true; - options.IsGlobalModeEnabled = true; - options.TracesSampleRate = 1.0; - options.SendDefaultPii = false; - }); - - AppDomain.CurrentDomain.UnhandledException += (sender, eventArgs) => - { - SentrySdk.CaptureException((Exception)eventArgs.ExceptionObject); - }; - } - - Task.Run(() => - { - // "ToLower" require "CultureInfo" to be initialized on first run, which can take a lot of time. - _ = "a".ToLower(); - - //Take advantage of Windows 10 / Mac / Linux UTF-8 console - if (OperatingSystem.IsWindows()) - { - // If we're on windows, check if our version is Win10 or greater. - if (OperatingSystem.IsWindowsVersionAtLeast(10)) - Console.OutputEncoding = Console.InputEncoding = Encoding.UTF8; - } - else - { - // Apply to all other operating systems. - Console.OutputEncoding = Console.InputEncoding = Encoding.UTF8; - } - - // Fix issue #2119 - Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); - }); - - ConsoleIO.LogPrefix = "§8[MCC] "; - if (args.Length >= 1 && args[^1] == "BasicIO" || args.Length >= 1 && args[^1] == "BasicIO-NoColor") - { - if (args.Length >= 1 && args[^1] == "BasicIO-NoColor") - { - ConsoleIO.BasicIO_NoColor = true; - } - ConsoleIO.BasicIO = true; - args = args.Where(o => !Object.ReferenceEquals(o, args[^1])).ToArray(); - } - - //Debug input ? - if (args.Length == 1 && args[0] == "--keyboard-debug") - { - if (!ConsoleIO.BasicIO) - { - ConsoleIO.Backend = new ClassicConsoleBackend(); - ConsoleIO.Backend.Init(); - } - ConsoleIO.WriteLine("Keyboard debug mode: Press any key to display info"); - ConsoleIO.DebugReadInput(); - } - - // --- Load config as early as possible (no printing yet) --- - Settings.ConfigLoadResult configResult; - bool newlyGenerated = false; - - if (args.Length >= 1 && File.Exists(args[0]) && Settings.ToLowerIfNeed(Path.GetExtension(args[0])) == ".ini") - { - configResult = Settings.LoadFromFile(args[0]); - settingsIniPath = args[0]; - - List args_tmp = args.ToList(); - args_tmp.RemoveAt(0); - args = args_tmp.ToArray(); - } - else if (File.Exists("MinecraftClient.ini")) - { - configResult = Settings.LoadFromFile("MinecraftClient.ini"); - } - else - { - configResult = new Settings.ConfigLoadResult { Success = true, NeedWriteDefault = true }; - newlyGenerated = true; - } - - if (configResult.NeedWriteDefault) - Config.Main.Advanced.Language = Settings.GetDefaultGameLanguage(); - - if (!Config.Main.Advanced.EnableSentry) - _sentrySdk?.Dispose(); - - var startupState = new StartupState - { - ConfigResult = configResult, - NewlyGenerated = newlyGenerated, - SentryEnabled = SentryDSN != string.Empty, - }; - - // --- Determine console mode and initialize backend --- - if (!OperatingSystem.IsWindows()) - InstallCursesNativeResolver(); - - if (!ConsoleIO.BasicIO && Config.Console.General.ConsoleMode == ConsoleModeType.tui) - { - ConsoleIO.Backend?.Shutdown(); - try - { - var tuiBackend = new Tui.TuiConsoleBackend(); - ConsoleIO.Backend = tuiBackend; - tuiBackend.RunTuiMainLoop(args, startupState); - } - catch (Exception ex) - { - HandleTuiStartupFailure(ex); - } - return; - } - - // Classic mode: init backend, then print and process startup state. - if (!ConsoleIO.BasicIO) - { - ConsoleIO.Backend = new ClassicConsoleBackend(); - ConsoleIO.Backend.Init(); - - // Config deserialization triggers OnSettingUpdate before the backend - // exists, so console-specific settings (UseVT100ColorCode, colors, etc.) - // are never applied. Re-apply them now that the backend is ready. - Config.Console.OnSettingUpdate(); - } - - if (!ProcessStartupState(startupState)) - return; - - // Wait for this issue to be fixed before enabling it: https://github.com/Consolonia/Consolonia/issues/602 - // MaybePrintClassicModeTuiRecommendation(); - - RunStartupSequence(args); - } - - /// - /// Consolonia's Unix.Terminal uses [DllImport("libcoreclr.so")] to reach - /// dlopen/dlsym on .NET Core. The library ships a - /// SetDllImportResolver that maps libcoreclr.so to the current - /// process, but it is compiled under #if NET6_0 (exact TFM match) instead - /// of NET6_0_OR_GREATER, so it is dead code when the consuming project - /// targets net8.0+. On a self-contained single-file publish the physical - /// libcoreclr.so does not exist on the search path, causing a - /// DllNotFoundException that crashes the TUI. - /// - /// We work around this by registering our own resolver before any Consolonia - /// code runs: if any assembly asks for libcoreclr.so we return - /// (IntPtr)(-1) which the runtime interprets as "the current process". - /// - private static void InstallCursesNativeResolver() - { - AssemblyLoadContext.Default.ResolvingUnmanagedDll += (assembly, libraryName) => - libraryName == "libcoreclr.so" ? (IntPtr)(-1) : IntPtr.Zero; - } - - private static void HandleTuiStartupFailure(Exception exception) - { - Config.Console.General.ConsoleMode = ConsoleModeType.classic; - WriteBackSettings(enableBackup: false); - - ConsoleIO.Backend = new ClassicConsoleBackend(); - ConsoleIO.Backend.Init(); - Config.Console.OnSettingUpdate(); - - ConsoleIO.WriteLineFormatted("§c" + Translations.mcc_tui_startup_failed); - ConsoleIO.WriteLine(exception.ToString()); - ConsoleIO.WriteLineFormatted("§e" + Translations.mcc_report_issue); - ConsoleIO.WriteLineFormatted("§e" + Translations.mcc_tui_startup_fallback_classic); - } - - /// - /// Prints the application banner and processes the startup state collected before - /// the console backend was ready. Called once from classic mode or from TUI after - /// the view is initialized. - /// - /// True if startup can continue; false if config load failed and user chose to exit. - internal static bool ProcessStartupState(StartupState state) - { - if (Config.Console.General.Display_Icon_Banner && ConsoleIO.Backend is Tui.TuiConsoleBackend tuiBanner) - { - var view = tuiBanner.GetView(); - if (view is not null) - { - Avalonia.Threading.Dispatcher.UIThread.Post(() => - { - var panel = Tui.MccBannerPanelBuilder.Build(BuildInfo); - view.AppendControlToLog(panel); - }); - } - else - { - ShowClassicBanner(); - } - } - else - { - ShowClassicBanner(); - } - - var cfg = state.ConfigResult; - - if (cfg.NeedWriteDefault) - { - WriteBackSettings(false); - - if (cfg.IsLegacyUpgrade) - { - ConsoleIO.WriteLineFormatted("§c" + Translations.mcc_use_new_config); - ConsoleIO.WriteLineFormatted("§c" + string.Format(Translations.mcc_backup_old_config, cfg.LegacyBackupPath)); - } - - if (state.NewlyGenerated) - ConsoleIO.WriteLineFormatted("§c" + Translations.mcc_settings_generated); - - ConsoleIO.WriteLine(Translations.mcc_run_with_default_settings); - - if (state.SentryEnabled) - ConsoleIO.WriteLine(Translations.mcc_sentry_logging); - } - else if (!cfg.Success) - { - ConsoleIO.WriteLineFormatted("§c" + Translations.config_load_fail); - if (cfg.ErrorMessage is not null) - ConsoleIO.WriteLine(cfg.ErrorMessage); - HandleConfigLoadFailure(); - return false; - } - else - { - WriteBackSettings(true); - - if (!Config.Main.Advanced.Language.StartsWith("en")) - ConsoleIO.WriteLine(string.Format(Translations.mcc_help_us_translate, Settings.TranslationProjectUrl)); - } - - return true; - } - - private static void ShowClassicBanner() - { - ConsoleIO.WriteLine(string.Format(Translations.mcc_banner_classic, Version, MCLowestVersion, MCHighestVersion, "Github.com/MCCTeam")); - if (BuildInfo is not null) - ConsoleIO.WriteLineFormatted("§8" + BuildInfo); - if (Config.Main.Advanced.ShowGithubStarReminder) - ConsoleIO.WriteLineFormatted("§e" + Translations.mcc_banner_star_reminder); - } - - private static void MaybePrintClassicModeTuiRecommendation() - { - if (ConsoleIO.BasicIO - || Config.Console.General.ConsoleMode != ConsoleModeType.classic - || Console.IsInputRedirected) - { - return; - } - - char cmdChar = Config.Main.Advanced.InternalCmdChar.ToChar(); - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.mcc_console_mode_tui_recommendation, cmdChar)); - } - - /// - /// Handles a failed config load by prompting the user to fix or regenerate the config file. - /// - internal static void HandleConfigLoadFailure() - { - ConsoleIO.Backend?.StopReadThread(); - string command = " "; - while (command.Length > 0) - { - ConsoleIO.WriteLine(string.Empty); - ConsoleIO.WriteLineFormatted(string.Format(Translations.mcc_invaild_config, Config.Main.Advanced.InternalCmdChar.ToLogString())); - if (ConsoleIO.Backend is Tui.TuiConsoleBackend) - ConsoleIO.WriteLineFormatted(string.Format(Translations.mcc_use_quit_to_exit, Config.Main.Advanced.InternalCmdChar.ToLogString())); - else - ConsoleIO.WriteLineFormatted(Translations.mcc_press_exit, acceptnewlines: true); - command = ConsoleIO.ReadLine().Trim(); - if (command.Length > 0) - { - if (Config.Main.Advanced.InternalCmdChar.ToChar() != ' ' - && command[0] == Config.Main.Advanced.InternalCmdChar.ToChar()) - command = command[1..]; - - if (command.StartsWith("exit") || command.StartsWith("quit")) - { - return; - } - else if (command.StartsWith("new")) - { - Config.Main.Advanced.Language = Settings.GetDefaultGameLanguage(); - WriteBackSettings(true); - ConsoleIO.WriteLineFormatted(string.Format(Translations.mcc_gen_new_config, settingsIniPath)); - return; - } - } - else - { - return; - } - } - } - - /// - /// Runs the main startup sequence: CLI argument processing, auth, and connection. - /// Called from Main() for classic/basic mode, or from TuiConsoleBackend on a - /// background thread after the Avalonia UI loop has started. - /// - internal static void RunStartupSequence(string[] args) - { - //Other command-line arguments - if (args.Length >= 1) - { - if (args.Contains("--help")) - { - Console.WriteLine("Command-Line Help:"); - Console.WriteLine("MinecraftClient.exe "); - Console.WriteLine("MinecraftClient.exe \"/mycommand\""); - Console.WriteLine("MinecraftClient.exe --setting=value [--other settings]"); - Console.WriteLine("MinecraftClient.exe --section.setting=value [--other settings]"); - Console.WriteLine("MinecraftClient.exe [--other settings]"); - return; - } - - if (args.Contains("--upgrade")) - { - UpgradeHelper.HandleBlockingUpdate(forceUpgrade: false); - return; - } - - if (args.Contains("--force-upgrade")) - { - UpgradeHelper.HandleBlockingUpdate(forceUpgrade: true); - return; - } - - if (args.Contains("--generate")) - { - string dataGenerator = ""; - string dataPath = ""; - - foreach (string argument in args) - { - if (argument.StartsWith("--") && !argument.Contains("--generate")) - { - if (!argument.Contains('=')) - throw new ArgumentException(string.Format(Translations.error_setting_argument_syntax, argument)); - - string[] argParts = argument[2..].Split('='); - string argName = argParts[0].Trim(); - string argValue = argParts[1].Replace("\"", "").Trim(); - - if (argName == "data-path") - { - Console.WriteLine(dataPath); - dataPath = argValue; - } - - if (argName == "data-generator") - { - dataGenerator = argValue; - } - } - } - - if (string.IsNullOrEmpty(dataGenerator) || !(Settings.ToLowerIfNeed(dataGenerator).Equals("entity") || Settings.ToLowerIfNeed(dataGenerator).Equals("item") || Settings.ToLowerIfNeed(dataGenerator).Equals("block"))) - { - Console.WriteLine(Translations.error_generator_invalid); - Console.WriteLine(Translations.error_usage + " MinecraftClient.exe --data-generator= --data-path=\"\""); - return; - } - - if (string.IsNullOrEmpty(dataPath)) - { - Console.WriteLine(string.Format(Translations.error_missing_argument, "--data-path")); - Console.WriteLine(Translations.error_usage + " MinecraftClient.exe --data-generator= --data-path=\"\""); - return; - } - - if (!File.Exists(dataPath)) - { - Console.WriteLine(string.Format(Translations.error_generator_path, dataPath)); - return; - } - - if (!dataPath.EndsWith(".json")) - { - Console.WriteLine(string.Format(Translations.error_generator_json, dataPath)); - return; - } - - Console.WriteLine(string.Format(Translations.mcc_generator_generating, dataGenerator, dataPath)); - - switch (dataGenerator) - { - case "entity": - EntityPaletteGenerator.GenerateEntityTypes(dataPath); - break; - - case "item": - ItemPaletteGenerator.GenerateItemType(dataPath); - break; - - case "block": - BlockPaletteGenerator.GenerateBlockPalette(dataPath); - break; - } - - Console.WriteLine(string.Format(Translations.mcc_generator_done, dataGenerator, dataPath)); - return; - } - } - - if (OperatingSystem.IsWindows() && !string.IsNullOrWhiteSpace(Config.Main.Advanced.ConsoleTitle)) - { - InternalConfig.Username = "New Window"; - Console.Title = Config.AppVar.ExpandVars(Config.Main.Advanced.ConsoleTitle); - } - - // Check for updates - UpgradeHelper.CheckUpdate(); - - // Load command-line arguments - if (args.Length >= 1) - { - try - { - Settings.LoadArguments(args); - } - catch (ArgumentException e) - { - InternalConfig.InteractiveMode = false; - HandleFailure(e.Message); - return; - } - } - - //Test line to troubleshoot invisible colors - if (Config.Logging.DebugMessages) - { - ConsoleIO.WriteLineFormatted(string.Format(Translations.debug_color_test, "[0123456789ABCDEF]: (4bit)[§00§11§22§33§44§55§66§77§88§99§aA§bB§cC§dD§eE§fF§r]")); - Random random = new(); - { // Test 8 bit color - StringBuilder sb = new(); - sb.Append("[0123456789]: (vt100 8bit)["); - for (int i = 0; i < 10; ++i) - { - sb.Append(ColorHelper.GetColorEscapeCode((byte)random.Next(255), - (byte)random.Next(255), - (byte)random.Next(255), - true, - ConsoleColorModeType.vt100_8bit)).Append(i); - } - sb.Append(ColorHelper.GetResetEscapeCode()).Append(']'); - ConsoleIO.WriteLine(string.Format(Translations.debug_color_test, sb)); - } - { // Test 24 bit color - StringBuilder sb = new(); - sb.Append("[0123456789]: (vt100 24bit)["); - for (int i = 0; i < 10; ++i) - { - sb.Append(ColorHelper.GetColorEscapeCode((byte)random.Next(255), - (byte)random.Next(255), - (byte)random.Next(255), - true, - ConsoleColorModeType.vt100_24bit)).Append(i); - } - sb.Append(ColorHelper.GetResetEscapeCode()).Append(']'); - ConsoleIO.WriteLine(string.Format(Translations.debug_color_test, sb)); - } - } - - //Load cached sessions from disk if necessary - if (Config.Main.Advanced.SessionCache == CacheType.disk) - { - bool cacheLoaded = SessionCache.InitializeDiskCache(); - if (Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8" + (cacheLoaded ? Translations.debug_session_cache_ok : Translations.debug_session_cache_fail), acceptnewlines: true); - } - - // Setup exit cleaning code - ExitCleanUp.Add(() => { DoExit(); }); - - if (HasNoConfiguredLoginDetails()) - { - if (!PromptForAuthenticationSelection()) - return; - } - - //Asking the user to type in missing data such as Username and Password - bool useBrowser = Config.Main.General.AccountType == LoginType.microsoft && Config.Main.General.Method == LoginMethod.browser; - bool useDeviceCode = Config.Main.General.AccountType == LoginType.microsoft && Config.Main.General.Method == LoginMethod.mcc; - bool skipPassword = useBrowser || useDeviceCode; - if (string.IsNullOrWhiteSpace(InternalConfig.Account.Login) && !skipPassword) - { - if (!RequestLogin()) - { - HandleFailure(Translations.error_login_blocked, false, ChatBot.DisconnectReason.LoginRejected); - return; - } - } - InternalConfig.Username = InternalConfig.Account.Login; - if (string.IsNullOrWhiteSpace(InternalConfig.Account.Password) && !skipPassword && - (Config.Main.Advanced.SessionCache == CacheType.none || !SessionCache.Contains(ToLowerIfNeed(InternalConfig.Account.Login)))) - { - RequestPassword(); - } - - startupargs = args; - InitializeClient(); - } - - /// - /// Reduest user to submit password. - /// - private static void RequestPassword() - { - ConsoleIO.WriteLine(ConsoleIO.BasicIO ? string.Format(Translations.mcc_password_basic_io, InternalConfig.Account.Login) + "\n" : Translations.mcc_password_hidden); - string? password = ConsoleIO.BasicIO ? Console.ReadLine() : ConsoleIO.ReadPassword(); - if (string.IsNullOrWhiteSpace(password)) - InternalConfig.Account.Password = "-"; - else - InternalConfig.Account.Password = password; - } - - private static bool HasNoConfiguredLoginDetails() - => string.IsNullOrWhiteSpace(InternalConfig.Account.Login) - && string.IsNullOrWhiteSpace(InternalConfig.Account.Password); - - private static bool PromptForAuthenticationSelection() - { - while (true) - { - ConsoleIO.WriteLine(Translations.mcc_auth_method_prompt); - string selection = ConsoleIO.ReadLine().Trim(); - - switch (selection.ToLowerInvariant()) - { - case "1": - case "offline": - BeginAuthenticationSelection(LoginType.mojang, LoginMethod.mcc); - if (!RequestLogin()) - { - DiscardAuthenticationSelection(); - HandleFailure(Translations.error_login_blocked, false, ChatBot.DisconnectReason.LoginRejected); - return false; - } - - InternalConfig.Account.Password = "-"; - return true; - - case "2": - case "online": - case "microsoft": - BeginAuthenticationSelection(LoginType.microsoft, LoginMethod.mcc); - return true; - - case "3": - case "yggdrasil": - BeginAuthenticationSelection(LoginType.yggdrasil, LoginMethod.mcc); - if (!RequestLogin() || !RequestRequiredPassword()) - { - DiscardAuthenticationSelection(); - HandleFailure(Translations.error_login_blocked, false, ChatBot.DisconnectReason.LoginRejected); - return false; - } - - if (!RequestAuthlibServer()) - { - DiscardAuthenticationSelection(); - return false; - } - - return true; - - default: - ConsoleIO.WriteLine(Translations.mcc_auth_method_invalid); - break; - } - } - } - - private static void BeginAuthenticationSelection(LoginType accountType, LoginMethod method) - { - pendingAuthenticationSelection ??= new AuthenticationSelection( - Config.Main.General.AccountType, - Config.Main.General.Method, - Config.Main.General.AuthServerUrl); - - Config.Main.General.AccountType = accountType; - Config.Main.General.Method = method; - } - - private static bool RequestLogin() - { - ConsoleIO.WriteLine(ConsoleIO.BasicIO ? Translations.mcc_login_basic_io : Translations.mcc_login); - InternalConfig.Account.Login = ConsoleIO.ReadLine().Trim(); - return !string.IsNullOrWhiteSpace(InternalConfig.Account.Login); - } - - private static bool RequestRequiredPassword() - { - ConsoleIO.WriteLine(ConsoleIO.BasicIO ? string.Format(Translations.mcc_password_basic_io, InternalConfig.Account.Login) + "\n" : Translations.mcc_password_hidden); - string? password = ConsoleIO.BasicIO ? Console.ReadLine() : ConsoleIO.ReadPassword(); - if (string.IsNullOrWhiteSpace(password)) - return false; - - InternalConfig.Account.Password = password; - return true; - } - - private static bool RequestAuthlibServer() - { - while (true) - { - ConsoleIO.WriteLine(Translations.mcc_yggdrasil_url); - string authServerUrl = ConsoleIO.ReadLine().Trim(); - if (!Config.Main.General.TrySetAuthServerUrl(authServerUrl) - || !Config.Main.General.TryGetAuthServerUri(out Uri? authServerUri)) - { - ConsoleIO.WriteLine(Translations.mcc_yggdrasil_invalid_url); - continue; - } - - switch (ProtocolHandler.ValidateAuthlibServer(authServerUri)) - { - case ProtocolHandler.AuthlibServerValidationResult.Valid: - return true; - case ProtocolHandler.AuthlibServerValidationResult.Unreachable: - ConsoleIO.WriteLine(Translations.mcc_yggdrasil_server_unreachable); - break; - default: - ConsoleIO.WriteLine(Translations.mcc_yggdrasil_server_invalid); - break; - } - } - } - - private static void PersistAuthenticationSelection(SessionToken session) - { - if (pendingAuthenticationSelection is null) - return; - - if (string.IsNullOrWhiteSpace(InternalConfig.Account.Login)) - InternalConfig.Account.Login = session.PlayerName; - - Config.Main.General.Account = InternalConfig.Account; - WriteBackSettings(); - pendingAuthenticationSelection = null; - } - - private static void DiscardAuthenticationSelection() - { - if (pendingAuthenticationSelection is not AuthenticationSelection selection) - return; - - Config.Main.General.AccountType = selection.AccountType; - Config.Main.General.Method = selection.Method; - Config.Main.General.AuthServerUrl = selection.AuthServerUrl; - pendingAuthenticationSelection = null; - } - - private sealed record AuthenticationSelection(LoginType AccountType, LoginMethod Method, string AuthServerUrl); - - internal static long CurrentConnectionAttempt => Volatile.Read(ref connectionAttempt); - - /// - /// Start a new Client - /// - private static void InitializeClient() - { - long attempt = Interlocked.Increment(ref connectionAttempt); - - // Ensure that we use the provided Minecraft version if we can't connect automatically. - // - // useMcVersionOnce is set to true on HandleFailure() - // whenever we are unable to connect to the server and the user provides a version number. - if (!useMcVersionOnce) - InternalConfig.MinecraftVersion = Config.Main.Advanced.MinecraftVersion; - - SessionToken session = new(); - PlayerKeyPair? playerKeyPair = null; - - ProtocolHandler.LoginResult result = ProtocolHandler.LoginResult.LoginRequired; - - string loginLower = ToLowerIfNeed(InternalConfig.Account.Login); - if (InternalConfig.Account.Password == "-") - { - ConsoleIO.WriteLineFormatted("§8" + Translations.mcc_offline, acceptnewlines: true); - result = ProtocolHandler.LoginResult.Success; - session.PlayerID = "0"; - session.PlayerName = InternalConfig.Account.Login; - } - else - { - // Validate cached session or login new session. - if (Config.Main.Advanced.SessionCache != CacheType.none && SessionCache.Contains(loginLower) && Config.Main.General.AccountType != LoginType.yggdrasil) - { - session = SessionCache.Get(loginLower); - result = ProtocolHandler.GetTokenValidation(session); - if (result != ProtocolHandler.LoginResult.Success) - { - ConsoleIO.WriteLineFormatted("§8" + Translations.mcc_session_invalid, acceptnewlines: true); - // Try to refresh access token - if (!string.IsNullOrWhiteSpace(session.RefreshToken)) - { - try - { - result = ProtocolHandler.MicrosoftLoginRefresh(session.RefreshToken, out session); - } - catch (Exception ex) - { - ConsoleIO.WriteLine("Refresh access token fail: " + ex.Message); - result = ProtocolHandler.LoginResult.InvalidResponse; - } - } - - if (result != ProtocolHandler.LoginResult.Success - && string.IsNullOrWhiteSpace(InternalConfig.Account.Password) - && !(Config.Main.General.AccountType == LoginType.microsoft)) - RequestPassword(); - } - else ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.mcc_session_valid, session.PlayerName)); - } - - if (result != ProtocolHandler.LoginResult.Success) - { - ConsoleIO.WriteLine(string.Format(Translations.mcc_connecting, Config.Main.General.AccountType == LoginType.mojang ? "Minecraft.net" : (Config.Main.General.AccountType == LoginType.microsoft ? "Microsoft" : Config.Main.General.AuthServerUrl))); - result = ProtocolHandler.GetLogin(InternalConfig.Account.Login, InternalConfig.Account.Password, Config.Main.General.AccountType, out session); - } - - if (result == ProtocolHandler.LoginResult.Success) - { - PersistAuthenticationSelection(session); - loginLower = ToLowerIfNeed(InternalConfig.Account.Login); - - if (Config.Main.Advanced.SessionCache != CacheType.none) - SessionCache.Store(loginLower, session); - } - - if (result == ProtocolHandler.LoginResult.Success) - session.SessionPreCheckTask = Task.Factory.StartNew(() => session.SessionPreCheck(Config.Main.General.AccountType)); - } - - if (result == ProtocolHandler.LoginResult.Success) - PersistAuthenticationSelection(session); - - if (result == ProtocolHandler.LoginResult.Success) - { - InternalConfig.Username = session.PlayerName; - bool isRealms = false; - - if (OperatingSystem.IsWindows() && !string.IsNullOrWhiteSpace(Config.Main.Advanced.ConsoleTitle)) - Console.Title = Config.AppVar.ExpandVars(Config.Main.Advanced.ConsoleTitle); - - if (Config.Main.Advanced.PlayerHeadAsIcon && OperatingSystem.IsWindows()) - ConsoleIcon.SetPlayerIconAsync(InternalConfig.Username); - - if (Config.Logging.DebugMessages) - ConsoleIO.WriteLine(string.Format(Translations.debug_session_id, session.ID)); - - List availableWorlds = new(); - if (Config.Main.Advanced.MinecraftRealms && !String.IsNullOrEmpty(session.ID)) - availableWorlds = ProtocolHandler.RealmsListWorlds(InternalConfig.Username, session.PlayerID, session.ID); - - if (InternalConfig.ServerIP == string.Empty) - { - ConsoleIO.WriteLine(Translations.mcc_ip); - string addressInput = ConsoleIO.ReadLine(); - if (addressInput.StartsWith("realms:")) - { - if (Config.Main.Advanced.MinecraftRealms) - { - if (availableWorlds.Count == 0) - { - HandleFailure(Translations.error_realms_access_denied, false, ChatBot.DisconnectReason.LoginRejected); - return; - } - string worldId = addressInput.Split(':')[1]; - if (!availableWorlds.Contains(worldId) && int.TryParse(worldId, NumberStyles.Any, CultureInfo.CurrentCulture, out int worldIndex) && worldIndex < availableWorlds.Count) - worldId = availableWorlds[worldIndex]; - if (availableWorlds.Contains(worldId)) - { - string realmsAddress = ProtocolHandler.GetRealmsWorldServerAddress(worldId, InternalConfig.Username, session.PlayerID, session.ID); - if (realmsAddress != "") - { - addressInput = realmsAddress; - isRealms = true; - InternalConfig.MinecraftVersion = MCHighestVersion; - } - else - { - HandleFailure(Translations.error_realms_server_unavailable, false, ChatBot.DisconnectReason.LoginRejected); - return; - } - } - else - { - HandleFailure(Translations.error_realms_server_id, false, ChatBot.DisconnectReason.LoginRejected); - return; - } - } - else - { - HandleFailure(Translations.error_realms_disabled); - return; - } - } - Config.Main.SetServerIP(new MainConfigHelper.MainConfig.ServerInfoConfig(addressInput), true); - } - - ConsoleInputRouter.EnsureStarted(); - - //Get server version - int protocolversion = 0; - ForgeInfo? forgeInfo = null; - - if (InternalConfig.MinecraftVersion != "" && Settings.ToLowerIfNeed(InternalConfig.MinecraftVersion) != "auto") - { - protocolversion = ProtocolHandler.MCVer2ProtocolVersion(InternalConfig.MinecraftVersion); - - if (protocolversion != 0) - ConsoleIO.WriteLineFormatted(string.Format(Translations.mcc_use_version, InternalConfig.MinecraftVersion, protocolversion)); - else - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.mcc_unknown_version, InternalConfig.MinecraftVersion)); - - if (useMcVersionOnce) - { - useMcVersionOnce = false; - InternalConfig.MinecraftVersion = ""; - } - } - - //Retrieve server info if version is not manually set OR if need to retrieve Forge information - if (!isRealms && (protocolversion == 0 || (Config.Main.Advanced.EnableForge == ForgeConfigType.auto) || - ((Config.Main.Advanced.EnableForge == ForgeConfigType.force) && !ProtocolHandler.ProtocolMayForceForge(protocolversion)))) - { - if (protocolversion != 0) - ConsoleIO.WriteLine(Translations.mcc_forge); - else - ConsoleIO.WriteLine(Translations.mcc_retrieve); - if (!ProtocolHandler.GetServerInfo(InternalConfig.ServerIP, InternalConfig.ServerPort, ref protocolversion, ref forgeInfo)) - { - HandleFailure(Translations.error_ping, true, ChatBot.DisconnectReason.ConnectionLost); - return; - } - } - - if ((Config.Main.General.AccountType == LoginType.microsoft || Config.Main.General.AccountType == LoginType.yggdrasil) - && InternalConfig.Account.Password != "-" - && Config.Signature.LoginWithSecureProfile - && protocolversion >= 759 /* 1.19 and above */ - && !string.IsNullOrWhiteSpace(session.ID)) - { - // Load cached profile key from disk if necessary - if (Config.Main.Advanced.ProfileKeyCache == CacheType.disk) - { - bool cacheKeyLoaded = KeysCache.InitializeDiskCache(); - if (Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8" + (cacheKeyLoaded ? Translations.debug_keys_cache_ok : Translations.debug_keys_cache_fail), acceptnewlines: true); - } - - if (Config.Main.Advanced.ProfileKeyCache != CacheType.none && KeysCache.Contains(loginLower)) - { - playerKeyPair = KeysCache.Get(loginLower); - if (playerKeyPair.NeedRefresh()) - ConsoleIO.WriteLineFormatted("§8" + Translations.mcc_profile_key_invalid, acceptnewlines: true); - else - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.mcc_profile_key_valid, session.PlayerName)); - } - - if (playerKeyPair is null || playerKeyPair.NeedRefresh()) - { - ConsoleIO.WriteLineFormatted(Translations.mcc_fetching_key, acceptnewlines: true); - playerKeyPair = KeyUtils.GetNewProfileKeys(session.ID, Config.Main.General.AccountType == LoginType.yggdrasil); - if (Config.Main.Advanced.ProfileKeyCache != CacheType.none && playerKeyPair is not null) - { - KeysCache.Store(loginLower, playerKeyPair); - } - } - } - - //Force-enable Forge support? - if (!isRealms && (Config.Main.Advanced.EnableForge == ForgeConfigType.force) && forgeInfo is null) - { - if (ProtocolHandler.ProtocolMayForceForge(protocolversion)) - { - ConsoleIO.WriteLine(Translations.mcc_forgeforce); - forgeInfo = ProtocolHandler.ProtocolForceForge(protocolversion); - } - else - { - HandleFailure(Translations.error_forgeforce, true, ChatBot.DisconnectReason.ConnectionLost); - return; - } - } - - //Proceed to server login - if (protocolversion != 0) - { - try - { - //Start the main TCP client - client = new McClient(session, playerKeyPair, InternalConfig.ServerIP, InternalConfig.ServerPort, protocolversion, forgeInfo, attempt); - - //Update console title - if (OperatingSystem.IsWindows() && !string.IsNullOrWhiteSpace(Config.Main.Advanced.ConsoleTitle)) - Console.Title = Config.AppVar.ExpandVars(Config.Main.Advanced.ConsoleTitle); - } - catch (NotSupportedException) - { - HandleFailure(Translations.error_unsupported, true); - } - catch (NotImplementedException) - { - throw; - } - catch (Exception e) - { - // [SENTRY] - SentrySdk.CaptureException(e); - - ConsoleIO.WriteLine(e.Message); - ConsoleIO.WriteLine(e.StackTrace ?? ""); - HandleFailure(); // Other error - } - } - else HandleFailure(Translations.error_determine, true); - } - else - { - DiscardAuthenticationSelection(); - string failureMessage = Translations.error_login; - string failureReason = result switch - { -#pragma warning disable format // @formatter:off - ProtocolHandler.LoginResult.AccountMigrated => Translations.error_login_migrated, - ProtocolHandler.LoginResult.ServiceUnavailable => Translations.error_login_server, - ProtocolHandler.LoginResult.WrongPassword => Translations.error_login_blocked, - ProtocolHandler.LoginResult.InvalidResponse => Translations.error_login_response, - ProtocolHandler.LoginResult.NotPremium => Translations.error_login_premium, - ProtocolHandler.LoginResult.OtherError => Translations.error_login_network, - ProtocolHandler.LoginResult.SSLError => Translations.error_login_ssl, - ProtocolHandler.LoginResult.UserCancel => Translations.error_login_cancel, - ProtocolHandler.LoginResult.WrongSelection => Translations.error_login_blocked, - _ => Translations.error_login_unknown, -#pragma warning restore format // @formatter:on - }; - failureMessage += failureReason; - HandleFailure(failureMessage, false, ChatBot.DisconnectReason.LoginRejected); - } - } - - /// - /// Reloads settings - /// - public static void ReloadSettings(bool keepAccountAndServerSettings = false) - { - var result = Settings.LoadFromFile(settingsIniPath, keepAccountAndServerSettings); - if (result.Success) - ConsoleIO.WriteLine(string.Format(Translations.config_load, settingsIniPath)); - } - - /// - /// Write-back settings - /// - public static void WriteBackSettings(bool enableBackup = true) - { - Settings.WriteToFile(settingsIniPath, enableBackup); - } - - /// - /// Disconnect the current client from the server and restart it - /// - /// Optional delay, in seconds, before restarting - /// Optional, keep account and server settings - public static void Restart(int delaySeconds = 0, bool keepAccountAndServerSettings = false) - { - TryRestart(TimeSpan.FromSeconds(Math.Max(0, delaySeconds)), keepAccountAndServerSettings); - } - - internal static bool HasRestartPending(long sourceConnectionAttempt) - { - return restartCoordinator.HasScheduledRestart(sourceConnectionAttempt); - } - - internal static RestartSettingsSnapshot CaptureRestartSettings() - { - return new RestartSettingsSnapshot(InternalConfig.Account, InternalConfig.ServerIP, InternalConfig.ServerPort); - } - - internal static void RestoreRestartSettings(RestartSettingsSnapshot settingsSnapshot) - { - InternalConfig.Account = settingsSnapshot.Account; - InternalConfig.ServerIP = settingsSnapshot.ServerIP; - InternalConfig.ServerPort = settingsSnapshot.ServerPort; - } - - internal static bool TryRestart(int delaySeconds = 0, bool keepAccountAndServerSettings = false) - { - return TryRestart(TimeSpan.FromSeconds(Math.Max(0, delaySeconds)), keepAccountAndServerSettings); - } - - internal static bool TryRestart(TimeSpan delay, bool keepAccountAndServerSettings = false) - { - return TryRestart(CurrentConnectionAttempt, delay, keepAccountAndServerSettings); - } - - internal static bool TryRestart( - long sourceConnectionAttempt, - TimeSpan delay, - bool keepAccountAndServerSettings = false, - bool replaceUntilCommit = false, - Task? sourceCleanupCompletion = null) - { - if (Volatile.Read(ref exitOnFailurePending) != 0) - return false; - - if (sourceConnectionAttempt != CurrentConnectionAttempt) - return false; - - if (delay < TimeSpan.Zero) - delay = TimeSpan.Zero; - - RestartSettingsSnapshot? settingsSnapshot = keepAccountAndServerSettings - ? CaptureRestartSettings() - : null; - - bool scheduled = restartCoordinator.TrySchedule( - new RestartRequest( - sourceConnectionAttempt, - delay, - keepAccountAndServerSettings, - settingsSnapshot, - replaceUntilCommit, - sourceCleanupCompletion), - () => BeginOfflinePrompt(sourceConnectionAttempt)); - return scheduled; - } - - private static async Task ExecuteRestartAsync(RestartRequest request, CancellationToken cancellationToken) - { - if (request.ConnectionAttempt != CurrentConnectionAttempt) - return; - - McClient? disconnectedClient = client; - if (disconnectedClient is not null) - { - disconnectedClient.Disconnect(); - if (ReferenceEquals(client, disconnectedClient)) - client = null; - } - - ConsoleIO.Reset(); - - if (request.Delay > TimeSpan.Zero) - { - ConsoleIO.WriteLine(string.Format(Translations.mcc_restart_delay, request.Delay.TotalSeconds)); - await Task.Delay(request.Delay, TimeProvider.System, cancellationToken).ConfigureAwait(false); - } - - cancellationToken.ThrowIfCancellationRequested(); - if (request.ConnectionAttempt != CurrentConnectionAttempt - || !restartCoordinator.TryBeginCommit(request, out RestartRequest latestRequest) - || latestRequest.ConnectionAttempt != CurrentConnectionAttempt) - { - return; - } - - ConsoleIO.WriteLine(Translations.mcc_restart); - ReloadSettings(latestRequest.KeepAccountAndServerSettings); - if (latestRequest.SettingsSnapshot is RestartSettingsSnapshot settingsSnapshot) - { - InternalConfig.Account = settingsSnapshot.Account; - InternalConfig.ServerIP = settingsSnapshot.ServerIP; - InternalConfig.ServerPort = settingsSnapshot.ServerPort; - } - TransferOfflinePrompt(latestRequest.ConnectionAttempt, latestRequest.ConnectionAttempt + 1); - InitializeClient(); - } - - private static void ReportRestartFailure(Exception exception) - { - SentrySdk.CaptureException(exception); - ConsoleIO.WriteLine(exception.ToString()); - HandleFailure(); - } - - /// - /// Marks the current failure as terminal when MCC is running under an external supervisor. - /// Further restart requests are rejected so disconnect cleanup cannot revive the process. - /// - internal static bool PrepareExitOnFailure() - { - if (InternalConfig.InteractiveMode) - return false; - - Interlocked.Exchange(ref exitOnFailurePending, 1); - restartCoordinator.Stop(); - return true; - } - - public static void DoExit(int exitcode = 0) - { - WriteBackSettings(); - ConsoleIO.WriteLineFormatted("§a" + string.Format(Translations.config_saving, settingsIniPath)); - - restartCoordinator.Stop(); - if (client is not null) { client.Disconnect(); ConsoleIO.Reset(); } - EndOfflinePrompt(); - ConsoleInputRouter.ShutdownRouter(); - if (Config.Main.Advanced.PlayerHeadAsIcon && OperatingSystem.IsWindows()) { ConsoleIcon.RevertToMCCIcon(); } - ConsoleIO.Backend?.Shutdown(); - Environment.Exit(exitcode); - } - - /// - /// Disconnect the current client from the server and exit the app - /// - public static void Exit(int exitcode = 0) - { - new Thread(() => { DoExit(exitcode); }).Start(); - } - - /// - /// Handle fatal errors such as ping failure, login failure, server disconnection, and so on. - /// Allows AutoRelog to perform on fatal errors, prompt for server version, and offline commands. - /// - /// Error message to display and optionally pass to AutoRelog bot - /// Specify if the error is related to an incompatible or unkown server version - /// If set, the error message will be processed by the AutoRelog bot - public static void HandleFailure(string? errorMessage = null, bool versionError = false, ChatBot.DisconnectReason? disconnectReason = null) - { - bool autoRelogHandled = false; - - if (!string.IsNullOrEmpty(errorMessage)) - { - ConsoleIO.Reset(); - if (!ConsoleInputRouter.IsStarted && ConsoleIO.Backend is not Tui.TuiConsoleBackend) - { - try - { - while (Console.KeyAvailable) - Console.ReadKey(true); - } - catch { } - } - ConsoleIO.WriteLine(errorMessage); - } - - if (PrepareExitOnFailure()) - { - Exit(GetFailureExitCode(disconnectReason)); - return; - } - - if (!string.IsNullOrEmpty(errorMessage) && disconnectReason.HasValue) - { - autoRelogHandled = true; - if (ChatBots.AutoRelog.OnDisconnectStatic(disconnectReason.Value, errorMessage, CurrentConnectionAttempt)) - return; - } - - if (InternalConfig.InteractiveMode) - { - if (versionError) - { - ConsoleIO.WriteLine(Translations.mcc_server_version); - InternalConfig.MinecraftVersion = ConsoleIO.ReadLine(); - if (InternalConfig.MinecraftVersion != "") - { - useMcVersionOnce = true; - Restart(0, true); - return; - } - } - - if (!autoRelogHandled && disconnectReason.HasValue) - { - if (ChatBots.AutoRelog.OnDisconnectStatic(disconnectReason.Value, errorMessage!, CurrentConnectionAttempt)) - return; - } - - BeginOfflinePrompt(CurrentConnectionAttempt); - } - } - - private static bool BeginOfflinePrompt(long connectionAttempt) - { - long currentConnectionAttempt = CurrentConnectionAttempt; - if (connectionAttempt != currentConnectionAttempt) - return false; - - if (offlinePromptRoute.TryActivate(connectionAttempt, currentConnectionAttempt, () => - { - ConsoleInputRouter.RouteOffline(HandleOfflineCommand); - ConsoleIO.WriteLine(string.Empty); - ConsoleIO.WriteLineFormatted(string.Format(Translations.mcc_disconnected, Config.Main.Advanced.InternalCmdChar.ToLogString())); - if (ConsoleIO.Backend is Tui.TuiConsoleBackend) - ConsoleIO.WriteLineFormatted(string.Format(Translations.mcc_use_quit_to_exit, Config.Main.Advanced.InternalCmdChar.ToLogString())); - else - ConsoleIO.WriteLineFormatted(Translations.mcc_press_exit, acceptnewlines: true); - })) - { - return true; - } - - return offlinePromptRoute.OwnerAttempt == connectionAttempt; - } - - private static void EndOfflinePrompt() - { - offlinePromptRoute.TryDeactivate(() => - { - ConsoleInputRouter.ClearOfflineRoute(HandleOfflineCommand); - ConsoleIO.Reset(); - }); - } - - internal static void EndOfflinePrompt(long connectionAttempt) - { - offlinePromptRoute.TryDeactivate(connectionAttempt, () => - { - ConsoleInputRouter.ClearOfflineRoute(HandleOfflineCommand); - ConsoleIO.Reset(); - }); - } - - private static void TransferOfflinePrompt(long sourceConnectionAttempt, long targetConnectionAttempt) - { - offlinePromptRoute.TryTransfer(sourceConnectionAttempt, targetConnectionAttempt); - } - - private static void HandleOfflineCommand(string input) - { - string command = input.Trim(); - if (command.Length == 0) - { - if (ConsoleIO.Backend is not Tui.TuiConsoleBackend) - Commands.Exit.DoExit(Config.AppVar.ExpandVars(command)); - return; - } - - if (Config.Main.Advanced.InternalCmdChar.ToChar() != ' ' - && command[0] == Config.Main.Advanced.InternalCmdChar.ToChar()) - { - command = command[1..]; - } - - string message = string.Empty; - if (command.StartsWith("reco", StringComparison.Ordinal)) - { - message = Commands.Reco.DoReconnect(Config.AppVar.ExpandVars(command)); - if (message.Length == 0) - return; - } - else if (command.StartsWith("connect", StringComparison.Ordinal)) - { - message = Commands.Connect.DoConnect(Config.AppVar.ExpandVars(command)); - if (message.Length == 0) - return; - } - else if (command.StartsWith("exit", StringComparison.Ordinal) - || command.StartsWith("quit", StringComparison.Ordinal)) - { - message = Commands.Exit.DoExit(Config.AppVar.ExpandVars(command)); - } - else if (command.StartsWith("help", StringComparison.Ordinal)) - { - ConsoleIO.WriteLineFormatted("§8MCC: " + - Config.Main.Advanced.InternalCmdChar.ToLogString() + - new Commands.Reco().GetCmdDescTranslated()); - ConsoleIO.WriteLineFormatted("§8MCC: " + - Config.Main.Advanced.InternalCmdChar.ToLogString() + - new Commands.Connect().GetCmdDescTranslated()); - } - else - { - ConsoleIO.WriteLineFormatted(string.Format(Translations.icmd_unknown, command.Split(' ')[0])); - } - - if (message.Length != 0) - ConsoleIO.WriteLineFormatted("§8MCC: " + message); - } - - private static int GetFailureExitCode(ChatBot.DisconnectReason? disconnectReason) - { - return disconnectReason switch - { - ChatBot.DisconnectReason.InGameKick => 2, - ChatBot.DisconnectReason.ConnectionLost => 3, - ChatBot.DisconnectReason.LoginRejected => 4, - _ => 1, - }; - } - - /// - /// Enumerate types in namespace through reflection - /// - /// Namespace to process - /// Assembly to use. Default is Assembly.GetExecutingAssembly() - /// - public static Type[] GetTypesInNamespace(string nameSpace, Assembly? assembly = null) - { - if (assembly is null) { assembly = Assembly.GetExecutingAssembly(); } - return assembly.GetTypes().Where(t => string.Equals(t.Namespace, nameSpace, StringComparison.Ordinal)).ToArray(); - } - - /// - /// Static initialization of build information, read from assembly information - /// - static Program() - { - if (typeof(Program) - .Assembly - .GetCustomAttributes(typeof(AssemblyConfigurationAttribute), false) - .FirstOrDefault() is AssemblyConfigurationAttribute attribute) - BuildInfo = attribute.Configuration; - } - } -} diff --git a/MinecraftClient/Properties/AssemblyInfo.cs b/MinecraftClient/Properties/AssemblyInfo.cs deleted file mode 100644 index 7e608e538b..0000000000 --- a/MinecraftClient/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -[assembly: InternalsVisibleTo("MinecraftClient.Tests")] - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Minecraft Console Client")] -[assembly: AssemblyDescription("Lightweight console for Minecraft chat and automated scripts")] -//[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("https://github.com/MCCTeam/Minecraft-Console-Client")] -[assembly: AssemblyProduct("MinecraftClient")] -[assembly: AssemblyCopyright("Copyright © 2012-2022 The MCC Team")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("78af6200-1f48-4daa-b473-109a9728b61f")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -// [assembly: AssemblyVersion("1.0.0")] -// [assembly: AssemblyFileVersion("1.0.0")] - -// AppVeyor Build Number -// MCC will use the following command as CMD pre-build script in AppVeyor msbuild settings: -// echo [assembly: AssemblyConfiguration("AppVeyor build %APPVEYOR_BUILD_NUMBER%, built on %DATE% from commit %APPVEYOR_REPO_COMMIT:~0,7%")] >> MinecraftClient\Properties\AssemblyInfo.cs -// The command will add build info like the example below to be incorporated in Assembly Info in order to display build info on launch -// [assembly: AssemblyConfiguration("AppVeyor build 1234, built on Sun 31/12/2017 from commit abc1def")] diff --git a/MinecraftClient/Protocol/DataTypeGenerator.cs b/MinecraftClient/Protocol/DataTypeGenerator.cs deleted file mode 100644 index d8315b8180..0000000000 --- a/MinecraftClient/Protocol/DataTypeGenerator.cs +++ /dev/null @@ -1,144 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.IO; -using System.Linq; - -namespace MinecraftClient.Protocol -{ - /// - /// Generic generator for MCC Enumerations such as ItemType or EntityType, mapping protocol IDs to actual enumeration fields such as 1 => Stone for inventories. - /// Works by processing Minecraft registries.json exported from minecraft_server.jar - /// - /// java -cp minecraft_server.jar net.minecraft.data.Main --reports - public static class DataTypeGenerator - { - /// - /// Read Minecraft registry from Json and build a dictionary - /// - /// Path to registries.json generated from Minecraft server Jar - /// Name of registry we want to process, e.g. minecraft:item - /// - private static Dictionary LoadRegistry(string registriesJsonFile, string jsonRegistryName) - { - var rawJson = Json.ParseJson(File.ReadAllText(registriesJsonFile)); - var rawRegistry = rawJson![jsonRegistryName]!["entries"]!.AsObject(); - Dictionary registry = new(); - - foreach (var entry in rawRegistry) - { - int entryId = int.Parse(entry.Value!["protocol_id"].GetStringValue(), NumberStyles.Any, CultureInfo.CurrentCulture); - - //minecraft:item_name => ItemName - string entryName = String.Concat( - entry.Key.Replace("minecraft:", "") - .Split('_') - .Select(word => char.ToUpper(word[0]) + word[1..]) - ); - - if (registry.ContainsKey(entryId)) - throw new InvalidDataException("Duplicate entry ID " + entryId + "!?"); - - registry.Add(entryId, entryName); - } - - return registry; - } - - /// - /// Generate MCC Enum from a Minecraft registry without Palette (static enum that does not change between versions) - /// - /// Path to registries.json generated from Minecraft server Jar - /// Name of registry we want to process, e.g. minecraft:item - /// Output enum name, e.g. ItemType (output file will be ItemType.cs) - /// Output enum namespace, e.g. MinecraftClient.Inventory - public static void GenerateEnum(string registriesJsonFile, string jsonRegistryName, string outputEnum, string enumNamespace) - { - List outputEnumLines = new(); - - outputEnumLines.AddRange(new[] { - "namespace " + enumNamespace, - "{", - " public enum " + outputEnum, - " {" - }); - - Dictionary registry = LoadRegistry(registriesJsonFile, jsonRegistryName); - foreach (KeyValuePair entry in registry) - outputEnumLines.Add(" " + entry.Value + " = " + entry.Key + ','); - - outputEnumLines.AddRange(new[] { - " }", - "}" - }); - - string outputEnumPath = Path.Combine(Path.GetDirectoryName(registriesJsonFile)!, outputEnum + "XXX.cs"); - File.WriteAllLines(outputEnumPath, outputEnumLines); - } - - /// - /// Generate MCC Enum from a Minecraft registry with Palette (dynamic enum that changes between versions) - /// - /// Path to registries.json generated from Minecraft server Jar - /// Name of registry we want to process, e.g. minecraft:item - /// Output enum name, e.g. ItemType (output file will be ItemType.cs) - /// Enum namespace, e.g. MinecraftClient.Mapping - /// Output palette name, e.g. ItemPalette (output file will be ItemPalette.cs and ItemPaletteXXX.cs) - /// Palette namespace, e.g. MinecraftClient.EntityPalettes - public static void GenerateEnumWithPalette(string registriesJsonFile, string jsonRegistryName, string outputEnum, string enumNamespace, string outputPalette, string paletteNamespace) - { - List outputEnumLines = new(); - List outputPaletteLines = new(); - - outputEnumLines.AddRange(new[] { - "namespace " + enumNamespace, - "{", - " public enum " + outputEnum, - " {" - }); - - outputPaletteLines.AddRange(new[] { - "using System.Collections.Generic;", - "", - "namespace " + paletteNamespace, - "{", - " public class " + outputPalette + "XXX : " + outputPalette, - " {", - " private static readonly Dictionary mappings = new();", - "", - " static " + outputPalette + "XXX()", - " {", - }); - - Dictionary registry = LoadRegistry(registriesJsonFile, jsonRegistryName); - - foreach (KeyValuePair entry in registry) - { - outputEnumLines.Add(" " + entry.Value + ','); - outputPaletteLines.Add(" mappings[" + entry.Key + "] = " + outputEnum + "." + entry.Value + ";"); - } - - outputEnumLines.AddRange(new[] { - " }", - "}" - }); - - outputPaletteLines.AddRange(new[] { - " }", - "", - " protected override Dictionary GetDict()", - " {", - " return mappings;", - " }", - " }", - "}" - }); - - string outputEnumPath = Path.Combine(Path.GetDirectoryName(registriesJsonFile)!, outputEnum + "XXX.cs"); - string outputPalettePath = Path.Combine(Path.GetDirectoryName(registriesJsonFile)!, outputPalette + "XXX.cs"); - - File.WriteAllLines(outputEnumPath, outputEnumLines); - File.WriteAllLines(outputPalettePath, outputPaletteLines); - } - } -} diff --git a/MinecraftClient/Protocol/Dialogs/DialogNbtParser.cs b/MinecraftClient/Protocol/Dialogs/DialogNbtParser.cs deleted file mode 100644 index 2636b5be8b..0000000000 --- a/MinecraftClient/Protocol/Dialogs/DialogNbtParser.cs +++ /dev/null @@ -1,475 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using MinecraftClient.Dialogs; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Protocol.Dialogs; - -public sealed class DialogNbtParser -{ - public DialogDefinition Parse(Dictionary nbt) - { - var type = NormalizeType(GetString(nbt, "type") ?? "minecraft:notice"); - var common = ParseCommon(nbt, type); - var actions = new List(); - DialogActionDefinition? cancelAction = null; - var columns = GetInt(nbt, "columns", 1); - var buttonWidth = GetInt(nbt, "button_width", 150); - - switch (type) - { - case "minecraft:notice": - var noticeAction = ParseButton(nbt, "action", 1); - actions.Add(noticeAction ?? new DialogButton(1, Translations.dialog_action_ok, null)); - cancelAction = actions[0].Action; - break; - - case "minecraft:confirmation": - AddIfNotNull(actions, ParseButton(nbt, "yes", 1)); - AddIfNotNull(actions, ParseButton(nbt, "no", 2)); - cancelAction = actions.Count >= 2 ? actions[1].Action : null; - break; - - case "minecraft:multi_action": - actions.AddRange(ParseButtonList(GetValue(nbt, "actions"))); - cancelAction = ParseButton(nbt, "exit_action", 0)?.Action; - break; - - case "minecraft:dialog_list": - actions.AddRange(ParseDialogListActions(GetValue(nbt, "dialogs"))); - cancelAction = ParseButton(nbt, "exit_action", 0)?.Action; - break; - - case "minecraft:server_links": - cancelAction = ParseButton(nbt, "exit_action", 0)?.Action; - break; - } - - return new DialogDefinition( - type, - common.Title, - common.ExternalTitle, - common.CanCloseWithEscape, - common.Pause, - common.AfterAction, - common.Body, - common.Inputs, - actions, - cancelAction, - columns, - buttonWidth); - } - - public DialogDefinition? TryParse(Dictionary? nbt) - { - return nbt is null ? null : Parse(nbt); - } - - private static DialogCommon ParseCommon(Dictionary nbt, string type) - { - var title = ParseComponent(GetValue(nbt, "title")); - var externalTitle = nbt.TryGetValue("external_title", out var externalTitleValue) - ? ParseComponent(externalTitleValue) - : null; - var canCloseWithEscape = GetBool(nbt, "can_close_with_escape", true); - var pause = GetBool(nbt, "pause", true); - var afterAction = ParseAfterAction(GetString(nbt, "after_action") ?? "close"); - var body = ParseBody(GetValue(nbt, "body")); - var inputs = ParseInputs(GetValue(nbt, "inputs")); - - return new DialogCommon(title, externalTitle, canCloseWithEscape, pause, afterAction, body, inputs); - } - - private static IReadOnlyList ParseBody(object? value) - { - if (value is null) - return []; - - List body = []; - foreach (var item in Enumerate(value)) - { - if (item is Dictionary compound) - { - var type = NormalizeType(GetString(compound, "type") ?? "minecraft:plain_message"); - if (type == "minecraft:item") - { - var description = compound.TryGetValue("description", out var desc) - ? ParsePlainMessage(desc) - : string.Empty; - body.Add(new DialogBody(DialogBodyKind.Item, string.IsNullOrWhiteSpace(description) ? Translations.dialog_item_body : description, type)); - continue; - } - - body.Add(new DialogBody(DialogBodyKind.PlainMessage, ParsePlainMessage(compound), type)); - continue; - } - - body.Add(new DialogBody(DialogBodyKind.PlainMessage, ParseComponent(item), "minecraft:plain_message")); - } - - return body; - } - - private static string ParsePlainMessage(object? value) - { - if (value is Dictionary compound && compound.TryGetValue("contents", out var contents)) - return ParseComponent(contents); - - return ParseComponent(value); - } - - private static IReadOnlyList ParseInputs(object? value) - { - if (value is null) - return []; - - List inputs = []; - foreach (var item in Enumerate(value)) - { - if (item is not Dictionary inputData) - continue; - - var key = GetString(inputData, "key"); - if (string.IsNullOrWhiteSpace(key)) - continue; - - var control = inputData.TryGetValue("control", out var controlValue) && controlValue is Dictionary controlData - ? controlData - : inputData; - - var type = NormalizeType(GetString(control, "type") ?? "minecraft:text"); - inputs.Add(type switch - { - "minecraft:boolean" => ParseBooleanInput(key, type, control), - "minecraft:number_range" => ParseNumberInput(key, type, control), - "minecraft:single_option" => ParseOptionInput(key, type, control), - "minecraft:text" => ParseTextInput(key, type, control), - _ => new DialogInput(key, DialogInputKind.Unknown, ParseComponent(GetValue(control, "label")), string.Empty, Type: type) - }); - } - - return inputs; - } - - private static DialogInput ParseTextInput(string key, string type, Dictionary control) - { - return new DialogInput( - key, - DialogInputKind.Text, - ParseComponent(GetValue(control, "label")), - GetString(control, "initial") ?? string.Empty, - MaxLength: GetInt(control, "max_length", 32), - LabelVisible: GetBool(control, "label_visible", true), - Multiline: control.ContainsKey("multiline"), - Type: type); - } - - private static DialogInput ParseBooleanInput(string key, string type, Dictionary control) - { - var initial = GetBool(control, "initial", false); - return new DialogInput( - key, - DialogInputKind.Boolean, - ParseComponent(GetValue(control, "label")), - initial ? "true" : "false", - OnTrue: GetString(control, "on_true") ?? "true", - OnFalse: GetString(control, "on_false") ?? "false", - Type: type); - } - - private static DialogInput ParseOptionInput(string key, string type, Dictionary control) - { - var options = ParseOptions(GetValue(control, "options")); - var initial = options.FirstOrDefault(static option => option.Initial)?.Id - ?? options.FirstOrDefault()?.Id - ?? string.Empty; - return new DialogInput( - key, - DialogInputKind.SingleOption, - ParseComponent(GetValue(control, "label")), - initial, - LabelVisible: GetBool(control, "label_visible", true), - Options: options, - Type: type); - } - - private static DialogInput ParseNumberInput(string key, string type, Dictionary control) - { - var range = control.TryGetValue("range_info", out var rangeValue) && rangeValue is Dictionary rangeData - ? rangeData - : control; - var start = GetFloat(range, "start", 0); - var end = GetFloat(range, "end", 1); - var initial = TryGetFloat(range, "initial") ?? ((start + end) / 2F); - return new DialogInput( - key, - DialogInputKind.NumberRange, - ParseComponent(GetValue(control, "label")), - NumberToString(initial), - Start: start, - End: end, - InitialNumber: initial, - Step: TryGetFloat(range, "step"), - Type: type); - } - - private static IReadOnlyList ParseOptions(object? value) - { - if (value is null) - return []; - - List options = []; - foreach (var item in Enumerate(value)) - { - if (item is string id) - { - options.Add(new DialogOption(id, id, false)); - continue; - } - - if (item is Dictionary option) - { - var optionId = GetString(option, "id"); - if (optionId is null) - continue; - - var display = option.TryGetValue("display", out var displayValue) - ? ParseComponent(displayValue) - : optionId; - options.Add(new DialogOption(optionId, display, GetBool(option, "initial", false))); - } - } - - return options; - } - - private static List ParseButtonList(object? value) - { - List buttons = []; - var index = 1; - foreach (var item in Enumerate(value)) - { - if (item is Dictionary buttonData) - buttons.Add(ParseButton(buttonData, index++) ?? new DialogButton(index - 1, Translations.dialog_action_unnamed, null)); - } - - return buttons; - } - - private static IEnumerable ParseDialogListActions(object? value) - { - List buttons = []; - var index = 1; - foreach (var item in Enumerate(value)) - { - switch (item) - { - case string tag when tag.StartsWith('#'): - buttons.Add(new DialogButton(index++, tag, new DialogActionDefinition(DialogActionKind.Unknown, Type: "dialog_tag"))); - break; - case string resource: - buttons.Add(new DialogButton(index++, resource, new DialogActionDefinition(DialogActionKind.ShowDialog, Value: resource, Type: "dialog_reference_name"))); - break; - case Dictionary dialog: - var nested = new DialogNbtParser().Parse(dialog); - buttons.Add(new DialogButton(index++, nested.DisplayTitle(), new DialogActionDefinition(DialogActionKind.ShowDialog, NestedDialog: nested))); - break; - } - } - - return buttons; - } - - private static DialogButton? ParseButton(Dictionary owner, string key, int index) - { - return owner.TryGetValue(key, out var value) && value is Dictionary data - ? ParseButton(data, index) - : null; - } - - private static DialogButton? ParseButton(Dictionary data, int index) - { - var label = data.TryGetValue("label", out var labelValue) - ? ParseComponent(labelValue) - : Translations.dialog_action_unnamed; - var action = data.TryGetValue("action", out var actionValue) && actionValue is Dictionary actionData - ? ParseAction(actionData) - : null; - return new DialogButton(index, label, action); - } - - private static DialogActionDefinition ParseAction(Dictionary action) - { - var type = NormalizeType(GetString(action, "type") ?? GetString(action, "action") ?? "minecraft:none"); - return type switch - { - "minecraft:run_command" => new DialogActionDefinition(DialogActionKind.RunCommand, Value: GetString(action, "command"), Type: type), - "minecraft:dynamic/run_command" => new DialogActionDefinition(DialogActionKind.RunCommand, Value: GetString(action, "template"), Type: type), - "minecraft:custom" => new DialogActionDefinition(DialogActionKind.CustomClick, Id: GetString(action, "id"), Payload: GetCompound(action, "payload"), Type: type), - "minecraft:dynamic/custom" => new DialogActionDefinition(DialogActionKind.CustomClick, Id: GetString(action, "id"), Payload: GetCompound(action, "additions"), Type: type), - "minecraft:open_url" => new DialogActionDefinition(DialogActionKind.OpenUrl, Value: GetString(action, "url"), Type: type), - "minecraft:suggest_command" => new DialogActionDefinition(DialogActionKind.SuggestCommand, Value: GetString(action, "command"), Type: type), - "minecraft:copy_to_clipboard" => new DialogActionDefinition(DialogActionKind.CopyToClipboard, Value: GetString(action, "value"), Type: type), - "minecraft:show_dialog" => ParseShowDialogAction(action, type), - _ => new DialogActionDefinition(DialogActionKind.Unknown, Type: type) - }; - } - - private static DialogActionDefinition ParseShowDialogAction(Dictionary action, string type) - { - if (!action.TryGetValue("dialog", out var value)) - return new DialogActionDefinition(DialogActionKind.ShowDialog, Type: type); - - if (value is Dictionary dialogData) - return new DialogActionDefinition(DialogActionKind.ShowDialog, NestedDialog: new DialogNbtParser().Parse(dialogData), Type: type); - - if (value is int protocolId) - return new DialogActionDefinition(DialogActionKind.ShowDialog, DialogReferenceId: protocolId, Type: type); - - return new DialogActionDefinition(DialogActionKind.ShowDialog, Value: value.ToString(), Type: type); - } - - private static DialogAfterAction ParseAfterAction(string value) - { - return value switch - { - "none" => DialogAfterAction.None, - "wait_for_response" => DialogAfterAction.WaitForResponse, - _ => DialogAfterAction.Close - }; - } - - private static string ParseComponent(object? value) - { - if (value is null) - return string.Empty; - - try - { - return value switch - { - Dictionary compound => ChatParser.ParseText(compound), - string text when text.StartsWith('{') || text.StartsWith('[') => ChatParser.ParseText(text), - string text => text, - _ => value.ToString() ?? string.Empty - }; - } - catch - { - return value.ToString() ?? string.Empty; - } - } - - private static IEnumerable Enumerate(object? value) - { - if (value is null) - yield break; - - if (value is object[] array) - { - foreach (var item in array) - yield return item; - yield break; - } - - yield return value; - } - - private static object? GetValue(Dictionary data, string key) - { - return data.TryGetValue(key, out var value) ? value : null; - } - - private static string? GetString(Dictionary data, string key) - { - return data.TryGetValue(key, out var value) ? value as string ?? value.ToString() : null; - } - - private static Dictionary? GetCompound(Dictionary data, string key) - { - return data.TryGetValue(key, out var value) && value is Dictionary compound ? compound : null; - } - - private static bool GetBool(Dictionary data, string key, bool fallback) - { - if (!data.TryGetValue(key, out var value)) - return fallback; - - return value switch - { - bool boolean => boolean, - byte number => number != 0, - sbyte number => number != 0, - int number => number != 0, - string text when bool.TryParse(text, out var parsed) => parsed, - _ => fallback - }; - } - - private static int GetInt(Dictionary data, string key, int fallback) - { - if (!data.TryGetValue(key, out var value)) - return fallback; - - return value switch - { - byte number => number, - short number => number, - int number => number, - long number => (int)number, - string text when int.TryParse(text, NumberStyles.Integer, CultureInfo.InvariantCulture, out var parsed) => parsed, - _ => fallback - }; - } - - private static float GetFloat(Dictionary data, string key, float fallback) - { - return TryGetFloat(data, key) ?? fallback; - } - - private static float? TryGetFloat(Dictionary data, string key) - { - if (!data.TryGetValue(key, out var value)) - return null; - - return value switch - { - float number => number, - double number => (float)number, - int number => number, - long number => number, - string text when float.TryParse(text, NumberStyles.Float, CultureInfo.InvariantCulture, out var parsed) => parsed, - _ => null - }; - } - - private static string NormalizeType(string type) - { - return type.Contains(':', StringComparison.Ordinal) ? type : "minecraft:" + type; - } - - private static void AddIfNotNull(List buttons, DialogButton? button) - { - if (button is not null) - buttons.Add(button); - } - - private static string NumberToString(float value) - { - var integer = (int)value; - return integer == value - ? integer.ToString(CultureInfo.InvariantCulture) - : value.ToString(CultureInfo.InvariantCulture); - } - - private sealed record DialogCommon( - string Title, - string? ExternalTitle, - bool CanCloseWithEscape, - bool Pause, - DialogAfterAction AfterAction, - IReadOnlyList Body, - IReadOnlyList Inputs); -} diff --git a/MinecraftClient/Protocol/EntityActionType.cs b/MinecraftClient/Protocol/EntityActionType.cs deleted file mode 100644 index 88005de43a..0000000000 --- a/MinecraftClient/Protocol/EntityActionType.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace MinecraftClient.Protocol -{ - public enum EntityActionType - { - StartSneaking = 0, - StopSneaking = 1, - LeaveBed = 2, - StartSprinting = 3, - StopSprinting = 4, - StartJumpWithHorse = 5, - StopJumpWithHorse = 6, - OpenHorseInventory = 7, - StartFlyingWithElytra = 8, - } -} diff --git a/MinecraftClient/Protocol/GuidExtensions.cs b/MinecraftClient/Protocol/GuidExtensions.cs deleted file mode 100644 index c5ce264595..0000000000 --- a/MinecraftClient/Protocol/GuidExtensions.cs +++ /dev/null @@ -1,76 +0,0 @@ -using System; - -namespace MinecraftClient.Protocol -{ - public static class GuidExtensions - { - /// - /// A CLSCompliant method to convert a Java big-endian Guid to a .NET - /// little-endian Guid. - /// The Guid Constructor (UInt32, UInt16, UInt16, Byte, Byte, Byte, Byte, - /// Byte, Byte, Byte, Byte) is not CLSCompliant. - /// - public static Guid ToLittleEndian(this Guid javaGuid) - { - byte[] net = new byte[16]; - byte[] java = javaGuid.ToByteArray(); - for (int i = 8; i < 16; i++) - { - net[i] = java[i]; - } - net[3] = java[0]; - net[2] = java[1]; - net[1] = java[2]; - net[0] = java[3]; - net[5] = java[4]; - net[4] = java[5]; - net[6] = java[7]; - net[7] = java[6]; - return new Guid(net); - } - - /// - /// Converts little-endian .NET guids to big-endian Java guids: - /// - public static Guid ToBigEndian(this Guid netGuid) - { - byte[] java = new byte[16]; - byte[] net = netGuid.ToByteArray(); - for (int i = 8; i < 16; i++) - { - java[i] = net[i]; - } - java[0] = net[3]; - java[1] = net[2]; - java[2] = net[1]; - java[3] = net[0]; - java[4] = net[5]; - java[5] = net[4]; - java[6] = net[7]; - java[7] = net[6]; - return new Guid(java); - } - - /// - /// Converts little-endian .NET guids to big-endian Java guids: - /// - public static byte[] ToBigEndianBytes(this Guid netGuid) - { - byte[] java = new byte[16]; - byte[] net = netGuid.ToByteArray(); - for (int i = 8; i < 16; i++) - { - java[i] = net[i]; - } - java[0] = net[3]; - java[1] = net[2]; - java[2] = net[1]; - java[3] = net[0]; - java[4] = net[5]; - java[5] = net[4]; - java[6] = net[7]; - java[7] = net[6]; - return java; - } - } -} diff --git a/MinecraftClient/Protocol/Handlers/ConfigurationPacketTypesIn.cs b/MinecraftClient/Protocol/Handlers/ConfigurationPacketTypesIn.cs deleted file mode 100644 index d140bbcc70..0000000000 --- a/MinecraftClient/Protocol/Handlers/ConfigurationPacketTypesIn.cs +++ /dev/null @@ -1,27 +0,0 @@ -namespace MinecraftClient.Protocol.Handlers; - -public enum ConfigurationPacketTypesIn -{ - CookieRequest, - CustomReportDetails, - Disconnect, - FeatureFlags, - FinishConfiguration, - KeepAlive, - KnownDataPacks, - Ping, - PluginMessage, - RegistryData, - RemoveResourcePack, - ResetChat, - ResourcePack, - ServerLinks, - StoreCookie, - Transfer, - UpdateTags, - ClearDialog, // Added in 1.21.6 - ShowDialog, // Added in 1.21.6 - CodeOfConduct, // Added in 1.21.9 - - Unknown -} diff --git a/MinecraftClient/Protocol/Handlers/ConfigurationPacketTypesOut.cs b/MinecraftClient/Protocol/Handlers/ConfigurationPacketTypesOut.cs deleted file mode 100644 index 1bb492d274..0000000000 --- a/MinecraftClient/Protocol/Handlers/ConfigurationPacketTypesOut.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace MinecraftClient.Protocol.Handlers; - -public enum ConfigurationPacketTypesOut -{ - ClientInformation, - PluginMessage, - FinishConfiguration, - KeepAlive, - Pong, - ResourcePackResponse, - CookieResponse, - KnownDataPacks, - CustomClickAction, // Added in 1.21.6 - AcceptCodeOfConduct, // Added in 1.21.9 - - Unknown -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/DataTypes.cs b/MinecraftClient/Protocol/Handlers/DataTypes.cs deleted file mode 100644 index a3e95cb4ea..0000000000 --- a/MinecraftClient/Protocol/Handlers/DataTypes.cs +++ /dev/null @@ -1,2109 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; -using System.Text; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Mapping; -using MinecraftClient.Mapping.EntityPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Protocol.Handlers -{ - /// - /// Handle data types encoding / decoding - /// - public class DataTypes(int protocol) - { - /// - /// Protocol version for adjusting data types - /// - private readonly int protocolversion = protocol; - - /// - /// Protocol version used to adjust wire encodings. - /// - public int ProtocolVersion => protocolversion; - - /// - /// Read some data from a cache of bytes and remove it from the cache - /// - /// Amount of bytes to read - /// Cache of bytes to read from - /// The data read from the cache as an array - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public byte[] ReadData(int offset, Queue cache) - { - byte[] result = new byte[offset]; - for (int i = 0; i < offset; i++) - result[i] = cache.Dequeue(); - return result; - } - - /// - /// Read some data from a cache of bytes and remove it from the cache - /// - /// Cache of bytes to read from - /// Storage results - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public void ReadDataReverse(Queue cache, Span dest) - { - for (int i = (dest.Length - 1); i >= 0; --i) - dest[i] = cache.Dequeue(); - } - - /// - /// Remove some data from the cache - /// - /// Amount of bytes to drop - /// Cache of bytes to drop - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public void DropData(int offset, Queue cache) - { - while (offset-- > 0) - cache.Dequeue(); - } - - /// - /// Read a string from a cache of bytes and remove it from the cache - /// - /// Cache of bytes to read from - /// The string - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public string ReadNextString(Queue cache) - { - int length = ReadNextVarInt(cache); - if (length > 0) - { - return Encoding.UTF8.GetString(ReadData(length, cache)); - } - else return ""; - } - - /// - /// Skip a string from a cache of bytes and remove it from the cache - /// - /// Cache of bytes to read from - public void SkipNextString(Queue cache) - { - int length = ReadNextVarInt(cache); - DropData(length, cache); - } - - /// - /// Read a boolean from a cache of bytes and remove it from the cache - /// - /// The boolean value - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public bool ReadNextBool(Queue cache) - { - return ReadNextByte(cache) != 0x00; - } - - /// - /// Read a short integer from a cache of bytes and remove it from the cache - /// - /// The short integer value - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public short ReadNextShort(Queue cache) - { - Span rawValue = stackalloc byte[2]; - for (int i = (2 - 1); i >= 0; --i) //Endianness - rawValue[i] = cache.Dequeue(); - return BitConverter.ToInt16(rawValue); - } - - /// - /// Read an integer from a cache of bytes and remove it from the cache - /// - /// The integer value - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public int ReadNextInt(Queue cache) - { - Span rawValue = stackalloc byte[4]; - for (int i = (4 - 1); i >= 0; --i) //Endianness - rawValue[i] = cache.Dequeue(); - return BitConverter.ToInt32(rawValue); - } - - /// - /// Read a long integer from a cache of bytes and remove it from the cache - /// - /// The unsigned long integer value - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public long ReadNextLong(Queue cache) - { - Span rawValue = stackalloc byte[8]; - for (int i = (8 - 1); i >= 0; --i) //Endianness - rawValue[i] = cache.Dequeue(); - return BitConverter.ToInt64(rawValue); - } - - /// - /// Read an unsigned short integer from a cache of bytes and remove it from the cache - /// - /// The unsigned short integer value - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public ushort ReadNextUShort(Queue cache) - { - Span rawValue = stackalloc byte[2]; - for (int i = (2 - 1); i >= 0; --i) //Endianness - rawValue[i] = cache.Dequeue(); - return BitConverter.ToUInt16(rawValue); - } - - /// - /// Read an unsigned long integer from a cache of bytes and remove it from the cache - /// - /// The unsigned long integer value - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public ulong ReadNextULong(Queue cache) - { - Span rawValue = stackalloc byte[8]; - for (int i = (8 - 1); i >= 0; --i) //Endianness - rawValue[i] = cache.Dequeue(); - return BitConverter.ToUInt64(rawValue); - } - - /// - /// Read a Location encoded as an ulong field and remove it from the cache - /// - /// The Location value - public Location ReadNextLocation(Queue cache) - { - ulong locEncoded = ReadNextULong(cache); - int x, y, z; - if (protocolversion >= Protocol18Handler.MC_1_14_Version) - { - x = (int)(locEncoded >> 38); - y = (int)(locEncoded & 0xFFF); - z = (int)(locEncoded << 26 >> 38); - } - else - { - x = (int)(locEncoded >> 38); - y = (int)((locEncoded >> 26) & 0xFFF); - z = (int)(locEncoded << 38 >> 38); - } - - if (x >= 0x02000000) // 33,554,432 - x -= 0x04000000; // 67,108,864 - if (y >= 0x00000800) // 2,048 - y -= 0x00001000; // 4,096 - if (z >= 0x02000000) // 33,554,432 - z -= 0x04000000; // 67,108,864 - return new Location(x, y, z); - } - - /// - /// Read several little endian unsigned short integers at once from a cache of bytes and remove them from the cache - /// - /// The unsigned short integer value - public ushort[] ReadNextUShortsLittleEndian(int amount, Queue cache) - { - byte[] rawValues = ReadData(2 * amount, cache); - ushort[] result = new ushort[amount]; - for (int i = 0; i < amount; i++) - result[i] = BitConverter.ToUInt16(rawValues, i * 2); - return result; - } - - /// - /// Read a uuid from a cache of bytes and remove it from the cache - /// - /// Cache of bytes to read from - /// The uuid - public Guid ReadNextUUID(Queue cache) - { - Span javaUUID = stackalloc byte[16]; - for (int i = 0; i < 16; ++i) - javaUUID[i] = cache.Dequeue(); - Guid guid = new(javaUUID); - if (BitConverter.IsLittleEndian) - guid = guid.ToLittleEndian(); - return guid; - } - - /// - /// Read a byte array from a cache of bytes and remove it from the cache - /// - /// Cache of bytes to read from - /// The byte array - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public byte[] ReadNextByteArray(Queue cache) - { - int len = protocolversion >= Protocol18Handler.MC_1_8_Version - ? ReadNextVarInt(cache) - : ReadNextShort(cache); - return ReadData(len, cache); - } - - /// - /// Read a byte array with given length from a cache of bytes and remove it from the cache - /// - /// Cache of bytes to read from - /// Length of the bytes array - /// The byte array - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public byte[] ReadNextByteArray(Queue cache, int length) - { - return ReadData(length, cache); - } - - /// - /// Reads a length-prefixed array of unsigned long integers and removes it from the cache - /// - /// The unsigned long integer values - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public ulong[] ReadNextULongArray(Queue cache) - { - int len = ReadNextVarInt(cache); - ulong[] result = new ulong[len]; - for (int i = 0; i < len; i++) - result[i] = ReadNextULong(cache); - return result; - } - - /// - /// Read a double from a cache of bytes and remove it from the cache - /// - /// The double value - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public double ReadNextDouble(Queue cache) - { - Span rawValue = stackalloc byte[8]; - for (int i = (8 - 1); i >= 0; --i) //Endianness - rawValue[i] = cache.Dequeue(); - return BitConverter.ToDouble(rawValue); - } - - /// - /// Read a float from a cache of bytes and remove it from the cache - /// - /// The float value - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public float ReadNextFloat(Queue cache) - { - Span rawValue = stackalloc byte[4]; - for (int i = (4 - 1); i >= 0; --i) //Endianness - rawValue[i] = cache.Dequeue(); - return BitConverter.ToSingle(rawValue); - } - - /// - /// Read an integer from the network - /// - /// The integer - [MethodImpl(MethodImplOptions.AggressiveInlining)] - public int ReadNextVarIntRAW(SocketWrapper socket) - { - int i = 0; - int j = 0; - byte b; - while (true) - { - b = socket.ReadDataRAW(1)[0]; - i |= (b & 0x7F) << j++ * 7; - if (j > 5) throw new OverflowException("VarInt too big"); - if ((b & 0x80) != 128) break; - } - - return i; - } - - /// - /// Read an integer from a cache of bytes and remove it from the cache - /// - /// Cache of bytes to read from - /// The integer - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public int ReadNextVarInt(Queue cache) - { - int i = 0; - int j = 0; - byte b; - do - { - b = cache.Dequeue(); - i |= (b & 0x7F) << j++ * 7; - if (j > 5) throw new OverflowException("VarInt too big"); - } while ((b & 0x80) == 128); - - return i; - } - - /// - /// Skip a VarInt from a cache of bytes with better performance - /// - /// Cache of bytes to read from - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public void SkipNextVarInt(Queue cache) - { - while (true) - if ((ReadNextByte(cache) & 0x80) != 128) - break; - } - - /// - /// Read an "extended short", which is actually an int of some kind, from the cache of bytes. - /// This is only done with forge. It looks like it's a normal short, except that if the high - /// bit is set, it has an extra byte. - /// - /// Cache of bytes to read from - /// The int - public int ReadNextVarShort(Queue cache) - { - ushort low = ReadNextUShort(cache); - byte high = 0; - if ((low & 0x8000) != 0) - { - low &= 0x7FFF; - high = ReadNextByte(cache); - } - - return ((high & 0xFF) << 15) | low; - } - - /// - /// Read a long from a cache of bytes and remove it from the cache - /// - /// Cache of bytes to read from - /// The long value - public long ReadNextVarLong(Queue cache) - { - int numRead = 0; - long result = 0; - byte read; - do - { - read = ReadNextByte(cache); - long value = (read & 0x7F); - result |= (value << (7 * numRead)); - - numRead++; - if (numRead > 10) - { - throw new OverflowException("VarLong is too big"); - } - } while ((read & 0x80) != 0); - - return result; - } - - /// - /// Read a single byte from a cache of bytes and remove it from the cache - /// - /// The byte that was read - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public byte ReadNextByte(Queue cache) - { - byte result = cache.Dequeue(); - return result; - } - - /// - /// Read an uncompressed Named Binary Tag blob and remove it from the cache - /// - public Dictionary ReadNextNbt(Queue cache) - { - return ReadNextNbt(cache, true); - } - - public object? ReadNextNbtTag(Queue cache) - { - var tagType = ReadNextByte(cache); - return tagType == 0 ? null : ReadNbtField(cache, tagType); - } - - /// - /// Read an ItemStackTemplate (26.1+) from a cache of bytes. - /// Unlike ItemStack, this uses item-first encoding: item_id, count, DataComponentPatch. - /// ItemStackTemplate is always non-empty (no count=0 sentinel). - /// - public Item ReadNextItemStackTemplate(Queue cache, ItemPalette itemPalette) - { - var itemId = ReadNextVarInt(cache); - var itemCount = ReadNextVarInt(cache); - var item = new Item(itemPalette.FromId(itemId), itemCount, null); - - var numberOfComponentsToAdd = ReadNextVarInt(cache); - var numberofComponentsToRemove = ReadNextVarInt(cache); - var structuredComponentHandler = new StructuredComponentsHandler(protocolversion, this, itemPalette); - var strcturedComponentsToAdd = new List(numberOfComponentsToAdd); - - for (var i = 0; i < numberOfComponentsToAdd; i++) - { - var componentTypeId = ReadNextVarInt(cache); - strcturedComponentsToAdd.Add(structuredComponentHandler.Parse(componentTypeId, cache)); - } - - for (var i = 0; i < numberofComponentsToRemove; i++) - ReadNextVarInt(cache); - - if (strcturedComponentsToAdd.Count > 0) - item.Components = strcturedComponentsToAdd; - - return item; - } - - /// - /// Read a single item slot from a cache of bytes and remove it from the cache - /// - /// The item that was read or NULL for an empty slot - public Item? ReadNextItemSlot(Queue cache, ItemPalette itemPalette) - { - var itemId = -1; - var itemCount = 0; - var nbt = null as Dictionary; - var item = null as Item; - var strcturedComponentsToAdd = new List(); - - switch (protocolversion) - { - // MC 1.13.2 and greater - case >= Protocol18Handler.MC_1_20_6_Version: - itemCount = ReadNextVarInt(cache); - - if (itemCount <= 0) return null; - - itemId = ReadNextVarInt(cache); - item = new Item(itemPalette.FromId(itemId), itemCount, null); - - var numberOfComponentsToAdd = ReadNextVarInt(cache); - var numberofComponentsToRemove = ReadNextVarInt(cache); - var structuredComponentHandler = new StructuredComponentsHandler(protocolversion, this, itemPalette); - var parsedComponents = new List(numberOfComponentsToAdd); - - for (var i = 0; i < numberOfComponentsToAdd; i++) - { - var componentTypeId = ReadNextVarInt(cache); - var componentName = structuredComponentHandler.GetComponentName(componentTypeId); - parsedComponents.Add($"{i}:{componentTypeId}:{componentName}:next={GetQueuePreview(cache, 24)}"); - - try - { - strcturedComponentsToAdd.Add(structuredComponentHandler.Parse(componentTypeId, cache)); - } - catch (Exception ex) - { - var preview = GetQueuePreview(cache, 48); - throw new System.IO.InvalidDataException( - $"Failed to decode item component {componentTypeId} ({componentName}) for itemId {itemId}, " + - $"itemCount {itemCount}, addCount {numberOfComponentsToAdd}, removeCount {numberofComponentsToRemove}, " + - $"componentIndex {i}, remainingBytes {cache.Count}, nextBytes {preview}, " + - $"componentTrace [{string.Join(" | ", parsedComponents)}].", - ex); - } - } - - for (var i = 0; i < numberofComponentsToRemove; i++) - ReadNextVarInt(cache); - - if (strcturedComponentsToAdd.Count > 0) - item.Components = strcturedComponentsToAdd; - - return item; - case >= Protocol18Handler.MC_1_13_2_Version: - { - var itemPresent = ReadNextBool(cache); - - if (!itemPresent) - return null; - - itemId = ReadNextVarInt(cache); - - if (itemId == -1) - return null; - - var type = itemPalette.FromId(itemId); - itemCount = ReadNextByte(cache); - nbt = ReadNextNbt(cache); - return new Item(type, itemCount, itemId, nbt); - } - case >= Protocol18Handler.MC_1_13_Version: - { - itemId = ReadNextShort(cache); - - if (itemId == -1) - return null; - - var type = itemPalette.FromId(itemId); - itemCount = ReadNextByte(cache); - nbt = ReadNextNbt(cache); - return new Item(type, itemCount, itemId, nbt); - } - default: - { - itemId = ReadNextShort(cache); - - if (itemId == -1) - return null; - - itemCount = ReadNextByte(cache); - var data = ReadNextShort(cache); - nbt = ReadNextNbt(cache); - - // For 1.8 - 1.12.2 we combine Item Id and Item Data/Damage to a single value using: (id << 16) | data - return new Item(itemPalette.FromId((itemId << 16) | (ushort)data), itemCount, data, nbt); - } - } - } - - private void ReadNextDetail(Queue cache) - { - var potionEffectId = ReadNextVarInt(cache); - - // Details - var potionEffectAmplifier = ReadNextVarInt(cache); - var duration = ReadNextVarInt(cache); // -1 for infinite - var ambient = ReadNextBool(cache); - var showParticles = ReadNextBool(cache); - var showIcon = ReadNextBool(cache); - var hasHiddenEffect = ReadNextBool(cache); - - if (hasHiddenEffect) - { - ReadNextDetail(cache); - } - } - - private static string GetQueuePreview(Queue cache, int maxBytes) - { - if (cache.Count == 0) - return ""; - - var bytes = cache.ToArray(); - var length = Math.Min(bytes.Length, maxBytes); - var preview = new StringBuilder(length * 3); - - for (var i = 0; i < length; i++) - { - if (i > 0) - preview.Append(' '); - - preview.Append(bytes[i].ToString("X2")); - } - - if (bytes.Length > maxBytes) - preview.Append(" ..."); - - return preview.ToString(); - } - - /// - /// Read entity information from a cache of bytes and remove it from the cache - /// - /// Mappings for converting entity type Ids to EntityType - /// TRUE for living entities (layout differs) - /// Entity information - public Entity ReadNextEntity(Queue cache, EntityPalette entityPalette, bool living) - { - int entityID = ReadNextVarInt(cache); - Guid entityUUID = Guid.Empty; - - // UUID field added in 1.9 + - if (protocolversion >= Protocol18Handler.MC_1_9_Version) - entityUUID = ReadNextUUID(cache); - - // Entity type data type change from byte to varint in 1.13.2 - EntityType entityType; - - if (living) - { - // For living entities the Type field was changed to VarInt from Byte in 1.11 + - if (protocolversion >= Protocol18Handler.MC_1_11_Version) - entityType = entityPalette.FromId(ReadNextVarInt(cache), living); - else entityType = entityPalette.FromId(ReadNextByte(cache), living); - } - else - { - // For non-living entities the Type field was changed to VarInt from Byte in 1.13.2 + - if (protocolversion >= Protocol18Handler.MC_1_13_2_Version) - entityType = entityPalette.FromId(ReadNextVarInt(cache), living); - else entityType = entityPalette.FromId(ReadNextByte(cache), living); - } - - Double entityX, entityY, entityZ; - - if (protocolversion < Protocol18Handler.MC_1_9_Version) - { - entityX = ReadNextInt(cache) / 32.0D; // X - entityY = ReadNextInt(cache) / 32.0D; // Y - entityZ = ReadNextInt(cache) / 32.0D; // Z - } - else - { - entityX = ReadNextDouble(cache); // X - entityY = ReadNextDouble(cache); // Y - entityZ = ReadNextDouble(cache); // Z - } - - int data = -1; - byte entityPitch, entityYaw; - - if (protocolversion >= Protocol18Handler.MC_1_21_9_Version) - { - // 1.21.9+: LpVec3 movement before angles, unified format - ReadNextLpVec3(cache); // Movement (LpVec3) - entityPitch = ReadNextByte(cache); // xRot - entityYaw = ReadNextByte(cache); // yRot - ReadNextByte(cache); // yHeadRot - data = ReadNextVarInt(cache); // Data - } - else if (living) - { - entityYaw = ReadNextByte(cache); // Yaw - entityPitch = ReadNextByte(cache); // Pitch - entityPitch = ReadNextByte(cache); // Head Pitch - - // Velocity (3 shorts) - if (protocolversion < Protocol18Handler.MC_1_9_Version) - { - // no velocity for living entities in <1.9 - } - else - { - ReadNextShort(cache); - ReadNextShort(cache); - ReadNextShort(cache); - } - } - else - { - entityPitch = ReadNextByte(cache); // Pitch - entityYaw = ReadNextByte(cache); // Yaw - - if (protocolversion >= Protocol18Handler.MC_1_19_Version) - entityYaw = ReadNextByte(cache); // Head Yaw - - // Data - data = protocolversion >= Protocol18Handler.MC_1_19_Version - ? ReadNextVarInt(cache) - : ReadNextInt(cache); - - // Velocity (3 shorts) - if (protocolversion < Protocol18Handler.MC_1_9_Version) - { - if (data != 0) - { - ReadNextShort(cache); - ReadNextShort(cache); - ReadNextShort(cache); - } - } - else - { - ReadNextShort(cache); - ReadNextShort(cache); - ReadNextShort(cache); - } - } - - var entity = new Entity(entityID, entityType, new Location(entityX, entityY, entityZ), entityYaw, entityPitch, - data); - entity.UUID = entityUUID; - return entity; - } - - /// - /// Read an uncompressed Named Binary Tag blob and remove it from the cache (internal) - /// - private Dictionary ReadNextNbt(Queue cache, bool root) - { - Dictionary nbtData = new(); - - if (root) - { - if (cache.Peek() == 0) // TAG_End - { - cache.Dequeue(); - return nbtData; - } - - var nextId = cache.Dequeue(); - if (protocolversion < Protocol18Handler.MC_1_20_2_Version) - { - if (nextId is not 10) // TAG_Compound - throw new System.IO.InvalidDataException( - "Failed to decode NBT: Does not start with TAG_Compound"); - - // NBT root name - var rootName = Encoding.ASCII.GetString(ReadData(ReadNextUShort(cache), cache)); - - if (!string.IsNullOrEmpty(rootName)) - nbtData[""] = rootName; - } - // In 1.20.2 The root TAG_Compound doesn't have a name - // In 1.20.3+ The root can be TAG_Compound or TAG_String - else - { - if (nextId is not (10 or 8)) // TAG_Compound or TAG_String - throw new System.IO.InvalidDataException( - "Failed to decode NBT: Does not start with TAG_Compound or TAG_String"); - - // Read TAG_String - if (nextId is 8) - { - var byteArrayLength = ReadNextUShort(cache); - var result = Encoding.UTF8.GetString(ReadData(byteArrayLength, cache)); - - return new Dictionary() - { - { "", result } - }; - } - } - } - - while (true) - { - int fieldType = ReadNextByte(cache); - - if (fieldType == 0) // TAG_End - return nbtData; - - int fieldNameLength = ReadNextUShort(cache); - string fieldName = Encoding.ASCII.GetString(ReadData(fieldNameLength, cache)); - object fieldValue = ReadNbtField(cache, fieldType); - - // This will override previous tags with the same name - nbtData[fieldName] = fieldValue; - } - } - - /// - /// Read a single Named Binary Tag field of the specified type and remove it from the cache - /// - private object ReadNbtField(Queue cache, int fieldType) - { - switch (fieldType) - { - case 1: // TAG_Byte - return ReadNextByte(cache); - case 2: // TAG_Short - return ReadNextShort(cache); - case 3: // TAG_Int - return ReadNextInt(cache); - case 4: // TAG_Long - return ReadNextLong(cache); - case 5: // TAG_Float - return ReadNextFloat(cache); - case 6: // TAG_Double - return ReadNextDouble(cache); - case 7: // TAG_Byte_Array - return ReadData(ReadNextInt(cache), cache); - case 8: // TAG_String - return Encoding.UTF8.GetString(ReadData(ReadNextUShort(cache), cache)); - case 9: // TAG_List - int listType = ReadNextByte(cache); - int listLength = ReadNextInt(cache); - object[] listItems = new object[listLength]; - for (int i = 0; i < listLength; i++) - listItems[i] = ReadNbtField(cache, listType); - return listItems; - case 10: // TAG_Compound - return ReadNextNbt(cache, false); - case 11: // TAG_Int_Array - listType = 3; - listLength = ReadNextInt(cache); - listItems = new object[listLength]; - for (int i = 0; i < listLength; i++) - listItems[i] = ReadNbtField(cache, listType); - return listItems; - case 12: // TAG_Long_Array - listType = 4; - listLength = ReadNextInt(cache); - listItems = new object[listLength]; - for (int i = 0; i < listLength; i++) - listItems[i] = ReadNbtField(cache, listType); - return listItems; - default: - throw new System.IO.InvalidDataException("Failed to decode NBT: Unknown field type " + fieldType); - } - } - - /// - /// Read a Entity MetaData and remove it from the cache - /// - /// - /// - /// - /// - /// - /// - public Dictionary ReadNextMetadata(Queue cache, ItemPalette itemPalette, - EntityMetadataPalette metadataPalette) - { - try - { - Dictionary data = new(); - byte key = ReadNextByte(cache); - byte terminteValue = protocolversion <= Protocol18Handler.MC_1_8_Version - ? (byte)0x7f // 1.8 (https://wiki.vg/index.php?title=Entity_metadata&oldid=6220#Entity_Metadata_Format) - : (byte)0xff; // 1.9+ - - while (key != terminteValue) - { - int typeId = protocolversion <= Protocol18Handler.MC_1_8_Version - ? key >> 5 // 1.8 - : ReadNextVarInt(cache); // 1.9+ - - EntityMetaDataType type; - try - { - type = metadataPalette.GetDataType(typeId); - } - catch (KeyNotFoundException) - { - throw new System.IO.InvalidDataException("Unknown Metadata Type ID " + typeId + - ". Is this up to date for new MC Version?"); - } - - if (protocolversion <= Protocol18Handler.MC_1_8_Version) - key = (byte)(key & 0x1f); - - // Value's data type is depended on Type - object? value = null; - - switch (type) - { - case EntityMetaDataType.Short: // 1.8 only - value = ReadNextShort(cache); - break; - case EntityMetaDataType.Int: // 1.8 only - value = ReadNextInt(cache); - break; - case EntityMetaDataType.Vector3Int: // 1.8 only - value = new List() - { - ReadNextInt(cache), - ReadNextInt(cache), - ReadNextInt(cache), - }; - break; - case EntityMetaDataType.Byte: // byte - value = ReadNextByte(cache); - break; - case EntityMetaDataType.VarInt: // VarInt - value = ReadNextVarInt(cache); - break; - case EntityMetaDataType.VarLong: // Long - value = ReadNextVarLong(cache); - break; - case EntityMetaDataType.Float: // Float - value = ReadNextFloat(cache); - break; - case EntityMetaDataType.String: // String - value = ReadNextString(cache); - break; - case EntityMetaDataType.Chat: // Chat - value = ReadNextChat(cache); - break; - case EntityMetaDataType.OptionalChat: // Optional Chat - if (ReadNextBool(cache)) - value = ReadNextChat(cache); - break; - case EntityMetaDataType.Slot: // Slot - value = ReadNextItemSlot(cache, itemPalette); - break; - case EntityMetaDataType.Boolean: // Boolean - value = ReadNextBool(cache); - break; - case EntityMetaDataType.Rotation: // Rotation (3x floats) - value = new List - { - ReadNextFloat(cache), - ReadNextFloat(cache), - ReadNextFloat(cache) - }; - break; - case EntityMetaDataType.Position: // Position - value = ReadNextLocation(cache); - break; - case EntityMetaDataType.OptionalPosition: // Optional Position - if (ReadNextBool(cache)) - { - value = ReadNextLocation(cache); - } - - break; - case EntityMetaDataType.Direction: // Direction (VarInt) - value = ReadNextVarInt(cache); - break; - case EntityMetaDataType.OptionalUuid: // Optional UUID - case EntityMetaDataType.OptionalLivingEntityReference: // Optional Living Entity Reference (1.21.5+, same wire format) - if (ReadNextBool(cache)) - { - value = ReadNextUUID(cache); - } - - break; - case EntityMetaDataType.BlockId: // BlockID (VarInt) - value = ReadNextVarInt(cache); - break; - case EntityMetaDataType.OptionalBlockId: // Optional BlockID (VarInt) - value = ReadNextVarInt(cache); - break; - case EntityMetaDataType.Nbt: // NBT - value = ReadNextNbt(cache); - break; - case EntityMetaDataType.Particle: // Particle - ReadParticleData(cache, itemPalette); - break; - case EntityMetaDataType.Particles: // List of Particle (1.20.6+) - int particleCount = ReadNextVarInt(cache); - for (int i = 0; i < particleCount; i++) - ReadParticleData(cache, itemPalette); - break; - case EntityMetaDataType.VillagerData: // Villager Data (3x VarInt) - value = new List - { - ReadNextVarInt(cache), - ReadNextVarInt(cache), - ReadNextVarInt(cache) - }; - break; - case EntityMetaDataType.OptionalVarInt: // Optional VarInt - - if (protocolversion < Protocol18Handler.MC_1_20_6_Version) - { - if (ReadNextBool(cache)) - value = ReadNextVarInt(cache); - } - else value = ReadNextVarInt(cache); - - break; - case EntityMetaDataType.Pose: // Pose - value = ReadNextVarInt(cache); - break; - case EntityMetaDataType.CatVariant: // Cat Variant - case EntityMetaDataType.CatSoundVariant: // Cat Sound Variant (26.1+) - value = ReadNextVarInt(cache); - break; - case EntityMetaDataType.CowVariant: // Cow Variant (1.21.5+) - case EntityMetaDataType.CowSoundVariant: // Cow Sound Variant (26.1+) - case EntityMetaDataType.WolfVariant: // Wolf Variant (1.20.6+) - case EntityMetaDataType.WolfSoundVariant: // Wolf Sound Variant (1.21.5+) - value = ReadNextVarInt(cache); - break; - case EntityMetaDataType.FrogVariant: // Frog Variant - case EntityMetaDataType.PigVariant: // Pig Variant (1.21.5+) - case EntityMetaDataType.PigSoundVariant: // Pig Sound Variant (26.1+) - case EntityMetaDataType.ChickenVariant: // Chicken Variant (1.21.5+) - case EntityMetaDataType.ChickenSoundVariant: // Chicken Sound Variant (26.1+) - value = ReadNextVarInt(cache); - break; - case EntityMetaDataType.GlobalPosition: // GlobalPos - // Dimension and blockPos, currently not in use - value = new Tuple(ReadNextString(cache), ReadNextLocation(cache)); - break; - case EntityMetaDataType.OptionalGlobalPosition: - // FIXME: wiki.vg is bool + string + location - // but minecraft-data is bool + string - if (ReadNextBool(cache)) - { - // Dimension and blockPos, currently not in use - value = new Tuple(ReadNextString(cache), ReadNextLocation(cache)); - } - - break; - case EntityMetaDataType.PaintingVariant: // Painting Variant - value = ReadNextVarInt(cache); - break; - case EntityMetaDataType.SnifferState: // Sniffer state - value = ReadNextVarInt(cache); - break; - case EntityMetaDataType.ArmadilloState: // Armadillo state (1.20.6+) - value = ReadNextVarInt(cache); - break; - case EntityMetaDataType.CopperGolemState: // Copper Golem state (1.21.9+) - case EntityMetaDataType.WeatheringCopperState: // Weathering Copper state (1.21.9+) - value = ReadNextVarInt(cache); - break; - case EntityMetaDataType.ZombieNautilusVariant: // ZombieNautilus Variant (1.21.11+) - case EntityMetaDataType.HumanoidArm: // Humanoid Arm (1.21.11+) - value = ReadNextVarInt(cache); - break; - case EntityMetaDataType.ResolvableProfile: // ResolvableProfile (1.21.9+) - ReadNextResolvableProfile(cache); - break; - case EntityMetaDataType.Vector3: // Vector 3f - value = new List - { - ReadNextFloat(cache), - ReadNextFloat(cache), - ReadNextFloat(cache) - }; - break; - case EntityMetaDataType.Quaternion: // Quaternion - value = new List - { - ReadNextFloat(cache), - ReadNextFloat(cache), - ReadNextFloat(cache), - ReadNextFloat(cache) - }; - break; - } - - data[key] = value; - key = ReadNextByte(cache); - } - - return data; - } - catch (Exception) - { - return new Dictionary(); - } - } - - private static bool HasLpVec3Continuation(int firstByte) => (firstByte & 4) == 4; - - private static double UnpackLpVec3(long packedAxis) - { - return Math.Min((double)(packedAxis & 32767L), 32766.0) * 2.0 / 32766.0 - 1.0; - } - - /// - /// Read and decode an LpVec3 (low-precision vec3) from the cache (1.21.9+). - /// Returned vector is expressed in blocks per tick. - /// - public (double X, double Y, double Z) ReadNextLpVec3Values(Queue cache) - { - int first = ReadNextByte(cache); - if (first == 0) - return (0.0, 0.0, 0.0); - - int second = ReadNextByte(cache); - uint high = (uint)ReadNextInt(cache); - long packed = ((long)high << 16) | (long)(second << 8) | (uint)first; - - long scale = first & 3; - if (HasLpVec3Continuation(first)) - scale |= ((long)ReadNextVarInt(cache) & 0xFFFFFFFFL) << 2; - - return ( - UnpackLpVec3(packed >> 3) * scale, - UnpackLpVec3(packed >> 18) * scale, - UnpackLpVec3(packed >> 33) * scale - ); - } - - /// - /// Read an LpVec3 (low-precision vec3) from the cache (1.21.9+) and discard it. - /// - public void ReadNextLpVec3(Queue cache) - { - ReadNextLpVec3Values(cache); - } - - /// - /// Consume bytes for a ResolvableProfile (1.21.9+). - /// Wire: Either(GameProfile, Partial) + PlayerSkin.Patch - /// - private void ReadNextResolvableProfile(Queue cache) - { - bool isFullProfile = ReadNextBool(cache); // Either flag: true=GameProfile, false=Partial - if (isFullProfile) - { - ReadNextUUID(cache); // UUID - ReadNextString(cache); // player name (max 16 chars) - ReadGameProfileProperties(cache); - } - else - { - // Partial: optional name, optional UUID, properties - if (ReadNextBool(cache)) - ReadNextString(cache); // optional player name - if (ReadNextBool(cache)) - ReadNextUUID(cache); // optional UUID - ReadGameProfileProperties(cache); - } - - // PlayerSkin.Patch: 4 optional fields - // body (optional ResourceLocation string) - if (ReadNextBool(cache)) - ReadNextString(cache); - // cape - if (ReadNextBool(cache)) - ReadNextString(cache); - // elytra - if (ReadNextBool(cache)) - ReadNextString(cache); - // model (optional bool: true=SLIM, false=WIDE) - if (ReadNextBool(cache)) - ReadNextBool(cache); - } - - /// - /// Read GameProfile properties (PropertyMap): VarInt count, then per entry: - /// name string, value string, optional signature string. - /// - private void ReadGameProfileProperties(Queue cache) - { - int count = ReadNextVarInt(cache); - for (int i = 0; i < count; i++) - { - ReadNextString(cache); // property name - ReadNextString(cache); // property value - if (ReadNextBool(cache)) // has signature? - ReadNextString(cache); // signature - } - } - - /// - /// Currently not handled. Reading data only - /// - /// - /// - public void ReadParticleData(Queue cache, ItemPalette itemPalette) - { - if (protocolversion < Protocol18Handler.MC_1_13_Version) - return; - - var particleId = ReadNextVarInt(cache); - - // Documentation: - // 1.19.3+ - https://wiki.vg/index.php?title=Data_types&oldid=17986 - // 1.18 - https://wiki.vg/index.php?title=Data_types&oldid=17180 - // 1.17 - https://wiki.vg/index.php?title=Data_types&oldid=16740 - // 1.15 - https://wiki.vg/index.php?title=Data_types&oldid=15338 - // 1.13 - https://wiki.vg/index.php?title=Data_types&oldid=14271 - - switch (particleId) - { - case 1: // 1.20.6+ - if (protocolversion >= Protocol18Handler.MC_1_20_6_Version) - ReadNextVarInt(cache); // BlockState (minecraft:block) - break; - - case 2: - // 1.18 - if (protocolversion > Protocol18Handler.MC_1_17_1_Version) - ReadNextVarInt(cache); // Block state (minecraft:block before 1.20.6, minecraft:block_marker in 1.20.6+) - break; - case 3: - if (protocolversion is (< Protocol18Handler.MC_1_17_Version or > Protocol18Handler.MC_1_17_1_Version) - and < Protocol18Handler.MC_1_20_6_Version) - ReadNextVarInt( - cache); // Block State (minecraft:block before 1.18, minecraft:block_marker after 1.18 up to 1.20.6) - break; - case 4: - if (protocolversion is Protocol18Handler.MC_1_17_Version or Protocol18Handler.MC_1_17_1_Version) - ReadNextVarInt(cache); // Block State (minecraft:block) - break; - case 11: - // 1.13 - 1.14.4 - if (protocolversion < Protocol18Handler.MC_1_15_Version) - ReadDustParticle(cache); - break; - case 13: - // 1.20.6+ - minecraft:dust - ReadDustParticle(cache); - break; - case 14: - switch (protocolversion) - { - // 1.15 - 1.16.5 and 1.18 - 1.20.4 - case >= Protocol18Handler.MC_1_15_Version and < Protocol18Handler.MC_1_17_Version - or > Protocol18Handler.MC_1_17_1_Version and < Protocol18Handler.MC_1_20_6_Version: - ReadDustParticle(cache); - break; - // 1.20.6+ - case >= Protocol18Handler.MC_1_20_6_Version: - ReadDustParticleColorTransition(cache); - break; - } - - break; - case 15: - switch (protocolversion) - { - case Protocol18Handler.MC_1_17_Version or Protocol18Handler.MC_1_17_1_Version: - ReadDustParticle(cache); - break; - // 1.18 - 1.20.4 - case > Protocol18Handler.MC_1_17_1_Version and < Protocol18Handler.MC_1_20_6_Version: - ReadDustParticleColorTransition(cache); - break; - } - - break; - case 16: - if (protocolversion is Protocol18Handler.MC_1_17_Version or Protocol18Handler.MC_1_17_1_Version) - ReadDustParticleColorTransition(cache); - break; - case 20: - // 1.20.6+ - if (protocolversion >= Protocol18Handler.MC_1_20_6_Version) - ReadNextInt(cache); // minecraft:entity_effect - break; - case 23: - // 1.15 - 1.16.5 - if (protocolversion is >= Protocol18Handler.MC_1_15_Version and < Protocol18Handler.MC_1_17_Version) - ReadNextVarInt(cache); // Block State (minecraft:falling_dust) - break; - case 24: - // 1.18 - 1.19.3 - if (protocolversion is > Protocol18Handler.MC_1_17_1_Version - and < Protocol18Handler.MC_1_19_3_Version) - ReadNextVarInt(cache); // Block State (minecraft:falling_dust) - break; - case 25: - // 1.17 - 1.17.1 and 1.19.3 - 1.20.4 - if (protocolversion is Protocol18Handler.MC_1_17_Version or Protocol18Handler.MC_1_17_1_Version - or (>= Protocol18Handler.MC_1_19_3_Version and < Protocol18Handler.MC_1_20_6_Version)) - ReadNextVarInt(cache); // Block State (minecraft:falling_dust) - break; - case 27: - // 1.13 - 1.14.4 - if (protocolversion < Protocol18Handler.MC_1_15_Version) - ReadNextItemSlot(cache, itemPalette); // Item (minecraft:item) - break; - case 28: - // 1.20.6+ - if (protocolversion >= Protocol18Handler.MC_1_20_6_Version) - ReadNextVarInt(cache); // minecraft:falling_dust (BlockState) - break; - case 30: - // 1.19.3 - 1.20.4 - if (protocolversion is >= Protocol18Handler.MC_1_19_3_Version and < Protocol18Handler.MC_1_20_6_Version) - ReadNextFloat(cache); // Roll (minecraft:sculk_charge) - break; - case 32: - // 1.15 - 1.16.5 - if (protocolversion is >= Protocol18Handler.MC_1_15_Version and < Protocol18Handler.MC_1_17_Version) - ReadNextItemSlot(cache, itemPalette); // Item (minecraft:item) - break; - case 35: - // 1.20.6+ - if (protocolversion >= Protocol18Handler.MC_1_20_6_Version) - ReadNextFloat(cache); // minecraft:sculk_charge (Roll) - break; - case 36: - switch (protocolversion) - { - // 1.17 - 1.17.1 - case Protocol18Handler.MC_1_17_Version or Protocol18Handler.MC_1_17_1_Version: - ReadNextItemSlot(cache, itemPalette); // Item (minecraft:item) - break; - // 1.18 - 1.19.2 - case > Protocol18Handler.MC_1_17_1_Version and < Protocol18Handler.MC_1_19_3_Version: - // minecraft:vibration - ReadNextLocation(cache); // Origin (Starting Position) - ReadNextLocation(cache); // Destination (Ending Position) - ReadNextVarInt(cache); // Ticks - break; - } - - break; - case 37: - // minecraft:vibration - 1.17 - 1.17.1 - if (protocolversion is Protocol18Handler.MC_1_17_Version or Protocol18Handler.MC_1_17_1_Version) - { - ReadNextDouble(cache); // Origin X - ReadNextDouble(cache); // Origin Y - ReadNextDouble(cache); // Origin Z - ReadNextDouble(cache); // Destination X - ReadNextDouble(cache); // Destination Y - ReadNextDouble(cache); // Destination Z - ReadNextInt(cache); // Ticks - } - - break; - case 39: - // 1.19.3 - 1.20.4 - if (protocolversion is >= Protocol18Handler.MC_1_19_3_Version and < Protocol18Handler.MC_1_20_6_Version) - ReadNextItemSlot(cache, itemPalette); // Item (minecraft:item) - break; - case 40: - // 1.19.3 - 1.20.4 - if (protocolversion is >= Protocol18Handler.MC_1_19_3_Version and < Protocol18Handler.MC_1_20_6_Version) - { - var positionSourceType = ReadNextString(cache); - switch (positionSourceType) - { - case "minecraft:block": - ReadNextLocation(cache); - break; - case "minecraft:entity": - ReadNextVarInt(cache); - ReadNextFloat(cache); - break; - } - - ReadNextVarInt(cache); - } - - break; - case 44: - // 1.20.6+ - if (protocolversion >= Protocol18Handler.MC_1_20_6_Version) - ReadNextItemSlot(cache, itemPalette); // minecraft:item (Item) - break; - case 45: - // 1.21+ - if (protocolversion >= Protocol18Handler.MC_1_21_Version) - ReadVibration(cache); - break; - case 99: - // 1.20.6+ - if (protocolversion >= Protocol18Handler.MC_1_20_6_Version) - ReadNextVarInt(cache); // minecraft:shriek (Delay) - break; - case 105: - // 1.20.6+ - if (protocolversion >= Protocol18Handler.MC_1_20_6_Version) - ReadNextVarInt(cache); // minecraft:dust_pillar (BlockState) - break; - } - } - - private void ReadDustParticle(Queue cache) - { - ReadNextFloat(cache); // Red - ReadNextFloat(cache); // Green - ReadNextFloat(cache); // Blue - ReadNextFloat(cache); // Scale - } - - private void ReadDustParticleColorTransition(Queue cache) - { - ReadNextFloat(cache); // From red - ReadNextFloat(cache); // From green - ReadNextFloat(cache); // From blue - ReadNextFloat(cache); // To red - ReadNextFloat(cache); // To green - ReadNextFloat(cache); // To blue - ReadNextFloat(cache); // Scale - } - - private void ReadVibration(Queue cache) - { - ReadNextVarInt(cache); // Position Source Type - ReadNextLocation(cache); // Block Position - ReadNextVarInt(cache); // Entity ID - ReadNextFloat(cache); // Entity eye height - ReadNextVarInt(cache); // Ticks - } - - /// - /// Read a single villager trade from a cache of bytes and remove it from the cache - /// - /// The item that was read or NULL for an empty slot - public VillagerTrade ReadNextTrade(Queue cache, ItemPalette itemPalette) - { - Item inputItem1 = ReadNextTradeCost(cache, itemPalette)!; - Item outputItem = ReadNextItemSlot(cache, itemPalette)!; - - Item? inputItem2 = null; - - if (protocolversion >= Protocol18Handler.MC_1_20_6_Version) - inputItem2 = ReadNextOptionalTradeCost(cache, itemPalette); - else if (protocolversion >= Protocol18Handler.MC_1_19_3_Version) - inputItem2 = ReadNextItemSlot(cache, itemPalette); - else - { - if (ReadNextBool(cache)) //check if villager has second item - inputItem2 = ReadNextItemSlot(cache, itemPalette); - } - - bool tradeDisabled = ReadNextBool(cache); - int numberOfTradeUses = ReadNextInt(cache); - int maximumNumberOfTradeUses = ReadNextInt(cache); - int xp = ReadNextInt(cache); - int specialPrice = ReadNextInt(cache); - float priceMultiplier = ReadNextFloat(cache); - int demand = ReadNextInt(cache); - return new VillagerTrade(inputItem1, outputItem, inputItem2, tradeDisabled, numberOfTradeUses, - maximumNumberOfTradeUses, xp, specialPrice, priceMultiplier, demand); - } - - private Item? ReadNextTradeCost(Queue cache, ItemPalette itemPalette) - { - if (protocolversion < Protocol18Handler.MC_1_20_6_Version) - return ReadNextItemSlot(cache, itemPalette); - - var itemId = ReadNextVarInt(cache); - var itemCount = ReadNextVarInt(cache); - var item = new Item(itemPalette.FromId(itemId), itemCount, null); - var componentCount = ReadNextVarInt(cache); - - if (componentCount > 0) - { - var structuredComponentHandler = new StructuredComponentsHandler(protocolversion, this, itemPalette); - var components = new List(componentCount); - for (var i = 0; i < componentCount; i++) - { - var componentTypeId = ReadNextVarInt(cache); - components.Add(structuredComponentHandler.Parse(componentTypeId, cache)); - } - - item.Components = components; - } - - return item; - } - - private Item? ReadNextOptionalTradeCost(Queue cache, ItemPalette itemPalette) - { - if (!ReadNextBool(cache)) - return null; - - return ReadNextTradeCost(cache, itemPalette); - } - - public string ReadNextChat(Queue cache) - { - if (protocolversion >= Protocol18Handler.MC_1_20_4_Version) - { - // Vanilla 1.20.4+ uses NBT here, but Hypixel exposed a JSON-string fallback on the same path. - Queue fallbackCache = new(cache); - try - { - var r = ReadNextNbt(cache); - return ChatParser.ParseText(r); - } - catch (System.IO.InvalidDataException) - { - cache.Clear(); - foreach (var b in fallbackCache) - cache.Enqueue(b); - } - } - - // Read as String - var json = ReadNextString(cache); - return ChatParser.ParseText(json); - } - - /// - /// Build an uncompressed Named Binary Tag blob for sending over the network - /// - /// Dictionary to encode as Nbt - /// Byte array for this NBT tag - public byte[] GetNbt(Dictionary? nbt) - { - return GetNbt(nbt, true); - } - - public byte[] GetNbtTag(object? tag) - { - if (tag is null) - return [0]; - - var tagData = GetNbtField(tag, out var tagType); - var data = new List { tagType }; - data.AddRange(tagData); - return data.ToArray(); - } - - /// - /// Build an uncompressed Named Binary Tag blob for sending over the network (internal) - /// - /// Dictionary to encode as Nbt - /// TRUE if starting a new NBT tag, FALSE if processing a nested NBT tag - /// Byte array for this NBT tag - private byte[] GetNbt(Dictionary? nbt, bool root) - { - if (nbt is null || nbt.Count == 0) - return [0]; // TAG_End - - List bytes = new(); - - if (root) - { - if (protocolversion >= Protocol18Handler.MC_1_20_4_Version - && nbt.Count == 1 - && nbt.TryGetValue("", out var rootVal) && rootVal is string rootStr) - { - bytes.Add(8); // TAG_String - var strBytes = Encoding.UTF8.GetBytes(rootStr); - bytes.AddRange(GetUShort((ushort)strBytes.Length)); - bytes.AddRange(strBytes); - return bytes.ToArray(); - } - - bytes.Add(10); // TAG_Compound - - if (protocolversion < Protocol18Handler.MC_1_20_2_Version) - { - string? rootName = null; - - if (nbt.ContainsKey("")) - rootName = nbt[""] as string; - - rootName ??= ""; - - bytes.AddRange(GetUShort((ushort)rootName.Length)); - bytes.AddRange(Encoding.ASCII.GetBytes(rootName)); - } - } - - foreach (var item in nbt) - { - // Skip NBT root name - if (item.Key == "" && root) - continue; - - byte[] fieldNameLength = GetUShort((ushort)item.Key.Length); - byte[] fieldName = Encoding.ASCII.GetBytes(item.Key); - byte[] fieldData = GetNbtField(item.Value, out byte fieldType); - bytes.Add(fieldType); - bytes.AddRange(fieldNameLength); - bytes.AddRange(fieldName); - bytes.AddRange(fieldData); - } - - bytes.Add(0); // TAG_End - return bytes.ToArray(); - } - - /// - /// Convert a single object into its NBT representation (internal) - /// - /// Object to convert - /// Field type for the passed object - /// Binary data for the passed object - private byte[] GetNbtField(object obj, out byte fieldType) - { - if (obj is byte) - { - fieldType = 1; // TAG_Byte - return new[] { (byte)obj }; - } - else if (obj is short) - { - fieldType = 2; // TAG_Short - return GetShort((short)obj); - } - else if (obj is int) - { - fieldType = 3; // TAG_Int - return GetInt((int)obj); - } - else if (obj is long) - { - fieldType = 4; // TAG_Long - return GetLong((long)obj); - } - else if (obj is float) - { - fieldType = 5; // TAG_Float - return GetFloat((float)obj); - } - else if (obj is double) - { - fieldType = 6; // TAG_Double - return GetDouble((double)obj); - } - else if (obj is byte[]) - { - fieldType = 7; // TAG_Byte_Array - return (byte[])obj; - } - else if (obj is string) - { - fieldType = 8; // TAG_String - byte[] stringBytes = Encoding.UTF8.GetBytes((string)obj); - return ConcatBytes(GetUShort((ushort)stringBytes.Length), stringBytes); - } - else if (obj is object[]) - { - fieldType = 9; // TAG_List - - List list = new((object[])obj); - int arrayLengthTotal = list.Count; - - // Treat empty list as TAG_Byte, length 0 - if (arrayLengthTotal == 0) - return ConcatBytes(new[] { (byte)1 }, GetInt(0)); - - // Encode first list item, retain its type - string firstItemTypeString = list[0].GetType().Name; - byte[] firstItemBytes = GetNbtField(list[0], out byte firstItemType); - list.RemoveAt(0); - - // Encode further list items, check they have the same type - List subsequentItemsBytes = new(); - foreach (object item in list) - { - subsequentItemsBytes.AddRange(GetNbtField(item, out byte subsequentItemType)); - if (subsequentItemType != firstItemType) - throw new System.IO.InvalidDataException( - "GetNbt: Cannot encode object[] list with mixed types: " + firstItemTypeString + ", " + - item.GetType().Name + " into NBT!"); - } - - // Build NBT list: type, length, item array - return ConcatBytes(new[] { firstItemType }, GetInt(arrayLengthTotal), firstItemBytes, - subsequentItemsBytes.ToArray()); - } - else if (obj is Dictionary) - { - fieldType = 10; // TAG_Compound - return GetNbt((Dictionary)obj, false); - } - else if (obj is int[]) - { - fieldType = 11; // TAG_Int_Array - - int[] srcIntList = (int[])obj; - List encIntList = new(); - encIntList.AddRange(GetInt(srcIntList.Length)); - foreach (int item in srcIntList) - encIntList.AddRange(GetInt(item)); - return encIntList.ToArray(); - } - else if (obj is long[]) - { - fieldType = 12; // TAG_Long_Array - - long[] srcLongList = (long[])obj; - List encLongList = new(); - encLongList.AddRange(GetInt(srcLongList.Length)); - foreach (long item in srcLongList) - encLongList.AddRange(GetLong(item)); - return encLongList.ToArray(); - } - else - { - throw new System.IO.InvalidDataException("GetNbt: Cannot encode data type " + obj.GetType().Name + - " into NBT!"); - } - } - - /// - /// Build an integer for sending over the network - /// - /// Integer to encode - /// Byte array for this integer - public static byte[] GetVarInt(int paramInt) - { - List bytes = new(); - while ((paramInt & -128) != 0) - { - bytes.Add((byte)(paramInt & 127 | 128)); - paramInt = (int)(((uint)paramInt) >> 7); - } - - bytes.Add((byte)paramInt); - return bytes.ToArray(); - } - - /// - /// Build an boolean for sending over the network - /// - /// Boolean to encode - /// Byte array for this boolean - public byte[] GetBool(bool paramBool) - { - List bytes = new() - { - Convert.ToByte(paramBool) - }; - return bytes.ToArray(); - } - - /// - /// Get byte array representing a long integer - /// - /// Long to process - /// Array ready to send - public static byte[] GetLong(long number) - { - byte[] theLong = BitConverter.GetBytes(number); - Array.Reverse(theLong); - return theLong; - } - - /// - /// Get byte array representing a long integer - /// - /// Long to process - /// Array ready to send - public static byte[] GetULong(ulong number) - { - byte[] theLong = BitConverter.GetBytes(number); - Array.Reverse(theLong); - return theLong; - } - - /// - /// Get byte array representing an integer - /// - /// Integer to process - /// Array ready to send - public static byte[] GetInt(int number) - { - byte[] theInt = BitConverter.GetBytes(number); - Array.Reverse(theInt); - return theInt; - } - - /// - /// Get byte array representing a short - /// - /// Short to process - /// Array ready to send - public byte[] GetShort(short number) - { - byte[] theShort = BitConverter.GetBytes(number); - Array.Reverse(theShort); - return theShort; - } - - /// - /// Get byte array representing an unsigned short - /// - /// Short to process - /// Array ready to send - public byte[] GetUShort(ushort number) - { - byte[] theShort = BitConverter.GetBytes(number); - Array.Reverse(theShort); - return theShort; - } - - /// - /// Get byte array representing a double - /// - /// Double to process - /// Array ready to send - public byte[] GetDouble(double number) - { - byte[] theDouble = BitConverter.GetBytes(number); - Array.Reverse(theDouble); //Endianness - return theDouble; - } - - /// - /// Get byte array representing a float - /// - /// Floalt to process - /// Array ready to send - public byte[] GetFloat(float number) - { - byte[] theFloat = BitConverter.GetBytes(number); - Array.Reverse(theFloat); //Endianness - return theFloat; - } - - /// - /// Get byte array with length information prepended to it - /// - /// Array to process - /// Array ready to send - public byte[] GetArray(byte[] array) - { - if (protocolversion < Protocol18Handler.MC_1_8_Version) - { - byte[] length = BitConverter.GetBytes((short)array.Length); - Array.Reverse(length); //Endianness - return ConcatBytes(length, array); - } - else return ConcatBytes(GetVarInt(array.Length), array); - } - - /// - /// Get a byte array from the given string for sending over the network, with length information prepended. - /// - /// String to process - /// Array ready to send - public byte[] GetString(string text) - { - byte[] bytes = Encoding.UTF8.GetBytes(text); - return ConcatBytes(GetVarInt(bytes.Length), bytes); - } - - /// - /// Get a byte array representing the given location encoded as an unsigned long - /// - /// - /// A modulo will be applied if the location is outside the following ranges: - /// X: -33,554,432 to +33,554,431 - /// Y: -2,048 to +2,047 - /// Z: -33,554,432 to +33,554,431 - /// - /// Location representation as ulong - public byte[] GetLocation(Location location) - { - byte[] locationBytes; - ulong x = (ulong)(int)Math.Floor(location.X) & 0x3FFFFFF; - ulong y = (ulong)(int)Math.Floor(location.Y) & 0xFFF; - ulong z = (ulong)(int)Math.Floor(location.Z) & 0x3FFFFFF; - if (protocolversion >= Protocol18Handler.MC_1_14_Version) - { - locationBytes = BitConverter.GetBytes((x << 38) | (z << 12) | y); - } - else - locationBytes = BitConverter.GetBytes((x << 38) | (y << 26) | z); - - Array.Reverse(locationBytes); //Endianness - return locationBytes; - } - - /// - /// Get a byte array representing the given item as a HashedStack (1.21.5+). - /// Used for serverbound container_click where the server expects HashedStack instead of full ItemStack. - /// Wire format: Optional<ActualItem> where ActualItem = holderRegistry(item_id) + VarInt(count) + HashedPatchMap. - /// Since MCC doesn't track component hashes, we send an empty HashedPatchMap (0 added, 0 removed). - /// The server will detect the stateId mismatch and resync. - /// - public byte[] GetHashedItemSlot(Item? item, ItemPalette itemPalette) - { - List slotData = new(); - - if (item is null || item.IsEmpty) - { - slotData.AddRange(GetBool(false)); - } - else - { - slotData.AddRange(GetBool(true)); - slotData.AddRange(GetVarInt(itemPalette.ToId(item.Type))); - slotData.AddRange(GetVarInt(item.Count)); - slotData.AddRange(GetVarInt(0)); // HashedPatchMap: 0 added components - slotData.AddRange(GetVarInt(0)); // HashedPatchMap: 0 removed components - } - - return slotData.ToArray(); - } - - /// - /// Get a byte array representing the given item as an item slot - /// - /// Item - /// Item Palette - /// Item slot representation - public byte[] GetItemSlot(Item? item, ItemPalette itemPalette) - { - List slotData = new(); - - if (protocolversion >= Protocol18Handler.MC_1_20_6_Version) - { - if (item is null || item.IsEmpty) - { - slotData.AddRange(GetVarInt(0)); - } - else - { - slotData.AddRange(GetVarInt(item.Count)); - slotData.AddRange(GetVarInt(itemPalette.ToId(item.Type))); - - if (item.Components is not null && item.Components.Count > 0) - { - slotData.AddRange(GetVarInt(item.Components.Count)); - slotData.AddRange(GetVarInt(0)); // components to remove - foreach (var component in item.Components) - { - slotData.AddRange(GetVarInt(component.TypeId)); - var serialized = component.Serialize(); - slotData.AddRange(serialized); - } - } - else - { - slotData.AddRange(GetVarInt(0)); // no components to add - slotData.AddRange(GetVarInt(0)); // no components to remove - } - } - } - else if (protocolversion >= Protocol18Handler.MC_1_13_2_Version) - { - if (item is null || item.IsEmpty) - slotData.AddRange(GetBool(false)); - else - { - slotData.AddRange(GetBool(true)); - slotData.AddRange(GetVarInt(itemPalette.ToId(item.Type))); - slotData.Add((byte)item.Count); - slotData.AddRange(GetNbt(item.NBT)); - } - } - else if (protocolversion >= Protocol18Handler.MC_1_13_Version) - { - if (item is null || item.IsEmpty) - slotData.AddRange(GetShort(-1)); - else - { - slotData.AddRange(GetShort((short)itemPalette.ToId(item.Type))); - slotData.Add((byte)item.Count); - slotData.AddRange(GetNbt(item.NBT)); - } - } - else - { - if (item is null || item.IsEmpty) - slotData.AddRange(GetShort(-1)); - else - { - slotData.AddRange(GetShort((short)(itemPalette.ToId(item.Type) >> 16))); - slotData.Add((byte)item.Count); - // Legacy (<1.13) item slot wire format uses a SHORT for item damage/data. - slotData.AddRange(GetShort((short)item.Data)); - slotData.AddRange(GetNbt(item.NBT)); - } - } - - return slotData.ToArray(); - } - - /// - /// Get a byte array representing the given item as a non-empty ItemStackTemplate. - /// - /// Item - /// Item Palette - /// ItemStackTemplate representation - public byte[] GetItemStackTemplate(Item item, ItemPalette itemPalette) - { - List slotData = new(); - - slotData.AddRange(GetVarInt(itemPalette.ToId(item.Type))); - slotData.AddRange(GetVarInt(item.Count)); - - if (item.Components is not null && item.Components.Count > 0) - { - slotData.AddRange(GetVarInt(item.Components.Count)); - slotData.AddRange(GetVarInt(0)); // components to remove - foreach (var component in item.Components) - { - slotData.AddRange(GetVarInt(component.TypeId)); - var serialized = component.Serialize(); - slotData.AddRange(serialized); - } - } - else - { - slotData.AddRange(GetVarInt(0)); // no components to add - slotData.AddRange(GetVarInt(0)); // no components to remove - } - - return slotData.ToArray(); - } - - /// - /// Get a byte array representing an array of item slots - /// - /// Items - /// Item Palette - /// Array of Item slot representations - public byte[] GetSlotsArray(Dictionary items, ItemPalette itemPalette) - { - byte[] slotsArray = new byte[items.Count]; - - foreach (KeyValuePair item in items) - { - slotsArray = ConcatBytes(slotsArray, GetShort((short)item.Key), GetItemSlot(item.Value, itemPalette)); - } - - return slotsArray; - } - - /// - /// Get protocol block face from Direction - /// - /// Direction - /// Block face byte enum - public byte GetBlockFace(Direction direction) - { - return direction switch - { - Direction.Down => 0, - Direction.Up => 1, - Direction.North => 2, - Direction.South => 3, - Direction.West => 4, - Direction.East => 5, - _ => throw new NotImplementedException("Unknown direction: " + direction.ToString()), - }; - } - - /// - /// Get a byte array from the given uuid - /// - /// UUID of Player/Entity - /// UUID representation - public static byte[] GetUUID(Guid UUID) - { - return UUID.ToBigEndianBytes(); - } - - /// - /// Easily append several byte arrays - /// - /// Bytes to append - /// Array containing all the data - public byte[] ConcatBytes(params byte[][] bytes) - { - List result = new(); - foreach (byte[] array in bytes) - result.AddRange(array); - return result.ToArray(); - } - - /// - /// Convert a byte array to an hexadecimal string representation (for debugging purposes) - /// - /// Byte array - /// String representation - public string ByteArrayToString(byte[]? bytes) - { - if (bytes is null) - return "null"; - else - return BitConverter.ToString(bytes).Replace("-", " "); - } - - /// - /// Write LastSeenMessageList - /// - /// Message.LastSeenMessageList - /// Whether the server is in online mode - /// Message.LastSeenMessageList Packet Data - public byte[] GetLastSeenMessageList(Message.LastSeenMessageList msgList, bool isOnlineMode) - { - if (!isOnlineMode) - return GetVarInt(0); // Message list size - else - { - List fields = new(); - fields.AddRange(GetVarInt(msgList.entries.Length)); // Message list size - foreach (Message.LastSeenMessageList.AcknowledgedMessage entry in msgList.entries) - { - fields.AddRange(entry.profileId.ToBigEndianBytes()); // UUID - fields.AddRange(GetVarInt(entry.signature.Length)); // Signature length - fields.AddRange(entry.signature); // Signature data - } - - return fields.ToArray(); - } - } - - /// - /// Write LastSeenMessageList.Acknowledgment - /// - /// Acknowledgment - /// Whether the server is in online mode - /// Acknowledgment Packet Data - public byte[] GetAcknowledgment(Message.LastSeenMessageList.Acknowledgment ack, bool isOnlineMode) - { - List fields = new(); - fields.AddRange(GetLastSeenMessageList(ack.lastSeen, isOnlineMode)); - if (!isOnlineMode || ack.lastReceived is null) - fields.AddRange(GetBool(false)); // Has last received message - else - { - fields.AddRange(GetBool(true)); - fields.AddRange(ack.lastReceived.profileId.ToBigEndianBytes()); // Has last received message - fields.AddRange(GetVarInt(ack.lastReceived.signature.Length)); // Last received message signature length - fields.AddRange(ack.lastReceived.signature); // Last received message signature data - } - - return fields.ToArray(); - } - } -} diff --git a/MinecraftClient/Protocol/Handlers/Forge/FMLHandshakeClientState.cs b/MinecraftClient/Protocol/Handlers/Forge/FMLHandshakeClientState.cs deleted file mode 100755 index 4bc9bfb2f1..0000000000 --- a/MinecraftClient/Protocol/Handlers/Forge/FMLHandshakeClientState.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace MinecraftClient.Protocol.Handlers.Forge -{ - /// - /// Copy of the forge enum for client states. - /// https://github.com/MinecraftForge/MinecraftForge/blob/ebe9b6d4cbc4a5281c386994f1fbda04df5d2e1f/src/main/java/net/minecraftforge/fml/common/network/handshake/FMLHandshakeClientState.java - /// - enum FMLHandshakeClientState : byte - { - START, - HELLO, - WAITINGSERVERDATA, - WAITINGSERVERCOMPLETE, - PENDINGCOMPLETE, - COMPLETE, - DONE, - ERROR - } -} diff --git a/MinecraftClient/Protocol/Handlers/Forge/FMLHandshakeDiscriminator.cs b/MinecraftClient/Protocol/Handlers/Forge/FMLHandshakeDiscriminator.cs deleted file mode 100755 index 6e9bca461a..0000000000 --- a/MinecraftClient/Protocol/Handlers/Forge/FMLHandshakeDiscriminator.cs +++ /dev/null @@ -1,16 +0,0 @@ -namespace MinecraftClient.Protocol.Handlers.Forge -{ - /// - /// Different "discriminator byte" values for the forge handshake. - /// https://github.com/MinecraftForge/MinecraftForge/blob/ebe9b6d4cbc4a5281c386994f1fbda04df5d2e1f/src/main/java/net/minecraftforge/fml/common/network/handshake/FMLHandshakeCodec.java - /// - enum FMLHandshakeDiscriminator : byte - { - ServerHello = 0, - ClientHello = 1, - ModList = 2, - RegistryData = 3, - HandshakeAck = 255, //-1 - HandshakeReset = 254, //-2 - } -} diff --git a/MinecraftClient/Protocol/Handlers/Forge/FMLVersion.cs b/MinecraftClient/Protocol/Handlers/Forge/FMLVersion.cs deleted file mode 100644 index d9980dc3d2..0000000000 --- a/MinecraftClient/Protocol/Handlers/Forge/FMLVersion.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace MinecraftClient.Protocol.Handlers.Forge -{ - /// - /// Version of the FML protocol - /// - /// - enum FMLVersion - { - FML, - FML2, - FML3 - } -} diff --git a/MinecraftClient/Protocol/Handlers/Forge/ForgeInfo.cs b/MinecraftClient/Protocol/Handlers/Forge/ForgeInfo.cs deleted file mode 100755 index 644be909be..0000000000 --- a/MinecraftClient/Protocol/Handlers/Forge/ForgeInfo.cs +++ /dev/null @@ -1,255 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.Forge -{ - /// - /// Contains information about a modded server install. - /// - public class ForgeInfo - { - /// - /// Represents an individual forge mod. - /// - public record ForgeMod(string ModID, string Version) - { - public override string ToString() - { - return ModID + " v" + Version; - } - } - - public List Mods; - internal FMLVersion Version; - - /// - /// Create a new ForgeInfo with the given version. - /// - /// FML version to use - internal ForgeInfo(FMLVersion fmlVersion) - { - switch (fmlVersion) - { - case FMLVersion.FML2: - Mods = new List - { - new ForgeMod("forge", "ANY") - }; - Version = fmlVersion; - break; - case FMLVersion.FML3: - Mods = new List - { - new ForgeMod("forge", "ANY") - }; - Version = fmlVersion; - break; - default: - throw new InvalidOperationException(Translations.error_forgeforce); - } - } - - /// - /// Create a new ForgeInfo from the given data. - /// - /// The modinfo JSON tag. - /// Forge protocol version - internal ForgeInfo(System.Text.Json.Nodes.JsonObject data, FMLVersion fmlVersion) - { - Mods = new List(); - Version = fmlVersion; - - switch (fmlVersion) - { - case FMLVersion.FML: - - // Example ModInfo for Minecraft 1.12 and lower (FML) - - // "modinfo": { - // "type": "FML", - // "modList": [{ - // "modid": "mcp", - // "version": "9.05" - // }, { - // "modid": "FML", - // "version": "8.0.99.99" - // }, { - // "modid": "Forge", - // "version": "11.14.3.1512" - // }, { - // "modid": "rpcraft", - // "version": "Beta 1.3 - 1.8.0" - // }] - // } - - foreach (var mod in data["modList"]!.AsArray()) - { - String modid = mod!["modid"]!.GetStringValue(); - String modversion = mod["version"]!.GetStringValue(); - - Mods.Add(new ForgeMod(modid, modversion)); - } - - break; - - case FMLVersion.FML2: - - // Example ModInfo for Minecraft 1.13 and greater (FML2) - - // "forgeData": { - // "channels": [{ - // "res": "minecraft:unregister", - // "version": "FML2", - // "required": true - // }, { - // "res": "minecraft:register", - // "version": "FML2", - // "required": true - // }], - // "mods": [{ - // "modId": "minecraft", - // "modmarker": "1.15.2" - // }, { - // "modId": "forge", - // "modmarker": "ANY" - // }, { - // "modId": "rats", - // "modmarker": "5.3.2" - // }, { - // "modId": "citadel", - // "modmarker": "1.1.11" - // }], - // "fmlNetworkVersion": 2 - // } - - foreach (var mod in data["mods"]!.AsArray()) - { - String modid = mod!["modId"]!.GetStringValue(); - String modmarker = mod["modmarker"]!.GetStringValue(); - - Mods.Add(new ForgeMod(modid, modmarker)); - } - - break; - case FMLVersion.FML3: - // Example ModInfo for Minecraft 1.18 and greater (FML3) - - // "forgeData": { - // "channels": [], - // "mods": [], - // "truncated": false, // legacy versions see truncated lists, modern versions ignore this truncated flag (binary data has its own) - // "fmlNetworkVersion": 3, - // "d": "ȳ\u0000\u0000ࠨ㐤獋㙖⹌ᦘ̺⸱恤䒸⡑⛧沮婙㨹牥ఈㄵচ₀沮婙㨹牥ఈㄵচ倠⹡岙㜲獥䋊㷍᭳ႇׇ஌᜘㘴娘▅筳ص䰭宛㘲、\u0000ᠸጋ囗湌夜㘲杩棐䐱ᅱ挃☥ోᤗ㌮ఀ׈䬣 坖ɍ䮌ᤘ\r\n旉䠳ዣ◆䲌㜃瑥廮ⷉࠋ–䁠奚Ҵ㔱摜䂸ᅱ獳ౠᡚ㜷汥戊䂸űဓĠ嵛㖱数嫤Ǎ塰䛶ⶎᮚ㞳晲擞ᖝ″ዣ䘆ఋʂ潦令ඕ爈䖔⺁ᥚ⾹潳棤㦥ᬻ挐؅䅀㠹楬ۨ㣄উ瀀渀嬛㘼扩搢䃀熁挂♥\r\n墋㒺摬牜ࣜ䁠嘗湌孛㜴浩惂䠙熙排٥孁㒰ͮ屢Ӏ䠐⚐䷮ᣛ㊴瑳戚䢸熁匒إ஍᜚ܴ䫜巑፻ᚷؠ䀀ㆃ牵䋨㦥ࠫ㋣䗆䂌㨈慲䫬ᖱᮓᘧ汬尚ㆰ٫屲㣄ᆉ恳ಭ川㤷፫擨妅挫♖乮塘 㖱慰\r\n囆䓩\t" - // } - - // 1.18 and greater, the mod list and channel list is compressed to forgeData["d"] for efficiency, - // - Here is how forge encode and decode them: - // https://github.com/MinecraftForge/MinecraftForge/blob/cb12df41e13da576b781be695f80728b9594c25f/src/main/java/net/minecraftforge/network/ServerStatusPing.java#L264 - // - Here is the discussion: - // see https://github.com/MinecraftForge/MinecraftForge/pull/8169 - - string encodedData = data["d"]!.GetStringValue(); - Queue dataPackage = decodeOptimized(encodedData); - DataTypes dataTypes = new DataTypes(Protocol18Handler.MC_1_18_1_Version); - - // - // [ Truncated ][ Bool ] // Unused - // [ Mod Size ][ Unsigned short ] - // - dataTypes.ReadNextBool(dataPackage); // truncated: boolean - var modsSize = dataTypes.ReadNextUShort(dataPackage); - - Dictionary mods = new(); - // Mod Array Definition: - // [ Channel Size And Version Flag ][ VarInt ] // If the value at bit Mask 0x01 is 1, The Mod Version will be ignore. - // // The one-right-shifted int is the Channel List size. - // [ Mod Id ][ String ] - // [ Mod Version ][ Optional String ] // Depends on the Flag above - // [ Channel List ][ Array ] [ Channel Name ][ String ] - // [ Channel Version ][ String ] - // [ Required On Client ][ Bool ] - - for (var i = 0; i < modsSize; i++) - { - var channelSizeAndVersionFlag = dataTypes.ReadNextVarInt(dataPackage); - var channelSize = channelSizeAndVersionFlag >> 1; - - int VERSION_FLAG_IGNORESERVERONLY = 0b1; - var isIgnoreServerOnly = (channelSizeAndVersionFlag & VERSION_FLAG_IGNORESERVERONLY) != 0; - - var modId = dataTypes.ReadNextString(dataPackage); - - string IGNORESERVERONLY = "IGNORED"; - var modVersion = isIgnoreServerOnly ? IGNORESERVERONLY : dataTypes.ReadNextString(dataPackage); - - for (var i1 = 0; i1 < channelSize; i1++) - { - dataTypes.ReadNextString(dataPackage); // channelName - dataTypes.ReadNextString(dataPackage); // channelVersion - dataTypes.ReadNextBool(dataPackage); // requiredOnClient - } - - mods.Add(modId, modVersion); - Mods.Add(new ForgeMod(modId, modVersion)); - } - - // Ignore the left data, which is NonMod Channel List - // [ nonMod Channel Count ][ VarInt ] - // [ nonMod Channel List ][ Array ] [ Channel Name ][ String ] - // [ Channel Version ][ Bool ] - // [ Required On Client ][ Bool ] - - break; - default: - throw new NotImplementedException("FMLVersion '" + fmlVersion + "' not implemented!"); - } - } - - /// - /// Decompress binary data ForgeData["d"] (FML 3) - /// - /// The encoded data. - /// Decoded forge data Queue. - /// - /// 1.18 and greater, the mod list and channel list is compressed for efficiency - /// The code below is converted from forge source code, see: - /// https://github.com/MinecraftForge/MinecraftForge/blob/cb12df41e13da576b781be695f80728b9594c25f/src/main/java/net/minecraftforge/network/ServerStatusPing.java#L361 - /// - private static Queue decodeOptimized(string encodedData) - { - int size0 = encodedData[0]; - int size1 = encodedData[1]; - int size = size0 | (size1 << 15); - - List packageData = new(); - - int stringIndex = 2; - int buffer = 0; - int bitsInBuf = 0; - - while (stringIndex < encodedData.Length) - { - while (bitsInBuf >= 8) - { - packageData.Add((byte)buffer); - buffer >>= 8; - bitsInBuf -= 8; - } - - char c = encodedData[stringIndex]; - buffer |= (c & 0x7FFF) << bitsInBuf; - bitsInBuf += 15; - stringIndex++; - } - - while (packageData.Count < size) - { - packageData.Add((byte)buffer); - buffer >>= 8; - bitsInBuf -= 8; - } - - return new Queue(packageData.ToArray()); - } - } -} diff --git a/MinecraftClient/Protocol/Handlers/Packet/s2c/DeclareCommands.cs b/MinecraftClient/Protocol/Handlers/Packet/s2c/DeclareCommands.cs deleted file mode 100644 index 57f1bb92da..0000000000 --- a/MinecraftClient/Protocol/Handlers/Packet/s2c/DeclareCommands.cs +++ /dev/null @@ -1,785 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.packet.s2c -{ - internal static class DeclareCommands - { - private const byte NodeTypeMask = 0x03; - private const byte NodeExecutableFlag = 0x04; - private const byte NodeRedirectFlag = 0x08; - private const byte NodeCustomSuggestionsFlag = 0x10; - private const byte NodeRestrictedFlag = 0x20; - - private static readonly Dictionary s_argumentTypeCatalog = CreateArgumentTypeCatalog(); - private static readonly ArgumentTypeLayout s_unknownLegacyArgumentType = new("minecraft:unknown"); - - // Generated from tools/gen_command_argument_registry.py with IDE-only registrations excluded. - private static readonly string[] s_modernArgumentTypes1206 = - [ - "brigadier:bool", "brigadier:float", "brigadier:double", "brigadier:integer", "brigadier:long", "brigadier:string", - "entity", "game_profile", "block_pos", "column_pos", "vec3", "vec2", "block_state", "block_predicate", - "item_stack", "item_predicate", "color", "component", "style", "message", "nbt_compound_tag", "nbt_tag", - "nbt_path", "objective", "objective_criteria", "operation", "particle", "angle", "rotation", - "scoreboard_slot", "score_holder", "swizzle", "team", "item_slot", "item_slots", "resource_location", - "function", "entity_anchor", "int_range", "float_range", "dimension", "gamemode", "time", - "resource_or_tag", "resource_or_tag_key", "resource", "resource_key", "template_mirror", - "template_rotation", "heightmap", "loot_table", "loot_predicate", "loot_modifier", "uuid" - ]; - - private static readonly string[] s_modernArgumentTypes1215 = - [ - "brigadier:bool", "brigadier:float", "brigadier:double", "brigadier:integer", "brigadier:long", "brigadier:string", - "entity", "game_profile", "block_pos", "column_pos", "vec3", "vec2", "block_state", "block_predicate", - "item_stack", "item_predicate", "color", "component", "style", "message", "nbt_compound_tag", "nbt_tag", - "nbt_path", "objective", "objective_criteria", "operation", "particle", "angle", "rotation", - "scoreboard_slot", "score_holder", "swizzle", "team", "item_slot", "item_slots", "resource_location", - "function", "entity_anchor", "int_range", "float_range", "dimension", "gamemode", "time", - "resource_or_tag", "resource_or_tag_key", "resource", "resource_key", "resource_selector", - "template_mirror", "template_rotation", "heightmap", "loot_table", "loot_predicate", "loot_modifier", "uuid" - ]; - - private static readonly string[] s_modernArgumentTypes1216 = - [ - "brigadier:bool", "brigadier:float", "brigadier:double", "brigadier:integer", "brigadier:long", "brigadier:string", - "entity", "game_profile", "block_pos", "column_pos", "vec3", "vec2", "block_state", "block_predicate", - "item_stack", "item_predicate", "color", "hex_color", "component", "style", "message", - "nbt_compound_tag", "nbt_tag", "nbt_path", "objective", "objective_criteria", "operation", "particle", - "angle", "rotation", "scoreboard_slot", "score_holder", "swizzle", "team", "item_slot", "item_slots", - "resource_location", "function", "entity_anchor", "int_range", "float_range", "dimension", "gamemode", - "time", "resource_or_tag", "resource_or_tag_key", "resource", "resource_key", "resource_selector", - "template_mirror", "template_rotation", "heightmap", "loot_table", "loot_predicate", "loot_modifier", - "dialog", "uuid" - ]; - - private static int RootIdx = -1; - private static CommandNode[] Nodes = Array.Empty(); - private static bool HasLoadedTree; - internal static string? LastReadError { get; private set; } - - public static bool IsCommandTreeAvailable => HasValidCommandTree(); - - public static void Read(DataTypes dataTypes, Queue packetData, int protocolVersion) - { - Reset(); - ConsoleIO.OnDeclareMinecraftCommand(Array.Empty()); - - try - { - ReadCommandTree(dataTypes, packetData, protocolVersion); - } - catch (Exception ex) - { - LastReadError = ex.ToString(); - Reset(); - } - - ConsoleIO.OnDeclareMinecraftCommand(HasLoadedTree ? ExtractRootCommand() : Array.Empty()); - } - - public static List> CollectSignArguments(string command) - { - List> needSigned = new(); - if (!HasValidCommandTree() || string.IsNullOrEmpty(command)) - return needSigned; - - return TryMatchNode(RootIdx, command, 0, needSigned, out List> matchedArguments) - ? matchedArguments - : []; - } - - private static void ReadCommandTree(DataTypes dataTypes, Queue packetData, int protocolVersion) - { - int count = dataTypes.ReadNextVarInt(packetData); - Nodes = new CommandNode[count]; - - for (int i = 0; i < count; ++i) - { - byte flags = dataTypes.ReadNextByte(packetData); - int[] children = ReadChildIndices(dataTypes, packetData); - int redirectNode = (flags & NodeRedirectFlag) != 0 ? dataTypes.ReadNextVarInt(packetData) : -1; - - CommandNodeKind nodeKind = (CommandNodeKind)(flags & NodeTypeMask); - CommandNode node = nodeKind switch - { - CommandNodeKind.Root => new(flags, children, redirectNode), - CommandNodeKind.Literal => new(flags, children, redirectNode, dataTypes.ReadNextString(packetData)), - CommandNodeKind.Argument => ReadArgumentNode(dataTypes, packetData, protocolVersion, flags, children, redirectNode), - _ => throw new InvalidOperationException($"Unsupported DeclareCommands node type {(byte)nodeKind}.") - }; - - Nodes[i] = node; - } - - RootIdx = dataTypes.ReadNextVarInt(packetData); - HasLoadedTree = IsValidNodeIndex(RootIdx); - } - - private static CommandNode ReadArgumentNode( - DataTypes dataTypes, - Queue packetData, - int protocolVersion, - byte flags, - int[] children, - int redirectNode) - { - string name = dataTypes.ReadNextString(packetData); - int parserId = dataTypes.ReadNextVarInt(packetData); - - if (!TryResolveArgumentTypeLayout(protocolVersion, parserId, out ArgumentTypeLayout layout)) - throw new InvalidOperationException($"Unsupported DeclareCommands argument type id {parserId} for protocol {protocolVersion}."); - - CommandArgumentDescriptor descriptor = ReadArgumentDescriptor(dataTypes, packetData, layout); - string? suggestionsType = (flags & NodeCustomSuggestionsFlag) != 0 ? dataTypes.ReadNextString(packetData) : null; - - return new(flags, children, redirectNode, name, descriptor, suggestionsType, parserId); - } - - private static int[] ReadChildIndices(DataTypes dataTypes, Queue packetData) - { - int childCount = dataTypes.ReadNextVarInt(packetData); - int[] children = new int[childCount]; - - for (int i = 0; i < childCount; ++i) - children[i] = dataTypes.ReadNextVarInt(packetData); - - return children; - } - - private static CommandArgumentDescriptor ReadArgumentDescriptor(DataTypes dataTypes, Queue packetData, ArgumentTypeLayout layout) - { - switch (layout.PayloadKind) - { - case ArgumentPayloadKind.None: - return layout.CreateDescriptor(); - case ArgumentPayloadKind.BrigadierFloat: - ReadNumberBounds(dataTypes, packetData, static (types, data) => types.ReadNextFloat(data)); - return layout.CreateDescriptor(); - case ArgumentPayloadKind.BrigadierDouble: - ReadNumberBounds(dataTypes, packetData, static (types, data) => types.ReadNextDouble(data)); - return layout.CreateDescriptor(); - case ArgumentPayloadKind.BrigadierInteger: - ReadNumberBounds(dataTypes, packetData, static (types, data) => types.ReadNextInt(data)); - return layout.CreateDescriptor(); - case ArgumentPayloadKind.BrigadierLong: - ReadNumberBounds(dataTypes, packetData, static (types, data) => types.ReadNextLong(data)); - return layout.CreateDescriptor(); - case ArgumentPayloadKind.BrigadierString: - ArgumentConsumption consumption = dataTypes.ReadNextVarInt(packetData) switch - { - 0 => ArgumentConsumption.SingleToken, - 1 => ArgumentConsumption.QuotedStringOrWord, - 2 => ArgumentConsumption.GreedyTail, - int stringType => throw new InvalidOperationException($"Unsupported brigadier:string type {stringType}.") - }; - return layout.CreateDescriptor(consumption); - case ArgumentPayloadKind.Entity: - case ArgumentPayloadKind.ScoreHolder: - dataTypes.ReadNextByte(packetData); - return layout.CreateDescriptor(); - case ArgumentPayloadKind.Time: - dataTypes.ReadNextInt(packetData); - return layout.CreateDescriptor(); - case ArgumentPayloadKind.RegistryKey: - case ArgumentPayloadKind.ForgeEnum: - dataTypes.ReadNextString(packetData); - return layout.CreateDescriptor(); - default: - throw new InvalidOperationException($"Unsupported DeclareCommands payload kind {layout.PayloadKind}."); - } - } - - private static void ReadNumberBounds(DataTypes dataTypes, Queue packetData, Func, TValue> readValue) - { - byte flags = dataTypes.ReadNextByte(packetData); - if ((flags & 0x01) != 0) - _ = readValue(dataTypes, packetData); - if ((flags & 0x02) != 0) - _ = readValue(dataTypes, packetData); - } - - private static string[] ExtractRootCommand() - { - if (!HasValidCommandTree()) - return Array.Empty(); - - List commands = new(); - CommandNode root = Nodes[RootIdx]; - - foreach (int child in root.Children) - { - if (!IsValidNodeIndex(child)) - continue; - - string? childName = Nodes[child].Name; - if (!string.IsNullOrEmpty(childName)) - commands.Add(childName); - } - - return commands.ToArray(); - } - - private static bool TryMatchNode( - int nodeIdx, - string command, - int position, - List> signedArguments, - out List> matchedArguments) - { - matchedArguments = signedArguments; - if (!IsValidNodeIndex(nodeIdx)) - return false; - - CommandNode node = Nodes[nodeIdx]; - if (!TryConsumeNode(node, command, position, out int nextPosition, out Tuple? signedCapture)) - return false; - - List> currentArguments = signedArguments; - if (signedCapture is not null) - { - currentArguments = new List>(signedArguments.Count + 1); - currentArguments.AddRange(signedArguments); - currentArguments.Add(signedCapture); - } - - int traversalNodeIdx = ResolveRedirect(nodeIdx); - bool canStopHere = node.IsExecutable || - (traversalNodeIdx != nodeIdx && IsValidNodeIndex(traversalNodeIdx) && Nodes[traversalNodeIdx].IsExecutable); - - if (nextPosition == command.Length) - { - if (canStopHere) - { - matchedArguments = currentArguments; - return true; - } - - return false; - } - - int childPosition = nextPosition; - if (node.Kind != CommandNodeKind.Root) - { - if (command[childPosition] != ' ') - return false; - childPosition++; - } - - return TryMatchChildren(traversalNodeIdx, command, childPosition, currentArguments, out matchedArguments); - } - - private static bool TryMatchChildren( - int nodeIdx, - string command, - int position, - List> signedArguments, - out List> matchedArguments) - { - matchedArguments = signedArguments; - if (!IsValidNodeIndex(nodeIdx)) - return false; - - int[] children = Nodes[nodeIdx].Children; - - for (int pass = 0; pass < 2; ++pass) - { - foreach (int childIdx in children) - { - if (!IsValidNodeIndex(childIdx)) - continue; - - bool isLiteral = Nodes[childIdx].Kind == CommandNodeKind.Literal; - if ((pass == 0 && !isLiteral) || (pass == 1 && isLiteral)) - continue; - - if (TryMatchNode(childIdx, command, position, signedArguments, out matchedArguments)) - return true; - } - } - - return false; - } - - private static bool TryConsumeNode( - CommandNode node, - string command, - int position, - out int nextPosition, - out Tuple? signedCapture) - { - nextPosition = position; - signedCapture = null; - - switch (node.Kind) - { - case CommandNodeKind.Root: - return true; - case CommandNodeKind.Literal: - return TryConsumeLiteral(command, position, node.Name!, out nextPosition); - case CommandNodeKind.Argument: - if (node.Argument is null || !TryConsumeArgument(command, position, node.Argument.Value, out nextPosition)) - return false; - - if (node.Argument.Value.IsSigned) - signedCapture = new Tuple(node.Name!, command[position..nextPosition]); - - return true; - default: - return false; - } - } - - private static bool TryConsumeLiteral(string command, int position, string literal, out int nextPosition) - { - nextPosition = position; - if (position + literal.Length > command.Length) - return false; - - if (string.CompareOrdinal(command, position, literal, 0, literal.Length) != 0) - return false; - - nextPosition = position + literal.Length; - return nextPosition == command.Length || command[nextPosition] == ' '; - } - - private static bool TryConsumeArgument(string command, int position, CommandArgumentDescriptor descriptor, out int nextPosition) - { - nextPosition = position; - - return descriptor.Consumption switch - { - ArgumentConsumption.SingleToken => TryConsumeSingleToken(command, position, out nextPosition), - ArgumentConsumption.QuotedStringOrWord => TryConsumeQuotedStringOrWord(command, position, out nextPosition), - ArgumentConsumption.GreedyTail => TryConsumeGreedyTail(command, position, out nextPosition), - ArgumentConsumption.FixedTokenCount => TryConsumeFixedTokenCount(command, position, descriptor.TokenCount, out nextPosition), - _ => false - }; - } - - private static bool TryConsumeSingleToken(string command, int position, out int nextPosition) - { - nextPosition = position; - if (position >= command.Length) - return false; - - int cursor = position; - while (cursor < command.Length && command[cursor] != ' ') - cursor++; - - nextPosition = cursor; - return cursor > position; - } - - private static bool TryConsumeQuotedStringOrWord(string command, int position, out int nextPosition) - { - nextPosition = position; - if (position >= command.Length) - return false; - - if (command[position] != '"') - return TryConsumeSingleToken(command, position, out nextPosition); - - bool escaped = false; - for (int cursor = position + 1; cursor < command.Length; ++cursor) - { - char current = command[cursor]; - if (escaped) - { - escaped = false; - continue; - } - - if (current == '\\') - { - escaped = true; - continue; - } - - if (current == '"') - { - nextPosition = cursor + 1; - return nextPosition == command.Length || command[nextPosition] == ' '; - } - } - - return false; - } - - private static bool TryConsumeGreedyTail(string command, int position, out int nextPosition) - { - nextPosition = command.Length; - return position < command.Length; - } - - private static bool TryConsumeFixedTokenCount(string command, int position, int tokenCount, out int nextPosition) - { - nextPosition = position; - int cursor = position; - - for (int i = 0; i < tokenCount; ++i) - { - if (!TryConsumeSingleToken(command, cursor, out int tokenEnd)) - return false; - - cursor = tokenEnd; - if (i < tokenCount - 1) - { - if (cursor >= command.Length || command[cursor] != ' ') - return false; - - cursor++; - } - } - - nextPosition = cursor; - return true; - } - - private static int ResolveRedirect(int nodeIdx) - { - if (!IsValidNodeIndex(nodeIdx)) - return -1; - - HashSet visited = new(); - int current = nodeIdx; - - while (IsValidNodeIndex(current) && Nodes[current].RedirectNode >= 0) - { - if (!visited.Add(current)) - return current; - - current = Nodes[current].RedirectNode; - } - - return IsValidNodeIndex(current) ? current : -1; - } - - private static bool TryResolveArgumentTypeLayout(int protocolVersion, int parserId, out ArgumentTypeLayout layout) - { - return protocolVersion >= Protocol18Handler.MC_1_20_6_Version - ? TryResolveModernArgumentTypeLayout(protocolVersion, parserId, out layout) - : TryResolveLegacyArgumentTypeLayout(protocolVersion, parserId, out layout); - } - - private static bool TryResolveModernArgumentTypeLayout(int protocolVersion, int parserId, out ArgumentTypeLayout layout) - { - string[] registry = protocolVersion switch - { - >= Protocol18Handler.MC_1_21_6_Version => s_modernArgumentTypes1216, - >= Protocol18Handler.MC_1_21_5_Version => s_modernArgumentTypes1215, - _ => s_modernArgumentTypes1206 - }; - - if (parserId < 0 || parserId >= registry.Length) - { - layout = default; - return false; - } - - return s_argumentTypeCatalog.TryGetValue(ToCanonicalArgumentTypeName(registry[parserId]), out layout); - } - - private static bool TryResolveLegacyArgumentTypeLayout(int protocolVersion, int parserId, out ArgumentTypeLayout layout) - { - string? name; - - if (protocolVersion <= Protocol18Handler.MC_1_19_2_Version) - { - name = parserId switch - { - 1 => "brigadier:float", - 2 => "brigadier:double", - 3 => "brigadier:integer", - 4 => "brigadier:long", - 5 => "brigadier:string", - 6 => "minecraft:entity", - 8 => "minecraft:block_pos", - 9 => "minecraft:column_pos", - 10 => "minecraft:vec3", - 11 => "minecraft:vec2", - 18 => "minecraft:message", - 27 => "minecraft:rotation", - 29 => "minecraft:score_holder", - 43 => "minecraft:resource_or_tag", - 44 => "minecraft:resource", - 50 => "forge:enum", - _ => null - }; - } - else if (protocolVersion <= Protocol18Handler.MC_1_19_3_Version) - { - name = parserId switch - { - 1 => "brigadier:float", - 2 => "brigadier:double", - 3 => "brigadier:integer", - 4 => "brigadier:long", - 5 => "brigadier:string", - 6 => "minecraft:entity", - 8 => "minecraft:block_pos", - 9 => "minecraft:column_pos", - 10 => "minecraft:vec3", - 11 => "minecraft:vec2", - 18 => "minecraft:message", - 27 => "minecraft:rotation", - 29 => "minecraft:score_holder", - 41 => "minecraft:resource_or_tag", - 42 => "minecraft:resource_or_tag_key", - 43 => "minecraft:resource", - 44 => "minecraft:resource_key", - 50 => "forge:enum", - _ => null - }; - } - else if (protocolVersion <= Protocol18Handler.MC_1_20_2_Version) - { - name = parserId switch - { - 1 => "brigadier:float", - 2 => "brigadier:double", - 3 => "brigadier:integer", - 4 => "brigadier:long", - 5 => "brigadier:string", - 6 => "minecraft:entity", - 8 => "minecraft:block_pos", - 9 => "minecraft:column_pos", - 10 => "minecraft:vec3", - 11 => "minecraft:vec2", - 18 => "minecraft:message", - 27 => "minecraft:rotation", - 29 => "minecraft:score_holder", - 40 => "minecraft:time", - 41 => "minecraft:resource_or_tag", - 42 => "minecraft:resource_or_tag_key", - 43 => "minecraft:resource", - 44 => "minecraft:resource_key", - 50 when protocolVersion == Protocol18Handler.MC_1_19_4_Version => "forge:enum", - 51 when protocolVersion is >= Protocol18Handler.MC_1_20_Version and <= Protocol18Handler.MC_1_20_2_Version => "forge:enum", - _ => null - }; - } - else - { - name = parserId switch - { - 1 => "brigadier:float", - 2 => "brigadier:double", - 3 => "brigadier:integer", - 4 => "brigadier:long", - 5 => "brigadier:string", - 6 => "minecraft:entity", - 8 => "minecraft:block_pos", - 9 => "minecraft:column_pos", - 10 => "minecraft:vec3", - 11 => "minecraft:vec2", - 18 or 19 => "minecraft:message", - 27 => "minecraft:rotation", - 30 => "minecraft:score_holder", - 41 => "minecraft:time", - 42 => "minecraft:resource_or_tag", - 43 => "minecraft:resource_or_tag_key", - 44 => "minecraft:resource", - 45 => "minecraft:resource_key", - 52 => "forge:enum", - _ => null - }; - } - - if (name is null) - { - layout = s_unknownLegacyArgumentType; - return true; - } - - return s_argumentTypeCatalog.TryGetValue(name, out layout); - } - - private static string ToCanonicalArgumentTypeName(string rawName) - { - return rawName.Contains(':', StringComparison.Ordinal) ? rawName : "minecraft:" + rawName; - } - - private static void Reset() - { - RootIdx = -1; - Nodes = Array.Empty(); - HasLoadedTree = false; - LastReadError = null; - } - - private static bool HasValidCommandTree() - { - return HasLoadedTree && IsValidNodeIndex(RootIdx); - } - - private static bool IsValidNodeIndex(int nodeIdx) - { - return nodeIdx >= 0 && nodeIdx < Nodes.Length; - } - - private static Dictionary CreateArgumentTypeCatalog() - { - Dictionary catalog = new(StringComparer.Ordinal); - - static void Add( - Dictionary items, - string name, - ArgumentPayloadKind payloadKind = ArgumentPayloadKind.None, - ArgumentConsumption consumption = ArgumentConsumption.SingleToken, - int tokenCount = 1, - bool isSigned = false) - { - items[name] = new ArgumentTypeLayout(name, payloadKind, consumption, tokenCount, isSigned); - } - - static void AddFixedTokens(Dictionary items, string name, int tokenCount) - { - Add(items, name, consumption: ArgumentConsumption.FixedTokenCount, tokenCount: tokenCount); - } - - Add(catalog, "brigadier:bool"); - Add(catalog, "brigadier:float", ArgumentPayloadKind.BrigadierFloat); - Add(catalog, "brigadier:double", ArgumentPayloadKind.BrigadierDouble); - Add(catalog, "brigadier:integer", ArgumentPayloadKind.BrigadierInteger); - Add(catalog, "brigadier:long", ArgumentPayloadKind.BrigadierLong); - Add(catalog, "brigadier:string", ArgumentPayloadKind.BrigadierString); - Add(catalog, "minecraft:entity", ArgumentPayloadKind.Entity); - Add(catalog, "minecraft:game_profile"); - AddFixedTokens(catalog, "minecraft:block_pos", 3); - AddFixedTokens(catalog, "minecraft:column_pos", 2); - AddFixedTokens(catalog, "minecraft:vec3", 3); - AddFixedTokens(catalog, "minecraft:vec2", 2); - Add(catalog, "minecraft:block_state"); - Add(catalog, "minecraft:block_predicate"); - Add(catalog, "minecraft:item_stack"); - Add(catalog, "minecraft:item_predicate"); - Add(catalog, "minecraft:color"); - Add(catalog, "minecraft:hex_color"); - Add(catalog, "minecraft:component"); - Add(catalog, "minecraft:style"); - Add(catalog, "minecraft:message", consumption: ArgumentConsumption.GreedyTail, isSigned: true); - Add(catalog, "minecraft:nbt_compound_tag"); - Add(catalog, "minecraft:nbt_tag"); - Add(catalog, "minecraft:nbt_path"); - Add(catalog, "minecraft:objective"); - Add(catalog, "minecraft:objective_criteria"); - Add(catalog, "minecraft:operation"); - Add(catalog, "minecraft:particle"); - Add(catalog, "minecraft:angle"); - AddFixedTokens(catalog, "minecraft:rotation", 2); - Add(catalog, "minecraft:scoreboard_slot"); - Add(catalog, "minecraft:score_holder", ArgumentPayloadKind.ScoreHolder); - Add(catalog, "minecraft:swizzle"); - Add(catalog, "minecraft:team"); - Add(catalog, "minecraft:item_slot"); - Add(catalog, "minecraft:item_slots"); - Add(catalog, "minecraft:resource_location"); - Add(catalog, "minecraft:function"); - Add(catalog, "minecraft:entity_anchor"); - Add(catalog, "minecraft:int_range"); - Add(catalog, "minecraft:float_range"); - Add(catalog, "minecraft:dimension"); - Add(catalog, "minecraft:gamemode"); - Add(catalog, "minecraft:time", ArgumentPayloadKind.Time); - Add(catalog, "minecraft:resource_or_tag", ArgumentPayloadKind.RegistryKey); - Add(catalog, "minecraft:resource_or_tag_key", ArgumentPayloadKind.RegistryKey); - Add(catalog, "minecraft:resource", ArgumentPayloadKind.RegistryKey); - Add(catalog, "minecraft:resource_key", ArgumentPayloadKind.RegistryKey); - Add(catalog, "minecraft:resource_selector", ArgumentPayloadKind.RegistryKey); - Add(catalog, "minecraft:template_mirror"); - Add(catalog, "minecraft:template_rotation"); - Add(catalog, "minecraft:heightmap"); - Add(catalog, "minecraft:loot_table"); - Add(catalog, "minecraft:loot_predicate"); - Add(catalog, "minecraft:loot_modifier"); - Add(catalog, "minecraft:dialog"); - Add(catalog, "minecraft:uuid"); - Add(catalog, "forge:enum", ArgumentPayloadKind.ForgeEnum); - - return catalog; - } - - private enum CommandNodeKind : byte - { - Root = 0, - Literal = 1, - Argument = 2 - } - - private enum ArgumentConsumption - { - SingleToken, - QuotedStringOrWord, - GreedyTail, - FixedTokenCount - } - - private enum ArgumentPayloadKind - { - None, - BrigadierFloat, - BrigadierDouble, - BrigadierInteger, - BrigadierLong, - BrigadierString, - Entity, - ScoreHolder, - Time, - RegistryKey, - ForgeEnum - } - - private sealed record CommandNode( - byte Flags, - int[] Children, - int RedirectNode = -1, - string? Name = null, - CommandArgumentDescriptor? Argument = null, - string? SuggestionsType = null, - int ParserId = -1) - { - public CommandNodeKind Kind => (CommandNodeKind)(Flags & NodeTypeMask); - public bool IsExecutable => (Flags & NodeExecutableFlag) != 0; - public bool IsRestricted => (Flags & NodeRestrictedFlag) != 0; - } - - private readonly record struct CommandArgumentDescriptor( - string Name, - ArgumentConsumption Consumption, - int TokenCount = 1, - bool IsSigned = false); - - private readonly struct ArgumentTypeLayout - { - public string Name { get; } - public ArgumentPayloadKind PayloadKind { get; } - public ArgumentConsumption Consumption { get; } - public int TokenCount { get; } - public bool IsSigned { get; } - - public ArgumentTypeLayout( - string name, - ArgumentPayloadKind payloadKind = ArgumentPayloadKind.None, - ArgumentConsumption consumption = ArgumentConsumption.SingleToken, - int tokenCount = 1, - bool isSigned = false) - { - Name = name; - PayloadKind = payloadKind; - Consumption = consumption; - TokenCount = tokenCount; - IsSigned = isSigned; - } - - public CommandArgumentDescriptor CreateDescriptor() - { - return new CommandArgumentDescriptor(Name, Consumption, TokenCount, IsSigned); - } - - public CommandArgumentDescriptor CreateDescriptor(ArgumentConsumption consumption) - { - return new CommandArgumentDescriptor(Name, consumption, TokenCount, IsSigned); - } - } - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette110.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette110.cs deleted file mode 100644 index 4b51bc5306..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette110.cs +++ /dev/null @@ -1,126 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette110 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.SpawnEntity }, - { 0x01, PacketTypesIn.SpawnExperienceOrb }, - { 0x02, PacketTypesIn.SpawnWeatherEntity }, - { 0x03, PacketTypesIn.SpawnLivingEntity }, - { 0x04, PacketTypesIn.SpawnPainting }, - { 0x05, PacketTypesIn.SpawnPlayer }, - { 0x06, PacketTypesIn.EntityAnimation }, - { 0x07, PacketTypesIn.Statistics }, - { 0x08, PacketTypesIn.BlockBreakAnimation }, - { 0x09, PacketTypesIn.BlockEntityData }, - { 0x0A, PacketTypesIn.BlockAction }, - { 0x0B, PacketTypesIn.BlockChange }, - { 0x0C, PacketTypesIn.BossBar }, - { 0x0D, PacketTypesIn.ServerDifficulty }, - { 0x0E, PacketTypesIn.TabComplete }, - { 0x0F, PacketTypesIn.ChatMessage }, - { 0x10, PacketTypesIn.MultiBlockChange }, - { 0x11, PacketTypesIn.WindowConfirmation }, - { 0x12, PacketTypesIn.CloseWindow }, - { 0x13, PacketTypesIn.OpenWindow }, - { 0x14, PacketTypesIn.WindowItems }, - { 0x15, PacketTypesIn.WindowProperty }, - { 0x16, PacketTypesIn.SetSlot }, - { 0x17, PacketTypesIn.SetCooldown }, - { 0x18, PacketTypesIn.PluginMessage }, - { 0x19, PacketTypesIn.NamedSoundEffect }, - { 0x1A, PacketTypesIn.Disconnect }, - { 0x1B, PacketTypesIn.EntityStatus }, - { 0x1C, PacketTypesIn.Explosion }, - { 0x1D, PacketTypesIn.UnloadChunk }, - { 0x1E, PacketTypesIn.ChangeGameState }, - { 0x1F, PacketTypesIn.KeepAlive }, - { 0x20, PacketTypesIn.ChunkData }, - { 0x21, PacketTypesIn.Effect }, - { 0x22, PacketTypesIn.Particle }, - { 0x23, PacketTypesIn.JoinGame }, - { 0x24, PacketTypesIn.MapData }, - { 0x25, PacketTypesIn.EntityPosition }, - { 0x26, PacketTypesIn.EntityPositionAndRotation }, - { 0x27, PacketTypesIn.EntityRotation }, - { 0x28, PacketTypesIn.EntityMovement }, - { 0x29, PacketTypesIn.VehicleMove }, - { 0x2A, PacketTypesIn.OpenSignEditor }, - { 0x2B, PacketTypesIn.PlayerAbilities }, - { 0x2C, PacketTypesIn.CombatEvent }, - { 0x2D, PacketTypesIn.PlayerInfo }, - { 0x2E, PacketTypesIn.PlayerPositionAndLook }, - { 0x2F, PacketTypesIn.UseBed }, - { 0x30, PacketTypesIn.DestroyEntities }, - { 0x31, PacketTypesIn.RemoveEntityEffect }, - { 0x32, PacketTypesIn.ResourcePackSend }, - { 0x33, PacketTypesIn.Respawn }, - { 0x34, PacketTypesIn.EntityHeadLook }, - { 0x35, PacketTypesIn.WorldBorder }, - { 0x36, PacketTypesIn.Camera }, - { 0x37, PacketTypesIn.HeldItemChange }, - { 0x38, PacketTypesIn.DisplayScoreboard }, - { 0x39, PacketTypesIn.EntityMetadata }, - { 0x3A, PacketTypesIn.AttachEntity }, - { 0x3B, PacketTypesIn.EntityVelocity }, - { 0x3C, PacketTypesIn.EntityEquipment }, - { 0x3D, PacketTypesIn.SetExperience }, - { 0x3E, PacketTypesIn.UpdateHealth }, - { 0x3F, PacketTypesIn.ScoreboardObjective }, - { 0x40, PacketTypesIn.SetPassengers }, - { 0x41, PacketTypesIn.Teams }, - { 0x42, PacketTypesIn.UpdateScore }, - { 0x43, PacketTypesIn.SpawnPosition }, - { 0x44, PacketTypesIn.TimeUpdate }, - { 0x45, PacketTypesIn.Title }, - { 0x46, PacketTypesIn.SoundEffect }, - { 0x47, PacketTypesIn.PlayerListHeaderAndFooter }, - { 0x48, PacketTypesIn.CollectItem }, - { 0x49, PacketTypesIn.EntityTeleport }, - { 0x4A, PacketTypesIn.EntityProperties }, - { 0x4B, PacketTypesIn.EntityEffect }, - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, - { 0x01, PacketTypesOut.TabComplete }, - { 0x02, PacketTypesOut.ChatMessage }, - { 0x03, PacketTypesOut.ClientStatus }, - { 0x04, PacketTypesOut.ClientSettings }, - { 0x05, PacketTypesOut.WindowConfirmation }, - { 0x06, PacketTypesOut.EnchantItem }, - { 0x07, PacketTypesOut.ClickWindow }, - { 0x08, PacketTypesOut.CloseWindow }, - { 0x09, PacketTypesOut.PluginMessage }, - { 0x0A, PacketTypesOut.InteractEntity }, - { 0x0B, PacketTypesOut.KeepAlive }, - { 0x0C, PacketTypesOut.PlayerPosition }, - { 0x0D, PacketTypesOut.PlayerPositionAndRotation }, - { 0x0E, PacketTypesOut.PlayerRotation }, - { 0x0F, PacketTypesOut.PlayerMovement }, - { 0x10, PacketTypesOut.VehicleMove }, - { 0x11, PacketTypesOut.SteerBoat }, - { 0x12, PacketTypesOut.PlayerAbilities }, - { 0x13, PacketTypesOut.PlayerDigging }, - { 0x14, PacketTypesOut.EntityAction }, - { 0x15, PacketTypesOut.SteerVehicle }, - { 0x16, PacketTypesOut.ResourcePackStatus }, - { 0x17, PacketTypesOut.HeldItemChange }, - { 0x18, PacketTypesOut.CreativeInventoryAction }, - { 0x19, PacketTypesOut.UpdateSign }, - { 0x1A, PacketTypesOut.Animation }, - { 0x1B, PacketTypesOut.Spectate }, - { 0x1C, PacketTypesOut.PlayerBlockPlacement }, - { 0x1D, PacketTypesOut.UseItem }, - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette112.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette112.cs deleted file mode 100644 index 9a5fc6855e..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette112.cs +++ /dev/null @@ -1,132 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette112 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.SpawnEntity }, - { 0x01, PacketTypesIn.SpawnExperienceOrb }, - { 0x02, PacketTypesIn.SpawnWeatherEntity }, - { 0x03, PacketTypesIn.SpawnLivingEntity }, - { 0x04, PacketTypesIn.SpawnPainting }, - { 0x05, PacketTypesIn.SpawnPlayer }, - { 0x06, PacketTypesIn.EntityAnimation }, - { 0x07, PacketTypesIn.Statistics }, - { 0x08, PacketTypesIn.BlockBreakAnimation }, - { 0x09, PacketTypesIn.BlockEntityData }, - { 0x0A, PacketTypesIn.BlockAction }, - { 0x0B, PacketTypesIn.BlockChange }, - { 0x0C, PacketTypesIn.BossBar }, - { 0x0D, PacketTypesIn.ServerDifficulty }, - { 0x0E, PacketTypesIn.TabComplete }, - { 0x0F, PacketTypesIn.ChatMessage }, - { 0x10, PacketTypesIn.MultiBlockChange }, - { 0x11, PacketTypesIn.WindowConfirmation }, - { 0x12, PacketTypesIn.CloseWindow }, - { 0x13, PacketTypesIn.OpenWindow }, - { 0x14, PacketTypesIn.WindowItems }, - { 0x15, PacketTypesIn.WindowProperty }, - { 0x16, PacketTypesIn.SetSlot }, - { 0x17, PacketTypesIn.SetCooldown }, - { 0x18, PacketTypesIn.PluginMessage }, - { 0x19, PacketTypesIn.NamedSoundEffect }, - { 0x1A, PacketTypesIn.Disconnect }, - { 0x1B, PacketTypesIn.EntityStatus }, - { 0x1C, PacketTypesIn.Explosion }, - { 0x1D, PacketTypesIn.UnloadChunk }, - { 0x1E, PacketTypesIn.ChangeGameState }, - { 0x1F, PacketTypesIn.KeepAlive }, - { 0x20, PacketTypesIn.ChunkData }, - { 0x21, PacketTypesIn.Effect }, - { 0x22, PacketTypesIn.Particle }, - { 0x23, PacketTypesIn.JoinGame }, - { 0x24, PacketTypesIn.MapData }, - { 0x25, PacketTypesIn.EntityMovement }, - { 0x26, PacketTypesIn.EntityPosition }, - { 0x27, PacketTypesIn.EntityPositionAndRotation }, - { 0x28, PacketTypesIn.EntityRotation }, - { 0x29, PacketTypesIn.VehicleMove }, - { 0x2A, PacketTypesIn.OpenSignEditor }, - { 0x2B, PacketTypesIn.PlayerAbilities }, - { 0x2C, PacketTypesIn.CombatEvent }, - { 0x2D, PacketTypesIn.PlayerInfo }, - { 0x2E, PacketTypesIn.PlayerPositionAndLook }, - { 0x2F, PacketTypesIn.UseBed }, - { 0x30, PacketTypesIn.UnlockRecipes }, - { 0x31, PacketTypesIn.DestroyEntities }, - { 0x32, PacketTypesIn.RemoveEntityEffect }, - { 0x33, PacketTypesIn.ResourcePackSend }, - { 0x34, PacketTypesIn.Respawn }, - { 0x35, PacketTypesIn.EntityHeadLook }, - { 0x36, PacketTypesIn.SelectAdvancementTab }, - { 0x37, PacketTypesIn.WorldBorder }, - { 0x38, PacketTypesIn.Camera }, - { 0x39, PacketTypesIn.HeldItemChange }, - { 0x3A, PacketTypesIn.DisplayScoreboard }, - { 0x3B, PacketTypesIn.EntityMetadata }, - { 0x3C, PacketTypesIn.AttachEntity }, - { 0x3D, PacketTypesIn.EntityVelocity }, - { 0x3E, PacketTypesIn.EntityEquipment }, - { 0x3F, PacketTypesIn.SetExperience }, - { 0x40, PacketTypesIn.UpdateHealth }, - { 0x41, PacketTypesIn.ScoreboardObjective }, - { 0x42, PacketTypesIn.SetPassengers }, - { 0x43, PacketTypesIn.Teams }, - { 0x44, PacketTypesIn.UpdateScore }, - { 0x45, PacketTypesIn.SpawnPosition }, - { 0x46, PacketTypesIn.TimeUpdate }, - { 0x47, PacketTypesIn.Title }, - { 0x48, PacketTypesIn.SoundEffect }, - { 0x49, PacketTypesIn.PlayerListHeaderAndFooter }, - { 0x4A, PacketTypesIn.CollectItem }, - { 0x4B, PacketTypesIn.EntityTeleport }, - { 0x4C, PacketTypesIn.Advancements }, - { 0x4D, PacketTypesIn.EntityProperties }, - { 0x4E, PacketTypesIn.EntityEffect }, - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, - { 0x01, PacketTypesOut.Unknown }, - { 0x02, PacketTypesOut.TabComplete }, - { 0x03, PacketTypesOut.ChatMessage }, - { 0x04, PacketTypesOut.ClientStatus }, - { 0x05, PacketTypesOut.ClientSettings }, - { 0x06, PacketTypesOut.WindowConfirmation }, - { 0x07, PacketTypesOut.EnchantItem }, - { 0x08, PacketTypesOut.ClickWindow }, - { 0x09, PacketTypesOut.CloseWindow }, - { 0x0A, PacketTypesOut.PluginMessage }, - { 0x0B, PacketTypesOut.InteractEntity }, - { 0x0C, PacketTypesOut.KeepAlive }, - { 0x0D, PacketTypesOut.PlayerMovement }, - { 0x0E, PacketTypesOut.PlayerPosition }, - { 0x0F, PacketTypesOut.PlayerPositionAndRotation }, - { 0x10, PacketTypesOut.PlayerRotation }, - { 0x11, PacketTypesOut.VehicleMove }, - { 0x12, PacketTypesOut.SteerBoat }, - { 0x13, PacketTypesOut.PlayerAbilities }, - { 0x14, PacketTypesOut.PlayerDigging }, - { 0x15, PacketTypesOut.EntityAction }, - { 0x16, PacketTypesOut.SteerVehicle }, - { 0x17, PacketTypesOut.RecipeBookData }, - { 0x18, PacketTypesOut.ResourcePackStatus }, - { 0x19, PacketTypesOut.AdvancementTab }, - { 0x1A, PacketTypesOut.HeldItemChange }, - { 0x1B, PacketTypesOut.CreativeInventoryAction }, - { 0x1C, PacketTypesOut.UpdateSign }, - { 0x1D, PacketTypesOut.Animation }, - { 0x1E, PacketTypesOut.Spectate }, - { 0x1F, PacketTypesOut.PlayerBlockPlacement }, - { 0x20, PacketTypesOut.UseItem }, - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1122.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1122.cs deleted file mode 100644 index e1a2e64ce7..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1122.cs +++ /dev/null @@ -1,133 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette1122 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.SpawnEntity }, - { 0x01, PacketTypesIn.SpawnExperienceOrb }, - { 0x02, PacketTypesIn.SpawnWeatherEntity }, - { 0x03, PacketTypesIn.SpawnLivingEntity }, - { 0x04, PacketTypesIn.SpawnPainting }, - { 0x05, PacketTypesIn.SpawnPlayer }, - { 0x06, PacketTypesIn.EntityAnimation }, - { 0x07, PacketTypesIn.Statistics }, - { 0x08, PacketTypesIn.BlockBreakAnimation }, - { 0x09, PacketTypesIn.BlockEntityData }, - { 0x0A, PacketTypesIn.BlockAction }, - { 0x0B, PacketTypesIn.BlockChange }, - { 0x0C, PacketTypesIn.BossBar }, - { 0x0D, PacketTypesIn.ServerDifficulty }, - { 0x0E, PacketTypesIn.TabComplete }, - { 0x0F, PacketTypesIn.ChatMessage }, - { 0x10, PacketTypesIn.MultiBlockChange }, - { 0x11, PacketTypesIn.WindowConfirmation }, - { 0x12, PacketTypesIn.CloseWindow }, - { 0x13, PacketTypesIn.OpenWindow }, - { 0x14, PacketTypesIn.WindowItems }, - { 0x15, PacketTypesIn.WindowProperty }, - { 0x16, PacketTypesIn.SetSlot }, - { 0x17, PacketTypesIn.SetCooldown }, - { 0x18, PacketTypesIn.PluginMessage }, - { 0x19, PacketTypesIn.NamedSoundEffect }, - { 0x1A, PacketTypesIn.Disconnect }, - { 0x1B, PacketTypesIn.EntityStatus }, - { 0x1C, PacketTypesIn.Explosion }, - { 0x1D, PacketTypesIn.UnloadChunk }, - { 0x1E, PacketTypesIn.ChangeGameState }, - { 0x1F, PacketTypesIn.KeepAlive }, - { 0x20, PacketTypesIn.ChunkData }, - { 0x21, PacketTypesIn.Effect }, - { 0x22, PacketTypesIn.Particle }, - { 0x23, PacketTypesIn.JoinGame }, - { 0x24, PacketTypesIn.MapData }, - { 0x25, PacketTypesIn.EntityMovement }, - { 0x26, PacketTypesIn.EntityPosition }, - { 0x27, PacketTypesIn.EntityPositionAndRotation }, - { 0x28, PacketTypesIn.EntityRotation }, - { 0x29, PacketTypesIn.VehicleMove }, - { 0x2A, PacketTypesIn.OpenSignEditor }, - { 0x2B, PacketTypesIn.CraftRecipeResponse }, - { 0x2C, PacketTypesIn.PlayerAbilities }, - { 0x2D, PacketTypesIn.CombatEvent }, - { 0x2E, PacketTypesIn.PlayerInfo }, - { 0x2F, PacketTypesIn.PlayerPositionAndLook }, - { 0x30, PacketTypesIn.UseBed }, - { 0x31, PacketTypesIn.UnlockRecipes }, - { 0x32, PacketTypesIn.DestroyEntities }, - { 0x33, PacketTypesIn.RemoveEntityEffect }, - { 0x34, PacketTypesIn.ResourcePackSend }, - { 0x35, PacketTypesIn.Respawn }, - { 0x36, PacketTypesIn.EntityHeadLook }, - { 0x37, PacketTypesIn.SelectAdvancementTab }, - { 0x38, PacketTypesIn.WorldBorder }, - { 0x39, PacketTypesIn.Camera }, - { 0x3A, PacketTypesIn.HeldItemChange }, - { 0x3B, PacketTypesIn.DisplayScoreboard }, - { 0x3C, PacketTypesIn.EntityMetadata }, - { 0x3D, PacketTypesIn.AttachEntity }, - { 0x3E, PacketTypesIn.EntityVelocity }, - { 0x3F, PacketTypesIn.EntityEquipment }, - { 0x40, PacketTypesIn.SetExperience }, - { 0x41, PacketTypesIn.UpdateHealth }, - { 0x42, PacketTypesIn.ScoreboardObjective }, - { 0x43, PacketTypesIn.SetPassengers }, - { 0x44, PacketTypesIn.Teams }, - { 0x45, PacketTypesIn.UpdateScore }, - { 0x46, PacketTypesIn.SpawnPosition }, - { 0x47, PacketTypesIn.TimeUpdate }, - { 0x48, PacketTypesIn.Title }, - { 0x49, PacketTypesIn.SoundEffect }, - { 0x4A, PacketTypesIn.PlayerListHeaderAndFooter }, - { 0x4B, PacketTypesIn.CollectItem }, - { 0x4C, PacketTypesIn.EntityTeleport }, - { 0x4D, PacketTypesIn.Advancements }, - { 0x4E, PacketTypesIn.EntityProperties }, - { 0x4F, PacketTypesIn.EntityEffect }, - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, - { 0x01, PacketTypesOut.TabComplete }, - { 0x02, PacketTypesOut.ChatMessage }, - { 0x03, PacketTypesOut.ClientStatus }, - { 0x04, PacketTypesOut.ClientSettings }, - { 0x05, PacketTypesOut.WindowConfirmation }, - { 0x06, PacketTypesOut.EnchantItem }, - { 0x07, PacketTypesOut.ClickWindow }, - { 0x08, PacketTypesOut.CloseWindow }, - { 0x09, PacketTypesOut.PluginMessage }, - { 0x0A, PacketTypesOut.InteractEntity }, - { 0x0B, PacketTypesOut.KeepAlive }, - { 0x0C, PacketTypesOut.PlayerMovement }, - { 0x0D, PacketTypesOut.PlayerPosition }, - { 0x0E, PacketTypesOut.PlayerPositionAndRotation }, - { 0x0F, PacketTypesOut.PlayerRotation }, - { 0x10, PacketTypesOut.VehicleMove }, - { 0x11, PacketTypesOut.SteerBoat }, - { 0x12, PacketTypesOut.CraftRecipeRequest }, - { 0x13, PacketTypesOut.PlayerAbilities }, - { 0x14, PacketTypesOut.PlayerDigging }, - { 0x15, PacketTypesOut.EntityAction }, - { 0x16, PacketTypesOut.SteerVehicle }, - { 0x17, PacketTypesOut.RecipeBookData }, - { 0x18, PacketTypesOut.ResourcePackStatus }, - { 0x19, PacketTypesOut.AdvancementTab }, - { 0x1A, PacketTypesOut.HeldItemChange }, - { 0x1B, PacketTypesOut.CreativeInventoryAction }, - { 0x1C, PacketTypesOut.UpdateSign }, - { 0x1D, PacketTypesOut.Animation }, - { 0x1E, PacketTypesOut.Spectate }, - { 0x1F, PacketTypesOut.PlayerBlockPlacement }, - { 0x20, PacketTypesOut.UseItem }, - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette113.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette113.cs deleted file mode 100644 index 7f35edd1b1..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette113.cs +++ /dev/null @@ -1,149 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette113 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.SpawnEntity }, - { 0x01, PacketTypesIn.SpawnExperienceOrb }, - { 0x02, PacketTypesIn.SpawnWeatherEntity }, - { 0x03, PacketTypesIn.SpawnLivingEntity }, - { 0x04, PacketTypesIn.SpawnPainting }, - { 0x05, PacketTypesIn.SpawnPlayer }, - { 0x06, PacketTypesIn.EntityAnimation }, - { 0x07, PacketTypesIn.Statistics }, - { 0x08, PacketTypesIn.BlockBreakAnimation }, - { 0x09, PacketTypesIn.BlockEntityData }, - { 0x0A, PacketTypesIn.BlockAction }, - { 0x0B, PacketTypesIn.BlockChange }, - { 0x0C, PacketTypesIn.BossBar }, - { 0x0D, PacketTypesIn.ServerDifficulty }, - { 0x0E, PacketTypesIn.ChatMessage }, - { 0x0F, PacketTypesIn.MultiBlockChange }, - { 0x10, PacketTypesIn.TabComplete }, - { 0x11, PacketTypesIn.DeclareCommands }, - { 0x12, PacketTypesIn.WindowConfirmation }, - { 0x13, PacketTypesIn.CloseWindow }, - { 0x14, PacketTypesIn.OpenWindow }, - { 0x15, PacketTypesIn.WindowItems }, - { 0x16, PacketTypesIn.WindowProperty }, - { 0x17, PacketTypesIn.SetSlot }, - { 0x18, PacketTypesIn.SetCooldown }, - { 0x19, PacketTypesIn.PluginMessage }, - { 0x1A, PacketTypesIn.NamedSoundEffect }, - { 0x1B, PacketTypesIn.Disconnect }, - { 0x1C, PacketTypesIn.EntityStatus }, - { 0x1D, PacketTypesIn.NBTQueryResponse }, - { 0x1E, PacketTypesIn.Explosion }, - { 0x1F, PacketTypesIn.UnloadChunk }, - { 0x20, PacketTypesIn.ChangeGameState }, - { 0x21, PacketTypesIn.KeepAlive }, - { 0x22, PacketTypesIn.ChunkData }, - { 0x23, PacketTypesIn.Effect }, - { 0x24, PacketTypesIn.Particle }, - { 0x25, PacketTypesIn.JoinGame }, - { 0x26, PacketTypesIn.MapData }, - { 0x27, PacketTypesIn.EntityMovement }, - { 0x28, PacketTypesIn.EntityPosition }, - { 0x29, PacketTypesIn.EntityPositionAndRotation }, - { 0x2A, PacketTypesIn.EntityRotation }, - { 0x2B, PacketTypesIn.VehicleMove }, - { 0x2C, PacketTypesIn.OpenSignEditor }, - { 0x2D, PacketTypesIn.CraftRecipeResponse }, - { 0x2E, PacketTypesIn.PlayerAbilities }, - { 0x2F, PacketTypesIn.CombatEvent }, - { 0x30, PacketTypesIn.PlayerInfo }, - { 0x31, PacketTypesIn.FacePlayer }, - { 0x32, PacketTypesIn.PlayerPositionAndLook }, - { 0x33, PacketTypesIn.UseBed }, - { 0x34, PacketTypesIn.UnlockRecipes }, - { 0x35, PacketTypesIn.DestroyEntities }, - { 0x36, PacketTypesIn.RemoveEntityEffect }, - { 0x37, PacketTypesIn.ResourcePackSend }, - { 0x38, PacketTypesIn.Respawn }, - { 0x39, PacketTypesIn.EntityHeadLook }, - { 0x3A, PacketTypesIn.SelectAdvancementTab }, - { 0x3B, PacketTypesIn.WorldBorder }, - { 0x3C, PacketTypesIn.Camera }, - { 0x3D, PacketTypesIn.HeldItemChange }, - { 0x3E, PacketTypesIn.DisplayScoreboard }, - { 0x3F, PacketTypesIn.EntityMetadata }, - { 0x40, PacketTypesIn.AttachEntity }, - { 0x41, PacketTypesIn.EntityVelocity }, - { 0x42, PacketTypesIn.EntityEquipment }, - { 0x43, PacketTypesIn.SetExperience }, - { 0x44, PacketTypesIn.UpdateHealth }, - { 0x45, PacketTypesIn.ScoreboardObjective }, - { 0x46, PacketTypesIn.SetPassengers }, - { 0x47, PacketTypesIn.Teams }, - { 0x48, PacketTypesIn.UpdateScore }, - { 0x49, PacketTypesIn.SpawnPosition }, - { 0x4A, PacketTypesIn.TimeUpdate }, - { 0x4B, PacketTypesIn.Title }, - { 0x4C, PacketTypesIn.StopSound }, - { 0x4D, PacketTypesIn.SoundEffect }, - { 0x4E, PacketTypesIn.PlayerListHeaderAndFooter }, - { 0x4F, PacketTypesIn.CollectItem }, - { 0x50, PacketTypesIn.EntityTeleport }, - { 0x51, PacketTypesIn.Advancements }, - { 0x52, PacketTypesIn.EntityProperties }, - { 0x53, PacketTypesIn.EntityEffect }, - { 0x54, PacketTypesIn.DeclareRecipes }, - { 0x55, PacketTypesIn.Tags }, - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, - { 0x01, PacketTypesOut.QueryBlockNBT }, - { 0x02, PacketTypesOut.ChatMessage }, - { 0x03, PacketTypesOut.ClientStatus }, - { 0x04, PacketTypesOut.ClientSettings }, - { 0x05, PacketTypesOut.TabComplete }, - { 0x06, PacketTypesOut.WindowConfirmation }, - { 0x07, PacketTypesOut.EnchantItem }, - { 0x08, PacketTypesOut.ClickWindow }, - { 0x09, PacketTypesOut.CloseWindow }, - { 0x0A, PacketTypesOut.PluginMessage }, - { 0x0B, PacketTypesOut.EditBook }, - { 0x0C, PacketTypesOut.EntityNBTRequest }, - { 0x0D, PacketTypesOut.InteractEntity }, - { 0x0E, PacketTypesOut.KeepAlive }, - { 0x0F, PacketTypesOut.PlayerMovement }, - { 0x10, PacketTypesOut.PlayerPosition }, - { 0x11, PacketTypesOut.PlayerPositionAndRotation }, - { 0x12, PacketTypesOut.PlayerRotation }, - { 0x13, PacketTypesOut.VehicleMove }, - { 0x14, PacketTypesOut.SteerBoat }, - { 0x15, PacketTypesOut.PickItem }, - { 0x16, PacketTypesOut.CraftRecipeRequest }, - { 0x17, PacketTypesOut.PlayerAbilities }, - { 0x18, PacketTypesOut.PlayerDigging }, - { 0x19, PacketTypesOut.EntityAction }, - { 0x1A, PacketTypesOut.SteerVehicle }, - { 0x1B, PacketTypesOut.RecipeBookData }, - { 0x1C, PacketTypesOut.NameItem }, - { 0x1D, PacketTypesOut.ResourcePackStatus }, - { 0x1E, PacketTypesOut.AdvancementTab }, - { 0x1F, PacketTypesOut.SelectTrade }, - { 0x20, PacketTypesOut.SetBeaconEffect }, - { 0x21, PacketTypesOut.HeldItemChange }, - { 0x22, PacketTypesOut.UpdateCommandBlock }, - { 0x23, PacketTypesOut.UpdateCommandBlockMinecart }, - { 0x24, PacketTypesOut.CreativeInventoryAction }, - { 0x25, PacketTypesOut.UpdateStructureBlock }, - { 0x26, PacketTypesOut.UpdateSign }, - { 0x27, PacketTypesOut.Animation }, - { 0x28, PacketTypesOut.Spectate }, - { 0x29, PacketTypesOut.PlayerBlockPlacement }, - { 0x2A, PacketTypesOut.UseItem }, - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette114.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette114.cs deleted file mode 100644 index 472bd860b1..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette114.cs +++ /dev/null @@ -1,159 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette114 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.SpawnEntity }, - { 0x01, PacketTypesIn.SpawnExperienceOrb }, - { 0x02, PacketTypesIn.SpawnWeatherEntity }, - { 0x03, PacketTypesIn.SpawnLivingEntity }, - { 0x04, PacketTypesIn.SpawnPainting }, - { 0x05, PacketTypesIn.SpawnPlayer }, - { 0x06, PacketTypesIn.EntityAnimation }, - { 0x07, PacketTypesIn.Statistics }, - { 0x08, PacketTypesIn.BlockBreakAnimation }, - { 0x09, PacketTypesIn.BlockEntityData }, - { 0x0A, PacketTypesIn.BlockAction }, - { 0x0B, PacketTypesIn.BlockChange }, - { 0x0C, PacketTypesIn.BossBar }, - { 0x0D, PacketTypesIn.ServerDifficulty }, - { 0x0E, PacketTypesIn.ChatMessage }, - { 0x0F, PacketTypesIn.MultiBlockChange }, - { 0x10, PacketTypesIn.TabComplete }, - { 0x11, PacketTypesIn.DeclareCommands }, - { 0x12, PacketTypesIn.WindowConfirmation }, - { 0x13, PacketTypesIn.CloseWindow }, - { 0x14, PacketTypesIn.WindowItems }, - { 0x15, PacketTypesIn.WindowProperty }, - { 0x16, PacketTypesIn.SetSlot }, - { 0x17, PacketTypesIn.SetCooldown }, - { 0x18, PacketTypesIn.PluginMessage }, - { 0x19, PacketTypesIn.NamedSoundEffect }, - { 0x1A, PacketTypesIn.Disconnect }, - { 0x1B, PacketTypesIn.EntityStatus }, - { 0x1C, PacketTypesIn.Explosion }, - { 0x1D, PacketTypesIn.UnloadChunk }, - { 0x1E, PacketTypesIn.ChangeGameState }, - { 0x1F, PacketTypesIn.OpenHorseWindow }, - { 0x20, PacketTypesIn.KeepAlive }, - { 0x21, PacketTypesIn.ChunkData }, - { 0x22, PacketTypesIn.Effect }, - { 0x23, PacketTypesIn.Particle }, - { 0x24, PacketTypesIn.UpdateLight }, - { 0x25, PacketTypesIn.JoinGame }, - { 0x26, PacketTypesIn.MapData }, - { 0x27, PacketTypesIn.TradeList }, - { 0x28, PacketTypesIn.EntityPosition }, - { 0x29, PacketTypesIn.EntityPositionAndRotation }, - { 0x2A, PacketTypesIn.EntityRotation }, - { 0x2B, PacketTypesIn.EntityMovement }, - { 0x2C, PacketTypesIn.VehicleMove }, - { 0x2D, PacketTypesIn.OpenBook }, - { 0x2E, PacketTypesIn.OpenWindow }, - { 0x2F, PacketTypesIn.OpenSignEditor }, - { 0x30, PacketTypesIn.CraftRecipeResponse }, - { 0x31, PacketTypesIn.PlayerAbilities }, - { 0x32, PacketTypesIn.CombatEvent }, - { 0x33, PacketTypesIn.PlayerInfo }, - { 0x34, PacketTypesIn.FacePlayer }, - { 0x35, PacketTypesIn.PlayerPositionAndLook }, - { 0x36, PacketTypesIn.UnlockRecipes }, - { 0x37, PacketTypesIn.DestroyEntities }, - { 0x38, PacketTypesIn.RemoveEntityEffect }, - { 0x39, PacketTypesIn.ResourcePackSend }, - { 0x3A, PacketTypesIn.Respawn }, - { 0x3B, PacketTypesIn.EntityHeadLook }, - { 0x3C, PacketTypesIn.SelectAdvancementTab }, - { 0x3D, PacketTypesIn.WorldBorder }, - { 0x3E, PacketTypesIn.Camera }, - { 0x3F, PacketTypesIn.HeldItemChange }, - { 0x40, PacketTypesIn.UpdateViewPosition }, - { 0x41, PacketTypesIn.UpdateViewDistance }, - { 0x42, PacketTypesIn.DisplayScoreboard }, - { 0x43, PacketTypesIn.EntityMetadata }, - { 0x44, PacketTypesIn.AttachEntity }, - { 0x45, PacketTypesIn.EntityVelocity }, - { 0x46, PacketTypesIn.EntityEquipment }, - { 0x47, PacketTypesIn.SetExperience }, - { 0x48, PacketTypesIn.UpdateHealth }, - { 0x49, PacketTypesIn.ScoreboardObjective }, - { 0x4A, PacketTypesIn.SetPassengers }, - { 0x4B, PacketTypesIn.Teams }, - { 0x4C, PacketTypesIn.UpdateScore }, - { 0x4D, PacketTypesIn.SpawnPosition }, - { 0x4E, PacketTypesIn.TimeUpdate }, - { 0x4F, PacketTypesIn.Title }, - { 0x50, PacketTypesIn.EntitySoundEffect }, - { 0x51, PacketTypesIn.SoundEffect }, - { 0x52, PacketTypesIn.StopSound }, - { 0x53, PacketTypesIn.PlayerListHeaderAndFooter }, - { 0x54, PacketTypesIn.NBTQueryResponse }, - { 0x55, PacketTypesIn.CollectItem }, - { 0x56, PacketTypesIn.EntityTeleport }, - { 0x57, PacketTypesIn.Advancements }, - { 0x58, PacketTypesIn.EntityProperties }, - { 0x59, PacketTypesIn.EntityEffect }, - { 0x5A, PacketTypesIn.DeclareRecipes }, - { 0x5B, PacketTypesIn.Tags }, - { 0x5C, PacketTypesIn.AcknowledgePlayerDigging }, - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, - { 0x01, PacketTypesOut.QueryBlockNBT }, - { 0x02, PacketTypesOut.SetDifficulty }, - { 0x03, PacketTypesOut.ChatMessage }, - { 0x04, PacketTypesOut.ClientStatus }, - { 0x05, PacketTypesOut.ClientSettings }, - { 0x06, PacketTypesOut.TabComplete }, - { 0x07, PacketTypesOut.WindowConfirmation }, - { 0x08, PacketTypesOut.ClickWindowButton }, - { 0x09, PacketTypesOut.ClickWindow }, - { 0x0A, PacketTypesOut.CloseWindow }, - { 0x0B, PacketTypesOut.PluginMessage }, - { 0x0C, PacketTypesOut.EditBook }, - { 0x0D, PacketTypesOut.EntityNBTRequest }, - { 0x0E, PacketTypesOut.InteractEntity }, - { 0x0F, PacketTypesOut.KeepAlive }, - { 0x10, PacketTypesOut.LockDifficulty }, - { 0x11, PacketTypesOut.PlayerPosition }, - { 0x12, PacketTypesOut.PlayerPositionAndRotation }, - { 0x13, PacketTypesOut.PlayerRotation }, - { 0x14, PacketTypesOut.PlayerMovement }, - { 0x15, PacketTypesOut.VehicleMove }, - { 0x16, PacketTypesOut.SteerBoat }, - { 0x17, PacketTypesOut.PickItem }, - { 0x18, PacketTypesOut.CraftRecipeRequest }, - { 0x19, PacketTypesOut.PlayerAbilities }, - { 0x1A, PacketTypesOut.PlayerDigging }, - { 0x1B, PacketTypesOut.EntityAction }, - { 0x1C, PacketTypesOut.SteerVehicle }, - { 0x1D, PacketTypesOut.RecipeBookData }, - { 0x1E, PacketTypesOut.NameItem }, - { 0x1F, PacketTypesOut.ResourcePackStatus }, - { 0x20, PacketTypesOut.AdvancementTab }, - { 0x21, PacketTypesOut.SelectTrade }, - { 0x22, PacketTypesOut.SetBeaconEffect }, - { 0x23, PacketTypesOut.HeldItemChange }, - { 0x24, PacketTypesOut.UpdateCommandBlock }, - { 0x25, PacketTypesOut.UpdateCommandBlockMinecart }, - { 0x26, PacketTypesOut.CreativeInventoryAction }, - { 0x27, PacketTypesOut.UpdateJigsawBlock }, - { 0x28, PacketTypesOut.UpdateStructureBlock }, - { 0x29, PacketTypesOut.UpdateSign }, - { 0x2A, PacketTypesOut.Animation }, - { 0x2B, PacketTypesOut.Spectate }, - { 0x2C, PacketTypesOut.PlayerBlockPlacement }, - { 0x2D, PacketTypesOut.UseItem }, - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette115.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette115.cs deleted file mode 100644 index 4ce879b191..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette115.cs +++ /dev/null @@ -1,159 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette115 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.SpawnEntity }, - { 0x01, PacketTypesIn.SpawnExperienceOrb }, - { 0x02, PacketTypesIn.SpawnWeatherEntity }, - { 0x03, PacketTypesIn.SpawnLivingEntity }, - { 0x04, PacketTypesIn.SpawnPainting }, - { 0x05, PacketTypesIn.SpawnPlayer }, - { 0x06, PacketTypesIn.EntityAnimation }, - { 0x07, PacketTypesIn.Statistics }, - { 0x08, PacketTypesIn.AcknowledgePlayerDigging }, - { 0x09, PacketTypesIn.BlockBreakAnimation }, - { 0x0A, PacketTypesIn.BlockEntityData }, - { 0x0B, PacketTypesIn.BlockAction }, - { 0x0C, PacketTypesIn.BlockChange }, - { 0x0D, PacketTypesIn.BossBar }, - { 0x0E, PacketTypesIn.ServerDifficulty }, - { 0x0F, PacketTypesIn.ChatMessage }, - { 0x10, PacketTypesIn.MultiBlockChange }, - { 0x11, PacketTypesIn.TabComplete }, - { 0x12, PacketTypesIn.DeclareCommands }, - { 0x13, PacketTypesIn.WindowConfirmation }, - { 0x14, PacketTypesIn.CloseWindow }, - { 0x15, PacketTypesIn.WindowItems }, - { 0x16, PacketTypesIn.WindowProperty }, - { 0x17, PacketTypesIn.SetSlot }, - { 0x18, PacketTypesIn.SetCooldown }, - { 0x19, PacketTypesIn.PluginMessage }, - { 0x1A, PacketTypesIn.NamedSoundEffect }, - { 0x1B, PacketTypesIn.Disconnect }, - { 0x1C, PacketTypesIn.EntityStatus }, - { 0x1D, PacketTypesIn.Explosion }, - { 0x1E, PacketTypesIn.UnloadChunk }, - { 0x1F, PacketTypesIn.ChangeGameState }, - { 0x20, PacketTypesIn.OpenHorseWindow }, - { 0x21, PacketTypesIn.KeepAlive }, - { 0x22, PacketTypesIn.ChunkData }, - { 0x23, PacketTypesIn.Effect }, - { 0x24, PacketTypesIn.Particle }, - { 0x25, PacketTypesIn.UpdateLight }, - { 0x26, PacketTypesIn.JoinGame }, - { 0x27, PacketTypesIn.MapData }, - { 0x28, PacketTypesIn.TradeList }, - { 0x29, PacketTypesIn.EntityPosition }, - { 0x2A, PacketTypesIn.EntityPositionAndRotation }, - { 0x2B, PacketTypesIn.EntityRotation }, - { 0x2C, PacketTypesIn.EntityMovement }, - { 0x2D, PacketTypesIn.VehicleMove }, - { 0x2E, PacketTypesIn.OpenBook }, - { 0x2F, PacketTypesIn.OpenWindow }, - { 0x30, PacketTypesIn.OpenSignEditor }, - { 0x31, PacketTypesIn.CraftRecipeResponse }, - { 0x32, PacketTypesIn.PlayerAbilities }, - { 0x33, PacketTypesIn.CombatEvent }, - { 0x34, PacketTypesIn.PlayerInfo }, - { 0x35, PacketTypesIn.FacePlayer }, - { 0x36, PacketTypesIn.PlayerPositionAndLook }, - { 0x37, PacketTypesIn.UnlockRecipes }, - { 0x38, PacketTypesIn.DestroyEntities }, - { 0x39, PacketTypesIn.RemoveEntityEffect }, - { 0x3A, PacketTypesIn.ResourcePackSend }, - { 0x3B, PacketTypesIn.Respawn }, - { 0x3C, PacketTypesIn.EntityHeadLook }, - { 0x3D, PacketTypesIn.SelectAdvancementTab }, - { 0x3E, PacketTypesIn.WorldBorder }, - { 0x3F, PacketTypesIn.Camera }, - { 0x40, PacketTypesIn.HeldItemChange }, - { 0x41, PacketTypesIn.UpdateViewPosition }, - { 0x42, PacketTypesIn.UpdateViewDistance }, - { 0x43, PacketTypesIn.DisplayScoreboard }, - { 0x44, PacketTypesIn.EntityMetadata }, - { 0x45, PacketTypesIn.AttachEntity }, - { 0x46, PacketTypesIn.EntityVelocity }, - { 0x47, PacketTypesIn.EntityEquipment }, - { 0x48, PacketTypesIn.SetExperience }, - { 0x49, PacketTypesIn.UpdateHealth }, - { 0x4A, PacketTypesIn.ScoreboardObjective }, - { 0x4B, PacketTypesIn.SetPassengers }, - { 0x4C, PacketTypesIn.Teams }, - { 0x4D, PacketTypesIn.UpdateScore }, - { 0x4E, PacketTypesIn.SpawnPosition }, - { 0x4F, PacketTypesIn.TimeUpdate }, - { 0x50, PacketTypesIn.Title }, - { 0x51, PacketTypesIn.EntitySoundEffect }, - { 0x52, PacketTypesIn.SoundEffect }, - { 0x53, PacketTypesIn.StopSound }, - { 0x54, PacketTypesIn.PlayerListHeaderAndFooter }, - { 0x55, PacketTypesIn.NBTQueryResponse }, - { 0x56, PacketTypesIn.CollectItem }, - { 0x57, PacketTypesIn.EntityTeleport }, - { 0x58, PacketTypesIn.Advancements }, - { 0x59, PacketTypesIn.EntityProperties }, - { 0x5A, PacketTypesIn.EntityEffect }, - { 0x5B, PacketTypesIn.DeclareRecipes }, - { 0x5C, PacketTypesIn.Tags }, - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, - { 0x01, PacketTypesOut.QueryBlockNBT }, - { 0x02, PacketTypesOut.SetDifficulty }, - { 0x03, PacketTypesOut.ChatMessage }, - { 0x04, PacketTypesOut.ClientStatus }, - { 0x05, PacketTypesOut.ClientSettings }, - { 0x06, PacketTypesOut.TabComplete }, - { 0x07, PacketTypesOut.WindowConfirmation }, - { 0x08, PacketTypesOut.ClickWindowButton }, - { 0x09, PacketTypesOut.ClickWindow }, - { 0x0A, PacketTypesOut.CloseWindow }, - { 0x0B, PacketTypesOut.PluginMessage }, - { 0x0C, PacketTypesOut.EditBook }, - { 0x0D, PacketTypesOut.EntityNBTRequest }, - { 0x0E, PacketTypesOut.InteractEntity }, - { 0x0F, PacketTypesOut.KeepAlive }, - { 0x10, PacketTypesOut.LockDifficulty }, - { 0x11, PacketTypesOut.PlayerPosition }, - { 0x12, PacketTypesOut.PlayerPositionAndRotation }, - { 0x13, PacketTypesOut.PlayerRotation }, - { 0x14, PacketTypesOut.PlayerMovement }, - { 0x15, PacketTypesOut.VehicleMove }, - { 0x16, PacketTypesOut.SteerBoat }, - { 0x17, PacketTypesOut.PickItem }, - { 0x18, PacketTypesOut.CraftRecipeRequest }, - { 0x19, PacketTypesOut.PlayerAbilities }, - { 0x1A, PacketTypesOut.PlayerDigging }, - { 0x1B, PacketTypesOut.EntityAction }, - { 0x1C, PacketTypesOut.SteerVehicle }, - { 0x1D, PacketTypesOut.RecipeBookData }, - { 0x1E, PacketTypesOut.NameItem }, - { 0x1F, PacketTypesOut.ResourcePackStatus }, - { 0x20, PacketTypesOut.AdvancementTab }, - { 0x21, PacketTypesOut.SelectTrade }, - { 0x22, PacketTypesOut.SetBeaconEffect }, - { 0x23, PacketTypesOut.HeldItemChange }, - { 0x24, PacketTypesOut.UpdateCommandBlock }, - { 0x25, PacketTypesOut.UpdateCommandBlockMinecart }, - { 0x26, PacketTypesOut.CreativeInventoryAction }, - { 0x27, PacketTypesOut.UpdateJigsawBlock }, - { 0x28, PacketTypesOut.UpdateStructureBlock }, - { 0x29, PacketTypesOut.UpdateSign }, - { 0x2A, PacketTypesOut.Animation }, - { 0x2B, PacketTypesOut.Spectate }, - { 0x2C, PacketTypesOut.PlayerBlockPlacement }, - { 0x2D, PacketTypesOut.UseItem }, - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette116.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette116.cs deleted file mode 100644 index 0d17ba6ca9..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette116.cs +++ /dev/null @@ -1,159 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette116 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.SpawnEntity }, - { 0x01, PacketTypesIn.SpawnExperienceOrb }, - { 0x02, PacketTypesIn.SpawnLivingEntity }, - { 0x03, PacketTypesIn.SpawnPainting }, - { 0x04, PacketTypesIn.SpawnPlayer }, - { 0x05, PacketTypesIn.EntityAnimation }, - { 0x06, PacketTypesIn.Statistics }, - { 0x07, PacketTypesIn.AcknowledgePlayerDigging }, - { 0x08, PacketTypesIn.BlockBreakAnimation }, - { 0x09, PacketTypesIn.BlockEntityData }, - { 0x0A, PacketTypesIn.BlockAction }, - { 0x0B, PacketTypesIn.BlockChange }, - { 0x0C, PacketTypesIn.BossBar }, - { 0x0D, PacketTypesIn.ServerDifficulty }, - { 0x0E, PacketTypesIn.ChatMessage }, - { 0x0F, PacketTypesIn.MultiBlockChange }, - { 0x10, PacketTypesIn.TabComplete }, - { 0x11, PacketTypesIn.DeclareCommands }, - { 0x12, PacketTypesIn.WindowConfirmation }, - { 0x13, PacketTypesIn.CloseWindow }, - { 0x14, PacketTypesIn.WindowItems }, - { 0x15, PacketTypesIn.WindowProperty }, - { 0x16, PacketTypesIn.SetSlot }, - { 0x17, PacketTypesIn.SetCooldown }, - { 0x18, PacketTypesIn.PluginMessage }, - { 0x19, PacketTypesIn.NamedSoundEffect }, - { 0x1A, PacketTypesIn.Disconnect }, - { 0x1B, PacketTypesIn.EntityStatus }, - { 0x1C, PacketTypesIn.Explosion }, - { 0x1D, PacketTypesIn.UnloadChunk }, - { 0x1E, PacketTypesIn.ChangeGameState }, - { 0x1F, PacketTypesIn.OpenHorseWindow }, - { 0x20, PacketTypesIn.KeepAlive }, - { 0x21, PacketTypesIn.ChunkData }, - { 0x22, PacketTypesIn.Effect }, - { 0x23, PacketTypesIn.Particle }, - { 0x24, PacketTypesIn.UpdateLight }, - { 0x25, PacketTypesIn.JoinGame }, - { 0x26, PacketTypesIn.MapData }, - { 0x27, PacketTypesIn.TradeList }, - { 0x28, PacketTypesIn.EntityPosition }, - { 0x29, PacketTypesIn.EntityPositionAndRotation }, - { 0x2A, PacketTypesIn.EntityRotation }, - { 0x2B, PacketTypesIn.EntityMovement }, - { 0x2C, PacketTypesIn.VehicleMove }, - { 0x2D, PacketTypesIn.OpenBook }, - { 0x2E, PacketTypesIn.OpenWindow }, - { 0x2F, PacketTypesIn.OpenSignEditor }, - { 0x30, PacketTypesIn.CraftRecipeResponse }, - { 0x31, PacketTypesIn.PlayerAbilities }, - { 0x32, PacketTypesIn.CombatEvent }, - { 0x33, PacketTypesIn.PlayerInfo }, - { 0x34, PacketTypesIn.FacePlayer }, - { 0x35, PacketTypesIn.PlayerPositionAndLook }, - { 0x36, PacketTypesIn.UnlockRecipes }, - { 0x37, PacketTypesIn.DestroyEntities }, - { 0x38, PacketTypesIn.RemoveEntityEffect }, - { 0x39, PacketTypesIn.ResourcePackSend }, - { 0x3A, PacketTypesIn.Respawn }, - { 0x3B, PacketTypesIn.EntityHeadLook }, - { 0x3C, PacketTypesIn.SelectAdvancementTab }, - { 0x3D, PacketTypesIn.WorldBorder }, - { 0x3E, PacketTypesIn.Camera }, - { 0x3F, PacketTypesIn.HeldItemChange }, - { 0x40, PacketTypesIn.UpdateViewPosition }, - { 0x41, PacketTypesIn.UpdateViewDistance }, - { 0x42, PacketTypesIn.SpawnPosition }, - { 0x43, PacketTypesIn.DisplayScoreboard }, - { 0x44, PacketTypesIn.EntityMetadata }, - { 0x45, PacketTypesIn.AttachEntity }, - { 0x46, PacketTypesIn.EntityVelocity }, - { 0x47, PacketTypesIn.EntityEquipment }, - { 0x48, PacketTypesIn.SetExperience }, - { 0x49, PacketTypesIn.UpdateHealth }, - { 0x4A, PacketTypesIn.ScoreboardObjective }, - { 0x4B, PacketTypesIn.SetPassengers }, - { 0x4C, PacketTypesIn.Teams }, - { 0x4D, PacketTypesIn.UpdateScore }, - { 0x4E, PacketTypesIn.TimeUpdate }, - { 0x4F, PacketTypesIn.Title }, - { 0x50, PacketTypesIn.EntitySoundEffect }, - { 0x51, PacketTypesIn.SoundEffect }, - { 0x52, PacketTypesIn.StopSound }, - { 0x53, PacketTypesIn.PlayerListHeaderAndFooter }, - { 0x54, PacketTypesIn.NBTQueryResponse }, - { 0x55, PacketTypesIn.CollectItem }, - { 0x56, PacketTypesIn.EntityTeleport }, - { 0x57, PacketTypesIn.Advancements }, - { 0x58, PacketTypesIn.EntityProperties }, - { 0x59, PacketTypesIn.EntityEffect }, - { 0x5A, PacketTypesIn.DeclareRecipes }, - { 0x5B, PacketTypesIn.Tags }, - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, - { 0x01, PacketTypesOut.QueryBlockNBT }, - { 0x02, PacketTypesOut.SetDifficulty }, - { 0x03, PacketTypesOut.ChatMessage }, - { 0x04, PacketTypesOut.ClientStatus }, - { 0x05, PacketTypesOut.ClientSettings }, - { 0x06, PacketTypesOut.TabComplete }, - { 0x07, PacketTypesOut.WindowConfirmation }, - { 0x08, PacketTypesOut.ClickWindowButton }, - { 0x09, PacketTypesOut.ClickWindow }, - { 0x0A, PacketTypesOut.CloseWindow }, - { 0x0B, PacketTypesOut.PluginMessage }, - { 0x0C, PacketTypesOut.EditBook }, - { 0x0D, PacketTypesOut.EntityNBTRequest }, - { 0x0E, PacketTypesOut.InteractEntity }, - { 0x0F, PacketTypesOut.GenerateStructure }, - { 0x10, PacketTypesOut.KeepAlive }, - { 0x11, PacketTypesOut.LockDifficulty }, - { 0x12, PacketTypesOut.PlayerPosition }, - { 0x13, PacketTypesOut.PlayerPositionAndRotation }, - { 0x14, PacketTypesOut.PlayerRotation }, - { 0x15, PacketTypesOut.PlayerMovement }, - { 0x16, PacketTypesOut.VehicleMove }, - { 0x17, PacketTypesOut.SteerBoat }, - { 0x18, PacketTypesOut.PickItem }, - { 0x19, PacketTypesOut.CraftRecipeRequest }, - { 0x1A, PacketTypesOut.PlayerAbilities }, - { 0x1B, PacketTypesOut.PlayerDigging }, - { 0x1C, PacketTypesOut.EntityAction }, - { 0x1D, PacketTypesOut.SteerVehicle }, - { 0x1E, PacketTypesOut.RecipeBookData }, - { 0x1F, PacketTypesOut.NameItem }, - { 0x20, PacketTypesOut.ResourcePackStatus }, - { 0x21, PacketTypesOut.AdvancementTab }, - { 0x22, PacketTypesOut.SelectTrade }, - { 0x23, PacketTypesOut.SetBeaconEffect }, - { 0x24, PacketTypesOut.HeldItemChange }, - { 0x25, PacketTypesOut.UpdateCommandBlock }, - { 0x26, PacketTypesOut.UpdateCommandBlockMinecart }, - { 0x27, PacketTypesOut.CreativeInventoryAction }, - { 0x28, PacketTypesOut.UpdateJigsawBlock }, - { 0x29, PacketTypesOut.UpdateStructureBlock }, - { 0x2A, PacketTypesOut.UpdateSign }, - { 0x2B, PacketTypesOut.Animation }, - { 0x2C, PacketTypesOut.Spectate }, - { 0x2D, PacketTypesOut.PlayerBlockPlacement }, - { 0x2E, PacketTypesOut.UseItem }, - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1162.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1162.cs deleted file mode 100644 index 521fcf2a19..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1162.cs +++ /dev/null @@ -1,160 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette1162 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.SpawnEntity }, - { 0x01, PacketTypesIn.SpawnExperienceOrb }, - { 0x02, PacketTypesIn.SpawnLivingEntity }, - { 0x03, PacketTypesIn.SpawnPainting }, - { 0x04, PacketTypesIn.SpawnPlayer }, - { 0x05, PacketTypesIn.EntityAnimation }, - { 0x06, PacketTypesIn.Statistics }, - { 0x07, PacketTypesIn.AcknowledgePlayerDigging }, - { 0x08, PacketTypesIn.BlockBreakAnimation }, - { 0x09, PacketTypesIn.BlockEntityData }, - { 0x0A, PacketTypesIn.BlockAction }, - { 0x0B, PacketTypesIn.BlockChange }, - { 0x0C, PacketTypesIn.BossBar }, - { 0x0D, PacketTypesIn.ServerDifficulty }, - { 0x0E, PacketTypesIn.ChatMessage }, - { 0x0F, PacketTypesIn.TabComplete }, - { 0x10, PacketTypesIn.DeclareCommands }, - { 0x11, PacketTypesIn.WindowConfirmation }, - { 0x12, PacketTypesIn.CloseWindow }, - { 0x13, PacketTypesIn.WindowItems }, - { 0x14, PacketTypesIn.WindowProperty }, - { 0x15, PacketTypesIn.SetSlot }, - { 0x16, PacketTypesIn.SetCooldown }, - { 0x17, PacketTypesIn.PluginMessage }, - { 0x18, PacketTypesIn.NamedSoundEffect }, - { 0x19, PacketTypesIn.Disconnect }, - { 0x1A, PacketTypesIn.EntityStatus }, - { 0x1B, PacketTypesIn.Explosion }, - { 0x1C, PacketTypesIn.UnloadChunk }, - { 0x1D, PacketTypesIn.ChangeGameState }, - { 0x1E, PacketTypesIn.OpenHorseWindow }, - { 0x1F, PacketTypesIn.KeepAlive }, - { 0x20, PacketTypesIn.ChunkData }, - { 0x21, PacketTypesIn.Effect }, - { 0x22, PacketTypesIn.Particle }, - { 0x23, PacketTypesIn.UpdateLight }, - { 0x24, PacketTypesIn.JoinGame }, - { 0x25, PacketTypesIn.MapData }, - { 0x26, PacketTypesIn.TradeList }, - { 0x27, PacketTypesIn.EntityPosition }, - { 0x28, PacketTypesIn.EntityPositionAndRotation }, - { 0x29, PacketTypesIn.EntityRotation }, - { 0x2A, PacketTypesIn.EntityMovement }, - { 0x2B, PacketTypesIn.VehicleMove }, - { 0x2C, PacketTypesIn.OpenBook }, - { 0x2D, PacketTypesIn.OpenWindow }, - { 0x2E, PacketTypesIn.OpenSignEditor }, - { 0x2F, PacketTypesIn.CraftRecipeResponse }, - { 0x30, PacketTypesIn.PlayerAbilities }, - { 0x31, PacketTypesIn.CombatEvent }, - { 0x32, PacketTypesIn.PlayerInfo }, - { 0x33, PacketTypesIn.FacePlayer }, - { 0x34, PacketTypesIn.PlayerPositionAndLook }, - { 0x35, PacketTypesIn.UnlockRecipes }, - { 0x36, PacketTypesIn.DestroyEntities }, - { 0x37, PacketTypesIn.RemoveEntityEffect }, - { 0x38, PacketTypesIn.ResourcePackSend }, - { 0x39, PacketTypesIn.Respawn }, - { 0x3A, PacketTypesIn.EntityHeadLook }, - { 0x3B, PacketTypesIn.MultiBlockChange }, - { 0x3C, PacketTypesIn.SelectAdvancementTab }, - { 0x3D, PacketTypesIn.WorldBorder }, - { 0x3E, PacketTypesIn.Camera }, - { 0x3F, PacketTypesIn.HeldItemChange }, - { 0x40, PacketTypesIn.UpdateViewPosition }, - { 0x41, PacketTypesIn.UpdateViewDistance }, - { 0x42, PacketTypesIn.SpawnPosition }, - { 0x43, PacketTypesIn.DisplayScoreboard }, - { 0x44, PacketTypesIn.EntityMetadata }, - { 0x45, PacketTypesIn.AttachEntity }, - { 0x46, PacketTypesIn.EntityVelocity }, - { 0x47, PacketTypesIn.EntityEquipment }, - { 0x48, PacketTypesIn.SetExperience }, - { 0x49, PacketTypesIn.UpdateHealth }, - { 0x4A, PacketTypesIn.ScoreboardObjective }, - { 0x4B, PacketTypesIn.SetPassengers }, - { 0x4C, PacketTypesIn.Teams }, - { 0x4D, PacketTypesIn.UpdateScore }, - { 0x4E, PacketTypesIn.TimeUpdate }, - { 0x4F, PacketTypesIn.Title }, - { 0x50, PacketTypesIn.EntitySoundEffect }, - { 0x51, PacketTypesIn.SoundEffect }, - { 0x52, PacketTypesIn.StopSound }, - { 0x53, PacketTypesIn.PlayerListHeaderAndFooter }, - { 0x54, PacketTypesIn.NBTQueryResponse }, - { 0x55, PacketTypesIn.CollectItem }, - { 0x56, PacketTypesIn.EntityTeleport }, - { 0x57, PacketTypesIn.Advancements }, - { 0x58, PacketTypesIn.EntityProperties }, - { 0x59, PacketTypesIn.EntityEffect }, - { 0x5A, PacketTypesIn.DeclareRecipes }, - { 0x5B, PacketTypesIn.Tags }, - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, - { 0x01, PacketTypesOut.QueryBlockNBT }, - { 0x02, PacketTypesOut.SetDifficulty }, - { 0x03, PacketTypesOut.ChatMessage }, - { 0x04, PacketTypesOut.ClientStatus }, - { 0x05, PacketTypesOut.ClientSettings }, - { 0x06, PacketTypesOut.TabComplete }, - { 0x07, PacketTypesOut.WindowConfirmation }, - { 0x08, PacketTypesOut.ClickWindowButton }, - { 0x09, PacketTypesOut.ClickWindow }, - { 0x0A, PacketTypesOut.CloseWindow }, - { 0x0B, PacketTypesOut.PluginMessage }, - { 0x0C, PacketTypesOut.EditBook }, - { 0x0D, PacketTypesOut.EntityNBTRequest }, - { 0x0E, PacketTypesOut.InteractEntity }, - { 0x0F, PacketTypesOut.GenerateStructure }, - { 0x10, PacketTypesOut.KeepAlive }, - { 0x11, PacketTypesOut.LockDifficulty }, - { 0x12, PacketTypesOut.PlayerPosition }, - { 0x13, PacketTypesOut.PlayerPositionAndRotation }, - { 0x14, PacketTypesOut.PlayerRotation }, - { 0x15, PacketTypesOut.PlayerMovement }, - { 0x16, PacketTypesOut.VehicleMove }, - { 0x17, PacketTypesOut.SteerBoat }, - { 0x18, PacketTypesOut.PickItem }, - { 0x19, PacketTypesOut.CraftRecipeRequest }, - { 0x1A, PacketTypesOut.PlayerAbilities }, - { 0x1B, PacketTypesOut.PlayerDigging }, - { 0x1C, PacketTypesOut.EntityAction }, - { 0x1D, PacketTypesOut.SteerVehicle }, - { 0x1E, PacketTypesOut.SetDisplayedRecipe }, - { 0x1F, PacketTypesOut.SetRecipeBookState }, - { 0x20, PacketTypesOut.NameItem }, - { 0x21, PacketTypesOut.ResourcePackStatus }, - { 0x22, PacketTypesOut.AdvancementTab }, - { 0x23, PacketTypesOut.SelectTrade }, - { 0x24, PacketTypesOut.SetBeaconEffect }, - { 0x25, PacketTypesOut.HeldItemChange }, - { 0x26, PacketTypesOut.UpdateCommandBlock }, - { 0x27, PacketTypesOut.UpdateCommandBlockMinecart }, - { 0x28, PacketTypesOut.CreativeInventoryAction }, - { 0x29, PacketTypesOut.UpdateJigsawBlock }, - { 0x2A, PacketTypesOut.UpdateStructureBlock }, - { 0x2B, PacketTypesOut.UpdateSign }, - { 0x2C, PacketTypesOut.Animation }, - { 0x2D, PacketTypesOut.Spectate }, - { 0x2E, PacketTypesOut.PlayerBlockPlacement }, - { 0x2F, PacketTypesOut.UseItem }, - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette117.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette117.cs deleted file mode 100644 index 70191896e3..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette117.cs +++ /dev/null @@ -1,171 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette117 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.SpawnEntity }, - { 0x01, PacketTypesIn.SpawnExperienceOrb }, - { 0x02, PacketTypesIn.SpawnLivingEntity }, - { 0x03, PacketTypesIn.SpawnPainting }, - { 0x04, PacketTypesIn.SpawnPlayer }, - { 0x05, PacketTypesIn.SkulkVibrationSignal }, - { 0x06, PacketTypesIn.EntityAnimation }, - { 0x07, PacketTypesIn.Statistics }, - { 0x08, PacketTypesIn.AcknowledgePlayerDigging }, - { 0x09, PacketTypesIn.BlockBreakAnimation }, - { 0x0A, PacketTypesIn.BlockEntityData }, - { 0x0B, PacketTypesIn.BlockAction }, - { 0x0C, PacketTypesIn.BlockChange }, - { 0x0D, PacketTypesIn.BossBar }, - { 0x0E, PacketTypesIn.ServerDifficulty }, - { 0x0F, PacketTypesIn.ChatMessage }, - { 0x10, PacketTypesIn.ClearTiles }, - { 0x11, PacketTypesIn.TabComplete }, - { 0x12, PacketTypesIn.DeclareCommands }, - { 0x13, PacketTypesIn.CloseWindow }, - { 0x14, PacketTypesIn.WindowItems }, - { 0x15, PacketTypesIn.WindowProperty }, - { 0x16, PacketTypesIn.SetSlot }, - { 0x17, PacketTypesIn.SetCooldown }, - { 0x18, PacketTypesIn.PluginMessage }, - { 0x19, PacketTypesIn.NamedSoundEffect }, - { 0x1A, PacketTypesIn.Disconnect }, - { 0x1B, PacketTypesIn.EntityStatus }, - { 0x1C, PacketTypesIn.Explosion }, - { 0x1D, PacketTypesIn.UnloadChunk }, - { 0x1E, PacketTypesIn.ChangeGameState }, - { 0x1F, PacketTypesIn.OpenHorseWindow }, - { 0x20, PacketTypesIn.InitializeWorldBorder }, - { 0x21, PacketTypesIn.KeepAlive }, - { 0x22, PacketTypesIn.ChunkData }, - { 0x23, PacketTypesIn.Effect }, - { 0x24, PacketTypesIn.Particle }, - { 0x25, PacketTypesIn.UpdateLight }, - { 0x26, PacketTypesIn.JoinGame }, - { 0x27, PacketTypesIn.MapData }, - { 0x28, PacketTypesIn.TradeList }, - { 0x29, PacketTypesIn.EntityPosition }, - { 0x2A, PacketTypesIn.EntityPositionAndRotation }, - { 0x2B, PacketTypesIn.EntityRotation }, - { 0x2C, PacketTypesIn.VehicleMove }, - { 0x2D, PacketTypesIn.OpenBook }, - { 0x2E, PacketTypesIn.OpenWindow }, - { 0x2F, PacketTypesIn.OpenSignEditor }, - { 0x30, PacketTypesIn.Ping }, - { 0x31, PacketTypesIn.CraftRecipeResponse }, - { 0x32, PacketTypesIn.PlayerAbilities }, - { 0x33, PacketTypesIn.EndCombatEvent }, - { 0x34, PacketTypesIn.EnterCombatEvent }, - { 0x35, PacketTypesIn.DeathCombatEvent }, - { 0x36, PacketTypesIn.PlayerInfo }, - { 0x37, PacketTypesIn.FacePlayer }, - { 0x38, PacketTypesIn.PlayerPositionAndLook }, - { 0x39, PacketTypesIn.UnlockRecipes }, - { 0x3A, PacketTypesIn.DestroyEntities }, - { 0x3B, PacketTypesIn.RemoveEntityEffect }, - { 0x3C, PacketTypesIn.ResourcePackSend }, - { 0x3D, PacketTypesIn.Respawn }, - { 0x3E, PacketTypesIn.EntityHeadLook }, - { 0x3F, PacketTypesIn.MultiBlockChange }, - { 0x40, PacketTypesIn.SelectAdvancementTab }, - { 0x41, PacketTypesIn.ActionBar }, - { 0x42, PacketTypesIn.WorldBorderCenter }, - { 0x43, PacketTypesIn.WorldBorderLerpSize }, - { 0x44, PacketTypesIn.WorldBorderSize }, - { 0x45, PacketTypesIn.WorldBorderWarningDelay }, - { 0x46, PacketTypesIn.WorldBorderWarningReach }, - { 0x47, PacketTypesIn.Camera }, - { 0x48, PacketTypesIn.HeldItemChange }, - { 0x49, PacketTypesIn.UpdateViewPosition }, - { 0x4A, PacketTypesIn.UpdateViewDistance }, - { 0x4B, PacketTypesIn.SpawnPosition }, - { 0x4C, PacketTypesIn.DisplayScoreboard }, - { 0x4D, PacketTypesIn.EntityMetadata }, - { 0x4E, PacketTypesIn.AttachEntity }, - { 0x4F, PacketTypesIn.EntityVelocity }, - { 0x50, PacketTypesIn.EntityEquipment }, - { 0x51, PacketTypesIn.SetExperience }, - { 0x52, PacketTypesIn.UpdateHealth }, - { 0x53, PacketTypesIn.ScoreboardObjective }, - { 0x54, PacketTypesIn.SetPassengers }, - { 0x55, PacketTypesIn.Teams }, - { 0x56, PacketTypesIn.UpdateScore }, - { 0x57, PacketTypesIn.SetTitleSubTitle }, - { 0x58, PacketTypesIn.TimeUpdate }, - { 0x59, PacketTypesIn.SetTitleText }, - { 0x5A, PacketTypesIn.SetTitleTime }, - { 0x5B, PacketTypesIn.EntitySoundEffect }, - { 0x5C, PacketTypesIn.SoundEffect }, - { 0x5D, PacketTypesIn.StopSound }, - { 0x5E, PacketTypesIn.PlayerListHeaderAndFooter }, - { 0x5F, PacketTypesIn.NBTQueryResponse }, - { 0x60, PacketTypesIn.CollectItem }, - { 0x61, PacketTypesIn.EntityTeleport }, - { 0x62, PacketTypesIn.Advancements }, - { 0x63, PacketTypesIn.EntityProperties }, - { 0x64, PacketTypesIn.EntityEffect }, - { 0x65, PacketTypesIn.DeclareRecipes }, - { 0x66, PacketTypesIn.Tags }, - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, - { 0x01, PacketTypesOut.QueryBlockNBT }, - { 0x02, PacketTypesOut.SetDifficulty }, - { 0x03, PacketTypesOut.ChatMessage }, - { 0x04, PacketTypesOut.ClientStatus }, - { 0x05, PacketTypesOut.ClientSettings }, - { 0x06, PacketTypesOut.TabComplete }, - { 0x07, PacketTypesOut.ClickWindowButton }, - { 0x08, PacketTypesOut.ClickWindow }, - { 0x09, PacketTypesOut.CloseWindow }, - { 0x0A, PacketTypesOut.PluginMessage }, - { 0x0B, PacketTypesOut.EditBook }, - { 0x0C, PacketTypesOut.EntityNBTRequest }, - { 0x0D, PacketTypesOut.InteractEntity }, - { 0x0E, PacketTypesOut.GenerateStructure }, - { 0x0F, PacketTypesOut.KeepAlive }, - { 0x10, PacketTypesOut.LockDifficulty }, - { 0x11, PacketTypesOut.PlayerPosition }, - { 0x12, PacketTypesOut.PlayerPositionAndRotation }, - { 0x13, PacketTypesOut.PlayerRotation }, - { 0x14, PacketTypesOut.PlayerMovement }, - { 0x15, PacketTypesOut.VehicleMove }, - { 0x16, PacketTypesOut.SteerBoat }, - { 0x17, PacketTypesOut.PickItem }, - { 0x18, PacketTypesOut.CraftRecipeRequest }, - { 0x19, PacketTypesOut.PlayerAbilities }, - { 0x1A, PacketTypesOut.PlayerDigging }, - { 0x1B, PacketTypesOut.EntityAction }, - { 0x1C, PacketTypesOut.SteerVehicle }, - { 0x1D, PacketTypesOut.Pong }, - { 0x1E, PacketTypesOut.SetDisplayedRecipe }, - { 0x1F, PacketTypesOut.SetRecipeBookState }, - { 0x20, PacketTypesOut.NameItem }, - { 0x21, PacketTypesOut.ResourcePackStatus }, - { 0x22, PacketTypesOut.AdvancementTab }, - { 0x23, PacketTypesOut.SelectTrade }, - { 0x24, PacketTypesOut.SetBeaconEffect }, - { 0x25, PacketTypesOut.HeldItemChange }, - { 0x26, PacketTypesOut.UpdateCommandBlock }, - { 0x27, PacketTypesOut.UpdateCommandBlockMinecart }, - { 0x28, PacketTypesOut.CreativeInventoryAction }, - { 0x29, PacketTypesOut.UpdateJigsawBlock }, - { 0x2A, PacketTypesOut.UpdateStructureBlock }, - { 0x2B, PacketTypesOut.UpdateSign }, - { 0x2C, PacketTypesOut.Animation }, - { 0x2D, PacketTypesOut.Spectate }, - { 0x2E, PacketTypesOut.PlayerBlockPlacement }, - { 0x2F, PacketTypesOut.UseItem }, - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette118.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette118.cs deleted file mode 100644 index ffecc3db44..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette118.cs +++ /dev/null @@ -1,172 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette118 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.SpawnEntity }, - { 0x01, PacketTypesIn.SpawnExperienceOrb }, - { 0x02, PacketTypesIn.SpawnLivingEntity }, - { 0x03, PacketTypesIn.SpawnPainting }, - { 0x04, PacketTypesIn.SpawnPlayer }, - { 0x05, PacketTypesIn.SkulkVibrationSignal }, - { 0x06, PacketTypesIn.EntityAnimation }, - { 0x07, PacketTypesIn.Statistics }, - { 0x08, PacketTypesIn.AcknowledgePlayerDigging }, - { 0x09, PacketTypesIn.BlockBreakAnimation }, - { 0x0A, PacketTypesIn.BlockEntityData }, - { 0x0B, PacketTypesIn.BlockAction }, - { 0x0C, PacketTypesIn.BlockChange }, - { 0x0D, PacketTypesIn.BossBar }, - { 0x0E, PacketTypesIn.ServerDifficulty }, - { 0x0F, PacketTypesIn.ChatMessage }, - { 0x10, PacketTypesIn.ClearTiles }, - { 0x11, PacketTypesIn.TabComplete }, - { 0x12, PacketTypesIn.DeclareCommands }, - { 0x13, PacketTypesIn.CloseWindow }, - { 0x14, PacketTypesIn.WindowItems }, - { 0x15, PacketTypesIn.WindowProperty }, - { 0x16, PacketTypesIn.SetSlot }, - { 0x17, PacketTypesIn.SetCooldown }, - { 0x18, PacketTypesIn.PluginMessage }, - { 0x19, PacketTypesIn.NamedSoundEffect }, - { 0x1A, PacketTypesIn.Disconnect }, - { 0x1B, PacketTypesIn.EntityStatus }, - { 0x1C, PacketTypesIn.Explosion }, - { 0x1D, PacketTypesIn.UnloadChunk }, - { 0x1E, PacketTypesIn.ChangeGameState }, - { 0x1F, PacketTypesIn.OpenHorseWindow }, - { 0x20, PacketTypesIn.InitializeWorldBorder }, - { 0x21, PacketTypesIn.KeepAlive }, - { 0x22, PacketTypesIn.ChunkData }, - { 0x23, PacketTypesIn.Effect }, - { 0x24, PacketTypesIn.Particle }, - { 0x25, PacketTypesIn.UpdateLight }, - { 0x26, PacketTypesIn.JoinGame }, - { 0x27, PacketTypesIn.MapData }, - { 0x28, PacketTypesIn.TradeList }, - { 0x29, PacketTypesIn.EntityPosition }, - { 0x2A, PacketTypesIn.EntityPositionAndRotation }, - { 0x2B, PacketTypesIn.EntityRotation }, - { 0x2C, PacketTypesIn.VehicleMove }, - { 0x2D, PacketTypesIn.OpenBook }, - { 0x2E, PacketTypesIn.OpenWindow }, - { 0x2F, PacketTypesIn.OpenSignEditor }, - { 0x30, PacketTypesIn.Ping }, - { 0x31, PacketTypesIn.CraftRecipeResponse }, - { 0x32, PacketTypesIn.PlayerAbilities }, - { 0x33, PacketTypesIn.EndCombatEvent }, - { 0x34, PacketTypesIn.EnterCombatEvent }, - { 0x35, PacketTypesIn.DeathCombatEvent }, - { 0x36, PacketTypesIn.PlayerInfo }, - { 0x37, PacketTypesIn.FacePlayer }, - { 0x38, PacketTypesIn.PlayerPositionAndLook }, - { 0x39, PacketTypesIn.UnlockRecipes }, - { 0x3A, PacketTypesIn.DestroyEntities }, - { 0x3B, PacketTypesIn.RemoveEntityEffect }, - { 0x3C, PacketTypesIn.ResourcePackSend }, - { 0x3D, PacketTypesIn.Respawn }, - { 0x3E, PacketTypesIn.EntityHeadLook }, - { 0x3F, PacketTypesIn.MultiBlockChange }, - { 0x40, PacketTypesIn.SelectAdvancementTab }, - { 0x41, PacketTypesIn.ActionBar }, - { 0x42, PacketTypesIn.WorldBorderCenter }, - { 0x43, PacketTypesIn.WorldBorderLerpSize }, - { 0x44, PacketTypesIn.WorldBorderSize }, - { 0x45, PacketTypesIn.WorldBorderWarningDelay }, - { 0x46, PacketTypesIn.WorldBorderWarningReach }, - { 0x47, PacketTypesIn.Camera }, - { 0x48, PacketTypesIn.HeldItemChange }, - { 0x49, PacketTypesIn.UpdateViewPosition }, - { 0x4A, PacketTypesIn.UpdateViewDistance }, - { 0x4B, PacketTypesIn.SpawnPosition }, - { 0x4C, PacketTypesIn.DisplayScoreboard }, - { 0x4D, PacketTypesIn.EntityMetadata }, - { 0x4E, PacketTypesIn.AttachEntity }, - { 0x4F, PacketTypesIn.EntityVelocity }, - { 0x50, PacketTypesIn.EntityEquipment }, - { 0x51, PacketTypesIn.SetExperience }, - { 0x52, PacketTypesIn.UpdateHealth }, - { 0x53, PacketTypesIn.ScoreboardObjective }, - { 0x54, PacketTypesIn.SetPassengers }, - { 0x55, PacketTypesIn.Teams }, - { 0x56, PacketTypesIn.UpdateScore }, - { 0x57, PacketTypesIn.UpdateSimulationDistance }, - { 0x58, PacketTypesIn.SetTitleSubTitle }, - { 0x59, PacketTypesIn.TimeUpdate }, - { 0x5A, PacketTypesIn.SetTitleText }, - { 0x5B, PacketTypesIn.SetTitleTime }, - { 0x5C, PacketTypesIn.EntitySoundEffect }, - { 0x5D, PacketTypesIn.SoundEffect }, - { 0x5E, PacketTypesIn.StopSound }, - { 0x5F, PacketTypesIn.PlayerListHeaderAndFooter }, - { 0x60, PacketTypesIn.NBTQueryResponse }, - { 0x61, PacketTypesIn.CollectItem }, - { 0x62, PacketTypesIn.EntityTeleport }, - { 0x63, PacketTypesIn.Advancements }, - { 0x64, PacketTypesIn.EntityProperties }, - { 0x65, PacketTypesIn.EntityEffect }, - { 0x66, PacketTypesIn.DeclareRecipes }, - { 0x67, PacketTypesIn.Tags }, - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, - { 0x01, PacketTypesOut.QueryBlockNBT }, - { 0x02, PacketTypesOut.SetDifficulty }, - { 0x03, PacketTypesOut.ChatMessage }, - { 0x04, PacketTypesOut.ClientStatus }, - { 0x05, PacketTypesOut.ClientSettings }, - { 0x06, PacketTypesOut.TabComplete }, - { 0x07, PacketTypesOut.ClickWindowButton }, - { 0x08, PacketTypesOut.ClickWindow }, - { 0x09, PacketTypesOut.CloseWindow }, - { 0x0A, PacketTypesOut.PluginMessage }, - { 0x0B, PacketTypesOut.EditBook }, - { 0x0C, PacketTypesOut.EntityNBTRequest }, - { 0x0D, PacketTypesOut.InteractEntity }, - { 0x0E, PacketTypesOut.GenerateStructure }, - { 0x0F, PacketTypesOut.KeepAlive }, - { 0x10, PacketTypesOut.LockDifficulty }, - { 0x11, PacketTypesOut.PlayerPosition }, - { 0x12, PacketTypesOut.PlayerPositionAndRotation }, - { 0x13, PacketTypesOut.PlayerRotation }, - { 0x14, PacketTypesOut.PlayerMovement }, - { 0x15, PacketTypesOut.VehicleMove }, - { 0x16, PacketTypesOut.SteerBoat }, - { 0x17, PacketTypesOut.PickItem }, - { 0x18, PacketTypesOut.CraftRecipeRequest }, - { 0x19, PacketTypesOut.PlayerAbilities }, - { 0x1A, PacketTypesOut.PlayerDigging }, - { 0x1B, PacketTypesOut.EntityAction }, - { 0x1C, PacketTypesOut.SteerVehicle }, - { 0x1D, PacketTypesOut.Pong }, - { 0x1E, PacketTypesOut.SetDisplayedRecipe }, - { 0x1F, PacketTypesOut.SetRecipeBookState }, - { 0x20, PacketTypesOut.NameItem }, - { 0x21, PacketTypesOut.ResourcePackStatus }, - { 0x22, PacketTypesOut.AdvancementTab }, - { 0x23, PacketTypesOut.SelectTrade }, - { 0x24, PacketTypesOut.SetBeaconEffect }, - { 0x25, PacketTypesOut.HeldItemChange }, - { 0x26, PacketTypesOut.UpdateCommandBlock }, - { 0x27, PacketTypesOut.UpdateCommandBlockMinecart }, - { 0x28, PacketTypesOut.CreativeInventoryAction }, - { 0x29, PacketTypesOut.UpdateJigsawBlock }, - { 0x2A, PacketTypesOut.UpdateStructureBlock }, - { 0x2B, PacketTypesOut.UpdateSign }, - { 0x2C, PacketTypesOut.Animation }, - { 0x2D, PacketTypesOut.Spectate }, - { 0x2E, PacketTypesOut.PlayerBlockPlacement }, - { 0x2F, PacketTypesOut.UseItem }, - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette119.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette119.cs deleted file mode 100644 index 7a7e9eb64d..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette119.cs +++ /dev/null @@ -1,175 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette119 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.SpawnEntity }, // Changed in 1.19 (Wiki name: Spawn Entity) - { 0x01, PacketTypesIn.SpawnExperienceOrb }, // (Wiki name: Spawn Exeprience Orb) - { 0x02, PacketTypesIn.SpawnPlayer }, // - { 0x03, PacketTypesIn.EntityAnimation }, // (Wiki name: Entity Animation (clientbound)) - { 0x04, PacketTypesIn.Statistics }, // (Wiki name: Award Statistics) - { 0x05, PacketTypesIn.BlockChangedAck }, // Added 1.19 (Wiki name: Acknowledge Block Change) - { 0x06, PacketTypesIn.BlockBreakAnimation }, // (Wiki name: Set Block Destroy Stage) - { 0x07, PacketTypesIn.BlockEntityData }, // - { 0x08, PacketTypesIn.BlockAction }, // - { 0x09, PacketTypesIn.BlockChange }, // (Wiki name: Block Update) - { 0x0A, PacketTypesIn.BossBar }, // - { 0x0B, PacketTypesIn.ServerDifficulty }, // (Wiki name: Change Difficulty) - { 0x0C, PacketTypesIn.ChatPreview }, // Added 1.19 - { 0x0D, PacketTypesIn.ClearTiles }, // - { 0x0E, PacketTypesIn.TabComplete }, // (Wiki name: Command Suggestions Response) - { 0x0F, PacketTypesIn.DeclareCommands }, // (Wiki name: Commands) - { 0x10, PacketTypesIn.CloseWindow }, // (Wiki name: Close Container (clientbound)) - { 0x11, PacketTypesIn.WindowItems }, // (Wiki name: Set Container Content) - { 0x12, PacketTypesIn.WindowProperty }, // (Wiki name: Set Container Property) - { 0x13, PacketTypesIn.SetSlot }, // (Wiki name: Set Container Slot) - { 0x14, PacketTypesIn.SetCooldown }, // - { 0x15, PacketTypesIn.PluginMessage }, // (Wiki name: Plugin Message (clientbound)) - { 0x16, PacketTypesIn.NamedSoundEffect }, // Changed in 1.19 (Added "Speed" field) (Wiki name: Custom Sound Effect) (No need to be implemented) - { 0x17, PacketTypesIn.Disconnect }, // - { 0x18, PacketTypesIn.EntityStatus }, // (Wiki name: Entity Event) - { 0x19, PacketTypesIn.Explosion }, // Changed in 1.19 (Location fields are now Double instead of Float) (Wiki name: Explosion) - { 0x1A, PacketTypesIn.UnloadChunk }, // (Wiki name: Forget Chunk) - { 0x1B, PacketTypesIn.ChangeGameState }, // (Wiki name: Game Event) - { 0x1C, PacketTypesIn.OpenHorseWindow }, // (Wiki name: Horse Screen Open) - { 0x1D, PacketTypesIn.InitializeWorldBorder }, // - { 0x1E, PacketTypesIn.KeepAlive }, // - { 0x1F, PacketTypesIn.ChunkData }, // - { 0x20, PacketTypesIn.Effect }, // (Wiki name: Level Event) - { 0x21, PacketTypesIn.Particle }, // Changed in 1.19 ("Particle Data" field is now "Max Speed", it's the same Float data type) (Wiki name: Level Particle) (No need to be implemented) - { 0x22, PacketTypesIn.UpdateLight }, // (Wiki name: Light Update) - { 0x23, PacketTypesIn.JoinGame }, // Changed in 1.19 (lot's of changes) (Wiki name: Login (play)) - { 0x24, PacketTypesIn.MapData }, // (Wiki name: Map Item Data) - { 0x25, PacketTypesIn.TradeList }, // (Wiki name: Merchant Offers) - { 0x26, PacketTypesIn.EntityPosition }, // (Wiki name: Move Entity Position) - { 0x27, PacketTypesIn.EntityPositionAndRotation }, // (Wiki name: Move Entity Position and Rotation) - { 0x28, PacketTypesIn.EntityRotation }, // (Wiki name: Move Entity Rotation) - { 0x29, PacketTypesIn.VehicleMove }, // (Wiki name: Move Vehicle) - { 0x2A, PacketTypesIn.OpenBook }, // - { 0x2B, PacketTypesIn.OpenWindow }, // (Wiki name: Open Screen) - { 0x2C, PacketTypesIn.OpenSignEditor }, // - { 0x2D, PacketTypesIn.Ping }, // (Wiki name: Ping (play)) - { 0x2E, PacketTypesIn.CraftRecipeResponse }, // (Wiki name: Place Ghost Recipe) - { 0x2F, PacketTypesIn.PlayerAbilities }, // - { 0x30, PacketTypesIn.ChatMessage }, // Changed in 1.19 (Completely changed) (Wiki name: Player Chat Message) - { 0x31, PacketTypesIn.EndCombatEvent }, // (Wiki name: Player Combat End) - { 0x32, PacketTypesIn.EnterCombatEvent }, // (Wiki name: Player Combat Enter) - { 0x33, PacketTypesIn.DeathCombatEvent }, // (Wiki name: Player Combat Kill) - { 0x34, PacketTypesIn.PlayerInfo }, // Changed in 1.19 (Heavy changes) - { 0x35, PacketTypesIn.FacePlayer }, // (Wiki name: Player Look At) - { 0x36, PacketTypesIn.PlayerPositionAndLook }, // (Wiki name: Player Position) - { 0x37, PacketTypesIn.UnlockRecipes }, // (Wiki name: Recipe) - { 0x38, PacketTypesIn.DestroyEntities }, // (Wiki name: Remove Entites) - { 0x39, PacketTypesIn.RemoveEntityEffect }, // - { 0x3A, PacketTypesIn.ResourcePackSend }, // (Wiki name: Resource Pack) - { 0x3B, PacketTypesIn.Respawn }, // Changed in 1.19 (Heavy changes) - { 0x3C, PacketTypesIn.EntityHeadLook }, // (Wiki name: Rotate Head) - { 0x3D, PacketTypesIn.MultiBlockChange }, // (Wiki name: Sections Block Update) - { 0x3E, PacketTypesIn.SelectAdvancementTab }, // - { 0x3F, PacketTypesIn.ServerData }, // Added in 1.19 - { 0x40, PacketTypesIn.ActionBar }, // (Wiki name: Set Action Bar Text) - { 0x41, PacketTypesIn.WorldBorderCenter }, // (Wiki name: Set Border Center) - { 0x42, PacketTypesIn.WorldBorderLerpSize }, // - { 0x43, PacketTypesIn.WorldBorderSize }, // (Wiki name: Set World Border Size) - { 0x44, PacketTypesIn.WorldBorderWarningDelay }, // (Wiki name: Set World Border Warning Delay) - { 0x45, PacketTypesIn.WorldBorderWarningReach }, // (Wiki name: Set Border Warning Distance) - { 0x46, PacketTypesIn.Camera }, // (Wiki name: Set Camera) - { 0x47, PacketTypesIn.HeldItemChange }, // (Wiki name: Set Carried Item (clientbound)) - { 0x48, PacketTypesIn.UpdateViewPosition }, // (Wiki name: Set Chunk Cache Center) - { 0x49, PacketTypesIn.UpdateViewDistance }, // (Wiki name: Set Chunk Cache Radius) - { 0x4A, PacketTypesIn.SpawnPosition }, // (Wiki name: Set Default Spawn Position) - { 0x4B, PacketTypesIn.SetDisplayChatPreview }, // Added in 1.19 (Wiki name: Set Display Chat Preview) - { 0x4C, PacketTypesIn.DisplayScoreboard }, // (Wiki name: Set Display Objective) - { 0x4D, PacketTypesIn.EntityMetadata }, // (Wiki name: Set Entity Metadata) - { 0x4E, PacketTypesIn.AttachEntity }, // (Wiki name: Set Entity Link) - { 0x4F, PacketTypesIn.EntityVelocity }, // (Wiki name: Set Entity Motion) - { 0x50, PacketTypesIn.EntityEquipment }, // (Wiki name: Set Equipment) - { 0x51, PacketTypesIn.SetExperience }, // - { 0x52, PacketTypesIn.UpdateHealth }, // (Wiki name: Set Health) - { 0x53, PacketTypesIn.ScoreboardObjective }, // (Wiki name: Set Objective) - { 0x54, PacketTypesIn.SetPassengers }, // - { 0x55, PacketTypesIn.Teams }, // (Wiki name: Set Player Team) - { 0x56, PacketTypesIn.UpdateScore }, // (Wiki name: Set Score) - { 0x57, PacketTypesIn.UpdateSimulationDistance }, // (Wiki name: Set Simulation Distance) - { 0x58, PacketTypesIn.SetTitleSubTitle }, // (Wiki name: Set Subtitle Test) - { 0x59, PacketTypesIn.TimeUpdate }, // (Wiki name: Set Time) - { 0x5A, PacketTypesIn.SetTitleText }, // (Wiki name: Set Title) - { 0x5B, PacketTypesIn.SetTitleTime }, // (Wiki name: Set Titles Animation) - { 0x5C, PacketTypesIn.EntitySoundEffect }, // (Wiki name: Sound Entity) - { 0x5D, PacketTypesIn.SoundEffect }, // Changed in 1.19 (Added "Seed" field) (Wiki name: Sound Effect) (No need to be implemented) - { 0x5E, PacketTypesIn.StopSound }, // - { 0x5F, PacketTypesIn.SystemChat }, // Added in 1.19 (Wiki name: System Chat Message) - { 0x60, PacketTypesIn.PlayerListHeaderAndFooter }, // (Wiki name: Tab List) - { 0x61, PacketTypesIn.NBTQueryResponse }, // (Wiki name: Tab Query) - { 0x62, PacketTypesIn.CollectItem }, // (Wiki name: Take Item Entity) - { 0x63, PacketTypesIn.EntityTeleport }, // (Wiki name: Teleport Entity) - { 0x64, PacketTypesIn.Advancements }, // (Wiki name: Update Advancements) - { 0x65, PacketTypesIn.EntityProperties }, // (Wiki name: Update Attributes) - { 0x66, PacketTypesIn.EntityEffect }, // Changed in 1.19 (Added "Has Factor Data" and "Factor Codec" fields) (Wiki name: Entity Effect) - { 0x67, PacketTypesIn.DeclareRecipes }, // (Wiki name: Update Recipes) - { 0x68, PacketTypesIn.Tags }, // (Wiki name: Update Tags) - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, // (Wiki name: Confirm Teleportation) - { 0x01, PacketTypesOut.QueryBlockNBT }, // (Wiki name: Query Block Entity Tag) - { 0x02, PacketTypesOut.SetDifficulty }, // (Wiki name: Change Difficutly) - { 0x03, PacketTypesOut.ChatCommand }, // Added in 1.19 - { 0x04, PacketTypesOut.ChatMessage }, // Changed in 1.19 (Completely changed) (Wiki name: Chat) - { 0x05, PacketTypesOut.ChatPreview }, // Added in 1.19 (Wiki name: Chat Preview (serverbound)) - { 0x06, PacketTypesOut.ClientStatus }, // (Wiki name: Client Command) - { 0x07, PacketTypesOut.ClientSettings }, // (Wiki name: Client Information) - { 0x08, PacketTypesOut.TabComplete }, // (Wiki name: Command Suggestions Request) - { 0x09, PacketTypesOut.ClickWindowButton }, // (Wiki name: Click Container Button) - { 0x0A, PacketTypesOut.ClickWindow }, // (Wiki name: Click Container) - { 0x0B, PacketTypesOut.CloseWindow }, // (Wiki name: Close Container (serverbound)) - { 0x0C, PacketTypesOut.PluginMessage }, // (Wiki name: Plugin Message (serverbound)) - { 0x0D, PacketTypesOut.EditBook }, // - { 0x0E, PacketTypesOut.EntityNBTRequest }, // (Wiki name: Query Entity Tag) - { 0x0F, PacketTypesOut.InteractEntity }, // (Wiki name: Interact) - { 0x10, PacketTypesOut.GenerateStructure }, // (Wiki name: Jigsaw Generate) - { 0x11, PacketTypesOut.KeepAlive }, // - { 0x12, PacketTypesOut.LockDifficulty }, // - { 0x13, PacketTypesOut.PlayerPosition }, // (Wiki name: Move Player Position) - { 0x14, PacketTypesOut.PlayerPositionAndRotation }, // (Wiki name: Set Player Position and Rotation) - { 0x15, PacketTypesOut.PlayerRotation }, // (Wiki name: Set Player Rotation) - { 0x16, PacketTypesOut.PlayerMovement }, // (Wiki name: Set Player On Ground) - { 0x17, PacketTypesOut.VehicleMove }, // (Wiki name: Move Vehicle (serverbound)) - { 0x18, PacketTypesOut.SteerBoat }, // (Wiki name: Paddle Boat) - { 0x19, PacketTypesOut.PickItem }, // - { 0x1A, PacketTypesOut.CraftRecipeRequest }, // (Wiki name: Place recipe) - { 0x1B, PacketTypesOut.PlayerAbilities }, // - { 0x1C, PacketTypesOut.PlayerDigging }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Player Action) - { 0x1D, PacketTypesOut.EntityAction }, // (Wiki name: Player Command) - { 0x1E, PacketTypesOut.SteerVehicle }, // (Wiki name: Player Input) - { 0x1F, PacketTypesOut.Pong }, // (Wiki name: Pong (play)) - { 0x20, PacketTypesOut.SetDisplayedRecipe }, // (Wiki name: Recipe Book Change Settings) - { 0x21, PacketTypesOut.SetRecipeBookState }, // (Wiki name: Recipe Book Seen Recipe) - { 0x22, PacketTypesOut.NameItem }, // (Wiki name: Rename Item) - { 0x23, PacketTypesOut.ResourcePackStatus }, // (Wiki name: Resource Pack (serverbound)) - { 0x24, PacketTypesOut.AdvancementTab }, // (Wiki name: Seen Advancements) - { 0x25, PacketTypesOut.SelectTrade }, // - { 0x26, PacketTypesOut.SetBeaconEffect }, // Changed in 1.19 (Added a "Secondary Effect Present" and "Secondary Effect" fields) (Wiki name: Set Beacon) - (No need to be implemented) - { 0x27, PacketTypesOut.HeldItemChange }, // (Wiki name: Set Carried Item (serverbound)) - { 0x28, PacketTypesOut.UpdateCommandBlock }, // (Wiki name: Set Command Block) - { 0x29, PacketTypesOut.UpdateCommandBlockMinecart }, // - { 0x2A, PacketTypesOut.CreativeInventoryAction }, // (Wiki name: Set Creative Mode Slot) - { 0x2B, PacketTypesOut.UpdateJigsawBlock }, // (Wiki name: Set Jigsaw Block) - { 0x2C, PacketTypesOut.UpdateStructureBlock }, // (Wiki name: Set Structure Block) - { 0x2D, PacketTypesOut.UpdateSign }, // (Wiki name: Sign Update) - { 0x2E, PacketTypesOut.Animation }, // (Wiki name: Swing) - { 0x2F, PacketTypesOut.Spectate }, // (Wiki name: Teleport To Entity) - { 0x30, PacketTypesOut.PlayerBlockPlacement }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Use Item On) - { 0x31, PacketTypesOut.UseItem }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Use Item) - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1192.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1192.cs deleted file mode 100644 index 2fb5a291de..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1192.cs +++ /dev/null @@ -1,179 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette1192 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.SpawnEntity }, // Changed in 1.19 (Wiki name: Spawn Entity) - { 0x01, PacketTypesIn.SpawnExperienceOrb }, // (Wiki name: Spawn Exeprience Orb) - { 0x02, PacketTypesIn.SpawnPlayer }, // - { 0x03, PacketTypesIn.EntityAnimation }, // (Wiki name: Entity Animation (clientbound)) - { 0x04, PacketTypesIn.Statistics }, // (Wiki name: Award Statistics) - { 0x05, PacketTypesIn.BlockChangedAck }, // Added 1.19 (Wiki name: Acknowledge Block Change) - { 0x06, PacketTypesIn.BlockBreakAnimation }, // (Wiki name: Set Block Destroy Stage) - { 0x07, PacketTypesIn.BlockEntityData }, // - { 0x08, PacketTypesIn.BlockAction }, // - { 0x09, PacketTypesIn.BlockChange }, // (Wiki name: Block Update) - { 0x0A, PacketTypesIn.BossBar }, // - { 0x0B, PacketTypesIn.ServerDifficulty }, // (Wiki name: Change Difficulty) - { 0x0C, PacketTypesIn.ChatPreview }, // Added 1.19 - { 0x0D, PacketTypesIn.ClearTiles }, // - { 0x0E, PacketTypesIn.TabComplete }, // (Wiki name: Command Suggestions Response) - { 0x0F, PacketTypesIn.DeclareCommands }, // (Wiki name: Commands) - { 0x10, PacketTypesIn.CloseWindow }, // (Wiki name: Close Container (clientbound)) - { 0x11, PacketTypesIn.WindowItems }, // (Wiki name: Set Container Content) - { 0x12, PacketTypesIn.WindowProperty }, // (Wiki name: Set Container Property) - { 0x13, PacketTypesIn.SetSlot }, // (Wiki name: Set Container Slot) - { 0x14, PacketTypesIn.SetCooldown }, // - { 0x15, PacketTypesIn.ChatSuggestions }, // Added 1.19.1 - { 0x16, PacketTypesIn.PluginMessage }, // (Wiki name: Plugin Message (clientbound)) - { 0x17, PacketTypesIn.NamedSoundEffect }, // Changed in 1.19 (Added "Speed" field) (Wiki name: Custom Sound Effect) (No need to be implemented) - { 0x18, PacketTypesIn.HideMessage }, // Added 1.19.1 - { 0x19, PacketTypesIn.Disconnect }, // - { 0x1A, PacketTypesIn.EntityStatus }, // (Wiki name: Entity Event) - { 0x1B, PacketTypesIn.Explosion }, // Changed in 1.19 (Location fields are now Double instead of Float) (Wiki name: Explosion) - { 0x1C, PacketTypesIn.UnloadChunk }, // (Wiki name: Forget Chunk) - { 0x1D, PacketTypesIn.ChangeGameState }, // (Wiki name: Game Event) - { 0x1E, PacketTypesIn.OpenHorseWindow }, // (Wiki name: Horse Screen Open) - { 0x1F, PacketTypesIn.InitializeWorldBorder }, // - { 0x20, PacketTypesIn.KeepAlive }, // - { 0x21, PacketTypesIn.ChunkData }, // - { 0x22, PacketTypesIn.Effect }, // (Wiki name: Level Event) - { 0x23, PacketTypesIn.Particle }, // Changed in 1.19 ("Particle Data" field is now "Max Speed", it's the same Float data type) (Wiki name: Level Particle) (No need to be implemented) - { 0x24, PacketTypesIn.UpdateLight }, // (Wiki name: Light Update) - { 0x25, PacketTypesIn.JoinGame }, // Changed in 1.19 (lot's of changes) (Wiki name: Login (play)) - { 0x26, PacketTypesIn.MapData }, // (Wiki name: Map Item Data) - { 0x27, PacketTypesIn.TradeList }, // (Wiki name: Merchant Offers) - { 0x28, PacketTypesIn.EntityPosition }, // (Wiki name: Move Entity Position) - { 0x29, PacketTypesIn.EntityPositionAndRotation }, // (Wiki name: Move Entity Position and Rotation) - { 0x2A, PacketTypesIn.EntityRotation }, // (Wiki name: Move Entity Rotation) - { 0x2B, PacketTypesIn.VehicleMove }, // (Wiki name: Move Vehicle) - { 0x2C, PacketTypesIn.OpenBook }, // - { 0x2D, PacketTypesIn.OpenWindow }, // (Wiki name: Open Screen) - { 0x2E, PacketTypesIn.OpenSignEditor }, // - { 0x2F, PacketTypesIn.Ping }, // (Wiki name: Ping (play)) - { 0x30, PacketTypesIn.CraftRecipeResponse }, // (Wiki name: Place Ghost Recipe) - { 0x31, PacketTypesIn.PlayerAbilities }, // - { 0x32, PacketTypesIn.MessageHeader }, // Added 1.19.1 - { 0x33, PacketTypesIn.ChatMessage }, // Changed in 1.19 (Completely changed) (Wiki name: Player Chat Message) - { 0x34, PacketTypesIn.EndCombatEvent }, // (Wiki name: Player Combat End) - { 0x35, PacketTypesIn.EnterCombatEvent }, // (Wiki name: Player Combat Enter) - { 0x36, PacketTypesIn.DeathCombatEvent }, // (Wiki name: Player Combat Kill) - { 0x37, PacketTypesIn.PlayerInfo }, // Changed in 1.19 (Heavy changes) - { 0x38, PacketTypesIn.FacePlayer }, // (Wiki name: Player Look At) - { 0x39, PacketTypesIn.PlayerPositionAndLook }, // (Wiki name: Player Position) - { 0x3A, PacketTypesIn.UnlockRecipes }, // (Wiki name: Recipe) - { 0x3B, PacketTypesIn.DestroyEntities }, // (Wiki name: Remove Entites) - { 0x3C, PacketTypesIn.RemoveEntityEffect }, // - { 0x3D, PacketTypesIn.ResourcePackSend }, // (Wiki name: Resource Pack) - { 0x3E, PacketTypesIn.Respawn }, // Changed in 1.19 (Heavy changes) - { 0x3F, PacketTypesIn.EntityHeadLook }, // (Wiki name: Rotate Head) - { 0x40, PacketTypesIn.MultiBlockChange }, // (Wiki name: Sections Block Update) - { 0x41, PacketTypesIn.SelectAdvancementTab }, // - { 0x42, PacketTypesIn.ServerData }, // Added in 1.19 - { 0x43, PacketTypesIn.ActionBar }, // (Wiki name: Set Action Bar Text) - { 0x44, PacketTypesIn.WorldBorderCenter }, // (Wiki name: Set Border Center) - { 0x45, PacketTypesIn.WorldBorderLerpSize }, // - { 0x46, PacketTypesIn.WorldBorderSize }, // (Wiki name: Set World Border Size) - { 0x47, PacketTypesIn.WorldBorderWarningDelay }, // (Wiki name: Set World Border Warning Delay) - { 0x48, PacketTypesIn.WorldBorderWarningReach }, // (Wiki name: Set Border Warning Distance) - { 0x49, PacketTypesIn.Camera }, // (Wiki name: Set Camera) - { 0x4A, PacketTypesIn.HeldItemChange }, // (Wiki name: Set Carried Item (clientbound)) - { 0x4B, PacketTypesIn.UpdateViewPosition }, // (Wiki name: Set Chunk Cache Center) - { 0x4C, PacketTypesIn.UpdateViewDistance }, // (Wiki name: Set Chunk Cache Radius) - { 0x4D, PacketTypesIn.SpawnPosition }, // (Wiki name: Set Default Spawn Position) - { 0x4E, PacketTypesIn.SetDisplayChatPreview }, // Added in 1.19 (Wiki name: Set Display Chat Preview) - { 0x4F, PacketTypesIn.DisplayScoreboard }, // (Wiki name: Set Display Objective) - { 0x50, PacketTypesIn.EntityMetadata }, // (Wiki name: Set Entity Metadata) - { 0x51, PacketTypesIn.AttachEntity }, // (Wiki name: Set Entity Link) - { 0x52, PacketTypesIn.EntityVelocity }, // (Wiki name: Set Entity Motion) - { 0x53, PacketTypesIn.EntityEquipment }, // (Wiki name: Set Equipment) - { 0x54, PacketTypesIn.SetExperience }, // - { 0x55, PacketTypesIn.UpdateHealth }, // (Wiki name: Set Health) - { 0x56, PacketTypesIn.ScoreboardObjective }, // (Wiki name: Set Objective) - { 0x57, PacketTypesIn.SetPassengers }, // - { 0x58, PacketTypesIn.Teams }, // (Wiki name: Set Player Team) - { 0x59, PacketTypesIn.UpdateScore }, // (Wiki name: Set Score) - { 0x5A, PacketTypesIn.UpdateSimulationDistance }, // (Wiki name: Set Simulation Distance) - { 0x5B, PacketTypesIn.SetTitleSubTitle }, // (Wiki name: Set Subtitle Test) - { 0x5C, PacketTypesIn.TimeUpdate }, // (Wiki name: Set Time) - { 0x5D, PacketTypesIn.SetTitleText }, // (Wiki name: Set Title) - { 0x5E, PacketTypesIn.SetTitleTime }, // (Wiki name: Set Titles Animation) - { 0x5F, PacketTypesIn.EntitySoundEffect }, // (Wiki name: Sound Entity) - { 0x60, PacketTypesIn.SoundEffect }, // Changed in 1.19 (Added "Seed" field) (Wiki name: Sound Effect) (No need to be implemented) - { 0x61, PacketTypesIn.StopSound }, // - { 0x62, PacketTypesIn.SystemChat }, // Added in 1.19 (Wiki name: System Chat Message) - { 0x63, PacketTypesIn.PlayerListHeaderAndFooter }, // (Wiki name: Tab List) - { 0x64, PacketTypesIn.NBTQueryResponse }, // (Wiki name: Tab Query) - { 0x65, PacketTypesIn.CollectItem }, // (Wiki name: Take Item Entity) - { 0x66, PacketTypesIn.EntityTeleport }, // (Wiki name: Teleport Entity) - { 0x67, PacketTypesIn.Advancements }, // (Wiki name: Update Advancements) - { 0x68, PacketTypesIn.EntityProperties }, // (Wiki name: Update Attributes) - { 0x69, PacketTypesIn.EntityEffect }, // Changed in 1.19 (Added "Has Factor Data" and "Factor Codec" fields) (Wiki name: Entity Effect) - { 0x6A, PacketTypesIn.DeclareRecipes }, // (Wiki name: Update Recipes) - { 0x6B, PacketTypesIn.Tags }, // (Wiki name: Update Tags) - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, // (Wiki name: Confirm Teleportation) - { 0x01, PacketTypesOut.QueryBlockNBT }, // (Wiki name: Query Block Entity Tag) - { 0x02, PacketTypesOut.SetDifficulty }, // (Wiki name: Change Difficutly) - { 0x03, PacketTypesOut.MessageAcknowledgment }, // Added in 1.19.1 - { 0x04, PacketTypesOut.ChatCommand }, // Added in 1.19 - { 0x05, PacketTypesOut.ChatMessage }, // Changed in 1.19 (Completely changed) (Wiki name: Chat) - { 0x06, PacketTypesOut.ChatPreview }, // Added in 1.19 (Wiki name: Chat Preview (serverbound)) - { 0x07, PacketTypesOut.ClientStatus }, // (Wiki name: Client Command) - { 0x08, PacketTypesOut.ClientSettings }, // (Wiki name: Client Information) - { 0x09, PacketTypesOut.TabComplete }, // (Wiki name: Command Suggestions Request) - { 0x0A, PacketTypesOut.ClickWindowButton }, // (Wiki name: Click Container Button) - { 0x0B, PacketTypesOut.ClickWindow }, // (Wiki name: Click Container) - { 0x0C, PacketTypesOut.CloseWindow }, // (Wiki name: Close Container (serverbound)) - { 0x0D, PacketTypesOut.PluginMessage }, // (Wiki name: Plugin Message (serverbound)) - { 0x0E, PacketTypesOut.EditBook }, // - { 0x0F, PacketTypesOut.EntityNBTRequest }, // (Wiki name: Query Entity Tag) - { 0x10, PacketTypesOut.InteractEntity }, // (Wiki name: Interact) - { 0x11, PacketTypesOut.GenerateStructure }, // (Wiki name: Jigsaw Generate) - { 0x12, PacketTypesOut.KeepAlive }, // - { 0x13, PacketTypesOut.LockDifficulty }, // - { 0x14, PacketTypesOut.PlayerPosition }, // (Wiki name: Move Player Position) - { 0x15, PacketTypesOut.PlayerPositionAndRotation }, // (Wiki name: Set Player Position and Rotation) - { 0x16, PacketTypesOut.PlayerRotation }, // (Wiki name: Set Player Rotation) - { 0x17, PacketTypesOut.PlayerMovement }, // (Wiki name: Set Player On Ground) - { 0x18, PacketTypesOut.VehicleMove }, // (Wiki name: Move Vehicle (serverbound)) - { 0x19, PacketTypesOut.SteerBoat }, // (Wiki name: Paddle Boat) - { 0x1A, PacketTypesOut.PickItem }, // - { 0x1B, PacketTypesOut.CraftRecipeRequest }, // (Wiki name: Place recipe) - { 0x1C, PacketTypesOut.PlayerAbilities }, // - { 0x1D, PacketTypesOut.PlayerDigging }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Player Action) - { 0x1E, PacketTypesOut.EntityAction }, // (Wiki name: Player Command) - { 0x1F, PacketTypesOut.SteerVehicle }, // (Wiki name: Player Input) - { 0x20, PacketTypesOut.Pong }, // (Wiki name: Pong (play)) - { 0x21, PacketTypesOut.SetDisplayedRecipe }, // (Wiki name: Recipe Book Change Settings) - { 0x22, PacketTypesOut.SetRecipeBookState }, // (Wiki name: Recipe Book Seen Recipe) - { 0x23, PacketTypesOut.NameItem }, // (Wiki name: Rename Item) - { 0x24, PacketTypesOut.ResourcePackStatus }, // (Wiki name: Resource Pack (serverbound)) - { 0x25, PacketTypesOut.AdvancementTab }, // (Wiki name: Seen Advancements) - { 0x26, PacketTypesOut.SelectTrade }, // - { 0x27, PacketTypesOut.SetBeaconEffect }, // Changed in 1.19 (Added a "Secondary Effect Present" and "Secondary Effect" fields) (Wiki name: Set Beacon) - (No need to be implemented) - { 0x28, PacketTypesOut.HeldItemChange }, // (Wiki name: Set Carried Item (serverbound)) - { 0x29, PacketTypesOut.UpdateCommandBlock }, // (Wiki name: Set Command Block) - { 0x2A, PacketTypesOut.UpdateCommandBlockMinecart }, // - { 0x2B, PacketTypesOut.CreativeInventoryAction }, // (Wiki name: Set Creative Mode Slot) - { 0x2C, PacketTypesOut.UpdateJigsawBlock }, // (Wiki name: Set Jigsaw Block) - { 0x2D, PacketTypesOut.UpdateStructureBlock }, // (Wiki name: Set Structure Block) - { 0x2E, PacketTypesOut.UpdateSign }, // (Wiki name: Sign Update) - { 0x2F, PacketTypesOut.Animation }, // (Wiki name: Swing) - { 0x30, PacketTypesOut.Spectate }, // (Wiki name: Teleport To Entity) - { 0x31, PacketTypesOut.PlayerBlockPlacement }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Use Item On) - { 0x32, PacketTypesOut.UseItem }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Use Item) - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1193.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1193.cs deleted file mode 100644 index 49e27a583a..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1193.cs +++ /dev/null @@ -1,178 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette1193 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.SpawnEntity }, // Changed in 1.19 (Wiki name: Spawn Entity) - { 0x01, PacketTypesIn.SpawnExperienceOrb }, // (Wiki name: Spawn Exeprience Orb) - { 0x02, PacketTypesIn.SpawnPlayer }, // - { 0x03, PacketTypesIn.EntityAnimation }, // (Wiki name: Entity Animation (clientbound)) - { 0x04, PacketTypesIn.Statistics }, // (Wiki name: Award Statistics) - { 0x05, PacketTypesIn.BlockChangedAck }, // Added 1.19 (Wiki name: Acknowledge Block Change) - { 0x06, PacketTypesIn.BlockBreakAnimation }, // (Wiki name: Set Block Destroy Stage) - { 0x07, PacketTypesIn.BlockEntityData }, // - { 0x08, PacketTypesIn.BlockAction }, // - { 0x09, PacketTypesIn.BlockChange }, // (Wiki name: Block Update) - { 0x0A, PacketTypesIn.BossBar }, // - { 0x0B, PacketTypesIn.ServerDifficulty }, // (Wiki name: Change Difficulty) - { 0x0C, PacketTypesIn.ClearTiles }, // - { 0x0D, PacketTypesIn.TabComplete }, // (Wiki name: Command Suggestions Response) - { 0x0E, PacketTypesIn.DeclareCommands }, // (Wiki name: Commands) - { 0x0F, PacketTypesIn.CloseWindow }, // (Wiki name: Close Container (clientbound)) - { 0x10, PacketTypesIn.WindowItems }, // (Wiki name: Set Container Content) - { 0x11, PacketTypesIn.WindowProperty }, // (Wiki name: Set Container Property) - { 0x12, PacketTypesIn.SetSlot }, // (Wiki name: Set Container Slot) - { 0x13, PacketTypesIn.SetCooldown }, // - { 0x14, PacketTypesIn.ChatSuggestions }, // Added in 1.19.1 - { 0x15, PacketTypesIn.PluginMessage }, // (Wiki name: Plugin Message (clientbound)) - { 0x16, PacketTypesIn.HideMessage }, // Added in 1.19.1 - { 0x17, PacketTypesIn.Disconnect }, // - { 0x18, PacketTypesIn.ProfilelessChatMessage }, // Added in 1.19.3 (Wiki name: Disguised Chat Message) - { 0x19, PacketTypesIn.EntityStatus }, // (Wiki name: Entity Event) - { 0x1A, PacketTypesIn.Explosion }, // Changed in 1.19 (Location fields are now Double instead of Float) (Wiki name: Explosion) - { 0x1B, PacketTypesIn.UnloadChunk }, // (Wiki name: Forget Chunk) - { 0x1C, PacketTypesIn.ChangeGameState }, // (Wiki name: Game Event) - { 0x1D, PacketTypesIn.OpenHorseWindow }, // (Wiki name: Horse Screen Open) - { 0x1E, PacketTypesIn.InitializeWorldBorder }, // - { 0x1F, PacketTypesIn.KeepAlive }, // - { 0x20, PacketTypesIn.ChunkData }, // - { 0x21, PacketTypesIn.Effect }, // (Wiki name: World Event) - { 0x22, PacketTypesIn.Particle }, // Changed in 1.19 ("Particle Data" field is now "Max Speed", it's the same Float data type) (Wiki name: Level Particle) (No need to be implemented) - { 0x23, PacketTypesIn.UpdateLight }, // (Wiki name: Light Update) - { 0x24, PacketTypesIn.JoinGame }, // Changed in 1.19 (lot's of changes) (Wiki name: Login (play)) - { 0x25, PacketTypesIn.MapData }, // (Wiki name: Map Item Data) - { 0x26, PacketTypesIn.TradeList }, // (Wiki name: Merchant Offers) - { 0x27, PacketTypesIn.EntityPosition }, // (Wiki name: Move Entity Position) - { 0x28, PacketTypesIn.EntityPositionAndRotation }, // (Wiki name: Move Entity Position and Rotation) - { 0x29, PacketTypesIn.EntityRotation }, // (Wiki name: Move Entity Rotation) - { 0x2A, PacketTypesIn.VehicleMove }, // (Wiki name: Move Vehicle) - { 0x2B, PacketTypesIn.OpenBook }, // - { 0x2C, PacketTypesIn.OpenWindow }, // (Wiki name: Open Screen) - { 0x2D, PacketTypesIn.OpenSignEditor }, // - { 0x2E, PacketTypesIn.Ping }, // (Wiki name: Ping (play)) - { 0x2F, PacketTypesIn.CraftRecipeResponse }, // (Wiki name: Place Ghost Recipe) - { 0x30, PacketTypesIn.PlayerAbilities }, // - { 0x31, PacketTypesIn.ChatMessage }, // Changed in 1.19 (Completely changed) (Wiki name: Player Chat Message) - { 0x32, PacketTypesIn.EndCombatEvent }, // (Wiki name: Player Combat End) - { 0x33, PacketTypesIn.EnterCombatEvent }, // (Wiki name: Player Combat Enter) - { 0x34, PacketTypesIn.DeathCombatEvent }, // (Wiki name: Player Combat Kill) - { 0x35, PacketTypesIn.PlayerRemove }, // Added in 1.19.3 (Not used) - { 0x36, PacketTypesIn.PlayerInfo }, // Changed in 1.19 (Heavy changes) - { 0x37, PacketTypesIn.FacePlayer }, // (Wiki name: Player Look At) - { 0x38, PacketTypesIn.PlayerPositionAndLook }, // (Wiki name: Player Position) - { 0x39, PacketTypesIn.UnlockRecipes }, // (Wiki name: Recipe) - { 0x3A, PacketTypesIn.DestroyEntities }, // (Wiki name: Remove Entites) - { 0x3B, PacketTypesIn.RemoveEntityEffect }, // - { 0x3C, PacketTypesIn.ResourcePackSend }, // (Wiki name: Resource Pack) - { 0x3D, PacketTypesIn.Respawn }, // Changed in 1.19 (Heavy changes) - { 0x3E, PacketTypesIn.EntityHeadLook }, // (Wiki name: Rotate Head) - { 0x3F, PacketTypesIn.MultiBlockChange }, // (Wiki name: Sections Block Update) - { 0x40, PacketTypesIn.SelectAdvancementTab }, // - { 0x41, PacketTypesIn.ServerData }, // Added in 1.19 - { 0x42, PacketTypesIn.ActionBar }, // (Wiki name: Set Action Bar Text) - { 0x43, PacketTypesIn.WorldBorderCenter }, // (Wiki name: Set Border Center) - { 0x44, PacketTypesIn.WorldBorderLerpSize }, // - { 0x45, PacketTypesIn.WorldBorderSize }, // (Wiki name: Set World Border Size) - { 0x46, PacketTypesIn.WorldBorderWarningDelay }, // (Wiki name: Set World Border Warning Delay) - { 0x47, PacketTypesIn.WorldBorderWarningReach }, // (Wiki name: Set Border Warning Distance) - { 0x48, PacketTypesIn.Camera }, // (Wiki name: Set Camera) - { 0x49, PacketTypesIn.HeldItemChange }, // (Wiki name: Set Carried Item (clientbound)) - { 0x4A, PacketTypesIn.UpdateViewPosition }, // (Wiki name: Set Chunk Cache Center) - { 0x4B, PacketTypesIn.UpdateViewDistance }, // (Wiki name: Set Chunk Cache Radius) - { 0x4C, PacketTypesIn.SpawnPosition }, // (Wiki name: Set Default Spawn Position) - { 0x4D, PacketTypesIn.DisplayScoreboard }, // (Wiki name: Set Display Objective) - { 0x4E, PacketTypesIn.EntityMetadata }, // (Wiki name: Set Entity Metadata) - { 0x4F, PacketTypesIn.AttachEntity }, // (Wiki name: Set Entity Link) - { 0x50, PacketTypesIn.EntityVelocity }, // (Wiki name: Set Entity Motion) - { 0x51, PacketTypesIn.EntityEquipment }, // (Wiki name: Set Equipment) - { 0x52, PacketTypesIn.SetExperience }, // - { 0x53, PacketTypesIn.UpdateHealth }, // (Wiki name: Set Health) - { 0x54, PacketTypesIn.ScoreboardObjective }, // (Wiki name: Set Objective) - { 0x55, PacketTypesIn.SetPassengers }, // - { 0x56, PacketTypesIn.Teams }, // (Wiki name: Set Player Team) - { 0x57, PacketTypesIn.UpdateScore }, // (Wiki name: Set Score) - { 0x58, PacketTypesIn.UpdateSimulationDistance }, // (Wiki name: Set Simulation Distance) - { 0x59, PacketTypesIn.SetTitleSubTitle }, // (Wiki name: Set Subtitle Test) - { 0x5A, PacketTypesIn.TimeUpdate }, // (Wiki name: Set Time) - { 0x5B, PacketTypesIn.SetTitleText }, // (Wiki name: Set Title) - { 0x5C, PacketTypesIn.SetTitleTime }, // (Wiki name: Set Titles Animation) - { 0x5D, PacketTypesIn.EntitySoundEffect }, // (Wiki name: Sound Entity) - { 0x5E, PacketTypesIn.SoundEffect }, // Changed in 1.19 (Added "Seed" field) (Wiki name: Sound Effect) (No need to be implemented) - { 0x5F, PacketTypesIn.StopSound }, // - { 0x60, PacketTypesIn.SystemChat }, // Added in 1.19 (Wiki name: System Chat Message) - { 0x61, PacketTypesIn.PlayerListHeaderAndFooter }, // (Wiki name: Tab List) - { 0x62, PacketTypesIn.NBTQueryResponse }, // (Wiki name: Tab Query) - { 0x63, PacketTypesIn.CollectItem }, // (Wiki name: Take Item Entity) - { 0x64, PacketTypesIn.EntityTeleport }, // (Wiki name: Teleport Entity) - { 0x65, PacketTypesIn.Advancements }, // (Wiki name: Update Advancements) - { 0x66, PacketTypesIn.EntityProperties }, // (Wiki name: Update Attributes) - { 0x67, PacketTypesIn.FeatureFlags }, // Added in 1.19.3 (Not yet clear what is the purpose of this packet) - { 0x68, PacketTypesIn.EntityEffect }, // Changed in 1.19 (Added "Has Factor Data" and "Factor Codec" fields) (Wiki name: Entity Effect) - { 0x69, PacketTypesIn.DeclareRecipes }, // (Wiki name: Update Recipes) - { 0x6A, PacketTypesIn.Tags }, // (Wiki name: Update Tags) - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, // (Wiki name: Confirm Teleportation) - { 0x01, PacketTypesOut.QueryBlockNBT }, // (Wiki name: Query Block Entity Tag) - { 0x02, PacketTypesOut.SetDifficulty }, // (Wiki name: Change Difficutly) - { 0x03, PacketTypesOut.MessageAcknowledgment }, // Added in 1.19.1 - { 0x04, PacketTypesOut.ChatCommand }, // Added in 1.19 - { 0x05, PacketTypesOut.ChatMessage }, // Changed in 1.19 (Completely changed) (Wiki name: Chat) - { 0x06, PacketTypesOut.ClientStatus }, // (Wiki name: Client Command) - { 0x07, PacketTypesOut.ClientSettings }, // (Wiki name: Client Information) - { 0x08, PacketTypesOut.TabComplete }, // (Wiki name: Command Suggestions Request) - { 0x09, PacketTypesOut.ClickWindowButton }, // (Wiki name: Click Container Button) - { 0x0A, PacketTypesOut.ClickWindow }, // (Wiki name: Click Container) - { 0x0B, PacketTypesOut.CloseWindow }, // (Wiki name: Close Container (serverbound)) - { 0x0C, PacketTypesOut.PluginMessage }, // (Wiki name: Plugin Message (serverbound)) - { 0x0D, PacketTypesOut.EditBook }, // - { 0x0E, PacketTypesOut.EntityNBTRequest }, // (Wiki name: Query Entity Tag) - { 0x0F, PacketTypesOut.InteractEntity }, // (Wiki name: Interact) - { 0x10, PacketTypesOut.GenerateStructure }, // (Wiki name: Jigsaw Generate) - { 0x11, PacketTypesOut.KeepAlive }, // - { 0x12, PacketTypesOut.LockDifficulty }, // - { 0x13, PacketTypesOut.PlayerPosition }, // (Wiki name: Move Player Position) - { 0x14, PacketTypesOut.PlayerPositionAndRotation }, // (Wiki name: Set Player Position and Rotation) - { 0x15, PacketTypesOut.PlayerRotation }, // (Wiki name: Set Player Rotation) - { 0x16, PacketTypesOut.PlayerMovement }, // (Wiki name: Set Player On Ground) - { 0x17, PacketTypesOut.VehicleMove }, // (Wiki name: Move Vehicle (serverbound)) - { 0x18, PacketTypesOut.SteerBoat }, // (Wiki name: Paddle Boat) - { 0x19, PacketTypesOut.PickItem }, // - { 0x1A, PacketTypesOut.CraftRecipeRequest }, // (Wiki name: Place recipe) - { 0x1B, PacketTypesOut.PlayerAbilities }, // - { 0x1C, PacketTypesOut.PlayerDigging }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Player Action) - { 0x1D, PacketTypesOut.EntityAction }, // (Wiki name: Player Command) - { 0x1E, PacketTypesOut.SteerVehicle }, // (Wiki name: Player Input) - { 0x1F, PacketTypesOut.Pong }, // (Wiki name: Pong (play)) - { 0x20, PacketTypesOut.PlayerSession }, // Added in 1.19.3 - { 0x21, PacketTypesOut.SetDisplayedRecipe }, // (Wiki name: Recipe Book Change Settings) - { 0x22, PacketTypesOut.SetRecipeBookState }, // (Wiki name: Recipe Book Seen Recipe) - { 0x23, PacketTypesOut.NameItem }, // (Wiki name: Rename Item) - { 0x24, PacketTypesOut.ResourcePackStatus }, // (Wiki name: Resource Pack (serverbound)) - { 0x25, PacketTypesOut.AdvancementTab }, // (Wiki name: Seen Advancements) - { 0x26, PacketTypesOut.SelectTrade }, // - { 0x27, PacketTypesOut.SetBeaconEffect }, // Changed in 1.19 (Added a "Secondary Effect Present" and "Secondary Effect" fields) (Wiki name: Set Beacon) - (No need to be implemented) - { 0x28, PacketTypesOut.HeldItemChange }, // (Wiki name: Set Carried Item (serverbound)) - { 0x29, PacketTypesOut.UpdateCommandBlock }, // (Wiki name: Set Command Block) - { 0x2A, PacketTypesOut.UpdateCommandBlockMinecart }, // - { 0x2B, PacketTypesOut.CreativeInventoryAction }, // (Wiki name: Set Creative Mode Slot) - { 0x2C, PacketTypesOut.UpdateJigsawBlock }, // (Wiki name: Set Jigsaw Block) - { 0x2D, PacketTypesOut.UpdateStructureBlock }, // (Wiki name: Set Structure Block) - { 0x2E, PacketTypesOut.UpdateSign }, // (Wiki name: Sign Update) - { 0x2F, PacketTypesOut.Animation }, // (Wiki name: Swing) - { 0x30, PacketTypesOut.Spectate }, // (Wiki name: Teleport To Entity) - { 0x31, PacketTypesOut.PlayerBlockPlacement }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Use Item On) - { 0x32, PacketTypesOut.UseItem }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Use Item) - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1194.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1194.cs deleted file mode 100644 index 489961feec..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1194.cs +++ /dev/null @@ -1,183 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette1194 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.Bundle }, // Added in 1.19.4 - { 0x01, PacketTypesIn.SpawnEntity }, // Changed in 1.19 (Wiki name: Spawn Entity) - { 0x02, PacketTypesIn.SpawnExperienceOrb }, // (Wiki name: Spawn Exeprience Orb) - { 0x03, PacketTypesIn.SpawnPlayer }, // - { 0x04, PacketTypesIn.EntityAnimation }, // (Wiki name: Entity Animation (clientbound)) - { 0x05, PacketTypesIn.Statistics }, // (Wiki name: Award Statistics) - { 0x06, PacketTypesIn.BlockChangedAck }, // Added 1.19 (Wiki name: Acknowledge Block Change) - { 0x07, PacketTypesIn.BlockBreakAnimation }, // (Wiki name: Set Block Destroy Stage) - { 0x08, PacketTypesIn.BlockEntityData }, // - { 0x09, PacketTypesIn.BlockAction }, // - { 0x0A, PacketTypesIn.BlockChange }, // (Wiki name: Block Update) - { 0x0B, PacketTypesIn.BossBar }, // - { 0x0C, PacketTypesIn.ServerDifficulty }, // (Wiki name: Change Difficulty) - { 0x0D, PacketTypesIn.ChunksBiomes }, // Added in 1.19.4 - { 0x0E, PacketTypesIn.ClearTiles }, // - { 0x0F, PacketTypesIn.TabComplete }, // (Wiki name: Command Suggestions Response) - { 0x10, PacketTypesIn.DeclareCommands }, // (Wiki name: Commands) - { 0x11, PacketTypesIn.CloseWindow }, // (Wiki name: Close Container (clientbound)) - { 0x12, PacketTypesIn.WindowItems }, // (Wiki name: Set Container Content) - { 0x13, PacketTypesIn.WindowProperty }, // (Wiki name: Set Container Property) - { 0x14, PacketTypesIn.SetSlot }, // (Wiki name: Set Container Slot) - { 0x15, PacketTypesIn.SetCooldown }, // - { 0x16, PacketTypesIn.ChatSuggestions }, // Added in 1.19.1 - { 0x17, PacketTypesIn.PluginMessage }, // (Wiki name: Plugin Message (clientbound)) - { 0x18, PacketTypesIn.DamageEvent }, // Added in 1.19.4 - { 0x19, PacketTypesIn.HideMessage }, // Added in 1.19.1 - { 0x1A, PacketTypesIn.Disconnect }, // - { 0x1B, PacketTypesIn.ProfilelessChatMessage }, // Added in 1.19.3 (Wiki name: Disguised Chat Message) - { 0x1C, PacketTypesIn.EntityStatus }, // (Wiki name: Entity Event) - { 0x1D, PacketTypesIn.Explosion }, // Changed in 1.19 (Location fields are now Double instead of Float) (Wiki name: Explosion) - { 0x1E, PacketTypesIn.UnloadChunk }, // (Wiki name: Forget Chunk) - { 0x1F, PacketTypesIn.ChangeGameState }, // (Wiki name: Game Event) - { 0x20, PacketTypesIn.OpenHorseWindow }, // (Wiki name: Horse Screen Open) - { 0x21, PacketTypesIn.HurtAnimation }, // 1.19.4 - { 0x22, PacketTypesIn.InitializeWorldBorder }, // - { 0x23, PacketTypesIn.KeepAlive }, // - { 0x24, PacketTypesIn.ChunkData }, // - { 0x25, PacketTypesIn.Effect }, // (Wiki name: World Event) - { 0x26, PacketTypesIn.Particle }, // Changed in 1.19 ("Particle Data" field is now "Max Speed", it's the same Float data type) (Wiki name: Level Particle) (No need to be implemented) - { 0x27, PacketTypesIn.UpdateLight }, // (Wiki name: Light Update) - { 0x28, PacketTypesIn.JoinGame }, // Changed in 1.19 (lot's of changes) (Wiki name: Login (play)) - { 0x29, PacketTypesIn.MapData }, // (Wiki name: Map Item Data) - { 0x2A, PacketTypesIn.TradeList }, // (Wiki name: Merchant Offers) - { 0x2B, PacketTypesIn.EntityPosition }, // (Wiki name: Move Entity Position) - { 0x2C, PacketTypesIn.EntityPositionAndRotation }, // (Wiki name: Move Entity Position and Rotation) - { 0x2D, PacketTypesIn.EntityRotation }, // (Wiki name: Move Entity Rotation) - { 0x2E, PacketTypesIn.VehicleMove }, // (Wiki name: Move Vehicle) - { 0x2F, PacketTypesIn.OpenBook }, // - { 0x30, PacketTypesIn.OpenWindow }, // (Wiki name: Open Screen) - { 0x31, PacketTypesIn.OpenSignEditor }, // - { 0x32, PacketTypesIn.Ping }, // (Wiki name: Ping (play)) - { 0x33, PacketTypesIn.CraftRecipeResponse }, // (Wiki name: Place Ghost Recipe) - { 0x34, PacketTypesIn.PlayerAbilities }, // - { 0x35, PacketTypesIn.ChatMessage }, // Changed in 1.19 (Completely changed) (Wiki name: Player Chat Message) - { 0x36, PacketTypesIn.EndCombatEvent }, // (Wiki name: Player Combat End) - { 0x37, PacketTypesIn.EnterCombatEvent }, // (Wiki name: Player Combat Enter) - { 0x38, PacketTypesIn.DeathCombatEvent }, // (Wiki name: Player Combat Kill) - { 0x39, PacketTypesIn.PlayerRemove }, // Added in 1.19.3 (Not used) - { 0x3A, PacketTypesIn.PlayerInfo }, // Changed in 1.19 (Heavy changes) - { 0x3B, PacketTypesIn.FacePlayer }, // (Wiki name: Player Look At) - { 0x3C, PacketTypesIn.PlayerPositionAndLook }, // (Wiki name: Player Position) - { 0x3D, PacketTypesIn.UnlockRecipes }, // (Wiki name: Recipe) - { 0x3E, PacketTypesIn.DestroyEntities }, // (Wiki name: Remove Entites) - { 0x3F, PacketTypesIn.RemoveEntityEffect }, // - { 0x40, PacketTypesIn.ResourcePackSend }, // (Wiki name: Resource Pack) - { 0x41, PacketTypesIn.Respawn }, // Changed in 1.19 (Heavy changes) - { 0x42, PacketTypesIn.EntityHeadLook }, // (Wiki name: Rotate Head) - { 0x43, PacketTypesIn.MultiBlockChange }, // (Wiki name: Sections Block Update) - { 0x44, PacketTypesIn.SelectAdvancementTab }, // - { 0x45, PacketTypesIn.ServerData }, // Added in 1.19 - { 0x46, PacketTypesIn.ActionBar }, // (Wiki name: Set Action Bar Text) - { 0x47, PacketTypesIn.WorldBorderCenter }, // (Wiki name: Set Border Center) - { 0x48, PacketTypesIn.WorldBorderLerpSize }, // - { 0x49, PacketTypesIn.WorldBorderSize }, // (Wiki name: Set World Border Size) - { 0x4A, PacketTypesIn.WorldBorderWarningDelay }, // (Wiki name: Set World Border Warning Delay) - { 0x4B, PacketTypesIn.WorldBorderWarningReach }, // (Wiki name: Set Border Warning Distance) - { 0x4C, PacketTypesIn.Camera }, // (Wiki name: Set Camera) - { 0x4D, PacketTypesIn.HeldItemChange }, // (Wiki name: Set Carried Item (clientbound)) - { 0x4E, PacketTypesIn.UpdateViewPosition }, // (Wiki name: Set Chunk Cache Center) - { 0x4F, PacketTypesIn.UpdateViewDistance }, // (Wiki name: Set Chunk Cache Radius) - { 0x50, PacketTypesIn.SpawnPosition }, // (Wiki name: Set Default Spawn Position) - { 0x51, PacketTypesIn.DisplayScoreboard }, // (Wiki name: Set Display Objective) - { 0x52, PacketTypesIn.EntityMetadata }, // (Wiki name: Set Entity Metadata) - { 0x53, PacketTypesIn.AttachEntity }, // (Wiki name: Set Entity Link) - { 0x54, PacketTypesIn.EntityVelocity }, // (Wiki name: Set Entity Motion) - { 0x55, PacketTypesIn.EntityEquipment }, // (Wiki name: Set Equipment) - { 0x56, PacketTypesIn.SetExperience }, // - { 0x57, PacketTypesIn.UpdateHealth }, // (Wiki name: Set Health) - { 0x58, PacketTypesIn.ScoreboardObjective }, // (Wiki name: Set Objective) - { 0x59, PacketTypesIn.SetPassengers }, // - { 0x5A, PacketTypesIn.Teams }, // (Wiki name: Set Player Team) - { 0x5B, PacketTypesIn.UpdateScore }, // (Wiki name: Set Score) - { 0x5C, PacketTypesIn.UpdateSimulationDistance }, // (Wiki name: Set Simulation Distance) - { 0x5D, PacketTypesIn.SetTitleSubTitle }, // (Wiki name: Set Subtitle Test) - { 0x5E, PacketTypesIn.TimeUpdate }, // (Wiki name: Set Time) - { 0x5F, PacketTypesIn.SetTitleText }, // (Wiki name: Set Title) - { 0x60, PacketTypesIn.SetTitleTime }, // (Wiki name: Set Titles Animation) - { 0x61, PacketTypesIn.EntitySoundEffect }, // (Wiki name: Sound Entity) - { 0x62, PacketTypesIn.SoundEffect }, // Changed in 1.19 (Added "Seed" field) (Wiki name: Sound Effect) (No need to be implemented) - { 0x63, PacketTypesIn.StopSound }, // - { 0x64, PacketTypesIn.SystemChat }, // Added in 1.19 (Wiki name: System Chat Message) - { 0x65, PacketTypesIn.PlayerListHeaderAndFooter }, // (Wiki name: Tab List) - { 0x66, PacketTypesIn.NBTQueryResponse }, // (Wiki name: Tab Query) - { 0x67, PacketTypesIn.CollectItem }, // (Wiki name: Take Item Entity) - { 0x68, PacketTypesIn.EntityTeleport }, // (Wiki name: Teleport Entity) - { 0x69, PacketTypesIn.Advancements }, // (Wiki name: Update Advancements) (Unused) - { 0x6A, PacketTypesIn.EntityProperties }, // (Wiki name: Update Attributes) - { 0x6B, PacketTypesIn.FeatureFlags }, // Added in 1.19.3 (Not yet clear what is the purpose of this packet) - { 0x6C, PacketTypesIn.EntityEffect }, // Changed in 1.19 (Added "Has Factor Data" and "Factor Codec" fields) (Wiki name: Entity Effect) - { 0x6D, PacketTypesIn.DeclareRecipes }, // (Wiki name: Update Recipes) (Unused) - { 0x6E, PacketTypesIn.Tags }, // (Wiki name: Update Tags) - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, // (Wiki name: Confirm Teleportation) - { 0x01, PacketTypesOut.QueryBlockNBT }, // (Wiki name: Query Block Entity Tag) - { 0x02, PacketTypesOut.SetDifficulty }, // (Wiki name: Change Difficutly) - { 0x03, PacketTypesOut.MessageAcknowledgment }, // Added in 1.19.1 - { 0x04, PacketTypesOut.ChatCommand }, // Added in 1.19 - { 0x05, PacketTypesOut.ChatMessage }, // Changed in 1.19 (Completely changed) (Wiki name: Chat) - { 0x06, PacketTypesOut.PlayerSession }, // Added in 1.19.3 - { 0x07, PacketTypesOut.ClientStatus }, // (Wiki name: Client Command) - { 0x08, PacketTypesOut.ClientSettings }, // (Wiki name: Client Information) - { 0x09, PacketTypesOut.TabComplete }, // (Wiki name: Command Suggestions Request) - { 0x0A, PacketTypesOut.ClickWindowButton }, // (Wiki name: Click Container Button) - { 0x0B, PacketTypesOut.ClickWindow }, // (Wiki name: Click Container) - { 0x0C, PacketTypesOut.CloseWindow }, // (Wiki name: Close Container (serverbound)) - { 0x0D, PacketTypesOut.PluginMessage }, // (Wiki name: Plugin Message (serverbound)) - { 0x0E, PacketTypesOut.EditBook }, // - { 0x0F, PacketTypesOut.EntityNBTRequest }, // (Wiki name: Query Entity Tag) - { 0x10, PacketTypesOut.InteractEntity }, // (Wiki name: Interact) - { 0x11, PacketTypesOut.GenerateStructure }, // (Wiki name: Jigsaw Generate) - { 0x12, PacketTypesOut.KeepAlive }, // - { 0x13, PacketTypesOut.LockDifficulty }, // - { 0x14, PacketTypesOut.PlayerPosition }, // (Wiki name: Move Player Position) - { 0x15, PacketTypesOut.PlayerPositionAndRotation }, // (Wiki name: Set Player Position and Rotation) - { 0x16, PacketTypesOut.PlayerRotation }, // (Wiki name: Set Player Rotation) - { 0x17, PacketTypesOut.PlayerMovement }, // (Wiki name: Set Player On Ground) - { 0x18, PacketTypesOut.VehicleMove }, // (Wiki name: Move Vehicle (serverbound)) - { 0x19, PacketTypesOut.SteerBoat }, // (Wiki name: Paddle Boat) - { 0x1A, PacketTypesOut.PickItem }, // - { 0x1B, PacketTypesOut.CraftRecipeRequest }, // (Wiki name: Place recipe) - { 0x1C, PacketTypesOut.PlayerAbilities }, // - { 0x1D, PacketTypesOut.PlayerDigging }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Player Action) - { 0x1E, PacketTypesOut.EntityAction }, // (Wiki name: Player Command) - { 0x1F, PacketTypesOut.SteerVehicle }, // (Wiki name: Player Input) - { 0x20, PacketTypesOut.Pong }, // (Wiki name: Pong (play)) - - { 0x21, PacketTypesOut.SetDisplayedRecipe }, // (Wiki name: Recipe Book Change Settings) - { 0x22, PacketTypesOut.SetRecipeBookState }, // (Wiki name: Recipe Book Seen Recipe) - { 0x23, PacketTypesOut.NameItem }, // (Wiki name: Rename Item) - { 0x24, PacketTypesOut.ResourcePackStatus }, // (Wiki name: Resource Pack (serverbound)) - { 0x25, PacketTypesOut.AdvancementTab }, // (Wiki name: Seen Advancements) - { 0x26, PacketTypesOut.SelectTrade }, // - { 0x27, PacketTypesOut.SetBeaconEffect }, // Changed in 1.19 (Added a "Secondary Effect Present" and "Secondary Effect" fields) (Wiki name: Set Beacon) - (No need to be implemented) - { 0x28, PacketTypesOut.HeldItemChange }, // (Wiki name: Set Carried Item (serverbound)) - { 0x29, PacketTypesOut.UpdateCommandBlock }, // (Wiki name: Set Command Block) - { 0x2A, PacketTypesOut.UpdateCommandBlockMinecart }, // - { 0x2B, PacketTypesOut.CreativeInventoryAction }, // (Wiki name: Set Creative Mode Slot) - { 0x2C, PacketTypesOut.UpdateJigsawBlock }, // (Wiki name: Set Jigsaw Block) - { 0x2D, PacketTypesOut.UpdateStructureBlock }, // (Wiki name: Set Structure Block) - { 0x2E, PacketTypesOut.UpdateSign }, // (Wiki name: Sign Update) - { 0x2F, PacketTypesOut.Animation }, // (Wiki name: Swing) - { 0x30, PacketTypesOut.Spectate }, // (Wiki name: Teleport To Entity) - { 0x31, PacketTypesOut.PlayerBlockPlacement }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Use Item On) - { 0x32, PacketTypesOut.UseItem }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Use Item) - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1202.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1202.cs deleted file mode 100644 index 7781a9c972..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1202.cs +++ /dev/null @@ -1,210 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette1202 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.Bundle }, // Added in 1.19.4 - { 0x01, PacketTypesIn.SpawnEntity }, // Changed in 1.19 (Wiki name: Spawn Entity) - { 0x02, PacketTypesIn.SpawnExperienceOrb }, // (Wiki name: Spawn Exeprience Orb) - { 0x03, PacketTypesIn.EntityAnimation }, // (Wiki name: Entity Animation (clientbound)) - { 0x04, PacketTypesIn.Statistics }, // (Wiki name: Award Statistics) - { 0x05, PacketTypesIn.BlockChangedAck }, // Added 1.19 (Wiki name: Acknowledge Block Change) - { 0x06, PacketTypesIn.BlockBreakAnimation }, // (Wiki name: Set Block Destroy Stage) - { 0x07, PacketTypesIn.BlockEntityData }, // - { 0x08, PacketTypesIn.BlockAction }, // - { 0x09, PacketTypesIn.BlockChange }, // (Wiki name: Block Update) - { 0x0A, PacketTypesIn.BossBar }, // - { 0x0B, PacketTypesIn.ServerDifficulty }, // (Wiki name: Change Difficulty) - { 0x0C, PacketTypesIn.ChunkBatchFinished }, // Added in 1.20.2 - { 0x0D, PacketTypesIn.ChunkBatchStarted }, // Added in 1.20.2 - { 0x0E, PacketTypesIn.ChunksBiomes }, // Added in 1.19.4 - { 0x0F, PacketTypesIn.ClearTiles }, // - { 0x10, PacketTypesIn.TabComplete }, // (Wiki name: Command Suggestions Response) - { 0x11, PacketTypesIn.DeclareCommands }, // (Wiki name: Commands) - { 0x12, PacketTypesIn.CloseWindow }, // (Wiki name: Close Container (clientbound)) - { 0x13, PacketTypesIn.WindowItems }, // (Wiki name: Set Container Content) - { 0x14, PacketTypesIn.WindowProperty }, // (Wiki name: Set Container Property) - { 0x15, PacketTypesIn.SetSlot }, // (Wiki name: Set Container Slot) - { 0x16, PacketTypesIn.SetCooldown }, // - { 0x17, PacketTypesIn.ChatSuggestions }, // Added in 1.19.1 - { 0x18, PacketTypesIn.PluginMessage }, // (Wiki name: Plugin Message (clientbound)) - { 0x19, PacketTypesIn.DamageEvent }, // Added in 1.19.4 - { 0x1A, PacketTypesIn.HideMessage }, // Added in 1.19.1 - { 0x1B, PacketTypesIn.Disconnect }, // - { 0x1C, PacketTypesIn.ProfilelessChatMessage }, // Added in 1.19.3 (Wiki name: Disguised Chat Message) - { 0x1D, PacketTypesIn.EntityStatus }, // (Wiki name: Entity Event) - { 0x1E, PacketTypesIn.Explosion }, // Changed in 1.19 (Location fields are now Double instead of Float) (Wiki name: Explosion) - { 0x1F, PacketTypesIn.UnloadChunk }, // (Wiki name: Forget Chunk) - { 0x20, PacketTypesIn.ChangeGameState }, // (Wiki name: Game Event) - { 0x21, PacketTypesIn.OpenHorseWindow }, // (Wiki name: Horse Screen Open) - { 0x22, PacketTypesIn.HurtAnimation }, // Added in 1.19.4 - { 0x23, PacketTypesIn.InitializeWorldBorder }, // - { 0x24, PacketTypesIn.KeepAlive }, // - { 0x25, PacketTypesIn.ChunkData }, // - { 0x26, PacketTypesIn.Effect }, // (Wiki name: World Event) - { 0x27, PacketTypesIn.Particle }, // Changed in 1.19 ("Particle Data" field is now "Max Speed", it's the same Float data type) (Wiki name: Level Particle) (No need to be implemented) - { 0x28, PacketTypesIn.UpdateLight }, // (Wiki name: Light Update) - { 0x29, PacketTypesIn.JoinGame }, // Changed in 1.20.2 (Wiki name: Login (play)) - { 0x2A, PacketTypesIn.MapData }, // (Wiki name: Map Item Data) - { 0x2B, PacketTypesIn.TradeList }, // (Wiki name: Merchant Offers) - { 0x2C, PacketTypesIn.EntityPosition }, // (Wiki name: Move Entity Position) - { 0x2D, PacketTypesIn.EntityPositionAndRotation }, // (Wiki name: Move Entity Position and Rotation) - { 0x2E, PacketTypesIn.EntityRotation }, // (Wiki name: Move Entity Rotation) - { 0x2F, PacketTypesIn.VehicleMove }, // (Wiki name: Move Vehicle) - { 0x30, PacketTypesIn.OpenBook }, // - { 0x31, PacketTypesIn.OpenWindow }, // (Wiki name: Open Screen) - { 0x32, PacketTypesIn.OpenSignEditor }, // - { 0x33, PacketTypesIn.Ping }, // (Wiki name: Ping (play)) - { 0x34, PacketTypesIn.PingResponse }, // Added in 1.20.2 - { 0x35, PacketTypesIn.CraftRecipeResponse }, // (Wiki name: Place Ghost Recipe) - { 0x36, PacketTypesIn.PlayerAbilities }, // - { 0x37, PacketTypesIn.ChatMessage }, // Changed in 1.19 (Completely changed) (Wiki name: Player Chat Message) - { 0x38, PacketTypesIn.EndCombatEvent }, // (Wiki name: End Combat) - { 0x39, PacketTypesIn.EnterCombatEvent }, // (Wiki name: Enter Combat) - { 0x3A, PacketTypesIn.DeathCombatEvent }, // (Wiki name: Combat Death) - { 0x3B, PacketTypesIn.PlayerRemove }, // Added in 1.19.3 (Not used) - { 0x3C, PacketTypesIn.PlayerInfo }, // Changed in 1.19 (Heavy changes) - { 0x3D, PacketTypesIn.FacePlayer }, // (Wiki name: Player Look At) - { 0x3E, PacketTypesIn.PlayerPositionAndLook }, // (Wiki name: Synchronize Player Position) - { 0x3F, PacketTypesIn.UnlockRecipes }, // (Wiki name: Update Recipe Book) - { 0x40, PacketTypesIn.DestroyEntities }, // (Wiki name: Remove Entites) - { 0x41, PacketTypesIn.RemoveEntityEffect }, // - { 0x42, PacketTypesIn.ResourcePackSend }, // (Wiki name: Resource Pack) - { 0x43, PacketTypesIn.Respawn }, // Changed in 1.20.2 - { 0x44, PacketTypesIn.EntityHeadLook }, // (Wiki name: Set Head Rotation) - { 0x45, PacketTypesIn.MultiBlockChange }, // (Wiki name: Update Section Blocks) - { 0x46, PacketTypesIn.SelectAdvancementTab }, // - { 0x47, PacketTypesIn.ServerData }, // Added in 1.19 - { 0x48, PacketTypesIn.ActionBar }, // (Wiki name: Set Action Bar Text) - { 0x49, PacketTypesIn.WorldBorderCenter }, // (Wiki name: Set Border Center) - { 0x4A, PacketTypesIn.WorldBorderLerpSize }, // - { 0x4B, PacketTypesIn.WorldBorderSize }, // (Wiki name: Set World Border Size) - { 0x4C, PacketTypesIn.WorldBorderWarningDelay }, // (Wiki name: Set World Border Warning Delay) - { 0x4D, PacketTypesIn.WorldBorderWarningReach }, // (Wiki name: Set Border Warning Distance) - { 0x4E, PacketTypesIn.Camera }, // (Wiki name: Set Camera) - { 0x4F, PacketTypesIn.HeldItemChange }, // (Wiki name: Set Held Item) - { 0x50, PacketTypesIn.UpdateViewPosition }, // (Wiki name: Set Center Chunk) - { 0x51, PacketTypesIn.UpdateViewDistance }, // (Wiki name: Set Render Distance) - { 0x52, PacketTypesIn.SpawnPosition }, // (Wiki name: Set Default Spawn Position) - { 0x53, PacketTypesIn.DisplayScoreboard }, // (Wiki name: Set Display Objective) - { 0x54, PacketTypesIn.EntityMetadata }, // (Wiki name: Set Entity Metadata) - { 0x55, PacketTypesIn.AttachEntity }, // (Wiki name: Link Entities) - { 0x56, PacketTypesIn.EntityVelocity }, // (Wiki name: Set Entity Velocity) - { 0x57, PacketTypesIn.EntityEquipment }, // (Wiki name: Set Equipment) - { 0x58, PacketTypesIn.SetExperience }, // Changed in 1.20.2 - { 0x59, PacketTypesIn.UpdateHealth }, // (Wiki name: Set Health) - { 0x5A, PacketTypesIn.ScoreboardObjective }, // (Wiki name: Update Objectives) - { 0x5B, PacketTypesIn.SetPassengers }, // - { 0x5C, PacketTypesIn.Teams }, // (Wiki name: Update Teams) - { 0x5D, PacketTypesIn.UpdateScore }, // (Wiki name: Update Score) - { 0x5E, PacketTypesIn.UpdateSimulationDistance }, // (Wiki name: Set Simulation Distance) - { 0x5F, PacketTypesIn.SetTitleSubTitle }, // (Wiki name: Set Subtitle Test) - { 0x60, PacketTypesIn.TimeUpdate }, // (Wiki name: Set Time) - { 0x61, PacketTypesIn.SetTitleText }, // (Wiki name: Set Title) - { 0x62, PacketTypesIn.SetTitleTime }, // (Wiki name: Set Title Animation Times) - { 0x63, PacketTypesIn.EntitySoundEffect }, // (Wiki name: Sound Entity) - { 0x64, PacketTypesIn.SoundEffect }, // Changed in 1.19 (Added "Seed" field) (Wiki name: Sound Effect) (No need to be implemented) - { 0x65, PacketTypesIn.StartConfiguration }, // Added in 1.20.2 - { 0x66, PacketTypesIn.StopSound }, // - { 0x67, PacketTypesIn.SystemChat }, // Added in 1.19 (Wiki name: System Chat Message) - { 0x68, PacketTypesIn.PlayerListHeaderAndFooter }, // (Wiki name: Set Tab List Header And Footer) - { 0x69, PacketTypesIn.NBTQueryResponse }, // (Wiki name: Tag Query Response) - { 0x6A, PacketTypesIn.CollectItem }, // (Wiki name: Pickup Item) - { 0x6B, PacketTypesIn.EntityTeleport }, // (Wiki name: Teleport Entity) - { 0x6C, PacketTypesIn.Advancements }, // (Wiki name: Update Advancements) (Unused) - { 0x6D, PacketTypesIn.EntityProperties }, // (Wiki name: Update Attributes) - { 0x6E, PacketTypesIn.EntityEffect }, // Changed in 1.19 (Added "Has Factor Data" and "Factor Codec" fields) (Wiki name: Entity Effect) - { 0x6F, PacketTypesIn.DeclareRecipes }, // (Wiki name: Update Recipes) (Unused) - { 0x70, PacketTypesIn.Tags }, // (Wiki name: Update Tags) - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, // (Wiki name: Confirm Teleportation) - { 0x01, PacketTypesOut.QueryBlockNBT }, // (Wiki name: Query Block Entity Tag) - { 0x02, PacketTypesOut.SetDifficulty }, // (Wiki name: Change Difficulty) - { 0x03, PacketTypesOut.MessageAcknowledgment }, // Added in 1.19.1 - { 0x04, PacketTypesOut.ChatCommand }, // Added in 1.19 - { 0x05, PacketTypesOut.ChatMessage }, // Changed in 1.19 (Completely changed) (Wiki name: Chat) - { 0x06, PacketTypesOut.PlayerSession }, // Added in 1.19.3 - { 0x07, PacketTypesOut.ChunkBatchReceived }, // Added in 1.20.2 - { 0x08, PacketTypesOut.ClientStatus }, // (Wiki name: Client Command) - { 0x09, PacketTypesOut.ClientSettings }, // (Wiki name: Client Information) - { 0x0A, PacketTypesOut.TabComplete }, // (Wiki name: Command Suggestions Request) - { 0x0B, PacketTypesOut.AcknowledgeConfiguration }, // Added in 1.20.2 - { 0x0C, PacketTypesOut.ClickWindowButton }, // (Wiki name: Click Container Button) - { 0x0D, PacketTypesOut.ClickWindow }, // (Wiki name: Click Container) - { 0x0E, PacketTypesOut.CloseWindow }, // (Wiki name: Close Container (serverbound)) - { 0x0F, PacketTypesOut.PluginMessage }, // (Wiki name: Serverbound Plugin Message) - { 0x10, PacketTypesOut.EditBook }, // - { 0x11, PacketTypesOut.EntityNBTRequest }, // (Wiki name: Query Entity Tag) - { 0x12, PacketTypesOut.InteractEntity }, // (Wiki name: Interact) - { 0x13, PacketTypesOut.GenerateStructure }, // (Wiki name: Jigsaw Generate) - { 0x14, PacketTypesOut.KeepAlive }, // (Wiki name: Serverbound Keep Alive (play)) - { 0x15, PacketTypesOut.LockDifficulty }, // - { 0x16, PacketTypesOut.PlayerPosition }, // (Wiki name: Move Player Position) - { 0x17, PacketTypesOut.PlayerPositionAndRotation }, // (Wiki name: Set Player Position and Rotation) - { 0x18, PacketTypesOut.PlayerRotation }, // (Wiki name: Set Player Rotation) - { 0x19, PacketTypesOut.PlayerMovement }, // (Wiki name: Set Player On Ground) - { 0x1A, PacketTypesOut.VehicleMove }, // (Wiki name: Move Vehicle (serverbound)) - { 0x1B, PacketTypesOut.SteerBoat }, // (Wiki name: Paddle Boat) - { 0x1C, PacketTypesOut.PickItem }, // - { 0x1D, PacketTypesOut.PingRequest }, // Added in 1.20.2 - { 0x1E, PacketTypesOut.CraftRecipeRequest }, // (Wiki name: Place recipe) - { 0x1F, PacketTypesOut.PlayerAbilities }, // - { 0x20, PacketTypesOut.PlayerDigging }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Player Action) - { 0x21, PacketTypesOut.EntityAction }, // (Wiki name: Player Command) - { 0x22, PacketTypesOut.SteerVehicle }, // (Wiki name: Player Input) - { 0x23, PacketTypesOut.Pong }, // (Wiki name: Pong (play)) - { 0x24, PacketTypesOut.SetDisplayedRecipe }, // (Wiki name: Recipe Book Change Settings) - { 0x25, PacketTypesOut.SetRecipeBookState }, // (Wiki name: Recipe Book Seen Recipe) - { 0x26, PacketTypesOut.NameItem }, // (Wiki name: Rename Item) - { 0x27, PacketTypesOut.ResourcePackStatus }, // (Wiki name: Resource Pack (serverbound)) - { 0x28, PacketTypesOut.AdvancementTab }, // (Wiki name: Seen Advancements) - { 0x29, PacketTypesOut.SelectTrade }, // - { 0x2A, PacketTypesOut.SetBeaconEffect }, // Changed in 1.19 (Added a "Secondary Effect Present" and "Secondary Effect" fields) (Wiki name: Set Beacon) - (No need to be implemented) - { 0x2B, PacketTypesOut.HeldItemChange }, // (Wiki name: Set Carried Item (serverbound)) - { 0x2C, PacketTypesOut.UpdateCommandBlock }, // (Wiki name: Program Command Block) - { 0x2D, PacketTypesOut.UpdateCommandBlockMinecart }, // (Wiki name: Program Command Block Minecart) - { 0x2E, PacketTypesOut.CreativeInventoryAction }, // (Wiki name: Set Creative Mode Slot) - { 0x2F, PacketTypesOut.UpdateJigsawBlock }, // (Wiki name: Program Jigsaw Block) - { 0x30, PacketTypesOut.UpdateStructureBlock }, // (Wiki name: Program Structure Block) - { 0x31, PacketTypesOut.UpdateSign }, // (Wiki name: Update Sign) - { 0x32, PacketTypesOut.Animation }, // (Wiki name: Swing Arm) - { 0x33, PacketTypesOut.Spectate }, // (Wiki name: Teleport To Entity) - { 0x34, PacketTypesOut.PlayerBlockPlacement }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Use Item On) - { 0x35, PacketTypesOut.UseItem }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Use Item) - }; - - private readonly Dictionary configurationTypesIn = new() - { - { 0x00, ConfigurationPacketTypesIn.PluginMessage }, - { 0x01, ConfigurationPacketTypesIn.Disconnect }, - { 0x02, ConfigurationPacketTypesIn.FinishConfiguration }, - { 0x03, ConfigurationPacketTypesIn.KeepAlive }, - { 0x04, ConfigurationPacketTypesIn.Ping }, - { 0x05, ConfigurationPacketTypesIn.RegistryData }, - { 0x06, ConfigurationPacketTypesIn.ResourcePack }, - { 0x07, ConfigurationPacketTypesIn.FeatureFlags }, - { 0x08, ConfigurationPacketTypesIn.UpdateTags }, - }; - - private readonly Dictionary configurationTypesOut = new() - { - { 0x00, ConfigurationPacketTypesOut.ClientInformation }, - { 0x01, ConfigurationPacketTypesOut.PluginMessage }, - { 0x02, ConfigurationPacketTypesOut.FinishConfiguration }, - { 0x03, ConfigurationPacketTypesOut.KeepAlive }, - { 0x04, ConfigurationPacketTypesOut.Pong }, - { 0x05, ConfigurationPacketTypesOut.ResourcePackResponse } - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => configurationTypesIn!; - protected override Dictionary GetConfigurationListOut() => configurationTypesOut!; - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1204.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1204.cs deleted file mode 100644 index 4672123149..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1204.cs +++ /dev/null @@ -1,215 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes; - -public class PacketPalette1204 : PacketTypePalette -{ - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.Bundle }, // Added in 1.19.4 - { 0x01, PacketTypesIn.SpawnEntity }, // Changed in 1.19 (Wiki name: Spawn Entity) - { 0x02, PacketTypesIn.SpawnExperienceOrb }, // (Wiki name: Spawn Exeprience Orb) - { 0x03, PacketTypesIn.EntityAnimation }, // (Wiki name: Entity Animation (clientbound)) - { 0x04, PacketTypesIn.Statistics }, // (Wiki name: Award Statistics) - { 0x05, PacketTypesIn.BlockChangedAck }, // Added 1.19 (Wiki name: Acknowledge Block Change) - { 0x06, PacketTypesIn.BlockBreakAnimation }, // (Wiki name: Set Block Destroy Stage) - { 0x07, PacketTypesIn.BlockEntityData }, // - { 0x08, PacketTypesIn.BlockAction }, // - { 0x09, PacketTypesIn.BlockChange }, // (Wiki name: Block Update) - { 0x0A, PacketTypesIn.BossBar }, // - { 0x0B, PacketTypesIn.ServerDifficulty }, // (Wiki name: Change Difficulty) - { 0x0C, PacketTypesIn.ChunkBatchFinished }, // Added in 1.20.2 - { 0x0D, PacketTypesIn.ChunkBatchStarted }, // Added in 1.20.2 - { 0x0E, PacketTypesIn.ChunksBiomes }, // Added in 1.19.4 - { 0x0F, PacketTypesIn.ClearTiles }, // - { 0x10, PacketTypesIn.TabComplete }, // (Wiki name: Command Suggestions Response) - { 0x11, PacketTypesIn.DeclareCommands }, // (Wiki name: Commands) - { 0x12, PacketTypesIn.CloseWindow }, // (Wiki name: Close Container (clientbound)) - { 0x13, PacketTypesIn.WindowItems }, // (Wiki name: Set Container Content) - { 0x14, PacketTypesIn.WindowProperty }, // (Wiki name: Set Container Property) - { 0x15, PacketTypesIn.SetSlot }, // (Wiki name: Set Container Slot) - { 0x16, PacketTypesIn.SetCooldown }, // - { 0x17, PacketTypesIn.ChatSuggestions }, // Added in 1.19.1 - { 0x18, PacketTypesIn.PluginMessage }, // (Wiki name: Plugin Message (clientbound)) - { 0x19, PacketTypesIn.DamageEvent }, // Added in 1.19.4 - { 0x1A, PacketTypesIn.HideMessage }, // Added in 1.19.1 - { 0x1B, PacketTypesIn.Disconnect }, // - { 0x1C, PacketTypesIn.ProfilelessChatMessage }, // Added in 1.19.3 (Wiki name: Disguised Chat Message) - { 0x1D, PacketTypesIn.EntityStatus }, // (Wiki name: Entity Event) - { 0x1E, PacketTypesIn.Explosion }, // Changed in 1.19 (Location fields are now Double instead of Float) (Wiki name: Explosion) - { 0x1F, PacketTypesIn.UnloadChunk }, // (Wiki name: Forget Chunk) - { 0x20, PacketTypesIn.ChangeGameState }, // (Wiki name: Game Event) - { 0x21, PacketTypesIn.OpenHorseWindow }, // (Wiki name: Horse Screen Open) - { 0x22, PacketTypesIn.HurtAnimation }, // Added in 1.19.4 - { 0x23, PacketTypesIn.InitializeWorldBorder }, // - { 0x24, PacketTypesIn.KeepAlive }, // - { 0x25, PacketTypesIn.ChunkData }, // - { 0x26, PacketTypesIn.Effect }, // (Wiki name: World Event) - { 0x27, PacketTypesIn.Particle }, // Changed in 1.19 (Wiki name: Level Particle) (No need to be implemented) - { 0x28, PacketTypesIn.UpdateLight }, // (Wiki name: Light Update) - { 0x29, PacketTypesIn.JoinGame }, // Changed in 1.20.2 (Wiki name: Login (play)) - { 0x2A, PacketTypesIn.MapData }, // (Wiki name: Map Item Data) - { 0x2B, PacketTypesIn.TradeList }, // (Wiki name: Merchant Offers) - { 0x2C, PacketTypesIn.EntityPosition }, // (Wiki name: Move Entity Position) - { 0x2D, PacketTypesIn.EntityPositionAndRotation }, // (Wiki name: Move Entity Position and Rotation) - { 0x2E, PacketTypesIn.EntityRotation }, // (Wiki name: Move Entity Rotation) - { 0x2F, PacketTypesIn.VehicleMove }, // (Wiki name: Move Vehicle) - { 0x30, PacketTypesIn.OpenBook }, // - { 0x31, PacketTypesIn.OpenWindow }, // (Wiki name: Open Screen) - { 0x32, PacketTypesIn.OpenSignEditor }, // - { 0x33, PacketTypesIn.Ping }, // (Wiki name: Ping (play)) - { 0x34, PacketTypesIn.PingResponse }, // Added in 1.20.2 - { 0x35, PacketTypesIn.CraftRecipeResponse }, // (Wiki name: Place Ghost Recipe) - { 0x36, PacketTypesIn.PlayerAbilities }, // - { 0x37, PacketTypesIn.ChatMessage }, // Changed in 1.19 (Completely changed) (Wiki name: Player Chat Message) - { 0x38, PacketTypesIn.EndCombatEvent }, // (Wiki name: End Combat) - { 0x39, PacketTypesIn.EnterCombatEvent }, // (Wiki name: Enter Combat) - { 0x3A, PacketTypesIn.DeathCombatEvent }, // (Wiki name: Combat Death) - { 0x3B, PacketTypesIn.PlayerRemove }, // Added in 1.19.3 (Not used) - { 0x3C, PacketTypesIn.PlayerInfo }, // Changed in 1.19 (Heavy changes) - { 0x3D, PacketTypesIn.FacePlayer }, // (Wiki name: Player Look At) - { 0x3E, PacketTypesIn.PlayerPositionAndLook }, // (Wiki name: Synchronize Player Position) - { 0x3F, PacketTypesIn.UnlockRecipes }, // (Wiki name: Update Recipe Book) - { 0x40, PacketTypesIn.DestroyEntities }, // (Wiki name: Remove Entites) - { 0x41, PacketTypesIn.RemoveEntityEffect }, // - { 0x42, PacketTypesIn.ResetScore }, // Added in 1.20.3 - { 0x43, PacketTypesIn.RemoveResourcePack }, // Added in 1.20.3 - { 0x44, PacketTypesIn.ResourcePackSend }, // (Wiki name: Add Resource pack (play)) - { 0x45, PacketTypesIn.Respawn }, // Changed in 1.20.2 - { 0x46, PacketTypesIn.EntityHeadLook }, // (Wiki name: Set Head Rotation) - { 0x47, PacketTypesIn.MultiBlockChange }, // (Wiki name: Update Section Blocks) - { 0x48, PacketTypesIn.SelectAdvancementTab }, // - { 0x49, PacketTypesIn.ServerData }, // Added in 1.19 - { 0x4A, PacketTypesIn.ActionBar }, // (Wiki name: Set Action Bar Text) - { 0x4B, PacketTypesIn.WorldBorderCenter }, // (Wiki name: Set Border Center) - { 0x4C, PacketTypesIn.WorldBorderLerpSize }, // - { 0x4D, PacketTypesIn.WorldBorderSize }, // (Wiki name: Set World Border Size) - { 0x4E, PacketTypesIn.WorldBorderWarningDelay }, // (Wiki name: Set World Border Warning Delay) - { 0x4F, PacketTypesIn.WorldBorderWarningReach }, // (Wiki name: Set Border Warning Distance) - { 0x50, PacketTypesIn.Camera }, // (Wiki name: Set Camera) - { 0x51, PacketTypesIn.HeldItemChange }, // (Wiki name: Set Held Item) - { 0x52, PacketTypesIn.UpdateViewPosition }, // (Wiki name: Set Center Chunk) - { 0x53, PacketTypesIn.UpdateViewDistance }, // (Wiki name: Set Render Distance) - { 0x54, PacketTypesIn.SpawnPosition }, // (Wiki name: Set Default Spawn Position) - { 0x55, PacketTypesIn.DisplayScoreboard }, // (Wiki name: Set Display Objective) - { 0x56, PacketTypesIn.EntityMetadata }, // (Wiki name: Set Entity Metadata) - { 0x57, PacketTypesIn.AttachEntity }, // (Wiki name: Link Entities) - { 0x58, PacketTypesIn.EntityVelocity }, // (Wiki name: Set Entity Velocity) - { 0x59, PacketTypesIn.EntityEquipment }, // (Wiki name: Set Equipment) - { 0x5A, PacketTypesIn.SetExperience }, // Changed in 1.20.2 - { 0x5B, PacketTypesIn.UpdateHealth }, // (Wiki name: Set Health) - { 0x5C, PacketTypesIn.ScoreboardObjective }, // (Wiki name: Update Objectives) - Changed in 1.20.3 - { 0x5D, PacketTypesIn.SetPassengers }, // - { 0x5E, PacketTypesIn.Teams }, // (Wiki name: Update Teams) - { 0x5F, PacketTypesIn.UpdateScore }, // (Wiki name: Update Score) - { 0x60, PacketTypesIn.UpdateSimulationDistance }, // (Wiki name: Set Simulation Distance) - { 0x61, PacketTypesIn.SetTitleSubTitle }, // (Wiki name: Set Subtitle Test) - { 0x62, PacketTypesIn.TimeUpdate }, // (Wiki name: Set Time) - { 0x63, PacketTypesIn.SetTitleText }, // (Wiki name: Set Title) - { 0x64, PacketTypesIn.SetTitleTime }, // (Wiki name: Set Title Animation Times) - { 0x65, PacketTypesIn.EntitySoundEffect }, // (Wiki name: Sound Entity) - { 0x66, PacketTypesIn.SoundEffect }, // Changed in 1.19 (Added "Seed" field) (Wiki name: Sound Effect) (No need to be implemented) - { 0x67, PacketTypesIn.StartConfiguration }, // Added in 1.20.2 - { 0x68, PacketTypesIn.StopSound }, // - { 0x69, PacketTypesIn.SystemChat }, // Added in 1.19 (Wiki name: System Chat Message) - { 0x6A, PacketTypesIn.PlayerListHeaderAndFooter }, // (Wiki name: Set Tab List Header And Footer) - { 0x6B, PacketTypesIn.NBTQueryResponse }, // (Wiki name: Tag Query Response) - { 0x6C, PacketTypesIn.CollectItem }, // (Wiki name: Pickup Item) - { 0x6D, PacketTypesIn.EntityTeleport }, // (Wiki name: Teleport Entity) - { 0x6E, PacketTypesIn.SetTickingState }, // Added in 1.20.3 - { 0x6F, PacketTypesIn.StepTick }, // Added in 1.20.3 - { 0x70, PacketTypesIn.Advancements }, // (Wiki name: Update Advancements) (Unused) - { 0x71, PacketTypesIn.EntityProperties }, // (Wiki name: Update Attributes) - { 0x72, PacketTypesIn.EntityEffect }, // Changed in 1.19 (Added "Has Factor Data" and "Factor Codec" fields) (Wiki name: Entity Effect) - { 0x73, PacketTypesIn.DeclareRecipes }, // (Wiki name: Update Recipes) (Unused) - { 0x74, PacketTypesIn.Tags }, // (Wiki name: Update Tags) - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, // (Wiki name: Confirm Teleportation) - { 0x01, PacketTypesOut.QueryBlockNBT }, // (Wiki name: Query Block Entity Tag) - { 0x02, PacketTypesOut.SetDifficulty }, // (Wiki name: Change Difficulty) - { 0x03, PacketTypesOut.MessageAcknowledgment }, // Added in 1.19.1 - { 0x04, PacketTypesOut.ChatCommand }, // Added in 1.19 - { 0x05, PacketTypesOut.ChatMessage }, // Changed in 1.19 (Completely changed) (Wiki name: Chat) - { 0x06, PacketTypesOut.PlayerSession }, // Added in 1.19.3 - { 0x07, PacketTypesOut.ChunkBatchReceived }, // Added in 1.20.2 - { 0x08, PacketTypesOut.ClientStatus }, // (Wiki name: Client Command) - { 0x09, PacketTypesOut.ClientSettings }, // (Wiki name: Client Information) - { 0x0A, PacketTypesOut.TabComplete }, // (Wiki name: Command Suggestions Request) - { 0x0B, PacketTypesOut.AcknowledgeConfiguration }, // Added in 1.20.2 - { 0x0C, PacketTypesOut.ClickWindowButton }, // (Wiki name: Click Container Button) - { 0x0D, PacketTypesOut.ClickWindow }, // (Wiki name: Click Container) - { 0x0E, PacketTypesOut.CloseWindow }, // (Wiki name: Close Container (serverbound)) - { 0x0F, PacketTypesOut.ChangeContainerSlotState }, // Added in 1.20.3 - { 0x10, PacketTypesOut.PluginMessage }, // (Wiki name: Serverbound Plugin Message) - { 0x11, PacketTypesOut.EditBook }, // - { 0x12, PacketTypesOut.EntityNBTRequest }, // (Wiki name: Query Entity Tag) - { 0x13, PacketTypesOut.InteractEntity }, // (Wiki name: Interact) - { 0x14, PacketTypesOut.GenerateStructure }, // (Wiki name: Jigsaw Generate) - { 0x15, PacketTypesOut.KeepAlive }, // (Wiki name: Serverbound Keep Alive (play)) - { 0x16, PacketTypesOut.LockDifficulty }, // - { 0x17, PacketTypesOut.PlayerPosition }, // (Wiki name: Move Player Position) - { 0x18, PacketTypesOut.PlayerPositionAndRotation }, // (Wiki name: Set Player Position and Rotation) - { 0x19, PacketTypesOut.PlayerRotation }, // (Wiki name: Set Player Rotation) - { 0x1A, PacketTypesOut.PlayerMovement }, // (Wiki name: Set Player On Ground) - { 0x1B, PacketTypesOut.VehicleMove }, // (Wiki name: Move Vehicle (serverbound)) - { 0x1C, PacketTypesOut.SteerBoat }, // (Wiki name: Paddle Boat) - { 0x1D, PacketTypesOut.PickItem }, // - { 0x1E, PacketTypesOut.PingRequest }, // Added in 1.20.2 - { 0x1F, PacketTypesOut.CraftRecipeRequest }, // (Wiki name: Place recipe) - { 0x20, PacketTypesOut.PlayerAbilities }, // - { 0x21, PacketTypesOut.PlayerDigging }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Player Action) - { 0x22, PacketTypesOut.EntityAction }, // (Wiki name: Player Command) - { 0x23, PacketTypesOut.SteerVehicle }, // (Wiki name: Player Input) - { 0x24, PacketTypesOut.Pong }, // (Wiki name: Pong (play)) - { 0x25, PacketTypesOut.SetDisplayedRecipe }, // (Wiki name: Recipe Book Change Settings) - { 0x26, PacketTypesOut.SetRecipeBookState }, // (Wiki name: Recipe Book Seen Recipe) - { 0x27, PacketTypesOut.NameItem }, // (Wiki name: Rename Item) - { 0x28, PacketTypesOut.ResourcePackStatus }, // (Wiki name: Resource Pack (serverbound)) - { 0x29, PacketTypesOut.AdvancementTab }, // (Wiki name: Seen Advancements) - { 0x2A, PacketTypesOut.SelectTrade }, // - { 0x2B, PacketTypesOut.SetBeaconEffect }, // Changed in 1.19 (No need to be implemented yet) - { 0x2C, PacketTypesOut.HeldItemChange }, // (Wiki name: Set Carried Item (serverbound)) - { 0x2D, PacketTypesOut.UpdateCommandBlock }, // (Wiki name: Program Command Block) - { 0x2E, PacketTypesOut.UpdateCommandBlockMinecart }, // (Wiki name: Program Command Block Minecart) - { 0x2F, PacketTypesOut.CreativeInventoryAction }, // (Wiki name: Set Creative Mode Slot) - { 0x30, PacketTypesOut.UpdateJigsawBlock }, // (Wiki name: Program Jigsaw Block) - { 0x31, PacketTypesOut.UpdateStructureBlock }, // (Wiki name: Program Structure Block) - { 0x32, PacketTypesOut.UpdateSign }, // (Wiki name: Update Sign) - { 0x33, PacketTypesOut.Animation }, // (Wiki name: Swing Arm) - { 0x34, PacketTypesOut.Spectate }, // (Wiki name: Teleport To Entity) - { 0x35, PacketTypesOut.PlayerBlockPlacement }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Use Item On) - { 0x36, PacketTypesOut.UseItem }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Use Item) - }; - - private readonly Dictionary configurationTypesIn = new() - { - { 0x00, ConfigurationPacketTypesIn.PluginMessage }, - { 0x01, ConfigurationPacketTypesIn.Disconnect }, - { 0x02, ConfigurationPacketTypesIn.FinishConfiguration }, - { 0x03, ConfigurationPacketTypesIn.KeepAlive }, - { 0x04, ConfigurationPacketTypesIn.Ping }, - { 0x05, ConfigurationPacketTypesIn.RegistryData }, - { 0x06, ConfigurationPacketTypesIn.RemoveResourcePack }, - { 0x07, ConfigurationPacketTypesIn.ResourcePack }, - { 0x08, ConfigurationPacketTypesIn.FeatureFlags }, - { 0x09, ConfigurationPacketTypesIn.UpdateTags }, - }; - - private readonly Dictionary configurationTypesOut = new() - { - { 0x00, ConfigurationPacketTypesOut.ClientInformation }, - { 0x01, ConfigurationPacketTypesOut.PluginMessage }, - { 0x02, ConfigurationPacketTypesOut.FinishConfiguration }, - { 0x03, ConfigurationPacketTypesOut.KeepAlive }, - { 0x04, ConfigurationPacketTypesOut.Pong }, - { 0x05, ConfigurationPacketTypesOut.ResourcePackResponse } - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => configurationTypesIn!; - protected override Dictionary GetConfigurationListOut() => configurationTypesOut!; -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1206.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1206.cs deleted file mode 100644 index f053d41ea2..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1206.cs +++ /dev/null @@ -1,230 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes; - -public class PacketPalette1206 : PacketTypePalette -{ - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.Bundle }, // Added in 1.19.4 - { 0x01, PacketTypesIn.SpawnEntity }, // Changed in 1.19 (Wiki name: Spawn Entity) - { 0x02, PacketTypesIn.SpawnExperienceOrb }, // (Wiki name: Spawn Exeprience Orb) - { 0x03, PacketTypesIn.EntityAnimation }, // (Wiki name: Entity Animation (clientbound)) - { 0x04, PacketTypesIn.Statistics }, // (Wiki name: Award Statistics) - { 0x05, PacketTypesIn.BlockChangedAck }, // Added 1.19 (Wiki name: Acknowledge Block Change) - { 0x06, PacketTypesIn.BlockBreakAnimation }, // (Wiki name: Set Block Destroy Stage) - { 0x07, PacketTypesIn.BlockEntityData }, // - { 0x08, PacketTypesIn.BlockAction }, // - { 0x09, PacketTypesIn.BlockChange }, // (Wiki name: Block Update) - { 0x0A, PacketTypesIn.BossBar }, // - { 0x0B, PacketTypesIn.ServerDifficulty }, // (Wiki name: Change Difficulty) - { 0x0C, PacketTypesIn.ChunkBatchFinished }, // Added in 1.20.2 - { 0x0D, PacketTypesIn.ChunkBatchStarted }, // Added in 1.20.2 - { 0x0E, PacketTypesIn.ChunksBiomes }, // Added in 1.19.4 - { 0x0F, PacketTypesIn.ClearTiles }, // - { 0x10, PacketTypesIn.TabComplete }, // (Wiki name: Command Suggestions Response) - { 0x11, PacketTypesIn.DeclareCommands }, // (Wiki name: Commands) - { 0x12, PacketTypesIn.CloseWindow }, // (Wiki name: Close Container (clientbound)) - { 0x13, PacketTypesIn.WindowItems }, // (Wiki name: Set Container Content) - { 0x14, PacketTypesIn.WindowProperty }, // (Wiki name: Set Container Property) - { 0x15, PacketTypesIn.SetSlot }, // (Wiki name: Set Container Slot) - { 0x16, PacketTypesIn.CookieRequest }, // Added in 1.20.6 - { 0x17, PacketTypesIn.SetCooldown }, // - { 0x18, PacketTypesIn.ChatSuggestions }, // Added in 1.19.1 - { 0x19, PacketTypesIn.PluginMessage }, // (Wiki name: Plugin Message (clientbound)) - { 0x1A, PacketTypesIn.DamageEvent }, // Added in 1.19.4 - { 0x1B, PacketTypesIn.DebugSample }, // Added in 1.20.6 - { 0x1C, PacketTypesIn.HideMessage }, // Added in 1.19.1 - { 0x1D, PacketTypesIn.Disconnect }, // - { 0x1E, PacketTypesIn.ProfilelessChatMessage }, // Added in 1.19.3 (Wiki name: Disguised Chat Message) - { 0x1F, PacketTypesIn.EntityStatus }, // (Wiki name: Entity Event) - { 0x20, PacketTypesIn.Explosion }, // Changed in 1.19 (Location fields are now Double instead of Float) (Wiki name: Explosion) - { 0x21, PacketTypesIn.UnloadChunk }, // (Wiki name: Forget Chunk) - { 0x22, PacketTypesIn.ChangeGameState }, // (Wiki name: Game Event) - { 0x23, PacketTypesIn.OpenHorseWindow }, // (Wiki name: Horse Screen Open) - { 0x24, PacketTypesIn.HurtAnimation }, // Added in 1.19.4 - { 0x25, PacketTypesIn.InitializeWorldBorder }, // - { 0x26, PacketTypesIn.KeepAlive }, // - { 0x27, PacketTypesIn.ChunkData }, // - { 0x28, PacketTypesIn.Effect }, // (Wiki name: World Event) - { 0x29, PacketTypesIn.Particle }, // Changed in 1.19 (Wiki name: Level Particle) (No need to be implemented) - { 0x2A, PacketTypesIn.UpdateLight }, // (Wiki name: Light Update) - { 0x2B, PacketTypesIn.JoinGame }, // Changed in 1.20.2 (Wiki name: Login (play)) - { 0x2C, PacketTypesIn.MapData }, // (Wiki name: Map Item Data) - { 0x2D, PacketTypesIn.TradeList }, // (Wiki name: Merchant Offers) - { 0x2E, PacketTypesIn.EntityPosition }, // (Wiki name: Move Entity Position) - { 0x2F, PacketTypesIn.EntityPositionAndRotation }, // (Wiki name: Move Entity Position and Rotation) - { 0x30, PacketTypesIn.EntityRotation }, // (Wiki name: Move Entity Rotation) - { 0x31, PacketTypesIn.VehicleMove }, // (Wiki name: Move Vehicle) - { 0x32, PacketTypesIn.OpenBook }, // - { 0x33, PacketTypesIn.OpenWindow }, // (Wiki name: Open Screen) - { 0x34, PacketTypesIn.OpenSignEditor }, // - { 0x35, PacketTypesIn.Ping }, // (Wiki name: Ping (play)) - { 0x36, PacketTypesIn.PingResponse }, // Added in 1.20.2 - { 0x37, PacketTypesIn.CraftRecipeResponse }, // (Wiki name: Place Ghost Recipe) - { 0x38, PacketTypesIn.PlayerAbilities }, // - { 0x39, PacketTypesIn.ChatMessage }, // Changed in 1.19 (Completely changed) (Wiki name: Player Chat Message) - { 0x3A, PacketTypesIn.EndCombatEvent }, // (Wiki name: End Combat) - { 0x3B, PacketTypesIn.EnterCombatEvent }, // (Wiki name: Enter Combat) - { 0x3C, PacketTypesIn.DeathCombatEvent }, // (Wiki name: Combat Death) - { 0x3D, PacketTypesIn.PlayerRemove }, // Added in 1.19.3 (Not used) - { 0x3E, PacketTypesIn.PlayerInfo }, // Changed in 1.19 (Heavy changes) - { 0x3F, PacketTypesIn.FacePlayer }, // (Wiki name: Player Look At) - { 0x40, PacketTypesIn.PlayerPositionAndLook }, // (Wiki name: Synchronize Player Position) - { 0x41, PacketTypesIn.UnlockRecipes }, // (Wiki name: Update Recipe Book) - { 0x42, PacketTypesIn.DestroyEntities }, // (Wiki name: Remove Entites) - { 0x43, PacketTypesIn.RemoveEntityEffect }, // - { 0x44, PacketTypesIn.ResetScore }, // Added in 1.20.3 - { 0x45, PacketTypesIn.RemoveResourcePack }, // Added in 1.20.3 - { 0x46, PacketTypesIn.ResourcePackSend }, // (Wiki name: Add Resource pack (play)) - { 0x47, PacketTypesIn.Respawn }, // Changed in 1.20.2 - { 0x48, PacketTypesIn.EntityHeadLook }, // (Wiki name: Set Head Rotation) - { 0x49, PacketTypesIn.MultiBlockChange }, // (Wiki name: Update Section Blocks) - { 0x4A, PacketTypesIn.SelectAdvancementTab }, // - { 0x4B, PacketTypesIn.ServerData }, // Added in 1.19 - { 0x4C, PacketTypesIn.ActionBar }, // (Wiki name: Set Action Bar Text) - { 0x4D, PacketTypesIn.WorldBorderCenter }, // (Wiki name: Set Border Center) - { 0x4E, PacketTypesIn.WorldBorderLerpSize }, // - { 0x4F, PacketTypesIn.WorldBorderSize }, // (Wiki name: Set World Border Size) - { 0x50, PacketTypesIn.WorldBorderWarningDelay }, // (Wiki name: Set World Border Warning Delay) - { 0x51, PacketTypesIn.WorldBorderWarningReach }, // (Wiki name: Set Border Warning Distance) - { 0x52, PacketTypesIn.Camera }, // (Wiki name: Set Camera) - { 0x53, PacketTypesIn.HeldItemChange }, // (Wiki name: Set Held Item) - { 0x54, PacketTypesIn.UpdateViewPosition }, // (Wiki name: Set Center Chunk) - { 0x55, PacketTypesIn.UpdateViewDistance }, // (Wiki name: Set Render Distance) - { 0x56, PacketTypesIn.SpawnPosition }, // (Wiki name: Set Default Spawn Position) - { 0x57, PacketTypesIn.DisplayScoreboard }, // (Wiki name: Set Display Objective) - { 0x58, PacketTypesIn.EntityMetadata }, // (Wiki name: Set Entity Metadata) - { 0x59, PacketTypesIn.AttachEntity }, // (Wiki name: Link Entities) - { 0x5A, PacketTypesIn.EntityVelocity }, // (Wiki name: Set Entity Velocity) - { 0x5B, PacketTypesIn.EntityEquipment }, // (Wiki name: Set Equipment) - { 0x5C, PacketTypesIn.SetExperience }, // Changed in 1.20.2 - { 0x5D, PacketTypesIn.UpdateHealth }, // (Wiki name: Set Health) - { 0x5E, PacketTypesIn.ScoreboardObjective }, // (Wiki name: Update Objectives) - Changed in 1.20.3 - { 0x5F, PacketTypesIn.SetPassengers }, // - { 0x60, PacketTypesIn.Teams }, // (Wiki name: Update Teams) - { 0x61, PacketTypesIn.UpdateScore }, // (Wiki name: Update Score) - { 0x62, PacketTypesIn.UpdateSimulationDistance }, // (Wiki name: Set Simulation Distance) - { 0x63, PacketTypesIn.SetTitleSubTitle }, // (Wiki name: Set Subtitle Test) - { 0x64, PacketTypesIn.TimeUpdate }, // (Wiki name: Set Time) - { 0x65, PacketTypesIn.SetTitleText }, // (Wiki name: Set Title) - { 0x66, PacketTypesIn.SetTitleTime }, // (Wiki name: Set Title Animation Times) - { 0x67, PacketTypesIn.EntitySoundEffect }, // (Wiki name: Sound Entity) - { 0x68, PacketTypesIn.SoundEffect }, // Changed in 1.19 (Added "Seed" field) (Wiki name: Sound Effect) (No need to be implemented) - { 0x69, PacketTypesIn.StartConfiguration }, // Added in 1.20.2 - { 0x6A, PacketTypesIn.StopSound }, // - { 0x6B, PacketTypesIn.StoreCookie }, // Added in 1.20.6 - { 0x6C, PacketTypesIn.SystemChat }, // Added in 1.19 (Wiki name: System Chat Message) - { 0x6D, PacketTypesIn.PlayerListHeaderAndFooter }, // (Wiki name: Set Tab List Header And Footer) - { 0x6E, PacketTypesIn.NBTQueryResponse }, // (Wiki name: Tag Query Response) - { 0x6F, PacketTypesIn.CollectItem }, // (Wiki name: Pickup Item) - { 0x70, PacketTypesIn.EntityTeleport }, // (Wiki name: Teleport Entity) - { 0x71, PacketTypesIn.SetTickingState }, // Added in 1.20.3 - { 0x72, PacketTypesIn.StepTick }, // Added in 1.20.3 - { 0x73, PacketTypesIn.Transfer }, // Added in 1.20.6 - { 0x74, PacketTypesIn.Advancements }, // (Wiki name: Update Advancements) (Unused) - { 0x75, PacketTypesIn.EntityProperties }, // (Wiki name: Update Attributes) - { 0x76, PacketTypesIn.EntityEffect }, // Changed in 1.19 (Added "Has Factor Data" and "Factor Codec" fields) (Wiki name: Entity Effect) - { 0x77, PacketTypesIn.DeclareRecipes }, // (Wiki name: Update Recipes) (Unused) - { 0x78, PacketTypesIn.Tags }, // (Wiki name: Update Tags) - { 0x79, PacketTypesIn.ProjectilePower }, // Added in 1.20.6 - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, // (Wiki name: Confirm Teleportation) - { 0x01, PacketTypesOut.QueryBlockNBT }, // (Wiki name: Query Block Entity Tag) - { 0x02, PacketTypesOut.SetDifficulty }, // (Wiki name: Change Difficulty) - { 0x03, PacketTypesOut.MessageAcknowledgment }, // Added in 1.19.1 - { 0x04, PacketTypesOut.ChatCommand }, // Added in 1.19 - { 0x05, PacketTypesOut.SignedChatCommand }, // Added in 1.20.6 - { 0x06, PacketTypesOut.ChatMessage }, // Changed in 1.19 (Completely changed) (Wiki name: Chat) - { 0x07, PacketTypesOut.PlayerSession }, // Added in 1.19.3 - { 0x08, PacketTypesOut.ChunkBatchReceived }, // Added in 1.20.2 - { 0x09, PacketTypesOut.ClientStatus }, // (Wiki name: Client Command) - { 0x0A, PacketTypesOut.ClientSettings }, // (Wiki name: Client Information) - { 0x0B, PacketTypesOut.TabComplete }, // (Wiki name: Command Suggestions Request) - { 0x0C, PacketTypesOut.AcknowledgeConfiguration }, // Added in 1.20.2 - { 0x0D, PacketTypesOut.ClickWindowButton }, // (Wiki name: Click Container Button) - { 0x0E, PacketTypesOut.ClickWindow }, // (Wiki name: Click Container) - { 0x0F, PacketTypesOut.CloseWindow }, // (Wiki name: Close Container (serverbound)) - { 0x10, PacketTypesOut.ChangeContainerSlotState }, // Added in 1.20.3 - { 0x11, PacketTypesOut.CookieResponse }, // Added in 1.20.6 - { 0x12, PacketTypesOut.PluginMessage }, // (Wiki name: Serverbound Plugin Message) - { 0x13, PacketTypesOut.DebugSampleSubscription }, // Added in 1.20.6 - { 0x14, PacketTypesOut.EditBook }, // - { 0x15, PacketTypesOut.EntityNBTRequest }, // (Wiki name: Query Entity Tag) - { 0x16, PacketTypesOut.InteractEntity }, // (Wiki name: Interact) - { 0x17, PacketTypesOut.GenerateStructure }, // (Wiki name: Jigsaw Generate) - { 0x18, PacketTypesOut.KeepAlive }, // (Wiki name: Serverbound Keep Alive (play)) - { 0x19, PacketTypesOut.LockDifficulty }, // - { 0x1A, PacketTypesOut.PlayerPosition }, // (Wiki name: Move Player Position) - { 0x1B, PacketTypesOut.PlayerPositionAndRotation }, // (Wiki name: Set Player Position and Rotation) - { 0x1C, PacketTypesOut.PlayerRotation }, // (Wiki name: Set Player Rotation) - { 0x1D, PacketTypesOut.PlayerMovement }, // (Wiki name: Set Player On Ground) - { 0x1E, PacketTypesOut.VehicleMove }, // (Wiki name: Move Vehicle (serverbound)) - { 0x1F, PacketTypesOut.SteerBoat }, // (Wiki name: Paddle Boat) - { 0x20, PacketTypesOut.PickItem }, // - { 0x21, PacketTypesOut.PingRequest }, // Added in 1.20.2 - { 0x22, PacketTypesOut.CraftRecipeRequest }, // (Wiki name: Place recipe) - { 0x23, PacketTypesOut.PlayerAbilities }, // - { 0x24, PacketTypesOut.PlayerDigging }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Player Action) - { 0x25, PacketTypesOut.EntityAction }, // (Wiki name: Player Command) - { 0x26, PacketTypesOut.SteerVehicle }, // (Wiki name: Player Input) - { 0x27, PacketTypesOut.Pong }, // (Wiki name: Pong (play)) - { 0x28, PacketTypesOut.SetDisplayedRecipe }, // (Wiki name: Recipe Book Change Settings) - { 0x29, PacketTypesOut.SetRecipeBookState }, // (Wiki name: Recipe Book Seen Recipe) - { 0x2A, PacketTypesOut.NameItem }, // (Wiki name: Rename Item) - { 0x2B, PacketTypesOut.ResourcePackStatus }, // (Wiki name: Resource Pack (serverbound)) - { 0x2C, PacketTypesOut.AdvancementTab }, // (Wiki name: Seen Advancements) - { 0x2D, PacketTypesOut.SelectTrade }, // - { 0x2E, PacketTypesOut.SetBeaconEffect }, // Changed in 1.19 (No need to be implemented yet) - { 0x2F, PacketTypesOut.HeldItemChange }, // (Wiki name: Set Carried Item (serverbound)) - { 0x30, PacketTypesOut.UpdateCommandBlock }, // (Wiki name: Program Command Block) - { 0x31, PacketTypesOut.UpdateCommandBlockMinecart }, // (Wiki name: Program Command Block Minecart) - { 0x32, PacketTypesOut.CreativeInventoryAction }, // (Wiki name: Set Creative Mode Slot) - { 0x33, PacketTypesOut.UpdateJigsawBlock }, // (Wiki name: Program Jigsaw Block) - { 0x34, PacketTypesOut.UpdateStructureBlock }, // (Wiki name: Program Structure Block) - { 0x35, PacketTypesOut.UpdateSign }, // (Wiki name: Update Sign) - { 0x36, PacketTypesOut.Animation }, // (Wiki name: Swing Arm) - { 0x37, PacketTypesOut.Spectate }, // (Wiki name: Teleport To Entity) - { 0x38, PacketTypesOut.PlayerBlockPlacement }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Use Item On) - { 0x39, PacketTypesOut.UseItem }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Use Item) - }; - - private readonly Dictionary configurationTypesIn = new() - { - { 0x00, ConfigurationPacketTypesIn.CookieRequest }, - { 0x01, ConfigurationPacketTypesIn.PluginMessage }, - { 0x02, ConfigurationPacketTypesIn.Disconnect }, - { 0x03, ConfigurationPacketTypesIn.FinishConfiguration }, - { 0x04, ConfigurationPacketTypesIn.KeepAlive }, - { 0x05, ConfigurationPacketTypesIn.Ping }, - { 0x06, ConfigurationPacketTypesIn.ResetChat }, - { 0x07, ConfigurationPacketTypesIn.RegistryData }, - { 0x08, ConfigurationPacketTypesIn.RemoveResourcePack }, - { 0x09, ConfigurationPacketTypesIn.ResourcePack }, - { 0x0A, ConfigurationPacketTypesIn.StoreCookie }, - { 0x0B, ConfigurationPacketTypesIn.Transfer }, - { 0x0C, ConfigurationPacketTypesIn.FeatureFlags }, - { 0x0D, ConfigurationPacketTypesIn.UpdateTags }, - { 0x0E, ConfigurationPacketTypesIn.KnownDataPacks } - }; - - private readonly Dictionary configurationTypesOut = new() - { - { 0x00, ConfigurationPacketTypesOut.ClientInformation }, - { 0x01, ConfigurationPacketTypesOut.CookieResponse }, - { 0x02, ConfigurationPacketTypesOut.PluginMessage }, - { 0x03, ConfigurationPacketTypesOut.FinishConfiguration }, - { 0x04, ConfigurationPacketTypesOut.KeepAlive }, - { 0x05, ConfigurationPacketTypesOut.Pong }, - { 0x06, ConfigurationPacketTypesOut.ResourcePackResponse }, - { 0x07, ConfigurationPacketTypesOut.KnownDataPacks } - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => configurationTypesIn!; - protected override Dictionary GetConfigurationListOut() => configurationTypesOut!; -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette121.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette121.cs deleted file mode 100644 index 8c35b2c86d..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette121.cs +++ /dev/null @@ -1,234 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes; - -public class PacketPalette121 : PacketTypePalette -{ - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.Bundle }, // Added in 1.19.4 - { 0x01, PacketTypesIn.SpawnEntity }, // Changed in 1.19 (Wiki name: Spawn Entity) - { 0x02, PacketTypesIn.SpawnExperienceOrb }, // (Wiki name: Spawn Exeprience Orb) - { 0x03, PacketTypesIn.EntityAnimation }, // (Wiki name: Entity Animation (clientbound)) - { 0x04, PacketTypesIn.Statistics }, // (Wiki name: Award Statistics) - { 0x05, PacketTypesIn.BlockChangedAck }, // Added 1.19 (Wiki name: Acknowledge Block Change) - { 0x06, PacketTypesIn.BlockBreakAnimation }, // (Wiki name: Set Block Destroy Stage) - { 0x07, PacketTypesIn.BlockEntityData }, // - { 0x08, PacketTypesIn.BlockAction }, // - { 0x09, PacketTypesIn.BlockChange }, // (Wiki name: Block Update) - { 0x0A, PacketTypesIn.BossBar }, // - { 0x0B, PacketTypesIn.ServerDifficulty }, // (Wiki name: Change Difficulty) - { 0x0C, PacketTypesIn.ChunkBatchFinished }, // Added in 1.20.2 - { 0x0D, PacketTypesIn.ChunkBatchStarted }, // Added in 1.20.2 - { 0x0E, PacketTypesIn.ChunksBiomes }, // Added in 1.19.4 - { 0x0F, PacketTypesIn.ClearTiles }, // - { 0x10, PacketTypesIn.TabComplete }, // (Wiki name: Command Suggestions Response) - { 0x11, PacketTypesIn.DeclareCommands }, // (Wiki name: Commands) - { 0x12, PacketTypesIn.CloseWindow }, // (Wiki name: Close Container (clientbound)) - { 0x13, PacketTypesIn.WindowItems }, // (Wiki name: Set Container Content) - { 0x14, PacketTypesIn.WindowProperty }, // (Wiki name: Set Container Property) - { 0x15, PacketTypesIn.SetSlot }, // (Wiki name: Set Container Slot) - { 0x16, PacketTypesIn.CookieRequest }, // Added in 1.20.6 - { 0x17, PacketTypesIn.SetCooldown }, // - { 0x18, PacketTypesIn.ChatSuggestions }, // Added in 1.19.1 - { 0x19, PacketTypesIn.PluginMessage }, // (Wiki name: Plugin Message (clientbound)) - { 0x1A, PacketTypesIn.DamageEvent }, // Added in 1.19.4 - { 0x1B, PacketTypesIn.DebugSample }, // Added in 1.20.6 - { 0x1C, PacketTypesIn.HideMessage }, // Added in 1.19.1 - { 0x1D, PacketTypesIn.Disconnect }, // - { 0x1E, PacketTypesIn.ProfilelessChatMessage }, // Added in 1.19.3 (Wiki name: Disguised Chat Message) - { 0x1F, PacketTypesIn.EntityStatus }, // (Wiki name: Entity Event) - { 0x20, PacketTypesIn.Explosion }, // Changed in 1.19 (Location fields are now Double instead of Float) (Wiki name: Explosion) - { 0x21, PacketTypesIn.UnloadChunk }, // (Wiki name: Forget Chunk) - { 0x22, PacketTypesIn.ChangeGameState }, // (Wiki name: Game Event) - { 0x23, PacketTypesIn.OpenHorseWindow }, // (Wiki name: Horse Screen Open) - { 0x24, PacketTypesIn.HurtAnimation }, // Added in 1.19.4 - { 0x25, PacketTypesIn.InitializeWorldBorder }, // - { 0x26, PacketTypesIn.KeepAlive }, // - { 0x27, PacketTypesIn.ChunkData }, // - { 0x28, PacketTypesIn.Effect }, // (Wiki name: World Event) - { 0x29, PacketTypesIn.Particle }, // Changed in 1.19 (Wiki name: Level Particle) (No need to be implemented) - { 0x2A, PacketTypesIn.UpdateLight }, // (Wiki name: Light Update) - { 0x2B, PacketTypesIn.JoinGame }, // Changed in 1.20.2 (Wiki name: Login (play)) - { 0x2C, PacketTypesIn.MapData }, // (Wiki name: Map Item Data) - { 0x2D, PacketTypesIn.TradeList }, // (Wiki name: Merchant Offers) - { 0x2E, PacketTypesIn.EntityPosition }, // (Wiki name: Move Entity Position) - { 0x2F, PacketTypesIn.EntityPositionAndRotation }, // (Wiki name: Move Entity Position and Rotation) - { 0x30, PacketTypesIn.EntityRotation }, // (Wiki name: Move Entity Rotation) - { 0x31, PacketTypesIn.VehicleMove }, // (Wiki name: Move Vehicle) - { 0x32, PacketTypesIn.OpenBook }, // - { 0x33, PacketTypesIn.OpenWindow }, // (Wiki name: Open Screen) - { 0x34, PacketTypesIn.OpenSignEditor }, // - { 0x35, PacketTypesIn.Ping }, // (Wiki name: Ping (play)) - { 0x36, PacketTypesIn.PingResponse }, // Added in 1.20.2 - { 0x37, PacketTypesIn.CraftRecipeResponse }, // (Wiki name: Place Ghost Recipe) - { 0x38, PacketTypesIn.PlayerAbilities }, // - { 0x39, PacketTypesIn.ChatMessage }, // Changed in 1.19 (Completely changed) (Wiki name: Player Chat Message) - { 0x3A, PacketTypesIn.EndCombatEvent }, // (Wiki name: End Combat) - { 0x3B, PacketTypesIn.EnterCombatEvent }, // (Wiki name: Enter Combat) - { 0x3C, PacketTypesIn.DeathCombatEvent }, // (Wiki name: Combat Death) - { 0x3D, PacketTypesIn.PlayerRemove }, // Added in 1.19.3 (Not used) - { 0x3E, PacketTypesIn.PlayerInfo }, // Changed in 1.19 (Heavy changes) - { 0x3F, PacketTypesIn.FacePlayer }, // (Wiki name: Player Look At) - { 0x40, PacketTypesIn.PlayerPositionAndLook }, // (Wiki name: Synchronize Player Position) - { 0x41, PacketTypesIn.UnlockRecipes }, // (Wiki name: Update Recipe Book) - { 0x42, PacketTypesIn.DestroyEntities }, // (Wiki name: Remove Entites) - { 0x43, PacketTypesIn.RemoveEntityEffect }, // - { 0x44, PacketTypesIn.ResetScore }, // Added in 1.20.3 - { 0x45, PacketTypesIn.RemoveResourcePack }, // Added in 1.20.3 - { 0x46, PacketTypesIn.ResourcePackSend }, // (Wiki name: Add Resource pack (play)) - { 0x47, PacketTypesIn.Respawn }, // Changed in 1.20.2 - { 0x48, PacketTypesIn.EntityHeadLook }, // (Wiki name: Set Head Rotation) - { 0x49, PacketTypesIn.MultiBlockChange }, // (Wiki name: Update Section Blocks) - { 0x4A, PacketTypesIn.SelectAdvancementTab }, // - { 0x4B, PacketTypesIn.ServerData }, // Added in 1.19 - { 0x4C, PacketTypesIn.ActionBar }, // (Wiki name: Set Action Bar Text) - { 0x4D, PacketTypesIn.WorldBorderCenter }, // (Wiki name: Set Border Center) - { 0x4E, PacketTypesIn.WorldBorderLerpSize }, // - { 0x4F, PacketTypesIn.WorldBorderSize }, // (Wiki name: Set World Border Size) - { 0x50, PacketTypesIn.WorldBorderWarningDelay }, // (Wiki name: Set World Border Warning Delay) - { 0x51, PacketTypesIn.WorldBorderWarningReach }, // (Wiki name: Set Border Warning Distance) - { 0x52, PacketTypesIn.Camera }, // (Wiki name: Set Camera) - { 0x53, PacketTypesIn.HeldItemChange }, // (Wiki name: Set Held Item) - { 0x54, PacketTypesIn.UpdateViewPosition }, // (Wiki name: Set Center Chunk) - { 0x55, PacketTypesIn.UpdateViewDistance }, // (Wiki name: Set Render Distance) - { 0x56, PacketTypesIn.SpawnPosition }, // (Wiki name: Set Default Spawn Position) - { 0x57, PacketTypesIn.DisplayScoreboard }, // (Wiki name: Set Display Objective) - { 0x58, PacketTypesIn.EntityMetadata }, // (Wiki name: Set Entity Metadata) - { 0x59, PacketTypesIn.AttachEntity }, // (Wiki name: Link Entities) - { 0x5A, PacketTypesIn.EntityVelocity }, // (Wiki name: Set Entity Velocity) - { 0x5B, PacketTypesIn.EntityEquipment }, // (Wiki name: Set Equipment) - { 0x5C, PacketTypesIn.SetExperience }, // Changed in 1.20.2 - { 0x5D, PacketTypesIn.UpdateHealth }, // (Wiki name: Set Health) - { 0x5E, PacketTypesIn.ScoreboardObjective }, // (Wiki name: Update Objectives) - Changed in 1.20.3 - { 0x5F, PacketTypesIn.SetPassengers }, // - { 0x60, PacketTypesIn.Teams }, // (Wiki name: Update Teams) - { 0x61, PacketTypesIn.UpdateScore }, // (Wiki name: Update Score) - { 0x62, PacketTypesIn.UpdateSimulationDistance }, // (Wiki name: Set Simulation Distance) - { 0x63, PacketTypesIn.SetTitleSubTitle }, // (Wiki name: Set Subtitle Test) - { 0x64, PacketTypesIn.TimeUpdate }, // (Wiki name: Set Time) - { 0x65, PacketTypesIn.SetTitleText }, // (Wiki name: Set Title) - { 0x66, PacketTypesIn.SetTitleTime }, // (Wiki name: Set Title Animation Times) - { 0x67, PacketTypesIn.EntitySoundEffect }, // (Wiki name: Sound Entity) - { 0x68, PacketTypesIn.SoundEffect }, // Changed in 1.19 (Added "Seed" field) (Wiki name: Sound Effect) (No need to be implemented) - { 0x69, PacketTypesIn.StartConfiguration }, // Added in 1.20.2 - { 0x6A, PacketTypesIn.StopSound }, // - { 0x6B, PacketTypesIn.StoreCookie }, // Added in 1.20.6 - { 0x6C, PacketTypesIn.SystemChat }, // Added in 1.19 (Wiki name: System Chat Message) - { 0x6D, PacketTypesIn.PlayerListHeaderAndFooter }, // (Wiki name: Set Tab List Header And Footer) - { 0x6E, PacketTypesIn.NBTQueryResponse }, // (Wiki name: Tag Query Response) - { 0x6F, PacketTypesIn.CollectItem }, // (Wiki name: Pickup Item) - { 0x70, PacketTypesIn.EntityTeleport }, // (Wiki name: Teleport Entity) - { 0x71, PacketTypesIn.SetTickingState }, // Added in 1.20.3 - { 0x72, PacketTypesIn.StepTick }, // Added in 1.20.3 - { 0x73, PacketTypesIn.Transfer }, // Added in 1.20.6 - { 0x74, PacketTypesIn.Advancements }, // (Wiki name: Update Advancements) (Unused) - { 0x75, PacketTypesIn.EntityProperties }, // (Wiki name: Update Attributes) - { 0x76, PacketTypesIn.EntityEffect }, // Changed in 1.19 (Added "Has Factor Data" and "Factor Codec" fields) (Wiki name: Entity Effect) - { 0x77, PacketTypesIn.DeclareRecipes }, // (Wiki name: Update Recipes) (Unused) - { 0x78, PacketTypesIn.Tags }, // (Wiki name: Update Tags) - { 0x79, PacketTypesIn.ProjectilePower }, // Added in 1.20.6 - { 0x7A, PacketTypesIn.CustomReportDetails }, // Added in 1.21 - { 0x7B, PacketTypesIn.ServerLinks } // Added in 1.21 - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, // (Wiki name: Confirm Teleportation) - { 0x01, PacketTypesOut.QueryBlockNBT }, // (Wiki name: Query Block Entity Tag) - { 0x02, PacketTypesOut.SetDifficulty }, // (Wiki name: Change Difficulty) - { 0x03, PacketTypesOut.MessageAcknowledgment }, // Added in 1.19.1 - { 0x04, PacketTypesOut.ChatCommand }, // Added in 1.19 - { 0x05, PacketTypesOut.SignedChatCommand }, // Added in 1.20.6 - { 0x06, PacketTypesOut.ChatMessage }, // Changed in 1.19 (Completely changed) (Wiki name: Chat) - { 0x07, PacketTypesOut.PlayerSession }, // Added in 1.19.3 - { 0x08, PacketTypesOut.ChunkBatchReceived }, // Added in 1.20.2 - { 0x09, PacketTypesOut.ClientStatus }, // (Wiki name: Client Command) - { 0x0A, PacketTypesOut.ClientSettings }, // (Wiki name: Client Information) - { 0x0B, PacketTypesOut.TabComplete }, // (Wiki name: Command Suggestions Request) - { 0x0C, PacketTypesOut.AcknowledgeConfiguration }, // Added in 1.20.2 - { 0x0D, PacketTypesOut.ClickWindowButton }, // (Wiki name: Click Container Button) - { 0x0E, PacketTypesOut.ClickWindow }, // (Wiki name: Click Container) - { 0x0F, PacketTypesOut.CloseWindow }, // (Wiki name: Close Container (serverbound)) - { 0x10, PacketTypesOut.ChangeContainerSlotState }, // Added in 1.20.3 - { 0x11, PacketTypesOut.CookieResponse }, // Added in 1.20.6 - { 0x12, PacketTypesOut.PluginMessage }, // (Wiki name: Serverbound Plugin Message) - { 0x13, PacketTypesOut.DebugSampleSubscription }, // Added in 1.20.6 - { 0x14, PacketTypesOut.EditBook }, // - { 0x15, PacketTypesOut.EntityNBTRequest }, // (Wiki name: Query Entity Tag) - { 0x16, PacketTypesOut.InteractEntity }, // (Wiki name: Interact) - { 0x17, PacketTypesOut.GenerateStructure }, // (Wiki name: Jigsaw Generate) - { 0x18, PacketTypesOut.KeepAlive }, // (Wiki name: Serverbound Keep Alive (play)) - { 0x19, PacketTypesOut.LockDifficulty }, // - { 0x1A, PacketTypesOut.PlayerPosition }, // (Wiki name: Move Player Position) - { 0x1B, PacketTypesOut.PlayerPositionAndRotation }, // (Wiki name: Set Player Position and Rotation) - { 0x1C, PacketTypesOut.PlayerRotation }, // (Wiki name: Set Player Rotation) - { 0x1D, PacketTypesOut.PlayerMovement }, // (Wiki name: Set Player On Ground) - { 0x1E, PacketTypesOut.VehicleMove }, // (Wiki name: Move Vehicle (serverbound)) - { 0x1F, PacketTypesOut.SteerBoat }, // (Wiki name: Paddle Boat) - { 0x20, PacketTypesOut.PickItem }, // - { 0x21, PacketTypesOut.PingRequest }, // Added in 1.20.2 - { 0x22, PacketTypesOut.CraftRecipeRequest }, // (Wiki name: Place recipe) - { 0x23, PacketTypesOut.PlayerAbilities }, // - { 0x24, PacketTypesOut.PlayerDigging }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Player Action) - { 0x25, PacketTypesOut.EntityAction }, // (Wiki name: Player Command) - { 0x26, PacketTypesOut.SteerVehicle }, // (Wiki name: Player Input) - { 0x27, PacketTypesOut.Pong }, // (Wiki name: Pong (play)) - { 0x28, PacketTypesOut.SetDisplayedRecipe }, // (Wiki name: Recipe Book Change Settings) - { 0x29, PacketTypesOut.SetRecipeBookState }, // (Wiki name: Recipe Book Seen Recipe) - { 0x2A, PacketTypesOut.NameItem }, // (Wiki name: Rename Item) - { 0x2B, PacketTypesOut.ResourcePackStatus }, // (Wiki name: Resource Pack (serverbound)) - { 0x2C, PacketTypesOut.AdvancementTab }, // (Wiki name: Seen Advancements) - { 0x2D, PacketTypesOut.SelectTrade }, // - { 0x2E, PacketTypesOut.SetBeaconEffect }, // Changed in 1.19 (No need to be implemented yet) - { 0x2F, PacketTypesOut.HeldItemChange }, // (Wiki name: Set Carried Item (serverbound)) - { 0x30, PacketTypesOut.UpdateCommandBlock }, // (Wiki name: Program Command Block) - { 0x31, PacketTypesOut.UpdateCommandBlockMinecart }, // (Wiki name: Program Command Block Minecart) - { 0x32, PacketTypesOut.CreativeInventoryAction }, // (Wiki name: Set Creative Mode Slot) - { 0x33, PacketTypesOut.UpdateJigsawBlock }, // (Wiki name: Program Jigsaw Block) - { 0x34, PacketTypesOut.UpdateStructureBlock }, // (Wiki name: Program Structure Block) - { 0x35, PacketTypesOut.UpdateSign }, // (Wiki name: Update Sign) - { 0x36, PacketTypesOut.Animation }, // (Wiki name: Swing Arm) - { 0x37, PacketTypesOut.Spectate }, // (Wiki name: Teleport To Entity) - { 0x38, PacketTypesOut.PlayerBlockPlacement }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Use Item On) - { 0x39, PacketTypesOut.UseItem }, // Changed in 1.19 (Added a "Sequence" field) (Wiki name: Use Item) - }; - - private readonly Dictionary configurationTypesIn = new() - { - { 0x00, ConfigurationPacketTypesIn.CookieRequest }, - { 0x01, ConfigurationPacketTypesIn.PluginMessage }, - { 0x02, ConfigurationPacketTypesIn.Disconnect }, - { 0x03, ConfigurationPacketTypesIn.FinishConfiguration }, - { 0x04, ConfigurationPacketTypesIn.KeepAlive }, - { 0x05, ConfigurationPacketTypesIn.Ping }, - { 0x06, ConfigurationPacketTypesIn.ResetChat }, - { 0x07, ConfigurationPacketTypesIn.RegistryData }, - { 0x08, ConfigurationPacketTypesIn.RemoveResourcePack }, - { 0x09, ConfigurationPacketTypesIn.ResourcePack }, - { 0x0A, ConfigurationPacketTypesIn.StoreCookie }, - { 0x0B, ConfigurationPacketTypesIn.Transfer }, - { 0x0C, ConfigurationPacketTypesIn.FeatureFlags }, - { 0x0D, ConfigurationPacketTypesIn.UpdateTags }, - { 0x0E, ConfigurationPacketTypesIn.KnownDataPacks }, - { 0x0F, ConfigurationPacketTypesIn.CustomReportDetails }, // Added in 1.21 (Not used) - { 0x10, ConfigurationPacketTypesIn.ServerLinks } // Added in 1.21 (Not used) - }; - - private readonly Dictionary configurationTypesOut = new() - { - { 0x00, ConfigurationPacketTypesOut.ClientInformation }, - { 0x01, ConfigurationPacketTypesOut.CookieResponse }, - { 0x02, ConfigurationPacketTypesOut.PluginMessage }, - { 0x03, ConfigurationPacketTypesOut.FinishConfiguration }, - { 0x04, ConfigurationPacketTypesOut.KeepAlive }, - { 0x05, ConfigurationPacketTypesOut.Pong }, - { 0x06, ConfigurationPacketTypesOut.ResourcePackResponse }, - { 0x07, ConfigurationPacketTypesOut.KnownDataPacks } - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => configurationTypesIn!; - protected override Dictionary GetConfigurationListOut() => configurationTypesOut!; -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1212.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1212.cs deleted file mode 100644 index e5aa2e63e9..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1212.cs +++ /dev/null @@ -1,243 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes; - -public class PacketPalette1212 : PacketTypePalette -{ - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.Bundle }, // Bundle delimiter - { 0x01, PacketTypesIn.SpawnEntity }, // Add Entity - { 0x02, PacketTypesIn.SpawnExperienceOrb }, // Add Experience Orb - { 0x03, PacketTypesIn.EntityAnimation }, // Animate - { 0x04, PacketTypesIn.Statistics }, // Award Stats - { 0x05, PacketTypesIn.BlockChangedAck }, // Block Changed Ack - { 0x06, PacketTypesIn.BlockBreakAnimation }, // Block Destruction - { 0x07, PacketTypesIn.BlockEntityData }, // Block Entity Data - { 0x08, PacketTypesIn.BlockAction }, // Block Event - { 0x09, PacketTypesIn.BlockChange }, // Block Update - { 0x0A, PacketTypesIn.BossBar }, // Boss Event - { 0x0B, PacketTypesIn.ServerDifficulty }, // Change Difficulty - { 0x0C, PacketTypesIn.ChunkBatchFinished }, // Chunk Batch Finished - { 0x0D, PacketTypesIn.ChunkBatchStarted }, // Chunk Batch Start - { 0x0E, PacketTypesIn.ChunksBiomes }, // Chunks Biomes - { 0x0F, PacketTypesIn.ClearTiles }, // Clear Titles - { 0x10, PacketTypesIn.TabComplete }, // Command Suggestions - { 0x11, PacketTypesIn.DeclareCommands }, // Commands - { 0x12, PacketTypesIn.CloseWindow }, // Container Close - { 0x13, PacketTypesIn.WindowItems }, // Container Set Content - { 0x14, PacketTypesIn.WindowProperty }, // Container Set Data - { 0x15, PacketTypesIn.SetSlot }, // Container Set Slot - { 0x16, PacketTypesIn.CookieRequest }, // Cookie Request - { 0x17, PacketTypesIn.SetCooldown }, // Cooldown - { 0x18, PacketTypesIn.ChatSuggestions }, // Custom Chat Completions - { 0x19, PacketTypesIn.PluginMessage }, // Custom Payload - { 0x1A, PacketTypesIn.DamageEvent }, // Damage Event - { 0x1B, PacketTypesIn.DebugSample }, // Debug Sample - { 0x1C, PacketTypesIn.HideMessage }, // Delete Chat - { 0x1D, PacketTypesIn.Disconnect }, // Disconnect - { 0x1E, PacketTypesIn.ProfilelessChatMessage }, // Disguised Chat - { 0x1F, PacketTypesIn.EntityStatus }, // Entity Event - { 0x20, PacketTypesIn.EntityPositionSync }, // Entity Position Sync (new in 1.21.2) - { 0x21, PacketTypesIn.Explosion }, // Explode - { 0x22, PacketTypesIn.UnloadChunk }, // Forget Level Chunk - { 0x23, PacketTypesIn.ChangeGameState }, // Game Event - { 0x24, PacketTypesIn.OpenHorseWindow }, // Horse Screen Open - { 0x25, PacketTypesIn.HurtAnimation }, // Hurt Animation - { 0x26, PacketTypesIn.InitializeWorldBorder }, // Initialize Border - { 0x27, PacketTypesIn.KeepAlive }, // Keep Alive - { 0x28, PacketTypesIn.ChunkData }, // Level Chunk With Light - { 0x29, PacketTypesIn.Effect }, // Level Event - { 0x2A, PacketTypesIn.Particle }, // Level Particles - { 0x2B, PacketTypesIn.UpdateLight }, // Light Update - { 0x2C, PacketTypesIn.JoinGame }, // Login - { 0x2D, PacketTypesIn.MapData }, // Map Item Data - { 0x2E, PacketTypesIn.TradeList }, // Merchant Offers - { 0x2F, PacketTypesIn.EntityPosition }, // Move Entity Pos - { 0x30, PacketTypesIn.EntityPositionAndRotation }, // Move Entity Pos Rot - { 0x31, PacketTypesIn.MoveMinecartAlongTrack }, // Move Minecart Along Track (new in 1.21.2) - { 0x32, PacketTypesIn.EntityRotation }, // Move Entity Rot - { 0x33, PacketTypesIn.VehicleMove }, // Move Vehicle - { 0x34, PacketTypesIn.OpenBook }, // Open Book - { 0x35, PacketTypesIn.OpenWindow }, // Open Screen - { 0x36, PacketTypesIn.OpenSignEditor }, // Open Sign Editor - { 0x37, PacketTypesIn.Ping }, // Ping - { 0x38, PacketTypesIn.PingResponse }, // Pong Response - { 0x39, PacketTypesIn.CraftRecipeResponse }, // Place Ghost Recipe - { 0x3A, PacketTypesIn.PlayerAbilities }, // Player Abilities - { 0x3B, PacketTypesIn.ChatMessage }, // Player Chat - { 0x3C, PacketTypesIn.EndCombatEvent }, // Player Combat End - { 0x3D, PacketTypesIn.EnterCombatEvent }, // Player Combat Enter - { 0x3E, PacketTypesIn.DeathCombatEvent }, // Player Combat Kill - { 0x3F, PacketTypesIn.PlayerRemove }, // Player Info Remove - { 0x40, PacketTypesIn.PlayerInfo }, // Player Info Update - { 0x41, PacketTypesIn.FacePlayer }, // Player Look At - { 0x42, PacketTypesIn.PlayerPositionAndLook }, // Player Position - { 0x43, PacketTypesIn.PlayerRotation }, // Player Rotation (new in 1.21.2) - { 0x44, PacketTypesIn.RecipeBookAdd }, // Recipe Book Add (new in 1.21.2, replaces UnlockRecipes) - { 0x45, PacketTypesIn.RecipeBookRemove }, // Recipe Book Remove (new in 1.21.2) - { 0x46, PacketTypesIn.RecipeBookSettings }, // Recipe Book Settings (new in 1.21.2) - { 0x47, PacketTypesIn.DestroyEntities }, // Remove Entities - { 0x48, PacketTypesIn.RemoveEntityEffect }, // Remove Mob Effect - { 0x49, PacketTypesIn.ResetScore }, // Reset Score - { 0x4A, PacketTypesIn.RemoveResourcePack }, // Resource Pack Pop - { 0x4B, PacketTypesIn.ResourcePackSend }, // Resource Pack Push - { 0x4C, PacketTypesIn.Respawn }, // Respawn - { 0x4D, PacketTypesIn.EntityHeadLook }, // Rotate Head - { 0x4E, PacketTypesIn.MultiBlockChange }, // Section Blocks Update - { 0x4F, PacketTypesIn.SelectAdvancementTab }, // Select Advancements Tab - { 0x50, PacketTypesIn.ServerData }, // Server Data - { 0x51, PacketTypesIn.ActionBar }, // Set Action Bar Text - { 0x52, PacketTypesIn.WorldBorderCenter }, // Set Border Center - { 0x53, PacketTypesIn.WorldBorderLerpSize }, // Set Border Lerp Size - { 0x54, PacketTypesIn.WorldBorderSize }, // Set Border Size - { 0x55, PacketTypesIn.WorldBorderWarningDelay }, // Set Border Warning Delay - { 0x56, PacketTypesIn.WorldBorderWarningReach }, // Set Border Warning Distance - { 0x57, PacketTypesIn.Camera }, // Set Camera - { 0x58, PacketTypesIn.UpdateViewPosition }, // Set Chunk Cache Center - { 0x59, PacketTypesIn.UpdateViewDistance }, // Set Chunk Cache Radius - { 0x5A, PacketTypesIn.SetCursorItem }, // Set Cursor Item (new in 1.21.2) - { 0x5B, PacketTypesIn.SpawnPosition }, // Set Default Spawn Position - { 0x5C, PacketTypesIn.DisplayScoreboard }, // Set Display Objective - { 0x5D, PacketTypesIn.EntityMetadata }, // Set Entity Data - { 0x5E, PacketTypesIn.AttachEntity }, // Set Entity Link - { 0x5F, PacketTypesIn.EntityVelocity }, // Set Entity Motion - { 0x60, PacketTypesIn.EntityEquipment }, // Set Equipment - { 0x61, PacketTypesIn.SetExperience }, // Set Experience - { 0x62, PacketTypesIn.UpdateHealth }, // Set Health - { 0x63, PacketTypesIn.SetHeldSlot }, // Set Held Slot (new in 1.21.2, replaces HeldItemChange) - { 0x64, PacketTypesIn.ScoreboardObjective }, // Set Objective - { 0x65, PacketTypesIn.SetPassengers }, // Set Passengers - { 0x66, PacketTypesIn.SetPlayerInventory }, // Set Player Inventory (new in 1.21.2) - { 0x67, PacketTypesIn.Teams }, // Set Player Team - { 0x68, PacketTypesIn.UpdateScore }, // Set Score - { 0x69, PacketTypesIn.UpdateSimulationDistance }, // Set Simulation Distance - { 0x6A, PacketTypesIn.SetTitleSubTitle }, // Set Subtitle Text - { 0x6B, PacketTypesIn.TimeUpdate }, // Set Time - { 0x6C, PacketTypesIn.SetTitleText }, // Set Title Text - { 0x6D, PacketTypesIn.SetTitleTime }, // Set Titles Animation - { 0x6E, PacketTypesIn.EntitySoundEffect }, // Sound Entity - { 0x6F, PacketTypesIn.SoundEffect }, // Sound - { 0x70, PacketTypesIn.StartConfiguration }, // Start Configuration - { 0x71, PacketTypesIn.StopSound }, // Stop Sound - { 0x72, PacketTypesIn.StoreCookie }, // Store Cookie - { 0x73, PacketTypesIn.SystemChat }, // System Chat - { 0x74, PacketTypesIn.PlayerListHeaderAndFooter }, // Tab List - { 0x75, PacketTypesIn.NBTQueryResponse }, // Tag Query - { 0x76, PacketTypesIn.CollectItem }, // Take Item Entity - { 0x77, PacketTypesIn.EntityTeleport }, // Teleport Entity - { 0x78, PacketTypesIn.SetTickingState }, // Ticking State - { 0x79, PacketTypesIn.StepTick }, // Ticking Step - { 0x7A, PacketTypesIn.Transfer }, // Transfer - { 0x7B, PacketTypesIn.Advancements }, // Update Advancements - { 0x7C, PacketTypesIn.EntityProperties }, // Update Attributes - { 0x7D, PacketTypesIn.EntityEffect }, // Update Mob Effect - { 0x7E, PacketTypesIn.DeclareRecipes }, // Update Recipes - { 0x7F, PacketTypesIn.Tags }, // Update Tags - { 0x80, PacketTypesIn.ProjectilePower }, // Projectile Power - { 0x81, PacketTypesIn.CustomReportDetails }, // Custom Report Details - { 0x82, PacketTypesIn.ServerLinks } // Server Links - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, // Accept Teleportation - { 0x01, PacketTypesOut.QueryBlockNBT }, // Block Entity Tag Query - { 0x02, PacketTypesOut.BundleItemSelected }, // Bundle Item Selected (new in 1.21.2) - { 0x03, PacketTypesOut.SetDifficulty }, // Change Difficulty - { 0x04, PacketTypesOut.MessageAcknowledgment }, // Chat Ack - { 0x05, PacketTypesOut.ChatCommand }, // Chat Command - { 0x06, PacketTypesOut.SignedChatCommand }, // Chat Command Signed - { 0x07, PacketTypesOut.ChatMessage }, // Chat - { 0x08, PacketTypesOut.PlayerSession }, // Chat Session Update - { 0x09, PacketTypesOut.ChunkBatchReceived }, // Chunk Batch Received - { 0x0A, PacketTypesOut.ClientStatus }, // Client Command - { 0x0B, PacketTypesOut.ClientTickEnd }, // Client Tick End (new in 1.21.2) - { 0x0C, PacketTypesOut.ClientSettings }, // Client Information - { 0x0D, PacketTypesOut.TabComplete }, // Command Suggestion - { 0x0E, PacketTypesOut.AcknowledgeConfiguration }, // Configuration Acknowledged - { 0x0F, PacketTypesOut.ClickWindowButton }, // Container Button Click - { 0x10, PacketTypesOut.ClickWindow }, // Container Click - { 0x11, PacketTypesOut.CloseWindow }, // Container Close - { 0x12, PacketTypesOut.ChangeContainerSlotState }, // Container Slot State Changed - { 0x13, PacketTypesOut.CookieResponse }, // Cookie Response - { 0x14, PacketTypesOut.PluginMessage }, // Custom Payload - { 0x15, PacketTypesOut.DebugSampleSubscription }, // Debug Sample Subscription - { 0x16, PacketTypesOut.EditBook }, // Edit Book - { 0x17, PacketTypesOut.EntityNBTRequest }, // Entity Tag Query - { 0x18, PacketTypesOut.InteractEntity }, // Interact - { 0x19, PacketTypesOut.GenerateStructure }, // Jigsaw Generate - { 0x1A, PacketTypesOut.KeepAlive }, // Keep Alive - { 0x1B, PacketTypesOut.LockDifficulty }, // Lock Difficulty - { 0x1C, PacketTypesOut.PlayerPosition }, // Move Player Pos - { 0x1D, PacketTypesOut.PlayerPositionAndRotation }, // Move Player Pos Rot - { 0x1E, PacketTypesOut.PlayerRotation }, // Move Player Rot - { 0x1F, PacketTypesOut.PlayerMovement }, // Move Player Status Only - { 0x20, PacketTypesOut.VehicleMove }, // Move Vehicle - { 0x21, PacketTypesOut.SteerBoat }, // Paddle Boat - { 0x22, PacketTypesOut.PickItem }, // Pick Item - { 0x23, PacketTypesOut.PingRequest }, // Ping Request - { 0x24, PacketTypesOut.CraftRecipeRequest }, // Place Recipe - { 0x25, PacketTypesOut.PlayerAbilities }, // Player Abilities - { 0x26, PacketTypesOut.PlayerDigging }, // Player Action - { 0x27, PacketTypesOut.EntityAction }, // Player Command - { 0x28, PacketTypesOut.SteerVehicle }, // Player Input - { 0x29, PacketTypesOut.Pong }, // Pong - { 0x2A, PacketTypesOut.SetDisplayedRecipe }, // Recipe Book Change Settings - { 0x2B, PacketTypesOut.SetRecipeBookState }, // Recipe Book Seen Recipe - { 0x2C, PacketTypesOut.NameItem }, // Rename Item - { 0x2D, PacketTypesOut.ResourcePackStatus }, // Resource Pack - { 0x2E, PacketTypesOut.AdvancementTab }, // Seen Advancements - { 0x2F, PacketTypesOut.SelectTrade }, // Select Trade - { 0x30, PacketTypesOut.SetBeaconEffect }, // Set Beacon - { 0x31, PacketTypesOut.HeldItemChange }, // Set Carried Item - { 0x32, PacketTypesOut.UpdateCommandBlock }, // Set Command Block - { 0x33, PacketTypesOut.UpdateCommandBlockMinecart }, // Set Command Minecart - { 0x34, PacketTypesOut.CreativeInventoryAction }, // Set Creative Mode Slot - { 0x35, PacketTypesOut.UpdateJigsawBlock }, // Set Jigsaw Block - { 0x36, PacketTypesOut.UpdateStructureBlock }, // Set Structure Block - { 0x37, PacketTypesOut.UpdateSign }, // Sign Update - { 0x38, PacketTypesOut.Animation }, // Swing - { 0x39, PacketTypesOut.Spectate }, // Teleport To Entity - { 0x3A, PacketTypesOut.PlayerBlockPlacement }, // Use Item On - { 0x3B, PacketTypesOut.UseItem }, // Use Item - }; - - private readonly Dictionary configurationTypesIn = new() - { - { 0x00, ConfigurationPacketTypesIn.CookieRequest }, - { 0x01, ConfigurationPacketTypesIn.PluginMessage }, - { 0x02, ConfigurationPacketTypesIn.Disconnect }, - { 0x03, ConfigurationPacketTypesIn.FinishConfiguration }, - { 0x04, ConfigurationPacketTypesIn.KeepAlive }, - { 0x05, ConfigurationPacketTypesIn.Ping }, - { 0x06, ConfigurationPacketTypesIn.ResetChat }, - { 0x07, ConfigurationPacketTypesIn.RegistryData }, - { 0x08, ConfigurationPacketTypesIn.RemoveResourcePack }, - { 0x09, ConfigurationPacketTypesIn.ResourcePack }, - { 0x0A, ConfigurationPacketTypesIn.StoreCookie }, - { 0x0B, ConfigurationPacketTypesIn.Transfer }, - { 0x0C, ConfigurationPacketTypesIn.FeatureFlags }, - { 0x0D, ConfigurationPacketTypesIn.UpdateTags }, - { 0x0E, ConfigurationPacketTypesIn.KnownDataPacks }, - { 0x0F, ConfigurationPacketTypesIn.CustomReportDetails }, - { 0x10, ConfigurationPacketTypesIn.ServerLinks } - }; - - private readonly Dictionary configurationTypesOut = new() - { - { 0x00, ConfigurationPacketTypesOut.ClientInformation }, - { 0x01, ConfigurationPacketTypesOut.CookieResponse }, - { 0x02, ConfigurationPacketTypesOut.PluginMessage }, - { 0x03, ConfigurationPacketTypesOut.FinishConfiguration }, - { 0x04, ConfigurationPacketTypesOut.KeepAlive }, - { 0x05, ConfigurationPacketTypesOut.Pong }, - { 0x06, ConfigurationPacketTypesOut.ResourcePackResponse }, - { 0x07, ConfigurationPacketTypesOut.KnownDataPacks } - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => configurationTypesIn!; - protected override Dictionary GetConfigurationListOut() => configurationTypesOut!; -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1214.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1214.cs deleted file mode 100644 index a7b90eca92..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1214.cs +++ /dev/null @@ -1,245 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes; - -public class PacketPalette1214 : PacketTypePalette -{ - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.Bundle }, // Bundle delimiter - { 0x01, PacketTypesIn.SpawnEntity }, // Add Entity - { 0x02, PacketTypesIn.SpawnExperienceOrb }, // Add Experience Orb - { 0x03, PacketTypesIn.EntityAnimation }, // Animate - { 0x04, PacketTypesIn.Statistics }, // Award Stats - { 0x05, PacketTypesIn.BlockChangedAck }, // Block Changed Ack - { 0x06, PacketTypesIn.BlockBreakAnimation }, // Block Destruction - { 0x07, PacketTypesIn.BlockEntityData }, // Block Entity Data - { 0x08, PacketTypesIn.BlockAction }, // Block Event - { 0x09, PacketTypesIn.BlockChange }, // Block Update - { 0x0A, PacketTypesIn.BossBar }, // Boss Event - { 0x0B, PacketTypesIn.ServerDifficulty }, // Change Difficulty - { 0x0C, PacketTypesIn.ChunkBatchFinished }, // Chunk Batch Finished - { 0x0D, PacketTypesIn.ChunkBatchStarted }, // Chunk Batch Start - { 0x0E, PacketTypesIn.ChunksBiomes }, // Chunks Biomes - { 0x0F, PacketTypesIn.ClearTiles }, // Clear Titles - { 0x10, PacketTypesIn.TabComplete }, // Command Suggestions - { 0x11, PacketTypesIn.DeclareCommands }, // Commands - { 0x12, PacketTypesIn.CloseWindow }, // Container Close - { 0x13, PacketTypesIn.WindowItems }, // Container Set Content - { 0x14, PacketTypesIn.WindowProperty }, // Container Set Data - { 0x15, PacketTypesIn.SetSlot }, // Container Set Slot - { 0x16, PacketTypesIn.CookieRequest }, // Cookie Request - { 0x17, PacketTypesIn.SetCooldown }, // Cooldown - { 0x18, PacketTypesIn.ChatSuggestions }, // Custom Chat Completions - { 0x19, PacketTypesIn.PluginMessage }, // Custom Payload - { 0x1A, PacketTypesIn.DamageEvent }, // Damage Event - { 0x1B, PacketTypesIn.DebugSample }, // Debug Sample - { 0x1C, PacketTypesIn.HideMessage }, // Delete Chat - { 0x1D, PacketTypesIn.Disconnect }, // Disconnect - { 0x1E, PacketTypesIn.ProfilelessChatMessage }, // Disguised Chat - { 0x1F, PacketTypesIn.EntityStatus }, // Entity Event - { 0x20, PacketTypesIn.EntityPositionSync }, // Entity Position Sync (new in 1.21.2) - { 0x21, PacketTypesIn.Explosion }, // Explode - { 0x22, PacketTypesIn.UnloadChunk }, // Forget Level Chunk - { 0x23, PacketTypesIn.ChangeGameState }, // Game Event - { 0x24, PacketTypesIn.OpenHorseWindow }, // Horse Screen Open - { 0x25, PacketTypesIn.HurtAnimation }, // Hurt Animation - { 0x26, PacketTypesIn.InitializeWorldBorder }, // Initialize Border - { 0x27, PacketTypesIn.KeepAlive }, // Keep Alive - { 0x28, PacketTypesIn.ChunkData }, // Level Chunk With Light - { 0x29, PacketTypesIn.Effect }, // Level Event - { 0x2A, PacketTypesIn.Particle }, // Level Particles - { 0x2B, PacketTypesIn.UpdateLight }, // Light Update - { 0x2C, PacketTypesIn.JoinGame }, // Login - { 0x2D, PacketTypesIn.MapData }, // Map Item Data - { 0x2E, PacketTypesIn.TradeList }, // Merchant Offers - { 0x2F, PacketTypesIn.EntityPosition }, // Move Entity Pos - { 0x30, PacketTypesIn.EntityPositionAndRotation }, // Move Entity Pos Rot - { 0x31, PacketTypesIn.MoveMinecartAlongTrack }, // Move Minecart Along Track (new in 1.21.2) - { 0x32, PacketTypesIn.EntityRotation }, // Move Entity Rot - { 0x33, PacketTypesIn.VehicleMove }, // Move Vehicle - { 0x34, PacketTypesIn.OpenBook }, // Open Book - { 0x35, PacketTypesIn.OpenWindow }, // Open Screen - { 0x36, PacketTypesIn.OpenSignEditor }, // Open Sign Editor - { 0x37, PacketTypesIn.Ping }, // Ping - { 0x38, PacketTypesIn.PingResponse }, // Pong Response - { 0x39, PacketTypesIn.CraftRecipeResponse }, // Place Ghost Recipe - { 0x3A, PacketTypesIn.PlayerAbilities }, // Player Abilities - { 0x3B, PacketTypesIn.ChatMessage }, // Player Chat - { 0x3C, PacketTypesIn.EndCombatEvent }, // Player Combat End - { 0x3D, PacketTypesIn.EnterCombatEvent }, // Player Combat Enter - { 0x3E, PacketTypesIn.DeathCombatEvent }, // Player Combat Kill - { 0x3F, PacketTypesIn.PlayerRemove }, // Player Info Remove - { 0x40, PacketTypesIn.PlayerInfo }, // Player Info Update - { 0x41, PacketTypesIn.FacePlayer }, // Player Look At - { 0x42, PacketTypesIn.PlayerPositionAndLook }, // Player Position - { 0x43, PacketTypesIn.PlayerRotation }, // Player Rotation (new in 1.21.2) - { 0x44, PacketTypesIn.RecipeBookAdd }, // Recipe Book Add (new in 1.21.2, replaces UnlockRecipes) - { 0x45, PacketTypesIn.RecipeBookRemove }, // Recipe Book Remove (new in 1.21.2) - { 0x46, PacketTypesIn.RecipeBookSettings }, // Recipe Book Settings (new in 1.21.2) - { 0x47, PacketTypesIn.DestroyEntities }, // Remove Entities - { 0x48, PacketTypesIn.RemoveEntityEffect }, // Remove Mob Effect - { 0x49, PacketTypesIn.ResetScore }, // Reset Score - { 0x4A, PacketTypesIn.RemoveResourcePack }, // Resource Pack Pop - { 0x4B, PacketTypesIn.ResourcePackSend }, // Resource Pack Push - { 0x4C, PacketTypesIn.Respawn }, // Respawn - { 0x4D, PacketTypesIn.EntityHeadLook }, // Rotate Head - { 0x4E, PacketTypesIn.MultiBlockChange }, // Section Blocks Update - { 0x4F, PacketTypesIn.SelectAdvancementTab }, // Select Advancements Tab - { 0x50, PacketTypesIn.ServerData }, // Server Data - { 0x51, PacketTypesIn.ActionBar }, // Set Action Bar Text - { 0x52, PacketTypesIn.WorldBorderCenter }, // Set Border Center - { 0x53, PacketTypesIn.WorldBorderLerpSize }, // Set Border Lerp Size - { 0x54, PacketTypesIn.WorldBorderSize }, // Set Border Size - { 0x55, PacketTypesIn.WorldBorderWarningDelay }, // Set Border Warning Delay - { 0x56, PacketTypesIn.WorldBorderWarningReach }, // Set Border Warning Distance - { 0x57, PacketTypesIn.Camera }, // Set Camera - { 0x58, PacketTypesIn.UpdateViewPosition }, // Set Chunk Cache Center - { 0x59, PacketTypesIn.UpdateViewDistance }, // Set Chunk Cache Radius - { 0x5A, PacketTypesIn.SetCursorItem }, // Set Cursor Item (new in 1.21.2) - { 0x5B, PacketTypesIn.SpawnPosition }, // Set Default Spawn Position - { 0x5C, PacketTypesIn.DisplayScoreboard }, // Set Display Objective - { 0x5D, PacketTypesIn.EntityMetadata }, // Set Entity Data - { 0x5E, PacketTypesIn.AttachEntity }, // Set Entity Link - { 0x5F, PacketTypesIn.EntityVelocity }, // Set Entity Motion - { 0x60, PacketTypesIn.EntityEquipment }, // Set Equipment - { 0x61, PacketTypesIn.SetExperience }, // Set Experience - { 0x62, PacketTypesIn.UpdateHealth }, // Set Health - { 0x63, PacketTypesIn.SetHeldSlot }, // Set Held Slot (new in 1.21.2, replaces HeldItemChange) - { 0x64, PacketTypesIn.ScoreboardObjective }, // Set Objective - { 0x65, PacketTypesIn.SetPassengers }, // Set Passengers - { 0x66, PacketTypesIn.SetPlayerInventory }, // Set Player Inventory (new in 1.21.2) - { 0x67, PacketTypesIn.Teams }, // Set Player Team - { 0x68, PacketTypesIn.UpdateScore }, // Set Score - { 0x69, PacketTypesIn.UpdateSimulationDistance }, // Set Simulation Distance - { 0x6A, PacketTypesIn.SetTitleSubTitle }, // Set Subtitle Text - { 0x6B, PacketTypesIn.TimeUpdate }, // Set Time - { 0x6C, PacketTypesIn.SetTitleText }, // Set Title Text - { 0x6D, PacketTypesIn.SetTitleTime }, // Set Titles Animation - { 0x6E, PacketTypesIn.EntitySoundEffect }, // Sound Entity - { 0x6F, PacketTypesIn.SoundEffect }, // Sound - { 0x70, PacketTypesIn.StartConfiguration }, // Start Configuration - { 0x71, PacketTypesIn.StopSound }, // Stop Sound - { 0x72, PacketTypesIn.StoreCookie }, // Store Cookie - { 0x73, PacketTypesIn.SystemChat }, // System Chat - { 0x74, PacketTypesIn.PlayerListHeaderAndFooter }, // Tab List - { 0x75, PacketTypesIn.NBTQueryResponse }, // Tag Query - { 0x76, PacketTypesIn.CollectItem }, // Take Item Entity - { 0x77, PacketTypesIn.EntityTeleport }, // Teleport Entity - { 0x78, PacketTypesIn.SetTickingState }, // Ticking State - { 0x79, PacketTypesIn.StepTick }, // Ticking Step - { 0x7A, PacketTypesIn.Transfer }, // Transfer - { 0x7B, PacketTypesIn.Advancements }, // Update Advancements - { 0x7C, PacketTypesIn.EntityProperties }, // Update Attributes - { 0x7D, PacketTypesIn.EntityEffect }, // Update Mob Effect - { 0x7E, PacketTypesIn.DeclareRecipes }, // Update Recipes - { 0x7F, PacketTypesIn.Tags }, // Update Tags - { 0x80, PacketTypesIn.ProjectilePower }, // Projectile Power - { 0x81, PacketTypesIn.CustomReportDetails }, // Custom Report Details - { 0x82, PacketTypesIn.ServerLinks } // Server Links - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, // Accept Teleportation - { 0x01, PacketTypesOut.QueryBlockNBT }, // Block Entity Tag Query - { 0x02, PacketTypesOut.BundleItemSelected }, // Bundle Item Selected - { 0x03, PacketTypesOut.SetDifficulty }, // Change Difficulty - { 0x04, PacketTypesOut.MessageAcknowledgment }, // Chat Ack - { 0x05, PacketTypesOut.ChatCommand }, // Chat Command - { 0x06, PacketTypesOut.SignedChatCommand }, // Chat Command Signed - { 0x07, PacketTypesOut.ChatMessage }, // Chat - { 0x08, PacketTypesOut.PlayerSession }, // Chat Session Update - { 0x09, PacketTypesOut.ChunkBatchReceived }, // Chunk Batch Received - { 0x0A, PacketTypesOut.ClientStatus }, // Client Command - { 0x0B, PacketTypesOut.ClientTickEnd }, // Client Tick End - { 0x0C, PacketTypesOut.ClientSettings }, // Client Information - { 0x0D, PacketTypesOut.TabComplete }, // Command Suggestion - { 0x0E, PacketTypesOut.AcknowledgeConfiguration }, // Configuration Acknowledged - { 0x0F, PacketTypesOut.ClickWindowButton }, // Container Button Click - { 0x10, PacketTypesOut.ClickWindow }, // Container Click - { 0x11, PacketTypesOut.CloseWindow }, // Container Close - { 0x12, PacketTypesOut.ChangeContainerSlotState }, // Container Slot State Changed - { 0x13, PacketTypesOut.CookieResponse }, // Cookie Response - { 0x14, PacketTypesOut.PluginMessage }, // Custom Payload - { 0x15, PacketTypesOut.DebugSampleSubscription }, // Debug Sample Subscription - { 0x16, PacketTypesOut.EditBook }, // Edit Book - { 0x17, PacketTypesOut.EntityNBTRequest }, // Entity Tag Query - { 0x18, PacketTypesOut.InteractEntity }, // Interact - { 0x19, PacketTypesOut.GenerateStructure }, // Jigsaw Generate - { 0x1A, PacketTypesOut.KeepAlive }, // Keep Alive - { 0x1B, PacketTypesOut.LockDifficulty }, // Lock Difficulty - { 0x1C, PacketTypesOut.PlayerPosition }, // Move Player Pos - { 0x1D, PacketTypesOut.PlayerPositionAndRotation }, // Move Player Pos Rot - { 0x1E, PacketTypesOut.PlayerRotation }, // Move Player Rot - { 0x1F, PacketTypesOut.PlayerMovement }, // Move Player Status Only - { 0x20, PacketTypesOut.VehicleMove }, // Move Vehicle - { 0x21, PacketTypesOut.SteerBoat }, // Paddle Boat - { 0x22, PacketTypesOut.PickItem }, // Pick Item From Block (split in 1.21.4) - { 0x23, PacketTypesOut.PickItemFromEntity }, // Pick Item From Entity (new in 1.21.4) - { 0x24, PacketTypesOut.PingRequest }, // Ping Request - { 0x25, PacketTypesOut.CraftRecipeRequest }, // Place Recipe - { 0x26, PacketTypesOut.PlayerAbilities }, // Player Abilities - { 0x27, PacketTypesOut.PlayerDigging }, // Player Action - { 0x28, PacketTypesOut.EntityAction }, // Player Command - { 0x29, PacketTypesOut.SteerVehicle }, // Player Input - { 0x2A, PacketTypesOut.PlayerLoaded }, // Player Loaded (new in 1.21.4) - { 0x2B, PacketTypesOut.Pong }, // Pong - { 0x2C, PacketTypesOut.SetDisplayedRecipe }, // Recipe Book Change Settings - { 0x2D, PacketTypesOut.SetRecipeBookState }, // Recipe Book Seen Recipe - { 0x2E, PacketTypesOut.NameItem }, // Rename Item - { 0x2F, PacketTypesOut.ResourcePackStatus }, // Resource Pack - { 0x30, PacketTypesOut.AdvancementTab }, // Seen Advancements - { 0x31, PacketTypesOut.SelectTrade }, // Select Trade - { 0x32, PacketTypesOut.SetBeaconEffect }, // Set Beacon - { 0x33, PacketTypesOut.HeldItemChange }, // Set Carried Item - { 0x34, PacketTypesOut.UpdateCommandBlock }, // Set Command Block - { 0x35, PacketTypesOut.UpdateCommandBlockMinecart }, // Set Command Minecart - { 0x36, PacketTypesOut.CreativeInventoryAction }, // Set Creative Mode Slot - { 0x37, PacketTypesOut.UpdateJigsawBlock }, // Set Jigsaw Block - { 0x38, PacketTypesOut.UpdateStructureBlock }, // Set Structure Block - { 0x39, PacketTypesOut.UpdateSign }, // Sign Update - { 0x3A, PacketTypesOut.Animation }, // Swing - { 0x3B, PacketTypesOut.Spectate }, // Teleport To Entity - { 0x3C, PacketTypesOut.PlayerBlockPlacement }, // Use Item On - { 0x3D, PacketTypesOut.UseItem }, // Use Item - }; - - private readonly Dictionary configurationTypesIn = new() - { - { 0x00, ConfigurationPacketTypesIn.CookieRequest }, - { 0x01, ConfigurationPacketTypesIn.PluginMessage }, - { 0x02, ConfigurationPacketTypesIn.Disconnect }, - { 0x03, ConfigurationPacketTypesIn.FinishConfiguration }, - { 0x04, ConfigurationPacketTypesIn.KeepAlive }, - { 0x05, ConfigurationPacketTypesIn.Ping }, - { 0x06, ConfigurationPacketTypesIn.ResetChat }, - { 0x07, ConfigurationPacketTypesIn.RegistryData }, - { 0x08, ConfigurationPacketTypesIn.RemoveResourcePack }, - { 0x09, ConfigurationPacketTypesIn.ResourcePack }, - { 0x0A, ConfigurationPacketTypesIn.StoreCookie }, - { 0x0B, ConfigurationPacketTypesIn.Transfer }, - { 0x0C, ConfigurationPacketTypesIn.FeatureFlags }, - { 0x0D, ConfigurationPacketTypesIn.UpdateTags }, - { 0x0E, ConfigurationPacketTypesIn.KnownDataPacks }, - { 0x0F, ConfigurationPacketTypesIn.CustomReportDetails }, - { 0x10, ConfigurationPacketTypesIn.ServerLinks } - }; - - private readonly Dictionary configurationTypesOut = new() - { - { 0x00, ConfigurationPacketTypesOut.ClientInformation }, - { 0x01, ConfigurationPacketTypesOut.CookieResponse }, - { 0x02, ConfigurationPacketTypesOut.PluginMessage }, - { 0x03, ConfigurationPacketTypesOut.FinishConfiguration }, - { 0x04, ConfigurationPacketTypesOut.KeepAlive }, - { 0x05, ConfigurationPacketTypesOut.Pong }, - { 0x06, ConfigurationPacketTypesOut.ResourcePackResponse }, - { 0x07, ConfigurationPacketTypesOut.KnownDataPacks } - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => configurationTypesIn!; - protected override Dictionary GetConfigurationListOut() => configurationTypesOut!; -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1215.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1215.cs deleted file mode 100644 index 0e8f7a9384..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1215.cs +++ /dev/null @@ -1,247 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes; - -public class PacketPalette1215 : PacketTypePalette -{ - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.Bundle }, // Bundle delimiter - { 0x01, PacketTypesIn.SpawnEntity }, // Add Entity - { 0x02, PacketTypesIn.EntityAnimation }, // Animate (was 0x03 in 1.21.4; AddExperienceOrb removed) - { 0x03, PacketTypesIn.Statistics }, // Award Stats - { 0x04, PacketTypesIn.BlockChangedAck }, // Block Changed Ack - { 0x05, PacketTypesIn.BlockBreakAnimation }, // Block Destruction - { 0x06, PacketTypesIn.BlockEntityData }, // Block Entity Data - { 0x07, PacketTypesIn.BlockAction }, // Block Event - { 0x08, PacketTypesIn.BlockChange }, // Block Update - { 0x09, PacketTypesIn.BossBar }, // Boss Event - { 0x0A, PacketTypesIn.ServerDifficulty }, // Change Difficulty - { 0x0B, PacketTypesIn.ChunkBatchFinished }, // Chunk Batch Finished - { 0x0C, PacketTypesIn.ChunkBatchStarted }, // Chunk Batch Start - { 0x0D, PacketTypesIn.ChunksBiomes }, // Chunks Biomes - { 0x0E, PacketTypesIn.ClearTiles }, // Clear Titles - { 0x0F, PacketTypesIn.TabComplete }, // Command Suggestions - { 0x10, PacketTypesIn.DeclareCommands }, // Commands - { 0x11, PacketTypesIn.CloseWindow }, // Container Close - { 0x12, PacketTypesIn.WindowItems }, // Container Set Content - { 0x13, PacketTypesIn.WindowProperty }, // Container Set Data - { 0x14, PacketTypesIn.SetSlot }, // Container Set Slot - { 0x15, PacketTypesIn.CookieRequest }, // Cookie Request - { 0x16, PacketTypesIn.SetCooldown }, // Cooldown - { 0x17, PacketTypesIn.ChatSuggestions }, // Custom Chat Completions - { 0x18, PacketTypesIn.PluginMessage }, // Custom Payload - { 0x19, PacketTypesIn.DamageEvent }, // Damage Event - { 0x1A, PacketTypesIn.DebugSample }, // Debug Sample - { 0x1B, PacketTypesIn.HideMessage }, // Delete Chat - { 0x1C, PacketTypesIn.Disconnect }, // Disconnect - { 0x1D, PacketTypesIn.ProfilelessChatMessage }, // Disguised Chat - { 0x1E, PacketTypesIn.EntityStatus }, // Entity Event - { 0x1F, PacketTypesIn.EntityPositionSync }, // Entity Position Sync - { 0x20, PacketTypesIn.Explosion }, // Explode - { 0x21, PacketTypesIn.UnloadChunk }, // Forget Level Chunk - { 0x22, PacketTypesIn.ChangeGameState }, // Game Event - { 0x23, PacketTypesIn.OpenHorseWindow }, // Horse Screen Open - { 0x24, PacketTypesIn.HurtAnimation }, // Hurt Animation - { 0x25, PacketTypesIn.InitializeWorldBorder }, // Initialize Border - { 0x26, PacketTypesIn.KeepAlive }, // Keep Alive - { 0x27, PacketTypesIn.ChunkData }, // Level Chunk With Light - { 0x28, PacketTypesIn.Effect }, // Level Event - { 0x29, PacketTypesIn.Particle }, // Level Particles - { 0x2A, PacketTypesIn.UpdateLight }, // Light Update - { 0x2B, PacketTypesIn.JoinGame }, // Login - { 0x2C, PacketTypesIn.MapData }, // Map Item Data - { 0x2D, PacketTypesIn.TradeList }, // Merchant Offers - { 0x2E, PacketTypesIn.EntityPosition }, // Move Entity Pos - { 0x2F, PacketTypesIn.EntityPositionAndRotation }, // Move Entity Pos Rot - { 0x30, PacketTypesIn.MoveMinecartAlongTrack }, // Move Minecart Along Track - { 0x31, PacketTypesIn.EntityRotation }, // Move Entity Rot - { 0x32, PacketTypesIn.VehicleMove }, // Move Vehicle - { 0x33, PacketTypesIn.OpenBook }, // Open Book - { 0x34, PacketTypesIn.OpenWindow }, // Open Screen - { 0x35, PacketTypesIn.OpenSignEditor }, // Open Sign Editor - { 0x36, PacketTypesIn.Ping }, // Ping - { 0x37, PacketTypesIn.PingResponse }, // Pong Response - { 0x38, PacketTypesIn.CraftRecipeResponse }, // Place Ghost Recipe - { 0x39, PacketTypesIn.PlayerAbilities }, // Player Abilities - { 0x3A, PacketTypesIn.ChatMessage }, // Player Chat - { 0x3B, PacketTypesIn.EndCombatEvent }, // Player Combat End - { 0x3C, PacketTypesIn.EnterCombatEvent }, // Player Combat Enter - { 0x3D, PacketTypesIn.DeathCombatEvent }, // Player Combat Kill - { 0x3E, PacketTypesIn.PlayerRemove }, // Player Info Remove - { 0x3F, PacketTypesIn.PlayerInfo }, // Player Info Update - { 0x40, PacketTypesIn.FacePlayer }, // Player Look At - { 0x41, PacketTypesIn.PlayerPositionAndLook }, // Player Position - { 0x42, PacketTypesIn.PlayerRotation }, // Player Rotation - { 0x43, PacketTypesIn.RecipeBookAdd }, // Recipe Book Add - { 0x44, PacketTypesIn.RecipeBookRemove }, // Recipe Book Remove - { 0x45, PacketTypesIn.RecipeBookSettings }, // Recipe Book Settings - { 0x46, PacketTypesIn.DestroyEntities }, // Remove Entities - { 0x47, PacketTypesIn.RemoveEntityEffect }, // Remove Mob Effect - { 0x48, PacketTypesIn.ResetScore }, // Reset Score - { 0x49, PacketTypesIn.RemoveResourcePack }, // Resource Pack Pop - { 0x4A, PacketTypesIn.ResourcePackSend }, // Resource Pack Push - { 0x4B, PacketTypesIn.Respawn }, // Respawn - { 0x4C, PacketTypesIn.EntityHeadLook }, // Rotate Head - { 0x4D, PacketTypesIn.MultiBlockChange }, // Section Blocks Update - { 0x4E, PacketTypesIn.SelectAdvancementTab }, // Select Advancements Tab - { 0x4F, PacketTypesIn.ServerData }, // Server Data - { 0x50, PacketTypesIn.ActionBar }, // Set Action Bar Text - { 0x51, PacketTypesIn.WorldBorderCenter }, // Set Border Center - { 0x52, PacketTypesIn.WorldBorderLerpSize }, // Set Border Lerp Size - { 0x53, PacketTypesIn.WorldBorderSize }, // Set Border Size - { 0x54, PacketTypesIn.WorldBorderWarningDelay }, // Set Border Warning Delay - { 0x55, PacketTypesIn.WorldBorderWarningReach }, // Set Border Warning Distance - { 0x56, PacketTypesIn.Camera }, // Set Camera - { 0x57, PacketTypesIn.UpdateViewPosition }, // Set Chunk Cache Center - { 0x58, PacketTypesIn.UpdateViewDistance }, // Set Chunk Cache Radius - { 0x59, PacketTypesIn.SetCursorItem }, // Set Cursor Item - { 0x5A, PacketTypesIn.SpawnPosition }, // Set Default Spawn Position - { 0x5B, PacketTypesIn.DisplayScoreboard }, // Set Display Objective - { 0x5C, PacketTypesIn.EntityMetadata }, // Set Entity Data - { 0x5D, PacketTypesIn.AttachEntity }, // Set Entity Link - { 0x5E, PacketTypesIn.EntityVelocity }, // Set Entity Motion - { 0x5F, PacketTypesIn.EntityEquipment }, // Set Equipment - { 0x60, PacketTypesIn.SetExperience }, // Set Experience - { 0x61, PacketTypesIn.UpdateHealth }, // Set Health - { 0x62, PacketTypesIn.SetHeldSlot }, // Set Held Slot - { 0x63, PacketTypesIn.ScoreboardObjective }, // Set Objective - { 0x64, PacketTypesIn.SetPassengers }, // Set Passengers - { 0x65, PacketTypesIn.SetPlayerInventory }, // Set Player Inventory - { 0x66, PacketTypesIn.Teams }, // Set Player Team - { 0x67, PacketTypesIn.UpdateScore }, // Set Score - { 0x68, PacketTypesIn.UpdateSimulationDistance }, // Set Simulation Distance - { 0x69, PacketTypesIn.SetTitleSubTitle }, // Set Subtitle Text - { 0x6A, PacketTypesIn.TimeUpdate }, // Set Time - { 0x6B, PacketTypesIn.SetTitleText }, // Set Title Text - { 0x6C, PacketTypesIn.SetTitleTime }, // Set Titles Animation - { 0x6D, PacketTypesIn.EntitySoundEffect }, // Sound Entity - { 0x6E, PacketTypesIn.SoundEffect }, // Sound - { 0x6F, PacketTypesIn.StartConfiguration }, // Start Configuration - { 0x70, PacketTypesIn.StopSound }, // Stop Sound - { 0x71, PacketTypesIn.StoreCookie }, // Store Cookie - { 0x72, PacketTypesIn.SystemChat }, // System Chat - { 0x73, PacketTypesIn.PlayerListHeaderAndFooter }, // Tab List - { 0x74, PacketTypesIn.NBTQueryResponse }, // Tag Query - { 0x75, PacketTypesIn.CollectItem }, // Take Item Entity - { 0x76, PacketTypesIn.EntityTeleport }, // Teleport Entity - { 0x77, PacketTypesIn.TestInstanceBlockStatus }, // Test Instance Block Status (new in 1.21.5) - { 0x78, PacketTypesIn.SetTickingState }, // Ticking State - { 0x79, PacketTypesIn.StepTick }, // Ticking Step - { 0x7A, PacketTypesIn.Transfer }, // Transfer - { 0x7B, PacketTypesIn.Advancements }, // Update Advancements - { 0x7C, PacketTypesIn.EntityProperties }, // Update Attributes - { 0x7D, PacketTypesIn.EntityEffect }, // Update Mob Effect - { 0x7E, PacketTypesIn.DeclareRecipes }, // Update Recipes - { 0x7F, PacketTypesIn.Tags }, // Update Tags - { 0x80, PacketTypesIn.ProjectilePower }, // Projectile Power - { 0x81, PacketTypesIn.CustomReportDetails }, // Custom Report Details - { 0x82, PacketTypesIn.ServerLinks } // Server Links - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, // Accept Teleportation - { 0x01, PacketTypesOut.QueryBlockNBT }, // Block Entity Tag Query - { 0x02, PacketTypesOut.BundleItemSelected }, // Bundle Item Selected - { 0x03, PacketTypesOut.SetDifficulty }, // Change Difficulty - { 0x04, PacketTypesOut.MessageAcknowledgment }, // Chat Ack - { 0x05, PacketTypesOut.ChatCommand }, // Chat Command - { 0x06, PacketTypesOut.SignedChatCommand }, // Chat Command Signed - { 0x07, PacketTypesOut.ChatMessage }, // Chat - { 0x08, PacketTypesOut.PlayerSession }, // Chat Session Update - { 0x09, PacketTypesOut.ChunkBatchReceived }, // Chunk Batch Received - { 0x0A, PacketTypesOut.ClientStatus }, // Client Command - { 0x0B, PacketTypesOut.ClientTickEnd }, // Client Tick End - { 0x0C, PacketTypesOut.ClientSettings }, // Client Information - { 0x0D, PacketTypesOut.TabComplete }, // Command Suggestion - { 0x0E, PacketTypesOut.AcknowledgeConfiguration }, // Configuration Acknowledged - { 0x0F, PacketTypesOut.ClickWindowButton }, // Container Button Click - { 0x10, PacketTypesOut.ClickWindow }, // Container Click - { 0x11, PacketTypesOut.CloseWindow }, // Container Close - { 0x12, PacketTypesOut.ChangeContainerSlotState }, // Container Slot State Changed - { 0x13, PacketTypesOut.CookieResponse }, // Cookie Response - { 0x14, PacketTypesOut.PluginMessage }, // Custom Payload - { 0x15, PacketTypesOut.DebugSampleSubscription }, // Debug Sample Subscription - { 0x16, PacketTypesOut.EditBook }, // Edit Book - { 0x17, PacketTypesOut.EntityNBTRequest }, // Entity Tag Query - { 0x18, PacketTypesOut.InteractEntity }, // Interact - { 0x19, PacketTypesOut.GenerateStructure }, // Jigsaw Generate - { 0x1A, PacketTypesOut.KeepAlive }, // Keep Alive - { 0x1B, PacketTypesOut.LockDifficulty }, // Lock Difficulty - { 0x1C, PacketTypesOut.PlayerPosition }, // Move Player Pos - { 0x1D, PacketTypesOut.PlayerPositionAndRotation }, // Move Player Pos Rot - { 0x1E, PacketTypesOut.PlayerRotation }, // Move Player Rot - { 0x1F, PacketTypesOut.PlayerMovement }, // Move Player Status Only - { 0x20, PacketTypesOut.VehicleMove }, // Move Vehicle - { 0x21, PacketTypesOut.SteerBoat }, // Paddle Boat - { 0x22, PacketTypesOut.PickItem }, // Pick Item From Block - { 0x23, PacketTypesOut.PickItemFromEntity }, // Pick Item From Entity - { 0x24, PacketTypesOut.PingRequest }, // Ping Request - { 0x25, PacketTypesOut.CraftRecipeRequest }, // Place Recipe - { 0x26, PacketTypesOut.PlayerAbilities }, // Player Abilities - { 0x27, PacketTypesOut.PlayerDigging }, // Player Action - { 0x28, PacketTypesOut.EntityAction }, // Player Command - { 0x29, PacketTypesOut.SteerVehicle }, // Player Input - { 0x2A, PacketTypesOut.PlayerLoaded }, // Player Loaded - { 0x2B, PacketTypesOut.Pong }, // Pong - { 0x2C, PacketTypesOut.SetDisplayedRecipe }, // Recipe Book Change Settings - { 0x2D, PacketTypesOut.SetRecipeBookState }, // Recipe Book Seen Recipe - { 0x2E, PacketTypesOut.NameItem }, // Rename Item - { 0x2F, PacketTypesOut.ResourcePackStatus }, // Resource Pack - { 0x30, PacketTypesOut.AdvancementTab }, // Seen Advancements - { 0x31, PacketTypesOut.SelectTrade }, // Select Trade - { 0x32, PacketTypesOut.SetBeaconEffect }, // Set Beacon - { 0x33, PacketTypesOut.HeldItemChange }, // Set Carried Item - { 0x34, PacketTypesOut.UpdateCommandBlock }, // Set Command Block - { 0x35, PacketTypesOut.UpdateCommandBlockMinecart }, // Set Command Minecart - { 0x36, PacketTypesOut.CreativeInventoryAction }, // Set Creative Mode Slot - { 0x37, PacketTypesOut.UpdateJigsawBlock }, // Set Jigsaw Block - { 0x38, PacketTypesOut.UpdateStructureBlock }, // Set Structure Block - { 0x39, PacketTypesOut.SetTestBlock }, // Set Test Block (new in 1.21.5) - { 0x3A, PacketTypesOut.UpdateSign }, // Sign Update - { 0x3B, PacketTypesOut.Animation }, // Swing - { 0x3C, PacketTypesOut.Spectate }, // Teleport To Entity - { 0x3D, PacketTypesOut.TestInstanceBlockAction }, // Test Instance Block Action (new in 1.21.5) - { 0x3E, PacketTypesOut.PlayerBlockPlacement }, // Use Item On - { 0x3F, PacketTypesOut.UseItem }, // Use Item - }; - - private readonly Dictionary configurationTypesIn = new() - { - { 0x00, ConfigurationPacketTypesIn.CookieRequest }, - { 0x01, ConfigurationPacketTypesIn.PluginMessage }, - { 0x02, ConfigurationPacketTypesIn.Disconnect }, - { 0x03, ConfigurationPacketTypesIn.FinishConfiguration }, - { 0x04, ConfigurationPacketTypesIn.KeepAlive }, - { 0x05, ConfigurationPacketTypesIn.Ping }, - { 0x06, ConfigurationPacketTypesIn.ResetChat }, - { 0x07, ConfigurationPacketTypesIn.RegistryData }, - { 0x08, ConfigurationPacketTypesIn.RemoveResourcePack }, - { 0x09, ConfigurationPacketTypesIn.ResourcePack }, - { 0x0A, ConfigurationPacketTypesIn.StoreCookie }, - { 0x0B, ConfigurationPacketTypesIn.Transfer }, - { 0x0C, ConfigurationPacketTypesIn.FeatureFlags }, - { 0x0D, ConfigurationPacketTypesIn.UpdateTags }, - { 0x0E, ConfigurationPacketTypesIn.KnownDataPacks }, - { 0x0F, ConfigurationPacketTypesIn.CustomReportDetails }, - { 0x10, ConfigurationPacketTypesIn.ServerLinks } - }; - - private readonly Dictionary configurationTypesOut = new() - { - { 0x00, ConfigurationPacketTypesOut.ClientInformation }, - { 0x01, ConfigurationPacketTypesOut.CookieResponse }, - { 0x02, ConfigurationPacketTypesOut.PluginMessage }, - { 0x03, ConfigurationPacketTypesOut.FinishConfiguration }, - { 0x04, ConfigurationPacketTypesOut.KeepAlive }, - { 0x05, ConfigurationPacketTypesOut.Pong }, - { 0x06, ConfigurationPacketTypesOut.ResourcePackResponse }, - { 0x07, ConfigurationPacketTypesOut.KnownDataPacks } - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => configurationTypesIn!; - protected override Dictionary GetConfigurationListOut() => configurationTypesOut!; -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1216.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1216.cs deleted file mode 100644 index 3f1520f76d..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1216.cs +++ /dev/null @@ -1,255 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes; - -public class PacketPalette1216 : PacketTypePalette -{ - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.Bundle }, // Bundle delimiter - { 0x01, PacketTypesIn.SpawnEntity }, // Add Entity - { 0x02, PacketTypesIn.EntityAnimation }, // Animate - { 0x03, PacketTypesIn.Statistics }, // Award Stats - { 0x04, PacketTypesIn.BlockChangedAck }, // Block Changed Ack - { 0x05, PacketTypesIn.BlockBreakAnimation }, // Block Destruction - { 0x06, PacketTypesIn.BlockEntityData }, // Block Entity Data - { 0x07, PacketTypesIn.BlockAction }, // Block Event - { 0x08, PacketTypesIn.BlockChange }, // Block Update - { 0x09, PacketTypesIn.BossBar }, // Boss Event - { 0x0A, PacketTypesIn.ServerDifficulty }, // Change Difficulty - { 0x0B, PacketTypesIn.ChunkBatchFinished }, // Chunk Batch Finished - { 0x0C, PacketTypesIn.ChunkBatchStarted }, // Chunk Batch Start - { 0x0D, PacketTypesIn.ChunksBiomes }, // Chunks Biomes - { 0x0E, PacketTypesIn.ClearTiles }, // Clear Titles - { 0x0F, PacketTypesIn.TabComplete }, // Command Suggestions - { 0x10, PacketTypesIn.DeclareCommands }, // Commands - { 0x11, PacketTypesIn.CloseWindow }, // Container Close - { 0x12, PacketTypesIn.WindowItems }, // Container Set Content - { 0x13, PacketTypesIn.WindowProperty }, // Container Set Data - { 0x14, PacketTypesIn.SetSlot }, // Container Set Slot - { 0x15, PacketTypesIn.CookieRequest }, // Cookie Request - { 0x16, PacketTypesIn.SetCooldown }, // Cooldown - { 0x17, PacketTypesIn.ChatSuggestions }, // Custom Chat Completions - { 0x18, PacketTypesIn.PluginMessage }, // Custom Payload - { 0x19, PacketTypesIn.DamageEvent }, // Damage Event - { 0x1A, PacketTypesIn.DebugSample }, // Debug Sample - { 0x1B, PacketTypesIn.HideMessage }, // Delete Chat - { 0x1C, PacketTypesIn.Disconnect }, // Disconnect - { 0x1D, PacketTypesIn.ProfilelessChatMessage }, // Disguised Chat - { 0x1E, PacketTypesIn.EntityStatus }, // Entity Event - { 0x1F, PacketTypesIn.EntityPositionSync }, // Entity Position Sync - { 0x20, PacketTypesIn.Explosion }, // Explode - { 0x21, PacketTypesIn.UnloadChunk }, // Forget Level Chunk - { 0x22, PacketTypesIn.ChangeGameState }, // Game Event - { 0x23, PacketTypesIn.OpenHorseWindow }, // Horse Screen Open - { 0x24, PacketTypesIn.HurtAnimation }, // Hurt Animation - { 0x25, PacketTypesIn.InitializeWorldBorder }, // Initialize Border - { 0x26, PacketTypesIn.KeepAlive }, // Keep Alive - { 0x27, PacketTypesIn.ChunkData }, // Level Chunk With Light - { 0x28, PacketTypesIn.Effect }, // Level Event - { 0x29, PacketTypesIn.Particle }, // Level Particles - { 0x2A, PacketTypesIn.UpdateLight }, // Light Update - { 0x2B, PacketTypesIn.JoinGame }, // Login - { 0x2C, PacketTypesIn.MapData }, // Map Item Data - { 0x2D, PacketTypesIn.TradeList }, // Merchant Offers - { 0x2E, PacketTypesIn.EntityPosition }, // Move Entity Pos - { 0x2F, PacketTypesIn.EntityPositionAndRotation }, // Move Entity Pos Rot - { 0x30, PacketTypesIn.MoveMinecartAlongTrack }, // Move Minecart Along Track - { 0x31, PacketTypesIn.EntityRotation }, // Move Entity Rot - { 0x32, PacketTypesIn.VehicleMove }, // Move Vehicle - { 0x33, PacketTypesIn.OpenBook }, // Open Book - { 0x34, PacketTypesIn.OpenWindow }, // Open Screen - { 0x35, PacketTypesIn.OpenSignEditor }, // Open Sign Editor - { 0x36, PacketTypesIn.Ping }, // Ping - { 0x37, PacketTypesIn.PingResponse }, // Pong Response - { 0x38, PacketTypesIn.CraftRecipeResponse }, // Place Ghost Recipe - { 0x39, PacketTypesIn.PlayerAbilities }, // Player Abilities - { 0x3A, PacketTypesIn.ChatMessage }, // Player Chat - { 0x3B, PacketTypesIn.EndCombatEvent }, // Player Combat End - { 0x3C, PacketTypesIn.EnterCombatEvent }, // Player Combat Enter - { 0x3D, PacketTypesIn.DeathCombatEvent }, // Player Combat Kill - { 0x3E, PacketTypesIn.PlayerRemove }, // Player Info Remove - { 0x3F, PacketTypesIn.PlayerInfo }, // Player Info Update - { 0x40, PacketTypesIn.FacePlayer }, // Player Look At - { 0x41, PacketTypesIn.PlayerPositionAndLook }, // Player Position - { 0x42, PacketTypesIn.PlayerRotation }, // Player Rotation - { 0x43, PacketTypesIn.RecipeBookAdd }, // Recipe Book Add - { 0x44, PacketTypesIn.RecipeBookRemove }, // Recipe Book Remove - { 0x45, PacketTypesIn.RecipeBookSettings }, // Recipe Book Settings - { 0x46, PacketTypesIn.DestroyEntities }, // Remove Entities - { 0x47, PacketTypesIn.RemoveEntityEffect }, // Remove Mob Effect - { 0x48, PacketTypesIn.ResetScore }, // Reset Score - { 0x49, PacketTypesIn.RemoveResourcePack }, // Resource Pack Pop - { 0x4A, PacketTypesIn.ResourcePackSend }, // Resource Pack Push - { 0x4B, PacketTypesIn.Respawn }, // Respawn - { 0x4C, PacketTypesIn.EntityHeadLook }, // Rotate Head - { 0x4D, PacketTypesIn.MultiBlockChange }, // Section Blocks Update - { 0x4E, PacketTypesIn.SelectAdvancementTab }, // Select Advancements Tab - { 0x4F, PacketTypesIn.ServerData }, // Server Data - { 0x50, PacketTypesIn.ActionBar }, // Set Action Bar Text - { 0x51, PacketTypesIn.WorldBorderCenter }, // Set Border Center - { 0x52, PacketTypesIn.WorldBorderLerpSize }, // Set Border Lerp Size - { 0x53, PacketTypesIn.WorldBorderSize }, // Set Border Size - { 0x54, PacketTypesIn.WorldBorderWarningDelay }, // Set Border Warning Delay - { 0x55, PacketTypesIn.WorldBorderWarningReach }, // Set Border Warning Distance - { 0x56, PacketTypesIn.Camera }, // Set Camera - { 0x57, PacketTypesIn.UpdateViewPosition }, // Set Chunk Cache Center - { 0x58, PacketTypesIn.UpdateViewDistance }, // Set Chunk Cache Radius - { 0x59, PacketTypesIn.SetCursorItem }, // Set Cursor Item - { 0x5A, PacketTypesIn.SpawnPosition }, // Set Default Spawn Position - { 0x5B, PacketTypesIn.DisplayScoreboard }, // Set Display Objective - { 0x5C, PacketTypesIn.EntityMetadata }, // Set Entity Data - { 0x5D, PacketTypesIn.AttachEntity }, // Set Entity Link - { 0x5E, PacketTypesIn.EntityVelocity }, // Set Entity Motion - { 0x5F, PacketTypesIn.EntityEquipment }, // Set Equipment - { 0x60, PacketTypesIn.SetExperience }, // Set Experience - { 0x61, PacketTypesIn.UpdateHealth }, // Set Health - { 0x62, PacketTypesIn.SetHeldSlot }, // Set Held Slot - { 0x63, PacketTypesIn.ScoreboardObjective }, // Set Objective - { 0x64, PacketTypesIn.SetPassengers }, // Set Passengers - { 0x65, PacketTypesIn.SetPlayerInventory }, // Set Player Inventory - { 0x66, PacketTypesIn.Teams }, // Set Player Team - { 0x67, PacketTypesIn.UpdateScore }, // Set Score - { 0x68, PacketTypesIn.UpdateSimulationDistance }, // Set Simulation Distance - { 0x69, PacketTypesIn.SetTitleSubTitle }, // Set Subtitle Text - { 0x6A, PacketTypesIn.TimeUpdate }, // Set Time - { 0x6B, PacketTypesIn.SetTitleText }, // Set Title Text - { 0x6C, PacketTypesIn.SetTitleTime }, // Set Titles Animation - { 0x6D, PacketTypesIn.EntitySoundEffect }, // Sound Entity - { 0x6E, PacketTypesIn.SoundEffect }, // Sound - { 0x6F, PacketTypesIn.StartConfiguration }, // Start Configuration - { 0x70, PacketTypesIn.StopSound }, // Stop Sound - { 0x71, PacketTypesIn.StoreCookie }, // Store Cookie - { 0x72, PacketTypesIn.SystemChat }, // System Chat - { 0x73, PacketTypesIn.PlayerListHeaderAndFooter }, // Tab List - { 0x74, PacketTypesIn.NBTQueryResponse }, // Tag Query - { 0x75, PacketTypesIn.CollectItem }, // Take Item Entity - { 0x76, PacketTypesIn.EntityTeleport }, // Teleport Entity - { 0x77, PacketTypesIn.TestInstanceBlockStatus }, // Test Instance Block Status - { 0x78, PacketTypesIn.SetTickingState }, // Ticking State - { 0x79, PacketTypesIn.StepTick }, // Ticking Step - { 0x7A, PacketTypesIn.Transfer }, // Transfer - { 0x7B, PacketTypesIn.Advancements }, // Update Advancements - { 0x7C, PacketTypesIn.EntityProperties }, // Update Attributes - { 0x7D, PacketTypesIn.EntityEffect }, // Update Mob Effect - { 0x7E, PacketTypesIn.DeclareRecipes }, // Update Recipes - { 0x7F, PacketTypesIn.Tags }, // Update Tags - { 0x80, PacketTypesIn.ProjectilePower }, // Projectile Power - { 0x81, PacketTypesIn.CustomReportDetails }, // Custom Report Details - { 0x82, PacketTypesIn.ServerLinks }, // Server Links - { 0x83, PacketTypesIn.Waypoint }, // Waypoint (new in 1.21.6) - { 0x84, PacketTypesIn.ClearDialog }, // Clear Dialog (new in 1.21.6) - { 0x85, PacketTypesIn.ShowDialog } // Show Dialog (new in 1.21.6) - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, // Accept Teleportation - { 0x01, PacketTypesOut.QueryBlockNBT }, // Block Entity Tag Query - { 0x02, PacketTypesOut.BundleItemSelected }, // Bundle Item Selected - { 0x03, PacketTypesOut.SetDifficulty }, // Change Difficulty - { 0x04, PacketTypesOut.ChangeGameMode }, // Change Game Mode (new in 1.21.6) - { 0x05, PacketTypesOut.MessageAcknowledgment }, // Chat Ack - { 0x06, PacketTypesOut.ChatCommand }, // Chat Command - { 0x07, PacketTypesOut.SignedChatCommand }, // Chat Command Signed - { 0x08, PacketTypesOut.ChatMessage }, // Chat - { 0x09, PacketTypesOut.PlayerSession }, // Chat Session Update - { 0x0A, PacketTypesOut.ChunkBatchReceived }, // Chunk Batch Received - { 0x0B, PacketTypesOut.ClientStatus }, // Client Command - { 0x0C, PacketTypesOut.ClientTickEnd }, // Client Tick End - { 0x0D, PacketTypesOut.ClientSettings }, // Client Information - { 0x0E, PacketTypesOut.TabComplete }, // Command Suggestion - { 0x0F, PacketTypesOut.AcknowledgeConfiguration }, // Configuration Acknowledged - { 0x10, PacketTypesOut.ClickWindowButton }, // Container Button Click - { 0x11, PacketTypesOut.ClickWindow }, // Container Click - { 0x12, PacketTypesOut.CloseWindow }, // Container Close - { 0x13, PacketTypesOut.ChangeContainerSlotState }, // Container Slot State Changed - { 0x14, PacketTypesOut.CookieResponse }, // Cookie Response - { 0x15, PacketTypesOut.PluginMessage }, // Custom Payload - { 0x16, PacketTypesOut.DebugSampleSubscription }, // Debug Sample Subscription - { 0x17, PacketTypesOut.EditBook }, // Edit Book - { 0x18, PacketTypesOut.EntityNBTRequest }, // Entity Tag Query - { 0x19, PacketTypesOut.InteractEntity }, // Interact - { 0x1A, PacketTypesOut.GenerateStructure }, // Jigsaw Generate - { 0x1B, PacketTypesOut.KeepAlive }, // Keep Alive - { 0x1C, PacketTypesOut.LockDifficulty }, // Lock Difficulty - { 0x1D, PacketTypesOut.PlayerPosition }, // Move Player Pos - { 0x1E, PacketTypesOut.PlayerPositionAndRotation }, // Move Player Pos Rot - { 0x1F, PacketTypesOut.PlayerRotation }, // Move Player Rot - { 0x20, PacketTypesOut.PlayerMovement }, // Move Player Status Only - { 0x21, PacketTypesOut.VehicleMove }, // Move Vehicle - { 0x22, PacketTypesOut.SteerBoat }, // Paddle Boat - { 0x23, PacketTypesOut.PickItem }, // Pick Item From Block - { 0x24, PacketTypesOut.PickItemFromEntity }, // Pick Item From Entity - { 0x25, PacketTypesOut.PingRequest }, // Ping Request - { 0x26, PacketTypesOut.CraftRecipeRequest }, // Place Recipe - { 0x27, PacketTypesOut.PlayerAbilities }, // Player Abilities - { 0x28, PacketTypesOut.PlayerDigging }, // Player Action - { 0x29, PacketTypesOut.EntityAction }, // Player Command - { 0x2A, PacketTypesOut.SteerVehicle }, // Player Input - { 0x2B, PacketTypesOut.PlayerLoaded }, // Player Loaded - { 0x2C, PacketTypesOut.Pong }, // Pong - { 0x2D, PacketTypesOut.SetDisplayedRecipe }, // Recipe Book Change Settings - { 0x2E, PacketTypesOut.SetRecipeBookState }, // Recipe Book Seen Recipe - { 0x2F, PacketTypesOut.NameItem }, // Rename Item - { 0x30, PacketTypesOut.ResourcePackStatus }, // Resource Pack - { 0x31, PacketTypesOut.AdvancementTab }, // Seen Advancements - { 0x32, PacketTypesOut.SelectTrade }, // Select Trade - { 0x33, PacketTypesOut.SetBeaconEffect }, // Set Beacon - { 0x34, PacketTypesOut.HeldItemChange }, // Set Carried Item - { 0x35, PacketTypesOut.UpdateCommandBlock }, // Set Command Block - { 0x36, PacketTypesOut.UpdateCommandBlockMinecart }, // Set Command Minecart - { 0x37, PacketTypesOut.CreativeInventoryAction }, // Set Creative Mode Slot - { 0x38, PacketTypesOut.UpdateJigsawBlock }, // Set Jigsaw Block - { 0x39, PacketTypesOut.UpdateStructureBlock }, // Set Structure Block - { 0x3A, PacketTypesOut.SetTestBlock }, // Set Test Block - { 0x3B, PacketTypesOut.UpdateSign }, // Sign Update - { 0x3C, PacketTypesOut.Animation }, // Swing - { 0x3D, PacketTypesOut.Spectate }, // Teleport To Entity - { 0x3E, PacketTypesOut.TestInstanceBlockAction }, // Test Instance Block Action - { 0x3F, PacketTypesOut.PlayerBlockPlacement }, // Use Item On - { 0x40, PacketTypesOut.UseItem }, // Use Item - { 0x41, PacketTypesOut.CustomClickAction } // Custom Click Action (new in 1.21.6) - }; - - private readonly Dictionary configurationTypesIn = new() - { - { 0x00, ConfigurationPacketTypesIn.CookieRequest }, - { 0x01, ConfigurationPacketTypesIn.PluginMessage }, - { 0x02, ConfigurationPacketTypesIn.Disconnect }, - { 0x03, ConfigurationPacketTypesIn.FinishConfiguration }, - { 0x04, ConfigurationPacketTypesIn.KeepAlive }, - { 0x05, ConfigurationPacketTypesIn.Ping }, - { 0x06, ConfigurationPacketTypesIn.ResetChat }, - { 0x07, ConfigurationPacketTypesIn.RegistryData }, - { 0x08, ConfigurationPacketTypesIn.RemoveResourcePack }, - { 0x09, ConfigurationPacketTypesIn.ResourcePack }, - { 0x0A, ConfigurationPacketTypesIn.StoreCookie }, - { 0x0B, ConfigurationPacketTypesIn.Transfer }, - { 0x0C, ConfigurationPacketTypesIn.FeatureFlags }, - { 0x0D, ConfigurationPacketTypesIn.UpdateTags }, - { 0x0E, ConfigurationPacketTypesIn.KnownDataPacks }, - { 0x0F, ConfigurationPacketTypesIn.CustomReportDetails }, - { 0x10, ConfigurationPacketTypesIn.ServerLinks }, - { 0x11, ConfigurationPacketTypesIn.ClearDialog }, // New in 1.21.6 - { 0x12, ConfigurationPacketTypesIn.ShowDialog } // New in 1.21.6 - }; - - private readonly Dictionary configurationTypesOut = new() - { - { 0x00, ConfigurationPacketTypesOut.ClientInformation }, - { 0x01, ConfigurationPacketTypesOut.CookieResponse }, - { 0x02, ConfigurationPacketTypesOut.PluginMessage }, - { 0x03, ConfigurationPacketTypesOut.FinishConfiguration }, - { 0x04, ConfigurationPacketTypesOut.KeepAlive }, - { 0x05, ConfigurationPacketTypesOut.Pong }, - { 0x06, ConfigurationPacketTypesOut.ResourcePackResponse }, - { 0x07, ConfigurationPacketTypesOut.KnownDataPacks }, - { 0x08, ConfigurationPacketTypesOut.CustomClickAction } // New in 1.21.6 - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => configurationTypesIn!; - protected override Dictionary GetConfigurationListOut() => configurationTypesOut!; -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1219.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1219.cs deleted file mode 100644 index 5aab09bc94..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette1219.cs +++ /dev/null @@ -1,262 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes; - -public class PacketPalette1219 : PacketTypePalette -{ - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.Bundle }, // Bundle delimiter - { 0x01, PacketTypesIn.SpawnEntity }, // Add Entity - { 0x02, PacketTypesIn.EntityAnimation }, // Animate - { 0x03, PacketTypesIn.Statistics }, // Award Stats - { 0x04, PacketTypesIn.BlockChangedAck }, // Block Changed Ack - { 0x05, PacketTypesIn.BlockBreakAnimation }, // Block Destruction - { 0x06, PacketTypesIn.BlockEntityData }, // Block Entity Data - { 0x07, PacketTypesIn.BlockAction }, // Block Event - { 0x08, PacketTypesIn.BlockChange }, // Block Update - { 0x09, PacketTypesIn.BossBar }, // Boss Event - { 0x0A, PacketTypesIn.ServerDifficulty }, // Change Difficulty - { 0x0B, PacketTypesIn.ChunkBatchFinished }, // Chunk Batch Finished - { 0x0C, PacketTypesIn.ChunkBatchStarted }, // Chunk Batch Start - { 0x0D, PacketTypesIn.ChunksBiomes }, // Chunks Biomes - { 0x0E, PacketTypesIn.ClearTiles }, // Clear Titles - { 0x0F, PacketTypesIn.TabComplete }, // Command Suggestions - { 0x10, PacketTypesIn.DeclareCommands }, // Commands - { 0x11, PacketTypesIn.CloseWindow }, // Container Close - { 0x12, PacketTypesIn.WindowItems }, // Container Set Content - { 0x13, PacketTypesIn.WindowProperty }, // Container Set Data - { 0x14, PacketTypesIn.SetSlot }, // Container Set Slot - { 0x15, PacketTypesIn.CookieRequest }, // Cookie Request - { 0x16, PacketTypesIn.SetCooldown }, // Cooldown - { 0x17, PacketTypesIn.ChatSuggestions }, // Custom Chat Completions - { 0x18, PacketTypesIn.PluginMessage }, // Custom Payload - { 0x19, PacketTypesIn.DamageEvent }, // Damage Event - { 0x1A, PacketTypesIn.DebugBlockValue }, // Debug Block Value (new in 1.21.9) - { 0x1B, PacketTypesIn.DebugChunkValue }, // Debug Chunk Value (new in 1.21.9) - { 0x1C, PacketTypesIn.DebugEntityValue }, // Debug Entity Value (new in 1.21.9) - { 0x1D, PacketTypesIn.DebugEvent }, // Debug Event (new in 1.21.9) - { 0x1E, PacketTypesIn.DebugSample }, // Debug Sample - { 0x1F, PacketTypesIn.HideMessage }, // Delete Chat - { 0x20, PacketTypesIn.Disconnect }, // Disconnect - { 0x21, PacketTypesIn.ProfilelessChatMessage }, // Disguised Chat - { 0x22, PacketTypesIn.EntityStatus }, // Entity Event - { 0x23, PacketTypesIn.EntityPositionSync }, // Entity Position Sync - { 0x24, PacketTypesIn.Explosion }, // Explode - { 0x25, PacketTypesIn.UnloadChunk }, // Forget Level Chunk - { 0x26, PacketTypesIn.ChangeGameState }, // Game Event - { 0x27, PacketTypesIn.GameTestHighlightPos }, // Game Test Highlight Pos (new in 1.21.9) - { 0x28, PacketTypesIn.OpenHorseWindow }, // Horse Screen Open - { 0x29, PacketTypesIn.HurtAnimation }, // Hurt Animation - { 0x2A, PacketTypesIn.InitializeWorldBorder }, // Initialize Border - { 0x2B, PacketTypesIn.KeepAlive }, // Keep Alive - { 0x2C, PacketTypesIn.ChunkData }, // Level Chunk With Light - { 0x2D, PacketTypesIn.Effect }, // Level Event - { 0x2E, PacketTypesIn.Particle }, // Level Particles - { 0x2F, PacketTypesIn.UpdateLight }, // Light Update - { 0x30, PacketTypesIn.JoinGame }, // Login - { 0x31, PacketTypesIn.MapData }, // Map Item Data - { 0x32, PacketTypesIn.TradeList }, // Merchant Offers - { 0x33, PacketTypesIn.EntityPosition }, // Move Entity Pos - { 0x34, PacketTypesIn.EntityPositionAndRotation }, // Move Entity Pos Rot - { 0x35, PacketTypesIn.MoveMinecartAlongTrack }, // Move Minecart Along Track - { 0x36, PacketTypesIn.EntityRotation }, // Move Entity Rot - { 0x37, PacketTypesIn.VehicleMove }, // Move Vehicle - { 0x38, PacketTypesIn.OpenBook }, // Open Book - { 0x39, PacketTypesIn.OpenWindow }, // Open Screen - { 0x3A, PacketTypesIn.OpenSignEditor }, // Open Sign Editor - { 0x3B, PacketTypesIn.Ping }, // Ping - { 0x3C, PacketTypesIn.PingResponse }, // Pong Response - { 0x3D, PacketTypesIn.CraftRecipeResponse }, // Place Ghost Recipe - { 0x3E, PacketTypesIn.PlayerAbilities }, // Player Abilities - { 0x3F, PacketTypesIn.ChatMessage }, // Player Chat - { 0x40, PacketTypesIn.EndCombatEvent }, // Player Combat End - { 0x41, PacketTypesIn.EnterCombatEvent }, // Player Combat Enter - { 0x42, PacketTypesIn.DeathCombatEvent }, // Player Combat Kill - { 0x43, PacketTypesIn.PlayerRemove }, // Player Info Remove - { 0x44, PacketTypesIn.PlayerInfo }, // Player Info Update - { 0x45, PacketTypesIn.FacePlayer }, // Player Look At - { 0x46, PacketTypesIn.PlayerPositionAndLook }, // Player Position - { 0x47, PacketTypesIn.PlayerRotation }, // Player Rotation - { 0x48, PacketTypesIn.RecipeBookAdd }, // Recipe Book Add - { 0x49, PacketTypesIn.RecipeBookRemove }, // Recipe Book Remove - { 0x4A, PacketTypesIn.RecipeBookSettings }, // Recipe Book Settings - { 0x4B, PacketTypesIn.DestroyEntities }, // Remove Entities - { 0x4C, PacketTypesIn.RemoveEntityEffect }, // Remove Mob Effect - { 0x4D, PacketTypesIn.ResetScore }, // Reset Score - { 0x4E, PacketTypesIn.RemoveResourcePack }, // Resource Pack Pop - { 0x4F, PacketTypesIn.ResourcePackSend }, // Resource Pack Push - { 0x50, PacketTypesIn.Respawn }, // Respawn - { 0x51, PacketTypesIn.EntityHeadLook }, // Rotate Head - { 0x52, PacketTypesIn.MultiBlockChange }, // Section Blocks Update - { 0x53, PacketTypesIn.SelectAdvancementTab }, // Select Advancements Tab - { 0x54, PacketTypesIn.ServerData }, // Server Data - { 0x55, PacketTypesIn.ActionBar }, // Set Action Bar Text - { 0x56, PacketTypesIn.WorldBorderCenter }, // Set Border Center - { 0x57, PacketTypesIn.WorldBorderLerpSize }, // Set Border Lerp Size - { 0x58, PacketTypesIn.WorldBorderSize }, // Set Border Size - { 0x59, PacketTypesIn.WorldBorderWarningDelay }, // Set Border Warning Delay - { 0x5A, PacketTypesIn.WorldBorderWarningReach }, // Set Border Warning Distance - { 0x5B, PacketTypesIn.Camera }, // Set Camera - { 0x5C, PacketTypesIn.UpdateViewPosition }, // Set Chunk Cache Center - { 0x5D, PacketTypesIn.UpdateViewDistance }, // Set Chunk Cache Radius - { 0x5E, PacketTypesIn.SetCursorItem }, // Set Cursor Item - { 0x5F, PacketTypesIn.SpawnPosition }, // Set Default Spawn Position - { 0x60, PacketTypesIn.DisplayScoreboard }, // Set Display Objective - { 0x61, PacketTypesIn.EntityMetadata }, // Set Entity Data - { 0x62, PacketTypesIn.AttachEntity }, // Set Entity Link - { 0x63, PacketTypesIn.EntityVelocity }, // Set Entity Motion - { 0x64, PacketTypesIn.EntityEquipment }, // Set Equipment - { 0x65, PacketTypesIn.SetExperience }, // Set Experience - { 0x66, PacketTypesIn.UpdateHealth }, // Set Health - { 0x67, PacketTypesIn.SetHeldSlot }, // Set Held Slot - { 0x68, PacketTypesIn.ScoreboardObjective }, // Set Objective - { 0x69, PacketTypesIn.SetPassengers }, // Set Passengers - { 0x6A, PacketTypesIn.SetPlayerInventory }, // Set Player Inventory - { 0x6B, PacketTypesIn.Teams }, // Set Player Team - { 0x6C, PacketTypesIn.UpdateScore }, // Set Score - { 0x6D, PacketTypesIn.UpdateSimulationDistance }, // Set Simulation Distance - { 0x6E, PacketTypesIn.SetTitleSubTitle }, // Set Subtitle Text - { 0x6F, PacketTypesIn.TimeUpdate }, // Set Time - { 0x70, PacketTypesIn.SetTitleText }, // Set Title Text - { 0x71, PacketTypesIn.SetTitleTime }, // Set Titles Animation - { 0x72, PacketTypesIn.EntitySoundEffect }, // Sound Entity - { 0x73, PacketTypesIn.SoundEffect }, // Sound - { 0x74, PacketTypesIn.StartConfiguration }, // Start Configuration - { 0x75, PacketTypesIn.StopSound }, // Stop Sound - { 0x76, PacketTypesIn.StoreCookie }, // Store Cookie - { 0x77, PacketTypesIn.SystemChat }, // System Chat - { 0x78, PacketTypesIn.PlayerListHeaderAndFooter }, // Tab List - { 0x79, PacketTypesIn.NBTQueryResponse }, // Tag Query - { 0x7A, PacketTypesIn.CollectItem }, // Take Item Entity - { 0x7B, PacketTypesIn.EntityTeleport }, // Teleport Entity - { 0x7C, PacketTypesIn.TestInstanceBlockStatus }, // Test Instance Block Status - { 0x7D, PacketTypesIn.SetTickingState }, // Ticking State - { 0x7E, PacketTypesIn.StepTick }, // Ticking Step - { 0x7F, PacketTypesIn.Transfer }, // Transfer - { 0x80, PacketTypesIn.Advancements }, // Update Advancements - { 0x81, PacketTypesIn.EntityProperties }, // Update Attributes - { 0x82, PacketTypesIn.EntityEffect }, // Update Mob Effect - { 0x83, PacketTypesIn.DeclareRecipes }, // Update Recipes - { 0x84, PacketTypesIn.Tags }, // Update Tags - { 0x85, PacketTypesIn.ProjectilePower }, // Projectile Power - { 0x86, PacketTypesIn.CustomReportDetails }, // Custom Report Details - { 0x87, PacketTypesIn.ServerLinks }, // Server Links - { 0x88, PacketTypesIn.Waypoint }, // Waypoint - { 0x89, PacketTypesIn.ClearDialog }, // Clear Dialog - { 0x8A, PacketTypesIn.ShowDialog } // Show Dialog - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, // Accept Teleportation - { 0x01, PacketTypesOut.QueryBlockNBT }, // Block Entity Tag Query - { 0x02, PacketTypesOut.BundleItemSelected }, // Bundle Item Selected - { 0x03, PacketTypesOut.SetDifficulty }, // Change Difficulty - { 0x04, PacketTypesOut.ChangeGameMode }, // Change Game Mode - { 0x05, PacketTypesOut.MessageAcknowledgment }, // Chat Ack - { 0x06, PacketTypesOut.ChatCommand }, // Chat Command - { 0x07, PacketTypesOut.SignedChatCommand }, // Chat Command Signed - { 0x08, PacketTypesOut.ChatMessage }, // Chat - { 0x09, PacketTypesOut.PlayerSession }, // Chat Session Update - { 0x0A, PacketTypesOut.ChunkBatchReceived }, // Chunk Batch Received - { 0x0B, PacketTypesOut.ClientStatus }, // Client Command - { 0x0C, PacketTypesOut.ClientTickEnd }, // Client Tick End - { 0x0D, PacketTypesOut.ClientSettings }, // Client Information - { 0x0E, PacketTypesOut.TabComplete }, // Command Suggestion - { 0x0F, PacketTypesOut.AcknowledgeConfiguration }, // Configuration Acknowledged - { 0x10, PacketTypesOut.ClickWindowButton }, // Container Button Click - { 0x11, PacketTypesOut.ClickWindow }, // Container Click - { 0x12, PacketTypesOut.CloseWindow }, // Container Close - { 0x13, PacketTypesOut.ChangeContainerSlotState }, // Container Slot State Changed - { 0x14, PacketTypesOut.CookieResponse }, // Cookie Response - { 0x15, PacketTypesOut.PluginMessage }, // Custom Payload - { 0x16, PacketTypesOut.DebugSampleSubscription }, // Debug Subscription Request - { 0x17, PacketTypesOut.EditBook }, // Edit Book - { 0x18, PacketTypesOut.EntityNBTRequest }, // Entity Tag Query - { 0x19, PacketTypesOut.InteractEntity }, // Interact - { 0x1A, PacketTypesOut.GenerateStructure }, // Jigsaw Generate - { 0x1B, PacketTypesOut.KeepAlive }, // Keep Alive - { 0x1C, PacketTypesOut.LockDifficulty }, // Lock Difficulty - { 0x1D, PacketTypesOut.PlayerPosition }, // Move Player Pos - { 0x1E, PacketTypesOut.PlayerPositionAndRotation }, // Move Player Pos Rot - { 0x1F, PacketTypesOut.PlayerRotation }, // Move Player Rot - { 0x20, PacketTypesOut.PlayerMovement }, // Move Player Status Only - { 0x21, PacketTypesOut.VehicleMove }, // Move Vehicle - { 0x22, PacketTypesOut.SteerBoat }, // Paddle Boat - { 0x23, PacketTypesOut.PickItem }, // Pick Item From Block - { 0x24, PacketTypesOut.PickItemFromEntity }, // Pick Item From Entity - { 0x25, PacketTypesOut.PingRequest }, // Ping Request - { 0x26, PacketTypesOut.CraftRecipeRequest }, // Place Recipe - { 0x27, PacketTypesOut.PlayerAbilities }, // Player Abilities - { 0x28, PacketTypesOut.PlayerDigging }, // Player Action - { 0x29, PacketTypesOut.EntityAction }, // Player Command - { 0x2A, PacketTypesOut.SteerVehicle }, // Player Input - { 0x2B, PacketTypesOut.PlayerLoaded }, // Player Loaded - { 0x2C, PacketTypesOut.Pong }, // Pong - { 0x2D, PacketTypesOut.SetDisplayedRecipe }, // Recipe Book Change Settings - { 0x2E, PacketTypesOut.SetRecipeBookState }, // Recipe Book Seen Recipe - { 0x2F, PacketTypesOut.NameItem }, // Rename Item - { 0x30, PacketTypesOut.ResourcePackStatus }, // Resource Pack - { 0x31, PacketTypesOut.AdvancementTab }, // Seen Advancements - { 0x32, PacketTypesOut.SelectTrade }, // Select Trade - { 0x33, PacketTypesOut.SetBeaconEffect }, // Set Beacon - { 0x34, PacketTypesOut.HeldItemChange }, // Set Carried Item - { 0x35, PacketTypesOut.UpdateCommandBlock }, // Set Command Block - { 0x36, PacketTypesOut.UpdateCommandBlockMinecart }, // Set Command Minecart - { 0x37, PacketTypesOut.CreativeInventoryAction }, // Set Creative Mode Slot - { 0x38, PacketTypesOut.UpdateJigsawBlock }, // Set Jigsaw Block - { 0x39, PacketTypesOut.UpdateStructureBlock }, // Set Structure Block - { 0x3A, PacketTypesOut.SetTestBlock }, // Set Test Block - { 0x3B, PacketTypesOut.UpdateSign }, // Sign Update - { 0x3C, PacketTypesOut.Animation }, // Swing - { 0x3D, PacketTypesOut.Spectate }, // Teleport To Entity - { 0x3E, PacketTypesOut.TestInstanceBlockAction }, // Test Instance Block Action - { 0x3F, PacketTypesOut.PlayerBlockPlacement }, // Use Item On - { 0x40, PacketTypesOut.UseItem }, // Use Item - { 0x41, PacketTypesOut.CustomClickAction } // Custom Click Action - }; - - private readonly Dictionary configurationTypesIn = new() - { - { 0x00, ConfigurationPacketTypesIn.CookieRequest }, - { 0x01, ConfigurationPacketTypesIn.PluginMessage }, - { 0x02, ConfigurationPacketTypesIn.Disconnect }, - { 0x03, ConfigurationPacketTypesIn.FinishConfiguration }, - { 0x04, ConfigurationPacketTypesIn.KeepAlive }, - { 0x05, ConfigurationPacketTypesIn.Ping }, - { 0x06, ConfigurationPacketTypesIn.ResetChat }, - { 0x07, ConfigurationPacketTypesIn.RegistryData }, - { 0x08, ConfigurationPacketTypesIn.RemoveResourcePack }, - { 0x09, ConfigurationPacketTypesIn.ResourcePack }, - { 0x0A, ConfigurationPacketTypesIn.StoreCookie }, - { 0x0B, ConfigurationPacketTypesIn.Transfer }, - { 0x0C, ConfigurationPacketTypesIn.FeatureFlags }, - { 0x0D, ConfigurationPacketTypesIn.UpdateTags }, - { 0x0E, ConfigurationPacketTypesIn.KnownDataPacks }, - { 0x0F, ConfigurationPacketTypesIn.CustomReportDetails }, - { 0x10, ConfigurationPacketTypesIn.ServerLinks }, - { 0x11, ConfigurationPacketTypesIn.ClearDialog }, - { 0x12, ConfigurationPacketTypesIn.ShowDialog }, - { 0x13, ConfigurationPacketTypesIn.CodeOfConduct } // New in 1.21.9 - }; - - private readonly Dictionary configurationTypesOut = new() - { - { 0x00, ConfigurationPacketTypesOut.ClientInformation }, - { 0x01, ConfigurationPacketTypesOut.CookieResponse }, - { 0x02, ConfigurationPacketTypesOut.PluginMessage }, - { 0x03, ConfigurationPacketTypesOut.FinishConfiguration }, - { 0x04, ConfigurationPacketTypesOut.KeepAlive }, - { 0x05, ConfigurationPacketTypesOut.Pong }, - { 0x06, ConfigurationPacketTypesOut.ResourcePackResponse }, - { 0x07, ConfigurationPacketTypesOut.KnownDataPacks }, - { 0x08, ConfigurationPacketTypesOut.CustomClickAction }, - { 0x09, ConfigurationPacketTypesOut.AcceptCodeOfConduct } // New in 1.21.9 - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => configurationTypesIn!; - protected override Dictionary GetConfigurationListOut() => configurationTypesOut!; -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette17.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette17.cs deleted file mode 100644 index ecbdf4a92d..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette17.cs +++ /dev/null @@ -1,121 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette17 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.KeepAlive }, - { 0x01, PacketTypesIn.JoinGame }, - { 0x02, PacketTypesIn.ChatMessage }, - { 0x03, PacketTypesIn.TimeUpdate }, - { 0x04, PacketTypesIn.EntityEquipment }, - { 0x05, PacketTypesIn.SpawnPosition }, - { 0x06, PacketTypesIn.UpdateHealth }, - { 0x07, PacketTypesIn.Respawn }, - { 0x08, PacketTypesIn.PlayerPositionAndLook }, - { 0x09, PacketTypesIn.HeldItemChange }, - { 0x0A, PacketTypesIn.UseBed }, - { 0x0B, PacketTypesIn.EntityAnimation }, - { 0x0C, PacketTypesIn.SpawnPlayer }, - { 0x0D, PacketTypesIn.CollectItem }, - { 0x0E, PacketTypesIn.SpawnEntity }, - { 0x0F, PacketTypesIn.SpawnLivingEntity }, - { 0x10, PacketTypesIn.SpawnPainting }, - { 0x11, PacketTypesIn.SpawnExperienceOrb }, - { 0x12, PacketTypesIn.EntityVelocity }, - { 0x13, PacketTypesIn.DestroyEntities }, - { 0x14, PacketTypesIn.EntityMovement }, - { 0x15, PacketTypesIn.EntityPosition }, - { 0x16, PacketTypesIn.EntityRotation }, - { 0x17, PacketTypesIn.EntityPositionAndRotation }, - { 0x18, PacketTypesIn.EntityTeleport }, - { 0x19, PacketTypesIn.EntityHeadLook }, - { 0x1A, PacketTypesIn.EntityStatus }, - { 0x1B, PacketTypesIn.AttachEntity }, - { 0x1C, PacketTypesIn.EntityMetadata }, - { 0x1D, PacketTypesIn.EntityEffect }, - { 0x1E, PacketTypesIn.RemoveEntityEffect }, - { 0x1F, PacketTypesIn.SetExperience }, - { 0x20, PacketTypesIn.EntityProperties }, - { 0x21, PacketTypesIn.ChunkData }, - { 0x22, PacketTypesIn.MultiBlockChange }, - { 0x23, PacketTypesIn.BlockChange }, - { 0x24, PacketTypesIn.BlockAction }, - { 0x25, PacketTypesIn.BlockBreakAnimation }, - { 0x26, PacketTypesIn.MapChunkBulk }, - { 0x27, PacketTypesIn.Explosion }, - { 0x28, PacketTypesIn.Effect }, - { 0x29, PacketTypesIn.SoundEffect }, - { 0x2A, PacketTypesIn.Particle }, - { 0x2B, PacketTypesIn.ChangeGameState }, - { 0x2C, PacketTypesIn.SpawnWeatherEntity }, - { 0x2D, PacketTypesIn.OpenWindow }, - { 0x2E, PacketTypesIn.CloseWindow }, - { 0x2F, PacketTypesIn.SetSlot }, - { 0x30, PacketTypesIn.WindowItems }, - { 0x31, PacketTypesIn.WindowProperty }, - { 0x32, PacketTypesIn.WindowConfirmation }, - { 0x33, PacketTypesIn.UpdateSign }, - { 0x34, PacketTypesIn.MapData }, - { 0x35, PacketTypesIn.BlockEntityData }, - { 0x36, PacketTypesIn.OpenSignEditor }, - { 0x37, PacketTypesIn.Statistics }, - { 0x38, PacketTypesIn.PlayerInfo }, - { 0x39, PacketTypesIn.PlayerAbilities }, - { 0x3A, PacketTypesIn.TabComplete }, - { 0x3B, PacketTypesIn.ScoreboardObjective }, - { 0x3C, PacketTypesIn.UpdateScore }, - { 0x3D, PacketTypesIn.DisplayScoreboard }, - { 0x3E, PacketTypesIn.Teams }, - { 0x3F, PacketTypesIn.PluginMessage }, - { 0x40, PacketTypesIn.Disconnect }, - { 0x41, PacketTypesIn.ServerDifficulty }, - { 0x42, PacketTypesIn.CombatEvent }, - { 0x43, PacketTypesIn.Camera }, - { 0x44, PacketTypesIn.WorldBorder }, - { 0x45, PacketTypesIn.Title }, - { 0x46, PacketTypesIn.SetCompression }, - { 0x47, PacketTypesIn.PlayerListHeaderAndFooter }, - { 0x48, PacketTypesIn.ResourcePackSend }, - { 0x49, PacketTypesIn.UpdateEntityNBT }, - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.KeepAlive }, - { 0x01, PacketTypesOut.ChatMessage }, - { 0x02, PacketTypesOut.InteractEntity }, - { 0x03, PacketTypesOut.PlayerMovement }, - { 0x04, PacketTypesOut.PlayerPosition }, - { 0x05, PacketTypesOut.PlayerRotation }, - { 0x06, PacketTypesOut.PlayerPositionAndRotation }, - { 0x07, PacketTypesOut.PlayerDigging }, - { 0x08, PacketTypesOut.PlayerBlockPlacement }, - { 0x09, PacketTypesOut.HeldItemChange }, - { 0x0A, PacketTypesOut.Animation }, - { 0x0B, PacketTypesOut.EntityAction }, - { 0x0C, PacketTypesOut.SteerVehicle }, - { 0x0D, PacketTypesOut.CloseWindow }, - { 0x0E, PacketTypesOut.ClickWindow }, - { 0x0F, PacketTypesOut.WindowConfirmation }, - { 0x10, PacketTypesOut.CreativeInventoryAction }, - { 0x11, PacketTypesOut.EnchantItem }, - { 0x12, PacketTypesOut.UpdateSign }, - { 0x13, PacketTypesOut.PlayerAbilities }, - { 0x14, PacketTypesOut.TabComplete }, - { 0x15, PacketTypesOut.ClientSettings }, - { 0x16, PacketTypesOut.ClientStatus }, - { 0x17, PacketTypesOut.PluginMessage }, - { 0x18, PacketTypesOut.Spectate }, - { 0x19, PacketTypesOut.ResourcePackStatus }, - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette18.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette18.cs deleted file mode 100644 index 26d43f9d81..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette18.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette18 : PacketTypePalette - { - private Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.KeepAlive }, - { 0x01, PacketTypesIn.JoinGame }, - { 0x02, PacketTypesIn.ChatMessage }, - { 0x03, PacketTypesIn.TimeUpdate }, - { 0x04, PacketTypesIn.EntityEquipment }, - { 0x05, PacketTypesIn.SpawnPosition }, - { 0x06, PacketTypesIn.UpdateHealth }, - { 0x07, PacketTypesIn.Respawn }, - { 0x08, PacketTypesIn.PlayerPositionAndLook }, - { 0x09, PacketTypesIn.HeldItemChange }, - { 0x0A, PacketTypesIn.UseBed }, - { 0x0B, PacketTypesIn.EntityAnimation }, - { 0x0C, PacketTypesIn.SpawnPlayer }, - { 0x0D, PacketTypesIn.CollectItem }, - { 0x0E, PacketTypesIn.SpawnEntity }, - { 0x0F, PacketTypesIn.SpawnLivingEntity }, - { 0x10, PacketTypesIn.SpawnPainting }, - { 0x11, PacketTypesIn.SpawnExperienceOrb }, - { 0x12, PacketTypesIn.EntityVelocity }, - { 0x13, PacketTypesIn.DestroyEntities }, - { 0x15, PacketTypesIn.EntityMovement }, - { 0x16, PacketTypesIn.EntityRotation }, - { 0x17, PacketTypesIn.EntityPositionAndRotation }, - { 0x18, PacketTypesIn.EntityTeleport }, - { 0x19, PacketTypesIn.EntityHeadLook }, - { 0x1A, PacketTypesIn.EntityStatus }, - { 0x1B, PacketTypesIn.AttachEntity }, - { 0x1C, PacketTypesIn.EntityMetadata }, - { 0x1D, PacketTypesIn.EntityEffect }, - { 0x1E, PacketTypesIn.RemoveEntityEffect }, - { 0x1F, PacketTypesIn.SetExperience }, - { 0x20, PacketTypesIn.EntityProperties }, - { 0x21, PacketTypesIn.ChunkData }, - { 0x22, PacketTypesIn.MultiBlockChange }, - { 0x23, PacketTypesIn.BlockChange }, - { 0x24, PacketTypesIn.BlockAction }, - { 0x25, PacketTypesIn.BlockBreakAnimation }, - // Missing Chunk Bulk Data - { 0x27, PacketTypesIn.Explosion }, - { 0x28, PacketTypesIn.Effect }, - { 0x29, PacketTypesIn.SoundEffect }, - { 0x2A, PacketTypesIn.Particle }, - { 0x2B, PacketTypesIn.ChangeGameState }, - { 0x2C, PacketTypesIn.SpawnWeatherEntity }, - { 0x2D, PacketTypesIn.OpenWindow }, - { 0x2E, PacketTypesIn.CloseWindow }, - { 0x2F, PacketTypesIn.SetSlot }, - { 0x30, PacketTypesIn.WindowItems }, - { 0x31, PacketTypesIn.WindowProperty }, - { 0x32, PacketTypesIn.WindowConfirmation }, - // Missing Update Sign - { 0x34, PacketTypesIn.MapData }, - { 0x35, PacketTypesIn.BlockEntityData }, - { 0x36, PacketTypesIn.OpenSignEditor }, - { 0x37, PacketTypesIn.Statistics }, - // Missing Player List Item - { 0x39, PacketTypesIn.PlayerAbilities }, - { 0x3A, PacketTypesIn.TabComplete }, - { 0x3B, PacketTypesIn.ScoreboardObjective }, - { 0x3C, PacketTypesIn.UpdateScore }, - { 0x3D, PacketTypesIn.DisplayScoreboard }, - { 0x3E, PacketTypesIn.Teams }, - { 0x3D, PacketTypesIn.PluginMessage }, - { 0x40, PacketTypesIn.Disconnect }, - { 0x41, PacketTypesIn.ServerDifficulty }, - { 0x42, PacketTypesIn.CombatEvent }, - { 0x43, PacketTypesIn.Camera }, - { 0x44, PacketTypesIn.WorldBorder }, - { 0x45, PacketTypesIn.Title }, - { 0x47, PacketTypesIn.PlayerListHeaderAndFooter }, - { 0x48, PacketTypesIn.ResourcePackSend }, - { 0x49, PacketTypesIn.UpdateEntityNBT } - }; - - private Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, - { 0x01, PacketTypesOut.Unknown }, - { 0x02, PacketTypesOut.TabComplete }, - { 0x03, PacketTypesOut.ChatMessage }, - { 0x04, PacketTypesOut.ClientStatus }, - { 0x05, PacketTypesOut.ClientSettings }, - { 0x06, PacketTypesOut.WindowConfirmation }, - { 0x07, PacketTypesOut.EnchantItem }, - { 0x08, PacketTypesOut.ClickWindow }, - { 0x09, PacketTypesOut.CloseWindow }, - { 0x0A, PacketTypesOut.PluginMessage }, - { 0x0B, PacketTypesOut.InteractEntity }, - { 0x0C, PacketTypesOut.KeepAlive }, - { 0x0D, PacketTypesOut.PlayerMovement }, - { 0x0E, PacketTypesOut.PlayerPosition }, - { 0x0F, PacketTypesOut.PlayerPositionAndRotation }, - { 0x10, PacketTypesOut.PlayerRotation }, - { 0x11, PacketTypesOut.VehicleMove }, - { 0x12, PacketTypesOut.SteerBoat }, - { 0x13, PacketTypesOut.PlayerAbilities }, - { 0x14, PacketTypesOut.PlayerDigging }, - { 0x15, PacketTypesOut.EntityAction }, - { 0x16, PacketTypesOut.SteerVehicle }, - { 0x17, PacketTypesOut.RecipeBookData }, - { 0x18, PacketTypesOut.ResourcePackStatus }, - { 0x19, PacketTypesOut.AdvancementTab }, - { 0x1A, PacketTypesOut.HeldItemChange }, - { 0x1B, PacketTypesOut.CreativeInventoryAction }, - { 0x1C, PacketTypesOut.UpdateSign }, - { 0x1D, PacketTypesOut.Animation }, - { 0x1E, PacketTypesOut.Spectate }, - { 0x1F, PacketTypesOut.PlayerBlockPlacement }, - { 0x20, PacketTypesOut.UseItem }, - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette19.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette19.cs deleted file mode 100644 index ebffc31af9..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette19.cs +++ /dev/null @@ -1,127 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public class PacketPalette19 : PacketTypePalette - { - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.SpawnEntity }, - { 0x01, PacketTypesIn.SpawnExperienceOrb }, - { 0x02, PacketTypesIn.SpawnWeatherEntity }, - { 0x03, PacketTypesIn.SpawnLivingEntity }, - { 0x04, PacketTypesIn.SpawnPainting }, - { 0x05, PacketTypesIn.SpawnPlayer }, - { 0x06, PacketTypesIn.EntityAnimation }, - { 0x07, PacketTypesIn.Statistics }, - { 0x08, PacketTypesIn.BlockBreakAnimation }, - { 0x09, PacketTypesIn.BlockEntityData }, - { 0x0A, PacketTypesIn.BlockAction }, - { 0x0B, PacketTypesIn.BlockChange }, - { 0x0C, PacketTypesIn.BossBar }, - { 0x0D, PacketTypesIn.ServerDifficulty }, - { 0x0E, PacketTypesIn.TabComplete }, - { 0x0F, PacketTypesIn.ChatMessage }, - { 0x10, PacketTypesIn.MultiBlockChange }, - { 0x11, PacketTypesIn.WindowConfirmation }, - { 0x12, PacketTypesIn.CloseWindow }, - { 0x13, PacketTypesIn.OpenWindow }, - { 0x14, PacketTypesIn.WindowItems }, - { 0x15, PacketTypesIn.WindowProperty }, - { 0x16, PacketTypesIn.SetSlot }, - { 0x17, PacketTypesIn.SetCooldown }, - { 0x18, PacketTypesIn.PluginMessage }, - { 0x19, PacketTypesIn.NamedSoundEffect }, - { 0x1A, PacketTypesIn.Disconnect }, - { 0x1B, PacketTypesIn.EntityStatus }, - { 0x1C, PacketTypesIn.Explosion }, - { 0x1D, PacketTypesIn.UnloadChunk }, - { 0x1E, PacketTypesIn.ChangeGameState }, - { 0x1F, PacketTypesIn.KeepAlive }, - { 0x20, PacketTypesIn.ChunkData }, - { 0x21, PacketTypesIn.Effect }, - { 0x22, PacketTypesIn.Particle }, - { 0x23, PacketTypesIn.JoinGame }, - { 0x24, PacketTypesIn.MapData }, - { 0x25, PacketTypesIn.EntityPosition }, - { 0x26, PacketTypesIn.EntityPositionAndRotation }, - { 0x27, PacketTypesIn.EntityRotation }, - { 0x28, PacketTypesIn.EntityMovement }, - { 0x29, PacketTypesIn.VehicleMove }, - { 0x2A, PacketTypesIn.OpenSignEditor }, - { 0x2B, PacketTypesIn.PlayerAbilities }, - { 0x2C, PacketTypesIn.CombatEvent }, - { 0x2D, PacketTypesIn.PlayerInfo }, - { 0x2E, PacketTypesIn.PlayerPositionAndLook }, - { 0x2F, PacketTypesIn.UseBed }, - { 0x30, PacketTypesIn.DestroyEntities }, - { 0x31, PacketTypesIn.RemoveEntityEffect }, - { 0x32, PacketTypesIn.ResourcePackSend }, - { 0x33, PacketTypesIn.Respawn }, - { 0x34, PacketTypesIn.EntityHeadLook }, - { 0x35, PacketTypesIn.WorldBorder }, - { 0x36, PacketTypesIn.Camera }, - { 0x37, PacketTypesIn.HeldItemChange }, - { 0x38, PacketTypesIn.DisplayScoreboard }, - { 0x39, PacketTypesIn.EntityMetadata }, - { 0x3A, PacketTypesIn.AttachEntity }, - { 0x3B, PacketTypesIn.EntityVelocity }, - { 0x3C, PacketTypesIn.EntityEquipment }, - { 0x3D, PacketTypesIn.SetExperience }, - { 0x3E, PacketTypesIn.UpdateHealth }, - { 0x3F, PacketTypesIn.ScoreboardObjective }, - { 0x40, PacketTypesIn.SetPassengers }, - { 0x41, PacketTypesIn.Teams }, - { 0x42, PacketTypesIn.UpdateScore }, - { 0x43, PacketTypesIn.SpawnPosition }, - { 0x44, PacketTypesIn.TimeUpdate }, - { 0x45, PacketTypesIn.Title }, - { 0x46, PacketTypesIn.UpdateSign }, - { 0x47, PacketTypesIn.SoundEffect }, - { 0x48, PacketTypesIn.PlayerListHeaderAndFooter }, - { 0x49, PacketTypesIn.CollectItem }, - { 0x4A, PacketTypesIn.EntityTeleport }, - { 0x4B, PacketTypesIn.EntityProperties }, - { 0x4C, PacketTypesIn.EntityEffect }, - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, - { 0x01, PacketTypesOut.TabComplete }, - { 0x02, PacketTypesOut.ChatMessage }, - { 0x03, PacketTypesOut.ClientStatus }, - { 0x04, PacketTypesOut.ClientSettings }, - { 0x05, PacketTypesOut.WindowConfirmation }, - { 0x06, PacketTypesOut.EnchantItem }, - { 0x07, PacketTypesOut.ClickWindow }, - { 0x08, PacketTypesOut.CloseWindow }, - { 0x09, PacketTypesOut.PluginMessage }, - { 0x0A, PacketTypesOut.InteractEntity }, - { 0x0B, PacketTypesOut.KeepAlive }, - { 0x0C, PacketTypesOut.PlayerPosition }, - { 0x0D, PacketTypesOut.PlayerPositionAndRotation }, - { 0x0E, PacketTypesOut.PlayerRotation }, - { 0x0F, PacketTypesOut.PlayerMovement }, - { 0x10, PacketTypesOut.VehicleMove }, - { 0x11, PacketTypesOut.SteerBoat }, - { 0x12, PacketTypesOut.PlayerAbilities }, - { 0x13, PacketTypesOut.PlayerDigging }, - { 0x14, PacketTypesOut.EntityAction }, - { 0x15, PacketTypesOut.SteerVehicle }, - { 0x16, PacketTypesOut.ResourcePackStatus }, - { 0x17, PacketTypesOut.HeldItemChange }, - { 0x18, PacketTypesOut.CreativeInventoryAction }, - { 0x19, PacketTypesOut.UpdateSign }, - { 0x1A, PacketTypesOut.Animation }, - { 0x1B, PacketTypesOut.Spectate }, - { 0x1C, PacketTypesOut.PlayerBlockPlacement }, - { 0x1D, PacketTypesOut.UseItem }, - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => new(); - protected override Dictionary GetConfigurationListOut() => new(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette261.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette261.cs deleted file mode 100644 index 0f58c527b0..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPalette261.cs +++ /dev/null @@ -1,266 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes; - -public class PacketPalette261 : PacketTypePalette -{ - private readonly Dictionary typeIn = new() - { - { 0x00, PacketTypesIn.Bundle }, // Bundle delimiter - { 0x01, PacketTypesIn.SpawnEntity }, // Add Entity - { 0x02, PacketTypesIn.EntityAnimation }, // Animate - { 0x03, PacketTypesIn.Statistics }, // Award Stats - { 0x04, PacketTypesIn.BlockChangedAck }, // Block Changed Ack - { 0x05, PacketTypesIn.BlockBreakAnimation }, // Block Destruction - { 0x06, PacketTypesIn.BlockEntityData }, // Block Entity Data - { 0x07, PacketTypesIn.BlockAction }, // Block Event - { 0x08, PacketTypesIn.BlockChange }, // Block Update - { 0x09, PacketTypesIn.BossBar }, // Boss Event - { 0x0A, PacketTypesIn.ServerDifficulty }, // Change Difficulty - { 0x0B, PacketTypesIn.ChunkBatchFinished }, // Chunk Batch Finished - { 0x0C, PacketTypesIn.ChunkBatchStarted }, // Chunk Batch Start - { 0x0D, PacketTypesIn.ChunksBiomes }, // Chunks Biomes - { 0x0E, PacketTypesIn.ClearTiles }, // Clear Titles - { 0x0F, PacketTypesIn.TabComplete }, // Command Suggestions - { 0x10, PacketTypesIn.DeclareCommands }, // Commands - { 0x11, PacketTypesIn.CloseWindow }, // Container Close - { 0x12, PacketTypesIn.WindowItems }, // Container Set Content - { 0x13, PacketTypesIn.WindowProperty }, // Container Set Data - { 0x14, PacketTypesIn.SetSlot }, // Container Set Slot - { 0x15, PacketTypesIn.CookieRequest }, // Cookie Request - { 0x16, PacketTypesIn.SetCooldown }, // Cooldown - { 0x17, PacketTypesIn.ChatSuggestions }, // Custom Chat Completions - { 0x18, PacketTypesIn.PluginMessage }, // Custom Payload - { 0x19, PacketTypesIn.DamageEvent }, // Damage Event - { 0x1A, PacketTypesIn.DebugBlockValue }, // Debug Block Value - { 0x1B, PacketTypesIn.DebugChunkValue }, // Debug Chunk Value - { 0x1C, PacketTypesIn.DebugEntityValue }, // Debug Entity Value - { 0x1D, PacketTypesIn.DebugEvent }, // Debug Event - { 0x1E, PacketTypesIn.DebugSample }, // Debug Sample - { 0x1F, PacketTypesIn.HideMessage }, // Delete Chat - { 0x20, PacketTypesIn.Disconnect }, // Disconnect - { 0x21, PacketTypesIn.ProfilelessChatMessage }, // Disguised Chat - { 0x22, PacketTypesIn.EntityStatus }, // Entity Event - { 0x23, PacketTypesIn.EntityPositionSync }, // Entity Position Sync - { 0x24, PacketTypesIn.Explosion }, // Explode - { 0x25, PacketTypesIn.UnloadChunk }, // Forget Level Chunk - { 0x26, PacketTypesIn.ChangeGameState }, // Game Event - { 0x27, PacketTypesIn.GameRuleValues }, // Game Rule Values (new in 26.1) - { 0x28, PacketTypesIn.GameTestHighlightPos }, // Game Test Highlight Pos - { 0x29, PacketTypesIn.OpenHorseWindow }, // Mount Screen Open (renamed from Horse Screen Open) - { 0x2A, PacketTypesIn.HurtAnimation }, // Hurt Animation - { 0x2B, PacketTypesIn.InitializeWorldBorder }, // Initialize Border - { 0x2C, PacketTypesIn.KeepAlive }, // Keep Alive - { 0x2D, PacketTypesIn.ChunkData }, // Level Chunk With Light - { 0x2E, PacketTypesIn.Effect }, // Level Event - { 0x2F, PacketTypesIn.Particle }, // Level Particles - { 0x30, PacketTypesIn.UpdateLight }, // Light Update - { 0x31, PacketTypesIn.JoinGame }, // Login - { 0x32, PacketTypesIn.LowDiskSpaceWarning }, // Low Disk Space Warning (new in 26.1) - { 0x33, PacketTypesIn.MapData }, // Map Item Data - { 0x34, PacketTypesIn.TradeList }, // Merchant Offers - { 0x35, PacketTypesIn.EntityPosition }, // Move Entity Pos - { 0x36, PacketTypesIn.EntityPositionAndRotation }, // Move Entity Pos Rot - { 0x37, PacketTypesIn.MoveMinecartAlongTrack }, // Move Minecart Along Track - { 0x38, PacketTypesIn.EntityRotation }, // Move Entity Rot - { 0x39, PacketTypesIn.VehicleMove }, // Move Vehicle - { 0x3A, PacketTypesIn.OpenBook }, // Open Book - { 0x3B, PacketTypesIn.OpenWindow }, // Open Screen - { 0x3C, PacketTypesIn.OpenSignEditor }, // Open Sign Editor - { 0x3D, PacketTypesIn.Ping }, // Ping - { 0x3E, PacketTypesIn.PingResponse }, // Pong Response - { 0x3F, PacketTypesIn.CraftRecipeResponse }, // Place Ghost Recipe - { 0x40, PacketTypesIn.PlayerAbilities }, // Player Abilities - { 0x41, PacketTypesIn.ChatMessage }, // Player Chat - { 0x42, PacketTypesIn.EndCombatEvent }, // Player Combat End - { 0x43, PacketTypesIn.EnterCombatEvent }, // Player Combat Enter - { 0x44, PacketTypesIn.DeathCombatEvent }, // Player Combat Kill - { 0x45, PacketTypesIn.PlayerRemove }, // Player Info Remove - { 0x46, PacketTypesIn.PlayerInfo }, // Player Info Update - { 0x47, PacketTypesIn.FacePlayer }, // Player Look At - { 0x48, PacketTypesIn.PlayerPositionAndLook }, // Player Position - { 0x49, PacketTypesIn.PlayerRotation }, // Player Rotation - { 0x4A, PacketTypesIn.RecipeBookAdd }, // Recipe Book Add - { 0x4B, PacketTypesIn.RecipeBookRemove }, // Recipe Book Remove - { 0x4C, PacketTypesIn.RecipeBookSettings }, // Recipe Book Settings - { 0x4D, PacketTypesIn.DestroyEntities }, // Remove Entities - { 0x4E, PacketTypesIn.RemoveEntityEffect }, // Remove Mob Effect - { 0x4F, PacketTypesIn.ResetScore }, // Reset Score - { 0x50, PacketTypesIn.RemoveResourcePack }, // Resource Pack Pop - { 0x51, PacketTypesIn.ResourcePackSend }, // Resource Pack Push - { 0x52, PacketTypesIn.Respawn }, // Respawn - { 0x53, PacketTypesIn.EntityHeadLook }, // Rotate Head - { 0x54, PacketTypesIn.MultiBlockChange }, // Section Blocks Update - { 0x55, PacketTypesIn.SelectAdvancementTab }, // Select Advancements Tab - { 0x56, PacketTypesIn.ServerData }, // Server Data - { 0x57, PacketTypesIn.ActionBar }, // Set Action Bar Text - { 0x58, PacketTypesIn.WorldBorderCenter }, // Set Border Center - { 0x59, PacketTypesIn.WorldBorderLerpSize }, // Set Border Lerp Size - { 0x5A, PacketTypesIn.WorldBorderSize }, // Set Border Size - { 0x5B, PacketTypesIn.WorldBorderWarningDelay }, // Set Border Warning Delay - { 0x5C, PacketTypesIn.WorldBorderWarningReach }, // Set Border Warning Distance - { 0x5D, PacketTypesIn.Camera }, // Set Camera - { 0x5E, PacketTypesIn.UpdateViewPosition }, // Set Chunk Cache Center - { 0x5F, PacketTypesIn.UpdateViewDistance }, // Set Chunk Cache Radius - { 0x60, PacketTypesIn.SetCursorItem }, // Set Cursor Item - { 0x61, PacketTypesIn.SpawnPosition }, // Set Default Spawn Position - { 0x62, PacketTypesIn.DisplayScoreboard }, // Set Display Objective - { 0x63, PacketTypesIn.EntityMetadata }, // Set Entity Data - { 0x64, PacketTypesIn.AttachEntity }, // Set Entity Link - { 0x65, PacketTypesIn.EntityVelocity }, // Set Entity Motion - { 0x66, PacketTypesIn.EntityEquipment }, // Set Equipment - { 0x67, PacketTypesIn.SetExperience }, // Set Experience - { 0x68, PacketTypesIn.UpdateHealth }, // Set Health - { 0x69, PacketTypesIn.SetHeldSlot }, // Set Held Slot - { 0x6A, PacketTypesIn.ScoreboardObjective }, // Set Objective - { 0x6B, PacketTypesIn.SetPassengers }, // Set Passengers - { 0x6C, PacketTypesIn.SetPlayerInventory }, // Set Player Inventory - { 0x6D, PacketTypesIn.Teams }, // Set Player Team - { 0x6E, PacketTypesIn.UpdateScore }, // Set Score - { 0x6F, PacketTypesIn.UpdateSimulationDistance }, // Set Simulation Distance - { 0x70, PacketTypesIn.SetTitleSubTitle }, // Set Subtitle Text - { 0x71, PacketTypesIn.TimeUpdate }, // Set Time - { 0x72, PacketTypesIn.SetTitleText }, // Set Title Text - { 0x73, PacketTypesIn.SetTitleTime }, // Set Titles Animation - { 0x74, PacketTypesIn.EntitySoundEffect }, // Sound Entity - { 0x75, PacketTypesIn.SoundEffect }, // Sound - { 0x76, PacketTypesIn.StartConfiguration }, // Start Configuration - { 0x77, PacketTypesIn.StopSound }, // Stop Sound - { 0x78, PacketTypesIn.StoreCookie }, // Store Cookie - { 0x79, PacketTypesIn.SystemChat }, // System Chat - { 0x7A, PacketTypesIn.PlayerListHeaderAndFooter }, // Tab List - { 0x7B, PacketTypesIn.NBTQueryResponse }, // Tag Query - { 0x7C, PacketTypesIn.CollectItem }, // Take Item Entity - { 0x7D, PacketTypesIn.EntityTeleport }, // Teleport Entity - { 0x7E, PacketTypesIn.TestInstanceBlockStatus }, // Test Instance Block Status - { 0x7F, PacketTypesIn.SetTickingState }, // Ticking State - { 0x80, PacketTypesIn.StepTick }, // Ticking Step - { 0x81, PacketTypesIn.Transfer }, // Transfer - { 0x82, PacketTypesIn.Advancements }, // Update Advancements - { 0x83, PacketTypesIn.EntityProperties }, // Update Attributes - { 0x84, PacketTypesIn.EntityEffect }, // Update Mob Effect - { 0x85, PacketTypesIn.DeclareRecipes }, // Update Recipes - { 0x86, PacketTypesIn.Tags }, // Update Tags - { 0x87, PacketTypesIn.ProjectilePower }, // Projectile Power - { 0x88, PacketTypesIn.CustomReportDetails }, // Custom Report Details - { 0x89, PacketTypesIn.ServerLinks }, // Server Links - { 0x8A, PacketTypesIn.Waypoint }, // Waypoint - { 0x8B, PacketTypesIn.ClearDialog }, // Clear Dialog - { 0x8C, PacketTypesIn.ShowDialog } // Show Dialog - }; - - private readonly Dictionary typeOut = new() - { - { 0x00, PacketTypesOut.TeleportConfirm }, // Accept Teleportation - { 0x01, PacketTypesOut.Attack }, // Attack (new in 26.1) - { 0x02, PacketTypesOut.QueryBlockNBT }, // Block Entity Tag Query - { 0x03, PacketTypesOut.BundleItemSelected }, // Bundle Item Selected - { 0x04, PacketTypesOut.SetDifficulty }, // Change Difficulty - { 0x05, PacketTypesOut.ChangeGameMode }, // Change Game Mode - { 0x06, PacketTypesOut.MessageAcknowledgment }, // Chat Ack - { 0x07, PacketTypesOut.ChatCommand }, // Chat Command - { 0x08, PacketTypesOut.SignedChatCommand }, // Chat Command Signed - { 0x09, PacketTypesOut.ChatMessage }, // Chat - { 0x0A, PacketTypesOut.PlayerSession }, // Chat Session Update - { 0x0B, PacketTypesOut.ChunkBatchReceived }, // Chunk Batch Received - { 0x0C, PacketTypesOut.ClientStatus }, // Client Command - { 0x0D, PacketTypesOut.ClientTickEnd }, // Client Tick End - { 0x0E, PacketTypesOut.ClientSettings }, // Client Information - { 0x0F, PacketTypesOut.TabComplete }, // Command Suggestion - { 0x10, PacketTypesOut.AcknowledgeConfiguration }, // Configuration Acknowledged - { 0x11, PacketTypesOut.ClickWindowButton }, // Container Button Click - { 0x12, PacketTypesOut.ClickWindow }, // Container Click - { 0x13, PacketTypesOut.CloseWindow }, // Container Close - { 0x14, PacketTypesOut.ChangeContainerSlotState }, // Container Slot State Changed - { 0x15, PacketTypesOut.CookieResponse }, // Cookie Response - { 0x16, PacketTypesOut.PluginMessage }, // Custom Payload - { 0x17, PacketTypesOut.DebugSampleSubscription }, // Debug Subscription Request (renamed) - { 0x18, PacketTypesOut.EditBook }, // Edit Book - { 0x19, PacketTypesOut.EntityNBTRequest }, // Entity Tag Query - { 0x1A, PacketTypesOut.InteractEntity }, // Interact - { 0x1B, PacketTypesOut.GenerateStructure }, // Jigsaw Generate - { 0x1C, PacketTypesOut.KeepAlive }, // Keep Alive - { 0x1D, PacketTypesOut.LockDifficulty }, // Lock Difficulty - { 0x1E, PacketTypesOut.PlayerPosition }, // Move Player Pos - { 0x1F, PacketTypesOut.PlayerPositionAndRotation }, // Move Player Pos Rot - { 0x20, PacketTypesOut.PlayerRotation }, // Move Player Rot - { 0x21, PacketTypesOut.PlayerMovement }, // Move Player Status Only - { 0x22, PacketTypesOut.VehicleMove }, // Move Vehicle - { 0x23, PacketTypesOut.SteerBoat }, // Paddle Boat - { 0x24, PacketTypesOut.PickItem }, // Pick Item From Block - { 0x25, PacketTypesOut.PickItemFromEntity }, // Pick Item From Entity - { 0x26, PacketTypesOut.PingRequest }, // Ping Request - { 0x27, PacketTypesOut.CraftRecipeRequest }, // Place Recipe - { 0x28, PacketTypesOut.PlayerAbilities }, // Player Abilities - { 0x29, PacketTypesOut.PlayerDigging }, // Player Action - { 0x2A, PacketTypesOut.EntityAction }, // Player Command - { 0x2B, PacketTypesOut.SteerVehicle }, // Player Input - { 0x2C, PacketTypesOut.PlayerLoaded }, // Player Loaded - { 0x2D, PacketTypesOut.Pong }, // Pong - { 0x2E, PacketTypesOut.SetDisplayedRecipe }, // Recipe Book Change Settings - { 0x2F, PacketTypesOut.SetRecipeBookState }, // Recipe Book Seen Recipe - { 0x30, PacketTypesOut.NameItem }, // Rename Item - { 0x31, PacketTypesOut.ResourcePackStatus }, // Resource Pack - { 0x32, PacketTypesOut.AdvancementTab }, // Seen Advancements - { 0x33, PacketTypesOut.SelectTrade }, // Select Trade - { 0x34, PacketTypesOut.SetBeaconEffect }, // Set Beacon - { 0x35, PacketTypesOut.HeldItemChange }, // Set Carried Item - { 0x36, PacketTypesOut.UpdateCommandBlock }, // Set Command Block - { 0x37, PacketTypesOut.UpdateCommandBlockMinecart }, // Set Command Minecart - { 0x38, PacketTypesOut.CreativeInventoryAction }, // Set Creative Mode Slot - { 0x39, PacketTypesOut.SetGameRule }, // Set Game Rule (new in 26.1) - { 0x3A, PacketTypesOut.UpdateJigsawBlock }, // Set Jigsaw Block - { 0x3B, PacketTypesOut.UpdateStructureBlock }, // Set Structure Block - { 0x3C, PacketTypesOut.SetTestBlock }, // Set Test Block - { 0x3D, PacketTypesOut.UpdateSign }, // Sign Update - { 0x3F, PacketTypesOut.Animation }, // Swing - { 0x40, PacketTypesOut.Spectate }, // Teleport To Entity - { 0x41, PacketTypesOut.TestInstanceBlockAction }, // Test Instance Block Action - { 0x42, PacketTypesOut.PlayerBlockPlacement }, // Use Item On - { 0x43, PacketTypesOut.UseItem }, // Use Item - { 0x44, PacketTypesOut.CustomClickAction } // Custom Click Action - }; - - private readonly Dictionary configurationTypesIn = new() - { - { 0x00, ConfigurationPacketTypesIn.CookieRequest }, - { 0x01, ConfigurationPacketTypesIn.PluginMessage }, - { 0x02, ConfigurationPacketTypesIn.Disconnect }, - { 0x03, ConfigurationPacketTypesIn.FinishConfiguration }, - { 0x04, ConfigurationPacketTypesIn.KeepAlive }, - { 0x05, ConfigurationPacketTypesIn.Ping }, - { 0x06, ConfigurationPacketTypesIn.ResetChat }, - { 0x07, ConfigurationPacketTypesIn.RegistryData }, - { 0x08, ConfigurationPacketTypesIn.RemoveResourcePack }, - { 0x09, ConfigurationPacketTypesIn.ResourcePack }, - { 0x0A, ConfigurationPacketTypesIn.StoreCookie }, - { 0x0B, ConfigurationPacketTypesIn.Transfer }, - { 0x0C, ConfigurationPacketTypesIn.FeatureFlags }, - { 0x0D, ConfigurationPacketTypesIn.UpdateTags }, - { 0x0E, ConfigurationPacketTypesIn.KnownDataPacks }, - { 0x0F, ConfigurationPacketTypesIn.CustomReportDetails }, - { 0x10, ConfigurationPacketTypesIn.ServerLinks }, - { 0x11, ConfigurationPacketTypesIn.ClearDialog }, - { 0x12, ConfigurationPacketTypesIn.ShowDialog }, - { 0x13, ConfigurationPacketTypesIn.CodeOfConduct } - }; - - private readonly Dictionary configurationTypesOut = new() - { - { 0x00, ConfigurationPacketTypesOut.ClientInformation }, - { 0x01, ConfigurationPacketTypesOut.CookieResponse }, - { 0x02, ConfigurationPacketTypesOut.PluginMessage }, - { 0x03, ConfigurationPacketTypesOut.FinishConfiguration }, - { 0x04, ConfigurationPacketTypesOut.KeepAlive }, - { 0x05, ConfigurationPacketTypesOut.Pong }, - { 0x06, ConfigurationPacketTypesOut.ResourcePackResponse }, - { 0x07, ConfigurationPacketTypesOut.KnownDataPacks }, - { 0x08, ConfigurationPacketTypesOut.CustomClickAction }, - { 0x09, ConfigurationPacketTypesOut.AcceptCodeOfConduct } - }; - - protected override Dictionary GetListIn() => typeIn; - protected override Dictionary GetListOut() => typeOut; - protected override Dictionary GetConfigurationListIn() => configurationTypesIn!; - protected override Dictionary GetConfigurationListOut() => configurationTypesOut!; -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPaletteHelper.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPaletteHelper.cs deleted file mode 100644 index 84d5365189..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketPaletteHelper.cs +++ /dev/null @@ -1,164 +0,0 @@ -using System.Collections.Generic; -using System.IO; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - public static class PacketPaletteHelper - { - /// - /// Generate a code snippet of updated IDs from a modified packet palette (usually when you have updated packet item position) - /// - /// - /// You have inserted a new packet type with ID 0x02 into the copied new packet palette: - /// { 0x00, PacketTypesIn.SpawnEntity }, - /// { 0x01, PacketTypesIn.SpawnExperienceOrb }, - /// { 0xFF, PacketTypesIn.IamNewPacket }, // use 0xFF because it has conflict with old packet ID, we will correct the IDs now - /// { 0x02, PacketTypesIn.SpawnWeatherEntity }, - /// ... - /// - /// Call this method with your new packet palette: - /// UpdatePacketIdByItemPosition(new PacketPaletteXXXX(), "code_snippet.txt"); - /// And it will generate a Dictionary format with the Packet IDs corrected for you to copy and paste: - /// { 0x00, PacketTypesIn.SpawnEntity }, - /// { 0x01, PacketTypesIn.SpawnExperienceOrb }, - /// { 0x02, PacketTypesIn.IamNewPacket }, - /// { 0x03, PacketTypesIn.SpawnWeatherEntity }, - /// ... - /// - /// - /// - public static void UpdatePacketIdByItemPosition(PacketTypePalette palette, string outputFile) - { - // I am just too tired to create another full .cs file so... please just copy and paste - List lines = new() - { - "=== Inbound Packets ===" - }; - int i = 0; - foreach (var t in palette.GetMappingIn()) - { - lines.Add(string.Format("{{ 0x{0}, {1} }},", i.ToString("X2"), t.Value)); - i++; - } - lines.Add("=== End of Inbound ==="); - lines.Add(""); - lines.Add("=== Outbound Packets ==="); - i = 0; - foreach (var t in palette.GetMappingOut()) - { - lines.Add(string.Format("{{ 0x{0}, {1} }},", i.ToString("X2"), t.Value)); - i++; - } - lines.Add("=== End of Outbound ==="); - - File.WriteAllText(outputFile, string.Join("\r\n", lines)); - } - - /// - /// Generate a code snippet of rearranged order of packet types from a modified packet palette (usually when you have updated packet IDs) - /// - /// - /// You have changed some packet IDs: - /// { 0x00, PacketTypesIn.SpawnEntity }, - /// { 0x02, PacketTypesIn.SpawnExperienceOrb }, // ID changed from 0x02 -> 0x01 - /// { 0x01, PacketTypesIn.SpawnWeatherEntity }, // ID changed from 0x01 -> 0x02 - /// ... - /// - /// Call this method with your new packet palette: - /// UpdatePacketPositionToAscending(new PacketPaletteXXXX(), "code_snippet.txt"); - /// And it will generate a Dictionary format with the ascending order of Packet IDs for you to copy and paste: - /// { 0x00, PacketTypesIn.SpawnEntity }, - /// { 0x01, PacketTypesIn.SpawnWeatherEntity }, - /// { 0x02, PacketTypesIn.SpawnExperienceOrb }, - /// ... - /// - /// - /// - public static void UpdatePacketPositionToAscending(PacketTypePalette palette, string outputFile) - { - // I am just too tired to create another full .cs file so... please just copy and paste - List lines = new() - { - "=== Inbound Packets ===" - }; - for (int i = 0; i < palette.GetMappingIn().Count; i++) - { - lines.Add(string.Format("{{ 0x{0}, {1} }},", i.ToString("X2"), palette.GetMappingIn()[i])); - } - lines.Add("=== End of Inbound ==="); - lines.Add(""); - lines.Add("=== Outbound Packets ==="); - for (int i = 0; i < palette.GetMappingOut().Count; i++) - { - lines.Add(string.Format("{{ 0x{0}, {1} }},", i.ToString("X2"), palette.GetMappingOut()[i])); - } - lines.Add("=== End of Outbound ==="); - - File.WriteAllText(outputFile, string.Join("\r\n", lines)); - } - - /// - /// Generate PacketPaletteXXX.cs by feeding PacketTypesIn and PacketTypesOut list - /// - /// The output file name - /// The namespace to use in the generated class - /// Class name - /// List of PacketTypesIn - /// List of PacketTypesOut - /// - /// You need to make sure the order of each item are all correct for that MC version - /// Example format: - /// List pIn = new List() - /// { - /// PacketTypesIn.SpawnEntity, // packet ID of 0x00 - /// PacketTypesIn.SpawnExperienceOrb, // packet ID of 0x01 and so on - /// ... - /// } - /// - public static void GenerateIDsPacketByList(string outputFile, string namespaceToUse, string className, List pIn, List pOut) - { - const string TAB = " "; - const string TAB2 = " "; - const string TAB3 = " "; - List lines = new() - { - "using System.Collections.Generic;", - "", - "namespace " + namespaceToUse, - "{", - TAB + "public class " + className + " : PacketTypePalette", - TAB + "{", - TAB2 + "private readonly Dictionary typeIn = new()", - TAB2 + "{" - }; - for (int i = 0; i < pIn.Count; i++) - { - lines.Add(TAB3 + string.Format("{{ 0x{0}, PacketTypesIn.{1} }},", i.ToString("X2"), pIn[i])); - } - lines.Add(TAB2 + "};"); - lines.Add(""); - lines.Add(TAB2 + "private readonly Dictionary typeOut = new()"); - lines.Add(TAB2 + "{"); - for (int i = 0; i < pOut.Count; i++) - { - lines.Add(TAB3 + string.Format("{{ 0x{0}, PacketTypesOut.{1} }},", i.ToString("X2"), pOut[i])); - } - lines.Add(TAB2 + "};"); - lines.Add(""); - lines.Add(TAB2 + "protected override Dictionary GetListIn()"); - lines.Add(TAB2 + "{"); - lines.Add(TAB3 + "return typeIn;"); - lines.Add(TAB2 + "}"); - lines.Add(""); - lines.Add(TAB2 + "protected override Dictionary GetListOut()"); - lines.Add(TAB2 + "{"); - lines.Add(TAB3 + "return typeOut;"); - lines.Add(TAB2 + "}"); - lines.Add(TAB + "}"); - lines.Add("}"); - lines.Add(""); - - File.WriteAllText(outputFile, string.Join("\r\n", lines)); - } - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketTypePalette.cs b/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketTypePalette.cs deleted file mode 100644 index a3807275f4..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketPalettes/PacketTypePalette.cs +++ /dev/null @@ -1,212 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.PacketPalettes -{ - /// - /// Packet type palette - /// - /// - /// Steps for implementing palette for new Minecraft version: - /// 1. Check out https://wiki.vg/Pre-release_protocol to see if there is any packet got added/removed - /// 2. Add new packet type to PacketTypesIn.cs and PacketTypesOut.cs (if any) - /// 3. Create a new PacketPaletteXXX.cs by copying the latest version of existing PacketPaletteXXX.cs (could reduce massive works on writing a brand new one) - /// 4. Apply change to the copied PacketPaletteXXX.cs by either: - /// - Inserting new packet type to the correct position - /// - Removing packet type that got deleted - /// OR - /// - Changing the packet IDs manually - /// 5. Use PacketPaletteHelper to generate a code snippet and copy the generated code snippet back to PacketPaletteXXX.cs - /// - Use UpdatePacketPositionToAscending() if you changed the packet IDs manually - /// - Use UpdatePacketIdByItemPosition() if you inserted some packet type into the dictionary - /// Simply add the method call in Program.cs and run the program once. The code snippet will be generated - /// - /// - /// The way how Mojang change the packet ID is simple: - /// * Either adding/removing a packet from middle and cause packet ID below it get shifted - /// * Append a new packet at the end (but this is rare) - /// - public abstract class PacketTypePalette - { - protected abstract Dictionary GetListIn(); - protected abstract Dictionary GetListOut(); - protected abstract Dictionary GetConfigurationListIn(); - protected abstract Dictionary GetConfigurationListOut(); - - private readonly Dictionary reverseMappingIn = new(); - private readonly Dictionary reverseMappingOut = new(); - - private readonly Dictionary configurationReverseMappingIn = new(); - private readonly Dictionary configurationReverseMappingOut = new(); - - private bool forgeEnabled = false; - - public PacketTypePalette() - { - foreach (var p in GetListIn()) - reverseMappingIn.Add(p.Value, p.Key); - - foreach (var p in GetListOut()) - reverseMappingOut.Add(p.Value, p.Key); - - foreach (var p in GetConfigurationListIn()) - configurationReverseMappingIn.Add(p.Value, p.Key); - - foreach (var p in GetConfigurationListOut()) - configurationReverseMappingOut.Add(p.Value, p.Key); - } - - /// - /// Get incoming packet type by packet ID - /// - /// packet ID - /// Packet type - public PacketTypesIn GetIncomingTypeById(int packetId) - { - if (GetListIn().TryGetValue(packetId, out var p)) - { - return p; - } - else if (forgeEnabled) - { - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLogLine("Ignoring unknown packet ID of 0x" + packetId.ToString("X2")); - return PacketTypesIn.Unknown; - } - else - throw new KeyNotFoundException("Packet ID of 0x" + packetId.ToString("X2") + " doesn't exist!"); - } - - /// - /// Get incoming packet ID by packet type - /// - /// Packet type - /// packet ID - public int GetIncomingIdByType(PacketTypesIn packetType) => reverseMappingIn[packetType]; - - /// - /// Get incoming configuration packet type by packet ID - /// - /// packet ID - /// Packet type - public ConfigurationPacketTypesIn GetIncomingConfigurationTypeById(int packetId) - { - if (GetConfigurationListIn().TryGetValue(packetId, out var p)) - { - return p; - } - else if (forgeEnabled) - { - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLogLine("Ignoring unknown packet ID of 0x" + packetId.ToString("X2")); - return ConfigurationPacketTypesIn.Unknown; - } - else - throw new KeyNotFoundException("Configuration Packet ID of 0x" + packetId.ToString("X2") + - " doesn't exist!"); - } - - /// - /// Get incoming packet ID by packet type for configuration packets - /// - /// Packet type - /// packet ID - public int GetIncomingIdByType(ConfigurationPacketTypesIn packetType) => - configurationReverseMappingIn[packetType]; - - /// - /// Get outgoing packet type by packet ID - /// - /// Packet ID - /// Packet type - public PacketTypesOut GetOutgoingTypeById(int packetId) - { - if (GetListOut().TryGetValue(packetId, out var p)) - { - return p; - } - else if (forgeEnabled) - { - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLogLine("Ignoring unknown packet ID of 0x" + packetId.ToString("X2")); - return PacketTypesOut.Unknown; - } - else - throw new KeyNotFoundException("Packet ID of 0x" + packetId.ToString("X2") + " doesn't exist!"); - } - - /// - /// Get outgoing packet ID by packet type - /// - /// Packet type - /// Packet ID - public int GetOutgoingIdByType(PacketTypesOut packetType) => reverseMappingOut[packetType]; - - /// - /// Get outgoing configuration packet type by packet ID - /// - /// Packet ID - /// Packet type - public ConfigurationPacketTypesOut GetOutgoingConfigurationTypeById(int packetId) - { - if (GetConfigurationListOut().TryGetValue(packetId, out var p)) - { - return p; - } - else if (forgeEnabled) - { - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLogLine("Ignoring unknown packet ID of 0x" + packetId.ToString("X2")); - return ConfigurationPacketTypesOut.Unknown; - } - else - throw new KeyNotFoundException("Configuration Packet ID of 0x" + packetId.ToString("X2") + - " doesn't exist!"); - } - - /// - /// Get outgoing packet ID by packet type for configuration packets - /// - /// Packet type - /// Packet ID - public int GetOutgoingIdByTypeConfiguration(ConfigurationPacketTypesOut packetType) => - configurationReverseMappingOut[packetType]; - - /// - /// Public method for getting the type mapping - /// - /// PacketTypesIn with packet ID as index - public Dictionary GetMappingIn() => GetListIn(); - - /// - /// Public method for getting the type mapping - /// - /// PacketTypesOut with packet ID as index - public Dictionary GetMappingOut() => GetListOut(); - - /// - /// Public method for getting the type mapping for configuration packets - /// - /// PacketTypesIn with packet ID as index - public Dictionary GetMappingInConfiguration() => GetConfigurationListIn(); - - /// - /// Public method for getting the type mapping for configuration packets - /// - /// PacketTypesOut with packet ID as index - public Dictionary GetMappingOutConfiguration() => GetConfigurationListOut(); - - /// - /// Enable forge or disable forge - /// - /// - /// Have a rare chance that forge mod may modify packet ID. - /// Ignore packet type not found when forge enabled to - /// prevent program crash. - /// - /// - public void SetForgeEnabled(bool enabled) - { - forgeEnabled = enabled; - } - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/PacketType18Handler.cs b/MinecraftClient/Protocol/Handlers/PacketType18Handler.cs deleted file mode 100644 index 05443e379e..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketType18Handler.cs +++ /dev/null @@ -1,86 +0,0 @@ -using System; -using MinecraftClient.Protocol.Handlers.PacketPalettes; - -namespace MinecraftClient.Protocol.Handlers -{ - public class PacketTypeHandler - { - private readonly int protocol; - private readonly bool forgeEnabled = false; - - /// - /// Initialize the handler - /// - /// Protocol version to use - public PacketTypeHandler(int protocol) - { - this.protocol = protocol; - } - /// - /// Initialize the handler - /// - /// Protocol version to use - /// Is forge enabled or not - public PacketTypeHandler(int protocol, bool forgeEnabled) - { - this.protocol = protocol; - this.forgeEnabled = forgeEnabled; - } - /// - /// Initialize the handler - /// - public PacketTypeHandler() { } - - /// - /// Get the packet type palette - /// - /// - public PacketTypePalette GetTypeHandler() - { - return GetTypeHandler(protocol); - } - /// - /// Get the packet type palette - /// - /// Protocol version to use - /// - public PacketTypePalette GetTypeHandler(int protocol) - { - PacketTypePalette p = protocol switch - { - > Protocol18Handler.MC_26_2_Version => throw new NotImplementedException(Translations - .exception_palette_packet), - >= Protocol18Handler.MC_26_1_Version => new PacketPalette261(), // 26.1 - 26.2 (packet IDs unchanged in 26.2) - <= Protocol18Handler.MC_1_21_11_Version and > Protocol18Handler.MC_1_21_7_Version => new PacketPalette1219(), - <= Protocol18Handler.MC_1_21_7_Version and > Protocol18Handler.MC_1_21_5_Version => new PacketPalette1216(), - <= Protocol18Handler.MC_1_21_5_Version and > Protocol18Handler.MC_1_21_4_Version => new PacketPalette1215(), - <= Protocol18Handler.MC_1_21_4_Version and > Protocol18Handler.MC_1_21_2_Version => new PacketPalette1214(), - <= Protocol18Handler.MC_1_8_Version => new PacketPalette17(), - <= Protocol18Handler.MC_1_9_2_Version => new PacketPalette19(), - <= Protocol18Handler.MC_1_11_2_Version => new PacketPalette110(), - <= Protocol18Handler.MC_1_12_Version => new PacketPalette112(), - <= Protocol18Handler.MC_1_12_2_Version => new PacketPalette1122(), - < Protocol18Handler.MC_1_14_Version => new PacketPalette113(), - < Protocol18Handler.MC_1_15_Version => new PacketPalette114(), - <= Protocol18Handler.MC_1_15_2_Version => new PacketPalette115(), - <= Protocol18Handler.MC_1_16_1_Version => new PacketPalette116(), - <= Protocol18Handler.MC_1_16_5_Version => new PacketPalette1162(), - <= Protocol18Handler.MC_1_17_1_Version => new PacketPalette117(), - <= Protocol18Handler.MC_1_18_2_Version => new PacketPalette118(), - <= Protocol18Handler.MC_1_19_Version => new PacketPalette119(), - <= Protocol18Handler.MC_1_19_2_Version => new PacketPalette1192(), - <= Protocol18Handler.MC_1_19_3_Version => new PacketPalette1193(), - <= Protocol18Handler.MC_1_19_4_Version => new PacketPalette1194(), - <= Protocol18Handler.MC_1_20_Version => new PacketPalette1194(), - <= Protocol18Handler.MC_1_20_2_Version => new PacketPalette1202(), - <= Protocol18Handler.MC_1_20_4_Version => new PacketPalette1204(), - <= Protocol18Handler.MC_1_20_6_Version => new PacketPalette1206(), - <= Protocol18Handler.MC_1_21_Version => new PacketPalette121(), - _ => new PacketPalette1212() - }; - - p.SetForgeEnabled(forgeEnabled); - return p; - } - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketTypesIn.cs b/MinecraftClient/Protocol/Handlers/PacketTypesIn.cs deleted file mode 100644 index 8aee524a44..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketTypesIn.cs +++ /dev/null @@ -1,175 +0,0 @@ -namespace MinecraftClient.Protocol.Handlers -{ - /// - /// Incoming packet types - /// - public enum PacketTypesIn - { - AcknowledgePlayerDigging, // - ActionBar, // - Advancements, // - AttachEntity, // - Bundle, // Added in 1.19.4 - BlockAction, // - BlockBreakAnimation, // - BlockChange, // - BlockChangedAck, // Added in 1.19 - BlockEntityData, // - BossBar, // - Camera, // - ChangeGameState, // - ChatMessage, // - ChatPreview, // Added in 1.19 - ChatSuggestions, // Added in 1.19.1 (1.19.2) - ChunkBatchFinished, // Added in 1.20.2 - ChunkBatchStarted, // Added in 1.12.2 - ChunksBiomes, // Added in 1.19.4 - ChunkData, // - ClearTiles, // - CloseWindow, // - CollectItem, // - CombatEvent, // - CookieRequest, // Added in 1.20.6 - CraftRecipeResponse, // - CustomReportDetails, // Added in 1.21 (Not used) - DamageEvent, // Added in 1.19.4 - DeathCombatEvent, // - DebugSample, // Added in 1.20.6 - DeclareCommands, // - DeclareRecipes, // - DestroyEntities, // - Disconnect, // - DisplayScoreboard, // - Effect, // - EndCombatEvent, // - EnterCombatEvent, // - EntityAnimation, // - EntityEffect, // - EntityEquipment, // - EntityHeadLook, // - EntityMetadata, // - EntityMovement, // - EntityPosition, // - EntityPositionAndRotation, // - EntityPositionSync, // Added in 1.21.2 - EntityProperties, // - EntityRotation, // - EntitySoundEffect, // - EntityStatus, // - EntityTeleport, // - EntityVelocity, // - Explosion, // - MoveMinecartAlongTrack, // Added in 1.21.2 - FacePlayer, // - FeatureFlags, // Added in 1.19.3 - HeldItemChange, // - HideMessage, // Added in 1.19.1 (1.19.2) - HurtAnimation, // Added in 1.19.4 - InitializeWorldBorder, // - JoinGame, // - KeepAlive, // - MapChunkBulk, // For 1.8 or below - MapData, // - MessageHeader, // Added in 1.19.1 (1.19.2) - MultiBlockChange, // - NamedSoundEffect, // - NBTQueryResponse, // - OpenBook, // - OpenHorseWindow, // - OpenSignEditor, // - OpenWindow, // - Particle, // - Ping, // - PingResponse, // Added in 1.20.2 - PlayerAbilities, // - PlayerInfo, // - PlayerListHeaderAndFooter, // - PlayerRemove, // Added in 1.19.3 (Not used) - PlayerPositionAndLook, // - PlayerRotation, // Added in 1.21.2 - PluginMessage, // - ProfilelessChatMessage, // Added in 1.19.3 - ProjectilePower, // Added in 1.20.6 - RemoveEntityEffect, // - RemoveResourcePack, // Added in 1.20.3 - ResetScore, // Added in 1.20.3 - ResourcePackSend, // - Respawn, // - RecipeBookAdd, // Added in 1.21.2 (replaces UnlockRecipes) - RecipeBookRemove, // Added in 1.21.2 - RecipeBookSettings, // Added in 1.21.2 - ScoreboardObjective, // - SelectAdvancementTab, // - ServerData, // Added in 1.19 - ServerDifficulty, // - ServerLinks, // Added in 1.21 (Not used) - SetCompression, // For 1.8 or below - SetCooldown, // - SetCursorItem, // Added in 1.21.2 - SetDisplayChatPreview, // Added in 1.19 - SetExperience, // - SetHeldSlot, // Added in 1.21.2 (replaces HeldItemChange clientbound) - SetPassengers, // - SetPlayerInventory, // Added in 1.21.2 - SetSlot, // - SetTickingState, // Added in 1.20.3 - StepTick, // Added in 1.20.3 - SetTitleSubTitle, // - SetTitleText, // - SetTitleTime, // - SkulkVibrationSignal, // - SoundEffect, // - SpawnEntity, // - SpawnExperienceOrb, // - SpawnLivingEntity, // - SpawnPainting, // - SpawnPlayer, // - SpawnPosition, // - SpawnWeatherEntity, // - StartConfiguration, // Added in 1.20.2 - Statistics, // - StopSound, // - StoreCookie, // Added in 1.20.6 - SystemChat, // Added in 1.19 - TabComplete, // - Tags, // - Teams, // - TestInstanceBlockStatus, // Added in 1.21.5 - TimeUpdate, // - Title, // - TradeList, // - Transfer, // Added in 1.20.6 - Unknown, // For old version packet that have been removed and not used by mcc - UnloadChunk, // - UnlockRecipes, // - UpdateEntityNBT, // For 1.8 or below - UpdateHealth, // - UpdateLight, // - UpdateScore, // - UpdateSign, // For 1.8 or below, and 1.9-1.9.2 - UpdateSimulationDistance, // - UpdateViewDistance, // - UpdateViewPosition, // - UseBed, // For 1.13.2 or below - VehicleMove, // - WindowConfirmation, // - WindowItems, // - WindowProperty, // - WorldBorder, // - WorldBorderCenter, // - WorldBorderLerpSize, // - WorldBorderSize, // - WorldBorderWarningDelay, // - WorldBorderWarningReach, // - Waypoint, // Added in 1.21.6 - ClearDialog, // Added in 1.21.6 - ShowDialog, // Added in 1.21.6 - DebugBlockValue, // Added in 1.21.9 - DebugChunkValue, // Added in 1.21.9 - DebugEntityValue, // Added in 1.21.9 - DebugEvent, // Added in 1.21.9 - GameTestHighlightPos, // Added in 1.21.9 - GameRuleValues, // Added in 26.1 - LowDiskSpaceWarning, // Added in 26.1 - } -} diff --git a/MinecraftClient/Protocol/Handlers/PacketTypesOut.cs b/MinecraftClient/Protocol/Handlers/PacketTypesOut.cs deleted file mode 100644 index 99704ae86b..0000000000 --- a/MinecraftClient/Protocol/Handlers/PacketTypesOut.cs +++ /dev/null @@ -1,84 +0,0 @@ -namespace MinecraftClient.Protocol.Handlers -{ - /// - /// Outgoing packet types - /// - public enum PacketTypesOut - { - AcknowledgeConfiguration, // Added in 1.20.2 - AdvancementTab, // - Animation, // - BundleItemSelected, // Added in 1.21.2 - ChangeContainerSlotState, // Added in 1.20.3 - ChatCommand, // Added in 1.19 - ChatMessage, // - ChatPreview, // Added in 1.19 - ChunkBatchReceived, // Added in 1.20.2 - ClickWindow, // - ClickWindowButton, // - ClientSettings, // - ClientStatus, // - ClientTickEnd, // Added in 1.21.2 - CloseWindow, // - CraftRecipeRequest, // - CreativeInventoryAction, // - CookieResponse, // Added in 1.20.6 - DebugSampleSubscription, // Added in 1.20.6 - EditBook, // - EnchantItem, // For 1.13.2 or below - EntityAction, // - EntityNBTRequest, // - GenerateStructure, // Added in 1.16 - HeldItemChange, // - InteractEntity, // - KeepAlive, // - KnownDataPacks, // Added in 1.20.6 - LockDifficulty, // - MessageAcknowledgment, // Added in 1.19.1 (1.19.2) - NameItem, // - PickItem, // - PickItemFromEntity, // Added in 1.21.4 (split from PickItem) - PingRequest, // Added in 1.20.2 - PlayerAbilities, // - PlayerBlockPlacement, // - PlayerDigging, // - PlayerLoaded, // Added in 1.21.4 - PlayerMovement, // - PlayerPosition, // - PlayerPositionAndRotation, // - PlayerRotation, // - PlayerSession, // Added in 1.19.3 - PluginMessage, // - Pong, // - PrepareCraftingGrid, // For 1.12 - 1.12.1 only - QueryBlockNBT, // - RecipeBookData, // - ResourcePackStatus, // - SelectTrade, // - SetBeaconEffect, // - SetDifficulty, // - SetDisplayedRecipe, // Added in 1.16.2 - SetRecipeBookState, // Added in 1.16.2 - SignedChatCommand, // Added in 1.20.6 - Spectate, // - SteerBoat, // - SteerVehicle, // - TabComplete, // - TeleportConfirm, // - Unknown, // For old version packet that have been removed and not used by mcc - UpdateCommandBlock, // - UpdateCommandBlockMinecart, // - UpdateJigsawBlock, // - UpdateSign, // - UpdateStructureBlock, // - SetTestBlock, // Added in 1.21.5 - TestInstanceBlockAction, // Added in 1.21.5 - UseItem, // - VehicleMove, // - WindowConfirmation, // - ChangeGameMode, // Added in 1.21.6 - CustomClickAction, // Added in 1.21.6 - Attack, // Added in 26.1 - SetGameRule, // Added in 26.1 - } -} diff --git a/MinecraftClient/Protocol/Handlers/Protocol16.cs b/MinecraftClient/Protocol/Handlers/Protocol16.cs deleted file mode 100644 index f7bd3d4aac..0000000000 --- a/MinecraftClient/Protocol/Handlers/Protocol16.cs +++ /dev/null @@ -1,970 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Globalization; -using System.Linq; -using System.Net.Sockets; -using System.Security.Cryptography; -using System.Text; -using System.Threading; -using MinecraftClient.Crypto; -using MinecraftClient.Inventory; -using MinecraftClient.Mapping; -using MinecraftClient.Protocol.Message; -using MinecraftClient.Protocol.ProfileKey; -using MinecraftClient.Protocol.Session; -using MinecraftClient.Proxy; -using MinecraftClient.Scripting; -using static MinecraftClient.Settings; -using static MinecraftClient.Settings.MainConfigHelper.MainConfig.GeneralConfig; - -namespace MinecraftClient.Protocol.Handlers -{ - /// - /// Implementation for Minecraft 1.4.X, 1.5.X, 1.6.X Protocols - /// - - class Protocol16Handler : IMinecraftCom - { - readonly IMinecraftComHandler handler; - private bool encrypted = false; - private readonly int protocolversion; - private Tuple? netRead = null; - Crypto.AesCfb8Stream? s; - readonly TcpClient c; - - public Protocol16Handler(TcpClient Client, int ProtocolVersion, IMinecraftComHandler Handler) - { - ConsoleIO.SetAutoCompleteEngine(this); - if (protocolversion >= 72) - ChatParser.InitTranslations(); - c = Client; - protocolversion = ProtocolVersion; - handler = Handler; - - if (Handler.GetTerrainEnabled()) - { - ConsoleIO.WriteLineFormatted("§c" + Translations.extra_terrainandmovement_disabled, acceptnewlines: true); - Handler.SetTerrainEnabled(false); - } - - if (handler.GetInventoryEnabled()) - { - ConsoleIO.WriteLineFormatted("§c" + Translations.extra_inventory_disabled, acceptnewlines: true); - handler.SetInventoryEnabled(false); - } - - if (handler.GetEntityHandlingEnabled()) - { - ConsoleIO.WriteLineFormatted("§c" + Translations.extra_entity_disabled, acceptnewlines: true); - handler.SetEntityHandlingEnabled(false); - } - } - -#pragma warning disable CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. - // "IMinecraftComHandler handler" will not be used here. - private Protocol16Handler(TcpClient Client) -#pragma warning restore CS8618 // Non-nullable field must contain a non-null value when exiting constructor. Consider declaring as nullable. - { - c = Client; - } - - private void Updater(object? o) - { - var cancelToken = (CancellationToken)o!; - - if (cancelToken.IsCancellationRequested) - return; - - try - { - Stopwatch stopWatch = Stopwatch.StartNew(); - long nextUpdateDue = 0; - - while (!cancelToken.IsCancellationRequested) - { - cancelToken.ThrowIfCancellationRequested(); - - long elapsedMilliseconds = stopWatch.ElapsedMilliseconds; - while (elapsedMilliseconds >= nextUpdateDue) - { - if (!Update()) - return; - - nextUpdateDue += ClientTickIntervalMilliseconds; - elapsedMilliseconds = stopWatch.ElapsedMilliseconds; - } - - long sleepLength = nextUpdateDue - stopWatch.ElapsedMilliseconds; - if (sleepLength > 1) - Thread.Sleep((int)Math.Min(sleepLength, ClientTickIntervalMilliseconds)); - } - } - catch (System.IO.IOException) { } - catch (SocketException) { } - catch (ObjectDisposedException) { } - catch (OperationCanceledException) { } - - if (cancelToken.IsCancellationRequested) - return; - - handler.OnConnectionLost(ChatBot.DisconnectReason.ConnectionLost, ""); - } - - private bool Update() - { - handler.OnUpdate(); - bool connection_ok = true; - while (c.Client.Available > 0 && connection_ok) - { - byte id = ReadNextByte(); - connection_ok = ProcessPacket(id); - } - return connection_ok; - } - - private bool ProcessPacket(byte id) - { - int nbr; - switch (id) - { - case 0x00: - byte[] keepalive = new byte[5] { 0, 0, 0, 0, 0 }; - Receive(keepalive, 1, 4, SocketFlags.None); - handler.OnServerKeepAlive(); - handler.SetCanSendMessage(true); - Send(keepalive); break; - case 0x01: ReadData(4); ReadNextString(); ReadData(5); break; - case 0x02: ReadData(1); ReadNextString(); ReadNextString(); ReadData(4); break; - case 0x03: - string message = ReadNextString(); - handler.OnTextReceived(new ChatMessage(message, null, protocolversion >= 72, -1, Guid.Empty)); break; - case 0x04: ReadData(16); break; - case 0x05: ReadData(6); ReadNextItemSlot(); break; - case 0x06: ReadData(12); break; - case 0x07: ReadData(9); break; - case 0x08: if (protocolversion >= 72) { ReadData(10); } else ReadData(8); break; - case 0x09: ReadData(8); ReadNextString(); break; - case 0x0A: ReadData(1); break; - case 0x0B: ReadData(33); break; - case 0x0C: ReadData(9); break; - case 0x0D: ReadData(41); break; - case 0x0E: ReadData(11); break; - case 0x0F: ReadData(10); ReadNextItemSlot(); ReadData(3); break; - case 0x10: ReadData(2); break; - case 0x11: ReadData(14); break; - case 0x12: ReadData(5); break; - case 0x13: if (protocolversion >= 72) { ReadData(9); } else ReadData(5); break; - case 0x14: ReadData(4); ReadNextString(); ReadData(16); ReadNextEntityMetaData(); break; - case 0x16: ReadData(8); break; - case 0x17: ReadData(19); ReadNextObjectData(); break; - case 0x18: ReadData(26); ReadNextEntityMetaData(); break; - case 0x19: ReadData(4); ReadNextString(); ReadData(16); break; - case 0x1A: ReadData(18); break; - case 0x1B: if (protocolversion >= 72) { ReadData(10); } break; - case 0x1C: ReadData(10); break; - case 0x1D: nbr = (int)ReadNextByte(); ReadData(nbr * 4); break; - case 0x1E: ReadData(4); break; - case 0x1F: ReadData(7); break; - case 0x20: ReadData(6); break; - case 0x21: ReadData(9); break; - case 0x22: ReadData(18); break; - case 0x23: ReadData(5); break; - case 0x26: ReadData(5); break; - case 0x27: if (protocolversion >= 72) { ReadData(9); } else ReadData(8); break; - case 0x28: ReadData(4); ReadNextEntityMetaData(); break; - case 0x29: ReadData(8); break; - case 0x2A: ReadData(5); break; - case 0x2B: ReadData(8); break; - case 0x2C: if (protocolversion >= 72) { ReadNextEntityProperties(protocolversion); } break; - case 0x33: ReadData(13); nbr = ReadNextInt(); ReadData(nbr); break; - case 0x34: ReadData(10); nbr = ReadNextInt(); ReadData(nbr); break; - case 0x35: ReadData(12); break; - case 0x36: ReadData(14); break; - case 0x37: ReadData(17); break; - case 0x38: ReadNextChunkBulkData(); break; - case 0x3C: ReadData(28); nbr = ReadNextInt(); ReadData(3 * nbr); ReadData(12); break; - case 0x3D: ReadData(18); break; - case 0x3E: ReadNextString(); ReadData(17); break; - case 0x3F: if (protocolversion > 51) { ReadNextString(); ReadData(32); } break; - case 0x46: ReadData(2); break; - case 0x47: ReadData(17); break; - case 0x64: ReadNextWindowData(protocolversion); break; - case 0x65: ReadData(1); break; - case 0x66: ReadData(7); ReadNextItemSlot(); break; - case 0x67: ReadData(3); ReadNextItemSlot(); break; - case 0x68: ReadData(1); for (nbr = ReadNextShort(); nbr > 0; nbr--) { ReadNextItemSlot(); } break; - case 0x69: ReadData(5); break; - case 0x6A: ReadData(4); break; - case 0x6B: ReadData(2); ReadNextItemSlot(); break; - case 0x6C: ReadData(2); break; - case 0x82: ReadData(10); ReadNextString(); ReadNextString(); ReadNextString(); ReadNextString(); break; - case 0x83: ReadData(4); nbr = ReadNextShort(); ReadData(nbr); break; - case 0x84: ReadData(11); nbr = ReadNextShort(); if (nbr > 0) { ReadData(nbr); } break; - case 0x85: if (protocolversion >= 74) { ReadData(13); } break; - case 0xC8: - if (ReadNextInt() == 2022) { ConsoleIO.WriteLogLine(Translations.mcc_player_dead, acceptnewlines: true); } - if (protocolversion >= 72) { ReadData(4); } else ReadData(1); - break; - case 0xC9: - string name = ReadNextString(); bool online = ReadNextByte() != 0x00; ReadData(2); - Guid FakeUUID = new(MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(name)).Take(16).ToArray()); - if (online) handler.OnPlayerJoin(new PlayerInfo(name, FakeUUID)); - else handler.OnPlayerLeave(FakeUUID); - break; - case 0xCA: if (protocolversion >= 72) { ReadData(9); } else ReadData(3); break; - case 0xCB: - string resultString = ReadNextString(); - if (!string.IsNullOrEmpty(resultString)) - { - string[] result = resultString.Split((char)0x00); - handler.OnAutoCompleteDone(0, result); - } - break; - case 0xCC: ReadNextString(); ReadData(4); break; - case 0xCD: ReadData(1); break; - case 0xCE: if (protocolversion > 51) { ReadNextString(); ReadNextString(); ReadData(1); } break; - case 0xCF: if (protocolversion > 51) { ReadNextString(); ReadData(1); ReadNextString(); } ReadData(4); break; - case 0xD0: if (protocolversion > 51) { ReadData(1); ReadNextString(); } break; - case 0xD1: if (protocolversion > 51) { ReadNextTeamData(); } break; - case 0xFA: - string channel = ReadNextString(); - byte[] payload = ReadNextByteArray(); - handler.OnPluginChannelMessage(channel, payload); - break; - case 0xFF: - string reason = ReadNextString(); - handler.OnConnectionLost(ChatBot.DisconnectReason.InGameKick, reason); break; - default: return false; //unknown packet! - } - return true; //packet has been successfully skipped - } - - private void StartUpdating() - { - netRead = new(new Thread(new ParameterizedThreadStart(Updater)), new CancellationTokenSource()); - netRead.Item1.Name = "ProtocolPacketHandler"; - netRead.Item1.Start(netRead.Item2.Token); - } - - /// - /// Get net read thread (main thread) ID - /// - /// Net read thread ID - public int GetNetMainThreadId() - { - return netRead is not null ? netRead.Item1.ManagedThreadId : -1; - } - - public bool SendCookieResponse(string name, byte[]? data) - { - throw new NotImplementedException(); - } - - public bool SendKnownDataPacks(List<(string, string, string)> knownDataPacks) - { - throw new NotImplementedException(); - } - - public bool SendCustomClickAction(string id, Dictionary? payload) - { - return false; - } - - public void Dispose() - { - try - { - if (netRead is not null) - { - netRead.Item2.Cancel(); - c.Close(); - } - } - catch { } - } - - private void ReadData(int offset) - { - if (offset > 0) - { - try - { - byte[] cache = new byte[offset]; - Receive(cache, 0, offset, SocketFlags.None); - } - catch (OutOfMemoryException) { } - } - } - - private string ReadNextString() - { - ushort length = (ushort)ReadNextShort(); - if (length > 0) - { - byte[] cache = new byte[length * 2]; - Receive(cache, 0, length * 2, SocketFlags.None); - string result = Encoding.BigEndianUnicode.GetString(cache); - return result; - } - else return ""; - } - public bool SendEntityAction(int PlayerEntityID, int ActionID) - { - return false; - } - - private byte[] ReadNextByteArray() - { - short len = ReadNextShort(); - byte[] data = new byte[len]; - Receive(data, 0, len, SocketFlags.None); - return data; - } - - private short ReadNextShort() - { - byte[] tmp = new byte[2]; - Receive(tmp, 0, 2, SocketFlags.None); - Array.Reverse(tmp); - return BitConverter.ToInt16(tmp, 0); - } - - private int ReadNextInt() - { - byte[] tmp = new byte[4]; - Receive(tmp, 0, 4, SocketFlags.None); - Array.Reverse(tmp); - return BitConverter.ToInt32(tmp, 0); - } - - private byte ReadNextByte() - { - byte[] result = new byte[1]; - Receive(result, 0, 1, SocketFlags.None); - return result[0]; - } - - private void ReadNextItemSlot() - { - short itemid = ReadNextShort(); - //If slot not empty (item ID != -1) - if (itemid != -1) - { - ReadData(1); //Item count - ReadData(2); //Item damage - short length = ReadNextShort(); - //If length of optional NBT data > 0, read it - if (length > 0) { ReadData(length); } - } - } - - private void ReadNextEntityMetaData() - { - do - { - byte[] id = new byte[1]; - Receive(id, 0, 1, SocketFlags.None); - if (id[0] == 0x7F) { break; } - int index = id[0] & 0x1F; - int type = id[0] >> 5; - switch (type) - { - case 0: ReadData(1); break; //Byte - case 1: ReadData(2); break; //Short - case 2: ReadData(4); break; //Int - case 3: ReadData(4); break; //Float - case 4: ReadNextString(); break; //String - case 5: ReadNextItemSlot(); break; //Slot - case 6: ReadData(12); break; //Vector (3 Int) - } - } while (true); - } - - private void ReadNextObjectData() - { - int id = ReadNextInt(); - if (id != 0) { ReadData(6); } - } - - private void ReadNextTeamData() - { - ReadNextString(); //Internal Name - byte mode = ReadNextByte(); - - if (mode == 0 || mode == 2) - { - ReadNextString(); //Display Name - ReadNextString(); //Prefix - ReadNextString(); //Suffix - ReadData(1); //Friendly Fire - } - - if (mode == 0 || mode == 3 || mode == 4) - { - short count = ReadNextShort(); - for (int i = 0; i < count; i++) - { - ReadNextString(); //Players - } - } - } - - private void ReadNextEntityProperties(int protocolversion) - { - if (protocolversion >= 72) - { - if (protocolversion >= 74) - { - //Minecraft 1.6.2 - ReadNextInt(); //Entity ID - int count = ReadNextInt(); - for (int i = 0; i < count; i++) - { - ReadNextString(); //Property name - ReadData(8); //Property value (Double) - short othercount = ReadNextShort(); - ReadData(25 * othercount); - } - } - else - { - //Minecraft 1.6.0 / 1.6.1 - ReadNextInt(); //Entity ID - int count = ReadNextInt(); - for (int i = 0; i < count; i++) - { - ReadNextString(); //Property name - ReadData(8); //Property value (Double) - } - } - } - } - - private void ReadNextWindowData(int protocolversion) - { - ReadData(1); - byte windowtype = ReadNextByte(); - ReadNextString(); - ReadData(1); - if (protocolversion > 51) - { - ReadData(1); - if (protocolversion >= 72 && windowtype == 0xb) - { - ReadNextInt(); - } - } - } - - private void ReadNextChunkBulkData() - { - short chunkcount = ReadNextShort(); - int datalen = ReadNextInt(); - ReadData(1); - ReadData(datalen); - ReadData(12 * (chunkcount)); - } - - private void Receive(byte[] buffer, int start, int offset, SocketFlags f) - { - int read = 0; - while (read < offset) - { - if (encrypted) - read += s!.Read(buffer, start + read, offset - read); - else - read += c.Client.Receive(buffer, start + read, offset - read, f); - } - } - - private void Send(byte[] buffer) - { - if (encrypted) - s!.Write(buffer, 0, buffer.Length); - else - c.Client.Send(buffer); - } - - private bool Handshake(string uuid, string username, string sessionID, string host, int port, SessionToken session) - { - //array - byte[] data = new byte[10 + (username.Length + host.Length) * 2]; - - //packet id - data[0] = (byte)2; - - //Protocol Version - data[1] = (byte)protocolversion; - - //short len - byte[] sh = BitConverter.GetBytes((short)username.Length); - Array.Reverse(sh); - sh.CopyTo(data, 2); - - //username - byte[] bname = Encoding.BigEndianUnicode.GetBytes(username); - bname.CopyTo(data, 4); - - //short len - sh = BitConverter.GetBytes((short)host.Length); - Array.Reverse(sh); - sh.CopyTo(data, 4 + (username.Length * 2)); - - //host - byte[] bhost = Encoding.BigEndianUnicode.GetBytes(host); - bhost.CopyTo(data, 6 + (username.Length * 2)); - - //port - sh = BitConverter.GetBytes(port); - Array.Reverse(sh); - sh.CopyTo(data, 6 + (username.Length * 2) + (host.Length * 2)); - - Send(data); - - byte[] pid = new byte[1]; - Receive(pid, 0, 1, SocketFlags.None); - while (pid[0] == 0xFA) //Skip some early plugin messages - { - ProcessPacket(pid[0]); - Receive(pid, 0, 1, SocketFlags.None); - } - if (pid[0] == 0xFD) - { - string serverID = ReadNextString(); - byte[] PublicServerkey = ReadNextByteArray(); - byte[] token = ReadNextByteArray(); - - if (serverID == "-") - ConsoleIO.WriteLineFormatted("§8" + Translations.mcc_server_offline, acceptnewlines: true); - else if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.mcc_handshake, serverID)); - - return StartEncryption(uuid, username, sessionID, Config.Main.General.AccountType, token, serverID, PublicServerkey, session); - } - else - { - ConsoleIO.WriteLineFormatted("§8" + Translations.error_invalid_response, acceptnewlines: true); - return false; - } - } - - private bool StartEncryption(string uuid, string username, string sessionID, LoginType type, byte[] token, string serverIDhash, byte[] serverPublicKey, SessionToken session) - { - RSACryptoServiceProvider RSAService = CryptoHandler.DecodeRSAPublicKey(serverPublicKey)!; - byte[] secretKey = CryptoHandler.ClientAESPrivateKey ?? CryptoHandler.GenerateAESPrivateKey(); - - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8" + Translations.debug_crypto, acceptnewlines: true); - - if (serverIDhash != "-" && !string.IsNullOrWhiteSpace(sessionID)) - { - ConsoleIO.WriteLine(Translations.mcc_session); - string serverHash = CryptoHandler.GetServerHash(serverIDhash, serverPublicKey, secretKey); - - bool needCheckSession = true; - if (session.ServerPublicKey is not null && session.SessionPreCheckTask is not null - && serverIDhash == session.ServerIDhash && Enumerable.SequenceEqual(serverPublicKey, session.ServerPublicKey)) - { - session.SessionPreCheckTask.Wait(); - if (session.SessionPreCheckTask.Result) // PreCheck Successed - needCheckSession = false; - } - - if (needCheckSession) - { - if (ProtocolHandler.SessionCheck(uuid, sessionID, serverHash, type)) - { - session.ServerIDhash = serverIDhash; - session.ServerPublicKey = serverPublicKey; - SessionCache.Store(InternalConfig.Account.Login.ToLower(), session); - } - else - { - handler.OnConnectionLost(ChatBot.DisconnectReason.LoginRejected, Translations.mcc_session_fail); - return false; - } - } - } - - - //Encrypt the data - byte[] key_enc = RSAService.Encrypt(secretKey, false); - byte[] token_enc = RSAService.Encrypt(token, false); - byte[] keylen = BitConverter.GetBytes((short)key_enc.Length); - byte[] tokenlen = BitConverter.GetBytes((short)token_enc.Length); - - Array.Reverse(keylen); - Array.Reverse(tokenlen); - - //Building the packet - byte[] data = new byte[5 + (short)key_enc.Length + (short)token_enc.Length]; - data[0] = 0xFC; - keylen.CopyTo(data, 1); - key_enc.CopyTo(data, 3); - tokenlen.CopyTo(data, 3 + (short)key_enc.Length); - token_enc.CopyTo(data, 5 + (short)key_enc.Length); - - //Send it back - Send(data); - - //Getting the next packet - byte[] pid = new byte[1]; - Receive(pid, 0, 1, SocketFlags.None); - if (pid[0] == 0xFC) - { - ReadData(4); - s = new AesCfb8Stream(c.GetStream(), secretKey); - encrypted = true; - return true; - } - else - { - ConsoleIO.WriteLineFormatted("§8" + Translations.error_invalid_encrypt, acceptnewlines: true); - return false; - } - } - - public bool Login(PlayerKeyPair? playerKeyPair, SessionToken session, bool isTransfer = false) - { - if (Handshake(handler.GetUserUuidStr(), handler.GetUsername(), handler.GetSessionID(), handler.GetServerHost(), handler.GetServerPort(), session)) - { - Send(new byte[] { 0xCD, 0 }); - try - { - byte[] pid = new byte[1]; - try - { - if (c.Connected) - { - Receive(pid, 0, 1, SocketFlags.None); - while (pid[0] >= 0xC0 && pid[0] != 0xFF) //Skip some early packets or plugin messages - { - ProcessPacket(pid[0]); - Receive(pid, 0, 1, SocketFlags.None); - } - if (pid[0] == (byte)1) - { - ReadData(4); ReadNextString(); ReadData(5); - StartUpdating(); - return true; //The Server accepted the request - } - else if (pid[0] == (byte)0xFF) - { - string reason = ReadNextString(); - handler.OnConnectionLost(ChatBot.DisconnectReason.LoginRejected, reason); - return false; - } - } - } - catch (Exception e) - { - //Connection failed - ConsoleIO.WriteLineFormatted("§8" + e.GetType().Name + ": " + e.Message); - return false; - } - } - catch - { - handler.OnConnectionLost(ChatBot.DisconnectReason.ConnectionLost, ""); - return false; - } - return false; //Login was unsuccessful (received a kick...) - } - else return false; - } - - public void Disconnect() - { - const string message = "disconnect.quitting"; - - try - { - byte[] reason = new byte[3 + (message.Length * 2)]; - reason[0] = (byte)0xff; - - byte[] msglen; - msglen = BitConverter.GetBytes((short)message.Length); - Array.Reverse(msglen); - msglen.CopyTo(reason, 1); - - if (message.Length > 0) - { - byte[] msg; - msg = Encoding.BigEndianUnicode.GetBytes(message); - msg.CopyTo(reason, 3); - } - - Send(reason); - } - catch (SocketException) { } - catch (System.IO.IOException) { } - } - - public int GetMaxChatMessageLength() - { - int configOverride = Settings.MainConfigHelper.Config.Advanced.MaxChatMessageLength; - return configOverride > 0 ? configOverride : 100; - } - - public int GetProtocolVersion() - { - return protocolversion; - } - - public bool SendChatMessage(string message, PlayerKeyPair? playerKeyPair) - { - if (String.IsNullOrEmpty(message)) - return true; - - try - { - byte[] chat = new byte[3 + (message.Length * 2)]; - chat[0] = (byte)3; - - byte[] msglen; - msglen = BitConverter.GetBytes((short)message.Length); - Array.Reverse(msglen); - msglen.CopyTo(chat, 1); - - byte[] msg; - msg = Encoding.BigEndianUnicode.GetBytes(message); - msg.CopyTo(chat, 3); - - Send(chat); - return true; - } - catch (SocketException) { return false; } - catch (System.IO.IOException) { return false; } - } - - public bool SendRespawnPacket() - { - try - { - Send(new byte[] { 0xCD, 1 }); - return true; - } - catch (SocketException) { return false; } - } - - public bool SendUpdateSign(Location location, string line1, string line2, string line3, string line4, bool isFrontText = true) - { - return false; //Currently not implemented - } - - public bool SendBrandInfo(string brandInfo) - { - return false; //Only supported since MC 1.7 - } - - public bool SendClientSettings(string language, byte viewDistance, byte difficulty, byte chatMode, bool chatColors, byte skinParts, byte mainHand) - { - return false; //Currently not implemented - } - - public bool SendLocationUpdate(Location location, bool onGround, bool horizontalCollision, float? yaw, float? pitch) - { - return false; //Currently not implemented - } - - public bool SendInteractEntity(int EntityID, int type) - { - return false; //Currently not implemented - } - - public bool SendInteractEntity(int EntityID, int type, float X, float Y, float Z, int hand) - { - return false; //Currently not implemented - } - - public bool SendInteractEntity(int EntityID, int type, float X, float Y, float Z) - { - return false; //Currently not implemented - } - - public bool SendInteractEntity(int EntityID, int type, int hand) - { - return false; //Currently not implemented - } - - public bool UpdateCommandBlock(Location location, string command, CommandBlockMode mode, CommandBlockFlags flags) - { - return false; //Currently not implemented - } - - public bool SendUseItem(int hand, int sequenceId) - { - return false; //Currently not implemented - } - - public bool SendWindowAction(int windowId, int slotId, WindowActionType action, Item? item, List> changedSlots, int stateId) - { - return false; //Currently not implemented - } - - public bool SendAnimation(int animation, int playerid) - { - return false; //Currently not implemented - } - - public bool SendCreativeInventoryAction(int slot, ItemType item, int count, Dictionary? nbt) - { - return false; //Currently not implemented - } - - public bool ClickContainerButton(int windowId, int buttonId) - { - return false; //Currently not implemented - } - - public bool SendPlaceRecipe(int windowId, string recipeId, bool makeAll) - { - return false; //MC 1.8-1.12.1 recipe book not supported - } - - public bool SendEditBook(Item currentBook, IReadOnlyList pages, string? title, string author, int selectedHotbarSlot) - { - return false; //MC 1.4.6-1.6.4 book editing is not supported - } - - public bool SendCloseWindow(int windowId) - { - return false; //Currently not implemented - } - - public bool SendPlayerBlockPlacement(int hand, Location location, Direction face, int sequenceId) - { - return false; //Currently not implemented - } - - public bool SendHeldItemChange(short slot) - { - return false; //Currently not implemented - } - - public bool SendPlayerDigging(int status, Location location, Direction face, int sequenceId) - { - return false; //Currently not implemented - } - - /// - /// Send a plugin channel packet to the server. - /// - /// Channel to send packet on - /// packet Data - public bool SendPluginChannelPacket(string channel, byte[] data) - { - try - { - byte[] channelLength = BitConverter.GetBytes((short)channel.Length); - Array.Reverse(channelLength); - - byte[] channelData = Encoding.BigEndianUnicode.GetBytes(channel); - - byte[] dataLength = BitConverter.GetBytes((short)data.Length); - Array.Reverse(dataLength); - - Send(ConcatBytes(new byte[] { 0xFA }, channelLength, channelData, dataLength, data)); - - return true; - } - catch (SocketException) { return false; } - catch (System.IO.IOException) { return false; } - } - - int IAutoComplete.AutoComplete(string BehindCursor) - { - if (String.IsNullOrEmpty(BehindCursor)) - return -1; - - byte[] autocomplete = new byte[3 + (BehindCursor.Length * 2)]; - autocomplete[0] = 0xCB; - byte[] msglen = BitConverter.GetBytes((short)BehindCursor.Length); - Array.Reverse(msglen); - msglen.CopyTo(autocomplete, 1); - byte[] msg = Encoding.BigEndianUnicode.GetBytes(BehindCursor); - msg.CopyTo(autocomplete, 3); - ConsoleIO.AutoCompleteDone = false; - Send(autocomplete); - return 0; - } - - private static byte[] ConcatBytes(params byte[][] bytes) - { - List result = new(); - foreach (byte[] array in bytes) - result.AddRange(array); - return result.ToArray(); - } - - public static bool DoPing(string host, int port, ref int protocolversion) - { - try - { - string version = ""; - TcpClient tcp = ProxyHandler.NewTcpClient(host, port); - tcp.ReceiveTimeout = 30000; // 30 seconds - tcp.ReceiveTimeout = 5000; //MC 1.7.2+ SpigotMC servers won't respond, so we need a reasonable timeout. - byte[] ping = new byte[2] { 0xfe, 0x01 }; - tcp.Client.Send(ping, SocketFlags.None); - tcp.Client.Receive(ping, 0, 1, SocketFlags.None); - - if (ping[0] == 0xff) - { - Protocol16Handler ComTmp = new(tcp); - string result = ComTmp.ReadNextString(); - - if (Settings.Config.Logging.DebugMessages) - { - // May contain formatting codes, cannot use WriteLineFormatted - Console.ForegroundColor = ConsoleColor.DarkGray; - ConsoleIO.WriteLine(result); - Console.ForegroundColor = ConsoleColor.Gray; - } - - if (result.Length > 2 && result[0] == '§' && result[1] == '1') - { - string[] tmp = result.Split((char)0x00); - protocolversion = (byte)Int16.Parse(tmp[1], NumberStyles.Any, CultureInfo.CurrentCulture); - version = tmp[2]; - - if (protocolversion == 127) //MC 1.7.2+ - return false; - } - else - { - protocolversion = (byte)39; - version = "B1.8.1 - 1.3.2"; - } - - ConsoleIO.WriteLineFormatted(string.Format(Translations.mcc_use_version, version, protocolversion)); - - return true; - } - else return false; - } - catch { return false; } - } - - public bool SelectTrade(int selectedSlot) - { - return false; //MC 1.13+ - } - - public bool SendSpectate(Guid UUID) - { - return false; //Currently not implemented - } - - public bool SendRenameItem(string itemName) - { - return false; - } - - public bool SendPlayerSession(PlayerKeyPair? playerKeyPair) - { - return false; - } - } -} diff --git a/MinecraftClient/Protocol/Handlers/Protocol18.cs b/MinecraftClient/Protocol/Handlers/Protocol18.cs deleted file mode 100644 index e0508513b7..0000000000 --- a/MinecraftClient/Protocol/Handlers/Protocol18.cs +++ /dev/null @@ -1,6787 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Collections.Generic; -using System.Diagnostics; -using System.Globalization; -using System.Linq; -using System.Net.Sockets; -using System.Security.Cryptography; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using MinecraftClient.Crypto; -using MinecraftClient.Dialogs; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Logger; -using MinecraftClient.Mapping; -using MinecraftClient.Mapping.BlockPalettes; -using MinecraftClient.Mapping.EntityPalettes; -using MinecraftClient.Protocol.Handlers.Forge; -using MinecraftClient.Protocol.Handlers.packet.s2c; -using MinecraftClient.Protocol.Handlers.PacketPalettes; -using MinecraftClient.Protocol.Dialogs; -using MinecraftClient.Protocol.Message; -using MinecraftClient.Protocol.ProfileKey; -using MinecraftClient.Protocol.Session; -using MinecraftClient.Proxy; -using MinecraftClient.Scripting; -using Sentry; -using static MinecraftClient.Settings; -using static MinecraftClient.Settings.MainConfigHelper.MainConfig.GeneralConfig; - -namespace MinecraftClient.Protocol.Handlers -{ - /// - /// Implementation for Minecraft 1.8.X+ Protocols - /// - /// - /// Typical update steps for implementing protocol changes for a new Minecraft version: - /// - Perform a diff between latest supported version in MCC and new stable version to support on https://wiki.vg/Protocol - /// - If there are any changes in packets implemented by MCC, add MCXXXVersion field below and implement new packet layouts - /// - Add the packet type palette for that Minecraft version. Please see PacketTypePalette.cs for more information - /// - Also see Material.cs and ItemType.cs for updating block and item data inside MCC - /// - class Protocol18Handler : IMinecraftCom - { - internal const int MC_1_8_Version = 47; - internal const int MC_1_9_Version = 107; - internal const int MC_1_9_1_Version = 108; - internal const int MC_1_9_2_Version = 109; - internal const int MC_1_10_Version = 210; - internal const int MC_1_11_Version = 315; - internal const int MC_1_11_2_Version = 316; - internal const int MC_1_12_Version = 335; - internal const int MC_1_12_2_Version = 340; - internal const int MC_1_13_Version = 393; - internal const int MC_1_13_2_Version = 404; - internal const int MC_1_14_Version = 477; - internal const int MC_1_15_Version = 573; - internal const int MC_1_15_2_Version = 578; - internal const int MC_1_16_Version = 735; - internal const int MC_1_16_1_Version = 736; - internal const int MC_1_16_2_Version = 751; - internal const int MC_1_16_3_Version = 753; - internal const int MC_1_16_5_Version = 754; - internal const int MC_1_17_Version = 755; - internal const int MC_1_17_1_Version = 756; - internal const int MC_1_18_1_Version = 757; - internal const int MC_1_18_2_Version = 758; - internal const int MC_1_19_Version = 759; - internal const int MC_1_19_2_Version = 760; - internal const int MC_1_19_3_Version = 761; - internal const int MC_1_19_4_Version = 762; - internal const int MC_1_20_Version = 763; - internal const int MC_1_20_2_Version = 764; - internal const int MC_1_20_4_Version = 765; - internal const int MC_1_20_6_Version = 766; - internal const int MC_1_21_Version = 767; - internal const int MC_1_21_2_Version = 768; - internal const int MC_1_21_4_Version = 769; - internal const int MC_1_21_5_Version = 770; - internal const int MC_1_21_6_Version = 771; - internal const int MC_1_21_7_Version = 772; - internal const int MC_1_21_9_Version = 773; - internal const int MC_1_21_11_Version = 774; - internal const int MC_26_1_Version = 775; - internal const int MC_26_2_Version = 776; - - private int compression_treshold = -1; - private int autocomplete_transaction_id = 0; - private readonly Dictionary window_actions = new(); - private CurrentState currentState = CurrentState.Login; - private readonly int protocolVersion; - private readonly int rawProtocolVersion; - private int currentDimension; - private bool isOnlineMode = false; - private readonly BlockingCollection>> packetQueue = new(); - private readonly Dictionary legacyAchievementProgress = new(StringComparer.Ordinal); - private float LastYaw, LastPitch; - private double lastSentX, lastSentY, lastSentZ; - private float lastSentYaw, lastSentPitch; - private bool lastSentOnGround; - private bool lastSentHorizontalCollision; - private int positionReminder; - private long chunkBatchStartTime; - private double aggregatedNanosPerChunk = 2000000.0; - private int oldSamplesWeight = 1; - - private bool receiveDeclareCommands = false, receivePlayerInfo = false; - private readonly Lock MessageSigningLock = new(); - private Guid chatUuid = Guid.NewGuid(); - private int pendingAcknowledgments = 0, messageIndex = 0; - private LastSeenMessagesCollector lastSeenMessagesCollector; - private LastSeenMessageList.AcknowledgedMessage? lastReceivedMessage = null; - readonly Protocol18Forge pForge; - readonly Protocol18Terrain pTerrain; - readonly IMinecraftComHandler handler; - readonly EntityPalette entityPalette; - readonly EntityMetadataPalette entityMetadataPalette; - readonly ItemPalette itemPalette; - readonly PacketTypePalette packetPalette; - readonly SocketWrapper socketWrapper; - readonly DataTypes dataTypes; - readonly DialogNbtParser dialogNbtParser = new(); - Tuple? netMain = null; // main thread - Tuple? netReader = null; // reader thread - readonly ILogger log; - readonly RandomNumberGenerator randomGen; - private bool legacyAchievementsInitialized; - - public Protocol18Handler(TcpClient Client, int protocolVersion, IMinecraftComHandler handler, - ForgeInfo? forgeInfo, int rawProtocolVersion = 0) - { - ConsoleIO.SetAutoCompleteEngine(this); - ChatParser.InitTranslations(); - socketWrapper = new SocketWrapper(Client); - dataTypes = new DataTypes(protocolVersion); - this.protocolVersion = protocolVersion; - this.rawProtocolVersion = rawProtocolVersion != 0 ? rawProtocolVersion : protocolVersion; - this.handler = handler; - pForge = new Protocol18Forge(forgeInfo, protocolVersion, dataTypes, this, handler); - pTerrain = new Protocol18Terrain(protocolVersion, dataTypes, handler); - packetPalette = new PacketTypeHandler(protocolVersion, forgeInfo is not null).GetTypeHandler(); - log = handler.GetLogger(); - randomGen = RandomNumberGenerator.Create(); - lastSeenMessagesCollector = protocolVersion >= MC_1_19_3_Version ? new(20) : new(5); - chunkBatchStartTime = GetNanos(); - - if (handler.GetTerrainEnabled() && protocolVersion > MC_26_2_Version) - { - log.Error($"§c{Translations.extra_terrainandmovement_disabled}"); - handler.SetTerrainEnabled(false); - } - - if (handler.GetInventoryEnabled() && - protocolVersion is < MC_1_8_Version or > MC_26_2_Version) - { - log.Error($"§c{Translations.extra_inventory_disabled}"); - handler.SetInventoryEnabled(false); - } - - if (handler.GetEntityHandlingEnabled() && - protocolVersion is < MC_1_8_Version or > MC_26_2_Version) - { - log.Error($"§c{Translations.extra_entity_disabled}"); - handler.SetEntityHandlingEnabled(false); - } - - Block.Palette = protocolVersion switch - { - // Block palette - > MC_26_2_Version when handler.GetTerrainEnabled() => - throw new NotImplementedException(Translations.exception_palette_block), - >= MC_26_2_Version => new Palette262(), - >= MC_26_1_Version => new Palette261(), - >= MC_1_21_9_Version => new Palette1219(), - >= MC_1_21_6_Version => new Palette1216(), // 1.21.7/1.21.8 blocks unchanged, reuse 1216 - >= MC_1_21_5_Version => new Palette1215(), - >= MC_1_21_4_Version => new Palette1214(), - >= MC_1_21_2_Version => new Palette1212(), - >= MC_1_20_6_Version => new Palette1206(), - >= MC_1_20_4_Version => new Palette1204(), - >= MC_1_20_Version => new Palette120(), - MC_1_19_4_Version => new Palette1194(), - MC_1_19_3_Version => new Palette1193(), - >= MC_1_19_Version => new Palette119(), - >= MC_1_17_Version => new Palette117(), - >= MC_1_16_Version => new Palette116(), - >= MC_1_15_Version => new Palette115(), - >= MC_1_14_Version => new Palette114(), - >= MC_1_13_Version => new Palette113(), - _ => new Palette112() - }; - - entityPalette = protocolVersion switch - { - // Entity palette - > MC_26_2_Version when handler.GetEntityHandlingEnabled() => - throw new NotImplementedException(Translations.exception_palette_entity), - >= MC_26_2_Version => new EntityPalette262(), - >= MC_26_1_Version => new EntityPalette261(), - >= MC_1_21_11_Version => new EntityPalette12111(), - >= MC_1_21_9_Version => new EntityPalette1219(), - >= MC_1_21_6_Version => new EntityPalette1216(), // 1.21.7/1.21.8 entities unchanged, reuse 1216 - >= MC_1_21_5_Version => new EntityPalette1215(), - >= MC_1_21_4_Version => new EntityPalette1214(), - >= MC_1_21_2_Version => new EntityPalette1212(), - >= MC_1_20_6_Version => new EntityPalette1206(), - >= MC_1_20_4_Version => new EntityPalette1204(), - >= MC_1_20_Version => new EntityPalette120(), - MC_1_19_4_Version => new EntityPalette1194(), - MC_1_19_3_Version => new EntityPalette1193(), - >= MC_1_19_Version => new EntityPalette119(), - >= MC_1_17_Version => new EntityPalette117(), - >= MC_1_16_2_Version => new EntityPalette1162(), - >= MC_1_16_Version => new EntityPalette1161(), - >= MC_1_15_Version => new EntityPalette115(), - >= MC_1_14_Version => new EntityPalette114(), - >= MC_1_13_Version => new EntityPalette113(), - >= MC_1_12_Version => new EntityPalette112(), - >= MC_1_11_Version => new EntityPalette112(), - _ => new EntityPalette18() - }; - - entityMetadataPalette = EntityMetadataPalette.GetPalette(protocolVersion); - - itemPalette = protocolVersion switch - { - // Item palette - > MC_26_2_Version when handler.GetInventoryEnabled() => - throw new NotImplementedException(Translations.exception_palette_item), - >= MC_26_2_Version => new ItemPalette262(), - >= MC_26_1_Version => new ItemPalette261(), - >= MC_1_21_11_Version => new ItemPalette12111(), - >= MC_1_21_9_Version => new ItemPalette1219(), - >= MC_1_21_7_Version => new ItemPalette1217(), - >= MC_1_21_6_Version => new ItemPalette1216(), - >= MC_1_21_5_Version => new ItemPalette1215(), - >= MC_1_21_4_Version => new ItemPalette1214(), - >= MC_1_21_2_Version => new ItemPalette1212(), - >= MC_1_21_Version => new ItemPalette121(), - >= MC_1_20_6_Version => new ItemPalette1206(), - >= MC_1_20_4_Version => new ItemPalette1204(), - >= MC_1_20_Version => new ItemPalette120(), - MC_1_19_4_Version => new ItemPalette1194(), - MC_1_19_3_Version => new ItemPalette1193(), - >= MC_1_19_Version => new ItemPalette119(), - >= MC_1_18_1_Version => new ItemPalette118(), - >= MC_1_17_Version => new ItemPalette117(), - >= MC_1_16_2_Version => new ItemPalette1162(), - >= MC_1_16_1_Version => new ItemPalette1161(), - >= MC_1_15_Version => new ItemPalette115(), - >= MC_1_14_Version => new ItemPalette114(), - >= MC_1_13_2_Version => new ItemPalette1132(), - >= MC_1_13_Version => new ItemPalette113(), - >= MC_1_12_Version => new ItemPalette112(), - >= MC_1_11_Version => new ItemPalette111(), - >= MC_1_10_Version => new ItemPalette110(), - >= MC_1_9_Version => new ItemPalette19(), - _ => new ItemPalette18() - }; - - ChatParser.ChatId2Type = this.protocolVersion switch - { - // MessageType - // You can find it in https://wiki.vg/Protocol#Player_Chat_Message or /net/minecraft/network/message/MessageType.java - >= MC_1_19_2_Version => new() - { - { 0, ChatParser.MessageType.CHAT }, - { 1, ChatParser.MessageType.SAY_COMMAND }, - { 2, ChatParser.MessageType.MSG_COMMAND_INCOMING }, - { 3, ChatParser.MessageType.MSG_COMMAND_OUTGOING }, - { 4, ChatParser.MessageType.TEAM_MSG_COMMAND_INCOMING }, - { 5, ChatParser.MessageType.TEAM_MSG_COMMAND_OUTGOING }, - { 6, ChatParser.MessageType.EMOTE_COMMAND }, - }, - MC_1_19_Version => new() - { - { 0, ChatParser.MessageType.CHAT }, - { 1, ChatParser.MessageType.RAW_MSG }, - { 2, ChatParser.MessageType.RAW_MSG }, - { 3, ChatParser.MessageType.SAY_COMMAND }, - { 4, ChatParser.MessageType.MSG_COMMAND_INCOMING }, - { 5, ChatParser.MessageType.TEAM_MSG_COMMAND_INCOMING }, - { 6, ChatParser.MessageType.EMOTE_COMMAND }, - { 7, ChatParser.MessageType.RAW_MSG }, - }, - _ => ChatParser.ChatId2Type - }; - ChatParser.ClearChatTypeDecorations(); - } - - /// - /// Separate thread. Network reading loop. - /// - private void Updater(object? o) - { - var cancelToken = (CancellationToken)o!; - var exitReason = Translations.debug_packet_loop_reason_queue_completed; - - if (cancelToken.IsCancellationRequested) - return; - - try - { - Stopwatch stopWatch = Stopwatch.StartNew(); - long nextUpdateDue = 0; - // Continue until the reader has finished and every queued packet has been handled. - // A server can close immediately after a Disconnect packet, completing the queue - // while that final packet is still waiting to be processed. - while (!packetQueue.IsCompleted) - { - cancelToken.ThrowIfCancellationRequested(); - - long elapsedMilliseconds = stopWatch.ElapsedMilliseconds; - while (elapsedMilliseconds >= nextUpdateDue) - { - handler.OnUpdate(); - nextUpdateDue += ClientTickIntervalMilliseconds; - elapsedMilliseconds = stopWatch.ElapsedMilliseconds; - } - - if (packetQueue.TryTake(out var packetInfo, 1)) - { - var (packetId, packetData) = packetInfo; - HandlePacket(packetId, packetData); - continue; - } - - long sleepLength = nextUpdateDue - stopWatch.ElapsedMilliseconds; - if (sleepLength > 1) - Thread.Sleep((int)Math.Min(sleepLength, ClientTickIntervalMilliseconds)); - } - } - catch (ObjectDisposedException) - { - exitReason = nameof(ObjectDisposedException); - } - catch (OperationCanceledException) - { - exitReason = nameof(OperationCanceledException); - } - catch (NullReferenceException) - { - exitReason = nameof(NullReferenceException); - } - catch (SocketException) - { - exitReason = nameof(SocketException); - } - catch (System.IO.IOException) - { - exitReason = nameof(System.IO.IOException); - } - - if (cancelToken.IsCancellationRequested) - return; - - LogNetworkLoopExit(nameof(Updater), exitReason); - handler.OnConnectionLost(ChatBot.DisconnectReason.ConnectionLost, ""); - } - - /// - /// Read and decompress packets. - /// - internal void PacketReader(object? o) - { - var cancelToken = (CancellationToken)o!; - var exitReason = Translations.debug_packet_loop_reason_socket_closed; - while (socketWrapper.IsConnected() && !cancelToken.IsCancellationRequested) - { - try - { - while (socketWrapper.HasDataAvailable()) - { - var packet = ReadNextPacket(); - if (packet.Item1 == -1) - continue; - packetQueue.Add(packet, cancelToken); - - if (cancelToken.IsCancellationRequested) - break; - } - } - catch (OperationCanceledException) - { - exitReason = nameof(OperationCanceledException); - break; - } - catch (System.IO.IOException) - { - exitReason = nameof(System.IO.IOException); - break; - } - catch (SocketException) - { - exitReason = nameof(SocketException); - break; - } - catch (NullReferenceException) - { - exitReason = nameof(NullReferenceException); - break; - } - catch (System.IO.InvalidDataException) - { - exitReason = nameof(System.IO.InvalidDataException); - break; - } - - if (cancelToken.IsCancellationRequested) - { - exitReason = Translations.debug_packet_loop_reason_cancelled; - break; - } - - Thread.Sleep(10); - } - - if (cancelToken.IsCancellationRequested) - exitReason = Translations.debug_packet_loop_reason_cancelled; - - LogNetworkLoopExit(nameof(PacketReader), exitReason); - packetQueue.CompleteAdding(); - } - - /// - /// Read the next packet from the network - /// - /// will contain packet ID - /// will contain raw packet Data - internal Tuple> ReadNextPacket() - { - var size = dataTypes.ReadNextVarIntRAW(socketWrapper); //Packet size - var rawBytes = socketWrapper.ReadDataRAW(size); - Queue packetData = new(rawBytes); //Packet contents - var compressed = false; - var sizeUncompressed = 0; - - //Handle packet decompression - if (protocolVersion >= MC_1_8_Version - && compression_treshold >= 0) - { - sizeUncompressed = dataTypes.ReadNextVarInt(packetData); - if (sizeUncompressed != 0) // != 0 means compressed, let's decompress - { - var toDecompress = packetData.ToArray(); - var uncompressed = ZlibUtils.Decompress(toDecompress, sizeUncompressed); - packetData = new Queue(uncompressed); - compressed = true; - } - } - - if (packetData.Count == 0) - { - var rawHex = rawBytes.Length > 0 ? BitConverter.ToString(rawBytes).Replace("-", " ") : "(empty)"; - log.Debug("Empty packet after decompress: size={0}, sizeUncompressed={1}, protocol={2}, state={3}, rawBytes=[{4}]", size, sizeUncompressed, protocolVersion, currentState, rawHex); - return new(-1, packetData); - } - - var packetId = dataTypes.ReadNextVarInt(packetData); // Packet ID - LogIncomingPacket(packetId, packetData.Count, size, compressed, sizeUncompressed); - if (handler.GetNetworkPacketCaptureEnabled()) - handler.OnNetworkPacket(packetId, packetData.ToList(), currentState == CurrentState.Login, true); - - return new(packetId, packetData); - } - - /// - /// Handle the given packet - /// - /// Packet ID - /// Packet contents - /// TRUE if the packet was processed, FALSE if ignored or unknown - internal bool HandlePacket(int packetId, Queue packetData) - { - // This copy is necessary because by the time we get to the catch block, - // the packetData queue will have been processed and the data will be lost - var _copy = packetData.ToArray(); - - try - { - switch (currentState) - { - // https://wiki.vg/Protocol#Login - case CurrentState.Login: - switch (packetId) - { - // Set Compression - case 0x03: - if (protocolVersion >= MC_1_8_Version) - compression_treshold = dataTypes.ReadNextVarInt(packetData); - break; - - // Login Plugin Request - case 0x04: - var messageId = dataTypes.ReadNextVarInt(packetData); - var channel = dataTypes.ReadNextString(packetData); - List responseData = new(); - var understood = pForge.HandleLoginPluginRequest(channel, packetData, ref responseData); - SendLoginPluginResponse(messageId, understood, responseData.ToArray()); - break; - - // Cookie Request - case 0x05: - var cookieName = dataTypes.ReadNextString(packetData); - var cookieData = null as byte[]; - McClient.Instance?.GetCookie(cookieName, out cookieData); - SendCookieResponse(cookieName, cookieData); - break; - - // Ignore other packets at this stage - default: - return true; - } - - break; - - // https://wiki.vg/Protocol#Configuration - case CurrentState.Configuration: - if (!packetPalette.GetMappingInConfiguration().TryGetValue(packetId, out var configurationPacketType)) - { - if (packetPalette.GetMappingIn().ContainsKey(packetId)) - { - SetCurrentState(CurrentState.Play); - return HandlePlayPackets(packetId, packetData); - } - - throw new KeyNotFoundException("Configuration Packet ID of 0x" + packetId.ToString("X2") + - " doesn't exist!"); - } - - switch (configurationPacketType) - { - case ConfigurationPacketTypesIn.CookieRequest: - var cookieName = dataTypes.ReadNextString(packetData); - var cookieData = null as byte[]; - McClient.Instance?.GetCookie(cookieName, out cookieData); - SendCookieResponse(cookieName, cookieData); - break; - - case ConfigurationPacketTypesIn.Disconnect: - handler.OnConnectionLost(ChatBot.DisconnectReason.InGameKick, - dataTypes.ReadNextChat(packetData)); - return false; - - case ConfigurationPacketTypesIn.FinishConfiguration: - SetCurrentState(CurrentState.Play); - SendPacket(ConfigurationPacketTypesOut.FinishConfiguration, new List()); - break; - - case ConfigurationPacketTypesIn.KeepAlive: - SendPacket(ConfigurationPacketTypesOut.KeepAlive, packetData); - break; - - case ConfigurationPacketTypesIn.Ping: - SendPacket(ConfigurationPacketTypesOut.Pong, packetData); - break; - - case ConfigurationPacketTypesIn.RegistryData: - if (protocolVersion < MC_1_20_6_Version) - { - var registryCodec = dataTypes.ReadNextNbt(packetData); - ChatParser.ReadChatType(registryCodec); - - if (handler.GetTerrainEnabled()) - World.StoreDimensionList(registryCodec); - } - else - { - var registryId = dataTypes.ReadNextString(packetData); - var entryCount = dataTypes.ReadNextVarInt(packetData); - - var isChat = registryId == "minecraft:chat_type"; - var isDimension = registryId == "minecraft:dimension_type"; - var isAttribute = registryId == "minecraft:attribute"; - var isEnchantment = registryId == "minecraft:enchantment"; - var isDialog = registryId == "minecraft:dialog"; - - var dimensionIdMap = isDimension ? new Dictionary() : null; - var attributeIdMap = isAttribute ? new Dictionary() : null; - var enchantmentIdMap = isEnchantment ? new Dictionary() : null; - - for (var i = 0; i < entryCount; i++) - { - var entryId = dataTypes.ReadNextString(packetData); - var hasData = dataTypes.ReadNextBool(packetData); - - Dictionary? nbtData = null; - if (hasData) - nbtData = dataTypes.ReadNextNbt(packetData); - - if (isChat) - ChatParser.ReadChatType(i, entryId, nbtData); - else if (isDimension) - { - dimensionIdMap!.Add(i, entryId); - if (nbtData is not null && handler.GetTerrainEnabled()) - World.StoreOneDimension(entryId, nbtData); - } - else if (isAttribute) - { - var attrName = entryId.StartsWith("minecraft:") - ? entryId.Substring("minecraft:".Length) - : entryId; - attributeIdMap!.Add(i, attrName); - } - else if (isEnchantment) - enchantmentIdMap!.Add(i, entryId); - else if (isDialog && nbtData is not null) - handler.OnDialogRegistryData(i, entryId, dialogNbtParser.Parse(nbtData)); - } - - if (isDimension) - { - World.SetDimensionIdMap(dimensionIdMap!); - if (!handler.GetTerrainEnabled() || !World.HasAnyDimension()) - World.LoadDefaultDimensions1206Plus(); - } - else if (isAttribute) - World.SetAttributeIdMap(attributeIdMap!); - else if (isEnchantment) - EnchantmentMapping.SetDynamicEnchantmentIdMap(enchantmentIdMap!); - } - - break; - - case ConfigurationPacketTypesIn.RemoveResourcePack: - if (dataTypes.ReadNextBool(packetData)) // Has UUID - ChatParser.RemoveResourcePackTranslations(dataTypes.ReadNextUUID(packetData).ToString("D")); // UUID - else - ChatParser.ClearResourcePackTranslations(); - break; - - case ConfigurationPacketTypesIn.ResourcePack: - HandleResourcePackPacket(packetData); - break; - - case ConfigurationPacketTypesIn.StoreCookie: - var name = dataTypes.ReadNextString(packetData); - var data = dataTypes.ReadNextByteArray(packetData); - McClient.Instance?.SetCookie(name, data); - break; - - case ConfigurationPacketTypesIn.Transfer: - var host = dataTypes.ReadNextString(packetData); - var port = dataTypes.ReadNextVarInt(packetData); - - McClient.Instance?.Transfer(host, port); - break; - - case ConfigurationPacketTypesIn.KnownDataPacks: - var knownPacksCount = dataTypes.ReadNextVarInt(packetData); - List<(string, string, string)> knownDataPacks = new(); - - for (var i = 0; i < knownPacksCount; i++) - { - var nameSpace = dataTypes.ReadNextString(packetData); - var id = dataTypes.ReadNextString(packetData); - var version = dataTypes.ReadNextString(packetData); - knownDataPacks.Add((nameSpace, id, version)); - } - - var vanillaPacks = knownDataPacks - .Where(p => p.Item1 == "minecraft") - .ToList(); - SendKnownDataPacks(vanillaPacks); - break; - - case ConfigurationPacketTypesIn.CustomReportDetails: - var cfgDetailsCount = dataTypes.ReadNextVarInt(packetData); - for (var i = 0; i < cfgDetailsCount; i++) - { - dataTypes.ReadNextString(packetData); // Title - dataTypes.ReadNextString(packetData); // Description - } - break; - - case ConfigurationPacketTypesIn.CodeOfConduct: - dataTypes.ReadNextString(packetData); // Code of conduct text - SendPacket(ConfigurationPacketTypesOut.AcceptCodeOfConduct, new List()); - break; - - case ConfigurationPacketTypesIn.ServerLinks: - handler.OnServerLinksUpdated(ReadServerLinks(packetData)); - break; - - case ConfigurationPacketTypesIn.ClearDialog: - handler.OnDialogCleared(); - break; - - case ConfigurationPacketTypesIn.ShowDialog: - HandleShowDialog(packetData, DialogPhase.Configuration); - break; - - // Ignore other packets at this stage - default: - return true; - } - - break; - - // https://wiki.vg/Protocol#Play - case CurrentState.Play: - return HandlePlayPackets(packetId, packetData); - - default: - return true; - } - } - catch (Exception innerException) - { - if (innerException is ThreadAbortException || innerException is SocketException || - innerException.InnerException is SocketException) - throw; //Thread abort or Connection lost rather than invalid data - - var exception = new System.IO.InvalidDataException( - string.Format(Translations.exception_packet_process, - packetPalette.GetIncomingTypeById(packetId), - packetId, - protocolVersion, - currentState == CurrentState.Login, - innerException.GetType()), - innerException); - - SentrySdk.AddBreadcrumb(new Breadcrumb("S -> C Packet", "network", new Dictionary() - { - { "Packet ID", packetId.ToString() }, - { "Packet Type ", packetPalette.GetIncomingTypeById(packetId).ToString() }, - { "Protocol Version", protocolVersion.ToString() }, - { "Minecraft Version", ProtocolHandler.ProtocolVersion2MCVer(protocolVersion) }, - { "Current State", currentState.ToString() }, - { "Packet Data", string.Join(" ", _copy.Select(b => b.ToString("X2"))) }, - { "Inner Exception", innerException.GetType().ToString() } - }, "packet", BreadcrumbLevel.Error)); - - SentrySdk.CaptureException(exception); - - throw exception; - } - - return true; - } - - public void HandleResourcePackPacket(Queue packetData) - { - var uuid = Guid.Empty; - - if (protocolVersion >= MC_1_20_4_Version) - uuid = dataTypes.ReadNextUUID(packetData); - - var url = dataTypes.ReadNextString(packetData); - var hash = dataTypes.ReadNextString(packetData); - // Use the server-provided UUID when available, then fall back to the legacy SHA-1 hash, - // and finally the URL so pre-UUID resource packs can still be replaced or cleared locally. - string packIdentifier; - if (uuid != Guid.Empty) - packIdentifier = uuid.ToString("D"); - else if (hash.Length == 40) - packIdentifier = hash; - else - packIdentifier = url; - - if (protocolVersion >= MC_1_17_Version) - { - dataTypes.ReadNextBool(packetData); // Forced - if (dataTypes.ReadNextBool(packetData)) // Has Prompt Message - dataTypes.ReadNextChat(packetData); // Prompt Message - } - - // Some server plugins may send invalid resource packs to probe the client and we need to ignore them (issue #1056) - if (!url.StartsWith("http") && - hash.Length != 40) // Some server may have null hash value - return; - - //Send back "accepted" and "successfully loaded" responses for plugins or server config making use of resource pack mandatory - var responseHeader = - protocolVersion < MC_1_10_Version // After 1.10, the MC does not include resource pack hash in responses - ? dataTypes.ConcatBytes(DataTypes.GetVarInt(hash.Length), Encoding.UTF8.GetBytes(hash)) - : []; - - var basePacketData = protocolVersion >= MC_1_20_4_Version && uuid != Guid.Empty - ? dataTypes.ConcatBytes(responseHeader, DataTypes.GetUUID(uuid)) - : responseHeader; - - var acceptedResourcePackData = dataTypes.ConcatBytes(basePacketData, DataTypes.GetVarInt(3)); - var loadedResourcePackData = dataTypes.ConcatBytes(basePacketData, DataTypes.GetVarInt(0)); - - if (currentState == CurrentState.Configuration) - { - SendPacket(ConfigurationPacketTypesOut.ResourcePackResponse, acceptedResourcePackData); // Accepted - SendPacket(ConfigurationPacketTypesOut.ResourcePackResponse, - loadedResourcePackData); // Successfully loaded - } - else - { - SendPacket(PacketTypesOut.ResourcePackStatus, acceptedResourcePackData); // Accepted - SendPacket(PacketTypesOut.ResourcePackStatus, loadedResourcePackData); // Successfully loaded - } - - ChatParser.LoadResourcePackTranslations(packIdentifier, url, hash); - } - - private bool HandlePlayPackets(int packetId, Queue packetData) - { - switch (packetPalette.GetIncomingTypeById(packetId)) - { - case PacketTypesIn.KeepAlive: // Keep Alive (Play) - SendPacket(PacketTypesOut.KeepAlive, packetData); - handler.OnServerKeepAlive(); - break; - - case PacketTypesIn.Ping: - SendPacket(PacketTypesOut.Pong, packetData); - break; - - case PacketTypesIn.JoinGame: - // Temporary fix - log.PacketDebug("Receive JoinGame"); - - receiveDeclareCommands = receivePlayerInfo = false; - - messageIndex = 0; - pendingAcknowledgments = 0; - - lastReceivedMessage = null; - lastSeenMessagesCollector = protocolVersion >= MC_1_19_3_Version ? new(20) : new(5); - - handler.OnGameJoined(isOnlineMode); - - var playerEntityId = dataTypes.ReadNextInt(packetData); - handler.OnReceivePlayerEntityID(playerEntityId); - - if (protocolVersion >= MC_1_16_2_Version) - dataTypes.ReadNextBool(packetData); // Is hardcore - 1.16.2 and above - - if (protocolVersion < MC_1_20_2_Version) - handler.OnGamemodeUpdate(Guid.Empty, dataTypes.ReadNextByte(packetData)); - - if (protocolVersion >= MC_1_16_Version) - { - if (protocolVersion < MC_1_20_2_Version) - dataTypes.ReadNextByte(packetData); // Previous Gamemode - 1.16 - 1.20.2 - - var worldCount = - dataTypes.ReadNextVarInt( - packetData); // Dimension Count (World Count) - 1.16 and above - for (var i = 0; i < worldCount; i++) - dataTypes.ReadNextString( - packetData); // Dimension Names (World Names) - 1.16 and above - - if (protocolVersion < MC_1_20_2_Version) - { - var registryCodec = - dataTypes.ReadNextNbt( - packetData); // Registry Codec (Dimension Codec) - 1.16 - 1.20.1 - if (protocolVersion >= MC_1_19_Version) - ChatParser.ReadChatType(registryCodec); - if (handler.GetTerrainEnabled()) - World.StoreDimensionList(registryCodec); - } - } - - if (protocolVersion < MC_1_20_2_Version) - { - // Current dimension - // String: 1.19 and above - // NBT Tag Compound: [1.16.2 to 1.18.2] - // String identifier: 1.16 and 1.16.1 - // varInt: [1.9.1 to 1.15.2] - // byte: below 1.9.1 - string? dimensionTypeName = null; - Dictionary? dimensionType = null; - switch (protocolVersion) - { - case >= MC_1_16_Version: - { - switch (protocolVersion) - { - case >= MC_1_19_Version: - dimensionTypeName = - dataTypes.ReadNextString(packetData); // Dimension Type: Identifier - break; - case >= MC_1_16_2_Version: - dimensionType = - dataTypes.ReadNextNbt( - packetData); // Dimension Type: NBT Tag Compound - break; - default: - dimensionTypeName = dataTypes.ReadNextString(packetData); - break; - } - - currentDimension = 0; - break; - } - case >= MC_1_9_1_Version: - currentDimension = dataTypes.ReadNextInt(packetData); - break; - default: - currentDimension = (sbyte)dataTypes.ReadNextByte(packetData); - break; - } - - switch (protocolVersion) - { - case < MC_1_14_Version: - dataTypes.ReadNextByte(packetData); // Difficulty - 1.13 and below - break; - case >= MC_1_16_Version: - { - var dimensionName = - dataTypes.ReadNextString( - packetData); // Dimension Name (World Name) - 1.16 and above - - if (handler.GetTerrainEnabled()) - { - switch (protocolVersion) - { - case >= MC_1_16_2_Version and <= MC_1_18_2_Version: - World.StoreOneDimension(dimensionName, dimensionType!); - World.SetDimension(dimensionName); - break; - default: - World.SetDimension(dimensionTypeName!); - break; - } - } - - break; - } - } - } - - if (protocolVersion is >= MC_1_15_Version and < MC_1_20_2_Version) - dataTypes.ReadNextLong(packetData); // Hashed world seed - 1.15 - 1.20.2 - if (protocolVersion >= MC_1_16_2_Version) - dataTypes.ReadNextVarInt(packetData); // Max Players - 1.16.2 and above - else - dataTypes.ReadNextByte(packetData); // Max Players - 1.16.1 and below - if (protocolVersion < MC_1_16_Version) - dataTypes.SkipNextString(packetData); // Level Type - 1.15 and below - if (protocolVersion >= MC_1_14_Version) - dataTypes.ReadNextVarInt(packetData); // View distance - 1.14 and above - if (protocolVersion >= MC_1_18_1_Version) - dataTypes.ReadNextVarInt(packetData); // Simulation Distance - 1.18 and above - if (protocolVersion >= MC_1_8_Version) - dataTypes.ReadNextBool(packetData); // Reduced debug info - 1.8 and above - if (protocolVersion >= MC_1_15_Version) - dataTypes.ReadNextBool(packetData); // Enable respawn screen - 1.15 and above - - if (protocolVersion < MC_1_20_2_Version) - { - if (protocolVersion >= MC_1_16_Version) - { - dataTypes.ReadNextBool(packetData); // Is Debug - 1.16 and 1.20.2 - dataTypes.ReadNextBool(packetData); // Is Flat - 1.16 and 1.20.2 - } - - if (protocolVersion >= MC_1_19_Version) - { - if (dataTypes.ReadNextBool(packetData)) // Has death location - { - dataTypes.SkipNextString(packetData); // Death dimension name: Identifier - dataTypes.ReadNextLocation(packetData); // Death location - } - } - - if (protocolVersion >= MC_1_20_Version) - dataTypes.ReadNextVarInt(packetData); // Portal Cooldown - 1.20 and above - } - else - { - dataTypes.ReadNextBool(packetData); // Do limited crafting - - var dimensionTypeName = protocolVersion < MC_1_20_6_Version - ? dataTypes.ReadNextString(packetData) - : World.GetDimensionNameById(dataTypes.ReadNextVarInt(packetData)); - - dataTypes.ReadNextString(packetData); // Dimension Name (World Name) - 1.16 and above - - if (handler.GetTerrainEnabled()) - World.SetDimension(dimensionTypeName); - - dataTypes.ReadNextLong(packetData); // Hashed world seed - handler.OnGamemodeUpdate(Guid.Empty, dataTypes.ReadNextByte(packetData)); - dataTypes.ReadNextByte(packetData); // Previous Gamemode - dataTypes.ReadNextBool(packetData); // Is Debug - dataTypes.ReadNextBool(packetData); // Is Flat - var hasDeathLocation = dataTypes.ReadNextBool(packetData); // Has death location - if (hasDeathLocation) - { - dataTypes.SkipNextString(packetData); // Death dimension name: Identifier - dataTypes.ReadNextLocation(packetData); // Death location - } - - dataTypes.ReadNextVarInt(packetData); // Portal Cooldown - - if (protocolVersion >= MC_1_20_6_Version) - dataTypes.ReadNextBool(packetData); // Enforoces Secure Chat - } - - if (protocolVersion >= MC_1_21_4_Version) - SendPacket(PacketTypesOut.PlayerLoaded, new List()); - - break; - case PacketTypesIn.SpawnPainting: // Just skip, no need for this - return true; - case PacketTypesIn.DeclareCommands: - if (protocolVersion >= MC_1_19_Version) - { - log.PacketDebug("Receive DeclareCommands"); - DeclareCommands.Read(dataTypes, packetData, protocolVersion); - receiveDeclareCommands = true; - if (receivePlayerInfo) - handler.SetCanSendMessage(true); - } - - break; - case PacketTypesIn.ChatMessage: - var messageType = 0; - - if (protocolVersion <= MC_1_18_2_Version) // 1.18 and bellow - { - var message = dataTypes.ReadNextString(packetData); - - Guid senderUuid; - if (protocolVersion >= MC_1_8_Version) - { - //Hide system messages or xp bar messages? - messageType = dataTypes.ReadNextByte(packetData); - if (messageType == 1 && !Config.Main.Advanced.ShowSystemMessages - || messageType == 2 && !Config.Main.Advanced.ShowSystemMessages) - break; - - senderUuid = protocolVersion >= MC_1_16_5_Version - ? dataTypes.ReadNextUUID(packetData) - : Guid.Empty; - } - else - senderUuid = Guid.Empty; - - handler.OnTextReceived(new(message, null, true, messageType, senderUuid)); - } - else if (protocolVersion == MC_1_19_Version) // 1.19 - { - var signedChat = dataTypes.ReadNextString(packetData); - var hasUnsignedChatContent = dataTypes.ReadNextBool(packetData); - var unsignedChatContent = hasUnsignedChatContent ? dataTypes.ReadNextString(packetData) : null; - - messageType = dataTypes.ReadNextVarInt(packetData); - if (messageType == 1 && !Config.Main.Advanced.ShowSystemMessages - || messageType == 2 && !Config.Main.Advanced.ShowXPBarMessages) - break; - - var senderUuid = dataTypes.ReadNextUUID(packetData); - var senderDisplayName = ChatParser.ParseText(dataTypes.ReadNextString(packetData)); - var hasSenderTeamName = dataTypes.ReadNextBool(packetData); - var senderTeamName = hasSenderTeamName - ? ChatParser.ParseText(dataTypes.ReadNextString(packetData)) - : null; - - var timestamp = dataTypes.ReadNextLong(packetData); - var salt = dataTypes.ReadNextLong(packetData); - var messageSignature = dataTypes.ReadNextByteArray(packetData); - - bool verifyResult; - if (!isOnlineMode) - verifyResult = false; - else if (senderUuid == handler.GetUserUuid()) - verifyResult = true; - else - { - var player = handler.GetPlayerInfo(senderUuid); - verifyResult = player is not null && player.VerifyMessage(signedChat, timestamp, salt, - ref messageSignature); - } - - ChatMessage chat = new(signedChat, true, messageType, senderUuid, unsignedChatContent, - senderDisplayName, senderTeamName, timestamp, messageSignature, verifyResult); - handler.OnTextReceived(chat); - } - else if (protocolVersion == MC_1_19_2_Version) - { - // 1.19.1 - 1.19.2 - var precedingSignature = dataTypes.ReadNextBool(packetData) - ? dataTypes.ReadNextByteArray(packetData) - : null; - var senderUuid = dataTypes.ReadNextUUID(packetData); - var headerSignature = dataTypes.ReadNextByteArray(packetData); - var signedChat = dataTypes.ReadNextString(packetData); - var decorated = dataTypes.ReadNextBool(packetData) - ? dataTypes.ReadNextString(packetData) - : null; - - var timestamp = dataTypes.ReadNextLong(packetData); - var salt = dataTypes.ReadNextLong(packetData); - - var lastSeenMessageListLen = dataTypes.ReadNextVarInt(packetData); - var lastSeenMessageList = - new LastSeenMessageList.AcknowledgedMessage[lastSeenMessageListLen]; - - for (var i = 0; i < lastSeenMessageListLen; ++i) - { - var user = dataTypes.ReadNextUUID(packetData); - var lastSignature = dataTypes.ReadNextByteArray(packetData); - lastSeenMessageList[i] = new(user, lastSignature, true); - } - - LastSeenMessageList lastSeenMessages = new(lastSeenMessageList); - var unsignedChatContent = dataTypes.ReadNextBool(packetData) - ? dataTypes.ReadNextString(packetData) - : null; - - var filterEnum = (MessageFilterType)dataTypes.ReadNextVarInt(packetData); - if (filterEnum == MessageFilterType.PartiallyFiltered) - dataTypes.ReadNextULongArray(packetData); - - var chatTypeId = dataTypes.ReadNextVarInt(packetData); - var chatName = dataTypes.ReadNextString(packetData); - var targetName = dataTypes.ReadNextBool(packetData) - ? dataTypes.ReadNextString(packetData) - : null; - - var chatInfo = Json.ParseJson(chatName)?.AsObject(); - var senderDisplayName = chatInfo is not null && chatInfo.Count > 0 - ? (chatInfo.ContainsKey("insertion") ? chatInfo["insertion"] : chatInfo["text"]) - .GetStringValue() - : ""; - string? senderTeamName = null; - var messageTypeEnum = - ChatParser.ChatId2Type!.GetValueOrDefault(chatTypeId, ChatParser.MessageType.CHAT); - - if (targetName is not null && - (messageTypeEnum == ChatParser.MessageType.TEAM_MSG_COMMAND_INCOMING || - messageTypeEnum == ChatParser.MessageType.TEAM_MSG_COMMAND_OUTGOING)) - senderTeamName = Json.ParseJson(targetName)!["with"]![0]! - ["text"]!.GetStringValue(); - - if (string.IsNullOrWhiteSpace(senderDisplayName)) - { - var player = handler.GetPlayerInfo(senderUuid); - if (player is not null && (player.DisplayName is not null || player is { Name: not null }) && - string.IsNullOrWhiteSpace(senderDisplayName)) - { - senderDisplayName = ChatParser.ParseText(player.DisplayName ?? player.Name); - if (string.IsNullOrWhiteSpace(senderDisplayName)) - senderDisplayName = player.DisplayName ?? player.Name; - else - senderDisplayName += "§r"; - } - } - - bool verifyResult; - if (!isOnlineMode) - verifyResult = false; - else if (senderUuid == handler.GetUserUuid()) - verifyResult = true; - else - { - var player = handler.GetPlayerInfo(senderUuid); - if (player is null || !player.IsMessageChainLegal()) - verifyResult = false; - else - { - var lastVerifyResult = player.IsMessageChainLegal(); - verifyResult = player.VerifyMessage(signedChat, timestamp, salt, - ref headerSignature, ref precedingSignature, lastSeenMessages); - if (lastVerifyResult && !verifyResult) - log.Warn(string.Format(Translations.chat_message_chain_broken, - senderDisplayName)); - } - } - - ChatMessage chat = new(signedChat, false, chatTypeId, senderUuid, unsignedChatContent, - senderDisplayName, senderTeamName, timestamp, headerSignature, verifyResult); - if (isOnlineMode && !chat.LacksSender()) - Acknowledge(chat); - handler.OnTextReceived(chat); - } - else if (protocolVersion >= MC_1_19_3_Version) - { - // 1.19.3+ - // Header section - // net.minecraft.network.packet.s2c.play.ChatMessageS2CPacket#write - - // 1.21.5+: globalIndex prepended before sender UUID - if (protocolVersion >= MC_1_21_5_Version) - dataTypes.ReadNextVarInt(packetData); - - var senderUuid = dataTypes.ReadNextUUID(packetData); - var index = dataTypes.ReadNextVarInt(packetData); - // Signature is fixed size of 256 bytes - var messageSignature = dataTypes.ReadNextBool(packetData) - ? dataTypes.ReadNextByteArray(packetData, 256) - : null; - - // Body - // net.minecraft.network.message.MessageBody.Serialized#write - var message = dataTypes.ReadNextString(packetData); - var timestamp = dataTypes.ReadNextLong(packetData); - var salt = dataTypes.ReadNextLong(packetData); - - // Previous Messages - // net.minecraft.network.message.LastSeenMessageList.Indexed#write - // net.minecraft.network.message.MessageSignatureData.Indexed#write - var totalPreviousMessages = dataTypes.ReadNextVarInt(packetData); - var previousMessageSignatures = new Tuple[totalPreviousMessages]; - - for (var i = 0; i < totalPreviousMessages; i++) - { - // net.minecraft.network.message.MessageSignatureData.Indexed#fromBuf - var messageId = dataTypes.ReadNextVarInt(packetData) - 1; - if (messageId == -1) - previousMessageSignatures[i] = new Tuple(messageId, - dataTypes.ReadNextByteArray(packetData, 256)); - else - previousMessageSignatures[i] = new Tuple(messageId, null); - } - - // Other - var unsignedChatContent = dataTypes.ReadNextBool(packetData) - ? dataTypes.ReadNextChat(packetData) - : null; - - var filterType = (MessageFilterType)dataTypes.ReadNextVarInt(packetData); - - if (filterType == MessageFilterType.PartiallyFiltered) - dataTypes.ReadNextULongArray(packetData); - - // Network Target - // net.minecraft.network.message.MessageType.Serialized#write - var chatTypeId = ChatParser.ReadChatTypeHolder( - dataTypes, packetData, protocolVersion, out var directChatTypeDecoration); - var chatName = dataTypes.ReadNextChat(packetData); - var targetName = dataTypes.ReadNextBool(packetData) - ? dataTypes.ReadNextChat(packetData) - : null; - - var messageTypeEnum = - ChatParser.ChatId2Type!.GetValueOrDefault(chatTypeId, ChatParser.MessageType.CHAT); - - //var chatInfo = Json.ParseJson(targetName ?? chatName).Properties; - var senderDisplayName = chatName; - string? senderTeamName = targetName; - - if (string.IsNullOrWhiteSpace(senderDisplayName)) - { - var player = handler.GetPlayerInfo(senderUuid); - if (player is not null && (player.DisplayName is not null || player.Name is not null) && - string.IsNullOrWhiteSpace(senderDisplayName)) - { - senderDisplayName = player.DisplayName ?? player.Name; - if (string.IsNullOrWhiteSpace(senderDisplayName)) - senderDisplayName = player.DisplayName ?? player.Name; - else - senderDisplayName += "§r"; - } - } - - bool verifyResult; - if (!isOnlineMode || messageSignature is null) - verifyResult = false; - else - { - if (senderUuid == handler.GetUserUuid()) - verifyResult = true; - else - { - var player = handler.GetPlayerInfo(senderUuid); - if (player is null || !player.IsMessageChainLegal()) - verifyResult = false; - else - { - verifyResult = player.VerifyMessage(message, senderUuid, player.ChatUuid, - index, timestamp, salt, ref messageSignature, - previousMessageSignatures); - } - } - } - - ChatMessage chat = new(message, false, chatTypeId, senderUuid, unsignedChatContent, - senderDisplayName, senderTeamName, timestamp, messageSignature, verifyResult) - { - chatTypeDecoration = directChatTypeDecoration - }; - lock (MessageSigningLock) - Acknowledge(chat); - handler.OnTextReceived(chat); - } - - break; - case PacketTypesIn.ChunkBatchFinished: - var batchSize = dataTypes.ReadNextVarInt(packetData); // Number of chunks received - - if (batchSize > 0) - { - var d = GetNanos() - chunkBatchStartTime; - var d2 = d / (double)batchSize; - var d3 = Math.Clamp(d2, aggregatedNanosPerChunk / 3.0, aggregatedNanosPerChunk * 3.0); - aggregatedNanosPerChunk = - (aggregatedNanosPerChunk * oldSamplesWeight + d3) / (oldSamplesWeight + 1); - oldSamplesWeight = Math.Min(49, oldSamplesWeight + 1); - } - - SendChunkBatchReceived((float)(7000000.0 / aggregatedNanosPerChunk)); - break; - case PacketTypesIn.ChunkBatchStarted: - chunkBatchStartTime = GetNanos(); - break; - case PacketTypesIn.StartConfiguration: - SetCurrentState(CurrentState.Configuration); - SendAcknowledgeConfiguration(); - break; - case PacketTypesIn.HideMessage: - var hideMessageSignature = dataTypes.ReadNextByteArray(packetData); - ConsoleIO.WriteLine( - $"HideMessage was not processed! (SigLen={hideMessageSignature.Length})"); - break; - case PacketTypesIn.SystemChat: - var systemMessage = dataTypes.ReadNextChat(packetData); - - if (protocolVersion >= MC_1_19_3_Version) - { - var isOverlay = dataTypes.ReadNextBool(packetData); - if (isOverlay) - { - if (!Config.Main.Advanced.ShowXPBarMessages) - break; - } - else - { - if (!Config.Main.Advanced.ShowSystemMessages) - break; - } - - handler.OnTextReceived(new(systemMessage, null, false, -1, Guid.Empty, true)); - } - else - { - var msgType = dataTypes.ReadNextVarInt(packetData); - if (msgType == 1 && !Config.Main.Advanced.ShowSystemMessages) - break; - handler.OnTextReceived(new(systemMessage, null, true, msgType, Guid.Empty, true)); - } - - break; - case PacketTypesIn.ProfilelessChatMessage: - var message_ = dataTypes.ReadNextChat(packetData); - var messageType_ = ChatParser.ReadChatTypeHolder( - dataTypes, packetData, protocolVersion, out var directProfilelessChatTypeDecoration); - var messageName = dataTypes.ReadNextChat(packetData); - var targetName_ = dataTypes.ReadNextBool(packetData) - ? dataTypes.ReadNextChat(packetData) - : null; - ChatMessage profilelessChat = new(message_, messageName, false, messageType_, - Guid.Empty, true); - profilelessChat.isSenderJson = false; - profilelessChat.teamName = targetName_; - profilelessChat.chatTypeDecoration = directProfilelessChatTypeDecoration; - handler.OnTextReceived(profilelessChat); - break; - case PacketTypesIn.CombatEvent: - // 1.8 - 1.16.5 - if (protocolVersion is >= MC_1_8_Version and <= MC_1_16_5_Version) - { - var eventType = (CombatEventType)dataTypes.ReadNextVarInt(packetData); - - if (eventType == CombatEventType.EntityDead) - { - dataTypes.SkipNextVarInt(packetData); - - handler.OnPlayerKilled( - dataTypes.ReadNextInt(packetData), - ChatParser.ParseText(dataTypes.ReadNextString(packetData)) - ); - } - } - - break; - case PacketTypesIn.DeathCombatEvent: - dataTypes.SkipNextVarInt(packetData); - - handler.OnPlayerKilled( - protocolVersion >= MC_1_20_Version ? -1 : dataTypes.ReadNextInt(packetData), - ChatParser.ParseText(dataTypes.ReadNextChat(packetData)) - ); - - break; - case PacketTypesIn.DamageEvent: // 1.19.4 - if (handler.GetEntityHandlingEnabled() && protocolVersion >= MC_1_19_4_Version) - { - var entityId = dataTypes.ReadNextVarInt(packetData); - var sourceTypeId = dataTypes.ReadNextVarInt(packetData); - var sourceCauseId = dataTypes.ReadNextVarInt(packetData); - var sourceDirectId = dataTypes.ReadNextVarInt(packetData); - - Location? sourcePosition; - if (dataTypes.ReadNextBool(packetData)) - { - sourcePosition = new Location() - { - X = dataTypes.ReadNextDouble(packetData), - Y = dataTypes.ReadNextDouble(packetData), - Z = dataTypes.ReadNextDouble(packetData) - }; - } - - // Maybe write a function to use this data ? But seems not too useful - } - - break; - case PacketTypesIn.MessageHeader: // 1.19.2 only - if (protocolVersion == MC_1_19_2_Version) - { - var precedingSignature = dataTypes.ReadNextBool(packetData) - ? dataTypes.ReadNextByteArray(packetData) - : null; - - var senderUuid = dataTypes.ReadNextUUID(packetData); - var headerSignature = dataTypes.ReadNextByteArray(packetData); - var bodyDigest = dataTypes.ReadNextByteArray(packetData); - - bool verifyResult; - - if (!isOnlineMode) - verifyResult = false; - else if (senderUuid == handler.GetUserUuid()) - verifyResult = true; - else - { - var player = handler.GetPlayerInfo(senderUuid); - - if (player is null || !player.IsMessageChainLegal()) - verifyResult = false; - else - { - var lastVerifyResult = player.IsMessageChainLegal(); - verifyResult = player.VerifyMessageHead(ref precedingSignature, - ref headerSignature, ref bodyDigest); - if (lastVerifyResult && !verifyResult) - log.Warn(string.Format(Translations.chat_message_chain_broken, - player.Name)); - } - } - } - - break; - case PacketTypesIn.Respawn: - string? dimensionTypeNameRespawn = null; - Dictionary? dimensionTypeRespawn = null; - - if (protocolVersion >= MC_1_16_Version) - { - switch (protocolVersion) - { - case >= MC_1_20_6_Version: - dimensionTypeNameRespawn = World.GetDimensionNameById(dataTypes.ReadNextVarInt(packetData)); - break; - case >= MC_1_19_Version: - dimensionTypeNameRespawn = - dataTypes.ReadNextString(packetData); // Dimension Type: Identifier - break; - case >= MC_1_16_2_Version: - dimensionTypeRespawn = - dataTypes.ReadNextNbt(packetData); // Dimension Type: NBT Tag Compound - break; - default: - dimensionTypeNameRespawn = dataTypes.ReadNextString(packetData); - break; - } - - currentDimension = 0; - } - else - { - // 1.15 and below - currentDimension = dataTypes.ReadNextInt(packetData); - } - - switch (protocolVersion) - { - case >= MC_1_16_Version: - { - var dimensionName = - dataTypes.ReadNextString( - packetData); // Dimension Name (World Name) - 1.16 and above - - if (handler.GetTerrainEnabled()) - { - switch (protocolVersion) - { - case >= MC_1_16_2_Version and <= MC_1_18_2_Version: - World.StoreOneDimension(dimensionName, dimensionTypeRespawn!); - World.SetDimension(dimensionName); - break; - default: - World.SetDimension(dimensionTypeNameRespawn!); - break; - } - } - - break; - } - case < MC_1_14_Version: - dataTypes.ReadNextByte(packetData); // Difficulty - 1.13 and below - break; - } - - if (protocolVersion >= MC_1_15_Version) - dataTypes.ReadNextLong(packetData); // Hashed world seed - 1.15 and above - dataTypes.ReadNextByte(packetData); // Gamemode - - switch (protocolVersion) - { - case >= MC_1_16_Version: - dataTypes.ReadNextByte(packetData); // Previous Game mode - 1.16 and above - break; - case < MC_1_16_Version: - dataTypes.SkipNextString(packetData); // Level Type - 1.15 and below - break; - } - - if (protocolVersion >= MC_1_16_Version) - { - dataTypes.ReadNextBool(packetData); // Is Debug - 1.16 and above - dataTypes.ReadNextBool(packetData); // Is Flat - 1.16 and above - - if (protocolVersion < MC_1_20_2_Version) - dataTypes.ReadNextBool(packetData); // Copy metadata (Data Kept) - 1.16 - 1.20.2 - } - - if (protocolVersion >= MC_1_19_Version) - { - if (dataTypes.ReadNextBool(packetData)) // Has death location - { - dataTypes.ReadNextString(packetData); // Death dimension name: Identifier - dataTypes.ReadNextLocation(packetData); // Death location - } - } - - if (protocolVersion >= MC_1_20_Version) - dataTypes.ReadNextVarInt(packetData); // Portal Cooldown - - if (protocolVersion >= MC_1_20_2_Version) - dataTypes.ReadNextBool(packetData); // Copy metadata (Data Kept) - 1.20.2 and above - - handler.OnRespawn(); - break; - case PacketTypesIn.PlayerPositionAndLook: - { - int teleportId; - Location location; - float yaw, pitch; - int locMask; - - if (protocolVersion >= MC_1_21_2_Version) - { - teleportId = dataTypes.ReadNextVarInt(packetData); - location = new Location( - dataTypes.ReadNextDouble(packetData), // X - dataTypes.ReadNextDouble(packetData), // Y - dataTypes.ReadNextDouble(packetData) // Z - ); - dataTypes.ReadNextDouble(packetData); // Delta X - dataTypes.ReadNextDouble(packetData); // Delta Y - dataTypes.ReadNextDouble(packetData); // Delta Z - yaw = dataTypes.ReadNextFloat(packetData); - pitch = dataTypes.ReadNextFloat(packetData); - locMask = dataTypes.ReadNextInt(packetData); // Int flags (was Byte before 1.21.2) - } - else - { - location = new Location( - dataTypes.ReadNextDouble(packetData), // X - dataTypes.ReadNextDouble(packetData), // Y - dataTypes.ReadNextDouble(packetData) // Z - ); - yaw = dataTypes.ReadNextFloat(packetData); - pitch = dataTypes.ReadNextFloat(packetData); - locMask = dataTypes.ReadNextByte(packetData); - teleportId = protocolVersion >= MC_1_9_Version - ? dataTypes.ReadNextVarInt(packetData) : -1; - } - - if (handler.GetTerrainEnabled() || handler.GetEntityHandlingEnabled()) - { - if (protocolVersion >= MC_1_8_Version) - { - var currentLocation = handler.GetCurrentLocation(); - location.X = (locMask & 1 << 0) != 0 ? currentLocation.X + location.X : location.X; - location.Y = (locMask & 1 << 1) != 0 ? currentLocation.Y + location.Y : location.Y; - location.Z = (locMask & 1 << 2) != 0 ? currentLocation.Z + location.Z : location.Z; - } - } - - if (teleportId >= 0) - { - LastYaw = yaw; - LastPitch = pitch; - handler.UpdateLocation(location, yaw, pitch); - SendPacket(PacketTypesOut.TeleportConfirm, DataTypes.GetVarInt(teleportId)); - - if (Config.Main.Advanced.TemporaryFixBadpacket) - { - SendLocationUpdate(location, true, false, yaw, pitch, true); - - if (teleportId == 1) - SendLocationUpdate(location, true, false, yaw, pitch, true); - } - } - else - { - handler.UpdateLocation(location, yaw, pitch); - LastYaw = yaw; - LastPitch = pitch; - } - - if (protocolVersion is >= MC_1_17_Version and < MC_1_19_4_Version) - dataTypes.ReadNextBool(packetData); // Dismount Vehicle - 1.17 to 1.19.3 - } - break; - case PacketTypesIn.ChunkData: - if (handler.GetTerrainEnabled()) - { - Interlocked.Increment(ref handler.GetWorld().chunkCnt); - Interlocked.Increment(ref handler.GetWorld().chunkLoadNotCompleted); - - var chunkX = dataTypes.ReadNextInt(packetData); - var chunkZ = dataTypes.ReadNextInt(packetData); - if (protocolVersion >= MC_1_17_Version) - { - ulong[]? verticalStripBitmask = null; - - if (protocolVersion is MC_1_17_Version or MC_1_17_1_Version) - verticalStripBitmask = - dataTypes.ReadNextULongArray( - packetData); // Bit Mask Length and Primary Bit Mask - - if (protocolVersion >= MC_1_21_5_Version) - { - // 1.21.5: Heightmaps encoded as map instead of NBT - var hmCount = dataTypes.ReadNextVarInt(packetData); - for (var hm = 0; hm < hmCount; hm++) - { - dataTypes.ReadNextVarInt(packetData); // Heightmap type id - var longCount = dataTypes.ReadNextVarInt(packetData); - for (var l = 0; l < longCount; l++) - dataTypes.ReadNextLong(packetData); - } - } - else - { - dataTypes.ReadNextNbt(packetData); // Heightmaps (NBT format) - } - - if (protocolVersion is MC_1_17_Version or MC_1_17_1_Version) - { - var biomesLength = dataTypes.ReadNextVarInt(packetData); // Biomes length - for (var i = 0; i < biomesLength; i++) - dataTypes.SkipNextVarInt(packetData); // Biomes - } - - var dataSize = dataTypes.ReadNextVarInt(packetData); // Size - - pTerrain.ProcessChunkColumnData(chunkX, chunkZ, verticalStripBitmask, packetData); - ProcessChunkBlockEntityData(chunkX, chunkZ, packetData); - Interlocked.Decrement(ref handler.GetWorld().chunkLoadNotCompleted); - - // Block Entity data: ignored - // Trust edges: ignored (Removed in 1.20) - // Light data: ignored - } - else - { - var chunksContinuous = dataTypes.ReadNextBool(packetData); - if (protocolVersion is >= MC_1_16_Version and <= MC_1_16_1_Version) - dataTypes.ReadNextBool(packetData); // Ignore old data - 1.16 to 1.16.1 only - var chunkMask = protocolVersion >= MC_1_9_Version - ? (ushort)dataTypes.ReadNextVarInt(packetData) - : dataTypes.ReadNextUShort(packetData); - if (protocolVersion < MC_1_8_Version) - { - var addBitmap = dataTypes.ReadNextUShort(packetData); - var compressedDataSize = dataTypes.ReadNextInt(packetData); - var compressed = dataTypes.ReadData(compressedDataSize, packetData); - var decompressed = ZlibUtils.Decompress(compressed); - - pTerrain.ProcessChunkColumnData(chunkX, chunkZ, chunkMask, addBitmap, - currentDimension == 0, chunksContinuous, currentDimension, - new Queue(decompressed)); - Interlocked.Decrement(ref handler.GetWorld().chunkLoadNotCompleted); - } - else - { - if (protocolVersion >= MC_1_14_Version) - dataTypes.ReadNextNbt(packetData); // Heightmaps - 1.14 and above - var biomesLength = 0; - if (protocolVersion >= MC_1_16_2_Version) - if (chunksContinuous) - biomesLength = - dataTypes.ReadNextVarInt( - packetData); // Biomes length - 1.16.2 and above - if (protocolVersion >= MC_1_15_Version && chunksContinuous) - { - if (protocolVersion >= MC_1_16_2_Version) - { - for (var i = 0; i < biomesLength; i++) - { - // Biomes - 1.16.2 and above - // Don't use ReadNextVarInt because it cost too much time - dataTypes.SkipNextVarInt(packetData); - } - } - else dataTypes.DropData(1024 * 4, packetData); // Biomes - 1.15 and above - } - - var dataSize = dataTypes.ReadNextVarInt(packetData); - pTerrain.ProcessChunkColumnData(chunkX, chunkZ, chunkMask, 0, false, - chunksContinuous, currentDimension, packetData); - Interlocked.Decrement(ref handler.GetWorld().chunkLoadNotCompleted); - } - } - } - - break; - case PacketTypesIn.ChunksBiomes: // 1.19.4 - // Biomes are not handled by MCC - break; - case PacketTypesIn.MapData: - if (protocolVersion < MC_1_8_Version) - break; - - var mapId = dataTypes.ReadNextVarInt(packetData); - var scale = dataTypes.ReadNextByte(packetData); - - - // 1.9 + - var trackingPosition = true; - - // 1.14+ - var locked = false; - - // 1.17+ (locked and trackingPosition switched places) - if (protocolVersion >= MC_1_17_Version) - { - if (protocolVersion >= MC_1_14_Version) - locked = dataTypes.ReadNextBool(packetData); - - if (protocolVersion >= MC_1_9_Version) - trackingPosition = dataTypes.ReadNextBool(packetData); - } - else - { - if (protocolVersion >= MC_1_9_Version) - trackingPosition = dataTypes.ReadNextBool(packetData); - - if (protocolVersion >= MC_1_14_Version) - locked = dataTypes.ReadNextBool(packetData); - } - - var iconCount = 0; - List icons = new(); - - // 1,9 + = needs tracking position to be true to get the icons - if (protocolVersion <= MC_1_16_5_Version || trackingPosition) - { - iconCount = dataTypes.ReadNextVarInt(packetData); - - for (var i = 0; i < iconCount; i++) - { - MapIcon mapIcon = new(); - - switch (protocolVersion) - { - // 1.8 - 1.13 - case < MC_1_13_2_Version: - { - var directionAndType = dataTypes.ReadNextByte(packetData); - byte direction, type; - - // 1.12.2+ - if (protocolVersion >= MC_1_12_2_Version) - { - direction = (byte)(directionAndType & 0xF); - type = (byte)(directionAndType >> 4 & 0xF); - } - else // 1.8 - 1.12 - { - direction = (byte)(directionAndType >> 4 & 0xF); - type = (byte)(directionAndType & 0xF); - } - - mapIcon.Type = (MapIconType)type; - mapIcon.Direction = direction; - break; - } - // 1.13.2+ - case >= MC_1_13_2_Version: - mapIcon.Type = (MapIconType)dataTypes.ReadNextVarInt(packetData); - break; - } - - mapIcon.X = dataTypes.ReadNextByte(packetData); - mapIcon.Z = dataTypes.ReadNextByte(packetData); - - // 1.13.2+ - if (protocolVersion >= MC_1_13_2_Version) - { - mapIcon.Direction = dataTypes.ReadNextByte(packetData); - - if (dataTypes.ReadNextBool(packetData)) // Has Display Name? - mapIcon.DisplayName = - ChatParser.ParseText(dataTypes.ReadNextChat(packetData)); - } - - icons.Add(mapIcon); - } - } - - var columnsUpdated = dataTypes.ReadNextByte(packetData); // width - byte rowsUpdated = 0; // height - byte mapColumnX = 0; - byte mapRowZ = 0; - byte[]? colors = null; - - if (columnsUpdated > 0) - { - rowsUpdated = dataTypes.ReadNextByte(packetData); // height - mapColumnX = dataTypes.ReadNextByte(packetData); - mapRowZ = dataTypes.ReadNextByte(packetData); - colors = dataTypes.ReadNextByteArray(packetData); - } - - handler.OnMapData(mapId, scale, trackingPosition, locked, icons, columnsUpdated, - rowsUpdated, mapColumnX, mapRowZ, colors); - break; - case PacketTypesIn.TradeList: - if (protocolVersion >= MC_1_14_Version && handler.GetInventoryEnabled()) - { - // MC 1.14 or greater - var windowId = dataTypes.ReadNextVarInt(packetData); - int size = dataTypes.ReadNextByte(packetData); - - List trades = new(); - for (var tradeId = 0; tradeId < size; tradeId++) - { - var trade = dataTypes.ReadNextTrade(packetData, itemPalette); - trades.Add(trade); - } - - VillagerInfo villagerInfo = new() - { - Level = dataTypes.ReadNextVarInt(packetData), - Experience = dataTypes.ReadNextVarInt(packetData), - IsRegularVillager = dataTypes.ReadNextBool(packetData), - CanRestock = dataTypes.ReadNextBool(packetData) - }; - handler.OnTradeList(windowId, trades, villagerInfo); - } - - break; - case PacketTypesIn.Title: - if (protocolVersion >= MC_1_8_Version) - { - var action2 = dataTypes.ReadNextVarInt(packetData); - var titleText = string.Empty; - var subtitleText = string.Empty; - var actionBarText = string.Empty; - var json = string.Empty; - var fadein = -1; - var stay = -1; - var fadeout = -1; - - if (protocolVersion >= MC_1_10_Version) - { - switch (action2) - { - case 0: - json = titleText; - titleText = ChatParser.ParseText(dataTypes.ReadNextString(packetData)); - break; - case 1: - json = subtitleText; - subtitleText = ChatParser.ParseText(dataTypes.ReadNextString(packetData)); - break; - case 2: - json = actionBarText; - actionBarText = ChatParser.ParseText(dataTypes.ReadNextString(packetData)); - break; - case 3: - fadein = dataTypes.ReadNextInt(packetData); - stay = dataTypes.ReadNextInt(packetData); - fadeout = dataTypes.ReadNextInt(packetData); - break; - } - } - else - { - switch (action2) - { - case 0: - json = titleText; - titleText = ChatParser.ParseText(dataTypes.ReadNextString(packetData)); - break; - case 1: - json = subtitleText; - subtitleText = ChatParser.ParseText(dataTypes.ReadNextString(packetData)); - break; - case 2: - fadein = dataTypes.ReadNextInt(packetData); - stay = dataTypes.ReadNextInt(packetData); - fadeout = dataTypes.ReadNextInt(packetData); - break; - } - } - - handler.OnTitle(action2, titleText, subtitleText, actionBarText, fadein, stay, fadeout, - json); - } - - break; - case PacketTypesIn.MultiBlockChange: - if (handler.GetTerrainEnabled()) - { - if (protocolVersion >= MC_1_16_2_Version) - { - var chunkSection = dataTypes.ReadNextLong(packetData); - var sectionX = (int)(chunkSection >> 42); - var sectionY = (int)(chunkSection << 44 >> 44); - var sectionZ = (int)(chunkSection << 22 >> 42); - - if (protocolVersion < MC_1_20_Version) - dataTypes.ReadNextBool(packetData); // Useless boolean (Related to light update) - - var blocksSize = dataTypes.ReadNextVarInt(packetData); - for (var i = 0; i < blocksSize; i++) - { - var chunkSectionPosition = (ulong)dataTypes.ReadNextVarLong(packetData); - var blockId = (int)(chunkSectionPosition >> 12); - var localX = (int)(chunkSectionPosition >> 8 & 0x0F); - var localZ = (int)(chunkSectionPosition >> 4 & 0x0F); - var localY = (int)(chunkSectionPosition & 0x0F); - - var block = new Block((ushort)blockId); - var blockX = sectionX * 16 + localX; - var blockY = sectionY * 16 + localY; - var blockZ = sectionZ * 16 + localZ; - - Location location = new(blockX, blockY, blockZ); - - handler.OnBlockChange(location, block); - } - } - else - { - var chunkX = dataTypes.ReadNextInt(packetData); - var chunkZ = dataTypes.ReadNextInt(packetData); - var recordCount = protocolVersion < MC_1_8_Version - ? dataTypes.ReadNextShort(packetData) - : dataTypes.ReadNextVarInt(packetData); - - for (var i = 0; i < recordCount; i++) - { - byte locationXZ; - ushort blockIdMeta; - int blockY; - - if (protocolVersion < MC_1_8_Version) - { - blockIdMeta = dataTypes.ReadNextUShort(packetData); - blockY = dataTypes.ReadNextByte(packetData); - locationXZ = dataTypes.ReadNextByte(packetData); - } - else - { - locationXZ = dataTypes.ReadNextByte(packetData); - blockY = dataTypes.ReadNextByte(packetData); - blockIdMeta = (ushort)dataTypes.ReadNextVarInt(packetData); - } - - var blockX = locationXZ >> 4; - var blockZ = locationXZ & 0x0F; - - Location location = new(chunkX, chunkZ, blockX, blockY, blockZ); - Block block = new(blockIdMeta); - handler.OnBlockChange(location, block); - } - } - } - - break; - case PacketTypesIn.ServerData: - var motd = "-"; - - var hasMotd = false; - if (protocolVersion < MC_1_19_4_Version) - { - hasMotd = dataTypes.ReadNextBool(packetData); - - if (hasMotd) - motd = ChatParser.ParseText(dataTypes.ReadNextChat(packetData)); - } - else - { - hasMotd = true; - motd = ChatParser.ParseText(dataTypes.ReadNextChat(packetData)); - } - - var iconBase64 = "-"; - var hasIcon = dataTypes.ReadNextBool(packetData); - if (hasIcon) - { - if (protocolVersion < MC_1_20_2_Version) - iconBase64 = dataTypes.ReadNextString(packetData); - else - { - var pngData = dataTypes.ReadNextByteArray(packetData); - iconBase64 = Convert.ToBase64String(pngData); - } - } - - var previewsChat = false; - if (protocolVersion < MC_1_19_3_Version) - previewsChat = dataTypes.ReadNextBool(packetData); - - handler.OnServerDataRecived(hasMotd, motd, hasIcon, iconBase64, previewsChat); - break; - case PacketTypesIn.BlockChange: - if (handler.GetTerrainEnabled()) - { - if (protocolVersion < MC_1_8_Version) - { - var blockX = dataTypes.ReadNextInt(packetData); - var blockY = dataTypes.ReadNextByte(packetData); - var blockZ = dataTypes.ReadNextInt(packetData); - var blockId = (short)dataTypes.ReadNextVarInt(packetData); - var blockMeta = dataTypes.ReadNextByte(packetData); - - Location location = new(blockX, blockY, blockZ); - Block block = new(blockId, blockMeta); - handler.OnBlockChange(location, block); - } - else - { - var location = dataTypes.ReadNextLocation(packetData); - Block block = new((ushort)dataTypes.ReadNextVarInt(packetData)); - handler.OnBlockChange(location, block); - } - } - - break; - case PacketTypesIn.SetDisplayChatPreview: - handler.OnChatPreviewSettingUpdate(dataTypes.ReadNextBool(packetData)); // Preview Chat Settings - break; - case PacketTypesIn.ChatSuggestions: - break; - case PacketTypesIn.MapChunkBulk: - if (protocolVersion < MC_1_9_Version && handler.GetTerrainEnabled()) - { - int chunkCount; - bool hasSkyLight; - var chunkData = packetData; - - //Read global fields - if (protocolVersion < MC_1_8_Version) - { - chunkCount = dataTypes.ReadNextShort(packetData); - var compressedDataSize = dataTypes.ReadNextInt(packetData); - hasSkyLight = dataTypes.ReadNextBool(packetData); - var compressed = dataTypes.ReadData(compressedDataSize, packetData); - var decompressed = ZlibUtils.Decompress(compressed); - chunkData = new Queue(decompressed); - } - else - { - hasSkyLight = dataTypes.ReadNextBool(packetData); - chunkCount = dataTypes.ReadNextVarInt(packetData); - } - - //Read chunk records - var chunkXs = new int[chunkCount]; - var chunkZs = new int[chunkCount]; - var chunkMasks = new ushort[chunkCount]; - var addBitmaps = new ushort[chunkCount]; - for (var chunkColumnNo = 0; chunkColumnNo < chunkCount; chunkColumnNo++) - { - chunkXs[chunkColumnNo] = dataTypes.ReadNextInt(packetData); - chunkZs[chunkColumnNo] = dataTypes.ReadNextInt(packetData); - chunkMasks[chunkColumnNo] = dataTypes.ReadNextUShort(packetData); - addBitmaps[chunkColumnNo] = protocolVersion < MC_1_8_Version - ? dataTypes.ReadNextUShort(packetData) - : (ushort)0; - } - - //Process chunk records - for (var chunkColumnNo = 0; chunkColumnNo < chunkCount; chunkColumnNo++) - { - pTerrain.ProcessChunkColumnData(chunkXs[chunkColumnNo], chunkZs[chunkColumnNo], - chunkMasks[chunkColumnNo], addBitmaps[chunkColumnNo], hasSkyLight, true, - currentDimension, chunkData); - Interlocked.Decrement(ref handler.GetWorld().chunkLoadNotCompleted); - } - } - - break; - case PacketTypesIn.UnloadChunk: - if (protocolVersion >= MC_1_9_Version && handler.GetTerrainEnabled()) - { - var chunkX = dataTypes.ReadNextInt(packetData); - var chunkZ = dataTypes.ReadNextInt(packetData); - - // Warning: It is legal to include unloaded chunks in the UnloadChunk packet. - // Since chunks that have not been loaded are not recorded, this may result - // in loading chunks that should be unloaded and inaccurate statistics. - if (handler.GetWorld()[chunkX, chunkZ] is not null) - Interlocked.Decrement(ref handler.GetWorld().chunkCnt); - - handler.GetWorld()[chunkX, chunkZ] = null; - } - - break; - case PacketTypesIn.ChangeGameState: - var reason = dataTypes.ReadNextByte(packetData); - var state = dataTypes.ReadNextFloat(packetData); - handler.OnGameEvent(reason, state); - - break; - case PacketTypesIn.PlayerInfo: - if (protocolVersion >= MC_1_19_3_Version) - { - var actionBitset = dataTypes.ReadNextByte(packetData); - var entryCount = dataTypes.ReadNextVarInt(packetData); - for (var i = 0; i < entryCount; i++) - { - var playerUuid = dataTypes.ReadNextUUID(packetData); - - PlayerInfo player; - if ((actionBitset & 1 << 0) > 0) // Actions bit 0: add player - { - var name = dataTypes.ReadNextString(packetData); - var numberOfProperties = dataTypes.ReadNextVarInt(packetData); - for (var j = 0; j < numberOfProperties; ++j) - { - dataTypes.SkipNextString(packetData); - dataTypes.SkipNextString(packetData); - if (dataTypes.ReadNextBool(packetData)) - dataTypes.SkipNextString(packetData); - } - - player = new(name, playerUuid); - handler.OnPlayerJoin(player); - } - else - { - var playerGet = handler.GetPlayerInfo(playerUuid); - if (playerGet is null) - { - player = new(string.Empty, playerUuid); - handler.OnPlayerJoin(player); - } - else - { - player = playerGet; - } - } - - if ((actionBitset & 1 << 1) > 0) // Actions bit 1: initialize chat - { - var hasSignatureData = dataTypes.ReadNextBool(packetData); - - if (hasSignatureData) - { - var chatUuid = dataTypes.ReadNextUUID(packetData); - var publicKeyExpiryTime = dataTypes.ReadNextLong(packetData); - var encodedPublicKey = dataTypes.ReadNextByteArray(packetData); - var publicKeySignature = dataTypes.ReadNextByteArray(packetData); - player.SetPublicKey(chatUuid, publicKeyExpiryTime, encodedPublicKey, - publicKeySignature); - - if (playerUuid == handler.GetUserUuid()) - { - log.PacketDebug($"Receive ChatUuid = {chatUuid}"); - this.chatUuid = chatUuid; - } - } - else - { - player.ClearPublicKey(); - - if (playerUuid == handler.GetUserUuid()) - log.PacketDebug("Receive ChatUuid = Empty"); - } - - if (playerUuid == handler.GetUserUuid()) - { - receivePlayerInfo = true; - if (receiveDeclareCommands) - handler.SetCanSendMessage(true); - } - } - - if ((actionBitset & 1 << 2) > 0) // Actions bit 2: update gamemode - handler.OnGamemodeUpdate(playerUuid, dataTypes.ReadNextVarInt(packetData)); - - if ((actionBitset & 1 << 3) > 0) // Actions bit 3: update listed - player.Listed = dataTypes.ReadNextBool(packetData); - - if ((actionBitset & 1 << 4) > 0) // Actions bit 4: update latency - { - var latency = dataTypes.ReadNextVarInt(packetData); - handler.OnLatencyUpdate(playerUuid, latency); //Update latency; - } - - // Actions bit 5: update display name - if ((actionBitset & 1 << 5) > 0) - { - player.DisplayName = dataTypes.ReadNextBool(packetData) - ? dataTypes.ReadNextChat(packetData) - : null; - } - - // Consume all action-selected fields to keep entry boundaries aligned. - if (protocolVersion >= MC_1_21_2_Version && (actionBitset & 1 << 6) > 0) // Actions bit 6: update list order - player.TabListOrder = dataTypes.ReadNextVarInt(packetData); - - if (protocolVersion >= MC_1_21_4_Version && (actionBitset & 1 << 7) > 0) // Actions bit 7: update hat - dataTypes.ReadNextBool(packetData); - } - } - else if (protocolVersion >= MC_1_8_Version) - { - var action = dataTypes.ReadNextVarInt(packetData); // Action Name - var numberOfPlayers = dataTypes.ReadNextVarInt(packetData); // Number Of Players - - for (var i = 0; i < numberOfPlayers; i++) - { - var uuid = dataTypes.ReadNextUUID(packetData); // Player UUID - - switch (action) - { - case 0x00: //Player Join (Add player since 1.19) - var name = dataTypes.ReadNextString(packetData); // Player name - var propNum = - dataTypes.ReadNextVarInt( - packetData); // Number of properties in the following array - - // Property: Tuple[propNum] : null; - for (var p = 0; p < propNum; p++) - { - var propertyName = - dataTypes.ReadNextString(packetData); // Name: String (32767) - var val = - dataTypes.ReadNextString(packetData); // Value: String (32767) - string? propertySignature = null; - if (dataTypes.ReadNextBool(packetData)) // Is Signed - propertySignature = - dataTypes.ReadNextString( - packetData); // Signature: String (32767) - if (useProperty) - properties![p] = new(propertyName, val, propertySignature); - } -#pragma warning restore CS0162 // Unreachable code detected - - var gameMode = dataTypes.ReadNextVarInt(packetData); // Gamemode - handler.OnGamemodeUpdate(uuid, gameMode); - - var ping = dataTypes.ReadNextVarInt(packetData); // Ping - - string? displayName = null; - if (dataTypes.ReadNextBool(packetData)) // Has display name - displayName = ChatParser.ParseText(dataTypes.ReadNextString(packetData)); // Display name - - // 1.19 Additions - long? keyExpiration = null; - byte[]? publicKey = null, signature = null; - if (protocolVersion >= MC_1_19_Version) - { - if (dataTypes.ReadNextBool( - packetData)) // Has Sig Data (if true, red the following fields) - { - keyExpiration = dataTypes.ReadNextLong(packetData); // Timestamp - - var publicKeyLength = - dataTypes.ReadNextVarInt(packetData); // Public Key Length - if (publicKeyLength > 0) - publicKey = dataTypes.ReadData(publicKeyLength, - packetData); // Public key - - var signatureLength = - dataTypes.ReadNextVarInt(packetData); // Signature Length - if (signatureLength > 0) - signature = dataTypes.ReadData(signatureLength, - packetData); // Public key - } - } - - handler.OnPlayerJoin(new PlayerInfo(uuid, name, properties, gameMode, ping, - displayName, keyExpiration, publicKey, signature)); - break; - case 0x01: // Update Gamemode - handler.OnGamemodeUpdate(uuid, dataTypes.ReadNextVarInt(packetData)); - break; - case 0x02: // Update latency - var latency = dataTypes.ReadNextVarInt(packetData); - handler.OnLatencyUpdate(uuid, latency); // Update latency; - break; - case 0x03: // Update display name - if (dataTypes.ReadNextBool(packetData)) - { - var player = handler.GetPlayerInfo(uuid); - if (player is not null) - player.DisplayName = ChatParser.ParseText(dataTypes.ReadNextString(packetData)); - else - dataTypes.SkipNextString(packetData); - } - - break; - case 0x04: // Player Leave - handler.OnPlayerLeave(uuid); - break; - default: - // Unknown player list item type - break; - } - } - } - else // MC 1.7.X does not provide UUID in tab-list updates - { - var name = dataTypes.ReadNextString(packetData); - var online = dataTypes.ReadNextBool(packetData); - var ping = dataTypes.ReadNextShort(packetData); - var fakeUuid = new Guid(MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(name)).Take(16) - .ToArray()); - if (online) - handler.OnPlayerJoin(new PlayerInfo(name, fakeUuid)); - else handler.OnPlayerLeave(fakeUuid); - } - - break; - case PacketTypesIn.PlayerRemove: - var numberOfLeavePlayers = dataTypes.ReadNextVarInt(packetData); - for (var i = 0; i < numberOfLeavePlayers; ++i) - { - var playerUuid = dataTypes.ReadNextUUID(packetData); - handler.OnPlayerLeave(playerUuid); - } - - break; - case PacketTypesIn.PlayerListHeaderAndFooter: - handler.OnTabListHeaderAndFooter( - dataTypes.ReadNextChat(packetData), - dataTypes.ReadNextChat(packetData)); - break; - case PacketTypesIn.TabComplete: - var oldTransactionId = autocomplete_transaction_id; - if (protocolVersion >= MC_1_13_Version) - { - autocomplete_transaction_id = dataTypes.ReadNextVarInt(packetData); - dataTypes.ReadNextVarInt(packetData); // Start of text to replace - dataTypes.ReadNextVarInt(packetData); // Length of text to replace - } - - var autocompleteCount = dataTypes.ReadNextVarInt(packetData); - var autocompleteResult = new string[autocompleteCount]; - for (var i = 0; i < autocompleteCount; i++) - { - autocompleteResult[i] = dataTypes.ReadNextString(packetData); - if (protocolVersion < MC_1_13_Version) continue; - - // Skip optional tooltip for each tab-complete resul`t - if (dataTypes.ReadNextBool(packetData)) - dataTypes.ReadNextChat(packetData); - } - - handler.OnAutoCompleteDone(oldTransactionId, autocompleteResult); - break; - case PacketTypesIn.PluginMessage: - var channel = dataTypes.ReadNextString(packetData); - // Length is unneeded as the whole remaining packetData is the entire payload of the packet. - if (protocolVersion < MC_1_8_Version) - pForge.ReadNextVarShort(packetData); - if (IsOpenBookPluginChannel(channel)) - handler.OnBookOpen(ReadBookHand(new Queue(packetData))); - handler.OnPluginChannelMessage(channel, packetData.ToArray()); - return pForge.HandlePluginMessage(channel, packetData, ref currentDimension); - case PacketTypesIn.OpenBook: - handler.OnBookOpen(ReadBookHand(packetData)); - break; - case PacketTypesIn.Disconnect: - handler.OnConnectionLost(ChatBot.DisconnectReason.InGameKick, - dataTypes.ReadNextChat(packetData)); - return false; - case PacketTypesIn.SetCompression: - if (protocolVersion is >= MC_1_8_Version and < MC_1_9_Version) - compression_treshold = dataTypes.ReadNextVarInt(packetData); - break; - case PacketTypesIn.OpenWindow: - if (handler.GetInventoryEnabled()) - { - if (protocolVersion < MC_1_14_Version) - { - // MC 1.13 or lower - var windowId = dataTypes.ReadNextByte(packetData); - var type = dataTypes.ReadNextString(packetData).Replace("minecraft:", "") - .ToUpper(); - var inventoryType = - (ContainerTypeOld)Enum.Parse(typeof(ContainerTypeOld), type); - var title = dataTypes.ReadNextChat(packetData); - var slots = dataTypes.ReadNextByte(packetData); - Container inventory = new(windowId, inventoryType, ChatParser.ParseText(title)); - handler.OnInventoryOpen(windowId, inventory); - } - else - { - // MC 1.14 or greater - var windowId = dataTypes.ReadNextVarInt(packetData); - var windowType = dataTypes.ReadNextVarInt(packetData); - var title = dataTypes.ReadNextChat(packetData); - Container inventory = new(windowId, windowType, ChatParser.ParseText(title), protocolVersion); - handler.OnInventoryOpen(windowId, inventory); - } - } - - break; - case PacketTypesIn.CloseWindow: - if (handler.GetInventoryEnabled()) - { - var windowId = protocolVersion >= MC_1_21_2_Version - ? dataTypes.ReadNextVarInt(packetData) - : dataTypes.ReadNextByte(packetData); - lock (window_actions) - { - window_actions[windowId] = 0; - } - - handler.OnInventoryClose(windowId); - } - - break; - case PacketTypesIn.WindowItems: - if (handler.GetInventoryEnabled()) - { - var windowId = (byte)(protocolVersion >= MC_1_21_2_Version - ? dataTypes.ReadNextVarInt(packetData) - : dataTypes.ReadNextByte(packetData)); - var stateId = -1; - int elements; - - if (protocolVersion >= MC_1_17_1_Version) - { - // State ID and Elements as VarInt - 1.17.1 and above - stateId = dataTypes.ReadNextVarInt(packetData); - elements = dataTypes.ReadNextVarInt(packetData); - } - else - { - // Elements as Short - 1.17.0 and below - elements = dataTypes.ReadNextShort(packetData); - } - - Dictionary inventorySlots = new(); - for (var slotId = 0; slotId < elements; slotId++) - { - var item = dataTypes.ReadNextItemSlot(packetData, itemPalette); - if (item is not null) - inventorySlots[slotId] = item; - } - - if (protocolVersion >= MC_1_17_1_Version) // Carried Item - 1.17.1 and above - dataTypes.ReadNextItemSlot(packetData, itemPalette); - - handler.OnWindowItems(windowId, inventorySlots, stateId); - } - - break; - case PacketTypesIn.WindowProperty: - var containerId = (byte)(protocolVersion >= MC_1_21_2_Version - ? dataTypes.ReadNextVarInt(packetData) - : dataTypes.ReadNextByte(packetData)); - var propertyId = dataTypes.ReadNextShort(packetData); - var propertyValue = dataTypes.ReadNextShort(packetData); - handler.OnWindowProperties(containerId, propertyId, propertyValue); - break; - case PacketTypesIn.SetSlot: - if (handler.GetInventoryEnabled()) - { - var windowId = (byte)(protocolVersion >= MC_1_21_2_Version - ? dataTypes.ReadNextVarInt(packetData) - : dataTypes.ReadNextByte(packetData)); - var stateId = -1; - if (protocolVersion >= MC_1_17_1_Version) - stateId = dataTypes.ReadNextVarInt(packetData); // State ID - 1.17.1 and above - var slotId = dataTypes.ReadNextShort(packetData); - var item = dataTypes.ReadNextItemSlot(packetData, itemPalette); - handler.OnSetSlot(windowId, slotId, item, stateId); - } - - break; - case PacketTypesIn.WindowConfirmation: - if (handler.GetInventoryEnabled()) - { - var windowId = dataTypes.ReadNextByte(packetData); - var actionId = dataTypes.ReadNextShort(packetData); - var accepted = dataTypes.ReadNextBool(packetData); - if (!accepted) - SendWindowConfirmation(windowId, actionId, true); - } - - break; - case PacketTypesIn.RemoveResourcePack: - if (dataTypes.ReadNextBool(packetData)) // Has UUID - ChatParser.RemoveResourcePackTranslations(dataTypes.ReadNextUUID(packetData).ToString("D")); // UUID - else - ChatParser.ClearResourcePackTranslations(); - break; - case PacketTypesIn.ResourcePackSend: - HandleResourcePackPacket(packetData); - break; - case PacketTypesIn.ResetScore: - dataTypes.ReadNextString(packetData); // Entity Name - if (dataTypes.ReadNextBool(packetData)) // Has Objective Name - dataTypes.ReadNextString(packetData); // Objective Name - - break; - case PacketTypesIn.SpawnEntity: - if (handler.GetEntityHandlingEnabled()) - { - var entity = dataTypes.ReadNextEntity(packetData, entityPalette, false); - - if (protocolVersion >= MC_1_20_2_Version) - { - if (entity.Type == EntityType.Player) - handler.OnSpawnPlayer(entity.ID, entity.UUID, entity.Location, (byte)entity.Yaw, (byte)entity.Pitch); - else - handler.OnSpawnEntity(entity); - - break; - } - - handler.OnSpawnEntity(entity); - } - - break; - case PacketTypesIn.EntityEquipment: - if (handler.GetEntityHandlingEnabled()) - { - var entityId = dataTypes.ReadNextVarInt(packetData); - if (protocolVersion >= MC_1_16_Version) - { - bool hasNext; - do - { - var bitsData = dataTypes.ReadNextByte(packetData); - // Top bit set if another entry follows, and otherwise unset if this is the last item in the array - hasNext = bitsData >> 7 == 1; - var slot2 = bitsData & 0x7F; - var item = dataTypes.ReadNextItemSlot(packetData, itemPalette); - handler.OnEntityEquipment(entityId, slot2, item); - } while (hasNext); - } - else - { - var slot2 = protocolVersion < MC_1_9_Version - ? dataTypes.ReadNextShort(packetData) - : dataTypes.ReadNextVarInt(packetData); - - var item = dataTypes.ReadNextItemSlot(packetData, itemPalette); - handler.OnEntityEquipment(entityId, slot2, item); - } - } - - break; - case PacketTypesIn.SpawnLivingEntity: - if (handler.GetEntityHandlingEnabled()) - { - var entity = dataTypes.ReadNextEntity(packetData, entityPalette, true); - // packet before 1.15 has metadata at the end - // this is not handled in dataTypes.ReadNextEntity() - // we are simply ignoring leftover data in packet - handler.OnSpawnEntity(entity); - } - - break; - case PacketTypesIn.SpawnPlayer: - if (handler.GetEntityHandlingEnabled()) - { - var entityId = dataTypes.ReadNextVarInt(packetData); - var uuid = dataTypes.ReadNextUUID(packetData); - double x, y, z; - - if (protocolVersion < MC_1_9_Version) - { - x = dataTypes.ReadNextInt(packetData) / 32.0D; - y = dataTypes.ReadNextInt(packetData) / 32.0D; - z = dataTypes.ReadNextInt(packetData) / 32.0D; - } - else - { - x = dataTypes.ReadNextDouble(packetData); - y = dataTypes.ReadNextDouble(packetData); - z = dataTypes.ReadNextDouble(packetData); - } - - var yaw = dataTypes.ReadNextByte(packetData); - var pitch = dataTypes.ReadNextByte(packetData); - handler.OnSpawnPlayer(entityId, uuid, new(x, y, z), yaw, pitch); - } - - break; - case PacketTypesIn.EntityEffect: - if (handler.GetEntityHandlingEnabled()) - { - var entityId = dataTypes.ReadNextVarInt(packetData); - var effectId = protocolVersion >= MC_1_20_4_Version - ? dataTypes.ReadNextVarInt(packetData) + 1 - : dataTypes.ReadNextByte(packetData); - - if (Enum.IsDefined(typeof(Effects), effectId)) - { - var effect = (Effects)effectId; - var amplifier = protocolVersion >= MC_1_20_6_Version - ? dataTypes.ReadNextVarInt(packetData) - : dataTypes.ReadNextByte(packetData); - var duration = dataTypes.ReadNextVarInt(packetData); - var flags = dataTypes.ReadNextByte(packetData); - var hasFactorData = false; - Dictionary? factorCodec = null; - - if (protocolVersion >= MC_1_19_Version && protocolVersion < MC_1_20_6_Version) - { - hasFactorData = dataTypes.ReadNextBool(packetData); - if (hasFactorData) - factorCodec = dataTypes.ReadNextNbt(packetData); - } - - handler.OnEntityEffect(entityId, effect, amplifier, duration, flags, hasFactorData, - factorCodec); - } - } - - break; - case PacketTypesIn.RemoveEntityEffect: - if (handler.GetEntityHandlingEnabled()) - { - var entityId = dataTypes.ReadNextVarInt(packetData); - var effectId = protocolVersion >= MC_1_20_4_Version - ? dataTypes.ReadNextVarInt(packetData) + 1 - : dataTypes.ReadNextByte(packetData); - - if (Enum.IsDefined(typeof(Effects), effectId)) - { - var effect = (Effects)effectId; - handler.OnRemoveEntityEffect(entityId, effect); - } - } - - break; - case PacketTypesIn.DestroyEntities: - if (handler.GetEntityHandlingEnabled()) - { - var entityCount = 1; // 1.17.0 has only one entity per packet - if (protocolVersion != MC_1_17_Version) - entityCount = - dataTypes.ReadNextVarInt(packetData); // All other versions have a "count" field - - var entityList = new int[entityCount]; - for (var i = 0; i < entityCount; i++) - entityList[i] = dataTypes.ReadNextVarInt(packetData); - - handler.OnDestroyEntities(entityList); - } - - break; - case PacketTypesIn.EntityPosition: - if (handler.GetEntityHandlingEnabled()) - { - var entityId = dataTypes.ReadNextVarInt(packetData); - double deltaX, deltaY, deltaZ; - - if (protocolVersion < MC_1_9_Version) - { - deltaX = Convert.ToDouble(dataTypes.ReadNextByte(packetData)); - deltaY = Convert.ToDouble(dataTypes.ReadNextByte(packetData)); - deltaZ = Convert.ToDouble(dataTypes.ReadNextByte(packetData)); - } - else - { - deltaX = Convert.ToDouble(dataTypes.ReadNextShort(packetData)); - deltaY = Convert.ToDouble(dataTypes.ReadNextShort(packetData)); - deltaZ = Convert.ToDouble(dataTypes.ReadNextShort(packetData)); - } - - var isOnGround = dataTypes.ReadNextBool(packetData); - deltaX = deltaX / (128 * 32); - deltaY = deltaY / (128 * 32); - deltaZ = deltaZ / (128 * 32); - - handler.OnEntityPosition(entityId, deltaX, deltaY, deltaZ, isOnGround); - } - - break; - case PacketTypesIn.EntityPositionAndRotation: - if (handler.GetEntityHandlingEnabled()) - { - var entityId = dataTypes.ReadNextVarInt(packetData); - double deltaX, deltaY, deltaZ; - - if (protocolVersion < MC_1_9_Version) - { - deltaX = dataTypes.ReadNextByte(packetData) / 32.0D; - deltaY = dataTypes.ReadNextByte(packetData) / 32.0D; - deltaZ = dataTypes.ReadNextByte(packetData) / 32.0D; - } - else - { - deltaX = Convert.ToDouble(dataTypes.ReadNextShort(packetData)); - deltaY = Convert.ToDouble(dataTypes.ReadNextShort(packetData)); - deltaZ = Convert.ToDouble(dataTypes.ReadNextShort(packetData)); - } - - - var yaw = dataTypes.ReadNextByte(packetData) * (1F / 256) * 360; - var pitch = dataTypes.ReadNextByte(packetData) * (1F / 256) * 360; - var isOnGround = dataTypes.ReadNextBool(packetData); - deltaX = deltaX / (128 * 32); - deltaY = deltaY / (128 * 32); - deltaZ = deltaZ / (128 * 32); - - handler.OnEntityPosition(entityId, deltaX, deltaY, deltaZ, yaw, pitch, isOnGround); - } - - break; - case PacketTypesIn.EntityRotation: - if (handler.GetEntityHandlingEnabled()) - { - var entityId = dataTypes.ReadNextVarInt(packetData); - var yaw = dataTypes.ReadNextByte(packetData) * (1F / 256) * 360; - var pitch = dataTypes.ReadNextByte(packetData) * (1F / 256) * 360; - var isOnGround = dataTypes.ReadNextBool(packetData); - - handler.OnEntityRotation(entityId, yaw, pitch, isOnGround); - } - - break; - case PacketTypesIn.EntityVelocity: - if (handler.GetEntityHandlingEnabled()) - { - var entityId = dataTypes.ReadNextVarInt(packetData); - double velocityX, velocityY, velocityZ; - - if (protocolVersion >= MC_1_21_9_Version) - { - (velocityX, velocityY, velocityZ) = dataTypes.ReadNextLpVec3Values(packetData); - } - else - { - velocityX = dataTypes.ReadNextShort(packetData) / 8000.0D; - velocityY = dataTypes.ReadNextShort(packetData) / 8000.0D; - velocityZ = dataTypes.ReadNextShort(packetData) / 8000.0D; - } - - handler.OnEntityVelocity(entityId, velocityX, velocityY, velocityZ); - } - - break; - case PacketTypesIn.EntityProperties: - if (handler.GetEntityHandlingEnabled()) - { - var entityId = dataTypes.ReadNextVarInt(packetData); - var numberOfProperties = protocolVersion >= MC_1_17_Version - ? dataTypes.ReadNextVarInt(packetData) - : dataTypes.ReadNextInt(packetData); - - Dictionary keys = new(); - for (var i = 0; i < numberOfProperties; i++) - { - string propertyKey; - if (protocolVersion < MC_1_20_6_Version) - { - propertyKey = dataTypes.ReadNextString(packetData); - } - else - { - var attrId = dataTypes.ReadNextVarInt(packetData); - propertyKey = World.GetAttributeNameById(attrId) ?? "unknown"; - } - var propertyValue2 = dataTypes.ReadNextDouble(packetData); - - List op0 = new(); - List op1 = new(); - List op2 = new(); - - var numberOfModifiers = dataTypes.ReadNextVarInt(packetData); - for (var j = 0; j < numberOfModifiers; j++) - { - var modifierId = protocolVersion < MC_1_21_Version ? dataTypes.ReadNextUUID(packetData).ToString() : dataTypes.ReadNextString(packetData); - var amount = dataTypes.ReadNextDouble(packetData); - var operation = dataTypes.ReadNextByte(packetData); - switch (operation) - { - case 0: - op0.Add(amount); - break; - case 1: - op1.Add(amount); - break; - case 2: - op2.Add(amount + 1); - break; - } - } - - if (op0.Count > 0) propertyValue2 += op0.Sum(); - if (op1.Count > 0) propertyValue2 *= 1 + op1.Sum(); - if (op2.Count > 0) propertyValue2 *= op2.Aggregate((a, _x) => a * _x); - keys[propertyKey] = propertyValue2; - } - - handler.OnEntityProperties(entityId, keys); - } - - break; - case PacketTypesIn.EntityMetadata: - if (handler.GetEntityHandlingEnabled()) - { - var entityId = dataTypes.ReadNextVarInt(packetData); - var metadata = dataTypes.ReadNextMetadata(packetData, itemPalette, entityMetadataPalette); - - // Also make a palette for field? Will be a lot of work - var healthField = protocolVersion switch - { - > MC_26_2_Version => throw new NotImplementedException(Translations - .exception_palette_healthfield), - // 1.17 and above - >= MC_1_17_Version => 9, - // 1.14 and above - >= MC_1_14_Version => 8, - // 1.10 and above - >= MC_1_10_Version => 7, - // 1.8 and above - >= MC_1_8_Version => 6, - _ => throw new NotImplementedException(Translations.exception_palette_healthfield) - }; - - if (metadata.TryGetValue(healthField, out var healthObj) && healthObj is float healthObj2) - handler.OnEntityHealth(entityId, healthObj2); - - handler.OnEntityMetadata(entityId, metadata); - } - - break; - case PacketTypesIn.EntityStatus: - if (handler.GetEntityHandlingEnabled()) - { - var entityId = dataTypes.ReadNextInt(packetData); - var status = dataTypes.ReadNextByte(packetData); - handler.OnEntityStatus(entityId, status); - } - - break; - case PacketTypesIn.TimeUpdate: - if (protocolVersion >= MC_26_1_Version) - { - var worldAge = dataTypes.ReadNextLong(packetData); - long timeOfDay = 0; - var clockCount = dataTypes.ReadNextVarInt(packetData); - for (int i = 0; i < clockCount; i++) - { - dataTypes.ReadNextVarInt(packetData); // clock holder id - var totalTicks = dataTypes.ReadNextVarLong(packetData); - dataTypes.ReadNextFloat(packetData); // partialTick - dataTypes.ReadNextFloat(packetData); // rate - if (i == 0) - timeOfDay = totalTicks; - } - handler.OnTimeUpdate(worldAge, timeOfDay); - } - else - { - var worldAge = dataTypes.ReadNextLong(packetData); - var timeOfDay = dataTypes.ReadNextLong(packetData); - if (protocolVersion >= MC_1_21_2_Version) - dataTypes.ReadNextBool(packetData); // Tick day time - handler.OnTimeUpdate(worldAge, timeOfDay); - } - break; - case PacketTypesIn.EntityTeleport: - if (handler.GetEntityHandlingEnabled()) - { - var entityId = dataTypes.ReadNextVarInt(packetData); - double x, y, z; - - if (protocolVersion >= MC_1_21_2_Version) - { - // 1.21.2+: PositionMoveRotation + relative flags - x = dataTypes.ReadNextDouble(packetData); - y = dataTypes.ReadNextDouble(packetData); - z = dataTypes.ReadNextDouble(packetData); - dataTypes.ReadNextDouble(packetData); // Delta movement X - dataTypes.ReadNextDouble(packetData); // Delta movement Y - dataTypes.ReadNextDouble(packetData); // Delta movement Z - dataTypes.ReadNextFloat(packetData); // Yaw - dataTypes.ReadNextFloat(packetData); // Pitch - dataTypes.ReadNextInt(packetData); // Relative flags bitmask - var isOnGround = dataTypes.ReadNextBool(packetData); - handler.OnEntityTeleport(entityId, x, y, z, isOnGround); - } - else if (protocolVersion < MC_1_9_Version) - { - x = dataTypes.ReadNextInt(packetData) / 32.0D; - y = dataTypes.ReadNextInt(packetData) / 32.0D; - z = dataTypes.ReadNextInt(packetData) / 32.0D; - dataTypes.ReadNextByte(packetData); // Yaw - dataTypes.ReadNextByte(packetData); // Pitch - var isOnGround = dataTypes.ReadNextBool(packetData); - handler.OnEntityTeleport(entityId, x, y, z, isOnGround); - } - else - { - x = dataTypes.ReadNextDouble(packetData); - y = dataTypes.ReadNextDouble(packetData); - z = dataTypes.ReadNextDouble(packetData); - dataTypes.ReadNextByte(packetData); // Yaw - dataTypes.ReadNextByte(packetData); // Pitch - var isOnGround = dataTypes.ReadNextBool(packetData); - handler.OnEntityTeleport(entityId, x, y, z, isOnGround); - } - } - - break; - case PacketTypesIn.UpdateHealth: - var health = dataTypes.ReadNextFloat(packetData); - var food = protocolVersion >= MC_1_8_Version - ? dataTypes.ReadNextVarInt(packetData) - : dataTypes.ReadNextShort(packetData); - dataTypes.ReadNextFloat(packetData); // Food Saturation - handler.OnUpdateHealth(health, food); - break; - case PacketTypesIn.SetExperience: - var experienceBar = dataTypes.ReadNextFloat(packetData); - var level = dataTypes.ReadNextVarInt(packetData); - var totalExperience = dataTypes.ReadNextVarInt(packetData); - handler.OnSetExperience(experienceBar, level, totalExperience); - break; - case PacketTypesIn.Explosion: - Location explosionLocation; - float explosionStrength; - int explosionBlockCount; - - if (protocolVersion >= MC_1_21_2_Version) - { - explosionLocation = new(dataTypes.ReadNextDouble(packetData), - dataTypes.ReadNextDouble(packetData), dataTypes.ReadNextDouble(packetData)); - - if (protocolVersion >= MC_1_21_9_Version) - { - // 1.21.9+: added radius (float), blockCount (int), and blockParticles (WeightedList) - explosionStrength = dataTypes.ReadNextFloat(packetData); // Radius - explosionBlockCount = dataTypes.ReadNextInt(packetData); // Block count - } - else - { - // 1.21.2–1.21.8: no strength/block-count fields - explosionStrength = 0; - explosionBlockCount = 0; - } - - if (dataTypes.ReadNextBool(packetData)) // Has player knockback - { - dataTypes.ReadNextDouble(packetData); // Knockback X - dataTypes.ReadNextDouble(packetData); // Knockback Y - dataTypes.ReadNextDouble(packetData); // Knockback Z - } - - dataTypes.ReadParticleData(packetData, itemPalette); // Explosion particle - - var soundHolderId = dataTypes.ReadNextVarInt(packetData); - if (soundHolderId == 0) - { - dataTypes.ReadNextString(packetData); // Sound ResourceLocation - if (dataTypes.ReadNextBool(packetData)) - dataTypes.ReadNextFloat(packetData); // Fixed range - } - - if (protocolVersion >= MC_1_21_9_Version) - { - // 1.21.9+: WeightedList blockParticles - // Each entry: particle + float scaling + float speed + VarInt weight - var blockParticleCount = dataTypes.ReadNextVarInt(packetData); - for (var i = 0; i < blockParticleCount; i++) - { - dataTypes.ReadParticleData(packetData, itemPalette); // Particle type - dataTypes.ReadNextFloat(packetData); // Scaling - dataTypes.ReadNextFloat(packetData); // Speed - dataTypes.ReadNextVarInt(packetData); // Weight - } - } - } - else - { - if (protocolVersion >= MC_1_19_3_Version) - explosionLocation = new(dataTypes.ReadNextDouble(packetData), - dataTypes.ReadNextDouble(packetData), dataTypes.ReadNextDouble(packetData)); - else - explosionLocation = new(dataTypes.ReadNextFloat(packetData), - dataTypes.ReadNextFloat(packetData), dataTypes.ReadNextFloat(packetData)); - - explosionStrength = dataTypes.ReadNextFloat(packetData); - explosionBlockCount = protocolVersion >= MC_1_17_Version - ? dataTypes.ReadNextVarInt(packetData) - : dataTypes.ReadNextInt(packetData); - - for (var i = 0; i < explosionBlockCount; i++) - dataTypes.ReadNextByteArray(packetData, 3); - - dataTypes.ReadNextFloat(packetData); // Player Motion X - dataTypes.ReadNextFloat(packetData); // Player Motion Y - dataTypes.ReadNextFloat(packetData); // Player Motion Z - - if (protocolVersion >= MC_1_20_4_Version) - { - dataTypes.ReadNextVarInt(packetData); // Block Interaction - dataTypes.ReadParticleData(packetData, itemPalette); // Small Explosion Particles - dataTypes.ReadParticleData(packetData, itemPalette); // Large Explosion Particles - - var soundHolderId = dataTypes.ReadNextVarInt(packetData); - if (soundHolderId == 0) - { - dataTypes.ReadNextString(packetData); // Sound ResourceLocation - if (dataTypes.ReadNextBool(packetData)) - dataTypes.ReadNextFloat(packetData); // Fixed range - } - } - } - - handler.OnExplosion(explosionLocation, explosionStrength, explosionBlockCount); - break; - case PacketTypesIn.NamedSoundEffect: - { - string? soundName = dataTypes.ReadNextString(packetData); - int category = dataTypes.ReadNextVarInt(packetData); - double x = dataTypes.ReadNextInt(packetData) / 8.0D; - double y = dataTypes.ReadNextInt(packetData) / 8.0D; - double z = dataTypes.ReadNextInt(packetData) / 8.0D; - float volume = dataTypes.ReadNextFloat(packetData); - float pitch = protocolVersion < MC_1_10_Version - ? dataTypes.ReadNextByte(packetData) / 63.0f - : dataTypes.ReadNextFloat(packetData); - - handler.OnSoundEffect(soundName, new Location(x, y, z), category, volume, pitch, null); - break; - } - case PacketTypesIn.SoundEffect: - { - string? soundName; - if (protocolVersion >= MC_1_19_Version) - soundName = ReadSoundEventHolderName(packetData); - else - { - dataTypes.ReadNextVarInt(packetData); // Sound id - soundName = null; - } - - if (protocolVersion < MC_1_19_Version && packetData.Count < 21) - break; - - int category = dataTypes.ReadNextVarInt(packetData); - double x = dataTypes.ReadNextInt(packetData) / 8.0D; - double y = dataTypes.ReadNextInt(packetData) / 8.0D; - double z = dataTypes.ReadNextInt(packetData) / 8.0D; - float volume = dataTypes.ReadNextFloat(packetData); - float pitch = protocolVersion < MC_1_10_Version - ? dataTypes.ReadNextByte(packetData) / 63.0f - : dataTypes.ReadNextFloat(packetData); - - if (protocolVersion >= MC_1_19_Version) - dataTypes.ReadNextLong(packetData); // Seed - - handler.OnSoundEffect(soundName, new Location(x, y, z), category, volume, pitch, null); - break; - } - case PacketTypesIn.EntitySoundEffect: - { - string? soundName; - if (protocolVersion >= MC_1_19_Version) - soundName = ReadSoundEventHolderName(packetData); - else - { - dataTypes.ReadNextVarInt(packetData); // Sound id - soundName = null; - } - - int category = dataTypes.ReadNextVarInt(packetData); - int entityId = dataTypes.ReadNextVarInt(packetData); - float volume = dataTypes.ReadNextFloat(packetData); - float pitch = dataTypes.ReadNextFloat(packetData); - - if (protocolVersion >= MC_1_19_Version) - dataTypes.ReadNextLong(packetData); // Seed - - handler.OnSoundEffect(soundName, null, category, volume, pitch, entityId); - break; - } - case PacketTypesIn.HeldItemChange: - case PacketTypesIn.SetHeldSlot: - var heldSlot = protocolVersion >= MC_1_21_4_Version - ? dataTypes.ReadNextVarInt(packetData) - : dataTypes.ReadNextByte(packetData); - handler.OnHeldItemChange((byte)heldSlot); - break; - case PacketTypesIn.ScoreboardObjective: - var objectiveName = dataTypes.ReadNextString(packetData); - var mode = dataTypes.ReadNextByte(packetData); - - var objectiveValue = string.Empty; - var objectiveType = -1; - var numberFormat = 0; - - if (mode is 0 or 2) - { - objectiveValue = dataTypes.ReadNextChat(packetData); - objectiveType = dataTypes.ReadNextVarInt(packetData); - - if (protocolVersion >= MC_1_20_4_Version) - { - if (dataTypes.ReadNextBool(packetData)) // Has Number Format - { - numberFormat = dataTypes.ReadNextVarInt(packetData); // Number Format - switch (numberFormat) - { - case 1: // styled - dataTypes.ReadNextNbt(packetData); // Styling compound tag - break; - case 2: // fixed - dataTypes.ReadNextChat(packetData); // Content text component - break; - } - } - } - } - - handler.OnScoreboardObjective(objectiveName, mode, objectiveValue, objectiveType, numberFormat); - break; - case PacketTypesIn.UpdateScore: - var entityName = dataTypes.ReadNextString(packetData); - - var action3 = 0; - var objectiveName3 = string.Empty; - var objectiveValue2 = -1; - var objectiveDisplayName3 = string.Empty; - var numberFormat2 = 0; - - if (protocolVersion >= MC_1_20_4_Version) - { - objectiveName3 = dataTypes.ReadNextString(packetData); // Objective Name - objectiveValue2 = dataTypes.ReadNextVarInt(packetData); // Value - - if (dataTypes.ReadNextBool(packetData)) // Has Display Name - objectiveDisplayName3 = dataTypes.ReadNextChat(packetData); - - if (dataTypes.ReadNextBool(packetData)) // Has Number Format - { - numberFormat2 = dataTypes.ReadNextVarInt(packetData); // Number Format - switch (numberFormat2) - { - case 1: // styled - dataTypes.ReadNextNbt(packetData); // Styling compound tag - break; - case 2: // fixed - dataTypes.ReadNextChat(packetData); // Content text component - break; - } - } - } - else - { - action3 = protocolVersion >= MC_1_18_2_Version - ? dataTypes.ReadNextVarInt(packetData) - : dataTypes.ReadNextByte(packetData); - - if (action3 != 1 || protocolVersion >= MC_1_8_Version) - objectiveName3 = dataTypes.ReadNextString(packetData); - - if (action3 != 1) - objectiveValue2 = dataTypes.ReadNextVarInt(packetData); - } - - handler.OnUpdateScore(entityName, action3, objectiveName3, objectiveDisplayName3, objectiveValue2, - numberFormat2); - break; - case PacketTypesIn.Teams: - // Wire format per version: - // All versions: name (string), method (byte) - // 1.7.x method 0/2: - // displayName (string), prefix (string), suffix (string), - // friendlyFire (byte) - // 1.8/1.8.9 method 0/2: - // displayName (string), prefix (string), suffix (string), - // options (byte), nameTagVisibility, color (byte) - // 1.9-1.12.2 method 0/2: - // displayName (string), prefix (string), suffix (string), - // options (byte), nameTagVisibility, collisionRule, - // color (byte) - // 1.13-1.21.4 method 0/2: - // displayName (component), options (byte), - // nameTagVisibility, collisionRule, color (VarInt), - // prefix (component), suffix (component) - // 1.21.5-26.1 method 0/2: - // displayName (component), options (byte), - // nameTagVisibility (VarInt), collisionRule (VarInt), - // color (VarInt), prefix (component), suffix (component) - // 26.2+ method 0/2: - // displayName (component), prefix (component), - // suffix (component), nameTagVisibility (VarInt), - // collisionRule (VarInt), color (Optional), - // options (byte) - // 1.7.x method 0/3/4: players list (Short count + strings) - // 1.8+ method 0/3/4: players list (VarInt count + strings) - var teamName = dataTypes.ReadNextString(packetData); - var teamMethod = dataTypes.ReadNextByte(packetData); - - var teamDisplayName = string.Empty; - byte teamFriendlyFlags = 0; - var teamNameTagVisibility = string.Empty; - var teamCollisionRule = string.Empty; - var teamColor = -1; - var teamPrefix = string.Empty; - var teamSuffix = string.Empty; - - if (teamMethod is 0 or 2) - { - if (protocolVersion < MC_1_13_Version) - { - teamDisplayName = dataTypes.ReadNextString(packetData); - teamPrefix = dataTypes.ReadNextString(packetData); - teamSuffix = dataTypes.ReadNextString(packetData); - teamFriendlyFlags = dataTypes.ReadNextByte(packetData); - - if (protocolVersion >= MC_1_8_Version) - { - teamNameTagVisibility = dataTypes.ReadNextString(packetData); - - if (protocolVersion >= MC_1_9_Version) - teamCollisionRule = dataTypes.ReadNextString(packetData); - - teamColor = unchecked((sbyte)dataTypes.ReadNextByte(packetData)); - } - } - else if (protocolVersion >= MC_26_2_Version) - { - teamDisplayName = dataTypes.ReadNextChat(packetData); - teamPrefix = dataTypes.ReadNextChat(packetData); - teamSuffix = dataTypes.ReadNextChat(packetData); - - // STREAM_CODEC: 0=always, 1=never, 2=hideForOtherTeams, 3=hideForOwnTeam - teamNameTagVisibility = dataTypes.ReadNextVarInt(packetData) switch - { - 0 => "always", - 1 => "never", - 2 => "hideForOtherTeams", - 3 => "hideForOwnTeam", - _ => "always" - }; - - // STREAM_CODEC: 0=always, 1=never, 2=pushOtherTeams, 3=pushOwnTeam - teamCollisionRule = dataTypes.ReadNextVarInt(packetData) switch - { - 0 => "always", - 1 => "never", - 2 => "pushOtherTeams", - 3 => "pushOwnTeam", - _ => "always" - }; - - // Optional: bool + VarInt id (ids match legacy color ordinals 0-15) - teamColor = dataTypes.ReadNextBool(packetData) - ? dataTypes.ReadNextVarInt(packetData) - : -1; - - teamFriendlyFlags = dataTypes.ReadNextByte(packetData); - } - else - { - teamDisplayName = dataTypes.ReadNextChat(packetData); - teamFriendlyFlags = dataTypes.ReadNextByte(packetData); - - // nameTagVisibility - if (protocolVersion >= MC_1_21_5_Version) - { - // STREAM_CODEC: 0=always, 1=never, 2=hideForOtherTeams, 3=hideForOwnTeam - teamNameTagVisibility = dataTypes.ReadNextVarInt(packetData) switch - { - 0 => "always", - 1 => "never", - 2 => "hideForOtherTeams", - 3 => "hideForOwnTeam", - _ => "always" - }; - } - else - { - teamNameTagVisibility = dataTypes.ReadNextString(packetData); - } - - // collisionRule - if (protocolVersion >= MC_1_21_5_Version) - { - // STREAM_CODEC: 0=always, 1=never, 2=pushOtherTeams, 3=pushOwnTeam - teamCollisionRule = dataTypes.ReadNextVarInt(packetData) switch - { - 0 => "always", - 1 => "never", - 2 => "pushOtherTeams", - 3 => "pushOwnTeam", - _ => "always" - }; - } - else - { - teamCollisionRule = dataTypes.ReadNextString(packetData); - } - - teamColor = dataTypes.ReadNextVarInt(packetData); - teamPrefix = dataTypes.ReadNextChat(packetData); - teamSuffix = dataTypes.ReadNextChat(packetData); - } - } - - var teamPlayers = new List(); - if (teamMethod is 0 or 3 or 4) - { - int playerCount = protocolVersion < MC_1_8_Version - ? dataTypes.ReadNextShort(packetData) - : dataTypes.ReadNextVarInt(packetData); - for (int i = 0; i < playerCount; i++) - teamPlayers.Add(dataTypes.ReadNextString(packetData)); - } - - handler.OnTeam(teamName, teamMethod, teamDisplayName, teamFriendlyFlags, - teamNameTagVisibility, teamCollisionRule, teamColor, - teamPrefix, teamSuffix, teamPlayers); - break; - case PacketTypesIn.BlockChangedAck: - handler.OnBlockChangeAck(dataTypes.ReadNextVarInt(packetData)); - break; - case PacketTypesIn.BlockBreakAnimation: - if (handler.GetEntityHandlingEnabled() && handler.GetTerrainEnabled()) - { - var playerId = dataTypes.ReadNextVarInt(packetData); - var blockLocation = dataTypes.ReadNextLocation(packetData); - var stage = dataTypes.ReadNextByte(packetData); - handler.OnBlockBreakAnimation(playerId, blockLocation, stage); - } - - break; - case PacketTypesIn.EntityAnimation: - if (handler.GetEntityHandlingEnabled()) - { - var playerId = dataTypes.ReadNextVarInt(packetData); - var animation = dataTypes.ReadNextByte(packetData); - handler.OnEntityAnimation(playerId, animation); - } - - break; - - case PacketTypesIn.OpenSignEditor: - var signLocation = dataTypes.ReadNextLocation(packetData); - var isFrontText = true; - - if (protocolVersion >= MC_1_20_Version) - isFrontText = dataTypes.ReadNextBool(packetData); - - // TODO: Use - break; - case PacketTypesIn.BlockEntityData: - if (handler.GetTerrainEnabled() && protocolVersion >= MC_1_17_Version) - { - var location_ = dataTypes.ReadNextLocation(packetData); - dataTypes.ReadNextVarInt(packetData); // Block entity type registry id - var nbt = dataTypes.ReadNextNbt(packetData); - handler.OnBlockEntityData(location_, nbt); - } - - break; - - case PacketTypesIn.SetTickingState: - dataTypes.ReadNextFloat(packetData); - dataTypes.ReadNextBool(packetData); - break; - - case PacketTypesIn.CookieRequest: - var cookieName = dataTypes.ReadNextString(packetData); - var cookieData = null as byte[]; - McClient.Instance?.GetCookie(cookieName, out cookieData); - SendCookieResponse(cookieName, cookieData); - break; - - case PacketTypesIn.StoreCookie: - var cookieName2 = dataTypes.ReadNextString(packetData); - var cookieData2 = dataTypes.ReadNextByteArray(packetData); - McClient.Instance?.SetCookie(cookieName2, cookieData2); - break; - - case PacketTypesIn.Transfer: - var host = dataTypes.ReadNextString(packetData); - var port = dataTypes.ReadNextVarInt(packetData); - - McClient.Instance?.Transfer(host, port); - break; - - case PacketTypesIn.ProjectilePower: - dataTypes.ReadNextVarInt(packetData); // Entity ID - if (protocolVersion >= MC_1_21_Version) - { - dataTypes.ReadNextDouble(packetData); // Acceleration Power - } - else - { - dataTypes.ReadNextDouble(packetData); // X Power - dataTypes.ReadNextDouble(packetData); // Y Power - dataTypes.ReadNextDouble(packetData); // Z Power - } - break; - - case PacketTypesIn.CustomReportDetails: - var detailsCount = dataTypes.ReadNextVarInt(packetData); - for (var i = 0; i < detailsCount; i++) - { - dataTypes.ReadNextString(packetData); // Title - dataTypes.ReadNextString(packetData); // Description - } - break; - - case PacketTypesIn.ServerLinks: - handler.OnServerLinksUpdated(ReadServerLinks(packetData)); - break; - - case PacketTypesIn.ClearDialog: - handler.OnDialogCleared(); - break; - - case PacketTypesIn.ShowDialog: - HandleShowDialog(packetData, DialogPhase.Play); - break; - - // 1.21.2+ new packets - case PacketTypesIn.SetCursorItem: - if (handler.GetInventoryEnabled()) - { - dataTypes.ReadNextItemSlot(packetData, itemPalette); - } - break; - - case PacketTypesIn.SetPlayerInventory: - if (handler.GetInventoryEnabled()) - { - var slotId = dataTypes.ReadNextVarInt(packetData); - var item = dataTypes.ReadNextItemSlot(packetData, itemPalette); - handler.OnSetSlot(0, (short)slotId, item, -1); - } - break; - - case PacketTypesIn.EntityPositionSync: - if (handler.GetEntityHandlingEnabled()) - { - var entityId = dataTypes.ReadNextVarInt(packetData); - var x = dataTypes.ReadNextDouble(packetData); - var y = dataTypes.ReadNextDouble(packetData); - var z = dataTypes.ReadNextDouble(packetData); - dataTypes.ReadNextDouble(packetData); // Delta movement X - dataTypes.ReadNextDouble(packetData); // Delta movement Y - dataTypes.ReadNextDouble(packetData); // Delta movement Z - var yaw = dataTypes.ReadNextFloat(packetData); - var pitch = dataTypes.ReadNextFloat(packetData); - var isOnGround = dataTypes.ReadNextBool(packetData); - handler.OnEntityTeleport(entityId, x, y, z, isOnGround); - } - break; - - case PacketTypesIn.PlayerRotation: - dataTypes.ReadNextFloat(packetData); // Yaw - dataTypes.ReadNextFloat(packetData); // Pitch - break; - - case PacketTypesIn.MoveMinecartAlongTrack: - { - dataTypes.ReadNextVarInt(packetData); // Entity ID - var stepCount = dataTypes.ReadNextVarInt(packetData); - for (var i = 0; i < stepCount; i++) - { - dataTypes.ReadNextDouble(packetData); // Pos X - dataTypes.ReadNextDouble(packetData); // Pos Y - dataTypes.ReadNextDouble(packetData); // Pos Z - dataTypes.ReadNextDouble(packetData); // Movement X - dataTypes.ReadNextDouble(packetData); // Movement Y - dataTypes.ReadNextDouble(packetData); // Movement Z - dataTypes.ReadNextByte(packetData); // Yaw - dataTypes.ReadNextByte(packetData); // Pitch - dataTypes.ReadNextFloat(packetData); // Weight - } - } - break; - - case PacketTypesIn.UnlockRecipes: - if (protocolVersion >= MC_1_13_Version) - HandleUnlockRecipes(packetData); - break; - - case PacketTypesIn.RecipeBookAdd: - if (protocolVersion >= MC_1_21_2_Version) - { - try - { - HandleRecipeBookAdd(packetData); - } - catch - { - // Ignore this packet due to oversized VarInt from anti-MCC server - } - } - break; - case PacketTypesIn.RecipeBookRemove: - if (protocolVersion >= MC_1_21_2_Version) - handler.OnRecipeBookRemove(ReadRecipeBookDisplayIds(packetData)); - break; - case PacketTypesIn.RecipeBookSettings: - break; - - case PacketTypesIn.Statistics: - if (protocolVersion < MC_1_12_Version) - HandleLegacyStatistics(packetData); - break; - - case PacketTypesIn.Advancements: - HandleAdvancements(packetData); - break; - - case PacketTypesIn.SelectAdvancementTab: - HandleSelectAdvancementTab(packetData); - break; - - default: - return false; //Ignored packet - } - - return true; //Packet processed - } - - /// - /// Read a Holder<SoundEvent> from packet data and return its key when inline. - /// Returns null when the holder is a registry reference. - /// - private string? ReadSoundEventHolderName(Queue packetData) - { - int soundHolderId = dataTypes.ReadNextVarInt(packetData); - if (soundHolderId != 0) - return null; - - string soundName = dataTypes.ReadNextString(packetData); - bool hasFixedRange = dataTypes.ReadNextBool(packetData); - if (hasFixedRange) - dataTypes.ReadNextFloat(packetData); - return soundName; - } - - /// - /// Handle the Statistics packet for pre-1.12 legacy achievements. - /// - private void HandleLegacyStatistics(Queue packetData) - { - int statCount = dataTypes.ReadNextVarInt(packetData); - - for (int i = 0; i < statCount; i++) - { - string statId = dataTypes.ReadNextString(packetData); - int value = dataTypes.ReadNextVarInt(packetData); - - if (statId.StartsWith("achievement.", StringComparison.Ordinal)) - legacyAchievementProgress[statId] = value > 0; - } - - List added = new(LegacyAchievementCatalog.Ids.Count + legacyAchievementProgress.Count); - - foreach (string achievementId in LegacyAchievementCatalog.Ids) - added.Add(CreateLegacyAchievement(achievementId, legacyAchievementProgress.TryGetValue(achievementId, out bool completed) && completed)); - - foreach (var (achievementId, completed) in legacyAchievementProgress) - { - if (!LegacyAchievementCatalog.Contains(achievementId)) - added.Add(CreateLegacyAchievement(achievementId, completed)); - } - - handler.OnAchievementsUpdate(added, [], reset: !legacyAchievementsInitialized); - legacyAchievementsInitialized = true; - } - - /// - /// Handle the Advancements packet (1.12+). - /// - private void HandleAdvancements(Queue packetData) - { - bool reset = dataTypes.ReadNextBool(packetData); - - // --- Added advancements --- - int addedCount = dataTypes.ReadNextVarInt(packetData); - var added = new List(addedCount); - var addedDefinitions = new Dictionary> requirements)>(addedCount); - - for (int i = 0; i < addedCount; i++) - { - string id = dataTypes.ReadNextString(packetData); - - // Parent - bool hasParent = dataTypes.ReadNextBool(packetData); - if (hasParent) - dataTypes.ReadNextString(packetData); // parentId - read and discard - - // Display - string? title = null; - string? description = null; - var type = AchievementType.Task; - bool isHidden = false; - - bool hasDisplay = dataTypes.ReadNextBool(packetData); - if (hasDisplay) - { - title = dataTypes.ReadNextChat(packetData); - description = dataTypes.ReadNextChat(packetData); - dataTypes.ReadNextItemSlot(packetData, itemPalette); // icon - read and discard - - int frameType = dataTypes.ReadNextVarInt(packetData); - type = frameType switch - { - 1 => AchievementType.Challenge, - 2 => AchievementType.Goal, - _ => AchievementType.Task - }; - - int flags = dataTypes.ReadNextInt(packetData); - isHidden = (flags & 0x04) != 0; - if ((flags & 0x01) != 0) - dataTypes.ReadNextString(packetData); // background texture - read and discard - - dataTypes.ReadNextFloat(packetData); // x - dataTypes.ReadNextFloat(packetData); // y - } - - // Criteria and requirements differ by version - var requirements = new List>(); - - if (protocolVersion < MC_1_20_2_Version) - { - // Builder-based (pre-1.20.2): criteria names list, then requirements - int criteriaCount = dataTypes.ReadNextVarInt(packetData); - for (int c = 0; c < criteriaCount; c++) - dataTypes.ReadNextString(packetData); // criterion name only, no trigger data - } - - // Requirements (all versions) - int reqGroupCount = dataTypes.ReadNextVarInt(packetData); - for (int g = 0; g < reqGroupCount; g++) - { - int groupSize = dataTypes.ReadNextVarInt(packetData); - var group = new List(groupSize); - for (int s = 0; s < groupSize; s++) - group.Add(dataTypes.ReadNextString(packetData)); - requirements.Add(group); - } - - // sendsTelemetryEvent (added in 1.20, present in all versions since) - if (protocolVersion >= MC_1_20_Version) - dataTypes.ReadNextBool(packetData); - - addedDefinitions[id] = (title, description, type, isHidden, requirements); - } - - // --- Removed advancement IDs --- - int removedCount = dataTypes.ReadNextVarInt(packetData); - var removedIds = new List(removedCount); - for (int i = 0; i < removedCount; i++) - removedIds.Add(dataTypes.ReadNextString(packetData)); - - // --- Progress updates --- - int progressCount = dataTypes.ReadNextVarInt(packetData); - var progressMap = new Dictionary>(progressCount); - - for (int i = 0; i < progressCount; i++) - { - string id = dataTypes.ReadNextString(packetData); - int criteriaEntries = dataTypes.ReadNextVarInt(packetData); - var criteria = new Dictionary(criteriaEntries); - - for (int c = 0; c < criteriaEntries; c++) - { - string criterionName = dataTypes.ReadNextString(packetData); - bool isDone = dataTypes.ReadNextBool(packetData); - if (isDone) - dataTypes.ReadNextLong(packetData); // epochMs - read and discard - criteria[criterionName] = isDone; - } - - progressMap[id] = criteria; - } - - // showAdvancements boolean added in 1.21.11+ - if (protocolVersion >= MC_1_21_11_Version) - dataTypes.ReadNextBool(packetData); // showAdvancements - read and discard - - // Build Achievement records from definitions + progress - foreach (var (id, def) in addedDefinitions) - { - progressMap.TryGetValue(id, out var criteria); - criteria ??= new Dictionary(); - - bool isCompleted = ComputeAdvancementCompleted(def.requirements, criteria); - - var readOnlyReqs = def.requirements.ConvertAll>(static g => g.AsReadOnly()); - added.Add(new Achievement(id, def.title, def.description, def.type, def.isHidden, isCompleted, readOnlyReqs.AsReadOnly(), criteria)); - } - - // Also build Achievement records for progress-only updates (no definition change) - foreach (var (id, criteria) in progressMap) - { - if (!addedDefinitions.ContainsKey(id)) - added.Add(new Achievement(id, null, null, AchievementType.Task, false, false, [], criteria)); - } - - handler.OnAchievementsUpdate(added, removedIds, reset); - } - - private static Achievement CreateLegacyAchievement(string id, bool isCompleted) - { - Dictionary criteria = new(StringComparer.Ordinal) - { - [id] = isCompleted - }; - IReadOnlyList[] requirements = [[id]]; - return new Achievement(id, null, null, AchievementType.Legacy, false, isCompleted, requirements, criteria); - } - - /// - /// Compute whether an advancement is completed based on AND-of-ORs requirements. - /// - private static bool ComputeAdvancementCompleted(List> requirements, Dictionary criteria) - { - // Zero requirements = automatically done - if (requirements.Count == 0) - return true; - - // Each OR-group must have at least one satisfied criterion - foreach (var group in requirements) - { - bool groupSatisfied = false; - foreach (string criterion in group) - { - if (criteria.TryGetValue(criterion, out bool done) && done) - { - groupSatisfied = true; - break; - } - } - if (!groupSatisfied) - return false; - } - return true; - } - - /// - /// Handle the SelectAdvancementTab packet. - /// - private void HandleSelectAdvancementTab(Queue packetData) - { - bool hasTab = dataTypes.ReadNextBool(packetData); - string? tabId = hasTab ? dataTypes.ReadNextString(packetData) : null; - handler.OnSelectAdvancementTab(tabId); - } - - private void HandleUnlockRecipes(Queue packetData) - { - int action = dataTypes.ReadNextVarInt(packetData); - if (!SkipRecipeBookSettings(packetData)) - return; - - string[] recipeIds = ReadRecipeBookRecipeIds(packetData); - RecipeBookRecipeEntry[] recipeEntries = recipeIds.Select(static recipeId => new RecipeBookRecipeEntry(recipeId, recipeId)).ToArray(); - - switch (action) - { - case 0: - handler.OnRecipeBookAdd(recipeEntries, replace: true); - // INIT packets also include a second "to be displayed" recipe list. - // MCC only needs the unlocked recipe identifiers for listing/crafting. - _ = ReadRecipeBookRecipeIds(packetData); - break; - case 1: - case 3: - // Action 3 is the silent-add variant, so MCC tracks it like a regular add. - handler.OnRecipeBookAdd(recipeEntries, replace: false); - break; - case 2: - handler.OnRecipeBookRemove(recipeIds); - break; - } - } - - private void HandleRecipeBookAdd(Queue packetData) - { - int entryCount = dataTypes.ReadNextVarInt(packetData); - RecipeBookRecipeEntry[] recipeEntries = new RecipeBookRecipeEntry[entryCount]; - - // 1.21.2+ RecipeBookAdd contains one display entry per recipe: - // RecipeDisplayEntry (display id, recipe display, group, category, optional requirements), then flags. - for (int i = 0; i < entryCount; i++) - { - recipeEntries[i] = ReadRecipeBookDisplayEntry(packetData); - _ = dataTypes.ReadNextByte(packetData); // flags - } - - bool replace = dataTypes.ReadNextBool(packetData); - handler.OnRecipeBookAdd(recipeEntries, replace); - } - - private string[] ReadRecipeBookRecipeIds(Queue packetData) - { - int recipeCount = dataTypes.ReadNextVarInt(packetData); - string[] recipeIds = new string[recipeCount]; - - for (int i = 0; i < recipeCount; i++) - recipeIds[i] = dataTypes.ReadNextString(packetData); - - return recipeIds; - } - - private string[] ReadRecipeBookDisplayIds(Queue packetData) - { - int recipeCount = dataTypes.ReadNextVarInt(packetData); - string[] recipeIds = new string[recipeCount]; - - for (int i = 0; i < recipeCount; i++) - recipeIds[i] = dataTypes.ReadNextVarInt(packetData).ToString(CultureInfo.InvariantCulture); - - return recipeIds; - } - - private RecipeBookRecipeEntry ReadRecipeBookDisplayEntry(Queue packetData) - { - int displayId = dataTypes.ReadNextVarInt(packetData); - string resultLabel = ReadRecipeDisplayResultLabel(packetData); - - _ = dataTypes.ReadNextVarInt(packetData); // Optional group, encoded as varint+1 or 0 - _ = dataTypes.ReadNextVarInt(packetData); // Recipe book category registry id - SkipOptionalCraftingRequirements(packetData); - - string commandId = displayId.ToString(CultureInfo.InvariantCulture); - string displayText = $"{commandId}: {resultLabel}"; - return new RecipeBookRecipeEntry(commandId, displayText); - } - - private string ReadRecipeDisplayResultLabel(Queue packetData) - { - int displayType = dataTypes.ReadNextVarInt(packetData); - return displayType switch - { - 0 => ReadShapelessRecipeDisplayResultLabel(packetData), - 1 => ReadShapedRecipeDisplayResultLabel(packetData), - 2 => ReadFurnaceRecipeDisplayResultLabel(packetData), - 3 => ReadStonecutterRecipeDisplayResultLabel(packetData), - 4 => ReadSmithingRecipeDisplayResultLabel(packetData), - _ => $"recipe_display_{displayType}", - }; - } - - private string ReadShapelessRecipeDisplayResultLabel(Queue packetData) - { - int ingredientCount = dataTypes.ReadNextVarInt(packetData); - for (int i = 0; i < ingredientCount; i++) - _ = ReadSlotDisplayLabel(packetData); - - string result = ReadSlotDisplayLabel(packetData); - _ = ReadSlotDisplayLabel(packetData); // crafting station - return result; - } - - private string ReadShapedRecipeDisplayResultLabel(Queue packetData) - { - _ = dataTypes.ReadNextVarInt(packetData); // width - _ = dataTypes.ReadNextVarInt(packetData); // height - int ingredientCount = dataTypes.ReadNextVarInt(packetData); - for (int i = 0; i < ingredientCount; i++) - _ = ReadSlotDisplayLabel(packetData); - - string result = ReadSlotDisplayLabel(packetData); - _ = ReadSlotDisplayLabel(packetData); // crafting station - return result; - } - - private string ReadFurnaceRecipeDisplayResultLabel(Queue packetData) - { - _ = ReadSlotDisplayLabel(packetData); // ingredient - _ = ReadSlotDisplayLabel(packetData); // fuel - string result = ReadSlotDisplayLabel(packetData); - _ = ReadSlotDisplayLabel(packetData); // crafting station - _ = dataTypes.ReadNextVarInt(packetData); // duration - _ = dataTypes.ReadNextFloat(packetData); // experience - return result; - } - - private string ReadStonecutterRecipeDisplayResultLabel(Queue packetData) - { - _ = ReadSlotDisplayLabel(packetData); // input - string result = ReadSlotDisplayLabel(packetData); - _ = ReadSlotDisplayLabel(packetData); // crafting station - return result; - } - - private string ReadSmithingRecipeDisplayResultLabel(Queue packetData) - { - _ = ReadSlotDisplayLabel(packetData); // template - _ = ReadSlotDisplayLabel(packetData); // base - _ = ReadSlotDisplayLabel(packetData); // addition - string result = ReadSlotDisplayLabel(packetData); - _ = ReadSlotDisplayLabel(packetData); // crafting station - return result; - } - - private string ReadSlotDisplayLabel(Queue packetData) - { - int slotDisplayType = dataTypes.ReadNextVarInt(packetData); - - // 26.1 changed the slot display registry order, inserting 3 new types: - // Pre-26.1: 0=empty, 1=any_fuel, 2=item, 3=item_stack, 4=tag, 5=smithing_trim, 6=with_remainder, 7=composite - // 26.1+: 0=empty, 1=any_fuel, 2=with_any_potion, 3=only_with_component, 4=item, 5=item_stack, 6=tag, 7=dyed, 8=smithing_trim, 9=with_remainder, 10=composite - if (protocolVersion >= MC_26_1_Version) - { - return slotDisplayType switch - { - 0 => "Empty", - 1 => "Any Fuel", - 2 => ReadWithAnyPotionSlotDisplayLabel(packetData), - 3 => ReadOnlyWithComponentSlotDisplayLabel(packetData), - 4 => Item.GetTypeString(itemPalette.FromId(dataTypes.ReadNextVarInt(packetData))), - 5 => ReadItemStackTemplateLabel(packetData), - 6 => "#" + dataTypes.ReadNextString(packetData), - 7 => ReadDyedSlotDisplayLabel(packetData), - 8 => ReadSmithingTrimSlotDisplayLabel(packetData), - 9 => ReadWithRemainderSlotDisplayLabel(packetData), - 10 => ReadCompositeSlotDisplayLabel(packetData), - _ => $"slot_display_{slotDisplayType}", - }; - } - - return slotDisplayType switch - { - 0 => "Empty", - 1 => "Any Fuel", - 2 => Item.GetTypeString(itemPalette.FromId(dataTypes.ReadNextVarInt(packetData))), - 3 => dataTypes.ReadNextItemSlot(packetData, itemPalette)?.GetTypeString() ?? "Empty", - 4 => "#" + dataTypes.ReadNextString(packetData), - 5 => ReadSmithingTrimSlotDisplayLabel(packetData), - 6 => ReadWithRemainderSlotDisplayLabel(packetData), - 7 => ReadCompositeSlotDisplayLabel(packetData), - _ => $"slot_display_{slotDisplayType}", - }; - } - - /// - /// Reads a with_any_potion slot display (26.1+): contains a nested SlotDisplay. - /// - private string ReadWithAnyPotionSlotDisplayLabel(Queue packetData) - { - return ReadSlotDisplayLabel(packetData); - } - - /// - /// Reads an only_with_component slot display (26.1+): contains a nested SlotDisplay and a DataComponentType VarInt ID. - /// - private string ReadOnlyWithComponentSlotDisplayLabel(Queue packetData) - { - string sourceLabel = ReadSlotDisplayLabel(packetData); - _ = dataTypes.ReadNextVarInt(packetData); // DataComponentType registry id - return sourceLabel; - } - - /// - /// Reads a dyed slot display (26.1+): contains two nested SlotDisplays (dye + target). - /// - private string ReadDyedSlotDisplayLabel(Queue packetData) - { - _ = ReadSlotDisplayLabel(packetData); // dye - string targetLabel = ReadSlotDisplayLabel(packetData); // target - return targetLabel; - } - - private string ReadSmithingTrimSlotDisplayLabel(Queue packetData) - { - string baseLabel = ReadSlotDisplayLabel(packetData); - _ = ReadSlotDisplayLabel(packetData); // material - _ = dataTypes.ReadNextVarInt(packetData); // trim pattern registry id - return baseLabel; - } - - private string ReadWithRemainderSlotDisplayLabel(Queue packetData) - { - string inputLabel = ReadSlotDisplayLabel(packetData); - _ = ReadSlotDisplayLabel(packetData); // remainder - return inputLabel; - } - - private string ReadCompositeSlotDisplayLabel(Queue packetData) - { - int optionCount = dataTypes.ReadNextVarInt(packetData); - string label = "Composite"; - - for (int i = 0; i < optionCount; i++) - { - string optionLabel = ReadSlotDisplayLabel(packetData); - if (label == "Composite" && optionLabel is not "Empty" and not "Composite") - label = optionLabel; - } - - return label; - } - - /// - /// Read an ItemStackTemplate (26.1+) which encodes fields in a different order - /// than ItemStack: item_id (VarInt), count (VarInt), DataComponentPatch. - /// - private string ReadItemStackTemplateLabel(Queue packetData) - { - return dataTypes.ReadNextItemStackTemplate(packetData, itemPalette).GetTypeString(); - } - - private void SkipOptionalCraftingRequirements(Queue packetData) - { - if (!dataTypes.ReadNextBool(packetData)) - return; - - int ingredientCount = dataTypes.ReadNextVarInt(packetData); - for (int i = 0; i < ingredientCount; i++) - SkipItemHolderSet(packetData); - } - - private void SkipItemHolderSet(Queue packetData) - { - int entryCount = dataTypes.ReadNextVarInt(packetData) - 1; - if (entryCount == -1) - { - _ = dataTypes.ReadNextString(packetData); - return; - } - - for (int i = 0; i < entryCount; i++) - _ = dataTypes.ReadNextVarInt(packetData); - } - - private bool SkipRecipeBookSettings(Queue packetData) - { - // MC 1.13-1.16.1 uses 4 booleans for the crafting/smelting recipe book states. - // MC 1.16.2+ expands this to 8 booleans through RecipeBookSettings. - int boolCount = protocolVersion >= MC_1_16_2_Version ? 8 : 4; - if (packetData.Count < boolCount) - return false; - - for (int i = 0; i < boolCount; i++) - _ = dataTypes.ReadNextBool(packetData); - - return true; - } - - /// - /// Start the updating thread. Should be called after login success. - /// - private void StartUpdating() - { - Thread threadUpdater = new(new ParameterizedThreadStart(Updater)) - { - Name = "ProtocolPacketHandler" - }; - netMain = new Tuple(threadUpdater, new CancellationTokenSource()); - threadUpdater.Start(netMain.Item2.Token); - - Thread threadReader = new(new ParameterizedThreadStart(PacketReader)) - { - Name = "ProtocolPacketReader" - }; - netReader = new Tuple(threadReader, new CancellationTokenSource()); - threadReader.Start(netReader.Item2.Token); - } - - /// - /// Get net read thread (main thread) ID - /// - /// Net read thread ID - public int GetNetMainThreadId() - { - return netMain is not null ? netMain.Item1.ManagedThreadId : -1; - } - - /// - /// Disconnect from the server, cancel network reading. - /// - public void Dispose() - { - try - { - netMain?.Item2.Cancel(); - } - finally - { - try - { - netReader?.Item2.Cancel(); - } - finally - { - socketWrapper.Disconnect(); - McClient.Instance?.DeleteAllCookies(); - } - } - } - - /// - /// Send a packet to the server. Packet ID, compression, and encryption will be handled automatically. - /// - /// packet type - /// packet Data - private void SendPacket(PacketTypesOut packet, IEnumerable packetData) - { - SendPacket(packetPalette.GetOutgoingIdByType(packet), packetData, packet.ToString()); - } - - private void ProcessChunkBlockEntityData(int chunkX, int chunkZ, Queue packetData) - { - if (protocolVersion < MC_1_17_Version || packetData.Count == 0) - return; - - int blockEntityCount = dataTypes.ReadNextVarInt(packetData); - for (int i = 0; i < blockEntityCount; i++) - { - if (protocolVersion < MC_1_18_1_Version) - { - Dictionary? blockEntityNbt = dataTypes.ReadNextNbt(packetData); - if (blockEntityNbt.TryGetValue("x", out var nbtX) - && blockEntityNbt.TryGetValue("y", out var nbtY) - && blockEntityNbt.TryGetValue("z", out var nbtZ)) - { - handler.OnBlockEntityData( - new Location(Convert.ToInt32(nbtX), Convert.ToInt32(nbtY), Convert.ToInt32(nbtZ)), - blockEntityNbt); - } - - continue; - } - - int packedXZ = dataTypes.ReadNextByte(packetData); - int y = dataTypes.ReadNextShort(packetData); - dataTypes.ReadNextVarInt(packetData); // Block entity type registry id - Dictionary? nbt = dataTypes.ReadNextNbt(packetData); - int blockX = chunkX * Chunk.SizeX + ((packedXZ >> 4) & 0x0F); - int blockZ = chunkZ * Chunk.SizeZ + (packedXZ & 0x0F); - handler.OnBlockEntityData(new Location(blockX, y, blockZ), nbt); - } - } - - /// - /// Send a configuration packet to the server. Packet ID, compression, and encryption will be handled automatically. - /// - /// packet type - /// packet Data - private void SendPacket(ConfigurationPacketTypesOut packet, IEnumerable packetData) - { - SendPacket(packetPalette.GetOutgoingIdByTypeConfiguration(packet), packetData, packet.ToString()); - } - - private void HandleShowDialog(Queue packetData, DialogPhase phase) - { - if (phase == DialogPhase.Play) - { - var holderId = dataTypes.ReadNextVarInt(packetData); - if (holderId != 0) - { - handler.OnDialogRegistryReferenceShown(holderId - 1, phase); - return; - } - } - - var dialog = dialogNbtParser.Parse(dataTypes.ReadNextNbt(packetData)); - handler.OnDialogShown(dialog, phase); - } - - private IReadOnlyList ReadServerLinks(Queue packetData) - { - var linksCount = dataTypes.ReadNextVarInt(packetData); - List links = new(linksCount); - - for (var i = 0; i < linksCount; i++) - { - string label; - var isBuiltIn = dataTypes.ReadNextBool(packetData); - if (isBuiltIn) - label = GetKnownServerLinkLabel(dataTypes.ReadNextVarInt(packetData)); - else - label = dataTypes.ReadNextChat(packetData); - - var url = dataTypes.ReadNextString(packetData); - links.Add(new DialogServerLink(label, url)); - } - - return links; - } - - private static string GetKnownServerLinkLabel(int id) - { - return id switch - { - 0 => Translations.dialog_server_link_report_bug, - 1 => Translations.dialog_server_link_community_guidelines, - 2 => Translations.dialog_server_link_support, - 3 => Translations.dialog_server_link_status, - 4 => Translations.dialog_server_link_feedback, - 5 => Translations.dialog_server_link_community, - 6 => Translations.dialog_server_link_website, - 7 => Translations.dialog_server_link_forums, - 8 => Translations.dialog_server_link_news, - 9 => Translations.dialog_server_link_announcements, - _ => id.ToString(CultureInfo.InvariantCulture) - }; - } - - /// - /// Send a packet to the server. Compression and encryption will be handled automatically. - /// - /// packet ID - /// packet Data - private void SendPacket(int packetId, IEnumerable packetData, string? packetType = null) - { - byte[] payload = packetData as byte[] ?? packetData.ToArray(); - LogOutgoingPacket(packetId, payload.Length, packetType); - - if (handler.GetNetworkPacketCaptureEnabled()) - { - handler.OnNetworkPacket(packetId, payload.ToList(), currentState == CurrentState.Login, false); - } - - //log.Info($"[C -> S] Sending packet {packetId:X} > {dataTypes.ByteArrayToString(packetData.ToArray())}"); - - //The inner packet - byte[] packetIdBytes = DataTypes.GetVarInt(packetId); - byte[] thePacket = new byte[packetIdBytes.Length + payload.Length]; - Buffer.BlockCopy(packetIdBytes, 0, thePacket, 0, packetIdBytes.Length); - Buffer.BlockCopy(payload, 0, thePacket, packetIdBytes.Length, payload.Length); - - if (compression_treshold >= 0) //Compression enabled? - { - byte[] compressedHeader = thePacket.Length >= compression_treshold - ? DataTypes.GetVarInt(thePacket.Length) - : DataTypes.GetVarInt(0); - byte[] compressedPayload = thePacket.Length >= compression_treshold - ? ZlibUtils.Compress(thePacket) - : thePacket; - - byte[] compressedPacket = new byte[compressedHeader.Length + compressedPayload.Length]; - Buffer.BlockCopy(compressedHeader, 0, compressedPacket, 0, compressedHeader.Length); - Buffer.BlockCopy(compressedPayload, 0, compressedPacket, compressedHeader.Length, compressedPayload.Length); - thePacket = compressedPacket; - } - - //log.Debug("[C -> S] Sending packet " + packetId + " > " + dataTypes.ByteArrayToString(dataTypes.ConcatBytes(dataTypes.GetVarInt(thePacket.Length), thePacket))); - byte[] packetLengthBytes = DataTypes.GetVarInt(thePacket.Length); - byte[] fullPacket = new byte[packetLengthBytes.Length + thePacket.Length]; - Buffer.BlockCopy(packetLengthBytes, 0, fullPacket, 0, packetLengthBytes.Length); - Buffer.BlockCopy(thePacket, 0, fullPacket, packetLengthBytes.Length, thePacket.Length); - socketWrapper.SendDataRAW(fullPacket); - } - - private void SetCurrentState(CurrentState newState) - { - if (currentState == newState) - return; - - var previousState = currentState; - currentState = newState; - - if (!log.DebugEnabled) - return; - - log.PacketDebug(string.Format(Translations.debug_packet_state_change, previousState, newState)); - } - - private static bool IsPacketExcluded(string packetType) - { - var exclusions = Settings.Config.Logging.PacketDebugExclusions; - return exclusions.Count > 0 && exclusions.Contains(packetType, StringComparer.OrdinalIgnoreCase); - } - - private void LogIncomingPacket(int packetId, int payloadLength, int frameLength, bool compressed, int uncompressedLength) - { - if (!log.DebugEnabled) - return; - - var packetType = ResolveIncomingPacketType(packetId); - if (IsPacketExcluded(packetType)) - return; - - var compressionInfo = compression_treshold < 0 - ? Translations.debug_packet_compression_disabled - : compressed - ? string.Format(Translations.debug_packet_compression_compressed, uncompressedLength) - : Translations.debug_packet_compression_uncompressed; - - log.PacketDebug(string.Format(Translations.debug_packet_incoming, - currentState, - packetId, - packetType, - payloadLength, - frameLength, - compressionInfo)); - } - - private void LogOutgoingPacket(int packetId, int payloadLength, string? packetType) - { - if (!log.DebugEnabled) - return; - - var resolvedType = packetType ?? ResolveOutgoingPacketType(packetId); - if (IsPacketExcluded(resolvedType)) - return; - - log.PacketDebug(string.Format(Translations.debug_packet_outgoing, - currentState, - packetId, - resolvedType, - payloadLength, - compression_treshold)); - } - - private void LogNetworkLoopExit(string loopName, string reason) - { - if (!log.DebugEnabled) - return; - - log.PacketDebug(string.Format(Translations.debug_packet_loop_exit, - loopName, - reason, - currentState, - socketWrapper.IsConnected())); - } - - private string ResolveIncomingPacketType(int packetId) - { - return currentState switch - { - CurrentState.Login => packetId switch - { - 0x00 => "Disconnect", - 0x01 => "EncryptionRequest", - 0x02 => "LoginSuccess", - 0x03 => "SetCompression", - 0x04 => "LoginPluginRequest", - 0x05 => "CookieRequest", - _ => string.Format(Translations.debug_packet_unknown_type, packetId) - }, - CurrentState.Configuration when packetPalette.GetMappingInConfiguration().TryGetValue(packetId, out var configurationPacket) => - configurationPacket.ToString(), - CurrentState.Play when packetPalette.GetMappingIn().TryGetValue(packetId, out var playPacket) => - playPacket.ToString(), - _ => string.Format(Translations.debug_packet_unknown_type, packetId) - }; - } - - private string ResolveOutgoingPacketType(int packetId) - { - return currentState switch - { - CurrentState.Login => packetId switch - { - 0x00 => "LoginStart", - 0x01 => "EncryptionResponse", - 0x02 => "LoginPluginResponse", - 0x03 => "LoginAcknowledged", - 0x04 => "CookieResponse", - _ => string.Format(Translations.debug_packet_unknown_type, packetId) - }, - CurrentState.Configuration when packetPalette.GetMappingOutConfiguration().TryGetValue(packetId, out var configurationPacket) => - configurationPacket.ToString(), - CurrentState.Play when packetPalette.GetMappingOut().TryGetValue(packetId, out var playPacket) => - playPacket.ToString(), - _ => string.Format(Translations.debug_packet_unknown_type, packetId) - }; - } - - /// - /// Do the Minecraft login. - /// - /// True if login successful - public bool Login(PlayerKeyPair? playerKeyPair, SessionToken session, bool isTransfer = false) - { - int nextState = isTransfer && protocolVersion >= MC_1_20_6_Version ? 3 : 2; - - if (nextState == 3) - log.PacketDebug("Using transfer handshake intent for transferred login."); - - // 1. Send the handshake packet - SendPacket(0x00, dataTypes.ConcatBytes( - // Protocol Version (use raw version for snapshot/RC servers) - DataTypes.GetVarInt(rawProtocolVersion), - - // Server Address - dataTypes.GetString(pForge.GetServerAddress(handler.GetServerHost())), - - // Server Port - dataTypes.GetUShort((ushort)handler.GetServerPort()), - - // Next State - DataTypes.GetVarInt(nextState)), // 2 is Login, 3 is Transfer - "Handshake" - ); - - // 2. Send the Login Start packet - List fullLoginPacket = new(); - fullLoginPacket.AddRange(dataTypes.GetString(handler.GetUsername())); // Username - - // 1.19 - 1.19.2 - if (protocolVersion is >= MC_1_19_Version and < MC_1_19_3_Version) - { - if (playerKeyPair is null) - fullLoginPacket.AddRange(dataTypes.GetBool(false)); // Has Sig Data - else - { - fullLoginPacket.AddRange(dataTypes.GetBool(true)); // Has Sig Data - fullLoginPacket.AddRange( - DataTypes.GetLong(playerKeyPair.GetExpirationMilliseconds())); // Expiration time - fullLoginPacket.AddRange( - dataTypes.GetArray(playerKeyPair.PublicKey.Key)); // Public key received from Microsoft API - if (protocolVersion >= MC_1_19_2_Version) - fullLoginPacket.AddRange( - dataTypes.GetArray(playerKeyPair.PublicKey - .SignatureV2!)); // Public key signature received from Microsoft API - else - fullLoginPacket.AddRange( - dataTypes.GetArray(playerKeyPair.PublicKey - .Signature!)); // Public key signature received from Microsoft API - } - } - - var uuid = handler.GetUserUuid(); - switch (protocolVersion) - { - case >= MC_1_19_2_Version and < MC_1_20_2_Version: - { - if (uuid == Guid.Empty) - fullLoginPacket.AddRange(dataTypes.GetBool(false)); // Has UUID - else - { - fullLoginPacket.AddRange(dataTypes.GetBool(true)); // Has UUID - fullLoginPacket.AddRange(DataTypes.GetUUID(uuid)); // UUID - } - - break; - } - case >= MC_1_20_2_Version: - uuid = handler.GetUserUuid(); - - if (uuid == Guid.Empty) - uuid = Guid.NewGuid(); - - fullLoginPacket.AddRange(DataTypes.GetUUID(uuid)); // UUID - break; - } - - SendPacket(0x00, fullLoginPacket, "LoginStart"); - - // 3. Encryption Request - 9. Login Acknowledged - while (true) - { - var (packetId, packetData) = ReadNextPacket(); - - switch (packetId) - { - // Login rejected - case 0x00: - handler.OnConnectionLost(ChatBot.DisconnectReason.LoginRejected, - ChatParser.ParseText(dataTypes.ReadNextString(packetData))); - return false; - - // Encryption request - case 0x01: - { - isOnlineMode = true; - var serverId = dataTypes.ReadNextString(packetData); - var serverPublicKey = dataTypes.ReadNextByteArray(packetData); - var token = dataTypes.ReadNextByteArray(packetData); - - var shouldAuthetnicate = false; - - if (protocolVersion >= MC_1_20_6_Version) - shouldAuthetnicate = dataTypes.ReadNextBool(packetData); - - return StartEncryption(handler.GetUserUuidStr(), handler.GetSessionID(), - Config.Main.General.AccountType, token, serverId, - serverPublicKey, playerKeyPair, session, shouldAuthetnicate); - } - - // Login successful - case 0x02: - { - log.Info($"§8{Translations.mcc_server_offline}"); - SetCurrentState(protocolVersion < MC_1_20_2_Version - ? CurrentState.Play - : CurrentState.Configuration); - - if (protocolVersion >= MC_1_20_2_Version) - { - // Hypixel and other 1.20.2+ servers stay in configuration until ClientInformation is sent. - SendPacket(0x03, new List(), "LoginAcknowledged"); - SendConfiguredClientSettings(); - } - - if (!pForge.CompleteForgeHandshake()) - { - log.Error($"§8{Translations.error_forge}"); - return false; - } - - StartUpdating(); - return true; //No need to check session or start encryption - } - default: - HandlePacket(packetId, packetData); - break; - } - } - } - - /// - /// Start network encryption. Automatically called by Login() if the server requests encryption. - /// - /// True if encryption was successful - private bool StartEncryption(string uuid, string sessionID, LoginType type, byte[] token, string serverIDhash, - byte[] serverPublicKey, PlayerKeyPair? playerKeyPair, SessionToken session, bool shouldAuthetnicate) - { - var RSAService = CryptoHandler.DecodeRSAPublicKey(serverPublicKey)!; - var secretKey = CryptoHandler.ClientAESPrivateKey ?? CryptoHandler.GenerateAESPrivateKey(); - - log.PacketDebug($"§8{Translations.debug_crypto}"); - - if (serverIDhash != "-" && !string.IsNullOrWhiteSpace(sessionID)) - { - log.Info(Translations.mcc_session); - - var needCheckSession = true; - if (session is { ServerPublicKey: not null, SessionPreCheckTask: not null } - && serverIDhash == session.ServerIDhash && - serverPublicKey.SequenceEqual(session.ServerPublicKey)) - { - session.SessionPreCheckTask.Wait(); - if (session.SessionPreCheckTask.Result) // PreCheck Success - needCheckSession = false; - } - - // 1.20.6++ - if (shouldAuthetnicate) - needCheckSession = true; - - if (needCheckSession) - { - var serverHash = CryptoHandler.GetServerHash(serverIDhash, serverPublicKey, secretKey); - if (ProtocolHandler.SessionCheck(uuid, sessionID, serverHash, type)) - { - session.ServerIDhash = serverIDhash; - session.ServerPublicKey = serverPublicKey; - SessionCache.Store(InternalConfig.Account.Login.ToLower(), session); - } - else - { - handler.OnConnectionLost(ChatBot.DisconnectReason.LoginRejected, Translations.mcc_session_fail); - return false; - } - } - } - - // Encryption Response packet - List encryptionResponse = new(); - encryptionResponse.AddRange(dataTypes.GetArray(RSAService.Encrypt(secretKey, false))); // Shared Secret - - // 1.19 - 1.19.2 - if (protocolVersion is >= MC_1_19_Version and < MC_1_19_3_Version) - { - if (playerKeyPair is null) - { - encryptionResponse.AddRange(dataTypes.GetBool(true)); // Has Verify Token - encryptionResponse.AddRange(dataTypes.GetArray(RSAService.Encrypt(token, false))); // Verify Token - } - else - { - var salt = GenerateSalt(); - var messageSignature = playerKeyPair.PrivateKey.SignData(dataTypes.ConcatBytes(token, salt)); - - encryptionResponse.AddRange(dataTypes.GetBool(false)); // Has Verify Token - encryptionResponse.AddRange(salt); // Salt - encryptionResponse.AddRange(dataTypes.GetArray(messageSignature)); // Message Signature - } - } - else - { - encryptionResponse.AddRange(dataTypes.GetArray(RSAService.Encrypt(token, false))); // Verify Token - } - - SendPacket(0x01, encryptionResponse); - - // Start client-side encryption - socketWrapper.SwitchToEncrypted(secretKey); // pre switch - - // Process the next packet - int loopPrevention = ushort.MaxValue; - while (true) - { - var (packetId, packetData) = ReadNextPacket(); - if (packetId < 0 || loopPrevention-- < 0) // Failed to read packet or too many iterations (issue #1150) - { - handler.OnConnectionLost(ChatBot.DisconnectReason.ConnectionLost, - $"§8{Translations.error_invalid_encrypt}"); - return false; - } - - switch (packetId) - { - //Login rejected - case 0x00: - handler.OnConnectionLost(ChatBot.DisconnectReason.LoginRejected, - ChatParser.ParseText(dataTypes.ReadNextString(packetData))); - return false; - - //Login successful - case 0x02: - { - var uuidReceived = protocolVersion >= MC_1_16_Version - ? dataTypes.ReadNextUUID(packetData) - : Guid.Parse(dataTypes.ReadNextString(packetData)); - var userName = dataTypes.ReadNextString(packetData); - Tuple[]? playerProperty = null; - if (protocolVersion >= MC_1_19_Version) - { - var count = dataTypes.ReadNextVarInt(packetData); // Number Of Properties - playerProperty = new Tuple[count]; - for (var i = 0; i < count; ++i) - { - var name = dataTypes.ReadNextString(packetData); - var value = dataTypes.ReadNextString(packetData); - var isSigned = dataTypes.ReadNextBool(packetData); - var signature = isSigned ? dataTypes.ReadNextString(packetData) : string.Empty; - playerProperty[i] = new Tuple(name, value, signature); - } - } - - // Strict Error Handling (removed in 1.21.2) - if (protocolVersion >= MC_1_20_6_Version && protocolVersion < MC_1_21_2_Version) - dataTypes.ReadNextBool(packetData); - - SetCurrentState(protocolVersion < MC_1_20_2_Version - ? CurrentState.Play - : CurrentState.Configuration); - - if (protocolVersion >= MC_1_20_2_Version) - { - // Hypixel and other 1.20.2+ servers stay in configuration until ClientInformation is sent. - SendPacket(0x03, new List(), "LoginAcknowledged"); - SendConfiguredClientSettings(); - } - - handler.OnLoginSuccess(uuidReceived, userName, playerProperty); - - if (!pForge.CompleteForgeHandshake()) - { - log.Error($"§8{Translations.error_forge_encrypt}"); - return false; - } - - StartUpdating(); - return true; - } - default: - HandlePacket(packetId, packetData); - break; - } - } - } - - /// - /// Disconnect from the server - /// - public void Disconnect() - { - socketWrapper.Disconnect(); - } - - /// - /// Autocomplete text while typing username or command - /// - /// Text behind cursor - /// Completed text - int IAutoComplete.AutoComplete(string BehindCursor) - { - if (string.IsNullOrEmpty(BehindCursor)) - return -1; - - var transactionId = DataTypes.GetVarInt(autocomplete_transaction_id); - byte[] assumeCommand = [0x00]; - byte[] hasPosition = [0x00]; - byte[] tabCompletePacket = []; - - switch (protocolVersion) - { - case >= MC_1_8_Version and >= MC_1_13_Version: - tabCompletePacket = dataTypes.ConcatBytes(tabCompletePacket, transactionId); - tabCompletePacket = dataTypes.ConcatBytes(tabCompletePacket, - dataTypes.GetString(BehindCursor.Replace(' ', (char)0x00))); - break; - case >= MC_1_8_Version: - { - tabCompletePacket = dataTypes.ConcatBytes(tabCompletePacket, dataTypes.GetString(BehindCursor)); - - if (protocolVersion >= MC_1_9_Version) - tabCompletePacket = dataTypes.ConcatBytes(tabCompletePacket, assumeCommand); - - tabCompletePacket = dataTypes.ConcatBytes(tabCompletePacket, hasPosition); - break; - } - default: - tabCompletePacket = dataTypes.ConcatBytes(dataTypes.GetString(BehindCursor)); - break; - } - - ConsoleIO.AutoCompleteDone = false; - SendPacket(PacketTypesOut.TabComplete, tabCompletePacket); - return autocomplete_transaction_id; - } - - /// - /// Ping a Minecraft server to get information about the server - /// - /// True if ping was successful - public static bool DoPing(string host, int port, ref int protocolVersion, ref ForgeInfo? forgeInfo) - { - SocketWrapper? socketWrapper = null; - - try - { - var version = ""; - var tcp = ProxyHandler.NewTcpClient(host, port); - tcp.ReceiveTimeout = 30000; // 30 seconds - tcp.ReceiveBufferSize = 1024 * 1024; - socketWrapper = new SocketWrapper(tcp); - DataTypes dataTypes = new(MC_1_8_Version); - - var serverPort = BitConverter.GetBytes((ushort)port); - Array.Reverse(serverPort); - - // Ping Packet - var pingPacket = dataTypes.ConcatBytes( - // Packet Id - DataTypes.GetVarInt(0), - - // Protocol Version - DataTypes.GetVarInt(-1), - - // Server IP (Host) - dataTypes.GetString(host), - - // Server port - serverPort, - - // Next State - DataTypes.GetVarInt(1)); - - socketWrapper.SendDataRAW(dataTypes.ConcatBytes(DataTypes.GetVarInt(pingPacket.Length), pingPacket)); - - // Status Request Packet - var statusRequest = DataTypes.GetVarInt(0); - socketWrapper.SendDataRAW(dataTypes.ConcatBytes(DataTypes.GetVarInt(statusRequest.Length), statusRequest)); - - // Read Response length - var packetLength = dataTypes.ReadNextVarIntRAW(socketWrapper); - if (packetLength <= 0) - return false; - - // Read the Packet Id - var packetData = new Queue(socketWrapper.ReadDataRAW(packetLength)); - if (dataTypes.ReadNextVarInt(packetData) != 0x00) - return false; - - // Get the Json data - var result = dataTypes.ReadNextString(packetData); - - if (Config.Logging.DebugMessages) - { - // May contain formatting codes, cannot use WriteLineFormatted - Console.ForegroundColor = ConsoleColor.DarkGray; - ConsoleIO.WriteLine(result); - Console.ForegroundColor = ConsoleColor.Gray; - } - - if (string.IsNullOrEmpty(result) || !result.StartsWith("{") || !result.EndsWith("}")) - return false; - - var jsonData = Json.ParseJson(result); - if (jsonData is not System.Text.Json.Nodes.JsonObject jsonObj || !jsonObj.ContainsKey("version")) - return false; - - var versionData = jsonObj["version"]!.AsObject(); - - // Retrieve display name of the Minecraft version - if (versionData["name"] is { } nameNode) - version = nameNode.GetStringValue(); - - // Retrieve protocol version number for handling this server - if (versionData["protocol"] is { } protocolNode) - protocolVersion = int.Parse(protocolNode.GetStringValue(), - NumberStyles.Any, CultureInfo.CurrentCulture); - - // Check for forge on the server. - Protocol18Forge.ServerInfoCheckForge(jsonObj, ref forgeInfo); - - int onlinePlayers = 0, maxPlayers = 0; - List samplePlayers = []; - - if (jsonObj["players"] is System.Text.Json.Nodes.JsonObject playersObj) - { - if (playersObj["online"] is { } onlineNode) - onlinePlayers = int.Parse(onlineNode.GetStringValue(), NumberStyles.Any, CultureInfo.CurrentCulture); - if (playersObj["max"] is { } maxNode) - maxPlayers = int.Parse(maxNode.GetStringValue(), NumberStyles.Any, CultureInfo.CurrentCulture); - if (playersObj["sample"] is System.Text.Json.Nodes.JsonArray sampleArray) - { - foreach (var entry in sampleArray) - { - if (entry is not System.Text.Json.Nodes.JsonObject playerObj) continue; - samplePlayers.Add(new ServerStatusInfo.SamplePlayer - { - Name = playerObj["name"]?.GetStringValue() ?? "", - Id = playerObj["id"]?.GetStringValue() ?? "" - }); - } - } - } - - string motdRaw = ""; - if (jsonObj["description"] is { } descNode) - motdRaw = descNode.ToJsonString(); - - string? faviconBase64 = null; - if (jsonObj["favicon"] is { } faviconNode) - { - var faviconStr = faviconNode.GetStringValue(); - const string prefix = "data:image/png;base64,"; - faviconBase64 = faviconStr.StartsWith(prefix, StringComparison.Ordinal) - ? faviconStr[prefix.Length..] - : faviconStr; - } - - long pingMs = -1; - try - { - long pingPayload = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds(); - var pingRequest = dataTypes.ConcatBytes(DataTypes.GetVarInt(0x01), DataTypes.GetLong(pingPayload)); - socketWrapper.SendDataRAW(dataTypes.ConcatBytes(DataTypes.GetVarInt(pingRequest.Length), pingRequest)); - - packetLength = dataTypes.ReadNextVarIntRAW(socketWrapper); - if (packetLength > 0) - { - packetData = new Queue(socketWrapper.ReadDataRAW(packetLength)); - if (dataTypes.ReadNextVarInt(packetData) == 0x01) - { - long pongPayload = dataTypes.ReadNextLong(packetData); - pingMs = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds() - pingPayload; - } - } - } - catch - { - // Some servers may close the probe connection immediately after the status response. - } - - var statusInfo = new ServerStatusInfo - { - Host = host, - Port = port, - VersionName = version, - ProtocolVersion = protocolVersion, - OnlinePlayers = onlinePlayers, - MaxPlayers = maxPlayers, - SamplePlayers = samplePlayers, - MotdRaw = motdRaw, - FaviconBase64 = faviconBase64, - PingMs = pingMs - }; - - ProtocolHandler.TryUpgradeProtocolVersion(version, ref protocolVersion); - statusInfo.ResolvedProtocol = protocolVersion; - - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.mcc_server_protocol, version, - protocolVersion + (forgeInfo is not null ? Translations.mcc_with_forge : ""))); - - ServerStatusDisplay.Show(statusInfo); - - return true; - } - finally - { - socketWrapper?.Disconnect(); - } - } - - /// - /// Get max length for chat messages - /// - /// Max length, in characters - public int GetMaxChatMessageLength() - { - int configOverride = Settings.MainConfigHelper.Config.Advanced.MaxChatMessageLength; - if (configOverride > 0) - return configOverride; - return protocolVersion > MC_1_10_Version ? 256 : 100; - } - - /// - /// Get the current protocol version. - /// - /// - /// Version-specific operations should be handled inside the Protocol handled whenever possible. - /// - /// Minecraft Protocol version number - public int GetProtocolVersion() - { - return protocolVersion; - } - - /// - /// Send MessageAcknowledgment packet - /// - /// Message acknowledgment - /// True if properly sent - public bool SendMessageAcknowledgment(LastSeenMessageList.Acknowledgment acknowledgment) - { - try - { - var fields = dataTypes.GetAcknowledgment(acknowledgment, - isOnlineMode && Config.Signature.LoginWithSecureProfile); - - SendPacket(PacketTypesOut.MessageAcknowledgment, fields); - - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - /// - /// Send MessageAcknowledgment packet - /// - /// Message acknowledgment - /// True if properly sent - public bool SendMessageAcknowledgment(int messageCount) - { - try - { - var fields = DataTypes.GetVarInt(messageCount); - SendPacket(PacketTypesOut.MessageAcknowledgment, fields); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public LastSeenMessageList.Acknowledgment ConsumeAcknowledgment() - { - pendingAcknowledgments = 0; - return new LastSeenMessageList.Acknowledgment(lastSeenMessagesCollector.GetLastSeenMessages(), - lastReceivedMessage); - } - - public void Acknowledge(ChatMessage message) - { - var entry = message.ToLastSeenMessageEntry(); - if (entry is null) return; - - if (protocolVersion >= MC_1_19_3_Version) - { - if (!lastSeenMessagesCollector.Add_1_19_3(entry, true)) return; - if (lastSeenMessagesCollector.messageCount <= 64) return; - - var messageCount = lastSeenMessagesCollector.ResetMessageCount(); - if (messageCount > 0) - SendMessageAcknowledgment(messageCount); - } - else - { - lastSeenMessagesCollector.Add_1_19_2(entry); - lastReceivedMessage = null; - if (pendingAcknowledgments++ > 64) - SendMessageAcknowledgment(ConsumeAcknowledgment()); - } - } - - /// - /// Send a chat command to the server, with or without signing based on the online mode and version. - /// - /// Command - /// PlayerKeyPair (optional) - /// True if properly sent - public bool SendChatCommand(string command, PlayerKeyPair? playerKeyPair = null) - { - if (string.IsNullOrEmpty(command)) - return true; - - command = Regex.Replace(command, @"\s+", " "); - command = Regex.Replace(command, @"\s$", string.Empty); - - log.PacketDebug($"chat command = {command}"); - - if (protocolVersion >= MC_1_20_6_Version && !isOnlineMode) - { - List fields = new(); - fields.AddRange(dataTypes.GetString(command)); - SendPacket(PacketTypesOut.ChatCommand, fields); - return true; - } - - try - { - List>? needSigned = null; - bool canSignCommand = protocolVersion >= MC_1_19_Version && - isOnlineMode && - playerKeyPair is not null && - Config.Signature.LoginWithSecureProfile && - Config.Signature.SignMessageInCommand; - - if (canSignCommand) - { - if (DeclareCommands.IsCommandTreeAvailable) - { - needSigned = DeclareCommands.CollectSignArguments(command); - } - else - { - needSigned = []; - log.PacketDebug("DeclareCommands tree unavailable, sending command without signed arguments."); - } - } - - lock (MessageSigningLock) - { - var acknowledgment1192 = protocolVersion == MC_1_19_2_Version ? ConsumeAcknowledgment() : null; - - var (acknowledgment1193, bitset1193, messageCount1193) = protocolVersion >= MC_1_19_3_Version - ? lastSeenMessagesCollector.Collect_1_19_3() - : new(Array.Empty(), Array.Empty(), 0); - - List fields = new(); - fields.AddRange(dataTypes.GetString(command)); - var timeNow = DateTimeOffset.UtcNow; - fields.AddRange(DataTypes.GetLong(timeNow.ToUnixTimeMilliseconds())); - - if (needSigned is null || needSigned.Count == 0) - { - fields.AddRange(DataTypes.GetLong(0)); - fields.AddRange(DataTypes.GetVarInt(0)); - } - else - { - var uuid = handler.GetUserUuid(); - var salt = GenerateSalt(); - fields.AddRange(salt); - fields.AddRange(DataTypes.GetVarInt(needSigned.Count)); - - foreach (var (argName, message) in needSigned) - { - fields.AddRange(dataTypes.GetString(argName)); - var sign = protocolVersion switch - { - MC_1_19_Version => playerKeyPair!.PrivateKey.SignMessage(message, uuid, timeNow, ref salt), - MC_1_19_2_Version => playerKeyPair!.PrivateKey.SignMessage(message, uuid, timeNow, ref salt, acknowledgment1192!.lastSeen), - _ => playerKeyPair!.PrivateKey.SignMessage(message, uuid, chatUuid, messageIndex++, timeNow, ref salt, acknowledgment1193) - }; - - if (protocolVersion <= MC_1_19_2_Version) - fields.AddRange(DataTypes.GetVarInt(sign.Length)); - - fields.AddRange(sign); - } - } - - if (protocolVersion <= MC_1_19_2_Version) - fields.AddRange(dataTypes.GetBool(false)); - - switch (protocolVersion) - { - case MC_1_19_2_Version: - fields.AddRange(dataTypes.GetAcknowledgment(acknowledgment1192!, isOnlineMode && Config.Signature.LoginWithSecureProfile)); - break; - case >= MC_1_19_3_Version: - fields.AddRange(DataTypes.GetVarInt(messageCount1193)); - fields.AddRange(bitset1193); - - // Checksum: Byte (1.21.5+, 0 = skip verification) - if (protocolVersion >= MC_1_21_5_Version) - fields.Add(0); - break; - } - - SendPacket(protocolVersion < MC_1_20_6_Version ? PacketTypesOut.ChatCommand : PacketTypesOut.SignedChatCommand, fields); - } - - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendCustomClickAction(string id, Dictionary? payload) - { - if (protocolVersion < MC_1_21_6_Version) - return false; - - try - { - List fields = new(); - fields.AddRange(dataTypes.GetString(id.Contains(':', StringComparison.Ordinal) ? id : "minecraft:" + id)); - - var tagBytes = dataTypes.GetNbtTag(payload); - if (tagBytes.Length > 65536) - return false; - - fields.AddRange(DataTypes.GetVarInt(tagBytes.Length)); - fields.AddRange(tagBytes); - - switch (currentState) - { - case CurrentState.Configuration: - SendPacket(ConfigurationPacketTypesOut.CustomClickAction, fields); - return true; - case CurrentState.Play: - SendPacket(PacketTypesOut.CustomClickAction, fields); - return true; - default: - return false; - } - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - /// - /// Send a chat message to the server - /// - /// Message - /// PlayerKeyPair - /// True if properly sent - public bool SendChatMessage(string message, PlayerKeyPair? playerKeyPair) - { - if (string.IsNullOrEmpty(message)) - return true; - - // Process Chat Command - 1.19 and above - if (protocolVersion >= MC_1_19_Version && message.StartsWith('/')) - return SendChatCommand(message[1..], playerKeyPair); - - try - { - List fields = new(); - - // Message: String (up to 256 chars) - fields.AddRange(dataTypes.GetString(message)); - - if (protocolVersion >= MC_1_19_Version) - { - lock (MessageSigningLock) - { - var acknowledgment1192 = - protocolVersion == MC_1_19_2_Version ? ConsumeAcknowledgment() : null; - - var (acknowledgment1193, bitset1193, messageCount1193) = - protocolVersion >= MC_1_19_3_Version - ? lastSeenMessagesCollector.Collect_1_19_3() - : new(Array.Empty(), Array.Empty(), 0); - - // Timestamp: Instant(Long) - var timeNow = DateTimeOffset.UtcNow; - fields.AddRange(DataTypes.GetLong(timeNow.ToUnixTimeMilliseconds())); - - if (!isOnlineMode || playerKeyPair is null || !Config.Signature.LoginWithSecureProfile || - !Config.Signature.SignChat) - { - fields.AddRange(DataTypes.GetLong(0)); // Salt: Long - fields.AddRange(protocolVersion < MC_1_19_3_Version - ? DataTypes.GetVarInt(0) // Signature Length: VarInt (1.19 - 1.19.2) - : dataTypes.GetBool(false)); // Has signature: bool (1.19.3) - } - else - { - // Salt: Long - var salt = GenerateSalt(); - fields.AddRange(salt); - - // Signature Length & Signature: (VarInt) and Byte Array - var playerUuid = handler.GetUserUuid(); - var sign = protocolVersion switch - { - MC_1_19_Version => playerKeyPair.PrivateKey.SignMessage(message, playerUuid, timeNow, - ref salt), - MC_1_19_2_Version => playerKeyPair.PrivateKey.SignMessage(message, playerUuid, timeNow, - ref salt, acknowledgment1192!.lastSeen), - _ => playerKeyPair.PrivateKey.SignMessage(message, playerUuid, chatUuid, messageIndex++, - timeNow, ref salt, acknowledgment1193) - }; - - fields.AddRange(protocolVersion >= MC_1_19_3_Version - ? dataTypes.GetBool(true) - : DataTypes.GetVarInt(sign.Length)); - fields.AddRange(sign); - } - - if (protocolVersion <= MC_1_19_2_Version) - fields.AddRange(dataTypes.GetBool(false)); // Signed Preview: Boolean - - switch (protocolVersion) - { - case >= MC_1_19_3_Version: - // message count - fields.AddRange(DataTypes.GetVarInt(messageCount1193)); - - // Acknowledged: BitSet - fields.AddRange(bitset1193); - - // Checksum: Byte (1.21.5+, 0 = skip verification) - if (protocolVersion >= MC_1_21_5_Version) - fields.Add(0); - break; - case MC_1_19_2_Version: - // Message Acknowledgment - fields.AddRange(dataTypes.GetAcknowledgment(acknowledgment1192!, - isOnlineMode && Config.Signature.LoginWithSecureProfile)); - break; - } - } - } - - SendPacket(PacketTypesOut.ChatMessage, fields); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendEntityAction(int PlayerEntityID, int ActionID) - { - try - { - List fields = new(); - fields.AddRange(DataTypes.GetVarInt(PlayerEntityID)); - fields.AddRange(DataTypes.GetVarInt(ActionID)); - fields.AddRange(DataTypes.GetVarInt(0)); - SendPacket(PacketTypesOut.EntityAction, fields); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - /// - /// Send a respawn packet to the server - /// - /// True if properly sent - public bool SendRespawnPacket() - { - try - { - SendPacket(PacketTypesOut.ClientStatus, [0]); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - /// - /// Tell the server what client is being used to connect to the server - /// - /// Client string describing the client - /// True if brand info was successfully sent - public bool SendBrandInfo(string brandInfo) - { - if (string.IsNullOrEmpty(brandInfo)) - return false; - - // Plugin channels were significantly changed between Minecraft 1.12 and 1.13 - // https://wiki.vg/index.php?title=Pre-release_protocol&oldid=14132#Plugin_Channels - return SendPluginChannelPacket(protocolVersion >= MC_1_13_Version ? "minecraft:brand" : "MC|Brand", - dataTypes.GetString(brandInfo)); - } - - /// - /// Inform the server of the client's Minecraft settings - /// - /// Client language eg en_US - /// View distance, in chunks - /// Game difficulty (client-side...) - /// Chat mode (allows muting yourself) - /// Show chat colors - /// Show skin layers - /// 1.9+ main hand - /// True if client settings were successfully sent - public bool SendClientSettings(string language, byte viewDistance, byte difficulty, byte chatMode, - bool chatColors, byte skinParts, byte mainHand) - { - try - { - List fields = new(); - fields.AddRange(dataTypes.GetString(language)); - fields.Add(viewDistance); - - fields.AddRange(protocolVersion >= MC_1_9_Version - ? DataTypes.GetVarInt(chatMode) - : [chatMode]); - - fields.Add(chatColors ? (byte)1 : (byte)0); - if (protocolVersion < MC_1_8_Version) - { - fields.Add(difficulty); - fields.Add((byte)(skinParts & 0x1)); //show cape - } - else fields.Add(skinParts); - - if (protocolVersion >= MC_1_9_Version) - fields.AddRange(DataTypes.GetVarInt(mainHand)); - if (protocolVersion >= MC_1_17_Version) - { - fields.Add(protocolVersion >= MC_1_18_1_Version - ? (byte)0 - : (byte)1); // 1.17 and 1.17.1 - Disable text filtering. (Always true) - // 1.18 and above - Enable text filtering. (Always false) - } - - if (protocolVersion >= MC_1_18_1_Version) - fields.Add(1); // 1.18 and above - Allow server listings - - if (protocolVersion >= MC_1_21_2_Version) - fields.AddRange(DataTypes.GetVarInt(0)); // 1.21.2+ Particle status: 0=All, 1=Decreased, 2=Minimal - - if (currentState == CurrentState.Configuration) - SendPacket(ConfigurationPacketTypesOut.ClientInformation, fields); - else - SendPacket(PacketTypesOut.ClientSettings, fields); - - return true; - } - catch (SocketException) - { - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - - return false; - } - - private bool SendConfiguredClientSettings() - { - if (!Config.MCSettings.Enabled) - return true; - - // Keep the configuration-phase send separate so modern servers receive ClientInformation, not play-era ClientSettings. - return SendClientSettings( - Config.MCSettings.Locale, - Config.MCSettings.RenderDistance, - (byte)Config.MCSettings.Difficulty, - (byte)Config.MCSettings.ChatMode, - Config.MCSettings.ChatColors, - Config.MCSettings.Skin.GetByte(), - (byte)Config.MCSettings.MainHand); - } - - - /// - /// Send a location update to the server - /// - /// The new location of the player - /// True if the player is on the ground - /// True if the player is colliding horizontally - /// Optional new yaw for updating player look - /// Optional new pitch for updating player look - /// True if the location update was successfully sent - public bool SendLocationUpdate(Location location, bool onGround, bool horizontalCollision, float? yaw, float? pitch) - { - return SendLocationUpdate(location, onGround, horizontalCollision, yaw, pitch, true); - } - - public bool SendLocationUpdate(Location location, bool onGround, bool horizontalCollision, float? yaw = null, float? pitch = null, - bool forceUpdate = false) - { - if (handler.GetTerrainEnabled()) - { - bool legacyMovementCadence = protocolVersion < MC_1_9_Version; - bool supportsHorizontalCollision = protocolVersion >= MC_1_21_5_Version; - int positionReminderInterval = ClientTicksPerSecond; - - double dx = location.X - lastSentX; - double dy = location.Y - lastSentY; - double dz = location.Z - lastSentZ; - double distSqr = dx * dx + dy * dy + dz * dz; - - bool rotationChanged = false; - if (yaw.HasValue && pitch.HasValue) - rotationChanged = forceUpdate || yaw.Value != lastSentYaw || pitch.Value != lastSentPitch; - - positionReminder++; - - try - { - PacketTypesOut packetType; - byte[] payload; - byte flags = (byte)(onGround ? 1 : 0); - bool positionChanged; - - if (legacyMovementCadence) - { - // 1.7.2-1.8.9 mirrors EntityPlayerSP#onUpdateWalkingPlayer: - // send an idle PlayerMovement packet every client tick and force - // a position refresh every 20 ticks even if the player is standing still. - positionChanged = distSqr > 9.0E-4 || positionReminder >= positionReminderInterval; - - if (positionChanged && rotationChanged && yaw.HasValue && pitch.HasValue) - { - packetType = PacketTypesOut.PlayerPositionAndRotation; - payload = dataTypes.ConcatBytes( - dataTypes.GetDouble(location.X), - dataTypes.GetDouble(location.Y), - protocolVersion < MC_1_8_Version - ? dataTypes.GetDouble(location.Y + 1.62) - : [], - dataTypes.GetDouble(location.Z), - dataTypes.GetFloat(yaw.Value), - dataTypes.GetFloat(pitch.Value), - new[] { flags }); - lastSentYaw = yaw.Value; - lastSentPitch = pitch.Value; - LastYaw = yaw.Value; - LastPitch = pitch.Value; - } - else if (positionChanged) - { - packetType = PacketTypesOut.PlayerPosition; - payload = dataTypes.ConcatBytes( - dataTypes.GetDouble(location.X), - dataTypes.GetDouble(location.Y), - protocolVersion < MC_1_8_Version - ? dataTypes.GetDouble(location.Y + 1.62) - : [], - dataTypes.GetDouble(location.Z), - new[] { flags }); - } - else if (rotationChanged && yaw.HasValue && pitch.HasValue) - { - packetType = PacketTypesOut.PlayerRotation; - payload = dataTypes.ConcatBytes( - dataTypes.GetFloat(yaw.Value), - dataTypes.GetFloat(pitch.Value), - new[] { flags }); - lastSentYaw = yaw.Value; - lastSentPitch = pitch.Value; - LastYaw = yaw.Value; - LastPitch = pitch.Value; - } - else - { - packetType = PacketTypesOut.PlayerMovement; - payload = new[] { flags }; - } - } - else - { - positionChanged = distSqr > 4.0E-8 || positionReminder >= positionReminderInterval; - bool movementStateChanged = onGround != lastSentOnGround - || (supportsHorizontalCollision && horizontalCollision != lastSentHorizontalCollision); - - if (!positionChanged && !rotationChanged && !movementStateChanged) - return true; // Nothing to send - - if (supportsHorizontalCollision && horizontalCollision) - flags |= 0x2; - - if (positionChanged && rotationChanged && yaw.HasValue && pitch.HasValue) - { - packetType = PacketTypesOut.PlayerPositionAndRotation; - payload = dataTypes.ConcatBytes( - dataTypes.GetDouble(location.X), - dataTypes.GetDouble(location.Y), - protocolVersion < MC_1_8_Version - ? dataTypes.GetDouble(location.Y + 1.62) - : [], - dataTypes.GetDouble(location.Z), - dataTypes.GetFloat(yaw.Value), - dataTypes.GetFloat(pitch.Value), - new[] { flags }); - lastSentYaw = yaw.Value; - lastSentPitch = pitch.Value; - LastYaw = yaw.Value; - LastPitch = pitch.Value; - } - else if (positionChanged) - { - packetType = PacketTypesOut.PlayerPosition; - payload = dataTypes.ConcatBytes( - dataTypes.GetDouble(location.X), - dataTypes.GetDouble(location.Y), - protocolVersion < MC_1_8_Version - ? dataTypes.GetDouble(location.Y + 1.62) - : [], - dataTypes.GetDouble(location.Z), - new[] { flags }); - } - else if (rotationChanged && yaw.HasValue && pitch.HasValue) - { - packetType = PacketTypesOut.PlayerRotation; - payload = dataTypes.ConcatBytes( - dataTypes.GetFloat(yaw.Value), - dataTypes.GetFloat(pitch.Value), - new[] { flags }); - lastSentYaw = yaw.Value; - lastSentPitch = pitch.Value; - LastYaw = yaw.Value; - LastPitch = pitch.Value; - } - else - { - packetType = PacketTypesOut.PlayerMovement; - payload = new[] { flags }; - } - } - - if (positionChanged) - { - lastSentX = location.X; - lastSentY = location.Y; - lastSentZ = location.Z; - positionReminder = 0; - } - lastSentOnGround = onGround; - lastSentHorizontalCollision = horizontalCollision; - - SendPacket(packetType, payload); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - else return false; - } - - /// - /// Send a plugin channel packet (0x17) to the server, compression and encryption will be handled automatically - /// - /// Channel to send packet on - /// packet Data - public bool SendPluginChannelPacket(string channel, byte[] data) - { - try - { - // In 1.7, length needs to be included. - // In 1.8, it must not be. - if (protocolVersion < MC_1_8_Version) - { - var length = BitConverter.GetBytes((short)data.Length); - Array.Reverse(length); - - SendPacket(PacketTypesOut.PluginMessage, - dataTypes.ConcatBytes(dataTypes.GetString(channel), length, data)); - } - else - { - SendPacket(PacketTypesOut.PluginMessage, dataTypes.ConcatBytes(dataTypes.GetString(channel), data)); - } - - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - private bool IsOpenBookPluginChannel(string channel) - { - return protocolVersion < MC_1_13_Version - ? string.Equals(channel, "MC|BOpen", StringComparison.Ordinal) - : string.Equals(channel, "minecraft:book_open", StringComparison.Ordinal); - } - - private int ReadBookHand(Queue packetData) - { - return packetData.Count > 0 ? dataTypes.ReadNextVarInt(packetData) : (int)BookHand.Main; - } - - /// - /// Send a Login Plugin Response packet (0x02) - /// - /// Login Plugin Request message Id - /// TRUE if the request was understood - /// Response to the request - /// TRUE if successfully sent - public bool SendLoginPluginResponse(int messageId, bool understood, byte[] data) - { - try - { - SendPacket(0x02, - dataTypes.ConcatBytes(DataTypes.GetVarInt(messageId), dataTypes.GetBool(understood), data), - "LoginPluginResponse"); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - /// - /// Send an Interact Entity Packet to server - /// - /// - /// - /// - public bool SendInteractEntity(int EntityID, int type) - { - try - { - List fields = new(); - fields.AddRange(DataTypes.GetVarInt(EntityID)); - - if (protocolVersion >= MC_26_1_Version && type == (int)InteractType.Attack) - { - SendPacket(PacketTypesOut.Attack, fields); - return true; - } - - fields.AddRange(DataTypes.GetVarInt(type)); - - // Is player Sneaking (Only 1.16 and above) - // Currently hardcoded to false - // TODO: Update to reflect the real player state - if (protocolVersion >= MC_1_16_Version) - fields.AddRange(dataTypes.GetBool(false)); - - SendPacket(PacketTypesOut.InteractEntity, fields); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - // TODO: Interact at block location (e.g. chest minecart) - public bool SendInteractEntity(int EntityID, int type, float X, float Y, float Z, int hand) - { - try - { - List fields = new(); - fields.AddRange(DataTypes.GetVarInt(EntityID)); - fields.AddRange(DataTypes.GetVarInt(type)); - fields.AddRange(dataTypes.GetFloat(X)); - fields.AddRange(dataTypes.GetFloat(Y)); - fields.AddRange(dataTypes.GetFloat(Z)); - fields.AddRange(DataTypes.GetVarInt(hand)); - // Is player Sneaking (Only 1.16 and above) - // Currently hardcoded to false - // TODO: Update to reflect the real player state - if (protocolVersion >= MC_1_16_Version) - fields.AddRange(dataTypes.GetBool(false)); - SendPacket(PacketTypesOut.InteractEntity, fields); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendInteractEntity(int EntityID, int type, int hand) - { - try - { - List fields = new(); - fields.AddRange(DataTypes.GetVarInt(EntityID)); - fields.AddRange(DataTypes.GetVarInt(type)); - fields.AddRange(DataTypes.GetVarInt(hand)); - // Is player Sneaking (Only 1.16 and above) - // Currently hardcoded to false - // TODO: Update to reflect the real player state - if (protocolVersion >= MC_1_16_Version) - fields.AddRange(dataTypes.GetBool(false)); - SendPacket(PacketTypesOut.InteractEntity, fields); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendInteractEntity(int EntityID, int type, float X, float Y, float Z) - { - return false; - } - - public bool SendUseItem(int hand, int sequenceId) - { - if (protocolVersion < MC_1_9_Version) - return false; // Packet does not exist prior to MC 1.9 - // According to https://wiki.vg/index.php?title=Protocol&oldid=5486#Player_Block_Placement - // MC 1.7 does this using Player Block Placement with special values - // TODO once Player Block Placement is implemented for older versions - try - { - List packet = new(); - packet.AddRange(DataTypes.GetVarInt(hand)); - if (protocolVersion >= MC_1_19_Version) - packet.AddRange(DataTypes.GetVarInt(sequenceId)); - - if (protocolVersion >= MC_1_21_Version) - { - packet.AddRange(dataTypes.GetFloat(LastYaw)); - packet.AddRange(dataTypes.GetFloat(LastPitch)); - } - - SendPacket(PacketTypesOut.UseItem, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendPlayerDigging(int status, Location location, Direction face, int sequenceId) - { - try - { - List packet = new(); - packet.AddRange(DataTypes.GetVarInt(status)); - packet.AddRange(dataTypes.GetLocation(location)); - packet.AddRange(DataTypes.GetVarInt(dataTypes.GetBlockFace(face))); - if (protocolVersion >= MC_1_19_Version) - packet.AddRange(DataTypes.GetVarInt(sequenceId)); - SendPacket(PacketTypesOut.PlayerDigging, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendPlayerBlockPlacement(int hand, Location location, Direction face, int sequenceId) - { - try - { - var packet = new List(); - var (cursorX, cursorY, cursorZ) = GetFaceHitCursor(face); - - switch (protocolVersion) - { - case < MC_1_9_Version: - packet.AddRange(dataTypes.GetLocation(location)); - packet.Add(dataTypes.GetBlockFace(face)); - - var playerInventory = handler.GetInventory(0); - - if (playerInventory?.Items is null) - return false; - - int[] slotWindowIds = [36, 37, 38, 39, 40, 41, 42, 43, 44]; - var currentSlot = ((McClient)handler).GetCurrentSlot(); - - playerInventory.Items.TryGetValue(slotWindowIds[currentSlot], out var item); - packet.AddRange(dataTypes.GetItemSlot(item, itemPalette)); - - AddLegacyBlockPlacementCursor(packet, cursorX, cursorY, cursorZ); - - SendPacket(PacketTypesOut.PlayerBlockPlacement, packet); - return true; - case < MC_1_14_Version: - packet.AddRange(dataTypes.GetLocation(location)); - packet.AddRange(DataTypes.GetVarInt(dataTypes.GetBlockFace(face))); - packet.AddRange(DataTypes.GetVarInt(hand)); - break; - default: - packet.AddRange(DataTypes.GetVarInt(hand)); - packet.AddRange(dataTypes.GetLocation(location)); - packet.AddRange(DataTypes.GetVarInt(dataTypes.GetBlockFace(face))); - break; - } - - if (protocolVersion < MC_1_11_Version) - AddLegacyBlockPlacementCursor(packet, cursorX, cursorY, cursorZ); - else - { - packet.AddRange(dataTypes.GetFloat(cursorX)); // cursorX - packet.AddRange(dataTypes.GetFloat(cursorY)); // cursorY - packet.AddRange(dataTypes.GetFloat(cursorZ)); // cursorZ - } - - if (protocolVersion >= MC_1_14_Version) - packet.Add(0); // insideBlock = false - - if (protocolVersion >= MC_1_21_2_Version) - packet.Add(0); // worldBorderHit = false - - if (protocolVersion >= MC_1_19_Version) - packet.AddRange(DataTypes.GetVarInt(sequenceId)); - - SendPacket(PacketTypesOut.PlayerBlockPlacement, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - private static (float x, float y, float z) GetFaceHitCursor(Direction face) => face switch - { - Direction.Up => (0.5f, 1.0f, 0.5f), - Direction.Down => (0.5f, 0.0f, 0.5f), - Direction.North => (0.5f, 0.5f, 0.0f), - Direction.South => (0.5f, 0.5f, 1.0f), - Direction.West => (0.0f, 0.5f, 0.5f), - Direction.East => (1.0f, 0.5f, 0.5f), - _ => (0.5f, 0.5f, 0.5f), - }; - - private static void AddLegacyBlockPlacementCursor(List packet, float cursorX, float cursorY, float cursorZ) - { - packet.Add(ToLegacyBlockPlacementCursor(cursorX)); - packet.Add(ToLegacyBlockPlacementCursor(cursorY)); - packet.Add(ToLegacyBlockPlacementCursor(cursorZ)); - } - - private static byte ToLegacyBlockPlacementCursor(float cursor) - { - return (byte)Math.Clamp((int)(cursor * 16.0f), 0, 15); - } - - public bool SendHeldItemChange(short slot) - { - try - { - List packet = new(); - packet.AddRange(dataTypes.GetShort(slot)); - SendPacket(PacketTypesOut.HeldItemChange, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendWindowAction(int windowId, int slotId, WindowActionType action, Item? item, - List> changedSlots, int stateId) - { - try - { - short actionNumber; - lock (window_actions) - { - if (!window_actions.ContainsKey(windowId)) - window_actions[windowId] = 0; - actionNumber = (short)(window_actions[windowId] + 1); - window_actions[windowId] = actionNumber; - } - - byte button = 0; - byte mode = 0; - - switch (action) - { - case WindowActionType.LeftClick: - button = 0; - break; - case WindowActionType.RightClick: - button = 1; - break; - case WindowActionType.MiddleClick: - button = 2; - mode = 3; - break; - case WindowActionType.ShiftClick: - button = 0; - mode = 1; - item = new Item(ItemType.Null, 0, null); - break; - case WindowActionType.ShiftRightClick: // Right-shift click uses button 1 - button = 1; - mode = 1; - item = new Item(ItemType.Null, 0, null); - break; - case WindowActionType.DropItem: - button = 0; - mode = 4; - item = new Item(ItemType.Null, 0, null); - break; - case WindowActionType.DropItemStack: - button = 1; - mode = 4; - item = new Item(ItemType.Null, 0, null); - break; - case WindowActionType.StartDragLeft: - button = 0; - mode = 5; - item = new Item(ItemType.Null, 0, null); - slotId = -999; - break; - case WindowActionType.StartDragRight: - button = 4; - mode = 5; - item = new Item(ItemType.Null, 0, null); - slotId = -999; - break; - case WindowActionType.StartDragMiddle: - button = 8; - mode = 5; - item = new Item(ItemType.Null, 0, null); - slotId = -999; - break; - case WindowActionType.EndDragLeft: - button = 2; - mode = 5; - item = new Item(ItemType.Null, 0, null); - slotId = -999; - break; - case WindowActionType.EndDragRight: - button = 6; - mode = 5; - item = new Item(ItemType.Null, 0, null); - slotId = -999; - break; - case WindowActionType.EndDragMiddle: - button = 10; - mode = 5; - item = new Item(ItemType.Null, 0, null); - slotId = -999; - break; - case WindowActionType.AddDragLeft: - button = 1; - mode = 5; - item = new Item(ItemType.Null, 0, null); - break; - case WindowActionType.AddDragRight: - button = 5; - mode = 5; - item = new Item(ItemType.Null, 0, null); - break; - case WindowActionType.AddDragMiddle: - button = 9; - mode = 5; - item = new Item(ItemType.Null, 0, null); - break; - } - - List packet = new(); - if (protocolVersion >= MC_1_21_2_Version) - packet.AddRange(DataTypes.GetVarInt(windowId)); // Window ID (VarInt in 1.21.2+) - else - packet.Add((byte)windowId); // Window ID (byte before 1.21.2) - - switch (protocolVersion) - { - // 1.17.1+ - case >= MC_1_17_1_Version: - packet.AddRange(DataTypes.GetVarInt(stateId)); // State ID - packet.AddRange(dataTypes.GetShort((short)slotId)); // Slot ID - break; - // Older - default: - packet.AddRange(dataTypes.GetShort((short)slotId)); // Slot ID - break; - } - - packet.Add(button); // Button - - if (protocolVersion < MC_1_17_Version) - packet.AddRange(dataTypes.GetShort(actionNumber)); - - if (protocolVersion >= MC_1_9_Version) - packet.AddRange(DataTypes.GetVarInt(mode)); // Mode - else packet.Add(mode); - - // 1.17+ Array of changed slots - if (protocolVersion >= MC_1_17_Version) - { - packet.AddRange(DataTypes.GetVarInt(changedSlots.Count)); // Length of the array - foreach (var slot in changedSlots) - { - packet.AddRange(dataTypes.GetShort(slot.Item1)); // slot ID - // 1.21.5+ uses HashedStack instead of ItemStack for container_click - if (protocolVersion >= MC_1_21_5_Version) - packet.AddRange(dataTypes.GetHashedItemSlot(slot.Item2, itemPalette)); - else - packet.AddRange(dataTypes.GetItemSlot(slot.Item2, itemPalette)); - } - } - - // 1.21.5+ uses HashedStack instead of ItemStack for carried item - if (protocolVersion >= MC_1_21_5_Version) - packet.AddRange(dataTypes.GetHashedItemSlot(item, itemPalette)); - else - packet.AddRange(dataTypes.GetItemSlot(item, itemPalette)); - - SendPacket(PacketTypesOut.ClickWindow, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendCreativeInventoryAction(int slot, ItemType itemType, int count, Dictionary? nbt) - { - try - { - List packet = new(); - packet.AddRange(dataTypes.GetShort((short)slot)); - packet.AddRange(dataTypes.GetItemSlot(new Item(itemType, count, nbt), itemPalette)); - SendPacket(PacketTypesOut.CreativeInventoryAction, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendChunkBatchReceived(float desiredNumberOfChunksPerBatch) - { - try - { - List packet = new(); - packet.AddRange(dataTypes.GetFloat(desiredNumberOfChunksPerBatch)); - SendPacket(PacketTypesOut.ChunkBatchReceived, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendAcknowledgeConfiguration() - { - try - { - SendPacket(PacketTypesOut.AcknowledgeConfiguration, new List()); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool ClickContainerButton(int windowId, int buttonId) - { - try - { - List packet = new(); - if (protocolVersion >= MC_1_20_6_Version) - { - packet.AddRange(DataTypes.GetVarInt(windowId)); - packet.AddRange(DataTypes.GetVarInt(buttonId)); - } - else - { - packet.Add((byte)windowId); - packet.Add((byte)buttonId); - } - - SendPacket(PacketTypesOut.ClickWindowButton, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendPlaceRecipe(int windowId, string recipeId, bool makeAll) - { - try - { - List packet = new(); - if (protocolVersion < MC_1_13_Version) - return false; - - packet.AddRange(DataTypes.GetVarInt(windowId)); - if (protocolVersion >= MC_1_21_2_Version) - packet.AddRange(DataTypes.GetVarInt(int.Parse(recipeId, CultureInfo.InvariantCulture))); - else - packet.AddRange(dataTypes.GetString(recipeId)); - packet.AddRange(dataTypes.GetBool(makeAll)); - SendPacket(PacketTypesOut.CraftRecipeRequest, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendEditBook(Item currentBook, IReadOnlyList pages, string? title, string author, int selectedHotbarSlot) - { - try - { - if (protocolVersion < MC_1_8_Version) - return false; - - bool signing = title is not null; - IReadOnlyList normalizedPages = BookContentHelper.NormalizePages(pages); - - if (protocolVersion < MC_1_13_Version) - { - Item payload = signing - ? BookContentHelper.CreateWrittenPayload( - currentBook, - normalizedPages, - title ?? string.Empty, - author, - encodePagesAsJson: protocolVersion < MC_1_9_Version) - : BookContentHelper.CreateWritablePayload(currentBook, normalizedPages); - - byte[] payloadData = dataTypes.GetItemSlot(payload, itemPalette); - if (payloadData.Length > 32767) - return false; - - return SendPluginChannelPacket(signing ? "MC|BSign" : "MC|BEdit", payloadData); - } - - if (protocolVersion < MC_1_17_Version) - { - Item payload = signing - ? BookContentHelper.CreateWrittenPayload(currentBook, normalizedPages, title ?? string.Empty, author, encodePagesAsJson: false) - : BookContentHelper.CreateWritablePayload(currentBook, normalizedPages); - - List packet = new(); - packet.AddRange(dataTypes.GetItemSlot(payload, itemPalette)); - packet.AddRange(dataTypes.GetBool(signing)); - - if (protocolVersion >= MC_1_16_5_Version) - packet.AddRange(DataTypes.GetVarInt(selectedHotbarSlot)); - else if (protocolVersion >= MC_1_13_2_Version) - packet.AddRange(DataTypes.GetVarInt((int)BookHand.Main)); - - SendPacket(PacketTypesOut.EditBook, packet); - return true; - } - - List modernPacket = new(); - modernPacket.AddRange(DataTypes.GetVarInt(selectedHotbarSlot)); - modernPacket.AddRange(DataTypes.GetVarInt(normalizedPages.Count)); - foreach (string page in normalizedPages) - modernPacket.AddRange(dataTypes.GetString(page)); - - modernPacket.AddRange(dataTypes.GetBool(signing)); - if (signing) - modernPacket.AddRange(dataTypes.GetString(title ?? string.Empty)); - - SendPacket(PacketTypesOut.EditBook, modernPacket); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendAnimation(int animation, int playerId) - { - try - { - if (animation is not (0 or 1)) return false; - - List packet = new(); - - switch (protocolVersion) - { - case < MC_1_8_Version: - packet.AddRange(DataTypes.GetInt(playerId)); - packet.Add(1); // Swing arm - break; - case < MC_1_9_Version: - // No fields in 1.8.X - break; - // MC 1.9+ - default: - packet.AddRange(DataTypes.GetVarInt(animation)); - break; - } - - SendPacket(PacketTypesOut.Animation, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendCloseWindow(int windowId) - { - try - { - lock (window_actions) - { - if (window_actions.ContainsKey(windowId)) - window_actions[windowId] = 0; - } - - SendPacket(PacketTypesOut.CloseWindow, - protocolVersion >= MC_1_21_2_Version - ? DataTypes.GetVarInt(windowId) - : new[] { (byte)windowId }); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendUpdateSign(Location sign, string line1, string line2, string line3, string line4, - bool isFrontText = true) - { - try - { - if (line1.Length > 23) - line1 = line1[..23]; - if (line2.Length > 23) - line2 = line2[..23]; - if (line3.Length > 23) - line3 = line3[..23]; - if (line4.Length > 23) - line4 = line4[..23]; - - List packet = new(); - packet.AddRange(dataTypes.GetLocation(sign)); - if (protocolVersion >= MC_1_20_Version) - packet.AddRange(dataTypes.GetBool(isFrontText)); - packet.AddRange(dataTypes.GetString(line1)); - packet.AddRange(dataTypes.GetString(line2)); - packet.AddRange(dataTypes.GetString(line3)); - packet.AddRange(dataTypes.GetString(line4)); - SendPacket(PacketTypesOut.UpdateSign, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool UpdateCommandBlock(Location location, string command, CommandBlockMode mode, - CommandBlockFlags flags) - { - if (protocolVersion > MC_1_13_Version) return false; - - try - { - List packet = new(); - packet.AddRange(dataTypes.GetLocation(location)); - packet.AddRange(dataTypes.GetString(command)); - packet.AddRange(DataTypes.GetVarInt((int)mode)); - packet.Add((byte)flags); - SendPacket(PacketTypesOut.UpdateSign, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendWindowConfirmation(byte windowID, short actionID, bool accepted) - { - try - { - var packet = new List() { windowID }; - packet.AddRange(dataTypes.GetShort(actionID)); - packet.Add(accepted ? (byte)1 : (byte)0); - SendPacket(PacketTypesOut.WindowConfirmation, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SelectTrade(int selectedSlot) - { - // MC 1.13 or greater - if (protocolVersion < MC_1_13_Version) return false; - - try - { - List packet = new(); - packet.AddRange(DataTypes.GetVarInt(selectedSlot)); - SendPacket(PacketTypesOut.SelectTrade, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendSpectate(Guid uuid) - { - // MC 1.8 or greater - if (protocolVersion < MC_1_8_Version) return false; - - try - { - List packet = new(); - packet.AddRange(DataTypes.GetUUID(uuid)); - SendPacket(PacketTypesOut.Spectate, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendPlayerSession(PlayerKeyPair? playerKeyPair) - { - if (playerKeyPair is null || !isOnlineMode) - return false; - - if (protocolVersion >= MC_1_19_3_Version) - { - try - { - List packet = new(); - - packet.AddRange(DataTypes.GetUUID(chatUuid)); - packet.AddRange(DataTypes.GetLong(playerKeyPair.GetExpirationMilliseconds())); - packet.AddRange(DataTypes.GetVarInt(playerKeyPair.PublicKey.Key.Length)); - packet.AddRange(playerKeyPair.PublicKey.Key); - packet.AddRange(DataTypes.GetVarInt(playerKeyPair.PublicKey.SignatureV2!.Length)); - packet.AddRange(playerKeyPair.PublicKey.SignatureV2); - - log.PacketDebug( - $"SendPlayerSession MessageUUID = {chatUuid.ToString()}, len(PublicKey) = {playerKeyPair.PublicKey.Key.Length}, len(SignatureV2) = {playerKeyPair.PublicKey.SignatureV2!.Length}"); - - SendPacket(PacketTypesOut.PlayerSession, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - return false; - } - - public bool SendRenameItem(string itemName) - { - try - { - List packet = new(); - packet.AddRange(dataTypes.GetString(itemName.Length > 50 ? itemName[..50] : itemName)); - SendPacket(PacketTypesOut.NameItem, packet); - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendCookieResponse(string name, byte[]? data) - { - try - { - var packet = new List(); - var hasPayload = data is not null; - packet.AddRange(dataTypes.GetString(name)); // Identifier - packet.AddRange(dataTypes.GetBool(hasPayload)); // Has payload - - if (hasPayload) - packet.AddRange(dataTypes.GetArray(data!)); // Payload Data Array Size + Data Array - - switch (currentState) - { - case CurrentState.Login: - SendPacket(0x04, packet, "CookieResponse"); - break; - - case CurrentState.Configuration: - SendPacket(ConfigurationPacketTypesOut.CookieResponse, packet); - break; - - case CurrentState.Play: - SendPacket(PacketTypesOut.CookieResponse, packet); - break; - } - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - public bool SendKnownDataPacks(List<(string, string, string)> knownDataPacks) - { - try - { - var packet = new List(); - packet.AddRange(DataTypes.GetVarInt(knownDataPacks.Count)); // Known Packs Count - foreach (var dataPack in knownDataPacks) - { - packet.AddRange(dataTypes.GetString(dataPack.Item1)); - packet.AddRange(dataTypes.GetString(dataPack.Item2)); - packet.AddRange(dataTypes.GetString(dataPack.Item3)); - } - - switch (currentState) - { - case CurrentState.Configuration: - SendPacket(ConfigurationPacketTypesOut.KnownDataPacks, packet); - break; - - case CurrentState.Play: - SendPacket(PacketTypesOut.KnownDataPacks, packet); - break; - } - - return true; - } - catch (SocketException) - { - return false; - } - catch (System.IO.IOException) - { - return false; - } - catch (ObjectDisposedException) - { - return false; - } - } - - private byte[] GenerateSalt() - { - var salt = new byte[8]; - randomGen.GetNonZeroBytes(salt); - return salt; - } - - private static long GetNanos() - { - var nano = 10000L * Stopwatch.GetTimestamp(); - nano /= TimeSpan.TicksPerMillisecond; - nano *= 100L; - return nano; - } - } - - internal enum CurrentState - { - Login = 0, - Configuration, - Play, - Transfer - } -} diff --git a/MinecraftClient/Protocol/Handlers/Protocol18Forge.cs b/MinecraftClient/Protocol/Handlers/Protocol18Forge.cs deleted file mode 100644 index e940fc11af..0000000000 --- a/MinecraftClient/Protocol/Handlers/Protocol18Forge.cs +++ /dev/null @@ -1,573 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.Threading; -using MinecraftClient.Protocol.Handlers.Forge; -using MinecraftClient.Protocol.Message; -using MinecraftClient.Scripting; - -namespace MinecraftClient.Protocol.Handlers -{ - /// - /// Handler for the Minecraft Forge protocol - /// - class Protocol18Forge(ForgeInfo? forgeInfo, int protocolVersion, DataTypes dataTypes, Protocol18Handler protocol18, IMinecraftComHandler mcHandler) - { - private readonly int protocolversion = protocolVersion; - private readonly DataTypes dataTypes = dataTypes; - private readonly Protocol18Handler protocol18 = protocol18; - private readonly IMinecraftComHandler mcHandler = mcHandler; - - private readonly ForgeInfo? forgeInfo = forgeInfo; - private FMLHandshakeClientState fmlHandshakeState = FMLHandshakeClientState.START; - private bool ForgeEnabled() { return forgeInfo is not null; } - - /// - /// Get Forge-Tagged server address - /// - /// Server Address - /// Forge-Tagged server address - public string GetServerAddress(string serverAddress) - { - if (ForgeEnabled()) - return serverAddress + "\0" + forgeInfo!.Version + "\0"; - return serverAddress; - } - - /// - /// Completes the Minecraft Forge handshake (Forge Protocol version 1: FML) - /// - /// Whether the handshake was successful. - public bool CompleteForgeHandshake() - { - if (ForgeEnabled() && forgeInfo!.Version == FMLVersion.FML) - { - while (fmlHandshakeState != FMLHandshakeClientState.DONE) - { - (int packetID, Queue packetData) = protocol18.ReadNextPacket(); - - if (packetID == 0x40) // Disconnect - { - mcHandler.OnConnectionLost(ChatBot.DisconnectReason.LoginRejected, ChatParser.ParseText(dataTypes.ReadNextString(packetData))); - return false; - } - else - { - // Send back regular packet to the vanilla protocol handler - protocol18.HandlePacket(packetID, packetData); - } - } - } - return true; - } - - /// - /// Read Forge VarShort field - /// - /// Packet data to read from - /// Length from packet data - public int ReadNextVarShort(Queue packetData) - { - if (ForgeEnabled()) - { - // Forge special VarShort field. - return (int)dataTypes.ReadNextVarShort(packetData); - } - else - { - // Vanilla regular Short field - return (int)dataTypes.ReadNextShort(packetData); - } - } - - /// - /// Handle Forge plugin messages (Forge Protocol version 1: FML) - /// - /// Plugin message channel - /// Plugin message data - /// Current world dimension - /// TRUE if the plugin message was recognized and handled - public bool HandlePluginMessage(string channel, Queue packetData, ref int currentDimension) - { - if (ForgeEnabled() && forgeInfo!.Version == FMLVersion.FML && fmlHandshakeState != FMLHandshakeClientState.DONE) - { - if (channel == "FML|HS") - { - FMLHandshakeDiscriminator discriminator = (FMLHandshakeDiscriminator)dataTypes.ReadNextByte(packetData); - - if (discriminator == FMLHandshakeDiscriminator.HandshakeReset) - { - fmlHandshakeState = FMLHandshakeClientState.START; - return true; - } - - switch (fmlHandshakeState) - { - case FMLHandshakeClientState.START: - if (discriminator != FMLHandshakeDiscriminator.ServerHello) - return false; - - // Send the plugin channel registration. - // REGISTER is somewhat special in that it doesn't actually include length information, - // and is also \0-separated. - // Also, yes, "FML" is there twice. Don't ask me why, but that's the way forge does it. - string[] channels = { "FML|HS", "FML", "FML|MP", "FML", "FORGE" }; - protocol18.SendPluginChannelPacket("REGISTER", Encoding.UTF8.GetBytes(string.Join("\0", channels))); - - byte fmlProtocolVersion = dataTypes.ReadNextByte(packetData); - - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.forge_version, fmlProtocolVersion)); - - if (fmlProtocolVersion >= 1) - currentDimension = dataTypes.ReadNextInt(packetData); - - // Tell the server we're running the same version. - SendForgeHandshakePacket(FMLHandshakeDiscriminator.ClientHello, new byte[] { fmlProtocolVersion }); - - // Then tell the server that we're running the same mods. - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8" + Translations.forge_send_mod, acceptnewlines: true); - byte[][] mods = new byte[forgeInfo.Mods.Count][]; - for (int i = 0; i < forgeInfo.Mods.Count; i++) - { - ForgeInfo.ForgeMod mod = forgeInfo.Mods[i]; - mods[i] = dataTypes.ConcatBytes(dataTypes.GetString(mod.ModID), dataTypes.GetString(mod.Version)); - } - SendForgeHandshakePacket(FMLHandshakeDiscriminator.ModList, - dataTypes.ConcatBytes(DataTypes.GetVarInt(forgeInfo.Mods.Count), dataTypes.ConcatBytes(mods))); - - fmlHandshakeState = FMLHandshakeClientState.WAITINGSERVERDATA; - - return true; - case FMLHandshakeClientState.WAITINGSERVERDATA: - if (discriminator != FMLHandshakeDiscriminator.ModList) - return false; - - Thread.Sleep(2000); - - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8" + Translations.forge_accept, acceptnewlines: true); - // Tell the server that yes, we are OK with the mods it has - // even though we don't actually care what mods it has. - - SendForgeHandshakePacket(FMLHandshakeDiscriminator.HandshakeAck, - new byte[] { (byte)FMLHandshakeClientState.WAITINGSERVERDATA }); - - fmlHandshakeState = FMLHandshakeClientState.WAITINGSERVERCOMPLETE; - return false; - case FMLHandshakeClientState.WAITINGSERVERCOMPLETE: - // The server now will tell us a bunch of registry information. - // We need to read it all, though, until it says that there is no more. - if (discriminator != FMLHandshakeDiscriminator.RegistryData) - return false; - - if (protocolversion < Protocol18Handler.MC_1_8_Version) - { - // 1.7.10 and below have one registry - // with blocks and items. - int registrySize = dataTypes.ReadNextVarInt(packetData); - - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.forge_registry, registrySize)); - - fmlHandshakeState = FMLHandshakeClientState.PENDINGCOMPLETE; - } - else - { - // 1.8+ has more than one registry. - - bool hasNextRegistry = dataTypes.ReadNextBool(packetData); - string registryName = dataTypes.ReadNextString(packetData); - int registrySize = dataTypes.ReadNextVarInt(packetData); - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.forge_registry_2, registryName, registrySize)); - if (!hasNextRegistry) - fmlHandshakeState = FMLHandshakeClientState.PENDINGCOMPLETE; - } - - return false; - case FMLHandshakeClientState.PENDINGCOMPLETE: - // The server will ask us to accept the registries. - // Just say yes. - if (discriminator != FMLHandshakeDiscriminator.HandshakeAck) - return false; - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8" + Translations.forge_accept_registry, acceptnewlines: true); - SendForgeHandshakePacket(FMLHandshakeDiscriminator.HandshakeAck, - new byte[] { (byte)FMLHandshakeClientState.PENDINGCOMPLETE }); - fmlHandshakeState = FMLHandshakeClientState.COMPLETE; - - return true; - case FMLHandshakeClientState.COMPLETE: - // One final "OK". On the actual forge source, a packet is sent from - // the client to the client saying that the connection was complete, but - // we don't need to do that. - - SendForgeHandshakePacket(FMLHandshakeDiscriminator.HandshakeAck, - new byte[] { (byte)FMLHandshakeClientState.COMPLETE }); - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLine(Translations.forge_complete); - fmlHandshakeState = FMLHandshakeClientState.DONE; - return true; - } - } - } - return false; - } - - /// - /// Handle Forge plugin messages during login phase (Forge Protocol version 2: FML2 or Forge Protocol version 3: FML3) - /// - /// Plugin message channel - /// Plugin message data - /// Response data to return to server - /// TRUE/FALSE depending on whether the packet was understood or not - public bool HandleLoginPluginRequest(string channel, Queue packetData, ref List responseData) - { - if (ForgeEnabled() && (forgeInfo!.Version == FMLVersion.FML2 || forgeInfo!.Version == FMLVersion.FML3) && channel == "fml:loginwrapper") - { - // Forge Handshake handler source code used to implement the FML2 packets: - // https://github.com/MinecraftForge/MinecraftForge/blob/1.13.x/src/main/java/net/minecraftforge/fml/network/FMLNetworkConstants.java - // https://github.com/MinecraftForge/MinecraftForge/blob/1.13.x/src/main/java/net/minecraftforge/fml/network/FMLHandshakeHandler.java - // https://github.com/MinecraftForge/MinecraftForge/blob/1.13.x/src/main/java/net/minecraftforge/fml/network/NetworkInitialization.java - // https://github.com/MinecraftForge/MinecraftForge/blob/1.13.x/src/main/java/net/minecraftforge/fml/network/FMLLoginWrapper.java - // https://github.com/MinecraftForge/MinecraftForge/blob/1.13.x/src/main/java/net/minecraftforge/fml/network/FMLHandshakeMessages.java - // - // FML3 packets: - // https://github.com/MinecraftForge/MinecraftForge/blob/1.18.x/src/main/java/net/minecraftforge/network/NetworkInitialization.java - // https://github.com/MinecraftForge/MinecraftForge/blob/1.18.x/src/main/java/net/minecraftforge/fml/network/FMLHandshakeMessages.java - // - // During Login, Forge will send a set of LoginPluginRequest packets and we need to respond accordingly. - // Each login plugin message contains in its payload field an inner packet created by FMLLoginWrapper.java: - // - // [ ResourceLocation ][ String ] // FML Channel name - // [ Inner Packet ][ Packet ] // Minecraft-Like packet - // - // The channel name allows identifying which handler in Forge will process the packet - // For instance, the handshake channel is fml:handshake as per FMLNetworkConstants.java - // - // The inner packet has the same layout as a Minecraft packet. - // Forge uses Minecraft's PacketBuffer class to decode the packet. - // We assume no network compression is active at this point. - // - // [ Length ][ VarInt ] - // [ PacketID ][ VarInt ] - // [ Data ][ .... ] - // - // Once decoded, the packet ID for fml:handshake is mapped in NetworkInitialization.java: - // - // 99 = Client to Server - Client ACK - // 1 = Server to Client - Mod List - // 2 = Client to Server - Mod List - // 3 = Server to Client - Registry - // 4 = Server to Client - Config - // 5 = Server to Client - Mod Data List (FML3) - // 6 = Server to Client - MismatchedMod List (FML3) - // - // The content of each message is mapped into a class inside FMLHandshakeMessages.java - // FMLHandshakeHandler will then process the packet, e.g. handleServerModListOnClient() for Server Mod List. - - string fmlChannel = dataTypes.ReadNextString(packetData); - dataTypes.ReadNextVarInt(packetData); // Packet length - int packetID = dataTypes.ReadNextVarInt(packetData); - - if (fmlChannel == "fml:handshake") - { - bool fmlResponseReady = false; - List fmlResponsePacket = new(); - - switch (packetID) - { - case 1: - // Server Mod List: FMLHandshakeMessages.java > S2CModList > decode() - // - // [ Mod Count ][ VarInt ] - // [ Mod Name ][ String ] // Amount of entries according to Mod Count - // [ Channel Count ][ VarInt ] - // [ Chan Name ][ String ] // Amount of entries according to Channel Count - // [ Version ][ String ] // Each entry is a pair of Channel Name + Version (1) - // [ Registry Count ][ VarInt ] - // [ Registry ][ String ] // Amount of entries according to Registry Count - // - // [1]: Version is usually set to "FML2" for FML stuff and "1" for mods - - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8" + Translations.forge_fml2_mod, acceptnewlines: true); - - List mods = new(); - int modCount = dataTypes.ReadNextVarInt(packetData); - for (int i = 0; i < modCount; i++) - mods.Add(dataTypes.ReadNextString(packetData)); - - ChatParser.LoadForgeModTranslations(mods); - - Dictionary channels = new(); - int channelCount = dataTypes.ReadNextVarInt(packetData); - for (int i = 0; i < channelCount; i++) - channels.Add(dataTypes.ReadNextString(packetData), dataTypes.ReadNextString(packetData)); - - List registries = new(); - int registryCount = dataTypes.ReadNextVarInt(packetData); - for (int i = 0; i < registryCount; i++) - registries.Add(dataTypes.ReadNextString(packetData)); - - // FML3 specific, - List dataPackRegistries = new(); - if (forgeInfo!.Version == FMLVersion.FML3 && packetData.Count != 0) - { - int dataPackRegistryCount = dataTypes.ReadNextVarInt(packetData); - for (int i = 0; i < dataPackRegistryCount; i++) - dataPackRegistries.Add(dataTypes.ReadNextString(packetData)); - } - - // Server Mod List Reply: FMLHandshakeMessages.java > C2SModListReply > encode() - // - // [ Mod Count ][ VarInt ] - // [ Mod Name ][ String ] // Amount of entries according to Mod Count - // [ Channel Count ][ VarInt ] - // [ Chan Name ][ String ] // Amount of entries according to Channel Count - // [ Version ][ String ] // Each entry is a pair of Channel Name + Version - // [ Registry Count ][ VarInt ] - // [ Registry ][ String ] // Amount of entries according to Registry Count - // [ Version ][ String ] // Each entry is a pair of Registry Name + Version - // - // We are supposed to validate server info against our set of installed mods, then reply with our list - // In MCC, we just want to send a valid response so we'll reply back with data collected from the server. - - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8" + Translations.forge_fml2_mod_send, acceptnewlines: true); - - // Packet ID 2: Client to Server Mod List - fmlResponsePacket.AddRange(DataTypes.GetVarInt(2)); - fmlResponsePacket.AddRange(DataTypes.GetVarInt(mods.Count)); - foreach (string mod in mods) - fmlResponsePacket.AddRange(dataTypes.GetString(mod)); - - fmlResponsePacket.AddRange(DataTypes.GetVarInt(channels.Count)); - foreach (KeyValuePair item in channels) - { - fmlResponsePacket.AddRange(dataTypes.GetString(item.Key)); - fmlResponsePacket.AddRange(dataTypes.GetString(item.Value)); - } - - fmlResponsePacket.AddRange(DataTypes.GetVarInt(registries.Count)); - foreach (string registry in registries) - { - fmlResponsePacket.AddRange(dataTypes.GetString(registry)); - // We don't have Registry mapping from server, leave it empty - fmlResponsePacket.AddRange(dataTypes.GetString("")); - } - fmlResponseReady = true; - break; - - case 3: - // Server Registry: FMLHandshakeMessages.java > S2CRegistry > decode() - // - // [ Registry Name ][ String ] - // [ Snapshot Present ][ Bool ] - // [ Snapshot data ][ .... ] // Only if "Snapshot Present" is True - // - // Registry Snapshot: ForgeRegistry.java > Snapshot > read(PacketBuffer) - // Not documented yet. We're ignoring this packet in MCC - - if (Settings.Config.Logging.DebugMessages) - { - string registryName = dataTypes.ReadNextString(packetData); - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.forge_fml2_registry, registryName)); - } - - fmlResponsePacket.AddRange(DataTypes.GetVarInt(99)); - fmlResponseReady = true; - break; - - case 4: - // Server Config: FMLHandshakeMessages.java > S2CConfigData > decode() - // - // [ Config Name ][ String ] - // [ Config Data ][ .... ] // Remaining packet data (1) - // - // [1] Config data may containt a standard Minecraft string readable with dataTypes.readNextString() - // We're ignoring this packet in MCC - - if (Settings.Config.Logging.DebugMessages) - { - string configName = dataTypes.ReadNextString(packetData); - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.forge_fml2_config, configName)); - } - - fmlResponsePacket.AddRange(DataTypes.GetVarInt(99)); - fmlResponseReady = true; - break; - - case 5: - // FML 3 - // Server Config: FMLHandshakeMessages.java > S2CModData > decode() - // [ Size ][ VarInt ] - // [ Mod Data List ][ Array ] [ Mod Id ][ String ] - // [ Display Name ][ String ] - // [ Version ][ String ] - // - // We're ignoring this packet in MCC - - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLineFormatted("§8" + "Received FML3 Server Mod Data List"); - } - break; - - case 6: - // FML 3 - // Server Config: FMLHandshakeMessages.java > S2CChannelMismatchData > decode() - // [ Size ][ VarInt ] - // [ Mismatched Mod List ][ Array ] [ Mod Id ][ String ] - // [ Version ][ String ] - // We're ignoring this packet in MCC - - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLineFormatted("§8" + "Received FML3 Server Mismatched Mods List"); - } - break; - - default: - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.forge_fml2_unknown, packetID)); - break; - } - - if (fmlResponseReady) - { - // Wrap our FML packet into a LoginPluginResponse payload - responseData.Clear(); - responseData.AddRange(dataTypes.GetString(fmlChannel)); - responseData.AddRange(DataTypes.GetVarInt(fmlResponsePacket.Count)); - responseData.AddRange(fmlResponsePacket); - return true; - } - } - else if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.forge_fml2_unknown_channel, fmlChannel)); - } - } - return false; - } - - /// - /// Send a forge plugin channel packet ("FML|HS"). Compression and encryption will be handled automatically. (Forge Protocol version 1: FML) - /// - /// Discriminator to use. - /// packet Data - private void SendForgeHandshakePacket(FMLHandshakeDiscriminator discriminator, byte[] data) - { - protocol18.SendPluginChannelPacket("FML|HS", dataTypes.ConcatBytes(new byte[] { (byte)discriminator }, data)); - } - - /// - /// Server Info: Check for For Forge versions 1 and 2 on a Minecraft server Ping result - /// - /// JSON data returned by the server - /// ForgeInfo to populate - /// True if the server is running Forge - public static bool ServerInfoCheckForge(System.Text.Json.Nodes.JsonObject jsonData, ref ForgeInfo? forgeInfo) - { - return ServerInfoCheckForgeSub(jsonData, ref forgeInfo, FMLVersion.FML) // MC 1.12 and lower - || ServerInfoCheckForgeSub(jsonData, ref forgeInfo, FMLVersion.FML2) // MC 1.13 to 1.17 - || ServerInfoCheckForgeSub(jsonData, ref forgeInfo, FMLVersion.FML3); // MC 1.18 and greater - } - - /// - /// Server Info: Check if we can force-enable Forge support for this Minecraft version without using server Ping - /// - /// Minecraft protocol version - /// TRUE if we can force-enable Forge support without using server Ping - public static bool ServerMayForceForge(int protocolVersion) - { - return protocolVersion >= ProtocolHandler.MCVer2ProtocolVersion("1.13"); - } - - /// - /// Server Info: Consider Forge to be enabled regardless of server Ping - /// - /// Minecraft protocol version - /// ForgeInfo item stating that Forge is enabled - /// - /// 1.18 change the fml version to 3 - /// https://github.com/MinecraftForge/MinecraftForge/commit/997d8e0aa28b831edcd712e59a96181d3b2117d4 - /// - public static ForgeInfo ServerForceForge(int protocolVersion) - { - if (ServerMayForceForge(protocolVersion)) - { - if (protocolVersion >= ProtocolHandler.MCVer2ProtocolVersion("1.18")) - { - return new ForgeInfo(FMLVersion.FML3); - } - return new ForgeInfo(FMLVersion.FML2); - } - else throw new InvalidOperationException(Translations.error_forgeforce); - } - - /// - /// Server Info: Check for For Forge on a Minecraft server Ping result (Handles FML and FML2 and FML3 - /// - /// JSON data returned by the server - /// ForgeInfo to populate - /// Forge protocol version - /// True if the server is running Forge - private static bool ServerInfoCheckForgeSub(System.Text.Json.Nodes.JsonObject jsonData, ref ForgeInfo? forgeInfo, FMLVersion fmlVersion) - { - string forgeDataTag; - string versionField; - string versionString; - - switch (fmlVersion) - { - case FMLVersion.FML: - forgeDataTag = "modinfo"; - versionField = "type"; - versionString = "FML"; - break; - case FMLVersion.FML2: - forgeDataTag = "forgeData"; - versionField = "fmlNetworkVersion"; - versionString = "2"; - break; - case FMLVersion.FML3: - forgeDataTag = "forgeData"; - versionField = "fmlNetworkVersion"; - versionString = "3"; - break; - default: - throw new NotImplementedException("FMLVersion '" + fmlVersion + "' not implemented!"); - } - - if (jsonData[forgeDataTag] is System.Text.Json.Nodes.JsonObject modData) - { - if (modData[versionField] is not null && modData[versionField]!.GetStringValue() == versionString) - { - forgeInfo = new ForgeInfo(modData, fmlVersion); - if (forgeInfo.Mods.Any()) - { - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.forge_with_mod, forgeInfo.Mods.Count)); - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLineFormatted("§8" + Translations.forge_mod_list, acceptnewlines: true); - foreach (ForgeInfo.ForgeMod mod in forgeInfo.Mods) - ConsoleIO.WriteLineFormatted("§8 " + mod.ToString()); - } - return true; - } - else - { - ConsoleIO.WriteLineFormatted("§8" + Translations.forge_no_mod, acceptnewlines: true); - forgeInfo = null; - } - } - } - return false; - } - } -} diff --git a/MinecraftClient/Protocol/Handlers/Protocol18Terrain.cs b/MinecraftClient/Protocol/Handlers/Protocol18Terrain.cs deleted file mode 100644 index 9bd29e87c4..0000000000 --- a/MinecraftClient/Protocol/Handlers/Protocol18Terrain.cs +++ /dev/null @@ -1,499 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Numerics; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -//using System.Linq; -//using System.Text; -using MinecraftClient.Mapping; - -namespace MinecraftClient.Protocol.Handlers -{ - /// - /// Terrain Decoding handler for Protocol18 - /// - class Protocol18Terrain(int protocolVersion, DataTypes dataTypes, IMinecraftComHandler handler) - { - private readonly int protocolversion = protocolVersion; - private readonly DataTypes dataTypes = dataTypes; - private readonly IMinecraftComHandler handler = handler; - - /// - /// Reading the "Block states" field: consists of 4096 entries, representing all the blocks in the chunk section. - /// - /// Cache for reading data - [MethodImpl(MethodImplOptions.AggressiveOptimization)] - private Chunk? ReadBlockStatesField(Queue cache) - { - // read Block states (Type: Paletted Container) - byte bitsPerEntry = dataTypes.ReadNextByte(cache); - - // 1.18(1.18.1) add a pattle named "Single valued" to replace the vertical strip bitmask in the old - if (bitsPerEntry == 0 && protocolversion >= Protocol18Handler.MC_1_18_1_Version) - { - // Palettes: Single valued - 1.18(1.18.1) and above - ushort blockId = (ushort)dataTypes.ReadNextVarInt(cache); - Block block = new(blockId); - - if (protocolversion < Protocol18Handler.MC_1_21_5_Version) - dataTypes.SkipNextVarInt(cache); // Data Array Length will be zero (removed in 1.21.5) - - // Empty chunks will not be stored - if (block.Type == Material.Air) - return null; - - // Warning: If you need to support modification of block data, you need to create 4096 objects here - Chunk chunk = new(); - for (int blockY = 0; blockY < Chunk.SizeY; blockY++) - for (int blockZ = 0; blockZ < Chunk.SizeZ; blockZ++) - for (int blockX = 0; blockX < Chunk.SizeX; blockX++) - chunk.SetWithoutCheck(blockX, blockY, blockZ, block); - return chunk; - } - else - { - // Palettes: Indirect or Direct - bool usePalette = (bitsPerEntry <= 8); - - // Indirect Mode: For block states with bits per entry <= 4, 4 bits are used to represent a block. - if (bitsPerEntry < 4) bitsPerEntry = 4; - - // Direct Mode: Bit mask covering bitsPerEntry bits - // EG, if bitsPerEntry = 5, valueMask = 00011111 in binary - uint valueMask = (uint)((1 << bitsPerEntry) - 1); - - int paletteLength = usePalette ? dataTypes.ReadNextVarInt(cache) : 0; // Assume zero when length is absent - - Span palette = paletteLength < 256 ? stackalloc uint[paletteLength] : new uint[paletteLength]; - for (int i = 0; i < paletteLength; i++) - palette[i] = (uint)dataTypes.ReadNextVarInt(cache); - - //// Block IDs are packed in the array of 64-bits integers - if (protocolversion < Protocol18Handler.MC_1_21_5_Version) - dataTypes.SkipNextVarInt(cache); // Entry length (removed in 1.21.5) - Span entryDataByte = stackalloc byte[8]; - Span entryDataLong = MemoryMarshal.Cast(entryDataByte); // Faster than MemoryMarshal.Read - - Chunk chunk = new(); - int startOffset = 64; // Read the first data immediately - for (int blockY = 0; blockY < Chunk.SizeY; blockY++) - { - for (int blockZ = 0; blockZ < Chunk.SizeZ; blockZ++) - { - for (int blockX = 0; blockX < Chunk.SizeX; blockX++) - { - // Calculate location of next block ID inside the array of Longs - if ((startOffset += bitsPerEntry) > (64 - bitsPerEntry)) - { - // In MC 1.16+, padding is applied to prevent overlapping between Longs: - // [ LONG INTEGER ][ LONG INTEGER ] - // [Block][Block][Block]XXX[Block][Block][Block]XXX - - // When overlapping, move forward to the beginning of the next Long - startOffset = 0; - dataTypes.ReadDataReverse(cache, entryDataByte); // read long - } - - uint blockId = (uint)(entryDataLong[0] >> startOffset) & valueMask; - - // Map small IDs to actual larger block IDs - if (usePalette) - { - if (paletteLength <= blockId) - { - int blockNumber = (blockY * Chunk.SizeZ + blockZ) * Chunk.SizeX + blockX; - throw new IndexOutOfRangeException(String.Format("Block ID {0} is outside Palette range 0-{1}! (bitsPerBlock: {2}, blockNumber: {3})", - blockId, - paletteLength - 1, - bitsPerEntry, - blockNumber)); - } - - blockId = palette[(int)blockId]; - } - - // NOTICE: In the future a single ushort may not store the entire block id; - // the Block class may need to change if block state IDs go beyond 65535 - Block block = new((ushort)blockId); - - // We have our block, save the block into the chunk - chunk.SetWithoutCheck(blockX, blockY, blockZ, block); - } - } - } - return chunk; - } - } - - /// - /// Process chunk column data from the server and (un)load the chunk from the Minecraft world - 1.17 and above - /// - /// Chunk X location - /// Chunk Z location - /// Chunk mask for reading data, store in bitset, used in 1.17 and 1.17.1 - /// Cache for reading chunk data - /// token to cancel the task - [MethodImpl(MethodImplOptions.AggressiveOptimization)] - public void ProcessChunkColumnData(int chunkX, int chunkZ, ulong[]? verticalStripBitmask, Queue cache) - { - World world = handler.GetWorld(); - - int chunkColumnSize = (World.GetDimension().height + 15) / 16; // Round up - - if (protocolversion >= Protocol18Handler.MC_1_17_Version) - { - // 1.17 and above chunk format - // Unloading chunks is handled by a separate packet - - for (int chunkY = 0; chunkY < chunkColumnSize; chunkY++) - { - int lastChunkY; - if (protocolversion == Protocol18Handler.MC_1_17_Version || protocolversion == Protocol18Handler.MC_1_17_1_Version) - { - lastChunkY = 0; - for (int i = verticalStripBitmask!.Length - 1; i >= 0; --i) - { - if (verticalStripBitmask![i] != 0) - { - lastChunkY = (sizeof(ulong) * 8 * i) + (sizeof(ulong) * 8 - 1 - BitOperations.LeadingZeroCount(verticalStripBitmask![i])); - break; - } - } - } - else - { - lastChunkY = chunkColumnSize - 1; - } - - // 1.18 and above always contains all chunk section in data - // 1.17 and 1.17.1 need vertical strip bitmask to know if the chunk section is included - if ((protocolversion >= Protocol18Handler.MC_1_18_1_Version) || - ((verticalStripBitmask![chunkY / 64] & (1UL << (chunkY % 64))) != 0)) - { - // Non-air block count inside chunk section, for lighting purposes - int blockCnt = dataTypes.ReadNextShort(cache); - - if (protocolversion >= Protocol18Handler.MC_26_1_Version) - dataTypes.ReadNextShort(cache); // Fluid count (26.1+) - - // Read Block states (Type: Paletted Container) - Chunk? chunk = ReadBlockStatesField(cache); - - //We have our chunk, save the chunk into the world - world.StoreChunk(chunkX, chunkY, chunkZ, chunkColumnSize, chunk, chunkY == lastChunkY); - - // Skip Read Biomes (Type: Paletted Container) - 1.18(1.18.1) and above - if (protocolversion >= Protocol18Handler.MC_1_18_1_Version) - { - byte bitsPerEntryBiome = dataTypes.ReadNextByte(cache); // Bits Per Entry - if (bitsPerEntryBiome == 0) - { - dataTypes.SkipNextVarInt(cache); // Value - if (protocolversion < Protocol18Handler.MC_1_21_5_Version) - dataTypes.SkipNextVarInt(cache); // Data Array Length (removed in 1.21.5) - } - else - { - if (bitsPerEntryBiome <= 3) - { - int paletteLength = dataTypes.ReadNextVarInt(cache); // Palette Length - for (int i = 0; i < paletteLength; i++) - dataTypes.SkipNextVarInt(cache); // Palette - } - if (protocolversion >= Protocol18Handler.MC_1_21_5_Version) - { - // 1.21.5: No VarInt length prefix; calculate from bits per entry - // Biome container has 64 entries (4x4x4) - // Uses SimpleBitStorage: valuesPerLong = 64/bitsPerEntry, longs = ceil(64/valuesPerLong) - int valuesPerLong = 64 / bitsPerEntryBiome; - int dataArrayLength = (64 + valuesPerLong - 1) / valuesPerLong; - dataTypes.DropData(dataArrayLength * 8, cache); - } - else - { - int dataArrayLength = dataTypes.ReadNextVarInt(cache); // Data Array Length - dataTypes.DropData(dataArrayLength * 8, cache); // Data Array - } - } - } - } - } - // Don't worry about skipping remaining data since there is no useful data afterwards in 1.9 - // (plus, it would require parsing the tile entity lists' NBT) - } - } - - /// - /// Process chunk column data from the server and (un)load the chunk from the Minecraft world - 1.17 below - /// - /// Chunk X location - /// Chunk Z location - /// Chunk mask for reading data - /// Chunk mask for some additional 1.7 metadata - /// Contains skylight info - /// Are the chunk continuous - /// Current dimension type (0 = overworld) - /// Cache for reading chunk data - /// token to cancel the task - [MethodImpl(MethodImplOptions.AggressiveOptimization)] - public void ProcessChunkColumnData(int chunkX, int chunkZ, ushort chunkMask, ushort chunkMask2, bool hasSkyLight, bool chunksContinuous, int currentDimension, Queue cache) - { - World world = handler.GetWorld(); - - const int chunkColumnSize = 16; - if (protocolversion >= Protocol18Handler.MC_1_9_Version) - { - // 1.9 and above chunk format - // Unloading chunks is handled by a separate packet - int maxChunkY = sizeof(int) * 8 - 1 - BitOperations.LeadingZeroCount(chunkMask); - for (int chunkY = 0; chunkY <= maxChunkY; chunkY++) - { - if ((chunkMask & (1 << chunkY)) != 0) - { - // 1.14 and above Non-air block count inside chunk section, for lighting purposes - if (protocolversion >= Protocol18Handler.MC_1_14_Version) - dataTypes.ReadNextShort(cache); - - byte bitsPerBlock = dataTypes.ReadNextByte(cache); - bool usePalette = (bitsPerBlock <= 8); - - // Vanilla Minecraft will use at least 4 bits per block - if (bitsPerBlock < 4) - bitsPerBlock = 4; - - // MC 1.9 to 1.12 will set palette length field to 0 when palette - // is not used, MC 1.13+ does not send the field at all in this case - int paletteLength = 0; // Assume zero when length is absent - if (usePalette || protocolversion < Protocol18Handler.MC_1_13_Version) - paletteLength = dataTypes.ReadNextVarInt(cache); - - int[] palette = new int[paletteLength]; - for (int i = 0; i < paletteLength; i++) - palette[i] = dataTypes.ReadNextVarInt(cache); - - // Bit mask covering bitsPerBlock bits - // EG, if bitsPerBlock = 5, valueMask = 00011111 in binary - uint valueMask = (uint)((1 << bitsPerBlock) - 1); - - // Block IDs are packed in the array of 64-bits integers - ulong[] dataArray = dataTypes.ReadNextULongArray(cache); - - Chunk chunk = new(); - - if (dataArray.Length > 0) - { - int longIndex = 0; - int startOffset = 0 - bitsPerBlock; - - for (int blockY = 0; blockY < Chunk.SizeY; blockY++) - { - for (int blockZ = 0; blockZ < Chunk.SizeZ; blockZ++) - { - for (int blockX = 0; blockX < Chunk.SizeX; blockX++) - { - // NOTICE: In the future a single ushort may not store the entire block id; - // the Block class may need to change if block state IDs go beyond 65535 - ushort blockId; - - // Calculate location of next block ID inside the array of Longs - startOffset += bitsPerBlock; - bool overlap = false; - - if ((startOffset + bitsPerBlock) > 64) - { - if (protocolversion >= Protocol18Handler.MC_1_16_Version) - { - // In MC 1.16+, padding is applied to prevent overlapping between Longs: - // [ LONG INTEGER ][ LONG INTEGER ] - // [Block][Block][Block]XXXXX[Block][Block][Block]XXXXX - - // When overlapping, move forward to the beginning of the next Long - startOffset = 0; - longIndex++; - } - else - { - // In MC 1.15 and lower, block IDs can overlap between Longs: - // [ LONG INTEGER ][ LONG INTEGER ] - // [Block][Block][Block][Blo ck][Block][Block][Block][ - - // Detect when we reached the next Long or switch to overlap mode - if (startOffset >= 64) - { - startOffset -= 64; - longIndex++; - } - else overlap = true; - } - } - - // Extract Block ID - if (overlap) - { - int endOffset = 64 - startOffset; - blockId = (ushort)((dataArray[longIndex] >> startOffset | dataArray[longIndex + 1] << endOffset) & valueMask); - } - else - { - blockId = (ushort)((dataArray[longIndex] >> startOffset) & valueMask); - } - - // Map small IDs to actual larger block IDs - if (usePalette) - { - if (paletteLength <= blockId) - { - int blockNumber = (blockY * Chunk.SizeZ + blockZ) * Chunk.SizeX + blockX; - throw new IndexOutOfRangeException(String.Format("Block ID {0} is outside Palette range 0-{1}! (bitsPerBlock: {2}, blockNumber: {3})", - blockId, - paletteLength - 1, - bitsPerBlock, - blockNumber)); - } - - blockId = (ushort)palette[blockId]; - } - - // We have our block, save the block into the chunk - chunk.SetWithoutCheck(blockX, blockY, blockZ, new Block(blockId)); - } - } - } - } - - //We have our chunk, save the chunk into the world - world.StoreChunk(chunkX, chunkY, chunkZ, chunkColumnSize, chunk, chunkY == maxChunkY); - - //Pre-1.14 Lighting data - if (protocolversion < Protocol18Handler.MC_1_14_Version) - { - //Skip block light - dataTypes.DropData((Chunk.SizeX * Chunk.SizeY * Chunk.SizeZ) / 2, cache); - - //Skip sky light - if (currentDimension == 0) - // Sky light is not sent in the nether or the end - dataTypes.DropData((Chunk.SizeX * Chunk.SizeY * Chunk.SizeZ) / 2, cache); - } - } - } - - // Don't worry about skipping remaining data since there is no useful data afterwards in 1.9 - // (plus, it would require parsing the tile entity lists' NBT) - } - else if (protocolversion >= Protocol18Handler.MC_1_8_Version) - { - // 1.8 chunk format - if (chunksContinuous && chunkMask == 0) - { - //Unload the entire chunk column - handler.InvokeOnMainThread(() => - { - world[chunkX, chunkZ] = null; - }); - } - else - { - //Load chunk data from the server - int maxChunkY = sizeof(int) * 8 - 1 - BitOperations.LeadingZeroCount(chunkMask); - for (int chunkY = 0; chunkY <= maxChunkY; chunkY++) - { - if ((chunkMask & (1 << chunkY)) != 0) - { - Chunk chunk = new(); - - //Read chunk data, all at once for performance reasons, and build the chunk object - Queue queue = new(dataTypes.ReadNextUShortsLittleEndian(Chunk.SizeX * Chunk.SizeY * Chunk.SizeZ, cache)); - for (int blockY = 0; blockY < Chunk.SizeY; blockY++) - for (int blockZ = 0; blockZ < Chunk.SizeZ; blockZ++) - for (int blockX = 0; blockX < Chunk.SizeX; blockX++) - chunk.SetWithoutCheck(blockX, blockY, blockZ, new Block(queue.Dequeue())); - - //We have our chunk, save the chunk into the world - world.StoreChunk(chunkX, chunkY, chunkZ, chunkColumnSize, chunk, chunkY == maxChunkY); - } - } - - //Skip light information - for (int chunkY = 0; chunkY < chunkColumnSize; chunkY++) - { - if ((chunkMask & (1 << chunkY)) != 0) - { - //Skip block light - dataTypes.DropData((Chunk.SizeX * Chunk.SizeY * Chunk.SizeZ) / 2, cache); - - //Skip sky light - if (hasSkyLight) - dataTypes.DropData((Chunk.SizeX * Chunk.SizeY * Chunk.SizeZ) / 2, cache); - } - } - - //Skip biome metadata - if (chunksContinuous) - dataTypes.DropData(Chunk.SizeX * Chunk.SizeZ, cache); - } - } - else - { - // 1.7 chunk format - if (chunksContinuous && chunkMask == 0) - { - //Unload the entire chunk column - handler.InvokeOnMainThread(() => - { - world[chunkX, chunkZ] = null; - }); - } - else - { - //Count chunk sections - int sectionCount = 0; - int addDataSectionCount = 0; - for (int chunkY = 0; chunkY < chunkColumnSize; chunkY++) - { - if ((chunkMask & (1 << chunkY)) != 0) - sectionCount++; - if ((chunkMask2 & (1 << chunkY)) != 0) - addDataSectionCount++; - } - - //Read chunk data, unpacking 4-bit values into 8-bit values for block metadata - Queue blockTypes = new(dataTypes.ReadData(Chunk.SizeX * Chunk.SizeY * Chunk.SizeZ * sectionCount, cache)); - Queue blockMeta = new(); - foreach (byte packed in dataTypes.ReadData((Chunk.SizeX * Chunk.SizeY * Chunk.SizeZ * sectionCount) / 2, cache)) - { - byte hig = (byte)(packed >> 4); - byte low = (byte)(packed & (byte)0x0F); - blockMeta.Enqueue(hig); - blockMeta.Enqueue(low); - } - - //Skip data we don't need - dataTypes.DropData((Chunk.SizeX * Chunk.SizeY * Chunk.SizeZ * sectionCount) / 2, cache); //Block light - if (hasSkyLight) - dataTypes.DropData((Chunk.SizeX * Chunk.SizeY * Chunk.SizeZ * sectionCount) / 2, cache); //Sky light - dataTypes.DropData((Chunk.SizeX * Chunk.SizeY * Chunk.SizeZ * addDataSectionCount) / 2, cache); //BlockAdd - if (chunksContinuous) - dataTypes.DropData(Chunk.SizeX * Chunk.SizeZ, cache); //Biomes - - //Load chunk data - int maxChunkY = sizeof(int) * 8 - 1 - BitOperations.LeadingZeroCount(chunkMask); - for (int chunkY = 0; chunkY <= maxChunkY; chunkY++) - { - if ((chunkMask & (1 << chunkY)) != 0) - { - Chunk chunk = new(); - - for (int blockY = 0; blockY < Chunk.SizeY; blockY++) - for (int blockZ = 0; blockZ < Chunk.SizeZ; blockZ++) - for (int blockX = 0; blockX < Chunk.SizeX; blockX++) - chunk.SetWithoutCheck(blockX, blockY, blockZ, new Block(blockTypes.Dequeue(), blockMeta.Dequeue())); - - world.StoreChunk(chunkX, chunkY, chunkZ, chunkColumnSize, chunk, chunkY == maxChunkY); - } - } - } - } - } - } -} diff --git a/MinecraftClient/Protocol/Handlers/SocketWrapper.cs b/MinecraftClient/Protocol/Handlers/SocketWrapper.cs deleted file mode 100644 index 7aaac71c7d..0000000000 --- a/MinecraftClient/Protocol/Handlers/SocketWrapper.cs +++ /dev/null @@ -1,124 +0,0 @@ -using System; -using System.IO; -using System.Net.Sockets; -using MinecraftClient.Crypto; - -namespace MinecraftClient.Protocol.Handlers -{ - /// - /// Wrapper for handling unencrypted & encrypted socket - /// - public class SocketWrapper - { - readonly TcpClient c; - AesCfb8Stream? s; - bool encrypted = false; - - /// - /// Initialize a new SocketWrapper - /// - /// TcpClient connected to the server - public SocketWrapper(TcpClient client) - { - c = client; - } - - /// - /// Check if the socket is still connected - /// - /// TRUE if still connected - /// Silently dropped connection can only be detected by attempting to read/write data - public bool IsConnected() - { - return c.Client is not null && c.Connected; - } - - /// - /// Check if the socket has data available to read - /// - /// TRUE if data is available to read - public bool HasDataAvailable() - { - return c.Client.Available > 0 || c.Client.Poll(0, SelectMode.SelectRead); - } - - /// - /// Switch network reading/writing to an encrypted stream - /// - /// AES secret key - public void SwitchToEncrypted(byte[] secretKey) - { - if (encrypted) - throw new InvalidOperationException("Stream is already encrypted!?"); - s = new AesCfb8Stream(c.GetStream(), secretKey); - encrypted = true; - } - - /// - /// Network reading method. Read bytes from the socket or encrypted socket. - /// - private void Receive(byte[] buffer, int start, int offset, SocketFlags f) - { - int read = 0; - while (read < offset) - { - int bytesRead; - if (encrypted) - bytesRead = s!.Read(buffer, start + read, offset - read); - else - bytesRead = c.Client.Receive(buffer, start + read, offset - read, f); - - if (bytesRead == 0) - throw new EndOfStreamException(); - - read += bytesRead; - } - } - - /// - /// Read some data from the server. - /// - /// Amount of bytes to read - /// The data read from the network as an array - public byte[] ReadDataRAW(int length) - { - if (length > 0) - { - byte[] cache = new byte[length]; - Receive(cache, 0, length, SocketFlags.None); - return cache; - } - return Array.Empty(); - } - - /// - /// Send raw data to the server. - /// - /// data to send - public void SendDataRAW(byte[] buffer) - { - if (!IsConnected()) - throw new SocketException((int)SocketError.NotConnected); - - if (encrypted) - s!.Write(buffer, 0, buffer.Length); - else - c.Client.Send(buffer); - } - - /// - /// Disconnect from the server - /// - public void Disconnect() - { - try - { - c.Close(); - } - catch (SocketException) { } - catch (System.IO.IOException) { } - catch (NullReferenceException) { } - catch (ObjectDisposedException) { } - } - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/AttributeModifiersComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/AttributeModifiersComponent.cs deleted file mode 100644 index 4741eed068..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/AttributeModifiersComponent.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class AttributeModifiersComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int NumberOfAttributes { get; set; } - public List Attributes { get; set; } = new(); - public bool ShowInTooltip { get; set; } - - public override void Parse(Queue data) - { - NumberOfAttributes = DataTypes.ReadNextVarInt(data); - - for (var i = 0; i < NumberOfAttributes; i++) - Attributes.Add(SubComponentRegistry.ParseSubComponent(SubComponents.Attribute, data)); - - ShowInTooltip = DataTypes.ReadNextBool(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(NumberOfAttributes)); - - if (Attributes.Count != NumberOfAttributes) - throw new ArgumentNullException($"Can not serialize a AttributeModifiersComponent when the Attributes count != NumberOfAttributes!"); - - foreach (var attribute in Attributes) - data.AddRange(attribute.Serialize()); - - data.AddRange(DataTypes.GetBool(ShowInTooltip)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BannerPatternsComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BannerPatternsComponent.cs deleted file mode 100644 index fb2a21a459..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BannerPatternsComponent.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class BannerPatternsComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int NumberOfLayers { get; set; } - public List Layers { get; set; } = []; - - public override void Parse(Queue data) - { - NumberOfLayers = DataTypes.ReadNextVarInt(data); - - for (var i = 0; i < NumberOfLayers; i++) - { - var patternType = DataTypes.ReadNextVarInt(data); - Layers.Add(new BannerLayer - { - PatternType = patternType, - AssetId = patternType == 0 ? DataTypes.ReadNextString(data) : null, - TranslationKey = patternType == 0 ? DataTypes.ReadNextString(data) : null, - DyeColor = DataTypes.ReadNextVarInt(data) - }); - } - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(NumberOfLayers)); - - if (NumberOfLayers > 0) - { - if (NumberOfLayers != Layers.Count) - throw new Exception("Can't serialize BannerPatternsComponent because NumberOfLayers and Layers.Count differ!"); - - foreach (var bannerLayer in Layers) - { - data.AddRange(DataTypes.GetVarInt(bannerLayer.PatternType)); - - if (bannerLayer.PatternType == 0) - { - if (string.IsNullOrEmpty(bannerLayer.AssetId) || string.IsNullOrEmpty(bannerLayer.TranslationKey)) - throw new Exception("Can't serialize BannerPatternsComponent because AssetId or TranslationKey is null/empty!"); - - data.AddRange(DataTypes.GetString(bannerLayer.AssetId)); - data.AddRange(DataTypes.GetString(bannerLayer.TranslationKey)); - } - - data.AddRange(DataTypes.GetVarInt(bannerLayer.DyeColor)); - } - } - - return new Queue(data); - } -} - -public record BannerLayer -{ - public int PatternType { get; set; } - public string? AssetId { get; set; } = null!; - public string? TranslationKey { get; set; } = null!; - public int DyeColor { get; set; } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BaseColorComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BaseColorComponent.cs deleted file mode 100644 index 615328d236..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BaseColorComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class BaseColorComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int DyeColor { get; set; } - - public override void Parse(Queue data) - { - DyeColor = DataTypes.ReadNextVarInt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(DyeColor)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BeesComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BeesComponent.cs deleted file mode 100644 index 575bfda3c9..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BeesComponent.cs +++ /dev/null @@ -1,46 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class BeesComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int NumberOfBees { get; set; } - public List Bees { get; set; } = []; - - public override void Parse(Queue data) - { - NumberOfBees = DataTypes.ReadNextVarInt(data); - for (var i = 0; i < NumberOfBees; i++) - { - Bees.Add(new Bee(DataTypes.ReadNextNbt(data), DataTypes.ReadNextVarInt(data), DataTypes.ReadNextVarInt(data))); - } - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(NumberOfBees)); - - if (NumberOfBees > 0) - { - if (NumberOfBees != Bees.Count) - throw new Exception("Can't serialize the BeeComponent because NumberOfBees and Bees.Count differ!"); - - foreach (var bee in Bees) - { - data.AddRange(DataTypes.GetNbt(bee.EntityDataNbt)); - data.AddRange(DataTypes.GetVarInt(bee.TicksInHive)); - data.AddRange(DataTypes.GetVarInt(bee.MinTicksInHive)); - } - } - - return new Queue(data); - } -} - -public record Bee(Dictionary? EntityDataNbt, int TicksInHive, int MinTicksInHive); \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BlockStateComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BlockStateComponent.cs deleted file mode 100644 index 8bbeeb2b29..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BlockStateComponent.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class BlockStateComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public List<(string, string)> Properties { get; set; } = []; - - public override void Parse(Queue data) - { - var count = DataTypes.ReadNextVarInt(data); - for (var i = 0; i < count; i++) - Properties.Add((DataTypes.ReadNextString(data), DataTypes.ReadNextString(data))); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Properties.Count)); - foreach (var (key, value) in Properties) - { - data.AddRange(DataTypes.GetString(key)); - data.AddRange(DataTypes.GetString(value)); - } - - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BundleContentsComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BundleContentsComponent.cs deleted file mode 100644 index 76e11195f5..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/BundleContentsComponent.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class BundleContentsComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public List Items { get; set; } = []; - - public override void Parse(Queue data) - { - var count = DataTypes.ReadNextVarInt(data); - - for (var i = 0; i < count; i++) - { - var item = DataTypes.ReadNextItemSlot(data, ItemPalette); - if (item is not null) - Items.Add(item); - } - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Items.Count)); - - foreach (var item in Items) - data.AddRange(DataTypes.GetItemSlot(item, ItemPalette)); - - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CanBreakComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CanBreakComponent.cs deleted file mode 100644 index aeff50f22f..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CanBreakComponent.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class CanBreakComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int NumberOfPredicates { get; set; } - public List BlockPredicates { get; set; } = new(); - public bool ShowInTooltip { get; set; } - - public override void Parse(Queue data) - { - NumberOfPredicates = DataTypes.ReadNextVarInt(data); - - for (var i = 0; i < NumberOfPredicates; i++) - BlockPredicates.Add((BlockPredicateSubcomponent)SubComponentRegistry.ParseSubComponent(SubComponents.BlockPredicate, data)); - - ShowInTooltip = DataTypes.ReadNextBool(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(NumberOfPredicates)); - - if (NumberOfPredicates > 0 && BlockPredicates.Count == 0) - throw new ArgumentNullException($"Can not serialize a CanBreakComponent when the BlockPredicates is empty but NumberOfPredicates is > 0!"); - - foreach (var blockPredicate in BlockPredicates) - data.AddRange(blockPredicate.Serialize()); - - data.AddRange(DataTypes.GetBool(ShowInTooltip)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CanPlaceOnComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CanPlaceOnComponent.cs deleted file mode 100644 index 0134563e7b..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CanPlaceOnComponent.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class CanPlaceOnComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int NumberOfPredicates { get; set; } - public List BlockPredicates { get; set; } = new(); - public bool ShowInTooltip { get; set; } - - public override void Parse(Queue data) - { - NumberOfPredicates = DataTypes.ReadNextVarInt(data); - - for (var i = 0; i < NumberOfPredicates; i++) - BlockPredicates.Add((BlockPredicateSubcomponent)SubComponentRegistry.ParseSubComponent(SubComponents.BlockPredicate, data)); - - ShowInTooltip = DataTypes.ReadNextBool(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(NumberOfPredicates)); - - if (NumberOfPredicates > 0 && BlockPredicates.Count == 0) - throw new ArgumentNullException($"Can not serialize a CanPlaceOnComponent when the BlockPredicates is empty but NumberOfPredicates is > 0!"); - - foreach (var blockPredicate in BlockPredicates) - data.AddRange(blockPredicate.Serialize()); - - data.AddRange(DataTypes.GetBool(ShowInTooltip)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ChargedProjectilesComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ChargedProjectilesComponent.cs deleted file mode 100644 index 5a5259add1..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ChargedProjectilesComponent.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class ChargedProjectilesComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public List Items { get; set; } = []; - - public override void Parse(Queue data) - { - var count = DataTypes.ReadNextVarInt(data); - - for (var i = 0; i < count; i++) - { - var item = DataTypes.ReadNextItemSlot(data, ItemPalette); - if (item is not null) - Items.Add(item); - } - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Items.Count)); - - foreach (var item in Items) - data.AddRange(DataTypes.GetItemSlot(item, ItemPalette)); - - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ContainerComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ContainerComponent.cs deleted file mode 100644 index 5264f43de2..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ContainerComponent.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class ContainerComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public List Items { get; set; } = []; - - public override void Parse(Queue data) - { - var count = DataTypes.ReadNextVarInt(data); - for (var i = 0; i < count; i++) - Items.Add(DataTypes.ReadNextItemSlot(data, ItemPalette)); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Items.Count)); - foreach (var item in Items) - data.AddRange(DataTypes.GetItemSlot(item, ItemPalette)); - - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ContainerLootComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ContainerLootComponent.cs deleted file mode 100644 index 8b68ecd7aa..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ContainerLootComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class ContainerLootComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public Dictionary? Nbt { get; set; } - - public override void Parse(Queue data) - { - Nbt = DataTypes.ReadNextNbt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetNbt(Nbt)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CreativeSlotLockComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CreativeSlotLockComponent.cs deleted file mode 100644 index 6d18839720..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CreativeSlotLockComponent.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class CreativeSlotLockComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : EmptyComponent(dataTypes, itemPalette, subComponentRegistry); \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CustomDataComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CustomDataComponent.cs deleted file mode 100644 index 9509d53951..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CustomDataComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class CustomDataComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public Dictionary? Nbt { get; set; } = new(); - - public override void Parse(Queue data) - { - Nbt = DataTypes.ReadNextNbt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetNbt(Nbt)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CustomModelDataComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CustomModelDataComponent.cs deleted file mode 100644 index 20df087084..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CustomModelDataComponent.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class CustomModelDataComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public List Floats { get; set; } = []; - public List Flags { get; set; } = []; - public List Strings { get; set; } = []; - public List Colors { get; set; } = []; - - public override void Parse(Queue data) - { - Floats = ReadList(data, static (dataTypes, componentData) => dataTypes.ReadNextFloat(componentData)); - Flags = ReadList(data, static (dataTypes, componentData) => dataTypes.ReadNextBool(componentData)); - Strings = ReadList(data, static (dataTypes, componentData) => dataTypes.ReadNextString(componentData)); - Colors = ReadList(data, static (dataTypes, componentData) => dataTypes.ReadNextInt(componentData)); - } - - public override Queue Serialize() - { - var data = new List(); - WriteList(data, Floats, static (dataTypes, value) => dataTypes.GetFloat(value)); - WriteList(data, Flags, static (dataTypes, value) => dataTypes.GetBool(value)); - WriteList(data, Strings, static (dataTypes, value) => dataTypes.GetString(value)); - WriteList(data, Colors, static (_, value) => DataTypes.GetInt(value)); - return new Queue(data); - } - - private List ReadList(Queue data, ReadDelegate read) - { - var count = DataTypes.ReadNextVarInt(data); - var values = new List(count); - - for (var i = 0; i < count; i++) - values.Add(read(DataTypes, data)); - - return values; - } - - private void WriteList(List data, List values, WriteDelegate write) - { - data.AddRange(DataTypes.GetVarInt(values.Count)); - foreach (var value in values) - data.AddRange(write(DataTypes, value)); - } - - private delegate T ReadDelegate(DataTypes dataTypes, Queue data); - private delegate byte[] WriteDelegate(DataTypes dataTypes, T value); -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CustomModelDataComponent1206.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CustomModelDataComponent1206.cs deleted file mode 100644 index 5483b3848d..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CustomModelDataComponent1206.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class CustomModelDataComponent1206(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Value { get; set; } - - public override void Parse(Queue data) - { - Value = DataTypes.ReadNextVarInt(data); - } - - public override Queue Serialize() - { - return new Queue(DataTypes.GetVarInt(Value)); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CustomNameComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CustomNameComponent.cs deleted file mode 100644 index 1104b598e0..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/CustomNameComponent.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class CustomNameComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public string CustomName { get; set; } = string.Empty; - public Dictionary? CustomNameNbt { get; set; } - - public override void Parse(Queue data) - { - CustomNameNbt = DataTypes.ReadNextNbt(data); - CustomName = ChatParser.ParseText(CustomNameNbt); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetNbt(CustomNameNbt)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/DamageComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/DamageComponent.cs deleted file mode 100644 index c105ee0c09..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/DamageComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class DamageComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Damage { get; set; } - - public override void Parse(Queue data) - { - Damage = DataTypes.ReadNextVarInt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Damage)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/DebugStickStateComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/DebugStickStateComponent.cs deleted file mode 100644 index a39a352d3e..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/DebugStickStateComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class DebugStickStateComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public Dictionary? Nbt { get; set; } - - public override void Parse(Queue data) - { - Nbt = DataTypes.ReadNextNbt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetNbt(Nbt)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/DyeColorComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/DyeColorComponent.cs deleted file mode 100644 index d887ecee48..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/DyeColorComponent.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class DyeColorComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Color { get; set; } - public bool ShowInTooltip { get; set; } - - public override void Parse(Queue data) - { - Color = DataTypes.ReadNextInt(data); - ShowInTooltip = DataTypes.ReadNextBool(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetInt(Color)); - data.AddRange(DataTypes.GetBool(ShowInTooltip)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/EnchantmentGlintOverrideComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/EnchantmentGlintOverrideComponent.cs deleted file mode 100644 index 6528ffb5be..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/EnchantmentGlintOverrideComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class EnchantmentGlintOverrideComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public bool HasGlint { get; set; } - - public override void Parse(Queue data) - { - HasGlint = DataTypes.ReadNextBool(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetBool(HasGlint)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/EnchantmentsComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/EnchantmentsComponent.cs deleted file mode 100644 index 8322201f79..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/EnchantmentsComponent.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class EnchantmentsComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int NumberOfEnchantments { get; set; } - public List Enchantments { get; set; } = new(); - public bool ShowTooltip { get; set; } - - public override void Parse(Queue data) - { - NumberOfEnchantments = DataTypes.ReadNextVarInt(data); - - for (var i = 0; i < NumberOfEnchantments; i++) - { - var registryId = DataTypes.ReadNextVarInt(data); - var level = DataTypes.ReadNextVarInt(data); - Enchantments.Add(new Enchantment(EnchantmentMapping.GetEnchantmentByRegistryId1206(DataTypes.ProtocolVersion, registryId), level)); - } - - ShowTooltip = DataTypes.ReadNextBool(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Enchantments.Count)); - foreach (var enchantment in Enchantments) - { - data.AddRange(DataTypes.GetVarInt(EnchantmentMapping.GetRegistryId1206ByEnchantment(DataTypes.ProtocolVersion, enchantment.Type))); - data.AddRange(DataTypes.GetVarInt(enchantment.Level)); - } - data.AddRange(DataTypes.GetBool(ShowTooltip)); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/EntityDataComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/EntityDataComponent.cs deleted file mode 100644 index ba31c9f99a..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/EntityDataComponent.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class EntityDataComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public Dictionary? Nbt { get; set; } - - public override void Parse(Queue data) - { - Nbt = DataTypes.ReadNextNbt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetNbt(Nbt)); - return new Queue(data); - } -} - -public class BucketEntityDataComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : EntityDataComponent(dataTypes, itemPalette, subComponentRegistry) -{ } - -public class BlockEntityDataComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : EntityDataComponent(dataTypes, itemPalette, subComponentRegistry) -{ } \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/FireResistantComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/FireResistantComponent.cs deleted file mode 100644 index 351eb684f9..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/FireResistantComponent.cs +++ /dev/null @@ -1,7 +0,0 @@ -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class FireResistantComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : EmptyComponent(dataTypes, itemPalette, subComponentRegistry); \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/FireworkExplosionComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/FireworkExplosionComponent.cs deleted file mode 100644 index a515f3bb5d..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/FireworkExplosionComponent.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Mapping; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class FireworkExplosionComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public FireworkExplosionSubComponent? FireworkExplosionSubComponent { get; set; } - - public override void Parse(Queue data) - { - FireworkExplosionSubComponent = (FireworkExplosionSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.FireworkExplosion, data); - } - - public override Queue Serialize() - { - return FireworkExplosionSubComponent!.Serialize(); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/FireworksComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/FireworksComponent.cs deleted file mode 100644 index db73c815f1..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/FireworksComponent.cs +++ /dev/null @@ -1,49 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Mapping; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class FireworksComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int FlightDuration { get; set; } - public int NumberOfExplosions { get; set; } - - public List Explosions { get; set; } = []; - - public override void Parse(Queue data) - { - FlightDuration = DataTypes.ReadNextVarInt(data); - NumberOfExplosions = DataTypes.ReadNextVarInt(data); - - if (NumberOfExplosions > 0) - { - for (var i = 0; i < NumberOfExplosions; i++) - Explosions.Add( - (FireworkExplosionSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.FireworkExplosion, - data)); - } - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(FlightDuration)); - data.AddRange(DataTypes.GetVarInt(NumberOfExplosions)); - if (NumberOfExplosions > 0) - { - if (NumberOfExplosions != Explosions.Count) - throw new Exception("Can't serialize FireworksComponent because NumberOfExplosions and the lenght of Explosions differ!"); - - foreach (var explosion in Explosions) - data.AddRange(explosion.Serialize().ToList()); - } - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/FoodComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/FoodComponent.cs deleted file mode 100644 index f8679473ad..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/FoodComponent.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class FoodComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Nutrition { get; set; } - public float Saturation { get; set; } - public bool CanAlwaysEat { get; set; } - public float SecondsToEat { get; set; } - public List Effects { get; set; } = new(); - - public override void Parse(Queue data) - { - Nutrition = DataTypes.ReadNextVarInt(data); - Saturation = DataTypes.ReadNextFloat(data); - CanAlwaysEat = DataTypes.ReadNextBool(data); - SecondsToEat = DataTypes.ReadNextFloat(data); - var numberOfEffects = DataTypes.ReadNextVarInt(data); - - for (var i = 0; i < numberOfEffects; i++) - Effects.Add((EffectSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.Effect, data)); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Nutrition)); - data.AddRange(DataTypes.GetFloat(Saturation)); - data.AddRange(DataTypes.GetBool(CanAlwaysEat)); - data.AddRange(DataTypes.GetFloat(SecondsToEat)); - data.AddRange(DataTypes.GetVarInt(Effects.Count)); - - foreach (var effect in Effects) - data.AddRange(effect.Serialize()); - - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/HideAdditionalTooltipComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/HideAdditionalTooltipComponent.cs deleted file mode 100644 index 9f659b9fe7..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/HideAdditionalTooltipComponent.cs +++ /dev/null @@ -1,7 +0,0 @@ -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class HideAdditionalTooltipComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : EmptyComponent(dataTypes, itemPalette, subComponentRegistry); \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/HideTooltipComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/HideTooltipComponent.cs deleted file mode 100644 index 77cdc7fae2..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/HideTooltipComponent.cs +++ /dev/null @@ -1,7 +0,0 @@ -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class HideTooltipComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : EmptyComponent(dataTypes, itemPalette, subComponentRegistry); \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/InstrumentComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/InstrumentComponent.cs deleted file mode 100644 index 87692b7008..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/InstrumentComponent.cs +++ /dev/null @@ -1,68 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class InstrumentComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - // holder ID: 0 = inline instrument data, N>0 = registry reference (id = N-1) - public int InstrumentHolderId { get; set; } - - // Inline instrument fields (only when InstrumentHolderId == 0): - // holder ID for SoundEvent: 0 = inline sound, N>0 = registry reference (id = N-1) - public int SoundEventHolderId { get; set; } - // Inline SoundEvent fields (only when SoundEventHolderId == 0): - public string? SoundLocation { get; set; } - public bool HasFixedRange { get; set; } - public float FixedRange { get; set; } - - public int UseDuration { get; set; } - public float Range { get; set; } - - public override void Parse(Queue data) - { - InstrumentHolderId = DataTypes.ReadNextVarInt(data); - - if (InstrumentHolderId == 0) - { - SoundEventHolderId = DataTypes.ReadNextVarInt(data); - - if (SoundEventHolderId == 0) - { - SoundLocation = DataTypes.ReadNextString(data); - HasFixedRange = DataTypes.ReadNextBool(data); - if (HasFixedRange) - FixedRange = DataTypes.ReadNextFloat(data); - } - - UseDuration = DataTypes.ReadNextVarInt(data); - Range = DataTypes.ReadNextFloat(data); - } - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(InstrumentHolderId)); - - if (InstrumentHolderId == 0) - { - data.AddRange(DataTypes.GetVarInt(SoundEventHolderId)); - - if (SoundEventHolderId == 0) - { - data.AddRange(DataTypes.GetString(SoundLocation ?? "")); - data.AddRange(DataTypes.GetBool(HasFixedRange)); - if (HasFixedRange) - data.AddRange(DataTypes.GetFloat(FixedRange)); - } - - data.AddRange(DataTypes.GetVarInt(UseDuration)); - data.AddRange(DataTypes.GetFloat(Range)); - } - - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/IntangibleProjectileComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/IntangibleProjectileComponent.cs deleted file mode 100644 index b6d24a5e9d..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/IntangibleProjectileComponent.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class IntangibleProjectileComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : EmptyComponent(dataTypes, itemPalette, subComponentRegistry) -{ -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ItemNameComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ItemNameComponent.cs deleted file mode 100644 index 4b42c77965..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ItemNameComponent.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class ItemNameComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public string ItemName { get; set; } = string.Empty; - public Dictionary? ItemNameNbt { get; set; } - - public override void Parse(Queue data) - { - ItemNameNbt = DataTypes.ReadNextNbt(data); - ItemName = ChatParser.ParseText(ItemNameNbt); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetNbt(ItemNameNbt)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/LockComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/LockComponent.cs deleted file mode 100644 index 85d050e2fa..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/LockComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class LockComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public Dictionary? Nbt { get; set; } - - public override void Parse(Queue data) - { - Nbt = DataTypes.ReadNextNbt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetNbt(Nbt)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/LodestoneTrackerComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/LodestoneTrackerComponent.cs deleted file mode 100644 index f3353755cb..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/LodestoneTrackerComponent.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Mapping; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class LodestoneTrackerComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public bool HasGlobalPosition { get; set; } - public string Dimension { get; set; } = null!; - public Location Position { get; set; } - public bool Tracked { get; set; } - - public override void Parse(Queue data) - { - HasGlobalPosition = DataTypes.ReadNextBool(data); - - if (HasGlobalPosition) - { - Dimension = DataTypes.ReadNextString(data); - Position = DataTypes.ReadNextLocation(data); - } - - Tracked = DataTypes.ReadNextBool(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetBool(HasGlobalPosition)); - - if (HasGlobalPosition) - { - data.AddRange(DataTypes.GetString(Dimension)); - data.AddRange(DataTypes.GetLocation(Position)); - } - - data.AddRange(DataTypes.GetBool(Tracked)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/LoreComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/LoreComponent.cs deleted file mode 100644 index d8cb51616c..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/LoreComponent.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class LoreNameComponent1206(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int NumberOfLines { get; set; } - public List Lines { get; set; } = []; - public List> LinesNbt { get; set; } = []; - - public override void Parse(Queue data) - { - NumberOfLines = DataTypes.ReadNextVarInt(data); - - if (NumberOfLines <= 0) return; - - for (var i = 0; i < NumberOfLines; i++) - { - var lineNbt = DataTypes.ReadNextNbt(data); - LinesNbt.Add(lineNbt); - Lines.Add(ChatParser.ParseText(lineNbt)); - } - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(LinesNbt.Count)); - - foreach (var lineNbt in LinesNbt) - data.AddRange(DataTypes.GetNbt(lineNbt)); - - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MapColorComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MapColorComponent.cs deleted file mode 100644 index 457e74b5e2..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MapColorComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class MapColorComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Id { get; set; } - - public override void Parse(Queue data) - { - Id = DataTypes.ReadNextInt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetInt(Id)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MapDecorationsComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MapDecorationsComponent.cs deleted file mode 100644 index 70b8b28d00..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MapDecorationsComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class MapDecorationsComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public Dictionary? Nbt { get; set; } = new(); - - public override void Parse(Queue data) - { - Nbt = DataTypes.ReadNextNbt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetNbt(Nbt)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MapIdComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MapIdComponent.cs deleted file mode 100644 index 712b721fae..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MapIdComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class MapIdComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Id { get; set; } - - public override void Parse(Queue data) - { - Id = DataTypes.ReadNextVarInt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Id)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MapPostProcessingComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MapPostProcessingComponent.cs deleted file mode 100644 index c7d58700f0..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MapPostProcessingComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class MapPostProcessingComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Type { get; set; } - - public override void Parse(Queue data) - { - Type = DataTypes.ReadNextVarInt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Type)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MaxDamageComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MaxDamageComponent.cs deleted file mode 100644 index 45e8545bcc..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MaxDamageComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class MaxDamageComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int MaxDamage { get; set; } - - public override void Parse(Queue data) - { - MaxDamage = DataTypes.ReadNextVarInt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(MaxDamage)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MaxStackSizeComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MaxStackSizeComponent.cs deleted file mode 100644 index 32da4c9f83..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/MaxStackSizeComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class MaxStackSizeComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int MaxStackSize { get; set; } - - public override void Parse(Queue data) - { - MaxStackSize = DataTypes.ReadNextVarInt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(MaxStackSize)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/NoteBlockSoundComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/NoteBlockSoundComponent.cs deleted file mode 100644 index 5d7c079252..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/NoteBlockSoundComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class NoteBlockSoundComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public string Identifier { get; set; } = null!; - - public override void Parse(Queue data) - { - Identifier = DataTypes.ReadNextString(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetString(Identifier)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/OminousBottleAmplifierComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/OminousBottleAmplifierComponent.cs deleted file mode 100644 index ed92d9533d..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/OminousBottleAmplifierComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class OminousBottleAmplifierComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Amplifier { get; set; } - - public override void Parse(Queue data) - { - Amplifier = DataTypes.ReadNextVarInt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Amplifier)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/PotDecorationsComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/PotDecorationsComponent.cs deleted file mode 100644 index 97b918274c..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/PotDecorationsComponent.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class PotDecorationsComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public List Items { get; set; } = []; - - public override void Parse(Queue data) - { - var count = DataTypes.ReadNextVarInt(data); - for (var i = 0; i < count; i++) - Items.Add(DataTypes.ReadNextVarInt(data)); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Items.Count)); - foreach (var item in Items) - data.AddRange(DataTypes.GetVarInt(item)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/PotionContentsComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/PotionContentsComponent.cs deleted file mode 100644 index b56e6897dc..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/PotionContentsComponent.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class PotionContentsComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public bool HasPotionId { get; set; } - public int PotionId { get; set; } - public bool HasCustomColor { get; set; } - public int CustomColor { get; set; } - public List Effects { get; set; } = new(); - - public override void Parse(Queue data) - { - HasPotionId = DataTypes.ReadNextBool(data); - if (HasPotionId) - PotionId = DataTypes.ReadNextVarInt(data); - - HasCustomColor = DataTypes.ReadNextBool(data); - if (HasCustomColor) - CustomColor = DataTypes.ReadNextInt(data); - - var numberOfEffects = DataTypes.ReadNextVarInt(data); - for (var i = 0; i < numberOfEffects; i++) - Effects.Add((PotionEffectSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.PotionEffect, data)); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetBool(HasPotionId)); - if (HasPotionId) - data.AddRange(DataTypes.GetVarInt(PotionId)); - - data.AddRange(DataTypes.GetBool(HasCustomColor)); - if (HasCustomColor) - data.AddRange(DataTypes.GetInt(CustomColor)); - - data.AddRange(DataTypes.GetVarInt(Effects.Count)); - foreach (var effect in Effects) - data.AddRange(effect.Serialize()); - - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ProfileComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ProfileComponent.cs deleted file mode 100644 index 23cc92bf26..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ProfileComponent.cs +++ /dev/null @@ -1,218 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class ProfileComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public bool HasName { get; set; } - public string? Name { get; set; } = null!; - public bool HasUniqueId { get; set; } - public Guid Uuid { get; set; } - public int NumberOfProperties { get; set; } - public List ProfileProperties { get; set; } = []; - public bool IsFullProfile { get; set; } - public string? BodyAssetId { get; set; } - public string? CapeAssetId { get; set; } - public string? ElytraAssetId { get; set; } - public ProfileSkinModel? Model { get; set; } - - public override void Parse(Queue data) - { - ResetState(); - - if (DataTypes.ProtocolVersion >= Protocol18Handler.MC_1_21_9_Version) - { - ParseResolvableProfile(data); - return; - } - - ParseLegacyProfile(data); - } - - public override Queue Serialize() - { - return DataTypes.ProtocolVersion >= Protocol18Handler.MC_1_21_9_Version - ? SerializeResolvableProfile() - : SerializeLegacyProfile(); - } - - private void ResetState() - { - HasName = false; - Name = null; - HasUniqueId = false; - Uuid = Guid.Empty; - NumberOfProperties = 0; - ProfileProperties = []; - IsFullProfile = false; - BodyAssetId = null; - CapeAssetId = null; - ElytraAssetId = null; - Model = null; - } - - private void ParseLegacyProfile(Queue data) - { - HasName = DataTypes.ReadNextBool(data); - - if (HasName) - Name = DataTypes.ReadNextString(data); - - HasUniqueId = DataTypes.ReadNextBool(data); - - if (HasUniqueId) - Uuid = DataTypes.ReadNextUUID(data); - - NumberOfProperties = DataTypes.ReadNextVarInt(data); - ProfileProperties = ReadProfileProperties(data, NumberOfProperties); - } - - private void ParseResolvableProfile(Queue data) - { - IsFullProfile = DataTypes.ReadNextBool(data); - - if (IsFullProfile) - { - HasUniqueId = true; - Uuid = DataTypes.ReadNextUUID(data); - HasName = true; - Name = DataTypes.ReadNextString(data); - NumberOfProperties = DataTypes.ReadNextVarInt(data); - ProfileProperties = ReadProfileProperties(data, NumberOfProperties); - } - else - { - HasName = DataTypes.ReadNextBool(data); - if (HasName) - Name = DataTypes.ReadNextString(data); - - HasUniqueId = DataTypes.ReadNextBool(data); - if (HasUniqueId) - Uuid = DataTypes.ReadNextUUID(data); - - NumberOfProperties = DataTypes.ReadNextVarInt(data); - ProfileProperties = ReadProfileProperties(data, NumberOfProperties); - } - - BodyAssetId = ReadOptionalResourceLocation(data); - CapeAssetId = ReadOptionalResourceLocation(data); - ElytraAssetId = ReadOptionalResourceLocation(data); - - if (DataTypes.ReadNextBool(data)) - Model = DataTypes.ReadNextBool(data) ? ProfileSkinModel.Slim : ProfileSkinModel.Wide; - } - - private Queue SerializeLegacyProfile() - { - var data = new List(); - NumberOfProperties = ProfileProperties.Count; - - data.AddRange(DataTypes.GetBool(HasName)); - if (HasName) - data.AddRange(DataTypes.GetString(Name ?? "")); - - data.AddRange(DataTypes.GetBool(HasUniqueId)); - if (HasUniqueId) - data.AddRange(DataTypes.GetUUID(Uuid)); - - data.AddRange(DataTypes.GetVarInt(NumberOfProperties)); - SerializeProfileProperties(data); - - return new Queue(data); - } - - private Queue SerializeResolvableProfile() - { - var data = new List(); - NumberOfProperties = ProfileProperties.Count; - - data.AddRange(DataTypes.GetBool(IsFullProfile)); - if (IsFullProfile) - { - if (!HasUniqueId) - throw new NullReferenceException("Can't serialize the ProfileComponent because a full profile requires a UUID!"); - - data.AddRange(DataTypes.GetUUID(Uuid)); - data.AddRange(DataTypes.GetString(Name ?? "")); - } - else - { - data.AddRange(DataTypes.GetBool(HasName)); - if (HasName) - data.AddRange(DataTypes.GetString(Name ?? "")); - - data.AddRange(DataTypes.GetBool(HasUniqueId)); - if (HasUniqueId) - data.AddRange(DataTypes.GetUUID(Uuid)); - } - - data.AddRange(DataTypes.GetVarInt(NumberOfProperties)); - SerializeProfileProperties(data); - - SerializeOptionalResourceLocation(data, BodyAssetId); - SerializeOptionalResourceLocation(data, CapeAssetId); - SerializeOptionalResourceLocation(data, ElytraAssetId); - - data.AddRange(DataTypes.GetBool(Model.HasValue)); - if (Model.HasValue) - data.AddRange(DataTypes.GetBool(Model.Value == ProfileSkinModel.Slim)); - - return new Queue(data); - } - - private List ReadProfileProperties(Queue data, int count) - { - var properties = new List(count); - for (var i = 0; i < count; i++) - { - var propertyName = DataTypes.ReadNextString(data); - var propertyValue = DataTypes.ReadNextString(data); - var hasSignature = DataTypes.ReadNextBool(data); - var signature = hasSignature ? DataTypes.ReadNextString(data) : null; - - properties.Add(new ProfileProperty(propertyName, propertyValue, hasSignature, signature)); - } - - return properties; - } - - private void SerializeProfileProperties(List data) - { - foreach (var profileProperty in ProfileProperties) - { - data.AddRange(DataTypes.GetString(profileProperty.Name)); - data.AddRange(DataTypes.GetString(profileProperty.Value)); - data.AddRange(DataTypes.GetBool(profileProperty.HasSignature)); - if (!profileProperty.HasSignature) - continue; - - if (string.IsNullOrEmpty(profileProperty.Signature)) - throw new NullReferenceException("Can't serialize the ProfileComponent because HasSignature is true, but the Signature is null/empty!"); - - data.AddRange(DataTypes.GetString(profileProperty.Signature)); - } - } - - private string? ReadOptionalResourceLocation(Queue data) - { - return DataTypes.ReadNextBool(data) ? DataTypes.ReadNextString(data) : null; - } - - private void SerializeOptionalResourceLocation(List data, string? resourceLocation) - { - data.AddRange(DataTypes.GetBool(!string.IsNullOrEmpty(resourceLocation))); - if (!string.IsNullOrEmpty(resourceLocation)) - data.AddRange(DataTypes.GetString(resourceLocation)); - } -} - -public record ProfileProperty(string Name, string Value, bool HasSignature, string? Signature); - -public enum ProfileSkinModel -{ - Wide, - Slim -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/RarityComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/RarityComponent.cs deleted file mode 100644 index cbe3b9e9c6..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/RarityComponent.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class RarityComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public ItemRarity Rarity { get; set; } - - public override void Parse(Queue data) - { - Rarity = (ItemRarity)DataTypes.ReadNextVarInt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt((int)Rarity)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/RecipesComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/RecipesComponent.cs deleted file mode 100644 index 9df0e22be8..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/RecipesComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class RecipesComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public Dictionary? Nbt { get; set; } - - public override void Parse(Queue data) - { - Nbt = DataTypes.ReadNextNbt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetNbt(Nbt)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/RepairCostComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/RepairCostComponent.cs deleted file mode 100644 index 951f14f54e..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/RepairCostComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class RepairCostComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Cost { get; set; } - - public override void Parse(Queue data) - { - Cost = DataTypes.ReadNextVarInt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Cost)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/StoredEnchantmentsComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/StoredEnchantmentsComponent.cs deleted file mode 100644 index a741d54d5f..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/StoredEnchantmentsComponent.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class StoredEnchantmentsComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : EnchantmentsComponent(dataTypes, itemPalette, subComponentRegistry); \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/SuspiciousStewEffectsComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/SuspiciousStewEffectsComponent.cs deleted file mode 100644 index b6518820ad..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/SuspiciousStewEffectsComponent.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class SuspiciousStewEffectsComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int NumberOfEffects { get; set; } - public List Effects { get; set; } = new(); - - public override void Parse(Queue data) - { - NumberOfEffects = DataTypes.ReadNextVarInt(data); - - for (var i = 0; i < NumberOfEffects; i++) - Effects.Add(new SuspiciousStewEffect(DataTypes.ReadNextVarInt(data), DataTypes.ReadNextVarInt(data))); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(NumberOfEffects)); - - if (NumberOfEffects != Effects.Count) - throw new InvalidOperationException("Can not serialize SuspiciousStewEffectsComponent1206 because umberOfEffects != Effects.Count!"); - - foreach (var effect in Effects) - { - data.AddRange(DataTypes.GetVarInt(effect.TypeId)); - data.AddRange(DataTypes.GetVarInt(effect.Duration)); - } - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ToolComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ToolComponent.cs deleted file mode 100644 index 2d761739ab..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/ToolComponent.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class ToolComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int NumberOfRules { get; set; } - public List Rules { get; set; } = new(); - public float DefaultMiningSpeed { get; set; } - public int DamagePerBlock { get; set; } - - public override void Parse(Queue data) - { - NumberOfRules = DataTypes.ReadNextVarInt(data); - - for (var i = 0; i < NumberOfRules; i++) - Rules.Add((RuleSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.Rule, data)); - - DefaultMiningSpeed = DataTypes.ReadNextFloat(data); - DamagePerBlock = DataTypes.ReadNextVarInt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(NumberOfRules)); - - if (Rules.Count != NumberOfRules) - throw new ArgumentNullException($"Can not serialize a ToolComponent1206 when the Rules count != NumberOfRules!"); - - foreach (var rule in Rules) - data.AddRange(rule.Serialize()); - - data.AddRange(DataTypes.GetFloat(DefaultMiningSpeed)); - data.AddRange(DataTypes.GetVarInt(DamagePerBlock)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/TrimComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/TrimComponent.cs deleted file mode 100644 index 90b7912729..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/TrimComponent.cs +++ /dev/null @@ -1,111 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class TrimComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int TrimMaterialType { get; set; } - public string AssetName { get; set; } = null!; - public int Ingredient { get; set; } - public float ItemModelIndex { get; set; } - public int NumberOfOverrides { get; set; } - public List? Overrides { get; set; } - public Dictionary? DescriptionNbt { get; set; } - public string Description { get; set; } = null!; - public int TrimPatternType { get; set; } - public string TrimPatternTypeAssetName { get; set; } = null!; - public int TemplateItem { get; set; } - public Dictionary? TrimPatternTypeDescriptionNbt { get; set; } - public string TrimPatternTypeDescription { get; set; } = null!; - public bool Decal { get; set; } - public bool ShowInTooltip { get; set; } - - public override void Parse(Queue data) - { - TrimMaterialType = DataTypes.ReadNextVarInt(data); - - if (TrimMaterialType == 0) - { - AssetName = DataTypes.ReadNextString(data); - Ingredient = DataTypes.ReadNextVarInt(data); - ItemModelIndex = DataTypes.ReadNextFloat(data); - NumberOfOverrides = DataTypes.ReadNextVarInt(data); - - if (NumberOfOverrides > 0) - { - Overrides = []; - - for (var i = 0; i < NumberOfOverrides; i++) - Overrides.Add(new TrimAssetOverride(DataTypes.ReadNextVarInt(data), - DataTypes.ReadNextString(data))); - } - - DescriptionNbt = DataTypes.ReadNextNbt(data); - Description = ChatParser.ParseText(DescriptionNbt); - } - - TrimPatternType = DataTypes.ReadNextVarInt(data); - - if (TrimPatternType == 0) - { - TrimPatternTypeAssetName = DataTypes.ReadNextString(data); - TemplateItem = DataTypes.ReadNextVarInt(data); - TrimPatternTypeDescriptionNbt = DataTypes.ReadNextNbt(data); - TrimPatternTypeDescription = ChatParser.ParseText(TrimPatternTypeDescriptionNbt); - Decal = DataTypes.ReadNextBool(data); - } - - ShowInTooltip = DataTypes.ReadNextBool(data); - } - - public override Queue Serialize() - { - var data = new List(); - - data.AddRange(DataTypes.GetVarInt(TrimMaterialType)); - - if (TrimMaterialType == 0) - { - if (string.IsNullOrEmpty(AssetName)) - throw new NullReferenceException("Can't serialize the TrimComponent because the Asset Name is null!"); - - data.AddRange(DataTypes.GetString(AssetName)); - data.AddRange(DataTypes.GetVarInt(Ingredient)); - data.AddRange(DataTypes.GetFloat(ItemModelIndex)); - data.AddRange(DataTypes.GetVarInt(NumberOfOverrides)); - if (NumberOfOverrides > 0) - { - if (NumberOfOverrides != Overrides?.Count) - throw new NullReferenceException("Can't serialize the TrimComponent because value of NumberOfOverrides and the size of Overrides don't match!"); - - foreach (var (armorMaterialType, assetName) in Overrides) - { - data.AddRange(DataTypes.GetVarInt(armorMaterialType)); - data.AddRange(DataTypes.GetString(assetName)); - } - } - data.AddRange(DataTypes.GetNbt(DescriptionNbt)); - } - - data.AddRange(DataTypes.GetVarInt(TrimPatternType)); - if (TrimPatternType == 0) - { - if (string.IsNullOrEmpty(TrimPatternTypeAssetName)) - throw new NullReferenceException("Can't serialize the TrimComponent because the TrimPatternTypeAssetName is null!"); - - data.AddRange(DataTypes.GetString(TrimPatternTypeAssetName)); - data.AddRange(DataTypes.GetVarInt(TemplateItem)); - data.AddRange(DataTypes.GetNbt(TrimPatternTypeDescriptionNbt)); - data.AddRange(DataTypes.GetBool(Decal)); - } - - data.AddRange(DataTypes.GetBool(ShowInTooltip)); - - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/UnbreakableComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/UnbreakableComponent.cs deleted file mode 100644 index b4f354f66e..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/UnbreakableComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class UnbreakableComponent1206(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public bool Unbreakable { get; set; } - - public override void Parse(Queue data) - { - Unbreakable = DataTypes.ReadNextBool(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetBool(Unbreakable)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/WritableBookContentComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/WritableBookContentComponent.cs deleted file mode 100644 index 59dc040913..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/WritableBookContentComponent.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class WritableBookContentComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public List Pages { get; set; } = []; - - public override void Parse(Queue data) - { - var count = DataTypes.ReadNextVarInt(data); - - for (var i = 0; i < count; i++) - { - var rawContent = DataTypes.ReadNextString(data); - var hasFilteredContent = DataTypes.ReadNextBool(data); - var filteredContent = null as string; - - if (hasFilteredContent) - filteredContent = DataTypes.ReadNextString(data); - - Pages.Add(new BookPage(rawContent, hasFilteredContent, filteredContent)); - } - } - - public override Queue Serialize() - { - var data = new List(); - - data.AddRange(DataTypes.GetVarInt(Pages.Count)); - - foreach (var page in Pages) - { - data.AddRange(DataTypes.GetString(page.RawContent)); - data.AddRange(DataTypes.GetBool(page.HasFilteredContent)); - - if (page.HasFilteredContent) - { - if (page.FilteredContent is null) - throw new InvalidOperationException("Can not serialize WritableBookContentComponent because page.HasFilteredContent = true, but FilteredContent is null!"); - - data.AddRange(DataTypes.GetString(page.FilteredContent)); - } - } - - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/WrittenBookContentComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/WrittenBookContentComponent.cs deleted file mode 100644 index 413c94d814..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_20_6/WrittenBookContentComponent.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -public class WrittenBookContentComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public string RawTitle { get; set; } = null!; - public bool HasFilteredTitle { get; set; } - public string? FilteredTitle { get; set; } - public string Author { get; set; } = null!; - public int Generation { get; set; } - public int NumberOfPages { get; set; } - public List Pages { get; set; } = []; - public bool Resolved { get; set; } - - public override void Parse(Queue data) - { - RawTitle = DataTypes.ReadNextString(data); - HasFilteredTitle = DataTypes.ReadNextBool(data); - - if (HasFilteredTitle) - FilteredTitle = DataTypes.ReadNextString(data); - - Author = DataTypes.ReadNextString(data); - Generation = DataTypes.ReadNextVarInt(data); - NumberOfPages = DataTypes.ReadNextVarInt(data); - - for (var i = 0; i < NumberOfPages; i++) - { - var (rawContent, rawContentNbt) = ReadPageComponent(data); - var hasFilteredContent = DataTypes.ReadNextBool(data); - Dictionary? filteredContentNbt = null; - string? filteredContent = null; - - if (hasFilteredContent) - (filteredContent, filteredContentNbt) = ReadPageComponent(data); - - Pages.Add(new BookPage(rawContent, hasFilteredContent, filteredContent, rawContentNbt, filteredContentNbt)); - } - - Resolved = DataTypes.ReadNextBool(data); - } - - private (string Content, Dictionary Nbt) ReadPageComponent(Queue data) - { - // Hypixel sent page payloads in the string-shaped form on this structured-book path, - // so keep the parser tolerant while still preserving the raw data for serialization. - Queue fallbackData = new(data); - - try - { - var nbt = DataTypes.ReadNextNbt(data); - return (ChatParser.ParseText(nbt), nbt); - } - catch (System.IO.InvalidDataException) - { - data.Clear(); - foreach (var b in fallbackData) - data.Enqueue(b); - - var json = DataTypes.ReadNextString(data); - return (ChatParser.ParseText(json), new Dictionary { [""] = json }); - } - } - - public override Queue Serialize() - { - var data = new List(); - - data.AddRange(DataTypes.GetString(RawTitle)); - data.AddRange(DataTypes.GetBool(HasFilteredTitle)); - - if (HasFilteredTitle) - { - if (FilteredTitle is null) - throw new InvalidOperationException("Can not serialize WrittenBookContentComponent because HasFilteredTitle is true but FilteredTitle is null!"); - - data.AddRange(DataTypes.GetString(FilteredTitle)); - } - - data.AddRange(DataTypes.GetString(Author)); - data.AddRange(DataTypes.GetVarInt(Generation)); - data.AddRange(DataTypes.GetVarInt(Pages.Count)); - - foreach (var page in Pages) - { - data.AddRange(DataTypes.GetNbt(page.RawContentNbt)); - data.AddRange(DataTypes.GetBool(page.HasFilteredContent)); - - if (page.HasFilteredContent) - data.AddRange(DataTypes.GetNbt(page.FilteredContentNbt)); - } - data.AddRange(DataTypes.GetBool(Resolved)); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21/JukeBoxPlayableComponent121.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21/JukeBoxPlayableComponent121.cs deleted file mode 100644 index 0b4266fd9f..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21/JukeBoxPlayableComponent121.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_21; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21; - -public class JukeBoxPlayableComponent121(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public bool IsHolder { get; set; } - public int HolderId { get; set; } - public string? ResourceKey { get; set; } - public SoundEventSubComponent? SoundEvent { get; set; } - public Dictionary? DescriptionNbt { get; set; } - public string Description { get; set; } = string.Empty; - public float Duration { get; set; } - public int ComparatorOutput { get; set; } - public bool ShowTooltip { get; set; } - - public override void Parse(Queue data) - { - IsHolder = DataTypes.ReadNextBool(data); - - if (IsHolder) - { - HolderId = DataTypes.ReadNextVarInt(data); - if (HolderId == 0) - { - SoundEvent = (SoundEventSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.SoundEvent, data); - DescriptionNbt = DataTypes.ReadNextNbt(data); - Description = ChatParser.ParseText(DescriptionNbt); - Duration = DataTypes.ReadNextFloat(data); - ComparatorOutput = DataTypes.ReadNextVarInt(data); - } - } - else - { - ResourceKey = DataTypes.ReadNextString(data); - } - - ShowTooltip = DataTypes.ReadNextBool(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetBool(IsHolder)); - - if (IsHolder) - { - data.AddRange(DataTypes.GetVarInt(HolderId)); - if (HolderId == 0) - { - if (SoundEvent is null) - throw new ArgumentNullException(nameof(SoundEvent), "Inline jukebox song requires a sound event."); - - if (DescriptionNbt is null) - throw new ArgumentNullException(nameof(DescriptionNbt), "Inline jukebox song requires a description."); - - data.AddRange(SoundEvent.Serialize()); - data.AddRange(DataTypes.GetNbt(DescriptionNbt)); - data.AddRange(DataTypes.GetFloat(Duration)); - data.AddRange(DataTypes.GetVarInt(ComparatorOutput)); - } - } - else - { - if (string.IsNullOrEmpty(ResourceKey)) - throw new ArgumentNullException(nameof(ResourceKey), "Resource key is required for key-backed jukebox songs."); - - data.AddRange(DataTypes.GetString(ResourceKey)); - } - - data.AddRange(DataTypes.GetBool(ShowTooltip)); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/AttackRangeComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/AttackRangeComponent.cs deleted file mode 100644 index f06bff4228..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/AttackRangeComponent.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_11; - -public class AttackRangeComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public float MinRange { get; set; } - public float MaxRange { get; set; } - public float MinCreativeRange { get; set; } - public float MaxCreativeRange { get; set; } - public float HitboxMargin { get; set; } - public float MobFactor { get; set; } - - public override void Parse(Queue data) - { - MinRange = DataTypes.ReadNextFloat(data); - MaxRange = DataTypes.ReadNextFloat(data); - MinCreativeRange = DataTypes.ReadNextFloat(data); - MaxCreativeRange = DataTypes.ReadNextFloat(data); - HitboxMargin = DataTypes.ReadNextFloat(data); - MobFactor = DataTypes.ReadNextFloat(data); - } - - public override Queue Serialize() - { - var bytes = new List(); - bytes.AddRange(DataTypes.GetFloat(MinRange)); - bytes.AddRange(DataTypes.GetFloat(MaxRange)); - bytes.AddRange(DataTypes.GetFloat(MinCreativeRange)); - bytes.AddRange(DataTypes.GetFloat(MaxCreativeRange)); - bytes.AddRange(DataTypes.GetFloat(HitboxMargin)); - bytes.AddRange(DataTypes.GetFloat(MobFactor)); - return new Queue(bytes); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/KineticWeaponComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/KineticWeaponComponent.cs deleted file mode 100644 index 4d676f5154..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/KineticWeaponComponent.cs +++ /dev/null @@ -1,72 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_11; - -public class KineticWeaponComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int ContactCooldownTicks { get; set; } - public int DelayTicks { get; set; } - public KineticWeaponConditionData? DismountConditions { get; set; } - public KineticWeaponConditionData? KnockbackConditions { get; set; } - public KineticWeaponConditionData? DamageConditions { get; set; } - public float ForwardMovement { get; set; } - public float DamageMultiplier { get; set; } - public SoundEventHolderData? Sound { get; set; } - public SoundEventHolderData? HitSound { get; set; } - - public override void Parse(Queue data) - { - ContactCooldownTicks = DataTypes.ReadNextVarInt(data); - DelayTicks = DataTypes.ReadNextVarInt(data); - DismountConditions = ReadOptionalCondition(data); - KnockbackConditions = ReadOptionalCondition(data); - DamageConditions = ReadOptionalCondition(data); - ForwardMovement = DataTypes.ReadNextFloat(data); - DamageMultiplier = DataTypes.ReadNextFloat(data); - Sound = StructuredComponentCodecHelpers.ReadOptionalSoundEventHolder(DataTypes, data); - HitSound = StructuredComponentCodecHelpers.ReadOptionalSoundEventHolder(DataTypes, data); - } - - private KineticWeaponConditionData? ReadOptionalCondition(Queue data) - { - if (!DataTypes.ReadNextBool(data)) - return null; - - return new KineticWeaponConditionData( - DataTypes.ReadNextVarInt(data), - DataTypes.ReadNextFloat(data), - DataTypes.ReadNextFloat(data)); - } - - private void WriteOptionalCondition(List data, KineticWeaponConditionData? condition) - { - data.AddRange(DataTypes.GetBool(condition is not null)); - if (condition is null) - return; - - data.AddRange(DataTypes.GetVarInt(condition.MaxDurationTicks)); - data.AddRange(DataTypes.GetFloat(condition.MinSpeed)); - data.AddRange(DataTypes.GetFloat(condition.MinRelativeSpeed)); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(ContactCooldownTicks)); - data.AddRange(DataTypes.GetVarInt(DelayTicks)); - WriteOptionalCondition(data, DismountConditions); - WriteOptionalCondition(data, KnockbackConditions); - WriteOptionalCondition(data, DamageConditions); - data.AddRange(DataTypes.GetFloat(ForwardMovement)); - data.AddRange(DataTypes.GetFloat(DamageMultiplier)); - StructuredComponentCodecHelpers.WriteOptionalSoundEventHolder(DataTypes, data, Sound); - StructuredComponentCodecHelpers.WriteOptionalSoundEventHolder(DataTypes, data, HitSound); - return new Queue(data); - } -} - -public sealed record KineticWeaponConditionData(int MaxDurationTicks, float MinSpeed, float MinRelativeSpeed); diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/PiercingWeaponComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/PiercingWeaponComponent.cs deleted file mode 100644 index a6af8beff7..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/PiercingWeaponComponent.cs +++ /dev/null @@ -1,33 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_11; - -public class PiercingWeaponComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public bool DealsKnockback { get; set; } - public bool Dismounts { get; set; } - public SoundEventHolderData? Sound { get; set; } - public SoundEventHolderData? HitSound { get; set; } - - public override void Parse(Queue data) - { - DealsKnockback = DataTypes.ReadNextBool(data); - Dismounts = DataTypes.ReadNextBool(data); - Sound = StructuredComponentCodecHelpers.ReadOptionalSoundEventHolder(DataTypes, data); - HitSound = StructuredComponentCodecHelpers.ReadOptionalSoundEventHolder(DataTypes, data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetBool(DealsKnockback)); - data.AddRange(DataTypes.GetBool(Dismounts)); - StructuredComponentCodecHelpers.WriteOptionalSoundEventHolder(DataTypes, data, Sound); - StructuredComponentCodecHelpers.WriteOptionalSoundEventHolder(DataTypes, data, HitSound); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/RegistryEitherHolderComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/RegistryEitherHolderComponent.cs deleted file mode 100644 index 6d786f8ce3..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/RegistryEitherHolderComponent.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_11; - -/// -/// EitherHolder backed by holderRegistry (VarInt = raw registry ID, 0 is valid). -/// Used for DamageType and ZombieNautilusVariant where the holder codec is holderRegistry(), -/// unlike the holder() codec used in SoundEvent (where 0 means inline). -/// -public class RegistryEitherHolderComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public bool IsHolder { get; set; } - public int HolderId { get; set; } - public string? ResourceKey { get; set; } - - public override void Parse(Queue data) - { - IsHolder = DataTypes.ReadNextBool(data); - if (IsHolder) - HolderId = DataTypes.ReadNextVarInt(data); - else - ResourceKey = DataTypes.ReadNextString(data); - } - - public override Queue Serialize() - { - var bytes = new List(); - bytes.AddRange(DataTypes.GetBool(IsHolder)); - if (IsHolder) - bytes.AddRange(DataTypes.GetVarInt(HolderId)); - else - bytes.AddRange(DataTypes.GetString(ResourceKey ?? "")); - return new Queue(bytes); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/SwingAnimationComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/SwingAnimationComponent.cs deleted file mode 100644 index 3ce4792041..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/SwingAnimationComponent.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_11; - -public class SwingAnimationComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int AnimationType { get; set; } - public int Duration { get; set; } - - public override void Parse(Queue data) - { - AnimationType = DataTypes.ReadNextVarInt(data); - Duration = DataTypes.ReadNextVarInt(data); - } - - public override Queue Serialize() - { - var bytes = new List(); - bytes.AddRange(DataTypes.GetVarInt(AnimationType)); - bytes.AddRange(DataTypes.GetVarInt(Duration)); - return new Queue(bytes); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/UseEffectsComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/UseEffectsComponent.cs deleted file mode 100644 index a4b72a9fd0..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_11/UseEffectsComponent.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_11; - -public class UseEffectsComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public bool CanSprint { get; set; } - public bool InteractVibrations { get; set; } - public float SpeedMultiplier { get; set; } - - public override void Parse(Queue data) - { - CanSprint = DataTypes.ReadNextBool(data); - InteractVibrations = DataTypes.ReadNextBool(data); - SpeedMultiplier = DataTypes.ReadNextFloat(data); - } - - public override Queue Serialize() - { - var bytes = new List(); - bytes.AddRange(DataTypes.GetBool(CanSprint)); - bytes.AddRange(DataTypes.GetBool(InteractVibrations)); - bytes.AddRange(DataTypes.GetFloat(SpeedMultiplier)); - return new Queue(bytes); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/ConsumableComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/ConsumableComponent.cs deleted file mode 100644 index ac3c34eab2..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/ConsumableComponent.cs +++ /dev/null @@ -1,129 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_21; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; - -public class ConsumableComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public float ConsumeSeconds { get; set; } - public int Animation { get; set; } - public SoundEventSubComponent? Sound { get; set; } - public bool HasConsumeParticles { get; set; } - public List Effects { get; set; } = new(); - - public override void Parse(Queue data) - { - ConsumeSeconds = DataTypes.ReadNextFloat(data); - Animation = DataTypes.ReadNextVarInt(data); - Sound = (SoundEventSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.SoundEvent, data); - HasConsumeParticles = DataTypes.ReadNextBool(data); - - var effectCount = DataTypes.ReadNextVarInt(data); - for (var i = 0; i < effectCount; i++) - { - var effectTypeId = DataTypes.ReadNextVarInt(data); - var effectData = ReadConsumeEffectPayload(effectTypeId, data); - Effects.Add(new ConsumeEffectData(effectTypeId, effectData)); - } - } - - private byte[] ReadConsumeEffectPayload(int effectTypeId, Queue data) - { - var payload = new List(); - switch (effectTypeId) - { - case 0: // apply_effects: List + probability(float) - var effectCount = DataTypes.ReadNextVarInt(data); - payload.AddRange(DataTypes.GetVarInt(effectCount)); - for (var i = 0; i < effectCount; i++) - payload.AddRange(ReadMobEffectInstance(data)); - payload.AddRange(DataTypes.GetFloat(DataTypes.ReadNextFloat(data))); - break; - case 1: // remove_effects: HolderSet - payload.AddRange(ReadHolderSet(data)); - break; - case 2: // clear_all_effects: empty - break; - case 3: // teleport_randomly: float diameter - payload.AddRange(DataTypes.GetFloat(DataTypes.ReadNextFloat(data))); - break; - case 4: // play_sound: Holder - var sound = (SoundEventSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.SoundEvent, data); - payload.AddRange(sound.Serialize()); - break; - } - return payload.ToArray(); - } - - private byte[] ReadMobEffectInstance(Queue data) - { - var result = new List(); - var effectId = DataTypes.ReadNextVarInt(data); - result.AddRange(DataTypes.GetVarInt(effectId)); - result.AddRange(ReadMobEffectDetails(data)); - return result.ToArray(); - } - - private byte[] ReadMobEffectDetails(Queue data) - { - var result = new List(); - var amplifier = DataTypes.ReadNextVarInt(data); - result.AddRange(DataTypes.GetVarInt(amplifier)); - var duration = DataTypes.ReadNextVarInt(data); - result.AddRange(DataTypes.GetVarInt(duration)); - var ambient = DataTypes.ReadNextBool(data); - result.AddRange(DataTypes.GetBool(ambient)); - var showParticles = DataTypes.ReadNextBool(data); - result.AddRange(DataTypes.GetBool(showParticles)); - var showIcon = DataTypes.ReadNextBool(data); - result.AddRange(DataTypes.GetBool(showIcon)); - var hasHiddenEffect = DataTypes.ReadNextBool(data); - result.AddRange(DataTypes.GetBool(hasHiddenEffect)); - if (hasHiddenEffect) - result.AddRange(ReadMobEffectDetails(data)); - return result.ToArray(); - } - - private byte[] ReadHolderSet(Queue data) - { - var result = new List(); - var type = DataTypes.ReadNextVarInt(data); - result.AddRange(DataTypes.GetVarInt(type)); - if (type == 0) - { - var tagName = DataTypes.ReadNextString(data); - result.AddRange(DataTypes.GetString(tagName)); - } - else - { - for (var i = 0; i < type - 1; i++) - { - var id = DataTypes.ReadNextVarInt(data); - result.AddRange(DataTypes.GetVarInt(id)); - } - } - return result.ToArray(); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetFloat(ConsumeSeconds)); - data.AddRange(DataTypes.GetVarInt(Animation)); - if (Sound is not null) data.AddRange(Sound.Serialize()); - data.AddRange(DataTypes.GetBool(HasConsumeParticles)); - data.AddRange(DataTypes.GetVarInt(Effects.Count)); - foreach (var effect in Effects) - { - data.AddRange(DataTypes.GetVarInt(effect.EffectTypeId)); - data.AddRange(effect.Payload); - } - return new Queue(data); - } - - public record ConsumeEffectData(int EffectTypeId, byte[] Payload); -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/DamageResistantComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/DamageResistantComponent.cs deleted file mode 100644 index cc5867bb74..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/DamageResistantComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; - -public class DamageResistantComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public string Types { get; set; } = null!; - - public override void Parse(Queue data) - { - Types = DataTypes.ReadNextString(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetString(Types)); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/DeathProtectionComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/DeathProtectionComponent.cs deleted file mode 100644 index 5b5cc011e4..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/DeathProtectionComponent.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_21; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; - -public class DeathProtectionComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public List DeathEffects { get; set; } = new(); - - public override void Parse(Queue data) - { - var effectCount = DataTypes.ReadNextVarInt(data); - for (var i = 0; i < effectCount; i++) - { - var effectTypeId = DataTypes.ReadNextVarInt(data); - var effectData = ReadConsumeEffectPayload(effectTypeId, data); - DeathEffects.Add(new ConsumeEffectData(effectTypeId, effectData)); - } - } - - private byte[] ReadConsumeEffectPayload(int effectTypeId, Queue data) - { - var payload = new List(); - switch (effectTypeId) - { - case 0: // apply_effects - var effectCount = DataTypes.ReadNextVarInt(data); - payload.AddRange(DataTypes.GetVarInt(effectCount)); - for (var i = 0; i < effectCount; i++) - payload.AddRange(ReadMobEffectInstance(data)); - payload.AddRange(DataTypes.GetFloat(DataTypes.ReadNextFloat(data))); - break; - case 1: // remove_effects - payload.AddRange(ReadHolderSet(data)); - break; - case 2: // clear_all_effects - break; - case 3: // teleport_randomly - payload.AddRange(DataTypes.GetFloat(DataTypes.ReadNextFloat(data))); - break; - case 4: // play_sound - var sound = (SoundEventSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.SoundEvent, data); - payload.AddRange(sound.Serialize()); - break; - } - return payload.ToArray(); - } - - private byte[] ReadMobEffectInstance(Queue data) - { - var result = new List(); - result.AddRange(DataTypes.GetVarInt(DataTypes.ReadNextVarInt(data))); - result.AddRange(ReadMobEffectDetails(data)); - return result.ToArray(); - } - - private byte[] ReadMobEffectDetails(Queue data) - { - var result = new List(); - result.AddRange(DataTypes.GetVarInt(DataTypes.ReadNextVarInt(data))); - result.AddRange(DataTypes.GetVarInt(DataTypes.ReadNextVarInt(data))); - result.AddRange(DataTypes.GetBool(DataTypes.ReadNextBool(data))); - result.AddRange(DataTypes.GetBool(DataTypes.ReadNextBool(data))); - result.AddRange(DataTypes.GetBool(DataTypes.ReadNextBool(data))); - var hasHidden = DataTypes.ReadNextBool(data); - result.AddRange(DataTypes.GetBool(hasHidden)); - if (hasHidden) - result.AddRange(ReadMobEffectDetails(data)); - return result.ToArray(); - } - - private byte[] ReadHolderSet(Queue data) - { - var result = new List(); - var type = DataTypes.ReadNextVarInt(data); - result.AddRange(DataTypes.GetVarInt(type)); - if (type == 0) - { - result.AddRange(DataTypes.GetString(DataTypes.ReadNextString(data))); - } - else - { - for (var i = 0; i < type - 1; i++) - result.AddRange(DataTypes.GetVarInt(DataTypes.ReadNextVarInt(data))); - } - return result.ToArray(); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(DeathEffects.Count)); - foreach (var effect in DeathEffects) - { - data.AddRange(DataTypes.GetVarInt(effect.EffectTypeId)); - data.AddRange(effect.Payload); - } - return new Queue(data); - } - - public record ConsumeEffectData(int EffectTypeId, byte[] Payload); -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/EnchantableComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/EnchantableComponent.cs deleted file mode 100644 index f522dbd9bc..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/EnchantableComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; - -public class EnchantableComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Value { get; set; } - - public override void Parse(Queue data) - { - Value = DataTypes.ReadNextVarInt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Value)); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/EquippableComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/EquippableComponent.cs deleted file mode 100644 index eb3a93b097..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/EquippableComponent.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_21; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; - -public class EquippableComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Slot { get; set; } - public SoundEventSubComponent? EquipSound { get; set; } - public bool HasModel { get; set; } - public string? Model { get; set; } - public bool HasCameraOverlay { get; set; } - public string? CameraOverlay { get; set; } - public bool HasAllowedEntities { get; set; } - public int AllowedEntitiesType { get; set; } - public string? AllowedEntitiesTag { get; set; } - public List? AllowedEntitiesIds { get; set; } - public bool Dispensable { get; set; } - public bool Swappable { get; set; } - public bool DamageOnHurt { get; set; } - - public override void Parse(Queue data) - { - Slot = DataTypes.ReadNextVarInt(data); - EquipSound = (SoundEventSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.SoundEvent, data); - - HasModel = DataTypes.ReadNextBool(data); - if (HasModel) - Model = DataTypes.ReadNextString(data); - - HasCameraOverlay = DataTypes.ReadNextBool(data); - if (HasCameraOverlay) - CameraOverlay = DataTypes.ReadNextString(data); - - HasAllowedEntities = DataTypes.ReadNextBool(data); - if (HasAllowedEntities) - { - AllowedEntitiesType = DataTypes.ReadNextVarInt(data); - if (AllowedEntitiesType == 0) - { - AllowedEntitiesTag = DataTypes.ReadNextString(data); - } - else - { - AllowedEntitiesIds = new List(); - for (var i = 0; i < AllowedEntitiesType - 1; i++) - AllowedEntitiesIds.Add(DataTypes.ReadNextVarInt(data)); - } - } - - Dispensable = DataTypes.ReadNextBool(data); - Swappable = DataTypes.ReadNextBool(data); - DamageOnHurt = DataTypes.ReadNextBool(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Slot)); - if (EquipSound is not null) data.AddRange(EquipSound.Serialize()); - - data.AddRange(DataTypes.GetBool(HasModel)); - if (HasModel && Model is not null) - data.AddRange(DataTypes.GetString(Model)); - - data.AddRange(DataTypes.GetBool(HasCameraOverlay)); - if (HasCameraOverlay && CameraOverlay is not null) - data.AddRange(DataTypes.GetString(CameraOverlay)); - - data.AddRange(DataTypes.GetBool(HasAllowedEntities)); - if (HasAllowedEntities) - { - data.AddRange(DataTypes.GetVarInt(AllowedEntitiesType)); - if (AllowedEntitiesType == 0 && AllowedEntitiesTag is not null) - { - data.AddRange(DataTypes.GetString(AllowedEntitiesTag)); - } - else if (AllowedEntitiesIds is not null) - { - foreach (var id in AllowedEntitiesIds) - data.AddRange(DataTypes.GetVarInt(id)); - } - } - - data.AddRange(DataTypes.GetBool(Dispensable)); - data.AddRange(DataTypes.GetBool(Swappable)); - data.AddRange(DataTypes.GetBool(DamageOnHurt)); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/FoodComponent1212.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/FoodComponent1212.cs deleted file mode 100644 index 65c58d53d7..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/FoodComponent1212.cs +++ /dev/null @@ -1,29 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; - -public class FoodComponent1212(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Nutrition { get; set; } - public float Saturation { get; set; } - public bool CanAlwaysEat { get; set; } - - public override void Parse(Queue data) - { - Nutrition = DataTypes.ReadNextVarInt(data); - Saturation = DataTypes.ReadNextFloat(data); - CanAlwaysEat = DataTypes.ReadNextBool(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Nutrition)); - data.AddRange(DataTypes.GetFloat(Saturation)); - data.AddRange(DataTypes.GetBool(CanAlwaysEat)); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/GliderComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/GliderComponent.cs deleted file mode 100644 index 1aa739d077..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/GliderComponent.cs +++ /dev/null @@ -1,8 +0,0 @@ -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; - -public class GliderComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : EmptyComponent(dataTypes, itemPalette, subComponentRegistry); diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/ItemModelComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/ItemModelComponent.cs deleted file mode 100644 index 97915e6617..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/ItemModelComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; - -public class ItemModelComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public string Identifier { get; set; } = null!; - - public override void Parse(Queue data) - { - Identifier = DataTypes.ReadNextString(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetString(Identifier)); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/PotionContentsComponent1212.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/PotionContentsComponent1212.cs deleted file mode 100644 index a729adb05c..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/PotionContentsComponent1212.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; - -public class PotionContentsComponent1212(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public bool HasPotionId { get; set; } - public int PotionId { get; set; } - public bool HasCustomColor { get; set; } - public int CustomColor { get; set; } - public List Effects { get; set; } = []; - public bool HasCustomName { get; set; } - public string? CustomName { get; set; } - - public override void Parse(Queue data) - { - HasPotionId = DataTypes.ReadNextBool(data); - if (HasPotionId) - PotionId = DataTypes.ReadNextVarInt(data); - - HasCustomColor = DataTypes.ReadNextBool(data); - if (HasCustomColor) - CustomColor = DataTypes.ReadNextInt(data); - - var numberOfEffects = DataTypes.ReadNextVarInt(data); - Effects = new List(numberOfEffects); - for (var i = 0; i < numberOfEffects; i++) - Effects.Add((PotionEffectSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.PotionEffect, data)); - - HasCustomName = DataTypes.ReadNextBool(data); - if (HasCustomName) - CustomName = DataTypes.ReadNextString(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetBool(HasPotionId)); - if (HasPotionId) - data.AddRange(DataTypes.GetVarInt(PotionId)); - - data.AddRange(DataTypes.GetBool(HasCustomColor)); - if (HasCustomColor) - data.AddRange(DataTypes.GetInt(CustomColor)); - - data.AddRange(DataTypes.GetVarInt(Effects.Count)); - foreach (var effect in Effects) - data.AddRange(effect.Serialize()); - - data.AddRange(DataTypes.GetBool(HasCustomName)); - if (HasCustomName && CustomName is not null) - data.AddRange(DataTypes.GetString(CustomName)); - - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/RepairableComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/RepairableComponent.cs deleted file mode 100644 index 481c58a38d..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/RepairableComponent.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; - -public class RepairableComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Type { get; set; } - public string? TagName { get; set; } - public List? ItemIds { get; set; } - - public override void Parse(Queue data) - { - Type = DataTypes.ReadNextVarInt(data); - if (Type == 0) - { - TagName = DataTypes.ReadNextString(data); - } - else - { - ItemIds = new List(); - for (var i = 0; i < Type - 1; i++) - ItemIds.Add(DataTypes.ReadNextVarInt(data)); - } - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Type)); - if (Type == 0 && TagName is not null) - { - data.AddRange(DataTypes.GetString(TagName)); - } - else if (ItemIds is not null) - { - foreach (var id in ItemIds) - data.AddRange(DataTypes.GetVarInt(id)); - } - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/TooltipStyleComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/TooltipStyleComponent.cs deleted file mode 100644 index ac25df8f0c..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/TooltipStyleComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; - -public class TooltipStyleComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public string Identifier { get; set; } = null!; - - public override void Parse(Queue data) - { - Identifier = DataTypes.ReadNextString(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetString(Identifier)); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/UseCooldownComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/UseCooldownComponent.cs deleted file mode 100644 index 217c56ceac..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/UseCooldownComponent.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; - -public class UseCooldownComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public float Seconds { get; set; } - public bool HasCooldownGroup { get; set; } - public string? CooldownGroup { get; set; } - - public override void Parse(Queue data) - { - Seconds = DataTypes.ReadNextFloat(data); - HasCooldownGroup = DataTypes.ReadNextBool(data); - if (HasCooldownGroup) - CooldownGroup = DataTypes.ReadNextString(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetFloat(Seconds)); - data.AddRange(DataTypes.GetBool(HasCooldownGroup)); - if (HasCooldownGroup && CooldownGroup is not null) - data.AddRange(DataTypes.GetString(CooldownGroup)); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/UseRemainderComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/UseRemainderComponent.cs deleted file mode 100644 index da371a95ea..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_2/UseRemainderComponent.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; - -public class UseRemainderComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public Item? ConvertInto { get; set; } - - public override void Parse(Queue data) - { - ConvertInto = DataTypes.ReadNextItemSlot(data, ItemPalette); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetItemSlot(ConvertInto, ItemPalette)); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/AdventureModePredicateComponents1215.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/AdventureModePredicateComponents1215.cs deleted file mode 100644 index 28652f86b4..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/AdventureModePredicateComponents1215.cs +++ /dev/null @@ -1,136 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -/// -/// 1.21.5+ uses AdventureModePredicate.STREAM_CODEC: -/// list, where each BlockPredicate ends with DataComponentMatchers. -/// Tooltip visibility moved to minecraft:tooltip_display. -/// -public sealed class CanBreakComponent1215(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : AdventureModePredicateComponent1215Base(dataTypes, itemPalette, subComponentRegistry); - -/// -/// 1.21.5+ uses AdventureModePredicate.STREAM_CODEC: -/// list, where each BlockPredicate ends with DataComponentMatchers. -/// Tooltip visibility moved to minecraft:tooltip_display. -/// -public sealed class CanPlaceOnComponent1215(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : AdventureModePredicateComponent1215Base(dataTypes, itemPalette, subComponentRegistry); - -public abstract class AdventureModePredicateComponent1215Base(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public List BlockPredicates { get; set; } = []; - - public override void Parse(Queue data) - { - var predicateCount = DataTypes.ReadNextVarInt(data); - BlockPredicates = new List(predicateCount); - var componentHandler = new StructuredComponentsHandler(DataTypes.ProtocolVersion, DataTypes, ItemPalette); - - for (var i = 0; i < predicateCount; i++) - BlockPredicates.Add(ParseBlockPredicate(data, componentHandler)); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(BlockPredicates.Count)); - - foreach (var predicate in BlockPredicates) - SerializeBlockPredicate(data, predicate); - - return new Queue(data); - } - - private AdventureModeBlockPredicate1215 ParseBlockPredicate(Queue data, StructuredComponentsHandler componentHandler) - { - BlockSetSubcomponent? blockSet = null; - if (DataTypes.ReadNextBool(data)) - blockSet = (BlockSetSubcomponent)SubComponentRegistry.ParseSubComponent(SubComponents.BlockSet, data); - - List properties = []; - if (DataTypes.ReadNextBool(data)) - { - var propertyCount = DataTypes.ReadNextVarInt(data); - properties = new List(propertyCount); - for (var i = 0; i < propertyCount; i++) - properties.Add((PropertySubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.Property, data)); - } - - Dictionary? nbt = null; - if (DataTypes.ReadNextBool(data)) - nbt = DataTypes.ReadNextNbt(data); - - var exactComponentCount = DataTypes.ReadNextVarInt(data); - var exactComponents = new List(exactComponentCount); - for (var i = 0; i < exactComponentCount; i++) - { - var componentTypeId = DataTypes.ReadNextVarInt(data); - exactComponents.Add(componentHandler.Parse(componentTypeId, data)); - } - - var partialPredicateCount = DataTypes.ReadNextVarInt(data); - var partialPredicates = new List(partialPredicateCount); - for (var i = 0; i < partialPredicateCount; i++) - { - partialPredicates.Add(new DataComponentPredicatePayload1215( - DataTypes.ReadNextVarInt(data), - DataTypes.ReadNextNbt(data))); - } - - return new AdventureModeBlockPredicate1215(blockSet, properties, nbt, exactComponents, partialPredicates); - } - - private void SerializeBlockPredicate(List data, AdventureModeBlockPredicate1215 predicate) - { - data.AddRange(DataTypes.GetBool(predicate.BlockSet is not null)); - if (predicate.BlockSet is not null) - data.AddRange(predicate.BlockSet.Serialize()); - - data.AddRange(DataTypes.GetBool(predicate.Properties.Count > 0)); - if (predicate.Properties.Count > 0) - { - data.AddRange(DataTypes.GetVarInt(predicate.Properties.Count)); - foreach (var property in predicate.Properties) - data.AddRange(property.Serialize()); - } - - data.AddRange(DataTypes.GetBool(predicate.Nbt is not null)); - if (predicate.Nbt is not null) - data.AddRange(DataTypes.GetNbt(predicate.Nbt)); - - data.AddRange(DataTypes.GetVarInt(predicate.ExactComponents.Count)); - foreach (var component in predicate.ExactComponents) - { - if (component.TypeId < 0) - throw new ArgumentException("Exact predicate component is missing its data component type id.", nameof(component)); - - data.AddRange(DataTypes.GetVarInt(component.TypeId)); - data.AddRange(component.Serialize()); - } - - data.AddRange(DataTypes.GetVarInt(predicate.PartialPredicates.Count)); - foreach (var predicatePayload in predicate.PartialPredicates) - { - data.AddRange(DataTypes.GetVarInt(predicatePayload.TypeId)); - data.AddRange(DataTypes.GetNbt(predicatePayload.Payload)); - } - } -} - -public sealed record AdventureModeBlockPredicate1215( - BlockSetSubcomponent? BlockSet, - List Properties, - Dictionary? Nbt, - List ExactComponents, - List PartialPredicates); - -public sealed record DataComponentPredicatePayload1215(int TypeId, Dictionary Payload); diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/AttributeModifiersComponent1215.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/AttributeModifiersComponent1215.cs deleted file mode 100644 index f7371eac6c..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/AttributeModifiersComponent1215.cs +++ /dev/null @@ -1,37 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -public class AttributeModifiersComponent1215(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int NumberOfAttributes { get; set; } - public List Attributes { get; set; } = []; - - public override void Parse(Queue data) - { - NumberOfAttributes = DataTypes.ReadNextVarInt(data); - Attributes = new List(NumberOfAttributes); - - for (var i = 0; i < NumberOfAttributes; i++) - Attributes.Add(SubComponentRegistry.ParseSubComponent(SubComponents.Attribute, data)); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(NumberOfAttributes)); - - if (Attributes.Count != NumberOfAttributes) - throw new ArgumentNullException(nameof(Attributes), "Attributes count must match NumberOfAttributes."); - - foreach (var attribute in Attributes) - data.AddRange(attribute.Serialize()); - - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/BlocksAttacksComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/BlocksAttacksComponent.cs deleted file mode 100644 index 5c497bf411..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/BlocksAttacksComponent.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -public class BlocksAttacksComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public float BlockDelaySeconds { get; set; } - public float DisableCooldownScale { get; set; } - public List DamageReductions { get; set; } = []; - public float ItemDamageThreshold { get; set; } - public float ItemDamageBase { get; set; } - public float ItemDamageFactor { get; set; } - public string? BypassedBy { get; set; } - public SoundEventHolderData? BlockSound { get; set; } - public SoundEventHolderData? DisableSound { get; set; } - - public override void Parse(Queue data) - { - BlockDelaySeconds = DataTypes.ReadNextFloat(data); - DisableCooldownScale = DataTypes.ReadNextFloat(data); - - var reductionCount = DataTypes.ReadNextVarInt(data); - for (var i = 0; i < reductionCount; i++) - { - var horizontalBlockingAngle = DataTypes.ReadNextFloat(data); - - var hasTypeFilter = DataTypes.ReadNextBool(data); - var typeFilter = hasTypeFilter - ? StructuredComponentCodecHelpers.ReadHolderSet(DataTypes, data) - : null; - - var baseDmg = DataTypes.ReadNextFloat(data); - var factor = DataTypes.ReadNextFloat(data); - DamageReductions.Add(new DamageReductionData(horizontalBlockingAngle, typeFilter, baseDmg, factor)); - } - - ItemDamageThreshold = DataTypes.ReadNextFloat(data); - ItemDamageBase = DataTypes.ReadNextFloat(data); - ItemDamageFactor = DataTypes.ReadNextFloat(data); - - var hasBypassedBy = DataTypes.ReadNextBool(data); - if (hasBypassedBy) - BypassedBy = DataTypes.ReadNextString(data); // TagKey as ResourceLocation - - BlockSound = StructuredComponentCodecHelpers.ReadOptionalSoundEventHolder(DataTypes, data); - DisableSound = StructuredComponentCodecHelpers.ReadOptionalSoundEventHolder(DataTypes, data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetFloat(BlockDelaySeconds)); - data.AddRange(DataTypes.GetFloat(DisableCooldownScale)); - data.AddRange(DataTypes.GetVarInt(DamageReductions.Count)); - foreach (var reduction in DamageReductions) - { - data.AddRange(DataTypes.GetFloat(reduction.HorizontalBlockingAngle)); - data.AddRange(DataTypes.GetBool(reduction.Type is not null)); - if (reduction.Type is not null) - StructuredComponentCodecHelpers.WriteHolderSet(DataTypes, data, reduction.Type); - data.AddRange(DataTypes.GetFloat(reduction.Base)); - data.AddRange(DataTypes.GetFloat(reduction.Factor)); - } - - data.AddRange(DataTypes.GetFloat(ItemDamageThreshold)); - data.AddRange(DataTypes.GetFloat(ItemDamageBase)); - data.AddRange(DataTypes.GetFloat(ItemDamageFactor)); - data.AddRange(DataTypes.GetBool(BypassedBy is not null)); - if (BypassedBy is not null) - data.AddRange(DataTypes.GetString(BypassedBy)); - StructuredComponentCodecHelpers.WriteOptionalSoundEventHolder(DataTypes, data, BlockSound); - StructuredComponentCodecHelpers.WriteOptionalSoundEventHolder(DataTypes, data, DisableSound); - return new Queue(data); - } -} - -public sealed record DamageReductionData(float HorizontalBlockingAngle, HolderSetData? Type, float Base, float Factor); diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/DyeColorComponent1215.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/DyeColorComponent1215.cs deleted file mode 100644 index 7fa2453c2a..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/DyeColorComponent1215.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -/// -/// 1.21.5+ dyed_color only carries the RGB integer. -/// Tooltip visibility moved to minecraft:tooltip_display. -/// -public class DyeColorComponent1215(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Color { get; set; } - - public override void Parse(Queue data) - { - Color = DataTypes.ReadNextInt(data); - } - - public override Queue Serialize() - { - return new Queue(DataTypes.GetInt(Color)); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/EitherHolderComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/EitherHolderComponent.cs deleted file mode 100644 index 352e5f3ec7..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/EitherHolderComponent.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -public class EitherHolderComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public bool IsHolder { get; set; } - public int HolderId { get; set; } - public string? ResourceKey { get; set; } - - public override void Parse(Queue data) - { - IsHolder = DataTypes.ReadNextBool(data); - if (IsHolder) - { - HolderId = DataTypes.ReadNextVarInt(data); - // For simple entity variants, holderId > 0 means registry ref (id = holderId - 1) - // holderId == 0 means inline data; for most variants the inline is just the variant fields - // We skip inline data since MCC doesn't use variant details - if (HolderId == 0) - { - // Read inline variant data - varies by type, but most are simple - // For chicken/variant specifically this might have additional fields - // We'll consume what we can based on the pattern - // TODO: If needed, specialize per variant type - } - } - else - { - ResourceKey = DataTypes.ReadNextString(data); - } - } - - public override Queue Serialize() - { - var bytes = new List(); - bytes.AddRange(DataTypes.GetBool(IsHolder)); - if (IsHolder) - { - bytes.AddRange(DataTypes.GetVarInt(HolderId)); - } - else - { - bytes.AddRange(DataTypes.GetString(ResourceKey ?? "")); - } - return new Queue(bytes); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/EnchantmentsComponent1215.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/EnchantmentsComponent1215.cs deleted file mode 100644 index 67633788a2..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/EnchantmentsComponent1215.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -/// -/// 1.21.5+ enchantments: showInTooltip removed from wire format (moved to tooltip_display component). -/// Wire: VarInt count, then (VarInt holder_id + VarInt level) per entry. No trailing boolean. -/// -public class EnchantmentsComponent1215(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : EnchantmentsComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public override void Parse(Queue data) - { - NumberOfEnchantments = DataTypes.ReadNextVarInt(data); - - for (var i = 0; i < NumberOfEnchantments; i++) - { - var registryId = DataTypes.ReadNextVarInt(data); - var level = DataTypes.ReadNextVarInt(data); - Enchantments.Add(new Enchantment(EnchantmentMapping.GetEnchantmentByRegistryId1206(DataTypes.ProtocolVersion, registryId), level)); - } - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Enchantments.Count)); - foreach (var enchantment in Enchantments) - { - data.AddRange(DataTypes.GetVarInt(EnchantmentMapping.GetRegistryId1206ByEnchantment(DataTypes.ProtocolVersion, enchantment.Type))); - data.AddRange(DataTypes.GetVarInt(enchantment.Level)); - } - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/EquippableComponent1215.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/EquippableComponent1215.cs deleted file mode 100644 index 4376574c51..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/EquippableComponent1215.cs +++ /dev/null @@ -1,104 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_21; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -public class EquippableComponent1215(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Slot { get; set; } - public SoundEventSubComponent? EquipSound { get; set; } - public bool HasAssetId { get; set; } - public string? AssetId { get; set; } - public bool HasCameraOverlay { get; set; } - public string? CameraOverlay { get; set; } - public bool HasAllowedEntities { get; set; } - public int AllowedEntitiesType { get; set; } - public string? AllowedEntitiesTag { get; set; } - public List? AllowedEntitiesIds { get; set; } - public bool Dispensable { get; set; } - public bool Swappable { get; set; } - public bool DamageOnHurt { get; set; } - public bool EquipOnInteract { get; set; } - - public override void Parse(Queue data) - { - Slot = DataTypes.ReadNextVarInt(data); - EquipSound = (SoundEventSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.SoundEvent, data); - - HasAssetId = DataTypes.ReadNextBool(data); - if (HasAssetId) - AssetId = DataTypes.ReadNextString(data); - - HasCameraOverlay = DataTypes.ReadNextBool(data); - if (HasCameraOverlay) - CameraOverlay = DataTypes.ReadNextString(data); - - HasAllowedEntities = DataTypes.ReadNextBool(data); - if (HasAllowedEntities) - { - AllowedEntitiesType = DataTypes.ReadNextVarInt(data); - if (AllowedEntitiesType == 0) - { - AllowedEntitiesTag = DataTypes.ReadNextString(data); - AllowedEntitiesIds = null; - } - else - { - AllowedEntitiesTag = null; - AllowedEntitiesIds = new List(Math.Max(AllowedEntitiesType - 1, 0)); - for (var i = 0; i < AllowedEntitiesType - 1; i++) - AllowedEntitiesIds.Add(DataTypes.ReadNextVarInt(data)); - } - } - - Dispensable = DataTypes.ReadNextBool(data); - Swappable = DataTypes.ReadNextBool(data); - DamageOnHurt = DataTypes.ReadNextBool(data); - EquipOnInteract = DataTypes.ReadNextBool(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Slot)); - - if (EquipSound is null) - throw new ArgumentNullException(nameof(EquipSound), "EquipSound is required."); - - data.AddRange(EquipSound.Serialize()); - - data.AddRange(DataTypes.GetBool(HasAssetId)); - if (HasAssetId && AssetId is not null) - data.AddRange(DataTypes.GetString(AssetId)); - - data.AddRange(DataTypes.GetBool(HasCameraOverlay)); - if (HasCameraOverlay && CameraOverlay is not null) - data.AddRange(DataTypes.GetString(CameraOverlay)); - - data.AddRange(DataTypes.GetBool(HasAllowedEntities)); - if (HasAllowedEntities) - { - data.AddRange(DataTypes.GetVarInt(AllowedEntitiesType)); - if (AllowedEntitiesType == 0 && AllowedEntitiesTag is not null) - { - data.AddRange(DataTypes.GetString(AllowedEntitiesTag)); - } - else if (AllowedEntitiesIds is not null) - { - foreach (var id in AllowedEntitiesIds) - data.AddRange(DataTypes.GetVarInt(id)); - } - } - - data.AddRange(DataTypes.GetBool(Dispensable)); - data.AddRange(DataTypes.GetBool(Swappable)); - data.AddRange(DataTypes.GetBool(DamageOnHurt)); - data.AddRange(DataTypes.GetBool(EquipOnInteract)); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/InstrumentComponent1215.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/InstrumentComponent1215.cs deleted file mode 100644 index beba31d82e..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/InstrumentComponent1215.cs +++ /dev/null @@ -1,44 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -public class InstrumentComponent1215(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public override void Parse(Queue data) - { - // EitherHolder: Bool + (Holder OR ResourceLocation) - var isHolder = DataTypes.ReadNextBool(data); - if (isHolder) - { - var holderId = DataTypes.ReadNextVarInt(data); - if (holderId == 0) - { - // Inline Instrument: SoundEvent holder + Float useDuration + Float range + Component description - var soundHolderId = DataTypes.ReadNextVarInt(data); - if (soundHolderId == 0) - { - DataTypes.ReadNextString(data); // ResourceLocation - var hasFixedRange = DataTypes.ReadNextBool(data); - if (hasFixedRange) - DataTypes.ReadNextFloat(data); - } - DataTypes.ReadNextFloat(data); // useDuration - DataTypes.ReadNextFloat(data); // range - // ComponentSerialization.STREAM_CODEC is NBT-backed, not a plain string. - DataTypes.ReadNextNbt(data); - } - } - else - { - DataTypes.ReadNextString(data); // ResourceLocation key - } - } - - public override Queue Serialize() - { - return new Queue(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/JukeBoxPlayableComponent1215.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/JukeBoxPlayableComponent1215.cs deleted file mode 100644 index 10985e31b9..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/JukeBoxPlayableComponent1215.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_21; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -public class JukeBoxPlayableComponent1215(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public bool IsHolder { get; set; } - public int HolderId { get; set; } - public string? ResourceKey { get; set; } - public SoundEventSubComponent? SoundEvent { get; set; } - public Dictionary? DescriptionNbt { get; set; } - public string Description { get; set; } = string.Empty; - public float Duration { get; set; } - public int ComparatorOutput { get; set; } - - public override void Parse(Queue data) - { - IsHolder = DataTypes.ReadNextBool(data); - - if (IsHolder) - { - HolderId = DataTypes.ReadNextVarInt(data); - if (HolderId == 0) - { - SoundEvent = (SoundEventSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.SoundEvent, data); - DescriptionNbt = DataTypes.ReadNextNbt(data); - Description = ChatParser.ParseText(DescriptionNbt); - Duration = DataTypes.ReadNextFloat(data); - ComparatorOutput = DataTypes.ReadNextVarInt(data); - } - } - else - { - ResourceKey = DataTypes.ReadNextString(data); - } - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetBool(IsHolder)); - - if (IsHolder) - { - data.AddRange(DataTypes.GetVarInt(HolderId)); - if (HolderId == 0) - { - if (SoundEvent is null) - throw new ArgumentNullException(nameof(SoundEvent), "Inline jukebox song requires a sound event."); - - if (DescriptionNbt is null) - throw new ArgumentNullException(nameof(DescriptionNbt), "Inline jukebox song requires a description."); - - data.AddRange(SoundEvent.Serialize()); - data.AddRange(DataTypes.GetNbt(DescriptionNbt)); - data.AddRange(DataTypes.GetFloat(Duration)); - data.AddRange(DataTypes.GetVarInt(ComparatorOutput)); - } - } - else - { - if (string.IsNullOrEmpty(ResourceKey)) - throw new ArgumentNullException(nameof(ResourceKey), "Resource key is required for key-backed jukebox songs."); - - data.AddRange(DataTypes.GetString(ResourceKey)); - } - - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/PaintingVariantHolderComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/PaintingVariantHolderComponent.cs deleted file mode 100644 index 4e061f1320..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/PaintingVariantHolderComponent.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -public class PaintingVariantHolderComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public override void Parse(Queue data) - { - // Holder: VarInt discriminator - var holderId = DataTypes.ReadNextVarInt(data); - if (holderId == 0) - { - // Inline PaintingVariant: VarInt width + VarInt height + ResourceLocation assetId - DataTypes.ReadNextVarInt(data); // width - DataTypes.ReadNextVarInt(data); // height - DataTypes.ReadNextString(data); // assetId - - // Optional title - if (DataTypes.ReadNextBool(data)) - DataTypes.ReadNextNbt(data); - - // Optional author - if (DataTypes.ReadNextBool(data)) - DataTypes.ReadNextNbt(data); - } - } - - public override Queue Serialize() - { - return new Queue(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/PotionDurationScaleComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/PotionDurationScaleComponent.cs deleted file mode 100644 index 88354b2cea..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/PotionDurationScaleComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -public class PotionDurationScaleComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public float Scale { get; set; } - - public override void Parse(Queue data) - { - Scale = DataTypes.ReadNextFloat(data); - } - - public override Queue Serialize() - { - var bytes = new List(); - bytes.AddRange(DataTypes.GetFloat(Scale)); - return new Queue(bytes); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/ProvidesBannerPatternsComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/ProvidesBannerPatternsComponent.cs deleted file mode 100644 index cc2356e144..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/ProvidesBannerPatternsComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -public class ProvidesBannerPatternsComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public string TagKey { get; set; } = string.Empty; - - public override void Parse(Queue data) - { - TagKey = DataTypes.ReadNextString(data); // ResourceLocation - } - - public override Queue Serialize() - { - var bytes = new List(); - bytes.AddRange(DataTypes.GetString(TagKey)); - return new Queue(bytes); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/ProvidesTrimMaterialComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/ProvidesTrimMaterialComponent.cs deleted file mode 100644 index f3ad9fac7d..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/ProvidesTrimMaterialComponent.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -public class ProvidesTrimMaterialComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public override void Parse(Queue data) - { - // EitherHolder: Bool + (Holder OR ResourceLocation) - var isHolder = DataTypes.ReadNextBool(data); - if (isHolder) - { - var holderId = DataTypes.ReadNextVarInt(data); - if (holderId == 0) - { - // Inline TrimMaterial: MaterialAssetGroup + Component description - // MaterialAssetGroup: string + map - DataTypes.ReadNextString(data); // base asset suffix - var overrideCount = DataTypes.ReadNextVarInt(data); - for (var i = 0; i < overrideCount; i++) - { - DataTypes.ReadNextString(data); // ResourceKey - DataTypes.ReadNextString(data); // override suffix - } - // ComponentSerialization.STREAM_CODEC is NBT-backed, not a plain string. - DataTypes.ReadNextNbt(data); - } - } - else - { - DataTypes.ReadNextString(data); // ResourceLocation key - } - } - - public override Queue Serialize() - { - return new Queue(); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/SoundEventHolderComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/SoundEventHolderComponent.cs deleted file mode 100644 index 8fe14f7d89..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/SoundEventHolderComponent.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -public class SoundEventHolderComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int HolderId { get; set; } - public string? SoundLocation { get; set; } - public bool HasFixedRange { get; set; } - public float FixedRange { get; set; } - - public override void Parse(Queue data) - { - HolderId = DataTypes.ReadNextVarInt(data); - if (HolderId == 0) - { - SoundLocation = DataTypes.ReadNextString(data); - HasFixedRange = DataTypes.ReadNextBool(data); - if (HasFixedRange) - FixedRange = DataTypes.ReadNextFloat(data); - } - } - - public override Queue Serialize() - { - var bytes = new List(); - bytes.AddRange(DataTypes.GetVarInt(HolderId)); - if (HolderId == 0) - { - bytes.AddRange(DataTypes.GetString(SoundLocation ?? "")); - bytes.AddRange(DataTypes.GetBool(HasFixedRange)); - if (HasFixedRange) - bytes.AddRange(DataTypes.GetFloat(FixedRange)); - } - return new Queue(bytes); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/StoredEnchantmentsComponent1215.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/StoredEnchantmentsComponent1215.cs deleted file mode 100644 index 8daf09eaf1..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/StoredEnchantmentsComponent1215.cs +++ /dev/null @@ -1,7 +0,0 @@ -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -public class StoredEnchantmentsComponent1215(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : EnchantmentsComponent1215(dataTypes, itemPalette, subComponentRegistry); diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/ToolComponent1215.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/ToolComponent1215.cs deleted file mode 100644 index c617fabd70..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/ToolComponent1215.cs +++ /dev/null @@ -1,48 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -public class ToolComponent1215(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int NumberOfRules { get; set; } - public List Rules { get; set; } = []; - public float DefaultMiningSpeed { get; set; } - public int DamagePerBlock { get; set; } - public bool CanDestroyBlocksInCreative { get; set; } - - public override void Parse(Queue data) - { - NumberOfRules = DataTypes.ReadNextVarInt(data); - Rules = new List(NumberOfRules); - - for (var i = 0; i < NumberOfRules; i++) - Rules.Add((RuleSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.Rule, data)); - - DefaultMiningSpeed = DataTypes.ReadNextFloat(data); - DamagePerBlock = DataTypes.ReadNextVarInt(data); - CanDestroyBlocksInCreative = DataTypes.ReadNextBool(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(NumberOfRules)); - - if (Rules.Count != NumberOfRules) - throw new ArgumentNullException(nameof(Rules), "Rules count must match NumberOfRules."); - - foreach (var rule in Rules) - data.AddRange(rule.Serialize()); - - data.AddRange(DataTypes.GetFloat(DefaultMiningSpeed)); - data.AddRange(DataTypes.GetVarInt(DamagePerBlock)); - data.AddRange(DataTypes.GetBool(CanDestroyBlocksInCreative)); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/TooltipDisplayComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/TooltipDisplayComponent.cs deleted file mode 100644 index 859b3cbc16..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/TooltipDisplayComponent.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -public class TooltipDisplayComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public bool HideTooltip { get; set; } - public List HiddenComponentIds { get; set; } = []; - - public override void Parse(Queue data) - { - HideTooltip = DataTypes.ReadNextBool(data); - var count = DataTypes.ReadNextVarInt(data); - for (var i = 0; i < count; i++) - HiddenComponentIds.Add(DataTypes.ReadNextVarInt(data)); - } - - public override Queue Serialize() - { - var bytes = new List(); - bytes.AddRange(DataTypes.GetBool(HideTooltip)); - bytes.AddRange(DataTypes.GetVarInt(HiddenComponentIds.Count)); - foreach (var id in HiddenComponentIds) - bytes.AddRange(DataTypes.GetVarInt(id)); - return new Queue(bytes); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/TrimComponent1215.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/TrimComponent1215.cs deleted file mode 100644 index e1b1ebc978..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/TrimComponent1215.cs +++ /dev/null @@ -1,106 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -/// -/// 1.21.5+ trim uses ArmorTrim.STREAM_CODEC: -/// Holder<TrimMaterial> + Holder<TrimPattern>. -/// The holder codec is ByteBufCodecs.holder(), so 0 means direct inline data and non-zero means registry reference. -/// -public class TrimComponent1215(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int MaterialHolderValue { get; set; } - public DirectTrimMaterial1215? DirectMaterial { get; set; } - public int PatternHolderValue { get; set; } - public DirectTrimPattern1215? DirectPattern { get; set; } - - public override void Parse(Queue data) - { - MaterialHolderValue = DataTypes.ReadNextVarInt(data); - if (MaterialHolderValue == 0) - DirectMaterial = ParseDirectMaterial(data); - - PatternHolderValue = DataTypes.ReadNextVarInt(data); - if (PatternHolderValue == 0) - DirectPattern = ParseDirectPattern(data); - } - - public override Queue Serialize() - { - var data = new List(); - - data.AddRange(DataTypes.GetVarInt(MaterialHolderValue)); - if (MaterialHolderValue == 0) - { - if (DirectMaterial is null) - throw new ArgumentNullException(nameof(DirectMaterial), "Direct trim material payload is required when holder value is 0."); - - data.AddRange(DataTypes.GetString(DirectMaterial.BaseSuffix)); - data.AddRange(DataTypes.GetVarInt(DirectMaterial.OverrideSuffixes.Count)); - foreach (var (assetKey, suffix) in DirectMaterial.OverrideSuffixes) - { - data.AddRange(DataTypes.GetString(assetKey)); - data.AddRange(DataTypes.GetString(suffix)); - } - - data.AddRange(DataTypes.GetNbt(DirectMaterial.DescriptionNbt)); - } - - data.AddRange(DataTypes.GetVarInt(PatternHolderValue)); - if (PatternHolderValue == 0) - { - if (DirectPattern is null) - throw new ArgumentNullException(nameof(DirectPattern), "Direct trim pattern payload is required when holder value is 0."); - - data.AddRange(DataTypes.GetString(DirectPattern.AssetId)); - data.AddRange(DataTypes.GetNbt(DirectPattern.DescriptionNbt)); - data.AddRange(DataTypes.GetBool(DirectPattern.Decal)); - } - - return new Queue(data); - } - - private DirectTrimMaterial1215 ParseDirectMaterial(Queue data) - { - var baseSuffix = DataTypes.ReadNextString(data); - var overrideCount = DataTypes.ReadNextVarInt(data); - var overrideSuffixes = new Dictionary(overrideCount, StringComparer.Ordinal); - - for (var i = 0; i < overrideCount; i++) - { - var assetKey = DataTypes.ReadNextString(data); - var suffix = DataTypes.ReadNextString(data); - overrideSuffixes[assetKey] = suffix; - } - - var descriptionNbt = DataTypes.ReadNextNbt(data); - var description = ChatParser.ParseText(descriptionNbt); - return new DirectTrimMaterial1215(baseSuffix, overrideSuffixes, descriptionNbt, description); - } - - private DirectTrimPattern1215 ParseDirectPattern(Queue data) - { - var assetId = DataTypes.ReadNextString(data); - var descriptionNbt = DataTypes.ReadNextNbt(data); - var description = ChatParser.ParseText(descriptionNbt); - var decal = DataTypes.ReadNextBool(data); - return new DirectTrimPattern1215(assetId, descriptionNbt, description, decal); - } -} - -public sealed record DirectTrimMaterial1215( - string BaseSuffix, - Dictionary OverrideSuffixes, - Dictionary DescriptionNbt, - string Description); - -public sealed record DirectTrimPattern1215( - string AssetId, - Dictionary DescriptionNbt, - string Description, - bool Decal); diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/VarIntComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/VarIntComponent.cs deleted file mode 100644 index 38eebf96f6..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/VarIntComponent.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -public class VarIntComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Value { get; set; } - - public override void Parse(Queue data) - { - Value = DataTypes.ReadNextVarInt(data); - } - - public override Queue Serialize() - { - var bytes = new List(); - bytes.AddRange(DataTypes.GetVarInt(Value)); - return new Queue(bytes); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/WeaponComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/WeaponComponent.cs deleted file mode 100644 index f831e82bf3..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_5/WeaponComponent.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; - -public class WeaponComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int ItemDamagePerAttack { get; set; } - public float DisableBlockingForSeconds { get; set; } - - public override void Parse(Queue data) - { - ItemDamagePerAttack = DataTypes.ReadNextVarInt(data); - DisableBlockingForSeconds = DataTypes.ReadNextFloat(data); - } - - public override Queue Serialize() - { - var bytes = new List(); - bytes.AddRange(DataTypes.GetVarInt(ItemDamagePerAttack)); - bytes.AddRange(DataTypes.GetFloat(DisableBlockingForSeconds)); - return new Queue(bytes); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_8/AttributeModifiersComponent1218.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_8/AttributeModifiersComponent1218.cs deleted file mode 100644 index 92ce146e97..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_8/AttributeModifiersComponent1218.cs +++ /dev/null @@ -1,99 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_8; - -public class AttributeModifiersComponent1218(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int NumberOfAttributes { get; set; } - public List Attributes { get; set; } = []; - public List Displays { get; set; } = []; - - public override void Parse(Queue data) - { - NumberOfAttributes = DataTypes.ReadNextVarInt(data); - Attributes = new List(NumberOfAttributes); - Displays = new List(NumberOfAttributes); - - for (var i = 0; i < NumberOfAttributes; i++) - { - Attributes.Add(SubComponentRegistry.ParseSubComponent(SubComponents.Attribute, data)); - Displays.Add(ReadDisplay(data)); - } - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(NumberOfAttributes)); - - if (Attributes.Count != NumberOfAttributes) - throw new ArgumentNullException(nameof(Attributes), "Attributes count must match NumberOfAttributes."); - - if (Displays.Count != NumberOfAttributes) - throw new ArgumentNullException(nameof(Displays), "Displays count must match NumberOfAttributes."); - - for (var i = 0; i < NumberOfAttributes; i++) - { - data.AddRange(Attributes[i].Serialize()); - data.AddRange(SerializeDisplay(Displays[i])); - } - - return new Queue(data); - } - - private AttributeModifierDisplay ReadDisplay(Queue data) - { - var displayType = DataTypes.ReadNextVarInt(data); - return displayType switch - { - 0 => new AttributeModifierDisplay(AttributeModifierDisplayType.Default), - 1 => new AttributeModifierDisplay(AttributeModifierDisplayType.Hidden), - 2 => ReadOverrideDisplay(data), - _ => throw new InvalidDataException($"Unknown attribute modifier display type: {displayType}") - }; - } - - private AttributeModifierDisplay ReadOverrideDisplay(Queue data) - { - var overrideTextNbt = DataTypes.ReadNextNbt(data); - var overrideText = ChatParser.ParseText(overrideTextNbt); - return new AttributeModifierDisplay(AttributeModifierDisplayType.Override, overrideTextNbt, overrideText); - } - - private Queue SerializeDisplay(AttributeModifierDisplay display) - { - var data = new List - { - }; - data.AddRange(DataTypes.GetVarInt((int)display.Type)); - - if (display.Type == AttributeModifierDisplayType.Override) - { - if (display.OverrideTextNbt is null) - throw new ArgumentNullException(nameof(display.OverrideTextNbt), "Override display requires component NBT."); - - data.AddRange(DataTypes.GetNbt(display.OverrideTextNbt)); - } - - return new Queue(data); - } -} - -public sealed record AttributeModifierDisplay( - AttributeModifierDisplayType Type, - Dictionary? OverrideTextNbt = null, - string? OverrideText = null); - -public enum AttributeModifierDisplayType -{ - Default = 0, - Hidden = 1, - Override = 2 -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_8/EquippableComponent1218.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_8/EquippableComponent1218.cs deleted file mode 100644 index 224e1b05d3..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_8/EquippableComponent1218.cs +++ /dev/null @@ -1,113 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_21; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_8; - -public class EquippableComponent1218(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int Slot { get; set; } - public SoundEventSubComponent? EquipSound { get; set; } - public bool HasAssetId { get; set; } - public string? AssetId { get; set; } - public bool HasCameraOverlay { get; set; } - public string? CameraOverlay { get; set; } - public bool HasAllowedEntities { get; set; } - public int AllowedEntitiesType { get; set; } - public string? AllowedEntitiesTag { get; set; } - public List? AllowedEntitiesIds { get; set; } - public bool Dispensable { get; set; } - public bool Swappable { get; set; } - public bool DamageOnHurt { get; set; } - public bool EquipOnInteract { get; set; } - public bool CanBeSheared { get; set; } - public SoundEventSubComponent? ShearingSound { get; set; } - - public override void Parse(Queue data) - { - Slot = DataTypes.ReadNextVarInt(data); - EquipSound = (SoundEventSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.SoundEvent, data); - - HasAssetId = DataTypes.ReadNextBool(data); - if (HasAssetId) - AssetId = DataTypes.ReadNextString(data); - - HasCameraOverlay = DataTypes.ReadNextBool(data); - if (HasCameraOverlay) - CameraOverlay = DataTypes.ReadNextString(data); - - HasAllowedEntities = DataTypes.ReadNextBool(data); - if (HasAllowedEntities) - { - AllowedEntitiesType = DataTypes.ReadNextVarInt(data); - if (AllowedEntitiesType == 0) - { - AllowedEntitiesTag = DataTypes.ReadNextString(data); - AllowedEntitiesIds = null; - } - else - { - AllowedEntitiesTag = null; - AllowedEntitiesIds = new List(Math.Max(AllowedEntitiesType - 1, 0)); - for (var i = 0; i < AllowedEntitiesType - 1; i++) - AllowedEntitiesIds.Add(DataTypes.ReadNextVarInt(data)); - } - } - - Dispensable = DataTypes.ReadNextBool(data); - Swappable = DataTypes.ReadNextBool(data); - DamageOnHurt = DataTypes.ReadNextBool(data); - EquipOnInteract = DataTypes.ReadNextBool(data); - CanBeSheared = DataTypes.ReadNextBool(data); - ShearingSound = (SoundEventSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.SoundEvent, data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Slot)); - - if (EquipSound is null) - throw new ArgumentNullException(nameof(EquipSound), "EquipSound is required."); - - if (ShearingSound is null) - throw new ArgumentNullException(nameof(ShearingSound), "ShearingSound is required."); - - data.AddRange(EquipSound.Serialize()); - - data.AddRange(DataTypes.GetBool(HasAssetId)); - if (HasAssetId && AssetId is not null) - data.AddRange(DataTypes.GetString(AssetId)); - - data.AddRange(DataTypes.GetBool(HasCameraOverlay)); - if (HasCameraOverlay && CameraOverlay is not null) - data.AddRange(DataTypes.GetString(CameraOverlay)); - - data.AddRange(DataTypes.GetBool(HasAllowedEntities)); - if (HasAllowedEntities) - { - data.AddRange(DataTypes.GetVarInt(AllowedEntitiesType)); - if (AllowedEntitiesType == 0 && AllowedEntitiesTag is not null) - { - data.AddRange(DataTypes.GetString(AllowedEntitiesTag)); - } - else if (AllowedEntitiesIds is not null) - { - foreach (var id in AllowedEntitiesIds) - data.AddRange(DataTypes.GetVarInt(id)); - } - } - - data.AddRange(DataTypes.GetBool(Dispensable)); - data.AddRange(DataTypes.GetBool(Swappable)); - data.AddRange(DataTypes.GetBool(DamageOnHurt)); - data.AddRange(DataTypes.GetBool(EquipOnInteract)); - data.AddRange(DataTypes.GetBool(CanBeSheared)); - data.AddRange(ShearingSound.Serialize()); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_9/BeesComponent1219.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_9/BeesComponent1219.cs deleted file mode 100644 index b8142caaac..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/1_21_9/BeesComponent1219.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_9; - -public class BeesComponent1219(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int NumberOfBees { get; set; } - public List Bees { get; set; } = []; - - public override void Parse(Queue data) - { - NumberOfBees = DataTypes.ReadNextVarInt(data); - Bees = new List(NumberOfBees); - - for (var i = 0; i < NumberOfBees; i++) - { - Bees.Add( - new TypedBee( - DataTypes.ReadNextVarInt(data), - DataTypes.ReadNextNbt(data), - DataTypes.ReadNextVarInt(data), - DataTypes.ReadNextVarInt(data))); - } - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(NumberOfBees)); - - if (NumberOfBees != Bees.Count) - throw new InvalidOperationException("Can't serialize the BeesComponent1219 because NumberOfBees and Bees.Count differ!"); - - foreach (var bee in Bees) - { - data.AddRange(DataTypes.GetVarInt(bee.EntityTypeId)); - data.AddRange(DataTypes.GetNbt(bee.EntityDataNbt)); - data.AddRange(DataTypes.GetVarInt(bee.TicksInHive)); - data.AddRange(DataTypes.GetVarInt(bee.MinTicksInHive)); - } - - return new Queue(data); - } -} - -public sealed record TypedBee(int EntityTypeId, Dictionary? EntityDataNbt, int TicksInHive, int MinTicksInHive); diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/ContainerComponent261.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/ContainerComponent261.cs deleted file mode 100644 index 87a83a4e08..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/ContainerComponent261.cs +++ /dev/null @@ -1,34 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._26_1; - -public class ContainerComponent261(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public List Items { get; set; } = []; - - public override void Parse(Queue data) - { - var count = DataTypes.ReadNextVarInt(data); - for (var i = 0; i < count; i++) - Items.Add(DataTypes.ReadNextBool(data) ? DataTypes.ReadNextItemStackTemplate(data, ItemPalette) : null); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Items.Count)); - foreach (var item in Items) - { - var hasItem = item is not null && !item.IsEmpty; - data.AddRange(DataTypes.GetBool(hasItem)); - if (hasItem) - data.AddRange(DataTypes.GetItemStackTemplate(item!, ItemPalette)); - } - - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/HolderSetComponent261.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/HolderSetComponent261.cs deleted file mode 100644 index 516117ab88..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/HolderSetComponent261.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._26_1; - -public class HolderSetComponent261(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public string? TagKey { get; set; } - public List HolderIds { get; } = []; - - public override void Parse(Queue data) - { - var count = DataTypes.ReadNextVarInt(data) - 1; - if (count == -1) - { - TagKey = DataTypes.ReadNextString(data); - return; - } - - for (var i = 0; i < count; i++) - HolderIds.Add(DataTypes.ReadNextVarInt(data)); - } - - public override Queue Serialize() - { - var bytes = new List(); - if (TagKey is not null) - { - bytes.AddRange(DataTypes.GetVarInt(0)); - bytes.AddRange(DataTypes.GetString(TagKey)); - return new Queue(bytes); - } - - bytes.AddRange(DataTypes.GetVarInt(HolderIds.Count + 1)); - foreach (var holderId in HolderIds) - bytes.AddRange(DataTypes.GetVarInt(holderId)); - - return new Queue(bytes); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/InstrumentComponent261.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/InstrumentComponent261.cs deleted file mode 100644 index 0f91f0b325..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/InstrumentComponent261.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._26_1; - -public class InstrumentComponent261(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int HolderId { get; set; } - - public override void Parse(Queue data) - { - HolderId = DataTypes.ReadNextVarInt(data); - if (HolderId != 0) - return; - - var soundHolderId = DataTypes.ReadNextVarInt(data); - if (soundHolderId == 0) - { - DataTypes.ReadNextString(data); // ResourceLocation - var hasFixedRange = DataTypes.ReadNextBool(data); - if (hasFixedRange) - DataTypes.ReadNextFloat(data); - } - - DataTypes.ReadNextFloat(data); // useDuration - DataTypes.ReadNextFloat(data); // range - DataTypes.ReadNextNbt(data); // ComponentSerialization.STREAM_CODEC - } - - public override Queue Serialize() - { - var bytes = new List(); - bytes.AddRange(DataTypes.GetVarInt(HolderId)); - return new Queue(bytes); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/ItemStackTemplateListComponent261.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/ItemStackTemplateListComponent261.cs deleted file mode 100644 index 7c7fdc74ca..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/ItemStackTemplateListComponent261.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._26_1; - -public class ItemStackTemplateListComponent261(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public List Items { get; set; } = []; - - public override void Parse(Queue data) - { - var count = DataTypes.ReadNextVarInt(data); - - for (var i = 0; i < count; i++) - Items.Add(DataTypes.ReadNextItemStackTemplate(data, ItemPalette)); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Items.Count)); - - foreach (var item in Items) - data.AddRange(DataTypes.GetItemStackTemplate(item, ItemPalette)); - - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/NbtTagComponent261.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/NbtTagComponent261.cs deleted file mode 100644 index 1c864dcfed..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/NbtTagComponent261.cs +++ /dev/null @@ -1,21 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._26_1; - -public class NbtTagComponent261(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public object? Tag { get; set; } - - public override void Parse(Queue data) - { - Tag = DataTypes.ReadNextNbtTag(data); - } - - public override Queue Serialize() - { - return new Queue(DataTypes.GetNbtTag(Tag)); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/ProvidesTrimMaterialComponent261.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/ProvidesTrimMaterialComponent261.cs deleted file mode 100644 index 7c76b44aa5..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/ProvidesTrimMaterialComponent261.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._26_1; - -public class ProvidesTrimMaterialComponent261(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int HolderId { get; set; } - - public override void Parse(Queue data) - { - HolderId = DataTypes.ReadNextVarInt(data); - if (HolderId != 0) - return; - - DataTypes.ReadNextString(data); // base asset suffix - - var overrideCount = DataTypes.ReadNextVarInt(data); - for (var i = 0; i < overrideCount; i++) - { - DataTypes.ReadNextString(data); // ResourceKey - DataTypes.ReadNextString(data); // override suffix - } - - DataTypes.ReadNextNbt(data); // ComponentSerialization.STREAM_CODEC - } - - public override Queue Serialize() - { - var bytes = new List(); - bytes.AddRange(DataTypes.GetVarInt(HolderId)); - return new Queue(bytes); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/TypedEntityDataComponent261.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/TypedEntityDataComponent261.cs deleted file mode 100644 index d05b147a5b..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/TypedEntityDataComponent261.cs +++ /dev/null @@ -1,13 +0,0 @@ -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._26_1; - -public class TypedEntityDataComponent261(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : TypedEntityDataComponent(dataTypes, itemPalette, subComponentRegistry) -{ } - -public class BlockEntityDataComponent261(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : TypedBlockEntityDataComponent(dataTypes, itemPalette, subComponentRegistry) -{ } diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/UseRemainderComponent261.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/UseRemainderComponent261.cs deleted file mode 100644 index e5b3323ea7..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_1/UseRemainderComponent261.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._26_1; - -public class UseRemainderComponent261(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public Item? ConvertInto { get; set; } - - public override void Parse(Queue data) - { - ConvertInto = DataTypes.ReadNextItemStackTemplate(data, ItemPalette); - } - - public override Queue Serialize() - { - var data = new List(); - if (ConvertInto is not null && !ConvertInto.IsEmpty) - data.AddRange(DataTypes.GetItemStackTemplate(ConvertInto, ItemPalette)); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_2/SulfurCubeContentComponent262.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_2/SulfurCubeContentComponent262.cs deleted file mode 100644 index 282373d1b2..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/26_2/SulfurCubeContentComponent262.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components._26_2; - -public class SulfurCubeContentComponent262(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public Item? AbsorbedBlockItemStack { get; set; } - - public override void Parse(Queue data) - { - AbsorbedBlockItemStack = DataTypes.ReadNextItemStackTemplate(data, ItemPalette); - } - - public override Queue Serialize() - { - var data = new List(); - if (AbsorbedBlockItemStack is not null && !AbsorbedBlockItemStack.IsEmpty) - data.AddRange(DataTypes.GetItemStackTemplate(AbsorbedBlockItemStack, ItemPalette)); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/EmptyComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/EmptyComponent.cs deleted file mode 100644 index 8b49c90822..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/EmptyComponent.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components; - -public class EmptyComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public override void Parse(Queue data) - { - } - - public override Queue Serialize() - { - return new Queue(); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/StructuredComponentCodecHelpers.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/StructuredComponentCodecHelpers.cs deleted file mode 100644 index dc3fc21871..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/StructuredComponentCodecHelpers.cs +++ /dev/null @@ -1,74 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components; - -internal static class StructuredComponentCodecHelpers -{ - public static HolderSetData ReadHolderSet(DataTypes dataTypes, Queue data) - { - var sizeOrTag = dataTypes.ReadNextVarInt(data); - if (sizeOrTag == 0) - return new HolderSetData(dataTypes.ReadNextString(data), []); - - var count = sizeOrTag - 1; - var holderIds = new List(count); - for (var i = 0; i < count; i++) - holderIds.Add(dataTypes.ReadNextVarInt(data)); - - return new HolderSetData(null, holderIds); - } - - public static void WriteHolderSet(DataTypes dataTypes, List bytes, HolderSetData holderSet) - { - if (holderSet.Tag is not null) - { - bytes.AddRange(DataTypes.GetVarInt(0)); - bytes.AddRange(dataTypes.GetString(holderSet.Tag)); - return; - } - - bytes.AddRange(DataTypes.GetVarInt(holderSet.HolderIds.Count + 1)); - foreach (var holderId in holderSet.HolderIds) - bytes.AddRange(DataTypes.GetVarInt(holderId)); - } - - public static SoundEventHolderData ReadSoundEventHolder(DataTypes dataTypes, Queue data) - { - var holderId = dataTypes.ReadNextVarInt(data); - if (holderId != 0) - return new SoundEventHolderData(holderId, null, false, 0); - - var soundLocation = dataTypes.ReadNextString(data); - var hasFixedRange = dataTypes.ReadNextBool(data); - var fixedRange = hasFixedRange ? dataTypes.ReadNextFloat(data) : 0; - return new SoundEventHolderData(holderId, soundLocation, hasFixedRange, fixedRange); - } - - public static void WriteSoundEventHolder(DataTypes dataTypes, List bytes, SoundEventHolderData soundEvent) - { - bytes.AddRange(DataTypes.GetVarInt(soundEvent.HolderId)); - if (soundEvent.HolderId != 0) - return; - - bytes.AddRange(dataTypes.GetString(soundEvent.SoundLocation ?? "")); - bytes.AddRange(dataTypes.GetBool(soundEvent.HasFixedRange)); - if (soundEvent.HasFixedRange) - bytes.AddRange(dataTypes.GetFloat(soundEvent.FixedRange)); - } - - public static SoundEventHolderData? ReadOptionalSoundEventHolder(DataTypes dataTypes, Queue data) - { - return dataTypes.ReadNextBool(data) ? ReadSoundEventHolder(dataTypes, data) : null; - } - - public static void WriteOptionalSoundEventHolder(DataTypes dataTypes, List bytes, SoundEventHolderData? soundEvent) - { - bytes.AddRange(dataTypes.GetBool(soundEvent is not null)); - if (soundEvent is not null) - WriteSoundEventHolder(dataTypes, bytes, soundEvent); - } -} - -public sealed record HolderSetData(string? Tag, List HolderIds); - -public sealed record SoundEventHolderData(int HolderId, string? SoundLocation, bool HasFixedRange, float FixedRange); diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/AttributeSubComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/AttributeSubComponent.cs deleted file mode 100644 index 729053555f..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/AttributeSubComponent.cs +++ /dev/null @@ -1,41 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; - -public class AttributeSubComponent(DataTypes dataTypes, SubComponentRegistry subComponentRegistry) : SubComponent(dataTypes, subComponentRegistry) -{ - public int TypeId { get; set; } - public Guid Uuid { get; set; } - public string? Name { get; set; } - public double Value { get; set; } - public int Operation { get; set; } - public int Slot { get; set; } - - protected override void Parse(Queue data) - { - TypeId = DataTypes.ReadNextVarInt(data); - Uuid = DataTypes.ReadNextUUID(data); - Name = DataTypes.ReadNextString(data); - Value = DataTypes.ReadNextDouble(data); - Operation = DataTypes.ReadNextVarInt(data); - Slot = DataTypes.ReadNextVarInt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(TypeId)); - data.AddRange(DataTypes.GetUUID(Uuid)); - - if (string.IsNullOrEmpty(Name?.Trim())) - throw new ArgumentNullException($"Can not serialize AttributeSubComponent due to Name being null or empty!"); - - data.AddRange(DataTypes.GetString(Name)); - data.AddRange(DataTypes.GetDouble(Value)); - data.AddRange(DataTypes.GetVarInt(Operation)); - data.AddRange(DataTypes.GetVarInt(Slot)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/BlockPredicateSubcomponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/BlockPredicateSubcomponent.cs deleted file mode 100644 index 74639c6e75..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/BlockPredicateSubcomponent.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; - -public class BlockPredicateSubcomponent(DataTypes dataTypes, SubComponentRegistry subComponentRegistry) : SubComponent(dataTypes, subComponentRegistry) -{ - public bool HasBlocks { get; set; } - public BlockSetSubcomponent? BlockSet { get; set; } - public bool HasProperities { get; set; } - public List? Properties { get; set; } - public bool HasNbt { get; set; } - public Dictionary? Nbt { get; set; } - - protected override void Parse(Queue data) - { - HasBlocks = DataTypes.ReadNextBool(data); - - if (HasBlocks) - BlockSet = (BlockSetSubcomponent)SubComponentRegistry.ParseSubComponent(SubComponents.BlockSet, data); - - HasProperities = DataTypes.ReadNextBool(data); - - if (HasProperities) - { - Properties = new(); - var numberOfProperties = DataTypes.ReadNextVarInt(data); - for (var i = 0; i < numberOfProperties; i++) - Properties.Add((PropertySubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.Property, data)); - } - - HasNbt = DataTypes.ReadNextBool(data); - - if (HasNbt) - Nbt = DataTypes.ReadNextNbt(data); - } - - public override Queue Serialize() - { - var data = new List(); - - // Block Sets - data.AddRange(DataTypes.GetBool(HasBlocks)); - if (HasBlocks) - { - if (BlockSet is null) - throw new ArgumentNullException($"Can not serialize a BlockPredicate when the BlockSet is empty but HasBlocks is true!"); - - data.AddRange(BlockSet.Serialize()); - } - - // Properties - data.AddRange(DataTypes.GetBool(HasProperities)); - if (HasProperities) - { - if (Properties is null || Properties.Count == 0) - throw new ArgumentNullException($"Can not serialize a BlockPredicate when the Properties is empty but HasProperties is true!"); - - data.AddRange(DataTypes.GetVarInt(Properties.Count)); - foreach (var property in Properties) - data.AddRange(property.Serialize()); - } - - // NBT - data.AddRange(DataTypes.GetBool(HasNbt)); - if (HasNbt) - { - if (Nbt is null) - throw new ArgumentNullException($"Can not serialize a BlockPredicate when the Nbt is empty but HasNbt is true!"); - - data.AddRange(DataTypes.GetNbt(Nbt)); - } - - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/BlockSetSubcomponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/BlockSetSubcomponent.cs deleted file mode 100644 index 2fe1be6d44..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/BlockSetSubcomponent.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; - -public class BlockSetSubcomponent(DataTypes dataTypes, SubComponentRegistry subComponentRegistry) : SubComponent(dataTypes, subComponentRegistry) -{ - public int Type { get; set; } - public string? TagName { get; set; } - public List? BlockIds { get; set; } - - protected override void Parse(Queue data) - { - Type = DataTypes.ReadNextVarInt(data); - - if (Type == 0) - TagName = DataTypes.ReadNextString(data); - - if (Type == 0) return; - - BlockIds = []; - - for (var i = 0; i < Type - 1; i++) - BlockIds.Add(DataTypes.ReadNextVarInt(data)); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Type)); - if (Type == 0) - { - if (string.IsNullOrEmpty(TagName?.Trim())) - throw new ArgumentNullException($"Can not serialize an empty tag name when the Block Set type is 0!"); - - data.AddRange(DataTypes.GetString(TagName)); - } - - if (Type == 0) return new Queue(data); - - if (BlockIds is null || BlockIds.Count == 0) - throw new ArgumentNullException($"Can not serialize an empty list of Block IDs in a Block Set when the type is not 0!"); - - for (var i = 0; i < Type - 1; i++) - data.AddRange(DataTypes.GetVarInt(BlockIds[i])); - - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/DetailsSubComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/DetailsSubComponent.cs deleted file mode 100644 index 05b3c91806..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/DetailsSubComponent.cs +++ /dev/null @@ -1,50 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; - -public class DetailsSubComponent(DataTypes dataTypes, SubComponentRegistry subComponentRegistry) : SubComponent(dataTypes, subComponentRegistry) -{ - public int Amplifier { get; set; } - public int Duration { get; set; } - public bool Ambient { get; set; } - public bool ShowParticles { get; set; } - public bool ShowIcon { get; set; } - public bool HasHiddenEffects { get; set; } - public DetailsSubComponent? Detail { get; set; } - - protected override void Parse(Queue data) - { - Amplifier = DataTypes.ReadNextVarInt(data); - Duration = DataTypes.ReadNextVarInt(data); - Ambient = DataTypes.ReadNextBool(data); - ShowParticles = DataTypes.ReadNextBool(data); - ShowIcon = DataTypes.ReadNextBool(data); - HasHiddenEffects = DataTypes.ReadNextBool(data); - - if (HasHiddenEffects) - Detail = (DetailsSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.Details, data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Amplifier)); - data.AddRange(DataTypes.GetVarInt(Duration)); - data.AddRange(DataTypes.GetBool(Ambient)); - data.AddRange(DataTypes.GetBool(ShowParticles)); - data.AddRange(DataTypes.GetBool(ShowIcon)); - data.AddRange(DataTypes.GetBool(HasHiddenEffects)); - - if (HasHiddenEffects) - { - if (Detail is null) - throw new ArgumentNullException($"Can not serialize a DetailSubComponent1206 when the Detail is empty but HasHiddenEffects is true!"); - - data.AddRange(Detail.Serialize()); - } - - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/EffectSubComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/EffectSubComponent.cs deleted file mode 100644 index d17d43f086..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/EffectSubComponent.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; - -public class EffectSubComponent(DataTypes dataTypes, SubComponentRegistry subComponentRegistry) : SubComponent(dataTypes, subComponentRegistry) -{ - public PotionEffectSubComponent TypeId { get; set; } = null!; - public float Probability { get; set; } - - protected override void Parse(Queue data) - { - TypeId = (PotionEffectSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.PotionEffect, data); - Probability = DataTypes.ReadNextFloat(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(TypeId.Serialize()); - data.AddRange(DataTypes.GetFloat(Probability)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/FireworkExplosionSubComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/FireworkExplosionSubComponent.cs deleted file mode 100644 index 8073964c16..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/FireworkExplosionSubComponent.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; - -public class FireworkExplosionSubComponent(DataTypes dataTypes, SubComponentRegistry subComponentRegistry) : SubComponent(dataTypes, subComponentRegistry) -{ - public int Shape { get; set; } - public int NumberOfColors { get; set; } - public List Colors { get; set; } = []; - public int NumberOfFadeColors { get; set; } - public List FadeColors { get; set; } = []; - public bool HasTrail { get; set; } - public bool HasTwinkle { get; set; } - - protected override void Parse(Queue data) - { - Shape = DataTypes.ReadNextVarInt(data); - NumberOfColors = DataTypes.ReadNextVarInt(data); - - for (var i = 0; i < NumberOfColors; i++) - Colors.Add(DataTypes.ReadNextInt(data)); - - NumberOfFadeColors = DataTypes.ReadNextVarInt(data); - - for (var i = 0; i < NumberOfFadeColors; i++) - FadeColors.Add(DataTypes.ReadNextInt(data)); - - HasTrail = DataTypes.ReadNextBool(data); - HasTwinkle = DataTypes.ReadNextBool(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Shape)); - - data.AddRange(DataTypes.GetVarInt(NumberOfColors)); - if (NumberOfColors > 0) - { - if (NumberOfColors != Colors.Count) - throw new Exception("Can't serialize FireworkExplosionComponent because NumberOfColors and the length of Colors list differ!"); - - foreach (var color in Colors) - data.AddRange(DataTypes.GetInt(color)); - } - - data.AddRange(DataTypes.GetVarInt(NumberOfFadeColors)); - if (NumberOfFadeColors > 0) - { - if (NumberOfFadeColors != FadeColors.Count) - throw new Exception("Can't serialize FireworkExplosionComponent because NumberOfFadeColors and the length of FadeColors list differ!"); - - foreach (var fadeColor in FadeColors) - data.AddRange(DataTypes.GetInt(fadeColor)); - } - - data.AddRange(DataTypes.GetBool(HasTrail)); - data.AddRange(DataTypes.GetBool(HasTwinkle)); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/PotionEffectSubComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/PotionEffectSubComponent.cs deleted file mode 100644 index dc9e31f069..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/PotionEffectSubComponent.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; - -public class PotionEffectSubComponent(DataTypes dataTypes, SubComponentRegistry subComponentRegistry) : SubComponent(dataTypes, subComponentRegistry) -{ - public int TypeId { get; set; } - public DetailsSubComponent Details { get; set; } = null!; - - protected override void Parse(Queue data) - { - TypeId = DataTypes.ReadNextVarInt(data); - Details = (DetailsSubComponent)SubComponentRegistry.ParseSubComponent(SubComponents.Details, data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(TypeId)); - data.AddRange(Details.Serialize()); - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/PropertySubComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/PropertySubComponent.cs deleted file mode 100644 index 52e187702d..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/PropertySubComponent.cs +++ /dev/null @@ -1,61 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; - -public class PropertySubComponent(DataTypes dataTypes, SubComponentRegistry subComponentRegistry) : SubComponent(dataTypes, subComponentRegistry) -{ - public string? Name { get; set; } - public bool IsExactMatch { get; set; } - public string? ExactValue { get; set; } - public string? MinValue { get; set; } - public string? MaxValue { get; set; } - - protected override void Parse(Queue data) - { - Name = DataTypes.ReadNextString(data); - IsExactMatch = DataTypes.ReadNextBool(data); - - if (IsExactMatch) - { - ExactValue = DataTypes.ReadNextString(data); - } - else - { - MinValue = DataTypes.ReadNextBool(data) ? DataTypes.ReadNextString(data) : null; - MaxValue = DataTypes.ReadNextBool(data) ? DataTypes.ReadNextString(data) : null; - } - } - - public override Queue Serialize() - { - var data = new List(); - - if (string.IsNullOrEmpty(Name?.Trim())) - throw new ArgumentNullException($"Can not serialize a Property sub-component if the Name is null or empty!"); - - data.AddRange(DataTypes.GetString(Name)); - data.AddRange(DataTypes.GetBool(IsExactMatch)); - - if (IsExactMatch) - { - if (string.IsNullOrEmpty(ExactValue?.Trim())) - throw new ArgumentNullException($"Can not serialize a Property sub-component if the ExactValue is null or empty when the type is Exact Match!"); - - data.AddRange(DataTypes.GetString(ExactValue)); - } - else - { - data.AddRange(DataTypes.GetBool(MinValue is not null)); - if (MinValue is not null) - data.AddRange(DataTypes.GetString(MinValue)); - - data.AddRange(DataTypes.GetBool(MaxValue is not null)); - if (MaxValue is not null) - data.AddRange(DataTypes.GetString(MaxValue)); - } - - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/RuleSubComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/RuleSubComponent.cs deleted file mode 100644 index 74565c9b8b..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_20_6/RuleSubComponent.cs +++ /dev/null @@ -1,43 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; - -public class RuleSubComponent(DataTypes dataTypes, SubComponentRegistry subComponentRegistry) : SubComponent(dataTypes, subComponentRegistry) -{ - public BlockSetSubcomponent Blocks { get; set; } = null!; - public bool HasSpeed { get; set; } - public float Speed { get; set; } - public bool HasCorrectDropForBlocks { get; set; } - public bool CorrectDropForBlocks { get; set; } - - protected override void Parse(Queue data) - { - Blocks = (BlockSetSubcomponent)SubComponentRegistry.ParseSubComponent(SubComponents.BlockSet, data); - HasSpeed = DataTypes.ReadNextBool(data); - - if (HasSpeed) - Speed = DataTypes.ReadNextFloat(data); - - HasCorrectDropForBlocks = DataTypes.ReadNextBool(data); - - if (HasCorrectDropForBlocks) - CorrectDropForBlocks = DataTypes.ReadNextBool(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(Blocks.Serialize()); - data.AddRange(DataTypes.GetBool(HasSpeed)); - if (HasSpeed) - data.AddRange(DataTypes.GetFloat(Speed)); - - data.AddRange(DataTypes.GetBool(HasCorrectDropForBlocks)); - if (HasCorrectDropForBlocks) - data.AddRange(DataTypes.GetBool(CorrectDropForBlocks)); - - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_21/AttributeSubComponent121.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_21/AttributeSubComponent121.cs deleted file mode 100644 index 60bc94dc41..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_21/AttributeSubComponent121.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_21; - -public class AttributeSubComponent121(DataTypes dataTypes, SubComponentRegistry subComponentRegistry) : SubComponent(dataTypes, subComponentRegistry) -{ - public int TypeId { get; set; } - public string? ResourceLocation { get; set; } - public double Value { get; set; } - public int Operation { get; set; } - public int Slot { get; set; } - - protected override void Parse(Queue data) - { - TypeId = DataTypes.ReadNextVarInt(data); - ResourceLocation = DataTypes.ReadNextString(data); - Value = DataTypes.ReadNextDouble(data); - Operation = DataTypes.ReadNextVarInt(data); - Slot = DataTypes.ReadNextVarInt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(TypeId)); - - if (string.IsNullOrEmpty(ResourceLocation?.Trim())) - throw new ArgumentNullException($"Can not serialize AttributeSubComponent121 due to ResourceLocation being null or empty!"); - - data.AddRange(DataTypes.GetString(ResourceLocation)); - data.AddRange(DataTypes.GetDouble(Value)); - data.AddRange(DataTypes.GetVarInt(Operation)); - data.AddRange(DataTypes.GetVarInt(Slot)); - return new Queue(data); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_21/SoundEventSubComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_21/SoundEventSubComponent.cs deleted file mode 100644 index 2c2885c803..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/1_21/SoundEventSubComponent.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_21; - -public class SoundEventSubComponent(DataTypes dataTypes, SubComponentRegistry subComponentRegistry) : SubComponent(dataTypes, subComponentRegistry) -{ - public int Type { get; set; } - public string? SoundName { get; set; } - public bool HasFixedRange { get; set; } - public float FixedRange { get; set; } - - protected override void Parse(Queue data) - { - Type = DataTypes.ReadNextVarInt(data); - - if (Type != 0) return; - - SoundName = DataTypes.ReadNextString(data); - HasFixedRange = DataTypes.ReadNextBool(data); - - if (HasFixedRange) - FixedRange = DataTypes.ReadNextFloat(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(Type)); - - if (Type != 0) return new Queue(data); - - if (string.IsNullOrEmpty(SoundName?.Trim())) - throw new ArgumentNullException($"Can not serialize SoundEventSubComponent due to SoundName being null or empty!"); - - data.AddRange(DataTypes.GetString(SoundName)); - data.AddRange(DataTypes.GetBool(HasFixedRange)); - - if (HasFixedRange) - data.AddRange(DataTypes.GetFloat(FixedRange)); - - return new Queue(data); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/SubComponents.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/SubComponents.cs deleted file mode 100644 index 9fdc974cf4..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/Subcomponents/SubComponents.cs +++ /dev/null @@ -1,15 +0,0 @@ -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; - -public abstract class SubComponents -{ - public const string BlockPredicate = "BlockPredicate"; - public const string BlockSet = "BlockSet"; - public const string Property = "Property"; - public const string Attribute = "Attribute"; - public const string Effect = "Effect"; - public const string PotionEffect = "PotionEffect"; - public const string Details = "Details"; - public const string Rule = "Rule"; - public const string FireworkExplosion = "FireworkExplosion"; - public const string SoundEvent = "SoundEvent"; -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/TypedEntityDataComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/TypedEntityDataComponent.cs deleted file mode 100644 index ab7ae279e1..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Components/TypedEntityDataComponent.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Components; - -public class TypedEntityDataComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : StructuredComponent(dataTypes, itemPalette, subComponentRegistry) -{ - public int EntityTypeId { get; set; } - public Dictionary? Nbt { get; set; } - - public override void Parse(Queue data) - { - EntityTypeId = DataTypes.ReadNextVarInt(data); - Nbt = DataTypes.ReadNextNbt(data); - } - - public override Queue Serialize() - { - var data = new List(); - data.AddRange(DataTypes.GetVarInt(EntityTypeId)); - data.AddRange(DataTypes.GetNbt(Nbt)); - return new Queue(data); - } -} - -public class TypedBlockEntityDataComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : TypedEntityDataComponent(dataTypes, itemPalette, subComponentRegistry) -{ } diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Core/StructuredComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Core/StructuredComponent.cs deleted file mode 100644 index 5fa5f82ddc..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Core/StructuredComponent.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Collections.Generic; -using System.Text.Json.Serialization; -using MinecraftClient.Inventory.ItemPalettes; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -public abstract class StructuredComponent(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) -{ - protected DataTypes DataTypes { get; private set; } = dataTypes; - protected SubComponentRegistry SubComponentRegistry { get; private set; } = subComponentRegistry; - protected ItemPalette ItemPalette { get; private set; } = itemPalette; - - /// - /// The registry type ID assigned during parsing, used for round-trip serialization. - /// - [JsonIgnore] - public int TypeId { get; set; } = -1; - - /// - /// The registry name assigned during parsing (e.g. "minecraft:custom_data"), used for NBT serialization. - /// - [JsonIgnore] - public string ComponentName { get; set; } = string.Empty; - - public abstract void Parse(Queue data); - public abstract Queue Serialize(); -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Core/StructuredComponentRegistry.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Core/StructuredComponentRegistry.cs deleted file mode 100644 index 805f2a79a0..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Core/StructuredComponentRegistry.cs +++ /dev/null @@ -1,66 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -public abstract class StructuredComponentRegistry(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) -{ - private Dictionary ComponentParsers { get; } = new(); - private Dictionary IdToComponent { get; } = new(); - private Dictionary ComponentToId { get; } = new(); - - protected void RegisterComponent(int id, string name) where T : StructuredComponent - { - if (string.IsNullOrEmpty(name) || string.IsNullOrWhiteSpace(name)) - throw new ArgumentNullException(nameof(name)); - - name = name.ToLower(); - - if (ComponentParsers.ContainsKey(name) || IdToComponent.ContainsValue(name) - || ComponentToId.ContainsKey(name) || IdToComponent.ContainsKey(id)) - throw new InvalidOperationException($"A component with name '{name}' or id '{id}' is already registered."); - - ComponentParsers[name] = typeof(T); - IdToComponent[id] = name; - ComponentToId[name] = id; - } - - public StructuredComponent ParseComponent(int id, Queue data) - { - if (IdToComponent.TryGetValue(id, out var name)) - { - if (ComponentParsers.TryGetValue(name, out var type)) - { - var component = - Activator.CreateInstance(type, dataTypes, itemPalette, subComponentRegistry) as StructuredComponent - ?? throw new InvalidOperationException($"Could not instantiate a parser for a structured component type {name}"); - - component.TypeId = id; - component.ComponentName = name; - component.Parse(data); - return component; - } - } - - throw new Exception($"No parser found for component with ID {id}"); - } - - public string GetComponentNameById(int id) - { - if (IdToComponent.TryGetValue(id, out var value)) - return value; - - throw new Exception($"No component found for ID {id}"); - } - - public int GetComponentIdByName(string name) - { - name = name.ToLower(); - - if (ComponentToId.TryGetValue(name, out var value)) - return value; - - throw new Exception($"No ID found for component {name}"); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Core/SubComponent.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Core/SubComponent.cs deleted file mode 100644 index be235a9163..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Core/SubComponent.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Collections.Generic; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -public abstract class SubComponent(DataTypes dataTypes, SubComponentRegistry subComponentRegistry) -{ - protected DataTypes DataTypes { get; private set; } = dataTypes; - protected SubComponentRegistry SubComponentRegistry { get; private set; } = subComponentRegistry; - - protected abstract void Parse(Queue data); - public abstract Queue Serialize(); -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Core/SubComponentRegistry.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Core/SubComponentRegistry.cs deleted file mode 100644 index 0da8120b63..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Core/SubComponentRegistry.cs +++ /dev/null @@ -1,40 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Reflection; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -public abstract class SubComponentRegistry(DataTypes dataTypes) -{ - private readonly Dictionary _subComponentParsers = new(); - - protected void RegisterSubComponent(string name) where T : SubComponent - { - if (_subComponentParsers.TryGetValue(name, out _)) - throw new Exception($"Sub component {name} already registered!"); - - _subComponentParsers.Add(name, typeof(T)); - } - - protected void ReplaceSubComponent(string name) where T : SubComponent - { - _subComponentParsers[name] = typeof(T); - } - - public SubComponent ParseSubComponent(string name, Queue data) - { - if (!_subComponentParsers.TryGetValue(name, out var subComponentParserType)) - throw new Exception($"Sub component {name} not registered!"); - - var instance = Activator.CreateInstance(subComponentParserType, dataTypes, this) as SubComponent ?? - throw new InvalidOperationException($"Could not create instance of a sub component parser type: {subComponentParserType.Name}"); - - var parseMethod = instance.GetType().GetMethod("Parse", BindingFlags.Instance | BindingFlags.NonPublic); - - if (parseMethod is null) - throw new InvalidOperationException($"Sub component parser type {subComponentParserType.Name} does not have a Parse method."); - - parseMethod.Invoke(instance, new object[] { data }); - return instance; - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry1206.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry1206.cs deleted file mode 100644 index 8f5dee2e29..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry1206.cs +++ /dev/null @@ -1,69 +0,0 @@ -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Registries; - -public class StructuredComponentsRegistry1206 : StructuredComponentRegistry -{ - public StructuredComponentsRegistry1206(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : base(dataTypes, itemPalette, subComponentRegistry) - { - RegisterComponent(0, "minecraft:custom_data"); - RegisterComponent(1, "minecraft:max_stack_size"); - RegisterComponent(2, "minecraft:max_damage"); - RegisterComponent(3, "minecraft:damage"); - RegisterComponent(4, "minecraft:unbreakable"); - RegisterComponent(5, "minecraft:custom_name"); - RegisterComponent(6, "minecraft:item_name"); - RegisterComponent(7, "minecraft:lore"); - RegisterComponent(8, "minecraft:rarity"); - RegisterComponent(9, "minecraft:enchantments"); - RegisterComponent(10, "minecraft:can_place_on"); - RegisterComponent(11, "minecraft:can_break"); - RegisterComponent(12, "minecraft:attribute_modifiers"); - RegisterComponent(13, "minecraft:custom_model_data"); - RegisterComponent(14, "minecraft:hide_additional_tooltip"); - RegisterComponent(15, "minecraft:hide_tooltip"); - RegisterComponent(16, "minecraft:repair_cost"); - RegisterComponent(17, "minecraft:creative_slot_lock"); - RegisterComponent(18, "minecraft:enchantment_glint_override"); - RegisterComponent(19, "minecraft:intangible_projectile"); - RegisterComponent(20, "minecraft:food"); - RegisterComponent(21, "minecraft:fire_resistant"); - RegisterComponent(22, "minecraft:tool"); - RegisterComponent(23, "minecraft:stored_enchantments"); - RegisterComponent(24, "minecraft:dyed_color"); - RegisterComponent(25, "minecraft:map_color"); - RegisterComponent(26, "minecraft:map_id"); - RegisterComponent(27, "minecraft:map_decorations"); - RegisterComponent(28, "minecraft:map_post_processing"); - RegisterComponent(29, "minecraft:charged_projectiles"); - RegisterComponent(30, "minecraft:bundle_contents"); - RegisterComponent(31, "minecraft:potion_contents"); - RegisterComponent(32, "minecraft:suspicious_stew_effects"); - RegisterComponent(33, "minecraft:writable_book_content"); - RegisterComponent(34, "minecraft:written_book_content"); - RegisterComponent(35, "minecraft:trim"); - RegisterComponent(36, "minecraft:debug_stick_state"); - RegisterComponent(37, "minecraft:entity_data"); - RegisterComponent(38, "minecraft:bucket_entity_data"); - RegisterComponent(39, "minecraft:block_entity_data"); - RegisterComponent(40, "minecraft:instrument"); - RegisterComponent(41, "minecraft:ominous_bottle_amplifier"); - RegisterComponent(42, "minecraft:recipes"); - RegisterComponent(43, "minecraft:lodestone_tracker"); - RegisterComponent(44, "minecraft:firework_explosion"); - RegisterComponent(45, "minecraft:fireworks"); - RegisterComponent(46, "minecraft:profile"); - RegisterComponent(47, "minecraft:note_block_sound"); - RegisterComponent(48, "minecraft:banner_patterns"); - RegisterComponent(49, "minecraft:base_color"); - RegisterComponent(50, "minecraft:pot_decorations"); - RegisterComponent(51, "minecraft:container"); - RegisterComponent(52, "minecraft:block_state"); - RegisterComponent(53, "minecraft:bees"); - RegisterComponent(54, "minecraft:lock"); - RegisterComponent(55, "minecraft:container_loot"); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry121.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry121.cs deleted file mode 100644 index 5e22bd7862..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry121.cs +++ /dev/null @@ -1,71 +0,0 @@ -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Registries; - -public class StructuredComponentsRegistry121 : StructuredComponentRegistry -{ - public StructuredComponentsRegistry121(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : base(dataTypes, itemPalette, subComponentRegistry) - { - RegisterComponent(0, "minecraft:custom_data"); - RegisterComponent(1, "minecraft:max_stack_size"); - RegisterComponent(2, "minecraft:max_damage"); - RegisterComponent(3, "minecraft:damage"); - RegisterComponent(4, "minecraft:unbreakable"); - RegisterComponent(5, "minecraft:custom_name"); - RegisterComponent(6, "minecraft:item_name"); - RegisterComponent(7, "minecraft:lore"); - RegisterComponent(8, "minecraft:rarity"); - RegisterComponent(9, "minecraft:enchantments"); - RegisterComponent(10, "minecraft:can_place_on"); - RegisterComponent(11, "minecraft:can_break"); - RegisterComponent(12, "minecraft:attribute_modifiers"); - RegisterComponent(13, "minecraft:custom_model_data"); - RegisterComponent(14, "minecraft:hide_additional_tooltip"); - RegisterComponent(15, "minecraft:hide_tooltip"); - RegisterComponent(16, "minecraft:repair_cost"); - RegisterComponent(17, "minecraft:creative_slot_lock"); - RegisterComponent(18, "minecraft:enchantment_glint_override"); - RegisterComponent(19, "minecraft:intangible_projectile"); - RegisterComponent(20, "minecraft:food"); - RegisterComponent(21, "minecraft:fire_resistant"); - RegisterComponent(22, "minecraft:tool"); - RegisterComponent(23, "minecraft:stored_enchantments"); - RegisterComponent(24, "minecraft:dyed_color"); - RegisterComponent(25, "minecraft:map_color"); - RegisterComponent(26, "minecraft:map_id"); - RegisterComponent(27, "minecraft:map_decorations"); - RegisterComponent(28, "minecraft:map_post_processing"); - RegisterComponent(29, "minecraft:charged_projectiles"); - RegisterComponent(30, "minecraft:bundle_contents"); - RegisterComponent(31, "minecraft:potion_contents"); - RegisterComponent(32, "minecraft:suspicious_stew_effects"); - RegisterComponent(33, "minecraft:writable_book_content"); - RegisterComponent(34, "minecraft:written_book_content"); - RegisterComponent(35, "minecraft:trim"); - RegisterComponent(36, "minecraft:debug_stick_state"); - RegisterComponent(37, "minecraft:entity_data"); - RegisterComponent(38, "minecraft:bucket_entity_data"); - RegisterComponent(39, "minecraft:block_entity_data"); - RegisterComponent(40, "minecraft:instrument"); - RegisterComponent(41, "minecraft:ominous_bottle_amplifier"); - RegisterComponent(42, "minecraft:jukebox_playable"); - RegisterComponent(43, "minecraft:recipes"); - RegisterComponent(44, "minecraft:lodestone_tracker"); - RegisterComponent(45, "minecraft:firework_explosion"); - RegisterComponent(46, "minecraft:fireworks"); - RegisterComponent(47, "minecraft:profile"); - RegisterComponent(48, "minecraft:note_block_sound"); - RegisterComponent(49, "minecraft:banner_patterns"); - RegisterComponent(50, "minecraft:base_color"); - RegisterComponent(51, "minecraft:pot_decorations"); - RegisterComponent(52, "minecraft:container"); - RegisterComponent(53, "minecraft:block_state"); - RegisterComponent(54, "minecraft:bees"); - RegisterComponent(55, "minecraft:lock"); - RegisterComponent(56, "minecraft:container_loot"); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry12111.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry12111.cs deleted file mode 100644 index 0be0c7d2ad..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry12111.cs +++ /dev/null @@ -1,126 +0,0 @@ -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_8; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_9; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_11; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._26_1; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Registries; - -public class StructuredComponentsRegistry12111 : StructuredComponentRegistry -{ - public StructuredComponentsRegistry12111(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : base(dataTypes, itemPalette, subComponentRegistry) - { - RegisterComponent(0, "minecraft:custom_data"); - RegisterComponent(1, "minecraft:max_stack_size"); - RegisterComponent(2, "minecraft:max_damage"); - RegisterComponent(3, "minecraft:damage"); - RegisterComponent(4, "minecraft:unbreakable"); - RegisterComponent(5, "minecraft:use_effects"); - RegisterComponent(6, "minecraft:custom_name"); - RegisterComponent(7, "minecraft:minimum_attack_charge"); - RegisterComponent(8, "minecraft:damage_type"); - RegisterComponent(9, "minecraft:item_name"); - RegisterComponent(10, "minecraft:item_model"); - RegisterComponent(11, "minecraft:lore"); - RegisterComponent(12, "minecraft:rarity"); - RegisterComponent(13, "minecraft:enchantments"); - RegisterComponent(14, "minecraft:can_place_on"); - RegisterComponent(15, "minecraft:can_break"); - RegisterComponent(16, "minecraft:attribute_modifiers"); - RegisterComponent(17, "minecraft:custom_model_data"); - RegisterComponent(18, "minecraft:tooltip_display"); - RegisterComponent(19, "minecraft:repair_cost"); - RegisterComponent(20, "minecraft:creative_slot_lock"); - RegisterComponent(21, "minecraft:enchantment_glint_override"); - RegisterComponent(22, "minecraft:intangible_projectile"); - RegisterComponent(23, "minecraft:food"); - RegisterComponent(24, "minecraft:consumable"); - RegisterComponent(25, "minecraft:use_remainder"); - RegisterComponent(26, "minecraft:use_cooldown"); - RegisterComponent(27, "minecraft:damage_resistant"); - RegisterComponent(28, "minecraft:tool"); - RegisterComponent(29, "minecraft:weapon"); - RegisterComponent(30, "minecraft:attack_range"); - RegisterComponent(31, "minecraft:enchantable"); - RegisterComponent(32, "minecraft:equippable"); - RegisterComponent(33, "minecraft:repairable"); - RegisterComponent(34, "minecraft:glider"); - RegisterComponent(35, "minecraft:tooltip_style"); - RegisterComponent(36, "minecraft:death_protection"); - RegisterComponent(37, "minecraft:blocks_attacks"); - RegisterComponent(38, "minecraft:piercing_weapon"); - RegisterComponent(39, "minecraft:kinetic_weapon"); - RegisterComponent(40, "minecraft:swing_animation"); - RegisterComponent(41, "minecraft:stored_enchantments"); - RegisterComponent(42, "minecraft:dyed_color"); - RegisterComponent(43, "minecraft:map_color"); - RegisterComponent(44, "minecraft:map_id"); - RegisterComponent(45, "minecraft:map_decorations"); - RegisterComponent(46, "minecraft:map_post_processing"); - RegisterComponent(47, "minecraft:charged_projectiles"); - RegisterComponent(48, "minecraft:bundle_contents"); - RegisterComponent(49, "minecraft:potion_contents"); - RegisterComponent(50, "minecraft:potion_duration_scale"); - RegisterComponent(51, "minecraft:suspicious_stew_effects"); - RegisterComponent(52, "minecraft:writable_book_content"); - RegisterComponent(53, "minecraft:written_book_content"); - RegisterComponent(54, "minecraft:trim"); - RegisterComponent(55, "minecraft:debug_stick_state"); - RegisterComponent(56, "minecraft:entity_data"); - RegisterComponent(57, "minecraft:bucket_entity_data"); - RegisterComponent(58, "minecraft:block_entity_data"); - RegisterComponent(59, "minecraft:instrument"); - RegisterComponent(60, "minecraft:provides_trim_material"); - RegisterComponent(61, "minecraft:ominous_bottle_amplifier"); - RegisterComponent(62, "minecraft:jukebox_playable"); - RegisterComponent(63, "minecraft:provides_banner_patterns"); - RegisterComponent(64, "minecraft:recipes"); - RegisterComponent(65, "minecraft:lodestone_tracker"); - RegisterComponent(66, "minecraft:firework_explosion"); - RegisterComponent(67, "minecraft:fireworks"); - RegisterComponent(68, "minecraft:profile"); - RegisterComponent(69, "minecraft:note_block_sound"); - RegisterComponent(70, "minecraft:banner_patterns"); - RegisterComponent(71, "minecraft:base_color"); - RegisterComponent(72, "minecraft:pot_decorations"); - RegisterComponent(73, "minecraft:container"); - RegisterComponent(74, "minecraft:block_state"); - RegisterComponent(75, "minecraft:bees"); - RegisterComponent(76, "minecraft:lock"); - RegisterComponent(77, "minecraft:container_loot"); - - RegisterComponent(78, "minecraft:break_sound"); - RegisterComponent(79, "minecraft:villager/variant"); - RegisterComponent(80, "minecraft:wolf/variant"); - RegisterComponent(81, "minecraft:wolf/sound_variant"); - RegisterComponent(82, "minecraft:wolf/collar"); - RegisterComponent(83, "minecraft:fox/variant"); - RegisterComponent(84, "minecraft:salmon/size"); - RegisterComponent(85, "minecraft:parrot/variant"); - RegisterComponent(86, "minecraft:tropical_fish/pattern"); - RegisterComponent(87, "minecraft:tropical_fish/base_color"); - RegisterComponent(88, "minecraft:tropical_fish/pattern_color"); - RegisterComponent(89, "minecraft:mooshroom/variant"); - RegisterComponent(90, "minecraft:rabbit/variant"); - RegisterComponent(91, "minecraft:pig/variant"); - RegisterComponent(92, "minecraft:cow/variant"); - RegisterComponent(93, "minecraft:chicken/variant"); - RegisterComponent(94, "minecraft:zombie_nautilus/variant"); - RegisterComponent(95, "minecraft:frog/variant"); - RegisterComponent(96, "minecraft:horse/variant"); - RegisterComponent(97, "minecraft:painting/variant"); - RegisterComponent(98, "minecraft:llama/variant"); - RegisterComponent(99, "minecraft:axolotl/variant"); - RegisterComponent(100, "minecraft:cat/variant"); - RegisterComponent(101, "minecraft:cat/collar"); - RegisterComponent(102, "minecraft:sheep/color"); - RegisterComponent(103, "minecraft:shulker/color"); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry1212.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry1212.cs deleted file mode 100644 index ffe89d0f4a..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry1212.cs +++ /dev/null @@ -1,85 +0,0 @@ -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Registries; - -public class StructuredComponentsRegistry1212 : StructuredComponentRegistry -{ - public StructuredComponentsRegistry1212(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : base(dataTypes, itemPalette, subComponentRegistry) - { - RegisterComponent(0, "minecraft:custom_data"); - RegisterComponent(1, "minecraft:max_stack_size"); - RegisterComponent(2, "minecraft:max_damage"); - RegisterComponent(3, "minecraft:damage"); - RegisterComponent(4, "minecraft:unbreakable"); - RegisterComponent(5, "minecraft:custom_name"); - RegisterComponent(6, "minecraft:item_name"); - RegisterComponent(7, "minecraft:item_model"); - RegisterComponent(8, "minecraft:lore"); - RegisterComponent(9, "minecraft:rarity"); - RegisterComponent(10, "minecraft:enchantments"); - RegisterComponent(11, "minecraft:can_place_on"); - RegisterComponent(12, "minecraft:can_break"); - RegisterComponent(13, "minecraft:attribute_modifiers"); - if (dataTypes.ProtocolVersion >= Protocol18Handler.MC_1_21_4_Version) - RegisterComponent(14, "minecraft:custom_model_data"); - else - RegisterComponent(14, "minecraft:custom_model_data"); - RegisterComponent(15, "minecraft:hide_additional_tooltip"); - RegisterComponent(16, "minecraft:hide_tooltip"); - RegisterComponent(17, "minecraft:repair_cost"); - RegisterComponent(18, "minecraft:creative_slot_lock"); - RegisterComponent(19, "minecraft:enchantment_glint_override"); - RegisterComponent(20, "minecraft:intangible_projectile"); - RegisterComponent(21, "minecraft:food"); - RegisterComponent(22, "minecraft:consumable"); - RegisterComponent(23, "minecraft:use_remainder"); - RegisterComponent(24, "minecraft:use_cooldown"); - RegisterComponent(25, "minecraft:damage_resistant"); - RegisterComponent(26, "minecraft:tool"); - RegisterComponent(27, "minecraft:enchantable"); - RegisterComponent(28, "minecraft:equippable"); - RegisterComponent(29, "minecraft:repairable"); - RegisterComponent(30, "minecraft:glider"); - RegisterComponent(31, "minecraft:tooltip_style"); - RegisterComponent(32, "minecraft:death_protection"); - RegisterComponent(33, "minecraft:stored_enchantments"); - RegisterComponent(34, "minecraft:dyed_color"); - RegisterComponent(35, "minecraft:map_color"); - RegisterComponent(36, "minecraft:map_id"); - RegisterComponent(37, "minecraft:map_decorations"); - RegisterComponent(38, "minecraft:map_post_processing"); - RegisterComponent(39, "minecraft:charged_projectiles"); - RegisterComponent(40, "minecraft:bundle_contents"); - RegisterComponent(41, "minecraft:potion_contents"); - RegisterComponent(42, "minecraft:suspicious_stew_effects"); - RegisterComponent(43, "minecraft:writable_book_content"); - RegisterComponent(44, "minecraft:written_book_content"); - RegisterComponent(45, "minecraft:trim"); - RegisterComponent(46, "minecraft:debug_stick_state"); - RegisterComponent(47, "minecraft:entity_data"); - RegisterComponent(48, "minecraft:bucket_entity_data"); - RegisterComponent(49, "minecraft:block_entity_data"); - RegisterComponent(50, "minecraft:instrument"); - RegisterComponent(51, "minecraft:ominous_bottle_amplifier"); - RegisterComponent(52, "minecraft:jukebox_playable"); - RegisterComponent(53, "minecraft:recipes"); - RegisterComponent(54, "minecraft:lodestone_tracker"); - RegisterComponent(55, "minecraft:firework_explosion"); - RegisterComponent(56, "minecraft:fireworks"); - RegisterComponent(57, "minecraft:profile"); - RegisterComponent(58, "minecraft:note_block_sound"); - RegisterComponent(59, "minecraft:banner_patterns"); - RegisterComponent(60, "minecraft:base_color"); - RegisterComponent(61, "minecraft:pot_decorations"); - RegisterComponent(62, "minecraft:container"); - RegisterComponent(63, "minecraft:block_state"); - RegisterComponent(64, "minecraft:bees"); - RegisterComponent(65, "minecraft:lock"); - RegisterComponent(66, "minecraft:container_loot"); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry1215.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry1215.cs deleted file mode 100644 index d78d87b950..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry1215.cs +++ /dev/null @@ -1,138 +0,0 @@ -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_8; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_9; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_11; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Registries; - -public class StructuredComponentsRegistry1215 : StructuredComponentRegistry -{ - public StructuredComponentsRegistry1215(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : base(dataTypes, itemPalette, subComponentRegistry) - { - var uses1216AttributeAndEquippableFormats = dataTypes.ProtocolVersion >= Protocol18Handler.MC_1_21_6_Version; - var usesTypedBeesFormat = dataTypes.ProtocolVersion >= Protocol18Handler.MC_1_21_9_Version; - var usesTypedEntityDataFormat = dataTypes.ProtocolVersion >= Protocol18Handler.MC_1_21_9_Version; - - RegisterComponent(0, "minecraft:custom_data"); - RegisterComponent(1, "minecraft:max_stack_size"); - RegisterComponent(2, "minecraft:max_damage"); - RegisterComponent(3, "minecraft:damage"); - RegisterComponent(4, "minecraft:unbreakable"); // Changed from Unbreakable (Bool) to Unit (empty) in 1.21.5 - RegisterComponent(5, "minecraft:custom_name"); - RegisterComponent(6, "minecraft:item_name"); - RegisterComponent(7, "minecraft:item_model"); - RegisterComponent(8, "minecraft:lore"); - RegisterComponent(9, "minecraft:rarity"); - RegisterComponent(10, "minecraft:enchantments"); - RegisterComponent(11, "minecraft:can_place_on"); - RegisterComponent(12, "minecraft:can_break"); - if (uses1216AttributeAndEquippableFormats) - RegisterComponent(13, "minecraft:attribute_modifiers"); - else - RegisterComponent(13, "minecraft:attribute_modifiers"); - RegisterComponent(14, "minecraft:custom_model_data"); - // 15: tooltip_display (NEW, replaces hide_additional_tooltip + hide_tooltip) - RegisterComponent(15, "minecraft:tooltip_display"); - RegisterComponent(16, "minecraft:repair_cost"); - RegisterComponent(17, "minecraft:creative_slot_lock"); - RegisterComponent(18, "minecraft:enchantment_glint_override"); - RegisterComponent(19, "minecraft:intangible_projectile"); - RegisterComponent(20, "minecraft:food"); - RegisterComponent(21, "minecraft:consumable"); - RegisterComponent(22, "minecraft:use_remainder"); - RegisterComponent(23, "minecraft:use_cooldown"); - RegisterComponent(24, "minecraft:damage_resistant"); - RegisterComponent(25, "minecraft:tool"); - RegisterComponent(26, "minecraft:weapon"); // NEW - RegisterComponent(27, "minecraft:enchantable"); - if (uses1216AttributeAndEquippableFormats) - RegisterComponent(28, "minecraft:equippable"); - else - RegisterComponent(28, "minecraft:equippable"); - RegisterComponent(29, "minecraft:repairable"); - RegisterComponent(30, "minecraft:glider"); - RegisterComponent(31, "minecraft:tooltip_style"); - RegisterComponent(32, "minecraft:death_protection"); - RegisterComponent(33, "minecraft:blocks_attacks"); // NEW - RegisterComponent(34, "minecraft:stored_enchantments"); - RegisterComponent(35, "minecraft:dyed_color"); - RegisterComponent(36, "minecraft:map_color"); - RegisterComponent(37, "minecraft:map_id"); - RegisterComponent(38, "minecraft:map_decorations"); - RegisterComponent(39, "minecraft:map_post_processing"); - RegisterComponent(40, "minecraft:charged_projectiles"); - RegisterComponent(41, "minecraft:bundle_contents"); - RegisterComponent(42, "minecraft:potion_contents"); - RegisterComponent(43, "minecraft:potion_duration_scale"); // NEW - RegisterComponent(44, "minecraft:suspicious_stew_effects"); - RegisterComponent(45, "minecraft:writable_book_content"); - RegisterComponent(46, "minecraft:written_book_content"); - RegisterComponent(47, "minecraft:trim"); - RegisterComponent(48, "minecraft:debug_stick_state"); - if (usesTypedEntityDataFormat) - RegisterComponent(49, "minecraft:entity_data"); - else - RegisterComponent(49, "minecraft:entity_data"); - RegisterComponent(50, "minecraft:bucket_entity_data"); - if (usesTypedEntityDataFormat) - RegisterComponent(51, "minecraft:block_entity_data"); - else - RegisterComponent(51, "minecraft:block_entity_data"); - RegisterComponent(52, "minecraft:instrument"); // Changed to EitherHolder in 1.21.5 - RegisterComponent(53, "minecraft:provides_trim_material"); // NEW - RegisterComponent(54, "minecraft:ominous_bottle_amplifier"); - RegisterComponent(55, "minecraft:jukebox_playable"); - RegisterComponent(56, "minecraft:provides_banner_patterns"); // NEW - RegisterComponent(57, "minecraft:recipes"); - RegisterComponent(58, "minecraft:lodestone_tracker"); - RegisterComponent(59, "minecraft:firework_explosion"); - RegisterComponent(60, "minecraft:fireworks"); - RegisterComponent(61, "minecraft:profile"); - RegisterComponent(62, "minecraft:note_block_sound"); - RegisterComponent(63, "minecraft:banner_patterns"); - RegisterComponent(64, "minecraft:base_color"); - RegisterComponent(65, "minecraft:pot_decorations"); - RegisterComponent(66, "minecraft:container"); - RegisterComponent(67, "minecraft:block_state"); - if (usesTypedBeesFormat) - RegisterComponent(68, "minecraft:bees"); - else - RegisterComponent(68, "minecraft:bees"); - RegisterComponent(69, "minecraft:lock"); - RegisterComponent(70, "minecraft:container_loot"); - - // Entity variant components (NEW in 1.21.5) - RegisterComponent(71, "minecraft:break_sound"); - RegisterComponent(72, "minecraft:villager/variant"); - RegisterComponent(73, "minecraft:wolf/variant"); - RegisterComponent(74, "minecraft:wolf/sound_variant"); - RegisterComponent(75, "minecraft:wolf/collar"); // DyeColor as VarInt - RegisterComponent(76, "minecraft:fox/variant"); - RegisterComponent(77, "minecraft:salmon/size"); - RegisterComponent(78, "minecraft:parrot/variant"); - RegisterComponent(79, "minecraft:tropical_fish/pattern"); - RegisterComponent(80, "minecraft:tropical_fish/base_color"); // DyeColor - RegisterComponent(81, "minecraft:tropical_fish/pattern_color"); // DyeColor - RegisterComponent(82, "minecraft:mooshroom/variant"); - RegisterComponent(83, "minecraft:rabbit/variant"); - RegisterComponent(84, "minecraft:pig/variant"); - RegisterComponent(85, "minecraft:cow/variant"); - RegisterComponent(86, "minecraft:chicken/variant"); // EitherHolder - RegisterComponent(87, "minecraft:frog/variant"); - RegisterComponent(88, "minecraft:horse/variant"); - RegisterComponent(89, "minecraft:painting/variant"); // Holder - RegisterComponent(90, "minecraft:llama/variant"); - RegisterComponent(91, "minecraft:axolotl/variant"); - RegisterComponent(92, "minecraft:cat/variant"); - RegisterComponent(93, "minecraft:cat/collar"); // DyeColor - RegisterComponent(94, "minecraft:sheep/color"); // DyeColor - RegisterComponent(95, "minecraft:shulker/color"); // DyeColor - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry261.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry261.cs deleted file mode 100644 index c0b4281d1f..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry261.cs +++ /dev/null @@ -1,132 +0,0 @@ -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_8; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_9; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_11; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._26_1; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Registries; - -public class StructuredComponentsRegistry261 : StructuredComponentRegistry -{ - public StructuredComponentsRegistry261(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : base(dataTypes, itemPalette, subComponentRegistry) - { - RegisterComponent(0, "minecraft:custom_data"); - RegisterComponent(1, "minecraft:max_stack_size"); - RegisterComponent(2, "minecraft:max_damage"); - RegisterComponent(3, "minecraft:damage"); - RegisterComponent(4, "minecraft:unbreakable"); - RegisterComponent(5, "minecraft:use_effects"); - RegisterComponent(6, "minecraft:custom_name"); - RegisterComponent(7, "minecraft:minimum_attack_charge"); - RegisterComponent(8, "minecraft:damage_type"); - RegisterComponent(9, "minecraft:item_name"); - RegisterComponent(10, "minecraft:item_model"); - RegisterComponent(11, "minecraft:lore"); - RegisterComponent(12, "minecraft:rarity"); - RegisterComponent(13, "minecraft:enchantments"); - RegisterComponent(14, "minecraft:can_place_on"); - RegisterComponent(15, "minecraft:can_break"); - RegisterComponent(16, "minecraft:attribute_modifiers"); - RegisterComponent(17, "minecraft:custom_model_data"); - RegisterComponent(18, "minecraft:tooltip_display"); - RegisterComponent(19, "minecraft:repair_cost"); - RegisterComponent(20, "minecraft:creative_slot_lock"); - RegisterComponent(21, "minecraft:enchantment_glint_override"); - RegisterComponent(22, "minecraft:intangible_projectile"); - RegisterComponent(23, "minecraft:food"); - RegisterComponent(24, "minecraft:consumable"); - RegisterComponent(25, "minecraft:use_remainder"); - RegisterComponent(26, "minecraft:use_cooldown"); - RegisterComponent(27, "minecraft:damage_resistant"); - RegisterComponent(28, "minecraft:tool"); - RegisterComponent(29, "minecraft:weapon"); - RegisterComponent(30, "minecraft:attack_range"); - RegisterComponent(31, "minecraft:enchantable"); - RegisterComponent(32, "minecraft:equippable"); - RegisterComponent(33, "minecraft:repairable"); - RegisterComponent(34, "minecraft:glider"); - RegisterComponent(35, "minecraft:tooltip_style"); - RegisterComponent(36, "minecraft:death_protection"); - RegisterComponent(37, "minecraft:blocks_attacks"); - RegisterComponent(38, "minecraft:piercing_weapon"); - RegisterComponent(39, "minecraft:kinetic_weapon"); - RegisterComponent(40, "minecraft:swing_animation"); - RegisterComponent(41, "minecraft:additional_trade_cost"); // New in 26.1 - RegisterComponent(42, "minecraft:stored_enchantments"); - RegisterComponent(43, "minecraft:dye"); // New in 26.1 - RegisterComponent(44, "minecraft:dyed_color"); - RegisterComponent(45, "minecraft:map_color"); - RegisterComponent(46, "minecraft:map_id"); - RegisterComponent(47, "minecraft:map_decorations"); - RegisterComponent(48, "minecraft:map_post_processing"); - RegisterComponent(49, "minecraft:charged_projectiles"); - RegisterComponent(50, "minecraft:bundle_contents"); - RegisterComponent(51, "minecraft:potion_contents"); - RegisterComponent(52, "minecraft:potion_duration_scale"); - RegisterComponent(53, "minecraft:suspicious_stew_effects"); - RegisterComponent(54, "minecraft:writable_book_content"); - RegisterComponent(55, "minecraft:written_book_content"); - RegisterComponent(56, "minecraft:trim"); - RegisterComponent(57, "minecraft:debug_stick_state"); - RegisterComponent(58, "minecraft:entity_data"); - RegisterComponent(59, "minecraft:bucket_entity_data"); - RegisterComponent(60, "minecraft:block_entity_data"); - RegisterComponent(61, "minecraft:instrument"); - RegisterComponent(62, "minecraft:provides_trim_material"); - RegisterComponent(63, "minecraft:ominous_bottle_amplifier"); - RegisterComponent(64, "minecraft:jukebox_playable"); - RegisterComponent(65, "minecraft:provides_banner_patterns"); - RegisterComponent(66, "minecraft:recipes"); - RegisterComponent(67, "minecraft:lodestone_tracker"); - RegisterComponent(68, "minecraft:firework_explosion"); - RegisterComponent(69, "minecraft:fireworks"); - RegisterComponent(70, "minecraft:profile"); - RegisterComponent(71, "minecraft:note_block_sound"); - RegisterComponent(72, "minecraft:banner_patterns"); - RegisterComponent(73, "minecraft:base_color"); - RegisterComponent(74, "minecraft:pot_decorations"); - RegisterComponent(75, "minecraft:container"); - RegisterComponent(76, "minecraft:block_state"); - RegisterComponent(77, "minecraft:bees"); - RegisterComponent(78, "minecraft:lock"); - RegisterComponent(79, "minecraft:container_loot"); - - RegisterComponent(80, "minecraft:break_sound"); - RegisterComponent(81, "minecraft:villager/variant"); - RegisterComponent(82, "minecraft:wolf/variant"); - RegisterComponent(83, "minecraft:wolf/sound_variant"); - RegisterComponent(84, "minecraft:wolf/collar"); - RegisterComponent(85, "minecraft:fox/variant"); - RegisterComponent(86, "minecraft:salmon/size"); - RegisterComponent(87, "minecraft:parrot/variant"); - RegisterComponent(88, "minecraft:tropical_fish/pattern"); - RegisterComponent(89, "minecraft:tropical_fish/base_color"); - RegisterComponent(90, "minecraft:tropical_fish/pattern_color"); - RegisterComponent(91, "minecraft:mooshroom/variant"); - RegisterComponent(92, "minecraft:rabbit/variant"); - RegisterComponent(93, "minecraft:pig/variant"); - RegisterComponent(94, "minecraft:pig/sound_variant"); // New in 26.1 - RegisterComponent(95, "minecraft:cow/variant"); - RegisterComponent(96, "minecraft:cow/sound_variant"); // New in 26.1 - RegisterComponent(97, "minecraft:chicken/variant"); - RegisterComponent(98, "minecraft:chicken/sound_variant"); // New in 26.1 - RegisterComponent(99, "minecraft:zombie_nautilus/variant"); - RegisterComponent(100, "minecraft:frog/variant"); - RegisterComponent(101, "minecraft:horse/variant"); - RegisterComponent(102, "minecraft:painting/variant"); - RegisterComponent(103, "minecraft:llama/variant"); - RegisterComponent(104, "minecraft:axolotl/variant"); - RegisterComponent(105, "minecraft:cat/variant"); - RegisterComponent(106, "minecraft:cat/sound_variant"); // New in 26.1 - RegisterComponent(107, "minecraft:cat/collar"); - RegisterComponent(108, "minecraft:sheep/color"); - RegisterComponent(109, "minecraft:shulker/color"); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry262.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry262.cs deleted file mode 100644 index 85d04ee913..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/StructuredComponentsRegistry262.cs +++ /dev/null @@ -1,134 +0,0 @@ -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_2; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_5; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_8; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_9; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_21_11; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._26_1; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._26_2; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Registries; - -public class StructuredComponentsRegistry262 : StructuredComponentRegistry -{ - public StructuredComponentsRegistry262(DataTypes dataTypes, ItemPalette itemPalette, SubComponentRegistry subComponentRegistry) - : base(dataTypes, itemPalette, subComponentRegistry) - { - RegisterComponent(0, "minecraft:custom_data"); - RegisterComponent(1, "minecraft:max_stack_size"); - RegisterComponent(2, "minecraft:max_damage"); - RegisterComponent(3, "minecraft:damage"); - RegisterComponent(4, "minecraft:unbreakable"); - RegisterComponent(5, "minecraft:use_effects"); - RegisterComponent(6, "minecraft:custom_name"); - RegisterComponent(7, "minecraft:minimum_attack_charge"); - RegisterComponent(8, "minecraft:damage_type"); - RegisterComponent(9, "minecraft:item_name"); - RegisterComponent(10, "minecraft:item_model"); - RegisterComponent(11, "minecraft:lore"); - RegisterComponent(12, "minecraft:rarity"); - RegisterComponent(13, "minecraft:enchantments"); - RegisterComponent(14, "minecraft:can_place_on"); - RegisterComponent(15, "minecraft:can_break"); - RegisterComponent(16, "minecraft:attribute_modifiers"); - RegisterComponent(17, "minecraft:custom_model_data"); - RegisterComponent(18, "minecraft:tooltip_display"); - RegisterComponent(19, "minecraft:repair_cost"); - RegisterComponent(20, "minecraft:creative_slot_lock"); - RegisterComponent(21, "minecraft:enchantment_glint_override"); - RegisterComponent(22, "minecraft:intangible_projectile"); - RegisterComponent(23, "minecraft:food"); - RegisterComponent(24, "minecraft:consumable"); - RegisterComponent(25, "minecraft:use_remainder"); - RegisterComponent(26, "minecraft:use_cooldown"); - RegisterComponent(27, "minecraft:damage_resistant"); - RegisterComponent(28, "minecraft:tool"); - RegisterComponent(29, "minecraft:weapon"); - RegisterComponent(30, "minecraft:attack_range"); - RegisterComponent(31, "minecraft:enchantable"); - RegisterComponent(32, "minecraft:equippable"); - RegisterComponent(33, "minecraft:repairable"); - RegisterComponent(34, "minecraft:glider"); - RegisterComponent(35, "minecraft:tooltip_style"); - RegisterComponent(36, "minecraft:death_protection"); - RegisterComponent(37, "minecraft:blocks_attacks"); - RegisterComponent(38, "minecraft:piercing_weapon"); - RegisterComponent(39, "minecraft:kinetic_weapon"); - RegisterComponent(40, "minecraft:swing_animation"); - RegisterComponent(41, "minecraft:additional_trade_cost"); // New in 26.1 - RegisterComponent(42, "minecraft:stored_enchantments"); - RegisterComponent(43, "minecraft:dye"); // New in 26.1 - RegisterComponent(44, "minecraft:dyed_color"); - RegisterComponent(45, "minecraft:map_color"); - RegisterComponent(46, "minecraft:map_id"); - RegisterComponent(47, "minecraft:map_decorations"); - RegisterComponent(48, "minecraft:map_post_processing"); - RegisterComponent(49, "minecraft:charged_projectiles"); - RegisterComponent(50, "minecraft:bundle_contents"); - RegisterComponent(51, "minecraft:potion_contents"); - RegisterComponent(52, "minecraft:potion_duration_scale"); - RegisterComponent(53, "minecraft:suspicious_stew_effects"); - RegisterComponent(54, "minecraft:writable_book_content"); - RegisterComponent(55, "minecraft:written_book_content"); - RegisterComponent(56, "minecraft:trim"); - RegisterComponent(57, "minecraft:debug_stick_state"); - RegisterComponent(58, "minecraft:entity_data"); - RegisterComponent(59, "minecraft:bucket_entity_data"); - RegisterComponent(60, "minecraft:block_entity_data"); - RegisterComponent(61, "minecraft:instrument"); - RegisterComponent(62, "minecraft:provides_trim_material"); - RegisterComponent(63, "minecraft:ominous_bottle_amplifier"); - RegisterComponent(64, "minecraft:jukebox_playable"); - RegisterComponent(65, "minecraft:provides_banner_patterns"); - RegisterComponent(66, "minecraft:recipes"); - RegisterComponent(67, "minecraft:lodestone_tracker"); - RegisterComponent(68, "minecraft:firework_explosion"); - RegisterComponent(69, "minecraft:fireworks"); - RegisterComponent(70, "minecraft:profile"); - RegisterComponent(71, "minecraft:note_block_sound"); - RegisterComponent(72, "minecraft:banner_patterns"); - RegisterComponent(73, "minecraft:base_color"); - RegisterComponent(74, "minecraft:pot_decorations"); - RegisterComponent(75, "minecraft:container"); - RegisterComponent(76, "minecraft:block_state"); - RegisterComponent(77, "minecraft:bees"); - RegisterComponent(78, "minecraft:sulfur_cube_content"); // New in 26.2 - RegisterComponent(79, "minecraft:lock"); - RegisterComponent(80, "minecraft:container_loot"); - - RegisterComponent(81, "minecraft:break_sound"); - RegisterComponent(82, "minecraft:villager/variant"); - RegisterComponent(83, "minecraft:wolf/variant"); - RegisterComponent(84, "minecraft:wolf/sound_variant"); - RegisterComponent(85, "minecraft:wolf/collar"); - RegisterComponent(86, "minecraft:fox/variant"); - RegisterComponent(87, "minecraft:salmon/size"); - RegisterComponent(88, "minecraft:parrot/variant"); - RegisterComponent(89, "minecraft:tropical_fish/pattern"); - RegisterComponent(90, "minecraft:tropical_fish/base_color"); - RegisterComponent(91, "minecraft:tropical_fish/pattern_color"); - RegisterComponent(92, "minecraft:mooshroom/variant"); - RegisterComponent(93, "minecraft:rabbit/variant"); - RegisterComponent(94, "minecraft:pig/variant"); - RegisterComponent(95, "minecraft:pig/sound_variant"); // New in 26.1 - RegisterComponent(96, "minecraft:cow/variant"); - RegisterComponent(97, "minecraft:cow/sound_variant"); // New in 26.1 - RegisterComponent(98, "minecraft:chicken/variant"); - RegisterComponent(99, "minecraft:chicken/sound_variant"); // New in 26.1 - RegisterComponent(100, "minecraft:zombie_nautilus/variant"); - RegisterComponent(101, "minecraft:frog/variant"); - RegisterComponent(102, "minecraft:horse/variant"); - RegisterComponent(103, "minecraft:painting/variant"); - RegisterComponent(104, "minecraft:llama/variant"); - RegisterComponent(105, "minecraft:axolotl/variant"); - RegisterComponent(106, "minecraft:cat/variant"); - RegisterComponent(107, "minecraft:cat/sound_variant"); // New in 26.1 - RegisterComponent(108, "minecraft:cat/collar"); - RegisterComponent(109, "minecraft:sheep/color"); - RegisterComponent(110, "minecraft:shulker/color"); - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/Subcomponents/SubComponentRegistry1206.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/Subcomponents/SubComponentRegistry1206.cs deleted file mode 100644 index 2e270842be..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/Subcomponents/SubComponentRegistry1206.cs +++ /dev/null @@ -1,22 +0,0 @@ -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Registries.Subcomponents; - -public class SubComponentRegistry1206 : SubComponentRegistry -{ - public SubComponentRegistry1206(DataTypes dataTypes) : base(dataTypes) - { - RegisterSubComponent(SubComponents.BlockPredicate); - RegisterSubComponent(SubComponents.BlockSet); - RegisterSubComponent(SubComponents.Property); - RegisterSubComponent(SubComponents.Attribute); - RegisterSubComponent(SubComponents.Effect); - RegisterSubComponent(SubComponents.PotionEffect); - RegisterSubComponent(SubComponents.Details); - RegisterSubComponent(SubComponents.Rule); - RegisterSubComponent(SubComponents.FireworkExplosion); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/Subcomponents/SubComponentRegistry121.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/Subcomponents/SubComponentRegistry121.cs deleted file mode 100644 index 2afd285295..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/Subcomponents/SubComponentRegistry121.cs +++ /dev/null @@ -1,16 +0,0 @@ -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_20_6; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_21; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Registries.Subcomponents; - -public class SubComponentRegistry121 : SubComponentRegistry1206 -{ - public SubComponentRegistry121(DataTypes dataTypes) : base(dataTypes) - { - ReplaceSubComponent(SubComponents.Attribute); - RegisterSubComponent(SubComponents.SoundEvent); - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/Subcomponents/SubComponentRegistry1212.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/Subcomponents/SubComponentRegistry1212.cs deleted file mode 100644 index ba5df82180..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/Registries/Subcomponents/SubComponentRegistry1212.cs +++ /dev/null @@ -1,11 +0,0 @@ -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components.Subcomponents._1_21; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents.Registries.Subcomponents; - -public class SubComponentRegistry1212 : SubComponentRegistry121 -{ - public SubComponentRegistry1212(DataTypes dataTypes) : base(dataTypes) - { - } -} diff --git a/MinecraftClient/Protocol/Handlers/StructuredComponents/StructuredComponentsHandler.cs b/MinecraftClient/Protocol/Handlers/StructuredComponents/StructuredComponentsHandler.cs deleted file mode 100644 index 6214b2f537..0000000000 --- a/MinecraftClient/Protocol/Handlers/StructuredComponents/StructuredComponentsHandler.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory.ItemPalettes; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Core; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Registries; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Registries.Subcomponents; - -namespace MinecraftClient.Protocol.Handlers.StructuredComponents; - -public class StructuredComponentsHandler -{ - private StructuredComponentRegistry ComponentRegistry { get; } - - public StructuredComponentsHandler( - int protocolVersion, - DataTypes dataTypes, - ItemPalette itemPalette) - { - // Get the appropriate subcomponent registry type based on the protocol version and then instantiate it - var subcomponentRegistryType = protocolVersion switch - { - Protocol18Handler.MC_1_20_6_Version => typeof(SubComponentRegistry1206), - Protocol18Handler.MC_1_21_Version => typeof(SubComponentRegistry121), - >= Protocol18Handler.MC_1_21_2_Version => typeof(SubComponentRegistry1212), - _ => throw new NotSupportedException($"Protocol version {protocolVersion} is not supported for subcomponent registries!") - }; - - var subcomponentRegistry = Activator.CreateInstance(subcomponentRegistryType, dataTypes) as SubComponentRegistry - ?? throw new InvalidOperationException($"Failed to instantiate a component registry for type {nameof(subcomponentRegistryType)}"); - - // Get the appropriate component registry type based on the protocol version and then instantiate it - var registryType = protocolVersion switch - { - Protocol18Handler.MC_1_20_6_Version => typeof(StructuredComponentsRegistry1206), - Protocol18Handler.MC_1_21_Version => typeof(StructuredComponentsRegistry121), - >= Protocol18Handler.MC_26_2_Version => typeof(StructuredComponentsRegistry262), - >= Protocol18Handler.MC_26_1_Version => typeof(StructuredComponentsRegistry261), - >= Protocol18Handler.MC_1_21_11_Version => typeof(StructuredComponentsRegistry12111), - >= Protocol18Handler.MC_1_21_5_Version => typeof(StructuredComponentsRegistry1215), - >= Protocol18Handler.MC_1_21_2_Version => typeof(StructuredComponentsRegistry1212), - _ => throw new NotSupportedException($"Protocol version {protocolVersion} is not supported for structured component registries!") - }; - - ComponentRegistry = Activator.CreateInstance(registryType, dataTypes, itemPalette, subcomponentRegistry) as StructuredComponentRegistry - ?? throw new InvalidOperationException($"Failed to instantiate a component registry for type {nameof(registryType)}"); - } - - public StructuredComponent Parse(int componentId, Queue data) - { - return ComponentRegistry.ParseComponent(componentId, data); - } - - public string GetComponentName(int componentId) - { - try - { - return ComponentRegistry.GetComponentNameById(componentId); - } - catch - { - return ""; - } - } -} diff --git a/MinecraftClient/Protocol/Handlers/ZlibUtils.cs b/MinecraftClient/Protocol/Handlers/ZlibUtils.cs deleted file mode 100644 index bff4131d5d..0000000000 --- a/MinecraftClient/Protocol/Handlers/ZlibUtils.cs +++ /dev/null @@ -1,70 +0,0 @@ -using System.IO; -using System.IO.Compression; - -namespace MinecraftClient.Protocol.Handlers -{ - /// - /// Quick Zlib compression handling for network packet compression. - /// - public static class ZlibUtils - { - /// - /// Compress a byte array into another bytes array using Zlib compression - /// - /// Data to compress - /// Compressed data as a byte array - public static byte[] Compress(byte[] to_compress) - { - using MemoryStream memstream = new(); - using (ZLibStream stream = new(memstream, CompressionMode.Compress, leaveOpen: true)) - { - stream.Write(to_compress, 0, to_compress.Length); - } - - return memstream.ToArray(); - } - - /// - /// Decompress a byte array into another byte array of the specified size - /// - /// Data to decompress - /// Size of the data once decompressed - /// Decompressed data as a byte array - public static byte[] Decompress(byte[] to_decompress, int size_uncompressed) - { - using MemoryStream compressedStream = new(to_decompress, writable: false); - using ZLibStream stream = new(compressedStream, CompressionMode.Decompress); - - byte[] packetData_decompressed = new byte[size_uncompressed]; - int totalRead = 0; - while (totalRead < size_uncompressed) - { - int read = stream.Read(packetData_decompressed, totalRead, size_uncompressed - totalRead); - if (read <= 0) - break; - - totalRead += read; - } - - return packetData_decompressed; - } - - /// - /// Decompress a byte array into another byte array of a potentially unlimited size (!) - /// - /// Data to decompress - /// Decompressed data as byte array - public static byte[] Decompress(byte[] to_decompress) - { - using MemoryStream compressedStream = new(to_decompress, writable: false); - using ZLibStream stream = new(compressedStream, CompressionMode.Decompress); - byte[] buffer = new byte[16 * 1024]; - using MemoryStream decompressedBuffer = new(); - int read; - while ((read = stream.Read(buffer, 0, buffer.Length)) > 0) - decompressedBuffer.Write(buffer, 0, read); - - return decompressedBuffer.ToArray(); - } - } -} diff --git a/MinecraftClient/Protocol/IMinecraftCom.cs b/MinecraftClient/Protocol/IMinecraftCom.cs deleted file mode 100644 index ee604ceb06..0000000000 --- a/MinecraftClient/Protocol/IMinecraftCom.cs +++ /dev/null @@ -1,319 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Inventory; -using MinecraftClient.Mapping; -using MinecraftClient.Protocol.ProfileKey; - -namespace MinecraftClient.Protocol -{ - /// - /// Interface for the Minecraft protocol handler. - /// A protocol handler is used to communicate with the Minecraft server. - /// This interface allows to abstract from the underlying minecraft version in other parts of the program. - /// The protocol handler will take care of parsing and building the appropriate network packets. - /// - - public interface IMinecraftCom : IDisposable, IAutoComplete - { - /// - /// Start the login procedure once connected to the server - /// - /// True if login was successful - bool Login(PlayerKeyPair? playerKeyPair, Session.SessionToken session, bool isTransfer = false); - - /// - /// Disconnect from the server - /// - void Disconnect(); - - /// - /// Get max length for chat messages - /// - /// Max length, in characters - int GetMaxChatMessageLength(); - - /// - /// Get the current protocol version. - /// - /// - /// Version-specific operations should be handled inside the Protocol handled whenever possible. - /// - /// Minecraft Protocol version number - int GetProtocolVersion(); - - /// - /// Send a chat message or command to the server - /// - /// Text to send - /// True if successfully sent - bool SendChatMessage(string message, PlayerKeyPair? playerKeyPair = null); - - /// - /// Send a custom click action packet introduced for dialogs in Minecraft 1.21.6. - /// - /// Custom action resource location - /// Optional NBT payload - /// True if successfully sent - bool SendCustomClickAction(string id, Dictionary? payload); - - /// - /// Allow to respawn after death - /// - /// True if packet successfully sent - bool SendRespawnPacket(); - - /// - /// Inform the server of the client being used to connect - /// - /// Client string describing the client - /// True if brand info was successfully sent - bool SendBrandInfo(string brandInfo); - - /// - /// Inform the server of the client's Minecraft settings - /// - /// Client language eg en_US - /// View distance, in chunks - /// Game difficulty (client-side...) - /// Chat mode (allows muting yourself) - /// Show chat colors - /// Show skin layers - /// 1.9+ main hand - /// True if client settings were successfully sent - bool SendClientSettings(string language, byte viewDistance, byte difficulty, byte chatMode, bool chatColors, byte skinParts, byte mainHand); - - /// - /// Send a location update telling that we moved to that location - /// - /// The new location - /// True if the player is on the ground - /// True if the player is colliding horizontally - /// The new yaw (optional) - /// The new pitch (optional) - /// True if packet was successfully sent - bool SendLocationUpdate(Location location, bool onGround, bool horizontalCollision, float? yaw, float? pitch); - - /// - /// Send a plugin channel packet to the server. - /// - /// - /// Channel to send packet on - /// packet Data - /// True if message was successfully sent - bool SendPluginChannelPacket(string channel, byte[] data); - - /// - /// Send Entity Action packet to the server. - /// - /// PlayerID - /// Type of packet to send - /// True if packet was successfully sent - bool SendEntityAction(int EntityID, int type); - - /// - /// Send a held item change packet to the server. - /// - /// New active slot in the inventory hotbar - /// True if packet was successfully sent - bool SendHeldItemChange(short slot); - - /// - /// Send an entity interaction packet to the server. - /// - /// Entity ID to interact with - /// Type of interaction (0: interact, 1: attack, 2: interact at) - /// True if packet was successfully sent - bool SendInteractEntity(int EntityID, int type); - - /// - /// Send an entity interaction packet to the server. - /// - /// Entity ID to interact with - /// Type of interaction (0: interact, 1: attack, 2: interact at) - /// X coordinate for "interact at" - /// Y coordinate for "interact at" - /// Z coordinate for "interact at" - /// Player hand (0: main hand, 1: off hand) - /// True if packet was successfully sent - bool SendInteractEntity(int EntityID, int type, float X, float Y, float Z, int hand); - - /// - /// Send an entity interaction packet to the server. - /// - /// Entity ID to interact with - /// Type of interaction (0: interact, 1: attack, 2: interact at) - /// X coordinate for "interact at" - /// Y coordinate for "interact at" - /// Z coordinate for "interact at" - /// True if packet was successfully sent - bool SendInteractEntity(int EntityID, int type, float X, float Y, float Z); - - /// - /// Send an entity interaction packet to the server. - /// - /// Entity ID to interact with - /// Type of interaction (0: interact, 1: attack, 2: interact at) - /// Only if Type is interact or interact at; 0: main hand, 1: off hand - /// True if packet was successfully sent - bool SendInteractEntity(int EntityID, int type, int hand); - - /// - /// Send a use item packet to the server - /// - /// 0: main hand, 1: off hand - /// Sequence ID used for synchronization - /// True if packet was successfully sent - bool SendUseItem(int hand, int sequenceId); - - /// - /// Send a click window slot packet to the server - /// - /// Id of the window being clicked - /// Id of the clicked slot - /// Action to perform - /// Item in the clicked slot - /// Slots that have been changed in this event: List - /// Inventory's stateId - /// True if packet was successfully sent - bool SendWindowAction(int windowId, int slotId, WindowActionType action, Item? item, List> changedSlots, int stateId); - - /// - /// Request Creative Mode item creation into regular/survival Player Inventory - /// - /// (obviously) requires to be in creative mode - /// Destination inventory slot - /// Item type - /// Item count - /// Optional item NBT - /// TRUE if item given successfully - bool SendCreativeInventoryAction(int slot, ItemType itemType, int count, Dictionary? nbt); - - /// - /// Send a click container button packet to the server. - /// Used for Enchanting table, Lectern, stone cutter and loom - /// - /// Id of the window being clicked - /// Id of the clicked button - /// True if packet was successfully sent - - bool ClickContainerButton(int windowId, int buttonId); - - /// - /// Send a place recipe packet to the server for the active recipe book container. - /// - /// Id of the window being clicked - /// Recipe identifier to craft - /// True to craft as many items as possible - /// True if packet was successfully sent - bool SendPlaceRecipe(int windowId, string recipeId, bool makeAll); - - /// - /// Send a book edit/sign packet for the currently held writable book. - /// - /// Current held writable book - /// Book pages - /// Title when signing, otherwise null - /// Current player name when signing - /// Selected hotbar slot, 0-8 - /// True if packet was successfully sent - bool SendEditBook(Item currentBook, IReadOnlyList pages, string? title, string author, int selectedHotbarSlot); - - /// - /// Plays animation - /// - /// 0 for left arm, 1 for right arm - /// Player Entity ID - /// TRUE if item given successfully - bool SendAnimation(int animation, int playerid); - - /// - /// Send a close window packet to the server - /// - /// Id of the window being closed - bool SendCloseWindow(int windowId); - - /// - /// Send player block placement packet to the server - /// - /// 0: main hand, 1: off hand - /// Location to place block at - /// Block face - /// Sequence ID (use for synchronization) - /// True if packet was successfully sent - bool SendPlayerBlockPlacement(int hand, Location location, Direction face, int sequenceId); - - /// - /// Send player blog digging packet to the server. This packet needs to be called at least twice: Once to begin digging, then a second time to finish digging - /// - /// 0 to start digging, 1 to cancel, 2 to finish ( https://wiki.vg/Protocol#Player_Digging ) - /// Location - /// Block face - /// Sequence ID (use for synchronization) - /// True if packet was successfully sent - bool SendPlayerDigging(int status, Location location, Direction face, int sequenceId); - - /// - /// Change text on a sign - /// - /// Location of Sign block - /// New line 1 - /// New line 2 - /// New line 3 - /// New line 4 - /// Are we editing the front or the back of the sign. 1.20 + - /// True if packet was successfully sent - bool SendUpdateSign(Location location, string line1, string line2, string line3, string line4, bool isFrontText = true); - - /// - /// Update command block - /// - /// command block location - /// command - /// command block mode - /// command block flags - bool UpdateCommandBlock(Location location, string command, CommandBlockMode mode, CommandBlockFlags flags); - - /// - /// Select villager trade - /// - /// The slot of the trade, starts at 0. - bool SelectTrade(int selectedSlot); - - /// - /// Spectate a player/entity - /// - /// The uuid of the player/entity to spectate/teleport to. - bool SendSpectate(Guid uuid); - - /// - /// Send player session - /// - /// - bool SendPlayerSession(PlayerKeyPair? playerKeyPair); - - /// - /// Send the server a command to type in the item name in the Anvil inventory when it's open. - /// - /// The new item name - bool SendRenameItem(string itemName); - - /// - /// Get net read thread (main thread) ID - /// - /// Net read thread ID - int GetNetMainThreadId(); - - /// - /// Send the server a requested cookie - /// - /// The cookie identifier/name - /// The cookie data byte array - bool SendCookieResponse(string name, byte[]? data); - - /// - /// Send the server known data packs - /// - /// The clist of tuples containing info about the kown data packs (namespace, id, version) - bool SendKnownDataPacks(List<(string, string, string)> knownDataPacks); - } -} diff --git a/MinecraftClient/Protocol/IMinecraftComHandler.cs b/MinecraftClient/Protocol/IMinecraftComHandler.cs deleted file mode 100644 index 856f222ad3..0000000000 --- a/MinecraftClient/Protocol/IMinecraftComHandler.cs +++ /dev/null @@ -1,643 +0,0 @@ -using System; -using System.Collections.Generic; -using MinecraftClient.Dialogs; -using MinecraftClient.Inventory; -using MinecraftClient.Logger; -using MinecraftClient.Mapping; -using MinecraftClient.Protocol.Message; -using MinecraftClient.Protocol.ProfileKey; -using MinecraftClient.Scripting; - -namespace MinecraftClient.Protocol -{ - /// - /// Interface for the MinecraftCom Handler. - /// It defines some callbacks that the MinecraftCom handler must have. - /// It allows the protocol handler to abstract from the other parts of the program. - /// - - public interface IMinecraftComHandler - { - /* The MinecraftCom Handler must - * provide these getters */ - - int GetServerPort(); - string GetServerHost(); - string GetUsername(); - Guid GetUserUuid(); - string GetUserUuidStr(); - string GetSessionID(); - string[] GetOnlinePlayers(); - Dictionary GetOnlinePlayersWithUUID(); - PlayerInfo? GetPlayerInfo(Guid uuid); - PlayerKeyPair? GetPlayerKeyPair(); - Location GetCurrentLocation(); - World GetWorld(); - bool GetIsSupportPreviewsChat(); - bool GetTerrainEnabled(); - bool SetTerrainEnabled(bool enabled); - bool GetInventoryEnabled(); - bool SetInventoryEnabled(bool enabled); - bool GetEntityHandlingEnabled(); - bool SetEntityHandlingEnabled(bool enabled); - bool GetNetworkPacketCaptureEnabled(); - void SetNetworkPacketCaptureEnabled(bool enabled); - int GetProtocolVersion(); - Container? GetInventory(int inventoryID); - ILogger GetLogger(); - void GetCookie(string key, out byte[]? data); - void SetCookie(string key, byte[] data); - void DeleteCookie(string key); - void DeleteAllCookies(); - - void Transfer(string newHost, int newPort); - - /// - /// Invoke a task on the main thread, wait for completion and retrieve return value. - /// - /// Task to run with any type or return value - /// Any result returned from task, result type is inferred from the task - /// bool result = InvokeOnMainThread(methodThatReturnsAbool); - /// bool result = InvokeOnMainThread(() => methodThatReturnsAbool(argument)); - /// int result = InvokeOnMainThread(() => { yourCode(); return 42; }); - /// Type of the return value - T InvokeOnMainThread(Func task); - - /// - /// Invoke a task on the main thread and wait for completion - /// - /// Task to run without return value - /// InvokeOnMainThread(methodThatReturnsNothing); - /// InvokeOnMainThread(() => methodThatReturnsNothing(argument)); - /// InvokeOnMainThread(() => { yourCode(); }); - void InvokeOnMainThread(Action task); - - /// - /// Called when a network packet received or sent - /// - /// - /// Only called if is set to True - /// - /// Packet ID - /// A copy of Packet Data - /// The packet is login phase or playing phase - /// The packet is received from server or sent by client - void OnNetworkPacket(int packetID, List packetData, bool isLogin, bool isInbound); - - /// - /// Called when a server was successfully joined - /// - void OnGameJoined(bool isOnlineMode); - - /// - /// Received chat/system message from the server - /// - /// Message received - public void OnTextReceived(ChatMessage message); - - /// - /// Called when the server synchronizes a dialog registry entry. - /// - void OnDialogRegistryData(int protocolId, string resourceId, DialogDefinition dialog); - - /// - /// Called when the server shows a custom dialog. - /// - void OnDialogShown(DialogDefinition dialog, DialogPhase phase); - - /// - /// Called when the server shows a custom dialog by registry protocol ID. - /// - void OnDialogRegistryReferenceShown(int protocolId, DialogPhase phase); - - /// - /// Called when the server clears the current custom dialog. - /// - void OnDialogCleared(); - - /// - /// Called when the server sends updated server links. - /// - void OnServerLinksUpdated(IReadOnlyList links); - - /// - /// Will be called every animations of the hit and place block - /// - /// Player ID - /// 0 = LMB, 1 = RMB (RMB Corrent not work) - void OnEntityAnimation(int entityID, byte animation); - - /// - /// Will be called when a Synchronization sequence is recevied, this sequence need to be sent when breaking or placing blocks - /// - /// Sequence ID - void OnBlockChangeAck(int sequenceId); - - /// - /// Will be called every player break block in gamemode 0 - /// - /// Player ID - /// Block location - /// Destroy stage, maximum 255 - void OnBlockBreakAnimation(int entityID, Location location, byte stage); - - /// - /// This method is called when the protocol handler receives a title - /// - void OnTitle(int action, string titletext, string subtitletext, string actionbartext, int fadein, int stay, int fadeout, string json); - - /// - /// Called when receiving a connection keep-alive from the server - /// - void OnServerKeepAlive(); - - /// - /// This method is called when the protocol handler receives server data - /// - /// Indicates if the server has a motd message - /// Server MOTD message - /// Indicates if the server has a an icon - /// Server icon in Base 64 format - /// Indicates if the server previews chat - void OnServerDataRecived(bool hasMotd, string motd, bool hasIcon, string iconBase64, bool previewsChat); - - /// - /// This method is called when the protocol handler receives "Set Display Chat Preview" packet - /// - /// Indicates if the server previews chat - public void OnChatPreviewSettingUpdate(bool previewsChat); - - /// - /// Called when an inventory is opened - /// - void OnInventoryOpen(int inventoryID, Container inventory); - - /// - /// Called when an inventory is closed - /// - void OnInventoryClose(int inventoryID); - - /// - /// Called when the player respawns, which happens on login, respawn and world change. - /// - void OnRespawn(); - - /// - /// Triggered when a new player joins the game - /// - /// player info - public void OnPlayerJoin(PlayerInfo player); - - /// - /// This method is called when a player has left the game - /// - /// UUID of the player - void OnPlayerLeave(Guid uuid); - - /// - /// This method is called when a player has been killed by another entity - /// - /// Killer's entity if - /// message sent in chat when player is killed - void OnPlayerKilled(int killerEntityId, string chatMessage); - - /// - /// Called when the server sets the new location for the player - /// - /// New location of the player - /// New yaw - /// New pitch - void UpdateLocation(Location location, float yaw, float pitch); - - /// - /// This method is called when the connection has been lost - /// - void OnConnectionLost(ChatBot.DisconnectReason reason, string message); - - /// - /// Called 20 times per second (20 ticks per second) - /// Useful for updating bots in other parts of the program - /// - void OnUpdate(); - - /// - /// Registers the given plugin channel for the given bot. - /// - /// The channel to register. - /// The bot to register the channel for. - void RegisterPluginChannel(string channel, ChatBot bot); - - /// - /// Unregisters the given plugin channel for the given bot. - /// - /// The channel to unregister. - /// The bot to unregister the channel for. - void UnregisterPluginChannel(string channel, ChatBot bot); - - /// - /// Sends a plugin channel packet to the server. - /// See http://wiki.vg/Plugin_channel for more information about plugin channels. - /// - /// The channel to send the packet on. - /// The payload for the packet. - /// Whether the packet should be sent even if the server or the client hasn't registered it yet. - /// Whether the packet was sent: true if it was sent, false if there was a connection error or it wasn't registered. - bool SendPluginChannelMessage(string channel, byte[] data, bool sendEvenIfNotRegistered = false); - - /// - /// Called when a plugin channel message was sent from the server. - /// - /// The channel the message was sent on - /// The data from the channel - void OnPluginChannelMessage(string channel, byte[] data); - - /// - /// Called when the server asks the client to open a book UI. - /// - /// Book hand, 0 main hand, 1 off hand. - void OnBookOpen(int hand); - - /// - /// Called when an entity has spawned - /// - /// Spawned entity - void OnSpawnEntity(Entity entity); - - /// - /// Called when an entity has spawned - /// - /// Entity id - /// Equipment slot. 0: main hand, 1: off hand, 2–5: armor slot (2: boots, 3: leggings, 4: chestplate, 5: helmet)/param> - /// Item/param> - void OnEntityEquipment(int entityid, int slot, Item? item); - - /// - /// Called when a player spawns or enters the client's render distance - /// - /// Entity ID - /// Entity UUID - /// Entity location - /// Player head yaw - /// Player head pitch - void OnSpawnPlayer(int entityID, Guid uuid, Location location, byte yaw, byte pitch); - - /// - /// Called when entities have despawned - /// - /// List of Entity ID that have despawned - void OnDestroyEntities(int[] EntityID); - - /// - /// Called when an entity moved by coordinate offset - /// - /// Entity ID - /// X offset - /// Y offset - /// Z offset - /// TRUE if on ground - void OnEntityPosition(int entityID, Double dx, Double dy, Double dz, bool onGround); - - /// - /// Called when an entity moved and rotated - /// - /// Entity ID - /// X offset - /// Y offset - /// Z offset - /// Yaw - /// Pitch - /// TRUE if on ground - void OnEntityPosition(int entityID, Double dx, Double dy, Double dz, float yaw, float pitch, bool onGround); - - /// - /// Called when an entity rotated - /// - /// Entity ID - /// Yaw - /// Pitch - /// TRUE if on ground - void OnEntityRotation(int entityID, float yaw, float pitch, bool onGround); - - /// - /// Called when an entity moved to fixed coordinates - /// - /// Entity ID - /// X - /// Y - /// Z - /// TRUE if on ground - void OnEntityTeleport(int entityID, Double x, Double y, Double z, bool onGround); - - /// - /// Called when an entity velocity update packet is received. - /// Velocity values are in blocks per tick. - /// - /// Entity ID - /// Velocity X - /// Velocity Y - /// Velocity Z - void OnEntityVelocity(int entityID, double velocityX, double velocityY, double velocityZ); - - /// - /// Called when additional properties have been received for an entity - /// - /// Entity ID - /// Dictionary of properties - void OnEntityProperties(int entityID, Dictionary prop); - - /// - /// Called when the status of an entity have been changed - /// - /// Entity ID - /// Status ID - void OnEntityStatus(int entityID, byte status); - - /// - /// Called when the world age has been updated - /// - /// World age - /// Time of Day - void OnTimeUpdate(long worldAge, long timeOfDay); - - /// - /// When received window properties from server. - /// - /// - /// Inventory ID - /// Property ID - /// Property Value - public void OnWindowProperties(byte inventoryID, short propertyId, short propertyValue); - - /// - /// Called when inventory items have been received - /// - /// Inventory ID - /// Item list - /// State ID - void OnWindowItems(byte inventoryID, Dictionary itemList, int stateId); - - /// - /// Called when a single slot has been updated inside an inventory - /// - /// Window ID - /// Slot ID - /// Item (may be null for empty slot) - /// State ID - void OnSetSlot(byte inventoryID, short slotID, Item? item, int stateId); - - /// - /// Called when player health or hunger changed. - /// - /// - /// - void OnUpdateHealth(float health, int food); - - /// - /// Called when the health of an entity changed - /// - /// Entity ID - /// The health of the entity - void OnEntityHealth(int entityID, float health); - - /// - /// Called when entity metadata or metadata changed. - /// - /// Entity ID - /// Entity metadata - void OnEntityMetadata(int EntityID, Dictionary metadata); - - /// - /// Called when and explosion occurs on the server - /// - /// Explosion location - /// Explosion strength - /// Amount of affected blocks - void OnExplosion(Location location, float strength, int affectedBlocks); - - /// - /// Called when a sound packet is received. - /// - /// Sound key if available, otherwise null - /// Sound location for world sounds, or null if unavailable - /// Sound category id - /// Sound volume - /// Sound pitch - /// Source entity id for entity-sound packets, if any - void OnSoundEffect(string? soundName, Location? location, int category, float volume, float pitch, int? entityID); - - /// - /// Called when a player's game mode has changed - /// - /// Affected player's UUID - /// New game mode - void OnGamemodeUpdate(Guid uuid, int gamemode); - - /// - /// Called when a player's latency has changed - /// - /// Affected player's UUID - /// latency - void OnLatencyUpdate(Guid uuid, int latency); - - /// - /// Called when Experience bar is updated - /// - /// Experience bar level - /// Player Level - /// Total experience - void OnSetExperience(float Experiencebar, int Level, int TotalExperience); - - /// - /// Called when client need to change slot. - /// - /// Used for setting player slot after joining game - /// - void OnHeldItemChange(byte slot); - - /// - /// Called when an update of the map is sent by the server, take a look at https://wiki.vg/Protocol#Map_Data for more info on the fields - /// Map format and colors: https://minecraft.wiki/w/Map_item_format - /// - /// Map ID of the map being modified - /// A scale of the Map, from 0 for a fully zoomed-in map (1 block per pixel) to 4 for a fully zoomed-out map (16 blocks per pixel) - /// Specifies whether player and item frame icons are shown - /// True if the map has been locked in a cartography table - /// A list of MapIcon objects of map icons, send only if trackingPosition is true - /// Numbs of columns that were updated (map width) (NOTE: If it is 0, the next fields are not used/are set to default values of 0 and null respectively) - /// Map height - /// x offset of the westernmost column - /// z offset of the northernmost row - /// a byte array of colors on the map - void OnMapData(int mapid, byte scale, bool trackingPosition, bool locked, List icons, byte columnsUpdated, byte rowsUpdated, byte mapCoulmnX, byte mapRowZ, byte[]? colors); - - /// - /// Called when the Player entity ID has been received from the server - /// - /// Player entity ID - void OnReceivePlayerEntityID(int EntityID); - - /// - /// Called when the Entity use effects - /// - /// entity ID - /// effect id - /// effect amplifier - /// effect duration - /// effect flags - /// has factor data - /// factorCodec - void OnEntityEffect(int entityid, Effects effect, int amplifier, int duration, byte flags, bool hasFactorData, Dictionary? factorCodec); - - /// - /// Called when an entity has an effect removed - /// - /// Entity ID - /// Effect that was removed - void OnRemoveEntityEffect(int entityid, Effects effect); - - /// - /// Get the player's active effects - /// - /// Dictionary of active effects - Dictionary GetPlayerEffects(); - - /// - /// Called when Soreboard Objective - /// - /// objective name - /// 0 to create the scoreboard. 1 to remove the scoreboard. 2 to update the display text. - /// Only if mode is 0 or 2. The text to be displayed for the score - /// Only if mode is 0 or 2. 0 = "integer", 1 = "hearts". - /// Number format: 0 - blank, 1 - styled, 2 - fixed - void OnScoreboardObjective(string objectiveName, byte mode, string objectiveValue, int type, int numberFormat); - - /// - /// Called when DisplayScoreboard - /// - /// The entity whose score this is. For players, this is their username; for other entities, it is their UUID. - /// 0 to create/update an item. 1 to remove an item. - /// The name of the objective the score belongs to - /// The name of the objective the score belongs to, but with chat formatting - /// The score to be displayed next to the entry. Only sent when Action does not equal 1. - /// Number format: 0 - blank, 1 - styled, 2 - fixed - void OnUpdateScore(string entityName, int action, string objectiveName, string objectiveDisplayName, int objectiveValue, int numberFormat); - - /// - /// Called when a Teams packet is received from the server. - /// - /// Internal team name (up to 16 chars) - /// 0=create, 1=remove, 2=update, 3=add players, 4=remove players - /// Display name (formatted). Present when method is 0 or 2. - /// Bit 0=allowFriendlyFire, bit 1=seeFriendlyInvisibles. Present when method is 0 or 2. - /// Nametag visibility rule string. Present when method is 0 or 2. - /// Collision rule string. Present when method is 0 or 2. - /// ChatFormatting color value (-1=none). Present when method is 0 or 2. - /// Member name prefix (formatted). Present when method is 0 or 2. - /// Member name suffix (formatted). Present when method is 0 or 2. - /// Player/entity names. Present when method is 0, 3, or 4. - void OnTeam(string teamName, byte method, string displayName, byte friendlyFlags, - string nameTagVisibility, string collisionRule, int color, - string prefix, string suffix, List players); - - /// - /// Called when the client received the Tab Header and Footer - /// - /// Header - /// Footer - void OnTabListHeaderAndFooter(string header, string footer); - - /// - /// Called when tradeList is received from server - /// - /// Window ID - /// List of trades. - /// The level the villager is. - /// The amount of experience the villager has. - /// True if regular villagers and false if the wandering trader. - /// If the villager can restock his trades at a workstation, True for regular villagers and false for the wandering trader. - void OnTradeList(int windowID, List trades, VillagerInfo villagerInfo); - - /// - /// This method is called when the protocol handler receives "Login Success" packet - /// - /// The player's UUID received from the server - /// The player's username received from the server - /// Tuple - public void OnLoginSuccess(Guid uuid, string userName, Tuple[]? playerProperty); - - /// - /// Used for a wide variety of game events, from weather to bed use to gamemode to demo messages. - /// - /// Event type - /// Depends on Reason - public void OnGameEvent(byte reason, float value); - - /// - /// Called when a block is changed. - /// - /// The location of the block. - /// The block - public void OnBlockChange(Location location, Block block); - - /// - /// Called when block entity update data is received for a loaded block. - /// - /// The block location. - /// The block entity NBT payload. - public void OnBlockEntityData(Location location, Dictionary? nbt); - - /// - /// Called when "AutoComplete" completes. - /// - /// The number of this result. - /// All commands. - public void OnAutoCompleteDone(int transactionId, string[] result); - - public void SetCanSendMessage(bool canSendMessage); - - /// - /// Called when recipe book recipes are added or replaced. - /// - /// Recipe entries to add - /// True to replace the currently tracked recipe book entries - public void OnRecipeBookAdd(RecipeBookRecipeEntry[] recipes, bool replace); - - /// - /// Called when recipe book recipes are removed. - /// - /// Recipe identifiers to remove - public void OnRecipeBookRemove(string[] recipeIds); - - /// - /// Called when achievement/advancement data is received from the server. - /// - /// Achievements that were added or updated - /// IDs of achievements that were removed - /// True if all existing state should be cleared before applying - public void OnAchievementsUpdate(IReadOnlyList added, IReadOnlyList removedIds, bool reset); - - /// - /// Called when the server selects an advancement tab. - /// - /// The tab identifier, or null if no tab is selected - public void OnSelectAdvancementTab(string? tabId); - - /// - /// Send a click container button packet to the server. - /// Used for Enchanting table, Lectern, stone cutter and loom - /// - /// Id of the window being clicked - /// Id of the clicked button - /// True if packet was successfully sent - - bool ClickContainerButton(int windowId, int buttonId); - - /// - /// Send a rename item packet when the anvil inventory is open and there is an item in the first slot - /// - /// New name (max 50 characters) - /// True if packet was successfully sent - - bool SendRenameItem(string itemName); - } -} diff --git a/MinecraftClient/Protocol/JwtPayloadDecode.cs b/MinecraftClient/Protocol/JwtPayloadDecode.cs deleted file mode 100644 index a103a4b83f..0000000000 --- a/MinecraftClient/Protocol/JwtPayloadDecode.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Text; - -namespace MinecraftClient.Protocol -{ - // Thanks to https://stackoverflow.com/questions/60404612/parse-jwt-token-to-get-the-payload-content-only-without-external-library-in-c-sh - public static class JwtPayloadDecode - { - public static string GetPayload(string token) - { - var content = token.Split('.')[1]; - var jsonPayload = Encoding.UTF8.GetString(Decode(content)); - return jsonPayload; - } - - private static byte[] Decode(string input) - { - var output = input; - output = output.Replace('-', '+'); // 62nd char of encoding - output = output.Replace('_', '/'); // 63rd char of encoding - switch (output.Length % 4) // Pad with trailing '='s - { - case 0: break; // No pad chars in this case - case 2: output += "=="; break; // Two pad chars - case 3: output += "="; break; // One pad char - default: throw new System.ArgumentOutOfRangeException(nameof(input), "Illegal base64url string!"); - } - var converted = Convert.FromBase64String(output); // Standard base64 decoder - return converted; - } - } -} diff --git a/MinecraftClient/Protocol/Message/ChatMessage.cs b/MinecraftClient/Protocol/Message/ChatMessage.cs deleted file mode 100644 index 762bab5fb5..0000000000 --- a/MinecraftClient/Protocol/Message/ChatMessage.cs +++ /dev/null @@ -1,77 +0,0 @@ -using System; - -namespace MinecraftClient.Protocol.Message -{ - public class ChatMessage - { - /// - /// In 1.19 and above, isSignedChat = true - /// - public bool isSignedChat; - - public string content; - - public bool isJson, isSenderJson; - - /// - /// 0: chat (chat box), 1: system message (chat box), 2: game info (above hotbar), 3: say command, - /// 4: msg command, 5: team msg command, 6: emote command, 7: tellraw command - /// - public int chatTypeId; - - public Guid senderUUID; - - public bool isSystemChat; - - public string? unsignedContent; - - public string? displayName; - - public string? teamName; - - public DateTime? timestamp; - - public byte[]? signature; - - public bool? isSignatureLegal; - - internal ChatParser.ChatTypeDecoration? chatTypeDecoration; - - public ChatMessage(string content, bool isJson, int chatType, Guid senderUUID, string? unsignedContent, string displayName, string? teamName, long timestamp, byte[]? signature, bool isSignatureLegal) - { - isSignedChat = true; - isSystemChat = false; - this.content = content; - this.isJson = isJson; - chatTypeId = chatType; - this.senderUUID = senderUUID; - this.unsignedContent = unsignedContent; - this.displayName = displayName; - this.teamName = teamName; - this.timestamp = DateTimeOffset.FromUnixTimeMilliseconds(timestamp).DateTime; - this.signature = signature; - this.isSignatureLegal = isSignatureLegal; - } - - public ChatMessage(string content, string? displayName, bool isJson, int chatType, Guid senderUUID, bool isSystemChat = false) - { - isSignedChat = isSystemChat; - this.isSystemChat = isSystemChat; - this.content = content; - this.displayName = displayName; - this.isJson = isJson; - chatTypeId = chatType; - this.senderUUID = senderUUID; - } - - public LastSeenMessageList.AcknowledgedMessage? ToLastSeenMessageEntry() - { - return signature is not null ? new LastSeenMessageList.AcknowledgedMessage(senderUUID, signature, true) : null; - } - - public bool LacksSender() - { - return senderUUID == Guid.Empty; - } - } -} diff --git a/MinecraftClient/Protocol/Message/ChatParser.cs b/MinecraftClient/Protocol/Message/ChatParser.cs deleted file mode 100644 index 269340ce63..0000000000 --- a/MinecraftClient/Protocol/Message/ChatParser.cs +++ /dev/null @@ -1,1456 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.IO.Compression; -using System.Linq; -using System.Net.Http; -using System.Net.Http.Json; -using System.Diagnostics.CodeAnalysis; -using System.Security.Cryptography; -using System.Text; -using System.Text.Json; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using MinecraftClient.Protocol.Handlers; -using Tomlet; -using Tomlet.Models; -using static MinecraftClient.Settings; - -namespace MinecraftClient.Protocol.Message -{ - /// - /// This class parses JSON chat data from MC 1.6+ and returns the appropriate string to be printed. - /// - static class ChatParser - { - public enum MessageType - { - CHAT, - SAY_COMMAND, - MSG_COMMAND_INCOMING, - MSG_COMMAND_OUTGOING, - TEAM_MSG_COMMAND_INCOMING, - TEAM_MSG_COMMAND_OUTGOING, - EMOTE_COMMAND, - RAW_MSG - }; - - public static Dictionary? ChatId2Type; - - internal enum ChatTypeParameter - { - Sender, - Target, - Content - } - - internal sealed record ChatTypeDecoration(string TranslationKey, ChatTypeParameter[] Parameters); - - private static readonly Dictionary ChatId2Decoration = new(); - - internal static void ClearChatTypeDecorations() - { - ChatId2Decoration.Clear(); - } - - // Used to store Chat Types in 1.20.6+ - public static void ReadChatType(int chatId, string chatName, Dictionary? chatTypeData) - { - var chatTypeDictionary = ChatId2Type ?? new Dictionary(); - - chatTypeDictionary[chatId] = chatName switch - { - "minecraft:chat" => MessageType.CHAT, - "minecraft:emote_command" => MessageType.EMOTE_COMMAND, - "minecraft:msg_command_incoming" => MessageType.MSG_COMMAND_INCOMING, - "minecraft:msg_command_outgoing" => MessageType.MSG_COMMAND_OUTGOING, - "minecraft:say_command" => MessageType.SAY_COMMAND, - "minecraft:team_msg_command_incoming" => MessageType.TEAM_MSG_COMMAND_INCOMING, - "minecraft:team_msg_command_outgoing" => MessageType.TEAM_MSG_COMMAND_OUTGOING, - _ => MessageType.CHAT, - }; - - ChatId2Type = chatTypeDictionary; - - if (TryReadChatTypeDecoration(chatTypeData, out var decoration)) - ChatId2Decoration[chatId] = decoration; - else - ChatId2Decoration.Remove(chatId); - } - - public static void ReadChatType(Dictionary registryCodec) - { - // Check if the chat type registry is in the correct format - if (!registryCodec.ContainsKey("minecraft:chat_type")) - { - - // If not, then we force the registry to be in the correct format - if (registryCodec.ContainsKey("chat_type")) - { - - foreach (var key in registryCodec.Keys.ToArray()) - { - // Skip entries with a namespace already - if (key.Contains(':', StringComparison.OrdinalIgnoreCase)) continue; - - // Assume all other entries are in the minecraft namespace - registryCodec["minecraft:" + key] = registryCodec[key]; - registryCodec.Remove(key); - } - } - } - - var chatTypeListNbt = (object[])(((Dictionary)registryCodec["minecraft:chat_type"])["value"]); - foreach (Dictionary chatTypeNbt in chatTypeListNbt) - { - string chatName = (string)chatTypeNbt["name"]; - int chatId = (int)chatTypeNbt["id"]; - var chatTypeData = chatTypeNbt.TryGetValue("element", out var element) - ? element as Dictionary - : null; - ReadChatType(chatId, chatName, chatTypeData); - } - } - - internal static int ReadChatTypeHolder( - DataTypes dataTypes, - Queue packetData, - int protocolVersion, - out ChatTypeDecoration? directDecoration) - { - int encodedId = dataTypes.ReadNextVarInt(packetData); - directDecoration = null; - - if (protocolVersion < Protocol18Handler.MC_1_21_Version) - return encodedId; - - if (encodedId > 0) - return encodedId - 1; - - directDecoration = ReadNetworkChatTypeDecoration(dataTypes, packetData); - _ = ReadNetworkChatTypeDecoration(dataTypes, packetData); // Narration decoration - return -1; - } - - private static ChatTypeDecoration ReadNetworkChatTypeDecoration( - DataTypes dataTypes, - Queue packetData) - { - string translationKey = dataTypes.ReadNextString(packetData); - int parameterCount = dataTypes.ReadNextVarInt(packetData); - var parameters = new ChatTypeParameter[parameterCount]; - - for (int i = 0; i < parameterCount; i++) - parameters[i] = (ChatTypeParameter)dataTypes.ReadNextVarInt(packetData); - - _ = dataTypes.ReadNextNbtTag(packetData); // Style - return new ChatTypeDecoration(translationKey, parameters); - } - - private static bool TryReadChatTypeDecoration( - Dictionary? chatTypeData, - [NotNullWhen(true)] out ChatTypeDecoration? decoration) - { - decoration = null; - if (chatTypeData is null - || !chatTypeData.TryGetValue("chat", out var chat) - || chat is not Dictionary chatDecoration - || !chatDecoration.TryGetValue("translation_key", out var translationKey) - || translationKey is not string translationKeyText - || !chatDecoration.TryGetValue("parameters", out var parameters) - || parameters is not object[] parameterList) - return false; - - var parsedParameters = new ChatTypeParameter[parameterList.Length]; - for (int i = 0; i < parameterList.Length; i++) - { - parsedParameters[i] = parameterList[i] switch - { - "sender" => ChatTypeParameter.Sender, - "target" => ChatTypeParameter.Target, - "content" => ChatTypeParameter.Content, - _ => ChatTypeParameter.Sender - }; - } - - decoration = new ChatTypeDecoration(translationKeyText, parsedParameters); - return true; - } - - /// - /// The main function to convert text from MC 1.6+ JSON to MC 1.5.2 formatted text - /// - /// JSON serialized text - /// Optional container for links from JSON serialized text - /// Returns the translated text - public static string ParseText(string json, List? links = null) - { - return JSONData2String(Json.ParseJson(json), "", links); - } - - public static string ParseText(Dictionary nbt) - { - return NbtToString(nbt); - } - - /// - /// The main function to convert text from MC 1.9+ JSON to MC 1.5.2 formatted text - /// - /// Message received - /// Optional container for links from JSON serialized text - /// Returns the translated text - public static string ParseSignedChat(ChatMessage message, List? links = null) - { - string sender = message.isSenderJson ? ParseText(message.displayName!) : message.displayName!; - string content; - if (Config.Signature.ShowModifiedChat && message.unsignedContent is not null) - { - content = ParseText(message.unsignedContent!); - if (string.IsNullOrEmpty(content)) - content = message.unsignedContent!; - } - else - { - content = message.isJson ? ParseText(message.content) : message.content; - if (string.IsNullOrEmpty(content)) - content = message.content!; - } - - string text; - List usingData = new(); - - ChatTypeDecoration? decoration = message.chatTypeDecoration; - if (decoration is null) - ChatId2Decoration.TryGetValue(message.chatTypeId, out decoration); - - if (decoration is not null) - { - foreach (var parameter in decoration.Parameters) - { - usingData.Add(parameter switch - { - ChatTypeParameter.Sender => sender, - ChatTypeParameter.Target => message.teamName ?? string.Empty, - ChatTypeParameter.Content => content, - _ => string.Empty - }); - } - - return TranslateString(decoration.TranslationKey, usingData); - } - - MessageType chatType; - if (message.chatTypeId == -1) - chatType = MessageType.RAW_MSG; - else if (!ChatId2Type!.TryGetValue(message.chatTypeId, out chatType)) - chatType = MessageType.CHAT; - switch (chatType) - { - case MessageType.CHAT: - usingData.Add(sender); - usingData.Add(content); - text = TranslateString("chat.type.text", usingData); - break; - case MessageType.SAY_COMMAND: - usingData.Add(sender); - usingData.Add(content); - text = TranslateString("chat.type.announcement", usingData); - break; - case MessageType.MSG_COMMAND_INCOMING: - usingData.Add(sender); - usingData.Add(content); - text = TranslateString("commands.message.display.incoming", usingData); - break; - case MessageType.MSG_COMMAND_OUTGOING: - usingData.Add(sender); - usingData.Add(content); - text = TranslateString("commands.message.display.outgoing", usingData); - break; - case MessageType.TEAM_MSG_COMMAND_INCOMING: - usingData.Add(message.teamName!); - usingData.Add(sender); - usingData.Add(content); - text = TranslateString("chat.type.team.text", usingData); - break; - case MessageType.TEAM_MSG_COMMAND_OUTGOING: - usingData.Add(message.teamName!); - usingData.Add(sender); - usingData.Add(content); - text = TranslateString("chat.type.team.sent", usingData); - break; - case MessageType.EMOTE_COMMAND: - usingData.Add(sender); - usingData.Add(content); - text = TranslateString("chat.type.emote", usingData); - break; - case MessageType.RAW_MSG: - text = content; - break; - default: - goto case MessageType.CHAT; - } - - return text; - } - - /// - /// Get the classic color tag corresponding to a color name - /// - /// Color Name - /// Color code - private static string Color2tag(string colorname) - { - string lower = colorname.ToLower(); - - if (lower.Length == 7 && lower[0] == '#' && IsHexColor(lower)) - return "§" + lower; - - return lower switch - { -#pragma warning disable format // @formatter:off - - /* MC 1.7+ Name || MC 1.6 Name || Classic tag */ - "black" => "§0", - "dark_blue" => "§1", - "dark_green" => "§2", - "dark_aqua" or "dark_cyan" => "§3", - "dark_red" => "§4", - "dark_purple" or "dark_magenta" => "§5", - "gold" or "dark_yellow" => "§6", - "gray" => "§7", - "dark_gray" => "§8", - "blue" => "§9", - "green" => "§a", - "aqua" or "cyan" => "§b", - "red" => "§c", - "light_purple" or "magenta" => "§d", - "yellow" => "§e", - "white" => "§f", - _ => "" , - -#pragma warning restore format // @formatter:on - }; - } - - private static bool IsHexColor(string s) - { - for (int i = 1; i < s.Length; i++) - { - char c = s[i]; - if (!((c >= '0' && c <= '9') || (c >= 'a' && c <= 'f'))) - return false; - } - return true; - } - - /// - /// Specify whether translation rules have been loaded - /// - private static bool RulesInitialized = false; - - /// - /// Set of translation rules for formatting text - /// - private static Dictionary TranslationRules = new(); - - private sealed class TranslationLayer(string identifier, Dictionary translations) - { - public string Identifier { get; } = identifier; - public Dictionary Translations { get; } = translations; - } - - private sealed class ResourcePackTranslationCacheEntry - { - public string CacheVersion { get; init; } = string.Empty; - public string Language { get; init; } = string.Empty; - public string SourceUrl { get; init; } = string.Empty; - public string SourceHash { get; init; } = string.Empty; - public Dictionary Translations { get; init; } = []; - } - - private sealed class ForgeModTranslationCacheEntry - { - public string CacheVersion { get; init; } = string.Empty; - public string Language { get; init; } = string.Empty; - public string SourceHash { get; init; } = string.Empty; - public Dictionary> TranslationsByModId { get; init; } = []; - } - - private const long MaxResourcePackDownloadBytes = 256L * 1024 * 1024; - private const int ResourcePackDownloadBufferSize = 81920; - private const string ResourcePackTranslationCacheVersion = "1"; - private const string ForgeModTranslationCacheVersion = "1"; - private const string LocalForgeModTranslationDirectory = "mods"; - - private static readonly List ForgeModTranslationLayers = []; - private static readonly List ResourcePackTranslationLayers = []; - private static readonly HttpClient ResourcePackHttpClient = new(); - - /// - /// Initialize translation rules. - /// Necessary for properly printing some chat messages. - /// - public static void InitTranslations() - { - ForgeModTranslationLayers.Clear(); - ResourcePackTranslationLayers.Clear(); - - if (!RulesInitialized) - { - InitRules(); - RulesInitialized = true; - } - } - - /// - /// Internal rule initialization method. Looks for local rule file or download it from Mojang asset servers. - /// - private static void InitRules() - { - if (Config.Main.Advanced.Language == "en_us") - { - TranslationRules = - JsonSerializer.Deserialize>( - (byte[])MinecraftAssets.ResourceManager.GetObject("en_us.json")!)!; - return; - } - - //Language file in a subfolder, depending on the language setting - if (!Directory.Exists("lang")) - Directory.CreateDirectory("lang"); - - string languageFilePath = "lang" + Path.DirectorySeparatorChar + Config.Main.Advanced.Language + ".json"; - - // Load the external dictionary of translation rules or display an error message - if (File.Exists(languageFilePath)) - { - try - { - TranslationRules = - JsonSerializer.Deserialize>(File.OpenRead(languageFilePath))!; - } - catch (IOException) - { - } - catch (JsonException) - { - } - } - - if (TranslationRules.TryGetValue("Version", out string? version) && - version == Settings.TranslationsFile_Version) - { - if (Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted(Translations.chat_loaded, acceptnewlines: true); - return; - } - - // Try downloading language file from Mojang's servers? - ConsoleIO.WriteLineFormatted( - "§8" + string.Format(Translations.chat_download, Config.Main.Advanced.Language)); - HttpClient httpClient = new(); - try - { - Task fetch_index = httpClient.GetStringAsync(TranslationsFile_Website_Index); - fetch_index.Wait(); - Match match = Regex.Match(fetch_index.Result, - $"minecraft/lang/{Config.Main.Advanced.Language}.json" + @""":\s\{""hash"":\s""([\d\w]{40})"""); - fetch_index.Dispose(); - if (match.Success && match.Groups.Count == 2) - { - string hash = match.Groups[1].Value; - string translation_file_location = TranslationsFile_Website_Download + '/' + hash[..2] + '/' + hash; - if (Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted( - string.Format(Translations.chat_request, translation_file_location)); - - Task?> fetckFileTask = - httpClient.GetFromJsonAsync>(translation_file_location); - fetckFileTask.Wait(); - if (fetckFileTask.Result is not null && fetckFileTask.Result.Count > 0) - { - TranslationRules = fetckFileTask.Result; - TranslationRules["Version"] = TranslationsFile_Version; - File.WriteAllText(languageFilePath, - JsonSerializer.Serialize(TranslationRules, typeof(Dictionary)), - Encoding.UTF8); - - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.chat_done, languageFilePath)); - return; - } - - fetckFileTask.Dispose(); - } - else - { - ConsoleIO.WriteLineFormatted("§8" + Translations.chat_fail, acceptnewlines: true); - } - } - catch (HttpRequestException) - { - ConsoleIO.WriteLineFormatted("§8" + Translations.chat_fail, acceptnewlines: true); - } - catch (IOException) - { - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.chat_save_fail, languageFilePath), - acceptnewlines: true); - } - catch (Exception e) - { - ConsoleIO.WriteLineFormatted("§8" + Translations.chat_fail, acceptnewlines: true); - ConsoleIO.WriteLine(e.Message); - if (Config.Logging.DebugMessages && !string.IsNullOrEmpty(e.StackTrace)) - ConsoleIO.WriteLine(e.StackTrace); - } - finally - { - httpClient.Dispose(); - } - - TranslationRules = - JsonSerializer.Deserialize>( - (byte[])MinecraftAssets.ResourceManager.GetObject("en_us.json")!)!; - ConsoleIO.WriteLine(Translations.chat_use_default); - } - - public static string? TranslateString(string rulename) - { - return TryGetTranslationRule(rulename, out string? result) ? result : null; - } - - public static void LoadResourcePackTranslations(string packIdentifier, string url, string hash) - { - ArgumentException.ThrowIfNullOrEmpty(packIdentifier); - ArgumentException.ThrowIfNullOrEmpty(url); - - if (!Config.Main.Advanced.LoadResourcePackTranslations) - return; - - if (!Uri.TryCreate(url, UriKind.Absolute, out Uri? resourcePackUri) - || resourcePackUri.Scheme is not "http" and not "https") - { - return; - } - - string cacheFilePath = GetResourcePackTranslationCacheFilePath(resourcePackUri, hash); - if (TryLoadCachedResourcePackTranslations(cacheFilePath, resourcePackUri, hash, out Dictionary? cachedTranslations)) - { - ReplaceResourcePackTranslations(packIdentifier, cachedTranslations); - return; - } - - string temporaryFilePath = Path.GetTempFileName(); - try - { - DownloadResourcePack(resourcePackUri, hash, temporaryFilePath); - using FileStream resourcePackFile = File.OpenRead(temporaryFilePath); - Dictionary resourcePackTranslations = ExtractResourcePackTranslations(resourcePackFile); - ReplaceResourcePackTranslations(packIdentifier, resourcePackTranslations); - SaveCachedResourcePackTranslations(cacheFilePath, resourcePackUri, hash, resourcePackTranslations); - } - catch (HttpRequestException) - { - } - catch (IOException) - { - } - catch (InvalidDataException) - { - } - catch (JsonException) - { - } - finally - { - try - { - File.Delete(temporaryFilePath); - } - catch (IOException) - { - } - } - } - - public static void RemoveResourcePackTranslations(string packIdentifier) - { - ResourcePackTranslationLayers.RemoveAll(layer => - layer.Identifier.Equals(packIdentifier, StringComparison.Ordinal)); - } - - public static void ClearResourcePackTranslations() - { - ResourcePackTranslationLayers.Clear(); - } - - public static void LoadForgeModTranslations(IEnumerable modIds) - { - ArgumentNullException.ThrowIfNull(modIds); - - ForgeModTranslationLayers.Clear(); - - if (!Config.Main.Advanced.LoadForgeModTranslations) - return; - - HashSet requestedModIds = new( - modIds - .Where(static modId => !string.IsNullOrWhiteSpace(modId)) - .Select(static modId => NormalizeForgeModId(modId)), - StringComparer.OrdinalIgnoreCase); - - if (requestedModIds.Count == 0) - return; - - Dictionary> translationsByModId = - new(StringComparer.OrdinalIgnoreCase); - - foreach (string modDirectory in GetForgeModTranslationDirectories()) - { - foreach (string modJarPath in Directory.EnumerateFiles(modDirectory, "*.jar")) - { - try - { - MergeForgeModTranslations(modJarPath, requestedModIds, translationsByModId); - } - catch (IOException) - { - } - catch (InvalidDataException) - { - } - catch (JsonException) - { - } - } - } - - foreach (string modId in requestedModIds) - { - if (translationsByModId.TryGetValue(modId, out Dictionary? translations) - && translations.Count > 0) - { - ForgeModTranslationLayers.Add(new TranslationLayer(modId, translations)); - } - } - } - - /// - /// Format text using a specific formatting rule. - /// Example : * %s %s + ["ORelio", "is doing something"] = * ORelio is doing something - /// - /// Name of the rule, chosen by the server - /// Data to be used in the rule - /// Returns the formatted text according to the given data - private static string TranslateString(string rulename, List using_data) - { - if (!RulesInitialized) - { - InitRules(); - RulesInitialized = true; - } - - if (!TryGetTranslationRule(rulename, out string? rule)) - rule = rulename; - - int using_idx = 0; - StringBuilder result = new(); - for (int i = 0; i < rule.Length; i++) - { - if (rule[i] == '%' && i + 1 < rule.Length) - { - //Using string or int with %s or %d - if (rule[i + 1] == 's' || rule[i + 1] == 'd') - { - if (using_data.Count > using_idx) - { - result.Append(using_data[using_idx]); - using_idx++; - i += 1; - continue; - } - } - - //Using specified string or int with %1$s, %2$s... - else if (char.IsDigit(rule[i + 1]) - && i + 3 < rule.Length && rule[i + 2] == '$' - && (rule[i + 3] == 's' || rule[i + 3] == 'd')) - { - int specified_idx = rule[i + 1] - '1'; - if (using_data.Count > specified_idx) - { - result.Append(using_data[specified_idx]); - using_idx++; - i += 3; - continue; - } - } - } - - result.Append(rule[i]); - } - - return result.ToString(); - } - - private static bool TryGetTranslationRule(string rulename, [NotNullWhen(true)] out string? result) - { - for (int i = ResourcePackTranslationLayers.Count - 1; i >= 0; i--) - { - if (ResourcePackTranslationLayers[i].Translations.TryGetValue(rulename, out result)) - return true; - } - - for (int i = ForgeModTranslationLayers.Count - 1; i >= 0; i--) - { - if (ForgeModTranslationLayers[i].Translations.TryGetValue(rulename, out result)) - return true; - } - - return TranslationRules.TryGetValue(rulename, out result); - } - - private static void DownloadResourcePack(Uri resourcePackUri, string hash, string temporaryFilePath) - { - using HttpResponseMessage response = - ResourcePackHttpClient.GetAsync(resourcePackUri, HttpCompletionOption.ResponseHeadersRead).GetAwaiter().GetResult(); - response.EnsureSuccessStatusCode(); - - using Stream resourcePackStream = response.Content.ReadAsStream(); - using FileStream temporaryFile = File.Create(temporaryFilePath); - using IncrementalHash incrementalHash = IncrementalHash.CreateHash(HashAlgorithmName.SHA1); - - byte[] buffer = new byte[ResourcePackDownloadBufferSize]; - long totalBytes = 0; - - while (true) - { - int bytesRead = resourcePackStream.Read(buffer, 0, buffer.Length); - if (bytesRead <= 0) - break; - - totalBytes += bytesRead; - if (totalBytes > MaxResourcePackDownloadBytes) - throw new InvalidDataException(); - - temporaryFile.Write(buffer, 0, bytesRead); - - if (hash.Length == 40) - incrementalHash.AppendData(buffer, 0, bytesRead); - } - - if (hash.Length == 40) - { - string downloadedHash = Convert.ToHexString(incrementalHash.GetHashAndReset()); - if (!downloadedHash.Equals(hash, StringComparison.OrdinalIgnoreCase)) - throw new InvalidDataException($"Resource pack hash mismatch for {resourcePackUri}. Expected {hash}, got {downloadedHash}."); - } - } - - private static Dictionary ExtractResourcePackTranslations(Stream resourcePackStream) - { - var mergedTranslations = new Dictionary(StringComparer.Ordinal); - var selectedLanguageTranslations = new Dictionary(StringComparer.Ordinal); - string selectedLanguage = Config.Main.Advanced.Language; - - using ZipArchive archive = new(resourcePackStream, ZipArchiveMode.Read, leaveOpen: true); - - foreach (ZipArchiveEntry entry in archive.Entries) - { - if (!TryGetResourcePackLanguage(entry.FullName, out string? language)) - continue; - - if (language.Equals("en_us", StringComparison.OrdinalIgnoreCase)) - { - MergeTranslationsFromZipEntry(entry, mergedTranslations); - } - else if (language.Equals(selectedLanguage, StringComparison.OrdinalIgnoreCase)) - { - MergeTranslationsFromZipEntry(entry, selectedLanguageTranslations); - } - } - - foreach (var entry in selectedLanguageTranslations) - mergedTranslations[entry.Key] = entry.Value; - - return mergedTranslations; - } - - private static bool TryGetResourcePackLanguage(string entryPath, [NotNullWhen(true)] out string? language) - { - language = null; - - string[] pathParts = entryPath - .Replace('\\', '/') - .Split('/', StringSplitOptions.RemoveEmptyEntries); - - if (pathParts.Length != 4 - || !pathParts[0].Equals("assets", StringComparison.OrdinalIgnoreCase) - || !pathParts[2].Equals("lang", StringComparison.OrdinalIgnoreCase) - || !pathParts[3].EndsWith(".json", StringComparison.OrdinalIgnoreCase)) - { - return false; - } - - language = Path.GetFileNameWithoutExtension(pathParts[3]); - return !string.IsNullOrEmpty(language); - } - - private static void MergeTranslationsFromZipEntry(ZipArchiveEntry entry, Dictionary translations) - { - using Stream entryStream = entry.Open(); - Dictionary? entryTranslations = - JsonSerializer.Deserialize>(entryStream); - - if (entryTranslations is null) - return; - - foreach (var (key, value) in entryTranslations) - translations[key] = value; - } - - private static void ReplaceResourcePackTranslations(string packIdentifier, Dictionary translations) - { - RemoveResourcePackTranslations(packIdentifier); - - if (translations.Count > 0) - ResourcePackTranslationLayers.Add(new TranslationLayer(packIdentifier, translations)); - } - - private static void MergeForgeModTranslations(string modJarPath, HashSet requestedModIds, - Dictionary> translationsByModId) - { - string sourceHash = ComputeFileSha256(modJarPath); - string cacheFilePath = GetForgeModTranslationCacheFilePath(sourceHash); - if (!TryLoadCachedForgeModTranslations(cacheFilePath, sourceHash, - out Dictionary>? cachedTranslations)) - { - using FileStream modJarStream = File.OpenRead(modJarPath); - cachedTranslations = ExtractForgeModTranslations(modJarStream); - SaveCachedForgeModTranslations(cacheFilePath, sourceHash, cachedTranslations); - } - - Dictionary> archiveTranslations = cachedTranslations - .Where(static entry => entry.Value.Count > 0) - .Where(entry => requestedModIds.Contains(entry.Key)) - .ToDictionary(static entry => entry.Key, static entry => entry.Value, StringComparer.OrdinalIgnoreCase); - - foreach (var (modId, translations) in archiveTranslations) - translationsByModId[modId] = translations; - } - - private static Dictionary> ExtractForgeModTranslations(Stream modJarStream) - { - using ZipArchive archive = new(modJarStream, ZipArchiveMode.Read, leaveOpen: true); - HashSet archiveModIds = GetForgeModIds(archive); - if (archiveModIds.Count == 0) - return new Dictionary>(StringComparer.OrdinalIgnoreCase); - - return ExtractForgeModTranslations(archive, archiveModIds); - } - - private static HashSet GetForgeModIds(ZipArchive archive) - { - ZipArchiveEntry? modsTomlEntry = archive.GetEntry("META-INF/mods.toml") - ?? archive.GetEntry("META-INF/MODS.TOML"); - - if (modsTomlEntry is null) - return []; - - using StreamReader reader = new(modsTomlEntry.Open(), Encoding.UTF8, detectEncodingFromByteOrderMarks: true); - TomlDocument document = new TomlParser().Parse(reader.ReadToEnd()); - if (!document.TryGetValue("mods", out TomlValue? modsValue) || modsValue is not TomlArray modsArray) - return []; - - HashSet modIds = new(StringComparer.OrdinalIgnoreCase); - foreach (TomlValue modValue in modsArray) - { - if (modValue is not TomlTable modTable || !modTable.ContainsKey("modId")) - continue; - - string modId = modTable.GetString("modId"); - if (!string.IsNullOrWhiteSpace(modId)) - modIds.Add(NormalizeForgeModId(modId)); - } - - return modIds; - } - - private static Dictionary> ExtractForgeModTranslations(ZipArchive archive, HashSet requestedModIds) - { - string selectedLanguage = NormalizeLanguageCode(Config.Main.Advanced.Language); - Dictionary> fallbackTranslations = - new(StringComparer.OrdinalIgnoreCase); - Dictionary> selectedTranslations = - new(StringComparer.OrdinalIgnoreCase); - - foreach (ZipArchiveEntry entry in archive.Entries) - { - if (!TryGetForgeModLanguage(entry.FullName, out string? modId, out string? language)) - continue; - - if (!requestedModIds.Contains(modId)) - continue; - - if (language.Equals("en_us", StringComparison.OrdinalIgnoreCase)) - { - if (!fallbackTranslations.TryGetValue(modId, out Dictionary? translations)) - { - translations = new Dictionary(StringComparer.Ordinal); - fallbackTranslations[modId] = translations; - } - - MergeTranslationsFromZipEntry(entry, translations); - } - else if (language.Equals(selectedLanguage, StringComparison.OrdinalIgnoreCase)) - { - if (!selectedTranslations.TryGetValue(modId, out Dictionary? translations)) - { - translations = new Dictionary(StringComparer.Ordinal); - selectedTranslations[modId] = translations; - } - - MergeTranslationsFromZipEntry(entry, translations); - } - } - - Dictionary> mergedTranslations = - new(StringComparer.OrdinalIgnoreCase); - - foreach (string modId in requestedModIds) - { - Dictionary modTranslations = new(StringComparer.Ordinal); - - if (fallbackTranslations.TryGetValue(modId, out Dictionary? fallback)) - { - foreach (var (key, value) in fallback) - modTranslations[key] = value; - } - - if (selectedTranslations.TryGetValue(modId, out Dictionary? selected)) - { - foreach (var (key, value) in selected) - modTranslations[key] = value; - } - - if (modTranslations.Count > 0) - mergedTranslations[modId] = modTranslations; - } - - return mergedTranslations; - } - - private static bool TryGetForgeModLanguage(string entryPath, [NotNullWhen(true)] out string? modId, - [NotNullWhen(true)] out string? language) - { - modId = null; - language = null; - - string[] pathParts = entryPath - .Replace('\\', '/') - .Split('/', StringSplitOptions.RemoveEmptyEntries); - - if (pathParts.Length != 4 - || !pathParts[0].Equals("assets", StringComparison.OrdinalIgnoreCase) - || !pathParts[2].Equals("lang", StringComparison.OrdinalIgnoreCase) - || !pathParts[3].EndsWith(".json", StringComparison.OrdinalIgnoreCase)) - { - return false; - } - - modId = NormalizeForgeModId(pathParts[1]); - language = NormalizeLanguageCode(Path.GetFileNameWithoutExtension(pathParts[3])); - return !string.IsNullOrEmpty(modId) && !string.IsNullOrEmpty(language); - } - - private static string NormalizeForgeModId(string modId) - { - return modId.Trim().ToLowerInvariant(); - } - - private static string NormalizeLanguageCode(string language) - { - return language.Trim().ToLowerInvariant().Replace('-', '_'); - } - - private static IEnumerable GetForgeModTranslationDirectories() - { - string? configuredPath = Config.Main.Advanced.ForgeModTranslationPath?.Trim(); - if (!string.IsNullOrWhiteSpace(configuredPath)) - { - string overridePath = Path.GetFullPath(configuredPath); - if (Directory.Exists(overridePath)) - yield return overridePath; - - yield break; - } - - HashSet yieldedPaths = new(PathComparer); - - foreach (string candidate in GetDefaultForgeModTranslationDirectories()) - { - string fullPath = Path.GetFullPath(candidate); - if (Directory.Exists(fullPath) && yieldedPaths.Add(fullPath)) - yield return fullPath; - } - - if (!Config.Main.Advanced.AutoDiscoverForgeModTranslationSources) - yield break; - - foreach (string candidate in DiscoverLauncherForgeModTranslationDirectories()) - { - string fullPath = Path.GetFullPath(candidate); - if (Directory.Exists(fullPath) && yieldedPaths.Add(fullPath)) - yield return fullPath; - } - } - - private static IEnumerable GetDefaultForgeModTranslationDirectories() - { - yield return LocalForgeModTranslationDirectory; - } - - private static IEnumerable DiscoverLauncherForgeModTranslationDirectories() - { - if (TryGetOfficialMinecraftModsDirectory(out string? officialModsDirectory)) - yield return officialModsDirectory; - - foreach (string prismModsDirectory in EnumerateInstanceModsDirectories(GetPrismLauncherInstancesDirectory())) - yield return prismModsDirectory; - - foreach (string curseForgeModsDirectory in EnumerateInstanceModsDirectories(GetCurseForgeInstancesDirectory(), "mods")) - yield return curseForgeModsDirectory; - } - - private static IEnumerable EnumerateInstanceModsDirectories(string? instancesDirectory, params string[] relativeModsPaths) - { - if (string.IsNullOrWhiteSpace(instancesDirectory) || !Directory.Exists(instancesDirectory)) - yield break; - - string[] instanceDirectories; - try - { - instanceDirectories = Directory.GetDirectories(instancesDirectory); - } - catch (IOException) - { - yield break; - } - catch (UnauthorizedAccessException) - { - yield break; - } - - foreach (string instanceDirectory in instanceDirectories) - { - foreach (string relativeModsPath in relativeModsPaths.Length > 0 - ? relativeModsPaths - : [Path.Combine(".minecraft", "mods"), Path.Combine("minecraft", "mods"), "mods"]) - { - string modsDirectory = Path.Combine(instanceDirectory, relativeModsPath); - if (Directory.Exists(modsDirectory)) - yield return modsDirectory; - } - } - } - - private static bool TryGetOfficialMinecraftModsDirectory([NotNullWhen(true)] out string? modsDirectory) - { - modsDirectory = null; - string? userProfile = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); - if (string.IsNullOrWhiteSpace(userProfile)) - return false; - - string baseMinecraftDirectory = OperatingSystem.IsWindows() - ? Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), ".minecraft") - : Path.Combine(userProfile, ".minecraft"); - - modsDirectory = Path.Combine(baseMinecraftDirectory, "mods"); - return true; - } - - private static string? GetPrismLauncherInstancesDirectory() - { - string? userProfile = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); - if (string.IsNullOrWhiteSpace(userProfile)) - return null; - - if (OperatingSystem.IsWindows()) - return Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "PrismLauncher", "instances"); - - if (OperatingSystem.IsMacOS()) - return Path.Combine(userProfile, "Library", "Application Support", "PrismLauncher", "instances"); - - return Path.Combine(userProfile, ".local", "share", "PrismLauncher", "instances"); - } - - private static string? GetCurseForgeInstancesDirectory() - { - string? userProfile = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile); - if (string.IsNullOrWhiteSpace(userProfile)) - return null; - - return Path.Combine(userProfile, "curseforge", "minecraft", "Instances"); - } - - private static readonly StringComparer PathComparer = - OperatingSystem.IsWindows() ? StringComparer.OrdinalIgnoreCase : StringComparer.Ordinal; - - private static string ComputeFileSha256(string filePath) - { - using FileStream stream = File.OpenRead(filePath); - using SHA256 sha256 = SHA256.Create(); - return Convert.ToHexString(sha256.ComputeHash(stream)).ToLowerInvariant(); - } - - private static bool TryLoadCachedForgeModTranslations(string cacheFilePath, string sourceHash, - [NotNullWhen(true)] out Dictionary>? translationsByModId) - { - translationsByModId = null; - - if (!File.Exists(cacheFilePath)) - return false; - - try - { - using FileStream cacheFile = File.OpenRead(cacheFilePath); - ForgeModTranslationCacheEntry? cacheEntry = - JsonSerializer.Deserialize(cacheFile); - - if (cacheEntry is not null - && cacheEntry.CacheVersion == ForgeModTranslationCacheVersion - && cacheEntry.Language.Equals(Config.Main.Advanced.Language, StringComparison.OrdinalIgnoreCase) - && cacheEntry.SourceHash.Equals(sourceHash, StringComparison.OrdinalIgnoreCase) - && cacheEntry.TranslationsByModId.Count > 0) - { - translationsByModId = cacheEntry.TranslationsByModId.ToDictionary( - static entry => entry.Key, - static entry => new Dictionary(entry.Value, StringComparer.Ordinal), - StringComparer.OrdinalIgnoreCase); - return true; - } - } - catch (IOException) - { - } - catch (JsonException) - { - } - - try - { - File.Delete(cacheFilePath); - } - catch (IOException) - { - } - - return false; - } - - private static void SaveCachedForgeModTranslations(string cacheFilePath, string sourceHash, - Dictionary> translationsByModId) - { - if (translationsByModId.Count == 0) - return; - - string? cacheDirectory = Path.GetDirectoryName(cacheFilePath); - if (string.IsNullOrEmpty(cacheDirectory)) - return; - - Directory.CreateDirectory(cacheDirectory); - - ForgeModTranslationCacheEntry cacheEntry = new() - { - CacheVersion = ForgeModTranslationCacheVersion, - Language = Config.Main.Advanced.Language, - SourceHash = sourceHash, - TranslationsByModId = translationsByModId.ToDictionary( - static entry => entry.Key, - static entry => new Dictionary(entry.Value, StringComparer.Ordinal), - StringComparer.OrdinalIgnoreCase) - }; - - File.WriteAllText(cacheFilePath, JsonSerializer.Serialize(cacheEntry), Encoding.UTF8); - } - - private static string GetForgeModTranslationCacheFilePath(string sourceHash) - { - return Path.Combine("lang", "forgemods", $"{sourceHash}.{NormalizeLanguageCode(Config.Main.Advanced.Language)}.json"); - } - - private static bool TryLoadCachedResourcePackTranslations(string cacheFilePath, Uri resourcePackUri, string hash, - [NotNullWhen(true)] out Dictionary? translations) - { - translations = null; - - if (!File.Exists(cacheFilePath)) - return false; - - try - { - using FileStream cacheFile = File.OpenRead(cacheFilePath); - ResourcePackTranslationCacheEntry? cacheEntry = - JsonSerializer.Deserialize(cacheFile); - - if (cacheEntry is not null - && cacheEntry.CacheVersion == ResourcePackTranslationCacheVersion - && cacheEntry.Language.Equals(Config.Main.Advanced.Language, StringComparison.OrdinalIgnoreCase) - && cacheEntry.SourceUrl.Equals(resourcePackUri.AbsoluteUri, StringComparison.Ordinal) - && cacheEntry.SourceHash.Equals(hash, StringComparison.OrdinalIgnoreCase) - && cacheEntry.Translations.Count > 0) - { - translations = new Dictionary(cacheEntry.Translations, StringComparer.Ordinal); - return true; - } - } - catch (IOException) - { - } - catch (JsonException) - { - } - - try - { - File.Delete(cacheFilePath); - } - catch (IOException) - { - } - - return false; - } - - private static void SaveCachedResourcePackTranslations(string cacheFilePath, Uri resourcePackUri, string hash, - Dictionary translations) - { - if (translations.Count == 0) - return; - - string? cacheDirectory = Path.GetDirectoryName(cacheFilePath); - if (string.IsNullOrEmpty(cacheDirectory)) - return; - - Directory.CreateDirectory(cacheDirectory); - - ResourcePackTranslationCacheEntry cacheEntry = new() - { - CacheVersion = ResourcePackTranslationCacheVersion, - Language = Config.Main.Advanced.Language, - SourceUrl = resourcePackUri.AbsoluteUri, - SourceHash = hash, - Translations = new Dictionary(translations, StringComparer.Ordinal) - }; - - File.WriteAllText(cacheFilePath, JsonSerializer.Serialize(cacheEntry), Encoding.UTF8); - } - - private static string GetResourcePackTranslationCacheFilePath(Uri resourcePackUri, string hash) - { - string cacheKey = GetResourcePackTranslationCacheKey(resourcePackUri, hash); - return Path.Combine("lang", "resourcepacks", $"{cacheKey}.{Config.Main.Advanced.Language}.json"); - } - - private static string GetResourcePackTranslationCacheKey(Uri resourcePackUri, string hash) - { - if (IsValidSha1(hash)) - return hash.ToLowerInvariant(); - - byte[] urlHash = SHA256.HashData(Encoding.UTF8.GetBytes(resourcePackUri.AbsoluteUri)); - return "url-" + Convert.ToHexString(urlHash).ToLowerInvariant(); - } - - private static bool IsValidSha1(string hash) - { - return hash.Length == 40 && hash.All(Uri.IsHexDigit); - } - - /// - /// Mapping from JSON/NBT property names to Minecraft formatting codes (without §). - /// Both "underlined" (canonical Minecraft name) and "underline" (alias) are supported. - /// - private static readonly Dictionary FormattingCodes = new() - { - { "obfuscated", "k" }, - { "bold", "l" }, - { "strikethrough", "m" }, - { "underlined", "n" }, - { "underline", "n" }, - { "italic", "o" }, - }; - - /// Matches a single color code (§0-§9, §a-§f) or a hex color (§#rrggbb). Used to strip color when replacing. - private static readonly Regex ColorCodeRegex = new(@"§(?:[0-9a-f]|#[0-9a-f]{6})", RegexOptions.Compiled); - - /// - /// Use a JSON Object to build the corresponding string - /// - /// JSON object to convert - /// Inherited formatting codes from parent elements (set to "" for function init) - /// Container for links from JSON serialized text - /// returns the Minecraft-formatted string - private static string JSONData2String(System.Text.Json.Nodes.JsonNode? data, string formatting, List? links) - { - string extra_result = ""; - switch (data) - { - case System.Text.Json.Nodes.JsonObject obj: - if (obj.ContainsKey("color")) - { - formatting = ColorCodeRegex.Replace(formatting, ""); - formatting += Color2tag(JSONData2String(obj["color"], "", links)); - } - - foreach (var (key, code) in FormattingCodes) - { - if (obj.ContainsKey(key)) - { - string val = obj[key]!.GetStringValue(); - if (val == "true") - formatting += "§" + code; - else if (val == "false") - formatting = formatting.Replace("§" + code, ""); - } - } - - if (obj.ContainsKey("clickEvent") && links is not null) - { - var clickEvent = obj["clickEvent"]!.AsObject(); - if (clickEvent.ContainsKey("action") - && clickEvent.ContainsKey("value") - && clickEvent["action"]!.GetStringValue() == "open_url" - && !string.IsNullOrEmpty(clickEvent["value"]!.GetStringValue())) - { - links.Add(clickEvent["value"]!.GetStringValue()); - } - } - - if (obj.ContainsKey("extra")) - { - foreach (var item in obj["extra"]!.AsArray()) - extra_result += JSONData2String(item, "§r" + formatting, links); - } - - // Strip any formatting codes that appear before the last §r, since §r resets all - // prior formatting. The greedy .* matches up to the last §r in the string. - formatting = Regex.Replace(formatting, ".*(§r.*)", "$1"); - - if (obj.ContainsKey("text")) - { - // Pass "" to the leaf text node: formatting is already prepended here, - // and the default: case would add it a second time if we passed formatting. - return formatting + JSONData2String(obj["text"], "", links) + extra_result; - } - else if (obj.ContainsKey("translate")) - { - List using_data = new(); - if (obj.ContainsKey("using") && !obj.ContainsKey("with")) - obj["with"] = obj["using"]!.DeepClone(); - if (obj.ContainsKey("with")) - { - foreach (var item in obj["with"]!.AsArray()) - { - using_data.Add(JSONData2String(item, formatting, links)); - } - } - - return formatting + - TranslateString(JSONData2String(obj["translate"], "", links), using_data) + - extra_result; - } - else return extra_result; - - case System.Text.Json.Nodes.JsonArray arr: - string result = ""; - foreach (var item in arr) - { - result += JSONData2String(item, formatting, links); - } - - return result; - - default: - return formatting + data.GetStringValue(); - } - } - - private static string NbtToString(Dictionary nbt, string formatting = "") - { - if (nbt.Count == 1 && nbt.TryGetValue("", out object? rootMessage)) - { - return formatting + (rootMessage?.ToString() ?? string.Empty); - } - - string message = string.Empty; - StringBuilder extraBuilder = new(); - - // Build formatting from color and formatting flags first - if (nbt.TryGetValue("color", out object? color)) - { - formatting = ColorCodeRegex.Replace(formatting, ""); - formatting += Color2tag((string)color); - } - - foreach (var (key, code) in FormattingCodes) - { - if (nbt.TryGetValue(key, out object? flagValue)) - { - bool isActive = flagValue switch - { - byte b => b > 0, - bool b => b, - _ => flagValue?.ToString()?.ToLower() == "true" - }; - if (isActive) - formatting += "§" + code; - else - formatting = formatting.Replace("§" + code, ""); - } - } - - // Process text - if (nbt.TryGetValue("text", out object? textValue)) - message = textValue?.ToString() ?? string.Empty; - - // Process translate - if (nbt.TryGetValue("translate", out object? translate)) - { - var translateKey = (string)translate; - List translateString = new(); - if (nbt.TryGetValue("with", out object? withComponent)) - { - var withs = (object[])withComponent; - for (var i = 0; i < withs.Length; i++) - { - var withDict = withs[i] switch - { - int => new Dictionary { { "text", $"{withs[i]}" } }, - string => new Dictionary { { "text", (string)withs[i] } }, - _ => (Dictionary)withs[i] - }; - translateString.Add(NbtToString(withDict, formatting)); - } - } - message = TranslateString(translateKey, translateString); - } - - // Process extras, each starting with a reset then inheriting the current formatting - if (nbt.TryGetValue("extra", out object? extraValue)) - { - object[] extras = (object[])extraValue; - for (var i = 0; i < extras.Length; i++) - { - var extraDict = extras[i] switch - { - int => new Dictionary { { "text", $"{extras[i]}" } }, - string => new Dictionary { { "text", (string)extras[i] } }, - _ => (Dictionary)extras[i] - }; - extraBuilder.Append(NbtToString(extraDict, "§r" + formatting)); - } - } - - return formatting + message + extraBuilder.ToString(); - } - } -} diff --git a/MinecraftClient/Protocol/Message/LastSeenMessageList.cs b/MinecraftClient/Protocol/Message/LastSeenMessageList.cs deleted file mode 100644 index f66038454c..0000000000 --- a/MinecraftClient/Protocol/Message/LastSeenMessageList.cs +++ /dev/null @@ -1,157 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using static MinecraftClient.Protocol.Message.LastSeenMessageList; - -namespace MinecraftClient.Protocol.Message -{ - /// - /// A list of messages a client has seen. - /// - public class LastSeenMessageList(AcknowledgedMessage[] list) - { - public static readonly LastSeenMessageList EMPTY = new(Array.Empty()); - public static readonly int MAX_ENTRIES = 5; - - public AcknowledgedMessage[] entries = list; - - public void WriteForSign(List data) - { - foreach (AcknowledgedMessage entry in entries) - { - data.Add(70); - data.AddRange(entry.profileId.ToBigEndianBytes()); - data.AddRange(entry.signature); - } - } - - /// - /// A pair of a player's UUID and the signature of the last message they saw, used as an entry of LastSeenMessageList. - /// - public record AcknowledgedMessage - { - public bool pending; - public Guid profileId; - public byte[] signature; - - public AcknowledgedMessage(Guid profileId, byte[] lastSignature, bool pending) - { - this.profileId = profileId; - this.signature = lastSignature; - this.pending = pending; - } - - public AcknowledgedMessage UnmarkAsPending() - { - return this.pending ? new AcknowledgedMessage(profileId, signature, false) : this; - } - } - - /// - /// A record of messages acknowledged by a client. - /// This holds the messages the client has recently seen, as well as the last message they received, if any. - /// - public class Acknowledgment(LastSeenMessageList lastSeenMessageList, AcknowledgedMessage? lastReceivedMessage) - { - public LastSeenMessageList lastSeen = lastSeenMessageList; - public AcknowledgedMessage? lastReceived = lastReceivedMessage; - } - } - - /// - /// Collects the message that are last seen by a client. - /// The message, along with the "last received" message, forms an "acknowledgment" of received messages. - /// They are sent to the server when the client has enough messages received or when they send a message. - /// The maximum amount of message entries are specified in the constructor.The vanilla clients collect 5 entries. - /// Calling add adds the message to the beginning of the entries list, and evicts the oldest message. - /// If there are entries with the same sender profile ID, the older entry will be replaced with null instead of filling the hole. - /// - public class LastSeenMessagesCollector - { - private readonly LastSeenMessageList.AcknowledgedMessage?[] acknowledgedMessages; - private int nextIndex = 0; - internal int messageCount { private set; get; } = 0; - private LastSeenMessageList.AcknowledgedMessage? lastEntry = null; - private LastSeenMessageList lastSeenMessages; - - public LastSeenMessagesCollector(int size) - { - lastSeenMessages = LastSeenMessageList.EMPTY; - acknowledgedMessages = new LastSeenMessageList.AcknowledgedMessage[size]; - } - - public void Add_1_19_2(LastSeenMessageList.AcknowledgedMessage entry) - { - LastSeenMessageList.AcknowledgedMessage? lastEntry = entry; - - for (int i = 0; i < messageCount; ++i) - { - LastSeenMessageList.AcknowledgedMessage curEntry = acknowledgedMessages[i]!; - acknowledgedMessages[i] = lastEntry; - lastEntry = curEntry; - if (curEntry.profileId == entry.profileId) - { - lastEntry = null; - break; - } - } - - if (lastEntry is not null && messageCount < acknowledgedMessages.Length) - acknowledgedMessages[messageCount++] = lastEntry; - - LastSeenMessageList.AcknowledgedMessage[] msgList = new LastSeenMessageList.AcknowledgedMessage[messageCount]; - for (int i = 0; i < messageCount; ++i) - msgList[i] = acknowledgedMessages[i]!; - lastSeenMessages = new LastSeenMessageList(msgList); - } - - public bool Add_1_19_3(LastSeenMessageList.AcknowledgedMessage entry, bool displayed) - { - // net.minecraft.network.message.LastSeenMessagesCollector#add(net.minecraft.network.message.MessageSignatureData, boolean) - // net.minecraft.network.message.LastSeenMessagesCollector#add(net.minecraft.network.message.AcknowledgedMessage) - if (lastEntry is not null && entry.signature.SequenceEqual(lastEntry.signature)) - return false; - lastEntry = entry; - - int index = nextIndex; - nextIndex = (index + 1) % acknowledgedMessages.Length; - - ++messageCount; - acknowledgedMessages[index] = displayed ? entry : null; - - return true; - } - - public Tuple Collect_1_19_3() - { - // net.minecraft.network.message.LastSeenMessagesCollector#collect - int count = ResetMessageCount(); - byte[] bitset = new byte[3]; // new Bitset(20); Todo: Use a complete bitset implementation. - List objectList = new(acknowledgedMessages.Length); - for (int j = 0; j < acknowledgedMessages.Length; ++j) - { - int k = (nextIndex + j) % acknowledgedMessages.Length; - AcknowledgedMessage? acknowledgedMessage = acknowledgedMessages[k]; - if (acknowledgedMessage is null) - continue; - bitset[j / 8] |= (byte)(1 << (j % 8)); // bitSet.set(j, true); - objectList.Add(acknowledgedMessage); - acknowledgedMessages[k] = acknowledgedMessage.UnmarkAsPending(); - } - return new(objectList.ToArray(), bitset, count); - } - - public LastSeenMessageList GetLastSeenMessages() - { - return lastSeenMessages; - } - - public int ResetMessageCount() - { - // net.minecraft.network.message.LastSeenMessagesCollector#resetMessageCount - int cnt = messageCount; - messageCount = 0; - return cnt; - } - } -} diff --git a/MinecraftClient/Protocol/MicrosoftAuthentication.cs b/MinecraftClient/Protocol/MicrosoftAuthentication.cs deleted file mode 100644 index e91806bae5..0000000000 --- a/MinecraftClient/Protocol/MicrosoftAuthentication.cs +++ /dev/null @@ -1,487 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.Specialized; -using System.Diagnostics; -using System.Globalization; -using System.Linq; -using System.Runtime.InteropServices; -using System.Threading; - -namespace MinecraftClient.Protocol -{ - static class Microsoft - { - private static readonly string clientId = "54473e32-df8f-42e9-a649-9419b0dab9d3"; - private static readonly string signinUrl = string.Format("https://login.microsoftonline.com/consumers/oauth2/v2.0/authorize?client_id={0}&response_type=code&redirect_uri=https%3A%2F%2Fmccteam.github.io%2Fredirect.html&scope=XboxLive.signin%20offline_access%20openid%20email&prompt=select_account&response_mode=fragment", clientId); - private static readonly string tokenUrl = "https://login.microsoftonline.com/consumers/oauth2/v2.0/token"; - private static readonly string deviceCodeUrl = "https://login.microsoftonline.com/consumers/oauth2/v2.0/devicecode"; - - public static string SignInUrl { get { return signinUrl; } } - - /// - /// Get a sign-in URL with email field pre-filled - /// - /// Login Email - /// Sign-in URL with email pre-filled - public static string GetSignInUrlWithHint(string loginHint) - { - return SignInUrl + "&login_hint=" + Uri.EscapeDataString(loginHint); - } - - /// - /// Request access token by auth code - /// - /// Auth code obtained after user signing in - /// Access token and refresh token - public static LoginResponse RequestAccessToken(string code) - { - string postData = "client_id={0}&grant_type=authorization_code&redirect_uri=https%3A%2F%2Fmccteam.github.io%2Fredirect.html&code={1}"; - postData = string.Format(postData, clientId, code); - return RequestToken(postData); - } - - /// - /// Request access token by refresh token - /// - /// Refresh token - /// Access token and new refresh token - public static LoginResponse RefreshAccessToken(string refreshToken) - { - string postData = "client_id={0}&grant_type=refresh_token&redirect_uri=https%3A%2F%2Fmccteam.github.io%2Fredirect.html&refresh_token={1}"; - postData = string.Format(postData, clientId, refreshToken); - return RequestToken(postData); - } - - /// - /// Initiate the OAuth 2.0 device code flow. - /// Returns a device code response containing the user code and verification URI. - /// - /// Device code response for user to complete authentication - public static DeviceCodeResponse RequestDeviceCode() - { - string postData = string.Format("client_id={0}&scope=XboxLive.signin%20offline_access%20openid%20email", clientId); - - var request = new ProxiedWebRequest(deviceCodeUrl) - { - UserAgent = "MCC/" + Program.Version - }; - var response = request.Post("application/x-www-form-urlencoded", postData); - var jsonData = Json.ParseJson(response.Body); - - if (jsonData?["error"] is not null) - { - throw new Exception(jsonData["error_description"]!.GetStringValue()); - } - - return new DeviceCodeResponse() - { - DeviceCode = jsonData!["device_code"]!.GetStringValue(), - UserCode = jsonData["user_code"]!.GetStringValue(), - VerificationUri = jsonData["verification_uri"]!.GetStringValue(), - ExpiresIn = int.Parse(jsonData["expires_in"]!.GetStringValue(), NumberStyles.Any, CultureInfo.CurrentCulture), - Interval = int.Parse(jsonData["interval"]!.GetStringValue(), NumberStyles.Any, CultureInfo.CurrentCulture), - Message = jsonData["message"]!.GetStringValue() - }; - } - - /// - /// Poll the token endpoint until the user completes device code authentication. - /// Handles authorization_pending, slow_down, and expiration. - /// - /// Device code from - /// Expiration time in seconds - /// Polling interval in seconds - /// Login response with access token and refresh token - public static LoginResponse PollDeviceCodeToken(string deviceCode, int expiresIn, int interval) - { - // Per OAuth 2.0 device code spec, server may respond with "slow_down" requiring - // the client to increase its polling interval by this amount - const int SlowDownIncrementSeconds = 5; - - string postData = string.Format( - "client_id={0}&grant_type=urn:ietf:params:oauth:grant-type:device_code&device_code={1}", - clientId, deviceCode); - - var stopwatch = Stopwatch.StartNew(); - int pollInterval = interval; - - while (stopwatch.Elapsed.TotalSeconds < expiresIn) - { - Thread.Sleep(pollInterval * 1000); - - var request = new ProxiedWebRequest(tokenUrl) - { - UserAgent = "MCC/" + Program.Version - }; - var response = request.Post("application/x-www-form-urlencoded", postData); - var jsonData = Json.ParseJson(response.Body); - - if (jsonData?["error"] is not null) - { - string error = jsonData["error"]!.GetStringValue(); - - if (error == "authorization_pending") - { - // User hasn't completed auth yet, keep polling - continue; - } - else if (error == "slow_down") - { - // Server asked us to slow down - pollInterval += SlowDownIncrementSeconds; - continue; - } - else if (error == "expired_token") - { - throw new Exception("Device code expired. Please try again."); - } - else if (error == "authorization_declined") - { - throw new Exception("Authorization was declined by the user."); - } - else - { - throw new Exception(jsonData["error_description"]!.GetStringValue()); - } - } - - // Success - parse the token response - string accessToken = jsonData!["access_token"]!.GetStringValue(); - string refreshToken = jsonData["refresh_token"]!.GetStringValue(); - int tokenExpiresIn = int.Parse(jsonData["expires_in"]!.GetStringValue(), NumberStyles.Any, CultureInfo.CurrentCulture); - - // Extract email from JWT id_token - string payload = JwtPayloadDecode.GetPayload(jsonData["id_token"]!.GetStringValue()); - var jsonPayload = Json.ParseJson(payload); - string email = jsonPayload?["email"]?.GetStringValue() ?? string.Empty; - - return new LoginResponse() - { - Email = email, - AccessToken = accessToken, - RefreshToken = refreshToken, - ExpiresIn = tokenExpiresIn - }; - } - - throw new Exception("Device code authentication timed out."); - } - - /// - /// Perform request to obtain access token by code or by refresh token - /// - /// Complete POST data for the request - /// - private static LoginResponse RequestToken(string postData) - { - var request = new ProxiedWebRequest(tokenUrl) - { - UserAgent = "MCC/" + Program.Version - }; - var response = request.Post("application/x-www-form-urlencoded", postData); - var jsonData = Json.ParseJson(response.Body); - - // Error handling - if (jsonData?["error"] is not null) - { - throw new Exception(jsonData["error_description"]!.GetStringValue()); - } - else - { - string accessToken = jsonData!["access_token"]!.GetStringValue(); - string refreshToken = jsonData["refresh_token"]!.GetStringValue(); - int expiresIn = int.Parse(jsonData["expires_in"]!.GetStringValue(), NumberStyles.Any, CultureInfo.CurrentCulture); - - // Extract email from JWT - string payload = JwtPayloadDecode.GetPayload(jsonData["id_token"]!.GetStringValue()); - var jsonPayload = Json.ParseJson(payload); - string email = jsonPayload?["email"]?.GetStringValue() ?? string.Empty; - return new LoginResponse() - { - Email = email, - AccessToken = accessToken, - RefreshToken = refreshToken, - ExpiresIn = expiresIn - }; - } - } - - public static void OpenBrowser(string link) - { - try - { - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - var ps = new ProcessStartInfo(link) - { - UseShellExecute = true, - Verb = "open" - }; - - Process.Start(ps); - } - else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - { - Process.Start("xdg-open", link); - } - else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - { - Process.Start("open", link); - } - else - { - ConsoleIO.WriteLine("Platform not supported, open up the link manually: " + link); - } - } - catch (Exception e) - { - ConsoleIO.WriteLine("Cannot open browser\n" + e.Message + "\n" + e.StackTrace); - } - } - - public struct LoginResponse - { - public string Email; - public string AccessToken; - public string RefreshToken; - public int ExpiresIn; - } - - public struct DeviceCodeResponse - { - public string DeviceCode; - public string UserCode; - public string VerificationUri; - public int ExpiresIn; - public int Interval; - public string Message; - } - } - - static class XboxLive - { - private static readonly string xbl = "https://user.auth.xboxlive.com/user/authenticate"; - private static readonly string xsts = "https://xsts.auth.xboxlive.com/xsts/authorize"; - - private static readonly string userAgent = "Mozilla/5.0 (XboxReplay; XboxLiveAuth/3.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36"; - - /// - /// Xbox Live Authenticate - /// - /// - /// - public static XblAuthenticateResponse XblAuthenticate(Microsoft.LoginResponse loginResponse) - { - var request = new ProxiedWebRequest(xbl) - { - UserAgent = userAgent, - Accept = "application/json" - }; - request.Headers.Add("x-xbl-contract-version", "0"); - - // OAuth tokens from our own client ID require "d=" prefix for XBL authentication - var accessToken = "d=" + loginResponse.AccessToken; - - string payload = "{" - + "\"Properties\": {" - + "\"AuthMethod\": \"RPS\"," - + "\"SiteName\": \"user.auth.xboxlive.com\"," - + "\"RpsTicket\": \"" + accessToken + "\"" - + "}," - + "\"RelyingParty\": \"http://auth.xboxlive.com\"," - + "\"TokenType\": \"JWT\"" - + "}"; - var response = request.Post("application/json", payload); - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLine(response.ToString()); - } - if (response.StatusCode == 200) - { - string jsonString = response.Body; - var json = Json.ParseJson(jsonString); - string token = json!["Token"]!.GetStringValue(); - string userHash = json["DisplayClaims"]!["xui"]![0]!["uhs"]!.GetStringValue(); - return new XblAuthenticateResponse() - { - Token = token, - UserHash = userHash - }; - } - else - { - throw new Exception("XBL Authentication failed"); - } - } - - /// - /// XSTS Authenticate - /// - /// Xbox Secure Token Service - exchanges XBL token for a service-specific XSTS token - /// - /// - public static XSTSAuthenticateResponse XSTSAuthenticate(XblAuthenticateResponse xblResponse) - { - var request = new ProxiedWebRequest(xsts) - { - UserAgent = userAgent, - Accept = "application/json" - }; - request.Headers.Add("x-xbl-contract-version", "1"); - - string payload = "{" - + "\"Properties\": {" - + "\"SandboxId\": \"RETAIL\"," - + "\"UserTokens\": [" - + "\"" + xblResponse.Token + "\"" - + "]" - + "}," - + "\"RelyingParty\": \"rp://api.minecraftservices.com/\"," - + "\"TokenType\": \"JWT\"" - + "}"; - var response = request.Post("application/json", payload); - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLine(response.ToString()); - } - if (response.StatusCode == 200) - { - string jsonString = response.Body; - var json = Json.ParseJson(jsonString); - string token = json!["Token"]!.GetStringValue(); - string userHash = json["DisplayClaims"]!["xui"]![0]!["uhs"]!.GetStringValue(); - return new XSTSAuthenticateResponse() - { - Token = token, - UserHash = userHash - }; - } - else - { - if (response.StatusCode == 401) - { - var json = Json.ParseJson(response.Body); - if (json!["XErr"]!.GetStringValue() == "2148916233") - { - throw new Exception("The account doesn't have an Xbox account"); - } - else if (json["XErr"]!.GetStringValue() == "2148916238") - { - throw new Exception("The account is a child (under 18) and cannot proceed unless the account is added to a Family by an adult"); - } - else throw new Exception("Unknown XSTS error code: " + json["XErr"]!.GetStringValue()); - } - else - { - throw new Exception("XSTS Authentication failed"); - } - } - } - - public struct XblAuthenticateResponse - { - public string Token; - public string UserHash; - } - - public struct XSTSAuthenticateResponse - { - public string Token; - public string UserHash; - } - } - - static class MinecraftWithXbox - { - private static readonly string loginWithXbox = "https://api.minecraftservices.com/authentication/login_with_xbox"; - private static readonly string ownership = "https://api.minecraftservices.com/entitlements/mcstore"; - private static readonly string profile = "https://api.minecraftservices.com/minecraft/profile"; - - /// - /// Login to Minecraft using the XSTS token and user hash obtained before - /// - /// - /// - /// - public static string LoginWithXbox(string userHash, string xstsToken) - { - var request = new ProxiedWebRequest(loginWithXbox) - { - Accept = "application/json" - }; - - string payload = "{\"identityToken\": \"XBL3.0 x=" + userHash + ";" + xstsToken + "\"}"; - var response = request.Post("application/json", payload); - - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLine(response.ToString()); - } - - string jsonString = response.Body; - var json = Json.ParseJson(jsonString); - - return json!["access_token"]!.GetStringValue(); - } - - /// - /// Check if user own Minecraft by access token - /// - /// - /// True if the user own the game - public static bool UserHasGame(string accessToken) - { - var request = new ProxiedWebRequest(ownership); - request.Headers.Add("Authorization", string.Format("Bearer {0}", accessToken)); - var response = request.Get(); - - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLine(response.ToString()); - } - - string jsonString = response.Body; - var json = Json.ParseJson(jsonString); - return json!["items"]!.AsArray().Count > 0; - } - - public static UserProfile GetUserProfile(string accessToken) - { - var request = new ProxiedWebRequest(profile); - request.Headers.Add("Authorization", string.Format("Bearer {0}", accessToken)); - var response = request.Get(); - - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLine(response.ToString()); - } - - string jsonString = response.Body; - var json = Json.ParseJson(jsonString); - return new UserProfile() - { - UUID = json!["id"]!.GetStringValue(), - UserName = json["name"]!.GetStringValue() - }; - } - - public struct UserProfile - { - public string UUID; - public string UserName; - } - } - - /// - /// Helper class - /// - static class Request - { - static public Dictionary ParseQueryString(string query) - { - return query.Split('&') - .ToDictionary(c => c.Split('=')[0], - c => Uri.UnescapeDataString(c.Split('=')[1])); - } - } -} diff --git a/MinecraftClient/Protocol/MojangAPI.cs b/MinecraftClient/Protocol/MojangAPI.cs deleted file mode 100644 index b05e6a7144..0000000000 --- a/MinecraftClient/Protocol/MojangAPI.cs +++ /dev/null @@ -1,287 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Net.Http; -using System.Threading.Tasks; - -/// !!! ATTENTION !!! -/// By using these functions you agree to the ToS of the Mojang API. -/// You should note that all public APIs are rate limited so you are expected to cache the results. -/// This is currently set at 600 requests per 10 minutes but this may change. -/// Source: https://wiki.vg/Mojang_API -/// !!! ATTENTION !!! - -namespace MinecraftClient.Protocol -{ - // Enum to display the status of different services - public enum ServiceStatus { red, yellow, green }; - - /// - /// Information about a players Skin. - /// Empty string if not available. - /// - public record SkinInfo(string SkinUrl = "", string CapeUrl = "", string SkinModel = ""); - - /// - /// Status of the single Mojang services - /// - public class MojangServiceStatus - { - public readonly ServiceStatus MinecraftNet; - public readonly ServiceStatus SessionMinecraftNet; - public readonly ServiceStatus AccountMojangCom; - public readonly ServiceStatus AuthserverMojangCom; - public readonly ServiceStatus SessionserverMojangCom; - public readonly ServiceStatus ApiMojangCom; - public readonly ServiceStatus TexturesMinecraftNet; - public readonly ServiceStatus MojangCom; - - public MojangServiceStatus(ServiceStatus minecraftNet = ServiceStatus.red, - ServiceStatus sessionMinecraftNet = ServiceStatus.red, - ServiceStatus accountMojangCom = ServiceStatus.red, - ServiceStatus authserverMojangCom = ServiceStatus.red, - ServiceStatus sessionserverMojangCom = ServiceStatus.red, - ServiceStatus apiMojangCom = ServiceStatus.red, - ServiceStatus texturesMinecraftNet = ServiceStatus.red, - ServiceStatus mojangCom = ServiceStatus.red) - { - MinecraftNet = minecraftNet; - SessionMinecraftNet = sessionMinecraftNet; - AccountMojangCom = accountMojangCom; - AuthserverMojangCom = authserverMojangCom; - SessionserverMojangCom = sessionserverMojangCom; - ApiMojangCom = apiMojangCom; - TexturesMinecraftNet = texturesMinecraftNet; - MojangCom = mojangCom; - } - } - - /// - /// Provides methods to easily interact with the Mojang API. - /// - public static class MojangAPI - { - // Initialize webclient for all functions - private static readonly HttpClient httpClient = new(); - - // Can be removed in newer C# versions. - // Replace with DateTimeOffset.FromUnixTimeMilliseconds() - /// - /// Converts a Unix time to a normal Datetime - /// - /// A unix timestamp as double - /// Datetime of unix timestamp - private static DateTime UnixTimeStampToDateTime(double unixTimeStamp) - { - // Unix timestamp is seconds past epoch - DateTime dateTime = new(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); - dateTime = dateTime.AddMilliseconds(unixTimeStamp).ToLocalTime(); - return dateTime; - } - // Can be removed in newer C# versions. - - /// - /// Converts a string to a ServiceStatus enum. - /// - /// string to convert - /// ServiceStatus enum, red as default. - private static ServiceStatus StringToServiceStatus(string s) - { - - if (Enum.TryParse(s, out ServiceStatus servStat)) - { - return servStat; - } - else - { - // return red as standard value. - return ServiceStatus.red; - } - } - - /// - /// Obtain the UUID of a Player through its name - /// - /// Playername - /// UUID as string - public static string NameToUuid(string name) - { - try - { - Task fetchTask = httpClient.GetStringAsync("https://api.mojang.com/users/profiles/minecraft/" + name); - fetchTask.Wait(); - string result = Json.ParseJson(fetchTask.Result)!["id"]!.GetStringValue(); - fetchTask.Dispose(); - return result; - } - catch (Exception) { return string.Empty; } - } - - /// - /// Obtain the Name of a player through its UUID - /// - /// UUID of a player - /// Players UUID - public static string UuidToCurrentName(string uuid) - { - // Perform web request - try - { - Task fetchTask = httpClient.GetStringAsync("https://api.mojang.com/user/profiles/" + uuid + "/names"); - fetchTask.Wait(); - var nameChanges = Json.ParseJson(fetchTask.Result)!.AsArray(); - fetchTask.Dispose(); - - // Names are sorted from past to most recent. We need to get the last name in the list - return nameChanges[^1]!["name"]!.GetStringValue(); - } - catch (Exception) { return string.Empty; } - } - - /// - /// Get the name history from a UUID - /// - /// UUID of a player - /// Name history, as a dictionary - public static Dictionary UuidToNameHistory(string uuid) - { - Dictionary tempDict = new(); - System.Text.Json.Nodes.JsonArray jsonDataList; - - // Perform web request - try - { - Task fetchTask = httpClient.GetStringAsync("https://api.mojang.com/user/profiles/" + uuid + "/names"); - fetchTask.Wait(); - jsonDataList = Json.ParseJson(fetchTask.Result)!.AsArray(); - fetchTask.Dispose(); - } - catch (Exception) { return tempDict; } - - foreach (var jsonData in jsonDataList) - { - var obj = jsonData!.AsObject(); - if (obj.Count > 1) - { - DateTimeOffset creationDate = UnixTimeStampToDateTime(Convert.ToDouble(jsonData["changedToAt"].GetStringValue())); - - tempDict.Add(jsonData["name"]!.GetStringValue(), creationDate.DateTime); - } - // The first entry does not contain a change date. - else if (obj.Count > 0) - { - // Add an undefined time to it. - tempDict.Add(jsonData["name"]!.GetStringValue(), new DateTime()); - } - } - - return tempDict; - } - - /// - /// Get the Mojang API status - /// - /// Dictionary of the Mojang services - public static MojangServiceStatus GetMojangServiceStatus() - { - System.Text.Json.Nodes.JsonArray jsonDataList; - - // Perform web request - try - { - Task fetchTask = httpClient.GetStringAsync("https://status.mojang.com/check"); - fetchTask.Wait(); - jsonDataList = Json.ParseJson(fetchTask.Result)!.AsArray(); - fetchTask.Dispose(); - } - catch (Exception) - { - return new MojangServiceStatus(); - } - - // Convert string to enum values and store them inside a MojangeServiceStatus object. - return new MojangServiceStatus(minecraftNet: StringToServiceStatus(jsonDataList[0]!["minecraft.net"]!.GetStringValue()), - sessionMinecraftNet: StringToServiceStatus(jsonDataList[1]!["session.minecraft.net"]!.GetStringValue()), - accountMojangCom: StringToServiceStatus(jsonDataList[2]!["account.mojang.com"]!.GetStringValue()), - authserverMojangCom: StringToServiceStatus(jsonDataList[3]!["authserver.mojang.com"]!.GetStringValue()), - sessionserverMojangCom: StringToServiceStatus(jsonDataList[4]!["sessionserver.mojang.com"]!.GetStringValue()), - apiMojangCom: StringToServiceStatus(jsonDataList[5]!["api.mojang.com"]!.GetStringValue()), - texturesMinecraftNet: StringToServiceStatus(jsonDataList[6]!["textures.minecraft.net"]!.GetStringValue()), - mojangCom: StringToServiceStatus(jsonDataList[7]!["mojang.com"]!.GetStringValue()) - ); - } - - /// - /// Obtain links to skin, skinmodel and cape of a player. - /// - /// UUID of a player - /// Dictionary with a link to the skin and cape of a player. - public static SkinInfo GetSkinInfo(string uuid) - { - System.Text.Json.Nodes.JsonObject textureObj; - string base64SkinInfo; - System.Text.Json.Nodes.JsonNode? decodedJsonSkinInfo; - - // Perform web request - try - { - Task fetchTask = httpClient.GetStringAsync("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid); - fetchTask.Wait(); - // Obtain the Base64 encoded skin information from the API. Discard the rest, since it can be obtained easier through other requests. - base64SkinInfo = Json.ParseJson(fetchTask.Result)!["properties"]![0]!["value"]!.GetStringValue(); - fetchTask.Dispose(); - } - catch (Exception) { return new SkinInfo(); } - - // Parse the decoded string to the JSON format. - decodedJsonSkinInfo = Json.ParseJson(System.Text.Encoding.UTF8.GetString(Convert.FromBase64String(base64SkinInfo))); - - // Assert temporary variable for readablity. - // Contains skin and cape information. - textureObj = decodedJsonSkinInfo!["textures"]!.AsObject(); - - // Can apparently be missing, if no custom skin is set. - if (textureObj.ContainsKey("SKIN")) - { - return new SkinInfo(SkinUrl: textureObj["SKIN"]!["url"] is not null ? textureObj["SKIN"]!["url"]!.GetStringValue() : string.Empty, - CapeUrl: textureObj.ContainsKey("CAPE") ? textureObj["CAPE"]!["url"]!.GetStringValue() : string.Empty, - SkinModel: textureObj["SKIN"]!["metadata"] is not null ? "Alex" : "Steve"); - } - else - { - return new SkinInfo(CapeUrl: textureObj.ContainsKey("CAPE") ? textureObj["CAPE"]!["url"]!.GetStringValue() : string.Empty, - SkinModel: DefaultModelAlex(uuid) ? "Alex" : "Steve"); - } - } - - /// - /// Gets the playermodel that is assigned to the account by default. - /// (Before the skin is changed for the first time.) - /// - /// UUID of a Player - /// True if the default model for this UUID is Alex - public static bool DefaultModelAlex(string uuid) - { - return HashCode(uuid) % 2 == 1; - } - - /// - /// Creates the hash of an UUID - /// - /// UUID of a player. - /// - private static int HashCode(string hash) - { - byte[] data = GuidExtensions.ToLittleEndian(new Guid(hash)).ToByteArray(); - - ulong msb = 0; - ulong lsb = 0; - for (int i = 0; i < 8; i++) - msb = (msb << 8) | (uint)(data[i] & 0xff); - for (int i = 8; i < 16; i++) - lsb = (lsb << 8) | (uint)(data[i] & 0xff); - var hilo = msb ^ lsb; - - return ((int)(hilo >> 32)) ^ (int)hilo; - } - } -} diff --git a/MinecraftClient/Protocol/PlayerInfo.cs b/MinecraftClient/Protocol/PlayerInfo.cs deleted file mode 100644 index c0e211d6ef..0000000000 --- a/MinecraftClient/Protocol/PlayerInfo.cs +++ /dev/null @@ -1,225 +0,0 @@ -using System; -using System.Linq; -using MinecraftClient.Protocol.Message; -using MinecraftClient.Protocol.ProfileKey; - -namespace MinecraftClient.Protocol -{ - public class PlayerInfo - { - public readonly Guid Uuid; - - public readonly string Name; - - // Tuple[]? Property; - - public int Gamemode; - - public int Ping; - - public string? DisplayName; - - public bool Listed = true; - - public int TabListOrder; - - // Entity info - - public Mapping.Entity? entity; - - // For message signature - - public int MessageIndex = -1; - - public Guid ChatUuid = Guid.Empty; - - private PublicKey? PublicKey; - - private DateTime? KeyExpiresAt; - - private bool lastMessageVerified; - - private byte[]? precedingSignature; - - public PlayerInfo(Guid uuid, string name, Tuple[]? property, int gamemode, int ping, string? displayName, long? timeStamp, byte[]? publicKey, byte[]? signature) - { - Uuid = uuid; - Name = name; - if (property is not null) - Property = property; - Gamemode = gamemode; - Ping = ping; - DisplayName = displayName; - lastMessageVerified = false; - if (timeStamp is not null && publicKey is not null && signature is not null) - { - DateTimeOffset dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds((long)timeStamp); - KeyExpiresAt = dateTimeOffset.UtcDateTime; - try - { - PublicKey = new PublicKey(publicKey, signature); - lastMessageVerified = true; - } - catch (System.Security.Cryptography.CryptographicException) - { - PublicKey = null; - } - } - precedingSignature = null; - } - - public PlayerInfo(string name, Guid uuid) - { - Name = name; - Uuid = uuid; - Gamemode = -1; - Ping = 0; - TabListOrder = 0; - lastMessageVerified = true; - precedingSignature = null; - } - - public void ClearPublicKey() - { - ChatUuid = Guid.Empty; - PublicKey = null; - KeyExpiresAt = null; - } - - public void SetPublicKey(Guid chatUuid, long publicKeyExpiryTime, byte[] encodedPublicKey, byte[] publicKeySignature) - { - ChatUuid = chatUuid; - KeyExpiresAt = DateTimeOffset.FromUnixTimeMilliseconds(publicKeyExpiryTime).UtcDateTime; - try - { - PublicKey = new PublicKey(encodedPublicKey, publicKeySignature); - lastMessageVerified = true; - } - catch (System.Security.Cryptography.CryptographicException) - { - PublicKey = null; - } - } - - public bool IsMessageChainLegal() - { - return lastMessageVerified; - } - - public bool IsKeyExpired() - { - return DateTime.Now.ToUniversalTime() > KeyExpiresAt; - } - - /// - /// Verify message - 1.19 - /// - /// Message content - /// Timestamp - /// Salt - /// Message signature - /// Is this message vaild - public bool VerifyMessage(string message, long timestamp, long salt, ref byte[] signature) - { - if (PublicKey is null || IsKeyExpired()) - return false; - else - { - DateTimeOffset timeOffset = DateTimeOffset.FromUnixTimeMilliseconds(timestamp); - - byte[] saltByte = BitConverter.GetBytes(salt); - Array.Reverse(saltByte); - - return PublicKey.VerifyMessage(message, Uuid, timeOffset, ref saltByte, ref signature); - } - } - - /// - /// Verify message - 1.19.1 and 1.19.2 - /// - /// Message content - /// Timestamp - /// Salt - /// Message signature - /// Preceding message signature - /// LastSeenMessages - /// Is this message chain vaild - public bool VerifyMessage(string message, long timestamp, long salt, ref byte[] signature, ref byte[]? precedingSignature, LastSeenMessageList lastSeenMessages) - { - if (lastMessageVerified == false) - return false; - if (PublicKey is null || IsKeyExpired() || (this.precedingSignature is not null && precedingSignature is null)) - { - lastMessageVerified = false; - return false; - } - if (this.precedingSignature is not null && !this.precedingSignature.SequenceEqual(precedingSignature!)) - { - lastMessageVerified = false; - return false; - } - - DateTimeOffset timeOffset = DateTimeOffset.FromUnixTimeMilliseconds(timestamp); - - byte[] saltByte = BitConverter.GetBytes(salt); - Array.Reverse(saltByte); - - bool res = PublicKey.VerifyMessage(message, Uuid, timeOffset, ref saltByte, ref signature, ref precedingSignature, lastSeenMessages); - - lastMessageVerified = res; - this.precedingSignature = signature; - - return res; - } - - /// - /// Verify message head - 1.19.1 and 1.19.2 - /// - /// Preceding message signature - /// Message signature - /// Message body hash - /// Is this message chain vaild - public bool VerifyMessageHead(ref byte[]? precedingSignature, ref byte[] headerSignature, ref byte[] bodyDigest) - { - if (lastMessageVerified == false) - return false; - if (PublicKey is null || IsKeyExpired() || (this.precedingSignature is not null && precedingSignature is null)) - { - lastMessageVerified = false; - return false; - } - if (this.precedingSignature is not null && !this.precedingSignature.SequenceEqual(precedingSignature!)) - { - lastMessageVerified = false; - return false; - } - - bool res = PublicKey.VerifyHeader(Uuid, ref bodyDigest, ref headerSignature, ref precedingSignature); - - lastMessageVerified = res; - this.precedingSignature = headerSignature; - - return res; - } - - /// - /// Verify message - 1.19.3 and above - /// - /// Message content - /// Timestamp - /// Salt - /// Message signature - /// Preceding message signature - /// LastSeenMessages - /// Is this message chain vaild - public bool VerifyMessage(string message, Guid playerUuid, Guid chatUuid, int messageIndex, long timestamp, long salt, ref byte[] signature, Tuple[] previousMessageSignatures) - { - if (PublicKey is null || IsKeyExpired()) - return false; - - // net.minecraft.server.network.ServerPlayNetworkHandler#validateMessage - return true; - } - } -} diff --git a/MinecraftClient/Protocol/ProfileKey/KeyUtils.cs b/MinecraftClient/Protocol/ProfileKey/KeyUtils.cs deleted file mode 100644 index ca19e24310..0000000000 --- a/MinecraftClient/Protocol/ProfileKey/KeyUtils.cs +++ /dev/null @@ -1,261 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Security.Cryptography; -using System.Text; -using MinecraftClient.Protocol.Handlers; -using MinecraftClient.Protocol.Message; -using static MinecraftClient.Protocol.Message.LastSeenMessageList; - -namespace MinecraftClient.Protocol.ProfileKey -{ - static class KeyUtils - { - private static readonly SHA256 sha256Hash = SHA256.Create(); - - /// - /// Check whether the authentication server supports player profile keys. - /// For Yggdrasil servers, this fetches the authlib-injector metadata and checks the - /// feature.enable_profile_key flag documented at - /// https://github.com/yushijinhun/authlib-injector/wiki/Yggdrasil-%E6%9C%8D%E5%8A%A1%E7%AB%AF%E6%8A%80%E6%9C%AF%E8%A7%84%E8%8C%83 - /// - public static bool AuthServerSupportsProfileKeys(bool isYggdrasil) - { - if (!isYggdrasil) - return true; - - ProxiedWebRequest.Response? response = null; - try - { - if (!Settings.Config.Main.General.TryGetAuthServerUri(out Uri? authServerUri)) - return false; - - var request = new ProxiedWebRequest(authServerUri.AbsoluteUri) - { - Accept = "application/json" - }; - - response = request.Get(); - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLine(response.Body.ToString()); - - var json = Json.ParseJson(response.Body); - bool enableProfileKey = json?["meta"]?["feature.enable_profile_key"]?.GetStringValue() == "true"; - return enableProfileKey; - } - catch (Exception e) - { - int code = response is null ? 0 : response.StatusCode; - ConsoleIO.WriteLineFormatted("§cFetch authlib-injector metadata failed: HttpCode = " + code + ", Error = " + e.Message); - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§c" + e.StackTrace); - } - return false; - } - - public static PlayerKeyPair? GetNewProfileKeys(string accessToken, bool isYggdrasil) - { - if (string.IsNullOrWhiteSpace(accessToken)) - return null; - - if (!AuthServerSupportsProfileKeys(isYggdrasil)) - { - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLine("AuthServer does not support profile keys, will not attempt to fetch them."); - return null; - } - - string certificatesURL = "https://api.minecraftservices.com/player/certificates"; - if (isYggdrasil) - { - if (!Settings.Config.Main.General.TryGetAuthServerUri(out Uri? authServerUri)) - return null; - - certificatesURL = new Uri(authServerUri, "minecraftservices/player/certificates").AbsoluteUri; - } - - ProxiedWebRequest.Response? response = null; - try - { - var request = new ProxiedWebRequest(certificatesURL) - { - Accept = "application/json" - }; - request.Headers.Add("Authorization", string.Format("Bearer {0}", accessToken)); - - response = request.Post("application/json", ""); - - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLine(response.Body.ToString()); - - if (response.StatusCode < 200 || response.StatusCode >= 300) - { - throw new InvalidOperationException(string.IsNullOrWhiteSpace(response.Body) - ? "Certificate endpoint returned an error response." - : response.Body); - } - - var json = Json.ParseJson(response.Body); - if (json?["keyPair"]?["publicKey"] is null - || json["keyPair"]?["privateKey"] is null - || json["publicKeySignature"] is null - || json["publicKeySignatureV2"] is null - || json["expiresAt"] is null - || json["refreshedAfter"] is null) - { - throw new InvalidOperationException("Certificate endpoint returned an unexpected payload."); - } - - PublicKey publicKey = new(pemKey: json!["keyPair"]!["publicKey"]!.GetStringValue(), - sig: json["publicKeySignature"]!.GetStringValue(), - sigV2: json["publicKeySignatureV2"]!.GetStringValue()); - - PrivateKey privateKey = new(pemKey: json["keyPair"]!["privateKey"]!.GetStringValue()); - - return new PlayerKeyPair(publicKey, privateKey, - expiresAt: json["expiresAt"]!.GetStringValue(), - refreshedAfter: json["refreshedAfter"]!.GetStringValue()); - } - catch (Exception e) - { - int code = response is null ? 0 : response.StatusCode; - ConsoleIO.WriteLineFormatted("§cFetch profile key failed: HttpCode = " + code + ", Error = " + e.Message); - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§c" + e.StackTrace); - return null; - } - } - - public static byte[] DecodePemKey(string key, string prefix, string suffix) - { - int i = key.IndexOf(prefix); - if (i != -1) - { - i += prefix.Length; - int j = key.IndexOf(suffix, i); - key = key[i..j]; - } - key = key.Replace("\r", string.Empty); - key = key.Replace("\n", string.Empty); - return Convert.FromBase64String(key); - } - - public static byte[] ComputeHash(byte[] data) - { - return sha256Hash.ComputeHash(data); - } - - public static byte[] GetSignatureData(string message, Guid uuid, DateTimeOffset timestamp, ref byte[] salt) - { - List data = new(); - - data.AddRange(salt); - - data.AddRange(uuid.ToBigEndianBytes()); - - byte[] timestampByte = BitConverter.GetBytes(timestamp.ToUnixTimeSeconds()); - Array.Reverse(timestampByte); - data.AddRange(timestampByte); - - data.AddRange(Encoding.UTF8.GetBytes(message)); - - return data.ToArray(); - } - - public static byte[] GetSignatureData(string message, DateTimeOffset timestamp, ref byte[] salt, LastSeenMessageList lastSeenMessages) - { - List data = new(); - - data.AddRange(salt); - - byte[] timestampByte = BitConverter.GetBytes(timestamp.ToUnixTimeSeconds()); - Array.Reverse(timestampByte); - data.AddRange(timestampByte); - - data.AddRange(Encoding.UTF8.GetBytes(message)); - - data.Add(70); - - lastSeenMessages.WriteForSign(data); - - return data.ToArray(); - } - - public static byte[] GetSignatureData_1_19_3(string message, Guid playerUuid, Guid chatUuid, int messageIndex, DateTimeOffset timestamp, ref byte[] salt, AcknowledgedMessage[] lastSeenMessages) - { - List data = new(); - - // net.minecraft.network.message.SignedMessage#update - data.AddRange(DataTypes.GetInt(1)); - - // message link - // net.minecraft.network.message.MessageLink#update - data.AddRange(DataTypes.GetUUID(playerUuid)); - data.AddRange(DataTypes.GetUUID(chatUuid)); - data.AddRange(DataTypes.GetInt(messageIndex)); - - // message body - // net.minecraft.network.message.MessageBody#update - data.AddRange(salt); - data.AddRange(DataTypes.GetLong(timestamp.ToUnixTimeSeconds())); - byte[] messageBytes = Encoding.UTF8.GetBytes(message); - data.AddRange(DataTypes.GetInt(messageBytes.Length)); - data.AddRange(messageBytes); - data.AddRange(DataTypes.GetInt(lastSeenMessages.Length)); - foreach (AcknowledgedMessage ack in lastSeenMessages) - data.AddRange(ack.signature); - - return data.ToArray(); - } - - public static byte[] GetSignatureData(byte[]? precedingSignature, Guid sender, byte[] bodySign) - { - List data = new(); - - if (precedingSignature is not null) - data.AddRange(precedingSignature); - - data.AddRange(sender.ToBigEndianBytes()); - - data.AddRange(bodySign); - - return data.ToArray(); - } - - public static byte[] GetSignatureData(string message, DateTimeOffset timestamp, ref byte[] salt, int messageCount, Guid sender, Guid sessionUuid) - { - List data = new(); - - // TODO! - byte[] unknownInt1 = BitConverter.GetBytes(1); - Array.Reverse(unknownInt1); - data.AddRange(unknownInt1); - - data.AddRange(sender.ToBigEndianBytes()); - data.AddRange(sessionUuid.ToBigEndianBytes()); - - byte[] msgCountByte = BitConverter.GetBytes(messageCount); - Array.Reverse(msgCountByte); - data.AddRange(msgCountByte); - data.AddRange(salt); - - byte[] timestampByte = BitConverter.GetBytes(timestamp.ToUnixTimeSeconds()); - Array.Reverse(timestampByte); - data.AddRange(timestampByte); - - byte[] msgByte = Encoding.UTF8.GetBytes(message); - byte[] msgLengthByte = BitConverter.GetBytes(msgByte.Length); - Array.Reverse(msgLengthByte); - data.AddRange(msgLengthByte); - data.AddRange(msgByte); - - byte[] unknownInt2 = BitConverter.GetBytes(0); - Array.Reverse(unknownInt2); - data.AddRange(unknownInt2); - - return data.ToArray(); - } - - // Delegate to the shared Json.EscapeString backed by System.Text.Json - public static string EscapeString(string src) => Json.EscapeString(src); - } -} diff --git a/MinecraftClient/Protocol/ProfileKey/KeysCache.cs b/MinecraftClient/Protocol/ProfileKey/KeysCache.cs deleted file mode 100644 index 9af643c7e6..0000000000 --- a/MinecraftClient/Protocol/ProfileKey/KeysCache.cs +++ /dev/null @@ -1,197 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Timers; -using static MinecraftClient.Settings; -using static MinecraftClient.Settings.MainConfigHelper.MainConfig.AdvancedConfig; - -namespace MinecraftClient.Protocol.ProfileKey -{ - /// - /// Handle keys caching and storage. - /// - public static class KeysCache - { - private const string KeysCacheFilePlaintext = "ProfileKeyCache.ini"; - - private static FileMonitor? cachemonitor; - private static readonly Dictionary keys = new(); - private static readonly Timer updatetimer = new(100); - private static readonly List> pendingadds = new(); - - /// - /// Retrieve whether KeysCache contains a keys for the given login. - /// - /// User login used with Minecraft.net - /// TRUE if keys are available - public static bool Contains(string login) - { - return keys.ContainsKey(login); - } - - /// - /// Store keys and save it to disk if required. - /// - /// User login used with Minecraft.net - /// User keys - public static void Store(string login, PlayerKeyPair playerKeyPair) - { - if (Contains(login)) - { - keys[login] = playerKeyPair; - } - else - { - keys.Add(login, playerKeyPair); - } - - if (Config.Main.Advanced.ProfileKeyCache == CacheType.disk && updatetimer.Enabled == true) - { - pendingadds.Add(new KeyValuePair(login, playerKeyPair)); - } - else if (Config.Main.Advanced.ProfileKeyCache == CacheType.disk) - { - SaveToDisk(); - } - } - - /// - /// Retrieve keys for the given login. - /// - /// User login used with Minecraft.net - /// PlayerKeyPair for given login - public static PlayerKeyPair Get(string login) - { - return keys[login]; - } - - /// - /// Initialize cache monitoring to keep cache updated with external changes. - /// - /// TRUE if keys are seeded from file - public static bool InitializeDiskCache() - { - cachemonitor = new FileMonitor(AppDomain.CurrentDomain.BaseDirectory, KeysCacheFilePlaintext, new FileSystemEventHandler(OnChanged)); - updatetimer.Elapsed += HandlePending; - return LoadFromDisk(); - } - - /// - /// Reloads cache on external cache file change. - /// - /// Sender - /// Event data - private static void OnChanged(object sender, FileSystemEventArgs e) - { - updatetimer.Stop(); - updatetimer.Start(); - } - - /// - /// Called after timer elapsed. Reads disk cache and adds new/modified keys back. - /// - /// Sender - /// Event data - private static void HandlePending(object? sender, ElapsedEventArgs e) - { - updatetimer.Stop(); - LoadFromDisk(); - - foreach (KeyValuePair pending in pendingadds.ToArray()) - { - Store(pending.Key, pending.Value); - pendingadds.Remove(pending); - } - } - - /// - /// Reads cache file and loads KeysInfos into KeysCache. - /// - /// True if data is successfully loaded - private static bool LoadFromDisk() - { - //User-editable keys cache file in text format - if (File.Exists(KeysCacheFilePlaintext)) - { - if (Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted(string.Format(Translations.cache_loading_keys, KeysCacheFilePlaintext)); - - try - { - foreach (string line in FileMonitor.ReadAllLinesWithRetries(KeysCacheFilePlaintext)) - { - if (!line.TrimStart().StartsWith("#")) - { - - int separatorIdx = line.IndexOf('='); - if (separatorIdx >= 1 && line.Length > separatorIdx + 1) - { - string login = line[..separatorIdx]; - string value = line[(separatorIdx + 1)..]; - try - { - PlayerKeyPair playerKeyPair = PlayerKeyPair.FromString(value); - keys[login] = playerKeyPair; - if (Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted(string.Format(Translations.cache_loaded_keys, playerKeyPair.ExpiresAt.ToString())); - } - catch (InvalidDataException e) - { - if (Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted(string.Format(Translations.cache_ignore_string_keys, value, e.Message)); - } - catch (FormatException e) - { - if (Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted(string.Format(Translations.cache_ignore_string_keys, value, e.Message)); - } - catch (ArgumentNullException e) - { - if (Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted(string.Format(Translations.cache_ignore_string_keys, value, e.Message)); - - } - } - else if (Config.Logging.DebugMessages) - { - ConsoleIO.WriteLineFormatted(string.Format(Translations.cache_ignore_line_keys, line)); - } - } - } - } - catch (IOException e) - { - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.cache_read_fail_plain_keys, e.Message)); - } - } - - return keys.Count > 0; - } - - /// - /// Saves player's keypair from KeysCache into cache file. - /// - private static void SaveToDisk() - { - if (Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8" + Translations.cache_saving_keys, acceptnewlines: true); - - List KeysCacheLines = new() - { - "# Generated by MCC v" + Program.Version + " - Keep it secret & Edit at own risk!", - "# ProfileKey=PublicKey(base64),PublicKeySignature(base64),PublicKeySignatureV2(base64),PrivateKey(base64),ExpiresAt,RefreshAfter" - }; - foreach (KeyValuePair entry in keys) - KeysCacheLines.Add(entry.Key + '=' + entry.Value.ToString()); - - try - { - FileMonitor.WriteAllLinesWithRetries(KeysCacheFilePlaintext, KeysCacheLines); - } - catch (IOException e) - { - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.cache_save_fail_keys, e.Message)); - } - } - } -} diff --git a/MinecraftClient/Protocol/ProfileKey/PlayerKeyPair.cs b/MinecraftClient/Protocol/ProfileKey/PlayerKeyPair.cs deleted file mode 100644 index 2c1fc58965..0000000000 --- a/MinecraftClient/Protocol/ProfileKey/PlayerKeyPair.cs +++ /dev/null @@ -1,90 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; - -namespace MinecraftClient.Protocol.ProfileKey -{ - public class PlayerKeyPair - { - public PublicKey PublicKey; - - public PrivateKey PrivateKey; - - public DateTime ExpiresAt; - - public DateTime RefreshedAfter; // Todo: add a timer - - private const string DataTimeFormat = "yyyy-MM-ddTHH:mm:ss.ffffffZ"; - - public PlayerKeyPair(PublicKey keyPublic, PrivateKey keyPrivate, string expiresAt, string refreshedAfter) - { - PublicKey = keyPublic; - PrivateKey = keyPrivate; - try - { - ExpiresAt = DateTime.ParseExact(expiresAt, DataTimeFormat, System.Globalization.CultureInfo.InvariantCulture).ToUniversalTime(); - RefreshedAfter = DateTime.ParseExact(refreshedAfter, DataTimeFormat, System.Globalization.CultureInfo.InvariantCulture).ToUniversalTime(); - } - catch - { - ExpiresAt = DateTime.Parse(expiresAt).ToUniversalTime(); - RefreshedAfter = DateTime.Parse(refreshedAfter).ToUniversalTime(); - } - } - - public bool NeedRefresh() - { - return DateTime.Now.ToUniversalTime() > RefreshedAfter; - } - - public bool IsExpired() - { - return DateTime.Now.ToUniversalTime() > ExpiresAt; - } - - public long GetExpirationMilliseconds() - { - DateTimeOffset timeOffset = new(ExpiresAt); - return timeOffset.ToUnixTimeMilliseconds(); - } - - public long GetExpirationSeconds() - { - DateTimeOffset timeOffset = new(ExpiresAt); - return timeOffset.ToUnixTimeSeconds(); - } - - public static PlayerKeyPair FromString(string tokenString) - { - string[] fields = tokenString.Split(','); - - if (fields.Length < 6) - throw new InvalidDataException("Invalid string format"); - - PublicKey publicKey = new(pemKey: fields[0].Trim(), - sig: fields[1].Trim(), sigV2: fields[2].Trim()); - - PrivateKey privateKey = new(pemKey: fields[3].Trim()); - - return new PlayerKeyPair(publicKey, privateKey, fields[4].Trim(), fields[5].Trim()); - } - - public override string ToString() - { - List datas = new(); - datas.Add(Convert.ToBase64String(PublicKey.Key)); - if (PublicKey.Signature is null) - datas.Add(string.Empty); - else - datas.Add(Convert.ToBase64String(PublicKey.Signature)); - if (PublicKey.SignatureV2 is null) - datas.Add(string.Empty); - else - datas.Add(Convert.ToBase64String(PublicKey.SignatureV2)); - datas.Add(Convert.ToBase64String(PrivateKey.Key)); - datas.Add(ExpiresAt.ToString(DataTimeFormat)); - datas.Add(RefreshedAfter.ToString(DataTimeFormat)); - return string.Join(",", datas.ToArray()); - } - } -} diff --git a/MinecraftClient/Protocol/ProfileKey/PrivateKey.cs b/MinecraftClient/Protocol/ProfileKey/PrivateKey.cs deleted file mode 100644 index c471a1033e..0000000000 --- a/MinecraftClient/Protocol/ProfileKey/PrivateKey.cs +++ /dev/null @@ -1,85 +0,0 @@ -using System; -using System.Security.Cryptography; -using MinecraftClient.Protocol.Message; -using static MinecraftClient.Protocol.Message.LastSeenMessageList; - -namespace MinecraftClient.Protocol.ProfileKey -{ - public class PrivateKey - { - public byte[] Key { get; set; } - - private readonly RSA rsa; - - private byte[]? precedingSignature = null; - - public PrivateKey(string pemKey) - { - Key = KeyUtils.DecodePemKey(pemKey, "-----BEGIN RSA PRIVATE KEY-----", "-----END RSA PRIVATE KEY-----"); - - rsa = RSA.Create(); - rsa.ImportPkcs8PrivateKey(Key, out _); - } - - public byte[] SignData(byte[] data) - { - return rsa.SignData(data, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); - } - - /// - /// Sign message - 1.19 - /// - /// Message content - /// Sender uuid - /// Timestamp - /// Salt - /// Signature data - public byte[] SignMessage(string message, Guid uuid, DateTimeOffset timestamp, ref byte[] salt) - { - string messageJson = "{\"text\":\"" + KeyUtils.EscapeString(message) + "\"}"; - - byte[] data = KeyUtils.GetSignatureData(messageJson, uuid, timestamp, ref salt); - - return SignData(data); - } - - /// - /// Sign message - 1.19.1 and 1.19.2 - /// - /// Message content - /// Sender uuid - /// Timestamp - /// Salt - /// LastSeenMessageList - /// Signature data - public byte[] SignMessage(string message, Guid uuid, DateTimeOffset timestamp, ref byte[] salt, LastSeenMessageList lastSeenMessages) - { - byte[] bodySignData = KeyUtils.GetSignatureData(message, timestamp, ref salt, lastSeenMessages); - byte[] bodyDigest = KeyUtils.ComputeHash(bodySignData); - - byte[] msgSignData = KeyUtils.GetSignatureData(precedingSignature, uuid, bodyDigest); - byte[] msgSign = SignData(msgSignData); - - precedingSignature = msgSign; - - return msgSign; - } - - /// - /// Sign message - 1.19.3 and above - /// - /// Message content - /// Sender uuid - /// Timestamp - /// Salt - /// LastSeenMessageList - /// Signature data - public byte[] SignMessage(string message, Guid playerUuid, Guid chatUuid, int messageIndex, DateTimeOffset timestamp, ref byte[] salt, AcknowledgedMessage[] lastSeenMessages) - { - byte[] bodySignData = KeyUtils.GetSignatureData_1_19_3(message, playerUuid, chatUuid, messageIndex, timestamp, ref salt, lastSeenMessages); - - return SignData(bodySignData); - } - - } -} diff --git a/MinecraftClient/Protocol/ProfileKey/PublicKey.cs b/MinecraftClient/Protocol/ProfileKey/PublicKey.cs deleted file mode 100644 index faa8ba33e5..0000000000 --- a/MinecraftClient/Protocol/ProfileKey/PublicKey.cs +++ /dev/null @@ -1,102 +0,0 @@ -using System; -using System.Security.Cryptography; -using MinecraftClient.Protocol.Message; - -namespace MinecraftClient.Protocol.ProfileKey -{ - public class PublicKey - { - public byte[] Key { get; set; } - public byte[]? Signature { get; set; } - public byte[]? SignatureV2 { get; set; } - - private readonly RSA rsa; - - public PublicKey(string pemKey, string? sig = null, string? sigV2 = null) - { - Key = KeyUtils.DecodePemKey(pemKey, "-----BEGIN RSA PUBLIC KEY-----", "-----END RSA PUBLIC KEY-----"); - - rsa = RSA.Create(); - rsa.ImportSubjectPublicKeyInfo(Key, out _); - - if (!string.IsNullOrEmpty(sig)) - Signature = Convert.FromBase64String(sig); - - if (!string.IsNullOrEmpty(sigV2)) - SignatureV2 = Convert.FromBase64String(sigV2!); - - if (SignatureV2 is null || SignatureV2.Length == 0) - SignatureV2 = Signature; - - if (Signature is null || Signature.Length == 0) - Signature = SignatureV2; - } - - public PublicKey(byte[] key, byte[] signature) - { - Key = key; - - rsa = RSA.Create(); - rsa.ImportSubjectPublicKeyInfo(Key, out _); - - Signature = signature; - } - - public bool VerifyData(byte[] data, byte[] signature) - { - return rsa.VerifyData(data, signature, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1); - } - - /// - /// Verify message - 1.19 - /// - /// Message content - /// Sender uuid - /// Timestamp - /// Salt - /// Message signature - /// Is this message vaild - public bool VerifyMessage(string message, Guid uuid, DateTimeOffset timestamp, ref byte[] salt, ref byte[] signature) - { - byte[] data = KeyUtils.GetSignatureData(message, uuid, timestamp, ref salt); - - return VerifyData(data, signature); - } - - /// - /// Verify message - 1.19.1 and 1.19.2 - /// - /// Message content - /// Sender uuid - /// Timestamp - /// Salt - /// Message signature - /// Preceding message signature - /// LastSeenMessages - /// Is this message vaild - public bool VerifyMessage(string message, Guid uuid, DateTimeOffset timestamp, ref byte[] salt, ref byte[] signature, ref byte[]? precedingSignature, LastSeenMessageList lastSeenMessages) - { - byte[] bodySignData = KeyUtils.GetSignatureData(message, timestamp, ref salt, lastSeenMessages); - byte[] bodyDigest = KeyUtils.ComputeHash(bodySignData); - - byte[] msgSignData = KeyUtils.GetSignatureData(precedingSignature, uuid, bodyDigest); - - return VerifyData(msgSignData, signature); - } - - /// - /// Verify message head - 1.19.1 and 1.19.2 - /// - /// Message body hash - /// Message signature - /// Is this message header vaild - public bool VerifyHeader(Guid uuid, ref byte[] bodyDigest, ref byte[] signature, ref byte[]? precedingSignature) - { - - byte[] msgSignData = KeyUtils.GetSignatureData(precedingSignature, uuid, bodyDigest); - - return VerifyData(msgSignData, signature); - } - - } -} diff --git a/MinecraftClient/Protocol/ProtocolHandler.cs b/MinecraftClient/Protocol/ProtocolHandler.cs deleted file mode 100644 index 2ebf3ad7e8..0000000000 --- a/MinecraftClient/Protocol/ProtocolHandler.cs +++ /dev/null @@ -1,1455 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Data.Odbc; -using System.Globalization; -using System.Linq; -using System.Net.Http; -using System.Net.Sockets; -using System.Text; -using System.Text.RegularExpressions; -using DnsClient; -using MinecraftClient.Protocol.Handlers; -using MinecraftClient.Protocol.Handlers.Forge; -using MinecraftClient.Protocol.Session; -using MinecraftClient.Proxy; -using static MinecraftClient.Settings; -using static MinecraftClient.Settings.MainConfigHelper.MainConfig.GeneralConfig; - -namespace MinecraftClient.Protocol -{ - /// - /// Handle login, session, server ping and provide a protocol handler for interacting with a minecraft server. - /// - /// - /// Typical update steps for marking a new Minecraft version as supported: - /// - Add protocol ID in GetProtocolHandler() - /// - Add 1.X.X case in MCVer2ProtocolVersion() - /// - public static class ProtocolHandler - { - public enum AuthlibServerValidationResult - { - Valid, - Unreachable, - InvalidResponse - } - - /// - /// Perform a DNS lookup for a Minecraft Service using the specified domain name - /// - /// Input domain name, updated with target host if any, else left untouched - /// Updated with target port if any, else left untouched - /// TRUE if a Minecraft Service was found. - public static bool MinecraftServiceLookup(ref string domain, ref ushort port) - { - bool foundService = false; - string domainVal = domain; - ushort portVal = port; - - if (!String.IsNullOrEmpty(domain) && domain.Any(c => char.IsLetter(c))) - { - AutoTimeout.Perform(() => - { - try - { - ConsoleIO.WriteLine(string.Format(Translations.mcc_resolve, domainVal)); - var lookupClient = new LookupClient(); - var response = - lookupClient.Query(new DnsQuestion($"_minecraft._tcp.{domainVal}", QueryType.SRV)); - if (response.HasError != true && response.Answers.SrvRecords().Any()) - { - //Order SRV records by priority and weight, then randomly - var result = response.Answers.SrvRecords() - .OrderBy(record => record.Priority) - .ThenByDescending(record => record.Weight) - .ThenBy(record => Guid.NewGuid()) - .First(); - string target = result.Target.Value.Trim('.'); - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.mcc_found, target, - result.Port, domainVal)); - domainVal = target; - portVal = result.Port; - foundService = true; - } - } - catch (Exception e) - { - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.mcc_not_found, domainVal, - e.GetType().FullName, e.Message)); - } - }, - TimeSpan.FromSeconds(Config.Main.Advanced.ResolveSrvRecords == - MainConfigHelper.MainConfig.AdvancedConfig.ResolveSrvRecordType.fast - ? 10 - : 30)); - } - - domain = domainVal; - port = portVal; - return foundService; - } - - /// - /// Retrieve information about a Minecraft server - /// - /// Server IP to ping - /// Server Port to ping - /// Will contain protocol version, if ping successful - /// TRUE if ping was successful - public static bool GetServerInfo(string serverIP, ushort serverPort, ref int protocolversion, - ref ForgeInfo? forgeInfo) - { - bool success = false; - int protocolversionTmp = 0; - ForgeInfo? forgeInfoTmp = null; - if (AutoTimeout.Perform(() => - { - try - { - if (Protocol18Handler.DoPing(serverIP, serverPort, ref protocolversionTmp, ref forgeInfoTmp) - || Protocol16Handler.DoPing(serverIP, serverPort, ref protocolversionTmp)) - { - success = true; - } - else - ConsoleIO.WriteLineFormatted("§8" + Translations.error_unexpect_response, - acceptnewlines: true); - } - catch (Exception e) - { - ConsoleIO.WriteLineFormatted(string.Format("§8{0}: {1}", e.GetType().FullName, e.Message)); - } - }, - TimeSpan.FromSeconds(Config.Main.Advanced.ResolveSrvRecords == - MainConfigHelper.MainConfig.AdvancedConfig.ResolveSrvRecordType.fast - ? 10 - : 30))) - { - if (protocolversion != 0 && protocolversion != protocolversionTmp) - ConsoleIO.WriteLineFormatted("§8" + Translations.error_version_different, acceptnewlines: true); - if (protocolversion == 0 && protocolversionTmp <= 1) - ConsoleIO.WriteLineFormatted("§8" + Translations.error_no_version_report, acceptnewlines: true); - if (protocolversion == 0) - protocolversion = protocolversionTmp; - forgeInfo = forgeInfoTmp; - return success; - } - else - { - ConsoleIO.WriteLineFormatted("§8" + Translations.error_connection_timeout, acceptnewlines: true); - return false; - } - } - - /// - /// Verifies that an authlib-injector URL is reachable and returns its metadata document. - /// - public static AuthlibServerValidationResult ValidateAuthlibServer(Uri authServerUri) - { - string result = string.Empty; - int statusCode; - try - { - statusCode = DoHTTPSGet(authServerUri, ref result); - } - catch - { - return AuthlibServerValidationResult.Unreachable; - } - - if (statusCode != 200) - return AuthlibServerValidationResult.InvalidResponse; - - try - { - return Json.ParseJson(result)?["meta"]?["implementationName"]?.GetStringValue() is { Length: > 0 } - ? AuthlibServerValidationResult.Valid - : AuthlibServerValidationResult.InvalidResponse; - } - catch - { - return AuthlibServerValidationResult.InvalidResponse; - } - } - - /// - /// Get a protocol handler for the specified Minecraft version - /// - /// Tcp Client connected to the server - /// Protocol version to handle - /// Forge info - /// Handler with the appropriate callbacks - /// - public static IMinecraftCom GetProtocolHandler(TcpClient client, int protocolVersion, ForgeInfo? forgeInfo, - IMinecraftComHandler handler) - { - int normalizedVersion = NormalizeSnapshotProtocol(protocolVersion); - - int[] suppoertedVersionsProtocol16 = { 51, 60, 61, 72, 73, 74, 78 }; - - if (Array.IndexOf(suppoertedVersionsProtocol16, normalizedVersion) > -1) - return new Protocol16Handler(client, normalizedVersion, handler); - - int[] suppoertedVersionsProtocol18 = - { - 4, 5, 47, 107, 108, 109, 110, 210, 315, 316, 335, 338, 340, 393, 401, 404, 477, 480, 485, 490, 498, 573, - 575, 578, 735, 736, 751, 753, 754, 755, 756, 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, - 769, 770, 771, 772, 773, 774, 775, 776 - }; - - if (Array.IndexOf(suppoertedVersionsProtocol18, normalizedVersion) > -1) - return new Protocol18Handler(client, normalizedVersion, handler, forgeInfo, protocolVersion); - - throw new NotSupportedException(string.Format(Translations.exception_version_unsupport, protocolVersion)); - } - - /// - /// Convert a human-readable Minecraft version number to network protocol version number - /// - /// The Minecraft version number - /// The protocol version number or 0 if could not determine protocol version: error, unknown, not supported - public static int MCVer2ProtocolVersion(string mcVersion) - { - if (mcVersion.Contains('.')) - { - switch (mcVersion.Split(' ')[0].Trim()) - { - case "1.0": - case "1.0.0": - case "1.0.1": - return 22; - case "1.1": - case "1.1.0": - return 23; - case "1.2": - case "1.2.0": - case "1.2.1": - case "1.2.2": - case "1.2.3": - return 28; - case "1.2.4": - case "1.2.5": - return 29; - case "1.3": - case "1.3.0": - case "1.3.1": - case "1.3.2": - return 39; - case "1.4": - case "1.4.0": - case "1.4.1": - case "1.4.2": - return 48; // 47 conflicts with 1.8 - case "1.4.3": - return 48; - case "1.4.4": - case "1.4.5": - return 49; - case "1.4.6": - case "1.4.7": - return 51; - case "1.5": - case "1.5.0": - case "1.5.1": - return 60; - case "1.5.2": - return 61; - case "1.6": - case "1.6.0": - return 72; - case "1.6.1": - return 73; - case "1.6.2": - return 74; - case "1.6.3": - return 77; - case "1.6.4": - return 78; - case "1.7": - case "1.7.0": - case "1.7.1": - return 3; - case "1.7.2": - case "1.7.3": - case "1.7.4": - case "1.7.5": - return 4; - case "1.7.6": - case "1.7.7": - case "1.7.8": - case "1.7.9": - case "1.7.10": - return 5; - case "1.8": - case "1.8.0": - case "1.8.1": - case "1.8.2": - case "1.8.3": - case "1.8.4": - case "1.8.5": - case "1.8.6": - case "1.8.7": - case "1.8.8": - case "1.8.9": - return 47; - case "1.9": - case "1.9.0": - return 107; - case "1.9.1": - return 108; - case "1.9.2": - return 109; - case "1.9.3": - case "1.9.4": - return 110; - case "1.10": - case "1.10.0": - case "1.10.1": - case "1.10.2": - return 210; - case "1.11": - case "1.11.0": - return 315; - case "1.11.1": - case "1.11.2": - return 316; - case "1.12": - case "1.12.0": - return 335; - case "1.12.1": - return 338; - case "1.12.2": - return 340; - case "1.13": - case "1.13.0": - return 393; - case "1.13.1": - return 401; - case "1.13.2": - return 404; - case "1.14": - case "1.14.0": - return 477; - case "1.14.1": - return 480; - case "1.14.2": - return 485; - case "1.14.3": - return 490; - case "1.14.4": - return 498; - case "1.15": - case "1.15.0": - return 573; - case "1.15.1": - return 575; - case "1.15.2": - return 578; - case "1.16": - case "1.16.0": - return 735; - case "1.16.1": - return 736; - case "1.16.2": - return 751; - case "1.16.3": - return 753; - case "1.16.4": - case "1.16.5": - return 754; - case "1.17": - case "1.17.0": - return 755; - case "1.17.1": - return 756; - case "1.18": - case "1.18.0": - case "1.18.1": - return 757; - case "1.18.2": - return 758; - case "1.19": - case "1.19.0": - return 759; - case "1.19.1": - case "1.19.2": - return 760; - case "1.19.3": - return 761; - case "1.19.4": - return 762; - case "1.20": - case "1.20.1": - return 763; - case "1.20.2": - return 764; - case "1.20.3": - case "1.20.4": - return 765; - case "1.20.5": - case "1.20.6": - return 766; - case "1.21": - case "1.21.1": - return 767; - case "1.21.2": - return 768; - case "1.21.3": - return 768; - case "1.21.4": - return 769; - case "1.21.5": - return 770; - case "1.21.6": - return 771; - case "1.21.7": - case "1.21.8": - return 772; - case "1.21.9": - case "1.21.10": - return 773; - case "1.21.11": - return 774; - case "26.1": - return 775; - case "26.2": - return 776; - default: - return 0; - } - } - - try - { - return int.Parse(mcVersion, NumberStyles.Any, CultureInfo.CurrentCulture); - } - catch - { - return 0; - } - } - - private static readonly Regex VersionTokenRegex = new(@"\d+\.\d+(?:\.\d+)?", RegexOptions.Compiled); - - private static readonly int[] SupportedProtocols18 = - [ - 4, 5, 47, 107, 108, 109, 110, 210, 315, 316, 335, 338, 340, 393, 401, 404, - 477, 480, 485, 490, 498, 573, 575, 578, 735, 736, 751, 753, 754, 755, 756, - 757, 758, 759, 760, 761, 762, 763, 764, 765, 766, 767, 768, 769, 770, 771, - 772, 773, 774, 775, 776 - ]; - - /// - /// For multi-version servers (e.g. "Requires MC 1.8 / 1.21"), try to find the - /// highest protocol version that both the server and MCC support. - /// Returns true if the protocol was upgraded, with the new value in - /// . - /// - public static bool TryUpgradeProtocolVersion(string versionName, ref int protocolVersion) - { - if (string.IsNullOrEmpty(versionName)) - return false; - - var matches = VersionTokenRegex.Matches(versionName); - if (matches.Count < 2) - return false; - - int bestProtocol = protocolVersion; - string bestVersion = ""; - - foreach (Match m in matches) - { - int proto = MCVer2ProtocolVersion(m.Value); - if (proto <= 0) - continue; - if (Array.IndexOf(SupportedProtocols18, proto) < 0) - continue; - if (proto > bestProtocol) - { - bestProtocol = proto; - bestVersion = m.Value; - } - } - - if (bestProtocol > protocolVersion && bestVersion.Length > 0) - { - ConsoleIO.WriteLineFormatted("§8" + string.Format( - Translations.mcc_server_info_version_upgrade, - ProtocolVersion2MCVer(protocolVersion), protocolVersion, - "§a" + bestVersion + "§8", bestProtocol)); - protocolVersion = bestProtocol; - return true; - } - - return false; - } - - /// - /// Convert a network protocol version number to human-readable Minecraft version number - /// - /// Some Minecraft versions share the same protocol number. In that case, the lowest version for that protocol is returned. - /// The Minecraft protocol version number - /// The 1.X.X version number, or 0.0 if could not determine protocol version - public static string ProtocolVersion2MCVer(int protocol) - { - return protocol switch - { - 22 => "1.0", - 23 => "1.1", - 28 => "1.2.3", - 29 => "1.2.5", - 39 => "1.3.2", - // case 47: return "1.4.2"; - 48 => "1.4.3", - 49 => "1.4.5", - 51 => "1.4.6", - 60 => "1.5.1", - 62 => "1.5.2", - 72 => "1.6", - 73 => "1.6.1", - 3 => "1.7.1", - 4 => "1.7.2", - 5 => "1.7.6", - 47 => "1.8", - 107 => "1.9", - 108 => "1.9.1", - 109 => "1.9.2", - 110 => "1.9.3", - 210 => "1.10", - 315 => "1.11", - 316 => "1.11.1", - 335 => "1.12", - 338 => "1.12.1", - 340 => "1.12.2", - 393 => "1.13", - 401 => "1.13.1", - 404 => "1.13.2", - 477 => "1.14", - 480 => "1.14.1", - 485 => "1.14.2", - 490 => "1.14.3", - 498 => "1.14.4", - 573 => "1.15", - 575 => "1.15.1", - 578 => "1.15.2", - 735 => "1.16", - 736 => "1.16.1", - 751 => "1.16.2", - 753 => "1.16.3", - 754 => "1.16.5", - 755 => "1.17", - 756 => "1.17.1", - 757 => "1.18.1", - 758 => "1.18.2", - 759 => "1.19", - 760 => "1.19.2", - 761 => "1.19.3", - 762 => "1.19.4", - 763 => "1.20", - 764 => "1.20.2", - 765 => "1.20.4", - 766 => "1.20.6", - 767 => "1.21", - 768 => "1.21.2", - 769 => "1.21.4", - 770 => "1.21.5", - 771 => "1.21.6", - 772 => "1.21.7", - 773 => "1.21.9", - 774 => "1.21.11", - 775 => "26.1", - 776 => "26.2", - _ => "0.0" - }; - } - - /// - /// Normalize snapshot/pre-release protocol numbers (0x40000000 | data_version) to the - /// corresponding release protocol number. Unknown snapshot versions pass through unchanged. - /// - public static int NormalizeSnapshotProtocol(int protocol) - { - if ((protocol & 0x40000000) == 0) - return protocol; - - return protocol switch - { - 0x4000012E => 775, // 26.1-rc-2 → 26.1 - _ => protocol - }; - } - - /// - /// Check if we can force-enable Forge support for a Minecraft version without using server Ping - /// - /// Minecraft protocol version - /// TRUE if we can force-enable Forge support without using server Ping - public static bool ProtocolMayForceForge(int protocol) - { - return Protocol18Forge.ServerMayForceForge(protocol); - } - - /// - /// Server Info: Consider Forge to be enabled regardless of server Ping - /// - /// Minecraft protocol version - /// ForgeInfo item stating that Forge is enabled - public static ForgeInfo ProtocolForceForge(int protocol) - { - return Protocol18Forge.ServerForceForge(protocol); - } - - public enum LoginResult - { - OtherError, - ServiceUnavailable, - SSLError, - Success, - WrongPassword, - AccountMigrated, - NotPremium, - LoginRequired, - InvalidToken, - InvalidResponse, - NullError, - UserCancel, - WrongSelection - }; - - public enum AccountType - { - Mojang, - Microsoft - }; - - /// - /// Allows to login to a premium Minecraft account using the Yggdrasil authentication scheme. - /// - /// Login - /// Password - /// In case of successful login, will contain session information for multiplayer - /// Returns the status of the login (Success, Failure, etc.) - public static LoginResult GetLogin(string user, string pass, LoginType type, out SessionToken session) - { - if (type == LoginType.microsoft) - { - if (Config.Main.General.Method == LoginMethod.mcc) - return MicrosoftMCCLogin(user, pass, out session); - else - return MicrosoftBrowserLogin(out session, user); - } - else if (type == LoginType.mojang) - { - return MojangLogin(user, pass, out session); - } - else if (type == LoginType.yggdrasil) - { - return YggdrasiLogin(user, pass, out session); - } - else - throw new InvalidOperationException( - "Account type must be Mojang or Microsoft or valid authlib 3rd Servers!"); - } - - /// - /// Login using Mojang account. Will be outdated after account migration - /// - /// - /// - /// - /// - private static LoginResult MojangLogin(string user, string pass, out SessionToken session) - { - session = new SessionToken() { ClientID = Guid.NewGuid().ToString().Replace("-", "") }; - - try - { - string result = ""; - string json_request = "{\"agent\": { \"name\": \"Minecraft\", \"version\": 1 }, \"username\": \"" + - JsonEncode(user) + "\", \"password\": \"" + JsonEncode(pass) + - "\", \"clientToken\": \"" + JsonEncode(session.ClientID) + "\" }"; - int code = DoHTTPSPost("authserver.mojang.com", 443, "/authenticate", json_request, ref result); - if (code == 200) - { - if (result.Contains("availableProfiles\":[]}")) - { - return LoginResult.NotPremium; - } - else - { - var loginResponse = Json.ParseJson(result); - if (loginResponse?["accessToken"] is not null - && loginResponse["selectedProfile"]?["id"] is not null - && loginResponse["selectedProfile"]?["name"] is not null) - { - session.ID = loginResponse["accessToken"]!.GetStringValue(); - session.PlayerID = loginResponse["selectedProfile"]!["id"]!.GetStringValue(); - session.PlayerName = loginResponse["selectedProfile"]!["name"]! - .GetStringValue(); - return LoginResult.Success; - } - else return LoginResult.InvalidResponse; - } - } - else if (code == 403) - { - if (result.Contains("UserMigratedException")) - { - return LoginResult.AccountMigrated; - } - else return LoginResult.WrongPassword; - } - else if (code == 503) - { - return LoginResult.ServiceUnavailable; - } - else - { - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.error_http_code, code)); - return LoginResult.OtherError; - } - } - catch (System.Security.Authentication.AuthenticationException e) - { - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLineFormatted("§8" + e.ToString()); - } - - return LoginResult.SSLError; - } - catch (System.IO.IOException e) - { - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLineFormatted("§8" + e.ToString()); - } - - if (e.Message.Contains("authentication")) - { - return LoginResult.SSLError; - } - else return LoginResult.OtherError; - } - catch (Exception e) - { - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLineFormatted("§8" + e.ToString()); - } - - return LoginResult.OtherError; - } - } - - private static LoginResult YggdrasiLogin(string user, string pass, out SessionToken session) - { - session = new SessionToken() { ClientID = Guid.NewGuid().ToString().Replace("-", "") }; - - try - { - string result = ""; - string json_request = "{\"agent\": { \"name\": \"Minecraft\", \"version\": 1 }, \"username\": \"" + - JsonEncode(user) + "\", \"password\": \"" + JsonEncode(pass) + - "\", \"clientToken\": \"" + JsonEncode(session.ClientID) + "\" }"; - if (!Config.Main.General.TryGetAuthServerUri(out Uri? authServerUri)) - return LoginResult.OtherError; - - int code = DoHTTPSPost(authServerUri, "authserver/authenticate", json_request, ref result); - if (code == 200) - { - if (result.Contains("availableProfiles\":[]}")) - { - return LoginResult.NotPremium; - } - else - { - var loginResponse = Json.ParseJson(result); - if (loginResponse?["accessToken"] is not null) - { - session.ID = loginResponse["accessToken"]!.GetStringValue(); - if (loginResponse["selectedProfile"]?["id"] is not null - && loginResponse["selectedProfile"]?["name"] is not null) - { - session.PlayerID = loginResponse["selectedProfile"]!["id"]! - .GetStringValue(); - session.PlayerName = loginResponse["selectedProfile"]!["name"]! - .GetStringValue(); - return LoginResult.Success; - } - else - { - string availableProfiles = ""; - foreach (var profile in loginResponse["availableProfiles"]!.AsArray()) - { - availableProfiles += " " + profile!["name"]!.GetStringValue(); - } - - ConsoleIO.WriteLine(Translations.mcc_avaliable_profiles + availableProfiles); - - string selectedProfileName; - - if (String.IsNullOrEmpty(Config.Main.General.AuthUser) || String.IsNullOrWhiteSpace(Config.Main.General.AuthUser)) - { - ConsoleIO.WriteLine(Translations.mcc_select_profile); - selectedProfileName = ConsoleIO.ReadLine(); - } - else selectedProfileName = Config.Main.General.AuthUser; - - ConsoleIO.WriteLine(Translations.mcc_selected_profile + " " + selectedProfileName); - - System.Text.Json.Nodes.JsonNode? selectedProfile = null; - foreach (var profile in loginResponse["availableProfiles"]!.AsArray()) - { - selectedProfile = profile!["name"]!.GetStringValue() == selectedProfileName - ? profile - : selectedProfile; - } - - if (selectedProfile is not null) - { - session.PlayerID = selectedProfile["id"]!.GetStringValue(); - session.PlayerName = selectedProfile["name"]!.GetStringValue(); - SessionToken currentsession = session; - return GetNewYggdrasilToken(currentsession, out session); - } - else - { - return LoginResult.WrongSelection; - } - } - } - else return LoginResult.InvalidResponse; - } - } - else if (code == 403) - { - if (result.Contains("UserMigratedException")) - { - return LoginResult.AccountMigrated; - } - else return LoginResult.WrongPassword; - } - else if (code == 503) - { - return LoginResult.ServiceUnavailable; - } - else - { - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.error_http_code, code)); - return LoginResult.OtherError; - } - } - catch (System.Security.Authentication.AuthenticationException e) - { - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLineFormatted("§8" + e.ToString()); - } - - return LoginResult.SSLError; - } - catch (System.IO.IOException e) - { - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLineFormatted("§8" + e.ToString()); - } - - if (e.Message.Contains("authentication")) - { - return LoginResult.SSLError; - } - else return LoginResult.OtherError; - } - catch (Exception e) - { - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLineFormatted("§8" + e.ToString()); - } - - return LoginResult.OtherError; - } - } - - /// - /// Sign-in to Microsoft Account using OAuth 2.0 device code flow. - /// Supports accounts with 2FA enabled. - /// - /// Email hint (unused in device code flow, kept for API compatibility) - /// Password (unused in device code flow, kept for API compatibility) - /// - /// - private static LoginResult MicrosoftMCCLogin(string email, string password, out SessionToken session) - { - try - { - var deviceCode = Microsoft.RequestDeviceCode(); - - ConsoleIO.WriteLineFormatted(string.Format(Translations.mcc_device_code_prompt, deviceCode.VerificationUri, deviceCode.UserCode)); - - // Try to open the verification URL in the user's browser - Microsoft.OpenBrowser(deviceCode.VerificationUri); - - ConsoleIO.WriteLineFormatted(Translations.mcc_device_code_waiting); - - var msaResponse = Microsoft.PollDeviceCodeToken(deviceCode.DeviceCode, deviceCode.ExpiresIn, deviceCode.Interval); - return MicrosoftLogin(msaResponse, out session); - } - catch (Exception e) - { - session = new SessionToken() { ClientID = Guid.NewGuid().ToString().Replace("-", "") }; - ConsoleIO.WriteLineFormatted("§cMicrosoft authenticate failed: " + e.Message); - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLineFormatted("§c" + e.StackTrace); - } - - return LoginResult.OtherError; - } - } - - /// - /// Sign-in to Microsoft Account by asking user to open sign-in page using browser. - /// - /// - /// The downside is this require user to copy and paste lengthy content from and to console. - /// Sign-in page: 218 chars - /// Response URL: around 1500 chars - /// - /// - /// - public static LoginResult MicrosoftBrowserLogin(out SessionToken session, string loginHint = "") - { - if (string.IsNullOrEmpty(loginHint)) - Microsoft.OpenBrowser(Microsoft.SignInUrl); - else - Microsoft.OpenBrowser(Microsoft.GetSignInUrlWithHint(loginHint)); - ConsoleIO.WriteLine(Translations.mcc_browser_open); - ConsoleIO.WriteLine("\n" + Microsoft.SignInUrl + "\n"); - - ConsoleIO.WriteLine(Translations.mcc_browser_login_code); - string code = ConsoleIO.ReadLine(); - ConsoleIO.WriteLine(string.Format(Translations.mcc_connecting, "Microsoft")); - - var msaResponse = Microsoft.RequestAccessToken(code); - return MicrosoftLogin(msaResponse, out session); - } - - public static LoginResult MicrosoftLoginRefresh(string refreshToken, out SessionToken session) - { - var msaResponse = Microsoft.RefreshAccessToken(refreshToken); - return MicrosoftLogin(msaResponse, out session); - } - - private static LoginResult MicrosoftLogin(Microsoft.LoginResponse msaResponse, out SessionToken session) - { - session = new SessionToken() { ClientID = Guid.NewGuid().ToString().Replace("-", "") }; - - try - { - var xblResponse = XboxLive.XblAuthenticate(msaResponse); - var xsts = XboxLive.XSTSAuthenticate(xblResponse); // Might throw even password correct - - string accessToken = MinecraftWithXbox.LoginWithXbox(xsts.UserHash, xsts.Token); - bool hasGame = MinecraftWithXbox.UserHasGame(accessToken); - if (hasGame) - { - var profile = MinecraftWithXbox.GetUserProfile(accessToken); - session.PlayerName = profile.UserName; - session.PlayerID = profile.UUID; - session.ID = accessToken; - session.RefreshToken = msaResponse.RefreshToken; - if (!string.IsNullOrWhiteSpace(msaResponse.Email)) - InternalConfig.Account.Login = msaResponse.Email; - return LoginResult.Success; - } - else - { - return LoginResult.NotPremium; - } - } - catch (Exception e) - { - ConsoleIO.WriteLineFormatted("§cMicrosoft authenticate failed: " + e.Message); - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLineFormatted("§c" + e.StackTrace); - } - - return LoginResult.WrongPassword; // Might not always be wrong password - } - } - - /// - /// Validates whether accessToken must be refreshed - /// - /// Session token to validate - /// Returns the status of the token (Valid, Invalid, etc.) - public static LoginResult GetTokenValidation(SessionToken session) - { - var payload = JwtPayloadDecode.GetPayload(session.ID); - var json = Json.ParseJson(payload); - var expTimestamp = long.Parse(json!["exp"]!.GetStringValue(), NumberStyles.Any, - CultureInfo.CurrentCulture); - var now = DateTime.Now; - var tokenExp = UnixTimeStampToDateTime(expTimestamp); - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLine("Access token expiration time is " + tokenExp.ToString()); - } - - if (now < tokenExp) - { - // Still valid - return LoginResult.Success; - } - else - { - // Token expired - return LoginResult.LoginRequired; - } - } - - /// - /// Refreshes invalid token - /// - /// Login - /// In case of successful token refresh, will contain session information for multiplayer - /// Returns the status of the new token request (Success, Failure, etc.) - public static LoginResult GetNewToken(SessionToken currentsession, out SessionToken session) - { - session = new SessionToken(); - try - { - string result = ""; - string json_request = "{ \"accessToken\": \"" + JsonEncode(currentsession.ID) + - "\", \"clientToken\": \"" + JsonEncode(currentsession.ClientID) + - "\", \"selectedProfile\": { \"id\": \"" + JsonEncode(currentsession.PlayerID) + - "\", \"name\": \"" + JsonEncode(currentsession.PlayerName) + "\" } }"; - int code = DoHTTPSPost("authserver.mojang.com", 443, "/refresh", json_request, ref result); - if (code == 200) - { - if (result is null) - { - return LoginResult.NullError; - } - else - { - var loginResponse = Json.ParseJson(result); - if (loginResponse?["accessToken"] is not null - && loginResponse["selectedProfile"]?["id"] is not null - && loginResponse["selectedProfile"]?["name"] is not null) - { - session.ID = loginResponse["accessToken"]!.GetStringValue(); - session.PlayerID = loginResponse["selectedProfile"]!["id"]!.GetStringValue(); - session.PlayerName = loginResponse["selectedProfile"]!["name"]! - .GetStringValue(); - return LoginResult.Success; - } - else return LoginResult.InvalidResponse; - } - } - else if (code == 403 && result.Contains("InvalidToken")) - { - return LoginResult.InvalidToken; - } - else - { - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.error_auth, code)); - return LoginResult.OtherError; - } - } - catch - { - return LoginResult.OtherError; - } - } - - public static LoginResult GetNewYggdrasilToken(SessionToken currentsession, out SessionToken session) - { - session = new SessionToken(); - try - { - string result = ""; - string json_request = "{ \"accessToken\": \"" + JsonEncode(currentsession.ID) + - "\", \"clientToken\": \"" + JsonEncode(currentsession.ClientID) + - "\", \"selectedProfile\": { \"id\": \"" + JsonEncode(currentsession.PlayerID) + - "\", \"name\": \"" + JsonEncode(currentsession.PlayerName) + "\" } }"; - if (!Config.Main.General.TryGetAuthServerUri(out Uri? authServerUri)) - return LoginResult.OtherError; - - int code = DoHTTPSPost(authServerUri, "authserver/refresh", json_request, ref result); - if (code == 200) - { - if (result is null) - { - return LoginResult.NullError; - } - else - { - var loginResponse = Json.ParseJson(result); - if (loginResponse?["accessToken"] is not null - && loginResponse["selectedProfile"]?["id"] is not null - && loginResponse["selectedProfile"]?["name"] is not null) - { - session.ID = loginResponse["accessToken"]!.GetStringValue(); - session.PlayerID = loginResponse["selectedProfile"]!["id"]!.GetStringValue(); - session.PlayerName = loginResponse["selectedProfile"]!["name"]! - .GetStringValue(); - return LoginResult.Success; - } - else return LoginResult.InvalidResponse; - } - } - else if (code == 403 && result.Contains("InvalidToken")) - { - return LoginResult.InvalidToken; - } - else - { - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.error_auth, code)); - return LoginResult.OtherError; - } - } - catch - { - return LoginResult.OtherError; - } - } - - /// - /// Check session using Mojang's Yggdrasil authentication scheme. Allows to join an online-mode server - /// - /// Username - /// Session ID - /// Server ID - /// LoginType - /// TRUE if session was successfully checked - public static bool SessionCheck(string uuid, string accesstoken, string serverhash, LoginType type) - { - try - { - string result = ""; - string json_request = "{\"accessToken\":\"" + accesstoken + "\",\"selectedProfile\":\"" + uuid + - "\",\"serverId\":\"" + serverhash + "\"}"; - int code; - if (type == LoginType.yggdrasil) - { - if (!Config.Main.General.TryGetAuthServerUri(out Uri? authServerUri)) - return false; - - code = DoHTTPSPost(authServerUri, "sessionserver/session/minecraft/join", json_request, ref result); - } - else - { - code = DoHTTPSPost("sessionserver.mojang.com", 443, "/session/minecraft/join", json_request, ref result); - } - return (code >= 200 && code < 300); - } - catch - { - return false; - } - } - - /// - /// Retrieve available Realms worlds of a player and display them - /// - /// Player Minecraft username - /// Player UUID - /// Access token - /// List of ID of available Realms worlds - public static List RealmsListWorlds(string username, string uuid, string accesstoken) - { - List realmsWorldsResult = new(); // Store world ID - try - { - string result = ""; - string cookies = String.Format("sid=token:{0}:{1};user={2};version={3}", accesstoken, uuid, username, - Program.MCHighestVersion); - DoHTTPSGet("pc.realms.minecraft.net", 443, "/worlds", cookies, ref result); - var realmsWorlds = Json.ParseJson(result); - if (realmsWorlds?["servers"] is System.Text.Json.Nodes.JsonArray serversArray - && serversArray.Count > 0) - { - List availableWorlds = new(); // Store string to print - int index = 0; - foreach (var realmsServer in serversArray) - { - if (realmsServer?["name"] is not null - && realmsServer["owner"] is not null - && realmsServer["id"] is not null - && realmsServer["expired"] is not null) - { - if (realmsServer["expired"].GetStringValue() == "false") - { - availableWorlds.Add(String.Format("[{0}] {2} ({3}) - {1}", - index++, - realmsServer["id"]!.GetStringValue(), - realmsServer["name"]!.GetStringValue(), - realmsServer["owner"]!.GetStringValue())); - realmsWorldsResult.Add(realmsServer["id"]!.GetStringValue()); - } - } - } - - if (availableWorlds.Count > 0) - { - ConsoleIO.WriteLine(Translations.mcc_realms_available); - foreach (var world in availableWorlds) - ConsoleIO.WriteLine(world); - ConsoleIO.WriteLine(Translations.mcc_realms_join); - } - } - } - catch (Exception e) - { - ConsoleIO.WriteLineFormatted("§8" + e.GetType().ToString() + ": " + e.Message); - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLineFormatted("§8" + e.StackTrace); - } - } - - return realmsWorldsResult; - } - - /// - /// Get the server address of a Realms world by world ID - /// - /// The world ID of the Realms world - /// Player Minecraft username - /// Player UUID - /// Access token - /// Server address (host:port) or empty string if failure - public static string GetRealmsWorldServerAddress(string worldId, string username, string uuid, - string accesstoken) - { - try - { - string result = ""; - string cookies = String.Format("sid=token:{0}:{1};user={2};version={3}", accesstoken, uuid, username, - Program.MCHighestVersion); - int statusCode = DoHTTPSGet("pc.realms.minecraft.net", 443, "/worlds/v1/" + worldId + "/join/pc", - cookies, ref result); - if (statusCode == 200) - { - var serverAddress = Json.ParseJson(result); - if (serverAddress?["address"] is not null) - return serverAddress["address"]!.GetStringValue(); - else - { - ConsoleIO.WriteLine(Translations.error_realms_ip_error); - return ""; - } - } - else - { - ConsoleIO.WriteLine(Translations.error_realms_access_denied); - return ""; - } - } - catch (Exception e) - { - ConsoleIO.WriteLineFormatted("§8" + e.GetType().ToString() + ": " + e.Message); - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLineFormatted("§8" + e.StackTrace); - } - - return ""; - } - } - - /// - /// Make a HTTPS GET request to the specified endpoint of the Mojang API - /// - /// Host to connect to - /// Port to connect on - /// Path for making the request - /// Cookies for making the request - /// Request result - /// HTTP Status code - private static int DoHTTPSGet(string host, int port, string path, string cookies, ref string result) - { - Dictionary headers = new() - { - { "Cookie", cookies }, - { "Cache-Control", "no-cache" }, - { "Pragma", "no-cache" }, - { "User-Agent", "Java/1.6.0_27" } - }; - return DoHTTPSRequest(HttpMethod.Get, host, port, path, headers, null, useHttps: true, ref result); - } - - private static int DoHTTPSGet(Uri requestUri, ref string result) - { - Dictionary headers = new() - { - { "User-Agent", "MCC/" + Program.Version } - }; - return DoHTTPSRequest(HttpMethod.Get, requestUri.Host, requestUri.Port, requestUri.PathAndQuery, headers, - null, requestUri.Scheme == Uri.UriSchemeHttps, ref result); - } - - /// - /// Make a POST request to the specified endpoint of the Mojang API - /// - /// Host to connect to - /// Port to connect on - /// Path for making the request - /// Request payload - /// Request result - /// HTTP Status code - private static int DoHTTPSPost(string host, int port, string path, string body, ref string result) - => DoHTTPSPost(host, port, path, body, useHttps: true, ref result); - - private static int DoHTTPSPost(Uri baseUri, string relativePath, string body, ref string result) - { - Uri requestUri = new(baseUri, relativePath); - return DoHTTPSPost(requestUri.Host, requestUri.Port, requestUri.PathAndQuery, body, - requestUri.Scheme == Uri.UriSchemeHttps, ref result); - } - - /// - /// Make a POST request to the specified endpoint of the Mojang API - /// - /// Host to connect to - /// Port to connect on - /// Path for making the request - /// Request payload - /// Whether to use HTTPS (true) or plain HTTP (false) - /// Request result - /// HTTP Status code - private static int DoHTTPSPost(string host, int port, string path, string body, bool useHttps, ref string result) - { - Dictionary headers = new() - { - { "User-Agent", "MCC/" + Program.Version }, - { "Content-Type", "application/json" } - }; - return DoHTTPSRequest(HttpMethod.Post, host, port, path, headers, body, useHttps, ref result); - } - - /// - /// This method connects to the server and performs an HTTP or HTTPS request via proxy if configured. - /// - /// HTTP method - /// Host to connect to - /// Port to connect on - /// Request path - /// Request headers - /// Optional request body (POST) - /// Whether to use HTTPS (true) or plain HTTP (false) - /// Request result - /// HTTP Status code - private static int DoHTTPSRequest(HttpMethod method, string host, int port, string path, Dictionary headers, string? body, bool useHttps, ref string result) - { - string? postResult = null; - int statusCode = 520; - Exception? exception = null; - AutoTimeout.Perform(() => - { - try - { - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.debug_request, host)); - - using SocketsHttpHandler handler = new SocketsHttpHandler(); - handler.ConnectCallback = async (ctx, ct) => - { - TcpClient client = ProxyHandler.NewTcpClient(host, port, true); - return client.GetStream(); - }; - - using HttpClient client = new HttpClient(handler); - - string scheme = useHttps ? "https" : "http"; - var request = new HttpRequestMessage(method, scheme + "://" + host + ":" + port + path); - - var contentType = "text/plain"; - foreach (var header in headers) - { - request.Headers.TryAddWithoutValidation(header.Key, header.Value); - if (header.Key.Equals("Content-Type", StringComparison.OrdinalIgnoreCase)) - contentType = header.Value; - } - - if (body is not null) - request.Content = new StringContent(body, Encoding.UTF8, contentType); - - if (Settings.Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8> " + request); - - HttpResponseMessage response = client.SendAsync(request).GetAwaiter().GetResult(); - statusCode = (int)response.StatusCode; - - postResult = statusCode == 204 - ? "No Content" - : response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); - - if (Settings.Config.Logging.DebugMessages) - { - ConsoleIO.WriteLine(""); - foreach (string line in postResult.Split('\n')) - ConsoleIO.WriteLineFormatted("§8< " + line); - } - } - catch (Exception e) - { - if (e is not System.Threading.ThreadAbortException) - { - exception = e; - } - } - }, TimeSpan.FromSeconds(30)); - if (postResult is not null) - result = postResult; - if (exception is not null) - throw exception; - return statusCode; - } - - /// - /// Encode a string to a json string. - /// Will convert special chars to \u0000 unicode escape sequences. - /// - /// Source text - /// Encoded text - private static string JsonEncode(string text) - { - StringBuilder result = new(); - - foreach (char c in text) - { - if ((c >= '0' && c <= '9') || - (c >= 'a' && c <= 'z') || - (c >= 'A' && c <= 'Z')) - { - result.Append(c); - } - else - { - result.AppendFormat(@"\u{0:x4}", (int)c); - } - } - - return result.ToString(); - } - - /// - /// Convert a TimeStamp (in second) to DateTime object - /// - /// TimeStamp in second - /// DateTime object of the TimeStamp - public static DateTime UnixTimeStampToDateTime(long unixTimeStamp) - { - // Unix timestamp is seconds past epoch - DateTime dateTime = new(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc); - dateTime = dateTime.AddSeconds(unixTimeStamp).ToLocalTime(); - return dateTime; - } - } -} diff --git a/MinecraftClient/Protocol/ProxiedWebRequest.cs b/MinecraftClient/Protocol/ProxiedWebRequest.cs deleted file mode 100644 index 220ac3191a..0000000000 --- a/MinecraftClient/Protocol/ProxiedWebRequest.cs +++ /dev/null @@ -1,234 +0,0 @@ -using System; -using System.Collections.Specialized; -using System.Net; -using System.Net.Http; -using System.Text; -using MinecraftClient.Proxy; - -namespace MinecraftClient.Protocol -{ - /// - /// HTTP client with automatic proxy support based on application settings. - /// Backed by System.Net.Http.HttpClient with SocketsHttpHandler. - /// - public class ProxiedWebRequest - { - private const int DefaultConnectTimeoutSeconds = 30; - - private readonly Uri _uri; - - public NameValueCollection Headers { get; } = new(); - - public string UserAgent - { - get => Headers.Get("User-Agent") ?? string.Empty; - set => Headers.Set("User-Agent", value); - } - - public string Accept - { - get => Headers.Get("Accept") ?? string.Empty; - set => Headers.Set("Accept", value); - } - - public string Cookie - { - set => Headers.Set("Cookie", value); - } - - public bool Debug => Settings.Config.Logging.DebugMessages; - - /// - /// Create a new HTTP request - /// - /// Target URL - public ProxiedWebRequest(string url) - { - _uri = new Uri(url); - SetupBasicHeaders(); - } - - /// - /// Create a new HTTP request with cookies - /// - /// Target URL - /// Cookies to include in the request - public ProxiedWebRequest(string url, NameValueCollection cookies) - { - _uri = new Uri(url); - Headers.Add("Cookie", GetCookieString(cookies)); - SetupBasicHeaders(); - } - - private void SetupBasicHeaders() - { - Headers.Add("Host", _uri.Host); - Headers.Add("User-Agent", "MCC/1.0"); - Headers.Add("Accept", "*/*"); - } - - /// - /// Perform GET request. Proxy is handled automatically. - /// - public Response Get() => Send(HttpMethod.Get); - - /// - /// Perform POST request. Proxy is handled automatically. - /// - /// The content type of request body - /// Request body - public Response Post(string contentType, string body) => Send(HttpMethod.Post, contentType, body); - - /// - /// Send an HTTP request. Proxy is configured automatically from Settings. - /// - private Response Send(HttpMethod method, string? contentType = null, string? body = null) - { - using var handler = CreateHandler(); - using var client = new HttpClient(handler); - - using var request = new HttpRequestMessage(method, _uri); - - // Apply custom headers (skip content-level headers) - foreach (string key in Headers) - { - if (key.Equals("Content-Type", StringComparison.OrdinalIgnoreCase) || - key.Equals("Content-Length", StringComparison.OrdinalIgnoreCase) || - key.Equals("Host", StringComparison.OrdinalIgnoreCase)) - continue; - - request.Headers.TryAddWithoutValidation(key, Headers[key]); - } - - if (body is not null) - { - request.Content = new StringContent(body, Encoding.UTF8, contentType ?? "text/plain"); - } - - if (Debug) - { - ConsoleIO.WriteLine($"< {method} {_uri}"); - foreach (string key in Headers) - ConsoleIO.WriteLine($"< {key}: {Headers[key]}"); - } - - try - { - using var httpResponse = client.Send(request); - using var stream = httpResponse.Content.ReadAsStream(); - using var reader = new System.IO.StreamReader(stream); - string responseBody = reader.ReadToEnd(); - - var responseHeaders = new NameValueCollection(); - foreach (var header in httpResponse.Headers) - foreach (var val in header.Value) - responseHeaders.Add(header.Key.ToLowerInvariant(), val); - foreach (var header in httpResponse.Content.Headers) - foreach (var val in header.Value) - responseHeaders.Add(header.Key.ToLowerInvariant(), val); - - var cookies = new NameValueCollection(); - foreach (System.Net.Cookie cookie in handler.CookieContainer.GetCookies(_uri)) - { - if (!cookie.Expired) - cookies.Add(cookie.Name, cookie.Value); - } - - return new Response((int)httpResponse.StatusCode, responseBody, responseHeaders, cookies); - } - catch (HttpRequestException ex) - { - if (Debug) - ConsoleIO.WriteLine("HTTP error: " + ex.Message); - return Response.Empty(); - } - } - - /// - /// Create a SocketsHttpHandler with proxy support from ProxyHandler settings. - /// - private static SocketsHttpHandler CreateHandler() - { - var handler = new SocketsHttpHandler - { - UseCookies = true, - CookieContainer = new CookieContainer(), - AllowAutoRedirect = false, - ConnectTimeout = TimeSpan.FromSeconds(DefaultConnectTimeoutSeconds), - }; - - if (ProxyHandler.Config.Enabled_Login) - { - string proxyScheme = ProxyHandler.Config.Proxy_Type switch - { - ProxyHandler.Configs.ProxyType.SOCKS4 => "socks4", - ProxyHandler.Configs.ProxyType.SOCKS4a => "socks4a", - ProxyHandler.Configs.ProxyType.SOCKS5 => "socks5", - _ => "http" - }; - - var proxyUri = new Uri($"{proxyScheme}://{ProxyHandler.Config.Server.Host}:{ProxyHandler.Config.Server.Port}"); - var proxy = new WebProxy(proxyUri); - - if (!string.IsNullOrWhiteSpace(ProxyHandler.Config.Username) && - !string.IsNullOrWhiteSpace(ProxyHandler.Config.Password)) - { - proxy.Credentials = new NetworkCredential( - ProxyHandler.Config.Username, - ProxyHandler.Config.Password); - } - - handler.Proxy = proxy; - handler.UseProxy = true; - } - - return handler; - } - - /// - /// Build a cookie header value from a NameValueCollection. - /// - private static string GetCookieString(NameValueCollection cookies) - { - var sb = new StringBuilder(); - foreach (string key in cookies) - { - sb.Append($"{key}={cookies[key]}; "); - } - string result = sb.ToString(); - return result.Length >= 2 ? result[..^2] : result; - } - - /// - /// Basic HTTP response object. - /// - public record Response(int StatusCode, string Body, NameValueCollection Headers, NameValueCollection Cookies) - { - public static Response Empty() => - new(204, "", new NameValueCollection(), new NameValueCollection()); - - public override string ToString() - { - var sb = new StringBuilder(); - sb.AppendLine("Status code: " + StatusCode); - sb.AppendLine("Headers:"); - foreach (string key in Headers) - sb.AppendLine($" {key}: {Headers[key]}"); - if (Cookies.Count > 0) - { - sb.AppendLine(); - sb.AppendLine("Cookies: "); - foreach (string key in Cookies) - sb.AppendLine($" {key}={Cookies[key]}"); - } - if (Body != "") - { - sb.AppendLine(); - sb.AppendLine(Body.Length > 200 ? "Body: (Truncated to 200 characters)" : "Body: "); - sb.AppendLine(Body.Length > 200 ? Body[..200] + "..." : Body); - } - return sb.ToString(); - } - } - } -} \ No newline at end of file diff --git a/MinecraftClient/Protocol/ReplayHandler.cs b/MinecraftClient/Protocol/ReplayHandler.cs deleted file mode 100644 index 818626384a..0000000000 --- a/MinecraftClient/Protocol/ReplayHandler.cs +++ /dev/null @@ -1,560 +0,0 @@ -using System; -using System.Buffers.Binary; -using System.Collections.Generic; -using System.IO; -using System.IO.Compression; -using System.Text.Json; -using System.Text.Json.Serialization; -using System.Threading; -using MinecraftClient.Mapping; -using MinecraftClient.Protocol.Handlers; -using MinecraftClient.Protocol.Handlers.PacketPalettes; - -namespace MinecraftClient.Protocol -{ - /// - /// Record and save replay files that can be used by Replay Mod. - /// - public class ReplayHandler : IDisposable - { - private const string DefaultReplayDirectory = "replay_recordings"; - private const string WorkingRootDirectory = "recording_cache"; - private const string RecordingEntryName = "recording.tmcpr"; - private const string BackupFileName = "REPLAY_BACKUP.mcpr"; - - private static readonly bool logOutput = true; - - private readonly Lock _sync = new(); - private readonly DataTypes _dataTypes; - private readonly PacketTypePalette _packetType; - private readonly int _protocolVersion; - private readonly string _instanceToken; - private readonly string _workingDirectory; - private readonly string _recordingFilePath; - private readonly string _backupReplayPath; - private readonly EventHandler _processExitHandler; - private readonly FileStream _recordStream; - private readonly DateTime _recordStartTime; - - private ReplayRecordingState _state = ReplayRecordingState.Recording; - private bool _recordStreamClosed; - private bool _disposed; - private DateTime _lastPacketTime; - - private int _playerEntityId = -1; - private Guid _playerUuid; - private Location _playerLastPosition; - private float _playerLastYaw; - private float _playerLastPitch; - - public string ReplayFileName { get; private set; } = string.Empty; - public string ReplayFileDirectory { get; } - public MetaDataHandler MetaData { get; } - - public bool RecordRunning - { - get - { - lock (_sync) - return _state == ReplayRecordingState.Recording; - } - } - - public ReplayHandler(int protocolVersion) - : this(protocolVersion, null, DefaultReplayDirectory) - { - } - - public ReplayHandler(int protocolVersion, string? serverName, string recordingDirectory = DefaultReplayDirectory) - { - ArgumentException.ThrowIfNullOrWhiteSpace(recordingDirectory); - - _dataTypes = new DataTypes(protocolVersion); - _packetType = new PacketTypeHandler().GetTypeHandler(protocolVersion); - _protocolVersion = protocolVersion; - ReplayFileDirectory = recordingDirectory; - Directory.CreateDirectory(ReplayFileDirectory); - - _instanceToken = Path.GetRandomFileName().Replace(".", string.Empty, StringComparison.Ordinal); - _workingDirectory = Path.Combine(WorkingRootDirectory, $"{DateTime.UtcNow:yyyyMMdd_HHmmss_fff}_{Environment.ProcessId}_{_instanceToken}"); - Directory.CreateDirectory(_workingDirectory); - - _recordingFilePath = Path.Combine(_workingDirectory, RecordingEntryName); - _backupReplayPath = Path.Combine(_workingDirectory, BackupFileName); - _recordStream = new FileStream(_recordingFilePath, FileMode.Create, FileAccess.ReadWrite, FileShare.Read); - _processExitHandler = (_, _) => FinalizeOnProcessExit(); - - _recordStartTime = DateTime.UtcNow; - _lastPacketTime = _recordStartTime; - - MetaData = new MetaDataHandler(_workingDirectory) - { - serverName = serverName, - date = new DateTimeOffset(_recordStartTime).ToUnixTimeMilliseconds(), - protocol = protocolVersion, - mcversion = ProtocolHandler.ProtocolVersion2MCVer(protocolVersion) - }; - MetaData.SaveToFile(); - - _playerLastPosition = new Location(0, 0, 0); - AppDomain.CurrentDomain.ProcessExit += _processExitHandler; - - WriteLog("Start recording."); - } - - public void Dispose() - { - if (_disposed) - return; - - try - { - OnShutDown(); - } - finally - { - AppDomain.CurrentDomain.ProcessExit -= _processExitHandler; - _disposed = true; - GC.SuppressFinalize(this); - } - } - - public void SetClientEntityID(int entityID) - { - lock (_sync) - { - _playerEntityId = entityID; - if (entityID >= 0) - MetaData.selfId = entityID; - } - } - - public void SetClientPlayerUUID(Guid uuid) - { - lock (_sync) - { - _playerUuid = uuid; - MetaData.AddPlayerUUID(uuid); - } - } - - public string GetBackupReplayPath() => _backupReplayPath; - - /// - /// Stop recording and save the replay file. - /// - public void OnShutDown() - { - lock (_sync) - { - EnsureNotDisposed(); - - if (_state != ReplayRecordingState.Recording) - return; - - string replayFileName = GetReplayDefaultName(); - string replayFilePath = ResolveReplayPath(replayFileName); - - WriteLog("Creating replay file."); - _state = ReplayRecordingState.Finalizing; - try - { - CloseRecordStreamUnsafe(); - WriteReplayArchiveUnsafe(replayFilePath, readFromActiveStream: false); - ReplayFileName = replayFileName; - _state = ReplayRecordingState.Stopped; - CleanupWorkingFilesUnsafe(); - WriteLog("Replay file created."); - } - catch - { - _state = ReplayRecordingState.Stopped; - throw; - } - } - } - - /// - /// Create a snapshot replay file while the recording is still running. - /// - public void CreateBackupReplay(string replayFileName) - { - lock (_sync) - { - EnsureNotDisposed(); - - if (_state != ReplayRecordingState.Recording) - return; - - WriteDebugLog("Creating backup replay file."); - WriteReplayArchiveUnsafe(ResolveReplayPath(replayFileName), readFromActiveStream: true); - WriteDebugLog("Backup replay file created."); - } - } - - /// - /// Get a default unique replay file name for the current recording. - /// - public string GetReplayDefaultName() - { - string version = ProtocolHandler.ProtocolVersion2MCVer(_protocolVersion).Replace('.', '_'); - return $"{DateTime.UtcNow:yyyy_MM_dd_HH_mm_ss_fff}_{version}_{Environment.ProcessId}_{_instanceToken}.mcpr"; - } - - /// - /// Add a packet from network capture. - /// - public void AddPacket(int packetID, IEnumerable packetData, bool isLogin, bool isInbound) - { - byte[] packetBytes = packetData as byte[] ?? [.. packetData]; - - lock (_sync) - { - if (_disposed || _state != ReplayRecordingState.Recording) - return; - - try - { - if (!isInbound) - return; - - HandleInBoundPacket(packetID, packetBytes, isLogin); - - if (PacketShouldSave(packetID, isLogin, isInbound)) - AddPacketUnsafe(packetID, packetBytes); - } - catch (Exception e) - { - WriteDebugLog("Exception while adding packet: " + e.Message + "\n" + e.StackTrace); - } - } - } - - /// - /// Add a player's UUID to the metadata. - /// - public void OnPlayerSpawn(Guid uuid) - { - lock (_sync) - { - MetaData.AddPlayerUUID(uuid); - } - } - - private void AddPacketUnsafe(int packetID, byte[] packetData) - { - _lastPacketTime = DateTime.UtcNow; - - byte[] packetId = [.. DataTypes.GetVarInt(packetID)]; - byte[] rawPacket = new byte[packetId.Length + packetData.Length]; - packetId.CopyTo(rawPacket, 0); - packetData.CopyTo(rawPacket, packetId.Length); - - int elapsedMilliseconds = Math.Max(0, Convert.ToInt32((_lastPacketTime - _recordStartTime).TotalMilliseconds)); - Span header = stackalloc byte[8]; - BinaryPrimitives.WriteInt32BigEndian(header, elapsedMilliseconds); - BinaryPrimitives.WriteInt32BigEndian(header[4..], rawPacket.Length); - - _recordStream.Write(header); - _recordStream.Write(rawPacket); - } - - private bool PacketShouldSave(int packetID, bool isLogin, bool isInbound) - { - if (!isInbound) - return false; - - if (!isLogin) - return true; - - return packetID == 0x02; - } - - private void HandleInBoundPacket(int packetID, byte[] packetData, bool isLogin) - { - Queue p = new(packetData); - PacketTypesIn pType = _packetType.GetIncomingTypeById(packetID); - - if (isLogin && packetID == 0x02) - { - if (_protocolVersion < Protocol18Handler.MC_1_16_Version) - { - if (Guid.TryParse(_dataTypes.ReadNextString(p), out Guid uuid)) - { - SetClientPlayerUUID(uuid); - WriteDebugLog("User UUID: " + uuid); - } - } - else - { - Guid uuid = _dataTypes.ReadNextUUID(p); - SetClientPlayerUUID(uuid); - WriteDebugLog("User UUID: " + uuid); - } - return; - } - - if (!isLogin && pType == PacketTypesIn.JoinGame) - { - SetClientEntityID(_dataTypes.ReadNextInt(p)); - return; - } - - if (!isLogin && pType == PacketTypesIn.SpawnPlayer) - { - _dataTypes.ReadNextVarInt(p); - OnPlayerSpawn(_dataTypes.ReadNextUUID(p)); - return; - } - - if (pType == PacketTypesIn.PlayerPositionAndLook) - { - double x = _dataTypes.ReadNextDouble(p); - double y = _dataTypes.ReadNextDouble(p); - double z = _dataTypes.ReadNextDouble(p); - float yaw = _dataTypes.ReadNextFloat(p); - float pitch = _dataTypes.ReadNextFloat(p); - byte locMask = _dataTypes.ReadNextByte(p); - - _playerLastPitch = pitch; - _playerLastYaw = yaw; - if (_protocolVersion >= Protocol18Handler.MC_1_8_Version) - { - _playerLastPosition.X = (locMask & 1 << 0) != 0 ? _playerLastPosition.X + x : x; - _playerLastPosition.Y = (locMask & 1 << 1) != 0 ? _playerLastPosition.Y + y : y; - _playerLastPosition.Z = (locMask & 1 << 2) != 0 ? _playerLastPosition.Z + z : z; - } - else - { - _playerLastPosition.X = x; - _playerLastPosition.Y = y; - _playerLastPosition.Z = z; - } - } - } - - private void WriteReplayArchiveUnsafe(string replayFilePath, bool readFromActiveStream) - { - Directory.CreateDirectory(Path.GetDirectoryName(replayFilePath) ?? "."); - - MetaData.duration = GetCurrentDurationMillisecondsUnsafe(); - if (_playerEntityId >= 0) - MetaData.selfId = _playerEntityId; - if (_playerUuid != Guid.Empty) - MetaData.AddPlayerUUID(_playerUuid); - - MetaData.SaveToFile(); - - using FileStream replayArchiveFile = new(replayFilePath, FileMode.Create, FileAccess.Write); - using ZipArchive replayArchive = new(replayArchiveFile, ZipArchiveMode.Create); - - ZipArchiveEntry recordingEntry = replayArchive.CreateEntry(RecordingEntryName); - using (Stream recordingEntryStream = recordingEntry.Open()) - { - if (readFromActiveStream) - CopyActiveRecordingUnsafe(recordingEntryStream); - else - using (FileStream recordingFile = new(_recordingFilePath, FileMode.Open, FileAccess.Read, FileShare.Read)) - recordingFile.CopyTo(recordingEntryStream); - } - - ZipArchiveEntry metadataEntry = replayArchive.CreateEntry(MetaData.MetaDataFileName); - using Stream metadataEntryStream = metadataEntry.Open(); - using FileStream metadataFile = new(Path.Combine(_workingDirectory, MetaData.MetaDataFileName), FileMode.Open, FileAccess.Read, FileShare.Read); - metadataFile.CopyTo(metadataEntryStream); - } - - private void CopyActiveRecordingUnsafe(Stream destination) - { - _recordStream.Flush(); - long position = _recordStream.Position; - try - { - _recordStream.Position = 0; - _recordStream.CopyTo(destination); - } - finally - { - _recordStream.Position = position; - } - } - - private int GetCurrentDurationMillisecondsUnsafe() => - Math.Max(0, Convert.ToInt32((_lastPacketTime - _recordStartTime).TotalMilliseconds)); - - private bool HasCapturedPacketsUnsafe() => _lastPacketTime > _recordStartTime; - - private void CloseRecordStreamUnsafe() - { - if (_recordStreamClosed) - return; - - _recordStream.Flush(); - _recordStream.Dispose(); - _recordStreamClosed = true; - } - - private void CleanupWorkingFilesUnsafe() - { - DeleteFileIfExists(_backupReplayPath); - DeleteFileIfExists(_recordingFilePath); - DeleteFileIfExists(Path.Combine(_workingDirectory, MetaData.MetaDataFileName)); - - if (Directory.Exists(_workingDirectory) && Directory.GetFileSystemEntries(_workingDirectory).Length == 0) - Directory.Delete(_workingDirectory); - } - - private void FinalizeOnProcessExit() - { - lock (_sync) - { - if (_disposed || _state != ReplayRecordingState.Recording) - return; - - try - { - _state = ReplayRecordingState.Finalizing; - CloseRecordStreamUnsafe(); - - if (HasCapturedPacketsUnsafe()) - { - string replayFileName = GetReplayDefaultName(); - WriteDebugLog("Process exit detected, finalizing replay file."); - WriteReplayArchiveUnsafe(ResolveReplayPath(replayFileName), readFromActiveStream: false); - ReplayFileName = replayFileName; - } - - _state = ReplayRecordingState.Stopped; - CleanupWorkingFilesUnsafe(); - } - catch (Exception e) - { - _state = ReplayRecordingState.Stopped; - WriteDebugLog("Exception while finalizing replay on process exit: " + e.Message + "\n" + e.StackTrace); - } - } - } - - private string ResolveReplayPath(string replayFileName) - { - ArgumentException.ThrowIfNullOrWhiteSpace(replayFileName); - - if (Path.IsPathRooted(replayFileName) || !string.IsNullOrEmpty(Path.GetDirectoryName(replayFileName))) - return replayFileName; - - return Path.Combine(ReplayFileDirectory, replayFileName); - } - - private void EnsureNotDisposed() => ObjectDisposedException.ThrowIf(_disposed, this); - - private static void DeleteFileIfExists(string path) - { - if (File.Exists(path)) - File.Delete(path); - } - - private static void WriteLog(string t) - { - if (logOutput) - ConsoleIO.WriteLogLine("[Replay] " + t); - } - - private static void WriteDebugLog(string t) - { - if (Settings.Config.Logging.DebugMessages && logOutput) - WriteLog(t); - } - - private enum ReplayRecordingState - { - Recording, - Finalizing, - Stopped - } - } - - /// - /// Metadata used by Replay Mod. - /// - public class MetaDataHandler - { - private static readonly JsonSerializerOptions s_jsonOptions = new() - { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase, - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull - }; - - private readonly HashSet _players = new(StringComparer.OrdinalIgnoreCase); - - public string MetaDataFileName { get; } = "metaData.json"; - public string temporaryCache { get; } - - public bool singlePlayer = false; - public string? serverName; - public string? customServerName; - public int duration; - public long date; - public string mcversion = "0.0"; - public string fileFormat = "MCPR"; - public int fileFormatVersion = 14; - public int protocol; - public string generator = "MCC"; - public int selfId = -1; - - public MetaDataHandler(string temporaryCache) - { - this.temporaryCache = temporaryCache; - } - - public void AddPlayerUUID(Guid uuid) - { - _players.Add(uuid.ToString()); - } - - public string ToJson() - { - ReplayMetaDataModel metaData = new() - { - Singleplayer = singlePlayer, - ServerName = serverName, - CustomServerName = customServerName, - Duration = duration, - Date = date, - Mcversion = mcversion, - FileFormat = fileFormat, - FileFormatVersion = fileFormatVersion, - Protocol = protocol, - Generator = generator, - SelfId = selfId, - Players = [.. _players] - }; - - return JsonSerializer.Serialize(metaData, s_jsonOptions); - } - - public void SaveToFile() - { - Directory.CreateDirectory(temporaryCache); - File.WriteAllText(Path.Combine(temporaryCache, MetaDataFileName), ToJson()); - } - - private sealed class ReplayMetaDataModel - { - public bool Singleplayer { get; init; } - public string? ServerName { get; init; } - public string? CustomServerName { get; init; } - public int Duration { get; init; } - public long Date { get; init; } - - [JsonPropertyName("mcversion")] - public string Mcversion { get; init; } = "0.0"; - - public string FileFormat { get; init; } = "MCPR"; - public int FileFormatVersion { get; init; } - public int Protocol { get; init; } - public string Generator { get; init; } = "MCC"; - public int SelfId { get; init; } = -1; - public string[] Players { get; init; } = []; - } - } -} diff --git a/MinecraftClient/Protocol/ServerStatusDisplay.cs b/MinecraftClient/Protocol/ServerStatusDisplay.cs deleted file mode 100644 index 291745e508..0000000000 --- a/MinecraftClient/Protocol/ServerStatusDisplay.cs +++ /dev/null @@ -1,119 +0,0 @@ -using System; -using System.Text; -using MinecraftClient.Protocol.Message; -using MinecraftClient.Scripting; - -namespace MinecraftClient.Protocol -{ - internal static class ServerStatusDisplay - { - private const int MaxSamplePlayers = 10; - - internal static void Show(ServerStatusInfo info) - { - if (ConsoleIO.Backend is Tui.TuiConsoleBackend tuiBackend) - ShowTui(info, tuiBackend); - else - ShowClassic(info); - } - - private static void ShowClassic(ServerStatusInfo info) - { - var sb = new StringBuilder(); - - sb.AppendLine(); - sb.Append("§8§m"); - sb.Append(new string('-', 50)); - sb.AppendLine("§r"); - - if (!string.IsNullOrEmpty(info.MotdRaw)) - { - try - { - sb.AppendLine(ChatParser.ParseText(info.MotdRaw)); - } - catch - { - sb.AppendLine(info.MotdRaw); - } - } - - sb.Append("§f"); - sb.Append(Translations.mcc_server_info_label_server); - sb.Append(" §b"); - sb.Append(info.Host); - sb.Append("§7:§b"); - sb.AppendLine(info.Port.ToString()); - - sb.Append("§f"); - sb.Append(Translations.mcc_server_info_label_version); - sb.Append(" §b"); - sb.Append(ChatBot.GetVerbatim(info.VersionName)); - sb.Append(" §7("); - sb.Append(string.Format(Translations.mcc_server_info_label_protocol, "§e" + info.ProtocolVersion + "§7")); - sb.AppendLine(")"); - - if (info.ResolvedProtocol != 0) - { - string resolvedMcVer = ProtocolHandler.ProtocolVersion2MCVer(info.ResolvedProtocol); - sb.Append("§f"); - sb.Append(Translations.mcc_server_info_label_connecting_as); - sb.Append(" §a"); - sb.Append(resolvedMcVer); - sb.Append(" §7("); - sb.Append(string.Format(Translations.mcc_server_info_label_protocol, "§a" + info.ResolvedProtocol + "§7")); - sb.AppendLine(")"); - } - - if (info.PingMs >= 0) - { - sb.Append("§f"); - sb.Append(Translations.mcc_server_info_label_ping); - sb.Append(" §a"); - sb.AppendLine(string.Format(Translations.mcc_server_info_label_ping_ms, info.PingMs)); - } - - sb.Append("§f"); - sb.Append(Translations.mcc_server_info_label_players); - sb.Append(" §a"); - sb.Append(info.OnlinePlayers); - sb.Append("§7/§c"); - sb.AppendLine(info.MaxPlayers.ToString()); - - if (info.SamplePlayers.Count > 0) - { - sb.Append("§f"); - sb.AppendLine(Translations.mcc_server_info_label_online); - - int shown = Math.Min(info.SamplePlayers.Count, MaxSamplePlayers); - for (int i = 0; i < shown; i++) - sb.AppendLine($" §a{info.SamplePlayers[i].Name}"); - - if (info.SamplePlayers.Count > shown) - sb.AppendLine($" §7{string.Format(Translations.mcc_server_info_sample_more, info.SamplePlayers.Count - shown)}"); - } - - sb.Append("§8§m"); - sb.Append(new string('-', 50)); - sb.Append("§r"); - - ConsoleIO.WriteLineFormatted(sb.ToString(), acceptnewlines: true); - } - - private static void ShowTui(ServerStatusInfo info, Tui.TuiConsoleBackend backend) - { - var view = backend.GetView(); - if (view is null) - { - ShowClassic(info); - return; - } - - Avalonia.Threading.Dispatcher.UIThread.Post(() => - { - var panel = Tui.ServerStatusPanelBuilder.Build(info); - view.AppendControlToLog(panel); - }); - } - } -} diff --git a/MinecraftClient/Protocol/ServerStatusInfo.cs b/MinecraftClient/Protocol/ServerStatusInfo.cs deleted file mode 100644 index b864e64d0d..0000000000 --- a/MinecraftClient/Protocol/ServerStatusInfo.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace MinecraftClient.Protocol -{ - /// - /// Holds the structured result of a Minecraft server status (SLP) ping, - /// including MOTD, player counts, sample player list, version, and favicon. - /// - public sealed class ServerStatusInfo - { - public string Host { get; init; } = string.Empty; - public int Port { get; init; } - public string VersionName { get; init; } = string.Empty; - public int ProtocolVersion { get; init; } - public int ResolvedProtocol { get; set; } - public int OnlinePlayers { get; init; } - public int MaxPlayers { get; init; } - public List SamplePlayers { get; init; } = []; - public string MotdRaw { get; init; } = string.Empty; - public string? FaviconBase64 { get; init; } - public long PingMs { get; init; } - - public sealed class SamplePlayer - { - public string Name { get; init; } = string.Empty; - public string Id { get; init; } = string.Empty; - } - } -} diff --git a/MinecraftClient/Protocol/Session/SessionCache.cs b/MinecraftClient/Protocol/Session/SessionCache.cs deleted file mode 100644 index f3d00df977..0000000000 --- a/MinecraftClient/Protocol/Session/SessionCache.cs +++ /dev/null @@ -1,220 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Timers; -using MessagePack; -using static MinecraftClient.Settings; -using static MinecraftClient.Settings.MainConfigHelper.MainConfig.AdvancedConfig; - -namespace MinecraftClient.Protocol.Session -{ - /// - /// Handle sessions caching and storage. - /// - public static class SessionCache - { - private const string SessionCacheFileSerialized = "SessionCache.db"; - private static readonly string SessionCacheFileMinecraft = String.Concat( - Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), - Path.DirectorySeparatorChar, - ".minecraft", - Path.DirectorySeparatorChar, - "launcher_profiles.json" - ); - - private static FileMonitor? cachemonitor; - private static readonly Dictionary sessions = new(); - private static readonly Timer updatetimer = new(100); - private static readonly List> pendingadds = new(); - - /// - /// Retrieve whether SessionCache contains a session for the given login. - /// - /// User login used with Minecraft.net - /// TRUE if session is available - public static bool Contains(string login) - { - return sessions.ContainsKey(login); - } - - /// - /// Store a session and save it to disk if required. - /// - /// User login used with Minecraft.net - /// User session token used with Minecraft.net - public static void Store(string login, SessionToken session) - { - if (Contains(login)) - { - sessions[login] = session; - } - else - { - sessions.Add(login, session); - } - - if (Config.Main.Advanced.SessionCache == CacheType.disk && updatetimer.Enabled == true) - { - pendingadds.Add(new KeyValuePair(login, session)); - } - else if (Config.Main.Advanced.SessionCache == CacheType.disk) - { - SaveToDisk(); - } - } - - /// - /// Retrieve a session token for the given login. - /// - /// User login used with Minecraft.net - /// SessionToken for given login - public static SessionToken Get(string login) - { - return sessions[login]; - } - - /// - /// Initialize cache monitoring to keep cache updated with external changes. - /// - /// TRUE if session tokens are seeded from file - public static bool InitializeDiskCache() - { - cachemonitor = new FileMonitor(AppDomain.CurrentDomain.BaseDirectory, SessionCacheFileSerialized, new FileSystemEventHandler(OnChanged)); - updatetimer.Elapsed += HandlePending; - return LoadFromDisk(); - } - - /// - /// Reloads cache on external cache file change. - /// - /// Sender - /// Event data - private static void OnChanged(object sender, FileSystemEventArgs e) - { - updatetimer.Stop(); - updatetimer.Start(); - } - - /// - /// Called after timer elapsed. Reads disk cache and adds new/modified sessions back. - /// - /// Sender - /// Event data - private static void HandlePending(object? sender, ElapsedEventArgs e) - { - updatetimer.Stop(); - LoadFromDisk(); - - foreach (KeyValuePair pending in pendingadds.ToArray()) - { - Store(pending.Key, pending.Value); - pendingadds.Remove(pending); - } - } - - /// - /// Reads cache file and loads SessionTokens into SessionCache. - /// - /// True if data is successfully loaded - private static bool LoadFromDisk() - { - // Grab sessions in the Minecraft directory - if (File.Exists(SessionCacheFileMinecraft)) - { - if (Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted(string.Format(Translations.cache_loading, Path.GetFileName(SessionCacheFileMinecraft))); - System.Text.Json.Nodes.JsonNode? mcSession = null; - try - { - mcSession = Json.ParseJson(File.ReadAllText(SessionCacheFileMinecraft)); - } - catch (IOException) { /* Failed to read file from disk -- ignoring */ } - if (mcSession is System.Text.Json.Nodes.JsonObject mcSessionObj - && mcSessionObj.ContainsKey("clientToken") - && mcSessionObj.ContainsKey("authenticationDatabase")) - { - string clientID = mcSession["clientToken"]!.GetStringValue().Replace("-", ""); - var sessionItems = mcSession["authenticationDatabase"]!.AsObject(); - foreach (var kvp in sessionItems) - { - string key = kvp.Key; - if (Guid.TryParseExact(key, "N", out Guid temp)) - { - var sessionItem = kvp.Value!.AsObject(); - if (sessionItem.ContainsKey("displayName") - && sessionItem.ContainsKey("accessToken") - && sessionItem.ContainsKey("username") - && sessionItem.ContainsKey("uuid")) - { - string login = Settings.ToLowerIfNeed(sessionItem["username"]!.GetStringValue()); - try - { - SessionToken session = SessionToken.FromString(String.Join(",", - sessionItem["accessToken"]!.GetStringValue(), - sessionItem["displayName"]!.GetStringValue(), - sessionItem["uuid"]!.GetStringValue().Replace("-", ""), - clientID - )); - if (Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted(string.Format(Translations.cache_loaded, login, session.ID)); - sessions[login] = session; - } - catch (InvalidDataException) { /* Not a valid session */ } - } - } - } - } - } - - // Serialized session cache file in binary format - if (File.Exists(SessionCacheFileSerialized)) - { - if (Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted(string.Format(Translations.cache_converting, SessionCacheFileSerialized)); - - try - { - using FileStream fs = new(SessionCacheFileSerialized, FileMode.Open, FileAccess.Read, FileShare.Read); - // Deserialize using MessagePack - Dictionary sessionsTemp = MessagePackSerializer.Deserialize>(fs); - foreach (KeyValuePair item in sessionsTemp) - { - if (Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted(string.Format(Translations.cache_loaded, item.Key, item.Value.ID)); - sessions[item.Key] = item.Value; - } - } - catch (IOException ex) - { - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.cache_read_fail, ex.Message)); - } - catch (MessagePackSerializationException ex2) - { - ConsoleIO.WriteLineFormatted(string.Format(Translations.cache_malformed, ex2.Message)); - } - } - - return sessions.Count > 0; - } - - /// - /// Saves SessionToken's from SessionCache into cache file. - /// - private static void SaveToDisk() - { - if (Config.Logging.DebugMessages) - ConsoleIO.WriteLineFormatted("§8" + Translations.cache_saving, acceptnewlines: true); - - try - { - using FileStream fs = new(SessionCacheFileSerialized, FileMode.Create, FileAccess.Write, FileShare.None); - // Serialize using MessagePack - MessagePackSerializer.Serialize(fs, sessions); - } - catch (IOException e) - { - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.cache_save_fail, e.Message)); - } - } - } -} diff --git a/MinecraftClient/Protocol/Session/SessionToken.cs b/MinecraftClient/Protocol/Session/SessionToken.cs deleted file mode 100644 index a5d9f35c82..0000000000 --- a/MinecraftClient/Protocol/Session/SessionToken.cs +++ /dev/null @@ -1,111 +0,0 @@ -using System; -using System.IO; -using System.Text.RegularExpressions; -using System.Threading.Tasks; -using MessagePack; -using MinecraftClient.Scripting; -using static MinecraftClient.Settings.MainConfigHelper.MainConfig.GeneralConfig; - -namespace MinecraftClient.Protocol.Session -{ - [Serializable] - [MessagePackObject] - public class SessionToken - { - private static readonly Regex JwtRegex = new("^[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+\\.[A-Za-z0-9-_]+$"); - - [Key(0)] - public string ID { get; set; } - [Key(1)] - public string PlayerName { get; set; } - [Key(2)] - public string PlayerID { get; set; } - [Key(3)] - public string ClientID { get; set; } - [Key(4)] - public string RefreshToken { get; set; } - [Key(5)] - public string ServerIDhash { get; set; } - [Key(6)] - public byte[]? ServerPublicKey { get; set; } - - [IgnoreMember] - public Task? SessionPreCheckTask = null; - - public SessionToken() - { - ID = String.Empty; - PlayerName = String.Empty; - PlayerID = String.Empty; - ClientID = String.Empty; - RefreshToken = String.Empty; - ServerIDhash = String.Empty; - ServerPublicKey = null; - } - - public bool SessionPreCheck(LoginType type) - { - if (ID == string.Empty || PlayerID == String.Empty || ServerPublicKey is null) - return false; - Crypto.CryptoHandler.ClientAESPrivateKey ??= Crypto.CryptoHandler.GenerateAESPrivateKey(); - string serverHash = Crypto.CryptoHandler.GetServerHash(ServerIDhash, ServerPublicKey, Crypto.CryptoHandler.ClientAESPrivateKey); - if (ProtocolHandler.SessionCheck(PlayerID, ID, serverHash, type)) - return true; - return false; - } - - public override string ToString() - { - return String.Join(",", ID, PlayerName, PlayerID, ClientID, RefreshToken, ServerIDhash, - (ServerPublicKey is null) ? String.Empty : Convert.ToBase64String(ServerPublicKey)); - } - - public static SessionToken FromString(string tokenString) - { - string[] fields = tokenString.Split(','); - if (fields.Length < 4) - throw new InvalidDataException("Invalid string format"); - - SessionToken session = new() - { - ID = fields[0], - PlayerName = fields[1], - PlayerID = fields[2], - ClientID = fields[3] - }; - // Backward compatible with old session file without refresh token field - if (fields.Length > 4) - session.RefreshToken = fields[4]; - else - session.RefreshToken = String.Empty; - if (fields.Length > 5) - session.ServerIDhash = fields[5]; - else - session.ServerIDhash = String.Empty; - if (fields.Length > 6) - { - try - { - session.ServerPublicKey = Convert.FromBase64String(fields[6]); - } - catch - { - session.ServerPublicKey = null; - } - } - else - session.ServerPublicKey = null; - if (!JwtRegex.IsMatch(session.ID)) - throw new InvalidDataException("Invalid session ID"); - if (!ChatBot.IsValidName(session.PlayerName)) - throw new InvalidDataException("Invalid player name"); - if (!Guid.TryParseExact(session.PlayerID, "N", out _)) - throw new InvalidDataException("Invalid player ID"); - if (!Guid.TryParseExact(session.ClientID, "N", out _)) - throw new InvalidDataException("Invalid client ID"); - // No validation on refresh token because it is custom format token (not Jwt) - - return session; - } - } -} diff --git a/MinecraftClient/Proxy/ProxyHandler.cs b/MinecraftClient/Proxy/ProxyHandler.cs deleted file mode 100644 index 1cd55e403e..0000000000 --- a/MinecraftClient/Proxy/ProxyHandler.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System.Net.Sockets; -using Starksoft.Aspen.Proxy; -using Tomlet.Attributes; - -namespace MinecraftClient.Proxy -{ - /// - /// Automatically handle proxies according to the app Settings. - /// Note: Underlying proxy handling is taken from Starksoft, LLC's Biko Library. - /// This library is open source and provided under the MIT license. More info at biko.codeplex.com. - /// - - public static class ProxyHandler - { - public static Configs Config = new(); - - [TomlDoNotInlineObject] - public class Configs - { - [TomlInlineComment("$Proxy.Enabled_Update$")] - public bool Enabled_Update = false; - - [TomlInlineComment("$Proxy.Enabled_Login$")] - public bool Enabled_Login = false; - - [TomlInlineComment("$Proxy.Enabled_Ingame$")] - public bool Enabled_Ingame = false; - - [TomlInlineComment("$Proxy.Server$")] - public ProxyInfoConfig Server = new("0.0.0.0", 8080); - - [TomlInlineComment("$Proxy.Proxy_Type$")] - public ProxyType Proxy_Type = ProxyType.HTTP; - - [TomlInlineComment("$Proxy.Username$")] - public string Username = ""; - - [TomlInlineComment("$Proxy.Password$")] - public string Password = ""; - - public void OnSettingUpdate() { } - - public struct ProxyInfoConfig - { - public string Host; - public ushort Port; - - public ProxyInfoConfig(string host, ushort port) - { - Host = host; - Port = port; - } - } - - public enum ProxyType { HTTP, SOCKS4, SOCKS4a, SOCKS5 }; - } - - private static readonly ProxyClientFactory factory = new(); - private static IProxyClient? proxy; - private static bool proxy_ok = false; - - /// - /// Create a regular TcpClient or a proxied TcpClient according to the app Settings. - /// - /// Target host - /// Target port - /// True if the purpose is logging in to a Minecraft account - - public static TcpClient NewTcpClient(string host, int port, bool login = false) - { - try - { - if (login ? Config.Enabled_Login : Config.Enabled_Ingame) - { - ProxyType innerProxytype = ProxyType.Http; - - switch (Config.Proxy_Type) - { - case Configs.ProxyType.HTTP: innerProxytype = ProxyType.Http; break; - case Configs.ProxyType.SOCKS4: innerProxytype = ProxyType.Socks4; break; - case Configs.ProxyType.SOCKS4a: innerProxytype = ProxyType.Socks4a; break; - case Configs.ProxyType.SOCKS5: innerProxytype = ProxyType.Socks5; break; - } - - if (!string.IsNullOrWhiteSpace(Config.Username) && !string.IsNullOrWhiteSpace(Config.Password)) - proxy = factory.CreateProxyClient(innerProxytype, Config.Server.Host, Config.Server.Port, Config.Username, Config.Password); - else - proxy = factory.CreateProxyClient(innerProxytype, Config.Server.Host, Config.Server.Port); - - if (!proxy_ok) - { - ConsoleIO.WriteLineFormatted("§8" + string.Format(Translations.proxy_connected, Config.Server.Host, Config.Server.Port)); - proxy_ok = true; - } - - return proxy.CreateConnection(host, port); - } - else return new TcpClient(host, port); - } - catch (ProxyException e) - { - ConsoleIO.WriteLineFormatted("§8" + e.Message); - proxy = null; - throw new SocketException((int)SocketError.HostUnreachable); - } - } - } -} diff --git a/MinecraftClient/RecipeBookRecipeEntry.cs b/MinecraftClient/RecipeBookRecipeEntry.cs deleted file mode 100644 index a5648ba74e..0000000000 --- a/MinecraftClient/RecipeBookRecipeEntry.cs +++ /dev/null @@ -1,4 +0,0 @@ -namespace MinecraftClient -{ - public readonly record struct RecipeBookRecipeEntry(string CommandId, string DisplayText); -} diff --git a/MinecraftClient/Resources/AppIcon.ico b/MinecraftClient/Resources/AppIcon.ico deleted file mode 100644 index 4ba74058b650b3b20d55549d75c2ef04af115f91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1451470 zcmeF4cbH{WmA9*_x~nU7AZKWDk|aTLR9mknb>~F&3r!)RH&df7YDOo>gn_wbzcnwf5fUoPEyi z>zmOxyKnydzW7_v_m-J`ePfuW!m`R|~E z4qETnV~;&E=&S}p-blwEfBfl(9CFCIfAJT8@!`uZyR3TGyWTa4-ucdVR!#Jdcf6y5 z$n)-Zzx$|*FTVKpv(7rJT5-h{s})vQp;~_V<*VhETdt;g^X661oaN?JgRdK`MpqoI zW*tAP8W|a>&OGzX>fCeBJ?hFUue|NN^UkYQT4|*v%9uZY{&@b?=2U%O@2mQr?5k$n zJEIzzJ3`*-qKhs%>bmQ$yKT{;MN8zT9TWN2o>R^E{EVvaANs2P+xn}K#twdumI zom9TcDyys<^Y;DBH6_J7HX+O5Qg3PEv4-3q)z66eXO%O~IOBmEZ@jTO{q)nTBab|C zN;=|*BdR7k{P4r8COYh}!z$^$?|pAYUDRp)XP;6xE z@{`rkM;~3!;Z1Fz|9K4TzwMYiZ*DcVAnN~etjAvsdN}ACL67#;Yvbtr(YpWOMqSiN z{n%fudH2VhT^)1GF-z3n2?y)0_Y?EyRb!h({nYv0pdSSNb

s{trk0R~o5CM@Q>1 zzU!{LSPLiWzx2{e?`M5_-RoXAQGcf~a2y;1>mS{6wCa1JRrgPV|9#N^iTZDj`d53t ze(Iu5`X6ia%CY9&7wctp+;PV>*5B0_EEoOXVyv2Z{>*B|*JDrfT-5!u*w@_AU(I?` z?5$QGum7l{j$(adoxjie!+-C4;DHCK6HYjxUX$5h(EmIJ?b_fNun!sCIqZGmP}Tp* z{;Kbps6S}dd9$k72h6U9w;ZlU=Zw}i7V9JP%0&IKPq{DF`|9U${a{8rR?{;X=~nDDzJqb+wwTOJGfSNf`v1tYbMQ5SXE|Jdi;_u0>WwmR{| z6DR6lx3zDh9qdckC)tM57nl!*PK^4$81;nx4Zbb*w7Z18?>JKR-yZeTuFpmN>x|Sk zMqSit{ju-3H})&l8{Y7SCF-Xgv;ktD6#i20A)OQ4OR^Wm_i4k>u|w6I1#@Z|_~1ZY zci;Wb*H2y4N&T^pS}FEE_kQ6EUuau@ZUgObFUxpX|J?P%|F<8j#&#I1=ET0*If=dP z@OH!1@GFO_vE|09xbCRF_{A?))M@=OAK&w(FMX*x>7>q81*no+) zSo>pZPIh0*-WH<%FMs*VtO55}f9!YfX5V-6$tO3~&%X1OuY6^-(@r~8JMX-6wcU2x zRhw+G$wV963$q7iO!B-${kaYJICW7c^~YXz#anN^^{$5=dZ@0SzOlcheD}HReV=*e znd%?@;U8-H`@jGDYM*`fsmH;6FSe2Q(O$ENgZ-y|>Y`5TkNx_c4?p~H^~N{8v96Ob z;#zLE-FBm$Hz=yF}#)Y;}|JT0uHLelvr2gpV3b7vD z`Sq`Vy{@0JW*z$Wx4&Ke;upWD?zrQQdR=A=7!Supo1}i*;27jKU>^|efbj8eeB&Fe zffMz|^~R?kdE}AmO>cTrJ?`6YzkR(bBc%tK0I5SG=OGpEh{y zgHJ$SPthLQVSCDUfC=?K`skyq!4vg=`qQ8O)HlER&ANW-iF*LmTi^QD`nqd}9d@X% z`LIW@5d%1FaZGGSZj0@pO}2$O?(xSTuc*`h-+lMppM2tpC#u-b*8S%ilWR>d-)ytZ z>gz`8FDbXjwm3Gl!?w^4+rk_}UDQeayY9N{a{*8(#;S=-&zyXj z7()nq$Dbhf7qRYF)D?SxJFGv}qfb2j^wU)n#r0>Syh*o7)-FGFM*V%SdChA^|MD;Y z@=c+4&r3F@ErzJW#I6U&mQBUM>(pMqPgCk4&$e(3%Y>HYOa;Kd&S z?xxKSnj6Gz_;xfe(*BS{`{o1<1<_{zMq?e_H})|n$6oWa*yFvmMQ;f{ZK8}9fliGw zN;)O>JZ}ivCmQa3uD;j@Z*a~z=lme{RsZpU4}9P^P&_B7xp6u2c4?jRnO~mE$>k|8 zx%qoBQG12fOK}n`(;d5w1z5MdY1so~iU{6K$i7v^CnlMQ(pQA6RU?T$8y6 z&fL9U$=7XN(`WA9up90kU(TMkB(9ZcAN`=MW&7j0dvQD)s_y~PzVaT6_ZYao_Zq+H zenY+onXfk|UGL4EQ;o(wz|l2>=8jflV{v^R#C^W)9M^7Kzt#KesoLME59RfGzHXlrZRdXGjB938{TIixx%J|n>hjU{<)bgl z#q+}BW>qt8h-YT69e-}<{Z+30XdBl}VMj}}KkRQY_dj_ih0W0ZvJZ~E-0_Edzax*o z?UvWq{Bb{Ybltcg$UT`m;@-=)asM^?FtUE!hg&dO%{+Z(eXnNb$up~wIpgzSj zeGqMp_=Nuw4qO&mT0e?HpJJ>Aa)Js9+bAY|OrihEr% zPn}ugF)}*d2mB$fZR_^MJ%%OPAGj=zYd^04x^91ILm7v%?X~^W{uQGAaqp?V7yU@I zHSP=ceJ7}OU$VYO9I~13i1Fv%aNMiMFKGX#KJ}@(ePKtF+8=3~fApgtUCjMs?pJpj zfBZQ6a>ih)_Sbz_DeUK!(f+SRo4KbP_p$4H+J6%~?kV?uKPc{V&-{yMKlhg7-m2|q zY-uBH&Gtk4!>$&`wJ+Dd^?d~GUv9hQ`oOd?SY>WCvcpJy|Gyshzl!$$Z4mdw|1OAr zM4x7!8SP&y+8^_i?PqLhA8m~>p0Iz~AGWoad*$3i=UU%(%Wbzjx4-N|TVIZ633FGA z_U{z!$Icml+8gHt`hMQxJX?r!2Q$xz_Q!o)+t1p-*waSZ8g1O%^^5k0-`4FXo%txq=lQIg+}|quVcX?X^+7*|&x>an+`q>DhxZ+>2Hza* ze>~ca{a`!62R;<%Ee@Jp4ec~k4R080Se)I!ei(nomiC1oFVX(+jk^8xf%dx>ARqmR z^?Hf*fIhTqzrLK?KX<|0YUa5!tC^R@`Ht%cs)1YMjL78?zdGo;petrp{nz(b{T~V9 z`P_vA)!?Cn)yTY&dOR6>+DBWn{X}@P@QuYhzli%M^}R9M4+jhS!5Z%U-=^_z@`K#| zIh)0~8s>SP;W6&<>}2+FG1iC0GnFHP4vup#JXgRkc-|Jz`&iGwfchDG+DKc=_J?mQ ze(=Eu>vZnz<@V<=ePJ#1xl7rPc7A|Q%-w8m)%V$G7wZ=1gCab9VA#m+u}19?wDU;C z*_%Gr1^hdnnGC!q&f&z~f_fQS+DKc=_J?mQ{@mw2SEqMszkLypxJIh`($0>uFVEdH z+8@trcxJ@d*Jqn{3;W(8=EyCBHjn*7*jK%_fm5u@1MeDdKlRdno-u_VEYbe3tzYo` zhxBgR&v9fMv&Q!k>?!UG z`-yef@yB*(W7yFzuzBatxW~IGGM-g|K{xGZJnVxUOq{dyh1~vmYs{;LUmJU4=&+yz zhO4=;p5^@=&$NaP9jay@GJAX;is$@e^Tuj>W^8F=Q~Lv(U-0~k{&m}aZAorF#3S35 z{mA}oyX8KU%Fm^|HlPm1mgjM_HJ%4->iEY!|4opQM*q5Pe_&WYC-B*U&kRbta^3fB5w;NTUy&gL6!qIM-*a(L9IXT9fB~5YNPTM#1w4bg(C| zkeIi4)`Xw5>qomj&<@6yXN0sh>gE0*j8zbXfTiJfv!G07DQ4Zry+v7e!eXcI9 z=jt0f$cQ$G&M}*wGU057~1(e*^=^pLQ~q z*b{5A&z9g^PxEZ-$3OmY^^>3cq^7_7yT7Y`^rIiu=Y+r~+fmtmYzm?uV1loRi+#{` z;EWsXr;XvG&jrpKj}L#}jA+Y7$aq!?K0GU&ggAcBs({WxB8=>8dJ)HP1yX;c! zvBw_Oo_p?DKUd|sn)$IGNgN!1xP8c+zKDyM*nVt-HijKNN1I#ikF(5MZy0IM@%$Bh zs2}{XW%koQ{pnBZwF7%O^w2}Acs4d+>+}U854eFBeP_IEJKXlS!@)j?hnUzG+C%$! z9!y)C+D{tor#sFVTM5$Q+3eaNe8#U{lO9;FH^LKjcmQ$u=fFO?_zU2le5bjB&g6bAG__ zr;QLkOh23-!Nv8A_IILgacROsKd~>gAKPxV@#o=}>pA|h=Byj@($6`6fPZtohjSJX z=Ub#K%W2A|;@G7GjuPV|F;0$^W5{@M#)`3}jkL9?{ZBsmWS#Cln*CBH;86Ds|h*)tf3Ey>4`9 zYwTAR*#0%V_mt>lGN?z(4Hy?4sa&C2jn2Ale#Z-|zVMcy9#$Tt{I1%urvv6UAS9{x}0P&=?^e$; ztS{%wVfBz@c^S`o^pUrl$O(T z9>cj!Ie!jQKYeZLKlicGvVSZ}hLJ|8Xz$n0(fie1n67^*e|@Yb`nFS2_{r14;L+W9Gxd@tnF14GqPajSe(> zc09u_h_*J-z`#J=f6w63NBUagkBs}#5aY%DY1+%PH^}oGnR}){?%4vl&$cu78L`}F z#B!hU$@8;5#-F%2Ft&unplQ5k&YW4>v3-NL>py*lwEOAy-?It!AD;Ve*uMK5(7xyA zv~@pMi}%Cd6X%cO%-!JY!xlMXJ154V#R(7X6=!?SiZe^^AE<`58(PBNX3d&a_sM?2 z+x6dbtZ<&i<^DI>fVgL#`)=5N%k6*ew_$OwzfZ7Ud>`Q6IBybXS@~Yi*eY=z8d^0l zk8kIUt{mrzPl|IXoJol@L4ya!d)zIbr0o#>cb+{eMi@i{=YT)&wK1~ zrfcx<=>NP(A03}}7z_GOpX?WXqpzj^Ba5?wb-x)0&eWFuZ?b`=G06RQ4CL5=_-8Ku z^0_O_Un`vqLj~$d_V7&B!rZJd1Kh8t19Oo&wivH6-&J@RYIqLI!afY?;sUXf5 zb4HXi(wvo!Zzc>L8~tA?`ad_Q@TbJ;%(;%qHvoQY!#VF!aJ2mZV} z67O5&{?l*!1&{t8Rr-Hi8`b^KW6-Yu?QFpLPoDd3*uKN*w|t`SVGH!1Z&Hlz8vO@* zY@R-Hj-G!1B*=5=j0NKoJ~4Po;Lq9UqW|D;|6AwK8~e{WWC^_&+W)3`Aot&}_{-<5 zFn*qzv#)VueB8(BBYmge@tv5Oej5BoK`k2?d`t8{-dU;Vz~uknpZf*Y4froqhx5#Y zJN19MHju}{erHbKod@dvuQ#VY`#bUO3UeH1$vG4Me}jGz6zAgWc>wTLn^s!U_ImZq$4zwrc ziu#OLyK%73CAaUH+kbc-1N$wXw_@~v-S|GuR?+{M1BMTZ{=YB!kF8_#*Z@8d;en4u z|6d#Z-#z-jP4vIP{_$n{4biuD{g3mfbvhhf`_C9av2Sd&hqCX)bH54az8fybz&L## z*+1U*TNr1S<2y;S-!Z$Ib!ogm_odkLJRI~$(4*sF-c=ZUS6utW+|PH!>Tfsg8sBb; zy)iz(H6gZa-|1UZ|Km){Lf=z>Gfrjy9S6=2WqatR|4n0Hf5ly1?`JvZ&%Ta#7GiGi zf3UwAK03xDzS}hWjqz^78{!%{z8S?k8m|BKTESi^_DsV&#P^Hh+K~QZ%k)X2uciOT zz0V_ghX8UM+Vww=1Lp{v`rnNW(Elc1sNW-S-^ctP>tFx9@lNFdVH2EjKm7S~?z1k5 z{Xgp?dc51gxW)Ct@b+N?fj|Ba_Vx`}0C`I}V&>VjP;*gzN{}yqVMb#8Mk>Y=`2gdurHILur8~A8k|85=g`gSoVZXdoKd*jh< z0^c*D|Kd*HdDrtZ(SP1=XxTr$Ouy}4r~Z3JYH9kP&$c;NHu-@z(asL)YyQ@|C^epO zZ9DLhfojgiasMN}8926C(57)8B;w3{wawdi?ghlVIQ93-Qvd0@eQVSIBl3AM#%sFx zV+VN*2xAk@5%xRd-!uk&cSRrK9h>?cUfwB+>wDgxo4aa!n=G!2CMe!P3_41!Bd;Ce?-*q4 z4d-#N-*WJ0E~8HneWb7L`cFF4)cofwI4BgPru`a6A`8z;a0FYO@rpRn&+lw(o$y=e@1P6qz;TZ;Z4 zQsN&rdNAkkCGf}g>>rrXZfqDLjLi2Lh-2rRh43;WMIbo2{OU(5c-`z!~79qEw$$KJt< zd5kmoyyw7gP8@jPfwgbbSKop0Jq!E*ecq9QGfwU1Kl@(xKhK5wgMH3iTVM-Vm>M&!Grya&g-l3)+M z=<{BS1m4&XWjSXsf4UClG05XUzsqsReJ5<6<%~lne1Nr_KH0xk|MU45`hP&y0e|*p z__w}IA9-hvxq){U83)GWhd=yb{l0E|o3qB7e!Je6b7fvP@)+c~(D86R$YWstvrpJ} zc!Hd;$FJ zKX^;7pPj~_n{mkFG1WNOfBOZeuVw#ZPTP<740#U`j;+&w=Y4#d`EURI_piTq%=ebL zueNyc;)(uqwt)V#KG=Wphim(e1AJ-6!Z|^%U6ejy|LK=RU)%MczT1E15Pa8t4fA;X z4nqB|-EV*U+uHvB`@jFY`p$R0Q_qR)b(rt)7y6ICXL2mG2YDWka!j;`a<0%f=zk8E z<5BjXzD=k9^o2Q%HIH`;@p*`EUGrR-?-R2Y@SZr>vmWCA&Ud;0h8>5@9gEUNoFn8- z<513-*Z|`IXJ5elN57?}{)cbBhP@kogt!g>e|(w#vv&n&_J+J`%lq5Rcl4Wif%SpD zGhWX3i~)8~lH(wE9P${H<51c~9uMbBd7dBaKYg=*^tH7A@a1)~l zc(-;R-T_rF_unyK9;DB3`i&f-@45eu!&JPTo#ZiT8jE&*qFrR0U=IlX_KW>1eJ%SR zHodp+>7v86GIOW|HaluP=%F>zSIK%la&WXV~o5=#w;6{}~7T zq&zpp`615`d7j2IHJmZX;T$h@bG!_5R;Lr?HV|eFf@o_#zvr1Z_Grxe^hpBi693rS z?!|97Naz|ax#b|wVdJH~@v=(cI(hm22D}?x>*}U%b>Z}pzDED^`wx9_4YworD%jUZ&pr3tL>L)yWpd^1@+dEP zncukFa?7~oD2F$NOFiTCk-kR%C;i3TG!oxFIVgUQ^3d4h9`>h5^o>5!*GZl4MS3I9 z8-d;k^hV&%ZUn}^7tsCx=f+29UW?D}@p?f1;N#Fef|E7*PQ)U*5WB${eG3T1U%oXw zF6sU6jX-Y%dLz&qf!+x8MxZwWy%Fe*KyL(kBhVXx-U#$Y;Lmadcz(o<0=}a(GiX+i zUe;p(hF}S%lb#Jmyy*`;Fz1_kd^>MW5Wj;vZy6Bf{<#w4x-4ld%7=I+$Zsu!=~OoW zu@CgXeYqgM+0C~T`Tq5S7Ofk+iA?`f<&41}Bds0nDhbTi3|c*CzPICZh%*T9Bl(S@fPwteUcL$vjbXL&&x*+ua80pMt*RmwW=nqY&M;qP~^!A{W zgZL)Goo;tbgTo-cl%X9lF54rW0>Qru7#^K5=HZ))WtDNtL=Q5*`LfJ3xMgISa?>c+FdR}=#_gB& zS-<+GTL+x^Qn~ub&0`pz!_;j(rXeG2yX59G-8lKnI!S{pJ21T*Y=fr4e`9nnz4X%h z``edYc3E}#<(F6RE3UYr=7dRCo^=T4IC?owo}7=gOD?%&LMPW@S)@ZvdC{Q`>#;6% z%es`8?YA!VEwgNo>FQgr<(BPfr*D4KbAHm4+fL$!&1>E2=eS|=F?KEd+1Gc4KWhkc z2x|*G&nL!nnqlT8!p7mH%>2$_nV0pNW*)d@8n&)7j+`}AeR$TjY-Og)bDf6CBjx&# zSxy;NFLTR-(`WNG=~!NF7vbEuTwX4Vyp%s3{Nuf>%PEib2~HV=^BU@UOPYi%6L}=o zO2d`~x9pN<9qW?ke1uENW##sp&%PPA{qnLr>dk4y%QDQ9>$d#N)ywU&?9A;evNB8@ zvM$P0$MQ{sV<%u5zTcJqhwc^D3%4xm&GlKY`dJ6eA$3fHt8ZCZ2U*US!}c$iWf|@C zOfNb5mS6V56$=Di1S_?M7SI3q&rnwPS0W6(TR84Hpi`8^{MQDa&)X)N2>- zl!xEVkj!s9bJB>*bK25|`}_MR>L#4ymZ>bK8_pbk<6yxzDx5!@SHMr)z_eTcN0;9U z@wZ|qBge5f>MY;S<+}pi65rrJ7cP}?zoA!h^pWu$Bhv_H;{9mjgqw(W$dStp6EBH( zrupUoa=*z0M{Zhwr{8E4`pW$Xzz5%^|#6aJ(t7h^a$8W;0+T;J9f_`Rax-Qt_w ze4{_UTRpsYe8+t6_^qbR#=lXUu{R7CZ}BJ3?7idL=koaNC%*Hnji8rp0o;i<;h(Vw zGYL$mi$B;y?DulHOM`#5g&gk22GGg)5>^JL+Kl*S-h?~pVlLMXny?pd(hS$%D30G{ z=({t%&m7-nuD|OX->2pq--9Q`Z+gv(eZl-7cn-H@WAkEei166l)^B0)ZE%S1e1A5+ zi+*{07duydNjmv|ldosYo5I=wY2qoy^3n!! zydCCQF4iTV3j1smHU9Hroe!#i$LOBGi{CN>yZAmk-|8NGQ{ca1V7p@M^$HqYA?E#% z)#?16$MS(cdHKdS`T5PSuz~)o0{^ke_-EXi6IlDP0k9Aw{Z*{sV7WB-lMi3F40$*B zcUlX?U(7Qn+>Wx}qm%I`4%W!TJcmoniHmzq6Km6r!@+*y8|BN5f1|wid$A9{1-rr1 z0{_)xZ@+qAy+&ZX=JQnlj?)@}Yov{?7IXNjfgjlOop*@u-G>eIUlaKAdsp$BXW0&1 z3!DqYUu@vmfQrW}ZS4KJqugI)If9M%>x)`m^XxSOU8WG>Fg z49hdlP1sMQ$2aQdFCVrOzhyJBQ(!0dU>Cp7!EZYZzGJW&TQ@L|-#O&B{l+$k^?QTB zG1Gbxk8jzJt`on7#hj1dlRthFp)Y zhF(|uztFvmJQ;Jt@NV$WYd{X``%PRtJ8|$OJ##Uai+LH(xEq$2cAyQEoZm33f5&L0 zxz+GaaqY#Nov;VHS?``zjcpXTZyXfAYcaY>`1z)>XWKOJh9W+?aZvo`Beqfh9teI9 z@jEy1TQB@B2E?6mAnrYv_=|VRn=o!C z6JIzw#tnnFGI++HI5;B9T4tg?(-@-x%ee#7Z^xqWg|EhsIzx&DW z9tQsI16=#v4}yg_gB2Kwnepl1AK$>d42&r!KYuVh9sHNZ_p^OuybYJQ=Xg^%+k?1g zF7BCU?2!|nz@OjiSu^&3am`<^+ZlWO7!1J^T)`cT!8`xHE5CP&EocYmkq3K;{QWlv z{_G$5O=PYaVh!MTp~1eK2f!cS*FQ5CGcXOkuKZv8!5N|q=&ty^Ma%2f|MPqRuAS@w ze8pa@OAfwS)`WMK>Eqc3vW#%Xy(wH{AO1f#_WbqSzgk?=uNm|IK7l`LHowirx-Ir# z2%h-2J`eWK1bsi~*;bg}K1GflpsNkUJkWn@%>Qe~{LdV)Vo;p^enFBKZ;FIwu z3~tlKpWjs#fAVVwgrVu;FRtD4j4@&IDI=UQR<3QBmT^`FzRC$B7xU8ROF6&aIdA2# zgEhhq7R3JVH8KCQUvI)b{|DT}0Y4N`ft{tFL*g*eB z1And&*A7}Gd_V3Lfj^jwyS9+=2Wv5d`}@e##Q#!$TNTP>5Vt(>7u#<5i-muQbr~1y zcD7L3L&kdo>zEsm=Q*MN{a)7obprnl0{;U8e|(?cGX;Crdwe+0_4+*6|1gN(dWK^M zO*YWl5A=T`=6`XE9iFi!oa5lD44&;k?8TqG-~5%r|M{K9^#cEm0{=q- ze|?|5oBKT0b>?^c8;rpo+y_ucQ|`^@)XntdMJe-gy+yu*oO5843p1o>L)0KbdNJtO9Tku|~& zTKIDf2<~175C(tt|KKD>-~@@?H1OY0|F;awv250arSbo~MwFO0*+#~;Q&?O}UfP7X zXPYprEo96M!)yFkYVG|t2piZe@INf@_gW9%XCJTci@iP%?*9<wthM>x7xP}~Qo?*q2>fBL@jKmIR1V4iJ(a0~wp1GmATc7LSR_-i+o z1DB{L^cwH?WsKW}OYGal#hi4*B?t2o=h6-`?xf{-JN%Jn{O2zhHUR!>1@;?;|Gy&e zKO*qwo=v&#{ySs;w?*v#V+|NvC-#2g-|~O(*9O4C z`CnfZKYk+}*>v$IAH;8LQ&tXB-V4FM$=BQ2fbtUeGTx0HG-0nyn*eidVv-H;%!g~g zxbMT-KWB?M)zFbcd|3!rVZ_wf(ZGbrd z9p?bo0Pw$i9RHC`TGs$8hYj#7u;usqzVko$i&eG*!_&b(eiQH#@zxHEQ(iatx10O3 zT;J}Ni!J(w;bJc@W!VM@i+Sdy9PB6U1DXHDKlXlOTgD#jwIlUDea4+Ls{VWWs~Pvt zsAfDkV|+c(_y4Jd_df^!*C05y@be&SBk-T`P~`hk(C30a6BOkPTsu&WY#C?DHjX)f zYrw!?{|9sN*Z;Zx10(PfbK-;{FlB8InsWU|m*19$$V-`owE^+x_o2jdDt}k6~mPZ*Cw*>*Wnia^VW_zV3U{w!vDv%i}`q$z-FIVrw@vK z`ofX=ckOw`H!=5%KfW*i%mLybHZc3NIQw@@ocTLss2YBCoG08h&h=~`$ZODHQRw0w&SIpi0@QftedbmO+4FivCUjv zW!gbo{MVU`|JW{p$v!a`92mZOWMKFD;rbbGJ*PYWgEc;n?_&pf{*N_a=#;>|h5yK_ zqnsB0qg#btZ9G2za}PM9iV9&6D{lW%fKQQvTk!t2mfq%aK184SnUjKo;d%u_? zX1`%}eJweBKw!UD(9W^uZx{1^T>sVQgaZF|{xAOAlhOCH4G_kMTljbL{f`=d^62}N zYaGscQsN))mrt?>eyep^*?}0h<6Omu3jx~UH{|%^ER4S&DlJz0k#S3 zUlnt}?t%Zlfz`ob1F;8~c|+jO^&HoL?CseLx)!kK6MN(_M+}`1z907zhxZGLGbJNC zh8=Aae*cOnZ^Phm|7UEasE0EE#r~gbL9hUSeKXqucrkBJ7k~1YmvVEQ@=N^l9FW7^ z&IjH4zIyGj&+`HJsVCO$I2dQVOIsLvQ@o=Q`?T5boLvo`K3EN&9d!O+HS3ai|Mkjv zkM+8Ek2P>-?jN|Nb+#+cdkx$k^zooOfQuTcf@=4OTw>s;!@)G;oWtS`Z-;f3i#xK3wZ3%^h`4r8pY!>0`0GPKUkiF9=&_)D?~i-G zasLJ^hmQ$gJ|XCh@lH_e@9I7NX|c~cH7IOp=)|C7!|!9ySl>4)p8wYO6)683LDcuv zps0WF4RN+Sd_Ky2uwq-tN9;Y^I4{G_;mbV{N>mI*9+y|ka#!P zXPr)VkTGrwXWR)-MH6Q{!QtVcuLtFO|J?s;J@cRS!CBSF;jte)I`BVs+z!Bd_{6Y< znCpj*i!k;P_mA20)%nQFvtynkd@~5_u`%kQzOMv*acca*Cu61!EDiqHktF`anO~;s z|Kcy_x4g9jZ9#0A7Yuje-QeG89w==9J85SJ^%?IN|4HY)z~}KG<^XVO*}$x8W>upH zj_(KSYl65>Sla^ja8wZ2iLCbr#ah2#oFOA0L>ZJtnb?-T&z!^D^M%0w#CW$L-TNn; z{XgTREx@OPfBX*o2P{Xf9TC_6%RQgiPKRR$Yp%KGr1_u|=AF{Ox{37v(iTemOYF(# z8nDDU?>q+-HZbdoz@Po#{$T@gUtr{rptv^Ryg(i1UQt{xa;;yVAqDq#*eBoTtTERL z;tzNK&-$Nzl`vSrKli!MRbblX{J%cB=96m&8UN|v+>P#9YpqrPCVaR4k1c?yydCz+ zvmKP!ck+F7C*IL=4qzQ%UB*Y5tC_P~^8kCo`kEl_3t$J}Jo=glbBze*`$l~42=5*| z?jP3qO22pBZ>{_F`t!NK|HR4oXa5H)N$kb1h5!0t15@4qt?|cZ%xjtQ7i0d%9@@f-q&GX1}FD|t$AQ@QOwahg>MG7 zwH@pc*zXwxhjt6%zVS{$+Xw#G4|&TqU+l3t>W%sbUq3kU4A6PN`CokC%-1vaJJu?8o&!`+aNAC-&Ij z;0e#K|KRWSKl49WNnoFGn-2c*?dT7PdoBYR<-S<{-^n(>Ka+b!{l4U#@Xu)(b8SJ) z#ao>$@4G)R`pcjPgR%{HJ>XgpSaNTG`@?g#j_Wk;5pEmL>jUfheld0dZ5{Y;8M4h| z|Ay`4y`FymrI5#-uda`JABcAgkBhaXg?s7$;*&8W41sC*Y*+I?y19%meBldq8OoLx z|911ec97FE_Bq^XZOAy6b3jfrEY3|_Taef9_+ta%gA+E8_X5lV*g*L2;8}tHrhz~A z2;-d4*ek*YcwV?g;0_TdEp&KKw4OuA%X-oddu%W2A3Sc{|M7dD0WlYI|4*#5?;-=g zrNQ6wGNAu5Qf* zgYOxv=EfPpxf{lFBF>6&UL>e~A2{%?&krGwGvvHSQ0D`C%HTTB^`3bKzi(lW4Gtdr z{QV#A1G)Z-H5lo$@GpMxi_^vb;+)?yw1cHx|C_KC&I1AS!IcJKjUq< z3HK(M*u!i5?+P4B8*o3!9L-z}c7Y-Hi0gNRI4c(KiE(CVZoD%xLBu1i)`|1P6L~44 z9roDX-IMWW{?FHc88dAF85I71@igZDi?JE#OJDj@oj=Ey7XMBdx3dlXy&KM)z%%G> z<^nKv9>`q0vrQoD1OFKRMjLQH0Cs`l?6=OY&x&$hC=>4vPNEefzCz%S{gBtS9=pnZ z-@=|Y;QxGwB<}(6f1b(XpW>v?5?>npwHwRJyc7QIaO{NrRB2+LeO_4;&-a-1`zD@k zfN;j1aE{mbV*}0uF&9s)2h7jz3j#Zy=hx@O`Bn(e4SjcF(ar|i*+sSi!q6IPtWn=*7XQ*7ay;9E_{zoEINbZh zropov7#C}}IOni3c$R0pNh2;7f3N{J{nU61|BJfBf4%tKuSMkf%2&Qpefi5@uE{tu z?k!PgC%l$bns!i@uN>Zvv;(do-6x21=HjZ1IAP@_Z^9lOZ6RY`hD)5qJmZUwSbNQH z96j*|tBjdpIGBdsdO=g&|E=*iFSutLApBDJziUC}CFVKaZr#u>z@D%+z+MsZ+Ci){ z&$ufWdoj;(@y;APjf*{T!{RN*#!LKjoNy-b7c02_Dt6Pv|3dKB1}wvJmo@$wbHef4 zWs@krWj`sN)6I(v`zYrE@CSG8K#t6NjCoHWzWTphdFJ9O-Z?JbrWpr!G1ms#argWg zd&1z){a1_*#lS@hxM%XIv9$ zgtHELv=PfJZ9)If_MlyOkCEpM`n|Z9JmXJTe4DtK%fT7Fc6eu;)yXo$+5f=^(r2}U z7XJKh^HlTyy78Nl7g$ac?{@v4u04pA_=)Yt8*j|_E2~X6-Eh`l^xk4(HX7u(FUEr>ZB z9phr3<6;j7f8Nmo8?X{P@q&YC=q(7E%KyRte6Y{BTP|gl_)iDprZqrZ^n38ahs7PN zx7lVJ&aiMFquODI9cqf}RIY0$h_v|q-&zm5z#b?A8_G5y{u%qy?~TL79~&SH`L2t; zpY1?f&nBmji;vZvp9ymjk z_3*c|2pC??%IL2Q2Kv~Ipga(&YZ5_5jL$UkNE5RV8?HGQ~%e${`KmS zM;@sjee}`lvBw^3B+}6N#y7rEeeG*stMi?C=9!#*otOi#fsDUvKxqeJ-f12XdpOw3 z4SSEN$ri*AE{SnYQmAUuxp_5U?ZGlDrRK4Qg5g#JdUqjCWI*ykIZ> zhT%Sg&=$a0f6sVp3t1-i;trQc6aS2r_Aho|8hTyfA8YBkQ%!CskmAm+ryJ%_W* z{Q`T(jI-E-X_jZ)Nh40Wa`6}Ij6GrGVA?JIv9~(Md~(Vl4C()jBlyGdW$*)ga0WxK z$Gld9g9B;q%fXvG5*X?K;KuJ*V{e{k^m&%|BE2_7oaY^+bM}Gr&zw_w*Sp?T&;Qg* zT}}9lcge*VZd#U!Ju<^`?Lp49qc&g|jxF&1OS`#1-xv2BR|fu^{{kDV*mG=*Sx0QBeMVFT7c^S>ZdI14I3-*7uP19vCd&JRz|$Z2Gr9A#6NTHITObg zy#LI+knI6KCobOE21o;c?*D=fdmphQ4iN{_&|5obs`bCdpM2SVa<~b9{oZS~Lk>Bl z-h+F+=Jgp^f=k?wtg!)OYz2&*FW|(n5z?_8^x4nHI#y$gJ!C4&Cl7fk2OG<4KXVpy zJ$ryA+_OxKOD?uexM#f4Gp^rf{BxLe30v??n`;5M8+Ps&fBj$I7klE<#XqjK-cKIM zvb2eezwfD0|J--qeQQ4kJ8T0?@p1BK3zQ)_ zkFbYB2VC<#AMAoSatMDHch?%R$M?bB`w!)MpK&K#V%{#U|ChEP?iu4UEZ$Rb_m9p4 zc@Dt;!C$=O;>Mf+rd|5~TIf2DP?qHoMqc8N?}I<%4PIcv_sHD0|L%9ctA6s6pVYr6 zeeAKvR?H2|*<7!4P0zKxwjhS!O{;9Q^$7|+<__r}pP3?~gL_mAMucizP(W2dZz|5{zl|7*oM`##E$D8uXOj6c55 z*s|}##~62f5B&KajreE&pa1!vby?@1e|~l3kw;dC9(rhf4~Myd^__W~IRQJs2Edl} zKwkz|_Y8z3_YSnfJ*C$ev=hqsYXi&yQ_TZSa{<^j*@AL-6N!E1Vl3Wr<#1%;Uvm8) zY`{s(#Sadqp*I!&v(P~|oVSizdm2u!8Gt+GuGs@ z$PeZa_f>PbzW?L6XZ)G3!3^y1W7c@)_}9Jeb=6f@T~*Hs;GNfm9RAg>epO$$pLEhm z_5Pl@1e?OP#6RO);@#x$V%)^Vw&dt$85k26`zDS(AlEM7;$8A4%sb%@*5Yrt#NT;Z zpUoUh!|B%y>g4}3(LvXH>6AfOq7MDvxmNs{quGP8ZgY*tTF&zr=Jg|vIHF?j2d<}| zetLaf@UQ>+uWjvsYX|ajy-0bi0n9PZ@fr6V7XRt`eu;O+UfeS`+++u(4P<-hWD`yJ zXUxUB34iumC1zkJehGgtZucktXY!0C=Qj-Rgg-ce7kUZ2!RQ{$r_#4f3E9U|GD00Uw8cR$5(HB;~T51ufDqa z&Ue03{nvl}*Cfm{{#+X{|Fe&9{?GoOZJ=pCpgm{=6a3mHspdg(!#qNnT>t0wU;JGQnz%L~*7DL8jAuJ= z4#>R8HnfY3dubaPf5O=Yz&Xduuyz19tUbW70r2O3TZy~4O&9<0+0)6>j+*dq@_p9* zi!Z*o_Vsdo&%XZaU;ny(X2-KS?g^0(+rfsomSj$$e6Rnz!CrgFHqa@o4Zy`bhmnbY z4lC0Rs2@X5#u=@It=ePJgb3WI6-v4DknSI|q2Y641z<(<2O)qgT zsyoXCocZ@KG=W}Sb6W4Jv;Le&-|{x{`%^eV~(kPoOPY&e%u%4z5w$) z_lWR!_Idg|>wSLSld;DJ#J5|neTY4A!gA&EYy-%0oN$vJfN@FUo$=3MZJ?YBv;*ga zj6b+*190NvFJ}5F9N9GSUoCKYkNM=51$X`je{BG~z>RA))@^+njN{&OO@x`>!CYTQ zSAQozc9gNF{1=LUwi7TXu1z%YYzH~qWCz{Y19p&c*Dl1LxHgbExEt3d@#0QdVz2LK{L8tZjJLB5<>g$Eai1!j?Vz-QGA{mk ze#kaJy7AH;z`os_K$>#^oOvMQukXXf5I!CMkNdTMf&Y^a((jFD{|B#(KX^i5i*IKF z^Nf2r&o|*-+JLsuj*IhDcF}3Ba1P1#kg+erVy~PyVdY?*?LgZQe>ixTcA!k|oIu<# z9Q@gDiBA&;)6nZ?{$Dko*S-7O-~M)8p6h^RVhiG*vClRDuG#>0AR!}7+)JOQ3~itt zzAu(sI}z(VFBk^@95&v`E=tUs;^LoeBHM!YpiKNr+_eGyKl?0rId3Be)6iQrXsZ4H zB>Xe(mRaI2_O9PzTyoR3o6N<%8~$S0K*qle=eZ-}PdH;=hV}o<#UI{oPRMqkZHRrg zg=`1e7Q|nC%K7?*;%|A{QxpDTDaM&+e^;))yu=+jGI^QaF0O5mZn%k;n0FJ`7Ubl~ zHUYlaM8@B+c93mAnV2_m?SM4H+JyFy@z-B7pCE!g6B0M}Czu6J(mFFSCGPuOaKQ!Dg%@5}En2i_5?yrB zMHR$zBDvulM<$ua^vrWwyRhZc7TT2ckP)|?xy^(#(I@+b+<4~n-ToVfJ2s3J<0f}p zIUDi5_r0$=>#VaTIAPvrhR!(SjQSjvoNvEo+_S&F5d6uT$#UiG(sDXsiRb<~jr^vS z^3wK9SKqpGTpiM^OP=+!%sjaqb=&byx}?!|>L7pCZ3-h(PhQF_%l437%FLT}lugI~ z88nZ8Rl13#>r#8GR-`4 zb=CjwcfVWbHLf1zK?~7%DxS;F;W8hXb~*pAjBc5qIOR9BHP_n|ZjxDES&zEb zV>*uv(HvP`q7W3O+Wte zk0<5H@ovJ@ne~j9va)SudX5v$am&nQlsaWR=lR>e{o9E?PF1e?)GN8^w#9ViIj+uB zoIK`(gC&@PZ4el@`y*|+IInlwPk;K;`u$zb;g|I9|NiflM4Dl^x>=??^D?Zy`Q=$| zSguYxj$TfiDxdmt^BR{UHw-si%8h589M0uiM#(KhUAcOumvQyrU_2ug2^ipOVp7WU}r*|99c@1Y?hMVG9)~;%kB#!8Abc^zDyq6TBlf5`?|<=;c2KVA<)tzesNUW3K4Y%YO_S!R-lqBhVXx-U#$Y zpf>`&5$KITZv=WH&>Ml?2=qpvHv+v8=#4;c1bQRT8-d;k^hV%McLb_GvA_SF4AmZG z{J$oruhWZ98j#+2Od5{9-gr!NJW7A-#U~Bm67x}Sd|qDT^Cz}kR+}*VJmHU1VKe#` z5R1Q|an}3a8-d;k^hTgJ0=*IFjX-Y%dLz&qf!+x8MxZwWy%Fe*KyL(kBhVXx-U#$Y zpf>`&5$KITZv=WH&>Ml?2=qpvHv+v8=#4;c1bQRT8-d;k^hTgJ0=*IFjX-Y%dLz&q zf!+x8MxZwWy%Fe*KyL(kBhVXx-U#$Ypf>`&5$KITZv=WH&>Ml?2>dCHK=0e(FaK|c z_b~j^!*E&5G1*S|jTwmFnv(e4(H`~2pl1Vr7#q+J;reIx*$^-FpXFqq2WNhB1mbsR zX7{K!20a`2gV_K+2;q%J$#LlM=WXJT zZ7i_YmkZ60wl)!d2jPPd{>Z%TJdpPS`0&#Fx%TV(%rmU*)W`VY=c@#*8nk-Q8bNCo z#BWnhm&!7F@g>Lgk9kb6gC0#i2KdZ$X|>1$;dA)j%0c}0H*+lW0l(?$JivO5?=I~g zz_p*b1m9dTIOGK?{P`585DT!-6)7_|i~WPA|UX*#5DO33kw6X?D zU1;5)1wr^9YXS4YN;+~8y-@#W9$`+w_nB*$f2fx>ZydCF(3U}42W=Dd z%AjrkM2Wt=6vR08Xxyf-t3O5BD*Dwe;a}1g5q?F`Wc_`-3fetr@1WNN?H_bd(7`P_B=~DzAW_C2E7{K; ze;)G#1Ft`IIw1P^QV~7{?HBawpnZb&3fe6Q|Jy!@d1TWd_6F?B*`tpI;k)?o3-N#E z5%v}MKJ(3XL3;$zo>lqt7U1ww6ZrRN z>Br!-7{8M6t5bsB9E6{p5Ohq?5kaiC`v&b2#GaA$nK^*_hWPH%`ajnVvw}v0So=2! z+98N_{-~gnf@tTvgU$>(C+LEpi-Il=`aq&fBD^$|%lLB$Gj8SBEls~I=jG0^r9XFC z6k`Bg7<7Knxj|amfVp6wAok_!1>v*!Eh_Ia-hVh+GpR}aE>@!_TM|AAIs_WsN#JFT?RN^d{-;Di6)kw+d`EnK*; zN4+uV*}xx(4d9ap9dywD!$&Ul$d zJ+?z`-Ax=F$CPyXl;hTKS*De35Od2z&$bYjXs7LP{FIp|%dJ-(IHa7i>_1`JVL9r+ zNwZw*w@vCPhm%G$Eb4r(OJj3?UIC&-W!Ee0r#wF^t9pohs-16YcNppOW*=F^vPkqv} z%syB)dQz@O8RMX?^%8Gt2Xfm(x)^2|VaT+y9O_jcZry~@g+t#M1 zhI*CE;uslqs}ZtZn=z~V`v#o^^=B;*hh43xZ#HCV;}oig>T}c_-e~% z@!c2V|J*<1nIiWU7e?7%J^%dkYoDR*5bc3G&dTAA2mQ*rgpujvlwmpQT277|hC}3$ zo8LOg&)8Z{=C+k|%OagJ$d3$e*fg<2jto81%xgQ4o0fHz=Xwc~4zudX{0G zrkjsBO&!a#UDji|V`QI@6IP%6#+9i{+%(4$nQcdA9@}WW>X@FnWg?Rt3(_F_YP$K6 zo8R#=4Ne+uP(~a*#{s!yTeH69TMl`Vp`*-vmIE)-)F&@^k&d2u<+%)G#tAzngz^9L z&N~nP|7!T^ku9Iack$t+UH{3uY7o!-j)}4#KIfcs>iOrIYp$uTz4qFgKJ=jvRUiD| z2dk^EzPjdwue&=-28^Ai#Av{a?=c3wqrmUgq7O|^>ZDRYn#wF z4Y~catgLGr)FEHaPr7YJ{^1XQxQ-*YUAa8+TbAuqSGjE>PMTOMM`oJo#wi~?t6 zg?N^kFLT1=wXMc;zYUW{7^0oTA?q+s8Zvbq6Vh|oHk+S4z}aV?jsHI!zRELso&(^! zFVz26i!vts|9$U!U)^r5hq*q1FIu#yzGk}UqKoP{*Gb4Tk)|B|3opE|y5NEfD)Yc4 z@?~B0*mvY~>!c0nLdej`X~c7Rxs060GID-o#A&P7W9m_6E}L|&!I0Yy;>dHIIjo-T zfakUnwjT23x|OSwU^Au_r%rb2`K@XW_n-7i* zvTUwpOF41m=unRNtt*#Jy%1@+k6BJRIc|Ay`yp;wFNe{k9Ltj1A9a-zCk?KQI%qrX zL{8j%nNt^f$ZRWN$|DYEemL{YGqeBWv-s`{@&A!l8QTZ1*Z;H5I;*}ffsxVn@>-2PgJarDTK-1^G$h?ABHnerTVOiVLRF5kA%F7#-l zq`qw?A8F*VZ2M$hbg^Z)^_XT|wg(-Fy08)AmPr^naq^gEyVN7ibn_6WKIQ7b$p=x6 z{V<*UIS+B$rH=VYQ$P33bjl}>?Vv97t=q79**7HrKPLPYpT+<2;icXGXa7H%y~X?A z|NeS!!o0&Al;NSt`SeNaS zTaN9rZ1dR%%d=hTStoJkEQmItXPt2KWqtAxSI@l2)HlsIc`VPcI+jN{gvkT9560!@ zBW~FC$xSm4a?{A;eQCnzKv_o_?U2lG8k{uCP|vd9j;UeFAPhC-vkW=CuERvHYKN1e8_# zKXVfI9Y;+g{6nLzHVjl&Nd}T&81z4(%c>k6Uh^`H(5k{V40n!lt2Xnq|Y0Ssrog$vUJ{4!UI-ma7ij zc3CcY$d8R9%VnsG%y8K*(~y&&au_4zO=W>)Q#;6K8MdwLr|EFoL%Ru6pZUvns+Y^O zot8&C$q&zZ%8*-*eNsjlgpHdYt}gAAkW-fJB%a%0Uo3|*EX#1tLtcpTO}Adts0*26 zly!4n_012rounBie{KVMknMz<4&LNdN88A{q@iOzx%Jt8d=lSWmj1upcH2G7-s6rt z?x>#u*k0R69P&9QbCQJIwjxtEhfSxCq?1Nj=7m!ia&$>^?9@}2bjpF753ZhaWVV4c z%g*J4DRIcQ<$A~?S(ojEt7~1zD9gGi({|-F^er#l%&vMO6+_2>sms=)r+X~Nl2~&sV6ILg4%0P#@ z^fAJgRqB$43|{Kl9`lM9al_<6FLTn(L)oO;u3V;h)Hjd(;~)QceVu@hvR7~I*!N(xYCXuU%W~z~d5+r-@|oBC%5t5`vTiA(%$$d|sjseWF%7w4@;0>rS;ob( z)Fn+BoN{ajI<|{&t_xk-10jdd$z>5n2IX?qQJ=h|Qx|DDZhqvp%Qhh+td9ASmt|Wn z@|?$dE!(o}5B;+|ZN_@x7w14Pu&H-*d`%By~yv$Eo=CfRNavUA?tk?47)@_~EOI-U`hcXCTrtQde z(kJD)eswJ0vf$_$FUz*>TyMr4Ib~`K_A8f58gkkIS05e1>MB=eo2)~5ZVTaDj%kbo z@=W#(8R1->GVB&!WuWtkPkbV;|K9(9G1vdv|6Tv7+cwxH+L7h-)&8sF zI2eZ`Bd@q9lT)TTgpDh+4(leLdT`riSS-<#NTWQsGTVd9bad3qSdvG%`nfF9(8=Wx zwhZ&5hYTWYKKfvOIB{j@P!{bqPmWuM`nep#q>U-g##|Cpu5%wi%|~5_+_ccN9D`#j}bY^~RuQ z1LHQpc|Okk;VazB!;c{MCxl&F4eR^J^?!VHS*`z+&AFeu?z(Hz9)>tl{FdPT-N^2c_iwxU9^p`*GR+(8@G)- zGvGZ%{eNU+q=LrA#%ew~I$BAl5jUKg`e zXs9l)ESGfCO5HNe`q7uNjxxDvvuDqq&^Ihs7miG7iYqJg7%%gxKR7rzQLZ|jxcYF3 zvJBI&GQVkX(u~iVHESZAWyqV-EH}5Ed|4MA^XIzMn>ll4U1!ciSUGy;vmCg7f&a6X z>sNBuRQ)N-Ny8^O8@a6gpEHZpMV&VqL zpXHIRPUgz9Z2tWD6_nGI!70=9dGqGgdT`}gmoi9GHh1paiLi1xY3QpvXU?2DFB~Er zUBkrHDdof^^wc#kybQB`lrrmtldg_o)&%M?E~gxInQze}4ks;h!ls*_IP;Tn!s^kM zvP{uB~Te2lYxrlCjr-FM$zpD|w6{?EB%>Y{$?)%Ts3Y>#Pv8-Y2k z^nZM5l~q=$eT#4t={KYqhG!o)pXp^h%keei`kfqk4yz~EFVP{aZjLLLo0j9q@R>3# z`z~Sf$a5H9E6YGnAB4AyBX3H>AIwKsJ>_tTH0;^>lp~Xrp<_66^zbQU+3%EDPS#U~ z4wU0LY!vC(fA78bPMU+9lbDxmBkgmJU~XXlU;4j3EXQvR>vNem`E@BHZXUyO zSFaePRwTwUau^hNWuOCwz$&Uu<-rsIEv;n|<{ zTkOX~jD^fi(Q!UdA9?nF*Z=HGgz+hS2|t1(lU@q{-*LwsALhNJ`|rPh;+seA zMfiphYrQ_7IpL=LKfYL!{tt)rP5st598y1*W14y7$}`93jO&NQm1kat)yE$V!^^nk z;XkHjA67=X`H`uwu5mbi1(%G=r_w>M6Im`kgAbysPnwT3^WrD?jQN#kSs5l?lI6fDql_cdKh2Abu)4HC zUq=R&apiEzgOpi5K2N#M3Avn{hjjgd>wm7VU03lL*Lbg`^)Y=9e&2of)$bSMqsz$u zkJkUGi}ukD+C*4xm^5|ZtpD`Ge(IlaeYWKKqVk-_G<>ODxJ)bK*`LcWx+S5L>muEJ za`WiB%HhZ|Hw_2kB}}YgCmnuuDb9{<|)(3uZ(c^RqUQLWu%uf(v_)8 zTwfw=e!}Xi)0D10Ts_JoERmM$$UdwNG6>zAp7Z7M(JABjym?6@t`2hjpYH4hv;iFCsF6?$1t zn(2noBdi~iN11Zt@|;&0Jo}(|l@0GaT+MoCJd1yKJg0weJZC>W!e<1X8FW_A`{TL! z*)yw|=gzEVT`;SfH-Egm?01$``ZYdf{rH)_2G>8~Jcwxxm^5FUGpO|pIpCfmu4NL|9|G*GuX1Ly7v`G>Q;B3(8@XIEFnOE zkWfMy1&|0L7!XDxT>Nl&ju;z*vAGwF4R*ax&sFAeeeDa%2@n~ab9(vS=NCV?%AZ`W zayjfbe)H_#x&Izo`<%w=)7-9_HO3rc%(>?2+P^WwT6=AIMA{C&b#>#6p)SAngM<@( z_>EEGN0&$KNbO$B*zNahpB?Z&)bpU9t@7`y{Cbt&i1M4I|HmqytMcFhvz5bY->|#p z@|EIwwblcxrI#FaZ1X}4xngO#=K72+eQBj^^S1W2Yq{oM#=vzbT$5{~KT_r4d3mU0 zjpN|A9=tx6!#14Dcd{?%{JrSp2a2(@v#ngP{)ZKqp(IPzvB{k}>wnk`{$X}segAh4 z{>e4)?id&s>j9+e7Uz8=cGfg~{@;vwSysZ#BHp`wDi&K7+bHqDpHkg6$*8uBHC_&p z`n6>r*kG&sXd{pMi7{TEHu_APZM1cn{m7)e5{peKzuK~H8*NHH@Aj*Xq>Pwi6E3&E zuJ}*(|3mQwcgZ~re!fbvw|sc$0es`TGlw7VlWskV3<6l~> zbAv=$x^cvyYs)x%)>CFYO!l^LhOIL$zjB-Yw8?3gaB3gu-Jf+C zmw%+JC-+0IIh%Q#`FZ>6i+|^R*k|r%?sd+GznX7hpE-E>h~oK(;+8x>sXArpu;Q!g z_*Rar_59&gpWAmGRy@xA*&f@<;q$&KFO0Rve12cg0bKjBc_9zXbHKs()%-92wZ`x) zPtG$3$i18s!~cVIW%BR*3PDdxZ;YZxdzwD@g(co85iR- z7fj9nu+>ZE0QHpUvZn0(E~@9XY^$_QvO49%MvT7X)3!32b(v0^ZH<>>CH$!yqfLAE zv50Z)GMjaEWOA;qq%HbJWurbuyJ8;hR}Wn)hrHpC*#U4b`>wg2hv9L~KJ)O>(KUA; zS!^F!%$Hm_x>!G|Y?P|2?>e&P<|?blt`3QP#Li=ukE*;;W!DiES7qsln*X^r>wK?i z-g&%i6!O4)EpX6%2hG?sxc4v@5@z?b}UmY3`}@5_ElIK%(B&wXyZ z7XU`9FV6q=`T9Tk=eiW;ek5Zu515x^AIbdR@Bd9b`z!0o>XZ(DGAoP9DSNk3haIH4 z?NiDtHuSxf@@o4o@zWR5LX7Q@@TAYWyxN~J@JUQ(+<5IsY}RQ5n`uiOAF;~bA9d$? z`=)N2;jj7r(8DT@xu3oHVa0!y?f2IFFZ+GYhd=k-a90d29a|h9TYXg7b#(D}Y|Z({ zRSqco^6|y=ag`U2t2_{8*zr}_b!_o|%vw9zE*(>B9#w1}Rs3;%=J#0VkLy2KwkOuE zZw}b@&RYMkR^FJOC6Eh74w&!f;hVzT&;NyW=X!WY$8TOp{+a*fU&g4z7_4VLki7>V zd~m!MU@Q5*^2#g6{7xEvjqpl6KuD zUnz+(R;eE!Iy`AZX20n}?{!$oevCoN9n!jfSkq=4b?h>!U)Ghz+lOsZ5^KS(o}6Qw zs$++J=Y96w?9bVkZ+~O)-}m~?yRZ+7u+Q8J|0fjxCl>q17kekxx!VaPPb$_ZC$E*| zQ;O@kzH(}(WAu@A;+}YMR?J14PzG2rkonzvXadqr) zMqR0mdM{p2J1p84wyfJHc65B%&Uo#}sUp{KiB1fX_S%#gOB{B6T_*eJ>;CzgfA?W^ zt;4I2n)i1fSn#YUpAx|q=W$Cn(UR!0usX~o~EYh~%w@||4zNo!@CGq}!ot&e~-we(k?qG(H9l_)^8oDP4=uKwHZfUzq&E9sno92 zj-(Ik_>)!a7JW!;J&tyvTX-KjT*LSo#rm0LKfAa;vv{7DrL)Rk z#rn$GwRRx3+Uz{7=4oJ!lYh?Fnah*?oabRmU(UA=Km721<=-(d9>=5( z^Z3aN#_=~L|DEUL5j|N?-8gMn4WZaiy#=KXQrS8M)5kF1<9KcnXi zZ}8vF_&sAA48kJJF$Wiiu)EIsS(O9e`|M)voZ{~6;`*GbpIf}2TWkAsYJNSt7^hyo zUFTGp$Lu__=4f)nJQt8l#+pCo_;KdP^}jeT(BY0H9YHoSdt$&XD=;F$rtl2Wk2wL4{HnFL&UWhi`ULP#JC-w z<0WpR^*Kb(zA~b>p$4)5aKWSx+6V zvd{FP<5v<#y%+syPp+}cGmIza<^p4gqd#Mm*uBRG|IGcnkElFwWbONF?%#b(J^x$h z@7um-+w{E8yqoO9U2(YUteQ*DskyY6mv#7FIx;90;p516k3 zV1BBwE-(k={O|hTwKE)j<};s}Z+%C?-opG5T$O((q|H(5vQcqjz`jxO_!A7x;)TY$7k<9k!GKy5!u1(2x)EC9V3qGas z){$LbWJ`uqCtjx0t}fry(J9#`IZmItex?0dM~?Hp`TP(2%=@hQ;h%eP%f~Fw4tZPM z|BL&3WA5+l!z88n-*I2PFYWF1{&*kmXR5Ruz%$F-Q{>*^xEDEJ1CRrD zF4ek&Gk|(Nz&!x$yY6?-kCgpB|HHrYKN8kpsq5JAVP{T;e;6(H_a*7iun(S#X>6$*(`_TJ*dO=&IPX8A zxS#XCdUQRbSNHK(kE{Lv+lsq>&hNYrkMPHwOM%U=RQXz!uUGj-E8na-<=a($tIBUz z`Q0kNH!tXv-q$lzDzQ_(2$$-rse;{8M)ipe_0L`8t@H;>&qe?va#79(iQEGqCXwyU+Faf1kzw zqmMqi$9jbP!&n^~W2ach$M}+eIFV~*+TcI!`nnA}Y$)+t*JfRr_OzuP9X2S&s8hFO zj5efp+oV*7E#u@5Nqd;YmodpHcI(DvAL_;+DKd*+UHcTr#0;M2{AZnZv{A0Nuk$|U z|2@w8o%fHfbMTt`xmUmazT!X6`C(uFS$oSr+%X5kAWTx=lOnH~7kVC$b0n-&$P<)r zRWWyLlmo~E^K}5JWo`OE{?Xpc>f7gvg%C)gb zZAjRjsvBp!5yN?Z74G%3_TPO}wXb=fb^myN=lI&g*FAUE;OqDIll{)U?89I(&wSn2 z0`LsiFwR_`b3XM&xnQ$Az_sUVfrI~>;=i6H;@Kmf9U9LY)>#1OfZP+@wKC5EoCD6+ z{yYnyt~3X54j}*B|AYUWPg8eZ<@@yL)@j4u97d}z*Z=!;{+EApjbkz=A+yN8Hu&%N z|KV4LWmdV!t{<5(@`qhrnKtzPER|1S?{?(9}-`l{jv5R=YDhcSC23M3AO(}vF3mH_Z}boGv`xW^UJ;S zzU+7Ioxi8p@9Tf_!De~DwSap9t{wa@9bfZ%tpRw3kQ^}11M7aknE#7^&i{NS(0#sZ zfBAPkKt1`FFBr>tHF-xT2f!Ds!54G$R`bsq{;|g%dlvtWh4CC=X!PkBdn=55zwM%;Y;KhFJ+thSu{9rIu2{?(Iek9<<`U*~q~_t|p4 zpX+^?bG^?R-+e#K!@JD8o`-Aaec1o~c`*+t%>%h6a9`kBpyz=3dBC zI;H0W^MLDtMLB@n!y2G+z(GH7&}`=k_5Iyr>pdW~4{!~@_lU-Gfjkey^MJJm;QtB! z%>g;*YeUKf>wo8e*U-s*>g>VI4f3@=_-8JMZ}X6h!#nn#8>sU)_4U7;$*6VYlx-t> zwpE8OO4iZSuC7eKwncJ^Wn!`02KF+p>-tl6oq87fu%4WD8};;~TQXJ~Qm&EOQ#VGr z2luWM=6iph@n`S9a#YRzwO1Z<WY{^eUKqt=lYeO(%xcDSRCPX?)L zPrdtXV~qZk@{0{!nRabTSW`EyOL;Voy8Y`@+EzZPt0OZ`J2rhtImb?W8P`q>Y}?Ly z`mtqM&jrQ*c;2`6{_wy1*vbLL|L&7&U2t;k1?qb_Ja@}I`LW;kybtyl&HKr|+{?V& z!!Yx^^Zp-|{>SrzPU*RT_{;q(o*Cx51MA-*s&fFIY1(;c<$$^m$g@DK z|K%S^4#@BQV&m*D=YRNr;)y2)GjQYj8m=rb)$Q)Dw}}7CDnH$G%{A9N&HH>9pL4xq z>~+TH81Xqi^IT`Q*I|%?z5Ax>-3CW;tRyDwS@(MBN1v)|mrv?4sc%Yh4dRkd;;0)h zkJ+E`O8bC4ZAyLA^~*N(t{azjY;vA5+hbqnz4VM*f8O7-zuNnAzmMGN# zd5(7dyw7$2)L9?wv+ifD?;M@X%Wtv|_kU95Pv;Vyf_fhZWh8c_cR2M~A6oj5e?dqp(^9X7|MroYwjMoo`lx$;+HtRA=-F8ZurQZEnCyqMOwn*D+Cx)EBb3cb3QR|0# z=AXU)?&B&~)ZTyPq<%9aZ-u8b}^MB6$o3Rg%&iQZ(_wMIq-#K6Q;lJmA zsXXA>0DVs70P@fLJdk&V`dy^41~|U<0K9Xco(UZ99jbSXaR$hHN#R_w(T_b?UO`*}rx3 zfzntd45{}ReA;ACX&a=rl=`t{jI3sC+F*k^e(j57#?WqW3ry0djLNNc`axG_EH*hN zrn7CI`s@SV2lMkbd+^V5f3^4LS-)}Se{!t>PAm5L{$71wZ~Oa-fA00U=jXgH@A2il z@7&+HcdgI5zO(=5WwZQQ>6D%iaxJizIpE+Qt>^zwFShIZ#H***JBC;T6#qO2Fy1Z1 zGXT6FWWN80e~N2;xbN$LDgIqs!@GRRll&XAANaqU+`{_@pM3JkF&^_0%rg%6C63h` zfR8rGzZ@Z9Q69Bh*Js`Ml(tDJpW3V|v8yBZru4q3!;oz|&l}l^g&|6B*XtPvfBJ2! z#Aj^EWH)1FS-;F{r_QykBWZ7*FdpW$jlOu_2WS8A&wYQ+{y6hLt=9gv?_W8qazK4o zciX?I^}p->JnQ$F9@qSy@iX^3-^)Gx$~_Xk;T-P&B8qtcX&#u`6Z9P5SpaK~`F+8I zeyq;_`3@oP7~nkubq>HDV7yDHo&(}tgzo>D>nZXs``TO!B>%ANyqXNj6`aW)Y>^XK zlh4=x%>Q>+*^>1?{5wA0>BE@FPrS3t!r0P=?*7ETQ3DfPhvIuf5Ord{2*tZP%sW5%FsPl;~H7EAPjiSxjNf1>99v+DleY4uEBy+eR^42^dZ@hlMU6Xe~ZykD4i zlh5aU&;8_{JdnCv@crMXo_cDq1V_EVl6)ay4hdhdxrOWhyRW=aX1!o0OPQZ zBrj#%^@)FHvI|F+w9Bq?Z(@vvFAMF^ZJ%}R#-=nrW9Z))I6_BK>^E)3BH>S;QWmW% z?K7o5`mvo%!yz^#wk-P6Cd0NzrcGU$er)Tk&)5IPajo&4|JwVHdw+HIH=g-BWo_TT zdRFCun)~_Q?)LXj@ZaZt*k=xQ-Jk3HJmc&0zU=>x)s{jYFc**qTn~^h%pG|)$U38+ z1+WgOoV4u&+h#k?s_*}tv9|L59{QRz74-|E#il)N#_2akX}|j6t+&B8<;R|d80)ZQ9i5^NnYJmuyPp{2)U!@}*7F+J z_h7kLw~yo=n>oOEBxnE3|GevC_tEovfAx&qO7XvXX6*^iuKVKko{r`7YyO9S&ir!U z@1EbeAND=#cix9nihFtIe3+JdScm)nX)ZGl^tAx}m;+c(kYg6@11bj`{DHdvSMM0% zeFVHmi1Unb22jrdjPC>0bHMP={GWUNWM7^20XaY}_hMj$hW94s3{$)x2QsT3u9et5K<9grLVT?HW?7DsE?=t;?}`{&ue zdIvYp`;T+~GuQV0%jXsw7Z(5DKj+`IzjMFryY6T1XFi6@ob%xx=3Un#ll%X<>K5`q z<^tku=YD`3kZS<<0eL?F{y(_JKkpY}4Y2c+S_kkRLEbN1XMp3ofc(w~&j7|*pE~SQ zJQwWzvzAZ3V97jyU8c+l*xX<5ule6`BA<&N_n@P z@krUucGxJ`Xlsn$`y0>w^S%E-p`0`ElTbK=4XKieX!2|&aZoZyjyI(2H*@} zJPR220LS})Cf)Ty+7{xk8}T;`&TclGXVMTbH8W)eeP#2 zcFmvjzTCUMhjVzR{BQF@4loa3pUMHO1?bltkoy470fPUf3)l8ADP`6AM$%Yh##uLaSXUAYGqzEeCGAS>%Cw_vN6Kj0)bSZZJ7ZJA z5p{XoTOa+}CZ%lKPcluMex){fM_Q73Y|it>>L2ym|Bq*Xy!X%dee2%e;Gc7U*8Ue% zxwz*4`X1f-cl-L!~Xvsh5Di#;CTS+0Qjf42FP=O`MrRH ze!6}G`1~ES9p_Xzv+e=#9@64}JPXY4lGM9ReIKBFBQ4$&(8pRJ`Ij&FmVMZA-H#4e zvWKKi@c)|X4`%n(^M8BrPp*-9$AP3UM%M<6%fk9U=YLsJ!e|y5)}M9b@M+gJC5e+o zb^F!cWyVeU@XHo{`@=>(ed5}sAvD@{B!QVd|s8>`!8Qo{Qpq#@AE#M`?2otb3gnuAH%=<{hasV-g!US z|4(J7mAiT%GP}uqppN6^yIJW)HfI=YM|VW4!aHp8Z)prPlj(M$Wr?S1zbEK&}0kE?Jsw z`)?cnp8NHEKXb7Bvrd=&i}|q`-Z*-@GOusfIJ7Ru`&Pe zx~R_n>kMGW+4UXZIs@SQ0Q^1?&j5|@0oQi`#_s{Nb3XXbb3b%)LGu5FFMMHru9qJq z=j@)f!ylaKCuguWpP&D2Isaapca_UKxj?&PrH=heU;5G>^S?|Y)jP}9kv&G=W_H&H z#>*q^(6MXlGTSVQ%NW|rth(*Ar%c^=Y!+-VN4-mJ+F>wl*eTeJNgM21Hx8RDXB%VF zXB%wzv+a22ck<7(KgB<5|8@Q^U7GPd+A;r6t^Jv6^V|>qS(nSd_x9jk_L<+4{lBg{ zg*=csz;(dhtO4Xd)&TIo^P)QM;|#FgCq90Epq>Rz{+a*ztwZN~*7%F=1?Kvn`Jc5i z+`twb$vzU6q;9qW(a;(&jTx8SU8Sib4L&6lr z80%A#7-N<8p>L{Pw9~iC0JVy0Q2y+F&&G?8jJTGA`RGiQ9wq&VJ1Q zJp0G9Kg|C;_p@?d&HeMe|MCl#XMB%#l7HBzz?^G;_-F4A|E$+@?q@#l^FG}FpYt-6 z0~W0Tau2{7px+0maUJxb+W%iv^Ztc3@6VqD7{4pV?-Ke9VDZoWKjwFG0EM-Zx{|p+ z`RDwP`Cq=0D_O#aUCBOyHThQ0|JPrC{rdBNTsw1-W65!$o4+>VAEtVd&n`1AeQ95m z4~UUl+rm+nMKO!wZEL@9)@{_W>r1H}u82cwvt8Qsr7d;)kYnQ2jkBIUZOJw^>$FwR zSZrw@XM_Ca2lM|i#e6;cv-{Ngy$_!IE&f+7tQ=5he@ic@_5Tmo`k(jee7y?i{;dD| z-ru!9=W(#fIz8w9&c59LUlnH|4`dD?SFi?f?ch1U)Emrw!wr1p9v{Xm<^{Q9 zf6d+;MyszaS^wW~!wuv7pKCET#(-oDa^A;fy`TTdE8L_mXG&R?%Z*}f)1__fBmMBw z>)MD%pDMKJcG<*^p3+#_8P}!pa;nsx@%SkC)Kd~`T^%XA`lzcTvpy9o>q=tOk)s6v z<9ok6`^$HJSpOIQOBdI?cv+qQ$^S-Yf3OFG^6&FKp7+7Ab3f~RScm)nI|_C9r{q4s zHGur*Ip7BO0T2Gj8vi>ksAquZ{PTU_@!P_@6TJBM9RSSjGVfkr<}(K*|MCUC57vvhi zv%r5P{|9}z*8dmReZRT~u;bjy0sPJ&zfH>fz>Y3`KL7JO0J83SpM0R6zU2SQU;gsg z`@^>LEBwoPN_FS|;{VC5>Qm~cUv(wy^*DTTshqOuL&BN$)b(jgiJoPOY5drYv%j=ujD5(u=l|5# z3%~al>wn()!~75b-ur|99dFn%JLsnl8t3T;{>*{1gFaIFN2`47pxJ@{_Q2VJ|E|g} z95{RaC!aq%@Y4sbo&RvGukY)BD=2E~my(S4Yyfb$zx;NsM(E>bf>$mW+e5^jW8G+iO!|NAE?u{Vj^` zoXa)w=(O)P>*fNaHl+9eng4g6Smywo|JCY_;>BkoDchZ!#`_)$_IyhU;R$t z_f)yJ%02b_fp^t4Z>uxDn`#`_7vry}vAnG2`pZjyVe$Tg8e^URG5?Qen(BOmcLI;! z1enkNyaR#XLXdZ)djNF!r?3u?i#-3AA(?_D`Nx<1v;Jpp-h%o6m>L_;|Gb*M`OP8E zC*&XLzJzgcPr$LsKWmzN{^!(FPo153;)&1V8@4;oGN|laW}6<<>$0pJDT67E!={eR z7=7IaGZ{NomrG>!LtR#t_>E6pn{ipkX6bz<^ZJODV;HurvFX#6%o9J@uk(NAJ=g!7 z|Bd;-zWX!I|L4#CF#p5<^2=(jyt3H8x_FxNzw=ea#jC5luF4yCu5nqv`8oCgi}+_> z@BGhvpL>8s^S|r=;-7aB!2gbWi~D=(cSi55JaB8(Z>aip#r@SamMeiUq>@foMT+ho-^>XxZK(xHW+5VsT z|9!>#Tk3a#->`k~zw@rT_N_IBn~M4CYo5QV@<7f1yIxxSUsmkb`i1pB&j63_0M!0} zXT1lI_kfRgfXvVTo%7{9xhEG`l7Co%9na91PpQij5~gIIoWP!exp_YSZz=z*HONcO z?T*Va>3i_O2iM2>m9Ko|S@S>qTg(H=)*^m0MvfQBsXlspn3-yiz5BH7jf7L;EDZ5Vpw(CCl#AcCW?OwzBRD1dEePFj8I{x+k53js1-~Yq^?$hcSVD|ss|Ep(z z$NK-pYwLgbU%IAB@z45y=WR8=7Jsb&civm&t;OOyYW)xYdvpKK9N>L`Jo{sv;Qc@6 z|EdrE-&{H14K?R8|KCyiEr+a)=ein0uK$bwU6&NQwf^V)pZ6K?9w7Grya$;1f93GX zZ8iUQ?%|yrkm~{V08{+K7e%hj0dj90-e8j7;oV>SGlm=+tY==rpZkER^*_u{mE(^; zetnLY-_9rYMeBZIZP!`X-ur_iY$>yC+Kt1u$ZiZ$K8Z!Qo%WP)q~G}Tqst~@=V{mD8$>fQ@jkD1^98_)mLdw+MIQvBEYfA##@57+&_l}qXzuPz%e|fQUb+Lb4F?C}xb!+i{XU)C$lw>{r<|_AXz<=HYgzvl$NDfH;``I7&5sUxr z@2&NJ@xSBsb*;OraQzy`&Ks)~|2wWMTh0GFUR-wO|4Y~Af7k!xec*Nf-}#^40UP|+ zZvZ&Q=UM>f$qf|zQ~blVOrguY>jCRX=6`+e#Z5E}QzYE|d0!obqR!IuiD1BcDk9_N7e;pXf^4TgR7v?9TJZEck47XMeA)dH=4;1FtI1Z>cd=QSL2m`?*GC6co*pW`Cs_w`+wv6KlT2f{u|)V`{V-iLh{e^f6SFIBVX{{ z3w{cW!5i~G>wg$6#gEO3|NM54{5$U_|LW!jV|pHd ztgFV|Cr-V)XNMqHht1GopmsgpkANB5+dHuGf zKlJol*EeG8-T$or$GgAl`QI`BpHVsB+$!f+xwz*4ON$Za|CiJp`0`pWUtPb0b8XH4 zbq2We=Hl-5lC=le^}3Sq|2@Hf?g4xb2%ahC0oMU?@4WBYpJ)GQ%d|@cV!4|KSRL|IA6U?wFO1nelc0 z7qRXdKtDME{p6ERe%5*bb}Vw7b#sC;edxA<1?tJ3HrptTF+T0uY-_A_7}1t`+OS)? zow{rzsT+&br_DNYs=%tTNb1BXZPR_7f7@V3_xykNF|}rh@Bi*TuX2L?*BQX_3yb@g zR4$m`1K=Lu@(nd-dIoT3@%Gx{{|&VUe@pF=c@{9g|Lb$W<^aD3L>_>1asZ{XpL0Kb zRDJt9>)fx_{yXokYt?nf9^}U2|Jo|ADErIH_L3UUi;DltivNp>;kuW>_kYLxOnC=r zegALl|M~v^eEkpKa4+wy`#l3RA5fQn-v7y3S@u(+%an|nA13&R*?o2X|1ADxAITW3 z!#ah!I+DMs&;QA|oMY>D*8#}A*%$QZ1K?8DyDq;yM@+G-%{JEM)VfkWttV@#+unG5 zQ?_gaXU3!321#9;Ql^ztarm$!H!EIaDvtAi?*HZdzj{XP1;dW- z0M7tD17HuZ>y9e-RC#^Pv-KRn;NR~6xeqW0AfAP<6dUF3i`F3oc2U3T5$B)jQrt_a%tINL< z`&2$44;*{!vFluSzOxR0){}E}eR8@;!ka$%>~-zN>W3>z`qlO6x8D6Qr!Do2N0<4o zXI*|%!m{<`+W8)z_8zBi{Ptg+|MA-&WB*^j{d4H4^(=7lzx&+!9#FjhXXUb*7wZgw zJ-||(0WM!%lIMVKD4uSqa(i*ceE`k@>si6^J$#-4$~6G@1IYoI2jJQ@fb0E5?9;wt z54rDTmAJ6@;2Vw2Mdby-+xv*3UTeW6xjnJ@@;TFE7?v>*slY zJzuwUYq4@iovU%rz3#oi`p!3(&U1ft-*3kQRo+|tf4x}c`+<~t56Aj%0rH*z-xa|3 zh561Pdj;+n`aK@LKSbdSkwOfG_=?%~{%x~E-dX$q$^)D=9P-A}UsrnF3*cVhcowj7 z(vDZw*lJDS{ebm7LH&I^3+!0{zi+SoQYDZ?lZ(XK0svB>t+$%f#^o8$vzy7@0^M0es zZ&vwSm4~W4T;p9@< z_ivwVe^-^dXUA^{Zu`D%<6Yw0f1vbwry%bY8l}EpI3%`u*D&uJCwAL=ORw|(ZTFY_ z-a7Z=*+Sko!1a9BH#vr}Feb+KwJMDDnJQnZ^2I7&sPg0iv*$fgf74@C9;v_Qp{jqr zjk+de-3!AM1bS=B=FnZ@&5FasKc5q+>!l zCZuz}>{I{hSHC*@m0$Ul^>t2X**U-4vz{^7(`TJL(4QZGJ2^)B+(17kzz18MWqD3} zvZ!6DFYEHDFC{)>dz^KoZM4B0dPh={WX8Tv;6NU{cZncejoi*e>+}NYYX^yJ>d5b$wTG=#>iM1GlhI$PT+6K zobXiDD=&=ygZlqq&S#JB+>h)f`Dd-{y4f7?$Rm#oo4msrKI%x<|1es8asO|hum9UP-;iqn*q49Ur!dxJpLGlD=bGT@s>42o|A*q=HGay+y0w~fA(>ab>@d0$a!GhqvNce z`-0pT7(Bx@-`{)dTG>&&?|l3GyF>L{KkJ1N$Mb|d}rkG=h1UG`ZEkc+0~ ze&>DICy#A1_mdBu>*c@i{n-a3|D6BBko>5_m+a${e{Amm_s9It_?X)rAJ=CrY3n(l z^Dnc>x3-O>Om7r3oS6o&U7Mp1f+8$0>WpsP{M+)Rui=!-q|oIyQ=2suLrV zsT-#ci9b2cK4ln*J>$~noNvFz*=AGzStsWj0RE@e0OSDH;qC+K%nnvPC*;|{!7ytA z@<4ITdVV}B#JZpgypKBHA(ngY@zt5$&ezm={#|u;&vQPv6#uX;|IYj5qp7(++0VJ3 z9Ov49KKCd8q~`*ie^`MZ`IaT>?4{w%Vhno**5><*e{&N167m4!K}VXW93!#c z_{KN(nEz!|{{OXH+fPdSOk3(FopjRdm}8E47XRjg&Mw^OL!T-#t;`s0N__B=F{x*q zc3DknKiK3Qn`~;!dg`)^+^8LXu95NdLtPtn`WXDP2k;z#budhPCu;y$bPZq*s67Cz zF5On#ysEfm-sU^{wRayp^IgGtF4%Q%3u^`ZJl9V=&-UL@xuU*j1p9o)Z}88& z&vhxVFaNpjhyCP#(Y{~)YdzGtcO5Ww{`c{Ze|)T!VJ0~;2OvEQNY?f@|FRAHy*Sp) z3sd|j^Qp_KHYIj-_WfDkNYDOkkBvOwGX(H032mFN~?v>T7F>(-SSlU$?g zQ%@oH+#9(5hkwq>lYev>lX+~e zxzSnw|Jtwp+E&j0cd@qM8oB;wT;?gq%(!G9iJkMm-2dmfT{0=FQ!?XH&)7wFV$zp7 z&lZyha^DZ5l*|e8E}PbkO|E;)RK44>Jq+5v5}O5^G1`!_uRm@0dLgdctjl+o`0cmn z2kw8ZuK}0?DV~Sr8h{+Y-WjGm2iPbF)O~v1#WUU!Qs2oL-13Z2tp!G@X9bzl2j9i` zSRcT86`mvHnLgGJ<2!xzy`CNQY%kyK;k*4jbGUvFViEg{5$==yKKH{v_dR0nhkxgL zSx@Ocpz{ysu;W}WM=9aX^*8hXXFl^8`M<0B+t=s+>-_ut4_q@I#)|G((e*J#VwnH) z`+pnpm~6`Slr4SfS6Ak>v?0~)XX+V(sT?5haw)gkmHLs|jMb;zx-yx@W_^(^v$AQN zb=xcZ{B8TrI(6C@uRr6lnFj{{i`D?}!Tg_VfW6HDwKs?T@q8f6qTf`{-0*%5@<2VW zJIXvCjI}-Q?_ix!zVV$RzE{9Ay?n>8+QU8H?cuw}>(3rc&HKqdbAImmnfoWs{KtI| z{vWFFe*^Qb_tD|rJb*6$eE*NRQl?-Bu6iANmM!G}=y@&~{F7st|7D#qFgEIG!)^{h z=Wpu#%iSWm*&0E9iOc!6HuOdC@un4vn!7ctUs2K#T>S>~<-; z8IybyPo2Jvl~e0TnYOL%jMbjZckYSle(DE2xb~T!Tm$rT0M`J_sjdO?JTUhHbq>Jy z1D9S=++0^Iq4U0=8|yrPd7QNY?+%PI-X&D|fp>Vpyxj9WW7?1B`s;hWeD`47hgihE z>wa=o=ReQ~l+;Yp4$v?cy zdFqbc@lx;ezuYN1t5bDi7jZt-54NERy1W|8bvnz~jMYayxlY{}WwOqEhTZt|4gT2!ELsDw7jPfoIRIR3mILZ+ZWr$e z;Mw7;s#G2r?+mK%3oKn%>wtPk$5_kP+F-m#i1on@&0cZiJI1_gu(;=ae!P2tXLv{c zfq&2X$V23$&c18@-19Hk_mBUB%7;Gtlk>g&!#;VT_!`CeU!LH*m)u|L{b?CG~J)&sn&)O!ZWvD~Ia zx1O<6x?Jj0Cd=r?b-l+?hfVF9>GG|lojhZcas5bRw0TYH2YkLh$9)apy#SvHbR7Ug z%%||*_W`a0;1MqCY;L?K@QPYH7qjGn@!nwa0PhYWH}DQI@&Vr=;#~sF@wL9+bxrB` zD|Y9VwGOE7^74H?-aEkiJo!%V`ZLH}x3f=fa?LOQ%=_dq*dB?C$Zp4GNgsN0 zpL+MvKK%!Lu9$%TTm$$_Am?J417L_8;65PN0qzGp6RdN&@vhK%XW;TnD+lnM;dvfd zzN+fHL$LT}ULTToinC6rLY~<5@+!srSU>R2QQkX#dDVFbVZF~|tUr={m}l;1Os@Hz z^EYCjzjeOvAO8=429eKcitk1t|fJHfA>Y0F^1H3O_ z9;kbQOP3e>_0AA@9lsq=^^pgP<>guz?0Q-8OirkRZhgpNe!RQ8zQaGhZ(Q#l=ezv8 z%Y*Op4$fWgFIw}<{i1n4+2?QP|Dp0Byfg31y3(}(GWqBEANg`Vg(rE}mv!zLZZ-e6 z-FDj(@X!3uwdLHoKF5ll_22rf-+C7R$#CaP-Zqli-Z=Z&Oqv61hs-vqXAJyXw3`QH z6h1r;MAweAV7F*9E*UpQDfh^XhrMiJQEoFy9RI{Fm)Ed zI)JsaYXJ8GQ~Lq9to!iGFDmvgDc0+^gL!}GsIwm6J%UKyC01p;ql?^7@9G<@mp;C` zU+etw9pvhVJi>cCMt}7#qA|zIz3cs4^D|EQcg;^8^Ijk9^V|b}E9~>P!++&N=YM5B z2VicHfA;_K4_9)ZtfM>E>W4|#gwg72OZNZtO^)HLQNF!?m*yzf2H*bnw`ZUJ)Th?- zoV>}IEK!$Dbp7h-vyFXaJ#DttpM7fUvbX7e>X`@7SrhOafvn2sqPljZyiVD=&w5Jq zjY_g@yR^x(OjEZkvZWoJ!uMYH$N_x~Fm)D?Ie>LQ<^b2>#s7F`c)fRn-wz(|53F~H zj^7cfIUJr>FR$;|72C|~BRAAKVZ5)W-q|tM4HY-u+h5#|_jg}Z_KT{o`c3k&2jN<| z-p{?h?E5SO`HRBeLy>*>mwobJ{eL*$!+M?tYDXsj?3Llkc~zER4!i7G$F{%tcm6m3 zI0iY-x_<+I2kZa*{hws8v(|l6?4>Q+qmv`F*;mG^r*BH{HtKMmcKVvi1NqKUn4Zc7 zX+yUzpYlw5?-lCHoMD_kr7?1D9CdsYeX>prda|uArM!3B0l!h7dG-K&_808~7Ucl* zz*G*Xa{zvChxdoCUR3WFxuo7N!aKxxk6^t^bd*{b@Lu7OC-{9a-Z{crVP2T)$9zxz zDDIaosCvD_XZgH2|BKjXy-(@v=iKj}Ki2)@|DpJIukT!sw3q{uf9{pT4op$tN9MI5 zWsq3b|NK_qR?q+P&v?vFjw8pY&A)^Bzw_TYl1rt2q&mLTtz&a-kTzqL_HB&y?zcZ= z_a*PNr=C(BJNFHEjzHd&@+|Y(lU;0CSGNuIUa}w9q>ePsK9gH~8Drg;UeDZM9?&-U zpIQST!0(HYEBKv3 zZ16s3e!P3Q+O1w#YlY&T-|kpGr}*dEQ|tXj^M11L+~3yyV=Ywq(0O0hsiS9I{`vhs z*8gymJgFmP3dYO>@V`IS|Ku31#dULxjO+2oA0K1J?id~Kx4!kQJ@{Y5o%Si&IW%U< zF1OvM-L}eZcMXBxK6(tk%ms^d;`pwCYXTWX%Cb7FksFW}AYg@+~U37LCAai;C|_>vYlD$Z>~GF-tT+;8DhSbtz-`tVRC=W|H;4O;`)@VJ63(2|0$N_tTSnB`cqFv zZJV|po4&5w-Zn^eeJRtI{1ZdnSba$DALe%r;FFTMV2WA%$*%1(R^2%2a-2SGvQ4}? zQl6Fih)bKg@_=8j&piCQ56JrgQ#k;hD6XyH&GmNXfm)lx?f4xreoO4^D(BSvUhm$A z~_$wzcuaEbPBAw&QN9@QQ)sA;|^P9xW^}D^xr`Pu5M~ACPk^%rWnhGx&|r{jvV{{Lit;JyIKE%-jY4 z`TO5+k!;D4He_GV+eVpfh+?14eq--noQKxYBZ$Ah8`})kg2G}eIFn@Y}23zh2WG~kOwKgB@ zpH}<-(~GCmS7y7-=-gDejYfxZfN0`G2VY59WGv0IZt>)I0y2mB|zg$rLsjOSa&DKg|Dkl3SSn^ZuV> zQZg3Dro_knzuf=JNHW&-9;1Is8Y`Ph?Mm&)&20KpZq|-inNMBj?aMln`v&X{JQILZ zirm9i@~mH;mByu%ZESL@-+uHdJLlOBUB6O4^}#=D0CRx*fW8j!ylhbpa6bTx^R+qe z)LlKX&i;76@Vu<>+hSE#PbnL}Gkj{*PgyI}c@OdO$(0x8am)1^eIxdyvY$|S;P~b7 z8^t5{n0H)@X`bG}Ean*(zGmw&lOy0?aEQp{NGvq z@y!0ddj9v~>T8{UuH_h#amGg7!kWdn&VO~{N6W}JPe&Gs3e zw$yE}EjibQ>~`xsOTcr+vMJlW4y*d6)&$yMQ{LrUDYqGePQU3>hi{orsZPHKe0J?K zKR)}L<$$R(!G3SRJW%I>{Epb_vBmgt#gFCqn$M3bzDut1Tch=R!{|zE6l^1=evizy ztM%IiE5}ysal6;p?%X@)Gp3yLH)4Oj=a+r{KVY34p!EC?={bP>bN}D_e{du}aE?xK zubsS2@DH>5l>b+~>Qzs$$6&AV#1l`9oTM}lIR8^e*ZIDUNCjkPaq z^4)b~wG%h^-z*0(SLRs&Ji%9A3*?@l_T~JR=Ia$O+*oc}Zb zC-<_{8G|hfc>w-l6GoY`eVr`EH5 z+HBY5RLqnu+f7|VzuZ$dCv=}NNczgUZIJM9KdcGd8_1A@aviWJ57ZuD_p$Z6Vn^0*2_0ViA6d^FM&b8{ z_|381N3Ge%?++bWd4b;{ieejVD~A>P^D^>}%;#EP?#WT)EYJAo&-U(d);B-z8+)Mm ze{jDq|I~9mz#5?Q4@>3%Sxbq}xfMHma@gD-{BteW9*#lYt(yxR^CJG`1DWi}S(iO7 z>r;KDP2KBQN9J|9UH>9`a%&9zO|gwX<1}EY} za-IEX%k=;@+o6xoKKxsH4#+b>bHLPEpyz>Fn=|(xdU!Ejzb{5vJ+$&b{np@m{jjQ+ zotV|RK7Na^>b6@swAKgJZe@3^19sQmf8Nh{ZntwU`_A{WZ~n@2e)s$2JOB219(4Yf zd)Q|UU>%wKb5;&dup~c7Y;a|vt{*1%$NbN4d~yCy{_)zfj>MMZbBwJ2^ZY*qP1$3+9X~dU^(l!>ZjrQ+U46Z7O!sF$U8hbi$TfkC%d&N37X2xW z?Hm*1oQ^L0>X`$yP4YiyVEtUs^?+vs}rjKLJX zmDSScF^<#NvGy)M@rNE(d1BsXjKS+69fRXSGET>hOy6zWlPPn6b@M>a58N}{>iPeUJMMS_{&W5BcyfH&kQ97<{^zqVN9yv8z59qUPHCL6 zS=ZKM_qNVhi0xy_etTcCN{l*kQOWU6#n{i3&$WT?B}mR?8ZIr^WL!V>w9Bzl=3&Tw zu*uYSqQjs4*^Yj&E4w|Jg;VP(ZHpW%SDbprsl%KF+sFs=+@alT>2s}4T^**aYg5X# z{b9GSl-SJ;$v>>fxAP|)xwe)mC49joY{F>uwH5pSJMO&m&UOA7mt*7l@{bMOu{rMF z`JLa{bpD5@WJ{;*AI*6 zTnA}gMzPV((wVg%{j`&Je95wQ@B3RvTI8NO?UR4zfB8xYOMTrfXUzZn4k(OPUw2g5 z*XMuh{B!;<`%1>)Sg@G`^iQ4tcaHqbBk?&0TThv>i}Yl5>RR8at;c8ojv;we`Unc&^BMfXVzKT{e+&zFBU_Hn3@3hN;Vi>rzxa#me`m6U?i@SC6rbsgH!q~k zc4?#C-jvPSbidb{>RVR3PiDKHzVz89>r=XYq(sj=fKKsQW9RYYADeYp%X;Pj*(6py zC7ks-3{Bav6HjqW#A(BC(QaSbk;E(EidgFC8K(`-vdg`fBWSlzOTSw3G zyTALpll*tKWFTdav92U`k)A$dQleYWSg+sx+Lhg(eGwz0#v_eU>Lb=-obA)zZTjS& zw%DvA{r-{PErJ&rm&2Y5h{*zT)Rp?|2fKZtXPk8H z*dDo2p}lSFE2VwOtv>ANa?LgLY0vpT+jl+rXRXZq3O{fqQ%D(0w$Ndc^?&dWv-|4# zANqP#_5B#vAlLM*NBjgAKp=A^GS0 zPj;MFsmqt_nH#7F|Bu0Hl`Z3+YcZbAykkzEw%_}`-<#w=Klf8y$j74nf$f#Ok41L- zO*s{d%^3Y%GByjo+@ECoMPtjD)V;3l(kJg3gPzPAqfJR3piti|7r>S!nbx+qva<_^ zv{mXys>>@9TbJEtyv*8{b=gzeU-u`!>62sp*i(A#WIFpXKM)7=#(75A`G;wW{JY;) z%D(>Z2LH*q<6(ShH&?O#|Kuk>xxUZwv#j(pJ|!2~uv0QOWNhkOC$DAO9;4mZDQREH zytb6tch3nuF0Y%h*@rPo`Bq{_x2`VtO4+xr^!)^KF5A?#smmxa`qGwd-NQbx@K+T}QiFf?SmR(eeYQ)P{$w1T zezc{oFZt*GU$O%~@}-^n(@#IW9@qH4Z6B`xkDB)d|Bu4I>wm8AywAAMvyRPiFPi`P zJo?#2T2G0db>q{nO{p*2r45dWoc0y7T`p{K7A+uXFs&@)=d{GJSm3(~nPo z>cm*rpY8N(+b9N~jH&lJe9Eub|1@o+!z-`9K@2q%Nzp^K8+6koc|J);4mR5}$QB@Ac#vA8oL49VEqm ztP>~Ga*t1@)n!?ZZDT*yX_qnRGOwMO&OgjpV99w@wzOfVY%%{Al2gbn{PqynVjPql zm#jNR>%{#2@BjX+^WQ(SvMFoGj7iEiQXAM=bUq9lylELcNBD()~3X-e%^WKt;b`hP8)P&FI?AR4p8RbBme%bNNjN2 zIX5RL^&@T5b3r~|pEO|4f~RN>gckac5L+5{hfdI0osy(@Bcf8 zcHT1=$QexX`=Brit5sljU(EkU&ifkta}BQL*tkB0G0M8*qt4m|ANT)r{qJYd&*&l^ zyFcr)+WVpo1IDI4)y8WZpE0tJgfp3QK9>6_rZ2kaqM7C5i!Yv0tZyVQyzs(VFXjra zLmr@bZO4@B0sjX7CRq0GOs>rV$+!7HX*_jw?X*FkD!DFzA@e}$<^+98Ikiq33qEw^ zlwJ1hM=9U3tfY_hp(n%LXa6##^25C8BF7xM3C)X(RX%+IraZOF8#EA<m9q%Jn6eTr#7;Jo3^@FP**M1uqyf^~)~1Y(_~Rev0kw!<>-0 zz&!-xN&X!>(!XEU`CDaLoAqQFzO^Uo-A|T76JR-B_g8Lx(5XcaC+vpX+;=cYc?3_?7J!z34?V$_rok!cov) z{Nfi6TS|3fZBK46KbRA^Ci#F|koyA1>Dc|-_}gXO{|D>xtCV?I)|UDrzx>n2cqDd< z?>m=mq(z>Sb#(Yq+RnPMaHlT2*wC|m_sOevnbw}N`(&Bx8rNg!mpJ^n-j{oGLa{d3 z_}QQR*%{}5up~Rln4Bp+8-&UE{15-PRAK$UulPToKINaY23dEmcN~t{+~oS7`9Jyh zGpO`)iqtkGH}lhGqrPn4Wpa;C?wwQND%p1qmVLRGSy;dP^2=v0dC5!G%S&JS(wXID zFMHW6i*}{$=!3jKp-=kHwSj8__XX}t95;W5e=GktGLNJVpXl-`+nsy-#@NOfrGELh zjqLY2&lT_;<<2s7b3(G4ar(8v7qJ%C6Vzo>pRw7t$KaDqeMp(NUnFtH;fx$*7Vxl+Eh4SK7{NTF-vaVaWMZu2^ro-j{vndiaD>xrgs7uDD{9m%sewGs=}$ zUOBt!s;h=X?{#C0x4rqmHG=B_)*YDx@=PFe0C~W_ADMXoUgch?Et$5Bd@JQT>*}zt zP8{`==$;jD-vBm}T{yJhqgYpJQ>L9fVLScutQ`(*gD>sYk;GZDPCRvU12N3+wsqdO zO~w&RJ^ANZIXOxRV>0Euiyxh524NFMnX9YpYyNMh@2T~Fj*;;>CdTD>`}#jWi|TSH zm)KQSz_=9-xW+qKtTI|@2>84x4*Z zWL#+*>qu-n34Q=Ds~t+8@$J!SW09i8tVATt-Z-giDvc4Z!$I?`BleDX;hJ!ADD zjkP~)Ff8-b(P@uVw?E^J(@%fuwlg=#|3^OZk#VmKX5c6bHs{o|!yWTKbMqGS|1kV> zEw0aal6h^84Zo%HFK>Pxt;6F+g*g4_vaYnBE<5MFZajASl6&WW_=hd#eM)B^CYh&U z6>jDGrkie>QEs{Amf5Yh-pcPY@{aaVx=!6VB<1FtZyq^-=neQ8Sx%l4t2I-FC-Pf4A+c>w7ifxUs8Ddm*< zBHdUdT=u%GA}RD^oKj}>(+4){6!pv%wn0wWvC%g9=UEvUg0C-q=}V)IlqaQeFv;(O z7XJ@dUt2Z*KTM8ct?|q=&x|oKKE}d0ay^30+<^S!KmOx|^FN=*D3pH(@POKnI# z+kCDqSy#_^`}JDA?lok_9N^j?{#j=`_cQM^hrjQA@0)%9_kaKFhkodXW>@lO6l``GHzawYne?+ym9C<4ZGPFcKxX* z>*)C88|j%q<^tO!|D6BjJP$vzrCt8z3?}FM|E=Kvyc*w4kQC;!QQ zGRWssMrD!DZu0GCT0UVkZN@5-fAfdA!D}duMcRL!`7`&!KWA_3`9Jib4}I6zC-1;N zdk^?0Cow*90BZpFpE?JW`INFNoA52`+Imddd#sESBg2^s)Qz)ltbM~bHl#YS>e{j8 z9)Y!h%p=uhQyXvrleuH9VF>)5&8BK~C@mSD>U_bItf5t6S|hxqMba*fwkGEQ?s<|+L6{`61(bjEKR z`FF~Cm$DCker{#a&oex_zeVS~%YvOk-590qvv04_C9%YLt*N~~_v2WveYe;DoCV51 z`APm6JAW5{hdGY_@0|D1g}BVp3#@RWS^)$vnoGnEI-Eh)Wb z@=u?vtKo}%HuFFC;s0w{|0nhhkk zY1g0J;!mb!JY%$VNenixryo1HfHMQn3t;SfIMSKS;S$NH&f+s-t;Y=fRL>h$0F zhnr*xU6$NeTgL~JTg?9rIsfPQocH10aU!$)$)EhmjNdl!@8q*+fqnGOzDzm?C-ZO) zk4p4jU=eB{~>iXmxyE^r^!v8Ay>0fEx4dO`@4ff3)|gGjpvR!@caoo@}Qd9oA&ixU}n68rx&=%P>+MyQSMR20aKF_a-|KnDEwv! zzr_Wk)tCIk?sNVAAAOu#<(2f!?~t+oCl_&D^N-^qFQHo;C;R`L|DBKgT=E&k=2|t^ z-mse7%Q|x~g}DzFDd<_?)VyG>kP+9(&X>71NcJ=Lm~$8d*I^Cd^SGWT%W(2@h~=Xn{z+^kI8>B zuP(2PBpj!YcGTfd*<-XTWmTzNzLDz0sLLiY?e>GDFXD~0FY0N_x;hf>?c3ae&1Vc` z)b)UC0_Sp>CeC$(ZO8%U0c_f7gRZam8fyUfXRj71^mBq&g?$r z{|#?=!{DFylfb`YbX=}YsAt}y&iv22P5nFN-npO8sGn72uD#*Yd6&<*%(LgEzyN3Q z6u&3qGxGR|F*oc@F5r4FZ}IxD1!EL*5dC_6p2ze1Jmdjb_4!|)0rnYRrHorg`uuM` z??->+7rE!}m@w!>$FEQkPTtR?1y+*lo16Jxp4c&mQ0V zB2HV^vkw_p>T`alj*q^OS>#^nOfvt&D0B5b=Kmb}O#T^%{4+jzcRc1NCG-Cx{&UWU`_4X}ZP)nD z^)kmC2zT5ASE^ITPa!wZh61y41IPBwb;vWW58%BQVjPca3)cZK>Gc?cxq$haLO$56 zz&XV>GVkAFj`MGD{EnHN<=)?X>ijSJFs$xe-kFEhZj*gEM#}J%F1uaIC(`ykhW;{6 zoj7!PwhwK_;h*wpmv`G`U0d>>Hr58@0-rIE`;_Pu_X+xBzSo@>dEV3cU*46@ugSkQ z&i@<#FuSkjfBL!}{<#L%atu8m$-91X12*{Q-3I=huK$(J`MLLoJwDg)=DZJIpZ@fx z$Mf^BAy>|~oge&gm^nd)To=d^IYFM>E696F^98Zw0M{et7xDnt$Xvkn%?XUhBHz}H zalH0n{$i};8`m+6i~l3nES-J-f0_Sb9)@9FUB;8`)MY*6x?gsU&AR%Oluvx<7V7Yr zcDXfXN@fh~%CtIdw4wL@ZJ*q$<5O4KpYJ?`ZHs&(SqG$@bpUnO14y~xS#O?|aekF= zd4i=}8^{~`fA;3{`TzRrZ=dsDXHK7of7Tk#`SR^}tvfEq&HA5roB4O<=Ti2W_u-$t zw|j0r+j0i4@a=PNnq1`vbo6NzMxxjUSY{{4TKxtmc93cO$ zO&Dk90`h@5!MxCAa_*Rr^kbfKY>q|t$&>tld1k@?qjNw1&$18qvhTbvvobB`*tHp> z#11X07ATc5<9?*o;xnIAiUr$M~E9YXcaE ze~URFrFlXw;Gg+lp5RE9w8@xk;g^3Ht-iL5e{u}ha$Jsuy1L^;s>6TI|GDpX?=Sz% zVSJwXT+11seHdaN-S4;k?ce_G`0X>!%WuE^_HnM}cjt0{?e}TP1>_O)fNN_xP2ObA ze4vEEEZE&sASuk%7W+h6%n`}B^E=nI(3jUr=9%-|@8@~H?B}{a*ZbxHS(o!g5)LWd zuYF3wH1V=cO!96UW8g`C_1PAw4_!WOqm)Jcw$pE0qoj7yNrq4GC8i&jFJ)IfO}mFK~bG&-arUk8I1mV@W&Xr~JiV{Kbs#Hv4xv zFCqE7x&~nWhkw`p@DE!s!yL&R-}$%x&;R_-v%mbyznuNjFa6TEH&*XLU(W}esdEnR zIw98w<^tE~t_$Q64q>q80+~dbrwoV5aczt9eAXGaW5f>sJS*$p>E|=g{+PpZ{hw=pScFd)miLY1-~HX+ zjWY_qFU$S;dUxUM&O7fM=LX(mb8TQQ@I4#3E^saGob8+}udr!>)huaO-$>e)7<5=S z54yjXdH=6mGs(UGpZ@>Ce9rywD*y0hN#@b5D~(Gjvm4on(QmvQrc7Vj<(58->HJc+ zja(X&Tz4C7^e4B*$*mk4gI}HY`m-_*&A z`TqK^|9bYTzxu1Qx4-@Ev-*C-$OWto?zrQQu~%?y;MoE9-8?VgTrT$qj3aY^b3bEs zjz-FDGK>z#O6T#7>hjK-Nap)mKiTL1G>hz~Os3I23(&5FIdqG4dA6SMFqM9EZAc3I zXw$DRrE%RRpW2O^lF6hxaq39fM7OTL`_iAj)Q!Og=Stbny1Mfs{4@W{x-2=z!WlN% zH_rKg&i{4QA9MD;xcC3$B}#Q#ke{?C$o^Qr%@&ilx|2XOzdghAH?vfP=so_^X{SC>g8b_+Ii zee!BusU2zATOaHZE5FFp=`ZW4!=mv>>y9CP`iaS6OtL-|n|Xou8}Sck$s2WT@J4C# z|F!#w|3l_Egk170{uz^er*2-zG5`6W|M|1{mwi9We7^bY!vPF2r!v2?PlkWi|IE$I z=Q91Tm4EX$e>2VudH%NY+8*ly&JbA>cviqQIV131BIg6-0M6>jPmIy|pSe6aPp0|X zVA(xR%B~wH^Zp+pv31_%-n0JX-yDF1^DbdH`A^o>@xyNCT|Yhx{Glt;PP{BD_1gyC zvMqYHlSd_f7^9wj=ts(>ap|+YoK8u3wLQ$zhny>Iiyz&(I?`BT)a9RdNAX=5xkk!U zGVghS+tpZ}A882;D({)haZ4gYU?)0;lW?|qVM9G_!i9Ij2UX*X`8^}nBKKlAd> zT*}-k|IEMa&Dp2(?km8Gu zPe2|b2e=m?2QW_Oe&>IAmtmxTqc*utd+Pd?$vry7`Cay{C->-wIIGskQv{(JuycEXc6oZ(XjckTZ$3ag7?*8TsZivM~4UmexiGf8#M8omGXx3a6A zE9%_E!+-eb{urLx|J`rD(B}a5XnzCq@|VB-#(($^|KW!B{}1uhqOB?BjgW0J@4v%z-I?N6L=m_L)U=b1$YMN{(tWM;drij zV!1IsX<{9=!*V#E^JHN?9=>rhcFDr~oQGvR`Oc>eeA0{6*xVRRTjS(+!eMqNeqkD) zxHg8t^mCjp8IE8wdz@^yC1*E%lZEN@c=#@UJlphP{}TS^{XP7^JZw$ux4*XkyEli? zg|U7AhvkR*-^Bk%E$8QifA<>UJg&xSHr}rf?*AwLo#){Jhkux9-?WF?|K~dZ`1g5S z_W~L3;2J|iU+gZ|351DUw?Q0rg{G_Z}?Xa{8wk!0Gw>c|J)Oe?fYE=TnFGEmf+w1 z-#dVw0qno_Vejd^r}MY8_Gq8;`;5>1yT8TPPrp_A*0;X(5#1AbKKM`n=|A0g&1+tB z72mbT`#|>qy$A5D(mMe4x27Hc;e28~*>#+4*8@16WAiY$bGr0hC$dQ%&Tu;N##5J! z%`TsFc+9r3c{ts9zEci&=J7cui(uC{o*d67SvZG5<9PD08b-4*hgE#qgyCcp&(n6= z8AsE8;=lX<@DKOl2$sm_+}J(2{U1hGthk;i+c;ICBpGb3T{12g4!!dp`HR&K~Vqzp8wvUyFI_Q~-n&mYf*-Z)&m z=tVEOdj4-Og`+5}g{?Tbd-A)0|94+?xreyA|95SX!}ovHH!*J>Rj+yX2mktC|LYsy zz5YFm))^iq?;6nl-**7)tMeT|`1hF{{Cf`&{(Y~${Lw@AN$ne9hN<&DC$| zeBIZ5-POIkb@&YM;amsa@|L$;=l^xdF4y%zZXfzJeb2I#Xu*C^Mj{T)EpIJoZ`fbV#3-Zdfo zC&$ylTjT8F6W_`3o|W{-FbR`jl+NQFhAvu!@9XKo;@xGdHbSw*#1@yZn}@Ygf03hhe_DHdH?_H zo0x^&M-~76{UQ5*xbHgfkN@#Me$f3u_1_Nva1RSR{yjg#|9l59@$cQ6=kH7ScmF@} zZ~qVfo&)^GUjJs7e@Dx|r{%Lr*H3>-c)ROB_;=lL4GRD5|MT;I*Rs|a_UHZ|w#gcY zbNHNN^PTA7jvU{|>8CE+$s1=EhtcaOtg{WPlf%qDpEBb)&vs&&-hAh5VF#x(&X25d zJezpfrEg4^ee!UOvtwgSpDY`APL@7h^)-iiL{2vGZ~qV9JC4Fz`u19wyvz9ijP+UA zo8aHI2HstN;?*%_|Ky+ildJ0lnfrh5&|7Di#~b(AU+(~5zvqA03jciu0RQg6+yCv! z?*GHTcYy19c=aA|$Nx8c!#7<0n|<)_Z?4|_<~Lt`ukcPjF9`qMJ*uI1fZ>1c|M1^? zz}6c6!+ac8(LUeh>0y>`V)wdnc#iXHymNS;GV>XiE}O~W&KwzEB03mK*F0G~eRCXz zPkM9y$#Al;W{k*_#q$v-86M>~@l4meu{cwfKN;$p(0K0sQx`6rkKUET3`~Wu@NOQl ziC_{oVRXg%j76T=AFciWBgG8=exDS!a?f&0AxXREN&BJ{5%_oORda}qotj6h#ClA~CH^;L}2G3;8@i0EQ9J_Ae z>uPU=fA|048V_5p0pSX7Ob-9P`!etkvyUqN*XL>f*S!C)hIws*b<}mBn(hDg+145U z;bIcJxc5hJG(Z3M{vZB(|7Y)qLD=`XJp9}L`#o;&|5rb*{_d}5f1d~1>;KDt`7aL% z^E>{%Z}jZpI^=$2zW!X6&S8_yzqv6Er|~(?=T_LB7;ijd&1=QfcP)U;@EMMi#goVRhV3wH9*+0%oM#_q z^O=0whiRM*>`htYux#G=b{t;WPyE7acn#m;urc2`jE8f&=8d!GJMr(c^7j4k6PDU* z%_BC>ZTtVd!hiKtAN(8dl>8F@+Z(%2Zr`8p{oVU}uI}DH{P)>E9QN6t&;H%_x9@-B zH-6*Qzlr>CKj#bc_;3BzZ{2vq8{TkrFCky={?+52B>cNyQNL%Hus`wNIQ%|bKCcDg z7$=WzClB+N?BKh2c=K>SeUjnu88;5Eji)}l{KI*+@JCjR^yE{Qe#*1OljE0g4~NOK zHE(<;eiO@lVR{n%v`LpN{5xmiKiq^T^JK7R95;slyS)E@diVeCHL3^yr~mYyUfuK0 z`+l-))am)(ZyU7EFb^Y*VWz!*fA8)kGl(>0Ehxi1J8 z@ZabEa5D*>%yHKR9OlTj`~Od0@gD8_fB643_ZY4yk-+dv&W~*xID0$-ne*;^J5>z$>^i53(e!% zhYNq#?)_ibfvbsi^R5BL?X%9)Qmb;ojd7*z^1QU!OC=zIPAa zLCp7l?fnz~?f=#|@ju7m5f9htcU}5yn}=WWOXFmh`0adPlOG;V8&AGtIon;nUkjRN z-*q8e^QX%W#?nn$I1aPs#>poq55qfW2b*C!KK;{^rJp=~*beLV`NrAc>?Z#Gtt`xh zop^Y1J=n1alio|&qwfO#pS5Csn%KSnuNJi#s|lYpuLJJ?FYW)Z0VnPM?fv1uz29ek zFz317?|l1r2p+A!^L_1WUwifaAny&@@4ZXt_do3U?l;`?!@lc~dffN-+^^o=``iDm zr{@~a{F5fW!*G0Jd&-i>ciqG`n@M!$+3;!@M`XrfwsD-iakw=%ro+XU^WtS*=4zKx7tY4CaVLX~XmtptJ{A3oamd+wj_{osH8&7Zy3y?8i&D7@eK@^6RvPC%INx4z)M z{XX2=^TWP-k3Q>DlYM`_^K0*i|GD>D=fppJhVkTKHa_*ctoh{GlZ9(o3!AqZhv#XV zZ2E<3vWe;B6W@(tbjC8Li_;lLQ%45JlQ+JE?`*Td(Zsqre6pSLWaP$^!v5rq*%>zv z%af;*5AO5n+CYB^|KV!le(tdoW8~ZY|6Rv_b?rFs*~GuiMW;5l@Nd8EI@i7rEA9WV zzvCay?6p2;dpP+2?ce_G8*h5ko36g|7v}Br?(h9x0LWCcUw+T~ zJND74Cw?2pcYX7zPliWuImhN`$26N{>BFpfSWXsCj_*{wOE%$h_u1#! z?L6#<_c%Kk3)ke$wzGj_vM_BP&buZw&!%~}u>X6X1v6o% zYXMHyv-aF?z5g4}|BojAKVa47{{K_g_h^6Bzd7bwGjVSW@9Hzg8)xVDw0!rjb%y(R z_x|C(cmMF#cmCXi!|Lt!{r~wt|L4``b}xSMi?5#NySESX?(ci2=l&k%k-ffWe7Lvg zhkG@s#pe<2`}3J!{g?KB*E#r~*8tc>$zX8DbJ&fi&o}uc->^>CIG${BnyZbzQeEPs_vT(lpk|&$C$>?Dr(t$MDgXJkC=%>BRTf0&!k|L)DN!@tk%UiZ4!U42KVJ-+Ap_IcM2 z`#juxpWi+H#J&6c?)B~YJ?q2%{EokR)ou-_YuUs+jL&(v5Btr-_2j#ad9pAYFV4hq zy0DL@pE_gy*V#=u46>g%4wt)(Je?R*Kk?f*J~5xHIL+BaVV;hx`OedY>F|v=4##0P z{D$*ASzT z*Sp7ePtoUjFyDSZ@AZ4fKR@G}&-?BB)-tgkUc>Cf_8d>UY?JMFbKaP3cqVHcZZF}R zj(pk}^WSyZ#KU#-$?44Fjm_aN{F*lox6Q+KKKX^`aD1I#c*dtq7%xs(E?@KPV3*81 z{F)o%VH*$6($sA$oKvKcKC<2-v4zE0Gn{@vwl5#$xB{x^{yVa!?-bOkMG{T&+aGY zd$xyr*BAHr_ImkX{?fgE*C^Mi?p@mdC-#l!Jgnkje9CS&&Szd1rtDJOt^?t}dATP3 z!*Di}hhZ|9%+EMK<9)vC!Z$nP=@U-F`s9tXiIa!rc(UefjiX!5!+O}x$6Q<(-eq*t zFFY5+wSZsOfvye7nos=q`9DmBGkBl)>RJ%L7x-Vlq4h?4ZTRona|!!ut+rd?KkUqB z02qV+-U00Q0N&r*v)!}19-!{yo5$gu-Mqht`}TUc?;d|X-}j8a@A*BWOzgMshxZ-( z6SHCOPI%f#7Pajxpj?cOAq;NgCF`FsN z2TsW+P1(e3n8w5N)bHbIGsiH!&&iT^4Zz{PYXg1wcmLn>|HRL{4{%NBTF`v~Ou9FR z(G|=6|D(D8e}tG~cmJ=paNoFE%)`IB(ZB!q|Nh$h|9K4vUwsF_^R|81zKmcMX5kl( zk!t~RFCWg$(|M2QbNh*Tdwu(TdwtLMo;{En=6>Hbs(RxS|6#vt!Nl(z!_|(}WZ6xe zW}D3=K4sH)$|v5#IsL8V=_e24`AwXso7le7G5lsb$I0Xgu1%H$ExMcYp8N5$3zc z7uR0jet!w~>I(aK_2Lun*3-JeaQwRK!IT&4R#*?qY>juCzTveRnupmrFV1y3@-WVJ zj?)z{T|9dj4!g$m;hH=>dGky9?BdxL8>Z2m8;9vzaem=8yXNs-4#QKH9Ug^ubK{-D z#l%1Cz!r>!qwqHIMdqFS*#AFe#k(u`_j|tZ-~Jx2MtqK|`*!#bU-KH!Gr;`&|K0__ zF+3yJfyi|sO5Zhu@4UzFT|Vx5Gxz)InRsv9b!+bX$->&sC$`f~*&OeBx@5RHOc}>- zHHOcyX`HQbx~acTmVF#fFO8?HYXDjHIPAv5czE9D6W`fPSvbdc?5CS@F}gm$t?|yo z?RB{36NcFs=QHJWQ$EM}v7h+&ZY$ih--q|P?@sL5|2>=Ey#K#z_@B@J;k;U_Cq8TS zoB4j*v~|usv~if5*8uym>p<54_vrTQc^zm^-+Axy*v@@E+_%?H+{?Z1_v#{RZx8D` z55w`W8h)poZr3Nfj!*w$X4^d8bph_eHa^Ew7iO=MC7=GqOEzOntnXv^BMbjKpZauU zXyQ2?Svq`TJ$sxyJ?u@p#>w$0%ud~u8BhH0y5^Jjp0I00xbXXQJ^zP&crtEp#l3UK zyFa*>__zO88;tL@?bic(pZ`t#!%ldItHxms-ohoEUUwaU>q%V~$XqL;?(bbo!u@=< zpO~N5quXKLI>Kdqm+kZH!asfE9nZTLqd!3#=o30a=t_Nhr$$rYhHyh)5O)!S}XJ=PKj)XmVVN#GU*hTGmu!;3@*H29hj(_D z^e_s06W__gu+|t_9@A z`6Lhf@ri%Gl>z$^3>n+==V$F?;p;Bq|NU2O-X(nUy0*N*ze(WVC!e)dU)Lv7!+rUyYv*d*@j7iTVK>?C zN1klw`N-F}Jo)95e&=EPI(`Yy;XK?=n;9qh>4#dN{IZS46oUE~Vbjfzw zr-xJHDF5VmWB3fqWZ^U!K5;$gm&W;p^RPc-TpI8A4@=>D?ycbsCx^Fj|NjP9y@^@a zeWc(2730GfeNy=E{eRb_u0z$_Jg(0F_#gk{gYZ8wzhjUNHoHIX8qmHC&lA(hyEdfD zZ^qfN-!(wa2)^bx{Dr&p%_lCC;d8uWG@sv`;=1u}H|LG< z#_){xYeMp!!zWodh1^EjMNd03{Ob9R7V$`6u2d*4?92A2~bs|NG~EVQk_* zJd$+{2)}baF+ay)pDg_I%eT1Z#?^2g50{sCcnez(Wxo65dpn-rtcOqX>&DsBht+KJ z4Zl0@Ixz8Uykk6l^7wVO^gF>dS@@qAHjXC#cUkjzws1;@li|sdn@_wa$CHQkY~xej zxN88c=Ra}J&V1tE^Z&$?anyAHrote8ukqje$Lg8&RvTTkKmSj>P5kfUiQP+hp0dU` z{O23ii#>BU-gV(+=j^BK(mY)4I`SyYO+Mphcc(nxOZMfUGluWRc=LEN^C){*&MsZJ zk6(xT_yoYR#S3iCU|1bw56MM!JuXCJ^494;6 zsF-ni%5{m8!N$(R)y}iq<;9r#InF*jHOI-4$EQ4fJY78b&gmn%aJ%z#JD+$j_Vn$V zK-M*&F%FOM^!eanzA-G4h4DF_vMFy2>(jqES=WKEY~J{iJ{=CTY{D^F`YCH1{wLpc z=IO(~`~UC{+u=LB!BP~)%;EoT-~X?FN8{@KU(f$xUH-k+>P_zXe}4W46A_FWPabYB z@i3pRc|7^8INS2a!$_RGaXi~}xIF2vn5qU*4~`_0(<_);C0Wck5R`tXKN{Vw0FZ z>KorF|G*FYzz5Anp zWzj?ZkI%LE58rd2CxibmA1CwuAO8;bGoSg)8z1r^A96*;(FcF<2VcqhHxeiJ`)E;r zH{IV*_Zw<`pSt&{c=uf0i*>IR@BVJ`?iH`&)7JPpyX)kS)L-0N#hCZO)zCfj)a@~* z&7F+*I?V6HZ`xE}eVn>G9Y5%ac%59r`3^8A1E{{L>_{}bo_KWkH8_ao%S zT^F+RH_hH_xVBv)Yfe7LWd3$wlD{QvZam3-Msx2R&5`jXa$Sn(FO8GkiofM8Z@Gb{ z%|0)Fbxd31^vQR-^znSM!&`4_Za!@q)9E9wXYu-n?|p8LPrc(b=N&_K#<=@h&fee5>~_uR_&EoWIcn_R+wyO2#*O_OeCBA5llcw|vhUJ2$K8u3 zqc_K=y}9q~rH5bS?|AVrKe5%`Ix&`BoPqyOTzmI@iyqDW{{j5V72f5K)D_KZK(=(& zkp0f5U2$-Bu6z08#mBQPUf0C>HMwzljQQ*_W<2BKmNQxRXU(&Vlb0h|wM-x5y@qP! zN59+aM|%Mqaf_V~UYu;jF|MxkGshektNN~+lh1r&6npv@&pPwVhM&Hgm$Nu@Qc%K(P-CSAN%Q_-8|o}%SAq8T{Pz*}PuU#rzUH%6^{1ZZJNqp3FD_1XOhmCVwI2H_>x~S^3P`X&#oG?pE=l=&+AC`)1Pm1_=nA# z@Bi+`{r@NQ{6F`9bmWa^q?g3l*a^WKU<@JijS3E=F;Z6|WvNpXUu3`(kG!=Jex}Z1UaL{1TO?nAtR+ z`LmUWUGr?_I_Z0ae3q{Mx0%>%zTY!oO+XN<~E*jikocu7&i|m&8JSx zDKDRxvk%+;{|S%s^Zy@O@jhYwySuON^S@bBb8mdrJpIgBtZCmk`>sRDyAL%_R^H+@m&-V+9`n}N zIGgy4HD%RLmd%V+P3iL8{ieThevRRTEIYih*y2r}nQzLC(Y#KwEnYlXT>Nx%ebtaI zd-Lq_O&710=EcZ<*3BkL-a2~zhf!Ev1hbFE`@i?S8S4T3%cTyv)mcsPSzGJDr+!}Z zT0?rgxOAvE)22L^beCk=7h|4Jv%d6dD1Wj`ap}mjEl+EV<w+ikDAyq{}D1+mqL; z#xn+4vEx&=kInhFcJrO~`1wq`nJayLXbr{Ld2wcpe3MNdvZ>D|o^A8$nR4Ui^x00? zl&8m|sn2if)L5P==NFMTF2;;&-1UCib^pKNA9f$^=l@T>=_|&EE&BNO|L*_G-@2O5 zHIU7_mJbQe~8p~%Ltt&a+`trrIi&t+vze_%3QL)))TkdR<mB~J>OHP3G5ujcaX@ryCz?KU%SvGFKlZU#&cebU7n42jkAr@&6|gTRqrP{xe-Eth z>Gj>Q^nE8RdEYtP?bG9Zmu$+!oAct3H=cgU`4~@KGV)1%|83SrpFMpx$?~7`>&Dek z%wb6XASu!yQI&*Il7F_-u63ltFV%OeczZp~%M(wI zUy@y?pSIbk)3{izbYZ@$a2pWIl@zH935gJBd_7r`w2!|=o1|M|Yx zq7Pa0(d)NKUgufkw}1P$Z~WK)`d@EL>~3ZITfg;Nw~cXKo=b73ta1FhIG5zJuG{%f z+e@*g?4j6Bzf0p=#ZvPnJ^Ag{v**fZ`X$?KAIf~jyHx9pHS^uhmfws$<6Iig*y$gN ze?GIWTlv#X+x+9V(q%Jwxp40VU=&twVitBE3I3n5{NHoYGZ+1-^|y(?;CbY2Z+qLr zqPM>FtvApm|EX(y$#%-7-INzU{XXAqud~bVPWi3kPTd^eY3xU0_i*y@+5PtUtZBEu zoo&AP#goVPIJ@1{?>aG(O}k?6Jljk1WY@*HPM+VL@ayvDd%GO438S!j6SJ@j!w+Zw zUv5{vzkl(kFZv^2|Mg%0>iz!T{YUp8jq&~7#XZWrx5}1X^5SGW`P4PW=Y5j-)a~Qu z<-3%-7`VTane+U2*_?~r+N(dm^3HkoQhs5Eozo|b6!Q{?O&EpM zo0xsLzx}`5ul{r2;QiryFM7svpZnZrzwBi%`^{Iq>Qy%mogSQX;PG`1z$T2s>P^f( z+;{)W{el17Ke&##20U$%_lh6B=vj+C>L$70ICOe&&VhS-4un5ggh|+hQCNl9M{@7K z+^_y~572J`d7t1j1-~oy)I}e7==9*61CRMR0E;jQn=smUeqr~~_^)e#>xtN|E$?yY z^x&KWkDGGB&#J&usm7-_`%m|4s)^2Tli02Tli02Tli02Tli02Tli02Tli0 z2Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli0 z2Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli0 z2Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli0 z2Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli0 z2Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli0 z2Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli0 z2Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli0 z2Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli02Tli0 z2Tli02Tli02Tli02Tli02Tli02Tli02Tli02TlhbryY3ms_W3{!8r%cIdIN_a}Jzy z;Lgs0$LV(dpt2sxv3!>m>CoxHIS0-;aL$2q4!pCT1CL}6eb8onk0-aP`*z3jDXZ4# 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

HxOpSZ}$mgIg;xK-dBL6jXiz% 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

achk=SV3>}w+jHuU7zUpqGX^W56Cb$%J% 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 -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace MinecraftClient { - using System; - - - ///

- /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class AsciiArt { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal AsciiArt() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MinecraftClient.Resources.AsciiArt.AsciiArt", typeof(AsciiArt).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to ╔═════════════════════════════════════╗ - ///║ Brewing Stand ║ - ///║ ╔═══╗ ⡈ ⠄╔═══╗ ║ - ///║ ║ 4 ╟───╮ ⢠⡐⢈║ 3 ║ ┃ ║ - ///║ ╚═══╝ ╭─╯ ⠂⡠⢂╚╦╦╦╝ ┃ ║ - ///║ ╰───■■■■ ║║║ ▼ ║ - ///║ ╔═══╦═╝║╚═╦═══╗ ║ - ///║ ║ 0 ║╔═╩═╗║ 2 ║ ║ - ///║ ╚═══╝║ 1 ║╚═══╝ ║ - ///║ Inventory ╚═══╝ ║ - ///║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ - ///║║ 5 ║ 6 ║ 7 ║ 8 ║ 9 ║10 ║11 ║12 ║13 ║║ - ///║╠═══╬═══╬═══╬═══╬══ [rest of string was truncated]";. - /// - internal static string Container_BrewingStand { - get { - return ResourceManager.GetString("Container.BrewingStand", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ╔═════════════════════════════════════╗ - ///║ Crafting ║ - ///║ ╔═══╦═══╦═══╗ ║ - ///║ ║ 1 ║ 2 ║ 3 ║ ║ - ///║ ╠═══╬═══╬═══╣ ╔═══╗ ║ - ///║ ║ 4 ║ 5 ║ 6 ║ ━━▶ ║ 0 ║ ║ - ///║ ╠═══╬═══╬═══╣ ╚═══╝ ║ - ///║ ║ 7 ║ 8 ║ 9 ║ ║ - ///║ ╚═══╩═══╩═══╝ ║ - ///║ Inventory ║ - ///║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ - ///║║10 ║11 ║12 ║13 ║14 ║15 ║16 ║17 ║18 ║║ - ///║╠═══╬═══╬═══╬═══╬══ [rest of string was truncated]";. - /// - internal static string Container_Crafting { - get { - return ResourceManager.GetString("Container.Crafting", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ╔═════════════════════════════════════╗ - ///║ Enchant ║ - ///║ ╔════════════════════╗ ║ - ///║ ║ Top ║ ║ - ///║ ╔═══╦═══╗ ╠════════════════════╣ ║ - ///║ ║ 0 ║ 1 ║ ║ Middle ║ ║ - ///║ ╚═══╩═══╝ ╠════════════════════╣ ║ - ///║ ║ Bottom ║ ║ - ///║ ╚════════════════════╝ ║ - ///║ Inventory ║ - ///║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ - ///║║ 2 ║ 3 ║ 4 ║ 5 ║ 6 ║ 7 ║ 8 ║ 9 ║10 ║║ - ///║╠═══╬═══╬═══╬═══╬══ [rest of string was truncated]";. - /// - internal static string Container_EnchantingTable { - get { - return ResourceManager.GetString("Container.EnchantingTable", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ╔═════════════════════════════════════╗ - ///║ Container ║ - ///║ ╔═══╗ ║ - ///║ ║ 0 ║ ║ - ///║ ╚═══╝ ╔═══╗ ║ - ///║ ⠂⡠⢂ ━━▶ ║ 2 ║ ║ - ///║ ⠂⡠⢂ ╚═══╝ ║ - ///║ ╔═══╗ ║ - ///║ ║ 1 ║ ║ - ///║ ╚═══╝ ║ - ///║ Inventory ║ - ///║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ - ///║║ 3 ║ 4 ║ 5 ║ 6 ║ 7 [rest of string was truncated]";. - /// - internal static string Container_Furnace { - get { - return ResourceManager.GetString("Container.Furnace", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ╔═════════════════════════════════════╗ - ///║ Container ║ - ///║ ╔═══╦═══╦═══╗ ║ - ///║ ║ 0 ║ 1 ║ 2 ║ ║ - ///║ ╠═══╬═══╬═══╣ ║ - ///║ ║ 3 ║ 4 ║ 5 ║ ║ - ///║ ╠═══╬═══╬═══╣ ║ - ///║ ║ 6 ║ 7 ║ 8 ║ ║ - ///║ ╚═══╩═══╩═══╝ ║ - ///║ Inventory ║ - ///║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ - ///║║ 9 ║10 ║11 ║12 ║13 ║14 ║15 ║16 ║17 ║║ - ///║╠═══╬═══╬═══╬═══╬══ [rest of string was truncated]";. - /// - internal static string Container_Generic_3x3 { - get { - return ResourceManager.GetString("Container.Generic_3x3", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ╔═════════════════════════════════════╗ - ///║ Container ║ - ///║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ - ///║║ 0 ║ 1 ║ 2 ║ 3 ║ 4 ║ 5 ║ 6 ║ 7 ║ 8 ║║ - ///║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ - ///║║ 9 ║10 ║11 ║12 ║13 ║14 ║15 ║16 ║17 ║║ - ///║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ - ///║║18 ║19 ║20 ║21 ║22 ║23 ║24 ║25 ║26 ║║ - ///║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ - ///║ Inventory ║ - ///║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ - ///║║27 ║28 ║29 ║30 ║31 ║32 ║33 ║34 ║35 ║║ - ///║╠═══╬═══╬═══╬═══╬══ [rest of string was truncated]";. - /// - internal static string Container_Generic_9x3 { - get { - return ResourceManager.GetString("Container.Generic_9x3", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ╔═════════════════════════════════════╗ - ///║ Container ║ - ///║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ - ///║║ 0 ║ 1 ║ 2 ║ 3 ║ 4 ║ 5 ║ 6 ║ 7 ║ 8 ║║ - ///║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ - ///║║ 9 ║10 ║11 ║12 ║13 ║14 ║15 ║16 ║17 ║║ - ///║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ - ///║║18 ║19 ║20 ║21 ║22 ║23 ║24 ║25 ║26 ║║ - ///║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ - ///║║27 ║28 ║29 ║30 ║31 ║32 ║33 ║34 ║35 ║║ - ///║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ - ///║║36 ║37 ║38 ║39 ║40 ║41 ║42 ║43 ║44 ║║ - ///║╠═══╬═══╬═══╬═══╬══ [rest of string was truncated]";. - /// - internal static string Container_Generic_9x6 { - get { - return ResourceManager.GetString("Container.Generic_9x6", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ╔═════════════════════════════════════╗ - ///║ Repair & Disenchant ║ - ///║ ╔═════════╗ ║ - ///║ ║ ╔═══╗ ║ ║ - ///║ ╔══║ ║ 0 ║ ║══╗ ║ - ///║ ║ ║ ╚═══╝ ║ ║ ║ - ///║ ║ ║ ╔═══╗ ║ ║ ╔═══╗ ║ - ///║ ║ ║ ║ 1 ║ ║ ║ ━━▶ ║ 2 ║ ║ - ///║ ║ ║ ╚═══╝ ║ ║ ╚═══╝ ║ - ///║ ║ ╠═════════╣ ║ ║ - ///║ ║ ║ ║ ║ ║ - ///║ ╚══╝ ╚══╝ ║ - ///║ [rest of string was truncated]";. - /// - internal static string Container_Grindstone { - get { - return ResourceManager.GetString("Container.Grindstone", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ╔═════════════════════════════════════╗ - ///║ Container ║ - ///║ ╔═══╦═══╦═══╦═══╦═══╗ ║ - ///║ ║ 0 ║ 1 ║ 2 ║ 3 ║ 4 ║ ║ - ///║ ╚═══╩═══╩═══╩═══╩═══╝ ║ - ///║ Inventory ║ - ///║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ - ///║║ 5 ║ 6 ║ 7 ║ 8 ║ 9 ║10 ║11 ║12 ║13 ║║ - ///║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ - ///║║14 ║15 ║16 ║17 ║18 ║19 ║20 ║21 ║22 ║║ - ///║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ - ///║║23 ║24 ║25 ║26 ║27 ║28 ║29 ║30 ║31 ║║ - ///║╚═══╩═══╩═══╩═══╩══ [rest of string was truncated]";. - /// - internal static string Container_Hopper { - get { - return ResourceManager.GetString("Container.Hopper", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ╔═════════════════════════════════════╗ - ///║╔═══╦═══════════╗ ║ - ///║║ 5 ║ ███ ║ ╔═══╦═══╗ ║ - ///║╠═══╣ ███ ║ ║ 1 ║ 2 ║ ╔═══╗║ - ///║║ 6 ║ ███████ ║ ╠═══╬═══╣━━▶║ 0 ║║ - ///║╠═══╣ ███████ ║ ║ 3 ║ 4 ║ ╚═══╝║ - ///║║ 7 ║ ███████ ║ ╚═══╩═══╝ ║ - ///║╠═══╣ ███ ╠═══╗ ║ - ///║║ 8 ║ ███ ║45 ║ ║ - ///║╚═══╩═══════════╩═══╝ ║ - ///║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ - ///║║ 9 ║10 ║11 ║12 ║13 ║14 ║15 ║16 ║17 ║║ - ///║╠═══╬═══╬═══╬═══╬══ [rest of string was truncated]";. - /// - internal static string Container_PlayerInventory { - get { - return ResourceManager.GetString("Container_PlayerInventory", resourceCulture); - } - } - } -} diff --git a/MinecraftClient/Resources/AsciiArt/AsciiArt.resx b/MinecraftClient/Resources/AsciiArt/AsciiArt.resx deleted file mode 100644 index 186536303e..0000000000 --- a/MinecraftClient/Resources/AsciiArt/AsciiArt.resx +++ /dev/null @@ -1,367 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - ╔═════════════════════════════════════╗ -║ Brewing Stand ║ -║ ╔═══╗ ⡈ ⠄╔═══╗ ║ -║ ║ 4 ╟───╮ ⢠⡐⢈║ 3 ║ ┃ ║ -║ ╚═══╝ ╭─╯ ⠂⡠⢂╚╦╦╦╝ ┃ ║ -║ ╰───■■■■ ║║║ ▼ ║ -║ ╔═══╦═╝║╚═╦═══╗ ║ -║ ║ 0 ║╔═╩═╗║ 2 ║ ║ -║ ╚═══╝║ 1 ║╚═══╝ ║ -║ Inventory ╚═══╝ ║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║ 5 ║ 6 ║ 7 ║ 8 ║ 9 ║10 ║11 ║12 ║13 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║14 ║15 ║16 ║17 ║18 ║19 ║20 ║21 ║22 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║23 ║24 ║25 ║26 ║27 ║28 ║29 ║30 ║31 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║32 ║33 ║34 ║35 ║36 ║37 ║38 ║39 ║40 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║ 1 2 3 4 5 6 7 8 9 ║ -╚═════════════════════════════════════╝ - - - ╔═════════════════════════════════════╗ -║ Crafting ║ -║ ╔═══╦═══╦═══╗ ║ -║ ║ 1 ║ 2 ║ 3 ║ ║ -║ ╠═══╬═══╬═══╣ ╔═══╗ ║ -║ ║ 4 ║ 5 ║ 6 ║ ━━▶ ║ 0 ║ ║ -║ ╠═══╬═══╬═══╣ ╚═══╝ ║ -║ ║ 7 ║ 8 ║ 9 ║ ║ -║ ╚═══╩═══╩═══╝ ║ -║ Inventory ║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║10 ║11 ║12 ║13 ║14 ║15 ║16 ║17 ║18 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║19 ║20 ║21 ║22 ║23 ║24 ║25 ║26 ║27 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║28 ║29 ║30 ║31 ║32 ║33 ║34 ║35 ║36 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║37 ║38 ║39 ║40 ║41 ║42 ║43 ║44 ║45 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║ 1 2 3 4 5 6 7 8 9 ║ -╚═════════════════════════════════════╝ - - - ╔═════════════════════════════════════╗ -║ Enchant ║ -║ ╔════════════════════╗ ║ -║ ║ Top ║ ║ -║ ╔═══╦═══╗ ╠════════════════════╣ ║ -║ ║ 0 ║ 1 ║ ║ Middle ║ ║ -║ ╚═══╩═══╝ ╠════════════════════╣ ║ -║ ║ Bottom ║ ║ -║ ╚════════════════════╝ ║ -║ Inventory ║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║ 2 ║ 3 ║ 4 ║ 5 ║ 6 ║ 7 ║ 8 ║ 9 ║10 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║11 ║12 ║13 ║14 ║15 ║16 ║17 ║18 ║19 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║20 ║21 ║22 ║23 ║24 ║25 ║26 ║27 ║28 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║29 ║30 ║31 ║32 ║33 ║34 ║35 ║36 ║37 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║ 1 2 3 4 5 6 7 8 9 ║ -╚═════════════════════════════════════╝ - - - ╔═════════════════════════════════════╗ -║ Container ║ -║ ╔═══╗ ║ -║ ║ 0 ║ ║ -║ ╚═══╝ ╔═══╗ ║ -║ ⠂⡠⢂ ━━▶ ║ 2 ║ ║ -║ ⠂⡠⢂ ╚═══╝ ║ -║ ╔═══╗ ║ -║ ║ 1 ║ ║ -║ ╚═══╝ ║ -║ Inventory ║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║ 3 ║ 4 ║ 5 ║ 6 ║ 7 ║ 8 ║ 9 ║10 ║11 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║12 ║13 ║14 ║15 ║16 ║17 ║18 ║19 ║20 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║21 ║22 ║23 ║24 ║25 ║26 ║27 ║38 ║29 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║30 ║31 ║32 ║33 ║34 ║35 ║36 ║37 ║38 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║ 1 2 3 4 5 6 7 8 9 ║ -╚═════════════════════════════════════╝ - - - ╔═════════════════════════════════════╗ -║ Container ║ -║ ╔═══╦═══╦═══╗ ║ -║ ║ 0 ║ 1 ║ 2 ║ ║ -║ ╠═══╬═══╬═══╣ ║ -║ ║ 3 ║ 4 ║ 5 ║ ║ -║ ╠═══╬═══╬═══╣ ║ -║ ║ 6 ║ 7 ║ 8 ║ ║ -║ ╚═══╩═══╩═══╝ ║ -║ Inventory ║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║ 9 ║10 ║11 ║12 ║13 ║14 ║15 ║16 ║17 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║18 ║19 ║20 ║21 ║22 ║23 ║24 ║25 ║26 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║27 ║28 ║29 ║30 ║31 ║32 ║33 ║34 ║35 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║36 ║37 ║38 ║39 ║40 ║41 ║42 ║43 ║44 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║ 1 2 3 4 5 6 7 8 9 ║ -╚═════════════════════════════════════╝ - - - ╔═════════════════════════════════════╗ -║ Container ║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║ 0 ║ 1 ║ 2 ║ 3 ║ 4 ║ 5 ║ 6 ║ 7 ║ 8 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║ 9 ║10 ║11 ║12 ║13 ║14 ║15 ║16 ║17 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║18 ║19 ║20 ║21 ║22 ║23 ║24 ║25 ║26 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║ Inventory ║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║27 ║28 ║29 ║30 ║31 ║32 ║33 ║34 ║35 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║36 ║37 ║38 ║39 ║40 ║41 ║42 ║43 ║44 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║45 ║46 ║47 ║48 ║49 ║50 ║51 ║52 ║53 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║54 ║55 ║56 ║57 ║58 ║59 ║60 ║61 ║62 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║ 1 2 3 4 5 6 7 8 9 ║ -╚═════════════════════════════════════╝ - - - ╔═════════════════════════════════════╗ -║ Container ║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║ 0 ║ 1 ║ 2 ║ 3 ║ 4 ║ 5 ║ 6 ║ 7 ║ 8 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║ 9 ║10 ║11 ║12 ║13 ║14 ║15 ║16 ║17 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║18 ║19 ║20 ║21 ║22 ║23 ║24 ║25 ║26 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║27 ║28 ║29 ║30 ║31 ║32 ║33 ║34 ║35 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║36 ║37 ║38 ║39 ║40 ║41 ║42 ║43 ║44 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║45 ║46 ║47 ║48 ║49 ║50 ║51 ║52 ║53 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║ Inventory ║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║54 ║55 ║56 ║57 ║58 ║59 ║60 ║61 ║62 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║63 ║64 ║65 ║66 ║67 ║68 ║69 ║70 ║71 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║72 ║73 ║74 ║75 ║76 ║77 ║78 ║79 ║80 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║81 ║82 ║83 ║84 ║85 ║86 ║87 ║88 ║89 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║ 1 2 3 4 5 6 7 8 9 ║ -╚═════════════════════════════════════╝ - - - ╔═════════════════════════════════════╗ -║ Repair & Disenchant ║ -║ ╔═════════╗ ║ -║ ║ ╔═══╗ ║ ║ -║ ╔══║ ║ 0 ║ ║══╗ ║ -║ ║ ║ ╚═══╝ ║ ║ ║ -║ ║ ║ ╔═══╗ ║ ║ ╔═══╗ ║ -║ ║ ║ ║ 1 ║ ║ ║ ━━▶ ║ 2 ║ ║ -║ ║ ║ ╚═══╝ ║ ║ ╚═══╝ ║ -║ ║ ╠═════════╣ ║ ║ -║ ║ ║ ║ ║ ║ -║ ╚══╝ ╚══╝ ║ -║ ║ -║ Inventory ║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║ 3 ║ 4 ║ 5 ║ 6 ║ 7 ║ 8 ║ 9 ║10 ║11 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║12 ║13 ║14 ║15 ║16 ║17 ║18 ║19 ║20 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║21 ║22 ║23 ║24 ║25 ║26 ║27 ║38 ║29 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║30 ║31 ║32 ║33 ║34 ║35 ║36 ║37 ║38 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║ 1 2 3 4 5 6 7 8 9 ║ -╚═════════════════════════════════════╝ - - - ╔═════════════════════════════════════╗ -║ Container ║ -║ ╔═══╦═══╦═══╦═══╦═══╗ ║ -║ ║ 0 ║ 1 ║ 2 ║ 3 ║ 4 ║ ║ -║ ╚═══╩═══╩═══╩═══╩═══╝ ║ -║ Inventory ║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║ 5 ║ 6 ║ 7 ║ 8 ║ 9 ║10 ║11 ║12 ║13 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║14 ║15 ║16 ║17 ║18 ║19 ║20 ║21 ║22 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║23 ║24 ║25 ║26 ║27 ║28 ║29 ║30 ║31 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║32 ║33 ║34 ║35 ║36 ║37 ║38 ║39 ║40 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║ 1 2 3 4 5 6 7 8 9 ║ -╚═════════════════════════════════════╝ - - - ╔═════════════════════════════════════╗ -║╔═══╦═══════════╗ ║ -║║ 5 ║ ███ ║ ╔═══╦═══╗ ║ -║╠═══╣ ███ ║ ║ 1 ║ 2 ║ ╔═══╗║ -║║ 6 ║ ███████ ║ ╠═══╬═══╣━━▶║ 0 ║║ -║╠═══╣ ███████ ║ ║ 3 ║ 4 ║ ╚═══╝║ -║║ 7 ║ ███████ ║ ╚═══╩═══╝ ║ -║╠═══╣ ███ ╠═══╗ ║ -║║ 8 ║ ███ ║45 ║ ║ -║╚═══╩═══════════╩═══╝ ║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║ 9 ║10 ║11 ║12 ║13 ║14 ║15 ║16 ║17 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║18 ║19 ║20 ║21 ║22 ║23 ║24 ║25 ║26 ║║ -║╠═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╬═══╣║ -║║27 ║28 ║29 ║30 ║31 ║32 ║33 ║34 ║35 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║╔═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╦═══╗║ -║║36 ║37 ║38 ║39 ║40 ║41 ║42 ║43 ║44 ║║ -║╚═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╩═══╝║ -║ 1 2 3 4 5 6 7 8 9 ║ -╚═════════════════════════════════════╝ - - \ No newline at end of file diff --git a/MinecraftClient/Resources/ConfigComments/ConfigComments.Designer.cs b/MinecraftClient/Resources/ConfigComments/ConfigComments.Designer.cs deleted file mode 100644 index 5c86e6b0fe..0000000000 --- a/MinecraftClient/Resources/ConfigComments/ConfigComments.Designer.cs +++ /dev/null @@ -1,2297 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace MinecraftClient { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class ConfigComments { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal ConfigComments() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MinecraftClient.Resources.ConfigComments.ConfigComments", typeof(ConfigComments).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to can be used in some other fields as %yourvar% - ///%username% and %serverip% are reserved variables.. - /// - internal static string AppVars_Variables { - get { - return ResourceManager.GetString("AppVars.Variables", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to =============================== # - /// Minecraft Console Client Bots # - ///=============================== #. - /// - internal static string ChatBot { - get { - return ResourceManager.GetString("ChatBot", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Get alerted when specified words are detected in chat - ///Useful for moderating your server or detecting when someone is talking to you. - /// - internal static string ChatBot_Alerts { - get { - return ResourceManager.GetString("ChatBot.Alerts", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Play a beep sound when a word is detected in addition to highlighting.. - /// - internal static string ChatBot_Alerts_Beep_Enabled { - get { - return ResourceManager.GetString("ChatBot.Alerts.Beep_Enabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to List of words/strings to NOT alert you on.. - /// - internal static string ChatBot_Alerts_Excludes { - get { - return ResourceManager.GetString("ChatBot.Alerts.Excludes", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The name of a file where alers logs will be written.. - /// - internal static string ChatBot_Alerts_Log_File { - get { - return ResourceManager.GetString("ChatBot.Alerts.Log_File", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Log alerts info a file.. - /// - internal static string ChatBot_Alerts_Log_To_File { - get { - return ResourceManager.GetString("ChatBot.Alerts.Log_To_File", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to List of words/strings to alert you on.. - /// - internal static string ChatBot_Alerts_Matches { - get { - return ResourceManager.GetString("ChatBot.Alerts.Matches", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Trigger alerts when it rains and when it stops.. - /// - internal static string ChatBot_Alerts_Trigger_By_Rain { - get { - return ResourceManager.GetString("ChatBot.Alerts.Trigger_By_Rain", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Triggers alerts at the beginning and end of thunderstorms.. - /// - internal static string ChatBot_Alerts_Trigger_By_Thunderstorm { - get { - return ResourceManager.GetString("ChatBot.Alerts.Trigger_By_Thunderstorm", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Triggers an alert after receiving a specified keyword.. - /// - internal static string ChatBot_Alerts_Trigger_By_Words { - get { - return ResourceManager.GetString("ChatBot.Alerts.Trigger_By_Words", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Send a command on a regular or random basis or make the bot walk around randomly to avoid automatic AFK disconnection - /// /!\ Make sure your server rules do not forbid anti-AFK mechanisms! - /// /!\ Make sure you keep the bot in an enclosure to prevent it wandering off if you're using terrain handling! (Recommended size 5x5x5). - /// - internal static string ChatBot_AntiAfk { - get { - return ResourceManager.GetString("ChatBot.AntiAfk", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Command to send to the server.. - /// - internal static string ChatBot_AntiAfk_Command { - get { - return ResourceManager.GetString("ChatBot.AntiAfk.Command", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The time interval for execution. (in seconds). - /// - internal static string ChatBot_AntiAfk_Delay { - get { - return ResourceManager.GetString("ChatBot.AntiAfk.Delay", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to sneak when sending the command.. - /// - internal static string ChatBot_AntiAfk_Use_Sneak { - get { - return ResourceManager.GetString("ChatBot.AntiAfk.Use_Sneak", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use terrain handling to enable the bot to move around.. - /// - internal static string ChatBot_AntiAfk_Use_Terrain_Handling { - get { - return ResourceManager.GetString("ChatBot.AntiAfk.Use_Terrain_Handling", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The range the bot can move around randomly (Note: the bigger the range, the slower the bot will be). - /// - internal static string ChatBot_AntiAfk_Walk_Range { - get { - return ResourceManager.GetString("ChatBot.AntiAfk.Walk_Range", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to How many times can the bot fail trying to move before using the command method.. - /// - internal static string ChatBot_AntiAfk_Walk_Retries { - get { - return ResourceManager.GetString("ChatBot.AntiAfk.Walk_Retries", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Automatically attack hostile mobs around you - ///You need to enable Entity Handling to use this bot - /// /!\ Make sure server rules allow your planned use of AutoAttack - /// /!\ SERVER PLUGINS may consider AutoAttack to be a CHEAT MOD and TAKE ACTION AGAINST YOUR ACCOUNT so DOUBLE CHECK WITH SERVER RULES!. - /// - internal static string ChatBot_AutoAttack { - get { - return ResourceManager.GetString("ChatBot.AutoAttack", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Allow attacking hostile mobs.. - /// - internal static string ChatBot_AutoAttack_Attack_Hostile { - get { - return ResourceManager.GetString("ChatBot.AutoAttack.Attack_Hostile", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Allow attacking passive mobs.. - /// - internal static string ChatBot_AutoAttack_Attack_Passive { - get { - return ResourceManager.GetString("ChatBot.AutoAttack.Attack_Passive", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Capped between 1 to 4. - /// - internal static string ChatBot_AutoAttack_Attack_Range { - get { - return ResourceManager.GetString("ChatBot.AutoAttack.Attack_Range", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to How long to wait between each attack. Set "Custom = false" to let MCC calculate it.. - /// - internal static string ChatBot_AutoAttack_Cooldown_Time { - get { - return ResourceManager.GetString("ChatBot.AutoAttack.Cooldown_Time", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to All entity types can be found here: https://mccteam.github.io/r/entity/#L15. - /// - internal static string ChatBot_AutoAttack_Entites_List { - get { - return ResourceManager.GetString("ChatBot.AutoAttack.Entites_List", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Possible values: "Interact", "Attack" (default), "InteractAt" (Interact and Attack).. - /// - internal static string ChatBot_AutoAttack_Interaction { - get { - return ResourceManager.GetString("ChatBot.AutoAttack.Interaction", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Wether to treat the entities list as a "whitelist" or as a "blacklist".. - /// - internal static string ChatBot_AutoAttack_List_Mode { - get { - return ResourceManager.GetString("ChatBot.AutoAttack.List_Mode", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to "single" or "multi". single target one mob per attack. multi target all mobs in range per attack. - /// - internal static string ChatBot_AutoAttack_Mode { - get { - return ResourceManager.GetString("ChatBot.AutoAttack.Mode", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to "health" or "distance". Only needed when using single mode. - /// - internal static string ChatBot_AutoAttack_Priority { - get { - return ResourceManager.GetString("ChatBot.AutoAttack.Priority", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Automatically craft items in your inventory - ///See https://mccteam.github.io/g/bots/#auto-craft for how to use - ///You need to enable Inventory Handling to use this bot - ///You should also enable Terrain and Movements if you need to use a crafting table. - /// - internal static string ChatBot_AutoCraft { - get { - return ResourceManager.GetString("ChatBot.AutoCraft", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Location of the crafting table if you intended to use it. Terrain and movements must be enabled.. - /// - internal static string ChatBot_AutoCraft_CraftingTable { - get { - return ResourceManager.GetString("ChatBot.AutoCraft.CraftingTable", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to What to do on crafting failure, "abort" or "wait".. - /// - internal static string ChatBot_AutoCraft_OnFailure { - get { - return ResourceManager.GetString("ChatBot.AutoCraft.OnFailure", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recipes.Name: The name can be whatever you like and it is used to represent the recipe. - ///Recipes.Type: crafting table type: "player" or "table" - ///Recipes.Result: the resulting item - ///Recipes.Slots: All slots, counting from left to right, top to bottom. Please fill in "Null" for empty slots. - ///For the naming of the items, please see: https://mccteam.github.io/r/item/#L12. - /// - internal static string ChatBot_AutoCraft_Recipes { - get { - return ResourceManager.GetString("ChatBot.AutoCraft.Recipes", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Auto-digging blocks. - ///You need to enable Terrain Handling to use this bot - ///You can use "/digbot start" and "/digbot stop" to control the start and stop of AutoDig. - ///Since MCC does not yet support accurate calculation of the collision volume of blocks, all blocks are considered as complete cubes when obtaining the position of the lookahead. - ///For the naming of the block, please see https://mccteam.github.io/r/block/#L15. - /// - internal static string ChatBot_AutoDig { - get { - return ResourceManager.GetString("ChatBot.AutoDig", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to How many seconds to wait after entering the game to start digging automatically, set to -1 to disable automatic start.. - /// - internal static string ChatBot_AutoDig_Auto_Start_Delay { - get { - return ResourceManager.GetString("ChatBot.AutoDig.Auto_Start_Delay", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Automatically switch to the appropriate tool.. - /// - internal static string ChatBot_AutoDig_Auto_Tool_Switch { - get { - return ResourceManager.GetString("ChatBot.AutoDig.Auto_Tool_Switch", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Apply Efficiency enchantment speed when AutoDig computes mining time. Disable this for strict anti-cheat compatibility.. - /// - internal static string ChatBot_AutoDig_Apply_Efficiency_Enchantments { - get { - return ResourceManager.GetString("ChatBot.AutoDig.Apply_Efficiency_Enchantments", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Apply Haste and Conduit Power speed effects when AutoDig computes mining time. Disable this for strict anti-cheat compatibility.. - /// - internal static string ChatBot_AutoDig_Apply_Haste_Effects { - get { - return ResourceManager.GetString("ChatBot.AutoDig.Apply_Haste_Effects", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Mining a block for more than "Dig_Timeout" seconds will be considered a timeout.. - /// - internal static string ChatBot_AutoDig_Dig_Timeout { - get { - return ResourceManager.GetString("ChatBot.AutoDig.Dig_Timeout", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to drop the current tool when its durability is too low.. - /// - internal static string ChatBot_AutoDig_Drop_Low_Durability_Tools { - get { - return ResourceManager.GetString("ChatBot.AutoDig.Drop_Low_Durability_Tools", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Will not use tools with less durability than this. Set to zero to disable this feature.. - /// - internal static string ChatBot_AutoDig_Durability_Limit { - get { - return ResourceManager.GetString("ChatBot.AutoDig.Durability_Limit", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Wether to treat the blocks list as a "whitelist" or as a "blacklist".. - /// - internal static string ChatBot_AutoDig_List_Type { - get { - return ResourceManager.GetString("ChatBot.AutoDig.List_Type", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to "distance" or "index", When using the "fixedpos" mode, the blocks are determined by distance to the player, or by the order in the list.. - /// - internal static string ChatBot_AutoDig_Location_Order { - get { - return ResourceManager.GetString("ChatBot.AutoDig.Location_Order", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The position of the blocks when using "fixedpos" or "both" mode.. - /// - internal static string ChatBot_AutoDig_Locations { - get { - return ResourceManager.GetString("ChatBot.AutoDig.Locations", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to output logs when digging blocks.. - /// - internal static string ChatBot_AutoDig_Log_Block_Dig { - get { - return ResourceManager.GetString("ChatBot.AutoDig.Log_Block_Dig", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to "lookat", "fixedpos" or "both". Digging the block being looked at, the block in a fixed position, or the block that needs to be all met.. - /// - internal static string ChatBot_AutoDig_Mode { - get { - return ResourceManager.GetString("ChatBot.AutoDig.Mode", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Automatically drop items in inventory - ///You need to enable Inventory Handling to use this bot - ///See this file for an up-to-date list of item types you can use with this bot: https://mccteam.github.io/r/item/#L12. - /// - internal static string ChatBot_AutoDrop { - get { - return ResourceManager.GetString("ChatBot.AutoDrop", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to "include", "exclude" or "everything". Include: drop item IN the list. Exclude: drop item NOT IN the list. - /// - internal static string ChatBot_AutoDrop_Mode { - get { - return ResourceManager.GetString("ChatBot.AutoDrop.Mode", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Automatically eat food when your Hunger value is low - ///You need to enable Inventory Handling to use this bot. - /// - internal static string ChatBot_AutoEat { - get { - return ResourceManager.GetString("ChatBot.AutoEat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Automatically catch fish using a fishing rod - ///Guide: https://mccteam.github.io/g/bots/#auto-fishing - ///You can use "/fish" to control the bot manually. - /// /!\ Make sure server rules allow automated farming before using this bot. - /// - internal static string ChatBot_AutoFishing { - get { - return ResourceManager.GetString("ChatBot.AutoFishing", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Keep it as false if you have not changed it before.. - /// - internal static string ChatBot_AutoFishing_Antidespawn { - get { - return ResourceManager.GetString("ChatBot.AutoFishing.Antidespawn", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Switch to a new rod from inventory after the current rod is unavailable.. - /// - internal static string ChatBot_AutoFishing_Auto_Rod_Switch { - get { - return ResourceManager.GetString("ChatBot.AutoFishing.Auto_Rod_Switch", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to start fishing automatically after entering a world.. - /// - internal static string ChatBot_AutoFishing_Auto_Start { - get { - return ResourceManager.GetString("ChatBot.AutoFishing.Auto_Start", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to How soon to re-cast after successful fishing.. - /// - internal static string ChatBot_AutoFishing_Cast_Delay { - get { - return ResourceManager.GetString("ChatBot.AutoFishing.Cast_Delay", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Will not use rods with less durability than this (full durability is 64). Set to zero to disable this feature.. - /// - internal static string ChatBot_AutoFishing_Durability_Limit { - get { - return ResourceManager.GetString("ChatBot.AutoFishing.Durability_Limit", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This allows the player to change position/facing after each fish caught.. - /// - internal static string ChatBot_AutoFishing_Enable_Move { - get { - return ResourceManager.GetString("ChatBot.AutoFishing.Enable_Move", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to How long after entering the game to start fishing (seconds).. - /// - internal static string ChatBot_AutoFishing_Fishing_Delay { - get { - return ResourceManager.GetString("ChatBot.AutoFishing.Fishing_Delay", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Fishing timeout (seconds). Timeout will trigger a re-cast.. - /// - internal static string ChatBot_AutoFishing_Fishing_Timeout { - get { - return ResourceManager.GetString("ChatBot.AutoFishing.Fishing_Timeout", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to A "stationary" hook that moves above this threshold in the Y-axis will be considered to have caught a fish.. - /// - internal static string ChatBot_AutoFishing_Hook_Threshold { - get { - return ResourceManager.GetString("ChatBot.AutoFishing.Hook_Threshold", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Used to adjust the above two thresholds, which when enabled will print the change in the position of the fishhook entity upon receipt of its movement packet.. - /// - internal static string ChatBot_AutoFishing_Log_Fish_Bobber { - get { - return ResourceManager.GetString("ChatBot.AutoFishing.Log_Fish_Bobber", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use the mainhand or the offhand to hold the rod.. - /// - internal static string ChatBot_AutoFishing_Mainhand { - get { - return ResourceManager.GetString("ChatBot.AutoFishing.Mainhand", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to It will move in order "1->2->3->4->3->2->1->2->..." and can change position or facing or both each time. It is recommended to change the facing only.. - /// - internal static string ChatBot_AutoFishing_Movements { - get { - return ResourceManager.GetString("ChatBot.AutoFishing.Movements", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Hook movement in the X and Z axis less than this value will be considered stationary.. - /// - internal static string ChatBot_AutoFishing_Stationary_Threshold { - get { - return ResourceManager.GetString("ChatBot.AutoFishing.Stationary_Threshold", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Automatically relog when disconnected by server, for example because the server is restating - /// /!\ Use Ignore_Kick_Message=true at own risk! Server staff might not appreciate if you auto-relog on manual kicks. - /// - internal static string ChatBot_AutoRelog { - get { - return ResourceManager.GetString("ChatBot.AutoRelog", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The delay time before joining the server. (in seconds). - /// - internal static string ChatBot_AutoRelog_Delay { - get { - return ResourceManager.GetString("ChatBot.AutoRelog.Delay", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Reconnect after any server kick or login rejection. Network interruptions always trigger Auto Relog.. - /// - internal static string ChatBot_AutoRelog_Ignore_Kick_Message { - get { - return ResourceManager.GetString("ChatBot.AutoRelog.Ignore_Kick_Message", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Case-insensitive text fragments that trigger Auto Relog for server kicks and login rejections.. - /// - internal static string ChatBot_AutoRelog_Kick_Messages { - get { - return ResourceManager.GetString("ChatBot.AutoRelog.Kick_Messages", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Exact retry limit. Use 0 to disable retries or -1 for unlimited retries. The count resets after 60 seconds online.. - /// - internal static string ChatBot_AutoRelog_Retries { - get { - return ResourceManager.GetString("ChatBot.AutoRelog.Retries", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Run commands or send messages automatically when a specified pattern is detected in chat - ///Server admins can spoof chat messages (/nick, /tellraw) so keep this in mind when implementing AutoRespond rules - /// /!\ This bot may get spammy depending on your rules, although the global messagecooldown setting can help you avoiding accidental spam. - /// - internal static string ChatBot_AutoRespond { - get { - return ResourceManager.GetString("ChatBot.AutoRespond", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Do not remove colors from text (Note: Your matches will have to include color codes (ones using the § character) in order to work). - /// - internal static string ChatBot_AutoRespond_Match_Colors { - get { - return ResourceManager.GetString("ChatBot.AutoRespond.Match_Colors", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Logs chat messages in a file on disk.. - /// - internal static string ChatBot_ChatLog { - get { - return ResourceManager.GetString("ChatBot.ChatLog", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This bot allows you to send and recieve messages and commands via a Discord channel. - ///For Setup you can either use the documentation or read here (Documentation has images). - ///Documentation: https://mccteam.github.io/g/bots/#discord-bridge - ///Setup: - ///First you need to create a Bot on the Discord Developers Portal, here is a video tutorial: https://www.youtube.com/watch?v=2FgMnZViNPA . - /// /!\ IMPORTANT /!\: When creating a bot, you MUST ENABLE "Message Content Intent", "Server Members Intent" and "Presence Intent [rest of string was truncated]";. - /// - internal static string ChatBot_DiscordBridge { - get { - return ResourceManager.GetString("ChatBot.DiscordBridge", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The ID of a channel where you want to interact with the MCC using the bot.. - /// - internal static string ChatBot_DiscordBridge_ChannelId { - get { - return ResourceManager.GetString("ChatBot.DiscordBridge.ChannelId", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Message formats - ///Words wrapped with { and } are going to be replaced during the code execution, do not change them! - ///For example. {message} is going to be replace with an actual message, {username} will be replaced with an username, {timestamp} with the current time. - ///For Discord message formatting, check the following: https://mccteam.github.io/r/dc-fmt.html. - /// - internal static string ChatBot_DiscordBridge_Formats { - get { - return ResourceManager.GetString("ChatBot.DiscordBridge.Formats", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The ID of a server/guild where you have invited the bot to.. - /// - internal static string ChatBot_DiscordBridge_GuildId { - get { - return ResourceManager.GetString("ChatBot.DiscordBridge.GuildId", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to How long to wait (in seconds) if a message can not be sent to discord before canceling the task (minimum 1 second).. - /// - internal static string ChatBot_DiscordBridge_MessageSendTimeout { - get { - return ResourceManager.GetString("ChatBot.DiscordBridge.MessageSendTimeout", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to A list of IDs of people you want to be able to interact with the MCC using the bot.. - /// - internal static string ChatBot_DiscordBridge_OwnersIds { - get { - return ResourceManager.GetString("ChatBot.DiscordBridge.OwnersIds", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Your Discord Bot token.. - /// - internal static string ChatBot_DiscordBridge_Token { - get { - return ResourceManager.GetString("ChatBot.DiscordBridge.Token", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to When enabled, messages from other Discord bots in the channel will be relayed to Minecraft chat.. - /// - internal static string ChatBot_DiscordBridge_AllowOtherBotMessages { - get { - return ResourceManager.GetString("ChatBot.DiscordBridge.AllowOtherBotMessages", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Automatically farms cropsfor you (plants, breaks and bonemeals them). - ///Crop types available: Beetroot, Carrot, Melon, Netherwart, Pumpkin, Potato, Wheat. - ///Usage: "/farmer start" command and "/farmer stop" command. - ///NOTE: This a newly added bot, it is not perfect and was only tested in 1.19.2, there are some minor issues like not being able to bonemeal carrots/potatoes sometimes. - ///or bot jumps onto the farm land and breaks it (this happens rarely but still happens). We are looking forward at improving this. [rest of string was truncated]";. - /// - internal static string ChatBot_Farmer { - get { - return ResourceManager.GetString("ChatBot.Farmer", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Delay between tasks in seconds (Minimum 1 second). - /// - internal static string ChatBot_Farmer_Delay_Between_Tasks { - get { - return ResourceManager.GetString("ChatBot.Farmer.Delay_Between_Tasks", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Enabled you to make the bot follow you - ///NOTE: This is an experimental feature, the bot can be slow at times, you need to walk with a normal speed and to sometimes stop for it to be able to keep up with you - ///It's similar to making animals follow you when you're holding food in your hand. - ///This is due to a slow pathfinding algorithm, we're working on getting a better one - ///You can tweak the update limit and find what works best for you. (NOTE: Do not but a very low one, because you might achieve the opposite, - /// [rest of string was truncated]";. - /// - internal static string ChatBot_FollowPlayer { - get { - return ResourceManager.GetString("ChatBot.FollowPlayer", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Do not follow the player if he is in the range of 3 blocks (prevents the bot from pushing a player in an infinite loop). - /// - internal static string ChatBot_FollowPlayer_Stop_At_Distance { - get { - return ResourceManager.GetString("ChatBot.FollowPlayer.Stop_At_Distance", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The rate at which the bot does calculations (in seconds) (You can tweak this if you feel the bot is too slow). - /// - internal static string ChatBot_FollowPlayer_Update_Limit { - get { - return ResourceManager.GetString("ChatBot.FollowPlayer.Update_Limit", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to A small game to demonstrate chat interactions. Players can guess mystery words one letter at a time. - ///You need to have ChatFormat working correctly and add yourself in botowners to start the game with /tell <bot username> start - /// /!\ This bot may get a bit spammy if many players are interacting with it. - /// - internal static string ChatBot_HangmanGame { - get { - return ResourceManager.GetString("ChatBot.HangmanGame", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to A Chat Bot that collects items on the ground. - /// - internal static string ChatBot_ItemsCollector { - get { - return ResourceManager.GetString("ChatBot.ItemsCollector", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to If set to true, the bot will return to it's starting position after there are no items to collect. - /// - internal static string ChatBot_ItemsCollector_Always_Return_To_Start { - get { - return ResourceManager.GetString("ChatBot.ItemsCollector.Always_Return_To_Start", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to If set to true, the bot will collect all items, regardless of their type. If you want to use the whitelisted item types, disable this by setting it to false. - /// - internal static string ChatBot_ItemsCollector_Collect_All_Item_Types { - get { - return ResourceManager.GetString("ChatBot.ItemsCollector.Collect_All_Item_Types", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The radius in which bot will look for items to collect (Default: 30). - /// - internal static string ChatBot_ItemsCollector_Collection_Radius { - get { - return ResourceManager.GetString("ChatBot.ItemsCollector.Collection_Radius", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Delay in milliseconds between bot scanning items (Recommended: 300-500). - /// - internal static string ChatBot_ItemsCollector_Delay_Between_Tasks { - get { - return ResourceManager.GetString("ChatBot.ItemsCollector.Delay_Between_Tasks", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to In this list you can specify which items the bot will collect. To enable this, set the Collect_All_Item_Types to false. (NOTE: This does not prevent the bot from accidentally picking up other items, it only goes to positions where it finds the whitelisted items)\nYou can see the list of item types here: https://raw.githubusercontent.com/MCCTeam/Minecraft-Console-Client/master/MinecraftClient/Inventory/ItemType.cs. - /// - internal static string ChatBot_ItemsCollector_Items_Whitelist { - get { - return ResourceManager.GetString("ChatBot.ItemsCollector.Items_Whitelist", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to If set to true, the bot will go after clustered items instead for the closest ones. - /// - internal static string ChatBot_ItemsCollector_Prioritize_Clusters { - get { - return ResourceManager.GetString("ChatBot.ItemsCollector.Prioritize_Clusters", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Show a Discord Rich Presence status with your current Minecraft session info. - ///Setup: - ///1. Go to https://discord.com/developers/applications and log in with your Discord account. [rest of string was truncated]";. - /// - internal static string ChatBot_DiscordRpc { - get { - return ResourceManager.GetString("ChatBot.DiscordRpc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Your Discord Application ID.. - /// - internal static string ChatBot_DiscordRpc_ApplicationId { - get { - return ResourceManager.GetString("ChatBot.DiscordRpc.ApplicationId", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The top line of the Rich Presence display. Supports placeholders.. - /// - internal static string ChatBot_DiscordRpc_PresenceDetails { - get { - return ResourceManager.GetString("ChatBot.DiscordRpc.PresenceDetails", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The second line of the Rich Presence display. Supports placeholders.. - /// - internal static string ChatBot_DiscordRpc_PresenceState { - get { - return ResourceManager.GetString("ChatBot.DiscordRpc.PresenceState", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The key of the large image asset uploaded to your Discord application.. - /// - internal static string ChatBot_DiscordRpc_LargeImageKey { - get { - return ResourceManager.GetString("ChatBot.DiscordRpc.LargeImageKey", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Tooltip text for the large image. Supports placeholders.. - /// - internal static string ChatBot_DiscordRpc_LargeImageText { - get { - return ResourceManager.GetString("ChatBot.DiscordRpc.LargeImageText", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The key of the small image asset uploaded to your Discord application (leave empty to hide).. - /// - internal static string ChatBot_DiscordRpc_SmallImageKey { - get { - return ResourceManager.GetString("ChatBot.DiscordRpc.SmallImageKey", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Tooltip text for the small image. Supports placeholders.. - /// - internal static string ChatBot_DiscordRpc_SmallImageText { - get { - return ResourceManager.GetString("ChatBot.DiscordRpc.SmallImageText", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Show the server address (host and port) in the Discord presence.. - /// - internal static string ChatBot_DiscordRpc_ShowServerAddress { - get { - return ResourceManager.GetString("ChatBot.DiscordRpc.ShowServerAddress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Show the player coordinates in the Discord presence.. - /// - internal static string ChatBot_DiscordRpc_ShowCoordinates { - get { - return ResourceManager.GetString("ChatBot.DiscordRpc.ShowCoordinates", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Show health and food level in the Discord presence.. - /// - internal static string ChatBot_DiscordRpc_ShowHealth { - get { - return ResourceManager.GetString("ChatBot.DiscordRpc.ShowHealth", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Show the current dimension in the Discord presence.. - /// - internal static string ChatBot_DiscordRpc_ShowDimension { - get { - return ResourceManager.GetString("ChatBot.DiscordRpc.ShowDimension", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Show the current gamemode in the Discord presence.. - /// - internal static string ChatBot_DiscordRpc_ShowGamemode { - get { - return ResourceManager.GetString("ChatBot.DiscordRpc.ShowGamemode", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Show elapsed session time in the Discord presence.. - /// - internal static string ChatBot_DiscordRpc_ShowElapsedTime { - get { - return ResourceManager.GetString("ChatBot.DiscordRpc.ShowElapsedTime", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Show the online player count as a party size in the Discord presence.. - /// - internal static string ChatBot_DiscordRpc_ShowPlayerCount { - get { - return ResourceManager.GetString("ChatBot.DiscordRpc.ShowPlayerCount", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to How often (in seconds) to refresh the Discord presence. Minimum: 1. - /// - internal static string ChatBot_DiscordRpc_UpdateIntervalSeconds { - get { - return ResourceManager.GetString("ChatBot.DiscordRpc.UpdateIntervalSeconds", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Relay messages between players and servers, like a mail plugin - ///This bot can store messages when the recipients are offline, and send them when they join the server - /// /!\ Server admins can spoof PMs (/tellraw, /nick) so enable this bot only if you trust server admins. - /// - internal static string ChatBot_Mailer { - get { - return ResourceManager.GetString("ChatBot.Mailer", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Allows you to render maps in the console and into images (which can be then sent to Discord using Discord Bridge Chat Bot) - ///This is useful for solving captchas which use maps - ///The maps are rendered into Rendered_Maps folder if the Save_To_File is enabled. - ///NOTE: - ///If some servers have a very short time for solving captchas, enabe Auto_Render_On_Update to see them immediatelly in the console. - /// /!\ Make sure server rules allow bots to be used on the server, or you risk being punished.. - /// - internal static string ChatBot_Map { - get { - return ResourceManager.GetString("ChatBot.Map", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Automatically render the map once it is received or updated from/by the server. - /// - internal static string ChatBot_Map_Auto_Render_On_Update { - get { - return ResourceManager.GetString("ChatBot.Map.Auto_Render_On_Update", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Delete all rendered maps on unload/reload or when you launch the MCC again.. - /// - internal static string ChatBot_Map_Delete_All_On_Unload { - get { - return ResourceManager.GetString("ChatBot.Map.Delete_All_On_Unload", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Get a notification when you have gotten a map from the server for the first time. - /// - internal static string ChatBot_Map_Notify_On_First_Update { - get { - return ResourceManager.GetString("ChatBot.Map.Notify_On_First_Update", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Resize an rendered image, this is useful when images that are rendered are small and when are being sent to Discord.. - /// - internal static string ChatBot_Map_Rasize_Rendered_Image { - get { - return ResourceManager.GetString("ChatBot.Map.Rasize_Rendered_Image", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to render the map in the console.. - /// - internal static string ChatBot_Map_Render_In_Console { - get { - return ResourceManager.GetString("ChatBot.Map.Render_In_Console", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The size that a rendered image should be resized to, in pixels (eg. 512).. - /// - internal static string ChatBot_Map_Resize_To { - get { - return ResourceManager.GetString("ChatBot.Map.Resize_To", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to store the rendered map as a file (You need this setting if you want to get a map on Discord using Discord Bridge).. - /// - internal static string ChatBot_Map_Save_To_File { - get { - return ResourceManager.GetString("ChatBot.Map.Save_To_File", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Send a rendered map (saved to a file) to a Discord or a Telegram channel via the Discord or Telegram Bride chat bot (The Discord/Telegram Bridge chat bot must be enabled and configured!) - ///You need to enable Save_To_File in order for this to work. - ///We also recommend turning on resizing.. - /// - internal static string ChatBot_Map_Send_Rendered_To_Bridges { - get { - return ResourceManager.GetString("ChatBot.Map.Send_Rendered_To_Bridges", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Log the list of players periodically into a textual file.. - /// - internal static string ChatBot_PlayerListLogger { - get { - return ResourceManager.GetString("ChatBot.PlayerListLogger", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to (In seconds). - /// - internal static string ChatBot_PlayerListLogger_Delay { - get { - return ResourceManager.GetString("ChatBot.PlayerListLogger.Delay", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Send MCC console commands to your bot through server PMs (/tell) - ///You need to have ChatFormat working correctly and add yourself in botowners to use the bot - /// /!\ Server admins can spoof PMs (/tellraw, /nick) so enable RemoteControl only if you trust server admins. - /// - internal static string ChatBot_RemoteControl { - get { - return ResourceManager.GetString("ChatBot.RemoteControl", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Enable recording of the game (/replay start) and replay it later using the Replay Mod (https://www.replaymod.com/) - ///Please note that due to technical limitations, the client player (you) will not be shown in the replay file - /// /!\ You SHOULD use /replay stop or exit the program gracefully with /quit OR THE REPLAY FILE MAY GET CORRUPT!. - /// - internal static string ChatBot_ReplayCapture { - get { - return ResourceManager.GetString("ChatBot.ReplayCapture", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to How long should replay file be auto-saved, in seconds. Use -1 to disable.. - /// - internal static string ChatBot_ReplayCapture_Backup_Interval { - get { - return ResourceManager.GetString("ChatBot.ReplayCapture.Backup_Interval", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Schedule commands and scripts to launch on various events such as server join, date/time or time interval - ///See https://mccteam.github.io/g/bots/#script-scheduler for more info. - /// - internal static string ChatBot_ScriptScheduler { - get { - return ResourceManager.GetString("ChatBot.ScriptScheduler", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This bot allows you to send and receive messages and commands via a Telegram Bot DM or to receive messages in a Telegram channel. - /// /!\ NOTE: You can't send messages and commands from a group channel, you can only send them in the bot DM, but you can get the messages from the client in a group channel. - ///----------------------------------------------------------- - ///Setup: - ///First you need to create a Telegram bot and obtain an API key, to do so, go to Telegram and find @botfather - ///Click on "Start" button and re [rest of string was truncated]";. - /// - internal static string ChatBot_TelegramBridge { - get { - return ResourceManager.GetString("ChatBot.TelegramBridge", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to A list of Chat IDs that are allowed to send messages and execute commands. To get an id of your chat DM with the bot use ".chatid" bot command in Telegram.. - /// - internal static string ChatBot_TelegramBridge_Authorized_Chat_Ids { - get { - return ResourceManager.GetString("ChatBot.TelegramBridge.Authorized_Chat_Ids", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An ID of a channel where you want to interact with the MCC using the bot.. - /// - internal static string ChatBot_TelegramBridge_ChannelId { - get { - return ResourceManager.GetString("ChatBot.TelegramBridge.ChannelId", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Message formats - ///Words wrapped with { and } are going to be replaced during the code execution, do not change them! - ///For example. {message} is going to be replace with an actual message, {username} will be replaced with an username, {timestamp} with the current time. - ///For Telegram message formatting, check the following: https://mccteam.github.io/r/tg-fmt.html. - /// - internal static string ChatBot_TelegramBridge_Formats { - get { - return ResourceManager.GetString("ChatBot.TelegramBridge.Formats", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to How long to wait (in seconds) if a message can not be sent to Telegram before canceling the task (minimum 1 second).. - /// - internal static string ChatBot_TelegramBridge_MessageSendTimeout { - get { - return ResourceManager.GetString("ChatBot.TelegramBridge.MessageSendTimeout", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Your Telegram Bot token.. - /// - internal static string ChatBot_TelegramBridge_Token { - get { - return ResourceManager.GetString("ChatBot.TelegramBridge.Token", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Remotely control the client using Web Sockets.\n# This is useful if you want to implement an application that can remotely and asynchronously execute procedures in MCC.\n# Example implementation written in JavaScript: https://github.com/milutinke/MCC.js.git\n# The protocol specification will be available in the documentation soon.. - /// - internal static string ChatBot_WebSocketBot { - get { - return ResourceManager.GetString("ChatBot.WebSocketBot", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Allow IP aliases, such as "localhost" or if using containers then the container name can be used.... - /// - internal static string ChatBot_WebSocketBot_AllowIpAlias { - get { - return ResourceManager.GetString("ChatBot.WebSocketBot.AllowIpAlias", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This setting is for developers who are developing a library that uses this chat bot to remotely execute procedures/commands/functions.. - /// - internal static string ChatBot_WebSocketBot_DebugMode { - get { - return ResourceManager.GetString("ChatBot.WebSocketBot.DebugMode", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The IP address that Websocket server will be bound to.. - /// - internal static string ChatBot_WebSocketBot_Ip { - get { - return ResourceManager.GetString("ChatBot.WebSocketBot.Ip", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to A password that will be used to authenticate on thw Websocket server (It is recommended to change the default password and to set a strong one).. - /// - internal static string ChatBot_WebSocketBot_Password { - get { - return ResourceManager.GetString("ChatBot.WebSocketBot.Password", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The Port that Websocket server will be bounded to.. - /// - internal static string ChatBot_WebSocketBot_Port { - get { - return ResourceManager.GetString("ChatBot.WebSocketBot.Port", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to MCC does it best to detect chat messages, but some server have unusual chat formats - ///When this happens, you'll need to configure chat format below, see https://mccteam.github.io/g/conf/#chat-format-section. - /// - internal static string ChatFormat { - get { - return ResourceManager.GetString("ChatFormat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to MCC support for common message formats. Set "false" to avoid conflicts with custom formats.. - /// - internal static string ChatFormat_Builtins { - get { - return ResourceManager.GetString("ChatFormat.Builtins", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to use the custom regular expressions below for detection.. - /// - internal static string ChatFormat_UserDefined { - get { - return ResourceManager.GetString("ChatFormat.UserDefined", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Console-related settings.. - /// - internal static string Console { - get { - return ResourceManager.GetString("Console", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The settings for command completion suggestions. - ///Custom colors are only available when using "vt100_24bit" color mode.. - /// - internal static string Console_CommandSuggestion { - get { - return ResourceManager.GetString("Console.CommandSuggestion", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to display command suggestions in the console.. - /// - internal static string Console_CommandSuggestion_Enable { - get { - return ResourceManager.GetString("Console.CommandSuggestion.Enable", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Enable this option if the arrows in the command suggestions are not displayed properly in your terminal.. - /// - internal static string Console_CommandSuggestion_Use_Basic_Arrow { - get { - return ResourceManager.GetString("Console.CommandSuggestion.Use_Basic_Arrow", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Console mode: "classic" for the standard terminal, "tui" for a pseudo-graphical full-screen interface.. - /// - internal static string Console_General_ConsoleMode { - get { - return ResourceManager.GetString("Console.General.ConsoleMode", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use "disable", "legacy_4bit", "vt100_4bit", "vt100_8bit" or "vt100_24bit". If a garbled code like "←[0m" appears on the terminal, you can try switching to "legacy_4bit" mode, or just disable it.. - /// - internal static string Console_General_ConsoleColorMode { - get { - return ResourceManager.GetString("Console.General.ConsoleColorMode", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to display the MCC startup banner with version info and icon.. - /// - internal static string Console_General_Display_Icon_Banner { - get { - return ResourceManager.GetString("Console.General.Display_Icon_Banner", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You can use "Ctrl+P" to print out the current input and cursor position.. - /// - internal static string Console_General_Display_Input { - get { - return ResourceManager.GetString("Console.General.Display_Input", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to display received chat messages in the console. This does not affect chat bots or chat log files.. - /// - internal static string Console_General_Display_Chat { - get { - return ResourceManager.GetString("Console.General.Display_Chat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Maximum number of input history records to keep.. - /// - internal static string Console_General_History_Input_Records { - get { - return ResourceManager.GetString("Console.General.History_Input_Records", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Maximum log lines kept in TUI mode scrollback. Set to 0 for automatic (3000 on x86/x64, 500 on ARM).. - /// - internal static string Console_General_TUI_Log_Scrollback { - get { - return ResourceManager.GetString("Console.General.TUI_Log_Scrollback", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Startup Config File - ///Please do not record extraneous data in this file as it will be overwritten by MCC. - /// - ///New to Minecraft Console Client? Check out this document: https://mccteam.github.io/g/conf.html - ///Want to upgrade to a newer version? See https://github.com/MCCTeam/Minecraft-Console-Client/#download. - /// - internal static string Head { - get { - return ResourceManager.GetString("Head", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This setting affects only the messages in the console.. - /// - internal static string Logging { - get { - return ResourceManager.GetString("Logging", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Regex for filtering chat message.. - /// - internal static string Logging_ChatFilter { - get { - return ResourceManager.GetString("Logging.ChatFilter", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Show server chat messages.. - /// - internal static string Logging_ChatMessages { - get { - return ResourceManager.GetString("Logging.ChatMessages", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Regex for filtering debug message.. - /// - internal static string Logging_DebugFilter { - get { - return ResourceManager.GetString("Logging.DebugFilter", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please enable this before submitting bug reports. Thanks!. - /// - internal static string Logging_DebugMessages { - get { - return ResourceManager.GetString("Logging.DebugMessages", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Show low-level packet debug logs.. - /// - internal static string Logging_PacketDebugMessages { - get { - return ResourceManager.GetString("Logging.PacketDebugMessages", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Packet types to exclude from packet debug logs, e.g. ["KeepAlive", "Ping"].. - /// - internal static string Logging_PacketDebugExclusions { - get { - return ResourceManager.GetString("Logging.PacketDebugExclusions", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Show error messages.. - /// - internal static string Logging_ErrorMessages { - get { - return ResourceManager.GetString("Logging.ErrorMessages", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to "disable" or "blacklist" OR "whitelist". Blacklist hide message match regex. Whitelist show message match regex.. - /// - internal static string Logging_FilterMode { - get { - return ResourceManager.GetString("Logging.FilterMode", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Informative messages. (i.e Most of the message from MCC). - /// - internal static string Logging_InfoMessages { - get { - return ResourceManager.GetString("Logging.InfoMessages", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Log file name.. - /// - internal static string Logging_LogFile { - get { - return ResourceManager.GetString("Logging.LogFile", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Write log messages to file.. - /// - internal static string Logging_LogToFile { - get { - return ResourceManager.GetString("Logging.LogToFile", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Prepend timestamp to messages in log file.. - /// - internal static string Logging_PrependTimestamp { - get { - return ResourceManager.GetString("Logging.PrependTimestamp", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Keep color codes in the saved text.(look like "§b"). - /// - internal static string Logging_SaveColorCodes { - get { - return ResourceManager.GetString("Logging.SaveColorCodes", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Show warning messages.. - /// - internal static string Logging_WarningMessages { - get { - return ResourceManager.GetString("Logging.WarningMessages", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Make sure you understand what each setting does before changing anything!. - /// - internal static string Main_Advanced { - get { - return ResourceManager.GetString("Main.Advanced", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AccountList: It allows a fast account switching without directly using the credentials - ///Usage examples: "/tell <mybot> reco Player2", "/connect <serverip> Player1". - /// - internal static string Main_Advanced_account_list { - get { - return ResourceManager.GetString("Main.Advanced.account_list", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Toggle auto respawn if client player was dead (make sure your spawn point is safe).. - /// - internal static string Main_Advanced_auto_respawn { - get { - return ResourceManager.GetString("Main.Advanced.auto_respawn", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Set the owner of the bot. /!\ Server admins can impersonate owners!. - /// - internal static string Main_Advanced_bot_owners { - get { - return ResourceManager.GetString("Main.Advanced.bot_owners", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use "mcc", "vanilla" or "none". This is how MCC identifies itself to the server.. - /// - internal static string Main_Advanced_brand_info { - get { - return ResourceManager.GetString("Main.Advanced.brand_info", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Leave empty for no logfile.. - /// - internal static string Main_Advanced_chatbot_log_file { - get { - return ResourceManager.GetString("Main.Advanced.chatbot_log_file", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to If turned off, the emoji will be replaced with a simpler character (for /chunk status).. - /// - internal static string Main_Advanced_enable_emoji { - get { - return ResourceManager.GetString("Main.Advanced.enable_emoji", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Set to false to opt-out of Sentry error logging.. - /// - internal static string Main_Advanced_enable_sentry { - get { - return ResourceManager.GetString("Main.Advanced.enable_sentry", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Toggle entity handling.. - /// - internal static string Main_Advanced_entity_handling { - get { - return ResourceManager.GetString("Main.Advanced.entity_handling", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to exit directly when an error occurs, for using MCC in non-interactive scripts.. - /// - internal static string Main_Advanced_exit_on_failure { - get { - return ResourceManager.GetString("Main.Advanced.exit_on_failure", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Ignore invalid player name. - /// - internal static string Main_Advanced_ignore_invalid_playername { - get { - return ResourceManager.GetString("Main.Advanced.ignore_invalid_playername", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use "none", "slash"(/) or "backslash"(\).. - /// - internal static string Main_Advanced_internal_cmd_char { - get { - return ResourceManager.GetString("Main.Advanced.internal_cmd_char", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Toggle inventory handling.. - /// - internal static string Main_Advanced_inventory_handling { - get { - return ResourceManager.GetString("Main.Advanced.inventory_handling", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Fill in with in-game locale code, check https://mccteam.github.io/r/l-code.html. - /// - internal static string Main_Advanced_language { - get { - return ResourceManager.GetString("Main.Advanced.language", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Load translations applied to MCC when available, turn it off to use English only.. - /// - internal static string Main_Advanced_LoadMccTrans { - get { - return ResourceManager.GetString("Main.Advanced.LoadMccTrans", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use "auto", "no" or "force". Force-enabling only works for MC 1.13+.. - /// - internal static string Main_Advanced_mc_forge { - get { - return ResourceManager.GetString("Main.Advanced.mc_forge", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use "auto" or "1.X.X" values. Allows to skip server info retrieval.. - /// - internal static string Main_Advanced_mc_version { - get { - return ResourceManager.GetString("Main.Advanced.mc_version", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Controls the minimum interval (in seconds) between sending each message to the server.. - /// - internal static string Main_Advanced_message_cooldown { - get { - return ResourceManager.GetString("Main.Advanced.message_cooldown", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Override the maximum chat message length. Set to 0 to use the default (100 for 1.10 and below, 256 for 1.11+). WARNING: Setting this incorrectly may cause you to be kicked from the server.. - /// - internal static string Main_Advanced_max_chat_message_length { - get { - return ResourceManager.GetString("Main.Advanced.max_chat_message_length", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Enable support for joining Minecraft Realms worlds.. - /// - internal static string Main_Advanced_minecraft_realms { - get { - return ResourceManager.GetString("Main.Advanced.minecraft_realms", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The minimum height to use when calculating the image size from the height of the terminal.. - /// - internal static string Main_Advanced_MinTerminalHeight { - get { - return ResourceManager.GetString("Main.Advanced.MinTerminalHeight", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The minimum width used when calculating the image size from the width of the terminal.. - /// - internal static string Main_Advanced_MinTerminalWidth { - get { - return ResourceManager.GetString("Main.Advanced.MinTerminalWidth", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Enable head movement while walking to avoid anti-cheat triggers.. - /// - internal static string Main_Advanced_move_head_while_walking { - get { - return ResourceManager.GetString("Main.Advanced.move_head_while_walking", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to A movement speed higher than 2 may be considered cheating.. - /// - internal static string Main_Advanced_movement_speed { - get { - return ResourceManager.GetString("Main.Advanced.movement_speed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Only works on Windows XP-8 or Windows 10 with old console.. - /// - internal static string Main_Advanced_player_head_icon { - get { - return ResourceManager.GetString("Main.Advanced.player_head_icon", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to For remote control of the bot.. - /// - internal static string Main_Advanced_private_msgs_cmd_name { - get { - return ResourceManager.GetString("Main.Advanced.private_msgs_cmd_name", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to How to retain profile key. Use "none", "memory" or "disk".. - /// - internal static string Main_Advanced_profilekey_cache { - get { - return ResourceManager.GetString("Main.Advanced.profilekey_cache", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use "no", "fast" (5s timeout), or "yes". Required for joining some servers.. - /// - internal static string Main_Advanced_resolve_srv_records { - get { - return ResourceManager.GetString("Main.Advanced.resolve_srv_records", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cache compiled scripts for faster load on low-end devices.. - /// - internal static string Main_Advanced_script_cache { - get { - return ResourceManager.GetString("Main.Advanced.script_cache", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ServerList: It allows an easier and faster server switching with short aliases instead of full server IP - ///Aliases cannot contain dots or spaces, and the name "localhost" cannot be used as an alias. - ///Usage examples: "/tell <mybot> connect Server1", "/connect Server2". - /// - internal static string Main_Advanced_server_list { - get { - return ResourceManager.GetString("Main.Advanced.server_list", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to How to retain session tokens. Use "none", "memory" or "disk".. - /// - internal static string Main_Advanced_session_cache { - get { - return ResourceManager.GetString("Main.Advanced.session_cache", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Decode links embedded in chat messages and show them in console.. - /// - internal static string Main_Advanced_show_chat_links { - get { - return ResourceManager.GetString("Main.Advanced.show_chat_links", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Show inventory layout as ASCII art in inventory command.. - /// - internal static string Main_Advanced_show_inventory_layout { - get { - return ResourceManager.GetString("Main.Advanced.show_inventory_layout", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Show a GitHub star reminder on startup. Set to false to hide it.. - /// - internal static string Main_Advanced_show_github_star_reminder { - get { - return ResourceManager.GetString("Main.Advanced.show_github_star_reminder", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Show full effect names and levels in the TUI status bar instead of compact effect icons only.. - /// - internal static string Main_Advanced_show_effect_names_in_tui { - get { - return ResourceManager.GetString("Main.Advanced.show_effect_names_in_tui", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to System messages for server ops.. - /// - internal static string Main_Advanced_show_system_messages { - get { - return ResourceManager.GetString("Main.Advanced.show_system_messages", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Messages displayed above xp bar, set this to false in case of xp bar spam.. - /// - internal static string Main_Advanced_show_xpbar_messages { - get { - return ResourceManager.GetString("Main.Advanced.show_xpbar_messages", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Temporary fix for Badpacket issue on some servers. Need to enable "TerrainAndMovements" first.. - /// - internal static string Main_Advanced_temporary_fix_badpacket { - get { - return ResourceManager.GetString("Main.Advanced.temporary_fix_badpacket", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Uses more ram, cpu, bandwidth but allows you to move around.. - /// - internal static string Main_Advanced_terrain_and_movements { - get { - return ResourceManager.GetString("Main.Advanced.terrain_and_movements", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Customize the TCP connection timeout with the server. (in seconds). - /// - internal static string Main_Advanced_timeout { - get { - return ResourceManager.GetString("Main.Advanced.timeout", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Prepend timestamps to chat messages.. - /// - internal static string Main_Advanced_timestamps { - get { - return ResourceManager.GetString("Main.Advanced.timestamps", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Login=Email or Name. Use "-" as password for offline mode. Leave blank to prompt user on startup.. - /// - internal static string Main_General_account { - get { - return ResourceManager.GetString("Main.General.account", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Yggdrasil authlib server domain name and port.. - /// - internal static string Main_General_AuthlibServer { - get { - return ResourceManager.GetString("Main.General.AuthlibServer", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Authlib-injector URL to use for Yggdrasil accounts. It must use http or https and include any required path.. - /// - internal static string Main_General_AuthServerUrl { - get { - return ResourceManager.GetString("Main.General.AuthServerUrl", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Yggdrasil authlib multi-user selection.. - /// - internal static string Main_General_AuthlibUser { - get { - return ResourceManager.GetString("Main.General.AuthlibUser", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The address of the game server, "Host" can be filled in with domain name or IP address. (The "Port" field can be deleted, it will be resolved automatically). - /// - internal static string Main_General_login { - get { - return ResourceManager.GetString("Main.General.login", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Microsoft Account sign-in method: "mcc" (device code, supports 2FA) OR "browser" (manual browser login).. - /// - internal static string Main_General_method { - get { - return ResourceManager.GetString("Main.General.method", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Account type: "mojang" OR "microsoft" OR "yggdrasil". Also affects interactive login in console.. - /// - internal static string Main_General_server_info { - get { - return ResourceManager.GetString("Main.General.server_info", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Settings below are sent to the server and only affect server-side things like your skin.. - /// - internal static string MCSettings { - get { - return ResourceManager.GetString("MCSettings", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Allows disabling chat colors server-side.. - /// - internal static string MCSettings_ChatColors { - get { - return ResourceManager.GetString("MCSettings.ChatColors", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use "enabled", "commands", or "disabled". Allows to mute yourself.... - /// - internal static string MCSettings_ChatMode { - get { - return ResourceManager.GetString("MCSettings.ChatMode", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to MC 1.7- difficulty. "peaceful", "easy", "normal", "difficult".. - /// - internal static string MCSettings_Difficulty { - get { - return ResourceManager.GetString("MCSettings.Difficulty", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to If disabled, settings below are not sent to the server.. - /// - internal static string MCSettings_Enabled { - get { - return ResourceManager.GetString("MCSettings.Enabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use any language implemented in Minecraft.. - /// - internal static string MCSettings_Locale { - get { - return ResourceManager.GetString("MCSettings.Locale", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to MC 1.9+ main hand. "left" or "right".. - /// - internal static string MCSettings_MainHand { - get { - return ResourceManager.GetString("MCSettings.MainHand", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Value range: [0 - 255].. - /// - internal static string MCSettings_RenderDistance { - get { - return ResourceManager.GetString("MCSettings.RenderDistance", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Connect to a server via a proxy instead of connecting directly - ///If Mojang session services are blocked on your network, set Enabled_Login=true to login using proxy. - ///If the connection to the Minecraft game server is blocked by the firewall, set Enabled_Ingame=true to use a proxy to connect to the game server. - /// /!\ Make sure your server rules allow Proxies or VPNs before setting enabled=true, or you may face consequences!. - /// - internal static string Proxy { - get { - return ResourceManager.GetString("Proxy", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to connect to the game server through a proxy.. - /// - internal static string Proxy_Enabled_Ingame { - get { - return ResourceManager.GetString("Proxy.Enabled_Ingame", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to connect to the login server through a proxy.. - /// - internal static string Proxy_Enabled_Login { - get { - return ResourceManager.GetString("Proxy.Enabled_Login", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to download MCC updates via proxy.. - /// - internal static string Proxy_Enabled_Update { - get { - return ResourceManager.GetString("Proxy.Enabled_Update", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Only required for password-protected proxies.. - /// - internal static string Proxy_Password { - get { - return ResourceManager.GetString("Proxy.Password", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Supported types: "HTTP", "SOCKS4", "SOCKS4a", "SOCKS5".. - /// - internal static string Proxy_Proxy_Type { - get { - return ResourceManager.GetString("Proxy.Proxy_Type", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Proxy server must allow HTTPS for login, and non-443 ports for playing.. - /// - internal static string Proxy_Server { - get { - return ResourceManager.GetString("Proxy.Server", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Only required for password-protected proxies.. - /// - internal static string Proxy_Username { - get { - return ResourceManager.GetString("Proxy.Username", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Chat signature related settings (affects minecraft 1.19+). - /// - internal static string Signature { - get { - return ResourceManager.GetString("Signature", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Microsoft accounts only. If disabled, will not be able to sign chat and join servers configured with "enforce-secure-profile=true". - /// - internal static string Signature_LoginWithSecureProfile { - get { - return ResourceManager.GetString("Signature.LoginWithSecureProfile", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use red    color block to mark chat without legitimate signature. - /// - internal static string Signature_MarkIllegallySignedMsg { - get { - return ResourceManager.GetString("Signature.MarkIllegallySignedMsg", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use green  color block to mark chat with legitimate signatures. - /// - internal static string Signature_MarkLegallySignedMsg { - get { - return ResourceManager.GetString("Signature.MarkLegallySignedMsg", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use yellow color block to mark chat that have been modified by the server.. - /// - internal static string Signature_MarkModifiedMsg { - get { - return ResourceManager.GetString("Signature.MarkModifiedMsg", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use gray   color block to mark system message (always without signature). - /// - internal static string Signature_MarkSystemMessage { - get { - return ResourceManager.GetString("Signature.MarkSystemMessage", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to display chat and messages in commands without legal signatures. - /// - internal static string Signature_ShowIllegalSignedChat { - get { - return ResourceManager.GetString("Signature.ShowIllegalSignedChat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Set to true to display messages modified by the server, false to display the original signed messages. - /// - internal static string Signature_ShowModifiedChat { - get { - return ResourceManager.GetString("Signature.ShowModifiedChat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to sign the chat send from MCC. - /// - internal static string Signature_SignChat { - get { - return ResourceManager.GetString("Signature.SignChat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Whether to sign the messages contained in the commands sent by MCC. For example, the message in "/msg" and "/me". - /// - internal static string Signature_SignMessageInCommand { - get { - return ResourceManager.GetString("Signature.SignMessageInCommand", resourceCulture); - } - } - } -} diff --git a/MinecraftClient/Resources/ConfigComments/ConfigComments.resx b/MinecraftClient/Resources/ConfigComments/ConfigComments.resx deleted file mode 100644 index f109fd03c9..0000000000 --- a/MinecraftClient/Resources/ConfigComments/ConfigComments.resx +++ /dev/null @@ -1,1091 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - can be used in some other fields as %yourvar% -%username%, %login%, %serverip%, %serverport%, %datetime% and %players% are reserved read-only variables. - - - =============================== # - Minecraft Console Client Bots # -=============================== # - - - Get alerted when specified words are detected in chat -Useful for moderating your server or detecting when someone is talking to you - - - Play a beep sound when a word is detected in addition to highlighting. - - - List of words/strings to NOT alert you on. - - - The name of a file where alers logs will be written. - - - Log alerts info a file. - - - List of words/strings to alert you on. - - - Trigger alerts when it rains and when it stops. - - - Triggers alerts at the beginning and end of thunderstorms. - - - Triggers an alert after receiving a specified keyword. - - - Send a command on a regular or random basis or make the bot walk around randomly to avoid automatic AFK disconnection -/!\ Make sure your server rules do not forbid anti-AFK mechanisms! -/!\ Make sure you keep the bot in an enclosure to prevent it wandering off if you're using terrain handling! (Recommended size 5x5x5) - - - Command to send to the server. - - - The time interval for execution. (in seconds) - - - Whether to sneak when sending the command. - - - Use terrain handling to enable the bot to move around. - - - The range the bot can move around randomly (Note: the bigger the range, the slower the bot will be) - - - How many times can the bot fail trying to move before using the command method. - - - Automatically attack hostile mobs around you -You need to enable Entity Handling to use this bot -/!\ Make sure server rules allow your planned use of AutoAttack -/!\ SERVER PLUGINS may consider AutoAttack to be a CHEAT MOD and TAKE ACTION AGAINST YOUR ACCOUNT so DOUBLE CHECK WITH SERVER RULES! - - - Allow attacking hostile mobs. - - - Allow attacking passive mobs. - - - Capped between 1 to 4 - - - Delay between attacks. Set "Custom = false" to let MCC calculate it. When Custom = true, set Min/Max for the cooldown range. If RandomMode = true, a random value between Min and Max is used for each attack. - - - All entity types can be found here: https://mccteam.github.io/r/entity/#L15 - - - Possible values: "Interact", "Attack" (default), "InteractAt" (Interact and Attack). - - - Wether to treat the entities list as a "whitelist" or as a "blacklist". - - - "single" or "multi". single target one mob per attack. multi target all mobs in range per attack - - - "health" or "distance". Only needed when using single mode - - - Automatically craft items in your inventory -See https://mccteam.github.io/g/bots/#auto-craft for how to use -You need to enable Inventory Handling to use this bot -You should also enable Terrain and Movements if you need to use a crafting table - - - Location of the crafting table if you intended to use it. Terrain and movements must be enabled. - - - What to do on crafting failure, "abort" or "wait". - - - Recipes.Name: The name can be whatever you like and it is used to represent the recipe. -Recipes.Type: crafting table type: "player" or "table" -Recipes.Result: the resulting item -Recipes.Slots: All slots, counting from left to right, top to bottom. Please fill in "Null" for empty slots. -For the naming of the items, please see: https://mccteam.github.io/r/item/#L12 - - - Auto-digging blocks. -You need to enable Terrain Handling to use this bot -You can use "/digbot start" and "/digbot stop" to control the start and stop of AutoDig. -Since MCC does not yet support accurate calculation of the collision volume of blocks, all blocks are considered as complete cubes when obtaining the position of the lookahead. -For the naming of the block, please see https://mccteam.github.io/r/block/#L15 - - - How many seconds to wait after entering the game to start digging automatically, set to -1 to disable automatic start. - - - Automatically switch to the appropriate tool. - - - Apply Efficiency enchantment speed when AutoDig computes mining time. Disable this for strict anti-cheat compatibility. - - - Apply Haste and Conduit Power speed effects when AutoDig computes mining time. Disable this for strict anti-cheat compatibility. - - - Mining a block for more than "Dig_Timeout" seconds will be considered a timeout. - - - Whether to drop the current tool when its durability is too low. - - - Will not use tools with less durability than this. Set to zero to disable this feature. - - - Wether to treat the blocks list as a "whitelist" or as a "blacklist". - - - The position of the blocks when using "fixedpos" or "both" mode. - - - "distance" or "index", When using the "fixedpos" mode, the blocks are determined by distance to the player, or by the order in the list. - - - Whether to output logs when digging blocks. - - - "lookat", "fixedpos" or "both". Digging the block being looked at, the block in a fixed position, or the block that needs to be all met. - - - Automatically drop items in inventory -You need to enable Inventory Handling to use this bot -See this file for an up-to-date list of item types you can use with this bot: https://mccteam.github.io/r/item/#L12 - - - "include", "exclude" or "everything". Include: drop item IN the list. Exclude: drop item NOT IN the list - - - Automatically eat food when your Hunger value is low -You need to enable Inventory Handling to use this bot - - - Automatically catch fish using a fishing rod -Guide: https://mccteam.github.io/g/bots/#auto-fishing -You can use "/fish" to control the bot manually. -/!\ Make sure server rules allow automated farming before using this bot - - - Keep it as false if you have not changed it before. - - - Switch to a new rod from inventory after the current rod is unavailable. - - - Whether to start fishing automatically after entering a world. - - - How soon to re-cast after successful fishing. - - - Will not use rods with less durability than this (full durability is 64). Set to zero to disable this feature. - - - This allows the player to change position/facing after each fish caught. - - - How long after entering the game to start fishing (seconds). - - - Fishing timeout (seconds). Timeout will trigger a re-cast. - - - A "stationary" hook that moves above this threshold in the Y-axis will be considered to have caught a fish. - - - Enable fish bite detection using fishing bobber velocity packets. - - - Velocity Y threshold (blocks/tick). Values below this are treated as a bite. Keep this value negative. - - - Enable fish bite detection using splash sounds near the fishing bobber. - - - Maximum distance (blocks) between splash sound and bobber to treat it as a bite. - - - Delay (seconds) after bobber spawn before bite detection starts. Helps ignore cast-entry splash/motion. - - - Used to adjust the above two thresholds, which when enabled will print the change in the position of the fishhook entity upon receipt of its movement packet. - - - Use the mainhand or the offhand to hold the rod. - - - It will move in order "1->2->3->4->3->2->1->2->..." and can change position or facing or both each time. It is recommended to change the facing only. - - - Hook movement in the X and Z axis less than this value will be considered stationary. - - - Automatically relog when disconnected by server, for example because the server is restating -/!\ Use Ignore_Kick_Message=true at own risk! Server staff might not appreciate if you auto-relog on manual kicks - - - The delay time before joining the server. (in seconds) - - - Reconnect after any server kick or login rejection. Network interruptions always trigger Auto Relog. - - - Case-insensitive text fragments that trigger Auto Relog for server kicks and login rejections. - - - Exact retry limit. Use 0 to disable retries or -1 for unlimited retries. The count resets after 60 seconds online. - - - Run commands or send messages automatically when a specified pattern is detected in chat -Server admins can spoof chat messages (/nick, /tellraw) so keep this in mind when implementing AutoRespond rules -/!\ This bot may get spammy depending on your rules, although the global messagecooldown setting can help you avoiding accidental spam - - - Do not remove colors from text (Note: Your matches will have to include color codes (ones using the § character) in order to work) - - - Logs chat messages in a file on disk. - - - This bot allows you to send and recieve messages and commands via a Discord channel. -For Setup you can either use the documentation or read here (Documentation has images). -Documentation: https://mccteam.github.io/g/bots/#discord-bridge -Setup: -First you need to create a Bot on the Discord Developers Portal, here is a video tutorial: https://www.youtube.com/watch?v=2FgMnZViNPA . -/!\ IMPORTANT /!\: When creating a bot, you MUST ENABLE "Message Content Intent", "Server Members Intent" and "Presence Intent" in order for bot to work! Also follow along carefully do not miss any steps! -When making a bot, copy the generated token and paste it here in "Token" field (tokens are important, keep them safe). -Copy the "Application ID" and go to: https://discordapi.com/permissions.html . -Paste the id you have copied and check the "Administrator" field in permissions, then click on the link at the bottom. -This will open an invitation menu with your servers, choose the server you want to invite the bot on and invite him. -Once you've invited the bot, go to your Discord client and go to Settings -> Advanced and Enable "Developer Mode". -Exit the settings and right click on a server you have invited the bot to in the server list, then click "Copy ID", and paste the id here in "GuildId". -Then right click on a channel where you want to interact with the bot and again right click -> "Copy ID", pase the copied id here in "ChannelId". -And for the end, send a message in the channel, right click on your nick and again right click -> "Copy ID", then paste the id here in "OwnersIds". -How to use: -To execute an MCC command, prefix it with a dot ".", example: ".move 143 64 735" . -To send a message, simply type it out and hit enter. - - - The ID of a channel where you want to interact with the MCC using the bot. - - - Message formats -Words wrapped with { and } are going to be replaced during the code execution, do not change them! -For example. {message} is going to be replace with an actual message, {username} will be replaced with an username, {timestamp} with the current time. -For Discord message formatting, check the following: https://mccteam.github.io/r/dc-fmt.html - - - The ID of a server/guild where you have invited the bot to. - - - How long to wait (in seconds) if a message can not be sent to discord before canceling the task (minimum 1 second). - - - A list of IDs of people you want to be able to interact with the MCC using the bot. - - - Your Discord Bot token. - - - When enabled, messages from other Discord bots in the channel will be relayed to Minecraft chat. The bridge always ignores its own messages to prevent loops. - - - When enabled, all text received from the Minecraft server (including system messages, join/leave notifications, etc.) will be relayed to Discord, not just player chat and private messages. - - - Interval in seconds to aggregate messages before sending them to Discord. When set to 0, messages are sent immediately one by one. When set to a value like 1.0, messages received within that interval are batched into a single Discord message. Useful for reducing Discord API rate limits. - - - Automatically farms crops for you (plants, breaks and bonemeals them). -Crop types available: Beetroot, Carrot, Melon, Netherwart, Pumpkin, Potato, Wheat. -Usage: "/farmer start" command and "/farmer stop" command. -NOTE: This a newly added bot, it is not perfect and was only tested in 1.19.2, there are some minor issues like not being able to bonemeal carrots/potatoes sometimes. -or bot jumps onto the farm land and breaks it (this happens rarely but still happens). We are looking forward at improving this. -It is recommended to keep the farming area walled off and flat to avoid the bot jumping. -Also, if you have your farmland that is one block high, make it 2 or more blocks high so the bot does not fall through, as it can happen sometimes when the bot reconnects. -The bot also does not pickup all items if they fly off to the side, we have a plan to implement this option in the future as well as drop off and bonemeal refill chest(s). - - - Delay between tasks in seconds (Minimum 1 second) - - - Enabled you to make the bot follow you -NOTE: This is an experimental feature, the bot can be slow at times, you need to walk with a normal speed and to sometimes stop for it to be able to keep up with you -It's similar to making animals follow you when you're holding food in your hand. -This is due to a slow pathfinding algorithm, we're working on getting a better one -You can tweak the update limit and find what works best for you. (NOTE: Do not but a very low one, because you might achieve the opposite, -this might clog the thread for terain handling) and thus slow the bot even more. -/!\ Make sure server rules allow an option like this in the rules of the server before using this bot - - - Do not follow the player if he is in the range of 3 blocks (prevents the bot from pushing a player in an infinite loop) - - - The rate at which the bot does calculations (in seconds) (You can tweak this if you feel the bot is too slow) - - - A small game to demonstrate chat interactions. Players can guess mystery words one letter at a time. -You need to have ChatFormat working correctly and add yourself in botowners to start the game with /tell <bot username> start -/!\ This bot may get a bit spammy if many players are interacting with it - - - Relay messages between players and servers, like a mail plugin -This bot can store messages when the recipients are offline, and send them when they join the server -/!\ Server admins can spoof PMs (/tellraw, /nick) so enable this bot only if you trust server admins - - - Allows you to render maps in the console and into images (which can be then sent to Discord using Discord Bridge Chat Bot) -This is useful for solving captchas which use maps -The maps are rendered into Rendered_Maps folder if the Save_To_File is enabled. -NOTE: -If some servers have a very short time for solving captchas, enabe Auto_Render_On_Update to see them immediatelly in the console. -/!\ Make sure server rules allow bots to be used on the server, or you risk being punished. - - - Automatically render the map once it is received or updated from/by the server - - - Delete all rendered maps on unload/reload or when you launch the MCC again. - - - Get a notification when you have gotten a map from the server for the first time - - - Resize an rendered image, this is useful when images that are rendered are small and when are being sent to Discord. - - - Whether to render the map in the console. - - - The size that a rendered image should be resized to, in pixels (eg. 512). - - - Whether to store the rendered map as a file (You need this setting if you want to get a map on Discord using Discord Bridge). - - - Send a rendered map (saved to a file) to a Discord or a Telegram channel via the Discord or Telegram Bride chat bot (The Discord/Telegram Bridge chat bot must be enabled and configured!) -You need to enable Save_To_File in order for this to work. -We also recommend turning on resizing. - - - Log the list of players periodically into a textual file. - - - (In seconds) - - - Send MCC console commands to your bot through server PMs (/tell) -You need to have ChatFormat working correctly and add yourself in botowners to use the bot -/!\ Server admins can spoof PMs (/tellraw, /nick) so enable RemoteControl only if you trust server admins - - - Enable automatic recording of the game and replay it later using the Replay Mod (https://www.replaymod.com/) -Use /replay save to create a snapshot replay file while still recording. -Please note that due to technical limitations, the client player (you) will not be shown in the replay file -Each MCC instance uses its own temporary replay cache so multiple clients can record from the same folder without colliding. -/!\ You SHOULD use /replay stop or exit the program gracefully with /quit OR THE REPLAY FILE MAY GET CORRUPT! - - - How long should replay file be auto-saved, in seconds. Use -1 to disable. - - - Schedule commands and scripts to launch on various events such as server join, date/time or time interval -See https://mccteam.github.io/g/bots/#script-scheduler for more info - - - This bot allows you to send and receive messages and commands via a Telegram Bot DM or to receive messages in a Telegram channel. -/!\ NOTE: You can't send messages and commands from a group channel, you can only send them in the bot DM, but you can get the messages from the client in a group channel. ------------------------------------------------------------ -Setup: -First you need to create a Telegram bot and obtain an API key, to do so, go to Telegram and find @botfather -Click on "Start" button and read the bot reply, then type "/newbot", the Botfather will guide you through the bot creation. -Once you create the bot, copy the API key that you have gotten, and put it into the "Token" field of "ChatBot.TelegramBridge" section (this section). -/!\ Do not share this token with anyone else as it will give them the control over your bot. Save it securely. -Then launch the client and go to Telegram, find your newly created bot by searching for it with its username, and open a DM with it. -Click on "Start" button and type and send the following command ".chatid" to obtain the chat id. -Copy the chat id number (eg. 2627844670) and paste it in the "ChannelId" field and add it to the "Authorized_Chat_Ids" field (in this section) (an id in "Authorized_Chat_Ids" field is a number/long, not a string!), then save the file. -Now you can use the bot using it's DM. -/!\ If you do not add the id of your chat DM with the bot to the "Authorized_Chat_Ids" field, ayone who finds your bot via search will be able to execute commands and send messages! -/!\ An id pasted in to the "Authorized_Chat_Ids" should be a number/long, not a string! ------------------------------------------------------------ -NOTE: If you want to recieve messages to a group channel instead, make the channel temporarely public, invite the bot to it and make it an administrator, then set the channel to private if you want. -Then set the "ChannelId" field to the @ of your channel (you must include the @ in the settings, eg. "@mysupersecretchannel"), this is the username you can see in the invite link of the channel. -/!\ Only include the username with @ prefix, do not include the rest of the link. Example if you have "https://t.me/mysupersecretchannel", the "ChannelId" will be "@mysupersecretchannel". -/!\ Note that you will not be able to send messages to the client from a group channel! ------------------------------------------------------------ -How to use the bot: -To execute an MCC command, prefix it with a dot ".", example: ".move 143 64 735" . -To send a message, simply type it out and hit enter. - - - A list of Chat IDs that are allowed to send messages and execute commands. To get an id of your chat DM with the bot use ".chatid" bot command in Telegram. - - - An ID of a channel where you want to interact with the MCC using the bot. - - - Message formats -Words wrapped with { and } are going to be replaced during the code execution, do not change them! -For example. {message} is going to be replace with an actual message, {username} will be replaced with an username, {timestamp} with the current time. -For Telegram message formatting, check the following: https://mccteam.github.io/r/tg-fmt.html - - - How long to wait (in seconds) if a message can not be sent to Telegram before canceling the task (minimum 1 second). - - - Your Telegram Bot token. - - - MCC does it best to detect chat messages, but some server have unusual chat formats -When this happens, you'll need to configure chat format below, see https://mccteam.github.io/g/conf/#chat-format-section - - - MCC support for common message formats. Set "false" to avoid conflicts with custom formats. - - - Whether to use the custom regular expressions below for detection. - - - Console-related settings. - - - The settings for command completion suggestions. -Custom colors are only available when using "vt100_24bit" color mode. - - - Whether to display command suggestions in the console. - - - Enable this option if the arrows in the command suggestions are not displayed properly in your terminal. - - - Console mode: "classic" for the standard terminal, "tui" for a pseudo-graphical full-screen interface. - - - Use "disable", "legacy_4bit", "vt100_4bit", "vt100_8bit" or "vt100_24bit". If a garbled code like "←[0m" appears on the terminal, you can try switching to "legacy_4bit" mode, or just disable it. - - - Whether to display the MCC startup icon banner. - - - You can use "Ctrl+P" to print out the current input and cursor position. - - - Whether to display received chat messages in the console. This does not affect chat bots or chat log files. - - - Maximum number of input history records to keep. - - - Maximum log lines kept in TUI mode scrollback. Set to 0 for automatic. - - - Startup Config File -Please do not record extraneous data in this file as it will be overwritten by MCC. - -New to Minecraft Console Client? Check out this document: https://mccteam.github.io/g/conf.html -Want to upgrade to a newer version? See https://github.com/MCCTeam/Minecraft-Console-Client/#download - - - This setting affects only the messages in the console. - - - Regex for filtering chat message. - - - Show server chat messages. - - - Regex for filtering debug message. - - - Please enable this before submitting bug reports. Thanks! - - - Show low-level packet debug logs. - - - Packet types to exclude from packet debug logs, e.g. ["KeepAlive", "Ping"]. - - - Show error messages. - - - "disable" or "blacklist" OR "whitelist". Blacklist hide message match regex. Whitelist show message match regex. - - - Informative messages. (i.e Most of the message from MCC) - - - Log file name. - - - Write log messages to file. - - - Prepend timestamp to messages in log file. - - - Keep color codes in the saved text.(look like "§b") - - - Show warning messages. - - - Make sure you understand what each setting does before changing anything! - - - AccountList: It allows a fast account switching without directly using the credentials -Usage examples: "/tell <mybot> reco Player2", "/connect <serverip> Player1" - - - Toggle auto respawn if client player was dead (make sure your spawn point is safe). - - - Set the owner of the bot. /!\ Server admins can impersonate owners! - - - Use "mcc", "vanilla" or "none". This is how MCC identifies itself to the server. - - - Leave empty for no logfile. - - - If turned off, the emoji will be replaced with a simpler character (for /chunk status). - - - Toggle entity handling. - - - Whether to exit directly when an error occurs, for using MCC in non-interactive scripts. - - - Use "none", "slash"(/) or "backslash"(\). - - - Toggle inventory handling. - - - Fill in with in-game locale code, check https://mccteam.github.io/r/l-code.html - - - Load translations applied to MCC when available, turn it off to use English only. - - - Load translations from server resource packs and cache extracted language entries locally for faster reuse. - - - Load translations from local Forge mod jars when their mod IDs are announced by the server. Disabled by default. - - - Also scan standard Minecraft, Prism Launcher, and CurseForge instance mod folders for translation jars when available. - - - Optional path to a mods folder. When set, MCC loads Forge mod translations from this folder instead of automatic discovery. - - - Use "auto", "no" or "force". Force-enabling only works for MC 1.13+. - - - Use "auto" or "1.X.X" values. Allows to skip server info retrieval. - - - Controls the minimum interval (in seconds) between sending each message to the server. - - - Override the maximum chat message length. Set to 0 to use the default (100 for 1.10 and below, 256 for 1.11+). WARNING: Setting this incorrectly may cause you to be kicked from the server. - - - Enable support for joining Minecraft Realms worlds. - - - The minimum height to use when calculating the image size from the height of the terminal. - - - The minimum width used when calculating the image size from the width of the terminal. - - - A movement speed higher than 2 may be considered cheating. - - - Enable head movement while walking to avoid anti-cheat triggers. - - - Only works on Windows XP-8 or Windows 10 with old console. - - - For remote control of the bot. - - - How to retain profile key. Use "none", "memory" or "disk". - - - Use "no", "fast" (5s timeout), or "yes". Required for joining some servers. - - - Cache compiled scripts for faster load on low-end devices. - - - ServerList: It allows an easier and faster server switching with short aliases instead of full server IP -Aliases cannot contain dots or spaces, and the name "localhost" cannot be used as an alias. -Usage examples: "/tell <mybot> connect Server1", "/connect Server2" - - - How to retain session tokens. Use "none", "memory" or "disk". - - - Decode links embedded in chat messages and show them in console. - - - Show inventory layout as ASCII art in inventory command. - - - Show chat notifications when your active effects are gained or expire. Set to false to disable these messages entirely. - - - Show full effect names and levels in the TUI status bar instead of compact effect icons only. - - - Show a GitHub star reminder on startup. Set to false to hide it. - - - System messages for server ops. - - - Messages displayed above xp bar, set this to false in case of xp bar spam. - - - Temporary fix for Badpacket issue on some servers. Need to enable "TerrainAndMovements" first. - - - Uses more ram, cpu, bandwidth but allows you to move around. - - - Customize the TCP connection timeout with the server. (in seconds) - - - Prepend timestamps to chat messages. - - - Login=Email or Name. Use "-" as password for offline mode. Leave blank to prompt user on startup. - - - The address of the game server, "Host" can be filled in with domain name or IP address. (The "Port" field can be deleted, it will be resolved automatically) - - - Microsoft Account sign-in method: "mcc" (device code, supports 2FA) OR "browser" (manual browser login). - - - Account type: "mojang" OR "microsoft" OR "yggdrasil". Also affects interactive login in console. - - - Settings below are sent to the server and only affect server-side things like your skin. - - - Allows disabling chat colors server-side. - - - Use "enabled", "commands", or "disabled". Allows to mute yourself... - - - MC 1.7- difficulty. "peaceful", "easy", "normal", "difficult". - - - If disabled, settings below are not sent to the server. - - - Use any language implemented in Minecraft. - - - MC 1.9+ main hand. "left" or "right". - - - Value range: [0 - 255]. - - - Connect to a server via a proxy instead of connecting directly -If Mojang session services are blocked on your network, set Enabled_Login=true to login using proxy. -If the connection to the Minecraft game server is blocked by the firewall, set Enabled_Ingame=true to use a proxy to connect to the game server. -/!\ Make sure your server rules allow Proxies or VPNs before setting enabled=true, or you may face consequences! - - - Whether to connect to the game server through a proxy. - - - Whether to connect to the login server through a proxy. - - - Whether to download MCC updates via proxy. - - - Only required for password-protected proxies. - - - Supported types: "HTTP", "SOCKS4", "SOCKS4a", "SOCKS5". - - - Proxy server must allow HTTPS for login, and non-443 ports for playing. - - - Only required for password-protected proxies. - - - Chat signature related settings (affects minecraft 1.19+) - - - Microsoft accounts only. If disabled, will not be able to sign chat and join servers configured with "enforce-secure-profile=true" - - - Use red    color block to mark chat without legitimate signature - - - Use green  color block to mark chat with legitimate signatures - - - Use yellow color block to mark chat that have been modified by the server. - - - Use gray   color block to mark system message (always without signature) - - - Whether to display chat and messages in commands without legal signatures - - - Set to true to display messages modified by the server, false to display the original signed messages - - - Whether to sign the chat send from MCC - - - Whether to sign the messages contained in the commands sent by MCC. For example, the message in "/msg" and "/me" - - - If set to true, the bot will collect all items, regardless of their type. If you want to use the whitelisted item types, disable this by setting it to false - - - In this list you can specify which items the bot will collect. To enable this, set the Collect_All_Item_Types to false. (NOTE: This does not prevent the bot from accidentally picking up other items, it only goes to positions where it finds the whitelisted items)\nYou can see the list of item types here: https://raw.githubusercontent.com/MCCTeam/Minecraft-Console-Client/master/MinecraftClient/Inventory/ItemType.cs - - - Delay in milliseconds between bot scanning items (Recommended: 300-500) - - - The radius in which bot will look for items to collect (Default: 30) - - - If set to true, the bot will return to it's starting position after there are no items to collect - - - If set to true, the bot will go after clustered items instead for the closest ones - - - A Chat Bot that collects items on the ground - - - Show a Discord Rich Presence status with your current Minecraft session info. -Setup: -1. Go to https://discord.com/developers/applications and log in with your Discord account. -2. Click "New Application", give it a name (e.g. "MCC") and confirm. -3. On the application page, copy the "Application ID" and paste it in the "ApplicationId" field below. -4. (Optional) Go to "Rich Presence" -> "Art Assets" to upload custom images for LargeImageKey/SmallImageKey. -Note: This does NOT require a Bot Token, only an Application ID. Discord must be running on the same machine as MCC. - - - Your Discord Application ID. Create one at https://discord.com/developers/applications - - - The top line of the Rich Presence display. Supports placeholders. - - - The second line of the Rich Presence display. Supports placeholders. - - - The key of the large image asset uploaded to your Discord application. - - - Tooltip text for the large image. Supports placeholders. - - - The key of the small image asset uploaded to your Discord application (leave empty to hide). - - - Tooltip text for the small image. Supports placeholders. - - - Show the server address (host and port) in the Discord presence. When disabled, {server_host} and {server_port} are masked. - - - Show the player coordinates in the Discord presence. When disabled, {x}, {y}, {z} are masked. - - - Show health and food level in the Discord presence. When disabled, {health}, {max_health}, {food} are masked. - - - Show the current dimension in the Discord presence. When disabled, {dimension} is masked. - - - Show the current gamemode in the Discord presence. When disabled, {gamemode} is masked. - - - Show elapsed session time in the Discord presence. - - - Show the online player count as a party size in the Discord presence. - - - How often (in seconds) to refresh the Discord presence. Minimum: 1 - - - Remotely control the client using Web Sockets.\n# This is useful if you want to implement an application that can remotely and asynchronously execute procedures in MCC.\n# Example implementation written in JavaScript: https://github.com/milutinke/MCC.js.git\n# The protocol specification will be available in the documentation soon. - - - The IP address that Websocket server will be bound to. - - - The Port that Websocket server will be bounded to. - - - A password that will be used to authenticate on thw Websocket server (It is recommended to change the default password and to set a strong one). - - - This setting is for developers who are developing a library that uses this chat bot to remotely execute procedures/commands/functions. - - - Allow IP aliases, such as "localhost" or if using containers then the container name can be used... - - - Ignore invalid player name - - - authlib-injector authentication server to use for Yggdrasil accounts - - - Authlib-injector URL to use for Yggdrasil accounts. It must use http or https and include any required path. - - - Domain name or IP address - - - Port to connect on - - - Path component of the authlib-injector API location. Refer to the authlib-injector documentation for more info. - - - Set to false if your authlib-injector server uses plain HTTP (e.g. for local testing without TLS). - - - Set to false to opt-out of Sentry error logging. - - - Settings for the TUI minimap overlay that shows terrain and entities. - - - Whether the minimap is visible on startup in TUI mode. - - - Blocks per pixel, 1-16. 1 = closest (1:1), 16 = farthest (16 blocks per pixel). - - - Map width in pixels (characters). Range 10-120, default 40. - - - Map height in pixels (must be even, uses half-block chars). Range 4-80, default 40. - - - Minimap position: "top_left", "top_right", "center", "bottom_left", or "bottom_right". - - - Show player names on the minimap. - - - Show hostile mob names on the minimap. - - - Show neutral mob names on the minimap. - - - Show passive mob names on the minimap. - - - Minimap refresh interval in milliseconds (100-5000). - - - Cave rendering mode: "auto" (detect ceiling), "on" (always cave view), "off" (always surface view). - - - Settings for the /tab command and live TUI tab overlay. - - - Show a separate team column in /tab output. Disabled by default for a more vanilla-like player list. - - - Yggdrasil authlib multi-user selection. - - - Host an embedded MCP server while connected to Minecraft. Disabled by default. - - - Embedded MCP HTTP transport settings. - - - Enable or disable MCP tool categories. - - - Enable the built-in embedded MCP server bot. Server starts only after game join and stops on disconnect. - - - IP/host to bind the embedded MCP HTTP listener to. Default is loopback only. - - - TCP port for the embedded MCP HTTP listener. - - - Route prefix where MCP endpoints are exposed. - - - Require Bearer token authentication for MCP endpoint requests. - - - Environment variable name containing the MCP auth token when auth is required. - - - Allow session and status inspection tools. - - - Allow chat and internal command tools. - - - Allow movement and view-control tools. - - - Allow inventory read and action tools. - - - Allow entity and world inspection tools. - - diff --git a/MinecraftClient/Resources/MinecraftAssets.Designer.cs b/MinecraftClient/Resources/MinecraftAssets.Designer.cs deleted file mode 100644 index 052c11b7be..0000000000 --- a/MinecraftClient/Resources/MinecraftAssets.Designer.cs +++ /dev/null @@ -1,73 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace MinecraftClient { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class MinecraftAssets { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal MinecraftAssets() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MinecraftClient.Resources.MinecraftAssets", typeof(MinecraftAssets).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized resource of type System.Byte[]. - /// - internal static byte[] en_us_json { - get { - object obj = ResourceManager.GetObject("en_us.json", resourceCulture); - return ((byte[])(obj)); - } - } - } -} diff --git a/MinecraftClient/Resources/MinecraftAssets.resx b/MinecraftClient/Resources/MinecraftAssets.resx deleted file mode 100644 index 0e01945f14..0000000000 --- a/MinecraftClient/Resources/MinecraftAssets.resx +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - en_us.json;System.Byte[], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/MinecraftClient/Resources/Translations/Translations.Designer.cs b/MinecraftClient/Resources/Translations/Translations.Designer.cs deleted file mode 100644 index 4568ebd927..0000000000 --- a/MinecraftClient/Resources/Translations/Translations.Designer.cs +++ /dev/null @@ -1,8304 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace MinecraftClient { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Translations { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Translations() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MinecraftClient.Resources.Translations.Translations", typeof(Translations).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - - /// - /// Looks up a localized string similar to Weather change: It is no longer raining.. - /// - internal static string bot_alerts_end_rain { - get { - return ResourceManager.GetString("bot.alerts.end_rain", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Weather change: It is no longer a thunderstorm.. - /// - internal static string bot_alerts_end_thunderstorm { - get { - return ResourceManager.GetString("bot.alerts.end_thunderstorm", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Weather change: It is raining now.. - /// - internal static string bot_alerts_start_rain { - get { - return ResourceManager.GetString("bot.alerts.start_rain", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Weather change: It is a thunderstorm.. - /// - internal static string bot_alerts_start_thunderstorm { - get { - return ResourceManager.GetString("bot.alerts.start_thunderstorm", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid walk range provided, must be a positive integer greater than 0, using default value of 5!. - /// - internal static string bot_antiafk_invalid_walk_range { - get { - return ResourceManager.GetString("bot.antiafk.invalid_walk_range", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Bot movement lock is held by bot {0}, so the Anti AFK bot might not move!. - /// - internal static string bot_antiafk_may_not_move { - get { - return ResourceManager.GetString("bot.antiafk.may.not.move", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The terrain handling is not enabled in the settings of the client, enable it if you want to use it with this bot. Using alternative (command) method.. - /// - internal static string bot_antiafk_not_using_terrain_handling { - get { - return ResourceManager.GetString("bot.antiafk.not_using_terrain_handling", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The time range begins with a bigger value, swapped them around.. - /// - internal static string bot_antiafk_swapping { - get { - return ResourceManager.GetString("bot.antiafk.swapping", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Attack cooldown value cannot be smaller than 0.. - /// - internal static string bot_autoAttack_invalidcooldown { - get { - return ResourceManager.GetString("bot.autoAttack.invalidcooldown", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Crafting aborted! Check your available materials.. - /// - internal static string bot_autoCraft_aborted { - get { - return ResourceManager.GetString("bot.autoCraft.aborted", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Auto-crafting ChatBot command alias. - /// - internal static string bot_autoCraft_alias { - get { - return ResourceManager.GetString("bot.autoCraft.alias", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Available commands: {0}. Use /autocraft help <cmd name> for more information.. - /// - internal static string bot_autoCraft_available_cmd { - get { - return ResourceManager.GetString("bot.autoCraft.available_cmd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Inventory #{0} was closed by AutoCraft. - /// - internal static string bot_autoCraft_close_inventory { - get { - return ResourceManager.GetString("bot.autoCraft.close_inventory", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Auto-crafting ChatBot command. - /// - internal static string bot_autoCraft_cmd { - get { - return ResourceManager.GetString("bot.autoCraft.cmd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Total {0} recipes loaded: {1}. - /// - internal static string bot_autoCraft_cmd_list { - get { - return ResourceManager.GetString("bot.autoCraft.cmd.list", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Crafting failed! Waiting for more materials. - /// - internal static string bot_autoCraft_craft_fail { - get { - return ResourceManager.GetString("bot.autoCraft.craft_fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Duplicate recipe name specified: {0}. - /// - internal static string bot_autoCraft_exception_duplicate { - get { - return ResourceManager.GetString("bot.autoCraft.exception.duplicate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Missing recipe name while parsing a recipe. - /// - internal static string bot_autoCraft_exception_name_miss { - get { - return ResourceManager.GetString("bot.autoCraft.exception.name_miss", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Get the command description. Usage: /autocraft help <command name>. - /// - internal static string bot_autoCraft_help_help { - get { - return ResourceManager.GetString("bot.autoCraft.help.help", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to List available recipes.. - /// - internal static string bot_autoCraft_help_list { - get { - return ResourceManager.GetString("bot.autoCraft.help.list", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Load the config file.. - /// - internal static string bot_autoCraft_help_load { - get { - return ResourceManager.GetString("bot.autoCraft.help.load", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Reload the config file.. - /// - internal static string bot_autoCraft_help_reload { - get { - return ResourceManager.GetString("bot.autoCraft.help.reload", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Write the default example config to default location.. - /// - internal static string bot_autoCraft_help_resetcfg { - get { - return ResourceManager.GetString("bot.autoCraft.help.resetcfg", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Start the crafting. Usage: /autocraft start <recipe name>. - /// - internal static string bot_autoCraft_help_start { - get { - return ResourceManager.GetString("bot.autoCraft.help.start", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Stop the current running crafting process. - /// - internal static string bot_autoCraft_help_stop { - get { - return ResourceManager.GetString("bot.autoCraft.help.stop", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid result item!. - /// - internal static string bot_autocraft_invaild_result { - get { - return ResourceManager.GetString("bot.autocraft.invaild_result", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The number of slots does not match and has been adjusted automatically.. - /// - internal static string bot_autocraft_invaild_slots { - get { - return ResourceManager.GetString("bot.autocraft.invaild_slots", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Missing material: {0}. - /// - internal static string bot_autoCraft_missing_material { - get { - return ResourceManager.GetString("bot.autoCraft.missing_material", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please specify the recipe name you want to craft.. - /// - internal static string bot_autoCraft_no_recipe_name { - get { - return ResourceManager.GetString("bot.autoCraft.no_recipe_name", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Specified recipe name does not exist. Check your config file.. - /// - internal static string bot_autoCraft_recipe_not_exist { - get { - return ResourceManager.GetString("bot.autoCraft.recipe_not_exist", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Starting AutoCraft: {0}. - /// - internal static string bot_autoCraft_start { - get { - return ResourceManager.GetString("bot.autoCraft.start", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AutoCraft cannot be started. Check your available materials for crafting {0}. - /// - internal static string bot_autoCraft_start_fail { - get { - return ResourceManager.GetString("bot.autoCraft.start_fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AutoCraft stopped. - /// - internal static string bot_autoCraft_stop { - get { - return ResourceManager.GetString("bot.autoCraft.stop", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to table not found. - /// - internal static string bot_autoCraft_table_not_found { - get { - return ResourceManager.GetString("bot.autoCraft.table_not_found", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Action timeout! Reason: {0}. - /// - internal static string bot_autoCraft_timeout { - get { - return ResourceManager.GetString("bot.autoCraft.timeout", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Available commands: {0}. Use /autodig help <cmd name> for more information.. - /// - internal static string bot_autodig_available_cmd { - get { - return ResourceManager.GetString("bot.autodig.available_cmd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Auto-digging ChatBot command. - /// - internal static string bot_autodig_cmd { - get { - return ResourceManager.GetString("bot.autodig.cmd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Digging block timeout, retry.. - /// - internal static string bot_autodig_dig_timeout { - get { - return ResourceManager.GetString("bot.autodig.dig_timeout", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Get the command description. Usage: /autodig help <command name>. - /// - internal static string bot_autodig_help_help { - get { - return ResourceManager.GetString("bot.autodig.help.help", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Start the automatic digging bot.. - /// - internal static string bot_autodig_help_start { - get { - return ResourceManager.GetString("bot.autodig.help.start", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Deactivate the automatic digging bot.. - /// - internal static string bot_autodig_help_stop { - get { - return ResourceManager.GetString("bot.autodig.help.stop", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Inventory handling is not enabled. Unable to switch tools automatically.. - /// - internal static string bot_autodig_no_inv_handle { - get { - return ResourceManager.GetString("bot.autodig.no_inv_handle", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Dropped low durability {0} from slot {1}.. - /// - internal static string bot_autodig_drop_low_durability { - get { - return ResourceManager.GetString("bot.autodig.drop_low_durability", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The block currently pointed to is not in the allowed list.. - /// - internal static string bot_autodig_not_allow { - get { - return ResourceManager.GetString("bot.autodig.not_allow", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Automatic digging has started.. - /// - internal static string bot_autodig_start { - get { - return ResourceManager.GetString("bot.autodig.start", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Digging will start in {0:0.0} second(s).. - /// - internal static string bot_autodig_start_delay { - get { - return ResourceManager.GetString("bot.autodig.start_delay", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Auto-digging has been stopped.. - /// - internal static string bot_autodig_stop { - get { - return ResourceManager.GetString("bot.autodig.stop", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Switch to {0} from slot {1}.. - /// - internal static string bot_autodig_switch { - get { - return ResourceManager.GetString("bot.autodig.switch", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Added item {0}. - /// - internal static string bot_autoDrop_added { - get { - return ResourceManager.GetString("bot.autoDrop.added", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AutoDrop ChatBot command alias. - /// - internal static string bot_autoDrop_alias { - get { - return ResourceManager.GetString("bot.autoDrop.alias", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AutoDrop ChatBot command. - /// - internal static string bot_autoDrop_cmd { - get { - return ResourceManager.GetString("bot.autoDrop.cmd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Incorrect item name {0}. Please try again.. - /// - internal static string bot_autoDrop_incorrect_name { - get { - return ResourceManager.GetString("bot.autoDrop.incorrect_name", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Total {0} in the list: - /// {1}. - /// - internal static string bot_autoDrop_list { - get { - return ResourceManager.GetString("bot.autoDrop.list", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cannot find inventory {0}!. - /// - internal static string bot_autoDrop_no_inventory { - get { - return ResourceManager.GetString("bot.autoDrop.no_inventory", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No item in the list. - /// - internal static string bot_autoDrop_no_item { - get { - return ResourceManager.GetString("bot.autoDrop.no_item", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cannot read drop mode from config. Using include mode.. - /// - internal static string bot_autoDrop_no_mode { - get { - return ResourceManager.GetString("bot.autoDrop.no_mode", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Item not in the list. - /// - internal static string bot_autoDrop_not_in_list { - get { - return ResourceManager.GetString("bot.autoDrop.not_in_list", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AutoDrop disabled. - /// - internal static string bot_autoDrop_off { - get { - return ResourceManager.GetString("bot.autoDrop.off", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AutoDrop enabled. - /// - internal static string bot_autoDrop_on { - get { - return ResourceManager.GetString("bot.autoDrop.on", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Removed item {0}. - /// - internal static string bot_autoDrop_removed { - get { - return ResourceManager.GetString("bot.autoDrop.removed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Switched to {0} mode.. - /// - internal static string bot_autoDrop_switched { - get { - return ResourceManager.GetString("bot.autoDrop.switched", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unknwon mode. Available modes: Include, Exclude, Everything. - /// - internal static string bot_autoDrop_unknown_mode { - get { - return ResourceManager.GetString("bot.autoDrop.unknown_mode", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Available commands: {0}. Use /fish help <cmd name> for more information.. - /// - internal static string bot_autoFish_available_cmd { - get { - return ResourceManager.GetString("bot.autoFish.available_cmd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Casting timeout and will soon retry. (Timeout increased to {0:0.0} sec).. - /// - internal static string bot_autoFish_cast_timeout { - get { - return ResourceManager.GetString("bot.autoFish.cast_timeout", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Retract the fishing rod. (Count: {0}). - /// - internal static string bot_autoFish_caught { - get { - return ResourceManager.GetString("bot.autoFish.caught", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Retract the fishing rod at ({0:0.0},{1:0.0},{2:0.0})! (Count: {3}). - /// - internal static string bot_autoFish_caught_at { - get { - return ResourceManager.GetString("bot.autoFish.caught_at", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Auto-Fishing ChatBot command. - /// - internal static string bot_autoFish_cmd { - get { - return ResourceManager.GetString("bot.autoFish.cmd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Fish floating despawn, will re-cast.. - /// - internal static string bot_autoFish_despawn { - get { - return ResourceManager.GetString("bot.autoFish.despawn", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Fishing timeout, will soon re-cast.. - /// - internal static string bot_autoFish_fishing_timeout { - get { - return ResourceManager.GetString("bot.autoFish.fishing_timeout", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Fishing got {0}. - /// - internal static string bot_autoFish_got { - get { - return ResourceManager.GetString("bot.autoFish.got", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Get the command description. Usage: /fish help <command name>. - /// - internal static string bot_autoFish_help_help { - get { - return ResourceManager.GetString("bot.autoFish.help.help", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Start auto-fishing.. - /// - internal static string bot_autoFish_help_start { - get { - return ResourceManager.GetString("bot.autoFish.help.start", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to List all obtained items. Or use "/fish status clear" to clear the list.. - /// - internal static string bot_autoFish_help_status { - get { - return ResourceManager.GetString("bot.autoFish.help.status", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Stop auto-fishing.. - /// - internal static string bot_autoFish_help_stop { - get { - return ResourceManager.GetString("bot.autoFish.help.stop", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Inventory handling is not enabled. Cannot check rod durability and switch rods.. - /// - internal static string bot_autoFish_no_inv_handle { - get { - return ResourceManager.GetString("bot.autoFish.no_inv_handle", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Current fishing rod is not available. Maybe broken or low durability?. - /// - internal static string bot_autoFish_no_rod { - get { - return ResourceManager.GetString("bot.autoFish.no_rod", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Start auto-fishing.. - /// - internal static string bot_autoFish_start { - get { - return ResourceManager.GetString("bot.autoFish.start", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Fishing will start in {0:0.0} second(s).. - /// - internal static string bot_autoFish_start_at { - get { - return ResourceManager.GetString("bot.autoFish.start_at", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The record of the obtained items has been cleared.. - /// - internal static string bot_autoFish_status_clear { - get { - return ResourceManager.GetString("bot.autoFish.status_clear", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to All items obtained from fishing (not entirely accurate):. - /// - internal static string bot_autoFish_status_info { - get { - return ResourceManager.GetString("bot.autoFish.status_info", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Stop auto-fishing.. - /// - internal static string bot_autoFish_stop { - get { - return ResourceManager.GetString("bot.autoFish.stop", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Switch to the rod in slot {0}, durability {1}/64.. - /// - internal static string bot_autoFish_switch { - get { - return ResourceManager.GetString("bot.autoFish.switch", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Casting successfully.. - /// - internal static string bot_autoFish_throw { - get { - return ResourceManager.GetString("bot.autoFish.throw", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Update yaw = {0:0.00}, pitch = {1:0.00}.. - /// - internal static string bot_autoFish_update_lookat { - get { - return ResourceManager.GetString("bot.autoFish.update_lookat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Current directory was: {0}. - /// - internal static string bot_autoRelog_curr_dir { - get { - return ResourceManager.GetString("bot.autoRelog.curr_dir", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Got disconnected with message: {0}. - /// - internal static string bot_autoRelog_disconnect_msg { - get { - return ResourceManager.GetString("bot.autoRelog.disconnect_msg", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Disconnection initiated by User or MCC bot. Ignoring.. - /// - internal static string bot_autoRelog_ignore_user_logout { - get { - return ResourceManager.GetString("bot.autoRelog.ignore_user_logout", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Launching with {0} reconnection attempts. - /// - internal static string bot_autoRelog_launch { - get { - return ResourceManager.GetString("bot.autoRelog.launch", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Initializing without a kick message file. - /// - internal static string bot_autoRelog_no_kick_msg { - get { - return ResourceManager.GetString("bot.autoRelog.no_kick_msg", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Message contains '{0}'. Reconnecting.. - /// - internal static string bot_autoRelog_reconnect { - get { - return ResourceManager.GetString("bot.autoRelog.reconnect", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Ignoring kick message, reconnecting anyway.. - /// - internal static string bot_autoRelog_reconnect_always { - get { - return ResourceManager.GetString("bot.autoRelog.reconnect_always", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Message not containing any defined keywords. Ignoring.. - /// - internal static string bot_autoRelog_reconnect_ignore { - get { - return ResourceManager.GetString("bot.autoRelog.reconnect_ignore", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Waiting {0:0.000} seconds before reconnecting.... - /// - internal static string bot_autoRelog_wait { - get { - return ResourceManager.GetString("bot.autoRelog.wait", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Waiting {0:0.000} seconds before reconnecting... ({1} retries left). - /// - internal static string bot_autoRelog_wait_with_retries { - get { - return ResourceManager.GetString("bot.autoRelog.wait_with_retries", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to unlimited. - /// - internal static string bot_autoRelog_retries_unlimited { - get { - return ResourceManager.GetString("bot.autoRelog.retries_unlimited", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to File not found: '{0}'. - /// - internal static string bot_autoRespond_file_not_found { - get { - return ResourceManager.GetString("bot.autoRespond.file_not_found", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loaded match: - ///{0}. - /// - internal static string bot_autoRespond_loaded_match { - get { - return ResourceManager.GetString("bot.autoRespond.loaded_match", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loading matches from '{0}'. - /// - internal static string bot_autoRespond_loading { - get { - return ResourceManager.GetString("bot.autoRespond.loading", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to match: {0} - ///regex: {1} - ///action: {2} - ///actionPrivate: {3} - ///actionOther: {4} - ///ownersOnly: {5} - ///cooldown: {6}. - /// - internal static string bot_autoRespond_match { - get { - return ResourceManager.GetString("bot.autoRespond.match", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Running action: {0}. - /// - internal static string bot_autoRespond_match_run { - get { - return ResourceManager.GetString("bot.autoRespond.match_run", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No action for match: - ///{0}. - /// - internal static string bot_autoRespond_no_action { - get { - return ResourceManager.GetString("bot.autoRespond.no_action", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This match will never trigger: - ///{0}. - /// - internal static string bot_autoRespond_no_trigger { - get { - return ResourceManager.GetString("bot.autoRespond.no_trigger", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Path '{0}' contains invalid characters.. - /// - internal static string bot_chatLog_invalid_file { - get { - return ResourceManager.GetString("bot.chatLog.invalid_file", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You can not start/run/use the '{0}' bot because it requires movement, the movement is currently utilized by the '{1}' bot, stop it if you want to use this one.. - /// - internal static string bot_common_movement_lock_held { - get { - return ResourceManager.GetString("bot.common.movement.lock.held", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Sending message to Discord was canceled due an error occuring. For more info enable Debug.. - /// - internal static string bot_DiscordBridge_canceled_sending { - get { - return ResourceManager.GetString("bot.DiscordBridge.canceled_sending", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The provided channel with an id '{0}' has not been found!. - /// - internal static string bot_DiscordBridge_channel_not_found { - get { - return ResourceManager.GetString("bot.DiscordBridge.channel_not_found", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The command was executed with the result. - /// - internal static string bot_DiscordBridge_command_executed { - get { - return ResourceManager.GetString("bot.DiscordBridge.command_executed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Succesfully connected with MCC!. - /// - internal static string bot_DiscordBridge_connected { - get { - return ResourceManager.GetString("bot.DiscordBridge.connected", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This command allows you to specify in the which direction the messages will be relayed via the Discord Bridge chat bot.. - /// - internal static string bot_DiscordBridge_desc { - get { - return ResourceManager.GetString("bot.DiscordBridge.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Direction of the Discord Brdige has been switched to '{0}'!. - /// - internal static string bot_DiscordBridge_direction { - get { - return ResourceManager.GetString("bot.DiscordBridge.direction", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Both. - /// - internal static string bot_DiscordBridge_direction_both { - get { - return ResourceManager.GetString("bot.DiscordBridge.direction.both", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Discord. - /// - internal static string bot_DiscordBridge_direction_discord { - get { - return ResourceManager.GetString("bot.DiscordBridge.direction.discord", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Minecraft. - /// - internal static string bot_DiscordBridge_direction_minecraft { - get { - return ResourceManager.GetString("bot.DiscordBridge.direction.minecraft", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Successfully disconnected with MCC!. - /// - internal static string bot_DiscordBridge_disconnected { - get { - return ResourceManager.GetString("bot.DiscordBridge.disconnected", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The provided guild/server with an id '{0}' has not been found!. - /// - internal static string bot_DiscordBridge_guild_not_found { - get { - return ResourceManager.GetString("bot.DiscordBridge.guild_not_found", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid direction provided! Available directions: both|b, minecraft|mc, discord|dsc. Example: "dscbridge direction mc". - /// - internal static string bot_DiscordBridge_invalid_direction { - get { - return ResourceManager.GetString("bot.DiscordBridge.invalid_direction", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please provide a valid token!. - /// - internal static string bot_DiscordBridge_missing_token { - get { - return ResourceManager.GetString("bot.DiscordBridge.missing_token", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An unknown error has occured!. - /// - internal static string bot_DiscordBridge_unknown_error { - get { - return ResourceManager.GetString("bot.DiscordBridge.unknown_error", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please provide a valid Discord Application ID!. - /// - internal static string bot_DiscordRpc_missing_app_id { - get { - return ResourceManager.GetString("bot.DiscordRpc.missing_app_id", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Connected to Discord as {0}. - /// - internal static string bot_DiscordRpc_connected { - get { - return ResourceManager.GetString("bot.DiscordRpc.connected", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to connect to Discord (pipe {0}). Is Discord running?. - /// - internal static string bot_DiscordRpc_connection_failed { - get { - return ResourceManager.GetString("bot.DiscordRpc.connection_failed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Discord Rich Presence initialized successfully.. - /// - internal static string bot_DiscordRpc_initialized { - get { - return ResourceManager.GetString("bot.DiscordRpc.initialized", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to initialize Discord Rich Presence: {0}. - /// - internal static string bot_DiscordRpc_init_error { - get { - return ResourceManager.GetString("bot.DiscordRpc.init_error", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Error updating Discord presence: {0}. - /// - internal static string bot_DiscordRpc_update_error { - get { - return ResourceManager.GetString("bot.DiscordRpc.update_error", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid update interval, must be at least 1 second. Using default of 10 seconds.. - /// - internal static string bot_DiscordRpc_invalid_interval { - get { - return ResourceManager.GetString("bot.DiscordRpc.invalid_interval", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The bot is already farming!. - /// - internal static string bot_farmer_already_running { - get { - return ResourceManager.GetString("bot.farmer.already_running", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The bot has already stopped farming!. - /// - internal static string bot_farmer_already_stopped { - get { - return ResourceManager.GetString("bot.farmer.already_stopped", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Crop type. - /// - internal static string bot_farmer_crop_type { - get { - return ResourceManager.GetString("bot.farmer.crop_type", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} is only available in Minecraft {1} and newer!. - /// - internal static string bot_farmer_crop_unavailable { - get { - return ResourceManager.GetString("bot.farmer.crop_unavailable", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Farming bot. - /// - internal static string bot_farmer_desc { - get { - return ResourceManager.GetString("bot.farmer.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid crop type provided (Types which you can use: Beetroot, Carrot, Melon, Netherwart, Pumpkin, Potato, Wheat)!. - /// - internal static string bot_farmer_invalid_crop_type { - get { - return ResourceManager.GetString("bot.farmer.invalid_crop_type", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid radius provided, you must provide a valid integer number greater than 0!. - /// - internal static string bot_farmer_invalid_radius { - get { - return ResourceManager.GetString("bot.farmer.invalid_radius", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The Farmer bot needs Inventory Handling in order to work, please enable it!. - /// - internal static string bot_farmer_needs_inventory { - get { - return ResourceManager.GetString("bot.farmer.needs_inventory", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The Farmer bot needs Terrain Handling in order to work, please enable it!. - /// - internal static string bot_farmer_needs_terrain { - get { - return ResourceManager.GetString("bot.farmer.needs_terrain", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Not implemented below 1.8!. - /// - internal static string bot_farmer_not_implemented { - get { - return ResourceManager.GetString("bot.farmer.not_implemented", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Radius. - /// - internal static string bot_farmer_radius { - get { - return ResourceManager.GetString("bot.farmer.radius", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Started farming!. - /// - internal static string bot_farmer_started { - get { - return ResourceManager.GetString("bot.farmer.started", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Stopped farming!. - /// - internal static string bot_farmer_stopped { - get { - return ResourceManager.GetString("bot.farmer.stopped", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Stoping farming, this might take a second.... - /// - internal static string bot_farmer_stopping { - get { - return ResourceManager.GetString("bot.farmer.stopping", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You have enabled teleporting, this might get your bot account kicked and in the worst case scenario banned! Use with caution!. - /// - internal static string bot_farmer_warining_allow_teleport { - get { - return ResourceManager.GetString("bot.farmer.warining_allow_teleport", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You have enabled un-safe movement, the bot might get hurt!. - /// - internal static string bot_farmer_warining_force_unsafe { - get { - return ResourceManager.GetString("bot.farmer.warining_force_unsafe", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid parameter "{0}" provided (Use format: "key:value")!. - /// - internal static string bot_farmer_warining_invalid_parameter { - get { - return ResourceManager.GetString("bot.farmer.warining_invalid_parameter", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to mailer command. - /// - internal static string bot_mailer_cmd { - get { - return ResourceManager.GetString("bot.mailer.cmd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to --- Ignore list --- - ///{0}. - /// - internal static string bot_mailer_cmd_getignored { - get { - return ResourceManager.GetString("bot.mailer.cmd.getignored", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to --- Mails in database --- - ///{0}. - /// - internal static string bot_mailer_cmd_getmails { - get { - return ResourceManager.GetString("bot.mailer.cmd.getmails", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to See usage. - /// - internal static string bot_mailer_cmd_help { - get { - return ResourceManager.GetString("bot.mailer.cmd.help", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Added {0} to the ignore list!. - /// - internal static string bot_mailer_cmd_ignore_added { - get { - return ResourceManager.GetString("bot.mailer.cmd.ignore.added", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Missing or invalid name. Usage: {0} <username>. - /// - internal static string bot_mailer_cmd_ignore_invalid { - get { - return ResourceManager.GetString("bot.mailer.cmd.ignore.invalid", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Removed {0} from the ignore list!. - /// - internal static string bot_mailer_cmd_ignore_removed { - get { - return ResourceManager.GetString("bot.mailer.cmd.ignore.removed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Creating new database file: {0}. - /// - internal static string bot_mailer_create_db { - get { - return ResourceManager.GetString("bot.mailer.create.db", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Creating new ignore list: {0}. - /// - internal static string bot_mailer_create_ignore { - get { - return ResourceManager.GetString("bot.mailer.create.ignore", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Delivered: {0}. - /// - internal static string bot_mailer_delivered { - get { - return ResourceManager.GetString("bot.mailer.delivered", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Initializing Mailer with settings:. - /// - internal static string bot_mailer_init { - get { - return ResourceManager.GetString("bot.mailer.init", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to  - Database File: {0}. - /// - internal static string bot_mailer_init_db { - get { - return ResourceManager.GetString("bot.mailer.init.db", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to  - Max Database Size: {0}. - /// - internal static string bot_mailer_init_db_size { - get { - return ResourceManager.GetString("bot.mailer.init.db_size", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cannot enable Mailer: Max Database Size must be greater than zero. Please review the settings.. - /// - internal static string bot_mailer_init_fail_db_size { - get { - return ResourceManager.GetString("bot.mailer.init_fail.db_size", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cannot enable Mailer: Mail Retention must be greater than zero. Please review the settings.. - /// - internal static string bot_mailer_init_fail_mail_retention { - get { - return ResourceManager.GetString("bot.mailer.init_fail.mail_retention", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cannot enable Mailer: Max Mails per Player must be greater than zero. Please review the settings.. - /// - internal static string bot_mailer_init_fail_max_mails { - get { - return ResourceManager.GetString("bot.mailer.init_fail.max_mails", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to  - Ignore List: {0}. - /// - internal static string bot_mailer_init_ignore { - get { - return ResourceManager.GetString("bot.mailer.init.ignore", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to  - Mail Retention: {0}. - /// - internal static string bot_mailer_init_mail_retention { - get { - return ResourceManager.GetString("bot.mailer.init.mail_retention", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to  - Max Mails per Player: {0}. - /// - internal static string bot_mailer_init_max_mails { - get { - return ResourceManager.GetString("bot.mailer.init.max_mails", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to  - Public Interactions: {0}. - /// - internal static string bot_mailer_init_public { - get { - return ResourceManager.GetString("bot.mailer.init.public", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loading database file: {0}. - /// - internal static string bot_mailer_load_db { - get { - return ResourceManager.GetString("bot.mailer.load.db", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loading ignore list: . - /// - internal static string bot_mailer_load_ignore { - get { - return ResourceManager.GetString("bot.mailer.load.ignore", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Looking for mails to send @ {0}. - /// - internal static string bot_mailer_process_mails { - get { - return ResourceManager.GetString("bot.mailer.process_mails", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Saving message: {0}. - /// - internal static string bot_mailer_saving { - get { - return ResourceManager.GetString("bot.mailer.saving", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} is ignored!. - /// - internal static string bot_mailer_user_ignored { - get { - return ResourceManager.GetString("bot.mailer.user_ignored", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Render maps (item maps). - /// - internal static string bot_map_cmd_desc { - get { - return ResourceManager.GetString("bot.map.cmd.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid ID provided, must be a number!. - /// - internal static string bot_map_cmd_invalid_id { - get { - return ResourceManager.GetString("bot.map.cmd.invalid_id", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to A map with id '{0}' does not exists!. - /// - internal static string bot_map_cmd_not_found { - get { - return ResourceManager.GetString("bot.map.cmd.not_found", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to render the map with id: '{0}'. - /// - internal static string bot_map_failed_to_render { - get { - return ResourceManager.GetString("bot.map.failed_to_render", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to - Map id: {0} (Last Updated: {1}). - /// - internal static string bot_map_list_item { - get { - return ResourceManager.GetString("bot.map.list_item", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No maps received!. - /// - internal static string bot_map_no_maps { - get { - return ResourceManager.GetString("bot.map.no_maps", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The list of received maps from the server:. - /// - internal static string bot_map_received { - get { - return ResourceManager.GetString("bot.map.received", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Received a new Map, with Id: {0}. - /// - internal static string bot_map_received_map { - get { - return ResourceManager.GetString("bot.map.received_map", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Succesfully rendered a map with id '{0}' to: '{1}'. - /// - internal static string bot_map_rendered { - get { - return ResourceManager.GetString("bot.map.rendered", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Resized the rendered image of the map with id: '{0}' to {1}x{1}.. - /// - internal static string bot_map_resized_rendered_image { - get { - return ResourceManager.GetString("bot.map.resized_rendered_image", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The size of the map is reduced from ({0}x{1}) to ({2}x{3}) due to the size limitation of the current terminal.. - /// - internal static string bot_map_scale { - get { - return ResourceManager.GetString("bot.map.scale", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Sent a rendered image of a map with an id '{0}' to the Discord via Discord Brdige chat bot!. - /// - internal static string bot_map_sent_to_discord { - get { - return ResourceManager.GetString("bot.map.sent_to_discord", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Sent a rendered image of a map with an id '{0}' to the Telegram via Telegram Bridge chat bot!. - /// - internal static string bot_map_sent_to_telegram { - get { - return ResourceManager.GetString("bot.map.sent_to_telegram", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Map #{0} ({1}x{2}) [{3}%]. - /// - internal static string bot_map_tui_header { - get { - return ResourceManager.GetString("bot.map.tui_header", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Scroll=Zoom Drag=Pan +/-=Zoom Arrows=Pan Esc/E=Close. - /// - internal static string bot_map_tui_controls { - get { - return ResourceManager.GetString("bot.map.tui_controls", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to replay command. - /// - internal static string bot_replayCapture_cmd { - get { - return ResourceManager.GetString("bot.replayCapture.cmd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Replay file created.. - /// - internal static string bot_replayCapture_created { - get { - return ResourceManager.GetString("bot.replayCapture.created", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Record was stopped. Restart the program to start another record.. - /// - internal static string bot_replayCapture_restart { - get { - return ResourceManager.GetString("bot.replayCapture.restart", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Record stopped.. - /// - internal static string bot_replayCapture_stopped { - get { - return ResourceManager.GetString("bot.replayCapture.stopped", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Script '{0}' failed to run ({1}).. - /// - internal static string bot_script_fail { - get { - return ResourceManager.GetString("bot.script.fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to File not found: '{0}'. - /// - internal static string bot_script_file_not_found { - get { - return ResourceManager.GetString("bot.script.file_not_found", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to [MCC] [{0}] Cannot find script file: {1}. - /// - internal static string bot_script_not_found { - get { - return ResourceManager.GetString("bot.script.not_found", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Script '{0}' loaded.. - /// - internal static string bot_script_pm_loaded { - get { - return ResourceManager.GetString("bot.script.pm.loaded", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Error in {0} at line {1}, column {2}: [{3}] {4}. - /// - internal static string script_compile_error { - get { - return ResourceManager.GetString("script.compile.error", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Error in {0}: [{1}] {2}. - /// - internal static string script_compile_error_no_location { - get { - return ResourceManager.GetString("script.compile.error_no_location", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to [Script] Compilation failed with error(s):. - /// - internal static string script_compile_failed { - get { - return ResourceManager.GetString("script.compile.failed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to [Script] Starting compilation for {0}.... - /// - internal static string script_compile_started { - get { - return ResourceManager.GetString("script.compile.started", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to [Script] Compilation done with no errors.. - /// - internal static string script_compile_succeeded { - get { - return ResourceManager.GetString("script.compile.succeeded", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loaded task: - ///{0}. - /// - internal static string bot_scriptScheduler_loaded_task { - get { - return ResourceManager.GetString("bot.scriptScheduler.loaded_task", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No action for task: - ///{0}. - /// - internal static string bot_scriptScheduler_no_action { - get { - return ResourceManager.GetString("bot.scriptScheduler.no_action", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This task will never trigger: - ///{0}. - /// - internal static string bot_scriptScheduler_no_trigger { - get { - return ResourceManager.GetString("bot.scriptScheduler.no_trigger", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Interval / Running action: {0}. - /// - internal static string bot_scriptScheduler_running_inverval { - get { - return ResourceManager.GetString("bot.scriptScheduler.running_inverval", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Login / Running action: {0}. - /// - internal static string bot_scriptScheduler_running_login { - get { - return ResourceManager.GetString("bot.scriptScheduler.running_login", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Time / Running action: {0}. - /// - internal static string bot_scriptScheduler_running_time { - get { - return ResourceManager.GetString("bot.scriptScheduler.running_time", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to triggeronfirstlogin: {0} - /// triggeronlogin: {1} - /// triggerontime: {2} - /// triggeroninterval: {3} - /// timevalue: {4} - /// timeinterval: {5} - /// action: {6}. - /// - internal static string bot_scriptScheduler_task { - get { - return ResourceManager.GetString("bot.scriptScheduler.task", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Sending message to Telegram was canceled due an error occuring. For more info enable Debug.. - /// - internal static string bot_TelegramBridge_canceled_sending { - get { - return ResourceManager.GetString("bot.TelegramBridge.canceled_sending", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The command was executed with the result. - /// - internal static string bot_TelegramBridge_command_executed { - get { - return ResourceManager.GetString("bot.TelegramBridge.command_executed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Succesfully connected with the MCC!. - /// - internal static string bot_TelegramBridge_connected { - get { - return ResourceManager.GetString("bot.TelegramBridge.connected", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This command allows you to specify in the which direction the messages will be relayed via the Telegram Bridge chat bot.. - /// - internal static string bot_TelegramBridge_desc { - get { - return ResourceManager.GetString("bot.TelegramBridge.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Direction of the Telegram Brdige has been switched to '{0}'!. - /// - internal static string bot_TelegramBridge_direction { - get { - return ResourceManager.GetString("bot.TelegramBridge.direction", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Both. - /// - internal static string bot_TelegramBridge_direction_both { - get { - return ResourceManager.GetString("bot.TelegramBridge.direction.both", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Minecraft. - /// - internal static string bot_TelegramBridge_direction_minecraft { - get { - return ResourceManager.GetString("bot.TelegramBridge.direction.minecraft", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Telegram. - /// - internal static string bot_TelegramBridge_direction_Telegram { - get { - return ResourceManager.GetString("bot.TelegramBridge.direction.Telegram", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Disconnected from from the MCC!. - /// - internal static string bot_TelegramBridge_disconnected { - get { - return ResourceManager.GetString("bot.TelegramBridge.disconnected", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid direction provided! Available directions: both|b, minecraft|mc, telegram|tg|t. Example: "tgbridge direction mc". - /// - internal static string bot_TelegramBridge_invalid_direction { - get { - return ResourceManager.GetString("bot.TelegramBridge.invalid_direction", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to [WARNING] You have not provided any Channel IDs, for "Authorized_Chat_Ids" field, anyone who finds your bot will be able to send messages and commands to it!. - /// - internal static string bot_TelegramBridge_missing_authorized_channels { - get { - return ResourceManager.GetString("bot.TelegramBridge.missing_authorized_channels", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to [WARNING] You have not provided a Channel ID, you will ONLY get replies to commands sent from Telegram!. - /// - internal static string bot_TelegramBridge_missing_channel_id { - get { - return ResourceManager.GetString("bot.TelegramBridge.missing_channel_id", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please provide a valid bot token!. - /// - internal static string bot_TelegramBridge_missing_token { - get { - return ResourceManager.GetString("bot.TelegramBridge.missing_token", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This command has been disabled due to Telegram caching causing issues, please stop your client manually.. - /// - internal static string bot_TelegramBridge_quit_disabled { - get { - return ResourceManager.GetString("bot.TelegramBridge.quit_disabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to **🛑 Unauthorized access! 🛑 - /// - ///Add the ID of this chat to "Authorized_Chat_Ids" field in the configuration file to gain access!**. - /// - internal static string bot_TelegramBridge_unauthorized { - get { - return ResourceManager.GetString("bot.TelegramBridge.unauthorized", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An unknown error has occured!. - /// - internal static string bot_TelegramBridge_unknown_error { - get { - return ResourceManager.GetString("bot.TelegramBridge.unknown_error", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Bot: {0} said : {1}. - /// - internal static string bot_testBot_said { - get { - return ResourceManager.GetString("bot.testBot.said", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Bot: {0} told me : {1}. - /// - internal static string bot_testBot_told { - get { - return ResourceManager.GetString("bot.testBot.told", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to §cFailed to start a server:\n\n{0}\n\n. - /// - internal static string bot_WebSocketBot_failed_to_start_custom { - get { - return ResourceManager.GetString("bot.WebSocketBot.failed_to_start.custom", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to §cFailed to start a server! The provided IP address is not a valid one!. - /// - internal static string bot_WebSocketBot_failed_to_start_ip { - get { - return ResourceManager.GetString("bot.WebSocketBot.failed_to_start.ip", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to §cFailed to start a server! The provided port number {0} is out of the range, it must be 65535 or bellow it!. - /// - internal static string bot_WebSocketBot_failed_to_start_port { - get { - return ResourceManager.GetString("bot.WebSocketBot.failed_to_start.port", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to §bNew session connected: §a{0}. - /// - internal static string bot_WebSocketBot_new_session { - get { - return ResourceManager.GetString("bot.WebSocketBot.new_session", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to §bSession with an id §a{0}§b has been successfully authenticated!. - /// - internal static string bot_WebSocketBot_session_authenticated { - get { - return ResourceManager.GetString("bot.WebSocketBot.session_authenticated", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to §bSession with an id §a{0}§b has disconnected!. - /// - internal static string bot_WebSocketBot_session_disconnected { - get { - return ResourceManager.GetString("bot.WebSocketBot.session_disconnected", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to §bSession with an id §a{0}§b has been renamed to: §a{1}§b!. - /// - internal static string bot_WebSocketBot_session_id_changed { - get { - return ResourceManager.GetString("bot.WebSocketBot.session_id_changed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to §cSession with an id §a{0}§b failed to change the ID to: §c{1}§b!. - /// - internal static string bot_WebSocketBot_session_id_failed_to_change { - get { - return ResourceManager.GetString("bot.WebSocketBot.session_id_failed_to_change", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to §bServer started on ip §a{0}§b port: §a{1}. - /// - internal static string bot_WebSocketBot_started { - get { - return ResourceManager.GetString("bot.WebSocketBot.started", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Starting the Websocket server.... - /// - internal static string bot_WebSocketBot_starting { - get { - return ResourceManager.GetString("bot.WebSocketBot.starting", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Alerts. - /// - internal static string botname_Alerts { - get { - return ResourceManager.GetString("botname.Alerts", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AntiAFK. - /// - internal static string botname_AntiAFK { - get { - return ResourceManager.GetString("botname.AntiAFK", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AutoAttack. - /// - internal static string botname_AutoAttack { - get { - return ResourceManager.GetString("botname.AutoAttack", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AutoCraft. - /// - internal static string botname_AutoCraft { - get { - return ResourceManager.GetString("botname.AutoCraft", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AutoDig. - /// - internal static string botname_AutoDig { - get { - return ResourceManager.GetString("botname.AutoDig", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AutoDrop. - /// - internal static string botname_AutoDrop { - get { - return ResourceManager.GetString("botname.AutoDrop", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AutoEat. - /// - internal static string botname_AutoEat { - get { - return ResourceManager.GetString("botname.AutoEat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AutoFishing. - /// - internal static string botname_AutoFishing { - get { - return ResourceManager.GetString("botname.AutoFishing", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AutoRelog. - /// - internal static string botname_AutoRelog { - get { - return ResourceManager.GetString("botname.AutoRelog", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to AutoRespond. - /// - internal static string botname_AutoRespond { - get { - return ResourceManager.GetString("botname.AutoRespond", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ChatLog. - /// - internal static string botname_ChatLog { - get { - return ResourceManager.GetString("botname.ChatLog", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to DiscordBridge. - /// - internal static string botname_DiscordBridge { - get { - return ResourceManager.GetString("botname.DiscordBridge", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to DiscordRpc. - /// - internal static string botname_DiscordRpc { - get { - return ResourceManager.GetString("botname.DiscordRpc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Farmer. - /// - internal static string botname_Farmer { - get { - return ResourceManager.GetString("botname.Farmer", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to FollowPlayer. - /// - internal static string botname_FollowPlayer { - get { - return ResourceManager.GetString("botname.FollowPlayer", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to HangmanGame. - /// - internal static string botname_HangmanGame { - get { - return ResourceManager.GetString("botname.HangmanGame", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Mailer. - /// - internal static string botname_Mailer { - get { - return ResourceManager.GetString("botname.Mailer", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Map. - /// - internal static string botname_Map { - get { - return ResourceManager.GetString("botname.Map", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to PlayerListLogger. - /// - internal static string botname_PlayerListLogger { - get { - return ResourceManager.GetString("botname.PlayerListLogger", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to RemoteControl. - /// - internal static string botname_RemoteControl { - get { - return ResourceManager.GetString("botname.RemoteControl", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ReplayCapture. - /// - internal static string botname_ReplayCapture { - get { - return ResourceManager.GetString("botname.ReplayCapture", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Script. - /// - internal static string botname_Script { - get { - return ResourceManager.GetString("botname.Script", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ScriptScheduler. - /// - internal static string botname_ScriptScheduler { - get { - return ResourceManager.GetString("botname.ScriptScheduler", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to TelegramBridge. - /// - internal static string botname_TelegramBridge { - get { - return ResourceManager.GetString("botname.TelegramBridge", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to TestBot. - /// - internal static string botname_TestBot { - get { - return ResourceManager.GetString("botname.TestBot", resourceCulture); - } - } - - internal static string mcc_banner_classic { - get { - return ResourceManager.GetString("mcc.banner.classic", resourceCulture); - } - } - - internal static string mcc_banner_star_reminder { - get { - return ResourceManager.GetString("mcc.banner.star_reminder", resourceCulture); - } - } - - internal static string mcc_banner_label_mc_versions { - get { - return ResourceManager.GetString("mcc.banner.label_mc_versions", resourceCulture); - } - } - - internal static string mcc_server_info_label_server { - get { - return ResourceManager.GetString("mcc.server_info.label_server", resourceCulture); - } - } - - internal static string mcc_server_info_label_version { - get { - return ResourceManager.GetString("mcc.server_info.label_version", resourceCulture); - } - } - - internal static string mcc_server_info_label_protocol { - get { - return ResourceManager.GetString("mcc.server_info.label_protocol", resourceCulture); - } - } - - internal static string mcc_server_info_label_players { - get { - return ResourceManager.GetString("mcc.server_info.label_players", resourceCulture); - } - } - - internal static string mcc_server_info_label_ping { - get { - return ResourceManager.GetString("mcc.server_info.label_ping", resourceCulture); - } - } - - internal static string mcc_server_info_label_ping_ms { - get { - return ResourceManager.GetString("mcc.server_info.label_ping_ms", resourceCulture); - } - } - - internal static string mcc_server_info_label_connecting_as { - get { - return ResourceManager.GetString("mcc.server_info.label_connecting_as", resourceCulture); - } - } - - internal static string mcc_server_info_label_online { - get { - return ResourceManager.GetString("mcc.server_info.label_online", resourceCulture); - } - } - - internal static string mcc_server_info_sample_more { - get { - return ResourceManager.GetString("mcc.server_info.sample_more", resourceCulture); - } - } - - internal static string mcc_server_info_version_upgrade { - get { - return ResourceManager.GetString("mcc.server_info.version_upgrade", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Converting session cache from disk: {0}. - /// - internal static string cache_converting { - get { - return ResourceManager.GetString("cache.converting", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Ignoring invalid session token line: {0}. - /// - internal static string cache_ignore_line { - get { - return ResourceManager.GetString("cache.ignore_line", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Ignoring invalid profile key token line: {0}. - /// - internal static string cache_ignore_line_keys { - get { - return ResourceManager.GetString("cache.ignore_line_keys", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Ignoring session token string '{0}': {1}. - /// - internal static string cache_ignore_string { - get { - return ResourceManager.GetString("cache.ignore_string", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Ignoring profile key token string '{0}': {1}. - /// - internal static string cache_ignore_string_keys { - get { - return ResourceManager.GetString("cache.ignore_string_keys", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loaded session: {0}:{1}. - /// - internal static string cache_loaded { - get { - return ResourceManager.GetString("cache.loaded", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loaded profile key, it will be refresh at {0}. - /// - internal static string cache_loaded_keys { - get { - return ResourceManager.GetString("cache.loaded_keys", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loading Minecraft profiles: {0}. - /// - internal static string cache_loading { - get { - return ResourceManager.GetString("cache.loading", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loading profile key cache from disk: {0}. - /// - internal static string cache_loading_keys { - get { - return ResourceManager.GetString("cache.loading_keys", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loading session cache from disk: {0}. - /// - internal static string cache_loading_session { - get { - return ResourceManager.GetString("cache.loading_session", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Got malformed data while reading serialized session cache from disk: {0}. - /// - internal static string cache_malformed { - get { - return ResourceManager.GetString("cache.malformed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to read serialized session cache from disk: {0}. - /// - internal static string cache_read_fail { - get { - return ResourceManager.GetString("cache.read_fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to read session cache from disk: {0}. - /// - internal static string cache_read_fail_plain { - get { - return ResourceManager.GetString("cache.read_fail_plain", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to read profile key cache from disk: {0}. - /// - internal static string cache_read_fail_plain_keys { - get { - return ResourceManager.GetString("cache.read_fail_plain_keys", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to write session cache to disk: {0}. - /// - internal static string cache_save_fail { - get { - return ResourceManager.GetString("cache.save_fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to write profile key cache to disk: {0}. - /// - internal static string cache_save_fail_keys { - get { - return ResourceManager.GetString("cache.save_fail_keys", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Saving session cache to disk. - /// - internal static string cache_saving { - get { - return ResourceManager.GetString("cache.saving", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Saving profile key cache to disk. - /// - internal static string cache_saving_keys { - get { - return ResourceManager.GetString("cache.saving_keys", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Done. File saved as '{0}'. - /// - internal static string chat_done { - get { - return ResourceManager.GetString("chat.done", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Downloading '{0}.json' from Mojang servers.... - /// - internal static string chat_download { - get { - return ResourceManager.GetString("chat.download", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to download the file.. - /// - internal static string chat_fail { - get { - return ResourceManager.GetString("chat.fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Translations file loaded.. - /// - internal static string chat_loaded { - get { - return ResourceManager.GetString("chat.loaded", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Player {0}'s message chain is broken!. - /// - internal static string chat_message_chain_broken { - get { - return ResourceManager.GetString("chat.message_chain_broken", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Translations file not found: '{0}' - ///Some messages won't be properly printed without this file.. - /// - internal static string chat_not_found { - get { - return ResourceManager.GetString("chat.not_found", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Performing request to {0}. - /// - internal static string chat_request { - get { - return ResourceManager.GetString("chat.request", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to save the file {0}.. - /// - internal static string chat_save_fail { - get { - return ResourceManager.GetString("chat.save_fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Switch to use Minecraft's default language resource "en_us.json".. - /// - internal static string chat_use_default { - get { - return ResourceManager.GetString("chat.use_default", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to [{0}] Disconnecting and Reconnecting to the Server. - /// - internal static string chatbot_reconnect { - get { - return ResourceManager.GetString("chatbot.reconnect", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to . - /// - internal static string ChatBot_WebSocketBot_AllowIpAlias { - get { - return ResourceManager.GetString("ChatBot.WebSocketBot.AllowIpAlias", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to . - /// - internal static string ChatBot_WebSocketBot_DebugMode { - get { - return ResourceManager.GetString("ChatBot.WebSocketBot.DebugMode", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Swing your arm.. - /// - internal static string cmd_animation_desc { - get { - return ResourceManager.GetString("cmd.animation.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Could not find a bed!. - /// - internal static string cmd_bed_bed_not_found { - get { - return ResourceManager.GetString("cmd.bed.bed_not_found", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Can not reach the bed safely!. - /// - internal static string cmd_bed_cant_reach_safely { - get { - return ResourceManager.GetString("cmd.bed.cant_reach_safely", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Used to sleep in or leave a bed.. - /// - internal static string cmd_bed_desc { - get { - return ResourceManager.GetString("cmd.bed.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to reach the bed position (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) in time (30 seconds). Giving up!. - /// - internal static string cmd_bed_failed_to_reach_in_time { - get { - return ResourceManager.GetString("cmd.bed.failed_to_reach_in_time", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Found a bed at (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}).. - /// - internal static string cmd_bed_found_a_bed_at { - get { - return ResourceManager.GetString("cmd.bed.found_a_bed_at", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Succesfully laid in bed!. - /// - internal static string cmd_bed_in { - get { - return ResourceManager.GetString("cmd.bed.in", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Sending a command to leave a bed to the server.. - /// - internal static string cmd_bed_leaving { - get { - return ResourceManager.GetString("cmd.bed.leaving", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Moving to (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) where the bed is located.. - /// - internal static string cmd_bed_moving { - get { - return ResourceManager.GetString("cmd.bed.moving", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The block on (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) is not a bed!. - /// - internal static string cmd_bed_not_a_bed { - get { - return ResourceManager.GetString("cmd.bed.not_a_bed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Could not lay in bed. Are you trying to sleep in a bed? (PS: You must use the head block coordinates of the bed). - /// - internal static string cmd_bed_not_in { - get { - return ResourceManager.GetString("cmd.bed.not_in", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Searching for a bed in radius of {0:0.00}.... - /// - internal static string cmd_bed_searching { - get { - return ResourceManager.GetString("cmd.bed.searching", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Trying to sleep in a bed on location (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}). Result: {3}. - /// - internal static string cmd_bed_trying_to_use { - get { - return ResourceManager.GetString("cmd.bed.trying_to_use", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Blocks around. - /// - internal static string cmd_blockinfo_BlocksAround { - get { - return ResourceManager.GetString("cmd.blockinfo.BlocksAround", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Block type. - /// - internal static string cmd_blockinfo_BlockType { - get { - return ResourceManager.GetString("cmd.blockinfo.BlockType", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Reports the type of the block on the provided coordinates. (Use -s to report blocks around the target block).. - /// - internal static string cmd_blockinfo_desc { - get { - return ResourceManager.GetString("cmd.blockinfo.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Negative. - /// - internal static string cmd_blockinfo_Negative { - get { - return ResourceManager.GetString("cmd.blockinfo.Negative", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Positive. - /// - internal static string cmd_blockinfo_Positive { - get { - return ResourceManager.GetString("cmd.blockinfo.Positive", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to List bots, unload a bot or all bots.. - /// - internal static string cmd_bots_desc { - get { - return ResourceManager.GetString("cmd.bots.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Loaded bots. - /// - internal static string cmd_bots_list { - get { - return ResourceManager.GetString("cmd.bots.list", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No bots loaded!. - /// - internal static string cmd_bots_noloaded { - get { - return ResourceManager.GetString("cmd.bots.noloaded", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Bot {0} is not loaded, check if you have made a typo!. - /// - internal static string cmd_bots_notfound { - get { - return ResourceManager.GetString("cmd.bots.notfound", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Successfully unloaded bot: {0}. - /// - internal static string cmd_bots_unloaded { - get { - return ResourceManager.GetString("cmd.bots.unloaded", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Successfully unloaded all bots!. - /// - internal static string cmd_bots_unloaded_all { - get { - return ResourceManager.GetString("cmd.bots.unloaded_all", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Changed to slot {0}. - /// - internal static string cmd_changeSlot_changed { - get { - return ResourceManager.GetString("cmd.changeSlot.changed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Change slot in hotbar. - /// - internal static string cmd_changeSlot_desc { - get { - return ResourceManager.GetString("cmd.changeSlot.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Could not change slot. - /// - internal static string cmd_changeSlot_fail { - get { - return ResourceManager.GetString("cmd.changeSlot.fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Could not change slot: Not a Number. - /// - internal static string cmd_changeSlot_nan { - get { - return ResourceManager.GetString("cmd.changeSlot.nan", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to chunk: ({0}, {1}).. - /// - internal static string cmd_chunk_chunk_pos { - get { - return ResourceManager.GetString("cmd.chunk.chunk_pos", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Current location:{0}, chunk: ({1}, {2}).. - /// - internal static string cmd_chunk_current { - get { - return ResourceManager.GetString("cmd.chunk.current", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Displays the chunk loading status. - ///Change EnableEmoji=false in the settings if the display is confusing.. - /// - internal static string cmd_chunk_desc { - get { - return ResourceManager.GetString("cmd.chunk.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This command is used for debugging, make sure you know what you are doing.. - /// - internal static string cmd_chunk_for_debug { - get { - return ResourceManager.GetString("cmd.chunk.for_debug", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Player:{0}, MarkedChunk:{1}, NotReceived:{2}, Loading:{3}, Loaded:{4}. - /// - internal static string cmd_chunk_icon { - get { - return ResourceManager.GetString("cmd.chunk.icon", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Marked location: . - /// - internal static string cmd_chunk_marked { - get { - return ResourceManager.GetString("cmd.chunk.marked", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Since the marked chunk is outside the graph, it will not be displayed!. - /// - internal static string cmd_chunk_outside { - get { - return ResourceManager.GetString("cmd.chunk.outside", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to connect to the specified server.. - /// - internal static string cmd_connect_desc { - get { - return ResourceManager.GetString("cmd.connect.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid server IP '{0}'.. - /// - internal static string cmd_connect_invalid_ip { - get { - return ResourceManager.GetString("cmd.connect.invalid_ip", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unknown account '{0}'.. - /// - internal static string cmd_connect_unknown { - get { - return ResourceManager.GetString("cmd.connect.unknown", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to clear the console output.. - /// - internal static string cmd_clear_console_desc { - get { - return ResourceManager.GetString("cmd.clear_console.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to toggle chat visibility in the console.. - /// - internal static string cmd_console_chat_desc { - get { - return ResourceManager.GetString("cmd.console_chat.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Console chat output is now hidden.. - /// - internal static string cmd_console_chat_state_off { - get { - return ResourceManager.GetString("cmd.console_chat.state_off", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Console chat output is now visible.. - /// - internal static string cmd_console_chat_state_on { - get { - return ResourceManager.GetString("cmd.console_chat.state_on", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to toggle debug messages.. - /// - internal static string cmd_debug_desc { - get { - return ResourceManager.GetString("cmd.debug.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Debug messages are now OFF. - /// - internal static string cmd_debug_state_off { - get { - return ResourceManager.GetString("cmd.debug.state_off", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Debug messages are now ON. - /// - internal static string cmd_debug_state_on { - get { - return ResourceManager.GetString("cmd.debug.state_on", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cancel mining the block located at {0}.. - /// - internal static string cmd_dig_cancel { - get { - return ResourceManager.GetString("cmd.dig.cancel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Attempt to break a block. - /// - internal static string cmd_dig_desc { - get { - return ResourceManager.GetString("cmd.dig.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Attempting to dig block at {0} {1} {2} ({3}). - /// - internal static string cmd_dig_dig { - get { - return ResourceManager.GetString("cmd.dig.dig", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Mining of the block located at {0} ends.. - /// - internal static string cmd_dig_end { - get { - return ResourceManager.GetString("cmd.dig.end", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to start digging block.. - /// - internal static string cmd_dig_fail { - get { - return ResourceManager.GetString("cmd.dig.fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No block at this location (Air). - /// - internal static string cmd_dig_no_block { - get { - return ResourceManager.GetString("cmd.dig.no_block", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You are too far away from this block.. - /// - internal static string cmd_dig_too_far { - get { - return ResourceManager.GetString("cmd.dig.too_far", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Drop specified type of items from player inventory or opened container. - /// - internal static string cmd_dropItem_desc { - get { - return ResourceManager.GetString("cmd.dropItem.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Dropped all {0} from inventory #{1}. - /// - internal static string cmd_dropItem_dropped { - get { - return ResourceManager.GetString("cmd.dropItem.dropped", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unknown item {0}. - /// - internal static string cmd_dropItem_unknown_item { - get { - return ResourceManager.GetString("cmd.dropItem.unknown_item", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Sent a click to the server, if you have enough levels and if you have placed the items in the correct slots it should enchant!. - /// - internal static string cmd_enchant_clicked { - get { - return ResourceManager.GetString("cmd.enchant.clicked", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Enchant an item when you have the Enchantment table opened and the list of enchants recieved.. - /// - internal static string cmd_enchant_desc { - get { - return ResourceManager.GetString("cmd.enchant.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You must put an item inside the enchanting table in slot 0!. - /// - internal static string cmd_enchant_enchanting_no_item { - get { - return ResourceManager.GetString("cmd.enchant.enchanting_no_item", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You must put at least 3 lapis lazuli inside the enchanting table in slot 1!. - /// - internal static string cmd_enchant_enchanting_no_lapis { - get { - return ResourceManager.GetString("cmd.enchant.enchanting_no_lapis", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You must open a an enchanting table in order to use this option!. - /// - internal static string cmd_enchant_enchanting_table_not_opened { - get { - return ResourceManager.GetString("cmd.enchant.enchanting_table_not_opened", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid slot provided (Available: top, middle, bottom)!. - /// - internal static string cmd_enchant_invalid_slot { - get { - return ResourceManager.GetString("cmd.enchant.invalid_slot", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You must first put an item to enchant to the enchanting table in order to get enchantments from the server, then you can execute this command!. - /// - internal static string cmd_enchant_no_enchantments { - get { - return ResourceManager.GetString("cmd.enchant.no_enchantments", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You do not have enouhg levels to enchant! (Your current level is {0}, you need to be level {1}).. - /// - internal static string cmd_enchant_no_levels { - get { - return ResourceManager.GetString("cmd.enchant.no_levels", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Could not click!. - /// - internal static string cmd_enchant_not_clicked { - get { - return ResourceManager.GetString("cmd.enchant.not_clicked", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Entity attacked. - /// - internal static string cmd_entityCmd_attacked { - get { - return ResourceManager.GetString("cmd.entityCmd.attacked", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Boots. - /// - internal static string cmd_entityCmd_boots { - get { - return ResourceManager.GetString("cmd.entityCmd.boots", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Chestplate. - /// - internal static string cmd_entityCmd_chestplate { - get { - return ResourceManager.GetString("cmd.entityCmd.chestplate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Custom Name. - /// - internal static string cmd_entityCmd_customname { - get { - return ResourceManager.GetString("cmd.entityCmd.customname", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Distance. - /// - internal static string cmd_entityCmd_distance { - get { - return ResourceManager.GetString("cmd.entityCmd.distance", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Entities. - /// - internal static string cmd_entityCmd_entities { - get { - return ResourceManager.GetString("cmd.entityCmd.entities", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Entity. - /// - internal static string cmd_entityCmd_entity { - get { - return ResourceManager.GetString("cmd.entityCmd.entity", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Equipment. - /// - internal static string cmd_entityCmd_equipment { - get { - return ResourceManager.GetString("cmd.entityCmd.equipment", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Health. - /// - internal static string cmd_entityCmd_health { - get { - return ResourceManager.GetString("cmd.entityCmd.health", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Helmet. - /// - internal static string cmd_entityCmd_helmet { - get { - return ResourceManager.GetString("cmd.entityCmd.helmet", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Item. - /// - internal static string cmd_entityCmd_item { - get { - return ResourceManager.GetString("cmd.entityCmd.item", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Latency. - /// - internal static string cmd_entityCmd_latency { - get { - return ResourceManager.GetString("cmd.entityCmd.latency", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Leggings. - /// - internal static string cmd_entityCmd_leggings { - get { - return ResourceManager.GetString("cmd.entityCmd.leggings", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Location. - /// - internal static string cmd_entityCmd_location { - get { - return ResourceManager.GetString("cmd.entityCmd.location", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Main Hand. - /// - internal static string cmd_entityCmd_mainhand { - get { - return ResourceManager.GetString("cmd.entityCmd.mainhand", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Nickname. - /// - internal static string cmd_entityCmd_nickname { - get { - return ResourceManager.GetString("cmd.entityCmd.nickname", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Entity not found. - /// - internal static string cmd_entityCmd_not_found { - get { - return ResourceManager.GetString("cmd.entityCmd.not_found", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Off Hand. - /// - internal static string cmd_entityCmd_offhand { - get { - return ResourceManager.GetString("cmd.entityCmd.offhand", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Pose. - /// - internal static string cmd_entityCmd_pose { - get { - return ResourceManager.GetString("cmd.entityCmd.pose", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Type. - /// - internal static string cmd_entityCmd_type { - get { - return ResourceManager.GetString("cmd.entityCmd.type", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Entity used. - /// - internal static string cmd_entityCmd_used { - get { - return ResourceManager.GetString("cmd.entityCmd.used", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Allows you to execute a command if a condition is met. (You can use variables from MinecraftClient.ini and /set command, as well as CSharp expressions). - /// - internal static string cmd_execif_desc { - get { - return ResourceManager.GetString("cmd.execif.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Error: {0}. - /// - internal static string cmd_execif_error { - get { - return ResourceManager.GetString("cmd.execif.error", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An error has occured while executing the command: {0}. - /// - internal static string cmd_execif_error_occured { - get { - return ResourceManager.GetString("cmd.execif.error_occured", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The condition '{0}' was met, executed command '{1}' with result '{2}'.. - /// - internal static string cmd_execif_executed { - get { - return ResourceManager.GetString("cmd.execif.executed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The condition '{0}' was met, executed command '{1}', no result was returned.. - /// - internal static string cmd_execif_executed_no_output { - get { - return ResourceManager.GetString("cmd.execif.executed_no_output", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Execute multiple commands one after another. - /// - internal static string cmd_execmulti_desc { - get { - return ResourceManager.GetString("cmd.execmulti.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Executed the command '{0}' with {1}. - /// - internal static string cmd_execmulti_executed { - get { - return ResourceManager.GetString("cmd.execmulti.executed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to no result!. - /// - internal static string cmd_execmulti_no_result { - get { - return ResourceManager.GetString("cmd.execmulti.no_result", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You can not use execmulti or execif within execmulti command!. - /// - internal static string cmd_execmulti_prevent { - get { - return ResourceManager.GetString("cmd.execmulti.prevent", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to result '{0}'!. - /// - internal static string cmd_execmulti_result { - get { - return ResourceManager.GetString("cmd.execmulti.result", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to disconnect from the server.. - /// - internal static string cmd_exit_desc { - get { - return ResourceManager.GetString("cmd.exit.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Already following {0}!. - /// - internal static string cmd_follow_already_following { - get { - return ResourceManager.GetString("cmd.follow.already_following", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Already stopped. - /// - internal static string cmd_follow_already_stopped { - get { - return ResourceManager.GetString("cmd.follow.already_stopped", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Can not reach the player, he is either in chunks that are not loaded, too far away or not reachable by a bot due to obstacles like gaps or water bodies!. - /// - internal static string cmd_follow_cant_reach_player { - get { - return ResourceManager.GetString("cmd.follow.cant_reach_player", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Makes the bot follow a specified player. - /// - internal static string cmd_follow_desc { - get { - return ResourceManager.GetString("cmd.follow.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid or empty player name provided!. - /// - internal static string cmd_follow_invalid_name { - get { - return ResourceManager.GetString("cmd.follow.invalid_name", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The specified player is either not connected out out of the range!. - /// - internal static string cmd_follow_invalid_player { - get { - return ResourceManager.GetString("cmd.follow.invalid_player", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to NOTE: The bot is quite slow, you need to walk slowly and at a close distance for it to be able to keep up, kinda like when you make animals follow you by holding food in your hand. This is a limitation due to a pathfinding algorithm, we are working to get a better one.. - /// - internal static string cmd_follow_note { - get { - return ResourceManager.GetString("cmd.follow.note", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Pausing!. - /// - internal static string cmd_follow_pausing { - get { - return ResourceManager.GetString("cmd.follow.pausing", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The player {0} came back to the range!. - /// - internal static string cmd_follow_player_came_to_the_range { - get { - return ResourceManager.GetString("cmd.follow.player_came_to_the_range", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The player {0} left the server!. - /// - internal static string cmd_follow_player_left { - get { - return ResourceManager.GetString("cmd.follow.player_left", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The player {0} has left the range!. - /// - internal static string cmd_follow_player_left_the_range { - get { - return ResourceManager.GetString("cmd.follow.player_left_the_range", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Resuming to follow!. - /// - internal static string cmd_follow_resuming { - get { - return ResourceManager.GetString("cmd.follow.resuming", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Started following {0}!. - /// - internal static string cmd_follow_started { - get { - return ResourceManager.GetString("cmd.follow.started", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Stopped following!. - /// - internal static string cmd_follow_stopping { - get { - return ResourceManager.GetString("cmd.follow.stopping", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Switched to following {0}!. - /// - internal static string cmd_follow_switched { - get { - return ResourceManager.GetString("cmd.follow.switched", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Enabled us-safe walking (NOTE: The bot might die or get hurt!). - /// - internal static string cmd_follow_unsafe_enabled { - get { - return ResourceManager.GetString("cmd.follow.unsafe_enabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to follow <player name|stop> [-f] (Use -f to enable un-safe walking). - /// - internal static string cmd_follow_usage { - get { - return ResourceManager.GetString("cmd.follow.usage", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to list your currently active effects.. - /// - internal static string cmd_effects_desc { - get { - return ResourceManager.GetString("cmd.effects.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to - {0} ({1}). - /// - internal static string cmd_effects_entry { - get { - return ResourceManager.GetString("cmd.effects.entry", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Active effects:. - /// - internal static string cmd_effects_header { - get { - return ResourceManager.GetString("cmd.effects.header", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No active effects.. - /// - internal static string cmd_effects_none { - get { - return ResourceManager.GetString("cmd.effects.none", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to quickly enable recommended features.. - /// - internal static string cmd_tryout_desc { - get { - return ResourceManager.GetString("cmd.tryout.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Available quick actions:. - /// - internal static string cmd_tryout_list_header { - get { - return ResourceManager.GetString("cmd.tryout.list.header", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to tui: set [Console.General] ConsoleMode = "tui" for the next restart.. - /// - internal static string cmd_tryout_list_tui { - get { - return ResourceManager.GetString("cmd.tryout.list.tui", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to [Console.General] ConsoleMode is already "tui" in the config. To switch back, set [Console.General] ConsoleMode = "classic". Restart MCC after changing it for the new mode to take effect.. - /// - internal static string cmd_tryout_tui_already_enabled { - get { - return ResourceManager.GetString("cmd.tryout.tui.already_enabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Updated [Console.General] ConsoleMode from "{0}" to "{1}" in the config. To switch back, set [Console.General] ConsoleMode = "classic". Restart MCC to apply the change.. - /// - internal static string cmd_tryout_tui_enabled { - get { - return ResourceManager.GetString("cmd.tryout.tui.enabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Display Health and Food saturation.. - /// - internal static string cmd_health_desc { - get { - return ResourceManager.GetString("cmd.health.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Health: {0}, Saturation: {1}, Level: {2}, TotalExperience: {3}. - /// - internal static string cmd_health_response { - get { - return ResourceManager.GetString("cmd.health.response", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} clicking slot {1} in window #{2}. - /// - internal static string cmd_inventory_clicking { - get { - return ResourceManager.GetString("cmd.inventory.clicking", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Closing Inventoy #{0}. - /// - internal static string cmd_inventory_close { - get { - return ResourceManager.GetString("cmd.inventory.close", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to close Inventory #{0}. - /// - internal static string cmd_inventory_close_fail { - get { - return ResourceManager.GetString("cmd.inventory.close_fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cannot find container, please retry with explicit ID. - /// - internal static string cmd_inventory_container_not_found { - get { - return ResourceManager.GetString("cmd.inventory.container_not_found", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Requested to clear slot #{0}. - /// - internal static string cmd_inventory_creative_delete { - get { - return ResourceManager.GetString("cmd.inventory.creative_delete", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Requested {0} x{1} in slot #{2}. - /// - internal static string cmd_inventory_creative_done { - get { - return ResourceManager.GetString("cmd.inventory.creative_done", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to request Creative action. - /// - internal static string cmd_inventory_creative_fail { - get { - return ResourceManager.GetString("cmd.inventory.creative_fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Damage. - /// - internal static string cmd_inventory_damage { - get { - return ResourceManager.GetString("cmd.inventory.damage", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Inventory command. - /// - internal static string cmd_inventory_desc { - get { - return ResourceManager.GetString("cmd.inventory.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Dropped 1 item from slot #{0}. - /// - internal static string cmd_inventory_drop { - get { - return ResourceManager.GetString("cmd.inventory.drop", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Dropped whole item stack from slot #{0}. - /// - internal static string cmd_inventory_drop_stack { - get { - return ResourceManager.GetString("cmd.inventory.drop_stack", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Found items. - /// - internal static string cmd_inventory_found_items { - get { - return ResourceManager.GetString("cmd.inventory.found_items", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Available actions. - /// - internal static string cmd_inventory_help_available { - get { - return ResourceManager.GetString("cmd.inventory.help.available", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Basic usage. - /// - internal static string cmd_inventory_help_basic { - get { - return ResourceManager.GetString("cmd.inventory.help.basic", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Click on an item.. - /// - internal static string cmd_inventory_help_click { - get { - return ResourceManager.GetString("cmd.inventory.help.click", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Close an opened container.. - /// - internal static string cmd_inventory_help_close { - get { - return ResourceManager.GetString("cmd.inventory.help.close", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Clear slot in creative mode.. - /// - internal static string cmd_inventory_help_creativedelete { - get { - return ResourceManager.GetString("cmd.inventory.help.creativedelete", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Give item in creative mode.. - /// - internal static string cmd_inventory_help_creativegive { - get { - return ResourceManager.GetString("cmd.inventory.help.creativegive", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Drop an item from inventory.. - /// - internal static string cmd_inventory_help_drop { - get { - return ResourceManager.GetString("cmd.inventory.help.drop", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} - ///Use '/inventory help <action>' for action help. - ///'player' and 'container' can be simplified to 'p' and 'c'. - ///Note that parameters in '[]' are optional.. - /// - internal static string cmd_inventory_help_help { - get { - return ResourceManager.GetString("cmd.inventory.help.help", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to List avaliable inventories. - /// - internal static string cmd_inventory_help_inventories { - get { - return ResourceManager.GetString("cmd.inventory.help.inventories", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to List your inventory.. - /// - internal static string cmd_inventory_help_list { - get { - return ResourceManager.GetString("cmd.inventory.help.list", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Search for an item in avaliable Inventories. - /// - internal static string cmd_inventory_help_search { - get { - return ResourceManager.GetString("cmd.inventory.help.search", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Shift click an item.. - /// - internal static string cmd_inventory_help_shiftclick { - get { - return ResourceManager.GetString("cmd.inventory.help.shiftclick", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unknown action.. - /// - internal static string cmd_inventory_help_unknown { - get { - return ResourceManager.GetString("cmd.inventory.help.unknown", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Usage. - /// - internal static string cmd_inventory_help_usage { - get { - return ResourceManager.GetString("cmd.inventory.help.usage", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Your selected hotbar is {0}. - /// - internal static string cmd_inventory_hotbar { - get { - return ResourceManager.GetString("cmd.inventory.hotbar", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Inventories. - /// - internal static string cmd_inventory_inventories { - get { - return ResourceManager.GetString("cmd.inventory.inventories", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Available Inventories. - /// - internal static string cmd_inventory_inventories_available { - get { - return ResourceManager.GetString("cmd.inventory.inventories_available", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Inventory. - /// - internal static string cmd_inventory_inventory { - get { - return ResourceManager.GetString("cmd.inventory.inventory", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Left. - /// - internal static string cmd_inventory_left { - get { - return ResourceManager.GetString("cmd.inventory.left", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Middle. - /// - internal static string cmd_inventory_middle { - get { - return ResourceManager.GetString("cmd.inventory.middle", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You must be in Creative gamemode. - /// - internal static string cmd_inventory_need_creative { - get { - return ResourceManager.GetString("cmd.inventory.need_creative", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Could not find the specified item in any of avaliable Inventories!. - /// - internal static string cmd_inventory_no_found_items { - get { - return ResourceManager.GetString("cmd.inventory.no_found_items", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No item in slot #{0}. - /// - internal static string cmd_inventory_no_item { - get { - return ResourceManager.GetString("cmd.inventory.no_item", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Inventory #{0} do not exist. - /// - internal static string cmd_inventory_not_exist { - get { - return ResourceManager.GetString("cmd.inventory.not_exist", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Right. - /// - internal static string cmd_inventory_right { - get { - return ResourceManager.GetString("cmd.inventory.right", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Shift. - /// - internal static string cmd_inventory_shiftclick { - get { - return ResourceManager.GetString("cmd.inventory.shiftclick", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Shift click failed, this may be because this container type is not supported. - /// - internal static string cmd_inventory_shiftclick_fail { - get { - return ResourceManager.GetString("cmd.inventory.shiftclick_fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Shift right. - /// - internal static string cmd_inventory_shiftrightclick { - get { - return ResourceManager.GetString("cmd.inventory.shiftrightclick", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Already collecting items!. - /// - internal static string cmd_items_collector_already_collecting { - get { - return ResourceManager.GetString("cmd.items.collector.already.collecting", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Already not collecting items!. - /// - internal static string cmd_items_collector_already_not_collecting { - get { - return ResourceManager.GetString("cmd.items.collector.already.not.collecting", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Collect items on the ground. - /// - internal static string cmd_items_collector_desc { - get { - return ResourceManager.GetString("cmd.items.collector.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Started collecting items!. - /// - internal static string cmd_items_collector_started { - get { - return ResourceManager.GetString("cmd.items.collector.started", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Stopped collecting items.. - /// - internal static string cmd_items_collector_stopped { - get { - return ResourceManager.GetString("cmd.items.collector.stopped", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Stopping item collection.... - /// - internal static string cmd_items_collector_stopping { - get { - return ResourceManager.GetString("cmd.items.collector.stopping", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to itemscollector <start/stop>. - /// - internal static string cmd_items_collector_usage { - get { - return ResourceManager.GetString("cmd.items.collector.usage", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to get the player list.. - /// - internal static string cmd_list_desc { - get { - return ResourceManager.GetString("cmd.list.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to PlayerList: {0}. - /// - internal static string cmd_list_players { - get { - return ResourceManager.GetString("cmd.list.players", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to show a vanilla-like tab list. In TUI mode, opens a live overlay.. - /// - internal static string cmd_tab_desc { - get { - return ResourceManager.GetString("cmd.tab.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No listed players are currently tracked.. - /// - internal static string cmd_tab_no_players { - get { - return ResourceManager.GetString("cmd.tab.no_players", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Tab list ({0} players). - /// - internal static string cmd_tab_title { - get { - return ResourceManager.GetString("cmd.tab.title", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Ping. - /// - internal static string cmd_tab_column_ping { - get { - return ResourceManager.GetString("cmd.tab.column_ping", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Team. - /// - internal static string cmd_tab_column_team { - get { - return ResourceManager.GetString("cmd.tab.column_team", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Player. - /// - internal static string cmd_tab_column_player { - get { - return ResourceManager.GetString("cmd.tab.column_player", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Live tab overlay opened.. - /// - internal static string cmd_tab_tui_opened { - get { - return ResourceManager.GetString("cmd.tab.tui_opened", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The tab overlay is not available right now.. - /// - internal static string cmd_tab_tui_unavailable { - get { - return ResourceManager.GetString("cmd.tab.tui_unavailable", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to log some text to the console.. - /// - internal static string cmd_log_desc { - get { - return ResourceManager.GetString("cmd.log.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Looking at yaw: {0} pitch: {1}. - /// - internal static string cmd_look_at { - get { - return ResourceManager.GetString("cmd.look.at", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Looking at {0}. - /// - internal static string cmd_look_block { - get { - return ResourceManager.GetString("cmd.look.block", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to look at direction or coordinates.. - /// - internal static string cmd_look_desc { - get { - return ResourceManager.GetString("cmd.look.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The block currently intersecting the line of sight is {0} ({1:0}, {2:0}, {3:0}), distance is {4:0.0}({5:0.0}).. - /// - internal static string cmd_look_inspection { - get { - return ResourceManager.GetString("cmd.look.inspection", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to There is no block within {0} meters that intersects with the line of sight.. - /// - internal static string cmd_look_noinspection { - get { - return ResourceManager.GetString("cmd.look.noinspection", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unknown direction '{0}'. - /// - internal static string cmd_look_unknown { - get { - return ResourceManager.GetString("cmd.look.unknown", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Chunk loading status: {0:P} - {1} out of {2} load completed.. - /// - internal static string cmd_move_chunk_loading_status { - get { - return ResourceManager.GetString("cmd.move.chunk_loading_status", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The chunk where the target location resides has not yet been loaded. - ///You can use "/chunk status {0:0.0} {1:0.0} {2:0.0}" to check the chunk loading status.. - /// - internal static string cmd_move_chunk_not_loaded { - get { - return ResourceManager.GetString("cmd.move.chunk_not_loaded", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to walk or start walking.. - /// - internal static string cmd_move_desc { - get { - return ResourceManager.GetString("cmd.move.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to force unsafe movements like falling or touching fire. - /// - internal static string cmd_move_desc_force { - get { - return ResourceManager.GetString("cmd.move.desc_force", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cannot move in that direction.. - /// - internal static string cmd_move_dir_fail { - get { - return ResourceManager.GetString("cmd.move.dir_fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Disabling Terrain and Movements.. - /// - internal static string cmd_move_disable { - get { - return ResourceManager.GetString("cmd.move.disable", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Enabling Terrain and Movements on next server login, respawn or world change.. - /// - internal static string cmd_move_enable { - get { - return ResourceManager.GetString("cmd.move.enable", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to compute path to {0}. - /// - internal static string cmd_move_fail { - get { - return ResourceManager.GetString("cmd.move.fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Gravity is disabled.. - /// - internal static string cmd_move_gravity_disabled { - get { - return ResourceManager.GetString("cmd.move.gravity.disabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Gravity is enabled.. - /// - internal static string cmd_move_gravity_enabled { - get { - return ResourceManager.GetString("cmd.move.gravity.enabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Moving {0}. - /// - internal static string cmd_move_moving { - get { - return ResourceManager.GetString("cmd.move.moving", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to compute a safe path to {0}. Try -f parameter to allow unsafe movements.. - /// - internal static string cmd_move_suggestforce { - get { - return ResourceManager.GetString("cmd.move.suggestforce", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Walking from {1} to {0}. - /// - internal static string cmd_move_walk { - get { - return ResourceManager.GetString("cmd.move.walk", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Set an item name when an Anvil inventory is active and the item is in the first slot.. - /// - internal static string cmd_nameitem_desc { - get { - return ResourceManager.GetString("cmd.nameitem.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to send the packet for naming an item, try again!. - /// - internal static string cmd_nameitem_failed { - get { - return ResourceManager.GetString("cmd.nameitem.failed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You need to place an item in the first slot (slot id: 0) of the Anvil inventory!. - /// - internal static string cmd_nameitem_first_slot_empty { - get { - return ResourceManager.GetString("cmd.nameitem.first.slot.empty", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The item name cannot be empty!. - /// - internal static string cmd_nameitem_item_name_empty { - get { - return ResourceManager.GetString("cmd.nameitem.item.name.empty", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You need to have an Anvil inventory opened and active in order to use this command!. - /// - internal static string cmd_nameitem_no_anvil_inventory_open { - get { - return ResourceManager.GetString("cmd.nameitem.no.anvil.inventory.open", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Successfully sent the item name to the server, you can now click on the slot number 2 in the Anvil inventory to rename the item.. - /// - internal static string cmd_nameitem_successful { - get { - return ResourceManager.GetString("cmd.nameitem.successful", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to send recipe book craft request for {0}.. - /// - internal static string cmd_recipebook_craft_failed { - get { - return ResourceManager.GetString("cmd.recipebook.craft.failed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Requested recipe {0}.. - /// - internal static string cmd_recipebook_craft_sent { - get { - return ResourceManager.GetString("cmd.recipebook.craft.sent", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Requested recipe {0} with craft-all.. - /// - internal static string cmd_recipebook_craftall_sent { - get { - return ResourceManager.GetString("cmd.recipebook.craftall.sent", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to List unlocked recipe book recipes and craft them through the active recipe book inventory.. - /// - internal static string cmd_recipebook_desc { - get { - return ResourceManager.GetString("cmd.recipebook.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unlocked recipe book recipes. - /// - internal static string cmd_recipebook_list { - get { - return ResourceManager.GetString("cmd.recipebook.list", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You need an active player crafting grid, crafting table, furnace, blast furnace, smoker, or stonecutter inventory.. - /// - internal static string cmd_recipebook_no_active_inventory { - get { - return ResourceManager.GetString("cmd.recipebook.no.active.inventory", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No unlocked recipe book recipes are currently tracked.. - /// - internal static string cmd_recipebook_no_recipes { - get { - return ResourceManager.GetString("cmd.recipebook.no.recipes", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The recipe identifier cannot be empty.. - /// - internal static string cmd_recipebook_recipe_id_empty { - get { - return ResourceManager.GetString("cmd.recipebook.recipe.id.empty", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Recipe book crafting is only supported on Minecraft 1.13 and newer.. - /// - internal static string cmd_recipebook_unsupported { - get { - return ResourceManager.GetString("cmd.recipebook.unsupported", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to restart and reconnect to the server.. - /// - internal static string cmd_reco_desc { - get { - return ResourceManager.GetString("cmd.reco.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Reloads MCC settings.. - /// - internal static string cmd_reload_desc { - get { - return ResourceManager.GetString("cmd.reload.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Reloaded Settings!. - /// - internal static string cmd_reload_finished { - get { - return ResourceManager.GetString("cmd.reload.finished", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Reloading settings.... - /// - internal static string cmd_reload_started { - get { - return ResourceManager.GetString("cmd.reload.started", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This command will NOT affect certain settings which are used before connecting to a server!. - /// - internal static string cmd_reload_warning1 { - get { - return ResourceManager.GetString("cmd.reload.warning1", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Some settings passed through the command line parameters might get overriden!. - /// - internal static string cmd_reload_warning2 { - get { - return ResourceManager.GetString("cmd.reload.warning2", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You also might need to reconnect for some settings to take effect.. - /// - internal static string cmd_reload_warning3 { - get { - return ResourceManager.GetString("cmd.reload.warning3", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Replay Chat Bot will not be hard reloaded due to technical limitations!. - /// - internal static string cmd_reload_warning4 { - get { - return ResourceManager.GetString("cmd.reload.warning4", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use this to respawn if you are dead.. - /// - internal static string cmd_respawn_desc { - get { - return ResourceManager.GetString("cmd.respawn.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You have respawned.. - /// - internal static string cmd_respawn_done { - get { - return ResourceManager.GetString("cmd.respawn.done", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to run a script file.. - /// - internal static string cmd_script_desc { - get { - return ResourceManager.GetString("cmd.script.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to send a chat message or command.. - /// - internal static string cmd_send_desc { - get { - return ResourceManager.GetString("cmd.send.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to set a custom %variable%.. - /// - internal static string cmd_set_desc { - get { - return ResourceManager.GetString("cmd.set.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to variable name must be A-Za-z0-9.. - /// - internal static string cmd_set_format { - get { - return ResourceManager.GetString("cmd.set.format", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to set a custom %variable% randomly to a given value.. - /// - internal static string cmd_setrnd_desc { - get { - return ResourceManager.GetString("cmd.setrnd.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to setrnd variable -7 to 17 OR setrnd variable string1 "\"string2\" string3". - /// - internal static string cmd_setrnd_format { - get { - return ResourceManager.GetString("cmd.setrnd.format", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to setrnd variable -7 to 17. - /// - internal static string cmd_setrndnum_format { - get { - return ResourceManager.GetString("cmd.setrndnum.format", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to setrnd variable string1 "\"string2\" string3". - /// - internal static string cmd_setrndstr_format { - get { - return ResourceManager.GetString("cmd.setrndstr.format", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Toggles sneaking. - /// - internal static string cmd_sneak_desc { - get { - return ResourceManager.GetString("cmd.sneak.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You are not sneaking anymore. - /// - internal static string cmd_sneak_off { - get { - return ResourceManager.GetString("cmd.sneak.off", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You are sneaking now. - /// - internal static string cmd_sneak_on { - get { - return ResourceManager.GetString("cmd.sneak.on", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Current tps. - /// - internal static string cmd_tps_current { - get { - return ResourceManager.GetString("cmd.tps.current", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Display server current tps (tick per second). May not be accurate. - /// - internal static string cmd_tps_desc { - get { - return ResourceManager.GetString("cmd.tps.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to List all scoreboard teams and their members. - /// - internal static string cmd_teams_desc { - get { - return ResourceManager.GetString("cmd.teams.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No teams are currently tracked. - /// - internal static string cmd_teams_no_teams { - get { - return ResourceManager.GetString("cmd.teams.no_teams", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Team '{0}' (display: {1}, ...). - /// - internal static string cmd_teams_team_header { - get { - return ResourceManager.GetString("cmd.teams.team_header", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Members ({0}): {1}. - /// - internal static string cmd_teams_team_members { - get { - return ResourceManager.GetString("cmd.teams.team_members", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No members. - /// - internal static string cmd_teams_team_no_members { - get { - return ResourceManager.GetString("cmd.teams.team_no_members", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Place a block or open chest. - /// - internal static string cmd_useblock_desc { - get { - return ResourceManager.GetString("cmd.useblock.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Useblock at ({0:0.0}, {1:0.0}, {2:0.0}) {3}.. - /// - internal static string cmd_useblock_use { - get { - return ResourceManager.GetString("cmd.useblock.use", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use the item in your hand, optionally on a specific block. - /// - internal static string cmd_useitem_desc { - get { - return ResourceManager.GetString("cmd.useitem.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Used an item. - /// - internal static string cmd_useitem_use { - get { - return ResourceManager.GetString("cmd.useitem.use", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Minimum number that you have provided is bigger than the maximum, swapping them around!. - /// - internal static string cmd_wait_random_min_bigger { - get { - return ResourceManager.GetString("cmd.wait.random.min.bigger", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to write to backup file {0}. - /// - internal static string config_backup_fail { - get { - return ResourceManager.GetString("config.backup.fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The color code {1} in {0} is in illegal format and the default value has been restored.. - /// - internal static string config_commandsuggestion_illegal_color { - get { - return ResourceManager.GetString("config.commandsuggestion.illegal_color", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Settings have been loaded from {0}. - /// - internal static string config_load { - get { - return ResourceManager.GetString("config.load", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to load settings:. - /// - internal static string config_load_fail { - get { - return ResourceManager.GetString("config.load.fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The language code is invalid!. - /// - internal static string config_Main_Advanced_language_invaild { - get { - return ResourceManager.GetString("config.Main.Advanced.language.invaild", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The current setting is saved as {0}. - /// - internal static string config_saving { - get { - return ResourceManager.GetString("config.saving", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to write to settings file {0}. - /// - internal static string config_write_fail { - get { - return ResourceManager.GetString("config.write.fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Color test: Your terminal should display {0}. - /// - internal static string debug_color_test { - get { - return ResourceManager.GetString("debug.color_test", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Crypto keys & hash generated.. - /// - internal static string debug_crypto { - get { - return ResourceManager.GetString("debug.crypto", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No profile keys could be loaded from disk. - /// - internal static string debug_keys_cache_fail { - get { - return ResourceManager.GetString("debug.keys_cache_fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Profile keys has been successfully loaded from disk.. - /// - internal static string debug_keys_cache_ok { - get { - return ResourceManager.GetString("debug.keys_cache_ok", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Performing request to {0}. - /// - internal static string debug_request { - get { - return ResourceManager.GetString("debug.request", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No sessions could be loaded from disk. - /// - internal static string debug_session_cache_fail { - get { - return ResourceManager.GetString("debug.session_cache_fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Session data has been successfully loaded from disk.. - /// - internal static string debug_session_cache_ok { - get { - return ResourceManager.GetString("debug.session_cache_ok", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Success. (session ID: {0}). - /// - internal static string debug_session_id { - get { - return ResourceManager.GetString("debug.session_id", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Bottom slot. - /// - internal static string Enchantment_bottom_slot { - get { - return ResourceManager.GetString("Enchantment.bottom_slot", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Enchantments available. - /// - internal static string Enchantment_enchantments_available { - get { - return ResourceManager.GetString("Enchantment.enchantments_available", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Levels. - /// - internal static string Enchantment_levels { - get { - return ResourceManager.GetString("Enchantment.levels", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Middle slot. - /// - internal static string Enchantment_middle_slot { - get { - return ResourceManager.GetString("Enchantment.middle_slot", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Top slot. - /// - internal static string Enchantment_tops_slot { - get { - return ResourceManager.GetString("Enchantment.tops_slot", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Got error code from server while refreshing authentication: {0}. - /// - internal static string error_auth { - get { - return ResourceManager.GetString("error.auth", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to connect to this IP.. - /// - internal static string error_connect { - get { - return ResourceManager.GetString("error.connect", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to A timeout occured while attempting to connect to this IP.. - /// - internal static string error_connection_timeout { - get { - return ResourceManager.GetString("error.connection_timeout", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to determine server version.. - /// - internal static string error_determine { - get { - return ResourceManager.GetString("error.determine", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Forge Login Handshake did not complete successfully. - /// - internal static string error_forge { - get { - return ResourceManager.GetString("error.forge", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Forge StartEncryption Handshake did not complete successfully. - /// - internal static string error_forge_encrypt { - get { - return ResourceManager.GetString("error.forge_encrypt", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cannot force Forge support for this Minecraft version!. - /// - internal static string error_forgeforce { - get { - return ResourceManager.GetString("error.forgeforce", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid usage of the generator command!. - /// - internal static string error_generator_invalid { - get { - return ResourceManager.GetString("error.generator.invalid", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The provided path must be a path to a file that is in .json format!. - /// - internal static string error_generator_json { - get { - return ResourceManager.GetString("error.generator.json", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid data path provided! (The path either does not exists or you have made a typo). - /// - internal static string error_generator_path { - get { - return ResourceManager.GetString("error.generator.path", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Got error code from server: {0}. - /// - internal static string error_http_code { - get { - return ResourceManager.GetString("error.http_code", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid response to StartEncryption packet. - /// - internal static string error_invalid_encrypt { - get { - return ResourceManager.GetString("error.invalid_encrypt", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid response to Handshake packet. - /// - internal static string error_invalid_response { - get { - return ResourceManager.GetString("error.invalid_response", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This feature requires Inventory Handling to be enabled in order to work!. - /// - internal static string error_inventoryhandling_not_enabled { - get { - return ResourceManager.GetString("error.inventoryhandling_not_enabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to An error occured when attempting to join this server.. - /// - internal static string error_join { - get { - return ResourceManager.GetString("error.join", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Login failed : . - /// - internal static string error_login { - get { - return ResourceManager.GetString("error.login", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Incorrect username/password, blacklisted IP or too many logins.. - /// - internal static string error_login_blocked { - get { - return ResourceManager.GetString("error.login.blocked", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to User cancelled.. - /// - internal static string error_login_cancel { - get { - return ResourceManager.GetString("error.login.cancel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to login to this server.. - /// - internal static string error_login_failed { - get { - return ResourceManager.GetString("error.login_failed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Account migrated, use e-mail as username.. - /// - internal static string error_login_migrated { - get { - return ResourceManager.GetString("error.login.migrated", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Network error.. - /// - internal static string error_login_network { - get { - return ResourceManager.GetString("error.login.network", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to User not premium.. - /// - internal static string error_login_premium { - get { - return ResourceManager.GetString("error.login.premium", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid server response.. - /// - internal static string error_login_response { - get { - return ResourceManager.GetString("error.login.response", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Login servers are unavailable. Please try again later.. - /// - internal static string error_login_server { - get { - return ResourceManager.GetString("error.login.server", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to SSL Error.. - /// - internal static string error_login_ssl { - get { - return ResourceManager.GetString("error.login.ssl", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unknown Error.. - /// - internal static string error_login_unknown { - get { - return ResourceManager.GetString("error.login.unknown", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You are missing argument {0}. - /// - internal static string error_missing_argument { - get { - return ResourceManager.GetString("error.missing.argument", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Server does not report its protocol version, autodetection will not work.. - /// - internal static string error_no_version_report { - get { - return ResourceManager.GetString("error.no_version_report", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to ping this IP.. - /// - internal static string error_ping { - get { - return ResourceManager.GetString("error.ping", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This Realms world does not exist or access was denied. - /// - internal static string error_realms_access_denied { - get { - return ResourceManager.GetString("error.realms.access_denied", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Trying to join a Realms world but Realms support is disabled in config. - /// - internal static string error_realms_disabled { - get { - return ResourceManager.GetString("error.realms.disabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cannot retrieve the server IP of your Realms world. - /// - internal static string error_realms_ip_error { - get { - return ResourceManager.GetString("error.realms.ip_error", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Invalid or unknown Realms server ID.. - /// - internal static string error_realms_server_id { - get { - return ResourceManager.GetString("error.realms.server_id", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Realms server may require some time to start up. Please retry again later.. - /// - internal static string error_realms_server_unavailable { - get { - return ResourceManager.GetString("error.realms.server_unavailable", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}: Invalid syntax, expecting --argname=value or --section.argname=value. - /// - internal static string error_setting_argument_syntax { - get { - return ResourceManager.GetString("error.setting.argument_syntax", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This feature requires Terrain And Movements to be enabled in order to work!. - /// - internal static string error_terrain_not_enabled { - get { - return ResourceManager.GetString("error.terrain_not_enabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Connection Timeout. - /// - internal static string error_timeout { - get { - return ResourceManager.GetString("error.timeout", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unexpected response from the server (is that a Minecraft server?). - /// - internal static string error_unexpect_response { - get { - return ResourceManager.GetString("error.unexpect_response", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cannot connect to the server : This version is not supported !. - /// - internal static string error_unsupported { - get { - return ResourceManager.GetString("error.unsupported", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Usage:. - /// - internal static string error_usage { - get { - return ResourceManager.GetString("error.usage", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Server reports a different version than manually set. Login may not work.. - /// - internal static string error_version_different { - get { - return ResourceManager.GetString("error.version_different", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ChatBot methods should NOT be called in the constructor as API handler is not initialized yet. Override Initialize() or AfterGameJoined() instead to perform initialization tasks.. - /// - internal static string exception_chatbot_init { - get { - return ResourceManager.GetString("exception.chatbot.init", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The provided script does not have a valid MCCScript header. - /// - internal static string exception_csrunner_invalid_head { - get { - return ResourceManager.GetString("exception.csrunner.invalid_head", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to process incoming packet of type {0}. (PacketID: {1}, Protocol: {2}, LoginPhase: {3}, InnerException: {4}).. - /// - internal static string exception_packet_process { - get { - return ResourceManager.GetString("exception.packet_process", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please update block types handling for this Minecraft version. See Material.cs. - /// - internal static string exception_palette_block { - get { - return ResourceManager.GetString("exception.palette.block", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please update entity types handling for this Minecraft version. See EntityType.cs. - /// - internal static string exception_palette_entity { - get { - return ResourceManager.GetString("exception.palette.entity", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please update health field handling for this Minecraft version.. - /// - internal static string exception_palette_healthfield { - get { - return ResourceManager.GetString("exception.palette.healthfield", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please update item types handling for this Minecraft version. See ItemType.cs. - /// - internal static string exception_palette_item { - get { - return ResourceManager.GetString("exception.palette.item", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please update packet type palette for this Minecraft version. See PacketTypePalette.cs. - /// - internal static string exception_palette_packet { - get { - return ResourceManager.GetString("exception.palette.packet", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unknown direction. - /// - internal static string exception_unknown_direction { - get { - return ResourceManager.GetString("exception.unknown_direction", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to User-initiated logout should be done by calling Disconnect(). - /// - internal static string exception_user_logout { - get { - return ResourceManager.GetString("exception.user_logout", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The protocol version no.{0} is not supported.. - /// - internal static string exception_version_unsupport { - get { - return ResourceManager.GetString("exception.version_unsupport", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Entities are currently not handled for that MC version.. - /// - internal static string extra_entity_disabled { - get { - return ResourceManager.GetString("extra.entity_disabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please enable EntityHandling in the config file first.. - /// - internal static string extra_entity_required { - get { - return ResourceManager.GetString("extra.entity_required", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Inventory # {0} closed.. - /// - internal static string extra_inventory_close { - get { - return ResourceManager.GetString("extra.inventory_close", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Inventories are currently not handled for that MC version.. - /// - internal static string extra_inventory_disabled { - get { - return ResourceManager.GetString("extra.inventory_disabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Inventory handling is now enabled.. - /// - internal static string extra_inventory_enabled { - get { - return ResourceManager.GetString("extra.inventory_enabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use /inventory to interact with it.. - /// - internal static string extra_inventory_interact { - get { - return ResourceManager.GetString("extra.inventory_interact", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Inventory # {0} opened: {1}. - /// - internal static string extra_inventory_open { - get { - return ResourceManager.GetString("extra.inventory_open", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please enable InventoryHandling in the config file first.. - /// - internal static string extra_inventory_required { - get { - return ResourceManager.GetString("extra.inventory_required", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Terrain & Movements currently not handled for that MC version.. - /// - internal static string extra_terrainandmovement_disabled { - get { - return ResourceManager.GetString("extra.terrainandmovement_disabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Terrain and Movements is now enabled.. - /// - internal static string extra_terrainandmovement_enabled { - get { - return ResourceManager.GetString("extra.terrainandmovement_enabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please enable Terrain and Movements in the config file first.. - /// - internal static string extra_terrainandmovement_required { - get { - return ResourceManager.GetString("extra.terrainandmovement_required", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to [{0}] Failed to initialize FileSystemWatcher, retrying using Polling. - /// - internal static string filemonitor_fail { - get { - return ResourceManager.GetString("filemonitor.fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to [{0}] Initializing FileSystemWatcher for file: {1}. - /// - internal static string filemonitor_init { - get { - return ResourceManager.GetString("filemonitor.init", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Accepting server mod list.... - /// - internal static string forge_accept { - get { - return ResourceManager.GetString("forge.accept", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Accepting server registries.... - /// - internal static string forge_accept_registry { - get { - return ResourceManager.GetString("forge.accept_registry", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Forge server connection complete!. - /// - internal static string forge_complete { - get { - return ResourceManager.GetString("forge.complete", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Acknowledging FML2 Server Config: {0}. - /// - internal static string forge_fml2_config { - get { - return ResourceManager.GetString("forge.fml2.config", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Received FML2 Server Mod List. - /// - internal static string forge_fml2_mod { - get { - return ResourceManager.GetString("forge.fml2.mod", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Sending back FML2 Client Mod List. - /// - internal static string forge_fml2_mod_send { - get { - return ResourceManager.GetString("forge.fml2.mod_send", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Acknowledging FML2 Server Registry: {0}. - /// - internal static string forge_fml2_registry { - get { - return ResourceManager.GetString("forge.fml2.registry", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Got Unknown FML2 Handshake message no. {0}. - /// - internal static string forge_fml2_unknown { - get { - return ResourceManager.GetString("forge.fml2.unknown", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Ignoring Unknown FML2 LoginMessage channel: {0}. - /// - internal static string forge_fml2_unknown_channel { - get { - return ResourceManager.GetString("forge.fml2.unknown_channel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Mod list:. - /// - internal static string forge_mod_list { - get { - return ResourceManager.GetString("forge.mod_list", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Server is running Forge without mods.. - /// - internal static string forge_no_mod { - get { - return ResourceManager.GetString("forge.no_mod", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Received registry with {0} entries. - /// - internal static string forge_registry { - get { - return ResourceManager.GetString("forge.registry", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Received registry {0} with {1} entries. - /// - internal static string forge_registry_2 { - get { - return ResourceManager.GetString("forge.registry_2", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Sending falsified mod list to server.... - /// - internal static string forge_send_mod { - get { - return ResourceManager.GetString("forge.send_mod", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Forge protocol version : {0}. - /// - internal static string forge_version { - get { - return ResourceManager.GetString("forge.version", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Server is running Forge with {0} mods.. - /// - internal static string forge_with_mod { - get { - return ResourceManager.GetString("forge.with_mod", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Available commands: {0}. - /// - internal static string general_available_cmd { - get { - return ResourceManager.GetString("general.available_cmd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to This bot will be unloaded.. - /// - internal static string general_bot_unload { - get { - return ResourceManager.GetString("general.bot_unload", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Done. - /// - internal static string general_done { - get { - return ResourceManager.GetString("general.done", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Fail. - /// - internal static string general_fail { - get { - return ResourceManager.GetString("general.fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to OnInternalCommand: Got error from {0}: {1}. - /// - internal static string icmd_error { - get { - return ResourceManager.GetString("icmd.error", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to help <cmdname>: show brief help about a command.. - /// - internal static string icmd_help { - get { - return ResourceManager.GetString("icmd.help", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to help <cmdname>. Available commands: - ///{0}For server help, use '{1}send /help' instead.. - /// - internal static string icmd_list { - get { - return ResourceManager.GetString("icmd.list", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unknown command '{0}'. Use 'help' for command list.. - /// - internal static string icmd_unknown { - get { - return ResourceManager.GetString("icmd.unknown", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Avaliable profiles:. - /// - internal static string mcc_avaliable_profiles { - get { - return ResourceManager.GetString("mcc.avaliable_profiles", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The old MinecraftClient.ini has been backed up as {0}. - /// - internal static string mcc_backup_old_config { - get { - return ResourceManager.GetString("mcc.backup_old_config", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Paste your code here:. - /// - internal static string mcc_browser_login_code { - get { - return ResourceManager.GetString("mcc.browser_login_code", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Your browser should open automatically. If not, open the link below in your browser.. - /// - internal static string mcc_browser_open { - get { - return ResourceManager.GetString("mcc.browser_open", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Connecting to {0}.... - /// - internal static string mcc_connecting { - get { - return ResourceManager.GetString("mcc.connecting", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Select a login method: [1] Offline, [2] Online (Microsoft), [3] Yggdrasil. - /// - internal static string mcc_auth_method_prompt { - get { - return ResourceManager.GetString("mcc.auth_method_prompt", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please choose 1, 2, or 3.. - /// - internal static string mcc_auth_method_invalid { - get { - return ResourceManager.GetString("mcc.auth_method_invalid", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Tip: try TUI mode for a cleaner interface, mouse-friendly container actions, and a nicer layout. Run {0}feature tui§8 to switch [Console.General] ConsoleMode to "tui" for the next restart.. - /// - internal static string mcc_console_mode_tui_recommendation { - get { - return ResourceManager.GetString("mcc.console_mode_tui_recommendation", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to MCC encountered a problem while starting TUI mode.. - /// - internal static string mcc_tui_startup_failed { - get { - return ResourceManager.GetString("mcc.tui_startup_failed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to As a fallback, MCC has automatically switched [Console.General] ConsoleMode to "classic". This will take effect after you restart MCC.. - /// - internal static string mcc_tui_startup_fallback_classic { - get { - return ResourceManager.GetString("mcc.tui_startup_fallback_classic", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please report this issue to the MCC Team.. - /// - internal static string mcc_report_issue { - get { - return ResourceManager.GetString("mcc.report_issue", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to To sign in, open {0} in your browser and enter the code: {1}. - /// - internal static string mcc_device_code_prompt { - get { - return ResourceManager.GetString("mcc.device_code_prompt", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Waiting for authentication to complete.... - /// - internal static string mcc_device_code_waiting { - get { - return ResourceManager.GetString("mcc.device_code_waiting", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Login failed :. - /// - internal static string mcc_disconnect_login { - get { - return ResourceManager.GetString("mcc.disconnect.login", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Connection has been lost.. - /// - internal static string mcc_disconnect_lost { - get { - return ResourceManager.GetString("mcc.disconnect.lost", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Disconnected by Server :. - /// - internal static string mcc_disconnect_server { - get { - return ResourceManager.GetString("mcc.disconnect.server", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Not connected to any server. Use '{0}help' for help.. - /// - internal static string mcc_disconnected { - get { - return ResourceManager.GetString("mcc.disconnected", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Fetching profile key from Microsoft.. - /// - internal static string mcc_fetching_key { - get { - return ResourceManager.GetString("mcc.fetching_key", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Checking if server is running Forge.... - /// - internal static string mcc_forge { - get { - return ResourceManager.GetString("mcc.forge", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Force-enabling Forge support.. - /// - internal static string mcc_forgeforce { - get { - return ResourceManager.GetString("mcc.forgeforce", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Found server {0}:{1} for domain {2}. - /// - internal static string mcc_found { - get { - return ResourceManager.GetString("mcc.found", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to New configuration file "{0}" is generated.. - /// - internal static string mcc_gen_new_config { - get { - return ResourceManager.GetString("mcc.gen_new_config", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Succesfully generated {0} palette using the dataset: {1}. - /// - internal static string mcc_generator_done { - get { - return ResourceManager.GetString("mcc.generator.done", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Generating {0} palette using the dataset: {1}. - /// - internal static string mcc_generator_generating { - get { - return ResourceManager.GetString("mcc.generator.generating", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Handshake successful. (Server ID: {0}). - /// - internal static string mcc_handshake { - get { - return ResourceManager.GetString("mcc.handshake", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to A new version of MCC is available and you can download it via /upgrade - ///Or download it manually: {0}. - /// - internal static string mcc_has_update { - get { - return ResourceManager.GetString("mcc.has_update", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Help us translate MCC: {0}. - /// - internal static string mcc_help_us_translate { - get { - return ResourceManager.GetString("mcc.help_us_translate", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to parse the settings file, enter "{0}new" to generate a new configuration.. - /// - internal static string mcc_invaild_config { - get { - return ResourceManager.GetString("mcc.invaild_config", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Server IP : . - /// - internal static string mcc_ip { - get { - return ResourceManager.GetString("mcc.ip", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Server was successfully joined. - ///Type '{0}quit' to leave the server.. - /// - internal static string mcc_joined { - get { - return ResourceManager.GetString("mcc.joined", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Link: {0}. - /// - internal static string mcc_link { - get { - return ResourceManager.GetString("mcc.link", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Login :. - /// - internal static string mcc_login { - get { - return ResourceManager.GetString("mcc.login", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please type the username or email of your choice.. - /// - internal static string mcc_login_basic_io { - get { - return ResourceManager.GetString("mcc.login_basic_io", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to perform SRV lookup for {0} - ///{1}: {2}. - /// - internal static string mcc_not_found { - get { - return ResourceManager.GetString("mcc.not_found", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You chose to run in offline mode.. - /// - internal static string mcc_offline { - get { - return ResourceManager.GetString("mcc.offline", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please type the password for {0}.. - /// - internal static string mcc_password_basic_io { - get { - return ResourceManager.GetString("mcc.password_basic_io", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Password(invisible): . - /// - internal static string mcc_password_hidden { - get { - return ResourceManager.GetString("mcc.password_hidden", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Authlib server host:. - /// - internal static string mcc_yggdrasil_host { - get { - return ResourceManager.GetString("mcc.yggdrasil_host", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Authlib server port [{0}]:. - /// - internal static string mcc_yggdrasil_port { - get { - return ResourceManager.GetString("mcc.yggdrasil_port", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Authlib-Injector API path [{0}]:. - /// - internal static string mcc_yggdrasil_api_path { - get { - return ResourceManager.GetString("mcc.yggdrasil_api_path", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use HTTPS? [Y/n]. - /// - internal static string mcc_yggdrasil_use_https { - get { - return ResourceManager.GetString("mcc.yggdrasil_use_https", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The authlib server host cannot be empty.. - /// - internal static string mcc_yggdrasil_invalid_host { - get { - return ResourceManager.GetString("mcc.yggdrasil_invalid_host", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The authlib server port must be between 1 and 65535.. - /// - internal static string mcc_yggdrasil_invalid_port { - get { - return ResourceManager.GetString("mcc.yggdrasil_invalid_port", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please answer yes or no.. - /// - internal static string mcc_yggdrasil_invalid_yes_no { - get { - return ResourceManager.GetString("mcc.yggdrasil_invalid_yes_no", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Authlib-injector URL:. - /// - internal static string mcc_yggdrasil_url { - get { - return ResourceManager.GetString("mcc.yggdrasil_url", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The authlib-injector URL must be an absolute HTTP or HTTPS URL.. - /// - internal static string mcc_yggdrasil_invalid_url { - get { - return ResourceManager.GetString("mcc.yggdrasil_invalid_url", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Could not reach the authlib-injector server. Check the URL and try again.. - /// - internal static string mcc_yggdrasil_server_unreachable { - get { - return ResourceManager.GetString("mcc.yggdrasil_server_unreachable", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The server did not return valid authlib-injector metadata. Check the URL and try again.. - /// - internal static string mcc_yggdrasil_server_invalid { - get { - return ResourceManager.GetString("mcc.yggdrasil_server_invalid", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The configured authlib-injector URL must be an absolute HTTP or HTTPS URL.. - /// - internal static string config_auth_server_url_invalid { - get { - return ResourceManager.GetString("config.auth_server_url_invalid", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You are dead. Type '{0}respawn' to respawn.. - /// - internal static string mcc_player_dead { - get { - return ResourceManager.GetString("mcc.player_dead", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You are dead. Automatically respawning after 1 second.. - /// - internal static string mcc_player_dead_respawn { - get { - return ResourceManager.GetString("mcc.player_dead_respawn", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Or press Enter to exit Minecraft Console Client.. - /// - internal static string mcc_press_exit { - get { - return ResourceManager.GetString("mcc.press_exit", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cached profile key needs to be refreshed.. - /// - internal static string mcc_profile_key_invalid { - get { - return ResourceManager.GetString("mcc.profile_key_invalid", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cached profile key is still valid for {0}.. - /// - internal static string mcc_profile_key_valid { - get { - return ResourceManager.GetString("mcc.profile_key_valid", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You have access to the following Realms worlds. - /// - internal static string mcc_realms_available { - get { - return ResourceManager.GetString("mcc.realms_available", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use realms:<index> as server IP to join a Realms world. - /// - internal static string mcc_realms_join { - get { - return ResourceManager.GetString("mcc.realms_join", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Waiting 5 seconds ({0} attempts left).... - /// - internal static string mcc_reconnect { - get { - return ResourceManager.GetString("mcc.reconnect", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Resolving {0}.... - /// - internal static string mcc_resolve { - get { - return ResourceManager.GetString("mcc.resolve", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Restarting Minecraft Console Client.... - /// - internal static string mcc_restart { - get { - return ResourceManager.GetString("mcc.restart", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cannot send text: not connected to a server.. - /// - internal static string mcc_send_text_not_connected { - get { - return ResourceManager.GetString("mcc.send_text_not_connected", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Waiting {0} seconds before restarting.... - /// - internal static string mcc_restart_delay { - get { - return ResourceManager.GetString("mcc.restart_delay", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Retrieving Server Info.... - /// - internal static string mcc_retrieve { - get { - return ResourceManager.GetString("mcc.retrieve", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to - ///MCC is running with default settings.. - /// - internal static string mcc_run_with_default_settings { - get { - return ResourceManager.GetString("mcc.run_with_default_settings", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Select a profile from available profiles:. - /// - internal static string mcc_select_profile { - get { - return ResourceManager.GetString("mcc.select_profile", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Selected profile:. - /// - internal static string mcc_selected_profile { - get { - return ResourceManager.GetString("mcc.selected_profile", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to MCC uses Sentry to log errors. You can opt-out by setting the EnableSentry option in the configuration file to false.. - /// - internal static string mcc_sentry_logging { - get { - return ResourceManager.GetString("mcc.sentry_logging", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Server is in offline mode.. - /// - internal static string mcc_server_offline { - get { - return ResourceManager.GetString("mcc.server_offline", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Server version : {0} (protocol v{1}). - /// - internal static string mcc_server_protocol { - get { - return ResourceManager.GetString("mcc.server_protocol", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Server version : . - /// - internal static string mcc_server_version { - get { - return ResourceManager.GetString("mcc.server_version", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Checking Session.... - /// - internal static string mcc_session { - get { - return ResourceManager.GetString("mcc.session", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to check session.. - /// - internal static string mcc_session_fail { - get { - return ResourceManager.GetString("mcc.session_fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cached session is invalid or expired.. - /// - internal static string mcc_session_invalid { - get { - return ResourceManager.GetString("mcc.session_invalid", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cached session is still valid for {0}.. - /// - internal static string mcc_session_valid { - get { - return ResourceManager.GetString("mcc.session_valid", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Settings file MinecraftClient.ini has been generated.. - /// - internal static string mcc_settings_generated { - get { - return ResourceManager.GetString("mcc.settings_generated", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unknown or not supported MC version {0}. - ///Switching to autodetection mode.. - /// - internal static string mcc_unknown_version { - get { - return ResourceManager.GetString("mcc.unknown_version", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The current version is already up to date or is a development build.. - /// - internal static string mcc_update_already_latest { - get { - return ResourceManager.GetString("mcc.update.already_latest", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Checking for updates has already started.. - /// - internal static string mcc_update_already_running { - get { - return ResourceManager.GetString("mcc.update.already_running", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The download has been cancelled.. - /// - internal static string mcc_update_cancel { - get { - return ResourceManager.GetString("mcc.update.cancel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unable to check for updates from Github, please check your internet connection or enable proxy.. - /// - internal static string mcc_update_check_fail { - get { - return ResourceManager.GetString("mcc.update.check_fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Self-updating: Download is complete, decompressing.. - /// - internal static string mcc_update_download_complete { - get { - return ResourceManager.GetString("mcc.update.download_complete", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Self-updating: An error occurred while downloading or saving the file:. - /// - internal static string mcc_update_download_fail { - get { - return ResourceManager.GetString("mcc.update.download_fail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Self-updating: New version detected: "{0}", download will start soon (platform: {1}).. - /// - internal static string mcc_update_exist_update { - get { - return ResourceManager.GetString("mcc.update.exist_update", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The latest release does not contain a build that matches your operating system and CPU architecture.. - /// - internal static string mcc_update_platform_not_support { - get { - return ResourceManager.GetString("mcc.update.platform_not_support", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Self-updating: {0:00.00}%, ETA {4}, Downloaded {1:00.0}MB of {2:00.0}MB, Avg {3:0.0}KB/s. - /// - internal static string mcc_update_progress { - get { - return ResourceManager.GetString("mcc.update.progress", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Self-updating: Downloaded {0:00.0}MB, Avg {1:0.0}KB/s. - /// - internal static string mcc_update_progress_type2 { - get { - return ResourceManager.GetString("mcc.update.progress_type2", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Add "-f" to force the download.. - /// - internal static string mcc_update_promote_force { - get { - return ResourceManager.GetString("mcc.update.promote_force", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use "--force-upgrade" to force the download.. - /// - internal static string mcc_update_promote_force_cmd { - get { - return ResourceManager.GetString("mcc.update.promote_force_cmd", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Self-updating: File saved as: {0}. - /// - internal static string mcc_update_save_as { - get { - return ResourceManager.GetString("mcc.update.save_as", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Start checking for updates.. - /// - internal static string mcc_update_start { - get { - return ResourceManager.GetString("mcc.update.start", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Please use the newly generated MinecraftClient.ini. - /// - internal static string mcc_use_new_config { - get { - return ResourceManager.GetString("mcc.use_new_config", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Using Minecraft version {0} (protocol v{1}). - /// - internal static string mcc_use_version { - get { - return ResourceManager.GetString("mcc.use_version", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Version is supported. - ///Logging in.... - /// - internal static string mcc_version_supported { - get { - return ResourceManager.GetString("mcc.version_supported", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to , with Forge. - /// - internal static string mcc_with_forge { - get { - return ResourceManager.GetString("mcc.with_forge", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Connected to proxy {0}:{1}. - /// - internal static string proxy_connected { - get { - return ResourceManager.GetString("proxy.connected", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Use '{0}quit' to exit Minecraft Console Client.. - /// - internal static string mcc_use_quit_to_exit { - get { - return ResourceManager.GetString("mcc.use_quit_to_exit", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to MCC Debug State. - /// - internal static string cmd_debug_state_header { - get { - return ResourceManager.GetString("cmd.debug.state_header", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Server. - /// - internal static string cmd_debug_state_server { - get { - return ResourceManager.GetString("cmd.debug.state_server", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Username. - /// - internal static string cmd_debug_state_username { - get { - return ResourceManager.GetString("cmd.debug.state_username", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Protocol. - /// - internal static string cmd_debug_state_protocol { - get { - return ResourceManager.GetString("cmd.debug.state_protocol", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to GameMode. - /// - internal static string cmd_debug_state_gamemode { - get { - return ResourceManager.GetString("cmd.debug.state_gamemode", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Health. - /// - internal static string cmd_debug_state_health { - get { - return ResourceManager.GetString("cmd.debug.state_health", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Food. - /// - internal static string cmd_debug_state_food { - get { - return ResourceManager.GetString("cmd.debug.state_food", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Location. - /// - internal static string cmd_debug_state_location { - get { - return ResourceManager.GetString("cmd.debug.state_location", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to TPS. - /// - internal static string cmd_debug_state_tps { - get { - return ResourceManager.GetString("cmd.debug.state_tps", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Console. - /// - internal static string cmd_debug_state_console { - get { - return ResourceManager.GetString("cmd.debug.state_console", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Features. - /// - internal static string cmd_debug_state_features { - get { - return ResourceManager.GetString("cmd.debug.state_features", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Debug. - /// - internal static string cmd_debug_state_debug { - get { - return ResourceManager.GetString("cmd.debug.state_debug", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Bots. - /// - internal static string cmd_debug_state_bots { - get { - return ResourceManager.GetString("cmd.debug.state_bots", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Players. - /// - internal static string cmd_debug_state_players { - get { - return ResourceManager.GetString("cmd.debug.state_players", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} online. - /// - internal static string cmd_debug_state_online { - get { - return ResourceManager.GetString("cmd.debug.state_online", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Open interactive TUI inventory viewer (TUI mode only).. - /// - internal static string cmd_inventory_help_open { - get { - return ResourceManager.GetString("cmd.inventory.help.open", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Interactive TUI is only available in TUI console mode. Use '/inventory <id> list' instead.. - /// - internal static string cmd_inventory_tui_only { - get { - return ResourceManager.GetString("cmd.inventory.tui_only", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to TUI inventory viewer is already running.. - /// - internal static string cmd_inventory_tui_already_running { - get { - return ResourceManager.GetString("cmd.inventory.tui_already_running", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Opening TUI for Inventory #{0}.... - /// - internal static string cmd_inventory_tui_opening { - get { - return ResourceManager.GetString("cmd.inventory.tui_opening", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Inventory dialog opened.. - /// - internal static string cmd_inventory_tui_opened { - get { - return ResourceManager.GetString("cmd.inventory.tui_opened", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to launch TUI inventory viewer.. - /// - internal static string cmd_inventory_tui_launch_failed { - get { - return ResourceManager.GetString("cmd.inventory.tui_launch_failed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to TUI viewer does not support this container type (Inventory #{0}). Use '/inventory {0} list' to view its contents.. - /// - internal static string cmd_inventory_tui_unsupported_container { - get { - return ResourceManager.GetString("cmd.inventory.tui_unsupported_container", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Hold Shift + Left-click to select and copy text.. - /// - internal static string tui_select_copy_hint { - get { - return ResourceManager.GetString("tui.select_copy_hint", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Input cleared. Press Ctrl+C again to quit.. - /// - internal static string tui_ctrlc_input_cleared { - get { - return ResourceManager.GetString("tui.ctrlc_input_cleared", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Press Ctrl+C again to quit MCC.. - /// - internal static string tui_ctrlc_quit_hint { - get { - return ResourceManager.GetString("tui.ctrlc_quit_hint", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to [ Item Info ]. - /// - internal static string tui_inventory_item_info { - get { - return ResourceManager.GetString("tui.inventory.item_info", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to [ Held Item ]. - /// - internal static string tui_inventory_held_item { - get { - return ResourceManager.GetString("tui.inventory.held_item", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to [ Controls ]. - /// - internal static string tui_inventory_controls { - get { - return ResourceManager.GetString("tui.inventory.controls", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to LClick Pick/Place.... - /// - internal static string tui_inventory_controls_help { - get { - return ResourceManager.GetString("tui.inventory.controls_help", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to (empty). - /// - internal static string tui_inventory_cursor_empty { - get { - return ResourceManager.GetString("tui.inventory.cursor_empty", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Off. - /// - internal static string tui_inventory_offhand { - get { - return ResourceManager.GetString("tui.inventory.offhand", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Out. - /// - internal static string tui_inventory_output { - get { - return ResourceManager.GetString("tui.inventory.output", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Hd. - /// - internal static string tui_inventory_equip_head { - get { - return ResourceManager.GetString("tui.inventory.equip_head", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Bd. - /// - internal static string tui_inventory_equip_body { - get { - return ResourceManager.GetString("tui.inventory.equip_body", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Lg. - /// - internal static string tui_inventory_equip_legs { - get { - return ResourceManager.GetString("tui.inventory.equip_legs", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Ft. - /// - internal static string tui_inventory_equip_feet { - get { - return ResourceManager.GetString("tui.inventory.equip_feet", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Hover over a slot to see item details.. - /// - internal static string tui_inventory_hover_hint { - get { - return ResourceManager.GetString("tui.inventory.hover_hint", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to (Empty). - /// - internal static string tui_inventory_slot_empty { - get { - return ResourceManager.GetString("tui.inventory.slot_empty", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Slot #{0} Count: {1}. - /// - internal static string tui_inventory_slot_detail { - get { - return ResourceManager.GetString("tui.inventory.slot_detail", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Durability. - /// - internal static string tui_inventory_durability { - get { - return ResourceManager.GetString("tui.inventory.durability", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Container not found. - /// - internal static string tui_inventory_container_not_found { - get { - return ResourceManager.GetString("tui.inventory.container_not_found", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Inventory #{0} - {1}. - /// - internal static string tui_inventory_title { - get { - return ResourceManager.GetString("tui.inventory.title", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} items. - /// - internal static string tui_inventory_item_count { - get { - return ResourceManager.GetString("tui.inventory.item_count", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Press Esc to close. Refreshes automatically.. - /// - internal static string tui_tab_hint { - get { - return ResourceManager.GetString("tui.tab.hint", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to You're now under {0} effect (Duration: {1}).. - /// - internal static string bot_effect_gained { - get { - return ResourceManager.GetString("bot.effect.gained", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Effect {0} has expired. - /// - internal static string bot_effect_expired { - get { - return ResourceManager.GetString("bot.effect.expired", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Unlimited. - /// - internal static string effect_duration_unlimited { - get { - return ResourceManager.GetString("effect.duration.unlimited", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to a. - /// - internal static string effect_article_a { - get { - return ResourceManager.GetString("effect.article.a", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to an. - /// - internal static string effect_article_an { - get { - return ResourceManager.GetString("effect.article.an", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}h. - /// - internal static string effect_duration_short_hours { - get { - return ResourceManager.GetString("effect.duration.short.hours", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}h {1}m. - /// - internal static string effect_duration_short_hours_minutes { - get { - return ResourceManager.GetString("effect.duration.short.hours_minutes", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}m. - /// - internal static string effect_duration_short_minutes { - get { - return ResourceManager.GetString("effect.duration.short.minutes", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}m {1}s. - /// - internal static string effect_duration_short_minutes_seconds { - get { - return ResourceManager.GetString("effect.duration.short.minutes_seconds", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0}s. - /// - internal static string effect_duration_short_seconds { - get { - return ResourceManager.GetString("effect.duration.short.seconds", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to ∞. - /// - internal static string effect_duration_short_unlimited { - get { - return ResourceManager.GetString("effect.duration.short.unlimited", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} {1}. - /// - internal static string effect_name_with_amplifier { - get { - return ResourceManager.GetString("effect.name.with_amplifier", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Container. - /// - internal static string tui_container_label { - get { - return ResourceManager.GetString("tui.container.label", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Input. - /// - internal static string tui_furnace_input { - get { - return ResourceManager.GetString("tui.furnace.input", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Fuel. - /// - internal static string tui_furnace_fuel { - get { - return ResourceManager.GetString("tui.furnace.fuel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Output. - /// - internal static string tui_furnace_output { - get { - return ResourceManager.GetString("tui.furnace.output", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Item. - /// - internal static string tui_enchanting_item { - get { - return ResourceManager.GetString("tui.enchanting.item", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Lapis. - /// - internal static string tui_enchanting_lapis { - get { - return ResourceManager.GetString("tui.enchanting.lapis", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Enchant Options. - /// - internal static string tui_enchanting_options { - get { - return ResourceManager.GetString("tui.enchanting.options", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Option {0}. - /// - internal static string tui_enchanting_option_slot { - get { - return ResourceManager.GetString("tui.enchanting.option_slot", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Fuel. - /// - internal static string tui_brewing_fuel { - get { - return ResourceManager.GetString("tui.brewing.fuel", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Ingredient. - /// - internal static string tui_brewing_ingredient { - get { - return ResourceManager.GetString("tui.brewing.ingredient", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Bottle {0}. - /// - internal static string tui_brewing_bottle { - get { - return ResourceManager.GetString("tui.brewing.bottle", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Input 1. - /// - internal static string tui_grindstone_input1 { - get { - return ResourceManager.GetString("tui.grindstone.input1", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Input 2. - /// - internal static string tui_grindstone_input2 { - get { - return ResourceManager.GetString("tui.grindstone.input2", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Crafting. - /// - internal static string tui_crafting_grid { - get { - return ResourceManager.GetString("tui.crafting.grid", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Starting embedded MCP server.... - /// - internal static string bot_mcpserver_starting { - get { - return ResourceManager.GetString("bot.mcpserver.starting", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Embedded MCP server started on {0}. - /// - internal static string bot_mcpserver_started { - get { - return ResourceManager.GetString("bot.mcpserver.started", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to start embedded MCP server: {0}. - /// - internal static string bot_mcpserver_start_failed { - get { - return ResourceManager.GetString("bot.mcpserver.start_failed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Embedded MCP auth token is required but environment variable {0} is empty.. - /// - internal static string bot_mcpserver_missing_auth_token { - get { - return ResourceManager.GetString("bot.mcpserver.missing_auth_token", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Embedded MCP server stopped.. - /// - internal static string bot_mcpserver_stopped { - get { - return ResourceManager.GetString("bot.mcpserver.stopped", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Failed to stop embedded MCP server cleanly: {0}. - /// - internal static string bot_mcpserver_stop_failed { - get { - return ResourceManager.GetString("bot.mcpserver.stop_failed", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Toggle the TUI minimap overlay, or adjust its zoom level.. - /// - internal static string cmd_minimap_desc { - get { - return ResourceManager.GetString("cmd.minimap.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Minimap enabled.. - /// - internal static string cmd_minimap_enabled { - get { - return ResourceManager.GetString("cmd.minimap.enabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Minimap disabled.. - /// - internal static string cmd_minimap_disabled { - get { - return ResourceManager.GetString("cmd.minimap.disabled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Minimap zoom set to {0}:1 (blocks per pixel).. - /// - internal static string cmd_minimap_zoom_set { - get { - return ResourceManager.GetString("cmd.minimap.zoom_set", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Current minimap zoom: {0}:1 blocks/px (range 1-{1}).. - /// - internal static string cmd_minimap_zoom_current { - get { - return ResourceManager.GetString("cmd.minimap.zoom_current", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to The minimap command is only available in TUI mode.. - /// - internal static string cmd_minimap_tui_only { - get { - return ResourceManager.GetString("cmd.minimap.tui_only", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Hostile. - /// - internal static string tui_minimap_legend_hostile { - get { - return ResourceManager.GetString("tui.minimap.legend.hostile", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Passive. - /// - internal static string tui_minimap_legend_passive { - get { - return ResourceManager.GetString("tui.minimap.legend.passive", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Neutral. - /// - internal static string tui_minimap_legend_neutral { - get { - return ResourceManager.GetString("tui.minimap.legend.neutral", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Player. - /// - internal static string tui_minimap_legend_player { - get { - return ResourceManager.GetString("tui.minimap.legend.player", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Name display -- Players: {0}, Hostile: {1}, Neutral: {2}, Passive: {3}. - /// - internal static string cmd_minimap_names_status { - get { - return ResourceManager.GetString("cmd.minimap.names_status", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to All entity name labels enabled.. - /// - internal static string cmd_minimap_names_all_on { - get { - return ResourceManager.GetString("cmd.minimap.names_all_on", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to All entity name labels disabled.. - /// - internal static string cmd_minimap_names_all_off { - get { - return ResourceManager.GetString("cmd.minimap.names_all_off", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} name display: {1}. - /// - internal static string cmd_minimap_names_cat { - get { - return ResourceManager.GetString("cmd.minimap.names_cat", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} name display set to {1}.. - /// - internal static string cmd_minimap_names_cat_set { - get { - return ResourceManager.GetString("cmd.minimap.names_cat_set", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Current minimap position: {0}. - /// - internal static string cmd_minimap_position_current { - get { - return ResourceManager.GetString("cmd.minimap.position_current", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Minimap position set to: {0}. - /// - internal static string cmd_minimap_position_set { - get { - return ResourceManager.GetString("cmd.minimap.position_set", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Current cave mode: {0}. - /// - internal static string cmd_minimap_cave_current { - get { - return ResourceManager.GetString("cmd.minimap.cave_current", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Cave mode set to: {0}. - /// - internal static string cmd_minimap_cave_set { - get { - return ResourceManager.GetString("cmd.minimap.cave_set", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to list achievements/advancements from the server.. - /// - internal static string cmd_achievement_desc { - get { - return ResourceManager.GetString("cmd.achievement.desc", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No achievements/advancements received yet.. - /// - internal static string cmd_achievement_none { - get { - return ResourceManager.GetString("cmd.achievement.none", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No completed achievements/advancements.. - /// - internal static string cmd_achievement_none_unlocked { - get { - return ResourceManager.GetString("cmd.achievement.none_unlocked", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to No incomplete achievements/advancements.. - /// - internal static string cmd_achievement_none_locked { - get { - return ResourceManager.GetString("cmd.achievement.none_locked", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Achievements/Advancements:. - /// - internal static string cmd_achievement_header { - get { - return ResourceManager.GetString("cmd.achievement.header", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Completed achievements/advancements:. - /// - internal static string cmd_achievement_header_unlocked { - get { - return ResourceManager.GetString("cmd.achievement.header_unlocked", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to Incomplete achievements/advancements:. - /// - internal static string cmd_achievement_header_locked { - get { - return ResourceManager.GetString("cmd.achievement.header_locked", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to [DONE]. - /// - internal static string cmd_achievement_done { - get { - return ResourceManager.GetString("cmd.achievement.done", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to [TODO]. - /// - internal static string cmd_achievement_todo { - get { - return ResourceManager.GetString("cmd.achievement.todo", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} {1} ({2}) [{3}]. - /// - internal static string cmd_achievement_entry_titled { - get { - return ResourceManager.GetString("cmd.achievement.entry_titled", resourceCulture); - } - } - - /// - /// Looks up a localized string similar to {0} {1} [{2}]. - /// - internal static string cmd_achievement_entry { - get { - return ResourceManager.GetString("cmd.achievement.entry", resourceCulture); - } - } - internal static string cmd_book_usage { - get { return ResourceManager.GetString("cmd.book.usage", resourceCulture); } - } - - internal static string cmd_book_desc { - get { return ResourceManager.GetString("cmd.book.desc", resourceCulture); } - } - - internal static string cmd_book_help_read { - get { return ResourceManager.GetString("cmd.book.help_read", resourceCulture); } - } - - internal static string cmd_book_help_write { - get { return ResourceManager.GetString("cmd.book.help_write", resourceCulture); } - } - - internal static string cmd_book_help_edit { - get { return ResourceManager.GetString("cmd.book.help_edit", resourceCulture); } - } - - internal static string cmd_book_help_sign { - get { return ResourceManager.GetString("cmd.book.help_sign", resourceCulture); } - } - - internal static string cmd_book_not_holding_book { - get { return ResourceManager.GetString("cmd.book.not_holding_book", resourceCulture); } - } - - internal static string cmd_book_not_holding_writable { - get { return ResourceManager.GetString("cmd.book.not_holding_writable", resourceCulture); } - } - - internal static string cmd_book_already_signed { - get { return ResourceManager.GetString("cmd.book.already_signed", resourceCulture); } - } - - internal static string cmd_book_cannot_edit_signed { - get { return ResourceManager.GetString("cmd.book.cannot_edit_signed", resourceCulture); } - } - - internal static string cmd_book_tui_opened { - get { return ResourceManager.GetString("cmd.book.tui_opened", resourceCulture); } - } - - internal static string cmd_book_tui_required { - get { return ResourceManager.GetString("cmd.book.tui_required", resourceCulture); } - } - - internal static string cmd_book_write_sent { - get { return ResourceManager.GetString("cmd.book.write_sent", resourceCulture); } - } - - internal static string cmd_book_edit_sent { - get { return ResourceManager.GetString("cmd.book.edit_sent", resourceCulture); } - } - - internal static string cmd_book_sign_sent { - get { return ResourceManager.GetString("cmd.book.sign_sent", resourceCulture); } - } - - internal static string cmd_book_write_failed { - get { return ResourceManager.GetString("cmd.book.write_failed", resourceCulture); } - } - - internal static string cmd_book_file_not_found { - get { return ResourceManager.GetString("cmd.book.file_not_found", resourceCulture); } - } - - internal static string cmd_book_page_out_of_range { - get { return ResourceManager.GetString("cmd.book.page_out_of_range", resourceCulture); } - } - - internal static string cmd_book_too_many_pages { - get { return ResourceManager.GetString("cmd.book.too_many_pages", resourceCulture); } - } - - internal static string cmd_book_page_too_long { - get { return ResourceManager.GetString("cmd.book.page_too_long", resourceCulture); } - } - - internal static string cmd_book_title_invalid { - get { return ResourceManager.GetString("cmd.book.title_invalid", resourceCulture); } - } - - internal static string cmd_book_header_signed { - get { return ResourceManager.GetString("cmd.book.header_signed", resourceCulture); } - } - - internal static string cmd_book_header_writable { - get { return ResourceManager.GetString("cmd.book.header_writable", resourceCulture); } - } - - internal static string cmd_book_page_header { - get { return ResourceManager.GetString("cmd.book.page_header", resourceCulture); } - } - - internal static string tui_book_title_watermark { - get { return ResourceManager.GetString("tui.book.title_watermark", resourceCulture); } - } - - internal static string tui_book_prev { - get { return ResourceManager.GetString("tui.book.prev", resourceCulture); } - } - - internal static string tui_book_next { - get { return ResourceManager.GetString("tui.book.next", resourceCulture); } - } - - internal static string tui_book_insert { - get { return ResourceManager.GetString("tui.book.insert", resourceCulture); } - } - - internal static string tui_book_delete { - get { return ResourceManager.GetString("tui.book.delete", resourceCulture); } - } - - internal static string tui_book_save { - get { return ResourceManager.GetString("tui.book.save", resourceCulture); } - } - - internal static string tui_book_sign { - get { return ResourceManager.GetString("tui.book.sign", resourceCulture); } - } - - internal static string tui_book_close { - get { return ResourceManager.GetString("tui.book.close", resourceCulture); } - } - - internal static string tui_book_saved { - get { return ResourceManager.GetString("tui.book.saved", resourceCulture); } - } - - internal static string tui_book_save_failed { - get { return ResourceManager.GetString("tui.book.save_failed", resourceCulture); } - } - - internal static string tui_book_signed { - get { return ResourceManager.GetString("tui.book.signed", resourceCulture); } - } - - internal static string tui_book_page_header { - get { return ResourceManager.GetString("tui.book.page_header", resourceCulture); } - } - - internal static string tui_book_editing { - get { return ResourceManager.GetString("tui.book.editing", resourceCulture); } - } - - internal static string tui_book_reading { - get { return ResourceManager.GetString("tui.book.reading", resourceCulture); } - } - - internal static string tui_book_edit_shortcut_tip { - get { return ResourceManager.GetString("tui.book.edit_shortcut_tip", resourceCulture); } - } - - internal static string tui_book_page_shortcut_tip { - get { return ResourceManager.GetString("tui.book.page_shortcut_tip", resourceCulture); } - } - - internal static string debug_packet_incoming { - get { return ResourceManager.GetString("debug.packet.incoming", resourceCulture); } - } - - internal static string debug_packet_outgoing { - get { return ResourceManager.GetString("debug.packet.outgoing", resourceCulture); } - } - - internal static string debug_packet_state_change { - get { return ResourceManager.GetString("debug.packet.state_change", resourceCulture); } - } - - internal static string debug_packet_unknown_type { - get { return ResourceManager.GetString("debug.packet.unknown_type", resourceCulture); } - } - - internal static string debug_packet_compression_disabled { - get { return ResourceManager.GetString("debug.packet.compression.disabled", resourceCulture); } - } - - internal static string debug_packet_compression_uncompressed { - get { return ResourceManager.GetString("debug.packet.compression.uncompressed", resourceCulture); } - } - - internal static string debug_packet_compression_compressed { - get { return ResourceManager.GetString("debug.packet.compression.compressed", resourceCulture); } - } - - internal static string debug_packet_loop_exit { - get { return ResourceManager.GetString("debug.packet.loop_exit", resourceCulture); } - } - - internal static string debug_packet_loop_reason_queue_completed { - get { return ResourceManager.GetString("debug.packet.loop_reason.queue_completed", resourceCulture); } - } - - internal static string debug_packet_loop_reason_socket_closed { - get { return ResourceManager.GetString("debug.packet.loop_reason.socket_closed", resourceCulture); } - } - - internal static string debug_packet_loop_reason_cancelled { - get { return ResourceManager.GetString("debug.packet.loop_reason.cancelled", resourceCulture); } - } - - internal static string cmd_dialog_usage { - get { return ResourceManager.GetString("cmd.dialog.usage", resourceCulture); } - } - - internal static string cmd_dialog_desc { - get { return ResourceManager.GetString("cmd.dialog.desc", resourceCulture); } - } - - internal static string dialog_received { - get { return ResourceManager.GetString("dialog.received", resourceCulture); } - } - - internal static string dialog_cleared { - get { return ResourceManager.GetString("dialog.cleared", resourceCulture); } - } - - internal static string dialog_none { - get { return ResourceManager.GetString("dialog.none", resourceCulture); } - } - - internal static string dialog_dismissed { - get { return ResourceManager.GetString("dialog.dismissed", resourceCulture); } - } - - internal static string dialog_unresolved_title { - get { return ResourceManager.GetString("dialog.unresolved_title", resourceCulture); } - } - - internal static string dialog_unresolved_body { - get { return ResourceManager.GetString("dialog.unresolved_body", resourceCulture); } - } - - internal static string dialog_unresolved_action_disabled { - get { return ResourceManager.GetString("dialog.unresolved_action_disabled", resourceCulture); } - } - - internal static string dialog_input_unknown { - get { return ResourceManager.GetString("dialog.input_unknown", resourceCulture); } - } - - internal static string dialog_input_set { - get { return ResourceManager.GetString("dialog.input_set", resourceCulture); } - } - - internal static string dialog_input_too_long { - get { return ResourceManager.GetString("dialog.input_too_long", resourceCulture); } - } - - internal static string dialog_input_boolean_invalid { - get { return ResourceManager.GetString("dialog.input_boolean_invalid", resourceCulture); } - } - - internal static string dialog_input_option_invalid { - get { return ResourceManager.GetString("dialog.input_option_invalid", resourceCulture); } - } - - internal static string dialog_input_number_invalid { - get { return ResourceManager.GetString("dialog.input_number_invalid", resourceCulture); } - } - - internal static string dialog_input_number_range_invalid { - get { return ResourceManager.GetString("dialog.input_number_range_invalid", resourceCulture); } - } - - internal static string dialog_action_unknown { - get { return ResourceManager.GetString("dialog.action_unknown", resourceCulture); } - } - - internal static string dialog_action_label_unknown { - get { return ResourceManager.GetString("dialog.action_label_unknown", resourceCulture); } - } - - internal static string dialog_action_label_ambiguous { - get { return ResourceManager.GetString("dialog.action_label_ambiguous", resourceCulture); } - } - - internal static string dialog_cannot_cancel { - get { return ResourceManager.GetString("dialog.cannot_cancel", resourceCulture); } - } - - internal static string dialog_action_closed { - get { return ResourceManager.GetString("dialog.action_closed", resourceCulture); } - } - - internal static string dialog_action_command_not_in_play { - get { return ResourceManager.GetString("dialog.action_command_not_in_play", resourceCulture); } - } - - internal static string dialog_action_invalid { - get { return ResourceManager.GetString("dialog.action_invalid", resourceCulture); } - } - - internal static string dialog_action_custom_failed { - get { return ResourceManager.GetString("dialog.action_custom_failed", resourceCulture); } - } - - internal static string dialog_action_command_sent { - get { return ResourceManager.GetString("dialog.action_command_sent", resourceCulture); } - } - - internal static string dialog_action_custom_sent { - get { return ResourceManager.GetString("dialog.action_custom_sent", resourceCulture); } - } - - internal static string dialog_action_nested_opened { - get { return ResourceManager.GetString("dialog.action_nested_opened", resourceCulture); } - } - - internal static string dialog_action_open_url { - get { return ResourceManager.GetString("dialog.action_open_url", resourceCulture); } - } - - internal static string dialog_action_suggest_command { - get { return ResourceManager.GetString("dialog.action_suggest_command", resourceCulture); } - } - - internal static string dialog_action_copy { - get { return ResourceManager.GetString("dialog.action_copy", resourceCulture); } - } - - internal static string dialog_action_unsupported { - get { return ResourceManager.GetString("dialog.action_unsupported", resourceCulture); } - } - - internal static string dialog_tui_pending { - get { return ResourceManager.GetString("dialog.tui_pending", resourceCulture); } - } - - internal static string dialog_tui_unavailable { - get { return ResourceManager.GetString("dialog.tui_unavailable", resourceCulture); } - } - - internal static string dialog_tui_opened { - get { return ResourceManager.GetString("dialog.tui_opened", resourceCulture); } - } - - internal static string dialog_action_unnamed { - get { return ResourceManager.GetString("dialog.action_unnamed", resourceCulture); } - } - - internal static string dialog_action_ok { - get { return ResourceManager.GetString("dialog.action_ok", resourceCulture); } - } - - internal static string dialog_item_body { - get { return ResourceManager.GetString("dialog.item_body", resourceCulture); } - } - - internal static string dialog_server_link_report_bug { - get { return ResourceManager.GetString("dialog.server_link.report_bug", resourceCulture); } - } - - internal static string dialog_server_link_community_guidelines { - get { return ResourceManager.GetString("dialog.server_link.community_guidelines", resourceCulture); } - } - - internal static string dialog_server_link_support { - get { return ResourceManager.GetString("dialog.server_link.support", resourceCulture); } - } - - internal static string dialog_server_link_status { - get { return ResourceManager.GetString("dialog.server_link.status", resourceCulture); } - } - - internal static string dialog_server_link_feedback { - get { return ResourceManager.GetString("dialog.server_link.feedback", resourceCulture); } - } - - internal static string dialog_server_link_community { - get { return ResourceManager.GetString("dialog.server_link.community", resourceCulture); } - } - - internal static string dialog_server_link_website { - get { return ResourceManager.GetString("dialog.server_link.website", resourceCulture); } - } - - internal static string dialog_server_link_forums { - get { return ResourceManager.GetString("dialog.server_link.forums", resourceCulture); } - } - - internal static string dialog_server_link_news { - get { return ResourceManager.GetString("dialog.server_link.news", resourceCulture); } - } - - internal static string dialog_server_link_announcements { - get { return ResourceManager.GetString("dialog.server_link.announcements", resourceCulture); } - } - - internal static string tui_dialog_cancel { - get { return ResourceManager.GetString("tui.dialog.cancel", resourceCulture); } - } - - internal static string dialog_render_header { - get { return ResourceManager.GetString("dialog.render.header", resourceCulture); } - } - - internal static string dialog_render_type { - get { return ResourceManager.GetString("dialog.render.type", resourceCulture); } - } - - internal static string dialog_render_body { - get { return ResourceManager.GetString("dialog.render.body", resourceCulture); } - } - - internal static string dialog_render_inputs { - get { return ResourceManager.GetString("dialog.render.inputs", resourceCulture); } - } - - internal static string dialog_render_input { - get { return ResourceManager.GetString("dialog.render.input", resourceCulture); } - } - - internal static string dialog_render_actions { - get { return ResourceManager.GetString("dialog.render.actions", resourceCulture); } - } - - internal static string dialog_render_action { - get { return ResourceManager.GetString("dialog.render.action", resourceCulture); } - } - - internal static string dialog_render_cancel_hint { - get { return ResourceManager.GetString("dialog.render.cancel_hint", resourceCulture); } - } - - internal static string dialog_input_desc_text { - get { return ResourceManager.GetString("dialog.input_desc_text", resourceCulture); } - } - - internal static string dialog_input_desc_boolean { - get { return ResourceManager.GetString("dialog.input_desc_boolean", resourceCulture); } - } - - internal static string dialog_input_desc_options { - get { return ResourceManager.GetString("dialog.input_desc_options", resourceCulture); } - } - - internal static string dialog_input_desc_number { - get { return ResourceManager.GetString("dialog.input_desc_number", resourceCulture); } - } - - internal static string dialog_input_desc_unknown { - get { return ResourceManager.GetString("dialog.input_desc_unknown", resourceCulture); } - } - - internal static string dialog_action_desc_close { - get { return ResourceManager.GetString("dialog.action_desc_close", resourceCulture); } - } - - internal static string dialog_action_desc_command { - get { return ResourceManager.GetString("dialog.action_desc_command", resourceCulture); } - } - - internal static string dialog_action_desc_custom { - get { return ResourceManager.GetString("dialog.action_desc_custom", resourceCulture); } - } - - internal static string dialog_action_desc_show_dialog { - get { return ResourceManager.GetString("dialog.action_desc_show_dialog", resourceCulture); } - } - - internal static string dialog_action_desc_open_url { - get { return ResourceManager.GetString("dialog.action_desc_open_url", resourceCulture); } - } - - internal static string dialog_action_desc_suggest { - get { return ResourceManager.GetString("dialog.action_desc_suggest", resourceCulture); } - } - - internal static string dialog_action_desc_copy { - get { return ResourceManager.GetString("dialog.action_desc_copy", resourceCulture); } - } - - internal static string dialog_action_desc_unknown { - get { return ResourceManager.GetString("dialog.action_desc_unknown", resourceCulture); } - } - - internal static string dialog_type_notice { - get { return ResourceManager.GetString("dialog.type.notice", resourceCulture); } - } - - internal static string dialog_type_confirmation { - get { return ResourceManager.GetString("dialog.type.confirmation", resourceCulture); } - } - - internal static string dialog_type_multi_action { - get { return ResourceManager.GetString("dialog.type.multi_action", resourceCulture); } - } - - internal static string dialog_type_dialog_list { - get { return ResourceManager.GetString("dialog.type.dialog_list", resourceCulture); } - } - - internal static string dialog_type_server_links { - get { return ResourceManager.GetString("dialog.type.server_links", resourceCulture); } - } - - internal static string dialog_type_unknown { - get { return ResourceManager.GetString("dialog.type.unknown", resourceCulture); } - } - - internal static string dialog_input_kind_text { - get { return ResourceManager.GetString("dialog.input_kind.text", resourceCulture); } - } - - internal static string dialog_input_kind_boolean { - get { return ResourceManager.GetString("dialog.input_kind.boolean", resourceCulture); } - } - - internal static string dialog_input_kind_options { - get { return ResourceManager.GetString("dialog.input_kind.options", resourceCulture); } - } - - internal static string dialog_input_kind_number { - get { return ResourceManager.GetString("dialog.input_kind.number", resourceCulture); } - } - - internal static string dialog_input_kind_unknown { - get { return ResourceManager.GetString("dialog.input_kind.unknown", resourceCulture); } - } - - internal static string dialog_render_help_hint { - get { return ResourceManager.GetString("dialog.render.help_hint", resourceCulture); } - } - - internal static string protocol_chat_raw_message { - get { return ResourceManager.GetString("protocol.chat.raw_message", resourceCulture); } - } - - } -} diff --git a/MinecraftClient/Resources/Translations/Translations.resx b/MinecraftClient/Resources/Translations/Translations.resx deleted file mode 100644 index 117e58067a..0000000000 --- a/MinecraftClient/Resources/Translations/Translations.resx +++ /dev/null @@ -1,3133 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - Weather change: It is no longer raining. - - - Weather change: It is no longer a thunderstorm. - - - Weather change: It is raining now. - - - Weather change: It is a thunderstorm. - - - Invalid walk range provided, must be a positive integer greater than 0, using default value of 5! - - - The terrain handling is not enabled in the settings of the client, enable it if you want to use it with this bot. Using alternative (command) method. - - - The time range begins with a bigger value, swapped them around. - - - Attack cooldown value cannot be smaller than 0. - - - Crafting aborted! Check your available materials. - - - Auto-crafting ChatBot command alias - - - Available commands: {0}. Use /autocraft help <cmd name> for more information. - - - Inventory #{0} was closed by AutoCraft - - - Auto-crafting ChatBot command - - - Total {0} recipes loaded: {1} - - - Crafting failed! Waiting for more materials - - - Duplicate recipe name specified: {0} - - - Missing recipe name while parsing a recipe - - - Get the command description. Usage: /autocraft help <command name> - - - List available recipes. - - - Load the config file. - - - Reload the config file. - - - Write the default example config to default location. - - - Start the crafting. Usage: /autocraft start <recipe name> - - - Stop the current running crafting process - - - Invalid result item! - - - The number of slots does not match and has been adjusted automatically. - - - Missing material: {0} - - - Please specify the recipe name you want to craft. - - - Specified recipe name does not exist. Check your config file. - - - Starting AutoCraft: {0} - - - AutoCraft cannot be started. Check your available materials for crafting {0} - - - AutoCraft stopped - - - table not found - - - Action timeout! Reason: {0} - - - Available commands: {0}. Use /autodig help <cmd name> for more information. - - - Auto-digging ChatBot command - - - Digging block timeout, retry. - - - Get the command description. Usage: /autodig help <command name> - - - Start the automatic digging bot. - - - Deactivate the automatic digging bot. - - - The block currently pointed to is not in the allowed list. - - - Inventory handling is not enabled. Unable to switch tools automatically. - - - Dropped low durability {0} from slot {1}. - - - Automatic digging has started. - - - Digging will start in {0:0.0} second(s). - - - Auto-digging has been stopped. - - - Switch to {0} from slot {1}. - - - Added item {0} - - - AutoDrop ChatBot command alias - - - AutoDrop ChatBot command - - - Incorrect item name {0}. Please try again. - - - Total {0} in the list: - {1} - - - Item not in the list - - - Cannot find inventory {0}! - - - No item in the list - - - Cannot read drop mode from config. Using include mode. - - - AutoDrop disabled - - - AutoDrop enabled - - - Removed item {0} - - - Switched to {0} mode. - - - Unknwon mode. Available modes: Include, Exclude, Everything - - - Available commands: {0}. Use /fish help <cmd name> for more information. - - - Casting timeout and will soon retry. (Timeout increased to {0:0.0} sec). - - - Retract the fishing rod. (Count: {0}) - - - Retract the fishing rod at ({0:0.0},{1:0.0},{2:0.0})! (Count: {3}) - - - Auto-Fishing ChatBot command - - - Fish floating despawn, will re-cast. - - - Fishing timeout, will soon re-cast. - - - Fishing got {0} - - - Get the command description. Usage: /fish help <command name> - - - Start auto-fishing. - - - List all obtained items. Or use "/fish status clear" to clear the list. - - - Stop auto-fishing. - - - Inventory handling is not enabled. Cannot check rod durability and switch rods. - - - Current fishing rod is not available. Maybe broken or low durability? - - - Start auto-fishing. - - - Fishing will start in {0:0.0} second(s). - - - The record of the obtained items has been cleared. - - - All items obtained from fishing (not entirely accurate): - - - Stop auto-fishing. - - - Switch to the rod in slot {0}, durability {1}/64. - - - Casting successfully. - - - Update yaw = {0:0.00}, pitch = {1:0.00}. - - - Current directory was: {0} - - - Got disconnected with message: {0} - - - Disconnection initiated by User or MCC bot. Ignoring. - - - Launching with {0} reconnection attempts - - - Initializing without a kick message file - - - Message contains '{0}'. Reconnecting. - - - Ignoring kick message, reconnecting anyway. - - - Message not containing any defined keywords. Ignoring. - - - Waiting {0:0.000} seconds before reconnecting... - - - Waiting {0:0.000} seconds before reconnecting... ({1} retries left) - - - unlimited - - - File not found: '{0}' - - - Loaded match: -{0} - - - Loading matches from '{0}' - - - match: {0} -regex: {1} -action: {2} -actionPrivate: {3} -actionOther: {4} -ownersOnly: {5} -cooldown: {6} - - - Running action: {0} - - - No action for match: -{0} - - - This match will never trigger: -{0} - - - Path '{0}' contains invalid characters. - - - Sending message to Discord was canceled due an error occuring. For more info enable Debug. - - - The provided channel with an id '{0}' has not been found! - - - The command was executed with the result - - - Succesfully connected with MCC! - - - This command allows you to specify in the which direction the messages will be relayed via the Discord Bridge chat bot. - - - Direction of the Discord Brdige has been switched to '{0}'! - - - Both - - - Discord - - - Minecraft - - - Successfully disconnected with MCC! - - - The provided guild/server with an id '{0}' has not been found! - - - Invalid direction provided! Available directions: both|b, minecraft|mc, discord|dsc. Example: "dscbridge direction mc" - - - Please provide a valid token! - - - An unknown error has occured! - - - Please provide a valid Discord Application ID! Get one at https://discord.com/developers/applications - - - Connected to Discord as {0} - - - Failed to connect to Discord (pipe {0}). Is Discord running? - - - Discord Rich Presence initialized successfully. - - - Failed to initialize Discord Rich Presence: {0} - - - Error updating Discord presence: {0} - - - Invalid update interval, must be at least 1 second. Using default of 10 seconds. - - - The bot is already farming! - - - The bot has already stopped farming! - - - Crop type - - - {0} is only available in Minecraft {1} and newer! - - - Farming bot - - - Invalid crop type provided (Types which you can use: Beetroot, Carrot, Melon, Netherwart, Pumpkin, Potato, Wheat)! - - - Invalid radius provided, you must provide a valid integer number greater than 0! - - - The Farmer bot needs Inventory Handling in order to work, please enable it! - - - The Farmer bot needs Terrain Handling in order to work, please enable it! - - - Not implemented below 1.8! - - - Radius - - - Started farming! - - - Stopped farming! - - - Stoping farming, this might take a second... - - - You have enabled teleporting, this might get your bot account kicked and in the worst case scenario banned! Use with caution! - - - You have enabled un-safe movement, the bot might get hurt! - - - Invalid parameter "{0}" provided (Use format: "key:value")! - - - mailer command - - - --- Ignore list --- -{0} - - - --- Mails in database --- -{0} - - - See usage - - - Added {0} to the ignore list! - - - Missing or invalid name. Usage: {0} <username> - - - Removed {0} from the ignore list! - - - Creating new database file: {0} - - - Creating new ignore list: {0} - - - Delivered: {0} - - - Initializing Mailer with settings: - - -  - Database File: {0} - - -  - Max Database Size: {0} - - -  - Ignore List: {0} - - -  - Mail Retention: {0} - - -  - Max Mails per Player: {0} - - -  - Public Interactions: {0} - - - Cannot enable Mailer: Max Database Size must be greater than zero. Please review the settings. - - - Cannot enable Mailer: Mail Retention must be greater than zero. Please review the settings. - - - Cannot enable Mailer: Max Mails per Player must be greater than zero. Please review the settings. - - - Loading database file: {0} - - - Loading ignore list: - - - Looking for mails to send @ {0} - - - Saving message: {0} - - - {0} is ignored! - - - Render maps (item maps) - - - Invalid ID provided, must be a number! - - - A map with id '{0}' does not exists! - - - Failed to render the map with id: '{0}' - - - - Map id: {0} (Last Updated: {1}) - - - No maps received! - - - The list of received maps from the server: - - - Received a new Map, with Id: {0} - - - Succesfully rendered a map with id '{0}' to: '{1}' - - - Resized the rendered image of the map with id: '{0}' to {1}x{1}. - - - The size of the map is reduced from ({0}x{1}) to ({2}x{3}) due to the size limitation of the current terminal. - - - Sent a rendered image of a map with an id '{0}' to the Discord via Discord Brdige chat bot! - - - Sent a rendered image of a map with an id '{0}' to the Telegram via Telegram Bridge chat bot! - - - Map #{0} ({1}x{2}) [{3}%] - - - Scroll=Zoom Drag=Pan +/-=Zoom Arrows=Pan Esc/E=Close - - - replay command - - - Replay file created. - - - Record was stopped. Restart the program to start another record. - - - Record stopped. - - - Script '{0}' failed to run ({1}). - - - File not found: '{0}' - - - [MCC] [{0}] Cannot find script file: {1} - - - Script '{0}' loaded. - - - Error in {0} at line {1}, column {2}: [{3}] {4} - - - Error in {0}: [{1}] {2} - - - [Script] Compilation failed with error(s): - - - [Script] Starting compilation for {0}... - - - [Script] Compilation done with no errors. - - - Loaded task: -{0} - - - No action for task: -{0} - - - This task will never trigger: -{0} - - - Interval / Running action: {0} - - - Login / Running action: {0} - - - Time / Running action: {0} - - - triggeronfirstlogin: {0} - triggeronlogin: {1} - triggerontime: {2} - triggeroninterval: {3} - timevalue: {4} - timeinterval: {5} - action: {6} - - - Sending message to Telegram was canceled due an error occuring. For more info enable Debug. - - - The command was executed with the result - - - Succesfully connected with the MCC! - - - This command allows you to specify in the which direction the messages will be relayed via the Telegram Bridge chat bot. - - - Direction of the Telegram Brdige has been switched to '{0}'! - - - Both - - - Minecraft - - - Telegram - - - Disconnected from from the MCC! - - - Invalid direction provided! Available directions: both|b, minecraft|mc, telegram|tg|t. Example: "tgbridge direction mc" - - - [WARNING] You have not provided any Channel IDs, for "Authorized_Chat_Ids" field, anyone who finds your bot will be able to send messages and commands to it! - - - [WARNING] You have not provided a Channel ID, you will ONLY get replies to commands sent from Telegram! - - - Please provide a valid bot token! - - - **🛑 Unauthorized access! 🛑 - -Add the ID of this chat to "Authorized_Chat_Ids" field in the configuration file to gain access!** - - - An unknown error has occured! - - - Bot: {0} said : {1} - - - Bot: {0} told me : {1} - - - Alerts - - - AntiAFK - - - AutoAttack - - - AutoCraft - - - AutoDig - - - AutoDrop - - - AutoEat - - - AutoFishing - - - AutoRelog - - - AutoRespond - - - ChatLog - - - DiscordBridge - - - DiscordRpc - - - Farmer - - - FollowPlayer - - - HangmanGame - - - Mailer - - - Map - - - PlayerListLogger - - - RemoteControl - - - ReplayCapture - - - Script - - - ScriptScheduler - - - TelegramBridge - - - TestBot - - - Minecraft Console Client v{0} - for MC {1} to {2} - {3} - - - ⭐ Like MCC? Star us on GitHub: https://github.com/MCCTeam/Minecraft-Console-Client - - - Supported MC Versions: - - - Server: - - - Version: - - - Protocol: {0} - - - Players: - - - Ping: - - - {0} ms - - - Connecting as: - - - Online Players: - - - ... +{0} - - - Server reported protocol {0} ({1}), upgraded to {2} ({3}) for best compatibility - - - Converting session cache from disk: {0} - - - Ignoring invalid session token line: {0} - - - Ignoring invalid profile key token line: {0} - - - Ignoring session token string '{0}': {1} - - - Ignoring profile key token string '{0}': {1} - - - Loaded session: {0}:{1} - - - Loaded profile key, it will be refresh at {0} - - - Loading Minecraft profiles: {0} - - - Loading profile key cache from disk: {0} - - - Loading session cache from disk: {0} - - - Got malformed data while reading serialized session cache from disk: {0} - - - Failed to read serialized session cache from disk: {0} - - - Failed to read session cache from disk: {0} - - - Failed to read profile key cache from disk: {0} - - - Failed to write session cache to disk: {0} - - - Failed to write profile key cache to disk: {0} - - - Saving session cache to disk - - - Saving profile key cache to disk - - - Done. File saved as '{0}' - - - Downloading '{0}.json' from Mojang servers... - - - Failed to download the file. - - - Translations file loaded. - - - Player {0}'s message chain is broken! - - - Translations file not found: '{0}' -Some messages won't be properly printed without this file. - - - Performing request to {0} - - - Failed to save the file {0}. - - - Switch to use Minecraft's default language resource "en_us.json". - - - [{0}] Disconnecting and Reconnecting to the Server - - - Swing your arm. - - - Could not find a bed! - - - Can not reach the bed safely! - - - Used to sleep in or leave a bed. - - - Failed to reach the bed position (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) in time (30 seconds). Giving up! - - - Found a bed at (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}). - - - Succesfully laid in bed! - - - Sending a command to leave a bed to the server. - - - Moving to (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) where the bed is located. - - - The block on (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}) is not a bed! - - - Could not lay in bed. Are you trying to sleep in a bed? (PS: You must use the head block coordinates of the bed) - - - Searching for a bed in radius of {0:0.00}... - - - Trying to sleep in a bed on location (X: {0:0.0}, Y: {1:0.0}, Z: {2:0.0}). Result: {3} - - - Blocks around - - - Block type - - - Reports the type of the block on the provided coordinates. (Use -s to report blocks around the target block). - - - Negative - - - Positive - - - List bots, unload a bot or all bots. - - - Loaded bots - - - No bots loaded! - - - Bot {0} is not loaded, check if you have made a typo! - - - Successfully unloaded bot: {0} - - - Successfully unloaded all bots! - - - Changed to slot {0} - - - Change slot in hotbar - - - Could not change slot - - - Could not change slot: Not a Number - - - chunk: ({0}, {1}). - - - Current location:{0}, chunk: ({1}, {2}). - - - Displays the chunk loading status. -Change EnableEmoji=false in the settings if the display is confusing. - - - This command is used for debugging, make sure you know what you are doing. - - - Player:{0}, MarkedChunk:{1}, NotReceived:{2}, Loading:{3}, Loaded:{4} - - - Marked location: - - - Since the marked chunk is outside the graph, it will not be displayed! - - - connect to the specified server. - - - Invalid server IP '{0}'. - - - Unknown account '{0}'. - - - toggle chat visibility in the console. - - - Console chat output is now hidden. - - - Console chat output is now visible. - - - clear the console output. - - - toggle debug messages. - - - Debug messages are now OFF - - - Debug messages are now ON - - - Attempt to break a block - - - Attempting to dig block at {0} {1} {2} ({3}) - - - Failed to start digging block. - - - No block at this location (Air) - - - You are too far away from this block. - - - Drop specified type of items from player inventory or opened container - - - Dropped all {0} from inventory #{1} - - - Unknown item {0} - - - Sent a click to the server, if you have enough levels and if you have placed the items in the correct slots it should enchant! - - - Enchant an item when you have the Enchantment table opened and the list of enchants recieved. - - - You must put an item inside the enchanting table in slot 0! - - - You must put at least 3 lapis lazuli inside the enchanting table in slot 1! - - - You must open a an enchanting table in order to use this option! - - - Invalid slot provided (Available: top, middle, bottom)! - - - Could not click! - - - You must first put an item to enchant to the enchanting table in order to get enchantments from the server, then you can execute this command! - - - You do not have enouhg levels to enchant! (Your current level is {0}, you need to be level {1}). - - - Entity attacked - - - Boots - - - Chestplate - - - Custom Name - - - Distance - - - Entities - - - Entity - - - Equipment - - - Health - - - Helmet - - - Item - - - Latency - - - Leggings - - - Location - - - Main Hand - - - Nickname - - - Entity not found - - - Off Hand - - - Pose - - - Type - - - Entity used - - - Allows you to execute a command if a condition is met. (You can use variables from MinecraftClient.ini and /set command, as well as CSharp expressions) - - - Error: {0} - - - An error has occured while executing the command: {0} - - - The condition '{0}' was met, executed command '{1}' with result '{2}'. - - - The condition '{0}' was met, executed command '{1}', no result was returned. - - - Execute multiple commands one after another - - - Executed the command '{0}' with {1} - - - no result! - - - You can not use execmulti or execif within execmulti command! - - - result '{0}'! - - - disconnect from the server. - - - Already following {0}! - - - Already stopped - - - Can not reach the player, he is either in chunks that are not loaded, too far away or not reachable by a bot due to obstacles like gaps or water bodies! - - - Makes the bot follow a specified player - - - Invalid or empty player name provided! - - - The specified player is either not connected out out of the range! - - - NOTE: The bot is quite slow, you need to walk slowly and at a close distance for it to be able to keep up, kinda like when you make animals follow you by holding food in your hand. This is a limitation due to a pathfinding algorithm, we are working to get a better one. - - - Pausing! - - - The player {0} came back to the range! - - - The player {0} left the server! - - - The player {0} has left the range! - - - Resuming to follow! - - - Started following {0}! - - - Stopped following! - - - Switched to following {0}! - - - Enabled us-safe walking (NOTE: The bot might die or get hurt!) - - - follow <player name|stop> [-f] (Use -f to enable un-safe walking) - - - list your currently active effects. - - - - {0} ({1}) - - - Active effects: - - - No active effects. - - - try a recommended feature. - - - Available tryouts: - - - tui: set [Console.General] ConsoleMode = "tui" for the next restart. - - - [Console.General] ConsoleMode is already "tui" in the config. To switch back, set [Console.General] ConsoleMode = "classic". Restart MCC after changing it for the new mode to take effect. - - - Updated [Console.General] ConsoleMode from "{0}" to "{1}" in the config. To switch back, set [Console.General] ConsoleMode = "classic". Restart MCC to apply the change. - - - Display Health and Food saturation. - - - Health: {0}, Saturation: {1}, Level: {2}, TotalExperience: {3} - - - {0} clicking slot {1} in window #{2} - - - Closing Inventoy #{0} - - - Failed to close Inventory #{0} - - - Cannot find container, please retry with explicit ID - - - Requested to clear slot #{0} - - - Requested {0} x{1} in slot #{2} - - - Failed to request Creative action - - - Damage - - - Inventory command - - - Dropped 1 item from slot #{0} - - - Dropped whole item stack from slot #{0} - - - Found items - - - Available actions - - - Basic usage - - - Click on an item. - - - Close an opened container. - - - Clear slot in creative mode. - - - Give item in creative mode. - - - Drop an item from inventory. - - - {0} -Use '/inventory help <action>' for action help. -'player' and 'container' can be simplified to 'p' and 'c'. -Note that parameters in '[]' are optional. - - - List avaliable inventories - - - List your inventory. - - - Search for an item in avaliable Inventories - - - Shift click an item. - - - Unknown action. - - - Usage - - - Your selected hotbar is {0} - - - Inventories - - - Available Inventories - - - Inventory - - - Left - - - Middle - - - You must be in Creative gamemode - - - Inventory #{0} do not exist - - - Could not find the specified item in any of avaliable Inventories! - - - No item in slot #{0} - - - Right - - - Shift - - - Shift click failed, this may be because this container type is not supported - - - get the player list. - - - PlayerList: {0} - - - show a vanilla-like tab list. In TUI mode, opens a live overlay. - - - No listed players are currently tracked. - - - Tab list ({0} players) - - - Ping - - - Team - - - Player - - - Live tab overlay opened. - - - The tab overlay is not available right now. - - - log some text to the console. - - - Looking at yaw: {0} pitch: {1} - - - Looking at {0} - - - look at direction or coordinates. - - - The block currently intersecting the line of sight is {0} ({1:0}, {2:0}, {3:0}), distance is {4:0.0}({5:0.0}). - - - There is no block within {0} meters that intersects with the line of sight. - - - Unknown direction '{0}' - - - Chunk loading status: {0:P} - {1} out of {2} load completed. - - - The chunk where the target location resides has not yet been loaded. -You can use "/chunk status {0:0.0} {1:0.0} {2:0.0}" to check the chunk loading status. - - - walk or start walking. - - - force unsafe movements like falling or touching fire - - - Cannot move in that direction. - - - Disabling Terrain and Movements. - - - Enabling Terrain and Movements on next server login, respawn or world change. - - - Failed to compute path to {0} - - - Gravity is disabled. - - - Gravity is enabled. - - - Moving {0} - - - Failed to compute a safe path to {0}. Try -f parameter to allow unsafe movements. - - - Walking from {1} to {0} - - - restart and reconnect to the server. - - - Reloads MCC settings. - - - Reloaded Settings! - - - Reloading settings... - - - This command will NOT affect certain settings which are used before connecting to a server! - - - Some settings passed through the command line parameters might get overriden! - - - You also might need to reconnect for some settings to take effect. - - - Replay Chat Bot will not be hard reloaded due to technical limitations! - - - Use this to respawn if you are dead. - - - You have respawned. - - - run a script file. - - - send a chat message or command. - - - set a custom %variable%. - - - variable name must be A-Za-z0-9. - - - set a custom %variable% randomly to a given value. - - - setrnd variable -7 to 17 OR setrnd variable string1 "\"string2\" string3" - - - setrnd variable -7 to 17 - - - setrnd variable string1 "\"string2\" string3" - - - Toggles sneaking - - - You are not sneaking anymore - - - You are sneaking now - - - Current tps - - - Display server current tps (tick per second). May not be accurate - - - List all scoreboard teams and their members. - - - No teams are currently tracked. - - - Team '{0}' (display: {1}, color: {2}, prefix: '{3}', suffix: '{4}', nameTagVisibility: {5}, collisionRule: {6}, friendlyFire: {7}, seeInvisibles: {8}) - - - Members ({0}): {1} - - - No members. - - - Place a block or open chest - - - Useblock at ({0:0.0}, {1:0.0}, {2:0.0}) {3}. - - - Use the item in your hand, optionally on a specific block - - - Used an item - - - Failed to write to backup file {0} - - - The color code {1} in {0} is in illegal format and the default value has been restored. - - - Settings have been loaded from {0} - - - Failed to load settings: - - - The language code is invalid! - - - The current setting is saved as {0} - - - Failed to write to settings file {0} - - - Color test: Your terminal should display {0} - - - Crypto keys & hash generated. - - - No profile keys could be loaded from disk - - - Profile keys has been successfully loaded from disk. - - - Performing request to {0} - - - No sessions could be loaded from disk - - - Session data has been successfully loaded from disk. - - - Success. (session ID: {0}) - - - Bottom slot - - - Enchantments available - - - Levels - - - Middle slot - - - Top slot - - - Got error code from server while refreshing authentication: {0} - - - Failed to connect to this IP. - - - A timeout occured while attempting to connect to this IP. - - - Failed to determine server version. - - - Forge Login Handshake did not complete successfully - - - Cannot force Forge support for this Minecraft version! - - - Forge StartEncryption Handshake did not complete successfully - - - Invalid usage of the generator command! - - - The provided path must be a path to a file that is in .json format! - - - Invalid data path provided! (The path either does not exists or you have made a typo) - - - Got error code from server: {0} - - - Invalid response to StartEncryption packet - - - Invalid response to Handshake packet - - - This feature requires Inventory Handling to be enabled in order to work! - - - An error occured when attempting to join this server. - - - Login failed : - - - Incorrect username/password, blacklisted IP or too many logins. - - - User cancelled. - - - Account migrated, use e-mail as username. - - - Network error. - - - User not premium. - - - Invalid server response. - - - Login servers are unavailable. Please try again later. - - - SSL Error. - - - Unknown Error. - - - Failed to login to this server. - - - You are missing argument {0} - - - Server does not report its protocol version, autodetection will not work. - - - Failed to ping this IP. - - - This Realms world does not exist or access was denied - - - Trying to join a Realms world but Realms support is disabled in config - - - Cannot retrieve the server IP of your Realms world - - - Invalid or unknown Realms server ID. - - - Realms server may require some time to start up. Please retry again later. - - - {0}: Invalid syntax, expecting --argname=value or --section.argname=value - - - This feature requires Terrain And Movements to be enabled in order to work! - - - Connection Timeout - - - Unexpected response from the server (is that a Minecraft server?) - - - Cannot connect to the server : This version is not supported ! - - - Usage: - - - Server reports a different version than manually set. Login may not work. - - - ChatBot methods should NOT be called in the constructor as API handler is not initialized yet. Override Initialize() or AfterGameJoined() instead to perform initialization tasks. - - - The provided script does not have a valid MCCScript header - - - Failed to process incoming packet of type {0}. (PacketID: {1}, Protocol: {2}, LoginPhase: {3}, InnerException: {4}). - - - Please update block types handling for this Minecraft version. See Material.cs - - - Please update entity types handling for this Minecraft version. See EntityType.cs - - - Please update health field handling for this Minecraft version. - - - Please update item types handling for this Minecraft version. See ItemType.cs - - - Please update packet type palette for this Minecraft version. See PacketTypePalette.cs - - - Unknown direction - - - User-initiated logout should be done by calling Disconnect() - - - The protocol version no.{0} is not supported. - - - Entities are currently not handled for that MC version. - - - Please enable EntityHandling in the config file first. - - - Inventory # {0} closed. - - - Inventories are currently not handled for that MC version. - - - Inventory handling is now enabled. - - - Use /inventory to interact with it. - - - Inventory # {0} opened: {1} - - - Please enable InventoryHandling in the config file first. - - - Terrain & Movements currently not handled for that MC version. - - - Terrain and Movements is now enabled. - - - Please enable Terrain and Movements in the config file first. - - - [{0}] Failed to initialize FileSystemWatcher, retrying using Polling - - - [{0}] Initializing FileSystemWatcher for file: {1} - - - Accepting server mod list... - - - Accepting server registries... - - - Forge server connection complete! - - - Acknowledging FML2 Server Config: {0} - - - Received FML2 Server Mod List - - - Sending back FML2 Client Mod List - - - Acknowledging FML2 Server Registry: {0} - - - Got Unknown FML2 Handshake message no. {0} - - - Ignoring Unknown FML2 LoginMessage channel: {0} - - - Mod list: - - - Server is running Forge without mods. - - - Received registry with {0} entries - - - Received registry {0} with {1} entries - - - Sending falsified mod list to server... - - - Forge protocol version : {0} - - - Server is running Forge with {0} mods. - - - Available commands: {0} - - - This bot will be unloaded. - - - Done - - - Fail - - - OnInternalCommand: Got error from {0}: {1} - - - help <cmdname>: show brief help about a command. - - - help <cmdname>. Available commands: -{0}For server help, use '{1}send /help' instead. - - - Unknown command '{0}'. Use 'help' for command list. - - - The old MinecraftClient.ini has been backed up as {0} - - - Paste your code here: - - - Your browser should open automatically. If not, open the link below in your browser. - - - Connecting to {0}... - - - Select a login method: [1] Offline, [2] Online (Microsoft), [3] Yggdrasil - - - Please choose 1, 2, or 3. - - - Authlib-injector URL: - - - The authlib-injector URL must be an absolute HTTP or HTTPS URL. - - - Could not reach the authlib-injector server. Check the URL and try again. - - - The server did not return valid authlib-injector metadata. Check the URL and try again. - - - The configured authlib-injector URL must be an absolute HTTP or HTTPS URL. - - - Tip: try TUI mode for a cleaner interface, mouse-friendly inventory actions, and a nicer layout. Run {0}tryout tui§8 to switch [Console.General] ConsoleMode to "tui" for the next restart. - - - MCC encountered a problem while starting TUI mode. - - - As a fallback, MCC has automatically switched [Console.General] ConsoleMode to "classic". This will take effect after you restart MCC. - - - Please report this issue to the MCC Team. - - - To sign in, open {0} in your browser and enter the code: §e{1} - - - Waiting for authentication to complete... - - - Login failed : - - - Connection has been lost. - - - Disconnected by Server : - - - Not connected to any server. Use '{0}help' for help. - - - Fetching profile key from Microsoft. - - - Checking if server is running Forge... - - - Force-enabling Forge support. - - - Found server {0}:{1} for domain {2} - - - Succesfully generated {0} palette using the dataset: {1} - - - Generating {0} palette using the dataset: {1} - - - New configuration file "{0}" is generated. - - - Handshake successful. (Server ID: {0}) - - - A new version of MCC is available and you can download it via /upgrade -Or download it manually: {0} - - - Help us translate MCC: {0} - - - Failed to parse the settings file, enter "{0}new" to generate a new configuration. - - - Server IP : - - - Server was successfully joined. -Type '{0}quit' to leave the server. - - - Link: {0} - - - Login : - - - Please type the username or email of your choice. - - - Failed to perform SRV lookup for {0} -{1}: {2} - - - You chose to run in offline mode. - - - Please type the password for {0}. - - - Password(invisible): - - - Authlib server host: - - - Authlib server port [{0}]: - - - Authlib-Injector API path [{0}]: - - - Use HTTPS? [Y/n] - - - The authlib server host cannot be empty. - - - The authlib server port must be between 1 and 65535. - - - Please answer yes or no. - - - You are dead. Type '{0}respawn' to respawn. - - - You are dead. Automatically respawning after 1 second. - - - Or press Enter to exit Minecraft Console Client. - - - Cached profile key needs to be refreshed. - - - Cached profile key is still valid for {0}. - - - You have access to the following Realms worlds - - - Use realms:<index> as server IP to join a Realms world - - - Waiting 5 seconds ({0} attempts left)... - - - Resolving {0}... - - - Restarting Minecraft Console Client... - - - Cannot send text: not connected to a server. - - - Waiting {0} seconds before restarting... - - - Retrieving Server Info... - - - -MCC is running with default settings. - - - Server is in offline mode. - - - Server version: {0} (protocol v{1}) - - - Server version: - - - Checking Session... - - - Failed to check session. - - - Cached session is invalid or expired. - - - Cached session is still valid for {0}. - - - Settings file MinecraftClient.ini has been generated. - - - Unknown or not supported MC version {0}. -Switching to autodetection mode. - - - The current version is already up to date or is a development build. - - - Checking for updates has already started. - - - The download has been cancelled. - - - Unable to check for updates from Github, please check your internet connection or enable proxy. - - - Self-updating: Download is complete, decompressing. - - - Self-updating: An error occurred while downloading or saving the file: - - - Self-updating: New version detected: "{0}", download will start soon (platform: {1}). - - - The latest release does not contain a build that matches your operating system and CPU architecture. - - - Self-updating: {0:00.00}%, ETA {4}, Downloaded {1:00.0}MB of {2:00.0}MB, Avg {3:0.0}KB/s - - - Self-updating: Downloaded {0:00.0}MB, Avg {1:0.0}KB/s - - - Add "-f" to force the download. - - - Use "--force-upgrade" to force the download. - - - Self-updating: File saved as: {0} - - - Start checking for updates. - - - Please use the newly generated MinecraftClient.ini - - - Using Minecraft version {0} (protocol v{1}) - - - Version is supported. -Logging in... - - - , with Forge - - - Connected to proxy {0}:{1} - - - Mining of the block located at {0} ends. - - - Cancel mining the block located at {0}. - - - This command has been disabled due to Telegram caching causing issues, please stop your client manually. - - - Collect items on the ground - - - itemscollector <start/stop> - - - Already collecting items! - - - Started collecting items! - - - Already not collecting items! - - - Stopping item collection... - - - Stopped collecting items. - - - §cFailed to start a server! The provided IP address is not a valid one! - - - §cFailed to start a server! The provided port number {0} is out of the range, it must be 65535 or bellow it! - - - - - - Starting the Websocket server... - - - §bServer started on ip §a{0}§b port: §a{1} - - - §cFailed to start a server:\n\n{0}\n\n - - - §bNew session connected: §a{0} - - - §bSession with an id §a{0}§b has disconnected! - - - §bSession with an id §a{0}§b has been renamed to: §a{1}§b! - - - §cSession with an id §a{0}§b failed to change the ID to: §c{1}§b! - - - §bSession with an id §a{0}§b has been successfully authenticated! - - - The item name cannot be empty! - - - You need to have an Anvil inventory opened and active in order to use this command! - - - You need to place an item in the first slot (slot id: 0) of the Anvil inventory! - - - Failed to send the packet for naming an item, try again! - - - Successfully sent the item name to the server, you can now click on the slot number 2 in the Anvil inventory to rename the item. - - - Set an item name when an Anvil inventory is active and the item is in the first slot. - - - Failed to send recipe book craft request for {0}. - - - Requested recipe {0}. - - - Requested recipe {0} with craft-all. - - - List unlocked recipe book recipes and craft them through the active recipe book inventory. - - - Unlocked recipe book recipes - - - You need an active player crafting grid, crafting table, furnace, blast furnace, smoker, or stonecutter inventory. - - - No unlocked recipe book recipes are currently tracked. - - - The recipe identifier cannot be empty. - - - Recipe book crafting is only supported on Minecraft 1.13 and newer. - - - Bot movement lock is held by bot {0}, so the Anti AFK bot might not move! - - - You can not start/run/use the '{0}' bot because it requires movement, the movement is currently utilized by the '{1}' bot, stop it if you want to use this one. - - - Minimum number that you have provided is bigger than the maximum, swapping them around! - - - Shift right - - - Avaliable profiles: - - - Selected profile: - - - Select a profile from available profiles: - - - MCC uses Sentry to log errors. You can opt-out by setting the EnableSentry option in the configuration file to false. - - - Use '{0}quit' to exit Minecraft Console Client. - - - MCC Debug State - - - Server - - - Username - - - Protocol - - - GameMode - - - Health - - - Food - - - Location - - - TPS - - - Console - - - Features - - - Debug - - - Bots - - - Players - - - {0} online - - - Open interactive TUI inventory viewer (TUI mode only). - - - Interactive TUI is only available in TUI console mode. Use '/inventory <id> list' instead. - - - TUI inventory viewer is already running. - - - Opening TUI for Inventory #{0}... - - - Inventory dialog opened. - - - Failed to launch TUI inventory viewer. - - - TUI viewer does not support this container type (Inventory #{0}). Use '/inventory {0} list' to view its contents. - - - Hold Shift + Left-click to select and copy text. - - - Input cleared. Press Ctrl+C again to quit. - - - Press Ctrl+C again to quit MCC. - - - [ Item Info ] - - - [ Held Item ] - - - [ Controls ] - - - LClick Pick/Place -RClick Half/Place1 -Shift+C QuickMove -Q Drop x1 -Ctrl+Q Drop Stack -R Refresh -E/ESC Exit - - - (empty) - - - Off - - - Out - - - Hd - - - Bd - - - Lg - - - Ft - - - Hover over a slot to -see item details. - - - (Empty) - - - Slot #{0} Count: {1} - - - Durability - - - Container not found - - - Inventory #{0} - {1} - - - {0} items - - - Press Esc to close. Refreshes automatically. - - - You're now under {0} effect (Duration: {1}). - - - Effect {0} has expired - - - Unlimited - - - a - - - an - - - {0}h - - - {0}h {1}m - - - {0}m - - - {0}m {1}s - - - {0}s - - - ∞ - - - {0} {1} - - - Container - - - Input - - - Fuel - - - Output - - - Item - - - Lapis - - - Enchant Options - - - Option {0} - - - Fuel - - - Ingredient - - - Bottle {0} - - - Input 1 - - - Input 2 - - - Crafting - - - McpServer - - - Starting embedded MCP server... - - - Embedded MCP server started on {0} - - - Failed to start embedded MCP server: {0} - - - Embedded MCP auth token is required but environment variable {0} is empty. - - - Embedded MCP server stopped. - - - Failed to stop embedded MCP server cleanly: {0} - - - Toggle the TUI minimap overlay, or adjust its zoom level. - - - Minimap enabled. - - - Minimap disabled. - - - Minimap zoom set to {0}:1 (blocks per pixel). - - - Current minimap zoom: {0}:1 blocks/px (range 1-{1}). - - - The minimap command is only available in TUI mode. - - - Hostile - - - Passive - - - Neutral - - - Player - - - Name display -- Players: {0}, Hostile: {1}, Neutral: {2}, Passive: {3} - - - All entity name labels enabled. - - - All entity name labels disabled. - - - {0} name display: {1} - - - {0} name display set to {1}. - - - Current minimap position: {0} - - - Minimap position set to: {0} - - - Current cave mode: {0} - - - Cave mode set to: {0} - - - list achievements/advancements from the server. - - - No achievements/advancements received yet. - - - No completed achievements/advancements. - - - No incomplete achievements/advancements. - - - Achievements/Advancements: - - - Completed achievements/advancements: - - - Incomplete achievements/advancements: - - - [DONE] - - - [TODO] - - - {0} {1} ({2}) [{3}] - - - {0} {1} [{2}] - - - book <read|write|edit|sign> - - - read, write, edit, and sign the book held in your main hand. - - - /book read [page] - - - /book write text <text> or /book write file <path>. Use \n for line breaks and \f for page breaks. - - - /book edit, /book edit page <page> <text>, /book edit insert <page> <text>, or /book edit delete <page>. - - - /book sign <title> - - - You are not holding a book. - - - You must hold a writable book in your main hand. - - - Book already signed. - - - You cannot edit a signed book. - - - Book TUI opened. - - - The book editor is only available in TUI mode. - - - Book write packet sent. - - - Book edit packet sent. - - - Book sign packet sent. - - - Book packet could not be sent. - - - Book file not found: {0} - - - Page {0} is outside the current page range 1-{1}. - - - Book has {0} pages, but this version supports at most {1} pages. - - - Page {0} has {1} characters, but this version supports at most {2} characters per page. - - - Book title must be 1-{0} characters. - - - Written book: {0} by {1} - - - Writable book - - - Page {0}/{1} - - - Title - - - Prev - - - Next - - - Insert - - - Delete - - - Save - - - Sign - - - Close - - - Saved. - - - Book packet could not be sent. - - - Signed. - - - Book page {0}/{1} - - - Editing writable book. - - - Reading book. - - - PageUp/PageDown: previous/next page - - - PageUp/PageDown: previous/next page - - - [S -> C] state={0} id=0x{1:X2} type={2} payload={3} frame={4} compression={5} - - - [C -> S] state={0} id=0x{1:X2} type={2} payload={3} compression_threshold={4} - - - Protocol state changed: {0} -> {1} - - - Unknown(0x{0:X2}) - - - disabled - - - uncompressed - - - compressed, uncompressed={0} - - - {0} exited: reason={1}, state={2}, socket_connected={3} - - - packet queue completed - - - socket closed - - - cancelled - - - dialog [show|open|set|click|click-label|cancel|dismiss] - - - View and interact with the current server custom dialog. - - - Server showed custom dialog: {0}. Use /dialog show. - - - Server cleared the custom dialog. - - - No custom dialog is active. - - - Dialog dismissed locally. - - - Unresolved dialog {0} - - - The server referenced dialog registry entry {0}, but MCC has no data for it. - - - This dialog could not be resolved, so actions are disabled. - - - Unknown dialog input: {0} - - - Dialog input {0} set to {1}. - - - Input {0} is longer than {1} characters. - - - Input {0} expects true or false. - - - Input {0} expects one of the listed option IDs. - - - Input {0} expects a number. - - - Input {0} must be between {1} and {2}. - - - Unknown dialog action index: {0} - - - Unknown dialog action label: {0} - - - Dialog action label is ambiguous: {0} - - - This dialog cannot be closed with cancel. - - - Dialog action closed locally. - - - This dialog command action is only available in play state. - - - Dialog action is invalid. - - - Custom dialog action packet could not be sent. - - - Dialog command sent: {0} - - - Dialog custom action sent: {0} - - - Nested dialog opened. - - - Dialog URL action: {0} - - - Dialog suggested command: {0} - - - Dialog copy action: {0} - - - Unsupported dialog action: {0} - - - Custom dialog is pending. Use dialog open after closing the current overlay. - - - Dialog TUI is unavailable. - - - Dialog TUI opened. - - - Action - - - OK - - - Item preview - - - Report bug - - - Community guidelines - - - Support - - - Status - - - Feedback - - - Community - - - Website - - - Forums - - - News - - - Announcements - - - Cancel - - - Dialog #{0} [{1}]: {2} - - - Type: {0} - - - Body: {0} - - - Inputs: - - - {0} ({1}) {2} = {3} [{4}] - - - Actions: - - - [{0}] {1} ({2}) - - - Use /dialog cancel to close or run the cancel action. - - - max {0} chars - - - Yes={0}, No={1} - - - options: {0} - - - range {0}..{1} - - - unknown input - - - close - - - command - - - custom - - - show dialog - - - open URL - - - suggest command - - - copy - - - unknown - - - Notice - - - Confirmation - - - Multi Action - - - Dialog list - - - Server links - - - Unknown - - - Text - - - Check box - - - Options - - - Number - - - Unknown - - - Use /dialog help for a list of commands. - - - Raw server chat message: {0} - - diff --git a/MinecraftClient/Resources/appicon_creeper1.ico b/MinecraftClient/Resources/appicon_creeper1.ico deleted file mode 100644 index d3009de9e446cf9a0412d89e48f71676d422908d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 164592 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%0DNR{QjB9=sNgYxlg|4 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 z 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

VD5 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

$?lCVL$(OeS06fU)_uJKMd{v<3Il6r_V>W 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 diff --git a/MinecraftClient/Resources/en_us.json b/MinecraftClient/Resources/en_us.json deleted file mode 100644 index 911c141e25..0000000000 --- a/MinecraftClient/Resources/en_us.json +++ /dev/null @@ -1,6546 +0,0 @@ -{ - "accessibility.onboarding.accessibility.button": "Accessibility Settings...", - "accessibility.onboarding.screen.narrator": "Press enter to enable the narrator", - "accessibility.onboarding.screen.title": "Welcome to Minecraft!\n\nWould you like to enable the Narrator or visit the Accessibility Settings?", - "addServer.add": "Done", - "addServer.enterIp": "Server Address", - "addServer.enterName": "Server Name", - "addServer.hideAddress": "Hide Address", - "addServer.resourcePack": "Server Resource Packs", - "addServer.resourcePack.disabled": "Disabled", - "addServer.resourcePack.enabled": "Enabled", - "addServer.resourcePack.prompt": "Prompt", - "addServer.title": "Edit Server Info", - "advancement.advancementNotFound": "Unknown advancement: %s", - "advancements.adventure.adventuring_time.description": "Discover every biome", - "advancements.adventure.adventuring_time.title": "Adventuring Time", - "advancements.adventure.arbalistic.description": "Kill five unique mobs with one crossbow shot", - "advancements.adventure.arbalistic.title": "Arbalistic", - "advancements.adventure.avoid_vibration.description": "Sneak near a Sculk Sensor or Warden to prevent it from detecting you", - "advancements.adventure.avoid_vibration.title": "Sneak 100", - "advancements.adventure.bullseye.description": "Hit the bullseye of a Target block from at least 30 meters away", - "advancements.adventure.bullseye.title": "Bullseye", - "advancements.adventure.craft_decorated_pot_using_only_sherds.description": "Make a Decorated Pot out of 4 Pottery Sherds", - "advancements.adventure.craft_decorated_pot_using_only_sherds.title": "Careful Restoration", - "advancements.adventure.fall_from_world_height.description": "Free fall from the top of the world (build limit) to the bottom of the world and survive", - "advancements.adventure.fall_from_world_height.title": "Caves & Cliffs", - "advancements.adventure.hero_of_the_village.description": "Successfully defend a village from a raid", - "advancements.adventure.hero_of_the_village.title": "Hero of the Village", - "advancements.adventure.honey_block_slide.description": "Jump into a Honey Block to break your fall", - "advancements.adventure.honey_block_slide.title": "Sticky Situation", - "advancements.adventure.kill_a_mob.description": "Kill any hostile monster", - "advancements.adventure.kill_a_mob.title": "Monster Hunter", - "advancements.adventure.kill_all_mobs.description": "Kill one of every hostile monster", - "advancements.adventure.kill_all_mobs.title": "Monsters Hunted", - "advancements.adventure.kill_mob_near_sculk_catalyst.description": "Kill a mob near a Sculk Catalyst", - "advancements.adventure.kill_mob_near_sculk_catalyst.title": "It Spreads", - "advancements.adventure.lightning_rod_with_villager_no_fire.description": "Protect a Villager from an undesired shock without starting a fire", - "advancements.adventure.lightning_rod_with_villager_no_fire.title": "Surge Protector", - "advancements.adventure.ol_betsy.description": "Shoot a Crossbow", - "advancements.adventure.ol_betsy.title": "Ol' Betsy", - "advancements.adventure.play_jukebox_in_meadows.description": "Make the Meadows come alive with the sound of music from a Jukebox", - "advancements.adventure.play_jukebox_in_meadows.title": "Sound of Music", - "advancements.adventure.read_power_from_chiseled_bookshelf.description": "Read the power signal of a Chiseled Bookshelf using a Comparator", - "advancements.adventure.read_power_from_chiseled_bookshelf.title": "The Power of Books", - "advancements.adventure.root.description": "Adventure, exploration and combat", - "advancements.adventure.root.title": "Adventure", - "advancements.adventure.salvage_sherd.description": "Brush a Suspicious block to obtain a Pottery Sherd", - "advancements.adventure.salvage_sherd.title": "Respecting the Remnants", - "advancements.adventure.shoot_arrow.description": "Shoot something with an Arrow", - "advancements.adventure.shoot_arrow.title": "Take Aim", - "advancements.adventure.sleep_in_bed.description": "Sleep in a Bed to change your respawn point", - "advancements.adventure.sleep_in_bed.title": "Sweet Dreams", - "advancements.adventure.sniper_duel.description": "Kill a Skeleton from at least 50 meters away", - "advancements.adventure.sniper_duel.title": "Sniper Duel", - "advancements.adventure.spyglass_at_dragon.description": "Look at the Ender Dragon through a Spyglass", - "advancements.adventure.spyglass_at_dragon.title": "Is It a Plane?", - "advancements.adventure.spyglass_at_ghast.description": "Look at a Ghast through a Spyglass", - "advancements.adventure.spyglass_at_ghast.title": "Is It a Balloon?", - "advancements.adventure.spyglass_at_parrot.description": "Look at a Parrot through a Spyglass", - "advancements.adventure.spyglass_at_parrot.title": "Is It a Bird?", - "advancements.adventure.summon_iron_golem.description": "Summon an Iron Golem to help defend a village", - "advancements.adventure.summon_iron_golem.title": "Hired Help", - "advancements.adventure.throw_trident.description": "Throw a Trident at something.\nNote: Throwing away your only weapon is not a good idea.", - "advancements.adventure.throw_trident.title": "A Throwaway Joke", - "advancements.adventure.totem_of_undying.description": "Use a Totem of Undying to cheat death", - "advancements.adventure.totem_of_undying.title": "Postmortal", - "advancements.adventure.trade_at_world_height.description": "Trade with a Villager at the build height limit", - "advancements.adventure.trade_at_world_height.title": "Star Trader", - "advancements.adventure.trade.description": "Successfully trade with a Villager", - "advancements.adventure.trade.title": "What a Deal!", - "advancements.adventure.trim_with_all_exclusive_armor_patterns.description": "Apply these smithing templates at least once: Spire, Snout, Rib, Ward, Silence, Vex, Tide, Wayfinder", - "advancements.adventure.trim_with_all_exclusive_armor_patterns.title": "Smithing with Style", - "advancements.adventure.trim_with_any_armor_pattern.description": "Craft a trimmed armor at a Smithing Table", - "advancements.adventure.trim_with_any_armor_pattern.title": "Crafting a New Look", - "advancements.adventure.two_birds_one_arrow.description": "Kill two Phantoms with a piercing Arrow", - "advancements.adventure.two_birds_one_arrow.title": "Two Birds, One Arrow", - "advancements.adventure.very_very_frightening.description": "Strike a Villager with lightning", - "advancements.adventure.very_very_frightening.title": "Very Very Frightening", - "advancements.adventure.voluntary_exile.description": "Kill a raid captain.\nMaybe consider staying away from villages for the time being...", - "advancements.adventure.voluntary_exile.title": "Voluntary Exile", - "advancements.adventure.walk_on_powder_snow_with_leather_boots.description": "Walk on Powder Snow... without sinking in it", - "advancements.adventure.walk_on_powder_snow_with_leather_boots.title": "Light as a Rabbit", - "advancements.adventure.whos_the_pillager_now.description": "Give a Pillager a taste of their own medicine", - "advancements.adventure.whos_the_pillager_now.title": "Who's the Pillager Now?", - "advancements.empty": "There doesn't seem to be anything here...", - "advancements.end.dragon_breath.description": "Collect Dragon's Breath in a Glass Bottle", - "advancements.end.dragon_breath.title": "You Need a Mint", - "advancements.end.dragon_egg.description": "Hold the Dragon Egg", - "advancements.end.dragon_egg.title": "The Next Generation", - "advancements.end.elytra.description": "Find Elytra", - "advancements.end.elytra.title": "Sky's the Limit", - "advancements.end.enter_end_gateway.description": "Escape the island", - "advancements.end.enter_end_gateway.title": "Remote Getaway", - "advancements.end.find_end_city.description": "Go on in, what could happen?", - "advancements.end.find_end_city.title": "The City at the End of the Game", - "advancements.end.kill_dragon.description": "Good luck", - "advancements.end.kill_dragon.title": "Free the End", - "advancements.end.levitate.description": "Levitate up 50 blocks from the attacks of a Shulker", - "advancements.end.levitate.title": "Great View From Up Here", - "advancements.end.respawn_dragon.description": "Respawn the Ender Dragon", - "advancements.end.respawn_dragon.title": "The End... Again...", - "advancements.end.root.description": "Or the beginning?", - "advancements.end.root.title": "The End", - "advancements.husbandry.allay_deliver_cake_to_note_block.description": "Have an Allay drop a Cake at a Note Block", - "advancements.husbandry.allay_deliver_cake_to_note_block.title": "Birthday Song", - "advancements.husbandry.allay_deliver_item_to_player.description": "Have an Allay deliver items to you", - "advancements.husbandry.allay_deliver_item_to_player.title": "You've Got a Friend in Me", - "advancements.husbandry.axolotl_in_a_bucket.description": "Catch an Axolotl in a Bucket", - "advancements.husbandry.axolotl_in_a_bucket.title": "The Cutest Predator", - "advancements.husbandry.balanced_diet.description": "Eat everything that is edible, even if it's not good for you", - "advancements.husbandry.balanced_diet.title": "A Balanced Diet", - "advancements.husbandry.breed_all_animals.description": "Breed all the animals!", - "advancements.husbandry.breed_all_animals.title": "Two by Two", - "advancements.husbandry.breed_an_animal.description": "Breed two animals together", - "advancements.husbandry.breed_an_animal.title": "The Parrots and the Bats", - "advancements.husbandry.complete_catalogue.description": "Tame all Cat variants!", - "advancements.husbandry.complete_catalogue.title": "A Complete Catalogue", - "advancements.husbandry.feed_snifflet.description": "Feed a Snifflet", - "advancements.husbandry.feed_snifflet.title": "Little Sniffs", - "advancements.husbandry.fishy_business.description": "Catch a fish", - "advancements.husbandry.fishy_business.title": "Fishy Business", - "advancements.husbandry.froglights.description": "Have all Froglights in your inventory", - "advancements.husbandry.froglights.title": "With Our Powers Combined!", - "advancements.husbandry.kill_axolotl_target.description": "Team up with an Axolotl and win a fight", - "advancements.husbandry.kill_axolotl_target.title": "The Healing Power of Friendship!", - "advancements.husbandry.leash_all_frog_variants.description": "Get each Frog variant on a Lead", - "advancements.husbandry.leash_all_frog_variants.title": "When the Squad Hops into Town", - "advancements.husbandry.make_a_sign_glow.description": "Make the text of any kind of sign glow", - "advancements.husbandry.make_a_sign_glow.title": "Glow and Behold!", - "advancements.husbandry.netherite_hoe.description": "Use a Netherite Ingot to upgrade a Hoe, and then reevaluate your life choices", - "advancements.husbandry.netherite_hoe.title": "Serious Dedication", - "advancements.husbandry.obtain_sniffer_egg.description": "Obtain a Sniffer Egg", - "advancements.husbandry.obtain_sniffer_egg.title": "Smells Interesting", - "advancements.husbandry.plant_any_sniffer_seed.description": "Plant any Sniffer seed", - "advancements.husbandry.plant_any_sniffer_seed.title": "Planting the Past", - "advancements.husbandry.plant_seed.description": "Plant a seed and watch it grow", - "advancements.husbandry.plant_seed.title": "A Seedy Place", - "advancements.husbandry.ride_a_boat_with_a_goat.description": "Get in a Boat and float with a Goat", - "advancements.husbandry.ride_a_boat_with_a_goat.title": "Whatever Floats Your Goat!", - "advancements.husbandry.root.description": "The world is full of friends and food", - "advancements.husbandry.root.title": "Husbandry", - "advancements.husbandry.safely_harvest_honey.description": "Use a Campfire to collect Honey from a Beehive using a Glass Bottle without aggravating the Bees", - "advancements.husbandry.safely_harvest_honey.title": "Bee Our Guest", - "advancements.husbandry.silk_touch_nest.description": "Move a Bee Nest, with 3 Bees inside, using Silk Touch", - "advancements.husbandry.silk_touch_nest.title": "Total Beelocation", - "advancements.husbandry.tactical_fishing.description": "Catch a Fish... without a Fishing Rod!", - "advancements.husbandry.tactical_fishing.title": "Tactical Fishing", - "advancements.husbandry.tadpole_in_a_bucket.description": "Catch a Tadpole in a Bucket", - "advancements.husbandry.tadpole_in_a_bucket.title": "Bukkit Bukkit", - "advancements.husbandry.tame_an_animal.description": "Tame an animal", - "advancements.husbandry.tame_an_animal.title": "Best Friends Forever", - "advancements.husbandry.wax_off.description": "Scrape Wax off of a Copper block!", - "advancements.husbandry.wax_off.title": "Wax Off", - "advancements.husbandry.wax_on.description": "Apply Honeycomb to a Copper block!", - "advancements.husbandry.wax_on.title": "Wax On", - "advancements.nether.all_effects.description": "Have every effect applied at the same time", - "advancements.nether.all_effects.title": "How Did We Get Here?", - "advancements.nether.all_potions.description": "Have every potion effect applied at the same time", - "advancements.nether.all_potions.title": "A Furious Cocktail", - "advancements.nether.brew_potion.description": "Brew a Potion", - "advancements.nether.brew_potion.title": "Local Brewery", - "advancements.nether.charge_respawn_anchor.description": "Charge a Respawn Anchor to the maximum", - "advancements.nether.charge_respawn_anchor.title": "Not Quite \"Nine\" Lives", - "advancements.nether.create_beacon.description": "Construct and place a Beacon", - "advancements.nether.create_beacon.title": "Bring Home the Beacon", - "advancements.nether.create_full_beacon.description": "Bring a Beacon to full power", - "advancements.nether.create_full_beacon.title": "Beaconator", - "advancements.nether.distract_piglin.description": "Distract Piglins with gold", - "advancements.nether.distract_piglin.title": "Oh Shiny", - "advancements.nether.explore_nether.description": "Explore all Nether biomes", - "advancements.nether.explore_nether.title": "Hot Tourist Destinations", - "advancements.nether.fast_travel.description": "Use the Nether to travel 7 km in the Overworld", - "advancements.nether.fast_travel.title": "Subspace Bubble", - "advancements.nether.find_bastion.description": "Enter a Bastion Remnant", - "advancements.nether.find_bastion.title": "Those Were the Days", - "advancements.nether.find_fortress.description": "Break your way into a Nether Fortress", - "advancements.nether.find_fortress.title": "A Terrible Fortress", - "advancements.nether.get_wither_skull.description": "Obtain a Wither Skeleton's skull", - "advancements.nether.get_wither_skull.title": "Spooky Scary Skeleton", - "advancements.nether.loot_bastion.description": "Loot a Chest in a Bastion Remnant", - "advancements.nether.loot_bastion.title": "War Pigs", - "advancements.nether.netherite_armor.description": "Get a full suit of Netherite armor", - "advancements.nether.netherite_armor.title": "Cover Me in Debris", - "advancements.nether.obtain_ancient_debris.description": "Obtain Ancient Debris", - "advancements.nether.obtain_ancient_debris.title": "Hidden in the Depths", - "advancements.nether.obtain_blaze_rod.description": "Relieve a Blaze of its rod", - "advancements.nether.obtain_blaze_rod.title": "Into Fire", - "advancements.nether.obtain_crying_obsidian.description": "Obtain Crying Obsidian", - "advancements.nether.obtain_crying_obsidian.title": "Who is Cutting Onions?", - "advancements.nether.return_to_sender.description": "Destroy a Ghast with a fireball", - "advancements.nether.return_to_sender.title": "Return to Sender", - "advancements.nether.ride_strider_in_overworld_lava.description": "Take a Strider for a loooong ride on a lava lake in the Overworld", - "advancements.nether.ride_strider_in_overworld_lava.title": "Feels Like Home", - "advancements.nether.ride_strider.description": "Ride a Strider with a Warped Fungus on a Stick", - "advancements.nether.ride_strider.title": "This Boat Has Legs", - "advancements.nether.root.description": "Bring summer clothes", - "advancements.nether.root.title": "Nether", - "advancements.nether.summon_wither.description": "Summon the Wither", - "advancements.nether.summon_wither.title": "Withering Heights", - "advancements.nether.uneasy_alliance.description": "Rescue a Ghast from the Nether, bring it safely home to the Overworld... and then kill it", - "advancements.nether.uneasy_alliance.title": "Uneasy Alliance", - "advancements.nether.use_lodestone.description": "Use a Compass on a Lodestone", - "advancements.nether.use_lodestone.title": "Country Lode, Take Me Home", - "advancements.progress": "%s/%s", - "advancements.sad_label": ":(", - "advancements.story.cure_zombie_villager.description": "Weaken and then cure a Zombie Villager", - "advancements.story.cure_zombie_villager.title": "Zombie Doctor", - "advancements.story.deflect_arrow.description": "Deflect a projectile with a Shield", - "advancements.story.deflect_arrow.title": "Not Today, Thank You", - "advancements.story.enchant_item.description": "Enchant an item at an Enchanting Table", - "advancements.story.enchant_item.title": "Enchanter", - "advancements.story.enter_the_end.description": "Enter the End Portal", - "advancements.story.enter_the_end.title": "The End?", - "advancements.story.enter_the_nether.description": "Build, light and enter a Nether Portal", - "advancements.story.enter_the_nether.title": "We Need to Go Deeper", - "advancements.story.follow_ender_eye.description": "Follow an Eye of Ender", - "advancements.story.follow_ender_eye.title": "Eye Spy", - "advancements.story.form_obsidian.description": "Obtain a block of Obsidian", - "advancements.story.form_obsidian.title": "Ice Bucket Challenge", - "advancements.story.iron_tools.description": "Upgrade your Pickaxe", - "advancements.story.iron_tools.title": "Isn't It Iron Pick", - "advancements.story.lava_bucket.description": "Fill a Bucket with lava", - "advancements.story.lava_bucket.title": "Hot Stuff", - "advancements.story.mine_diamond.description": "Acquire diamonds", - "advancements.story.mine_diamond.title": "Diamonds!", - "advancements.story.mine_stone.description": "Mine Stone with your new Pickaxe", - "advancements.story.mine_stone.title": "Stone Age", - "advancements.story.obtain_armor.description": "Protect yourself with a piece of iron armor", - "advancements.story.obtain_armor.title": "Suit Up", - "advancements.story.root.description": "The heart and story of the game", - "advancements.story.root.title": "Minecraft", - "advancements.story.shiny_gear.description": "Diamond armor saves lives", - "advancements.story.shiny_gear.title": "Cover Me with Diamonds", - "advancements.story.smelt_iron.description": "Smelt an Iron Ingot", - "advancements.story.smelt_iron.title": "Acquire Hardware", - "advancements.story.upgrade_tools.description": "Construct a better Pickaxe", - "advancements.story.upgrade_tools.title": "Getting an Upgrade", - "advancements.toast.challenge": "Challenge Complete!", - "advancements.toast.goal": "Goal Reached!", - "advancements.toast.task": "Advancement Made!", - "advMode.allEntities": "Use \"@e\" to target all entities", - "advMode.allPlayers": "Use \"@a\" to target all players", - "advMode.command": "Console Command", - "advMode.mode": "Mode", - "advMode.mode.auto": "Repeat", - "advMode.mode.autoexec.bat": "Always Active", - "advMode.mode.conditional": "Conditional", - "advMode.mode.redstone": "Impulse", - "advMode.mode.redstoneTriggered": "Needs Redstone", - "advMode.mode.sequence": "Chain", - "advMode.mode.unconditional": "Unconditional", - "advMode.nearestPlayer": "Use \"@p\" to target nearest player", - "advMode.notAllowed": "Must be an opped player in creative mode", - "advMode.notEnabled": "Command blocks are not enabled on this server", - "advMode.previousOutput": "Previous Output", - "advMode.randomPlayer": "Use \"@r\" to target random player", - "advMode.self": "Use \"@s\" to target the executing entity", - "advMode.setCommand": "Set Console Command for Block", - "advMode.setCommand.success": "Command set: %s", - "advMode.trackOutput": "Track output", - "advMode.triggering": "Triggering", - "advMode.type": "Type", - "argument.anchor.invalid": "Invalid entity anchor position %s", - "argument.angle.incomplete": "Incomplete (expected 1 angle)", - "argument.angle.invalid": "Invalid angle", - "argument.block.id.invalid": "Unknown block type '%s'", - "argument.block.property.duplicate": "Property '%s' can only be set once for block %s", - "argument.block.property.invalid": "Block %s does not accept '%s' for %s property", - "argument.block.property.novalue": "Expected value for property '%s' on block %s", - "argument.block.property.unclosed": "Expected closing ] for block state properties", - "argument.block.property.unknown": "Block %s does not have property '%s'", - "argument.block.tag.disallowed": "Tags aren't allowed here, only actual blocks", - "argument.color.invalid": "Unknown color '%s'", - "argument.component.invalid": "Invalid chat component: %s", - "argument.criteria.invalid": "Unknown criterion '%s'", - "argument.dimension.invalid": "Unknown dimension '%s'", - "argument.double.big": "Double must not be more than %s, found %s", - "argument.double.low": "Double must not be less than %s, found %s", - "argument.entity.invalid": "Invalid name or UUID", - "argument.entity.notfound.entity": "No entity was found", - "argument.entity.notfound.player": "No player was found", - "argument.entity.options.advancements.description": "Players with advancements", - "argument.entity.options.distance.description": "Distance to entity", - "argument.entity.options.distance.negative": "Distance cannot be negative", - "argument.entity.options.dx.description": "Entities between x and x + dx", - "argument.entity.options.dy.description": "Entities between y and y + dy", - "argument.entity.options.dz.description": "Entities between z and z + dz", - "argument.entity.options.gamemode.description": "Players with game mode", - "argument.entity.options.inapplicable": "Option '%s' isn't applicable here", - "argument.entity.options.level.description": "Experience level", - "argument.entity.options.level.negative": "Level shouldn't be negative", - "argument.entity.options.limit.description": "Maximum number of entities to return", - "argument.entity.options.limit.toosmall": "Limit must be at least 1", - "argument.entity.options.mode.invalid": "Invalid or unknown game mode '%s'", - "argument.entity.options.name.description": "Entity name", - "argument.entity.options.nbt.description": "Entities with NBT", - "argument.entity.options.predicate.description": "Custom predicate", - "argument.entity.options.scores.description": "Entities with scores", - "argument.entity.options.sort.description": "Sort the entities", - "argument.entity.options.sort.irreversible": "Invalid or unknown sort type '%s'", - "argument.entity.options.tag.description": "Entities with tag", - "argument.entity.options.team.description": "Entities on team", - "argument.entity.options.type.description": "Entities of type", - "argument.entity.options.type.invalid": "Invalid or unknown entity type '%s'", - "argument.entity.options.unknown": "Unknown option '%s'", - "argument.entity.options.unterminated": "Expected end of options", - "argument.entity.options.valueless": "Expected value for option '%s'", - "argument.entity.options.x_rotation.description": "Entity's x rotation", - "argument.entity.options.x.description": "x position", - "argument.entity.options.y_rotation.description": "Entity's y rotation", - "argument.entity.options.y.description": "y position", - "argument.entity.options.z.description": "z position", - "argument.entity.selector.allEntities": "All entities", - "argument.entity.selector.allPlayers": "All players", - "argument.entity.selector.missing": "Missing selector type", - "argument.entity.selector.nearestPlayer": "Nearest player", - "argument.entity.selector.not_allowed": "Selector not allowed", - "argument.entity.selector.randomPlayer": "Random player", - "argument.entity.selector.self": "Current entity", - "argument.entity.selector.unknown": "Unknown selector type '%s'", - "argument.entity.toomany": "Only one entity is allowed, but the provided selector allows more than one", - "argument.enum.invalid": "Invalid value \"%s\"", - "argument.float.big": "Float must not be more than %s, found %s", - "argument.float.low": "Float must not be less than %s, found %s", - "argument.gamemode.invalid": "Unknown game mode: %s", - "argument.id.invalid": "Invalid ID", - "argument.id.unknown": "Unknown ID: %s", - "argument.integer.big": "Integer must not be more than %s, found %s", - "argument.integer.low": "Integer must not be less than %s, found %s", - "argument.item.id.invalid": "Unknown item '%s'", - "argument.item.tag.disallowed": "Tags aren't allowed here, only actual items", - "argument.literal.incorrect": "Expected literal %s", - "argument.long.big": "Long must not be more than %s, found %s", - "argument.long.low": "Long must not be less than %s, found %s", - "argument.nbt.array.invalid": "Invalid array type '%s'", - "argument.nbt.array.mixed": "Can't insert %s into %s", - "argument.nbt.expected.key": "Expected key", - "argument.nbt.expected.value": "Expected value", - "argument.nbt.list.mixed": "Can't insert %s into list of %s", - "argument.nbt.trailing": "Unexpected trailing data", - "argument.player.entities": "Only players may be affected by this command, but the provided selector includes entities", - "argument.player.toomany": "Only one player is allowed, but the provided selector allows more than one", - "argument.player.unknown": "That player does not exist", - "argument.pos.missing.double": "Expected a coordinate", - "argument.pos.missing.int": "Expected a block position", - "argument.pos.mixed": "Cannot mix world & local coordinates (everything must either use ^ or not)", - "argument.pos.outofbounds": "That position is outside the allowed boundaries.", - "argument.pos.outofworld": "That position is out of this world!", - "argument.pos.unloaded": "That position is not loaded", - "argument.pos2d.incomplete": "Incomplete (expected 2 coordinates)", - "argument.pos3d.incomplete": "Incomplete (expected 3 coordinates)", - "argument.range.empty": "Expected value or range of values", - "argument.range.ints": "Only whole numbers allowed, not decimals", - "argument.range.swapped": "Min cannot be bigger than max", - "argument.resource_tag.invalid_type": "Tag '%s' has wrong type '%s' (expected '%s')", - "argument.resource_tag.not_found": "Can't find tag '%s' of type '%s'", - "argument.resource.invalid_type": "Element '%s' has wrong type '%s' (expected '%s')", - "argument.resource.not_found": "Can't find element '%s' of type '%s'", - "argument.rotation.incomplete": "Incomplete (expected 2 coordinates)", - "argument.scoreboardDisplaySlot.invalid": "Unknown display slot '%s'", - "argument.scoreHolder.empty": "No relevant score holders could be found", - "argument.style.invalid": "Invalid style: %s", - "argument.time.invalid_tick_count": "Tick count must be non-negative", - "argument.time.invalid_unit": "Invalid unit", - "argument.time.tick_count_too_low": "Tick count must not be less than %s, found %s", - "argument.uuid.invalid": "Invalid UUID", - "arguments.block.tag.unknown": "Unknown block tag '%s'", - "arguments.function.tag.unknown": "Unknown function tag '%s'", - "arguments.function.unknown": "Unknown function %s", - "arguments.item.overstacked": "%s can only stack up to %s", - "arguments.item.tag.unknown": "Unknown item tag '%s'", - "arguments.nbtpath.node.invalid": "Invalid NBT path element", - "arguments.nbtpath.nothing_found": "Found no elements matching %s", - "arguments.nbtpath.too_deep": "Resulting NBT too deeply nested", - "arguments.nbtpath.too_large": "Resulting NBT too large", - "arguments.objective.notFound": "Unknown scoreboard objective '%s'", - "arguments.objective.readonly": "Scoreboard objective '%s' is read-only", - "arguments.operation.div0": "Cannot divide by zero", - "arguments.operation.invalid": "Invalid operation", - "arguments.swizzle.invalid": "Invalid swizzle, expected combination of 'x', 'y' and 'z'", - "attribute.modifier.equals.0": "%s %s", - "attribute.modifier.equals.1": "%s%% %s", - "attribute.modifier.equals.2": "%s%% %s", - "attribute.modifier.plus.0": "+%s %s", - "attribute.modifier.plus.1": "+%s%% %s", - "attribute.modifier.plus.2": "+%s%% %s", - "attribute.modifier.take.0": "-%s %s", - "attribute.modifier.take.1": "-%s%% %s", - "attribute.modifier.take.2": "-%s%% %s", - "attribute.name.generic.armor": "Armor", - "attribute.name.generic.armor_toughness": "Armor Toughness", - "attribute.name.generic.attack_damage": "Attack Damage", - "attribute.name.generic.attack_knockback": "Attack Knockback", - "attribute.name.generic.attack_speed": "Attack Speed", - "attribute.name.generic.flying_speed": "Flying Speed", - "attribute.name.generic.follow_range": "Mob Follow Range", - "attribute.name.generic.knockback_resistance": "Knockback Resistance", - "attribute.name.generic.luck": "Luck", - "attribute.name.generic.max_absorption": "Max Absorption", - "attribute.name.generic.max_health": "Max Health", - "attribute.name.generic.movement_speed": "Speed", - "attribute.name.horse.jump_strength": "Horse Jump Strength", - "attribute.name.zombie.spawn_reinforcements": "Zombie Reinforcements", - "biome.minecraft.badlands": "Badlands", - "biome.minecraft.bamboo_jungle": "Bamboo Jungle", - "biome.minecraft.basalt_deltas": "Basalt Deltas", - "biome.minecraft.beach": "Beach", - "biome.minecraft.birch_forest": "Birch Forest", - "biome.minecraft.cherry_grove": "Cherry Grove", - "biome.minecraft.cold_ocean": "Cold Ocean", - "biome.minecraft.crimson_forest": "Crimson Forest", - "biome.minecraft.dark_forest": "Dark Forest", - "biome.minecraft.deep_cold_ocean": "Deep Cold Ocean", - "biome.minecraft.deep_dark": "Deep Dark", - "biome.minecraft.deep_frozen_ocean": "Deep Frozen Ocean", - "biome.minecraft.deep_lukewarm_ocean": "Deep Lukewarm Ocean", - "biome.minecraft.deep_ocean": "Deep Ocean", - "biome.minecraft.desert": "Desert", - "biome.minecraft.dripstone_caves": "Dripstone Caves", - "biome.minecraft.end_barrens": "End Barrens", - "biome.minecraft.end_highlands": "End Highlands", - "biome.minecraft.end_midlands": "End Midlands", - "biome.minecraft.eroded_badlands": "Eroded Badlands", - "biome.minecraft.flower_forest": "Flower Forest", - "biome.minecraft.forest": "Forest", - "biome.minecraft.frozen_ocean": "Frozen Ocean", - "biome.minecraft.frozen_peaks": "Frozen Peaks", - "biome.minecraft.frozen_river": "Frozen River", - "biome.minecraft.grove": "Grove", - "biome.minecraft.ice_spikes": "Ice Spikes", - "biome.minecraft.jagged_peaks": "Jagged Peaks", - "biome.minecraft.jungle": "Jungle", - "biome.minecraft.lukewarm_ocean": "Lukewarm Ocean", - "biome.minecraft.lush_caves": "Lush Caves", - "biome.minecraft.mangrove_swamp": "Mangrove Swamp", - "biome.minecraft.meadow": "Meadow", - "biome.minecraft.mushroom_fields": "Mushroom Fields", - "biome.minecraft.nether_wastes": "Nether Wastes", - "biome.minecraft.ocean": "Ocean", - "biome.minecraft.old_growth_birch_forest": "Old Growth Birch Forest", - "biome.minecraft.old_growth_pine_taiga": "Old Growth Pine Taiga", - "biome.minecraft.old_growth_spruce_taiga": "Old Growth Spruce Taiga", - "biome.minecraft.plains": "Plains", - "biome.minecraft.river": "River", - "biome.minecraft.savanna": "Savanna", - "biome.minecraft.savanna_plateau": "Savanna Plateau", - "biome.minecraft.small_end_islands": "Small End Islands", - "biome.minecraft.snowy_beach": "Snowy Beach", - "biome.minecraft.snowy_plains": "Snowy Plains", - "biome.minecraft.snowy_slopes": "Snowy Slopes", - "biome.minecraft.snowy_taiga": "Snowy Taiga", - "biome.minecraft.soul_sand_valley": "Soul Sand Valley", - "biome.minecraft.sparse_jungle": "Sparse Jungle", - "biome.minecraft.stony_peaks": "Stony Peaks", - "biome.minecraft.stony_shore": "Stony Shore", - "biome.minecraft.sunflower_plains": "Sunflower Plains", - "biome.minecraft.swamp": "Swamp", - "biome.minecraft.taiga": "Taiga", - "biome.minecraft.the_end": "The End", - "biome.minecraft.the_void": "The Void", - "biome.minecraft.warm_ocean": "Warm Ocean", - "biome.minecraft.warped_forest": "Warped Forest", - "biome.minecraft.windswept_forest": "Windswept Forest", - "biome.minecraft.windswept_gravelly_hills": "Windswept Gravelly Hills", - "biome.minecraft.windswept_hills": "Windswept Hills", - "biome.minecraft.windswept_savanna": "Windswept Savanna", - "biome.minecraft.wooded_badlands": "Wooded Badlands", - "block.minecraft.acacia_button": "Acacia Button", - "block.minecraft.acacia_door": "Acacia Door", - "block.minecraft.acacia_fence": "Acacia Fence", - "block.minecraft.acacia_fence_gate": "Acacia Fence Gate", - "block.minecraft.acacia_hanging_sign": "Acacia Hanging Sign", - "block.minecraft.acacia_leaves": "Acacia Leaves", - "block.minecraft.acacia_log": "Acacia Log", - "block.minecraft.acacia_planks": "Acacia Planks", - "block.minecraft.acacia_pressure_plate": "Acacia Pressure Plate", - "block.minecraft.acacia_sapling": "Acacia Sapling", - "block.minecraft.acacia_sign": "Acacia Sign", - "block.minecraft.acacia_slab": "Acacia Slab", - "block.minecraft.acacia_stairs": "Acacia Stairs", - "block.minecraft.acacia_trapdoor": "Acacia Trapdoor", - "block.minecraft.acacia_wall_hanging_sign": "Acacia Wall Hanging Sign", - "block.minecraft.acacia_wall_sign": "Acacia Wall Sign", - "block.minecraft.acacia_wood": "Acacia Wood", - "block.minecraft.activator_rail": "Activator Rail", - "block.minecraft.air": "Air", - "block.minecraft.allium": "Allium", - "block.minecraft.amethyst_block": "Block of Amethyst", - "block.minecraft.amethyst_cluster": "Amethyst Cluster", - "block.minecraft.ancient_debris": "Ancient Debris", - "block.minecraft.andesite": "Andesite", - "block.minecraft.andesite_slab": "Andesite Slab", - "block.minecraft.andesite_stairs": "Andesite Stairs", - "block.minecraft.andesite_wall": "Andesite Wall", - "block.minecraft.anvil": "Anvil", - "block.minecraft.attached_melon_stem": "Attached Melon Stem", - "block.minecraft.attached_pumpkin_stem": "Attached Pumpkin Stem", - "block.minecraft.azalea": "Azalea", - "block.minecraft.azalea_leaves": "Azalea Leaves", - "block.minecraft.azure_bluet": "Azure Bluet", - "block.minecraft.bamboo": "Bamboo", - "block.minecraft.bamboo_block": "Block of Bamboo", - "block.minecraft.bamboo_button": "Bamboo Button", - "block.minecraft.bamboo_door": "Bamboo Door", - "block.minecraft.bamboo_fence": "Bamboo Fence", - "block.minecraft.bamboo_fence_gate": "Bamboo Fence Gate", - "block.minecraft.bamboo_hanging_sign": "Bamboo Hanging Sign", - "block.minecraft.bamboo_mosaic": "Bamboo Mosaic", - "block.minecraft.bamboo_mosaic_slab": "Bamboo Mosaic Slab", - "block.minecraft.bamboo_mosaic_stairs": "Bamboo Mosaic Stairs", - "block.minecraft.bamboo_planks": "Bamboo Planks", - "block.minecraft.bamboo_pressure_plate": "Bamboo Pressure Plate", - "block.minecraft.bamboo_sapling": "Bamboo Shoot", - "block.minecraft.bamboo_sign": "Bamboo Sign", - "block.minecraft.bamboo_slab": "Bamboo Slab", - "block.minecraft.bamboo_stairs": "Bamboo Stairs", - "block.minecraft.bamboo_trapdoor": "Bamboo Trapdoor", - "block.minecraft.bamboo_wall_hanging_sign": "Bamboo Wall Hanging Sign", - "block.minecraft.bamboo_wall_sign": "Bamboo Wall Sign", - "block.minecraft.banner.base.black": "Fully Black Field", - "block.minecraft.banner.base.blue": "Fully Blue Field", - "block.minecraft.banner.base.brown": "Fully Brown Field", - "block.minecraft.banner.base.cyan": "Fully Cyan Field", - "block.minecraft.banner.base.gray": "Fully Gray Field", - "block.minecraft.banner.base.green": "Fully Green Field", - "block.minecraft.banner.base.light_blue": "Fully Light Blue Field", - "block.minecraft.banner.base.light_gray": "Fully Light Gray Field", - "block.minecraft.banner.base.lime": "Fully Lime Field", - "block.minecraft.banner.base.magenta": "Fully Magenta Field", - "block.minecraft.banner.base.orange": "Fully Orange Field", - "block.minecraft.banner.base.pink": "Fully Pink Field", - "block.minecraft.banner.base.purple": "Fully Purple Field", - "block.minecraft.banner.base.red": "Fully Red Field", - "block.minecraft.banner.base.white": "Fully White Field", - "block.minecraft.banner.base.yellow": "Fully Yellow Field", - "block.minecraft.banner.border.black": "Black Bordure", - "block.minecraft.banner.border.blue": "Blue Bordure", - "block.minecraft.banner.border.brown": "Brown Bordure", - "block.minecraft.banner.border.cyan": "Cyan Bordure", - "block.minecraft.banner.border.gray": "Gray Bordure", - "block.minecraft.banner.border.green": "Green Bordure", - "block.minecraft.banner.border.light_blue": "Light Blue Bordure", - "block.minecraft.banner.border.light_gray": "Light Gray Bordure", - "block.minecraft.banner.border.lime": "Lime Bordure", - "block.minecraft.banner.border.magenta": "Magenta Bordure", - "block.minecraft.banner.border.orange": "Orange Bordure", - "block.minecraft.banner.border.pink": "Pink Bordure", - "block.minecraft.banner.border.purple": "Purple Bordure", - "block.minecraft.banner.border.red": "Red Bordure", - "block.minecraft.banner.border.white": "White Bordure", - "block.minecraft.banner.border.yellow": "Yellow Bordure", - "block.minecraft.banner.bricks.black": "Black Field Masoned", - "block.minecraft.banner.bricks.blue": "Blue Field Masoned", - "block.minecraft.banner.bricks.brown": "Brown Field Masoned", - "block.minecraft.banner.bricks.cyan": "Cyan Field Masoned", - "block.minecraft.banner.bricks.gray": "Gray Field Masoned", - "block.minecraft.banner.bricks.green": "Green Field Masoned", - "block.minecraft.banner.bricks.light_blue": "Light Blue Field Masoned", - "block.minecraft.banner.bricks.light_gray": "Light Gray Field Masoned", - "block.minecraft.banner.bricks.lime": "Lime Field Masoned", - "block.minecraft.banner.bricks.magenta": "Magenta Field Masoned", - "block.minecraft.banner.bricks.orange": "Orange Field Masoned", - "block.minecraft.banner.bricks.pink": "Pink Field Masoned", - "block.minecraft.banner.bricks.purple": "Purple Field Masoned", - "block.minecraft.banner.bricks.red": "Red Field Masoned", - "block.minecraft.banner.bricks.white": "White Field Masoned", - "block.minecraft.banner.bricks.yellow": "Yellow Field Masoned", - "block.minecraft.banner.circle.black": "Black Roundel", - "block.minecraft.banner.circle.blue": "Blue Roundel", - "block.minecraft.banner.circle.brown": "Brown Roundel", - "block.minecraft.banner.circle.cyan": "Cyan Roundel", - "block.minecraft.banner.circle.gray": "Gray Roundel", - "block.minecraft.banner.circle.green": "Green Roundel", - "block.minecraft.banner.circle.light_blue": "Light Blue Roundel", - "block.minecraft.banner.circle.light_gray": "Light Gray Roundel", - "block.minecraft.banner.circle.lime": "Lime Roundel", - "block.minecraft.banner.circle.magenta": "Magenta Roundel", - "block.minecraft.banner.circle.orange": "Orange Roundel", - "block.minecraft.banner.circle.pink": "Pink Roundel", - "block.minecraft.banner.circle.purple": "Purple Roundel", - "block.minecraft.banner.circle.red": "Red Roundel", - "block.minecraft.banner.circle.white": "White Roundel", - "block.minecraft.banner.circle.yellow": "Yellow Roundel", - "block.minecraft.banner.creeper.black": "Black Creeper Charge", - "block.minecraft.banner.creeper.blue": "Blue Creeper Charge", - "block.minecraft.banner.creeper.brown": "Brown Creeper Charge", - "block.minecraft.banner.creeper.cyan": "Cyan Creeper Charge", - "block.minecraft.banner.creeper.gray": "Gray Creeper Charge", - "block.minecraft.banner.creeper.green": "Green Creeper Charge", - "block.minecraft.banner.creeper.light_blue": "Light Blue Creeper Charge", - "block.minecraft.banner.creeper.light_gray": "Light Gray Creeper Charge", - "block.minecraft.banner.creeper.lime": "Lime Creeper Charge", - "block.minecraft.banner.creeper.magenta": "Magenta Creeper Charge", - "block.minecraft.banner.creeper.orange": "Orange Creeper Charge", - "block.minecraft.banner.creeper.pink": "Pink Creeper Charge", - "block.minecraft.banner.creeper.purple": "Purple Creeper Charge", - "block.minecraft.banner.creeper.red": "Red Creeper Charge", - "block.minecraft.banner.creeper.white": "White Creeper Charge", - "block.minecraft.banner.creeper.yellow": "Yellow Creeper Charge", - "block.minecraft.banner.cross.black": "Black Saltire", - "block.minecraft.banner.cross.blue": "Blue Saltire", - "block.minecraft.banner.cross.brown": "Brown Saltire", - "block.minecraft.banner.cross.cyan": "Cyan Saltire", - "block.minecraft.banner.cross.gray": "Gray Saltire", - "block.minecraft.banner.cross.green": "Green Saltire", - "block.minecraft.banner.cross.light_blue": "Light Blue Saltire", - "block.minecraft.banner.cross.light_gray": "Light Gray Saltire", - "block.minecraft.banner.cross.lime": "Lime Saltire", - "block.minecraft.banner.cross.magenta": "Magenta Saltire", - "block.minecraft.banner.cross.orange": "Orange Saltire", - "block.minecraft.banner.cross.pink": "Pink Saltire", - "block.minecraft.banner.cross.purple": "Purple Saltire", - "block.minecraft.banner.cross.red": "Red Saltire", - "block.minecraft.banner.cross.white": "White Saltire", - "block.minecraft.banner.cross.yellow": "Yellow Saltire", - "block.minecraft.banner.curly_border.black": "Black Bordure Indented", - "block.minecraft.banner.curly_border.blue": "Blue Bordure Indented", - "block.minecraft.banner.curly_border.brown": "Brown Bordure Indented", - "block.minecraft.banner.curly_border.cyan": "Cyan Bordure Indented", - "block.minecraft.banner.curly_border.gray": "Gray Bordure Indented", - "block.minecraft.banner.curly_border.green": "Green Bordure Indented", - "block.minecraft.banner.curly_border.light_blue": "Light Blue Bordure Indented", - "block.minecraft.banner.curly_border.light_gray": "Light Gray Bordure Indented", - "block.minecraft.banner.curly_border.lime": "Lime Bordure Indented", - "block.minecraft.banner.curly_border.magenta": "Magenta Bordure Indented", - "block.minecraft.banner.curly_border.orange": "Orange Bordure Indented", - "block.minecraft.banner.curly_border.pink": "Pink Bordure Indented", - "block.minecraft.banner.curly_border.purple": "Purple Bordure Indented", - "block.minecraft.banner.curly_border.red": "Red Bordure Indented", - "block.minecraft.banner.curly_border.white": "White Bordure Indented", - "block.minecraft.banner.curly_border.yellow": "Yellow Bordure Indented", - "block.minecraft.banner.diagonal_left.black": "Black Per Bend Sinister", - "block.minecraft.banner.diagonal_left.blue": "Blue Per Bend Sinister", - "block.minecraft.banner.diagonal_left.brown": "Brown Per Bend Sinister", - "block.minecraft.banner.diagonal_left.cyan": "Cyan Per Bend Sinister", - "block.minecraft.banner.diagonal_left.gray": "Gray Per Bend Sinister", - "block.minecraft.banner.diagonal_left.green": "Green Per Bend Sinister", - "block.minecraft.banner.diagonal_left.light_blue": "Light Blue Per Bend Sinister", - "block.minecraft.banner.diagonal_left.light_gray": "Light Gray Per Bend Sinister", - "block.minecraft.banner.diagonal_left.lime": "Lime Per Bend Sinister", - "block.minecraft.banner.diagonal_left.magenta": "Magenta Per Bend Sinister", - "block.minecraft.banner.diagonal_left.orange": "Orange Per Bend Sinister", - "block.minecraft.banner.diagonal_left.pink": "Pink Per Bend Sinister", - "block.minecraft.banner.diagonal_left.purple": "Purple Per Bend Sinister", - "block.minecraft.banner.diagonal_left.red": "Red Per Bend Sinister", - "block.minecraft.banner.diagonal_left.white": "White Per Bend Sinister", - "block.minecraft.banner.diagonal_left.yellow": "Yellow Per Bend Sinister", - "block.minecraft.banner.diagonal_right.black": "Black Per Bend", - "block.minecraft.banner.diagonal_right.blue": "Blue Per Bend", - "block.minecraft.banner.diagonal_right.brown": "Brown Per Bend", - "block.minecraft.banner.diagonal_right.cyan": "Cyan Per Bend", - "block.minecraft.banner.diagonal_right.gray": "Gray Per Bend", - "block.minecraft.banner.diagonal_right.green": "Green Per Bend", - "block.minecraft.banner.diagonal_right.light_blue": "Light Blue Per Bend", - "block.minecraft.banner.diagonal_right.light_gray": "Light Gray Per Bend", - "block.minecraft.banner.diagonal_right.lime": "Lime Per Bend", - "block.minecraft.banner.diagonal_right.magenta": "Magenta Per Bend", - "block.minecraft.banner.diagonal_right.orange": "Orange Per Bend", - "block.minecraft.banner.diagonal_right.pink": "Pink Per Bend", - "block.minecraft.banner.diagonal_right.purple": "Purple Per Bend", - "block.minecraft.banner.diagonal_right.red": "Red Per Bend", - "block.minecraft.banner.diagonal_right.white": "White Per Bend", - "block.minecraft.banner.diagonal_right.yellow": "Yellow Per Bend", - "block.minecraft.banner.diagonal_up_left.black": "Black Per Bend Inverted", - "block.minecraft.banner.diagonal_up_left.blue": "Blue Per Bend Inverted", - "block.minecraft.banner.diagonal_up_left.brown": "Brown Per Bend Inverted", - "block.minecraft.banner.diagonal_up_left.cyan": "Cyan Per Bend Inverted", - "block.minecraft.banner.diagonal_up_left.gray": "Gray Per Bend Inverted", - "block.minecraft.banner.diagonal_up_left.green": "Green Per Bend Inverted", - "block.minecraft.banner.diagonal_up_left.light_blue": "Light Blue Per Bend Inverted", - "block.minecraft.banner.diagonal_up_left.light_gray": "Light Gray Per Bend Inverted", - "block.minecraft.banner.diagonal_up_left.lime": "Lime Per Bend Inverted", - "block.minecraft.banner.diagonal_up_left.magenta": "Magenta Per Bend Inverted", - "block.minecraft.banner.diagonal_up_left.orange": "Orange Per Bend Inverted", - "block.minecraft.banner.diagonal_up_left.pink": "Pink Per Bend Inverted", - "block.minecraft.banner.diagonal_up_left.purple": "Purple Per Bend Inverted", - "block.minecraft.banner.diagonal_up_left.red": "Red Per Bend Inverted", - "block.minecraft.banner.diagonal_up_left.white": "White Per Bend Inverted", - "block.minecraft.banner.diagonal_up_left.yellow": "Yellow Per Bend Inverted", - "block.minecraft.banner.diagonal_up_right.black": "Black Per Bend Sinister Inverted", - "block.minecraft.banner.diagonal_up_right.blue": "Blue Per Bend Sinister Inverted", - "block.minecraft.banner.diagonal_up_right.brown": "Brown Per Bend Sinister Inverted", - "block.minecraft.banner.diagonal_up_right.cyan": "Cyan Per Bend Sinister Inverted", - "block.minecraft.banner.diagonal_up_right.gray": "Gray Per Bend Sinister Inverted", - "block.minecraft.banner.diagonal_up_right.green": "Green Per Bend Sinister Inverted", - "block.minecraft.banner.diagonal_up_right.light_blue": "Light Blue Per Bend Sinister Inverted", - "block.minecraft.banner.diagonal_up_right.light_gray": "Light Gray Per Bend Sinister Inverted", - "block.minecraft.banner.diagonal_up_right.lime": "Lime Per Bend Sinister Inverted", - "block.minecraft.banner.diagonal_up_right.magenta": "Magenta Per Bend Sinister Inverted", - "block.minecraft.banner.diagonal_up_right.orange": "Orange Per Bend Sinister Inverted", - "block.minecraft.banner.diagonal_up_right.pink": "Pink Per Bend Sinister Inverted", - "block.minecraft.banner.diagonal_up_right.purple": "Purple Per Bend Sinister Inverted", - "block.minecraft.banner.diagonal_up_right.red": "Red Per Bend Sinister Inverted", - "block.minecraft.banner.diagonal_up_right.white": "White Per Bend Sinister Inverted", - "block.minecraft.banner.diagonal_up_right.yellow": "Yellow Per Bend Sinister Inverted", - "block.minecraft.banner.flower.black": "Black Flower Charge", - "block.minecraft.banner.flower.blue": "Blue Flower Charge", - "block.minecraft.banner.flower.brown": "Brown Flower Charge", - "block.minecraft.banner.flower.cyan": "Cyan Flower Charge", - "block.minecraft.banner.flower.gray": "Gray Flower Charge", - "block.minecraft.banner.flower.green": "Green Flower Charge", - "block.minecraft.banner.flower.light_blue": "Light Blue Flower Charge", - "block.minecraft.banner.flower.light_gray": "Light Gray Flower Charge", - "block.minecraft.banner.flower.lime": "Lime Flower Charge", - "block.minecraft.banner.flower.magenta": "Magenta Flower Charge", - "block.minecraft.banner.flower.orange": "Orange Flower Charge", - "block.minecraft.banner.flower.pink": "Pink Flower Charge", - "block.minecraft.banner.flower.purple": "Purple Flower Charge", - "block.minecraft.banner.flower.red": "Red Flower Charge", - "block.minecraft.banner.flower.white": "White Flower Charge", - "block.minecraft.banner.flower.yellow": "Yellow Flower Charge", - "block.minecraft.banner.globe.black": "Black Globe", - "block.minecraft.banner.globe.blue": "Blue Globe", - "block.minecraft.banner.globe.brown": "Brown Globe", - "block.minecraft.banner.globe.cyan": "Cyan Globe", - "block.minecraft.banner.globe.gray": "Gray Globe", - "block.minecraft.banner.globe.green": "Green Globe", - "block.minecraft.banner.globe.light_blue": "Light Blue Globe", - "block.minecraft.banner.globe.light_gray": "Light Gray Globe", - "block.minecraft.banner.globe.lime": "Lime Globe", - "block.minecraft.banner.globe.magenta": "Magenta Globe", - "block.minecraft.banner.globe.orange": "Orange Globe", - "block.minecraft.banner.globe.pink": "Pink Globe", - "block.minecraft.banner.globe.purple": "Purple Globe", - "block.minecraft.banner.globe.red": "Red Globe", - "block.minecraft.banner.globe.white": "White Globe", - "block.minecraft.banner.globe.yellow": "Yellow Globe", - "block.minecraft.banner.gradient_up.black": "Black Base Gradient", - "block.minecraft.banner.gradient_up.blue": "Blue Base Gradient", - "block.minecraft.banner.gradient_up.brown": "Brown Base Gradient", - "block.minecraft.banner.gradient_up.cyan": "Cyan Base Gradient", - "block.minecraft.banner.gradient_up.gray": "Gray Base Gradient", - "block.minecraft.banner.gradient_up.green": "Green Base Gradient", - "block.minecraft.banner.gradient_up.light_blue": "Light Blue Base Gradient", - "block.minecraft.banner.gradient_up.light_gray": "Light Gray Base Gradient", - "block.minecraft.banner.gradient_up.lime": "Lime Base Gradient", - "block.minecraft.banner.gradient_up.magenta": "Magenta Base Gradient", - "block.minecraft.banner.gradient_up.orange": "Orange Base Gradient", - "block.minecraft.banner.gradient_up.pink": "Pink Base Gradient", - "block.minecraft.banner.gradient_up.purple": "Purple Base Gradient", - "block.minecraft.banner.gradient_up.red": "Red Base Gradient", - "block.minecraft.banner.gradient_up.white": "White Base Gradient", - "block.minecraft.banner.gradient_up.yellow": "Yellow Base Gradient", - "block.minecraft.banner.gradient.black": "Black Gradient", - "block.minecraft.banner.gradient.blue": "Blue Gradient", - "block.minecraft.banner.gradient.brown": "Brown Gradient", - "block.minecraft.banner.gradient.cyan": "Cyan Gradient", - "block.minecraft.banner.gradient.gray": "Gray Gradient", - "block.minecraft.banner.gradient.green": "Green Gradient", - "block.minecraft.banner.gradient.light_blue": "Light Blue Gradient", - "block.minecraft.banner.gradient.light_gray": "Light Gray Gradient", - "block.minecraft.banner.gradient.lime": "Lime Gradient", - "block.minecraft.banner.gradient.magenta": "Magenta Gradient", - "block.minecraft.banner.gradient.orange": "Orange Gradient", - "block.minecraft.banner.gradient.pink": "Pink Gradient", - "block.minecraft.banner.gradient.purple": "Purple Gradient", - "block.minecraft.banner.gradient.red": "Red Gradient", - "block.minecraft.banner.gradient.white": "White Gradient", - "block.minecraft.banner.gradient.yellow": "Yellow Gradient", - "block.minecraft.banner.half_horizontal_bottom.black": "Black Per Fess Inverted", - "block.minecraft.banner.half_horizontal_bottom.blue": "Blue Per Fess Inverted", - "block.minecraft.banner.half_horizontal_bottom.brown": "Brown Per Fess Inverted", - "block.minecraft.banner.half_horizontal_bottom.cyan": "Cyan Per Fess Inverted", - "block.minecraft.banner.half_horizontal_bottom.gray": "Gray Per Fess Inverted", - "block.minecraft.banner.half_horizontal_bottom.green": "Green Per Fess Inverted", - "block.minecraft.banner.half_horizontal_bottom.light_blue": "Light Blue Per Fess Inverted", - "block.minecraft.banner.half_horizontal_bottom.light_gray": "Light Gray Per Fess Inverted", - "block.minecraft.banner.half_horizontal_bottom.lime": "Lime Per Fess Inverted", - "block.minecraft.banner.half_horizontal_bottom.magenta": "Magenta Per Fess Inverted", - "block.minecraft.banner.half_horizontal_bottom.orange": "Orange Per Fess Inverted", - "block.minecraft.banner.half_horizontal_bottom.pink": "Pink Per Fess Inverted", - "block.minecraft.banner.half_horizontal_bottom.purple": "Purple Per Fess Inverted", - "block.minecraft.banner.half_horizontal_bottom.red": "Red Per Fess Inverted", - "block.minecraft.banner.half_horizontal_bottom.white": "White Per Fess Inverted", - "block.minecraft.banner.half_horizontal_bottom.yellow": "Yellow Per Fess Inverted", - "block.minecraft.banner.half_horizontal.black": "Black Per Fess", - "block.minecraft.banner.half_horizontal.blue": "Blue Per Fess", - "block.minecraft.banner.half_horizontal.brown": "Brown Per Fess", - "block.minecraft.banner.half_horizontal.cyan": "Cyan Per Fess", - "block.minecraft.banner.half_horizontal.gray": "Gray Per Fess", - "block.minecraft.banner.half_horizontal.green": "Green Per Fess", - "block.minecraft.banner.half_horizontal.light_blue": "Light Blue Per Fess", - "block.minecraft.banner.half_horizontal.light_gray": "Light Gray Per Fess", - "block.minecraft.banner.half_horizontal.lime": "Lime Per Fess", - "block.minecraft.banner.half_horizontal.magenta": "Magenta Per Fess", - "block.minecraft.banner.half_horizontal.orange": "Orange Per Fess", - "block.minecraft.banner.half_horizontal.pink": "Pink Per Fess", - "block.minecraft.banner.half_horizontal.purple": "Purple Per Fess", - "block.minecraft.banner.half_horizontal.red": "Red Per Fess", - "block.minecraft.banner.half_horizontal.white": "White Per Fess", - "block.minecraft.banner.half_horizontal.yellow": "Yellow Per Fess", - "block.minecraft.banner.half_vertical_right.black": "Black Per Pale Inverted", - "block.minecraft.banner.half_vertical_right.blue": "Blue Per Pale Inverted", - "block.minecraft.banner.half_vertical_right.brown": "Brown Per Pale Inverted", - "block.minecraft.banner.half_vertical_right.cyan": "Cyan Per Pale Inverted", - "block.minecraft.banner.half_vertical_right.gray": "Gray Per Pale Inverted", - "block.minecraft.banner.half_vertical_right.green": "Green Per Pale Inverted", - "block.minecraft.banner.half_vertical_right.light_blue": "Light Blue Per Pale Inverted", - "block.minecraft.banner.half_vertical_right.light_gray": "Light Gray Per Pale Inverted", - "block.minecraft.banner.half_vertical_right.lime": "Lime Per Pale Inverted", - "block.minecraft.banner.half_vertical_right.magenta": "Magenta Per Pale Inverted", - "block.minecraft.banner.half_vertical_right.orange": "Orange Per Pale Inverted", - "block.minecraft.banner.half_vertical_right.pink": "Pink Per Pale Inverted", - "block.minecraft.banner.half_vertical_right.purple": "Purple Per Pale Inverted", - "block.minecraft.banner.half_vertical_right.red": "Red Per Pale Inverted", - "block.minecraft.banner.half_vertical_right.white": "White Per Pale Inverted", - "block.minecraft.banner.half_vertical_right.yellow": "Yellow Per Pale Inverted", - "block.minecraft.banner.half_vertical.black": "Black Per Pale", - "block.minecraft.banner.half_vertical.blue": "Blue Per Pale", - "block.minecraft.banner.half_vertical.brown": "Brown Per Pale", - "block.minecraft.banner.half_vertical.cyan": "Cyan Per Pale", - "block.minecraft.banner.half_vertical.gray": "Gray Per Pale", - "block.minecraft.banner.half_vertical.green": "Green Per Pale", - "block.minecraft.banner.half_vertical.light_blue": "Light Blue Per Pale", - "block.minecraft.banner.half_vertical.light_gray": "Light Gray Per Pale", - "block.minecraft.banner.half_vertical.lime": "Lime Per Pale", - "block.minecraft.banner.half_vertical.magenta": "Magenta Per Pale", - "block.minecraft.banner.half_vertical.orange": "Orange Per Pale", - "block.minecraft.banner.half_vertical.pink": "Pink Per Pale", - "block.minecraft.banner.half_vertical.purple": "Purple Per Pale", - "block.minecraft.banner.half_vertical.red": "Red Per Pale", - "block.minecraft.banner.half_vertical.white": "White Per Pale", - "block.minecraft.banner.half_vertical.yellow": "Yellow Per Pale", - "block.minecraft.banner.mojang.black": "Black Thing", - "block.minecraft.banner.mojang.blue": "Blue Thing", - "block.minecraft.banner.mojang.brown": "Brown Thing", - "block.minecraft.banner.mojang.cyan": "Cyan Thing", - "block.minecraft.banner.mojang.gray": "Gray Thing", - "block.minecraft.banner.mojang.green": "Green Thing", - "block.minecraft.banner.mojang.light_blue": "Light Blue Thing", - "block.minecraft.banner.mojang.light_gray": "Light Gray Thing", - "block.minecraft.banner.mojang.lime": "Lime Thing", - "block.minecraft.banner.mojang.magenta": "Magenta Thing", - "block.minecraft.banner.mojang.orange": "Orange Thing", - "block.minecraft.banner.mojang.pink": "Pink Thing", - "block.minecraft.banner.mojang.purple": "Purple Thing", - "block.minecraft.banner.mojang.red": "Red Thing", - "block.minecraft.banner.mojang.white": "White Thing", - "block.minecraft.banner.mojang.yellow": "Yellow Thing", - "block.minecraft.banner.piglin.black": "Black Snout", - "block.minecraft.banner.piglin.blue": "Blue Snout", - "block.minecraft.banner.piglin.brown": "Brown Snout", - "block.minecraft.banner.piglin.cyan": "Cyan Snout", - "block.minecraft.banner.piglin.gray": "Gray Snout", - "block.minecraft.banner.piglin.green": "Green Snout", - "block.minecraft.banner.piglin.light_blue": "Light Blue Snout", - "block.minecraft.banner.piglin.light_gray": "Light Gray Snout", - "block.minecraft.banner.piglin.lime": "Lime Snout", - "block.minecraft.banner.piglin.magenta": "Magenta Snout", - "block.minecraft.banner.piglin.orange": "Orange Snout", - "block.minecraft.banner.piglin.pink": "Pink Snout", - "block.minecraft.banner.piglin.purple": "Purple Snout", - "block.minecraft.banner.piglin.red": "Red Snout", - "block.minecraft.banner.piglin.white": "White Snout", - "block.minecraft.banner.piglin.yellow": "Yellow Snout", - "block.minecraft.banner.rhombus.black": "Black Lozenge", - "block.minecraft.banner.rhombus.blue": "Blue Lozenge", - "block.minecraft.banner.rhombus.brown": "Brown Lozenge", - "block.minecraft.banner.rhombus.cyan": "Cyan Lozenge", - "block.minecraft.banner.rhombus.gray": "Gray Lozenge", - "block.minecraft.banner.rhombus.green": "Green Lozenge", - "block.minecraft.banner.rhombus.light_blue": "Light Blue Lozenge", - "block.minecraft.banner.rhombus.light_gray": "Light Gray Lozenge", - "block.minecraft.banner.rhombus.lime": "Lime Lozenge", - "block.minecraft.banner.rhombus.magenta": "Magenta Lozenge", - "block.minecraft.banner.rhombus.orange": "Orange Lozenge", - "block.minecraft.banner.rhombus.pink": "Pink Lozenge", - "block.minecraft.banner.rhombus.purple": "Purple Lozenge", - "block.minecraft.banner.rhombus.red": "Red Lozenge", - "block.minecraft.banner.rhombus.white": "White Lozenge", - "block.minecraft.banner.rhombus.yellow": "Yellow Lozenge", - "block.minecraft.banner.skull.black": "Black Skull Charge", - "block.minecraft.banner.skull.blue": "Blue Skull Charge", - "block.minecraft.banner.skull.brown": "Brown Skull Charge", - "block.minecraft.banner.skull.cyan": "Cyan Skull Charge", - "block.minecraft.banner.skull.gray": "Gray Skull Charge", - "block.minecraft.banner.skull.green": "Green Skull Charge", - "block.minecraft.banner.skull.light_blue": "Light Blue Skull Charge", - "block.minecraft.banner.skull.light_gray": "Light Gray Skull Charge", - "block.minecraft.banner.skull.lime": "Lime Skull Charge", - "block.minecraft.banner.skull.magenta": "Magenta Skull Charge", - "block.minecraft.banner.skull.orange": "Orange Skull Charge", - "block.minecraft.banner.skull.pink": "Pink Skull Charge", - "block.minecraft.banner.skull.purple": "Purple Skull Charge", - "block.minecraft.banner.skull.red": "Red Skull Charge", - "block.minecraft.banner.skull.white": "White Skull Charge", - "block.minecraft.banner.skull.yellow": "Yellow Skull Charge", - "block.minecraft.banner.small_stripes.black": "Black Paly", - "block.minecraft.banner.small_stripes.blue": "Blue Paly", - "block.minecraft.banner.small_stripes.brown": "Brown Paly", - "block.minecraft.banner.small_stripes.cyan": "Cyan Paly", - "block.minecraft.banner.small_stripes.gray": "Gray Paly", - "block.minecraft.banner.small_stripes.green": "Green Paly", - "block.minecraft.banner.small_stripes.light_blue": "Light Blue Paly", - "block.minecraft.banner.small_stripes.light_gray": "Light Gray Paly", - "block.minecraft.banner.small_stripes.lime": "Lime Paly", - "block.minecraft.banner.small_stripes.magenta": "Magenta Paly", - "block.minecraft.banner.small_stripes.orange": "Orange Paly", - "block.minecraft.banner.small_stripes.pink": "Pink Paly", - "block.minecraft.banner.small_stripes.purple": "Purple Paly", - "block.minecraft.banner.small_stripes.red": "Red Paly", - "block.minecraft.banner.small_stripes.white": "White Paly", - "block.minecraft.banner.small_stripes.yellow": "Yellow Paly", - "block.minecraft.banner.square_bottom_left.black": "Black Base Dexter Canton", - "block.minecraft.banner.square_bottom_left.blue": "Blue Base Dexter Canton", - "block.minecraft.banner.square_bottom_left.brown": "Brown Base Dexter Canton", - "block.minecraft.banner.square_bottom_left.cyan": "Cyan Base Dexter Canton", - "block.minecraft.banner.square_bottom_left.gray": "Gray Base Dexter Canton", - "block.minecraft.banner.square_bottom_left.green": "Green Base Dexter Canton", - "block.minecraft.banner.square_bottom_left.light_blue": "Light Blue Base Dexter Canton", - "block.minecraft.banner.square_bottom_left.light_gray": "Light Gray Base Dexter Canton", - "block.minecraft.banner.square_bottom_left.lime": "Lime Base Dexter Canton", - "block.minecraft.banner.square_bottom_left.magenta": "Magenta Base Dexter Canton", - "block.minecraft.banner.square_bottom_left.orange": "Orange Base Dexter Canton", - "block.minecraft.banner.square_bottom_left.pink": "Pink Base Dexter Canton", - "block.minecraft.banner.square_bottom_left.purple": "Purple Base Dexter Canton", - "block.minecraft.banner.square_bottom_left.red": "Red Base Dexter Canton", - "block.minecraft.banner.square_bottom_left.white": "White Base Dexter Canton", - "block.minecraft.banner.square_bottom_left.yellow": "Yellow Base Dexter Canton", - "block.minecraft.banner.square_bottom_right.black": "Black Base Sinister Canton", - "block.minecraft.banner.square_bottom_right.blue": "Blue Base Sinister Canton", - "block.minecraft.banner.square_bottom_right.brown": "Brown Base Sinister Canton", - "block.minecraft.banner.square_bottom_right.cyan": "Cyan Base Sinister Canton", - "block.minecraft.banner.square_bottom_right.gray": "Gray Base Sinister Canton", - "block.minecraft.banner.square_bottom_right.green": "Green Base Sinister Canton", - "block.minecraft.banner.square_bottom_right.light_blue": "Light Blue Base Sinister Canton", - "block.minecraft.banner.square_bottom_right.light_gray": "Light Gray Base Sinister Canton", - "block.minecraft.banner.square_bottom_right.lime": "Lime Base Sinister Canton", - "block.minecraft.banner.square_bottom_right.magenta": "Magenta Base Sinister Canton", - "block.minecraft.banner.square_bottom_right.orange": "Orange Base Sinister Canton", - "block.minecraft.banner.square_bottom_right.pink": "Pink Base Sinister Canton", - "block.minecraft.banner.square_bottom_right.purple": "Purple Base Sinister Canton", - "block.minecraft.banner.square_bottom_right.red": "Red Base Sinister Canton", - "block.minecraft.banner.square_bottom_right.white": "White Base Sinister Canton", - "block.minecraft.banner.square_bottom_right.yellow": "Yellow Base Sinister Canton", - "block.minecraft.banner.square_top_left.black": "Black Chief Dexter Canton", - "block.minecraft.banner.square_top_left.blue": "Blue Chief Dexter Canton", - "block.minecraft.banner.square_top_left.brown": "Brown Chief Dexter Canton", - "block.minecraft.banner.square_top_left.cyan": "Cyan Chief Dexter Canton", - "block.minecraft.banner.square_top_left.gray": "Gray Chief Dexter Canton", - "block.minecraft.banner.square_top_left.green": "Green Chief Dexter Canton", - "block.minecraft.banner.square_top_left.light_blue": "Light Blue Chief Dexter Canton", - "block.minecraft.banner.square_top_left.light_gray": "Light Gray Chief Dexter Canton", - "block.minecraft.banner.square_top_left.lime": "Lime Chief Dexter Canton", - "block.minecraft.banner.square_top_left.magenta": "Magenta Chief Dexter Canton", - "block.minecraft.banner.square_top_left.orange": "Orange Chief Dexter Canton", - "block.minecraft.banner.square_top_left.pink": "Pink Chief Dexter Canton", - "block.minecraft.banner.square_top_left.purple": "Purple Chief Dexter Canton", - "block.minecraft.banner.square_top_left.red": "Red Chief Dexter Canton", - "block.minecraft.banner.square_top_left.white": "White Chief Dexter Canton", - "block.minecraft.banner.square_top_left.yellow": "Yellow Chief Dexter Canton", - "block.minecraft.banner.square_top_right.black": "Black Chief Sinister Canton", - "block.minecraft.banner.square_top_right.blue": "Blue Chief Sinister Canton", - "block.minecraft.banner.square_top_right.brown": "Brown Chief Sinister Canton", - "block.minecraft.banner.square_top_right.cyan": "Cyan Chief Sinister Canton", - "block.minecraft.banner.square_top_right.gray": "Gray Chief Sinister Canton", - "block.minecraft.banner.square_top_right.green": "Green Chief Sinister Canton", - "block.minecraft.banner.square_top_right.light_blue": "Light Blue Chief Sinister Canton", - "block.minecraft.banner.square_top_right.light_gray": "Light Gray Chief Sinister Canton", - "block.minecraft.banner.square_top_right.lime": "Lime Chief Sinister Canton", - "block.minecraft.banner.square_top_right.magenta": "Magenta Chief Sinister Canton", - "block.minecraft.banner.square_top_right.orange": "Orange Chief Sinister Canton", - "block.minecraft.banner.square_top_right.pink": "Pink Chief Sinister Canton", - "block.minecraft.banner.square_top_right.purple": "Purple Chief Sinister Canton", - "block.minecraft.banner.square_top_right.red": "Red Chief Sinister Canton", - "block.minecraft.banner.square_top_right.white": "White Chief Sinister Canton", - "block.minecraft.banner.square_top_right.yellow": "Yellow Chief Sinister Canton", - "block.minecraft.banner.straight_cross.black": "Black Cross", - "block.minecraft.banner.straight_cross.blue": "Blue Cross", - "block.minecraft.banner.straight_cross.brown": "Brown Cross", - "block.minecraft.banner.straight_cross.cyan": "Cyan Cross", - "block.minecraft.banner.straight_cross.gray": "Gray Cross", - "block.minecraft.banner.straight_cross.green": "Green Cross", - "block.minecraft.banner.straight_cross.light_blue": "Light Blue Cross", - "block.minecraft.banner.straight_cross.light_gray": "Light Gray Cross", - "block.minecraft.banner.straight_cross.lime": "Lime Cross", - "block.minecraft.banner.straight_cross.magenta": "Magenta Cross", - "block.minecraft.banner.straight_cross.orange": "Orange Cross", - "block.minecraft.banner.straight_cross.pink": "Pink Cross", - "block.minecraft.banner.straight_cross.purple": "Purple Cross", - "block.minecraft.banner.straight_cross.red": "Red Cross", - "block.minecraft.banner.straight_cross.white": "White Cross", - "block.minecraft.banner.straight_cross.yellow": "Yellow Cross", - "block.minecraft.banner.stripe_bottom.black": "Black Base", - "block.minecraft.banner.stripe_bottom.blue": "Blue Base", - "block.minecraft.banner.stripe_bottom.brown": "Brown Base", - "block.minecraft.banner.stripe_bottom.cyan": "Cyan Base", - "block.minecraft.banner.stripe_bottom.gray": "Gray Base", - "block.minecraft.banner.stripe_bottom.green": "Green Base", - "block.minecraft.banner.stripe_bottom.light_blue": "Light Blue Base", - "block.minecraft.banner.stripe_bottom.light_gray": "Light Gray Base", - "block.minecraft.banner.stripe_bottom.lime": "Lime Base", - "block.minecraft.banner.stripe_bottom.magenta": "Magenta Base", - "block.minecraft.banner.stripe_bottom.orange": "Orange Base", - "block.minecraft.banner.stripe_bottom.pink": "Pink Base", - "block.minecraft.banner.stripe_bottom.purple": "Purple Base", - "block.minecraft.banner.stripe_bottom.red": "Red Base", - "block.minecraft.banner.stripe_bottom.white": "White Base", - "block.minecraft.banner.stripe_bottom.yellow": "Yellow Base", - "block.minecraft.banner.stripe_center.black": "Black Pale", - "block.minecraft.banner.stripe_center.blue": "Blue Pale", - "block.minecraft.banner.stripe_center.brown": "Brown Pale", - "block.minecraft.banner.stripe_center.cyan": "Cyan Pale", - "block.minecraft.banner.stripe_center.gray": "Gray Pale", - "block.minecraft.banner.stripe_center.green": "Green Pale", - "block.minecraft.banner.stripe_center.light_blue": "Light Blue Pale", - "block.minecraft.banner.stripe_center.light_gray": "Light Gray Pale", - "block.minecraft.banner.stripe_center.lime": "Lime Pale", - "block.minecraft.banner.stripe_center.magenta": "Magenta Pale", - "block.minecraft.banner.stripe_center.orange": "Orange Pale", - "block.minecraft.banner.stripe_center.pink": "Pink Pale", - "block.minecraft.banner.stripe_center.purple": "Purple Pale", - "block.minecraft.banner.stripe_center.red": "Red Pale", - "block.minecraft.banner.stripe_center.white": "White Pale", - "block.minecraft.banner.stripe_center.yellow": "Yellow Pale", - "block.minecraft.banner.stripe_downleft.black": "Black Bend Sinister", - "block.minecraft.banner.stripe_downleft.blue": "Blue Bend Sinister", - "block.minecraft.banner.stripe_downleft.brown": "Brown Bend Sinister", - "block.minecraft.banner.stripe_downleft.cyan": "Cyan Bend Sinister", - "block.minecraft.banner.stripe_downleft.gray": "Gray Bend Sinister", - "block.minecraft.banner.stripe_downleft.green": "Green Bend Sinister", - "block.minecraft.banner.stripe_downleft.light_blue": "Light Blue Bend Sinister", - "block.minecraft.banner.stripe_downleft.light_gray": "Light Gray Bend Sinister", - "block.minecraft.banner.stripe_downleft.lime": "Lime Bend Sinister", - "block.minecraft.banner.stripe_downleft.magenta": "Magenta Bend Sinister", - "block.minecraft.banner.stripe_downleft.orange": "Orange Bend Sinister", - "block.minecraft.banner.stripe_downleft.pink": "Pink Bend Sinister", - "block.minecraft.banner.stripe_downleft.purple": "Purple Bend Sinister", - "block.minecraft.banner.stripe_downleft.red": "Red Bend Sinister", - "block.minecraft.banner.stripe_downleft.white": "White Bend Sinister", - "block.minecraft.banner.stripe_downleft.yellow": "Yellow Bend Sinister", - "block.minecraft.banner.stripe_downright.black": "Black Bend", - "block.minecraft.banner.stripe_downright.blue": "Blue Bend", - "block.minecraft.banner.stripe_downright.brown": "Brown Bend", - "block.minecraft.banner.stripe_downright.cyan": "Cyan Bend", - "block.minecraft.banner.stripe_downright.gray": "Gray Bend", - "block.minecraft.banner.stripe_downright.green": "Green Bend", - "block.minecraft.banner.stripe_downright.light_blue": "Light Blue Bend", - "block.minecraft.banner.stripe_downright.light_gray": "Light Gray Bend", - "block.minecraft.banner.stripe_downright.lime": "Lime Bend", - "block.minecraft.banner.stripe_downright.magenta": "Magenta Bend", - "block.minecraft.banner.stripe_downright.orange": "Orange Bend", - "block.minecraft.banner.stripe_downright.pink": "Pink Bend", - "block.minecraft.banner.stripe_downright.purple": "Purple Bend", - "block.minecraft.banner.stripe_downright.red": "Red Bend", - "block.minecraft.banner.stripe_downright.white": "White Bend", - "block.minecraft.banner.stripe_downright.yellow": "Yellow Bend", - "block.minecraft.banner.stripe_left.black": "Black Pale Dexter", - "block.minecraft.banner.stripe_left.blue": "Blue Pale Dexter", - "block.minecraft.banner.stripe_left.brown": "Brown Pale Dexter", - "block.minecraft.banner.stripe_left.cyan": "Cyan Pale Dexter", - "block.minecraft.banner.stripe_left.gray": "Gray Pale Dexter", - "block.minecraft.banner.stripe_left.green": "Green Pale Dexter", - "block.minecraft.banner.stripe_left.light_blue": "Light Blue Pale Dexter", - "block.minecraft.banner.stripe_left.light_gray": "Light Gray Pale Dexter", - "block.minecraft.banner.stripe_left.lime": "Lime Pale Dexter", - "block.minecraft.banner.stripe_left.magenta": "Magenta Pale Dexter", - "block.minecraft.banner.stripe_left.orange": "Orange Pale Dexter", - "block.minecraft.banner.stripe_left.pink": "Pink Pale Dexter", - "block.minecraft.banner.stripe_left.purple": "Purple Pale Dexter", - "block.minecraft.banner.stripe_left.red": "Red Pale Dexter", - "block.minecraft.banner.stripe_left.white": "White Pale Dexter", - "block.minecraft.banner.stripe_left.yellow": "Yellow Pale Dexter", - "block.minecraft.banner.stripe_middle.black": "Black Fess", - "block.minecraft.banner.stripe_middle.blue": "Blue Fess", - "block.minecraft.banner.stripe_middle.brown": "Brown Fess", - "block.minecraft.banner.stripe_middle.cyan": "Cyan Fess", - "block.minecraft.banner.stripe_middle.gray": "Gray Fess", - "block.minecraft.banner.stripe_middle.green": "Green Fess", - "block.minecraft.banner.stripe_middle.light_blue": "Light Blue Fess", - "block.minecraft.banner.stripe_middle.light_gray": "Light Gray Fess", - "block.minecraft.banner.stripe_middle.lime": "Lime Fess", - "block.minecraft.banner.stripe_middle.magenta": "Magenta Fess", - "block.minecraft.banner.stripe_middle.orange": "Orange Fess", - "block.minecraft.banner.stripe_middle.pink": "Pink Fess", - "block.minecraft.banner.stripe_middle.purple": "Purple Fess", - "block.minecraft.banner.stripe_middle.red": "Red Fess", - "block.minecraft.banner.stripe_middle.white": "White Fess", - "block.minecraft.banner.stripe_middle.yellow": "Yellow Fess", - "block.minecraft.banner.stripe_right.black": "Black Pale Sinister", - "block.minecraft.banner.stripe_right.blue": "Blue Pale Sinister", - "block.minecraft.banner.stripe_right.brown": "Brown Pale Sinister", - "block.minecraft.banner.stripe_right.cyan": "Cyan Pale Sinister", - "block.minecraft.banner.stripe_right.gray": "Gray Pale Sinister", - "block.minecraft.banner.stripe_right.green": "Green Pale Sinister", - "block.minecraft.banner.stripe_right.light_blue": "Light Blue Pale Sinister", - "block.minecraft.banner.stripe_right.light_gray": "Light Gray Pale Sinister", - "block.minecraft.banner.stripe_right.lime": "Lime Pale Sinister", - "block.minecraft.banner.stripe_right.magenta": "Magenta Pale Sinister", - "block.minecraft.banner.stripe_right.orange": "Orange Pale Sinister", - "block.minecraft.banner.stripe_right.pink": "Pink Pale Sinister", - "block.minecraft.banner.stripe_right.purple": "Purple Pale Sinister", - "block.minecraft.banner.stripe_right.red": "Red Pale Sinister", - "block.minecraft.banner.stripe_right.white": "White Pale Sinister", - "block.minecraft.banner.stripe_right.yellow": "Yellow Pale Sinister", - "block.minecraft.banner.stripe_top.black": "Black Chief", - "block.minecraft.banner.stripe_top.blue": "Blue Chief", - "block.minecraft.banner.stripe_top.brown": "Brown Chief", - "block.minecraft.banner.stripe_top.cyan": "Cyan Chief", - "block.minecraft.banner.stripe_top.gray": "Gray Chief", - "block.minecraft.banner.stripe_top.green": "Green Chief", - "block.minecraft.banner.stripe_top.light_blue": "Light Blue Chief", - "block.minecraft.banner.stripe_top.light_gray": "Light Gray Chief", - "block.minecraft.banner.stripe_top.lime": "Lime Chief", - "block.minecraft.banner.stripe_top.magenta": "Magenta Chief", - "block.minecraft.banner.stripe_top.orange": "Orange Chief", - "block.minecraft.banner.stripe_top.pink": "Pink Chief", - "block.minecraft.banner.stripe_top.purple": "Purple Chief", - "block.minecraft.banner.stripe_top.red": "Red Chief", - "block.minecraft.banner.stripe_top.white": "White Chief", - "block.minecraft.banner.stripe_top.yellow": "Yellow Chief", - "block.minecraft.banner.triangle_bottom.black": "Black Chevron", - "block.minecraft.banner.triangle_bottom.blue": "Blue Chevron", - "block.minecraft.banner.triangle_bottom.brown": "Brown Chevron", - "block.minecraft.banner.triangle_bottom.cyan": "Cyan Chevron", - "block.minecraft.banner.triangle_bottom.gray": "Gray Chevron", - "block.minecraft.banner.triangle_bottom.green": "Green Chevron", - "block.minecraft.banner.triangle_bottom.light_blue": "Light Blue Chevron", - "block.minecraft.banner.triangle_bottom.light_gray": "Light Gray Chevron", - "block.minecraft.banner.triangle_bottom.lime": "Lime Chevron", - "block.minecraft.banner.triangle_bottom.magenta": "Magenta Chevron", - "block.minecraft.banner.triangle_bottom.orange": "Orange Chevron", - "block.minecraft.banner.triangle_bottom.pink": "Pink Chevron", - "block.minecraft.banner.triangle_bottom.purple": "Purple Chevron", - "block.minecraft.banner.triangle_bottom.red": "Red Chevron", - "block.minecraft.banner.triangle_bottom.white": "White Chevron", - "block.minecraft.banner.triangle_bottom.yellow": "Yellow Chevron", - "block.minecraft.banner.triangle_top.black": "Black Inverted Chevron", - "block.minecraft.banner.triangle_top.blue": "Blue Inverted Chevron", - "block.minecraft.banner.triangle_top.brown": "Brown Inverted Chevron", - "block.minecraft.banner.triangle_top.cyan": "Cyan Inverted Chevron", - "block.minecraft.banner.triangle_top.gray": "Gray Inverted Chevron", - "block.minecraft.banner.triangle_top.green": "Green Inverted Chevron", - "block.minecraft.banner.triangle_top.light_blue": "Light Blue Inverted Chevron", - "block.minecraft.banner.triangle_top.light_gray": "Light Gray Inverted Chevron", - "block.minecraft.banner.triangle_top.lime": "Lime Inverted Chevron", - "block.minecraft.banner.triangle_top.magenta": "Magenta Inverted Chevron", - "block.minecraft.banner.triangle_top.orange": "Orange Inverted Chevron", - "block.minecraft.banner.triangle_top.pink": "Pink Inverted Chevron", - "block.minecraft.banner.triangle_top.purple": "Purple Inverted Chevron", - "block.minecraft.banner.triangle_top.red": "Red Inverted Chevron", - "block.minecraft.banner.triangle_top.white": "White Inverted Chevron", - "block.minecraft.banner.triangle_top.yellow": "Yellow Inverted Chevron", - "block.minecraft.banner.triangles_bottom.black": "Black Base Indented", - "block.minecraft.banner.triangles_bottom.blue": "Blue Base Indented", - "block.minecraft.banner.triangles_bottom.brown": "Brown Base Indented", - "block.minecraft.banner.triangles_bottom.cyan": "Cyan Base Indented", - "block.minecraft.banner.triangles_bottom.gray": "Gray Base Indented", - "block.minecraft.banner.triangles_bottom.green": "Green Base Indented", - "block.minecraft.banner.triangles_bottom.light_blue": "Light Blue Base Indented", - "block.minecraft.banner.triangles_bottom.light_gray": "Light Gray Base Indented", - "block.minecraft.banner.triangles_bottom.lime": "Lime Base Indented", - "block.minecraft.banner.triangles_bottom.magenta": "Magenta Base Indented", - "block.minecraft.banner.triangles_bottom.orange": "Orange Base Indented", - "block.minecraft.banner.triangles_bottom.pink": "Pink Base Indented", - "block.minecraft.banner.triangles_bottom.purple": "Purple Base Indented", - "block.minecraft.banner.triangles_bottom.red": "Red Base Indented", - "block.minecraft.banner.triangles_bottom.white": "White Base Indented", - "block.minecraft.banner.triangles_bottom.yellow": "Yellow Base Indented", - "block.minecraft.banner.triangles_top.black": "Black Chief Indented", - "block.minecraft.banner.triangles_top.blue": "Blue Chief Indented", - "block.minecraft.banner.triangles_top.brown": "Brown Chief Indented", - "block.minecraft.banner.triangles_top.cyan": "Cyan Chief Indented", - "block.minecraft.banner.triangles_top.gray": "Gray Chief Indented", - "block.minecraft.banner.triangles_top.green": "Green Chief Indented", - "block.minecraft.banner.triangles_top.light_blue": "Light Blue Chief Indented", - "block.minecraft.banner.triangles_top.light_gray": "Light Gray Chief Indented", - "block.minecraft.banner.triangles_top.lime": "Lime Chief Indented", - "block.minecraft.banner.triangles_top.magenta": "Magenta Chief Indented", - "block.minecraft.banner.triangles_top.orange": "Orange Chief Indented", - "block.minecraft.banner.triangles_top.pink": "Pink Chief Indented", - "block.minecraft.banner.triangles_top.purple": "Purple Chief Indented", - "block.minecraft.banner.triangles_top.red": "Red Chief Indented", - "block.minecraft.banner.triangles_top.white": "White Chief Indented", - "block.minecraft.banner.triangles_top.yellow": "Yellow Chief Indented", - "block.minecraft.barrel": "Barrel", - "block.minecraft.barrier": "Barrier", - "block.minecraft.basalt": "Basalt", - "block.minecraft.beacon": "Beacon", - "block.minecraft.beacon.primary": "Primary Power", - "block.minecraft.beacon.secondary": "Secondary Power", - "block.minecraft.bed.no_sleep": "You can sleep only at night or during thunderstorms", - "block.minecraft.bed.not_safe": "You may not rest now; there are monsters nearby", - "block.minecraft.bed.obstructed": "This bed is obstructed", - "block.minecraft.bed.occupied": "This bed is occupied", - "block.minecraft.bed.too_far_away": "You may not rest now; the bed is too far away", - "block.minecraft.bedrock": "Bedrock", - "block.minecraft.bee_nest": "Bee Nest", - "block.minecraft.beehive": "Beehive", - "block.minecraft.beetroots": "Beetroots", - "block.minecraft.bell": "Bell", - "block.minecraft.big_dripleaf": "Big Dripleaf", - "block.minecraft.big_dripleaf_stem": "Big Dripleaf Stem", - "block.minecraft.birch_button": "Birch Button", - "block.minecraft.birch_door": "Birch Door", - "block.minecraft.birch_fence": "Birch Fence", - "block.minecraft.birch_fence_gate": "Birch Fence Gate", - "block.minecraft.birch_hanging_sign": "Birch Hanging Sign", - "block.minecraft.birch_leaves": "Birch Leaves", - "block.minecraft.birch_log": "Birch Log", - "block.minecraft.birch_planks": "Birch Planks", - "block.minecraft.birch_pressure_plate": "Birch Pressure Plate", - "block.minecraft.birch_sapling": "Birch Sapling", - "block.minecraft.birch_sign": "Birch Sign", - "block.minecraft.birch_slab": "Birch Slab", - "block.minecraft.birch_stairs": "Birch Stairs", - "block.minecraft.birch_trapdoor": "Birch Trapdoor", - "block.minecraft.birch_wall_hanging_sign": "Birch Wall Hanging Sign", - "block.minecraft.birch_wall_sign": "Birch Wall Sign", - "block.minecraft.birch_wood": "Birch Wood", - "block.minecraft.black_banner": "Black Banner", - "block.minecraft.black_bed": "Black Bed", - "block.minecraft.black_candle": "Black Candle", - "block.minecraft.black_candle_cake": "Cake with Black Candle", - "block.minecraft.black_carpet": "Black Carpet", - "block.minecraft.black_concrete": "Black Concrete", - "block.minecraft.black_concrete_powder": "Black Concrete Powder", - "block.minecraft.black_glazed_terracotta": "Black Glazed Terracotta", - "block.minecraft.black_shulker_box": "Black Shulker Box", - "block.minecraft.black_stained_glass": "Black Stained Glass", - "block.minecraft.black_stained_glass_pane": "Black Stained Glass Pane", - "block.minecraft.black_terracotta": "Black Terracotta", - "block.minecraft.black_wool": "Black Wool", - "block.minecraft.blackstone": "Blackstone", - "block.minecraft.blackstone_slab": "Blackstone Slab", - "block.minecraft.blackstone_stairs": "Blackstone Stairs", - "block.minecraft.blackstone_wall": "Blackstone Wall", - "block.minecraft.blast_furnace": "Blast Furnace", - "block.minecraft.blue_banner": "Blue Banner", - "block.minecraft.blue_bed": "Blue Bed", - "block.minecraft.blue_candle": "Blue Candle", - "block.minecraft.blue_candle_cake": "Cake with Blue Candle", - "block.minecraft.blue_carpet": "Blue Carpet", - "block.minecraft.blue_concrete": "Blue Concrete", - "block.minecraft.blue_concrete_powder": "Blue Concrete Powder", - "block.minecraft.blue_glazed_terracotta": "Blue Glazed Terracotta", - "block.minecraft.blue_ice": "Blue Ice", - "block.minecraft.blue_orchid": "Blue Orchid", - "block.minecraft.blue_shulker_box": "Blue Shulker Box", - "block.minecraft.blue_stained_glass": "Blue Stained Glass", - "block.minecraft.blue_stained_glass_pane": "Blue Stained Glass Pane", - "block.minecraft.blue_terracotta": "Blue Terracotta", - "block.minecraft.blue_wool": "Blue Wool", - "block.minecraft.bone_block": "Bone Block", - "block.minecraft.bookshelf": "Bookshelf", - "block.minecraft.brain_coral": "Brain Coral", - "block.minecraft.brain_coral_block": "Brain Coral Block", - "block.minecraft.brain_coral_fan": "Brain Coral Fan", - "block.minecraft.brain_coral_wall_fan": "Brain Coral Wall Fan", - "block.minecraft.brewing_stand": "Brewing Stand", - "block.minecraft.brick_slab": "Brick Slab", - "block.minecraft.brick_stairs": "Brick Stairs", - "block.minecraft.brick_wall": "Brick Wall", - "block.minecraft.bricks": "Bricks", - "block.minecraft.brown_banner": "Brown Banner", - "block.minecraft.brown_bed": "Brown Bed", - "block.minecraft.brown_candle": "Brown Candle", - "block.minecraft.brown_candle_cake": "Cake with Brown Candle", - "block.minecraft.brown_carpet": "Brown Carpet", - "block.minecraft.brown_concrete": "Brown Concrete", - "block.minecraft.brown_concrete_powder": "Brown Concrete Powder", - "block.minecraft.brown_glazed_terracotta": "Brown Glazed Terracotta", - "block.minecraft.brown_mushroom": "Brown Mushroom", - "block.minecraft.brown_mushroom_block": "Brown Mushroom Block", - "block.minecraft.brown_shulker_box": "Brown Shulker Box", - "block.minecraft.brown_stained_glass": "Brown Stained Glass", - "block.minecraft.brown_stained_glass_pane": "Brown Stained Glass Pane", - "block.minecraft.brown_terracotta": "Brown Terracotta", - "block.minecraft.brown_wool": "Brown Wool", - "block.minecraft.bubble_column": "Bubble Column", - "block.minecraft.bubble_coral": "Bubble Coral", - "block.minecraft.bubble_coral_block": "Bubble Coral Block", - "block.minecraft.bubble_coral_fan": "Bubble Coral Fan", - "block.minecraft.bubble_coral_wall_fan": "Bubble Coral Wall Fan", - "block.minecraft.budding_amethyst": "Budding Amethyst", - "block.minecraft.cactus": "Cactus", - "block.minecraft.cake": "Cake", - "block.minecraft.calcite": "Calcite", - "block.minecraft.calibrated_sculk_sensor": "Calibrated Sculk Sensor", - "block.minecraft.campfire": "Campfire", - "block.minecraft.candle": "Candle", - "block.minecraft.candle_cake": "Cake with Candle", - "block.minecraft.carrots": "Carrots", - "block.minecraft.cartography_table": "Cartography Table", - "block.minecraft.carved_pumpkin": "Carved Pumpkin", - "block.minecraft.cauldron": "Cauldron", - "block.minecraft.cave_air": "Cave Air", - "block.minecraft.cave_vines": "Cave Vines", - "block.minecraft.cave_vines_plant": "Cave Vines Plant", - "block.minecraft.chain": "Chain", - "block.minecraft.chain_command_block": "Chain Command Block", - "block.minecraft.cherry_button": "Cherry Button", - "block.minecraft.cherry_door": "Cherry Door", - "block.minecraft.cherry_fence": "Cherry Fence", - "block.minecraft.cherry_fence_gate": "Cherry Fence Gate", - "block.minecraft.cherry_hanging_sign": "Cherry Hanging Sign", - "block.minecraft.cherry_leaves": "Cherry Leaves", - "block.minecraft.cherry_log": "Cherry Log", - "block.minecraft.cherry_planks": "Cherry Planks", - "block.minecraft.cherry_pressure_plate": "Cherry Pressure Plate", - "block.minecraft.cherry_sapling": "Cherry Sapling", - "block.minecraft.cherry_sign": "Cherry Sign", - "block.minecraft.cherry_slab": "Cherry Slab", - "block.minecraft.cherry_stairs": "Cherry Stairs", - "block.minecraft.cherry_trapdoor": "Cherry Trapdoor", - "block.minecraft.cherry_wall_hanging_sign": "Cherry Wall Hanging Sign", - "block.minecraft.cherry_wall_sign": "Cherry Wall Sign", - "block.minecraft.cherry_wood": "Cherry Wood", - "block.minecraft.chest": "Chest", - "block.minecraft.chipped_anvil": "Chipped Anvil", - "block.minecraft.chiseled_bookshelf": "Chiseled Bookshelf", - "block.minecraft.chiseled_copper": "Chiseled Copper", - "block.minecraft.chiseled_deepslate": "Chiseled Deepslate", - "block.minecraft.chiseled_nether_bricks": "Chiseled Nether Bricks", - "block.minecraft.chiseled_polished_blackstone": "Chiseled Polished Blackstone", - "block.minecraft.chiseled_quartz_block": "Chiseled Quartz Block", - "block.minecraft.chiseled_red_sandstone": "Chiseled Red Sandstone", - "block.minecraft.chiseled_sandstone": "Chiseled Sandstone", - "block.minecraft.chiseled_stone_bricks": "Chiseled Stone Bricks", - "block.minecraft.chiseled_tuff": "Chiseled Tuff", - "block.minecraft.chiseled_tuff_bricks": "Chiseled Tuff Bricks", - "block.minecraft.chorus_flower": "Chorus Flower", - "block.minecraft.chorus_plant": "Chorus Plant", - "block.minecraft.clay": "Clay", - "block.minecraft.coal_block": "Block of Coal", - "block.minecraft.coal_ore": "Coal Ore", - "block.minecraft.coarse_dirt": "Coarse Dirt", - "block.minecraft.cobbled_deepslate": "Cobbled Deepslate", - "block.minecraft.cobbled_deepslate_slab": "Cobbled Deepslate Slab", - "block.minecraft.cobbled_deepslate_stairs": "Cobbled Deepslate Stairs", - "block.minecraft.cobbled_deepslate_wall": "Cobbled Deepslate Wall", - "block.minecraft.cobblestone": "Cobblestone", - "block.minecraft.cobblestone_slab": "Cobblestone Slab", - "block.minecraft.cobblestone_stairs": "Cobblestone Stairs", - "block.minecraft.cobblestone_wall": "Cobblestone Wall", - "block.minecraft.cobweb": "Cobweb", - "block.minecraft.cocoa": "Cocoa", - "block.minecraft.command_block": "Command Block", - "block.minecraft.comparator": "Redstone Comparator", - "block.minecraft.composter": "Composter", - "block.minecraft.conduit": "Conduit", - "block.minecraft.copper_block": "Block of Copper", - "block.minecraft.copper_bulb": "Copper Bulb", - "block.minecraft.copper_door": "Copper Door", - "block.minecraft.copper_grate": "Copper Grate", - "block.minecraft.copper_ore": "Copper Ore", - "block.minecraft.copper_trapdoor": "Copper Trapdoor", - "block.minecraft.cornflower": "Cornflower", - "block.minecraft.cracked_deepslate_bricks": "Cracked Deepslate Bricks", - "block.minecraft.cracked_deepslate_tiles": "Cracked Deepslate Tiles", - "block.minecraft.cracked_nether_bricks": "Cracked Nether Bricks", - "block.minecraft.cracked_polished_blackstone_bricks": "Cracked Polished Blackstone Bricks", - "block.minecraft.cracked_stone_bricks": "Cracked Stone Bricks", - "block.minecraft.crafter": "Crafter", - "block.minecraft.crafting_table": "Crafting Table", - "block.minecraft.creeper_head": "Creeper Head", - "block.minecraft.creeper_wall_head": "Creeper Wall Head", - "block.minecraft.crimson_button": "Crimson Button", - "block.minecraft.crimson_door": "Crimson Door", - "block.minecraft.crimson_fence": "Crimson Fence", - "block.minecraft.crimson_fence_gate": "Crimson Fence Gate", - "block.minecraft.crimson_fungus": "Crimson Fungus", - "block.minecraft.crimson_hanging_sign": "Crimson Hanging Sign", - "block.minecraft.crimson_hyphae": "Crimson Hyphae", - "block.minecraft.crimson_nylium": "Crimson Nylium", - "block.minecraft.crimson_planks": "Crimson Planks", - "block.minecraft.crimson_pressure_plate": "Crimson Pressure Plate", - "block.minecraft.crimson_roots": "Crimson Roots", - "block.minecraft.crimson_sign": "Crimson Sign", - "block.minecraft.crimson_slab": "Crimson Slab", - "block.minecraft.crimson_stairs": "Crimson Stairs", - "block.minecraft.crimson_stem": "Crimson Stem", - "block.minecraft.crimson_trapdoor": "Crimson Trapdoor", - "block.minecraft.crimson_wall_hanging_sign": "Crimson Wall Hanging Sign", - "block.minecraft.crimson_wall_sign": "Crimson Wall Sign", - "block.minecraft.crying_obsidian": "Crying Obsidian", - "block.minecraft.cut_copper": "Cut Copper", - "block.minecraft.cut_copper_slab": "Cut Copper Slab", - "block.minecraft.cut_copper_stairs": "Cut Copper Stairs", - "block.minecraft.cut_red_sandstone": "Cut Red Sandstone", - "block.minecraft.cut_red_sandstone_slab": "Cut Red Sandstone Slab", - "block.minecraft.cut_sandstone": "Cut Sandstone", - "block.minecraft.cut_sandstone_slab": "Cut Sandstone Slab", - "block.minecraft.cyan_banner": "Cyan Banner", - "block.minecraft.cyan_bed": "Cyan Bed", - "block.minecraft.cyan_candle": "Cyan Candle", - "block.minecraft.cyan_candle_cake": "Cake with Cyan Candle", - "block.minecraft.cyan_carpet": "Cyan Carpet", - "block.minecraft.cyan_concrete": "Cyan Concrete", - "block.minecraft.cyan_concrete_powder": "Cyan Concrete Powder", - "block.minecraft.cyan_glazed_terracotta": "Cyan Glazed Terracotta", - "block.minecraft.cyan_shulker_box": "Cyan Shulker Box", - "block.minecraft.cyan_stained_glass": "Cyan Stained Glass", - "block.minecraft.cyan_stained_glass_pane": "Cyan Stained Glass Pane", - "block.minecraft.cyan_terracotta": "Cyan Terracotta", - "block.minecraft.cyan_wool": "Cyan Wool", - "block.minecraft.damaged_anvil": "Damaged Anvil", - "block.minecraft.dandelion": "Dandelion", - "block.minecraft.dark_oak_button": "Dark Oak Button", - "block.minecraft.dark_oak_door": "Dark Oak Door", - "block.minecraft.dark_oak_fence": "Dark Oak Fence", - "block.minecraft.dark_oak_fence_gate": "Dark Oak Fence Gate", - "block.minecraft.dark_oak_hanging_sign": "Dark Oak Hanging Sign", - "block.minecraft.dark_oak_leaves": "Dark Oak Leaves", - "block.minecraft.dark_oak_log": "Dark Oak Log", - "block.minecraft.dark_oak_planks": "Dark Oak Planks", - "block.minecraft.dark_oak_pressure_plate": "Dark Oak Pressure Plate", - "block.minecraft.dark_oak_sapling": "Dark Oak Sapling", - "block.minecraft.dark_oak_sign": "Dark Oak Sign", - "block.minecraft.dark_oak_slab": "Dark Oak Slab", - "block.minecraft.dark_oak_stairs": "Dark Oak Stairs", - "block.minecraft.dark_oak_trapdoor": "Dark Oak Trapdoor", - "block.minecraft.dark_oak_wall_hanging_sign": "Dark Oak Wall Hanging Sign", - "block.minecraft.dark_oak_wall_sign": "Dark Oak Wall Sign", - "block.minecraft.dark_oak_wood": "Dark Oak Wood", - "block.minecraft.dark_prismarine": "Dark Prismarine", - "block.minecraft.dark_prismarine_slab": "Dark Prismarine Slab", - "block.minecraft.dark_prismarine_stairs": "Dark Prismarine Stairs", - "block.minecraft.daylight_detector": "Daylight Detector", - "block.minecraft.dead_brain_coral": "Dead Brain Coral", - "block.minecraft.dead_brain_coral_block": "Dead Brain Coral Block", - "block.minecraft.dead_brain_coral_fan": "Dead Brain Coral Fan", - "block.minecraft.dead_brain_coral_wall_fan": "Dead Brain Coral Wall Fan", - "block.minecraft.dead_bubble_coral": "Dead Bubble Coral", - "block.minecraft.dead_bubble_coral_block": "Dead Bubble Coral Block", - "block.minecraft.dead_bubble_coral_fan": "Dead Bubble Coral Fan", - "block.minecraft.dead_bubble_coral_wall_fan": "Dead Bubble Coral Wall Fan", - "block.minecraft.dead_bush": "Dead Bush", - "block.minecraft.dead_fire_coral": "Dead Fire Coral", - "block.minecraft.dead_fire_coral_block": "Dead Fire Coral Block", - "block.minecraft.dead_fire_coral_fan": "Dead Fire Coral Fan", - "block.minecraft.dead_fire_coral_wall_fan": "Dead Fire Coral Wall Fan", - "block.minecraft.dead_horn_coral": "Dead Horn Coral", - "block.minecraft.dead_horn_coral_block": "Dead Horn Coral Block", - "block.minecraft.dead_horn_coral_fan": "Dead Horn Coral Fan", - "block.minecraft.dead_horn_coral_wall_fan": "Dead Horn Coral Wall Fan", - "block.minecraft.dead_tube_coral": "Dead Tube Coral", - "block.minecraft.dead_tube_coral_block": "Dead Tube Coral Block", - "block.minecraft.dead_tube_coral_fan": "Dead Tube Coral Fan", - "block.minecraft.dead_tube_coral_wall_fan": "Dead Tube Coral Wall Fan", - "block.minecraft.decorated_pot": "Decorated Pot", - "block.minecraft.deepslate": "Deepslate", - "block.minecraft.deepslate_brick_slab": "Deepslate Brick Slab", - "block.minecraft.deepslate_brick_stairs": "Deepslate Brick Stairs", - "block.minecraft.deepslate_brick_wall": "Deepslate Brick Wall", - "block.minecraft.deepslate_bricks": "Deepslate Bricks", - "block.minecraft.deepslate_coal_ore": "Deepslate Coal Ore", - "block.minecraft.deepslate_copper_ore": "Deepslate Copper Ore", - "block.minecraft.deepslate_diamond_ore": "Deepslate Diamond Ore", - "block.minecraft.deepslate_emerald_ore": "Deepslate Emerald Ore", - "block.minecraft.deepslate_gold_ore": "Deepslate Gold Ore", - "block.minecraft.deepslate_iron_ore": "Deepslate Iron Ore", - "block.minecraft.deepslate_lapis_ore": "Deepslate Lapis Lazuli Ore", - "block.minecraft.deepslate_redstone_ore": "Deepslate Redstone Ore", - "block.minecraft.deepslate_tile_slab": "Deepslate Tile Slab", - "block.minecraft.deepslate_tile_stairs": "Deepslate Tile Stairs", - "block.minecraft.deepslate_tile_wall": "Deepslate Tile Wall", - "block.minecraft.deepslate_tiles": "Deepslate Tiles", - "block.minecraft.detector_rail": "Detector Rail", - "block.minecraft.diamond_block": "Block of Diamond", - "block.minecraft.diamond_ore": "Diamond Ore", - "block.minecraft.diorite": "Diorite", - "block.minecraft.diorite_slab": "Diorite Slab", - "block.minecraft.diorite_stairs": "Diorite Stairs", - "block.minecraft.diorite_wall": "Diorite Wall", - "block.minecraft.dirt": "Dirt", - "block.minecraft.dirt_path": "Dirt Path", - "block.minecraft.dispenser": "Dispenser", - "block.minecraft.dragon_egg": "Dragon Egg", - "block.minecraft.dragon_head": "Dragon Head", - "block.minecraft.dragon_wall_head": "Dragon Wall Head", - "block.minecraft.dried_kelp_block": "Dried Kelp Block", - "block.minecraft.dripstone_block": "Dripstone Block", - "block.minecraft.dropper": "Dropper", - "block.minecraft.emerald_block": "Block of Emerald", - "block.minecraft.emerald_ore": "Emerald Ore", - "block.minecraft.enchanting_table": "Enchanting Table", - "block.minecraft.end_gateway": "End Gateway", - "block.minecraft.end_portal": "End Portal", - "block.minecraft.end_portal_frame": "End Portal Frame", - "block.minecraft.end_rod": "End Rod", - "block.minecraft.end_stone": "End Stone", - "block.minecraft.end_stone_brick_slab": "End Stone Brick Slab", - "block.minecraft.end_stone_brick_stairs": "End Stone Brick Stairs", - "block.minecraft.end_stone_brick_wall": "End Stone Brick Wall", - "block.minecraft.end_stone_bricks": "End Stone Bricks", - "block.minecraft.ender_chest": "Ender Chest", - "block.minecraft.exposed_chiseled_copper": "Exposed Chiseled Copper", - "block.minecraft.exposed_copper": "Exposed Copper", - "block.minecraft.exposed_copper_bulb": "Exposed Copper Bulb", - "block.minecraft.exposed_copper_door": "Exposed Copper Door", - "block.minecraft.exposed_copper_grate": "Exposed Copper Grate", - "block.minecraft.exposed_copper_trapdoor": "Exposed Copper Trapdoor", - "block.minecraft.exposed_cut_copper": "Exposed Cut Copper", - "block.minecraft.exposed_cut_copper_slab": "Exposed Cut Copper Slab", - "block.minecraft.exposed_cut_copper_stairs": "Exposed Cut Copper Stairs", - "block.minecraft.farmland": "Farmland", - "block.minecraft.fern": "Fern", - "block.minecraft.fire": "Fire", - "block.minecraft.fire_coral": "Fire Coral", - "block.minecraft.fire_coral_block": "Fire Coral Block", - "block.minecraft.fire_coral_fan": "Fire Coral Fan", - "block.minecraft.fire_coral_wall_fan": "Fire Coral Wall Fan", - "block.minecraft.fletching_table": "Fletching Table", - "block.minecraft.flower_pot": "Flower Pot", - "block.minecraft.flowering_azalea": "Flowering Azalea", - "block.minecraft.flowering_azalea_leaves": "Flowering Azalea Leaves", - "block.minecraft.frogspawn": "Frogspawn", - "block.minecraft.frosted_ice": "Frosted Ice", - "block.minecraft.furnace": "Furnace", - "block.minecraft.gilded_blackstone": "Gilded Blackstone", - "block.minecraft.glass": "Glass", - "block.minecraft.glass_pane": "Glass Pane", - "block.minecraft.glow_lichen": "Glow Lichen", - "block.minecraft.glowstone": "Glowstone", - "block.minecraft.gold_block": "Block of Gold", - "block.minecraft.gold_ore": "Gold Ore", - "block.minecraft.granite": "Granite", - "block.minecraft.granite_slab": "Granite Slab", - "block.minecraft.granite_stairs": "Granite Stairs", - "block.minecraft.granite_wall": "Granite Wall", - "block.minecraft.grass": "Grass", - "block.minecraft.grass_block": "Grass Block", - "block.minecraft.gravel": "Gravel", - "block.minecraft.gray_banner": "Gray Banner", - "block.minecraft.gray_bed": "Gray Bed", - "block.minecraft.gray_candle": "Gray Candle", - "block.minecraft.gray_candle_cake": "Cake with Gray Candle", - "block.minecraft.gray_carpet": "Gray Carpet", - "block.minecraft.gray_concrete": "Gray Concrete", - "block.minecraft.gray_concrete_powder": "Gray Concrete Powder", - "block.minecraft.gray_glazed_terracotta": "Gray Glazed Terracotta", - "block.minecraft.gray_shulker_box": "Gray Shulker Box", - "block.minecraft.gray_stained_glass": "Gray Stained Glass", - "block.minecraft.gray_stained_glass_pane": "Gray Stained Glass Pane", - "block.minecraft.gray_terracotta": "Gray Terracotta", - "block.minecraft.gray_wool": "Gray Wool", - "block.minecraft.green_banner": "Green Banner", - "block.minecraft.green_bed": "Green Bed", - "block.minecraft.green_candle": "Green Candle", - "block.minecraft.green_candle_cake": "Cake with Green Candle", - "block.minecraft.green_carpet": "Green Carpet", - "block.minecraft.green_concrete": "Green Concrete", - "block.minecraft.green_concrete_powder": "Green Concrete Powder", - "block.minecraft.green_glazed_terracotta": "Green Glazed Terracotta", - "block.minecraft.green_shulker_box": "Green Shulker Box", - "block.minecraft.green_stained_glass": "Green Stained Glass", - "block.minecraft.green_stained_glass_pane": "Green Stained Glass Pane", - "block.minecraft.green_terracotta": "Green Terracotta", - "block.minecraft.green_wool": "Green Wool", - "block.minecraft.grindstone": "Grindstone", - "block.minecraft.hanging_roots": "Hanging Roots", - "block.minecraft.hay_block": "Hay Bale", - "block.minecraft.heavy_weighted_pressure_plate": "Heavy Weighted Pressure Plate", - "block.minecraft.honey_block": "Honey Block", - "block.minecraft.honeycomb_block": "Honeycomb Block", - "block.minecraft.hopper": "Hopper", - "block.minecraft.horn_coral": "Horn Coral", - "block.minecraft.horn_coral_block": "Horn Coral Block", - "block.minecraft.horn_coral_fan": "Horn Coral Fan", - "block.minecraft.horn_coral_wall_fan": "Horn Coral Wall Fan", - "block.minecraft.ice": "Ice", - "block.minecraft.infested_chiseled_stone_bricks": "Infested Chiseled Stone Bricks", - "block.minecraft.infested_cobblestone": "Infested Cobblestone", - "block.minecraft.infested_cracked_stone_bricks": "Infested Cracked Stone Bricks", - "block.minecraft.infested_deepslate": "Infested Deepslate", - "block.minecraft.infested_mossy_stone_bricks": "Infested Mossy Stone Bricks", - "block.minecraft.infested_stone": "Infested Stone", - "block.minecraft.infested_stone_bricks": "Infested Stone Bricks", - "block.minecraft.iron_bars": "Iron Bars", - "block.minecraft.iron_block": "Block of Iron", - "block.minecraft.iron_door": "Iron Door", - "block.minecraft.iron_ore": "Iron Ore", - "block.minecraft.iron_trapdoor": "Iron Trapdoor", - "block.minecraft.jack_o_lantern": "Jack o'Lantern", - "block.minecraft.jigsaw": "Jigsaw Block", - "block.minecraft.jukebox": "Jukebox", - "block.minecraft.jungle_button": "Jungle Button", - "block.minecraft.jungle_door": "Jungle Door", - "block.minecraft.jungle_fence": "Jungle Fence", - "block.minecraft.jungle_fence_gate": "Jungle Fence Gate", - "block.minecraft.jungle_hanging_sign": "Jungle Hanging Sign", - "block.minecraft.jungle_leaves": "Jungle Leaves", - "block.minecraft.jungle_log": "Jungle Log", - "block.minecraft.jungle_planks": "Jungle Planks", - "block.minecraft.jungle_pressure_plate": "Jungle Pressure Plate", - "block.minecraft.jungle_sapling": "Jungle Sapling", - "block.minecraft.jungle_sign": "Jungle Sign", - "block.minecraft.jungle_slab": "Jungle Slab", - "block.minecraft.jungle_stairs": "Jungle Stairs", - "block.minecraft.jungle_trapdoor": "Jungle Trapdoor", - "block.minecraft.jungle_wall_hanging_sign": "Jungle Wall Hanging Sign", - "block.minecraft.jungle_wall_sign": "Jungle Wall Sign", - "block.minecraft.jungle_wood": "Jungle Wood", - "block.minecraft.kelp": "Kelp", - "block.minecraft.kelp_plant": "Kelp Plant", - "block.minecraft.ladder": "Ladder", - "block.minecraft.lantern": "Lantern", - "block.minecraft.lapis_block": "Block of Lapis Lazuli", - "block.minecraft.lapis_ore": "Lapis Lazuli Ore", - "block.minecraft.large_amethyst_bud": "Large Amethyst Bud", - "block.minecraft.large_fern": "Large Fern", - "block.minecraft.lava": "Lava", - "block.minecraft.lava_cauldron": "Lava Cauldron", - "block.minecraft.lectern": "Lectern", - "block.minecraft.lever": "Lever", - "block.minecraft.light": "Light", - "block.minecraft.light_blue_banner": "Light Blue Banner", - "block.minecraft.light_blue_bed": "Light Blue Bed", - "block.minecraft.light_blue_candle": "Light Blue Candle", - "block.minecraft.light_blue_candle_cake": "Cake with Light Blue Candle", - "block.minecraft.light_blue_carpet": "Light Blue Carpet", - "block.minecraft.light_blue_concrete": "Light Blue Concrete", - "block.minecraft.light_blue_concrete_powder": "Light Blue Concrete Powder", - "block.minecraft.light_blue_glazed_terracotta": "Light Blue Glazed Terracotta", - "block.minecraft.light_blue_shulker_box": "Light Blue Shulker Box", - "block.minecraft.light_blue_stained_glass": "Light Blue Stained Glass", - "block.minecraft.light_blue_stained_glass_pane": "Light Blue Stained Glass Pane", - "block.minecraft.light_blue_terracotta": "Light Blue Terracotta", - "block.minecraft.light_blue_wool": "Light Blue Wool", - "block.minecraft.light_gray_banner": "Light Gray Banner", - "block.minecraft.light_gray_bed": "Light Gray Bed", - "block.minecraft.light_gray_candle": "Light Gray Candle", - "block.minecraft.light_gray_candle_cake": "Cake with Light Gray Candle", - "block.minecraft.light_gray_carpet": "Light Gray Carpet", - "block.minecraft.light_gray_concrete": "Light Gray Concrete", - "block.minecraft.light_gray_concrete_powder": "Light Gray Concrete Powder", - "block.minecraft.light_gray_glazed_terracotta": "Light Gray Glazed Terracotta", - "block.minecraft.light_gray_shulker_box": "Light Gray Shulker Box", - "block.minecraft.light_gray_stained_glass": "Light Gray Stained Glass", - "block.minecraft.light_gray_stained_glass_pane": "Light Gray Stained Glass Pane", - "block.minecraft.light_gray_terracotta": "Light Gray Terracotta", - "block.minecraft.light_gray_wool": "Light Gray Wool", - "block.minecraft.light_weighted_pressure_plate": "Light Weighted Pressure Plate", - "block.minecraft.lightning_rod": "Lightning Rod", - "block.minecraft.lilac": "Lilac", - "block.minecraft.lily_of_the_valley": "Lily of the Valley", - "block.minecraft.lily_pad": "Lily Pad", - "block.minecraft.lime_banner": "Lime Banner", - "block.minecraft.lime_bed": "Lime Bed", - "block.minecraft.lime_candle": "Lime Candle", - "block.minecraft.lime_candle_cake": "Cake with Lime Candle", - "block.minecraft.lime_carpet": "Lime Carpet", - "block.minecraft.lime_concrete": "Lime Concrete", - "block.minecraft.lime_concrete_powder": "Lime Concrete Powder", - "block.minecraft.lime_glazed_terracotta": "Lime Glazed Terracotta", - "block.minecraft.lime_shulker_box": "Lime Shulker Box", - "block.minecraft.lime_stained_glass": "Lime Stained Glass", - "block.minecraft.lime_stained_glass_pane": "Lime Stained Glass Pane", - "block.minecraft.lime_terracotta": "Lime Terracotta", - "block.minecraft.lime_wool": "Lime Wool", - "block.minecraft.lodestone": "Lodestone", - "block.minecraft.loom": "Loom", - "block.minecraft.magenta_banner": "Magenta Banner", - "block.minecraft.magenta_bed": "Magenta Bed", - "block.minecraft.magenta_candle": "Magenta Candle", - "block.minecraft.magenta_candle_cake": "Cake with Magenta Candle", - "block.minecraft.magenta_carpet": "Magenta Carpet", - "block.minecraft.magenta_concrete": "Magenta Concrete", - "block.minecraft.magenta_concrete_powder": "Magenta Concrete Powder", - "block.minecraft.magenta_glazed_terracotta": "Magenta Glazed Terracotta", - "block.minecraft.magenta_shulker_box": "Magenta Shulker Box", - "block.minecraft.magenta_stained_glass": "Magenta Stained Glass", - "block.minecraft.magenta_stained_glass_pane": "Magenta Stained Glass Pane", - "block.minecraft.magenta_terracotta": "Magenta Terracotta", - "block.minecraft.magenta_wool": "Magenta Wool", - "block.minecraft.magma_block": "Magma Block", - "block.minecraft.mangrove_button": "Mangrove Button", - "block.minecraft.mangrove_door": "Mangrove Door", - "block.minecraft.mangrove_fence": "Mangrove Fence", - "block.minecraft.mangrove_fence_gate": "Mangrove Fence Gate", - "block.minecraft.mangrove_hanging_sign": "Mangrove Hanging Sign", - "block.minecraft.mangrove_leaves": "Mangrove Leaves", - "block.minecraft.mangrove_log": "Mangrove Log", - "block.minecraft.mangrove_planks": "Mangrove Planks", - "block.minecraft.mangrove_pressure_plate": "Mangrove Pressure Plate", - "block.minecraft.mangrove_propagule": "Mangrove Propagule", - "block.minecraft.mangrove_roots": "Mangrove Roots", - "block.minecraft.mangrove_sign": "Mangrove Sign", - "block.minecraft.mangrove_slab": "Mangrove Slab", - "block.minecraft.mangrove_stairs": "Mangrove Stairs", - "block.minecraft.mangrove_trapdoor": "Mangrove Trapdoor", - "block.minecraft.mangrove_wall_hanging_sign": "Mangrove Wall Hanging Sign", - "block.minecraft.mangrove_wall_sign": "Mangrove Wall Sign", - "block.minecraft.mangrove_wood": "Mangrove Wood", - "block.minecraft.medium_amethyst_bud": "Medium Amethyst Bud", - "block.minecraft.melon": "Melon", - "block.minecraft.melon_stem": "Melon Stem", - "block.minecraft.moss_block": "Moss Block", - "block.minecraft.moss_carpet": "Moss Carpet", - "block.minecraft.mossy_cobblestone": "Mossy Cobblestone", - "block.minecraft.mossy_cobblestone_slab": "Mossy Cobblestone Slab", - "block.minecraft.mossy_cobblestone_stairs": "Mossy Cobblestone Stairs", - "block.minecraft.mossy_cobblestone_wall": "Mossy Cobblestone Wall", - "block.minecraft.mossy_stone_brick_slab": "Mossy Stone Brick Slab", - "block.minecraft.mossy_stone_brick_stairs": "Mossy Stone Brick Stairs", - "block.minecraft.mossy_stone_brick_wall": "Mossy Stone Brick Wall", - "block.minecraft.mossy_stone_bricks": "Mossy Stone Bricks", - "block.minecraft.moving_piston": "Moving Piston", - "block.minecraft.mud": "Mud", - "block.minecraft.mud_brick_slab": "Mud Brick Slab", - "block.minecraft.mud_brick_stairs": "Mud Brick Stairs", - "block.minecraft.mud_brick_wall": "Mud Brick Wall", - "block.minecraft.mud_bricks": "Mud Bricks", - "block.minecraft.muddy_mangrove_roots": "Muddy Mangrove Roots", - "block.minecraft.mushroom_stem": "Mushroom Stem", - "block.minecraft.mycelium": "Mycelium", - "block.minecraft.nether_brick_fence": "Nether Brick Fence", - "block.minecraft.nether_brick_slab": "Nether Brick Slab", - "block.minecraft.nether_brick_stairs": "Nether Brick Stairs", - "block.minecraft.nether_brick_wall": "Nether Brick Wall", - "block.minecraft.nether_bricks": "Nether Bricks", - "block.minecraft.nether_gold_ore": "Nether Gold Ore", - "block.minecraft.nether_portal": "Nether Portal", - "block.minecraft.nether_quartz_ore": "Nether Quartz Ore", - "block.minecraft.nether_sprouts": "Nether Sprouts", - "block.minecraft.nether_wart": "Nether Wart", - "block.minecraft.nether_wart_block": "Nether Wart Block", - "block.minecraft.netherite_block": "Block of Netherite", - "block.minecraft.netherrack": "Netherrack", - "block.minecraft.note_block": "Note Block", - "block.minecraft.oak_button": "Oak Button", - "block.minecraft.oak_door": "Oak Door", - "block.minecraft.oak_fence": "Oak Fence", - "block.minecraft.oak_fence_gate": "Oak Fence Gate", - "block.minecraft.oak_hanging_sign": "Oak Hanging Sign", - "block.minecraft.oak_leaves": "Oak Leaves", - "block.minecraft.oak_log": "Oak Log", - "block.minecraft.oak_planks": "Oak Planks", - "block.minecraft.oak_pressure_plate": "Oak Pressure Plate", - "block.minecraft.oak_sapling": "Oak Sapling", - "block.minecraft.oak_sign": "Oak Sign", - "block.minecraft.oak_slab": "Oak Slab", - "block.minecraft.oak_stairs": "Oak Stairs", - "block.minecraft.oak_trapdoor": "Oak Trapdoor", - "block.minecraft.oak_wall_hanging_sign": "Oak Wall Hanging Sign", - "block.minecraft.oak_wall_sign": "Oak Wall Sign", - "block.minecraft.oak_wood": "Oak Wood", - "block.minecraft.observer": "Observer", - "block.minecraft.obsidian": "Obsidian", - "block.minecraft.ochre_froglight": "Ochre Froglight", - "block.minecraft.ominous_banner": "Ominous Banner", - "block.minecraft.orange_banner": "Orange Banner", - "block.minecraft.orange_bed": "Orange Bed", - "block.minecraft.orange_candle": "Orange Candle", - "block.minecraft.orange_candle_cake": "Cake with Orange Candle", - "block.minecraft.orange_carpet": "Orange Carpet", - "block.minecraft.orange_concrete": "Orange Concrete", - "block.minecraft.orange_concrete_powder": "Orange Concrete Powder", - "block.minecraft.orange_glazed_terracotta": "Orange Glazed Terracotta", - "block.minecraft.orange_shulker_box": "Orange Shulker Box", - "block.minecraft.orange_stained_glass": "Orange Stained Glass", - "block.minecraft.orange_stained_glass_pane": "Orange Stained Glass Pane", - "block.minecraft.orange_terracotta": "Orange Terracotta", - "block.minecraft.orange_tulip": "Orange Tulip", - "block.minecraft.orange_wool": "Orange Wool", - "block.minecraft.oxeye_daisy": "Oxeye Daisy", - "block.minecraft.oxidized_chiseled_copper": "Oxidized Chiseled Copper", - "block.minecraft.oxidized_copper": "Oxidized Copper", - "block.minecraft.oxidized_copper_bulb": "Oxidized Copper Bulb", - "block.minecraft.oxidized_copper_door": "Oxidized Copper Door", - "block.minecraft.oxidized_copper_grate": "Oxidized Copper Grate", - "block.minecraft.oxidized_copper_trapdoor": "Oxidized Copper Trapdoor", - "block.minecraft.oxidized_cut_copper": "Oxidized Cut Copper", - "block.minecraft.oxidized_cut_copper_slab": "Oxidized Cut Copper Slab", - "block.minecraft.oxidized_cut_copper_stairs": "Oxidized Cut Copper Stairs", - "block.minecraft.packed_ice": "Packed Ice", - "block.minecraft.packed_mud": "Packed Mud", - "block.minecraft.pearlescent_froglight": "Pearlescent Froglight", - "block.minecraft.peony": "Peony", - "block.minecraft.petrified_oak_slab": "Petrified Oak Slab", - "block.minecraft.piglin_head": "Piglin Head", - "block.minecraft.piglin_wall_head": "Piglin Wall Head", - "block.minecraft.pink_banner": "Pink Banner", - "block.minecraft.pink_bed": "Pink Bed", - "block.minecraft.pink_candle": "Pink Candle", - "block.minecraft.pink_candle_cake": "Cake with Pink Candle", - "block.minecraft.pink_carpet": "Pink Carpet", - "block.minecraft.pink_concrete": "Pink Concrete", - "block.minecraft.pink_concrete_powder": "Pink Concrete Powder", - "block.minecraft.pink_glazed_terracotta": "Pink Glazed Terracotta", - "block.minecraft.pink_petals": "Pink Petals", - "block.minecraft.pink_shulker_box": "Pink Shulker Box", - "block.minecraft.pink_stained_glass": "Pink Stained Glass", - "block.minecraft.pink_stained_glass_pane": "Pink Stained Glass Pane", - "block.minecraft.pink_terracotta": "Pink Terracotta", - "block.minecraft.pink_tulip": "Pink Tulip", - "block.minecraft.pink_wool": "Pink Wool", - "block.minecraft.piston": "Piston", - "block.minecraft.piston_head": "Piston Head", - "block.minecraft.pitcher_crop": "Pitcher Crop", - "block.minecraft.pitcher_plant": "Pitcher Plant", - "block.minecraft.player_head": "Player Head", - "block.minecraft.player_head.named": "%s's Head", - "block.minecraft.player_wall_head": "Player Wall Head", - "block.minecraft.podzol": "Podzol", - "block.minecraft.pointed_dripstone": "Pointed Dripstone", - "block.minecraft.polished_andesite": "Polished Andesite", - "block.minecraft.polished_andesite_slab": "Polished Andesite Slab", - "block.minecraft.polished_andesite_stairs": "Polished Andesite Stairs", - "block.minecraft.polished_basalt": "Polished Basalt", - "block.minecraft.polished_blackstone": "Polished Blackstone", - "block.minecraft.polished_blackstone_brick_slab": "Polished Blackstone Brick Slab", - "block.minecraft.polished_blackstone_brick_stairs": "Polished Blackstone Brick Stairs", - "block.minecraft.polished_blackstone_brick_wall": "Polished Blackstone Brick Wall", - "block.minecraft.polished_blackstone_bricks": "Polished Blackstone Bricks", - "block.minecraft.polished_blackstone_button": "Polished Blackstone Button", - "block.minecraft.polished_blackstone_pressure_plate": "Polished Blackstone Pressure Plate", - "block.minecraft.polished_blackstone_slab": "Polished Blackstone Slab", - "block.minecraft.polished_blackstone_stairs": "Polished Blackstone Stairs", - "block.minecraft.polished_blackstone_wall": "Polished Blackstone Wall", - "block.minecraft.polished_deepslate": "Polished Deepslate", - "block.minecraft.polished_deepslate_slab": "Polished Deepslate Slab", - "block.minecraft.polished_deepslate_stairs": "Polished Deepslate Stairs", - "block.minecraft.polished_deepslate_wall": "Polished Deepslate Wall", - "block.minecraft.polished_diorite": "Polished Diorite", - "block.minecraft.polished_diorite_slab": "Polished Diorite Slab", - "block.minecraft.polished_diorite_stairs": "Polished Diorite Stairs", - "block.minecraft.polished_granite": "Polished Granite", - "block.minecraft.polished_granite_slab": "Polished Granite Slab", - "block.minecraft.polished_granite_stairs": "Polished Granite Stairs", - "block.minecraft.polished_tuff": "Polished Tuff", - "block.minecraft.polished_tuff_slab": "Polished Tuff Slab", - "block.minecraft.polished_tuff_stairs": "Polished Tuff Stairs", - "block.minecraft.polished_tuff_wall": "Polished Tuff Wall", - "block.minecraft.poppy": "Poppy", - "block.minecraft.potatoes": "Potatoes", - "block.minecraft.potted_acacia_sapling": "Potted Acacia Sapling", - "block.minecraft.potted_allium": "Potted Allium", - "block.minecraft.potted_azalea_bush": "Potted Azalea", - "block.minecraft.potted_azure_bluet": "Potted Azure Bluet", - "block.minecraft.potted_bamboo": "Potted Bamboo", - "block.minecraft.potted_birch_sapling": "Potted Birch Sapling", - "block.minecraft.potted_blue_orchid": "Potted Blue Orchid", - "block.minecraft.potted_brown_mushroom": "Potted Brown Mushroom", - "block.minecraft.potted_cactus": "Potted Cactus", - "block.minecraft.potted_cherry_sapling": "Potted Cherry Sapling", - "block.minecraft.potted_cornflower": "Potted Cornflower", - "block.minecraft.potted_crimson_fungus": "Potted Crimson Fungus", - "block.minecraft.potted_crimson_roots": "Potted Crimson Roots", - "block.minecraft.potted_dandelion": "Potted Dandelion", - "block.minecraft.potted_dark_oak_sapling": "Potted Dark Oak Sapling", - "block.minecraft.potted_dead_bush": "Potted Dead Bush", - "block.minecraft.potted_fern": "Potted Fern", - "block.minecraft.potted_flowering_azalea_bush": "Potted Flowering Azalea", - "block.minecraft.potted_jungle_sapling": "Potted Jungle Sapling", - "block.minecraft.potted_lily_of_the_valley": "Potted Lily of the Valley", - "block.minecraft.potted_mangrove_propagule": "Potted Mangrove Propagule", - "block.minecraft.potted_oak_sapling": "Potted Oak Sapling", - "block.minecraft.potted_orange_tulip": "Potted Orange Tulip", - "block.minecraft.potted_oxeye_daisy": "Potted Oxeye Daisy", - "block.minecraft.potted_pink_tulip": "Potted Pink Tulip", - "block.minecraft.potted_poppy": "Potted Poppy", - "block.minecraft.potted_red_mushroom": "Potted Red Mushroom", - "block.minecraft.potted_red_tulip": "Potted Red Tulip", - "block.minecraft.potted_spruce_sapling": "Potted Spruce Sapling", - "block.minecraft.potted_torchflower": "Potted Torchflower", - "block.minecraft.potted_warped_fungus": "Potted Warped Fungus", - "block.minecraft.potted_warped_roots": "Potted Warped Roots", - "block.minecraft.potted_white_tulip": "Potted White Tulip", - "block.minecraft.potted_wither_rose": "Potted Wither Rose", - "block.minecraft.powder_snow": "Powder Snow", - "block.minecraft.powder_snow_cauldron": "Powder Snow Cauldron", - "block.minecraft.powered_rail": "Powered Rail", - "block.minecraft.prismarine": "Prismarine", - "block.minecraft.prismarine_brick_slab": "Prismarine Brick Slab", - "block.minecraft.prismarine_brick_stairs": "Prismarine Brick Stairs", - "block.minecraft.prismarine_bricks": "Prismarine Bricks", - "block.minecraft.prismarine_slab": "Prismarine Slab", - "block.minecraft.prismarine_stairs": "Prismarine Stairs", - "block.minecraft.prismarine_wall": "Prismarine Wall", - "block.minecraft.pumpkin": "Pumpkin", - "block.minecraft.pumpkin_stem": "Pumpkin Stem", - "block.minecraft.purple_banner": "Purple Banner", - "block.minecraft.purple_bed": "Purple Bed", - "block.minecraft.purple_candle": "Purple Candle", - "block.minecraft.purple_candle_cake": "Cake with Purple Candle", - "block.minecraft.purple_carpet": "Purple Carpet", - "block.minecraft.purple_concrete": "Purple Concrete", - "block.minecraft.purple_concrete_powder": "Purple Concrete Powder", - "block.minecraft.purple_glazed_terracotta": "Purple Glazed Terracotta", - "block.minecraft.purple_shulker_box": "Purple Shulker Box", - "block.minecraft.purple_stained_glass": "Purple Stained Glass", - "block.minecraft.purple_stained_glass_pane": "Purple Stained Glass Pane", - "block.minecraft.purple_terracotta": "Purple Terracotta", - "block.minecraft.purple_wool": "Purple Wool", - "block.minecraft.purpur_block": "Purpur Block", - "block.minecraft.purpur_pillar": "Purpur Pillar", - "block.minecraft.purpur_slab": "Purpur Slab", - "block.minecraft.purpur_stairs": "Purpur Stairs", - "block.minecraft.quartz_block": "Block of Quartz", - "block.minecraft.quartz_bricks": "Quartz Bricks", - "block.minecraft.quartz_pillar": "Quartz Pillar", - "block.minecraft.quartz_slab": "Quartz Slab", - "block.minecraft.quartz_stairs": "Quartz Stairs", - "block.minecraft.rail": "Rail", - "block.minecraft.raw_copper_block": "Block of Raw Copper", - "block.minecraft.raw_gold_block": "Block of Raw Gold", - "block.minecraft.raw_iron_block": "Block of Raw Iron", - "block.minecraft.red_banner": "Red Banner", - "block.minecraft.red_bed": "Red Bed", - "block.minecraft.red_candle": "Red Candle", - "block.minecraft.red_candle_cake": "Cake with Red Candle", - "block.minecraft.red_carpet": "Red Carpet", - "block.minecraft.red_concrete": "Red Concrete", - "block.minecraft.red_concrete_powder": "Red Concrete Powder", - "block.minecraft.red_glazed_terracotta": "Red Glazed Terracotta", - "block.minecraft.red_mushroom": "Red Mushroom", - "block.minecraft.red_mushroom_block": "Red Mushroom Block", - "block.minecraft.red_nether_brick_slab": "Red Nether Brick Slab", - "block.minecraft.red_nether_brick_stairs": "Red Nether Brick Stairs", - "block.minecraft.red_nether_brick_wall": "Red Nether Brick Wall", - "block.minecraft.red_nether_bricks": "Red Nether Bricks", - "block.minecraft.red_sand": "Red Sand", - "block.minecraft.red_sandstone": "Red Sandstone", - "block.minecraft.red_sandstone_slab": "Red Sandstone Slab", - "block.minecraft.red_sandstone_stairs": "Red Sandstone Stairs", - "block.minecraft.red_sandstone_wall": "Red Sandstone Wall", - "block.minecraft.red_shulker_box": "Red Shulker Box", - "block.minecraft.red_stained_glass": "Red Stained Glass", - "block.minecraft.red_stained_glass_pane": "Red Stained Glass Pane", - "block.minecraft.red_terracotta": "Red Terracotta", - "block.minecraft.red_tulip": "Red Tulip", - "block.minecraft.red_wool": "Red Wool", - "block.minecraft.redstone_block": "Block of Redstone", - "block.minecraft.redstone_lamp": "Redstone Lamp", - "block.minecraft.redstone_ore": "Redstone Ore", - "block.minecraft.redstone_torch": "Redstone Torch", - "block.minecraft.redstone_wall_torch": "Redstone Wall Torch", - "block.minecraft.redstone_wire": "Redstone Wire", - "block.minecraft.reinforced_deepslate": "Reinforced Deepslate", - "block.minecraft.repeater": "Redstone Repeater", - "block.minecraft.repeating_command_block": "Repeating Command Block", - "block.minecraft.respawn_anchor": "Respawn Anchor", - "block.minecraft.rooted_dirt": "Rooted Dirt", - "block.minecraft.rose_bush": "Rose Bush", - "block.minecraft.sand": "Sand", - "block.minecraft.sandstone": "Sandstone", - "block.minecraft.sandstone_slab": "Sandstone Slab", - "block.minecraft.sandstone_stairs": "Sandstone Stairs", - "block.minecraft.sandstone_wall": "Sandstone Wall", - "block.minecraft.scaffolding": "Scaffolding", - "block.minecraft.sculk": "Sculk", - "block.minecraft.sculk_catalyst": "Sculk Catalyst", - "block.minecraft.sculk_sensor": "Sculk Sensor", - "block.minecraft.sculk_shrieker": "Sculk Shrieker", - "block.minecraft.sculk_vein": "Sculk Vein", - "block.minecraft.sea_lantern": "Sea Lantern", - "block.minecraft.sea_pickle": "Sea Pickle", - "block.minecraft.seagrass": "Seagrass", - "block.minecraft.set_spawn": "Respawn point set", - "block.minecraft.short_grass": "Short Grass", - "block.minecraft.shroomlight": "Shroomlight", - "block.minecraft.shulker_box": "Shulker Box", - "block.minecraft.skeleton_skull": "Skeleton Skull", - "block.minecraft.skeleton_wall_skull": "Skeleton Wall Skull", - "block.minecraft.slime_block": "Slime Block", - "block.minecraft.small_amethyst_bud": "Small Amethyst Bud", - "block.minecraft.small_dripleaf": "Small Dripleaf", - "block.minecraft.smithing_table": "Smithing Table", - "block.minecraft.smoker": "Smoker", - "block.minecraft.smooth_basalt": "Smooth Basalt", - "block.minecraft.smooth_quartz": "Smooth Quartz Block", - "block.minecraft.smooth_quartz_slab": "Smooth Quartz Slab", - "block.minecraft.smooth_quartz_stairs": "Smooth Quartz Stairs", - "block.minecraft.smooth_red_sandstone": "Smooth Red Sandstone", - "block.minecraft.smooth_red_sandstone_slab": "Smooth Red Sandstone Slab", - "block.minecraft.smooth_red_sandstone_stairs": "Smooth Red Sandstone Stairs", - "block.minecraft.smooth_sandstone": "Smooth Sandstone", - "block.minecraft.smooth_sandstone_slab": "Smooth Sandstone Slab", - "block.minecraft.smooth_sandstone_stairs": "Smooth Sandstone Stairs", - "block.minecraft.smooth_stone": "Smooth Stone", - "block.minecraft.smooth_stone_slab": "Smooth Stone Slab", - "block.minecraft.sniffer_egg": "Sniffer Egg", - "block.minecraft.snow": "Snow", - "block.minecraft.snow_block": "Snow Block", - "block.minecraft.soul_campfire": "Soul Campfire", - "block.minecraft.soul_fire": "Soul Fire", - "block.minecraft.soul_lantern": "Soul Lantern", - "block.minecraft.soul_sand": "Soul Sand", - "block.minecraft.soul_soil": "Soul Soil", - "block.minecraft.soul_torch": "Soul Torch", - "block.minecraft.soul_wall_torch": "Soul Wall Torch", - "block.minecraft.spawn.not_valid": "You have no home bed or charged respawn anchor, or it was obstructed", - "block.minecraft.spawner": "Monster Spawner", - "block.minecraft.spawner.desc1": "Interact with Spawn Egg:", - "block.minecraft.spawner.desc2": "Sets Mob Type", - "block.minecraft.sponge": "Sponge", - "block.minecraft.spore_blossom": "Spore Blossom", - "block.minecraft.spruce_button": "Spruce Button", - "block.minecraft.spruce_door": "Spruce Door", - "block.minecraft.spruce_fence": "Spruce Fence", - "block.minecraft.spruce_fence_gate": "Spruce Fence Gate", - "block.minecraft.spruce_hanging_sign": "Spruce Hanging Sign", - "block.minecraft.spruce_leaves": "Spruce Leaves", - "block.minecraft.spruce_log": "Spruce Log", - "block.minecraft.spruce_planks": "Spruce Planks", - "block.minecraft.spruce_pressure_plate": "Spruce Pressure Plate", - "block.minecraft.spruce_sapling": "Spruce Sapling", - "block.minecraft.spruce_sign": "Spruce Sign", - "block.minecraft.spruce_slab": "Spruce Slab", - "block.minecraft.spruce_stairs": "Spruce Stairs", - "block.minecraft.spruce_trapdoor": "Spruce Trapdoor", - "block.minecraft.spruce_wall_hanging_sign": "Spruce Wall Hanging Sign", - "block.minecraft.spruce_wall_sign": "Spruce Wall Sign", - "block.minecraft.spruce_wood": "Spruce Wood", - "block.minecraft.sticky_piston": "Sticky Piston", - "block.minecraft.stone": "Stone", - "block.minecraft.stone_brick_slab": "Stone Brick Slab", - "block.minecraft.stone_brick_stairs": "Stone Brick Stairs", - "block.minecraft.stone_brick_wall": "Stone Brick Wall", - "block.minecraft.stone_bricks": "Stone Bricks", - "block.minecraft.stone_button": "Stone Button", - "block.minecraft.stone_pressure_plate": "Stone Pressure Plate", - "block.minecraft.stone_slab": "Stone Slab", - "block.minecraft.stone_stairs": "Stone Stairs", - "block.minecraft.stonecutter": "Stonecutter", - "block.minecraft.stripped_acacia_log": "Stripped Acacia Log", - "block.minecraft.stripped_acacia_wood": "Stripped Acacia Wood", - "block.minecraft.stripped_bamboo_block": "Block of Stripped Bamboo", - "block.minecraft.stripped_birch_log": "Stripped Birch Log", - "block.minecraft.stripped_birch_wood": "Stripped Birch Wood", - "block.minecraft.stripped_cherry_log": "Stripped Cherry Log", - "block.minecraft.stripped_cherry_wood": "Stripped Cherry Wood", - "block.minecraft.stripped_crimson_hyphae": "Stripped Crimson Hyphae", - "block.minecraft.stripped_crimson_stem": "Stripped Crimson Stem", - "block.minecraft.stripped_dark_oak_log": "Stripped Dark Oak Log", - "block.minecraft.stripped_dark_oak_wood": "Stripped Dark Oak Wood", - "block.minecraft.stripped_jungle_log": "Stripped Jungle Log", - "block.minecraft.stripped_jungle_wood": "Stripped Jungle Wood", - "block.minecraft.stripped_mangrove_log": "Stripped Mangrove Log", - "block.minecraft.stripped_mangrove_wood": "Stripped Mangrove Wood", - "block.minecraft.stripped_oak_log": "Stripped Oak Log", - "block.minecraft.stripped_oak_wood": "Stripped Oak Wood", - "block.minecraft.stripped_spruce_log": "Stripped Spruce Log", - "block.minecraft.stripped_spruce_wood": "Stripped Spruce Wood", - "block.minecraft.stripped_warped_hyphae": "Stripped Warped Hyphae", - "block.minecraft.stripped_warped_stem": "Stripped Warped Stem", - "block.minecraft.structure_block": "Structure Block", - "block.minecraft.structure_void": "Structure Void", - "block.minecraft.sugar_cane": "Sugar Cane", - "block.minecraft.sunflower": "Sunflower", - "block.minecraft.suspicious_gravel": "Suspicious Gravel", - "block.minecraft.suspicious_sand": "Suspicious Sand", - "block.minecraft.sweet_berry_bush": "Sweet Berry Bush", - "block.minecraft.tall_grass": "Tall Grass", - "block.minecraft.tall_seagrass": "Tall Seagrass", - "block.minecraft.target": "Target", - "block.minecraft.terracotta": "Terracotta", - "block.minecraft.tinted_glass": "Tinted Glass", - "block.minecraft.tnt": "TNT", - "block.minecraft.torch": "Torch", - "block.minecraft.torchflower": "Torchflower", - "block.minecraft.torchflower_crop": "Torchflower Crop", - "block.minecraft.trapped_chest": "Trapped Chest", - "block.minecraft.trial_spawner": "Trial Spawner", - "block.minecraft.tripwire": "Tripwire", - "block.minecraft.tripwire_hook": "Tripwire Hook", - "block.minecraft.tube_coral": "Tube Coral", - "block.minecraft.tube_coral_block": "Tube Coral Block", - "block.minecraft.tube_coral_fan": "Tube Coral Fan", - "block.minecraft.tube_coral_wall_fan": "Tube Coral Wall Fan", - "block.minecraft.tuff": "Tuff", - "block.minecraft.tuff_brick_slab": "Tuff Brick Slab", - "block.minecraft.tuff_brick_stairs": "Tuff Brick Stairs", - "block.minecraft.tuff_brick_wall": "Tuff Brick Wall", - "block.minecraft.tuff_bricks": "Tuff Bricks", - "block.minecraft.tuff_slab": "Tuff Slab", - "block.minecraft.tuff_stairs": "Tuff Stairs", - "block.minecraft.tuff_wall": "Tuff Wall", - "block.minecraft.turtle_egg": "Turtle Egg", - "block.minecraft.twisting_vines": "Twisting Vines", - "block.minecraft.twisting_vines_plant": "Twisting Vines Plant", - "block.minecraft.verdant_froglight": "Verdant Froglight", - "block.minecraft.vine": "Vines", - "block.minecraft.void_air": "Void Air", - "block.minecraft.wall_torch": "Wall Torch", - "block.minecraft.warped_button": "Warped Button", - "block.minecraft.warped_door": "Warped Door", - "block.minecraft.warped_fence": "Warped Fence", - "block.minecraft.warped_fence_gate": "Warped Fence Gate", - "block.minecraft.warped_fungus": "Warped Fungus", - "block.minecraft.warped_hanging_sign": "Warped Hanging Sign", - "block.minecraft.warped_hyphae": "Warped Hyphae", - "block.minecraft.warped_nylium": "Warped Nylium", - "block.minecraft.warped_planks": "Warped Planks", - "block.minecraft.warped_pressure_plate": "Warped Pressure Plate", - "block.minecraft.warped_roots": "Warped Roots", - "block.minecraft.warped_sign": "Warped Sign", - "block.minecraft.warped_slab": "Warped Slab", - "block.minecraft.warped_stairs": "Warped Stairs", - "block.minecraft.warped_stem": "Warped Stem", - "block.minecraft.warped_trapdoor": "Warped Trapdoor", - "block.minecraft.warped_wall_hanging_sign": "Warped Wall Hanging Sign", - "block.minecraft.warped_wall_sign": "Warped Wall Sign", - "block.minecraft.warped_wart_block": "Warped Wart Block", - "block.minecraft.water": "Water", - "block.minecraft.water_cauldron": "Water Cauldron", - "block.minecraft.waxed_chiseled_copper": "Waxed Chiseled Copper", - "block.minecraft.waxed_copper_block": "Waxed Block of Copper", - "block.minecraft.waxed_copper_bulb": "Waxed Copper Bulb", - "block.minecraft.waxed_copper_door": "Waxed Copper Door", - "block.minecraft.waxed_copper_grate": "Waxed Copper Grate", - "block.minecraft.waxed_copper_trapdoor": "Waxed Copper Trapdoor", - "block.minecraft.waxed_cut_copper": "Waxed Cut Copper", - "block.minecraft.waxed_cut_copper_slab": "Waxed Cut Copper Slab", - "block.minecraft.waxed_cut_copper_stairs": "Waxed Cut Copper Stairs", - "block.minecraft.waxed_exposed_chiseled_copper": "Waxed Exposed Chiseled Copper", - "block.minecraft.waxed_exposed_copper": "Waxed Exposed Copper", - "block.minecraft.waxed_exposed_copper_bulb": "Waxed Exposed Copper Bulb", - "block.minecraft.waxed_exposed_copper_door": "Waxed Exposed Copper Door", - "block.minecraft.waxed_exposed_copper_grate": "Waxed Exposed Copper Grate", - "block.minecraft.waxed_exposed_copper_trapdoor": "Waxed Exposed Copper Trapdoor", - "block.minecraft.waxed_exposed_cut_copper": "Waxed Exposed Cut Copper", - "block.minecraft.waxed_exposed_cut_copper_slab": "Waxed Exposed Cut Copper Slab", - "block.minecraft.waxed_exposed_cut_copper_stairs": "Waxed Exposed Cut Copper Stairs", - "block.minecraft.waxed_oxidized_chiseled_copper": "Waxed Oxidized Chiseled Copper", - "block.minecraft.waxed_oxidized_copper": "Waxed Oxidized Copper", - "block.minecraft.waxed_oxidized_copper_bulb": "Waxed Oxidized Copper Bulb", - "block.minecraft.waxed_oxidized_copper_door": "Waxed Oxidized Copper Door", - "block.minecraft.waxed_oxidized_copper_grate": "Waxed Oxidized Copper Grate", - "block.minecraft.waxed_oxidized_copper_trapdoor": "Waxed Oxidized Copper Trapdoor", - "block.minecraft.waxed_oxidized_cut_copper": "Waxed Oxidized Cut Copper", - "block.minecraft.waxed_oxidized_cut_copper_slab": "Waxed Oxidized Cut Copper Slab", - "block.minecraft.waxed_oxidized_cut_copper_stairs": "Waxed Oxidized Cut Copper Stairs", - "block.minecraft.waxed_weathered_chiseled_copper": "Waxed Weathered Chiseled Copper", - "block.minecraft.waxed_weathered_copper": "Waxed Weathered Copper", - "block.minecraft.waxed_weathered_copper_bulb": "Waxed Weathered Copper Bulb", - "block.minecraft.waxed_weathered_copper_door": "Waxed Weathered Copper Door", - "block.minecraft.waxed_weathered_copper_grate": "Waxed Weathered Copper Grate", - "block.minecraft.waxed_weathered_copper_trapdoor": "Waxed Weathered Copper Trapdoor", - "block.minecraft.waxed_weathered_cut_copper": "Waxed Weathered Cut Copper", - "block.minecraft.waxed_weathered_cut_copper_slab": "Waxed Weathered Cut Copper Slab", - "block.minecraft.waxed_weathered_cut_copper_stairs": "Waxed Weathered Cut Copper Stairs", - "block.minecraft.weathered_chiseled_copper": "Weathered Chiseled Copper", - "block.minecraft.weathered_copper": "Weathered Copper", - "block.minecraft.weathered_copper_bulb": "Weathered Copper Bulb", - "block.minecraft.weathered_copper_door": "Weathered Copper Door", - "block.minecraft.weathered_copper_grate": "Weathered Copper Grate", - "block.minecraft.weathered_copper_trapdoor": "Weathered Copper Trapdoor", - "block.minecraft.weathered_cut_copper": "Weathered Cut Copper", - "block.minecraft.weathered_cut_copper_slab": "Weathered Cut Copper Slab", - "block.minecraft.weathered_cut_copper_stairs": "Weathered Cut Copper Stairs", - "block.minecraft.weeping_vines": "Weeping Vines", - "block.minecraft.weeping_vines_plant": "Weeping Vines Plant", - "block.minecraft.wet_sponge": "Wet Sponge", - "block.minecraft.wheat": "Wheat Crops", - "block.minecraft.white_banner": "White Banner", - "block.minecraft.white_bed": "White Bed", - "block.minecraft.white_candle": "White Candle", - "block.minecraft.white_candle_cake": "Cake with White Candle", - "block.minecraft.white_carpet": "White Carpet", - "block.minecraft.white_concrete": "White Concrete", - "block.minecraft.white_concrete_powder": "White Concrete Powder", - "block.minecraft.white_glazed_terracotta": "White Glazed Terracotta", - "block.minecraft.white_shulker_box": "White Shulker Box", - "block.minecraft.white_stained_glass": "White Stained Glass", - "block.minecraft.white_stained_glass_pane": "White Stained Glass Pane", - "block.minecraft.white_terracotta": "White Terracotta", - "block.minecraft.white_tulip": "White Tulip", - "block.minecraft.white_wool": "White Wool", - "block.minecraft.wither_rose": "Wither Rose", - "block.minecraft.wither_skeleton_skull": "Wither Skeleton Skull", - "block.minecraft.wither_skeleton_wall_skull": "Wither Skeleton Wall Skull", - "block.minecraft.yellow_banner": "Yellow Banner", - "block.minecraft.yellow_bed": "Yellow Bed", - "block.minecraft.yellow_candle": "Yellow Candle", - "block.minecraft.yellow_candle_cake": "Cake with Yellow Candle", - "block.minecraft.yellow_carpet": "Yellow Carpet", - "block.minecraft.yellow_concrete": "Yellow Concrete", - "block.minecraft.yellow_concrete_powder": "Yellow Concrete Powder", - "block.minecraft.yellow_glazed_terracotta": "Yellow Glazed Terracotta", - "block.minecraft.yellow_shulker_box": "Yellow Shulker Box", - "block.minecraft.yellow_stained_glass": "Yellow Stained Glass", - "block.minecraft.yellow_stained_glass_pane": "Yellow Stained Glass Pane", - "block.minecraft.yellow_terracotta": "Yellow Terracotta", - "block.minecraft.yellow_wool": "Yellow Wool", - "block.minecraft.zombie_head": "Zombie Head", - "block.minecraft.zombie_wall_head": "Zombie Wall Head", - "book.byAuthor": "by %1$s", - "book.editTitle": "Enter Book Title:", - "book.finalizeButton": "Sign and Close", - "book.finalizeWarning": "Note! When you sign the book, it will no longer be editable.", - "book.generation.0": "Original", - "book.generation.1": "Copy of original", - "book.generation.2": "Copy of a copy", - "book.generation.3": "Tattered", - "book.invalid.tag": "* Invalid book tag *", - "book.pageIndicator": "Page %1$s of %2$s", - "book.signButton": "Sign", - "build.tooHigh": "Height limit for building is %s", - "chat_screen.message": "Message to send: %s", - "chat_screen.title": "Chat screen", - "chat_screen.usage": "Input message and press Enter to send", - "chat.cannotSend": "Cannot send chat message", - "chat.coordinates": "%s, %s, %s", - "chat.coordinates.tooltip": "Click to teleport", - "chat.copy": "Copy to Clipboard", - "chat.copy.click": "Click to Copy to Clipboard", - "chat.deleted_marker": "This chat message has been deleted by the server.", - "chat.disabled.chain_broken": "Chat disabled due to broken chain. Please try reconnecting.", - "chat.disabled.expiredProfileKey": "Chat disabled due to expired profile public key. Please try reconnecting.", - "chat.disabled.launcher": "Chat disabled by launcher option. Cannot send message.", - "chat.disabled.missingProfileKey": "Chat disabled due to missing profile public key. Please try reconnecting.", - "chat.disabled.options": "Chat disabled in client options.", - "chat.disabled.profile": "Chat not allowed by account settings. Press '%s' again for more information.", - "chat.disabled.profile.moreInfo": "Chat not allowed by account settings. Cannot send or view messages.", - "chat.editBox": "chat", - "chat.filtered": "Filtered by the server.", - "chat.filtered_full": "The server has hidden your message for some players.", - "chat.link.confirm": "Are you sure you want to open the following website?", - "chat.link.confirmTrusted": "Do you want to open this link or copy it to your clipboard?", - "chat.link.open": "Open in Browser", - "chat.link.warning": "Never open links from people that you don't trust!", - "chat.queue": "[+%s pending lines]", - "chat.square_brackets": "[%s]", - "chat.tag.error": "Server sent invalid message.", - "chat.tag.modified": "Message modified by the server. Original:", - "chat.tag.not_secure": "Unverified message. Cannot be reported.", - "chat.tag.system": "Server message. Cannot be reported.", - "chat.tag.system_single_player": "Server message.", - "chat.type.admin": "[%s: %s]", - "chat.type.advancement.challenge": "%s has completed the challenge %s", - "chat.type.advancement.goal": "%s has reached the goal %s", - "chat.type.advancement.task": "%s has made the advancement %s", - "chat.type.announcement": "[%s] %s", - "chat.type.emote": "* %s %s", - "chat.type.team.hover": "Message Team", - "chat.type.team.sent": "-> %s <%s> %s", - "chat.type.team.text": "%s <%s> %s", - "chat.type.text": "<%s> %s", - "chat.type.text.narrate": "%s says %s", - "chat.validation_error": "Chat validation error", - "clear.failed.multiple": "No items were found on %s players", - "clear.failed.single": "No items were found on player %s", - "color.minecraft.black": "Black", - "color.minecraft.blue": "Blue", - "color.minecraft.brown": "Brown", - "color.minecraft.cyan": "Cyan", - "color.minecraft.gray": "Gray", - "color.minecraft.green": "Green", - "color.minecraft.light_blue": "Light Blue", - "color.minecraft.light_gray": "Light Gray", - "color.minecraft.lime": "Lime", - "color.minecraft.magenta": "Magenta", - "color.minecraft.orange": "Orange", - "color.minecraft.pink": "Pink", - "color.minecraft.purple": "Purple", - "color.minecraft.red": "Red", - "color.minecraft.white": "White", - "color.minecraft.yellow": "Yellow", - "command.context.here": "<--[HERE]", - "command.context.parse_error": "%s at position %s: %s", - "command.exception": "Could not parse command: %s", - "command.expected.separator": "Expected whitespace to end one argument, but found trailing data", - "command.failed": "An unexpected error occurred trying to execute that command", - "command.forkLimit": "Maximum number of contexts (%s) reached", - "command.unknown.argument": "Incorrect argument for command", - "command.unknown.command": "Unknown or incomplete command, see below for error", - "commands.advancement.advancementNotFound": "No advancement was found by the name '%1$s'", - "commands.advancement.criterionNotFound": "The advancement %1$s does not contain the criterion '%2$s'", - "commands.advancement.grant.criterion.to.many.failure": "Couldn't grant criterion '%s' of advancement %s to %s players as they already have it", - "commands.advancement.grant.criterion.to.many.success": "Granted criterion '%s' of advancement %s to %s players", - "commands.advancement.grant.criterion.to.one.failure": "Couldn't grant criterion '%s' of advancement %s to %s as they already have it", - "commands.advancement.grant.criterion.to.one.success": "Granted criterion '%s' of advancement %s to %s", - "commands.advancement.grant.many.to.many.failure": "Couldn't grant %s advancements to %s players as they already have them", - "commands.advancement.grant.many.to.many.success": "Granted %s advancements to %s players", - "commands.advancement.grant.many.to.one.failure": "Couldn't grant %s advancements to %s as they already have them", - "commands.advancement.grant.many.to.one.success": "Granted %s advancements to %s", - "commands.advancement.grant.one.to.many.failure": "Couldn't grant advancement %s to %s players as they already have it", - "commands.advancement.grant.one.to.many.success": "Granted the advancement %s to %s players", - "commands.advancement.grant.one.to.one.failure": "Couldn't grant advancement %s to %s as they already have it", - "commands.advancement.grant.one.to.one.success": "Granted the advancement %s to %s", - "commands.advancement.revoke.criterion.to.many.failure": "Couldn't revoke criterion '%s' of advancement %s from %s players as they don't have it", - "commands.advancement.revoke.criterion.to.many.success": "Revoked criterion '%s' of advancement %s from %s players", - "commands.advancement.revoke.criterion.to.one.failure": "Couldn't revoke criterion '%s' of advancement %s from %s as they don't have it", - "commands.advancement.revoke.criterion.to.one.success": "Revoked criterion '%s' of advancement %s from %s", - "commands.advancement.revoke.many.to.many.failure": "Couldn't revoke %s advancements from %s players as they don't have them", - "commands.advancement.revoke.many.to.many.success": "Revoked %s advancements from %s players", - "commands.advancement.revoke.many.to.one.failure": "Couldn't revoke %s advancements from %s as they don't have them", - "commands.advancement.revoke.many.to.one.success": "Revoked %s advancements from %s", - "commands.advancement.revoke.one.to.many.failure": "Couldn't revoke advancement %s from %s players as they don't have it", - "commands.advancement.revoke.one.to.many.success": "Revoked the advancement %s from %s players", - "commands.advancement.revoke.one.to.one.failure": "Couldn't revoke advancement %s from %s as they don't have it", - "commands.advancement.revoke.one.to.one.success": "Revoked the advancement %s from %s", - "commands.attribute.base_value.get.success": "Base value of attribute %s for entity %s is %s", - "commands.attribute.base_value.set.success": "Base value for attribute %s for entity %s set to %s", - "commands.attribute.failed.entity": "%s is not a valid entity for this command", - "commands.attribute.failed.modifier_already_present": "Modifier %s is already present on attribute %s for entity %s", - "commands.attribute.failed.no_attribute": "Entity %s has no attribute %s", - "commands.attribute.failed.no_modifier": "Attribute %s for entity %s has no modifier %s", - "commands.attribute.modifier.add.success": "Added modifier %s to attribute %s for entity %s", - "commands.attribute.modifier.remove.success": "Removed modifier %s from attribute %s for entity %s", - "commands.attribute.modifier.value.get.success": "Value of modifier %s on attribute %s for entity %s is %s", - "commands.attribute.value.get.success": "Value of attribute %s for entity %s is %s", - "commands.ban.failed": "Nothing changed. The player is already banned", - "commands.ban.success": "Banned %s: %s", - "commands.banip.failed": "Nothing changed. That IP is already banned", - "commands.banip.info": "This ban affects %s player(s): %s", - "commands.banip.invalid": "Invalid IP address or unknown player", - "commands.banip.success": "Banned IP %s: %s", - "commands.banlist.entry": "%s was banned by %s: %s", - "commands.banlist.entry.unknown": "(Unknown)", - "commands.banlist.list": "There are %s ban(s):", - "commands.banlist.none": "There are no bans", - "commands.bossbar.create.failed": "A bossbar already exists with the ID '%s'", - "commands.bossbar.create.success": "Created custom bossbar %s", - "commands.bossbar.get.max": "Custom bossbar %s has a maximum of %s", - "commands.bossbar.get.players.none": "Custom bossbar %s has no players currently online", - "commands.bossbar.get.players.some": "Custom bossbar %s has %s player(s) currently online: %s", - "commands.bossbar.get.value": "Custom bossbar %s has a value of %s", - "commands.bossbar.get.visible.hidden": "Custom bossbar %s is currently hidden", - "commands.bossbar.get.visible.visible": "Custom bossbar %s is currently shown", - "commands.bossbar.list.bars.none": "There are no custom bossbars active", - "commands.bossbar.list.bars.some": "There are %s custom bossbar(s) active: %s", - "commands.bossbar.remove.success": "Removed custom bossbar %s", - "commands.bossbar.set.color.success": "Custom bossbar %s has changed color", - "commands.bossbar.set.color.unchanged": "Nothing changed. That's already the color of this bossbar", - "commands.bossbar.set.max.success": "Custom bossbar %s has changed maximum to %s", - "commands.bossbar.set.max.unchanged": "Nothing changed. That's already the max of this bossbar", - "commands.bossbar.set.name.success": "Custom bossbar %s has been renamed", - "commands.bossbar.set.name.unchanged": "Nothing changed. That's already the name of this bossbar", - "commands.bossbar.set.players.success.none": "Custom bossbar %s no longer has any players", - "commands.bossbar.set.players.success.some": "Custom bossbar %s now has %s player(s): %s", - "commands.bossbar.set.players.unchanged": "Nothing changed. Those players are already on the bossbar with nobody to add or remove", - "commands.bossbar.set.style.success": "Custom bossbar %s has changed style", - "commands.bossbar.set.style.unchanged": "Nothing changed. That's already the style of this bossbar", - "commands.bossbar.set.value.success": "Custom bossbar %s has changed value to %s", - "commands.bossbar.set.value.unchanged": "Nothing changed. That's already the value of this bossbar", - "commands.bossbar.set.visibility.unchanged.hidden": "Nothing changed. The bossbar is already hidden", - "commands.bossbar.set.visibility.unchanged.visible": "Nothing changed. The bossbar is already visible", - "commands.bossbar.set.visible.success.hidden": "Custom bossbar %s is now hidden", - "commands.bossbar.set.visible.success.visible": "Custom bossbar %s is now visible", - "commands.bossbar.unknown": "No bossbar exists with the ID '%s'", - "commands.clear.success.multiple": "Removed %s item(s) from %s players", - "commands.clear.success.single": "Removed %s item(s) from player %s", - "commands.clear.test.multiple": "Found %s matching item(s) on %s players", - "commands.clear.test.single": "Found %s matching item(s) on player %s", - "commands.clone.failed": "No blocks were cloned", - "commands.clone.overlap": "The source and destination areas cannot overlap", - "commands.clone.success": "Successfully cloned %s block(s)", - "commands.clone.toobig": "Too many blocks in the specified area (maximum %s, specified %s)", - "commands.damage.invulnerable": "Target is invulnerable to the given damage type", - "commands.damage.success": "Applied %s damage to %s", - "commands.data.block.get": "%s on block %s, %s, %s after scale factor of %s is %s", - "commands.data.block.invalid": "The target block is not a block entity", - "commands.data.block.modified": "Modified block data of %s, %s, %s", - "commands.data.block.query": "%s, %s, %s has the following block data: %s", - "commands.data.entity.get": "%s on %s after scale factor of %s is %s", - "commands.data.entity.invalid": "Unable to modify player data", - "commands.data.entity.modified": "Modified entity data of %s", - "commands.data.entity.query": "%s has the following entity data: %s", - "commands.data.get.invalid": "Can't get %s; only numeric tags are allowed", - "commands.data.get.multiple": "This argument accepts a single NBT value", - "commands.data.get.unknown": "Can't get %s; tag doesn't exist", - "commands.data.merge.failed": "Nothing changed. The specified properties already have these values", - "commands.data.modify.expected_list": "Expected list, got: %s", - "commands.data.modify.expected_object": "Expected object, got: %s", - "commands.data.modify.expected_value": "Expected value, got: %s", - "commands.data.modify.invalid_index": "Invalid list index: %s", - "commands.data.modify.invalid_substring": "Invalid substring indices: %s to %s", - "commands.data.storage.get": "%s in storage %s after scale factor of %s is %s", - "commands.data.storage.modified": "Modified storage %s", - "commands.data.storage.query": "Storage %s has the following contents: %s", - "commands.datapack.disable.failed": "Pack '%s' is not enabled!", - "commands.datapack.enable.failed": "Pack '%s' is already enabled!", - "commands.datapack.enable.failed.no_flags": "Pack '%s' cannot be enabled, since required flags are not enabled in this world: %s!", - "commands.datapack.list.available.none": "There are no more data packs available", - "commands.datapack.list.available.success": "There are %s data pack(s) available: %s", - "commands.datapack.list.enabled.none": "There are no data packs enabled", - "commands.datapack.list.enabled.success": "There are %s data pack(s) enabled: %s", - "commands.datapack.modify.disable": "Disabling data pack %s", - "commands.datapack.modify.enable": "Enabling data pack %s", - "commands.datapack.unknown": "Unknown data pack '%s'", - "commands.debug.alreadyRunning": "The tick profiler is already started", - "commands.debug.function.noRecursion": "Can't trace from inside of function", - "commands.debug.function.noReturnRun": "Tracing can't be used with return run", - "commands.debug.function.success.multiple": "Traced %s command(s) from %s functions to output file %s", - "commands.debug.function.success.single": "Traced %s command(s) from function '%s' to output file %s", - "commands.debug.function.traceFailed": "Failed to trace function", - "commands.debug.notRunning": "The tick profiler hasn't started", - "commands.debug.started": "Started tick profiling", - "commands.debug.stopped": "Stopped tick profiling after %s seconds and %s ticks (%s ticks per second)", - "commands.defaultgamemode.success": "The default game mode is now %s", - "commands.deop.failed": "Nothing changed. The player is not an operator", - "commands.deop.success": "Made %s no longer a server operator", - "commands.difficulty.failure": "The difficulty did not change; it is already set to %s", - "commands.difficulty.query": "The difficulty is %s", - "commands.difficulty.success": "The difficulty has been set to %s", - "commands.drop.no_held_items": "Entity can't hold any items", - "commands.drop.no_loot_table": "Entity %s has no loot table", - "commands.drop.success.multiple": "Dropped %s items", - "commands.drop.success.multiple_with_table": "Dropped %s items from loot table %s", - "commands.drop.success.single": "Dropped %s %s", - "commands.drop.success.single_with_table": "Dropped %s %s from loot table %s", - "commands.effect.clear.everything.failed": "Target has no effects to remove", - "commands.effect.clear.everything.success.multiple": "Removed every effect from %s targets", - "commands.effect.clear.everything.success.single": "Removed every effect from %s", - "commands.effect.clear.specific.failed": "Target doesn't have the requested effect", - "commands.effect.clear.specific.success.multiple": "Removed effect %s from %s targets", - "commands.effect.clear.specific.success.single": "Removed effect %s from %s", - "commands.effect.give.failed": "Unable to apply this effect (target is either immune to effects, or has something stronger)", - "commands.effect.give.success.multiple": "Applied effect %s to %s targets", - "commands.effect.give.success.single": "Applied effect %s to %s", - "commands.enchant.failed": "Nothing changed. Targets either have no item in their hands or the enchantment could not be applied", - "commands.enchant.failed.entity": "%s is not a valid entity for this command", - "commands.enchant.failed.incompatible": "%s cannot support that enchantment", - "commands.enchant.failed.itemless": "%s is not holding any item", - "commands.enchant.failed.level": "%s is higher than the maximum level of %s supported by that enchantment", - "commands.enchant.success.multiple": "Applied enchantment %s to %s entities", - "commands.enchant.success.single": "Applied enchantment %s to %s's item", - "commands.execute.blocks.toobig": "Too many blocks in the specified area (maximum %s, specified %s)", - "commands.execute.conditional.fail": "Test failed", - "commands.execute.conditional.fail_count": "Test failed, count: %s", - "commands.execute.conditional.pass": "Test passed", - "commands.execute.conditional.pass_count": "Test passed, count: %s", - "commands.execute.function.instantiationFailure": "Failed to instantiate function %s: %s", - "commands.experience.add.levels.success.multiple": "Gave %s experience levels to %s players", - "commands.experience.add.levels.success.single": "Gave %s experience levels to %s", - "commands.experience.add.points.success.multiple": "Gave %s experience points to %s players", - "commands.experience.add.points.success.single": "Gave %s experience points to %s", - "commands.experience.query.levels": "%s has %s experience levels", - "commands.experience.query.points": "%s has %s experience points", - "commands.experience.set.levels.success.multiple": "Set %s experience levels on %s players", - "commands.experience.set.levels.success.single": "Set %s experience levels on %s", - "commands.experience.set.points.invalid": "Cannot set experience points above the maximum points for the player's current level", - "commands.experience.set.points.success.multiple": "Set %s experience points on %s players", - "commands.experience.set.points.success.single": "Set %s experience points on %s", - "commands.fill.failed": "No blocks were filled", - "commands.fill.success": "Successfully filled %s block(s)", - "commands.fill.toobig": "Too many blocks in the specified area (maximum %s, specified %s)", - "commands.fillbiome.success": "Biomes set between %s, %s, %s and %s, %s, %s", - "commands.fillbiome.success.count": "%s biome entry/entries set between %s, %s, %s and %s, %s, %s", - "commands.fillbiome.toobig": "Too many blocks in the specified volume (maximum %s, specified %s)", - "commands.forceload.added.failure": "No chunks were marked for force loading", - "commands.forceload.added.multiple": "Marked %s chunks in %s from %s to %s to be force loaded", - "commands.forceload.added.none": "No force loaded chunks were found in %s", - "commands.forceload.added.single": "Marked chunk %s in %s to be force loaded", - "commands.forceload.list.multiple": "%s force loaded chunks were found in %s at: %s", - "commands.forceload.list.single": "A force loaded chunk was found in %s at: %s", - "commands.forceload.query.failure": "Chunk at %s in %s is not marked for force loading", - "commands.forceload.query.success": "Chunk at %s in %s is marked for force loading", - "commands.forceload.removed.all": "Unmarked all force loaded chunks in %s", - "commands.forceload.removed.failure": "No chunks were removed from force loading", - "commands.forceload.removed.multiple": "Unmarked %s chunks in %s from %s to %s for force loading", - "commands.forceload.removed.single": "Unmarked chunk %s in %s for force loading", - "commands.forceload.toobig": "Too many chunks in the specified area (maximum %s, specified %s)", - "commands.function.error.argument_not_compound": "Invalid argument type: %s, expected Compound", - "commands.function.error.missing_argument": "Missing argument %2$s to function %1$s", - "commands.function.error.missing_arguments": "Missing arguments to function %s", - "commands.function.error.parse": "While instantiating macro %s: Command '%s' caused error: %s", - "commands.function.instantiationFailure": "Failed to instantiate function %s: %s", - "commands.function.result": "Function %s returned %s", - "commands.function.scheduled.multiple": "Running functions %s", - "commands.function.scheduled.no_functions": "Can't find any functions for name %s", - "commands.function.scheduled.single": "Running function %s", - "commands.function.success.multiple": "Executed %s command(s) from %s functions", - "commands.function.success.multiple.result": "Executed %s functions", - "commands.function.success.single": "Executed %s command(s) from function '%s'", - "commands.function.success.single.result": "Function '%2$s' returned %1$s", - "commands.gamemode.success.other": "Set %s's game mode to %s", - "commands.gamemode.success.self": "Set own game mode to %s", - "commands.gamerule.query": "Gamerule %s is currently set to: %s", - "commands.gamerule.set": "Gamerule %s is now set to: %s", - "commands.give.failed.toomanyitems": "Can't give more than %s of %s", - "commands.give.success.multiple": "Gave %s %s to %s players", - "commands.give.success.single": "Gave %s %s to %s", - "commands.help.failed": "Unknown command or insufficient permissions", - "commands.item.block.set.success": "Replaced a slot at %s, %s, %s with %s", - "commands.item.entity.set.success.multiple": "Replaced a slot on %s entities with %s", - "commands.item.entity.set.success.single": "Replaced a slot on %s with %s", - "commands.item.source.no_such_slot": "The source does not have slot %s", - "commands.item.source.not_a_container": "Source position %s, %s, %s is not a container", - "commands.item.target.no_changed.known_item": "No targets accepted item %s into slot %s", - "commands.item.target.no_changes": "No targets accepted item into slot %s", - "commands.item.target.no_such_slot": "The target does not have slot %s", - "commands.item.target.not_a_container": "Target position %s, %s, %s is not a container", - "commands.jfr.dump.failed": "Failed to dump JFR recording: %s", - "commands.jfr.start.failed": "Failed to start JFR profiling", - "commands.jfr.started": "JFR profiling started", - "commands.jfr.stopped": "JFR profiling stopped and dumped to %s", - "commands.kick.owner.failed": "Cannot kick server owner in LAN game", - "commands.kick.singleplayer.failed": "Cannot kick in an offline singleplayer game", - "commands.kick.success": "Kicked %s: %s", - "commands.kill.success.multiple": "Killed %s entities", - "commands.kill.success.single": "Killed %s", - "commands.list.nameAndId": "%s (%s)", - "commands.list.players": "There are %s of a max of %s players online: %s", - "commands.locate.biome.not_found": "Could not find a biome of type \"%s\" within reasonable distance", - "commands.locate.biome.success": "The nearest %s is at %s (%s blocks away)", - "commands.locate.poi.not_found": "Could not find a point of interest of type \"%s\" within reasonable distance", - "commands.locate.poi.success": "The nearest %s is at %s (%s blocks away)", - "commands.locate.structure.invalid": "There is no structure with type \"%s\"", - "commands.locate.structure.not_found": "Could not find a structure of type \"%s\" nearby", - "commands.locate.structure.success": "The nearest %s is at %s (%s blocks away)", - "commands.message.display.incoming": "%s whispers to you: %s", - "commands.message.display.outgoing": "You whisper to %s: %s", - "commands.op.failed": "Nothing changed. The player already is an operator", - "commands.op.success": "Made %s a server operator", - "commands.pardon.failed": "Nothing changed. The player isn't banned", - "commands.pardon.success": "Unbanned %s", - "commands.pardonip.failed": "Nothing changed. That IP isn't banned", - "commands.pardonip.invalid": "Invalid IP address", - "commands.pardonip.success": "Unbanned IP %s", - "commands.particle.failed": "The particle was not visible for anybody", - "commands.particle.success": "Displaying particle %s", - "commands.perf.alreadyRunning": "The performance profiler is already started", - "commands.perf.notRunning": "The performance profiler hasn't started", - "commands.perf.reportFailed": "Failed to create debug report", - "commands.perf.reportSaved": "Created debug report in %s", - "commands.perf.started": "Started 10 second performance profiling run (use '/perf stop' to stop early)", - "commands.perf.stopped": "Stopped performance profiling after %s second(s) and %s tick(s) (%s tick(s) per second)", - "commands.place.feature.failed": "Failed to place feature", - "commands.place.feature.invalid": "There is no feature with type \"%s\"", - "commands.place.feature.success": "Placed \"%s\" at %s, %s, %s", - "commands.place.jigsaw.failed": "Failed to generate jigsaw", - "commands.place.jigsaw.invalid": "There is no template pool with type \"%s\"", - "commands.place.jigsaw.success": "Generated jigsaw at %s, %s, %s", - "commands.place.structure.failed": "Failed to place structure", - "commands.place.structure.invalid": "There is no structure with type \"%s\"", - "commands.place.structure.success": "Generated structure \"%s\" at %s, %s, %s", - "commands.place.template.failed": "Failed to place template", - "commands.place.template.invalid": "There is no template with id \"%s\"", - "commands.place.template.success": "Loaded template \"%s\" at %s, %s, %s", - "commands.playsound.failed": "The sound is too far away to be heard", - "commands.playsound.success.multiple": "Played sound %s to %s players", - "commands.playsound.success.single": "Played sound %s to %s", - "commands.publish.alreadyPublished": "Multiplayer game is already hosted on port %s", - "commands.publish.failed": "Unable to host local game", - "commands.publish.started": "Local game hosted on port %s", - "commands.publish.success": "Multiplayer game is now hosted on port %s", - "commands.random.error.range_too_large": "The range of the random value must be at most 2147483646", - "commands.random.error.range_too_small": "The range of the random value must be at least 2", - "commands.random.reset.all.success": "Reset %s random sequence(s)", - "commands.random.reset.success": "Reset random sequence %s", - "commands.random.roll": "%s rolled %s (from %s to %s)", - "commands.random.sample.success": "Randomized value: %s", - "commands.recipe.give.failed": "No new recipes were learned", - "commands.recipe.give.success.multiple": "Unlocked %s recipes for %s players", - "commands.recipe.give.success.single": "Unlocked %s recipes for %s", - "commands.recipe.take.failed": "No recipes could be forgotten", - "commands.recipe.take.success.multiple": "Took %s recipes from %s players", - "commands.recipe.take.success.single": "Took %s recipes from %s", - "commands.reload.failure": "Reload failed; keeping old data", - "commands.reload.success": "Reloading!", - "commands.ride.already_riding": "%s is already riding %s", - "commands.ride.dismount.success": "%s stopped riding %s", - "commands.ride.mount.failure.cant_ride_players": "Players can't be ridden", - "commands.ride.mount.failure.generic": "%s couldn't start riding %s", - "commands.ride.mount.failure.loop": "Can't mount entity on itself or any of its passengers", - "commands.ride.mount.failure.wrong_dimension": "Can't mount entity in different dimension", - "commands.ride.mount.success": "%s started riding %s", - "commands.ride.not_riding": "%s is not riding any vehicle", - "commands.save.alreadyOff": "Saving is already turned off", - "commands.save.alreadyOn": "Saving is already turned on", - "commands.save.disabled": "Automatic saving is now disabled", - "commands.save.enabled": "Automatic saving is now enabled", - "commands.save.failed": "Unable to save the game (is there enough disk space?)", - "commands.save.saving": "Saving the game (this may take a moment!)", - "commands.save.success": "Saved the game", - "commands.schedule.cleared.failure": "No schedules with id %s", - "commands.schedule.cleared.success": "Removed %s schedule(s) with id %s", - "commands.schedule.created.function": "Scheduled function '%s' in %s tick(s) at gametime %s", - "commands.schedule.created.tag": "Scheduled tag '%s' in %s ticks at gametime %s", - "commands.schedule.same_tick": "Can't schedule for current tick", - "commands.scoreboard.objectives.add.duplicate": "An objective already exists by that name", - "commands.scoreboard.objectives.add.success": "Created new objective %s", - "commands.scoreboard.objectives.display.alreadyEmpty": "Nothing changed. That display slot is already empty", - "commands.scoreboard.objectives.display.alreadySet": "Nothing changed. That display slot is already showing that objective", - "commands.scoreboard.objectives.display.cleared": "Cleared any objectives in display slot %s", - "commands.scoreboard.objectives.display.set": "Set display slot %s to show objective %s", - "commands.scoreboard.objectives.list.empty": "There are no objectives", - "commands.scoreboard.objectives.list.success": "There are %s objective(s): %s", - "commands.scoreboard.objectives.modify.displayAutoUpdate.disable": "Disabled display auto-update for objective %s", - "commands.scoreboard.objectives.modify.displayAutoUpdate.enable": "Enabled display auto-update for objective %s", - "commands.scoreboard.objectives.modify.displayname": "Changed the display name of %s to %s", - "commands.scoreboard.objectives.modify.objectiveFormat.clear": "Cleared default number format of objective %s", - "commands.scoreboard.objectives.modify.objectiveFormat.set": "Changed default number format of objective %s", - "commands.scoreboard.objectives.modify.rendertype": "Changed the render type of objective %s", - "commands.scoreboard.objectives.remove.success": "Removed objective %s", - "commands.scoreboard.players.add.success.multiple": "Added %s to %s for %s entities", - "commands.scoreboard.players.add.success.single": "Added %s to %s for %s (now %s)", - "commands.scoreboard.players.display.name.clear.success.multiple": "Cleared display name for %s entities in %s", - "commands.scoreboard.players.display.name.clear.success.single": "Cleared display name for %s in %s", - "commands.scoreboard.players.display.name.set.success.multiple": "Changed display name to %s for %s entities in %s", - "commands.scoreboard.players.display.name.set.success.single": "Changed display name to %s for %s in %s", - "commands.scoreboard.players.display.numberFormat.clear.success.multiple": "Cleared number format for %s entities in %s", - "commands.scoreboard.players.display.numberFormat.clear.success.single": "Cleared number format for %s in %s", - "commands.scoreboard.players.display.numberFormat.set.success.multiple": "Changed number format for %s entities in %s", - "commands.scoreboard.players.display.numberFormat.set.success.single": "Changed number format for %s in %s", - "commands.scoreboard.players.enable.failed": "Nothing changed. That trigger is already enabled", - "commands.scoreboard.players.enable.invalid": "Enable only works on trigger-objectives", - "commands.scoreboard.players.enable.success.multiple": "Enabled trigger %s for %s entities", - "commands.scoreboard.players.enable.success.single": "Enabled trigger %s for %s", - "commands.scoreboard.players.get.null": "Can't get value of %s for %s; none is set", - "commands.scoreboard.players.get.success": "%s has %s %s", - "commands.scoreboard.players.list.empty": "There are no tracked entities", - "commands.scoreboard.players.list.entity.empty": "%s has no scores to show", - "commands.scoreboard.players.list.entity.entry": "%s: %s", - "commands.scoreboard.players.list.entity.success": "%s has %s score(s):", - "commands.scoreboard.players.list.success": "There are %s tracked entity/entities: %s", - "commands.scoreboard.players.operation.success.multiple": "Updated %s for %s entities", - "commands.scoreboard.players.operation.success.single": "Set %s for %s to %s", - "commands.scoreboard.players.remove.success.multiple": "Removed %s from %s for %s entities", - "commands.scoreboard.players.remove.success.single": "Removed %s from %s for %s (now %s)", - "commands.scoreboard.players.reset.all.multiple": "Reset all scores for %s entities", - "commands.scoreboard.players.reset.all.single": "Reset all scores for %s", - "commands.scoreboard.players.reset.specific.multiple": "Reset %s for %s entities", - "commands.scoreboard.players.reset.specific.single": "Reset %s for %s", - "commands.scoreboard.players.set.success.multiple": "Set %s for %s entities to %s", - "commands.scoreboard.players.set.success.single": "Set %s for %s to %s", - "commands.seed.success": "Seed: %s", - "commands.setblock.failed": "Could not set the block", - "commands.setblock.success": "Changed the block at %s, %s, %s", - "commands.setidletimeout.success": "The player idle timeout is now %s minute(s)", - "commands.setworldspawn.success": "Set the world spawn point to %s, %s, %s [%s]", - "commands.spawnpoint.success.multiple": "Set spawn point to %s, %s, %s [%s] in %s for %s players", - "commands.spawnpoint.success.single": "Set spawn point to %s, %s, %s [%s] in %s for %s", - "commands.spectate.not_spectator": "%s is not in spectator mode", - "commands.spectate.self": "Cannot spectate yourself", - "commands.spectate.success.started": "Now spectating %s", - "commands.spectate.success.stopped": "No longer spectating an entity", - "commands.spreadplayers.failed.entities": "Could not spread %s entity/entities around %s, %s (too many entities for space - try using spread of at most %s)", - "commands.spreadplayers.failed.invalid.height": "Invalid maxHeight %s; expected higher than world minimum %s", - "commands.spreadplayers.failed.teams": "Could not spread %s team(s) around %s, %s (too many entities for space - try using spread of at most %s)", - "commands.spreadplayers.success.entities": "Spread %s player(s) around %s, %s with an average distance of %s blocks apart", - "commands.spreadplayers.success.teams": "Spread %s team(s) around %s, %s with an average distance of %s blocks apart", - "commands.stop.stopping": "Stopping the server", - "commands.stopsound.success.source.any": "Stopped all '%s' sounds", - "commands.stopsound.success.source.sound": "Stopped sound '%s' on source '%s'", - "commands.stopsound.success.sourceless.any": "Stopped all sounds", - "commands.stopsound.success.sourceless.sound": "Stopped sound '%s'", - "commands.summon.failed": "Unable to summon entity", - "commands.summon.failed.uuid": "Unable to summon entity due to duplicate UUIDs", - "commands.summon.invalidPosition": "Invalid position for summon", - "commands.summon.success": "Summoned new %s", - "commands.tag.add.failed": "Target either already has the tag or has too many tags", - "commands.tag.add.success.multiple": "Added tag '%s' to %s entities", - "commands.tag.add.success.single": "Added tag '%s' to %s", - "commands.tag.list.multiple.empty": "There are no tags on the %s entities", - "commands.tag.list.multiple.success": "The %s entities have %s total tags: %s", - "commands.tag.list.single.empty": "%s has no tags", - "commands.tag.list.single.success": "%s has %s tags: %s", - "commands.tag.remove.failed": "Target does not have this tag", - "commands.tag.remove.success.multiple": "Removed tag '%s' from %s entities", - "commands.tag.remove.success.single": "Removed tag '%s' from %s", - "commands.team.add.duplicate": "A team already exists by that name", - "commands.team.add.success": "Created team %s", - "commands.team.empty.success": "Removed %s member(s) from team %s", - "commands.team.empty.unchanged": "Nothing changed. That team is already empty", - "commands.team.join.success.multiple": "Added %s members to team %s", - "commands.team.join.success.single": "Added %s to team %s", - "commands.team.leave.success.multiple": "Removed %s members from any team", - "commands.team.leave.success.single": "Removed %s from any team", - "commands.team.list.members.empty": "There are no members on team %s", - "commands.team.list.members.success": "Team %s has %s member(s): %s", - "commands.team.list.teams.empty": "There are no teams", - "commands.team.list.teams.success": "There are %s team(s): %s", - "commands.team.option.collisionRule.success": "Collision rule for team %s is now \"%s\"", - "commands.team.option.collisionRule.unchanged": "Nothing changed. Collision rule is already that value", - "commands.team.option.color.success": "Updated the color for team %s to %s", - "commands.team.option.color.unchanged": "Nothing changed. That team already has that color", - "commands.team.option.deathMessageVisibility.success": "Death message visibility for team %s is now \"%s\"", - "commands.team.option.deathMessageVisibility.unchanged": "Nothing changed. Death message visibility is already that value", - "commands.team.option.friendlyfire.alreadyDisabled": "Nothing changed. Friendly fire is already disabled for that team", - "commands.team.option.friendlyfire.alreadyEnabled": "Nothing changed. Friendly fire is already enabled for that team", - "commands.team.option.friendlyfire.disabled": "Disabled friendly fire for team %s", - "commands.team.option.friendlyfire.enabled": "Enabled friendly fire for team %s", - "commands.team.option.name.success": "Updated the name of team %s", - "commands.team.option.name.unchanged": "Nothing changed. That team already has that name", - "commands.team.option.nametagVisibility.success": "Nametag visibility for team %s is now \"%s\"", - "commands.team.option.nametagVisibility.unchanged": "Nothing changed. Nametag visibility is already that value", - "commands.team.option.prefix.success": "Team prefix set to %s", - "commands.team.option.seeFriendlyInvisibles.alreadyDisabled": "Nothing changed. That team already can't see invisible teammates", - "commands.team.option.seeFriendlyInvisibles.alreadyEnabled": "Nothing changed. That team can already see invisible teammates", - "commands.team.option.seeFriendlyInvisibles.disabled": "Team %s can no longer see invisible teammates", - "commands.team.option.seeFriendlyInvisibles.enabled": "Team %s can now see invisible teammates", - "commands.team.option.suffix.success": "Team suffix set to %s", - "commands.team.remove.success": "Removed team %s", - "commands.teammsg.failed.noteam": "You must be on a team to message your team", - "commands.teleport.invalidPosition": "Invalid position for teleport", - "commands.teleport.success.entity.multiple": "Teleported %s entities to %s", - "commands.teleport.success.entity.single": "Teleported %s to %s", - "commands.teleport.success.location.multiple": "Teleported %s entities to %s, %s, %s", - "commands.teleport.success.location.single": "Teleported %s to %s, %s, %s", - "commands.tick.query.percentiles": "Percentiles: P50: %sms P95: %sms P99: %sms, sample: %s", - "commands.tick.query.rate.running": "Target tick rate: %s per second.\nAverage time per tick: %sms (Target: %sms)", - "commands.tick.query.rate.sprinting": "Target tick rate: %s per second (ignored, reference only).\nAverage time per tick: %sms", - "commands.tick.rate.success": "Set the target tick rate to %s per second", - "commands.tick.sprint.report": "Sprint completed with %s ticks per second, or %s ms per tick", - "commands.tick.sprint.stop.fail": "No tick sprint in progress", - "commands.tick.sprint.stop.success": "A tick sprint interrupted", - "commands.tick.status.frozen": "The game is frozen", - "commands.tick.status.lagging": "The game is running, but can't keep up with the target tick rate", - "commands.tick.status.running": "The game runs normally", - "commands.tick.status.sprinting": "The game is sprinting", - "commands.tick.step.fail": "Unable to step the game - the game must be frozen first", - "commands.tick.step.stop.fail": "No tick step in progress", - "commands.tick.step.stop.success": "A tick step interrupted", - "commands.tick.step.success": "Stepping %s tick(s)", - "commands.time.query": "The time is %s", - "commands.time.set": "Set the time to %s", - "commands.title.cleared.multiple": "Cleared titles for %s players", - "commands.title.cleared.single": "Cleared titles for %s", - "commands.title.reset.multiple": "Reset title options for %s players", - "commands.title.reset.single": "Reset title options for %s", - "commands.title.show.actionbar.multiple": "Showing new actionbar title for %s players", - "commands.title.show.actionbar.single": "Showing new actionbar title for %s", - "commands.title.show.subtitle.multiple": "Showing new subtitle for %s players", - "commands.title.show.subtitle.single": "Showing new subtitle for %s", - "commands.title.show.title.multiple": "Showing new title for %s players", - "commands.title.show.title.single": "Showing new title for %s", - "commands.title.times.multiple": "Changed title display times for %s players", - "commands.title.times.single": "Changed title display times for %s", - "commands.trigger.add.success": "Triggered %s (added %s to value)", - "commands.trigger.failed.invalid": "You can only trigger objectives that are 'trigger' type", - "commands.trigger.failed.unprimed": "You cannot trigger this objective yet", - "commands.trigger.set.success": "Triggered %s (set value to %s)", - "commands.trigger.simple.success": "Triggered %s", - "commands.weather.set.clear": "Set the weather to clear", - "commands.weather.set.rain": "Set the weather to rain", - "commands.weather.set.thunder": "Set the weather to rain & thunder", - "commands.whitelist.add.failed": "Player is already whitelisted", - "commands.whitelist.add.success": "Added %s to the whitelist", - "commands.whitelist.alreadyOff": "Whitelist is already turned off", - "commands.whitelist.alreadyOn": "Whitelist is already turned on", - "commands.whitelist.disabled": "Whitelist is now turned off", - "commands.whitelist.enabled": "Whitelist is now turned on", - "commands.whitelist.list": "There are %s whitelisted player(s): %s", - "commands.whitelist.none": "There are no whitelisted players", - "commands.whitelist.reloaded": "Reloaded the whitelist", - "commands.whitelist.remove.failed": "Player is not whitelisted", - "commands.whitelist.remove.success": "Removed %s from the whitelist", - "commands.worldborder.center.failed": "Nothing changed. The world border is already centered there", - "commands.worldborder.center.success": "Set the center of the world border to %s, %s", - "commands.worldborder.damage.amount.failed": "Nothing changed. The world border damage is already that amount", - "commands.worldborder.damage.amount.success": "Set the world border damage to %s per block each second", - "commands.worldborder.damage.buffer.failed": "Nothing changed. The world border damage buffer is already that distance", - "commands.worldborder.damage.buffer.success": "Set the world border damage buffer to %s block(s)", - "commands.worldborder.get": "The world border is currently %s block(s) wide", - "commands.worldborder.set.failed.big": "World border cannot be bigger than %s blocks wide", - "commands.worldborder.set.failed.far": "World border cannot be further out than %s blocks", - "commands.worldborder.set.failed.nochange": "Nothing changed. The world border is already that size", - "commands.worldborder.set.failed.small": "World border cannot be smaller than 1 block wide", - "commands.worldborder.set.grow": "Growing the world border to %s blocks wide over %s seconds", - "commands.worldborder.set.immediate": "Set the world border to %s block(s) wide", - "commands.worldborder.set.shrink": "Shrinking the world border to %s block(s) wide over %s second(s)", - "commands.worldborder.warning.distance.failed": "Nothing changed. The world border warning is already that distance", - "commands.worldborder.warning.distance.success": "Set the world border warning distance to %s block(s)", - "commands.worldborder.warning.time.failed": "Nothing changed. The world border warning is already that amount of time", - "commands.worldborder.warning.time.success": "Set the world border warning time to %s second(s)", - "compliance.playtime.greaterThan24Hours": "You've been playing for greater than 24 hours", - "compliance.playtime.hours": "You've been playing for %s hour(s)", - "compliance.playtime.message": "Excessive gaming may interfere with normal daily life", - "connect.aborted": "Aborted", - "connect.authorizing": "Logging in...", - "connect.connecting": "Connecting to the server...", - "connect.encrypting": "Encrypting...", - "connect.failed": "Failed to connect to the server", - "connect.joining": "Joining world...", - "connect.negotiating": "Negotiating...", - "connect.reconfiging": "Reconfiguring...", - "connect.reconfiguring": "Reconfiguring...", - "container.barrel": "Barrel", - "container.beacon": "Beacon", - "container.blast_furnace": "Blast Furnace", - "container.brewing": "Brewing Stand", - "container.cartography_table": "Cartography Table", - "container.chest": "Chest", - "container.chestDouble": "Large Chest", - "container.crafter": "Crafter", - "container.crafting": "Crafting", - "container.creative": "Item Selection", - "container.dispenser": "Dispenser", - "container.dropper": "Dropper", - "container.enchant": "Enchant", - "container.enchant.clue": "%s . . . ?", - "container.enchant.lapis.many": "%s Lapis Lazuli", - "container.enchant.lapis.one": "1 Lapis Lazuli", - "container.enchant.level.many": "%s Enchantment Levels", - "container.enchant.level.one": "1 Enchantment Level", - "container.enchant.level.requirement": "Level Requirement: %s", - "container.enderchest": "Ender Chest", - "container.furnace": "Furnace", - "container.grindstone_title": "Repair & Disenchant", - "container.hopper": "Item Hopper", - "container.inventory": "Inventory", - "container.isLocked": "%s is locked!", - "container.lectern": "Lectern", - "container.loom": "Loom", - "container.repair": "Repair & Name", - "container.repair.cost": "Enchantment Cost: %1$s", - "container.repair.expensive": "Too Expensive!", - "container.shulkerBox": "Shulker Box", - "container.shulkerBox.itemCount": "%s x%s", - "container.shulkerBox.more": "and %s more...", - "container.shulkerBox.unknownContents": "???????", - "container.smoker": "Smoker", - "container.spectatorCantOpen": "Unable to open. Loot not generated yet.", - "container.stonecutter": "Stonecutter", - "container.upgrade": "Upgrade Gear", - "container.upgrade.error_tooltip": "Item can't be upgraded this way", - "container.upgrade.missing_template_tooltip": "Add Smithing Template", - "controls.keybinds": "Key Binds...", - "controls.keybinds.duplicateKeybinds": "This key is also used for:\n%s", - "controls.keybinds.title": "Key Binds", - "controls.reset": "Reset", - "controls.resetAll": "Reset Keys", - "controls.title": "Controls", - "createWorld.customize.buffet.biome": "Please select a biome", - "createWorld.customize.buffet.title": "Buffet world customization", - "createWorld.customize.custom.baseSize": "Depth Base Size", - "createWorld.customize.custom.biomeDepthOffset": "Biome Depth Offset", - "createWorld.customize.custom.biomeDepthWeight": "Biome Depth Weight", - "createWorld.customize.custom.biomeScaleOffset": "Biome Scale Offset", - "createWorld.customize.custom.biomeScaleWeight": "Biome Scale Weight", - "createWorld.customize.custom.biomeSize": "Biome Size", - "createWorld.customize.custom.center": "Center Height", - "createWorld.customize.custom.confirm1": "This will overwrite your current", - "createWorld.customize.custom.confirm2": "settings and cannot be undone.", - "createWorld.customize.custom.confirmTitle": "Warning!", - "createWorld.customize.custom.coordinateScale": "Coordinate Scale", - "createWorld.customize.custom.count": "Spawn Tries", - "createWorld.customize.custom.defaults": "Defaults", - "createWorld.customize.custom.depthNoiseScaleExponent": "Depth Noise Exponent", - "createWorld.customize.custom.depthNoiseScaleX": "Depth Noise Scale X", - "createWorld.customize.custom.depthNoiseScaleZ": "Depth Noise Scale Z", - "createWorld.customize.custom.dungeonChance": "Dungeon Count", - "createWorld.customize.custom.fixedBiome": "Biome", - "createWorld.customize.custom.heightScale": "Height Scale", - "createWorld.customize.custom.lavaLakeChance": "Lava Lake Rarity", - "createWorld.customize.custom.lowerLimitScale": "Lower Limit Scale", - "createWorld.customize.custom.mainNoiseScaleX": "Main Noise Scale X", - "createWorld.customize.custom.mainNoiseScaleY": "Main Noise Scale Y", - "createWorld.customize.custom.mainNoiseScaleZ": "Main Noise Scale Z", - "createWorld.customize.custom.maxHeight": "Max. Height", - "createWorld.customize.custom.minHeight": "Min. Height", - "createWorld.customize.custom.next": "Next Page", - "createWorld.customize.custom.page0": "Basic Settings", - "createWorld.customize.custom.page1": "Ore Settings", - "createWorld.customize.custom.page2": "Advanced Settings (Expert Users Only!)", - "createWorld.customize.custom.page3": "Extra Advanced Settings (Expert Users Only!)", - "createWorld.customize.custom.preset.caveChaos": "Caves of Chaos", - "createWorld.customize.custom.preset.caveDelight": "Caver's Delight", - "createWorld.customize.custom.preset.drought": "Drought", - "createWorld.customize.custom.preset.goodLuck": "Good Luck", - "createWorld.customize.custom.preset.isleLand": "Isle Land", - "createWorld.customize.custom.preset.mountains": "Mountain Madness", - "createWorld.customize.custom.preset.waterWorld": "Water World", - "createWorld.customize.custom.presets": "Presets", - "createWorld.customize.custom.presets.title": "Customize World Presets", - "createWorld.customize.custom.prev": "Previous Page", - "createWorld.customize.custom.randomize": "Randomize", - "createWorld.customize.custom.riverSize": "River Size", - "createWorld.customize.custom.seaLevel": "Sea Level", - "createWorld.customize.custom.size": "Spawn Size", - "createWorld.customize.custom.spread": "Spread Height", - "createWorld.customize.custom.stretchY": "Height Stretch", - "createWorld.customize.custom.upperLimitScale": "Upper Limit Scale", - "createWorld.customize.custom.useCaves": "Caves", - "createWorld.customize.custom.useDungeons": "Dungeons", - "createWorld.customize.custom.useLavaLakes": "Lava Lakes", - "createWorld.customize.custom.useLavaOceans": "Lava Oceans", - "createWorld.customize.custom.useMansions": "Woodland Mansions", - "createWorld.customize.custom.useMineShafts": "Mineshafts", - "createWorld.customize.custom.useMonuments": "Ocean Monuments", - "createWorld.customize.custom.useOceanRuins": "Ocean Ruins", - "createWorld.customize.custom.useRavines": "Ravines", - "createWorld.customize.custom.useStrongholds": "Strongholds", - "createWorld.customize.custom.useTemples": "Temples", - "createWorld.customize.custom.useVillages": "Villages", - "createWorld.customize.custom.useWaterLakes": "Water Lakes", - "createWorld.customize.custom.waterLakeChance": "Water Lake Rarity", - "createWorld.customize.flat.height": "Height", - "createWorld.customize.flat.layer": "%s", - "createWorld.customize.flat.layer.bottom": "Bottom - %s", - "createWorld.customize.flat.layer.top": "Top - %s", - "createWorld.customize.flat.removeLayer": "Remove Layer", - "createWorld.customize.flat.tile": "Layer Material", - "createWorld.customize.flat.title": "Superflat Customization", - "createWorld.customize.presets": "Presets", - "createWorld.customize.presets.list": "Alternatively, here's some we made earlier!", - "createWorld.customize.presets.select": "Use Preset", - "createWorld.customize.presets.share": "Want to share your preset with someone? Use the box below!", - "createWorld.customize.presets.title": "Select a Preset", - "createWorld.preparing": "Preparing for world creation...", - "createWorld.tab.game.title": "Game", - "createWorld.tab.more.title": "More", - "createWorld.tab.world.title": "World", - "credits_and_attribution.button.attribution": "Attribution", - "credits_and_attribution.button.credits": "Credits", - "credits_and_attribution.button.licenses": "Licenses", - "credits_and_attribution.screen.title": "Credits and Attribution", - "dataPack.bundle.description": "Enables experimental Bundle item", - "dataPack.bundle.name": "Bundles", - "dataPack.title": "Select Data Packs", - "dataPack.trade_rebalance.description": "Updated trades for Villagers", - "dataPack.trade_rebalance.name": "Villager Trade Rebalance", - "dataPack.update_1_20.description": "New features and content for Minecraft 1.20", - "dataPack.update_1_20.name": "Update 1.20", - "dataPack.update_1_21.description": "New features and content for Minecraft 1.21", - "dataPack.update_1_21.name": "Update 1.21", - "dataPack.validation.back": "Go Back", - "dataPack.validation.failed": "Data pack validation failed!", - "dataPack.validation.reset": "Reset to Default", - "dataPack.validation.working": "Validating selected data packs...", - "dataPack.vanilla.description": "The default data for Minecraft", - "dataPack.vanilla.name": "Default", - "datapackFailure.safeMode": "Safe Mode", - "datapackFailure.safeMode.failed.description": "This world contains invalid or corrupted save data.", - "datapackFailure.safeMode.failed.title": "Failed to load world in Safe Mode.", - "datapackFailure.title": "Errors in currently selected data packs prevented the world from loading.\nYou can either try to load it with only the vanilla data pack (\"safe mode\"), or go back to the title screen and fix it manually.", - "death.attack.anvil": "%1$s was squashed by a falling anvil", - "death.attack.anvil.player": "%1$s was squashed by a falling anvil while fighting %2$s", - "death.attack.arrow": "%1$s was shot by %2$s", - "death.attack.arrow.item": "%1$s was shot by %2$s using %3$s", - "death.attack.badRespawnPoint.link": "Intentional Game Design", - "death.attack.badRespawnPoint.message": "%1$s was killed by %2$s", - "death.attack.cactus": "%1$s was pricked to death", - "death.attack.cactus.player": "%1$s walked into a cactus while trying to escape %2$s", - "death.attack.cramming": "%1$s was squished too much", - "death.attack.cramming.player": "%1$s was squashed by %2$s", - "death.attack.dragonBreath": "%1$s was roasted in dragon's breath", - "death.attack.dragonBreath.player": "%1$s was roasted in dragon's breath by %2$s", - "death.attack.drown": "%1$s drowned", - "death.attack.drown.player": "%1$s drowned while trying to escape %2$s", - "death.attack.dryout": "%1$s died from dehydration", - "death.attack.dryout.player": "%1$s died from dehydration while trying to escape %2$s", - "death.attack.even_more_magic": "%1$s was killed by even more magic", - "death.attack.explosion": "%1$s blew up", - "death.attack.explosion.player": "%1$s was blown up by %2$s", - "death.attack.explosion.player.item": "%1$s was blown up by %2$s using %3$s", - "death.attack.fall": "%1$s hit the ground too hard", - "death.attack.fall.player": "%1$s hit the ground too hard while trying to escape %2$s", - "death.attack.fallingBlock": "%1$s was squashed by a falling block", - "death.attack.fallingBlock.player": "%1$s was squashed by a falling block while fighting %2$s", - "death.attack.fallingStalactite": "%1$s was skewered by a falling stalactite", - "death.attack.fallingStalactite.player": "%1$s was skewered by a falling stalactite while fighting %2$s", - "death.attack.fireball": "%1$s was fireballed by %2$s", - "death.attack.fireball.item": "%1$s was fireballed by %2$s using %3$s", - "death.attack.fireworks": "%1$s went off with a bang", - "death.attack.fireworks.item": "%1$s went off with a bang due to a firework fired from %3$s by %2$s", - "death.attack.fireworks.player": "%1$s went off with a bang while fighting %2$s", - "death.attack.flyIntoWall": "%1$s experienced kinetic energy", - "death.attack.flyIntoWall.player": "%1$s experienced kinetic energy while trying to escape %2$s", - "death.attack.freeze": "%1$s froze to death", - "death.attack.freeze.player": "%1$s was frozen to death by %2$s", - "death.attack.generic": "%1$s died", - "death.attack.generic.player": "%1$s died because of %2$s", - "death.attack.genericKill": "%1$s was killed", - "death.attack.genericKill.player": "%1$s was killed while fighting %2$s", - "death.attack.hotFloor": "%1$s discovered the floor was lava", - "death.attack.hotFloor.player": "%1$s walked into the danger zone due to %2$s", - "death.attack.indirectMagic": "%1$s was killed by %2$s using magic", - "death.attack.indirectMagic.item": "%1$s was killed by %2$s using %3$s", - "death.attack.inFire": "%1$s went up in flames", - "death.attack.inFire.player": "%1$s walked into fire while fighting %2$s", - "death.attack.inWall": "%1$s suffocated in a wall", - "death.attack.inWall.player": "%1$s suffocated in a wall while fighting %2$s", - "death.attack.lava": "%1$s tried to swim in lava", - "death.attack.lava.player": "%1$s tried to swim in lava to escape %2$s", - "death.attack.lightningBolt": "%1$s was struck by lightning", - "death.attack.lightningBolt.player": "%1$s was struck by lightning while fighting %2$s", - "death.attack.magic": "%1$s was killed by magic", - "death.attack.magic.player": "%1$s was killed by magic while trying to escape %2$s", - "death.attack.message_too_long": "Actually, the message was too long to deliver fully. Sorry! Here's a stripped version: %s", - "death.attack.mob": "%1$s was slain by %2$s", - "death.attack.mob.item": "%1$s was slain by %2$s using %3$s", - "death.attack.onFire": "%1$s burned to death", - "death.attack.onFire.item": "%1$s was burned to a crisp while fighting %2$s wielding %3$s", - "death.attack.onFire.player": "%1$s was burned to a crisp while fighting %2$s", - "death.attack.outOfWorld": "%1$s fell out of the world", - "death.attack.outOfWorld.player": "%1$s didn't want to live in the same world as %2$s", - "death.attack.outsideBorder": "%1$s left the confines of this world", - "death.attack.outsideBorder.player": "%1$s left the confines of this world while fighting %2$s", - "death.attack.player": "%1$s was slain by %2$s", - "death.attack.player.item": "%1$s was slain by %2$s using %3$s", - "death.attack.sonic_boom": "%1$s was obliterated by a sonically-charged shriek", - "death.attack.sonic_boom.item": "%1$s was obliterated by a sonically-charged shriek while trying to escape %2$s wielding %3$s", - "death.attack.sonic_boom.player": "%1$s was obliterated by a sonically-charged shriek while trying to escape %2$s", - "death.attack.stalagmite": "%1$s was impaled on a stalagmite", - "death.attack.stalagmite.player": "%1$s was impaled on a stalagmite while fighting %2$s", - "death.attack.starve": "%1$s starved to death", - "death.attack.starve.player": "%1$s starved to death while fighting %2$s", - "death.attack.sting": "%1$s was stung to death", - "death.attack.sting.item": "%1$s was stung to death by %2$s using %3$s", - "death.attack.sting.player": "%1$s was stung to death by %2$s", - "death.attack.sweetBerryBush": "%1$s was poked to death by a sweet berry bush", - "death.attack.sweetBerryBush.player": "%1$s was poked to death by a sweet berry bush while trying to escape %2$s", - "death.attack.thorns": "%1$s was killed while trying to hurt %2$s", - "death.attack.thorns.item": "%1$s was killed by %3$s while trying to hurt %2$s", - "death.attack.thrown": "%1$s was pummeled by %2$s", - "death.attack.thrown.item": "%1$s was pummeled by %2$s using %3$s", - "death.attack.trident": "%1$s was impaled by %2$s", - "death.attack.trident.item": "%1$s was impaled by %2$s with %3$s", - "death.attack.wither": "%1$s withered away", - "death.attack.wither.player": "%1$s withered away while fighting %2$s", - "death.attack.witherSkull": "%1$s was shot by a skull from %2$s", - "death.attack.witherSkull.item": "%1$s was shot by a skull from %2$s using %3$s", - "death.fell.accident.generic": "%1$s fell from a high place", - "death.fell.accident.ladder": "%1$s fell off a ladder", - "death.fell.accident.other_climbable": "%1$s fell while climbing", - "death.fell.accident.scaffolding": "%1$s fell off scaffolding", - "death.fell.accident.twisting_vines": "%1$s fell off some twisting vines", - "death.fell.accident.vines": "%1$s fell off some vines", - "death.fell.accident.weeping_vines": "%1$s fell off some weeping vines", - "death.fell.assist": "%1$s was doomed to fall by %2$s", - "death.fell.assist.item": "%1$s was doomed to fall by %2$s using %3$s", - "death.fell.finish": "%1$s fell too far and was finished by %2$s", - "death.fell.finish.item": "%1$s fell too far and was finished by %2$s using %3$s", - "death.fell.killer": "%1$s was doomed to fall", - "deathScreen.quit.confirm": "Are you sure you want to quit?", - "deathScreen.respawn": "Respawn", - "deathScreen.score": "Score", - "deathScreen.score.value": "Score: %s", - "deathScreen.spectate": "Spectate World", - "deathScreen.title": "You Died!", - "deathScreen.title.hardcore": "Game Over!", - "deathScreen.titleScreen": "Title Screen", - "debug.advanced_tooltips.help": "F3 + H = Advanced tooltips", - "debug.advanced_tooltips.off": "Advanced tooltips: hidden", - "debug.advanced_tooltips.on": "Advanced tooltips: shown", - "debug.chunk_boundaries.help": "F3 + G = Show chunk boundaries", - "debug.chunk_boundaries.off": "Chunk borders: hidden", - "debug.chunk_boundaries.on": "Chunk borders: shown", - "debug.clear_chat.help": "F3 + D = Clear chat", - "debug.copy_location.help": "F3 + C = Copy location as /tp command, hold F3 + C to crash the game", - "debug.copy_location.message": "Copied location to clipboard", - "debug.crash.message": "F3 + C is held down. This will crash the game unless released.", - "debug.crash.warning": "Crashing in %s...", - "debug.creative_spectator.error": "Unable to switch game mode; no permission", - "debug.creative_spectator.help": "F3 + N = Cycle previous game mode <-> spectator", - "debug.dump_dynamic_textures": "Saved dynamic textures to %s", - "debug.dump_dynamic_textures.help": "F3 + S = Dump dynamic textures", - "debug.gamemodes.error": "Unable to open game mode switcher; no permission", - "debug.gamemodes.help": "F3 + F4 = Open game mode switcher", - "debug.gamemodes.press_f4": "[ F4 ]", - "debug.gamemodes.select_next": "%s Next", - "debug.help.help": "F3 + Q = Show this list", - "debug.help.message": "Key bindings:", - "debug.inspect.client.block": "Copied client-side block data to clipboard", - "debug.inspect.client.entity": "Copied client-side entity data to clipboard", - "debug.inspect.help": "F3 + I = Copy entity or block data to clipboard", - "debug.inspect.server.block": "Copied server-side block data to clipboard", - "debug.inspect.server.entity": "Copied server-side entity data to clipboard", - "debug.pause_focus.help": "F3 + P = Pause on lost focus", - "debug.pause_focus.off": "Pause on lost focus: disabled", - "debug.pause_focus.on": "Pause on lost focus: enabled", - "debug.pause.help": "F3 + Esc = Pause without pause menu (if pausing is possible)", - "debug.prefix": "[Debug]:", - "debug.profiling.help": "F3 + L = Start/stop profiling", - "debug.profiling.start": "Profiling started for %s seconds. Use F3 + L to stop early", - "debug.profiling.stop": "Profiling ended. Saved results to %s", - "debug.reload_chunks.help": "F3 + A = Reload chunks", - "debug.reload_chunks.message": "Reloading all chunks", - "debug.reload_resourcepacks.help": "F3 + T = Reload resource packs", - "debug.reload_resourcepacks.message": "Reloaded resource packs", - "debug.show_hitboxes.help": "F3 + B = Show hitboxes", - "debug.show_hitboxes.off": "Hitboxes: hidden", - "debug.show_hitboxes.on": "Hitboxes: shown", - "demo.day.1": "This demo will last five game days. Do your best!", - "demo.day.2": "Day Two", - "demo.day.3": "Day Three", - "demo.day.4": "Day Four", - "demo.day.5": "This is your last day!", - "demo.day.6": "You have passed your fifth day. Use %s to save a screenshot of your creation.", - "demo.day.warning": "Your time is almost up!", - "demo.demoExpired": "Demo time's up!", - "demo.help.buy": "Purchase Now!", - "demo.help.fullWrapped": "This demo will last 5 in-game days (about 1 hour and 40 minutes of real time). Check the advancements for hints! Have fun!", - "demo.help.inventory": "Use the %1$s key to open your inventory", - "demo.help.jump": "Jump by pressing the %1$s key", - "demo.help.later": "Continue Playing!", - "demo.help.movement": "Use the %1$s, %2$s, %3$s, %4$s keys and the mouse to move around", - "demo.help.movementMouse": "Look around using the mouse", - "demo.help.movementShort": "Move by pressing the %1$s, %2$s, %3$s, %4$s keys", - "demo.help.title": "Minecraft Demo Mode", - "demo.remainingTime": "Remaining time: %s", - "demo.reminder": "The demo time has expired. Buy the game to continue or start a new world!", - "difficulty.lock.question": "Are you sure you want to lock the difficulty of this world? This will set this world to always be %1$s, and you will never be able to change that again.", - "difficulty.lock.title": "Lock World Difficulty", - "disconnect.closed": "Connection closed", - "disconnect.disconnected": "Disconnected by Server", - "disconnect.endOfStream": "End of stream", - "disconnect.exceeded_packet_rate": "Kicked for exceeding packet rate limit", - "disconnect.genericReason": "%s", - "disconnect.ignoring_status_request": "Ignoring status request", - "disconnect.kicked": "Was kicked from the game", - "disconnect.loginFailed": "Failed to log in", - "disconnect.loginFailedInfo": "Failed to log in: %s", - "disconnect.loginFailedInfo.insufficientPrivileges": "Multiplayer is disabled. Please check your Microsoft account settings.", - "disconnect.loginFailedInfo.invalidSession": "Invalid session (Try restarting your game and the launcher)", - "disconnect.loginFailedInfo.serversUnavailable": "The authentication servers are currently not reachable. Please try again.", - "disconnect.loginFailedInfo.userBanned": "You are banned from playing online", - "disconnect.lost": "Connection Lost", - "disconnect.overflow": "Buffer overflow", - "disconnect.quitting": "Quitting", - "disconnect.spam": "Kicked for spamming", - "disconnect.timeout": "Timed out", - "disconnect.unknownHost": "Unknown host", - "download.pack.failed": "%s out of %s packs failed to download", - "download.pack.progress.bytes": "Progress: %s (total size unknown)", - "download.pack.progress.percent": "Progress: %s%%", - "download.pack.title": "Downloading resource pack %s/%s", - "editGamerule.default": "Default: %s", - "editGamerule.title": "Edit Game Rules", - "effect.duration.infinite": "∞", - "effect.minecraft.absorption": "Absorption", - "effect.minecraft.bad_omen": "Bad Omen", - "effect.minecraft.blindness": "Blindness", - "effect.minecraft.conduit_power": "Conduit Power", - "effect.minecraft.darkness": "Darkness", - "effect.minecraft.dolphins_grace": "Dolphin's Grace", - "effect.minecraft.fire_resistance": "Fire Resistance", - "effect.minecraft.glowing": "Glowing", - "effect.minecraft.haste": "Haste", - "effect.minecraft.health_boost": "Health Boost", - "effect.minecraft.hero_of_the_village": "Hero of the Village", - "effect.minecraft.hunger": "Hunger", - "effect.minecraft.instant_damage": "Instant Damage", - "effect.minecraft.instant_health": "Instant Health", - "effect.minecraft.invisibility": "Invisibility", - "effect.minecraft.jump_boost": "Jump Boost", - "effect.minecraft.levitation": "Levitation", - "effect.minecraft.luck": "Luck", - "effect.minecraft.mining_fatigue": "Mining Fatigue", - "effect.minecraft.nausea": "Nausea", - "effect.minecraft.night_vision": "Night Vision", - "effect.minecraft.poison": "Poison", - "effect.minecraft.regeneration": "Regeneration", - "effect.minecraft.resistance": "Resistance", - "effect.minecraft.saturation": "Saturation", - "effect.minecraft.slow_falling": "Slow Falling", - "effect.minecraft.slowness": "Slowness", - "effect.minecraft.speed": "Speed", - "effect.minecraft.strength": "Strength", - "effect.minecraft.unluck": "Bad Luck", - "effect.minecraft.water_breathing": "Water Breathing", - "effect.minecraft.weakness": "Weakness", - "effect.minecraft.wither": "Wither", - "effect.none": "No Effects", - "enchantment.level.1": "I", - "enchantment.level.2": "II", - "enchantment.level.3": "III", - "enchantment.level.4": "IV", - "enchantment.level.5": "V", - "enchantment.level.6": "VI", - "enchantment.level.7": "VII", - "enchantment.level.8": "VIII", - "enchantment.level.9": "IX", - "enchantment.level.10": "X", - "enchantment.minecraft.aqua_affinity": "Aqua Affinity", - "enchantment.minecraft.bane_of_arthropods": "Bane of Arthropods", - "enchantment.minecraft.binding_curse": "Curse of Binding", - "enchantment.minecraft.blast_protection": "Blast Protection", - "enchantment.minecraft.breach": "Breach", - "enchantment.minecraft.channeling": "Channeling", - "enchantment.minecraft.depth_strider": "Depth Strider", - "enchantment.minecraft.density": "Density", - "enchantment.minecraft.efficiency": "Efficiency", - "enchantment.minecraft.feather_falling": "Feather Falling", - "enchantment.minecraft.fire_aspect": "Fire Aspect", - "enchantment.minecraft.fire_protection": "Fire Protection", - "enchantment.minecraft.flame": "Flame", - "enchantment.minecraft.fortune": "Fortune", - "enchantment.minecraft.frost_walker": "Frost Walker", - "enchantment.minecraft.impaling": "Impaling", - "enchantment.minecraft.infinity": "Infinity", - "enchantment.minecraft.knockback": "Knockback", - "enchantment.minecraft.looting": "Looting", - "enchantment.minecraft.loyalty": "Loyalty", - "enchantment.minecraft.luck_of_the_sea": "Luck of the Sea", - "enchantment.minecraft.lunge": "Lunge", - "enchantment.minecraft.lure": "Lure", - "enchantment.minecraft.mending": "Mending", - "enchantment.minecraft.multishot": "Multishot", - "enchantment.minecraft.piercing": "Piercing", - "enchantment.minecraft.power": "Power", - "enchantment.minecraft.projectile_protection": "Projectile Protection", - "enchantment.minecraft.protection": "Protection", - "enchantment.minecraft.punch": "Punch", - "enchantment.minecraft.quick_charge": "Quick Charge", - "enchantment.minecraft.respiration": "Respiration", - "enchantment.minecraft.riptide": "Riptide", - "enchantment.minecraft.sharpness": "Sharpness", - "enchantment.minecraft.silk_touch": "Silk Touch", - "enchantment.minecraft.smite": "Smite", - "enchantment.minecraft.soul_speed": "Soul Speed", - "enchantment.minecraft.sweeping": "Sweeping Edge", - "enchantment.minecraft.swift_sneak": "Swift Sneak", - "enchantment.minecraft.thorns": "Thorns", - "enchantment.minecraft.unbreaking": "Unbreaking", - "enchantment.minecraft.vanishing_curse": "Curse of Vanishing", - "enchantment.minecraft.wind_burst": "Wind Burst", - "entity.minecraft.allay": "Allay", - "entity.minecraft.area_effect_cloud": "Area Effect Cloud", - "entity.minecraft.armor_stand": "Armor Stand", - "entity.minecraft.arrow": "Arrow", - "entity.minecraft.axolotl": "Axolotl", - "entity.minecraft.bat": "Bat", - "entity.minecraft.bee": "Bee", - "entity.minecraft.blaze": "Blaze", - "entity.minecraft.block_display": "Block Display", - "entity.minecraft.boat": "Boat", - "entity.minecraft.breeze": "Breeze", - "entity.minecraft.camel": "Camel", - "entity.minecraft.cat": "Cat", - "entity.minecraft.cave_spider": "Cave Spider", - "entity.minecraft.chest_boat": "Boat with Chest", - "entity.minecraft.chest_minecart": "Minecart with Chest", - "entity.minecraft.chicken": "Chicken", - "entity.minecraft.cod": "Cod", - "entity.minecraft.command_block_minecart": "Minecart with Command Block", - "entity.minecraft.cow": "Cow", - "entity.minecraft.creeper": "Creeper", - "entity.minecraft.dolphin": "Dolphin", - "entity.minecraft.donkey": "Donkey", - "entity.minecraft.dragon_fireball": "Dragon Fireball", - "entity.minecraft.drowned": "Drowned", - "entity.minecraft.egg": "Thrown Egg", - "entity.minecraft.elder_guardian": "Elder Guardian", - "entity.minecraft.end_crystal": "End Crystal", - "entity.minecraft.ender_dragon": "Ender Dragon", - "entity.minecraft.ender_pearl": "Thrown Ender Pearl", - "entity.minecraft.enderman": "Enderman", - "entity.minecraft.endermite": "Endermite", - "entity.minecraft.evoker": "Evoker", - "entity.minecraft.evoker_fangs": "Evoker Fangs", - "entity.minecraft.experience_bottle": "Thrown Bottle o' Enchanting", - "entity.minecraft.experience_orb": "Experience Orb", - "entity.minecraft.eye_of_ender": "Eye of Ender", - "entity.minecraft.falling_block": "Falling Block", - "entity.minecraft.falling_block_type": "Falling %s", - "entity.minecraft.fireball": "Fireball", - "entity.minecraft.firework_rocket": "Firework Rocket", - "entity.minecraft.fishing_bobber": "Fishing Bobber", - "entity.minecraft.fox": "Fox", - "entity.minecraft.frog": "Frog", - "entity.minecraft.furnace_minecart": "Minecart with Furnace", - "entity.minecraft.ghast": "Ghast", - "entity.minecraft.giant": "Giant", - "entity.minecraft.glow_item_frame": "Glow Item Frame", - "entity.minecraft.glow_squid": "Glow Squid", - "entity.minecraft.goat": "Goat", - "entity.minecraft.guardian": "Guardian", - "entity.minecraft.hoglin": "Hoglin", - "entity.minecraft.hopper_minecart": "Minecart with Hopper", - "entity.minecraft.horse": "Horse", - "entity.minecraft.husk": "Husk", - "entity.minecraft.illusioner": "Illusioner", - "entity.minecraft.interaction": "Interaction", - "entity.minecraft.iron_golem": "Iron Golem", - "entity.minecraft.item": "Item", - "entity.minecraft.item_display": "Item Display", - "entity.minecraft.item_frame": "Item Frame", - "entity.minecraft.killer_bunny": "The Killer Bunny", - "entity.minecraft.leash_knot": "Leash Knot", - "entity.minecraft.lightning_bolt": "Lightning Bolt", - "entity.minecraft.llama": "Llama", - "entity.minecraft.llama_spit": "Llama Spit", - "entity.minecraft.magma_cube": "Magma Cube", - "entity.minecraft.marker": "Marker", - "entity.minecraft.minecart": "Minecart", - "entity.minecraft.mooshroom": "Mooshroom", - "entity.minecraft.mule": "Mule", - "entity.minecraft.ocelot": "Ocelot", - "entity.minecraft.painting": "Painting", - "entity.minecraft.panda": "Panda", - "entity.minecraft.parrot": "Parrot", - "entity.minecraft.phantom": "Phantom", - "entity.minecraft.pig": "Pig", - "entity.minecraft.piglin": "Piglin", - "entity.minecraft.piglin_brute": "Piglin Brute", - "entity.minecraft.pillager": "Pillager", - "entity.minecraft.player": "Player", - "entity.minecraft.polar_bear": "Polar Bear", - "entity.minecraft.potion": "Potion", - "entity.minecraft.pufferfish": "Pufferfish", - "entity.minecraft.rabbit": "Rabbit", - "entity.minecraft.ravager": "Ravager", - "entity.minecraft.salmon": "Salmon", - "entity.minecraft.sheep": "Sheep", - "entity.minecraft.shulker": "Shulker", - "entity.minecraft.shulker_bullet": "Shulker Bullet", - "entity.minecraft.silverfish": "Silverfish", - "entity.minecraft.skeleton": "Skeleton", - "entity.minecraft.skeleton_horse": "Skeleton Horse", - "entity.minecraft.slime": "Slime", - "entity.minecraft.small_fireball": "Small Fireball", - "entity.minecraft.sniffer": "Sniffer", - "entity.minecraft.snow_golem": "Snow Golem", - "entity.minecraft.snowball": "Snowball", - "entity.minecraft.spawner_minecart": "Minecart with Monster Spawner", - "entity.minecraft.spectral_arrow": "Spectral Arrow", - "entity.minecraft.spider": "Spider", - "entity.minecraft.squid": "Squid", - "entity.minecraft.stray": "Stray", - "entity.minecraft.strider": "Strider", - "entity.minecraft.tadpole": "Tadpole", - "entity.minecraft.text_display": "Text Display", - "entity.minecraft.tnt": "Primed TNT", - "entity.minecraft.tnt_minecart": "Minecart with TNT", - "entity.minecraft.trader_llama": "Trader Llama", - "entity.minecraft.trident": "Trident", - "entity.minecraft.tropical_fish": "Tropical Fish", - "entity.minecraft.tropical_fish.predefined.0": "Anemone", - "entity.minecraft.tropical_fish.predefined.1": "Black Tang", - "entity.minecraft.tropical_fish.predefined.2": "Blue Tang", - "entity.minecraft.tropical_fish.predefined.3": "Butterflyfish", - "entity.minecraft.tropical_fish.predefined.4": "Cichlid", - "entity.minecraft.tropical_fish.predefined.5": "Clownfish", - "entity.minecraft.tropical_fish.predefined.6": "Cotton Candy Betta", - "entity.minecraft.tropical_fish.predefined.7": "Dottyback", - "entity.minecraft.tropical_fish.predefined.8": "Emperor Red Snapper", - "entity.minecraft.tropical_fish.predefined.9": "Goatfish", - "entity.minecraft.tropical_fish.predefined.10": "Moorish Idol", - "entity.minecraft.tropical_fish.predefined.11": "Ornate Butterflyfish", - "entity.minecraft.tropical_fish.predefined.12": "Parrotfish", - "entity.minecraft.tropical_fish.predefined.13": "Queen Angelfish", - "entity.minecraft.tropical_fish.predefined.14": "Red Cichlid", - "entity.minecraft.tropical_fish.predefined.15": "Red Lipped Blenny", - "entity.minecraft.tropical_fish.predefined.16": "Red Snapper", - "entity.minecraft.tropical_fish.predefined.17": "Threadfin", - "entity.minecraft.tropical_fish.predefined.18": "Tomato Clownfish", - "entity.minecraft.tropical_fish.predefined.19": "Triggerfish", - "entity.minecraft.tropical_fish.predefined.20": "Yellowtail Parrotfish", - "entity.minecraft.tropical_fish.predefined.21": "Yellow Tang", - "entity.minecraft.tropical_fish.type.betty": "Betty", - "entity.minecraft.tropical_fish.type.blockfish": "Blockfish", - "entity.minecraft.tropical_fish.type.brinely": "Brinely", - "entity.minecraft.tropical_fish.type.clayfish": "Clayfish", - "entity.minecraft.tropical_fish.type.dasher": "Dasher", - "entity.minecraft.tropical_fish.type.flopper": "Flopper", - "entity.minecraft.tropical_fish.type.glitter": "Glitter", - "entity.minecraft.tropical_fish.type.kob": "Kob", - "entity.minecraft.tropical_fish.type.snooper": "Snooper", - "entity.minecraft.tropical_fish.type.spotty": "Spotty", - "entity.minecraft.tropical_fish.type.stripey": "Stripey", - "entity.minecraft.tropical_fish.type.sunstreak": "Sunstreak", - "entity.minecraft.turtle": "Turtle", - "entity.minecraft.vex": "Vex", - "entity.minecraft.villager": "Villager", - "entity.minecraft.villager.armorer": "Armorer", - "entity.minecraft.villager.butcher": "Butcher", - "entity.minecraft.villager.cartographer": "Cartographer", - "entity.minecraft.villager.cleric": "Cleric", - "entity.minecraft.villager.farmer": "Farmer", - "entity.minecraft.villager.fisherman": "Fisherman", - "entity.minecraft.villager.fletcher": "Fletcher", - "entity.minecraft.villager.leatherworker": "Leatherworker", - "entity.minecraft.villager.librarian": "Librarian", - "entity.minecraft.villager.mason": "Mason", - "entity.minecraft.villager.nitwit": "Nitwit", - "entity.minecraft.villager.none": "Villager", - "entity.minecraft.villager.shepherd": "Shepherd", - "entity.minecraft.villager.toolsmith": "Toolsmith", - "entity.minecraft.villager.weaponsmith": "Weaponsmith", - "entity.minecraft.vindicator": "Vindicator", - "entity.minecraft.wandering_trader": "Wandering Trader", - "entity.minecraft.warden": "Warden", - "entity.minecraft.wind_charge": "Wind Charge", - "entity.minecraft.witch": "Witch", - "entity.minecraft.wither": "Wither", - "entity.minecraft.wither_skeleton": "Wither Skeleton", - "entity.minecraft.wither_skull": "Wither Skull", - "entity.minecraft.wolf": "Wolf", - "entity.minecraft.zoglin": "Zoglin", - "entity.minecraft.zombie": "Zombie", - "entity.minecraft.zombie_horse": "Zombie Horse", - "entity.minecraft.zombie_villager": "Zombie Villager", - "entity.minecraft.zombified_piglin": "Zombified Piglin", - "entity.not_summonable": "Can't summon entity of type %s", - "event.minecraft.raid": "Raid", - "event.minecraft.raid.defeat": "Defeat", - "event.minecraft.raid.defeat.full": "Raid - Defeat", - "event.minecraft.raid.raiders_remaining": "Raiders Remaining: %s", - "event.minecraft.raid.victory": "Victory", - "event.minecraft.raid.victory.full": "Raid - Victory", - "filled_map.buried_treasure": "Buried Treasure Map", - "filled_map.explorer_jungle": "Jungle Explorer Map", - "filled_map.explorer_swamp": "Swamp Explorer Map", - "filled_map.id": "Id #%s", - "filled_map.level": "(Level %s/%s)", - "filled_map.locked": "Locked", - "filled_map.mansion": "Woodland Explorer Map", - "filled_map.monument": "Ocean Explorer Map", - "filled_map.scale": "Scaling at 1:%s", - "filled_map.unknown": "Unknown Map", - "filled_map.village_desert": "Desert Village Map", - "filled_map.village_plains": "Plains Village Map", - "filled_map.village_savanna": "Savanna Village Map", - "filled_map.village_snowy": "Snowy Village Map", - "filled_map.village_taiga": "Taiga Village Map", - "flat_world_preset.minecraft.bottomless_pit": "Bottomless Pit", - "flat_world_preset.minecraft.classic_flat": "Classic Flat", - "flat_world_preset.minecraft.desert": "Desert", - "flat_world_preset.minecraft.overworld": "Overworld", - "flat_world_preset.minecraft.redstone_ready": "Redstone Ready", - "flat_world_preset.minecraft.snowy_kingdom": "Snowy Kingdom", - "flat_world_preset.minecraft.the_void": "The Void", - "flat_world_preset.minecraft.tunnelers_dream": "Tunnelers' Dream", - "flat_world_preset.minecraft.water_world": "Water World", - "flat_world_preset.unknown": "???", - "gameMode.adventure": "Adventure Mode", - "gameMode.changed": "Your game mode has been updated to %s", - "gameMode.creative": "Creative Mode", - "gameMode.hardcore": "Hardcore Mode!", - "gameMode.spectator": "Spectator Mode", - "gameMode.survival": "Survival Mode", - "gamerule.announceAdvancements": "Announce advancements", - "gamerule.blockExplosionDropDecay": "In block interaction explosions, some blocks won't drop their loot", - "gamerule.blockExplosionDropDecay.description": "Some of the drops from blocks destroyed by explosions caused by block interactions are lost in the explosion.", - "gamerule.category.chat": "Chat", - "gamerule.category.drops": "Drops", - "gamerule.category.misc": "Miscellaneous", - "gamerule.category.mobs": "Mobs", - "gamerule.category.player": "Player", - "gamerule.category.spawning": "Spawning", - "gamerule.category.updates": "World Updates", - "gamerule.commandBlockOutput": "Broadcast command block output", - "gamerule.commandModificationBlockLimit": "Command modification block limit", - "gamerule.commandModificationBlockLimit.description": "Number of blocks that can be changed at once by one command, such as fill or clone.", - "gamerule.disableElytraMovementCheck": "Disable elytra movement check", - "gamerule.disableRaids": "Disable raids", - "gamerule.doDaylightCycle": "Advance time of day", - "gamerule.doEntityDrops": "Drop entity equipment", - "gamerule.doEntityDrops.description": "Controls drops from minecarts (including inventories), item frames, boats, etc.", - "gamerule.doFireTick": "Update fire", - "gamerule.doImmediateRespawn": "Respawn immediately", - "gamerule.doInsomnia": "Spawn phantoms", - "gamerule.doLimitedCrafting": "Require recipe for crafting", - "gamerule.doLimitedCrafting.description": "If enabled, players will be able to craft only unlocked recipes.", - "gamerule.doMobLoot": "Drop mob loot", - "gamerule.doMobLoot.description": "Controls resource drops from mobs, including experience orbs.", - "gamerule.doMobSpawning": "Spawn mobs", - "gamerule.doMobSpawning.description": "Some entities might have separate rules.", - "gamerule.doPatrolSpawning": "Spawn pillager patrols", - "gamerule.doTileDrops": "Drop blocks", - "gamerule.doTileDrops.description": "Controls resource drops from blocks, including experience orbs.", - "gamerule.doTraderSpawning": "Spawn Wandering Traders", - "gamerule.doVinesSpread": "Vines spread", - "gamerule.doVinesSpread.description": "Controls whether or not the Vines block spreads randomly to adjacent blocks. Does not affect other type of vine blocks such as Weeping Vines, Twisting Vines, etc.", - "gamerule.doWardenSpawning": "Spawn Wardens", - "gamerule.doWeatherCycle": "Update weather", - "gamerule.drowningDamage": "Deal drowning damage", - "gamerule.enderPearlsVanishOnDeath": "Thrown ender pearls vanish on death", - "gamerule.enderPearlsVanishOnDeath.description": "Whether ender pearls thrown by a player vanish when that player dies.", - "gamerule.fallDamage": "Deal fall damage", - "gamerule.fireDamage": "Deal fire damage", - "gamerule.forgiveDeadPlayers": "Forgive dead players", - "gamerule.forgiveDeadPlayers.description": "Angered neutral mobs stop being angry when the targeted player dies nearby.", - "gamerule.freezeDamage": "Deal freeze damage", - "gamerule.globalSoundEvents": "Global sound events", - "gamerule.globalSoundEvents.description": "When certain game events happen, like a boss spawning, the sound is heard everywhere.", - "gamerule.keepInventory": "Keep inventory after death", - "gamerule.lavaSourceConversion": "Lava converts to source", - "gamerule.lavaSourceConversion.description": "When flowing lava is surrounded on two sides by lava sources it converts into a source.", - "gamerule.logAdminCommands": "Broadcast admin commands", - "gamerule.maxCommandChainLength": "Command chain size limit", - "gamerule.maxCommandChainLength.description": "Applies to command block chains and functions.", - "gamerule.maxCommandForkCount": "Command context limit", - "gamerule.maxCommandForkCount.description": "Maximum number of contexts that can be used by commands like 'execute as'.", - "gamerule.maxEntityCramming": "Entity cramming threshold", - "gamerule.mobExplosionDropDecay": "In mob explosions, some blocks won't drop their loot", - "gamerule.mobExplosionDropDecay.description": "Some of the drops from blocks destroyed by explosions caused by mobs are lost in the explosion.", - "gamerule.mobGriefing": "Allow destructive mob actions", - "gamerule.naturalRegeneration": "Regenerate health", - "gamerule.playersNetherPortalCreativeDelay": "Player's Nether portal delay in creative mode", - "gamerule.playersNetherPortalCreativeDelay.description": "Time (in ticks) that a creative mode player needs to stand in a Nether portal before changing dimensions.", - "gamerule.playersNetherPortalDefaultDelay": "Player's Nether portal delay in non-creative mode", - "gamerule.playersNetherPortalDefaultDelay.description": "Time (in ticks) that a non-creative mode player needs to stand in a Nether portal before changing dimensions.", - "gamerule.playersSleepingPercentage": "Sleep percentage", - "gamerule.playersSleepingPercentage.description": "The percentage of players who must be sleeping to skip the night.", - "gamerule.projectilesCanBreakBlocks": "Projectiles can break blocks", - "gamerule.projectilesCanBreakBlocks.description": "Controls whether impact projectiles will destroy blocks that are destructible by them.", - "gamerule.randomTickSpeed": "Random tick speed rate", - "gamerule.reducedDebugInfo": "Reduce debug info", - "gamerule.reducedDebugInfo.description": "Limits contents of debug screen.", - "gamerule.sendCommandFeedback": "Send command feedback", - "gamerule.showDeathMessages": "Show death messages", - "gamerule.snowAccumulationHeight": "Snow accumulation height", - "gamerule.snowAccumulationHeight.description": "When it snows, layers of snow form on the ground up to at most this number of layers.", - "gamerule.spawnRadius": "Respawn location radius", - "gamerule.spectatorsGenerateChunks": "Allow spectators to generate terrain", - "gamerule.tntExplosionDropDecay": "In TNT explosions, some blocks won't drop their loot", - "gamerule.tntExplosionDropDecay.description": "Some of the drops from blocks destroyed by explosions caused by TNT are lost in the explosion.", - "gamerule.universalAnger": "Universal anger", - "gamerule.universalAnger.description": "Angered neutral mobs attack any nearby player, not just the player that angered them. Works best if forgiveDeadPlayers is disabled.", - "gamerule.waterSourceConversion": "Water converts to source", - "gamerule.waterSourceConversion.description": "When flowing water is surrounded on two sides by water sources it converts into a source.", - "generator.custom": "Custom", - "generator.customized": "Old Customized", - "generator.minecraft.amplified": "AMPLIFIED", - "generator.minecraft.amplified.info": "Notice: Just for fun! Requires a beefy computer.", - "generator.minecraft.debug_all_block_states": "Debug Mode", - "generator.minecraft.flat": "Superflat", - "generator.minecraft.large_biomes": "Large Biomes", - "generator.minecraft.normal": "Default", - "generator.minecraft.single_biome_surface": "Single Biome", - "generator.single_biome_caves": "Caves", - "generator.single_biome_floating_islands": "Floating Islands", - "gui.abuseReport.comments": "Comments", - "gui.abuseReport.describe": "Sharing details will help us make a well-informed decision.", - "gui.abuseReport.discard.content": "If you leave, you'll lose this report and your comments.\nAre you sure you want to leave?", - "gui.abuseReport.discard.discard": "Leave and Discard Report", - "gui.abuseReport.discard.draft": "Save as Draft", - "gui.abuseReport.discard.return": "Continue Editing", - "gui.abuseReport.discard.title": "Discard report and comments?", - "gui.abuseReport.draft.content": "Would you like to continue editing the existing report or discard it and create a new one?", - "gui.abuseReport.draft.discard": "Discard", - "gui.abuseReport.draft.edit": "Continue Editing", - "gui.abuseReport.draft.quittotitle.content": "Would you like to continue editing it or discard it?", - "gui.abuseReport.draft.quittotitle.title": "You have a draft chat report that will be lost if you quit", - "gui.abuseReport.draft.title": "Edit draft chat report?", - "gui.abuseReport.error.title": "Problem sending your report", - "gui.abuseReport.message": "Where did you observe the bad behavior?\nThis will help us in researching your case.", - "gui.abuseReport.more_comments": "Please describe what happened:", - "gui.abuseReport.name.reporting": "You are reporting \"%s\".", - "gui.abuseReport.name.title": "Report Player Name", - "gui.abuseReport.observed_what": "Why are you reporting this?", - "gui.abuseReport.read_info": "Learn About Reporting", - "gui.abuseReport.reason.alcohol_tobacco_drugs": "Drugs or alcohol", - "gui.abuseReport.reason.alcohol_tobacco_drugs.description": "Someone is encouraging others to partake in illegal drug related activities or encouraging underage drinking.", - "gui.abuseReport.reason.child_sexual_exploitation_or_abuse": "Child sexual exploitation or abuse", - "gui.abuseReport.reason.child_sexual_exploitation_or_abuse.description": "Someone is talking about or otherwise promoting indecent behavior involving children.", - "gui.abuseReport.reason.defamation_impersonation_false_information": "Defamation", - "gui.abuseReport.reason.defamation_impersonation_false_information.description": "Someone is damaging your or someone else's reputation, for example sharing false information with the aim to exploit or mislead others.", - "gui.abuseReport.reason.description": "Description:", - "gui.abuseReport.reason.false_reporting": "False Reporting", - "gui.abuseReport.reason.generic": "I want to report them", - "gui.abuseReport.reason.generic.description": "I'm annoyed with them / they have done something I do not like.", - "gui.abuseReport.reason.harassment_or_bullying": "Harassment or bullying", - "gui.abuseReport.reason.harassment_or_bullying.description": "Someone is shaming, attacking, or bullying you or someone else. This includes when someone is repeatedly trying to contact you or someone else without consent or posting private personal information about you or someone else without consent (\"doxing\").", - "gui.abuseReport.reason.hate_speech": "Hate speech", - "gui.abuseReport.reason.hate_speech.description": "Someone is attacking you or another player based on characteristics of their identity, like religion, race, or sexuality.", - "gui.abuseReport.reason.imminent_harm": "Threat of harm to others", - "gui.abuseReport.reason.imminent_harm.description": "Someone is threatening to harm you or someone else in real life.", - "gui.abuseReport.reason.narration": "%s: %s", - "gui.abuseReport.reason.non_consensual_intimate_imagery": "Non-consensual intimate imagery", - "gui.abuseReport.reason.non_consensual_intimate_imagery.description": "Someone is talking about, sharing, or otherwise promoting private and intimate images.", - "gui.abuseReport.reason.self_harm_or_suicide": "Self-harm or suicide", - "gui.abuseReport.reason.self_harm_or_suicide.description": "Someone is threatening to harm themselves in real life or talking about harming themselves in real life.", - "gui.abuseReport.reason.terrorism_or_violent_extremism": "Terrorism or violent extremism", - "gui.abuseReport.reason.terrorism_or_violent_extremism.description": "Someone is talking about, promoting, or threatening to commit acts of terrorism or violent extremism for political, religious, ideological, or other reasons.", - "gui.abuseReport.reason.title": "Select Report Category", - "gui.abuseReport.report_sent_msg": "We’ve successfully received your report. Thank you!\n\nOur team will review it as soon as possible.", - "gui.abuseReport.select_reason": "Select Report Category", - "gui.abuseReport.send": "Send Report", - "gui.abuseReport.send.comment_too_long": "Please shorten the comment", - "gui.abuseReport.send.error_message": "An error was returned while sending your report:\n'%s'", - "gui.abuseReport.send.generic_error": "Encountered an unexpected error while sending your report.", - "gui.abuseReport.send.http_error": "An unexpected HTTP error occurred while sending your report.", - "gui.abuseReport.send.json_error": "Encountered malformed payload while sending your report.", - "gui.abuseReport.send.no_reason": "Please select a report category", - "gui.abuseReport.send.service_unavailable": "Unable to reach the Abuse Reporting service. Please make sure you are connected to the internet and try again.", - "gui.abuseReport.sending.title": "Sending your report...", - "gui.abuseReport.sent.title": "Report sent", - "gui.abuseReport.skin.title": "Report Player Skin", - "gui.abuseReport.title": "Report Player", - "gui.abuseReport.type.chat": "Chat Messages", - "gui.abuseReport.type.name": "Player Name", - "gui.abuseReport.type.skin": "Player Skin", - "gui.acknowledge": "Acknowledge", - "gui.advancements": "Advancements", - "gui.all": "All", - "gui.back": "Back", - "gui.banned.description": "%s\n\n%s\n\nLearn more at the following link: %s", - "gui.banned.description.permanent": "Your account is permanently banned, which means you can’t play online or join Realms.", - "gui.banned.description.reason": "We recently received a report for bad behavior by your account. Our moderators have now reviewed your case and identified it as %s, which goes against the Minecraft Community Standards.", - "gui.banned.description.reason_id": "Code: %s", - "gui.banned.description.reason_id_message": "Code: %s - %s", - "gui.banned.description.temporary": "%s Until then, you can’t play online or join Realms.", - "gui.banned.description.temporary.duration": "Your account is temporarily suspended and will be reactivated in %s.", - "gui.banned.description.unknownreason": "We recently received a report for bad behavior by your account. Our moderators have now reviewed your case and identified that it goes against the Minecraft Community Standards.", - "gui.banned.name.description": "Your current name - \"%s\" - violates our Community Standards. You can play singleplayer, but will need to change your name to play online.\n\nLearn more or submit a case review at the following link: %s", - "gui.banned.name.title": "Name Not Allowed in Multiplayer", - "gui.banned.reason.defamation_impersonation_false_information": "Impersonation or sharing information to exploit or mislead others", - "gui.banned.reason.drugs": "References to illegal drugs", - "gui.banned.reason.extreme_violence_or_gore": "Depictions of real-life excessive violence or gore", - "gui.banned.reason.false_reporting": "Excessive false or inaccurate reports", - "gui.banned.reason.fraud": "Fraudulent acquisition or use of content", - "gui.banned.reason.generic_violation": "Violating Community Standards", - "gui.banned.reason.harassment_or_bullying": "Abusive language used in a directed, harmful manner", - "gui.banned.reason.hate_speech": "Hate speech or discrimination", - "gui.banned.reason.hate_terrorism_notorious_figure": "References to hate groups, terrorist organizations, or notorious figures", - "gui.banned.reason.imminent_harm_to_person_or_property": "Intent to cause real-life harm to persons or property", - "gui.banned.reason.nudity_or_pornography": "Displaying lewd or pornographic material", - "gui.banned.reason.sexually_inappropriate": "Topics or content of a sexual nature", - "gui.banned.reason.spam_or_advertising": "Spam or advertising", - "gui.banned.skin.description": "Your current skin violates our Community Standards. You can still play with a default skin, or select a new one.\n\nLearn more or submit a case review at the following link: %s", - "gui.banned.skin.title": "Skin Not Allowed", - "gui.banned.title.permanent": "Account permanently banned", - "gui.banned.title.temporary": "Account temporarily suspended", - "gui.cancel": "Cancel", - "gui.chatReport.comments": "Comments", - "gui.chatReport.describe": "Sharing details will help us make a well-informed decision.", - "gui.chatReport.discard.content": "If you leave, you'll lose this report and your comments.\nAre you sure you want to leave?", - "gui.chatReport.discard.discard": "Leave and Discard Report", - "gui.chatReport.discard.draft": "Save as Draft", - "gui.chatReport.discard.return": "Continue Editing", - "gui.chatReport.discard.title": "Discard report and comments?", - "gui.chatReport.draft.content": "Would you like to continue editing the existing report or discard it and create a new one?", - "gui.chatReport.draft.discard": "Discard", - "gui.chatReport.draft.edit": "Continue Editing", - "gui.chatReport.draft.quittotitle.content": "Would you like to continue editing it or discard it?", - "gui.chatReport.draft.quittotitle.title": "You have a draft chat report that will be lost if you quit", - "gui.chatReport.draft.title": "Edit draft chat report?", - "gui.chatReport.more_comments": "Please describe what happened:", - "gui.chatReport.observed_what": "Why are you reporting this?", - "gui.chatReport.read_info": "Learn About Reporting", - "gui.chatReport.report_sent_msg": "We’ve successfully received your report. Thank you!\n\nOur team will review it as soon as possible.", - "gui.chatReport.select_chat": "Select Chat Messages to Report", - "gui.chatReport.select_reason": "Select Report Category", - "gui.chatReport.selected_chat": "%s Chat Message(s) Selected to Report", - "gui.chatReport.send": "Send Report", - "gui.chatReport.send.comments_too_long": "Please shorten the comment", - "gui.chatReport.send.no_reason": "Please select a report category", - "gui.chatReport.send.no_reported_messages": "Please select at least one chat message to report", - "gui.chatReport.send.too_many_messages": "Trying to include too many messages in the report", - "gui.chatReport.title": "Report Player Chat", - "gui.chatSelection.context": "Messages surrounding this selection will be included to provide additional context", - "gui.chatSelection.fold": "%s message(s) hidden", - "gui.chatSelection.heading": "%s %s", - "gui.chatSelection.join": "%s joined the chat", - "gui.chatSelection.message.narrate": "%s said: %s at %s", - "gui.chatSelection.selected": "%s/%s message(s) selected", - "gui.chatSelection.title": "Select Chat Messages to Report", - "gui.continue": "Continue", - "gui.copy_link_to_clipboard": "Copy Link to Clipboard", - "gui.days": "%s day(s)", - "gui.done": "Done", - "gui.down": "Down", - "gui.entity_tooltip.type": "Type: %s", - "gui.hours": "%s hour(s)", - "gui.loadingMinecraft": "Loading Minecraft", - "gui.minutes": "%s minute(s)", - "gui.multiLineEditBox.character_limit": "%s/%s", - "gui.narrate.button": "%s button", - "gui.narrate.editBox": "%s edit box: %s", - "gui.narrate.slider": "%s slider", - "gui.narrate.tab": "%s tab", - "gui.no": "No", - "gui.none": "None", - "gui.ok": "Ok", - "gui.proceed": "Proceed", - "gui.recipebook.moreRecipes": "Right Click for More", - "gui.recipebook.page": "%s/%s", - "gui.recipebook.search_hint": "Search...", - "gui.recipebook.toggleRecipes.all": "Showing All", - "gui.recipebook.toggleRecipes.blastable": "Showing Blastable", - "gui.recipebook.toggleRecipes.craftable": "Showing Craftable", - "gui.recipebook.toggleRecipes.smeltable": "Showing Smeltable", - "gui.recipebook.toggleRecipes.smokable": "Showing Smokable", - "gui.socialInteractions.blocking_hint": "Manage with Microsoft account", - "gui.socialInteractions.empty_blocked": "No blocked players in chat", - "gui.socialInteractions.empty_hidden": "No players hidden in chat", - "gui.socialInteractions.hidden_in_chat": "Chat messages from %s will be hidden", - "gui.socialInteractions.hide": "Hide in Chat", - "gui.socialInteractions.narration.hide": "Hide messages from %s", - "gui.socialInteractions.narration.report": "Report player %s", - "gui.socialInteractions.narration.show": "Show messages from %s", - "gui.socialInteractions.report": "Report", - "gui.socialInteractions.search_empty": "Couldn't find any players with that name", - "gui.socialInteractions.search_hint": "Search...", - "gui.socialInteractions.server_label.multiple": "%s - %s players", - "gui.socialInteractions.server_label.single": "%s - %s player", - "gui.socialInteractions.show": "Show in Chat", - "gui.socialInteractions.shown_in_chat": "Chat messages from %s will be shown", - "gui.socialInteractions.status_blocked": "Blocked", - "gui.socialInteractions.status_blocked_offline": "Blocked - Offline", - "gui.socialInteractions.status_hidden": "Hidden", - "gui.socialInteractions.status_hidden_offline": "Hidden - Offline", - "gui.socialInteractions.status_offline": "Offline", - "gui.socialInteractions.tab_all": "All", - "gui.socialInteractions.tab_blocked": "Blocked", - "gui.socialInteractions.tab_hidden": "Hidden", - "gui.socialInteractions.title": "Social Interactions", - "gui.socialInteractions.tooltip.hide": "Hide messages", - "gui.socialInteractions.tooltip.report": "Report player", - "gui.socialInteractions.tooltip.report.disabled": "The reporting service is unavailable", - "gui.socialInteractions.tooltip.report.no_messages": "No reportable messages from player %s", - "gui.socialInteractions.tooltip.report.not_reportable": "This player can't be reported, because their chat messages can't be verified on this server", - "gui.socialInteractions.tooltip.show": "Show messages", - "gui.stats": "Statistics", - "gui.togglable_slot": "Click to disable slot", - "gui.toMenu": "Back to Server List", - "gui.toRealms": "Back to Realms List", - "gui.toTitle": "Back to Title Screen", - "gui.toWorld": "Back to World List", - "gui.up": "Up", - "gui.yes": "Yes", - "hanging_sign.edit": "Edit Hanging Sign Message", - "instrument.minecraft.admire_goat_horn": "Admire", - "instrument.minecraft.call_goat_horn": "Call", - "instrument.minecraft.dream_goat_horn": "Dream", - "instrument.minecraft.feel_goat_horn": "Feel", - "instrument.minecraft.ponder_goat_horn": "Ponder", - "instrument.minecraft.seek_goat_horn": "Seek", - "instrument.minecraft.sing_goat_horn": "Sing", - "instrument.minecraft.yearn_goat_horn": "Yearn", - "inventory.binSlot": "Destroy Item", - "inventory.hotbarInfo": "Save hotbar with %1$s+%2$s", - "inventory.hotbarSaved": "Item hotbar saved (restore with %1$s+%2$s)", - "item_modifier.unknown": "Unknown item modifier: %s", - "item.canBreak": "Can break:", - "item.canPlace": "Can be placed on:", - "item.color": "Color: %s", - "item.disabled": "Disabled item", - "item.durability": "Durability: %s / %s", - "item.dyed": "Dyed", - "item.minecraft.acacia_boat": "Acacia Boat", - "item.minecraft.acacia_chest_boat": "Acacia Boat with Chest", - "item.minecraft.allay_spawn_egg": "Allay Spawn Egg", - "item.minecraft.amethyst_shard": "Amethyst Shard", - "item.minecraft.angler_pottery_shard": "Angler Pottery Shard", - "item.minecraft.angler_pottery_sherd": "Angler Pottery Sherd", - "item.minecraft.apple": "Apple", - "item.minecraft.archer_pottery_shard": "Archer Pottery Shard", - "item.minecraft.archer_pottery_sherd": "Archer Pottery Sherd", - "item.minecraft.armor_stand": "Armor Stand", - "item.minecraft.arms_up_pottery_shard": "Arms Up Pottery Shard", - "item.minecraft.arms_up_pottery_sherd": "Arms Up Pottery Sherd", - "item.minecraft.arrow": "Arrow", - "item.minecraft.axolotl_bucket": "Bucket of Axolotl", - "item.minecraft.axolotl_spawn_egg": "Axolotl Spawn Egg", - "item.minecraft.baked_potato": "Baked Potato", - "item.minecraft.bamboo_chest_raft": "Bamboo Raft with Chest", - "item.minecraft.bamboo_raft": "Bamboo Raft", - "item.minecraft.bat_spawn_egg": "Bat Spawn Egg", - "item.minecraft.bee_spawn_egg": "Bee Spawn Egg", - "item.minecraft.beef": "Raw Beef", - "item.minecraft.beetroot": "Beetroot", - "item.minecraft.beetroot_seeds": "Beetroot Seeds", - "item.minecraft.beetroot_soup": "Beetroot Soup", - "item.minecraft.birch_boat": "Birch Boat", - "item.minecraft.birch_chest_boat": "Birch Boat with Chest", - "item.minecraft.black_dye": "Black Dye", - "item.minecraft.blade_pottery_shard": "Blade Pottery Shard", - "item.minecraft.blade_pottery_sherd": "Blade Pottery Sherd", - "item.minecraft.blaze_powder": "Blaze Powder", - "item.minecraft.blaze_rod": "Blaze Rod", - "item.minecraft.blaze_spawn_egg": "Blaze Spawn Egg", - "item.minecraft.blue_dye": "Blue Dye", - "item.minecraft.bone": "Bone", - "item.minecraft.bone_meal": "Bone Meal", - "item.minecraft.book": "Book", - "item.minecraft.bow": "Bow", - "item.minecraft.bowl": "Bowl", - "item.minecraft.bread": "Bread", - "item.minecraft.breeze_spawn_egg": "Breeze Spawn Egg", - "item.minecraft.brewer_pottery_shard": "Brewer Pottery Shard", - "item.minecraft.brewer_pottery_sherd": "Brewer Pottery Sherd", - "item.minecraft.brewing_stand": "Brewing Stand", - "item.minecraft.brick": "Brick", - "item.minecraft.brown_dye": "Brown Dye", - "item.minecraft.brush": "Brush", - "item.minecraft.bucket": "Bucket", - "item.minecraft.bundle": "Bundle", - "item.minecraft.bundle.fullness": "%s/%s", - "item.minecraft.burn_pottery_shard": "Burn Pottery Shard", - "item.minecraft.burn_pottery_sherd": "Burn Pottery Sherd", - "item.minecraft.camel_spawn_egg": "Camel Spawn Egg", - "item.minecraft.carrot": "Carrot", - "item.minecraft.carrot_on_a_stick": "Carrot on a Stick", - "item.minecraft.cat_spawn_egg": "Cat Spawn Egg", - "item.minecraft.cauldron": "Cauldron", - "item.minecraft.cave_spider_spawn_egg": "Cave Spider Spawn Egg", - "item.minecraft.chainmail_boots": "Chainmail Boots", - "item.minecraft.chainmail_chestplate": "Chainmail Chestplate", - "item.minecraft.chainmail_helmet": "Chainmail Helmet", - "item.minecraft.chainmail_leggings": "Chainmail Leggings", - "item.minecraft.charcoal": "Charcoal", - "item.minecraft.cherry_boat": "Cherry Boat", - "item.minecraft.cherry_chest_boat": "Cherry Boat with Chest", - "item.minecraft.chest_minecart": "Minecart with Chest", - "item.minecraft.chicken": "Raw Chicken", - "item.minecraft.chicken_spawn_egg": "Chicken Spawn Egg", - "item.minecraft.chorus_fruit": "Chorus Fruit", - "item.minecraft.clay_ball": "Clay Ball", - "item.minecraft.clock": "Clock", - "item.minecraft.coal": "Coal", - "item.minecraft.coast_armor_trim_smithing_template": "Smithing Template", - "item.minecraft.cocoa_beans": "Cocoa Beans", - "item.minecraft.cod": "Raw Cod", - "item.minecraft.cod_bucket": "Bucket of Cod", - "item.minecraft.cod_spawn_egg": "Cod Spawn Egg", - "item.minecraft.command_block_minecart": "Minecart with Command Block", - "item.minecraft.compass": "Compass", - "item.minecraft.cooked_beef": "Steak", - "item.minecraft.cooked_chicken": "Cooked Chicken", - "item.minecraft.cooked_cod": "Cooked Cod", - "item.minecraft.cooked_mutton": "Cooked Mutton", - "item.minecraft.cooked_porkchop": "Cooked Porkchop", - "item.minecraft.cooked_rabbit": "Cooked Rabbit", - "item.minecraft.cooked_salmon": "Cooked Salmon", - "item.minecraft.cookie": "Cookie", - "item.minecraft.copper_ingot": "Copper Ingot", - "item.minecraft.cow_spawn_egg": "Cow Spawn Egg", - "item.minecraft.creeper_banner_pattern": "Banner Pattern", - "item.minecraft.creeper_banner_pattern.desc": "Creeper Charge", - "item.minecraft.creeper_spawn_egg": "Creeper Spawn Egg", - "item.minecraft.crossbow": "Crossbow", - "item.minecraft.crossbow.projectile": "Projectile:", - "item.minecraft.cyan_dye": "Cyan Dye", - "item.minecraft.danger_pottery_shard": "Danger Pottery Shard", - "item.minecraft.danger_pottery_sherd": "Danger Pottery Sherd", - "item.minecraft.dark_oak_boat": "Dark Oak Boat", - "item.minecraft.dark_oak_chest_boat": "Dark Oak Boat with Chest", - "item.minecraft.debug_stick": "Debug Stick", - "item.minecraft.debug_stick.empty": "%s has no properties", - "item.minecraft.debug_stick.select": "selected \"%s\" (%s)", - "item.minecraft.debug_stick.update": "\"%s\" to %s", - "item.minecraft.diamond": "Diamond", - "item.minecraft.diamond_axe": "Diamond Axe", - "item.minecraft.diamond_boots": "Diamond Boots", - "item.minecraft.diamond_chestplate": "Diamond Chestplate", - "item.minecraft.diamond_helmet": "Diamond Helmet", - "item.minecraft.diamond_hoe": "Diamond Hoe", - "item.minecraft.diamond_horse_armor": "Diamond Horse Armor", - "item.minecraft.diamond_leggings": "Diamond Leggings", - "item.minecraft.diamond_pickaxe": "Diamond Pickaxe", - "item.minecraft.diamond_shovel": "Diamond Shovel", - "item.minecraft.diamond_sword": "Diamond Sword", - "item.minecraft.disc_fragment_5": "Disc Fragment", - "item.minecraft.disc_fragment_5.desc": "Music Disc - 5", - "item.minecraft.dolphin_spawn_egg": "Dolphin Spawn Egg", - "item.minecraft.donkey_spawn_egg": "Donkey Spawn Egg", - "item.minecraft.dragon_breath": "Dragon's Breath", - "item.minecraft.dried_kelp": "Dried Kelp", - "item.minecraft.drowned_spawn_egg": "Drowned Spawn Egg", - "item.minecraft.dune_armor_trim_smithing_template": "Smithing Template", - "item.minecraft.echo_shard": "Echo Shard", - "item.minecraft.egg": "Egg", - "item.minecraft.elder_guardian_spawn_egg": "Elder Guardian Spawn Egg", - "item.minecraft.elytra": "Elytra", - "item.minecraft.emerald": "Emerald", - "item.minecraft.enchanted_book": "Enchanted Book", - "item.minecraft.enchanted_golden_apple": "Enchanted Golden Apple", - "item.minecraft.end_crystal": "End Crystal", - "item.minecraft.ender_dragon_spawn_egg": "Ender Dragon Spawn Egg", - "item.minecraft.ender_eye": "Eye of Ender", - "item.minecraft.ender_pearl": "Ender Pearl", - "item.minecraft.enderman_spawn_egg": "Enderman Spawn Egg", - "item.minecraft.endermite_spawn_egg": "Endermite Spawn Egg", - "item.minecraft.evoker_spawn_egg": "Evoker Spawn Egg", - "item.minecraft.experience_bottle": "Bottle o' Enchanting", - "item.minecraft.explorer_pottery_shard": "Explorer Pottery Shard", - "item.minecraft.explorer_pottery_sherd": "Explorer Pottery Sherd", - "item.minecraft.eye_armor_trim_smithing_template": "Smithing Template", - "item.minecraft.feather": "Feather", - "item.minecraft.fermented_spider_eye": "Fermented Spider Eye", - "item.minecraft.filled_map": "Map", - "item.minecraft.fire_charge": "Fire Charge", - "item.minecraft.firework_rocket": "Firework Rocket", - "item.minecraft.firework_rocket.flight": "Flight Duration:", - "item.minecraft.firework_star": "Firework Star", - "item.minecraft.firework_star.black": "Black", - "item.minecraft.firework_star.blue": "Blue", - "item.minecraft.firework_star.brown": "Brown", - "item.minecraft.firework_star.custom_color": "Custom", - "item.minecraft.firework_star.cyan": "Cyan", - "item.minecraft.firework_star.fade_to": "Fade to", - "item.minecraft.firework_star.flicker": "Twinkle", - "item.minecraft.firework_star.gray": "Gray", - "item.minecraft.firework_star.green": "Green", - "item.minecraft.firework_star.light_blue": "Light Blue", - "item.minecraft.firework_star.light_gray": "Light Gray", - "item.minecraft.firework_star.lime": "Lime", - "item.minecraft.firework_star.magenta": "Magenta", - "item.minecraft.firework_star.orange": "Orange", - "item.minecraft.firework_star.pink": "Pink", - "item.minecraft.firework_star.purple": "Purple", - "item.minecraft.firework_star.red": "Red", - "item.minecraft.firework_star.shape": "Unknown Shape", - "item.minecraft.firework_star.shape.burst": "Burst", - "item.minecraft.firework_star.shape.creeper": "Creeper-shaped", - "item.minecraft.firework_star.shape.large_ball": "Large Ball", - "item.minecraft.firework_star.shape.small_ball": "Small Ball", - "item.minecraft.firework_star.shape.star": "Star-shaped", - "item.minecraft.firework_star.trail": "Trail", - "item.minecraft.firework_star.white": "White", - "item.minecraft.firework_star.yellow": "Yellow", - "item.minecraft.fishing_rod": "Fishing Rod", - "item.minecraft.flint": "Flint", - "item.minecraft.flint_and_steel": "Flint and Steel", - "item.minecraft.flower_banner_pattern": "Banner Pattern", - "item.minecraft.flower_banner_pattern.desc": "Flower Charge", - "item.minecraft.flower_pot": "Flower Pot", - "item.minecraft.fox_spawn_egg": "Fox Spawn Egg", - "item.minecraft.friend_pottery_shard": "Friend Pottery Shard", - "item.minecraft.friend_pottery_sherd": "Friend Pottery Sherd", - "item.minecraft.frog_spawn_egg": "Frog Spawn Egg", - "item.minecraft.furnace_minecart": "Minecart with Furnace", - "item.minecraft.ghast_spawn_egg": "Ghast Spawn Egg", - "item.minecraft.ghast_tear": "Ghast Tear", - "item.minecraft.glass_bottle": "Glass Bottle", - "item.minecraft.glistering_melon_slice": "Glistering Melon Slice", - "item.minecraft.globe_banner_pattern": "Banner Pattern", - "item.minecraft.globe_banner_pattern.desc": "Globe", - "item.minecraft.glow_berries": "Glow Berries", - "item.minecraft.glow_ink_sac": "Glow Ink Sac", - "item.minecraft.glow_item_frame": "Glow Item Frame", - "item.minecraft.glow_squid_spawn_egg": "Glow Squid Spawn Egg", - "item.minecraft.glowstone_dust": "Glowstone Dust", - "item.minecraft.goat_horn": "Goat Horn", - "item.minecraft.goat_spawn_egg": "Goat Spawn Egg", - "item.minecraft.gold_ingot": "Gold Ingot", - "item.minecraft.gold_nugget": "Gold Nugget", - "item.minecraft.golden_apple": "Golden Apple", - "item.minecraft.golden_axe": "Golden Axe", - "item.minecraft.golden_boots": "Golden Boots", - "item.minecraft.golden_carrot": "Golden Carrot", - "item.minecraft.golden_chestplate": "Golden Chestplate", - "item.minecraft.golden_helmet": "Golden Helmet", - "item.minecraft.golden_hoe": "Golden Hoe", - "item.minecraft.golden_horse_armor": "Golden Horse Armor", - "item.minecraft.golden_leggings": "Golden Leggings", - "item.minecraft.golden_pickaxe": "Golden Pickaxe", - "item.minecraft.golden_shovel": "Golden Shovel", - "item.minecraft.golden_sword": "Golden Sword", - "item.minecraft.gray_dye": "Gray Dye", - "item.minecraft.green_dye": "Green Dye", - "item.minecraft.guardian_spawn_egg": "Guardian Spawn Egg", - "item.minecraft.gunpowder": "Gunpowder", - "item.minecraft.heart_of_the_sea": "Heart of the Sea", - "item.minecraft.heart_pottery_shard": "Heart Pottery Shard", - "item.minecraft.heart_pottery_sherd": "Heart Pottery Sherd", - "item.minecraft.heartbreak_pottery_shard": "Heartbreak Pottery Shard", - "item.minecraft.heartbreak_pottery_sherd": "Heartbreak Pottery Sherd", - "item.minecraft.hoglin_spawn_egg": "Hoglin Spawn Egg", - "item.minecraft.honey_bottle": "Honey Bottle", - "item.minecraft.honeycomb": "Honeycomb", - "item.minecraft.hopper_minecart": "Minecart with Hopper", - "item.minecraft.horse_spawn_egg": "Horse Spawn Egg", - "item.minecraft.host_armor_trim_smithing_template": "Smithing Template", - "item.minecraft.howl_pottery_shard": "Howl Pottery Shard", - "item.minecraft.howl_pottery_sherd": "Howl Pottery Sherd", - "item.minecraft.husk_spawn_egg": "Husk Spawn Egg", - "item.minecraft.ink_sac": "Ink Sac", - "item.minecraft.iron_axe": "Iron Axe", - "item.minecraft.iron_boots": "Iron Boots", - "item.minecraft.iron_chestplate": "Iron Chestplate", - "item.minecraft.iron_golem_spawn_egg": "Iron Golem Spawn Egg", - "item.minecraft.iron_helmet": "Iron Helmet", - "item.minecraft.iron_hoe": "Iron Hoe", - "item.minecraft.iron_horse_armor": "Iron Horse Armor", - "item.minecraft.iron_ingot": "Iron Ingot", - "item.minecraft.iron_leggings": "Iron Leggings", - "item.minecraft.iron_nugget": "Iron Nugget", - "item.minecraft.iron_pickaxe": "Iron Pickaxe", - "item.minecraft.iron_shovel": "Iron Shovel", - "item.minecraft.iron_sword": "Iron Sword", - "item.minecraft.item_frame": "Item Frame", - "item.minecraft.jungle_boat": "Jungle Boat", - "item.minecraft.jungle_chest_boat": "Jungle Boat with Chest", - "item.minecraft.knowledge_book": "Knowledge Book", - "item.minecraft.lapis_lazuli": "Lapis Lazuli", - "item.minecraft.lava_bucket": "Lava Bucket", - "item.minecraft.lead": "Lead", - "item.minecraft.leather": "Leather", - "item.minecraft.leather_boots": "Leather Boots", - "item.minecraft.leather_chestplate": "Leather Tunic", - "item.minecraft.leather_helmet": "Leather Cap", - "item.minecraft.leather_horse_armor": "Leather Horse Armor", - "item.minecraft.leather_leggings": "Leather Pants", - "item.minecraft.light_blue_dye": "Light Blue Dye", - "item.minecraft.light_gray_dye": "Light Gray Dye", - "item.minecraft.lime_dye": "Lime Dye", - "item.minecraft.lingering_potion": "Lingering Potion", - "item.minecraft.lingering_potion.effect.awkward": "Awkward Lingering Potion", - "item.minecraft.lingering_potion.effect.empty": "Lingering Uncraftable Potion", - "item.minecraft.lingering_potion.effect.fire_resistance": "Lingering Potion of Fire Resistance", - "item.minecraft.lingering_potion.effect.harming": "Lingering Potion of Harming", - "item.minecraft.lingering_potion.effect.healing": "Lingering Potion of Healing", - "item.minecraft.lingering_potion.effect.invisibility": "Lingering Potion of Invisibility", - "item.minecraft.lingering_potion.effect.leaping": "Lingering Potion of Leaping", - "item.minecraft.lingering_potion.effect.levitation": "Lingering Potion of Levitation", - "item.minecraft.lingering_potion.effect.luck": "Lingering Potion of Luck", - "item.minecraft.lingering_potion.effect.mundane": "Mundane Lingering Potion", - "item.minecraft.lingering_potion.effect.night_vision": "Lingering Potion of Night Vision", - "item.minecraft.lingering_potion.effect.poison": "Lingering Potion of Poison", - "item.minecraft.lingering_potion.effect.regeneration": "Lingering Potion of Regeneration", - "item.minecraft.lingering_potion.effect.slow_falling": "Lingering Potion of Slow Falling", - "item.minecraft.lingering_potion.effect.slowness": "Lingering Potion of Slowness", - "item.minecraft.lingering_potion.effect.strength": "Lingering Potion of Strength", - "item.minecraft.lingering_potion.effect.swiftness": "Lingering Potion of Swiftness", - "item.minecraft.lingering_potion.effect.thick": "Thick Lingering Potion", - "item.minecraft.lingering_potion.effect.turtle_master": "Lingering Potion of the Turtle Master", - "item.minecraft.lingering_potion.effect.water": "Lingering Water Bottle", - "item.minecraft.lingering_potion.effect.water_breathing": "Lingering Potion of Water Breathing", - "item.minecraft.lingering_potion.effect.weakness": "Lingering Potion of Weakness", - "item.minecraft.llama_spawn_egg": "Llama Spawn Egg", - "item.minecraft.lodestone_compass": "Lodestone Compass", - "item.minecraft.magenta_dye": "Magenta Dye", - "item.minecraft.magma_cream": "Magma Cream", - "item.minecraft.magma_cube_spawn_egg": "Magma Cube Spawn Egg", - "item.minecraft.mangrove_boat": "Mangrove Boat", - "item.minecraft.mangrove_chest_boat": "Mangrove Boat with Chest", - "item.minecraft.map": "Empty Map", - "item.minecraft.melon_seeds": "Melon Seeds", - "item.minecraft.melon_slice": "Melon Slice", - "item.minecraft.milk_bucket": "Milk Bucket", - "item.minecraft.minecart": "Minecart", - "item.minecraft.miner_pottery_shard": "Miner Pottery Shard", - "item.minecraft.miner_pottery_sherd": "Miner Pottery Sherd", - "item.minecraft.mojang_banner_pattern": "Banner Pattern", - "item.minecraft.mojang_banner_pattern.desc": "Thing", - "item.minecraft.mooshroom_spawn_egg": "Mooshroom Spawn Egg", - "item.minecraft.mourner_pottery_shard": "Mourner Pottery Shard", - "item.minecraft.mourner_pottery_sherd": "Mourner Pottery Sherd", - "item.minecraft.mule_spawn_egg": "Mule Spawn Egg", - "item.minecraft.mushroom_stew": "Mushroom Stew", - "item.minecraft.music_disc_5": "Music Disc", - "item.minecraft.music_disc_5.desc": "Samuel Åberg - 5", - "item.minecraft.music_disc_11": "Music Disc", - "item.minecraft.music_disc_11.desc": "C418 - 11", - "item.minecraft.music_disc_13": "Music Disc", - "item.minecraft.music_disc_13.desc": "C418 - 13", - "item.minecraft.music_disc_blocks": "Music Disc", - "item.minecraft.music_disc_blocks.desc": "C418 - blocks", - "item.minecraft.music_disc_cat": "Music Disc", - "item.minecraft.music_disc_cat.desc": "C418 - cat", - "item.minecraft.music_disc_chirp": "Music Disc", - "item.minecraft.music_disc_chirp.desc": "C418 - chirp", - "item.minecraft.music_disc_far": "Music Disc", - "item.minecraft.music_disc_far.desc": "C418 - far", - "item.minecraft.music_disc_mall": "Music Disc", - "item.minecraft.music_disc_mall.desc": "C418 - mall", - "item.minecraft.music_disc_mellohi": "Music Disc", - "item.minecraft.music_disc_mellohi.desc": "C418 - mellohi", - "item.minecraft.music_disc_otherside": "Music Disc", - "item.minecraft.music_disc_otherside.desc": "Lena Raine - otherside", - "item.minecraft.music_disc_pigstep": "Music Disc", - "item.minecraft.music_disc_pigstep.desc": "Lena Raine - Pigstep", - "item.minecraft.music_disc_relic": "Music Disc", - "item.minecraft.music_disc_relic.desc": "Aaron Cherof - Relic", - "item.minecraft.music_disc_stal": "Music Disc", - "item.minecraft.music_disc_stal.desc": "C418 - stal", - "item.minecraft.music_disc_strad": "Music Disc", - "item.minecraft.music_disc_strad.desc": "C418 - strad", - "item.minecraft.music_disc_wait": "Music Disc", - "item.minecraft.music_disc_wait.desc": "C418 - wait", - "item.minecraft.music_disc_ward": "Music Disc", - "item.minecraft.music_disc_ward.desc": "C418 - ward", - "item.minecraft.mutton": "Raw Mutton", - "item.minecraft.name_tag": "Name Tag", - "item.minecraft.nautilus_shell": "Nautilus Shell", - "item.minecraft.nether_brick": "Nether Brick", - "item.minecraft.nether_star": "Nether Star", - "item.minecraft.nether_wart": "Nether Wart", - "item.minecraft.netherite_axe": "Netherite Axe", - "item.minecraft.netherite_boots": "Netherite Boots", - "item.minecraft.netherite_chestplate": "Netherite Chestplate", - "item.minecraft.netherite_helmet": "Netherite Helmet", - "item.minecraft.netherite_hoe": "Netherite Hoe", - "item.minecraft.netherite_ingot": "Netherite Ingot", - "item.minecraft.netherite_leggings": "Netherite Leggings", - "item.minecraft.netherite_pickaxe": "Netherite Pickaxe", - "item.minecraft.netherite_scrap": "Netherite Scrap", - "item.minecraft.netherite_shovel": "Netherite Shovel", - "item.minecraft.netherite_sword": "Netherite Sword", - "item.minecraft.netherite_upgrade_smithing_template": "Smithing Template", - "item.minecraft.oak_boat": "Oak Boat", - "item.minecraft.oak_chest_boat": "Oak Boat with Chest", - "item.minecraft.ocelot_spawn_egg": "Ocelot Spawn Egg", - "item.minecraft.orange_dye": "Orange Dye", - "item.minecraft.painting": "Painting", - "item.minecraft.panda_spawn_egg": "Panda Spawn Egg", - "item.minecraft.paper": "Paper", - "item.minecraft.parrot_spawn_egg": "Parrot Spawn Egg", - "item.minecraft.phantom_membrane": "Phantom Membrane", - "item.minecraft.phantom_spawn_egg": "Phantom Spawn Egg", - "item.minecraft.pig_spawn_egg": "Pig Spawn Egg", - "item.minecraft.piglin_banner_pattern": "Banner Pattern", - "item.minecraft.piglin_banner_pattern.desc": "Snout", - "item.minecraft.piglin_brute_spawn_egg": "Piglin Brute Spawn Egg", - "item.minecraft.piglin_spawn_egg": "Piglin Spawn Egg", - "item.minecraft.pillager_spawn_egg": "Pillager Spawn Egg", - "item.minecraft.pink_dye": "Pink Dye", - "item.minecraft.pitcher_plant": "Pitcher Plant", - "item.minecraft.pitcher_pod": "Pitcher Pod", - "item.minecraft.plenty_pottery_shard": "Plenty Pottery Shard", - "item.minecraft.plenty_pottery_sherd": "Plenty Pottery Sherd", - "item.minecraft.poisonous_potato": "Poisonous Potato", - "item.minecraft.polar_bear_spawn_egg": "Polar Bear Spawn Egg", - "item.minecraft.popped_chorus_fruit": "Popped Chorus Fruit", - "item.minecraft.porkchop": "Raw Porkchop", - "item.minecraft.potato": "Potato", - "item.minecraft.potion": "Potion", - "item.minecraft.potion.effect.awkward": "Awkward Potion", - "item.minecraft.potion.effect.empty": "Uncraftable Potion", - "item.minecraft.potion.effect.fire_resistance": "Potion of Fire Resistance", - "item.minecraft.potion.effect.harming": "Potion of Harming", - "item.minecraft.potion.effect.healing": "Potion of Healing", - "item.minecraft.potion.effect.invisibility": "Potion of Invisibility", - "item.minecraft.potion.effect.leaping": "Potion of Leaping", - "item.minecraft.potion.effect.levitation": "Potion of Levitation", - "item.minecraft.potion.effect.luck": "Potion of Luck", - "item.minecraft.potion.effect.mundane": "Mundane Potion", - "item.minecraft.potion.effect.night_vision": "Potion of Night Vision", - "item.minecraft.potion.effect.poison": "Potion of Poison", - "item.minecraft.potion.effect.regeneration": "Potion of Regeneration", - "item.minecraft.potion.effect.slow_falling": "Potion of Slow Falling", - "item.minecraft.potion.effect.slowness": "Potion of Slowness", - "item.minecraft.potion.effect.strength": "Potion of Strength", - "item.minecraft.potion.effect.swiftness": "Potion of Swiftness", - "item.minecraft.potion.effect.thick": "Thick Potion", - "item.minecraft.potion.effect.turtle_master": "Potion of the Turtle Master", - "item.minecraft.potion.effect.water": "Water Bottle", - "item.minecraft.potion.effect.water_breathing": "Potion of Water Breathing", - "item.minecraft.potion.effect.weakness": "Potion of Weakness", - "item.minecraft.pottery_shard_archer": "Archer Pottery Shard", - "item.minecraft.pottery_shard_arms_up": "Arms Up Pottery Shard", - "item.minecraft.pottery_shard_prize": "Prize Pottery Shard", - "item.minecraft.pottery_shard_skull": "Skull Pottery Shard", - "item.minecraft.powder_snow_bucket": "Powder Snow Bucket", - "item.minecraft.prismarine_crystals": "Prismarine Crystals", - "item.minecraft.prismarine_shard": "Prismarine Shard", - "item.minecraft.prize_pottery_shard": "Prize Pottery Shard", - "item.minecraft.prize_pottery_sherd": "Prize Pottery Sherd", - "item.minecraft.pufferfish": "Pufferfish", - "item.minecraft.pufferfish_bucket": "Bucket of Pufferfish", - "item.minecraft.pufferfish_spawn_egg": "Pufferfish Spawn Egg", - "item.minecraft.pumpkin_pie": "Pumpkin Pie", - "item.minecraft.pumpkin_seeds": "Pumpkin Seeds", - "item.minecraft.purple_dye": "Purple Dye", - "item.minecraft.quartz": "Nether Quartz", - "item.minecraft.rabbit": "Raw Rabbit", - "item.minecraft.rabbit_foot": "Rabbit's Foot", - "item.minecraft.rabbit_hide": "Rabbit Hide", - "item.minecraft.rabbit_spawn_egg": "Rabbit Spawn Egg", - "item.minecraft.rabbit_stew": "Rabbit Stew", - "item.minecraft.raiser_armor_trim_smithing_template": "Smithing Template", - "item.minecraft.ravager_spawn_egg": "Ravager Spawn Egg", - "item.minecraft.raw_copper": "Raw Copper", - "item.minecraft.raw_gold": "Raw Gold", - "item.minecraft.raw_iron": "Raw Iron", - "item.minecraft.recovery_compass": "Recovery Compass", - "item.minecraft.red_dye": "Red Dye", - "item.minecraft.redstone": "Redstone Dust", - "item.minecraft.rib_armor_trim_smithing_template": "Smithing Template", - "item.minecraft.rotten_flesh": "Rotten Flesh", - "item.minecraft.saddle": "Saddle", - "item.minecraft.salmon": "Raw Salmon", - "item.minecraft.salmon_bucket": "Bucket of Salmon", - "item.minecraft.salmon_spawn_egg": "Salmon Spawn Egg", - "item.minecraft.scute": "Scute", - "item.minecraft.sentry_armor_trim_smithing_template": "Smithing Template", - "item.minecraft.shaper_armor_trim_smithing_template": "Smithing Template", - "item.minecraft.sheaf_pottery_shard": "Sheaf Pottery Shard", - "item.minecraft.sheaf_pottery_sherd": "Sheaf Pottery Sherd", - "item.minecraft.shears": "Shears", - "item.minecraft.sheep_spawn_egg": "Sheep Spawn Egg", - "item.minecraft.shelter_pottery_shard": "Shelter Pottery Shard", - "item.minecraft.shelter_pottery_sherd": "Shelter Pottery Sherd", - "item.minecraft.shield": "Shield", - "item.minecraft.shield.black": "Black Shield", - "item.minecraft.shield.blue": "Blue Shield", - "item.minecraft.shield.brown": "Brown Shield", - "item.minecraft.shield.cyan": "Cyan Shield", - "item.minecraft.shield.gray": "Gray Shield", - "item.minecraft.shield.green": "Green Shield", - "item.minecraft.shield.light_blue": "Light Blue Shield", - "item.minecraft.shield.light_gray": "Light Gray Shield", - "item.minecraft.shield.lime": "Lime Shield", - "item.minecraft.shield.magenta": "Magenta Shield", - "item.minecraft.shield.orange": "Orange Shield", - "item.minecraft.shield.pink": "Pink Shield", - "item.minecraft.shield.purple": "Purple Shield", - "item.minecraft.shield.red": "Red Shield", - "item.minecraft.shield.white": "White Shield", - "item.minecraft.shield.yellow": "Yellow Shield", - "item.minecraft.shulker_shell": "Shulker Shell", - "item.minecraft.shulker_spawn_egg": "Shulker Spawn Egg", - "item.minecraft.sign": "Sign", - "item.minecraft.silence_armor_trim_smithing_template": "Smithing Template", - "item.minecraft.silverfish_spawn_egg": "Silverfish Spawn Egg", - "item.minecraft.skeleton_horse_spawn_egg": "Skeleton Horse Spawn Egg", - "item.minecraft.skeleton_spawn_egg": "Skeleton Spawn Egg", - "item.minecraft.skull_banner_pattern": "Banner Pattern", - "item.minecraft.skull_banner_pattern.desc": "Skull Charge", - "item.minecraft.skull_pottery_shard": "Skull Pottery Shard", - "item.minecraft.skull_pottery_sherd": "Skull Pottery Sherd", - "item.minecraft.slime_ball": "Slimeball", - "item.minecraft.slime_spawn_egg": "Slime Spawn Egg", - "item.minecraft.smithing_template": "Smithing Template", - "item.minecraft.smithing_template.applies_to": "Applies to:", - "item.minecraft.smithing_template.armor_trim.additions_slot_description": "Add ingot or crystal", - "item.minecraft.smithing_template.armor_trim.applies_to": "Armor", - "item.minecraft.smithing_template.armor_trim.base_slot_description": "Add a piece of armor", - "item.minecraft.smithing_template.armor_trim.ingredients": "Ingots & Crystals", - "item.minecraft.smithing_template.ingredients": "Ingredients:", - "item.minecraft.smithing_template.netherite_upgrade.additions_slot_description": "Add Netherite Ingot", - "item.minecraft.smithing_template.netherite_upgrade.applies_to": "Diamond Equipment", - "item.minecraft.smithing_template.netherite_upgrade.base_slot_description": "Add diamond armor, weapon, or tool", - "item.minecraft.smithing_template.netherite_upgrade.ingredients": "Netherite Ingot", - "item.minecraft.smithing_template.upgrade": "Upgrade: ", - "item.minecraft.sniffer_spawn_egg": "Sniffer Spawn Egg", - "item.minecraft.snort_pottery_shard": "Snort Pottery Shard", - "item.minecraft.snort_pottery_sherd": "Snort Pottery Sherd", - "item.minecraft.snout_armor_trim_smithing_template": "Smithing Template", - "item.minecraft.snow_golem_spawn_egg": "Snow Golem Spawn Egg", - "item.minecraft.snowball": "Snowball", - "item.minecraft.spectral_arrow": "Spectral Arrow", - "item.minecraft.spider_eye": "Spider Eye", - "item.minecraft.spider_spawn_egg": "Spider Spawn Egg", - "item.minecraft.spire_armor_trim_smithing_template": "Smithing Template", - "item.minecraft.splash_potion": "Splash Potion", - "item.minecraft.splash_potion.effect.awkward": "Awkward Splash Potion", - "item.minecraft.splash_potion.effect.empty": "Splash Uncraftable Potion", - "item.minecraft.splash_potion.effect.fire_resistance": "Splash Potion of Fire Resistance", - "item.minecraft.splash_potion.effect.harming": "Splash Potion of Harming", - "item.minecraft.splash_potion.effect.healing": "Splash Potion of Healing", - "item.minecraft.splash_potion.effect.invisibility": "Splash Potion of Invisibility", - "item.minecraft.splash_potion.effect.leaping": "Splash Potion of Leaping", - "item.minecraft.splash_potion.effect.levitation": "Splash Potion of Levitation", - "item.minecraft.splash_potion.effect.luck": "Splash Potion of Luck", - "item.minecraft.splash_potion.effect.mundane": "Mundane Splash Potion", - "item.minecraft.splash_potion.effect.night_vision": "Splash Potion of Night Vision", - "item.minecraft.splash_potion.effect.poison": "Splash Potion of Poison", - "item.minecraft.splash_potion.effect.regeneration": "Splash Potion of Regeneration", - "item.minecraft.splash_potion.effect.slow_falling": "Splash Potion of Slow Falling", - "item.minecraft.splash_potion.effect.slowness": "Splash Potion of Slowness", - "item.minecraft.splash_potion.effect.strength": "Splash Potion of Strength", - "item.minecraft.splash_potion.effect.swiftness": "Splash Potion of Swiftness", - "item.minecraft.splash_potion.effect.thick": "Thick Splash Potion", - "item.minecraft.splash_potion.effect.turtle_master": "Splash Potion of the Turtle Master", - "item.minecraft.splash_potion.effect.water": "Splash Water Bottle", - "item.minecraft.splash_potion.effect.water_breathing": "Splash Potion of Water Breathing", - "item.minecraft.splash_potion.effect.weakness": "Splash Potion of Weakness", - "item.minecraft.spruce_boat": "Spruce Boat", - "item.minecraft.spruce_chest_boat": "Spruce Boat with Chest", - "item.minecraft.spyglass": "Spyglass", - "item.minecraft.squid_spawn_egg": "Squid Spawn Egg", - "item.minecraft.stick": "Stick", - "item.minecraft.stone_axe": "Stone Axe", - "item.minecraft.stone_hoe": "Stone Hoe", - "item.minecraft.stone_pickaxe": "Stone Pickaxe", - "item.minecraft.stone_shovel": "Stone Shovel", - "item.minecraft.stone_sword": "Stone Sword", - "item.minecraft.stray_spawn_egg": "Stray Spawn Egg", - "item.minecraft.strider_spawn_egg": "Strider Spawn Egg", - "item.minecraft.string": "String", - "item.minecraft.sugar": "Sugar", - "item.minecraft.suspicious_stew": "Suspicious Stew", - "item.minecraft.sweet_berries": "Sweet Berries", - "item.minecraft.tadpole_bucket": "Bucket of Tadpole", - "item.minecraft.tadpole_spawn_egg": "Tadpole Spawn Egg", - "item.minecraft.tide_armor_trim_smithing_template": "Smithing Template", - "item.minecraft.tipped_arrow": "Tipped Arrow", - "item.minecraft.tipped_arrow.effect.awkward": "Tipped Arrow", - "item.minecraft.tipped_arrow.effect.empty": "Uncraftable Tipped Arrow", - "item.minecraft.tipped_arrow.effect.fire_resistance": "Arrow of Fire Resistance", - "item.minecraft.tipped_arrow.effect.harming": "Arrow of Harming", - "item.minecraft.tipped_arrow.effect.healing": "Arrow of Healing", - "item.minecraft.tipped_arrow.effect.invisibility": "Arrow of Invisibility", - "item.minecraft.tipped_arrow.effect.leaping": "Arrow of Leaping", - "item.minecraft.tipped_arrow.effect.levitation": "Arrow of Levitation", - "item.minecraft.tipped_arrow.effect.luck": "Arrow of Luck", - "item.minecraft.tipped_arrow.effect.mundane": "Tipped Arrow", - "item.minecraft.tipped_arrow.effect.night_vision": "Arrow of Night Vision", - "item.minecraft.tipped_arrow.effect.poison": "Arrow of Poison", - "item.minecraft.tipped_arrow.effect.regeneration": "Arrow of Regeneration", - "item.minecraft.tipped_arrow.effect.slow_falling": "Arrow of Slow Falling", - "item.minecraft.tipped_arrow.effect.slowness": "Arrow of Slowness", - "item.minecraft.tipped_arrow.effect.strength": "Arrow of Strength", - "item.minecraft.tipped_arrow.effect.swiftness": "Arrow of Swiftness", - "item.minecraft.tipped_arrow.effect.thick": "Tipped Arrow", - "item.minecraft.tipped_arrow.effect.turtle_master": "Arrow of the Turtle Master", - "item.minecraft.tipped_arrow.effect.water": "Arrow of Splashing", - "item.minecraft.tipped_arrow.effect.water_breathing": "Arrow of Water Breathing", - "item.minecraft.tipped_arrow.effect.weakness": "Arrow of Weakness", - "item.minecraft.tnt_minecart": "Minecart with TNT", - "item.minecraft.torchflower_seeds": "Torchflower Seeds", - "item.minecraft.totem_of_undying": "Totem of Undying", - "item.minecraft.trader_llama_spawn_egg": "Trader Llama Spawn Egg", - "item.minecraft.trial_key": "Trial Key", - "item.minecraft.trident": "Trident", - "item.minecraft.tropical_fish": "Tropical Fish", - "item.minecraft.tropical_fish_bucket": "Bucket of Tropical Fish", - "item.minecraft.tropical_fish_spawn_egg": "Tropical Fish Spawn Egg", - "item.minecraft.turtle_helmet": "Turtle Shell", - "item.minecraft.turtle_spawn_egg": "Turtle Spawn Egg", - "item.minecraft.vex_armor_trim_smithing_template": "Smithing Template", - "item.minecraft.vex_spawn_egg": "Vex Spawn Egg", - "item.minecraft.villager_spawn_egg": "Villager Spawn Egg", - "item.minecraft.vindicator_spawn_egg": "Vindicator Spawn Egg", - "item.minecraft.wandering_trader_spawn_egg": "Wandering Trader Spawn Egg", - "item.minecraft.ward_armor_trim_smithing_template": "Smithing Template", - "item.minecraft.warden_spawn_egg": "Warden Spawn Egg", - "item.minecraft.warped_fungus_on_a_stick": "Warped Fungus on a Stick", - "item.minecraft.water_bucket": "Water Bucket", - "item.minecraft.wayfinder_armor_trim_smithing_template": "Smithing Template", - "item.minecraft.wheat": "Wheat", - "item.minecraft.wheat_seeds": "Wheat Seeds", - "item.minecraft.white_dye": "White Dye", - "item.minecraft.wild_armor_trim_smithing_template": "Smithing Template", - "item.minecraft.witch_spawn_egg": "Witch Spawn Egg", - "item.minecraft.wither_skeleton_spawn_egg": "Wither Skeleton Spawn Egg", - "item.minecraft.wither_spawn_egg": "Wither Spawn Egg", - "item.minecraft.wolf_spawn_egg": "Wolf Spawn Egg", - "item.minecraft.wooden_axe": "Wooden Axe", - "item.minecraft.wooden_hoe": "Wooden Hoe", - "item.minecraft.wooden_pickaxe": "Wooden Pickaxe", - "item.minecraft.wooden_shovel": "Wooden Shovel", - "item.minecraft.wooden_sword": "Wooden Sword", - "item.minecraft.writable_book": "Book and Quill", - "item.minecraft.written_book": "Written Book", - "item.minecraft.yellow_dye": "Yellow Dye", - "item.minecraft.zoglin_spawn_egg": "Zoglin Spawn Egg", - "item.minecraft.zombie_horse_spawn_egg": "Zombie Horse Spawn Egg", - "item.minecraft.zombie_spawn_egg": "Zombie Spawn Egg", - "item.minecraft.zombie_villager_spawn_egg": "Zombie Villager Spawn Egg", - "item.minecraft.zombified_piglin_spawn_egg": "Zombified Piglin Spawn Egg", - "item.modifiers.chest": "When on Body:", - "item.modifiers.feet": "When on Feet:", - "item.modifiers.head": "When on Head:", - "item.modifiers.legs": "When on Legs:", - "item.modifiers.mainhand": "When in Main Hand:", - "item.modifiers.offhand": "When in Off Hand:", - "item.nbt_tags": "NBT: %s tag(s)", - "item.unbreakable": "Unbreakable", - "itemGroup.buildingBlocks": "Building Blocks", - "itemGroup.coloredBlocks": "Colored Blocks", - "itemGroup.combat": "Combat", - "itemGroup.consumables": "Consumables", - "itemGroup.crafting": "Crafting", - "itemGroup.foodAndDrink": "Food & Drinks", - "itemGroup.functional": "Functional Blocks", - "itemGroup.hotbar": "Saved Hotbars", - "itemGroup.ingredients": "Ingredients", - "itemGroup.inventory": "Survival Inventory", - "itemGroup.natural": "Natural Blocks", - "itemGroup.op": "Operator Utilities", - "itemGroup.redstone": "Redstone Blocks", - "itemGroup.search": "Search Items", - "itemGroup.spawnEggs": "Spawn Eggs", - "itemGroup.tools": "Tools & Utilities", - "jigsaw_block.final_state": "Turns into:", - "jigsaw_block.generate": "Generate", - "jigsaw_block.joint_label": "Joint Type:", - "jigsaw_block.joint.aligned": "Aligned", - "jigsaw_block.joint.rollable": "Rollable", - "jigsaw_block.keep_jigsaws": "Keep Jigsaws", - "jigsaw_block.levels": "Levels: %s", - "jigsaw_block.name": "Name:", - "jigsaw_block.placement_priority": "Placement Priority:", - "jigsaw_block.placement_priority.tooltip": "When this Jigsaw block connects to a piece, this is the order in which that piece is processed for connections in the wider structure.\n\nPieces will be processed in descending priority with insertion order breaking ties.", - "jigsaw_block.pool": "Target Pool:", - "jigsaw_block.selection_priority": "Selection Priority:", - "jigsaw_block.selection_priority.tooltip": "When the parent piece is being processed for connections, this is the order in which this Jigsaw block attempts to connect to its target piece.\n\nJigsaws will be processed in descending priority with random ordering breaking ties.", - "jigsaw_block.target": "Target Name:", - "key.advancements": "Advancements", - "key.attack": "Attack/Destroy", - "key.back": "Walk Backwards", - "key.categories.creative": "Creative Mode", - "key.categories.gameplay": "Gameplay", - "key.categories.inventory": "Inventory", - "key.categories.misc": "Miscellaneous", - "key.categories.movement": "Movement", - "key.categories.multiplayer": "Multiplayer", - "key.categories.ui": "Game Interface", - "key.chat": "Open Chat", - "key.command": "Open Command", - "key.drop": "Drop Selected Item", - "key.forward": "Walk Forwards", - "key.fullscreen": "Toggle Fullscreen", - "key.hotbar.1": "Hotbar Slot 1", - "key.hotbar.2": "Hotbar Slot 2", - "key.hotbar.3": "Hotbar Slot 3", - "key.hotbar.4": "Hotbar Slot 4", - "key.hotbar.5": "Hotbar Slot 5", - "key.hotbar.6": "Hotbar Slot 6", - "key.hotbar.7": "Hotbar Slot 7", - "key.hotbar.8": "Hotbar Slot 8", - "key.hotbar.9": "Hotbar Slot 9", - "key.inventory": "Open/Close Inventory", - "key.jump": "Jump", - "key.keyboard.apostrophe": "'", - "key.keyboard.backslash": "\\", - "key.keyboard.backspace": "Backspace", - "key.keyboard.caps.lock": "Caps Lock", - "key.keyboard.comma": ",", - "key.keyboard.delete": "Delete", - "key.keyboard.down": "Down Arrow", - "key.keyboard.end": "End", - "key.keyboard.enter": "Enter", - "key.keyboard.equal": "=", - "key.keyboard.escape": "Escape", - "key.keyboard.f1": "F1", - "key.keyboard.f2": "F2", - "key.keyboard.f3": "F3", - "key.keyboard.f4": "F4", - "key.keyboard.f5": "F5", - "key.keyboard.f6": "F6", - "key.keyboard.f7": "F7", - "key.keyboard.f8": "F8", - "key.keyboard.f9": "F9", - "key.keyboard.f10": "F10", - "key.keyboard.f11": "F11", - "key.keyboard.f12": "F12", - "key.keyboard.f13": "F13", - "key.keyboard.f14": "F14", - "key.keyboard.f15": "F15", - "key.keyboard.f16": "F16", - "key.keyboard.f17": "F17", - "key.keyboard.f18": "F18", - "key.keyboard.f19": "F19", - "key.keyboard.f20": "F20", - "key.keyboard.f21": "F21", - "key.keyboard.f22": "F22", - "key.keyboard.f23": "F23", - "key.keyboard.f24": "F24", - "key.keyboard.f25": "F25", - "key.keyboard.grave.accent": "`", - "key.keyboard.home": "Home", - "key.keyboard.insert": "Insert", - "key.keyboard.keypad.0": "Keypad 0", - "key.keyboard.keypad.1": "Keypad 1", - "key.keyboard.keypad.2": "Keypad 2", - "key.keyboard.keypad.3": "Keypad 3", - "key.keyboard.keypad.4": "Keypad 4", - "key.keyboard.keypad.5": "Keypad 5", - "key.keyboard.keypad.6": "Keypad 6", - "key.keyboard.keypad.7": "Keypad 7", - "key.keyboard.keypad.8": "Keypad 8", - "key.keyboard.keypad.9": "Keypad 9", - "key.keyboard.keypad.add": "Keypad +", - "key.keyboard.keypad.decimal": "Keypad Decimal", - "key.keyboard.keypad.divide": "Keypad /", - "key.keyboard.keypad.enter": "Keypad Enter", - "key.keyboard.keypad.equal": "Keypad =", - "key.keyboard.keypad.multiply": "Keypad *", - "key.keyboard.keypad.subtract": "Keypad -", - "key.keyboard.left": "Left Arrow", - "key.keyboard.left.alt": "Left Alt", - "key.keyboard.left.bracket": "[", - "key.keyboard.left.control": "Left Control", - "key.keyboard.left.shift": "Left Shift", - "key.keyboard.left.win": "Left Win", - "key.keyboard.menu": "Menu", - "key.keyboard.minus": "-", - "key.keyboard.num.lock": "Num Lock", - "key.keyboard.page.down": "Page Down", - "key.keyboard.page.up": "Page Up", - "key.keyboard.pause": "Pause", - "key.keyboard.period": ".", - "key.keyboard.print.screen": "Print Screen", - "key.keyboard.right": "Right Arrow", - "key.keyboard.right.alt": "Right Alt", - "key.keyboard.right.bracket": "]", - "key.keyboard.right.control": "Right Control", - "key.keyboard.right.shift": "Right Shift", - "key.keyboard.right.win": "Right Win", - "key.keyboard.scroll.lock": "Scroll Lock", - "key.keyboard.semicolon": ";", - "key.keyboard.slash": "/", - "key.keyboard.space": "Space", - "key.keyboard.tab": "Tab", - "key.keyboard.unknown": "Not Bound", - "key.keyboard.up": "Up Arrow", - "key.keyboard.world.1": "World 1", - "key.keyboard.world.2": "World 2", - "key.left": "Strafe Left", - "key.loadToolbarActivator": "Load Hotbar Activator", - "key.mouse": "Button %1$s", - "key.mouse.left": "Left Button", - "key.mouse.middle": "Middle Button", - "key.mouse.right": "Right Button", - "key.pickItem": "Pick Block", - "key.playerlist": "List Players", - "key.right": "Strafe Right", - "key.saveToolbarActivator": "Save Hotbar Activator", - "key.screenshot": "Take Screenshot", - "key.smoothCamera": "Toggle Cinematic Camera", - "key.sneak": "Sneak", - "key.socialInteractions": "Social Interactions Screen", - "key.spectatorOutlines": "Highlight Players (Spectators)", - "key.sprint": "Sprint", - "key.swapOffhand": "Swap Item With Offhand", - "key.togglePerspective": "Toggle Perspective", - "key.use": "Use Item/Place Block", - "language.code": "en_us", - "language.name": "English", - "language.region": "United States", - "lanServer.otherPlayers": "Settings for Other Players", - "lanServer.port": "Port Number", - "lanServer.port.invalid": "Not a valid port.\nLeave the edit box empty or enter a number between 1024 and 65535.", - "lanServer.port.invalid.new": "Not a valid port.\nLeave the edit box empty or enter a number between %s and %s.", - "lanServer.port.unavailable": "Port not available.\nLeave the edit box empty or enter a different number between 1024 and 65535.", - "lanServer.port.unavailable.new": "Port not available.\nLeave the edit box empty or enter a different number between %s and %s.", - "lanServer.scanning": "Scanning for games on your local network", - "lanServer.start": "Start LAN World", - "lanServer.title": "LAN World", - "lectern.take_book": "Take Book", - "loading.progress": "%s%%", - "mco.account.privacy.info": "Read more about Mojang and privacy laws", - "mco.account.privacy.info.button": "Read more about GDPR", - "mco.account.privacy.information": "Mojang implements certain procedures to help protect children and their privacy including complying with the Children’s Online Privacy Protection Act (COPPA) and General Data Protection Regulation (GDPR).\n\nYou may need to obtain parental consent before accessing your Realms account.", - "mco.account.privacyinfo": "Mojang implements certain procedures to help protect children and their privacy including complying with the Children’s Online Privacy Protection Act (COPPA) and General Data Protection Regulation (GDPR).\n\nYou may need to obtain parental consent before accessing your Realms account.\n\nIf you have an older Minecraft account (you log in with your username), you need to migrate the account to a Mojang account in order to access Realms.", - "mco.account.update": "Update account", - "mco.activity.noactivity": "No activity for the past %s day(s)", - "mco.activity.title": "Player activity", - "mco.backup.button.download": "Download Latest", - "mco.backup.button.reset": "Reset World", - "mco.backup.button.restore": "Restore", - "mco.backup.button.upload": "Upload World", - "mco.backup.changes.tooltip": "Changes", - "mco.backup.entry": "Backup (%s)", - "mco.backup.entry.description": "Description", - "mco.backup.entry.enabledPack": "Enabled Pack(s)", - "mco.backup.entry.gameDifficulty": "Game Difficulty", - "mco.backup.entry.gameMode": "Game Mode", - "mco.backup.entry.gameServerVersion": "Game Server Version", - "mco.backup.entry.name": "Name", - "mco.backup.entry.seed": "Seed", - "mco.backup.entry.templateName": "Template Name", - "mco.backup.entry.undefined": "Undefined Change", - "mco.backup.entry.uploaded": "Uploaded", - "mco.backup.entry.worldType": "World Type", - "mco.backup.generate.world": "Generate world", - "mco.backup.info.title": "Changes From Last Backup", - "mco.backup.nobackups": "This realm doesn't have any backups currently.", - "mco.backup.restoring": "Restoring your realm", - "mco.backup.unknown": "UNKNOWN", - "mco.brokenworld.download": "Download", - "mco.brokenworld.downloaded": "Downloaded", - "mco.brokenworld.message.line1": "Please reset or select another world.", - "mco.brokenworld.message.line2": "You can also choose to download the world to singleplayer.", - "mco.brokenworld.minigame.title": "This minigame is no longer supported", - "mco.brokenworld.nonowner.error": "Please wait for the realm owner to reset the world", - "mco.brokenworld.nonowner.title": "World is out of date", - "mco.brokenworld.play": "Play", - "mco.brokenworld.reset": "Reset", - "mco.brokenworld.title": "Your current world is no longer supported", - "mco.client.incompatible.msg.line1": "Your client is not compatible with Realms.", - "mco.client.incompatible.msg.line2": "Please use the most recent version of Minecraft.", - "mco.client.incompatible.msg.line3": "Realms is not compatible with snapshot versions.", - "mco.client.incompatible.title": "Client incompatible!", - "mco.compatibility.downgrade": "Downgrade", - "mco.compatibility.downgrade.description": "This world was last played in version %s; you are on version %s. Downgrading a world could cause corruption - we cannot guarantee that it will load or work.\n\nA backup of your world will be saved under \"World backups\". Please restore your world if needed.", - "mco.compatibility.unverifiable.message": "The version this world was last played in could not be verified. If the world gets upgraded or downgraded, a backup will be automatically created and saved under \"World backups\".", - "mco.compatibility.unverifiable.title": "Compatibility not verifiable", - "mco.compatibility.upgrade": "Upgrade", - "mco.compatibility.upgrade.description": "This world was last played in version %s; you are on version %s.\n\nA backup of your world will be saved under \"World backups\". Please restore your world if needed.", - "mco.compatibility.upgrade.title": "Do you really want to upgrade your world?", - "mco.configure.current.minigame": "Current", - "mco.configure.world.activityfeed.disabled": "Player feed temporarily disabled", - "mco.configure.world.backup": "World Backups", - "mco.configure.world.buttons.activity": "Player activity", - "mco.configure.world.buttons.close": "Close Realm", - "mco.configure.world.buttons.delete": "Delete", - "mco.configure.world.buttons.done": "Done", - "mco.configure.world.buttons.edit": "Settings", - "mco.configure.world.buttons.invite": "Invite Player", - "mco.configure.world.buttons.moreoptions": "More options", - "mco.configure.world.buttons.open": "Open Realm", - "mco.configure.world.buttons.options": "World Options", - "mco.configure.world.buttons.players": "Players", - "mco.configure.world.buttons.resetworld": "Reset World", - "mco.configure.world.buttons.settings": "Settings", - "mco.configure.world.buttons.subscription": "Subscription", - "mco.configure.world.buttons.switchminigame": "Switch minigame", - "mco.configure.world.close.question.line1": "Your realm will become unavailable.", - "mco.configure.world.close.question.line2": "Are you sure you want to continue?", - "mco.configure.world.closing": "Closing the realm...", - "mco.configure.world.commandBlocks": "Command Blocks", - "mco.configure.world.delete.button": "Delete Realm", - "mco.configure.world.delete.question.line1": "Your realm will be permanently deleted", - "mco.configure.world.delete.question.line2": "Are you sure you want to continue?", - "mco.configure.world.description": "Realm Description", - "mco.configure.world.edit.slot.name": "World Name", - "mco.configure.world.edit.subscreen.adventuremap": "Some settings are disabled since your current world is an adventure", - "mco.configure.world.edit.subscreen.experience": "Some settings are disabled since your current world is an experience", - "mco.configure.world.edit.subscreen.inspiration": "Some settings are disabled since your current world is an inspiration", - "mco.configure.world.forceGameMode": "Force Game Mode", - "mco.configure.world.invite.narration": "You have %s new invite(s)", - "mco.configure.world.invite.profile.name": "Name", - "mco.configure.world.invited": "Invited", - "mco.configure.world.invited.number": "Invited (%s)", - "mco.configure.world.invites.normal.tooltip": "Normal user", - "mco.configure.world.invites.ops.tooltip": "Operator", - "mco.configure.world.invites.remove.tooltip": "Remove", - "mco.configure.world.leave.question.line1": "If you leave this realm you won't see it unless you are invited again", - "mco.configure.world.leave.question.line2": "Are you sure you want to continue?", - "mco.configure.world.location": "Location", - "mco.configure.world.minigame": "Current: %s", - "mco.configure.world.name": "Realm Name", - "mco.configure.world.opening": "Opening the realm...", - "mco.configure.world.players.error": "A player with the provided name does not exist", - "mco.configure.world.players.inviting": "Inviting player...", - "mco.configure.world.players.title": "Players", - "mco.configure.world.pvp": "PVP", - "mco.configure.world.reset.question.line1": "Your world will be regenerated and your current world will be lost", - "mco.configure.world.reset.question.line2": "Are you sure you want to continue?", - "mco.configure.world.resourcepack.question.line1": "You need a custom resource pack to play on this realm", - "mco.configure.world.resourcepack.question.line2": "Do you want to download it and play?", - "mco.configure.world.restore.download.question.line1": "The world will be downloaded and added to your single player worlds.", - "mco.configure.world.restore.download.question.line2": "Do you want to continue?", - "mco.configure.world.restore.question.line1": "Your world will be restored to date '%s' (%s)", - "mco.configure.world.restore.question.line2": "Are you sure you want to continue?", - "mco.configure.world.settings.title": "Settings", - "mco.configure.world.slot": "World %s", - "mco.configure.world.slot.empty": "Empty", - "mco.configure.world.slot.switch.question.line1": "Your realm will be switched to another world", - "mco.configure.world.slot.switch.question.line2": "Are you sure you want to continue?", - "mco.configure.world.slot.tooltip": "Switch to world", - "mco.configure.world.slot.tooltip.active": "Join", - "mco.configure.world.slot.tooltip.minigame": "Switch to minigame", - "mco.configure.world.spawn_toggle.message": "Turning this option off will REMOVE ALL existing entities of that type", - "mco.configure.world.spawn_toggle.message.npc": "Turning this option off will REMOVE ALL existing entities of that type, like Villagers", - "mco.configure.world.spawn_toggle.title": "Warning!", - "mco.configure.world.spawnAnimals": "Spawn Animals", - "mco.configure.world.spawnMonsters": "Spawn Monsters", - "mco.configure.world.spawnNPCs": "Spawn NPCs", - "mco.configure.world.spawnProtection": "Spawn Protection", - "mco.configure.world.status": "Status", - "mco.configure.world.subscription.day": "day", - "mco.configure.world.subscription.days": "days", - "mco.configure.world.subscription.expired": "Expired", - "mco.configure.world.subscription.extend": "Extend Subscription", - "mco.configure.world.subscription.less_than_a_day": "Less than a day", - "mco.configure.world.subscription.month": "month", - "mco.configure.world.subscription.months": "months", - "mco.configure.world.subscription.recurring.daysleft": "Renewed automatically in", - "mco.configure.world.subscription.recurring.info": "Changes made to your Realms subscription such as stacking time or turning off recurring billing will not be reflected until your next bill date.", - "mco.configure.world.subscription.remaining.days": "%1$s day(s)", - "mco.configure.world.subscription.remaining.months": "%1$s month(s)", - "mco.configure.world.subscription.remaining.months.days": "%1$s month(s), %2$s day(s)", - "mco.configure.world.subscription.start": "Start Date", - "mco.configure.world.subscription.timeleft": "Time Left", - "mco.configure.world.subscription.title": "Your Subscription", - "mco.configure.world.subscription.unknown": "Unknown", - "mco.configure.world.switch.slot": "Create World", - "mco.configure.world.switch.slot.subtitle": "This world is empty, choose how to create your world", - "mco.configure.world.title": "Configure Realm:", - "mco.configure.world.uninvite.player": "Are you sure that you want to uninvite '%s'?", - "mco.configure.world.uninvite.question": "Are you sure that you want to uninvite", - "mco.configure.worlds.title": "Worlds", - "mco.connect.authorizing": "Logging in...", - "mco.connect.connecting": "Connecting to the realm...", - "mco.connect.failed": "Failed to connect to the realm", - "mco.connect.success": "Done", - "mco.create.world": "Create", - "mco.create.world.error": "You must enter a name!", - "mco.create.world.reset.title": "Creating world...", - "mco.create.world.skip": "Skip", - "mco.create.world.subtitle": "Optionally, select what world to put on your new realm", - "mco.create.world.wait": "Creating the realm...", - "mco.download.cancelled": "Download cancelled", - "mco.download.confirmation.line1": "The world you are going to download is larger than %s", - "mco.download.confirmation.line2": "You won't be able to upload this world to your realm again", - "mco.download.done": "Download done", - "mco.download.downloading": "Downloading", - "mco.download.extracting": "Extracting", - "mco.download.failed": "Download failed", - "mco.download.percent": "%s %%", - "mco.download.preparing": "Preparing download", - "mco.download.resourcePack.fail": "Failed to download resource pack!", - "mco.download.speed": "(%s/s)", - "mco.download.speed.narration": "%s/s", - "mco.download.title": "Downloading Latest World", - "mco.error.invalid.session.message": "Please try restarting Minecraft", - "mco.error.invalid.session.title": "Invalid Session", - "mco.errorMessage.6001": "Client outdated", - "mco.errorMessage.6002": "Terms of service not accepted", - "mco.errorMessage.6003": "Download limit reached", - "mco.errorMessage.6004": "Upload limit reached", - "mco.errorMessage.6005": "World locked", - "mco.errorMessage.6006": "World is out of date", - "mco.errorMessage.6007": "User in too many Realms", - "mco.errorMessage.6008": "Invalid Realm name", - "mco.errorMessage.6009": "Invalid Realm description", - "mco.errorMessage.connectionFailure": "An error occurred, please try again later.", - "mco.errorMessage.generic": "An error occurred: ", - "mco.errorMessage.noDetails": "No error details provided", - "mco.errorMessage.realmsService": "An error occurred (%s):", - "mco.errorMessage.realmsService.connectivity": "Could not connect to Realms: %s", - "mco.errorMessage.realmsService.realmsError": "Realms (%s):", - "mco.errorMessage.realmsService.unknownCompatibility": "Could not check compatible version, got response: %s", - "mco.errorMessage.retry": "Retry operation", - "mco.errorMessage.serviceBusy": "Realms is busy at the moment.\nPlease try connecting to your Realm again in a couple of minutes.", - "mco.gui.button": "Button", - "mco.gui.ok": "Ok", - "mco.info": "Info!", - "mco.invites.button.accept": "Accept", - "mco.invites.button.reject": "Reject", - "mco.invites.nopending": "No pending invites!", - "mco.invites.pending": "New invite(s)!", - "mco.invites.title": "Pending Invites", - "mco.minigame.world.changeButton": "Select another minigame", - "mco.minigame.world.info.line1": "This will temporarily replace your world with a minigame!", - "mco.minigame.world.info.line2": "You can later return to your original world without losing anything.", - "mco.minigame.world.noSelection": "Please make a selection", - "mco.minigame.world.restore": "Ending minigame...", - "mco.minigame.world.restore.question.line1": "The minigame will end and your realm will be restored.", - "mco.minigame.world.restore.question.line2": "Are you sure you want to continue?", - "mco.minigame.world.selected": "Selected minigame:", - "mco.minigame.world.slot.screen.title": "Switching world...", - "mco.minigame.world.startButton": "Switch", - "mco.minigame.world.starting.screen.title": "Starting minigame...", - "mco.minigame.world.stopButton": "End minigame", - "mco.minigame.world.switch.new": "Select another minigame?", - "mco.minigame.world.switch.title": "Switch minigame", - "mco.minigame.world.title": "Switch realm to minigame", - "mco.news": "Realms news", - "mco.notification.dismiss": "Dismiss", - "mco.notification.transferSubscription.buttonText": "Transfer Now", - "mco.notification.transferSubscription.message": "Java Realms subscriptions are moving to the Microsoft Store. Do not let your subscription expire!\nTransfer now and get 30 days of Realms for free.\nGo to Profile on minecraft.net to transfer your subscription.", - "mco.notification.visitUrl.buttonText.default": "Open link", - "mco.notification.visitUrl.message.default": "Please visit the link below", - "mco.question": "Question", - "mco.reset.world.adventure": "Adventures", - "mco.reset.world.experience": "Experiences", - "mco.reset.world.generate": "New World", - "mco.reset.world.inspiration": "Inspiration", - "mco.reset.world.resetting.screen.title": "Resetting world...", - "mco.reset.world.seed": "Seed (Optional)", - "mco.reset.world.template": "World Templates", - "mco.reset.world.title": "Reset World", - "mco.reset.world.upload": "Upload world", - "mco.reset.world.warning": "This will replace the current world of your realm", - "mco.selectServer.buy": "Buy a Realm!", - "mco.selectServer.close": "Close", - "mco.selectServer.closed": "Closed realm", - "mco.selectServer.closeserver": "Close realm", - "mco.selectServer.configure": "Configure", - "mco.selectServer.configureRealm": "Configure realm", - "mco.selectServer.create": "Create Realm", - "mco.selectServer.create.subtitle": "Select what world to put on your new realm", - "mco.selectServer.expired": "Expired realm", - "mco.selectServer.expiredList": "Your subscription has expired", - "mco.selectServer.expiredRenew": "Renew", - "mco.selectServer.expiredSubscribe": "Subscribe", - "mco.selectServer.expiredTrial": "Your trial has ended", - "mco.selectServer.expires.day": "Expires in a day", - "mco.selectServer.expires.days": "Expires in %s days", - "mco.selectServer.expires.soon": "Expires soon", - "mco.selectServer.leave": "Leave Realm", - "mco.selectServer.loading": "Loading Realms List", - "mco.selectServer.mapOnlySupportedForVersion": "This map is unsupported in %s", - "mco.selectServer.minigame": "Minigame:", - "mco.selectServer.minigameName": "Minigame: %s", - "mco.selectServer.minigameNotSupportedInVersion": "Can't play this minigame in %s", - "mco.selectServer.noRealms": "You don't seem to have a Realm. Add a Realm to play together with your friends.", - "mco.selectServer.note": "Note:", - "mco.selectServer.open": "Open realm", - "mco.selectServer.openserver": "Open realm", - "mco.selectServer.play": "Play", - "mco.selectServer.popup": "Realms is a safe, simple way to enjoy an online Minecraft world with up to ten friends at a time. It supports loads of minigames and plenty of custom worlds! Only the owner of the realm needs to pay.", - "mco.selectServer.purchase": "Add Realm", - "mco.selectServer.trial": "Get a Trial!", - "mco.selectServer.uninitialized": "Click to start your new realm!", - "mco.snapshot.createSnapshotPopup.text": "You are about to create a free Snapshot Realm that will be paired with your paid Realms subscription. This new Snapshot Realm will be accessible for as long as the paid subscription is active. Your paid Realm will not be affected.", - "mco.snapshot.createSnapshotPopup.title": "Create Snapshot Realm?", - "mco.snapshot.creating": "Creating Snapshot Realm...", - "mco.snapshot.description": "Paired with \"%s\"", - "mco.snapshot.friendsRealm.downgrade": "You need to be on version %s to join this Realm", - "mco.snapshot.friendsRealm.upgrade": "%s needs to upgrade their Realm before you can play from this version", - "mco.snapshot.paired": "This Snapshot Realm is paired with \"%s\"", - "mco.snapshot.parent.tooltip": "Use the latest release of Minecraft to play on this Realm", - "mco.snapshot.start": "Start free Snapshot Realm", - "mco.snapshot.subscription.info": "This is a Snapshot Realm that is paired to the subscription of your Realm '%s'. It will stay active for as long as its paired Realm is.", - "mco.snapshot.tooltip": "Use Snapshot Realms to get a sneak peek at upcoming versions of Minecraft, which might include new features and other changes.\n\nYou can find your normal Realms in the release version of the game.", - "mco.snapshotRealmsPopup.message": "Realms are now available in Snapshots starting with Snapshot 23w41a. Every Realms subscription comes with a free Snapshot Realm that is separate from your normal Java Realm!", - "mco.snapshotRealmsPopup.title": "Realms now available in Snapshots", - "mco.snapshotRealmsPopup.urlText": "Learn More", - "mco.template.button.publisher": "Publisher", - "mco.template.button.select": "Select", - "mco.template.button.trailer": "Trailer", - "mco.template.default.name": "World template", - "mco.template.info.tooltip": "Publisher website", - "mco.template.name": "Template", - "mco.template.select.failure": "We couldn't retrieve the list of content for this category.\nPlease check your internet connection, or try again later.", - "mco.template.select.narrate.authors": "Authors: %s", - "mco.template.select.narrate.version": "version %s", - "mco.template.select.none": "Oops, it looks like this content category is currently empty.\nPlease check back later for new content, or if you're a creator,\n%s.", - "mco.template.select.none.linkTitle": "consider submitting something yourself", - "mco.template.title": "World templates", - "mco.template.title.minigame": "Minigames", - "mco.template.trailer.tooltip": "Map trailer", - "mco.terms.buttons.agree": "Agree", - "mco.terms.buttons.disagree": "Don't agree", - "mco.terms.sentence.1": "I agree to the Minecraft Realms", - "mco.terms.sentence.2": "Terms of Service", - "mco.terms.title": "Realms Terms of Service", - "mco.time.daysAgo": "%1$s day(s) ago", - "mco.time.hoursAgo": "%1$s hour(s) ago", - "mco.time.minutesAgo": "%1$s minute(s) ago", - "mco.time.now": "right now", - "mco.time.secondsAgo": "%1$s second(s) ago", - "mco.trial.message.line1": "Want to get your own realm?", - "mco.trial.message.line2": "Click here for more info!", - "mco.upload.button.name": "Upload", - "mco.upload.cancelled": "Upload cancelled", - "mco.upload.close.failure": "Could not close your realm, please try again later", - "mco.upload.done": "Upload done", - "mco.upload.entry.cheats": "%1$s, %2$s", - "mco.upload.entry.id": "%1$s (%2$s)", - "mco.upload.failed": "Upload failed! (%s)", - "mco.upload.hardcore": "Hardcore worlds can't be uploaded!", - "mco.upload.percent": "%s %%", - "mco.upload.preparing": "Preparing your world", - "mco.upload.select.world.none": "No singleplayer worlds found!", - "mco.upload.select.world.subtitle": "Please select a singleplayer world to upload", - "mco.upload.select.world.title": "Upload World", - "mco.upload.size.failure.line1": "'%s' is too big!", - "mco.upload.size.failure.line2": "It is %s. The maximum allowed size is %s.", - "mco.upload.uploading": "Uploading '%s'", - "mco.upload.verifying": "Verifying your world", - "mco.version": "Version: %s", - "mco.warning": "Warning!", - "mco.worldSlot.minigame": "Minigame", - "menu.convertingLevel": "Converting world", - "menu.disconnect": "Disconnect", - "menu.game": "Game Menu", - "menu.generatingLevel": "Generating world", - "menu.generatingTerrain": "Building terrain", - "menu.loadingForcedChunks": "Loading forced chunks for dimension %s", - "menu.loadingLevel": "Loading world", - "menu.modded": " (Modded)", - "menu.multiplayer": "Multiplayer", - "menu.online": "Minecraft Realms", - "menu.options": "Options...", - "menu.paused": "Game Paused", - "menu.playdemo": "Play Demo World", - "menu.playerReporting": "Player Reporting", - "menu.preparingSpawn": "Preparing spawn area: %s%%", - "menu.quit": "Quit Game", - "menu.reportBugs": "Report Bugs", - "menu.resetdemo": "Reset Demo World", - "menu.respawning": "Respawning", - "menu.returnToGame": "Back to Game", - "menu.returnToMenu": "Save and Quit to Title", - "menu.savingChunks": "Saving chunks", - "menu.savingLevel": "Saving world", - "menu.sendFeedback": "Give Feedback", - "menu.shareToLan": "Open to LAN", - "menu.singleplayer": "Singleplayer", - "menu.working": "Working...", - "merchant.current_level": "Trader's current level", - "merchant.deprecated": "Villagers restock up to two times per day.", - "merchant.level.1": "Novice", - "merchant.level.2": "Apprentice", - "merchant.level.3": "Journeyman", - "merchant.level.4": "Expert", - "merchant.level.5": "Master", - "merchant.next_level": "Trader's next level", - "merchant.title": "%s - %s", - "merchant.trades": "Trades", - "mirror.front_back": "↑ ↓", - "mirror.left_right": "← →", - "mirror.none": "|", - "mount.onboard": "Press %1$s to Dismount", - "multiplayer.applyingPack": "Applying resource pack", - "multiplayer.disconnect.authservers_down": "Authentication servers are down. Please try again later, sorry!", - "multiplayer.disconnect.banned": "You are banned from this server", - "multiplayer.disconnect.banned_ip.expiration": "\nYour ban will be removed on %s", - "multiplayer.disconnect.banned_ip.reason": "Your IP address is banned from this server.\nReason: %s", - "multiplayer.disconnect.banned.expiration": "\nYour ban will be removed on %s", - "multiplayer.disconnect.banned.reason": "You are banned from this server.\nReason: %s", - "multiplayer.disconnect.chat_validation_failed": "Chat message validation failure", - "multiplayer.disconnect.duplicate_login": "You logged in from another location", - "multiplayer.disconnect.expired_public_key": "Expired profile public key. Check that your system time is synchronized, and try restarting your game.", - "multiplayer.disconnect.flying": "Flying is not enabled on this server", - "multiplayer.disconnect.generic": "Disconnected", - "multiplayer.disconnect.idling": "You have been idle for too long!", - "multiplayer.disconnect.illegal_characters": "Illegal characters in chat", - "multiplayer.disconnect.incompatible": "Incompatible client! Please use %s", - "multiplayer.disconnect.invalid_entity_attacked": "Attempting to attack an invalid entity", - "multiplayer.disconnect.invalid_packet": "Server sent an invalid packet", - "multiplayer.disconnect.invalid_player_data": "Invalid player data", - "multiplayer.disconnect.invalid_player_movement": "Invalid move player packet received", - "multiplayer.disconnect.invalid_public_key_signature": "Invalid signature for profile public key.\nTry restarting your game.", - "multiplayer.disconnect.invalid_public_key_signature.new": "Invalid signature for profile public key.\nTry restarting your game.", - "multiplayer.disconnect.invalid_vehicle_movement": "Invalid move vehicle packet received", - "multiplayer.disconnect.ip_banned": "You have been IP banned from this server", - "multiplayer.disconnect.kicked": "Kicked by an operator", - "multiplayer.disconnect.missing_tags": "Incomplete set of tags received from server.\nPlease contact server operator.", - "multiplayer.disconnect.name_taken": "That name is already taken", - "multiplayer.disconnect.not_whitelisted": "You are not white-listed on this server!", - "multiplayer.disconnect.out_of_order_chat": "Out-of-order chat packet received. Did your system time change?", - "multiplayer.disconnect.outdated_client": "Incompatible client! Please use %s", - "multiplayer.disconnect.outdated_server": "Incompatible client! Please use %s", - "multiplayer.disconnect.server_full": "The server is full!", - "multiplayer.disconnect.server_shutdown": "Server closed", - "multiplayer.disconnect.slow_login": "Took too long to log in", - "multiplayer.disconnect.too_many_pending_chats": "Too many unacknowledged chat messages", - "multiplayer.disconnect.unexpected_query_response": "Unexpected custom data from client", - "multiplayer.disconnect.unsigned_chat": "Received chat packet with missing or invalid signature.", - "multiplayer.disconnect.unverified_username": "Failed to verify username!", - "multiplayer.downloadingStats": "Retrieving statistics...", - "multiplayer.downloadingTerrain": "Loading terrain...", - "multiplayer.lan.server_found": "New server found: %s", - "multiplayer.message_not_delivered": "Can't deliver chat message, check server logs: %s", - "multiplayer.player.joined": "%s joined the game", - "multiplayer.player.joined.renamed": "%s (formerly known as %s) joined the game", - "multiplayer.player.left": "%s left the game", - "multiplayer.player.list.hp": "%shp", - "multiplayer.player.list.narration": "Online players: %s", - "multiplayer.requiredTexturePrompt.disconnect": "Server requires a custom resource pack", - "multiplayer.requiredTexturePrompt.line1": "This server requires the use of a custom resource pack.", - "multiplayer.requiredTexturePrompt.line2": "Rejecting this custom resource pack will disconnect you from this server.", - "multiplayer.socialInteractions.not_available": "Social Interactions are only available in Multiplayer worlds", - "multiplayer.status.and_more": "... and %s more ...", - "multiplayer.status.cancelled": "Cancelled", - "multiplayer.status.cannot_connect": "Can't connect to server", - "multiplayer.status.cannot_resolve": "Can't resolve hostname", - "multiplayer.status.finished": "Finished", - "multiplayer.status.incompatible": "Incompatible version!", - "multiplayer.status.motd.narration": "Message of the day: %s", - "multiplayer.status.no_connection": "(no connection)", - "multiplayer.status.old": "Old", - "multiplayer.status.online": "Online", - "multiplayer.status.ping": "%s ms", - "multiplayer.status.ping.narration": "Ping %s milliseconds", - "multiplayer.status.pinging": "Pinging...", - "multiplayer.status.player_count": "%s/%s", - "multiplayer.status.player_count.narration": "%s out of %s players online", - "multiplayer.status.quitting": "Quitting", - "multiplayer.status.request_handled": "Status request has been handled", - "multiplayer.status.unknown": "???", - "multiplayer.status.unrequested": "Received unrequested status", - "multiplayer.status.version.narration": "Server version: %s", - "multiplayer.stopSleeping": "Leave Bed", - "multiplayer.texturePrompt.failure.line1": "Server resource pack couldn't be applied", - "multiplayer.texturePrompt.failure.line2": "Any functionality that requires custom resources might not work as expected", - "multiplayer.texturePrompt.line1": "This server recommends the use of a custom resource pack.", - "multiplayer.texturePrompt.line2": "Would you like to download and install it automagically?", - "multiplayer.texturePrompt.serverPrompt": "%s\n\nMessage from server:\n%s", - "multiplayer.title": "Play Multiplayer", - "multiplayer.unsecureserver.toast": "Messages sent on this server may be modified and might not reflect the original message", - "multiplayer.unsecureserver.toast.title": "Chat messages can't be verified", - "multiplayerWarning.check": "Do not show this screen again", - "multiplayerWarning.header": "Caution: Third-Party Online Play", - "multiplayerWarning.message": "Caution: Online play is offered by third-party servers that are not owned, operated, or supervised by Mojang Studios or Microsoft. During online play, you may be exposed to unmoderated chat messages or other types of user-generated content that may not be suitable for everyone.", - "narration.button": "Button: %s", - "narration.button.usage.focused": "Press Enter to activate", - "narration.button.usage.hovered": "Left click to activate", - "narration.checkbox": "Checkbox: %s", - "narration.checkbox.usage.focused": "Press Enter to toggle", - "narration.checkbox.usage.hovered": "Left click to toggle", - "narration.component_list.usage": "Press Tab to navigate to next element", - "narration.cycle_button.usage.focused": "Press Enter to switch to %s", - "narration.cycle_button.usage.hovered": "Left click to switch to %s", - "narration.edit_box": "Edit box: %s", - "narration.recipe": "Recipe for %s", - "narration.recipe.usage": "Left click to select", - "narration.recipe.usage.more": "Right click to show more recipes", - "narration.selection.usage": "Press up and down buttons to move to another entry", - "narration.slider.usage.focused": "Press left or right keyboard buttons to change value", - "narration.slider.usage.hovered": "Drag slider to change value", - "narration.suggestion": "Selected suggestion %d out of %d: %s", - "narration.suggestion.tooltip": "Selected suggestion %d out of %d: %s (%s)", - "narration.suggestion.usage.cycle.fixed": "Press Tab to cycle to the next suggestion", - "narration.suggestion.usage.cycle.hidable": "Press Tab to cycle to the next suggestion, or Escape to leave suggestions", - "narration.suggestion.usage.fill.fixed": "Press Tab to use suggestion", - "narration.suggestion.usage.fill.hidable": "Press Tab to use suggestion, or Escape to leave suggestions", - "narration.tab_navigation.usage": "Press Ctrl and Tab to switch between tabs", - "narrator.button.accessibility": "Accessibility", - "narrator.button.difficulty_lock": "Difficulty lock", - "narrator.button.difficulty_lock.locked": "Locked", - "narrator.button.difficulty_lock.unlocked": "Unlocked", - "narrator.button.language": "Language", - "narrator.controls.bound": "%s is bound to %s", - "narrator.controls.reset": "Reset %s button", - "narrator.controls.unbound": "%s is not bound", - "narrator.joining": "Joining", - "narrator.loading": "Loading: %s", - "narrator.loading.done": "Done", - "narrator.position.list": "Selected list row %s out of %s", - "narrator.position.object_list": "Selected row element %s out of %s", - "narrator.position.screen": "Screen element %s out of %s", - "narrator.position.tab": "Selected tab %s out of %s", - "narrator.ready_to_play": "Ready to play", - "narrator.screen.title": "Title Screen", - "narrator.screen.usage": "Use mouse cursor or Tab button to select element", - "narrator.select": "Selected: %s", - "narrator.select.world": "Selected %s, last played: %s, %s, %s, version: %s", - "narrator.select.world_info": "Selected %s, last played: %s, %s", - "narrator.toast.disabled": "Narrator Disabled", - "narrator.toast.enabled": "Narrator Enabled", - "optimizeWorld.confirm.description": "This will attempt to optimize your world by making sure all data is stored in the most recent game format. This can take a very long time, depending on your world. Once done, your world may play faster but will no longer be compatible with older versions of the game. Are you sure you wish to proceed?", - "optimizeWorld.confirm.title": "Optimize World", - "optimizeWorld.info.converted": "Upgraded chunks: %s", - "optimizeWorld.info.skipped": "Skipped chunks: %s", - "optimizeWorld.info.total": "Total chunks: %s", - "optimizeWorld.progress.counter": "%s / %s", - "optimizeWorld.progress.percentage": "%s%%", - "optimizeWorld.stage.counting": "Counting chunks...", - "optimizeWorld.stage.failed": "Failed! :(", - "optimizeWorld.stage.finished": "Finishing up...", - "optimizeWorld.stage.upgrading": "Upgrading all chunks...", - "optimizeWorld.title": "Optimizing World '%s'", - "options.accessibility": "Accessibility Settings...", - "options.accessibility.high_contrast": "High Contrast", - "options.accessibility.high_contrast.error.tooltip": "High Contrast resource pack is not available", - "options.accessibility.high_contrast.tooltip": "Enhances the contrast of UI elements", - "options.accessibility.link": "Accessibility Guide", - "options.accessibility.narrator_hotkey": "Narrator Hotkey", - "options.accessibility.narrator_hotkey.mac.tooltip": "Allows the Narrator to be toggled on and off with 'Cmd+B'", - "options.accessibility.narrator_hotkey.tooltip": "Allows the Narrator to be toggled on and off with 'Ctrl+B'", - "options.accessibility.panorama_speed": "Panorama Scroll Speed", - "options.accessibility.text_background": "Text Background", - "options.accessibility.text_background_opacity": "Text Background Opacity", - "options.accessibility.text_background.chat": "Chat", - "options.accessibility.text_background.everywhere": "Everywhere", - "options.accessibility.title": "Accessibility Settings", - "options.allowServerListing": "Allow Server Listings", - "options.allowServerListing.tooltip": "Servers may list online players as part of their public status.\nWith this option off your name will not show up in such lists.", - "options.ao": "Smooth Lighting", - "options.ao.max": "Maximum", - "options.ao.min": "Minimum", - "options.ao.off": "OFF", - "options.attack.crosshair": "Crosshair", - "options.attack.hotbar": "Hotbar", - "options.attackIndicator": "Attack Indicator", - "options.audioDevice": "Device", - "options.audioDevice.default": "System Default", - "options.autoJump": "Auto-Jump", - "options.autosaveIndicator": "Autosave Indicator", - "options.autoSuggestCommands": "Command Suggestions", - "options.biomeBlendRadius": "Biome Blend", - "options.biomeBlendRadius.1": "OFF (Fastest)", - "options.biomeBlendRadius.3": "3x3 (Fast)", - "options.biomeBlendRadius.5": "5x5 (Normal)", - "options.biomeBlendRadius.7": "7x7 (High)", - "options.biomeBlendRadius.9": "9x9 (Very High)", - "options.biomeBlendRadius.11": "11x11 (Extreme)", - "options.biomeBlendRadius.13": "13x13 (Showoff)", - "options.biomeBlendRadius.15": "15x15 (Maximum)", - "options.chat": "Chat Settings...", - "options.chat.color": "Colors", - "options.chat.delay": "Chat Delay: %s seconds", - "options.chat.delay_none": "Chat Delay: None", - "options.chat.height.focused": "Focused Height", - "options.chat.height.unfocused": "Unfocused Height", - "options.chat.line_spacing": "Line Spacing", - "options.chat.links": "Web Links", - "options.chat.links.prompt": "Prompt on Links", - "options.chat.opacity": "Chat Text Opacity", - "options.chat.scale": "Chat Text Size", - "options.chat.title": "Chat Settings", - "options.chat.visibility": "Chat", - "options.chat.visibility.full": "Shown", - "options.chat.visibility.hidden": "Hidden", - "options.chat.visibility.system": "Commands Only", - "options.chat.width": "Width", - "options.chunks": "%s chunks", - "options.clouds.fancy": "Fancy", - "options.clouds.fast": "Fast", - "options.controls": "Controls...", - "options.credits_and_attribution": "Credits & Attribution...", - "options.customizeTitle": "Customize World Settings", - "options.damageTiltStrength": "Damage Tilt", - "options.damageTiltStrength.tooltip": "The amount of camera shake caused by being hurt.", - "options.darkMojangStudiosBackgroundColor": "Monochrome Logo", - "options.darkMojangStudiosBackgroundColor.tooltip": "Changes the Mojang Studios loading screen background color to black.", - "options.darknessEffectScale": "Darkness Pulsing", - "options.darknessEffectScale.tooltip": "Controls how much the Darkness effect pulses when a Warden or Sculk Shrieker gives it to you.", - "options.difficulty": "Difficulty", - "options.difficulty.easy": "Easy", - "options.difficulty.easy.info": "Hostile mobs spawn but deal less damage. Hunger bar depletes and drains health down to 5 hearts.", - "options.difficulty.hard": "Hard", - "options.difficulty.hard.info": "Hostile mobs spawn and deal more damage. Hunger bar depletes and drains all health.", - "options.difficulty.hardcore": "Hardcore", - "options.difficulty.normal": "Normal", - "options.difficulty.normal.info": "Hostile mobs spawn and deal standard damage. Hunger bar depletes and drains health down to half a heart.", - "options.difficulty.online": "Server Difficulty", - "options.difficulty.peaceful": "Peaceful", - "options.difficulty.peaceful.info": "No hostile mobs and only some neutral mobs spawn. Hunger bar doesn't deplete and health replenishes over time.", - "options.directionalAudio": "Directional Audio", - "options.directionalAudio.off.tooltip": "Classic Stereo sound", - "options.directionalAudio.on.tooltip": "Uses HRTF-based directional audio to improve the simulation of 3D sound. Requires HRTF compatible audio hardware, and is best experienced with headphones.", - "options.discrete_mouse_scroll": "Discrete Scrolling", - "options.entityDistanceScaling": "Entity Distance", - "options.entityShadows": "Entity Shadows", - "options.forceUnicodeFont": "Force Unicode Font", - "options.fov": "FOV", - "options.fov.max": "Quake Pro", - "options.fov.min": "Normal", - "options.fovEffectScale": "FOV Effects", - "options.fovEffectScale.tooltip": "Controls how much the field of view can change with gameplay effects.", - "options.framerate": "%s fps", - "options.framerateLimit": "Max Framerate", - "options.framerateLimit.max": "Unlimited", - "options.fullscreen": "Fullscreen", - "options.fullscreen.current": "Current", - "options.fullscreen.entry": "%sx%s@%s (%sbit)", - "options.fullscreen.resolution": "Fullscreen Resolution", - "options.fullscreen.unavailable": "Setting unavailable", - "options.gamma": "Brightness", - "options.gamma.default": "Default", - "options.gamma.max": "Bright", - "options.gamma.min": "Moody", - "options.generic_value": "%s: %s", - "options.glintSpeed": "Glint Speed", - "options.glintSpeed.tooltip": "Controls how fast the visual glint shimmers across enchanted items.", - "options.glintStrength": "Glint Strength", - "options.glintStrength.tooltip": "Controls how transparent the visual glint is on enchanted items.", - "options.graphics": "Graphics", - "options.graphics.fabulous": "Fabulous!", - "options.graphics.fabulous.tooltip": "%s graphics uses screen shaders for drawing weather, clouds, and particles behind translucent blocks and water.\nThis may severely impact performance for portable devices and 4K displays.", - "options.graphics.fancy": "Fancy", - "options.graphics.fancy.tooltip": "Fancy graphics balances performance and quality for the majority of machines.\nWeather, clouds, and particles may not appear behind translucent blocks or water.", - "options.graphics.fast": "Fast", - "options.graphics.fast.tooltip": "Fast graphics reduces the amount of visible rain and snow.\nTransparency effects are disabled for various blocks such as leaves.", - "options.graphics.warning.accept": "Continue Without Support", - "options.graphics.warning.cancel": "Take Me Back", - "options.graphics.warning.message": "Your graphics device is detected as unsupported for the %s graphics option.\n\nYou may ignore this and continue, however support will not be provided for your device if you choose to use %s graphics.", - "options.graphics.warning.renderer": "Renderer detected: [%s]", - "options.graphics.warning.title": "Graphics Device Unsupported", - "options.graphics.warning.vendor": "Vendor detected: [%s]", - "options.graphics.warning.version": "OpenGL Version detected: [%s]", - "options.guiScale": "GUI Scale", - "options.guiScale.auto": "Auto", - "options.hidden": "Hidden", - "options.hideLightningFlashes": "Hide Lightning Flashes", - "options.hideLightningFlashes.tooltip": "Prevents Lightning Bolts from making the sky flash. The bolts themselves will still be visible.", - "options.hideMatchedNames": "Hide Matched Names", - "options.hideMatchedNames.tooltip": "3rd-party Servers may send chat messages in non-standard formats.\nWith this option on, hidden players will be matched based on chat sender names.", - "options.hideSplashTexts": "Hide Splash Texts", - "options.hideSplashTexts.tooltip": "Hides the yellow splash text in the main menu.", - "options.invertMouse": "Invert Mouse", - "options.key.hold": "Hold", - "options.key.toggle": "Toggle", - "options.language": "Language...", - "options.language.title": "Language", - "options.languageAccuracyWarning": "(Language translations may not be 100%% accurate)", - "options.languageWarning": "Language translations may not be 100%% accurate", - "options.mainHand": "Main Hand", - "options.mainHand.left": "Left", - "options.mainHand.right": "Right", - "options.mipmapLevels": "Mipmap Levels", - "options.modelPart.cape": "Cape", - "options.modelPart.hat": "Hat", - "options.modelPart.jacket": "Jacket", - "options.modelPart.left_pants_leg": "Left Pants Leg", - "options.modelPart.left_sleeve": "Left Sleeve", - "options.modelPart.right_pants_leg": "Right Pants Leg", - "options.modelPart.right_sleeve": "Right Sleeve", - "options.mouse_settings": "Mouse Settings...", - "options.mouse_settings.title": "Mouse Settings", - "options.mouseWheelSensitivity": "Scroll Sensitivity", - "options.multiplayer.title": "Multiplayer Settings...", - "options.multiplier": "%sx", - "options.narrator": "Narrator", - "options.narrator.all": "Narrates All", - "options.narrator.chat": "Narrates Chat", - "options.narrator.notavailable": "Not Available", - "options.narrator.off": "OFF", - "options.narrator.system": "Narrates System", - "options.notifications.display_time": "Notification Time", - "options.notifications.display_time.tooltip": "Affects the length of time that all notifications stay visible on the screen.", - "options.off": "OFF", - "options.off.composed": "%s: OFF", - "options.on": "ON", - "options.on.composed": "%s: ON", - "options.online": "Online...", - "options.online.title": "Online Options", - "options.onlyShowSecureChat": "Only Show Secure Chat", - "options.onlyShowSecureChat.tooltip": "Only display messages from other players that can be verified to have been sent by that player, and have not been modified.", - "options.operatorItemsTab": "Operator Items Tab", - "options.particles": "Particles", - "options.particles.all": "All", - "options.particles.decreased": "Decreased", - "options.particles.minimal": "Minimal", - "options.percent_add_value": "%s: +%s%%", - "options.percent_value": "%s: %s%%", - "options.pixel_value": "%s: %spx", - "options.prioritizeChunkUpdates": "Chunk Builder", - "options.prioritizeChunkUpdates.byPlayer": "Semi Blocking", - "options.prioritizeChunkUpdates.byPlayer.tooltip": "Some actions within a chunk will recompile the chunk immediately. This includes block placing & destroying.", - "options.prioritizeChunkUpdates.nearby": "Fully Blocking", - "options.prioritizeChunkUpdates.nearby.tooltip": "Nearby chunks are always compiled immediately. This may impact game performance when blocks are placed or destroyed.", - "options.prioritizeChunkUpdates.none": "Threaded", - "options.prioritizeChunkUpdates.none.tooltip": "Nearby chunks are compiled in parallel threads. This may result in brief visual holes when blocks are destroyed.", - "options.rawMouseInput": "Raw Input", - "options.realmsNotifications": "Realms News & Invites", - "options.reducedDebugInfo": "Reduced Debug Info", - "options.renderClouds": "Clouds", - "options.renderDistance": "Render Distance", - "options.resourcepack": "Resource Packs...", - "options.screenEffectScale": "Distortion Effects", - "options.screenEffectScale.tooltip": "Strength of nausea and Nether portal screen distortion effects.\nAt lower values, the nausea effect is replaced with a green overlay.", - "options.sensitivity": "Sensitivity", - "options.sensitivity.max": "HYPERSPEED!!!", - "options.sensitivity.min": "*yawn*", - "options.showSubtitles": "Show Subtitles", - "options.simulationDistance": "Simulation Distance", - "options.skinCustomisation": "Skin Customization...", - "options.skinCustomisation.title": "Skin Customization", - "options.sounds": "Music & Sounds...", - "options.sounds.title": "Music & Sound Options", - "options.telemetry": "Telemetry Data...", - "options.telemetry.button": "Data Collection", - "options.telemetry.button.tooltip": "\"%s\" includes only the required data.\n\"%s\" includes optional, as well as the required data.", - "options.telemetry.state.all": "All", - "options.telemetry.state.minimal": "Minimal", - "options.telemetry.state.none": "None", - "options.title": "Options", - "options.touchscreen": "Touchscreen Mode", - "options.video": "Video Settings...", - "options.videoTitle": "Video Settings", - "options.viewBobbing": "View Bobbing", - "options.visible": "Shown", - "options.vsync": "VSync", - "outOfMemory.message": "Minecraft has run out of memory.\n\nThis could be caused by a bug in the game or by the Java Virtual Machine not being allocated enough memory.\n\nTo prevent world corruption, the current game has quit. We've tried to free up enough memory to let you go back to the main menu and back to playing, but this may not have worked.\n\nPlease restart the game if you see this message again.", - "outOfMemory.title": "Out of memory!", - "pack.available.title": "Available", - "pack.copyFailure": "Failed to copy packs", - "pack.dropConfirm": "Do you want to add the following packs to Minecraft?", - "pack.dropInfo": "Drag and drop files into this window to add packs", - "pack.dropRejected.message": "The following entries were not valid packs and were not copied:\n %s", - "pack.dropRejected.title": "Non-pack entries", - "pack.folderInfo": "(Place pack files here)", - "pack.incompatible": "Incompatible", - "pack.incompatible.confirm.new": "This pack was made for a newer version of Minecraft and may not work correctly.", - "pack.incompatible.confirm.old": "This pack was made for an older version of Minecraft and may no longer work correctly.", - "pack.incompatible.confirm.title": "Are you sure you want to load this pack?", - "pack.incompatible.new": "(Made for a newer version of Minecraft)", - "pack.incompatible.old": "(Made for an older version of Minecraft)", - "pack.nameAndSource": "%s (%s)", - "pack.openFolder": "Open Pack Folder", - "pack.selected.title": "Selected", - "pack.source.builtin": "built-in", - "pack.source.feature": "feature", - "pack.source.local": "local", - "pack.source.server": "server", - "pack.source.world": "world", - "painting.dimensions": "%sx%s", - "painting.minecraft.alban.author": "Kristoffer Zetterstrand", - "painting.minecraft.alban.title": "Albanian", - "painting.minecraft.aztec.author": "Kristoffer Zetterstrand", - "painting.minecraft.aztec.title": "de_aztec", - "painting.minecraft.aztec2.author": "Kristoffer Zetterstrand", - "painting.minecraft.aztec2.title": "de_aztec", - "painting.minecraft.bomb.author": "Kristoffer Zetterstrand", - "painting.minecraft.bomb.title": "Target Successfully Bombed", - "painting.minecraft.burning_skull.author": "Kristoffer Zetterstrand", - "painting.minecraft.burning_skull.title": "Skull On Fire", - "painting.minecraft.bust.author": "Kristoffer Zetterstrand", - "painting.minecraft.bust.title": "Bust", - "painting.minecraft.courbet.author": "Kristoffer Zetterstrand", - "painting.minecraft.courbet.title": "Bonjour Monsieur Courbet", - "painting.minecraft.creebet.author": "Kristoffer Zetterstrand", - "painting.minecraft.creebet.title": "Creebet", - "painting.minecraft.donkey_kong.author": "Kristoffer Zetterstrand", - "painting.minecraft.donkey_kong.title": "Kong", - "painting.minecraft.earth.author": "Mojang", - "painting.minecraft.earth.title": "Earth", - "painting.minecraft.fighters.author": "Kristoffer Zetterstrand", - "painting.minecraft.fighters.title": "Fighters", - "painting.minecraft.fire.author": "Mojang", - "painting.minecraft.fire.title": "Fire", - "painting.minecraft.graham.author": "Kristoffer Zetterstrand", - "painting.minecraft.graham.title": "Graham", - "painting.minecraft.kebab.author": "Kristoffer Zetterstrand", - "painting.minecraft.kebab.title": "Kebab med tre pepperoni", - "painting.minecraft.match.author": "Kristoffer Zetterstrand", - "painting.minecraft.match.title": "Match", - "painting.minecraft.pigscene.author": "Kristoffer Zetterstrand", - "painting.minecraft.pigscene.title": "Pigscene", - "painting.minecraft.plant.author": "Kristoffer Zetterstrand", - "painting.minecraft.plant.title": "Paradisträd", - "painting.minecraft.pointer.author": "Kristoffer Zetterstrand", - "painting.minecraft.pointer.title": "Pointer", - "painting.minecraft.pool.author": "Kristoffer Zetterstrand", - "painting.minecraft.pool.title": "The Pool", - "painting.minecraft.sea.author": "Kristoffer Zetterstrand", - "painting.minecraft.sea.title": "Seaside", - "painting.minecraft.skeleton.author": "Kristoffer Zetterstrand", - "painting.minecraft.skeleton.title": "Mortal Coil", - "painting.minecraft.skull_and_roses.author": "Kristoffer Zetterstrand", - "painting.minecraft.skull_and_roses.title": "Skull and Roses", - "painting.minecraft.stage.author": "Kristoffer Zetterstrand", - "painting.minecraft.stage.title": "The Stage Is Set", - "painting.minecraft.sunset.author": "Kristoffer Zetterstrand", - "painting.minecraft.sunset.title": "sunset_dense", - "painting.minecraft.void.author": "Kristoffer Zetterstrand", - "painting.minecraft.void.title": "The void", - "painting.minecraft.wanderer.author": "Kristoffer Zetterstrand", - "painting.minecraft.wanderer.title": "Wanderer", - "painting.minecraft.wasteland.author": "Kristoffer Zetterstrand", - "painting.minecraft.wasteland.title": "Wasteland", - "painting.minecraft.water.author": "Mojang", - "painting.minecraft.water.title": "Water", - "painting.minecraft.wind.author": "Mojang", - "painting.minecraft.wind.title": "Wind", - "painting.minecraft.wither.author": "Mojang", - "painting.minecraft.wither.title": "Wither", - "painting.random": "Random variant", - "parsing.bool.expected": "Expected boolean", - "parsing.bool.invalid": "Invalid boolean, expected 'true' or 'false' but found '%s'", - "parsing.double.expected": "Expected double", - "parsing.double.invalid": "Invalid double '%s'", - "parsing.expected": "Expected '%s'", - "parsing.float.expected": "Expected float", - "parsing.float.invalid": "Invalid float '%s'", - "parsing.int.expected": "Expected integer", - "parsing.int.invalid": "Invalid integer '%s'", - "parsing.long.expected": "Expected long", - "parsing.long.invalid": "Invalid long '%s'", - "parsing.quote.escape": "Invalid escape sequence '\\%s' in quoted string", - "parsing.quote.expected.end": "Unclosed quoted string", - "parsing.quote.expected.start": "Expected quote to start a string", - "particle.notFound": "Unknown particle: %s", - "permissions.requires.entity": "An entity is required to run this command here", - "permissions.requires.player": "A player is required to run this command here", - "potion.potency.0": "", - "potion.potency.1": "II", - "potion.potency.2": "III", - "potion.potency.3": "IV", - "potion.potency.4": "V", - "potion.potency.5": "VI", - "potion.whenDrank": "When Applied:", - "potion.withAmplifier": "%s %s", - "potion.withDuration": "%s (%s)", - "predicate.unknown": "Unknown predicate: %s", - "quickplay.error.invalid_identifier": "Could not find world with the provided identifier", - "quickplay.error.realm_connect": "Could not connect to Realm", - "quickplay.error.realm_permission": "Lacking permission to connect to this Realm", - "quickplay.error.title": "Failed to Quick Play", - "realms.missing.module.error.text": "Realms could not be opened right now, please try again later", - "realms.missing.snapshot.error.text": "Realms is currently not supported in snapshots", - "recipe.notFound": "Unknown recipe: %s", - "recipe.toast.description": "Check your recipe book", - "recipe.toast.title": "New Recipes Unlocked!", - "record.nowPlaying": "Now Playing: %s", - "recover_world.bug_tracker": "Report a Bug", - "recover_world.button": "Attempt to Recover", - "recover_world.done.failed": "Failed to recover from previous state.", - "recover_world.done.success": "Recovery was successful!", - "recover_world.done.title": "Recovery done", - "recover_world.issue.missing_file": "Missing file", - "recover_world.issue.none": "No issues", - "recover_world.message": "The following issues occurred while trying to read world folder \"%s\".\nIt might be possible to restore the world from an older state or you can report this issue on the bug tracker.", - "recover_world.no_fallback": "No state to recover from available", - "recover_world.restore": "Attempt to Restore", - "recover_world.restoring": "Attempting to restore world...", - "recover_world.state_entry": "State from %s: ", - "recover_world.state_entry.unknown": "unknown", - "recover_world.title": "Failed to load world", - "recover_world.warning": "Failed to load world summary", - "resourcePack.broken_assets": "BROKEN ASSETS DETECTED", - "resourcepack.downloading": "Downloading Resource Pack", - "resourcePack.high_contrast.name": "High Contrast", - "resourcePack.load_fail": "Resource reload failed", - "resourcePack.programmer_art.name": "Programmer Art", - "resourcepack.progress": "Downloading file (%s MB)...", - "resourcepack.requesting": "Making Request...", - "resourcePack.server.name": "World Specific Resources", - "resourcePack.title": "Select Resource Packs", - "resourcePack.vanilla.description": "The default look and feel of Minecraft", - "resourcePack.vanilla.name": "Default", - "screenshot.failure": "Couldn't save screenshot: %s", - "screenshot.success": "Saved screenshot as %s", - "selectServer.add": "Add Server", - "selectServer.defaultName": "Minecraft Server", - "selectServer.delete": "Delete", - "selectServer.deleteButton": "Delete", - "selectServer.deleteQuestion": "Are you sure you want to remove this server?", - "selectServer.deleteWarning": "'%s' will be lost forever! (A long time!)", - "selectServer.direct": "Direct Connection", - "selectServer.edit": "Edit", - "selectServer.hiddenAddress": "(Hidden)", - "selectServer.refresh": "Refresh", - "selectServer.select": "Join Server", - "selectServer.title": "Select Server", - "selectWorld.access_failure": "Failed to access world", - "selectWorld.allowCommands": "Allow Cheats", - "selectWorld.allowCommands.info": "Commands like /gamemode, /experience", - "selectWorld.backupEraseCache": "Erase Cached Data", - "selectWorld.backupJoinConfirmButton": "Create Backup and Load", - "selectWorld.backupJoinSkipButton": "I know what I'm doing!", - "selectWorld.backupQuestion.customized": "Customized worlds are no longer supported", - "selectWorld.backupQuestion.downgrade": "Downgrading a world is not supported", - "selectWorld.backupQuestion.experimental": "Worlds using Experimental Settings are not supported", - "selectWorld.backupQuestion.snapshot": "Do you really want to load this world?", - "selectWorld.backupWarning.customized": "Unfortunately, we do not support customized worlds in this version of Minecraft. We can still load this world and keep everything the way it was, but any newly generated terrain will no longer be customized. We're sorry for the inconvenience!", - "selectWorld.backupWarning.downgrade": "This world was last played in version %s; you are on version %s. Downgrading a world could cause corruption - we cannot guarantee that it will load or work. If you still want to continue, please make a backup.", - "selectWorld.backupWarning.experimental": "This world uses experimental settings that could stop working at any time. We cannot guarantee it will load or work. Here be dragons!", - "selectWorld.backupWarning.snapshot": "This world was last played in version %s; you are on version %s. Please make a backup in case you experience world corruptions.", - "selectWorld.bonusItems": "Bonus Chest", - "selectWorld.cheats": "Cheats", - "selectWorld.conversion": "Must be converted!", - "selectWorld.conversion.tooltip": "This world must be opened in an older version (like 1.6.4) to be safely converted", - "selectWorld.create": "Create New World", - "selectWorld.createDemo": "Play New Demo World", - "selectWorld.customizeType": "Customize", - "selectWorld.data_read": "Reading world data...", - "selectWorld.dataPacks": "Data Packs", - "selectWorld.delete": "Delete", - "selectWorld.delete_failure": "Failed to delete world", - "selectWorld.deleteButton": "Delete", - "selectWorld.deleteQuestion": "Are you sure you want to delete this world?", - "selectWorld.deleteWarning": "'%s' will be lost forever! (A long time!)", - "selectWorld.edit": "Edit", - "selectWorld.edit.backup": "Make Backup", - "selectWorld.edit.backupCreated": "Backed up: %s", - "selectWorld.edit.backupFailed": "Backup failed", - "selectWorld.edit.backupFolder": "Open Backups Folder", - "selectWorld.edit.backupSize": "size: %s MB", - "selectWorld.edit.export_worldgen_settings": "Export World Generation Settings", - "selectWorld.edit.export_worldgen_settings.failure": "Export failed", - "selectWorld.edit.export_worldgen_settings.success": "Exported", - "selectWorld.edit.openFolder": "Open World Folder", - "selectWorld.edit.optimize": "Optimize World", - "selectWorld.edit.resetIcon": "Reset Icon", - "selectWorld.edit.save": "Save", - "selectWorld.edit.title": "Edit World", - "selectWorld.enterName": "World Name", - "selectWorld.enterSeed": "Seed for the world generator", - "selectWorld.experimental": "Experimental", - "selectWorld.experimental.details": "Details", - "selectWorld.experimental.details.entry": "Required experimental features: %s", - "selectWorld.experimental.details.title": "Experimental feature requirements", - "selectWorld.experimental.message": "Be careful!\nThis configuration requires features that are still under development. Your world might crash, break, or not work with future updates.", - "selectWorld.experimental.title": "Experimental Features Warning", - "selectWorld.experiments": "Experiments", - "selectWorld.experiments.info": "Experiments are potential new features. Be careful as things might break. Experiments can't be turned off after world creation.", - "selectWorld.futureworld.error.text": "Something went wrong while trying to load a world from a future version. This was a risky operation to begin with; sorry it didn't work.", - "selectWorld.futureworld.error.title": "An error occurred!", - "selectWorld.gameMode": "Game Mode", - "selectWorld.gameMode.adventure": "Adventure", - "selectWorld.gameMode.adventure.info": "Same as Survival Mode, but blocks can't be added or removed.", - "selectWorld.gameMode.adventure.line1": "Same as Survival Mode, but blocks can't", - "selectWorld.gameMode.adventure.line2": "be added or removed", - "selectWorld.gameMode.creative": "Creative", - "selectWorld.gameMode.creative.info": "Create, build, and explore without limits. You can fly, have endless materials, and can't be hurt by monsters.", - "selectWorld.gameMode.creative.line1": "Unlimited resources, free flying and", - "selectWorld.gameMode.creative.line2": "destroy blocks instantly", - "selectWorld.gameMode.hardcore": "Hardcore", - "selectWorld.gameMode.hardcore.info": "Survival Mode locked to 'Hard' difficulty. You can't respawn if you die.", - "selectWorld.gameMode.hardcore.line1": "Same as Survival Mode, locked at hardest", - "selectWorld.gameMode.hardcore.line2": "difficulty, and one life only", - "selectWorld.gameMode.spectator": "Spectator", - "selectWorld.gameMode.spectator.info": "You can look but don't touch.", - "selectWorld.gameMode.spectator.line1": "You can look but don't touch", - "selectWorld.gameMode.spectator.line2": "", - "selectWorld.gameMode.survival": "Survival", - "selectWorld.gameMode.survival.info": "Explore a mysterious world where you build, collect, craft, and fight monsters.", - "selectWorld.gameMode.survival.line1": "Search for resources, craft, gain", - "selectWorld.gameMode.survival.line2": "levels, health and hunger", - "selectWorld.gameRules": "Game Rules", - "selectWorld.import_worldgen_settings": "Import Settings", - "selectWorld.import_worldgen_settings.failure": "Error importing settings", - "selectWorld.import_worldgen_settings.select_file": "Select settings file (.json)", - "selectWorld.incompatible_series": "Created by an incompatible version", - "selectWorld.incompatible.description": "This world cannot be opened in this version.\nIt was last played in version %s.", - "selectWorld.incompatible.info": "Incompatible version: %s", - "selectWorld.incompatible.title": "Incompatible version", - "selectWorld.incompatible.tooltip": "This world cannot be opened because it was created by an incompatible version.", - "selectWorld.load_folder_access": "Unable to read or access folder where game worlds are saved!", - "selectWorld.loading_list": "Loading World List", - "selectWorld.locked": "Locked by another running instance of Minecraft", - "selectWorld.mapFeatures": "Generate Structures", - "selectWorld.mapFeatures.info": "Villages, Shipwrecks, etc.", - "selectWorld.mapType": "World Type", - "selectWorld.mapType.normal": "Normal", - "selectWorld.moreWorldOptions": "More World Options...", - "selectWorld.newWorld": "New World", - "selectWorld.recreate": "Re-Create", - "selectWorld.recreate.customized.text": "Customized worlds are no longer supported in this version of Minecraft. We can try to recreate it with the same seed and properties, but any terrain customizations will be lost. We're sorry for the inconvenience!", - "selectWorld.recreate.customized.title": "Customized worlds are no longer supported", - "selectWorld.recreate.error.text": "Something went wrong while trying to recreate a world.", - "selectWorld.recreate.error.title": "An error occurred!", - "selectWorld.resource_load": "Preparing Resources...", - "selectWorld.resultFolder": "Will be saved in:", - "selectWorld.search": "search for worlds", - "selectWorld.seedInfo": "Leave blank for a random seed", - "selectWorld.select": "Play Selected World", - "selectWorld.targetFolder": "Save folder: %s", - "selectWorld.title": "Select World", - "selectWorld.tooltip.fromNewerVersion1": "World was saved in a newer version,", - "selectWorld.tooltip.fromNewerVersion2": "loading this world could cause problems!", - "selectWorld.tooltip.snapshot1": "Don't forget to back up this world", - "selectWorld.tooltip.snapshot2": "before you load it in this snapshot.", - "selectWorld.unable_to_load": "Unable to load worlds", - "selectWorld.version": "Version:", - "selectWorld.versionJoinButton": "Load Anyway", - "selectWorld.versionQuestion": "Do you really want to load this world?", - "selectWorld.versionUnknown": "unknown", - "selectWorld.versionWarning": "This world was last played in version %s and loading it in this version could cause corruption!", - "selectWorld.warning.deprecated.question": "Some features used are deprecated and will stop working in the future. Do you wish to proceed?", - "selectWorld.warning.deprecated.title": "Warning! These settings are using deprecated features", - "selectWorld.warning.experimental.question": "These settings are experimental and could one day stop working. Do you wish to proceed?", - "selectWorld.warning.experimental.title": "Warning! These settings are using experimental features", - "selectWorld.world": "World", - "sign.edit": "Edit Sign Message", - "sleep.not_possible": "No amount of rest can pass this night", - "sleep.players_sleeping": "%s/%s players sleeping", - "sleep.skipping_night": "Sleeping through this night", - "slot.unknown": "Unknown slot '%s'", - "soundCategory.ambient": "Ambient/Environment", - "soundCategory.block": "Blocks", - "soundCategory.hostile": "Hostile Creatures", - "soundCategory.master": "Master Volume", - "soundCategory.music": "Music", - "soundCategory.neutral": "Friendly Creatures", - "soundCategory.player": "Players", - "soundCategory.record": "Jukebox/Note Blocks", - "soundCategory.voice": "Voice/Speech", - "soundCategory.weather": "Weather", - "spectatorMenu.close": "Close Menu", - "spectatorMenu.next_page": "Next Page", - "spectatorMenu.previous_page": "Previous Page", - "spectatorMenu.root.prompt": "Press a key to select a command, and again to use it.", - "spectatorMenu.team_teleport": "Teleport to Team Member", - "spectatorMenu.team_teleport.prompt": "Select a team to teleport to", - "spectatorMenu.teleport": "Teleport to Player", - "spectatorMenu.teleport.prompt": "Select a player to teleport to", - "stat_type.minecraft.broken": "Times Broken", - "stat_type.minecraft.crafted": "Times Crafted", - "stat_type.minecraft.dropped": "Dropped", - "stat_type.minecraft.killed": "You killed %s %s", - "stat_type.minecraft.killed_by": "%s killed you %s time(s)", - "stat_type.minecraft.killed_by.none": "You have never been killed by %s", - "stat_type.minecraft.killed.none": "You have never killed %s", - "stat_type.minecraft.mined": "Times Mined", - "stat_type.minecraft.picked_up": "Picked Up", - "stat_type.minecraft.used": "Times Used", - "stat.generalButton": "General", - "stat.itemsButton": "Items", - "stat.minecraft.animals_bred": "Animals Bred", - "stat.minecraft.aviate_one_cm": "Distance by Elytra", - "stat.minecraft.bell_ring": "Bells Rung", - "stat.minecraft.boat_one_cm": "Distance by Boat", - "stat.minecraft.clean_armor": "Armor Pieces Cleaned", - "stat.minecraft.clean_banner": "Banners Cleaned", - "stat.minecraft.clean_shulker_box": "Shulker Boxes Cleaned", - "stat.minecraft.climb_one_cm": "Distance Climbed", - "stat.minecraft.crouch_one_cm": "Distance Crouched", - "stat.minecraft.damage_absorbed": "Damage Absorbed", - "stat.minecraft.damage_blocked_by_shield": "Damage Blocked by Shield", - "stat.minecraft.damage_dealt": "Damage Dealt", - "stat.minecraft.damage_dealt_absorbed": "Damage Dealt (Absorbed)", - "stat.minecraft.damage_dealt_resisted": "Damage Dealt (Resisted)", - "stat.minecraft.damage_resisted": "Damage Resisted", - "stat.minecraft.damage_taken": "Damage Taken", - "stat.minecraft.deaths": "Number of Deaths", - "stat.minecraft.drop": "Items Dropped", - "stat.minecraft.eat_cake_slice": "Cake Slices Eaten", - "stat.minecraft.enchant_item": "Items Enchanted", - "stat.minecraft.fall_one_cm": "Distance Fallen", - "stat.minecraft.fill_cauldron": "Cauldrons Filled", - "stat.minecraft.fish_caught": "Fish Caught", - "stat.minecraft.fly_one_cm": "Distance Flown", - "stat.minecraft.horse_one_cm": "Distance by Horse", - "stat.minecraft.inspect_dispenser": "Dispensers Searched", - "stat.minecraft.inspect_dropper": "Droppers Searched", - "stat.minecraft.inspect_hopper": "Hoppers Searched", - "stat.minecraft.interact_with_anvil": "Interactions with Anvil", - "stat.minecraft.interact_with_beacon": "Interactions with Beacon", - "stat.minecraft.interact_with_blast_furnace": "Interactions with Blast Furnace", - "stat.minecraft.interact_with_brewingstand": "Interactions with Brewing Stand", - "stat.minecraft.interact_with_campfire": "Interactions with Campfire", - "stat.minecraft.interact_with_cartography_table": "Interactions with Cartography Table", - "stat.minecraft.interact_with_crafting_table": "Interactions with Crafting Table", - "stat.minecraft.interact_with_furnace": "Interactions with Furnace", - "stat.minecraft.interact_with_grindstone": "Interactions with Grindstone", - "stat.minecraft.interact_with_lectern": "Interactions with Lectern", - "stat.minecraft.interact_with_loom": "Interactions with Loom", - "stat.minecraft.interact_with_smithing_table": "Interactions with Smithing Table", - "stat.minecraft.interact_with_smoker": "Interactions with Smoker", - "stat.minecraft.interact_with_stonecutter": "Interactions with Stonecutter", - "stat.minecraft.jump": "Jumps", - "stat.minecraft.junk_fished": "Junk Fished", - "stat.minecraft.leave_game": "Games Quit", - "stat.minecraft.minecart_one_cm": "Distance by Minecart", - "stat.minecraft.mob_kills": "Mob Kills", - "stat.minecraft.open_barrel": "Barrels Opened", - "stat.minecraft.open_chest": "Chests Opened", - "stat.minecraft.open_enderchest": "Ender Chests Opened", - "stat.minecraft.open_shulker_box": "Shulker Boxes Opened", - "stat.minecraft.pig_one_cm": "Distance by Pig", - "stat.minecraft.play_noteblock": "Note Blocks Played", - "stat.minecraft.play_record": "Music Discs Played", - "stat.minecraft.play_time": "Time Played", - "stat.minecraft.player_kills": "Player Kills", - "stat.minecraft.pot_flower": "Plants Potted", - "stat.minecraft.raid_trigger": "Raids Triggered", - "stat.minecraft.raid_win": "Raids Won", - "stat.minecraft.ring_bell": "Bells Rung", - "stat.minecraft.sleep_in_bed": "Times Slept in a Bed", - "stat.minecraft.sneak_time": "Sneak Time", - "stat.minecraft.sprint_one_cm": "Distance Sprinted", - "stat.minecraft.strider_one_cm": "Distance by Strider", - "stat.minecraft.swim_one_cm": "Distance Swum", - "stat.minecraft.talked_to_villager": "Talked to Villagers", - "stat.minecraft.target_hit": "Targets Hit", - "stat.minecraft.time_since_death": "Time Since Last Death", - "stat.minecraft.time_since_rest": "Time Since Last Rest", - "stat.minecraft.total_world_time": "Time with World Open", - "stat.minecraft.traded_with_villager": "Traded with Villagers", - "stat.minecraft.treasure_fished": "Treasure Fished", - "stat.minecraft.trigger_trapped_chest": "Trapped Chests Triggered", - "stat.minecraft.tune_noteblock": "Note Blocks Tuned", - "stat.minecraft.use_cauldron": "Water Taken from Cauldron", - "stat.minecraft.walk_on_water_one_cm": "Distance Walked on Water", - "stat.minecraft.walk_one_cm": "Distance Walked", - "stat.minecraft.walk_under_water_one_cm": "Distance Walked under Water", - "stat.mobsButton": "Mobs", - "stats.none": "-", - "stats.tooltip.type.statistic": "Statistic", - "structure_block.button.detect_size": "DETECT", - "structure_block.button.load": "LOAD", - "structure_block.button.save": "SAVE", - "structure_block.custom_data": "Custom Data Tag Name", - "structure_block.detect_size": "Detect Structure Size and Position:", - "structure_block.hover.corner": "Corner: %s", - "structure_block.hover.data": "Data: %s", - "structure_block.hover.load": "Load: %s", - "structure_block.hover.save": "Save: %s", - "structure_block.include_entities": "Include Entities:", - "structure_block.integrity": "Structure Integrity and Seed", - "structure_block.integrity.integrity": "Structure Integrity", - "structure_block.integrity.seed": "Structure Seed", - "structure_block.invalid_structure_name": "Invalid structure name '%s'", - "structure_block.load_not_found": "Structure '%s' is not available", - "structure_block.load_prepare": "Structure '%s' position prepared", - "structure_block.load_success": "Structure loaded from '%s'", - "structure_block.mode_info.corner": "Corner Mode - Placement and Size Marker", - "structure_block.mode_info.data": "Data Mode - Game Logic Marker", - "structure_block.mode_info.load": "Load Mode - Load from File", - "structure_block.mode_info.save": "Save Mode - Write to File", - "structure_block.mode.corner": "Corner", - "structure_block.mode.data": "Data", - "structure_block.mode.load": "Load", - "structure_block.mode.save": "Save", - "structure_block.position": "Relative Position", - "structure_block.position.x": "relative Position x", - "structure_block.position.y": "relative position y", - "structure_block.position.z": "relative position z", - "structure_block.save_failure": "Unable to save structure '%s'", - "structure_block.save_success": "Structure saved as '%s'", - "structure_block.show_air": "Show Invisible Blocks:", - "structure_block.show_boundingbox": "Show Bounding Box:", - "structure_block.size": "Structure Size", - "structure_block.size_failure": "Unable to detect structure size. Add corners with matching structure names", - "structure_block.size_success": "Size successfully detected for '%s'", - "structure_block.size.x": "structure size x", - "structure_block.size.y": "structure size y", - "structure_block.size.z": "structure size z", - "structure_block.structure_name": "Structure Name", - "subtitles.ambient.cave": "Eerie noise", - "subtitles.block.amethyst_block.chime": "Amethyst chimes", - "subtitles.block.amethyst_block.resonate": "Amethyst resonates", - "subtitles.block.anvil.destroy": "Anvil destroyed", - "subtitles.block.anvil.land": "Anvil landed", - "subtitles.block.anvil.use": "Anvil used", - "subtitles.block.barrel.close": "Barrel closes", - "subtitles.block.barrel.open": "Barrel opens", - "subtitles.block.beacon.activate": "Beacon activates", - "subtitles.block.beacon.ambient": "Beacon hums", - "subtitles.block.beacon.deactivate": "Beacon deactivates", - "subtitles.block.beacon.power_select": "Beacon power selected", - "subtitles.block.beehive.drip": "Honey drips", - "subtitles.block.beehive.enter": "Bee enters hive", - "subtitles.block.beehive.exit": "Bee leaves hive", - "subtitles.block.beehive.shear": "Shears scrape", - "subtitles.block.beehive.work": "Bees work", - "subtitles.block.bell.resonate": "Bell resonates", - "subtitles.block.bell.use": "Bell rings", - "subtitles.block.big_dripleaf.tilt_down": "Dripleaf tilts down", - "subtitles.block.big_dripleaf.tilt_up": "Dripleaf tilts up", - "subtitles.block.blastfurnace.fire_crackle": "Blast Furnace crackles", - "subtitles.block.brewing_stand.brew": "Brewing Stand bubbles", - "subtitles.block.bubble_column.bubble_pop": "Bubbles pop", - "subtitles.block.bubble_column.upwards_ambient": "Bubbles flow", - "subtitles.block.bubble_column.upwards_inside": "Bubbles woosh", - "subtitles.block.bubble_column.whirlpool_ambient": "Bubbles whirl", - "subtitles.block.bubble_column.whirlpool_inside": "Bubbles zoom", - "subtitles.block.button.click": "Button clicks", - "subtitles.block.cake.add_candle": "Cake squishes", - "subtitles.block.campfire.crackle": "Campfire crackles", - "subtitles.block.candle.crackle": "Candle crackles", - "subtitles.block.chest.close": "Chest closes", - "subtitles.block.chest.locked": "Chest locked", - "subtitles.block.chest.open": "Chest opens", - "subtitles.block.chorus_flower.death": "Chorus Flower withers", - "subtitles.block.chorus_flower.grow": "Chorus Flower grows", - "subtitles.block.comparator.click": "Comparator clicks", - "subtitles.block.composter.empty": "Composter emptied", - "subtitles.block.composter.fill": "Composter filled", - "subtitles.block.composter.ready": "Composter composts", - "subtitles.block.conduit.activate": "Conduit activates", - "subtitles.block.conduit.ambient": "Conduit pulses", - "subtitles.block.conduit.attack.target": "Conduit attacks", - "subtitles.block.conduit.deactivate": "Conduit deactivates", - "subtitles.block.copper_bulb.turn_off": "Copper Bulb turns off", - "subtitles.block.copper_bulb.turn_on": "Copper Bulb turns on", - "subtitles.block.copper_trapdoor.close": "Trapdoor closes", - "subtitles.block.copper_trapdoor.open": "Trapdoor opens", - "subtitles.block.crafter.craft": "Crafter crafts", - "subtitles.block.crafter.fail": "Crafter fails crafting", - "subtitles.block.decorated_pot.insert": "Decorated Pot fills", - "subtitles.block.decorated_pot.insert_fail": "Decorated Pot wobbles", - "subtitles.block.decorated_pot.shatter": "Decorated Pot shatters", - "subtitles.block.dispenser.dispense": "Dispensed item", - "subtitles.block.dispenser.fail": "Dispenser failed", - "subtitles.block.door.toggle": "Door creaks", - "subtitles.block.enchantment_table.use": "Enchanting Table used", - "subtitles.block.end_portal_frame.fill": "Eye of Ender attaches", - "subtitles.block.end_portal.spawn": "End Portal opens", - "subtitles.block.fence_gate.toggle": "Fence Gate creaks", - "subtitles.block.fire.ambient": "Fire crackles", - "subtitles.block.fire.extinguish": "Fire extinguished", - "subtitles.block.frogspawn.hatch": "Tadpole hatches", - "subtitles.block.furnace.fire_crackle": "Furnace crackles", - "subtitles.block.generic.break": "Block broken", - "subtitles.block.generic.footsteps": "Footsteps", - "subtitles.block.generic.hit": "Block breaking", - "subtitles.block.generic.place": "Block placed", - "subtitles.block.grindstone.use": "Grindstone used", - "subtitles.block.growing_plant.crop": "Plant cropped", - "subtitles.block.hanging_sign.waxed_interact_fail": "Sign wobbles", - "subtitles.block.honey_block.slide": "Sliding down a honey block", - "subtitles.block.iron_trapdoor.close": "Trapdoor closes", - "subtitles.block.iron_trapdoor.open": "Trapdoor opens", - "subtitles.block.lava.ambient": "Lava pops", - "subtitles.block.lava.extinguish": "Lava hisses", - "subtitles.block.lever.click": "Lever clicks", - "subtitles.block.note_block.note": "Note Block plays", - "subtitles.block.piston.move": "Piston moves", - "subtitles.block.pointed_dripstone.drip_lava": "Lava drips", - "subtitles.block.pointed_dripstone.drip_lava_into_cauldron": "Lava drips into Cauldron", - "subtitles.block.pointed_dripstone.drip_water": "Water drips", - "subtitles.block.pointed_dripstone.drip_water_into_cauldron": "Water drips into Cauldron", - "subtitles.block.pointed_dripstone.land": "Stalactite crashes down", - "subtitles.block.portal.ambient": "Portal whooshes", - "subtitles.block.portal.travel": "Portal noise fades", - "subtitles.block.portal.trigger": "Portal noise intensifies", - "subtitles.block.pressure_plate.click": "Pressure Plate clicks", - "subtitles.block.pumpkin.carve": "Shears carve", - "subtitles.block.redstone_torch.burnout": "Torch fizzes", - "subtitles.block.respawn_anchor.ambient": "Portal whooshes", - "subtitles.block.respawn_anchor.charge": "Respawn Anchor is charged", - "subtitles.block.respawn_anchor.deplete": "Respawn Anchor depletes", - "subtitles.block.respawn_anchor.set_spawn": "Respawn Anchor sets spawn", - "subtitles.block.sculk_catalyst.bloom": "Sculk Catalyst blooms", - "subtitles.block.sculk_sensor.clicking": "Sculk Sensor starts clicking", - "subtitles.block.sculk_sensor.clicking_stop": "Sculk Sensor stops clicking", - "subtitles.block.sculk_shrieker.shriek": "Sculk Shrieker shrieks", - "subtitles.block.sculk.charge": "Sculk bubbles", - "subtitles.block.sculk.spread": "Sculk spreads", - "subtitles.block.shulker_box.close": "Shulker closes", - "subtitles.block.shulker_box.open": "Shulker opens", - "subtitles.block.sign.waxed_interact_fail": "Sign wobbles", - "subtitles.block.smithing_table.use": "Smithing Table used", - "subtitles.block.smoker.smoke": "Smoker smokes", - "subtitles.block.sniffer_egg.crack": "Sniffer Egg cracks", - "subtitles.block.sniffer_egg.hatch": "Sniffer Egg hatches", - "subtitles.block.sniffer_egg.plop": "Sniffer plops", - "subtitles.block.sponge.absorb": "Sponge sucks", - "subtitles.block.sweet_berry_bush.pick_berries": "Berries pop", - "subtitles.block.trapdoor.toggle": "Trapdoor creaks", - "subtitles.block.trial_spawner.ambient": "Trial Spawner crackles", - "subtitles.block.trial_spawner.close_shutter": "Trial Spawner closes", - "subtitles.block.trial_spawner.detect_player": "Trial Spawner charges up", - "subtitles.block.trial_spawner.eject_item": "Trial Spawner ejects items", - "subtitles.block.trial_spawner.open_shutter": "Trial Spawner opens", - "subtitles.block.trial_spawner.spawn_mob": "Mob spawns", - "subtitles.block.tripwire.attach": "Tripwire attaches", - "subtitles.block.tripwire.click": "Tripwire clicks", - "subtitles.block.tripwire.detach": "Tripwire detaches", - "subtitles.block.water.ambient": "Water flows", - "subtitles.chiseled_bookshelf.insert": "Book placed", - "subtitles.chiseled_bookshelf.insert_enchanted": "Enchanted Book placed", - "subtitles.chiseled_bookshelf.take": "Book taken", - "subtitles.chiseled_bookshelf.take_enchanted": "Enchanted Book taken", - "subtitles.enchant.thorns.hit": "Thorns prick", - "subtitles.entity.allay.ambient_with_item": "Allay seeks", - "subtitles.entity.allay.ambient_without_item": "Allay yearns", - "subtitles.entity.allay.death": "Allay dies", - "subtitles.entity.allay.hurt": "Allay hurts", - "subtitles.entity.allay.item_given": "Allay chortles", - "subtitles.entity.allay.item_taken": "Allay allays", - "subtitles.entity.allay.item_thrown": "Allay tosses", - "subtitles.entity.armor_stand.fall": "Something fell", - "subtitles.entity.arrow.hit": "Arrow hits", - "subtitles.entity.arrow.hit_player": "Player hit", - "subtitles.entity.arrow.shoot": "Arrow fired", - "subtitles.entity.axolotl.attack": "Axolotl attacks", - "subtitles.entity.axolotl.death": "Axolotl dies", - "subtitles.entity.axolotl.hurt": "Axolotl hurts", - "subtitles.entity.axolotl.idle_air": "Axolotl chirps", - "subtitles.entity.axolotl.idle_water": "Axolotl chirps", - "subtitles.entity.axolotl.splash": "Axolotl splashes", - "subtitles.entity.axolotl.swim": "Axolotl swims", - "subtitles.entity.bat.ambient": "Bat screeches", - "subtitles.entity.bat.death": "Bat dies", - "subtitles.entity.bat.hurt": "Bat hurts", - "subtitles.entity.bat.takeoff": "Bat takes off", - "subtitles.entity.bee.ambient": "Bee buzzes", - "subtitles.entity.bee.death": "Bee dies", - "subtitles.entity.bee.hurt": "Bee hurts", - "subtitles.entity.bee.loop": "Bee buzzes", - "subtitles.entity.bee.loop_aggressive": "Bee buzzes angrily", - "subtitles.entity.bee.pollinate": "Bee buzzes happily", - "subtitles.entity.bee.sting": "Bee stings", - "subtitles.entity.blaze.ambient": "Blaze breathes", - "subtitles.entity.blaze.burn": "Blaze crackles", - "subtitles.entity.blaze.death": "Blaze dies", - "subtitles.entity.blaze.hurt": "Blaze hurts", - "subtitles.entity.blaze.shoot": "Blaze shoots", - "subtitles.entity.boat.paddle_land": "Rowing", - "subtitles.entity.boat.paddle_water": "Rowing", - "subtitles.entity.breeze.death": "Breeze dies", - "subtitles.entity.breeze.hurt": "Breeze hurts", - "subtitles.entity.breeze.idle_air": "Breeze flies", - "subtitles.entity.breeze.idle_ground": "Breeze whirs", - "subtitles.entity.breeze.inhale": "Breeze inhales", - "subtitles.entity.breeze.jump": "Breeze jumps", - "subtitles.entity.breeze.land": "Breeze lands", - "subtitles.entity.breeze.shoot": "Breeze shoots", - "subtitles.entity.breeze.slide": "Breeze slides", - "subtitles.entity.camel.ambient": "Camel grunts", - "subtitles.entity.camel.dash": "Camel yeets", - "subtitles.entity.camel.dash_ready": "Camel recovers", - "subtitles.entity.camel.death": "Camel dies", - "subtitles.entity.camel.eat": "Camel eats", - "subtitles.entity.camel.hurt": "Camel hurts", - "subtitles.entity.camel.saddle": "Saddle equips", - "subtitles.entity.camel.sit": "Camel sits down", - "subtitles.entity.camel.stand": "Camel stands up", - "subtitles.entity.camel.step": "Camel steps", - "subtitles.entity.camel.step_sand": "Camel sands", - "subtitles.entity.cat.ambient": "Cat meows", - "subtitles.entity.cat.beg_for_food": "Cat begs", - "subtitles.entity.cat.death": "Cat dies", - "subtitles.entity.cat.eat": "Cat eats", - "subtitles.entity.cat.hiss": "Cat hisses", - "subtitles.entity.cat.hurt": "Cat hurts", - "subtitles.entity.cat.purr": "Cat purrs", - "subtitles.entity.chicken.ambient": "Chicken clucks", - "subtitles.entity.chicken.death": "Chicken dies", - "subtitles.entity.chicken.egg": "Chicken plops", - "subtitles.entity.chicken.hurt": "Chicken hurts", - "subtitles.entity.cod.death": "Cod dies", - "subtitles.entity.cod.flop": "Cod flops", - "subtitles.entity.cod.hurt": "Cod hurts", - "subtitles.entity.cow.ambient": "Cow moos", - "subtitles.entity.cow.death": "Cow dies", - "subtitles.entity.cow.hurt": "Cow hurts", - "subtitles.entity.cow.milk": "Cow gets milked", - "subtitles.entity.creeper.death": "Creeper dies", - "subtitles.entity.creeper.hurt": "Creeper hurts", - "subtitles.entity.creeper.primed": "Creeper hisses", - "subtitles.entity.dolphin.ambient": "Dolphin chirps", - "subtitles.entity.dolphin.ambient_water": "Dolphin whistles", - "subtitles.entity.dolphin.attack": "Dolphin attacks", - "subtitles.entity.dolphin.death": "Dolphin dies", - "subtitles.entity.dolphin.eat": "Dolphin eats", - "subtitles.entity.dolphin.hurt": "Dolphin hurts", - "subtitles.entity.dolphin.jump": "Dolphin jumps", - "subtitles.entity.dolphin.play": "Dolphin plays", - "subtitles.entity.dolphin.splash": "Dolphin splashes", - "subtitles.entity.dolphin.swim": "Dolphin swims", - "subtitles.entity.donkey.ambient": "Donkey hee-haws", - "subtitles.entity.donkey.angry": "Donkey neighs", - "subtitles.entity.donkey.chest": "Donkey Chest equips", - "subtitles.entity.donkey.death": "Donkey dies", - "subtitles.entity.donkey.eat": "Donkey eats", - "subtitles.entity.donkey.hurt": "Donkey hurts", - "subtitles.entity.drowned.ambient": "Drowned gurgles", - "subtitles.entity.drowned.ambient_water": "Drowned gurgles", - "subtitles.entity.drowned.death": "Drowned dies", - "subtitles.entity.drowned.hurt": "Drowned hurts", - "subtitles.entity.drowned.shoot": "Drowned throws Trident", - "subtitles.entity.drowned.step": "Drowned steps", - "subtitles.entity.drowned.swim": "Drowned swims", - "subtitles.entity.egg.throw": "Egg flies", - "subtitles.entity.elder_guardian.ambient": "Elder Guardian moans", - "subtitles.entity.elder_guardian.ambient_land": "Elder Guardian flaps", - "subtitles.entity.elder_guardian.curse": "Elder Guardian curses", - "subtitles.entity.elder_guardian.death": "Elder Guardian dies", - "subtitles.entity.elder_guardian.flop": "Elder Guardian flops", - "subtitles.entity.elder_guardian.hurt": "Elder Guardian hurts", - "subtitles.entity.ender_dragon.ambient": "Dragon roars", - "subtitles.entity.ender_dragon.death": "Dragon dies", - "subtitles.entity.ender_dragon.flap": "Dragon flaps", - "subtitles.entity.ender_dragon.growl": "Dragon growls", - "subtitles.entity.ender_dragon.hurt": "Dragon hurts", - "subtitles.entity.ender_dragon.shoot": "Dragon shoots", - "subtitles.entity.ender_eye.death": "Eye of Ender falls", - "subtitles.entity.ender_eye.launch": "Eye of Ender shoots", - "subtitles.entity.ender_pearl.throw": "Ender Pearl flies", - "subtitles.entity.enderman.ambient": "Enderman vwoops", - "subtitles.entity.enderman.death": "Enderman dies", - "subtitles.entity.enderman.hurt": "Enderman hurts", - "subtitles.entity.enderman.scream": "Enderman screams", - "subtitles.entity.enderman.stare": "Enderman cries out", - "subtitles.entity.enderman.teleport": "Enderman teleports", - "subtitles.entity.endermite.ambient": "Endermite scuttles", - "subtitles.entity.endermite.death": "Endermite dies", - "subtitles.entity.endermite.hurt": "Endermite hurts", - "subtitles.entity.evoker_fangs.attack": "Fangs snap", - "subtitles.entity.evoker.ambient": "Evoker murmurs", - "subtitles.entity.evoker.cast_spell": "Evoker casts spell", - "subtitles.entity.evoker.celebrate": "Evoker cheers", - "subtitles.entity.evoker.death": "Evoker dies", - "subtitles.entity.evoker.hurt": "Evoker hurts", - "subtitles.entity.evoker.prepare_attack": "Evoker prepares attack", - "subtitles.entity.evoker.prepare_summon": "Evoker prepares summoning", - "subtitles.entity.evoker.prepare_wololo": "Evoker prepares charming", - "subtitles.entity.experience_orb.pickup": "Experience gained", - "subtitles.entity.firework_rocket.blast": "Firework blasts", - "subtitles.entity.firework_rocket.launch": "Firework launches", - "subtitles.entity.firework_rocket.twinkle": "Firework twinkles", - "subtitles.entity.fishing_bobber.retrieve": "Bobber retrieved", - "subtitles.entity.fishing_bobber.splash": "Fishing Bobber splashes", - "subtitles.entity.fishing_bobber.throw": "Bobber thrown", - "subtitles.entity.fox.aggro": "Fox angers", - "subtitles.entity.fox.ambient": "Fox squeaks", - "subtitles.entity.fox.bite": "Fox bites", - "subtitles.entity.fox.death": "Fox dies", - "subtitles.entity.fox.eat": "Fox eats", - "subtitles.entity.fox.hurt": "Fox hurts", - "subtitles.entity.fox.screech": "Fox screeches", - "subtitles.entity.fox.sleep": "Fox snores", - "subtitles.entity.fox.sniff": "Fox sniffs", - "subtitles.entity.fox.spit": "Fox spits", - "subtitles.entity.fox.teleport": "Fox teleports", - "subtitles.entity.frog.ambient": "Frog croaks", - "subtitles.entity.frog.death": "Frog dies", - "subtitles.entity.frog.eat": "Frog eats", - "subtitles.entity.frog.hurt": "Frog hurts", - "subtitles.entity.frog.lay_spawn": "Frog lays spawn", - "subtitles.entity.frog.long_jump": "Frog jumps", - "subtitles.entity.generic.big_fall": "Something fell", - "subtitles.entity.generic.burn": "Burning", - "subtitles.entity.generic.death": "Dying", - "subtitles.entity.generic.drink": "Sipping", - "subtitles.entity.generic.eat": "Eating", - "subtitles.entity.generic.explode": "Explosion", - "subtitles.entity.generic.extinguish_fire": "Fire extinguishes", - "subtitles.entity.generic.hurt": "Something hurts", - "subtitles.entity.generic.small_fall": "Something trips", - "subtitles.entity.generic.splash": "Splashing", - "subtitles.entity.generic.swim": "Swimming", - "subtitles.entity.generic.wind_burst": "Wind Charge bursts", - "subtitles.entity.ghast.ambient": "Ghast cries", - "subtitles.entity.ghast.death": "Ghast dies", - "subtitles.entity.ghast.hurt": "Ghast hurts", - "subtitles.entity.ghast.shoot": "Ghast shoots", - "subtitles.entity.glow_item_frame.add_item": "Glow Item Frame fills", - "subtitles.entity.glow_item_frame.break": "Glow Item Frame breaks", - "subtitles.entity.glow_item_frame.place": "Glow Item Frame placed", - "subtitles.entity.glow_item_frame.remove_item": "Glow Item Frame empties", - "subtitles.entity.glow_item_frame.rotate_item": "Glow Item Frame clicks", - "subtitles.entity.glow_squid.ambient": "Glow Squid swims", - "subtitles.entity.glow_squid.death": "Glow Squid dies", - "subtitles.entity.glow_squid.hurt": "Glow Squid hurts", - "subtitles.entity.glow_squid.squirt": "Glow Squid shoots ink", - "subtitles.entity.goat.ambient": "Goat bleats", - "subtitles.entity.goat.death": "Goat dies", - "subtitles.entity.goat.eat": "Goat eats", - "subtitles.entity.goat.horn_break": "Goat Horn breaks off", - "subtitles.entity.goat.hurt": "Goat hurts", - "subtitles.entity.goat.long_jump": "Goat leaps", - "subtitles.entity.goat.milk": "Goat gets milked", - "subtitles.entity.goat.prepare_ram": "Goat stomps", - "subtitles.entity.goat.ram_impact": "Goat rams", - "subtitles.entity.goat.screaming.ambient": "Goat bellows", - "subtitles.entity.goat.step": "Goat steps", - "subtitles.entity.guardian.ambient": "Guardian moans", - "subtitles.entity.guardian.ambient_land": "Guardian flaps", - "subtitles.entity.guardian.attack": "Guardian shoots", - "subtitles.entity.guardian.death": "Guardian dies", - "subtitles.entity.guardian.flop": "Guardian flops", - "subtitles.entity.guardian.hurt": "Guardian hurts", - "subtitles.entity.hoglin.ambient": "Hoglin growls", - "subtitles.entity.hoglin.angry": "Hoglin growls angrily", - "subtitles.entity.hoglin.attack": "Hoglin attacks", - "subtitles.entity.hoglin.converted_to_zombified": "Hoglin converts to Zoglin", - "subtitles.entity.hoglin.death": "Hoglin dies", - "subtitles.entity.hoglin.hurt": "Hoglin hurts", - "subtitles.entity.hoglin.retreat": "Hoglin retreats", - "subtitles.entity.hoglin.step": "Hoglin steps", - "subtitles.entity.horse.ambient": "Horse neighs", - "subtitles.entity.horse.angry": "Horse neighs", - "subtitles.entity.horse.armor": "Horse armor equips", - "subtitles.entity.horse.breathe": "Horse breathes", - "subtitles.entity.horse.death": "Horse dies", - "subtitles.entity.horse.eat": "Horse eats", - "subtitles.entity.horse.gallop": "Horse gallops", - "subtitles.entity.horse.hurt": "Horse hurts", - "subtitles.entity.horse.jump": "Horse jumps", - "subtitles.entity.horse.saddle": "Saddle equips", - "subtitles.entity.husk.ambient": "Husk groans", - "subtitles.entity.husk.converted_to_zombie": "Husk converts to Zombie", - "subtitles.entity.husk.death": "Husk dies", - "subtitles.entity.husk.hurt": "Husk hurts", - "subtitles.entity.illusioner.ambient": "Illusioner murmurs", - "subtitles.entity.illusioner.cast_spell": "Illusioner casts spell", - "subtitles.entity.illusioner.death": "Illusioner dies", - "subtitles.entity.illusioner.hurt": "Illusioner hurts", - "subtitles.entity.illusioner.mirror_move": "Illusioner displaces", - "subtitles.entity.illusioner.prepare_blindness": "Illusioner prepares blindness", - "subtitles.entity.illusioner.prepare_mirror": "Illusioner prepares mirror image", - "subtitles.entity.iron_golem.attack": "Iron Golem attacks", - "subtitles.entity.iron_golem.damage": "Iron Golem breaks", - "subtitles.entity.iron_golem.death": "Iron Golem dies", - "subtitles.entity.iron_golem.hurt": "Iron Golem hurts", - "subtitles.entity.iron_golem.repair": "Iron Golem repaired", - "subtitles.entity.item_frame.add_item": "Item Frame fills", - "subtitles.entity.item_frame.break": "Item Frame breaks", - "subtitles.entity.item_frame.place": "Item Frame placed", - "subtitles.entity.item_frame.remove_item": "Item Frame empties", - "subtitles.entity.item_frame.rotate_item": "Item Frame clicks", - "subtitles.entity.item.break": "Item breaks", - "subtitles.entity.item.pickup": "Item plops", - "subtitles.entity.leash_knot.break": "Leash Knot breaks", - "subtitles.entity.leash_knot.place": "Leash Knot tied", - "subtitles.entity.lightning_bolt.impact": "Lightning strikes", - "subtitles.entity.lightning_bolt.thunder": "Thunder roars", - "subtitles.entity.llama.ambient": "Llama bleats", - "subtitles.entity.llama.angry": "Llama bleats angrily", - "subtitles.entity.llama.chest": "Llama Chest equips", - "subtitles.entity.llama.death": "Llama dies", - "subtitles.entity.llama.eat": "Llama eats", - "subtitles.entity.llama.hurt": "Llama hurts", - "subtitles.entity.llama.spit": "Llama spits", - "subtitles.entity.llama.step": "Llama steps", - "subtitles.entity.llama.swag": "Llama is decorated", - "subtitles.entity.magma_cube.death": "Magma Cube dies", - "subtitles.entity.magma_cube.hurt": "Magma Cube hurts", - "subtitles.entity.magma_cube.squish": "Magma Cube squishes", - "subtitles.entity.minecart.riding": "Minecart rolls", - "subtitles.entity.mooshroom.convert": "Mooshroom transforms", - "subtitles.entity.mooshroom.eat": "Mooshroom eats", - "subtitles.entity.mooshroom.milk": "Mooshroom gets milked", - "subtitles.entity.mooshroom.suspicious_milk": "Mooshroom gets milked suspiciously", - "subtitles.entity.mule.ambient": "Mule hee-haws", - "subtitles.entity.mule.angry": "Mule neighs", - "subtitles.entity.mule.chest": "Mule Chest equips", - "subtitles.entity.mule.death": "Mule dies", - "subtitles.entity.mule.eat": "Mule eats", - "subtitles.entity.mule.hurt": "Mule hurts", - "subtitles.entity.painting.break": "Painting breaks", - "subtitles.entity.painting.place": "Painting placed", - "subtitles.entity.panda.aggressive_ambient": "Panda huffs", - "subtitles.entity.panda.ambient": "Panda pants", - "subtitles.entity.panda.bite": "Panda bites", - "subtitles.entity.panda.cant_breed": "Panda bleats", - "subtitles.entity.panda.death": "Panda dies", - "subtitles.entity.panda.eat": "Panda eats", - "subtitles.entity.panda.hurt": "Panda hurts", - "subtitles.entity.panda.pre_sneeze": "Panda's nose tickles", - "subtitles.entity.panda.sneeze": "Panda sneezes", - "subtitles.entity.panda.step": "Panda steps", - "subtitles.entity.panda.worried_ambient": "Panda whimpers", - "subtitles.entity.parrot.ambient": "Parrot talks", - "subtitles.entity.parrot.death": "Parrot dies", - "subtitles.entity.parrot.eats": "Parrot eats", - "subtitles.entity.parrot.fly": "Parrot flutters", - "subtitles.entity.parrot.hurts": "Parrot hurts", - "subtitles.entity.parrot.imitate.blaze": "Parrot breathes", - "subtitles.entity.parrot.imitate.breeze": "Parrot whirs", - "subtitles.entity.parrot.imitate.creeper": "Parrot hisses", - "subtitles.entity.parrot.imitate.drowned": "Parrot gurgles", - "subtitles.entity.parrot.imitate.elder_guardian": "Parrot moans", - "subtitles.entity.parrot.imitate.ender_dragon": "Parrot roars", - "subtitles.entity.parrot.imitate.endermite": "Parrot scuttles", - "subtitles.entity.parrot.imitate.evoker": "Parrot murmurs", - "subtitles.entity.parrot.imitate.ghast": "Parrot cries", - "subtitles.entity.parrot.imitate.guardian": "Parrot moans", - "subtitles.entity.parrot.imitate.hoglin": "Parrot growls", - "subtitles.entity.parrot.imitate.husk": "Parrot groans", - "subtitles.entity.parrot.imitate.illusioner": "Parrot murmurs", - "subtitles.entity.parrot.imitate.magma_cube": "Parrot squishes", - "subtitles.entity.parrot.imitate.phantom": "Parrot screeches", - "subtitles.entity.parrot.imitate.piglin": "Parrot snorts", - "subtitles.entity.parrot.imitate.piglin_brute": "Parrot snorts", - "subtitles.entity.parrot.imitate.pillager": "Parrot murmurs", - "subtitles.entity.parrot.imitate.ravager": "Parrot grunts", - "subtitles.entity.parrot.imitate.shulker": "Parrot lurks", - "subtitles.entity.parrot.imitate.silverfish": "Parrot hisses", - "subtitles.entity.parrot.imitate.skeleton": "Parrot rattles", - "subtitles.entity.parrot.imitate.slime": "Parrot squishes", - "subtitles.entity.parrot.imitate.spider": "Parrot hisses", - "subtitles.entity.parrot.imitate.stray": "Parrot rattles", - "subtitles.entity.parrot.imitate.vex": "Parrot vexes", - "subtitles.entity.parrot.imitate.vindicator": "Parrot mutters", - "subtitles.entity.parrot.imitate.warden": "Parrot whines", - "subtitles.entity.parrot.imitate.witch": "Parrot giggles", - "subtitles.entity.parrot.imitate.wither": "Parrot angers", - "subtitles.entity.parrot.imitate.wither_skeleton": "Parrot rattles", - "subtitles.entity.parrot.imitate.zoglin": "Parrot growls", - "subtitles.entity.parrot.imitate.zombie": "Parrot groans", - "subtitles.entity.parrot.imitate.zombie_villager": "Parrot groans", - "subtitles.entity.phantom.ambient": "Phantom screeches", - "subtitles.entity.phantom.bite": "Phantom bites", - "subtitles.entity.phantom.death": "Phantom dies", - "subtitles.entity.phantom.flap": "Phantom flaps", - "subtitles.entity.phantom.hurt": "Phantom hurts", - "subtitles.entity.phantom.swoop": "Phantom swoops", - "subtitles.entity.pig.ambient": "Pig oinks", - "subtitles.entity.pig.death": "Pig dies", - "subtitles.entity.pig.hurt": "Pig hurts", - "subtitles.entity.pig.saddle": "Saddle equips", - "subtitles.entity.piglin_brute.ambient": "Piglin Brute snorts", - "subtitles.entity.piglin_brute.angry": "Piglin Brute snorts angrily", - "subtitles.entity.piglin_brute.converted_to_zombified": "Piglin Brute converts to Zombified Piglin", - "subtitles.entity.piglin_brute.death": "Piglin Brute dies", - "subtitles.entity.piglin_brute.hurt": "Piglin Brute hurts", - "subtitles.entity.piglin_brute.step": "Piglin Brute steps", - "subtitles.entity.piglin.admiring_item": "Piglin admires item", - "subtitles.entity.piglin.ambient": "Piglin snorts", - "subtitles.entity.piglin.angry": "Piglin snorts angrily", - "subtitles.entity.piglin.celebrate": "Piglin celebrates", - "subtitles.entity.piglin.converted_to_zombified": "Piglin converts to Zombified Piglin", - "subtitles.entity.piglin.death": "Piglin dies", - "subtitles.entity.piglin.hurt": "Piglin hurts", - "subtitles.entity.piglin.jealous": "Piglin snorts enviously", - "subtitles.entity.piglin.retreat": "Piglin retreats", - "subtitles.entity.piglin.step": "Piglin steps", - "subtitles.entity.pillager.ambient": "Pillager murmurs", - "subtitles.entity.pillager.celebrate": "Pillager cheers", - "subtitles.entity.pillager.death": "Pillager dies", - "subtitles.entity.pillager.hurt": "Pillager hurts", - "subtitles.entity.player.attack.crit": "Critical attack", - "subtitles.entity.player.attack.knockback": "Knockback attack", - "subtitles.entity.player.attack.strong": "Strong attack", - "subtitles.entity.player.attack.sweep": "Sweeping attack", - "subtitles.entity.player.attack.weak": "Weak attack", - "subtitles.entity.player.burp": "Burp", - "subtitles.entity.player.death": "Player dies", - "subtitles.entity.player.freeze_hurt": "Player freezes", - "subtitles.entity.player.hurt": "Player hurts", - "subtitles.entity.player.hurt_drown": "Player drowning", - "subtitles.entity.player.hurt_on_fire": "Player burns", - "subtitles.entity.player.levelup": "Player dings", - "subtitles.entity.player.teleport": "Player teleports", - "subtitles.entity.polar_bear.ambient": "Polar Bear groans", - "subtitles.entity.polar_bear.ambient_baby": "Polar Bear hums", - "subtitles.entity.polar_bear.death": "Polar Bear dies", - "subtitles.entity.polar_bear.hurt": "Polar Bear hurts", - "subtitles.entity.polar_bear.warning": "Polar Bear roars", - "subtitles.entity.potion.splash": "Bottle smashes", - "subtitles.entity.potion.throw": "Bottle thrown", - "subtitles.entity.puffer_fish.blow_out": "Pufferfish deflates", - "subtitles.entity.puffer_fish.blow_up": "Pufferfish inflates", - "subtitles.entity.puffer_fish.death": "Pufferfish dies", - "subtitles.entity.puffer_fish.flop": "Pufferfish flops", - "subtitles.entity.puffer_fish.hurt": "Pufferfish hurts", - "subtitles.entity.puffer_fish.sting": "Pufferfish stings", - "subtitles.entity.rabbit.ambient": "Rabbit squeaks", - "subtitles.entity.rabbit.attack": "Rabbit attacks", - "subtitles.entity.rabbit.death": "Rabbit dies", - "subtitles.entity.rabbit.hurt": "Rabbit hurts", - "subtitles.entity.rabbit.jump": "Rabbit hops", - "subtitles.entity.ravager.ambient": "Ravager grunts", - "subtitles.entity.ravager.attack": "Ravager bites", - "subtitles.entity.ravager.celebrate": "Ravager cheers", - "subtitles.entity.ravager.death": "Ravager dies", - "subtitles.entity.ravager.hurt": "Ravager hurts", - "subtitles.entity.ravager.roar": "Ravager roars", - "subtitles.entity.ravager.step": "Ravager steps", - "subtitles.entity.ravager.stunned": "Ravager stunned", - "subtitles.entity.salmon.death": "Salmon dies", - "subtitles.entity.salmon.flop": "Salmon flops", - "subtitles.entity.salmon.hurt": "Salmon hurts", - "subtitles.entity.sheep.ambient": "Sheep baahs", - "subtitles.entity.sheep.death": "Sheep dies", - "subtitles.entity.sheep.hurt": "Sheep hurts", - "subtitles.entity.shulker_bullet.hit": "Shulker Bullet explodes", - "subtitles.entity.shulker_bullet.hurt": "Shulker Bullet breaks", - "subtitles.entity.shulker.ambient": "Shulker lurks", - "subtitles.entity.shulker.close": "Shulker closes", - "subtitles.entity.shulker.death": "Shulker dies", - "subtitles.entity.shulker.hurt": "Shulker hurts", - "subtitles.entity.shulker.open": "Shulker opens", - "subtitles.entity.shulker.shoot": "Shulker shoots", - "subtitles.entity.shulker.teleport": "Shulker teleports", - "subtitles.entity.silverfish.ambient": "Silverfish hisses", - "subtitles.entity.silverfish.death": "Silverfish dies", - "subtitles.entity.silverfish.hurt": "Silverfish hurts", - "subtitles.entity.skeleton_horse.ambient": "Skeleton Horse cries", - "subtitles.entity.skeleton_horse.death": "Skeleton Horse dies", - "subtitles.entity.skeleton_horse.hurt": "Skeleton Horse hurts", - "subtitles.entity.skeleton_horse.swim": "Skeleton Horse swims", - "subtitles.entity.skeleton.ambient": "Skeleton rattles", - "subtitles.entity.skeleton.converted_to_stray": "Skeleton converts to Stray", - "subtitles.entity.skeleton.death": "Skeleton dies", - "subtitles.entity.skeleton.hurt": "Skeleton hurts", - "subtitles.entity.skeleton.shoot": "Skeleton shoots", - "subtitles.entity.slime.attack": "Slime attacks", - "subtitles.entity.slime.death": "Slime dies", - "subtitles.entity.slime.hurt": "Slime hurts", - "subtitles.entity.slime.squish": "Slime squishes", - "subtitles.entity.sniffer.death": "Sniffer dies", - "subtitles.entity.sniffer.digging": "Sniffer digs", - "subtitles.entity.sniffer.digging_stop": "Sniffer stands up", - "subtitles.entity.sniffer.drop_seed": "Sniffer drops seed", - "subtitles.entity.sniffer.eat": "Sniffer eats", - "subtitles.entity.sniffer.egg_crack": "Sniffer Egg cracks", - "subtitles.entity.sniffer.egg_hatch": "Sniffer Egg hatches", - "subtitles.entity.sniffer.happy": "Sniffer delights", - "subtitles.entity.sniffer.hurt": "Sniffer hurts", - "subtitles.entity.sniffer.idle": "Sniffer grunts", - "subtitles.entity.sniffer.scenting": "Sniffer scents", - "subtitles.entity.sniffer.searching": "Sniffer searches", - "subtitles.entity.sniffer.sniffing": "Sniffer sniffs", - "subtitles.entity.sniffer.step": "Sniffer steps", - "subtitles.entity.snow_golem.death": "Snow Golem dies", - "subtitles.entity.snow_golem.hurt": "Snow Golem hurts", - "subtitles.entity.snowball.throw": "Snowball flies", - "subtitles.entity.spider.ambient": "Spider hisses", - "subtitles.entity.spider.death": "Spider dies", - "subtitles.entity.spider.hurt": "Spider hurts", - "subtitles.entity.squid.ambient": "Squid swims", - "subtitles.entity.squid.death": "Squid dies", - "subtitles.entity.squid.hurt": "Squid hurts", - "subtitles.entity.squid.squirt": "Squid shoots ink", - "subtitles.entity.stray.ambient": "Stray rattles", - "subtitles.entity.stray.death": "Stray dies", - "subtitles.entity.stray.hurt": "Stray hurts", - "subtitles.entity.strider.death": "Strider dies", - "subtitles.entity.strider.eat": "Strider eats", - "subtitles.entity.strider.happy": "Strider warbles", - "subtitles.entity.strider.hurt": "Strider hurts", - "subtitles.entity.strider.idle": "Strider chirps", - "subtitles.entity.strider.retreat": "Strider retreats", - "subtitles.entity.tadpole.death": "Tadpole dies", - "subtitles.entity.tadpole.flop": "Tadpole flops", - "subtitles.entity.tadpole.grow_up": "Tadpole grows up", - "subtitles.entity.tadpole.hurt": "Tadpole hurts", - "subtitles.entity.tnt.primed": "TNT fizzes", - "subtitles.entity.tropical_fish.death": "Tropical Fish dies", - "subtitles.entity.tropical_fish.flop": "Tropical Fish flops", - "subtitles.entity.tropical_fish.hurt": "Tropical Fish hurts", - "subtitles.entity.turtle.ambient_land": "Turtle chirps", - "subtitles.entity.turtle.death": "Turtle dies", - "subtitles.entity.turtle.death_baby": "Turtle baby dies", - "subtitles.entity.turtle.egg_break": "Turtle Egg breaks", - "subtitles.entity.turtle.egg_crack": "Turtle Egg cracks", - "subtitles.entity.turtle.egg_hatch": "Turtle Egg hatches", - "subtitles.entity.turtle.hurt": "Turtle hurts", - "subtitles.entity.turtle.hurt_baby": "Turtle baby hurts", - "subtitles.entity.turtle.lay_egg": "Turtle lays egg", - "subtitles.entity.turtle.shamble": "Turtle shambles", - "subtitles.entity.turtle.shamble_baby": "Turtle baby shambles", - "subtitles.entity.turtle.swim": "Turtle swims", - "subtitles.entity.vex.ambient": "Vex vexes", - "subtitles.entity.vex.charge": "Vex shrieks", - "subtitles.entity.vex.death": "Vex dies", - "subtitles.entity.vex.hurt": "Vex hurts", - "subtitles.entity.villager.ambient": "Villager mumbles", - "subtitles.entity.villager.celebrate": "Villager cheers", - "subtitles.entity.villager.death": "Villager dies", - "subtitles.entity.villager.hurt": "Villager hurts", - "subtitles.entity.villager.no": "Villager disagrees", - "subtitles.entity.villager.trade": "Villager trades", - "subtitles.entity.villager.work_armorer": "Armorer works", - "subtitles.entity.villager.work_butcher": "Butcher works", - "subtitles.entity.villager.work_cartographer": "Cartographer works", - "subtitles.entity.villager.work_cleric": "Cleric works", - "subtitles.entity.villager.work_farmer": "Farmer works", - "subtitles.entity.villager.work_fisherman": "Fisherman works", - "subtitles.entity.villager.work_fletcher": "Fletcher works", - "subtitles.entity.villager.work_leatherworker": "Leatherworker works", - "subtitles.entity.villager.work_librarian": "Librarian works", - "subtitles.entity.villager.work_mason": "Mason works", - "subtitles.entity.villager.work_shepherd": "Shepherd works", - "subtitles.entity.villager.work_toolsmith": "Toolsmith works", - "subtitles.entity.villager.work_weaponsmith": "Weaponsmith works", - "subtitles.entity.villager.yes": "Villager agrees", - "subtitles.entity.vindicator.ambient": "Vindicator mutters", - "subtitles.entity.vindicator.celebrate": "Vindicator cheers", - "subtitles.entity.vindicator.death": "Vindicator dies", - "subtitles.entity.vindicator.hurt": "Vindicator hurts", - "subtitles.entity.wandering_trader.ambient": "Wandering Trader mumbles", - "subtitles.entity.wandering_trader.death": "Wandering Trader dies", - "subtitles.entity.wandering_trader.disappeared": "Wandering Trader disappears", - "subtitles.entity.wandering_trader.drink_milk": "Wandering Trader drinks milk", - "subtitles.entity.wandering_trader.drink_potion": "Wandering Trader drinks potion", - "subtitles.entity.wandering_trader.hurt": "Wandering Trader hurts", - "subtitles.entity.wandering_trader.no": "Wandering Trader disagrees", - "subtitles.entity.wandering_trader.reappeared": "Wandering Trader appears", - "subtitles.entity.wandering_trader.trade": "Wandering Trader trades", - "subtitles.entity.wandering_trader.yes": "Wandering Trader agrees", - "subtitles.entity.warden.agitated": "Warden groans angrily", - "subtitles.entity.warden.ambient": "Warden whines", - "subtitles.entity.warden.angry": "Warden rages", - "subtitles.entity.warden.attack_impact": "Warden lands hit", - "subtitles.entity.warden.death": "Warden dies", - "subtitles.entity.warden.dig": "Warden digs", - "subtitles.entity.warden.emerge": "Warden emerges", - "subtitles.entity.warden.heartbeat": "Warden's heart beats", - "subtitles.entity.warden.hurt": "Warden hurts", - "subtitles.entity.warden.listening": "Warden takes notice", - "subtitles.entity.warden.listening_angry": "Warden takes notice angrily", - "subtitles.entity.warden.nearby_close": "Warden approaches", - "subtitles.entity.warden.nearby_closer": "Warden advances", - "subtitles.entity.warden.nearby_closest": "Warden draws close", - "subtitles.entity.warden.roar": "Warden roars", - "subtitles.entity.warden.sniff": "Warden sniffs", - "subtitles.entity.warden.sonic_boom": "Warden booms", - "subtitles.entity.warden.sonic_charge": "Warden charges", - "subtitles.entity.warden.step": "Warden steps", - "subtitles.entity.warden.tendril_clicks": "Warden's tendrils click", - "subtitles.entity.witch.ambient": "Witch giggles", - "subtitles.entity.witch.celebrate": "Witch cheers", - "subtitles.entity.witch.death": "Witch dies", - "subtitles.entity.witch.drink": "Witch drinks", - "subtitles.entity.witch.hurt": "Witch hurts", - "subtitles.entity.witch.throw": "Witch throws", - "subtitles.entity.wither_skeleton.ambient": "Wither Skeleton rattles", - "subtitles.entity.wither_skeleton.death": "Wither Skeleton dies", - "subtitles.entity.wither_skeleton.hurt": "Wither Skeleton hurts", - "subtitles.entity.wither.ambient": "Wither angers", - "subtitles.entity.wither.death": "Wither dies", - "subtitles.entity.wither.hurt": "Wither hurts", - "subtitles.entity.wither.shoot": "Wither attacks", - "subtitles.entity.wither.spawn": "Wither released", - "subtitles.entity.wolf.ambient": "Wolf pants", - "subtitles.entity.wolf.death": "Wolf dies", - "subtitles.entity.wolf.growl": "Wolf growls", - "subtitles.entity.wolf.hurt": "Wolf hurts", - "subtitles.entity.wolf.shake": "Wolf shakes", - "subtitles.entity.zoglin.ambient": "Zoglin growls", - "subtitles.entity.zoglin.angry": "Zoglin growls angrily", - "subtitles.entity.zoglin.attack": "Zoglin attacks", - "subtitles.entity.zoglin.death": "Zoglin dies", - "subtitles.entity.zoglin.hurt": "Zoglin hurts", - "subtitles.entity.zoglin.step": "Zoglin steps", - "subtitles.entity.zombie_horse.ambient": "Zombie Horse cries", - "subtitles.entity.zombie_horse.death": "Zombie Horse dies", - "subtitles.entity.zombie_horse.hurt": "Zombie Horse hurts", - "subtitles.entity.zombie_villager.ambient": "Zombie Villager groans", - "subtitles.entity.zombie_villager.converted": "Zombie Villager vociferates", - "subtitles.entity.zombie_villager.cure": "Zombie Villager snuffles", - "subtitles.entity.zombie_villager.death": "Zombie Villager dies", - "subtitles.entity.zombie_villager.hurt": "Zombie Villager hurts", - "subtitles.entity.zombie.ambient": "Zombie groans", - "subtitles.entity.zombie.attack_wooden_door": "Door shakes", - "subtitles.entity.zombie.break_wooden_door": "Door breaks", - "subtitles.entity.zombie.converted_to_drowned": "Zombie converts to Drowned", - "subtitles.entity.zombie.death": "Zombie dies", - "subtitles.entity.zombie.destroy_egg": "Turtle Egg stomped", - "subtitles.entity.zombie.hurt": "Zombie hurts", - "subtitles.entity.zombie.infect": "Zombie infects", - "subtitles.entity.zombified_piglin.ambient": "Zombified Piglin grunts", - "subtitles.entity.zombified_piglin.angry": "Zombified Piglin grunts angrily", - "subtitles.entity.zombified_piglin.death": "Zombified Piglin dies", - "subtitles.entity.zombified_piglin.hurt": "Zombified Piglin hurts", - "subtitles.event.raid.horn": "Ominous horn blares", - "subtitles.item.armor.equip": "Gear equips", - "subtitles.item.armor.equip_chain": "Chain armor jingles", - "subtitles.item.armor.equip_diamond": "Diamond armor clangs", - "subtitles.item.armor.equip_elytra": "Elytra rustle", - "subtitles.item.armor.equip_gold": "Gold armor clinks", - "subtitles.item.armor.equip_iron": "Iron armor clanks", - "subtitles.item.armor.equip_leather": "Leather armor rustles", - "subtitles.item.armor.equip_netherite": "Netherite armor clanks", - "subtitles.item.armor.equip_turtle": "Turtle Shell thunks", - "subtitles.item.axe.scrape": "Axe scrapes", - "subtitles.item.axe.strip": "Axe strips", - "subtitles.item.axe.wax_off": "Wax off", - "subtitles.item.bone_meal.use": "Bone Meal crinkles", - "subtitles.item.book.page_turn": "Page rustles", - "subtitles.item.book.put": "Book thumps", - "subtitles.item.bottle.empty": "Bottle empties", - "subtitles.item.bottle.fill": "Bottle fills", - "subtitles.item.brush.brushing.generic": "Brushing", - "subtitles.item.brush.brushing.gravel": "Brushing Gravel", - "subtitles.item.brush.brushing.gravel.complete": "Brushing Gravel completed", - "subtitles.item.brush.brushing.sand": "Brushing Sand", - "subtitles.item.brush.brushing.sand.complete": "Brushing Sand completed", - "subtitles.item.bucket.empty": "Bucket empties", - "subtitles.item.bucket.fill": "Bucket fills", - "subtitles.item.bucket.fill_axolotl": "Axolotl scooped", - "subtitles.item.bucket.fill_fish": "Fish captured", - "subtitles.item.bucket.fill_tadpole": "Tadpole captured", - "subtitles.item.bundle.drop_contents": "Bundle empties", - "subtitles.item.bundle.insert": "Item packed", - "subtitles.item.bundle.remove_one": "Item unpacked", - "subtitles.item.chorus_fruit.teleport": "Player teleports", - "subtitles.item.crop.plant": "Crop planted", - "subtitles.item.crossbow.charge": "Crossbow charges up", - "subtitles.item.crossbow.hit": "Arrow hits", - "subtitles.item.crossbow.load": "Crossbow loads", - "subtitles.item.crossbow.shoot": "Crossbow fires", - "subtitles.item.dye.use": "Dye stains", - "subtitles.item.firecharge.use": "Fireball whooshes", - "subtitles.item.flintandsteel.use": "Flint and Steel click", - "subtitles.item.glow_ink_sac.use": "Glow Ink Sac splotches", - "subtitles.item.goat_horn.play": "Goat Horn plays", - "subtitles.item.hoe.till": "Hoe tills", - "subtitles.item.honey_bottle.drink": "Gulping", - "subtitles.item.honeycomb.wax_on": "Wax on", - "subtitles.item.ink_sac.use": "Ink Sac splotches", - "subtitles.item.lodestone_compass.lock": "Lodestone Compass locks onto Lodestone", - "subtitles.item.nether_wart.plant": "Crop planted", - "subtitles.item.shears.shear": "Shears click", - "subtitles.item.shield.block": "Shield blocks", - "subtitles.item.shovel.flatten": "Shovel flattens", - "subtitles.item.spyglass.stop_using": "Spyglass retracts", - "subtitles.item.spyglass.use": "Spyglass expands", - "subtitles.item.totem.use": "Totem activates", - "subtitles.item.trident.hit": "Trident stabs", - "subtitles.item.trident.hit_ground": "Trident vibrates", - "subtitles.item.trident.return": "Trident returns", - "subtitles.item.trident.riptide": "Trident zooms", - "subtitles.item.trident.throw": "Trident clangs", - "subtitles.item.trident.thunder": "Trident thunder cracks", - "subtitles.particle.soul_escape": "Soul escapes", - "subtitles.ui.cartography_table.take_result": "Map drawn", - "subtitles.ui.loom.take_result": "Loom used", - "subtitles.ui.stonecutter.take_result": "Stonecutter used", - "subtitles.weather.rain": "Rain falls", - "symlink_warning.message": "Loading worlds from folders with symbolic links can be unsafe if you don't know exactly what you are doing. Please visit %s to learn more.", - "symlink_warning.message.pack": "Loading packs with symbolic links can be unsafe if you don't know exactly what you are doing. Please visit %s to learn more.", - "symlink_warning.message.world": "Loading worlds from folders with symbolic links can be unsafe if you don't know exactly what you are doing. Please visit %s to learn more.", - "symlink_warning.more_info": "More Information", - "symlink_warning.title": "World folder contains symbolic links", - "symlink_warning.title.pack": "Added pack(s) contain(s) symbolic links", - "symlink_warning.title.world": "The world folder contains symbolic links", - "team.collision.always": "Always", - "team.collision.never": "Never", - "team.collision.pushOtherTeams": "Push other teams", - "team.collision.pushOwnTeam": "Push own team", - "team.notFound": "Unknown team '%s'", - "team.visibility.always": "Always", - "team.visibility.hideForOtherTeams": "Hide for other teams", - "team.visibility.hideForOwnTeam": "Hide for own team", - "team.visibility.never": "Never", - "telemetry_info.button.give_feedback": "Give Feedback", - "telemetry_info.button.privacy_statement": "Privacy Statement", - "telemetry_info.button.show_data": "View My Data", - "telemetry_info.opt_in.description": "I consent to sending optional telemetry data", - "telemetry_info.property_title": "Included Data", - "telemetry_info.screen.description": "Collecting this data helps us improve Minecraft by guiding us in directions that are relevant to our players.\nYou can also send in additional feedback to help us keep improving Minecraft.", - "telemetry_info.screen.title": "Telemetry Data Collection", - "telemetry.event.advancement_made.description": "Understanding the context behind receiving an advancement can help us better understand and improve the progression of the game.", - "telemetry.event.advancement_made.title": "Advancement Made", - "telemetry.event.game_load_times.description": "This event can help us figure out where startup performance improvements are needed by measuring the execution times of the startup phases.", - "telemetry.event.game_load_times.title": "Game Load Times", - "telemetry.event.optional": "%s (Optional)", - "telemetry.event.optional.disabled": "%s (Optional) - Disabled", - "telemetry.event.performance_metrics.description": "Knowing the overall performance profile of Minecraft helps us tune and optimize the game for a wide range of machine specifications and operating systems. \nGame version is included to help us compare the performance profile for new versions of Minecraft.", - "telemetry.event.performance_metrics.title": "Performance Metrics", - "telemetry.event.required": "%s (Required)", - "telemetry.event.world_load_times.description": "It’s important for us to understand how long it takes to join a world, and how that changes over time. For example, when we add new features or do larger technical changes, we need to see what impact that had on load times.", - "telemetry.event.world_load_times.title": "World Load Times", - "telemetry.event.world_loaded.description": "Knowing how players play Minecraft (such as Game Mode, client or server modded, and game version) allows us to focus game updates to improve the areas that players care about most.\nThe World Loaded event is paired with the World Unloaded event to calculate how long the play session has lasted.", - "telemetry.event.world_loaded.title": "World Loaded", - "telemetry.event.world_unloaded.description": "This event is paired with the World Loaded event to calculate how long the world session has lasted.\nThe duration (in seconds and ticks) is measured when a world session has ended (quitting to title, disconnecting from a server).", - "telemetry.event.world_unloaded.title": "World Unloaded", - "telemetry.property.advancement_game_time.title": "Game Time (Ticks)", - "telemetry.property.advancement_id.title": "Advancement ID", - "telemetry.property.client_id.title": "Client ID", - "telemetry.property.client_modded.title": "Client Modded", - "telemetry.property.dedicated_memory_kb.title": "Dedicated Memory (kB)", - "telemetry.property.event_timestamp_utc.title": "Event Timestamp (UTC)", - "telemetry.property.frame_rate_samples.title": "Frame Rate Samples (FPS)", - "telemetry.property.game_mode.title": "Game Mode", - "telemetry.property.game_version.title": "Game Version", - "telemetry.property.launcher_name.title": "Launcher Name", - "telemetry.property.load_time_bootstrap_ms.title": "Bootstrap Time (Milliseconds)", - "telemetry.property.load_time_loading_overlay_ms.title": "Time in Loading Screen (Milliseconds)", - "telemetry.property.load_time_pre_window_ms.title": "Time Before Window Opens (Milliseconds)", - "telemetry.property.load_time_total_time_ms.title": "Total Load Time (Milliseconds)", - "telemetry.property.minecraft_session_id.title": "Minecraft Session ID", - "telemetry.property.new_world.title": "New World", - "telemetry.property.number_of_samples.title": "Sample Count", - "telemetry.property.operating_system.title": "Operating System", - "telemetry.property.opt_in.title": "Opt-In", - "telemetry.property.platform.title": "Platform", - "telemetry.property.realms_map_content.title": "Realms Map Content (Minigame Name)", - "telemetry.property.render_distance.title": "Render Distance", - "telemetry.property.render_time_samples.title": "Render Time Samples", - "telemetry.property.seconds_since_load.title": "Time Since Load (Seconds)", - "telemetry.property.server_modded.title": "Server Modded", - "telemetry.property.server_type.title": "Server Type", - "telemetry.property.ticks_since_load.title": "Time Since Load (Ticks)", - "telemetry.property.used_memory_samples.title": "Used Random Access Memory", - "telemetry.property.user_id.title": "User ID", - "telemetry.property.world_load_time_ms.title": "World Load Time (Milliseconds)", - "telemetry.property.world_session_id.title": "World Session ID", - "title.32bit.deprecation": "32-bit system detected: this may prevent you from playing in the future as a 64-bit system will be required!", - "title.32bit.deprecation.realms": "Minecraft will soon require a 64-bit system, which will prevent you from playing or using Realms on this device. You will need to manually cancel any Realms subscription.", - "title.32bit.deprecation.realms.check": "Do not show this screen again", - "title.32bit.deprecation.realms.header": "32-bit system detected", - "title.credits": "Copyright Mojang AB. Do not distribute!", - "title.multiplayer.disabled": "Multiplayer is disabled. Please check your Microsoft account settings.", - "title.multiplayer.disabled.banned.name": "You must change your name before you can play online", - "title.multiplayer.disabled.banned.permanent": "Your account is permanently suspended from online play", - "title.multiplayer.disabled.banned.temporary": "Your account is temporarily suspended from online play", - "title.multiplayer.lan": "Multiplayer (LAN)", - "title.multiplayer.other": "Multiplayer (3rd-party Server)", - "title.multiplayer.realms": "Multiplayer (Realms)", - "title.singleplayer": "Singleplayer", - "translation.test.args": "%s %s", - "translation.test.complex": "Prefix, %s%2$s again %s and %1$s lastly %s and also %1$s again!", - "translation.test.escape": "%%s %%%s %%%%s %%%%%s", - "translation.test.invalid": "hi %", - "translation.test.invalid2": "hi % s", - "translation.test.none": "Hello, world!", - "translation.test.world": "world", - "trim_material.minecraft.amethyst": "Amethyst Material", - "trim_material.minecraft.copper": "Copper Material", - "trim_material.minecraft.diamond": "Diamond Material", - "trim_material.minecraft.emerald": "Emerald Material", - "trim_material.minecraft.gold": "Gold Material", - "trim_material.minecraft.iron": "Iron Material", - "trim_material.minecraft.lapis": "Lapis Material", - "trim_material.minecraft.netherite": "Netherite Material", - "trim_material.minecraft.quartz": "Quartz Material", - "trim_material.minecraft.redstone": "Redstone Material", - "trim_pattern.minecraft.coast": "Coast Armor Trim", - "trim_pattern.minecraft.dune": "Dune Armor Trim", - "trim_pattern.minecraft.eye": "Eye Armor Trim", - "trim_pattern.minecraft.host": "Host Armor Trim", - "trim_pattern.minecraft.raiser": "Raiser Armor Trim", - "trim_pattern.minecraft.rib": "Rib Armor Trim", - "trim_pattern.minecraft.sentry": "Sentry Armor Trim", - "trim_pattern.minecraft.shaper": "Shaper Armor Trim", - "trim_pattern.minecraft.silence": "Silence Armor Trim", - "trim_pattern.minecraft.snout": "Snout Armor Trim", - "trim_pattern.minecraft.spire": "Spire Armor Trim", - "trim_pattern.minecraft.tide": "Tide Armor Trim", - "trim_pattern.minecraft.vex": "Vex Armor Trim", - "trim_pattern.minecraft.ward": "Ward Armor Trim", - "trim_pattern.minecraft.wayfinder": "Wayfinder Armor Trim", - "trim_pattern.minecraft.wild": "Wild Armor Trim", - "tutorial.bundleInsert.description": "Right Click to add items", - "tutorial.bundleInsert.title": "Use a Bundle", - "tutorial.craft_planks.description": "The recipe book can help", - "tutorial.craft_planks.title": "Craft wooden planks", - "tutorial.find_tree.description": "Punch it to collect wood", - "tutorial.find_tree.title": "Find a tree", - "tutorial.look.description": "Use your mouse to turn", - "tutorial.look.title": "Look around", - "tutorial.move.description": "Jump with %s", - "tutorial.move.title": "Move with %s, %s, %s and %s", - "tutorial.open_inventory.description": "Press %s", - "tutorial.open_inventory.title": "Open your inventory", - "tutorial.punch_tree.description": "Hold down %s", - "tutorial.punch_tree.title": "Destroy the tree", - "tutorial.socialInteractions.description": "Press %s to open", - "tutorial.socialInteractions.title": "Social Interactions", - "upgrade.minecraft.netherite_upgrade": "Netherite Upgrade" -} diff --git a/MinecraftClient/RestartCoordinator.cs b/MinecraftClient/RestartCoordinator.cs deleted file mode 100644 index 00a759943f..0000000000 --- a/MinecraftClient/RestartCoordinator.cs +++ /dev/null @@ -1,213 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Threading; -using System.Threading.Channels; -using System.Threading.Tasks; - -namespace MinecraftClient -{ - internal readonly record struct RestartRequest( - long ConnectionAttempt, - TimeSpan Delay, - bool KeepAccountAndServerSettings, - RestartSettingsSnapshot? SettingsSnapshot = null, - bool ReplaceUntilCommit = false, - Task? SourceCleanupCompletion = null, - long RequestId = 0); - - internal readonly record struct RestartSettingsSnapshot( - Settings.MainConfigHelper.MainConfig.AccountInfoConfig Account, - string ServerIP, - ushort ServerPort); - - internal enum RestartRequestState - { - Replaceable, - Committing, - } - - internal readonly record struct PendingRestart( - long RequestId, - RestartRequest Request, - RestartRequestState State); - - internal sealed class RestartCoordinator : IDisposable - { - private readonly Lock stateLock = new(); - private readonly Channel requests; - private readonly CancellationTokenSource shutdown = new(); - private readonly Func restart; - private readonly Action reportFailure; - private readonly Task worker; - private readonly Dictionary pendingAttempts = []; - private long highestScheduledAttempt = -1; - private long nextRequestId; - private bool stopped; - - internal RestartCoordinator( - Func restart, - Action reportFailure) - { - ArgumentNullException.ThrowIfNull(restart); - ArgumentNullException.ThrowIfNull(reportFailure); - - this.restart = restart; - this.reportFailure = reportFailure; - requests = Channel.CreateUnbounded(new UnboundedChannelOptions - { - SingleReader = true, - SingleWriter = false, - AllowSynchronousContinuations = false, - }); - worker = ProcessRequestsAsync(); - } - - internal bool HasScheduledRestart(long connectionAttempt) - { - lock (stateLock) - return !stopped && pendingAttempts.ContainsKey(connectionAttempt); - } - - internal bool TrySchedule(RestartRequest request, Func? beforePublish = null) - { - lock (stateLock) - { - if (stopped) - return false; - - if (pendingAttempts.TryGetValue(request.ConnectionAttempt, out PendingRestart pendingRequest)) - { - if (pendingRequest.State != RestartRequestState.Replaceable || !request.ReplaceUntilCommit) - return false; - - request = request with - { - RequestId = pendingRequest.RequestId, - SourceCleanupCompletion = pendingRequest.Request.SourceCleanupCompletion, - }; - pendingAttempts[request.ConnectionAttempt] = pendingRequest with { Request = request }; - return true; - } - - if (request.ConnectionAttempt <= highestScheduledAttempt) - return false; - - request = request with { RequestId = ++nextRequestId }; - pendingAttempts[request.ConnectionAttempt] = new PendingRestart( - request.RequestId, - request, - RestartRequestState.Replaceable); - try - { - if (beforePublish is not null && !beforePublish()) - { - pendingAttempts.Remove(request.ConnectionAttempt); - return false; - } - - if (requests.Writer.TryWrite(request)) - { - highestScheduledAttempt = Math.Max(highestScheduledAttempt, request.ConnectionAttempt); - return true; - } - } - catch - { - pendingAttempts.Remove(request.ConnectionAttempt); - throw; - } - - pendingAttempts.Remove(request.ConnectionAttempt); - return false; - } - } - - internal bool TryBeginCommit(RestartRequest scheduledRequest, out RestartRequest latestRequest) - { - lock (stateLock) - { - if (stopped - || !pendingAttempts.TryGetValue(scheduledRequest.ConnectionAttempt, out PendingRestart pendingRequest) - || pendingRequest.RequestId != scheduledRequest.RequestId - || pendingRequest.State != RestartRequestState.Replaceable) - { - latestRequest = default; - return false; - } - - latestRequest = pendingRequest.Request; - pendingAttempts[scheduledRequest.ConnectionAttempt] = pendingRequest with - { - State = RestartRequestState.Committing, - }; - return true; - } - } - - internal void Stop() - { - lock (stateLock) - { - if (stopped) - return; - - stopped = true; - pendingAttempts.Clear(); - requests.Writer.TryComplete(); - shutdown.Cancel(); - } - } - - private async Task ProcessRequestsAsync() - { - try - { - await foreach (RestartRequest request in requests.Reader.ReadAllAsync(shutdown.Token).ConfigureAwait(false)) - { - lock (stateLock) - { - if (!pendingAttempts.TryGetValue(request.ConnectionAttempt, out PendingRestart pendingRequest) - || pendingRequest.RequestId != request.RequestId) - continue; - } - - try - { - if (request.SourceCleanupCompletion is Task sourceCleanupCompletion) - await sourceCleanupCompletion.WaitAsync(shutdown.Token).ConfigureAwait(false); - - await restart(request, shutdown.Token).ConfigureAwait(false); - } - catch (OperationCanceledException) when (shutdown.IsCancellationRequested) - { - return; - } - catch (Exception exception) - { - reportFailure(exception); - } - finally - { - lock (stateLock) - { - if (pendingAttempts.TryGetValue(request.ConnectionAttempt, out PendingRestart pendingRequest) - && pendingRequest.RequestId == request.RequestId) - pendingAttempts.Remove(request.ConnectionAttempt); - } - } - } - } - catch (OperationCanceledException) when (shutdown.IsCancellationRequested) - { - } - } - - public void Dispose() - { - Stop(); - worker.GetAwaiter().GetResult(); - shutdown.Dispose(); - GC.SuppressFinalize(this); - } - } -} diff --git a/MinecraftClient/Scripting/AssemblyResolver.cs b/MinecraftClient/Scripting/AssemblyResolver.cs deleted file mode 100644 index 85b16405a7..0000000000 --- a/MinecraftClient/Scripting/AssemblyResolver.cs +++ /dev/null @@ -1,39 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Reflection; - -namespace MinecraftClient.Scripting; - -public static class AssemblyResolver -{ - private static Dictionary ScriptAssemblies = new(); - static AssemblyResolver() - { - // Manually resolve assemblies that .NET can't resolve automatically. - AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => - { - var asmReqName = new AssemblyName(args.Name); - - // Check the script-referenced assemblies if we have the DLL that is required. - foreach (var dll in ScriptAssemblies) - { - // If we have the assembly, load it. - if (asmReqName.FullName == dll.Key) - { - return Assembly.LoadFile(dll.Value); - } - } - - ConsoleIO.WriteLogLine($"[Script Error] Failed to resolve assembly {args.Name} (are you missing a DLL file?)"); - return null; - }; - } - - internal static void AddAssembly(string AssemblyFullName, string AssemblyPath) - { - if (ScriptAssemblies.ContainsKey(AssemblyFullName)) - return; - - ScriptAssemblies.Add(AssemblyFullName, AssemblyPath); - } -} \ No newline at end of file diff --git a/MinecraftClient/Scripting/BotMovementLock.cs b/MinecraftClient/Scripting/BotMovementLock.cs deleted file mode 100644 index 2c29b6e8e7..0000000000 --- a/MinecraftClient/Scripting/BotMovementLock.cs +++ /dev/null @@ -1,35 +0,0 @@ -namespace MinecraftClient.Scripting; - -public class BotMovementLock -{ - private static BotMovementLock? InstancePrivate; - private string _heldBy = string.Empty; - - private BotMovementLock() - { - InstancePrivate = this; - } - - public static BotMovementLock? Instance => InstancePrivate ??= new BotMovementLock(); - - public bool Lock(string owner) - { - if (owner.Trim().Length == 0 || _heldBy.Length > 0) - return false; - - _heldBy = owner.Trim(); - return true; - } - - public bool UnLock(string owner) - { - if (owner.Trim().Length == 0 || _heldBy.Length == 0 || !_heldBy.ToLower().Equals(owner.ToLower().Trim())) - return false; - - _heldBy = string.Empty; - return true; - } - - public bool IsLocked => _heldBy.Length > 0; - public string LockedBy => _heldBy; -} \ No newline at end of file diff --git a/MinecraftClient/Scripting/CSharpRunner.cs b/MinecraftClient/Scripting/CSharpRunner.cs deleted file mode 100644 index 880d6a3986..0000000000 --- a/MinecraftClient/Scripting/CSharpRunner.cs +++ /dev/null @@ -1,466 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.IO; -using System.Linq; -using System.Text; -using Microsoft.CodeAnalysis; -using MinecraftClient.Scripting.DynamicRun.Builder; -using static MinecraftClient.Settings; - -namespace MinecraftClient.Scripting -{ - ///

- /// C# Script runner - Compile on-the-fly and run C# scripts - /// - class CSharpRunner - { - private static readonly Dictionary CompileCache = new(); - - private readonly record struct ScriptSourceLine(int LineNumber, string Text); - - /// - /// Run the specified C# script file - /// - /// ChatBot handler for accessing ChatBot API - /// Lines of the script file to run - /// Arguments to pass to the script - /// Local variables passed along with the script - /// Set to false to compile and cache the script without launching it - /// Thrown if an error occured - /// Result of the execution, returned by the script - public static object? Run(ChatBot apiHandler, string[] lines, string[] args, Dictionary? localVars, bool run = true, string scriptName = "Unknown Script", string? scriptOwnerKey = null) - { - //Script compatibility check for handling future versions differently - if (lines.Length < 1 || lines[0] != "//MCCScript 1.0") - throw new CSharpException(CSErrorType.InvalidScript, - new InvalidDataException(Translations.exception_csrunner_invalid_head)); - - //Script hash for determining if it was previously compiled - ulong scriptHash = QuickHash(lines); - byte[]? assembly = null; - - Compiler compiler = new(); - CompileRunner runner = new(); - - //No need to compile two scripts at the same time - lock (CompileCache) - { - ///Process and compile script only if not already compiled - if (!Config.Main.Advanced.CacheScript || !CompileCache.ContainsKey(scriptHash)) - { - //Process different sections of the script file - bool scriptMain = true; - List script = new(); - List extensions = new(); - List libs = new(); - List dlls = new(); - for (int i = 0; i < lines.Length; i++) - { - string line = lines[i]; - if (line.StartsWith("//using")) - { - libs.Add(NormalizeUsingDirective(line)); - } - else if (line.StartsWith("//dll")) - { - dlls.Add(line.Replace("//dll ", "").Trim()); - } - else if (line.StartsWith("//MCCScript")) - { - if (line.EndsWith("Extensions")) - scriptMain = false; - } - - (scriptMain ? script : extensions).Add(new(i + 1, line)); - } - - //Add return statement if missing - bool hasImplicitReturn = script.All(line => !line.Text.StartsWith("return ", StringComparison.Ordinal) - && !line.Text.Contains(" return ", StringComparison.Ordinal)); - - //Generate a class from the given script - string code = BuildScriptCode(scriptName, script, extensions, libs, hasImplicitReturn); - - ConsoleIO.WriteLogLine(string.Format(Translations.script_compile_started, scriptName)); - - //Compile the C# class in memory using all the currently loaded assemblies - var result = compiler.Compile(code, Guid.NewGuid().ToString(), dlls); - - //Process compile warnings and errors - if (result.Failures is not null) - { - - ConsoleIO.WriteLogLine(Translations.script_compile_failed); - - foreach (var failure in result.Failures) - { - ConsoleIO.WriteLogLine(FormatCompilationFailure(failure, scriptName)); - } - - throw new CSharpException(CSErrorType.InvalidScript, new InvalidProgramException("Compilation failed due to error(s).")); - } - - ConsoleIO.WriteLogLine(Translations.script_compile_succeeded); - - //Retrieve compiled assembly - assembly = result.Assembly; - if (Config.Main.Advanced.CacheScript) - CompileCache[scriptHash] = assembly!; - } - else if (Config.Main.Advanced.CacheScript) - assembly = CompileCache[scriptHash]; - } - - //Run the compiled assembly with exception handling - if (run) - { - try - { - var compiled = runner.Execute(assembly!, args, localVars, apiHandler, scriptOwnerKey); - return compiled; - } - catch (Exception e) { throw new CSharpException(CSErrorType.RuntimeError, e); } - } - else return null; - } - - internal static string NormalizeUsingDirective(string line) - { - string directive = line[2..].Trim(); - return directive.EndsWith(';') ? directive : $"{directive};"; - } - - private static string BuildScriptCode(string scriptName, IEnumerable script, IEnumerable extensions, IEnumerable libs, bool hasImplicitReturn) - { - StringBuilder codeBuilder = new(); - codeBuilder.AppendLine("using System;"); - codeBuilder.AppendLine("using System.Collections.Generic;"); - codeBuilder.AppendLine("using System.Text.RegularExpressions;"); - codeBuilder.AppendLine("using System.Linq;"); - codeBuilder.AppendLine("using System.Text;"); - codeBuilder.AppendLine("using System.IO;"); - codeBuilder.AppendLine("using System.Net;"); - codeBuilder.AppendLine("using System.Threading;"); - codeBuilder.AppendLine("using MinecraftClient;"); - codeBuilder.AppendLine("using MinecraftClient.Scripting;"); - codeBuilder.AppendLine("using MinecraftClient.Mapping;"); - codeBuilder.AppendLine("using MinecraftClient.Inventory;"); - - foreach (string lib in libs) - codeBuilder.AppendLine(lib); - - codeBuilder.AppendLine("namespace ScriptLoader {"); - codeBuilder.AppendLine("public class Script {"); - codeBuilder.AppendLine("public CSharpAPI MCC;"); - codeBuilder.AppendLine("public object __run(CSharpAPI __apiHandler, string[] args) {"); - codeBuilder.AppendLine("this.MCC = __apiHandler;"); - AppendMappedSection(codeBuilder, scriptName, script); - - if (hasImplicitReturn) - codeBuilder.AppendLine("return null;"); - - codeBuilder.AppendLine("}"); - AppendMappedSection(codeBuilder, scriptName, extensions); - codeBuilder.AppendLine("}}"); - return codeBuilder.ToString(); - } - - private static void AppendMappedSection(StringBuilder codeBuilder, string scriptName, IEnumerable lines) - { - ScriptSourceLine[] sourceLines = lines.ToArray(); - if (sourceLines.Length == 0) - return; - - codeBuilder.AppendLine($@"#line {sourceLines[0].LineNumber} ""{EscapeLineDirectivePath(scriptName)}"""); - - foreach (ScriptSourceLine line in sourceLines) - codeBuilder.AppendLine(line.Text); - - codeBuilder.AppendLine("#line default"); - } - - private static string EscapeLineDirectivePath(string path) - { - return path.Replace("\\", "\\\\").Replace("\"", "\\\""); - } - - private static string FormatCompilationFailure(Diagnostic failure, string scriptName) - { - if (failure.Location.IsInSource) - { - var location = failure.Location.GetMappedLineSpan(); - string sourcePath = string.IsNullOrWhiteSpace(location.Path) ? scriptName : location.Path; - return string.Format(Translations.script_compile_error, - sourcePath, - location.StartLinePosition.Line + 1, - location.StartLinePosition.Character + 1, - failure.Id, - failure.GetMessage()); - } - - return string.Format(Translations.script_compile_error_no_location, scriptName, failure.Id, failure.GetMessage()); - } - - /// - /// Quickly calculate a hash for the given script - /// - /// script lines - /// Quick hash as unsigned long - private static ulong QuickHash(string[] lines) - { - ulong hashedValue = 3074457345618258791ul; - for (int i = 0; i < lines.Length; i++) - { - for (int j = 0; j < lines[i].Length; j++) - { - hashedValue += lines[i][j]; - hashedValue *= 3074457345618258799ul; - } - hashedValue += '\n'; - hashedValue *= 3074457345618258799ul; - } - return hashedValue; - } - } - - /// - /// Describe a C# script error type - /// - public enum CSErrorType { FileReadError, InvalidScript, LoadError, RuntimeError }; - - /// - /// Describe a C# script error with associated error type - /// - public class CSharpException : Exception - { - private readonly CSErrorType _type; - public CSErrorType ExceptionType { get { return _type; } } - public override string Message { get { return InnerException!.Message; } } - public override string ToString() { return InnerException!.ToString(); } - public CSharpException(CSErrorType type, Exception inner) : base(inner.Message, inner) - { - _type = type; - } - } - - /// - /// Represents the C# API object accessible from C# Scripts - /// - public class CSharpAPI : ChatBot - { - /// - /// Holds local variables passed along with the script - /// - private readonly Dictionary? localVars; - - /// - /// Create a new C# API Wrapper - /// - /// ChatBot API Handler - /// ChatBot tick handler - /// Local variables passed along with the script - public CSharpAPI(ChatBot apiHandler, Dictionary? localVars, string? scriptOwnerKey = null) - { - SetMaster(apiHandler); - this.localVars = localVars; - SetScriptOwnerKey(scriptOwnerKey); - } - - /// - /// Access the shared MCC gameplay API used by bots and the embedded MCP server. - /// - new public MccGameApi Game => base.Game; - - /* == Wrappers for ChatBot API with public visibility and call limit to one per tick for safety == */ - - /// - /// Write some text in the console. Nothing will be sent to the server. - /// - /// Log text to write - new public void LogToConsole(object text) - { - base.LogToConsole(text); - } - - /// - /// Send text to the server. Can be anything such as chat messages or commands - /// - /// Text to send to the server - /// TRUE if successfully sent (Deprectated, always returns TRUE for compatibility purposes with existing scripts) - public bool SendText(object text) - { - return base.SendText(text is string str ? str : text.ToString() ?? string.Empty); - } - - /// - /// Perform an internal MCC command (not a server command, use SendText() instead for that!) - /// - /// The command to process - /// Local variables passed along with the internal command - /// TRUE if the command was indeed an internal MCC command - new public bool PerformInternalCommand(string command, Dictionary? localVars = null) - { - localVars ??= this.localVars; - return base.PerformInternalCommand(command, localVars); - } - - /// - /// Disconnect from the server and restart the program - /// It will unload and reload all the bots and then reconnect to the server - /// - /// If connection fails, the client will make X extra attempts - /// Optional delay, in seconds, before restarting - new public void ReconnectToTheServer(int extraAttempts = -999999, int delaySeconds = 0, bool keepAccountAndServerSettings = false) - { - if (extraAttempts == -999999) - base.ReconnectToTheServer(delaySeconds: delaySeconds, keepAccountAndServerSettings: keepAccountAndServerSettings); - else - base.ReconnectToTheServer(extraAttempts, delaySeconds, keepAccountAndServerSettings); - } - - /// - /// Disconnect from the server and exit the program - /// - new public void DisconnectAndExit() - { - base.DisconnectAndExit(); - } - - /// - /// Load the provided ChatBot object - /// - /// Bot to load - new public void LoadBot(ChatBot bot) - { - base.LoadBot(bot); - } - - /// - /// Return the list of currently online players - /// - /// List of online players - new public string[] GetOnlinePlayers() - { - return base.GetOnlinePlayers(); - } - - /// - /// Get a dictionary of online player names and their corresponding UUID - /// - /// - /// dictionary of online player whereby - /// UUID represents the key - /// playername represents the value - new public Dictionary GetOnlinePlayersWithUUID() - { - return base.GetOnlinePlayersWithUUID(); - } - - /* == Additional Methods useful for Script API == */ - - /// - /// Get a global variable by name - /// - /// Name of the variable - /// Value of the variable or null if no variable - public object? GetVar(string varName) - { - if (localVars is not null && localVars.ContainsKey(varName)) - return localVars[varName]; - else - return Config.AppVar.GetVar(varName); - } - - /// - /// Set a global variable for further use in any other script - /// - /// Name of the variable - /// Value of the variable - public bool SetVar(string varName, object varValue) - { - if (localVars is not null && localVars.ContainsKey(varName)) - localVars.Remove(varName); - return Config.AppVar.SetVar(varName, varValue); - } - - /// - /// Get a global variable by name, as the specified type, and try converting it if possible. - /// If you know what you are doing and just want a cast, use (T)MCC.GetVar("name") instead. - /// - /// Variable type - /// Variable name - /// Variable as specified type or default value for this type - public T? GetVar(string varName) - { - object? value = GetVar(varName); - if (value is T Tval) - return Tval; - if (value is not null) - { - try - { - TypeConverter converter = TypeDescriptor.GetConverter(typeof(T)); - if (converter is not null) - return (T?)converter.ConvertFromString(value.ToString() ?? string.Empty); - } - catch (NotSupportedException) { /* Was worth trying */ } - } - return default; - } - - //Named shortcuts for GetVar(varname) - public string? GetVarAsString(string varName) { return GetVar(varName); } - public int GetVarAsInt(string varName) { return GetVar(varName); } - public double GetVarAsDouble(string varName) { return GetVar(varName); } - public bool GetVarAsBool(string varName) { return GetVar(varName); } - - /// - /// Load login/password using an account alias and optionally reconnect to the server - /// - /// Account alias - /// Set to true to reconnecto to the server afterwards - /// True if the account was found and loaded - public bool SetAccount(string accountAlias, bool andReconnect = false) - { - bool result = Config.Main.Advanced.SetAccount(accountAlias); - if (result && andReconnect) - ReconnectToTheServer(keepAccountAndServerSettings: true); - return result; - } - - /// - /// Load new server information and optionally reconnect to the server - /// - /// "serverip:port" couple or server alias - /// True if the server IP was valid and loaded, false otherwise - public bool SetServer(string server, bool andReconnect = false) - { - bool result = Config.Main.SetServerIP(new MainConfigHelper.MainConfig.ServerInfoConfig(server), true); - if (result && andReconnect) - ReconnectToTheServer(keepAccountAndServerSettings: true); - return result; - } - - /// - /// Synchronously call another script and retrieve the result - /// - /// Script to call - /// Arguments to pass to the script - /// An object returned by the script, or null - public object? CallScript(string script, string[] args) - { - ChatBots.Script.LookForScript(ref script); - string[] lines; - try - { - lines = File.ReadAllLines(script, Encoding.UTF8); - } - catch (Exception e) - { - throw new CSharpException(CSErrorType.FileReadError, e); - } - return CSharpRunner.Run(this, lines, args, localVars, scriptName: script); - } - } -} diff --git a/MinecraftClient/Scripting/ChatBot.cs b/MinecraftClient/Scripting/ChatBot.cs deleted file mode 100644 index b8f21e35e3..0000000000 --- a/MinecraftClient/Scripting/ChatBot.cs +++ /dev/null @@ -1,1911 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using Brigadier.NET; -using Brigadier.NET.Builder; -using MinecraftClient.CommandHandler; -using MinecraftClient.CommandHandler.Patch; -using MinecraftClient.Inventory; -using MinecraftClient.Mapping; -using static MinecraftClient.Settings; - -namespace MinecraftClient.Scripting -{ - /// - /// Welcome to the Bot API file ! - /// The virtual class "ChatBot" contains anything you need for creating chat bots - /// Inherit from this class while adding your bot class to the "ChatBots" folder. - /// Override the methods you want for handling events: Initialize, Update, GetText. - /// - /// For testing your bot you can add it in McClient.cs (see comment at line ~199). - /// Your bot will be loaded everytime MCC is started so that you can test/debug. - /// - /// Once your bot is fully written and tested, you can export it a standalone script. - /// This way it can be loaded in newer MCC builds, without modifying MCC itself. - /// See config/sample-script-with-chatbot.cs for a ChatBot script example. - /// - - /// - /// The virtual class containing anything you need for creating chat bots. - /// - public abstract class ChatBot - { - public enum DisconnectReason { InGameKick, LoginRejected, ConnectionLost, UserLogout }; - - //Handler will be automatically set on bot loading, don't worry about this - public void SetHandler(McClient handler) { _handler = handler; } - protected void SetMaster(ChatBot master) { this.master = master; } - protected void LoadBot(ChatBot bot) - { - if (ScriptOwnerKey is not null) - bot.SetScriptOwnerKey(ScriptOwnerKey); - - if (Handler.GetLoadedChatBots().Any(loadedBot => ReferenceEquals(loadedBot, bot))) - Handler.BotUnLoad(bot); - - Handler.BotLoad(bot); - } - protected List GetLoadedChatBots() { return Handler.GetLoadedChatBots(); } - protected void UnLoadBot(ChatBot bot) { Handler.BotUnLoad(bot); } - internal string? ScriptOwnerKey { get; private set; } - internal void SetScriptOwnerKey(string? scriptOwnerKey) { ScriptOwnerKey = scriptOwnerKey; } - private McClient? _handler = null; - private ChatBot? master = null; - private readonly List registeredPluginChannels = new(); - private readonly List registeredChatBotCommands = new(); - private readonly Lock delayTasksLock = new(); - private readonly List delayedTasks = new(); - private MccGameApi? _game; - protected McClient Handler - { - get - { - if (master is not null) - return master.Handler; - if (_handler is not null) - return _handler; - throw new InvalidOperationException(Translations.exception_chatbot_init); - } - } - - /// - /// Shared gameplay and observed-state API used by MCP and available to built-in bots and scripts. - /// - protected MccGameApi Game => _game ??= new MccGameApi(() => Handler); - - /// - /// Will be called every client tick (~50ms at 20 TPS). - /// - /// - /// method can be overridden by child class so need an extra update method - /// - public void UpdateInternal() - { - lock (delayTasksLock) - { - if (delayedTasks.Count > 0) - { - List tasksToRemove = new(); - for (int i = 0; i < delayedTasks.Count; i++) - { - if (delayedTasks[i].Tick()) - { - delayedTasks[i].Task(); - tasksToRemove.Add(i); - } - } - if (tasksToRemove.Count > 0) - { - tasksToRemove.Sort((a, b) => b.CompareTo(a)); // descending sort - foreach (int index in tasksToRemove) - { - delayedTasks.RemoveAt(index); - } - } - } - } - } - - /* ================================================== */ - /* Main methods to override for creating your bot */ - /* ================================================== */ - - /// - /// Anything you want to initialize your bot, will be called on load by MinecraftCom - /// This method is called only once, whereas AfterGameJoined() is called once per server join. - /// - /// NOTE: Chat messages cannot be sent at this point in the login process. - /// If you want to send a message when the bot is loaded, use AfterGameJoined. - /// - public virtual void Initialize() { } - - /// - /// This method is called when the bot is being unloaded, you can use it to free up resources like DB connections - /// - public virtual void OnUnload() { } - - /// - /// Called after the server has been joined successfully and chat messages are able to be sent. - /// This method is called again after reconnecting to the server, whereas Initialize() is called only once. - /// - /// NOTE: This is not always right after joining the server - if the bot was loaded after logging - /// in this is still called. - /// - public virtual void AfterGameJoined() { } - - /// - /// Will be called every client tick (~50ms, 20 TPS) if loaded in MinecraftCom - /// - public virtual void Update() { } - - /// - /// Will be called every player break block in gamemode 0 - /// - /// Player - /// Block location - /// Destroy stage, maximum 255 - public virtual void OnBlockBreakAnimation(Entity entity, Location location, byte stage) { } - - /// - /// Will be called every animations of the hit and place block - /// - /// Player - /// 0 = LMB, 1 = RMB (RMB Corrent not work) - public virtual void OnEntityAnimation(Entity entity, byte animation) { } - - /// - /// Any text sent by the server will be sent here by MinecraftCom - /// - /// Text from the server - public virtual void GetText(string text) { } - - /// - /// Any text sent by the server will be sent here by MinecraftCom (extended variant) - /// - /// - /// You can use Json.ParseJson() to obtain a System.Text.Json.Nodes.JsonNode for processing. - /// - /// Text from the server - /// Raw JSON from the server. This parameter will be NULL on MC 1.5 or lower! - public virtual void GetText(string text, string? json) { } - - /// - /// Is called when the client has been disconnected fom the server - /// - /// Disconnect Reason - /// Kick message, if any - /// Return TRUE if the client is about to restart - public virtual bool OnDisconnect(DisconnectReason reason, string message) { return false; } - - /// - /// Called when a plugin channel message is received. - /// The given channel must have previously been registered with RegisterPluginChannel. - /// This can be used to communicate with server mods or plugins. See wiki.vg for more - /// information about plugin channels: http://wiki.vg/Plugin_channel - /// - /// The name of the channel - /// The payload for the message - public virtual void OnPluginMessage(string channel, byte[] data) { } - - /// - /// Called when properties for the Player entity are received from the server - /// - /// Dictionary of player properties - public virtual void OnPlayerProperty(Dictionary prop) { } - - /// - /// Called when server TPS are recalculated by MCC based on world time updates - /// - /// New estimated server TPS (between 0 and 20) - public virtual void OnServerTpsUpdate(double tps) { } - - /// - /// Called when a time changed - /// - /// World age - /// Time - public virtual void OnTimeUpdate(long WorldAge, long TimeOfDay) { } - - /// - /// Called when an entity moved nearby - /// - /// Entity with updated location - public virtual void OnEntityMove(Entity entity) { } - - /// - /// Called when a tracked entity receives a velocity update packet. - /// Velocity is expressed in blocks per tick. - /// - /// Entity with updated velocity - /// Velocity on X axis (blocks/tick) - /// Velocity on Y axis (blocks/tick) - /// Velocity on Z axis (blocks/tick) - public virtual void OnEntityVelocity(Entity entity, double velocityX, double velocityY, double velocityZ) { } - - /// - /// Called when a sound packet is received. - /// The sound name is null when the protocol provides only a registry id. - /// - /// Sound key when available, otherwise null - /// Sound position when available - /// Sound category id from packet - /// Sound volume - /// Sound pitch - /// Source entity for entity-sound packets when tracked - public virtual void OnSoundEffect(string? soundName, Location? location, int category, float volume, float pitch, - Entity? sourceEntity) - { } - - /// - /// Called when an entity rotates - /// - /// Entity with updated rotation - public virtual void OnEntityRotate(Entity entity) { } - - /// - /// Called after an internal MCC command has been performed - /// - /// MCC Command Name - /// MCC Command Parameters - /// MCC command result - public virtual void OnInternalCommand(string commandName, string commandParams, CmdResult Result) { } - - /// - /// Called when an entity spawned nearby - /// - /// New Entity - public virtual void OnEntitySpawn(Entity entity) { } - - /// - /// Called when an entity despawns/dies nearby - /// - /// Entity wich has just disappeared - public virtual void OnEntityDespawn(Entity entity) { } - - /// - /// Called when the player held item has changed - /// - /// New slot ID - public virtual void OnHeldItemChange(byte slot) { } - - /// - /// Called when the player health has been updated - /// - /// New player health - /// New food level - public virtual void OnHealthUpdate(float health, int food) { } - - /// - /// Called when an explosion occurs on the server - /// - /// Explosion location - /// Explosion strength - /// Amount of blocks blown up - public virtual void OnExplosion(Location explode, float strength, int recordcount) { } - - /// - /// Called when experience updates - /// - /// Between 0 and 1 - /// Level - /// Total Experience - public virtual void OnSetExperience(float Experiencebar, int Level, int TotalExperience) { } - - /// - /// Called when the Game Mode has been updated for a player - /// - /// Player Name - /// Player UUID - /// New Game Mode (0: Survival, 1: Creative, 2: Adventure, 3: Spectator). - public virtual void OnGamemodeUpdate(string playername, Guid uuid, int gamemode) { } - - /// - /// Called when the Latency has been updated for a player - /// - /// Player Name - /// Player UUID - /// Latency. - public virtual void OnLatencyUpdate(string playername, Guid uuid, int latency) { } - - /// - /// Called when the Latency has been updated for a player - /// - /// Entity - /// Player Name - /// Player UUID - /// Latency. - public virtual void OnLatencyUpdate(Entity entity, string playername, Guid uuid, int latency) { } - - /// - /// Called when an update of the map is sent by the server, take a look at https://wiki.vg/Protocol#Map_Data for more info on the fields - /// Map format and colors: https://minecraft.wiki/w/Map_item_format - /// - /// Map ID of the map being modified - /// A scale of the Map, from 0 for a fully zoomed-in map (1 block per pixel) to 4 for a fully zoomed-out map (16 blocks per pixel) - /// Specifies whether player and item frame icons are shown - /// True if the map has been locked in a cartography table - /// A list of MapIcon objects of map icons, send only if trackingPosition is true - /// Numbs of columns that were updated (map width) (NOTE: If it is 0, the next fields are not used/are set to default values of 0 and null respectively) - /// Map height - /// x offset of the westernmost column - /// z offset of the northernmost row - /// a byte array of colors on the map - public virtual void OnMapData(int mapid, byte scale, bool trackingPosition, bool locked, List icons, byte columnsUpdated, byte rowsUpdated, byte mapCoulmnX, byte mapRowZ, byte[]? colors) { } - - /// - /// Called when tradeList is received from server - /// - /// Window ID - /// List of trades. - /// Contains Level, Experience, IsRegularVillager and CanRestock . - public virtual void OnTradeList(int windowID, List trades, VillagerInfo villagerInfo) { } - - /// - /// Called when received a title from the server - /// 0 = set title, 1 = set subtitle, 3 = set action bar, 4 = set times and display, 4 = hide, 5 = reset - /// title text - /// suntitle text - /// action bar text - /// Fade In - /// Stay - /// Fade Out - /// json text - public virtual void OnTitle(int action, string titletext, string subtitletext, string actionbartext, int fadein, int stay, int fadeout, string json) { } - - /// - /// Called when an entity equipped - /// - /// Entity - /// Equipment slot. 0: main hand, 1: off hand, 2–5: armor slot (2: boots, 3: leggings, 4: chestplate, 5: helmet) - /// Item) - public virtual void OnEntityEquipment(Entity entity, int slot, Item? item) { } - - /// - /// Called when an entity has effect applied - /// - /// entity - /// effect id - /// effect amplifier - /// effect duration - /// effect flags - public virtual void OnEntityEffect(Entity entity, Effects effect, int amplifier, int duration, byte flags) { } - - /// - /// Called when an entity has an effect removed (expired or cleared) - /// - /// Entity - /// Effect that was removed - public virtual void OnRemoveEntityEffect(Entity entity, Effects effect) { } - - /// - /// Called when a scoreboard objective updated - /// - /// objective name - /// 0 to create the scoreboard. 1 to remove the scoreboard. 2 to update the display text. - /// Only if mode is 0 or 2. The text to be displayed for the score - /// Only if mode is 0 or 2. 0 = "integer", 1 = "hearts". - /// Number format: 0 - blank, 1 - styled, 2 - fixed - public virtual void OnScoreboardObjective(string objectiveName, byte mode, string objectiveValue, int type, string json, int numberFormat) { } - - /// - /// Called when a scoreboard updated - /// - /// The entity whose score this is. For players, this is their username; for other entities, it is their UUID. - /// 0 to create/update an item. 1 to remove an item. - /// The name of the objective the score belongs to - /// The name of the objective the score belongs to, but with chat formatting - /// The score to be displayed next to the entry. Only sent when Action does not equal 1. - /// Number format: 0 - blank, 1 - styled, 2 - fixed - public virtual void OnUpdateScore(string entityName, int action, string objectiveName, string objectiveDisplayName, int value, int numberFormat) { } - - /// - /// Called when a Teams packet is received from the server. - /// - /// Internal team name (up to 16 chars) - /// 0=create, 1=remove, 2=update, 3=add players, 4=remove players - /// Display name (formatted). Present when method is 0 or 2. - /// Bit 0=allowFriendlyFire, bit 1=seeFriendlyInvisibles. Present when method is 0 or 2. - /// Nametag visibility rule. Present when method is 0 or 2. - /// Collision rule. Present when method is 0 or 2. - /// ChatFormatting color value (-1=none). Present when method is 0 or 2. - /// Member name prefix (formatted). Present when method is 0 or 2. - /// Member name suffix (formatted). Present when method is 0 or 2. - /// Player/entity names. Present when method is 0, 3, or 4. - public virtual void OnTeam(string teamName, byte method, string displayName, byte friendlyFlags, - string nameTagVisibility, string collisionRule, int color, - string prefix, string suffix, List players) - { } - - /// - /// Called when the client received the Tab Header and Footer - /// - /// Header - /// Footer - public virtual void OnTabListHeaderAndFooter(string header, string footer) { } - - /// - /// Called when an inventory/container was updated by server - /// - /// - public virtual void OnInventoryUpdate(int inventoryId) { } - - /// - /// Called when a container was opened - /// - /// - public virtual void OnInventoryOpen(int inventoryId) { } - - /// - /// Called when a container was closed - /// - /// - public virtual void OnInventoryClose(int inventoryId) { } - - /// - /// When received inventory/container/window properties from the server. - /// Used for Frunaces, Enchanting Table, Beacon, Brewing stand, Stone cutter, Loom and Lectern - /// More info about: https://wiki.vg/Protocol#Set_Container_Property - /// - /// Inventory ID - /// Property ID - /// Property Value - public virtual void OnInventoryProperties(byte inventoryID, short propertyId, short propertyValue) { } - - /// - /// When received enchantments from the server this method is called - /// Enchantment levels are the levels of enchantment (eg. I, II, III, IV, V) (eg. Smite IV, Power III, Knockback II ..) - /// Enchantment level requirements are the levels that player needs to have in order to enchant the item - /// - /// Enchantment in the top most slot - /// Enchantment in the middle slot - /// Enchantment in the bottom slot - /// Enchantment level for the enchantment in the top most slot - /// Enchantment level for the enchantment in the middle slot - /// Enchantment level for the enchantment in the bottom slot - /// Levels required by player for the enchantment in the top most slot - /// Levels required by player for the enchantment in the middle slot - /// Levels required by player for the enchantment in the bottom slot - public virtual void OnEnchantments( - Enchantments topEnchantment, - Enchantments middleEnchantment, - Enchantments bottomEnchantment, - short topEnchantmentLevel, - short middleEnchantmentLevel, - short bottomEnchantmentLevel, - short topEnchantmentLevelRequirement, - short middleEnchantmentLevelRequirement, - short bottomEnchantmentLevelRequirement) - { } - - /// - /// When received enchantments from the server this method is called - /// Enchantment levels are the levels of enchantment (eg. I, II, III, IV, V) (eg. Smite IV, Power III, Knockback II ..) - /// Enchantment level requirements are the levels that player needs to have in order to enchant the item - /// - /// Enchantment data/info - public virtual void OnEnchantments(EnchantmentData enchantment) { } - - /// - /// Called when a player joined the game - /// - /// UUID of the player - /// Name of the player - public virtual void OnPlayerJoin(Guid uuid, string name) { } - - /// - /// Called when a player left the game - /// - /// UUID of the player - /// Name of the player - public virtual void OnPlayerLeave(Guid uuid, string? name) { } - - /// - /// This method is called when a player has been killed by another entity - /// - /// Killer's entity - /// message sent in chat when player is killed - public virtual void OnKilled(Entity killerEntity, string chatMessage) { } - - /// - /// Called when the player dies - /// For getting the info about the player/entity who killed the player use OnPlayerKilled - /// - public virtual void OnDeath() { } - - /// - /// Called when the player respawns - /// - public virtual void OnRespawn() { } - - /// - /// Called when the health of an entity changed - /// - /// Entity - /// The health of the entity - public virtual void OnEntityHealth(Entity entity, float health) { } - - /// - /// Called when the metadata of an entity changed - /// - /// Entity - /// The metadata of the entity - public virtual void OnEntityMetadata(Entity entity, Dictionary metadata) { } - - /// - /// Called when the status of client player have been changed - /// - /// - public virtual void OnPlayerStatus(byte statusId) { } - - /// - /// Called when a network packet received or sent - /// - /// - /// You need to enable this event by calling with True before you can use this event - /// - /// Packet ID - /// A copy of Packet Data - /// The packet is login phase or playing phase - /// The packet is received from server or sent by client - public virtual void OnNetworkPacket(int packetID, List packetData, bool isLogin, bool isInbound) { } - - /// - /// Called when the rain level have been changed - /// - /// - public virtual void OnRainLevelChange(float level) { } - - /// - /// Called when the thunder level have been changed - /// - /// - public virtual void OnThunderLevelChange(float level) { } - - - /// - /// Called when a block is changed. - /// - /// The location of the block. - /// The block - public virtual void OnBlockChange(Location location, Block block) { } - - /// - /// Called when achievement/advancement data is updated. - /// - /// Achievements that were added or updated - /// IDs of achievements that were removed - /// Whether the achievement state was fully reset before this update - public virtual void OnAchievementUpdate(IReadOnlyList updated, IReadOnlyList removedIds, bool reset) { } - - /* =================================================================== */ - /* ToolBox - Methods below might be useful while creating your bot. */ - /* You should not need to interact with other classes of the program. */ - /* All the methods in this ChatBot class should do the job for you. */ - /* =================================================================== */ - - /// - /// Send text to the server. Can be anything such as chat messages or commands - /// - /// Text to send to the server - /// Bypass send queue (Deprecated, still there for compatibility purposes but ignored) - /// TRUE if successfully sent (Deprectated, always returns TRUE for compatibility purposes with existing scripts) - protected bool SendText(string text, bool sendImmediately = false) - { - LogToConsole("Sending '" + text + "'"); - Handler.SendText(text); - return true; - } - - /// - /// Perform an internal MCC command (not a server command, use SendText() instead for that!) - /// - /// The command to process - /// Local variables passed along with the command - /// TRUE if the command was indeed an internal MCC command - protected bool PerformInternalCommand(string command, Dictionary? localVars = null) - { - CmdResult temp = new(); - return Handler.PerformInternalCommand(command, ref temp, localVars); - } - - /// - /// Perform an internal MCC command (not a server command, use SendText() instead for that!) - /// - /// The command to process - /// May contain a confirmation or error message after processing the command, or "" otherwise. - /// Local variables passed along with the command - /// TRUE if the command was indeed an internal MCC command - protected bool PerformInternalCommand(string command, ref CmdResult result, Dictionary? localVars = null) - { - return Handler.PerformInternalCommand(command, ref result, localVars); - } - - /// - /// Remove color codes ("§c" and "§#rrggbb") from a text message received from the server - /// - public static string GetVerbatim(string? text) - { - if (string.IsNullOrEmpty(text)) - return string.Empty; - - int idx = 0; - var data = new char[text.Length]; - - for (int i = 0; i < text.Length; i++) - { - if (text[i] != '§') - { - data[idx++] = text[i]; - } - else if (i + 1 < text.Length && text[i + 1] == '#' && i + 7 < text.Length) - { - i += 7; // skip §#rrggbb (8 chars total, loop increments once) - } - else - { - i++; // skip §x (2 chars total) - } - } - - return new string(data, 0, idx); - } - - /// - /// Verify that a string contains only a-z A-Z 0-9 and _ characters. - /// - public static bool IsValidName(string username) - { - if (string.IsNullOrEmpty(username)) - return false; - - foreach (char c in username) - if (!(c >= 'a' && c <= 'z' - || c >= 'A' && c <= 'Z' - || c >= '0' && c <= '9' - || c == '_')) - return false; - - return true; - } - - /// - /// Returns true if the text passed is a private message sent to the bot - /// - /// text to test - /// if it's a private message, this will contain the message - /// if it's a private message, this will contain the player name that sends the message - /// Returns true if the text is a private message - protected static bool IsPrivateMessage(string text, ref string message, ref string sender) - { - if (string.IsNullOrEmpty(text)) - return false; - - text = GetVerbatim(text); - - //User-defined regex for private chat messages - if (Config.ChatFormat.UserDefined && !string.IsNullOrWhiteSpace(Config.ChatFormat.Private)) - { - Match regexMatch = Regex.Match(text, Config.ChatFormat.Private); - if (regexMatch.Success && regexMatch.Groups.Count >= 3) - { - sender = regexMatch.Groups[1].Value; - message = regexMatch.Groups[2].Value; - return IsValidName(sender); - } - } - - //Built-in detection routine for private messages - if (Config.ChatFormat.Builtins) - { - string[] tmp = text.Split(' '); - try - { - //Detect vanilla /tell messages - //Someone whispers message (MC 1.5) - //Someone whispers to you: message (MC 1.7) - if (tmp.Length > 2 && tmp[1] == "whispers") - { - if (tmp.Length > 4 && tmp[2] == "to" && tmp[3] == "you:") - { - message = text[(tmp[0].Length + 18)..]; //MC 1.7 - } - else message = text[(tmp[0].Length + 10)..]; //MC 1.5 - sender = tmp[0]; - return IsValidName(sender); - } - - //Detect Essentials (Bukkit) /m messages - //[Someone -> me] message - //[~Someone -> me] message - else if (text[0] == '[' && tmp.Length > 3 && tmp[1] == "->" - && (tmp[2].ToLower() == "me]" || tmp[2].ToLower() == "moi]")) //'me' is replaced by 'moi' in french servers - { - message = text[(tmp[0].Length + 4 + tmp[2].Length + 1)..]; - sender = tmp[0][1..]; - if (sender[0] == '~') { sender = sender[1..]; } - return IsValidName(sender); - } - - //Detect Modified server messages. /m - //[Someone @ me] message - else if (text[0] == '[' && tmp.Length > 3 && tmp[1] == "@" - && (tmp[2].ToLower() == "me]" || tmp[2].ToLower() == "moi]")) //'me' is replaced by 'moi' in french servers - { - message = text[(tmp[0].Length + 4 + tmp[2].Length + 0)..]; - sender = tmp[0][1..]; - if (sender[0] == '~') { sender = sender[1..]; } - return IsValidName(sender); - } - - //Detect Essentials (Bukkit) /me messages with some custom prefix - //[Prefix] [Someone -> me] message - //[Prefix] [~Someone -> me] message - else if (text[0] == '[' && tmp[0][^1] == ']' - && tmp[1][0] == '[' && tmp.Length > 4 && tmp[2] == "->" - && (tmp[3].ToLower() == "me]" || tmp[3].ToLower() == "moi]")) - { - message = text[(tmp[0].Length + 1 + tmp[1].Length + 4 + tmp[3].Length + 1)..]; - sender = tmp[1][1..]; - if (sender[0] == '~') { sender = sender[1..]; } - return IsValidName(sender); - } - - //Detect Essentials (Bukkit) /me messages with some custom rank - //[Someone [rank] -> me] message - //[~Someone [rank] -> me] message - else if (text[0] == '[' && tmp.Length > 3 && tmp[2] == "->" - && (tmp[3].ToLower() == "me]" || tmp[3].ToLower() == "moi]")) - { - message = text[(tmp[0].Length + 1 + tmp[1].Length + 4 + tmp[2].Length + 1)..]; - sender = tmp[0][1..]; - if (sender[0] == '~') { sender = sender[1..]; } - return IsValidName(sender); - } - - //Detect HeroChat PMsend - //From Someone: message - else if (text.StartsWith("From ")) - { - sender = text[5..].Split(':')[0]; - message = text[(text.IndexOf(':') + 2)..]; - return IsValidName(sender); - } - else return false; - } - catch (IndexOutOfRangeException) { /* Not an expected chat format */ } - catch (ArgumentOutOfRangeException) { /* Same here */ } - } - - return false; - } - - /// - /// Returns true if the text passed is a public message written by a player on the chat - /// - /// text to test - /// if it's message, this will contain the message - /// if it's message, this will contain the player name that sends the message - /// Returns true if the text is a chat message - protected static bool IsChatMessage(string text, ref string message, ref string sender) - { - if (string.IsNullOrEmpty(text)) - return false; - - text = GetVerbatim(text); - - //User-defined regex for public chat messages - if (Config.ChatFormat.UserDefined && !string.IsNullOrWhiteSpace(Config.ChatFormat.Public)) - { - Match regexMatch = Regex.Match(text, Config.ChatFormat.Public); - if (regexMatch.Success && regexMatch.Groups.Count >= 3) - { - sender = regexMatch.Groups[1].Value; - message = regexMatch.Groups[2].Value; - return IsValidName(sender); - } - } - - //Built-in detection routine for public messages - if (Config.ChatFormat.Builtins) - { - string[] tmp = text.Split(' '); - - //Detect vanilla/factions Messages - // message - //<*Faction Someone> message - //<*Faction Someone>: message - //<*Faction ~Nicknamed>: message - if (text[0] == '<') - { - try - { - text = text[1..]; - string[] tmp2 = text.Split('>'); - sender = tmp2[0]; - message = text[(sender.Length + 2)..]; - if (message.Length > 1 && message[0] == ' ') - { message = message[1..]; } - tmp2 = sender.Split(' '); - sender = tmp2[^1]; - if (sender[0] == '~') { sender = sender[1..]; } - return IsValidName(sender); - } - catch (IndexOutOfRangeException) { /* Not a vanilla/faction message */ } - catch (ArgumentOutOfRangeException) { /* Same here */ } - } - - //Detect HeroChat Messages - //Public chat messages - //[Channel] [Rank] User: Message - else if (text[0] == '[' && text.Contains(':') && tmp.Length > 2) - { - try - { - int name_end = text.IndexOf(':'); - int name_start = text[..name_end].LastIndexOf(']') + 2; - sender = text[name_start..name_end]; - message = text[(name_end + 2)..]; - return IsValidName(sender); - } - catch (IndexOutOfRangeException) { /* Not a herochat message */ } - catch (ArgumentOutOfRangeException) { /* Same here */ } - } - - //Detect (Unknown Plugin) Messages - //**Faction User : Message - else if (text[0] == '*' - && text.Length > 1 - && text[1] != ' ' - && text.Contains('<') && text.Contains('>') - && text.Contains(' ') && text.Contains(':') - && text.IndexOf('*') < text.IndexOf('<') - && text.IndexOf('<') < text.IndexOf('>') - && text.IndexOf('>') < text.IndexOf(' ') - && text.IndexOf(' ') < text.IndexOf(':')) - { - try - { - string prefix = tmp[0]; - string user = tmp[1]; - string semicolon = tmp[2]; - if (prefix.All(c => char.IsLetterOrDigit(c) || new[] { '*', '<', '>', '_' }.Contains(c)) - && semicolon == ":") - { - message = text[(prefix.Length + user.Length + 4)..]; - return IsValidName(user); - } - } - catch (IndexOutOfRangeException) { /* Not a message */ } - catch (ArgumentOutOfRangeException) { /* Same here */ } - } - } - - return false; - } - - /// - /// Returns true if the text passed is a teleport request (Essentials) - /// - /// Text to parse - /// Will contain the sender's username, if it's a teleport request - /// Returns true if the text is a teleport request - protected static bool IsTeleportRequest(string text, ref string sender) - { - if (string.IsNullOrEmpty(text)) - return false; - - text = GetVerbatim(text); - - //User-defined regex for teleport requests - if (Config.ChatFormat.UserDefined && !string.IsNullOrWhiteSpace(Config.ChatFormat.TeleportRequest)) - { - Match regexMatch = Regex.Match(text, Config.ChatFormat.TeleportRequest); - if (regexMatch.Success && regexMatch.Groups.Count >= 2) - { - sender = regexMatch.Groups[1].Value; - return IsValidName(sender); - } - } - - //Built-in detection routine for teleport requests - if (Config.ChatFormat.Builtins) - { - string[] tmp = text.Split(' '); - - //Detect Essentials teleport requests, prossibly with - //nicknamed names or other modifications such as HeroChat - if (text.EndsWith("has requested to teleport to you.") - || text.EndsWith("has requested that you teleport to them.")) - { - // Username has requested... - //[Rank] Username has requested... - if ((tmp[0].StartsWith("<") && tmp[0].EndsWith(">") - || tmp[0].StartsWith("[") && tmp[0].EndsWith("]")) - && tmp.Length > 1) - sender = tmp[1]; - else //Username has requested.. - sender = tmp[0]; - - //~Username has requested... - if (sender.Length > 1 && sender[0] == '~') - sender = sender[1..]; - - //Final check on username validity - return IsValidName(sender); - } - } - - return false; - } - - /// - /// Write some text in the console. Nothing will be sent to the server. - /// - /// Log text to write - protected void LogToConsole(object? text) - { - string botName = Translations.ResourceManager.GetString("botname." + GetType().Name) ?? GetType().Name; - if (_handler is null || master is null) - ConsoleIO.WriteLogLine(string.Format("[{0}] {1}", botName, text)); - else - Handler.Log.Info(string.Format("[{0}] {1}", botName, text)); - string logfile = Config.AppVar.ExpandVars(Config.Main.Advanced.ChatbotLogFile); - - if (!string.IsNullOrEmpty(logfile)) - { - if (!File.Exists(logfile)) - { - try { Directory.CreateDirectory(Path.GetDirectoryName(logfile)!); } - catch { return; /* Invalid path or access denied */ } - try { File.WriteAllText(logfile, ""); } - catch { return; /* Invalid file name or access denied */ } - } - - File.AppendAllLines(logfile, [GetTimestamp() + ' ' + text]); - } - } - - protected static void LogToConsole(string originBotName, object? text) - { - string botName = Translations.ResourceManager.GetString(originBotName) ?? originBotName; - ConsoleIO.WriteLogLine(string.Format("[{0}] {1}", botName, text)); - string logfile = Config.AppVar.ExpandVars(Config.Main.Advanced.ChatbotLogFile); - - if (!string.IsNullOrEmpty(logfile)) - { - if (!File.Exists(logfile)) - { - try { Directory.CreateDirectory(Path.GetDirectoryName(logfile)!); } - catch { return; /* Invalid path or access denied */ } - try { File.WriteAllText(logfile, ""); } - catch { return; /* Invalid file name or access denied */ } - } - - File.AppendAllLines(logfile, [GetTimestamp() + ' ' + text]); - } - } - - /// - /// Write some text in the console, but only if DebugMessages is enabled in INI file. Nothing will be sent to the server. - /// - /// Debug log text to write - protected void LogDebugToConsole(object text) - { - if (Config.Logging.DebugMessages) - LogToConsole(text); - } - - /// - /// Write the translated text in the console by giving a translation key. Nothing will be sent to the server. - /// - /// Translation key - /// - protected void LogToConsoleTranslated(string key, params object[] args) - { - LogToConsole(string.Format(Translations.ResourceManager.GetString(key) ?? key, args)); - } - - /// - /// Write the translated text in the console by giving a translation key, but only if DebugMessages is enabled in INI file. Nothing will be sent to the server. - /// - /// Translation key - /// - protected void LogDebugToConsoleTranslated(string key, params object?[] args) - { - LogDebugToConsole(string.Format(Translations.ResourceManager.GetString(key) ?? key, args)); - } - - /// - /// Disconnect from the server and restart the program - /// It will unload and reload all the bots and then reconnect to the server - /// - /// In case of failure, maximum extra attempts before aborting - /// Optional delay, in seconds, before restarting - protected void ReconnectToTheServer(int ExtraAttempts = 3, int delaySeconds = 0, bool keepAccountAndServerSettings = false) - { - if (Config.Logging.DebugMessages) - { - string botName = Translations.ResourceManager.GetString("botname." + GetType().Name) ?? GetType().Name; - ConsoleIO.WriteLogLine(string.Format(Translations.chatbot_reconnect, botName)); - } - McClient.ReconnectionAttemptsLeft = ExtraAttempts; - Program.Restart(delaySeconds, keepAccountAndServerSettings); - } - - /// - /// Disconnect from the server and exit the program - /// - protected void DisconnectAndExit() - { - Program.Exit(); - } - - /// - /// Unload the chatbot, and release associated memory. - /// - protected void UnloadBot() - { - Handler.BotUnLoad(this); - } - - /// - /// Send a private message to a player - /// - /// Player name - /// Message - protected void SendPrivateMessage(string player, string message) - { - SendText(string.Format("/{0} {1} {2}", Config.Main.Advanced.PrivateMsgsCmdName, player, message)); - } - - /// - /// Run a script from a file using a Scripting bot - /// - /// File name - /// Player name to send error messages, if applicable - /// Local variables for use in the Script - protected void RunScript(string filename, string? playername = null, Dictionary? localVars = null) - { - Handler.BotLoad(new ChatBots.Script(filename, playername, localVars)); - } - - /// - /// Load an additional ChatBot - /// - /// ChatBot to load - protected void BotLoad(ChatBot chatBot) - { - Handler.BotLoad(chatBot); - } - - /// - /// Set an App Variable - /// - /// App variable name - /// App variable value - /// void - protected void SetAppVar(string name, object value) - { - Config.AppVar.SetVar(name, value); - } - - /// - /// Get a value from an App Variable - /// - /// App variable name - /// App Variable value - protected object? GetAppVar(string name) - { - return Config.AppVar.GetVar(name); - } - - /// - /// Replaces variables in text with their values from the App Var registry - /// - /// Your text with variables - /// text with variables replaced with their values - protected string ExpandAppVars(string text) - { - return Config.AppVar.ExpandVars(text); - } - - /// - /// Check whether Terrain and Movements is enabled. - /// - /// Enable status. - public bool GetTerrainEnabled() - { - return Handler.GetTerrainEnabled(); - } - - /// - /// Enable or disable Terrain and Movements. - /// Please note that Enabling will be deferred until next relog, respawn or world change. - /// - /// Enabled - /// TRUE if the setting was applied immediately, FALSE if delayed. - public bool SetTerrainEnabled(bool enabled) - { - return Handler.SetTerrainEnabled(enabled); - } - - /// - /// Get entity handling status - /// - /// - /// Entity Handling cannot be enabled in runtime (or after joining server) - public bool GetEntityHandlingEnabled() - { - return Handler.GetEntityHandlingEnabled(); - } - - /// - /// start Sneaking - /// - protected bool Sneak(bool on) - { - return SendEntityAction(on ? Protocol.EntityActionType.StartSneaking : Protocol.EntityActionType.StopSneaking); - } - - /// - /// Send Entity Action - /// - protected bool SendEntityAction(Protocol.EntityActionType entityAction) - { - return Handler.SendEntityAction(entityAction); - } - - /// - /// Attempt to dig a block at the specified location - /// - /// Location of block to dig - /// Example: if your player is under a block that is being destroyed, use Down - /// Also perform the "arm swing" animation - /// Also look at the block before digging - /// Dig duration in seconds. 0 = auto-compute for survival, or instant for creative - protected bool DigBlock(Location location, Direction direction, bool swingArms = true, bool lookAtBlock = true, - double duration = 0, MiningCalculator.MiningOptions? miningOptions = null) - { - return Handler.DigBlock(location, direction, swingArms, lookAtBlock, duration, miningOptions); - } - - /// - /// SetSlot - /// - protected void SetSlot(int slotNum) - { - Handler.ChangeSlot((short)slotNum); - } - - /// - /// Get the current Minecraft World - /// - /// Minecraft world or null if associated setting is disabled - protected World GetWorld() - { - return Handler.GetWorld(); - } - - /// - /// Get all Entities - /// - /// All Entities - protected Dictionary GetEntities() - { - return Handler.GetEntities(); - } - - /// - /// Get all achievements/advancements. - /// - /// Snapshot of all achievements - protected Achievement[] GetAchievements() - { - return Handler.GetAchievements(); - } - - /// - /// Get only completed achievements/advancements. - /// - /// Snapshot of unlocked achievements - protected Achievement[] GetUnlockedAchievements() - { - return Handler.GetUnlockedAchievements(); - } - - /// - /// Get only incomplete achievements/advancements. - /// - /// Snapshot of locked achievements - protected Achievement[] GetLockedAchievements() - { - return Handler.GetLockedAchievements(); - } - - /// - /// Get all players Latency - /// - /// All players latency - protected Dictionary GetPlayersLatency() - { - return Handler.GetPlayersLatency(); - } - - /// - /// Get the current location of the player (Feet location) - /// - /// Minecraft world or null if associated setting is disabled - protected Location GetCurrentLocation() - { - return Handler.GetCurrentLocation(); - } - - /// - /// Move to the specified location - /// - /// Location to reach - /// Allow possible but unsafe locations thay may hurt the player: lava, cactus... - /// Allow non-vanilla direct teleport instead of computing path, but may cause invalid moves and/or trigger anti-cheat plugins - /// If no valid path can be found, also allow locations within specified distance of destination - /// Do not get closer of destination than specified distance - /// How long to wait before stopping computation (default: 5 seconds) - /// When location is unreachable, computation will reach timeout, then optionally fallback to a close location within maxOffset - /// True if a path has been found - protected bool MoveToLocation(Location location, bool allowUnsafe = false, bool allowDirectTeleport = false, int maxOffset = 0, int minOffset = 0, TimeSpan? timeout = null) - { - return Handler.MoveTo(location, allowUnsafe, allowDirectTeleport, maxOffset, minOffset, timeout); - } - - /// - /// Check if the client is currently processing a Movement. - /// - /// true if a movement is currently handled - protected bool ClientIsMoving() - { - return Handler.ClientIsMoving(); - } - - /// - /// Look at the specified location - /// - /// Location to look at - protected void LookAtLocation(Location location) - { - Handler.UpdateLocation(Handler.GetCurrentLocation(), location); - Handler.SendLocationUpdate(); - } - - /// - /// Look at the specified location - /// - /// Yaw to look at - /// Pitch to look at - protected void LookAtLocation(float yaw, float pitch) - { - Handler.UpdateLocation(Handler.GetCurrentLocation(), yaw, pitch); - Handler.SendLocationUpdate(); - } - - /// - /// Find the block on the line of sight. - /// - /// Maximum distance from sight - /// Whether to detect fluid - /// Position of the block - protected Tuple GetLookingBlock(double maxDistance = 4.5, bool includeFluids = false) - { - return RaycastHelper.RaycastBlock(Handler, maxDistance, includeFluids); - } - - /// - /// Get a Y-M-D h:m:s timestamp representing the current system date and time - /// - protected static string GetTimestamp() - { - return DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); - } - - /// - /// Get a h:m:s timestamp representing the current system time - /// - protected static string GetShortTimestamp() - { - return DateTime.Now.ToString("HH:mm:ss"); - } - - /// - /// Load entries from a file as a string array, removing duplicates and empty lines - /// - /// File to load - /// The string array or an empty array if failed to load the file - protected string[] LoadDistinctEntriesFromFile(string file) - { - if (File.Exists(file)) - { - //Read all lines from file, remove lines with no text, convert to lowercase, - //remove duplicate entries, convert to a string array, and return the result. - return File.ReadAllLines(file, Encoding.UTF8) - .Where(line => !string.IsNullOrWhiteSpace(line)) - .Select(line => line.ToLower()) - .Distinct().ToArray(); - } - else - { - LogToConsole("File not found: " + Path.GetFullPath(file)); - return []; - } - } - - /// - /// Return the Server Port where the client is connected to - /// - /// Server Port where the client is connected to - protected int GetServerPort() - { - return Handler.GetServerPort(); - } - - /// - /// Return the Server Host where the client is connected to - /// - /// Server Host where the client is connected to - protected string GetServerHost() - { - return Handler.GetServerHost(); - } - - /// - /// Return the Username of the current account - /// - /// Username of the current account - protected string GetUsername() - { - return Handler.GetUsername(); - } - - /// - /// Return the Gamemode of the current account - /// - /// Username of the current account - protected int GetGamemode() - { - return Handler.GetGamemode(); - } - - /// - /// Return the head yaw of the client player - /// - /// Yaw of the client player - protected float GetYaw() - { - return Handler.GetYaw(); - } - - /// - /// Return the head pitch of the client player - /// - /// Pitch of the client player - protected float GetPitch() - { - return Handler.GetPitch(); - } - - /// - /// Return the UserUUID of the current account - /// - /// UserUUID of the current account - protected string GetUserUUID() - { - return Handler.GetUserUuidStr(); - } - - /// - /// Return the EntityID of the current player - /// - /// EntityID of the current player - protected int GetPlayerEntityID() - { - return Handler.GetPlayerEntityID(); - } - - /// - /// Return the list of currently online players - /// - /// List of online players - protected string[] GetOnlinePlayers() - { - return Handler.GetOnlinePlayers(); - } - - /// - /// Get a dictionary of online player names and their corresponding UUID - /// - /// - /// dictionary of online player whereby - /// UUID represents the key - /// playername represents the value - protected Dictionary GetOnlinePlayersWithUUID() - { - return Handler.GetOnlinePlayersWithUUID(); - } - - /// - /// Registers the given plugin channel for use by this chatbot. - /// - /// The name of the channel to register - protected void RegisterPluginChannel(string channel) - { - registeredPluginChannels.Add(channel); - Handler.RegisterPluginChannel(channel, this); - } - - /// - /// Unregisters the given plugin channel, meaning this chatbot can no longer use it. - /// - /// The name of the channel to unregister - protected void UnregisterPluginChannel(string channel) - { - registeredPluginChannels.RemoveAll(chan => chan == channel); - Handler.UnregisterPluginChannel(channel, this); - } - - /// - /// Sends the given plugin channel message to the server, if the channel has been registered. - /// See http://wiki.vg/Plugin_channel for more information about plugin channels. - /// - /// The channel to send the message on. - /// The data to send. - /// Should the message be sent even if it hasn't been registered by the server or this bot? (Some Minecraft channels aren't registered) - /// Whether the message was successfully sent. False if there was a network error or if the channel wasn't registered. - protected bool SendPluginChannelMessage(string channel, byte[] data, bool sendEvenIfNotRegistered = false) - { - if (!sendEvenIfNotRegistered) - { - if (!registeredPluginChannels.Contains(channel)) - { - return false; - } - } - return Handler.SendPluginChannelMessage(channel, data, sendEvenIfNotRegistered); - } - - /// - /// Get server current TPS (tick per second) - /// - /// tps - protected double GetServerTPS() - { - return Handler.GetServerTPS(); - } - - /// - /// Interact with an entity - /// - /// - /// 0: interact, 1: attack, 2: interact at - /// Hand.MainHand or Hand.OffHand - /// TRUE in case of success - [Obsolete("Prefer using InteractType enum instead of int for interaction type")] - protected bool InteractEntity(int EntityID, int type, Hand hand = Hand.MainHand) - { - return Handler.InteractEntity(EntityID, (InteractType)type, hand); - } - - /// - /// Interact with an entity - /// - /// - /// Interaction type (InteractType.Interact, Attack or AttackAt) - /// Hand.MainHand or Hand.OffHand - /// TRUE in case of success - protected bool InteractEntity(int EntityID, InteractType type, Hand hand = Hand.MainHand) - { - return Handler.InteractEntity(EntityID, type, hand); - } - - /// - /// Give Creative Mode items into regular/survival Player Inventory - /// - /// (obviously) requires to be in creative mode - /// - /// Destination inventory slot - /// Item type - /// Item count - /// TRUE if item given successfully - protected bool CreativeGive(int slot, ItemType itemType, int count, Dictionary? nbt = null) - { - return Handler.DoCreativeGive(slot, itemType, count, nbt); - } - - /// - /// Use Creative Mode to delete items from the regular/survival Player Inventory - /// - /// (obviously) requires to be in creative mode - /// - /// Inventory slot to clear - /// TRUE if item cleared successfully - protected bool CreativeDelete(int slot) - { - return CreativeGive(slot, ItemType.Null, 0, null); - } - - /// - /// Plays animation (Player arm swing) - /// - /// Hand.MainHand or Hand.OffHand - /// TRUE if animation successfully done - public bool SendAnimation(Hand hand = Hand.MainHand) - { - return Handler.DoAnimation((int)hand); - } - - /// - /// Use item currently in the player's hand (active inventory bar slot) - /// - /// TRUE if successful - protected bool UseItemInHand() - { - return Handler.UseItemOnHand(); - } - - /// - /// Use item currently in the player's hand (active inventory bar slot) - /// - /// TRUE if successful - protected bool UseItemInLeftHand() - { - return Handler.UseItemOnLeftHand(); - } - - /// - /// Check inventory handling enable status - /// - /// TRUE if inventory handling is enabled - public bool GetInventoryEnabled() - { - return Handler.GetInventoryEnabled(); - } - - /// - /// Place the block at hand in the Minecraft world - /// - /// Location to place block to - /// Block face (e.g. Direction.Down when clicking on the block below to place this block) - /// Hand.MainHand or Hand.OffHand - /// Also look at the block before interacting - /// TRUE if successfully placed - public bool SendPlaceBlock(Location location, Direction blockFace, Hand hand = Hand.MainHand, bool lookAtBlock = false) - { - return Handler.PlaceBlock(location, blockFace, hand, lookAtBlock); - } - - /// - /// Get the player's inventory. Do not write to it, will not have any effect server-side. - /// - /// Player inventory - protected Container GetPlayerInventory() - { - Container container = Handler.GetPlayerInventory(); - return new Container(container.ID, container.Type, container.Title, container.Items); - } - - /// - /// Get all inventories, player and container(s). Do not write to them. Will not have any effect server-side. - /// - /// All inventories - public Dictionary GetInventories() - { - return Handler.GetInventories(); - } - - /// - /// Perform inventory action - /// - /// Inventory ID - /// Slot ID - /// Action Type - /// TRUE in case of success - protected bool WindowAction(int inventoryId, int slot, WindowActionType actionType) - { - return Handler.DoWindowAction(inventoryId, slot, actionType); - } - - /// - /// Get inventory action helper - /// - /// Inventory Container - /// ItemMovingHelper instance - protected ItemMovingHelper GetItemMovingHelper(Container container) - { - return new ItemMovingHelper(container, Handler); - } - - /// - /// Change player selected hotbar slot - /// - /// 0-8 - /// True if success - protected bool ChangeSlot(short slot) - { - return Handler.ChangeSlot(slot); - } - - /// - /// Get current player selected hotbar slot - /// - /// 0-8 - protected byte GetCurrentSlot() - { - return Handler.GetCurrentSlot(); - } - - /// - /// Clean all inventory - /// - /// TRUE if the uccessfully clear - protected bool ClearInventories() - { - return Handler.ClearInventories(); - } - - /// - /// Update sign text - /// - /// sign location - /// text one - /// text two - /// text three - /// text1 four - protected bool UpdateSign(Location location, string line1, string line2, string line3, string line4) - { - return Handler.UpdateSign(location, line1, line2, line3, line4); - } - - /// - /// Selects villager trade - /// - /// Trade slot to select, starts at 0. - protected bool SelectTrade(int selectedSlot) - { - return Handler.SelectTrade(selectedSlot); - } - - /// - /// Teleport to player in spectator mode - /// - /// player to teleport to - protected bool SpectatorTeleport(Entity entity) - { - return Handler.Spectate(entity); - } - - /// - /// Teleport to player/entity in spectator mode - /// - /// uuid of entity to teleport to - protected bool SpectatorTeleport(Guid UUID) - { - return Handler.SpectateByUUID(UUID); - } - - /// - /// Update command block - /// - /// command block location - /// command - /// command block mode - /// command block flags - protected bool UpdateCommandBlock(Location location, string command, CommandBlockMode mode, CommandBlockFlags flags) - { - return Handler.UpdateCommandBlock(location, command, mode, flags); - } - - /// - /// Close a opened inventory - /// - /// - /// True if success - protected bool CloseInventory(int inventoryID) - { - return Handler.CloseInventory(inventoryID); - } - - /// - /// Get max length for chat messages - /// - /// Max length, in characters - protected int GetMaxChatMessageLength() - { - return Handler.GetMaxChatMessageLength(); - } - - /// - /// Respawn player - /// - protected bool Respawn() - { - if (Handler.GetHealth() <= 0) - return Handler.SendRespawnPacket(); - else return false; - } - - /// - /// Enable or disable network packet event calling. If you want to capture every packet including login phase, please enable this in - /// - /// - /// Enable this may increase memory usage. - /// - /// - protected void SetNetworkPacketEventEnabled(bool enabled) - { - Handler.SetNetworkPacketCaptureEnabled(enabled); - } - - /// - /// Get the minecraft protcol number currently in use - /// - /// Protcol number - protected int GetProtocolVersion() - { - return Handler.GetProtocolVersion(); - } - - /// - /// Gets the horizontal direction of the takeoff. - /// - /// Return direction of view - protected Direction GetHorizontalFacing() - { - return Handler.GetHorizontalFacing(); - } - - /// - /// Invoke a task on the main thread, wait for completion and retrieve return value. - /// - /// Task to run with any type or return value - /// Any result returned from task, result type is inferred from the task - /// bool result = InvokeOnMainThread(methodThatReturnsAbool); - /// bool result = InvokeOnMainThread(() => methodThatReturnsAbool(argument)); - /// int result = InvokeOnMainThread(() => { yourCode(); return 42; }); - /// Type of the return value - protected T InvokeOnMainThread(Func task) - { - return Handler.InvokeOnMainThread(task); - } - - /// - /// Invoke a task on the main thread and wait for completion - /// - /// Task to run without return value - /// InvokeOnMainThread(methodThatReturnsNothing); - /// InvokeOnMainThread(() => methodThatReturnsNothing(argument)); - /// InvokeOnMainThread(() => { yourCode(); }); - protected void InvokeOnMainThread(Action task) - { - Handler.InvokeOnMainThread(task); - } - - /// - /// Schedule a task to run on the main thread, and do not wait for completion - /// - /// Task to run - /// Run the task after X ticks (1 tick delay = ~50ms at 20 TPS). 0 for no delay - /// - /// InvokeOnMainThread(methodThatReturnsNothing, 20); - /// InvokeOnMainThread(() => methodThatReturnsNothing(argument), 20); - /// InvokeOnMainThread(() => { yourCode(); }, 20); - /// - protected void ScheduleOnMainThread(Action task, int delayTicks = 0) - { - lock (delayTasksLock) - { - delayedTasks.Add(new TaskWithDelay(task, delayTicks)); - } - } - - /// - /// Schedule a task to run on the main thread, and do not wait for completion - /// - /// Task to run - /// Run the task after the specified delay - protected void ScheduleOnMainThread(Action task, TimeSpan delay) - { - lock (delayTasksLock) - { - delayedTasks.Add(new TaskWithDelay(task, delay)); - } - } - - /// - /// Command runner definition. - /// Returned string will be the output of the command - /// - /// Full command - /// Arguments in the command - /// Command result to display to the user - public delegate string CommandRunner(string command, string[] args); - - /// - /// Register a simple ChatBot command with the Brigadier dispatcher. - /// The command is automatically unregistered when the bot is unloaded. - /// - /// Name of the command (used as the literal command name) - /// Description of the command - /// Usage string for the command - /// Method to handle the command execution - protected void RegisterChatBotCommand(string cmdName, string cmdDesc, string cmdUsage, CommandRunner callback) - { - var command = new ChatBotCommand(cmdName, cmdDesc, cmdUsage, callback); - command.RegisterCommand(McClient.dispatcher); - registeredChatBotCommands.Add(cmdName); - } - - /// - /// Unregisters all commands that were registered via RegisterChatBotCommand. - /// Called automatically by McClient.BotUnLoad() during bot unload - do not call manually. - /// - internal void UnregisterChatBotCommands() - { - foreach (var cmdName in registeredChatBotCommands) - { - McClient.dispatcher.Unregister(cmdName); - } - registeredChatBotCommands.Clear(); - } - - /// - /// Command class with constructor for creating command for ChatBots. - /// - public class ChatBotCommand : Command - { - public CommandRunner Runner; - - private readonly string _cmdName; - private readonly string _cmdDesc; - private readonly string _cmdUsage; - - public override string CmdName { get { return _cmdName; } } - public override string CmdUsage { get { return _cmdUsage; } } - public override string CmdDesc { get { return _cmdDesc; } } - - public override void RegisterCommand(CommandDispatcher dispatcher) - { - dispatcher.Register(l => l.Literal(_cmdName) - .Then(l => l.Argument("args", Arguments.GreedyString()) - .Executes(r => - { - string fullArgs = Arguments.GetString(r, "args"); - string result = Runner( - $"{_cmdName} {fullArgs}", - fullArgs.Split(' ', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries)); - return r.Source.SetAndReturn(CmdResult.Status.Done, result); - })) - .Executes(r => - { - string result = Runner(_cmdName, Array.Empty()); - return r.Source.SetAndReturn(CmdResult.Status.Done, result); - }) - ); - } - - /// - /// ChatBotCommand Constructor - /// - /// Name of the command - /// Description of the command. Support tranlation. - /// Usage of the command - /// Method for handling the command - public ChatBotCommand(string cmdName, string cmdDesc, string cmdUsage, CommandRunner callback) - { - _cmdName = cmdName; - _cmdDesc = cmdDesc; - _cmdUsage = cmdUsage; - Runner = callback; - } - } - } -} diff --git a/MinecraftClient/Scripting/DataPath.cs b/MinecraftClient/Scripting/DataPath.cs deleted file mode 100644 index fdefae5a5f..0000000000 --- a/MinecraftClient/Scripting/DataPath.cs +++ /dev/null @@ -1,55 +0,0 @@ -using System; -using System.IO; - -namespace MinecraftClient.Scripting -{ - public static class DataPath - { - private static string? relativePath; - private static string? absolutePath; - - public enum PathType - { - Relative, - Absolute - } - - /// - /// 初始化数据目录(修正版) - /// Initialize the data directory (Revised version) - /// 需要手动传入脚本文件名(不含.cs扩展名) - /// Requires manually passing the script file name (without the .cs extension) - /// - /// 脚本文件名(不含扩展名)Script file name (without extension) - public static void Init(string scriptName) - { - if (string.IsNullOrEmpty(scriptName)) - throw new ArgumentNullException(nameof(scriptName), "Script name cannot be null or empty(脚本名称不能为空)"); - - // 计算路径 Calculate the path - relativePath = scriptName; - absolutePath = Path.Combine(AppContext.BaseDirectory, scriptName); - - // 创建目录 Create the directory - if (!Directory.Exists(absolutePath)) - Directory.CreateDirectory(absolutePath); - } - - /// - /// 获取路径 - /// Get the path - /// - public static string Get(PathType pathType = PathType.Relative) - { - if (string.IsNullOrEmpty(relativePath) || string.IsNullOrEmpty(absolutePath)) - throw new InvalidOperationException("Please call DataPath.Init() first to initialize(请先调用DataPath.Init()初始化)"); - - return pathType switch - { - PathType.Relative => relativePath, - PathType.Absolute => absolutePath, - _ => throw new ArgumentOutOfRangeException(nameof(pathType)) - }; - } - } -} diff --git a/MinecraftClient/Scripting/DynamicRun/Builder/CompileRunner.cs b/MinecraftClient/Scripting/DynamicRun/Builder/CompileRunner.cs deleted file mode 100644 index cdd102a1eb..0000000000 --- a/MinecraftClient/Scripting/DynamicRun/Builder/CompileRunner.cs +++ /dev/null @@ -1,45 +0,0 @@ -/* -MIT License -Copyright (c) 2019 Laurent Kempé -https://github.com/laurentkempe/DynamicRun/blob/master/LICENSE -*/ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Runtime.CompilerServices; - -namespace MinecraftClient.Scripting.DynamicRun.Builder -{ - internal class CompileRunner - { - public object? Execute(byte[] compiledAssembly, string[] args, Dictionary? localVars, ChatBot apiHandler, string? scriptOwnerKey = null) - { - var assemblyLoadContextWeakRef = LoadAndExecute(compiledAssembly, args, localVars, apiHandler, scriptOwnerKey); - - for (var i = 0; i < 8 && assemblyLoadContextWeakRef.Item1.IsAlive; i++) - { - GC.Collect(); - GC.WaitForPendingFinalizers(); - } - - ConsoleIO.WriteLogLine(assemblyLoadContextWeakRef.Item1.IsAlive ? "[Script] Script continues to run." : "[Script] Script finished!"); - return assemblyLoadContextWeakRef.Item2; - } - - [MethodImpl(MethodImplOptions.NoInlining)] - private static Tuple LoadAndExecute(byte[] compiledAssembly, string[] args, Dictionary? localVars, ChatBot apiHandler, string? scriptOwnerKey) - { - using var asm = new MemoryStream(compiledAssembly); - var assemblyLoadContext = new SimpleUnloadableAssemblyLoadContext(); - - var assembly = assemblyLoadContext.LoadFromStream(asm); - var compiledScript = assembly.CreateInstance("ScriptLoader.Script")!; - var execResult = compiledScript.GetType().GetMethod("__run")!.Invoke(compiledScript, new object[] { new CSharpAPI(apiHandler, localVars, scriptOwnerKey), args }); - - assemblyLoadContext.Unload(); - - return new(new WeakReference(assemblyLoadContext), execResult); - } - } -} diff --git a/MinecraftClient/Scripting/DynamicRun/Builder/Compiler.cs b/MinecraftClient/Scripting/DynamicRun/Builder/Compiler.cs deleted file mode 100644 index 163f603822..0000000000 --- a/MinecraftClient/Scripting/DynamicRun/Builder/Compiler.cs +++ /dev/null @@ -1,227 +0,0 @@ -/* -MIT License -Copyright (c) 2019 Laurent Kempé -https://github.com/laurentkempe/DynamicRun/blob/master/LICENSE -*/ - -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Runtime.InteropServices; -using Microsoft.CodeAnalysis; -using Microsoft.CodeAnalysis.CSharp; -using Microsoft.CodeAnalysis.Text; -using SingleFileExtractor.Core; - -namespace MinecraftClient.Scripting.DynamicRun.Builder -{ - internal class Compiler - { - public CompileResult Compile(string filepath, string fileName, List additionalAssemblies) - { - using var peStream = new MemoryStream(); - var result = GenerateCode(filepath, fileName, additionalAssemblies).Emit(peStream); - - if (!result.Success) - { - var failures = result.Diagnostics.Where(diagnostic => diagnostic.IsWarningAsError || diagnostic.Severity == DiagnosticSeverity.Error); - - return new CompileResult() - { - Assembly = null, - HasCompiledSucecssfully = false, - Failures = failures.ToList() - }; - } - - peStream.Seek(0, SeekOrigin.Begin); - - return new CompileResult() - { - Assembly = peStream.ToArray(), - HasCompiledSucecssfully = true, - Failures = null - }; - } - - private static CSharpCompilation GenerateCode(string sourceCode, string fileName, List additionalAssemblies) - { - var codeString = SourceText.From(sourceCode); - var options = CSharpParseOptions.Default.WithLanguageVersion(LanguageVersion.Latest); - - var parsedSyntaxTree = SyntaxFactory.ParseSyntaxTree(codeString, options); - - var references = new List(); - - // Find if any additional assembly DLL exists in the base directory where the .exe exists. - foreach (var assembly in additionalAssemblies) - { - var dllPath = Path.Combine(AppContext.BaseDirectory, assembly); - if (File.Exists(dllPath)) - { - references.Add(MetadataReference.CreateFromFile(dllPath)); - // Store the reference in our Assembly Resolver for future reference. - AssemblyResolver.AddAssembly(Assembly.LoadFile(dllPath).FullName!, dllPath); - } - else - { - ConsoleIO.WriteLogLine($"[Script Error] {assembly} is defined in script, but cannot find DLL! Script may not run."); - } - } - -#pragma warning disable IL3000 // We determine if we are in a self-contained binary by checking specifically if the Assembly file path is null. - - var SystemPrivateCoreLib = typeof(object).Assembly.Location; // System.Private.CoreLib - var SystemConsole = typeof(Console).Assembly.Location; // System.Console - var MinecraftClientDll = typeof(Program).Assembly.Location; // The path to MinecraftClient.dll - - // We're on a self-contained binary, so we need to extract the executable to get the assemblies. - if (string.IsNullOrEmpty(MinecraftClientDll)) - { - // Create a temporary file to copy the executable to. - var executablePath = Environment.ProcessPath; - if (executablePath is null) - throw new InvalidOperationException("Cannot determine the process path for self-contained scripting extraction."); - var tempPath = Path.Combine(Path.GetTempPath(), "mcc-scripting"); - Directory.CreateDirectory(tempPath); - - var tempFile = Path.Combine(tempPath, "mcc-executable"); - var useExisting = false; - - // Check if we already have the executable in the temporary path. - foreach (var file in Directory.EnumerateFiles(tempPath)) - { - if (file.EndsWith("mcc-executable")) - { - // Check if the file is the same as the current executable. - if (File.ReadAllBytes(file).SequenceEqual(File.ReadAllBytes(executablePath))) - { - useExisting = true; - break; - } - - // If not, refresh the cache. - File.Delete(file); - break; - } - } - - if (!File.Exists(executablePath)) - { - throw new FileNotFoundException("[Script Error] Could not locate the current folder of MCC for scripting."); - } - - // Copy the executable to a temporary path. - if (!useExisting) - File.Copy(executablePath, tempFile); - - // Access the contents of the executable. - using ExecutableReader executableReader = new(tempFile); - if (!executableReader.IsSingleFile) - throw new InvalidOperationException("[Script Error] The executable is not a single-file bundle."); - - var files = executableReader.Bundle.Files; - - Stream? assemblyStream; - - var assemblyrefs = Assembly.GetEntryAssembly()?.GetReferencedAssemblies().ToList()!; - assemblyrefs.Add(new("MinecraftClient")); - assemblyrefs.Add(new("System.Private.CoreLib")); - // Facade assemblies needed for compiling scripts that reference netstandard libraries (e.g. Brigadier.NET) - assemblyrefs.Add(new("netstandard")); - assemblyrefs.Add(new("System.Runtime")); - assemblyrefs.Add(new("System.Private.Uri")); - assemblyrefs.Add(new("System.Net.Requests")); - assemblyrefs.Add(new("System.Net.WebSockets")); - assemblyrefs.Add(new("System.Net.HttpListener")); - assemblyrefs.Add(new("System.Net.Primitives")); - assemblyrefs.Add(new("System.Net.Sockets")); - assemblyrefs.Add(new("Microsoft.Win32.Primitives")); - assemblyrefs.Add(new("System.Collections.Concurrent")); - - foreach (var refs in assemblyrefs) - { - Assembly? loadedAssembly; - try - { - loadedAssembly = Assembly.Load(refs); - } - catch (FileNotFoundException) - { - // Facade assemblies like netstandard may not be loadable in all environments - continue; - } - - if (string.IsNullOrEmpty(loadedAssembly.Location)) - { - // Check if we can access the file from the executable. - var reference = files.FirstOrDefault(x => - Path.GetFileNameWithoutExtension(x.RelativePath) == refs.Name); - var refCount = files.Count(x => Path.GetFileNameWithoutExtension(x.RelativePath) == refs.Name); - if (refCount > 1) - { - // Safety net for the case where the assembly is referenced multiple times. - // Should not happen normally, but we can make exceptions when it does happen. - throw new InvalidOperationException( - "[Script Error] Too many references to the same assembly. Assembly name: " + refs.Name); - } - - if (reference is null) - { - // Facade assemblies may not be in the bundle - skip them silently - continue; - } - - assemblyStream = reference.AsStream(); - references.Add(MetadataReference.CreateFromStream(assemblyStream!)); - continue; - } - - references.Add(MetadataReference.CreateFromFile(loadedAssembly.Location)); - } - } - else - { - references.Add(MetadataReference.CreateFromFile(SystemPrivateCoreLib)); - references.Add(MetadataReference.CreateFromFile(SystemConsole)); - references.Add(MetadataReference.CreateFromFile(MinecraftClientDll)); - Assembly.GetEntryAssembly()?.GetReferencedAssemblies().ToList().ForEach(a => references.Add(MetadataReference.CreateFromFile(Assembly.Load(a).Location))); - - // Add facade assemblies needed for Roslyn compilation when referencing - // libraries that target netstandard (e.g. Brigadier.NET). - var runtimeDir = Path.GetDirectoryName(SystemPrivateCoreLib)!; - foreach (var facadeName in new[] { "netstandard.dll", "System.Runtime.dll", "System.Private.Uri.dll", "System.Net.Requests.dll", - "System.Net.WebSockets.dll", "System.Net.HttpListener.dll", "System.Net.Primitives.dll", "System.Net.Sockets.dll", - "Microsoft.Win32.Primitives.dll", "System.Collections.Concurrent.dll" }) - { - var facadePath = Path.Combine(runtimeDir, facadeName); - if (File.Exists(facadePath)) - references.Add(MetadataReference.CreateFromFile(facadePath)); - } - } -#pragma warning restore IL3000 - - return CSharpCompilation.Create($"{fileName}.dll", - new[] { parsedSyntaxTree }, - references: references, - options: new CSharpCompilationOptions(OutputKind.DynamicallyLinkedLibrary, - optimizationLevel: OptimizationLevel.Release, - assemblyIdentityComparer: DesktopAssemblyIdentityComparer.Default)); - } - - internal struct CompileResult - { - internal byte[]? Assembly; - internal bool HasCompiledSucecssfully; - internal List? Failures; - public CompileResult(bool hasCompiledSucecssfully, List? failures, byte[]? assembly) - { - HasCompiledSucecssfully = hasCompiledSucecssfully; - Failures = failures; - Assembly = assembly; - } - } - } -} diff --git a/MinecraftClient/Scripting/DynamicRun/Builder/SimpleUnloadableAssemblyLoadContext.cs b/MinecraftClient/Scripting/DynamicRun/Builder/SimpleUnloadableAssemblyLoadContext.cs deleted file mode 100644 index e210bcacd6..0000000000 --- a/MinecraftClient/Scripting/DynamicRun/Builder/SimpleUnloadableAssemblyLoadContext.cs +++ /dev/null @@ -1,24 +0,0 @@ -/* -MIT License -Copyright (c) 2019 Laurent Kempé -https://github.com/laurentkempe/DynamicRun/blob/master/LICENSE -*/ - -using System.Reflection; -using System.Runtime.Loader; - -namespace MinecraftClient.Scripting.DynamicRun.Builder -{ - internal class SimpleUnloadableAssemblyLoadContext : AssemblyLoadContext - { - public SimpleUnloadableAssemblyLoadContext() - : base(true) - { - } - - protected override Assembly? Load(AssemblyName assemblyName) - { - return null; - } - } -} \ No newline at end of file diff --git a/MinecraftClient/Scripting/MccGameApi.cs b/MinecraftClient/Scripting/MccGameApi.cs deleted file mode 100644 index 9588691bf1..0000000000 --- a/MinecraftClient/Scripting/MccGameApi.cs +++ /dev/null @@ -1,1333 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using MinecraftClient.Inventory; -using MinecraftClient.Mapping; -using MinecraftClient.Protocol; - -namespace MinecraftClient.Scripting; - -/// -/// Transport-neutral shared gameplay and observed-state API used by MCP and bots/scripts. -/// -public sealed class MccGameApi -{ - private static readonly StringComparer NameComparer = StringComparer.OrdinalIgnoreCase; - - private const double SelfEntityDistanceThreshold = 0.2; - private const int MaxPathPreviewWaypoints = 1000; - private const int DefaultPathQueryTimeoutMs = 5000; - private const int MinPathQueryTimeoutMs = 250; - private const int MaxPathQueryTimeoutMs = 15000; - private const int DefaultArrivalWaitMs = 3500; - private const int MinArrivalWaitMs = 250; - private const int MaxArrivalWaitMs = 15000; - private const double DefaultArrivalTolerance = 1.5; - private const int ArrivalPollIntervalMs = 125; - - private readonly Func clientProvider; - - private sealed class NearbyPlayerSnapshot - { - public required int EntityId { get; init; } - public required Guid Uuid { get; init; } - public string? Name { get; set; } - public string? CustomName { get; init; } - public required double X { get; init; } - public required double Y { get; init; } - public required double Z { get; init; } - public required double Distance { get; init; } - public required int Latency { get; init; } - } - - private sealed class NearbyItemSnapshot - { - public required int EntityId { get; init; } - public required ItemType ItemType { get; init; } - public required string TypeLabel { get; init; } - public required int Count { get; init; } - public required double X { get; init; } - public required double Y { get; init; } - public required double Z { get; init; } - public required double Distance { get; init; } - } - - public MccGameApi(Func clientProvider) - { - ArgumentNullException.ThrowIfNull(clientProvider); - this.clientProvider = clientProvider; - } - - /// - /// Get the latest shared world time and weather snapshot. - /// - public MccRuntimeStateSnapshot GetRuntimeState() - { - return MccObservedStateStore.GetRuntimeStateSnapshot(); - } - - /// - /// Get recent high-signal runtime events recorded by MCC. - /// - public MccRecentEventsResult GetRecentEvents(long afterId = 0, int maxCount = 50, string? typeFilter = null) - { - MccRecentEventEntry[] events = MccObservedStateStore.GetRecentEventsAfter(afterId, maxCount, typeFilter); - return new MccRecentEventsResult - { - AfterId = afterId, - LatestId = MccObservedStateStore.GetLatestRecentEventId(), - Count = events.Length, - Events = events - }; - } - - /// - /// Get recent chat and system lines observed by MCC. - /// - public MccChatHistoryResult GetChatHistory(int maxCount = 50, bool includeJson = false) - { - MccChatHistoryEntry[] entries = MccObservedStateStore.GetLatestChatHistory(maxCount); - if (!includeJson) - { - entries = entries - .Select(entry => new MccChatHistoryEntry - { - TimestampUtc = entry.TimestampUtc, - Kind = entry.Kind, - Text = entry.Text, - Sender = entry.Sender, - Message = entry.Message - }) - .ToArray(); - } - - return new MccChatHistoryResult - { - Count = entries.Length, - Entries = entries - }; - } - - /// - /// Compute a path preview to a location without moving there. - /// - public MccGameResult PreviewPath(double x, double y, double z, bool allowUnsafe = false, int maxOffset = 0, int minOffset = 0, int timeoutMs = 0, int maxWaypoints = 128) - { - if (!AreValidPathOffsets(maxOffset, minOffset) || timeoutMs < 0 || maxWaypoints <= 0) - { - return MccGameResult.Fail("invalid_args"); - } - - McClient? client = clientProvider(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled()) - return MccGameResult.Fail("feature_disabled"); - - Location goal = new(x, y, z); - Location startLocation = client.InvokeOnMainThread(client.GetCurrentLocation); - World world = client.InvokeOnMainThread(client.GetWorld); - int effectiveTimeoutMs = GetPathQueryTimeoutMs(timeoutMs); - int waypointLimit = Math.Clamp(maxWaypoints, 1, MaxPathPreviewWaypoints); - Queue? path = Movement.CalculatePath( - world, - startLocation, - goal, - allowUnsafe, - maxOffset, - minOffset, - TimeSpan.FromMilliseconds(effectiveTimeoutMs)); - Location[] waypoints = path?.Take(waypointLimit).ToArray() ?? []; - Location? finalWaypoint = path is not null && path.Count > 0 ? path.Last() : null; - - return MccGameResult.Ok(new MccPathPreviewResult - { - PathFound = path is not null, - ExactReachable = finalWaypoint is Location location && location.ToFloor() == goal.ToFloor(), - Target = MccGameCommon.ToCoordinate(goal), - StartLocation = MccGameCommon.ToCoordinate(startLocation), - FinalWaypoint = finalWaypoint is Location waypoint ? MccGameCommon.ToCoordinate(waypoint) : null, - FinalDistance = finalWaypoint is Location endWaypoint ? MccGameCommon.GetDistance(endWaypoint, goal) : null, - WaypointCount = path?.Count ?? 0, - Truncated = path is not null && path.Count > waypointLimit, - Waypoints = waypoints.Select(MccGameCommon.ToCoordinate).ToArray(), - AllowUnsafe = allowUnsafe, - MaxOffset = maxOffset, - MinOffset = minOffset, - TimeoutMs = effectiveTimeoutMs - }); - } - - /// - /// Check whether MCC can currently path to a location without moving there. - /// - public MccGameResult CanReachPosition(double x, double y, double z, bool allowUnsafe = false, int maxOffset = 0, int minOffset = 0, int timeoutMs = 0) - { - if (!AreValidPathOffsets(maxOffset, minOffset) || timeoutMs < 0) - return MccGameResult.Fail("invalid_args"); - - McClient? client = clientProvider(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled()) - return MccGameResult.Fail("feature_disabled"); - - Location goal = new(x, y, z); - Location startLocation = client.InvokeOnMainThread(client.GetCurrentLocation); - World world = client.InvokeOnMainThread(client.GetWorld); - int effectiveTimeoutMs = GetPathQueryTimeoutMs(timeoutMs); - Queue? path = Movement.CalculatePath( - world, - startLocation, - goal, - allowUnsafe, - maxOffset, - minOffset, - TimeSpan.FromMilliseconds(effectiveTimeoutMs)); - Location? finalWaypoint = path?.LastOrDefault(); - double? finalDistance = finalWaypoint is Location waypoint - ? MccGameCommon.GetDistance(waypoint, goal) - : null; - - return MccGameResult.Ok(new MccReachabilityResult - { - Reachable = path is not null, - ExactReachable = finalWaypoint is Location location && location.ToFloor() == goal.ToFloor(), - Target = MccGameCommon.ToCoordinate(goal), - StartLocation = MccGameCommon.ToCoordinate(startLocation), - FinalWaypoint = finalWaypoint is Location finalLocation ? MccGameCommon.ToCoordinate(finalLocation) : null, - FinalDistance = finalDistance, - WaypointCount = path?.Count ?? 0, - AllowUnsafe = allowUnsafe, - MaxOffset = maxOffset, - MinOffset = minOffset, - TimeoutMs = effectiveTimeoutMs - }); - } - - /// - /// Get online players with tracked coordinates and latency when available. - /// - public MccGameResult GetPlayersDetailed(bool includeSelf = false, bool includeCoordinates = true) - { - McClient? client = clientProvider(); - if (client is null) - return NotConnected(); - - return client.InvokeOnMainThread(() => - { - Dictionary onlinePlayers = client.GetOnlinePlayersWithUUID(); - Dictionary? trackedPlayers = client.GetEntityHandlingEnabled() - ? BuildTrackedPlayerSnapshots(client, includeSelf: true).ToDictionary(player => player.Uuid) - : null; - Guid selfUuid = client.GetUserUuid(); - string selfName = client.GetUsername(); - - MccPlayersDetailedEntry[] players = onlinePlayers - .Select(pair => - { - if (!Guid.TryParse(pair.Key, out Guid uuid)) - return null; - - bool isSelf = uuid == selfUuid || NameComparer.Equals(pair.Value, selfName); - if (!includeSelf && isSelf) - return null; - - PlayerInfo? playerInfo = client.GetPlayerInfo(uuid); - NearbyPlayerSnapshot? trackedPlayer = trackedPlayers is not null - && trackedPlayers.TryGetValue(uuid, out NearbyPlayerSnapshot? resolvedTrackedPlayer) - ? resolvedTrackedPlayer - : null; - Location? selfLocation = isSelf ? client.GetCurrentLocation() : null; - int? entityId = trackedPlayer?.EntityId ?? (isSelf ? client.GetPlayerEntityID() : null); - double? x = includeCoordinates - ? trackedPlayer?.X is double trackedX ? MccGameCommon.RoundCoordinate(trackedX) - : selfLocation.HasValue ? MccGameCommon.RoundCoordinate(selfLocation.Value.X) - : null - : null; - double? y = includeCoordinates - ? trackedPlayer?.Y is double trackedY ? MccGameCommon.RoundCoordinate(trackedY) - : selfLocation.HasValue ? MccGameCommon.RoundCoordinate(selfLocation.Value.Y) - : null - : null; - double? z = includeCoordinates - ? trackedPlayer?.Z is double trackedZ ? MccGameCommon.RoundCoordinate(trackedZ) - : selfLocation.HasValue ? MccGameCommon.RoundCoordinate(selfLocation.Value.Z) - : null - : null; - - return new MccPlayersDetailedEntry - { - Name = playerInfo?.Name ?? pair.Value, - Uuid = uuid, - Ping = playerInfo?.Ping ?? trackedPlayer?.Latency ?? 0, - Gamemode = playerInfo?.Gamemode ?? -1, - Listed = playerInfo?.Listed ?? true, - DisplayName = playerInfo?.DisplayName, - EntityId = entityId, - X = x, - Y = y, - Z = z - }; - }) - .Where(player => player is not null) - .Select(player => player!) - .OrderBy(player => player.Name, NameComparer) - .ToArray(); - - return MccGameResult.Ok(new MccPlayersDetailedResult - { - IncludeSelf = includeSelf, - IncludeCoordinates = includeCoordinates, - Count = players.Length, - Players = players - }); - }); - } - - /// - /// Check whether any player, or a specific player, is nearby. - /// - public MccGameResult IsPlayerNearby(string? playerName = null, double radius = 32, bool includeSelf = false) - { - if (radius <= 0 || radius > 1024) - return MccGameResult.Fail("invalid_args"); - - McClient? client = clientProvider(); - if (client is null) - return NotConnected(); - - if (!client.GetEntityHandlingEnabled()) - return MccGameResult.Fail("feature_disabled"); - - string? nameFilter = string.IsNullOrWhiteSpace(playerName) ? null : playerName.Trim(); - return client.InvokeOnMainThread(() => - { - double radiusValue = radius; - MccNearbyPlayerEntry[] players = BuildTrackedPlayerSnapshots(client, includeSelf) - .Where(player => player.Distance <= radiusValue) - .Where(player => nameFilter is null || PlayerNameMatches(player, nameFilter)) - .OrderBy(player => player.Distance) - .Select(player => new MccNearbyPlayerEntry - { - EntityId = player.EntityId, - Uuid = player.Uuid, - Name = player.Name, - CustomName = player.CustomName, - X = MccGameCommon.RoundCoordinate(player.X), - Y = MccGameCommon.RoundCoordinate(player.Y), - Z = MccGameCommon.RoundCoordinate(player.Z), - Distance = player.Distance, - Latency = player.Latency - }) - .ToArray(); - - return MccGameResult.Ok(new MccPlayerNearbyResult - { - Radius = radiusValue, - PlayerName = nameFilter, - IncludeSelf = includeSelf, - AnyNearby = players.Length > 0, - Count = players.Length, - Players = players - }); - }); - } - - /// - /// Locate a tracked player by name. - /// - public MccGameResult LocatePlayer(string playerName, bool includeSelf = false) - { - if (string.IsNullOrWhiteSpace(playerName)) - return MccGameResult.Fail("invalid_args"); - - McClient? client = clientProvider(); - if (client is null) - return NotConnected(); - - if (!client.GetEntityHandlingEnabled()) - return MccGameResult.Fail("feature_disabled"); - - string nameFilter = playerName.Trim(); - return client.InvokeOnMainThread(() => - { - NearbyPlayerSnapshot[] matches = BuildTrackedPlayerSnapshots(client, includeSelf) - .Where(player => PlayerNameMatches(player, nameFilter)) - .OrderBy(player => player.Distance) - .ToArray(); - - if (matches.Length == 0) - { - string[] trackedPlayers = BuildTrackedPlayerSnapshots(client, includeSelf) - .Select(player => player.Name) - .OfType() - .Distinct(NameComparer) - .ToArray(); - return MccGameResult.Fail("invalid_state", data: new MccLocatedPlayerResult - { - PlayerName = nameFilter, - MatchedName = trackedPlayers.Length > 0 ? string.Join(", ", trackedPlayers) : null, - EntityId = 0, - Uuid = Guid.Empty, - X = 0, - Y = 0, - Z = 0, - Distance = 0 - }); - } - - NearbyPlayerSnapshot selected = matches[0]; - return MccGameResult.Ok(new MccLocatedPlayerResult - { - PlayerName = nameFilter, - MatchedName = selected.Name, - EntityId = selected.EntityId, - Uuid = selected.Uuid, - X = MccGameCommon.RoundCoordinate(selected.X), - Y = MccGameCommon.RoundCoordinate(selected.Y), - Z = MccGameCommon.RoundCoordinate(selected.Z), - Distance = selected.Distance - }); - }); - } - - /// - /// Return tracked entities without distance filtering. - /// - public MccGameResult QueryEntities(int maxCount = 200) - { - McClient? client = clientProvider(); - if (client is null) - return NotConnected(); - - if (!client.GetEntityHandlingEnabled()) - return MccGameResult.Fail("feature_disabled"); - - int count = Math.Clamp(maxCount, 1, 1000); - return client.InvokeOnMainThread(() => - { - Dictionary playerNamesByEntityId = BuildTrackedPlayerSnapshots(client, includeSelf: true) - .ToDictionary(player => player.EntityId, player => player.Name); - MccEntitySummary[] data = client.GetEntities() - .Take(count) - .Select(pair => - { - string? resolvedName = pair.Value.Type == EntityType.Player - && playerNamesByEntityId.TryGetValue(pair.Key, out string? mappedName) - ? mappedName - : pair.Value.Name; - return BuildEntitySummary(pair.Value, resolvedName); - }) - .ToArray(); - - return MccGameResult.Ok(new MccQueryEntitiesResult - { - Count = client.GetEntities().Count, - Entities = data - }); - }); - } - - /// - /// List tracked entities with optional filtering. - /// - public MccGameResult ListEntities(int maxCount = 200, string? typeFilter = null, double radius = 0) - { - McClient? client = clientProvider(); - if (client is null) - return NotConnected(); - - if (!client.GetEntityHandlingEnabled()) - return MccGameResult.Fail("feature_disabled"); - - int count = Math.Clamp(maxCount, 1, 1000); - string? filter = string.IsNullOrWhiteSpace(typeFilter) ? null : typeFilter.Trim(); - double radiusValue = Math.Max(radius, 0); - - return client.InvokeOnMainThread(() => - { - Dictionary entities = client.GetEntities(); - Location playerLocation = client.GetCurrentLocation(); - Dictionary playerNamesByEntityId = BuildTrackedPlayerSnapshots(client, includeSelf: true) - .ToDictionary(player => player.EntityId, player => player.Name); - - MccEntitySummary[] data = entities.Values - .Select(entity => - { - double dx = entity.Location.X - playerLocation.X; - double dy = entity.Location.Y - playerLocation.Y; - double dz = entity.Location.Z - playerLocation.Z; - string? resolvedName = entity.Type == EntityType.Player - && playerNamesByEntityId.TryGetValue(entity.ID, out string? mappedName) - ? mappedName - : entity.Name; - return new - { - entity, - resolvedName, - distance = Math.Sqrt(dx * dx + dy * dy + dz * dz) - }; - }) - .Where(item => radiusValue <= 0 || item.distance <= radiusValue) - .Where(item => filter is null - || item.entity.Type.ToString().Contains(filter, StringComparison.OrdinalIgnoreCase) - || item.entity.GetTypeString().Contains(filter, StringComparison.OrdinalIgnoreCase)) - .OrderBy(item => item.distance) - .Take(count) - .Select(item => BuildEntitySummary(item.entity, item.resolvedName, item.distance)) - .ToArray(); - - return MccGameResult.Ok(new MccListEntitiesResult - { - TotalTracked = entities.Count, - Count = data.Length, - Entities = data - }); - }); - } - - /// - /// Get detailed information for a tracked entity. - /// - public MccGameResult GetEntityInfo(int entityId, bool includeMetadata = false, bool includeEquipment = false, bool includeEffects = false) - { - McClient? client = clientProvider(); - if (client is null) - return NotConnected(); - - if (!client.GetEntityHandlingEnabled()) - return MccGameResult.Fail("feature_disabled"); - - return client.InvokeOnMainThread(() => - { - Dictionary entities = client.GetEntities(); - if (!entities.TryGetValue(entityId, out Entity? entity)) - return MccGameResult.Fail("invalid_state"); - - string? resolvedName = entity.Name; - if (entity.Type == EntityType.Player) - { - Dictionary playerNamesByEntityId = BuildTrackedPlayerSnapshots(client, includeSelf: true) - .ToDictionary(player => player.EntityId, player => player.Name); - if (playerNamesByEntityId.TryGetValue(entityId, out string? mappedName)) - resolvedName = mappedName; - } - - Dictionary? metadata = includeMetadata - ? entity.Metadata?.ToDictionary( - pair => pair.Key.ToString(), - pair => MccGameCommon.DescribeMetadataValue(pair.Value)) - : null; - MccEntityEquipmentEntry[]? equipment = includeEquipment - ? entity.Equipment - .Select(pair => new MccEntityEquipmentEntry - { - Slot = pair.Key, - Type = pair.Value.Type.ToString(), - Count = pair.Value.Count - }) - .ToArray() - : null; - MccEffectSnapshot[]? activeEffects = includeEffects - ? entity.ActiveEffects.Values - .Select(effect => new MccEffectSnapshot - { - Id = effect.Effect.ToString(), - Amplifier = effect.Amplifier, - RemainingSeconds = effect.RemainingSeconds, - IsInfinite = effect.IsInfinite - }) - .ToArray() - : null; - - return MccGameResult.Ok(new MccEntityInfoResult - { - Id = entity.ID, - Type = entity.Type.ToString(), - TypeLabel = entity.GetTypeString(), - Uuid = entity.UUID, - Name = resolvedName, - CustomName = entity.CustomName, - CustomNameVisible = entity.IsCustomNameVisible, - X = MccGameCommon.RoundCoordinate(entity.Location.X), - Y = MccGameCommon.RoundCoordinate(entity.Location.Y), - Z = MccGameCommon.RoundCoordinate(entity.Location.Z), - Yaw = entity.Yaw, - Pitch = entity.Pitch, - Health = entity.Health, - Pose = entity.Pose.ToString(), - Latency = entity.Latency, - ObjectData = entity.ObjectData, - Metadata = metadata, - Equipment = equipment, - ActiveEffects = activeEffects - }); - }); - } - - /// - /// Return the nearest tracked entity matching the requested filters. - /// - public MccGameResult FindNearestEntity(string? typeFilter = null, string? nameFilter = null, double radius = 64.0, bool includePlayers = true) - { - if (radius <= 0 || radius > 1024) - return MccGameResult.Fail("invalid_args"); - - McClient? client = clientProvider(); - if (client is null) - return NotConnected(); - - if (!client.GetEntityHandlingEnabled()) - return MccGameResult.Fail("feature_disabled"); - - string? normalizedTypeFilter = string.IsNullOrWhiteSpace(typeFilter) ? null : typeFilter.Trim(); - string? normalizedNameFilter = string.IsNullOrWhiteSpace(nameFilter) ? null : nameFilter.Trim(); - - return client.InvokeOnMainThread(() => - { - Location playerLocation = client.GetCurrentLocation(); - Dictionary playerNamesByEntityId = BuildTrackedPlayerSnapshots(client, includeSelf: true) - .ToDictionary(player => player.EntityId, player => player.Name); - - var nearest = client.GetEntities().Values - .Where(entity => includePlayers || entity.Type != EntityType.Player) - .Select(entity => - { - double dx = entity.Location.X - playerLocation.X; - double dy = entity.Location.Y - playerLocation.Y; - double dz = entity.Location.Z - playerLocation.Z; - string? resolvedName = entity.Type == EntityType.Player - && playerNamesByEntityId.TryGetValue(entity.ID, out string? mappedName) - ? mappedName - : entity.Name; - return new - { - entity, - resolvedName, - distance = Math.Sqrt(dx * dx + dy * dy + dz * dz) - }; - }) - .Where(item => item.distance <= radius) - .Where(item => normalizedTypeFilter is null - || MccGameCommon.TextMatchesFilter(item.entity.Type.ToString(), normalizedTypeFilter) - || MccGameCommon.TextMatchesFilter(item.entity.GetTypeString(), normalizedTypeFilter)) - .Where(item => normalizedNameFilter is null - || EntityNameMatches(item.resolvedName, item.entity.CustomName, normalizedNameFilter)) - .OrderBy(item => item.distance) - .FirstOrDefault(); - - if (nearest is null) - return MccGameResult.Fail("invalid_state"); - - return MccGameResult.Ok(BuildEntitySummary(nearest.entity, nearest.resolvedName, nearest.distance)); - }); - } - - /// - /// Move to a tracked player by name and verify arrival. - /// Callers running on ChatBot update callbacks should prefer - /// so the main MCC updater thread is not blocked while pathfinding completes. - /// - public MccGameResult MoveToPlayer(string playerName, bool allowUnsafe = false, bool allowDirectTeleport = false, int maxOffset = 0, int minOffset = 0, int timeoutMs = 0) - { - if (string.IsNullOrWhiteSpace(playerName)) - return MccGameResult.Fail("invalid_args"); - - if (!AreValidPathOffsets(maxOffset, minOffset) || timeoutMs < 0) - return MccGameResult.Fail("invalid_args"); - - McClient? client = clientProvider(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled() || !client.GetEntityHandlingEnabled()) - return MccGameResult.Fail("feature_disabled"); - - string nameFilter = playerName.Trim(); - NearbyPlayerSnapshot? target = client.InvokeOnMainThread(() => - { - return BuildTrackedPlayerSnapshots(client, includeSelf: false) - .Where(player => PlayerNameMatches(player, nameFilter)) - .OrderBy(player => player.Distance) - .FirstOrDefault(); - }); - - if (target is null) - return MccGameResult.Fail("invalid_state"); - - Location goal = new(target.X, target.Y, target.Z); - Location startLocation = client.InvokeOnMainThread(client.GetCurrentLocation); - TimeSpan? timeout = timeoutMs > 0 ? TimeSpan.FromMilliseconds(timeoutMs) : null; - bool pathFound = client.InvokeOnMainThread(() => client.MoveTo(goal, allowUnsafe, allowDirectTeleport, maxOffset, minOffset, timeout)); - - int verifyWaitMs = GetArrivalWaitMs(timeoutMs); - double tolerance = GetArrivalTolerance(maxOffset, minOffset); - Location? finalLocation = null; - bool arrived = pathFound && WaitForArrival(client, goal, verifyWaitMs, tolerance, out finalLocation); - finalLocation ??= client.InvokeOnMainThread(client.GetCurrentLocation); - - MccMoveToPlayerResult resultData = new() - { - PathFound = pathFound, - Arrived = arrived, - Tolerance = tolerance, - VerifyWaitMs = verifyWaitMs, - Target = new MccMoveToPlayerTarget - { - PlayerName = target.Name, - EntityId = target.EntityId, - X = MccGameCommon.RoundCoordinate(target.X), - Y = MccGameCommon.RoundCoordinate(target.Y), - Z = MccGameCommon.RoundCoordinate(target.Z) - }, - StartLocation = MccGameCommon.ToCoordinate(startLocation), - FinalLocation = MccGameCommon.ToCoordinate(finalLocation.Value), - FinalDistance = MccGameCommon.GetDistance(finalLocation.Value, goal), - DistanceMoved = MccGameCommon.GetDistance(startLocation, finalLocation.Value), - AllowUnsafe = allowUnsafe, - AllowDirectTeleport = allowDirectTeleport, - MaxOffset = maxOffset, - MinOffset = minOffset, - TimeoutMs = timeoutMs - }; - - return pathFound && arrived - ? MccGameResult.Ok(resultData) - : MccGameResult.Fail("action_incomplete", data: resultData); - } - - /// - /// Run on a worker thread so ChatBot callbacks can poll the result without blocking MCC updates. - /// - public Task> MoveToPlayerAsync(string playerName, bool allowUnsafe = false, bool allowDirectTeleport = false, int maxOffset = 0, int minOffset = 0, int timeoutMs = 0) - { - return Task.Run(() => MoveToPlayer(playerName, allowUnsafe, allowDirectTeleport, maxOffset, minOffset, timeoutMs)); - } - - /// - /// Select a hotbar item by item type without moving items around. - /// - public MccGameResult SelectHotbarItem(string itemType, bool preferLowestSlot = true) - { - if (string.IsNullOrWhiteSpace(itemType)) - return MccGameResult.Fail("invalid_args"); - - McClient? client = clientProvider(); - if (client is null) - return NotConnected(); - - if (!client.GetInventoryEnabled()) - return MccGameResult.Fail("feature_disabled"); - - if (!MccGameCommon.TryParseItemType(itemType, out ItemType parsedItemType)) - return MccGameResult.Fail("invalid_args"); - - return client.InvokeOnMainThread(() => - { - Container? inventory = client.GetInventory(0); - if (inventory is null) - return MccGameResult.Fail("invalid_state"); - - var matches = inventory.Items - .Where(pair => pair.Value.Type == parsedItemType && pair.Value.Count > 0) - .Select(pair => - { - bool isHotbar = inventory.IsHotbar(pair.Key, out int hotbar); - return new - { - InventorySlot = pair.Key, - Hotbar = hotbar, - IsHotbar = isHotbar, - Count = pair.Value.Count - }; - }) - .Where(match => match.IsHotbar) - .OrderBy(match => preferLowestSlot ? match.Hotbar : -match.Hotbar) - .ToArray(); - - if (matches.Length == 0) - return MccGameResult.Fail("invalid_state"); - - var selected = matches[0]; - bool ok = client.ChangeSlot((short)selected.Hotbar); - MccHotbarSelectionResult resultData = new() - { - Success = ok, - ItemType = parsedItemType.ToString(), - InventorySlot = selected.InventorySlot, - SelectedSlot = selected.Hotbar + 1, - Count = selected.Count - }; - - return ok - ? MccGameResult.Ok(resultData) - : MccGameResult.Fail("action_failed", data: resultData); - }); - } - - /// - /// Get a snapshot of an inventory. - /// - public MccGameResult GetInventorySnapshot(int inventoryId) - { - McClient? client = clientProvider(); - if (client is null) - return NotConnected(); - - if (!client.GetInventoryEnabled()) - return MccGameResult.Fail("feature_disabled"); - - return client.InvokeOnMainThread(() => - { - Dictionary inventories = client.GetInventories(); - if (!inventories.TryGetValue(inventoryId, out Container? inventory)) - return MccGameResult.Fail("invalid_state"); - - MccInventorySnapshotSlot[] slots = inventory.Items - .Where(item => IsSnapshotInventorySlot(inventory, item.Key)) - .OrderBy(item => item.Key) - .Select(item => new MccInventorySnapshotSlot - { - Slot = item.Key, - Type = item.Value.Type.ToString(), - Count = item.Value.Count, - Nbt = MccGameCommon.BuildNbt(item.Value) - }) - .ToArray(); - - return MccGameResult.Ok(new MccInventorySnapshotResult - { - Id = inventory.ID, - Type = inventory.Type.ToString(), - Title = inventory.Title ?? string.Empty, - SlotCount = inventory.Type.SlotCount(), - Slots = slots, - Cursor = TryBuildCursorSnapshot(inventory) - }); - }); - } - - /// - /// Search player and container inventories for matching items. - /// - public MccGameResult SearchInventories(string query, int maxCount = 100, bool exactMatch = false, bool includeContainers = false) - { - if (string.IsNullOrWhiteSpace(query)) - return MccGameResult.Fail("invalid_args"); - - McClient? client = clientProvider(); - if (client is null) - return NotConnected(); - - if (!client.GetInventoryEnabled()) - return MccGameResult.Fail("feature_disabled"); - - string normalizedQuery = query.Trim(); - ItemType? parsedItemType = exactMatch && MccGameCommon.TryParseItemType(normalizedQuery, out ItemType exactItemType) - ? exactItemType - : null; - int limit = Math.Clamp(maxCount, 1, 1000); - - return client.InvokeOnMainThread(() => - { - MccInventorySearchMatch[] matches = client.GetInventories() - .Where(entry => includeContainers || entry.Key == 0) - .OrderBy(entry => entry.Key) - .SelectMany(entry => - { - Container inventory = entry.Value; - return inventory.Items - .Where(pair => pair.Key >= 0 && pair.Value.Count > 0) - .Where(pair => ItemMatches(pair.Value, normalizedQuery, exactMatch, parsedItemType)) - .Select(pair => - { - bool isHotbar = inventory.IsHotbar(pair.Key, out int hotbar); - return new MccInventorySearchMatch - { - InventoryId = entry.Key, - InventoryType = inventory.Type.ToString(), - InventoryTitle = inventory.Title ?? string.Empty, - Slot = pair.Key, - ItemType = pair.Value.Type.ToString(), - TypeLabel = pair.Value.GetTypeString(), - Count = pair.Value.Count, - IsPlayerInventory = entry.Key == 0, - HotbarSlot = isHotbar ? hotbar + 1 : null, - Nbt = MccGameCommon.BuildNbt(pair.Value) - }; - }); - }) - .Take(limit) - .ToArray(); - - return MccGameResult.Ok(new MccInventorySearchResult - { - Query = normalizedQuery, - ExactMatch = exactMatch, - IncludeContainers = includeContainers, - Count = matches.Length, - Matches = matches - }); - }); - } - - /// - /// List active inventories. - /// - public MccGameResult ListInventories() - { - McClient? client = clientProvider(); - if (client is null) - return NotConnected(); - - if (!client.GetInventoryEnabled()) - return MccGameResult.Fail("feature_disabled"); - - return client.InvokeOnMainThread(() => - { - MccInventoryListEntry[] inventories = client.GetInventories() - .OrderBy(entry => entry.Key) - .Select(entry => new MccInventoryListEntry - { - Id = entry.Key, - Type = entry.Value.Type.ToString(), - Title = entry.Value.Title ?? string.Empty, - SlotCount = entry.Value.Type.SlotCount(), - NonEmptySlots = entry.Value.Items.Count(item => IsSnapshotInventorySlot(entry.Value, item.Key)), - Active = entry.Key > 0 && entry.Key == GetActiveContainerId(client) - }) - .ToArray(); - - return MccGameResult.Ok(new MccInventoryListResult - { - Count = inventories.Length, - Inventories = inventories - }); - }); - } - - /// - /// List nearby item entities. - /// - public MccGameResult ListItemEntities(string? itemType = null, double radius = 32, int maxCount = 50) - { - if (radius <= 0 || radius > 1024) - return MccGameResult.Fail("invalid_args"); - - McClient? client = clientProvider(); - if (client is null) - return NotConnected(); - - if (!client.GetEntityHandlingEnabled()) - return MccGameResult.Fail("feature_disabled"); - - ItemType? parsedItemType = null; - string? itemTypeFilter = null; - if (!string.IsNullOrWhiteSpace(itemType)) - { - itemTypeFilter = itemType.Trim(); - if (!MccGameCommon.TryParseItemType(itemTypeFilter, out ItemType resolvedType)) - return MccGameResult.Fail("invalid_args"); - - parsedItemType = resolvedType; - } - - int limit = Math.Clamp(maxCount, 1, 500); - return client.InvokeOnMainThread(() => - { - MccItemEntityEntry[] items = BuildNearbyItemSnapshots(client, parsedItemType, radius, limit) - .Select(item => new MccItemEntityEntry - { - EntityId = item.EntityId, - ItemType = item.ItemType.ToString(), - TypeLabel = item.TypeLabel, - Count = item.Count, - X = MccGameCommon.RoundCoordinate(item.X), - Y = MccGameCommon.RoundCoordinate(item.Y), - Z = MccGameCommon.RoundCoordinate(item.Z), - Distance = item.Distance - }) - .ToArray(); - - return MccGameResult.Ok(new MccItemEntitiesResult - { - ItemType = parsedItemType?.ToString() ?? itemTypeFilter, - Radius = radius, - Count = items.Length, - Items = items - }); - }); - } - - /// - /// Move to nearby dropped items and verify pickup completion. - /// Callers running on ChatBot update callbacks should prefer - /// so the main MCC updater thread is not blocked while movement and pickup verification complete. - /// - public MccGameResult PickupItems(string itemType, double radius = 16, int maxItems = 10, bool allowUnsafe = false, int timeoutMs = 0) - { - if (string.IsNullOrWhiteSpace(itemType) || radius <= 0 || radius > 1024 || maxItems < 1 || timeoutMs < 0) - return MccGameResult.Fail("invalid_args"); - - if (!MccGameCommon.TryParseItemType(itemType.Trim(), out ItemType parsedItemType)) - return MccGameResult.Fail("invalid_args"); - - McClient? client = clientProvider(); - if (client is null) - return NotConnected(); - - if (!client.GetTerrainEnabled() || !client.GetEntityHandlingEnabled()) - return MccGameResult.Fail("feature_disabled"); - - int limit = Math.Clamp(maxItems, 1, 50); - NearbyItemSnapshot[] targets = client.InvokeOnMainThread(() => BuildNearbyItemSnapshots(client, parsedItemType, radius, limit)); - if (targets.Length == 0) - return MccGameResult.Fail("invalid_state"); - - bool inventoryEnabled = client.GetInventoryEnabled(); - int beforeCount = inventoryEnabled ? client.InvokeOnMainThread(() => GetInventoryItemCount(client, parsedItemType)) : 0; - int initialCount = beforeCount; - int verifyWaitMs = timeoutMs > 0 ? Math.Clamp(timeoutMs, MinArrivalWaitMs, MaxArrivalWaitMs) : 2500; - List attempts = new(targets.Length); - int successfulPickups = 0; - - foreach (NearbyItemSnapshot target in targets) - { - Location targetLocation = new(target.X, target.Y, target.Z); - Location startLocation = client.InvokeOnMainThread(client.GetCurrentLocation); - TimeSpan? moveTimeout = timeoutMs > 0 ? TimeSpan.FromMilliseconds(timeoutMs) : null; - bool pathFound = client.InvokeOnMainThread(() => client.MoveTo(targetLocation, allowUnsafe, false, 0, 0, moveTimeout)); - Location? finalLocation = null; - bool arrived = pathFound && WaitForArrival(client, targetLocation, verifyWaitMs, 2.0, out finalLocation); - finalLocation ??= client.InvokeOnMainThread(client.GetCurrentLocation); - bool entityGone = WaitForEntityRemoval(client, target.EntityId, verifyWaitMs); - int afterCount = inventoryEnabled ? client.InvokeOnMainThread(() => GetInventoryItemCount(client, parsedItemType)) : beforeCount; - int inventoryDelta = inventoryEnabled ? Math.Max(0, afterCount - beforeCount) : 0; - bool pickedUp = entityGone || inventoryDelta > 0; - if (pickedUp) - successfulPickups++; - - attempts.Add(new MccPickupAttempt - { - EntityId = target.EntityId, - ItemType = target.ItemType.ToString(), - TypeLabel = target.TypeLabel, - ExpectedCount = target.Count, - Target = MccGameCommon.ToCoordinate(target.X, target.Y, target.Z), - PathFound = pathFound, - Arrived = arrived, - EntityGone = entityGone, - InventoryDelta = inventoryDelta, - StartLocation = MccGameCommon.ToCoordinate(startLocation), - FinalLocation = MccGameCommon.ToCoordinate(finalLocation.Value), - FinalDistance = MccGameCommon.GetDistance(finalLocation.Value, targetLocation) - }); - - beforeCount = afterCount; - } - - int remainingNearby = client.InvokeOnMainThread(() => BuildNearbyItemSnapshots(client, parsedItemType, radius, 1000).Length); - int collectedCount = inventoryEnabled ? Math.Max(0, beforeCount - initialCount) : successfulPickups; - MccPickupItemsResult resultData = new() - { - ItemType = parsedItemType.ToString(), - Radius = radius, - MaxItems = limit, - AllowUnsafe = allowUnsafe, - TimeoutMs = verifyWaitMs, - Attempted = attempts.Count, - SuccessfulPickups = successfulPickups, - CollectedCount = collectedCount, - InitialInventoryCount = inventoryEnabled ? initialCount : null, - FinalInventoryCount = inventoryEnabled ? beforeCount : null, - RemainingNearby = remainingNearby, - Attempts = attempts.ToArray() - }; - - return successfulPickups > 0 || collectedCount > 0 - ? MccGameResult.Ok(resultData) - : MccGameResult.Fail("action_incomplete", data: resultData); - } - - /// - /// Run on a worker thread so ChatBot callbacks can poll the result without blocking MCC updates. - /// - public Task> PickupItemsAsync(string itemType, double radius = 16, int maxItems = 10, bool allowUnsafe = false, int timeoutMs = 0) - { - return Task.Run(() => PickupItems(itemType, radius, maxItems, allowUnsafe, timeoutMs)); - } - - private static MccGameResult NotConnected() - { - return MccGameResult.Fail("disconnected"); - } - - private static MccEntitySummary BuildEntitySummary(Entity entity, string? resolvedName, double? distance = null) - { - return new MccEntitySummary - { - Id = entity.ID, - Type = entity.Type.ToString(), - TypeLabel = entity.GetTypeString(), - Uuid = entity.UUID, - Name = resolvedName, - CustomName = entity.CustomName, - X = MccGameCommon.RoundCoordinate(entity.Location.X), - Y = MccGameCommon.RoundCoordinate(entity.Location.Y), - Z = MccGameCommon.RoundCoordinate(entity.Location.Z), - Distance = distance, - Health = entity.Health, - Pose = entity.Pose.ToString(), - Latency = entity.Latency - }; - } - - private static bool IsSnapshotInventorySlot(Container inventory, int slotId) - { - return slotId >= 0 && slotId < inventory.Type.SlotCount(); - } - - private static MccItemStackSnapshot? TryBuildCursorSnapshot(Container inventory) - { - return inventory.Items.TryGetValue(-1, out Item? cursorItem) && cursorItem.Count > 0 - ? MccGameCommon.ToItemStack(cursorItem) - : null; - } - - private static int GetActiveContainerId(McClient client) - { - return client.GetInventories().Keys.Where(id => id > 0).DefaultIfEmpty(0).Max(); - } - - private static bool ItemMatches(Item item, string query, bool exactMatch, ItemType? exactItemType) - { - if (exactItemType.HasValue) - return item.Type == exactItemType.Value; - - string typeName = item.Type.ToString(); - string typeLabel = item.GetTypeString(); - return exactMatch - ? MccGameCommon.TextEqualsFilter(typeName, query) || MccGameCommon.TextEqualsFilter(typeLabel, query) - : MccGameCommon.TextMatchesFilter(typeName, query) || MccGameCommon.TextMatchesFilter(typeLabel, query); - } - - private static bool WaitForArrival(McClient client, Location goal, int waitMs, double tolerance, out Location? finalLocation) - { - finalLocation = null; - DateTime deadline = DateTime.UtcNow.AddMilliseconds(waitMs); - while (true) - { - Location location = client.InvokeOnMainThread(client.GetCurrentLocation); - finalLocation = location; - if (MccGameCommon.GetDistance(location, goal) <= tolerance) - return true; - - if (DateTime.UtcNow >= deadline) - return false; - - Thread.Sleep(ArrivalPollIntervalMs); - } - } - - private static bool WaitForEntityRemoval(McClient client, int entityId, int waitMs) - { - DateTime deadline = DateTime.UtcNow.AddMilliseconds(waitMs); - while (true) - { - bool exists = client.InvokeOnMainThread(() => client.GetEntities().ContainsKey(entityId)); - if (!exists) - return true; - - if (DateTime.UtcNow >= deadline) - return false; - - Thread.Sleep(ArrivalPollIntervalMs); - } - } - - private static int GetInventoryItemCount(McClient client, ItemType itemType) - { - Container? inventory = client.GetInventory(0); - if (inventory is null) - return 0; - - return inventory.Items.Values - .Where(item => item.Type == itemType) - .Sum(item => item.Count); - } - - private static int GetPathQueryTimeoutMs(int timeoutMs) - { - if (timeoutMs <= 0) - return DefaultPathQueryTimeoutMs; - return Math.Clamp(timeoutMs, MinPathQueryTimeoutMs, MaxPathQueryTimeoutMs); - } - - private static int GetArrivalWaitMs(int timeoutMs) - { - if (timeoutMs <= 0) - return DefaultArrivalWaitMs; - return Math.Clamp(timeoutMs, MinArrivalWaitMs, MaxArrivalWaitMs); - } - - private static double GetArrivalTolerance(int maxOffset, int minOffset) - { - double toleranceFromOffset = Math.Max(maxOffset, minOffset) + 1.0; - return Math.Max(DefaultArrivalTolerance, toleranceFromOffset); - } - - private static bool AreValidPathOffsets(int maxOffset, int minOffset) - { - return maxOffset >= 0 && minOffset >= 0 && minOffset <= maxOffset; - } - - private static bool EntityNameMatches(string? name, string? customName, string filter) - { - return (!string.IsNullOrWhiteSpace(name) && MccGameCommon.TextMatchesFilter(name, filter)) - || (!string.IsNullOrWhiteSpace(customName) && MccGameCommon.TextMatchesFilter(customName, filter)); - } - - private static bool PlayerNameMatches(NearbyPlayerSnapshot player, string filter) - { - if (string.IsNullOrWhiteSpace(filter)) - return true; - - string trimmed = filter.Trim(); - if (!string.IsNullOrWhiteSpace(player.Name) && player.Name.Contains(trimmed, StringComparison.OrdinalIgnoreCase)) - return true; - - if (!string.IsNullOrWhiteSpace(player.CustomName) && player.CustomName.Contains(trimmed, StringComparison.OrdinalIgnoreCase)) - return true; - - return false; - } - - private static NearbyItemSnapshot[] BuildNearbyItemSnapshots(McClient client, ItemType? itemType, double radius, int maxCount) - { - Location playerLocation = client.GetCurrentLocation(); - return client.GetEntities().Values - .Where(entity => entity.Type == EntityType.Item && !entity.Item.IsEmpty) - .Where(entity => !itemType.HasValue || entity.Item.Type == itemType.Value) - .Select(entity => - { - double dx = entity.Location.X - playerLocation.X; - double dy = entity.Location.Y - playerLocation.Y; - double dz = entity.Location.Z - playerLocation.Z; - return new NearbyItemSnapshot - { - EntityId = entity.ID, - ItemType = entity.Item.Type, - TypeLabel = entity.Item.GetTypeString(), - Count = entity.Item.Count, - X = entity.Location.X, - Y = entity.Location.Y, - Z = entity.Location.Z, - Distance = Math.Sqrt(dx * dx + dy * dy + dz * dz) - }; - }) - .Where(item => item.Distance <= radius) - .OrderBy(item => item.Distance) - .Take(maxCount) - .ToArray(); - } - - private static List BuildTrackedPlayerSnapshots(McClient client, bool includeSelf) - { - Location playerLocation = client.GetCurrentLocation(); - string username = client.GetUsername(); - Dictionary uuidToName = client.GetOnlinePlayersWithUUID(); - string[] onlinePlayers = client.GetOnlinePlayers(); - - List trackedPlayers = client.GetEntities().Values - .Where(entity => entity.Type == EntityType.Player) - .Select(entity => - { - double dx = entity.Location.X - playerLocation.X; - double dy = entity.Location.Y - playerLocation.Y; - double dz = entity.Location.Z - playerLocation.Z; - double distance = Math.Sqrt(dx * dx + dy * dy + dz * dz); - string? rawName = ResolvePlayerEntityName(entity, uuidToName); - return new NearbyPlayerSnapshot - { - EntityId = entity.ID, - Uuid = entity.UUID, - Name = rawName, - CustomName = entity.CustomName, - X = entity.Location.X, - Y = entity.Location.Y, - Z = entity.Location.Z, - Distance = distance, - Latency = entity.Latency - }; - }) - .ToList(); - - if (!includeSelf) - { - trackedPlayers = trackedPlayers - .Where(player => !string.Equals(player.Name, username, StringComparison.OrdinalIgnoreCase)) - .Where(player => player.Distance > SelfEntityDistanceThreshold) - .ToList(); - } - - List unnamedTracked = trackedPlayers - .Where(player => string.IsNullOrWhiteSpace(player.Name)) - .OrderBy(player => player.Distance) - .ToList(); - if (unnamedTracked.Count == 0) - return trackedPlayers; - - HashSet assignedNames = trackedPlayers - .Select(player => player.Name) - .OfType() - .ToHashSet(NameComparer); - - string[] unmatchedOnline = onlinePlayers - .Where(name => includeSelf || !string.Equals(name, username, StringComparison.OrdinalIgnoreCase)) - .Where(name => !string.IsNullOrWhiteSpace(name)) - .Where(name => !assignedNames.Contains(name)) - .Distinct(NameComparer) - .ToArray(); - - if (unmatchedOnline.Length == 0) - return trackedPlayers; - - if (unnamedTracked.Count == 1 && unmatchedOnline.Length == 1) - { - unnamedTracked[0].Name = unmatchedOnline[0]; - return trackedPlayers; - } - - int pairCount = Math.Min(unnamedTracked.Count, unmatchedOnline.Length); - string[] sortedNames = unmatchedOnline - .OrderBy(name => name, NameComparer) - .ToArray(); - for (int i = 0; i < pairCount; i++) - unnamedTracked[i].Name = sortedNames[i]; - - return trackedPlayers; - } - - private static string? ResolvePlayerEntityName(Entity entity, IReadOnlyDictionary uuidToName) - { - if (!string.IsNullOrWhiteSpace(entity.Name)) - return entity.Name; - - if (entity.UUID != Guid.Empty - && uuidToName.TryGetValue(entity.UUID.ToString(), out string? mappedName) - && !string.IsNullOrWhiteSpace(mappedName)) - { - return mappedName; - } - - if (!string.IsNullOrWhiteSpace(entity.CustomName)) - return entity.CustomName; - - return null; - } -} diff --git a/MinecraftClient/Scripting/MccGameCommon.cs b/MinecraftClient/Scripting/MccGameCommon.cs deleted file mode 100644 index 042d94531a..0000000000 --- a/MinecraftClient/Scripting/MccGameCommon.cs +++ /dev/null @@ -1,237 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using MinecraftClient.Inventory; -using MinecraftClient.Mapping; - -namespace MinecraftClient.Scripting; - -/// -/// Represents a world coordinate rounded for tool and script consumption. -/// -public sealed class MccCoordinate -{ - public required double X { get; init; } - public required double Y { get; init; } - public required double Z { get; init; } -} - -/// -/// Represents a block state snapshot. -/// -public sealed class MccBlockStateSnapshot -{ - public required string Material { get; init; } - public required string TypeLabel { get; init; } - public required int BlockId { get; init; } - public required int BlockMeta { get; init; } - public required int StateId { get; init; } - public required IReadOnlyDictionary Properties { get; init; } -} - -/// -/// Represents a simple item stack snapshot. -/// -public sealed class MccItemStackSnapshot -{ - public required string Type { get; init; } - public required int Count { get; init; } - public Dictionary? Nbt { get; init; } -} - -/// -/// Shared normalization and formatting helpers for gameplay operations. -/// -public static class MccGameCommon -{ - private const int CoordinateRoundingPrecision = 2; - - public static bool TryParseItemType(string rawItemType, out ItemType itemType) - { - if (Enum.TryParse(rawItemType, true, out itemType) && itemType is not (ItemType.Unknown or ItemType.Null)) - return true; - - string normalized = NormalizeToken(rawItemType); - if (normalized.Length == 0) - { - itemType = ItemType.Unknown; - return false; - } - - foreach (ItemType candidate in Enum.GetValues()) - { - if (candidate is ItemType.Unknown or ItemType.Null) - continue; - - if (NormalizeToken(candidate.ToString()) == normalized) - { - itemType = candidate; - return true; - } - } - - itemType = ItemType.Unknown; - return false; - } - - public static string NormalizeToken(string value) - { - if (string.IsNullOrWhiteSpace(value)) - return string.Empty; - - char[] buffer = value - .Where(char.IsLetterOrDigit) - .Select(char.ToLowerInvariant) - .ToArray(); - return new string(buffer); - } - - public static bool TextEqualsFilter(string text, string filter) - { - return text.Equals(filter, StringComparison.OrdinalIgnoreCase) - || NormalizeToken(text) == NormalizeToken(filter); - } - - public static bool TextMatchesFilter(string text, string filter) - { - if (text.Contains(filter, StringComparison.OrdinalIgnoreCase)) - return true; - - string normalizedFilter = NormalizeToken(filter); - if (normalizedFilter.Length == 0) - return false; - - return NormalizeToken(text).Contains(normalizedFilter, StringComparison.Ordinal); - } - - public static double GetDistance(Location from, Location to) - { - double dx = from.X - to.X; - double dy = from.Y - to.Y; - double dz = from.Z - to.Z; - return Math.Sqrt(dx * dx + dy * dy + dz * dz); - } - - public static double RoundCoordinate(double value) - { - return Math.Round(value, CoordinateRoundingPrecision, MidpointRounding.AwayFromZero); - } - - public static MccCoordinate ToCoordinate(Location location) - { - return ToCoordinate(location.X, location.Y, location.Z); - } - - public static MccCoordinate ToCoordinate(double x, double y, double z) - { - return new MccCoordinate - { - X = RoundCoordinate(x), - Y = RoundCoordinate(y), - Z = RoundCoordinate(z) - }; - } - - public static Location ToBlockLocation(double x, double y, double z) - { - return new Location(Math.Floor(x), Math.Floor(y), Math.Floor(z)); - } - - public static MccBlockStateSnapshot ToBlockState(Block block) - { - return new MccBlockStateSnapshot - { - Material = block.Type.ToString(), - TypeLabel = block.GetTypeString(), - BlockId = block.BlockId, - BlockMeta = block.BlockMeta, - StateId = block.StateId, - Properties = block.GetStateProperties() - }; - } - - public static object? DescribeMetadataValue(object? value) - { - return value switch - { - null => null, - string s => s, - bool b => b, - byte b => b, - sbyte b => b, - short s => s, - ushort s => s, - int i => i, - uint i => i, - long l => l, - ulong l => l, - float f => f, - double d => d, - decimal d => d, - Enum e => e.ToString(), - Location location => ToCoordinate(location), - Item item => ToItemStack(item), - byte[] data => new { bytes = data.Length }, - _ => value.ToString() - }; - } - - public static MccItemStackSnapshot ToItemStack(Item item) - { - return new MccItemStackSnapshot - { - Type = item.Type.ToString(), - Count = item.Count, - Nbt = BuildNbt(item) - }; - } - - public static Dictionary? BuildNbt(Item item) - { - if (item.Components is { Count: > 0 }) - { - return item.Components - .Where(c => !string.IsNullOrEmpty(c.ComponentName)) - .ToDictionary( - c => c.ComponentName, - c => (object)System.Text.Json.JsonSerializer.SerializeToElement(c, c.GetType()) - ); - } - - return item.NBT is { Count: > 0 } ? item.NBT : null; - } - - public static bool TryParseBlockQuery(string? query, out int? blockId, out int? blockMeta) - { - blockId = null; - blockMeta = null; - if (string.IsNullOrWhiteSpace(query)) - return false; - - string trimmed = query.Trim(); - int separator = trimmed.IndexOf(':'); - if (separator >= 0) - { - string idPart = trimmed[..separator].Trim(); - string metaPart = trimmed[(separator + 1)..].Trim(); - if (int.TryParse(idPart, NumberStyles.Integer, CultureInfo.InvariantCulture, out int parsedId)) - { - blockId = parsedId; - if (int.TryParse(metaPart, NumberStyles.Integer, CultureInfo.InvariantCulture, out int parsedMeta)) - blockMeta = parsedMeta; - return true; - } - - return false; - } - - if (int.TryParse(trimmed, NumberStyles.Integer, CultureInfo.InvariantCulture, out int blockStateId)) - { - blockId = blockStateId; - return true; - } - - return false; - } -} diff --git a/MinecraftClient/Scripting/MccGameModels.cs b/MinecraftClient/Scripting/MccGameModels.cs deleted file mode 100644 index 1eef647637..0000000000 --- a/MinecraftClient/Scripting/MccGameModels.cs +++ /dev/null @@ -1,321 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace MinecraftClient.Scripting; - -public sealed class MccRecentEventsResult -{ - public required long AfterId { get; init; } - public required long LatestId { get; init; } - public required int Count { get; init; } - public required MccRecentEventEntry[] Events { get; init; } -} - -public sealed class MccChatHistoryResult -{ - public required int Count { get; init; } - public required MccChatHistoryEntry[] Entries { get; init; } -} - -public sealed class MccPathPreviewResult -{ - public required bool PathFound { get; init; } - public required bool ExactReachable { get; init; } - public required MccCoordinate Target { get; init; } - public required MccCoordinate StartLocation { get; init; } - public MccCoordinate? FinalWaypoint { get; init; } - public double? FinalDistance { get; init; } - public required int WaypointCount { get; init; } - public required bool Truncated { get; init; } - public required MccCoordinate[] Waypoints { get; init; } - public required bool AllowUnsafe { get; init; } - public required int MaxOffset { get; init; } - public required int MinOffset { get; init; } - public required int TimeoutMs { get; init; } -} - -public sealed class MccReachabilityResult -{ - public required bool Reachable { get; init; } - public required bool ExactReachable { get; init; } - public required MccCoordinate Target { get; init; } - public required MccCoordinate StartLocation { get; init; } - public MccCoordinate? FinalWaypoint { get; init; } - public double? FinalDistance { get; init; } - public required int WaypointCount { get; init; } - public required bool AllowUnsafe { get; init; } - public required int MaxOffset { get; init; } - public required int MinOffset { get; init; } - public required int TimeoutMs { get; init; } -} - -public sealed class MccPlayersDetailedEntry -{ - public string? Name { get; init; } - public required Guid Uuid { get; init; } - public required int Ping { get; init; } - public required int Gamemode { get; init; } - public required bool Listed { get; init; } - public string? DisplayName { get; init; } - public int? EntityId { get; init; } - public double? X { get; init; } - public double? Y { get; init; } - public double? Z { get; init; } -} - -public sealed class MccPlayersDetailedResult -{ - public required bool IncludeSelf { get; init; } - public required bool IncludeCoordinates { get; init; } - public required int Count { get; init; } - public required MccPlayersDetailedEntry[] Players { get; init; } -} - -public sealed class MccNearbyPlayerEntry -{ - public required int EntityId { get; init; } - public required Guid Uuid { get; init; } - public string? Name { get; init; } - public string? CustomName { get; init; } - public required double X { get; init; } - public required double Y { get; init; } - public required double Z { get; init; } - public required double Distance { get; init; } - public required int Latency { get; init; } -} - -public sealed class MccPlayerNearbyResult -{ - public required double Radius { get; init; } - public string? PlayerName { get; init; } - public required bool IncludeSelf { get; init; } - public required bool AnyNearby { get; init; } - public required int Count { get; init; } - public required MccNearbyPlayerEntry[] Players { get; init; } -} - -public sealed class MccLocatedPlayerResult -{ - public required string PlayerName { get; init; } - public string? MatchedName { get; init; } - public required int EntityId { get; init; } - public required Guid Uuid { get; init; } - public required double X { get; init; } - public required double Y { get; init; } - public required double Z { get; init; } - public required double Distance { get; init; } -} - -public sealed class MccEntitySummary -{ - public required int Id { get; init; } - public required string Type { get; init; } - public required string TypeLabel { get; init; } - public required Guid Uuid { get; init; } - public string? Name { get; init; } - public string? CustomName { get; init; } - public required double X { get; init; } - public required double Y { get; init; } - public required double Z { get; init; } - public double? Distance { get; init; } - public float? Health { get; init; } - public string? Pose { get; init; } - public int? Latency { get; init; } -} - -public sealed class MccQueryEntitiesResult -{ - public required int Count { get; init; } - public required MccEntitySummary[] Entities { get; init; } -} - -public sealed class MccListEntitiesResult -{ - public required int TotalTracked { get; init; } - public required int Count { get; init; } - public required MccEntitySummary[] Entities { get; init; } -} - -public sealed class MccEntityEquipmentEntry -{ - public required int Slot { get; init; } - public required string Type { get; init; } - public required int Count { get; init; } -} - -public sealed class MccEffectSnapshot -{ - public required string Id { get; init; } - public string? Name { get; init; } - public required int Amplifier { get; init; } - public required int RemainingSeconds { get; init; } - public required bool IsInfinite { get; init; } -} - -public sealed class MccEntityInfoResult -{ - public required int Id { get; init; } - public required string Type { get; init; } - public required string TypeLabel { get; init; } - public required Guid Uuid { get; init; } - public string? Name { get; init; } - public string? CustomName { get; init; } - public required bool CustomNameVisible { get; init; } - public required double X { get; init; } - public required double Y { get; init; } - public required double Z { get; init; } - public required float Yaw { get; init; } - public required float Pitch { get; init; } - public required float Health { get; init; } - public string? Pose { get; init; } - public int? Latency { get; init; } - public int? ObjectData { get; init; } - public Dictionary? Metadata { get; init; } - public MccEntityEquipmentEntry[]? Equipment { get; init; } - public MccEffectSnapshot[]? ActiveEffects { get; init; } -} - -public sealed class MccMoveToPlayerTarget -{ - public string? PlayerName { get; init; } - public required int EntityId { get; init; } - public required double X { get; init; } - public required double Y { get; init; } - public required double Z { get; init; } -} - -public sealed class MccMoveToPlayerResult -{ - public required bool PathFound { get; init; } - public required bool Arrived { get; init; } - public required double Tolerance { get; init; } - public required int VerifyWaitMs { get; init; } - public required MccMoveToPlayerTarget Target { get; init; } - public required MccCoordinate StartLocation { get; init; } - public required MccCoordinate FinalLocation { get; init; } - public required double FinalDistance { get; init; } - public required double DistanceMoved { get; init; } - public required bool AllowUnsafe { get; init; } - public required bool AllowDirectTeleport { get; init; } - public required int MaxOffset { get; init; } - public required int MinOffset { get; init; } - public required int TimeoutMs { get; init; } -} - -public sealed class MccHotbarSelectionResult -{ - public required bool Success { get; init; } - public required string ItemType { get; init; } - public required int InventorySlot { get; init; } - public required int SelectedSlot { get; init; } - public required int Count { get; init; } -} - -public sealed class MccInventorySnapshotSlot -{ - public required int Slot { get; init; } - public required string Type { get; init; } - public required int Count { get; init; } - public Dictionary? Nbt { get; init; } -} - -public sealed class MccInventorySnapshotResult -{ - public required int Id { get; init; } - public required string Type { get; init; } - public required string Title { get; init; } - public required int SlotCount { get; init; } - public required MccInventorySnapshotSlot[] Slots { get; init; } - public MccItemStackSnapshot? Cursor { get; init; } -} - -public sealed class MccInventorySearchMatch -{ - public required int InventoryId { get; init; } - public required string InventoryType { get; init; } - public required string InventoryTitle { get; init; } - public required int Slot { get; init; } - public required string ItemType { get; init; } - public required string TypeLabel { get; init; } - public required int Count { get; init; } - public required bool IsPlayerInventory { get; init; } - public int? HotbarSlot { get; init; } - public Dictionary? Nbt { get; init; } -} - -public sealed class MccInventorySearchResult -{ - public required string Query { get; init; } - public required bool ExactMatch { get; init; } - public required bool IncludeContainers { get; init; } - public required int Count { get; init; } - public required MccInventorySearchMatch[] Matches { get; init; } -} - -public sealed class MccInventoryListEntry -{ - public required int Id { get; init; } - public required string Type { get; init; } - public required string Title { get; init; } - public required int SlotCount { get; init; } - public required int NonEmptySlots { get; init; } - public required bool Active { get; init; } -} - -public sealed class MccInventoryListResult -{ - public required int Count { get; init; } - public required MccInventoryListEntry[] Inventories { get; init; } -} - -public sealed class MccItemEntityEntry -{ - public required int EntityId { get; init; } - public required string ItemType { get; init; } - public required string TypeLabel { get; init; } - public required int Count { get; init; } - public required double X { get; init; } - public required double Y { get; init; } - public required double Z { get; init; } - public required double Distance { get; init; } -} - -public sealed class MccItemEntitiesResult -{ - public string? ItemType { get; init; } - public required double Radius { get; init; } - public required int Count { get; init; } - public required MccItemEntityEntry[] Items { get; init; } -} - -public sealed class MccPickupAttempt -{ - public required int EntityId { get; init; } - public required string ItemType { get; init; } - public required string TypeLabel { get; init; } - public required int ExpectedCount { get; init; } - public required MccCoordinate Target { get; init; } - public required bool PathFound { get; init; } - public required bool Arrived { get; init; } - public required bool EntityGone { get; init; } - public required int InventoryDelta { get; init; } - public required MccCoordinate StartLocation { get; init; } - public required MccCoordinate FinalLocation { get; init; } - public required double FinalDistance { get; init; } -} - -public sealed class MccPickupItemsResult -{ - public required string ItemType { get; init; } - public required double Radius { get; init; } - public required int MaxItems { get; init; } - public required bool AllowUnsafe { get; init; } - public required int TimeoutMs { get; init; } - public required int Attempted { get; init; } - public required int SuccessfulPickups { get; init; } - public required int CollectedCount { get; init; } - public int? InitialInventoryCount { get; init; } - public int? FinalInventoryCount { get; init; } - public required int RemainingNearby { get; init; } - public required MccPickupAttempt[] Attempts { get; init; } -} diff --git a/MinecraftClient/Scripting/MccGameResult.cs b/MinecraftClient/Scripting/MccGameResult.cs deleted file mode 100644 index 5639dfc0b4..0000000000 --- a/MinecraftClient/Scripting/MccGameResult.cs +++ /dev/null @@ -1,63 +0,0 @@ -using System; - -namespace MinecraftClient.Scripting; - -/// -/// Represents the outcome of a shared MCC game operation. -/// -public class MccGameResult -{ - public bool Success { get; init; } - public string? ErrorCode { get; init; } - public string? Message { get; init; } - - public static MccGameResult Ok(string? message = null) - { - return new MccGameResult - { - Success = true, - Message = message - }; - } - - public static MccGameResult Fail(string errorCode, string? message = null) - { - ArgumentException.ThrowIfNullOrEmpty(errorCode); - return new MccGameResult - { - Success = false, - ErrorCode = errorCode, - Message = message - }; - } -} - -/// -/// Represents the outcome of a shared MCC game operation with typed payload data. -/// -public sealed class MccGameResult : MccGameResult -{ - public T? Data { get; init; } - - public static MccGameResult Ok(T? data, string? message = null) - { - return new MccGameResult - { - Success = true, - Data = data, - Message = message - }; - } - - public static MccGameResult Fail(string errorCode, string? message = null, T? data = default) - { - ArgumentException.ThrowIfNullOrEmpty(errorCode); - return new MccGameResult - { - Success = false, - ErrorCode = errorCode, - Message = message, - Data = data - }; - } -} diff --git a/MinecraftClient/Scripting/MccObservedState.cs b/MinecraftClient/Scripting/MccObservedState.cs deleted file mode 100644 index 5386e3a3ac..0000000000 --- a/MinecraftClient/Scripting/MccObservedState.cs +++ /dev/null @@ -1,205 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; - -namespace MinecraftClient.Scripting; - -/// -/// Represents a recent high-signal runtime event observed by MCC. -/// -public sealed class MccRecentEventEntry -{ - public required long Id { get; init; } - public required DateTimeOffset TimestampUtc { get; init; } - public required string Type { get; init; } - public object? Data { get; init; } -} - -/// -/// Represents a recent chat or system line observed by MCC. -/// -public sealed class MccChatHistoryEntry -{ - public required DateTimeOffset TimestampUtc { get; init; } - public required string Kind { get; init; } - public required string Text { get; init; } - public string? Sender { get; init; } - public string? Message { get; init; } - public string? Json { get; init; } -} - -/// -/// Represents the latest observed world time and weather values. -/// -public sealed class MccRuntimeStateSnapshot -{ - public long? WorldAge { get; init; } - public long? TimeOfDay { get; init; } - public float? RainLevel { get; init; } - public float? ThunderLevel { get; init; } -} - -/// -/// Shared observed-state store populated from ChatBot callbacks and consumed by MCP and bots/scripts. -/// -public static class MccObservedStateStore -{ - private const int MaxEntries = 500; - - private static readonly Lock s_recentEventsLock = new(); - private static readonly Lock s_chatHistoryLock = new(); - private static readonly Lock s_runtimeStateLock = new(); - - private static readonly List s_recentEvents = []; - private static readonly List s_chatHistory = []; - - private static long s_nextRecentEventId = 1; - private static long? s_worldAge; - private static long? s_timeOfDay; - private static float? s_rainLevel; - private static float? s_thunderLevel; - - public static long AddRecentEvent(string type, object? data = null) - { - ArgumentException.ThrowIfNullOrEmpty(type); - - lock (s_recentEventsLock) - { - long id = s_nextRecentEventId++; - s_recentEvents.Add(new MccRecentEventEntry - { - Id = id, - TimestampUtc = DateTimeOffset.UtcNow, - Type = type, - Data = data - }); - - TrimToMaxEntries(s_recentEvents); - return id; - } - } - - public static long GetLatestRecentEventId() - { - lock (s_recentEventsLock) - { - return s_recentEvents.Count > 0 ? s_recentEvents[^1].Id : 0; - } - } - - public static MccRecentEventEntry[] GetRecentEventsAfter(long afterId, int maxCount, string? typeFilter = null) - { - int count = Math.Clamp(maxCount, 1, MaxEntries); - string? normalizedFilter = string.IsNullOrWhiteSpace(typeFilter) ? null : typeFilter.Trim(); - - lock (s_recentEventsLock) - { - return s_recentEvents - .Where(entry => entry.Id > afterId) - .Where(entry => normalizedFilter is null - || entry.Type.Contains(normalizedFilter, StringComparison.OrdinalIgnoreCase)) - .Take(count) - .ToArray(); - } - } - - public static void AddChatHistoryEntry(MccChatHistoryEntry entry) - { - ArgumentNullException.ThrowIfNull(entry); - - lock (s_chatHistoryLock) - { - s_chatHistory.Add(entry); - TrimToMaxEntries(s_chatHistory); - } - } - - public static MccChatHistoryEntry[] GetLatestChatHistory(int maxCount) - { - int count = Math.Clamp(maxCount, 1, MaxEntries); - lock (s_chatHistoryLock) - { - return s_chatHistory.TakeLast(count).ToArray(); - } - } - - public static void SetTime(long worldAge, long timeOfDay) - { - lock (s_runtimeStateLock) - { - s_worldAge = worldAge; - s_timeOfDay = timeOfDay; - } - } - - public static void SetRainLevel(float level) - { - lock (s_runtimeStateLock) - { - s_rainLevel = level; - } - } - - public static void SetThunderLevel(float level) - { - lock (s_runtimeStateLock) - { - s_thunderLevel = level; - } - } - - public static MccRuntimeStateSnapshot GetRuntimeStateSnapshot() - { - lock (s_runtimeStateLock) - { - return new MccRuntimeStateSnapshot - { - WorldAge = s_worldAge, - TimeOfDay = s_timeOfDay, - RainLevel = s_rainLevel, - ThunderLevel = s_thunderLevel - }; - } - } - - public static void ClearRecentEvents() - { - lock (s_recentEventsLock) - { - s_recentEvents.Clear(); - } - } - - public static void ClearChatHistory() - { - lock (s_chatHistoryLock) - { - s_chatHistory.Clear(); - } - } - - public static void ClearRuntimeState() - { - lock (s_runtimeStateLock) - { - s_worldAge = null; - s_timeOfDay = null; - s_rainLevel = null; - s_thunderLevel = null; - } - } - - public static void ClearAll() - { - ClearChatHistory(); - ClearRuntimeState(); - ClearRecentEvents(); - } - - private static void TrimToMaxEntries(List entries) - { - if (entries.Count > MaxEntries) - entries.RemoveRange(0, entries.Count - MaxEntries); - } -} diff --git a/MinecraftClient/Settings.cs b/MinecraftClient/Settings.cs deleted file mode 100644 index c594a33632..0000000000 --- a/MinecraftClient/Settings.cs +++ /dev/null @@ -1,2472 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics.CodeAnalysis; -using System.Globalization; -using System.IO; -using System.Linq; -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Text; -using System.Text.RegularExpressions; -using System.Threading; -using MinecraftClient.Protocol; -using MinecraftClient.Proxy; -using Tomlet; -using Tomlet.Attributes; -using Tomlet.Models; -using static MinecraftClient.Settings.AppVarConfigHelper; -using static MinecraftClient.Settings.ChatBotConfigHealper; -using static MinecraftClient.Settings.ChatFormatConfigHelper; -using static MinecraftClient.Settings.ConsoleConfigHealper; -using static MinecraftClient.Settings.HeadCommentHealper; -using static MinecraftClient.Settings.LoggingConfigHealper; -using static MinecraftClient.Settings.MainConfigHelper; -using static MinecraftClient.Settings.MainConfigHelper.MainConfig; -using static MinecraftClient.Settings.MainConfigHelper.MainConfig.AdvancedConfig; -using static MinecraftClient.Settings.MCSettingsConfigHealper; -using static MinecraftClient.Settings.SignatureConfigHelper; - -namespace MinecraftClient -{ - public static class Settings - { - private const int CommentsAlignPosition = 45; - private readonly static Regex CommentRegex = new(@"^(.*)\s?#\s\$([\w\.]+)\$\s*$$", RegexOptions.Compiled); - - // Other Settings - public const string TranslationsFile_Version = "1.19.3"; - public const string TranslationsFile_Website_Index = "https://piston-meta.mojang.com/v1/packages/c492375ded5da34b646b8c5c0842a0028bc69cec/2.json"; - public const string TranslationsFile_Website_Download = "https://resources.download.minecraft.net"; - - public const string TranslationProjectUrl = "https://crowdin.com/project/minecraft-console-client"; - public const int ClientTicksPerSecond = 20; - public const int ClientTickIntervalMilliseconds = 1000 / ClientTicksPerSecond; - - public static GlobalConfig Config = new(); - - public static class InternalConfig - { - public static string ServerIP = String.Empty; - - public static ushort ServerPort = 25565; - - public static AccountInfoConfig Account = new(); - - public static string Username = string.Empty; - - public static string MinecraftVersion = string.Empty; - - public static bool InteractiveMode = true; - - public static bool GravityEnabled = true; - - public static bool KeepAccountSettings = false; - - public static bool KeepServerSettings = false; - } - - public class GlobalConfig - { - [TomlPrecedingComment("$Head$")] - public HeadComment Head - { - get { return HeadCommentHealper.Config; } - set { HeadCommentHealper.Config = value; HeadCommentHealper.Config.OnSettingUpdate(); } - } - - public MainConfig Main - { - get { return MainConfigHelper.Config; } - set { MainConfigHelper.Config = value; MainConfigHelper.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$Signature$")] - public SignatureConfig Signature - { - get { return SignatureConfigHelper.Config; } - set { SignatureConfigHelper.Config = value; SignatureConfigHelper.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$Logging$")] - public LoggingConfig Logging - { - get { return LoggingConfigHealper.Config; } - set { LoggingConfigHealper.Config = value; LoggingConfigHealper.Config.OnSettingUpdate(); } - } - - public ConsoleConfig Console - { - get { return ConsoleConfigHealper.Config; } - set { ConsoleConfigHealper.Config = value; ConsoleConfigHealper.Config.OnSettingUpdate(); } - } - - public AppVarConfig AppVar - { - get { return AppVarConfigHelper.Config; } - set { AppVarConfigHelper.Config = value; AppVarConfigHelper.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$Proxy$")] - public ProxyHandler.Configs Proxy - { - get { return ProxyHandler.Config; } - set { ProxyHandler.Config = value; ProxyHandler.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$MCSettings$")] - public MCSettingsConfig MCSettings - { - get { return MCSettingsConfigHealper.Config; } - set { MCSettingsConfigHealper.Config = value; MCSettingsConfigHealper.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatFormat$")] - public ChatFormatConfig ChatFormat - { - get { return ChatFormatConfigHelper.Config; } - set { ChatFormatConfigHelper.Config = value; ChatFormatConfigHelper.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot$")] - public ChatBotConfig ChatBot - { - get { return ChatBotConfigHealper.Config; } - set { ChatBotConfigHealper.Config = value; } - } - - } - - /// - /// Structured result returned by . - /// - public readonly struct ConfigLoadResult - { - public bool Success { get; init; } - public bool NeedWriteDefault { get; init; } - /// True when a pre-TOML legacy config was detected, backed up, and a fresh default is needed. - public bool IsLegacyUpgrade { get; init; } - /// Non-null when the load failed due to a parse/IO error (not a legacy upgrade). - public string? ErrorMessage { get; init; } - /// Path where the old config was backed up (legacy upgrade case). - public string? LegacyBackupPath { get; init; } - } - - public static ConfigLoadResult LoadFromFile(string filepath, bool keepAccountAndServerSettings = false) - { - bool keepAccountSettings = InternalConfig.KeepAccountSettings; - bool keepServerSettings = InternalConfig.KeepServerSettings; - if (keepAccountAndServerSettings) - InternalConfig.KeepAccountSettings = InternalConfig.KeepServerSettings = true; - - Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; - TomlDocument document; - try - { - document = TomlParser.ParseFile(filepath); - Thread.CurrentThread.CurrentCulture = Program.ActualCulture; - - Config = TomletMain.To(document); - } - catch (Exception ex) - { - Thread.CurrentThread.CurrentCulture = Program.ActualCulture; - try - { - string configString = File.ReadAllText(filepath); - if (configString.Contains("Some settings missing here after an upgrade?")) - { - string newFilePath = Path.ChangeExtension(filepath, ".old.ini"); - File.Copy(filepath, newFilePath, true); - return new ConfigLoadResult - { - Success = false, - NeedWriteDefault = true, - IsLegacyUpgrade = true, - LegacyBackupPath = newFilePath - }; - } - } - catch { } - return new ConfigLoadResult - { - Success = false, - NeedWriteDefault = false, - ErrorMessage = ex.GetFullMessage() - }; - } - finally - { - if (!keepAccountSettings) - InternalConfig.KeepAccountSettings = false; - if (!keepServerSettings) - InternalConfig.KeepServerSettings = false; - } - return new ConfigLoadResult { Success = true, NeedWriteDefault = false }; - } - - public static void WriteToFile(string filepath, bool backupOldFile) - { - Thread.CurrentThread.CurrentCulture = CultureInfo.InvariantCulture; - string tomlString = TomletMain.TomlStringFrom(Config); - Thread.CurrentThread.CurrentCulture = Program.ActualCulture; - tomlString = RemoveLegacyAuthServerSection(tomlString); - - string[] tomlList = tomlString.Split('\n'); - StringBuilder newConfig = new(); - foreach (string line in tomlList) - { - Match matchComment = CommentRegex.Match(line); - if (matchComment.Success && matchComment.Groups.Count == 3) - { - string config = matchComment.Groups[1].Value, comment = matchComment.Groups[2].Value; - if (config.Length > 0) - newConfig.Append(config).Append(' ', Math.Max(1, CommentsAlignPosition - config.Length) - 1); - string? comment_trans = ConfigComments.ResourceManager.GetString(comment); - if (string.IsNullOrEmpty(comment_trans)) - newConfig.Append("# ").AppendLine(comment.ReplaceLineEndings()); - else - newConfig.Append("# ").AppendLine(comment_trans.Replace("\n", "\n# ").ReplaceLineEndings()); - } - else - { - newConfig.AppendLine(line); - } - } - - bool needUpdate = true; - byte[] newConfigByte = Encoding.UTF8.GetBytes(newConfig.ToString()); - if (File.Exists(filepath)) - { - try - { - if (new FileInfo(filepath).Length == newConfigByte.Length) - if (File.ReadAllBytes(filepath).SequenceEqual(newConfigByte)) - needUpdate = false; - } - catch { } - } - - if (needUpdate) - { - bool backupSuccessed = true; - if (backupOldFile && File.Exists(filepath)) - { - string backupFilePath = Path.ChangeExtension(filepath, ".backup.ini"); - try { File.Copy(filepath, backupFilePath, true); } - catch (Exception ex) - { - backupSuccessed = false; - ConsoleIO.WriteLineFormatted("§c" + string.Format(Translations.config_backup_fail, backupFilePath)); - ConsoleIO.WriteLine(ex.Message); - } - } - - if (backupSuccessed) - { - try { File.WriteAllBytes(filepath, newConfigByte); } - catch (Exception ex) - { - ConsoleIO.WriteLineFormatted("§c" + string.Format(Translations.config_write_fail, filepath)); - ConsoleIO.WriteLine(ex.Message); - } - } - } - } - - private static string RemoveLegacyAuthServerSection(string tomlString) - { - const string legacySection = "[Main.General.AuthServer]"; - int sectionStart = tomlString.IndexOf(legacySection, StringComparison.Ordinal); - if (sectionStart < 0) - return tomlString; - - int nextSection = tomlString.IndexOf("\n[", sectionStart + legacySection.Length, StringComparison.Ordinal); - return nextSection < 0 - ? tomlString[..sectionStart] - : tomlString.Remove(sectionStart, nextSection - sectionStart + 1); - } - - /// - /// Load settings from the command line - /// - /// Command-line arguments - /// Thrown on invalid arguments - public static void LoadArguments(string[] args) - { - int positionalIndex = 0; - bool skipPassword = false; - - foreach (string argument in args) - { - if (argument.StartsWith("--")) - { - //Load settings as --setting=value and --section.setting=value - if (!argument.Contains('=')) - throw new ArgumentException(string.Format(Translations.error_setting_argument_syntax, argument)); - - string argumentBody = argument[2..]; - int separatorIndex = argumentBody.IndexOf('='); - if (separatorIndex < 1) - throw new ArgumentException(string.Format(Translations.error_setting_argument_syntax, argument)); - - string settingName = argumentBody[..separatorIndex].Trim(); - string settingValue = argumentBody[(separatorIndex + 1)..].Trim(); - - if (!TryApplyArgumentSetting(settingName, settingValue)) - throw new ArgumentException(string.Format(Translations.error_setting_argument_syntax, argument)); - } - else if (argument.StartsWith("-") && argument.Length > 1) - { - //Keep single dash arguments as unsupported for now (future use) - throw new ArgumentException(string.Format(Translations.error_setting_argument_syntax, argument)); - } - else - { - switch (positionalIndex) - { - case 0: - if (Config.Main.Advanced.AccountList.TryGetValue(argument, out AccountInfoConfig accountInfo)) - { - InternalConfig.Account = accountInfo; - skipPassword = true; - } - else - { - InternalConfig.Account.Login = argument; - } - InternalConfig.KeepAccountSettings = true; - break; - case 1: - if (!skipPassword) - InternalConfig.Account.Password = argument; - break; - case 2: - Config.Main.SetServerIP(new MainConfig.ServerInfoConfig(argument), true); - InternalConfig.KeepServerSettings = true; - break; - case 3: - // SingleCommand = argument; - break; - } - positionalIndex++; - } - } - } - - private static readonly string[][] s_argumentSettingSearchPrefixes = - [ - [], - ["Main", "Advanced"], - ["Main", "General"], - ["Main"], - ["Logging"], - ["Console", "General"], - ["Console", "CommandSuggestion"], - ["Console"], - ["MCSettings"], - ["ChatFormat"], - ["ChatBot"], - ["Signature"], - ["Proxy"], - ["AppVar"] - ]; - - private static bool TryApplyArgumentSetting(string settingPath, string settingValue) - { - if (string.IsNullOrWhiteSpace(settingPath)) - return false; - - string[] settingParts = settingPath - .Split('.', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries); - - if (settingParts.Length == 0) - return false; - - HashSet triedPaths = new(StringComparer.Ordinal); - foreach (string[] prefix in s_argumentSettingSearchPrefixes) - { - string[] fullPath = [.. prefix, .. settingParts]; - string pathKey = string.Join('.', fullPath.Select(NormalizeArgumentToken)); - if (!triedPaths.Add(pathKey)) - continue; - - if (!TryResolveArgumentSettingPath(fullPath, out object owner, out MemberInfo member, out List objectPath)) - continue; - - if (!TryConvertArgumentValue(settingValue, GetMemberType(member), out object? convertedValue)) - return false; - - if (!TrySetMemberValue(owner, member, convertedValue)) - return false; - - ApplyOnSettingUpdate(objectPath); - return true; - } - - return false; - } - - private static bool TryResolveArgumentSettingPath(string[] fullPath, out object owner, out MemberInfo member, out List objectPath) - { - owner = Config; - objectPath = [owner]; - member = null!; - - for (int i = 0; i < fullPath.Length; i++) - { - if (!TryGetArgumentMember(owner.GetType(), fullPath[i], out MemberInfo currentMember)) - return false; - - if (i == fullPath.Length - 1) - { - member = currentMember; - return true; - } - - object? nextObject = GetMemberValue(owner, currentMember); - if (nextObject is null) - return false; - - owner = nextObject; - objectPath.Add(owner); - } - - return false; - } - - private static bool TryGetArgumentMember(Type ownerType, string token, out MemberInfo member) - { - ArgumentNullException.ThrowIfNull(ownerType); - - string normalizedToken = NormalizeArgumentToken(token); - BindingFlags flags = BindingFlags.Instance | BindingFlags.Public; - - foreach (PropertyInfo property in ownerType.GetProperties(flags)) - { - if (!property.CanRead || !property.CanWrite || property.GetIndexParameters().Length > 0) - continue; - - if (NormalizeArgumentToken(property.Name) == normalizedToken) - { - member = property; - return true; - } - } - - foreach (FieldInfo field in ownerType.GetFields(flags)) - { - if (NormalizeArgumentToken(field.Name) == normalizedToken) - { - member = field; - return true; - } - } - - member = null!; - return false; - } - - private static string NormalizeArgumentToken(string token) - { - return ToLowerIfNeed(token.Replace("_", string.Empty, StringComparison.Ordinal) - .Replace("-", string.Empty, StringComparison.Ordinal)); - } - - private static Type GetMemberType(MemberInfo member) - { - return member switch - { - PropertyInfo property => property.PropertyType, - FieldInfo field => field.FieldType, - _ => throw new ArgumentException($"Unsupported member type: {member.MemberType}", nameof(member)) - }; - } - - private static object? GetMemberValue(object owner, MemberInfo member) - { - return member switch - { - PropertyInfo property => property.GetValue(owner), - FieldInfo field => field.GetValue(owner), - _ => null - }; - } - - private static bool TrySetMemberValue(object owner, MemberInfo member, object? value) - { - switch (member) - { - case PropertyInfo property: - property.SetValue(owner, value); - return true; - case FieldInfo field: - field.SetValue(owner, value); - return true; - default: - return false; - } - } - - private static bool TryConvertArgumentValue(string input, Type targetType, out object? converted) - { - Type effectiveType = Nullable.GetUnderlyingType(targetType) ?? targetType; - - if (effectiveType == typeof(string)) - { - converted = input; - return true; - } - - if (effectiveType == typeof(bool)) - { - bool success = bool.TryParse(input, out bool value); - converted = value; - return success; - } - - if (effectiveType.IsEnum) - { - bool success = Enum.TryParse(effectiveType, input, true, out object? value); - converted = value; - return success; - } - - try - { - converted = Convert.ChangeType(input, effectiveType, CultureInfo.InvariantCulture); - return true; - } - catch (InvalidCastException) - { - converted = null; - return false; - } - catch (FormatException) - { - converted = null; - return false; - } - catch (OverflowException) - { - converted = null; - return false; - } - } - - private static void ApplyOnSettingUpdate(List objectPath) - { - HashSet calledObjects = new(ReferenceEqualityComparer.Instance); - - for (int i = objectPath.Count - 1; i >= 0; i--) - { - object target = objectPath[i]; - if (!calledObjects.Add(target)) - continue; - - MethodInfo? onSettingUpdate = target.GetType().GetMethod(nameof(MainConfig.OnSettingUpdate), BindingFlags.Instance | BindingFlags.Public, []); - onSettingUpdate?.Invoke(target, null); - } - } - - public static class HeadCommentHealper - { - public static HeadComment Config = new(); - - [TomlDoNotInlineObject] - public class HeadComment - { - [TomlProperty("Current Version")] - public string CurrentVersion { get; set; } = Program.BuildInfo ?? "Development Build"; - - [TomlProperty("Latest Version")] - public string LatestVersion { get; set; } = "Unknown"; - - public void OnSettingUpdate() - { - CurrentVersion = Program.BuildInfo ?? "Development Build"; - LatestVersion ??= "Unknown"; - } - } - } - - public static class MainConfigHelper - { - public static MainConfig Config = new(); - - [TomlDoNotInlineObject] - public class MainConfig - { - public GeneralConfig General = new(); - - [TomlPrecedingComment("$Main.Advanced$")] - public AdvancedConfig Advanced = new(); - - - [NonSerialized] - public static readonly string[] AvailableLang = - { - "af_za", "ar_sa", "ast_es", "az_az", "ba_ru", "bar", "be_by", "bg_bg", - "br_fr", "brb", "bs_ba", "ca_es", "cs_cz", "cy_gb", "da_dk", "de_at", - "de_ch", "de_de", "el_gr", "en_au", "en_ca", "en_gb", "en_nz", "en_pt", - "en_ud", "en_us", "enp", "enws", "eo_uy", "es_ar", "es_cl", "es_ec", - "es_es", "es_mx", "es_uy", "es_ve", "esan", "et_ee", "eu_es", "fa_ir", - "fi_fi", "fil_ph", "fo_fo", "fr_ca", "fr_fr", "fra_de", "fur_it", "fy_nl", - "ga_ie", "gd_gb", "gl_es", "haw_us", "he_il", "hi_in", "hr_hr", "hu_hu", - "hy_am", "id_id", "ig_ng", "io_en", "is_is", "isv", "it_it", "ja_jp", - "jbo_en", "ka_ge", "kk_kz", "kn_in", "ko_kr", "ksh", "kw_gb", "la_la", - "lb_lu", "li_li", "lmo", "lol_us", "lt_lt", "lv_lv", "lzh", "mk_mk", - "mn_mn", "ms_my", "mt_mt", "nah", "nds_de", "nl_be", "nl_nl", "nn_no", - "no_no", "oc_fr", "ovd", "pl_pl", "pt_br", "pt_pt", "qya_aa", "ro_ro", - "rpr", "ru_ru", "ry_ua", "se_no", "sk_sk", "sl_si", "so_so", "sq_al", - "sr_sp", "sv_se", "sxu", "szl", "ta_in", "th_th", "tl_ph", "tlh_aa", - "tok", "tr_tr", "tt_ru", "uk_ua", "val_es", "vec_it", "vi_vn", "yi_de", - "yo_ng", "zh_cn", "zh_hk", "zh_tw", "zlm_arab" - }; - - /// - /// Load server information in ServerIP and ServerPort variables from a "serverip:port" couple or server alias - /// - /// True if the server IP was valid and loaded, false otherwise - public bool SetServerIP(ServerInfoConfig serverInfo, bool checkAlias) - { - string[] sip = serverInfo.Host.Split(new[] { ":", ":" }, StringSplitOptions.None); - string host = ToLowerIfNeed(sip[0]); - ushort port = 25565; - - if (serverInfo.Port.HasValue) - { - port = serverInfo.Port.Value; - } - else if (sip.Length > 1) - { - try { port = Convert.ToUInt16(sip[1]); } - catch (FormatException) { return false; } - } - - if (host == "localhost" || host.Contains('.')) - { - //Server IP (IP or domain names contains at least a dot) - if (sip.Length == 1 && !serverInfo.Port.HasValue && host.Contains('.') && host.Any(c => char.IsLetter(c)) && - Settings.Config.Main.Advanced.ResolveSrvRecords != ResolveSrvRecordType.no) - //Domain name without port may need Minecraft SRV Record lookup - ProtocolHandler.MinecraftServiceLookup(ref host, ref port); - InternalConfig.ServerIP = host; - InternalConfig.ServerPort = port; - return true; - } - else if (checkAlias && Advanced.ServerList.TryGetValue(sip[0], out ServerInfoConfig serverStr2)) - { - return SetServerIP(serverStr2, false); - } - - return false; - } - - public void OnSettingUpdate() - { - ConsoleIO.EnableTimestamps = Advanced.Timestamps; - - InternalConfig.InteractiveMode = !Advanced.ExitOnFailure; - - General.Account.Login ??= string.Empty; - General.Account.Password ??= string.Empty; - if (!General.MigrateLegacyAuthServer()) - ConsoleIO.WriteLogLine(Translations.config_auth_server_url_invalid); - if (!InternalConfig.KeepAccountSettings) - { - if (Advanced.AccountList.TryGetValue(General.Account.Login, out AccountInfoConfig account)) - InternalConfig.Account = account; - else - InternalConfig.Account = General.Account; - } - - General.Server.Host ??= string.Empty; - - if (Advanced.MessageCooldown < 0) - Advanced.MessageCooldown = 0; - - if (Advanced.MaxChatMessageLength < 0) - Advanced.MaxChatMessageLength = 0; - else if (Advanced.MaxChatMessageLength > 32767) - Advanced.MaxChatMessageLength = 32767; - - if (Advanced.MaxChatMessageLength > 0) - ConsoleIO.WriteLineFormatted("§e[Settings] MaxChatMessageLength is set to " + Advanced.MaxChatMessageLength + ". Setting this incorrectly may cause you to be kicked from the server."); - - if (Advanced.TcpTimeout < 1) - Advanced.TcpTimeout = 1; - - Advanced.ForgeModTranslationPath = Advanced.ForgeModTranslationPath.Trim(); - - if (Advanced.MovementSpeed < 1) - Advanced.MovementSpeed = 1; - - if (!Advanced.LoadMccTranslation) - { - CultureInfo culture = CultureInfo.CreateSpecificCulture("en-US"); - CultureInfo.DefaultThreadCurrentCulture = culture; - CultureInfo.DefaultThreadCurrentUICulture = culture; - Program.ActualCulture = culture; - Thread.CurrentThread.CurrentCulture = culture; - Thread.CurrentThread.CurrentUICulture = culture; - } - - Advanced.Language = Regex.Replace(Advanced.Language, @"[^-^_^\w^*\d]", string.Empty).Replace('-', '_'); - Advanced.Language = ToLowerIfNeed(Advanced.Language); - if (!AvailableLang.Contains(Advanced.Language)) - { - Advanced.Language = GetDefaultGameLanguage(); - ConsoleIO.WriteLogLine("[Settings] " + Translations.config_Main_Advanced_language_invaild); - } - - if (!InternalConfig.KeepServerSettings) - { - if (!string.IsNullOrWhiteSpace(General.Server.Host)) - { - string[] sip = General.Server.Host.Split(new[] { ":", ":" }, StringSplitOptions.None); - General.Server.Host = sip[0]; - InternalConfig.ServerIP = General.Server.Host; - - if (sip.Length > 1) - { - try { General.Server.Port = Convert.ToUInt16(sip[1]); } - catch (FormatException) { } - } - } - - if (General.Server.Port.HasValue) - InternalConfig.ServerPort = General.Server.Port.Value; - else - SetServerIP(General.Server, true); - } - - for (int i = 0; i < Advanced.BotOwners.Count; ++i) - Advanced.BotOwners[i] = ToLowerIfNeed(Advanced.BotOwners[i]); - - if (Advanced.MinTerminalWidth < 1) - Advanced.MinTerminalWidth = 1; - if (Advanced.MinTerminalHeight < 1) - Advanced.MinTerminalHeight = 1; - - if (Advanced.TemporaryFixBadpacket && !Advanced.TerrainAndMovements) - { - Advanced.TerrainAndMovements = true; - ConsoleIO.WriteLineFormatted("§c[Settings]You need to enable TerrainAndMovements before enabling TemporaryFixBadpacket."); - } - } - - [TomlDoNotInlineObject] - public class GeneralConfig - { - [TomlInlineComment("$Main.General.account$")] - public AccountInfoConfig Account = new(string.Empty, string.Empty); - - [TomlInlineComment("$Main.General.login$")] - public ServerInfoConfig Server = new(string.Empty); - - [TomlInlineComment("$Main.General.server_info$")] - public LoginType AccountType = LoginType.microsoft; - - [TomlInlineComment("$Main.General.method$")] - public LoginMethod Method = LoginMethod.mcc; - - [TomlInlineComment("$Main.General.AuthServerUrl$")] - public string AuthServerUrl = string.Empty; - - // Retained only to deserialize pre-URL configs. WriteToFile() removes this legacy section. - [TomlInlineComment("$Main.General.AuthlibServer$")] - public AuthlibServer AuthServer = new(); - - [TomlInlineComment("$Main.General.AuthlibUser$")] - public string AuthUser = ""; - - public bool MigrateLegacyAuthServer() - { - AuthServerUrl ??= string.Empty; - if (TrySetAuthServerUrl(AuthServerUrl)) - return true; - - if (!string.IsNullOrWhiteSpace(AuthServerUrl)) - return false; - - if (!string.IsNullOrWhiteSpace(AuthServer.Host)) - { - string path = AuthServer.AuthlibInjectorAPIPath ?? string.Empty; - if (!path.StartsWith('/')) - path = '/' + path; - - string legacyUrl = $"{(AuthServer.UseHttps ? "https" : "http")}://{AuthServer.Host}:{AuthServer.Port}{path}"; - return TrySetAuthServerUrl(legacyUrl); - } - - return true; - } - - public bool TrySetAuthServerUrl(string url) - { - if (!TryGetNormalizedAuthServerUri(url, out Uri? authServerUri)) - return false; - - AuthServerUrl = authServerUri.AbsoluteUri; - return true; - } - - public bool TryGetAuthServerUri([NotNullWhen(true)] out Uri? authServerUri) - => TryGetNormalizedAuthServerUri(AuthServerUrl, out authServerUri); - - private static bool TryGetNormalizedAuthServerUri(string? url, [NotNullWhen(true)] out Uri? authServerUri) - { - authServerUri = null; - if (!Uri.TryCreate(url?.Trim(), UriKind.Absolute, out Uri? parsedUri) - || (!parsedUri.Scheme.Equals(Uri.UriSchemeHttp, StringComparison.OrdinalIgnoreCase) - && !parsedUri.Scheme.Equals(Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase)) - || string.IsNullOrWhiteSpace(parsedUri.Host) - || !string.IsNullOrEmpty(parsedUri.UserInfo) - || !string.IsNullOrEmpty(parsedUri.Query) - || !string.IsNullOrEmpty(parsedUri.Fragment)) - { - return false; - } - - var builder = new UriBuilder(parsedUri) - { - Path = parsedUri.AbsolutePath.TrimEnd('/') + "/" - }; - authServerUri = builder.Uri; - return true; - } - - public enum LoginType { mojang, microsoft, yggdrasil }; - - public enum LoginMethod { mcc, browser }; - } - - [TomlDoNotInlineObject] - public class AdvancedConfig - { - [TomlInlineComment("$Main.Advanced.enable_sentry$")] - public bool EnableSentry = true; - - [TomlInlineComment("$Main.Advanced.language$")] - public string Language = "en_us"; - - [TomlInlineComment("$Main.Advanced.LoadMccTrans$")] - public bool LoadMccTranslation = true; - - [TomlInlineComment("$Main.Advanced.load_resourcepack_translations$")] - public bool LoadResourcePackTranslations = true; - - [TomlInlineComment("$Main.Advanced.load_forge_mod_translations$")] - public bool LoadForgeModTranslations = false; - - [TomlInlineComment("$Main.Advanced.auto_discover_forge_mod_translation_sources$")] - public bool AutoDiscoverForgeModTranslationSources = true; - - [TomlInlineComment("$Main.Advanced.forge_mod_translation_path$")] - public string ForgeModTranslationPath = ""; - - // [TomlInlineComment("$Main.Advanced.console_title$")] - public string ConsoleTitle = "%username%@%serverip% - Minecraft Console Client"; - - [TomlInlineComment("$Main.Advanced.internal_cmd_char$")] - public InternalCmdCharType InternalCmdChar = InternalCmdCharType.slash; - - [TomlInlineComment("$Main.Advanced.message_cooldown$")] - public double MessageCooldown = 1.0; - - [TomlInlineComment("$Main.Advanced.max_chat_message_length$")] - public int MaxChatMessageLength = 0; - - [TomlInlineComment("$Main.Advanced.bot_owners$")] - public List BotOwners = new() { "Player1", "Player2" }; - - [TomlInlineComment("$Main.Advanced.mc_version$")] - public string MinecraftVersion = "auto"; - - [TomlInlineComment("$Main.Advanced.mc_forge$")] - public ForgeConfigType EnableForge = ForgeConfigType.no; - - [TomlInlineComment("$Main.Advanced.brand_info$")] - public BrandInfoType BrandInfo = BrandInfoType.mcc; - - [TomlInlineComment("$Main.Advanced.chatbot_log_file$")] - public string ChatbotLogFile = ""; - - [TomlInlineComment("$Main.Advanced.private_msgs_cmd_name$")] - public string PrivateMsgsCmdName = "tell"; - - [TomlInlineComment("$Main.Advanced.show_system_messages$")] - public bool ShowSystemMessages = true; - - [TomlInlineComment("$Main.Advanced.show_xpbar_messages$")] - public bool ShowXPBarMessages = true; - - [TomlInlineComment("$Main.Advanced.show_chat_links$")] - public bool ShowChatLinks = true; - - [TomlInlineComment("$Main.Advanced.show_inventory_layout$")] - public bool ShowInventoryLayout = true; - - [TomlInlineComment("$Main.Advanced.show_effect_messages$")] - public bool ShowEffectMessages = true; - - [TomlInlineComment("$Main.Advanced.show_effect_names_in_tui$")] - public bool ShowEffectNamesInTUI = false; - - [TomlInlineComment("$Main.Advanced.show_github_star_reminder$")] - public bool ShowGithubStarReminder = true; - - [TomlInlineComment("$Main.Advanced.terrain_and_movements$")] - public bool TerrainAndMovements = false; - - [TomlInlineComment("$Main.Advanced.move_head_while_walking$")] - public bool MoveHeadWhileWalking = true; - - [TomlInlineComment("$Main.Advanced.movement_speed$")] - public int MovementSpeed = 2; - - [TomlInlineComment("$Main.Advanced.temporary_fix_badpacket$")] - public bool TemporaryFixBadpacket = false; - - [TomlInlineComment("$Main.Advanced.inventory_handling$")] - public bool InventoryHandling = false; - - [TomlInlineComment("$Main.Advanced.entity_handling$")] - public bool EntityHandling = false; - - [TomlInlineComment("$Main.Advanced.session_cache$")] - public CacheType SessionCache = CacheType.disk; - - [TomlInlineComment("$Main.Advanced.profilekey_cache$")] - public CacheType ProfileKeyCache = CacheType.disk; - - [TomlInlineComment("$Main.Advanced.resolve_srv_records$")] - public ResolveSrvRecordType ResolveSrvRecords = ResolveSrvRecordType.fast; - - [TomlPrecedingComment("$Main.Advanced.account_list$")] - public Dictionary AccountList = new() { - { "AccountNikename1", new AccountInfoConfig("playerone@email.com", "thepassword") }, - { "AccountNikename2", new AccountInfoConfig("TestBot", "-") }, - }; - - [TomlPrecedingComment("$Main.Advanced.server_list$")] - public Dictionary ServerList = new() { - { "ServerAlias1", new ServerInfoConfig("mc.awesomeserver.com") }, - { "ServerAlias2", new ServerInfoConfig("192.168.1.27", 12345) }, - }; - - [TomlInlineComment("$Main.Advanced.player_head_icon$")] - public bool PlayerHeadAsIcon = true; - - [TomlInlineComment("$Main.Advanced.exit_on_failure$")] - public bool ExitOnFailure = false; - - [TomlInlineComment("$Main.Advanced.script_cache$")] - public bool CacheScript = true; - - [TomlInlineComment("$Main.Advanced.timestamps$")] - public bool Timestamps = false; - - [TomlInlineComment("$Main.Advanced.auto_respawn$")] - public bool AutoRespawn = false; - - [TomlInlineComment("$Main.Advanced.minecraft_realms$")] - public bool MinecraftRealms = false; - - [TomlInlineComment("$Main.Advanced.timeout$")] - public int TcpTimeout = 30; - - [TomlInlineComment("$Main.Advanced.enable_emoji$")] - public bool EnableEmoji = true; - - [TomlInlineComment("$Main.Advanced.MinTerminalWidth$")] - public int MinTerminalWidth = 16; - - [TomlInlineComment("$Main.Advanced.MinTerminalHeight$")] - public int MinTerminalHeight = 10; - - [TomlInlineComment("$Main.Advanced.ignore_invalid_playername$")] - public bool IgnoreInvalidPlayerName = true; - - /// - /// Load login/password using an account alias - /// - /// True if the account was found and loaded - public bool SetAccount(string accountAlias) - { - if (AccountList.TryGetValue(accountAlias, out AccountInfoConfig accountInfo)) - { - InternalConfig.Account = accountInfo; - return true; - } - else - { - return false; - } - } - - public enum InternalCmdCharType { none, slash, backslash }; - - public enum BrandInfoType { mcc, vanilla, empty }; - - public enum CacheType { none, memory, disk }; - - public enum ResolveSrvRecordType { no, fast, yes }; - - public enum ForgeConfigType { no, auto, force }; - } - - public struct AccountInfoConfig - { - public string Login = string.Empty, Password = string.Empty; - - public AccountInfoConfig() - { - Login = string.Empty; - Password = string.Empty; - } - - public AccountInfoConfig(string Login) - { - this.Login = Login; - this.Password = "-"; - } - - public AccountInfoConfig(string Login, string Password) - { - this.Login = Login; - this.Password = Password; - } - } - - public struct ServerInfoConfig - { - public string Host = string.Empty; - public ushort? Port = null; - - public ServerInfoConfig() - { - Host = string.Empty; - Port = null; - } - - public ServerInfoConfig(string Host) - { - string[] sip = Host.Split(new[] { ":", ":" }, StringSplitOptions.None); - this.Host = sip[0]; - - if (sip.Length > 1) - { - try { this.Port = Convert.ToUInt16(sip[1]); } - catch (FormatException) { } - } - } - - public ServerInfoConfig(string Host, ushort Port) - { - this.Host = Host.Split(new[] { ":", ":" }, StringSplitOptions.None)[0]; - this.Port = Port; - } - } - [TomlDoNotInlineObject] - public class AuthlibServer - { - [NonSerialized] - private string _host = string.Empty; - - [TomlInlineComment("$AuthlibServer.Host$")] - public string Host - { - get => _host; - set - { - string[] split = value.Split(new[] { ":", ":" }, StringSplitOptions.None); - if (split.Length >= 1) - _host = split[0]; - if (split.Length >= 2) - { - try { Port = Convert.ToUInt16(split[1]); } - catch (FormatException) { } - } - } - } - - [TomlInlineComment("$AuthlibServer.Port$")] - public int Port = 443; - - [TomlInlineComment("$AuthlibServer.AuthlibInjectorAPIPath$")] - public string AuthlibInjectorAPIPath = "/api/yggdrasil"; - - [TomlInlineComment("$AuthlibServer.UseHttps$")] - public bool UseHttps = true; - - - } - } - } - - public static class SignatureConfigHelper - { - public static SignatureConfig Config = new(); - - [TomlDoNotInlineObject] - public class SignatureConfig - { - [TomlInlineComment("$Signature.LoginWithSecureProfile$")] - public bool LoginWithSecureProfile = true; - - [TomlInlineComment("$Signature.SignChat$")] - public bool SignChat = true; - - [TomlInlineComment("$Signature.SignMessageInCommand$")] - public bool SignMessageInCommand = true; - - [TomlInlineComment("$Signature.MarkLegallySignedMsg$")] - public bool MarkLegallySignedMsg = true; - - [TomlInlineComment("$Signature.MarkModifiedMsg$")] - public bool MarkModifiedMsg = true; - - [TomlInlineComment("$Signature.MarkIllegallySignedMsg$")] - public bool MarkIllegallySignedMsg = true; - - [TomlInlineComment("$Signature.MarkSystemMessage$")] - public bool MarkSystemMessage = true; - - [TomlInlineComment("$Signature.ShowModifiedChat$")] - public bool ShowModifiedChat = true; - - [TomlInlineComment("$Signature.ShowIllegalSignedChat$")] - public bool ShowIllegalSignedChat = true; - - public void OnSettingUpdate() { } - } - } - - public static class LoggingConfigHealper - { - public static LoggingConfig Config = new(); - - [TomlDoNotInlineObject] - public class LoggingConfig - { - [TomlInlineComment("$Logging.DebugMessages$")] - public bool DebugMessages = false; - - [TomlInlineComment("$Logging.PacketDebugMessages$")] - public bool PacketDebugMessages = false; - - [TomlInlineComment("$Logging.PacketDebugExclusions$")] - public List PacketDebugExclusions = new(); - - [TomlInlineComment("$Logging.ChatMessages$")] - public bool ChatMessages = true; - - [TomlInlineComment("$Logging.InfoMessages$")] - public bool InfoMessages = true; - - [TomlInlineComment("$Logging.WarningMessages$")] - public bool WarningMessages = true; - - [TomlInlineComment("$Logging.ErrorMessages$")] - public bool ErrorMessages = true; - - [TomlInlineComment("$Logging.ChatFilter$")] - public string ChatFilterRegex = @".*"; - - [TomlInlineComment("$Logging.DebugFilter$")] - public string DebugFilterRegex = @".*"; - - [TomlInlineComment("$Logging.FilterMode$")] - public FilterModeEnum FilterMode = FilterModeEnum.disable; - - [TomlInlineComment("$Logging.LogToFile$")] - public bool LogToFile = false; - - [TomlInlineComment("$Logging.LogFile$")] - public string LogFile = @"console-log.txt"; - - [TomlInlineComment("$Logging.PrependTimestamp$")] - public bool PrependTimestamp = false; - - [TomlInlineComment("$Logging.SaveColorCodes$")] - public bool SaveColorCodes = false; - - public void OnSettingUpdate() { } - - public enum FilterModeEnum { disable, blacklist, whitelist } - } - } - - public static class ConsoleConfigHealper - { - public static ConsoleConfig Config = new(); - - [TomlDoNotInlineObject] - public class ConsoleConfig - { - public MainConfig General = new(); - - [TomlPrecedingComment("$Console.CommandSuggestion$")] - public CommandSuggestionConfig CommandSuggestion = new(); - - [TomlPrecedingComment("$Console.Minimap$")] - public MinimapConfig Minimap = new(); - - [TomlPrecedingComment("$Console.TabList$")] - public TabListConfig TabList = new(); - - public void OnSettingUpdate() - { - ConsoleIO.ChatVisible = General.Display_Chat; - - var backend = ConsoleIO.Backend; - if (backend == null) return; - - backend.DisplayUserInput = General.Display_Input; - backend.SetBackreadBufferLimit(General.History_Input_Records); - - if (backend is ClassicConsoleBackend classic) - { - classic.EnableWriterColor = General.ConsoleColorMode != ConsoleColorModeType.disable; - classic.UseVT100ColorCode = General.ConsoleColorMode != ConsoleColorModeType.legacy_4bit; - - if (General.ConsoleColorMode == ConsoleColorModeType.disable) - CommandSuggestion.Enable_Color = false; - - classic.EnableSuggestionColor = CommandSuggestion.Enable_Color; - classic.Enable24bitColor = General.ConsoleColorMode == ConsoleColorModeType.vt100_24bit; - classic.UseBasicArrow = CommandSuggestion.Use_Basic_Arrow; - - CommandSuggestion.Max_Suggestion_Width = - classic.SetMaxSuggestionLength(CommandSuggestion.Max_Suggestion_Width); - CommandSuggestion.Max_Displayed_Suggestions = - classic.SetMaxSuggestionCount(CommandSuggestion.Max_Displayed_Suggestions); - - if (!CheckColorCode(CommandSuggestion.Text_Color)) - { - ConsoleIO.WriteLine(string.Format(Translations.config_commandsuggestion_illegal_color, "CommandSuggestion.TextColor", CommandSuggestion.Text_Color)); - CommandSuggestion.Text_Color = "#f8fafc"; - } - if (!CheckColorCode(CommandSuggestion.Text_Background_Color)) - { - ConsoleIO.WriteLine(string.Format(Translations.config_commandsuggestion_illegal_color, "CommandSuggestion.TextBackgroundColor", CommandSuggestion.Text_Background_Color)); - CommandSuggestion.Text_Background_Color = "#64748b"; - } - if (!CheckColorCode(CommandSuggestion.Highlight_Text_Color)) - { - ConsoleIO.WriteLine(string.Format(Translations.config_commandsuggestion_illegal_color, "CommandSuggestion.HighlightTextColor", CommandSuggestion.Highlight_Text_Color)); - CommandSuggestion.Highlight_Text_Color = "#334155"; - } - if (!CheckColorCode(CommandSuggestion.Highlight_Text_Background_Color)) - { - ConsoleIO.WriteLine(string.Format(Translations.config_commandsuggestion_illegal_color, "CommandSuggestion.HighlightTextBackgroundColor", CommandSuggestion.Highlight_Text_Background_Color)); - CommandSuggestion.Highlight_Text_Background_Color = "#fde047"; - } - if (!CheckColorCode(CommandSuggestion.Tooltip_Color)) - { - ConsoleIO.WriteLine(string.Format(Translations.config_commandsuggestion_illegal_color, "CommandSuggestion.TooltipColor", CommandSuggestion.Tooltip_Color)); - CommandSuggestion.Tooltip_Color = "#7dd3fc"; - } - if (!CheckColorCode(CommandSuggestion.Highlight_Tooltip_Color)) - { - ConsoleIO.WriteLine(string.Format(Translations.config_commandsuggestion_illegal_color, "CommandSuggestion.HighlightTooltipColor", CommandSuggestion.Highlight_Tooltip_Color)); - CommandSuggestion.Highlight_Tooltip_Color = "#3b82f6"; - } - if (!CheckColorCode(CommandSuggestion.Arrow_Symbol_Color)) - { - ConsoleIO.WriteLine(string.Format(Translations.config_commandsuggestion_illegal_color, "CommandSuggestion.ArrowSymbolColor", CommandSuggestion.Arrow_Symbol_Color)); - CommandSuggestion.Arrow_Symbol_Color = "#d1d5db"; - } - - classic.SetSuggestionColors( - CommandSuggestion.Text_Color, CommandSuggestion.Text_Background_Color, - CommandSuggestion.Highlight_Text_Color, CommandSuggestion.Highlight_Text_Background_Color, - CommandSuggestion.Tooltip_Color, CommandSuggestion.Highlight_Tooltip_Color, - CommandSuggestion.Arrow_Symbol_Color); - } - } - - private static bool CheckColorCode(string? input) - { - if (string.IsNullOrWhiteSpace(input)) - return false; - if (input.Length < 6 || input.Length > 7) - return false; - if (input.Length == 6 && input[0] == '#') - return false; - if (input.Length == 7 && input[0] != '#') - return false; - try - { - Convert.ToInt32(input.Length == 7 ? input[1..] : input, 16); - return true; - } - catch - { - return false; - } - } - - [TomlDoNotInlineObject] - public class MainConfig - { - [TomlInlineComment("$Console.General.ConsoleMode$")] - public ConsoleModeType ConsoleMode = ConsoleModeType.classic; - - [TomlInlineComment("$Console.General.ConsoleColorMode$")] - public ConsoleColorModeType ConsoleColorMode = ConsoleColorModeType.vt100_24bit; - - [TomlInlineComment("$Console.General.Display_Icon_Banner$")] - public bool Display_Icon_Banner = true; - - [TomlInlineComment("$Console.General.Display_Input$")] - public bool Display_Input = true; - - [TomlInlineComment("$Console.General.Display_Chat$")] - public bool Display_Chat = true; - - [TomlInlineComment("$Console.General.History_Input_Records$")] - public int History_Input_Records = 32; - - [TomlInlineComment("$Console.General.TUI_Log_Scrollback$")] - public int TUI_Log_Scrollback = 0; - } - - [TomlDoNotInlineObject] - public class CommandSuggestionConfig - { - [TomlInlineComment("$Console.CommandSuggestion.Enable$")] - public bool Enable = true; - - public bool Enable_Color = true; - - [TomlInlineComment("$Console.CommandSuggestion.Use_Basic_Arrow$")] - public bool Use_Basic_Arrow = false; - - public int Max_Suggestion_Width = 30; - - public int Max_Displayed_Suggestions = 10; - - public string Text_Color = "#f8fafc"; - - public string Text_Background_Color = "#64748b"; - - public string Highlight_Text_Color = "#334155"; - - public string Highlight_Text_Background_Color = "#fde047"; - - public string Tooltip_Color = "#7dd3fc"; - - public string Highlight_Tooltip_Color = "#3b82f6"; - - public string Arrow_Symbol_Color = "#d1d5db"; - } - - public enum ConsoleModeType { classic, tui }; - public enum ConsoleColorModeType { disable, legacy_4bit, vt100_4bit, vt100_8bit, vt100_24bit }; - - [TomlDoNotInlineObject] - public class MinimapConfig - { - [TomlInlineComment("$Console.Minimap.Enabled$")] - public bool Enabled = false; - - [TomlInlineComment("$Console.Minimap.Zoom$")] - public int Zoom = Tui.MinimapControl.DefaultZoom; - - [TomlInlineComment("$Console.Minimap.Width$")] - public int Width = Tui.MinimapControl.DefaultWidth; - - [TomlInlineComment("$Console.Minimap.Height$")] - public int Height = Tui.MinimapControl.DefaultHeight; - - [TomlInlineComment("$Console.Minimap.Position$")] - public Tui.MinimapPosition Position = Tui.MinimapPosition.top_right; - - [TomlInlineComment("$Console.Minimap.ShowPlayerNames$")] - public bool ShowPlayerNames = false; - - [TomlInlineComment("$Console.Minimap.ShowHostileNames$")] - public bool ShowHostileNames = false; - - [TomlInlineComment("$Console.Minimap.ShowNeutralNames$")] - public bool ShowNeutralNames = false; - - [TomlInlineComment("$Console.Minimap.ShowPassiveNames$")] - public bool ShowPassiveNames = false; - - [TomlInlineComment("$Console.Minimap.RefreshInterval$")] - public int RefreshInterval = Tui.MinimapControl.DefaultRefreshMs; - - [TomlInlineComment("$Console.Minimap.CaveMode$")] - public Tui.CaveModeOption CaveMode = Tui.CaveModeOption.auto; - - public void OnSettingUpdate() - { - Zoom = Math.Clamp(Zoom, Tui.MinimapControl.MinZoom, Tui.MinimapControl.MaxZoom); - Width = Math.Clamp(Width, 10, 120); - Height = Math.Clamp(Height, 4, 80); - if (Height % 2 != 0) Height++; - RefreshInterval = Math.Clamp(RefreshInterval, - Tui.MinimapControl.MinRefreshMs, Tui.MinimapControl.MaxRefreshMs); - } - } - - [TomlDoNotInlineObject] - public class TabListConfig - { - [TomlInlineComment("$Console.TabList.ShowTeams$")] - public bool ShowTeams = false; - } - } - } - - public static class AppVarConfigHelper - { - public static AppVarConfig Config = new(); - - [TomlDoNotInlineObject] - public class AppVarConfig - { - [TomlPrecedingComment("$AppVars.Variables$")] - private readonly Dictionary VarStirng = new() { - { "your_var", "your_value" }, - { "your var 2", "your value 2" }, - }; - - public void OnSettingUpdate() { } - - - [NonSerialized] - private readonly Dictionary VarObject = new(); - - [NonSerialized] - readonly Lock varLock = new(); - - private static bool TryGetReadOnlyVar(string varName, [NotNullWhen(true)] out object? varData) - { - switch (Settings.ToLowerIfNeed(varName)) - { - case "username": - varData = InternalConfig.Username; - return true; - case "login": - varData = InternalConfig.Account.Login; - return true; - case "serverip": - varData = InternalConfig.ServerIP; - return true; - case "serverport": - varData = InternalConfig.ServerPort; - return true; - case "datetime": - varData = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); - return true; - case "date": - varData = DateTime.Now.ToString("yyyy-MM-dd"); - return true; - case "players": - varData = string.Join(", ", McClient.Instance?.GetOnlinePlayers() ?? []); - return true; - default: - varData = null; - return false; - } - } - - /// - /// Set a custom %variable% which will be available through expandVars() - /// - /// Name of the variable - /// Value of the variable - /// True if the parameters were valid - public bool SetVar(string varName, object varData) - { - varName = Settings.ToLowerIfNeed(new string(varName.TakeWhile(char.IsLetterOrDigit).ToArray())); - if (varName.Length > 0) - { - bool isString = varData.GetType() == typeof(string); - lock (varLock) - { - if (isString) - { - if (VarObject.ContainsKey(varName)) - VarObject.Remove(varName); - VarStirng[varName] = (string)varData; - } - else - { - if (VarStirng.ContainsKey(varName)) - VarStirng.Remove(varName); - VarObject[varName] = varData; - } - } - return true; - } - else - { - return false; - } - } - - /// - /// Get a custom %variable% or null if the variable does not exist - /// - /// Variable name - /// The value or null if the variable does not exists - public object? GetVar(string varName) - { - if (TryGetReadOnlyVar(varName, out object? readOnlyVar)) - return readOnlyVar; - if (VarStirng.TryGetValue(varName, out string? valueString)) - return valueString; - else if (VarObject.TryGetValue(varName, out object? valueObject)) - return valueObject; - else - return null; - } - - /// - /// Get a custom %variable% or null if the variable does not exist - /// - /// Variable name - /// The value or null if the variable does not exists - public bool TryGetVar(string varName, [NotNullWhen(true)] out object? varData) - { - if (TryGetReadOnlyVar(varName, out varData)) - return true; - if (VarStirng.TryGetValue(varName, out string? valueString)) - { - varData = valueString; - return true; - } - else if (VarObject.TryGetValue(varName, out object? valueObject)) - { - varData = valueObject; - return true; - } - else - { - varData = null; - return false; - } - } - - /// - /// Get a dictionary containing variables (names and value) - /// - /// A IDictionary containing a name and a vlaue key pairs of variables - public Dictionary GetVariables() - { - Dictionary res = new(VarObject); - foreach ((string varName, string varData) in VarStirng) - res.Add(varName, varData); - return res; - } - - /// - /// Replace %variables% with their value from global AppVars - /// - /// String to parse - /// Optional local variables overriding global variables - /// Modifier string - public string ExpandVars(string str, Dictionary? localVars = null) - { - StringBuilder result = new(); - for (int i = 0; i < str.Length; i++) - { - if (str[i] == '%') - { - bool varname_ok = false; - StringBuilder var_name = new(); - - for (int j = i + 1; j < str.Length; j++) - { - if (!char.IsLetterOrDigit(str[j]) && str[j] != '_') - { - if (str[j] == '%') - varname_ok = var_name.Length > 0; - break; - } - else var_name.Append(str[j]); - } - - if (varname_ok) - { - string varname = var_name.ToString(); - string varname_lower = Settings.ToLowerIfNeed(varname); - i = i + varname.Length + 1; - - if (TryGetReadOnlyVar(varname_lower, out object? readOnlyVar)) - { - result.Append(readOnlyVar.ToString()); - } - else if (localVars is not null && localVars.ContainsKey(varname_lower)) - { - result.Append(localVars[varname_lower].ToString()); - } - else if (TryGetVar(varname_lower, out object? var_value)) - { - result.Append(var_value.ToString()); - } - else - { - result.Append("%" + varname + '%'); - } - } - else result.Append(str[i]); - } - else result.Append(str[i]); - } - return result.ToString(); - } - } - } - - public static class MCSettingsConfigHealper - { - public static MCSettingsConfig Config = new(); - - [TomlDoNotInlineObject] - public class MCSettingsConfig - { - [TomlInlineComment("$MCSettings.Enabled$")] - public bool Enabled = true; - - [TomlInlineComment("$MCSettings.Locale$")] - public string Locale = "en_US"; - - [TomlInlineComment("$MCSettings.RenderDistance$")] - public byte RenderDistance = 8; - - [TomlInlineComment("$MCSettings.Difficulty$")] - public DifficultyType Difficulty = DifficultyType.peaceful; - - [TomlInlineComment("$MCSettings.ChatMode$")] - public ChatModeType ChatMode = ChatModeType.enabled; - - [TomlInlineComment("$MCSettings.ChatColors$")] - public bool ChatColors = true; - - [TomlInlineComment("$MCSettings.MainHand$")] - public MainHandType MainHand = MainHandType.left; - - public SkinInfo Skin = new(); - - public void OnSettingUpdate() { } - - public enum DifficultyType { peaceful, easy, normal, difficult }; - - public enum ChatModeType { enabled, commands, disabled }; - - public enum MainHandType { left, right }; - - public struct SkinInfo - { - public bool Cape = true, Hat = true, Jacket = false; - public bool Sleeve_Left = false, Sleeve_Right = false; - public bool Pants_Left = false, Pants_Right = false; - - public SkinInfo() { } - - public SkinInfo(bool Cape, bool Hat, bool Jacket, bool Sleeve_Left, bool Sleeve_Right, bool Pants_Left, bool Pants_Right) - { - this.Cape = Cape; - this.Hat = Hat; - this.Jacket = Jacket; - this.Sleeve_Left = Sleeve_Left; - this.Sleeve_Right = Sleeve_Right; - this.Pants_Left = Pants_Left; - this.Pants_Right = Pants_Right; - } - - public byte GetByte() - { - return (byte)( - ((Cape ? 1 : 0) << 0) - | ((Jacket ? 1 : 0) << 1) - | ((Sleeve_Left ? 1 : 0) << 2) - | ((Sleeve_Right ? 1 : 0) << 3) - | ((Pants_Left ? 1 : 0) << 4) - | ((Pants_Right ? 1 : 0) << 5) - | ((Hat ? 1 : 0) << 6) - ); - } - } - } - } - - public static class ChatFormatConfigHelper - { - public static ChatFormatConfig Config = new(); - - [TomlDoNotInlineObject] - public class ChatFormatConfig - { - [TomlInlineComment("$ChatFormat.Builtins$")] - public bool Builtins = true; - - [TomlInlineComment("$ChatFormat.UserDefined$")] - public bool UserDefined = false; - - public string Public = @"^<([a-zA-Z0-9_]+)> (.+)$"; - - public string Private = @"^([a-zA-Z0-9_]+) whispers to you: (.+)$"; - - public string TeleportRequest = @"^([a-zA-Z0-9_]+) has requested (?:to|that you) teleport to (?:you|them)\.$"; - - public void OnSettingUpdate() - { - if (UserDefined) - { - bool checkResult = true; - - try { _ = new Regex(Public); } - catch (ArgumentException) - { - checkResult = false; - ConsoleIO.WriteLineFormatted("§c[Settings]Illegal regular expression: ChatFormat.Public = " + Public); - } - - try { _ = new Regex(Private); } - catch (ArgumentException) - { - checkResult = false; - ConsoleIO.WriteLineFormatted("§c[Settings]Illegal regular expression: ChatFormat.Private = " + Private); - } - - try { _ = new Regex(TeleportRequest); } - catch (ArgumentException) - { - checkResult = false; - ConsoleIO.WriteLineFormatted("§c[Settings]Illegal regular expression: ChatFormat.TeleportRequest = " + TeleportRequest); - } - - if (!checkResult) - { - UserDefined = false; - ConsoleIO.WriteLineFormatted("§c[Settings]ChatFormat: User-defined regular expressions are disabled."); - } - } - } - } - } - - public static class ChatBotConfigHealper - { - public static ChatBotConfig Config = new(); - - [TomlDoNotInlineObject] - public class ChatBotConfig - { - [TomlPrecedingComment("$ChatBot.Alerts$")] - public ChatBots.Alerts.Configs Alerts - { - get { return ChatBots.Alerts.Config; } - set { ChatBots.Alerts.Config = value; ChatBots.Alerts.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.AntiAfk$")] - public ChatBots.AntiAFK.Configs AntiAFK - { - get { return ChatBots.AntiAFK.Config; } - set { ChatBots.AntiAFK.Config = value; ChatBots.AntiAFK.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.AutoAttack$")] - public ChatBots.AutoAttack.Configs AutoAttack - { - get { return ChatBots.AutoAttack.Config; } - set { ChatBots.AutoAttack.Config = value; ChatBots.AutoAttack.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.AutoCraft$")] - public ChatBots.AutoCraft.Configs AutoCraft - { - get { return ChatBots.AutoCraft.Config; } - set { ChatBots.AutoCraft.Config = value; ChatBots.AutoCraft.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.AutoDig$")] - public ChatBots.AutoDig.Configs AutoDig - { - get { return ChatBots.AutoDig.Config; } - set { ChatBots.AutoDig.Config = value; ChatBots.AutoDig.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.AutoDrop$")] - public ChatBots.AutoDrop.Configs AutoDrop - { - get { return ChatBots.AutoDrop.Config; } - set { ChatBots.AutoDrop.Config = value; ChatBots.AutoDrop.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.AutoEat$")] - public ChatBots.AutoEat.Configs AutoEat - { - get { return ChatBots.AutoEat.Config; } - set { ChatBots.AutoEat.Config = value; ChatBots.AutoEat.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.AutoFishing$")] - public ChatBots.AutoFishing.Configs AutoFishing - { - get { return ChatBots.AutoFishing.Config; } - set { ChatBots.AutoFishing.Config = value; ChatBots.AutoFishing.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.AutoRelog$")] - public ChatBots.AutoRelog.Configs AutoRelog - { - get { return ChatBots.AutoRelog.Config; } - set { ChatBots.AutoRelog.Config = value; ChatBots.AutoRelog.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.AutoRespond$")] - public ChatBots.AutoRespond.Configs AutoRespond - { - get { return ChatBots.AutoRespond.Config; } - set { ChatBots.AutoRespond.Config = value; ChatBots.AutoRespond.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.ChatLog$")] - public ChatBots.ChatLog.Configs ChatLog - { - get { return ChatBots.ChatLog.Config; } - set { ChatBots.ChatLog.Config = value; ChatBots.ChatLog.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.DiscordBridge$")] - public ChatBots.DiscordBridge.Configs DiscordBridge - { - get { return ChatBots.DiscordBridge.Config; } - set { ChatBots.DiscordBridge.Config = value; ChatBots.DiscordBridge.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.Farmer$")] - public ChatBots.Farmer.Configs Farmer - { - get { return ChatBots.Farmer.Config; } - set { ChatBots.Farmer.Config = value; ChatBots.Farmer.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.FollowPlayer$")] - public ChatBots.FollowPlayer.Configs FollowPlayer - { - get { return ChatBots.FollowPlayer.Config; } - set { ChatBots.FollowPlayer.Config = value; ChatBots.FollowPlayer.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.HangmanGame$")] - public ChatBots.HangmanGame.Configs HangmanGame - { - get { return ChatBots.HangmanGame.Config; } - set { ChatBots.HangmanGame.Config = value; ChatBots.HangmanGame.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.Mailer$")] - public ChatBots.Mailer.Configs Mailer - { - get { return ChatBots.Mailer.Config; } - set { ChatBots.Mailer.Config = value; ChatBots.Mailer.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.Map$")] - public ChatBots.Map.Configs Map - { - get { return ChatBots.Map.Config; } - set { ChatBots.Map.Config = value; ChatBots.Map.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.PlayerListLogger$")] - public ChatBots.PlayerListLogger.Configs PlayerListLogger - { - get { return ChatBots.PlayerListLogger.Config; } - set { ChatBots.PlayerListLogger.Config = value; ChatBots.PlayerListLogger.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.RemoteControl$")] - public ChatBots.RemoteControl.Configs RemoteControl - { - get { return ChatBots.RemoteControl.Config; } - set { ChatBots.RemoteControl.Config = value; ChatBots.RemoteControl.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.ReplayCapture$")] - public ChatBots.ReplayCapture.Configs ReplayCapture - { - get { return ChatBots.ReplayCapture.Config; } - set { ChatBots.ReplayCapture.Config = value; ChatBots.ReplayCapture.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.ScriptScheduler$")] - public ChatBots.ScriptScheduler.Configs ScriptScheduler - { - get { return ChatBots.ScriptScheduler.Config; } - set { ChatBots.ScriptScheduler.Config = value; ChatBots.ScriptScheduler.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.TelegramBridge$")] - public ChatBots.TelegramBridge.Configs TelegramBridge - { - get { return ChatBots.TelegramBridge.Config; } - set { ChatBots.TelegramBridge.Config = value; ChatBots.TelegramBridge.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.ItemsCollector$")] - public ChatBots.ItemsCollector.Configs ItemsCollector - { - get { return ChatBots.ItemsCollector.Config; } - set - { - ChatBots.ItemsCollector.Config = value; - ChatBots.ItemsCollector.Config.OnSettingUpdate(); - } - } - - [TomlPrecedingComment("$ChatBot.DiscordRpc$")] - public ChatBots.DiscordRpc.Configs DiscordRpc - { - get { return ChatBots.DiscordRpc.Config; } - set { ChatBots.DiscordRpc.Config = value; ChatBots.DiscordRpc.Config.OnSettingUpdate(); } - } - - [TomlPrecedingComment("$ChatBot.McpServer$")] - public ChatBots.McpServer.Configs McpServer - { - get { return ChatBots.McpServer.Config; } - set - { - ChatBots.McpServer.Config = value ?? new ChatBots.McpServer.Configs(); - ChatBots.McpServer.Config.OnSettingUpdate(); - } - } - } - } - - /// - /// Map the system CultureInfo name to a Minecraft game language code. - /// - /// - /// Culture name reference (language-COUNTRY): - /// https://learn.microsoft.com/en-us/previous-versions/commerce-server/ee797784(v=cs.20) - /// Full LCID / language-tag spec (MS-LCID, includes fil-PH, nb-NO, etc.): - /// https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-lcid/70feba9f-294e-491e-b6eb-56532684c37f - /// - public static string GetDefaultGameLanguage() - { - string gameLanguage = "en_us"; - string systemLanguage = string.IsNullOrWhiteSpace(Program.ActualCulture.Name) - ? Program.ActualCulture.Parent.Name - : Program.ActualCulture.Name; - switch (systemLanguage) - { - case "af": - case "af-ZA": - gameLanguage = "af_za"; - break; - case "ar": - case "ar-AE": - case "ar-BH": - case "ar-DZ": - case "ar-EG": - case "ar-IQ": - case "ar-JO": - case "ar-KW": - case "ar-LB": - case "ar-LY": - case "ar-MA": - case "ar-OM": - case "ar-QA": - case "ar-SA": - case "ar-SY": - case "ar-TN": - case "ar-YE": - gameLanguage = "ar_sa"; - break; - case "az": - case "az-Cyrl-AZ": - case "az-Latn-AZ": - gameLanguage = "az_az"; - break; - case "be": - case "be-BY": - gameLanguage = "be_by"; - break; - case "bg": - case "bg-BG": - gameLanguage = "bg_bg"; - break; - case "bs-Latn-BA": - gameLanguage = "bs_ba"; - break; - case "ca": - case "ca-ES": - gameLanguage = "ca_es"; - break; - case "cs": - case "cs-CZ": - gameLanguage = "cs_cz"; - break; - case "cy-GB": - gameLanguage = "cy_gb"; - break; - case "da": - case "da-DK": - gameLanguage = "da_dk"; - break; - case "de": - case "de-DE": - case "de-LI": - case "de-LU": - gameLanguage = "de_de"; - break; - case "de-AT": - gameLanguage = "de_at"; - break; - case "de-CH": - gameLanguage = "de_ch"; - break; - case "dv": - case "dv-MV": - break; - case "el": - case "el-GR": - gameLanguage = "el_gr"; - break; - case "en": - case "en-029": - case "en-BZ": - case "en-IE": - case "en-JM": - case "en-PH": - case "en-TT": - case "en-ZA": - case "en-ZW": - case "en-US": - gameLanguage = "en_us"; - break; - case "en-GB": - gameLanguage = "en_gb"; - break; - case "en-AU": - gameLanguage = "en_au"; - break; - case "en-CA": - gameLanguage = "en_ca"; - break; - case "en-NZ": - gameLanguage = "en_nz"; - break; - case "es": - case "es-BO": - case "es-CO": - case "es-CR": - case "es-DO": - case "es-ES": - case "es-GT": - case "es-HN": - case "es-NI": - case "es-PA": - case "es-PE": - case "es-PR": - case "es-PY": - case "es-SV": - gameLanguage = "es_es"; - break; - case "es-AR": - gameLanguage = "es_ar"; - break; - case "es-CL": - gameLanguage = "es_cl"; - break; - case "es-EC": - gameLanguage = "es_ec"; - break; - case "es-MX": - gameLanguage = "es_mx"; - break; - case "es-UY": - gameLanguage = "es_uy"; - break; - case "es-VE": - gameLanguage = "es_ve"; - break; - case "et": - case "et-EE": - gameLanguage = "et_ee"; - break; - case "eu": - case "eu-ES": - gameLanguage = "eu_es"; - break; - case "fa": - case "fa-IR": - gameLanguage = "fa_ir"; - break; - case "fi": - case "fi-FI": - gameLanguage = "fi_fi"; - break; - case "fil": - case "fil-PH": - gameLanguage = "fil_ph"; - break; - case "tl": - case "tl-PH": - gameLanguage = "tl_ph"; - break; - case "fo": - case "fo-FO": - gameLanguage = "fo_fo"; - break; - case "fr": - case "fr-BE": - case "fr-FR": - case "fr-CH": - case "fr-LU": - case "fr-MC": - gameLanguage = "fr_fr"; - break; - case "fr-CA": - gameLanguage = "fr_ca"; - break; - case "gl": - case "gl-ES": - gameLanguage = "gl_es"; - break; - case "gu": - case "gu-IN": - break; - case "he": - case "he-IL": - gameLanguage = "he_il"; - break; - case "hi": - case "hi-IN": - gameLanguage = "hi_in"; - break; - case "hr": - case "hr-BA": - case "hr-HR": - gameLanguage = "hr_hr"; - break; - case "hu": - case "hu-HU": - gameLanguage = "hu_hu"; - break; - case "hy": - case "hy-AM": - gameLanguage = "hy_am"; - break; - case "id": - case "id-ID": - gameLanguage = "id_id"; - break; - case "is": - case "is-IS": - gameLanguage = "is_is"; - break; - case "it": - case "it-CH": - case "it-IT": - gameLanguage = "it_it"; - break; - case "ja": - case "ja-JP": - gameLanguage = "ja_jp"; - break; - case "ka": - case "ka-GE": - gameLanguage = "ka_ge"; - break; - case "kk": - case "kk-KZ": - gameLanguage = "kk_kz"; - break; - case "kn": - case "kn-IN": - gameLanguage = "kn_in"; - break; - case "kok": - case "kok-IN": - break; - case "ko": - case "ko-KR": - gameLanguage = "ko_kr"; - break; - case "ky": - case "ky-KG": - break; - case "lt": - case "lt-LT": - gameLanguage = "lt_lt"; - break; - case "lv": - case "lv-LV": - gameLanguage = "lv_lv"; - break; - case "mi-NZ": - break; - case "mk": - case "mk-MK": - gameLanguage = "mk_mk"; - break; - case "mn": - case "mn-MN": - gameLanguage = "mn_mn"; - break; - case "mr": - case "mr-IN": - break; - case "ms": - case "ms-BN": - case "ms-MY": - gameLanguage = "ms_my"; - break; - case "mt-MT": - gameLanguage = "mt_mt"; - break; - case "nb-NO": - gameLanguage = "no_no"; - break; - case "nl": - case "nl-NL": - gameLanguage = "nl_nl"; - break; - case "nl-BE": - gameLanguage = "nl_be"; - break; - case "nn-NO": - gameLanguage = "nn_no"; - break; - case "no": - gameLanguage = "no_no"; - break; - case "ns-ZA": - break; - case "pa": - case "pa-IN": - break; - case "pl": - case "pl-PL": - gameLanguage = "pl_pl"; - break; - case "pt": - case "pt-PT": - gameLanguage = "pt_pt"; - break; - case "pt-BR": - gameLanguage = "pt_br"; - break; - case "quz-BO": - break; - case "quz-EC": - break; - case "quz-PE": - break; - case "ro": - case "ro-RO": - gameLanguage = "ro_ro"; - break; - case "ru": - case "ru-RU": - gameLanguage = "ru_ru"; - break; - case "sa": - case "sa-IN": - break; - case "se-FI": - case "se-NO": - case "se-SE": - gameLanguage = "se_no"; - break; - case "sk": - case "sk-SK": - gameLanguage = "sk_sk"; - break; - case "sl": - case "sl-SI": - gameLanguage = "sl_si"; - break; - case "sma-NO": - break; - case "sma-SE": - break; - case "smj-NO": - break; - case "smj-SE": - break; - case "smn-FI": - break; - case "sms-FI": - break; - case "sq": - case "sq-AL": - gameLanguage = "sq_al"; - break; - case "sr": - case "sr-Cyrl-BA": - case "sr-Cyrl-CS": - case "sr-Latn-BA": - case "sr-Latn-CS": - gameLanguage = "sr_sp"; - break; - case "sv": - case "sv-FI": - case "sv-SE": - gameLanguage = "sv_se"; - break; - case "sw": - case "sw-KE": - break; - case "syr": - case "syr-SY": - break; - case "ta": - case "ta-IN": - gameLanguage = "ta_in"; - break; - case "te": - case "te-IN": - break; - case "th": - case "th-TH": - gameLanguage = "th_th"; - break; - case "tn-ZA": - break; - case "tr": - case "tr-TR": - gameLanguage = "tr_tr"; - break; - case "tt": - case "tt-RU": - gameLanguage = "tt_ru"; - break; - case "uk": - case "uk-UA": - gameLanguage = "uk_ua"; - break; - case "ur": - case "ur-PK": - break; - case "uz": - case "uz-Cyrl-UZ": - case "uz-Latn-UZ": - break; - case "vi": - case "vi-VN": - gameLanguage = "vi_vn"; - break; - case "xh-ZA": - break; - case "zh-Hans": /* CurrentCulture.Parent.Name */ - case "zh": - case "zh-CN": - case "zh-CHS": - case "zh-SG": - gameLanguage = "zh_cn"; - break; - case "zh-Hant": /* CurrentCulture.Parent.Name */ - case "zh-HK": - case "zh-CHT": - case "zh-MO": - gameLanguage = "zh_hk"; - break; - case "zh-TW": - gameLanguage = "zh_tw"; - break; - case "zu-ZA": - break; - } - return gameLanguage; - } - - [MethodImpl(MethodImplOptions.AggressiveInlining | MethodImplOptions.AggressiveOptimization)] - public static string ToLowerIfNeed(string str) - { - const string lookupStringL = "---------------------------------!-#$%&-()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[-]^_`abcdefghijklmnopqrstuvwxyz{|}~-"; - - bool needLower = false; - foreach (Char c in str) - { - if (Char.IsUpper(c)) - { - needLower = true; - break; - } - } - - if (needLower) - { - StringBuilder sb = new(str); - for (int i = 0; i < str.Length; ++i) - if (char.IsUpper(sb[i])) - sb[i] = lookupStringL[sb[i]]; - return sb.ToString(); - } - else - { - return str; - } - } - - public static int DoubleToTick(double time) - { - time = Math.Min(int.MaxValue / (double)ClientTicksPerSecond, time); - return (int)Math.Round(time * ClientTicksPerSecond); - } - } - - public static class InternalCmdCharTypeExtensions - { - public static char ToChar(this InternalCmdCharType type) - { - return type switch - { - InternalCmdCharType.none => ' ', - InternalCmdCharType.slash => '/', - InternalCmdCharType.backslash => '\\', - _ => '/', - }; - } - - public static string ToLogString(this InternalCmdCharType type) - { - return type switch - { - InternalCmdCharType.none => string.Empty, - InternalCmdCharType.slash => @"/", - InternalCmdCharType.backslash => @"\", - _ => @"/", - }; - } - } - - public static class BrandInfoTypeExtensions - { - public static string? ToBrandString(this BrandInfoType info) - { - return info switch - { - BrandInfoType.mcc => "Minecraft-Console-Client/" + Program.Version, - BrandInfoType.vanilla => "vanilla", - BrandInfoType.empty => null, - _ => null, - }; - } - } - - public static class ExceptionExtensions - { - public static string GetFullMessage(this Exception ex) - { - string msg = ex.Message.Replace("+", "->"); - return ex.InnerException is null - ? msg - : msg + "\n --> " + ex.InnerException.GetFullMessage(); - } - } -} diff --git a/MinecraftClient/TabList/TabListFormatter.cs b/MinecraftClient/TabList/TabListFormatter.cs deleted file mode 100644 index 633cc46f62..0000000000 --- a/MinecraftClient/TabList/TabListFormatter.cs +++ /dev/null @@ -1,310 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using MinecraftClient.Mapping; -using MinecraftClient.Scripting; - -namespace MinecraftClient -{ - internal sealed record TabListSnapshot(string Header, string Footer, IReadOnlyList Entries); - - internal sealed record TabListEntry( - Guid Uuid, - string Name, - string DisplayName, - string TeamName, - string TeamDisplayName, - int Gamemode, - int Ping, - int TabListOrder, - bool Listed); - - internal static class TabListFormatter - { - private const int MaxRowsPerColumn = 20; - private const int PingColumnWidth = 11; - private const int ColumnGapWidth = 4; - - public static string FormatTeamMemberName(string playerName, PlayerTeam? team) - { - ArgumentException.ThrowIfNullOrWhiteSpace(playerName); - - if (team is null) - return playerName; - - var sb = new StringBuilder(); - sb.Append(team.Prefix); - - string colorCode = TeamColorToTag(team.Color); - if (!string.IsNullOrEmpty(colorCode)) - sb.Append(colorCode); - - sb.Append(playerName); - sb.Append(team.Suffix); - return sb.ToString(); - } - - public static string Render(TabListSnapshot snapshot, bool includeOverlayHint = false) - { - ArgumentNullException.ThrowIfNull(snapshot); - bool showTeams = Settings.Config.Console.TabList.ShowTeams; - - var lines = new List - { - $"§e{string.Format(Translations.cmd_tab_title, snapshot.Entries.Count)}§r" - }; - - AppendSection(lines, snapshot.Header); - - var listedEntries = snapshot.Entries - .Where(static entry => entry.Listed && !string.IsNullOrWhiteSpace(entry.Name)) - .OrderBy(static entry => entry.TabListOrder) - .ThenBy(static entry => entry.Gamemode == 3 ? 1 : 0) - .ThenBy(static entry => entry.TeamName, StringComparer.OrdinalIgnoreCase) - .ThenBy(static entry => entry.Name, StringComparer.OrdinalIgnoreCase) - .ToList(); - - if (listedEntries.Count == 0) - { - lines.Add($"§7{Translations.cmd_tab_no_players}§r"); - } - else - { - lines.AddRange(BuildTableLines(listedEntries, showTeams)); - } - - AppendSection(lines, snapshot.Footer); - - if (includeOverlayHint) - { - lines.Add(string.Empty); - lines.Add($"§8{Translations.tui_tab_hint}§r"); - } - - return string.Join('\n', lines); - } - - private static void AppendSection(List lines, string text) - { - if (string.IsNullOrWhiteSpace(text)) - return; - - foreach (string line in text.Replace("\r\n", "\n", StringComparison.Ordinal).Replace('\r', '\n').Split('\n')) - { - if (!string.IsNullOrWhiteSpace(line)) - lines.Add(line); - } - } - - private static List BuildTableLines(IReadOnlyList entries, bool showTeams) - { - int columns = 1; - int rows = entries.Count; - while (rows > MaxRowsPerColumn) - { - columns++; - rows = (entries.Count + columns - 1) / columns; - } - - int teamColumnWidth = showTeams - ? Math.Max( - GetVisibleLength(Translations.cmd_tab_column_team), - entries.Max(static entry => GetVisibleLength(GetTeamLabel(entry)))) - : 0; - - string headerRow = BuildRow( - $"§8{Translations.cmd_tab_column_ping}§r", - showTeams ? $"§8{Translations.cmd_tab_column_team}§r" : null, - $"§8{Translations.cmd_tab_column_player}§r", - teamColumnWidth); - - List renderedRows = entries - .Select(entry => BuildRow( - GetPingCell(entry.Ping), - showTeams ? GetTeamLabel(entry) : null, - GetPlayerLabel(entry), - teamColumnWidth)) - .ToList(); - - int[] columnWidths = new int[columns]; - for (int column = 0; column < columns; column++) - { - int width = GetVisibleLength(headerRow); - for (int row = 0; row < rows; row++) - { - int index = row + (column * rows); - if (index >= renderedRows.Count) - break; - - width = Math.Max(width, GetVisibleLength(renderedRows[index])); - } - columnWidths[column] = width; - } - - var lines = new List { CombineColumns(headerRow, rows, columns, columnWidths) }; - for (int row = 0; row < rows; row++) - lines.Add(CombineColumns(renderedRows, row, rows, columns, columnWidths)); - - return lines; - } - - private static string CombineColumns(string headerRow, int rows, int columns, IReadOnlyList columnWidths) - { - var perColumnValues = new string[columns]; - for (int column = 0; column < columns; column++) - perColumnValues[column] = headerRow; - - return CombineColumns(perColumnValues, columnWidths); - } - - private static string CombineColumns(IReadOnlyList renderedRows, int row, int rows, int columns, IReadOnlyList columnWidths) - { - var perColumnValues = new string[columns]; - for (int column = 0; column < columns; column++) - { - int index = row + (column * rows); - perColumnValues[column] = index < renderedRows.Count ? renderedRows[index] : string.Empty; - } - - return CombineColumns(perColumnValues, columnWidths); - } - - private static string CombineColumns(IReadOnlyList parts, IReadOnlyList widths) - { - var sb = new StringBuilder(); - for (int index = 0; index < parts.Count; index++) - { - if (index > 0) - sb.Append(' ', ColumnGapWidth); - - sb.Append(PadFormattedRight(parts[index], widths[index])); - } - return sb.ToString().TrimEnd(); - } - - private static string BuildRow(string pingCell, string? teamCell, string playerCell, int teamColumnWidth) - { - var sb = new StringBuilder(); - sb.Append(PadFormattedRight(pingCell, PingColumnWidth)); - sb.Append(" "); - if (!string.IsNullOrEmpty(teamCell)) - { - sb.Append(PadFormattedRight(teamCell, teamColumnWidth)); - sb.Append(" "); - } - sb.Append(playerCell); - return sb.ToString(); - } - - private static string GetPingCell(int ping) - { - string barColor; - int filledBars; - - if (ping < 0) - { - barColor = "§8"; - filledBars = 0; - } - else if (ping < 150) - { - barColor = "§a"; - filledBars = 5; - } - else if (ping < 300) - { - barColor = "§e"; - filledBars = 4; - } - else if (ping < 600) - { - barColor = "§6"; - filledBars = 3; - } - else if (ping < 1000) - { - barColor = "§c"; - filledBars = 2; - } - else - { - barColor = "§4"; - filledBars = 1; - } - - string numericPing = ping >= 0 ? $"{Math.Min(ping, 9999),4}ms" : " ???ms"; - return $"{barColor}{new string('|', filledBars)}§8{new string('.', 5 - filledBars)}§r {numericPing}"; - } - - private static string GetTeamLabel(TabListEntry entry) - { - if (string.IsNullOrWhiteSpace(entry.TeamName)) - return "§8-§r"; - - if (!string.IsNullOrWhiteSpace(entry.TeamDisplayName)) - return entry.TeamDisplayName; - - if (LooksLikeOpaqueTeamName(entry.TeamName)) - return "§8-§r"; - - return entry.TeamName; - } - - private static string GetPlayerLabel(TabListEntry entry) - { - string label = string.IsNullOrWhiteSpace(entry.DisplayName) - ? entry.Name - : entry.DisplayName; - - if (entry.Gamemode == 3) - return $"§7§o{label}§r"; - - return label; - } - - private static string PadFormattedRight(string text, int totalWidth) - { - int visibleLength = GetVisibleLength(text); - if (visibleLength >= totalWidth) - return text; - - return text + new string(' ', totalWidth - visibleLength); - } - - private static int GetVisibleLength(string text) => ChatBot.GetVerbatim(text).Length; - - private static bool LooksLikeOpaqueTeamName(string text) - { - if (Guid.TryParse(text, out _)) - return true; - - int hyphenCount = text.Count(static ch => ch == '-'); - if (text.Length >= 24 && hyphenCount >= 3) - return true; - - return false; - } - - private static string TeamColorToTag(int color) => color switch - { - 0 => "§0", - 1 => "§1", - 2 => "§2", - 3 => "§3", - 4 => "§4", - 5 => "§5", - 6 => "§6", - 7 => "§7", - 8 => "§8", - 9 => "§9", - 10 => "§a", - 11 => "§b", - 12 => "§c", - 13 => "§d", - 14 => "§e", - 15 => "§f", - _ => string.Empty - }; - } -} diff --git a/MinecraftClient/TaskWithDelay.cs b/MinecraftClient/TaskWithDelay.cs deleted file mode 100644 index 662c317848..0000000000 --- a/MinecraftClient/TaskWithDelay.cs +++ /dev/null @@ -1,42 +0,0 @@ -using System; - -namespace MinecraftClient -{ - /// - /// Holds a task with delay - /// - class TaskWithDelay - { - private readonly Action _task; - private int tickCounter; - private readonly DateTime dateToLaunch; - - public Action Task { get { return _task; } } - - public TaskWithDelay(Action task, int delayTicks) - { - _task = task; - tickCounter = delayTicks; - dateToLaunch = DateTime.MaxValue; - } - - public TaskWithDelay(Action task, TimeSpan delay) - { - _task = task; - tickCounter = int.MaxValue; - dateToLaunch = DateTime.Now + delay; - } - - /// - /// Tick the counter - /// - /// Return true if the task should run now - public bool Tick() - { - tickCounter--; - if (tickCounter <= 0 || dateToLaunch < DateTime.Now) - return true; - return false; - } - } -} diff --git a/MinecraftClient/TaskWithResult.cs b/MinecraftClient/TaskWithResult.cs deleted file mode 100644 index 53aec3aa4f..0000000000 --- a/MinecraftClient/TaskWithResult.cs +++ /dev/null @@ -1,122 +0,0 @@ -using System; -using System.Threading; - -namespace MinecraftClient -{ - /// - /// Holds an asynchronous task with return value - /// - /// Type of the return value - public class TaskWithResult - { - private readonly AutoResetEvent resultEvent = new(false); - private readonly Func task; - private T? result = default; - private Exception? exception = null; - private bool taskRun = false; - private readonly Lock taskRunLock = new(); - - /// - /// Create a new asynchronous task with return value - /// - /// Delegate with return value - public TaskWithResult(Func task) - { - this.task = task; - } - - /// - /// Check whether the task has finished running - /// - public bool HasRun - { - get - { - return taskRun; - } - } - - /// - /// Get the task result (return value of the inner delegate) - /// - /// Thrown if the task is not finished yet - public T Result - { - get - { - if (taskRun) - return result!; - else - throw new InvalidOperationException("Attempting to retrieve the result of an unfinished task"); - } - } - - /// - /// Get the exception thrown by the inner delegate, if any - /// - public Exception? Exception - { - get - { - return exception; - } - } - - /// - /// Execute the task in the current thread and set the property or to the returned value - /// - public void ExecuteSynchronously() - { - // Make sur the task will not run twice - lock (taskRunLock) - { - if (taskRun) - { - throw new InvalidOperationException("Attempting to run a task twice"); - } - } - - // Run the task - try - { - result = task(); - } - catch (Exception e) - { - exception = e; - } - - // Mark task as complete and release wait event - lock (taskRunLock) - { - taskRun = true; - } - resultEvent.Set(); - } - - /// - /// Wait until the task has run from another thread and get the returned value or exception thrown by the task - /// - /// Task result once available - /// Any exception thrown by the task - public T WaitGetResult() - { - // Wait only if the result is not available yet - bool mustWait = false; - lock (taskRunLock) - { - mustWait = !taskRun; - } - if (mustWait) - { - resultEvent.WaitOne(); - } - - // Receive exception from task - if (exception is not null) - throw exception; - - return result!; - } - } -} diff --git a/MinecraftClient/Tui/BookTuiHost.cs b/MinecraftClient/Tui/BookTuiHost.cs deleted file mode 100644 index 5d20b13f2e..0000000000 --- a/MinecraftClient/Tui/BookTuiHost.cs +++ /dev/null @@ -1,383 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Input; -using Avalonia.Interactivity; -using Avalonia.Layout; -using Avalonia.Media; -using Avalonia.Threading; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Tui; - -public static class BookTuiHost -{ - private static volatile bool isRunning; - - public static bool TryOpen(McClient handler, BookHand hand, bool editable) - { - if (ConsoleIO.Backend is not TuiConsoleBackend) - return false; - - Open(handler, hand, editable); - return true; - } - - public static void OpenFromServer(McClient handler, BookHand hand) - { - if (ConsoleIO.Backend is TuiConsoleBackend) - Open(handler, hand, editable: BookContentHelper.IsWritableBook(handler.GetHeldBook(hand))); - } - - private static void Open(McClient handler, BookHand hand, bool editable) - { - Dispatcher.UIThread.Post(() => - { - if (isRunning) - return; - - MainTuiView? view = TuiConsoleBackend.Instance?.GetView(); - if (view is null) - return; - - if (!handler.TryGetHeldBookContent(out BookContent content, hand)) - return; - - isRunning = true; - var bookView = new BookView(handler, content, editable && !content.IsSigned); - view.ShowOverlay(bookView, () => isRunning = false); - }); - } -} - -internal sealed class BookView : UserControl -{ - private readonly McClient handler; - private readonly bool editable; - private readonly List pages; - private readonly TextBlock header; - private readonly TextBlock status; - private readonly TextBlock shortcutTip; - private readonly TextBox pageText; - private readonly TextBox titleText; - private readonly Button previousButton; - private readonly Button nextButton; - private readonly Button insertButton; - private readonly Button deleteButton; - private readonly Button saveButton; - private readonly Button signButton; - private bool bookSigned; - private int pageIndex; - - public BookView(McClient handler, BookContent content, bool editable) - { - this.handler = handler; - this.editable = editable; - bookSigned = content.IsSigned; - pages = content.Pages.ToList(); - if (pages.Count == 0) - pages.Add(string.Empty); - - Focusable = true; - Background = Brushes.Black; - - header = new TextBlock - { - Foreground = Brushes.Yellow, - Margin = new Thickness(1, 0), - TextWrapping = TextWrapping.Wrap - }; - - status = new TextBlock - { - Foreground = Brushes.Gray, - Margin = new Thickness(1, 0), - TextWrapping = TextWrapping.Wrap - }; - - shortcutTip = new TextBlock - { - Foreground = Brushes.DarkGray, - Margin = new Thickness(1, 0), - Text = Translations.tui_book_page_shortcut_tip, - TextWrapping = TextWrapping.Wrap - }; - - pageText = new TextBox - { - AcceptsReturn = true, - TextWrapping = TextWrapping.Wrap, - IsReadOnly = !CanEdit, - Foreground = Brushes.White, - Background = Brushes.Black, - BorderBrush = Brushes.Gray, - MinHeight = 12, - Margin = new Thickness(1) - }; - pageText.TextChanged += (_, _) => - { - if (CanEdit && pageIndex >= 0 && pageIndex < pages.Count) - pages[pageIndex] = pageText.Text ?? string.Empty; - }; - - titleText = new TextBox - { - Watermark = Translations.tui_book_title_watermark, - IsVisible = CanEdit, - Foreground = Brushes.White, - Background = Brushes.Black, - BorderBrush = Brushes.Gray, - Margin = new Thickness(1) - }; - - previousButton = Button(Translations.tui_book_prev, (_, _) => TryMovePage(-1)); - nextButton = Button(Translations.tui_book_next, (_, _) => TryMovePage(1)); - insertButton = Button(Translations.tui_book_insert, (_, _) => InsertPage(), editable); - deleteButton = Button(Translations.tui_book_delete, (_, _) => DeletePage(), editable); - saveButton = Button(Translations.tui_book_save, (_, _) => Save(), editable); - signButton = Button(Translations.tui_book_sign, (_, _) => Sign(), editable); - - var controls = new StackPanel - { - Orientation = Orientation.Horizontal, - Spacing = 1, - Margin = new Thickness(1), - Children = - { - previousButton, - nextButton, - insertButton, - deleteButton, - saveButton, - signButton, - Button(Translations.tui_book_close, (_, _) => Close()) - } - }; - - var panel = new DockPanel - { - Background = Brushes.Black, - Children = - { - DockTo(header, Dock.Top), - DockTo(status, Dock.Bottom), - DockTo(shortcutTip, Dock.Bottom), - DockTo(controls, Dock.Bottom), - DockTo(titleText, Dock.Bottom), - pageText - } - }; - - Content = panel; - AttachedToVisualTree += (_, _) => - { - AddHandler(KeyDownEvent, OnTunnelKeyDown, RoutingStrategies.Tunnel, handledEventsToo: true); - FocusPageText(); - }; - DetachedFromVisualTree += (_, _) => RemoveHandler(KeyDownEvent, OnTunnelKeyDown); - Refresh(); - } - - private bool CanEdit => editable && !bookSigned; - - private void OnTunnelKeyDown(object? sender, KeyEventArgs e) - { - if (e.Key == Key.PageUp) - { - TryMovePage(-1); - e.Handled = true; - return; - } - - if (e.Key == Key.PageDown) - { - TryMovePage(1); - e.Handled = true; - } - } - - private static Control DockTo(Control control, Dock dock) - { - DockPanel.SetDock(control, dock); - return control; - } - - private static Button Button(string text, EventHandler handler, bool enabled = true) - { - var button = new Button - { - Content = text, - IsEnabled = enabled, - Padding = new Thickness(1, 0), - Margin = new Thickness(0) - }; - button.Click += handler; - return button; - } - - private bool TryMovePage(int delta) - { - int targetPageIndex = Math.Clamp(pageIndex + delta, 0, pages.Count - 1); - if (targetPageIndex == pageIndex) - return false; - - pageIndex = targetPageIndex; - Refresh(); - return true; - } - - private void InsertPage() - { - if (!CanEdit) - return; - - pages.Insert(pageIndex + 1, string.Empty); - pageIndex++; - Refresh(); - } - - private void DeletePage() - { - if (!CanEdit) - return; - - if (pages.Count == 1) - pages[0] = string.Empty; - else - { - pages.RemoveAt(pageIndex); - pageIndex = Math.Clamp(pageIndex, 0, pages.Count - 1); - } - Refresh(); - } - - private void Save() - { - if (bookSigned || IsHeldBookSigned()) - { - bookSigned = true; - status.Text = Translations.cmd_book_cannot_edit_signed; - RefreshEditability(); - return; - } - - if (!Validate(out string error)) - { - status.Text = error; - return; - } - - status.Text = handler.SendBookEdit(pages) - ? Translations.tui_book_saved - : Translations.tui_book_save_failed; - } - - private void Sign() - { - if (bookSigned || IsHeldBookSigned()) - { - bookSigned = true; - status.Text = Translations.cmd_book_already_signed; - RefreshEditability(); - return; - } - - string title = (titleText.Text ?? string.Empty).Trim(); - if (!Validate(out string error, title)) - { - status.Text = error; - return; - } - - if (handler.SendBookEdit(pages, title)) - { - bookSigned = true; - status.Text = Translations.tui_book_signed; - RefreshEditability(); - return; - } - - status.Text = IsHeldBookSigned() - ? Translations.cmd_book_already_signed - : Translations.tui_book_save_failed; - } - - private bool Validate(out string error, string? title = null) - { - BookLimits limits = BookLimits.ForProtocol(handler.GetProtocolVersion()); - error = string.Empty; - - if (pages.Count > limits.MaxPages) - { - error = string.Format(Translations.cmd_book_too_many_pages, pages.Count, limits.MaxPages); - return false; - } - - for (int i = 0; i < pages.Count; i++) - { - if (pages[i].Length > limits.MaxPageLength) - { - error = string.Format(Translations.cmd_book_page_too_long, i + 1, pages[i].Length, limits.MaxPageLength); - return false; - } - } - - if (title is not null && (title.Length == 0 || title.Length > limits.MaxTitleLength)) - { - error = string.Format(Translations.cmd_book_title_invalid, limits.MaxTitleLength); - return false; - } - - return true; - } - - private void Close() - { - TuiConsoleBackend.Instance?.GetView()?.HideOverlay(); - } - - private void Refresh() - { - string currentPageText = pages[pageIndex]; - if (!string.Equals(pageText.Text, currentPageText, StringComparison.Ordinal)) - pageText.Text = currentPageText; - - header.Text = string.Format(Translations.tui_book_page_header, pageIndex + 1, pages.Count); - status.Text = CanEdit ? Translations.tui_book_editing : Translations.tui_book_reading; - RefreshEditability(); - FocusPageText(); - } - - private void RefreshEditability() - { - previousButton.IsEnabled = pageIndex > 0; - nextButton.IsEnabled = pageIndex < pages.Count - 1; - insertButton.IsEnabled = CanEdit; - deleteButton.IsEnabled = CanEdit; - saveButton.IsEnabled = CanEdit; - signButton.IsEnabled = CanEdit; - pageText.IsReadOnly = !CanEdit; - titleText.IsEnabled = CanEdit; - titleText.IsVisible = CanEdit; - shortcutTip.Text = CanEdit - ? Translations.tui_book_edit_shortcut_tip - : Translations.tui_book_page_shortcut_tip; - } - - private void FocusPageText() - { - Dispatcher.UIThread.Post(() => - { - pageText.Focus(); - if (CanEdit) - pageText.CaretIndex = pageText.Text?.Length ?? 0; - }, DispatcherPriority.Input); - } - - private bool IsHeldBookSigned() - { - return BookContentHelper.TryRead(handler.GetHeldBook(BookHand.Main), out BookContent content) && content.IsSigned; - } -} diff --git a/MinecraftClient/Tui/BrewingStandView.cs b/MinecraftClient/Tui/BrewingStandView.cs deleted file mode 100644 index 6a00071be0..0000000000 --- a/MinecraftClient/Tui/BrewingStandView.cs +++ /dev/null @@ -1,152 +0,0 @@ -using System.Collections.ObjectModel; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Layout; -using Avalonia.Media; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Tui -{ - public class BrewingStandView : ContainerViewBase - { - private readonly BrewingViewModel _brewVm; - - public BrewingStandView(McClient handler, int windowId) - : base(new BrewingViewModel(handler, windowId)) - { - _brewVm = (BrewingViewModel)_vm; - Initialize(); - } - - protected override int GetTotalSlotRows() - { - return 3 + 3 + 1; - } - - protected override Control BuildContainerSpecificArea() - { - var panel = new StackPanel - { - Spacing = 0, - HorizontalAlignment = HorizontalAlignment.Center, - }; - - var topRow = new StackPanel - { - Orientation = Orientation.Horizontal, - HorizontalAlignment = HorizontalAlignment.Center, - Spacing = 0, - }; - - var fuelCol = new StackPanel - { - VerticalAlignment = VerticalAlignment.Center, - }; - fuelCol.Children.Add(new TextBlock - { - Text = Translations.tui_brewing_fuel, - Foreground = BrEquipLbl, - FontWeight = FontWeight.Bold, - HorizontalAlignment = HorizontalAlignment.Center, - }); - fuelCol.Children.Add(CreateSlotCell(_brewVm.FuelSlot, 0, 0)); - topRow.Children.Add(fuelCol); - - topRow.Children.Add(new Border { Width = 2 }); - - var ingredientCol = new StackPanel - { - VerticalAlignment = VerticalAlignment.Center, - }; - ingredientCol.Children.Add(new TextBlock - { - Text = Translations.tui_brewing_ingredient, - Foreground = BrEquipLbl, - FontWeight = FontWeight.Bold, - HorizontalAlignment = HorizontalAlignment.Center, - }); - ingredientCol.Children.Add(CreateSlotCell(_brewVm.IngredientSlot, 0, 1)); - topRow.Children.Add(ingredientCol); - - panel.Children.Add(topRow); - - panel.Children.Add(new TextBlock - { - Text = "\u25bc", - Foreground = new SolidColorBrush(Color.FromRgb(140, 140, 140)), - HorizontalAlignment = HorizontalAlignment.Center, - }); - - var bottleRow = new StackPanel - { - Orientation = Orientation.Horizontal, - HorizontalAlignment = HorizontalAlignment.Center, - Spacing = 0, - }; - for (int i = 0; i < 3; i++) - { - var bottlePanel = new StackPanel - { - VerticalAlignment = VerticalAlignment.Center, - }; - bottlePanel.Children.Add(new TextBlock - { - Text = string.Format(Translations.tui_brewing_bottle, i + 1), - Foreground = BrEquipLbl, - FontWeight = FontWeight.Bold, - HorizontalAlignment = HorizontalAlignment.Center, - }); - bottlePanel.Children.Add(CreateSlotCell(_brewVm.BottleSlots[i], 1, i)); - bottleRow.Children.Add(bottlePanel); - } - - panel.Children.Add(bottleRow); - - return panel; - } - } - - public class BrewingViewModel : ContainerViewModel - { - public ObservableCollection BottleSlots { get; } = new(); - public SlotViewModel IngredientSlot { get; private set; } = null!; - public SlotViewModel FuelSlot { get; private set; } = null!; - - public BrewingViewModel(McClient handler, int windowId) - : base(handler, windowId, ContainerType.BrewingStand) - { - IngredientSlot = SlotMap[3]; - FuelSlot = SlotMap[4]; - } - - protected override void InitializeSlots() - { - SlotMap.Clear(); - - for (int i = 0; i <= 2; i++) - { - var slot = new SlotViewModel(i); - BottleSlots.Add(slot); - SlotMap[i] = slot; - } - - SlotMap[3] = new SlotViewModel(3); - SlotMap[4] = new SlotViewModel(4); - - for (int i = 5; i <= 31; i++) - { - var slot = new SlotViewModel(i); - MainInventorySlots.Add(slot); - SlotMap[i] = slot; - } - - for (int i = 32; i <= 40; i++) - { - int hotbarIdx = i - 32; - var slot = new SlotViewModel(i, isHotbar: true, hotbarIndex: hotbarIdx); - HotbarSlots.Add(slot); - SlotMap[i] = slot; - } - } - } -} diff --git a/MinecraftClient/Tui/ContainerViewBase.cs b/MinecraftClient/Tui/ContainerViewBase.cs deleted file mode 100644 index 92787f464c..0000000000 --- a/MinecraftClient/Tui/ContainerViewBase.cs +++ /dev/null @@ -1,723 +0,0 @@ -using System; -using System.Collections.ObjectModel; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Controls.ApplicationLifetimes; -using Avalonia.Controls.Primitives; -using Avalonia.Controls.Templates; -using Avalonia.Input; -using Avalonia.Layout; -using Avalonia.Media; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Tui -{ - public abstract class ContainerViewBase : UserControl - { - protected static readonly IBrush BrSlotEmptyA = new SolidColorBrush(Color.FromRgb(40, 40, 40)); - protected static readonly IBrush BrSlotEmptyB = new SolidColorBrush(Color.FromRgb(55, 55, 55)); - protected static readonly IBrush BrSlotFillA = new SolidColorBrush(Color.FromRgb(60, 60, 75)); - protected static readonly IBrush BrSlotFillB = new SolidColorBrush(Color.FromRgb(75, 75, 90)); - protected static readonly IBrush BrSlotHover = new SolidColorBrush(Color.FromRgb(100, 100, 140)); - protected static readonly IBrush BrName = Brushes.White; - protected static readonly IBrush BrCount = Brushes.Yellow; - protected static readonly IBrush BrDim = new SolidColorBrush(Color.FromRgb(80, 80, 80)); - protected static readonly IBrush BrEquipLbl = Brushes.DarkCyan; - protected static readonly IBrush BrInfoHighlight = new SolidColorBrush(Color.FromRgb(40, 40, 60)); - protected static readonly IBrush BrHeldItemBg = new SolidColorBrush(Color.FromRgb(60, 50, 80)); - protected static readonly IBrush BrHeldItemBorder = Brushes.Yellow; - - protected int _slotW; - protected int _slotH; - protected int _nameMaxLen; - protected int _nameLines; - protected int _termW; - - protected readonly ContainerViewModel _vm; - protected TextBlock _titleText = null!; - protected Border _infoDetailBorder = null!; - protected TextBlock _infoDetailText = null!; - protected TextBlock _cursorItemText = null!; - protected TextBlock _helpText = null!; - - protected TextBlock[] _hotbarIndicators = new TextBlock[9]; - protected int _currentHotbarSlot = -1; - - protected Border? _lastHoveredSlotBorder; - - protected Canvas _overlayCanvas = null!; - protected Border _heldItemFloater = null!; - protected TextBlock _heldItemFloaterName = null!; - protected TextBlock _heldItemFloaterCount = null!; - - protected ScrollViewer _chatScrollViewer = null!; - protected ObservableCollection? _chatLines; - protected int _lastTermW; - protected int _lastTermH; - protected bool _chatScrollToBottom = true; - - protected ContainerViewBase(ContainerViewModel vm) - { - _vm = vm; - _currentHotbarSlot = vm.Handler.GetCurrentSlot(); - - _chatLines = TuiConsoleBackend.Instance?.GetView()?.GetRecentLogLines(50) - ?? new ObservableCollection(); - } - - protected void Initialize() - { - RebuildUi(); - } - - protected abstract int GetTotalSlotRows(); - - protected abstract Control BuildContainerSpecificArea(); - - protected virtual void OnContainerDataChanged() { } - - protected virtual void RebuildUi() - { - int termH; - try - { - _termW = System.Console.WindowWidth; - termH = System.Console.WindowHeight; - } - catch - { - _termW = 120; - termH = 40; - } - - _lastTermW = _termW; - _lastTermH = termH; - - int availW = _termW - 26; - _slotW = Math.Clamp(availW / 9, 8, 18); - _nameMaxLen = _slotW; - - int totalRows = GetTotalSlotRows(); - int overhead = 4; - int chatMinH = 1; - _slotH = Math.Clamp((termH - overhead - chatMinH) / totalRows, 2, 5); - _nameLines = _slotH; - - _vm.SetSlotDisplayParams(_nameMaxLen, _nameLines); - - _lastHoveredSlotBorder = null; - - _titleText = new TextBlock - { - FontWeight = FontWeight.Bold, - Foreground = Brushes.Cyan, - HorizontalAlignment = HorizontalAlignment.Center, - }; - - _infoDetailText = new TextBlock - { - TextWrapping = TextWrapping.Wrap, - Foreground = Brushes.White, - }; - - _infoDetailBorder = new Border - { - Background = Brushes.Transparent, - Padding = new Thickness(0), - Child = _infoDetailText, - }; - - _cursorItemText = new TextBlock - { - Foreground = Brushes.Yellow, - FontWeight = FontWeight.Bold, - TextWrapping = TextWrapping.Wrap, - }; - - _helpText = new TextBlock - { - TextWrapping = TextWrapping.Wrap, - Foreground = new SolidColorBrush(Color.FromRgb(140, 140, 140)), - Text = Translations.tui_inventory_controls_help, - }; - - _heldItemFloaterName = new TextBlock - { - Foreground = Brushes.White, - FontWeight = FontWeight.Bold, - TextWrapping = TextWrapping.Wrap, - }; - _heldItemFloaterCount = new TextBlock - { - Foreground = BrCount, - FontWeight = FontWeight.Bold, - }; - _heldItemFloater = new Border - { - Background = BrHeldItemBg, - BorderBrush = BrHeldItemBorder, - BorderThickness = new Thickness(1), - Padding = new Thickness(1, 0), - IsVisible = false, - MaxWidth = 24, - Child = new StackPanel - { - Children = { _heldItemFloaterName, _heldItemFloaterCount }, - }, - }; - - _overlayCanvas = new Canvas { IsHitTestVisible = false }; - _overlayCanvas.Children.Add(_heldItemFloater); - - var chatLines = _chatLines!; - chatLines.CollectionChanged += (_, _) => - { - Avalonia.Threading.Dispatcher.UIThread.Post(() => - { - var sv = _chatScrollViewer; - if (sv.Extent.Height > sv.Viewport.Height) - sv.Offset = new Vector(0, sv.Extent.Height - sv.Viewport.Height); - }, Avalonia.Threading.DispatcherPriority.Background); - }; - var chatItemsControl = new ItemsControl - { - ItemsSource = chatLines, - Focusable = false, - ItemTemplate = new FuncDataTemplate((s, _) => - McColorParser.CreateColoredTextBlock(s ?? "", TextWrapping.Wrap)), - }; - _chatScrollViewer = new ScrollViewer - { - Content = chatItemsControl, - Background = Brushes.Black, - HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled, - VerticalScrollBarVisibility = ScrollBarVisibility.Hidden, - Padding = new Thickness(0), - }; - - _hotbarIndicators = new TextBlock[9]; - - Content = BuildRootLayout(); - UpdateTitle(); - UpdateInfoPanel(); - - _chatScrollToBottom = true; - _chatScrollViewer.ScrollChanged += OnChatScrollChanged; - } - - private void OnChatScrollChanged(object? sender, ScrollChangedEventArgs e) - { - if (!_chatScrollToBottom) return; - var sv = _chatScrollViewer; - if (sv.Extent.Height > sv.Viewport.Height) - { - sv.Offset = new Vector(0, sv.Extent.Height - sv.Viewport.Height); - _chatScrollToBottom = false; - } - } - - protected virtual Control BuildRootLayout() - { - var inventoryArea = BuildMainArea(); - DockPanel.SetDock(_titleText, Dock.Top); - DockPanel.SetDock(inventoryArea, Dock.Top); - - var mainContent = new DockPanel - { - Children = { _titleText, inventoryArea, _chatScrollViewer } - }; - - return new Panel - { - Background = Brushes.Black, - Children = { mainContent, _overlayCanvas } - }; - } - - protected virtual Control BuildMainArea() - { - var infoPanel = BuildInfoPanel(); - DockPanel.SetDock(infoPanel, Dock.Right); - - return new DockPanel - { - Children = { infoPanel, BuildInventoryPanel() } - }; - } - - protected virtual Control BuildInventoryPanel() - { - var root = new StackPanel - { - Spacing = 0, - HorizontalAlignment = HorizontalAlignment.Center, - }; - - root.Children.Add(BuildContainerSpecificArea()); - root.Children.Add(BuildSeparator()); - root.Children.Add(BuildSlotGrid(_vm.MainInventorySlots, 9)); - root.Children.Add(BuildHotbarSection()); - - return new Border - { - BorderThickness = new Thickness(1), - BorderBrush = Brushes.Gray, - Child = root, - }; - } - - protected Control BuildSeparator() - { - return new Border - { - Height = 1, - Background = Brushes.Transparent, - Margin = new Thickness(0, 0, 0, 0), - }; - } - - protected Control BuildInfoPanel() - { - return new Border - { - BorderThickness = new Thickness(1), - BorderBrush = Brushes.Gray, - Padding = new Thickness(1), - Width = 24, - Child = new StackPanel - { - Children = - { - new TextBlock { Text = Translations.tui_inventory_item_info, FontWeight = FontWeight.Bold, Foreground = Brushes.Cyan }, - _infoDetailBorder, - new TextBlock { Text = Translations.tui_inventory_held_item, FontWeight = FontWeight.Bold, Foreground = Brushes.Yellow, Margin = new Thickness(0, 1, 0, 0) }, - _cursorItemText, - new TextBlock { Text = Translations.tui_inventory_controls, FontWeight = FontWeight.Bold, Foreground = Brushes.Green, Margin = new Thickness(0, 1, 0, 0) }, - _helpText, - } - } - }; - } - - protected Control BuildHotbarSection() - { - var panel = new StackPanel { Spacing = 0 }; - - var numberRow = new StackPanel - { - Orientation = Orientation.Horizontal, - HorizontalAlignment = HorizontalAlignment.Center, - }; - for (int i = 0; i < 9; i++) - { - bool active = i == _currentHotbarSlot; - string label = active ? $"{i + 1} \u25bc" : $" {i + 1} "; - - var tb = new TextBlock - { - Text = label, - Width = _slotW, - TextAlignment = TextAlignment.Center, - Foreground = active ? Brushes.LightGreen : Brushes.DarkCyan, - FontWeight = FontWeight.Bold, - }; - _hotbarIndicators[i] = tb; - numberRow.Children.Add(tb); - } - panel.Children.Add(numberRow); - panel.Children.Add(BuildSlotGrid(_vm.HotbarSlots, 9)); - return panel; - } - - protected Control BuildSlotGrid(ObservableCollection slots, int columns) - { - var grid = new Grid(); - int rows = (slots.Count + columns - 1) / columns; - - for (int r = 0; r < rows; r++) - grid.RowDefinitions.Add(new RowDefinition(GridLength.Auto)); - for (int c = 0; c < columns; c++) - grid.ColumnDefinitions.Add(new ColumnDefinition(GridLength.Auto)); - - for (int i = 0; i < slots.Count; i++) - { - int row = i / columns; - int col = i % columns; - var cell = CreateSlotCell(slots[i], row, col); - Grid.SetRow(cell, row); - Grid.SetColumn(cell, col); - grid.Children.Add(cell); - } - - return grid; - } - - protected static IBrush GetSlotBg(bool isEmpty, int row, int col) - { - bool isA = (row + col) % 2 == 0; - return isEmpty - ? (isA ? BrSlotEmptyA : BrSlotEmptyB) - : (isA ? BrSlotFillA : BrSlotFillB); - } - - protected Border CreateSlotCell(SlotViewModel slot, int row = 0, int col = 0) - { - var nameTb = new TextBlock - { - TextWrapping = TextWrapping.Wrap, - Padding = new Thickness(0), - Margin = new Thickness(0), - VerticalAlignment = VerticalAlignment.Top, - }; - - var countTb = new TextBlock - { - Foreground = BrCount, - FontWeight = FontWeight.Bold, - Padding = new Thickness(0), - Margin = new Thickness(0), - HorizontalAlignment = HorizontalAlignment.Right, - VerticalAlignment = VerticalAlignment.Bottom, - }; - - ApplySlotVisual(slot, nameTb, countTb); - - int r = row, c = col; - var border = new Border - { - Width = _slotW, - Height = _slotH, - Background = GetSlotBg(slot.IsEmpty, r, c), - Child = new Panel - { - Children = { nameTb, countTb }, - }, - Tag = (slot, r, c), - }; - - border.PointerPressed += OnSlotPointerPressed; - border.PointerEntered += OnSlotPointerEnter; - border.PointerExited += OnSlotPointerExit; - border.PointerMoved += OnSlotPointerMoved; - - slot.PropertyChanged += (_, _) => - { - ApplySlotVisual(slot, nameTb, countTb); - border.Background = GetSlotBg(slot.IsEmpty, r, c); - }; - - return border; - } - - protected static void ApplySlotVisual(SlotViewModel slot, TextBlock nameTb, TextBlock countTb) - { - if (slot.IsEmpty) - { - nameTb.Text = ""; - nameTb.Foreground = BrDim; - countTb.Text = ""; - } - else - { - nameTb.Text = slot.ItemDisplayText; - nameTb.Foreground = BrName; - countTb.Text = slot.CountDisplay; - } - } - - protected TextBlock MakeLabel(string text) - { - return new TextBlock - { - Text = text, - Foreground = BrEquipLbl, - VerticalAlignment = VerticalAlignment.Center, - Margin = new Thickness(1, 0, 0, 0), - FontWeight = FontWeight.Bold, - }; - } - - #region Pointer / Keyboard interaction - - private void OnSlotPointerPressed(object? sender, PointerPressedEventArgs e) - { - if (sender is not Border border || border.Tag is not (SlotViewModel slot, int, int)) - return; - - SetHover(border, slot); - - var point = e.GetCurrentPoint(border); - bool isShift = (e.KeyModifiers & KeyModifiers.Shift) != 0; - - WindowActionType action; - if (point.Properties.IsRightButtonPressed) - action = isShift ? WindowActionType.ShiftRightClick : WindowActionType.RightClick; - else - action = isShift ? WindowActionType.ShiftClick : WindowActionType.LeftClick; - - _vm.PerformAction(slot.SlotId, action); - UpdateInfoPanel(); - UpdateHeldItemFloater(e); - OnContainerDataChanged(); - e.Handled = true; - } - - private void OnSlotPointerEnter(object? sender, PointerEventArgs e) - { - if (sender is Border b && b.Tag is (SlotViewModel slot, int, int)) - { - SetHover(b, slot); - UpdateHeldItemFloater(e); - } - } - - private void OnSlotPointerMoved(object? sender, PointerEventArgs e) - { - if (sender is Border b && b.Tag is (SlotViewModel slot, int, int)) - { - SetHover(b, slot); - UpdateHeldItemFloater(e); - } - } - - private void OnSlotPointerExit(object? sender, PointerEventArgs e) - { - if (sender is Border b && b.Tag is (SlotViewModel slot, int row, int col)) - b.Background = GetSlotBg(slot.IsEmpty, row, col); - } - - protected void SetHover(Border border, SlotViewModel slot) - { - if (_lastHoveredSlotBorder != null && _lastHoveredSlotBorder != border) - { - if (_lastHoveredSlotBorder.Tag is (SlotViewModel oldSlot, int or, int oc)) - _lastHoveredSlotBorder.Background = GetSlotBg(oldSlot.IsEmpty, or, oc); - } - - _lastHoveredSlotBorder = border; - border.Background = BrSlotHover; - _vm.HoveredSlot = slot; - UpdateInfoPanel(); - } - - protected void UpdateHeldItemFloater(PointerEventArgs e) - { - if (!_vm.HasCursorItem) - { - _heldItemFloater.IsVisible = false; - return; - } - - _heldItemFloaterName.Text = _vm.CursorItemInfo; - _heldItemFloaterCount.Text = ""; - - try - { - var pos = e.GetPosition(_overlayCanvas); - double left = pos.X + 2; - double remainingW = _termW - left - 2; - int maxW = Math.Max(8, (int)remainingW); - _heldItemFloater.MaxWidth = maxW; - Canvas.SetLeft(_heldItemFloater, left); - Canvas.SetTop(_heldItemFloater, pos.Y); - } - catch - { - _heldItemFloater.MaxWidth = 24; - Canvas.SetLeft(_heldItemFloater, 0); - Canvas.SetTop(_heldItemFloater, 0); - } - - _heldItemFloater.IsVisible = true; - } - - protected void UpdateInfoPanel() - { - _infoDetailText.Text = _vm.HoveredSlotDetailText; - - bool hasHoveredItem = _vm.HoveredSlot != null && !_vm.HoveredSlot.IsEmpty; - _infoDetailBorder.Background = hasHoveredItem ? BrInfoHighlight : Brushes.Transparent; - - if (_vm.HasCursorItem) - { - _cursorItemText.Text = _vm.CursorItemInfo; - _cursorItemText.Foreground = Brushes.Yellow; - } - else - { - _cursorItemText.Text = Translations.tui_inventory_cursor_empty; - _cursorItemText.Foreground = BrDim; - _heldItemFloater.IsVisible = false; - } - } - - protected void UpdateTitle() - { - _titleText.Text = _vm.Title; - } - - protected void CloseInventory() - { - if (_vm.WindowId != 0) - _vm.Handler.CloseInventory(_vm.WindowId); - - if (ConsoleIO.Backend is TuiConsoleBackend tuiBackend) - tuiBackend.GetView()?.HideOverlay(); - else - (Application.Current?.ApplicationLifetime as IControlledApplicationLifetime)?.Shutdown(); - } - - protected override void OnKeyDown(KeyEventArgs e) - { - base.OnKeyDown(e); - - switch (e.Key) - { - case Key.Escape: - case Key.E: - CloseInventory(); - e.Handled = true; - break; - - case Key.C: - if ((e.KeyModifiers & KeyModifiers.Shift) != 0 && - _vm.HoveredSlot != null && !_vm.HoveredSlot.IsEmpty) - { - _vm.PerformAction(_vm.HoveredSlot.SlotId, WindowActionType.ShiftClick); - UpdateInfoPanel(); - } - e.Handled = true; - break; - - case Key.Q: - if (_vm.HoveredSlot != null && !_vm.HoveredSlot.IsEmpty) - { - var action = (e.KeyModifiers & KeyModifiers.Control) != 0 - ? WindowActionType.DropItemStack - : WindowActionType.DropItem; - _vm.PerformAction(_vm.HoveredSlot.SlotId, action); - UpdateInfoPanel(); - } - e.Handled = true; - break; - - case Key.R: - _vm.RefreshFromContainer(); - _currentHotbarSlot = _vm.Handler.GetCurrentSlot(); - UpdateHotbarIndicators(); - UpdateInfoPanel(); - OnContainerDataChanged(); - e.Handled = true; - break; - } - } - - protected void UpdateHotbarIndicators() - { - for (int i = 0; i < 9; i++) - { - bool active = i == _currentHotbarSlot; - _hotbarIndicators[i].Text = active ? $"{i + 1} \u25bc" : $" {i + 1} "; - _hotbarIndicators[i].Foreground = active ? Brushes.LightGreen : Brushes.DarkCyan; - } - } - - #endregion - - #region Lifecycle - - protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) - { - base.OnAttachedToVisualTree(e); - Focusable = true; - Focus(); - AddHandler(KeyDownEvent, OnTunnelKeyDown, Avalonia.Interactivity.RoutingStrategies.Tunnel); - SizeChanged += OnViewSizeChanged; - } - - private void OnTunnelKeyDown(object? sender, KeyEventArgs e) - { - if (e.Key == Key.Escape) - { - CloseInventory(); - e.Handled = true; - } - } - - private void OnViewSizeChanged(object? sender, SizeChangedEventArgs e) - { - int newW, newH; - try - { - newW = System.Console.WindowWidth; - newH = System.Console.WindowHeight; - } - catch { return; } - - if (newW == _lastTermW && newH == _lastTermH) return; - - _vm.RefreshFromContainer(); - _currentHotbarSlot = _vm.Handler.GetCurrentSlot(); - RebuildUi(); - Focus(); - } - - protected override void OnGotFocus(GotFocusEventArgs e) - { - base.OnGotFocus(e); - Focusable = true; - } - - #endregion - - public static bool HasTuiSupport(ContainerType type) - { - return type switch - { - ContainerType.PlayerInventory => true, - ContainerType.Generic_9x1 => true, - ContainerType.Generic_9x2 => true, - ContainerType.Generic_9x3 => true, - ContainerType.Generic_9x4 => true, - ContainerType.Generic_9x5 => true, - ContainerType.Generic_9x6 => true, - ContainerType.Generic_3x3 => true, - ContainerType.Crafter => true, - ContainerType.ShulkerBox => true, - ContainerType.Crafting => true, - ContainerType.Furnace => true, - ContainerType.BlastFurnace => true, - ContainerType.Smoker => true, - ContainerType.Enchantment => true, - ContainerType.BrewingStand => true, - ContainerType.Hopper => true, - ContainerType.Grindstone => true, - _ => false, - }; - } - - public static ContainerViewBase CreateView(ContainerType type, McClient handler, int windowId) - { - return type switch - { - ContainerType.PlayerInventory => new PlayerInventoryView(handler, windowId), - ContainerType.Generic_9x3 or ContainerType.ShulkerBox => new GridContainerView(handler, windowId, type, 3, 9), - ContainerType.Generic_9x6 => new GridContainerView(handler, windowId, type, 6, 9), - ContainerType.Generic_3x3 or ContainerType.Crafter - => new GridContainerView(handler, windowId, type, 3, 3), - ContainerType.Generic_9x1 => new GridContainerView(handler, windowId, type, 1, 9), - ContainerType.Generic_9x2 => new GridContainerView(handler, windowId, type, 2, 9), - ContainerType.Generic_9x4 => new GridContainerView(handler, windowId, type, 4, 9), - ContainerType.Generic_9x5 => new GridContainerView(handler, windowId, type, 5, 9), - ContainerType.Crafting => new CraftingView(handler, windowId), - ContainerType.Furnace or ContainerType.BlastFurnace or ContainerType.Smoker - => new FurnaceView(handler, windowId, type), - ContainerType.Enchantment => new EnchantingTableView(handler, windowId), - ContainerType.BrewingStand => new BrewingStandView(handler, windowId), - ContainerType.Hopper => new HopperView(handler, windowId), - ContainerType.Grindstone => new GrindstoneView(handler, windowId), - _ => throw new ArgumentException($"No TUI view for {type}"), - }; - } - } -} diff --git a/MinecraftClient/Tui/ContainerViewModel.cs b/MinecraftClient/Tui/ContainerViewModel.cs deleted file mode 100644 index 1effcdae54..0000000000 --- a/MinecraftClient/Tui/ContainerViewModel.cs +++ /dev/null @@ -1,271 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.ComponentModel; -using System.Linq; -using System.Runtime.CompilerServices; -using System.Text; -using MinecraftClient.Inventory; -using MinecraftClient.Protocol.Handlers.StructuredComponents.Components._1_20_6; - -namespace MinecraftClient.Tui -{ - public class ContainerViewModel : INotifyPropertyChanged - { - private SlotViewModel? _hoveredSlot; - private string _title = ""; - private string _statusText = ""; - private string _cursorItemInfo = ""; - private bool _hasCursorItem; - - public McClient Handler { get; } - public int WindowId { get; } - public ContainerType ContainerType { get; } - - public ObservableCollection ContainerSlots { get; } = new(); - public ObservableCollection MainInventorySlots { get; } = new(); - public ObservableCollection HotbarSlots { get; } = new(); - - public string Title - { - get => _title; - set { _title = value; OnPropertyChanged(); } - } - - public string StatusText - { - get => _statusText; - set { _statusText = value; OnPropertyChanged(); } - } - - public string CursorItemInfo - { - get => _cursorItemInfo; - set { _cursorItemInfo = value; OnPropertyChanged(); } - } - - public bool HasCursorItem - { - get => _hasCursorItem; - set { _hasCursorItem = value; OnPropertyChanged(); } - } - - public SlotViewModel? HoveredSlot - { - get => _hoveredSlot; - set - { - if (_hoveredSlot != null) - _hoveredSlot.IsHovered = false; - _hoveredSlot = value; - if (_hoveredSlot != null) - _hoveredSlot.IsHovered = true; - OnPropertyChanged(); - OnPropertyChanged(nameof(HoveredSlotDetailText)); - } - } - - public string HoveredSlotDetailText - { - get - { - if (_hoveredSlot == null) - return Translations.tui_inventory_hover_hint; - - if (_hoveredSlot.IsEmpty) - return $"Slot #{_hoveredSlot.SlotId}\n{Translations.tui_inventory_slot_empty}"; - - var sb = new StringBuilder(); - sb.AppendLine(_hoveredSlot.ItemTypeName); - sb.AppendLine(string.Format(Translations.tui_inventory_slot_detail, _hoveredSlot.SlotId, _hoveredSlot.ItemCount)); - - var item = _hoveredSlot.RawItem; - if (item != null) - AppendItemExtras(sb, item); - - return sb.ToString().TrimEnd(); - } - } - - protected Dictionary SlotMap { get; } = new(); - - public ContainerViewModel(McClient handler, int windowId, ContainerType containerType) - { - Handler = handler; - WindowId = windowId; - ContainerType = containerType; - - InitializeSlots(); - RefreshFromContainer(); - } - - public void SetSlotDisplayParams(int maxWidth, int maxLines) - { - foreach (var kvp in SlotMap) - { - kvp.Value.NameMaxWidth = maxWidth; - kvp.Value.NameMaxLines = maxLines; - } - RefreshFromContainer(); - } - - protected virtual void InitializeSlots() - { - SlotMap.Clear(); - - int slotCount = ContainerType.SlotCount(); - if (slotCount == 0) return; - - int playerInvStart = slotCount - 36; - - for (int i = 0; i < playerInvStart; i++) - { - var slot = new SlotViewModel(i); - ContainerSlots.Add(slot); - SlotMap[i] = slot; - } - - for (int i = playerInvStart; i < playerInvStart + 27; i++) - { - var slot = new SlotViewModel(i); - MainInventorySlots.Add(slot); - SlotMap[i] = slot; - } - - for (int i = playerInvStart + 27; i < slotCount; i++) - { - int hotbarIdx = i - (playerInvStart + 27); - var slot = new SlotViewModel(i, isHotbar: true, hotbarIndex: hotbarIdx); - HotbarSlots.Add(slot); - SlotMap[i] = slot; - } - } - - public virtual void RefreshFromContainer() - { - Inventory.Container? container = Handler.GetInventory(WindowId); - if (container == null) - { - StatusText = Translations.tui_inventory_container_not_found; - return; - } - - Title = string.Format(Translations.tui_inventory_title, WindowId, container.Title); - - foreach (var kvp in SlotMap) - { - Item? item = container.Items.TryGetValue(kvp.Key, out var it) ? it : null; - kvp.Value.Update(item); - } - - UpdateCursorItem(container); - int itemCount = 0; - foreach (var kvp in container.Items) - { - if (kvp.Key >= 0 && !kvp.Value.IsEmpty) - itemCount++; - } - StatusText = string.Format(Translations.tui_inventory_item_count, itemCount); - - OnPropertyChanged(nameof(HoveredSlotDetailText)); - } - - protected void UpdateCursorItem(Inventory.Container _) - { - var playerInv = Handler.GetInventory(0); - if (playerInv != null && playerInv.Items.TryGetValue(-1, out var cursorItem) && !cursorItem.IsEmpty) - { - CursorItemInfo = FormatItemDetail(cursorItem); - HasCursorItem = true; - } - else - { - CursorItemInfo = ""; - HasCursorItem = false; - } - } - - protected static string FormatItemDetail(Item item) - { - var sb = new StringBuilder(); - sb.AppendLine($"x{item.Count} {item.GetTypeString()}"); - AppendItemExtras(sb, item); - if (sb.Length > 0 && sb[sb.Length - 1] == '\n') - sb.Remove(sb.Length - 1, 1); - return sb.ToString(); - } - - private static void AppendItemExtras(StringBuilder sb, Item item) - { - int damage = item.Damage; - if (damage != 0) - { - int maxDamage = item.Components?.OfType().FirstOrDefault()?.MaxDamage ?? 0; - if (maxDamage > 0) - sb.AppendLine($"{Translations.tui_inventory_durability}: {maxDamage - damage}/{maxDamage}"); - else - sb.AppendLine($"{Translations.cmd_inventory_damage}: {damage}"); - } - - try - { - var enchList = item.EnchantmentList; - if (enchList is not null) - { - bool isFirstEnchantment = true; - foreach (var ench in enchList) - { - string name = EnchantmentMapping.GetEnchantmentName(ench.Type); - string level = EnchantmentMapping.ConvertLevelToRomanNumbers(ench.Level); - if (isFirstEnchantment) - { - isFirstEnchantment = false; - sb.Append($"{name} {level}"); - } - else - { - sb.Append($" | {name} {level}"); - } - } - } - else if (item.NBT is not null && - (item.NBT.TryGetValue("Enchantments", out object? enchantments) || - item.NBT.TryGetValue("StoredEnchantments", out enchantments))) - { - bool isFirstEnchantment = true; - foreach (Dictionary enchantment in (object[])enchantments) - { - short level = (short)enchantment["lvl"]; - string id = ((string)enchantment["id"]).Replace(':', '.'); - string name = Protocol.Message.ChatParser.TranslateString("enchantment." + id) ?? id; - string levelStr = Protocol.Message.ChatParser.TranslateString("enchantment.level." + level) ?? level.ToString(); - if (isFirstEnchantment) - { - isFirstEnchantment = false; - sb.Append($"{name} {levelStr}"); - } - else - { - sb.Append($" | {name} {levelStr}"); - } - } - } - } - catch { } - } - - public bool PerformAction(int slotId, WindowActionType action) - { - bool result = Handler.DoWindowAction(WindowId, slotId, action); - RefreshFromContainer(); - return result; - } - - public event PropertyChangedEventHandler? PropertyChanged; - - protected void OnPropertyChanged([CallerMemberName] string? name = null) - { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); - } - } -} diff --git a/MinecraftClient/Tui/CraftingView.cs b/MinecraftClient/Tui/CraftingView.cs deleted file mode 100644 index dbbfc508e3..0000000000 --- a/MinecraftClient/Tui/CraftingView.cs +++ /dev/null @@ -1,112 +0,0 @@ -using System.Collections.ObjectModel; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Layout; -using Avalonia.Media; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Tui -{ - public class CraftingView : ContainerViewBase - { - private readonly CraftingViewModel _craftVm; - - public CraftingView(McClient handler, int windowId) - : base(new CraftingViewModel(handler, windowId)) - { - _craftVm = (CraftingViewModel)_vm; - Initialize(); - } - - protected override int GetTotalSlotRows() - { - return 3 + 3 + 1; - } - - protected override Control BuildContainerSpecificArea() - { - var row = new StackPanel - { - Orientation = Orientation.Horizontal, - HorizontalAlignment = HorizontalAlignment.Center, - }; - - var gridPanel = new StackPanel { Spacing = 0 }; - gridPanel.Children.Add(new TextBlock - { - Text = Translations.tui_crafting_grid, - Foreground = BrEquipLbl, - FontWeight = FontWeight.Bold, - HorizontalAlignment = HorizontalAlignment.Center, - }); - gridPanel.Children.Add(BuildSlotGrid(_craftVm.CraftingGridSlots, 3)); - row.Children.Add(gridPanel); - - row.Children.Add(new TextBlock - { - Text = " \u2192 ", - Foreground = Brushes.White, - FontWeight = FontWeight.Bold, - VerticalAlignment = VerticalAlignment.Center, - }); - - var outPanel = new StackPanel - { - VerticalAlignment = VerticalAlignment.Center, - }; - outPanel.Children.Add(new TextBlock - { - Text = Translations.tui_inventory_output, - Foreground = BrEquipLbl, - FontWeight = FontWeight.Bold, - HorizontalAlignment = HorizontalAlignment.Center, - }); - outPanel.Children.Add(CreateSlotCell(_craftVm.OutputSlot, 0, 0)); - row.Children.Add(outPanel); - - return row; - } - } - - public class CraftingViewModel : ContainerViewModel - { - public ObservableCollection CraftingGridSlots { get; } = new(); - public SlotViewModel OutputSlot { get; private set; } = null!; - - public CraftingViewModel(McClient handler, int windowId) - : base(handler, windowId, ContainerType.Crafting) - { - OutputSlot = SlotMap[0]; - } - - protected override void InitializeSlots() - { - SlotMap.Clear(); - - var output = new SlotViewModel(0); - SlotMap[0] = output; - - for (int i = 1; i <= 9; i++) - { - var slot = new SlotViewModel(i); - CraftingGridSlots.Add(slot); - SlotMap[i] = slot; - } - - for (int i = 10; i <= 36; i++) - { - var slot = new SlotViewModel(i); - MainInventorySlots.Add(slot); - SlotMap[i] = slot; - } - - for (int i = 37; i <= 45; i++) - { - int hotbarIdx = i - 37; - var slot = new SlotViewModel(i, isHotbar: true, hotbarIndex: hotbarIdx); - HotbarSlots.Add(slot); - SlotMap[i] = slot; - } - } - } -} diff --git a/MinecraftClient/Tui/DialogTuiHost.cs b/MinecraftClient/Tui/DialogTuiHost.cs deleted file mode 100644 index f94370e64e..0000000000 --- a/MinecraftClient/Tui/DialogTuiHost.cs +++ /dev/null @@ -1,449 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Linq; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Input; -using Avalonia.Interactivity; -using Avalonia.Layout; -using Avalonia.Media; -using Avalonia.Threading; -using MinecraftClient.Dialogs; - -namespace MinecraftClient.Tui; - -internal interface IOverlayCloseHandler -{ - bool TryCloseByUser(); -} - -public static class DialogTuiHost -{ - public static bool TryOpen(McClient handler, DialogInstance instance, bool force) - { - if (ConsoleIO.Backend is not TuiConsoleBackend) - return false; - - Dispatcher.UIThread.Post(() => - { - var view = TuiConsoleBackend.Instance?.GetView(); - if (view is null) - return; - - if (view.HasOverlay && view.OverlayContent is not DialogView && !force) - { - handler.Log.Info(Translations.dialog_tui_pending); - return; - } - - view.ShowOverlay(new DialogView(handler, instance)); - }); - - return true; - } - - public static void CloseCurrent() - { - if (ConsoleIO.Backend is not TuiConsoleBackend) - return; - - Dispatcher.UIThread.Post(() => - { - var view = TuiConsoleBackend.Instance?.GetView(); - if (view?.OverlayContent is DialogView) - view.HideOverlay(); - }); - } -} - -internal sealed class DialogView : Border, IOverlayCloseHandler -{ - private static readonly Color AccentColor = Color.FromRgb(80, 180, 255); - private static readonly Color BorderColor = Color.FromRgb(70, 70, 70); - private static readonly Color SectionBg = Color.FromRgb(20, 20, 20); - private static readonly Color InputBg = Color.FromRgb(35, 35, 35); - - private readonly McClient _handler; - private readonly DialogInstance _instance; - private readonly TextBlock _status; - private readonly Dictionary _inputControls = new(StringComparer.Ordinal); - private readonly StackPanel _inputsPanel; - private readonly WrapPanel _buttonsPanel; - - public DialogView(McClient handler, DialogInstance instance) - { - _handler = handler; - _instance = instance; - - BorderBrush = new SolidColorBrush(BorderColor); - BorderThickness = new Thickness(1); - Background = new SolidColorBrush(Color.FromRgb(12, 12, 12)); - Padding = new Thickness(2); - HorizontalAlignment = HorizontalAlignment.Stretch; - VerticalAlignment = VerticalAlignment.Stretch; - Focusable = true; - - _status = new TextBlock - { - Foreground = Brushes.Gray, - TextWrapping = TextWrapping.Wrap, - Margin = new Thickness(0, 1, 0, 0) - }; - - _inputsPanel = new StackPanel { Spacing = 0, Margin = new Thickness(0) }; - _buttonsPanel = new WrapPanel { Orientation = Orientation.Horizontal }; - - Child = BuildContent(); - - AttachedToVisualTree += (_, _) => - { - AddHandler(KeyDownEvent, OnTunnelKeyDown, RoutingStrategies.Tunnel, handledEventsToo: true); - FocusFirstInput(); - Focus(); - }; - DetachedFromVisualTree += (_, _) => RemoveHandler(KeyDownEvent, OnTunnelKeyDown); - } - - public bool TryCloseByUser() - { - if (!_instance.Definition.CanCloseWithEscape && _instance.Definition.CancelAction is null) - { - SetStatus(Translations.dialog_cannot_cancel); - return false; - } - - var result = _handler.Dialogs.Cancel(); - SetStatus(result.Message); - if (result.Success) - CloseIfInactive(); - - return false; - } - - private Control BuildContent() - { - var root = new DockPanel { Margin = new Thickness(0) }; - - var scroll = new ScrollViewer - { - HorizontalScrollBarVisibility = Avalonia.Controls.Primitives.ScrollBarVisibility.Disabled, - VerticalScrollBarVisibility = Avalonia.Controls.Primitives.ScrollBarVisibility.Auto - }; - - var main = new StackPanel { Spacing = 0, Margin = new Thickness(0) }; - - // Title - main.Children.Add(McColorParser.CreateColoredTextBlock(_instance.Definition.DisplayTitle())); - - // Separator - main.Children.Add(new Border - { - Height = 1, - Background = new SolidColorBrush(BorderColor), - Margin = new Thickness(0, 1, 0, 1) - }); - - // Body - foreach (var body in _instance.Definition.Body) - { - if (string.IsNullOrWhiteSpace(body.Text)) - continue; - main.Children.Add(McColorParser.CreateColoredTextBlock(body.Text)); - } - - // Build action buttons - EnsureActionButtons(); - - // Inputs - foreach (var input in _instance.Definition.Inputs) - main.Children.Add(BuildInput(input)); - - // Action buttons - if (_buttonsPanel.Children.Count > 0) - main.Children.Add(_buttonsPanel); - - // Cancel hint - if (_instance.Definition.CancelAction is not null || _instance.Definition.CanCloseWithEscape) - { - main.Children.Add(new TextBlock - { - Text = Translations.dialog_render_cancel_hint, - Foreground = new SolidColorBrush(Color.FromRgb(120, 120, 120)), - TextWrapping = TextWrapping.Wrap - }); - } - - main.Children.Add(new TextBlock - { - Text = Translations.dialog_render_help_hint, - Foreground = new SolidColorBrush(Color.FromRgb(120, 120, 120)), - TextWrapping = TextWrapping.Wrap - }); - - main.Children.Add(_status); - scroll.Content = main; - root.Children.Add(scroll); - - return root; - } - - private void EnsureActionButtons() - { - if (_buttonsPanel.Children.Count > 0) - return; - - foreach (var action in _instance.Definition.Actions) - { - var btn = new Button - { - Content = McColorParser.CreateColoredTextBlock(action.Label), - Padding = new Thickness(1), - BorderThickness = new Thickness(1), - BorderBrush = new SolidColorBrush(Color.FromRgb(60, 60, 60)), - Background = new SolidColorBrush(Color.FromRgb(40, 40, 40)), - Margin = new Thickness(0, 0, 1, 1) - }; - btn.Click += (_, _) => Click(action.Index); - _buttonsPanel.Children.Add(btn); - } - - if (_instance.Definition.CancelAction is not null || _instance.Definition.CanCloseWithEscape) - { - var cancel = new Button - { - Content = McColorParser.CreateColoredTextBlock(Translations.tui_dialog_cancel), - Padding = new Thickness(1), - BorderThickness = new Thickness(1), - BorderBrush = new SolidColorBrush(Color.FromRgb(80, 40, 40)), - Background = new SolidColorBrush(Color.FromRgb(50, 25, 25)) - }; - cancel.Click += (_, _) => TryCloseByUser(); - _buttonsPanel.Children.Add(cancel); - } - } - - private Control BuildInput(DialogInput input) - { - _instance.Values.TryGetValue(input.Key, out var value); - value ??= input.InitialValue; - - var panel = new StackPanel { Spacing = 0, Margin = new Thickness(0) }; - - if (input.LabelVisible && !string.IsNullOrWhiteSpace(input.Label)) - panel.Children.Add(McColorParser.CreateColoredTextBlock(input.Label)); - - Control inner = input.Kind switch - { - DialogInputKind.Boolean => BuildBooleanInput(value, input), - DialogInputKind.SingleOption => BuildOptionInput(input, value), - DialogInputKind.NumberRange => BuildNumberInput(input, value), - _ => BuildTextInput(input, value) - }; - - _inputControls[input.Key] = inner; - - if (input.Kind == DialogInputKind.Boolean) - { - panel.Children.Add(inner); - } - else - { - panel.Children.Add(new Border - { - Background = new SolidColorBrush(InputBg), - BorderBrush = new SolidColorBrush(Color.FromRgb(55, 55, 55)), - BorderThickness = new Thickness(1), - Padding = new Thickness(1), - Child = inner - }); - } - - return panel; - } - - private Control BuildTextInput(DialogInput input, string value) - { - var tb = new TextBox - { - Text = value, - AcceptsReturn = input.Multiline, - TextWrapping = input.Multiline ? TextWrapping.Wrap : TextWrapping.NoWrap, - MaxLength = input.MaxLength, - Foreground = Brushes.White, - Background = new SolidColorBrush(InputBg), - BorderThickness = new Thickness(0), - Padding = new Thickness(0) - }; - - return tb; - } - - private Control BuildBooleanInput(string value, DialogInput input) - { - return new CheckBox - { - IsChecked = value.Equals("true", StringComparison.OrdinalIgnoreCase), - Foreground = Brushes.White, - Padding = new Thickness(0) - }; - } - - private Control BuildOptionInput(DialogInput input, string value) - { - var combo = new ComboBox - { - ItemsSource = input.Options ?? [], - Foreground = Brushes.White, - Background = new SolidColorBrush(InputBg), - BorderThickness = new Thickness(0), - Padding = new Thickness(1, 0) - }; - - combo.SelectedItem = input.Options?.FirstOrDefault(option => option.Id.Equals(value, StringComparison.Ordinal)) - ?? input.Options?.FirstOrDefault(); - - return combo; - } - - private Control BuildNumberInput(DialogInput input, string value) - { - double numValue = double.TryParse(value, NumberStyles.Float, CultureInfo.InvariantCulture, out var parsed) - ? parsed - : input.InitialNumber ?? input.Start; - - double min = Math.Min(input.Start, input.End); - double max = Math.Max(input.Start, input.End); - - var panel = new DockPanel { LastChildFill = true }; - - var slider = new Slider - { - Minimum = min, - Maximum = max, - Value = numValue, - TickFrequency = input.Step ?? 1, - IsSnapToTickEnabled = input.Step is not null, - Foreground = new SolidColorBrush(AccentColor) - }; - - var label = new TextBlock - { - Text = numValue.ToString(CultureInfo.InvariantCulture), - Foreground = Brushes.White, - VerticalAlignment = VerticalAlignment.Center, - Margin = new Thickness(2, 0, 0, 0), - MinWidth = 16 - }; - - slider.PropertyChanged += (_, e) => - { - if (e.Property == Slider.ValueProperty) - label.Text = ((float)slider.Value).ToString(CultureInfo.InvariantCulture); - }; - - DockPanel.SetDock(label, Dock.Right); - panel.Children.Add(slider); - panel.Children.Add(label); - - return panel; - } - - private void Click(int index) - { - if (!StoreInputs()) - return; - - var result = _handler.Dialogs.Click(index); - SetStatus(result.Message); - if (result.Success) - CloseIfInactive(); - } - - private bool StoreInputs() - { - foreach (var input in _instance.Definition.Inputs) - { - if (!_inputControls.TryGetValue(input.Key, out var control)) - continue; - - var value = control switch - { - TextBox textBox => textBox.Text ?? string.Empty, - CheckBox checkBox => checkBox.IsChecked == true ? "true" : "false", - ComboBox comboBox when comboBox.SelectedItem is DialogOption option => option.Id, - Slider slider => NumberToString((float)slider.Value), - _ => input.InitialValue - }; - - var result = _handler.Dialogs.SetInput(input.Key, value); - if (!result.Success) - { - SetStatus(result.Message); - return false; - } - } - - return true; - } - - private void FocusFirstInput() - { - var first = _inputControls.Values.FirstOrDefault(); - if (first is TextBox tb) - { - tb.Focus(); - tb.SelectAll(); - } - else - { - first?.Focus(); - } - } - - private void CloseIfInactive() - { - var current = _handler.Dialogs.Current; - if (current is null) - { - DialogTuiHost.CloseCurrent(); - return; - } - - if (current.Revision != _instance.Revision) - DialogTuiHost.TryOpen(_handler, current, force: true); - } - - private void SetStatus(string text) - { - _status.Text = text; - } - - private void OnTunnelKeyDown(object? sender, KeyEventArgs e) - { - if (e.Key == Key.Escape) - { - TryCloseByUser(); - e.Handled = true; - return; - } - - if (e.Key == Key.Enter) - { - var focused = TopLevel.GetTopLevel(this)?.FocusManager?.GetFocusedElement(); - if (focused is TextBox && _instance.Definition.Actions.Count > 0) - { - Click(_instance.Definition.Actions[0].Index); - e.Handled = true; - } - } - } - - private static string NumberToString(float value) - { - var integer = (int)value; - return integer == value - ? integer.ToString(CultureInfo.InvariantCulture) - : value.ToString(CultureInfo.InvariantCulture); - } -} diff --git a/MinecraftClient/Tui/EnchantingTableView.cs b/MinecraftClient/Tui/EnchantingTableView.cs deleted file mode 100644 index c1386d7acc..0000000000 --- a/MinecraftClient/Tui/EnchantingTableView.cs +++ /dev/null @@ -1,198 +0,0 @@ -using System.Collections.ObjectModel; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Layout; -using Avalonia.Media; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Tui -{ - public class EnchantingTableView : ContainerViewBase - { - private readonly EnchantingViewModel _enchantVm; - private readonly TextBlock[] _enchantNameLabels = new TextBlock[3]; - private readonly TextBlock[] _enchantCostLabels = new TextBlock[3]; - - public EnchantingTableView(McClient handler, int windowId) - : base(new EnchantingViewModel(handler, windowId)) - { - _enchantVm = (EnchantingViewModel)_vm; - Initialize(); - } - - private void RefreshEnchantOptions() - { - var container = _vm.Handler.GetInventory(_vm.WindowId); - if (container == null) return; - - int protocolVersion = _vm.Handler.GetProtocolVersion(); - - for (int i = 0; i < 3; i++) - { - if (_enchantNameLabels[i] == null) continue; - - short levelReq = container.Properties.TryGetValue(i, out var lr) ? lr : (short)0; - short enchantId = container.Properties.TryGetValue(i + 4, out var eid) ? eid : (short)-1; - short enchantLevel = container.Properties.TryGetValue(i + 7, out var el) ? el : (short)0; - - if (levelReq > 0 && enchantId >= 0) - { - try - { - var enchant = EnchantmentMapping.GetEnchantmentById(protocolVersion, enchantId); - string name = EnchantmentMapping.GetEnchantmentName(enchant); - string roman = EnchantmentMapping.ConvertLevelToRomanNumbers(enchantLevel); - _enchantNameLabels[i].Text = $"{name} {roman}"; - _enchantCostLabels[i].Text = $" ({levelReq})"; - } - catch - { - _enchantNameLabels[i].Text = string.Format(Translations.tui_enchanting_option_slot, i + 1); - _enchantCostLabels[i].Text = levelReq > 0 ? $" ({levelReq})" : ""; - } - } - else - { - _enchantNameLabels[i].Text = string.Format(Translations.tui_enchanting_option_slot, i + 1); - _enchantCostLabels[i].Text = ""; - } - } - } - - protected override void OnContainerDataChanged() - { - RefreshEnchantOptions(); - } - - protected override int GetTotalSlotRows() - { - return 3 + 3 + 1; - } - - protected override Control BuildContainerSpecificArea() - { - var panel = new StackPanel - { - Orientation = Orientation.Horizontal, - HorizontalAlignment = HorizontalAlignment.Center, - Spacing = 0, - }; - - var slotsCol = new StackPanel - { - Spacing = 0, - VerticalAlignment = VerticalAlignment.Center, - }; - - slotsCol.Children.Add(new TextBlock - { - Text = Translations.tui_enchanting_item, - Foreground = BrEquipLbl, - FontWeight = FontWeight.Bold, - HorizontalAlignment = HorizontalAlignment.Center, - }); - slotsCol.Children.Add(CreateSlotCell(_enchantVm.ItemSlot, 0, 0)); - - slotsCol.Children.Add(new TextBlock - { - Text = Translations.tui_enchanting_lapis, - Foreground = new SolidColorBrush(Color.FromRgb(60, 80, 200)), - FontWeight = FontWeight.Bold, - HorizontalAlignment = HorizontalAlignment.Center, - }); - slotsCol.Children.Add(CreateSlotCell(_enchantVm.LapisSlot, 1, 0)); - - panel.Children.Add(slotsCol); - - var optionsCol = new StackPanel - { - VerticalAlignment = VerticalAlignment.Center, - Margin = new Thickness(2, 0, 0, 0), - }; - - optionsCol.Children.Add(new TextBlock - { - Text = Translations.tui_enchanting_options, - Foreground = Brushes.Magenta, - FontWeight = FontWeight.Bold, - }); - - int optionWidth = System.Math.Max(_slotW * 4, 30); - - for (int i = 0; i < 3; i++) - { - var nameLabel = new TextBlock - { - Text = string.Format(Translations.tui_enchanting_option_slot, i + 1), - Foreground = new SolidColorBrush(Color.FromRgb(100, 200, 70)), - TextWrapping = TextWrapping.NoWrap, - }; - _enchantNameLabels[i] = nameLabel; - - var costLabel = new TextBlock - { - Foreground = new SolidColorBrush(Color.FromRgb(100, 200, 70)), - FontWeight = FontWeight.Bold, - VerticalAlignment = VerticalAlignment.Center, - }; - _enchantCostLabels[i] = costLabel; - - var content = new DockPanel(); - DockPanel.SetDock(costLabel, Dock.Right); - content.Children.Add(costLabel); - content.Children.Add(nameLabel); - - optionsCol.Children.Add(new Border - { - Background = new SolidColorBrush(Color.FromRgb(55, 50, 40)), - MinWidth = optionWidth, - MinHeight = _slotH, - Padding = new Thickness(1, 0), - Child = content, - }); - } - - RefreshEnchantOptions(); - - panel.Children.Add(optionsCol); - - return panel; - } - } - - public class EnchantingViewModel : ContainerViewModel - { - public SlotViewModel ItemSlot { get; private set; } = null!; - public SlotViewModel LapisSlot { get; private set; } = null!; - - public EnchantingViewModel(McClient handler, int windowId) - : base(handler, windowId, ContainerType.Enchantment) - { - ItemSlot = SlotMap[0]; - LapisSlot = SlotMap[1]; - } - - protected override void InitializeSlots() - { - SlotMap.Clear(); - - SlotMap[0] = new SlotViewModel(0); - SlotMap[1] = new SlotViewModel(1); - - for (int i = 2; i <= 28; i++) - { - var slot = new SlotViewModel(i); - MainInventorySlots.Add(slot); - SlotMap[i] = slot; - } - - for (int i = 29; i <= 37; i++) - { - int hotbarIdx = i - 29; - var slot = new SlotViewModel(i, isHotbar: true, hotbarIndex: hotbarIdx); - HotbarSlots.Add(slot); - SlotMap[i] = slot; - } - } - } -} diff --git a/MinecraftClient/Tui/FurnaceView.cs b/MinecraftClient/Tui/FurnaceView.cs deleted file mode 100644 index cde8054c56..0000000000 --- a/MinecraftClient/Tui/FurnaceView.cs +++ /dev/null @@ -1,133 +0,0 @@ -using System.Collections.ObjectModel; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Layout; -using Avalonia.Media; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Tui -{ - public class FurnaceView : ContainerViewBase - { - private readonly FurnaceViewModel _furnaceVm; - - public FurnaceView(McClient handler, int windowId, ContainerType type) - : base(new FurnaceViewModel(handler, windowId, type)) - { - _furnaceVm = (FurnaceViewModel)_vm; - Initialize(); - } - - protected override int GetTotalSlotRows() - { - return 3 + 3 + 1; - } - - protected override Control BuildContainerSpecificArea() - { - var panel = new StackPanel - { - Orientation = Orientation.Horizontal, - HorizontalAlignment = HorizontalAlignment.Center, - Spacing = 0, - }; - - var leftCol = new StackPanel - { - Spacing = 0, - VerticalAlignment = VerticalAlignment.Center, - }; - - leftCol.Children.Add(new TextBlock - { - Text = Translations.tui_furnace_input, - Foreground = BrEquipLbl, - FontWeight = FontWeight.Bold, - HorizontalAlignment = HorizontalAlignment.Center, - }); - leftCol.Children.Add(CreateSlotCell(_furnaceVm.InputSlot, 0, 0)); - - leftCol.Children.Add(new TextBlock - { - Text = "\u2592\u2592\u2592", - Foreground = new SolidColorBrush(Color.FromRgb(180, 100, 40)), - HorizontalAlignment = HorizontalAlignment.Center, - }); - - leftCol.Children.Add(new TextBlock - { - Text = Translations.tui_furnace_fuel, - Foreground = BrEquipLbl, - FontWeight = FontWeight.Bold, - HorizontalAlignment = HorizontalAlignment.Center, - }); - leftCol.Children.Add(CreateSlotCell(_furnaceVm.FuelSlot, 1, 0)); - - panel.Children.Add(leftCol); - - panel.Children.Add(new TextBlock - { - Text = " \u2192 ", - Foreground = Brushes.White, - FontWeight = FontWeight.Bold, - VerticalAlignment = VerticalAlignment.Center, - }); - - var rightCol = new StackPanel - { - VerticalAlignment = VerticalAlignment.Center, - }; - rightCol.Children.Add(new TextBlock - { - Text = Translations.tui_furnace_output, - Foreground = BrEquipLbl, - FontWeight = FontWeight.Bold, - HorizontalAlignment = HorizontalAlignment.Center, - }); - rightCol.Children.Add(CreateSlotCell(_furnaceVm.OutputSlot, 0, 1)); - - panel.Children.Add(rightCol); - - return panel; - } - } - - public class FurnaceViewModel : ContainerViewModel - { - public SlotViewModel InputSlot { get; private set; } = null!; - public SlotViewModel FuelSlot { get; private set; } = null!; - public SlotViewModel OutputSlot { get; private set; } = null!; - - public FurnaceViewModel(McClient handler, int windowId, ContainerType type) - : base(handler, windowId, type) - { - InputSlot = SlotMap[0]; - FuelSlot = SlotMap[1]; - OutputSlot = SlotMap[2]; - } - - protected override void InitializeSlots() - { - SlotMap.Clear(); - - SlotMap[0] = new SlotViewModel(0); - SlotMap[1] = new SlotViewModel(1); - SlotMap[2] = new SlotViewModel(2); - - for (int i = 3; i <= 29; i++) - { - var slot = new SlotViewModel(i); - MainInventorySlots.Add(slot); - SlotMap[i] = slot; - } - - for (int i = 30; i <= 38; i++) - { - int hotbarIdx = i - 30; - var slot = new SlotViewModel(i, isHotbar: true, hotbarIndex: hotbarIdx); - HotbarSlots.Add(slot); - SlotMap[i] = slot; - } - } - } -} diff --git a/MinecraftClient/Tui/GridContainerView.cs b/MinecraftClient/Tui/GridContainerView.cs deleted file mode 100644 index c2da293beb..0000000000 --- a/MinecraftClient/Tui/GridContainerView.cs +++ /dev/null @@ -1,31 +0,0 @@ -using Avalonia.Controls; -using Avalonia.Layout; -using Avalonia.Media; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Tui -{ - public class GridContainerView : ContainerViewBase - { - private readonly int _gridRows; - private readonly int _gridCols; - - public GridContainerView(McClient handler, int windowId, ContainerType type, int rows, int cols) - : base(new ContainerViewModel(handler, windowId, type)) - { - _gridRows = rows; - _gridCols = cols; - Initialize(); - } - - protected override int GetTotalSlotRows() - { - return _gridRows + 3 + 1; - } - - protected override Control BuildContainerSpecificArea() - { - return BuildSlotGrid(_vm.ContainerSlots, _gridCols); - } - } -} diff --git a/MinecraftClient/Tui/GrindstoneView.cs b/MinecraftClient/Tui/GrindstoneView.cs deleted file mode 100644 index 04a283a698..0000000000 --- a/MinecraftClient/Tui/GrindstoneView.cs +++ /dev/null @@ -1,126 +0,0 @@ -using System.Collections.ObjectModel; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Layout; -using Avalonia.Media; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Tui -{ - public class GrindstoneView : ContainerViewBase - { - private readonly GrindstoneViewModel _grindVm; - - public GrindstoneView(McClient handler, int windowId) - : base(new GrindstoneViewModel(handler, windowId)) - { - _grindVm = (GrindstoneViewModel)_vm; - Initialize(); - } - - protected override int GetTotalSlotRows() - { - return 2 + 3 + 1; - } - - protected override Control BuildContainerSpecificArea() - { - var row = new StackPanel - { - Orientation = Orientation.Horizontal, - HorizontalAlignment = HorizontalAlignment.Center, - Spacing = 0, - }; - - var inputCol = new StackPanel - { - Spacing = 0, - VerticalAlignment = VerticalAlignment.Center, - }; - - inputCol.Children.Add(new TextBlock - { - Text = Translations.tui_grindstone_input1, - Foreground = BrEquipLbl, - FontWeight = FontWeight.Bold, - HorizontalAlignment = HorizontalAlignment.Center, - }); - inputCol.Children.Add(CreateSlotCell(_grindVm.Input1Slot, 0, 0)); - - inputCol.Children.Add(new TextBlock - { - Text = Translations.tui_grindstone_input2, - Foreground = BrEquipLbl, - FontWeight = FontWeight.Bold, - HorizontalAlignment = HorizontalAlignment.Center, - }); - inputCol.Children.Add(CreateSlotCell(_grindVm.Input2Slot, 1, 0)); - - row.Children.Add(inputCol); - - row.Children.Add(new TextBlock - { - Text = "=>", - Foreground = Brushes.White, - FontWeight = FontWeight.Bold, - VerticalAlignment = VerticalAlignment.Center, - Padding = new Thickness(1, 0), - }); - - var outCol = new StackPanel - { - VerticalAlignment = VerticalAlignment.Center, - }; - outCol.Children.Add(new TextBlock - { - Text = Translations.tui_inventory_output, - Foreground = BrEquipLbl, - FontWeight = FontWeight.Bold, - HorizontalAlignment = HorizontalAlignment.Center, - }); - outCol.Children.Add(CreateSlotCell(_grindVm.OutputSlot, 0, 1)); - row.Children.Add(outCol); - - return row; - } - } - - public class GrindstoneViewModel : ContainerViewModel - { - public SlotViewModel Input1Slot { get; private set; } = null!; - public SlotViewModel Input2Slot { get; private set; } = null!; - public SlotViewModel OutputSlot { get; private set; } = null!; - - public GrindstoneViewModel(McClient handler, int windowId) - : base(handler, windowId, ContainerType.Grindstone) - { - Input1Slot = SlotMap[0]; - Input2Slot = SlotMap[1]; - OutputSlot = SlotMap[2]; - } - - protected override void InitializeSlots() - { - SlotMap.Clear(); - - SlotMap[0] = new SlotViewModel(0); - SlotMap[1] = new SlotViewModel(1); - SlotMap[2] = new SlotViewModel(2); - - for (int i = 3; i <= 29; i++) - { - var slot = new SlotViewModel(i); - MainInventorySlots.Add(slot); - SlotMap[i] = slot; - } - - for (int i = 30; i <= 38; i++) - { - int hotbarIdx = i - 30; - var slot = new SlotViewModel(i, isHotbar: true, hotbarIndex: hotbarIdx); - HotbarSlots.Add(slot); - SlotMap[i] = slot; - } - } - } -} diff --git a/MinecraftClient/Tui/HopperView.cs b/MinecraftClient/Tui/HopperView.cs deleted file mode 100644 index bb69b2ae49..0000000000 --- a/MinecraftClient/Tui/HopperView.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Avalonia.Controls; -using Avalonia.Layout; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Tui -{ - public class HopperView : ContainerViewBase - { - public HopperView(McClient handler, int windowId) - : base(new ContainerViewModel(handler, windowId, ContainerType.Hopper)) - { - Initialize(); - } - - protected override int GetTotalSlotRows() - { - return 1 + 3 + 1; - } - - protected override Control BuildContainerSpecificArea() - { - var grid = BuildSlotGrid(_vm.ContainerSlots, 5); - return new StackPanel - { - HorizontalAlignment = HorizontalAlignment.Center, - Children = { grid }, - }; - } - } -} diff --git a/MinecraftClient/Tui/IconGridBuilder.cs b/MinecraftClient/Tui/IconGridBuilder.cs deleted file mode 100644 index 3d13a8e28d..0000000000 --- a/MinecraftClient/Tui/IconGridBuilder.cs +++ /dev/null @@ -1,125 +0,0 @@ -using System; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Media; - -namespace MinecraftClient.Tui -{ - internal static class IconGridBuilder - { - internal static Grid BuildFromRgba(byte[] rgba, int srcWidth, int srcHeight, int displaySize) - { - int cellCols = displaySize; - int cellRows = displaySize / 2; - - var grid = new Grid(); - for (int c = 0; c < cellCols; c++) - grid.ColumnDefinitions.Add(new ColumnDefinition(1, GridUnitType.Auto)); - for (int r = 0; r < cellRows; r++) - grid.RowDefinitions.Add(new RowDefinition(1, GridUnitType.Auto)); - - for (int row = 0; row < cellRows; row++) - { - for (int col = 0; col < cellCols; col++) - { - int topPixelY = row * 2; - int bottomPixelY = row * 2 + 1; - - var topColor = SamplePixel(rgba, srcWidth, srcHeight, col, topPixelY, cellCols, displaySize); - var bottomColor = SamplePixel(rgba, srcWidth, srcHeight, col, bottomPixelY, cellCols, displaySize); - - var cell = new TextBlock - { - Text = "\u2580", - Foreground = new SolidColorBrush(topColor), - Background = new SolidColorBrush(bottomColor), - Padding = new Thickness(0), - Margin = new Thickness(0), - }; - - Grid.SetRow(cell, row); - Grid.SetColumn(cell, col); - grid.Children.Add(cell); - } - } - - return grid; - } - - internal static Grid BuildFromBase64(string base64Data, int displaySize) - { - byte[] imageBytes; - try - { - imageBytes = Convert.FromBase64String(base64Data); - } - catch - { - return new Grid(); - } - - return BuildFromImageBytes(imageBytes, displaySize) ?? new Grid(); - } - - internal static Grid? BuildFromImageBytes(byte[] imageBytes, int displaySize) - { - int srcWidth, srcHeight; - byte[] rgba; - try - { - (srcWidth, srcHeight, rgba) = DecodeImageToRgba(imageBytes); - } - catch - { - return null; - } - - return BuildFromRgba(rgba, srcWidth, srcHeight, displaySize); - } - - internal static (int Width, int Height, byte[] Rgba) DecodeImageToRgba(byte[] imageData) - { - using var image = new ImageMagick.MagickImage(imageData); - int w = (int)image.Width; - int h = (int)image.Height; - - using var pixels = image.GetPixelsUnsafe(); - var rgba = new byte[w * h * 4]; - - for (int y = 0; y < h; y++) - { - for (int x = 0; x < w; x++) - { - var pixel = pixels.GetPixel(x, y)!; - int idx = (y * w + x) * 4; - var color = pixel.ToColor()!; - rgba[idx] = (byte)(color.R >> 8); - rgba[idx + 1] = (byte)(color.G >> 8); - rgba[idx + 2] = (byte)(color.B >> 8); - rgba[idx + 3] = (byte)(color.A >> 8); - } - } - - return (w, h, rgba); - } - - private static Color SamplePixel(byte[] rgba, int srcW, int srcH, int dstX, int dstY, int dstW, int dstH) - { - int srcX = dstX * srcW / dstW; - int srcY = dstY * srcH / dstH; - srcX = Math.Clamp(srcX, 0, srcW - 1); - srcY = Math.Clamp(srcY, 0, srcH - 1); - - int idx = (srcY * srcW + srcX) * 4; - if (idx + 3 >= rgba.Length) - return Color.FromRgb(0, 0, 0); - - byte r = rgba[idx]; - byte g = rgba[idx + 1]; - byte b = rgba[idx + 2]; - byte a = rgba[idx + 3]; - - return a < 128 ? Color.FromRgb(0, 0, 0) : Color.FromRgb(r, g, b); - } - } -} diff --git a/MinecraftClient/Tui/InventoryApp.cs b/MinecraftClient/Tui/InventoryApp.cs deleted file mode 100644 index ea8663008d..0000000000 --- a/MinecraftClient/Tui/InventoryApp.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Avalonia; -using Avalonia.Controls; -using Avalonia.Controls.ApplicationLifetimes; -using Consolonia.Themes; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Tui -{ - public class InventoryApp : Application - { - public override void Initialize() - { - Styles.Add(new ModernTheme()); - } - - public override void OnFrameworkInitializationCompleted() - { - if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) - { - var handler = InventoryTuiHost.ActiveHandler!; - var windowId = InventoryTuiHost.ActiveWindowId; - var container = handler.GetInventory(windowId); - var containerType = container?.Type ?? ContainerType.PlayerInventory; - var view = ContainerViewBase.CreateView(containerType, handler, windowId); - - desktop.MainWindow = new Window - { - Content = view, - Title = "MCC Inventory" - }; - } - - base.OnFrameworkInitializationCompleted(); - } - } -} diff --git a/MinecraftClient/Tui/InventoryMainView.cs b/MinecraftClient/Tui/InventoryMainView.cs deleted file mode 100644 index d141870db5..0000000000 --- a/MinecraftClient/Tui/InventoryMainView.cs +++ /dev/null @@ -1,129 +0,0 @@ -using Avalonia; -using Avalonia.Controls; -using Avalonia.Layout; -using Avalonia.Media; - -namespace MinecraftClient.Tui -{ - public class PlayerInventoryView : ContainerViewBase - { - private readonly PlayerInventoryViewModel _playerVm; - private int _topGap; - - public PlayerInventoryView(McClient handler, int windowId) - : base(new PlayerInventoryViewModel(handler, windowId)) - { - _playerVm = (PlayerInventoryViewModel)_vm; - Initialize(); - } - - protected override int GetTotalSlotRows() - { - return 6; - } - - protected override void RebuildUi() - { - int availW = 0; - try { availW = System.Console.WindowWidth - 26; } catch { availW = 94; } - int slotW = System.Math.Clamp(availW / 9, 8, 18); - int topUsedW = slotW * 4 + 8 + slotW * 2 + 4 + slotW; - _topGap = System.Math.Max(2, (slotW * 9 - topUsedW) / 2); - - base.RebuildUi(); - } - - protected override Control BuildContainerSpecificArea() - { - var row = new StackPanel - { - Orientation = Orientation.Horizontal, - HorizontalAlignment = HorizontalAlignment.Center, - }; - - var offPanel = new StackPanel - { - VerticalAlignment = VerticalAlignment.Center, - Margin = new Thickness(0, 0, 1, 0), - }; - offPanel.Children.Add(new TextBlock - { - Text = Translations.tui_inventory_offhand, - Foreground = BrEquipLbl, - FontWeight = FontWeight.Bold, - HorizontalAlignment = HorizontalAlignment.Center, - }); - offPanel.Children.Add(CreateSlotCell(_playerVm.OffhandSlot, 0, 0)); - row.Children.Add(offPanel); - - var equipGrid = new Grid - { - RowDefinitions = new RowDefinitions("Auto,Auto"), - ColumnDefinitions = new ColumnDefinitions("Auto,Auto,Auto,Auto"), - }; - - void AddEquipSlot(int r, int gc, string label, int eqIdx) - { - var lbl = MakeLabel(label); - Grid.SetRow(lbl, r); Grid.SetColumn(lbl, gc); - equipGrid.Children.Add(lbl); - var btn = CreateSlotCell(_playerVm.EquipmentSlots[eqIdx], r, gc / 2); - Grid.SetRow(btn, r); Grid.SetColumn(btn, gc + 1); - equipGrid.Children.Add(btn); - } - - AddEquipSlot(0, 0, Translations.tui_inventory_equip_head, 0); - AddEquipSlot(0, 2, Translations.tui_inventory_equip_body, 1); - AddEquipSlot(1, 0, Translations.tui_inventory_equip_legs, 2); - AddEquipSlot(1, 2, Translations.tui_inventory_equip_feet, 3); - - row.Children.Add(equipGrid); - row.Children.Add(new Border { Width = _topGap }); - - var craftGrid = new Grid - { - RowDefinitions = new RowDefinitions("Auto,Auto"), - ColumnDefinitions = new ColumnDefinitions("Auto,Auto,Auto,Auto"), - }; - - for (int ci = 0; ci < 4; ci++) - { - int cr = ci / 2, cc = ci % 2; - var cs = CreateSlotCell(_playerVm.CraftingInputSlots[ci], cr, cc); - Grid.SetRow(cs, cr); - Grid.SetColumn(cs, cc); - craftGrid.Children.Add(cs); - } - - var arrowTb = new TextBlock - { - Text = "=>", - Foreground = Brushes.White, - FontWeight = FontWeight.Bold, - VerticalAlignment = VerticalAlignment.Top, - Padding = new Thickness(1, 0), - }; - Grid.SetRow(arrowTb, 1); Grid.SetColumn(arrowTb, 2); - craftGrid.Children.Add(arrowTb); - - var craftOutPanel = new StackPanel - { - VerticalAlignment = VerticalAlignment.Center, - }; - craftOutPanel.Children.Add(new TextBlock - { - Text = Translations.tui_inventory_output, - Foreground = BrEquipLbl, - FontWeight = FontWeight.Bold, - HorizontalAlignment = HorizontalAlignment.Center, - }); - craftOutPanel.Children.Add(CreateSlotCell(_playerVm.CraftingOutputSlot, 0, 1)); - Grid.SetRow(craftOutPanel, 0); Grid.SetColumn(craftOutPanel, 3); - Grid.SetRowSpan(craftOutPanel, 2); - craftGrid.Children.Add(craftOutPanel); - - row.Children.Add(craftGrid); - return row; - } - } -} diff --git a/MinecraftClient/Tui/InventoryTuiHost.cs b/MinecraftClient/Tui/InventoryTuiHost.cs deleted file mode 100644 index f740ffd40e..0000000000 --- a/MinecraftClient/Tui/InventoryTuiHost.cs +++ /dev/null @@ -1,209 +0,0 @@ -using System; -using System.Threading; -using Avalonia; -using Avalonia.Threading; -using Consolonia; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Tui -{ - /// - /// Manages the lifecycle of the inventory TUI. - /// In TUI mode: opens as a Consolonia dialog window. - /// In classic mode: launches standalone Consolonia on a dedicated thread. - /// - public static class InventoryTuiHost - { - private static volatile bool _isRunning; - private static bool _classicEverLaunched; - - public static McClient? ActiveHandler { get; private set; } - public static int ActiveWindowId { get; private set; } - - public static bool IsRunning => _isRunning; - - /// - /// Called by McClient.OnInventoryClose when the server closes a container. - /// If the closed window matches the active TUI window, auto-close the TUI. - /// - public static void NotifyInventoryClosed(int windowId) - { - if (!_isRunning || windowId != ActiveWindowId) - return; - - if (ConsoleIO.Backend is TuiConsoleBackend) - { - Dispatcher.UIThread.Post(() => - { - var view = TuiConsoleBackend.Instance?.GetView(); - view?.HideOverlay(); - }); - } - else - { - (Avalonia.Application.Current?.ApplicationLifetime - as Avalonia.Controls.ApplicationLifetimes.IControlledApplicationLifetime)?.Shutdown(); - } - } - - /// - /// Whether the TUI can be launched (classic mode has a one-shot limit). - /// - public static bool CanLaunch - { - get - { - if (_isRunning) return false; - if (ConsoleIO.Backend is TuiConsoleBackend) return true; - return !_classicEverLaunched; - } - } - - /// - /// Called before standalone TUI takes over the terminal (classic mode only). - /// - public static Action? OnSuspendConsole { get; set; } - - /// - /// Called after standalone TUI releases the terminal (classic mode only). - /// - public static Action? OnResumeConsole { get; set; } - - public static bool Launch(McClient handler, int windowId) - { - if (_isRunning) - return false; - - Container? container = handler.GetInventory(windowId); - if (container == null) - return false; - - _isRunning = true; - ActiveHandler = handler; - ActiveWindowId = windowId; - - if (ConsoleIO.Backend is TuiConsoleBackend) - { - LaunchAsDialog(); - } - else - { - if (_classicEverLaunched) - { - _isRunning = false; - ActiveHandler = null; - return false; - } - var tuiThread = new Thread(RunClassicTui) { Name = "InventoryTUI", IsBackground = false }; - tuiThread.Start(); - } - - return true; - } - - /// - /// Open inventory as an overlay panel within the main TUI view. - /// - private static void LaunchAsDialog() - { - Dispatcher.UIThread.Post(() => - { - try - { - var view = TuiConsoleBackend.Instance?.GetView(); - if (view != null) - { - var container = ActiveHandler!.GetInventory(ActiveWindowId); - var content = ContainerViewBase.CreateView( - container?.Type ?? ContainerType.PlayerInventory, - ActiveHandler, ActiveWindowId); - view.ShowOverlay(content, () => - { - ActiveHandler = null; - _isRunning = false; - }); - } - else - { - ActiveHandler = null; - _isRunning = false; - } - } - catch (Exception ex) - { - ConsoleIO.WriteLineFormatted($"§c[InventoryTUI] Error: {ex.Message}"); - ConsoleIO.WriteLineFormatted($"§c[InventoryTUI] Stack: {ex.StackTrace}"); - if (ex.InnerException != null) - ConsoleIO.WriteLineFormatted($"§c[InventoryTUI] Inner: {ex.InnerException.Message}"); - ActiveHandler = null; - _isRunning = false; - } - }); - } - - /// - /// Classic mode: run standalone Consolonia on a dedicated thread. - /// - private static void RunClassicTui() - { - try - { - OnSuspendConsole?.Invoke(); - _classicEverLaunched = true; - - AppBuilder builder = AppBuilder.Configure() - .UseConsolonia() - .UseAutoDetectedConsole() - .LogToException(); - - builder.StartWithConsoleLifetime(Array.Empty()); - } - catch (Exception ex) - { - System.Console.Error.WriteLine($"[InventoryTUI] Error: {ex.Message}"); - System.Console.Error.WriteLine($"[InventoryTUI] Stack: {ex.StackTrace}"); - if (ex.InnerException != null) - System.Console.Error.WriteLine($"[InventoryTUI] Inner: {ex.InnerException}"); - } - finally - { - RestoreTerminalState(); - OnResumeConsole?.Invoke(); - ActiveHandler = null; - _isRunning = false; - } - } - - private static void RestoreTerminalState() - { - try - { - System.Console.Write("\x1b[?1049l"); - System.Console.Write("\x1b[?25h"); - System.Console.Write("\x1b[?1000l"); - System.Console.Write("\x1b[?1002l"); - System.Console.Write("\x1b[?1003l"); - System.Console.Write("\x1b[?1006l"); - System.Console.Write("\x1b[?2004l"); - System.Console.Write("\x1b[0m"); - System.Console.Write("\x1b(B"); - System.Console.Out.Flush(); - - try - { - using var proc = System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo - { - FileName = "stty", - Arguments = "sane", - UseShellExecute = false, - RedirectStandardOutput = true, - RedirectStandardError = true, - }); - proc?.WaitForExit(2000); - } - catch { } - } - catch { } - } - } -} diff --git a/MinecraftClient/Tui/InventoryViewModel.cs b/MinecraftClient/Tui/InventoryViewModel.cs deleted file mode 100644 index 3b29928fe4..0000000000 --- a/MinecraftClient/Tui/InventoryViewModel.cs +++ /dev/null @@ -1,60 +0,0 @@ -using System.Collections.ObjectModel; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Tui -{ - public class PlayerInventoryViewModel : ContainerViewModel - { - public ObservableCollection EquipmentSlots { get; } = new(); - public ObservableCollection CraftingInputSlots { get; } = new(); - public SlotViewModel CraftingOutputSlot { get; } - public SlotViewModel OffhandSlot { get; } - - public PlayerInventoryViewModel(McClient handler, int windowId) - : base(handler, windowId, ContainerType.PlayerInventory) - { - CraftingOutputSlot = SlotMap[0]; - OffhandSlot = SlotMap[45]; - } - - protected override void InitializeSlots() - { - SlotMap.Clear(); - - var craftOut = new SlotViewModel(0); - SlotMap[0] = craftOut; - - for (int i = 1; i <= 4; i++) - { - var slot = new SlotViewModel(i); - CraftingInputSlots.Add(slot); - SlotMap[i] = slot; - } - - for (int i = 5; i <= 8; i++) - { - var slot = new SlotViewModel(i); - EquipmentSlots.Add(slot); - SlotMap[i] = slot; - } - - for (int i = 9; i <= 35; i++) - { - var slot = new SlotViewModel(i); - MainInventorySlots.Add(slot); - SlotMap[i] = slot; - } - - for (int i = 36; i <= 44; i++) - { - int hotbarIdx = i - 36; - var slot = new SlotViewModel(i, isHotbar: true, hotbarIndex: hotbarIdx); - HotbarSlots.Add(slot); - SlotMap[i] = slot; - } - - var offhand = new SlotViewModel(45); - SlotMap[45] = offhand; - } - } -} diff --git a/MinecraftClient/Tui/MainTuiView.cs b/MinecraftClient/Tui/MainTuiView.cs deleted file mode 100644 index 78ec25924f..0000000000 --- a/MinecraftClient/Tui/MainTuiView.cs +++ /dev/null @@ -1,1250 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; -using System.Linq; -using System.Runtime.InteropServices; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Controls.Primitives; -using Avalonia.Controls.Templates; -using Avalonia.Input; -using Avalonia.Layout; -using Avalonia.Media; -using Avalonia.Threading; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Tui -{ - public class MainTuiView : UserControl - { - private static readonly int MaxLogLines = ResolveMaxLogLines(); - private const int CtrlCDoublePressMsec = 1500; - - private static int ResolveMaxLogLines() - { - int configured = Settings.Config.Console.General.TUI_Log_Scrollback; - if (configured > 0) - return configured; - - return 3000; - } - - private readonly ObservableCollection _logLines = new(); - private readonly ObservableCollection _logControls = new(); - private readonly ItemsControl _logItemsControl; - private readonly ScrollViewer _logScrollViewer; - private readonly TextBox _commandInput; - private bool _autoScroll = true; - private bool _programmaticScroll; - private readonly ObservableCollection _commandHistory = new(); - private int _historyIndex = -1; - - private readonly Panel _rootPanel; - private readonly DockPanel _mainContent; - private Control? _overlayContent; - private Action? _overlayCloseCallback; - - private readonly TextBlock _statusBar; - private readonly Border _notificationBorder; - private readonly TextBlock _notificationText; - private long _lastCtrlCTicks; - private long _lastLogClickTicks; - private const int DoubleClickMsec = 500; - - private readonly Border _minimapBorder; - private readonly MinimapControl _minimapControl; - private volatile bool _minimapVisible; - - private TuiTooltipService? _tooltipService; - - private readonly Border _suggestionBorder; - private readonly StackPanel _suggestionPanel; - private CommandSuggestion[] _suggestions = Array.Empty(); - private (int Start, int End) _suggestionRange; - private int _selectedSuggestionIndex = -1; - private int _suggestionViewTop; - private bool _acceptingSuggestion; - private bool _tabCycling; - - private int MaxVisibleSuggestions => - Math.Max(1, Settings.Config.Console.CommandSuggestion.Max_Displayed_Suggestions); - - public TuiTooltipService? TooltipService => _tooltipService; - - public MainTuiView() - { - Background = Brushes.Black; - - _statusBar = new TextBlock - { - Foreground = Brushes.Gray, - Background = Brushes.Black, - Padding = new Thickness(0), - Margin = new Thickness(0), - IsVisible = false, - }; - - _logItemsControl = new ItemsControl - { - ItemsSource = _logControls, - Focusable = false, - ItemsPanel = new FuncTemplate(() => new VirtualizingStackPanel()), - }; - - _logScrollViewer = new ScrollViewer - { - Content = _logItemsControl, - Background = Brushes.Black, - HorizontalScrollBarVisibility = ScrollBarVisibility.Disabled, - VerticalScrollBarVisibility = ScrollBarVisibility.Auto, - Padding = new Thickness(0), - Focusable = false, - }; - - _logScrollViewer.ScrollChanged += OnLogScrollChanged; - _logScrollViewer.PointerPressed += OnLogAreaPointerPressed; - - _commandInput = new TextBox - { - Watermark = "", - Foreground = Brushes.White, - Background = Brushes.Black, - BorderThickness = new Thickness(0), - Padding = new Thickness(0), - Margin = new Thickness(0), - MinHeight = 1, - }; - - _commandInput.AddHandler(KeyDownEvent, OnCommandKeyDown, Avalonia.Interactivity.RoutingStrategies.Tunnel); - _commandInput.AddHandler(TextInputEvent, OnCommandTextInput, Avalonia.Interactivity.RoutingStrategies.Tunnel); - _commandInput.TextChanged += OnCommandTextChanged; - - var promptLabel = new TextBlock - { - Text = "> ", - Foreground = Brushes.Cyan, - VerticalAlignment = VerticalAlignment.Center, - FontWeight = FontWeight.Bold, - }; - - var inputRow = new DockPanel - { - Background = Brushes.Black, - Children = - { - SetDock(promptLabel, Dock.Left), - _commandInput - } - }; - - _notificationText = new TextBlock - { - Foreground = Brushes.Yellow, - Padding = new Thickness(1, 0), - }; - _notificationBorder = new Border - { - Background = new SolidColorBrush(Color.FromRgb(60, 50, 20)), - BorderBrush = Brushes.Yellow, - BorderThickness = new Thickness(1), - Child = _notificationText, - IsVisible = false, - HorizontalAlignment = HorizontalAlignment.Right, - VerticalAlignment = VerticalAlignment.Top, - }; - - _suggestionPanel = new StackPanel - { - Orientation = Avalonia.Layout.Orientation.Vertical, - }; - _suggestionPanel.PointerWheelChanged += OnSuggestionWheelChanged; - _suggestionBorder = new Border - { - Background = new SolidColorBrush(Color.FromRgb(30, 30, 30)), - BorderBrush = new SolidColorBrush(Color.FromRgb(80, 80, 80)), - BorderThickness = new Thickness(1), - Child = _suggestionPanel, - IsVisible = false, - HorizontalAlignment = HorizontalAlignment.Left, - VerticalAlignment = VerticalAlignment.Bottom, - Margin = new Thickness(0, 0, 0, 1), - }; - - var mmCfg = Settings.Config.Console.Minimap; - mmCfg.OnSettingUpdate(); - _minimapControl = new MinimapControl(mmCfg.Width, mmCfg.Height); - _minimapControl.BlocksPerPixel = mmCfg.Zoom; - _minimapControl.RefreshIntervalMs = mmCfg.RefreshInterval; - _minimapControl.NameConfig.Players = mmCfg.ShowPlayerNames; - _minimapControl.NameConfig.Hostile = mmCfg.ShowHostileNames; - _minimapControl.NameConfig.Neutral = mmCfg.ShowNeutralNames; - _minimapControl.NameConfig.Passive = mmCfg.ShowPassiveNames; - _minimapControl.CaveMode = mmCfg.CaveMode; - - var (hAlign, vAlign, margin) = GetMinimapAlignment(mmCfg.Position); - _minimapBorder = new Border - { - Background = new SolidColorBrush(Color.FromArgb(220, 15, 15, 15)), - BorderBrush = new SolidColorBrush(Color.FromRgb(80, 80, 80)), - BorderThickness = new Thickness(1), - Child = _minimapControl, - IsVisible = false, - HorizontalAlignment = hAlign, - VerticalAlignment = vAlign, - Margin = margin, - }; - - _mainContent = new DockPanel - { - Background = Brushes.Black, - Children = - { - SetDock(_statusBar, Dock.Top), - SetDock(inputRow, Dock.Bottom), - _logScrollViewer - } - }; - - _rootPanel = new Panel - { - Background = Brushes.Black, - Children = { _mainContent, _minimapBorder, _notificationBorder, _suggestionBorder } - }; - - _tooltipService = new TuiTooltipService(_rootPanel); - _minimapControl.TooltipService = _tooltipService; - _minimapControl.Position = mmCfg.Position; - - Content = _rootPanel; - - if (mmCfg.Enabled) - { - _minimapVisible = true; - _minimapBorder.IsVisible = true; - _minimapControl.Start(); - } - - StartStatusBarTimer(); - } - - private static Control SetDock(Control control, Dock dock) - { - DockPanel.SetDock(control, dock); - return control; - } - - #region Log output - - public void AppendLogLine(string text) - { - _logLines.Add(text); - - var tb = new TextBlock - { - Text = text, - Foreground = Brushes.White, - Padding = new Thickness(0), - Margin = new Thickness(0), - TextWrapping = TextWrapping.Wrap, - }; - _logControls.Add(tb); - - TrimLog(); - - if (_autoScroll) - ScheduleScrollToEnd(); - } - - public void AppendFormattedLogLine(string text) - { - _logLines.Add(text); - - var tb = McColorParser.CreateColoredTextBlock(text, TextWrapping.Wrap); - _logControls.Add(tb); - - TrimLog(); - - if (_autoScroll) - ScheduleScrollToEnd(); - } - - public void ClearLog() - { - _logLines.Clear(); - _logControls.Clear(); - ScheduleScrollToEnd(); - } - - private void TrimLog() - { - while (_logLines.Count > MaxLogLines) - { - _logLines.RemoveAt(0); - _logControls.RemoveAt(0); - } - } - - private void ScheduleScrollToEnd() - { - Dispatcher.UIThread.Post(() => - { - _programmaticScroll = true; - var sv = _logScrollViewer; - sv.Offset = new Vector(0, sv.Extent.Height); - _programmaticScroll = false; - }, DispatcherPriority.Background); - } - - public string LatestLogLine => _logLines.Count > 0 ? _logLines[^1] : ""; - - public ObservableCollection GetRecentLogLines(int _) => _logLines; - - private void OnLogAreaPointerPressed(object? sender, PointerPressedEventArgs e) - { - var props = e.GetCurrentPoint(null).Properties; - if (!props.IsLeftButtonPressed) - { - Dispatcher.UIThread.Post(() => _commandInput.Focus()); - return; - } - - bool shift = (e.KeyModifiers & KeyModifiers.Shift) != 0; - if (shift) - return; - - long now = Environment.TickCount64; - long elapsed = now - _lastLogClickTicks; - _lastLogClickTicks = now; - - if (elapsed < DoubleClickMsec) - { - ShowNotification(Translations.tui_select_copy_hint, 3000); - _lastLogClickTicks = 0; - } - - Dispatcher.UIThread.Post(() => _commandInput.Focus()); - } - - #endregion - - #region Input - - public void ClearInput() - { - _commandInput.Text = string.Empty; - } - - private void OnCommandKeyDown(object? sender, KeyEventArgs e) - { - if (_tabCycling && e.Key is not Key.Tab) - _tabCycling = false; - - bool ctrl = (e.KeyModifiers & KeyModifiers.Control) != 0; - - if (e.Key == Key.C && ctrl) - { - HandleCtrlC(); - e.Handled = true; - return; - } - - if ((e.Key == Key.Back || e.Key == Key.W) && ctrl) - { - DeleteWordBackward(); - e.Handled = true; - return; - } - - if (e.Key == Key.Left && ctrl) - { - MoveCaretWordLeft(); - e.Handled = true; - return; - } - - if (e.Key == Key.Right && ctrl) - { - MoveCaretWordRight(); - e.Handled = true; - return; - } - - if (e.Key == Key.A && ctrl) - { - _commandInput.CaretIndex = 0; - e.Handled = true; - return; - } - - if (e.Key == Key.E && ctrl) - { - _commandInput.CaretIndex = _commandInput.Text?.Length ?? 0; - e.Handled = true; - return; - } - - if (e.Key == Key.U && ctrl) - { - _commandInput.Text = string.Empty; - e.Handled = true; - return; - } - - if (e.Key == Key.Escape && SuggestionsVisible) - { - ClearSuggestions(); - e.Handled = true; - return; - } - - if (e.Key == Key.Tab && SuggestionsVisible) - { - if (_tabCycling) - { - MoveSuggestionSelection(1); - ApplySuggestionInPlace(_selectedSuggestionIndex); - } - else - { - ApplySuggestionInPlace(_selectedSuggestionIndex); - _tabCycling = true; - } - e.Handled = true; - return; - } - - if (e.Key == Key.Tab) - { - e.Handled = true; - return; - } - - switch (e.Key) - { - case Key.Enter: - SubmitCommand(); - e.Handled = true; - break; - - case Key.Up: - if (SuggestionsVisible) - MoveSuggestionSelection(-1); - else - NavigateHistory(-1); - e.Handled = true; - break; - - case Key.Down: - if (SuggestionsVisible) - MoveSuggestionSelection(1); - else - NavigateHistory(1); - e.Handled = true; - break; - - case Key.PageUp: - ScrollLog(-10); - e.Handled = true; - break; - - case Key.PageDown: - ScrollLog(10); - e.Handled = true; - break; - } - } - - private void DeleteWordBackward() - { - string text = _commandInput.Text ?? ""; - int caret = _commandInput.CaretIndex; - if (caret == 0 || text.Length == 0) return; - - int pos = caret - 1; - while (pos > 0 && text[pos - 1] == ' ') pos--; - while (pos > 0 && text[pos - 1] != ' ') pos--; - - _commandInput.Text = text[..pos] + text[caret..]; - _commandInput.CaretIndex = pos; - } - - private void MoveCaretWordLeft() - { - string text = _commandInput.Text ?? ""; - int pos = _commandInput.CaretIndex; - if (pos == 0) return; - - pos--; - while (pos > 0 && text[pos - 1] == ' ') pos--; - while (pos > 0 && text[pos - 1] != ' ') pos--; - - _commandInput.CaretIndex = pos; - } - - private void MoveCaretWordRight() - { - string text = _commandInput.Text ?? ""; - int pos = _commandInput.CaretIndex; - if (pos >= text.Length) return; - - while (pos < text.Length && text[pos] != ' ') pos++; - while (pos < text.Length && text[pos] == ' ') pos++; - - _commandInput.CaretIndex = pos; - } - - private void OnCommandTextInput(object? sender, TextInputEventArgs e) - { - string? incoming = e.Text; - if (string.IsNullOrEmpty(incoming) || (!incoming.Contains('\n') && !incoming.Contains('\r'))) - return; - - e.Handled = true; - - string[] lines = incoming.Split(["\r\n", "\r", "\n"], StringSplitOptions.None); - - string prefix = _commandInput.Text ?? ""; - for (int i = 0; i < lines.Length; i++) - { - string line = lines[i]; - bool isLast = i == lines.Length - 1; - - if (line.Length > 0 || prefix.Length > 0) - { - _acceptingSuggestion = true; - try { _commandInput.Text = prefix + line; } - finally { _acceptingSuggestion = false; } - } - - if (!isLast) - { - SubmitCommand(); - prefix = ""; - } - } - } - - private void OnCommandTextChanged(object? sender, TextChangedEventArgs e) - { - string text = _commandInput.Text ?? string.Empty; - - if (_acceptingSuggestion || _tabCycling) - return; - - if (string.IsNullOrEmpty(text)) - { - ClearSuggestions(); - return; - } - - var backend = TuiConsoleBackend.Instance; - if (backend == null) return; - int cursor = _commandInput.CaretIndex; - backend.OnInputChanged(text, cursor); - } - - private void SubmitCommand() - { - string command = _commandInput.Text?.Trim() ?? string.Empty; - if (string.IsNullOrEmpty(command)) - return; - - ClearSuggestions(); - _tabCycling = false; - - _commandHistory.Add(command); - _historyIndex = _commandHistory.Count; - - _acceptingSuggestion = true; - try { _commandInput.Text = string.Empty; } - finally { _acceptingSuggestion = false; } - - _autoScroll = true; - - AppendLogLine($"> {command}"); - - TuiConsoleBackend.Instance?.OnCommandSubmitted(command); - } - - private void NavigateHistory(int direction) - { - if (_commandHistory.Count == 0) - return; - - _historyIndex += direction; - if (_historyIndex < 0) _historyIndex = 0; - if (_historyIndex >= _commandHistory.Count) - { - _historyIndex = _commandHistory.Count; - _commandInput.Text = string.Empty; - return; - } - - string historyText = _commandHistory[_historyIndex]; - SetCommandText(historyText); - } - - private void SetCommandText(string text) - { - _commandInput.TextChanged -= OnCommandTextChanged; - try - { - _commandInput.Text = text; - _commandInput.CaretIndex = text.Length; - } - finally - { - _commandInput.TextChanged += OnCommandTextChanged; - } - - Dispatcher.UIThread.Post(() => - { - var endKeyEvent = new KeyEventArgs - { - RoutedEvent = KeyDownEvent, - Key = Key.End, - Source = _commandInput, - }; - _commandInput.RaiseEvent(endKeyEvent); - }, DispatcherPriority.Input); - } - - #endregion - - #region Suggestions - - private const int PromptWidth = 2; // "> " - private const int BorderAndPadding = 2; // 1 border + 1 padding on each side - - internal void UpdateSuggestions(CommandSuggestion[] suggestions, (int Start, int End) range) - { - if (suggestions.Length == 0) - { - ClearSuggestions(); - return; - } - - _suggestions = suggestions; - _suggestionRange = range; - _selectedSuggestionIndex = 0; - _suggestionViewTop = 0; - - int leftOffset = PromptWidth + range.Start - BorderAndPadding; - double screenWidth = Bounds.Width; - if (screenWidth < 1) - screenWidth = 80; - - if (leftOffset < 0) - leftOffset = 0; - - _suggestionBorder.Margin = new Thickness(leftOffset, 0, 0, 1); - _suggestionBorder.MaxWidth = Math.Max(10, screenWidth - leftOffset); - - RebuildSuggestionItems(); - _suggestionBorder.IsVisible = true; - } - - internal void ClearSuggestions() - { - if (!_suggestionBorder.IsVisible && _suggestions.Length == 0) - return; - - _suggestions = Array.Empty(); - _selectedSuggestionIndex = -1; - _suggestionBorder.IsVisible = false; - _suggestionPanel.Children.Clear(); - } - - private bool SuggestionsVisible => _suggestionBorder.IsVisible && _suggestions.Length > 0; - - private void RebuildSuggestionItems() - { - _suggestionPanel.Children.Clear(); - - int visibleCount = Math.Min(_suggestions.Length, MaxVisibleSuggestions); - int viewBottom = _suggestionViewTop + visibleCount; - - for (int i = _suggestionViewTop; i < viewBottom && i < _suggestions.Length; i++) - { - var sug = _suggestions[i]; - int index = i; - - string label = sug.Text; - if (!string.IsNullOrEmpty(sug.Tooltip)) - label += " " + sug.Tooltip; - - var tb = new TextBlock - { - Text = label, - Padding = new Thickness(1, 0), - Foreground = Brushes.White, - TextTrimming = TextTrimming.CharacterEllipsis, - Background = i == _selectedSuggestionIndex - ? new SolidColorBrush(Color.FromRgb(0, 90, 160)) - : Brushes.Transparent, - }; - - var row = new Border - { - Child = tb, - Background = Brushes.Transparent, - }; - - row.PointerPressed += (_, _) => - { - _selectedSuggestionIndex = index; - ApplySuggestionInPlace(index); - _tabCycling = true; - }; - row.PointerEntered += (_, _) => - { - if (_selectedSuggestionIndex != index) - { - _selectedSuggestionIndex = index; - UpdateSuggestionHighlight(); - } - }; - - _suggestionPanel.Children.Add(row); - } - - if (_suggestions.Length > MaxVisibleSuggestions) - { - string scrollHint = $"[{_suggestionViewTop + 1}-{viewBottom}/{_suggestions.Length}]"; - var hintTb = new TextBlock - { - Text = scrollHint, - Foreground = new SolidColorBrush(Color.FromRgb(120, 120, 120)), - Padding = new Thickness(1, 0), - TextAlignment = TextAlignment.Right, - HorizontalAlignment = HorizontalAlignment.Stretch, - }; - _suggestionPanel.Children.Add(hintTb); - } - } - - private void UpdateSuggestionHighlight() - { - int visibleCount = Math.Min(_suggestions.Length, MaxVisibleSuggestions); - for (int i = 0; i < visibleCount && i < _suggestionPanel.Children.Count; i++) - { - if (_suggestionPanel.Children[i] is Border border && border.Child is TextBlock tb) - { - int dataIndex = _suggestionViewTop + i; - tb.Background = dataIndex == _selectedSuggestionIndex - ? new SolidColorBrush(Color.FromRgb(0, 90, 160)) - : Brushes.Transparent; - } - } - } - - private void MoveSuggestionSelection(int direction) - { - if (_suggestions.Length == 0) return; - - _selectedSuggestionIndex += direction; - if (_selectedSuggestionIndex < 0) - _selectedSuggestionIndex = _suggestions.Length - 1; - else if (_selectedSuggestionIndex >= _suggestions.Length) - _selectedSuggestionIndex = 0; - - int visibleCount = Math.Min(_suggestions.Length, MaxVisibleSuggestions); - if (_selectedSuggestionIndex < _suggestionViewTop) - { - _suggestionViewTop = _selectedSuggestionIndex; - RebuildSuggestionItems(); - } - else if (_selectedSuggestionIndex >= _suggestionViewTop + visibleCount) - { - _suggestionViewTop = _selectedSuggestionIndex - visibleCount + 1; - RebuildSuggestionItems(); - } - else - { - UpdateSuggestionHighlight(); - } - } - - private void OnSuggestionWheelChanged(object? sender, PointerWheelEventArgs e) - { - if (!SuggestionsVisible) return; - - int direction = e.Delta.Y > 0 ? -1 : 1; - ScrollSuggestionViewport(direction); - e.Handled = true; - } - - private void ScrollSuggestionViewport(int direction) - { - if (_suggestions.Length <= MaxVisibleSuggestions) return; - - int newTop = _suggestionViewTop + direction; - int maxTop = _suggestions.Length - MaxVisibleSuggestions; - newTop = Math.Clamp(newTop, 0, maxTop); - - if (newTop == _suggestionViewTop) return; - _suggestionViewTop = newTop; - - int viewBottom = _suggestionViewTop + MaxVisibleSuggestions; - if (_selectedSuggestionIndex < _suggestionViewTop) - _selectedSuggestionIndex = _suggestionViewTop; - else if (_selectedSuggestionIndex >= viewBottom) - _selectedSuggestionIndex = viewBottom - 1; - - RebuildSuggestionItems(); - } - - private void ApplySuggestionText(int index) - { - if (index < 0 || index >= _suggestions.Length) return; - - string text = _commandInput.Text ?? ""; - string selected = _suggestions[index].Text; - - int start = Math.Min(_suggestionRange.Start, text.Length); - int end = Math.Min(_suggestionRange.End, text.Length); - - string before = text[..start]; - string after = text[end..]; - string newText = before + selected + after; - - _commandInput.Text = newText; - _commandInput.CaretIndex = before.Length + selected.Length; - - _suggestionRange = (start, start + selected.Length); - } - - private void ApplySuggestionInPlace(int index) - { - if (index < 0 || index >= _suggestions.Length) return; - - _acceptingSuggestion = true; - try - { - ApplySuggestionText(index); - } - finally - { - _acceptingSuggestion = false; - } - UpdateSuggestionHighlight(); - } - - #endregion - - #region Ctrl+C - - internal void HandleCtrlC() - { - long now = Environment.TickCount64; - long elapsed = now - _lastCtrlCTicks; - - if (_lastCtrlCTicks > 0 && elapsed < CtrlCDoublePressMsec) - { - HideNotification(); - TuiConsoleBackend.Instance?.Shutdown(); - return; - } - - _lastCtrlCTicks = now; - - string inputText = _commandInput.Text?.Trim() ?? ""; - if (inputText.Length > 0) - { - _commandInput.Text = string.Empty; - ShowNotification(Translations.tui_ctrlc_input_cleared, CtrlCDoublePressMsec); - } - else - { - ShowNotification(Translations.tui_ctrlc_quit_hint, CtrlCDoublePressMsec); - } - } - - private void ShowNotification(string message, int autoHideMs) - { - _notificationText.Text = message; - _notificationBorder.IsVisible = true; - - var timer = new Avalonia.Threading.DispatcherTimer - { - Interval = TimeSpan.FromMilliseconds(autoHideMs), - }; - timer.Tick += (_, _) => - { - timer.Stop(); - HideNotification(); - }; - timer.Start(); - } - - private void HideNotification() - { - _notificationBorder.IsVisible = false; - } - - #endregion - - #region Scrolling - - private void ScrollLog(int delta) - { - var sv = _logScrollViewer; - var newY = sv.Offset.Y + delta; - newY = Math.Max(0, Math.Min(newY, sv.Extent.Height - sv.Viewport.Height)); - sv.Offset = new Vector(0, newY); - - _autoScroll = newY >= sv.Extent.Height - sv.Viewport.Height - 2; - } - - private void OnLogScrollChanged(object? sender, ScrollChangedEventArgs e) - { - if (_programmaticScroll) return; - - var sv = _logScrollViewer; - _autoScroll = sv.Offset.Y >= sv.Extent.Height - sv.Viewport.Height - 2; - } - - #endregion - - #region Status Bar (Health / Food) - - private void StartStatusBarTimer() - { - var timer = new DispatcherTimer - { - Interval = TimeSpan.FromSeconds(1), - }; - timer.Tick += (_, _) => UpdateStatusBar(); - timer.Start(); - } - - private void UpdateStatusBar() - { - if (McClient.Instance is not McClient client) - { - _statusBar.IsVisible = false; - return; - } - - int gamemode = client.GetGamemode(); - if (gamemode != 0 && gamemode != 2) - { - _statusBar.IsVisible = false; - return; - } - - float health = client.GetHealth(); - int food = client.GetSaturation(); - - int heartsFilled = (int)Math.Ceiling(health / 20f * 10); - heartsFilled = Math.Clamp(heartsFilled, 0, 10); - int foodFilled = (int)Math.Ceiling(food / 20f * 10); - foodFilled = Math.Clamp(foodFilled, 0, 10); - - _statusBar.Inlines?.Clear(); - _statusBar.Inlines ??= new Avalonia.Controls.Documents.InlineCollection(); - - var healthText = BuildBarText(heartsFilled, 10, "\u2764\ufe0f", " \u2661 "); - var foodText = BuildBarText(foodFilled, 10, "\ud83c\udf56", " \u25cb "); - - _statusBar.Inlines.Add(new Avalonia.Controls.Documents.Run(healthText) - { - Foreground = new SolidColorBrush(Color.FromRgb(255, 85, 85)), - }); - _statusBar.Inlines.Add(new Avalonia.Controls.Documents.Run($" {health:F1} ") - { - Foreground = new SolidColorBrush(Color.FromRgb(255, 150, 150)), - }); - _statusBar.Inlines.Add(new Avalonia.Controls.Documents.Run(foodText) - { - Foreground = new SolidColorBrush(Color.FromRgb(200, 160, 80)), - }); - _statusBar.Inlines.Add(new Avalonia.Controls.Documents.Run($" {food}") - { - Foreground = new SolidColorBrush(Color.FromRgb(220, 190, 100)), - }); - - // Add effects display - var effects = client.GetPlayerEffects().Values - .Where(effectData => !effectData.IsExpired) - .OrderBy(effectData => effectData.Effect) - .ToArray(); - if (effects.Length > 0) - { - bool showEffectNamesInTui = Settings.Config.Main.Advanced.ShowEffectNamesInTUI; - - _statusBar.Inlines.Add(new Avalonia.Controls.Documents.Run(" | ") - { - Foreground = Brushes.Gray, - }); - - bool first = true; - foreach (var effectData in effects) - { - if (!first) - { - _statusBar.Inlines.Add(new Avalonia.Controls.Documents.Run(", ") - { - Foreground = Brushes.Gray, - }); - } - first = false; - - var color = GetEffectIconAndColor(effectData.Effect).Color; - var displayText = showEffectNamesInTui - ? effectData.GetDisplayName() - : GetCompactEffectLabel(effectData); - displayText = $"{displayText} ({effectData.GetRemainingDurationText()})"; - - _statusBar.Inlines.Add(new Avalonia.Controls.Documents.Run(displayText) - { - Foreground = color, - }); - } - } - - _statusBar.IsVisible = true; - } - - private static string BuildBarText(int filled, int total, string filledChar, string emptyChar) - { - var sb = new System.Text.StringBuilder(); - for (int i = 0; i < filled; i++) - { - if (i > 0) sb.Append(' '); - sb.Append(filledChar); - } - for (int i = filled; i < total; i++) - { - sb.Append(emptyChar); - } - return sb.ToString(); - } - - private static string GetCompactEffectLabel(EffectData effectData) - { - var icon = GetEffectIconAndColor(effectData.Effect).Icon; - return effectData.Amplifier > 0 - ? $"{icon}{effectData.Amplifier + 1}" - : icon; - } - - private static (string Icon, IBrush Color) GetEffectIconAndColor(Effects effect) - { - return effect switch - { - Effects.Speed => ("⚡", new SolidColorBrush(Color.FromRgb(135, 206, 235))), - Effects.Slowness => ("🐢", new SolidColorBrush(Color.FromRgb(139, 139, 139))), - Effects.Haste => ("⛏", new SolidColorBrush(Color.FromRgb(255, 215, 0))), - Effects.MiningFatigue => ("🔨", new SolidColorBrush(Color.FromRgb(64, 64, 64))), - Effects.Strength => ("⚔", new SolidColorBrush(Color.FromRgb(255, 99, 71))), - Effects.InstantHealth => ("❤", new SolidColorBrush(Color.FromRgb(255, 182, 193))), - Effects.InstantDamage => ("💀", new SolidColorBrush(Color.FromRgb(139, 0, 0))), - Effects.JumpBoost => ("🦘", new SolidColorBrush(Color.FromRgb(50, 205, 50))), - Effects.Nausea => ("💫", new SolidColorBrush(Color.FromRgb(85, 107, 47))), - Effects.Regeneration => ("✨", new SolidColorBrush(Color.FromRgb(255, 105, 180))), - Effects.Resistance => ("🛡", new SolidColorBrush(Color.FromRgb(112, 128, 144))), - Effects.FireResistance => ("🔥", new SolidColorBrush(Color.FromRgb(255, 140, 0))), - Effects.WaterBreathing => ("🐟", new SolidColorBrush(Color.FromRgb(0, 191, 255))), - Effects.Invisibility => ("👻", new SolidColorBrush(Color.FromRgb(200, 200, 200))), - Effects.Blindness => ("🕶", new SolidColorBrush(Color.FromRgb(50, 50, 50))), - Effects.NightVision => ("👁", new SolidColorBrush(Color.FromRgb(0, 255, 127))), - Effects.Hunger => ("🍔", new SolidColorBrush(Color.FromRgb(139, 69, 19))), - Effects.Weakness => ("💪", new SolidColorBrush(Color.FromRgb(128, 128, 128))), - Effects.Poison => ("☠", new SolidColorBrush(Color.FromRgb(75, 0, 130))), - Effects.Wither => ("🥀", new SolidColorBrush(Color.FromRgb(0, 0, 0))), - Effects.HealthBoost => ("💖", new SolidColorBrush(Color.FromRgb(255, 20, 147))), - Effects.Absorption => ("💛", new SolidColorBrush(Color.FromRgb(255, 215, 0))), - Effects.Saturation => ("🍖", new SolidColorBrush(Color.FromRgb(255, 165, 0))), - Effects.Glowing => ("💡", new SolidColorBrush(Color.FromRgb(255, 255, 150))), - Effects.Levitation => ("🎈", new SolidColorBrush(Color.FromRgb(147, 112, 219))), - Effects.Luck => ("🍀", new SolidColorBrush(Color.FromRgb(50, 205, 50))), - Effects.BadLuck => ("🐈‍⬛", new SolidColorBrush(Color.FromRgb(128, 0, 0))), - Effects.SlowFalling => ("🪶", new SolidColorBrush(Color.FromRgb(255, 182, 193))), - Effects.ConduitPower => ("🐡", new SolidColorBrush(Color.FromRgb(0, 255, 255))), - Effects.DolphinsGrace => ("🐬", new SolidColorBrush(Color.FromRgb(135, 206, 235))), - Effects.BadOmen => ("🏴", new SolidColorBrush(Color.FromRgb(0, 100, 0))), - Effects.HerooftheVillage => ("🎉", new SolidColorBrush(Color.FromRgb(255, 215, 0))), - _ => ("✦", new SolidColorBrush(Color.FromRgb(200, 200, 200))), - }; - } - - #endregion - - #region Minimap - - public void ShowMinimap() - { - if (_minimapVisible) return; - _minimapVisible = true; - _minimapBorder.IsVisible = true; - _minimapControl.Start(); - Settings.Config.Console.Minimap.Enabled = true; - } - - public void HideMinimap() - { - if (!_minimapVisible) return; - _minimapVisible = false; - _minimapControl.Stop(); - _minimapBorder.IsVisible = false; - Settings.Config.Console.Minimap.Enabled = false; - } - - public void ToggleMinimap() - { - if (_minimapVisible) - HideMinimap(); - else - ShowMinimap(); - } - - public bool IsMinimapVisible => _minimapVisible; - - public void SetMinimapZoom(int level) - { - _minimapControl.BlocksPerPixel = level; - Settings.Config.Console.Minimap.Zoom = level; - } - - public int GetMinimapZoom() => _minimapControl.BlocksPerPixel; - - public NameDisplayConfig GetMinimapNameConfig() => _minimapControl.NameConfig; - - public void SyncMinimapNameConfig() - { - var nc = _minimapControl.NameConfig; - var cfg = Settings.Config.Console.Minimap; - cfg.ShowPlayerNames = nc.Players; - cfg.ShowHostileNames = nc.Hostile; - cfg.ShowNeutralNames = nc.Neutral; - cfg.ShowPassiveNames = nc.Passive; - } - - public void ResizeMinimap(int width, int height) - { - _minimapControl.Resize(width, height); - Settings.Config.Console.Minimap.Width = width; - Settings.Config.Console.Minimap.Height = height; - } - - public void SetMinimapPosition(MinimapPosition pos) - { - var (hAlign, vAlign, margin) = GetMinimapAlignment(pos); - _minimapBorder.HorizontalAlignment = hAlign; - _minimapBorder.VerticalAlignment = vAlign; - _minimapBorder.Margin = margin; - _minimapControl.Position = pos; - Settings.Config.Console.Minimap.Position = pos; - } - - public MinimapPosition GetMinimapPosition() => Settings.Config.Console.Minimap.Position; - - public void SetMinimapCaveMode(CaveModeOption mode) - { - _minimapControl.CaveMode = mode; - Settings.Config.Console.Minimap.CaveMode = mode; - } - - public CaveModeOption GetMinimapCaveMode() => _minimapControl.CaveMode; - - private static (HorizontalAlignment h, VerticalAlignment v, Thickness margin) GetMinimapAlignment(MinimapPosition pos) => pos switch - { - MinimapPosition.top_left => (HorizontalAlignment.Left, VerticalAlignment.Top, new Thickness(1, 1, 0, 0)), - MinimapPosition.top_right => (HorizontalAlignment.Right, VerticalAlignment.Top, new Thickness(0, 1, 1, 0)), - MinimapPosition.center => (HorizontalAlignment.Center, VerticalAlignment.Center, new Thickness(0)), - MinimapPosition.bottom_left => (HorizontalAlignment.Left, VerticalAlignment.Bottom, new Thickness(1, 0, 0, 2)), - MinimapPosition.bottom_right => (HorizontalAlignment.Right, VerticalAlignment.Bottom, new Thickness(0, 0, 1, 2)), - _ => (HorizontalAlignment.Right, VerticalAlignment.Top, new Thickness(0, 1, 1, 0)), - }; - - public void ApplyMinimapConfig() - { - var cfg = Settings.Config.Console.Minimap; - if (cfg.Enabled && !_minimapVisible) - ShowMinimap(); - else if (!cfg.Enabled && _minimapVisible) - HideMinimap(); - } - - #endregion - - #region Overlay - - public void ShowOverlay(Control content, Action? onClose = null) - { - if (_overlayContent != null) - HideOverlay(); - - _overlayContent = content; - _overlayCloseCallback = onClose; - _mainContent.IsVisible = false; - - _rootPanel.Children.Add(_overlayContent); - } - - public void HideOverlay() - { - if (_overlayContent == null) return; - - _rootPanel.Children.Remove(_overlayContent); - - _overlayContent = null; - _mainContent.IsVisible = true; - - var cb = _overlayCloseCallback; - _overlayCloseCallback = null; - cb?.Invoke(); - - _commandInput.Focus(); - } - - public bool HasOverlay => _overlayContent != null; - - public Control? OverlayContent => _overlayContent; - - protected override void OnKeyDown(KeyEventArgs e) - { - if (e.Key == Key.Escape && _overlayContent != null) - { - if (_overlayContent is IOverlayCloseHandler closeHandler) - { - if (closeHandler.TryCloseByUser()) - HideOverlay(); - - e.Handled = true; - return; - } - - HideOverlay(); - e.Handled = true; - return; - } - base.OnKeyDown(e); - } - - #endregion - - protected override void OnAttachedToVisualTree(VisualTreeAttachmentEventArgs e) - { - base.OnAttachedToVisualTree(e); - Dispatcher.UIThread.Post(() => - { - _commandInput.Focus(); - }, DispatcherPriority.Loaded); - } - - #region Custom Control Append - - public void AppendControlToLog(Control control) - { - _logLines.Add(string.Empty); - _logControls.Add(control); - TrimLog(); - if (_autoScroll) - ScheduleScrollToEnd(); - } - - #endregion - } -} diff --git a/MinecraftClient/Tui/MapOverlay.cs b/MinecraftClient/Tui/MapOverlay.cs deleted file mode 100644 index a52096f60b..0000000000 --- a/MinecraftClient/Tui/MapOverlay.cs +++ /dev/null @@ -1,499 +0,0 @@ -using System; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Controls.Documents; -using Avalonia.Input; -using Avalonia.Interactivity; -using Avalonia.Layout; -using Avalonia.Media; -using MinecraftClient.ChatBots; - -namespace MinecraftClient.Tui -{ - /// - /// Fullscreen overlay that renders a Minecraft map with interactive zoom and pan. - /// Uses Unicode half-block characters where each terminal cell displays two vertical - /// pixels (foreground = top, background = bottom). Supports mouse wheel zoom with - /// center-anchoring, mouse drag panning, and keyboard navigation. - /// At 100% one terminal column = one map pixel wide; at 200% two columns = one pixel. - /// - internal sealed class MapOverlay : Panel - { - private const double MaxScale = 2.0; - private const double ZoomStep = 0.125; - private const double KeyPanStep = 4.0; - private const double OffsetEpsilon = 0.5; - - private readonly TextBlock _mapBlock; - private readonly TextBlock _headerBlock; - private readonly TextBlock _controlsBlock; - private readonly TextBlock _cornerTL; - private readonly TextBlock _cornerTR; - private readonly TextBlock _cornerBL; - private readonly TextBlock _cornerBR; - - private McMap _map = null!; - private double _scale = 1.0; - private double _offsetX; - private double _offsetY; - private double _fitScale = 1.0; - - private bool _isDragging; - private double _dragStartX; - private double _dragStartY; - private double _dragStartOffsetX; - private double _dragStartOffsetY; - private bool _initialLayoutDone; - - private static readonly IBrush IndicatorActive = Brushes.Yellow; - private static readonly IBrush IndicatorDim = new SolidColorBrush(Color.FromRgb(60, 60, 60)); - - public MapOverlay(McMap map) - { - ArgumentNullException.ThrowIfNull(map); - - HorizontalAlignment = HorizontalAlignment.Stretch; - VerticalAlignment = VerticalAlignment.Stretch; - Focusable = true; - Background = Brushes.Black; - - _mapBlock = new TextBlock - { - TextWrapping = TextWrapping.NoWrap, - Padding = new Thickness(0), - Margin = new Thickness(0), - HorizontalAlignment = HorizontalAlignment.Center, - VerticalAlignment = VerticalAlignment.Center, - }; - - var border = new Border - { - BorderBrush = Brushes.White, - BorderThickness = new Thickness(1), - Padding = new Thickness(0), - Child = _mapBlock, - }; - - _headerBlock = new TextBlock - { - Foreground = Brushes.White, - Background = Brushes.Black, - HorizontalAlignment = HorizontalAlignment.Center, - VerticalAlignment = VerticalAlignment.Top, - Padding = new Thickness(1, 0), - }; - - _controlsBlock = new TextBlock - { - Text = Translations.bot_map_tui_controls, - Foreground = Brushes.Gray, - Background = Brushes.Black, - HorizontalAlignment = HorizontalAlignment.Center, - VerticalAlignment = VerticalAlignment.Bottom, - Padding = new Thickness(1, 0), - }; - - _cornerTL = CreateCornerIndicator(HorizontalAlignment.Left, VerticalAlignment.Top, "\u25E4"); - _cornerTR = CreateCornerIndicator(HorizontalAlignment.Right, VerticalAlignment.Top, "\u25E5"); - _cornerBL = CreateCornerIndicator(HorizontalAlignment.Left, VerticalAlignment.Bottom, "\u25E3"); - _cornerBR = CreateCornerIndicator(HorizontalAlignment.Right, VerticalAlignment.Bottom, "\u25E2"); - - Children.Add(border); - Children.Add(_headerBlock); - Children.Add(_controlsBlock); - Children.Add(_cornerTL); - Children.Add(_cornerTR); - Children.Add(_cornerBL); - Children.Add(_cornerBR); - - AttachedToVisualTree += (_, _) => - { - AddHandler(KeyDownEvent, OnTunnelKeyDown, RoutingStrategies.Tunnel); - AddHandler(TextInputEvent, OnTunnelTextInput, RoutingStrategies.Tunnel); - Focus(); - }; - - DetachedFromVisualTree += (_, _) => - { - RemoveHandler(KeyDownEvent, OnTunnelKeyDown); - RemoveHandler(TextInputEvent, OnTunnelTextInput); - }; - - _map = map; - _scale = double.MinValue; - UpdateHeaderText(); - } - - private static TextBlock CreateCornerIndicator(HorizontalAlignment hAlign, VerticalAlignment vAlign, string glyph) - { - return new TextBlock - { - Text = glyph, - Background = Brushes.Black, - Foreground = IndicatorDim, - HorizontalAlignment = hAlign, - VerticalAlignment = vAlign, - Padding = new Thickness(0), - }; - } - - public void UpdateMap(McMap map) - { - _map = map; - - if (map.Colors is null || map.Width == 0 || map.Height == 0) - return; - - RecalculateFitScale(); - _scale = _fitScale; - _offsetX = 0; - _offsetY = 0; - UpdateHeaderText(); - RenderViewport(); - } - - private void UpdateHeaderText() - { - string zoomText = _scale > 0 ? (_scale * 100).ToString("F1") : "0.0"; - _headerBlock.Text = string.Format(Translations.bot_map_tui_header, - _map.MapId, _map.Width, _map.Height, zoomText); - } - - protected override void OnSizeChanged(SizeChangedEventArgs e) - { - base.OnSizeChanged(e); - - if (_map?.Colors is null || _map.Width == 0 || _map.Height == 0) - return; - - RecalculateFitScale(); - - if (!_initialLayoutDone) - { - _scale = _fitScale; - _offsetX = 0; - _offsetY = 0; - _initialLayoutDone = true; - } - else - { - _scale = Math.Clamp(_scale, _fitScale, MaxScale); - } - - ClampOffset(); - UpdateHeaderText(); - RenderViewport(); - } - - #region Scale / Offset - - private void GetViewportCells(out int viewW, out int viewH) - { - viewW = Math.Max(1, (int)Bounds.Width - 2); - viewH = Math.Max(1, (int)Bounds.Height - 2); - } - - private void RecalculateFitScale() - { - GetViewportCells(out int viewW, out int viewH); - int viewPixelsH = viewH * 2; - - double scaleX = (double)viewW / _map.Width; - double scaleY = (double)viewPixelsH / _map.Height; - _fitScale = Math.Min(scaleX, scaleY); - - if (_fitScale > MaxScale) - _fitScale = MaxScale; - } - - private void ClampOffset() - { - GetViewportCells(out int viewW, out int viewH); - int viewPixelsH = viewH * 2; - - double visibleMapW = viewW / _scale; - double visibleMapH = viewPixelsH / _scale; - - double maxOffX = Math.Max(0, _map.Width - visibleMapW); - double maxOffY = Math.Max(0, _map.Height - visibleMapH); - - _offsetX = Math.Clamp(_offsetX, 0, maxOffX); - _offsetY = Math.Clamp(_offsetY, 0, maxOffY); - } - - private double NextStepScale(bool zoomIn) - { - if (zoomIn) - { - double next = Math.Floor(_scale / ZoomStep + 1.0 - 1e-9) * ZoomStep; - if (next <= _scale + 1e-9) - next += ZoomStep; - return Math.Clamp(next, _fitScale, MaxScale); - } - else - { - double prev = Math.Ceiling(_scale / ZoomStep - 1.0 + 1e-9) * ZoomStep; - if (prev >= _scale - 1e-9) - prev -= ZoomStep; - return Math.Clamp(prev, _fitScale, MaxScale); - } - } - - private void ZoomAtCenter(bool zoomIn) - { - if (_map?.Colors is null) return; - - GetViewportCells(out int viewW, out int viewH); - int viewPixelsH = viewH * 2; - - double centerMapX = _offsetX + (viewW / 2.0) / _scale; - double centerMapY = _offsetY + (viewPixelsH / 2.0) / _scale; - - double newScale = NextStepScale(zoomIn); - if (Math.Abs(newScale - _scale) < 1e-12) - return; - - _scale = newScale; - - _offsetX = centerMapX - (viewW / 2.0) / _scale; - _offsetY = centerMapY - (viewPixelsH / 2.0) / _scale; - ClampOffset(); - UpdateHeaderText(); - RenderViewport(); - } - - #endregion - - #region Rendering - - private void RenderViewport() - { - if (_map?.Colors is null || _map.Width == 0 || _map.Height == 0) - return; - - GetViewportCells(out int viewW, out int viewH); - int viewPixelsH = viewH * 2; - - int mapW = _map.Width; - int mapH = _map.Height; - byte[] colors = _map.Colors; - - int renderCols = Math.Min(viewW, (int)Math.Ceiling(mapW * _scale)); - int renderPixelRows = Math.Min(viewPixelsH, (int)Math.Ceiling(mapH * _scale)); - int renderTextRows = (renderPixelRows + 1) / 2; - - _mapBlock.Inlines ??= []; - _mapBlock.Inlines.Clear(); - - double invScale = 1.0 / _scale; - - for (int r = 0; r < renderTextRows; r++) - { - if (r > 0) - _mapBlock.Inlines.Add(new LineBreak()); - - IBrush? batchFg = null; - IBrush? batchBg = null; - int batchLen = 0; - - for (int c = 0; c < renderCols; c++) - { - int srcX = Math.Clamp((int)(_offsetX + c * invScale), 0, mapW - 1); - int srcTopY = Math.Clamp((int)(_offsetY + (r * 2) * invScale), 0, mapH - 1); - int srcBotY = Math.Clamp((int)(_offsetY + (r * 2 + 1) * invScale), 0, mapH - 1); - - ColorRGBA top = MapColors.ColorByteToRGBA(colors[srcX + srcTopY * mapW]); - ColorRGBA bot = MapColors.ColorByteToRGBA(colors[srcX + srcBotY * mapW]); - - var fg = new SolidColorBrush(Color.FromRgb(top.R, top.G, top.B)); - var bg = new SolidColorBrush(Color.FromRgb(bot.R, bot.G, bot.B)); - - if (batchLen > 0 && ColorsEqual(batchFg!, fg) && ColorsEqual(batchBg!, bg)) - { - batchLen++; - } - else - { - if (batchLen > 0) - FlushBatch(batchFg!, batchBg!, batchLen); - - batchFg = fg; - batchBg = bg; - batchLen = 1; - } - } - - if (batchLen > 0) - FlushBatch(batchFg!, batchBg!, batchLen); - } - - UpdateCornerIndicators(); - } - - private void FlushBatch(IBrush fg, IBrush bg, int count) - { - _mapBlock.Inlines!.Add(new Run(new string('\u2580', count)) - { - Foreground = fg, - Background = bg, - }); - } - - private static bool ColorsEqual(IBrush a, IBrush b) - { - if (a is SolidColorBrush sa && b is SolidColorBrush sb) - return sa.Color == sb.Color; - return false; - } - - private void UpdateCornerIndicators() - { - GetViewportCells(out int viewW, out int viewH); - int viewPixelsH = viewH * 2; - - double visibleW = viewW / _scale; - double visibleH = viewPixelsH / _scale; - - bool moreLeft = _offsetX > OffsetEpsilon; - bool moreTop = _offsetY > OffsetEpsilon; - bool moreRight = _offsetX + visibleW < _map.Width - OffsetEpsilon; - bool moreBottom = _offsetY + visibleH < _map.Height - OffsetEpsilon; - - _cornerTL.Foreground = (moreLeft || moreTop) ? IndicatorActive : IndicatorDim; - _cornerTR.Foreground = (moreRight || moreTop) ? IndicatorActive : IndicatorDim; - _cornerBL.Foreground = (moreLeft || moreBottom) ? IndicatorActive : IndicatorDim; - _cornerBR.Foreground = (moreRight || moreBottom) ? IndicatorActive : IndicatorDim; - } - - #endregion - - #region Mouse interaction - - protected override void OnPointerWheelChanged(PointerWheelEventArgs e) - { - ZoomAtCenter(e.Delta.Y > 0); - e.Handled = true; - } - - protected override void OnPointerPressed(PointerPressedEventArgs e) - { - var props = e.GetCurrentPoint(this).Properties; - if (!props.IsLeftButtonPressed) - return; - - _isDragging = true; - var pos = e.GetPosition(this); - _dragStartX = pos.X; - _dragStartY = pos.Y; - _dragStartOffsetX = _offsetX; - _dragStartOffsetY = _offsetY; - e.Pointer.Capture(this); - e.Handled = true; - } - - protected override void OnPointerMoved(PointerEventArgs e) - { - if (!_isDragging) return; - - var pos = e.GetPosition(this); - double dxCells = pos.X - _dragStartX; - double dyCells = pos.Y - _dragStartY; - - _offsetX = _dragStartOffsetX - dxCells / _scale; - _offsetY = _dragStartOffsetY - dyCells * 2.0 / _scale; - ClampOffset(); - RenderViewport(); - e.Handled = true; - } - - protected override void OnPointerReleased(PointerReleasedEventArgs e) - { - if (!_isDragging) return; - - _isDragging = false; - e.Pointer.Capture(null); - e.Handled = true; - } - - #endregion - - #region Keyboard interaction - - private void OnTunnelKeyDown(object? sender, KeyEventArgs e) - { - if (e.Key is Key.Escape or Key.E) - { - TuiConsoleBackend.Instance?.DismissOverlay(); - e.Handled = true; - } - } - - private void OnTunnelTextInput(object? sender, TextInputEventArgs e) - { - if (e.Text is "+" or "=") - { - ZoomAtCenter(true); - e.Handled = true; - } - else if (e.Text is "-") - { - ZoomAtCenter(false); - e.Handled = true; - } - } - - protected override void OnKeyDown(KeyEventArgs e) - { - switch (e.Key) - { - case Key.Escape: - case Key.E: - TuiConsoleBackend.Instance?.DismissOverlay(); - e.Handled = true; - return; - - case Key.Add: - ZoomAtCenter(true); - e.Handled = true; - return; - - case Key.Subtract: - ZoomAtCenter(false); - e.Handled = true; - return; - - case Key.Left: - _offsetX -= KeyPanStep / _scale; - ClampOffset(); - RenderViewport(); - e.Handled = true; - return; - - case Key.Right: - _offsetX += KeyPanStep / _scale; - ClampOffset(); - RenderViewport(); - e.Handled = true; - return; - - case Key.Up: - _offsetY -= KeyPanStep / _scale; - ClampOffset(); - RenderViewport(); - e.Handled = true; - return; - - case Key.Down: - _offsetY += KeyPanStep / _scale; - ClampOffset(); - RenderViewport(); - e.Handled = true; - return; - } - - base.OnKeyDown(e); - } - - #endregion - } -} diff --git a/MinecraftClient/Tui/McColorParser.cs b/MinecraftClient/Tui/McColorParser.cs deleted file mode 100644 index 8f3ac5f248..0000000000 --- a/MinecraftClient/Tui/McColorParser.cs +++ /dev/null @@ -1,165 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Globalization; -using Avalonia.Controls; -using Avalonia.Controls.Documents; -using Avalonia.Media; - -namespace MinecraftClient.Tui -{ - /// - /// Parses Minecraft § color codes and produces Avalonia Inlines for rich text display. - /// - public static class McColorParser - { - private static readonly Dictionary ColorMap = new() - { - { '0', new SolidColorBrush(Color.FromRgb(0, 0, 0)) }, - { '1', new SolidColorBrush(Color.FromRgb(0, 0, 170)) }, - { '2', new SolidColorBrush(Color.FromRgb(0, 170, 0)) }, - { '3', new SolidColorBrush(Color.FromRgb(0, 170, 170)) }, - { '4', new SolidColorBrush(Color.FromRgb(170, 0, 0)) }, - { '5', new SolidColorBrush(Color.FromRgb(170, 0, 170)) }, - { '6', new SolidColorBrush(Color.FromRgb(255, 170, 0)) }, - { '7', new SolidColorBrush(Color.FromRgb(170, 170, 170)) }, - { '8', new SolidColorBrush(Color.FromRgb(85, 85, 85)) }, - { '9', new SolidColorBrush(Color.FromRgb(85, 85, 255)) }, - { 'a', new SolidColorBrush(Color.FromRgb(85, 255, 85)) }, - { 'b', new SolidColorBrush(Color.FromRgb(85, 255, 255)) }, - { 'c', new SolidColorBrush(Color.FromRgb(255, 85, 85)) }, - { 'd', new SolidColorBrush(Color.FromRgb(255, 85, 255)) }, - { 'e', new SolidColorBrush(Color.FromRgb(255, 255, 85)) }, - { 'f', Brushes.White }, - }; - - public static TextBlock CreateColoredTextBlock(string text, TextWrapping wrapping = TextWrapping.Wrap) - { - var tb = new TextBlock - { - TextWrapping = wrapping, - Padding = new Avalonia.Thickness(0), - Margin = new Avalonia.Thickness(0), - }; - - if (string.IsNullOrEmpty(text) || !text.Contains('§')) - { - tb.Text = text ?? ""; - tb.Foreground = Brushes.White; - return tb; - } - - tb.Background = Brushes.Black; - - IBrush currentColor = Brushes.White; - bool bold = false; - bool italic = false; - bool underline = false; - bool strikethrough = false; - int start = 0; - - for (int i = 0; i < text.Length; i++) - { - if (text[i] == '§' && i + 1 < text.Length) - { - if (i > start) - AddRun(tb, text[start..i], currentColor, bold, italic, underline, strikethrough); - - if (text[i + 1] == '#' && i + 8 <= text.Length - && TryParseHexColor(text.AsSpan(i + 2, 6), out var hexBrush)) - { - currentColor = hexBrush; - bold = false; - italic = false; - underline = false; - strikethrough = false; - i += 7; - start = i + 1; - continue; - } - - char code = char.ToLower(text[i + 1]); - - if (ColorMap.TryGetValue(code, out var brush)) - { - currentColor = brush; - bold = false; - italic = false; - underline = false; - strikethrough = false; - } - else - { - switch (code) - { - case 'l': bold = true; break; - case 'o': italic = true; break; - case 'n': underline = true; break; - case 'm': strikethrough = true; break; - case 'r': - currentColor = Brushes.White; - bold = false; - italic = false; - underline = false; - strikethrough = false; - break; - } - } - - i++; - start = i + 1; - } - } - - if (start < text.Length) - AddRun(tb, text[start..], currentColor, bold, italic, underline, strikethrough); - - if (tb.Inlines?.Count == 0) - { - tb.Text = ""; - tb.Foreground = Brushes.White; - } - - return tb; - } - - private static bool TryParseHexColor(ReadOnlySpan hex, out IBrush brush) - { - if (hex.Length == 6 - && byte.TryParse(hex[..2], NumberStyles.HexNumber, CultureInfo.InvariantCulture, out byte r) - && byte.TryParse(hex[2..4], NumberStyles.HexNumber, CultureInfo.InvariantCulture, out byte g) - && byte.TryParse(hex[4..6], NumberStyles.HexNumber, CultureInfo.InvariantCulture, out byte b)) - { - brush = new SolidColorBrush(Color.FromRgb(r, g, b)); - return true; - } - brush = Brushes.White; - return false; - } - - private static void AddRun(TextBlock tb, string text, IBrush color, - bool bold, bool italic, bool underline, bool strikethrough) - { - if (text.Length == 0) return; - - tb.Inlines ??= new InlineCollection(); - - TextDecorationCollection? decorations = null; - if (underline || strikethrough) - { - decorations = []; - if (underline) - decorations.Add(new TextDecoration { Location = TextDecorationLocation.Underline }); - if (strikethrough) - decorations.Add(new TextDecoration { Location = TextDecorationLocation.Strikethrough }); - } - - tb.Inlines.Add(new Run(text) - { - Foreground = color, - FontWeight = bold ? FontWeight.Bold : FontWeight.Normal, - FontStyle = italic ? FontStyle.Italic : FontStyle.Normal, - TextDecorations = decorations, - }); - } - } -} diff --git a/MinecraftClient/Tui/MccBannerPanelBuilder.cs b/MinecraftClient/Tui/MccBannerPanelBuilder.cs deleted file mode 100644 index 2ebab67311..0000000000 --- a/MinecraftClient/Tui/MccBannerPanelBuilder.cs +++ /dev/null @@ -1,183 +0,0 @@ -using Avalonia; -using Avalonia.Controls; -using Avalonia.Controls.Documents; -using Avalonia.Layout; -using Avalonia.Media; - -namespace MinecraftClient.Tui -{ - internal static class MccBannerPanelBuilder - { - internal static Border Build(string? buildInfo) - { - var contentPanel = new DockPanel { Background = Brushes.Black }; - - var icon = BuildIcon(); - icon.VerticalAlignment = VerticalAlignment.Center; - DockPanel.SetDock(icon, Dock.Left); - contentPanel.Children.Add(icon); - - var infoPanel = new StackPanel - { - Orientation = Orientation.Vertical, - Margin = new Thickness(1, 0, 0, 0), - VerticalAlignment = VerticalAlignment.Center, - }; - - AddTitle(infoPanel); - AddVersionRange(infoPanel); - AddGithub(infoPanel); - - if (Settings.Config.Main.Advanced.ShowGithubStarReminder) - AddStarReminder(infoPanel); - - if (buildInfo is not null) - AddBuildInfo(infoPanel, buildInfo); - - contentPanel.Children.Add(infoPanel); - - return new Border - { - BorderBrush = new SolidColorBrush(Color.FromRgb(80, 80, 80)), - BorderThickness = new Thickness(1), - Background = new SolidColorBrush(Color.FromArgb(240, 20, 20, 20)), - Padding = new Thickness(1, 0), - Child = contentPanel, - Margin = new Thickness(0), - }; - } - - private static void AddTitle(StackPanel panel) - { - var row = new TextBlock(); - row.Inlines!.Add(new Run("Minecraft Console Client") - { Foreground = Pal.Gold, FontWeight = FontWeight.Bold }); - row.Inlines.Add(new Run($" v{Program.Version}") { Foreground = Pal.Aqua }); - panel.Children.Add(row); - } - - private static void AddVersionRange(StackPanel panel) - { - var row = new TextBlock(); - row.Inlines!.Add(Lbl(Translations.mcc_banner_label_mc_versions)); - row.Inlines.Add(Val(Program.MCLowestVersion, Pal.Green)); - row.Inlines.Add(new Run(" - ") { Foreground = Pal.Gray }); - row.Inlines.Add(Val(Program.MCHighestVersion, Pal.Green)); - panel.Children.Add(row); - } - - private static void AddGithub(StackPanel panel) - { - var row = new TextBlock(); - row.Inlines!.Add(Val("https://github.com/MCCTeam", Pal.Gray)); - panel.Children.Add(row); - } - - private static void AddStarReminder(StackPanel panel) - { - var row = new TextBlock(); - row.Inlines!.Add(new Run("\u2b50 ") { Foreground = Pal.Gold }); - row.Inlines.Add(Val("Star us on GitHub!", Pal.Gold)); - panel.Children.Add(row); - } - - private static void AddBuildInfo(StackPanel panel, string buildInfo) - { - panel.Children.Add(new TextBlock - { - Text = buildInfo, - Foreground = Pal.DarkGray, - }); - } - - #region Icon - - private static readonly Color B1 = Color.FromRgb(200, 200, 200); // bezel bright - private static readonly Color B2 = Color.FromRgb(160, 160, 160); // bezel mid - private static readonly Color B3 = Color.FromRgb(120, 120, 120); // bezel dark - private static readonly Color S = Color.FromRgb(20, 20, 20); // screen bg - private static readonly Color C = Color.FromRgb(55, 200, 55); // creeper green - - // @formatter:off - private static readonly Color[,] Pixels = - { - { B1, B1, B1, B1, B1, B1, B1, B1, B1, B1, B1, B1, B1, B1, B1, B1, B2 }, - { B1, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, B3 }, - { B1, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, B3 }, - { B1, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, B3 }, - { B1, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, B3 }, - { B1, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, B3 }, - { B1, S, S, S, S, S, S, S, S, C, C, S, S, C, C, S, B3 }, - { B1, S, S, S, S, S, S, S, S, C, C, S, S, C, C, S, B3 }, - { B1, S, S, S, S, S, S, S, S, S, S, C, C, S, S, S, B3 }, - { B1, S, S, S, S, S, S, S, S, S, C, C, C, C, S, S, B3 }, - { B1, S, S, S, S, S, S, S, S, S, C, C, C, C, S, S, B3 }, - { B1, S, S, S, S, S, S, S, S, S, C, S, S, C, S, S, B3 }, - { B1, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S, B3 }, - { B2, B3, B3, B3, B3, B3, B3, B3, B3, B3, B3, B3, B3, B3, B3, B3, B3 }, - }; - // @formatter:on - - private static Control BuildIcon() - { - int cols = Pixels.GetLength(1); - int textRows = Pixels.GetLength(0) / 2; - - var panel = new StackPanel - { - Orientation = Orientation.Vertical, - Margin = new Thickness(0), - }; - - for (int row = 0; row < textRows; row++) - { - var line = new TextBlock { Padding = new Thickness(0), Margin = new Thickness(0) }; - - for (int col = 0; col < cols; col++) - { - var topColor = Pixels[row * 2, col]; - var bottomColor = Pixels[row * 2 + 1, col]; - - if (row == 1 && col == 1) - { - line.Inlines!.Add(new Run(" \uff1e_") - { - Foreground = new SolidColorBrush(Color.FromRgb(255, 255, 255)), - Background = new SolidColorBrush(S), - }); - col += 4; - topColor = Pixels[row * 2, col]; - bottomColor = Pixels[row * 2 + 1, col]; - } - - line.Inlines!.Add(new Run("\u2580") - { - Foreground = new SolidColorBrush(topColor), - Background = new SolidColorBrush(bottomColor), - }); - } - - panel.Children.Add(line); - } - - return panel; - } - - #endregion - - private static Run Lbl(string text) => - new(text + " ") { Foreground = Pal.Gray }; - - private static Run Val(string text, IBrush color) => - new(text) { Foreground = color }; - - private static class Pal - { - public static readonly IBrush Gray = new SolidColorBrush(Color.FromRgb(170, 170, 170)); - public static readonly IBrush DarkGray = new SolidColorBrush(Color.FromRgb(85, 85, 85)); - public static readonly IBrush Aqua = new SolidColorBrush(Color.FromRgb(85, 255, 255)); - public static readonly IBrush Green = new SolidColorBrush(Color.FromRgb(85, 255, 85)); - public static readonly IBrush Gold = new SolidColorBrush(Color.FromRgb(255, 170, 0)); - } - } -} diff --git a/MinecraftClient/Tui/MccTuiApp.cs b/MinecraftClient/Tui/MccTuiApp.cs deleted file mode 100644 index 3db7702942..0000000000 --- a/MinecraftClient/Tui/MccTuiApp.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Avalonia; -using Avalonia.Controls; -using Avalonia.Controls.ApplicationLifetimes; -using Avalonia.Media; -using Consolonia.Themes; - -namespace MinecraftClient.Tui -{ - public class MccTuiApp : Application - { - public override void Initialize() - { - Styles.Add(new ModernTheme()); - } - - public override void OnFrameworkInitializationCompleted() - { - if (ApplicationLifetime is IClassicDesktopStyleApplicationLifetime desktop) - { - var view = new MainTuiView(); - TuiConsoleBackend.Instance?.SetView(view); - - desktop.MainWindow = new Window - { - Content = view, - Title = "Minecraft Console Client", - Background = Brushes.Black, - Padding = new Thickness(0), - }; - } - - base.OnFrameworkInitializationCompleted(); - } - } -} diff --git a/MinecraftClient/Tui/MinimapColorMap.cs b/MinecraftClient/Tui/MinimapColorMap.cs deleted file mode 100644 index b0b09596a3..0000000000 --- a/MinecraftClient/Tui/MinimapColorMap.cs +++ /dev/null @@ -1,191 +0,0 @@ -using System; -using System.Collections.Frozen; -using System.Collections.Generic; -using System.Reflection; -using System.Text.Json; -using Avalonia.Media; -using MinecraftClient.Mapping; - -namespace MinecraftClient.Tui -{ - /// - /// Maps block Materials to minimap colors using data extracted from Minecraft's - /// official MapColor table. Colors are loaded from the embedded MinimapBlockColors.json - /// resource generated by tools/gen_block_color_map.py. - /// - public static class MinimapColorMap - { - public static readonly Color WaterColor = Color.FromRgb(64, 64, 255); - public static readonly Color IceColor = Color.FromRgb(160, 160, 255); - public static readonly Color LavaColor = Color.FromRgb(255, 100, 0); - public static readonly Color DefaultColor = Color.FromRgb(60, 60, 60); - public static readonly Color VoidColor = Color.FromRgb(0, 0, 0); - public static readonly Color CaveBorderColor = Color.FromRgb(16, 16, 16); - public static readonly Color CaveSolidColor = Color.FromRgb(24, 20, 18); - - private static readonly FrozenDictionary ColorTable; - private static readonly FrozenSet FullyTransparentMats; - private static readonly FrozenSet WaterMats; - private static readonly FrozenSet IceMats; - - static MinimapColorMap() - { - var colors = new Dictionary(); - var transparent = new HashSet(); - var water = new HashSet(); - var ice = new HashSet(); - - try - { - using var stream = Assembly.GetExecutingAssembly() - .GetManifestResourceStream("MinimapBlockColors.json"); - if (stream is not null) - { - using var doc = JsonDocument.Parse(stream); - var root = doc.RootElement; - - if (root.TryGetProperty("colors", out var colorsEl)) - { - foreach (var prop in colorsEl.EnumerateObject()) - { - if (!Enum.TryParse(prop.Name, out var mat)) - continue; - var arr = prop.Value; - if (arr.GetArrayLength() < 3) continue; - byte r = (byte)arr[0].GetInt32(); - byte g = (byte)arr[1].GetInt32(); - byte b = (byte)arr[2].GetInt32(); - colors[mat] = Color.FromRgb(r, g, b); - } - } - - if (root.TryGetProperty("transparent", out var transEl)) - { - foreach (var item in transEl.EnumerateArray()) - { - if (Enum.TryParse(item.GetString(), out var mat)) - transparent.Add(mat); - } - } - - if (root.TryGetProperty("water", out var waterEl)) - { - foreach (var item in waterEl.EnumerateArray()) - { - if (Enum.TryParse(item.GetString(), out var mat)) - water.Add(mat); - } - } - - if (root.TryGetProperty("ice", out var iceEl)) - { - foreach (var item in iceEl.EnumerateArray()) - { - if (Enum.TryParse(item.GetString(), out var mat)) - ice.Add(mat); - } - } - } - } - catch (Exception ex) - { - ConsoleIO.WriteLineFormatted($"\u00a7e[Minimap] Failed to load color data: {ex.Message}"); - } - - if (transparent.Count == 0) - { - transparent.Add(Material.Air); - transparent.Add(Material.CaveAir); - transparent.Add(Material.VoidAir); - } - if (water.Count == 0) - water.Add(Material.Water); - if (ice.Count == 0) - { - ice.Add(Material.Ice); - ice.Add(Material.PackedIce); - ice.Add(Material.BlueIce); - ice.Add(Material.FrostedIce); - } - - ColorTable = colors.ToFrozenDictionary(); - FullyTransparentMats = transparent.ToFrozenSet(); - WaterMats = water.ToFrozenSet(); - IceMats = ice.ToFrozenSet(); - } - - public static bool IsFullyTransparent(Material m) => FullyTransparentMats.Contains(m); - - /// - /// Returns true for materials that block light propagation (solid, liquids), - /// used by cave mode to find the surface from the player's Y level. - /// Mirrors VoxelMap's lightDampening > 0 check. - /// - public static bool IsLightBlocking(Material m) - => (m == Material.Lava) || (!FullyTransparentMats.Contains(m) && m.IsSolid()); - - public static bool IsWater(Material m) => WaterMats.Contains(m); - - public static bool IsIce(Material m) => IceMats.Contains(m); - - public static Color GetBaseColor(Material m) - { - if (m == Material.Lava) - return LavaColor; - return ColorTable.GetValueOrDefault(m, DefaultColor); - } - - /// - /// Apply Minecraft-style height shading. The shade multiplier depends on - /// the height difference between the current block and the block to its north. - /// Vanilla maps use four brightness levels: LOW (180/255), NORMAL (220/255), - /// HIGH (255/255), and LOWEST (135/255). We use NORMAL as baseline and shift - /// up/down based on delta. - /// - public static Color ApplyHeightShade(Color baseColor, int heightDelta) - { - int multiplier = heightDelta switch - { - > 0 => 255, // higher than neighbor: brightest - 0 => 220, // same height: normal - _ => 180, // lower than neighbor: darker - }; - byte r = (byte)(baseColor.R * multiplier / 255); - byte g = (byte)(baseColor.G * multiplier / 255); - byte b = (byte)(baseColor.B * multiplier / 255); - return Color.FromRgb(r, g, b); - } - - public static Color BlendWaterColor(Color bottomColor, int waterDepth) - { - double alpha = Math.Min(0.85, 0.35 + waterDepth * 0.08); - return Blend(WaterColor, bottomColor, alpha); - } - - public static Color BlendIceColor(Color bottomColor) - { - return Blend(IceColor, bottomColor, 0.35); - } - - /// - /// Darken a color to simulate underground lighting. Cave floors receive - /// a minimum brightness of ~32/255 for non-solid blocks (matching VoxelMap), - /// while solid/unreachable columns render as near-black. - /// - public static Color ApplyCaveDarkening(Color baseColor, double factor = 0.55) - { - byte r = (byte)(baseColor.R * factor); - byte g = (byte)(baseColor.G * factor); - byte b = (byte)(baseColor.B * factor); - return Color.FromRgb(r, g, b); - } - - private static Color Blend(Color top, Color bottom, double topAlpha) - { - byte r = (byte)(top.R * topAlpha + bottom.R * (1.0 - topAlpha)); - byte g = (byte)(top.G * topAlpha + bottom.G * (1.0 - topAlpha)); - byte b = (byte)(top.B * topAlpha + bottom.B * (1.0 - topAlpha)); - return Color.FromRgb(r, g, b); - } - } -} diff --git a/MinecraftClient/Tui/MinimapControl.cs b/MinecraftClient/Tui/MinimapControl.cs deleted file mode 100644 index 616b44e54a..0000000000 --- a/MinecraftClient/Tui/MinimapControl.cs +++ /dev/null @@ -1,1267 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Input; -using Avalonia.Layout; -using Avalonia.Media; -using Avalonia.Threading; -using MinecraftClient.Mapping; - -namespace MinecraftClient.Tui -{ - public enum CaveModeOption { auto, on, off } - - /// - /// TUI minimap control rendered as a grid of TextBlocks using half-block characters. - /// Zoom is expressed as blocks-per-pixel (1 = 1:1, 16 = 16 blocks per pixel). - /// Entity names are drawn directly on the map below their icon. - /// - public class MinimapControl : UserControl - { - public const int MinZoom = 1; - public const int MaxZoom = 16; - public const int DefaultZoom = 2; - public const int DefaultWidth = 40; - public const int DefaultHeight = 40; - public const int DefaultRefreshMs = 1000; - public const int MinRefreshMs = 100; - public const int MaxRefreshMs = 5000; - - private int _mapWidth; - private int _mapHeight; - private int _cellRows; - - private int _blocksPerPixel = DefaultZoom; - private volatile bool _sampling; - private CancellationTokenSource? _cts; - - private readonly NameDisplayConfig _nameConfig = new(); - - private TextBlock[,] _cells; - private readonly StackPanel _infoRow; - private readonly StackPanel _legendPanel; - private readonly Grid _mapGrid; - private readonly DispatcherTimer _timer; - - private SampleResult? _lastResult; - private int _hoverCol = -1; - private int _hoverRow = -1; - private double _hoverGlobalX; - private double _hoverGlobalY; - - public int BlocksPerPixel - { - get => _blocksPerPixel; - set => _blocksPerPixel = Math.Clamp(value, MinZoom, MaxZoom); - } - - public NameDisplayConfig NameConfig => _nameConfig; - - public TuiTooltipService? TooltipService { get; set; } - - public MinimapPosition Position { get; set; } = MinimapPosition.top_right; - - public CaveModeOption CaveMode { get; set; } = CaveModeOption.auto; - - public int MapPixelWidth => _mapWidth; - public int MapPixelHeight => _mapHeight; - - public int RefreshIntervalMs - { - get => (int)_timer.Interval.TotalMilliseconds; - set => _timer.Interval = TimeSpan.FromMilliseconds(Math.Clamp(value, MinRefreshMs, MaxRefreshMs)); - } - - public MinimapControl() : this(DefaultWidth, DefaultHeight) { } - - public MinimapControl(int width, int height) - { - _mapWidth = Math.Max(10, width); - _mapHeight = Math.Max(4, height % 2 == 0 ? height : height + 1); - _cellRows = _mapHeight / 2; - - _mapGrid = new Grid(); - _cells = BuildGrid(_mapGrid, _cellRows, _mapWidth); - - _infoRow = new StackPanel { Orientation = Orientation.Horizontal }; - _legendPanel = new StackPanel { Orientation = Orientation.Horizontal }; - - var root = new StackPanel - { - Orientation = Orientation.Vertical, - Children = { _mapGrid, _infoRow, _legendPanel }, - }; - - Content = root; - - _mapGrid.PointerMoved += OnMapPointerMoved; - _mapGrid.PointerExited += OnMapPointerExited; - - _timer = new DispatcherTimer - { - Interval = TimeSpan.FromMilliseconds(DefaultRefreshMs), - }; - _timer.Tick += (_, _) => RequestSample(); - } - - public void Resize(int width, int height) - { - _mapWidth = Math.Max(10, width); - _mapHeight = Math.Max(4, height % 2 == 0 ? height : height + 1); - _cellRows = _mapHeight / 2; - - _mapGrid.Children.Clear(); - _mapGrid.RowDefinitions.Clear(); - _mapGrid.ColumnDefinitions.Clear(); - _cells = BuildGrid(_mapGrid, _cellRows, _mapWidth); - } - - private static TextBlock[,] BuildGrid(Grid grid, int rows, int cols) - { - var cells = new TextBlock[rows, cols]; - for (int r = 0; r < rows; r++) - grid.RowDefinitions.Add(new RowDefinition(GridLength.Auto)); - for (int c = 0; c < cols; c++) - grid.ColumnDefinitions.Add(new ColumnDefinition(GridLength.Auto)); - - for (int r = 0; r < rows; r++) - { - for (int c = 0; c < cols; c++) - { - var tb = new TextBlock - { - Text = "\u2580", - Foreground = Brushes.Black, - Background = Brushes.Black, - Padding = new Thickness(0), - Margin = new Thickness(0), - FontSize = 1, - }; - Grid.SetRow(tb, r); - Grid.SetColumn(tb, c); - grid.Children.Add(tb); - cells[r, c] = tb; - } - } - return cells; - } - - public void Start() - { - _cts = new CancellationTokenSource(); - _timer.Start(); - RequestSample(); - } - - public void Stop() - { - _timer.Stop(); - _cts?.Cancel(); - _cts?.Dispose(); - _cts = null; - } - - private void RequestSample() - { - if (_sampling) return; - if (McClient.Instance is not McClient client) return; - if (!client.GetTerrainEnabled()) return; - - _sampling = true; - var ct = _cts?.Token ?? CancellationToken.None; - int bpp = _blocksPerPixel; - int w = _mapWidth; - int h = _mapHeight; - - bool showPlayers = _nameConfig.Players; - bool showHostile = _nameConfig.Hostile; - bool showNeutral = _nameConfig.Neutral; - bool showPassive = _nameConfig.Passive; - var caveOpt = CaveMode; - - Task.Run(() => - { - try - { - var result = SampleTerrain(client, bpp, w, h, - showPlayers, showHostile, showNeutral, showPassive, caveOpt, ct); - if (ct.IsCancellationRequested) return; - - Dispatcher.UIThread.Post(() => - { - ApplyPixelBuffer(result, w, h); - UpdateInfoBarAndLegend(client, bpp, result.VisibleCategories, w, - result.CaveModeActive); - }); - } - catch (OperationCanceledException) { } - catch (Exception ex) - { - ConsoleIO.WriteLineFormatted($"\u00a7e[Minimap] Sample error: {ex.Message}"); - } - finally - { - _sampling = false; - } - }, ct); - } - - internal sealed class EntityLabel - { - public string Name = ""; - public Color LabelColor; - public int PixelX; - public int PixelY; - } - - internal sealed class PixelEntityInfo - { - public string Name = ""; - public MobCategory Category; - public double X, Y, Z; - public float Health; - public float MaxHealth; - public int Priority; - } - - private sealed class SampleResult - { - public Color[,] Pixels = null!; - public (char Ch, Color Fg, Color Bg)?[,] CharOverlay = null!; - public HashSet VisibleCategories = []; - public int[,] Heights = null!; - public Material[,]? BlockTypes; - public List<(Material Mat, int Count)>?[,]? BlockSummary; - public List?[,]? EntityMap; - public int PlayerBlockX; - public int PlayerBlockZ; - public int CenterX; - public int CenterY; - public int Bpp; - public bool CaveModeActive; - } - - private static bool ShouldShowNameLocal(MobCategory cat, - bool showPlayers, bool showHostile, bool showNeutral, bool showPassive) - { - return cat switch - { - MobCategory.Player => showPlayers, - MobCategory.Hostile => showHostile, - MobCategory.Neutral => showNeutral, - MobCategory.Passive => showPassive, - _ => false, - }; - } - - private static SampleResult SampleTerrain(McClient client, int bpp, int mapW, int mapH, - bool showPlayers, bool showHostile, bool showNeutral, bool showPassive, - CaveModeOption caveOpt, CancellationToken ct) - { - var result = new SampleResult - { - Pixels = new Color[mapW, mapH], - CharOverlay = new (char, Color, Color)?[mapW, mapH / 2], - Heights = new int[mapW, mapH], - EntityMap = new List?[mapW, mapH], - BlockTypes = bpp == 1 ? new Material[mapW, mapH] : null, - BlockSummary = bpp > 1 ? new List<(Material, int)>?[mapW, mapH] : null, - Bpp = bpp, - }; - var world = client.GetWorld(); - var playerLoc = client.GetCurrentLocation(); - - int playerBlockX = (int)Math.Floor(playerLoc.X); - int playerBlockZ = (int)Math.Floor(playerLoc.Z); - int playerBlockY = (int)Math.Floor(playerLoc.Y); - - result.PlayerBlockX = playerBlockX; - result.PlayerBlockZ = playerBlockZ; - result.CenterX = mapW / 2; - result.CenterY = mapH / 2; - - var dim = World.GetDimension(); - int minY = dim.minY; - int scanTop = Math.Min(playerBlockY + 32, dim.maxY - 1); - - bool caveMode = ResolveCaveMode(caveOpt, world, dim, playerBlockX, playerBlockY, playerBlockZ, scanTop); - result.CaveModeActive = caveMode; - - var entities = client.GetEntityHandlingEnabled() - ? client.GetEntities() - : null; - - var entityPixels = new Dictionary<(int, int), (Color Color, int Priority)>(); - int centerX = mapW / 2; - int centerY = mapH / 2; - - var nameLabels = new List(); - var uuidNameMap = client.GetOnlinePlayersWithUUID(); - - if (entities is not null) - { - int playerEntityId = client.GetPlayerEntityID(); - foreach (var kvp in entities) - { - if (ct.IsCancellationRequested) return result; - var entity = kvp.Value; - var cat = MinimapEntityClassifier.Classify(entity.Type); - if (cat == MobCategory.NonLiving) continue; - if (kvp.Key == playerEntityId) continue; - - if (!MinimapEntityClassifier.ShouldDisplay(cat, playerLoc.Y, entity.Location.Y)) - continue; - - double relX = (entity.Location.X - playerLoc.X) / bpp; - double relZ = (entity.Location.Z - playerLoc.Z) / bpp; - int px = (int)Math.Floor(relX) + centerX; - int py = (int)Math.Floor(relZ) + centerY; - - if (px < 0 || px >= mapW || py < 0 || py >= mapH) continue; - - var baseColor = MinimapEntityClassifier.GetBaseColor(cat); - Color color; - if (cat == MobCategory.Player) - color = baseColor; - else - color = MinimapEntityClassifier.ApplyDepthFade(baseColor, playerLoc.Y, entity.Location.Y); - int priority = MinimapEntityClassifier.GetPriority(cat); - - var key = (px, py); - if (!entityPixels.TryGetValue(key, out var existing) || priority > existing.Priority) - entityPixels[key] = (color, priority); - - result.VisibleCategories.Add(cat); - - string eName = ResolveEntityName(client, entity, cat, uuidNameMap); - var pixelList = result.EntityMap![px, py] ??= []; - pixelList.Add(new PixelEntityInfo - { - Name = eName, - Category = cat, - X = entity.Location.X, - Y = entity.Location.Y, - Z = entity.Location.Z, - Health = entity.Health, - MaxHealth = -1, - Priority = priority, - }); - - if (ShouldShowNameLocal(cat, showPlayers, showHostile, showNeutral, showPassive)) - { - string name = ResolveEntityName(client, entity, cat, uuidNameMap); - nameLabels.Add(new EntityLabel - { - Name = name, - LabelColor = color, - PixelX = px, - PixelY = py, - }); - } - } - } - - entityPixels[(centerX, centerY)] = (MinimapEntityClassifier.PlayerColor, 5); - result.VisibleCategories.Add(MobCategory.Player); - - var selfList = result.EntityMap![centerX, centerY] ??= []; - selfList.Add(new PixelEntityInfo - { - Name = client.GetUsername(), - Category = MobCategory.Player, - X = playerLoc.X, - Y = playerLoc.Y, - Z = playerLoc.Z, - Health = client.GetHealth(), - MaxHealth = 20f, - Priority = 5, - }); - - ChunkColumn? cachedColumn = null; - int cachedChunkX = int.MinValue, cachedChunkZ = int.MinValue; - - bool[,]? caveMask = caveMode ? new bool[mapW, mapH] : null; - - for (int px = 0; px < mapW; px++) - { - for (int py = 0; py < mapH; py++) - { - if (ct.IsCancellationRequested) return result; - - int baseX = playerBlockX + (px - centerX) * bpp; - int baseZ = playerBlockZ + (py - centerY) * bpp; - - if (caveMode) - { - if (bpp == 1) - { - var (color, surfY, surfMat, inCave) = SampleColumnCave( - world, baseX, baseZ, playerBlockY, minY, dim.maxY - 1, - ref cachedColumn, ref cachedChunkX, ref cachedChunkZ); - result.Pixels[px, py] = color; - result.Heights[px, py] = surfY; - result.BlockTypes![px, py] = surfMat; - caveMask![px, py] = inCave; - } - else - { - var (color, surfY, matSum, inCave) = SampleAreaDominantCave( - world, baseX, baseZ, bpp, playerBlockY, minY, dim.maxY - 1, - result.BlockSummary is not null, - ref cachedColumn, ref cachedChunkX, ref cachedChunkZ); - result.Pixels[px, py] = color; - result.Heights[px, py] = surfY; - if (result.BlockSummary is not null) - result.BlockSummary[px, py] = matSum; - caveMask![px, py] = inCave; - } - } - else - { - if (bpp == 1) - { - var (color, surfY, surfMat) = SampleColumn(world, baseX, baseZ, scanTop, minY, - ref cachedColumn, ref cachedChunkX, ref cachedChunkZ); - result.Pixels[px, py] = color; - result.Heights[px, py] = surfY; - result.BlockTypes![px, py] = surfMat; - } - else - { - var (color, surfY, matSum) = SampleAreaDominant(world, baseX, baseZ, bpp, - scanTop, minY, result.BlockSummary is not null, - ref cachedColumn, ref cachedChunkX, ref cachedChunkZ); - result.Pixels[px, py] = color; - result.Heights[px, py] = surfY; - if (result.BlockSummary is not null) - result.BlockSummary[px, py] = matSum; - } - } - } - } - - for (int px = 0; px < mapW; px++) - { - for (int py = 0; py < mapH; py++) - { - if (entityPixels.ContainsKey((px, py))) continue; - - int northHeight = py > 0 ? result.Heights[px, py - 1] : result.Heights[px, py]; - int delta = result.Heights[px, py] - northHeight; - result.Pixels[px, py] = MinimapColorMap.ApplyHeightShade(result.Pixels[px, py], delta); - } - } - - if (caveMask is not null) - ApplyCaveBorder(result, caveMask, mapW, mapH, entityPixels); - - foreach (var (key, info) in entityPixels) - { - var (px, py) = key; - if (px >= 0 && px < mapW && py >= 0 && py < mapH) - result.Pixels[px, py] = info.Color; - } - - BakeNameLabels(result, nameLabels, mapW, mapH); - - return result; - } - - private static string ResolveEntityName(McClient client, Entity entity, - MobCategory cat, Dictionary? uuidNameMap) - { - if (cat == MobCategory.Player) - { - if (!string.IsNullOrWhiteSpace(entity.Name)) - return entity.Name; - - if (entity.UUID != System.Guid.Empty) - { - var playerInfo = client.GetPlayerInfo(entity.UUID); - if (!string.IsNullOrWhiteSpace(playerInfo?.Name)) - return playerInfo.Name; - - if (uuidNameMap is not null && - uuidNameMap.TryGetValue(entity.UUID.ToString(), out string? mapped) && - !string.IsNullOrWhiteSpace(mapped)) - return mapped; - } - - return "Player"; - } - - if (!string.IsNullOrWhiteSpace(entity.Name)) - return entity.Name; - - return entity.Type.ToString(); - } - - private static void BakeNameLabels(SampleResult result, List labels, - int mapW, int mapH) - { - if (labels.Count == 0) return; - int cellRows = mapH / 2; - - var occupied = new HashSet<(int col, int row)>(); - - labels.Sort((a, b) => - { - int pa = MinimapEntityClassifier.GetPriority( - a.LabelColor == MinimapEntityClassifier.PlayerColor ? MobCategory.Player : - a.LabelColor == MinimapEntityClassifier.HostileColor ? MobCategory.Hostile : - a.LabelColor == MinimapEntityClassifier.NeutralColor ? MobCategory.Neutral : MobCategory.Passive); - int pb = MinimapEntityClassifier.GetPriority( - b.LabelColor == MinimapEntityClassifier.PlayerColor ? MobCategory.Player : - b.LabelColor == MinimapEntityClassifier.HostileColor ? MobCategory.Hostile : - b.LabelColor == MinimapEntityClassifier.NeutralColor ? MobCategory.Neutral : MobCategory.Passive); - return pb.CompareTo(pa); - }); - - foreach (var lbl in labels) - { - int cellRow = (lbl.PixelY / 2) + 1; - if (cellRow >= cellRows) cellRow = lbl.PixelY / 2 - 1; - if (cellRow < 0 || cellRow >= cellRows) continue; - - int startCol = lbl.PixelX - lbl.Name.Length / 2; - startCol = Math.Clamp(startCol, 0, mapW - 1); - - bool fits = true; - int endCol = Math.Min(startCol + lbl.Name.Length, mapW); - for (int c = startCol; c < endCol; c++) - { - if (occupied.Contains((c, cellRow))) - { - fits = false; - break; - } - } - if (!fits) continue; - - for (int i = 0; i < lbl.Name.Length && startCol + i < mapW; i++) - { - int col = startCol + i; - occupied.Add((col, cellRow)); - - var bgTop = result.Pixels[col, cellRow * 2]; - var bgBot = (cellRow * 2 + 1 < mapH) - ? result.Pixels[col, cellRow * 2 + 1] - : bgTop; - - var avgBg = Color.FromRgb( - (byte)((bgTop.R + bgBot.R) / 2), - (byte)((bgTop.G + bgBot.G) / 2), - (byte)((bgTop.B + bgBot.B) / 2)); - - result.CharOverlay[col, cellRow] = (lbl.Name[i], lbl.LabelColor, avgBg); - } - } - } - - private static (Color color, int surfaceY, Material surfaceMat) SampleColumn(World world, int x, int z, - int scanTop, int minY, - ref ChunkColumn? cachedColumn, ref int cachedChunkX, ref int cachedChunkZ) - { - int chunkX = x >> 4; - int chunkZ = z >> 4; - if (chunkX != cachedChunkX || chunkZ != cachedChunkZ) - { - cachedColumn = world[chunkX, chunkZ]; - cachedChunkX = chunkX; - cachedChunkZ = chunkZ; - } - - if (cachedColumn is null) - return (MinimapColorMap.VoidColor, minY, Material.Air); - - int waterDepth = 0; - bool inIce = false; - int surfaceY = minY; - Material topMat = Material.Air; - - for (int y = scanTop; y >= minY; y--) - { - var loc = new Mapping.Location(x, y, z); - var chunk = cachedColumn.GetChunk(loc); - if (chunk is null) continue; - - var block = chunk.GetBlock(loc); - var mat = block.Type; - - if (MinimapColorMap.IsFullyTransparent(mat)) - continue; - - if (MinimapColorMap.IsWater(mat)) - { - if (waterDepth == 0) { surfaceY = y; topMat = mat; } - waterDepth++; - continue; - } - - if (MinimapColorMap.IsIce(mat) && !inIce) - { - if (waterDepth == 0) { surfaceY = y; topMat = mat; } - inIce = true; - continue; - } - - if (waterDepth == 0 && !inIce) { surfaceY = y; topMat = mat; } - - var baseColor = MinimapColorMap.GetBaseColor(mat); - - if (waterDepth > 0) - baseColor = MinimapColorMap.BlendWaterColor(baseColor, waterDepth); - if (inIce) - baseColor = MinimapColorMap.BlendIceColor(baseColor); - - return (baseColor, surfaceY, topMat); - } - - if (waterDepth > 0) - return (MinimapColorMap.WaterColor, surfaceY, topMat); - - return (MinimapColorMap.VoidColor, minY, Material.Air); - } - - private static (Color color, int surfaceY, List<(Material Mat, int Count)>? matSummary) - SampleAreaDominant(World world, int baseX, int baseZ, - int size, int scanTop, int minY, bool collectMats, - ref ChunkColumn? cachedColumn, ref int cachedChunkX, ref int cachedChunkZ) - { - var colorCounts = new Dictionary(); - Dictionary? matCounts = collectMats ? [] : null; - - int step = Math.Max(1, size / 3); - for (int dx = 0; dx < size; dx += step) - { - for (int dz = 0; dz < size; dz += step) - { - var (c, surfY, surfMat) = SampleColumn(world, baseX + dx, baseZ + dz, scanTop, minY, - ref cachedColumn, ref cachedChunkX, ref cachedChunkZ); - - if (colorCounts.TryGetValue(c, out var existing)) - colorCounts[c] = (existing.Count + 1, existing.SumY + surfY); - else - colorCounts[c] = (1, surfY); - - if (matCounts is not null) - { - if (matCounts.TryGetValue(surfMat, out int mc)) - matCounts[surfMat] = mc + 1; - else - matCounts[surfMat] = 1; - } - } - } - - Color best = MinimapColorMap.VoidColor; - int bestCount = 0; - int avgY = minY; - foreach (var kvp in colorCounts) - { - if (kvp.Value.Count > bestCount) - { - bestCount = kvp.Value.Count; - best = kvp.Key; - avgY = kvp.Value.SumY / kvp.Value.Count; - } - } - - List<(Material, int)>? summary = null; - if (matCounts is not null && matCounts.Count > 0) - { - summary = matCounts - .OrderByDescending(kv => kv.Value) - .Select(kv => (kv.Key, kv.Value)) - .ToList(); - } - - return (best, avgY, summary); - } - - /// - /// Determine whether cave mode should be active for this frame. - /// Mirrors VoxelMap's detection: hasCeiling dimensions always use cave mode, - /// otherwise check whether the player's column has a solid block above. - /// - private static bool ResolveCaveMode(CaveModeOption opt, World world, Dimension dim, - int playerX, int playerY, int playerZ, int scanTop) - { - if (opt == CaveModeOption.off) return false; - if (opt == CaveModeOption.on) return true; - - if (dim.hasCeiling) return true; - - for (int y = playerY + 2; y <= scanTop; y++) - { - var mat = world.GetBlock(new Mapping.Location(playerX, y, playerZ)).Type; - if (MinimapColorMap.IsLightBlocking(mat)) - return true; - } - return false; - } - - /// - /// Cave-mode column sampler. Starting from playerY, scans down through air - /// to find the first light-blocking block (the cave floor), or scans up if - /// the player is embedded in solid. Returns the floor block color with cave - /// darkening applied, plus an inCave flag indicating the column has a reachable - /// air pocket at the player's Y level. - /// - private static (Color color, int surfaceY, Material surfaceMat, bool inCave) SampleColumnCave( - World world, int x, int z, int playerY, int minY, int maxY, - ref ChunkColumn? cachedColumn, ref int cachedChunkX, ref int cachedChunkZ) - { - int chunkX = x >> 4; - int chunkZ = z >> 4; - if (chunkX != cachedChunkX || chunkZ != cachedChunkZ) - { - cachedColumn = world[chunkX, chunkZ]; - cachedChunkX = chunkX; - cachedChunkZ = chunkZ; - } - - if (cachedColumn is null) - return (MinimapColorMap.VoidColor, minY, Material.Air, false); - - int caveFloorY = FindCaveFloorY(cachedColumn, x, z, playerY, minY, maxY); - - if (caveFloorY == int.MinValue) - { - var fallback = SampleColumn(world, x, z, maxY, minY, - ref cachedColumn, ref cachedChunkX, ref cachedChunkZ); - return (MinimapColorMap.CaveSolidColor, fallback.surfaceY, fallback.surfaceMat, false); - } - - var loc = new Mapping.Location(x, caveFloorY, z); - var chunk = cachedColumn.GetChunk(loc); - if (chunk is null) - return (MinimapColorMap.CaveSolidColor, caveFloorY, Material.Air, false); - - var block = chunk.GetBlock(loc); - var mat = block.Type; - var color = MinimapColorMap.GetBaseColor(mat); - color = MinimapColorMap.ApplyCaveDarkening(color); - - return (color, caveFloorY, mat, true); - } - - /// - /// Find the cave floor Y at (x, z) by scanning from playerY. - /// If the block at playerY is air-like, scan down for the first solid block. - /// If the block at playerY is solid, scan up (up to playerY + 10) for the - /// first air block, then return that Y (the cave ceiling opening). - /// Returns int.MinValue if no cave floor is found. - /// - private static int FindCaveFloorY(ChunkColumn column, int x, int z, int playerY, int minY, int maxY) - { - var startLoc = new Mapping.Location(x, playerY, z); - var startChunk = column.GetChunk(startLoc); - - bool startIsAir; - if (startChunk is null) - { - startIsAir = true; - } - else - { - var startMat = startChunk.GetBlock(startLoc).Type; - startIsAir = !MinimapColorMap.IsLightBlocking(startMat); - } - - if (startIsAir) - { - for (int y = playerY - 1; y >= minY; y--) - { - var loc = new Mapping.Location(x, y, z); - var chunk = column.GetChunk(loc); - if (chunk is null) continue; - - var mat = chunk.GetBlock(loc).Type; - if (MinimapColorMap.IsLightBlocking(mat)) - return y; - } - return minY; - } - else - { - int upLimit = Math.Min(playerY + 10, maxY); - for (int y = playerY + 1; y <= upLimit; y++) - { - var loc = new Mapping.Location(x, y, z); - var chunk = column.GetChunk(loc); - if (chunk is null) continue; - - var mat = chunk.GetBlock(loc).Type; - if (!MinimapColorMap.IsLightBlocking(mat)) - { - for (int y2 = y - 1; y2 >= minY; y2--) - { - var loc2 = new Mapping.Location(x, y2, z); - var chunk2 = column.GetChunk(loc2); - if (chunk2 is null) continue; - - var mat2 = chunk2.GetBlock(loc2).Type; - if (MinimapColorMap.IsLightBlocking(mat2)) - return y2; - } - return minY; - } - } - return int.MinValue; - } - } - - private static (Color color, int surfaceY, List<(Material Mat, int Count)>? matSummary, bool inCave) - SampleAreaDominantCave(World world, int baseX, int baseZ, - int size, int playerY, int minY, int maxY, bool collectMats, - ref ChunkColumn? cachedColumn, ref int cachedChunkX, ref int cachedChunkZ) - { - var colorCounts = new Dictionary(); - Dictionary? matCounts = collectMats ? [] : null; - int caveCount = 0; - - int step = Math.Max(1, size / 3); - for (int dx = 0; dx < size; dx += step) - { - for (int dz = 0; dz < size; dz += step) - { - var (c, surfY, surfMat, inCave) = SampleColumnCave( - world, baseX + dx, baseZ + dz, playerY, minY, maxY, - ref cachedColumn, ref cachedChunkX, ref cachedChunkZ); - - if (inCave) caveCount++; - - if (colorCounts.TryGetValue(c, out var existing)) - colorCounts[c] = (existing.Count + 1, existing.SumY + surfY); - else - colorCounts[c] = (1, surfY); - - if (matCounts is not null) - { - if (matCounts.TryGetValue(surfMat, out int mc)) - matCounts[surfMat] = mc + 1; - else - matCounts[surfMat] = 1; - } - } - } - - Color best = MinimapColorMap.VoidColor; - int bestCount = 0; - int avgY = minY; - foreach (var kvp in colorCounts) - { - if (kvp.Value.Count > bestCount) - { - bestCount = kvp.Value.Count; - best = kvp.Key; - avgY = kvp.Value.SumY / kvp.Value.Count; - } - } - - List<(Material, int)>? summary = null; - if (matCounts is not null && matCounts.Count > 0) - { - summary = matCounts - .OrderByDescending(kv => kv.Value) - .Select(kv => (kv.Key, kv.Value)) - .ToList(); - } - - int totalSamples = 0; - foreach (var kvp in colorCounts) - totalSamples += kvp.Value.Count; - - bool majorityInCave = caveCount * 2 >= totalSamples; - return (best, avgY, summary, majorityInCave); - } - - /// - /// Draw a 1-pixel dark border around the boundary between cave-reachable pixels - /// and non-cave (solid/surface) pixels, giving the cave region a visible edge. - /// - private static void ApplyCaveBorder(SampleResult result, bool[,] caveMask, - int mapW, int mapH, Dictionary<(int, int), (Color, int)> entityPixels) - { - for (int px = 0; px < mapW; px++) - { - for (int py = 0; py < mapH; py++) - { - if (entityPixels.ContainsKey((px, py))) continue; - if (caveMask[px, py]) continue; - - bool neighborInCave = false; - if (px > 0 && caveMask[px - 1, py]) neighborInCave = true; - if (!neighborInCave && px < mapW - 1 && caveMask[px + 1, py]) neighborInCave = true; - if (!neighborInCave && py > 0 && caveMask[px, py - 1]) neighborInCave = true; - if (!neighborInCave && py < mapH - 1 && caveMask[px, py + 1]) neighborInCave = true; - - if (neighborInCave) - result.Pixels[px, py] = MinimapColorMap.CaveBorderColor; - } - } - } - - private void ApplyPixelBuffer(SampleResult result, int w, int h) - { - int rows = h / 2; - for (int row = 0; row < rows && row < _cellRows; row++) - { - for (int col = 0; col < w && col < _mapWidth; col++) - { - var overlay = result.CharOverlay[col, row]; - if (overlay is not null) - { - var (ch, fg, bg) = overlay.Value; - _cells[row, col].Text = ch.ToString(); - _cells[row, col].Foreground = new SolidColorBrush(fg); - _cells[row, col].Background = new SolidColorBrush(bg); - } - else - { - var topColor = result.Pixels[col, row * 2]; - var bottomColor = result.Pixels[col, row * 2 + 1]; - - _cells[row, col].Text = "\u2580"; - _cells[row, col].Foreground = new SolidColorBrush(topColor); - _cells[row, col].Background = new SolidColorBrush(bottomColor); - } - } - } - - _lastResult = result; - - if (_hoverCol >= 0 && _hoverRow >= 0) - UpdateTooltip(_hoverCol, _hoverRow); - } - - private void OnMapPointerMoved(object? sender, PointerEventArgs e) - { - var pos = e.GetPosition(_mapGrid); - int col = (int)pos.X; - int row = (int)pos.Y; - - if (col < 0 || col >= _mapWidth || row < 0 || row >= _cellRows) - { - HideTooltip(); - return; - } - - _hoverCol = col; - _hoverRow = row; - - if (this.VisualRoot is Visual root - && _mapGrid.TranslatePoint(pos, root) is { } gp) - { - _hoverGlobalX = gp.X; - _hoverGlobalY = gp.Y; - } - else - { - _hoverGlobalX = pos.X; - _hoverGlobalY = pos.Y; - } - - UpdateTooltip(col, row); - } - - private void OnMapPointerExited(object? sender, PointerEventArgs e) - { - HideTooltip(); - } - - private void HideTooltip() - { - _hoverCol = -1; - _hoverRow = -1; - TooltipService?.Hide(); - } - - private void UpdateTooltip(int col, int row) - { - var svc = TooltipService; - var result = _lastResult; - if (svc is null || result is null) { svc?.Hide(); return; } - - int bpp = result.Bpp; - int centerX = result.CenterX; - int centerY = result.CenterY; - - int topPixelY = row * 2; - int botPixelY = row * 2 + 1; - - int baseX = result.PlayerBlockX + (col - centerX) * bpp; - int baseZ_top = result.PlayerBlockZ + (topPixelY - centerY) * bpp; - int baseZ_bot = result.PlayerBlockZ + (botPixelY - centerY) * bpp; - - var lines = new List(); - - if (bpp == 1) - { - int surfY_top = (topPixelY < result.Heights.GetLength(1)) ? result.Heights[col, topPixelY] : 0; - int surfY_bot = (botPixelY < result.Heights.GetLength(1)) ? result.Heights[col, botPixelY] : 0; - - string coordLine = baseZ_top == baseZ_bot - ? $"{baseX}, {surfY_top}, {baseZ_top}" - : $"{baseX}, {surfY_top}, {baseZ_top} / {baseX}, {surfY_bot}, {baseZ_bot}"; - lines.Add(new TuiTooltipLine { Text = coordLine, Foreground = Brushes.White }); - - if (result.BlockTypes is not null) - { - var mat_top = result.BlockTypes[col, topPixelY]; - var mat_bot = (botPixelY < result.BlockTypes.GetLength(1)) - ? result.BlockTypes[col, botPixelY] : mat_top; - string blockLine = mat_top == mat_bot - ? FormatMaterialName(mat_top) - : $"{FormatMaterialName(mat_top)} / {FormatMaterialName(mat_bot)}"; - lines.Add(new TuiTooltipLine { Text = blockLine, Foreground = Brushes.LightGray }); - } - } - else - { - int endX = baseX + bpp - 1; - int endZ_bot = baseZ_bot + bpp - 1; - string coordLine = $"X {baseX}~{endX} Z {baseZ_top}~{endZ_bot}"; - lines.Add(new TuiTooltipLine { Text = coordLine, Foreground = Brushes.White }); - - AppendBlockSummaryLines(result, col, topPixelY, botPixelY, lines); - } - - AppendEntityInfoLines(result, col, topPixelY, botPixelY, lines); - - if (lines.Count == 0) - { - svc.Hide(); - return; - } - - bool preferRight = Position switch - { - MinimapPosition.top_left or MinimapPosition.bottom_left => true, - MinimapPosition.top_right or MinimapPosition.bottom_right => false, - _ => true, - }; - - double mx = _hoverGlobalX; - double my = _hoverGlobalY; - - if (Position == MinimapPosition.center - && this.VisualRoot is Visual root) - { - preferRight = mx < root.Bounds.Width / 2; - } - - svc.Show(mx, my, lines, preferRight); - } - - private void AppendBlockSummaryLines(SampleResult result, int col, int topPy, int botPy, - List lines) - { - if (result.BlockSummary is null) return; - - var merged = new Dictionary(); - MergeBlockCounts(result.BlockSummary, col, topPy, merged); - if (botPy < result.BlockSummary.GetLength(1)) - MergeBlockCounts(result.BlockSummary, col, botPy, merged); - - if (merged.Count == 0) return; - - var sorted = merged.OrderByDescending(kv => kv.Value).Take(4); - - var parts = new List(); - foreach (var kv in sorted) - { - if (kv.Key == Material.Air && merged.Count > 1) continue; - parts.Add(kv.Value > 1 - ? $"{FormatMaterialName(kv.Key)} x{kv.Value}" - : FormatMaterialName(kv.Key)); - } - - if (parts.Count == 0) return; - - lines.Add(new TuiTooltipLine - { - Text = string.Join(", ", parts), - Foreground = Brushes.LightGray, - }); - } - - private static void MergeBlockCounts(List<(Material Mat, int Count)>?[,] summary, - int px, int py, Dictionary target) - { - var list = summary[px, py]; - if (list is null) return; - foreach (var (mat, count) in list) - { - if (target.TryGetValue(mat, out int c)) - target[mat] = c + count; - else - target[mat] = count; - } - } - - private static void AppendEntityInfoLines(SampleResult result, int col, int topPy, int botPy, - List lines) - { - var entityMap = result.EntityMap; - if (entityMap is null) return; - - var combined = new List(); - AddEntitiesFromPixel(entityMap, col, topPy, combined); - if (botPy < entityMap.GetLength(1)) - AddEntitiesFromPixel(entityMap, col, botPy, combined); - - if (combined.Count == 0) return; - - combined.Sort((a, b) => b.Priority.CompareTo(a.Priority)); - int shown = 0; - var seen = new HashSet(); - foreach (var ent in combined) - { - if (shown >= 4) break; - string key = $"{ent.Name}_{ent.Health:F0}"; - if (!seen.Add(key)) continue; - - var catColor = MinimapEntityClassifier.GetBaseColor(ent.Category); - string coordStr = $"({ent.X:F1}, {ent.Y:F1}, {ent.Z:F1})"; - string hpStr = ""; - if (ent.Health > 0) - { - hpStr = ent.MaxHealth > 0 - ? $" HP:{ent.Health:F0}/{ent.MaxHealth:F0}" - : $" HP:{ent.Health:F0}"; - } - - lines.Add(new TuiTooltipLine - { - Text = $"{ent.Name} {coordStr}{hpStr}", - Foreground = new SolidColorBrush(catColor), - }); - shown++; - } - } - - private static void AddEntitiesFromPixel(List?[,] map, - int px, int py, List target) - { - if (px >= 0 && px < map.GetLength(0) && py >= 0 && py < map.GetLength(1)) - { - var list = map[px, py]; - if (list is not null) - target.AddRange(list); - } - } - - private static string FormatMaterialName(Material mat) - { - if (mat == Material.Air) return "Air"; - string raw = mat.ToString(); - return raw.Replace('_', ' '); - } - - private void UpdateInfoBarAndLegend(McClient client, int bpp, - HashSet categories, int mapW, bool caveModeActive) - { - var loc = client.GetCurrentLocation(); - float yaw = client.GetYaw(); - string arrow = GetDirectionArrow(yaw); - - int x = (int)Math.Floor(loc.X); - int y = (int)Math.Floor(loc.Y); - int z = (int)Math.Floor(loc.Z); - - string caveSuffix = caveModeActive ? " \u25bc" : ""; - string coordPart = $"{x}, {y}, {z} {arrow} {bpp}:1{caveSuffix}"; - - var legendParts = new List(); - var legendColors = new List(); - - var sorted = categories - .Where(c => c != MobCategory.NonLiving) - .OrderByDescending(MinimapEntityClassifier.GetPriority); - - int catCount = 0; - foreach (var cat in sorted) - { - if (catCount >= 4) break; - legendParts.Add(MinimapEntityClassifier.GetCategoryLabel(cat)); - legendColors.Add(MinimapEntityClassifier.GetBaseColor(cat)); - catCount++; - } - - int legendLen = 0; - for (int i = 0; i < legendParts.Count; i++) - legendLen += 1 + legendParts[i].Length + (i > 0 ? 1 : 0); - - bool fitsOnOneLine = legendParts.Count > 0 - && coordPart.Length + 2 + legendLen <= mapW; - - _infoRow.Children.Clear(); - _infoRow.Children.Add(new TextBlock - { - Text = coordPart, - Foreground = Brushes.Gray, - Padding = new Thickness(0), - }); - - if (fitsOnOneLine) - { - AppendLegendItems(_infoRow, legendParts, legendColors, leftMargin: 2); - _legendPanel.Children.Clear(); - _legendPanel.IsVisible = false; - } - else - { - _legendPanel.IsVisible = legendParts.Count > 0; - _legendPanel.Children.Clear(); - AppendLegendItems(_legendPanel, legendParts, legendColors, leftMargin: 0); - } - } - - private static void AppendLegendItems(StackPanel panel, - List parts, List colors, int leftMargin) - { - for (int i = 0; i < parts.Count; i++) - { - int ml = i == 0 ? leftMargin : 1; - panel.Children.Add(new TextBlock - { - Text = "\u25cf", - Foreground = new SolidColorBrush(colors[i]), - Padding = new Thickness(0), - Margin = ml > 0 ? new Thickness(ml, 0, 0, 0) : new Thickness(0), - }); - panel.Children.Add(new TextBlock - { - Text = parts[i], - Foreground = Brushes.Gray, - Padding = new Thickness(0), - Margin = new Thickness(0), - }); - } - } - - private static string GetDirectionArrow(float yaw) - { - double normalized = ((yaw % 360) + 360) % 360; - int index = (int)Math.Round(normalized / 45.0) % 8; - return index switch - { - 0 => "\u2193", // S - 1 => "\u2199", // SW - 2 => "\u2190", // W - 3 => "\u2196", // NW - 4 => "\u2191", // N - 5 => "\u2197", // NE - 6 => "\u2192", // E - 7 => "\u2198", // SE - _ => "\u2193", - }; - } - } -} diff --git a/MinecraftClient/Tui/MinimapEntityClassifier.cs b/MinecraftClient/Tui/MinimapEntityClassifier.cs deleted file mode 100644 index 2daf1ea6c4..0000000000 --- a/MinecraftClient/Tui/MinimapEntityClassifier.cs +++ /dev/null @@ -1,178 +0,0 @@ -using System; -using System.Collections.Frozen; -using System.Collections.Generic; -using System.Reflection; -using System.Text.Json; -using Avalonia.Media; -using MinecraftClient.Mapping; - -namespace MinecraftClient.Tui -{ - public enum MobCategory - { - Hostile, - Passive, - Neutral, - Player, - NonLiving, - } - - public enum MinimapPosition - { - top_left, - top_right, - center, - bottom_left, - bottom_right, - } - - public sealed class NameDisplayConfig - { - public volatile bool Players = false; - public volatile bool Hostile = false; - public volatile bool Neutral = false; - public volatile bool Passive = false; - - public bool AnyEnabled => Players || Hostile || Neutral || Passive; - - public void SetAll(bool value) - { - Players = value; - Hostile = value; - Neutral = value; - Passive = value; - } - - public bool ShouldShowName(MobCategory category) => category switch - { - MobCategory.Player => Players, - MobCategory.Hostile => Hostile, - MobCategory.Neutral => Neutral, - MobCategory.Passive => Passive, - _ => false, - }; - } - - /// - /// Classifies entities into minimap categories using data extracted from - /// Minecraft's MobCategory assignments. Categories are loaded from the - /// embedded MinimapEntityCategories.json resource generated by - /// tools/gen_entity_category_map.py. - /// - public static class MinimapEntityClassifier - { - public static readonly Color HostileColor = Color.FromRgb(255, 68, 68); - public static readonly Color PassiveColor = Color.FromRgb(68, 255, 68); - public static readonly Color NeutralColor = Color.FromRgb(255, 170, 0); - public static readonly Color PlayerColor = Color.FromRgb(255, 255, 255); - public static readonly Color FadedGray = Color.FromRgb(100, 100, 100); - - private static readonly FrozenDictionary CategoryTable; - - static MinimapEntityClassifier() - { - var table = new Dictionary(); - - try - { - using var stream = Assembly.GetExecutingAssembly() - .GetManifestResourceStream("MinimapEntityCategories.json"); - if (stream is not null) - { - using var doc = JsonDocument.Parse(stream); - var root = doc.RootElement; - - LoadCategory(root, "hostile", MobCategory.Hostile, table); - LoadCategory(root, "passive", MobCategory.Passive, table); - LoadCategory(root, "neutral", MobCategory.Neutral, table); - LoadCategory(root, "non_living", MobCategory.NonLiving, table); - } - } - catch (Exception ex) - { - ConsoleIO.WriteLogLine($"[Minimap] Failed to load entity categories: {ex.Message}"); - } - - CategoryTable = table.ToFrozenDictionary(); - } - - private static void LoadCategory(JsonElement root, string key, - MobCategory category, Dictionary table) - { - if (!root.TryGetProperty(key, out var arr)) - return; - - foreach (var el in arr.EnumerateArray()) - { - var name = el.GetString(); - if (name is not null && Enum.TryParse(name, out var et)) - table.TryAdd(et, category); - } - } - - public static MobCategory Classify(EntityType type) - { - if (type == EntityType.Player) - return MobCategory.Player; - return CategoryTable.GetValueOrDefault(type, MobCategory.NonLiving); - } - - public static Color GetBaseColor(MobCategory category) => category switch - { - MobCategory.Hostile => HostileColor, - MobCategory.Passive => PassiveColor, - MobCategory.Neutral => NeutralColor, - MobCategory.Player => PlayerColor, - _ => FadedGray, - }; - - public static Color ApplyDepthFade(Color baseColor, double playerY, double entityY) - { - double depth = playerY - entityY; - - if (depth <= 5.0) - return baseColor; - - if (depth >= 15.0) - return FadedGray; - - double t = (depth - 5.0) / 10.0; - return Lerp(baseColor, FadedGray, t); - } - - public static bool ShouldDisplay(MobCategory category, double playerY, double entityY) - { - if (category == MobCategory.Player) - return true; - if (entityY >= playerY) - return true; - return playerY - entityY <= 15.0; - } - - public static int GetPriority(MobCategory category) => category switch - { - MobCategory.Hostile => 4, - MobCategory.Player => 3, - MobCategory.Neutral => 2, - MobCategory.Passive => 1, - _ => 0, - }; - - public static string GetCategoryLabel(MobCategory category) => category switch - { - MobCategory.Hostile => Translations.tui_minimap_legend_hostile, - MobCategory.Passive => Translations.tui_minimap_legend_passive, - MobCategory.Neutral => Translations.tui_minimap_legend_neutral, - MobCategory.Player => Translations.tui_minimap_legend_player, - _ => "?", - }; - - private static Color Lerp(Color a, Color b, double t) - { - byte r = (byte)(a.R + (b.R - a.R) * t); - byte g = (byte)(a.G + (b.G - a.G) * t); - byte bl = (byte)(a.B + (b.B - a.B) * t); - return Color.FromRgb(r, g, bl); - } - } -} diff --git a/MinecraftClient/Tui/ServerStatusPanelBuilder.cs b/MinecraftClient/Tui/ServerStatusPanelBuilder.cs deleted file mode 100644 index bff8fe7c9c..0000000000 --- a/MinecraftClient/Tui/ServerStatusPanelBuilder.cs +++ /dev/null @@ -1,196 +0,0 @@ -using System; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Controls.Documents; -using Avalonia.Layout; -using Avalonia.Media; - -namespace MinecraftClient.Tui -{ - internal static class ServerStatusPanelBuilder - { - private const int MaxSamplePlayers = 10; - private const int FaviconDisplaySize = 16; - - internal static Border Build(Protocol.ServerStatusInfo info) - { - var contentPanel = new DockPanel { Background = Brushes.Black }; - - if (info.FaviconBase64 is not null) - { - var iconGrid = BuildFaviconGrid(info.FaviconBase64, FaviconDisplaySize); - iconGrid.VerticalAlignment = VerticalAlignment.Center; - DockPanel.SetDock(iconGrid, Dock.Left); - contentPanel.Children.Add(iconGrid); - } - - var infoPanel = new StackPanel - { - Orientation = Orientation.Vertical, - Margin = new Thickness(1, 0, 0, 0), - VerticalAlignment = VerticalAlignment.Center, - }; - - AddMotd(infoPanel, info); - AddAddress(infoPanel, info); - AddVersion(infoPanel, info); - AddConnectingAs(infoPanel, info); - AddPing(infoPanel, info); - AddPlayers(infoPanel, info); - AddSamplePlayers(infoPanel, info); - - contentPanel.Children.Add(infoPanel); - - return new Border - { - BorderBrush = new SolidColorBrush(Color.FromRgb(80, 80, 80)), - BorderThickness = new Thickness(1), - Background = new SolidColorBrush(Color.FromArgb(240, 20, 20, 20)), - Padding = new Thickness(1, 0), - Child = contentPanel, - Margin = new Thickness(0), - }; - } - - private static void AddMotd(StackPanel panel, Protocol.ServerStatusInfo info) - { - if (string.IsNullOrEmpty(info.MotdRaw)) - return; - - try - { - string motdFormatted = Protocol.Message.ChatParser.ParseText(info.MotdRaw); - foreach (string line in motdFormatted.Split('\n')) - panel.Children.Add(McColorParser.CreateColoredTextBlock(line, TextWrapping.NoWrap)); - } - catch - { - panel.Children.Add(new TextBlock - { - Text = info.MotdRaw, - Foreground = Brushes.White, - TextWrapping = TextWrapping.NoWrap, - }); - } - } - - private static void AddAddress(StackPanel panel, Protocol.ServerStatusInfo info) - { - var row = new TextBlock(); - row.Inlines!.Add(Label(Translations.mcc_server_info_label_server)); - row.Inlines.Add(Value(info.Host, McColors.Aqua)); - row.Inlines.Add(new Run($":{info.Port}") { Foreground = McColors.Gray }); - panel.Children.Add(row); - } - - private static void AddVersion(StackPanel panel, Protocol.ServerStatusInfo info) - { - string versionClean = Scripting.ChatBot.GetVerbatim(info.VersionName); - var row = new TextBlock(); - row.Inlines!.Add(Label(Translations.mcc_server_info_label_version)); - row.Inlines.Add(Value(versionClean, McColors.Aqua)); - row.Inlines.Add(new Run(" (") { Foreground = McColors.Gray }); - row.Inlines.Add(new Run(string.Format(Translations.mcc_server_info_label_protocol, info.ProtocolVersion)) - { Foreground = McColors.Gray }); - row.Inlines.Add(new Run(")") { Foreground = McColors.Gray }); - panel.Children.Add(row); - } - - private static void AddConnectingAs(StackPanel panel, Protocol.ServerStatusInfo info) - { - if (info.ResolvedProtocol == 0) - return; - - string resolvedMcVer = Protocol.ProtocolHandler.ProtocolVersion2MCVer(info.ResolvedProtocol); - var row = new TextBlock(); - row.Inlines!.Add(Label(Translations.mcc_server_info_label_connecting_as)); - row.Inlines.Add(Value(resolvedMcVer, McColors.Green)); - row.Inlines.Add(new Run(" (") { Foreground = McColors.Gray }); - row.Inlines.Add(new Run(string.Format(Translations.mcc_server_info_label_protocol, info.ResolvedProtocol)) - { Foreground = McColors.Gray }); - row.Inlines.Add(new Run(")") { Foreground = McColors.Gray }); - panel.Children.Add(row); - } - - private static void AddPing(StackPanel panel, Protocol.ServerStatusInfo info) - { - if (info.PingMs < 0) - return; - - var pingColor = info.PingMs < 100 - ? McColors.Green - : info.PingMs < 300 - ? McColors.Yellow - : McColors.Red; - - var row = new TextBlock(); - row.Inlines!.Add(Label(Translations.mcc_server_info_label_ping)); - row.Inlines.Add(new Run(string.Format(Translations.mcc_server_info_label_ping_ms, info.PingMs)) - { Foreground = pingColor }); - panel.Children.Add(row); - } - - private static void AddPlayers(StackPanel panel, Protocol.ServerStatusInfo info) - { - var row = new TextBlock(); - row.Inlines!.Add(Label(Translations.mcc_server_info_label_players)); - row.Inlines.Add(Value($"{info.OnlinePlayers}", McColors.Green)); - row.Inlines.Add(new Run("/") { Foreground = McColors.Gray }); - row.Inlines.Add(Value($"{info.MaxPlayers}", McColors.Red)); - panel.Children.Add(row); - } - - private static void AddSamplePlayers(StackPanel panel, Protocol.ServerStatusInfo info) - { - if (info.SamplePlayers.Count == 0) - return; - - panel.Children.Add(new TextBlock - { - Text = Translations.mcc_server_info_label_online, - Foreground = McColors.Gray, - }); - - int shown = Math.Min(info.SamplePlayers.Count, MaxSamplePlayers); - for (int i = 0; i < shown; i++) - { - string name = info.SamplePlayers[i].Name; - if (name.Contains('\u00a7')) - panel.Children.Add(McColorParser.CreateColoredTextBlock($" {name}", TextWrapping.NoWrap)); - else - panel.Children.Add(new TextBlock - { - Text = $" {name}", - Foreground = McColors.Green, - }); - } - - if (info.SamplePlayers.Count > shown) - { - panel.Children.Add(new TextBlock - { - Text = $" {string.Format(Translations.mcc_server_info_sample_more, info.SamplePlayers.Count - shown)}", - Foreground = McColors.Gray, - }); - } - } - - private static Run Label(string text) => - new(text + " ") { Foreground = McColors.Gray }; - - private static Run Value(string text, IBrush color) => - new(text) { Foreground = color }; - - private static Grid BuildFaviconGrid(string base64Png, int displaySize) => - IconGridBuilder.BuildFromBase64(base64Png, displaySize); - - private static class McColors - { - public static readonly IBrush Gray = new SolidColorBrush(Color.FromRgb(170, 170, 170)); - public static readonly IBrush Aqua = new SolidColorBrush(Color.FromRgb(85, 255, 255)); - public static readonly IBrush Green = new SolidColorBrush(Color.FromRgb(85, 255, 85)); - public static readonly IBrush Red = new SolidColorBrush(Color.FromRgb(255, 85, 85)); - public static readonly IBrush Yellow = new SolidColorBrush(Color.FromRgb(255, 255, 85)); - } - } -} diff --git a/MinecraftClient/Tui/SlotViewModel.cs b/MinecraftClient/Tui/SlotViewModel.cs deleted file mode 100644 index 2a8f6bdafa..0000000000 --- a/MinecraftClient/Tui/SlotViewModel.cs +++ /dev/null @@ -1,157 +0,0 @@ -using System.ComponentModel; -using System.Runtime.CompilerServices; -using MinecraftClient.Inventory; - -namespace MinecraftClient.Tui -{ - public class SlotViewModel : INotifyPropertyChanged - { - private bool _isSelected; - private bool _isHovered; - - public int SlotId { get; } - public string ItemDisplayText { get; private set; } - public string CountDisplay { get; private set; } - public string FullInfo { get; private set; } - public string ItemTypeName { get; private set; } - public bool IsEmpty { get; private set; } - public bool IsHotbar { get; } - public int HotbarIndex { get; } - public ItemType ItemType { get; private set; } - public int ItemCount { get; private set; } - public Item? RawItem { get; private set; } - public int NameMaxWidth { get; set; } = 9; - public int NameMaxLines { get; set; } = 1; - - public bool IsSelected - { - get => _isSelected; - set { _isSelected = value; OnPropertyChanged(); } - } - - public bool IsHovered - { - get => _isHovered; - set { _isHovered = value; OnPropertyChanged(); } - } - - public SlotViewModel(int slotId, bool isHotbar = false, int hotbarIndex = -1) - { - SlotId = slotId; - IsHotbar = isHotbar; - HotbarIndex = hotbarIndex; - ItemDisplayText = ""; - CountDisplay = ""; - FullInfo = ""; - ItemTypeName = ""; - IsEmpty = true; - ItemType = ItemType.Air; - ItemCount = 0; - } - - public void Update(Item? item) - { - RawItem = item; - if (item == null || item.IsEmpty) - { - ItemDisplayText = ""; - CountDisplay = ""; - FullInfo = ""; - ItemTypeName = ""; - IsEmpty = true; - ItemType = ItemType.Air; - ItemCount = 0; - } - else - { - ItemType = item.Type; - ItemCount = item.Count; - string typeName = item.GetTypeString(); - ItemTypeName = typeName; - ItemDisplayText = FormatMultiLine(typeName, NameMaxWidth, NameMaxLines); - CountDisplay = item.Count > 1 ? $"x{item.Count}" : ""; - FullInfo = item.ToFullString(); - IsEmpty = false; - } - - OnPropertyChanged(nameof(ItemDisplayText)); - OnPropertyChanged(nameof(CountDisplay)); - OnPropertyChanged(nameof(FullInfo)); - OnPropertyChanged(nameof(IsEmpty)); - OnPropertyChanged(nameof(ItemType)); - OnPropertyChanged(nameof(ItemTypeName)); - OnPropertyChanged(nameof(ItemCount)); - } - - /// - /// Format item name into multi-line display text that fits within - /// maxWidth columns and maxLines lines. Breaks at word boundaries. - /// - private static string FormatMultiLine(string name, int maxWidth, int maxLines) - { - if (string.IsNullOrEmpty(name)) - return ""; - - int colonIdx = name.LastIndexOf(':'); - if (colonIdx >= 0 && colonIdx < name.Length - 1) - name = name[(colonIdx + 1)..]; - - name = name.Replace("_", " ").Trim(); - name = InsertCamelCaseSpaces(name); - - if (maxLines <= 1 || name.Length <= maxWidth) - return name.Length <= maxWidth ? name : name[..maxWidth]; - - var lines = new System.Collections.Generic.List(); - string remaining = name; - - for (int line = 0; line < maxLines && remaining.Length > 0; line++) - { - if (remaining.Length <= maxWidth) - { - lines.Add(remaining); - break; - } - - int breakAt = -1; - for (int i = maxWidth; i >= 1; i--) - { - if (remaining[i] == ' ') - { - breakAt = i; - break; - } - } - - if (breakAt < 0) - breakAt = maxWidth; - - lines.Add(remaining[..breakAt].TrimEnd()); - remaining = remaining[breakAt..].TrimStart(); - } - - return string.Join("\n", lines); - } - - private static string InsertCamelCaseSpaces(string s) - { - if (s.Length < 2) return s; - var sb = new System.Text.StringBuilder(s.Length + 4); - sb.Append(s[0]); - for (int i = 1; i < s.Length; i++) - { - if (char.IsUpper(s[i]) && char.IsLower(s[i - 1])) - sb.Append(' '); - sb.Append(s[i]); - } - return sb.ToString(); - } - - public event PropertyChangedEventHandler? PropertyChanged; - - private void OnPropertyChanged([CallerMemberName] string? name = null) - { - PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name)); - } - } -} diff --git a/MinecraftClient/Tui/TabListOverlay.cs b/MinecraftClient/Tui/TabListOverlay.cs deleted file mode 100644 index 6e4c5c2963..0000000000 --- a/MinecraftClient/Tui/TabListOverlay.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Controls.Primitives; -using Avalonia.Input; -using Avalonia.Interactivity; -using Avalonia.Layout; -using Avalonia.Media; -using Avalonia.Threading; - -namespace MinecraftClient.Tui -{ - internal sealed class TabListOverlay : Border - { - private readonly McClient _handler; - private readonly ScrollViewer _scrollViewer; - private readonly DispatcherTimer _refreshTimer; - - public TabListOverlay(McClient handler) - { - ArgumentNullException.ThrowIfNull(handler); - _handler = handler; - - BorderBrush = Brushes.White; - BorderThickness = new Thickness(1); - Background = Brushes.Black; - Padding = new Thickness(1); - HorizontalAlignment = HorizontalAlignment.Stretch; - VerticalAlignment = VerticalAlignment.Stretch; - Focusable = true; - - _scrollViewer = new ScrollViewer - { - HorizontalScrollBarVisibility = ScrollBarVisibility.Auto, - VerticalScrollBarVisibility = ScrollBarVisibility.Auto, - Focusable = true, - }; - - Child = _scrollViewer; - - _refreshTimer = new DispatcherTimer(TimeSpan.FromMilliseconds(500), DispatcherPriority.Background, static (_, _) => { }) - { - IsEnabled = false - }; - _refreshTimer.Tick += (_, _) => Refresh(); - - AttachedToVisualTree += (_, _) => - { - AddHandler(KeyDownEvent, OnTunnelKeyDown, RoutingStrategies.Tunnel); - Refresh(); - _refreshTimer.Start(); - Focus(); - Dispatcher.UIThread.Post(() => _scrollViewer.Focus(), DispatcherPriority.Input); - }; - - DetachedFromVisualTree += (_, _) => - { - RemoveHandler(KeyDownEvent, OnTunnelKeyDown); - _refreshTimer.Stop(); - }; - } - - private void OnTunnelKeyDown(object? sender, KeyEventArgs e) - { - if (e.Key != Key.Escape) - return; - - TuiConsoleBackend.Instance?.DismissOverlay(); - e.Handled = true; - } - - protected override void OnKeyDown(KeyEventArgs e) - { - if (e.Key == Key.Escape) - { - TuiConsoleBackend.Instance?.DismissOverlay(); - e.Handled = true; - return; - } - - base.OnKeyDown(e); - } - - private void Refresh() - { - string text = TabListFormatter.Render(_handler.GetTabListSnapshot(), includeOverlayHint: true); - var block = McColorParser.CreateColoredTextBlock(text, TextWrapping.NoWrap); - block.Margin = new Thickness(0); - _scrollViewer.Content = block; - } - } -} diff --git a/MinecraftClient/Tui/TuiConsoleBackend.cs b/MinecraftClient/Tui/TuiConsoleBackend.cs deleted file mode 100644 index 9579cd2306..0000000000 --- a/MinecraftClient/Tui/TuiConsoleBackend.cs +++ /dev/null @@ -1,326 +0,0 @@ -using System; -using System.Collections.Concurrent; -using System.Diagnostics; -using System.Runtime.InteropServices; -using System.Threading; -using Avalonia; -using Avalonia.Threading; -using Consolonia; - -namespace MinecraftClient.Tui -{ - /// - /// Console backend that uses Avalonia/Consolonia for a full-screen TUI. - /// Avalonia Dispatcher runs on the main thread; MCC logic runs on background threads. - /// - public class TuiConsoleBackend : IConsoleBackend - { - public event EventHandler? MessageReceived; - public event EventHandler? OnInputChange; - - private MainTuiView? _view; - - public bool DisplayUserInput { get; set; } = true; - - internal static TuiConsoleBackend? Instance { get; private set; } - - private Program.StartupState? _pendingStartupState; - private readonly ManualResetEventSlim _viewReady = new(false); - - /// - /// Initializes the Avalonia app and starts the main UI loop. - /// This blocks the calling thread until the TUI exits. - /// Before blocking, it starts MCC's remaining initialization on a background thread. - /// - internal void RunTuiMainLoop(string[] args, Program.StartupState startupState) - { - Instance = this; - _pendingStartupState = startupState; - - AppDomain.CurrentDomain.ProcessExit += (_, _) => RestoreTerminalState(); - - System.Console.CancelKeyPress += (_, e) => - { - e.Cancel = true; - var view = _view; - if (view != null) - Dispatcher.UIThread.Post(() => view.HandleCtrlC()); - }; - - new Thread(() => - { - _viewReady.Wait(); - ContinueMccStartup(args); - }) - { Name = "MCC-Main", IsBackground = true }.Start(); - - AppBuilder builder = AppBuilder.Configure() - .UseConsolonia() - .UseAutoDetectedConsole() - .LogToException(); - - try - { - builder.StartWithConsoleLifetime(Array.Empty()); - } - finally - { - RestoreTerminalState(); - } - } - - private static volatile bool _terminalRestored; - - private static void RestoreTerminalState() - { - if (_terminalRestored) return; - _terminalRestored = true; - - try - { - System.Console.Write("\x1b[?1000l"); // disable X11 mouse - System.Console.Write("\x1b[?1001l"); // disable highlight mouse - System.Console.Write("\x1b[?1002l"); // disable button-event mouse - System.Console.Write("\x1b[?1003l"); // disable any-event mouse - System.Console.Write("\x1b[?1004l"); // disable focus events - System.Console.Write("\x1b[?1005l"); // disable UTF-8 mouse encoding - System.Console.Write("\x1b[?1006l"); // disable SGR mouse encoding - System.Console.Write("\x1b[?1015l"); // disable urxvt mouse encoding - System.Console.Write("\x1b[?1049l"); // leave alternate screen - System.Console.Write("\x1b[?25h"); // show cursor - System.Console.Write("\x1b[?7h"); // re-enable line wrap - System.Console.Write("\x1b[0m"); // reset attributes - System.Console.Write("\x1b[2J"); // clear entire screen - System.Console.Write("\x1b[H"); // cursor to home - System.Console.Out.Flush(); - } - catch { } - - if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - { - try - { - using var proc = Process.Start(new ProcessStartInfo - { - FileName = "stty", - Arguments = "sane", - UseShellExecute = false, - }); - proc?.WaitForExit(500); - } - catch { } - } - } - - private static void ContinueMccStartup(string[] args) - { - try - { - var instance = Instance; - if (instance?._pendingStartupState is { } state) - { - instance._pendingStartupState = null; - if (!Program.ProcessStartupState(state)) - return; - } - - Program.RunStartupSequence(args); - } - catch (Exception ex) - { - ConsoleIO.WriteLineFormatted($"§c[MCC] Fatal: {ex.Message}"); - } - } - - internal void SetView(MainTuiView view) - { - _view = view; - _viewReady.Set(); - } - - internal MainTuiView? GetView() => _view; - - public void Init() - { - } - - public void WriteLine(string text) - { - var view = _view; - if (view == null) - { - System.Console.WriteLine(text); - return; - } - - if (Dispatcher.UIThread.CheckAccess()) - view.AppendLogLine(text); - else - Dispatcher.UIThread.Post(() => view.AppendLogLine(text)); - } - - public void WriteLineFormatted(string text) - { - var view = _view; - if (view == null) - { - System.Console.WriteLine(Scripting.ChatBot.GetVerbatim(text)); - return; - } - - if (Dispatcher.UIThread.CheckAccess()) - view.AppendFormattedLogLine(text); - else - Dispatcher.UIThread.Post(() => view.AppendFormattedLogLine(text)); - } - - public void BeginReadThread() - { - } - - public void StopReadThread() - { - DismissOverlay(); - } - - /// - /// Close any open overlay (e.g. inventory) so the user can interact - /// with the main console again. Safe to call from any thread. - /// - internal void DismissOverlay() - { - var view = _view; - if (view == null) return; - - if (Dispatcher.UIThread.CheckAccess()) - { - view.HideOverlay(); - } - else - { - Dispatcher.UIThread.Post(() => view.HideOverlay()); - } - } - - public string RequestImmediateInput() - { - if (_shutdownRequested) - { - Thread.Sleep(Timeout.Infinite); - return string.Empty; - } - - var mre = new ManualResetEventSlim(false); - string? result = null; - - void Handler(object? sender, string e) - { - result = e; - mre.Set(); - } - - MessageReceived += Handler; - mre.Wait(); - MessageReceived -= Handler; - - return result ?? string.Empty; - } - - public string? ReadPassword() - { - return RequestImmediateInput(); - } - - public void ClearInputBuffer() - { - if (_view == null) return; - if (Dispatcher.UIThread.CheckAccess()) - _view.ClearInput(); - else - Dispatcher.UIThread.Post(() => _view?.ClearInput()); - } - - public void ClearScreen() - { - if (_view == null) return; - if (Dispatcher.UIThread.CheckAccess()) - _view.ClearLog(); - else - Dispatcher.UIThread.Post(() => _view?.ClearLog()); - } - - public void SetInputVisible(bool visible) - { - } - - public void SetBackreadBufferLimit(int limit) - { - } - - public void Shutdown() - { - _shutdownRequested = true; - RestoreTerminalState(); - - var lifetime = Application.Current?.ApplicationLifetime - as Avalonia.Controls.ApplicationLifetimes.IControlledApplicationLifetime; - - if (lifetime != null) - { - if (Dispatcher.UIThread.CheckAccess()) - lifetime.Shutdown(); - else - Dispatcher.UIThread.Post(() => lifetime.Shutdown()); - } - - new Thread(() => - { - Thread.Sleep(1000); - Environment.Exit(0); - }) - { Name = "TUI-Exit-Guard", IsBackground = true }.Start(); - } - - private volatile bool _shutdownRequested; - - /// - /// Called from the TUI view when user presses Enter in the command input. - /// Always fires MessageReceived so that both the normal read-thread path - /// and RequestImmediateInput (used by offline prompt) receive the input. - /// - internal void OnCommandSubmitted(string command) - { - MessageReceived?.Invoke(this, command); - } - - /// - /// Called from the TUI view when user types in the command input. - /// - internal void OnInputChanged(string text, int cursorPos) - { - OnInputChange?.Invoke(this, new ConsoleInputBuffer(text, cursorPos)); - } - - internal void UpdateSuggestions(CommandSuggestion[] suggestions, (int Start, int End) range) - { - var view = _view; - if (view == null) return; - - if (Dispatcher.UIThread.CheckAccess()) - view.UpdateSuggestions(suggestions, range); - else - Dispatcher.UIThread.Post(() => view.UpdateSuggestions(suggestions, range)); - } - - internal void ClearSuggestions() - { - var view = _view; - if (view == null) return; - - if (Dispatcher.UIThread.CheckAccess()) - view.ClearSuggestions(); - else - Dispatcher.UIThread.Post(() => view.ClearSuggestions()); - } - } -} diff --git a/MinecraftClient/Tui/TuiTooltipService.cs b/MinecraftClient/Tui/TuiTooltipService.cs deleted file mode 100644 index 0ae51607ef..0000000000 --- a/MinecraftClient/Tui/TuiTooltipService.cs +++ /dev/null @@ -1,114 +0,0 @@ -using System; -using System.Collections.Generic; -using Avalonia; -using Avalonia.Controls; -using Avalonia.Media; - -namespace MinecraftClient.Tui -{ - public sealed class TuiTooltipLine - { - public string Text { get; init; } = ""; - public IBrush Foreground { get; init; } = Brushes.White; - } - - /// - /// Global tooltip that floats above all TUI content. - /// Owned by MainTuiView, used by minimap / chat / other components. - /// - public sealed class TuiTooltipService - { - private readonly Panel _rootPanel; - private readonly Canvas _canvas; - private readonly Border _border; - private readonly StackPanel _content; - - internal TuiTooltipService(Panel rootPanel) - { - _content = new StackPanel { Orientation = Avalonia.Layout.Orientation.Vertical }; - _border = new Border - { - Background = new SolidColorBrush(Color.FromArgb(230, 20, 20, 20)), - BorderBrush = new SolidColorBrush(Color.FromRgb(120, 120, 120)), - BorderThickness = new Thickness(1), - Padding = new Thickness(1), - Child = _content, - IsVisible = false, - }; - - _canvas = new Canvas - { - IsHitTestVisible = false, - Children = { _border }, - }; - - _rootPanel = rootPanel; - rootPanel.Children.Add(_canvas); - } - - /// Global X of the mouse cursor. - /// Global Y of the mouse cursor. - /// - /// If true, try placing tooltip to the right of mouseX; - /// if false, try placing to the left. - /// The service auto-flips when the tooltip would overflow the screen. - /// - public void Show(double mouseX, double mouseY, IReadOnlyList lines, - bool preferRight = true) - { - _content.Children.Clear(); - - if (lines.Count == 0) - { - _border.IsVisible = false; - return; - } - - int maxChars = 0; - foreach (var line in lines) - { - _content.Children.Add(new TextBlock - { - Text = line.Text, - Foreground = line.Foreground, - TextWrapping = TextWrapping.Wrap, - Padding = new Thickness(0), - Margin = new Thickness(0), - FontSize = 1, - }); - if (line.Text.Length > maxChars) - maxChars = line.Text.Length; - } - - double tipW = maxChars + 4; - double screenW = _rootPanel.Bounds.Width; - - const double gap = 1; - double gx; - if (preferRight) - { - gx = mouseX + gap; - if (gx + tipW > screenW) - gx = mouseX - tipW - gap; - } - else - { - gx = mouseX - tipW - gap; - if (gx < 0) - gx = mouseX + gap; - } - - Canvas.SetLeft(_border, Math.Max(0, gx)); - Canvas.SetTop(_border, Math.Max(0, mouseY)); - _border.IsVisible = true; - } - - public void Hide() - { - _border.IsVisible = false; - _content.Children.Clear(); - } - - public bool IsVisible => _border.IsVisible; - } -} diff --git a/MinecraftClient/UpgradeHelper.cs b/MinecraftClient/UpgradeHelper.cs deleted file mode 100644 index cd08a1a73d..0000000000 --- a/MinecraftClient/UpgradeHelper.cs +++ /dev/null @@ -1,360 +0,0 @@ -using System; -using System.IO; -using System.IO.Compression; -using System.Net; -using System.Net.Http; -using System.Net.Http.Handlers; -using System.Runtime.InteropServices; -using System.Text.RegularExpressions; -using System.Threading; -using System.Threading.Tasks; - -namespace MinecraftClient -{ - internal static class UpgradeHelper - { - private const string GithubReleaseUrl = "https://github.com/MCCTeam/Minecraft-Console-Client/releases"; - - private static int running = 0; // Type: bool; 1 for running; 0 for stopped; - private static CancellationTokenSource cancellationTokenSource = new(); - private static CancellationToken cancellationToken = CancellationToken.None; - - private static long lastBytesTransferred = 0, minNotifyThreshold = 5 * 1024 * 1024; - private static DateTime downloadStartTime = DateTime.Now, lastNotifyTime = DateTime.Now; - private static TimeSpan minNotifyInterval = TimeSpan.FromMilliseconds(3000); - - public static void CheckUpdate(bool forceUpdate = false) - { - bool needPromptUpdate = true; - if (!forceUpdate && CompareVersionInfo(Settings.Config.Head.CurrentVersion, Settings.Config.Head.LatestVersion)) - { - needPromptUpdate = false; - ConsoleIO.WriteLineFormatted("§e" + string.Format(Translations.mcc_has_update, GithubReleaseUrl), true); - } - Task.Run(() => - { - DoCheckUpdate(CancellationToken.None); - if (needPromptUpdate) - { - if (CompareVersionInfo(Settings.Config.Head.CurrentVersion, Settings.Config.Head.LatestVersion)) - { - ConsoleIO.WriteLineFormatted("§e" + string.Format(Translations.mcc_has_update, GithubReleaseUrl), true); - } - else if (forceUpdate) - { - ConsoleIO.WriteLine(Translations.mcc_update_already_latest + ' ' + Translations.mcc_update_promote_force_cmd); - } - } - }); - } - - public static bool DownloadLatestBuild(bool forceUpdate, bool isCommandLine = false) - { - if (Interlocked.Exchange(ref running, 1) == 1) - { - return false; - } - else - { - if (!cancellationTokenSource.TryReset()) - cancellationTokenSource = new(); - cancellationToken = cancellationTokenSource.Token; - Task.Run(async () => - { - string OSInfo = GetOSIdentifier(); - if (Settings.Config.Logging.DebugMessages || string.IsNullOrEmpty(OSInfo)) - ConsoleIO.WriteLine(string.Format("OS: {0}, Arch: {1}, Framework: {2}", - RuntimeInformation.OSDescription, RuntimeInformation.ProcessArchitecture, RuntimeInformation.FrameworkDescription)); - if (string.IsNullOrEmpty(OSInfo)) - { - ConsoleIO.WriteLine(Translations.mcc_update_platform_not_support); - } - else - { - string latestVersion = DoCheckUpdate(cancellationToken); - if (cancellationToken.IsCancellationRequested) - { - } - else if (string.IsNullOrEmpty(latestVersion)) - { - ConsoleIO.WriteLine(Translations.mcc_update_check_fail); - } - else if (!forceUpdate && !CompareVersionInfo(Settings.Config.Head.CurrentVersion, Settings.Config.Head.LatestVersion)) - { - ConsoleIO.WriteLine(Translations.mcc_update_already_latest + ' ' + - (isCommandLine ? Translations.mcc_update_promote_force_cmd : Translations.mcc_update_promote_force)); - } - else - { - ConsoleIO.WriteLine(string.Format(Translations.mcc_update_exist_update, latestVersion, OSInfo)); - - HttpClientHandler httpClientHandler = new() { AllowAutoRedirect = true }; - AddProxySettings(httpClientHandler); - - ProgressMessageHandler progressMessageHandler = new(httpClientHandler); - progressMessageHandler.HttpReceiveProgress += (_, info) => - { - DateTime now = DateTime.Now; - if (now - lastNotifyTime > minNotifyInterval || info.BytesTransferred - lastBytesTransferred > minNotifyThreshold) - { - lastNotifyTime = now; - lastBytesTransferred = info.BytesTransferred; - if (info.TotalBytes.HasValue) - { - ConsoleIO.WriteLine(string.Format(Translations.mcc_update_progress, - (double)info.BytesTransferred / info.TotalBytes * 100.0, - (double)info.BytesTransferred / 1024 / 1024, - (double)info.TotalBytes / 1024 / 1024, - (double)info.BytesTransferred / 1024 / (now - downloadStartTime).TotalSeconds, - TimeSpan.FromMilliseconds( - (double)(info.TotalBytes - info.BytesTransferred) / (info.BytesTransferred / (now - downloadStartTime).TotalMilliseconds) - ).ToString("hh\\:mm\\:ss")) - ); - } - else - { - ConsoleIO.WriteLine(string.Format(Translations.mcc_update_progress_type2, - (double)info.BytesTransferred / 1024 / 1024, - (double)info.BytesTransferred / 1024 / (now - downloadStartTime).TotalSeconds) - ); - } - } - }; - - HttpClient httpClient = new(progressMessageHandler); - - try - { - string downloadUrl = $"{GithubReleaseUrl}/download/{latestVersion}/"; - string fileNameWithoutExtension = $"MinecraftClient-{latestVersion}-{OSInfo}"; - string fileName = fileNameWithoutExtension + GetExecutableFileExtension(); - downloadStartTime = DateTime.Now; - lastNotifyTime = DateTime.MinValue; - lastBytesTransferred = 0; - - bool hasFile = true; - HttpResponseMessage response = await httpClient.GetAsync(downloadUrl + fileName, HttpCompletionOption.ResponseHeadersRead, cancellationToken); - if (!response.IsSuccessStatusCode) - { - fileName = fileNameWithoutExtension + ".zip"; - response = await httpClient.GetAsync(downloadUrl + fileName, HttpCompletionOption.ResponseHeadersRead, cancellationToken); - if (!response.IsSuccessStatusCode) - { - hasFile = false; - ConsoleIO.WriteLine($"{Translations.mcc_update_download_fail} File {fileNameWithoutExtension}{GetExecutableFileExtension()} not found."); - } - } - - if (hasFile) - { - using (FileStream fileStream = File.Create(fileName)) - { - await response.Content.CopyToAsync(fileStream); - } - - ConsoleIO.WriteLineFormatted("§e" + string.Format(Translations.mcc_update_save_as, fileName), true); - - if (!OperatingSystem.IsWindows()) - File.SetUnixFileMode(fileName, UnixFileMode.UserRead - | UnixFileMode.UserWrite - | UnixFileMode.UserExecute - | UnixFileMode.GroupRead - | UnixFileMode.GroupExecute - | UnixFileMode.OtherRead - | UnixFileMode.OtherExecute); - } - - response.Dispose(); - } - catch (TaskCanceledException) { } - catch (Exception e) - { - ConsoleIO.WriteLine($"{Translations.mcc_update_download_fail}\n{e.GetType().Name}: {e.Message}\n{e.StackTrace}"); - } - - httpClient.Dispose(); - progressMessageHandler.Dispose(); - httpClientHandler.Dispose(); - } - } - Interlocked.Exchange(ref running, 0); - }, cancellationToken); - return true; - } - } - - public static void CancelDownloadUpdate() - { - if (!cancellationTokenSource.IsCancellationRequested) - cancellationTokenSource.Cancel(); - } - - public static void HandleBlockingUpdate(bool forceUpgrade) - { - minNotifyInterval = TimeSpan.FromMilliseconds(500); - DownloadLatestBuild(forceUpgrade, true); - while (running == 1) - Thread.Sleep(500); - } - - private static string DoCheckUpdate(CancellationToken cancellationToken) - { - string latestBuildInfo = string.Empty; - HttpClientHandler httpClientHandler = new() { AllowAutoRedirect = false }; - AddProxySettings(httpClientHandler); - HttpClient httpClient = new(httpClientHandler); - Task? httpWebRequest = null; - try - { - httpWebRequest = httpClient.GetAsync(GithubReleaseUrl + "/latest", HttpCompletionOption.ResponseHeadersRead, cancellationToken); - httpWebRequest.Wait(); - if (!cancellationToken.IsCancellationRequested) - { - HttpResponseMessage res = httpWebRequest.Result; - if (res.Headers.Location is not null) - { - Match match = Regex.Match(res.Headers.Location.ToString(), GithubReleaseUrl + @"/tag/(\d{4})(\d{2})(\d{2})-(\d+)"); - if (match.Success && match.Groups.Count == 5) - { - string year = match.Groups[1].Value, month = match.Groups[2].Value, day = match.Groups[3].Value, run = match.Groups[4].Value; - string latestVersion = string.Format("GitHub build {0}, built on {1}-{2}-{3}", run, year, month, day); - latestBuildInfo = string.Format("{0}{1}{2}-{3}", year, month, day, run); - if (latestVersion != Settings.Config.Head.LatestVersion) - { - Settings.Config.Head.LatestVersion = latestVersion; - Program.WriteBackSettings(false); - } - } - } - res.Dispose(); - } - httpWebRequest.Dispose(); - } - catch (Exception) { } - finally { httpWebRequest?.Dispose(); } - httpClient.Dispose(); - httpClientHandler.Dispose(); - return latestBuildInfo; - } - - private static string GetOSIdentifier() - { - string OSPlatformName; - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - OSPlatformName = "win"; - else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - OSPlatformName = "linux"; - else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - OSPlatformName = "osx"; - else if (RuntimeInformation.IsOSPlatform(OSPlatform.FreeBSD)) - OSPlatformName = "freebsd"; - else - return string.Empty; - - string architecture = RuntimeInformation.ProcessArchitecture switch - { - Architecture.X86 => "x86", - Architecture.X64 => "x64", - Architecture.Arm => "arm32", - Architecture.Arm64 => "arm64", - Architecture.Wasm => "wasm", - Architecture.S390x => "s390x", - Architecture.LoongArch64 => "loongarch64", - Architecture.Armv6 => "armv6", - Architecture.Ppc64le => "ppc64le", - _ => RuntimeInformation.ProcessArchitecture.ToString(), - }; - - return OSPlatformName + '-' + architecture; - } - - private static string GetExecutableFileExtension() - { - if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) - return ".exe"; - else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) - return string.Empty; - else if (RuntimeInformation.IsOSPlatform(OSPlatform.OSX)) - return string.Empty; - else if (RuntimeInformation.IsOSPlatform(OSPlatform.FreeBSD)) - return string.Empty; - else - return string.Empty; - } - - private static bool CompareVersionInfo(string? current, string? latest) - { - if (current is null || latest is null) - return false; - Regex reg = new(@"\w+\sbuild\s(\d+),\sbuilt\son\s(\d{4})[-\/\.\s]?(\d{2})[-\/\.\s]?(\d{2}).*"); - Regex reg2 = new(@"\w+\sbuild\s(\d+),\sbuilt\son\s\w+\s(\d{2})[-\/\.\s]?(\d{2})[-\/\.\s]?(\d{4}).*"); - - DateTime? curTime = null, latestTime = null; - - Match curMatch = reg.Match(current); - if (curMatch.Success && curMatch.Groups.Count == 5) - { - try { curTime = new(int.Parse(curMatch.Groups[2].Value), int.Parse(curMatch.Groups[3].Value), int.Parse(curMatch.Groups[4].Value)); } - catch { curTime = null; } - } - if (curTime is null) - { - curMatch = reg2.Match(current); - try { curTime = new(int.Parse(curMatch.Groups[4].Value), int.Parse(curMatch.Groups[3].Value), int.Parse(curMatch.Groups[2].Value)); } - catch { curTime = null; } - } - if (curTime is null) - return false; - - Match latestMatch = reg.Match(latest); - if (latestMatch.Success && latestMatch.Groups.Count == 5) - { - try { latestTime = new(int.Parse(latestMatch.Groups[2].Value), int.Parse(latestMatch.Groups[3].Value), int.Parse(latestMatch.Groups[4].Value)); } - catch { latestTime = null; } - } - if (latestTime is null) - { - latestMatch = reg2.Match(latest); - try { latestTime = new(int.Parse(latestMatch.Groups[4].Value), int.Parse(latestMatch.Groups[3].Value), int.Parse(latestMatch.Groups[2].Value)); } - catch { latestTime = null; } - } - if (latestTime is null) - return false; - - int curBuildId, latestBuildId; - try - { - curBuildId = int.Parse(curMatch.Groups[1].Value); - latestBuildId = int.Parse(latestMatch.Groups[1].Value); - } - catch { return false; } - - if (latestTime > curTime) - return true; - else if (latestTime >= curTime && latestBuildId > curBuildId) - return true; - else - return false; - } - - private static void AddProxySettings(HttpClientHandler httpClientHandler) - { - if (Settings.Config.Proxy.Enabled_Update) - { - string proxyAddress; - if (!string.IsNullOrWhiteSpace(Settings.Config.Proxy.Username) && !string.IsNullOrWhiteSpace(Settings.Config.Proxy.Password)) - proxyAddress = string.Format("{0}://{3}:{4}@{1}:{2}", - Settings.Config.Proxy.Proxy_Type.ToString().ToLower(), - Settings.Config.Proxy.Server.Host, - Settings.Config.Proxy.Server.Port, - Settings.Config.Proxy.Username, - Settings.Config.Proxy.Password); - else - proxyAddress = string.Format("{0}://{1}:{2}", - Settings.Config.Proxy.Proxy_Type.ToString().ToLower(), - Settings.Config.Proxy.Server.Host, Settings.Config.Proxy.Server.Port); - httpClientHandler.Proxy = new WebProxy(proxyAddress, true); - } - } - } -} diff --git a/MinecraftClient/WinAPI/ConsoleIcon.cs b/MinecraftClient/WinAPI/ConsoleIcon.cs deleted file mode 100644 index cc243dda60..0000000000 --- a/MinecraftClient/WinAPI/ConsoleIcon.cs +++ /dev/null @@ -1,108 +0,0 @@ -using System; -using System.Drawing; -using System.IO; -using System.Net.Http; -using System.Runtime.InteropServices; -using System.Runtime.Versioning; -using System.Threading; -using System.Threading.Tasks; - -namespace MinecraftClient.WinAPI -{ - /// - /// Allow to set the player skin as console icon, on Windows only. - /// See StackOverflow no. 2986853 - /// - [SupportedOSPlatform("windows")] - public static class ConsoleIcon - { - [DllImport("kernel32.dll", SetLastError = true)] - private static extern bool SetConsoleIcon(IntPtr hIcon); - - [System.Runtime.InteropServices.DllImport("user32.dll", CharSet = System.Runtime.InteropServices.CharSet.Auto)] - private static extern IntPtr SendMessage(IntPtr hWnd, int Msg, int wParam, IntPtr lParam); - - /// - /// An application sends the WM_SETICON message to associate a new large or small icon with a window. - /// The system displays the large icon in the ALT+TAB dialog box, and the small icon in the window caption. - /// - public enum WinMessages : uint - { - SETICON = 0x0080, - } - - private static void SetWindowIcon(System.Drawing.Icon icon) - { - IntPtr mwHandle = System.Diagnostics.Process.GetCurrentProcess().MainWindowHandle; - SendMessage(mwHandle, (int)WinMessages.SETICON, 0, icon.Handle); - SendMessage(mwHandle, (int)WinMessages.SETICON, 1, icon.Handle); - } - - /// - /// Asynchronously download the player's skin and set the head as console icon - /// - public static void SetPlayerIconAsync(string playerName) - { - Thread t = new(new ThreadStart(delegate - { - HttpClient httpClient = new(); - try - { - Task httpWebRequest = httpClient.GetStreamAsync("https://minotar.net/helm/" + playerName + "/100.png"); - httpWebRequest.Wait(); - Stream imageStream = httpWebRequest.Result; - try - { - Bitmap skin = new(Image.FromStream(imageStream)); //Read skin from network - SetWindowIcon(Icon.FromHandle(skin.GetHicon())); // Windows 10+ (New console) - SetConsoleIcon(skin.GetHicon()); // Windows 8 and lower (Older console) - } - catch (ArgumentException) - { - /* Invalid image in HTTP response */ - } - imageStream.Dispose(); - httpWebRequest.Dispose(); - } - catch (AggregateException ae) - { - bool needRevert = false; - foreach (var ex in ae.InnerExceptions) - { - if (ex is HttpRequestException || ex is TaskCanceledException) //Skin not found? Reset to default icon - needRevert = true; - } - if (needRevert) - RevertToMCCIcon(); - } - catch (HttpRequestException) //Skin not found? Reset to default icon - { - RevertToMCCIcon(); - } - finally - { - httpClient.Dispose(); - } - } - )) - { - Name = "Player skin icon setter" - }; - t.Start(); - } - - /// - /// Set the icon back to the default MCC icon - /// - public static void RevertToMCCIcon() - { - try - { - Icon defaultIcon = Icon.ExtractAssociatedIcon(Environment.ProcessPath!)!; - SetWindowIcon(Icon.FromHandle(defaultIcon.Handle)); // Windows 10+ (New console) - SetConsoleIcon(defaultIcon.Handle); // Windows 8 and lower (Older console) - } - catch { } - } - } -} diff --git a/MinecraftClient/WinAPI/ExitCleanUp.cs b/MinecraftClient/WinAPI/ExitCleanUp.cs deleted file mode 100644 index 98f93fe1cb..0000000000 --- a/MinecraftClient/WinAPI/ExitCleanUp.cs +++ /dev/null @@ -1,96 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.InteropServices; - -namespace MinecraftClient.WinAPI -{ - /// - /// Perform clean up before quitting application - /// - /// - /// Only ctrl+c/ctrl+break will be captured when running on mono - /// - public static class ExitCleanUp - { - /// - /// Store codes to run before quitting - /// - private static readonly List actions = new(); - - static ExitCleanUp() - { - try - { - // Capture all close event - _handler += CleanUp; - // Use delegate directly cause program to crash - SetConsoleCtrlHandler(_handler, true); - } - catch (DllNotFoundException) - { - // Probably on mono, fallback to ctrl+c only - static void value(object sender, ConsoleCancelEventArgs e) - { - RunCleanUp(); - } - - Console.CancelKeyPress += value!; - } - } - - /// - /// Add a new action to be performed before application exit - /// - /// Action to run - public static void Add(Action cleanUpCode) - { - actions.Add(cleanUpCode); - } - - /// - /// Run all actions - /// - /// - /// For .Net native - /// - private static void RunCleanUp() - { - foreach (Action action in actions) - { - action(); - } - } - - /// - /// Run all actions - /// - /// - /// - /// - /// For win32 API - /// - private static bool CleanUp(CtrlType sig) - { - foreach (Action action in actions) - { - action(); - } - return false; - } - - [DllImport("Kernel32")] - private static extern bool SetConsoleCtrlHandler(EventHandler handler, bool add); - - private delegate bool EventHandler(CtrlType sig); - static EventHandler? _handler; - - enum CtrlType - { - CTRL_C_EVENT = 0, - CTRL_BREAK_EVENT = 1, - CTRL_CLOSE_EVENT = 2, - CTRL_LOGOFF_EVENT = 5, - CTRL_SHUTDOWN_EVENT = 6 - } - } -} diff --git a/MinecraftClient/config/ChatBots/AutoLeaveOnLowHp.cs b/MinecraftClient/config/ChatBots/AutoLeaveOnLowHp.cs deleted file mode 100644 index 1e5dfacc32..0000000000 --- a/MinecraftClient/config/ChatBots/AutoLeaveOnLowHp.cs +++ /dev/null @@ -1,22 +0,0 @@ -//MCCScript 1.0 - -MCC.LoadBot(new AutoLeaveOnLowHp()); - -//MCCScript Extensions - -namespace MinecraftClient.ChatBots -{ - public class AutoLeaveOnLowHp : ChatBot - { - private float HEALTH_BOUNDARY = 10.0f; // 10 HP - - public override void OnHealthUpdate(float health, int food) - { - if (health <= HEALTH_BOUNDARY) - { - LogToConsole("Leaving because of low HP (Reconnecting in 5 minutes)!"); - ReconnectToTheServer(-1, 300); // Disconnect and reconnect after 5 minutes (300 seconds) - } - } - } -} diff --git a/MinecraftClient/config/ChatBots/AutoLook.cs b/MinecraftClient/config/ChatBots/AutoLook.cs deleted file mode 100644 index d182edb1c4..0000000000 --- a/MinecraftClient/config/ChatBots/AutoLook.cs +++ /dev/null @@ -1,64 +0,0 @@ -//MCCScript 1.0 - -MCC.LoadBot(new AutoLook()); - -//MCCScript Extensions - -public class AutoLook : ChatBot -{ - private Entity _entityToLookAt; - public override void Initialize() - { - if (GetEntityHandlingEnabled() && GetTerrainEnabled()) return; - LogToConsole("Entity Handling or Terrain Handling is not enabled in the config file!"); - LogToConsole("This bot will be unloaded."); - UnloadBot(); - } - - public override void OnEntityDespawn(Entity entity) - { - if (entity == _entityToLookAt) - { - _entityToLookAt = null; - } - } - public override void OnEntitySpawn(Entity entity) - { - HandleEntity(entity); - } - public override void OnEntityMove(Entity entity) - { - var tempBool = HandleEntity(entity); - //LogDebugToConsole(tempBool); - if (!tempBool) return; - LookAtLocation(entity.Location); - } - - /// - /// Handles an entity, and tracks it if it is closer then the one we are currently tracking - /// - /// True if found - private bool HandleEntity(Entity entity) - { - if (entity.Type != EntityType.Player) - { - return false; - } - if (_entityToLookAt == null) - { - _entityToLookAt = entity; - return true; - } - if (GetCurrentLocation().Distance(entity.Location) < GetCurrentLocation().Distance(_entityToLookAt.Location)) - { - _entityToLookAt = entity; - return true; - } - - if (entity.ID != _entityToLookAt.ID) return false; - _entityToLookAt = entity; //Handle looking at the same entity - return true; - - } - -} \ No newline at end of file diff --git a/MinecraftClient/config/ChatBots/AutoTree.cs b/MinecraftClient/config/ChatBots/AutoTree.cs deleted file mode 100644 index 21d731b77d..0000000000 --- a/MinecraftClient/config/ChatBots/AutoTree.cs +++ /dev/null @@ -1,201 +0,0 @@ -//MCCScript 1.0 -//using Brigadier.NET; -//using Brigadier.NET.Builder; -//using MinecraftClient; -//using MinecraftClient.CommandHandler; -//using MinecraftClient.CommandHandler.Patch; -//using MinecraftClient.Inventory; -//using MinecraftClient.Mapping; -//using MinecraftClient.Scripting; -//using System.Collections.Generic; -//using System.Linq; -//using static MinecraftClient.ChatBots.AutoCraft.Configs; -//using System.Text; - -MCC.LoadBot(new AutoTree()); - -//MCCScript Extensions - -public class AutoTree : ChatBot -{ - public const string CommandName = "autotree"; - - // Auto sapling placer - made for auto tree machine - // Put your bot in designed position for placing sapling - // Set the tree type by "/autotree type " - // Toggle on and off by "/autotree toggle" - - // Hard-code the location of the sapling (dirt coordinate with y-axis plus 1) - // Or use the in-game command "/autotree set x y z" - Location sapling = new Location(-6811, 79, -9935); - - Material[] saplingBlocks = - { - Material.AcaciaSapling, - Material.BirchSapling, - Material.DarkOakSapling, - Material.JungleSapling, - Material.OakSapling, - Material.SpruceSapling - }; - - ItemType[] saplingItems = - { - ItemType.AcaciaSapling, - ItemType.BirchSapling, - ItemType.DarkOakSapling, - ItemType.JungleSapling, - ItemType.OakSapling, - ItemType.SpruceSapling - }; - - bool running = false; - int treeTypeIndex = 1; // Default birch tree - - public override void Update() - { - if (running) - { - Material blockType = GetWorld().GetBlock(sapling).Type; - if (blockType == saplingBlocks[treeTypeIndex]) // Tree not yet grown - return; - switch (blockType) - { - case Material.Air: - // No tree, plant something - if (!SwitchToSapling()) - { - LogToConsole("No sapling in hotbar. Refill and start again."); - Toggle(); - break; - } - SendPlaceBlock(sapling, Direction.Up); - break; - } - } - } - - public override void Initialize() - { - if (!GetTerrainEnabled()) - { - LogToConsoleTranslated("extra.terrainandmovement_required"); - UnloadBot(); - } - else if (!GetInventoryEnabled()) - { - LogToConsoleTranslated("extra.inventory_required"); - UnloadBot(); - } - else - { - McClient.dispatcher.Register(l => l.Literal("help") - .Then(l => l.Literal(CommandName) - .Executes(r => OnCommandHelp(r.Source, string.Empty)) - .Then(l => l.Literal("set") - .Executes(r => OnCommandHelp(r.Source, "set"))) - .Then(l => l.Literal("type") - .Executes(r => OnCommandHelp(r.Source, "type"))) - ) - ); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Literal("toggle") - .Executes(r => { return r.Source.SetAndReturn(CmdResult.Status.Done, Toggle() ? "Now is running" : "Now is stopping"); })) - .Then(l => l.Literal("set") - .Then(l => l.Argument("Location", MccArguments.Location()) - .Executes(r => OnCommandSet(r.Source, MccArguments.GetLocation(r, "Location"))))) - .Then(l => l.Literal("type") - .Then(l => l.Argument("TreeType", Arguments.String()) - .Executes(r => OnCommandType(r.Source, Arguments.GetString(r, "TreeType"))))) - .Then(l => l.Literal("_help") - .Redirect(McClient.dispatcher.GetRoot().GetChild("help").GetChild(CommandName))) - ); - - LogToConsole("Loaded."); - } - } - - public override void OnUnload() - { - McClient.dispatcher.Unregister(CommandName); - McClient.dispatcher.GetRoot().GetChild("help").RemoveChild(CommandName); - } - - private int OnCommandHelp(CmdResult r, string? cmd) - { - return r.SetAndReturn(cmd switch - { -#pragma warning disable format // @formatter:off - "set" => "Set the location for placing sapling. Usage: set ", - "type" => "Set the tree type. Usage: type ", - _ => "Available commands: toggle, set, type" - + '\n' + McClient.dispatcher.GetAllUsageString(CommandName, false), -#pragma warning restore format // @formatter:on - }); - } - - private int OnCommandSet(CmdResult r, Location location) - { - SetLocation(location.ToAbsolute(GetCurrentLocation())); - return r.SetAndReturn(CmdResult.Status.Done, "Location set to " + location.ToString()); - } - - private int OnCommandType(CmdResult r, string treeType) - { - for (int i = 0; i < saplingItems.Length; i++) - { - if (saplingItems[i].ToString().ToLower().StartsWith(treeType)) - { - treeTypeIndex = i; - break; - } - } - return r.SetAndReturn(CmdResult.Status.Done, "Tree sapling type set to " + saplingItems[treeTypeIndex].ToString()); - } - - public bool SetTreeType(int index) - { - if (index >= 0 && index < saplingItems.Length) - { - treeTypeIndex = index; - return true; - } - else return false; - } - - public void SetLocation(Location l) - { - sapling = l; - } - - public bool Toggle() - { - running = !running; - return running; - } - - public bool SwitchToSapling() - { - Container p = GetPlayerInventory(); - if (p.Items.ContainsKey(GetCurrentSlot() - 36) - && p.Items[GetCurrentSlot() - 36].Type == saplingItems[treeTypeIndex]) - { - // Already selected - return true; - } - // Search sapling in hotbar - List result = new List(p.SearchItem(saplingItems[treeTypeIndex])) - .Where(slot => slot >= 36 && slot <= 44) - .ToList(); - if (result.Count <= 0) - { - return false; - } - else - { - ChangeSlot((short)(result[0] - 36)); - return true; - } - } -} diff --git a/MinecraftClient/config/ChatBots/DiscordWebhook.cs b/MinecraftClient/config/ChatBots/DiscordWebhook.cs deleted file mode 100644 index ce0e6d2260..0000000000 --- a/MinecraftClient/config/ChatBots/DiscordWebhook.cs +++ /dev/null @@ -1,813 +0,0 @@ -//MCCScript 1.0 -//using System.Collections.Specialized; -//using MinecraftClient.Protocol; -//using MinecraftClient.Scripting; -//using MinecraftClient; -//using static MinecraftClient.Scripting.ChatBot; -//using System.Collections.Generic; -//using System.Linq; -//using System.Text; -//using System; -//using Brigadier.NET.Builder; -//using MinecraftClient.CommandHandler.Patch; -//using MinecraftClient.CommandHandler; -//using Brigadier.NET; - -MCC.LoadBot(new DiscordWebhook()); - -//MCCScript Extensions -/// -/// Stores all settings for the script. -/// -class WebhoookSettings -{ - #region All variables for the main class - public string WebhookURL { get; set; } - public int SecondsToSaveInCache { get; set; } - public bool SendPrivateMsg { get; set; } - public bool CustomChatDetection { get; set; } - public bool SendServerMsg { get; set; } - public bool GetUUIDDirectlyFromMojang { get; set; } - public bool Togglesending { get; set; } - public bool AllowMentions { get; set; } - public bool NormalChatDetection { get; set; } - private Dictionary> messageCache = new Dictionary>(); - private Dictionary messageContains = new Dictionary(); - private Dictionary messageFrom = new Dictionary(); - private Dictionary namesToUuidMojangCache = new Dictionary(); - private List ignoredPlayers = new List(); - #endregion - - #region All variables for the API class - private string currentSkinMode; - private int size; - private int scale; - private bool overlay; - private bool checkUUID; - private string fallbackSkin; - - private Dictionary skinModes = new Dictionary(); - public string CurrentSkinMode - { - set { if (skinModes.ContainsKey(value)) { currentSkinMode = value; } } - get { return currentSkinMode; } - } - public int Size - { - set { if (value <= 512) { size = value; } } - get { return size; } - } - public int Scale - { - set { if (value <= 10) { this.scale = value; } } - get { return scale; } - } - public bool Overlay - { - set { overlay = value; } - get { return overlay; } - } - public bool CheckUUID - { - set { checkUUID = value; } - get { return checkUUID; } - } - public string FallbackSkin - { - set { if (value == "MHF_Steve" || value == "MHF_Alex") { fallbackSkin = value; } } - get { return fallbackSkin; } - } - #endregion - - /// - /// Setup standard settings. - /// - public WebhoookSettings() - { - // Set preconfigured skinModes - skinModes.Add("flatFace", "https://crafatar.com/avatars/{0}"); - skinModes.Add("cubeHead", "https://crafatar.com/renders/head/{0}"); - skinModes.Add("fullSkin", "https://crafatar.com/renders/body/{0}"); - - // Define standard values for main class - WebhookURL = "https://discord.com/api/webhooks/SomeNumber/RandomStuff"; // Enter your Webhook URL here to start the bot with it predefined. - SendPrivateMsg = true; - CustomChatDetection = true; - SendServerMsg = true; - GetUUIDDirectlyFromMojang = false; - NormalChatDetection = true; - Togglesending = true; - checkUUID = true; - AllowMentions = false; - currentSkinMode = "flatFace"; - SecondsToSaveInCache = 10; - - // Define standard values for API class - size = 100; - scale = 4; - overlay = true; - fallbackSkin = "MHF_Steve"; - } - - public Dictionary GetMessageContains() { return this.messageContains; } - public Dictionary GetMessageFrom() { return this.messageFrom; } - public Dictionary> GetCachedMessages() { return this.messageCache; } - public Dictionary GetSkinModes() { return this.skinModes; } - public Dictionary GetNamesToUuidMojangCache() { return this.namesToUuidMojangCache; } - public void resetUUIDCache() { namesToUuidMojangCache.Clear(); } - public List GetIgnoredPlayers() { return ignoredPlayers; } -} - -class SkinAPI -{ - WebhoookSettings settings = new WebhoookSettings(); - - public SkinAPI(WebhoookSettings s) - { - settings = s; - } - - /// - /// Sends a request with the minecraft name to the mojang servers to optain its UUID. - /// Fails if there are invalid names, due to titles getting in it. - /// - /// Minecraft IGN - /// - public string GetUUIDFromMojang(string name) - { - if (settings.GetNamesToUuidMojangCache().ContainsKey(name)) - return settings.GetNamesToUuidMojangCache()[name]; - - try - { - var request = new ProxiedWebRequest("https://api.mojang.com/users/profiles/minecraft/" + name); - request.Accept = "application/json"; - var response = request.Get(); - string uuid = Json.ParseJson(response.Body)!["id"]!.GetStringValue(); - settings.GetNamesToUuidMojangCache().Add(name, uuid); - return uuid; - } - catch (Exception) { return "00000000000000000000000000000000"; } - } - - /// - /// Gets the UUID from the internal bot command, which is faster and should be safer on servers with titles. - /// Fails on cracked servers. - /// - /// Minecraft IGN - /// Dictionary of UUID's matched with the playername. - /// - public string GetUUIDFromPlayerList(string name, Dictionary playerList) - { - foreach (KeyValuePair player in playerList) - { - if (name.ToLower().Contains(player.Value.ToLower())) - { - return player.Key.Replace("-", ""); - } - } - - // Falback if player leaves the server. - return GetUUIDFromMojang(name); - } - - /// - /// Creates the url which is forewarded to the webhook. - /// - /// Player UUID - /// - public string GetSkinURLCrafatar(string UUID) - { - string parameters = string.Join("&", "size=" + settings.Size, "scale=" + settings.Scale, "default=" + settings.FallbackSkin, (settings.Overlay ? "overlay" : "")); - return string.Format(settings.GetSkinModes()[settings.CurrentSkinMode], UUID + "?" + parameters); - } -} - -/// -/// Stores messages in a uniform format. -/// -class Message -{ - private string senderName; - private string senderUUID; - private string content; - private DateTime time; - - /// - /// Initialize a Message. - /// - /// Player IGN - /// Player UUID - /// Message content - /// - public Message(string sN, string sU, string c, DateTime t) - { - senderName = sN; - senderUUID = sU; - content = c; - time = t; - } - - public string SenderName - { - get { return senderName; } - } - public string SenderUUID - { - get { return senderUUID; } - } - public DateTime Time - { - get { return time; } - } - public string Content - { - get { return content; } - set { content = value; } - } -} - -/// -/// Caches messages, until it is emptied by update(), or -/// a message from another user is entered. -/// -class MessageCache -{ - private WebhoookSettings settings; - private Message msg; - public Message Msg { get { return msg; } } - - public MessageCache(WebhoookSettings s) - { - msg = null; - settings = s; - } - - /// - /// Add a Message to cache. - /// Current message gets appended, if the new message is from the same sender. - /// Otherwise the current message is given back and the new message is saved. - /// - /// New message to add. - /// Current saved message, if the new message is from another player. - public Message Add(Message newMsg) - { - if (msg == null) - { - msg = newMsg; - return null; - } - else - { - if (((msg.SenderUUID == newMsg.SenderUUID && settings.CheckUUID) - || (msg.SenderName == newMsg.SenderName && !settings.CheckUUID)) - && msg.Content.Length + newMsg.Content.Length <= 2000) - { - msg.Content += "\n" + newMsg.Content; - return null; - } - else - { - Message temp = msg; - msg = newMsg; - return temp; - } - } - } - - /// - /// Clears the cache. - /// - /// Current message - public Message Clear() - { - Message temp = msg; - msg = null; - return temp; - } -} - -class DiscordWebhook : ChatBot -{ - public const string CommandName = "discordWebhook"; - - private WebhoookSettings settings = new WebhoookSettings(); - private SkinAPI sAPI; - private MessageCache cache; - - public DiscordWebhook() - { - sAPI = new SkinAPI(settings); - cache = new MessageCache(settings); - } - - public override void Initialize() - { - LogToConsole("Made by Daenges.\nSpecial thanks to Crafatar for providing the beautiful avatars!"); - LogToConsole("Please set a Webhook with '/dw changeurl [URL]'. For further information type '/discordwebhook help'."); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Argument("Commands", Arguments.GreedyString()) - .Executes(r => { - CommandHandler(Arguments.GetString(r, "Commands").Split(' ', StringSplitOptions.TrimEntries)); - return r.Source.SetAndReturn(CmdResult.Status.Done); - })) - ); - } - - public override void OnUnload() - { - McClient.dispatcher.Unregister(CommandName); - } - - public override void Update() - { - if (cache.Msg != null && (DateTime.Now - cache.Msg.Time).TotalSeconds >= settings.SecondsToSaveInCache) - { - SendWebhook(cache.Clear()); - LogDebugToConsole("Cleared cache!"); - } - } - - public override void OnPlayerJoin(Guid uuid, string name) - { - if (uuid.ToString() != string.Empty && name != string.Empty && - uuid.ToString() != null && name != null) - { - if (settings.GetNamesToUuidMojangCache().ContainsKey(name)) - { - settings.GetNamesToUuidMojangCache().Remove(name); - } - } - else - { - LogDebugToConsole(string.Format("Invalid player joined the game! UUID: {0}, Playername: {1}", uuid.ToString(), name)); - } - } - - public override void OnPlayerLeave(Guid uuid, string name) - { - if (uuid.ToString() != string.Empty && name != string.Empty && - uuid.ToString() != null && name != null) - { - if (!settings.GetNamesToUuidMojangCache().ContainsKey(name)) - { - settings.GetNamesToUuidMojangCache().Add(name, uuid.ToString()); - } - } - else - { - LogDebugToConsole(string.Format("Invalid player left the game! UUID: {0}, Playername: {1}", uuid.ToString(), name)); - } - } - - public override bool OnDisconnect(DisconnectReason reason, string message) - { - settings.resetUUIDCache(); - return false; - } - - public override void GetText(string text) - { - if (settings.Togglesending) - { - string message = ""; - string username = ""; - text = settings.AllowMentions ? GetVerbatim(text) : GetVerbatim(text).Replace("@", "[at]"); - Message msg = null; - - if (IsChatMessage(text, ref message, ref username) && settings.NormalChatDetection) - { - if (!settings.GetIgnoredPlayers().Contains(username)) - { - msg = cache.Add(new Message(username, - settings.CheckUUID ? settings.GetUUIDDirectlyFromMojang ? sAPI.GetUUIDFromMojang(username) : sAPI.GetUUIDFromPlayerList(username, GetOnlinePlayersWithUUID()) : "00000000000000000000000000000000", - message, - DateTime.Now)); - } - - } - else if (IsPrivateMessage(text, ref message, ref username) && settings.SendPrivateMsg) - { - if (!settings.GetIgnoredPlayers().Contains(username)) - { - msg = cache.Add(new Message(username, - settings.CheckUUID ? settings.GetUUIDDirectlyFromMojang ? sAPI.GetUUIDFromMojang(username) : sAPI.GetUUIDFromPlayerList(username, GetOnlinePlayersWithUUID()) : "00000000000000000000000000000000", - message, - DateTime.Now)); - } - } - else if (text.Contains(":") && settings.CustomChatDetection) // Some servers have strange chat formats. - { - var messageArray = text.Split(new[] { ':' }, 2); - if (!settings.GetIgnoredPlayers().Contains(messageArray[0])) - { - msg = cache.Add(new Message(messageArray[0], - settings.CheckUUID ? settings.GetUUIDDirectlyFromMojang ? sAPI.GetUUIDFromMojang(messageArray[0]) : sAPI.GetUUIDFromPlayerList(messageArray[0], GetOnlinePlayersWithUUID()) : "00000000000000000000000000000000", - messageArray[1], - DateTime.Now)); - } - } - else if (settings.SendServerMsg) - { - msg = cache.Add(new Message("[Server]", - "", - text, - DateTime.Now)); - - } - if (msg == null) - { - LogDebugToConsole("Saved message to cache."); - } - else { SendWebhook(msg); } - } - } - - /// - /// Appends pings to the discord message content, if - /// given keywords are included. - /// - /// Minecraft IGN - /// Message content - /// Message plus appended pings - public string AddPingsToMessage(string username, string msg) - { - string pings = ""; - if (settings.GetMessageContains().Count > 0) - { - msg = new string(msg.Where(c => !char.IsPunctuation(c)).ToArray()).ToLower(); - - foreach (KeyValuePair keyPhrase in settings.GetMessageContains()) - { - if (msg.Contains(keyPhrase.Key)) { pings += string.Join(" ", keyPhrase.Value); } - } - } - if (settings.GetMessageFrom().ContainsKey(username.ToLower())) - { - pings += settings.GetMessageFrom()[username.ToLower()]; - } - return pings; - } - - public string Sanizize(string input) - { - return string.Join(" ", - input.Replace("\"", "'") - .Replace("\n", "\\n") - .Replace("{", "") - .Replace("}", "") - .Trim() - .Split(' ') - .Where(s => !string.IsNullOrWhiteSpace(s))) - .Replace("\\n ", "\\n"); - } - - /// - /// Sends the message to the discord webhook. - /// - /// Message that will be sent. - public void SendWebhook(Message msg) - { - msg.Content += " " + AddPingsToMessage(msg.SenderName, msg.Content); - - if (settings.WebhookURL != "" && settings.WebhookURL != "https://discord.com/api/webhooks/SomeNumber/RandomStuff") - { - LogDebugToConsole("Send webhook request to Discord."); - try - { - StringBuilder requestData = new StringBuilder(); - - requestData.Append('{'); - requestData.Append("\"username\": \"" + msg.SenderName + "\", "); - requestData.Append("\"content\": \"" + Sanizize(msg.Content) + "\", "); - requestData.Append("\"avatar_url\": \"" + (msg.SenderName == "[Server]" ? sAPI.GetSkinURLCrafatar("f78a4d8dd51b4b3998a3230f2de0c670") : sAPI.GetSkinURLCrafatar(msg.SenderUUID)) + "\""); - requestData.Append("}"); - - PostRequest(settings.WebhookURL, "application/json", requestData.ToString()); - } - catch (Exception e) - { - LogToConsole("An error occured while posting messages to Discord! (Enable Debug to view it.)"); - LogDebugToConsole(string.Format("Requested Link {0}; Username {1}; message: {2}; error: {3}", - msg.SenderName == "[Server]" ? sAPI.GetSkinURLCrafatar("f78a4d8dd51b4b3998a3230f2de0c670") : sAPI.GetSkinURLCrafatar(msg.SenderUUID), msg.SenderName, msg.Content, e.ToString())); - } - } - else - { - LogToConsole("No webhook link provided. Please enter one with '/discordwebhook changeurl [link]'"); - } - } - - /// - /// Help Page - /// - /// Help Page - public string GetHelp() - { - return "/discordWebhook or /dw 'avatar', 'secondstosaveincache', " + - "'ping', 'uuidfrommojang'," + - " 'normalchatdetection', 'customchatdetection'," + - " 'toggleignored', 'checkuuid'," + - " 'sendprivate', 'changeurl'," + - " 'togglesending', 'allowmentions'," + - " 'onlyprivate', 'help'," + - " 'getsettings', 'quit'"; - } - - /// - /// Returns an array of strings, which are in quotes. - /// "\"Hello\" \"There\"" => ["Hello", "There"] - /// - /// Raw string - /// Array with words in quotes. - public List GetStringsInQuotes(string rawData) - { - List result = new List { "" }; - int currentResultPos = 0; - bool startCopy = false; - - foreach (char c in rawData) - { - if (c == '\"') - { - if (startCopy) { result[currentResultPos] = result[currentResultPos].Replace("\"", ""); currentResultPos++; result.Add(""); } - startCopy = !startCopy; - } - if (startCopy) - { - result[currentResultPos] += c.ToString(); - } - } - - return result; - } - - public string PostRequest(string url, string contentType, string content) - { - var request = new ProxiedWebRequest(url); - request.Accept = contentType; - var response = request.Post(contentType, content); - return response.Body; - } - - /// - /// Handles all commands. - /// - /// Only arguments - /// - public string CommandHandler(string[] args) - { - if (args.Length > 0) - { - switch (args[0]) - { - case "avatar": - if (args.Length > 1) - { - if (args[1] == "size") - { - - try - { - settings.Size = int.Parse(args[2]); - return "Changed avatarsize to " + args[2] + " pixel."; - } - catch (Exception) - { - return "That was not a number."; - } - } - - if (args[1] == "scale") - { - try - { - settings.Scale = int.Parse(args[2]); - return "Changed scale to " + args[2] + "."; - } - catch (Exception) - { - return "That was not a number."; - } - } - - if (args[1] == "fallbackskin") - { - settings.FallbackSkin = settings.FallbackSkin == "MHF_Steve" ? "MHF_Alex" : "MHF_Steve"; - return "Changed fallback skin to: " + settings.FallbackSkin; - } - - if (args[1] == "overlay") - { - settings.Overlay = !settings.Overlay; - return "Changed the overlay to: " + settings.Overlay; - } - - if (args[1] == "skintype") - { - if (args.Length > 2) - { - if (settings.GetSkinModes().ContainsKey(args[2])) - { - settings.CurrentSkinMode = args[2]; - return "Changed skin mode to " + args[2]; - } - else - { - return "This mode does not exsist. ('flatFace', 'cubeHead', 'fullSkin')"; - } - } - else - { - return "Enter a value! ('flatFace', 'cubeHead', 'fullSkin')"; - } - } - } - return "This was not a valid option! Try '/dw avatar size/scale/skintype [value]' or '/dw avatar overlay/fallbackskin'."; - - case "secondstosaveincache": - try - { - settings.SecondsToSaveInCache = int.Parse(args[1]); - return "Changed the maximum time for a message in cache to " + args[1] + " seconds."; - } - catch (Exception) - { - return "That was not a number."; - } - - case "ping": - if (args.Length > 1) - { - if (args[1] == "message") - { - if (args[2] == "add") - { - List tempList = GetStringsInQuotes(string.Join(" ", args)); - if (tempList.Count >= 2) - { - if (!settings.GetMessageContains().ContainsKey(tempList[0].ToLower())) - { - settings.GetMessageContains().Add(tempList[0].ToLower(), string.Join(" ", tempList[1])); - return "Added " + tempList[0].ToLower() + " " + string.Join(" ", tempList[1]); - } - else - { - return "This ping already exists"; - } - } - else - { - return "Too many arguments"; - } - } - else - { - List tempList = GetStringsInQuotes(string.Join(" ", args)); - if (settings.GetMessageContains().ContainsKey(tempList[0].ToLower())) - { - settings.GetMessageContains().Remove(tempList[0].ToLower()); - return "Removed " + tempList[0].ToLower(); - } - else - { - return "This key does not exsist."; - } - } - } - if (args[1] == "sender") - { - if (args[2] == "add") - { - List tempList = GetStringsInQuotes(string.Join(" ", args)); - if (tempList.Count >= 2) - { - if (!settings.GetMessageFrom().ContainsKey(tempList[0].ToLower())) - { - settings.GetMessageFrom().Add(tempList[0].ToLower(), string.Join(" ", tempList[1])); - return "Added " + tempList[0].ToLower() + " " + string.Join(" ", tempList[1]); - } - else - { - return "This ping already exists"; - } - } - else - { - return "Too many arguments"; - } - } - else - { - List tempList = GetStringsInQuotes(string.Join(" ", args)); - if (settings.GetMessageFrom().ContainsKey(tempList[0].ToLower())) - { - settings.GetMessageFrom().Remove(tempList[0].ToLower()); - return "Removed " + tempList[0].ToLower(); - } - else - { - return "This key does not exsist."; - } - } - } - else - { - return "This is not a valid option. /discordwebhook ping message/sender add/remove \"Keywords in message\" \"@here <@DiscordID> <@&RoleID>\""; - } - } - else { return "This is not a valid option. /discordwebhook ping message/sender add/remove \"Keywords in message\" \"@here <@DiscordID> <@&RoleID>\""; } - - case "uuidfrommojang": - settings.GetUUIDDirectlyFromMojang = !settings.GetUUIDDirectlyFromMojang; - return "Getting UUID's from Mojang: " + settings.GetUUIDDirectlyFromMojang.ToString(); - - case "checkuuid": - settings.CheckUUID = !settings.CheckUUID; - return "Getting UUID's: " + settings.CheckUUID.ToString(); - - case "sendprivate": - settings.SendPrivateMsg = !settings.SendPrivateMsg; - return "Send private messages: " + settings.SendPrivateMsg.ToString(); - - case "allowmentions": - settings.AllowMentions = !settings.AllowMentions; - return "People can @Members: " + settings.AllowMentions.ToString(); - - case "normalchatdetection": - settings.NormalChatDetection = !settings.NormalChatDetection; - return "Detect messages with the regular chat detection: " + settings.NormalChatDetection.ToString(); - - case "customchatdetection": - settings.CustomChatDetection = !settings.CustomChatDetection; - return "Detect messages with the custom chat detection: " + settings.CustomChatDetection.ToString(); - - case "sendservermsg": - settings.SendServerMsg = !settings.SendServerMsg; - return "Server messages get forewarded: " + settings.SendServerMsg.ToString(); - - case "togglesending": - settings.Togglesending = !settings.Togglesending; - return "Forewarding messages to Discord: " + settings.Togglesending.ToString(); - - case "toggleignored": - if (args.Length >= 2) - { - if (settings.GetIgnoredPlayers().Contains(args[1])) - { - settings.GetIgnoredPlayers().Remove(args[1]); - return "Unignored: " + args[1]; - } - else - { - settings.GetIgnoredPlayers().Add(args[1]); - return "Ignored: " + args[1]; - } - } - else { return "Enter a playername."; } - - case "changeurl": - if (args.Length > 1) - { - settings.WebhookURL = args[1]; - return "Changed webhook URL to: " + args[1]; - } - else - { - return "Enter a valid Discord Webhook link."; - } - - case "getsettings": - return "WebhookURL: " + settings.WebhookURL + "\r\n" + - "SecondsToSaveInCache: " + settings.SecondsToSaveInCache.ToString() + "\r\n" + - "SendPrivateMsg: " + settings.SendPrivateMsg.ToString() + "\r\n" + - "SendPublicMsg: " + settings.CustomChatDetection.ToString() + "\r\n" + - "SendServerMsg: " + settings.SendServerMsg.ToString() + "\r\n" + - "GetUUIDDirectlyFromMojang: " + settings.GetUUIDDirectlyFromMojang.ToString() + "\r\n" + - "ToggleSending: " + settings.Togglesending.ToString() + "\r\n" + - "AllowMentions: " + settings.AllowMentions.ToString() + "\r\n" + - "NormalChatDetection: " + settings.NormalChatDetection.ToString() + "\r\n" + - "CustomChatDetection: " + settings.CustomChatDetection.ToString() + "\r\n" + - "CurrentSkinMode: " + settings.CurrentSkinMode + "\r\n" + - "Size: " + settings.Size.ToString() + "\r\n" + - "Scale: " + settings.Scale.ToString() + "\r\n" + - "Overlay: " + settings.Overlay.ToString() + "\r\n" + - "CheckUUID: " + settings.CheckUUID.ToString() + "\r\n" + - "IgnoredPlayers: " + string.Join(" ;", settings.GetIgnoredPlayers()) + "\r\n" + - "FallbackSkin: " + settings.FallbackSkin; - - case "help": - return GetHelp(); - - case "quit": - UnloadBot(); - return "Turned discordwebhook off!"; - - default: - return GetHelp(); - } - } - else { return GetHelp(); } - } -} diff --git a/MinecraftClient/config/ChatBots/EntityCount.cs b/MinecraftClient/config/ChatBots/EntityCount.cs deleted file mode 100644 index a41d5d751e..0000000000 --- a/MinecraftClient/config/ChatBots/EntityCount.cs +++ /dev/null @@ -1,49 +0,0 @@ -//MCCScript 1.0 - -MCC.LoadBot(new EntityCount()); - -//MCCScript Extensions - -class EntityCount : ChatBot -{ - public override void Initialize() - { - LogToConsole("Entity Count chat bot loaded!"); - RegisterChatBotCommand("entitycount", "Counts entities of a provided type", "entitycount [ ]", OnCommand); - } - - public string OnCommand(string cmd, string[] args) - { - if (args.Length < 1) - return "Invalid usage! Usage: /entitycount [ ]"; - - if (!Enum.TryParse(args[0], out EntityType entityType)) - return "Invalid entity type provided!\nSee: https://bit.ly/3NgSIFu"; - - Location? location = null; - - if (args.Length >= 4) - { - if (!Location.TryParse(GetCurrentLocation().ToFloor(), args[1], args[2], args[3], out location)) - return "Invalid location provided, check your input!"; - } - - int counter = 0; - - foreach (var (id, entity) in GetEntities()) - { - if (entity.Type == entityType) - { - if (location != null) - { - if (entity.Location.ToFloor() != ((Location)location).ToFloor()) - continue; - } - - counter++; - } - } - - return $"Found {counter} of entity type: {args[0]}"; - } -} diff --git a/MinecraftClient/config/ChatBots/MineCube.cs b/MinecraftClient/config/ChatBots/MineCube.cs deleted file mode 100644 index 1f64f0daac..0000000000 --- a/MinecraftClient/config/ChatBots/MineCube.cs +++ /dev/null @@ -1,520 +0,0 @@ -//MCCScript 1.0 - -//using MinecraftClient.Inventory; -//using MinecraftClient.Mapping; -//using MinecraftClient.Scripting; -//using MinecraftClient; -//using System.Collections.Generic; -//using System.Linq; -//using System.Threading.Tasks; -//using System.Threading; -//using System; -//using Brigadier.NET.Builder; -//using MinecraftClient.CommandHandler.Patch; -//using Brigadier.NET; -//using MinecraftClient.CommandHandler; - -MCC.LoadBot(new MineCube()); - -//MCCScript Extensions - -//using System.Threading.Tasks; - -class MineCube : ChatBot -{ - public const string CommandName = "mineup"; - - private CancellationTokenSource cts; - private Task currentMiningTask; - private TimeSpan breakTimeout; - private bool toolHandling; - private int cacheSize; - - public override void Initialize() - { - if (!GetTerrainEnabled()) - { - LogToConsole(Translations.extra_terrainandmovement_required); - UnloadBot(); - return; - } - - currentMiningTask = null; - breakTimeout = TimeSpan.FromSeconds(15); - cacheSize = 10; - toolHandling = true; - - LogToConsole("Mining bot created by Daenges."); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Argument("Commands", Arguments.GreedyString()) - .Executes(r => { - EvaluateMineCommand(CommandName + ' ' + Arguments.GetString(r, "Commands"), Arguments.GetString(r, "Commands").Split(' ', StringSplitOptions.TrimEntries)); - return r.Source.SetAndReturn(CmdResult.Status.Done); - })) - ); - } - - public override void OnUnload() - { - McClient.dispatcher.Unregister(CommandName); - } - - /// - /// Walks in a 2 high area under an area of blocks and mines anything above its head. - /// - /// The current world - /// The start corner of walking - /// The stop corner of walking - /// CancellationToken to stop the task on cancel - public void MineUp(World currentWorld, Location startBlock, Location stopBlock, CancellationToken ct) - { - if (startBlock.Y != stopBlock.Y) - { - LogToConsole("Command FAILED. Both coordinates must be on the same y level."); - } - - IEnumerable xLocationRange = GetNumbersFromTo(Convert.ToInt32(Math.Round(startBlock.X)), Convert.ToInt32(Math.Round(stopBlock.X))); - IEnumerable zLocationRange = GetNumbersFromTo(Convert.ToInt32(Math.Round(startBlock.Z)), Convert.ToInt32(Math.Round(stopBlock.Z))); - - foreach (int currentXLoc in xLocationRange) - { - foreach (int currentZLoc in zLocationRange) - { - Location standLocation = new Location(currentXLoc, startBlock.Y, currentZLoc); - - // Walk to the new location. - waitForMoveToLocation(standLocation, maxOffset: 1); - - for (int height = Convert.ToInt32(startBlock.Y) + 2; height < Convert.ToInt32(startBlock.Y) + 7; height++) - { - if (ct.IsCancellationRequested) - { - currentMiningTask = null; - LogToConsole("Cancellation requested. STOP MINING."); - return; - } - - Location mineLocation = new Location(currentXLoc, height, currentZLoc); - Material mineLocationMaterial = currentWorld.GetBlock(mineLocation).Type; - - // Stop mining process if breaking the next block could endager the bot - // through falling blocks or liquids. - if (!IsGravitySave(currentWorld, mineLocation) || IsSorroundedByLiquid(currentWorld, mineLocation)) { break; } - // Skip this block if it can not be mined. - if (Material2Tool.IsUnbreakable(mineLocationMaterial)) { continue; } - - if (GetInventoryEnabled() && toolHandling) - { - // Search this tool in hotbar and select the correct slot - SelectCorrectSlotInHotbar( - // Returns the correct tool for this type - Material2Tool.GetCorrectToolForBlock( - // returns the type of the current block - mineLocationMaterial)); - } - - // If we are able to reach the block && break sucessfully sent - if (GetCurrentLocation().EyesLocation().DistanceSquared(mineLocation) <= 25 && DigBlock(mineLocation)) - { - AutoTimeout.Perform(() => - { - while (GetWorld().GetBlock(mineLocation).Type != Material.Air) - { - Thread.Sleep(100); - - if (ct.IsCancellationRequested) - break; - } - }, breakTimeout); - } - else - { - LogDebugToConsole("Unable to break this block: " + mineLocation.ToString()); - } - } - } - } - LogToConsole("Finished mining up."); - } - - /// - /// Mine a cube of blocks from top to bottom between start and stop location - /// - /// The current world - /// The upper corner of the cube to mine - /// The lower corner of the cube to mine - /// CancellationToken to stop the task on cancel - public void Mine(World currentWorld, Location startBlock, Location stopBlock, CancellationToken ct) - { - // Turn the cube around, so the bot always starts from the top. - if (stopBlock.Y > startBlock.Y) - { - Location temp = stopBlock; - stopBlock = startBlock; - startBlock = temp; - } - - IEnumerable xLocationRange = GetNumbersFromTo(Convert.ToInt32(Math.Round(startBlock.X)), Convert.ToInt32(Math.Round(stopBlock.X))); - IEnumerable yLocationRange = GetNumbersFromTo(Convert.ToInt32(Math.Round(startBlock.Y)), Convert.ToInt32(Math.Round(stopBlock.Y))); - IEnumerable zLocationRange = GetNumbersFromTo(Convert.ToInt32(Math.Round(startBlock.Z)), Convert.ToInt32(Math.Round(stopBlock.Z))); - - foreach (int currentYLoc in yLocationRange) - { - foreach (int currentXLoc in xLocationRange) - { - - if (ct.IsCancellationRequested) - { - currentMiningTask = null; - LogToConsole("Cancellation requested. STOP MINING."); - return; - } - - List blocksToMine = null; - - // If the end of the new row is closer than the start, reverse the line and start here - Location currentStandingLoc = GetCurrentLocation(); - Queue currentZLocationRangeQueue = new Queue(currentStandingLoc.DistanceSquared(new Location(currentXLoc, currentYLoc, zLocationRange.Last())) < currentStandingLoc.DistanceSquared(new Location(currentXLoc, currentYLoc, zLocationRange.First())) ? - zLocationRange.Reverse() : - zLocationRange); - - while (!ct.IsCancellationRequested && (currentZLocationRangeQueue.Count > 0 || blocksToMine.Count > 0)) - { - // Evaluate the next blocks to mine, while mining - Task> cacheEval = Task>.Factory.StartNew(() => // Get a new chunk of blocks that can be mined - EvaluateBlocks(currentWorld, currentXLoc, currentYLoc, currentZLocationRangeQueue, ct, cacheSize)); - - // On the first run, we need the task to finish, otherwise we would not have any results - if (blocksToMine != null) - { - // For all blocks in this block chunk - foreach (Location mineLocation in blocksToMine) - { - if (ct.IsCancellationRequested) - break; - - Location currentLoc = GetCurrentLocation(); - Location currentBlockUnderFeet = new Location(Math.Floor(currentLoc.X), Math.Floor(currentLoc.Y) - 1, Math.Floor(currentLoc.Z)); - - // If we are too far away from the mining location - if (currentLoc.EyesLocation().DistanceSquared(mineLocation) > 25) - { - // Walk to the new location - waitForMoveToLocation(mineLocation, maxOffset: 3); - } - - // Prevent falling into danger - if (mineLocation == currentBlockUnderFeet && !Movement.IsSafe(currentWorld, currentBlockUnderFeet)) - waitForMoveToLocation(mineLocation, maxOffset: 4, minOffset: 3); - - // Is inventoryhandling activated? - if (GetInventoryEnabled() && toolHandling) - { - // Search this tool in hotbar and select the correct slot - SelectCorrectSlotInHotbar( - // Returns the correct tool for this type - Material2Tool.GetCorrectToolForBlock( - // returns the type of the current block - currentWorld.GetBlock(mineLocation).Type)); - } - - // If we are able to reach the block && break sucessfully sent - if (GetCurrentLocation().EyesLocation().DistanceSquared(mineLocation) <= 25 && DigBlock(mineLocation)) - { - // Wait until the block is broken (== Air) - AutoTimeout.Perform(() => - { - while (GetWorld().GetBlock(mineLocation).Type != Material.Air) - { - Thread.Sleep(100); - - if (ct.IsCancellationRequested) - break; - } - }, breakTimeout); - } - else - { - LogDebugToConsole("Unable to break this block: " + mineLocation.ToString()); - } - - } - } - - if (!ct.IsCancellationRequested) - { - // Wait for the block evaluation task to finish (if not already) and save the result - if (!cacheEval.IsCompleted) - { - cacheEval.Wait(); - } - blocksToMine = cacheEval.Result; - } - } - } - } - currentMiningTask = null; - LogToConsole("MINING FINISHED."); - } - - /// - /// This function selects a certain amount of minable blocks in a row - /// - /// The current world - /// The current x location of the row - /// The current y location of the row - /// All Z blocks that will be mined - /// CancellationToken to stop the task on cancel - /// Maximum amount of blocks to return - /// - private List EvaluateBlocks(World currentWorld, int xLoc, int yLoc, Queue zLocationQueue, CancellationToken ct, int cacheSize = 10) - { - List blockMiningCache = new List(); - int i = 0; - while (zLocationQueue.Count > 0 && i < cacheSize && !ct.IsCancellationRequested) - { - // Get the block to mine, relative to the startblock of the row - Location mineLocation = new Location(xLoc, yLoc, zLocationQueue.Dequeue()); - - // Add the current location to the mining cache if it is safe to mine - if (currentWorld.GetBlock(mineLocation).Type != Material.Air && - IsGravitySave(currentWorld, mineLocation) && - !IsSorroundedByLiquid(currentWorld, mineLocation) && - !Material2Tool.IsUnbreakable(currentWorld.GetBlock(mineLocation).Type)) - { - blockMiningCache.Add(mineLocation); - i++; - } - } - return blockMiningCache; - } - - /// - /// Generates a sequence of numbers between a start and a stop number, including both - /// - /// Number to start from - /// Number to end with - /// a sequence of numbers between a start and a stop number, including both - private static IEnumerable GetNumbersFromTo(int start, int stop) - { - return start <= stop ? Enumerable.Range(start, stop - start + 1) : Enumerable.Range(stop, start - stop + 1).Reverse(); - } - - /// - /// Starts walk and waits until the client arrives - /// - /// Location to reach - /// Allow possible but unsafe locations thay may hurt the player: lava, cactus... - /// Allow non-vanilla direct teleport instead of computing path, but may cause invalid moves and/or trigger anti-cheat plugins - /// If no valid path can be found, also allow locations within specified distance of destination - /// Do not get closer of destination than specified distance - /// How long to wait before stopping computation (default: 5 seconds) - private void waitForMoveToLocation(Location goal, bool allowUnsafe = false, bool allowDirectTeleport = false, int maxOffset = 0, int minOffset = 0, TimeSpan? timeout = null) - { - if (MoveToLocation(goal, allowUnsafe, allowDirectTeleport, maxOffset, minOffset, timeout)) - { - // Wait till the client stops moving - while (ClientIsMoving()) - { - Thread.Sleep(200); - } - } - else - { - LogDebugToConsole("Unable to walk to: " + goal.ToString()); - } - } - - /// - /// Checks all slots of the hotbar for an Item and selects it if found - /// - /// List of items that may be selected, from worst to best - private void SelectCorrectSlotInHotbar(ItemType[] tools) - { - if (GetInventoryEnabled()) - { - foreach (ItemType tool in tools) - { - int[] tempArray = GetPlayerInventory().SearchItem(tool); - // Check whether an item could be found and make sure that it is in - // a hotbar slot (36-44). - if (tempArray.Length > 0 && tempArray[0] > 35) - { - // Changeslot takes numbers from 0-8 - ChangeSlot(Convert.ToInt16(tempArray[0] - 36)); - break; - } - } - } - else - { - LogToConsole("Activate Inventory Handling."); - } - } - - /// - /// Check if mining the current block would update others - /// - /// Current World - /// The block to be checked - /// true if mining the current block would not update others - public bool IsGravitySave(World currentWorld, Location blockToMine) - { - Location currentLoc = GetCurrentLocation(); - Location block = new Location(Math.Round(blockToMine.X), Math.Round(blockToMine.Y), Math.Round(blockToMine.Z)); - List gravityBlockList = new List(new Material[] { Material.Gravel, Material.Sand, Material.RedSand, Material.Scaffolding, Material.Anvil, }); - Func isGravityBlock = (Location blockToCheck) => gravityBlockList.Contains(currentWorld.GetBlock(blockToCheck).Type); - Func isBlockSolid = (Location blockToCheck) => currentWorld.GetBlock(blockToCheck).Type.IsSolid(); - - return - // Block can not fall down on player e.g. Sand, Gravel etc. - !isGravityBlock(Movement.Move(block, Direction.Up)) && - (Movement.Move(currentLoc, Direction.Down) != blockToMine || currentWorld.GetBlock(Movement.Move(currentLoc, Direction.Down, 2)).Type.IsSolid()) && - // Prevent updating flying sand/gravel under player - !isGravityBlock(Movement.Move(block, Direction.Down)) || isBlockSolid(Movement.Move(block, Direction.Down, 2)); - } - - /// - /// Checks if the current block is sorrounded by liquids - /// - /// Current World - /// The block to be checked - /// true if mining the current block results in liquid flow change - public bool IsSorroundedByLiquid(World currentWorld, Location blockToMine) - { - Location block = new Location(Math.Round(blockToMine.X), Math.Round(blockToMine.Y), Math.Round(blockToMine.Z)); - Func isLiquid = (Location blockToCheck) => currentWorld.GetBlock(blockToCheck).Type.IsLiquid(); - - return // Liquid can not flow down the hole. Liquid is unable to flow diagonally. - isLiquid(block) || - isLiquid(Movement.Move(block, Direction.Up)) || - isLiquid(Movement.Move(block, Direction.North)) || - isLiquid(Movement.Move(block, Direction.South)) || - isLiquid(Movement.Move(block, Direction.East)) || - isLiquid(Movement.Move(block, Direction.West)); - } - - /// - /// The Help page for this command. - /// - /// a help page - private string getHelpPage() - { - return - "Usage of the mine bot:\n" + - "/mine OR /mine \n" + - "to excavate a cube of blocks from top to bottom. (There must be a 2 high area of air above the cube you want to mine.)\n" + - "/mineup OR /mineup \n" + - "to walk over a quadratic field of blocks and simultaniously mine everything above the head. \n" + - "(Mines up to 5 Blocks, stops if gravel or lava would fall. There must be a 2 high area of air below the cube you want to mine.)\n" + - "/mine OR /mineup cancel\n" + - "to cancel the current mining process.\n" + - "/mine OR /mineup cachesize\n" + - "to set the current cache size\n" + - "/mine OR /mineup breaktimeout\n" + - "to set the time to wait until a block is broken."; ; - - } - - private string EvaluateMineCommand(string command, string[] args) - { - for (int i = 0; i < args.Length; i++) - { - switch (args[i]) - { - case "breaktimeout": - int temp; - if (int.TryParse(args[i + 1], out temp)) - breakTimeout = TimeSpan.FromMilliseconds(temp); - else return "Please enter a valid number."; - return string.Format("Set the break timout to {0} ms.", breakTimeout); - - case "cachesize": - return int.TryParse(args[i + 1], out cacheSize) ? string.Format("Set cache size to {0} blocks.", cacheSize) : "Please enter a valid number"; - - case "cancel": - cts.Cancel(); - currentMiningTask = null; - return "Cancelled current mining process."; - - case "toolHandling": - toolHandling = !toolHandling; - return string.Format("Tool handling was set to: {0}", toolHandling.ToString()); - } - } - - if (args.Length > 2) - { - Location startBlock; - Location stopBlock; - - if (args.Length > 5) - { - try - { - startBlock = new Location( - double.Parse(args[0]), - double.Parse(args[1]), - double.Parse(args[2]) - ); - - stopBlock = new Location( - double.Parse(args[3]), - double.Parse(args[4]), - double.Parse(args[5]) - ); - - } - catch (Exception e) - { - LogDebugToConsole(e.ToString()); - return "Please enter correct coordinates as numbers.\n" + getHelpPage(); - } - } - else - { - Location tempLoc = GetCurrentLocation(); - startBlock = new Location(Math.Round(tempLoc.X), - Math.Round(tempLoc.Y), - Math.Round(tempLoc.Z)); - - try - { - stopBlock = new Location( - double.Parse(args[0]), - double.Parse(args[1]), - double.Parse(args[2]) - ); - } - catch (Exception e) - { - LogDebugToConsole(e.ToString()); - return "Please enter correct coordinates as numbers.\n" + getHelpPage(); - } - } - - if (currentMiningTask == null) - { - if (command.Contains("mineup")) - { - cts = new CancellationTokenSource(); - - currentMiningTask = Task.Factory.StartNew(() => MineUp(GetWorld(), startBlock, stopBlock, cts.Token)); - return "Start mining up."; - } - else if (command.Contains("mine")) - { - - cts = new CancellationTokenSource(); - - currentMiningTask = Task.Factory.StartNew(() => Mine(GetWorld(), startBlock, stopBlock, cts.Token)); - return "Start mining cube."; - } - } - else return "You are already mining. Cancel it with '/minecancel'"; - } - - return "Invalid command syntax.\n" + getHelpPage(); - } -} diff --git a/MinecraftClient/config/ChatBots/PayKassa.cs b/MinecraftClient/config/ChatBots/PayKassa.cs deleted file mode 100644 index b225ae4a88..0000000000 --- a/MinecraftClient/config/ChatBots/PayKassa.cs +++ /dev/null @@ -1,101 +0,0 @@ -//MCCScript 1.0 -//using System.Threading.Tasks; - -//==== CONFIG START ==== -string merchant_id = ""; -string merchant_password = ""; -//==== CONFIG END ==== - -MCC.LoadBot(new PayKassaBot(merchant_id, merchant_password)); - -//MCCScript Extensions - -public class PayKassaBot : ChatBot -{ - private PayKassaSCI paykassa { get; set; } - - /// - /// This bot forwarding messages between Minecraft and VKonrakte chats. - /// Shares only messages that starts with dot ("."). Example: .Hello! - /// Also, send message to VK when any player joins or leaves. - /// - /// VK Community token - /// VK ChatId - /// Bot's CommunityId - public PayKassaBot(string merchant_id, string merchant_password) - { - paykassa = new PayKassaSCI(merchant_id, merchant_password); - } - -} - -/// -/// Client for VK Community (bot) LongPool API. -/// Also can send messages. -/// - -internal class PayKassaSCI -{ - private string _merchant_id = ""; - private string _merchant_password = ""; - public PayKassaSCI(string merchant_id, string merchant_password) - { - this._merchant_id = merchant_id; - this._merchant_password = merchant_password; - } - - public enum SystemID - { - Payeer = 1, - PerfectMoney = 2, - AdvCash = 4, - Berty = 7, - BitCoin = 11, - Ethereum = 12, - LiteCoin = 14, - DogeCoin = 15, - Dash = 16, - BitcoinCash = 18, - Zcash = 19, - EthereumClassic = 21, - Ripple = 22, - TRON = 27, - Stellar = 28, - - } - - public string[] sci_create_order(float ammount, string currency, string order_id, string comment, SystemID systemID) - { - using (WebClient web = new WebClient()) - { - string url = "https://paykassa.pro/sci/0.4/index.php?func=sci_create_order&sci_id" + _merchant_id + "&sci_id=" + _merchant_id + "&sci_key=" + _merchant_password + "&order_id=" + order_id + "&amount=" + ammount + "¤cy=" + currency + "&system=" + (int)systemID + "&comment=" + comment; - string response = web.DownloadString(url); - string urlresponse = Regex.Match(response, "{\"url\":\"(.*)\",\"method\"").Groups[1].Value; - urlresponse = urlresponse.Replace(@"\/", "/"); - string hash = Regex.Match(response, "\"hash\":\"(.*)\"}}}").Groups[1].Value; - return new string[] { urlresponse, hash }; - } - } - - public string[] sci_confirm_order(string private_hash) - { - using (WebClient web = new WebClient()) - { - string url = "https://paykassa.pro/sci/0.4/index.php?func=sci_confirm_order&sci_id" + _merchant_id + "&sci_id=" + _merchant_id + "&sci_key=" + _merchant_password + "&private_hash=" + private_hash + "&test=true"; - string response = web.DownloadString(url); - Console.WriteLine(response); - string error =Regex.Match(response, "\"error\":(.*),\"message\"").Groups[1].Value; - - string message = Regex.Match(response, "\"message\":\"(.*)\",\"data\"").Groups[1].Value; - - string transaction = Regex.Match(response, "\"transaction\":\"(.*)\",").Groups[1].Value; - string shop_id = Regex.Match(response, "\"shop_id\":\"(.*)\",").Groups[1].Value; - string order_id = Regex.Match(response, "\"order_id\":\"(.*)\",").Groups[1].Value; - string amount = Regex.Match(response, "\"amount\":\"(.*)\",").Groups[1].Value; - string currency = Regex.Match(response, "\"currency\":\"(.*)\",").Groups[1].Value; - string system = Regex.Match(response, "\"system\":\"(.*)\",").Groups[1].Value; - string hash = Regex.Match(response, "\"hash\":\"(.*)\",").Groups[1].Value; - return new string[] { error.ToString(), message, transaction, shop_id, order_id, amount, currency, system, hash }; - } - } -} diff --git a/MinecraftClient/config/ChatBots/QIWIAPI.cs b/MinecraftClient/config/ChatBots/QIWIAPI.cs deleted file mode 100644 index 4c2a9fddc9..0000000000 --- a/MinecraftClient/config/ChatBots/QIWIAPI.cs +++ /dev/null @@ -1,317 +0,0 @@ -//MCCScript 1.0 -//using System.Threading.Tasks; - -MCC.LoadBot(new QIWI_DonationBot()); - -//MCCScript Extensions - -public class QIWI_DonationBot : ChatBot -{ - //More info: https://github.com/Nekiplay/QIWI-API - public override void Initialize() - { - QIWI.Donation donation = new QIWI.Donation("token", OnDonate); - QIWI.Wallet wallet = new QIWI.Wallet("token"); - Console.WriteLine("Phone: " + wallet.Identification.Phone() - + "\nMail: " + wallet.Identification.Mail() - + "\nBalance: " + wallet.Balance.RUB(wallet.Identification.Phone()) + " RUB" - ); - Console.WriteLine("Name: " + wallet.Identification.Last_Name(wallet.Identification.Phone()) + " " + wallet.Identification.First_Name(wallet.Identification.Phone()) + " " + wallet.Identification.Middle_Name(wallet.Identification.Phone())); - LogToConsole("Bot enabled"); - } - - private void OnDonate(string nickname, float ammount, string currency, string message) - { - LogToConsole("Nickname: " + nickname); - LogToConsole("Ammount: " + ammount); - LogToConsole("Currency: " + currency); - LogToConsole("Message: " + message); - } - - public override void Update() - { - - } - public override void AfterGameJoined() - { - - } - public override void GetText(string text, string json) - { - string text1 = GetVerbatim(text); - } -} - -public class QIWI -{ - public class Wallet - { - public _Balance_ Balance; - public _Identification_ Identification; - - private string token; - public enum Currency - { - RUB = 643, - USD = 840, - }; - public Wallet(string token) - { - this.token = token; - this.Balance = new _Balance_(this.token); - this.Identification = new _Identification_(this.token); - } - - public class _Identification_ - { - private string token; - public _Identification_(string token) - { - this.token = token; - } - public string Nickname(string phone) - { - using (WebClient wc = new WebClient()) - { - wc.Encoding = Encoding.UTF8; - wc.Headers.Set("authorization", "Bearer " + this.token); - string response = wc.DownloadString("https://edge.qiwi.com//qw-nicknames/v1/persons/" + phone + "/nickname"); - string First_Name = Regex.Match(response, "\"nickname\":\"(.*)\",\"canChange\":(.*)").Groups[1].Value; - if (First_Name != "") - { - return First_Name; - } - } - return ""; - } - public string First_Name(string phone) - { - using (WebClient wc = new WebClient()) - { - wc.Encoding = Encoding.UTF8; - wc.Headers.Set("authorization", "Bearer " + this.token); - string response = wc.DownloadString("https://edge.qiwi.com/identification/v1/persons/" + phone + "/identification"); - string First_Name = Regex.Match(response, "\"firstName\":\"(.*)\",\"middleName\":\"(.*)\",\"lastName\":\"(.*)\"").Groups[1].Value; - if (First_Name != "") - { - return First_Name; - } - } - return ""; - } - public string Middle_Name(string phone) - { - using (WebClient wc = new WebClient()) - { - wc.Encoding = Encoding.UTF8; - wc.Headers.Set("authorization", "Bearer " + this.token); - string response = wc.DownloadString("https://edge.qiwi.com/identification/v1/persons/" + phone + "/identification"); - string Middle_Name = Regex.Match(response, "\"firstName\":\"(.*)\",\"middleName\":\"(.*)\",\"lastName\":\"(.*)\"").Groups[2].Value; - if (Middle_Name != "") - { - return Middle_Name; - } - } - return ""; - } - public string Last_Name(string phone) - { - using (WebClient wc = new WebClient()) - { - wc.Encoding = Encoding.UTF8; - wc.Headers.Set("authorization", "Bearer " + this.token); - string response = wc.DownloadString("https://edge.qiwi.com/identification/v1/persons/" + phone + "/identification"); - string Last_Name = Regex.Match(response, "\"lastName\":\"(.*)\",\"birthDate\":\"(.*)\"").Groups[1].Value; - if (Last_Name != "") - { - return Last_Name; - } - } - return ""; - } - public string Phone() - { - using (WebClient wc = new WebClient()) - { - wc.Headers.Set("authorization", "Bearer " + this.token); - string response = wc.DownloadString("https://edge.qiwi.com/person-profile/v1/profile/current?authInfoEnabled=true&contractInfoEnabled=true&userInfoEnabled=true"); - string phone = Regex.Match(response, "\"personId\":(.*),\"registrationDate\":\"(.*)\"").Groups[1].Value; - if (phone != "") - { - return phone; - } - } - return ""; - } - public string Mail() - { - using (WebClient wc = new WebClient()) - { - wc.Headers.Set("authorization", "Bearer " + this.token); - string response = wc.DownloadString("https://edge.qiwi.com/person-profile/v1/profile/current?authInfoEnabled=true&contractInfoEnabled=true&userInfoEnabled=true"); - string mail = Regex.Match(response, "\"boundEmail\":\"(.*)\",\"emailSettings\"").Groups[1].Value; - if (mail != "") - { - return mail; - } - } - return ""; - } - } - public class _Balance_ - { - private string token; - public _Transfer_ Transfer; - - public _Balance_(string token) - { - this.token = token; - this.Transfer = new _Transfer_(this.token); - } - public class _Transfer_ - { - private string token; - public _Transfer_(string token) - { - this.token = token; - } - - public bool QIWIRUB(string phone, double ammount, string comment) - { - Int32 unixTimestamp = (Int32)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; - - string jsonv2 = "{\"id\":\"" + 1000 * unixTimestamp + "\",\"sum\":{\"amount\":" + ammount + ",\"currency\":\"" + "643" + "\"},\"paymentMethod\":{\"type\":\"Account\",\"accountId\":\"643\"},\"comment\":\"" + comment + "\",\"fields\":{\"account\":\"" + phone + "\"}}"; - - /* Отправка */ - try - { - WebRequest request = WebRequest.Create("https://edge.qiwi.com/sinap/api/v2/terms/99/payments"); - request.Method = "POST"; - byte[] byteArray = System.Text.Encoding.UTF8.GetBytes(jsonv2); - request.ContentType = "application/json"; - request.Headers["Authorization"] = "Bearer " + this.token; - request.ContentLength = byteArray.Length; - - //записываем данные в поток запроса - using (Stream dataStream = request.GetRequestStream()) - { - dataStream.Write(byteArray, 0, byteArray.Length); - } - - WebResponse response = request.GetResponse(); - using (Stream stream = response.GetResponseStream()) - { - using (StreamReader reader = new StreamReader(stream)) - { - reader.ReadToEnd(); - return true; - } - } - response.Close(); - } - catch (WebException ex) - { - return false; - } - return false; - } - } - - public double RUB(string phone) - { - using (WebClient wc = new WebClient()) - { - wc.Headers.Set("authorization", "Bearer " + this.token); - string response = wc.DownloadString("https://edge.qiwi.com/funding-sources/v2/persons/" + phone + "/accounts"); - string rubles = Regex.Match(response, "\"balance\":{\"amount\":(.*),\"currency\":643}").Groups[1].Value; - if (rubles != "") - { - rubles = rubles.Replace(".", ",").Replace(" ", ""); - double rub = double.Parse(rubles); - return rub; - } - else - return 0.0; - } - } - public double USD(string phone) - { - using (WebClient wc = new WebClient()) - { - wc.Headers.Set("authorization", "Bearer " + this.token); - string response = wc.DownloadString("https://edge.qiwi.com/funding-sources/v2/persons/" + phone + "/accounts"); - //Console.WriteLine(response); - string usds = Regex.Match(response, "{\"alias\":\"qw_wallet_usd\",\"fsAlias\":\"qb_wallet\",\"bankAlias\":\"QIWI\",\"title\":\"Qiwi Account\",\"type\":{\"id\":\"WALLET\",\"title\":\"Visa QIWI Wallet\"},\"hasBalance\":(.*),\"balance\":{\"amount\":(.*),\"currency\":840},\"currency\":840,\"defaultAccount\":(.*)}").Groups[2].Value; - //Console.WriteLine("Доларров: " + usds); - if (usds != "") - { - usds = usds.Replace(" ", "").Replace(".", ","); - //Console.WriteLine("Доларров: " + usds); - double usd = double.Parse(usds); - return usd; - } - else - return 0.0; - } - return 0.0; - } - } - - } - public class Donation - { - private string token; - private List> onDonation { get; set; } - public Donation(string token, List> onDonation) - { - this.token = token; - this.onDonation = onDonation; - StartAsync(); - } - public Donation(string token, Action onDonation) - { - this.token = token; - this.onDonation = new List>(); - this.onDonation.Add(onDonation); - StartAsync(); - } - private void StartAsync() - { - ServicePointManager.Expect100Continue = true; - ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; - Task.Factory.StartNew(() => - { - while (true) - { - using (WebClient wc = new WebClient()) - { - wc.Encoding = Encoding.UTF8; - string response = wc.DownloadString("https://donate.qiwi.com/api/stream/v1/widgets/" + token + "/events?&limit=1"); - - string type = Regex.Match(response, "\"type\":\"(.*)\",\"status\":\"(.*)\"").Groups[1].Value; - if (type == "DONATION") - { - string nickname = Regex.Match(response, "\"DONATION_SENDER\":\"(.*)\",\"DONATION_AMOUNT\"").Groups[1].Value; - string ammountst = Regex.Match(response, "\"DONATION_AMOUNT\":(.*)},\"voteResults\"").Groups[1].Value; - double ammount = 0; - if (ammountst != "") - { - ammountst = ammountst.Replace(".", ",").Replace(" ", ""); - ammount = double.Parse(ammountst); - } - string currency = Regex.Match(response, "\"DONATION_CURRENCY\":\"(.*)\",\"DONATION_SENDER\"").Groups[1].Value; - string message = Regex.Match(response, "\"DONATION_MESSAGE\":\"(.*)\",\"DONATION_CURRENCY\":\"(.*)\"").Groups[1].Value; - if (nickname != "") - { - foreach (Action action in onDonation) - { - action(nickname, ammount, currency, message); - } - } - } - } - } - }); - } - } -} diff --git a/MinecraftClient/config/ChatBots/SugarCaneFarmer.cs b/MinecraftClient/config/ChatBots/SugarCaneFarmer.cs deleted file mode 100644 index 9b670b4864..0000000000 --- a/MinecraftClient/config/ChatBots/SugarCaneFarmer.cs +++ /dev/null @@ -1,261 +0,0 @@ -//MCCScript 1.0 -//using MinecraftClient.Inventory; -//using MinecraftClient.Mapping; -//using MinecraftClient.Scripting; -//using System.Collections.Generic; -//using System.Threading; -//using System; -//using Brigadier.NET.Builder; -//using MinecraftClient.CommandHandler.Patch; -//using Brigadier.NET; -//using MinecraftClient.CommandHandler; -//using System.Linq; - -MCC.LoadBot(new SugarCaneFarmer()); - -//MCCScript Extensions - -class SugarCaneFarmerBase : ChatBot -{ - /// - /// MoveToLocation() + waiting until the bot is near the location. - /// - /// Location to walk to - /// Distance of blocks from the goal that is accepted as "arrived" - /// True if walking was successful - public bool WaitForMoveToLocation(Location pos, float tolerance = 2f) - { - if (MoveToLocation(new Location(pos.X, pos.Y, pos.Z))) - { - while (GetCurrentLocation().Distance(pos) > tolerance) - { - Thread.Sleep(200); - } - return true; - } - else - { - return false; - } - } - - /// - /// DigBlock + waiting until the block is broken - /// - /// Location of the block that should be broken - /// Switch to the correct tool, if it is in hotbar - /// Minimum time until the client gives up - /// True if mining was successful - public bool WaitForDigBlock(Location block, bool useCorrectTool = false, int digTimeout = 1000) - { - if (Material2Tool.IsUnbreakable(GetWorld().GetBlock(block).Type)) - return false; - - if (useCorrectTool && GetInventoryEnabled()) - { - // Search this tool in hotbar and select the correct slot - SelectCorrectSlotInHotbar( - // Returns the correct tool for this type - Material2Tool.GetCorrectToolForBlock( - // returns the type of the current block - GetWorld().GetBlock(block).Type)); - } - - // Unable to check when breaking is over. - if (DigBlock(block)) - { - short i = 0; // Maximum wait time of 10 sec. - while (GetWorld().GetBlock(block).Type != Material.Air && i <= digTimeout) - { - Thread.Sleep(100); - i++; - } - return i <= digTimeout; - } - else - { - return false; - } - } - - /// - /// Selects the corect tool in the hotbar - /// - /// List of tools that can be applied to mine a block - public void SelectCorrectSlotInHotbar(ItemType[] tools) - { - if (GetInventoryEnabled()) - { - foreach (ItemType tool in tools) - { - int[] tempArray = GetPlayerInventory().SearchItem(tool); - // Check whether an item could be found and make sure that it is in - // a hotbar slot (36-44). - if (tempArray.Length > 0 && tempArray[0] > 35) - { - // Changeslot takes numbers from 0-8 - ChangeSlot(Convert.ToInt16(tempArray[0] - 36)); - break; - } - } - } - else - { - LogToConsole("Activate Inventory Handling."); - } - } - - /// - /// Returns the head position from the current location - /// - public static Func GetHeadLocation = locFeet => new Location(locFeet.X, locFeet.Y + 1, locFeet.Z); -} - -class SugarCaneFarmer : SugarCaneFarmerBase -{ - public const string CommandName = "sugarcane"; - - public enum CoordinateType { X, Y, Z }; - - /// - /// Used to stop the farming process on demand. - /// - private bool farming = true; - - /// - /// Returns all sugar canes that are above a solid block and another sugar cane - /// - /// Radius of the search - /// Order of the returned sugar canes - /// list of sugar canes, sorted after given parameter - private List collectSugarCaneBlocks(int radius, CoordinateType coordinateOrder = CoordinateType.X) - { - IEnumerable breakingCoordinates = GetWorld().FindBlock( - new Location(Math.Floor(GetCurrentLocation().X), Math.Floor(GetCurrentLocation().Y), Math.Floor(GetCurrentLocation().Z)), - Material.SugarCane, radius).Where(block => - GetWorld().GetBlock(new Location(block.X, block.Y - 1, block.Z)).Type == Material.SugarCane && - GetWorld().GetBlock(new Location(block.X, block.Y - 2, block.Z)).Type.IsSolid()); - - switch (coordinateOrder) - { - case CoordinateType.Z: - return breakingCoordinates.OrderBy(coordinate => coordinate.Z).ToList(); - case CoordinateType.Y: - return breakingCoordinates.OrderBy(coordinate => coordinate.Y).ToList(); - default: - return breakingCoordinates.OrderBy(coordinate => coordinate.X).ToList(); - } - } - - public override void Initialize() - { - LogToConsole("Sugar Cane farming bot created by Daenges."); - - McClient.dispatcher.Register(l => l.Literal(CommandName) - .Then(l => l.Argument("Commands", Arguments.GreedyString()) - .Executes(r => { - CommandHandler(Arguments.GetString(r, "Commands").Split(' ', StringSplitOptions.TrimEntries)); - return r.Source.SetAndReturn(CmdResult.Status.Done); - })) - ); - } - - public override void OnUnload() - { - McClient.dispatcher.Unregister(CommandName); - } - - /// - /// Start the farming process - /// - /// Range of farming - /// In which order the plants should be farmed - private void startBot(int range, CoordinateType sortOrder) - { - List sugarCanePositions; - - // create a loop so the bot keeps farming if nothing else is stated - // uses the same range as initially given - do - { - sugarCanePositions = collectSugarCaneBlocks(range, sortOrder); - - LogToConsole(string.Format("Found: {0} Sugar Cane", sugarCanePositions.Count)); - - if (sugarCanePositions.Count > 0) - { - foreach (Location loc in sugarCanePositions) - { - if (!farming) - break; - - if (GetHeadLocation(GetCurrentLocation()).Distance(loc) > 5) - { - if (!WaitForMoveToLocation(new Location(loc.X, loc.Y - 1, loc.Z))) - { - LogToConsole("Moving failed."); - continue; - } - } - - if (!WaitForDigBlock(new Location(loc.X, loc.Y, loc.Z))) - LogDebugToConsole("Unable to break this block: " + loc.ToString()); - } - } - else { LogToConsole("Nothing found. Stop farming..."); } - - if (farming && sugarCanePositions.Count > 0) - LogToConsole("Finished farming. Searching for further work... Use '/sugarcane stop' to stop farming."); - - } while (farming && sugarCanePositions.Count > 0); - - farming = true; - LogToConsole("[FARMING STOPPED]"); - } - - private string CommandHandler(string[] args) - { - if (args.Length == 1) - { - if (args[0] == "stop") - { - farming = false; - return "Stop farming..."; - } - else - { - int range; - - try { range = Convert.ToInt32(args[0]); } - catch (Exception) { return "Range must be a number"; } - - Thread workThread = new Thread(() => startBot(range, CoordinateType.X)); - workThread.Start(); - - return "Start farming."; - } - } - else if (args.Length == 2) - { - int range; - - try { range = Convert.ToInt32(args[0]); } - catch (Exception) { return "Range must be a number"; } - - Thread workThread; - - if (args[1].ToLower() == "x") - workThread = new Thread(() => startBot(range, CoordinateType.X)); - else if (args[1].ToLower() == "y") - workThread = new Thread(() => startBot(range, CoordinateType.Y)); - else - workThread = new Thread(() => startBot(range, CoordinateType.Z)); - - workThread.Start(); - - return "Start farming."; - } - else - return "Usage: /sugarcane [range x|y|z]/[stop]"; - } -} diff --git a/MinecraftClient/config/ChatBots/SugarCaneMiner.cs b/MinecraftClient/config/ChatBots/SugarCaneMiner.cs deleted file mode 100644 index 2bdb391366..0000000000 --- a/MinecraftClient/config/ChatBots/SugarCaneMiner.cs +++ /dev/null @@ -1,53 +0,0 @@ -//MCCScript 1.0 - -//using MinecraftClient.CommandHandler; -//using MinecraftClient.Mapping; -//using MinecraftClient.Scripting; - -MCC.LoadBot(new SugarCaneMiner()); - -//MCCScript Extensions - -public class SugarCaneMiner : ChatBot -{ - // === CONFIG - REPLACE SURGAR CANE LOCATION x y z VALUES HERE === - // You need to stand in front of the sugar cane - Location sugarCane = new Location(x, y, z); - bool fullHeight = true; - // === END OF CONFIG === - - public override void Initialize() - { - LogToConsole("Bot enabled!"); - } - - public override void Update() - { - if (DetectSugarCane(sugarCane, fullHeight)) - { - DigBlock(sugarCane); - } - } - - public bool DetectSugarCane(Location sugarCaneLoc, bool fullHeight) - { - Material blockType = GetWorld().GetBlock(sugarCaneLoc).Type; - if (blockType == Material.SugarCane) - { - blockType = GetWorld().GetBlock(new Location(sugarCaneLoc.X, sugarCaneLoc.Y - 1, sugarCaneLoc.Z)).Type; - if (blockType == Material.SugarCane) - { - blockType = GetWorld().GetBlock(new Location(sugarCaneLoc.X, sugarCaneLoc.Y - 2, sugarCaneLoc.Z)).Type; - if (blockType != Material.SugarCane) - { - if (!fullHeight) - return true; - blockType = GetWorld().GetBlock(new Location(sugarCaneLoc.X, sugarCaneLoc.Y + 1, sugarCaneLoc.Z)).Type; - if (blockType == Material.SugarCane) - return true; - } - } - } - return false; - } -} diff --git a/MinecraftClient/config/ChatBots/TreeFarmer.cs b/MinecraftClient/config/ChatBots/TreeFarmer.cs deleted file mode 100644 index f19975a781..0000000000 --- a/MinecraftClient/config/ChatBots/TreeFarmer.cs +++ /dev/null @@ -1,64 +0,0 @@ -//MCCScript 1.0 - -//using MinecraftClient.CommandHandler; -//using MinecraftClient.Mapping; -//using MinecraftClient.Scripting; -//using System.Threading; - -MCC.LoadBot(new TreeFarmer()); - -//MCCScript Extensions - -public class TreeFarmer : ChatBot -{ - // You need to stand in front of the sapling and put items in your inventory hotbar: - // - First slot on the left (Slot 0): Axe for digging the tree - // - Second slot on the left (Slot 1): Sapling stack for planting the tree - // Then set sapling location below, login with MCC and load this script - - // === CONFIG - REPLACE SAPLING LOCATION x y z VALUES HERE === - Location sapling = new Location(x, y, z); - // === END OF CONFIG === - - public override void Update() - { - Material blockType = GetWorld().GetBlock(sapling).Type; - switch (blockType) - { - case Material.OakSapling: - // Still a sapling, nothing to do - break; - case Material.OakLog: - // Tree has grown, dig 4 blocks - ChangeSlot(0); - DigBlock(sapling); - Thread.Sleep(100); - // 1 - DigBlock(new Location(sapling.X, sapling.Y + 1, sapling.Z)); - Thread.Sleep(100); - // 2 - DigBlock(new Location(sapling.X, sapling.Y + 2, sapling.Z)); - Thread.Sleep(100); - // 3 - DigBlock(new Location(sapling.X, sapling.Y + 3, sapling.Z)); - Thread.Sleep(100); - // 4 - DigBlock(new Location(sapling.X, sapling.Y + 4, sapling.Z)); - Thread.Sleep(100); - break; - case Material.Air: - // No tree, plant something - ChangeSlot(1); - SendPlaceBlock(sapling, Direction.Up); - break; - default: - // Other block, cannot grow trees here - LogToConsole("Block at " + sapling + " is not a sapling: " + blockType + "..."); - break; - } - } - public override void Initialize() - { - - } -} diff --git a/MinecraftClient/config/ChatBots/VkMessager.cs b/MinecraftClient/config/ChatBots/VkMessager.cs deleted file mode 100644 index f57b2efa7e..0000000000 --- a/MinecraftClient/config/ChatBots/VkMessager.cs +++ /dev/null @@ -1,497 +0,0 @@ -//MCCScript 1.0 -//using System.Threading.Tasks; -//dll Newtonsoft.Json.dll -//using Newtonsoft.Json; -//using Newtonsoft.Json.Linq; -//using Brigadier.NET; -//using MinecraftClient.CommandHandler; -//using MinecraftClient.Scripting; -//using MinecraftClient; -//using Newtonsoft.Json.Linq; -//using Newtonsoft.Json; -//using System.Collections.Generic; -//using System.Net; -//using System.Text.RegularExpressions; -//using System.Text; -//using System.Threading.Tasks; -//using System; -//using System.Linq; - -//==== INFO START ==== -// Download Newtonsoft.Json.dll and install it into the program folder Link: https://www.newtonsoft.com/json -//==== INFO END ==== - -//==== CONFIG START ==== -string vkToken = ""; -string chatId = ""; -string botCommunityId = ""; -//==== CONFIG END ==== - -MCC.LoadBot(new VkMessager(vkToken, chatId, botCommunityId)); - -//MCCScript Extensions - -/// -/// This bot forwarding messages between Minecraft and VKonrakte chats. -/// Shares only messages that starts with dot ("."). Example: .Hello! -/// -/// Needs: -/// - VK Community token (also LongPool API with NewMessageEvent, api >= 5.80), -/// - VK ChatId (typically 2000000001, etc.) -/// - Bot's CommunityId -/// -public class VkMessager : ChatBot -{ - private VkLongPoolClient VkLongPoolClient { get; set; } - private readonly string ChatId; - - public VkMessager(string vkToken, string chatId, string botCommunityId) - { - VkLongPoolClient = new VkLongPoolClient(vkToken, botCommunityId, ProcessMsgFromVk); - ChatId = chatId; - } - - public override void Initialize() - { - LogToConsole("Bot enabled!"); - } - - public override void GetText(string text) - { - // Here you can process a message coming from the Minecraft chat - // Example below: Forward a message to VKonrakte if it starts with a dot - - string message = ""; - string username = ""; - text = GetVerbatim(text); - - if (IsChatMessage(GetVerbatim(text), ref message, ref username) && message.StartsWith(".")) - { - this.VkLongPoolClient.Messages_Send_Text(this.ChatId, text); - } - } - - private void ProcessMsgFromVk(string senderId, string peer_id, string text, string conversation_message_id, string id, string event_id) - { - // Here you can process a message coming from VKonrakte - // Example below: Forward a message to Minecraft if it starts wit a dot - - if (text.StartsWith(".")) - { - SendText(text); - } - } -} - -/// -/// Client for VK Community (bot) LongPool API. -/// Also can send messages. -/// -internal class VkLongPoolClient -{ - /* VK Client*/ - public VkLongPoolClient(string token, string botCommunityId, Action onMessageReceivedCallback, IWebProxy webProxy = null) - { - Token = token; - BotCommunityId = botCommunityId; - OnMessageReceivedCallback = onMessageReceivedCallback; - ReceiverWebClient = new WebClient() { Proxy = webProxy, Encoding = Encoding.UTF8 }; - SenderWebClient = new WebClient() { Proxy = webProxy, Encoding = Encoding.UTF8 }; - - Init(); - StartLongPoolAsync(); - } - - private WebClient ReceiverWebClient { get; set; } - private WebClient SenderWebClient { get; set; } - private string Token { get; set; } - private int LastTs { get; set; } - private string Server { get; set; } - private string Key { get; set; } - private Action OnMessageReceivedCallback { get; set; } - private string BotCommunityId { get; set; } - private Random rnd = new Random(); - - /* Utils */ - public string Utils_GetShortLink(string url) - { - if (Uri.IsWellFormedUriString(url, UriKind.Absolute)) - { - string json = CallVkMethod("utils.getShortLink", "url=" + url); - var j = JsonConvert.DeserializeObject(json) as JObject; - var link = j["response"]["short_url"].ToString(); - if (link == "") - return Utils_GetShortLink(url); - else - return link; - } - else - return "Invalid link format"; - } - - /* Docs */ - public string Docs_GetMessagesUploadServer(string peer_id, string type, string file) - { - string string1 = CallVkMethod("docs.getMessagesUploadServer", "peer_id=" + peer_id + "&type=" + type); - if (string1 != "") - { - string uploadurl = Regex.Match(string1, "\"upload_url\":\"(.*)\"").Groups[1].Value.Replace(@"\/", "/"); - return uploadurl; - } - else - return Docs_GetMessagesUploadServer(peer_id, type, file); - } - - public string Docs_Upload(string url, string file) - { - var c = new WebClient(); - var r2 = Encoding.UTF8.GetString(c.UploadFile(url, "POST", file)); - if (r2 != "") return r2; - else return Docs_Upload(url, file); - } - - public string Docs_Save(string file, string title) - { - var j2 = JsonConvert.DeserializeObject(file) as JObject; - if (j2 != null) - { - string json = CallVkMethod("docs.save", "&file=" + j2["file"].ToString() + "&title=" + title); - if (json != "") - return json; - else return ""; - } - else return ""; - } - - public string Docs_Get_Send_Attachment(string file) - { - var j3 = JsonConvert.DeserializeObject(file) as JObject; - var at = "doc" + j3["response"]["doc"]["owner_id"].ToString() + "_" + j3["response"]["doc"]["id"].ToString(); - return at; - } - - /* Groups */ - public void Groups_Online(bool enable = true) - { - if (enable) - CallVkMethod("groups.enableOnline", "group_id=" + BotCommunityId); - else - CallVkMethod("groups.disableOnline", "group_id=" + BotCommunityId); - } - - public string Groups_GetById_GetName(string group_id) - { - try - { - string js = CallVkMethod("groups.getById", "group_id=" + group_id); - if (js != "") - { - var j3 = JsonConvert.DeserializeObject(js) as JObject; - string name = j3["response"][0]["name"].ToString(); - return name; - } - else return ""; - } - catch { return ""; } - } - - /* Messages */ - public void Messages_Kick_Group(string chat_id, string user_id) - { - if (user_id != BotCommunityId) - { - string json = CallVkMethod("messages.removeChatUser", "chat_id=" + chat_id + "&member_id=" + "-" + user_id); - } - } - - public void Messages_Kick_User(string chat_id, string user_id) - { - string json = CallVkMethod("messages.removeChatUser", "chat_id=" + chat_id + "&user_id=" + user_id + "&member_id=" + user_id); - } - - public void Messages_SetActivity(string chatId, string type = "typing") - { - string id3 = chatId; - id3 = id3.Substring(1); - int ind = Convert.ToInt32(id3); - CallVkMethod("messages.setActivity", "user_id=" + BotCommunityId + "&peer_id=" + chatId + "&group_id=" + "&type=" + type + "&group_id=" + BotCommunityId); - CallVkMethod("messages.setActivity", "user_id=" + BotCommunityId + "&peer_id=" + ind + "&type=" + type + "&group_id=" + BotCommunityId); - } - - public string Messages_GetInviteLink(string chatId, bool reset) - { - try - { - string json = CallVkMethod("messages.getInviteLink", "peer_id=" + chatId + "&group_id=" + BotCommunityId); - if (json != "") - { - var j = JsonConvert.DeserializeObject(json) as JObject; - var link = j["response"]["link"].ToString(); - return link; - } - return ""; - } - catch { return ""; } - } - - /* Users */ - public string Users_Get_First_Name(string user_id, string name_case = "nom") - { - try - { - string json = CallVkMethod("users.get", "user_ids=" + user_id + "&name_case=" + name_case); - if (json != "") - { - var firstname = Regex.Match(json, "{\"first_name\":\"(.*)\",\"id\":(.*)").Groups[1].Value; - return firstname; - } - return ""; - } - catch { return ""; } - } - - public string Users_Get_Last_Name(string user_id) - { - try - { - string json = CallVkMethod("users.get", "user_ids=" + user_id); - if (json != "") - { - var firstname = Regex.Match(json, "\"id\":(.*),\"last_name\":\"(.*)\",\"can_access_closed\":(.*)").Groups[2].Value; - return firstname; - } - return ""; - } - catch { return ""; } - } - - /* Messages Send */ - public void Messages_Send_Text(string chatId, string text, int disable_mentions = 0) - { - string reply = CallVkMethod("messages.send", "peer_id=" + chatId + "&random_id=" + rnd.Next() + "&message=" + text + "&disable_mentions=" + disable_mentions); - } - - public void Messages_Send_Keyboard(string chatId, Keyboard keyboard) - { - string kb = keyboard.GetKeyboard(); - string reply = CallVkMethod("messages.send", "peer_id=" + chatId + "&random_id=" + rnd.Next() + "&keyboard=" + kb); - } - - public void Messages_Send_TextAndKeyboard(string chatId, string text, Keyboard keyboard) - { - string kb = keyboard.GetKeyboard(); - string reply = CallVkMethod("messages.send", "peer_id=" + chatId + "&random_id=" + rnd.Next() + "&message=" + text + "&keyboard=" + kb); - } - - public void Messages_Send_Sticker(string chatId, int sticker_id) - { - string reply = CallVkMethod("messages.send", "peer_id=" + chatId + "&random_id=" + rnd.Next() + "&sticker_id=" + sticker_id); - } - - public void Messages_Send_TextAndDocument(string chatId, string text, string file, string title) - { - string u2 = Docs_GetMessagesUploadServer(chatId, "doc", file); - string r2 = Docs_Upload(u2, file); - string r3 = Docs_Save(r2, title); - string at = Docs_Get_Send_Attachment(r3); - string reply = CallVkMethod("messages.send", "peer_id=" + chatId + "&random_id=" + rnd.Next() + "&message=" + text + "&attachment=" + at); - } - - public void Messages_Send_Custom(string chatId, string custom) - { - string reply = CallVkMethod("messages.send", "peer_id=" + chatId + "&random_id=" + rnd.Next() + custom); - } - - /* Messages GetConversationMembers*/ - public int Messages_GetConversationMembers_GetCount(string chatId) - { - var json = CallVkMethod("messages.getConversationMembers", "peer_id=" + chatId + "&group_id=" + BotCommunityId); - if (json != "") - { - var j = JsonConvert.DeserializeObject(json) as JObject; - int u2 = int.Parse(j["response"]["count"].ToString()); - return u2; - } - else return -1; - } - - public string Messages_GetConversationMembers_GetProfiles(string chatId) - { - var json = CallVkMethod("messages.getConversationMembers", "peer_id=" + chatId + "&group_id=" + BotCommunityId); - if (json != "") - { - string ids = ""; - JObject json1 = JObject.Parse(json); - IList results = json1["response"]["profiles"].Children().ToList(); - foreach (JToken result in results) - { - string id = result["id"].ToString(); - if (!id.Contains("-")) - ids += id + ", "; - } - return ids; - } - return ""; - } - - public string Messages_GetConversationMembers_GetItems_member_id(string chatId) - { - var json = CallVkMethod("messages.getConversationMembers", "peer_id=" + chatId + "&group_id=" + BotCommunityId); - if (json != "") - { - string ids = ""; - JObject json1 = JObject.Parse(json); - IList results = json1["response"]["items"].Children().ToList(); - foreach (JToken result in results) - { - string id = result["member_id"].ToString(); - if (!id.Contains("-")) - ids += id + ", "; - } - return ids; - } - return ""; - } - - public class Keyboard - { - public enum Color - { - Negative, - Positive, - Primary, - Secondary - } - - public bool one_time = false; - public List> buttons = new List>(); - public bool inline = false; - - public Keyboard(bool one_time2, bool line = false) - { - if (line == true && one_time2 == true) - one_time2 = false; - one_time = one_time2; - inline = line; - } - - public void AddButton(string label, string payload, Color color) - { - string color2 = ""; - if (color == Color.Negative) - color2 = "Negative"; - else if (color == Color.Positive) - color2 = "Positive"; - else if (color == Color.Primary) - color2 = "Primary"; - else - color2 = "Secondary"; - Buttons button = new Buttons(label, payload, color2); - buttons.Add(new List() { button }); - } - - public string GetKeyboard() - { - return JsonConvert.SerializeObject(this, Formatting.Indented); ; - } - - public class Buttons - { - public Action action; - public string color; - public Buttons(string labe11, string payload1, string color2) - { - action = new Action(labe11, payload1); - color = color2; - } - - public class Action - { - public string type; - public string payload; - public string label; - public Action(string label3, string payload3) - { - type = "text"; - payload = "{\"button\": \"" + payload3 + "\"}"; - label = label3; - } - } - } - } - - /* LoongPool */ - private void Init() - { - var jsonResult = CallVkMethod("groups.getLongPollServer", "group_id=" + BotCommunityId); - var data = Json.ParseJson(jsonResult); - - Key = data!["response"]!["key"]!.GetStringValue(); - Server = data["response"]!["server"]!.GetStringValue(); - LastTs = Convert.ToInt32(data["response"]!["ts"].GetStringValue()); - } - - private void StartLongPoolAsync() - { - Task.Factory.StartNew(() => - { - while (true) - { - try - { - string baseUrl = String.Format("{0}?act=a_check&version=2&wait=25&key={1}&ts=", Server, Key); - var data = ReceiverWebClient.DownloadString(baseUrl + LastTs); - var messages = ProcessResponse(data); - - foreach (var message in messages) - { - OnMessageReceivedCallback(message.Item1, message.Item2, message.Item3, message.Item4, message.Item5, message.Item6); - } - } - catch { } - } - }); - } - - private IEnumerable> ProcessResponse(string jsonData) - { - var j = JsonConvert.DeserializeObject(jsonData) as JObject; - var data = Json.ParseJson(jsonData); - if (data?.AsObject().ContainsKey("failed") == true) - { - Init(); - } - LastTs = Convert.ToInt32(data!["ts"].GetStringValue()); - var updates = data["updates"]!.AsArray(); - List> messages = new List>(); - foreach (var str in updates) - { - if (str!["type"]!.GetStringValue() != "message_new") continue; - - var msgData = str["object"]!.AsObject(); - - var id = msgData["from_id"]!.GetStringValue(); - var userId = msgData["from_id"]!.GetStringValue(); - var peer_id = msgData["peer_id"]!.GetStringValue(); - string event_id = ""; - var msgText = msgData["text"]!.GetStringValue(); - var conversation_message_id = msgData["conversation_message_id"]!.GetStringValue(); - - messages.Add(new Tuple(userId, peer_id, msgText, conversation_message_id, id, event_id)); - } - - return messages; - } - - public string CallVkMethod(string methodName, string data) - { - try - { - var url = String.Format("https://api.vk.com/method/{0}?v=5.124&access_token={1}&{2}", methodName, Token, data); - var jsonResult = SenderWebClient.DownloadString(url); - - return jsonResult; - } - catch { return String.Empty; } - } -} diff --git a/MinecraftClient/config/ChatBots/WebSocketBot.cs b/MinecraftClient/config/ChatBots/WebSocketBot.cs deleted file mode 100644 index 4983aeb88c..0000000000 --- a/MinecraftClient/config/ChatBots/WebSocketBot.cs +++ /dev/null @@ -1,1188 +0,0 @@ -//MCCScript 1.0 -//using System.Collections.Concurrent; -//using System.Net.Sockets; -//using System.Net.WebSockets; -//using System.Text.Json; -//using System.Text.Json.Serialization; -//using System.Threading.Tasks; -//using MinecraftClient.CommandHandler; - -// IMPORTANT: Change the password below before use! -MCC.LoadBot(new WebSocketBot("127.0.0.1", 8043, "CHANGE_THIS_PASSWORD")); - -//MCCScript Extensions - -public class WebSocketSession -{ - public string SessionId { get; set; } - public WebSocket WebSocket { get; } - public bool IsAuthenticated { get; set; } - - public WebSocketSession(string sessionId, WebSocket webSocket) - { - SessionId = sessionId; - WebSocket = webSocket; - IsAuthenticated = false; - } -} - -public class WebSocketServer -{ - private HttpListener? _listener; - private CancellationTokenSource? _cts; - private readonly ConcurrentDictionary _sessions = new(); - - public event Action? NewSession; - public event Action? SessionDropped; - public event Action? MessageReceived; - - public IReadOnlyDictionary Sessions => _sessions; - - public async Task Start(string ip, int port) - { - _cts = new CancellationTokenSource(); - _listener = new HttpListener(); - _listener.Prefixes.Add($"http://{ip}:{port}/"); - _listener.Start(); - - while (!_cts.Token.IsCancellationRequested) - { - try - { - var context = await _listener.GetContextAsync().ConfigureAwait(false); - - if (context.Request.IsWebSocketRequest) - _ = Task.Run(() => ProcessWebSocketSession(context, _cts.Token)); - else - { - context.Response.StatusCode = 400; - context.Response.Close(); - } - } - catch (ObjectDisposedException) { break; } - catch (HttpListenerException) { break; } - catch { /* ignore transient errors */ } - } - } - - private async Task ProcessWebSocketSession(HttpListenerContext context, CancellationToken ct) - { - WebSocketContext wsContext; - try - { - wsContext = await context.AcceptWebSocketAsync(null).ConfigureAwait(false); - } - catch { return; } - - var ws = wsContext.WebSocket; - var sessionId = Guid.NewGuid().ToString("D"); - var session = new WebSocketSession(sessionId, ws); - - _sessions.TryAdd(sessionId, session); - NewSession?.Invoke(sessionId, session); - - var buffer = new byte[4096]; - var messageBuffer = new List(); - - try - { - while (ws.State == WebSocketState.Open && !ct.IsCancellationRequested) - { - var result = await ws.ReceiveAsync(new ArraySegment(buffer), ct).ConfigureAwait(false); - - if (result.MessageType == WebSocketMessageType.Close) - break; - - messageBuffer.AddRange(new ArraySegment(buffer, 0, result.Count)); - - if (result.EndOfMessage) - { - var message = Encoding.UTF8.GetString(messageBuffer.ToArray()); - messageBuffer.Clear(); - MessageReceived?.Invoke(session.SessionId, message); - } - } - } - catch { /* connection dropped */ } - finally - { - _sessions.TryRemove(session.SessionId, out _); - SessionDropped?.Invoke(session.SessionId); - - if (ws.State == WebSocketState.Open || ws.State == WebSocketState.CloseReceived) - { - try - { - await ws.CloseAsync(WebSocketCloseStatus.NormalClosure, "Session ended", CancellationToken.None) - .ConfigureAwait(false); - } - catch { /* best effort */ } - } - - ws.Dispose(); - } - } - - public bool RenameSession(string oldId, string newId) - { - if (!_sessions.TryRemove(oldId, out var session)) - return false; - - if (_sessions.ContainsKey(newId)) - { - _sessions.TryAdd(oldId, session); - return false; - } - - session.SessionId = newId; - _sessions.TryAdd(newId, session); - return true; - } - - public async Task SendToSession(string sessionId, string message) - { - if (!_sessions.TryGetValue(sessionId, out var session)) - return; - - if (session.WebSocket.State != WebSocketState.Open) - return; - - var bytes = Encoding.UTF8.GetBytes(message); - - try - { - await session.WebSocket.SendAsync( - new ArraySegment(bytes), - WebSocketMessageType.Text, - true, - CancellationToken.None).ConfigureAwait(false); - } - catch { /* send failed, session will be cleaned up */ } - } - - public void Stop() - { - _cts?.Cancel(); - - foreach (var kvp in _sessions) - { - try - { - var ws = kvp.Value.WebSocket; - if (ws.State == WebSocketState.Open) - ws.CloseAsync(WebSocketCloseStatus.NormalClosure, "Server stopping", CancellationToken.None) - .GetAwaiter().GetResult(); - ws.Dispose(); - } - catch { /* best effort */ } - } - - _sessions.Clear(); - - try { _listener?.Stop(); } catch { } - try { _listener?.Close(); } catch { } - } -} - -public class WebSocketBot : ChatBot -{ - private readonly string _ip; - private readonly int _port; - private readonly string _password; - private readonly bool _debugMode; - - private WebSocketServer? _server; - private JsonSerializerOptions _jsonOptions = null!; - private readonly List _waitingEvents = new(); - private bool _gameJoined; - - private static readonly Regex Ipv4Regex = new( - @"^((25[0-5]|(2[0-4]|1\d|[1-9]|)\d)\.){3}(25[0-5]|(2[0-4]|1\d|[1-9]|)\d)$", - RegexOptions.Compiled); - - public WebSocketBot(string ip, int port, string password, bool debugMode = false) - { - if (!Ipv4Regex.IsMatch(ip) && ip != "+" && ip != "*") - throw new ArgumentException($"Invalid IP address: {ip}"); - - if (port is < 1 or > 65535) - throw new ArgumentException($"Invalid port: {port}. Must be between 1 and 65535."); - - _ip = ip; - _port = port; - _password = password; - _debugMode = debugMode; - } - - public override void Initialize() - { - _jsonOptions = new JsonSerializerOptions - { - PropertyNamingPolicy = JsonNamingPolicy.CamelCase, - DefaultIgnoreCondition = JsonIgnoreCondition.WhenWritingNull, - IncludeFields = true, - Converters = { new JsonStringEnumConverter() } - }; - - _server = new WebSocketServer(); - _server.NewSession += OnNewSession; - _server.SessionDropped += OnSessionDropped; - _server.MessageReceived += OnMessageReceived; - - _ = Task.Run(async () => - { - try - { - await _server.Start(_ip, _port); - } - catch (Exception ex) - { - LogToConsole($"[WebSocketBot] Server failed to start: {ex.Message}"); - } - }); - - LogToConsole($"[WebSocketBot] Starting on {_ip}:{_port}"); - } - - public override void AfterGameJoined() - { - _gameJoined = true; - _waitingEvents.Add("OnGameJoined"); - } - - public override void Update() - { - if (_waitingEvents.Count > 0) - { - var events = _waitingEvents.ToList(); - _waitingEvents.Clear(); - - foreach (var evt in events) - BroadcastEvent(evt, "N/A"); - } - } - - public override void OnUnload() - { - BroadcastEvent("OnWsConnectionClose", "N/A"); - _server?.Stop(); - } - - // --- Event Overrides --- - - public override void GetText(string text) - { - text = GetVerbatim(text); - string message = "", username = ""; - - if (IsPrivateMessage(text, ref message, ref username)) - BroadcastEvent("OnChatPrivate", SerializeData(new { sender = username, message, rawText = text })); - else if (IsChatMessage(text, ref message, ref username)) - BroadcastEvent("OnChatPublic", SerializeData(new { sender = username, message, rawText = text })); - - string tpSender = ""; - if (IsTeleportRequest(text, ref tpSender)) - BroadcastEvent("OnTeleportRequest", SerializeData(new { sender = tpSender, rawText = text })); - } - - public override void GetText(string text, string? json) - { - BroadcastEvent("OnChatRaw", SerializeData(new { text, json })); - } - - public override bool OnDisconnect(DisconnectReason reason, string message) - { - BroadcastEvent("OnDisconnect", SerializeData(new { reason = reason.ToString(), message })); - return false; - } - - public override void OnBlockBreakAnimation(Entity entity, Location location, byte stage) - { - BroadcastEvent("OnBlockBreakAnimation", SerializeData(new { entity, location, stage })); - } - - public override void OnEntityAnimation(Entity entity, byte animation) - { - BroadcastEvent("OnEntityAnimation", SerializeData(new { entity, animation })); - } - - public override void OnPlayerProperty(Dictionary prop) - { - BroadcastEvent("OnPlayerProperty", SerializeData(prop)); - } - - public override void OnServerTpsUpdate(double tps) - { - BroadcastEvent("OnServerTpsUpdate", SerializeData(new { tps })); - } - - public override void OnTimeUpdate(long worldAge, long timeOfDay) - { - BroadcastEvent("OnTimeUpdate", SerializeData(new { worldAge, timeOfDay })); - } - - public override void OnEntityMove(Entity entity) - { - BroadcastEvent("OnEntityMove", SerializeData(entity)); - } - - public override void OnInternalCommand(string commandName, string commandParams, CmdResult result) - { - BroadcastEvent("OnInternalCommand", SerializeData(new - { - commandName, - commandParams, - result = new { status = result.status.ToString(), result = result.result } - })); - } - - public override void OnEntitySpawn(Entity entity) - { - BroadcastEvent("OnEntitySpawn", SerializeData(entity)); - } - - public override void OnEntityDespawn(Entity entity) - { - BroadcastEvent("OnEntityDespawn", SerializeData(entity)); - } - - public override void OnHeldItemChange(byte slot) - { - BroadcastEvent("OnHeldItemChange", SerializeData(new { slot })); - } - - public override void OnHealthUpdate(float health, int food) - { - BroadcastEvent("OnHealthUpdate", SerializeData(new { health, food })); - } - - public override void OnExplosion(Location explode, float strength, int recordcount) - { - BroadcastEvent("OnExplosion", SerializeData(new { location = explode, strength, recordcount })); - } - - public override void OnSetExperience(float experienceBar, int level, int totalExperience) - { - BroadcastEvent("OnSetExperience", SerializeData(new { experienceBar, level, totalExperience })); - } - - public override void OnGamemodeUpdate(string playerName, Guid uuid, int gamemode) - { - BroadcastEvent("OnGamemodeUpdate", SerializeData(new { playerName, uuid, gamemode })); - } - - public override void OnLatencyUpdate(string playerName, Guid uuid, int latency) - { - BroadcastEvent("OnLatencyUpdate", SerializeData(new { playerName, uuid, latency })); - } - - public override void OnMapData(int mapId, byte scale, bool trackingPosition, bool locked, - List icons, byte columnsUpdated, byte rowsUpdated, byte mapColumnX, - byte mapRowZ, byte[]? colors) - { - BroadcastEvent("OnMapData", SerializeData(new - { - mapId, scale, trackingPosition, locked, icons, - columnsUpdated, rowsUpdated, mapColumnX, mapRowZ, - colors = colors != null ? Convert.ToBase64String(colors) : null - })); - } - - public override void OnTradeList(int windowId, List trades, VillagerInfo villagerInfo) - { - BroadcastEvent("OnTradeList", SerializeData(new { windowId, trades, villagerInfo })); - } - - public override void OnTitle(int action, string titleText, string subtitleText, - string actionBarText, int fadeIn, int stay, int fadeOut, string json) - { - BroadcastEvent("OnTitle", SerializeData(new - { - action, titleText, subtitleText, actionBarText, - fadeIn, stay, fadeOut, json - })); - } - - public override void OnEntityEquipment(Entity entity, int slot, Item? item) - { - BroadcastEvent("OnEntityEquipment", SerializeData(new { entity, slot, item })); - } - - public override void OnEntityEffect(Entity entity, Effects effect, int amplifier, int duration, byte flags) - { - BroadcastEvent("OnEntityEffect", SerializeData(new - { - entity, effect = effect.ToString(), amplifier, duration, flags - })); - } - - public override void OnScoreboardObjective(string objectiveName, byte mode, - string objectiveValue, int type, string json, int numberFormat) - { - BroadcastEvent("OnScoreboardObjective", SerializeData(new - { - objectiveName, mode, objectiveValue, type, json, numberFormat - })); - } - - public override void OnUpdateScore(string entityName, int action, string objectiveName, - string objectiveDisplayName, int value, int numberFormat) - { - BroadcastEvent("OnUpdateScore", SerializeData(new - { - entityName, action, objectiveName, objectiveDisplayName, value, numberFormat - })); - } - - public override void OnInventoryUpdate(int inventoryId) - { - BroadcastEvent("OnInventoryUpdate", SerializeData(new { inventoryId })); - } - - public override void OnInventoryOpen(int inventoryId) - { - BroadcastEvent("OnInventoryOpen", SerializeData(new { inventoryId })); - } - - public override void OnInventoryClose(int inventoryId) - { - BroadcastEvent("OnInventoryClose", SerializeData(new { inventoryId })); - } - - public override void OnPlayerJoin(Guid uuid, string name) - { - BroadcastEvent("OnPlayerJoin", SerializeData(new { uuid, name })); - } - - public override void OnPlayerLeave(Guid uuid, string? name) - { - BroadcastEvent("OnPlayerLeave", SerializeData(new { uuid, name })); - } - - public override void OnDeath() - { - BroadcastEvent("OnDeath", "N/A"); - } - - public override void OnRespawn() - { - BroadcastEvent("OnRespawn", "N/A"); - } - - public override void OnEntityHealth(Entity entity, float health) - { - BroadcastEvent("OnEntityHealth", SerializeData(new { entity, health })); - } - - public override void OnEntityMetadata(Entity entity, Dictionary metadata) - { - BroadcastEvent("OnEntityMetadata", SerializeData(new { entity, metadata })); - } - - public override void OnPlayerStatus(byte statusId) - { - BroadcastEvent("OnPlayerStatus", SerializeData(new { statusId })); - } - - public override void OnNetworkPacket(int packetID, List packetData, bool isLogin, bool isInbound) - { - BroadcastEvent("OnNetworkPacket", SerializeData(new - { - packetID, - data = Convert.ToBase64String(packetData.ToArray()), - isLogin, - isInbound - })); - } - - // --- Serialization helpers --- - - private string SerializeData(object data) - { - return JsonSerializer.Serialize(data, _jsonOptions); - } - - private void BroadcastEvent(string eventName, string data) - { - if (_server == null) return; - - var envelope = new Dictionary { ["event"] = eventName, ["data"] = data }; - var json = JsonSerializer.Serialize(envelope); - - foreach (var kvp in _server.Sessions) - { - if (!kvp.Value.IsAuthenticated) continue; - _ = _server.SendToSession(kvp.Key, json); - } - } - - private void SendSessionEvent(string sessionId, string eventName, string data) - { - if (_server == null) return; - - var envelope = new Dictionary { ["event"] = eventName, ["data"] = data }; - var json = JsonSerializer.Serialize(envelope); - - _ = _server.SendToSession(sessionId, json); - } - - // --- Session event handlers --- - - private void OnNewSession(string sessionId, WebSocketSession session) - { - if (_debugMode) - LogToConsole($"[WebSocketBot] New session: {sessionId}"); - } - - private void OnSessionDropped(string sessionId) - { - if (_debugMode) - LogToConsole($"[WebSocketBot] Session dropped: {sessionId}"); - } - - private void OnMessageReceived(string sessionId, string message) - { - if (_debugMode) - LogToConsole($"[WebSocketBot] [{sessionId}] Received: {message}"); - - if (_server == null || !_server.Sessions.TryGetValue(sessionId, out var session)) - return; - - try - { - using var doc = JsonDocument.Parse(message); - var root = doc.RootElement; - - if (root.TryGetProperty("command", out var commandElement)) - { - var command = commandElement.GetString() ?? ""; - var requestId = root.TryGetProperty("requestId", out var rid) ? rid.GetString() ?? "" : ""; - - var parameters = new List(); - if (root.TryGetProperty("parameters", out var paramsElement) && - paramsElement.ValueKind == JsonValueKind.Array) - { - foreach (var p in paramsElement.EnumerateArray()) - { - parameters.Add(p.ValueKind switch - { - JsonValueKind.String => p.GetString(), - JsonValueKind.Number => p.TryGetInt64(out var l) ? (object)l : p.GetDouble(), - JsonValueKind.True => true, - JsonValueKind.False => false, - JsonValueKind.Null => null, - _ => p.GetRawText() - }); - } - } - - HandleCommand(sessionId, session, command, requestId, parameters); - return; - } - } - catch - { - // Not valid JSON, treat as plain text - } - - HandlePlainText(sessionId, session, message); - } - - private void HandlePlainText(string sessionId, WebSocketSession session, string text) - { - if (!session.IsAuthenticated) - { - SendSessionEvent(sessionId, "OnWsCommandResponse", - SerializeData(new { success = false, message = "Not authenticated", requestId = "" })); - return; - } - - if (text.StartsWith('/')) - { - var cmd = text[1..]; - var result = new CmdResult(); - PerformInternalCommand("send " + cmd, ref result); - SendSessionEvent(sessionId, "OnMccCommandResponse", - SerializeData(new { command = cmd, status = result.status.ToString(), result = result.result ?? "" })); - } - else - { - SendText(text); - } - } - - // --- Command processing --- - - private void HandleCommand(string sessionId, WebSocketSession session, string command, - string requestId, List parameters) - { - // Protocol commands available without auth - switch (command) - { - case "Authenticate": - HandleAuthenticate(sessionId, session, requestId, parameters); - return; - case "ChangeSessionId": - HandleChangeSessionId(sessionId, session, requestId, parameters); - return; - } - - if (!session.IsAuthenticated) - { - SendCommandResponse(sessionId, requestId, false, "Not authenticated"); - return; - } - - try - { - switch (command) - { - case "LogToConsole": - LogToConsole(GetParam(parameters, 0)); - SendCommandResponse(sessionId, requestId, true); - break; - - case "LogDebugToConsole": - LogDebugToConsole(GetParam(parameters, 0)); - SendCommandResponse(sessionId, requestId, true); - break; - - case "LogToConsoleTranslated": - LogToConsoleTranslated(GetParam(parameters, 0)); - SendCommandResponse(sessionId, requestId, true); - break; - - case "LogDebugToConsoleTranslated": - LogDebugToConsoleTranslated(GetParam(parameters, 0)); - SendCommandResponse(sessionId, requestId, true); - break; - - case "ReconnectToTheServer": - { - var extra = parameters.Count > 0 ? Convert.ToInt32(parameters[0]) : 3; - var delay = parameters.Count > 1 ? Convert.ToInt32(parameters[1]) : 0; - ReconnectToTheServer(extra, delay); - SendCommandResponse(sessionId, requestId, true); - break; - } - - case "DisconnectAndExit": - SendCommandResponse(sessionId, requestId, true); - DisconnectAndExit(); - break; - - case "SendPrivateMessage": - SendPrivateMessage(GetParam(parameters, 0), GetParam(parameters, 1)); - SendCommandResponse(sessionId, requestId, true); - break; - - case "RunScript": - RunScript(GetParam(parameters, 0)); - SendCommandResponse(sessionId, requestId, true); - break; - - case "GetTerrainEnabled": - SendCommandResponse(sessionId, requestId, true, SerializeData(new { enabled = GetTerrainEnabled() })); - break; - - case "SetTerrainEnabled": - SetTerrainEnabled(GetParam(parameters, 0)); - SendCommandResponse(sessionId, requestId, true); - break; - - case "GetEntityHandlingEnabled": - SendCommandResponse(sessionId, requestId, true, - SerializeData(new { enabled = GetEntityHandlingEnabled() })); - break; - - case "Sneak": - { - var on = GetParam(parameters, 0); - var result = Sneak(on); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "SendEntityAction": - { - var actionType = ParseEnum(parameters[0]); - var result = SendEntityAction(actionType); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "DigBlock": - { - var x = Convert.ToDouble(parameters[0]); - var y = Convert.ToDouble(parameters[1]); - var z = Convert.ToDouble(parameters[2]); - var direction = parameters.Count > 3 ? ParseEnum(parameters[3]) : Direction.Down; - var loc = new Location(x, y, z); - - if (!GetTerrainEnabled()) - { - SendCommandResponse(sessionId, requestId, false, "Terrain not enabled"); - break; - } - - var current = GetCurrentLocation(); - if (current.Distance(loc) > 6.0) - { - SendCommandResponse(sessionId, requestId, false, "Block too far away (max 6 blocks)"); - break; - } - - var world = GetWorld(); - var block = world.GetBlock(loc); - if (block.Type == Material.Air) - { - SendCommandResponse(sessionId, requestId, false, "Block is air"); - break; - } - - var digResult = DigBlock(loc, direction); - SendCommandResponse(sessionId, requestId, digResult); - break; - } - - case "SetSlot": - { - var slot = Convert.ToInt32(parameters[0]); - SetSlot(slot); - SendCommandResponse(sessionId, requestId, true); - break; - } - - case "GetWorld": - { - if (!GetTerrainEnabled()) - { - SendCommandResponse(sessionId, requestId, false, "Terrain not enabled"); - break; - } - // Return basic world info rather than full world data - SendCommandResponse(sessionId, requestId, true, SerializeData(new { available = true })); - break; - } - - case "GetEntities": - { - if (!GetEntityHandlingEnabled()) - { - SendCommandResponse(sessionId, requestId, false, "Entity handling not enabled"); - break; - } - var entities = GetEntities(); - SendCommandResponse(sessionId, requestId, true, SerializeData(entities)); - break; - } - - case "GetPlayersLatency": - { - var latency = GetPlayersLatency(); - SendCommandResponse(sessionId, requestId, true, SerializeData(latency)); - break; - } - - case "GetCurrentLocation": - SendCommandResponse(sessionId, requestId, true, SerializeData(GetCurrentLocation())); - break; - - case "MoveToLocation": - { - var x = Convert.ToDouble(parameters[0]); - var y = Convert.ToDouble(parameters[1]); - var z = Convert.ToDouble(parameters[2]); - var allowUnsafe = parameters.Count > 3 && GetParam(parameters, 3); - var allowDirectTp = parameters.Count > 4 && GetParam(parameters, 4); - var maxOffset = parameters.Count > 5 ? Convert.ToInt32(parameters[5]) : 0; - var minOffset = parameters.Count > 6 ? Convert.ToInt32(parameters[6]) : 0; - var result = MoveToLocation(new Location(x, y, z), allowUnsafe, allowDirectTp, maxOffset, minOffset); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "ClientIsMoving": - SendCommandResponse(sessionId, requestId, true, - SerializeData(new { moving = ClientIsMoving() })); - break; - - case "LookAtLocation": - { - var x = Convert.ToDouble(parameters[0]); - var y = Convert.ToDouble(parameters[1]); - var z = Convert.ToDouble(parameters[2]); - LookAtLocation(new Location(x, y, z)); - SendCommandResponse(sessionId, requestId, true); - break; - } - - case "GetTimestamp": - SendCommandResponse(sessionId, requestId, true, - SerializeData(new { timestamp = GetTimestamp() })); - break; - - case "GetServerPort": - SendCommandResponse(sessionId, requestId, true, - SerializeData(new { port = GetServerPort() })); - break; - - case "GetServerHost": - SendCommandResponse(sessionId, requestId, true, - SerializeData(new { host = GetServerHost() })); - break; - - case "GetUsername": - SendCommandResponse(sessionId, requestId, true, - SerializeData(new { username = GetUsername() })); - break; - - case "GetGamemode": - SendCommandResponse(sessionId, requestId, true, - SerializeData(new { gamemode = GetGamemode() })); - break; - - case "GetYaw": - SendCommandResponse(sessionId, requestId, true, - SerializeData(new { yaw = GetYaw() })); - break; - - case "GetPitch": - SendCommandResponse(sessionId, requestId, true, - SerializeData(new { pitch = GetPitch() })); - break; - - case "GetUserUUID": - SendCommandResponse(sessionId, requestId, true, - SerializeData(new { uuid = GetUserUUID() })); - break; - - case "GetOnlinePlayers": - SendCommandResponse(sessionId, requestId, true, - SerializeData(GetOnlinePlayers())); - break; - - case "GetOnlinePlayersWithUUID": - SendCommandResponse(sessionId, requestId, true, - SerializeData(GetOnlinePlayersWithUUID())); - break; - - case "GetServerTPS": - SendCommandResponse(sessionId, requestId, true, - SerializeData(new { tps = GetServerTPS() })); - break; - - case "InteractEntity": - { - var entityId = Convert.ToInt32(parameters[0]); - var interactType = ParseEnum(parameters[1]); - var hand = parameters.Count > 2 ? ParseEnum(parameters[2]) : Hand.MainHand; - var result = InteractEntity(entityId, interactType, hand); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "CreativeGive": - { - var slot = Convert.ToInt32(parameters[0]); - var itemType = ParseEnum(parameters[1]); - var count = Convert.ToInt32(parameters[2]); - var result = CreativeGive(slot, itemType, count); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "CreativeDelete": - { - var slot = Convert.ToInt32(parameters[0]); - var result = CreativeDelete(slot); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "SendAnimation": - { - var hand = parameters.Count > 0 ? ParseEnum(parameters[0]) : Hand.MainHand; - var result = SendAnimation(hand); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "SendPlaceBlock": - { - var x = Convert.ToDouble(parameters[0]); - var y = Convert.ToDouble(parameters[1]); - var z = Convert.ToDouble(parameters[2]); - var direction = ParseEnum(parameters[3]); - var hand = parameters.Count > 4 ? ParseEnum(parameters[4]) : Hand.MainHand; - var result = SendPlaceBlock(new Location(x, y, z), direction, hand); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "UseItemInHand": - { - var result = UseItemInHand(); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "GetInventoryEnabled": - SendCommandResponse(sessionId, requestId, true, - SerializeData(new { enabled = GetInventoryEnabled() })); - break; - - case "GetPlayerInventory": - { - if (!GetInventoryEnabled()) - { - SendCommandResponse(sessionId, requestId, false, "Inventory not enabled"); - break; - } - var inv = GetPlayerInventory(); - SendCommandResponse(sessionId, requestId, true, SerializeData(inv)); - break; - } - - case "GetInventories": - { - if (!GetInventoryEnabled()) - { - SendCommandResponse(sessionId, requestId, false, "Inventory not enabled"); - break; - } - var inventories = GetInventories(); - SendCommandResponse(sessionId, requestId, true, SerializeData(inventories)); - break; - } - - case "WindowAction": - { - var inventoryId = Convert.ToInt32(parameters[0]); - var slot = Convert.ToInt32(parameters[1]); - var actionType = ParseEnum(parameters[2]); - var result = WindowAction(inventoryId, slot, actionType); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "ChangeSlot": - { - var slot = Convert.ToInt16(parameters[0]); - var result = ChangeSlot(slot); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "GetCurrentSlot": - SendCommandResponse(sessionId, requestId, true, - SerializeData(new { slot = GetCurrentSlot() })); - break; - - case "ClearInventories": - { - var result = ClearInventories(); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "UpdateSign": - { - var x = Convert.ToDouble(parameters[0]); - var y = Convert.ToDouble(parameters[1]); - var z = Convert.ToDouble(parameters[2]); - var line1 = GetParam(parameters, 3); - var line2 = GetParam(parameters, 4); - var line3 = GetParam(parameters, 5); - var line4 = GetParam(parameters, 6); - var result = UpdateSign(new Location(x, y, z), line1, line2, line3, line4); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "SelectTrade": - { - var selectedSlot = Convert.ToInt32(parameters[0]); - var result = SelectTrade(selectedSlot); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "UpdateCommandBlock": - { - var x = Convert.ToDouble(parameters[0]); - var y = Convert.ToDouble(parameters[1]); - var z = Convert.ToDouble(parameters[2]); - var cmd = GetParam(parameters, 3); - var mode = ParseEnum(parameters[4]); - var flags = ParseEnum(parameters[5]); - var result = UpdateCommandBlock(new Location(x, y, z), cmd, mode, flags); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "CloseInventory": - { - var inventoryId = Convert.ToInt32(parameters[0]); - var result = CloseInventory(inventoryId); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "GetMaxChatMessageLength": - SendCommandResponse(sessionId, requestId, true, - SerializeData(new { length = GetMaxChatMessageLength() })); - break; - - case "Respawn": - { - var result = Respawn(); - SendCommandResponse(sessionId, requestId, result); - break; - } - - case "GetProtocolVersion": - SendCommandResponse(sessionId, requestId, true, - SerializeData(new { protocolVersion = GetProtocolVersion() })); - break; - - case "GetItemTypeMappings": - { - var mappings = new Dictionary(); - foreach (ItemType value in Enum.GetValues(typeof(ItemType))) - mappings[value.ToString()] = (int)value; - SendCommandResponse(sessionId, requestId, true, SerializeData(mappings)); - break; - } - - case "GetEntityTypeMappings": - { - var mappings = new Dictionary(); - foreach (EntityType value in Enum.GetValues(typeof(EntityType))) - mappings[value.ToString()] = (int)value; - SendCommandResponse(sessionId, requestId, true, SerializeData(mappings)); - break; - } - - default: - SendCommandResponse(sessionId, requestId, false, $"Unknown command: {command}"); - break; - } - } - catch (Exception ex) - { - SendCommandResponse(sessionId, requestId, false, $"Error: {ex.Message}"); - } - } - - private void HandleAuthenticate(string sessionId, WebSocketSession session, string requestId, - List parameters) - { - if (parameters.Count == 0) - { - SendCommandResponse(sessionId, requestId, false, "Invalid password"); - return; - } - - var provided = GetParam(parameters, 0); - var expected = _password; - - // Fixed-time comparison to prevent timing attacks - var diff = provided.Length ^ expected.Length; - for (int i = 0; i < expected.Length; i++) - diff |= expected[i] ^ (i < provided.Length ? provided[i] : 0xFF); - - if (diff != 0) - { - SendCommandResponse(sessionId, requestId, false, "Invalid password"); - return; - } - - session.IsAuthenticated = true; - SendCommandResponse(sessionId, requestId, true, "Authenticated"); - } - - private void HandleChangeSessionId(string sessionId, WebSocketSession session, string requestId, - List parameters) - { - if (parameters.Count == 0) - { - SendCommandResponse(sessionId, requestId, false, "New session ID required"); - return; - } - - var newId = GetParam(parameters, 0); - if (string.IsNullOrWhiteSpace(newId)) - { - SendCommandResponse(sessionId, requestId, false, "New session ID cannot be empty"); - return; - } - - if (_server == null) - { - SendCommandResponse(sessionId, requestId, false, "Server not initialized"); - return; - } - - if (_server.RenameSession(sessionId, newId)) - SendCommandResponse(newId, requestId, true, $"Session renamed to {newId}"); - else - SendCommandResponse(sessionId, requestId, false, $"Failed to rename session to {newId}"); - } - - // --- Response helpers --- - - private void SendCommandResponse(string sessionId, string requestId, bool success, string? message = null) - { - var response = new Dictionary - { - ["success"] = success, - ["requestId"] = requestId - }; - - if (message != null) - response["message"] = message; - - SendSessionEvent(sessionId, "OnWsCommandResponse", SerializeData(response)); - } - - // --- Parsing helpers --- - - private static T ParseEnum(object? param) where T : struct, Enum - { - if (param is string s) - { - if (Enum.TryParse(s, ignoreCase: true, out var parsed)) - return parsed; - } - - try - { - var numeric = Convert.ToInt32(param); - return (T)Enum.ToObject(typeof(T), numeric); - } - catch - { - throw new ArgumentException($"Cannot parse '{param}' as {typeof(T).Name}"); - } - } - - private static T GetParam(List parameters, int index) - { - if (index >= parameters.Count) - throw new ArgumentException($"Missing parameter at index {index}"); - - var val = parameters[index]; - - if (val is T typed) - return typed; - - if (typeof(T) == typeof(bool) && val != null) - return (T)(object)Convert.ToBoolean(val); - - if (typeof(T) == typeof(string)) - return (T)(object)(val?.ToString() ?? ""); - - return (T)Convert.ChangeType(val!, typeof(T)); - } -} diff --git a/MinecraftClient/config/README.md b/MinecraftClient/config/README.md deleted file mode 100644 index b2278fe6d6..0000000000 --- a/MinecraftClient/config/README.md +++ /dev/null @@ -1,4 +0,0 @@ -Minecraft Console Client User Manual -====== - -This page has been moved to appropriate sections on our new [Documentation website](https://mccteam.github.io/guide/configuration.html). \ No newline at end of file diff --git a/MinecraftClient/config/hangman-en.txt b/MinecraftClient/config/hangman-en.txt deleted file mode 100644 index 8b63285d7d..0000000000 --- a/MinecraftClient/config/hangman-en.txt +++ /dev/null @@ -1,323 +0,0 @@ -HOUSE -BLUE -PLANE -JUKEBOX -BEE -BUILDING -AXE -SNOW -ZERO -BROWN -TELEPHONE -COMPUTER -WINDOW -SUN -LINDEN -TINTAMARRE -PROLIFIC -CLOCK -CHURCH -OFFICE -APRICOT -PLANISPHERE -WORLD MAP -FISHING -CASE -SADDLE -BAG -ROOM -PUDDING -BANANA -MANGO -KIWI -HUMMINGBIRD -BEDSIDE -ALARM -NEW -LAUNDRY -OPERATION -PRINCESS -GARDEN -DEMON -DENT -CASH -VILLAGE -ESTATE -YAK -RIVER -ISLAND -ENTRY -PALISSADE -ARBALETTE -CANDY -TAPESTRY -PAQUEBOT -PAQUERETTE -SUNFLOWER -CALENDAR -HIGHWAY -KNIFE -TORNADO -CREEK -HUNG -BROCCOLI -ARTICHOKE -MAGMA -LICHEN -CALCULATOR -DICTIONARY -SUPERETTE -PULLEY -GEAR -RAFT -BAG -SECATEUR -TIMER -HOURGLASS -SPIRIT -DRAWER -ORE -INGOT -BADGE -PILLOW -COVER -BASKET -MAIL -FRESCO -LIBRARY -TABLE -CHAIR -TILE -TOWEL -AREA -CHEST -PLUSH -TEMPLATE -PONTOON -ALMOST -WICK -PEEL -NERD -TRACTOR -AGRICULTURE -DOOR -CERF -SOURCE -FONTAINE -BOAR -DOVE -PHARAOH -ELECTRIC -NEW -PAJAMA -NEON -PEACOCK -FAWN -ACTIVITY -ENCYCLOPEDIA -MESSENGER -MICROSCOPE -TELESCOPE -TELEPHERIQUE -LOCATION -TERRIER -BOWL -PAINTING -WATERCOLOR -GROVE -GRAVEL -CANDLE -CANDLESTICK -DESTINATION -VEHICLE -EPERVIER -DART -SOFA -NARRATOR -REWARD -VICTORY -BATTLE -BLAZE -COAL -EMBER -VACHERIE -BARN -TIGRE -TOMCAT -DEFORESTATION -ELEPHANT -RADIATOR -TREASURE -GUM -TRIANGLE -PENTAGRAM -SPIRAL -BLAZON -ABACUS -SHIELD -STOOL -PUZZLE -LABYRINTH -SPACE -POSTER -CINEMA -ANTICIPATION -ASTRE -PLANET -UNIVERSE -CURIOSITY -GUIDE -VALLEY -SUMMIT -WALL -MONUMENT -PIGEON -PIANO -GUITAR -VIOLIN -VIOLET -CLARION -TRUMPET -CLAIRIERE -BUSH -FOLIAGE -ARCH -FERN -CALENDAR -THERMOMETER -PAN -CASSOULET -LADYBUG -PUCERON -ANT -DRAGONFLY -BUTTERFLY -VIEWPOINT -ERUPTION -RUDDER -SAIL -CATAMARAN -SCREEN -LIGHTNING -CLOSING -PHILOSOPHER -STAMP -ENVELOPE -POETRY -CRAFTS -TWIN -FOAL -MARE -BUCKET -WATERING -ROSIER -GARDENER -FOREST -GENDARME -DREAM -WONDER -STAR -CORAL -FAN -GOODS -LIFT -ELEVATOR -STAIRS -BALLOON -LIGHT -LAMP -PACHYDERM -WATERMELON -MELON -CEREAL -POPPY -DANDELION -GRAZING -BOOT -BATH -BANKRUPTCY -BOUQUET -SWEATER -NAIN -CUMULONIMBUS -YELLOW -WIND -ECLAT -BRIGHTNESS -DIAMOND -CRYSTAL -ROCK -CAPITAL -INVOICE -PAPER -DIARY -SCREEN -WAGON -LOCOMOTIVE -TIMER -CLOWN -SCREWDRIVER -BOWLS -PANCARTE -SHELF -WAND -DODGE -TUB -HUGE -DUNGEON -BANQUET -BOOK -BOILER -TRAIL -STABLES -WHIMSICAL -TAPAGE -PENCIL -CANYON -SAVATE -SAVANNAH -AIRPORT -QUESTION -GARLAND -INFORMATION -ARMCHAIR -CHAMPAGNE -BOTTLE -RIPPLE -WAVE -LUNCH -CULTURE -CUBE -PANEL -PAPYRUS -DIMENSION -FUNCTION -ECLUSE -PISTON -PIRATE -PEAK -FURNACE -FABULOUS -BOOKLET -MAGAZINE -STORE -RINK -LAWYER -SALAD -WOOL -MINECRAFT -CREEPER -SKELETON -GHAST -NETHER -TORCH -LANTERN -FACTION -GLOWSTONE -MINECART -CONSTRUCTION -BACTERIA -ACHIEVEMENT -HEROBRINE -NOTCH -BOW \ No newline at end of file diff --git a/MinecraftClient/config/hangman-fr.txt b/MinecraftClient/config/hangman-fr.txt deleted file mode 100644 index 65a8eecf98..0000000000 --- a/MinecraftClient/config/hangman-fr.txt +++ /dev/null @@ -1,322 +0,0 @@ -MAISON -BLEU -AVION -XYLOPHONE -ABEILLE -IMMEUBLE -GOURDIN -NEIGE -ZERO -MARRON -TELEPHONE -ORDINATEUR -FENETRE -SOLEIL -TILLEUL -TINTAMARRE -PROLIFIQUE -HORLOGE -EGLISE -BUREAU -ABRICOT -PLANISPHERE -MAPPEMONDE -PECHE -ETUI -SELLE -CABAS -MANGER -BOUDIN -BANANE -MANGUE -KIWI -COLIBRI -CHOUCROUTE -CHEVET -REVEIL -NOUVELLE -BUANDERIE -FONCTIONNEMENT -PRINCESSE -POTAGER -DEMON -DENT -CAISSE -VILLAGE -URBANISATION -YACK -RIVIERE -ILOT -ENTREE -PALISSADE -ARBALETTE -SUCRERIE -TAPISSERIE -PAQUEBOT -PAQUERETTE -TOURNESOL -CALENDRIER -AUTOROUTE -COUTEAU -TORNADE -RUISSEAU -DELTAPLANE -PARAPENTE -PENDU -BROCOLI -TOPINAMBOUR -MAGMA -LICHEN -CALCULATRICE -DICTIONNAIRE -SUPERETTE -POULIE -ENGRENAGE -RADEAU -SACOCHE -SECATEUR -CHRONOMETRE -SABLIER -ESPRIT -TIROIR -MINERAI -LINGOT -BADGE -OREILLER -COUETTE -EDREDON -CORBEILLE -COURRIER -FRESQUE -BIBLIOTHEQUE -TABLE -CHAISE -CARRELAGE -SERVIETTE -SUPERFICIE -COMMODE -PELUCHE -GABARIT -PONTON -PRESQUE -MECHE -PELURE -BALLOT -TRACTEUR -AGRICULTURE -PORTILLON -CERF -SOURCE -FONTAINE -SANGLIER -TOURTERELLE -PHARAON -ELECTRIQUE -NOUVEAUTE -PYJAMA -NEON -PAON -FAON -ACTIVITE -ENCYCLOPEDIE -MESSAGER -MICROSCOPE -TELESCOPE -TELEPHERIQUE -EMPLACEMENT -TERRIER -TERRINE -PEINTURE -AQUARELLE -BOSQUET -GRAVIER -BOUGIE -CHANDELIER -DESTINATION -VEHICULE -EPERVIER -FLECHETTE -CANAPE -NARRATEUR -RECOMPENSE -VICTOIRE -BATAILLE -BRASIER -CHARBON -BRAISE -VACHERIE -POULAILLER -TIGRE -MATOU -DEFORESTATION -ELEPHANT -RADIATEUR -TRESOR -GOMME -TRIANGLE -PENTAGRAMME -SPIRALE -BLASON -BOULIER -BOUCLIER -TABOURET -PUZZLE -LABYRINTHE -ESPACE -AFFICHE -CINEMA -ANTICIPATION -ASTRE -PLANETE -UNIVERS -CURIOSITE -GUIDE -VALLEE -SOMMET -MURAILLE -MONUMENT -PIGEON -PIANO -GUITARE -VIOLON -VIOLET -CLAIRON -TROMPETTE -CLAIRIERE -BUISSON -FEUILLAGE -VOUTE -FOUGERE -CALENDRIER -THERMOMETRE -CASSEROLE -CASSOULET -COCCINELLE -PUCERON -FOURMI -LIBELLULE -PAPILLON -MIRADOR -ERUPTION -GOUVERNAIL -VOILE -CATAMARAN -PARAVENT -PARATONNERRE -CLOTURE -PHILOSOPHE -TIMBRE -ENVELOPPE -POESIE -ARTISANAT -JUMELLES -POULAIN -JUMENT -SEAU -ARROSOIR -ROSIER -JARDINIER -FORESTIER -GENDARME -SONGE -REVE -ETOILE -CORAIL -EVENTAIL -MARCHANDISE -ELEVATEUR -ASCENSEUR -ESCALIER -MONTGOLFIERE -LUMINAIRE -LAMPADAIRE -PACHYDERME -PASTEQUE -MELON -CEREALE -COQUELICOT -PISSENLIT -PATURAGE -BOTTE -BAIGNOIRE -BANQUEROUTE -BOUQUET -CHANDAIL -NAIN -CUMULONIMBUS -JAUNE -VENT -ECLAT -ECLAIR -DIAMANT -CRISTAL -ROCHER -CAPITALE -FACTURE -FEUILLETON -JOURNAL -GRILLAGE -WAGON -LOCOMOTIVE -CHRONOMETRE -CLOWN -TOURNEVIS -PETANQUE -PANCARTE -ETAGERE -BAGUETTE -ESQUIVE -BAQUET -ENORME -DONJON -BANQUET -CARNET -CHAUDIERE -SENTIER -MANEGE -LUNATIQUE -TAPAGE -CRAYON -CANYON -SAVATE -SAVANE -AEROPORT -QUESTION -GUIRLANDE -INFORMATION -FAUTEUIL -CHAMPAGNE -BOUTEILLE -CLAPOTIS -VAGUE -DEJEUNER -CULTURE -CUBE -PANNEAU -PAPYRUS -DIMENSION -FONCTION -ECLUSE -PISTON -PIRATE -PITON -FOURNAISE -FABULEUX -BOUQUIN -MAGAZINE -MAGASIN -PATINOIRE -AVOCAT -SALADE -LAINE -MINECRAFT -CREEPER -SQUELETTE -GHAST -NETHER -LANTERNE -FACTION -GLOWSTONE -MINECART -CONSTRUCTION -BACTERIE \ No newline at end of file diff --git a/MinecraftClient/config/sample-matches.ini b/MinecraftClient/config/sample-matches.ini deleted file mode 100644 index 523e17d794..0000000000 --- a/MinecraftClient/config/sample-matches.ini +++ /dev/null @@ -1,74 +0,0 @@ -# Minecraft Console Client -# AutoRespond matches -# Example config file - -# Structure of a match: [Match] Followed by the match and action -# The match can be a simple match or an advanced regular expression -# You can use $u for username of the player triggering the match -# You can define an action if the match was in a private message -# You can define an action if the match was not sent by a player -# Regex matches are also supported eg $1, $2, $3.. in actions -# Matches can optionally be restricted to bot owners only -# Matches can have a cooldown, specified in seconds - -# When running a script from an AutoRespond match, -# additional %variables% are available from within your script: -# %match_u% will hold username of the player triggering the match -# %match_1%, %match_2%, %match_3%.. will hold regex matches - -# Simple example: Respond to a message containing a keyword - -[Match] -match=hi -action=send hi, $u! -actionprivate=send /tell $u Hello! -actionother=log detected "hi" message -ownersonly=false -cooldown=0 - -# You do not need to specify all the "action" fields -# Only one of them is required for each match - -# Advanced example: Use a regular expression -# Here a "regex" field is used instead of "match" field -# Do not use both "regex" and "match" fields... - -[Match] -regex=^.*hello ([a-zA-Z0-9_]+).*$ -action=send hello too, $1! - -# Example of using a script - -[Match] -match=dotest -action=script test - -# Example of matching a server announcement - -[Match] -match=server is restarting -actionother=script restart - -# Example of custom remote control command - -[Match] -match=gohome -actionprivate=send /home -ownersonly=true - -# Example of match with 1-minute cooldown - -[Match] -match=hello -action=send hello! -cooldown=60 - -# Example of matching colored text when "matchcolors" is set to "true" -# §a stands for green text -# List of all color codes: https://minecraft.tools/en/color-code.php -[Match] -match=§ahello -action=send Hello back! - -# Enjoy! -# - ORelio diff --git a/MinecraftClient/config/sample-script-extended.cs b/MinecraftClient/config/sample-script-extended.cs deleted file mode 100644 index bf5e7c32e3..0000000000 --- a/MinecraftClient/config/sample-script-extended.cs +++ /dev/null @@ -1,31 +0,0 @@ -//MCCScript 1.0 - -/* This script demonstrates how to use methods and arguments */ - -string text = "hello"; - -if (args.Length > 0) - text = args[0]; - -for (int i = 0; i < 5; i++) -{ - int count = MCC.GetVarAsInt("test") + 1; - MCC.SetVar("test", count); - SendHelloWorld(count, text); - SleepBetweenSends(); -} - -//MCCScript Extensions - -/* Here you can define methods for use into your script */ - -void SendHelloWorld(int count, string text) -{ - MCC.SendText("Hello World no. " + count + ": " + text); -} - -void SleepBetweenSends() -{ - MCC.LogToConsole("Sleeping for 5 seconds..."); - Thread.Sleep(5000); -} diff --git a/MinecraftClient/config/sample-script-packet-capture.cs b/MinecraftClient/config/sample-script-packet-capture.cs deleted file mode 100644 index aa8b15ff23..0000000000 --- a/MinecraftClient/config/sample-script-packet-capture.cs +++ /dev/null @@ -1,178 +0,0 @@ -//MCCScript 1.0 - -MCC.LoadBot(new PacketCadenceCaptureBot()); - -//MCCScript Extensions - -public class PacketCadenceCaptureBot : ChatBot -{ - private const int CaptureDurationSeconds = 5; - private const int CaptureDurationTicks = CaptureDurationSeconds * 20; - - private readonly Lock _countsLock = new(); - private readonly Dictionary _counts = new() - { - { "PlayerMovement", 0 }, - { "PlayerPosition", 0 }, - { "PlayerPositionAndRotation", 0 }, - { "PlayerRotation", 0 } - }; - private readonly Dictionary _rawOutgoingCounts = new(); - - private bool _captureStarted; - private bool _captureSupported; - private bool _networkPacketEventEnabled; - private int _ticksRemaining; - private int _playerMovementPacketId = -1; - private int _playerPositionPacketId = -1; - private int _playerPositionAndRotationPacketId = -1; - private int _playerRotationPacketId = -1; - private string _profileName = "unsupported"; - - public override void AfterGameJoined() - { - int protocolVersion = GetProtocolVersion(); - _captureSupported = TryConfigureProfile(protocolVersion); - - LogToConsole($"Packet cadence profile: {_profileName} (protocol v{protocolVersion})"); - - if (!_captureSupported) - { - LogToConsole("Packet cadence capture does not know the outgoing movement IDs for this protocol."); - UnloadBot(); - return; - } - - SetNetworkPacketEventEnabled(true); - _networkPacketEventEnabled = true; - - _captureStarted = true; - _ticksRemaining = CaptureDurationTicks; - LogToConsole($"Capturing outgoing movement packets for {CaptureDurationSeconds} seconds."); - } - - public override void Update() - { - if (!_captureStarted) - return; - - if (--_ticksRemaining > 0) - return; - - FinishCapture(); - } - - private void FinishCapture() - { - if (!_captureStarted) - return; - - _captureStarted = false; - - int movementCount; - int positionCount; - int positionAndRotationCount; - int rotationCount; - - lock (_countsLock) - { - movementCount = _counts["PlayerMovement"]; - positionCount = _counts["PlayerPosition"]; - positionAndRotationCount = _counts["PlayerPositionAndRotation"]; - rotationCount = _counts["PlayerRotation"]; - } - - int totalPackets = movementCount + positionCount + positionAndRotationCount + rotationCount; - - LogToConsole($"Packet cadence summary ({_profileName}): total={totalPackets}, " + - $"movement={movementCount}, position={positionCount}, " + - $"posrot={positionAndRotationCount}, rotation={rotationCount}"); - - if (totalPackets == 0) - { - string rawSummary; - lock (_countsLock) - { - var entries = new List(); - foreach (var entry in _rawOutgoingCounts.OrderBy(entry => entry.Key)) - entries.Add($"0x{entry.Key:X2}={entry.Value}"); - rawSummary = entries.Count > 0 ? string.Join(", ", entries) : "none"; - } - - LogToConsole($"Packet cadence raw outbound IDs: {rawSummary}"); - } - - UnloadBot(); - } - - public override void OnNetworkPacket(int packetID, List packetData, bool isLogin, bool isInbound) - { - if (!_captureStarted || isLogin || isInbound) - return; - - lock (_countsLock) - { - _rawOutgoingCounts.TryGetValue(packetID, out int rawCount); - _rawOutgoingCounts[packetID] = rawCount + 1; - - if (packetID == _playerMovementPacketId) - _counts["PlayerMovement"]++; - else if (packetID == _playerPositionPacketId) - _counts["PlayerPosition"]++; - else if (packetID == _playerPositionAndRotationPacketId) - _counts["PlayerPositionAndRotation"]++; - else if (packetID == _playerRotationPacketId) - _counts["PlayerRotation"]++; - } - } - - public override void OnUnload() - { - if (!_networkPacketEventEnabled) - return; - - SetNetworkPacketEventEnabled(false); - _networkPacketEventEnabled = false; - } - - private bool TryConfigureProfile(int protocolVersion) - { - switch (protocolVersion) - { - case 47: - _profileName = "1.8/1.8.9"; - _playerMovementPacketId = 0x03; - _playerPositionPacketId = 0x04; - _playerPositionAndRotationPacketId = 0x06; - _playerRotationPacketId = 0x05; - return true; - - case 766: - case 767: - case 768: - case 769: - case 770: - case 771: - case 772: - _profileName = "1.20.6-1.21.8"; - _playerMovementPacketId = 0x1D; - _playerPositionPacketId = 0x1A; - _playerPositionAndRotationPacketId = 0x1B; - _playerRotationPacketId = 0x1C; - return true; - - case 773: - case 774: - case 775: - _profileName = "1.21.9+"; - _playerMovementPacketId = 0x20; - _playerPositionPacketId = 0x1D; - _playerPositionAndRotationPacketId = 0x1E; - _playerRotationPacketId = 0x1F; - return true; - - default: - return false; - } - } -} diff --git a/MinecraftClient/config/sample-script-pm-forwarder.cs b/MinecraftClient/config/sample-script-pm-forwarder.cs deleted file mode 100644 index c131e11cbe..0000000000 --- a/MinecraftClient/config/sample-script-pm-forwarder.cs +++ /dev/null @@ -1,39 +0,0 @@ -//MCCScript 1.0 - -MCC.LoadBot(new PMForwarder()); - -//MCCScript Extensions - -/// -/// This bot can forward received PMs to other players -/// -public class PMForwarder : ChatBot -{ - private const string PMRecipientsFile = "pm-forward-to.txt"; - private string[] pmRecipients; - - public PMForwarder() - { - pmRecipients = LoadDistinctEntriesFromFile(PMRecipientsFile); - if (Settings.Bots_Owners.Count == 0) - LogToConsole("No Bot owners in Settings INI file. Unloading."); - else if (pmRecipients.Length == 0) - LogToConsole("No PM Recipients in '" + PMRecipientsFile + "'. Unloading."); - else LogToConsole(String.Format( - "Forwarding PMs from owners {0} to recipients {1}", - String.Join(", ", Settings.Bots_Owners), String.Join(", ", pmRecipients))); - } - - public override void GetText(string text) - { - text = GetVerbatim(text); - string message = "", sender = ""; - if (IsPrivateMessage(text, ref message, ref sender) && Settings.Bots_Owners.Contains(sender.ToLower().Trim())) - { - LogToConsole("Forwarding PM to " + String.Join(", ", pmRecipients)); - foreach (string recipient in pmRecipients) - SendPrivateMessage(recipient, message); - } - } -} -} diff --git a/MinecraftClient/config/sample-script-random-command.cs b/MinecraftClient/config/sample-script-random-command.cs deleted file mode 100644 index a6cced52ea..0000000000 --- a/MinecraftClient/config/sample-script-random-command.cs +++ /dev/null @@ -1,11 +0,0 @@ -//MCCScript 1.0 - -string[] commands = new[] { - "send command1", - "send command2", - "send command3" -}; - -int randomIndex = new Random().Next(0, commands.Length); -string randomCommand = commands[randomIndex]; -MCC.PerformInternalCommand(randomCommand); diff --git a/MinecraftClient/config/sample-script-tick-counter.cs b/MinecraftClient/config/sample-script-tick-counter.cs deleted file mode 100644 index 29dbb6da3b..0000000000 --- a/MinecraftClient/config/sample-script-tick-counter.cs +++ /dev/null @@ -1,40 +0,0 @@ -//MCCScript 1.0 - -MCC.LoadBot(new TickCounterBot()); - -//MCCScript Extensions - -public class TickCounterBot : ChatBot -{ - private const int CaptureDurationSeconds = 5; - - private DateTime _captureEndsAt = DateTime.MaxValue; - private bool _captureStarted; - private int _updateCount; - - public override void AfterGameJoined() - { - _captureEndsAt = DateTime.UtcNow.AddSeconds(CaptureDurationSeconds); - _captureStarted = true; - _updateCount = 0; - LogToConsole($"Counting MCC update ticks for {CaptureDurationSeconds} seconds."); - } - - public override void Update() - { - if (!_captureStarted) - return; - - _updateCount++; - - if (DateTime.UtcNow < _captureEndsAt) - return; - - _captureStarted = false; - - double ticksPerSecond = _updateCount / (double)CaptureDurationSeconds; - LogToConsole($"Tick counter summary: updates={_updateCount}, seconds={CaptureDurationSeconds}, tps={ticksPerSecond:F2}"); - - UnloadBot(); - } -} diff --git a/MinecraftClient/config/sample-script-with-chatbot.cs b/MinecraftClient/config/sample-script-with-chatbot.cs deleted file mode 100644 index 19a23e9bfc..0000000000 --- a/MinecraftClient/config/sample-script-with-chatbot.cs +++ /dev/null @@ -1,35 +0,0 @@ -//MCCScript 1.0 - -/* This is a sample script that will load a ChatBot into Minecraft Console Client - * Simply execute the script once with /script or the script scheduler to load the bot */ - -MCC.LoadBot(new ExampleBot()); - -//MCCScript Extensions - -/* The ChatBot class must be defined as an extension of the script in the Extensions section - * The class can override common methods from ChatBot.cs, take a look at MCC's source code */ - -public class ExampleBot : ChatBot -{ - public override void Initialize() - { - LogToConsole("Sucessfully Initialized!"); - } - - public override void GetText(string text) - { - string message = ""; - string username = ""; - text = GetVerbatim(text); - - if (IsChatMessage(text, ref message, ref username)) - { - LogToConsole("Public message from " + username + ": " + message); - } - else if (IsPrivateMessage(text, ref message, ref username)) - { - LogToConsole("Private message from " + username + ": " + message); - } - } -} diff --git a/MinecraftClient/config/sample-script-with-http-request.cs b/MinecraftClient/config/sample-script-with-http-request.cs deleted file mode 100644 index 60e6d27d3a..0000000000 --- a/MinecraftClient/config/sample-script-with-http-request.cs +++ /dev/null @@ -1,23 +0,0 @@ -//MCCScript 1.0 - -string mojangStatus = PerformHttpRequest("https://status.mojang.com/check"); -MCC.LogToConsole(mojangStatus); - -//MCCScript Extensions - -private static readonly System.Net.Http.HttpClient s_httpClient = new(); - -string PerformHttpRequest(string uri) -{ - return s_httpClient.GetStringAsync(uri).GetAwaiter().GetResult(); -} - -void SendHttpPostAsync(string uri, string text) -{ - new Thread(() => { - using var content = new System.Net.Http.StringContent(text, System.Text.Encoding.UTF8, "text/plain"); - using var response = s_httpClient.PostAsync(uri, content).GetAwaiter().GetResult(); - string responseString = response.Content.ReadAsStringAsync().GetAwaiter().GetResult(); - //LogToConsole(responseString); - }).Start(); -} diff --git a/MinecraftClient/config/sample-script-with-task.cs b/MinecraftClient/config/sample-script-with-task.cs deleted file mode 100644 index c8a17be745..0000000000 --- a/MinecraftClient/config/sample-script-with-task.cs +++ /dev/null @@ -1,32 +0,0 @@ -//MCCScript 1.0 - -MCC.LoadBot(new PeriodicTask()); - -//MCCScript Extensions - -/// -/// The ChatBot API is not thread-safe so tasks must occur on the main thread. -/// This bot shows an example of running a task periodically without using threads. -/// -public class PeriodicTask : ChatBot -{ - private DateTime nextTaskRun = DateTime.Now; - - /// - /// Called on each MCC tick, around 20 times per second - /// - public override void Update() - { - DateTime dateNow = DateTime.Now; - if (nextTaskRun < dateNow) - { - LogDebugToConsole("Running task @ " + dateNow); - - // Your task here - SendText("/ping"); - - // Schedule next run - nextTaskRun = dateNow.AddSeconds(60); - } - } -} diff --git a/MinecraftClient/config/sample-script-with-world-access.cs b/MinecraftClient/config/sample-script-with-world-access.cs deleted file mode 100644 index 65e0638510..0000000000 --- a/MinecraftClient/config/sample-script-with-world-access.cs +++ /dev/null @@ -1,61 +0,0 @@ -//MCCScript 1.0 - -MCC.LoadBot(new WatchLamp()); - -//MCCScript Extensions - -/* The ChatBot will access the world on a regular basis to watch for a lamp. - * This is an example of how the world around the player can be accessed from a C# script. */ - -class WatchLamp : ChatBot -{ - /* == CONFIG == */ - - int lampX = 0; - int lampY = 64; - int lampZ = 0; - - /* == CODE == */ - - int checkCount = 0; - Location lampLoc; - - public WatchLamp() - { - if (!Settings.TerrainAndMovements) - { - LogToConsole("WARNING: Terrain handling is disabled in INI file."); - LogToConsole("WARNING: This means this bot cannot watch for lamps."); - UnloadBot(); - } - else - { - lampLoc = new Location(lampX, lampY, lampZ); - LogToConsole("Watching lamp at " + lampLoc); - } - } - - public override void Update() - { - if (checkCount > 10) - { - checkCount = 0; - Material blockType = GetWorld().GetBlock(lampLoc).Type; - switch (blockType) - { - case Material.RedstoneLampOn: - //Lamp is on. All right. Nothing to say here. - break; - case Material.RedstoneLampOff: - LogToConsole("Lamp at " + lampLoc + " is currently turned OFF !!!"); - for (int i = 0; i < 3; i++) - Console.Beep(); - break; - default: - LogToConsole("Block at " + lampLoc + " is not a lamp: " + blockType + "..."); - break; - } - } - else checkCount++; - } -} diff --git a/MinecraftClient/config/sample-script.cs b/MinecraftClient/config/sample-script.cs deleted file mode 100644 index 9884986f14..0000000000 --- a/MinecraftClient/config/sample-script.cs +++ /dev/null @@ -1,14 +0,0 @@ -//MCCScript 1.0 - -/* This is a sample script for Minecraft Console Client - * The code provided in this file will be compiled at runtime and executed - * Allowed instructions: Any C# code AND methods provided by the MCC API */ - -for (int i = 0; i < 5; i++) -{ - int count = MCC.GetVarAsInt("test") + 1; - MCC.SetVar("test", count); - MCC.SendText("Hello World no. " + count); - MCC.LogToConsole("Sleeping for 5 seconds..."); - Thread.Sleep(5000); -} diff --git a/MinecraftClient/config/sample-script.txt b/MinecraftClient/config/sample-script.txt deleted file mode 100644 index b03611cb0f..0000000000 --- a/MinecraftClient/config/sample-script.txt +++ /dev/null @@ -1,8 +0,0 @@ -# This is a sample script for Minecraft Console Client -# Any line beginning with "#" is ignored and treated as a comment. -# Allowed instructions: see README file for an updated list of instructions. - -send Hello World! I'm a bot scripted using Minecraft Console Client. -wait 60 -send Now quitting. Bye :) -exit \ No newline at end of file diff --git a/MinecraftClientGUI.sln b/MinecraftClientGUI.sln deleted file mode 100644 index 9a2d7184f7..0000000000 --- a/MinecraftClientGUI.sln +++ /dev/null @@ -1,20 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 11.00 -# Visual Studio 2010 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "MinecraftClientGUI", "MinecraftClientGUI\MinecraftClientGUI.csproj", "{B9E600B3-C8F0-4BF8-85E1-C164956B0B0D}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|x86 = Debug|x86 - Release|x86 = Release|x86 - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B9E600B3-C8F0-4BF8-85E1-C164956B0B0D}.Debug|x86.ActiveCfg = Debug|x86 - {B9E600B3-C8F0-4BF8-85E1-C164956B0B0D}.Debug|x86.Build.0 = Debug|x86 - {B9E600B3-C8F0-4BF8-85E1-C164956B0B0D}.Release|x86.ActiveCfg = Release|x86 - {B9E600B3-C8F0-4BF8-85E1-C164956B0B0D}.Release|x86.Build.0 = Release|x86 - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/MinecraftClientGUI/AppIcon.ico b/MinecraftClientGUI/AppIcon.ico deleted file mode 100644 index c0821195f932d34dfeb713bd0a5b539b66dbd20f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 370070 zcmeEP2Ygjk(#O@6-VxNbuN6f_-F2<&`mOG+4G2l-0#d{-ibxd{+se8YRuQS`9g@(S zbW{|PCe4D4p5(O@TIQSoxo_S(@8;f@_mWW5o8NCTr_Px(bLRAWUaeZE)H=OZlP0zJ z?}AzbPODX`KU^0W{&Wuig2S%8*6+WhR;|Hj)T(vI9ftq%J8RWC@0MD%MvwOU>zq>S z?vZfg?}A#FUvOHjCto?G*5&L&5f?C=qW-g^4nqz9&3LTs|E+wz%f$I3?w&M%*xwW^ z7gptEJm7P{`b>uArOJ+xrK0=n|bD=W}AeE2YJ;{1ER-%esKI z%8z)+>CmA=%>M^_3wM22jx^tY|2=*E_1Cm*+cpKrtAm7p^UXK(!w)~G@;1(Ve_!E` zJIcL<`zQno_LBR+9&+v9tpIKhhZ$*r_mYS6tj~VqaKVxZ<=**kkZ=CK3D|(3+vg9H zc=#2}`!}tB^&TqB9#rm|JA#TAFf1~lWHI9<3?CU#!WdADaHLr{f_!s_(S}$5we`!f z56oZo-1W&T2enOE?uS*+-H`I>kegE048JAiQvkaWCh;qW{5fUisQ*izIiU5Qt830g z+?SkE1uC2edC|{Yz;Fjcpr1j2^H)Iv-@VnVN!|msT7^P=_FF&~4hsiXc>-ZZ8J~~3 zqlGY$^>FJa7QGTz{$<8%v?1qB`Xc#7S~G1ptw{)l&l5+`+N2jael)F1d6CwozC`QN z`~WwHAr5IiPZ(*?m^Q2eozId+(Z>@9(fk+N{hZGI{F47XxYzA*lTY>2MjxR1OY{c< zi1YUkUavom#D&9>kJCs$1Uf#Sms~{!G;icRA8lWpbQI-bT)_B&{s(}5%naxoBZb3< zkA&n0&4ULIs_{(qbv(8$dO2p}*DG_%Q9k-Hy)VYNS6p1I(!(7b2aRz~AM?y^NiP_5 zr2fDdTi^f zGS{zPuf}(CdfmT#`EqL9xG`OD!3DHz*)qcT2pBqaDED}^==}4~r=NfRIc)i;yOh81 z}(?b@}~SS)i1ln=fzR_Z*P-6$XJTJ#V3 zgZ{d8>q5%c^C2F7l;5mbGgUsyGsA@!UPu^+^}J@c*j7OQTK&-mq^^SX{Hs>2qJ|9{ zRw!5afc*7#q30EMX!($TQlS2ol@I$IJ$f{~@WKmp&N=4<_&E36b15Mqfs&JxE47P? z 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 Ne_k0&>y~oB{eL^m53>LO diff --git a/MinecraftClientGUI/Form1.Designer.cs b/MinecraftClientGUI/Form1.Designer.cs deleted file mode 100644 index e31ea78b5d..0000000000 --- a/MinecraftClientGUI/Form1.Designer.cs +++ /dev/null @@ -1,47 +0,0 @@ -namespace MinecraftClientGUI -{ - partial class Form1 - { - /// - /// Required designer variable. - /// - private System.ComponentModel.IContainer components = null; - - /// - /// Clean up any resources being used. - /// - /// true if managed resources should be disposed; otherwise, false. - protected override void Dispose(bool disposing) - { - if (disposing && (components != null)) - { - components.Dispose(); - } - base.Dispose(disposing); - } - - #region Windows Form Designer generated code - - /// - /// Required method for Designer support - do not modify - /// the contents of this method with the code editor. - /// - private void InitializeComponent() - { - this.components = new System.ComponentModel.Container(); - this.SuspendLayout(); - // - // Form1 - // - this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); - this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; - this.ClientSize = new System.Drawing.Size(1100, 700); - this.Name = "Form1"; - this.Text = "MCC Multibox Commander"; - this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; - this.ResumeLayout(false); - } - - #endregion - } -} diff --git a/MinecraftClientGUI/Form1.cs b/MinecraftClientGUI/Form1.cs deleted file mode 100644 index 6069898204..0000000000 --- a/MinecraftClientGUI/Form1.cs +++ /dev/null @@ -1,794 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Diagnostics; -using System.Drawing; -using System.IO; -using System.Linq; -using System.Runtime.InteropServices; -using System.Threading; -using System.Windows.Forms; - -namespace MinecraftClientGUI -{ - static class Theme - { - public static Color BgDark = Color.FromArgb(15, 15, 18); - public static Color BgPanel = Color.FromArgb(22, 22, 28); - public static Color BgHeader = Color.FromArgb(28, 28, 36); - public static Color BgCard = Color.FromArgb(32, 32, 42); - public static Color BgInput = Color.FromArgb(20, 20, 26); - public static Color TabActive = Color.FromArgb(38, 38, 52); - public static Color TabInactive = Color.FromArgb(22, 22, 28); - public static Color Accent = Color.FromArgb(82, 130, 255); - public static Color AccentHover = Color.FromArgb(110, 155, 255); - public static Color AccentRed = Color.FromArgb(220, 70, 70); - public static Color AccentGreen = Color.FromArgb(60, 200, 100); - public static Color Text = Color.FromArgb(220, 220, 230); - public static Color TextDim = Color.FromArgb(120, 120, 140); - public static Color TextMuted = Color.FromArgb(70, 70, 90); - public static Color Border = Color.FromArgb(40, 40, 55); - } - - class DarkComboBox : ComboBox - { - public DarkComboBox() - { - DrawMode = DrawMode.OwnerDrawFixed; - FlatStyle = FlatStyle.Flat; - BackColor = Theme.BgInput; - ForeColor = Theme.Text; - Font = new Font("Segoe UI", 9f); - } - protected override void OnDrawItem(DrawItemEventArgs e) - { - if (e.Index < 0) return; - e.Graphics.FillRectangle( - new SolidBrush((e.State & DrawItemState.Selected) != 0 ? Theme.TabActive : Theme.BgInput), - e.Bounds); - TextRenderer.DrawText(e.Graphics, Items[e.Index].ToString(), Font, e.Bounds, - Theme.Text, TextFormatFlags.VerticalCenter | TextFormatFlags.Left); - } - } - - class FlatBtn : Button - { - private Color _back, _hover; - public FlatBtn(string text, Color back, Color? hover = null) - { - Text = text; - _back = back; - _hover = hover ?? ControlPaint.Light(back, 0.2f); - FlatStyle = FlatStyle.Flat; - FlatAppearance.BorderSize = 0; - BackColor = _back; - ForeColor = Theme.Text; - Font = new Font("Segoe UI", 9f, FontStyle.Bold); - Cursor = Cursors.Hand; - MouseEnter += (s, e) => BackColor = _hover; - MouseLeave += (s, e) => BackColor = _back; - } - } - - public partial class Form1 : Form - { - private const string SettingsFile = "settings_v3.txt"; - private const string MacrosFile = "macros.txt"; - private static readonly string[] DefaultSettingsContent = new[] { "", "", "" }; - private static readonly string[] DefaultMacrosContent = new[] - { - "Creative|/gamemode creative|Gold", - "Survival|/gamemode survival|Gray", - "Hello|Hello everyone!|Green", - "Login|/login password123|Purple", - "Spawn|/spawn|Blue" - }; - private string currentLang = "en"; - - private Panel tabBar, contentArea, topPanel, bottomPanel, rightPanel; - private Label lblLogin, lblPass, lblIP, lblActive; - private DarkComboBox cmbLogin, cmbIP; - private TextBox txtPassword; - private FlatBtn btnAddBot; - private TextBox boxGlobalInput; - private FlatBtn btnGlobalSend; - private CheckBox chkSendToAll; - private Label lblMacrosTitle; - private FlowLayoutPanel macroPanel; - private FlatBtn btnEditMacros, btnRefreshMacros, btnLangSwitch; - - private List historyLogins = new List(); - private List historyIPs = new List(); - private List tabs = new List(); - private ConsoleTab activeTab = null; - - public Form1(string[] args) - { - InitializeComponent(); - BuildUI(); - EnsureRuntimeFiles(); - LoadSettings(); - LoadMacros(); - UpdateLanguage(); - if (args.Length > 0) AddNewTab("Auto-Bot", args); - this.FormClosing += (s, e) => { foreach (var t in tabs.ToList()) t.CloseTab(); }; - } - - private static void EnsureRuntimeFiles() - { - EnsureFileExists(SettingsFile, DefaultSettingsContent); - EnsureFileExists(MacrosFile, DefaultMacrosContent); - } - - private static void EnsureFileExists(string path, string[] defaultContent) - { - if (!File.Exists(path)) - { - File.WriteAllLines(path, defaultContent); - } - } - - private void BuildUI() - { - this.Text = "MCC Multibox Commander"; - this.Size = new Size(1200, 780); - this.MinimumSize = new Size(900, 600); - this.BackColor = Theme.BgDark; - this.ForeColor = Theme.Text; - this.Font = new Font("Segoe UI", 9f); - this.StartPosition = FormStartPosition.CenterScreen; - - // TOP PANEL - topPanel = new Panel { Dock = DockStyle.Top, Height = 60, BackColor = Theme.BgHeader, Padding = new Padding(12, 0, 12, 0) }; - topPanel.Paint += PaintBottomBorder; - this.Controls.Add(topPanel); - - int y = 17; - lblLogin = MkLabel("Username / Email:", 10, 2); topPanel.Controls.Add(lblLogin); - cmbLogin = new DarkComboBox { Location = new Point(10, y), Size = new Size(195, 26) }; topPanel.Controls.Add(cmbLogin); - - lblPass = MkLabel("Password:", 215, 2); topPanel.Controls.Add(lblPass); - txtPassword = new TextBox { Location = new Point(215, y), Size = new Size(155, 26), BackColor = Theme.BgInput, ForeColor = Theme.Text, BorderStyle = BorderStyle.FixedSingle, UseSystemPasswordChar = true, Font = new Font("Segoe UI", 9f) }; - topPanel.Controls.Add(txtPassword); - - lblIP = MkLabel("Server IP:", 380, 2); topPanel.Controls.Add(lblIP); - cmbIP = new DarkComboBox { Location = new Point(380, y), Size = new Size(215, 26) }; topPanel.Controls.Add(cmbIP); - - btnAddBot = new FlatBtn("+ Add Account", Theme.Accent, Theme.AccentHover) { Location = new Point(608, y - 1), Size = new Size(148, 28) }; - btnAddBot.Click += BtnAddBot_Click; - topPanel.Controls.Add(btnAddBot); - - lblActive = new Label { Location = new Point(770, y), AutoSize = true, ForeColor = Theme.AccentGreen, Font = new Font("Segoe UI", 9f, FontStyle.Bold) }; - topPanel.Controls.Add(lblActive); - - var timer = new System.Windows.Forms.Timer { Interval = 1000 }; - timer.Tick += (s, e) => lblActive.Text = (currentLang == "en" ? "Active accounts: " : "Aktywne konta: ") + tabs.Count; - timer.Start(); - - // RIGHT PANEL - rightPanel = new Panel { Dock = DockStyle.Right, Width = 185, BackColor = Theme.BgPanel }; - rightPanel.Paint += PaintLeftBorder; - this.Controls.Add(rightPanel); - - // Language toggle - large button at the top - btnLangSwitch = new FlatBtn("PL", Color.FromArgb(45, 75, 145), Color.FromArgb(60, 100, 185)) - { - Dock = DockStyle.Top, - Height = 36, - Font = new Font("Segoe UI", 11f, FontStyle.Bold), - ForeColor = Color.White - }; - btnLangSwitch.Click += (s, e) => { currentLang = currentLang == "en" ? "pl" : "en"; UpdateLanguage(); }; - rightPanel.Controls.Add(btnLangSwitch); - - // Macro header - var macroHeader = new Panel { Dock = DockStyle.Top, Height = 52, BackColor = Theme.BgPanel }; - macroHeader.Paint += PaintBottomBorder; - rightPanel.Controls.Add(macroHeader); - - lblMacrosTitle = new Label { Text = "Quick Actions", Location = new Point(8, 8), Size = new Size(169, 18), ForeColor = Theme.Text, Font = new Font("Segoe UI", 9f, FontStyle.Bold) }; - macroHeader.Controls.Add(lblMacrosTitle); - - btnEditMacros = new FlatBtn("Edit", Color.FromArgb(40, 40, 58)) { Location = new Point(8, 28), Size = new Size(76, 20), Font = new Font("Segoe UI", 8f, FontStyle.Bold) }; - btnEditMacros.Click += BtnEditMacros_Click; - macroHeader.Controls.Add(btnEditMacros); - - btnRefreshMacros = new FlatBtn("Reload", Color.FromArgb(40, 40, 58)) { Location = new Point(90, 28), Size = new Size(76, 20), Font = new Font("Segoe UI", 8f, FontStyle.Bold) }; - btnRefreshMacros.Click += (s, e) => LoadMacros(); - macroHeader.Controls.Add(btnRefreshMacros); - - macroPanel = new FlowLayoutPanel { Dock = DockStyle.Fill, FlowDirection = FlowDirection.TopDown, WrapContents = false, AutoScroll = true, BackColor = Theme.BgPanel, Padding = new Padding(8, 8, 0, 8) }; - rightPanel.Controls.Add(macroPanel); - - rightPanel.Controls.SetChildIndex(macroPanel, 0); - rightPanel.Controls.SetChildIndex(macroHeader, 1); - rightPanel.Controls.SetChildIndex(btnLangSwitch, 2); - - // BOTTOM PANEL - bottomPanel = new Panel { Dock = DockStyle.Bottom, Height = 40, BackColor = Theme.BgHeader, Padding = new Padding(6, 6, 6, 0) }; - bottomPanel.Paint += PaintTopBorder; - this.Controls.Add(bottomPanel); - - btnGlobalSend = new FlatBtn("Send", Color.FromArgb(50, 90, 160), Theme.Accent) { Dock = DockStyle.Right, Width = 80 }; - btnGlobalSend.Click += BtnGlobalSend_Click; - bottomPanel.Controls.Add(btnGlobalSend); - - chkSendToAll = new CheckBox { Text = "Send to all", Dock = DockStyle.Right, Width = 120, ForeColor = Color.FromArgb(255, 160, 90), Padding = new Padding(8, 0, 0, 0), Font = new Font("Segoe UI", 9f, FontStyle.Bold) }; - bottomPanel.Controls.Add(chkSendToAll); - - boxGlobalInput = new TextBox { Dock = DockStyle.Fill, BackColor = Theme.BgInput, ForeColor = Theme.Text, BorderStyle = BorderStyle.FixedSingle, Font = new Font("Consolas", 11f) }; - boxGlobalInput.KeyDown += (s, e) => { if (e.KeyCode == Keys.Enter) { BtnGlobalSend_Click(s, e); e.SuppressKeyPress = true; } }; - bottomPanel.Controls.Add(boxGlobalInput); - - // TAB BAR - tabBar = new Panel { Dock = DockStyle.Top, Height = 38, BackColor = Theme.BgPanel }; - tabBar.Paint += PaintBottomBorder; - this.Controls.Add(tabBar); - - // CONTENT AREA - contentArea = new Panel { Dock = DockStyle.Fill, BackColor = Theme.BgDark }; - this.Controls.Add(contentArea); - - this.Controls.SetChildIndex(contentArea, 0); - this.Controls.SetChildIndex(tabBar, 1); - this.Controls.SetChildIndex(bottomPanel, 2); - this.Controls.SetChildIndex(rightPanel, 3); - this.Controls.SetChildIndex(topPanel, 4); - } - - private void AddNewTab(string title, string[] args) - { - var tab = new ConsoleTab(title, args, currentLang) { Dock = DockStyle.Fill }; - tabs.Add(tab); - contentArea.Controls.Add(tab); - RebuildTabBar(); - ActivateTab(tab); - } - - private void ActivateTab(ConsoleTab tab) - { - activeTab = tab; - foreach (Control c in contentArea.Controls) c.Visible = (c == tab); - RebuildTabBar(); - } - - private void RebuildTabBar() - { - tabBar.Controls.Clear(); - int x = 4; - foreach (var tab in tabs) - { - var t = tab; - bool active = (t == activeTab); - - var btn = new Panel { Location = new Point(x, active ? 2 : 5), Size = new Size(148, active ? 32 : 27), BackColor = active ? Theme.TabActive : Theme.TabInactive, Cursor = Cursors.Hand }; - btn.Paint += (s, e) => { - if (t == activeTab) - e.Graphics.FillRectangle(new SolidBrush(Theme.Accent), 0, btn.Height - 2, btn.Width, 2); - }; - - var lbl = new Label - { - Text = t.TabTitle, - Location = new Point(8, 0), - Size = new Size(108, 30), - ForeColor = active ? Theme.Text : Theme.TextDim, - Font = new Font("Segoe UI", 9f, active ? FontStyle.Bold : FontStyle.Regular), - TextAlign = ContentAlignment.MiddleLeft, - Cursor = Cursors.Hand - }; - lbl.Click += (s, e) => ActivateTab(t); - btn.Click += (s, e) => ActivateTab(t); - btn.Controls.Add(lbl); - - var btnX = new Label - { - Text = "x", - Location = new Point(120, 0), - Size = new Size(25, 30), - ForeColor = Theme.TextMuted, - Font = new Font("Segoe UI", 9f), - TextAlign = ContentAlignment.MiddleCenter, - Cursor = Cursors.Hand - }; - btnX.MouseEnter += (s, e) => btnX.ForeColor = Theme.AccentRed; - btnX.MouseLeave += (s, e) => btnX.ForeColor = Theme.TextMuted; - btnX.Click += (s, e) => { - t.CloseTab(); - tabs.Remove(t); - contentArea.Controls.Remove(t); - if (activeTab == t) { activeTab = tabs.LastOrDefault(); if (activeTab != null) ActivateTab(activeTab); } - RebuildTabBar(); - }; - btn.Controls.Add(btnX); - tabBar.Controls.Add(btn); - x += 152; - } - } - - private void UpdateLanguage() - { - bool en = currentLang == "en"; - btnLangSwitch.Text = en ? "Switch to PL" : "Switch to EN"; - lblLogin.Text = en ? "Username / Email:" : "Login / Email:"; - lblPass.Text = en ? "Password:" : "Haslo:"; - lblIP.Text = en ? "Server IP:" : "IP Serwera:"; - btnAddBot.Text = en ? "+ Add Account" : "+ Dodaj Konto"; - lblMacrosTitle.Text = en ? "Quick Actions" : "Szybkie Akcje"; - btnEditMacros.Text = en ? "Edit" : "Edytuj"; - btnRefreshMacros.Text = en ? "Reload" : "Odswiez"; - btnGlobalSend.Text = en ? "Send" : "Wyslij"; - chkSendToAll.Text = en ? "Send to all" : "Wyslij do wszystkich"; - foreach (var tab in tabs) tab.UpdateLang(currentLang); - } - - private void BtnEditMacros_Click(object sender, EventArgs e) - { - EnsureFileExists(MacrosFile, DefaultMacrosContent); - Process.Start("notepad.exe", MacrosFile); - } - - private void LoadMacros() - { - macroPanel.Controls.Clear(); - if (!File.Exists(MacrosFile)) return; - try - { - foreach (var line in File.ReadAllLines(MacrosFile)) - { - if (string.IsNullOrWhiteSpace(line)) continue; - var parts = line.Split('|'); - if (parts.Length >= 2) - { - Color c = parts.Length > 2 ? Color.FromName(parts[2]) : Theme.Accent; - if (c.IsEmpty) c = Theme.Accent; - AddMacroBtn(parts[1], parts[0], c); - } - } - } - catch (Exception ex) { MessageBox.Show("Error loading macros: " + ex.Message); } - } - - private void AddMacroBtn(string cmd, string label, Color color) - { - Color bg = Color.FromArgb(32, 32, 48); - Color hov = Color.FromArgb(44, 44, 64); - var btn = new Button - { - Text = " " + label, - Width = macroPanel.Width - 22, - Height = 34, - FlatStyle = FlatStyle.Flat, - BackColor = bg, - ForeColor = Theme.Text, - Font = new Font("Segoe UI", 9f, FontStyle.Bold), - Cursor = Cursors.Hand, - Margin = new Padding(0, 0, 0, 4), - TextAlign = ContentAlignment.MiddleLeft, - Tag = color - }; - btn.FlatAppearance.BorderSize = 0; - btn.MouseEnter += (s, e) => btn.BackColor = hov; - btn.MouseLeave += (s, e) => btn.BackColor = bg; - btn.Paint += (s, e) => e.Graphics.FillRectangle(new SolidBrush(color), 0, 0, 4, btn.Height); - btn.Click += (s, e) => { - if (chkSendToAll.Checked) foreach (var tab in tabs) tab.Send(cmd); - else activeTab?.Send(cmd); - }; - macroPanel.Controls.Add(btn); - } - - private void BtnAddBot_Click(object sender, EventArgs e) - { - string user = cmbLogin.Text.Trim(), pass = txtPassword.Text.Trim(), ip = cmbIP.Text.Trim(); - if (string.IsNullOrEmpty(user) || string.IsNullOrEmpty(ip)) - { - MessageBox.Show(currentLang == "en" ? "Please enter username and IP!" : "Podaj login i IP serwera!", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning); - return; - } - SaveSettings(user, ip); - string tabTitle = user.Contains("@") ? user.Split('@')[0] : user; - AddNewTab(tabTitle, new[] { user, pass, ip }); - } - - private void BtnGlobalSend_Click(object sender, EventArgs e) - { - string cmd = boxGlobalInput.Text.Trim(); - if (string.IsNullOrEmpty(cmd)) return; - if (chkSendToAll.Checked) foreach (var tab in tabs) tab.Send(cmd); - else activeTab?.Send(cmd); - boxGlobalInput.Clear(); - } - - private void LoadSettings() - { - try - { - if (!File.Exists(SettingsFile)) return; - var lines = File.ReadAllLines(SettingsFile).ToList(); - while (lines.Count < 3) - { - lines.Add(string.Empty); - } - if (lines.Count > 0) txtPassword.Text = lines[0]; - if (lines.Count > 1) { historyLogins = lines[1].Split('|').ToList(); cmbLogin.Items.AddRange(historyLogins.ToArray()); if (cmbLogin.Items.Count > 0) cmbLogin.SelectedIndex = 0; } - if (lines.Count > 2) { historyIPs = lines[2].Split('|').ToList(); cmbIP.Items.AddRange(historyIPs.ToArray()); if (cmbIP.Items.Count > 0) cmbIP.SelectedIndex = 0; } - } - catch { } - } - - private void SaveSettings(string user, string ip) - { - historyLogins.Remove(user); historyLogins.Insert(0, user); if (historyLogins.Count > 10) historyLogins.RemoveAt(10); - historyIPs.Remove(ip); historyIPs.Insert(0, ip); if (historyIPs.Count > 10) historyIPs.RemoveAt(10); - cmbLogin.Items.Clear(); cmbLogin.Items.AddRange(historyLogins.ToArray()); cmbLogin.Text = user; - cmbIP.Items.Clear(); cmbIP.Items.AddRange(historyIPs.ToArray()); cmbIP.Text = ip; - try { File.WriteAllLines(SettingsFile, new[] { txtPassword.Text, string.Join("|", historyLogins), string.Join("|", historyIPs) }); } catch { } - } - - private void PaintBottomBorder(object sender, PaintEventArgs e) { var c = (Control)sender; e.Graphics.DrawLine(new Pen(Theme.Border), 0, c.Height - 1, c.Width, c.Height - 1); } - private void PaintTopBorder(object sender, PaintEventArgs e) { var c = (Control)sender; e.Graphics.DrawLine(new Pen(Theme.Border), 0, 0, c.Width, 0); } - private void PaintLeftBorder(object sender, PaintEventArgs e) { var c = (Control)sender; e.Graphics.DrawLine(new Pen(Theme.Border), 0, 0, 0, c.Height); } - private Label MkLabel(string text, int x, int y) => new Label { Text = text, Location = new Point(x, y), AutoSize = true, ForeColor = Theme.TextDim, Font = new Font("Segoe UI", 8f) }; - } - - // ===================================================== - // LINE TYPES (for filtering) - // ===================================================== - enum LineType { Chat, System, Error } - - struct LogLine - { - public string Raw; - public string Display; - public LineType Type; - public DateTime Time; - } - - public class ConsoleTab : Panel - { - private MinecraftClient Client; - private Thread t_read; - private RichTextBox boxOutput; - private Button btnDisconnect; - private Label lblStatus; - private Label lblTimer; - private CheckBox chkAutoScroll; - private bool autoScroll = true; - - private Button btnFilterAll, btnFilterChat, btnFilterSystem, btnFilterError; - private LineType? activeFilter = null; - - private List allLines = new List(); - private object logLock = new object(); - - private StreamWriter logWriter; - private DateTime connectedAt; - private System.Windows.Forms.Timer timerClock; - private bool isConnected = false; - - public string TabTitle { get; set; } - - [DllImport("user32.dll")] public static extern IntPtr SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam); - [DllImport("uxtheme.dll", ExactSpelling = true, CharSet = CharSet.Unicode)] - private static extern int SetWindowTheme(IntPtr hwnd, string pszSubAppName, string pszSubIdList); - private const int WM_VSCROLL = 0x115, SB_BOTTOM = 7; - - public ConsoleTab(string title, string[] args, string lang) - { - this.TabTitle = title; - this.BackColor = Theme.BgDark; - - InitLogFile(title); - - // Top bar - var topBar = new Panel { Dock = DockStyle.Top, Height = 36, BackColor = Theme.BgCard }; - topBar.Paint += (s, e) => e.Graphics.DrawLine(new Pen(Theme.Border), 0, topBar.Height - 1, topBar.Width, topBar.Height - 1); - - btnDisconnect = new Button - { - Text = lang == "en" ? "Disconnect" : "Rozlacz", - Dock = DockStyle.Right, - Width = 105, - FlatStyle = FlatStyle.Flat, - BackColor = Color.FromArgb(160, 45, 45), - ForeColor = Color.White, - Font = new Font("Segoe UI", 9f, FontStyle.Bold), - Cursor = Cursors.Hand - }; - btnDisconnect.FlatAppearance.BorderSize = 0; - btnDisconnect.Click += (s, e) => CloseTab(); - topBar.Controls.Add(btnDisconnect); - - chkAutoScroll = new CheckBox - { - Text = "Auto-scroll", - Dock = DockStyle.Right, - Width = 95, - ForeColor = Theme.TextDim, - Font = new Font("Segoe UI", 8f), - Checked = true, - Padding = new Padding(0, 0, 12, 0) - }; - chkAutoScroll.CheckedChanged += (s, e) => autoScroll = chkAutoScroll.Checked; - topBar.Controls.Add(chkAutoScroll); - - lblTimer = new Label - { - Text = "00:00:00", - Dock = DockStyle.Right, - Width = 70, - ForeColor = Theme.TextDim, - Font = new Font("Consolas", 8f), - TextAlign = ContentAlignment.MiddleCenter - }; - topBar.Controls.Add(lblTimer); - - lblStatus = new Label - { - Text = " ● " + title, - Dock = DockStyle.Fill, - ForeColor = Theme.TextMuted, - Font = new Font("Segoe UI", 9f, FontStyle.Bold), - TextAlign = ContentAlignment.MiddleLeft - }; - topBar.Controls.Add(lblStatus); - this.Controls.Add(topBar); - - // Filter bar - var filterBar = new Panel { Dock = DockStyle.Top, Height = 30, BackColor = Theme.BgPanel }; - filterBar.Paint += (s, e) => e.Graphics.DrawLine(new Pen(Theme.Border), 0, filterBar.Height - 1, filterBar.Width, filterBar.Height - 1); - - btnFilterAll = MakeFilterBtn("All", null, filterBar, 4); - btnFilterChat = MakeFilterBtn("Chat", LineType.Chat, filterBar, 54); - btnFilterSystem = MakeFilterBtn("System", LineType.System, filterBar, 118); - btnFilterError = MakeFilterBtn("Errors", LineType.Error, filterBar, 192); - SetFilterActive(btnFilterAll); - this.Controls.Add(filterBar); - - // Console - boxOutput = new RichTextBox - { - Dock = DockStyle.Fill, - BackColor = Theme.BgDark, - ForeColor = Color.FromArgb(200, 200, 215), - Font = new Font("Consolas", 10f), - BorderStyle = BorderStyle.None, - ReadOnly = true, - ScrollBars = RichTextBoxScrollBars.Vertical - }; - var ctx = new ContextMenuStrip { BackColor = Theme.BgCard, ForeColor = Theme.Text }; - ctx.Items.Add("Disconnect / Close", null, (s, e) => CloseTab()); - ctx.Items.Add("Clear Console", null, (s, e) => { boxOutput.Clear(); lock (logLock) allLines.Clear(); }); - boxOutput.ContextMenuStrip = ctx; - this.Controls.Add(boxOutput); - - try { SetWindowTheme(boxOutput.Handle, "DarkMode_Explorer", null); } catch { } - - timerClock = new System.Windows.Forms.Timer { Interval = 1000 }; - timerClock.Tick += (s, e) => { - if (isConnected && !lblTimer.IsDisposed) - { - var elapsed = DateTime.Now - connectedAt; - lblTimer.Text = elapsed.ToString(@"hh\:mm\:ss"); - } - }; - timerClock.Start(); - - PrintSystem("Initializing...", LineType.System); - if (args.Length == 3) new Thread(() => InitClient(new MinecraftClient(args[0], args[1], args[2]))).Start(); - else new Thread(() => InitClient(new MinecraftClient(args))).Start(); - } - - private void InitLogFile(string title) - { - try - { - string dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "logs"); - Directory.CreateDirectory(dir); - string safeName = string.Concat(title.Split(Path.GetInvalidFileNameChars())); - string date = DateTime.Now.ToString("yyyy-MM-dd_HH-mm"); - string path = Path.Combine(dir, safeName + "_" + date + ".txt"); - logWriter = new StreamWriter(path, append: true, encoding: System.Text.Encoding.UTF8) { AutoFlush = true }; - logWriter.WriteLine("=== Session started: " + DateTime.Now + " | Account: " + title + " ==="); - } - catch { } - } - - private void WriteLog(string text, LineType type) - { - try { logWriter?.WriteLine("[" + DateTime.Now.ToString("HH:mm:ss") + "][" + type + "] " + text); } catch { } - } - - private Button MakeFilterBtn(string label, LineType? type, Panel parent, int x) - { - int w = label == "All" ? 44 : label == "System" ? 68 : 58; - var btn = new Button - { - Text = label, - Location = new Point(x, 4), - Size = new Size(w, 22), - FlatStyle = FlatStyle.Flat, - BackColor = Theme.BgCard, - ForeColor = Theme.TextDim, - Font = new Font("Segoe UI", 8f, FontStyle.Bold), - Cursor = Cursors.Hand - }; - btn.FlatAppearance.BorderSize = 1; - btn.FlatAppearance.BorderColor = Theme.Border; - btn.Click += (s, e) => { activeFilter = type; SetFilterActive(btn); RedrawFiltered(); }; - parent.Controls.Add(btn); - return btn; - } - - private void SetFilterActive(Button active) - { - foreach (var b in new[] { btnFilterAll, btnFilterChat, btnFilterSystem, btnFilterError }) - { - if (b == null) continue; - b.BackColor = b == active ? Theme.Accent : Theme.BgCard; - b.ForeColor = b == active ? Color.White : Theme.TextDim; - } - } - - private void RedrawFiltered() - { - InvokeUI(() => { - boxOutput.Clear(); - List snapshot; - lock (logLock) snapshot = new List(allLines); - foreach (var line in snapshot) - if (activeFilter == null || line.Type == activeFilter) - RenderLine(line); - if (autoScroll) SendMessage(boxOutput.Handle, WM_VSCROLL, (IntPtr)SB_BOTTOM, IntPtr.Zero); - }); - } - - private void RenderLine(LogLine line) - { - if (line.Type == LineType.System || line.Type == LineType.Error) - { - boxOutput.SelectionColor = line.Type == LineType.Error ? Color.FromArgb(220, 80, 80) : Color.FromArgb(85, 85, 105); - boxOutput.AppendText(line.Display + "\n"); - } - else - { - string[] subs = line.Raw.Split('\u00a7'); - boxOutput.SelectionColor = Color.FromArgb(200, 200, 215); - if (subs.Length > 0) boxOutput.AppendText(subs[0]); - for (int i = 1; i < subs.Length; i++) - { - if (subs[i].Length > 1) - { - boxOutput.SelectionColor = GetColor(subs[i][0]); - boxOutput.SelectionFont = GetFont(subs[i][0], boxOutput.Font); - boxOutput.AppendText(subs[i].Substring(1)); - } - } - boxOutput.AppendText("\n"); - } - } - - public void UpdateLang(string lang) { if (btnDisconnect != null) btnDisconnect.Text = lang == "en" ? "Disconnect" : "Rozlacz"; } - - private void InitClient(MinecraftClient client) - { - Client = client; - t_read = new Thread(ReadLoop) { IsBackground = true }; - t_read.Start(); - connectedAt = DateTime.Now; - isConnected = true; - InvokeUI(() => { - lblStatus.Text = " ● " + TabTitle; - lblStatus.ForeColor = Color.FromArgb(100, 210, 130); - PrintSystem("Connected.", LineType.System); - }); - } - - private void ReadLoop() - { - try - { - while (Client != null && !Client.Disconnected) - { - string line = Client.ReadLine(); - if (!string.IsNullOrEmpty(line)) PrintChat(line); - } - } - catch (ThreadAbortException) - { - } - catch (Exception ex) { InvokeUI(() => PrintSystem("Error: " + ex.Message, LineType.Error)); } - finally - { - isConnected = false; - InvokeUI(() => { - PrintSystem("Disconnected.", LineType.Error); - if (lblStatus != null) { lblStatus.Text = " ● " + TabTitle; lblStatus.ForeColor = Color.FromArgb(220, 80, 80); } - }); - } - } - - public void Send(string text) - { - if (Client != null && !Client.Disconnected) - { - Client.SendText(text); - InvokeUI(() => PrintSystem("> " + text, LineType.System, Color.FromArgb(100, 180, 255))); - } - } - - public void CloseTab() - { - try - { - isConnected = false; - timerClock?.Stop(); - logWriter?.WriteLine("=== Session ended: " + DateTime.Now + " ==="); - logWriter?.Close(); - if (Client != null) { Client.Close(); Client = null; } - if (t_read != null && t_read.IsAlive) { t_read.Abort(); t_read = null; } - } - catch { } - } - - private void PrintSystem(string text, LineType type, Color? color = null) - { - string prefix = type == LineType.Error ? "[ERR] " : "[SYS] "; - Color c = color ?? (type == LineType.Error ? Color.FromArgb(220, 80, 80) : Color.FromArgb(85, 85, 105)); - var entry = new LogLine { Raw = prefix + text, Display = prefix + text, Type = type, Time = DateTime.Now }; - lock (logLock) allLines.Add(entry); - WriteLog(text, type); - InvokeUI(() => { - if (activeFilter == null || activeFilter == type) - { - boxOutput.SelectionColor = c; - boxOutput.AppendText(entry.Display + "\n"); - if (autoScroll) SendMessage(boxOutput.Handle, WM_VSCROLL, (IntPtr)SB_BOTTOM, IntPtr.Zero); - } - }); - } - - private void PrintChat(string raw) - { - string plain = System.Text.RegularExpressions.Regex.Replace(raw, @"§.", ""); - var entry = new LogLine { Raw = raw, Display = plain, Type = LineType.Chat, Time = DateTime.Now }; - lock (logLock) allLines.Add(entry); - WriteLog(plain, LineType.Chat); - InvokeUI(() => { - if (activeFilter == null || activeFilter == LineType.Chat) - { - boxOutput.SuspendLayout(); - RenderLine(entry); - if (autoScroll) SendMessage(boxOutput.Handle, WM_VSCROLL, (IntPtr)SB_BOTTOM, IntPtr.Zero); - boxOutput.ResumeLayout(); - } - }); - } - - private void InvokeUI(Action a) { if (!boxOutput.IsDisposed) { if (boxOutput.InvokeRequired) try { boxOutput.Invoke(a); } catch { } else a(); } } - private Font GetFont(char c, Font f) => c == 'l' ? new Font(f, FontStyle.Bold) : f; - private Color GetColor(char c) - { - switch (c) - { - case '0': return Color.FromArgb(20, 20, 20); - case '1': return Color.FromArgb(85, 85, 255); - case '2': return Color.FromArgb(85, 200, 85); - case '3': return Color.FromArgb(85, 220, 220); - case '4': return Color.FromArgb(220, 85, 85); - case '5': return Color.FromArgb(200, 85, 200); - case '6': return Color.FromArgb(255, 180, 30); - case '7': return Color.Silver; - case '8': return Color.FromArgb(120, 120, 140); - case '9': return Color.FromArgb(100, 130, 255); - case 'a': return Color.FromArgb(85, 255, 85); - case 'b': return Color.FromArgb(85, 255, 255); - case 'c': return Color.FromArgb(255, 85, 85); - case 'd': return Color.FromArgb(255, 130, 255); - case 'e': return Color.FromArgb(255, 255, 85); - case 'f': return Color.White; - default: return Color.FromArgb(200, 200, 215); - } - } - } -} diff --git a/MinecraftClientGUI/Form1.resx b/MinecraftClientGUI/Form1.resx deleted file mode 100644 index b45be6ec86..0000000000 --- a/MinecraftClientGUI/Form1.resx +++ /dev/null @@ -1,6293 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - - - AAABAAYAEBAAAAAAIABoBAAAZgAAACAgAAAAACAAqBAAAM4EAAAwMAAAAAAgAKglAAB2FQAAQEAAAAAA - IAAoQgAAHjsAAICAAAAAACAAKAgBAEZ9AAAAAAAAAAAgACggBABuhQEAKAAAABAAAAAgAAAAAQAgAAAA - AAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACvazFDxIhZm7l8Rpy5ekGcuXpBnLp6RZy9fkmcv39JnL9/ - S5y9fkmcunpFnLl5QZy3ekGct3pBnLh7RZutZy0+5NTG8fHx8f/29vb/9/f3//f3+P/4+Pj/+Pj4//j4 - +P/4+Pj/+Pj4//j4+P/39/f/9/f3//f39//09PT/0a+R4O3m4P7S0tL/8/Pz//Pz8//z8/P/8vLy/+7u - 7v/z8/P/7+/v/+3t7f/09PT/9PT0//T09P/09PT/+Pj4/9W2menr49z+y8vL//Pz8//z8/P/8/Pz/9fX - 1/8yMjL/6Ojo/7q6uv8rKyv/7e3t//T09P/09PT/9PT0//v7+//Utpnp6eHb/sjIyP/09PT/8/Pz//Pz - 8//Q0ND/AgIC/wYGBv8EBAT/AgIC/+Pj4//09PT/9PT0//T09P/7+/v/1baZ6enh2v7Hx8f/8/Pz//Pz - 8//z8/P/2NjY/w4ODv8CAgL/AQEB/xAQEP/w8PD/9PT0//T09P/09PT//Pz8/9W2meno4Nr+x8fH//Pz - 8//09PT/9PT0/9bW1v/Ozs7/YWFh/0pKSv/Kysr/4+Pj//T09P/09PT/9PT0//z8/P/Utpnp6eHa/snJ - yf/09PT/9PT0//T09P8vLy//BgYG/8jIyP/S0tL/CAgI/yQkJP/z8/P/8/Pz//Pz8//7+/v/1LaZ6evj - 3f7Ozs7/9PT0//T09P/09PT/goKC/2xsbP/Y2Nj/29vb/2ZmZv9lZWX/8/Pz//T09P/z8/P/+vr6/9W2 - mOnu5t/+29vb/+Hh4f/c3Nz/2dnZ/9nZ2f/Y2Nj/2NjY/9jY2P/Y2Nj/2dnZ/9nZ2f/d3d3/4uLi//T0 - 9P/Ts5bq7uPb/vPu6v/z7ur/8+7q//Pu6v/z7en/8ezo//Dr5//w6+f/8ezo//Lt6f/z7ur/8+7p//Pu - 6f/y7ur/0ayK++2/mf7zuYr/9LmJ//O5iv/zuYr/87mJ//O5iv/zuYr/9LmK//O5iv/0uYn/87mK//S5 - iv/0uYr/9LiJ/9GGSv/urHT+9Ld8//W6fP/1vHz/9bx8//a9fP/1v3z/9b58//W+fP/2vnz/9r58//W9 - fP/1vHz/9bt8//S3ev/ShknY0ItOucF1M6TEdDGlwnQxpcJ0MaXFdTSlyXg5pcp7O6XJezulyXg5pcV1 - NKXCdDGlwnQxpcR4NqXEf0Oks2gqNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//wAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAD//wAAKAAAACAAAABAAAAAAQAgAAAAAAAAIAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA349gELFOABexTgAXsU4AF7FOABexTgsXsU4LF7FO - CxexTgsXsU4LF7FOCxexWQsXsVkLF7FZCxexWQsXsVkLF7FZCxexWQsXsVkLF7FOCxexTgsXsU4LF7FO - CxexTgsXsU4LF7FOCxexTgAXsU4AF8x/QBQAAAAAAAAAAKtnKm28hVX+0KmH/9Ktjf/OpIH/yqB7/8qh - e//KoXv/yqF7/8qhe//Monz/zaN+/86kgP/PpYH/z6aC/8+ngv/Pp4L/z6aC/8+lgf/OpID/zaN+/8yh - ff/KoHv/yqB6/8qhe//KoXv/yqF7/8qhe//Lo3//x5t0/7mBT+WoZy0+v4xe6fHy8f/08/P/8/P0//Pz - 8//z8/P/8/T0//P09P/z9PT/8/Pz//P09P/z8/P/8/P0//Pz8//z9PT/8/T0//P09P/z9PT/8/T0//P0 - 9P/z9PT/8/T0//P09P/z8/P/8/T0//P09P/09PT/9PT0//P09P/09PP/8O/t/7h9Sr7avaP98/Pz/+7u - 7v/39/f/+vr6//r6+v/7+/v/+/v7//v7+//7+/v/+/v7//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8 - /P/8/Pz//Pz8//z8/P/8/Pz/+/v8//v7+//7+/v/+/v7//r6+v/5+fn/9vb2//T09P/z8fH/vIRS09zE - rf7z8/P/2dnZ/+Pj4//09PT/9PT0//b29v/19fX/9vb2//b29v/29vb/9/f3//f39//39/f/9/f3//f3 - 9//39/f/9/f3//f39//39/f/9/f3//b29v/29vb/9vb2//b29v/19fX/9PT0//T09P/09PT/+Pj4//Px - 8f+8hFHT27+m/vPz8//U1NT/3t7e//T09P/09PT/9PT0//Pz8//09PT/8/Pz//T09P/z8/P/8/Pz//Pz - 8//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//b2 - 9v/5+fn/8/Hx/7uEUtPavKL+8vLy/9PT0//Z2dn/8/Pz//Pz8//z8/P/8vLy//T09P/09PT/9PT0/9fX - 1/9ZWVn/a2tr/+fn5//09PT/9PT0/6Ojo/9VVVX/XFxc//Hx8f/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/+Pj4//r6+v/z8fH/vIRS09q8ov7z8/P/0dHR/9fX1//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/wsLC/w8PD/8gICD/wcHB/8nJyf/Jycn/eXl5/wAAAP8fHx//5eXl//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/5+fn/+vr6//Px8f+7hFHT2r2i/vPz8//Q0ND/1dXV//T09P/09PT/8/Pz//Pz - 8//09PT/8/Pz//Pz8//BwcH/ExMT/wAAAP8HBwf/BgYG/wYGBv8EBAT/AAAA/yAgIP/c3Nz/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//n5+f/7+/v/8/Hx/7yEUdPavKL+8/Pz/8/Pz//V1dX/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/9PT0/8HBwf8SEhL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ISEh/93d - 3f/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/+vr6//v7+//z8fH/u4RS09q9ov7z8/P/0NDQ/9PT - 0//z8/P/8/Pz//Pz8//z8/P/9PT0//T09P/09PT/xcXF/w0NDf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8fHx//5+fn//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/6+vr/+/v7//Px8f+7hFHT2r2j/vPz - 8//Pz8//09PT//Pz8//z8/P/8/Pz//Pz8//09PT/9PT0//T09P/j4+P/gICA/35+fv8cHBz/AAAA/wAA - AP8dHR3/oaGh/6SkpP/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//r6+v/7+/v/8/Hx/7uE - UdPavaL+8vLy/9DQ0P/U1NT/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz/0hI - SP8AAAD/AAAA/xwcHP/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/+vr6//v7 - +//z8fH/vIRR09q8ov7z8/P/0NDQ/9XV1f/09PT/8/Pz//T09P/09PT/9PT0//Dw8P+1tbX/pqam/6am - pv+pqan/kJCQ/3l5ef95eXn/cXFx/7CwsP+oqKj/ra2t/9DQ0P/z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/6+vr/+/v7//Px8f+7hFHT2ryi/vPz8//Q0ND/1dXV//T09P/09PT/9PT0//T09P/09PT/7+/v/0lJ - Sf8DAwP/AwMD/wYGBv+3t7f/8fHx//Hx8f/Dw8P/BAQE/wUFBf8EBAT/Nzc3/+/v7//09PT/9PT0//T0 - 9P/z8/P/9PT0//r6+v/7+/v/8/Hx/7uEUdPavKL+8/Pz/9HR0f/X19f/9PT0//T09P/09PT/9PT0//T0 - 9P/v7+//S0tL/wAAAP8AAAD/BwcH/66urv/z8/P/8/Pz/8TExP8AAAD/AAAA/wAAAP83Nzf/6enp//Pz - 8//09PT/9PT0//Pz8//09PT/+fn5//v7+//z8fH/u4RR09q8ov7z8/P/09PT/9ra2v/09PT/9PT0//T0 - 9P/09PT/9PT0/+/v7/9SUlL/Dg4O/w4ODv8QEBD/ubm5//T09P/09PT/x8fH/wkJCf8NDQ3/CwsL/zk5 - Of/t7e3/9PT0//T09P/09PT/9PT0//T09P/4+Pj/+/r7//Px8f+8hFHT2ryi/vPz8//U1NT/3t7e//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz/9zc3P/Ozs7/zs7O/9DQ0P/q6ur/9PT0//T09P/q6ur/xsbG/8XF - xf/FxcX/yMjI//Pz8//z8/P/9PT0//T09P/09PT/9PT0//j4+P/6+vr/8/Hx/7uEUdPavKL+8/Pz/9ra - 2v/k5OT/9PT0//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//y8vL/8vLy//Ly8v/x8fH/8fHx//Ly - 8v/y8vL/8vLy//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//09PT/9vb2//n5+f/z8fH/u4JR09q8 - ov7z8/P/5eXl/97e3v/Z2dn/0dHR/8/Pz//Ly8v/x8fH/8XFxf/FxcX/xcXF/8TExP/ExMT/xcXF/8TE - xP/ExMT/xMTE/8TExP/ExMT/xcXF/8XFxf/FxcX/x8fH/8vLy//Ozs7/0dHR/9ra2v/n5+f/+Pj4//Px - 8f+3fEnX2ryi/vPz8//z8/P/7+/v/+3t7f/s7Oz/6urq/+rq6v/p6en/6Ojo/+jo6P/o6Oj/5+fn/+fn - 5//l5eX/5OTk/+Tk5P/l5eX/5+fn/+fn5//o6Oj/6Ojo/+jo6P/p6en/6urq/+vr6//s7Oz/7e3t//Dw - 8P/09PT/8/Hx/7t/SvHau5/+8uzn//Pt6P/z7ej/8+3o//Pu6P/z7ej/8+3o//Pt6P/z7ej/8+3o//Pu - 6P/z7ej/8+3o//Pt6P/z7ej/8+3o//Pt6P/z7ej/8+3o//Pt6P/z7ej/8+3o//Pt6P/z7ej/8+3o//Pt - 6P/z7ej/8+3o//Lu6v/w7Of/unpD/9ukc/70s37/9LJ9//Syff/0s33/9LN+//Szfv/0s37/9LJ9//Sy - ff/0s37/9LJ9//Syff/0sn3/9LN+//Szfv/0s37/9LN+//Syff/0sn3/9LJ+//Syff/0sn3/9LJ9//Sz - fv/0s37/9LN9//Syff/0s33/8q14/++fZf+4ZSH/3p1l/vSzfv/0sn3/9LJ9//Wyff/1s33/9bN+//Wz - fv/0sn3/9LJ9//Wzfv/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/1s37/9bN9//Wz - ff/0sn3/9bN+//Wzfv/1s33/9bJ9//Wzff/zrXb/8J9l/7trKf/enWT+9LN9//Syff/0sn3/9LJ9//Sy - fP/0s33/9LN9//SyfP/1s33/9bN9//Wyff/0s33/9LN9//Szff/0s33/9LN9//Wzff/1s33/9bN9//Wz - ff/1s33/9bN9//Wzff/1s33/9LN9//Syff/1s33/9LN9//Otdv/wn2X/u28x29eRVf7ysXr/9sN7//jL - fP/5zXz/+M98//jPe//40Hz/+NF7//jRe//40Xv/+NF7//jTfP/403v/+NJ8//jSfP/40nz/+NJ8//jT - e//40nv/+NJ8//jRfP/40Xz/99F8//jRfP/40Hz/+c98//nOfP/4zHz/9sN3/+6naP+6bzSTs2wvt8F6 - PfbSik7/1YxQ/9WMTv/Wjk7/1o5P/9WOTf/VkE7/1pFP/9iST//Zk1D/2ZVT/9qVU//bllP/25dV/9uX - Vf/bllP/2pZS/9mVUv/Yk1H/2JJP/9eRTv/WkE//1Y9O/9WOTv/Wjk//15BR/9eYYf/SiEv/v3Ey5qpk - JyGqYyoS27aSB6pbFCemTAAopkwGKKZTBiimUwYoplMGKKZTBiimTAYoplMGKKZZBiisWQ0orFkTKLJZ - EyiyWRMoslkTKLJZEyisWRMorFkNKKZZBiimUwYopkwGKKZTBiimUwYoplMGKKZMBiimTAYopkwGKKpb - GieqVVUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////+AAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAf///////////////ygAAAAwAAAAYAAAAAEAIAAAAAAAAEgAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAcx/ - MwqxTgANsU4ADbFOAA2xTgANsU4ADbFOAA2xTgANsU4ADbFOAA2xTgANsU4ADbFOAA2xTgANsU4ADbFO - AA2xTgANsU4UDbFOFA2xThQNsU4UDbFOFA2xThQNsU4UDbFOFA2xThQNsU4UDbFOAA2xTgANsU4ADbFO - AA2xTgANsU4ADbFOAA2xTgANsU4ADbFOAA2xTgANsU4ADbFOAA2xTgANsU4UDeOOVQn/f38CAAAAAAAA - AACuazYTqGIkW69oK4e7fUeLwohWi8CGUou7fkeLt3c+i7d3Pou3dz6Lt3c+i7d3Pou3dz6Lt3c+i7d3 - QIu5d0CLuXlCi7l7RIu7fUaLvX1Hi71+R4u/fkmLv35Ji7+ASYu/gEmLv4BJi79+SYu/fkmLvX1Hi7t9 - Rou5e0SLuXlCi7l3Qou3dUCLt3U+i7d3Pou3dz6Lt3c+i7d3Pou3dz6Lt3c+i7d3Pou3d0KLuXtEi7V2 - PYapZCVupWMqNn8AAAKoZClwtHZB5NKxk//cxK7/4Mm2/97ItP/cxK//28Gr/9rBqv/awar/2sGq/9rB - qv/awar/2sGq/9rBq//bwqv/3MOs/9vDrP/bw63/3cSu/93Erv/dxa//3cWv/93Fr//dxa//3cWv/93F - r//dxK//3cSu/9zDrf/cw6z/3MKs/9vCrP/awav/2sGq/9rBqv/awar/2sGq/9rBqv/awar/2sGq/9rB - qv/bwqz/2sGs/9e8o//Mp4f0rm00xKppNzOvbTLU07WZ//Hw7v/08/P/8/Pz//Pz9P/z8/P/8/Pz//Pz - 8//z8/P/8/T0//P09P/z9PT/8/Pz//Pz8//z9PT/8/T0//Pz8//z8/P/8/Pz//Pz8//z9PT/8/T0//P0 - 9P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/Pz//Pz8//z9PT/8/T0//T0 - 9P/09PT/9PT0//T09P/z9PT/8/T0//T08//u6ub/x5x1/6tnK426f0z47OPb//P09P/x8fH/7u7u//Pz - 8//09PT/9PT0//T09P/19fX/9vb2//b29//29vf/9vb2//b29v/39/f/9/f3//f39//39/f/9/f3//j4 - +P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/9/j4//f39//39/f/9/f3//f39//39/f/9/f3//f3 - 9//29vb/9vb2//X19f/09PT/9PT0//Pz8//z8/P/8/Pz//T09P/z8/P/2b6m/6xnKbzAjWD99PHu//Pz - 9P/w8PH/8vLy//r6+v/8/Pz//Pz8//z8/P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/8/Pz//Pz8//v7+//5+fn/9vb2//T09P/z8/P/3MOr/61l - KcLAj2L+9PPv//Pz9P/l5eX/1NTU/+rq6v/09PT/9fX1//X19f/29vb/9vb2//b29v/39/f/9/f3//j4 - +P/4+Pj/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5 - +f/5+fn/+fn5//j4+P/39/f/9/f3//f39//39/f/9/f3//b29v/19fX/9PT0//T09P/09PT/9/f3//X1 - 9f/08/P/3MOr/61lJ8LBjF3+8u7p//Pz8//i4uL/zs7O/+fn5//09PT/9PT0//T09P/09PT/8/Pz//Pz - 8//09PT/8/Pz//Pz8//09PT/9PT0//Pz8//z8/P/8/Pz//T09P/z8/P/8/Pz//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/19fX/+fn6//b29v/z8/P/3MOr/6xlJ8LAiFf+8ezn//Ly8v/g4OD/zMzM/+bm5v/09PT/8/Pz//Pz - 8//09PT/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//Dw8P/q6ur/6+vr/+vr6//w8PD/9PT0//T0 - 9P/09PT/8/Pz/+Pj4//p6en/6+vr/+fn5//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/29vb/+/v7//f39//z8/P/3MOr/6xlKcLAiFb+8evm//Hx8f/e3t7/ysrK/+Pj - 4//z8/P/8vLy//Pz8//z8/P/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0/9XV1f+QkJD/jY2N/6Ki - ov/k5OT/9PT0//T09P/09PT/8vLy/4qKiv+IiIj/jY2N/42Njf/y8vL/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/29vb//Pz8//f39//08/P/3MOr/61lKsLAiFb+8evm//Dw - 8P/c3Nz/yMjI/+Li4v/z8/P/8vLy//Pz8//z8/P/8/Pz//Ly8v/09PT/9PT0//T09P/09PT/9PT0/7Cw - sP8bGxv/AQEB/0VFRf/c3Nz/9PT0//T09P/09PT/8vLy/1hYWP8FBQX/AAAA/zExMf/p6en/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/29vb//Pz8//j4+P/08/P/3MOr/6xl - J8LAiFb+8ezn//Dw8P/a2tr/x8fH/+Li4v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0/6mpqf8eHh7/AAAA/ywsLP+Xl5f/mZmZ/5eXl/+Wlpb/mZmZ/z09Pf8EBAT/AAAA/zQ0 - NP/a2tr/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/39/f//f39//j4 - +P/08/P/3MOq/6xlJ8LAiFb+8ezn//Dw8P/a2tr/xsbG/+Hh4f/09PT/9PT0//T09P/09PT/8/Pz//Pz - 8//09PT/8/Pz//Pz8//z8/P/8/Pz/6ioqP8hISH/AAAA/wcHB/8gICD/Ghoa/xgYGP8XFxf/GRkZ/wwM - DP8BAQH/AAAA/zQ0NP/S0tL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/39/f//f39//j4+P/08/P/3MOq/61lJ8LAiFb+8evm//Dw8P/a2tr/xsbG/+Hh4f/09PT/9PT0//T0 - 9P/09PT/8/Pz//Pz8//09PT/8/Pz//Pz8//z8/P/8/Pz/6ioqP8iIiL/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/zU1Nf/Q0ND/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/39/f//f39//j4+P/08/P/3MOr/6xlKcLAiFb+8evm//Dw8P/Z2dn/xcXF/+Hh - 4f/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//09PT/9PT0/6ioqP8gICD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zU1Nf/S0tL/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/39/f//f39//j4+P/08/P/3MOr/6xlKcLAiFb+8ezn/+/v - 7//Y2Nj/xcXF/+Dg4P/z8/P/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/6qq - qv8dHR3/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zQ0NP/d3d3/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/39/f//f39//j4+f/09PT/3MOr/6xl - J8LAiFb+8ezn/+/v7//X19f/xMTE/9/f3//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//09PT/9PT0//T0 - 9P/09PT/9PT0/7i4uP8dHR3/BAQE/wMDA/8BAQH/AAAA/wAAAP8AAAD/AAAA/wEBAf8EBAT/BQUF/zU1 - Nf/v7+//9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/39/f//f39//n5 - +f/09PT/3MOr/61lJ8LAiFb+8ezn/+/v7//X19f/xMTE/9/f3//z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/+Pj4/+lpaX/oKCg/5WVlf88PDz/AAAA/wAAAP8AAAD/AAAA/zQ0 - NP+xsbH/xcXF/8XFxf/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/39/f//f39//n5+f/09PT/3MOr/6xlJ8LAiFb+8ezn/+/v7//Y2Nj/xcXF/+Dg4P/z8/P/8/Pz//Pz - 8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz/+bm5v9xcXH/AAAA/wAA - AP8AAAD/AAAA/y0tLf/a2tr/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/39/f//f39//n5+f/09PT/3MOr/6xlJ8LAiFb+8evm/+/v7//Z2dn/xsbG/+Dg - 4P/z8/P/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//Hx8f/o6Oj/4+Pj/+Pj4//j4+P/4+Pj/9vb - 2/9/f3//ISEh/yEhIf8hISH/ISEh/z4+Pv/S0tL/5OTk/+Pj4//k5OT/6urq//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/39/f//f39//n5+f/09PT/3MOr/61lJ8LAiFb+8evm//Dw - 8P/a2tr/xsbG/+Hh4f/09PT/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0/+rq6v+pqan/enp6/3Z2 - dv93d3f/dnZ2/3t7e/+hoaH/np6e/56env+enp7/np6e/3t7e/98fHz/enp6/3p6ev97e3v/hoaG/7m5 - uf/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/39/f//f39//n5+f/09PT/3MOr/6xl - J8LAiFb+8evm//Dw8P/a2tr/xsbG/+Hh4f/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/+fn - 5/92dnb/FRUV/wkJCf8KCgr/CQkJ/xoaGv+dnZ3/7+/v/+7u7v/u7u7/7u7u/6Ojo/8dHR3/DAwM/w0N - Df8MDAz/ExMT/29vb//t7e3/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz//T09P/39/f//f39//j4 - +f/08/T/3MOr/6xlJ8LAiFb+8evm//Dw8P/a2tr/x8fH/+Li4v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0/+np6f94eHj/Dw8P/wAAAP8AAAD/AAAA/xQUFP+Kior/9PT0//T09P/z8/P/8/Pz/6ys - rP8UFBT/AAAA/wAAAP8AAAD/CQkJ/2VlZf/i4uL/8/Pz//Pz8//z8/P/9PT0//T09P/z8/P/8/Pz//T0 - 9P/39/f//f39//j4+P/08/P/3MOr/6xlJ8LAiFX+8evm//Hx8f/b29v/yMjI/+Pj4//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/+np6f95eXn/EBAQ/wAAAP8AAAD/AAAA/xUVFf+Ghob/9PT0//Pz - 8//z8/P/8/Pz/6urq/8UFBT/AAAA/wAAAP8AAAD/CgoK/2RkZP/e3t7/8/Pz//Pz8//z8/P/9PT0//Pz - 8//z8/P/9PT0//T09P/39/f//f39//j4+P/08/P/3MOr/6xlJ8LAiFb+8evm//Hx8f/d3d3/ycnJ/+Tk - 5P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/+rq6v94eHj/Dw8P/wAAAP8AAAD/AAAA/xMT - E/+RkZH/9PT0//Pz8//z8/P/8/Pz/6urq/8UFBT/AAAA/wAAAP8AAAD/CQkJ/2RkZP/i4uL/9PT0//T0 - 9P/09PT/9PT0//Pz8//z8/P/9PT0//T09P/29vb//Pz8//j4+P/08/P/3MOr/61lJ8LAiFb+8evm//Ly - 8v/f39//y8vL/+Xl5f/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/+3t7f+mpqb/aGho/2Fh - Yf9iYmL/YGBg/2RkZP+urq7/9PT0//T09P/09PT/9PT0/7u7u/9RUVH/WVlZ/11dXf9YWFj/R0dH/4OD - g//y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/29vb//Pz8//j4+P/08/P/3MOr/61l - J8LAiFX+8evm//Pz8//i4uL/zc3N/+fn5//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/y8vL/7Ozs/+np6f/p6en/6urq/+7u7v/09PT/9PT0//T09P/09PT/9PT0//Dw8P/p6en/4+Pj/+Dg - 4P/i4uL/5ubm/+vr6//09PT/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/29vb/+/v7//f3 - 9//z8/P/3MOr/6xlJ8LAiFb+8evm//T09P/l5eX/0tLS/+np6f/09PT/9PT0//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/9PT0//T0 - 9P/19fX/+vr6//b29v/z8/P/3MOr/6xlJ8LAiFb+8evm//T09P/o6Oj/2dnZ/+fn5//s7Oz/6+vr/+np - 6f/p6en/5+fn/+fn5//m5ub/5ubm/+bm5v/l5eX/5eXl/+Xl5f/l5eX/5OTk/+Pj4//j4+P/4+Pj/+Pj - 4//j4+P/4+Pj/+Pj4//k5OT/5OTk/+Tk5P/l5eX/5eXl/+Xl5f/m5ub/5ubm/+bm5v/n5+f/6Ojo/+jo - 6P/p6en/6+vr/+zs7P/w8PD/9/f3//b29v/z8/P/3MOs/6lgIsLAiFb+8evm//T09P/t7e3/4uLi/97e - 3v/a2tr/1dXV/9DQ0P/Q0ND/zMzM/8rKyv/IyMj/xsbG/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TE - xP/FxcX/xcXF/8TExP/ExMT/xcXF/8TExP/ExMT/xMTE/8XFxf/FxcX/xcXF/8XFxf/FxcX/xsbG/8jI - yP/Kysr/zc3N/8/Pz//Q0ND/1tbW/9vb2//k5OT/8vLy//X19f/08/P/3MOs/6lgIM+/iFb+8evm//T0 - 9P/z8/P/7+/v/+np6f/m5ub/4+Pj/+Li4v/h4eH/39/f/97e3v/d3d3/3Nzc/9zc3P/b29v/29vb/9vb - 2//b29v/2tra/9ra2v/a2tr/2tra/9nZ2f/Z2dn/2tra/9ra2v/a2tr/2tra/9vb2//b29v/29vb/9vb - 2//c3Nz/3Nzc/93d3f/e3t7/39/f/+Hh4f/i4uL/5OTk/+bm5v/r6+v/8vLy//T09P/08/P/3MOs/61l - JOi/iFb+8ezm//T08//09PP/9PTz//T08//09PP/9PTz//T09P/09PP/9PTz//T08//09PP/9PTz//T0 - 8//z8/P/8/Pz//Pz8//z8/L/8/Py//Ly8v/y8vH/8vLx//Hx8f/x8fH/8vLx//Ly8f/y8vL/8/Py//Pz - 8v/z8/P/8/Pz//Pz8//09PP/9PTz//T08//09PP/9PTz//T09P/09PP/9PTz//T08//09PP/8vTz//Lz - 8//y8/P/28Os/69lI/i/h1T+8OTX//Lp4f/z6eL/8+ni//Pp4v/z6eL/8+nh//Pq4f/z6eH/8+ni//Pp - 4v/z6eL/8+ni//Pp4v/z6eL/8+nh//Pq4f/z6eH/8uni//Lp4f/y6eH/8unh//Lp4f/y6eH/8unh//Lp - 4f/y6eH/8unh//Lp4f/y6eH/8unh//Lp4f/y6eH/8unh//Lp4f/y6eH/8unh//Lp4f/y6eH/8unh//Lp - 4v/y6eL/8eni//Ls5//x6uT/3MCn/65fG//BfUL+87yP//O8j//zu5D/87uQ//O8kP/zvJD/87yP//O8 - j//zvI//87yQ//O8kP/zvJD/87yQ//O8kP/zvJD/87yP//O8j//zvI//87yQ//O8j//zvI//87yP//O8 - j//zvI//87yP//O8j//zvI//87yP//O8j//zu4//87uP//O7j//zu4//87uP//O7j//zu4//87yP//O8 - j//zvI//87yP//O8kP/zvJD/87yP//C1iv/vr4D/25di/6tYEP/EfT/+9LSB//Szfv/0sn3/9LJ9//Sy - ff/0s33/9LN+//Szfv/0s37/9LN+//Syff/0sn3/9LJ9//Syff/0s37/9LJ9//Syff/0sn3/9LJ9//Sy - ff/0s37/9LN+//Szfv/0s37/9LN+//Szfv/0s37/9LJ9//Szfv/0sn7/9LJ9//Syff/0sn3/9LJ9//Sy - ff/0sn3/9LN+//Szfv/0s33/9LJ9//Syff/0s33/9LJ9//Kpcv/xoWf/3oxP/61YEP/Hg0f+87WB//Sy - ff/0sn3/9bN9//Wyff/1sn3/9bN+//Wzff/1s33/9bN+//Wzff/1s33/9bN9//Wzff/1s37/9bN9//Wz - ff/1s33/9bN9//Wzff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN9//Wzfv/1s37/9bN+//Wz - fv/1s33/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN9//Wzff/1s33/9bN9//Kocf/xoWf/3Y9V/7Fh - HP7GgkX+87SA//Syff/0sn3/9bJ9//Syff/0sn3/9LJ9//SyfP/0snz/9LN9//SyfP/0snz/9bN9//Wz - ff/1s33/9bN9//Wyff/1sn3/9LN9//Wzff/0s33/9LN9//Szff/0s33/9LN9//Wzff/1s33/9bN9//Wz - ff/1s33/9bN9//Wzff/1s33/9bN9//Wzff/1s33/9bN9//Syff/0sn3/9bJ9//Wzff/0s33/9LN9//Go - cf/woGf/3pJY/6teHtnDeDj98a95//Sze//0tXv/9bZ7//W4fP/1uHz/9bh8//W4fP/0uHv/9Ll8//W5 - fP/1uXz/9bl8//W5fP/1uXz/9bl8//W5fP/1unz/9bp8//W6fP/0unz/9Lp8//W6fP/1unz/9bp8//W6 - fP/1unz/9bp8//W6ff/1un3/9bl9//W5ff/1uX3/9bl8//W5fP/1uXz/9bl8//W4fP/1uHz/9rh8//a5 - fP/1uHz/9Lh8//Gtcf/womf/14lN/6tgJKS6bi3135xi//O0e//1vHv/98F7//fFfP/3xnz/98h8//fJ - fP/4yXv/+Mp8//jLfP/4zHv/+Mx7//jNe//4zXv/+M17//jNe//4znz/+M97//jQe//4z3z/+M98//jP - fP/4z3z/+M98//jPfP/4z3v/+NB7//jOfP/4znz/+M18//jNfP/4zXz/+Mx8//fMfP/3zHz/+Mt8//jJ - fP/4yXz/+Mh8//jHfP/3xnz/9sJ6//O2cf/up2f/x3k596lmM1CuZimovXY5z9aRV/zfmF//4Zti/+Cb - YP/gnGD/4Z1g/+KeYP/in2D/4qBg/+KiX//iol//4qNf/+OkYP/kpWD/5aZh/+WmYf/lp2L/5ahi/+Wp - Yv/mqWL/5qlj/+aqY//mqmT/5qpj/+apY//lqWL/5ali/+SnYv/kpmH/5KZg/+SmYP/jpV//46Ng/+Oj - YP/iomD/4qFg/+KfYP/in2D/4p9h/+KfZP/homr/351m/92QU//Ug0b0sWkqpbl0LguqaTsnpmAlRbJr - LYG/dDSXwXMymcFxL5nBcS+ZwXMvmcFzL5nBcS+ZwXEvmcFzL5nBcy+ZwXEwmcFxMJnDczKZw3Q0mcN2 - NJnEdjWZxng5mcZ5OZnIeTmZyHk6mch5OpnIeTqZyHk5mch5OZnGeTmZxng3mcR2NZnDdjSZw3QymcNz - MJnBcS+ZwXEvmcFzMJnBcy+ZwXMvmcFxMJnBczCZw3MymcN2N5nDfUOZv3k+mb5yMZazZid2pWktIgAA - AAEAAAAAAAAAAKpxOQm2YSQVrlEAFq5RABauUQAWrlEAFq5RABauUQAWrlEAFq5RABauUQAWolEAFqJR - ABaiUQAWrlEMFq5RDBauUQwWrlEMFq5dDBauXQwWrl0XFq5dFxauXQwWrl0MFq5dDBauXQwWrlEMFq5R - DBauUQwWrlEMFq5RABaiUQAWolEAFq5RABauUQAWrlEAFq5RABauUQAWrlEAFq5RABaiUQAWolEAFrJm - JhSqf1UGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////8AAP// - /////wAA////////AAD///////8AAMAAAAAABwAAgAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAMAAAAAABwAA////////AAD///////8AAP// - /////wAA////////AAAoAAAAQAAAAIAAAAABACAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/Ikg7GdzktpE8GLapVBi2wVQYtsE8GLapPBi2qTwYtqk8GLapP - Cy2qTwstqk8LLapPCy2qTwstqk8LLapPCy2qTwstqk8LLapVCy2qVQstsFURLbBVES2wVREtsFURLbBV - ES2wWxctsFsXLbBbFy2wWxctsFsXLbBbFy2wWxcttVsXLbBbFy2wWxctsFsXLbBVES2wVREtsFURLbBV - ES2wVQstqk8LLapPCy2qTwstqk8LLapPCy2qTwstqk8LLapPCy2qTwstqk8LLapPCy2qTwstqk8GLapP - Bi2qTwYtu2YoLeGygiv/qqoDAAAAAAAAAAAAAAAAv79/BK10O1qjXBzsql4c/7FvMP+2czr/uHQ7/7Vy - Of+zbjP/smss/7BqK/+waiv/sWor/7FqK/+xaiv/sWor/7FqK/+xaiv/sWor/7FqLP+zbC7/tG4w/7Ru - MP+1bzH/tnAz/7ZxNP+3cTb/uHI2/7hzN/+5czf/uXQ4/7l0OP+5dDj/uXQ4/7lzOP+5czf/uXI2/7dx - Nv+2cTT/tnAz/7VvMv+1bjD/tW0w/7RsLv+yaiz/sWkr/7FqK/+xaiv/sWor/7FqK/+waiv/sGor/7Bq - K/+waiv/sGor/7BqK/+xai7/sWwv/7BoLP+oYiT/p18j8KllLZKwdk4aAAAAAK1zQFSpUwz7xJhu/+/p - 4P/v7Or/8e/t//Hu7v/x7u7/7+7r//Ds6f/u7On/7+3q/+7t6v/u7er/7u3q/+7t6v/u7er/7u3q/+7t - 6v/u7er/7u3q/+7t6v/u7ev/7uzq/+/s6v/w7er/7+zq/+7t6v/v7uv/7u3r/+7t6//u7ev/7u3r/+7t - 6//u7ev/7u3r/+7t6//u7er/7u3r/+7t6v/u7er/7e3q/+7t6v/u7er/7uzq/+7t6v/u7On/7u3q/+7t - 6v/u7er/7u3q/+/t6v/v7er/7+3q/+/t6v/v7en/7+3r/+7t6//v7Or/8Ork/+bVw/+vbjf/oFkV762F - XBmjWhnIrWkw/+7r5f/z8/P/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8/Pz//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/8/Pz//T09P/09PT/9PT0//Pz8//z8/P/8/Pz//Pz8//z8/P/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/P/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Pz - 8//x8fP/5t7Q/6NTDv6saDFipVYU8ti4nv/y8vH/9PT0//T09P/z8/P/8/Pz//Pz8//z8/P/8/Pz//Ly - 8v/09PT/9PT0//T09P/z8/P/8/Pz//Ly8v/09PT/8/Pz//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//Pz - 8//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/P/8/Pz//Pz8//09PT/8/Pz//Pz8//09PT/9PT0//Pz8//z8/P/9PT0//Pz8//09PT/9PT0//T0 - 9P/z8/P/8/Pz//T09P/z9PP/8vLz//Ty8P+wcjn/rGcsl6VWEvzy49n/8fLy//T09P/09PT/3t7e/+3t - 7f/z8/P/9PT0//X19f/19vb/9vb2//j4+P/5+fn/+vr6//r6+//6+vv//Pz8//v7+//7+/v//Pz8//z8 - /P/8/Pz//P39//z8/P/8/Pz//Pz8//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39 - /f/8/f3//P39//z8/P/8/Pz//Pz8//z8/P/7+/v//Pz8//v7+//7+/v/+vr6//n5+v/5+fn/+Pj4//f3 - 9//29vb/9PT0//T09P/z8/P/8vLy//Ly8v/z8/P/9PPz//Ly8f/08vL/un9M/6pnLKikWBb+8u/n//Pz - 8//z8/P/8vLz/+vr6//29vb//Pz8//7+/v/9/f3//f39//7+/v/+/v7//v7+//39/f/+/v7//v7+//7+ - /v/+/v7//v7+//39/f/9/f3//f39//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//f39//39/f/9/f3//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//f39//39/f/9/f3//Pz8//r6+v/39/f/9fX1//Tz9P/z8/H/9fLy/7qA - TP+rZyyopFgW/vLv6P/y8/L/8/Pz//Pz8//Ly8v/1dXV//Ly8v/09PT/9fX1//X19f/39/f/9/f3//f3 - 9//4+Pj/+Pj4//n5+f/5+fn/+fn5//r6+v/7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7 - +//7+/z/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//r6 - +v/5+fn/+fn5//n5+f/4+Pj/+Pj4//f39//39/f/9/f3//X19f/09PT/9PT0//Ly8v/y8vL/9PT0//n5 - +f/08/T/8/Px//Xy8v+5gEz/q2cqqKRWE/706d//8vPy//Pz8//z8/P/x8fH/8/Pz//z8/P/9PT0//Pz - 8//z8/P/9PT0//T09P/z8/P/8vLy//Ly8v/z8/P/8vLy//Ly8v/y8vL/8vLy//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//T09P/09PT/8vLy//Pz9P/z8/P/8vLz//Pz8//09PT/9PT0//T09P/09PT/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8vLy//Ly8v/y8vL/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz//j4+P/7+/v/8/Pz//Pz8f/18vL/uYBL/6pnKqilVA/+7+LW//Lz8//z8/P/8fHx/8TE - xP/Nzc3/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/9PT0//T09P/z8/P/8/Pz//T0 - 9P/09PT/9PT0//Pz8//09PT/8vLy//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Pz8//5+fn//Pz8//Ly8v/z8vH/9fLy/7mAS/+qZyqopVQN/u3f - 0v/z8/P/8vLy/+3t7f/ExMT/y8vL//Ly8v/09PT/8/Pz//Pz8//09PT/9PT0//T09P/z8/P/8/Pz//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/7e3t/+3t7f/t7e3/7u7u//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//o6Oj/7Ozs/+3t7f/t7e3/8fHx//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/+/v7//39/f/z8/P/8/Px//Ty - 8v+6gEz/q2ctqKZTDf7t39L/8vLy//Ly8v/o6Oj/xMTE/8nJyf/y8vL/9PT0//Pz8//z8/P/9PT0//T0 - 9P/09PT/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/2tra/6mpqf/IyMj/yMjI/7m5 - uf/l5eX/9PT0//T09P/09PT/9PT0//T09P/y8vL/Wlpa/8XFxf/IyMj/vLy8/5CQkP/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//v7 - +//9/f3/8/Lz//Py8f/08vL/uoBO/6tnLaimUw3+7d/S//Ly8v/y8vL/5OTk/8XFxf/Jycn/7+/v//Pz - 8//z8/P/8vLy//T09P/y8vL/8/Pz//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/7Ky - sv8bGxv/AAAA/wAAAP9iYmL/2tra//T09P/09PT/9PT0//T09P/09PT/8PDw/y4uLv8BAQH/AAAA/wIC - Av82Njb/7u7u//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/7+/v//v7+//T09P/z8/H/9PLy/7qATP+qZyyoplMN/u3f0v/y8vL/8/Pz/+Dg - 4P/ExMT/x8fH//Hx8f/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P+pqan/IyMj/wAAAP8AAAD/YmJi/9zc3P/09PT/9PT0//T09P/09PT/9PT0//Dw - 8P8vLy//AQEB/wAAAP8GBgb/NDQ0/+Xl5f/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P//Pz8//7+/v/19fX/8/Px//Xy8v+5gEv/qmcqqKZT - Df7t39L/8/Pz//Pz8//d3d3/xMTE/8fHx//x8fH/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/paWl/ykpKf8AAAD/AAAA/zo6Ov+VlZX/iIiI/3Jy - cv9sbGz/a2tr/3Fxcf+Li4v/Kioq/wAAAP8AAAD/BgYG/zQ0NP/Z2dn/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//z8/P/+/v7/9vb2//Py - 8f/18vL/uoFL/6pnKqimUw3+7d/S//Pz8//z8/P/3Nzc/8XFxf/Gxsb/8fHx//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz//Pz8//z8/P/9PT0//T09P/z8/P/8/Pz//Pz8//z8/P/9PT0/6Wlpf8tLS3/AAAA/wAA - AP8BAQH/ExMT/xEREf8aGhr/Gxsb/xsbG/8YGBj/EBAQ/wgICP8AAAD/AAAA/wcHB/80NDT/zs7O//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//8/Pz//v7+//f39//z8vH/9fLy/7qAS/+rZyqoplMN/u3f0v/z8/P/8/Pz/9nZ2f/FxcX/xcXF//Dw - 8P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8/Pz//T09P/09PT/8/Pz//Pz8//z8/P/8/Pz//T0 - 9P+lpaX/Ly8v/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8HBwf/NDQ0/8/Pz//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P//f39//7+/v/4+Pj/8vLx//Ty8v+5gEv/q2cqqKZTDf7t39L/8/Pz//Pz - 8//Z2dn/xcXF/8bGxv/w8PD/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//09PT/9PT0//Pz - 8//z8/P/8/Pz//Pz8//09PT/paWl/y4uLv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/BwcH/zQ0NP/Ozs7/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//39/f/+/v7/+Pj4//Ly8f/08vL/uoBN/6pn - LKimUw3+7d/R//Pz8//z8/P/2NjY/8TExP/FxcX/8PDw//Pz8//z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/8/Pz//T09P/09PT/9PT0/6Wlpf8qKir/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wcHB/80NDT/0dHR//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//9/f3//v7+//n5 - +f/y8vH/9PLy/7qBTf+qZyyoplMN/u3f0v/z8/P/8/Pz/9bW1v/ExMT/xcXF/+/v7//z8/P/8/Pz//Pz - 8//09PT/9PT0//T09P/09PT/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P+oqKj/JSUl/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8GBgb/NDQ0/9ra - 2v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/P//f39//7+/v/5+fn/8vLx//Ty8v+6gU3/qmcqqKZTDf7t39L/8/Pz//Pz8//V1dX/xcXF/8TE - xP/u7u7/8/Pz//Pz8//z8/P/9PT0//T09P/09PT/8/Pz//Pz8//z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/rKys/x4eHv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/BQUF/zQ0NP/p6en/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//39/f/+/v7/+vr6//Py8f/08vL/uoFM/6tnKqimUw3+7d/S//Pz - 8//z8/P/1NTU/8TExP/ExMT/7u7u//Pz8//z8/P/8vLy//T09P/y8vL/8/Pz//Pz8//z8/P/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/8XFxf8yMjL/JSUl/yUlJf8jIyP/AgIC/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wsLC/86Ojr/RkZG/0dHR/9bW1v/8fHx//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/9/f3//v7+//r6+v/y8vH/9PLy/7qB - TP+rZyqoplMN/u3f0v/z8/P/8/Pz/9XV1f/ExMT/xMTE/+7u7v/z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/w8PD/z8/P/8bGxv/Hx8f/y8vL/2Ji - Yv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP9BQUH/zs7O/8vLy//Kysr/3t7e//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT//f39//7+ - /v/7+/v/8vLx//Xy8v+6gUz/qmcqqKZTDf7t39L/8/Pz//Pz8//V1dX/xMTE/8XFxf/u7u7/8/Pz//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//z8/P/8/Pz//Dw8P+BgYH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Nzc3/+vr6//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//39/f/+/v7/+/v7//Ly8f/18vL/uoBM/6tnKqimUw3+7d/S//Ly8v/y8vL/19fX/8XF - xf/FxcX/7u7u//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/x8fH/gYGB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zU1 - Nf/r6+v/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/9/f3//v7+//r6+v/y8vH/9fLy/7qATP+rZyqoplMN/u3f - 0v/y8vL/8vLy/9jY2P/FxcX/xcXF/+/v7//z8/P/8/Pz//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/7+/v/4GBgf8DAwP/AwMD/wMD - A/8DAwP/AwMD/wMDA/9AQED/7Ozs//Ly8v/y8vL/8vLy//Ly8v/y8vL/8/Pz//Pz8//09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//z8/P/8/Pz//Pz8//09PT/9PT0//T09P/09PT//f39//7+/v/6+vr/8vLx//Xy - 8v+6gEz/q2cqqKZTDf7t39L/8/Pz//Pz8//Z2dn/xcXF/8XFxf/w8PD/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/jY2N/0xMTP9PT0//UVFR/1FRUf9QUFD/TExM/0tL - S//AwMD/1NTU/9TU1P/U1NT/1NTU/9TU1P/X19f/dHR0/2JiYv9YWFj/VlZW/1ZWVv9XV1f/XFxc/2Nj - Y//Dw8P/9PT0//T09P/09PT/9PT0//T09P/z8/P/8vLy//Pz8//z8/P/9PT0//T09P/09PT/8/Pz//39 - /f/+/v7/+vr6//Ly8f/18vL/uoFM/6pmKqimUw3+7d/S//Pz8//z8/P/2tra/8XFxf/Gxsb/8PDw//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/6Wlpf8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8HBwf/qqqq//T09P/09PT/9PT0//Pz8//z8/P/8/Pz/6+vr/8EBAT/AQEB/wQE - BP8FBQX/AgIC/wAAAP8FBQX/lpaW//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//z8/P/9PT0//Pz8//9/f3//v7+//n5+f/y8vH/9fLy/7qBTP+qZyqoplMN/u3f0v/z8/P/8/Pz/9zc - 3P/FxcX/xsbG//Hx8f/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P+ioqL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Dw8P/4SEhP/09PT/9PT0//T09P/z8/P/8vLy//Pz - 8/+qqqr/BAQE/wAAAP8AAAD/AAAA/wAAAP8AAAD/DAwM/3p6ev/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//y8vL/8/Pz//T09P/z8/P//f39//7+/v/5+fn/8vLx//Xy8v+6gUz/q2cqqKZT - Df7t39L/8/Pz//Pz8//e3t7/xcXF/8fHx//x8fH/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/oqKi/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xMTE/93d3f/9PT0//T0 - 9P/09PT/8/Pz//Pz8//09PT/qKio/wQEBP8AAAD/AAAA/wAAAP8AAAD/AAAA/xEREf9zc3P/8vLy//Ly - 8v/z8/P/8vLy//Pz8//09PT/9PT0//T09P/09PT/8/Pz//Pz8//09PT/8/Pz//z8/P/+/v7/+Pj4//Ly - 8f/18vL/uoFM/6pnKqimUw3+7d/S//Pz8//z8/P/4ODg/8XFxf/IyMj/8fHx//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/6Kiov8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8TExP/dnZ2//T09P/09PT/8/Pz//Pz8//z8/P/8vLy/6ioqP8EBAT/AAAA/wAAAP8AAAD/AAAA/wAA - AP8SEhL/cnJy//Ly8v/z8/P/8/Pz//Pz8//z8/P/9PT0//T09P/z8/P/8vLy//T09P/09PT/9PT0//Pz - 8//7+/v//v7+//f39//z8vH/9fLy/7qBTP+qZyqoplMN/u3f0v/z8/P/8/Pz/+Tk5P/FxcX/ycnJ//Hx - 8f/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P+jo6P/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/Dg4O/4KCgv/09PT/9PT0//Pz8//z8/P/8/Pz//Ly8v+pqan/BAQE/wAA - AP8AAAD/AAAA/wAAAP8AAAD/Dw8P/3R0dP/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Ly - 8v/09PT/9PT0//T09P/z8/P/+/v7//7+/v/39/f/8/Lx//Xy8v+6gUz/q2cqqKZTDf7t39L/8/Pz//Pz - 8//p6en/xMTE/8rKyv/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/o6Oj/wICAv8DAwP/BAQE/wQEBP8EBAT/AgIC/wgICP+qqqr/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/r6+v/wQEBP8AAAD/AAAA/wAAAP8AAAD/AAAA/wgICP+Pj4//9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//v7+//+/v7/9vb2//Py8f/18vL/uoFM/6tn - KqimUw3+7d/S//Pz8//z8/P/7u7u/8TExP/Ly8v/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/+Dg4P/Pz8//y8vL/8rKyv/Kysr/ysrK/8vLy/+/v7//0NDQ//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/9LS0v+hoaH/tbW1/76+vv/Hx8f/vr6+/7CwsP+Xl5f/tLS0//T0 - 9P/z8/P/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//7+/v//v7+//T0 - 9P/z8vH/9fLy/7qBTP+rZyqoplMN/u3f0v/z8/P/8/Pz//Hx8f/FxcX/zc3N//Pz8//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8vLy//Ly8v/y8vL/8vLy//Ly - 8v/y8vL/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//Pz8//x8fH/8fHx//Hx8f/w8PD/8PDw//Dw - 8P/x8fH/8vLy//Ly8v/09PT/8/Pz//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/P/+/v7//7+/v/z8/P/8/Lx//Xy8v+6gUz/qmcqqKZTDf7t39L/8/Pz//Pz8//z8/P/x8fH/9DQ - 0P/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//r6+v/9/f3/8vLy//Ly8f/18vL/uoFM/6tnKqimUw3+7d/S//Pz - 8//09PT/9PT0/8vLy//Y2Nj/8/Pz//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Pz - 8//y8vP/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/x8fH/8fHx//Hx8v/w8PD/8PDw//Hx - 8f/x8fH/8fHx//Hx8f/x8fH/8vLy//Hx8f/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vP/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/8/Pz//T09P/09PT/9PT0//Pz8//4+Pj//Pz8//Ly8v/z8/H/9fLy/7qA - Tf+oYyaoplMN/u3f0v/z8/P/9PT0//T09P/R0dH/4uLi//Ly8v/w8PD/6+vr/+Pj4//c3Nz/29vb/9nZ - 2f/V1dX/0tLS/9DQ0P/MzMz/ycnJ/8nJyf/IyMj/yMjI/8jIyP/IyMj/yMjI/8jIyP/IyMj/yMjI/8jI - yP/Jycn/yMjI/8jIyP/IyMj/yMjI/8fHx//Hx8f/x8fH/8jIyP/Hx8f/yMjI/8jIyP/IyMj/yMjI/8jI - yP/Jycn/ycnJ/8zMzP/R0dH/09PT/9bW1v/Z2dn/29vb/93d3f/k5OT/7Ozs//Hx8f/y8vL/9/f3//v7 - +//z8/P/8/Px//Xy8v+5gE3/n1gYqKZTDf7t39L/8/Pz//T09P/09PT/5eXl/9fX1//Kysr/xMTE/8PD - w//Dw8P/w8PD/8TExP/ExMT/w8PD/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/w8PD/8PD - w//ExMT/zc3N/+Tk5P/5+fn/9PP0//Pz8f/18vL/uYBN/6ljJcGmUw3+7d/S//Pz8//09PT/9PT0//T0 - 9P/y8vL/8vLz//Hx8f/r6+v/5OTk/+Li4v/f39//3Nzc/9jY2P/V1dX/09PT/9HR0f/Pz9D/z8/P/87O - zv/Nzc3/zc3N/83Nzf/MzMz/zMzM/8zMzP/MzMz/zMzM/8zMzP/MzMz/ysrK/8rKyv/MzMz/zMzM/8zM - zP/MzMz/zMzM/8zMzP/MzMz/zc3N/83Nzf/Nzc3/zs7O/8/Pz//Pz9D/0dHR/9PT0//V1dX/2dnZ/93d - 3f/g4OD/4uLi/+bm5v/t7e3/8fHx//Pz8//z8/P/9fX1//Tz9P/z8/H/9fLy/7mBTf+pXyHTpVMM/u3f - 0v/z8/P/9PT0//T09P/09PT/8/Pz//Pz8//z8/P/8/P0//Pz8//z8/P/8/P0//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/P0//Pz9P/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//y8vL/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//08/T/8/Px//Xy - 8v+5gU7/sGoq+KZTDP7t3tL/8vPy//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Lz - 8//x8/H/8/Lx//Dy8f/z8vL/uoBN/61kIv+kVA/+7+DR/+/t6v/y7er/8u7r//Lu6//y7uv/8u7r//Lu - 6//y7er/8u7p//Lu6f/y7uv/8u7r//Lu6//y7uv/8u7r//Lu6//y7uv/8u7r//Lu6//y7er/8u7p//Lu - 6f/y7uv/8u7r//Lu6//y7ur/8u7q//Lt6v/y7uv/8u3p//Lt6f/x7en/8u3q//Ht6v/x7er/8u3q//Lu - 6v/y7ur/8u7q//Lt6f/y7en/8u7p//Lu6v/y7ur/8u7q//Lu6v/y7ur/8e3q//Lt6f/x7un/8u3p//Lu - 6v/y7ur/8u7r//Lu6//y7ev/8uzr//Hv8f/x7uj/8u/s/7l/TP+tXBj/p1UQ/u+4if/xuIn/8riK//K4 - iv/yuIr/8rmK//K5iv/yuYr/8riK//K4iv/yuIr/8rmK//K5iv/yuYr/8rmK//K5iv/yuYr/8rmK//K5 - iv/yuYr/8riK//K4iv/yuIr/8rmK//K5iv/yuYr/8rmK//K5iv/yuIr/8rmK//K4iv/yuIr/8riK//K4 - iv/yuIr/8riK//K4iv/xuIr/8biK//K5iv/yuIr/8riK//K4iv/yuIr/8riK//K4iv/yuIr/8riK//K4 - iv/yuIr/8riK//K4iv/yuYr/8rmK//K5iv/yuYr/8riK//G4h//uupP/7ad2/+ure/++djn/qVUN/6ha - Ff7xtoP/9LJ9//Wzfv/1s37/9LJ9//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Sy - ff/0sn3/9bN+//Syff/0sn3/9bN+//Syff/0sn3/9bN+//Syff/0sn3/9LJ9//Syff/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Wzfv/1s37/9LJ9//Syff/0sn3/9LJ9//Sy - ff/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/1s37/9bN+//Wyff/0sn3/8adw//Gf - Zv/xn2X/xHIy/6pUDP+uYB7+8LaH//Wyff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/0sn3/9LJ9//Wzfv/0sn3/9LJ9//Syff/0sn3/9LJ9//Wzfv/0sn3/9LJ9//Sy - ff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9LJ9//Sy - ff/1sn3/9LJ9//Gocf/xn2b/8J5l/8RyMf+sWRP/r2Mj/vC2h//1sn3/9LJ9//Syff/0sn3/9LJ9//Sy - ff/0sn3/9bN+//Wzfv/0sn3/9bN+//Wzfv/1s37/9LJ9//Syff/1s37/9LJ9//Syff/0sn3/9LJ9//Sy - ff/1s37/9LJ9//Syff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Sy - ff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/0sn3/9LJ9//Syff/0sn3/9bN+//Syff/wp3D/8J9m/++fZv/GfUL/sGUk/69jIv7wt4X/9LJ+//Wz - fv/1s37/9bN+//Wzfv/1s37/9LJ9//Wzfv/1s37/9LJ9//Wzfv/1s37/9bN+//Syff/0sn3/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9LJ9//Wzfv/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/0s33/8KZw//CfZv/vn2b/yYJG/6he - ItCpWhb+8rOA//Oye//zsnz/87J8//SyfP/0snz/87J9//SxfP/0snz/9LJ8//OyfP/zsnz/87J8//Sy - fP/0sX3/9LF9//WyfP/1sn3/9bJ9//Wyff/1sn3/9bJ9//SyfP/1s33/9LJ9//Syff/1s33/9bN9//Oz - e//zs3z/87N8//SzfP/0s3z/9bN8//Wze//1snz/9bJ9//Wzff/1s33/9bN9//Wzff/1sn3/9bJ9//Wz - ff/1sn3/9bJ9//Wyff/1sn3/9bJ9//SyfP/0snz/9LJ8//WyfP/1snz/9LN8//SzfP/zsnz/87J8/++m - bv/wnmb/7p5l/8B3O/+rYyqkqFQM/uincP/0sXv/9Ld8//bAfP/3wnz/9sR8//bEe//3xHv/98V8//fF - fP/3xXz/98Z8//fGfP/3xnz/98Z8//fGfP/4x3v/+Md7//fHe//3x3v/98d7//fHe//4x3z/+Ml8//jJ - fP/4yXz/+Ml8//jJff/4yX3/+Ml8//jJfP/4yX3/+Ml9//jJff/4yX3/+Ml8//jJfP/4yHz/+Mh8//jI - fP/4yHz/+Md8//jHfP/4x3z/+Md8//jHff/3xn3/98Z9//fGff/3xnz/98Z8//fFfP/4xXz/+MR8//fE - fP/3xXz/9sR8//bDfP/yunT/8rRw/++haf+vXxz+p2MqWqRWFPPDgET/8rF9//Gye//0uHr/9b17//bB - ff/2xHz/98d7//bJev/2y3r/98x7//jOev/4znv/99B7//jRe//40nz/+NN9//jTff/41H3/+dR9//nV - ff/41H3/+dV9//nWff/41X3/+NV9//jWff/41n3/+dV+//jVff/41X3/+NV9//nVfv/41X3/+dV9//jV - ff/41n3/+NV9//nVfv/41X3/+dV+//nVff/51X3/+dR9//jUfP/41Hz/99N7//fSe//30Xv/99B7//jO - e//4zXv/+Mt7//jLe//3yHz/9sV8//XDfP/0v3n/8K9q/+yjZf/klFj/pFYV/KVwQyKraTWbp1MO9tSS - Vv/yrHb/8LB6//Oxff/0sn3/8rJ8//KwfP/ysHz/87F8//OxfP/ysHr/8bB6//Kwev/0sHn/87F4//Gx - eP/xsXj/8bJ4//KzeP/ztHj/87R4//O1eP/ztnn/87Z5//S3ef/0t3n/9Ld5//O4ef/zuHn/9Lh5//O4 - ef/zuHn/9bh4//O4ef/0uHn/87h5//O2ef/ztnn/87V4//O0eP/ztHj/8rN4//KyeP/xsnf/9LJ4//Ow - d//zsHr/9LB7//Owev/ysHr/8rB6//KxfP/ysX3/8rJ8//Czf//us4D/8Kt3//CcZP/tmWD/vW4r/ad0 - QYYAAAAA1NSqBqFkNy6lYye/qF8e/7JlIv+1aCf/tmkn/7dpJf+4aCT/uGgl/7hoJf+4aCX/t2gl/7do - Jf+3aCP/uGgk/7hoJP+5aCX/uWgl/7tpJv+8aif/vWwp/71sKv+9bSr/vm0t/75uLf/Aby7/wXAu/8Fw - Lv/BcS//wnIx/8JyMf/CcjH/wnIx/8FxMP/BcC7/wHAu/8BvLv+/bi3/vm0t/71tK/+9bCr/vGwp/7xr - Jv+7aSX/umgk/7loJf+5aCX/uGgk/7hpJP+3aCT/t2cl/7doJf+4aSf/uWkn/7hsKv+5dDr/unY7/7ht - Lv+zZB7/rF0c+KdoMX0AAAAAAAAAAAAAAAAAAAAAAAAAAMaZcS2yaCxMqVMDTalPA02pTwdNqU8KTalT - Ck2pUwpNqVMKTalTCk2pUwpNqVMKTalTCk2pUwpNqVMKTaVPB02lTwdNqVMKTalWDU2pVg1NrFYNTaxW - EU2sVhFNr1kUTa9dFE2vXRRNr10XTa9dF02vXRdNr10XTa9dFE2vXRRNr10UTa9dFE2sXRRNrFkRTaxW - EU2sVg1NqVYNTalWDU2pUwpNpVMKTaVPCk2pUwpNqVMKTalTCk2pUwpNqVMKTalTCk2pUwdNpU8HTalT - B02pTwdNpU8KTaVPB02lTwpNq2EsTLqTYhoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP// - /////////////////////////////////////////////////////////////8AAAAAAAAADgAAAAAAA - AAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAcAAAAAAAAAH//////////////////////// - ////////////////////////////////////////KAAAAIAAAAAAAQAAAQAgAAAAAAAAAAIAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/VoTHaj1RSt1oZUqVRDFKlVAZSq1QGUqtUBlKrVAZSq1QGUqtR - BlKuUQlSrlEJUqhUBlKoVAZSqFEGUqhRDFKoUQxSqFEMUqhRDFKoUQxSqFEMUqhRDFKoUQxSqFEMUqhR - DFKoUQxSqFEMUqhRDFKoUQxSqFEMUqhRDFKoUQxSqFEMUqhRDFKoUQxSqFQMUqtUDFKrVAxSq1QQUqtX - EFKrVxBSq1cQUq5XE1KrVxNSq1cWUq5XFlKuVxZSrlcWUrFaFlKxWhZSsVoWUrFaFlKxWhZSsV0WUrFd - FlKxXRlSsV0ZUrFdFlKxXRZSsV0ZUrFdGVKxXRlSsV0ZUrFdGVKxXRZSsV0WUrFdFlKxWhZSsVoWUrFa - FlKxWhZSrlcWUq5XFlKuVxZSrlcWUq5XFlKrVxBSq1cQUqtXEFKrVBBSq1QMUqtUDFKrUQxSqFEMUqhR - DFKoUQxSqFEMUqhRDFKoUQxSqFEMUqhRDFKoUQxSqFEMUqhRDFKoUQxSqFEMUqhRDFKoUQxSqFEMUqhR - DFKoUQxSqFEMUqhRDFKoUQxSqFEMUqhRCVKrUQlSq1EJUqhRCVKoUQlSq1QMUrRaGVLNfztS159jUvfU - nkIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMeeeDegazipn1wh/6FR - C/+pUgf/p1QI/6VUCf+pUwr/qlIK/6pSCv+qUgr/qFIM/6hSDP+oUwv/qFQJ/6hUCP+oVAr/qFQL/6hU - C/+oVAv/qFQL/6hUC/+oVAv/qFQL/6hUC/+oVAv/qFQL/6hUC/+oVAv/qFQL/6hUC/+oVAv/qFQL/6hU - C/+oVAv/qFQL/6lUC/+qVQ7/q1YO/6tWD/+sVxD/rFgQ/6xYEP+tWRH/rloS/65aFP+uWhT/rlsU/69b - FP+vXBb/sVwW/7FdFv+xXRb/sl0Y/7JeGP+xXhj/sV4Y/7JfGf+yXxn/sl8Z/7JfGf+yXxn/sl8Z/7Jf - Gf+yXxn/s18Z/7JeGP+yXhj/sl4Y/7JdF/+yXRf/sV0X/7BcFv+wWxb/sFsV/69bFP+vWhT/rloU/61Z - E/+tWBD/rVgQ/6xXEP+sVg//rFYO/6tVDv+rVAz/q1QM/6pTC/+oUwv/qFQL/6hUC/+oVAv/qFQL/6hU - C/+oVAv/qFQL/6hUC/+oVAv/qFQL/6hUC/+oVAv/qFQL/6hUC/+oVAv/qFQL/6hUC/+oVAv/qFQL/6pU - Cf+pUwr/p1ML/6ZTC/+mUgv/p1IL/6RSDP+dUg//mVYY/6RkLf+jZjjCuYRaW8Gech0AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAC9l2xxm1ca9KlRDf+lVAj/olER/5lOF/+kbDr/t4xh/8qfe//Oo3//zqSA/9Gm - g//Knnb/wZJm/7mFWP+yeEr/q249/6NlMf+bXif/mV0m/5peJ/+aXif/nF4n/5xeJ/+cXif/nF4n/5xe - J/+cXif/nF4n/5xeJ/+cXif/nF4n/5xeJ/+cXif/nF4n/5xeKP+dXyn/nmAq/59hK/+gYiv/oGIr/59j - Lf+fZC7/n2Qu/6BkL/+hZTD/oWUw/6JlMP+jZjL/o2Yy/6NmMv+kaDP/pGgz/6RoM/+laTT/pWk0/6Np - NP+jaTT/o2k0/6RqNf+kajX/pGo1/6RpNP+kaTT/pGk0/6RpNP+laTT/pWk0/6VpNP+laTT/pWk0/6Ro - M/+kaDP/o2cz/6NnM/+jZzP/omYy/6FlMP+hZTD/oGQv/6FlLv+gZC3/oWMs/6BiK/+gYiv/n2Er/55g - Kv+dXyn/nF4o/5tdJv+bXSb/m10m/5tdJv+bXSb/m10m/5tdJv+bXSb/m10m/5tdJv+aXSb/ml4m/5pe - Jv+aXib/ml4m/5peJv+aXib/ml4m/5peJv+ZXib/mV8p/59kMf+kajb/qHA8/6huPv+gZzT/nFwm/5hR - Ev+hUg//pVIJ/6dVCP+oVQz/nlsg77uTbnEAAAAAAAAAAAAAAAAAAAAA2aZ/KKFgJ/arUAf/olIK/7d8 - Sv/Zv6P/8ObZ//bx6//28PH/9fLu//Xy7//18u7/9fLu//Py7//z8u7/9PLt//bz7f/38ur/9/Hq//jx - 6f/48er/+PHq//jx6v/38en/9/Hp//fx6f/38en/9/Hp//fx6f/38en/9/Hp//fx6f/38en/9/Hp//fx - 6f/38en/9/Hq//fx6f/38en/9/Hp//fx6f/38er/9/Hq//fx6//38ev/9/Hr//fx6//38er/+PHq//jx - 6v/48er/+PHq//fx6v/38er/9/Hq//jy6//48uv/9/Hr//fx6//38er/9/Hq//fx6v/38ev/9/Hr//fx - 6//38ev/9/Hr//fx6//38ev/9/Hr//fx6//38er/+PLr//fy6v/38er/9/Hq//jy6//48er/9/Hq//fx - 6v/38er/9vLq//bx6v/38er/9/Hq//fx6v/38er/9/Hq//fx6v/38er/9/Hq//fy6v/38ur/9/Lq//fy - 6v/38ur/9/Lq//fy6v/38ur/9/Lq//fy6v/48ur/+PLq//jy6v/48ur/+PLq//jy6v/48ur/+PLq//jy - 6v/48uv/9/Lr//fx7P/28uz/9/Ls//jy6v/28un/8ujc/+jXxf/Ut5r/t4RX/6FUE/+mUgf/n1YY/6h2 - RnsAAAAAAAAAAL+/fwSlbjrTp1EO/6RVDf+1jGH/9e3l//Pz8v/z8/P/8/Tw//Lz8P/y8fP/8vH0//Ly - 9P/y8vT/8/Pz//T08//09PP/8/Py//T08v/09PP/8/T0//Lz8//z9PT/8/T0//H09P/x9PT/8fT0//H0 - 9P/x9PT/8fT0//H09P/x9PT/8fT0//H09P/x9PT/8fT0//H09P/x9PT/8fT0//H09P/x9PT/8fT0//H0 - 9P/x9PT/8fT0//H09P/w8/P/8fPz//Ly8v/z9PT/8/T0//P09P/z9PT/8PLy//H09P/x9PT/8fT0//H0 - 9P/x9PT/8fT0//H09P/x9PT/8fT0//H09P/x9PT/8fT0//H09P/x9PT/8fT0//H09P/x9PT/8fT0//H0 - 9P/x9PT/8fT0//H09P/x9PT/8fT0//H09P/x9PT/8fT0//H09P/x9PT/8fT0//H09P/z9PT/8/T0//H0 - 9P/x8/P/8PPz//H09P/x9PT/8fT0//Dy8v/x9PT/8fT0//H09P/x9PT/8fT0//H09P/x9PT/8/T0//P0 - 9P/z9PT/8/T0//Lz8//y8/P/8vPz//Lz8//z9PT/8/Pz//Lz8v/y9PP/8vPz//Lz9P/x8/P/8/Pz//L0 - 9P/x8/P/8/Pz//Pz7v/z8+v/3cCp/55YG/+sVQb/n2Ag/8KSbRUAAAAAtIpkPZhUE/ynUAz/rHM///bv - 4v/z8/L/8vLy//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/8vLy//Pz - 8//09PT/8/Pz//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/8vLy//T0 - 9P/09PT/9PT0//T09P/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9fLy/+zx9P/y8u3/59Cs/6ZW - F/+jUgv/rX5Y5QAAAACvdkeppVQL/6RSD//avKL/7PPw//Hy8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//Pz8//y8vL/8vLy//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//z8/P/9PT0//Ly8v/09PT/9PT0//T09P/09PT/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/P/8/Pz//T09P/08fT/8PH1/+vy8f/w8ur/r3dH/6lUCP+cVSD7yaJ8IaZjMtqnUQv/pGEl//rw - 5f/s8vD/8/T0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/P/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz//Pz - 8//09PT/9PT0//T09P/y8vL/8/Pz//Pz8//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz//Pz8//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Lz8v/z8vP/9fPw//Dw - 9P/Ho33/pVMJ/6ZSDvymbz0uplkk6apRC/+4hVD/8/Dy//Py7//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//T09P/09PT/9PT0//Ly8v/z8/P/8vLy//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8vLy//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Px//Hw9//y8vD/8/Dy/9q6n/+kURD/pVYM/7eJWlKpWxz8qFIJ/82i - fv/08fL/8PLy//Pz8//09PT/9PT0//T09P/z8/P/8vLy/+Xl5f/x8fH/8fHx//Pz8//z8/P/8/Pz//Ly - 8//z8/P/8vLy//Ly8v/z8/P/8/Pz//Pz8//09PT/9PT0//X19f/09PT/9PT0//b29v/29vb/9vb2//b2 - 9v/29vb/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//j4+P/4+Pj/+Pj4//j4+P/5+fn/+fn5//n5 - +f/4+fn/+Pn5//j5+f/5+fn/+fn5//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+/v7//v7 - +//7+/v/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/5+fr/+fn6//n5+f/5+fn/+fn5//n5 - +f/5+fn/+Pj4//j4+P/4+Pj/+Pj4//j4+P/39/f/9/f3//b29v/4+Pj/9/f3//f39//39/f/9vb2//b2 - 9v/19fb/9vb2//b29v/19fX/9fX1//T09P/09PX/8/P0//Pz8//09PT/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Ly8v/z8/P/8vLy//T09P/09PT/9PT0//T09P/z8/L/8vLy//Py - 8//y8/H/4cSp/6JRD/+oVA7/rnlLUqpYFv6lUwv/2bSU//Lx8v/y8vP/9PT0//Pz8//z8/P/9PT0//Pz - 8//y8vP/x8fH/+Pj4//z8/P/9PT1//b29v/29vf/+Pj4//r6+v/7+/v/+/z8//z8/P/8/Pz//f39//39 - /f/+/v7//v7+//7+/v/9/f3//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/9/f3//f39//39/f/9/f3//f39//39/f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//39/f/9/f3//f39//39 - /f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//f39//39/f/9/f3//Pz8//v7+//7+/v/+fn5//f39//29vb/9vb2//T09P/z8/P/8vLy//Ly - 8v/y8vL/9PT0//Ly8v/z8/P/9PT0//Pz8//z8/H/9fL0//L08f/gxaj/olIP/6lTD/+ueUtSqlUQ/qRT - C//YvZ7/8fLz//Xw8v/09PT/8/Pz//Ly8v/y8vL/9vb3//j4+P/09PT/+fn5//v7+//8/Pz//f39//7+ - /v/+/v7//v7+//39/f/9/f3//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//39/f/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//39/f/9/f3//f39//39/f/9/f3//f39//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//f39//39/f/9/f3//f39//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//f39//39 - /f/+/v7//v7+//39/f/9/f3//f39//39/f/8/Pz/+vr6//n5+f/19fX/8vLy//Pz8//09PT/8/Pz//Pz - 8f/18vT/8vTx/+DFqP+iUg//qVMP/655S1KqUwz+olIL/9vBpf/v8vT/9vLy//T09P/09PT/8/Pz//Ly - 8v/z8/T/6Ojp/+rq6v/x8fH/+vr6//39/f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/9/f3//f39//7+/v/+/v7//v7+//39/f/8/Pz/+/v8//r6 - +v/5+fn/+Pj4//v7+//y8vP/8/Pz//T09P/z8/P/8/Px//Xy9P/y9PH/4MWo/6JSD/+pUxD/rnlLUqhT - Cv6jUwv/2r+k/+7y9P/y8/H/9PT0//T09P/y8vL/8/Pz//Hx8f/IyMj/xMTE/8jIyP/u7u7/8vLy//Pz - 8//09PT/9fX1//f39//4+Pj/+fn5//r6+v/7+/v//Pz8//z8/P/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/9/f3//f39//39/f/9/f3//f39//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//z8/P/8/Pz//Pz8//z8/P/7+/v/+fn5//j4 - +f/4+Pj/9fX1//T09f/09PT/8vLy//Ly8v/y8vL/8vLy//Ly8v/39/f//f39//b29v/z8/P/9PT0//Pz - 8//z8/H/9fL0//L08f/gxKj/olIP/6lTEP+ueUtSq1MK/qNTC//ZvqH/8PL0//Lz8f/09PT/9PT0//T0 - 9P/09PT/7+/v/8XFxf/ExMT/xcXF/+zs7P/z8/P/8/Pz//Pz8//09PT/9PT0//Pz8//z8/P/8/Pz//T0 - 9P/09PT/9PT0//T09P/z8/P/9PT0//T09P/z8/P/8/Pz//Pz8//09PT/9fX1//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//X19f/19fX/9fX1//b29v/29/f/9vf3//f39//39/f/9/f3//f39//39/f/9/f3//f3 - 9//39/j/9/f4//f3+P/39/j/9/f4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//f3+P/39/j/9/f4//f3 - +P/39/j/9/f4//f3+P/39/j/9/f4//f3+P/39/f/9/f3//b39//29/f/9vf3//b39//29/f/9fb2//X1 - 9f/19fX/9fX1//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/T/8/Pz//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//09PT/8/Pz//Pz8//z8/P/9PT0//T0 - 9P/z8/P/8/Pz//r6+v/+/v7/+vr6//Pz8//09PT/8/Pz//Pz8f/18vT/8vTx/+DEqP+iUw3/qVQO/655 - S1KsUwn+pFQL/9m5m//y8fL/8vLy//T09P/09PT/9PT0//T09P/t7e3/xcXF/8TExP/ExMT/6enp//Pz - 8//09PT/9PT0//T09P/09PT/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Ly - 8v/y8vL/8/Pz//T09P/09PT/8vLy//Ly8v/y8vL/8/Pz//Pz8//z8/P/9PT0//Ly8v/z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8vLy//Pz8//z8/P/8/Pz//T09P/09PT/8/Pz//Pz8//z8/P/8vLy//Ly - 8v/y8vL/8/Pz//Pz8//z8/T/8vLz//Ly8v/y8vL/8vLy//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8vLy//Ly8v/y8vL/8vLy//Pz8//z8/P/9PT0//T09P/z8/P/9PT0//Pz8//z8/P/8/Pz//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P//Pz8//39/f/8/Pz/9PT0//T0 - 9P/z8/P/8/Px//Xy9P/y9PL/4MSo/6JTDf+pVA7/rnlLUqxTCv6lVAn/1rOS//Py8f/x8vL/9PT0//T0 - 9P/09PT/8/Pz/+vr6//ExMT/xMTE/8XFxf/j4+P/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//y8vL/8/Pz//Pz8//09PT/8/Pz//Pz8//09PT/9PT0//T09P/y8vL/8vLy//Pz8//z8/P/9PT0//T0 - 9P/y8vL/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz//Pz8//09PT/8/Pz//Pz8//z8/P/8/Pz//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz//Pz8//z8/P/9PT0//Pz - 8//z8/P/8/Pz//Pz8//09PT/9PT0//T09P/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz//Ly8v/8/Pz//f39//z8/P/09PT/8/Pz//Pz8//z8/H/9fL0//L08v/gxKj/olMN/6hT - Df+ueUtSq1MK/qdTCf/TrYv/8/Lw//Hz8//09PT/9PT0//T09P/z8/P/6enp/8PDw//Dw8P/xcXF/97e - 3v/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/y8vL/8vLy//Pz8//09PT/9PT0//T09P/09PT/9PT0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Ly8v/y8vL/8/Pz//T09P/z8/P/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8vLz//z8/f/+/v7//f39//T0 - 9P/z8/P/8/Pz//Pz8f/18vT/8vTy/+DEqP+iUw3/qFMN/655S1KqUwv+qFQI/8ynhf/08vD/8PPz//T0 - 9P/09PT/8vLy//Pz8//m5ub/xcXF/8PDw//ExMT/2NjY//Pz8//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8/Pz//T09P/09PT/9PT0//T0 - 9P/09PT/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//z8/P/9PT0//Pz - 8//y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//19fX//f39//7+/v/9/f3/9PT0//Ly8v/z8vL/8/Px//Xy9P/y9PH/4MSo/6JT - Df+oUw3/rnlLUqtUCf6qVAr/yqSC//bz8P/z8/P/9PT0//T09P/y8vL/8vLy/+Li4v/FxcX/xMTE/8PD - w//U1NT/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//X19f/+/v7//v7+//39 - /f/19fX/8/Pz//Py8v/z8/H/9fL0//L08f/gxaj/olIP/6lTEP+ueUtSrFQJ/qpUCv/KpIL/9vPw//Pz - 8//09PT/9PT0//Pz8//y8vL/3d3d/8TExP/FxcX/w8PD/8zMzP/z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/6+vr/+Pj - 4//f39//5OTk/+Hh4f/f39//5+fn/+/v7//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Pz8//v7+//5OTk/9/f3//g4OD/4uLi/9/f3//k5OT/7u7u//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/9vb2//7+/v/+/v7//f39//b29v/z8/P/8/Ly//Pz8f/18vT/8vTx/+DF - qP+iUg//qVMQ/655S1KsVAn+qlQK/8qkgf/28+//8vLy//T09P/y8vL/8vLy//Ly8v/a2tr/xMTE/8XF - xf/ExMT/yMjI//Pz8//09PT/9PT0//T09P/09PT/8vLy//T09P/y8vL/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Ly8v/y8vL/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/+vr6//ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/y8vL/9ra - 2v/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/XV1d/2xs - bP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/Dw8P/4ODg//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//39/j//v7+//7+ - /v/9/f3/9/f3//Ly8v/z8vL/8/Px//Ty9P/x8/H/4MSo/6JTEP+pUxD/rnlLUqxTCf6qVAr/y6SB//bz - 7//y8vL/8vLy//T09P/z8/P/8vLz/9bW1v/FxcX/xcXF/8TExP/ExMT/8/Pz//T09P/09PT/9PT0//T0 - 9P/y8vL/9PT0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/wsLC/0pK - Sv+3t7f/ycnJ/8zMzP/Nzc3/ycnJ/6+vr/+rq6v/x8fH//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/+/v7/82Njb/Nzc3/8HBwf/Jycn/zMzM/8nJyf/Jycn/p6en/zEx - Mf97e3v/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//n5+f/+/v7//v7+//7+/v/4+Pj/8vLy//Py8v/z8/H/9PL0//Lz - 8f/hxan/o1QQ/6lTEP+ueUtSrFMJ/qpUCv/KpIH/9vPv//Ly8v/y8vL/8/Pz//Ly8v/y8vL/0tLS/8XF - xf/FxcX/xMTE/8PDw//w8PD/8vLy//Ly8v/09PT/9PT0//Ly8v/y8vL/8vLy//T09P/09PT/8vLy//Ly - 8v/y8vL/9PT0//T09P/y8vL/8vLy//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v+Pj4//Nzc3/wEBAf8AAAD/AAAA/wAAAP8AAAD/AAAA/7+/ - v//Gxsb/7Ozs//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/7u7u/zg4 - OP81NTX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/IyMj/1paWv/x8fH/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/+fr6//7+ - /v/+/v7//v7+//n5+f/y8vL/8/Ly//Pz8f/08vT/8vPx/+DEqP+jUw//qFMP/655S1KsVAn+qlQK/8qk - gf/28+//8vLy//Ly8v/09PT/8vLy//Ly8v/Q0ND/xcXF/8XFxf/ExMT/w8PD/+7u7v/y8vL/8vLy//T0 - 9P/09PT/8vLy//Ly8v/y8vL/9PT0//T09P/y8vL/8vLy//Ly8v/09PT/9PT0//Ly8v/y8vL/8/Pz//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy/1pa - Wv83Nzf/BQUF/wAAAP8AAAD/AAAA/wAAAP8AAAD/v7+//8XFxf/s7Oz/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/u7u7/Nzc3/zQ0NP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8sLCz/VVVV/+7u7v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Pz8//7+/v//v7+//7+/v/+/v7/+vr6//Ly8v/z8vL/8/Px//Xy - 9P/z9PL/4MSo/6NTDv+oUw//rnlLUqxUCf6qVAr/yqSB//bz7//y8vL/8vLy//T09P/x8fL/8vLy/83N - zf/FxcX/xcXF/8PDw//Dw8P/7u7u//Pz8//z8/P/9PT0//T09P/z8/P/8/Pz//Pz8//09PT/9PT0//Pz - 8//z8/P/8/Pz//T09P/09PT/8vLy//Pz8//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/TU1N/zg4OP8HBwf/AAAA/wAAAP8AAAD/AAAA/wAA - AP/BwcH/xsbG/+/v7//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/+7u - 7v84ODj/NTU1/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/zIyMv9PT0//6+vr//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//z8 - /P/+/v7//v7+//7+/v/6+vr/8/Pz//Py8v/z8/H/9fL0//P08v/gxKj/o1MO/6hTD/+ueUtSrFQJ/qpU - Cv/KpIH/9vPv//Lz8//z8/P/9PT0//Pz8//z8/P/ysrK/8TExP/ExMT/xMTE/8TExP/s7Oz/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P9NTU3/Nzc3/w0NDf8AAAD/AAAA/wAAAP8AAAD/AAAA/7+/v//Gxsb/6+vr//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/7u7u/zg4OP82Njb/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/NDQ0/0VFRf/i4uL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P//f39//7+/v/+/v7//v7+//v7+//z8/P/8/Ly//Pz - 8f/18vT/8vTx/+DEqP+iUw3/qFMP/655S1KsVAn+qlQK/8qkgf/28+//8/Pz//T09P/09PT/8vLy//Hx - 8f/Jycn/xMTE/8TExP/ExMT/w8PD/+vr6//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/zw8PP84ODj/EBAQ/wAAAP8AAAD/AAAA/wAA - AP8AAAD/urq6/8PDw//d3d3/4eHh/+Hh4f/Ozs7/0NDQ/8/Pz//Kysr/ycnJ/8/Pz//Pz8//09PT/+Li - 4v/c3Nz/NjY2/zQ0NP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf81NTX/QkJC/97e3v/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//9/f3//v7+//7+/v/+/v7//Pz8//Pz8//z8vL/8/Px//Xy9P/y9PH/4MWo/6JTDf+oUw//rnlLUqxU - Cf6qVAr/yqSB//bz7//z8/P/9PT0//T09P/z8/P/8PDw/8fHx//ExMT/xMTE/8TExP/Dw8P/6urq//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/PDw8/zc3N/8TExP/AAAA/wAAAP8AAAD/AAAA/wAAAP9KSkr/QkJC/0VFRf8/Pz//QEBA/zs7 - O/88PDz/Ozs7/zo6Ov86Ojr/Ozs7/zs7O/88PDz/QUFB/z4+Pv8tLS3/ISEh/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AQEB/zY2Nv9CQkL/39/f//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//39/f/+/v7//v7+//7+/v/8/Pz/8vLz//Py - 8v/z8/H/9fL0//L08f/gxaj/olMN/6lUDv+ueUtSrFMJ/qpUCv/LpIH/9vPv//Pz8//09PT/9PT0//Pz - 8//w8PD/x8fH/8XFxf/FxcX/xMTE/8TExP/o6Oj/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P8+Pj7/ODg4/xYWFv8AAAD/AAAA/wAA - AP8AAAD/AAAA/yIiIv8pKSn/ExMT/xsbG/8iIiL/Kysr/zAwMP8zMzP/NDQ0/zQ0NP8yMjL/Li4u/ycn - J/8bGxv/GBgY/xEREf8GBgb/AAAA/wAAAP8AAAD/AAAA/wAAAP8CAgL/ODg4/zk5Of/V1dX/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT//v7+//7+/v/+/v7//v7+//39/f/z8/P/8/Ly//Pz8f/18vT/8vTx/+DFqP+iUw3/qVQO/655 - S1KsUwn+qlQK/8qkgf/28+//8vPz//T09P/09PT/8vLy/+/v7//Gxsb/xcXF/8XFxf/Dw8P/w8PD/+bm - 5v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//T09P/09PT/9PT0//T09P/z8/P/8/Pz//T09P/09PT/9PT0//Pz8//09PT/8/Pz//T0 - 9P/09PT/8/Pz/z4+Pv84ODj/FxcX/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wICAv83Nzf/Ojo6/9XV1f/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//+/v7//v7+//7+/v/+/v7//f39//T0 - 9P/z8vL/8/Px//Xy9P/y9PH/4MSo/6JTDf+pVA7/rnlLUqxTCf6qVAr/yqSB//bz7//y8vL/9PT0//T0 - 9P/y8vL/7+/v/8XFxf/FxcX/xcXF/8PDw//Dw8P/5ubm//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Ly8v/y8vL/8vLy//Pz8//z8/P/9PT0//T09P/09PT/9PT0//Pz - 8//y8vL/9PT0//T09P/09PT/8vLy//T09P/z8/P/9PT0//T09P/z8/P/Pz8//zg4OP8YGBj/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AgIC/zg4OP86Ojr/1dXV//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//7+/v/+/v7//v7+//7+/v/9/f3/8/T0//Py8v/z8/H/9fL0//L08f/gxKj/olMN/6lU - Dv+ueUtSrFMJ/qpUCv/KpIH/9vPv//Ly8v/09PT/9PT0//Ly8v/v7+//xcXF/8XFxf/FxcX/w8PD/8PD - w//m5ub/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz//Pz - 8//y8vL/8/Pz//Pz8//09PT/9PT0//T09P/09PT/8/Pz//Ly8v/09PT/9PT0//T09P/y8vL/9PT0//Pz - 8//09PT/9PT0//Pz8/8/Pz//Nzc3/xkZGf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8CAgL/ODg4/zk5Of/W1tb/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/19fX//v7+//7+/v/+/v7//v7+//7+ - /v/09PT/8/Pz//Pz8f/18vT/8vTy/+DEqP+iUw3/qVQO/655S1KsVAn+qlQK/8qkgf/28+//8vLy//T0 - 9P/09PT/8/Pz/+7u7v/ExMT/xcXF/8XFxf/ExMT/xMTE/+Tk5P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//T0 - 9P/z8/P/8vLy//T09P/09PT/9PT0//Pz8//09PT/8/Pz//T09P/09PT/8/Pz/z8/P/83Nzf/GBgY/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wICAv84ODj/OTk5/9bW - 1v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//X19f/+/v7//v7+//7+/v/+/v7//v7+//Pz8//z8vL/8/Px//Xy9P/x8/L/4MSo/6JS - D/+oUw//rnlLUqxUCf6qVAr/yqSB//bz7//y8vL/9PT0//T09P/09PT/7u7u/8TExP/FxcX/xcXF/8TE - xP/ExMT/5OTk//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/Pj4+/zc3N/8XFxf/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AgIC/zg4OP85OTn/1dXV//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9fX1//7+/v/+/v7//v7+//7+ - /v/+/v7/9PT0//Py8v/z8/H/9fL0//Lz8//hxan/o1MQ/6hTD/+ueUtSrFQJ/qpUCv/Ko4D/9vPv//Pz - 8//09PT/9PT0//Ly8v/t7e3/xMTE/8TExP/ExMT/xMTE/8TExP/k5OT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P8/Pz//ODg4/xUV - Ff8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8CAgL/Nzc3/zk5 - Of/V1dX/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/19fX//v7+//7+/v/+/v7//v7+//7+/v/09PT/8/Ly//Pz8f/08vT/8vPx/+HF - qf+jUxD/qFMP/655S1KsVAn+qlQK/8qkgf/28+//8/Pz//T09P/09PT/8vLy/+3t7f/ExMT/xMTE/8TE - xP/ExMT/xMTE/+Tk5P/09PT/9PT0//Ly8v/y8vL/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/zw8PP83Nzf/EhIS/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf83Nzf/Pj4+/9vb2//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//b29v/+/v7//v7+//7+ - /v/+/v7//v7+//T09f/z8vL/8/Px//Ty9P/y8/H/4cWp/6NTEP+oUg//rnlLUqxUCf6qVAr/yqSB//bz - 7//z8/P/9PT0//T09P/y8vL/7e3t/8TExP/ExMT/xMTE/8TExP/ExMT/4+Pj//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/QEBA/zc3 - N/8PDw//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/zY2 - Nv9CQkL/3t7e//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9vb2//7+/v/+/v7//v7+//7+/v/+/v7/9PT1//Py8v/z8/H/9PL0//Lz - 8f/hxan/o1MQ/6hSD/+ueUtSrFQJ/qpUCv/KpIH/9vPv//Ly8v/09PT/9PT0//Ly8v/s7Oz/xMTE/8TE - xP/ExMT/xMTE/8TExP/i4uL/8/Pz//Pz8//z8/P/8/Pz//Ly8v/09PT/8vLy//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P9NTU3/ODg4/wsLC/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/NDQ0/0RERP/g4OD/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/19fb//v7+//7+ - /v/+/v7//v7+//7+/v/19fb/8/Ly//Pz8f/08vT/8vPx/+HFqf+iUw3/qFQO/655S1KsUwn+qlQK/8uk - gf/28+//8vLy//T09P/09PT/8/Pz/+vr6//ExMT/xcXF/8XFxf/Dw8P/w8PD/+Hh4f/z8/P/8/Pz//T0 - 9P/09PT/8vLy//T09P/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/0xM - TP84ODj/BwcH/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8yMjL/T09P/+vr6//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//b29v/+/v7//v7+//7+/v/+/v7//v7+//b29v/z8vL/8/Px//Ty - 9P/y8/H/4cWp/6JTDf+pVA7/rnlLUqxTCf6qVAr/yqSB//bz7//y8vL/9PT0//T09P/z8/P/6urq/8TE - xP/FxcX/xcXF/8PDw//Dw8P/4ODg//Pz8//y8vL/9PT0//T09P/y8vL/9PT0//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8vLy//Pz8//z8/P/9PT0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/X19f/zg4OP8DAwP/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/y4uLv9UVFT/7u7u//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9vb2//7+ - /v/+/v7//v7+//7+/v/+/v7/9fX1//Py8v/z8/H/9PL0//Lz8f/hxan/olMN/6lUDv+ueUtSrFMJ/qpU - Cv/KpIH/9/Pw//Pz8//09PT/9PT0//Pz8//p6en/xcXF/8XFxf/FxcX/w8PD/8TExP/f39//8/Pz//Ly - 8v/09PT/9PT0//Ly8v/y8vL/8vLy//T09P/09PT/8vLy//Ly8v/y8vL/9PT0//T09P/y8vL/8/Pz//Pz - 8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P+hoaH/NTU1/wEBAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/JSUl/1paWv/x8fH/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/29vb//v7+//7+/v/+/v7//v7+//7+/v/19fX/8/Pz//Pz - 8f/08vT/8vPx/+HFqf+iUw3/qVQO/655S1KsUwn+qlQK/8qkgf/28+//8/Pz//T09P/09PT/8/Pz/+np - 6f/ExMT/xMTE/8TExP/ExMT/w8PD/9/f3//z8/P/8vLy//T09P/09PT/8/Pz//Pz8//z8/P/9PT0//T0 - 9P/z8/P/8/Pz//Pz8//09PT/9PT0//Ly8v/z8/P/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/9TU1P80NDT/FBQU/xUVFf8VFRX/FRUV/xUV - Ff8VFRX/Dg4O/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wwMDP9QUFD/oqKi/7u7u/+fn5//o6Oj/5+fn/+Dg4P/gICA//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//b2 - 9v/+/v7//v7+//7+/v/+/v7//v7+//X19f/z8vL/8/Px//Ty9P/y8/H/4cWp/6JTDf+oVA7/rnlLUqxU - Cf6qVAr/yqSB//bz7//z8/P/9PT0//T09P/z8/P/6enp/8TExP/ExMT/xMTE/8PDw//Dw8P/39/f//Pz - 8//y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Pz - 8//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/6enp/7a2tv/CwsL/xMTE/8PDw//ExMT/xMTE/8PDw/+4uLj/hoaG/wEBAf8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8JCQn/goKC/8bGxv/ExMT/w8PD/8TE - xP/ExMT/xMTE/8XFxf/Y2Nj/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9vb2//7+/v/+/v7//v7+//7+/v/+/v7/9vb2//Py - 8v/z8/H/9PL0//Lz8v/hxan/o1MO/6hTDf+ueUtSrFQJ/qpUCv/KpIH/9vPv//Pz8//09PT/9PT0//Pz - 8//p6en/xMTE/8TExP/ExMT/w8PD/8TExP/f39//8/Pz//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/6+vr/9vb2//X19f/19fX/9ra - 2v/X19f/2tra/9ra2v/ExMT/NjY2/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/xsbG/84ODj/1NTU/+Dg4P/c3Nz/4eHh/9zc3P/b29v/6+vr//Pz8//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/29vb//v7+//7+/v/+/v7//v7+//7+/v/29vb/8/Ly//Pz8f/18vT/8vPz/+HFqf+jUw7/qFMN/655 - S1KsVAn+qlQK/8qkgf/28+//8/Pz//T09P/09PT/8/Pz/+vr6//ExMT/xMTE/8TExP/ExMT/xMTE/+Dg - 4P/z8/P/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/39/f/8TExP85OTn/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/MDAw/zc3N/+zs7P/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//b29v/+/v7//v7+//7+/v/+/v7//v7+//b2 - 9v/z8vL/8/Px//Xy9P/y8/H/4MSo/6NTDf+pVA7/rnlLUqxTCf6qVAr/y6SB//bz7//z8/P/9PT0//T0 - 9P/z8/P/6+vr/8TExP/FxcX/xcXF/8TExP/ExMT/4eHh//Pz8//z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/f39//xMTE/zo6Ov8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8xMTH/Nzc3/7S0tP/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9vb2//7+/v/+/v7//v7+//7+/v/+/v7/9vb2//Py8v/z8/H/9fL0//Lz8f/gxKj/o1MN/6lU - Dv+ueUtSrFMJ/qpUCv/LpIH/9vPv//Lz8//09PT/8/Pz//Ly8v/s7Oz/xMTE/8XFxf/FxcX/xMTE/8TE - xP/i4uL/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/+Dg4P/ExMT/OTk5/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/ycnJ/83Nzf/t7e3//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/29vb//v7+//7+/v/+/v7//v7+//7+ - /v/29vb/8/Ly//Pz8f/18vT/8vPx/+DEqP+jUw3/qVQO/655S1KsUwn+qlQK/8ukgf/28+//8vLy//Ly - 8v/z8/P/8vLy/+3t7f/ExMT/xcXF/8XFxf/ExMT/xMTE/+Li4v/y8vL/8vLy//T09P/09PT/8vLy//Ly - 8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/39/f/8TExP86Ojr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/MjIy/zc3N/+jo6P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//b29v/+/v7//v7+//7+/v/+/v7//v7+//X19f/z8/P/8/Px//Xy9P/y8/H/4MSo/6NT - Df+pVA7/rnlLUqxTCf6qVAr/y6SB//bz7//y8vL/8/Pz//Ly8v/y8vL/7e3t/8TExP/FxcX/xcXF/8TE - xP/ExMT/4+Pj//Pz8//z8/P/9PT0//T09P/y8vL/8/Pz//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/f39//xMTE/zk5 - Of8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8sLCz/Nzc3/7W1 - tf/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9vb2//7+/v/+/v7//v7+//7+ - /v/+/v7/9fX1//Pz8//z8/H/9fL0//Lz8f/gxKj/o1MN/6lUDv+ueUtSrFQJ/qpUCv/KpIH/9vPv//Ly - 8v/z8/P/9PT0//Pz8//u7u7/xMTE/8XFxf/FxcX/xMTE/8PDw//j4+P/8/Pz//Pz8//09PT/9PT0//Pz - 8//z8/P/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/+Pj4//ExMT/bW1t/0ZGRv9GRkb/RkZG/0ZGRv9GRkb/RkZG/0ZG - Rv9GRkb/RkZG/0ZGRv9GRkb/SEhI/zg4OP82Njb/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/9PT0//T09P/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/29vb//v7+//7+/v/+/v7//v7+//7+/v/19fb/8/Ly//Pz8f/18vT/8vPy/+DE - qP+jUw3/qFMO/655S1KsVAn+qlQK/8qkgf/28+//8vLy//T09P/09PT/9PT0/+/v7//ExMT/xcXF/8XF - xf/ExMT/xMTE/+Tk5P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/oaGh/1hY - WP82Njb/ODg4/zg4OP84ODj/Nzc3/zc3N/83Nzf/Nzc3/zg4OP84ODj/ODg4/zg4OP89PT3/lpaW/8TE - xP/ExMT/xcXF/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8XFxf/ExMT/xcXF/8XFxf/ExMT/np6e/21t - bf+IiIj/fHx8/0VFRf9BQUH/NTU1/zY2Nv83Nzf/NTU1/zU1Nf9CQkL/SEhI/4WFhf+RkZH/3d3d//Dw - 8P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//y8vL/8vLy//Pz - 8//09PT/8/Pz//Ly8v/y8vL/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//b29v/+/v7//v7+//7+ - /v/+/v7//v7+//b29v/z8vL/8/Px//Xy9P/y8/P/4cWp/6NTDf+oUw//rnlLUqxUCf6qVAr/yqSB//bz - 7//y8vL/9PT0//T09P/y8vP/7u7u/8XFxf/FxcX/xcXF/8TExP/ExMT/5OTk//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P+ysrL/aGho/x4eHv8lJSX/Jycn/ywsLP8uLi7/MDAw/zEx - Mf8vLy//Li4u/ysrK/8mJib/JCQk/xYWFv8fHx//cXFx/+3t7f/l5eX/5eXl/+Tk5P/k5OT/5OTk/+Tk - 5P/k5OT/5OTk/+Tk5P/l5eX/5eXl/+jo6P+srKz/ZWVl/zAwMP84ODj/ODg4/zg4OP84ODj/ODg4/zg4 - OP84ODj/ODg4/zg4OP84ODj/Nzc3/ysrK/8lJSX/TExM//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//z8/P/8/Pz//T09P/z8/P/8/Pz//Pz8//z8/P/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9vb2//7+/v/+/v7//v7+//7+/v/+/v7/9PT0//Py8v/z8/H/9fL0//Lz - 8//gxKn/o1MO/6hTDf+ueUtSrFMJ/qpUCv/KpIH/9vPv//Ly8v/09PT/9PT0//Ly8v/v7+//xcXF/8XF - xf/FxcX/xcXF/8PDw//l5eX/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/9LS - 0v+enp7/AgIC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xoa - Gv9BQUH/7u7u//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz/9zc - 3P+/v7//AAAA/wAAAP8AAAD/BwcH/wkJCf8KCgr/DAwM/wkJCf8ICAj/BAQE/wAAAP8AAAD/AAAA/wsL - C/8uLi7/7+/v//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/29vb//v7+//7+ - /v/+/v7//v7+//7+/v/09PX/8/Ly//Pz8f/18vT/8vPz/+DEqf+jUw7/qFMN/655S1KsUwn+qlQK/8qk - gf/28+//8vLy//T09P/09PT/8vLy/+/v7//FxcX/xcXF/8XFxf/FxcX/w8PD/+bm5v/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/0NDQ/52dnf8CAgL/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ICAg/0RERP/r6+v/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/1NTU/8HBwf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Ghoa/zY2Nv/u7u7/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//b29v/+/v7//v7+//7+/v/+/v7//v7+//T09f/z8vL/8/Px//Xy - 9P/y8/P/4MSp/6NTDv+oUw3/rnlLUqxUCf6qVAr/yqSB//bz7//y8vL/9PT0//T09P/09PT/8PDw/8bG - xv/FxcX/xcXF/8TExP/ExMT/5+fn//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/MzMz/nZ2d/wMDA/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8jIyP/OTk5/8fHx//09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8vLy//Ly8v/y8vL/9PT0//T0 - 9P/Pz8//wsLC/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8cHBz/NjY2/7CwsP/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Pz8//y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9fX1//7+ - /v/+/v7//v7+//7+/v/+/v7/9PT0//Py8v/z8/H/9fL0//Lz8//hxan/o1MN/6lUDv+ueUtSrFQJ/qpU - Cv/KpIH/9vPv//Ly8v/09PT/9PT0//Pz8//w8PH/yMjI/8XFxf/FxcX/w8PD/8PDw//p6en/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/8nJyf+enp7/AwMD/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yoqKv85OTn/x8fH//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//y8vL/8vLy//Ly8v/09PT/9PT0/8rKyv/ExMT/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yYmJv83Nzf/p6en//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Ly - 8v/y8vL/8vLy//T09P/09PT/9PT0//T09P/19fX//v7+//7+/v/+/v7//v7+//7+/v/09PT/8/Ly//Pz - 8f/18vT/8vPz/+HFqf+jUw3/qVQO/655S1KsVAn+qlQK/8qkgf/28+//8vLy//T09P/09PT/8vLy//Dw - 8P/IyMj/xcXF/8XFxf/Dw8P/w8PD/+rq6v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/ycnJ/56env8DAwP/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/Kysr/zc3N/+/v7//9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/9PT0//T0 - 9P/09PT/x8fH/8TExP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/KCgo/zc3N/+Wlpb/8/Pz//Pz8//z8/P/8/Pz//T09P/z8/P/8/Pz//Pz8//z8/P/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/+/v7//v7+//7+/v/+/v7//v7+//T09P/z8vL/8/Px//Xy9P/y8/P/4cWp/6NTDv+oUw3/rnlLUqxU - Cf6qVAr/yqSB//bz7//y8vL/9PT0//T09P/y8vL/8vLy/8rKyv/FxcX/xcXF/8TExP/ExMT/7Ozs//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/Jycn/n5+f/wMDA/8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8tLS3/Nzc3/8DAwP/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/Gxsb/xcXF/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8rKyv/Nzc3/5eXl//z8/P/8vLy//Ly - 8v/y8vL/9PT0//Pz8//y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//7+/v/+/v7//v7+//7+/v/9/f3/8/T0//Pz - 8//z8/H/9fL0//Lz8//hxan/o1MO/6hTDf+ueUtSrFQJ/qpUCv/KpIH/9vPv//Ly8v/09PT/9PT0//Pz - 8//y8vL/y8vL/8XFxf/FxcX/xMTE/8TExP/t7e7/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0/8nJyf+enp7/AwMD/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/y0tLf83Nzf/wMDA//T09P/09PT/9PT0//T09P/z8/P/8/Pz//Pz8//z8/P/9PT0//Pz - 8//z8/P/8/Pz/8XFxf/FxcX/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/ywsLP83Nzf/l5eX//Ly8v/y8vL/8vLy//Ly8v/09PT/8/Pz//Ly8v/y8vL/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT//v7+//39/f/+/v7//v7+//39/f/z8/P/8/Lz//Pz8f/18vT/8vPz/+HFqf+jUw7/qFMN/655 - S1KsVAn+qlQK/8qkgf/28+//8vLy//T09P/09PT/8/Pz//Hx8f/Ozs7/xcXF/8XFxf/ExMT/xMTE/+7u - 7v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/ycnJ/56env8DAwP/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Kysr/zc3N/+/v7//9PT0//T0 - 9P/09PT/9PT0//Pz8//z8/P/8/Pz//Pz8//09PT/8vLy//Ly8v/z8/P/x8fH/8TExP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/KSkp/zc3N/+Wlpb/8vLy//Pz - 8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Pz - 8//y8vL/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/+/v7//v7+//7+/v/+/v7//f39//T0 - 9P/z8vL/8/Px//Xy9P/y8/P/4cWp/6NTDf+oUw3/rnlLUqxUCf6qVAr/yqSB//bz7//y8vL/9PT0//T0 - 9P/z8/P/8vLy/9LS0v/FxcX/xcXF/8TExP/ExMT/8PDw//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/Ly8v/np6e/wMDA/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8pKSn/ODg4/8TExP/09PT/9PT0//T09P/09PT/8/Pz//Pz8//z8/P/8/Pz//T0 - 9P/y8vL/8vLy//T09P/Jycn/xMTE/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8nJyf/Nzc3/5eXl//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz//Ly8v/z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz//7+/v/+/v7//v7+//7+/v/9/f3/9PT0//Py8v/z8/H/9fL0//Lz8//hxan/o1MN/6hT - Df+ueUtSrFQJ/qpUCv/KpIH/9vPv//Ly8v/09PT/9PT0//Pz8//y8vL/1dXV/8XFxf/FxcX/w8PD/8TE - xP/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/83Nzf+cnJz/AgIC/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMjI/86Ojr/yMjI//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/87Ozv/Dw8P/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yAgIP83Nzf/oaGh//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z9PT//f39//39/f/+/v7//v7+//v7 - +//z8/P/8/Pz//Pz8f/18vT/8vPz/+HFqf+jUw3/qVQO/655S1KsVAn+qlQK/8qkgf/28+//8vLy//T0 - 9P/09PT/8/Pz//Ly8v/Y2Nj/xcXF/8XFxf/Dw8P/x8fH//Pz8//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/z8/P/5ubm/8CAgL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/ICAg/0RERP/r6+v/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/1NTU/8HBwf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/Gxsb/zY2Nv+6urr/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//9/f3//f39//7+/v/+/v7/+/v7//Pz8//z8/P/8/Px//Xy9P/y8/P/4cWp/6NT - Df+pVA7/rnlLUqxUCf6qVAr/yqSB//bz7//y8vL/9PT0//T09P/z8/P/8vLy/9zc3P/FxcX/xMTE/8XF - xf/MzMz/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/V1dX/k5OT/wUF - Bf8FBQX/BAQE/wgICP8ICAj/CAgI/woKCv8KCgr/CAgI/wgICP8GBgb/AwMD/wMDA/8bGxv/QkJC/+7u - 7v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/Z2dn/xMTE/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8TExP/NDQ0/+7u - 7v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//z8/P/+/v7//v7+//7+ - /v/7+/v/8/Pz//Pz9P/z8/H/9fL0//Lz8//hxan/o1MN/6lUDv+ueUtSrFQJ/qpUCv/KpIH/9vPv//Ly - 8v/09PT/9PT0//Pz8//y8vL/4ODg/8TExP/ExMT/w8PD/8/Pz//z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/97e3v/W1tb/z8/P/8XFxf/ExMT/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/xMTE/8TExP/ExMT/x8fH/2xsbP9vb2//8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/+bm5v/FxcX/TExM/3R0dP9zc3P/tra2/7Gxsf+ysrL/ycnJ/8nJ - yf+0tLT/sbGx/62trf90dHT/dnZ2/zExMf9ISEj/7+/v//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/+/v7//7+/v/+/v7//v7+//r6+v/y8vP/8/Pz//Pz8f/18vT/8vPz/+HF - qf+jUw3/qVQO/655S1KsVAn+qlQK/8qkgf/28+//8vLy//T09P/09PT/8/Pz//Ly8v/l5eX/w8PD/8TE - xP/Dw8P/1tbW//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8fHx/+zs - 7P/k5OT/0dHR/87Ozv/Ly8v/x8fH/8bGxv/FxcX/xcXF/8bGxv/Hx8f/ysrK/9DQ0P/T09P/4eHh/+Pj - 4//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8fHx/+bm - 5v/IyMj/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/FxcX/vb29/66u - rv/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//6+vr//v7+//7+ - /v/+/v7/+vr6//Ly8//z8vL/8/Px//Xy9P/y8/P/4cWp/6NTDf+pVA7/rnlLUqxUCf6qVAr/yqSB//bz - 7//y8vL/9PT0//T09P/y8vL/8/Pz/+fn5//ExMT/xMTE/8PDw//c3Nz/8/Pz//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8vLy//Pz8//09PT/7+/v/+np6f/k5OT/4+Pj/+Hh - 4f/i4uL/4+Pj/+Tk5P/q6ur/7+/v//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//n5+f/9/f3//v7+//7+/v/39/j/8vLy//Py8v/z8/H/9fL0//Lz - 8//hxan/o1MO/6hTDf+ueUtSrFQJ/qpUCv/KpIH/9vPv//Ly8v/09PT/9PT0//Pz8//y8vL/6enp/8TE - xP/ExMT/xMTE/+Li4v/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Ly - 8v/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/+Pj4//39 - /f/+/v7//v7+//f39//z8/P/8/Pz//Pz8f/18vT/8vPz/+HFqf+jUw7/qFMN/655S1KsVAn+qlQK/8qk - gf/28+//8vLy//T09P/09PT/8/Pz//Pz8//s7Oz/xcXF/8PDw//ExMT/5+fn//Pz8//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Pz8//29vb//f39//7+/v/+/v7/9fX1//Ly8v/z8vL/8/Px//Xy - 9P/y8/P/4cWp/6NTDf+oVA7/rnlLUqxTCf6qVAr/yqSB//bz7//y8vL/9PT0//T09P/09PT/9PT0/+/v - 7//Gxsb/xMTE/8TExP/r6+v/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//b2 - 9v/9/f3//v7+//39/f/19fX/8/Pz//Py8v/z8/H/9fL0//Lz8//hxan/o1MN/6lUDv+ueUtSrFMJ/qpU - Cv/KpIH/9vPv//Ly8v/09PT/9PT0//T09P/09PT/8vLy/8jIyP/Dw8P/xsbG/+3t7f/z8/P/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/T/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz9P/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//Pz8//z8/P/8/Pz//Pz9P/z8/T/8/P0//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/P0//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//Pz - 8//z8/P/9PT0//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/9PT0//Pz8//z8/P/8/Pz//Pz - 9P/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/9PX1//z8/P/+/v7//f39//T09P/z8/P/8/Ly//Pz - 8f/18vT/8vPz/+HFqf+jUw7/qFQO/655S1KsVAn+qlQK/8qkgf/28+//8vLy//T09P/09PT/9PT0//T0 - 9P/z8/P/zMzM/8PDw//Jycn/7u7u//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz//Pz - 9P/y8vL/8vLy//Ly8//y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8/Pz//Ly8v/y8vL/8/Pz//Ly - 8v/y8vL/8vLy//Pz8//z8/P/8/Pz//Ly8//y8vP/8vLy//Ly8v/y8vL/8vLy//Pz8//z8/P/8/Pz//T0 - 9P/09PT/8vLy//Pz8//z8/P/8/P0//Pz9P/z8/P/8vLy//Ly8v/z8/P/8/Pz//Pz8//z8/P/8vLy//Ly - 8v/z8/P/8/Pz//Pz8//z8/P/9PT0//T09P/09PT/8/Pz//Ly8v/y8vL/8vLy//Ly8v/y8vL/8/Pz//Pz - 8//z8/P/8vLy//Ly8v/y8vL/8vLy//Ly8v/z8/P/8vLz//Ly8v/y8vP/8vLy//Pz8//y8vL/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//09PT//Pz8//7+/v/9/f3/9PT0//Ly8v/z8/P/8/Px//Xy9P/y8/P/4cWp/6JSEP+oUwz/pXA7UqxU - Cf6qVAr/yqSB//bz7//y8vL/9PT0//T09P/09PT/9PT0//Pz8//Z2dn/w8PD/83Nzf/w8PD/8/Pz//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/8PDw//Dw8P/u7u7/7e3t/+zs7P/r6+v/6urq/+np - 6f/o6Oj/5ubm/+Tk5P/h4eH/39/f/97e3v/e3t7/3d3d/93d3f/b29v/29vb/9ra2v/a2tv/2tra/9ra - 2v/a2tr/2tra/9ra2v/Z2dn/2dnZ/9jY2P/Y2Nj/2NjY/9jY2P/X19f/19fX/9bW1v/W1tb/1tbW/9XV - 1f/U1NT/1NTU/9TU1P/U1NT/1NTU/9XV1f/V1dX/1tbW/9bW1v/W1tb/19fX/9fX1//Y2Nj/2NjY/9jY - 2P/Y2Nj/2NjY/9nZ2f/a2tr/2tra/9ra2v/a2tr/29vb/9ra2v/a2tr/3Nzc/9vb2//d3d3/3d3d/97e - 3v/d3d3/4ODg/+Hh4f/l5eX/5ubm/+fn5//o6Oj/6enp/+zs7P/t7e3/7u7u//Dw8P/w8PD/8fHx//Ly - 8v/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//8/Pz//v7+//z8/P/09PT/9PT0//Pz - 8//z8/H/9fL0//Lz8//hxan/oVIQ/6pUC/+YYC9SrFQJ/qpUCv/KpIH/9vPv//Ly8v/09PT/9PT0//T0 - 9P/09PT/8/Pz/+zs7P/CwsL/29vb//Hx8f/u7u7/7e3t/+np6f/o6Oj/4uLi/9zc3P/U1NT/y8vL/8XF - xf/ExMT/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xMTE/8TExP/ExMT/xMTE/8XFxf/ExMT/xMTE/8TExP/ExMT/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xMTE/8TExP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xsbG/83Nzf/X19f/3t7e/+Pj4//q6ur/6+vr/+3t - 7v/v7+//9PT0//v7+//9/f3/+/v7//T09P/09PT/8/Pz//Pz8f/18vT/8vPz/+HFqf+iUw//qlQJ/5Va - JVKsVAn+qlQK/8qkgf/28+//8vLy//T09P/09PT/9PT0//T09P/z8/P/8vLy/87Ozv/Nzc3/zMzM/8nJ - yf/Gxsb/xcXF/8TExP/ExMT/wsLC/8PDw//ExMT/w8PD/8TExP/FxcX/xcXF/8XFxf/FxcX/xcXF/8TE - xP/ExMT/xMTE/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TE - xP/ExMT/xMTE/8PDw//CwsL/w8PD/8TExP/FxcX/xsbG/8nJyf/Nzc3/8fHx//39/f/6+vr/9PT0//T0 - 9P/z8/P/8/Px//Xy9P/y8/P/4cWp/6JTD/+sUwj/omgxXaxUCf6qVAr/yqSB//bz7//y8vL/9PT0//T0 - 9P/09PT/9PT0//Pz8//x8fH/7e3t/9nZ2f/T09P/zMzM/8bGxv/FxcX/w8PD/8TExP/ExMT/xMTE/8PD - w//ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/w8PD/8XFxf/ExMT/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/FxcX/xMTE/8TE - xP/ExMT/xMTE/8TExP/ExMT/xMTE/8XFxf/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8XFxf/ExMT/xMTE/8TE - xP/FxcX/xcXF/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8PDw//Dw8P/xMTE/8TExP/ExMT/xMTE/8XF - xf/Jycn/z8/P/9bW1v/u7u7//f39//f39//z8/P/9PT0//Pz8//z8/H/9fL0//Lz8//hxan/oVMO/6pS - Cf+9jl+orFQJ/qpUCv/KpIH/9vPv//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly - 8v/y8vL/8vLz//Hx8f/w8PD/5ubn/93d3f/W1tb/0dHR/8/Pz//MzMz/ysrK/8fHx//FxcX/xsbG/8bG - xv/Gxsb/xcXF/8XFxf/Gxsb/xsbG/8XFxf/FxcX/xMTE/8TExP/ExMT/w8PD/8TExP/FxcX/xcXF/8XF - xf/ExMT/xMTE/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8XF - xf/ExMT/xMTE/8XFxf/ExMT/w8PD/8PDw//ExMT/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xcXF/8TExP/ExMT/xMTE/8TExP/FxcX/xMTE/8TE - xP/ExMT/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/Gxsb/xsbG/8bGxv/Gxsb/ycnJ/8vL - y//Nzc3/0NDQ/9HR0f/Z2dr/4eHh/+vr6//w8PD/8vLy//Pz8//z8/T/8vLy//T09P/7+/v/8/Pz//T0 - 9P/09PT/8/Pz//Pz8f/18vT/8vPz/+HFqf+hUw7/qFIN/7R7R6isVAn+qlQK/8qkgf/28+//8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vP/8/Pz//Pz8//y8vL/8fHx//Ly8v/z8/T/8/Pz//Ly - 8//y8vL/8/Pz//Ly8v/y8vP/8vLy//Dw8P/v7+//7+/v/+3t7f/t7e3/6+vr/+np6f/p6en/6Ojo/+fn - 5//n5+j/6Ojo/+fn6P/n5+j/5ubm/+Xl5f/k5OT/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//h4eL/4eHh/+Hh - 4f/h4eH/4ODg/9/f3//f39//3t7e/97e3v/e3t7/3Nzc/9vb2//b29v/2tra/9nZ2f/Y2Nj/2NjY/9nZ - 2f/a2tr/29vb/9zc3P/c3Nz/3d3d/97e3v/f39//39/f/9/f3//f39//4ODg/+Dg4P/h4eH/4uLi/+Li - 4v/j4+P/4+Pj/+Tk5P/j4+P/4+Pj/+Xl5f/m5ub/5+fn/+fn5//o6Oj/5+fn/+fn5//o6On/6enp/+rq - 6v/r6+v/7e3t/+3t7f/v7+//7+/v//Hx8f/y8vP/8vLz//Ly8v/z8/P/8vLy//Ly8v/y8vL/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Pz9P/z8/P/8/Pz//T09P/z8/P/8/Px//Xy9P/y8/P/4cWp/6JT - Dv+tUw7/rW81qKxTCf6pUwj/yqSB//bz7//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//z8/H/9fL0//Lz8//gxKn/olMP/61SC/+zeD7KrFMJ/qlTCf/KpIH/9vPv//Lz - 8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/T/8vPz//Pz8f/18vT/8vPy/+DE - qP+hUhD/rVML/7aCSP+rUwn+qlQH/8ujgP/z8e//8PPy//T08v/09PL/9PTy//T08v/09PL/9PTy//T0 - 8v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTz//T09P/09PT/9PT0//T09P/09PL/9PTy//T0 - 8v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T0 - 8v/09PL/9PTz//T09P/09PT/9PT0//T09P/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T0 - 8v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PT/9PT0//T09P/09PT/9PTy//T08v/09PL/9PTy//T0 - 8v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PT0//T09P/09PT/9PT0//T0 - 8//09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T0 - 8//09PT/9PT0//T09P/09PP/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PPy//by - 9P/08vP/9PTy//Ly9P/v8/P/8fTw//Xy8//y8/L/4sSo/6RSD/+sVAv/snk+/6tTCv6qUwb/zaWC//Xy - 8f/x8/H/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/L/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/L/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8v/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//x8/P/7vTy/+708f/z9PD/9PLx//Ly8//x8/P/8/D2/+3z - 8//exKn/olMP/6tTC/+0cTT/q1ML/qVTCf/Pqor/8/Hw/+7x9f/x8vP/8vLz//Ly8//z8/T/8/P0//Pz - 9P/z8/T/8/P0//Pz9P/z8/T/8/P0//Pz9P/z8/T/8/L0//Py8P/z8/D/8/Pw//Pz8P/z8/D/8/P0//Pz - 9P/z8/T/8/P0//Pz9P/z8/T/8/P0//Pz9P/z8/T/8/P0//Pz9P/z8/T/8/P0//Pz9P/z8/T/8/P0//Pz - 9P/z8/T/8/P0//Py8f/z8/D/8/Pw//Pz8P/z8/D/8/Pz//Pz9P/z8/T/8/P0//Pz9P/z8/T/8/P0//Pz - 8//z8/P/8/Pz//Ly8//y8vP/8vLz//Pz9P/y8/P/8vPw//Lz8P/y8/D/8/Pw//Ly8v/y8vP/8vLz//Pz - 9P/z8/T/8vLz//Ly8//y8vP/8/P0//Pz8//z8/P/8/Pz//Pz8//z8/T/8/Pz//Pz8P/z8/D/8/Pw//Pz - 8P/z8/H/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz9P/z8/T/8/Pz//Pz8//y8vP/8vLz//Ly - 8//y8/H/8/Pw//Lz8P/y8/D/8vPw//Lz8v/z8/P/8/Pz//Pz9P/z8/T/8/P0//Pz9P/z8/T/8/P0//Py - 9P/38PT/9vLz//Dy9P/w8vT/8/Ly//Hz8P/x8fP/8vPy/+LFpf+hVA7/qVML/7VqKv+qUwn+o1ML/9Sw - if/68+j/9/Pu//Xy7//18vD/9fLw//bz8f/28/H/9vPx//bz8f/28/H/9vPx//bz8f/28/H/9vPx//bz - 8f/28vH/9vLv//bz7//28+//9vPv//bz7//28/H/9vPx//bz8f/28/H/9vPx//bz8f/28/H/9vPx//bz - 8f/28/H/9vPx//bz8f/28/H/9vPx//bz8f/28/H/9vPx//bz8f/28/H/9vLv//bz7//28+//9vPv//bz - 7//28/D/9vPx//bz8f/28/H/9vPx//Xy8P/18vD/9fLw//Xy8P/18vD/9fLw//Xy8P/18vD/9fLw//Xy - 7//18+//9fLv//Xy7//18u//9PLv//Xy8P/18u//9fLw//Xy8P/08vD/9fLw//Xy7//18vD/9fLw//Xy - 8P/18vD/9fLw//bz8f/28vD/9fLv//Xy7//18+//9vPv//by7//18vD/9fLw//Xy8P/18vD/9fLw//Xy - 8P/18vD/9vPx//bz8f/18vD/9fLw//Ty7//18vD/9fLw//Xy7//18+//9PPv//Xz7//18u//9fLv//Xy - 8P/18vD/9fLw//Xy8P/28/H/9vPx//Xy8P/18vD/9fLv//bz6//38ur/9PLy//bw8P/58ev/8/Xr//Xy - 7f/58O7/4MGr/6FREP+qUwv/sWIe/6pSDP6mUgv/05hk/+a4kP/nt4//7biM/+64jP/uuIz/7riM/+64 - jP/uuY3/7rmN/+65jf/uuY3/7rmN/+65jf/uuY3/7rmN/+65jf/uuY3/7riN/+64jf/uuI3/7riN/+65 - jf/uuY3/7rmN/+65jf/uuY3/7rmN/+65jf/uuY3/7rmN/+65jf/uuY3/7rmN/+65jf/uuY3/7rmN/+65 - jf/uuY3/7rmN/+65jf/uuY3/7riN/+64jf/uuI3/7riN/+64jf/uuY3/7rmN/+65jf/uuY3/7rmN/+65 - jf/uuY3/7rmN/+65jf/uuIz/7riM/+64jP/uuY3/7riN/+64jf/uuI3/7riN/+64jf/uuIz/7riM/+64 - jP/uuY3/7rmN/+64jP/uuIz/7riM/+65jf/uuIz/7biM/+24jP/tuIz/7rmN/+65jf/uuI3/7riN/+64 - jf/uuI3/7riN/+65jf/uuY3/7rmN/+65jf/uuY3/7rmN/+65jf/uuY3/7rmN/+65jf/uuY3/7riN/+64 - jP/uuIz/7riN/+64jf/uuI3/7riN/+64jf/uuY3/7rmN/+65jf/uuY3/7rmN/+65jf/uuY3/7rmN/+65 - jf/quI//6biP/+a5j//t0bT/8NG1/+mzkf/krYT/6LWO/+vJrf/euZP/oVMN/6hUCP+sWhX/qlMM/qZS - Cv/VmmP/9bJ+//Sxfv/zsn7/87J+//Oyfv/zsn7/87J9//Oyff/zsn3/87N+//Ozfv/zs37/87N+//Oz - fv/zs37/87N+//Ozfv/zsn7/87J+//Oyfv/zsn7/87N+//Ozfv/zs37/87N+//Ozfv/zs37/87N+//Oz - fv/zs37/87N+//Ozfv/zs37/87N+//Ozfv/zs37/87N+//Ozfv/zs37/87N+//Ozfv/zsn7/87J+//Oy - fv/zsn7/87J+//Ozfv/zs37/87N+//Ozfv/zs37/87N+//Ozfv/zs37/87N+//Oyfv/zsn7/87J+//Oz - fv/zsn7/87J+//Oyfv/zsn7/87J+//Oyfv/zsn7/87J+//Ozfv/zs37/87J+//Oyfv/zsn7/87N+//Oy - fv/zsn7/87J+//Oyfv/zs37/87N+//Oyfv/zsn7/87J9//Oyff/zsn3/87J+//Oyff/zsn3/87J9//Oz - ff/zs37/87J+//Oyff/zsn3/87N9//Ozfv/zsn7/87J+//Oyfv/zsn7/87J+//Oyfv/zsn7/87J+//Oz - fv/zs37/87N+//Ozfv/zs37/87N+//Ozfv/zs37/87N+//Oyfv/2s3z/87J9//OvfP/pnmj/8Z5m//Gf - Zf/wn2X/7J5l/96RVf+lUw7/qFMK/6lUDf+pUwn+plMK/9ega//0sX3/9LF+//Wzfv/1s37/9bN+//Wz - fv/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Wzfv/0sn3/9LJ9//Syff/0sn3/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/0s33/9rB7/+6fZ//yn2b/8qBm//KgZ//xnmX/6Zhb/6ZTDv+pUwv/q1UN/6lT - CP6lUwv/26Zy//Oyff/2sX7/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/0sn3/9bN+//Syff/1s37/9bN+//Syff/1s37/9LJ9//Wzfv/1s37/9bN+//Wzfv/0sn3/9bN+//Sy - ff/1s37/9bN+//Syff/1s37/9LJ9//Wzfv/1s37/9LJ9//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Sy - ff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Sy - ff/0sn3/9bN+//Syff/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1sn3/9bJ9//Szff/2sXv/7qBn//Kf - Zv/yoGb/8Z9m//CeZP/ollr/qFMO/6xSC/+sVQ7/qlQJ/qRTDP/gq3n/87J+//axfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Syff/1s37/9LJ9//Wzfv/1s37/9LJ9//Wz - fv/0sn3/9bN+//Wzfv/1s37/9bN+//Syff/1s37/9LJ9//Wzfv/1s37/9LJ9//Wzfv/0sn3/9bN+//Wz - fv/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/1s37/9bN+//Wz - fv/1s37/9bN+//Wyff/1sn3/9LN9//exe//voGj/8p9m//KgZv/xn2b/8Z9l/+WUV/+oVA3/q1ML/61a - Ff+qVAn+o1IO/+Csff/ysn//9rF9//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Syff/0sn3/9LJ9//Sy - ff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9LJ9//Wzfv/0sn3/9bN+//Wzfv/0sn3/9bN+//Syff/1s37/9bN+//Syff/1s37/9LJ9//Wz - fv/0sn3/9bN+//Wzfv/0sn3/9bN+//Syff/1s37/9bN+//Syff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/1s37/9bN+//Wyff/0sn3/97F7/++g - aP/yn2b/8qBm//GfZv/wnWT/65ld/6dUDP+pUwv/s2Uj/6pTCv6iVA3/4Kt///Kzfv/3s33/9bN+//Wz - fv/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Syff/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Szff/2sXv/7p9n//GfZ//woGb/8KBm/++eZv/roWr/nlQR/61V - CP+1cDL/qVML/qJUDf/grYD/8rN+//ezff/1s37/9bN+//Syff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wz - fv/1s37/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Syff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LN9//Ww - ev/tn2f/8Z9n//CgZv/woGb/755m//Cocv+jVBL/rVQI/7l/S/+pVAz+olQM/+Ktf//ysnz/97J9//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Wzfv/1s37/9bN+//Wz - fv/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/0s33/9a96/+2fZ//xnmb/8KBm//CgZf/wnmb/8q13/6RU - EP+rVAr/p2k3qKlTC/6lVAv/36l4//KzfP/0snz/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/0sn3/9LJ9//Syff/1s37/9LJ9//Syff/0sn3/9LJ9//Syff/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Sz - ff/1r3r/7p9n//GfZ//woGb/8KBm//CfZ//xqnT/pFYR/6VSDP+2f1GhqVML/qRTCf/YoW7/9LN8//Sy - fP/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/0s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9LJ9//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9LJ9//Wz - fv/0sn3/9LJ9//Syff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzff/1s33/9bN9//Wzff/1s33/9bN9//Wz - ff/1s33/9bN9//Wzff/1s33/9bN9//Wzff/1s33/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9LN+//Szfv/0s37/9LN+//Wvev/tn2b/8Z9n//CfZv/woGb/8J9m/+eh - a/+jUw7/pFMN/6ltPFmoVQn+p1MI/9aQXP/2snz/8rN7//Szff/0sn3/9LF8//Sxff/0sXz/9bJ8//Wy - fv/1sX3/9bF9//Kyfv/0sn7/9LN+//WxfP/1sXz/9LF9//Syfv/0sn3/9LJ9//Syff/0sn3/9LJ9//Sy - ff/0sn3/9LJ9//Wxff/1sX3/9bF9//Wxff/1sX3/9bF+//Wxfv/1sX7/9bF+//Wxfv/1sX7/9bF+//Wx - fv/1sX7/9bF+//Wyfv/1sn7/9bJ+//Wyfv/1sn7/9bN+//Wyfv/1sn7/9bJ+//Wzfv/1s37/9bN+//az - fv/2s37/9LN9//Szff/0s33/9LN9//Szff/0s33/9LN9//Szff/0s33/9bN9//azff/1s33/9bN9//Wz - ff/1s37/9bJ+//Wyfv/1s37/9bJ+//Wyfv/1sn//9bJ///ayf//2sn//9rJ///ayf//1sn7/9bJ+//Wy - fv/1sn7/9bJ+//Wyfv/1sn7/9bF9//Wyff/1sn3/9bJ9//Wyff/1sn3/9bJ9//Wyff/1sn3/9bJ9//Sy - ff/0sn3/9LJ9//Syff/0sX3/9bF+//axfv/2sn3/9rJ9//ayfP/1snz/9bJ8//Syff/zsn3/87J9//Sy - fv/zsnz/9a54/+yeZv/wnWb/8J5l//GeZf/sn2X/4Jpg/6NTDv+lURL+rntRPKpWD/6qVAf/yoNK//Oy - fP/0sXz/9rJ8//Sze//0s3v/8rR6//K1ef/ztXn/9LV6//S1ev/0tXr/87V6//O2ev/0tnr/87V6//S2 - e//ztnr/87Z6//O2ev/ztnr/87Z6//K3ef/yt3n/8rd5//K3ef/yt3n/9Ld5//S3ef/zt3j/87d5//S3 - ef/0t3r/9Ld7//S3e//0t3v/9Ld7//S3e//0t3v/9Ld7//S3e//0t3v/9Ld7//S3e//0t3v/9Ld7//S4 - e//0uXz/9Lh7//S4e//0uHv/9Lh7//S4e//0uHv/9bh7//W4e//yuHv/8rh7//K4e//zuHv/87h7//O4 - e//zuHv/87h7//O4e//0uHv/9bh7//S4e//zuHv/87h7//S4e//zt3r/87d6//S5fP/0uHv/9Lh7//S4 - e//0uHv/9Lh8//S4fP/0uHz/9Lh8//S3e//0t3v/9Ld7//S3e//0t3v/9Ld7//S3e//0t3r/9Lh6//S4 - ev/0uHr/9Lh6//S3ef/0t3n/9Ld5//S3ef/0t3n/9LZ5//S2ef/0tnn/9LZ5//S2ef/0tnr/9LZ6//S3 - ev/zt3n/87d5//W2e//1tnv/9bZ6//O2ev/ztnr/87Z6//O2ev/0snf/6aFo/+ykZP/to2L/759l//Cd - Zv/ThEn/pVMK/5xXH/zRqoshplsd/KtSBP/JgkT/8bJ8//Wxff/0sX3/87V8//rHhP/8zYL/+89///vP - fv/7z37/+tF+//rRfv/60X3/+tJ9//vTfv/60nz/+tJ9//rRff/70X3/+tB9//vRff/70X7/+tF9//rR - ff/50X3/+dF9//rSfv/50X3/+dF9//nRff/60n7/+tJ+//rTe//603v/+tN7//rTe//503v/+dN7//nT - e//603z/+tN8//nTe//503v/+dN7//rTfP/603z/+tR8//rVfP/61Xz/+tV8//rVfP/61Xz/+tV8//rV - fP/61Xz/+tV8//rVfP/61Xz/+tR8//rVfP/61Hv/+tV8//rVfP/61Xz/+tV8//rVfP/61Xz/+tV8//rV - fP/61Xz/+tV8//rVfP/61Xz/+tV8//rVfP/61Hz/+tR8//rUfP/61Hz/+tR8//rUfP/61Hz/+tN8//rT - fP/603z/+tN8//rTfP/603z/+tN8//rSff/60n7/+tJ+//nSfv/50n7/+dJ+//rSfv/60n7/+tJ+//rS - fv/60X3/+tF9//rRff/60X3/+9F9//zRfv/80X7//NF+//zQfv/70H7/+tJ9//rSff/70n3/+tJ9//rR - ff/60H3/+c99//vNff/7y33/+8p+//rEf//xqXD/755n/8BwMP+jUwz/tH9Z1AAAAACaYS/kqVII/7Fm - Jv/ytX//8rF9//Oxff/ys3v/8LV4//G7eP/zwHj/9cR6//jIfP/5zH3/+c5+//nQff/60X3/+9J+//rT - ff/51Hv/+NV7//jVe//41Xv/+NV7//nWfP/41nr/+NZ6//jVev/41Xr/+dZ7//jWe//41nv/+NZ7//jW - e//41nv/+NZ9//jWff/41n3/+NZ9//jWff/41n3/+NZ9//jWfv/41n7/+NZ+//fVff/31X3/+NZ+//jW - fv/41n3/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+NZ+//jWfv/41n7/99V9//jW - fv/41n7/+NZ+//jWfv/41n7/+NZ+//jWfv/41n7/+NZ+//jWfv/41n3/+Nd9//jXff/4133/+NZ9//jW - ff/41n7/+NZ+//jWfv/41n7/+NZ+//jWfv/41n7/+NZ+//jWfv/41n7/+NZ+//jWfv/41n7/+Nd8//jX - e//413v/99d6//fXev/313r/+Nd7//jXe//413v/+Nd7//jWe//41nr/+NZ6//nWe//51Xv/+tV7//rV - fP/61Hz/+tR9//rTff/6033/+tN9//rSfv/50H//+M5+//fMfP/5yXr/88Bz//C1a//trmf/6aNl/+qf - ZP/unmL/sWEe/59YGf/No4Y9AAAAAK1/U5yiVBD9oFEP/9qbY//vsn7/9rJ9//Syff/ysH3/9LGA//ax - gP/2sn7/9bJ8//Oyev/zs3r/8bR6//K1ef/0t3r/9Lp6//e+ev/0w3r/9cV6//jHfP/4yH3/+st///rM - ff/6zH7/+81+//vOf//8z4D/+dB9//rSff/60X7/+tF+//rSff/61Hv/+tR7//rUe//61Hz/+tR7//vV - e//71Xv/+9V8//vVe//71Xv/+9V7//rVe//71Xv/+9Z7//vWe//71nz/+tZ7//rWe//61nv/+tZ7//rW - e//61nv/+tZ7//vWe//71n3/+9Z9//vVfP/71n3/+tV8//rWff/61n3/+tZ9//vWff/71n3/+tZ9//rW - ff/71n3/+9Z9//rWe//61nv/+tZ7//rWe//61nv/+tZ7//vWfP/71nz/+tZ7//rVe//71nz/+9Z8//vW - fP/71Xv/+9V7//vVe//71Xv/+9V7//rVe//703v/+9N+//rTfv/60n3/+dJ9//rSfv/60n7/+tF+//nR - ff/50X3/+89///vNf//6zH//+sx9//rKff/6yX3/+Md9//fFff/2w3v/9cB7//W8e//yuXr/8rZ5//Cz - ef/vs3n/8rJ6//WweP/vomj/8J9m//KeZf/vnWT/8Z5k/+KOTv+oUxD/qWQqygAAAAAAAAAA3rGQF7eG - XNOmUg3/q10a/+mtd//xsn3/9LF8//WwfP/1sXz/9bJ9//Wyfv/1sn7/9bN+//Wzfv/0s33/9LN9//Sz - ff/0snz/9LJ8//SyfP/0s33/9LN9//Szff/0s33/9LN6//S0ev/0tXv/9LV7//S0e//ztnr/9LZ5//S2 - ef/0uHn/87h4//K5eP/yuXj/8rl3//K5eP/yunf/8rx3//K8d//yvHf/87x4//S9eP/1vXj/9b14//a/ - ef/2v3n/9sB6//bBe//1wXv/9cF7//bCe//3w3v/98N7//fDe//3xHv/98R7//fFe//3xXv/98V7//fF - e//3xXv/+cV8//jFfP/3xXv/98V7//jFe//4xXv/+MV6//jFe//4xXv/98R7//fEe//2xHv/9cN7//XC - e//1wXv/9sF7//bBev/1wXr/9L95//W+eP/1vnj/9b54//S9d//zvXf/87x3//G7d//xu3f/8Lp2//K5 - d//zuHj/87h4//S4d//zuHf/9Ld5//S3e//0tnr/9LZ6//O2ev/0tHv/9LR7//S0e//0s3r/87R6//Oz - e//zs3z/9LN8//SzfP/0s3z/9bN9//Wzff/0snz/87J8//Gyff/zsX//8qVx/++eZv/un2b/76Bk//Cd - Zv/nlVv/rFgS/5hSEv/DlGhiAAAAAAAAAAAAAAAAAAAAAKlxQuCkUgv/plgO/8qESP/qpGz/+LJ8//Ky - fv/xsn7/9bN+//azfv/2s37/9rN+//Ozff/zs33/87N9//Ozff/zs33/87N9//Szff/0s33/9LN9//Sz - ff/zsn3/87J9//KxfP/ysnz/8rJ8//axfv/2sX3/9rF9//axff/2sn3/9LF9//Sxff/0sX3/9LF+//Wx - fP/1snz/9bJ8//Wyff/1sn3/9LJ8//SyfP/0snz/9LJ8//SyfP/zsnz/87J8//Oye//zsnv/9LJ7//Sz - e//0s3v/87N6//Sze//0s3v/8rJ6//Kyev/ysnr/8rJ6//Kyev/0s3v/87J6//Kyev/ysnr/8rJ6//Sz - e//0snr/8rJ6//Kyev/zs3r/9LN7//Sze//0s3v/9LN7//Sye//0snz/87J7//Oye//zsnz/9LJ8//Sy - fP/0snz/9LJ8//SxfP/1sn//9rJ///Wyf//1sX7/9bF+//ayfv/2sn7/9bF9//Wxff/1sH3/9rB+//aw - fv/2sX7/9rF+//Oxff/zsn3/87J9//Oyff/zsn3/87J+//Oyfv/zsn7/8rN+//Kzff/ys3v/8LN+/+uy - gP/tt4b/8LyM/+utfP/onmf/8p5m//OeZf/xnmP/24tO/7hlHP+iVQn9oW88kAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAKlwRsCfWBf9pVMM/6NUDP+rXxr/wXY3/9KJTv/YkFT/35dc/+CZXv/dlVn/3JNV/9qQ - Uf/Yjk//2I5P/9iOT//Zjk//2o5P/9qOT//ajk//2o5P/9qNUP/ajVD/2o1Q/9qNUP/YjVD/1Y5P/9WP - T//Vj0//1Y9P/9WPT//VjlD/1Y5Q/9WOUP/VjlD/1o5R/9mPUv/Zj1L/2pBS/9qQUv/ZkFL/2JBS/9iQ - Uv/YkVL/2ZFT/9iRVP/YkVX/2ZFW/9mRVv/Zklb/2pJV/9qSVf/bk1b/25NW/9uTVv/ak1j/2pNY/9qT - V//ak1f/2pNX/9qTV//ak1f/2pNX/9qTV//ak1f/3JNX/9yTV//bk1f/25NX/9qTVv/Zk1X/2ZNV/9mT - Vf/ZklX/2ZFV/9qSVv/ZkVX/2JFV/9iQVP/ZkFP/2JBS/9iQUv/YkFL/2JBS/9qQUf/Yj1H/2I9Q/9iP - UP/WjlD/1o5Q/9aOUP/WjlD/1o5Q/9WOT//Vjk//1Y5P/9WOT//Vjk//2I1Q/9qNUP/ZjVD/2Y5R/9uP - Uv/dkFT/4ZVZ/+OZXP/jml3/4Zxh/96ldf/ntIr/78Se/+q8mP/aqIL/3ad7/9yibv/Yk1f/zXg6/7Zb - F/+pVQf/olUS/KFuPqzy2bIUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAv39ABKFyRDGodkLGlVYe/51S - D/+iUwv/oVML/6NSDP+iUgz/pFMM/6RTDP+lUwv/p1ML/6dTCf+nUwv/p1ML/6dTC/+nUwv/p1ML/6dT - C/+nUwv/plML/6ZTC/+mUwv/plML/6ZTC/+nVAj/qFQL/6hUC/+oUwv/qFML/6lTC/+pUwv/qVML/6lT - C/+rVQz/rFUM/61WDv+uVw7/rlcP/61YEP+tWBD/rlkQ/65ZEf+vWhL/sFsT/7BaFP+wWxX/sVsV/7Jc - Fv+yXBb/sl0X/7NdF/+zXRf/s10X/7ReGP+0Xhj/tF4Y/7VfGf+1Xxn/tV8Z/7VfGf+1Xxn/tV8Z/7Vf - Gf+0Xxn/tF4Y/7NdGP+zXRf/s10X/7NdF/+yXBb/slwW/7FcFv+xWxX/sFoV/7BaFP+wWhT/rlkS/65Z - EP+uWRD/rVgQ/61YEP+tVg7/rFYM/6tVC/+rVAn/qlQJ/6lTC/+pUwv/qVML/6pTC/+qUwv/qFML/6hU - C/+oVAv/qFQL/6hUC/+mUwv/plML/6ZSCv+mUwv/plML/6ZTDP+mUwv/plIL/6ZTC/+nUwr/qFQJ/6ZV - EP+kVRL/p1gS/6hXD/+pVw7/qFUK/6VTCP+kVAn/nFMQ/6BfLOOzfltXAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADewaA2vpRmbrV1PIuyYx+LqVIFi6lSBYupVAeLqVIHi6pS - B4uqUguLqlILi6xSC4usUguLqVILi6lUC4upVAuLqVQLi6lUC4upVAuLqVQLi6lUC4upVAuLqVQLi6dU - C4unUguLp1ILi6dSC4unUguLp1QLi6dUC4unVAuLp1ILi6VSB4unUguLp1QLi6lWC4upVguLqlgNi6pY - DYuqWA+LrFgPi6xaD4usWA+LrFgQi65aEIuuWhKLrloSi7BcEouwXBSLsFwWi7BcFouwXBaLsF0Yi7Bd - GIuwXRiLsF0Yi7BdGIuwXRiLsF0Yi7BdGIuwXRiLsF0Wi7BdFouwXRaLsFwWi7BcFouuXBaLrlwSi65c - EousXBKLrFoSi6xaEousWBCLrFgQi6xYEIusWA+LrFgPi6pYDYuqWA2LqVYNi6lWDYunUguLp1ILi6dS - C4unUguLp1ILi6lUC4upVAuLqVQLi6lUC4unVAuLp1QLi6dUC4unVAuLp1QLi6dUC4upVAuLqVQLi6lU - C4upUgmLp1IHi6lSB4upVAeLqlIHi6xSB4uqUQmLp1ELi6VRDYunUgmLqVIHi6VRC4usUQ+LrFghi7B1 - QIuuiF5P6LmiCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////////wAAAAAAAAAAAAAAAAAAA/4AAAAAAA - AAAAAAAAAAAAD8AAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAQAA - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA - AAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAA - AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAA - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA - AAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAA - AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAA - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA - AAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAA - AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAA - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA - AAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAA - AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAA - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA - AAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAMAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAfgAAAAAAAAAAAA - AAAAAAAP+AAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAP////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - /////////////////////////////////////////////ygAAAAAAQAAAAIAAAEAIAAAAAAAAAAIAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/dKhg+elb4PKezyDwWcjg7NYE4OpUg6DpVQOg6VU - CoOnVAqDq1QIg6tUCIOrVAiDq1QIg6tUCIOrVAiDq1QIg6tUCIOrVAiDr1QKg69UCoOtVAqDrVQKg6tU - CIOrVAiDqVQIg6lUCIOpVAiDqVQKg6lUDoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lU - DoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lU - DoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lU - DoOpVA6DqVQQg6lUEIOrVhCDq1YQg6tWEIOrVhKDq1YSg6tWEoOtWBKDrVgSg61YEoOtWBKDrVgTg61Y - E4OtWBODrVgTg61YE4OtWBWDrVgVg61YFYOtWRWDrVkVg61ZFYOtWRWDrVkVg69ZF4OxWReDsVkXg7Fb - F4OxWxeDsVsXg7FbF4OxWxeDs1sXg7NbF4OxWxeDsVsXg7FbF4OxWxeDsVsXg7FdGYOxXRmDsV0Zg7Fd - GYOxXRmDsVsXg7FbF4OxXRmDsV0Zg7FdGYOxXRmDsV0Zg7FdGYOxXRmDsV0Zg7NdGYOzXRmDs1sXg7Nb - F4OzWxeDs1sXg7NbF4OzWxeDs1sXg7FbF4OxWxeDsVsXg7FbF4OxWxeDsVkXg7FZF4OxWReDsVkXg7FZ - F4OvWRWDr1kVg69ZFYOvWRWDr1gVg69YFYOvWBWDr1gVg61YE4OtWBODrVgSg61YEoOtWBKDrVgSg6tW - EoOrVhKDrVYSg6tUEIOrVBCDq1QQg6tUEIOrVBCDq1QQg6tUEIOpUg6DqVIOg6lSDoOpUg6DqVIOg6lU - DoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lU - DoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lU - DoOpVA6DqVQOg6lUDoOpVA6DqVQOg6lUDoOpVA6DqVQKg6tUCoOrVAqDq1QKg6tUCoOpUgqDqVIKg6lU - CoOrVA6DrVgQg61SDoOxVhKDu2Uhg8h3NYPQhkaD0JJWg96rdYPxzJqD/OCwdQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMuuhSy1ilxkr4BP/5NZIv+ZUxT/pFMP/6pTDP+rUwn/qlQL/6hW - Cv+kVAr/qVQK/6xTCf+sUwj/rFMI/6xTCf+sUwr/rFMK/6xTCf+sUwj/rFML/61UC/+tUwv/q1QL/6tU - C/+qVAv/qVUI/6lVCP+pVQj/qVUI/6lUCv+pVAv/qVQL/6lUDP+pVAz/qVQM/6lUC/+pVAv/qVQL/6lU - DP+pVAz/qVQM/6lUC/+pVAv/qVQL/6lUDP+pVAz/qVQM/6lUC/+pVAv/qVQL/6lUDP+pVAz/qVQM/6lU - C/+pVAv/qVQL/6lUDP+pVAz/qVQM/6lUC/+pVAv/qVQL/6lUDP+pVAz/qVQM/6lUC/+pVAv/qVQM/6lU - Df+pVA7/qlUN/6pVDv+rVg7/q1YP/6tWD/+sVhD/rFYQ/61YEP+tWBD/rVgQ/61YEf+tWBH/rVgR/65Z - Ef+uWRL/r1oS/69aFP+uWhT/rloV/65aFf+uWhX/rloV/65aFf+uWhX/rlsV/69bF/+vWxf/slwX/7Jc - GP+yXRj/sl0Y/7JcF/+yXRj/s10Y/7NdGP+zXRj/sl4Y/7JeGP+xXRj/sV0Y/7JeGv+yXhr/sl4Z/7Je - Gf+yXhn/sl4a/7JeGv+yXhr/sl4Z/7JeGf+yXhr/sl4a/7JeGv+yXhn/sl4Z/7JeGf+0Xhr/tF4a/7Re - Gv+0Xhj/s14Y/7NdGP+zXRj/s10Y/7NdGP+zXRj/s10Y/7NdGP+zXRj/s10Y/7FbGP+xWxf/sVsX/7Fb - F/+xWxf/sVsX/7FbF/+wWhX/sFoV/7BaFf+wWhX/sFoV/69ZFf+uWRT/rlgT/65ZEf+uWRL/rVgR/61Y - Ef+tWBD/rVgQ/61WEP+tVhD/rFUP/6xWD/+sVQ7/q1UO/6tUDf+rVA7/q1QO/6tUDf+qUwv/qlML/6pT - DP+pUwz/qVQM/6lUC/+pVAv/qVQL/6lUDP+pVAz/qVQM/6lUC/+pVAv/qVQL/6lUDP+pVAz/qVQM/6lU - C/+pVAv/qVQL/6lUDP+pVAz/qVQM/6lUC/+pVAv/qVQL/6lUDP+pVAz/qVQM/6lUC/+pVAv/qVQL/6lU - DP+pVAz/qVQM/6lUC/+pVAv/qVQL/6lUDP+pVAz/qVQM/6pUC/+sVAr/rFQK/6xUC/+rVAv/qlQL/6lT - C/+pUwv/qVML/6lTC/+sVA//rFQP/6hSDP+jUgz/oFMP/51WFv+QURb/ilQb/5VlMf+nfEr/uJFk/9O2 - kOycbksszrqTGgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMKfesqVYzT/l1QZ/6FQDf+oUxD/p1IK/6hUCP+pVQf/qFUH/6hW - CP+mVAX/plYI/6hUCv+pUw7/qVMN/6lTDf+pUw3/qVMO/6lTDv+pUw3/qVMN/6lTD/+lVA//pVMP/6VU - D/+lUw//p1QN/6dUC/+pVAv/qVQK/6lVCv+pVQr/qVQL/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lU - C/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lU - C/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lU - C/+qVQv/qlUN/6tWDf+rVg7/rFcO/6xXDv+sVw7/rVgP/61YEP+tWRD/rFkQ/6xZEP+sWRH/rFkR/6xa - EP+tWhH/rVoS/65bEv+uWxT/rlsU/69cFP+vXBT/r1wU/69cFP+wXRX/sF0V/7BdFf+xXhf/sV4X/7Fe - F/+xXhf/sV4X/7FeF/+xXhf/sV4X/7JfGP+yXxj/sl8Y/7JfGP+zYBj/sl8Y/7JfGP+zYBj/s2AZ/7Rh - Gf+0YRn/tGEZ/7RhGf+0YRn/tGEZ/7RhGf+0YRn/tGEZ/7RhGf+0YRn/tGEZ/7RhGf+0YRn/s2AZ/7Ng - Gf+zYBn/s2AY/7NgGP+zYBj/s2AY/7NgGP+zYBj/sl8Y/7JfF/+yXxf/sl8X/7JfF/+xXhf/sV4X/7Fe - F/+xXhf/sV4X/7BdFv+wXRX/r1wU/69cFP+vXBT/r1wU/69cFP+uWxT/rVoT/61aEv+vWRH/rloR/65Z - EP+uWRD/rlkQ/61ZEP+uWBD/rVcP/61XDv+tVw7/rVcO/6xWDv+sVQ3/rFYO/6tVC/+rVQv/qlQL/6pU - C/+qVAv/qVQL/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lU - C/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVUL/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lU - C/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVQK/6lVCv+pVAv/qVQL/6lU - C/+nVAv/p1QL/6dUC/+nUw3/plMN/6dUD/+nUgr/qFIK/6pUDv+qVA3/qFML/6dSDv+mUg//pE8N/6dP - Ef+iUBf/mlUl/5NfNO2zjWrV6c+rOgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA2LiRT7OJXf+VVB7/n1ES/6NSDf+iVgv/o1UL/6ZUDf+oUQv/qVEN/6ZQ - Df+jUw//nFIP/5lVEv+bWB3/n10l/6NhKP+kYSr/pGIq/6ViKv+kYir/pWIr/6ZjK/+iYCj/oV0k/55X - IP+eVR3/nFIZ/5pOEv+eURX/oFAT/6NRE/+kUBP/oVIR/55UD/+eUw7/nlMO/59UD/+eUw7/nlMO/55T - Dv+eUw7/nlMO/6BUDv+gVA7/oFQO/6BUDv+gVA7/oFQO/6BUDv+gVA7/oFQO/6BUDv+gVA7/oFQO/6BU - Dv+gVA7/oFQO/6BUDv+gVA7/oFQO/6BUDv+gVA7/oFQO/6BUDv+gVA7/oFQO/6BUD/+hVBD/olUR/6JV - Ef+iVRH/olYR/6NWEf+jVhL/pFcT/6RYE/+lWBP/pVgT/6VZFP+lWRT/olkU/6JaFv+iWhb/oloW/6Ja - Fv+iWhf/pFwY/6RcGP+lXBn/pV0a/6ZcGv+oXBv/qFwb/6hcG/+oXRv/qV0c/6ldHP+pXRz/qV0c/6ld - HP+oYB3/qGAd/6hgHf+oYB3/qGAd/6lhHv+pYR7/qWEe/6lhHv+pYR7/qWEe/6lhHv+pYR7/qWEe/6lh - Hv+qYR//qmEf/6phH/+qYR//qmEf/6piH/+qYh//qmIf/6piH/+qYh//qmIf/6piH/+qYh//qmIf/6lh - Hv+pYR7/qWEe/6lhHv+pYR7/qWEe/6lhHv+pYR7/qWEe/6lhHv+pYR7/qWAe/6hgHf+oYB3/qGAd/6hf - Hf+nXxz/p18c/6dfHP+nXxz/p18c/6ZeG/+mXhv/pl0a/6VdGv+lXRr/pFwZ/6RcGf+kWxj/plsX/6Vb - Fv+lWhb/pFkU/6ZZFP+mWRT/pVkU/6VYFP+lWBT/pFgT/6VYE/+lWBP/pFcT/6RXE/+jVhL/o1YS/6JV - EP+iVRD/olUQ/6BUD/+gVA//oFQP/6BUD/+gVA//oFQP/6BUD/+gVA//oFQP/6BUD/+gVA//oFQP/6BU - D/+gVA//oFQP/6BUD/+gVA//oFQP/59UD/+eVA//nlQP/55UD/+eVA//nlQP/55UD/+eVA//nlQP/55U - D/+eVA//n1QP/59UD/+fVA//n1QP/59UD/+eVA//nlQP/55UD/+eVA//nVQQ/5xUEP+bUw//nFIQ/5pS - EP+aUhD/mVIP/5lSEP+aUhH/m1IS/55SEv+hUhP/oVAR/6RSEf+lUg3/qFQK/6lUCf+rUwf/rFMG/65V - CP+rVQj/rlMI/69SC/+sUA7/pFEU/6NiL/+3imHN8Nm9eAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA3MieJap+T/+XTg//qVAI/61QCf+xVwz/qFUC/6ZTDP+fThL/nlIf/59c - Lv+dYzv/qn9c/8iqiv/Ywab/4865/+zXxf/z3sz/8t3L//TezP/z3sz/9d/N//ji0P/34c//893H/+/Y - uv/q0bL/5cur/+LEpP/dvZz/0q+P/82nhf/Gnnv/vpVy/7qOaf+yh17/rYFW/6h8U/+nfFL/qHxT/6l9 - VP+pfVT/qX1U/6l9VP+rfVT/q31U/6t9VP+rfVT/q31U/6t9VP+rfVT/q31U/6t9VP+rfVT/q31U/6t9 - VP+rfVT/q31U/6t9VP+rfVT/q31U/6t9VP+rfVT/q31U/6t9VP+rfVT/q31U/6t9VP+pe1L/qXtT/6p8 - VP+qfFT/qnxU/61/Vv+tf1b/rX9W/62AVv+tgFb/rYBW/62AVv+tgFf/roFY/66BWP+ugVn/roFZ/66B - Wf+ugVn/roFZ/66BWf+ugVn/r4Ja/6+CWv+vglr/r4Ja/6+CWv+vglr/sINc/7CDXP+wg1z/sINc/7CD - XP+wg1z/sYRd/7GEXf+xhF3/sYRd/7GEXf+yhV3/soVd/7KFXf+yhV3/sYVd/7CFXv+whV7/sIVe/7CF - Xv+whV7/sYZe/7GGXv+xhl7/sYZe/7GGXv+xhl7/sYZe/7GGXv+xhl7/sIVe/7CFXv+whV7/sIVe/7CF - Xv+yhV7/soVe/7KFXv+yhV7/soVe/7KFXv+yhV7/soVe/7KFXv+yhV3/soVd/7KFXf+xhF3/sYRd/7GE - Xf+xhF3/sYRd/7GEXf+xhF3/sYRd/7GEXf+wg1z/sINc/7CDXP+vglr/r4Ja/6+CWv+ugVn/roFZ/66C - Wf+ugln/roJZ/66CWf+vgVn/r4FZ/66AWP+ugFj/rYBW/62AVv+tgFb/rX9W/61/Vv+tf1b/q31U/6t9 - VP+qfFT/qnxU/6p8VP+pe1L/qXtS/6l7Uv+pe1L/qXtS/6l7Uv+pe1L/qXtS/6l7Uv+pe1L/qXtS/6l7 - Uv+pe1L/qXtS/6l7Uv+pe1L/qXtS/6l7Uv+pe1L/qXtS/6h8Uv+ofFL/qHxS/6h8Uv+ofFL/qHxS/6h8 - Uv+ofFL/qHxS/6h8Uv+ofFL/qHxS/6h8Uv+ofFL/qHxS/6h8Uv+ofFL/qHxS/6h8Uv+qflX/rYNc/7KH - YP+3jGb/u5Js/8GXcf/CmnX/xZx4/8adef+8l3P/tJJr/7CMY/+thFr/oXJE/5tkMv+cXSn/n1oi/59X - Hf+bThH/olYP/6JXC/+hVgX/p1gF/6hWBf+jUwr/k1AW/5RlPf/NpYdmAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA89u7QKJ7Uv2WUhT/qlAH/7JUCP+tVAn/pU8G/6dSDP+aVhz/q3pO/+DD - ov/y4sv/+u7d//3z6//68O7/+u3y//vy8P/49Ov/9/Tq//j06//49e3/+/bt//j06v/39Or/+PTr//j0 - 7P/z8+7/8vPt//T07f/29O3/+PTt//v07f/88+z//fPr//3x6f/98ef//vPn//7x5f/+8uf//vLo//7y - 5//+8uf//vLn//7y5//+8uf//vLn//7y5//+8uf//vLn//7y5//+8uf//vLn//7y5//+8uf//vLn//7y - 5//+8uf//vLn//7y5//+8uf//vLn//7y5//+8uf//vLn//7y5//+8uf//vLn//7y5//+8uf//vLn//7y - 5//+8uf//vLo//7y6P/+8uf//vLn//7y5//+8uf//vLn//7y5//+8uj//vLo//7y6P/+8uf//vLn//7y - 5//+8uf//vLn//7y5//+8uf//vLn//7y5//+8uf//vLn//7y5//+8uf//vLn//7y5//+8uf//vLn//7y - 5//+8uf//vLn//7x5f/+8eX//vHl//7x5f/+8eX//vLn//7y5//+8uf//vLn//7y5//+8uf//vLn//7y - 5//+8uf//vLn//7y5//+8uf//vLn//7y5//+8uf//vLn//7y5//+8uf//vLn//7y5//+8uf//vLn//7y - 5//+8uf//vLn//7y5//+8uf//vLn//7y5//+8uf//vLn//7y5//+8uf//vLn//7y5//+8uf//vLn//7y - 5//+8uf//vLn//7x5f/+8uf//vLn//7y5//+8uf//vLn//7w5f/+8OX//vLn//7y5//+8uf//vLn//7y - 5//+8uf//vLn//7y5//+8uj//vLo//7y5//+8uf//vLn//7y5//+8uf//vLo//7y6P/+8uj//vLn//7y - 5//+8uj//vLo//7y6P/+8uj//vLo//7y6P/+8uj//vLo//7y6P/+8uj//vLo//7y6P/+8uj//vLo//7y - 6P/+8uj//vLo//7y6P/+8uj//vLo//7y6P/+8uj//vLo//7y6P/+8uj//vLo//7y6P/+8uj//vLo//7y - 6P/+8uj//vLo//7y6P/+8uj//vLo//7y6P/+8uj//vLo//7y6P/+8uj//vLo//7y6P/+8uj//vTo//7z - 6P/+8uf//vHn//7x6P/+8+n//vLp//7z6f/+9Or//vTq//316P/88ub//fXn//3x4v/78N3/9ejS//Dg - yP/mxqr/wZt7/6ZxRP+LSxb/oVca/6RRCv+tVgb/qlYH/6BQCv+aUxn/nl0v/8yWcYMAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAALyNZKKTUhz/p1QQ/6tRBf+tVgz/olIK/5tVFv+td0r/4L2d//3x - 3f/38+j/8/fv//H17//x8u//9fLz//bx9v/18fL/9PLw//X08f/29PL/9PPw//Ty7//08/D/9fPx//Tz - 8f/z8/H/8fPz//Hz9f/x8/P/8fPz//Lz8//y8/T/8vLz//Pz8v/z8/L/8/Lx//Ty8v/08/P/9PPz//Lx - 8v/z8vL/9PPz//Tz8//08/P/9PPz//Lz8//y8/P/8vPz//Lz8//y8/P/8vPz//Lz8//y8/P/8vPz//Lz - 8//y8/P/8vPz//Lz8//y8/P/8vPz//Lz8//y8/P/8vPz//Lz8//y8/P/8vPz//Lz8//y8/P/8vPz//Ly - 8v/z8vL/8/Ly//Py8v/z8vL/8vPz//Lz8//y8/P/8vPz//Lz8//y8/P/8vPz//Lz8//z8/P/8/Pz//Pz - 9P/z8/T/8/P0//Pz9P/z8/T/8/P0//Pz9P/z8/T/8/P0//Pz8//08/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//T09P/z8/P/8vPz//Lz - 8//y8/P/8vPz//Lz8//y8/P/8vPz//Lz8//y8/P/8vPz//Lz8//y8/P/8vPz//Lz8//y8/P/8vPz//Lz - 8//y8/P/8vPz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//T0 - 9P/09PT/8/Pz//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8fTz//H08//x8/P/8vPz//Lz8//z8/P/8/Pz//Tz8//08/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8vP/8/Lz//Py8//z8vP/9PPz//Py8//z8vP/8/Lz//Py8//z8vP/8/Lz//Py8//z8vP/8/Lz//Py - 8//z8vP/8/Lz//Py8//z8vP/8/Lz//Py8//z8vP/8/Lz//Py8//z8vP/9PLz//Ty8//08vP/9PLz//Ty - 8//08vP/9PLz//Ty8//08vP/9PLz//Ty8//08vP/9PLz//Ty8//08vP/9PLz//Ty8//08vP/8/Ly//Pz - 8v/08/L/9PTz//Tz8//z8vT/8vL0//Ly9P/w8vT/8vL0//Pw8f/28/P/9PLz//Pz9P/y9PP/8/Px//Xz - 8P/59O7/+/Xs//v15//76db/4MWt/7aGYf+aWCX/olIR/6hSCP+tVgv/plIL/6BRDP+aYy//z7CSdQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAMWXaBacXSv/oVAR/6hRCv+tWAv/oFIL/5ZVF/+nfVL/+unY//z0 - 6v/39PH/9fT2//Dx8v/09PP/9PTv//P17f/x9O//8PLx//Dy9P/w8PT/8PD0//Hy9f/w8vT/8PL0//Dy - 9P/w8vT/8/P0//by8v/29PL/9vTy//T08v/19PP/9PLy//L08f/09PL/9PTz//T08v/z9PT/8vT0//L0 - 9P/w8vL/8fPz//L09P/y9PT/8vT0//L09P/x9PT/8fT0//D09P/w9PT/8PT0//H09P/x9PT/8fT0//D0 - 9P/w9PT/8PT0//H09P/x9PT/8fT0//D09P/w9PT/8PT0//H09P/x9PT/8fT0//D09P/w9PT/8PT0//H0 - 9P/x9PT/8fT0//D09P/w9PT/8fT0//H09P/x9PT/8PT0//D09P/w9PT/8fT0//H09P/x9PT/8PT0//D0 - 9P/w9PT/8fT0//H09P/x9PT/8PP0//Dz9P/w9PT/8fT0//Lz8//y8/P/8vP0//L09P/y9PT/8vT0//L0 - 9P/y9PT/8vT0//L09P/y9PT/8fPz//Hz8//x9PT/8PT0//D09P/w9PT/8fT0//H09P/x9PT/8PT0//D0 - 9P/w9PT/8fT0//H09P/x9PT/8PT0//D09P/w9PT/8fT0//H09P/x9PT/8PT0//D09P/x9PT/8fT0//H0 - 9P/w9PT/8PT0//D09P/x9PT/8fT0//H09P/w9PT/8PT0//D09P/x9PT/8fT0//H09P/w9PT/8PT0//D0 - 9P/x9PT/8fT0//H09P/w9PT/8PT0//D09P/x9PT/8fT0//H09P/w9PT/8PT0//D09P/x9PT/8fT0//H0 - 9P/w9PT/8PT0//D09P/w9PT/8PT0//H09P/w9PT/8PT0//L09P/y9PT/8vT0//L09P/w9PT/8PT0//D0 - 9P/x9PT/8PLy/+7z8v/w9PT/8PT0//H09P/x9PT/8fT0//D09P/w8/P/8PPz//H09P/x9PT/8fT0//D0 - 9P/w9PT/8PT0//H09P/x9PT/8fT0//D09P/w9PT/8PT0//H09P/y9PT/8vT0//L09P/y9PT/8vT0//L0 - 9P/y9PT/8vT0//L09P/y9PT/8vT0//Dy8v/w8vL/8PLy//Dy8v/w8vL/8vT0//L09P/y9PT/8vT0//Lz - 8//y8vD/8vPx//D08v/y9PP/8PLy//Dy8v/y9PT/8PT0//Dy8//z8vL/9fTy//Ly8v/y8/T/8fT0//Hz - 9P/x8vL/8vLy//fz8//38/H/8/Ts//P06f/89OT/5cSq/51lOf+aUBP/q1UM/69UBf+qVgX/lVMQ/5Rn - Ov/yy6tPAAAAAAAAAAAAAAAAAAAAAAAAAACqf0ylmFMR/6pTDP+oUAv/qVUG/5dQEf+1iF//9+vY//Py - 8P/z8vH/9PTz//T09P/09PT/9PTz//T08//09PP/9PTz//T08//08/T/9PP0//Tz9P/08/T/9PP0//Tz - 9P/08/T/9PP0//Tz9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PP/9PTz//T08//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P0 - 9P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P0 - 9P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P0 - 9P/z9PT/8/T0//P09P/z9PT/8/T0//Lz8//x8vL/8/T0//P09P/y8vL/8vLy//Pz8//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/z8/P/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P0 - 9P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P0 - 9P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P0 - 9P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P0 - 9P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/09PT/9PT0//T09P/09PT/8/T0//P0 - 9P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/Pz//Hy8v/z9PT/8/T0//P0 - 9P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/8/T0//P09P/z9PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//P09P/09PT/9PT0//T09P/09PT/9PT0//P0 - 9P/09PT/9PT0//T09P/08/P/8vPx//L16//v+fP/7e7w//vy7//33sz/rX9S/5VPDP+yWQz/q1QG/6NW - Cv+YUxH/1Z942wAAAAAAAAAAAAAAAAAAAAAAAAAAnW0+/59UD/+sVA7/qVIN/59UDP+eZjX/8tu///n2 - 6P/y8vH/8vLy//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8vLy//T09P/09PT/8vLy//Pz8//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T08v/28/D/7fLy/+7z9//18PL//PXp//Xkwv+odT//n04N/6tT - DP+mVQn/nFMO/5pcMf/q07hLAAAAAAAAAAAAAAAA9sikHJVZIf+jUwr/q1IL/6VQDf+XVh3/6cOm//z3 - 6//z9PD/8/Py//Pz8//y8vL/8vLy//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8vLy//Ly8v/y8vL/8vLy//Ly - 8v/09PT/9PT0//T09P/09PT/8vLy//Ly8v/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Ly8v/09PT/9PT0//Ly8v/z8/P/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/+fL1/+/x9f/r8fb/7fLz//T38f/6+OP/5Mil/5dW - I/+qVBP/qFII/6JTCv+VTxv/tZFvpQAAAAAAAAAAAAAAANGhefyZUBD/plQI/6tUDP+jURH/qHJG//zy - 5f/y8/D/7vTz//Hy8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Ly8v/y8vL/8vLy//Ly - 8v/y8vL/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//y8vL/9PT0//T09P/y8vL/8/Pz//T0 - 9P/09PT/9PT0//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL/9PT0//T09P/09PT/9PT0//jx9f/x8Pf/7/P3/+vz8//n8e//7PXu//ry - 4P+qelP/nU8Q/6tWCf+lVAX/oE4U/6p8VeoAAAAAAAAAAOXRsCehZTn9o1IQ/6lVCv+oVAv/n1IW/9uz - kv/68Ov/7vX2/+fw7//x8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//y8vL/8vLy//Ly - 8v/y8vL/8vLy//Pz8//z8/P/8/Pz//Pz8//y8vL/8vLy//Ly8v/y8vL/8vLy//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8vLy//T09P/09PT/8vLy//Pz - 8//09PT/9PT0//T09P/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/z8/P/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8vLy//Pz8//09PT/9PT0//T09P/28vT/8vL1/+/x8//u8vH/7fX1/+r0 - 9f/28u3/9du+/5lUGf+nVAf/r1sN/6hSD/+kaTv/AAAAAAAAAADRupqYk1Ih/6dPD/+oVAr/olQK/6Bc - Jv/+5M7/+fP0/+vy8v/u9PT/8/T0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//y8vL/8vLy//Ly8v/y8vL/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Tz//Ty9P/08vT/9fTx//Pz - 8f/u8PP/9fP0//rt1v+cYyr/o1QJ/6tUCP+sUgv/oVwn/wAAAAAAAAAAq41omJdMGv+rUBD/plQK/5tU - Cv+6glb//fPm//Xy8v/u8fD/8vTx//P09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PTy//L08P/08vT/9fL0//jy - 8f/48/D/9PDy//Xz9f/98eD/rHlF/6BTDf+rUwn/q1MI/51TFv/w1ri/AAAAAJx3SpihTxv/rU4P/6ZV - CP+bWg//z6N8//rv7f/y8PD/9/Xy//T08f/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Ly - 8v/y8vL/8vLy//Ly8v/z8/P/9PT0//T09P/09PT/9PT0//T09P/y8vL/8vLy//Ly8v/09PT/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly8v/y8vL/8vLy//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T08v/09PD/9PH3//Lx - +P/z8vL/9/Pw//jw8//y8PT//fPk/7eHWv+fURL/rlUP/6lWCP+bURH/5Mqp/AAAAACvh1Papk8Y/7BP - Dv+mVQb/lFcK/9y5mv/08fb/8/Hy//Xy7v/z8fH/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Pz8//y8vL/8vLy//Ly8v/y8vL/8/Pz//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//y8vL/8vLy//Ly8v/y8vL/8/Pz//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly8v/y8vL/9PT0//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//Ly8v/y8vL/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PL/9/Tw//Tx - 9//v8Pn/7vT0//T17f/28vD/8fL1//3y5//CkWv/oE8X/6hRDP+nWAr/nVMQ/9S4lvwAAAAAt39C/qJR - Ev+rUQv/p1QK/5NSF//o0Lj/9/Hz/+7v7//19vb/7/Dx//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Hx8f/y8vL/9PT0//T09P/y8vL/8vLy//Ly8v/z8/P/8fHx//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz//Pz8//09PT/9PT0//T09P/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/8vLy//T09P/09PT/9PT0//T0 - 9P/z8/P/8vLy//Ly8v/y8vL/8vLy//Pz8//09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/8/Pz//T0 - 9P/y8vL/8vLy//Ly8v/z8/P/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/29vb/9vb2//b2 - 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vf/9vb3//b29//29vf/9vb3//f3 - 9//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+Pj4//f39//39/f/9/f3//f39//39/f/+Pj4//n5 - +f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//j4+P/4+Pj/+Pj4//j4+P/4+Pj/9/f3//f3 - 9//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9vb3//b29//29vf/9vb3//b29//29vb/9vb2//b2 - 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/09PT/9PT0//T0 - 9P/09PT/8/Pz//Ly8v/y8vL/8vLy//Ly8v/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8vLy//Ly8v/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly - 8v/y8vL/9PT0//T09P/z8/P/8vLy//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//09PT/9PT0//Ly8v/y8vL/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PTz//X0 - 8//y8vP/8vL1//Ly9f/09PL/8vPx//Lz8//99ej/xpdw/55RFP+oUgr/plQN/6FTEf/Hp4b8AAAAALtz - Mv6iUg//qVQM/6hTDv+cWCj/8uDO//rz8f/w8vL/8PPz//Dy8//z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL/8/Pz//Dw8P/f39//19fX/+/v8P/x8fH/8vLz//Dw8P/y8vL/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//y8vL/8vLy//Ly8v/y8vL/8vLy//T09P/y8vP/8vLz//Pz - 8//z8/P/9fX1//X19f/19fX/9fX1//X19f/19fb/9fX2//X19v/29vb/9vb2//b29v/5+fn/+fn5//n5 - +f/5+fn/+fn5//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//v7+//8/Pz//Pz8//z8 - /P/8/Pz//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//39/f/9/f3//f39//39/f/9/f3//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//39/f/9/f3//f39//39/f/9/f3//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//Pz8//z8/P/8/Pz//Pz8//z8/P/7+/v/+/v7//v7 - +//7+/v/+/v7//r6+v/6+vr/+vr6//r6+v/6+vr/9/f3//f39//39/f/9/f3//b29v/29vb/9vb2//b2 - 9v/19fb/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/8/Pz//Ly8//y8vP/8vLy//Ly - 8v/y8vL/9PT0//T09P/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8vLy//Ly8v/y8vL/8vLy//Pz - 8//y8vL/8vLy//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/08vT/8vXw//by8v/28vX/9PL0//L08v/y9PL//ffo/8WYb/+eUhH/qVQL/6hSDv+jVBH/xqSD/AAA - AAC3ayj+pVIQ/6hTDP+lUw3/oWEx//rq2P/28O//8vP0/+/y8v/09PX/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Pz8//r6+v/yMjI/8XFxf/d3d3/9fX1//T09P/z8/T/8vLy//T0 - 9P/09PT/9PT0//T09f/09PT/9PT0//T09f/19fX/9/f3//f4+P/3+Pj/9/j4//j4+f/5+fn/+fn5//r6 - +v/8/Pz//Pz8//z8/P/9/f3//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//f39//39/f/9/f3//Pz8//z8/P/8/Pz/+vr6//n5 - +f/5+fn/+Pj5//f39//39/f/9fX1//T09f/09PX/9PT1//T09P/09PT/9PT0//T09P/09PX/9PT0//T0 - 9P/z8/P/8/Pz//Pz9P/z8/P/8vLy//Ly8v/z8/P/9PT0//T09P/09PT/8/Pz//T09P/09PT/9PT0//T0 - 9P/09PT/9PL0//L18P/28vL/9vL1//Ty9P/y9PL/8vTy//336P/FmG//nlIR/6lUC/+oUg7/o1QR/8ak - g/wAAAAAtGYh/qRRDv+oUwz/o1QO/6JmN//87dr/9fP0//Hz9P/z8vP/9vL0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vP/5+fn/8XFxf/Dw8P/zc3N//Pz8//09PT/+Pj4//j4 - +P/6+vr/+/v7//v7+//8/Pz//Pz8//z8/P/8/Pz//f39//39/f/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//f39//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v7+//39 - /f/9/f3//f39//39/f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/9/f3//f39//39/f/9/f3//f39//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//f39//39/f/9/f3//f39//z8/P/8/Pz/+/v7//r6+v/6+vr/+/v7//j4 - +P/29vf/9fb2//P09P/z8/T/8/Pz//Ly8v/y8vL/8/Pz//T09P/09PT/9PT0//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//Ty9P/y9fD/9vLy//by9f/08vT/8vTy//L08v/99+j/xZhv/55SEf+pVAv/qFIO/6NU - Ef/GpIP8AAAAALFfGv6mUQ7/qFQM/59TD/+hbDv//PHh//Py8//z9PT/9fLz//fx9P/09PT/9PT0//T0 - 9P/z8/P/8/Pz//T09P/09PT/9PT0//T09P/09PX/9vb2/+zs7P/q6ur/9fX1//j4+f/7+/z//v7+//39 - /f/8/Pz//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//f39//39/f/9/f3//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/9/f3//Pz8//r6+v/5+fn/9/f3//T09f/09PT/9PT0//Ly8v/y8vL/9PT0//T0 - 9P/09PT/9PT0//T09P/08vT/8vXw//by8v/28vX/9PL0//L08v/y9PL//ffo/8WYb/+eUhH/qVQL/6hS - Dv+jVBH/xqSD/AAAAACvWhP+qFEL/6dTC/+eVBD/p3RG//n15f/y8/T/8fP0//Xy8//38vT/9PT0//T0 - 9P/09PT/9PT0//Ly8v/z8/P/8vLy//Pz8//39/j//f39//39/f/+/v7//v7+//39/f/9/f3//f39//v7 - +//+/v7//Pz8//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//39/f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//39 - /f/9/f3//v7+//7+/v/+/v7//f39//7+/v/9/f3//v7+//39/f/9/f3/+vr7//T09P/z8/P/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PL0//L18P/28vL/9vL1//Ty9P/y9PL/8vTy//336P/FmG//nlIR/6lU - C/+pUxD/olMR/8SigPwAAAAArVcP/qpSDf+nUwv/nFMQ/7B+Uv/59eb/8PP0/+/z9P/18vP/9/L0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/9PT1//j4+f/7+/v/+fn6//39/f/9/f3//f39//39 - /f/8/Pz/+vr6//39/f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/9/f3//f39//7+/v/+/v7//v7+//7+/v/+/v7//f39//39/f/9/f3/+vr6//39/f/6+vr/8vLy//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//Ty9P/y9fD/9vLy//by9f/08vT/8vTy//L08v/99+j/xZhv/55S - Ef+pVAv/qVMQ/6JTEf/EooD8AAAAAKtWDf6nUgr/p1QL/51REP+zf1T/+fTn//Dz9P/u8/T/8/Ly//fy - 8//09PT/9PT0//T09P/09PT/8vLy//Pz8//09PT/8vLy//Ly8v/w8PD/5ubm/9PT0//Z2dn/4ODg/+rq - 6v/x8fH/+/v7//v7+//+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//f39//39/f/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//f39//39/f/9/f3//Pz8//v7/P/5+fn/9/f3//b29//19fX/9PT0//f3+P/9/f3//f39//X1 - 9v/y8vL/9PT0//T09P/09PT/9PT0//T09P/08vT/8vXw//by8v/28vX/9PL0//L08v/y9PL//ffo/8WY - b/+eUhH/qVQL/6lTEP+iUxH/xKKA/AAAAACoVQj+p1MK/6ZTC/+fUxH/rHZN//n06P/w8vf/7vP0//H0 - 8v/09PL/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8/Pz//T09P/y8vL/8/Pz/97e3v/Dw8P/w8PD/8PD - w//AwMD/yMjI/+7u7v/y8vL/8/P0//b29v/29/f/9/f4//j4+P/5+fn/+fn5//v7+//8/Pz//Pz8//39 - /f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//7+/v/9/f3//f39//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//39/f/9/f3//f39//7+ - /v/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//Pz8//r6+v/5+fn/+fn5//j4 - +P/39/j/9vf3//X29v/z8/T/8/P0//Pz9P/z8/P/8/Pz//Ly8v/z8/P/8vLy//T09P/8/Pz//v7+//39 - /f/5+fn/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PL0//L18P/28vL/9vL1//Ty9P/y9PL/8vTy//33 - 6P/FmG//nlIR/6lUC/+pUxD/olMR/8SigPwAAAAAp1YH/qtWDP+mUwn/n1MS/6x1TP/69Of/8PL1/+7z - 9P/x9PL/9PTy//T09P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//09PT/8vLy//Hx8f/Y2Nj/xMTE/8bG - xv/Dw8P/xMTE/8LCwv/t7e3/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//X19f/19fX/9fX2//X19v/29vf/9/f3//j4+P/5+fn/+fn6//n5+v/6+vr/+vr6//v7 - +//9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//f39//39/f/9/f3//f39//39/f/8/Pz/+/v7//v7+//6+vr/+vr6//n5 - +f/5+fn/+Pj4//f39//29vf/9fX2//X19v/19fX/9fX1//X19f/z8/T/8/Pz//T09P/09PT/9PT0//Ly - 8v/y8vL/8/Pz//Pz8//y8vL/8vLy//Pz8//z8/P/8/Pz//Pz8//y8vL/8/Pz//Ly8v/09PX//Pz9//7+ - /v/+/v7/+vr6//X19f/09PT/9PT0//T09P/09PT/9PT0//Ty9P/y9fD/9vLy//by9f/08vT/8vTy//L0 - 8v/99+j/xZhv/55SEf+pVAv/qVMQ/6JTEf/Eon/8AAAAAKpUB/6qUgr/p1QL/59UEP+mcUT/+vPl//Lx - 8//w9PT/9PXz//Lx8f/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/0tLS/8PD - w//Dw8P/xcXF/8TExP/CwsL/5ubm//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz//Ly8v/y8vL/8vLy//Ly8v/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8vLy//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09f/09PX/9PT1//X29v/29vf/9vb3//b2 - 9//29vf/9/f3//f39//39/f/9/f3//f39//5+fn/+fn5//n5+f/5+fn/+vr6//r6+v/6+vr/+/v7//v7 - +//6+vr/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v8//v7/P/7+/z/+/v8//v7 - /P/7+/z/+/v8//v7/P/7+/z/+/v8//v7/P/7+/z/+/v8//v7/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8 - /P/8/Pz//Pz8//z8/P/8/Pz//f39//39/f/9/f3//f39//39/f/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8 - /P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz/+/v8//v7/P/7+/z/+/v8//v7/P/7+/v/+/v7//v7 - +//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//r6 - +v/6+vr/+fn5//n5+f/5+fn/+fn5//n5+f/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9vb3//b2 - 9//29vf/9PT1//T09f/09PX/9PT1//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//Pz9P/y8vL/9/f3//39 - /f/+/v7//v7+//39/f/29vb/9PT0//T09P/09PT/9PT0//T09P/08vT/8vXw//by8v/28vX/9PL0//L0 - 8v/y9PP//ffo/8WYb/+eUxD/qVQI/6lUD/+iUw//xKJ//AAAAACsVAf+rVMK/6hUC/+eVA//pXFB//v0 - 5f/z8vP/8PT0//P08//08vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy/8/P - z//CwsL/xMTE/8TExP/FxcX/xMTE/+Li4v/y8vL/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//T09P/09PT/9PT0//Ly8v/y8vL/8/Pz//T0 - 9P/09PT/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT1//T09f/09PX/9PT1//T0 - 9f/09PX/9PT1//T09f/09PX/9PT1//T09f/09PX/9PT1//T09f/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT1//T09f/09PX/9PT1//T09f/09PX/9PT1//T09f/09PX/9PT1//T0 - 9f/09PX/9PT1//T09f/09PX/9PT1//T09f/09PX/9PT1//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/09PT/9PT0//Ly - 8v/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/z8/T/9PT0//j4 - +P/+/v7//v7+//7+/v/+/v7/9/f3//T09P/09PT/9PT0//T09P/09PT/9PL0//L18P/28vL/9vL1//Ty - 9P/y9PL/8vTz//336P/FmG//nlMQ/6lUCP+pVA//olMP/8WhgP0AAAAArFQH/q1TCv+oVAv/n1QR/6Ft - Pv/+8uL/9fL0//Hz9P/y9PP/9PLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/+7u - 7v/Kysr/w8PD/8bGxv/ExMT/xcXF/8TExP/b29v/8vLy//Pz8//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/8vLy//Ly8v/y8vL/8vLy//Pz8//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/z8/P/9PT0//Ly8v/y8vL/9PT0//T0 - 9P/09PT/9PT0//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Pz8//09PT/9PT0//T09P/y8vL/9PT0//T0 - 9P/09PT/9PT0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//y8vL/8vLy//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/4+Pn//v7+//39/f/+/v7//v7+//n5+f/09PT/9PT0//T09P/09PT/9PT0//Ty9P/y9fD/9vLy//by - 9f/08vT/8vTy//L08//99+j/xZhv/55TEP+pVAj/qVQP/6JTD//Eon/8AAAAAKxUB/6tUwr/qVQJ/6BU - D/+gajr//O7d//by8//y8/P/8fPy//Py8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/q6ur/x8fH/8XFxf/FxcX/xMTE/8TExP/ExMT/1dXV//Pz9P/z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Ly8v/y8vL/8vLy//Ly8v/z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//09PT/9PT0//T09P/y8vL/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//Pz8//09PT/8vLy//Ly - 8v/09PT/9PT0//T09P/y8vL/8vLy//Pz8//09PT/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/T/8/P0//Pz9P/z8/T/8/P0//Ly8v/y8vL/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/z8/P/8/Pz//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//Pz - 8//y8vL/9PT0//T09P/09PT/8vLy//Ly8v/y8vL/8vLy//Ly8v/z8/P/9PT0//T09P/09PT/9PT0//Ly - 8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly - 8v/z8/P/+vr6//7+/v/9/f3//v7+//7+/v/6+/v/9PT0//T09P/09PT/9PT0//T09P/08vT/8vXw//by - 8v/28vX/9PL0//L08v/y9PP//ffo/8WYb/+eUxD/qVQI/6lUD/+iUw//xKJ//AAAAACrVAn+q1MK/6lU - Cf+hVA7/oGk5//rq2P/28vP/8fP0//Dy8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/5ubm/8XFxf/FxcX/xMTE/8XFxf/ExMT/xMTE/9LS0v/z8/T/8/Pz//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//y8vL/8vLy//T09P/y8vL/8vLy//Ly - 8v/09PT/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/z8/P/9PT0//T09P/09PT/9PT0//Ly - 8v/z8/P/9PT0//T09P/09PT/8vLy//Ly8v/z8/P/9PT0//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Ly8v/y8vL/8vLy//Ly8v/z8/P/9PT0//T0 - 9P/09PT/9PT0//Ly8v/y8vL/8vLy//Ly8v/y8vL/8/P0//Pz9P/z8/T/8/P0//Pz9P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8vLy//Ly8v/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//Ly - 8v/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly8v/y8vL/8vLy//Ly - 8v/y8vL/8/Pz//T09P/09PT/9PT0//Ly8v/y8vL/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/y8vL/9PT0//z8/P/+/v7//f39//7+/v/+/v7/+/v7//T09P/09PT/9PT0//T09P/09PT/9PL0//L1 - 8P/28vL/9vL1//Ty9P/y9PL/8vTz//336P/FmG//nlMQ/6lUCP+pVA//olMP/8Sif/wAAAAAqVQJ/qtT - Cv+qVAn/oVMM/51jMv/46Nb/9/Py/+/x8f/x9PP/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Ly - 8v/09PT/9PT0/+Li4v/ExMT/xMTE/8TExP/ExMT/w8PD/8TExP/Ozs7/8/P0//Pz8//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//y8vL/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly - 8v/09PT/8vLy//X29v/9/f3//v7+//7+/v/+/v7//v7+//z8/P/09PT/9PT0//T09P/y8vL/8/P0//Ty - 9P/y9fD/9vLy//by9f/08vT/8vTy//L08//99+j/xZhv/55TEP+pVAj/p1IM/6JTEP/Fo4D8AAAAAKlU - Cf6qUwr/qlQJ/6RUDf+dYC7/9eTS//j08f/y9PT/8fTz//L09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//y8vL/9PT0//Ly8v/d3d3/w8PD/8TExP/FxcX/xcXF/8TExP/ExMT/zc3N//Pz8//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/8vLy//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8vLy//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/y8vL/9PT0//Ly8v/29vb//v7+//7+/v/+/v7//v7+//7+/v/9/f3/9PT0//Pz8//09PT/8vLy//Pz - 8//08vT/8vXw//by8v/28vX/9PL0//L08v/y9PP//ffo/8WYb/+eUxD/qVQI/6dSDP+iUxD/xaOA/AAA - AACoVAr+qlQN/6pUCf+kUw3/m10q//Pjz//38vD/8vPy//Dz8//y9PT/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/P/8/Pz//T09P/y8vL/2dnZ/8TExP/ExMT/xcXF/8PDw//ExMT/xMTE/8rKyv/u7u7/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly - 8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz//Ly8v/y8vL/8vLy//Ly8v/z8/P/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//Pz - 8//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL/9vb3//7+/v/+/v7//v7+//7+/v/+/v7//f39//X19f/y8vL/9PT0//Ly - 8v/z8/P/9PL0//L18P/28vL/9vL1//Ty9P/y9PL/8vTz//336P/FmG//nlMQ/6lUCP+nUgz/olMQ/8Wj - gPwAAAAAqFQK/qpUDf+qVAn/pVQL/5haJ//w4Mz/+PLv//P18//u8/H/8vT0//T09P/09PT/9PT0//T0 - 9P/y8vL/8vLy//Pz8//09PT/8fHx/9TU1P/ExMT/xMTE/8XFxf/Dw8P/xMTE/8TExP/IyMj/7Ozs//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly - 8v/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/8vLy//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//n5+f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/29/f/8vLy//Ly - 8v/09PT/9PT0//Ty9P/y9fD/9vLy//by9f/08vT/8vTy//L08//99+j/xZhv/55TEP+pVAj/p1IM/6JT - EP/Fo4D8AAAAAKhUCv6rVAv/q1QI/6ZTDP+XVyT/7dvI//ny7v/09fT/8PTy//L09P/09PT/9PT0//T0 - 9P/09PT/8vLy//Ly8v/z8/P/8/Pz//Hx8f/Ozs7/w8PD/8TExP/FxcX/w8PD/8XFxf/ExMT/xsbG/+rq - 6v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/y8vL/8vLy//Ly8v/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/8vLy//Ly8v/y8vL/8vLy//Pz8//09PT/9PT0//T09P/09PT/8vLy//Ly - 8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//6+vr//v7+//7+/v/+/v7//v7+//7+/v/+/v7/9/f4//Ly - 8v/y8vL/9PT0//Pz8//08vT/8vXw//by8v/28vX/9PL0//L08v/y9PL//ffo/8WYb/+eUhD/qVQI/6dS - Df+iUxH/xaKA/AAAAACqVQr+q1QL/6xVCf+mUwv/lFQe/+vZyP/69O7/8vLy//L09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL/9vb2//Ly8v/y8vL/ycnJ/8XFxf/FxcX/xMTE/8TExP/FxcX/xcXF/8TE - xP/o6Oj/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/+/v7//7+/v/+/v7//v7+//7+/v/+/v7//v7+//n5 - +f/y8vL/8/Pz//T09P/y8vL/9PL0//L18P/28vL/9vL1//Ty9P/y9PL/8vTy//336P/FmG//nlIR/6lU - C/+pUxD/olMR/8SigPwAAAAAq1UK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTu//Ly8v/z9PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8vLy//Pz9P/y8vL/8fHx/8nJyf/FxcX/xcXF/8XFxf/ExMT/xMTE/8XF - xf/Dw8P/4uLi//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/z8/T/8vLy//v7+//+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/7+/v/8vLy//Pz8//09PT/8vLy//Ty9P/y9fD/9vLy//by9f/08vT/8vTy//L08v/99+j/xZhv/55S - Ef+pVAv/qVMQ/6JTEf/EooD8AAAAAKtVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07v/y8vL/8/T0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//z8/P/8/Pz/+7u7v/Hx8f/xcXF/8XFxf/FxcX/xcXF/8TE - xP/FxcX/w8PD/9vb2//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/8/P0//Pz8//8/Pz//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//Pz8//Ly8v/z8/P/9PT0//Ly8v/08vT/8vXw//by8v/28vX/9PL0//L08v/y9PL//ffo/8WY - b/+eUhH/qVQL/6lTEP+iUxH/xKKA/AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O7/8vLy//P0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/z8/P/8/Pz//Pz8//t7e3/xsbG/8TExP/FxcX/xcXF/8XF - xf/ExMT/xcXF/8PDw//X19f/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//u7u7/4eHh/9nZ - 2f/T09P/0NDQ/9DQ0P/T09P/2tra/9TU1P/R0dH/0NDQ/9LS0v/W1tb/4ODg/+np6f/z8/P/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy/+Tk - 5P/e3t7/09PT/9DQ0P/Q0ND/09PT/9jY2P/X19f/0tLS/9DQ0P/Q0ND/09PT/97e3v/j4+P/8vLy//Pz - 8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//T09P/09PT//Pz8//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//39/f/09PT/8/Pz//T09P/y8vL/9PL0//L18P/28vL/9vL1//Ty9P/y9PL/8vTy//33 - 6P/FmG//nlIR/6lUC/+pUxD/olMR/8SigPwAAAAAq1UK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly - 8f/z9PT/8vLy//T09P/09PT/8/Pz//Ly8v/y8vL/8/Pz//Ly8v/z8/P/7e3t/8bGxv/ExMT/xcXF/8XF - xf/FxcX/xMTE/8TExP/ExMT/1NTU//Ly8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/P/8vLy//T09P/09PT/8vLy//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/m5ub/zc3N/8TE - xP/ExMT/xMTE/8XFxf/FxcX/xcXF/8TExP/ExMT/xcXF/8XFxf/FxcX/xMTE/8XFxf/Jycn/2dnZ/9/f - 3//y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8/+0tLT/OTk5/0tL - S/+4uLj/xMTE/8TExP/FxcX/xcXF/8XFxf/FxcX/xMTE/8XFxf/FxcX/xcXF/8XFxf/ExMT/xsbG/9PT - 0//s7Oz/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/8/P0//39/f/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/8/Pz/9PT0//Ly8v/09PT/8/Pz//Ty9P/y9fD/9vLy//by9f/z8vP/8vPy//Hy - 8v/79eb/xZdv/55TE/+pVAv/qVMQ/6JTEf/EooD8AAAAAKpUCv6rVAv/rVUJ/6ZUC/+VVh//69nI//r0 - 7f/y8vH/8/T0//Ly8v/09PT/9PT0//T09P/09PT/8vLy//T09P/y8vL/9PT0/+3t7f/Gxsb/xcXF/8XF - xf/FxcX/xcXF/8XFxf/Dw8P/xcXF/9HR0f/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz//Ly8v/09PT/9PT0//Ly8v/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/x8fH/8PD - w//FxcX/xMTE/8TExP/ExMT/w8PD/8TExP/FxcX/xMTE/8TExP/ExMT/w8PD/8TExP/ExMT/xsbG/83N - zf/FxcX/5ubm//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/x8fH/UlJS/zg4 - OP83Nzf/m5ub/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8PDw//ExMT/xMTE/8bG - xv+/v7//0dHR//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//b29v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//f39//X19f/y8vL/9PT0//Pz8//08vT/8vXw//by8v/28vX/8/Lz//Pz - 8v/y8/P//PTm/8WXb/+fVBT/qVQL/6lTEP+iUxH/xKKA/AAAAACqVAr+q1QL/61VCf+mVAv/lVYf/+vZ - yP/69O3/8vLx//P09P/y8vL/8vLy//Pz8//09PT/9PT0//Ly8v/09PT/8/Pz//Ly8//q6ur/xsbG/8XF - xf/FxcX/xcXF/8XFxf/FxcX/w8PD/8TExP/Pz8//8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//y8vL/9PT0//T09P/y8vL/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/1xc - XP+JiYn/oKCg/7a2tv/IyMj/xsbG/8bGxv/Hx8f/ycnJ/8rKyv/Gxsb/xsbG/8bGxv+9vb3/qKio/6Oj - o//Hx8f/xMTE/8jIyP/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/5ubm/0BA - QP84ODj/Nzc3/1hYWP+4uLj/ysrK/8bGxv/Gxsb/xsbG/8nJyf/IyMj/xsbG/8bGxv/Gxsb/yMjI/7e3 - t/+FhYX/UVFR/1tbW//m5ub/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//29vb//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//39/f/29vb/8vLy//Pz8//y8vL/9PL0//L18P/28vL/9vL1//Py - 8//z8/L/8vPz//z05v/Fl2//n1QU/6lUC/+pUxD/olMR/8SigPwAAAAAqlQK/qtUC/+tVQn/plQL/5VW - H//r2cj/+vTt//Ly8f/z9PT/8vLy//Pz8//z8/P/9PT0//T09P/z8/P/9PT0//Ly8v/y8vP/6Ojo/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8PDw//ExMT/zMzM//Hx8f/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/8vLy//T09P/09PT/8vLy//Pz8//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//Ly8v/y8vL/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/93d - 3f83Nzf/OTk5/0BAQP9FRUX/W1tb/1hYWP9ZWVn/Wlpa/1lZWf9dXV3/WVlZ/1hYWP9ZWVn/TExM/zMz - M/+lpaX/w8PD/8XFxf/ExMT/7+/v//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/+Li - 4v84ODj/ODg4/zg4OP8iIiL/R0dH/11dXf9ZWVn/WFhY/1lZWf9aWlr/Wlpa/1lZWf9YWFj/WVlZ/1pa - Wv9FRUX/Dg4O/zc3N/9CQkL/zc3N//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9vf3//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/9/f3/9vb2//Ly8v/z8/P/8vLy//Ty9P/y9fD/9vLy//by - 9f/z8vP/8/Py//Lz8//89Ob/xZdv/59UFP+pVAv/qVMQ/6JTEf/EooD8AAAAAKpUCv6rVAv/rVUJ/6ZU - C/+VVh//69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//Pz8//z8/P/8/Pz//Pz9P/y8vL/8vLy/+fn - 5//FxcX/xcXF/8XFxf/FxcX/xcXF/8PDw//ExMT/xcXF/8rKyv/x8fH/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Ly8v/09PT/9PT0//Ly8v/z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/W1tb/Ojo6/zc3N/8sLCz/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/xsbG/8PDw//FxcX/xcXF/+np6f/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/i4uL/NjY2/zg4OP83Nzf/KSkp/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/xISEv82Njb/NjY2/6ysrP/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//b3 - 9//+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//f39//b29v/y8vL/9PT0//Ly8v/08vT/8vXw//by - 8v/28vX/8/Lz//Pz8v/y8/P//PTm/8WXb/+fVBT/qVQL/6lTEP+iUxH/xKKA/AAAAACrVQr+q1QL/61V - Cf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/y8vL/8vLy//Ly8v/z8/P/8/Pz//Pz8//y8vL/8vLy//Pz - 8//g4OD/xcXF/8XFxf/FxcX/xcXF/8XFxf/Dw8P/w8PD/8XFxf/IyMj/8PDw//Ly8v/y8vL/8vLy//Ly - 8v/y8vL/9PT0//T09P/09PT/9PT0//Pz8//y8vL/8vLy//Ly8v/y8vL/8/Pz//T09P/09PT/9PT0//T0 - 9P/y8vL/8vLy//Ly8v/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly8v/y8vL/8vLy//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Ly - 8v/y8vL/y8vL/zg4OP84ODj/MDAw/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/8DAwP/Dw8P/xcXF/8XFxf/m5ub/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/4uLi/zc3N/84ODj/Nzc3/ywsLP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8aGhr/NjY2/zg4OP9/f3//8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly - 8v/4+Pj//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//39/f/3+Pj/8vLy//T09P/y8vL/9PL0//L1 - 8P/28vL/9vL1//Py8//z8/L/8vPy//z25//El2//n1MR/6lUCP+oUw7/olMQ/8WigPwAAAAAq1UK/qtU - C/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly8f/z9PT/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/8vLy//Ly - 8v/z8/P/39/f/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/FxcX/yMjI/+/v7//y8vL/8vLy//Ly - 8v/y8vL/8vLy//T09P/09PT/9PT0//T09P/z8/P/8vLy//Ly8v/y8vL/8vLy//Pz8//09PT/9PT0//T0 - 9P/09PT/8vLy//Ly8v/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/9PT0//Ly - 8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//y8vL/8vLy/7W1tf82Njb/ODg4/zIyMv8DAwP/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP+/v7//w8PD/8XFxf/FxcX/5+fn//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0/+Li4v83Nzf/ODg4/zc3N/8mJib/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/IiIi/zc3N/84ODj/goKC//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/y8vL/+fn5//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/9/f3/+Pn5//Ly8v/09PT/8vLy//Ty - 9P/y9fD/9vLy//by9f/08vT/9PTy//L08//99+j/xZhv/59TEf+pVAj/qFMO/6JTEP/Fo4D8AAAAAKtV - Cv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//Ly8v/y8vL/8vLy//T09P/09PT/9PT0//Ly - 8v/09PT/8/Pz/93d3f/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xMTE/8fHx//u7u7/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/8/Pz//Ly8v/y8vL/8vLy//Ly8v/z8/P/9PT0//T0 - 9P/09PT/9PT0//Ly8v/y8vL/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/y8vL/9PT0//T0 - 9P/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/P/8vLy//Ly8v+cnJz/ODg4/zg4OP81NTX/BwcH/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/w8PD/8PDw//ExMT/xcXF/+rq6v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/i4uL/NDQ0/zg4OP83Nzf/Hx8f/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/ykpKf83Nzf/ODg4/21tbf/y8vL/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8vLy//r6+v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//f39//j5+f/z8/P/9PT0//Ly - 8v/08vT/8vXw//by8v/28vX/9PL0//T08v/y9PP//ffo/8WYb/+fUxH/qVQI/6hTDv+iUxD/xaOA/AAA - AACrVQr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/y8vL/8vLy//Ly8v/09PT/9PT0//T0 - 9P/y8vL/9PT0//Ly8v/b29v/xcXF/8XFxf/FxcX/xcXF/8XFxf/ExMT/xcXF/8TExP/Hx8f/7+/v//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//T0 - 9P/09PT/8/Pz//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/h4eH/zg4OP84ODj/NjY2/wkJCf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/8HBwf/FxcX/xMTE/8XFxf/u7u7/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/4uLi/zQ0NP84ODj/ODg4/x0dHf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wEBAf8uLi7/ODg4/zg4OP9aWlr/8fHx//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Ly8v/6+vr//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//39/f/4+fn/8/Pz//T0 - 9P/y8vL/9PL0//L18P/28vL/9vL1//Ty9P/09PL/8vTz//336P/FmG//n1MR/6lUCP+oUw7/olMQ/8Wj - gPwAAAAAq1UK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly8f/z9PT/8vLy//Ly8v/y8vL/9PT0//T0 - 9P/09PT/8PDw//T09P/y8vP/2tra/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8bGxv/ExMT/x8fH/+7u - 7v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//09PT/9PT0//T09P/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/4qKiv84ODj/ODg4/zg4OP8NDQ3/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/FxcX/w8PD/8XFxf/ExMT/6+vr//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/+Li4v82Njb/ODg4/zc3N/8mJib/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8DAwP/MDAw/zg4OP84ODj/Xl5e//Hx8f/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL/+/v7//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/9/f3/+Pn5//Pz - 8//09PX/8vLy//Ty9P/y9fD/9vLy//by9f/08vT/9PTy//L08//99+j/xZhv/59TEf+pVAj/qFMO/6JT - EP/Fo4D8AAAAAKtVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//z8/P/9PT0/9TU1P/ExMT/xcXF/8XFxf/FxcX/xMTE/8XFxf/ExMT/xcXF/8fH - x//t7e3/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P+Pj4//ODg4/zg4OP83Nzf/FhYW/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/wcHB/8PDw//FxcX/xcXF/+fn5//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/i4uL/Nzc3/zg4OP83Nzf/LCws/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BQUF/zExMf84ODj/ODg4/1NTU//v7+//9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL/9PT0//z8/P/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//r6 - +v/z8/P/9PT0//Ly8v/08vT/8vXw//by8v/28vX/9PL0//L08v/y9PL//ffo/8WYb/+eUxD/qVQI/6hT - Dv+iUxD/xaOA/AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/8/Pz//Pz8//T09P/xMTE/8XFxf/FxcX/xcXF/8TExP/FxcX/xMTE/8XF - xf/Gxsb/7Ozs//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/hoaG/zg4OP84ODj/ODg4/xkZGf8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/7+/v//ExMT/xcXF/8XFxf/m5ub/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/4uLi/zc3N/84ODj/ODg4/yoqKv8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wcHB/8zMzP/ODg4/zc3N/9GRkb/7e3t//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8vLy//T09P/8/Pz//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/6+vr/8/Pz//T09P/y8vL/9PL0//L18P/28vL/9vL1//Ty9P/y9PL/8vTy//336P/FmG//nlMQ/6lU - CP+oUw7/olMQ/8WjgPwAAAAAq1UK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly8f/z9PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8vLy//Pz9P/y8vL/09PT/8TExP/FxcX/xcXF/8XFxf/ExMT/xcXF/8TE - xP/FxcX/xcXF/+rq6v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/2JiYv84ODj/ODg4/zg4OP8bGxv/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP/BwcH/w8PD/8XFxf/FxcX/6Ojo//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/+Li4v83Nzf/ODg4/zc3N/8iIiL/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8LCwv/NDQ0/zg4OP84ODj/SEhI/+3t - 7f/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/09PT//Pz8//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7/+vr6//Pz8//09PX/8vLy//Ty9P/y9fD/9vLy//by9f/08vT/8vTy//L08v/99+j/xZhv/55T - EP+pVAj/qFMO/6JTEP/Fo4D8AAAAAKtVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/09PT/8PDw/9HR0f/ExMT/xcXF/8XFxf/FxcX/xMTE/8XF - xf/FxcX/xcXF/8TExP/p6en/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P9dXV3/ODg4/zg4OP84ODj/Hh4e/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/rKys/8TExP/CwsL/wsLC/+np - 6f/k5OT/5eXl/+bm5v/g4OD/5OTk/9fX1//Y2Nj/2NjY/9jY2P/Y2Nj/09PT/9TU1P/U1NT/1NTU/9PT - 0//Y2Nj/2NjY/9jY2P/X19f/19fX/+Hh4f/n5+f/5+fn/+Xl5f/Y2Nj/Pz8//zg4OP83Nzf/FBQU/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Dw8P/zU1Nf84ODj/ODg4/0dH - R//t7e3/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT1//z8/P/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//r6+v/z8/P/9PT1//Ly8v/08vT/8vXw//by8v/28vX/9PL0//L08v/y9PL//ffo/8WY - b/+eUxD/qVQI/6hTDv+iUxD/xaOA/AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/9PT0//Dw8P/Q0ND/xMTE/8XFxf/FxcX/xcXF/8TE - xP/FxcX/xcXF/8XFxf/ExMT/6Ojo//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/X19f/zg4OP84ODj/ODg4/yEh - If8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/2hoaP+7u7v/k5OT/4KC - gv+ioqL/Ozs7/0hISP9MTEz/RUVF/0lJSf87Ozv/Ozs7/zw8PP88PDz/PDw8/zY2Nv83Nzf/Nzc3/zc3 - N/83Nzf/PDw8/zw8PP88PDz/PDw8/zo6Ov9HR0f/TU1N/01NTf9GRkb/QUFB/zs7O/84ODj/Nzc3/wwM - DP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xAQEP82Njb/ODg4/zg4 - OP9BQUH/7Ozs//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09f/8/Pz//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/8/Pz/8/Pz//T09f/y8vL/9PL0//L18P/28vL/9vL1//Ty9P/y9PL/8vTy//33 - 6P/FmG//nlMQ/6lUCP+oUw7/olMQ/8WjgPwAAAAAqlQK/qtUC/+tVQn/plQL/5VWH//r2cj/+vTt//Ly - 8f/z9PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/9fX1//Ly8v/x8fH/zc3N/8TExP/FxcX/xcXF/8XF - xf/FxcX/w8PD/8TExP/FxcX/xsbG/+bm5v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/2FhYf84ODj/ODg4/zc3 - N/8mJib/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8FBQX/hoaG/0ZG - Rv81NTX/Ojo6/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4 - OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zk5Of8zMzP/MTEx/zAw - MP8JCQn/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8SEhL/Nzc3/zg4 - OP83Nzf/RUVF/+3t7f/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT//f39//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//Pz8//Pz8//y8vL/9PT0//Ty9P/y9fD/9vLy//by9f/08vT/8vTy//L0 - 8v/99+j/xZhv/55TEP+pVAj/qVQP/6JTD//Eon/8AAAAAKpUCv6rVAv/rVUJ/6ZUC/+VVh//69nI//r0 - 7f/y8vH/8/T0//T09P/09PT/9PT0//T09P/09PT/8vLy//T09P/y8vL/8PDw/8zMzP/ExMT/xcXF/8XF - xf/FxcX/xcXF/8PDw//ExMT/xcXF/8bGxv/l5eX/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P9hYWH/ODg4/zg4 - OP84ODj/KSkp/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/3h4 - eP+AgID/JSUl/yYmJv8tLS3/NjY2/zU1Nf82Njb/Nzc3/zc3N/83Nzf/Nzc3/zg4OP84ODj/Nzc3/zg4 - OP83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/83Nzf/Nzc3/zc3N/82Njb/Nzc3/zY2Nv8vLy//JCQk/yUl - Jf8XFxf/AQEB/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/EhIS/zg4 - OP84ODj/ODg4/zQ0NP/q6ur/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//39/f/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//39/f/z8/P/9PT0//Pz8//08vT/8vXw//by8v/28vX/9PL0//L0 - 8v/y9PL//ffo/8WYb/+eUxD/qVQI/6lUD/+iUw//xKJ//AAAAACqVAr+q1QL/61VCf+mVAv/lVYf/+vZ - yP/69O3/8vLx//P09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/z8/T/8/Pz//Dw8P/Ly8v/xMTE/8XF - xf/FxcX/xcXF/8XFxf/Dw8P/w8PD/8XFxf/FxcX/4+Pj//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/YWFh/zg4 - OP84ODj/ODg4/ykpKf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8WFhb/ISEh/wEBAf8BAQH/BAQE/wcHB/8HBwf/ERER/xoaGv8eHh7/Jycn/ysrK/8vLy//MTEx/zEx - Mf8zMzP/NDQ0/zMzM/8yMjL/MDAw/y8vL/8rKyv/JiYm/yAgIP8aGhr/EhIS/wcHB/8ICAj/AwMD/wEB - Af8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xMT - E/84ODj/ODg4/zg4OP80NDT/6urq//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/9/f3//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/9/f3/9PT0//T09P/y8vL/9PL0//L18P/28vL/9vL1//Ty - 9P/y9PL/8vTy//336P/FmG//nlMQ/6lUCP+pVA//olMP/8Sif/wAAAAAqlQK/qtUC/+tVQn/plQL/5VW - H//r2cj/+vTt//Ly8f/z9PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/8/P0//Pz8//t7e3/ysrK/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xMTE/8PDw//ExMT/xcXF/+Hh4f/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/2Ji - Yv84ODj/ODg4/zg4OP8rKyv/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8TExP/Nzc3/zg4OP84ODj/NTU1/+rq6v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT//f39//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//f39//X19f/09PT/8vLy//Ty9P/y9fD/9vLy//by - 9f/08vT/8vTy//L08v/99+j/xZhv/55TEP+pVAj/qVQP/6JTD//Eon/8AAAAAKpUCv6rVAv/rVUJ/6ZU - C/+UVR7/69nI//r07f/y8vH/8/T0//Pz8//09PT/9PT0//T09P/09PT/8vLy//Ly8//z8/T/7e3t/8nJ - yf/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/Dw8P/xMTE/8TExP/f39//9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/9PT0//T09P/z8/P/8/Pz//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//09PT/9PT0//Pz8//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/9PT0//T09P/z8/P/8/Pz//T09P/09PT/9PT0//T09P/z8/P/8/Pz//T0 - 9P9iYmL/ODg4/zg4OP84ODj/LCws/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/FBQU/zg4OP84ODj/ODg4/zU1Nf/q6ur/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/T/9fX1//39 - /f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//39/f/19vb/8/Pz//Ly8v/08vT/8vXw//by - 8v/28vX/9PL0//L08v/y9PL//ffo/8WYb/+eUxD/qVQI/6lUD/+iUw//xKJ//AAAAACqVAr+q1QL/61V - Cf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T09P/09PT/9PT0//T09P/y8vL/9PT0/+7u - 7v/IyMj/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/Dw8P/39/f//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//T09P/09PT/8vLy//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/9PT0//T09P/y8vL/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8vLy//T09P/09PT/8/Pz//Ly8v/09PT/9PT0//T09P/09PT/8/Pz//Ly - 8v/09PT/Y2Nj/zg4OP84ODj/ODg4/y0tLf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/xQUFP84ODj/ODg4/zg4OP81NTX/6urq//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//f3 - 9//9/f3//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/9/f3/9fb2//Ly8v/y8vL/9PL0//L1 - 8P/28vL/9vL1//Ty9P/y9PL/8vTz//336P/FmG//nlMQ/6lUCP+pVA//olMP/8Sif/wAAAAAqlQK/qtU - C/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly8f/z9PT/8vLy//T09P/09PT/9PT0//T09P/09PT/8vLy//T0 - 9P/t7e3/yMjI/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/ExMT/w8PD/97e3v/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/09PT/9PT0//Ly - 8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//T09P/09PT/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/09PT/9PT0//Pz8//y8vL/9PT0//T09P/09PT/9PT0//Pz - 8//y8vL/9PT0/2NjY/84ODj/ODg4/zg4OP8vLy//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8UFBT/ODg4/zg4OP84ODj/NjY2/+rq6v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly - 8v/39/f//f39//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//X29v/y8vL/8/Pz//Ty - 9P/y9fD/9vLy//by9f/08vT/8vTy//L08//99+j/xZhv/55TEP+pVAj/qVQP/6JTD//Eon/8AAAAAKpU - Cv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//Ly - 8v/09PT/7e3t/8fHx//ExMT/xcXF/8XFxf/FxcX/xcXF/8TExP/FxcX/xcXF/8PDw//d3d3/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/9PT0//T0 - 9P/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/09PT/9PT0//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/9PT0//T09P/z8/P/8vLy//T09P/09PT/9PT0//T0 - 9P/z8/P/8vLy//T09P9jY2P/ODg4/zg4OP83Nzf/MDAw/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/FBQU/zg4OP84ODj/Nzc3/zY2Nv/q6ur/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9/f3//39/f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/29vb/8vLy//T0 - 9P/08vT/8vXw//by8v/28vX/9PL0//L08v/y9PP//ffo/8WYb/+eUxD/qVQI/6lUD/+iUw//xKJ//AAA - AACqVAr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T09P/09PT/9PT0//T0 - 9P/y8vL/9PT0/+3t7f/Hx8f/xMTE/8XFxf/FxcX/xcXF/8XFxf/ExMT/xcXF/8XFxf/Dw8P/3d3d//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//T0 - 9P/09PT/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/9PT0//T0 - 9P/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//T09P/09PT/8/Pz//Ly8v/09PT/9PT0//T0 - 9P/09PT/8/Pz//Ly8v/09PT/ZGRk/zg4OP84ODj/ODg4/y8vL/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/xQUFP84ODj/ODg4/zc3N/82Njb/6urq//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//f39//9/f3//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/9vb2//Ly - 8v/09PT/9PL0//L18P/28vL/9vL1//Ty9P/y9PL/8vTz//336P/FmG//nlMQ/6lUCP+pVA//olMP/8Si - f/wAAAAAqlQK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly8f/z9PT/8vLy//T09P/09PT/9PT0//T0 - 9P/09PT/8vLy//Pz8//t7e3/xsbG/8TExP/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/9zc - 3P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly - 8v/09PT/9PT0//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//Pz - 8//z8/P/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/09PT/9PT0//Pz8//y8vL/9PT0//T0 - 9P/09PT/9PT0//Pz8//y8vL/9PT0/2NjY/84ODj/ODg4/zc3N/8uLi7/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8UFBT/ODg4/zg4OP83Nzf/NTU1/+rq6v/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//39/f//f39//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//X1 - 9v/z8/P/8/Pz//Ty9P/y9fD/9vLy//by9f/08vT/8vTy//Lz8v/89ef/xJdv/55SEf+pVAn/qVMP/6JT - EP/Fon/8AAAAAKtVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//z8/P/7Ozs/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/Dw8P/xcXF/8XF - xf/a2tr/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P9iYmL/ODg4/zg4OP83Nzf/LCws/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FBQU/zg4OP84ODj/Nzc3/zU1Nf/q6ur/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL/9/f3//39/f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/29vb/8vLy//Ly8v/08vT/8vXw//by8v/28vX/9PL0//T09P/y8/P//PTm/8WXb/+fUxP/qVQL/6hS - D/+iUxL/xaOB/AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/8/Pz/+zs7P/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/w8PD/8TE - xP/FxcX/2tra//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/YmJi/zg4OP84ODj/ODg4/ywsLP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xQUFP84ODj/ODg4/zc3N/81NTX/6urq//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8vLy//f39//9/f3//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7/9vb2//Ly8v/y8vL/9PL0//L18P/28vL/9vL1//Ty9P/09PT/8vPz//z05v/Fl2//n1MT/6lU - C/+oUg//olMS/8WjgfwAAAAAq1UK/qtUC/+tVQn/plQL/5RVHv/r2cf/+vTt//Ly8f/z9PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Ly8v/s7Oz/xMTE/8TExP/FxcX/xcXF/8XFxf/FxcX/xcXF/8PD - w//ExMT/xcXF/9nZ2f/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Ly8v/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/2FhYf84ODj/ODg4/zg4OP8qKir/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8TExP/Nzc3/zg4OP84ODj/NTU1/+rq - 6v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/39/f//f39//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//b29v/y8vL/8vLy//Ty9P/y9fD/9vLy//by9f/08vT/9PT0//Lz8//89Ob/xZdv/59T - E/+pVAv/qFIP/6JTEv/Fo4H8AAAAAKtVCv6rVAv/rVUJ/6ZUC/+UVR7/69jH//r07f/y8vH/8/T0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Pz8//y8vL/6+vr/8TExP/ExMT/xcXF/8XFxf/FxcX/xcXF/8XF - xf/Dw8P/xMTE/8TExP/Z2dn/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P9hYWH/ODg4/zg4OP84ODj/KSkp/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ExMT/zg4OP84ODj/ODg4/zU1 - Nf/q6ur/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/9/f3//39/f/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/29vb/8vLy//Ly8v/08vT/8vXw//by8v/28vX/9PL0//T09P/y8/P//PTm/8WX - b/+fUxP/qVQL/6hSD/+iUxL/xaOB/AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vYx//69O3/8vLx//P0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/8vLy/+rq6//ExMT/xMTE/8XFxf/FxcX/xcXF/8TE - xP/FxcX/w8PD/8TExP/FxcX/2dnZ//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/YWFh/zg4OP84ODj/ODg4/ycn - J/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xMTE/84ODj/ODg4/zg4 - OP80NDT/6urq//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//j4+P/9/f3//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7/9vb2//Ly8v/y8vL/9PL0//L18P/28vL/9vL1//Py8//z8/L/8vPz//z0 - 5v/Fl2//n1MT/6lUC/+nUQ7/olMS/8WjgfwAAAAAq1UK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly - 8f/z9PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly8v/r6+v/xcXF/8TExP/FxcX/xcXF/8XF - xf/ExMT/xcXF/8PDw//FxcX/xcXF/9jY2P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/2BgYP84ODj/ODg4/zg4 - OP8iIiL/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8SEhL/ODg4/zg4 - OP84ODj/Ozs7/+vr6//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/5+fn//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//f39//y8vL/8vLy//Ty9P/y9fD/9vLy//by9f/z8vP/8/Py//Lz - 8//89Ob/xZdv/59TE/+pVAv/p1EO/6JTEv/Fo4H8AAAAAKtVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r0 - 7f/y8vH/8/T0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/6urq/8TExP/ExMT/xcXF/8XF - xf/FxcX/xMTE/8XFxf/Dw8P/xcXF/8XFxf/X19f/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P9eXl7/ODg4/zg4 - OP83Nzf/Hx8f/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ERER/zY2 - Nv84ODj/Nzc3/0RERP/t7e3/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/+fn5//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/39/f/8vLy//Ly8v/08vT/8vXw//by8v/28vX/8/Lz//Pz - 8v/y8/P//PTm/8WXb/+fUxP/qVQL/6dRDv+iUxL/xaOB/AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZ - yP/69O3/8vLx//P09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/8vLy/+rq6v/ExMT/xMTE/8XF - xf/FxcX/xcXF/8TExP/ExMT/w8PD/8XFxf/FxcX/1tbW//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/W1tb/zg4 - OP84ODj/ODg4/xwcHP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/w8P - D/82Njb/ODg4/zc3N/9FRUX/7e3t//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//n5+f/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/9/f3//Ly8v/y8vL/9PL0//L18P/28vL/9vL1//Py - 8//z8/L/8vPz//z05v/Fl2//n1MT/6lUC/+nUQ7/olMS/8WjgfwAAAAAq1UK/qtUC/+tVQn/plQL/5RV - Hv/r2cj/+vTt//Ly8f/z9PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly8v/q6ur/xMTE/8TE - xP/FxcX/xcXF/8XFxf/ExMT/xMTE/8PDw//FxcX/xMTE/9bW1v/09PT/9PT0//T09P/09PT/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/3Z2 - dv84ODj/ODg4/zg4OP8aGhr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8NDQ3/NTU1/zg4OP84ODj/SEhI/+3t7f/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/5+fn//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//f39//y8vL/8vLy//Ty9P/y9fD/9vLy//by - 9f/z8vP/8/Py//Lz8//89Ob/xZdv/59TE/+pVAv/p1EO/6JTEv/Fo4H8AAAAAKpUCv6rVAv/rVUJ/6ZU - C/+VVh//69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/6Ojo/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/FxcX/xcXF/8TExP/W1tb/8vLy//T09P/09PT/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Ly8v/09PT/9PT0//Ly8v/z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P+QkJD/ODg4/zg4OP84ODj/FhYW/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/CAgI/zMzM/84ODj/ODg4/0dHR//t7e3/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/+Pj5//39 - /f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/4+Pj/9PT0//Ly8v/08vT/8vXw//by - 8v/28vX/8/Lz//Pz8v/y8/P//PTm/8WXb/+eUxH/qVUI/6lUD/+iUw//xKJ//AAAAACqVAr+q1QL/61V - Cf+mVAv/lVYf/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T09P/09PT/9PT0//T09P/y8vL/8vLy/+jo - 6P/ExMT/xcXF/8XFxf/FxcX/xcXF/8XFxf/ExMT/xcXF/8TExP/ExMT/1tbW//Ly8v/09PT/9PT0//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//Pz8//y8vL/9PT0//T09P/y8vL/8/Pz//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/h4eH/zg4OP84ODj/ODg4/w4ODv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wYGBv8zMzP/ODg4/zg4OP9KSkr/7u7u//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//j4 - +f/9/f3//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/+Pj4//T09P/y8vL/9PL0//L1 - 8P/28vL/9vL1//Py8//z8/L/8vPz//z05v/Fl2//nlMR/6lVCP+pVA//olMP/8Sif/wAAAAAqlQK/qtU - C/+tVQn/plQL/5VWH//r2cj/+vTt//Ly8f/z9PT/8vLy//T09P/09PT/9PT0//T09P/y8vL/9PT0//Ly - 8v/n5+f/xMTE/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/9TU1P/y8vL/9PT0//T0 - 9P/y8vL/9PT0//T09P/09PT/9PT0//T09P/z8/P/8vLy//T09P/09PT/8vLy//Pz8//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0/4mJif84ODj/ODg4/zY2Nv8KCgr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8DAwP/MDAw/zg4OP84ODj/W1tb//Hx8f/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/5+fn//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//j4+P/09PT/8vLy//Ty - 9P/y9fD/9vLy//by9f/z8vP/8/Py//Lz8//89Ob/xZdv/55TEf+pVQj/qVQP/6JTD//Eon/8AAAAAKpU - Cv6rVAv/rVUJ/6ZUC/+VVh//69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//T09P/09PT/8vLy//T0 - 9P/09PT/5ubm/8TExP/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xMTE/8TExP/T09P/8vLy//T0 - 9P/09PT/8vLy//T09P/09PT/9PT0//T09P/09PT/8/Pz//Ly8v/09PT/9PT0//Ly8v/z8/P/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P+JiYn/ODg4/zg4OP81NTX/CAgI/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AQEB/y8vL/84ODj/ODg4/1tbW//x8fH/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/+fn5//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/4+Pj/9PT0//Ly - 8v/08vT/8vXw//by8v/28vX/8/Lz//Pz8v/y8/P//PTm/8WXb/+eUxH/qVUI/6lUD/+iUw//xKJ//AAA - AACqVAr+q1QL/61VCf+mVAv/lVYf/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T09P/09PT/9PT0//Ly - 8v/09PT/9PT0/+bm5v/Dw8P/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/09PT//Ly - 8v/09PT/9PT0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//Pz8//y8vL/9PT0//T09P/y8vL/8/Pz//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/ra2t/zg4OP84ODj/MjIy/wQEBP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8sLCz/ODg4/zg4OP9gYGD/8fHx//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//n5+f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/+Pj4//T0 - 9P/y8vL/9PL0//L18P/28vL/9vL1//Py8//z8/L/8vPz//z05v/Fl2//nlMR/6lVCP+pVA//olMP/8Si - f/wAAAAAqlQK/qtUC/+tVQn/plQL/5VWH//r2cf/+/Tu//Ly8v/z9PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz//Ly8v/l5eX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xcXF/9LS - 0v/w8PD/9PT0//Ly8v/09PT/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly - 8v/09PT/9PT0//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/729vf84ODj/ODg4/zExMf8BAQH/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/Jycn/zc3N/84ODj/fX19//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/5+fn//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//j4 - +P/z8/T/8/Pz//Ty9P/y9fD/9vLy//by9f/z8vP/8/Py//Lz8//89Ob/xZdv/55TEf+pVQj/qVQP/6JT - D//Eon/8AAAAAKpUCv6rVAv/rVUJ/6ZUC/+VVh//69nH//v07v/y8vL/8/T0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//y8vL/5eXl/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xMTE/8XF - xf/S0tL/8PDw//T09P/y8vL/9PT0//Ly8v/09PT/9PT0//T09P/09PT/8/Pz//Ly8v/y8vL/8vLy//Ly - 8v/z8/P/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T0 - 9P/y8vL/9PT0//T09P/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/X19f/Ojo6/zc3N/8uLi7/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yAgIP83Nzf/ODg4/39/f//y8vL/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/+fn5//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/4+Pj/8/P0//Pz8//08vT/8vXw//by8v/28vX/8/Lz//Pz8v/y8/P//PTm/8WXb/+eUxH/qVUI/6lU - D/+iUw//xKJ//AAAAACqVAr+q1QL/61VCf+mVAv/lVYf/+vZx//79O7/8vLy//P09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Ly8v/09PT/8vLy/+Tk5f/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/ExMT/xcXF/8TE - xP/ExMT/0dHR//Dw8P/09PT/8vLy//T09P/y8vL/9PT0//T09P/09PT/9PT0//Pz8//y8vL/8vLy//Ly - 8v/y8vL/8/Pz//T09P/09PT/9PT0//T09P/y8vL/8vLy//Ly8v/y8vL/8vLy//T09P/09PT/9PT0//T0 - 9P/09PT/8vLy//T09P/09PT/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/2dnZ/zk5Of83Nzf/JiYm/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8YGBj/Nzc3/zc3N/+np6f/8/Pz//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//n5+f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7/+Pj4//Pz9P/z8/P/9PL0//L18P/28vL/9vL1//Py8//z8/L/8vPz//z05v/Fl2//nlMR/6lV - CP+pVA//olMP/8Sif/wAAAAAqlQK/qtUC/+tVQn/plQL/5VWH//r2cf/+/Tu//Ly8v/z9PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL/9PT0//Ly8v/k5OT/xMTE/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/ExMT/xMTE/9HR0f/w8PD/9PT0//Ly8v/09PT/8vLy//T09P/09PT/9PT0//T09P/z8/P/8vLy//Ly - 8v/y8vL/8vLy//Pz8//09PT/9PT0//T09P/09PT/8vLy//Ly8v/y8vL/8vLy//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//Ly8v/09PT/9PT0//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P87Ozv/ODg4/xwcHP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/FRUV/xUV - Ff8zMzP/Nzc3/z8/P/82Njb/MzMz/zQ0NP8yMjL/Pz8//z8/P/8yMjL/ODg4/0VFRf9ERET/w8PD//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/5+fn//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//j4+P/z8/T/8/Pz//Ty9P/y9fD/9vLy//by9f/z8vP/8/Py//Lz8//89Ob/xZdv/55T - Ef+pVQj/qVQP/6JTD//Eon/8AAAAAKpUCv6rVAv/rVUJ/6ZUC/+VVh//69nH//v07v/y8vL/8/T0//T0 - 9P/09PT/9PT0//T09P/09PT/8vLy//T09P/y8vL/4+Pj/8TExP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xMTE/8TExP/R0dH/8PDw//T09P/y8vL/9PT0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL/9PT0//T09P/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/rKys/zg4OP85OTn/QEBA/6Ki - ov+srKz/x8fH/6ysrP+hoaH/qKio/56env/IyMj/yMjI/56env+IiIj/Pj4+/xwcHP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8CAgL/PT09/87O - zv/CwsL/w8PD/8TExP/FxcX/xMTE/8TExP/Dw8P/w8PD/8XFxf/FxcX/xMTE/8PDw//Dw8P/np6e/9zc - 3P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/+fn5//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/4+Pj/8/P0//Pz8//08vT/8vXw//by8v/28vX/8/Lz//Pz8v/y8/P//PTm/8WX - b/+eUxH/qVUI/6lUD/+iUw//xKJ//AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/09PT/8vLy/+Tk5f/ExMT/xMTE/8XFxf/FxcX/xcXF/8TE - xP/FxcX/xcXF/8PDw//ExMT/0dHR//Dw8P/09PT/8vLy//T09P/y8vL/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/+zs7P9OTk7/u7u7/8TE - xP/ExMT/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xcXF/8XFxf/FxcX/xMTE/8XFxf+tra3/TU1N/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8KCgr/Jycn/8HB - wf/ExMT/xMTE/8XFxf/FxcX/xMTE/8TExP/ExMT/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8bG - xv/c3Nz/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//n5+f/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7/+fn5//Ly8v/y8vL/9PL0//L18P/28vL/9vL1//Ty9P/09PT/8vPz//z0 - 5v/Fl2//n1MR/6lUCP+nUgz/olMQ/8WjgPwAAAAAq1UK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly - 8f/z9PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/9PT0//Ly8v/k5OX/xcXF/8TExP/FxcX/xcXF/8XF - xf/ExMT/xMTE/8XFxf/ExMT/xMTE/9HR0f/w8PD/9PT0//Ly8v/09PT/8vLy//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/z8/P/8bG - xv/ExMT/xMTE/8TExP/ExMT/w8PD/8TExP/FxcX/xMTE/8TExP/Dw8P/xMTE/8TExP/ExMT/x8fH/83N - zf+enp7/CgoK/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/ISEh/zw8 - PP+EhIT/0dHR/8fHx//FxcX/xMTE/8TExP/Dw8P/xsbG/8bGxv/ExMT/xMTE/8PDw//ExMT/xsbG/8zM - zP/a2tr/6urq//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/5+fn//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//n5+f/y8vL/8vLy//Ty9P/y9fD/9vLy//by9f/08vT/9PT0//Lz - 8//89Ob/xZdv/59TEf+pVAj/p1IM/6JTEP/Fo4D8AAAAAKtVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r0 - 7f/y8vH/8/T0//T09P/09PT/9PT0//T09P/09PT/8/Pz//T09P/y8vL/5eXl/8XFxf/ExMT/xcXF/8XF - xf/FxcX/xMTE/8TExP/FxcX/xMTE/8TExP/R0dH/8PDw//T09P/y8vL/9PT0//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz/+zs - 7P/h4eH/zs7O/8nJyf/FxcX/xcXF/8XFxf/IyMj/zMzM/8bGxv/FxcX/xcXF/8bGxv/Nzc3/2dnZ/9vb - 2//Gxsb/w8PD/1hYWP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/BAQE/zMz - M/84ODj/NjY2//Dw8P/k5OT/19fX/83Nzf/Kysr/y8vL/9TU1P/Y2Nj/0NDQ/8vLy//Kysr/z8/P/93d - 3f/u7u7/8vLy//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/+fn5//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/5+fn/8vLy//Ly8v/08vT/8vXw//by8v/28vX/9PL0//T0 - 9P/y8/P//PTm/8WXb/+fUxH/qVQI/6dSDP+iUxD/xaOA/AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZ - yP/69O3/8vLx//P09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PX/8vLy/+Xl5f/FxcX/xMTE/8XF - xf/FxcX/xcXF/8TExP/ExMT/xcXF/8TExP/FxcX/0tLS//Dw8P/09PT/8vLy//T09P/y8vL/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz/+3t7f/o6Oj/5OTk/+Pj4//k5OT/5+fn/+np6f/m5ub/4+Pj/+Pj4//l5eX/6+vr//Hx - 8f/U1NT/w8PD/8TExP9kZGT/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xUV - Ff83Nzf/ODg4/zg4OP+urq7/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//n5+f/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/+fn5//Ly8v/y8vL/9PL0//L18P/28vL/9vL1//Ty - 9P/09PT/8vPz//z05v/Fl2//n1MR/6lUCP+nUgz/olMQ/8WjgPwAAAAAq1UK/qtUC/+tVQn/plQL/5RV - Hv/r2cj/+vTt//Ly8f/z9PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/9PT0//Ly8v/l5eX/xcXF/8TE - xP/FxcX/xcXF/8XFxf/ExMT/xMTE/8XFxf/ExMT/xMTE/9HR0f/w8PD/9PT0//Ly8v/z8/P/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/zMzM/8TExP/FxcX/rKys/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8fHx//OTk5/zg4OP83Nzf/mZmZ//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/5+fn//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//n5+f/y8vL/8vLy//Ty9P/y9fD/9vLy//by - 9f/08vT/9PTz//Lz8//79Ob/xJZu/59TEf+pVAj/p1IM/6JTEP/FooD8AAAAAKpUCv6rVAv/rVUJ/6ZU - C/+VVh//69nI//r07f/y8vH/8/T0//T09P/09PT/9PT0//T09P/09PT/8vLy//T09P/09PT/5ubm/8TE - xP/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xcXF/8TExP/U1NT/8vLy//T09P/09PT/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0/8fHx//ExMT/xcXF/7Kysv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/JCQk/zk5Of84ODj/Nzc3/3p6ev/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/+fn5//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/5+fn/8vLy//Ly8v/08vT/8vXw//by - 8v/28vX/9PL0//T08v/z8/P/+/Tm/8SWbv+fUxH/qVQI/6lUD/+iUw//xKJ//AAAAACqVAr+q1QL/61V - Cf+mVAv/lVYf/+vZyP/69O3/8vLx//P09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy/+fn - 5//ExMT/xcXF/8XFxf/FxcX/xcXF/8XFxf/ExMT/xMTE/8XFxf/ExMT/1NTU//Ly8v/09PT/9PT0//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/Gxsb/xMTE/8XFxf/Nzc3/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/yQkJP85OTn/ODg4/zg4OP9/f3//9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//n5 - +f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/+fn5//Ly8v/y8vL/9PL0//L1 - 8P/28vL/9vL1//Ty9P/09PL/8/Pz//v05v/Elm7/n1MR/6lUCP+pVA//olMP/8Sif/wAAAAAqlQK/qtU - C/+tVQn/plQL/5VWH//r2cj/+vTt//Ly8f/z9PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly - 8v/o6Oj/xMTE/8TExP/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/FxcX/xcXF/9XV1f/y8vL/9PT0//T0 - 9P/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/xsbG/8PDw//FxcX/u7u7/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8hISH/OTk5/zg4OP83Nzf/nJyc//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/5+fn//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//n5+f/y8vL/8vLy//Ty - 9P/y9fD/9vLy//by9f/08vT/9PTy//Pz8//79Ob/xJZu/59TEf+pVAj/qVQP/6JTD//Eon/8AAAAAKpU - Cv6rVAv/rVUJ/6ZUC/+VVh//69nI//r07f/y8vH/8/T0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly - 8v/y8vL/6Ojo/8TExP/ExMT/xcXF/8XFxf/FxcX/xcXF/8XFxf/ExMT/xcXF/8XFxf/W1tb/8vLy//T0 - 9P/09PT/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/8rKyv/ExMT/xMTE/6urq/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/FxcX/zY2Nv84ODj/Nzc3/5SUlP/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/+fn5//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/5+fn/8vLy//Ly - 8v/08vT/8vXw//by8v/28vX/9PL0//T08v/z8/P/+/Tm/8SWbv+fUxH/qVQI/6lUD/+iUw//xKJ//AAA - AACqVAr+q1QL/61VCf+mVAv/lVYf/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T09P/y8vL/8vLy//Ly - 8v/z8/P/8/Pz/+jo6f/Dw8P/xcXF/8XFxf/FxcX/xcXF/8XFxf/ExMT/xMTE/8TExP/ExMT/1tbW//Pz - 8//09PT/9PT0//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/Ozs7/xMTE/8XFxf+urq7/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/xsbG/84ODj/ODg4/zg4OP+ZmZn/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//n5+f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/+fn5//Ly - 8v/y8vL/9PL0//L18P/28vL/9vL1//Ty9P/09PL/8/Pz//v05v/Elm7/n1MR/6lUCP+pVA//olMP/8Si - f/wAAAAAqlQK/qtUC/+tVQn/plQL/5VWH//r2cj/+vTt//Ly8f/z9PT/8vLy//Ly8v/y8vL/9PT0//T0 - 9P/y8vL/9PT0//T09P/q6ur/w8PD/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/w8PD/9fX - 1//y8vL/8vLy//Ly8v/y8vL/8vLy//T09P/09PT/9PT0//T09P/z8/P/8vLy//Pz8//z8/P/8vLy//Pz - 8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/ycnJ/8TExP/FxcX/q6ur/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8jIyP/OTk5/zg4OP83Nzf/jIyM//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/5+fn//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//j4 - +P/z8/T/8/Pz//Ty9P/y9fD/9vLy//by9f/08vT/9PTy//Pz8//79Ob/xJZu/59TEf+pVAj/qVQP/6JT - D//Eon/8AAAAAKpUCv6rVAv/rVUJ/6ZUC/+VVh//69nI//r07f/y8vH/8/T0//Ly8v/y8vL/8vLy//T0 - 9P/09PT/8/Pz//Pz8//z8/P/6urq/8PDw//FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xMTE/8PD - w//X19f/8vLy//Ly8v/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/8/Pz//Ly8v/y8vL/8vLy//Ly - 8v/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/8bGxv/ExMT/xcXF/8vLy/8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/JCQk/zk5Of84ODj/Nzc3/3h4eP/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/+fn5//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/4+Pj/8/P0//Pz8//08vT/8vXw//by8v/28vX/9PL0//T08v/z8/P/+/Tm/8SWbv+fUxH/qVQI/6lU - D/+iUw//xKJ//AAAAACqVAr+q1QL/61VCf+mVAv/lVYf/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T0 - 9P/y8vL/8vLy//Pz8//y8vL/8/Pz/+vr6//ExMT/xcXF/8XFxf/FxcX/xcXF/8XFxf/ExMT/xMTE/8TE - xP/Dw8P/2NjY//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//09PT/9PT0//T0 - 9P/z8/P/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/Gxsb/w8PD/8XFxf/Hx8f/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/yMjI/85OTn/ODg4/zc3N/+RkZH/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//n5+f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7/+Pj4//Pz9P/z8/P/9PL0//L18P/28vL/9vL1//Ty9P/09PL/8/Pz//v05v/Elm7/n1MR/6lU - CP+pVA//olMP/8Sif/wAAAAAqlQK/qtUC/+tVQn/plQL/5VWH//r2cj/+vTt//Ly8f/z9PT/8vLy//Pz - 8//z8/P/8vLy//Ly8v/z8/P/8vLy//Pz8//r6+v/xMTE/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TE - xP/ExMT/xMTE/9jY2P/z8/P/8/Pz//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//T09P/z8/P/8vLy//Pz - 8//z8/P/8vLy//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/x8fH/8TExP/ExMT/qKio/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8bGxv/ODg4/zg4OP84ODj/np6e//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/5+fn//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//j4+P/z8/T/8/Pz//Ty9P/y9fD/9vLy//by9f/08vT/9PTy//Pz8//79Ob/xJZu/59T - Ef+pVAj/qVQP/6JTD//Eon/8AAAAAKpVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//Ly - 8v/z8/P/8/Pz//T09P/09PT/9PT0//Pz8//z8/P/6+vr/8TExP/ExMT/xcXF/8XFxf/FxcX/xcXF/8XF - xf/ExMT/xMTE/8TExP/Y2Nj/8/Pz//Pz8//z8/P/8/Pz//Pz8//09PT/9PT0//T09P/09PT/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/8/Pz//ExMT/xMTE/5eX - l/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/DQ0N/zY2Nv84ODj/NjY2/+rq - 6v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/+fn5//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/4+Pj/8vLy//Ly8v/08vT/8vXw//by8v/28vX/9PL0//T08//y8/P/+/Tm/8SW - bv+fUxH/qVQI/6hTDv+iUxD/x6SD/AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P0 - 9P/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/+zs7P/ExMT/xMTE/8XFxf/FxcX/xcXF/8XF - xf/Dw8P/w8PD/8TExP/ExMT/2tra//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/Z2dn/w8PD/8TE - xP91dXX/m5ub/5CQkP+MjIz/nJyc/5aWlv+7u7v/ubm5/7i4uP+3t7f/t7e3/8bGxv/IyMj/yMjI/8jI - yP/Jycn/t7e3/7e3t/+4uLj/ubm5/7y8vP+ampr/jY2N/42Njf+RkZH/lpaW/1BQUP8zMzP/Nzc3/0BA - QP/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//09PT/9PT0//T09P/z8/P/8/Pz//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//n5+f/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7/+Pj5//Ly8v/y8vL/9PL0//L18P/28vL/9vL1//Ty9P/09PT/8vPz//z0 - 5v/Fl2//n1MR/6lUCP+oUw7/olMQ/8elg/wAAAAAq1UK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly - 8f/z9PT/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/t7e3/xMTE/8TExP/FxcX/xcXF/8XF - xf/FxcX/xMTE/8PDw//ExMT/xcXF/9ra2v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/o6Oj/0NDQ/7u7 - u/97e3v/d3d3/35+fv9+fn7/R0dH/0JCQv9DQ0P/R0dH/zg4OP80NDT/NTU1/zU1Nf82Njb/NjY2/zY2 - Nv81NTX/NTU1/zQ0NP82Njb/QUFB/0NDQ/9DQ0P/TExM/3h4eP+AgID/dnZ2/5WVlf/Ly8v/0tLS/8jI - yP/Gxsb/ysrK/8TExP/FxcX/xcXF/8XFxf/FxcX/xMTE/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/eXl5/zU1 - Nf+ysrL/3t7e/+Dg4P/h4eH/1tbW/9LS0v/S0tL/09PT/9DQ0P/Pz8//z8/P/8/Pz//Pz8//z8/P/8/P - z//Pz8//z8/P/8/Pz//Pz8//0dHR/9LS0v/S0tL/09PT/93d3f/h4eH/39/f/+Hh4f/t7e3/8PDw//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8vLy//T09P/09PT/8vLy//Pz - 8//09PT/9PT0//T09P/09PT/8/Pz//Pz8//z8/P/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/5+fn//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//j4+f/y8vL/8vLy//Ty9P/y9fD/9vLy//by9f/08vT/9PT0//Lz - 8//89Ob/xZdv/59TEf+pVAj/qFMO/6JTEP/HpYP8AAAAAKtVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r0 - 7f/y8vH/8/T0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/7e3t/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8TExP/ExMT/xMTE/8XFxf/a2tr/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/cXFx/0pK - Sv9AQED/ODg4/zc3N/84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4 - OP84ODj/ODg4/zg4OP84ODj/ODg4/zk5Of84ODj/ODg4/zk5Of84ODj/ODg4/zc3N/88PDz/Q0ND/1tb - W//MzMz/zs7O/8LCwv/ExMT/w8PD/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TE - xP/FxcX/xMTE/8PDw//ExMT/xcXF/8TExP/ExMT/xMTE/8PDw//ExMT/xMTE/8TExP/Dw8P/w8PD/7+/ - v/+zs7P/S0tL/z09Pf9ERET/R0dH/z4+Pv87Ozv/Ojo6/zs7O/84ODj/Nzc3/zc3N/84ODj/Nzc3/zc3 - N/83Nzf/Nzc3/zc3N/84ODj/ODg4/zk5Of86Ojr/Ozs7/zs7O/9DQ0P/R0dH/0FBQf9HR0f/f39//5SU - lP/CwsL/7+/v//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Ly8v/z8/P/8/Pz//Ly - 8v/z8/P/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/+fn5//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/4+Pn/8vLy//Ly8v/08vT/8vXw//by8v/28vX/9PL0//T0 - 9P/y8/P//PTm/8WXb/+fUxH/qVQI/6hTDv+iUxD/x6WD/AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZ - yP/69O3/8vLx//P09P/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/+3t7f/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/Dw8P/w8PD/8TExP/FxcX/29vb//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/6ur - q/9iYmL/U1NT/y0tLf8xMTH/NTU1/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4 - OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zU1Nf8wMDD/LCws/yYm - Jv8qKir/R0dH/9DQ0P/w8PD/6enp/93d3f/d3d3/29vb/9bW1v/T09P/z8/P/83Nzf/Kysr/ycnJ/8nJ - yf/IyMj/yMjI/8fHx//Jycn/ysrK/8rKyv/MzMz/z8/P/9PT0//V1dX/3Nzc/97e3v/f39//5+fn/6Wl - pf9OTk7/NDQ0/zk5Of85OTn/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4 - OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/ODg4/zg4OP84ODj/OTk5/zg4 - OP8yMjL/UFBQ/6ioqP/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//y8vL/8vLy//Ly - 8v/y8vL/8/Pz//T09P/09PT/9PT0//T09P/y8vL/8vLy//Ly8v/y8vL/8vLy//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//n5+f/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/+Pj5//Ly8v/y8vL/9PL0//L18P/28vL/9vL1//Ty - 9P/09PT/8vPz//z05v/Fl2//n1MR/6lUCP+oUw7/olMQ/8elg/wAAAAAqlQK/qtUC/+tVQn/plQL/5RV - Hv/r2cj/+vTt//Ly8f/z9PT/8vLy//T09P/09PT/9PT0//T09P/09PT/8vLy//Pz9P/t7e3/xsbG/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xMTE/8PDw//FxcX/xcXF/9zc3P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/t7e3/xsbG/7Ozs/8GBgb/CwsL/xQUFP8YGBj/GBgY/xkZGf8fHx//IyMj/yUlJf8mJib/JiYm/ygo - KP8pKSn/Kioq/ykpKf8nJyf/JiYm/yYmJv8kJCT/IiIi/x4eHv8aGhr/GBgY/xgYGP8UFBT/CQkJ/wAA - AP8AAAD/Kioq/0RERP+6urr/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//n5+f/np6e/39/f/86Ojr/IiIi/y4uLv8yMjL/NDQ0/zQ0NP80NDT/NTU1/zU1Nf81NTX/NTU1/zU1 - Nf82Njb/NjY2/zY2Nv82Njb/NTU1/zU1Nf81NTX/NTU1/zQ0NP8zMzP/MzMz/zMzM/8wMDD/Jycn/xwc - HP8WFhb/HR0d/zY2Nv8VFRX/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/5+fn//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//f39//y8vL/8vLy//Ty9P/y9fD/9vLy//by - 9f/08vT/9PT0//Lz8//68+X/xZdv/59TEf+pVAj/p1IM/6JTEP/Fo4D8AAAAAKpUCv6rVAv/rVUJ/6ZU - C/+UVR7/69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//Ly8v/z8/T/7e3t/8fH - x//FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/Dw8P/xcXF/8XFxf/c3Nz/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/5OTk/8XFxf/ExMT/cXFx/wAAAP8AAAD/AAAA/wAAAP8AAAD/AQEB/wEBAf8CAgL/AgIC/wIC - Av8CAgL/AwMD/wMDA/8DAwP/AgIC/wICAv8CAgL/AgIC/wEBAf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AgIC/y0tLf84ODj/aGho/+/v7//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/P/7+/v/8vLy//ExMT/Pz8//wEBAf8DAwP/BAQE/wUFBf8FBQX/CgoK/w4ODv8RERH/EhIS/xMT - E/8UFBT/FhYW/xcXF/8YGBj/FRUV/xMTE/8TExP/ERER/w8PD/8MDAz/BwcH/wUFBf8FBQX/BAQE/wEB - Af8AAAD/AAAA/xwcHP86Ojr/HR0d/+/v7//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/+fn5//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/39/f/8vLy//Ly8v/08vT/8vXw//by - 8v/28vX/9PL0//T09P/y8/P/+vPl/8WXb/+fUxH/qVQI/6dSDP+iUxD/xaOA/AAAAACqVAr+q1QL/61V - Cf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T09P/09PT/9PT0//T09P/y8vL/9PT0/+3t - 7f/Hx8f/xMTE/8XFxf/FxcX/xcXF/8XFxf/FxcX/w8PD/8XFxf/ExMT/3d3d//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0/9ra2v/ExMT/xcXF/3h4eP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wsLC/80NDT/Nzc3/2tra//v7+//9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz/+bm5v/Gxsb/xcXF/6Ghof8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wMDA/8mJib/ODg4/ygoKP/r6+v/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//n5 - +f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/9/f3//Ly8v/y8vL/9PL0//L1 - 8P/28vL/9vL1//Ty9P/09PT/8vPz//rz5f/Fl2//n1MR/6lUCP+nUgz/olMQ/8WjgPwAAAAAqlQK/qtU - C/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly8f/z9PT/8vLy//T09P/09PT/9PT0//T09P/y8vL/8vLy//T0 - 9P/u7u7/x8fH/8TExP/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/FxcX/xMTE/9/f3//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/a2tr/xMTE/8XFxf92dnb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8RERH/Nzc3/zg4OP9wcHD/7+/v//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//i4uL/xMTE/8XFxf+Wlpb/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8ICAj/MzMz/zg4OP8wMDD/6+vr//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly - 8v/5+fn//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//f39//y8vL/8vLy//Ty - 9P/y9fD/9vLy//by9f/08vT/9PT0//Lz8//68+X/xZdv/59TEf+pVAj/p1IM/6JTEP/Fo4D8AAAAAKpU - Cv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//T09P/09PT/8vLy//Ly - 8v/y8vL/7u7u/8jIyP/ExMT/xcXF/8XFxf/FxcX/xcXF/8XFxf/ExMT/xcXF/8TExP/f39//9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/1tbW/8TExP/FxcX/eHh4/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/ERER/zg4OP84ODj/WFhY/8/Pz//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/4uLi/8TExP/FxcX/p6en/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/CQkJ/zg4OP84ODj/MTEx/+Li4v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/y8vL/+fn5//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/39/f/8vLy//Ly - 8v/08vT/8vXw//by8v/28vX/9PL0//T09P/y8/P/+vPl/8WXb/+fUxH/qVQI/6dSDP+iUxD/xaOA/AAA - AACrVQr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/T/8/P0/+7u7v/Kysr/xMTE/8XFxf/FxcX/xcXF/8XFxf/ExMT/xcXF/8XFxf/ExMT/39/f//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/9LS0v/ExMT/xcXF/4mJif8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/xEREf84ODj/ODg4/z8/P/+urq7/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/9/f3//ExMT/xcXF/5SUlP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/woKCv84ODj/ODg4/zIyMv+Ghob/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8vLy//f39//9/f3//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/9vb2//Ly - 8v/y8vL/9PL0//L18P/28vL/9vL1//Ty9P/09PT/8vPz//z05v/Fl2//n1MR/6lUCP+pVA//olMP/8Si - f/wAAAAAq1UK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly8f/z9PT/8vLy//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//w8PD/y8vL/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8XFxf/FxcX/xcXF/+Li - 4v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/Q0ND/xMTE/8XFxf+hoaH/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8XFxf/ODg4/zg4OP9BQUH/srKy//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/z8/P/9PT0//Pz - 8//y8vL/9PT0//T09P/09PT/9PT0//T09P/b29v/xMTE/8XFxf+9vb3/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8LCwv/ODg4/zg4OP80NDT/cnJy//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL/8/Pz//T09P/z8/P/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Ly8v/39/f//f39//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//b2 - 9v/y8vL/8vLy//Ty9P/y9fD/9vLy//by9f/08vT/9PT0//Lz8//89Ob/xZdv/59TEf+pVAj/qVQP/6JT - D//Eon/8AAAAAKtVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//T0 - 9P/09PT/8vLy//T09P/z8/P/8PDw/8zMzP/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/FxcX/xMTE/8XF - xf/k5OT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/y8vL/8TExP/FxcX/oKCg/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8BAQH/ICAg/zg4OP84ODj/Q0ND/7S0tP/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/8/Pz//T0 - 9P/z8/P/8vLy//T09P/09PT/9PT0//T09P/09PT/2NjY/8TExP/FxcX/u7u7/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/EhIS/zg4OP84ODj/NDQ0/3d3d//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8vLy//Pz8//09PT/8/Pz//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL/9/f3//39/f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/29vb/8vLy//Ly8v/08vT/8vXw//by8v/28vX/9PL0//T09P/y8/P//PTm/8WXb/+fUxH/qVQI/6lU - D/+iUw//xKJ//AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T0 - 9P/09PT/9PT0//Ly8v/09PT/8vLy//Hx8v/Ozs7/xcXF/8XFxf/FxcX/xcXF/8XFxf/ExMT/xsbG/8TE - xP/FxcX/5ubm//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/8rKyv/ExMT/xcXF/5+fn/8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AgIC/yIiIv84ODj/ODg4/zk5Of+mpqb/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly - 8v/z8/P/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0/9bW1v/ExMT/xcXF/7q6uv8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xYWFv84ODj/ODg4/zU1Nf9xcXH/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8/Pz//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8vLy//f39//9/f3//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7/9vb2//Ly8v/y8vL/9PL0//L18P/28vL/9vL1//Ty9P/09PT/8vPz//z05v/Fl2//n1MR/6lU - CP+pVA//olMP/8Sif/wAAAAAq1UK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly8f/z9PT/8vLy//T0 - 9P/09PT/9PT0//T09P/y8vL/8/Pz//Ly8v/x8fL/z8/P/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TE - xP/Dw8P/xcXF/+np6f/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/Jycn/xcXF/8XFxf+fn5//AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wICAv8kJCT/ODg4/zg4OP81NTX/oqKi//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/V1dX/xMTE/8XFxf+5ubn/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8YGBj/ODg4/zg4OP82Njb/U1NT//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/39/f//f39//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//X19f/y8vL/8vLy//Ty9P/y9fD/9vLy//by9f/08vT/9PT0//Lz8//89Ob/xZdv/59T - Ef+pVAj/qVQO/6JTD//Eon/8AAAAAKtVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//Ly - 8v/09PT/9PT0//T09P/09PT/8vLy//Ly8v/z8/T/8PDw/9HR0f/FxcX/xcXF/8XFxf/FxcX/xcXF/8TE - xP/FxcX/xMTE/8XFxf/p6en/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/yMjI/8XFxf/FxcX/ra2t/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8CAgL/JCQk/zg4OP84ODj/NjY2/6Oj - o//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/1NTU/8XFxf/FxcX/ubm5/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/GRkZ/zg4OP84ODj/NjY2/1ZW - Vv/09PT/9PT0//T09P/y8vL/8vLy//Ly8v/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9vb2//39/f/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/29vb/8vLy//Pz8//08vT/8vXw//by8v/28vX/9PL0//T09P/y8/P//PTm/8WX - b/+fUxH/qVQI/6dSDP+iUxD/xaOA/AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P0 - 9P/y8vL/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8/P0//Ly8v/S0tL/xcXF/8XFxf/FxcX/xcXF/8XF - xf/ExMT/xcXF/8TExP/FxcX/6urq//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/8fHx//ExMT/xcXF/7Gx - sf8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AwMD/ycnJ/84ODj/ODg4/zc3 - N/+jo6P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/9PT0//ExMT/xcXF/8jI - yP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xoaGv84ODj/ODg4/zY2 - Nv9XV1f/9PT0//T09P/09PT/8vLy//Ly8v/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//X19v/9/f3//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7/9fb2//Ly8v/09PT/9PL0//L18P/28vL/9vL1//Ty9P/09PT/8vPz//z0 - 5v/Fl2//n1MR/6lUCP+nUgz/olMQ/8WjgPwAAAAAq1UK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly - 8f/z9PT/8vLy//T09P/09PT/9PT0//T09P/y8vL/8/Pz//Pz8//z8/P/09PT/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xMTE/8TExP/ExMT/xsbG/+zs7P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/Hx8f/xcXF/8XF - xf+wsLD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wMDA/8oKCj/ODg4/zg4 - OP82Njb/pKSk//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/T09P/xMTE/8XF - xf/Hx8f/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8cHBz/ODg4/zg4 - OP83Nzf/WFhY//T09P/09PT/9PT0//Pz8//z8/P/8/Pz//Pz8//z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/P/8/Pz//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/19fX//f39//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//f39//X29v/y8vL/9PT0//Ty9P/y9fD/9vLy//by9f/08vT/9PT0//Lz - 8//89Ob/xZdv/59TEf+pVAj/p1IM/6JTEP/Fo4D8AAAAAKtVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r0 - 7f/y8vH/8/T0//Ly8v/09PT/9PT0//T09P/09PT/8vLy//Pz8//z8/P/9PT0/9TU1P/FxcX/xcXF/8XF - xf/FxcX/xcXF/8TExP/ExMT/xMTE/8fHx//t7e3/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/xsbG/8TE - xP/FxcX/sLCw/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8DAwP/KCgo/zg4 - OP84ODj/NjY2/6SkpP/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/0tLS/8XF - xf/FxcX/x8fH/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/HBwc/zg4 - OP84ODj/NjY2/1lZWf/09PT/9PT0//T09P/y8vL/8vLy//Ly8v/y8vL/8vLy//T09P/09PT/9PT0//T0 - 9P/09PT/8vLy//Ly8v/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9fX1//39/f/+/v7//f39//39 - /f/+/v7//v7+//7+/v/+/v7//v7+//39/f/09fX/8vLy//T09P/08vT/8vXw//by8v/28vX/9PL0//T0 - 9P/y8/P//PTm/8WXb/+fUxH/qVQI/6dSDP+iUxD/xaOA/AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZ - yP/69O3/8vLx//P09P/y8vL/9PT0//T09P/09PT/9PT0//Ly8v/z8/P/8vLy//Pz8//X19f/xMTE/8XF - xf/FxcX/xcXF/8XFxf/ExMT/xcXF/8PDw//Hx8f/7u7v//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/8jI - yP/ExMT/xcXF/6urq/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AwMD/ycn - J/83Nzf/ODg4/zY2Nv+jo6P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//z8/P/9PT0//T09P/z8/P/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz//Pz8//09PT/8/Pz/9LS - 0v/ExMT/xcXF/8jIyP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/xwc - HP84ODj/ODg4/zc3N/9YWFj/9PT0//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz//T09P/09PT/8/Pz//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/9/f3//v7+//39 - /f/9/f3//v7+//7+/v/+/v7//v7+//7+/v/9/f3/9PT0//Ly8v/z8/P/9PL0//L18P/28vL/9vL1//Ty - 9P/09PT/8vPz//z05v/Fl2//n1MR/6lUCP+nUgz/olMQ/8WigPwAAAAAq1UK/qtUC/+tVQn/plQL/5RV - Hv/r2cj/+vTt//Ly8f/z9PT/8vLy//T09P/09PT/9PT0//T09P/z8/P/8/Pz//T09P/x8fH/29vb/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xMTE/8bGxv/Dw8P/x8fH/+/v7//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/Jycn/xMTE/8XFxf+fn5//AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wIC - Av8kJCT/ODg4/zg4OP82Njb/oqKi//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/y8vL/8/Pz//T09P/09PT/8vLy//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly8v/z8/P/9PT0//Pz - 8//U1NT/xMTE/8XFxf+8vLz/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8aGhr/Nzc3/zg4OP82Njb/V1dX//T09P/y8vL/8vLy//Pz8//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//Pz8//09PT/9PT0//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT//f39//7+ - /v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//f39//T09P/09PT/8vLy//Ty9P/y9fD/9vLy//by - 9f/08vT/9PT0//Lz8//89Ob/xZdv/59TEf+pVAj/qFMO/6JTD//Eon/8AAAAAKtVCv6rVAv/rVUJ/6ZU - C/+UVR7/69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//T09P/09PT/8vLy//Pz8//z8/T/8vLy/93d - 3f/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/FxcX/xMTE/8fHx//v7/D/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/ysrK/8XFxf/FxcX/n5+f/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8CAgL/IyMj/zg4OP84ODj/NjY2/6Kiov/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8vLy//Pz8//09PT/9PT0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8/Pz//T0 - 9P/z8/P/1NTU/8TExP/FxcX/ubm5/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/GRkZ/zg4OP84ODj/Nzc3/1ZWVv/09PT/8vLy//Ly8v/z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/z8/P/9PT0//T09P/y8vL/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//39 - /f/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//39/f/09PT/9PT0//Ly8v/08vT/8vXw//by - 8v/28vX/9PL0//T09P/y8/P//PTm/8WXb/+fUxH/qVQI/6hTDv+iUw//xKJ//AAAAACrVQr+q1QL/61V - Cf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T09P/09PT/9PT0//Ly8v/z8/T/8/Pz//Ly - 8v/g4OD/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8XFxf/IyMj/8PDw//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0/8vLy//ExMT/xcXF/6CgoP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AgIC/yIiIv84ODj/ODg4/zc3N/+ioqL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Ly8v/z8/P/9PT0//T09P/y8vL/9PT0//T09P/09PT/9PT0//T09P/y8vL/8vLy//Pz - 8//09PT/9PT0/9bW1v/ExMT/xcXF/7q6uv8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/xcXF/84ODj/ODg4/zc3N/9TU1P/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/8/Pz//T09P/09PT/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//T0 - 9P/9/f3//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/9/f3/9PT0//T09P/y8vL/9PL0//L1 - 8P/28vL/9vL1//Ty9P/09PT/8vPz//z05v/Fl2//n1MR/6lUCP+oUw7/olMP/8Sif/wAAAAAq1UK/qtU - C/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly8f/z9PT/8vLy//T09P/09PT/9PT0//T09P/y8vL/9PT0//Ly - 8v/z8/P/4uLi/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8PDw//FxcX/ycnJ//Hx8f/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/Ozs7/xMTE/8XFxf+hoaH/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wEBAf8eHh7/Nzc3/zg4OP9BQUH/sbGx//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL/8/Pz//T09P/09PT/8vLy//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly - 8v/z8/P/9PT0//T09P/X19f/xMTE/8XFxf+6urr/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8WFhb/ODg4/zg4OP81NTX/W1tb//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//Pz8//09PT/9PT0//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly - 8v/z8/P//f39//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//f39//T09P/09PT/8vLy//Ty - 9P/y9fD/9vLy//by9f/08vT/9PT0//Lz8//89Ob/xZdv/59TEf+pVAj/qFMO/6JTD//Eon/8AAAAAKtV - Cv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//T09P/09PT/8vLy//T0 - 9P/y8vL/8/P0/+bm5v/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/Gxsb/w8PD/8rKyv/y8vL/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/0dHR/8TExP/FxcX/lpaW/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/GBgY/zg4OP84ODj/QEBA/6+vr//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//09PT/9PT0//Pz8//09PT/9PT0//T09P/09PT/9PT0//Pz - 8//z8/P/8/Pz//T09P/09PT/2tra/8TExP/FxcX/vLy8/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/EhIS/zc3N/84ODj/NDQ0/2lpaf/z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/9PT0//T0 - 9P/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/T/8/Pz//39/f/9/f3//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//r6+v/z8/T/8/Pz//Ly - 8v/08vT/8vXw//by8v/28vX/9PL0//T09P/y8/P//PTm/8WXb/+fUxH/qVQI/6hTDv+iUw//xKJ//AAA - AACrVQr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T09P/09PT/9PT0//Ly - 8v/09PX/8vLy//Pz8//o6Oj/xcXF/8XFxf/FxcX/xcXF/8XFxf/ExMT/xsbG/8PDw//MzMz/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/9XV1f/ExMT/xcXF/3Nzc/8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/xEREf84ODj/ODg4/0BAQP+vr6//9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0/9zc3P/Dw8P/xcXF/6SkpP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wwMDP84ODj/ODg4/zMzM/9ycnL/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//9/f3//f39//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/6+vr/9PT1//Pz - 8//z8/P/9PL0//L18P/28vL/9vL1//Ty9P/09PT/8vPz//z05v/Fl2//n1MR/6lUCP+pVA//olMP/8Si - f/wAAAAAq1UK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly8f/z9PT/8vLy//T09P/09PT/9PT0//T0 - 9P/y8vL/9PT0//Ly8v/y8vP/6urq/8bGxv/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/z8/P//Pz - 8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/Z2dn/xMTE/8XFxf9ycnL/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8RERH/ODg4/zg4OP9PT0//wsLC//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/i4uL/xMTE/8XFxf+UlJT/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8JCQn/ODg4/zg4OP8zMzP/cHBw//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL//Pz8//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7/+vr6//T0 - 9P/z8/P/8/Pz//Ty9P/y9fD/9vLy//by9f/08vT/9PT0//Lz8//89Ob/xZdv/59TEf+pVAj/qVQP/6JT - D//Eon/8AAAAAKtVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//T0 - 9P/09PT/8/Pz//T09P/y8vL/8vLy/+3t7f/Gxsb/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xMTE/9TU - 1P/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/2dnZ/8TExP/FxcX/dnZ2/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/EBAQ/zc3N/84ODj/cXFx//Dw8P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/4uLi/8TExP/FxcX/lJSU/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/CQkJ/zg4OP84ODj/MDAw/8/Pz//09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8vLy//z8/P/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//r6 - +v/09PT/8/Pz//Pz9P/08vT/8vXw//by8v/28vX/9PL0//T09P/y8/P//PTm/8WXb/+fUxH/qVQI/6lU - D/+iUw//xKJ//AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/8vLy//Ly8v/u7u7/x8fH/8XFxf/FxcX/xcXF/8XFxf/ExMT/w8PD/8XF - xf/W1tb/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/+Li4v/FxcX/xsbG/4WFhf8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/woKCv8zMzP/Nzc3/2tra//v7+//9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/+Xl5f/FxcX/xcXF/5ubm/8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wgICP80NDT/ODg4/zAwMP/s7Oz/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Hx8f/8/Pz//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/6+vr/9PT0//Pz8//z8/T/9PL0//L18P/28vL/9vL1//Ty9P/09PT/8vPz//z05v/Fl2//n1MR/6lU - CP+pVA//olMP/8Sif/wAAAAAq1UK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly8f/z9PT/8vLy//T0 - 9P/09PT/9PT0//T09P/y8vL/8/P0//Ly8v/09PT/7Ozs/8jIyP/FxcX/xMTE/8TExP/ExMT/w8PD/8PD - w//FxcX/29vb//Pz9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/s7Oz/xsbG/7m5uf8DAwP/AAAA/wEB - Af8BAQH/AQEB/wEBAf8BAQH/AgIC/wICAv8CAgL/AgIC/wICAv8DAwP/AwMD/wMDA/8DAwP/AwMD/wIC - Av8CAgL/AgIC/wICAv8CAgL/AQEB/wEBAf8BAQH/AQEB/wEBAf8BAQH/LCws/zc3N/9eXl7/7+/v//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/s7Oz/ysrK/8TExP+rq6v/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAA - AP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8DAwP/Jycn/zk5Of8xMTH/6+vr//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/+vr6//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7/+Pn5//T09P/y8vL/8/P0//Ty9P/y9fD/9vLy//by9f/08vT/9PT0//Lz8//89Ob/xZdv/59T - Ef+pVAj/qVQP/6JTD//Eon/8AAAAAKtVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//Ly - 8v/09PT/9PT0//T09P/09PT/8vLy//Pz9P/y8vL/9PT0/+7u7v/Hx8f/xMTE/8TExP/ExMT/xMTE/8PD - w//CwsL/xcXF/93d3f/z8/T/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8PDw/8rKyv/Pz8//rKys/6Ki - ov+ysrL/ra2t/6mpqf+qqqr/oqKi/7+/v/+9vb3/vLy8/7y8vP+8vLz/x8fH/8fHx//Hx8f/x8fH/8fH - x/+7u7v/vLy8/7y8vP+8vLz/vb29/66urv+goKD/n5+f/6Ghof+qqqr/VlZW/zw8PP9BQUH/ra2t//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz/83Nzf/ExMT/OTk5/wEB - Af8oKCj/PT09/zk5Of9NTU3/ODg4/3l5ef92dnb/dHR0/3Nzc/9ycnL/goKC/4qKiv+JiYn/iYmJ/4uL - i/9xcXH/cnJy/3Nzc/90dHT/dnZ2/2xsbP85OTn/ODg4/zk5Of89PT3/Hh4e/x4eHv85OTn/UVFR/+vr - 6//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//r6+v/+/v7//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//j5+f/09PT/8vLy//Pz9P/08vT/8vXw//by8v/28vX/9PL0//T09P/y8/P//PTm/8WX - b/+fUxH/qVQI/6lUD/+iUw//xKJ//AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P0 - 9P/y8vL/9PT0//T09P/09PT/9PT0//Ly8v/z8/T/8/Pz//Pz8//v7/D/yMjI/8TExP/ExMT/xcXF/8TE - xP/ExMT/w8PD/8TExP/h4eH/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//T09P/ysrK/8bG - xv/Dw8P/xMTE/8TExP/ExMT/xcXF/8TExP/ExMT/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/ExMT/xMTE/8TExP/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP9bW1v/RUVF/7m5 - uf/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/Y2Nj/xcXF/7e3 - t/+RkZH/tbW1/8jIyP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/FxcX/ycnJ/6urq/9fX1//Nzc3/5ub - m//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/5+fn//v7+//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/4+Pj/8vLz//Pz8//z8/P/9PL0//L18P/28vL/9vL1//Ty9P/09PT/8vPz//z0 - 5v/Fl2//n1MR/6lUCP+pVA//olMP/8Sif/wAAAAAq1UK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly - 8f/z9PT/8vLy//T09P/09PT/9PT0//T09P/y8vL/8/P0//Pz8//y8vL/8fHy/8nJyf/ExMT/xMTE/8XF - xf/ExMT/xMTE/8TExP/ExMT/5ubm//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz/+zs - 7P/U1NT/x8fH/8XFxf/ExMT/xMTE/8TExP/Dw8P/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/xMTE/8TExP/FxcX/xMTE/8TExP/ExMT/xMTE/8PDw//ExMT/xMTE/8bGxv/Gxsb/kZGR/3Fx - cf/u7u7/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/4uLi/8jI - yP/Dw8P/xMTE/8TExP/FxcX/xMTE/8XFxf/FxcX/xMTE/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/kZGR/0ND - Q/+ampr/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/+Pj4//7+/v/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/9/f3/+Pj4//Ly8//z8/P/8/Pz//Ty9P/y9fD/9vLy//by9f/08vT/9PT0//Lz - 8//89Ob/xZdv/59TEf+pVAj/qVQP/6JTD//Eon/8AAAAAKtVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r0 - 7f/y8vH/8/T0//Ly8v/09PT/9PT0//T09P/09PT/8vLy//Pz8//z8/P/8vLy//T09P/Nzc3/xMTE/8PD - w//FxcX/xMTE/8TExP/FxcX/xsbG/+vr6//y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz//Pz8//t7e3/5+fn/+fn5//k5OT/3Nzc/9jY2P/U1NT/z8/P/8zMzP/MzMz/ysrK/8nJ - yf/IyMj/ycnJ/8rKyv/Ly8v/zc3N/87Ozv/Q0ND/1tbW/9ra2v/f39//5ubm/+fn5//q6ur/7+/v//Pz - 8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/x8fH/6urq/+Tk5P/b29v/zs7O/8zMzP/Ly8v/ycnJ/8jIyP/IyMj/x8fH/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8bGxv/Gxsb/x8fH/8jIyP/IyMj/zMzM/8vLy//Pz8//29vb/9zc - 3P+/v7//6+vr//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//j4+P/+/v7//v7+//7+ - /v/+/v7//v7+//7+/v/+/v7//f39//b29v/y8vP/8/P0//Ly8v/08vT/8vXw//by8v/28vX/9PL0//T0 - 9P/y8/P//PTm/8WXb/+fUxH/qVQI/6lUD/+iUw//xKJ//AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZ - yP/69O3/8vLx//P09P/y8vL/9PT0//T09P/09PT/9PT0//T09P/y8vL/8/Pz//T09P/x8fH/1dXV/8PD - w//Dw8P/xMTE/8TExP/ExMT/xcXF/8jIyP/s7Oz/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/8/Pz/+vr6//m5ub/4uLi/97e3v/b29v/29vb/9nZ - 2f/Z2dn/19fX/9fX1//Z2dn/2dnZ/9ra2v/c3Nz/3d3d/+Li4v/m5ub/6urq//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/8vLy//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//T09P/29/f//v7+//39 - /f/+/v7//v7+//7+/v/+/v7//v7+//39/f/29vb/8vLy//T09P/y8vL/9PL0//L18P/28vL/9vL1//Ty - 9P/09PT/8vPz//z05v/Fl2//n1MR/6lUCP+nUgz/olMQ/8WjgPwAAAAAq1UK/qtUC/+tVQn/plQL/5RV - Hv/r2cj/+vTt//Ly8f/z9PT/8vLy//T09P/09PT/9PT0//T09P/09PT/8vLy//Pz8//09PT/8fHx/9ra - 2v/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/Kysr/7u7u//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Ly8v/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//Ly - 8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//09PT/9vf3//7+ - /v/9/f3//v7+//7+/v/+/v7//v7+//7+/v/9/f3/9fX2//Ly8v/09PT/8vLy//Ty9P/y9fD/9vLy//by - 9f/08vT/9PT0//Lz8//89Ob/xZdv/59TEf+pVAj/p1IM/6JTEP/Fo4D8AAAAAKtVCv6rVAv/rVUJ/6ZU - C/+UVR7/69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//T09P/09PT/8vLy//T09P/09PT/8vLy//Ly - 8v/d3d3/xcXF/8PDw//ExMT/xMTE/8TExP/ExMT/zc3N//Hx8f/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/P/8vLy//Ly8v/z8/P/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//z8/P/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//b2 - 9v/+/v7//f39//7+/v/+/v7//v7+//7+/v/+/v7//f39//X19f/z8/P/8/Pz//Pz8//08vT/8vXw//by - 8v/28vX/9PL0//T09P/y8/P//PTm/8WXb/+fUxH/qVQI/6dSDP+iUxD/xaOA/AAAAACrVQr+q1QL/61V - Cf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T09P/09PT/9PT0//Ly8v/09PT/9PT0//Ly - 8v/09PT/4eHh/8TExP/Dw8P/xMTE/8XFxf/ExMT/w8PD/8/Pz//y8vL/8/P0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//19fX//f39//39/f/+/v7//v7+//7+/v/+/v7//v7+//39/f/z9PT/9PT0//Ly8v/z8/P/9PL0//L1 - 8P/28vL/9vL1//Ty9P/09PT/8vPz//z05v/Fl2//n1MR/6lUCP+nUgz/olMQ/8WjgPwAAAAAq1UK/qtU - C/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly8f/z9PT/8vLy//T09P/09PT/9PT0//T09P/y8vL/9PT0//T0 - 9P/y8vL/9PT0/+bm5v/Gxsb/w8PD/8TExP/ExMT/xMTE/8PDw//R0dH/8/P0//Pz9P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/P/9PT0//39/f/9/f3//v7+//7+/v/+/v7//v7+//7+/v/9/f3/8/Pz//T09P/y8vL/8/P0//Ty - 9P/y9fD/9vLy//by9f/08vT/9PT0//Lz8//89Ob/xZdv/59TEf+pVAj/p1IM/6JTEP/Fo4D8AAAAAKpU - Cv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/s7Oz/x8fH/8LCwv/Dw8P/xcXF/8XFxf/ExMT/1tbW//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/z8/P/9PT0//T09P/7+/v//v7+//7+/v/+/v7//v7+//7+/v/+/v7//Pz8//Ly8v/z8/P/8vLy//Ly - 8v/08vT/8vXw//by8v/28vX/9PL0//T09P/y8/P//PTm/8WXb/+fUxH/qVQI/6lUD/+iUw//xKJ//AAA - AACqVAr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8PDw/8jIyP/ExMT/w8PD/8TExP/FxcX/xcXF/9vb2//y8vL/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//z8/P/+/v7//7+/v/+/v7//v7+//7+/v/+/v7//v7+//z8/P/y8vL/9PT0//Ly - 8v/y8vL/9PL0//L18P/28vL/9vL1//Ty9P/09PT/8vPz//z05v/Fl2//n1MR/6lUCP+pVA//olMP/8Si - f/wAAAAAqlQK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly8f/z9PT/8vLy//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Pz9P/MzMz/xcXF/8TExP/ExMT/xcXF/8XFxf/i4uL/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/8/Pz//r7+//+/v7//v7+//7+/v/+/v7//v7+//7+/v/7+/z/8vLy//T0 - 9P/y8vL/8vLy//Ty9P/y9fD/9vLy//by9f/08vT/9PT0//Lz8//89Ob/xZdv/59TEf+pVAj/qVQP/6JT - D//Eon/8AAAAAKpUCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/09PT/8TExP/ExMT/xMTE/8TExP/ExMT/6Ojo//Ly - 8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/8/Pz//Ly8v/6+vr//v7+//7+/v/+/v7//v7+//7+/v/+/v7/+/v7//Ly - 8v/09PT/9PT0//Ly8v/08vT/8vXw//by8v/28vX/9PL0//T09P/y8/P//PTm/8WXb/+fUxH/qVQI/6lU - D/+iUw//xKJ//AAAAACqVAr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz/9jY2P/Dw8P/xMTE/8TExP/Dw8P/w8PD/+zs - 7P/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz//T09P/09PT/9PT0//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//T09P/09PT/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//09PT/9PT0//Pz8//z8/P/8/Pz//T09P/z8/P/8/Pz//Pz - 8//z8/P/9PT0//T09P/09PT/9PT0//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/9PT0//T0 - 9P/09PT/9PT0//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//T09P/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//09PT/9PT0//T09P/z8/P/8/Pz//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz//Pz8//09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/8/Pz//Pz8//09PT/8/Pz//Pz8//z8/P/9PT0//T09P/z8/P/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8/Pz//Pz8//09PT/9PT0//T09P/z8/P/8/Pz//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz - 8//z8/P/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//T0 - 9P/z8/P/8/Pz//Pz8//z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Pz8//y8vL/+fn6//39/f/9/f3//v7+//7+/v/+/v7//v7+//j4 - +P/y8vL/8/P0//T09P/y8vL/9PL0//L18P/28vL/9vL1//Ty9P/09PT/8vPz//z05v/Fl2//nlIT/6pU - C/+qUw3/oVMP/8SgfPwAAAAAq1UK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly8f/z9PT/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/e3t7/w8PD/8TExP/Dw8P/xMTE/8jI - yP/u7u7/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//Pz8//09PT/8/Pz//Ly8v/x8fH/8/P0//Pz8//09PT/8vLy//Ly8v/09PT/9PT0//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//y8vL/8vLy//Pz8//z8/P/8/Pz//Ly8v/y8vL/8vLy//Pz - 8//z8/T/8vLy//T09P/z8/P/8vLy//Ly8v/z8/P/8/Pz//Pz8//z8/P/8/Pz//Ly8v/y8vL/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/z8/P/8/Pz//Pz9P/09PT/8/Pz//Pz8//z8/P/8/Pz//Pz - 9P/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8vLy//Ly8v/y8vL/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/z8/P/9PT0//Pz8//y8vL/8vLy//Ly8v/y8vL/8vLy//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/9PT0//T09P/09PT/8/P0//Pz - 9P/09PT/9PT0//T09P/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/z8/P/9PT0//T0 - 9P/z8/P/8/Pz//Pz8//09PT/8vLy//Ly8v/x8fH/9PT0//T09P/y8vL/8vLy//Ly8v/z8/T/8/Pz//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/9PT0//T09P/z8/P/8/Pz//Ly8v/y8vL/8vLy//Pz - 8//09PT/8/P0//Pz8//z8/P/8/Pz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/9PT0//j4+P/9/f3//f39//7+/v/+/v7//v7+//7+ - /v/29vb/8vLy//Ly8v/09PX/9PT0//Ty9P/y9fD/9vLy//by9f/08vT/9PT0//Lz8//89Ob/xZdv/55S - FP+qVA3/qlML/59SD/+8lW/8AAAAAKtVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//Ly - 8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/4+Pj/8XFxf/Dw8P/xMTE/8TE - xP/Q0ND/8vLy//Dw8P/z8/P/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/y8vL/8vLy//T09P/09PX/9PT1//Pz8//z8/P/8/Pz//Pz8//09PT/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//T09P/09PT/8/Pz//Ly8v/z8/P/9PT0//T0 - 9P/y8vL/8vLy//Ly8v/y8vP/8vLz//Ly8v/y8vL/8/Pz//Pz8//z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8/Pz//Ly8v/y8vL/8vLz//Ly8//y8vP/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Pz8//09PT/9PT0//T09P/09PT/8/Pz//T09P/09PT/9PT0//T0 - 9P/z8/P/8vLz//Ly8//y8vP/8vLz//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8//09PT/9PT0//T09P/09PT/9PT0//Pz - 8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8/Pz//Pz8//z8/P/8/Pz//T0 - 9P/z8/P/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/09PT/9PT0//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Pz8//x8fH/8vLy//Ly8v/z8/P/9PT0//Ly8v/y8vL/8/Pz//T09P/09PT/8vLy//Ly - 8v/z8/P/9PT0//Pz8//y8vL/8vLy//Ly8v/y8vL/8vLy//Pz8//z8/P/8/Pz//T09P/z8/P/8/Pz//Pz - 8//z8/P/8/Pz//Ly8v/y8vL/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8vLy//T09P/29vb//f39//39/f/+/v7//v7+//7+ - /v/+/v7/9PT1//Pz8//z8/P/9PT0//T09P/08vT/8vXw//by8v/28vX/9PL0//T09P/y8/P//PTm/8WX - b/+dUhX/qlML/6tTC/+hUg7/rohg/AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P0 - 9P/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0/+np6f/Hx8f/wsLC/8XF - xf/Dw8P/2dnZ//Ly8//w8PD/8/P0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8vLy//Dw8P/y8vL/8vLy//Ly8v/w8PH/8PDx//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//y8vP/8vLy//Ly - 8v/y8vL/8/Pz//Ly8//y8vP/8/Pz//Ly8//y8vP/8vLy//Hx8f/x8fH/8PDw/+/v7//v7+//7+/v/+7u - 7v/t7e3/7Ozs/+zs7P/t7e3/7Ozs/+vr6//q6ur/6urq/+vr6//r6+v/6+vr/+vr6//r6+v/6urq/+np - 6f/p6en/6enp/+np6f/p6en/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//m5ub/5eXl/+Xl - 5f/k5OT/4+Pj/+Li4v/i4uL/4uLi/+Li4v/h4eH/4eHh/+Hh4f/g4OD/4ODg/+Dg4P/h4eH/4eHh/+Hh - 4f/h4eH/4eHh/+Hh4f/h4eH/4eHh/+Hh4f/j4+P/4+Pj/+Pj4//k5OT/5OTk/+Tk5P/k5OT/5eXl/+Xl - 5f/m5ub/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/6Ojo/+np6f/p6en/6+vr/+vr - 6//q6ur/6urq/+vr6//r6+v/7Ozs/+zs7P/s7Oz/7Ozs/+3t7f/t7e3/7e3t/+3t7f/u7u7/7+/v/+/v - 7//v7+//7+/v//Dw8P/x8fH/8fHy//Ly8//y8vL/8vLy//Hx8f/z8/P/8/Pz//Hx8f/y8vL/8vLy//Ly - 8//z8/P/8/Pz//Pz8//y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8fHx//Dw - 8f/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/09PT/9fX1//7+/v/+/v7//v7+//7+ - /v/+/v7//Pz8//T09P/09PT/9PT0//T09P/09PT/9PL0//L18P/28vL/9vL1//Ty9P/09PT/8vPz//z0 - 5v/Fl2//nVIV/6hTC/+rUwv/olMO/6J5UvwAAAAAq1UK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly - 8f/z9PT/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/w8PD/zc3N/8LC - wv/FxcX/xcXF/+bm5v/y8vL/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/9PT0//Ly8v/y8vL/9PT0//T09P/y8vL/8vLy//Ly - 8v/u7u7/7e3t/+vr7P/r6+v/6urq/+fn5//m5ub/5ubm/+Xl5f/j4+P/4eHh/+Dg4P/d3d3/29vb/9fX - 1//U1NT/0tLS/8/Pz//Nzc3/y8vL/8vLy//Kysr/ycnJ/8jIyP/IyMj/yMjI/8fHx//Gxsb/xsbG/8jI - yP/Hx8f/xsbG/8bGxv/FxcX/xsbG/8bGxv/FxcX/xcXF/8XFxf/Gxsb/xsbG/8XFxf/FxcX/xcXF/8XF - xf/ExMT/xMTE/8TExP/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/w8PD/8PDw//FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/xMTE/8XFxf/FxcX/xcXF/8XFxf/FxcX/w8PD/8TExP/ExMT/xMTE/8PDw//Dw8P/xMTE/8TE - xP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xcXF/8XF - xf/FxcX/xsbG/8bGxv/Gxsb/xsbG/8bGxv/ExMT/xcXF/8XFxf/Hx8f/xsbG/8bGxv/Gxsb/x8fH/8fH - x//Gxsb/xsbG/8fHx//IyMj/ycnJ/8fHx//IyMj/ycnJ/8rKyv/Ly8v/zs7O/8/Pz//R0dH/1NTU/9XV - 1f/a2tr/3Nzc/97e3v/g4OD/4eHh/+Pj4//k5OT/5eXl/+bm5v/n5+f/6+vr/+zs7P/t7e3/8PDw//Hx - 8f/y8vL/8vLy//Ly8v/y8vL/8PDw//Hx8f/y8vL/9PT0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/y8vL/8/Pz//T09P/9/f3//v7+//7+ - /v/+/v7//v7+//z8/P/y8vL/9PT0//T09P/09PT/9PT0//Ty9P/y9fD/9vLy//by9f/08vT/9PT0//Lz - 8//89Ob/xZdv/51SFf+oUwv/q1ML/6RUDf+WbEP8AAAAAKtVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r0 - 7f/y8vH/8/T0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/P/8fHy/9ra - 2v/CwsL/xMTE/8fHx//t7e3/8fHx//Pz8//y8vL/8vLy//T09P/09PT/8/Pz//Ly8v/09PT/8fHx//Dw - 8P/u7u7/7e3t/+rq6v/n5+f/4+Pj/+Dg4P/c3Nz/2trb/9jY2P/V1dX/09PT/9HR0f/Q0ND/zs7O/83N - zf/MzMz/ysrK/8rKyv/IyMj/x8fH/8fHx//Hx8f/xsbG/8XFxf/ExMT/xMTE/8TExP/ExMT/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/ExMT/xMTE/8TExP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TE - xP/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/ExMT/xMTE/8TE - xP/ExMT/xMTE/8TExP/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xcXF/8XFxf/ExMT/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/xMTE/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/xcXF/8XFxf/ExMT/xMTE/8TExP/FxcX/xcXF/8bGxv/Hx8f/x8fH/8jIyP/IyMj/ycnJ/8rK - yv/Ly8v/zMzM/8/Pz//Q0ND/0tLS/9PT0//V1dX/19fX/9nZ2f/c3Nz/4ODg/+Li4v/m5ub/6urq/+zs - 7P/u7u7/8PDw//Dw8P/09PT/8/Pz//Pz8//09PT/9PT0//Ly8v/y8vL/8fHx//X19f/z8/P//f39//7+ - /v/+/v7//v7+//7+/v/7+/v/8/Pz//T09P/09PT/9PT0//T09P/08vT/8vXw//by8v/28vX/9PL0//T0 - 9P/y8/P//PTm/8WXb/+dUxP/qVQL/6pSCf+lVQ3/kWU8/AAAAACrVQr+q1QL/61VCf+mVAv/lFUe/+vZ - yP/69O3/8vLx//P09P/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly - 8v/l5eX/xsbG/8LCwv/Ozs7/8/T0//Pz8//x8fH/8vLy/+7u7v/p6en/4uLi/9zc3P/Y2Nj/09PT/9DQ - 0P/MzMz/ysrK/8bGxv/FxcX/xMTE/8TExP/Dw8P/w8PD/8TExP/ExMT/xMTE/8TExP/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xsbG/8TExP/ExMT/xMTE/8bG - xv/Gxsb/ycnJ/8zMzP/Q0ND/1NTU/9bW1v/b29v/4eHh/+jo6P/u7u7/8PDw//Ly8v/x8fH/8vLy//39 - /f/9/f3//v7+//39/f/+/v7/+fn5//T09P/09PT/9PT0//T09P/09PT/9PL0//L18P/28vL/9vL1//Ty - 9P/09PT/8vPz//z05v/Fl2//nVIT/6lVC/+sUwv/plUM/5FjOPwAAAAAq1UK/qtUC/+tVQn/plQL/5RV - Hv/r2cj/+vTt//Ly8f/z9PT/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//X1 - 9f/y8vL/7+/v/8jIyP/Dw8P/29vb/+Tk5P/Y2Nj/0dHR/8XFxf/Hx8f/xMTE/8LCwv/CwsL/w8PD/8LC - wv/Dw8P/xcXF/8XFxf/Gxsb/xsbG/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/ExMT/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xMTE/8TExP/FxcX/xcXF/8XF - xf/Gxsb/x8fH/8bGxv/FxcX/xMTE/8PDw//Dw8P/w8PD/8PDw//ExMT/x8fH/8bGxv/Nzc3/19fX/+Hh - 4f/09PT//f39//7+/v/9/f3//v7+//f39//09PT/9PT0//T09P/09PT/9PT0//Ty9P/y9fD/9vLy//by - 9f/08vT/9PT0//Lz8//89Ob/xZdv/5xSE/+oVQv/rVMJ/6dUC/+RYTb8AAAAAKtVCv6rVAv/rVUJ/6ZU - C/+UVR7/69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/x8fL/8/Pz//Dw8f/h4eH/yMjI/8jIyP/Gxsb/w8PD/8XFxf/ExMT/xcXF/8XFxf/FxcX/xMTE/8TE - xP/FxcX/xcXF/8TExP/ExMT/w8PD/8PDw//Dw8P/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/ExMT/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xMTE/8XFxf/FxcX/xMTE/8TE - xP/ExMT/xMTE/8PDw//Dw8P/xMTE/8TExP/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8PD - w//ExMT/3Nzc//z8/P/+/v7//v7+//7+/v/29vb/9PT0//T09P/09PT/9PT0//T09P/08vT/8vXw//by - 8v/28vX/9PL0//T09P/y8/P//PTm/8WXb/+dUxP/p1UL/61TCP+nVAr/kmEy/fPWuSyrVQr+q1QL/61V - Cf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/8vLy//T09P/u7u7/8/Pz/+Pj4//MzMz/yMjI/8bGxv/ExMT/wsLC/8TExP/ExMT/xMTE/8TE - xP/ExMT/w8PD/8PDw//ExMT/xMTE/8XFxf/FxcX/xcXF/8TExP/Dw8P/w8PD/8TExP/ExMT/xMTE/8TE - xP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8TE - xP/ExMT/xMTE/8TExP/ExMT/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xMTE/8TE - xP/ExMT/xMTE/8XFxf/FxcX/xcXF/8XFxf/ExMT/xMTE/8TExP/ExMT/xMTE/8XFxf/FxcX/xcXF/8XF - xf/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TE - xP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8XFxf/FxcX/xMTE/8PD - w//ExMT/xMTE/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8XF - xf/ExMT/x8fH/9PT0//7+/v//f39//7+/v/8/Pz/9PT0//T09P/09PT/9PT0//T09P/09PT/9PL0//L1 - 8P/28vL/9vL1//Ty9P/09PT/8vPz//z05v/Fl2//nVMT/6VUCv+tUwj/qFQM/45cLv/my6xTq1UK/qtU - C/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly8f/z9PT/8vLy//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/z8/P/8/Pz//Pz8//z8/P/8vLy/+3t7f/n5+f/39/f/9jY2P/Ozs7/ycnJ/8TE - xP/Dw8P/xcXF/8XFxf/FxcX/xMTE/8TExP/Dw8P/xMTE/8TExP/ExMT/xMTE/8TExP/FxcX/xcXF/8TE - xP/ExMT/xMTE/8TExP/ExMT/w8PD/8PDw//FxcX/xcXF/8XFxf/ExMT/xMTE/8PDw//ExMT/xMTE/8XF - xf/FxcX/xcXF/8XFxf/ExMT/xMTE/8TExP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/Dw8P/w8PD/8TExP/FxcX/xcXF/8TE - xP/ExMT/xMTE/8XFxf/FxcX/xMTE/8TExP/FxcX/xcXF/8XFxf/ExMT/xMTE/8XFxf/FxcX/xcXF/8TE - xP/ExMT/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8XFxf/FxcX/xMTE/8TExP/ExMT/xcXF/8XF - xf/FxcX/xcXF/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/xMTE/8TExP/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/FxcX/xcXF/8XF - xf/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/FxcX/xcXF/8TExP/ExMT/xMTE/8TE - xP/ExMT/xMTE/8TExP/FxcX/xcXF/8XFxf/ExMT/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/FxcX/xcXF/8XF - xf/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/Hx8f/zs7O/9bW - 1v/d3d3/5ubm/+3t7f/x8fL//Pz8//39/f/+/v7/+vr6//T09P/09PT/9PT0//T09P/09PT/9PT0//Ty - 9P/y9fD/9vLy//by9f/08vT/9PT0//Lz8//89Ob/xZdv/51UE/+lVAj/qVII/6VUEP+SWiP/4LuTU6tV - Cv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Ly8v/y8vL/8vLy//Ly8v/y8vL/8fHx/+7u - 7//q6ur/5eXl/+Li4v/f39//3Nzc/9fX1//U1NT/0dHR/83Nzf/Ly8v/yMjI/8bGxv/Gxsb/xsbG/8XF - xf/FxcX/xMTE/8XFxf/FxcX/xMTE/8TExP/Dw8P/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8XF - xf/FxcX/xMTE/8TExP/ExMT/xcXF/8XFxf/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8XF - xf/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/FxcX/xcXF/8TExP/ExMT/xMTE/8XFxf/ExMT/xMTE/8TE - xP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8XF - xf/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/FxcX/xcXF/8TExP/ExMT/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xMTE/8TExP/ExMT/xcXF/8XF - xf/FxcX/xMTE/8TExP/ExMT/xMTE/8XFxf/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xcXF/8XF - xf/FxcX/xMTE/8XFxf/FxcX/xcXF/8TExP/ExMT/xcXF/8TExP/ExMT/w8PD/8PDw//FxcX/xcXF/8TE - xP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8XFxf/FxcX/xcXF/8XFxf/FxcX/xcXF/8XF - xf/Gxsb/xsbG/8fHx//Ly8v/zs7O/8/Pz//U1NT/1tbW/9ra2v/e3t7/4ODg/+Tk5P/q6ur/7+/v//Dw - 8P/y8vL/8vLy//Pz8//09PT/8/Pz//n5+f/+/v7//f39//f39//z8/P/9PT0//T09P/09PT/9PT0//T0 - 9P/08vT/8vXw//by8v/28vX/9PL0//T09P/y8/P//PTm/8WXb/+dVBP/plQI/6tTC/+jUhH/k1QZ/9es - gVOrVQr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P09P/y8vL/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8/T/9PT0//Ly8v/y8vL/8/Pz//Ly - 8v/y8vL/8vLy//Pz8//z8/P/8/Pz//Ly8v/y8vL/8PDw//Hx8f/z8/P/8PDw/+3t7f/q6ur/6Ojo/+bm - 5//k5OT/4eHh/9/f3//a2tr/2NjY/9XV1f/T09P/0NDQ/8zMzP/Ly8v/ysrK/8nJyf/Jycn/ycnJ/8jI - yP/Hx8f/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xsbG/8bGxv/Gxsb/xcXF/8XFxf/ExMT/xMTE/8TE - xP/ExMT/w8PD/8PDw//Dw8P/xMTE/8XFxf/FxcX/xMTE/8TExP/ExMT/xcXF/8TExP/Dw8P/xMTE/8TE - xP/FxcX/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/xcXF/8TExP/FxcX/xcXF/8XFxf/ExMT/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/FxcX/xcXF/8XFxf/FxcX/xMTE/8TExP/ExMT/xMTE/8TE - xP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xcXF/8XFxf/FxcX/xcXF/8XFxf/ExMT/xcXF/8TE - xP/ExMT/xMTE/8TExP/FxcX/xMTE/8TExP/ExMT/xMTE/8TExP/ExMT/xMTE/8TExP/FxcX/xcXF/8TE - xP/ExMT/xMTE/8TExP/ExMT/xcXF/8TExP/ExMT/xMTE/8TExP/FxcX/xcXF/8TExP/ExMT/w8PD/8PD - w//Dw8P/w8PD/8TExP/FxcX/xcXF/8XFxf/Gxsb/xsbG/8XFxf/FxcX/xsbG/8bGxv/Gxsb/xsbG/8fH - x//IyMj/ycnJ/8nJyf/Kysr/y8vL/8zMzP/Nzc3/z8/P/9HR0f/V1dX/19fX/9ra2v/e3t7/4ODg/+Li - 4v/l5eb/5+fn/+vr6//t7e3/8fHx//Pz9P/19fX/7+/v//Ly8v/z8/P/8/P0//Pz8//z8/P/8/Pz//Ly - 8v/z8/P/8vLy//Ly8v/y8vL/8vLy//Pz8//19vb/+/v7//z8/P/z8/P/8vLy//T09P/09PT/9PT0//T0 - 9P/09PT/9PL0//L18P/28vL/9vL1//Ty9P/09PT/8vPz//z05v/Fl2//nVMT/6ZUCP+sUw3/pVEQ/5NU - F//InW9Tq1UK/qtUC/+tVQn/plQL/5RVHv/r2cj/+vTt//Ly8f/z9PT/8vLy//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/8PDw//Hx8f/y8vL/8vLy//Ly - 8v/y8vL/8/P0//Pz9P/z8/T/8/P0//T09P/z8/T/8vLy//Ly8v/w8PD/8vLy//Ly8v/z8/P/8/Pz//Ly - 8v/y8vL/8vLy//T09P/09PT/8vLy//Ly8v/x8fH/8fHx//Hx8f/19fX/9PT0//Hx8f/v7+//7+/v//Dw - 8f/v7/D/7e3t/+3t7f/r6+v/7Ozs/+rq6v/p6en/6Ojo/+Xl5f/j4+P/4+Pj/+Hh4f/g4OD/3Nzc/9zc - 3P/a2tr/2tra/9nZ2f/X19f/1tbW/9TU1P/U1NT/1NTU/9PT0//R0dH/0NDQ/8/Pz//Ozs7/ysrK/8rK - yv/Kysr/ysrK/8nJyf/Jycn/ycnJ/8nJyf/Jycn/x8fH/8fHx//Hx8f/x8fH/8fHx//Gxsb/xsbG/8XF - xf/FxcX/xcXF/8XFxf/ExMT/xMTE/8TExP/ExMT/xcXF/8TExP/ExMT/xMTE/8TExP/Gxsb/xcXF/8XF - xf/ExMT/xMTE/8TExP/ExMT/w8PD/8PDw//Dw8P/xMTE/8TExP/ExMT/xMTE/8PDw//Dw8P/xMTE/8TE - xP/ExMT/xcXF/8XFxf/FxcX/xcXF/8TExP/ExMT/xMTE/8TExP/FxcX/xMTE/8TExP/ExMT/xMTE/8XF - xf/FxcX/xcXF/8XFxf/FxcX/xsbG/8bGxv/Hx8f/x8fH/8fHx//IyMj/yMjI/8jIyP/Jycn/ycnJ/8nJ - yf/Kysr/ysrK/8rKyv/Ly8v/zMzM/8/Pz//Q0ND/0tLS/9PT0//T09P/1NTU/9TU1P/V1dX/1tbW/9jY - 2P/Z2dn/2tra/9vb2//c3Nz/4ODg/+Dg4P/i4uL/5OTk/+Xl5f/o6Oj/6urq/+vr6//s7Oz/7e3t/+3t - 7f/t7e3/7+/v//Dw8P/v7/D/7+/v//Hx8f/y8vP/9fX1//Ly8v/x8fH/8vLy//Ly8v/y8vL/8/Pz//T0 - 9P/y8vL/8vLy//Ly8v/09PT/9PT0//Pz8//y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/9PT0//T0 - 9P/y8vL/8vLy//Pz8//09PT/9PT0//Pz8//y8vL/8vLy//X19v/29vb/8vLy//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//Ty9P/y9fD/9vLy//by9f/08vT/9PT0//Lz8//89Ob/xZdv/51TE/+pVQj/rlMM/6dS - D/+YVRj/wZBiU6tVCv6rVAv/rVUJ/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//Ly8v/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Pz8//z8/P/8/Pz//Pz - 8//z8/P/8/Pz//T09P/z8/P/8vLy//Ly8v/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/9PT0//Pz - 8//z8/P/9PT0//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//T09P/09PT/8vLy//Pz8//z8/P/9PT0//T0 - 9P/z8/P/9PT0//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz - 8//z8/P/9PT0//T09P/09PT/8/Pz//Pz8//z8/P/8/Pz//Pz8//x8fH/8vLy//Ly8v/x8fH/8PDw//Hx - 8f/x8fH/8PDw//Dw8P/v7+//8PDw/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v - 7//v7+//7u7u/+7u7v/u7u7/7u7u/+7u7v/t7e3/7e3t/+3t7f/s7Oz/7Ozs/+zs7P/r6+v/6+vr/+vr - 6//q6ur/6enp/+np6f/p6en/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6Ojo/+jo - 6P/p6en/6urq/+rq6v/q6ur/6urq/+vr6//r6+v/6+vr/+zs7P/s7Oz/7e3t/+3t7f/t7e3/7u7u/+7u - 7v/u7u7/7e3t/+3t7f/u7u7/7+/v/+/v7//u7u7/7u7u/+/v7//v7+//8PDx/+/v7//v7+//7+/v/+/v - 7//x8fH/8PDw//Dw8P/x8fH/8fHx//Dw8P/v7+//8PDw//Hx8f/x8fH/8vLy//Ly8v/y8vL/8vLy//Pz - 8//z8/P/9PT0//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8vLy//Pz - 8//09PT/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Ly8v/z8/P/9PT0//T09P/z8/P/8/Pz//Ly - 8v/y8vL/8vLy//Pz8//09PT/8/Pz//Ly8v/z8/P/8/Pz//Pz8//z8/P/8vLy//Ly8v/09PT/8/P0//Ly - 8v/z8/P/8/Pz//Pz8//z8/P/8/Pz//Ly8v/z8/P/9PT0//Pz8//z8/P/8/Pz//T09P/z8/P/9PT0//T0 - 9P/09PT/9PT0//T09P/08vT/8vXw//by8v/28vX/9PL0//T09P/y8/P//PTm/8WXb/+dUxP/qlUK/7BU - DP+oUg7/mVMS/7iHU1OqVAr+qlML/6xUCP+lUwj/lFUe/+vZyP/69O3/8vLx//P09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PL0//L18P/28vL/9vL1//Ty9P/09PT/8vPz//rz5f/Fl2//nlMT/6dT - CP+tUQj/rFQP/5xVEP+ve0RTqlQK/qtTC/+sVAj/pVMJ/5RVHv/r2cj/+vTt//Ly8f/z9PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//Ty9P/y9fD/9vLy//by9f/08vT/9PT0//Lz8//68+X/xZdv/51T - E/+nUwj/rVII/6xUDv+bUw7/2rWK36pUCv6rUwv/rFQI/6ZUC/+UVR7/69nI//r07f/y8vH/8/T0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/08vT/8vXw//by8v/28vX/9PL0//T09P/y8/P/+vPl/8WX - b/+dUxP/plQL/65TC/+rUwz/nFQL/9axhf+qVAr+q1QL/61VCf+mVAv/lFUe/+vZyP/69O3/8vLx//P0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PL0//L18P/28vL/9vL1//Ty9P/09PT/8vPz//rz - 5f/Fl2//nFMV/6ZUC/+tUwv/qlML/59VC//OqHn/qlUL/qtUC/+tVQj/plQJ/5RVHv/r2cj/+fLu//Ly - 8f/y9PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/z8vT/8vT0//Py9P/w9fD/9vLy//by9f/08vP/9PTz//Pz - 8v/88+X/xpdv/51SFf+nVQv/rVML/6pUC/+fVw//y6Rz/6dVDP6oUwv/rVYG/6hVCf+VUx//7NnG//fy - 8P/z9PT/7vLx//L08//09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T0 - 8v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T0 - 8v/09PL/9PTy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T08v/09PL/9PTy//T0 - 8v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T0 - 8v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T0 - 8v/09PL/9PTy//T08v/09PL/9PTy//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 8v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T0 - 8v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTz//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T08v/09PL/9PTy//T08v/09PL/9PTy//T0 - 8v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T0 - 8v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T0 - 8v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T0 - 8v/09PP/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PTy//T08v/09PL/9PTy//T0 - 8v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//T08v/09PL/9PTy//fy - 8//48vT/9vL1//Ty9P/08vT/9fTy//b08v/08/T/8fL3/+7y9//w9PP/7vbw//X08f/48vT/9fTz//X0 - 8//z8/L//vTm/8iWb/+iUhP/qlUI/65UCv+pUwz/mlMS/82cZv+mVA3+qlML/65VBv+nVAf/l1Ui/+3Z - xf/68vD/9Pb0//L08P/z8/P/8vT0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz - 9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz - 9P/y8/T/8vP0//L09P/y9PL/8vTy//L08v/y9PL/8vTy//L08v/y9PL/8vTy//L08v/y9PT/8vP0//Lz - 9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz - 9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz - 9P/y8/T/8vP0//Lz9P/y8/T/8vP0//L09P/y9PL/8vTy//L08v/y9PL/8vTy//L08v/y9PL/8vTy//L0 - 8v/y9PT/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz - 9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//L0 - 9P/y9PL/8vTy//L08v/y9PL/8vTy//L08v/y9PL/8vTy//L08//y9PT/8vP0//Lz9P/y8/T/8vP0//Lz - 9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz - 9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//L08v/y9PL/8vTy//L08v/y9PL/8vTy//L0 - 8v/y9PL/8vTy//L09P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz - 9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz - 9P/y8/T/8vT0//L08v/y9PL/8vTy//L08v/y9PL/8vTy//L08v/y9PL/8vTz//L09P/y8/T/8vP0//Lz - 9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz9P/y8/T/8vP0//Lz - 9P/v9PT/7vTy/+309P/t9PT/7/Ty//T08P/29PD/9/Px//fy9P/18vX/9PL0//P08v/28vT/+PD3//Ly - 9v/w8/T/7PP1//f26P/Bl3H/nFMU/6lUCP+tVAv/qVMM/5tSEv/MlV3/qVMM/qpSDP+tVQn/p1MK/5lX - JP/v28j//PLv//T09P/y9fL/8vLy//T08v/08/L/9PPz//Tz8//08/P/9PPy//Tz8v/08/L/9PPz//Tz - 8//08/P/9PPy//Tz8v/08/L/9PPz//Tz8//08/L/9PPy//Tz8v/08/P/9PPz//Tz8//08/L/9PPy//Tz - 8v/08/P/9PPz//Tz8//08/T/9PL0//Ty9P/08vT/9PL0//Ty9P/08vT/9PL0//Ty9P/08vT/9PTz//Tz - 8//08/L/9PPy//Tz8v/08/P/9PPz//Tz8//08/L/9PPy//Tz8v/08/P/9PPz//Tz8//08/L/9PPy//Tz - 8v/08/P/9PPz//Tz8//08/L/9PPy//Tz8v/08/P/9PPz//Tz8//08/L/9PPy//Tz8//08/P/9PPz//Tz - 8v/08/L/9PPy//Tz8//08/P/9PPz//Tz8v/08/T/9PL0//Ty9P/08vT/9PL0//Ty9P/08vT/9PL0//Ty - 9P/08vT/9PP0//Tz8v/08/L/9PPy//Tz8//08/P/9PPz//Tz8v/08/L/9PPy//Tz8//08/P/9PPz//Tz - 8v/08/L/9PPy//Tz8//08/P/9PPz//Tz8v/08/L/9PPy//Tz8//08/P/9PPz//Tz8v/08/L/9PPy//Tz - 9P/08vT/9PL0//Ty9P/08vT/9PL0//Ty9P/08vT/9PL0//Ty9P/08vT/9PTz//Tz8//08/P/9PPy//Tz - 8v/08/L/9PPz//Tz8//08/P/9PPy//Tz8v/08/L/9PPz//Tz8//08/P/9PPy//Tz8v/08/L/9PPz//Tz - 8//08/P/9PPy//Tz8v/08/L/9PPz//Tz8//08/P/9PPy//Tz9P/08vT/9PL0//Ty9P/08vT/9PL0//Ty - 9P/08vT/9PL0//Ty9P/08/T/9PPy//Tz8v/08/L/9PPz//Tz8//08/L/9PPy//Tz8v/08/P/9PPz//Tz - 8//08/L/9PPy//Tz8v/08/P/9PPz//Tz8//08/L/9PPy//Tz8v/08/P/9PPz//Tz8//08/L/9PPy//Tz - 8v/08/P/9PP0//Ty9P/08vT/9PL0//Ty9P/08vT/9PL0//Ty9P/08vT/9PL0//Ty9P/09PP/9PPz//Tz - 8//08/L/9PPy//Tz8v/08/P/9PPz//Tz8//08/L/9PPy//Tz8v/08/P/9PPz//Tz8//08/L/9PPy//Tz - 8v/08/T/8fT0//D08v/v9PL/7/Ty/+/08v/y9PD/9PTw//T08P/08/L/8vP0//Dy9f/u9PT/8fL1//Lx - +P/w8vf/8PP1/+/z9P/69Ob/xpdv/55TE/+nVAr/qlQL/6hTDP+eUhL/zI1U/6pUCv6qUgv/rFUJ/6RT - C/+YWSn/8d7L//vy8f/y8/L/8fX0//Dx8//z9PL/9PPy//Tz8//08/P/9PPz//Tz8v/08/L/9PPy//Tz - 8//08/P/9PPz//Tz8v/08/L/9PPy//Tz8//08/P/9PPy//Tz8v/08/L/9PPz//Tz8//08/P/9PPy//Tz - 8v/08/L/9PPz//Tz8//08/P/9PTz//Ty8v/08vL/9PLy//Ty8v/08vL/9PLy//Ty8v/08vL/9PLy//T0 - 8//08/P/9PPy//Tz8v/08/L/9PPz//Tz8//08/P/9PPy//Tz8v/08/L/9PPz//Tz8//08/P/9PPy//Tz - 8v/08/L/9PPz//Tz8//08/P/9PPy//Tz8v/08/L/9PPz//Tz8//08/P/9PPy//Tz8v/08/P/9PPz//Tz - 8//08/L/9PPy//Tz8v/08/P/9PPz//Tz8//08/L/9PTz//Ty8v/08vL/9PLy//Ty8v/08vL/9PLy//Ty - 8v/08vL/9PLy//T08//08/L/9PPy//Tz8v/08/P/9PPz//Tz8//08/L/9PPy//Tz8v/08/P/9PPz//Tz - 8//08/L/9PPy//Tz8v/08/P/9PPz//Tz8//08/L/9PPy//Tz8v/08/P/9PPz//Tz8//08/L/9PPy//Tz - 8v/08/T/9PTz//Ty8v/08vL/9PLy//Ty8v/08vL/9PLy//Ty8v/08vL/9PPy//T08//08/P/9PPz//Tz - 8v/08/L/9PPy//Tz8//08/P/9PPz//Tz8v/08/L/9PPy//Tz8//08/P/9PPz//Tz8v/08/L/9PPy//Tz - 8//08/P/9PPz//Tz8v/08/L/9PPy//Tz8//08/P/9PPz//Tz8v/08/T/9PLy//Ty8v/08vL/9PLy//Ty - 8v/08vL/9PLy//Ty8v/08vL/9PTz//Tz8v/08/L/9PPy//Tz8//08/P/9PPy//Tz8v/08/L/9PPz//Tz - 8//08/P/9PPy//Tz8v/08/L/9PPz//Tz8//08/P/9PPy//Tz8v/08/L/9PPz//Tz8//08/P/9PPy//Tz - 8v/08/L/9PPz//Tz9P/09PP/9PLy//Ty8v/08vL/9PLy//Ty8v/08vL/9PLy//Ty8v/08/L/9PTz//Tz - 8//08/P/9PPy//Tz8v/08/L/9PPz//Tz8//08/P/9PPy//Tz8v/08/L/9PPz//Tz8//08/P/9PPy//Tz - 8v/08/L/9PP0//Xz9P/38vT/9vPy//Xz8v/08/L/8vPy//H08v/x9PP/8fT0//H09P/x9PP/7fXx//D0 - 8//x8vb/8PL2//L09P/y8/L//vTk/8iYbP+gUxH/p1UL/6lVC/+oUwz/oVIQ/8qGSv+rVQr+qlMK/6lV - Cv+fUgv/l1ss//Hhzv/38vD/7fLy/+709v/u8PT/8fPz//Lz8//y8/P/8vPz//Lz8//y9PT/8vT0//L0 - 9P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L0 - 9P/y9PT/8vT0//L09P/y9PT/8vT0//Lz8//y8/D/8vPw//Lz8f/y8/H/8vPx//Lz8P/y8/D/8vPw//Lz - 8v/y8/T/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L0 - 9P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L0 - 9P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//Lz8//y8/D/8vPx//Lz8f/y8/H/8vPw//Lz - 8P/y8/D/8vPx//Lz8v/y8/P/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L0 - 9P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vPz//Lz8//y8/P/8vPz//Lz8//y8/P/8vT0//L0 - 9P/y9PT/8vT0//Lz8v/y8/H/8vPw//Lz8P/y8/H/8vPx//Lz8f/y8/D/8vPw//Lz8v/y8/P/8vPz//Lz - 8//y8/P/8vPz//L09P/y9PT/8vT0//L09P/y8/P/8vPz//Lz8//y8/P/8vPz//Lz8//y9PT/8vT0//L0 - 9P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vP0//Lz8P/y8/H/8vPx//Lz - 8f/y8/D/8vPw//Lz8P/y8/H/8vPx//Lz8//y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L0 - 9P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//Lz - 8//y8/P/8vPz//Lz8//y8/P/8vPy//L08P/y9PD/8vTw//L08f/y8/H/8vPx//Lz8P/y8/D/8vPy//Lz - 9P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L09P/y9PT/8vT0//L0 - 9P/y9PT/8vT0//Lz9P/28vb/9/L3//fy9P/38vT/9fL0//Hy9//w8vj/8PH3//Lx9v/08fT/9vHx//L1 - 8P/z9PH/8vPz//Hz8//z9PP/8vTw//z34//FmGv/nFMQ/6hUC/+qVAv/qVML/6JSDv/GfUD/rFQH/qtV - Cv+mVAr/nlQO/5deLf/05s//+vPt//bz8P/x8/L/8fLz//Hy8v/y8vL/8vLy//Ly8v/z8/P/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/08vT/9PL0//Ty9P/08vX/9PL2//Ty9v/08vX/9PL0//Ty - 9P/08vX/9PP0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0 - 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/08vT/9PL0//Ty9f/08vb/9PL2//Ty - 9f/08vT/9PL0//Ty9f/08vb/9PL0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//Py - 8v/z8vL/8/Ly//Ly8v/y8vL/8vLy//Py8v/z8vL/8/Ly//Ly8v/y8vL/8vLy//Ly8v/y8vL/8/Ly//Ly - 8v/y8vL/8vLy//Py8v/y8vP/8vD0//Lx9P/y8fT/8vD0//Pw9P/z8PT/8vH0//Lx9P/y8fT/8vLy//Ly - 8v/y8vL/8vLy//Ly8v/y8vL/8/Ly//Py8v/z8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/z8vL/8vLy//Ly - 8v/y8vL/8/Ly//Py8v/z8vL/8vLy//Ly8v/y8vL/9PT0//T09P/09PT/9PT0//Tz9P/y8vT/8/D0//Pw - 9P/z8PT/8vL0//Ty9P/08vX/9PL2//Ty9v/08vL/8vLy//Ly8v/y8vL/8/Ly//Py8v/y8vL/8vLy//Ly - 8v/z8vL/8/Ly//Py8v/y8vL/8vLy//Ly8v/09PT/9PT0//T09P/09PT/9PPz//Ly8v/z8vL/8/Ly//Py - 8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Py8//y8fT/8vL0//Lx9P/z8PT/8vD0//Lw9P/y8fT/8vH0//Lx - 9P/z8vL/8/Ly//Py8v/y8vL/8vLy//Ly8v/z8vL/8/Ly//Py8v/y8vL/9PT0//T09P/09PT/9PT0//Ty - 8v/y8vL/8vLy//Ly8v/z8vL/8vLz//Hz8//08/D/9fTw//Pz8v/x8vf/8PD3//Pv9f/78/f//PLz//bz - 8f/x9u3/8vXv//Pz8//z9PP/+Pf1//by8v/58eX/wJRv/55UFf+oVAv/q1QL/6lUC/+jUw7/wnc1/6xU - B/6rVA3/plQM/59TD/+eYi3/+ubJ//705P/+9+b//fXn//v07f/49O3/+PPu//ny7v/58u7/+fLu//jz - 7v/48+7/+PPu//ny7v/58u7/+fLu//jz7v/48+7/+PPu//ny7v/58u7/+PPu//jz7v/48+7/+fLu//ny - 7v/58u7/+PPu//jz7v/48+7/+fLu//ny7v/58u7/+PTt//j06//49Ov/+fTr//n06//59Ov/+PTr//j0 - 6//49Ov/+fTs//ny7v/58u7/+PPu//jz7v/48+7/+fLu//ny7v/58u7/+PPu//jz7v/48+7/+fLu//ny - 7v/58u7/+PPu//jz7v/48+7/+fLu//ny7v/58u7/+PPu//jz7v/48+7/+fLu//ny7v/58u7/+PPu//jz - 7v/58+7/+fLu//ny7v/48+7/+PPu//jz7v/58u7/+fLu//ny7v/48+7/+PTt//j06//59Ov/+fTr//n0 - 6//49Ov/+PTr//j06//59Ov/+fTs//ny7f/48+7/+PPu//jz7v/58u7/+fLu//ny7v/48+7/+PPu//jz - 7v/48u3/+PLt//jy7f/48u3/+PLt//jy7f/48u3/+PLt//jy7f/48u3/+PPu//jz7v/58u7/+fLu//jy - 7f/48u3/+PLt//jy7f/48u3/+fPs//n06//49Ov/+PTr//n06//48+v/+PPr//jz6//48+v/+PPs//ny - 7v/58u7/+fLu//jz7v/48+3/+PLt//jy7f/48u3/+PLt//jy7f/48+7/+PPu//ny7v/58u7/+PLt//jy - 7f/48u3/+PLt//jy7f/48u3/+PLt//jy7f/48u3/+PLt//ny7v/58u7/+fLu//jz7v/48+7/+PPr//jz - 6//48+v/+PPr//j06//49Or/+PTq//n06//59Ov/+PLs//jy7f/48u3/+PLt//jy7f/48u3/+PLt//jy - 7f/48u3/+PLt//jy7f/48u3/+PLt//jy7f/48u3/+fLu//ny7v/58u7/+PPu//jz7f/48u3/+PLt//jy - 7f/48u3/+PLt//jz7v/48+7/+fLu//ny7v/48+z/+PPr//j06//48+v/+PPr//n06//59Ov/+PTr//j0 - 6//49Oz/+PLt//jy7f/48u3/+PLt//jy7f/48u3/+PLt//jy7f/48u3/+PLt//jz7v/48+7/+fLu//ny - 7v/48u3/+PLt//jy7f/48u3/+fLt//nz7P/59Oj/+/Xl//z15f/69ef/9fLr//f18v/38u//+vLq//vx - 5//59Oz/9fbn//j36f/49Ov/+PLr//zx6v/88O///vLp/8STdf+dThb/qVQL/6tUC/+pVAv/pVMO/7xu - LP+rVAn+qVMP/6hTDv+kUwz/q2Yt/+a9lv/lvqD/5L+e/+O9nv/ku5v/7L6X/+2+l//tvpf/7b6X/+2+ - l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+ - l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+mP/tvpj/7b6Y/+2+mP/tvpj/7b6Y/+2+ - mP/tvpj/7b6Y/+2+mP/tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+ - l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+ - l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+mP/tvpj/7b6Y/+2+ - mP/tvpj/7b6Y/+2+mP/tvpj/7b6Y/+2+mP/tvpj/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+ - l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+ - l//tvpf/7b6X/+2+l//tvpf/7b6Y/+2+mP/tvpj/7b6Y/+2+mP/tvpj/7b6Y/+2+mP/tvpj/7b6Y/+2+ - mP/tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+ - l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6Y/+2+ - mP/tvpj/7b6Y/+2+mP/tvpj/7b6Y/+2+mP/tvpj/7b6Y/+2+mP/tvpf/7b6X/+2+l//tvpf/7b6X/+2+ - l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+ - l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpj/7b6Y/+2+mP/tvpj/7b6Y/+2+mP/tvpj/7b6Y/+2+ - mP/tvpj/7b6Y/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+l//tvpf/7b6X/+2+ - l//tvpf/7b6X/+2+l//tvpf/7b6X/+y+mP/mvp7/5L2f/+a/m//kv5v/3L+g/93HsP/57Nn//fXg//nn - zv/y1bn/776o/+K7m//ju53/7MSn/+/LsP/55s//++3f//735f+9k2v/mlMU/6hUCv+pVQj/qVUL/6VT - Df+1ZSL/qlIM/qlSD/+pUw7/qFMJ/7dpKv/stYT/6rGE/+20gv/ws4L/77KC//Czgf/ws4H/8LOB//Cz - gf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Cz - gf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LKC//Cygv/wsoL/8LKC//Cy - gv/wsoL/8LKC//Cygv/wsoL/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Cz - gf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Cz - gf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOC//Cy - gv/wsoL/8LKC//Cygv/wsoL/8LKC//Cygv/wsoL/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Cz - gf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Cz - gf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LKC//Cygv/wsoL/8LKC//Cygv/wsoL/8LKB//Cy - gf/wsoH/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Cz - gf/ws4H/8LOB//Czgf/ws4H/8LOB/++ygP/vsoD/77KA/++ygP/vsoD/8LOB//Czgf/ws4H/8LOB//Cz - gf/ws4H/8LKC//Cygv/wsoL/8LKB//Cygf/wsoH/8LKC//Cygv/ws4H/8LOB//Czgf/ws4H/8LOB//Cz - gf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Cz - gf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/wsoH/8LOB//Cygf/wsoL/8LKC//Cy - gv/wsoL/8LKC//Cygv/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/ws4H/8LOB//Cz - gf/ws4H/8LOB//Czgf/ws4H/8LOB//Czgf/vs4H/7bGC/+2ygf/xs33/8LN9/+mygv/drYf/+uHB/+/D - ov/Tnnf/3J5z/+uab//mnmr/56Bq/+Keav/dnGn/26Bz/9qriP/vz6v/z5dg/6BUDf+mVAr/qFYI/6lV - Cf+nUwv/sV0a/6pSDf6pUw3/qlMM/6VSDP+zay7/8riD//W0gf/0s3v/97J7//axfv/xsX7/8bF+//Kx - fv/ysX7/8rF+//Gxfv/xsX7/8bF+//Kxfv/zsX7/87F+//Kxfv/ysX7/8rF+//Oxf//zsX//8rF+//Kx - fv/ysX7/87F///Oxf//zsX//8rF+//Kxfv/ysX7/87F///Oxf//zsX//8rF+//Kxfv/ysX7/87F///Ox - f//zsX//8rF+//Kxfv/ysX7/87F///Oxf//zsX//8rF+//Kxfv/ysX7/87F///Oxf//zsX//8rF+//Kx - fv/ysX7/87F///Oxf//zsX//8rF+//Kxfv/ysX7/87F///Oxf//zsX//8rF+//Kxfv/ysX7/87F///Ox - f//zsX//8rF+//Kxfv/zsX//87F///Oxf//ysX7/8rF+//Kxfv/zsX//87F///Oxf//ysX7/8rF+//Kx - fv/zsX//87F///Oxf//ysX7/8rF+//Kxfv/zsX//87F///Oxf//ysX7/8rF+//Kxfv/zsX//87F///Ox - f//ysX7/8rF+//Kxfv/zsn//87J///Oyf//ysn//8rJ///Kxfv/zsX//87F///Oxf//ysX7/8bF+//Gx - fv/ysX7/8rF+//Kyf//ysn//8rJ///Kyf//zsn//8rF///Kxfv/xsX7/8bF+//Kxfv/zsX//87F///Kx - fv/ysX7/8rF+//Kxfv/ysX7/8rF+//Gxfv/xsn7/8rJ///Oyf//zsn//87J///Kyf//xsX7/8bF+//Kx - fv/ysX7/87J///Kyf//ysn//8rJ///Oyf//zsX//87F///Kxfv/ysX7/8rF+//Oxf//zsX//87F///Kx - fv/ysX7/8rF+//Oxf//zsX//87F///Kxfv/ysX7/8rF+//Oxf//zsX//87F///Kxfv/ysX7/8rF+//Ox - fv/zsX//8rF+//Kxfv/ysX7/87F///Oxf//zsX//8rF+//Kxfv/ysX7/87F///Oxf//zsX//8rF+//Kx - fv/ysX7/87F///Oxf//zsX//8rF+//Gxfv/xsX7/8rF+//Kxfv/zsn//8rJ///Kzf//ysn//87J///Kx - f//ysX7/8bF+//Gxfv/xsX7/87F///Oxf//zsX//8rF+//Kxfv/ysn//87J///Oyf//zsn//8rJ///Kx - fv/ysX7/87F///Oxf//zsn//8rJ///Kyf//ysn//9LJ///Szfv/4s3z/+rR6//m0ev/1s33/9bSD//a6 - jP/loHL/6J5r/+6eaf/2n2f/8qBj//KgYv/zoGT/8aNm/+mcY//jnmv/3p9s/8+ESP+lVAz/plQL/6ZU - Cf+pVAv/qFML/6xWEf+sUw3+qFQI/6pVCP+eUg7/qW40//G7iP/3tID/9LJ8//Syfv/1sH7/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/0sn3/9LJ9//Syff/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/1s37/9bN+//Sy - ff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9LJ9//Sy - ff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/3s37/9rN+//Szfv/0tH7/9LR+//iz - fv/1rXf/7aBo/+6eZv/ynmb/8qFm//KgZ//yoGf/8qBn//KgZ//vnmX/8qBm//OhZP/WhUf/pFQR/6ZT - C/+oUwv/qlQL/6lTC/+rVg7/rFQN/qhTCP+pVQn/n1IP/691Pv/zvov/9rN///SzfP/0sn7/9bB+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9LJ9//Syff/0sn3/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9bN+//Wz - fv/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Sy - ff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/97N+//azfv/0s37/9LR+//S0 - fv/4s37/9a13/+2gaP/wn2b/8p5m//KhZv/yoGf/8qBn//KgZ//yoGf/8aBn//GfZf/wnmH/4ZBT/6VT - Ef+mUwv/qFML/6tUC/+pUwv/rFcP/6tTDP6oUwj/qVUJ/51SD/+8g0z/8r6N//Syfv/0s3z/9LN///ey - gP/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Sy - ff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//ezfv/2s37/9LN+//S0 - fv/0tH7/97J9//Wtd//toWn/8J9m//KeZv/yoWb/8qBn//KgZ//yoGf/8qBn//KgZ//yn2X/8J5h/+WU - V/+mUxH/qVML/6lTC/+sVAv/q1ML/61YEf+rUwv+qlUI/6hUCP+dUhD/ypBb//C9jP/0sn//9LN9//Sw - ff/3s4D/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Syff/0sn3/9LJ9//Sy - ff/0sn3/9LJ9//Wzfv/1s37/9LJ9//Syff/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Sy - ff/0sn3/9LJ9//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/3s37/9rN+//Sz - fv/0tH7/9LR+//eyff/2rnj/7qJq//CfZv/ynmb/8qFm//KgZ//yoGf/8qBn//KgZ//vnWT/8qBm//Kg - Y//gj1L/p1QR/6lTC/+rUwv/rlML/6tTC/+vWRH/q1MK/qtWCv+nUwf/nlMS/9SbaP/xvo7/9LJ///Sz - ff/0sX3/+LJ///Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9LJ9//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Wzfv/1s37/9LJ9//Sy - ff/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/1s37/9bN+//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Syff/0sn3/9LJ9//Wzfv/1s37/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9LJ9//Sy - ff/1s37/9bN+//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9LJ9//Wzfv/0sn3/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9LJ9//Syff/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/0sn3/9LJ9//Sy - ff/0sn3/9LJ9//Syff/1s37/9bN+//Syff/0sn3/9LJ9//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wz - fv/0sn3/9LJ9//Syff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Sy - ff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9rJ9//ay - ff/0s37/9LR+//S0fv/3sn3/9695/+2gaP/xoGf/8p5m//KhZv/yoGf/8qBn//KgZ//yoGf/8J9m//Kf - Zf/yoGP/2YhL/6hUEv+qUwv/q1ML/61SC/+rUwv/rloT/6tTCv6qVQr/p1MI/51UE//hqnb/8L2P//Ky - gP/0tH//9bJ+//iyf//1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Syff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/1s37/9bN+//Sy - ff/0sn3/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9bN+//Wzfv/0sn3/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/1s37/9bN+//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Sy - ff/0sn3/9bN+//Wzfv/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Syff/1s37/9LJ9//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Syff/0sn3/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//ay - ff/2sn3/9LN+//S0fv/0tH7/97J9//iwev/toWn/8qFo//KeZv/yoWb/8qBn//KgZ//yoGf/8Z9m//Gf - Zv/xn2X/8qBj/9mIS/+nVBH/qlQL/6xUC/+sUwv/qFMM/69dGf+rUwr+qlUK/6hTCf+bURP/77eE/+6+ - kP/ysoH/9LR///Wyfv/4sn//9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Sy - ff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/1s37/9bN+//Syff/0sn3/9LJ9//Syff/0sn3/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9bN+//Wz - fv/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Wzfv/1s37/9LJ9//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9bN+//Wzfv/0sn3/9LJ9//Wzfv/1s37/9bN+//Wz - fv/0sn3/9LJ9//Wzfv/1s37/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/0sn3/9bN+//Sy - ff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/0sn3/9LJ9//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9LJ9//Syff/0sn3/9bN+//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wz - fv/2sn3/9bJ9//Syff/0s33/9LN9//eyff/4sHr/7aFp//KhaP/ynmb/8qFm//KgZ//yoGf/8qBn//Kg - Z//yoGf/8p9l//KgY//djE//pVIO/6pUCv+rVAv/qlML/6dTDv+4aSX/rFIJ/qpVCv+pVQv/mVAS//K5 - iP/uvpD/8rKB//S0f//1sn7/+LJ///Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Sy - ff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9bN+//Wzfv/0sn3/9LJ9//Syff/0sn3/9LJ9//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Wz - fv/1s37/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/1s37/9bN+//Syff/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Wzfv/1s37/9LJ9//Syff/1s37/9bN+//Wz - fv/1s37/9LJ9//Syff/1s37/9bN+//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9LJ9//Wz - fv/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9LJ9//Sy - ff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Syff/0sn3/9LJ9//Wzfv/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/1s37/9bN+//Wz - fv/1s37/97N+//ayff/0sn3/9LN9//Szff/3sn3/+LB6/+2haf/yoWj/8p5m//KhZv/yoGf/8qBn//Kg - Z//yoGf/8qBn//GfZf/yoGP/4ZBT/6VSDv+qVQj/qlUL/6lTC/+lUg7/v3My/61TC/6rVQv/p1QL/5pS - FP/xvIv/7r2S//Gygf/0tH//9bJ9//iyfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Wzfv/1s37/9LJ9//Syff/0sn3/9LJ9//Sy - ff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Sy - ff/1s37/9bN+//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9bN+//Wzfv/0sn3/9bN+//Wz - fv/1s37/9bN+//Wzfv/0sn3/9bN+//Wzfv/1s37/9LJ9//Syff/1s37/9bN+//Syff/0sn3/9bN+//Wz - fv/1s37/9bN+//Syff/0sn3/9bN+//Wzfv/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Sy - ff/1s37/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Sy - ff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/0sn3/9LJ9//Syff/1s37/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9bN+//Wz - fv/1s37/9bN+//ezfv/2sn3/9LJ9//Szff/0s33/97J9//iwev/toWn/8qFo//KeZv/yoWb/8qBn//Kg - Z//yoGf/8Z9m//GfZv/wnmT/8qFk/+aWWf+nVRH/qVUJ/6pVC/+oUwv/pFIO/8l/P/+tUwv+qVQL/6VU - C/+ZUxT/9cCT/+28kv/xs4D/8rN///azfv/4s33/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9LJ9//Sy - ff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Sy - ff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/0sn3/9LJ9//Syff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/3s37/9rN+//Szfv/0tH7/9LR+//izfv/2rnj/7aFp//CfZv/ynmb/8qBn//Cg - Z//woGb/8KFm//KgZv/xnmX/8J5n/+ugaP/pomv/m1UV/6FUC/+tVgv/q1MG/6lUEP/IiVH/rVMK/qlU - Df+lVAv/mFMU//bBlv/tvJL/8bOA//Kzf//2s37/+LN9//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Sy - ff/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Sy - ff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9LJ9//Syff/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/97N+//azfv/0s37/9LR+//S0fv/3sn3/9q54/+2haf/wn2b/8p5m//Kg - Z//woGf/8KBm//ChZv/yoGb/8J5l//CfaP/roWv/7Kdy/5tVGP+hUw3/rFQJ/61VBv+mUw3/yJJf/61T - Cv6pUw3/plQL/5tTFP/5w5f/7byS//G0f//ys3//9rN+//izff/1s37/9bN+//Wzfv/1s37/9LJ9//Sy - ff/0sn3/9LJ9//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Sy - ff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Syff/0sn3/9LJ9//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//ezfv/2s37/9LN+//S0fv/0tH7/97J9//aueP/toWn/7p5m//Ke - Zv/yoGf/8KBn//CgZv/woWb/8qBm//CeZf/vnmf/6qBq//Ouef+fVhn/plML/61SCP+tVgn/n1AO/9Gi - c/+tUwr+qVMN/6ZUC/+aUxL/+saY/+68kv/xtH//8rN///azfv/4s33/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9LJ9//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Sy - ff/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/3s37/9rN+//Szfv/0tH7/9LR+//WxfP/1rXf/7aFp/+6e - Zv/ynmb/8qBn//CgZ//woGb/8KFm//KgZv/xn2b/7p5m/+mfaf/3snz/oFcY/6hSC/+uUgj/qlUJ/5tQ - FP/asor/q1QK/qlUDf+mVAv/m1MS//rJmf/uvJD/8rR+//Ozf//2s37/+LN9//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Syff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Sy - ff/0sn3/9LJ9//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/97N+//azfv/0s37/9LR+//S0fv/1sXz/9a13/+2h - af/unmb/859n//KgZ//woGf/8KBm//ChZv/yoGb/8p9n/++eZ//pn2n/+baB/6JYGP+nTwb/rlII/6dT - Cv+ZUhv/rHVNU6tUCv6pVA3/p1QK/5tTEv/6xpb/7r2P//K0ff/zsn7/9rN+//ezff/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//ezfv/2s37/9LN+//S0fv/0tH7/97J9//Ws - dv/toWn/8J9m//KeZv/yoGf/8KBn//CgZv/woWb/8aBl//GfZv/vn2f/6J5o//q7hf+gVhf/rFUJ/61S - Cv+lVQ7/k08b/7uNZVOrUwr+qFML/6dVCf+dVBL/7rWE//C9j//ztH3/87J+//Szfv/3s33/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/3s37/9rN+//Szfv/0tH7/9LR+//ey - ff/1rHb/7aBo//CfZv/ynmb/8qBn//CgZ//woGb/8KFm//KgZv/yn2b/759n/+ieaP/6toH/oVgY/6hT - CP+tVAz/n1IM/5NTI//ImnhTrFQM/qlUC/+oUwn/nlQQ/92jcf/vvI7/9LV8//Szf//0sn7/9rN8//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wz - fv/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/97N+//azfv/0s37/9LR+//S0 - fv/4s37/9ax2/+2gaP/wn2b/8p5m//KgZ//woGf/8KBm//ChZv/yoGb/8p9n/+6eZ//pn2n/8ax3/6FX - F/+rVgv/q1QN/55TD/+PUyT/78SmU6pSCv6qVA3/qFMJ/51UD//KkV3/8LyN//S0fP/0s3//9LJ+//ay - fP/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/1s37/9bN+//Wz - fv/1s37/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//ezfv/2s37/9LN+//S0 - fv/0tH7/+LN+//Wsdv/toGj/8J9n//OfZ//yoGf/8KBn//CgZv/woWb/8qBm//KfZ//unmf/6qBq/+ah - bP+eVRT/r1gM/6lSCv+eVBL/oGc6/AAAAACqUgv+qVQK/6hTCf+dUg3/tnpG//K8jP/0s3z/9LN9//Sy - fv/0sn3/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Szfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Syfv/0sn3/9LJ9//Syff/0sn3/9LJ9//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9bN+//Wz - fv/1s37/9bN+//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzff/1s33/9bN9//Wzff/1s33/9bN9//Wzff/1s33/9bN9//Wzff/1s33/9bN9//Wz - ff/1s33/9bN9//Wzff/1s33/9bN9//Wzff/1s33/9bN9//Wzff/1s33/9bN9//Wzff/1s33/9bN9//Wz - ff/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9LN+//Wzfv/1s37/9bN+//Sz - fv/0tH7/9LR+//izff/1rHb/659n//CfZ//zn2f/8p9n//GfZ//xoGb/8aFm//GgZv/wn2b/7Z9n/+ig - av/fmmX/nlMT/6xVCv+pVAz/nVIT/7yMYfwAAAAApVQN/qhVCP+qVQj/olMO/7BoMf/3tIX/+LKA//Sx - ev/0tX3/8bN7//Ozff/0s33/9LN9//Syff/0sn3/9LJ9//Wzfv/1s37/9rN+//SxfP/zsXv/9LF8//Sx - fP/0sn3/9LF8//SxfP/0sXz/9LJ9//Syff/xsX7/8rF+//KxfP/ysnz/8rJ8//Syff/0snz/9LJ8//Sy - fP/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Sy - ff/0sn3/9LJ9//Syff/0sn3/9LJ9//exf//3sX//97F///exf//3sX//97F///exf//3sX//97F///iy - fv/4s33/+LN9//izff/4s33/+LN9//izff/4s33/+LN9//izff/4s33/+LN9//izff/4s33/+LN9//iz - ff/4s33/+LN9//izff/3s33/97N9//ezff/3s33/97N9//ezff/3s33/97N9//ezff/3s33/97N9//ez - ff/3s33/97N9//ezff/3sn3/97J9//eyff/3sn3/97J9//eyff/3sn3/97J9//eyff/3sn3/+LN9//iz - ff/4s33/+LN9//ezfP/0s3v/9LN7//Sze//0s3v/9LN7//Sze//0s3v/9LN7//Sze//0tHz/9bR8//W0 - fP/1tHz/9bR8//W0fP/1tHz/9bR8//W0fP/1tHz/+LR8//i0fP/4tHz/+LR8//ezfP/3s3v/97N7//ez - e//3s3v/97N8//ezff/3s33/97J8//eyfP/3snz/97N9//ezff/3s33/97N9//eyff/3sn3/97J9//ey - ff/3sn3/+LN9//izff/4s33/+LN9//izff/4s33/+LN9//izff/4s33/97N9//ezff/3s33/97N9//ez - ff/3s33/97N9//ezff/3s33/97N9//ezff/3s33/97N9//ezff/3sn3/97F///exf//3sX//97F///ex - f//3sX//97F///exf//3sX//97F///exf//3sX//97F///exf//3sX//97F///exf//3sX//97F///Sx - ff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/3sX//97F///exf//3sX7/97J9//ey - ff/4s37/+LN9//i0ff/3s3z/9LN8//SzfP/2tH3/9bR9//Szff/0s33/9LN9//Kzff/0s33/8rF9//Sy - fv/ys33/8rN9//SzfP/3s3z/9a10/+qfZv/xoGf/8p5m//GdaP/0nmj/855m//GdZf/xoGX/76Bl/+qg - Zv/moGf/2JVe/59VFf+oUwf/p1IJ/59RGf/nyan8AAAAAKdYFf6oVQn/qlQG/6RSC/+qYCf/8Kt7//ey - f//1snv/87N7//O0ff/2tH3/9rR9//Wzfv/1s37/9LF8//SxfP/0sX7/9LF+//Sxfv/2sn//97J///ey - f//3sn//97J///exf//3sX//97J///eyf//2sn//9bN///azf//2s3//9rN///Wyfv/2sX7/97F+//ex - fv/3sX7/9rF+//Wzf//1s3//9bN///Wzf//0sn7/9LJ+//Syfv/0sn7/9LJ+//Syff/0sn3/9LJ9//Sy - ff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//SyfP/0snz/9LJ9//Wz - fv/0sX//9LGA//SxgP/0sYD/9LGA//SxgP/0sYD/9LGA//SxgP/0sYD/9LGA//SxgP/0sYD/9LGA//Sx - gP/0sYD/9LGA//SxgP/0sYD/9LGA//Wygf/1soH/9bKB//Wygf/1soH/9bKB//Wygf/1soH/9bKB//Wy - gP/1s4D/9bOA//WzgP/1s4D/9LJ///Syf//0sn//9LJ///Syf//1s4D/9bOA//WzgP/1s4D/9bOA//Wz - gP/1s4D/9bOA//WzgP/1s4D/9LOA//SzgP/0s4D/9LOA//WzgP/2s4D/9rOA//azgP/2s4D/9bOA//Sz - gP/0s4D/9LOA//SzgP/0s4D/9LOA//SzgP/0s4D/9bOA//WzgP/1s4D/9bOA//WzgP/1s4D/9bOA//Wz - gP/1s4D/9bOA//WzgP/2s4D/9rOA//WzgP/1s4D/9bOA//WzgP/1s4D/9bOA//WzgP/1soD/9bKB//Wy - gf/1soH/9bKB//Wygf/1soH/9bKB//Wygf/1soH/9bKB//Wygf/1soH/9bKB//Wygf/1soH/9bKB//Wy - gf/1soH/9bKB//Wygf/1soH/9bKB//Wygf/1soH/9bKB//Wygf/1soH/9bKA//Wzfv/1s37/9bN9//Wz - ff/1s33/9bN+//Wzfv/1s37/9bN9//Wzff/1s33/9bN+//Wzfv/1s37/9bN9//Wzff/1s33/9bN+//Wz - fv/1s33/9bN9//Wzff/1s33/9bN9//Wzff/1s33/9bN9//Wzff/1s37/97J///eyf//3sn//97J+//ez - ff/2sn3/9rJ9//ayff/2snz/97J8//eyff/3sn3/97J9//izfv/0sn//9LJ+//Syfv/0sn7/9LJ+//Wy - f//2s4D/9LOA//Szfv/3tH//9rF8//Srdf/rnmj/8J9o//GeZ//woGb/8p9m//GfZf/yn2X/8qBm//Gh - aP/rnWP/7KJo/8+HTf+gVBP/qVMI/6hSCv+eWSX/AAAAAAAAAACrXBz+qlUO/6xVB/+kUgj/oVgb/+el - cf/0sn//9rJ8//Oyev/1tH7/9rN8//i0ff/3s33/9LN8//WzfP/0s3z/9LN8//SzfP/0snz/9LJ9//Wy - ff/0sXz/9LF8//SxfP/0sXz/9LF8//SyfP/1sn3/9LJ9//Syff/0s33/9LJ9//Syff/0sn3/9LJ8//Sy - fP/1sn3/97J9//azfP/0s3z/9LN8//SzfP/0s3z/9LJ8//SyfP/0snz/9LJ8//SyfP/zs3v/87N7//Kz - ev/ys3r/8rN6//Oze//zs3v/87N7//Kzev/0s3r/9LR6//S0ev/0tHr/9LR6//Ozef/ys3n/87N5//Sz - ev/0tHr/9LJ7//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Sy - ff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Sy - ff/0sn3/9LN+//Szfv/0s37/9LN+//Szff/0s33/9LN9//Szff/0s33/9LN9//Szff/0s33/9LN9//Sz - ff/0s33/9LN9//Szff/0s33/87J8//CyfP/wsnz/8bJ8//GyfP/ysnz/8rN9//Kzff/ys33/87N9//Oz - ff/zs33/8rN9//Kzff/zs33/87N9//Ozff/ys33/8rN9//Szff/0s33/9LN9//Szff/0s33/87J8//Ky - fP/ysnz/8rJ8//KyfP/ysnz/9LN9//KyfP/ysnz/8rJ8//Oyff/0s37/9LN+//Szfv/0s37/9LN9//Sz - ff/0s33/9LN9//Szff/0s37/9LN+//Szfv/0s37/9LN+//Szfv/0s37/9LN+//Szfv/0sn3/9LJ9//Sy - ff/0sn3/9LJ9//Syff/0s37/9LN+//Szfv/0s37/9LN+//Szfv/0s37/9LN+//Szff/0tHv/9LR7//S0 - e//0tHv/9LR7//S0e//0tHv/9LR7//S0e//0tHr/9LR6//S0ev/0tHr/9LR6//S0ev/0tHr/9LR6//S0 - ev/0tHr/9LR6//Szev/0tHr/9LN6//Sze//0s3v/9LN7//Szev/0s3r/9LN8//SzfP/0s3z/9LN8//Sz - fP/0s3r/9bR8//a0ff/1tHv/9LR7//W0e//4tH3/97R+//e0fv/3tH7/9rN+//azfv/2s37/9bR+//W0 - fv/0s33/9LN9//Szff/0s33/9LN9//m1fv/0rHb/6p9p/+6fav/woGj/76Nj//ChYv/woWP/8J9l//Ce - Zv/yn2j/7pxk//ChaP++cTf/n1IN/6hUBf+pUg//oWw8/wAAAAAAAAAAtWgv/qVTEP+tVAj/qVQK/5tS - EP/npW//87F8//WzfP/1snz/97N+//izff/1sn3/9LN8//SzfP/0tHr/8rV5//C1ef/xtnj/8bZ3//C1 - d//wtXb/8LZ2//G3d//yt3f/8rd3//K3d//xt3f/8bd3//G3d//yuHf/8rh3//K4d//yuHf/8rh3//O4 - eP/zuXn/87l5//O5ef/zuXn/87p5//O6ef/zunn/87p5//O6ef/zunn/87p5//O6ef/zunn/8rt6//K7 - ev/yu3n/8rt5//K7ef/yu3r/8rt6//K7ev/yu3n/8rt5//O8eP/zvHj/87x4//O8eP/zvHj/87x4//O8 - eP/0vXn/9L15//S9ef/0vHn/9Lx5//S8ef/0vHn/9L15//S9ef/0vXn/9L15//S9ef/0vXn/9L15//S9 - ef/0vXn/9L15//S9ef/0vXn/9L15//S9ef/0vXn/9Lx5//S8ef/0vHn/9Lx5//S8ef/0vHn/9Lx5//S8 - ef/0vHn/9L15//W+ev/1vnr/9b56//W+ev/1v3r/9b96//W/ev/1v3r/9b96//W/ev/1v3r/9b96//W/ - ev/1v3r/9sB7//bAe//2wHv/9sB7//bAe//2wHv/9sB7//bAe//2wHv/9sB7//bAe//2wHv/9sB7//bA - e//2wHv/9sB7//bAe//2wHv/9sB7//bAe//2wHv/9sB7//bAe//2wHv/9sB7//bAe//2wHv/9sB7//bA - e//2wHv/9sB7//bAe//2wHv/9sB7//a/e//1v3r/9b96//W/ev/1vnr/9b56//W+ev/1vnr/9b56//W+ - ev/1vnr/9b56//W+ev/1vnr/9b16//W9ev/1vXr/9b16//W9ev/1vXr/9b16//W9ev/1vXr/9L16//S8 - ef/0vHn/9Lx5//S8ef/0vHn/9Lx5//S8ef/0vHn/9Lx5//S8ef/0vHn/9Lx5//S8ef/0vHn/9L14//S9 - ef/0vXj/9L14//S9eP/0vXn/9L15//S9ef/0vXj/87x4//O8eP/zvHj/87x4//O8eP/zvHj/87x4//O8 - eP/zvHj/87x5//O8ef/zu3n/87x5//O7ef/zu3r/87t6//O7ev/zu3n/87t5//O7e//0unr/9Lp6//S6 - ef/0unn/9Lp5//O6eP/yuXn/8rl3//K5d//zuXf/9Ll5//O5ef/zuXn/87h4//O4eP/zuHf/87h3//K4 - d//yuXf/8Lh3//C4eP/wt3f/8Ld3//K3d//xtXX/7K1v/+SjZf/noGT/56Jk/+elXv/ppV//66Rj/+6g - Zv/unWb/75xn//KeZ//xn2X/tmUo/6NUDf+nVAb/ok0R/6t/VMsAAAAAAAAAALx4R/6cURL/qlIH/61W - Cf+cUAz/6adv//CyfP/0s3z/9rJ8//eyfv/0sn3/9LF8//SzfP/4uX//+b+C//nCgP/5xID/+cd+//nI - fv/7yn///MuA//3Mgf/+zYD//s6B//7Ogf/+zoH//c6B//3Pgf/9z4D//s+B//7Qgf/+0IH//tCB//3P - gP/9zoD//c6A//3OgP/9z4H//c+B//7Pgf/+z4H//s+B//3Pgf/9z4H//s+B//7Qgf/+0IH//tCB//3Q - gv/90IL//dCC//3Qgv/90IL//dCC//3Qgv/90IL//dCC//3Qgv/90IL//dCC//3Qgv/90IL//dCC//3R - g//90YP//dGD//3ShP/90oH//dJ///3Sf//90n///dJ///3Sf//90n///dJ///3Sf//90n///dJ///3S - f//90n///dJ///3Sf//904D//dOA//3TgP/904D//dOA//3Tf//903///dN///3Tf//903///dOA//3T - gP/904D//dOA//3UgP/91YD//dWA//3VgP/91YD//dSA//3UgP/91ID//dSA//3UgP/91ID//dSA//3U - gP/91ID//dSA//3UgP/91ID//dSA//3UgP/91ID//dSA//3UgP/91ID//dSA//3UgP/91YD//dWA//3V - gP/91YD//dSA//3UgP/91ID//dSA//3UgP/91ID//dSA//3UgP/91ID//dSA//3UgP/91ID//dSA//3U - gP/91ID//dSA//3UgP/91ID//dSA//3UgP/91ID//dSA//3UgP/903///dR///3VgP/91YD//dWA//3V - gP/91ID//dOA//3TgP/904D//dOA//3TgP/904D//dOA//3TgP/904D//dOA//3TgP/904D//dOA//3T - gP/904D//dOA//3TgP/904D//dKA//3Sf//90n///dJ///3Sf//90n///dJ///3Sf//90n///dKA//3R - gv/90YP//dGD//3Rg//90YP//dGD//3Rg//90YP//dGD//3Rg//90YP//dGD//3Rg//90YP//dCC//3Q - gv/90IL//dCC//3Qgv/90IL//tCC//7Qgv/90IL//dCC//3Qgv/90IL//tCC//7Qgv/+0IL//s+B//7P - gf/+z4H//c6B//3Ogf/+z4L//c6B//3Ogf/9zoD//s6A//7Pgv/9zoH//c6A//3OgP/9zoD//c6A//3P - gP/9z3///c9///zPf//8z4D/+85///vOf//9zX///syB//rIff/4wnj/+L93//jAd//3v3L/97xz//i4 - dv/1rnP/8KJr/+2cZ//yn2f/755j/6xcHf+jVQz/pVMI/5xOGf/Fon+lAAAAAAAAAACxelDGk1AX/6dS - Cf+sVAX/olMP/+CeZP/vsXv/87N9//Wwff/0sn//9LF///Szfv/wsnv/87l8//rCgf/+yoT//tCF//7S - g//+04L//tOB//3UgP/803///NN///nSff/41Hz/+NR8//jUfP/41Hz/+NR7//jVe//41Xv/+NV7//nW - fP/51nz/+tZ7//nWfP/51nz/+NV7//jVe//61n3/+tZ9//vWff/81n3//NZ9//vWff/61n3/+tV8//rV - fP/61n3/+tZ9//rWff/61n3/+tZ9//nVfP/51Xz/+dV8//rWff/61n3/+NR9//jUff/41H3/+NR9//jU - ff/41H3/+NR9//jUff/41H3/+NV8//jWev/41nr/+NZ6//jWe//41nv/+NZ7//jWev/41nr/+NZ7//jV - e//41Xv/+NV6//jVev/41Xr/+dZ8//nWfP/51nz/+dZ7//nWe//51nv/+NV7//jVe//41Xv/+NZ7//nW - e//51nv/+dZ8//nWfP/513z/+dd7//nXe//513v/+dd8//nXfP/513z/+dd7//nXe//513v/+dd8//nX - fP/513z/+dd7//nXe//513v/+dd8//nXfP/513z/+dd7//nXe//513v/+dd8//nXfP/51nv/+dd7//nX - e//513v/+dd8//nXfP/513z/+dd7//nXe//513z/+dd8//nXfP/513v/+dd7//nXe//513z/+dd8//nX - fP/513v/+dd7//nXe//513z/+dd8//nXfP/513v/+dd7//nXe//513z/+dd8//nXfP/513v/+dd7//nX - e//513z/+dd8//nWfP/51nv/+dZ7//nWe//51nz/+dZ8//nWfP/51nv/+dZ7//nWe//51nz/+dZ8//nW - fP/51nv/+dZ7//nWe//51nz/+dZ8//nWfP/51nv/+dZ7//nWe//51nz/+dZ8//nWe//51nv/+dZ7//nW - ff/51X7/+dV+//nVfv/51X7/+dV+//nVfv/51X7/+dV+//nVfv/51X7/+dV+//nVfv/51X7/+dV+//nV - fv/51X7/+dV+//nVfv/61X7/+tV+//vWff/61n3/+9Z9//vVfP/71Xz/+tV8//rWff/61n3//dZ9//7X - fv/+1n7//td///3Xf//913///td+//3Wf//91n///dZ///vVfv/41Xz/+dZ9//rWff/8137//Nd+//zX - fv/8137//Nd+//rWff/71n///NZ///vVfv/61X7//NN///rRfP/+0X///tKB//7Ugv/+04L//tOE//7J - gf/9vXv/8axw/+edZf/tn2f/8J9m//inZ/+lVRL/o1QL/6RWEP+ZWC7//9u2DgAAAAAAAAAAvJJymIZP - IP+kUw7/rVMG/6JRC//PjFH/8rV+//Gzff/2s3//8rB9//Sxf//ys37/8rR9//G0ef/utXb/77p1//G/ - dv/1xXj/+Ml7//nLfP/6zn3/+9F///3SgP/90oD/+tR///rUf//51H7/+NV+//jVfP/51Xz/+NV7//jV - e//41nz/+NV6//jWef/413r/+Nh6//jYev/413r/+Nd6//jXev/413r/+Nd6//jWef/31nn/+dh7//nY - e//52Hv/+Nd5//jXef/413n/+Nd5//jXef/413n/+Nd5//jXev/52Hr/+dh7//fWev/31nr/99Z6//fW - ev/31nr/99Z6//fWev/31nr/99Z6//fWfP/31nz/99Z8//fWfP/31nz/99Z8//fWfP/31nz/99Z8//fW - fP/31nz/99Z8//fWfP/31nz/99Z8//jXff/4133/+Nd9//jXff/4133/+Nd9//fXff/31nz/99Z8//fW - fP/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jX - ff/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jX - ff/31n3/99Z9//jXfv/4137/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jX - ff/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jX - ff/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jX - ff/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jXff/4133/+Nd9//jX - ff/4133/+Nd8//jXe//413v/+Nd7//jXe//313v/99d7//fXe//313v/99d7//jXe//413v/+Nd7//jX - e//413v/+Nd7//jXe//413v/+Nd7//jYe//52Hr/+dh6//jXef/413n/+Nd5//jXef/413n/+Nd5//nY - e//62Hv/+td8//nWe//51nv/+dZ7//nWe//51nz/+tZ9//nWff/51nz/+Nd7//jWe//41nv/+NZ7//jV - e//41Xv/+dV+//nVfv/61n//+dV+//nUfv/71H///dR///7Tf//+0n///c99//nIdv/3w3L/9Lxt/+6y - av/qq2b/5aJj/+afZP/soWf/7qBm/++hZP/MfDz/o1QP/6NTDP+ZUhP/u5Fv/wAAAAAAAAAAAAAAAOTI - rYORZTv+nlIR/61SBv+mUwv/rmgs//i+hv/vsnz/87J+//Kwff/0sn3/9LJ9//azfv/1tH7/8rV7//G2 - ev/vtnf/7rV2/+63dv/vuXb/8bp2//O8eP/1v3r/9sJ6//rIgP/6yX//+suA//vNgf/7zoH//M6A//zP - gP/90IH//tGB//7Sgf/+04H//dOA//vTfv/603z/+tR8//rWff/61n3/+dV8//nVfP/51Xz/+NV8//nW - ff/51n3/+dV8//nWe//51nv/+dZ6//nWev/51nr/+dV7//nVe//51nv/+tZ7//nWe//513v/+dd7//nX - e//513v/+dd7//nXe//513v/+dd7//nXe//51n3/+dZ///nWf//51n//+dZ///nWf//51n//+dZ///nW - f//51n//+dZ///nWf//51n//+dZ///nWf//51n//+dZ///nWf//51n//+dZ///nWf//51n//+NV+//jV - fv/41X7/+dZ///nWf//51n//+dZ///nWff/5133/+dd9//nXff/5133/+dd9//nXff/5133/+dd9//nX - ff/5133/+dd9//nXff/5133/+dd9//nXff/5133/+dd9//nXff/51n3/+dZ///nWf//51n//+dZ///nW - f//51n//+NV+//jVfv/51n//+dZ///nWf//51n//+dZ///nWf//51n//+dZ///nWf//51n//+dZ///nW - f//51n//+dZ///nWf//51n//+dZ///nWf//51n//+dZ///nWfv/5133/+dd9//nXff/5133/+dd9//nX - ff/5133/+dd9//nXff/51n7/+dZ///nWf//51n//+dZ///nWf//51n//+dZ///nWf//51n//+dZ///nW - f//51n//+dZ///nWf//51n//+dZ///nWf//51n//+dZ///nWf//51n//+dZ///nWf//51n//+dZ///nW - f//51n//+dZ+//nXfP/513v/+dd7//nXe//513v/+Nd6//jXev/413r/+Nd6//jXev/513v/+dd7//nX - e//513v/+dd7//nXe//513v/+dd7//nXe//513v/+tZ7//rXe//51nr/+dZ7//nWfP/61nz/+tZ7//rW - e//61n3//NZ9//zVff/81X7//dV+//zUff/81X7//NR///3UgP/803//+tJ+//vSf//804D//tOC//7T - gv/90YL//dGC//zQg//8zoH/+s2A//rLgP/5yX7/+Md8//jEev/5wnj/87px/+eqZP/oqGP/5qRf/+ej - X//po2L/7KFk/+yhZv/rn2X/7p5l//CgZf/tnV//p1YT/6RTDv+kUw//kFEb/6uOZ08AAAAAAAAAAAAA - AAAAAAAA1LCM/JtTFP+tUgj/rFYR/5lRFv/anmb/8LN9//Kyfv/2tH//97N9//ayfP/2sn3/9rJ9//Gv - fP/ysHz/9LKA//Szgf/0s4H/9LN///ezff/2snz/87J8//Oyev/xsnf/8bJ3//K0ef/0t3v/9Ll7//G4 - ef/zuXr/9Lt7//W+fP/2v3v/9sJ8//jFfv/8yID//cqA//3NgP/50H//+tF///zRgP/80oD//NGA//vR - gP/80oH//NOB//zTgP/8037//NR+//vUfv/71H7/+9R+//zUfv/81H7//NR+//zVf//81X//+tZ8//vW - fP/71nz/+tZ8//nWfP/51nz/+tZ8//vWfP/71nz/+tZ7//nWe//51nv/+tZ7//vWe//71nv/+tZ7//nW - e//51nv/+tZ7//vWe//71nv/+tZ7//nWe//51nv/+tZ7//vWe//71nv/+tZ7//nWe//51nv/+tZ7//vW - e//61Xr/+dZ6//nWe//51nv/+tZ7//vWe//713v/+td7//nXe//513v/+td7//vXe//613v/+dd7//nX - e//613v/+9d7//vXe//613v/+dd7//nXe//613v/+9d7//vXe//613v/+dZ7//nWff/61n3/+9Z9//vW - ff/61n3/+dZ9//nWff/61n3/+9Z9//vWff/61n3/+dZ9//nWff/61n3/+9Z9//vWff/61n3/+dZ9//nW - ff/61n3/+9Z9//vWff/61n3/+dZ9//nWff/61n3/+9Z9//vWff/61nv/+dd7//nXe//613v/+9d7//vX - e//613v/+dd7//nXe//713v/+9Z7//rWe//51nv/+dZ7//rWe//71nv/+9Z7//rWe//51nv/+dZ7//rW - e//71nv/+9Z7//rWe//51nv/+dZ7//rWe//71nv/+9Z7//rWe//51nv/+dZ7//rWe//71nv/+9Z7//rW - e//51nv/+dZ7//rWe//713z/+9Z8//rWfP/51nz/+dZ8//rWfP/71nz/+9Z8//rWfP/51nz/+dZ8//rW - fP/71nz/+9Z8//rWfP/51nz/+dZ8//rWfP/81n3//NV+//zVf//81X///NV///zUfv/81H7//NR+//vU - fv/71H7//dJ+//3Tgf/904H//dGB//3Rgv/90YH//tGC//3Pgv/9z4L/+86B//zMgf/7yID/+MV+//bC - e//1wHv/9b16//O7ev/yuXr/8Ld5/+62eP/vtHj/8bR5//O0ef/2tHr/+bR6//Kpb//rn2X/76Fn//Cg - Zv/zoWj/8J1l//CdZf/wnWX/8Z9m//GfZf/zoGL/14VD/6VRDv+nVQ3/o1IQ/611Qvjfv58IAAAAAAAA - AAAAAAAAAAAAAAAAAACnazn/olIN/6dUC/+dUg3/rWkt//W2g//usoL/7rGB//mzfv/2sn7/9LF+//Sz - gP/zsoD/9LKB//SwgP/4sID/+bGB//exgP/3sn//9rJ///ayf//2sn7/9rN+//Wzfv/0s33/9LN9//Sz - fP/zs3v/87N7//S0e//0tXr/87R5//O0ef/ztXj/87V3//O2d//ytnb/8bl2//K5d//zunj/9Lp4//S7 - ev/1vXr/9r97//i/ff/4v33/+cN8//nEff/6xH3/+sR9//rFfv/7xoD/+8eA//zIgf/+yYL//cmC//rM - gP/6zYD/+86B//zPgf/+0IL//tCC//7Rgf/+0YL//tKC//3SgP/903///dN///3Tf//91ID//dN///3T - f//903///dSA//3Uf//91X///dV///3Vf//91X///dV///3Vf//91X///NR+//zUfv/81H7//NR9//zU - ff/81H3//NR9//zUfP/81X3//dV9//3Vfv/91X7/+9V+//vVff/71X3/+9V9//vVfv/61X3/+tV9//rV - ff/61X3/+tV9//rVff/61X3/+tV9//rVff/61X3/+tV9//rVff/71X3/+9V9//vVff/71n3/+9Z9//vW - ff/71n3/+tZ9//vWff/71n3/+9Z9//rWff/61X3/+tV9//rVff/61X3/+tV9//vWff/71n3/+9Z9//vW - ff/71n3/+9Z9//rVff/61X3/+tV9//rVff/71n3/+9Z9//vWff/71n3/+9V9//vVff/71X3/+9V9//vV - ff/61X3/+tV9//rVff/61X3/+tV9//rVff/71X7/+9V9//vVff/71X3/+9V+//vVfv/61X3/+tR9//rU - fP/91X3//dV+//3Vfv/91X7//dV9//3Vff/81X3//NR9//zUff/81H3//dV9//3Vff/91X3//dV+//3V - fv/91X3//dV9//3Vff/91X///dSC//3Tgv/90oL//dKC//3Sgv/90oH//dKB//3Sgf/90oH//tGC//7R - g//+0IP//c+C//zPgv/7zoH/+82B//vNgf/6zH//+st///rIf//7x4D/+8d///rGfv/6xX7/+sR+//rE - ff/4w3z/+MJ7//fBe//1v3r/9b57//S8ev/0u3n/9Lt5//O5d//yuHf/8bd2//G3dv/xtXf/8rV6//O0 - ev/ztHr/8rR6//Ozev/0s3v/9bR9//Szff/zsnz/8rJ9//Kyff/1snz/9rF7//atdf/rn2f/8Z9m//Kf - Zv/1nmb/9Z5m//OhZv/un2b/7J1j//OfZf/2nmL/9Z1f/7hjIf+kUA3/qVIP/59aJv/vwZxvAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAuIZgpZZTGv+fUAf/qFQK/6RTEf+5czz/87mJ/+qwgP/ysX7/9bN///Oz - f//ysn//9LJ///Syf//3sn3/+rN///uzgP/3s37/9bN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9LN9//azff/2s33/9bN9//Szff/0snz/9bJ8//WyfP/1snz/9bN8//Szff/0s33/9bN9//az - ff/2s33/9bN9//Szff/0s33/9bN9//Szef/0tHr/9LR6//W1ev/2tXv/9LN4//SzeP/0tHn/9LR5//S0 - ev/utXb/7rZ2/++3dv/wuHf/8Ll3//C5eP/xunb/8rt3//K7d//zvnj/88B5//PAef/zwHr/88B6//bC - fP/2w33/9sN9//bEff/3xH3/98d9//fHff/2x3z/9sd8//bHfP/5yX//+sqA//rKgP/5yn//+ct///vM - f//7zH//+8x///vMf//7zH//+8yA//vMgP/7zID/+8yA//vNgf/8zoH//M6B//zOgf/8zoH//M6B//zO - gf/8zoH//M+C//zPgv/90IH//dCB//3Qgf/90IH//dCB//3PgP/9z4H//c+B//3Qgv/90IH//NCA//zQ - gP/80ID//NCA//zQgP/80ID//NCA//zQgP/80ID//NCA//zQgP/80ID//NCA//zQgP/80ID//NCA//zQ - gP/80ID//dCA//3Rgf/90YH//dGB//3RgP/90YD//dCA//3QgP/90ID//dCA//3PgP/7z4D/+8+A//zP - gf/8z4H/+9CB//vQgP/70ID/+9CA//zQgv/8z4L//M+C//zPgv/8z4L//M+C//zOgf/8zoH/+82A//rM - gP/6zH//+82A//vNgP/7zYD/+82A//vNgP/7zYD/+8x///vMf//6zH//+st///nLf//5y3//+Mp+//nJ - fv/4yX3/9sh8//XHe//0xnr/9sZ6//bCe//2wXv/9sF7//XAev/1wHr/8755//O+eP/zvXj/8bx3//K7 - d//yuXn/8bl5//C4eP/wuHj/8Lh4//C4eP/vt3f/77d3/+62dv/0tnr/9rV6//a2ev/0tXr/9LR6//S0 - ev/0tHr/9LN5//Szef/0s3n/9LR7//S0fP/0tHz/9LR7//S0e//3s3v/97N8//ezfP/3s3z/+LJ9//Wy - f//1s33/+LJ+//izff/4tH7/9rJ9//Swe//1sn3/9bN+//Kyf//ysX//8a55//mzff/to2v/7Z9m//Gg - Zv/woGb/8KBm//CgZP/voGH/6p5h//Ciaf/wn2b/9J1h/8x0NP+sVhL/olAO/6RTFP+se1HrAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAPPOqhWvfVX/oFAX/7BTDP+qUgn/nFEJ/718Pv/6won/7rJ8//O0 - fv/6toH/9697//yyf//5sXz/+LN8//Oye//xsnz/9LN+//Wzfv/1s37/9bN+//Wzfv/1s37/9bN+//Wz - fv/1s37/9bN+//Szf//0s3//9LN///Szf//0sn//9LJ+//Syfv/0sn7/9LJ+//Syfv/0s3//9LN///Sz - f//0s3//9LN///Szf//0s3//9LN///Szf//0s3z/9LN8//SzfP/0s3z/9LR8//S0fP/0tHz/9LR8//Sz - e//0s3v/9LR8//a0fP/2tHz/9bN5//S0ef/0tHr/9bR6//a0ev/1tHj/87V4//O1eP/ztXj/87V4//O1 - eP/ztHf/87V4//O1eP/ztXj/87V4//O1d//ztnf/87Z3//O2d//ztnf/8bV2//K1d//ztnf/87Z4//O3 - eP/0t3b/9Ld3//S3d//0t3f/87Z2//K2df/ytnX/8rZ2//S3d//0t3j/8rh3//K4d//yuHf/87h4//O3 - d//zt3f/8rd2//K4d//yuHf/9Ll3//S5d//0uXf/9Ll3//S5d//0uXf/9Ll4//a6eP/1unj/9bt4//S7 - eP/0u3j/9Lt4//S7eP/0u3j/9Lt4//S7eP/0u3j/9Lt4//W7eP/1vHn/9bx5//W8ef/1vHn/9Lt4//S7 - eP/0u3j/9Lt4//W7eP/1u3j/9rt4//a7eP/1unf/9bt3//W7eP/2u3j/9rt4//a7eP/0unf/9Lp3//S6 - d//0unf/9Lp3//K5d//yuXb/8rl2//K5dv/yuXf/8rh2//O3d//yt3b/8rd2//K3dv/zuHj/87d3//O3 - d//yt3b/9Ld2//S3dv/0t3f/9Ld3//S3d//0t3b/9Ld2//S3dv/zt3f/8rZ2//O2d//ytXf/8rV3//G0 - d//xtHf/8bR3//G0d//ztXj/87V4//O1eP/ztXj/9bR4//S0eP/ztHj/87R4//W1ef/2tXn/9rV5//a1 - ev/2tHr/9LR8//W0fP/2tHz/9rR8//Sze//0s3v/9LR8//W0fP/2tHz/9LR8//SzfP/0tHz/9LR9//S0 - ff/0s33/9LN8//S0fP/0tH3/9LR+//S0ff/0s37/9LN+//Szff/0s33/9LN9//Szfv/0s37/9LN+//Wz - ff/1s33/9rN9//Wzff/1s33/9LR9//Szff/ys33/8LJ8//Kyf//usoD/77B///y6h//zqnb/7Zxm//Gf - aP/xn2j/8J9n/+ygaP/soGf/9KJk//agaP/umWb/7J1m/9yOUP+pVxD/plMK/51VE/+KVBz/786joQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA27SWTp1nPP+gURT/q1QK/6dVBf+kVgn/rmkm/9ub - Yv/3t3//9rF6//uzfv/5sHz/+bN+//W0fv/xs37/7rSA//OzgP/1s4D/9bOA//WzgP/1s4D/9bOA//Wz - gP/1s4D/9bOA//WzgP/zs3//8rN///Kzf//ys37/8rN+//Kzfv/ys3//8rN///Kzf//zs37/9LN+//Sz - fv/0s3//9LN///Szf//0s37/9LN+//Szfv/0s4D/87N///Ozf//zsn7/87J+//Oyfv/ysn7/8rJ+//Ky - fv/ysn7/8rJ///exgP/3sYD/97GA//exfv/3sn7/+LN///eyf//4sn//+LJ///exfv/0sX7/9LF+//Wx - fv/0sH3/9bF9//Wxfv/0sX7/9LF+//Wxff/1snz/9bJ8//WyfP/1snz/9bJ8//ezff/2snz/9bJ8//Wy - fP/1snz/9LJ7//Sye//0snv/9LJ7//Sye//0s3z/9LN8//WzfP/1s3z/9LN8//SzfP/0s3z/9LN8//Sz - fP/zsnv/87J7//SzfP/0s3z/9LN8//Sze//0tHv/9LR7//S0e//0tHv/87N6//S0e//0tHv/9LR7//Oz - ev/zs3r/87J6//Oyev/zsnr/87J6//Oyev/zsnr/87J6//Oyev/zs3r/9LN7//Sze//0s3v/9LN7//Oy - ev/zsnr/87J6//Oyev/zsnr/9LR7//S0e//0s3v/9LN7//Syev/zsnr/87J6//Oyev/zsnr/87N6//W0 - e//1tHv/9bR7//W0e//0tHv/9LR7//S0e//0tHv/9LR7//S0e//1s3z/9bN8//WzfP/1s3z/9LN8//Sz - fP/0s3z/9LN8//SzfP/0snz/9bJ8//WyfP/1snz/9LJ8//SyfP/0snz/9LJ7//Sye//1sX3/9bF///ax - f//3sn//97KA//eyf//2sX//9bF///Wxf//1sX7/+LJ///iyf//4sn//+LJ///iyf//3sn7/97F+//ex - fv/2sX7/9rF+//exgP/3sYD/+LGA//iygP/4sYD/97GA//exgP/3sYD/97F///Sxf//zsn7/87J+//Oy - f//0s3//87J///Oyfv/zsn7/87J+//Oyf//zs4D/87KA//OygP/zsoD/8rKA//KygP/ys4D/8rOA//Kz - gP/ys3//9LR7//Szff/zs37/8LOA/+2yf//rsYD/67KA/+yygv/psYH/77eF//nGkv/vsXv/6J9o//Ge - Z//3nmb/+J5m//eeZv/1n2b/9J9m//KgZv/0nmf/8Jxm/9OCRP+oVw3/qlcG/59TCf+MUxv/uJNonwAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADq1brIlGU4/51SFv+qUgn/rFUG/6dW - DP+eTxT/tGou/+WdYf/zr3X/9LJ6//i4gf/ysn//8bF///KygP/0sn7/+LN9//izff/4s33/+LN9//iz - ff/4s33/+LN9//izff/1s33/9LN8//SzfP/0s3z/9LN8//SzfP/0s3z/9LN8//SzfP/0s3z/9bN8//Wz - fP/1s3z/9rN8//ezfP/3s3z/9rN8//WzfP/1s3z/9rN9//Wyff/1sn3/9bJ9//Wyff/1sn3/9LJ8//Sy - fP/0snz/9LJ8//SyfP/0sX7/9LB9//Swff/0sXz/9LF8//SxfP/0sXz/9rJ9//ayff/0sn7/9LN///Sy - fv/0sn7/9LJ+//Wyf//1s4D/9LOA//SzgP/2s4D/9bJ///Wyf//1sn//9bJ///Wyf//0sX7/9bJ///Wy - f//1s3//9LJ///Syf//0sn//9LJ///Syf//0sn7/9LJ+//Syfv/0sn7/9LJ+//Kxfv/ysX7/8rF+//Kx - fv/ysX7/9LJ+//Syfv/0sn7/9LJ+//Syff/0s33/9LN9//Szff/0s33/9LN9//Szff/0s33/9LN9//S0 - ff/0s33/9LN9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ+//Syfv/0sn3/9LJ9//Sy - fv/0sn3/9LJ9//Syff/0sn3/9LJ9//Syfv/0sn7/9LJ9//Syff/0sn3/9LJ9//Syff/0sn3/9LJ9//Sz - ff/0s33/9LN9//Szff/0s33/9LN9//Szff/0s33/9LN9//Szff/0sn3/9LJ+//Syfv/0sn7/9LJ+//Kx - ff/ysX3/8rF+//Kxfv/ysX7/9LJ///Syf//0sn//9LJ///Syf//0s3//9LJ///Syf//0sn//9LF///Wy - gP/1soD/9bKA//eygf/2soD/9bKA//WygP/1soD/9LF///Syfv/0sn7/9LJ+//Syfv/0sn7/9bJ///Sy - f//0sn//9LJ+//Sxff/0sX3/9LB9//Swff/0sH3/9bF9//Sxfv/0sX7/9bF+//Swff/0sX7/9bJ9//Wy - ff/1sn3/9bJ9//Wyff/1sn3/9bJ9//Wyff/1sn3/9bN9//Wzfv/1s37/9bN9//Szff/0s33/9LN+//Sz - fv/0s37/9LR8//S0ev/ztHv/8bN9/++zfv/ss4H/7bWD/+y1hf/vvYz/+saY//jNoP/op3r/4p9v/+Wd - av/qnWj/8J9n//CfZv/xoGX/8qFk//KhZP/unWH/35FT/75vLP+qVQr/s1cF/6dSA/+YWRn/rINcxQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMOhfyajcEr/mVEc/6JU - D/+kUwr/qFEL/6VSDf+jVA//p10Z/7RuK//BfD3/1pFW//Src//8toH//LR8//ixeP/3sXj/+LF4//iz - ev/6s3v/+rN7//izev/4snn/+LJ4//iydv/5snb/+bJ2//mydv/4sXX/+LF1//ixdf/4sXX/+LF1//ix - df/5sXX/+bF1//mxdf/5sXX/+bF1//mxdf/5sXX/+bF1//mxdf/5sHb/+bB2//mwdv/5sHb/+bB2//mw - dv/5sHb/+bB2//mwdv/4sHb/9rF2//Wxdv/1snb/9bJ2//Wydv/1snb/9bJ2//Wydv/1snb/9bF2//Wx - d//0sXf/9LF3//Sxd//0sXf/9LF3//Sxd//0sXf/9LF3//eyd//3snf/97J3//eyd//3snf/97F2//ex - d//3sXf/+LF3//exd//0sXf/9LF3//Sxd//0sXf/9LF3//Wxd//1sXf/9bF3//ayeP/1sHj/9bB4//Ww - eP/2sXj/9rF4//Swd//0sHf/9LB3//WweP/1sHj/9bF3//Wxd//2snf/9rJ3//ayd//2snf/9rJ3//ay - d//2snf/9bJ3//Wyef/1snn/9bJ5//Wyef/0sXj/9LF4//SxeP/0sXj/9LF4//SxeP/0sXj/9LF4//Sx - eP/0sXj/9LF4//SxeP/0sXj/9LF4//SxeP/3sXn/9rF4//axeP/2sXj/9rF4//axeP/2sXj/9rF4//ax - eP/1sXf/9LJ3//Syd//0snf/9LF2//Sxdv/0sXf/9LF3//Sxd//0sXf/9LB3//WweP/2sXj/9rF4//ax - eP/1sHf/9LB3//WweP/1sHj/9bB4//ayd//1sXf/9LF3//Sxd//0sXf/9bF3//Sxd//0sXf/9LF3//Wx - d//3snf/97F3//exd//3sXf/97F3//exd//3sXf/97F3//ixd//0sXf/9LF3//Wxd//1sXf/9bF3//Sx - dv/0sXb/9LF3//Sxd//1sXf/9bF2//Wxdv/1sXb/9bF2//Wxdv/1sXb/9bF2//Wxdv/1sXf/+LB2//mw - dv/5sHb/+bB2//mwdv/4r3b/+K92//mwdv/5sHb/+rB2//uxd//7sXf//LJ4//yzef/9tHr/+rN5//q0 - ev/6tHr/+rR6//Szff/qtIT/6rSJ/+m1jf/vvZf/98ql//rTsP/8z67/576d/9eti//UoXz/1aB3/9eh - eP/cpHb/3qJv/+ejbf/qoGf/7p1i//GZYP/Vez7/u2Qg/6tYD/+qWAr/qlUH/6pVDP+UTxL/vZRs/wAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA47icJJ9u - RX2WYDD/lFAS/6VUC/+nVgz/p1QJ/6hVCv+mUwj/plQL/6RUDv+hUg3/olQS/6lfH/+tZCX/s2oq/7du - MP+5cDH/vHMz/7pxMv+4bzD/tWwt/7VrKv+2aSf/tGcl/7JmJP+wZCH/r2Mg/7BjIf+wYyH/sGMh/7Bj - If+wYyH/sWMh/7FjIf+xYyH/sWMh/7FjIf+xYyH/sWMh/7FjIf+xYyH/sWIh/7FiIf+xYiH/sWIh/7Fi - If+xYiH/sWIh/7FiIf+xYiH/sGIh/69jIP+vZCD/r2Qg/69kIP+vZCD/r2Qg/69jIf+vYyH/r2Mh/69j - If+vYyH/r2Mh/69jIf+vYyH/r2Mh/69jIf+vYyH/r2Mh/7BkIv+zZSP/s2Uj/7NlI/+zZSP/s2Uj/7Vn - Jv+1Zyb/tWcm/7ZoJ/+1aCf/tWgn/7VoJ/+2aSf/tmkn/7ZpJ/+2aSf/tmko/7dqKf+3ain/tmop/7Zq - Kv+3ayv/t2sr/7drK/+4ayz/uGss/7hrLP+4bCz/uGws/7hsLP+4bCz/uWwt/7ltLf+6bS3/uW0t/7lt - Lf+5bS3/uW0t/7ltLf+5bS7/uW0u/7ltLv+5bS7/uW0u/7puL/+6bi//um4v/7puL/+6bi//um4v/7pu - L/+6bi//um4v/7puL/+6bi//um4v/7puL/+6bi//um0u/7ptLv+6bS7/um0u/7ptLv+6bi//um0u/7pt - Lv+6bS7/uW0t/7ltLf+4bS3/uG0t/7htLf+4bCz/uGws/7hsLP+4bCz/uGws/7drK/+3ayv/t2sr/7dr - K/+3ayv/tmoq/7ZqKv+2aSr/tmkq/7VpKP+2aSj/tmkn/7ZpJ/+2aSf/tWgn/7VoJ/+1aCf/tWgn/7Vo - Jv+1ZyX/tWck/7RnI/+0ZiP/tGYj/7JlIf+yZSH/smUh/7JkIf+yZCH/sGMh/7BjIf+wYyH/sGMh/7Bj - If+wYyH/sGMh/7BjIf+wYyH/r2Mh/69jIP+vZCD/r2Qg/69kIP+vZCD/r2Qg/69kIP+vZCD/r2Mg/7Bi - If+xYiH/sWIh/7FiIf+xYiH/sGEg/7BiIf+yYyP/s2Uk/7VnJ/+3aCf/t2kp/7psLP+7bi3/vW8v/71w - L/++cS//vnIy/8B0M/++dTn/vX1G/8uLV//Tl2b/1KBx/9ajd//XpXr/1qN4/9aid//YoHb/2Z9z/9qf - cP/Ynmv/0pVd/8aHTP+8fDz/t28s/6hZFP+pUw//rlML/69TB/+vVAb/qlUI/51SEf+MUSH/soRgoAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAA786ugah6S9+cYST/klIQ/6BWFP+iUg//q1UO/6tUDP+oVAj/plUJ/6JTCf+hUwv/olMP/6FT - Dv+hUw7/olQQ/6FSDv+hUg7/oFIO/6BSDf+gUg3/pFIL/6VSC/+lUwz/plML/6ZTCv+mUwv/plMM/6ZT - DP+mUwz/plML/6ZTC/+mUwv/plMM/6ZTDP+mUwz/plML/6ZTC/+mUwv/plMN/6VTDf+lUw3/pFMN/6RT - Df+kUw3/pVMN/6VTDf+lUw3/pFMN/6ZTDf+nVAr/qFML/6hTC/+oUwv/qFML/6hTC/+oUwz/qFMN/6hT - Df+oUw3/qFML/6hTC/+oUwv/qFMM/6hTDP+oUwz/qVQL/6pUDf+qVQ7/rFUO/6xVDv+tVQ//rVYP/61W - D/+tVhD/rVYQ/65XEP+uVxD/rlgQ/65YEf+uWBL/rlgS/65YEv+uWRH/r1kR/69ZEv+wWhT/sFoV/7Bb - Fv+xWhf/sVoX/7FbF/+yWxf/slsX/7JbF/+yXBf/slwY/7NcGP+zXBj/s1wY/7NdGf+0XRj/tF4Y/7Rd - GP+0XRn/tF0Z/7RdGf+0Xhj/tF4Y/7ReGP+0Xhn/tF4Z/7VfGf+2Xxv/tl8b/7ZfG/+2Xxv/tl8b/7Zf - G/+2Xxv/tl8b/7ZfG/+2Xxv/tl8b/7ZfG/+2Xxv/tl8b/7VfGv+1Xxr/tV4a/7VeGv+1Xhr/tV4a/7Re - Gv+0XRn/tF0Z/7RdGP+0XRj/s10Y/7NdGP+zXRj/s1wY/7NcGP+zXBj/s1wY/7JcF/+yWxf/slsX/7Jb - F/+yWxf/sVoX/7FaF/+xWhf/sFoV/7BaFf+wWhX/r1kR/65YEv+uWBL/rlgS/65YEf+tVxD/rVcQ/61X - EP+tVxD/rVYP/61XDf+tVg3/rFYN/6xWDf+rVA3/q1QL/6tUCv+rVAr/q1QN/6lTC/+pUgz/qVIL/6lS - C/+pUgv/qlMM/6pTDP+qUwz/qlML/6hTC/+oUwv/qFML/6hTC/+oUwv/qFML/6hTC/+oUwv/qFML/6dT - C/+mUwz/pFMN/6RTDf+kUw3/pVMN/6dTDv+mVA3/pVMN/6NSC/+jUQv/plMO/6ZTDf+mVA3/plMN/6ZT - Dv+oVA//pVMO/6RTDf+jUgv/pVML/6ZVDP+iUgv/oFIO/59TEP+dUhL/mlIR/5tREf+eUxH/nlEO/6JQ - Dv+kUBD/pFQQ/6JVDv+gUwr/oVcK/6JWCv+kVgf/plQF/6lVCP+mVAv/pU8N/5xRF/+eZzzt4cOpxQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAADouaILvpRlK8CZcqiabEL/iFEf/5RUHf+ZUhP/nFIN/6BUDv+gUgr/plQL/6hU - C/+nUwv/plMJ/6NQB/+mUgn/plMJ/6dUC/+oVAv/qFUL/6dSCf+oUwn/qVQL/6lUC/+pVAr/qVQL/6lU - C/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lUC/+oVAv/qFQL/6hU - C/+oVAv/qFQL/6hUC/+oVAv/qFQL/6hUC/+oVAv/qVQI/6lUCP+pVAr/qVQL/6lUC/+pVAv/qVQL/6lT - C/+pUwv/qlML/6tTC/+rUwv/q1ML/6tTC/+rUwv/q1ML/6xUC/+sVAv/rVUL/61VC/+tVQv/rVUM/65W - Dv+uVg7/r1cO/69XDv+vVw//sFgQ/69YEP+uWBD/rlgQ/69ZEP+vWRD/r1kQ/69aEP+wWhL/sFoS/7Fb - Ev+xWxP/sVoU/7FaFP+xWhT/sVsU/7JcFf+yXBX/s1wW/7NcFv+zXBb/s10W/7NdFv+0Xhf/tF4X/7Re - GP+0Xhf/tF4X/7ReF/+0Xhf/tF4X/7VfGP+1Xxj/tV8Y/7VfGP+1Xxj/tl8Z/7ZfGf+2Xxn/tl8Z/7Zf - Gf+2Xxn/tl8Z/7ZfGf+2Xxn/tl8Z/7ZfGf+2Xxn/tl8Z/7ZfGf+2Xxn/tl8Z/7VfGf+1Xxj/tV4Y/7Ve - GP+0Xhf/tF4X/7RdFv+0Xhb/tF4X/7ReFv+0XRb/s10W/7NdFv+zXRb/s1wW/7NcFv+zXBb/slsU/7Jb - FP+xWxT/sVsU/7FaFP+xWhT/sVoU/7FaFP+wWhL/sFoS/69ZEP+vWRD/r1kQ/69ZEP+uWRD/rlkQ/65Y - EP+uWBD/rlgQ/65WDv+uVgv/rlYL/61VC/+tVQv/rFQL/6xUCf+sVAj/rFQI/6tTC/+rUwv/q1ML/6tT - C/+rUwv/q1ML/6xUC/+sVAv/rFQL/6xUC/+rUwv/qVML/6lUC/+pVAv/qVQL/6lUC/+pVAv/qVQL/6lU - C/+pVAv/qVQL/6hUC/+oVAv/qFQL/6hUC/+nUwj/p1QL/6dUC/+oVAv/qFUL/6pWDf+qVQ3/qVQL/6hU - C/+oUwn/qVQL/6pVC/+qVQv/rFUN/61WCv+uVgf/rFUK/6lUC/+nUw3/plMN/6dVDv+pVQ7/qFMJ/6lT - CP+rVgr/qlYJ/6tVCP+sVQj/rVQI/6lRCP+mUQj/pVQO/6BUDf+XUBD/i1Id/51rQP+1glpgzKOFGQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA99+/INi2lYKwh1yCzaNy/8GFTv+5dTr/uGos/7dj - Gv+vWg3/qFMG/6pUB/+rVQj/q1UJ/6pVCP+qVAj/qVQI/6lTBv+sVAz/rFQL/6xUC/+rUwv/q1ML/6xU - C/+sVAv/rFQL/6xUC/+rVAv/qlUL/6pVC/+qVQv/qlUL/6pVC/+qVQv/qlUL/6pVC/+qVQv/qlUL/6pV - C/+qVQv/qlUL/6pVC/+qVQv/qlUL/6pVC/+qVQv/qVUL/6hVC/+oVQv/qFUL/6hUC/+oVAv/qFQL/6hU - C/+oVA7/qFQO/6hUC/+oVQv/qFUL/6hVC/+oVQv/qFUL/6hVC/+nVAv/p1QL/6ZTCf+nVAv/p1QL/6hV - C/+pVgv/qVYM/6lWC/+pVgv/qVYN/6pWDv+rWA7/q1gO/6tYDv+rWA7/rFkQ/6xZEP+sWRD/rFkQ/61a - EP+tWhD/rVkR/61ZEv+tWRL/rVkS/65aEv+vWxT/r1sU/69bFP+vWxT/r1wU/7BcFP+wXBT/sF0V/7Fd - Fv+xXRb/sV0W/7FdFv+xXRb/sV0W/7BdFv+wXxj/sF8Y/7BfGP+wXxj/sF8Y/7BfGP+wXxj/sF8Y/7Bf - GP+wXxj/sF8Y/7BfGP+wXxj/sF8Y/7BfGP+wXxj/sF8Y/7BfGP+wXxj/sl4W/7JeFv+xXhb/sV4W/7Fe - Fv+yXhb/sV0W/7FdFv+xXRb/sF0W/69eFv+vXhb/rl0V/65dFP+uXRT/rl0U/61cFP+tXBT/rVwU/65b - FP+uWhL/rloS/65aEv+tWRL/rVkS/61ZEv+tWRL/rFgQ/6xYEP+sWRD/rFkQ/6xZEP+rWA7/q1gO/6tY - Dv+rWA7/qlYO/6pWDv+pVgz/qVUM/6lUDP+oVAz/qFQM/6hUC/+oVAv/p1QL/6dUC/+nUwv/qVUL/6lV - C/+pVQv/qVUL/6lVC/+pVQv/qVUL/6lVC/+pVQv/qFUL/6hVC/+oVQv/qFUL/6hVC/+oVQv/qFUL/6hV - C/+oVQv/qFUL/6lVC/+qVQv/qlUL/6pVC/+qVQv/qlUL/6pVDP+qVQv/qlUL/6pVC/+nVAb/p1MI/6lU - CP+qVQj/qlUJ/6xVCP+rVAj/q1QI/6xUCf+tVAn/rVQJ/6tSC/+oUQ3/qFIP/6dTD/+lUgz/p1IL/6pT - Cv+sVAj/p1QK/6RUC/+pUgz/rVIN/65SEv+uVxz/r2Ep/7BvOv/Ai1j/sodVn8qriYIAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAA//////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - ///////////////////////////////////////////////gAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAf///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH//+AAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/+AAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAH/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH+AAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHwAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPgAAAAAAAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAA/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAH8AAAAAAAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAf4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//AAAAAAA - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB//8A - AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA - H///+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA///////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////////////////// - //////////////////////////////////////////////////////////////////8= - - - diff --git a/MinecraftClientGUI/MinecraftClient.cs b/MinecraftClientGUI/MinecraftClient.cs deleted file mode 100644 index fb070136fe..0000000000 --- a/MinecraftClientGUI/MinecraftClient.cs +++ /dev/null @@ -1,164 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Text; -using System.IO; -using System.Diagnostics; -using System.Threading; - -namespace MinecraftClientGUI -{ - /// - /// This class acts as a wrapper for MinecraftClient.exe - /// Allows the rest of the program to consider this class as the Minecraft client itself. - /// - - class MinecraftClient - { - public static string ExePath = "MinecraftClient.exe"; - public bool Disconnected { get { return disconnected; } } - - private LinkedList OutputBuffer = new LinkedList(); - private LinkedList tabAutoCompleteBuffer = new LinkedList(); - private bool disconnected = false; - private Process Client; - private Thread Reader; - - public MinecraftClient(string[] args) - { - initClient("\"" + String.Join("\" \"", args) + "\" BasicIO"); - } - - public MinecraftClient(string username, string password, string serverip) - { - // If the password is empty, pass an empty string to support Microsoft/Browser login - if (password == null) password = ""; - initClient('"' + username + "\" \"" + password + "\" \"" + serverip + "\" BasicIO"); - } - - private void initClient(string arguments) - { - if (File.Exists(ExePath)) - { - Client = new Process(); - Client.StartInfo.FileName = ExePath; - Client.StartInfo.Arguments = arguments; - Client.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; - - // FIX: Forcing UTF-8 fixes Polish characters and colors - Client.StartInfo.StandardOutputEncoding = System.Text.Encoding.UTF8; - - Client.StartInfo.UseShellExecute = false; - Client.StartInfo.RedirectStandardOutput = true; - Client.StartInfo.RedirectStandardInput = true; - Client.StartInfo.CreateNoWindow = true; - Client.Start(); - - Reader = new Thread(new ThreadStart(t_reader)); - Reader.Start(); - } - else throw new FileNotFoundException("Nie znaleziono pliku MinecraftClient.exe!", ExePath); - } - - private void t_reader() - { - while (true) - { - try - { - if (Client.HasExited) { disconnected = true; break; } - - string line = Client.StandardOutput.ReadLine(); - if (line != null) - { - if (line.Trim() != "") - { - if (line.Contains("Server was successfuly joined")) { disconnected = false; } - if (line.Contains("You have left the server")) { disconnected = true; } - - if (line.Length > 0 && line[0] == (char)0x00) - { - string[] command = line.Substring(1).Split((char)0x00); - if (command[0].ToLower() == "autocomplete") - { - if (command.Length > 1) { tabAutoCompleteBuffer.AddLast(command[1]); } - else tabAutoCompleteBuffer.AddLast(""); - } - } - else - { - OutputBuffer.AddLast(line); - } - } - } - else { Thread.Sleep(10); } // Small pause to avoid overloading the CPU - } - catch (Exception) { break; } - } - } - - public string ReadLine() - { - while (OutputBuffer.Count < 1) - { - if (disconnected) return ""; - Thread.Sleep(10); // Save CPU while waiting for data - } - string line = OutputBuffer.First.Value; - OutputBuffer.RemoveFirst(); - return line; - } - - public string tabAutoComplete(string text_behindcursor) - { - tabAutoCompleteBuffer.Clear(); - if (text_behindcursor != null && text_behindcursor.Trim().Length > 0) - { - text_behindcursor = text_behindcursor.Trim(); - SendText((char)0x00 + "autocomplete" + (char)0x00 + text_behindcursor); - int maxwait = 30; - while (tabAutoCompleteBuffer.Count < 1 && maxwait > 0) - { - Thread.Sleep(100); - maxwait--; - } - if (tabAutoCompleteBuffer.Count > 0) - { - string text_completed = tabAutoCompleteBuffer.First.Value; - tabAutoCompleteBuffer.RemoveFirst(); - return text_completed; - } - else return text_behindcursor; - } - else return ""; - } - - public void SendText(string text) - { - if (text != null && !Client.HasExited) - { - text = text.Replace("\t", ""); - text = text.Replace("\r", ""); - text = text.Replace("\n", ""); - text = text.Trim(); - if (text.Length > 0) - { - Client.StandardInput.WriteLine(text); - } - } - } - - public void Close() - { - if (!Client.HasExited) - { - Client.StandardInput.WriteLine("/quit"); - if (Reader.IsAlive) { Reader.Abort(); } - if (!Client.WaitForExit(2000)) - { - try { Client.Kill(); } catch { } - } - } - } - } -} diff --git a/MinecraftClientGUI/MinecraftClientGUI.csproj b/MinecraftClientGUI/MinecraftClientGUI.csproj deleted file mode 100644 index 1066164e44..0000000000 --- a/MinecraftClientGUI/MinecraftClientGUI.csproj +++ /dev/null @@ -1,140 +0,0 @@ - - - - Debug - x86 - 8.0.30703 - 2.0 - {B9E600B3-C8F0-4BF8-85E1-C164956B0B0D} - WinExe - Properties - MinecraftClientGUI - MinecraftClientGUI - v4.8 - - - 512 - false - C:\Users\Admin\Desktop\publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 3 - 1.0.0.%2a - false - true - true - - - x86 - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - x86 - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false - - - AppIcon.ico - - - 4C76A63F11DB91E010AF3039521927BEB537A320 - - - MinecraftClientGUI_TemporaryKey.pfx - - - true - - - true - - - - - - - - - - - - - - - - Form - - - Form1.cs - - - - - - Form1.cs - - - ResXFileCodeGenerator - Resources.Designer.cs - Designer - - - True - Resources.resx - True - - - - - SettingsSingleFileGenerator - Settings.Designer.cs - - - True - Settings.settings - True - - - - - - - - False - Microsoft .NET Framework 4.8 %28x86 i x64%29 - true - - - False - .NET Framework 3.5 SP1 - false - - - - - diff --git a/MinecraftClientGUI/Program.cs b/MinecraftClientGUI/Program.cs deleted file mode 100644 index dd0801981b..0000000000 --- a/MinecraftClientGUI/Program.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System; -using System.Diagnostics; -using System.Windows.Forms; - -namespace MinecraftClientGUI -{ - static class Program - { - private const string ReleasesUrl = "https://github.com/MCCTeam/Minecraft-Console-Client/releases"; - - /// - /// Minecraft Console Client GUI by ORelio (c) 2013. - /// Allows to use Minecraft Console Client in a more user friendly interface - /// This source code is released under the CDDL 1.0 License. - /// - - [STAThread] - static void Main(string[] args) - { - if (!System.IO.File.Exists(MinecraftClient.ExePath)) - { - DialogResult result = MessageBox.Show( - "File not found: " + MinecraftClient.ExePath + Environment.NewLine + Environment.NewLine - + "Place MinecraftClient.exe in the same folder as MinecraftClientGUI.exe." + Environment.NewLine + Environment.NewLine - + "Download MinecraftClient.exe from:" + Environment.NewLine - + ReleasesUrl + Environment.NewLine + Environment.NewLine - + "Open the releases page now?", - "Minecraft client not found", - MessageBoxButtons.YesNo, - MessageBoxIcon.Error); - - if (result == DialogResult.Yes) - { - try - { - Process.Start(new ProcessStartInfo(ReleasesUrl) { UseShellExecute = true }); - } - catch - { - } - } - } - else - { - Application.EnableVisualStyles(); - Application.SetCompatibleTextRenderingDefault(false); - Application.Run(new Form1(args)); - } - } - } -} diff --git a/MinecraftClientGUI/Properties/AssemblyInfo.cs b/MinecraftClientGUI/Properties/AssemblyInfo.cs deleted file mode 100644 index c4781f226f..0000000000 --- a/MinecraftClientGUI/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("MinecraftClientGUI")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("MinecraftClientGUI")] -[assembly: AssemblyCopyright("Copyright © ORelio 2013")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("fc338f38-8ee7-49d8-afca-546a938daa90")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0")] -[assembly: AssemblyFileVersion("1.0.0")] diff --git a/MinecraftClientGUI/Properties/Resources.Designer.cs b/MinecraftClientGUI/Properties/Resources.Designer.cs deleted file mode 100644 index a32a90afef..0000000000 --- a/MinecraftClientGUI/Properties/Resources.Designer.cs +++ /dev/null @@ -1,63 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace MinecraftClientGUI.Properties { - using System; - - - /// - /// A strongly-typed resource class, for looking up localized strings, etc. - /// - // This class was auto-generated by the StronglyTypedResourceBuilder - // class via a tool like ResGen or Visual Studio. - // To add or remove a member, edit your .ResX file then rerun ResGen - // with the /str option, or rebuild your VS project. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "18.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() { - } - - /// - /// Returns the cached ResourceManager instance used by this class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager { - get { - if (object.ReferenceEquals(resourceMan, null)) { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("MinecraftClientGUI.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Overrides the current thread's CurrentUICulture property for all - /// resource lookups using this strongly typed resource class. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture { - get { - return resourceCulture; - } - set { - resourceCulture = value; - } - } - } -} diff --git a/MinecraftClientGUI/Properties/Resources.resx b/MinecraftClientGUI/Properties/Resources.resx deleted file mode 100644 index af7dbebbac..0000000000 --- a/MinecraftClientGUI/Properties/Resources.resx +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/MinecraftClientGUI/Properties/Settings.Designer.cs b/MinecraftClientGUI/Properties/Settings.Designer.cs deleted file mode 100644 index e41b85837a..0000000000 --- a/MinecraftClientGUI/Properties/Settings.Designer.cs +++ /dev/null @@ -1,26 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace MinecraftClientGUI.Properties { - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "17.14.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default { - get { - return defaultInstance; - } - } - } -} diff --git a/MinecraftClientGUI/Properties/Settings.settings b/MinecraftClientGUI/Properties/Settings.settings deleted file mode 100644 index 39645652af..0000000000 --- a/MinecraftClientGUI/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/MinecraftClientGUI/app.config b/MinecraftClientGUI/app.config deleted file mode 100644 index 3e0e37cfc8..0000000000 --- a/MinecraftClientGUI/app.config +++ /dev/null @@ -1,3 +0,0 @@ - - - diff --git a/MinecraftClientGUI/screenshot.png b/MinecraftClientGUI/screenshot.png deleted file mode 100644 index 6684c44336b2da8f5e7c2c3836240be1482f1494..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 49804 zcmdSB2UJtp_dgm7Dk9*Bii&`hBGp1KQLqeB2c$`f2myfr(xoIpL75Q+mC&0}0jZ&P z63ZYEN)Ut)s)`{%2!TKX>F?sqe1GNpTfg^T>%Fz!dUvg?Bsce-yU#xR?DP5Ty-)tI zvAQO{`^at(2qbRy>t$OINCXN3Z42ME12`jnAS(%Y+Y)Mf%>-20e{>%BvfbyB)PnZFp=UWy- zcK?1c?yhLYBc)?{Z{xHsQQs%OEcDgIUnxEP%SrKJyAyLSN0Ty!Mh_TcuG13gHhw(TpgZIn(Dmyo#vR4=*7(E z{Xnf6FV|4g`iZoIG7pDzW~*MdzO&UmyD^rey-f839`vZ$*9pNq|m1eA?=}*TWVR{8v#!-!@=mkT|l=l^{Aw*q=4I_^f zA6zH%Y~#}bCI)W!rJ>aEOe5t+9!8In@#%Y4Pb{H{QcsUcj>g*!PEU7pJ9y{$Y_r+O z2nFTU;i1m3=7TC2{YnJn(0OZwpV?gQ-PZdEIK}HaQIES`pdQ&X5i`GgDk$8dptxgf zt^PNCFhiA-{4lwdb`ZZtAL`O#y7wGG$_KOarw4J=+5-5x{soDQ${7Re49ZqQHh0^>XccW z?I{o1#Hw%z+}|jzQ0&=RKKGO1W7`~7`lqpVeuK#x&(nlCF|(vQQN1Aue1>26fs5~Lt`yrBJrS*n6~H?e&ai^-_ZoK8 zd44*ZdKT;>RBwH$iw*4uL;7#FIyh9gt6eh|1T#*y3sr?Hoe0(H507dT%k{71hkUzI zvlVV{J4hm4FbsX_SCAk-*9LnR|Ku{$a_Eoa-58|f4gB}@Z0=_xw9|Zr@}jBYd*x5 zII=bFfZ`$sa1-Hrae+g)ZRsxnSuCf)Adse#Y_?VQl01#6xIS@G1tTd8lG%X#e9l;;EUO$yuxvM?S)-Z|Z3hgj~Leg@uPo@@&TfnE>dx`1vi z4bp{$MV*O-g>*>}$jMLtvaHS|#BO5E9Cr%LI0-(X;!wWK`6e&$Xr3MOCw~q?w%&+T z&f~sWg%aq3%2*0gK(NiKrdtaxj~K5UWq*S3?Mq;XPCl%G+#}4?YO;(N@j-$j-mR51 zM*L2QDjms8iKaGL8MF6CeNIB6!zP-3947qQ)alM`fhbSB(}1(@w=Lo(qkPbdDS{>* z89M9qwzm$7w=ih2I6o7?jc5+YEC^@o4rhhB{8_0CG8b+ol0jqEI6}te==`*lf&G7X z<7oJo-^}8CKlCKxm=!NH5bPet3|KJJjV*0ivOVW%9KiG=@!w0PKOi}gs{9gbj0>VV zXI`XLgYV59WDDYP$EJnf$qYWhO^F`cfh<3OU${G5wWUM`pS|pmSf@Rp<_r4B=!Z3yiW}Q(Tb*L%*|57`->zUeQL&mS{n;%V_KT2ac$xlsbHmtAKyqzTEY)Y4+l@RGg_np5! z3g$eO&ye@>SX>wIPOzuoKHcla@Z2^wRETy^@_%qyO0%W2&tE4&%cE4|S1pTY#UH!( zjwfq?>O4h7$~hB-d!Rc3#ceE!f-(f;ik>ZXIfxVut$!x^OYyKKeTkNo!ogXak-Mg& zDTwbkCCN1c{^x4OzMJQ~#wmmO-D|48f1r3CK$if!2PN^g47_?_B$ z@OWBd!vt-pa>odCwjdA`Fg6rQoLN81gpEgcR2wL)*0!o8$hNjSL?qApMD_*>(b&aN zc=%!|^yAt$cb&%Gs_@13+L@8i9WCaWgV5t--$|wBoUV8P(-T*u#@`zyJQ>d;K#E zn0L2?UudG_VhvbLvb~Y>L~LH{H)ZP=<0(chb-41Bz)t8k3!ONo?9lsSmHn=qjj=V^ z^WYQ}R5-WMGn`vzA*26pm@*f!7Tj3L9TV4Q-kS`a44yx`5WQp=@YauAnaaIMu+Nx> zoQYWElWk;hb>A2^C=9I5w=m$M$`BQc)SnV&2)JFkbH?c=RqBJK*?2TH& z;}1dR<{mvA+64{Y3(J}b95^BdEt@UpYRyy!%&#OL!7s!}wOF+zOQd<;ufPPn zyGh(Sx(2z`S;2E>DW{Yj#&62izVewUI#f&-1zh*qbil$uz!UQvz_(^Zvwu#tkz%2nceZEC?6isiH^5%g!RuhO<~_*M*@;hqU!md0NstDTKU=9i}jz0-B*;7 z$fm+qfQgQo;Tm&zf{~e{X@NNLwWDMDDV3ksw}U`UVRJXH5alyoC+lBdVy_jGTZJ1b zh3958q@`28vZ&%>P|t7vXYCxd>5PI{l49a+D9xW+D3&m(Kyz{yFaq?Ew%Y} zsP;@%=VaW?#IlHqPnziRfRDesDe}i2El0!#W{LZ%#iZJ-I5(@3=QdbxjQP)JqCz)D*2ZC3(z6fI!BajM_~Z=cbkaalfj3`6^Hx*-Xeq zo3FXHUL;ie`aP@x#hHD^W&WquGgaaI>iuiTJzGI7SA?ZUg{IIfcBQTaYN%J7RE+EueRrVZZ8}nKZuo8bfcI7brXh z^ar{n`jn#afE;nwl7mQ?i*_rfNP;fb&OZyh(E@*R6*3(>#J4|8z-s zr6Qj(nthQ_;g4TOS2F4sw2c5Lm~AfPB94a1AIirzq`u_lo&t0NirX@eYkL|mFu!R; zuGYGr?;@Q>zamTauQ!~d0w{2O4yW=3J^pTatv+x2B<1Zc=oS!Y#~a}T?Optgvy&0m z3uazZFC^xN<_xzkagNHn`80nfZUe=gcIp)+YAs77%Y}2Mc9jN_=l$`gRbzTKq zbM!*;`GdL>>jnDjr4@!5ZfOZM3d?J#ET6Bl0(!L+!;|GqI^#Hb%UJE!$DxXlRiHnY7}5ff*ZbfXx>d!3sR0RYxpD52`_+g0a_J{znW+Wy;8v%XWv*1oTgO&TSO zpPstY#i>S{)*<^)4>{CCAO6{4s)1pk35kr}$T$07PxphZlLiRZY^TBGRrls^j~vPL z(>hgZ35~OC+b!iXJ2Lvo&5Pyrgk~)^JUy{2D+v>A7qQsQ$j!*)25qxjg&Cd}y=gg_ zQ#&x68hM+D6-jFMYEx+iaWdq(cYw)Tu!g!Paly z^F9#aW6_4(I6N3Purff1PnMZ{T>w^eWg5$1*Pl@`r38xHV-Q&5)PQj2hA1%K7qJqF%ZbSE{dKP@7>D(95z%d!R!px~(cKo_uG7Bek%MhcB}U zpOcEBA!5h)PT`tfAxH@(UGtK|@(d~36+3gkV5h8(ycGTAyH%-JZPjT9nGVm{c1obj zv&BDR?Snfaea#=-x>Yu%2!m8vGy$;9g**Ps8bNtyQMZE#sWv^|1s7OdegdTh+2~;X z6e3RIus*5}e4WPCjo7#5)oCtYKSH6}D6z%@i0rMe2KBH7ru=m_?rV?iwH421-@6AE ztc8Z}nnZE>zk-QND+9IYX;Z8xpC-xham0;;$I~%SxW?a-uq|cF+yTCACCvXptjty} z^j7}6FN;jSe93jElE70i%e{DjRDwY11;3b(Dy!v%Bb`478*py1KYhyPkGCHG_m4%3 zQ5beUua~yiy)!;$J20 zg5LiIT&(ix2;QA%;k;g~@ghkA>(n3fZ9e3~ANirBZC^v0mkI8t&SUf)t#rHXBs%p% zSUZvK>Mit+ZY|v0*HtL((GWR7YAp(A*Z<$zJ&ez+y0%9dfwWZrY8+pv?y9NUEIVu>=(4ErXld&v0*|A^`gkIyPOV+iDlPw2}EPT zn>j*|abTL^%3NAuaLU4Wq8zHD;~IAP4$gnu>Uyd$+<(Ip%r!B=#dn{5+!>O zt(slLM8htr-g}xheAbVDCUrNoHUb$kLHlqFb;a?C3d*ukz3ahf*_VUc^)12|(j4$D zAKOx-Dl9SBYz&G*tjcG z-DssI(}Qif?NA?gS$!bz64w0=UEVs#^z6)Y-F<$1$zV&11@WwqH?X3ZA&4iGKWnGd zXRLiBbzCFo$JBT#WDa}KZtTTNB-tFaG*xmTzGar}#W(zdUW}V!STlSi3y~S@u9zzb zR(O7BpmfxHqR>GC`~ysR)V5e{>pa!zF@EjqQPdMfR9}PoUB`BPz{HyMCjCbmtzp27 zRCdwIt_uwu>0JHMo9dY1P%#^ehWV1q-1?~H5qCz70(<>W$mQEYwtL+7xg~6Wvcz1r26uGQ3ZClT!xx43Y6m7G1TZ%C%^%$cj)|RCr z1%1}Sa;duPW7=-wVxh+7*f3q_rOhjiEO-F z6)?_P4cN!1Zn^|hMbQ#F8{~}|KCEo%Y(N1J`^v|}nw+7p%of1BCE+S?%#>h{9_Nmo z!yYK6ebt3wBQSs_9fhx*W@KB#&6ir1nihF8Ki>LB_Lvq##~b!x`xhpeA7&qktaUXd3Z!>7n!MjE0#E-9cnL1zmA|F#d_5C|CgDTf}Wyuf*DGqH~stoGR zBkFmEZW~U5XcV-C)*AM^s;q`ijl5>K+fypn>xMVCM(1|M3 z==MttEs*VHyu$%+wHv*746BG+6&jzBgbP|3&j~q5L28@o-s=+bc!V{A5?Y!9`K9^8 zP^WD(KOdL;1Udf%V5n&SeX-u}Z+&yRQxyZyJfyP>P?eqdg#P*Ah8Hm$a(UE0uY zMDV6ICE)l`V>c_(()MQb*|e>*i}&*2p0!`=_trTi)S&n3I&blJ6vZt!3ut0r(swU~ z{~VLMO8&e_(c+8`-S;~_5Yk0zqhvezW!7ffdb|q#g0C!gU?x*VvipOj!VY42DhFRV zwDmvujKYY!fm0JI@p|+y; zrOy0P6KAPPZxv!M9c6e3ekY}Ed2Z3C{<^lugQ>+0F?ySZ+iwMJ+V2acupATT;=r+d z3D{(HS#&?%q4k`$q)vdWQ3G`<6N{KQ|3jfRzVL*M=W)-5@cYi~ zoEos^`-N$IYb0x%UF3lZsHt-#(;wF><>&1py`OWhtcy?@GJX~Nf~6)rg)B{04DEKP zf0R5<^p0gO5L;{X3xqDsgyi*A;VB)#b?~!3N^nqzR?e%>rljwsqlSCy?|XbTZ|11D z)-HbzGh1%WNMhiS!D zN-mkgag7(}r#Y|QOym(n*>dgq6$b?t0n@jrO+)}sh4tH@%h@Sxdj7APF0UStE*D3Cmjk3r={1%60!Ka`W{3huheGbcaa(v7|V<~nP78pNb{yr4uUs@xPX(#mImyG z>E0au{;pDc@?>O|kUg{Gjn!z*_QviE8CIiO(`uy=n|ezr=V9(Qn%Gu!x%jn7BX4uc zo6Z;2(D8$B;IRtwE=cpO?eP0k3h1L%*ya9fKkP8|Wzfmh58<4dkusPlRI%g?O3Ol1 zX15m&Cp~r;?>+uYQ(3LlbQ(l0;P75uo$(J}!vlA5TfVbIa4#|nk9*(aK7diTLgbxw z{TAlo-T^V}Goy?5lnv{@RfzgdyPQOYe{fx&ux%}*wp{oN$@;vp8QC5%-H-jcySO{j z3i*J?&$8}Lalj37hyO{pDMxbd*Y8M1V62WhIdyQwd{D(3T8wTD-@3F!WuvahiQdROP|HT%Q8XOi z-el;qiMnL6v-lD&$Q9}77=5SCC=0vJW(^+hJd=zxKuDP?K=mSY@sn{E~w*O0DuSljX6M7!3bRq)n$r z>bsnt07w}vrQ`&PpEWMLf)L(yXtaZ@0iBBTJ&CI53l!5VN%?LtF7d_LEa^VLMv~GM zQ1vcHMvdIV^#&w>uI>IA?O`29b<|u^N>V>!j1sx1lvMebl=3FdsxrVuCrq4g-TU{8 z0S5Kx+W*PL)%yXqAr5e{<0uh;%zZupgvWrK;CUOR9)Ok=Bb3B0JQe-P-JS>~0fO=~ zYITwOMPifsYsw|m98&y8OrUF-=S-ZRNNonTE^>eJM~lN~)lYx?!@m9@kpIRSfk*xi zT=M^mvktjYvm!r6X_6|NlKX%w*W*ACm{q_x{1AE9RZ18~a+$H(`3Q z4Z_&YZvX2u9bt2npOL`U0Z!WW1Y6sA^!vp zu~=$rkhw>;ba-VUm5BGT(lr$b5{6Uj8Fh?mn=E)9f0e3YoiTkPH&34*`%~{NXan>j zmrO&lF$^T~*h4UqGZKjxAq-O-?#=uB=n-;b7~9yDv0rDW)58fXxpwoOjA|rDhpqDq zyS5Q)mv1aMJc*=!XO@#i9GKPO~uA9W=^V8MnIVG!I2^GdIz1V(%@26Eo#XS4$ zk4hHDDjb(?CcOJOeLw^Dle?f`1$iL_DV3_W0QMAv(yD{t?g#;8N`W$`f7jZW-U zEDtw`aKBMj@C*QMg3(*)HVq1q;ib;-mbn$j&H{yLchb6!igntx;j=R?Dt+wY9}=?2 zQeMYOahG%o*xney>n7U-JlW-~Xr1VH7NZ{(5FK>m7)Ms>P4v=q7wlpVZ&4HqhqCHJ zdE+XMJw8^3ulK*=G?)x@P886MSDpaDE2*tQoMQfS;#rDD<4XrHWYc`(0_QF(aXCB5 z^1{=W@~L}SjKvKMSVD>>(wdZAr zzykks3Q`~3+g2(PYQi%wj#OIlt>gmJww=--G%MV}k2`Ng2J?IYBdIQY|7OlcZB~r} zyIvqlfcx!{*;_^-8F$_+L0GorIl177bGKL~S(XK<(ohciLxvaTpdt2L(#zb??& zl=Y%c7!V%gF^q&Kgp`;QlE{rnvNCuzJq$_%7pnO8RTpP_;sh^wA91meAE5=PBzFOL zw+a-(pRdDmDc>Z8?l%eIFfnMsT@%uDYAe>yu>#>}T*YsMPD061z0<22z84pGX5;7X zmlpFv3oIVkPg>!n@%k#BmUFH10X2Cx4P%|jcH<&*05oq(k3TJ=&PF7EzVyWjiXQVx z0jJ%K=nZ>&Fnr#MO;rTD2@vE%4a%9?gjL9a(MMC;(Au8DZ8JtsCA@XIu7H_G^>l>A z>KN<)JPw0|u5D(&XY+q6bH?18hDbX$kAbwsv^6-S#@Y9N`v#}NAT*nX{itXY5~Bdq zjd5p3M7_wq)>I*x(0HQj!!YCVO^8y@b<+J&H8F|Sn5OKiE-5+kLV8DkXcPK|Qtm=Z zpFAuorNp>*L@Yw)5vJ169^1q~4Z1gkXK5VCiQ)ZGNNsinhG}6iFNFU6H6xOeJC1V< zC|s|sc=4qqST#y=zp4AU&+B;SS`$`rzJ_!jRaqtuf!!P)(B!}$KyurmXBJuWu3ml& zVTmB)8+&raeQRx2DagQ-w$*3s7gaDxQbyW3iWvyG#mds+;to3WBP^x_Sht#faVSlf zp{d(;bEFmiUcBHrw-zB-3?Mn|!g@YzxE+H>I7S2r1G1W*7(v@%hg>)&YC0Df53hOG zd%jf#`z+rYF~TvD3QTC6WRX!&`4?84wtS53{FwIp&({i$Qw(WrMqOzCuaJTjRdz|S zo2sI$n{nhJ{ToSm6Hz&RTpeW@Yhf%P%;#4}q?JxOvaF{$W+b78 zPyxbSrsKuH8#-ohImPmVwpbbjrwG35FcP7R3SUPJ?}Bc_zKnkbODpC6vS6!}z0+E7 z%dC;YZ%%IEFL=t$IQ`;MSpB}-`8d~(kdbvB4}Cp=zKPlm)qwL0dLWRfyx16~b2k-d zFke2%bPdGHMj_n#Ncfi>=T8%vzHStmydS-ErwT)*xc=qW!w3!xqR<*U9Tj{!jPg<=|`Q$r{M-u1K3w z(k-QfuNFdM0~S~(1D1@~URi*zAfL79mUrJMA9+~ANy1v`Q=-h*uRwYR-Z%&r5G^ME za%@+X#1eq^ZVLHLc3whYLF-I5Z(kU-C)31lC@qX=g8M8lYzv44Z|i10Ra3=$kJKGE+SKBASX_FxwbMW zFT#SISv@COxdS?`&*@bmpVnx$?LRuSdys6B==V-(Z54p8Akf?nAn@+?+Jxk5=CCsI zl6u%1H|&G+y3`Pas}FaPx^Q1&IPSOq@-XOO{O$QU8}UOA|M7U6ApIn&jS4eakc8hTs#&#f&9X`6t5^U%EVSDXLK$3h#2pz?{ZXkI{GXVqF; z#yF2UNc3rTQ#9HvV+0OW*&rqE`9^b@C$s2IQ&7VXC zRFjQ`E$Q6w$9+I`&E_$5O=>~By}3kG)&}z7n}>xw z8kVHC&L-ARVC-OD!gdL{{EM?|?1f-DRU;$STDK%DKVr>35-%-x&uIzH z4~?hD!@p5~yoPWd9mTHqh0K@Qk(~&79jieZ;0qKD<1_O2x~;oPXL=|%^f;yKT@+ky zG8HAopD~H~1>Z3GU;A-U+LbwuRF*t?Zp)l=$lwb9W%$ar@gHAOt<>}A*_V}KzEvPk zK=50?pSmGl=Q4Lv%maMa^vL&p_z0PQm%q+!U*?ohT(5lV=!LiZ@-_r(kKVV@koHS^ z_HE9%9nDNh`4>Cs>}RoG^ApJfMnUQ3*2Zc#JDV0{6Myt5IQ5%2yCnx6Mk;Zwo?kn~ zUj?)DJJmt?TPYcqnYlUu`0ItFj{-7`xC}hiiYEP@S6+iWX#U14dbXaFptr z;(BL=JN$Xj0UtP}26+s7`Yh1xnMgGed(F6@KA=If3&_p%s#WF>t3W4dVpfRHF+lQQ zn@+cHnN_-2kXhq3O-g=Po;Y;q7|XY4QNx0Cq**Wtd9ESPDR28WSo`D8UmV3e+dj$R z1u3de_yg00@2NQf&f_M|vKB2crI`5I$0Iw!oSj$hHTYcs3(m34CTI65Xdzqmn{*=$ zb{eo2nc~E*WDmlw@|hd!oyoN!gW^YD*g9lF-`WxAz0~Fe=0(49eV7)5?5z@C+K;aX3hcnotqZ0h4QM zP(@kBn?x!k5`jEoNgMpqISm=jaZvsDa1TUvjjb^LkG~v6T!R?AB%`%>5%0fK3>y9}C$T1} zAT5RtzbqjyfO(id5JYvPRi%KV<0oDu)XlRq+FEcx4TOxrA2tnjwD;`>KS)}v#*QCP zwNUU?$H6M5DLsspUhi_KP8B7-qvFvR_GMd5-J!8UO1%=wa=)YBg66Qe_#`}%tD>K@ zIvlgAVDZ*%*U8D@Ml4l7cLh@XuKi0{*)Y|1V8Qs>R47wR*6JUZbYEbr5lMaERp4}B zqKE>%xf|*al;xG{;5$>}Sf-2@cGej)dBJahptR$MmQE||56Ad%=_Z$bb2cM^kY{x< z-_3x?{#G>X9HO;R6%F%zqJ^?-P+#VmHE7;(Rw^^CdGM=}KQbb|A>vWZ;Z{FwnMU!l zpaIBta%E+>V|!_I;j_4VhNM3DerD{HtJeK0HzO+h6~^ld^|QtTQkkd;StE-=8`~&V zt0K1x(sT@S+MzkOfi&O2I^&R+$lgGYXGi^kT(|M{pcFO$bj2lymOt}1+JSWFyXuMQ zuL@eiP>mR8uI zF*~t}f1r+Ic&p@z8mb<$mD!Te{o-yz9)JF8QIc^{YTbX^W9Y7j zORH)hZ|Gvk7r0fiuWzMY=zm=F|NhDa$}|pA8dvyV7Suf3f9kC+kPiD8I`=e>ttPHkG=mSfKdKwsbdcm()(FmVDRF z_X(9VnhtY8en3(g2*%}3)kjoJ{BhL<9>T_MG2eWk(nBZp|KR~~f1E%C7@Ig>5JxZG zd-&g;{(ttPWvvM*iX8;uwH&<}d*k5woe1ickSQsRGr5uTw1RZ5JTI3w^2w)*jPpYv zE=%x6lE`M(vDgX0%9W_Q1b;F>%x8U(3=@y)_qb?PfHO zFk^nKLJ&^I8;^auqx_A?+p^&_1p7NA)@rJ4zW7J37MbzeLqG$6*Rx1nQ5ug;sJWAU z^-+y{?9*JNmF|sjQ<9?KaZQLMXh^8>-OK$I37z{+8M0xW7P?_K-hE`e&%ilNt#u|bzIwO_&PK7>GF|~CDc!pt z{^8l4dC`bYWG{MEOy%Li)bgWGqn$2U?`?hYMmxF`9yq&;$I*eVb{ z_C0bKuP@&t{Mv)O-XGn6YWVW!K{h$|vzJaoNn@oDG-N+076RoNap$FX+YOgc>X2 zpr%eT42ApDj*!_bgqD(~`A3etbTxIKhOgDPb zygmPQgXZ1%(My0gYVUVeis|nN;kR1ea%tQ7*NlyW0sxntjF|0Xm=ck;4zMXm4-zp_ zMt)F{dvPzZpgcVES(fHGS)^i3l497`Avn_7RUu6VYyJsK@lpZnE#s} zcs5;%@N81CJbha4+Y?*x&B@i+*zoCy!NWBX!_I|gf8srkf)qY510(Fgb$i|b-c#Q~HmZ2f6l2BNpVj0s5>P_(b!`Ifx;j`W8gjjY_6y=> zzVNZjPF>_+%}V+C8Mbefpod1_7+P%oFHQs4L!A);7_EE7GiSM%}#qx}iK|GOf5zG15a#(hcs@5Up{DyNRzni!eRV1_xj5EhA)#j6xJd~Y z`V~W-#;pz21LaqO9u=~PeOMD&$#-UdfC$QXU#o-g85n)Y z6!)@QF`PBcNB-bWXPlOVS{~yPg&RSPUfJ~?A^r6F$S$Y`N?5}#WUSd~q?Tzz)U5TH zFg-oJ%6LaEC#2a=ARe;H5&eL;AzG0W*DA^Et2_a`3?2gk<_)~wdlL>|OjAa^dY zac0MIgnG}OHixNQ^)V$CV^_pNfaE~=-hqXS4I?ZOZ|VbSSB2vI=msFhfz zja6xi--0kE%KH{`+ftH-j5!_w@qnqgA0y&!mz7&@wUUa)x>w#5Ue;q8!g)k;DU;Gw zQv8Ogju2qFdBavVE`Ewe!n*Rj3m5y6gLJQ1)zW&Qw9&6x{>8C~<|R#_xZ)*k2Qc7i zJxe$@_uNrc>+WPpS^Sab%OOf?qTaaLb8g~1reb;8bgSUDUTavz<}`h2kbVN-F2jy| zGda9m69oc9$81#Y1RN_H0|r&KDLj5^9eN2P?jn2{NYWc8`+K)V9m;)JrEmu>kew$4 z{+g4;x=zxWJ*_!eg`Z=7Z@*g6U-j|sTNwEP+B5Ha6oWV)ZT5OG6^ z8bFDnlIs-RP7}exb9xoG(*h1`#$AB@G|G{q7qwTfg_>m^+5>gWS6DY%F=No|2&x$+ ztBYVE>&-BOmR5Xv(7q|X9N$NULW^>-R+*USmZntGg3dc?75w-n( zqb70GMZH$x67sn`@7;E^fv6oRY-lLbJvy)4C145O{PfVKLi%h*+)lf=s&QwfjL?htp&w-mC?kql z$TU>CXFAta;s%p_DS!2o?Bf;%Qbcbnsee-i7q3}rpz49h_)UrO7+Y*!T%`GfAgrUr z1k;{TNfW5iRu^V|ykH@|nW}HCPzh9iryvXVUdV3C~R{q2?h3VLz z-R|Ajxs+#Lw~E2D9uFU1JT@-v>Y05b@E@Q>62oVJh1QED`>@h!!*~%}L2+!c==^N4?qJ z9Jt;WEgig;4(^QPZOdK$*rR^S8k~@Rl>iSL!7B`7fpjqTa|Y>S_^MV2V&9=0xC=x% zBX4s)PrO?(3}Y=SQw?yXveWrB*i}n|ewIkllvrz?2NV6wVSB8Kh4C)bCymmJ|?`}&h zCt;Wo&V_oL4$?Mr^%sf1;I)D1X!fI@*?5EPQUelF{R_ahB!J22{S6Amf5t{5wkzcF z|HR+BSO#pC0Vq(2>EAfL)Q0sYHD9UBA#a;%vuCni^;+!6-@9HimHtBrwZCEa)60L| z2W(TS6Zs4CzkCiTCFN&bZBoO}Dh(hayYFvw4s`M0->C2Ezxa~s*w4arz%+gZlmV0x z6dgxharwLO{s<7WU<0=SRW5gu(557LZnb=dJN*bLcsVc&68Yv7hB&DZBRO?ECwhsB z>3ZLrY&jncAx*Kx;-P`Epo%$Lsl2MBNHOV@iHgqoB9+;1mPw{@cxf?E5{%p{a2}om$-l z?Kb?jn}lX8NL9Q(Y`|p?ChX;`KV)4VLwRB#>M^~EE3?V1P}{%%QmEt*D?rh-Oe}7oLvuRVvdG=c+YFnFWNR?(?qU(!mOVubKE_6ealQ0x?HB8 z%~6x@;VQY-A`GGt)%G>%MufW7NcyB1vL*12D*7B;7Ee^YYowAd3W3;%E>HTbM|~zF z=V#ClKgs%&_p{^g?g2)s_GvG^2%Rea1~yt8-}=ljq4z;`=`%GNQ9kgr=dYX#Fc%=r5hxbyr$E#if}>LcTIGl5wJ)~0w{obx+3zfihtjpwz4 z4)i9|h_~;?bkd!&46Iz_c)O6wRm^qI=Cb=@fFv(5SqL{-JWH7Pz?cwYq^OB=LcUJ_ zNg1j(i>B0o?GwKf*wP)IjBt1Fpu+F_QJCP#&QETtZfR$#0g#0M

!ZuZAIW4s!W8GHAdE(NxA{+RZvJ@+Fuj2sNCU9Zk)}Vrn>c#Cvn_x3 z(x;MzlZ>Au2I@HgSjqz%ZIi^BaO3SPx{Yx;;euT04{atZPH$W-cfz6W+v;myaRy@ll6Q}2tUH8wSDSH*5tkd=^YvFL>)4rFP#L`J6Jr3 z+M$!SamUZIN=pKLu}ZvU-(ttor98c4Dyd?K*knF)o5vd_Vld)k1;!dswp z^;0B*FIWscBx4$#jFjjIe)MrTOrirz{gPz%VRVqkIqu7DSsO3Nim_wM4exRsI;K5Q z;5=NyJwG#XuJyOs-W4?&sCJAXp!sl;!A_lx^T1!9$XZuY`Z!s-t>BHHjw(J(5NGT(;ugR*_4KS-pmjY0&e!TX zcXax=&TgDlS7#Y`{I6G7_U)KXSl5-Et}|2$q<{75JyFQDR+o$~{XK5l(g#K28()5i zw+qmJ>oD|*Trs<6C`-ibs+7rff-bQ~v%^H)!svoQ`An#PrYAHRQ$)R2;XkmKq<)Hv z)_bKD8JKymKLwV$slB)>wjs^Jj6YzCK@{sX?mKETuV+SF@x%Mic-n}ctF4+9#N_+V zyZDB=pLtgrjK2&P=i^f*%f!56U28^!<@sy;2Xl$n_TG7S#qnL%5K4@wICQzL%+Z)2 zt~uuNKqXtsH#Ib_#mCYAz_zT52<4I+)I-LowGT~RQf|*@J%yfkNpo#|p^-~=&onc5 zqS~82Rj8#mX3W~qq=^xillU`w&~b8rTYa3J~&O?Iq6HpOWGFS%d&o1 zt7&Hcp-K5vPASOF<>aow3LyPlBsJ?o17*LZQVWf^qXybFUoPlT{w z+rd-zrx&L^NIEIT^v#ld5^J72{K0K9vhdXKTT;6W7o2mkIM14e7JmK%SY;`YBO!3A zdG}e`HNfr$T(js2G$d}jGXB&sveYz!H`hz+HCER>+7q zN?!v9J8FDme?~_^d=K~hxe+%XDIb3W65!6~W`}_pKYF%#O4dn2)%$(8oq|_i*>(o{ z8Kj?Nc#$Z%e2sMmfz{IlLI`2h!L7Wft`=i-zfH8c2Hm>*%EVyh*e%|V8=kV-i@JkF zqS>p_rb_NYn06H}NG293m_Rw+E7$P|Em{+l3o-hXrJQA)-&klmIA))i-1=a$qWye) zSSx+4@{+wn&r@74ioaW6Ywy)S#`o}gZI~&I^h9Iv8P&!I>tM&bmNY}ekb6>%?_~R> zt)TU-0*W>ts|4pGR1fa1G~2dB9_8DoV_i6UC*zS!&}=z&T^Gi8h#)TNG8oRYZT8XV z>->X-DnkOH+NMyM5gpVcj7!;Uu*G*lTIcF?wQzQ!lINu4;@AP#y@@NYmM`gr4Aaz6 z9|aSu7uJ^4r)Y4BknYI6K?Dcw(P;OuZZJZPqurQO)zg#gj!&xJ=Ty0MYjqLQlbR{H zoEs7!u&dvgw=Kov6y&dVnKwea!Y(@&KayF}t#4kSw^6q>f(QRt5KkfIIThbWcwI25 zu~&R2>GEFoYG821%FsgC!_7^<&gTWkBt6%!N7K_save0hEEc|_3msf|=M?Ty2bRGZ z6ENo@p2quwS;%rpLKQ+7U zp-w37a<{R@Caq>5wm1y2Yi)}?$j*LHCP&sRtiYDT3>?2v&68>PC;S9FLgk`IPOVh4 zXYKt~VTaMOQxaa-nW>d_TAAE!}Rpz&e!Aj&L6Jc_68v-m#3AcBX6+Jip|KCM;B^h|#R zaU5M-z$N1TO`q}F%JK$TC_4v7D&!DhE27*EL(39|Jqy`+OI4Al4C~}Jg1~t{1manQ zqvE1o7L+Ktg1`uuJ1=EKgf3&fF>UitI@x|7s1=aHpXGx4Ry*5W;UCPLi(5s$;HwDd z>D3;eFg%RneX+OlEV5C#5K^WOn>gQIlb<=w5;_Q)1hp&{}jh(R?9U6|nR&M9TAe?c0^_x;9$~ z>bCd2QA|K#uk7DzZ<{9=iEZoX6p@UUL#fwyhGMa~%G1tyuv49{Jv(Wh>%@r0Sp5lmpJHR#Oa1qWrp$$}qG!Hz8yRYiYL zpq9TP3z&&HlNN7O`mT(oE@e~08~2~-A!7X6w-SrLBz|L_ievt$bO8o!+GjQG{Xd1B zE`ll~Ekd}z$~*2Boo1=SdAmv70gQ2@^Wm=zZdsZq3g!xMlU&AXf~2#0v&vy(=MHVn zD_SBOyJ(76)TkCdLoRwZZ)6SG%||&q!8##{HRV8L<&nb&qVXuqiWk}$ndV%9T?&-? z(eeG?4Vj;iM4X`*E2ZQKXvG=}QLJ#ISAONGK=U8a95 z2hMs9CddRr9w1<_Sm6Goz^je==Cf-`uErm1px~`J(+=%|pYW0}BTvjQ78{Qd`e)fN zhLtkYLD);U{6pgd43st&C~X2}hBG8PkagvtNuVw8?_#`Pzzs*nfqx1OFXicwMk!Bl zaKI}%GBH|!c-rB6amqf9Se1Ozi_dOGTav#{tOV-t0-Bt!Yt_|`I~MuzM}7N+7Ck|_ zp1&|o!6Aiwgd1=371GaxG3?<^8a(XsL`Pz;OGx21-y&a#L(~KsMO{)j+e2#=EHm&8 z>>j&T-b|yE)F80mRGnS@;ijW=ZBqfHxFafl+1m(10z7H$&B zvFUdx$1LRkF9e+mEs*6j&h!`c5yxh*Hr1~2e&2&bJU-W*0CbuskbYBXU5UuQ!f_3K zPK-r#HT^t!o1v=~ywzTh<9XlE`AYEt`;piRyk)+gw?@l`{m4RzCQQq=qjZ+HCriZB zdLymxK3)%I+IK;Ro_o+}kA3dojmDRhgGT4jg{BgJ>aKN89h&V-tVFa{uMB1|W)@!} zwxx|+Okbr?k4%pxg4piFk{`u~w29Ol{6QwpcWOiwoqJ9GL53W4xL~eFhR`bYs}oK> zmTt!$dme|?tz{%uD8XPyee}l2hTeXSf9ZwC7FkVFuIW#MSop%@miG z*4Yb@7?#YYzj^Zl-vBjAojm4hzjZM4Bdf=WAGNp6f> zWH@}%vjt^L!4G+hhCOvJ-Z-7HJLb(dtZQ>zbQ4#2ehJSZsk|V95(qLw61Bg{X(uCp zJjh)j^lc)!o)qV%oux)VzC(n9d0H`A?l-gAGe^R_{9PrdOpxqtmq1?Dj9_wekcZ6Q6Bbev7Y!qf#&{T19E5 zTg==hodRlh!~L6vKbPw7%1d;9Mzf$6K5lPJ4F79$(^xB_MV_2ofmq(wk)%HVFtHt{>=T_y6nmrUB0F$4>me&4$qlYJfN2qELVpQ%xhOb>u z`%B6S*{XB>y|ZHN$rzrt&cbk3S#6MWHwM%)`azgfB%H&zut#Ue*i#E7%acmOjz-mh zY(O+WE~9VM9PsBd&Bugy1`-#GYbD^g;00=Rp2oA6j5fli;(HYsr;vK?2YFAInj|Bq zGp_Iaa}B?($@Hd-xasK`o=;y8lp?bt=eU^mg807TWH`$Hl}n--HZAjN;OcN>C-g>s z?M6zSnl>CAP_MC=gvD0X)-eGdMscl-oaIktjTZ?p;i9^}>rG$yj7M;rp1qnf2Olp} zV_W_Fw&c&79MCacF&VX=jm7nF!+X%Gu_HGDFJ%D8IBx~B%(t?3Q5-F%g>u@Wlu=M*Ey|7Oo|CEsY_ zqRaN!Dh>Z=W#7a#rgwo7;;4LCF27=ECB&z-*jLvvJgl5jIOQHXSjc2=-nB%nKPY*! z@UDs|#}BH!g{D!D7JY54W6uL8Bo5mWfg_V)-K8e?E#zV>kotIm*^ubHgtMOiFS!0c z6kO|_0P{Lh=*7)>Ag55n0r1`Xa)p53_ao_OH%N+Q=X3cH(@Hz!_`MpMfv$%^gl$jU z4(o=`a%D;P-a!5T6wy+hw(>~HEn|7QUA!;2;KAPk_f-@op`wTXsdDTh?2Mj>P|*7u zXJQH#zq1_TSy1%?lAega7OrH+pS6?nH#hSStv*dF+o5+9d{Pha3x)&-W)FKQgNp{C z{!O0qKXR9UWmJD$L>$8JFY~wn|*%>O_I-GB2IRfj>@=1H{Y&$hjs|oEiy(?9O zR=JHd-nRbW?uy7Ng+;>N`)jcDFiTODI=u(dow;=zuR2UkeW0la=1yXJv|4Jv6k0xg zvCS+kL#7{=ZwWOWG*bT7lecYzSVVm}wEUg!aQlheNh6tF zfJ1;8W4^@Xj}#kXH+!s2F;TqQsaCq!Zck2;>SN^N!6r3^pM)N+u1EIeozWd!4n?ax zKJU`ZUwIY}Vw*sp^k?_NKT^Wha&Kw4m_8I*o1qG!HK`IW~9GIf{C9v=kQzcb}?>Cx^z`v{k7c3q3-5qvm_xNz~6tK6T& zyjxiz=X4@&UQX@OU74AnVj&`j9S*^&2{nIA*2je{abCG)j7_3zrX$xDV`s<>MEl3{ zo9j_ejuI|!I_S`pBcF&FVQ)_jM?#W+5m65VUAsY>62M!_^2&K0qntP1M*V8r?{oFQ zn{3V$!*>&WnBmQZ<%nG#l;!M(truX4O1-y;`4_UkAwMxzf2{TFK*$*x>~s!WJYjpJ zOzI>bN1wo*8RuCI)+0Pw+q1Uyy1G6CodD@4Ml0LT8Pk+|{E7Y=ui(!VX9v9e;~D8& zLo8XVLQ4s_ZdyZPn0)IH-RdtLF_{;Qomy#^JDn;Pt~4PzUUAkgmEP*)8eE9(JteAl zq4{2H(>V7afzd$Wxnm?DBN`RtNk z<62~FqGE*44r!Q)Q)n8O>P~g+VOYZOeEnmE&6Kdl{k|HuwI^&4%S}gXqL$IrRhG$$ z1DX_G79wl`L!gAuuE=8-!fCx?Qc3;>07^hHG)b6GWYv@cwk0)S4c{#wyQN3ATfm>4 z1?JEL+8e*w92{Dw{s}#d6yt&WQe9tE@2vepRZ-aVOmdm{6R|8}C1h$P;1aLM4S;66 z_0sPtoxG#;DNA^y(lr^SmY~@QJ_|kLwtI0nU|OfVrET8`o>j}%CH4!k7|l}s$|7#a z@SJwBGEtIGGP)4|c=7Yd`P#EW+1aqMBJpmbnx@9*QrPvLs(#mp>Q@6%j~z`00#UgH ziiuL-O5H>Yb@pABm)~&Q7t`x&8(ks5jrL6*m0p=#$?hx}SxhZf;<+<>csCtoE?I3^ zJFDjw@YZV&a|XMPGM@sBEW07plnH}j&sYFf0&U<^;D|WJs_+dl;4~dgY>ql9FH9SJ zO9JPit%dfAcRp_Ah$fms>4PrdDIh~eyFC3Rt;ow#?54Z-` zhAfq84dz-O41DonoE!LN)PrD6coGoQK%DyoDSP+w?T?$ji|1&YyUPMDJP)_@ZuTon zf)I6$tND%VpkaB}Bvb>Rw9U)fRzs%9*p{eFdbmhrQaT6{P<$%EcNX?7`INgBwWTH_ zdI}4ru2WZAbB*2c)~{6URhs}sz_W`^8TN)%Zz$)!XNh5S1%e>^9t=3 zn)5$hCQx%WWcbw&Pa{isA(g)FWt;@qHn`8l=Gendyn=+a2hie2$oY*+nOX|U-hkvn z={L!_a|&dhW|*!HM_o75Lfnv#DH!}|n4T`8Yy8JxUq+ag6kjQBbL+85;*Bo5HCahJ za{C$5SMrzZr18ctq2^95*M3Z!eoBg0p5V1OHAZQ^R~XZ0iz4544hU8bo$8q{SL^pG zRN2slHO+;%4mAXV^-}k`ej~CW?4Mnwg_H)w}+Wc4AC2QTDt!FS#1LJt!pxFx}T_e@uqSsWH2YD}u zsQ>J`H{v=i(ok56O;w>UJnda<8$!F9IBzvq3KEu&DMbuuDU_h0#|${3N)LIkDSDJ7 zs@c9J)au1}y=g^iX7SNV&d;{>5ABfZjTCEb((9;2TCU98d28qMA`bNYAp@MD;@+w$x<71J zBU@><%Y_%;QHf)#o>!R`a!DzW%uN6)1ne-#~v$679wH0-xx^aS=j|&e^~YUXu4urLUu5d2p&P2zBE{ z|Ca6gU>JdG@OR)G60lousks1T8upQj$=1q$N>tMR4rPl2HABS_ndJtC3|;WPf$6#! zOlZTmjS}!l?+G_ZZqd(|`xm!8erI6sM!!rtAC9{Gi3MPDJopergLH&7ZCtEUYO#3;vfzWLeKlxDyh@ZeowI}W@}W7wHm z?6#u!Zzmt30x?`DxjEbgE)BwPxi|nb$AF^zOZLV@?l3=WHFz=(2&63N(-WHT80z@9u^ zkndX9a}QxNKAh1=GP?ETe3QwD3F+kH!Lf|ajklfTxAs#Y%ufWFfDaenZVEpSe?Q|a zG%)C#Vp;s<=hbdHYt7A`+l25ZJpQCjdbBs^-Gj2DiicW9y6lSE?D8l}*Gs$3D8UjD zx1w9&>&Zx?mI_AVxsG=HtctaPmDJ`TZw5N{7?dy66SHaKWrlKTfaDI_d!!vmBcUky zf{)t`R*bW&P1Jvu&PBKs6`h>jQHX>lM%UPf&x}QtQW$#y4z|1@O>A1VqR z)puAH`U|Mc?EGE~!C8?%X3Q*xuRE6EJ_~jA{8Y9iz(t1QWgekk|c1MoaN^ znV-}5jEpQNr$VJ$sPdn`V}tT|jjl7^#Co<|NL3cc^tL_ATwHRl7vP|;(|5XKa0A0g z2E+_~wn!1Vj>KkTVJq*d1J*Xq6rnLSlo&pb8tkkYAgU9$S2qZp*l% zsZ+FWc-PzBQ}n9Lj-22XUpuK!=rSqeqqUpIwyddqoMTl6WRO@Hd_b@fd5%^{7n~lgx*av&QW*V&fL8HJ!{P99u%Ic zxIRw$EE?;^8|EPd*->cl5NipCJp-|n_8PIRw=d70F(07Qu-XHO1U)FB;hCMUKxhF%{DMkhhU=t zPpmR~(|0H7h{mL)2OxfI%?PNSd@60kpX~d1D2}JeMF=@~qb9`><>@XWTBCe7B>W)= z98DxsjvZ-z3m5g_$f@bNu6b;39ityugR@TeX{#{$2{AHvEA#P{Wl<|>KMy7(E9c&3aW_rSzb2@Dhc9}2%4yw@?A|!ile9kP$!HI%)}K4w z6;0Zx%I}Rg_pO|i=h`V*IPhcksJ7_s?-SDv=x~|GXF7+Xh&=rS__dMdVI8joho+SI z8PiYpnxT(YUac>-zc)6@9#Nq`TI~9J%;C(B*8KP@=3uTb$B${$f%W%SGy@wn+Ds%z z=Yxwr1{mC~&er)IavWeq8Cr6`7!5;b`Rg(^_W3Y31xHX8JBPTRu%nMO%K9&kjMMDo zU?|RV`PDMU{|-COU{co+MKqQ$CitKiCy4TXk;4HMfeo(w3Sd|<2za-?)e7e;#YO^q z6PDt&>Gq0be+0t5A0a*x7M7htafp18NV9KiyASgOb z8V7F$KPbIrba7jICU&u})RU^~mS$o)UX=s_!p4_Fau}?z&>*WH1{e{jQl7@6F*F)F zF;(vUj9_A_MY^!r0iHS=c;=#0I1b-#=~mt5WAuHk%u05A7C;koC9fzIqS(rA>nHFDHTvY~q^yAWda~cWeoMAX8vCK;3#nV=|gAw~tDvXokR{c@y#nE$0 z%5mF*Rpf8Lvi(<#xw6f)dii$yGmbzf_Hgw{S`-^fP}@WmHOr+uENCX$E28rA-4{}Q zotvJQkGEZ9i~Vtw=s+dbb+8-Orr(neRU9yYnXPRVw-Rhzx&)hq^oQHK4wT-;xQx2; z@4%Z0#2D-H8{Y|k&{Cy$%C6VX+WM|!*w;HVd+*g{bP-{r4t6P`fHQtCj*xP$fnYU+7*<{sHF7xEp~OE zTmR7NVRD%Jm@Z~A=pqJNtL*%jGkM0tJC0Yv zFiegg01c=%mc}DHz3HABQ_a=VmMdS50>uc~L1T87T^?vk4%+;IagjJ$f^k9X3nt7& z#~Q~@B6t9$czNPS<~^}3sXZ{O`EKo0wPtEDd6lqx5;gh8do&~hSG4H|uUWkdr7sll zJeQ#kCPb^E=565Dd_Ln3W7eM%rH6Hd=T!VvR{B%xhi`lzteh+gVC^<7Pv&VQzMr69 zFN={9H`v*VY-R6GprFl+_8UwZ9uQ5~T!uQ(Lgf>`?QS^Z*uC`74_Ah{;6kVPs~VZC zFz}D{jl;^nWp0DfLTn$C_9e?mRdb0u4vNl{ ztg~JS2VgQCAZ)&@qDI1A=tM>nZ00<1?yI*ZAKzN4h@zrem@+rKQs&am9T%|XQSgG; z-wt7ho?;B+;qd+C7jWcEsfMPGMC3z|mPUomynkHTT~a<1web!<^j9omaNk|5_Y>NM z`w?xOV-~r$`s~}@GSjQzpA|mq072uIGo1k8uTKUHxg9v~)(yOTvllEoIO~@E)}HF} z7QAJZlv^c}2SpEi4QNxUg)>Ce`w=d=B>Ogyq+VlPjU%DzO(-tD>Y7FX@J+v^nN8A) zJK~|sr6Yr%>r}rkD9Cv{5+Ycx38i_SeR>PKuI173CAhOCxIX&zWLeu%_4t!8v`?LL zRN$L|QBQ<$$p^r0^c>z17iWredeCliRZy~cHdLoOKq4u;?gcNL@o(ehjntp!dyvI_rD0Ehe5!h~@Z-~;Ao=lXNFX7dQxa+mUsdJ|e~lb` ze53?q$Xt$@m5=`7vv7P%)|UXnHXcKpE|-8tLVaq)WUvn7XZ*bJPfr5%k!{zM@&g*M=_A=G#JkF8h)PjXZg8*rCluS(f3Z`#J;Olxz0FxaO z%6W|)c#5%|lwW%KM_ z9LgtY;9BCg?bJ9G!AAw=0>(+cuVcC%W{Ga)1j@tG0s8!DzM?=bNghE?1*SiL?s&8Zh#0 zc~3)Mx#KaF7==X?6^|TVrkU6mFY4OfD|h`CvkpX?i&kfF1IT-=+KY>Q#gkA^_M&E` zJ3xhn^H!x|ZB&2$bG-n49n#6yd$#2kohKe=KAHR;8uq1Lh=EWczwxIm?7FAkhb!}x zp#X{Gl!+O$o#ph#FD^T+32L)z0}zvRm;=yNEwzC=nx(D22^#PhPOfxi`RN>Wpg{=Y zToE`WQFCYdrowUhvNMm3v6LGXqBcIGj>#SI=|0+KD=8ilLWf&-Ve&KUNdp_Z$-Yy2 zCFT4UbtyTEi{z8%y+;&TGaJM@VZMMe0V%HixQsqfz#k@yec8&CUYJ9v;tvVqh|daMtb zyi@>dno1*fZnYY_A0f@Q?;}j0IpL}VmHX@S2~&yWv==)b)WoJ2;i?L@=nx>uQ0ojH z=ptG_-A6V#en__bLZHxYahQiu?u*>wJ07RPPT{1Ds2Mt#kaC_ zNEgdQ*bCHz7c4X+P$mhy;cvM6SRhOvlkZ^0VbsFj*h^r4Q5V?w7wFyd0F+b4YI;Rh z**7?QWT(F?T-tu4PX6)6B^di^S_l3aNC%Zk)x^`jK+0rE?v8`ZXkx`TIblg5=)!gs zXPN4aRD5^YI!uKehIu!-OQ^H~->HeJ`^{miZ`M;>;-HuP|JmgWEG{GuIYlvBIgvyoQm z(D1!ivWL+JN_3QVGcZdge!d?6xdI|HM7sXn8Sd-^4pH3yi4Ye1bp^J|KI?$3m(06+7N zN{Tdgw>%{xI1HMo$N}mNp8CapZ=13++okkXf6c3wL$AQKjZEXx0iBqyW70gMk+P@h{RV<#s$+c1IpK#S~5Pv@U~XH50VsX~nIzDg z2yyN^q+dO5n}#QqJ8yX@`IM2-1-E91;u~uIj$YB2spKo8`WoS16b@&$@AaL19@``* z1aBQ)3;1T?8D=jsyyHXbUJDt)A54ePv_U~KMIb>Zr%k}6ajHu*`zXpNmY)8X%{p=h zH{fB5m$~2oAo+O@(XJF-C9LXw z;5q(c|1L!M>qP}vTwGY4XEOY3<=mW~%R0u&ci^e?!K$ehNg3|3+WV#(NnwqK*?+%% z|LNq!N-+{nXT>za)p*Q|F=%{Bou3PSf{6byy30IXYGb*NwPUPKvzEnv!kYHWulM;0 zS>)I6pKku}f|`!@gL9?kLHEsFZ=WA0oc10p*bULy(kFpf8*nz<*q;|*61Su14d4N$ zG7yNjQ|Z1}q1Aq^9DV7vuI;!w1xeyP?bfTN*7<2c^71=j$z>xZrUA2CJO31}S<(N# ziX1yNUIdznY&vJBE&Ab!aM!G=FT^-LIZf8|hy!hS#JOioLj*_$j@@P)dp-!T^L9b# zf8+1&92JenCO*4$eUcLoc$VYA5tDTv`fyW^7YUOl{GgxLxkm^d$QAsV{#pgLIeiGK z#?2m|j-dxW_T9hx*ra&OrH}#XlQjMV$eDs|;tUa%-O9+jvyZTK;L&&IDG^E)Xcw>*6RSqiec*bvp4_LbZKn4g>x$DY+sRlQE<{@UApftkBw zjf!JB^i4QU@#%U9rG>QjA z@%Px~D7|rig1pJ zLEC8R)O-i0IuX>2>$*L1yrzS{Uw5}rz3^Q4hd#@B?Zh!NjZqn_NVZYm)LZesxeH;9 zSAP|?<~xD_f+@g&e@`{|d40|E4k~PT8OU*ca|gN%0FP$&t#C4wjf(o;p7!b>+B zj0^4&3Y0*cRkhbqDAw*v)11#QK^hkh_GQ2LVdC%BBkbYcq|jiSTN^?$U#eOv+lh(Z zTsPj!$6x0JMNpLYc(gwVc6hDlJ?ENOGrw%^8)%CN|2UO4cES@@jJv0%i?`D{Pkg$5xpeAZ;XhaYU;pz-ui0m1E*=(t@n_w?mnt zjz3IXblpxsL>w-}%$A$-u4^}4+2_<#9Z*Ar`pw2oiB#}SI!`@raCCU8s4#YT9dV)4 zaDPYCC~SWydd>oxe9dGw6k8_jKYARH4zonqE>Nq5oDK;V&4tT|L22@NsUGmRADys;jD~+sk`)WhBdDo!w=5z!D@Nfq8 z<-G4XKfdxK6GFCVHNWV~GcvGLvx;2&fISV*=WAiZcFconrb2P1d!5VGjz0}M{|TbV zmHfQ!R>a%2Qs7)a=(+bj%nYxoO`@56)tHV=S;H^QS2`MRuLxGm`_Y&n!Z-Hn=347e z`FL^Vex>ezzOdFXc)zwiQ6RHb^9~H4cH`ON_Xr3>>qZ#*+QaxAc8WhFqZ(jwM843l z@XGTZ=6(pg=eO#@FUdMIjp^kV(ZqP|WmZ}&scA63UKN~tvD)>_3lJl2U5fvc%&4u{l4JDr+bn;1@$MM7${Iz4KyIyGf|F(1ZNFP1B> z2Ms!CR0S+WE# zF)q`#q#j=Q&ff*%UHZSy$K{FH8fnhown!ETRIxl0_P6WgnFjp#AOFk3B_>*U7}T57 z`&-Jwwwp>+Tr0egF7wM#tMg)!HVUTcii8iF3|y^Uxyx^n;JO%akAK6B0Pxv=rY&rE zh_Knk$9R=*A_~y0s&{Pv?%O5UZxeWz7fi)J^0>aS%CkDnpY&A}iU*M5W?O9;09`y_xeH6{}HfRs3b@hkAoCju>|d2YaJj5~WY zr&Q8cz6SKnvvHFP2-xv#%DI=w-?P@mbpY^Q`*0`&l3Ge>FoOT1hFnSRGTvfg`+?E3 z=F*+3r3NdV6-!DBpZop&v8z6mD_Kf86r7FTH>>?Ok%I&vw@$Ao zxnxo!i(_$$p~&TQ3+Lr@XdY8NN|_waM-bS&kEK)#GAjB8!!&z>GX-X6#qtV4chW}35`DNvGtpY)*2#(Bg60t$4&VeeuU zYaj@7o1d^h#s=~)EqUONaPM&}fuM-4Bq&bn_lVvwy_-G41WLs3@a#I+1^-zk<3Fbl z!kOspp%bI?tjJ^mYD3F2MD z0;bugMo{LT|0}P^^%AyRzf4-HS-VBgWBaep6hKoSY(wJz?os;Ru~yFVz`bYVEX25f zzn}!La=k`&|HGLH8d?2|`*P%wrCX|tnaR_z=gD7p*G#j&#&PR1dm|xY!WirDz!q21 z-%K!TrvBx(_b)%l|3|xGA^0CS5!3iXYZ!Jw!V$Nhr55(fviw6Qh5ukX;}2Djs*uXw z9_JQQYB}Whi48t*WIbl?z?Z}!3GVfk*3IW5I7Bn>DpW5o`!C%m4GI-%u$N|>43n;^ z7QiFT$~NW*lAs(!>|u#JJpX%cQAc zE!m+o$27C4SUO6j}cZePdq$^i9%+8dpP> zPd+0GPsAi1dP~?5;1EUQ&emQR$vCSeBe zT4e91E@5ES@cVQ~UbJDsd=l#?3m}Y_83ksOM30KsLz}QCVN|rpf$p z?QZ#=WxDgv4ecR=0mX9Vl~?W-g(l6>>jZzB6~*+B9@mj|NW)4>!=U`caOrH;5(7sS zC&l$CO+txc%X=uBHj8=qIM(>Qwt&}hR)ml?ABs71Luz|K3)SW-1;~O@#Kxgkk=tOt zA>HroZh-i9EmvVD8BIbh`M9dqgYpG_;p`+|s89_xRa1tfeqG1Jo3~@*Mk3l(+t0s` zD&yB~quptWev+bm0o$|kU`9sx1=rP{43vdWN^YvhG5VZNJ}WQ}Dr6pI&~V&xdq%x! z^@C31CV`R$3N*~AW|<;^9nBXYOnDlOTe$FMsqw$AkhFcV%q=?VjtGy@);+W%e2R#L z)r=M?(iuW938881m!z=id-!2r8Pwd`T!;$P|^MeBPdSqq*iclZfes$*K8 zmYlzqzwh0Q)fr{}Hv-(P+OyD42vBDqr3UddcHS{%^>J(O>z}U+6LlFJa{cyKPfP4+ zv*^UaYW=G725%T;Tu#I61p;yms73K!#*KHt>8ETiDYP~n0vu#Gdv=*Rg|2Uzl1gPl zT@)q#fSOZxBm0WUO%G0aXF3YcB_J4hNqFn*J4tPZ=Ue|!Lbvi<9Kv|Oy+8bZefg0u z;lZn=JZ&Qa2gB!K$4|C%l0DXuKjsi6wU3*E0at=}BSR(TD=@PCZp%9ZCGu|lw;lAV<0R`wzv&nnC$(6G* z{09f2(Q7F;2lupSZWd07B&TEB;^IGCIdqWUm>}3k99$R~%H6afN@b~C5zgUnvW_y2 zz`6Q1ILIySiEG+d%U7?)wkajdaf1iw-=(&t)k4@Qdex{F^^7-~WnSvOF<$^^HYp@b z;H|9I68dFVWLXRk`IwPXGgPe9UV_c>n&=^!2q+Gu(^#`P0g~PS8$RJPKjoee52Rv- zPa1>Jmc6@~JubaQ9xa(ouxxtAr2j4+FqTRBS_Z+R62^W=We(n7=%y5ed&OnaY^? zhCFc`K!+)!o$baRB5vql%dex(y2kjMC9CU8Rx8n)l7}Oj`dj-?P*OGZ?eqE6%Wf`L z)2`0=5VFODn~LFNF~|WLZu#%*(;0;$GHvHoHvEvDKSK)dB1jfhj}T* zeQ`F~kxJFSZj^_|q+haCBKoX#@nfX9e7MRuT<9qR6w8dbR1qwlU7wq za83=wnGuPC*}Mn*bEj&MuzOOj$yqLA`sJNo0V-`Jo&>D7Rf>vN|3y@erh4|~@Ky|^ zpT02g<;KFO2br8^>~rkK@i%ii(7Hi0?_`=fpmeBw0a~Om1}G$G(xGVBNy3pAk_xT# zU~czYizhLua=6Z3)0AhaBy+uy6FBr*%?jEyo%F~YW~w62_A>4=eNYSe7-3YViy$g% z3*u*KrONVsl9P5jQTUdVTyLQT)S3DklQWdn1LOZFE@?a4DZa;lL;~d00Ud zd&HqV2uBo>ijnTu;~e~|;$RD)BYSfh)jx!>6}<5@`HQn>l)vn{C6lbv*-v%5@|GUG z=0APz^#of8HYkf3DFEn5VHoUtA$c>E-mX+nw(8bso@jJ^I8bs?wh6iKrT?Wj$=(0C!`XR9LcAKlYP19x1Qqse! z<9PlYv1Q0AsR0$vb6KF=djxOEFOZ(v+Zp}lJEg3?DH1R?Ci0I!^c7;j__(cl>iXKM zj}cVp=)AAe`jw6uLwtzVe|%h!so2_lGDn{L!>BzA>Hj_-J7N;#WLaspCyu=qnL>iKKSBh8{N~Wm-3xuZJC0R7RE;iNlFjg z=8Yw9$Av$agp=WlDWzMkYwjw|vq$DodE`%Qanj^CyHmH}P~l7hKj_gcm@}xcD80`H zahb3-!PAaW8$09p*_d}=4ZbNW%ODlzluBw9<4lsDq1ViTuI{>aauJx={kNQYM)to? z3^}a}H0pS-aldyhdq7Of9+I-m4%kJjv(U*T>A)~l@RN>00psSEEU6=^dYTda7z zP4iKDft2+27fxYW>zM{K6a#}*tCn;@?>yED&m-LYCO^cAgBSvR>0w8eP$PYNUW^A?l>D*$yjF| zQ;rgq&gHZ-rgse_sHF2&z0kZOMO%1+2oPe{E#JM%O-yzV``*)_^UVLDIQCK8-y%0W zs3!Wy$nF1~^8awk3;hjcV#c^&O^cNy$1an~OMm3k%L)ZZ<(JXb3OEDBM+fuc3#ykk zcvRD+!Qm7;c!RQ&vQ##AVA0_oS+1K{?aa9!IWayMxbhD)cf;NP{?N~F>tvYYwGyUq+Uw%s;d#O>+ z(#TcfL+JHu3kkwMuNV_LP6?CntejAt2Xo_rwv5l^K!9w7kVvl8|3C_O>vRcJ@*E+3 z4lP$q(EHHca0zq}bT*u0HW#~dSCz}KC!=3PH>pi~bn|dGq<;t2XK!+7p5u?CIC{vy z$sg@aeSGkq^z41jg)yn*F!HFPkgLh*=<0Qoij&-BEZ3D;7|*)z;`Y1=Ch7{sd7k45 z1g(Gya7ePv{+Or}F$&gBpxxMmewT*-(cX22HI;7bacqMQHbzk)U||piL8S=@DAfjn z1&EY@7#K_fN=T3z6$M8GMhqZbKxrWf1WAApKo~>=1QkOFp{NWs1!;j0f_EqA%$f6? z^W1Zud(VCDkNLaV`Plp0>s$4G*D8Tpx`F8VHxb=rCAxp_tV?LE?~wtZ*aDzP#M(%U zQI-)7R({CD$vt2qIxh-J_86IaSH)#w)1b@4(KSkqYslx1_7dF-qGs73iITv8ric08V$3+Jp<=&Ig{n5cfbf7{Y zTq%sLnTH(pq39g995@!mc6^HSD!)Kb?>Ue2jU6u9Ok|v7FC0)LrHI}V0bot6Pg05dP3jqR zw<#=BM|hHf2PVa~X8|*LcxrVcr;rrItINB)LIB!^lO^t4Z#~f5CIE6E8bHjwTHYxO zr?mDjIrqtK0gd;yPF7dk2tnL(dH}xw+w>ysD3iI~mtRE)(&x>8ycWzXQJ@bI?S9za zea>lhX)Q3*DbTKw8JSK_m`+f5T?}+R^ZkXG+hzgoZB}!NNT%%2h)i|%Tf5wMutaPP zi8WMC7nrBter4Oj2)3f**{z)wB5%7Dthr9|1-}>}P z1MfkkB38!1=fuBbvNI0PbV}zAL|UWaSA^vow-4uoBryHs;Nu;AngF$Zr1eALS&`Z! zm?TI1b}=+-GJg~=CQjyv1;1z}JYvWQZcE;<{yr=~Di2oat2|xEdiGe(i)I)6^0^d4 zo;JIWMrjK3FuVbniv~vi&v6~A*ip$My$M=k>j%sA=tEf4umSu_t=U1E$%g^uN0G&k z{Rj2VZ6b^VtoI{U{T#iT8rLD#{_HRiFk}O2HXmy69PmB;mTHVQfR-lKtO_0A^c^r& zjiul=tOon}aWaCPMw}|Pt$8^{SjR*-&G@$TB$ROvxfAWvFCY`-Dn=orZlHBzVmz@d zRU98eXU1^C3;Oq9U4NR8BXuH4|jfeK&x6b7zqp zgqor?t!kg>j5ostM4a=*b)0;;uIc18DCZdUWqEs6#LhSy8_Lz+d;WxCSMl+k41`!5D~O#2;vDr#?OPiXb(;+`E&{VooPJ(T@c`Q#LCHpA~# zU+Eq3FZgx(h@RmU&j7ODBVIz0GJSrG24=Rj+gZ3E{mq}<$Df|Td)RR>4nUx7Aa~&5 z1_Qa|4x`G5Jy83(Z3A3QqpaHmvZ6)6SR{$5WLeyJ$c}TIEml*cYsLJVGS-m38QAu!u5;R?Dv-ZILIirr4}>dP2T0N zTPd$}{>2cX*^ScHWpps)?no+y7_t9{i}vE`^QH4S2t!9Teh>rOa)#J zbZWx6qiA}1sFryEAZLMU*6-V#Tl-i~UQdjuJT|Td;OsBpwr9&fOmN_HuU6Dtp;X=z zTC(Xb9WfGc!jjsTdPl4{2l7zovhGrZI`q%&J@-Xf?q3h?-JF`U`0mOJ2ZusV#`(Fe zS9H<#_f=x^Ijmxf7C*NX<8~`}Mq{!FJM=!9^kBH;v!byoqBoL-NaoB^ z{Msk(WE~9EN?T`GVVpB~o^Yy3ccap9Db(z#5tcky*q^Mqm7ZoWu8T-+nIFDx!9H$^ zH09e$+PFd4E|_mpvs|^NRz59r00>!f#w~o7*NcK#RGdG=p^LtwSFw{2&765#T3KoR zJl}Bqp-421Sy3uuQy*27Dna9obRonDvb(aSL4S6j`%V(} z=HhAa_FwabjQ->VDygl3yxM*P_~7g#hxE>8K+EhN{z3%wVU2c~Z-ZfS*I_PpbTPtv zqD^OS!V%wtISvNz^1;hsjc+EEdpw`H>5R6E8VC!iXPgp~InO@efc$2GxN_bS%*pQ4 z&JlRvn{@brx4Ie(R!9c&?MaE9@#Az@xdheX%{KX*7A^?EfT;q-7^&ZJGzCCCbAdsP z-`4A~btL-;Hf>IIp$y2CSJ!P_*fNQ+TXIuZmhwh{89`(3pW6_u5R+Zf6X5Cgw~-NG z7fQ9}$fiGi+y|!OZ}!#6$|KcMKjZ(T=o|Njb6|HY$%CwNkUcvXo!Oq;d^ztf9NUzM zdopY!E2G^w@ulQ^a(iTc&gDz}X>X0pXnp(GRh5oHL}shlXFEWbeyPoP`J=6JDq}b& zbc$WwUga?fXNR1)SOCy5Fw>7*WhuayY9oAvyH0}XPzKe@MkTZaLJ(_A&)O;n>+zluEe0DUQhl~TgdwTW+sq0sx&)6(Ft?kn3(3!>E>&yO^I+%&dz(W zLb|M!a3{^4zAsz@jn%XeFDsGTI!ZCLP|b1XlvPxK(VvS>($wYAEq+pLSio;?W6>bi6%tSs``aKn@yAc#tVR zEyi6QX6UmIE=9X8f+dgsM&jxc`_j?8M&|32Y=Er8ao+Sct^Odmsyjf3e71A{Deg?v zpo=N1Ga}#KX?Bxt3J(P|B#mc!7?z*xRMELjVkEB|GA{VQ3uXH`y&5`(pgE9BH{a~= zt+l&}Je`oVlmkrzf?jD&c*R@;SYh85=f?OwSSAV%@lm=_6R??}J{YRS*w?*C{zkI@ z+aOiR!L%}B3O+wU?RJIhwvq=C>o3HR?vNAT>-P>+)D*xm>%r9SnY))!Fk`erVW&Ja zLKEtqbM;H1D-9T&B>i7jPi_{M2Qt~+M`Lgu-$QXujq1dQ)q@e2A`*qIqWty<*xSeN zqRXSANhd~95j!`?9gTQ?<j4B^X-)Dfma<1l7>w|Y3%p!HGPANDI<>-Byx^?3bWYZo;tT=S8|^ee(G z64~Xx#?SAnce)2hy!KxfE2ozK{MY=^c)xuQ^uU+kck``#P8?s@oc*nz66YmQ=DYg6t5)eNZ2@Tn0EqkZW7yCmC`Q(zuTpcdiANptXWVv zp}f}@(_sy5XFIkZI$VboaGz>rR@W}P2%n{mr9FUYt8%kDY6+3TA>$+v#Hb&W>>q?U z(mvVjoT(}OesJxj=f-`@zhlMLD&9(&zLONl7rd#nRNQXTuc0`fvAP&Ry6}ziHMp+b z8lpl1^BB5S*U6C#(r3M0Pm24*?u;wP<&DLk8;&6qMrZ|IhmvoXVJc9eu`<>&>b@$P0T^N})<>L9* z-rRdn_%rE5mIAchbgGKfb^jSxxyZq~9yabuJ4L1<(Hm@R`A7L4hRRTrWvJHUQTD$e zn);v5NBRC#CvXeyA0@rM+rTvKoXU83zk4r7o}@YW?q**ao^=6>h(9u7)ot?(^i;`$ zrD=V@o>rjLx_;#&y)Xs z#P_G|Ga}$~c72h5m<_w>N&!r##2|sVu5=)mH+RFB@kETT@DW#OTluEIcVCYW4LHwJ zR)pf%&oV(cekMi1MlFcom)U=xI$$v#nuSbsbVR=kYx`84^&Q7xZ;ici=Y102o5_vi zVG%a$#WZ|K*+4E7dHYz{bbVzei9cgv0yd#SsLRL~iSs61bu~TWR#YJfLnIl=({xR)TrQzoaMQCuwMeW$t@ktV2T()zyBN<72!@|#G-~^EI zLXd(#;J`l0l8LuE*NQnnJGh)ywp?OFP1Dmr6aj+XeLUZr3B?7Q@Ev6G?veZbeF93l9a8?-1r?+n=QB)#>m4UKy%@9+%6+h^ z&DYNyCp(H&vZKh>Q=Es$2>CV}p|9*^#$?A2fU2u@6c!b#@f4bL7RJa8?+w;ElcRA-_#b zn%LI9SjDfr-0o1m!yGWt>Nf0H?Rh)k2G2F)MnOIrdZfr)o=}aRm?;C|>#EW1ZLz&s zGUE@pU!Kuc?9sa<&cm+}W9u&(CLl+2*jEdGW7{TZ!EU<$nOrUQ&r(<5fMqT($coKB zA@zc!2|}Oa*vxnhs_9n)UjO~iq>hbH${uOJB=rm)?Q}#N|NTSw;x)oL>?qh6mHF_H zPtV&4qaR{awJCk`Ie`;R)acHgTmJNOm^GU^zUUINC>l?4_6T`eBkYDL&^|S+r@zU| z)>yli8q+x{j#8q-Fk!ZPAtrCj&#PP)6G*Sk0;2qDxXF{*3820GRjA;Q<{ulI4ViD{ z2bsFT*c9_nYc??EeK^705v^0>J=f#;$HtJg=#dlR!G6em2pBA~ZeKgNNX^oUP7l7ri<|#}R9dfAHc&idrDazzbTitEMJ% zP{xFCi0DJA37u$;L{)|R8oEU;oHN9p5%lD0P=hQ(_^qHplhwA$obMdBG;ESm5j~^H zYV^KYH_@=Fq$cBYb3h7Aus~&mHP?zHf#aFEJRlU^_h^yjZA))ajRsaS0y`!nj!LEL#tcU2F1M^=jO)0iYJ6kdxnU9-rYL@TvaWO*SFw#sx@52;-lc7GeRl;IwhUs z!QaA6iao0879P*IF=;v*p*yvf#NsE-uZxdA!P_bw`Ai&)2R3jVPY}OpZ=p{Ow;+cx zZ%jQ@VYj=UAHV&ZBe~2Kz2O-5Fx6%8195%IXT0}ll9+mv94dLP6y``)vP{`d_0kbH zdX)0rS^e_VtV|N>7fCB~Fw>;p(Z7-#)r;E0e*)Tk$r}8f?U$EM)ZldOcWv%CmLVya zoKeI$MY<&zRE|@l99LsR0W=Mcd>KVQxN*^1r%OmM5w>L~D`GOt>7A>t2|Yu2!NEzV z0>cK+v!c6@A-WSN58VI~pb5g|UBBG^l+nsjk~iR`hc=MZzd08f(kGoDtW} zP*~LAu-XM?LAF+ysvoe%8C|-t0Y=j$uc@BJaD8#Rc;u~+*Joqc7(gzo2G6LsrsJCx zYmPaR%>v+eH$!(Sf7wS|9{lOL^8UF=R!dIv(p`5+Aj3YCrBMWv5I7n?HbbR5s~EX0 z4*%R|&u*GcQq3wt=V~Xd?yJRVoo8wBbs%g`m$k_*x=Kyhrzygn;G~BM%G!0Imx8eT z)tt_`TVvh5Yg6L3K|XN?f7=~HCuSXXQR$~pdlnuDjB>SpRhMQ!>c2-=V@%@mXs_pIAk@j{WNCCRu+@rZCAQ@-w zh8J~Az7_Et(KAQbizBz}pMWN;AHd4yn@)=+>z89Z zRKh=%dtYc)jhy=s$i=JfQ-svOega+k8tKTCW4ROdN2#t;w~;D4Ph)45knlg$Zf}=N z@17nvjp1W6qyLGX9NL1eMUE({0t<90|E^!lDYYoyR1R&})Us|4_*4DRhOfFf)twAG zlNvUg#QI+HQ3}sUxBOiT3kjNiu0xTS(V@Umj%2wsC0M@WceNkNi9gkXQk^>r{JM5F z2}dwJFx?`p@SZ;N`wA7;+iFR{pBE2Nt~T`rwuu9@oZZ7RLFK?*rLTTB7zWIBY#M99 jqe?i>Z3*D_x-PEQP%a>6jt<~~8^1YWZEr=e@Vxb3lWQ`p diff --git a/NuGet.Config b/NuGet.Config new file mode 100644 index 0000000000..a57960c973 --- /dev/null +++ b/NuGet.Config @@ -0,0 +1,2 @@ + + diff --git a/NuGet.Local.Config b/NuGet.Local.Config new file mode 100644 index 0000000000..5412e1b2e8 --- /dev/null +++ b/NuGet.Local.Config @@ -0,0 +1,2 @@ + + diff --git a/README.md b/README.md index ca49f033cc..00f5728322 100644 --- a/README.md +++ b/README.md @@ -1,114 +1,121 @@

-Logo +Minecraft Console Client logo -# Minecraft Console Client (MCC) +# Minecraft Console Client 2.0 (MCC) -[Documentation](https://mccteam.github.io/) | [Download](#download) | [Installation](https://mccteam.github.io/guide/installation.html) | [Configuration](https://mccteam.github.io/guide/configuration.html) | [Usage](https://mccteam.github.io/guide/usage.html) +[Documentation](docs/index.md) | [Download](#download) | [Installation](docs/getting-started/installation.md) | [Configuration](docs/client/configuration.md) | [Usage](docs/getting-started/first-session.md) -
- -
- -[English](https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/README.md) | [Nederlands](https://github.com/MCCTeam/MCCTeam.github.io/blob/master/MCC-README/README-Dutch.md) | [Русский](https://github.com/MCCTeam/MCCTeam.github.io/blob/master/MCC-README/README-Russian.md) | [Српски](https://github.com/MCCTeam/MCCTeam.github.io/blob/master/MCC-README/README-Serbian_Cyrillic.md) | [Türkçe](https://github.com/MCCTeam/MCCTeam.github.io/blob/master/MCC-README/README-Turkish.md) | [Tiếng Việt](https://github.com/MCCTeam/MCCTeam.github.io/blob/master/MCC-README/README-Vietnamese.md) | [简体中文](https://github.com/MCCTeam/MCCTeam.github.io/blob/master/MCC-README/README-Chinese_Simplified.md) | [繁體中文](https://github.com/MCCTeam/MCCTeam.github.io/blob/master/MCC-README/README-Chinese_Traditional.md) +[![Build and tests](https://github.com/MCCTeam/Minecraft-Console-Client/actions/workflows/mcc.yml/badge.svg)](https://github.com/MCCTeam/Minecraft-Console-Client/actions/workflows/mcc.yml) +[![Discord](https://img.shields.io/discord/1018553894831403028?color=5865F2&logo=discord&logoColor=white)](https://discord.gg/sfBv4TtpC9) +[![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE.md) +[![.NET 10](https://img.shields.io/badge/.NET-10-512BD4)](https://dotnet.microsoft.com/en-us/download/dotnet/10.0)
-
+> [!WARNING] +> MCC 2.0 is an early development build. Features can change. Keep a copy of your configuration before an update. -[![GitHub Actions build status](https://github.com/MCCTeam/Minecraft-Console-Client/actions/workflows/build-and-release.yml/badge.svg)](https://github.com/MCCTeam/Minecraft-Console-Client/releases/latest) Discord server +## About -
- -> [!IMPORTANT] -> ## 📢 Major News -> -> After 13 years of active development, we are rewriting MCC from the ground up to make development faster and enable powerful new features. The rewrite is currently being led by [@milutinke](https://github.com/milutinke). Along the refactoring, the client is being polished, the UX and UI are being improved, new features are being added and existing ones improved. ✨ -> -> **Update (29.09.2026)** The early access build (No. 10) for the 2.0 client is available for download: [here](https://github.com/MCCTeam/Minecraft-Console-Client/releases/tag/MCC-2.0-early-access-build-10) -> -> Please leave feedback on Discord. -> -> After the release of the Minecraft Console Client 2.0, the old client will remain available to use but will no longer be updated. The new client is expected for public testing in the coming weeks. 🚀 -> -> Follow progress in [#🚀refactor-updates](https://discord.com/channels/1018553894831403028/1543210248439992461) on our [Discord server](https://discord.gg/sfBv4TtpC9)! +**Minecraft Console Client (MCC)** is an open-source terminal client for **Minecraft Java Edition**. Connect to servers, send chat and commands, and automate tasks without opening the graphical Minecraft client. -## **About ℹ️** +MCC runs on Windows, Linux, and macOS. Choose the classic console or the terminal UI (TUI). -**Minecraft Console Client (MCC)** is a lightweight cross-platform open-source Minecraft TUI client for **Java** edition that allows you to connect to any Minecraft Java server, send commands and receive text messages in a fast and easy way without having to open the main Minecraft game. +- Manage accounts, saved servers, and reconnect settings. +- Inspect players, entities, inventories, and world data. +- Use the TUI's menus, inventory views, maps, and entity browser. +- Automate tasks with Beacon `.bcn` scripts and plugins. +- Install source or compiled plugins from versioned marketplaces. +- Run unattended with file input or Docker Compose. ## Download -Get the latest release from the [Releases section](https://github.com/MCCTeam/Minecraft-Console-Client/releases/latest). +Find published builds in the [Releases section](https://github.com/MCCTeam/Minecraft-Console-Client/releases). Follow the [MCC 2.0 installation guide](docs/getting-started/installation.md) to choose your platform and start the client. -## Quick Install ⚡ +This checkout contains the new MCC 2.0 CLI. Its installers require matching MCC 2.0 release archives. Until those archives are published, [build this checkout from source](#building-from-source). Older builds can use different configuration and plugin formats. -Open a terminal in the folder where you want MCC and run: +## Quick install -Linux / macOS: +Once matching MCC 2.0 assets and the updated installers are published, download the installer for your platform. + +Linux or macOS, with [Python](https://www.python.org/downloads/) 3.10 or later: ```bash -curl -fsSL https://mccteam.github.io/install.sh | sh +curl -fsSLo install.sh https://mccteam.github.io/install.sh +sh install.sh ``` -Windows (PowerShell): +Windows PowerShell: ```powershell -iwr -useb https://mccteam.github.io/install.ps1 | iex +Invoke-WebRequest -UseBasicParsing https://mccteam.github.io/install.ps1 -OutFile install.ps1 +.\install.ps1 ``` -The script detects your architecture and downloads the right binary. For more options (including `wget` and manual downloads), see the [installation guide](https://mccteam.github.io/guide/installation.html). +The new installer selects one archive for your platform, checks its SHA-256 checksum, and keeps your existing configuration and plugin data. See [installation](docs/getting-started/installation.md) for manual downloads, version selection, and other options. + +## How to use -## How to use 📚 +- [Full documentation](docs/index.md) +- [Your first session](docs/getting-started/first-session.md) +- [Configuration](docs/client/configuration.md) +- [Command reference](docs/commands/index.md) +- [Beacon scripts and step-by-step tutorial](docs/beacon/index.md) +- [Official plugins and plugin development](docs/plugins/index.md) +- [Using and creating marketplaces](docs/marketplaces/index.md) +- [Docker Compose](docs/deployment/docker.md) -- 🌐 [Full Documentation](https://mccteam.github.io/) -- 📦 [Installation](https://mccteam.github.io/guide/installation.html) -- 📖 [Usage](https://mccteam.github.io/guide/usage.html) -- ⚙️ [Configuration](https://mccteam.github.io/guide/configuration.html) -- 🤖 [Chat Bots](https://mccteam.github.io/guide/chat-bots.html) -- 📝 [Sample configuration files](MinecraftClient/config/) +## Getting help -## Getting Help 🙋 +Read the documentation and search existing [Discussions](https://github.com/MCCTeam/Minecraft-Console-Client/discussions). If you need help, open a [new discussion](https://github.com/MCCTeam/Minecraft-Console-Client/discussions/new). -Check out the [Website](https://mccteam.github.io/), [README](https://github.com/MCCTeam/Minecraft-Console-Client/tree/master/MinecraftClient/config#minecraft-console-client-user-manual) and existing [Discussions](https://github.com/MCCTeam/Minecraft-Console-Client/discussions): Maybe your question is answered there. If not, please open a [New Discussion](https://github.com/MCCTeam/Minecraft-Console-Client/discussions/new) and ask your question. If you find a bug, please report it in the [Issues](https://github.com/MCCTeam/Minecraft-Console-Client/issues) section. +Report bugs in [Issues](https://github.com/MCCTeam/Minecraft-Console-Client/issues). Include your MCC version, operating system, server version, and steps to reproduce the problem. Remove credentials from any files you share. ## Discord -We now have a Discord server, click [here](https://discord.gg/sfBv4TtpC9) to join. +Join the [MCC Discord server](https://discord.gg/sfBv4TtpC9) to ask questions, share scripts and plugins, and follow development. -## Helping Us ❤️ +## Helping us -We are a small community so we need help to implement upgrades for new Minecraft versions, fixing bugs and expanding the project. We are always looking for motivated people to contribute. If you feel like it could be you, please have a look at the [issues](https://github.com/MCCTeam/Minecraft-Console-Client/issues?q=is%3Aissue+is%3Aopen+label%3Awaiting-for%3Acontributor) section :) +You can help by testing MCC 2.0, reporting bugs, improving the documentation, translating, or writing plugins. Browse the [open issues](https://github.com/MCCTeam/Minecraft-Console-Client/issues) to find work that interests you. -## How to contribute 📝 +## How to contribute -If you'd like to contribute to Minecraft Console Client, great, just fork the repository and submit a pull request on the _Master_ branch. To contribute to the website / online documentation see also the [Website repository](https://github.com/MCCTeam/MCCTeam.github.io). +Fork the repository and submit a pull request. Read the [contribution guide](docs/contributing/index.md) for setup and checks. -![Alt](https://repobeats.axiom.co/api/embed/c8a6c7c47fde8fcbe3727a21eab46e6b39dff60d.svg "Repobeats analytics image") +MCC's documentation lives in this repository. The [Beacon tutorial](docs/beacon/guide/index.md) and [plugin tutorial](docs/plugins/development/tutorial/index.md) provide examples you can build on. -## Translating Minecraft Console Client 🌍 +## Translating MCC -To improve translations for MCC, please visit: [Crowdin - Minecraft Console Client](https://crowdin.com/project/minecraft-console-client). +Help translate the client and its documentation through [Crowdin](https://crowdin.com/project/minecraft-console-client). Read the [translation guide](docs/contributing/translations.md) for resource files, placeholders, and documentation fallback. -## Building from the source 🏗️ +## Building from source -This section has been moved to our new [Documentation website](https://mccteam.github.io/guide/installation.html#building-from-the-source-code). +Install the [.NET SDK](https://dotnet.microsoft.com/en-us/download/dotnet/10.0) selected by `global.json`, currently `10.0.401`, and [Git](https://git-scm.com/downloads/). -## License ⚖️ +On Linux, macOS, or Windows with WSL: -Unless specifically stated, the code is from the MCC Team or Contributors, and available under CDDL-1.0. Else, the license and original author are mentioned in source file headers. -The main terms of the CDDL-1.0 license are basically the following: +```bash +git submodule update --init ConsoleInteractive +source tools/mcc-env.sh +mcc-build +mcc-test +mcc-run --help +``` -- You may use the licensed code in whole or in part in any program you desire, regardless of the license of the program as a whole (or rather, as excluding the code you are borrowing). The program itself may be open or closed source, free or commercial. -- However, in all cases, any modifications, improvements, or additions to the CDDL code (any code that is referenced in direct modifications to the CDDL code is considered an addition to the CDDL code, and so is bound by this requirement; e.g. a modification of a math function to use a fast lookup table makes that table itself an addition to the CDDL code, regardless of whether it's in a source code file of its own) must be made publicly and freely available in source, under the CDDL license itself. -- In any program (source or binary) that uses CDDL code, recognition must be given to the source (either project or author) of the CDDL code. As well, modifications to the CDDL code (which must be distributed as source) may not remove notices indicating the ancestry of the code. +For Windows development, we recommend [WSL](docs/contributing/windows.md#recommended-wsl). Native PowerShell helpers are available in [tools/windows](tools/windows/README.md): -More info at http://qstuff.blogspot.fr/2007/04/why-cddl.html -Full license at http://opensource.org/licenses/CDDL-1.0 +```powershell +.\tools\windows\build.ps1 +.\tools\windows\test.ps1 +.\tools\windows\run.ps1 -ClientArguments @('--help') +``` -## Uses technologies from -
- - Sentry - -
+See [building from source](docs/getting-started/installation.md#build-the-development-branch) for runtime folders, publishing, and platform requirements. The [Windows guide](docs/contributing/windows.md) covers both WSL and native PowerShell. + +Read the [source architecture guide](src/README.md) for the project layout and runtime flow. + +## License + +MCC 2.0 uses the [MIT license](LICENSE.md). External dependencies retain their own licenses. diff --git a/compose.yml b/compose.yml new file mode 100644 index 0000000000..3546cef94a --- /dev/null +++ b/compose.yml @@ -0,0 +1,20 @@ +services: + mcc: + build: + context: . + dockerfile: Dockerfile + image: mcc:2.0-local + init: true + stdin_open: true + tty: true + working_dir: /data + environment: + MCC_PLUGINS: /data/plugins + TERM: xterm-256color + volumes: + - mcc-data:/data + command: ["--configurations", "/data/configurations", "--console.General.ConsoleMode=classic"] + stop_grace_period: 15s + +volumes: + mcc-data: diff --git a/crowdin.yml b/crowdin.yml index 9d6bbe3a78..cfa5ccfb73 100644 --- a/crowdin.yml +++ b/crowdin.yml @@ -1,40 +1,34 @@ -"project_id_env": "CROWDIN_PROJECT_ID" -"api_token_env": "CROWDIN_PERSONAL_TOKEN" -"base_path": "./" -"preserve_hierarchy": true -"base_url": "https://api.crowdin.com" - -"files": [ - { - "source": "/MinecraftClient/Resources/Translations/Translations.resx", - "translation": "/MinecraftClient/Resources/Translations/Translations.%osx_code%.resx" - }, - { - "source": "/MinecraftClient/Resources/ConfigComments/ConfigComments.resx", - "translation": "/MinecraftClient/Resources/ConfigComments/ConfigComments.%osx_code%.resx" - }, - { - "source": "/MinecraftClient/Resources/AsciiArt/AsciiArt.resx", - "translation": "/MinecraftClient/Resources/AsciiArt/AsciiArt.%osx_code%.resx" - }, - { - "source": "/README.md", - "translation": "/docs/.vuepress/public/MCC-README/README-%language%.md" - }, - { - "source": "/docs/.vuepress/translations/en.json", - "translation": "/docs/.vuepress/translations/%osx_code%.json" - }, - { - "source": "/docs/README.md", - "translation": "/docs/l10n/%osx_code%/README.md" - }, - { - "source": "/docs/guide/*.md", - "translation": "/docs/l10n/%osx_code%/guide/%original_file_name%" - }, - { - "source": "/docs/guide/websocket/*.md", - "translation": "/docs/l10n/%osx_code%/guide/websocket/%original_file_name%" - } -] +{ + "project_id_env": "CROWDIN_PROJECT_ID", + "api_token_env": "CROWDIN_PERSONAL_TOKEN", + "base_path": "./", + "preserve_hierarchy": true, + "base_url": "https://api.crowdin.com", + "files": [ + { + "source": "/src/Mcc.Cli/Localization/Resources/MccStrings.resx", + "translation": "/src/Mcc.Cli/Localization/Resources/MccStrings.%locale%.resx" + }, + { + "source": "/src/Mcc.Cli/Resources/TextResources.resx", + "translation": "/src/Mcc.Cli/Resources/TextResources.%locale%.resx" + }, + { + "source": "/src/Mcc.Cli/Localization/Resources/ContainerArt.resx", + "translation": "/src/Mcc.Cli/Localization/Resources/ContainerArt.%locale%.resx" + }, + { + "source": "/docs/**/*.md", + "translation": "/docs/l10n/%locale%/**/%original_file_name%", + "ignore": [ + "/docs/l10n/**", + "/docs/.vuepress/**", + "/docs/node_modules/**" + ] + }, + { + "source": "/docs/.vuepress/ui/en.json", + "translation": "/docs/.vuepress/ui/%locale%.json" + } + ] +} diff --git a/docs/.vuepress/config.ts b/docs/.vuepress/config.ts index d03ff77ac4..b61024935e 100644 --- a/docs/.vuepress/config.ts +++ b/docs/.vuepress/config.ts @@ -1,168 +1,59 @@ -import process from 'node:process' - +import fs from 'node:fs' +import path from 'node:path' +import { fileURLToPath } from 'node:url' import { viteBundler } from '@vuepress/bundler-vite' -import { webpackBundler } from '@vuepress/bundler-webpack' -import { markdownChartPlugin } from '@vuepress/plugin-markdown-chart' -import { redirectPlugin } from '@vuepress/plugin-redirect' -import { searchPlugin } from '@vuepress/plugin-search' -import { shikiPlugin } from '@vuepress/plugin-shiki' import { defaultTheme } from '@vuepress/theme-default' +import { searchPlugin } from '@vuepress/plugin-search' +import { markdownChartPlugin } from '@vuepress/plugin-markdown-chart' import { defineUserConfig } from 'vuepress' -import type { Plugin } from 'vite' - -import { headConfig } from './configs/head.js' -import { mainConfig, defaultThemeConfig } from './configs/locales_config.js' - -const isProd = process.env.NODE_ENV === 'production' - -function vueTemplateTolerantPlugin(): Plugin { - let compilerSfc: typeof import('@vue/compiler-sfc') | undefined +const docsRoot = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '..') +const labels = JSON.parse(fs.readFileSync(path.join(docsRoot, '.vuepress/ui/en.json'), 'utf8')) +const groups = ['getting-started', 'client', 'commands', 'beacon', 'plugins', 'marketplaces', 'deployment', 'contributing', 'troubleshooting'] +function pages(folder: string): any[] { + if (!fs.existsSync(folder)) return [] + return fs.readdirSync(folder, { withFileTypes: true }) + .filter(item => item.name !== 'node_modules' && !item.name.startsWith('.')) + .sort((a, b) => a.name.localeCompare(b.name)) + .flatMap(item => { + const full = path.join(folder, item.name) + if (item.isDirectory()) return pages(full) + if (!item.name.endsWith('.md')) return [] + const content = fs.readFileSync(full, 'utf8') + const title = content.match(/^# (.+)$/m)?.[1] ?? item.name.replace(/\.md$/, '') + return [{ text: title, link: '/' + path.relative(docsRoot, full).replaceAll(path.sep, '/').replace(/\.md$/, '.html') }] + }) +} +function themeLocale(prefix: string, ui: Record): any { return { - name: 'vue-template-tolerant', - enforce: 'pre', - async transform(code, id) { - if (!id.endsWith('.html.vue') || !id.includes('/l10n/')) return - compilerSfc ??= await import('@vue/compiler-sfc') - const { errors } = compilerSfc.parse(code, { filename: id }) - if (errors.length === 0) return - - const lines = code.split('\n') - const mdPath = id - .replace(/\.vuepress\/\.temp\/pages\//, '') - .replace(/\.html\.vue$/, '.md') - - const yellow = '\x1b[33m' - const red = '\x1b[31m' - const dim = '\x1b[2m' - const cyan = '\x1b[36m' - const reset = '\x1b[0m' - - let output = `${yellow}[vue-template-tolerant]${reset} ${errors.length} error(s) in translation page (replaced with placeholder)\n` - output += ` ${dim}source:${reset} ${cyan}${mdPath}${reset}\n` - - for (const err of errors as any[]) { - const msg = err.message ?? String(err) - const loc = err.loc as { start: { line: number; column: number }; end: { line: number; column: number }; source?: string } | undefined - if (loc) { - output += `\n ${red}error${reset} ${msg}\n` - output += ` ${dim}at ${id}:${loc.start.line}:${loc.start.column}${reset}\n` - const startLine = Math.max(0, loc.start.line - 3) - const endLine = Math.min(lines.length, loc.start.line + 2) - for (let i = startLine; i < endLine; i++) { - const lineNum = String(i + 1).padStart(5) - const marker = i + 1 === loc.start.line ? `${red}>${reset}` : ' ' - const lineContent = lines[i].length > 200 ? lines[i].slice(0, 200) + '...' : lines[i] - output += ` ${marker} ${dim}${lineNum}${reset} | ${lineContent}\n` - if (i + 1 === loc.start.line) { - const col = loc.start.column - output += ` ${' '.repeat(5)} | ${' '.repeat(col)}${red}^${reset}\n` - } - } - } else { - output += `\n ${red}error${reset} ${msg}\n` - } - } - - console.warn(output) - return { - code: '', - map: null, - } - }, + selectLanguageName: ui.language, + navbar: groups.slice(0, 6).map(group => ({ text: ui[group] ?? labels[group], link: prefix + group + '/index.html' })), + sidebar: groups.map(group => ({ text: ui[group] ?? labels[group], collapsible: true, children: pages(path.join(docsRoot, prefix.slice(1), group)) })), + editLink: false, + contributors: false, + lastUpdated: false, + } +} +const locales: Record = { '/': { lang: 'en-US', title: 'MCC 2.0', description: 'Minecraft Console Client guides and reference' } } +const themeLocales: Record = { '/': themeLocale('/', labels) } +const translatedRoot = path.join(docsRoot, 'l10n') +if (fs.existsSync(translatedRoot)) { + for (const language of fs.readdirSync(translatedRoot)) { + if (!fs.existsSync(path.join(translatedRoot, language, 'index.md'))) continue + const prefix = '/l10n/' + language + '/' + const uiPath = path.join(docsRoot, '.vuepress/ui', language + '.json') + const ui = fs.existsSync(uiPath) ? { ...labels, ...JSON.parse(fs.readFileSync(uiPath, 'utf8')) } : { ...labels, language } + locales[prefix] = { lang: language, title: 'MCC 2.0', description: ui.description ?? locales['/'].description } + themeLocales[prefix] = themeLocale(prefix, ui) } } - export default defineUserConfig({ - // set site base to default value - base: '/', - - pagePatterns: ['**/*.md', '!.vuepress', '!node_modules', '!superpowers'], - - // extra tags in `` - head: headConfig, - - // site-level locales config - locales: mainConfig, - - // specify bundler via environment variable - bundler: - process.env.DOCS_BUNDLER === 'webpack' - ? webpackBundler() - : viteBundler({ - viteOptions: { - plugins: [vueTemplateTolerantPlugin()], - }, - }), - - // configure default theme - theme: defaultTheme({ - hostname: 'https://mccteam.github.io', - logo: '/images/MCC_logo.png', - repo: 'MCCTeam/Minecraft-Console-Client', - docsBranch: 'master', - docsDir: 'docs', - - // theme-level locales config - locales: defaultThemeConfig, - - themePlugins: { - // only enable git plugin in production mode - git: isProd, - // use shiki plugin in production mode instead - prismjs: !isProd, - seo: isProd - ? { - canonical: 'https://mccteam.github.io/', - } - : false, - sitemap: isProd - ? { - changefreq: 'weekly', - } - : false, - }, - }), - - // use plugins - plugins: [ - redirectPlugin({ - hostname: 'https://mccteam.github.io', - config: { - '/r/entity.html': 'https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Mapping/EntityType.cs', - '/r/entity/index.html': 'https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Mapping/EntityType.cs', - - '/r/item.html': 'https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Inventory/ItemType.cs', - '/r/item/index.html': 'https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Inventory/ItemType.cs', - - '/r/block.html': 'https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Mapping/Material.cs', - '/r/block/index.html': 'https://github.com/MCCTeam/Minecraft-Console-Client/blob/master/MinecraftClient/Mapping/Material.cs', - - '/r/l-code.html': 'https://github.com/MCCTeam/Minecraft-Console-Client/discussions/2239#discussion-4447461', - '/r/l-code/index.html': 'https://github.com/MCCTeam/Minecraft-Console-Client/discussions/2239#discussion-4447461', - - '/r/dc-fmt.html': 'https://www.writebots.com/discord-text-formatting/', - '/r/dc-fmt/index.html': 'https://www.writebots.com/discord-text-formatting/', - - '/r/tg-fmt.html': 'https://sendpulse.com/blog/telegram-text-formatting', - '/r/tg-fmt/index.html': 'https://sendpulse.com/blog/telegram-text-formatting', - }, - }), - - ...(isProd ? [shikiPlugin({ theme: 'dark-plus' })] : []), - - searchPlugin({ - maxSuggestions: 15, - hotKeys: ['s', '/'], - locales: { - '/': { - placeholder: 'Search', - }, - }, - }), - - markdownChartPlugin({ - mermaid: true, - }), - ], + base: process.env.DOCS_BASE ?? '/', + locales, + pagePatterns: ['**/*.md', '!.vuepress', '!node_modules'], + head: [['link', { rel: 'icon', href: '/icons/favicon-32x32.png' }]], + markdown: { component: false }, + bundler: viteBundler(), + theme: defaultTheme({ logo: '/images/MCC_logo.png', repo: 'MCCTeam/Minecraft-Console-Client', locales: themeLocales }), + plugins: [{ name: "mcc-literal-markdown", extendsMarkdown: (md) => { md.set({ html: false }) } }, searchPlugin({ maxSuggestions: 12 }), markdownChartPlugin({ mermaid: true })], }) diff --git a/docs/.vuepress/configs/gen_configs.py b/docs/.vuepress/configs/gen_configs.py deleted file mode 100644 index 2d7f2cdb9f..0000000000 --- a/docs/.vuepress/configs/gen_configs.py +++ /dev/null @@ -1,110 +0,0 @@ -import os - -LangNameMap = { - "af": "Afrikaans", - "ar": "اللغة العربية", - "ca": "Català", - "cs": " Čeština", - "da": "Dansk", - "de": "Deutsch", - "el": "Ελληνικά", - "en": "English", - "es": "Español", - "fi": "Suomi", - "fr": "Français", - "he": "עברית", - "hu": "Magyar", - "it": "Italiano", - "ja": "日本語", - "ko": "한국어", - "lv": "Latviešu", - "nl": "Nederlands", - "no": "Norsk", - "pl": "Polski", - "pt": "Português (Portugal)", - "pt-BR": "Português (Brasil)", - "ro": "Română", - "ru": "Русский", - "sr-Cyrl": "Српски (Cyrillic)", - "sv": "Svenska", - "tr": "Türkçe", - "uk": "Українська", - "vi": "Tiếng Việt", - "zh-Hans": "简体中文", - "zh-Hant": "繁體中文", -} - -print('Read ../translations/*.json') -LanguageCodeList = [ code.replace('.json', '') for code in os.listdir('../translations/') ] - -print('Read ./l10n_configs/config_templete.ts') -templete = "" -with open('./l10n_configs/config_templete.ts', 'r', encoding='utf-8') as file: - templete = file.read() - -for LanguageCode in LanguageCodeList: - content = templete - - content = content.replace("$LanguageName$", LangNameMap[LanguageCode], -1) - - content = content.replace("$LanguageCode$", LanguageCode, -1) - - content = content.replace("$LanguageCodeEscaped$", LanguageCode.replace('-', '_', -1), -1) - - if (LanguageCode == 'en'): - content = content.replace("$PathToPage$", '', -1) - else: - content = content.replace("$PathToPage$", '/l10n/' + LanguageCode, -1) - - print("Write ./l10n_configs/{}.ts".format(LanguageCode)) - - with open('./l10n_configs/{}.ts'.format(LanguageCode), 'w+', encoding='utf-8') as file: - file.write('/* This file is automatically generated by "gen_configs.py" */\n') - file.write(content) - -print("Write ./locales_config.ts") - -with open('./locales_config.ts', 'w+', encoding='utf-8') as file: - file.write('/* This file is automatically generated by "gen_configs.py" */\n') - file.write(r"import type { SiteLocaleConfig } from '@vuepress/shared'" + '\n') - file.write(r"import type { LocaleConfig } from '@vuepress/shared'" + '\n') - - file.write('\n') - - for LanguageCode in LanguageCodeList: - LanguageCodeEscaped = LanguageCode.replace('-', '_', -1) - file.write(r"import { mainConfig_") - file.write(LanguageCodeEscaped) - file.write(r", defaultThemeConfig_") - file.write(LanguageCodeEscaped) - file.write(r" } from './l10n_configs/") - file.write(LanguageCode) - file.write(".js'\n") - - file.write('\n') - - file.write(r"export const mainConfig: SiteLocaleConfig = {" + '\n') - for LanguageCode in LanguageCodeList: - file.write(r" '") - if (LanguageCode != 'en'): - file.write(r"/l10n/") - file.write(LanguageCode) - file.write(r"/': mainConfig_") - file.write(LanguageCode.replace('-', '_', -1)) - file.write(",\n") - file.write(r"}" + '\n') - - file.write('\n') - - file.write(r"export const defaultThemeConfig: LocaleConfig = {" + '\n') - for LanguageCode in LanguageCodeList: - file.write(r" '") - if (LanguageCode != 'en'): - file.write(r"/l10n/") - file.write(LanguageCode) - file.write(r"/': defaultThemeConfig_") - file.write(LanguageCode.replace('-', '_', -1)) - file.write(",\n") - file.write(r"}" + '\n') - -print("** Done! **") diff --git a/docs/.vuepress/configs/head.ts b/docs/.vuepress/configs/head.ts deleted file mode 100644 index 2873428d9d..0000000000 --- a/docs/.vuepress/configs/head.ts +++ /dev/null @@ -1,32 +0,0 @@ -import type { HeadConfig } from '@vuepress/core' - -export const headConfig: HeadConfig[] = [ - [ - 'link', - { - rel: 'icon', - type: 'image/png', - sizes: '16x16', - href: `/icons/favicon-16x16.png`, - }, - ], - [ - 'link', - { - rel: 'icon', - type: 'image/png', - sizes: '32x32', - href: `/icons/favicon-32x32.png`, - }, - ], - ['link', { rel: 'manifest', href: '/manifest.webmanifest' }], - ['meta', { name: 'application-name', content: 'MCC Doc' }], - ['meta', { name: 'apple-mobile-web-app-title', content: 'MCC Doc' }], - ['meta', { name: 'apple-mobile-web-app-status-bar-style', content: 'black' }], - [ - 'link', - { rel: 'apple-touch-icon', href: `/icons/apple-touch-icon.png` }, - ], - ['meta', { name: 'msapplication-TileColor', content: '#3eaf7c' }], - ['meta', { name: 'theme-color', content: '#3eaf7c' }], -] diff --git a/docs/.vuepress/configs/l10n_configs/af.ts b/docs/.vuepress/configs/l10n_configs/af.ts deleted file mode 100644 index 2b11ba60e2..0000000000 --- a/docs/.vuepress/configs/l10n_configs/af.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/af.json') - -export const mainConfig_af: SiteLocaleData = { - lang: 'af', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_af: DefaultThemeLocaleData = { - selectLanguageName: "Afrikaans", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/af/guide/", - activeMatch: "/l10n/af/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/af/guide/installation.md", - activeMatch: "/l10n/af/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/af/guide/usage.md", - activeMatch: "/l10n/af/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/af/guide/configuration.md", - activeMatch: "/l10n/af/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/af/guide/chat-bots.md", - activeMatch: "/l10n/af/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/af/guide/README.md", - "/l10n/af/guide/installation.md", - "/l10n/af/guide/usage.md", - "/l10n/af/guide/configuration.md", - "/l10n/af/guide/creating-text-script.md", - "/l10n/af/guide/chat-bots.md", - "/l10n/af/guide/creating-bots.md", - "/l10n/af/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/ar.ts b/docs/.vuepress/configs/l10n_configs/ar.ts deleted file mode 100644 index a08352b7fe..0000000000 --- a/docs/.vuepress/configs/l10n_configs/ar.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/ar.json') - -export const mainConfig_ar: SiteLocaleData = { - lang: 'ar', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_ar: DefaultThemeLocaleData = { - selectLanguageName: "اللغة العربية", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/ar/guide/", - activeMatch: "/l10n/ar/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/ar/guide/installation.md", - activeMatch: "/l10n/ar/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/ar/guide/usage.md", - activeMatch: "/l10n/ar/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/ar/guide/configuration.md", - activeMatch: "/l10n/ar/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/ar/guide/chat-bots.md", - activeMatch: "/l10n/ar/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/ar/guide/README.md", - "/l10n/ar/guide/installation.md", - "/l10n/ar/guide/usage.md", - "/l10n/ar/guide/configuration.md", - "/l10n/ar/guide/creating-text-script.md", - "/l10n/ar/guide/chat-bots.md", - "/l10n/ar/guide/creating-bots.md", - "/l10n/ar/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/ca.ts b/docs/.vuepress/configs/l10n_configs/ca.ts deleted file mode 100644 index 90ab4b2cc7..0000000000 --- a/docs/.vuepress/configs/l10n_configs/ca.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/ca.json') - -export const mainConfig_ca: SiteLocaleData = { - lang: 'ca', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_ca: DefaultThemeLocaleData = { - selectLanguageName: "Català", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/ca/guide/", - activeMatch: "/l10n/ca/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/ca/guide/installation.md", - activeMatch: "/l10n/ca/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/ca/guide/usage.md", - activeMatch: "/l10n/ca/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/ca/guide/configuration.md", - activeMatch: "/l10n/ca/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/ca/guide/chat-bots.md", - activeMatch: "/l10n/ca/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/ca/guide/README.md", - "/l10n/ca/guide/installation.md", - "/l10n/ca/guide/usage.md", - "/l10n/ca/guide/configuration.md", - "/l10n/ca/guide/creating-text-script.md", - "/l10n/ca/guide/chat-bots.md", - "/l10n/ca/guide/creating-bots.md", - "/l10n/ca/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/config_templete.ts b/docs/.vuepress/configs/l10n_configs/config_templete.ts deleted file mode 100644 index 3d817b5407..0000000000 --- a/docs/.vuepress/configs/l10n_configs/config_templete.ts +++ /dev/null @@ -1,85 +0,0 @@ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/$LanguageCode$.json') - -export const mainConfig_$LanguageCodeEscaped$: SiteLocaleData = { - lang: '$LanguageCode$', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_$LanguageCodeEscaped$: DefaultThemeLocaleData = { - selectLanguageName: "$LanguageName$", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "$PathToPage$/guide/", - activeMatch: "$PathToPage$/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "$PathToPage$/guide/installation.md", - activeMatch: "$PathToPage$/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "$PathToPage$/guide/usage.md", - activeMatch: "$PathToPage$/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "$PathToPage$/guide/configuration.md", - activeMatch: "$PathToPage$/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "$PathToPage$/guide/chat-bots.md", - activeMatch: "$PathToPage$/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "$PathToPage$/guide/README.md", - "$PathToPage$/guide/installation.md", - "$PathToPage$/guide/usage.md", - "$PathToPage$/guide/configuration.md", - "$PathToPage$/guide/creating-text-script.md", - "$PathToPage$/guide/chat-bots.md", - "$PathToPage$/guide/creating-bots.md", - "$PathToPage$/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/cs.ts b/docs/.vuepress/configs/l10n_configs/cs.ts deleted file mode 100644 index 14bb6893a2..0000000000 --- a/docs/.vuepress/configs/l10n_configs/cs.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/cs.json') - -export const mainConfig_cs: SiteLocaleData = { - lang: 'cs', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_cs: DefaultThemeLocaleData = { - selectLanguageName: " Čeština", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/cs/guide/", - activeMatch: "/l10n/cs/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/cs/guide/installation.md", - activeMatch: "/l10n/cs/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/cs/guide/usage.md", - activeMatch: "/l10n/cs/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/cs/guide/configuration.md", - activeMatch: "/l10n/cs/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/cs/guide/chat-bots.md", - activeMatch: "/l10n/cs/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/cs/guide/README.md", - "/l10n/cs/guide/installation.md", - "/l10n/cs/guide/usage.md", - "/l10n/cs/guide/configuration.md", - "/l10n/cs/guide/creating-text-script.md", - "/l10n/cs/guide/chat-bots.md", - "/l10n/cs/guide/creating-bots.md", - "/l10n/cs/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/da.ts b/docs/.vuepress/configs/l10n_configs/da.ts deleted file mode 100644 index 185a1b5c6a..0000000000 --- a/docs/.vuepress/configs/l10n_configs/da.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/da.json') - -export const mainConfig_da: SiteLocaleData = { - lang: 'da', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_da: DefaultThemeLocaleData = { - selectLanguageName: "Dansk", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/da/guide/", - activeMatch: "/l10n/da/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/da/guide/installation.md", - activeMatch: "/l10n/da/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/da/guide/usage.md", - activeMatch: "/l10n/da/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/da/guide/configuration.md", - activeMatch: "/l10n/da/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/da/guide/chat-bots.md", - activeMatch: "/l10n/da/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/da/guide/README.md", - "/l10n/da/guide/installation.md", - "/l10n/da/guide/usage.md", - "/l10n/da/guide/configuration.md", - "/l10n/da/guide/creating-text-script.md", - "/l10n/da/guide/chat-bots.md", - "/l10n/da/guide/creating-bots.md", - "/l10n/da/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/de.ts b/docs/.vuepress/configs/l10n_configs/de.ts deleted file mode 100644 index c151bcb8b7..0000000000 --- a/docs/.vuepress/configs/l10n_configs/de.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/de.json') - -export const mainConfig_de: SiteLocaleData = { - lang: 'de', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_de: DefaultThemeLocaleData = { - selectLanguageName: "Deutsch", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/de/guide/", - activeMatch: "/l10n/de/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/de/guide/installation.md", - activeMatch: "/l10n/de/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/de/guide/usage.md", - activeMatch: "/l10n/de/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/de/guide/configuration.md", - activeMatch: "/l10n/de/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/de/guide/chat-bots.md", - activeMatch: "/l10n/de/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/de/guide/README.md", - "/l10n/de/guide/installation.md", - "/l10n/de/guide/usage.md", - "/l10n/de/guide/configuration.md", - "/l10n/de/guide/creating-text-script.md", - "/l10n/de/guide/chat-bots.md", - "/l10n/de/guide/creating-bots.md", - "/l10n/de/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/el.ts b/docs/.vuepress/configs/l10n_configs/el.ts deleted file mode 100644 index 1885b04b25..0000000000 --- a/docs/.vuepress/configs/l10n_configs/el.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/el.json') - -export const mainConfig_el: SiteLocaleData = { - lang: 'el', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_el: DefaultThemeLocaleData = { - selectLanguageName: "Ελληνικά", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/el/guide/", - activeMatch: "/l10n/el/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/el/guide/installation.md", - activeMatch: "/l10n/el/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/el/guide/usage.md", - activeMatch: "/l10n/el/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/el/guide/configuration.md", - activeMatch: "/l10n/el/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/el/guide/chat-bots.md", - activeMatch: "/l10n/el/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/el/guide/README.md", - "/l10n/el/guide/installation.md", - "/l10n/el/guide/usage.md", - "/l10n/el/guide/configuration.md", - "/l10n/el/guide/creating-text-script.md", - "/l10n/el/guide/chat-bots.md", - "/l10n/el/guide/creating-bots.md", - "/l10n/el/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/en.ts b/docs/.vuepress/configs/l10n_configs/en.ts deleted file mode 100644 index d3ed87f60d..0000000000 --- a/docs/.vuepress/configs/l10n_configs/en.ts +++ /dev/null @@ -1,96 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/en.json') - -export const mainConfig_en: SiteLocaleData = { - lang: 'en', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_en: DefaultThemeLocaleData = { - selectLanguageName: "English", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/guide/", - activeMatch: "/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/guide/installation.md", - activeMatch: "/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/guide/usage.md", - activeMatch: "/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/guide/configuration.md", - activeMatch: "/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/guide/chat-bots.md", - activeMatch: "/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/guide/README.md", - "/guide/installation.md", - "/guide/usage.md", - "/guide/configuration.md", - "/guide/creating-text-script.md", - "/guide/chat-bots.md", - "/guide/creating-bots.md", - { - text: "WebSocket Bot", - collapsible: true, - children: [ - "/guide/websocket/README.md", - "/guide/websocket/Commands.md", - "/guide/websocket/Events.md", - ], - }, - "/guide/ai-assisted-development.md", - "/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/es.ts b/docs/.vuepress/configs/l10n_configs/es.ts deleted file mode 100644 index 3bfe0adc55..0000000000 --- a/docs/.vuepress/configs/l10n_configs/es.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/es.json') - -export const mainConfig_es: SiteLocaleData = { - lang: 'es', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_es: DefaultThemeLocaleData = { - selectLanguageName: "Español", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/es/guide/", - activeMatch: "/l10n/es/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/es/guide/installation.md", - activeMatch: "/l10n/es/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/es/guide/usage.md", - activeMatch: "/l10n/es/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/es/guide/configuration.md", - activeMatch: "/l10n/es/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/es/guide/chat-bots.md", - activeMatch: "/l10n/es/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/es/guide/README.md", - "/l10n/es/guide/installation.md", - "/l10n/es/guide/usage.md", - "/l10n/es/guide/configuration.md", - "/l10n/es/guide/creating-text-script.md", - "/l10n/es/guide/chat-bots.md", - "/l10n/es/guide/creating-bots.md", - "/l10n/es/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/fi.ts b/docs/.vuepress/configs/l10n_configs/fi.ts deleted file mode 100644 index 55f63c6571..0000000000 --- a/docs/.vuepress/configs/l10n_configs/fi.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/fi.json') - -export const mainConfig_fi: SiteLocaleData = { - lang: 'fi', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_fi: DefaultThemeLocaleData = { - selectLanguageName: "Suomi", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/fi/guide/", - activeMatch: "/l10n/fi/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/fi/guide/installation.md", - activeMatch: "/l10n/fi/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/fi/guide/usage.md", - activeMatch: "/l10n/fi/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/fi/guide/configuration.md", - activeMatch: "/l10n/fi/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/fi/guide/chat-bots.md", - activeMatch: "/l10n/fi/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/fi/guide/README.md", - "/l10n/fi/guide/installation.md", - "/l10n/fi/guide/usage.md", - "/l10n/fi/guide/configuration.md", - "/l10n/fi/guide/creating-text-script.md", - "/l10n/fi/guide/chat-bots.md", - "/l10n/fi/guide/creating-bots.md", - "/l10n/fi/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/fr.ts b/docs/.vuepress/configs/l10n_configs/fr.ts deleted file mode 100644 index daa39ecdd1..0000000000 --- a/docs/.vuepress/configs/l10n_configs/fr.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/fr.json') - -export const mainConfig_fr: SiteLocaleData = { - lang: 'fr', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_fr: DefaultThemeLocaleData = { - selectLanguageName: "Français", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/fr/guide/", - activeMatch: "/l10n/fr/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/fr/guide/installation.md", - activeMatch: "/l10n/fr/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/fr/guide/usage.md", - activeMatch: "/l10n/fr/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/fr/guide/configuration.md", - activeMatch: "/l10n/fr/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/fr/guide/chat-bots.md", - activeMatch: "/l10n/fr/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/fr/guide/README.md", - "/l10n/fr/guide/installation.md", - "/l10n/fr/guide/usage.md", - "/l10n/fr/guide/configuration.md", - "/l10n/fr/guide/creating-text-script.md", - "/l10n/fr/guide/chat-bots.md", - "/l10n/fr/guide/creating-bots.md", - "/l10n/fr/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/he.ts b/docs/.vuepress/configs/l10n_configs/he.ts deleted file mode 100644 index 1211da3650..0000000000 --- a/docs/.vuepress/configs/l10n_configs/he.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/he.json') - -export const mainConfig_he: SiteLocaleData = { - lang: 'he', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_he: DefaultThemeLocaleData = { - selectLanguageName: "עברית", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/he/guide/", - activeMatch: "/l10n/he/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/he/guide/installation.md", - activeMatch: "/l10n/he/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/he/guide/usage.md", - activeMatch: "/l10n/he/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/he/guide/configuration.md", - activeMatch: "/l10n/he/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/he/guide/chat-bots.md", - activeMatch: "/l10n/he/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/he/guide/README.md", - "/l10n/he/guide/installation.md", - "/l10n/he/guide/usage.md", - "/l10n/he/guide/configuration.md", - "/l10n/he/guide/creating-text-script.md", - "/l10n/he/guide/chat-bots.md", - "/l10n/he/guide/creating-bots.md", - "/l10n/he/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/hu.ts b/docs/.vuepress/configs/l10n_configs/hu.ts deleted file mode 100644 index a508580132..0000000000 --- a/docs/.vuepress/configs/l10n_configs/hu.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/hu.json') - -export const mainConfig_hu: SiteLocaleData = { - lang: 'hu', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_hu: DefaultThemeLocaleData = { - selectLanguageName: "Magyar", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/hu/guide/", - activeMatch: "/l10n/hu/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/hu/guide/installation.md", - activeMatch: "/l10n/hu/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/hu/guide/usage.md", - activeMatch: "/l10n/hu/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/hu/guide/configuration.md", - activeMatch: "/l10n/hu/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/hu/guide/chat-bots.md", - activeMatch: "/l10n/hu/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/hu/guide/README.md", - "/l10n/hu/guide/installation.md", - "/l10n/hu/guide/usage.md", - "/l10n/hu/guide/configuration.md", - "/l10n/hu/guide/creating-text-script.md", - "/l10n/hu/guide/chat-bots.md", - "/l10n/hu/guide/creating-bots.md", - "/l10n/hu/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/it.ts b/docs/.vuepress/configs/l10n_configs/it.ts deleted file mode 100644 index 1fb0788ee6..0000000000 --- a/docs/.vuepress/configs/l10n_configs/it.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/it.json') - -export const mainConfig_it: SiteLocaleData = { - lang: 'it', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_it: DefaultThemeLocaleData = { - selectLanguageName: "Italiano", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/it/guide/", - activeMatch: "/l10n/it/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/it/guide/installation.md", - activeMatch: "/l10n/it/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/it/guide/usage.md", - activeMatch: "/l10n/it/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/it/guide/configuration.md", - activeMatch: "/l10n/it/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/it/guide/chat-bots.md", - activeMatch: "/l10n/it/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/it/guide/README.md", - "/l10n/it/guide/installation.md", - "/l10n/it/guide/usage.md", - "/l10n/it/guide/configuration.md", - "/l10n/it/guide/creating-text-script.md", - "/l10n/it/guide/chat-bots.md", - "/l10n/it/guide/creating-bots.md", - "/l10n/it/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/ja.ts b/docs/.vuepress/configs/l10n_configs/ja.ts deleted file mode 100644 index 9e01426056..0000000000 --- a/docs/.vuepress/configs/l10n_configs/ja.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/ja.json') - -export const mainConfig_ja: SiteLocaleData = { - lang: 'ja', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_ja: DefaultThemeLocaleData = { - selectLanguageName: "日本語", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/ja/guide/", - activeMatch: "/l10n/ja/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/ja/guide/installation.md", - activeMatch: "/l10n/ja/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/ja/guide/usage.md", - activeMatch: "/l10n/ja/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/ja/guide/configuration.md", - activeMatch: "/l10n/ja/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/ja/guide/chat-bots.md", - activeMatch: "/l10n/ja/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/ja/guide/README.md", - "/l10n/ja/guide/installation.md", - "/l10n/ja/guide/usage.md", - "/l10n/ja/guide/configuration.md", - "/l10n/ja/guide/creating-text-script.md", - "/l10n/ja/guide/chat-bots.md", - "/l10n/ja/guide/creating-bots.md", - "/l10n/ja/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/ko.ts b/docs/.vuepress/configs/l10n_configs/ko.ts deleted file mode 100644 index fcb27fb0e6..0000000000 --- a/docs/.vuepress/configs/l10n_configs/ko.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/ko.json') - -export const mainConfig_ko: SiteLocaleData = { - lang: 'ko', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_ko: DefaultThemeLocaleData = { - selectLanguageName: "한국어", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/ko/guide/", - activeMatch: "/l10n/ko/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/ko/guide/installation.md", - activeMatch: "/l10n/ko/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/ko/guide/usage.md", - activeMatch: "/l10n/ko/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/ko/guide/configuration.md", - activeMatch: "/l10n/ko/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/ko/guide/chat-bots.md", - activeMatch: "/l10n/ko/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/ko/guide/README.md", - "/l10n/ko/guide/installation.md", - "/l10n/ko/guide/usage.md", - "/l10n/ko/guide/configuration.md", - "/l10n/ko/guide/creating-text-script.md", - "/l10n/ko/guide/chat-bots.md", - "/l10n/ko/guide/creating-bots.md", - "/l10n/ko/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/lv.ts b/docs/.vuepress/configs/l10n_configs/lv.ts deleted file mode 100644 index 8448d1a8fd..0000000000 --- a/docs/.vuepress/configs/l10n_configs/lv.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/lv.json') - -export const mainConfig_lv: SiteLocaleData = { - lang: 'lv', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_lv: DefaultThemeLocaleData = { - selectLanguageName: "Latviešu", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/lv/guide/", - activeMatch: "/l10n/lv/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/lv/guide/installation.md", - activeMatch: "/l10n/lv/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/lv/guide/usage.md", - activeMatch: "/l10n/lv/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/lv/guide/configuration.md", - activeMatch: "/l10n/lv/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/lv/guide/chat-bots.md", - activeMatch: "/l10n/lv/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/lv/guide/README.md", - "/l10n/lv/guide/installation.md", - "/l10n/lv/guide/usage.md", - "/l10n/lv/guide/configuration.md", - "/l10n/lv/guide/creating-text-script.md", - "/l10n/lv/guide/chat-bots.md", - "/l10n/lv/guide/creating-bots.md", - "/l10n/lv/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/nl.ts b/docs/.vuepress/configs/l10n_configs/nl.ts deleted file mode 100644 index d1c0dc2488..0000000000 --- a/docs/.vuepress/configs/l10n_configs/nl.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/nl.json') - -export const mainConfig_nl: SiteLocaleData = { - lang: 'nl', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_nl: DefaultThemeLocaleData = { - selectLanguageName: "Nederlands", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/nl/guide/", - activeMatch: "/l10n/nl/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/nl/guide/installation.md", - activeMatch: "/l10n/nl/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/nl/guide/usage.md", - activeMatch: "/l10n/nl/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/nl/guide/configuration.md", - activeMatch: "/l10n/nl/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/nl/guide/chat-bots.md", - activeMatch: "/l10n/nl/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/nl/guide/README.md", - "/l10n/nl/guide/installation.md", - "/l10n/nl/guide/usage.md", - "/l10n/nl/guide/configuration.md", - "/l10n/nl/guide/creating-text-script.md", - "/l10n/nl/guide/chat-bots.md", - "/l10n/nl/guide/creating-bots.md", - "/l10n/nl/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/no.ts b/docs/.vuepress/configs/l10n_configs/no.ts deleted file mode 100644 index 2b92c00f02..0000000000 --- a/docs/.vuepress/configs/l10n_configs/no.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/no.json') - -export const mainConfig_no: SiteLocaleData = { - lang: 'no', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_no: DefaultThemeLocaleData = { - selectLanguageName: "Norsk", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/no/guide/", - activeMatch: "/l10n/no/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/no/guide/installation.md", - activeMatch: "/l10n/no/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/no/guide/usage.md", - activeMatch: "/l10n/no/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/no/guide/configuration.md", - activeMatch: "/l10n/no/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/no/guide/chat-bots.md", - activeMatch: "/l10n/no/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/no/guide/README.md", - "/l10n/no/guide/installation.md", - "/l10n/no/guide/usage.md", - "/l10n/no/guide/configuration.md", - "/l10n/no/guide/creating-text-script.md", - "/l10n/no/guide/chat-bots.md", - "/l10n/no/guide/creating-bots.md", - "/l10n/no/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/pl.ts b/docs/.vuepress/configs/l10n_configs/pl.ts deleted file mode 100644 index 573ac16ba8..0000000000 --- a/docs/.vuepress/configs/l10n_configs/pl.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/pl.json') - -export const mainConfig_pl: SiteLocaleData = { - lang: 'pl', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_pl: DefaultThemeLocaleData = { - selectLanguageName: "Polski", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/pl/guide/", - activeMatch: "/l10n/pl/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/pl/guide/installation.md", - activeMatch: "/l10n/pl/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/pl/guide/usage.md", - activeMatch: "/l10n/pl/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/pl/guide/configuration.md", - activeMatch: "/l10n/pl/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/pl/guide/chat-bots.md", - activeMatch: "/l10n/pl/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/pl/guide/README.md", - "/l10n/pl/guide/installation.md", - "/l10n/pl/guide/usage.md", - "/l10n/pl/guide/configuration.md", - "/l10n/pl/guide/creating-text-script.md", - "/l10n/pl/guide/chat-bots.md", - "/l10n/pl/guide/creating-bots.md", - "/l10n/pl/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/pt-BR.ts b/docs/.vuepress/configs/l10n_configs/pt-BR.ts deleted file mode 100644 index 3d423d4468..0000000000 --- a/docs/.vuepress/configs/l10n_configs/pt-BR.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/pt-BR.json') - -export const mainConfig_pt_BR: SiteLocaleData = { - lang: 'pt-BR', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_pt_BR: DefaultThemeLocaleData = { - selectLanguageName: "Português (Brasil)", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/pt-BR/guide/", - activeMatch: "/l10n/pt-BR/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/pt-BR/guide/installation.md", - activeMatch: "/l10n/pt-BR/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/pt-BR/guide/usage.md", - activeMatch: "/l10n/pt-BR/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/pt-BR/guide/configuration.md", - activeMatch: "/l10n/pt-BR/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/pt-BR/guide/chat-bots.md", - activeMatch: "/l10n/pt-BR/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/pt-BR/guide/README.md", - "/l10n/pt-BR/guide/installation.md", - "/l10n/pt-BR/guide/usage.md", - "/l10n/pt-BR/guide/configuration.md", - "/l10n/pt-BR/guide/creating-text-script.md", - "/l10n/pt-BR/guide/chat-bots.md", - "/l10n/pt-BR/guide/creating-bots.md", - "/l10n/pt-BR/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/pt.ts b/docs/.vuepress/configs/l10n_configs/pt.ts deleted file mode 100644 index 09d9bc4627..0000000000 --- a/docs/.vuepress/configs/l10n_configs/pt.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/pt.json') - -export const mainConfig_pt: SiteLocaleData = { - lang: 'pt', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_pt: DefaultThemeLocaleData = { - selectLanguageName: "Português (Portugal)", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/pt/guide/", - activeMatch: "/l10n/pt/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/pt/guide/installation.md", - activeMatch: "/l10n/pt/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/pt/guide/usage.md", - activeMatch: "/l10n/pt/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/pt/guide/configuration.md", - activeMatch: "/l10n/pt/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/pt/guide/chat-bots.md", - activeMatch: "/l10n/pt/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/pt/guide/README.md", - "/l10n/pt/guide/installation.md", - "/l10n/pt/guide/usage.md", - "/l10n/pt/guide/configuration.md", - "/l10n/pt/guide/creating-text-script.md", - "/l10n/pt/guide/chat-bots.md", - "/l10n/pt/guide/creating-bots.md", - "/l10n/pt/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/ro.ts b/docs/.vuepress/configs/l10n_configs/ro.ts deleted file mode 100644 index 47d7ee1a9b..0000000000 --- a/docs/.vuepress/configs/l10n_configs/ro.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/ro.json') - -export const mainConfig_ro: SiteLocaleData = { - lang: 'ro', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_ro: DefaultThemeLocaleData = { - selectLanguageName: "Română", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/ro/guide/", - activeMatch: "/l10n/ro/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/ro/guide/installation.md", - activeMatch: "/l10n/ro/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/ro/guide/usage.md", - activeMatch: "/l10n/ro/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/ro/guide/configuration.md", - activeMatch: "/l10n/ro/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/ro/guide/chat-bots.md", - activeMatch: "/l10n/ro/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/ro/guide/README.md", - "/l10n/ro/guide/installation.md", - "/l10n/ro/guide/usage.md", - "/l10n/ro/guide/configuration.md", - "/l10n/ro/guide/creating-text-script.md", - "/l10n/ro/guide/chat-bots.md", - "/l10n/ro/guide/creating-bots.md", - "/l10n/ro/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/ru.ts b/docs/.vuepress/configs/l10n_configs/ru.ts deleted file mode 100644 index e085b7f816..0000000000 --- a/docs/.vuepress/configs/l10n_configs/ru.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/ru.json') - -export const mainConfig_ru: SiteLocaleData = { - lang: 'ru', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_ru: DefaultThemeLocaleData = { - selectLanguageName: "Русский", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/ru/guide/", - activeMatch: "/l10n/ru/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/ru/guide/installation.md", - activeMatch: "/l10n/ru/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/ru/guide/usage.md", - activeMatch: "/l10n/ru/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/ru/guide/configuration.md", - activeMatch: "/l10n/ru/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/ru/guide/chat-bots.md", - activeMatch: "/l10n/ru/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/ru/guide/README.md", - "/l10n/ru/guide/installation.md", - "/l10n/ru/guide/usage.md", - "/l10n/ru/guide/configuration.md", - "/l10n/ru/guide/creating-text-script.md", - "/l10n/ru/guide/chat-bots.md", - "/l10n/ru/guide/creating-bots.md", - "/l10n/ru/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/sr-Cyrl.ts b/docs/.vuepress/configs/l10n_configs/sr-Cyrl.ts deleted file mode 100644 index 0c4399e608..0000000000 --- a/docs/.vuepress/configs/l10n_configs/sr-Cyrl.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/sr-Cyrl.json') - -export const mainConfig_sr_Cyrl: SiteLocaleData = { - lang: 'sr-Cyrl', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_sr_Cyrl: DefaultThemeLocaleData = { - selectLanguageName: "Српски (Cyrillic)", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/sr-Cyrl/guide/", - activeMatch: "/l10n/sr-Cyrl/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/sr-Cyrl/guide/installation.md", - activeMatch: "/l10n/sr-Cyrl/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/sr-Cyrl/guide/usage.md", - activeMatch: "/l10n/sr-Cyrl/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/sr-Cyrl/guide/configuration.md", - activeMatch: "/l10n/sr-Cyrl/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/sr-Cyrl/guide/chat-bots.md", - activeMatch: "/l10n/sr-Cyrl/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/sr-Cyrl/guide/README.md", - "/l10n/sr-Cyrl/guide/installation.md", - "/l10n/sr-Cyrl/guide/usage.md", - "/l10n/sr-Cyrl/guide/configuration.md", - "/l10n/sr-Cyrl/guide/creating-text-script.md", - "/l10n/sr-Cyrl/guide/chat-bots.md", - "/l10n/sr-Cyrl/guide/creating-bots.md", - "/l10n/sr-Cyrl/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/sv.ts b/docs/.vuepress/configs/l10n_configs/sv.ts deleted file mode 100644 index 97764bb04b..0000000000 --- a/docs/.vuepress/configs/l10n_configs/sv.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/sv.json') - -export const mainConfig_sv: SiteLocaleData = { - lang: 'sv', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_sv: DefaultThemeLocaleData = { - selectLanguageName: "Svenska", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/sv/guide/", - activeMatch: "/l10n/sv/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/sv/guide/installation.md", - activeMatch: "/l10n/sv/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/sv/guide/usage.md", - activeMatch: "/l10n/sv/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/sv/guide/configuration.md", - activeMatch: "/l10n/sv/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/sv/guide/chat-bots.md", - activeMatch: "/l10n/sv/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/sv/guide/README.md", - "/l10n/sv/guide/installation.md", - "/l10n/sv/guide/usage.md", - "/l10n/sv/guide/configuration.md", - "/l10n/sv/guide/creating-text-script.md", - "/l10n/sv/guide/chat-bots.md", - "/l10n/sv/guide/creating-bots.md", - "/l10n/sv/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/tr.ts b/docs/.vuepress/configs/l10n_configs/tr.ts deleted file mode 100644 index b1be3c5eee..0000000000 --- a/docs/.vuepress/configs/l10n_configs/tr.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/tr.json') - -export const mainConfig_tr: SiteLocaleData = { - lang: 'tr', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_tr: DefaultThemeLocaleData = { - selectLanguageName: "Türkçe", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/tr/guide/", - activeMatch: "/l10n/tr/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/tr/guide/installation.md", - activeMatch: "/l10n/tr/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/tr/guide/usage.md", - activeMatch: "/l10n/tr/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/tr/guide/configuration.md", - activeMatch: "/l10n/tr/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/tr/guide/chat-bots.md", - activeMatch: "/l10n/tr/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/tr/guide/README.md", - "/l10n/tr/guide/installation.md", - "/l10n/tr/guide/usage.md", - "/l10n/tr/guide/configuration.md", - "/l10n/tr/guide/creating-text-script.md", - "/l10n/tr/guide/chat-bots.md", - "/l10n/tr/guide/creating-bots.md", - "/l10n/tr/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/uk.ts b/docs/.vuepress/configs/l10n_configs/uk.ts deleted file mode 100644 index c2fce2a75a..0000000000 --- a/docs/.vuepress/configs/l10n_configs/uk.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/uk.json') - -export const mainConfig_uk: SiteLocaleData = { - lang: 'uk', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_uk: DefaultThemeLocaleData = { - selectLanguageName: "Українська", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/uk/guide/", - activeMatch: "/l10n/uk/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/uk/guide/installation.md", - activeMatch: "/l10n/uk/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/uk/guide/usage.md", - activeMatch: "/l10n/uk/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/uk/guide/configuration.md", - activeMatch: "/l10n/uk/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/uk/guide/chat-bots.md", - activeMatch: "/l10n/uk/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/uk/guide/README.md", - "/l10n/uk/guide/installation.md", - "/l10n/uk/guide/usage.md", - "/l10n/uk/guide/configuration.md", - "/l10n/uk/guide/creating-text-script.md", - "/l10n/uk/guide/chat-bots.md", - "/l10n/uk/guide/creating-bots.md", - "/l10n/uk/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/vi.ts b/docs/.vuepress/configs/l10n_configs/vi.ts deleted file mode 100644 index 8e34c39618..0000000000 --- a/docs/.vuepress/configs/l10n_configs/vi.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/vi.json') - -export const mainConfig_vi: SiteLocaleData = { - lang: 'vi', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_vi: DefaultThemeLocaleData = { - selectLanguageName: "Tiếng Việt", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/vi/guide/", - activeMatch: "/l10n/vi/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/vi/guide/installation.md", - activeMatch: "/l10n/vi/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/vi/guide/usage.md", - activeMatch: "/l10n/vi/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/vi/guide/configuration.md", - activeMatch: "/l10n/vi/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/vi/guide/chat-bots.md", - activeMatch: "/l10n/vi/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/vi/guide/README.md", - "/l10n/vi/guide/installation.md", - "/l10n/vi/guide/usage.md", - "/l10n/vi/guide/configuration.md", - "/l10n/vi/guide/creating-text-script.md", - "/l10n/vi/guide/chat-bots.md", - "/l10n/vi/guide/creating-bots.md", - "/l10n/vi/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/zh-Hans.ts b/docs/.vuepress/configs/l10n_configs/zh-Hans.ts deleted file mode 100644 index 2de8559bc0..0000000000 --- a/docs/.vuepress/configs/l10n_configs/zh-Hans.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/zh-Hans.json') - -export const mainConfig_zh_Hans: SiteLocaleData = { - lang: 'zh-Hans', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_zh_Hans: DefaultThemeLocaleData = { - selectLanguageName: "简体中文", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/zh-Hans/guide/", - activeMatch: "/l10n/zh-Hans/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/zh-Hans/guide/installation.md", - activeMatch: "/l10n/zh-Hans/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/zh-Hans/guide/usage.md", - activeMatch: "/l10n/zh-Hans/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/zh-Hans/guide/configuration.md", - activeMatch: "/l10n/zh-Hans/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/zh-Hans/guide/chat-bots.md", - activeMatch: "/l10n/zh-Hans/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/zh-Hans/guide/README.md", - "/l10n/zh-Hans/guide/installation.md", - "/l10n/zh-Hans/guide/usage.md", - "/l10n/zh-Hans/guide/configuration.md", - "/l10n/zh-Hans/guide/creating-text-script.md", - "/l10n/zh-Hans/guide/chat-bots.md", - "/l10n/zh-Hans/guide/creating-bots.md", - "/l10n/zh-Hans/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/l10n_configs/zh-Hant.ts b/docs/.vuepress/configs/l10n_configs/zh-Hant.ts deleted file mode 100644 index b13d6053a2..0000000000 --- a/docs/.vuepress/configs/l10n_configs/zh-Hant.ts +++ /dev/null @@ -1,86 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleData } from '@vuepress/shared' -import type { DefaultThemeLocaleData } from '@vuepress/theme-default' -import { headConfig } from '../head.js' - -const Translation = require('../../translations/zh-Hant.json') - -export const mainConfig_zh_Hant: SiteLocaleData = { - lang: 'zh-Hant', - title: Translation.title, - description: Translation.description, - head: headConfig -} - -export const defaultThemeConfig_zh_Hant: DefaultThemeLocaleData = { - selectLanguageName: "繁體中文", - selectLanguageText: Translation.theme.selectLanguageText, - selectLanguageAriaLabel: Translation.theme.selectLanguageAriaLabel, - - navbar: [ - { - text: Translation.navbar.AboutAndFeatures, - link: "/l10n/zh-Hant/guide/", - activeMatch: "/l10n/zh-Hant/index.html", - }, - - { - text: Translation.navbar.Installation, - link: "/l10n/zh-Hant/guide/installation.md", - activeMatch: "/l10n/zh-Hant/guide/installation.html", - }, - - { - text: Translation.navbar.Usage, - link: "/l10n/zh-Hant/guide/usage.md", - activeMatch: "/l10n/zh-Hant/guide/usage.html", - }, - - { - text: Translation.navbar.Configuration, - link: "/l10n/zh-Hant/guide/configuration.md", - activeMatch: "/l10n/zh-Hant/guide/configuration.html", - }, - - { - text: Translation.navbar.ChatBots, - link: "/l10n/zh-Hant/guide/chat-bots.md", - activeMatch: "/l10n/zh-Hant/guide/chat-bots.html", - }, - - { - text: Translation.helpUsTranslate, - link: "https://crowdin.com/project/minecraft-console-client", - }, - ], - - sidebar: [ - "/l10n/zh-Hant/guide/README.md", - "/l10n/zh-Hant/guide/installation.md", - "/l10n/zh-Hant/guide/usage.md", - "/l10n/zh-Hant/guide/configuration.md", - "/l10n/zh-Hant/guide/creating-text-script.md", - "/l10n/zh-Hant/guide/chat-bots.md", - "/l10n/zh-Hant/guide/creating-bots.md", - "/l10n/zh-Hant/guide/contibuting.md" - ], - - // page meta - editLinkText: Translation.theme.editLinkText, - lastUpdatedText: Translation.theme.lastUpdatedText, - contributorsText: Translation.theme.contributorsText, - - // custom containers - tip: Translation.theme.tip, - warning: Translation.theme.warning, - danger: Translation.theme.danger, - - // 404 page - notFound: Translation.theme.notFound, - backToHome: Translation.theme.backToHome, - - // a11y - openInNewWindow: Translation.theme.openInNewWindow, - toggleColorMode: Translation.theme.toggleColorMode, - toggleSidebar: Translation.theme.toggleSidebar, -} diff --git a/docs/.vuepress/configs/locales_config.ts b/docs/.vuepress/configs/locales_config.ts deleted file mode 100644 index 4aae0a8e3c..0000000000 --- a/docs/.vuepress/configs/locales_config.ts +++ /dev/null @@ -1,103 +0,0 @@ -/* This file is automatically generated by "gen_configs.py" */ -import type { SiteLocaleConfig } from '@vuepress/shared' -import type { LocaleConfig } from '@vuepress/shared' - -import { mainConfig_af, defaultThemeConfig_af } from './l10n_configs/af.js' -import { mainConfig_ar, defaultThemeConfig_ar } from './l10n_configs/ar.js' -import { mainConfig_ca, defaultThemeConfig_ca } from './l10n_configs/ca.js' -import { mainConfig_cs, defaultThemeConfig_cs } from './l10n_configs/cs.js' -import { mainConfig_da, defaultThemeConfig_da } from './l10n_configs/da.js' -import { mainConfig_de, defaultThemeConfig_de } from './l10n_configs/de.js' -import { mainConfig_el, defaultThemeConfig_el } from './l10n_configs/el.js' -import { mainConfig_en, defaultThemeConfig_en } from './l10n_configs/en.js' -import { mainConfig_es, defaultThemeConfig_es } from './l10n_configs/es.js' -import { mainConfig_fi, defaultThemeConfig_fi } from './l10n_configs/fi.js' -import { mainConfig_fr, defaultThemeConfig_fr } from './l10n_configs/fr.js' -import { mainConfig_he, defaultThemeConfig_he } from './l10n_configs/he.js' -import { mainConfig_hu, defaultThemeConfig_hu } from './l10n_configs/hu.js' -import { mainConfig_it, defaultThemeConfig_it } from './l10n_configs/it.js' -import { mainConfig_ja, defaultThemeConfig_ja } from './l10n_configs/ja.js' -import { mainConfig_ko, defaultThemeConfig_ko } from './l10n_configs/ko.js' -import { mainConfig_lv, defaultThemeConfig_lv } from './l10n_configs/lv.js' -import { mainConfig_nl, defaultThemeConfig_nl } from './l10n_configs/nl.js' -import { mainConfig_no, defaultThemeConfig_no } from './l10n_configs/no.js' -import { mainConfig_pl, defaultThemeConfig_pl } from './l10n_configs/pl.js' -import { mainConfig_pt_BR, defaultThemeConfig_pt_BR } from './l10n_configs/pt-BR.js' -import { mainConfig_pt, defaultThemeConfig_pt } from './l10n_configs/pt.js' -import { mainConfig_ro, defaultThemeConfig_ro } from './l10n_configs/ro.js' -import { mainConfig_ru, defaultThemeConfig_ru } from './l10n_configs/ru.js' -import { mainConfig_sr_Cyrl, defaultThemeConfig_sr_Cyrl } from './l10n_configs/sr-Cyrl.js' -import { mainConfig_sv, defaultThemeConfig_sv } from './l10n_configs/sv.js' -import { mainConfig_tr, defaultThemeConfig_tr } from './l10n_configs/tr.js' -import { mainConfig_uk, defaultThemeConfig_uk } from './l10n_configs/uk.js' -import { mainConfig_vi, defaultThemeConfig_vi } from './l10n_configs/vi.js' -import { mainConfig_zh_Hans, defaultThemeConfig_zh_Hans } from './l10n_configs/zh-Hans.js' -import { mainConfig_zh_Hant, defaultThemeConfig_zh_Hant } from './l10n_configs/zh-Hant.js' - -export const mainConfig: SiteLocaleConfig = { - '/l10n/af/': mainConfig_af, - '/l10n/ar/': mainConfig_ar, - '/l10n/ca/': mainConfig_ca, - '/l10n/cs/': mainConfig_cs, - '/l10n/da/': mainConfig_da, - '/l10n/de/': mainConfig_de, - '/l10n/el/': mainConfig_el, - '/': mainConfig_en, - '/l10n/es/': mainConfig_es, - '/l10n/fi/': mainConfig_fi, - '/l10n/fr/': mainConfig_fr, - '/l10n/he/': mainConfig_he, - '/l10n/hu/': mainConfig_hu, - '/l10n/it/': mainConfig_it, - '/l10n/ja/': mainConfig_ja, - '/l10n/ko/': mainConfig_ko, - '/l10n/lv/': mainConfig_lv, - '/l10n/nl/': mainConfig_nl, - '/l10n/no/': mainConfig_no, - '/l10n/pl/': mainConfig_pl, - '/l10n/pt-BR/': mainConfig_pt_BR, - '/l10n/pt/': mainConfig_pt, - '/l10n/ro/': mainConfig_ro, - '/l10n/ru/': mainConfig_ru, - '/l10n/sr-Cyrl/': mainConfig_sr_Cyrl, - '/l10n/sv/': mainConfig_sv, - '/l10n/tr/': mainConfig_tr, - '/l10n/uk/': mainConfig_uk, - '/l10n/vi/': mainConfig_vi, - '/l10n/zh-Hans/': mainConfig_zh_Hans, - '/l10n/zh-Hant/': mainConfig_zh_Hant, -} - -export const defaultThemeConfig: LocaleConfig = { - '/l10n/af/': defaultThemeConfig_af, - '/l10n/ar/': defaultThemeConfig_ar, - '/l10n/ca/': defaultThemeConfig_ca, - '/l10n/cs/': defaultThemeConfig_cs, - '/l10n/da/': defaultThemeConfig_da, - '/l10n/de/': defaultThemeConfig_de, - '/l10n/el/': defaultThemeConfig_el, - '/': defaultThemeConfig_en, - '/l10n/es/': defaultThemeConfig_es, - '/l10n/fi/': defaultThemeConfig_fi, - '/l10n/fr/': defaultThemeConfig_fr, - '/l10n/he/': defaultThemeConfig_he, - '/l10n/hu/': defaultThemeConfig_hu, - '/l10n/it/': defaultThemeConfig_it, - '/l10n/ja/': defaultThemeConfig_ja, - '/l10n/ko/': defaultThemeConfig_ko, - '/l10n/lv/': defaultThemeConfig_lv, - '/l10n/nl/': defaultThemeConfig_nl, - '/l10n/no/': defaultThemeConfig_no, - '/l10n/pl/': defaultThemeConfig_pl, - '/l10n/pt-BR/': defaultThemeConfig_pt_BR, - '/l10n/pt/': defaultThemeConfig_pt, - '/l10n/ro/': defaultThemeConfig_ro, - '/l10n/ru/': defaultThemeConfig_ru, - '/l10n/sr-Cyrl/': defaultThemeConfig_sr_Cyrl, - '/l10n/sv/': defaultThemeConfig_sv, - '/l10n/tr/': defaultThemeConfig_tr, - '/l10n/uk/': defaultThemeConfig_uk, - '/l10n/vi/': defaultThemeConfig_vi, - '/l10n/zh-Hans/': defaultThemeConfig_zh_Hans, - '/l10n/zh-Hant/': defaultThemeConfig_zh_Hant, -} diff --git a/docs/.vuepress/public/README.md b/docs/.vuepress/public/README.md deleted file mode 100644 index 81bcaf0518..0000000000 --- a/docs/.vuepress/public/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# About - -A documentation website for Minecraft Console Client (MCC) written using [Vue Press 2.0](https://v2.vuepress.vuejs.org/) - -## How to contribute - -### Requirements: - -- Git -- Node JS >= v12 -- Yarn - -### Install Yarn if you don't have it: - -```bash -npm i yarn -g -``` - -Fork and clone the repository `Minecraft-Console-Client`. - -All of the source is in the `docs` directory. - -### Install dependencies: - -```bash -yarn install -``` - -### Run developer mode: - -```bash -yarn docs:dev -``` - -_If you have the port `8080` taken, use the `--port ` for a custom port._ - -Change things - -Commit, push and open a pull request. diff --git a/docs/.vuepress/public/examples/beacon/census.bcn b/docs/.vuepress/public/examples/beacon/census.bcn new file mode 100644 index 0000000000..2a4df3000e --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/census.bcn @@ -0,0 +1,18 @@ +# beacon 1 +# needs: chat.send entity.read + +function census() + set cows to entities.count("cow", 48) + set sheep to entities.count("sheep", 48) + set pigs to entities.count("pig", 48) + + return "Pasture census: {cows} cows, {sheep} sheep, {pigs} pigs." +end function + +every 300 seconds + say census() +end every + +on chat when message is "!census" + say census() +end on diff --git a/docs/.vuepress/public/examples/beacon/guide/functions.bcn b/docs/.vuepress/public/examples/beacon/guide/functions.bcn new file mode 100644 index 0000000000..8f4b2a7a6d --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/guide/functions.bcn @@ -0,0 +1,8 @@ +# beacon 1 +function subtotal(price, count) + return price * count +end function +set result to subtotal(3, 4) +assert(result is 12, "subtotal") +assert(subtotal(3, 0) is 0, "empty order") +show "Subtotal: {result}" diff --git a/docs/.vuepress/public/examples/beacon/guide/greeter.bcn b/docs/.vuepress/public/examples/beacon/guide/greeter.bcn new file mode 100644 index 0000000000..359bdf0a38 --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/guide/greeter.bcn @@ -0,0 +1,5 @@ +# beacon 1 +# needs: chat.send +on chat as e when trim(lower(e.message)) is "!hello" + whisper e.player "Hello, {e.player}!" +end on diff --git a/docs/.vuepress/public/examples/beacon/guide/hello.bcn b/docs/.vuepress/public/examples/beacon/guide/hello.bcn new file mode 100644 index 0000000000..4937feff2e --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/guide/hello.bcn @@ -0,0 +1,2 @@ +# beacon 1 +show "Hello from Beacon" diff --git a/docs/.vuepress/public/examples/beacon/guide/price.bcn b/docs/.vuepress/public/examples/beacon/guide/price.bcn new file mode 100644 index 0000000000..64bd28e4bb --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/guide/price.bcn @@ -0,0 +1,11 @@ +# beacon 1 +# desc: Calculate the current bread order. +# example: /guide-price bread +command "/guide-price " + set item to lower(arg("item")) + if item is "bread" then + show "Bread costs 3 coins" + else + show "Unknown item: {item}" + end if +end command diff --git a/docs/.vuepress/public/examples/beacon/guide/saved-counter.bcn b/docs/.vuepress/public/examples/beacon/guide/saved-counter.bcn new file mode 100644 index 0000000000..b78c365d2e --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/guide/saved-counter.bcn @@ -0,0 +1,5 @@ +# beacon 1 +set count to saved("count") or 0 +set count to count + 1 +save "count" to count +show "Run count: {count}" diff --git a/docs/.vuepress/public/examples/beacon/guide/schedule.bcn b/docs/.vuepress/public/examples/beacon/guide/schedule.bcn new file mode 100644 index 0000000000..c4fb90d1b3 --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/guide/schedule.bcn @@ -0,0 +1,7 @@ +# beacon 1 +in 5 seconds do + show "One reminder" +end in +every 10 seconds + show "Status check" +end every diff --git a/docs/.vuepress/public/examples/beacon/guide/settings.bcn b/docs/.vuepress/public/examples/beacon/guide/settings.bcn new file mode 100644 index 0000000000..0fb4b933c9 --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/guide/settings.bcn @@ -0,0 +1,3 @@ +# beacon 1 +# setting prefix = "Hello" ; Greeting text +show settings.prefix diff --git a/docs/.vuepress/public/examples/beacon/guide/shop-caller.bcn b/docs/.vuepress/public/examples/beacon/guide/shop-caller.bcn new file mode 100644 index 0000000000..4f2e218be6 --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/guide/shop-caller.bcn @@ -0,0 +1,4 @@ +# beacon 1 +set total to call "shop.subtotal"(3, 4) +assert(total is 12, "provider result") +show "Provider total: {total}" diff --git a/docs/.vuepress/public/examples/beacon/guide/shop.bcn b/docs/.vuepress/public/examples/beacon/guide/shop.bcn new file mode 100644 index 0000000000..7018f4ff35 --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/guide/shop.bcn @@ -0,0 +1,4 @@ +# beacon 1 +export function subtotal(price, count) + return price * count +end function diff --git a/docs/.vuepress/public/examples/beacon/guide/values.bcn b/docs/.vuepress/public/examples/beacon/guide/values.bcn new file mode 100644 index 0000000000..104d8e6ce5 --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/guide/values.bcn @@ -0,0 +1,14 @@ +# beacon 1 +set customer to "Alice" +set prices to [3, 5, 7] +set total to 0 +for each price in prices + set total to total + price +end for +if total >= 10 then + show "{customer}: large order" +else + show "{customer}: small order" +end if +assert(total is 15, "order total") +show "Total: {total}" diff --git a/docs/.vuepress/public/examples/beacon/guide/welcome-helper.bcn b/docs/.vuepress/public/examples/beacon/guide/welcome-helper.bcn new file mode 100644 index 0000000000..a9d62f0370 --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/guide/welcome-helper.bcn @@ -0,0 +1,14 @@ +# beacon 1 +# needs: chat.send +# setting prefix = "Hello" ; Greeting text +# desc: Greet players and count greetings. +# example: /guide-stats +set greetings to saved("greetings") or 0 +on chat as e when trim(lower(e.message)) is "!hello" + set greetings to greetings + 1 + save "greetings" to greetings + whisper e.player "{settings.prefix}, {e.player}!" +end on +command "/guide-stats" + show "Greetings: {greetings}" +end command diff --git a/docs/.vuepress/public/examples/beacon/inventory-report.bcn b/docs/.vuepress/public/examples/beacon/inventory-report.bcn new file mode 100644 index 0000000000..f219c0f4c7 --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/inventory-report.bcn @@ -0,0 +1,13 @@ +# beacon 1 +# needs: inventory.read +on chat when message is "!inventory" + try + show "Carrying {inv.count("torch")} torches." + for each s in inv.list() + show "#{s.slot} {s.count}x {s.name} ({s.type})" + end for + show "Wearing: {inv.armor()}" + catch err + show "Inventory report failed: {err.message}" + end try +end on diff --git a/docs/.vuepress/public/examples/beacon/lib/math.bcn b/docs/.vuepress/public/examples/beacon/lib/math.bcn new file mode 100644 index 0000000000..e1314c5eca --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/lib/math.bcn @@ -0,0 +1,4 @@ +# beacon 1 +function subtotal(price, count) + return price * count +end function diff --git a/docs/.vuepress/public/examples/beacon/nearby-chests.bcn b/docs/.vuepress/public/examples/beacon/nearby-chests.bcn new file mode 100644 index 0000000000..30b97b11e6 --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/nearby-chests.bcn @@ -0,0 +1,16 @@ +# beacon 1 +# needs: chat.send world.read world.search +on chat when message is "!chests" + try + set found to world.find_blocks("chest", 32, 5) + if found is empty + say "No tracked chests within 32 blocks." + else + for each c in found + say "Chest at {c.x} {c.y} {c.z}." + end for + end if + catch err + show "Chest search failed: {err.message}" + end try +end on diff --git a/docs/.vuepress/public/examples/beacon/optional-pricing.bcn b/docs/.vuepress/public/examples/beacon/optional-pricing.bcn new file mode 100644 index 0000000000..29f2ac138c --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/optional-pricing.bcn @@ -0,0 +1,11 @@ +# beacon 1 +# needs: chat.send +# wants: shop.calculate +extern subtotal from "shop-tools" +on chat when message is "!subtotal" + try + say "Four items at three coins each cost {subtotal(3, 4)} coins." + catch err + show "Pricing unavailable: {err.message}" + end try +end on diff --git a/docs/.vuepress/public/examples/beacon/order.bcn b/docs/.vuepress/public/examples/beacon/order.bcn new file mode 100644 index 0000000000..33d633897e --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/order.bcn @@ -0,0 +1,3 @@ +# beacon 1 +import "lib/math.bcn" as math +show math.subtotal(3, 4) diff --git a/docs/.vuepress/public/examples/beacon/price-command.bcn b/docs/.vuepress/public/examples/beacon/price-command.bcn new file mode 100644 index 0000000000..2d6977521e --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/price-command.bcn @@ -0,0 +1,10 @@ +# beacon 1 +# needs: chat.send + +# desc: Look up today's price. +# example: /price bread +command "/price " + set target to arg("item") or "bread" + set p to saved("price_" + target) or 10 + say "{target} costs {p} coins today." +end command diff --git a/docs/.vuepress/public/examples/beacon/quiz.bcn b/docs/.vuepress/public/examples/beacon/quiz.bcn new file mode 100644 index 0000000000..41d177110f --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/quiz.bcn @@ -0,0 +1,23 @@ +# beacon 1 +# needs: chat.send + +set quiz to {running: no, q: "", a: "", wins: {}} + +on chat when message is "!quiz" + if quiz.running is yes + whisper player "A round is already running: {quiz.q}" + stop event + end if + set quiz.running to yes + set quiz.q to "What mob explodes when it gets close?" + set quiz.a to "creeper" + say "Quiz! {quiz.q} First correct whisper wins." +end on + +on whisper when quiz.running is yes and lower(trim(message)) is quiz.a + set quiz.running to no + set wins to quiz.wins + set wins[player] to (wins[player] or 0) + 1 + set quiz.wins to wins + say "{player} got it! Wins total: {wins[player]}. Say !quiz for another round." +end on diff --git a/docs/.vuepress/public/examples/beacon/shared-counter.bcn b/docs/.vuepress/public/examples/beacon/shared-counter.bcn new file mode 100644 index 0000000000..54e13b4636 --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/shared-counter.bcn @@ -0,0 +1,6 @@ +# beacon 1 +lock shared + set n to shared["quiz.plays"] or 0 + set shared["quiz.plays"] to n + 1 +end lock +show "Shared count: {shared["quiz.plays"]}" diff --git a/docs/.vuepress/public/examples/beacon/team-dialog.bcn b/docs/.vuepress/public/examples/beacon/team-dialog.bcn new file mode 100644 index 0000000000..d420cfeac0 --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/team-dialog.bcn @@ -0,0 +1,14 @@ +# beacon 1 +# needs: dialog.read dialog.write +# setting team = "blue" +on dialog as d when d.input_keys contains "team_choice" + try + if dialog.answer({team_choice: settings.team}, 2) + show "Team answer submitted." + else + show "Team answer refused." + end if + catch err + show "Team dialog failed: {err.message}" + end try +end on diff --git a/docs/.vuepress/public/examples/beacon/timers.bcn b/docs/.vuepress/public/examples/beacon/timers.bcn new file mode 100644 index 0000000000..09bc195bd6 --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/timers.bcn @@ -0,0 +1,7 @@ +# beacon 1 +in 5 seconds do + show "One-shot timer" +end in +every 60 seconds + show "Recurring timer" +end every \ No newline at end of file diff --git a/docs/.vuepress/public/examples/beacon/total.bcn b/docs/.vuepress/public/examples/beacon/total.bcn new file mode 100644 index 0000000000..40204f2a40 --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/total.bcn @@ -0,0 +1,8 @@ +# beacon 1 +set prices to [3, 5, 7] +set total to 0 +for each price in prices + set total to total + price +end for +assert(total is 15, "total") +show "Total: {total}" diff --git a/docs/.vuepress/public/examples/beacon/tps-guard.bcn b/docs/.vuepress/public/examples/beacon/tps-guard.bcn new file mode 100644 index 0000000000..17312e4d1d --- /dev/null +++ b/docs/.vuepress/public/examples/beacon/tps-guard.bcn @@ -0,0 +1,6 @@ +# beacon 1 +# needs: chat.send + +on tps cooldown 300 seconds named "tps-warn" when tps < 15 + say "Heads up: server TPS is {tps} ({server.mspt} ms/tick). Easy on the farms." +end on diff --git a/docs/.vuepress/public/install.ps1 b/docs/.vuepress/public/install.ps1 index 31f2e32405..3eb3bf2032 100644 --- a/docs/.vuepress/public/install.ps1 +++ b/docs/.vuepress/public/install.ps1 @@ -1,85 +1,63 @@ -# Minecraft Console Client - Installer for Windows -# Downloads the latest MinecraftClient binary for your Windows architecture. -# Usage (PowerShell): iwr -useb https://mccteam.github.io/install.ps1 | iex - +# MCC 2.0 installer for Windows. Save this file, then run it with PowerShell. +param( + [string]$Version = 'latest', + [string]$Destination = (Join-Path $env:LOCALAPPDATA 'MCC'), + [ValidateSet('win-x86','win-x64','win-arm64')][string]$Rid, + [switch]$PrintRid +) $ErrorActionPreference = 'Stop' - -$REPO = "MCCTeam/Minecraft-Console-Client" -$OUTPUT = "MinecraftClient.exe" - -# --- Detect CPU architecture --- -$arch = [System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture -$archId = switch ($arch) { - 'X64' { 'x64' } - 'X86' { 'x86' } - 'Arm64' { 'arm64' } - default { - Write-Error "Unsupported CPU architecture: $arch" - exit 1 - } -} - -$suffix = "win-$archId" - -# --- Fetch latest release metadata from GitHub API --- -$apiUrl = "https://api.github.com/repos/$REPO/releases/latest" -Write-Host "Fetching latest release information..." -$release = Invoke-RestMethod -Uri $apiUrl -UseBasicParsing - -# --- Locate the correct asset --- -$asset = $release.assets | Where-Object { $_.name -match "^MinecraftClient-.*-$([regex]::Escape($suffix))\.exe$" } | Select-Object -First 1 - -if (-not $asset) { - Write-Error "Could not find a release asset for '$suffix'." - exit 1 +if (-not $Rid) { + $arch = [System.Runtime.InteropServices.RuntimeInformation]::ProcessArchitecture.ToString().ToLowerInvariant() + if ($arch -notin @('x86','x64','arm64')) { throw "Unsupported process architecture: $arch" } + $Rid = "win-$arch" } - -$downloadUrl = $asset.browser_download_url -$tag = $release.tag_name - -Write-Host "Downloading MinecraftClient $tag ($suffix)..." - -# Download with a built-in ASCII progress bar (no external tools required). -# HttpWebRequest streams the body on the main thread so we can update the -# progress bar inline without any Runspace or thread-safety concerns. -$outPath = Join-Path (Get-Location).Path $OUTPUT -$request = [System.Net.HttpWebRequest]::Create($downloadUrl) -$response = $request.GetResponse() -$totalBytes = $response.ContentLength - -$responseStream = $response.GetResponseStream() -$fileStream = [System.IO.File]::Create($outPath) -$buffer = New-Object byte[] 32768 -$totalRead = 0 - +if ($PrintRid) { Write-Output $Rid; exit 0 } +$endpoint = if ($Version -eq 'latest') { 'latest' } else { 'tags/' + [Uri]::EscapeDataString($Version) } +$release = Invoke-RestMethod -Uri "https://api.github.com/repos/MCCTeam/Minecraft-Console-Client/releases/$endpoint" +$tag = $release.tag_name +if ($tag -notmatch '^v?2\.\d+\.\d+(-[0-9A-Za-z.-]+)?$') { throw 'The selected release is not MCC 2.0. Build from source until an MCC 2.0 release is published.' } +$name = "Mcc-$tag-$Rid.zip" +$asset = @($release.assets | Where-Object name -eq $name) +$checksum = @($release.assets | Where-Object name -eq 'SHA256SUMS') +if ($asset.Count -ne 1 -or $checksum.Count -ne 1) { throw "Release must contain $name and SHA256SUMS." } +$Destination = [IO.Path]::GetFullPath($Destination) +$target = Join-Path $Destination "releases/$tag/$Rid" +if (Test-Path $target) { throw "Already installed: $target. Select another version or installation directory." } +$scratch = Join-Path ([IO.Path]::GetTempPath()) ([Guid]::NewGuid().ToString()) +New-Item -ItemType Directory -Path $scratch | Out-Null try { - while ($true) { - $read = $responseStream.Read($buffer, 0, $buffer.Length) - if ($read -le 0) { break } - $fileStream.Write($buffer, 0, $read) - $totalRead += $read - if ($totalBytes -gt 0) { - $pct = [int]($totalRead * 100 / $totalBytes) - $filled = '=' * [int]($pct / 2) - $bar = $filled.PadRight(50) - $recv = [math]::Round($totalRead / 1MB, 1) - $total = [math]::Round($totalBytes / 1MB, 1) - # Use [Console]::Write with an explicit \r so the cursor returns to - # column 0 and overwrites the previous bar. Write-Host -NoNewline - # does not reliably reposition the cursor when the script is run - # via iex (pipe mode), producing multiple bars on one line. - $line = "`r[{0}] {1,3}% {2,6:N1} / {3,6:N1} MB" -f $bar, $pct, $recv, $total - [Console]::Write($line) + $archive = Join-Path $scratch $name + $sumFile = Join-Path $scratch 'SHA256SUMS' + Invoke-WebRequest -Uri $asset[0].browser_download_url -OutFile $archive -UseBasicParsing + Invoke-WebRequest -Uri $checksum[0].browser_download_url -OutFile $sumFile -UseBasicParsing + $line = @(Get-Content $sumFile | Where-Object { $_ -match ('^[0-9a-fA-F]{64}\s+\*?' + [regex]::Escape($name) + '$') }) + if ($line.Count -ne 1) { throw "No unique checksum for $name." } + $expected = ($line[0] -split '\s+')[0] + if ((Get-FileHash $archive -Algorithm SHA256).Hash -ne $expected) { throw 'Archive checksum does not match.' } + Add-Type -AssemblyName System.IO.Compression.FileSystem + $package = [IO.Compression.ZipFile]::OpenRead($archive) + $stage = Join-Path $scratch 'payload' + New-Item -ItemType Directory -Path $stage | Out-Null + try { + foreach ($entry in $package.Entries) { + $entryName = $entry.FullName.Replace('\','/') + if ($entryName.StartsWith('/') -or $entryName.Contains(':') -or ($entryName.Split('/') -contains '..')) { throw "Unsafe archive path: $entryName" } + if (($entry.ExternalAttributes -shr 16 -band 61440) -eq 40960) { throw 'Archive links are not allowed.' } } + } finally { $package.Dispose() } + [IO.Compression.ZipFile]::ExtractToDirectory($archive, $stage) + if (-not (Test-Path (Join-Path $stage 'Mcc.Cli.exe')) -or -not (Test-Path (Join-Path $stage 'Mcc.Cli.dll'))) { throw 'Archive does not contain MCC executable and assemblies.' } + New-Item -ItemType Directory -Path (Split-Path $target) -Force | Out-Null + Move-Item $stage $target + $launcher = Join-Path $Destination 'mcc.cmd' + $binary = "`"%~dp0releases\$tag\$Rid\Mcc.Cli.exe`"" + $content = "@echo off`r`ncd /d `"%~dp0`"`r`n" + foreach ($mode in @('run','lint','format','--validate-plugin','--validate-marketplace','--help','--help-short')) { + $content += "if `"%~1`"==`"$mode`" goto tool`r`n" } -} finally { - $fileStream.Close() - $responseStream.Close() - $response.Close() -} - -[Console]::WriteLine() # end the progress line - -Write-Host "" -Write-Host "Downloaded: .\$OUTPUT" -Write-Host "Run with: .\$OUTPUT --help" + $content += "$binary --configurations `"%~dp0configurations`" %*`r`nexit /b %errorlevel%`r`n:tool`r`n$binary %*`r`n" + [IO.File]::WriteAllText($launcher, $content, [Text.Encoding]::ASCII) + Write-Output "Installed $tag for $Rid." + Write-Output "Run: $launcher --help" + Write-Output 'Existing configuration, plugins and scripts were preserved.' +} finally { Remove-Item -Recurse -Force $scratch } diff --git a/docs/.vuepress/public/install.sh b/docs/.vuepress/public/install.sh index d3e74d3d01..d84ff6eb2a 100644 --- a/docs/.vuepress/public/install.sh +++ b/docs/.vuepress/public/install.sh @@ -1,106 +1,165 @@ #!/bin/sh -# Minecraft Console Client - Installer -# Downloads the latest MinecraftClient binary for your Linux or macOS platform. -# Usage: curl -fsSL https://mccteam.github.io/install.sh | sh -# or: wget -qO- https://mccteam.github.io/install.sh | sh +# MCC 2.0 installer. Requires Python 3.10 or later. +set -eu +command -v python3 >/dev/null 2>&1 || { echo 'Install Python 3.10 or later, then retry.' >&2; exit 1; } +python3 - "$@" <<'MCC_INSTALL_PYTHON' +#!/usr/bin/env python3 +"""Install one MCC 2.0 release archive and verify its checksum.""" +import argparse +import hashlib +import json +import os +import platform +import re +import shlex +import shutil +import struct +import tarfile +import tempfile +import urllib.request +import urllib.parse +import zipfile +from pathlib import Path, PurePosixPath -set -e +REPOSITORY = "MCCTeam/Minecraft-Console-Client" -REPO="MCCTeam/Minecraft-Console-Client" -OUTPUT="MinecraftClient" +def detect_target(): + system = platform.system() + machine = platform.machine().lower() + bits = struct.calcsize("P") * 8 + if machine in ("aarch64", "arm64"): + arch = "arm64" if bits == 64 else "arm" + elif machine.startswith("arm"): + arch = "arm" + elif machine in ("x86_64", "amd64"): + arch = "x64" if bits == 64 else "x86" + elif machine in ("x86", "i386", "i486", "i586", "i686"): + arch = "x86" + else: + raise ValueError(f"Unsupported process architecture: {machine} ({bits} bit)") + if system == "Darwin" and arch in ("x64", "arm64"): + return "osx-" + arch + if system == "Windows" and arch in ("x86", "x64", "arm64"): + return "win-" + arch + if system == "Linux" and arch in ("x64", "arm64", "arm"): + musl = platform.libc_ver()[0] == "musl" or any(Path("/lib").glob("ld-musl-*.so.1")) + return ("linux-musl-" if musl else "linux-") + arch + raise ValueError(f"Unsupported operating system/process combination: {system}/{arch}") -# --- Detect OS --- -OS=$(uname -s) -case "$OS" in - Linux) PLATFORM="linux" ;; - Darwin) PLATFORM="osx" ;; - *) - echo "Error: Unsupported OS '$OS'. This script supports Linux and macOS." >&2 - exit 1 - ;; -esac +def fetch(url): + request = urllib.request.Request(url, headers={"User-Agent": "MCC-2-installer", "Accept": "application/vnd.github+json"}) + with urllib.request.urlopen(request, timeout=60) as response: + return response.read() -# --- Detect CPU architecture --- -ARCH=$(uname -m) -case "$ARCH" in - x86_64|amd64) ARCH_ID="x64" ;; - aarch64|arm64) ARCH_ID="arm64" ;; - armv7l|armv8l|armhf) ARCH_ID="arm" ;; - arm*) ARCH_ID="arm" ;; - *) - echo "Error: Unsupported CPU architecture '$ARCH'." >&2 - exit 1 - ;; -esac +def unpack(archive, destination): + destination = Path(destination) + def safe(name): + p = PurePosixPath(name.replace("\\", "/")) + if p.is_absolute() or ".." in p.parts or ":" in name: + raise ValueError(f"Unsafe archive path: {name}") + target = destination.joinpath(*p.parts) + if not target.resolve().is_relative_to(destination.resolve()): + raise ValueError(f"Archive path escapes installation: {name}") + return target + if str(archive).endswith(".zip"): + with zipfile.ZipFile(archive) as package: + for entry in package.infolist(): + target = safe(entry.filename) + if (entry.external_attr >> 16) & 0o170000 == 0o120000: + raise ValueError("Archive links are not allowed") + if entry.is_dir(): + target.mkdir(parents=True, exist_ok=True) + else: + target.parent.mkdir(parents=True, exist_ok=True) + with package.open(entry) as source, target.open("xb") as output: + shutil.copyfileobj(source, output) + else: + with tarfile.open(archive, "r:gz") as package: + for entry in package: + target = safe(entry.name) + if entry.isdir(): + target.mkdir(parents=True, exist_ok=True) + elif entry.isfile(): + target.parent.mkdir(parents=True, exist_ok=True) + with package.extractfile(entry) as source, target.open("xb") as output: + shutil.copyfileobj(source, output) + target.chmod(entry.mode & 0o777) + else: + raise ValueError("Archive links and device files are not allowed") -# macOS does not have an arm (32-bit) build -if [ "$PLATFORM" = "osx" ] && [ "$ARCH_ID" = "arm" ]; then - echo "Error: 32-bit ARM is not supported on macOS." >&2 - exit 1 -fi +def install(release, target, destination, download=fetch): + tag = release["tag_name"] + if not re.fullmatch(r"v?2\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?", tag): + raise ValueError("The selected release is not MCC 2.0. Build from source until an MCC 2.0 release is published.") + extension = ".zip" if target.startswith("win-") else ".tar.gz" + name = f"Mcc-{tag}-{target}{extension}" + assets = {asset["name"]: asset["browser_download_url"] for asset in release["assets"]} + if name not in assets or "SHA256SUMS" not in assets: + raise ValueError(f"Release {tag} must contain {name} and SHA256SUMS") + checksums = download(assets["SHA256SUMS"]).decode("utf-8") + hashes = {} + for line in checksums.splitlines(): + match = re.fullmatch(r"([0-9a-fA-F]{64})\s+\*?(.+)", line) + if match: + hashes[match[2]] = match[1].lower() + if name not in hashes: + raise ValueError(f"No checksum for {name}") + destination = Path(destination).expanduser().resolve() + version = destination/"releases"/tag/target + if version.exists(): + raise ValueError(f"Already installed: {version}. Select another version or installation directory.") + payload = download(assets[name]) + if hashlib.sha256(payload).hexdigest() != hashes[name]: + raise ValueError("Archive checksum does not match. No installation files were changed.") + destination.mkdir(parents=True, exist_ok=True) + with tempfile.TemporaryDirectory(prefix=".mcc-install-", dir=destination) as scratch: + archive = Path(scratch)/name + archive.write_bytes(payload) + stage = Path(scratch)/"payload" + stage.mkdir() + unpack(archive, stage) + executable = "Mcc.Cli.exe" if target.startswith("win-") else "Mcc.Cli" + if not (stage/executable).is_file() or not (stage/"Mcc.Cli.dll").is_file(): + raise ValueError("Archive does not contain the MCC executable and managed assemblies") + version.parent.mkdir(parents=True, exist_ok=True) + stage.rename(version) + if target.startswith("win-"): + launcher = destination/"mcc.cmd" + binary = '"%~dp0releases\\' + tag + '\\' + target + '\\Mcc.Cli.exe"' + modes = ['run', 'lint', 'format', '--validate-plugin', '--validate-marketplace', '--help', '--help-short'] + launcher.write_text('@echo off\r\ncd /d "%~dp0"\r\n' + ''.join('if "%~1"=="' + mode + '" goto tool\r\n' for mode in modes) + binary + ' --configurations "%~dp0configurations" %*\r\nexit /b %errorlevel%\r\n:tool\r\n' + binary + ' %*\r\n') + else: + (version/"Mcc.Cli").chmod(0o755) + launcher = destination/"mcc" + binary = shlex.quote(str(version/"Mcc.Cli")) + launcher.write_text('#!/bin/sh\ncd ' + shlex.quote(str(destination)) + ' || exit 1\ncase "${1:-}" in\n run|lint|format|--validate-plugin|--validate-marketplace|--help|--help-short) exec ' + binary + ' "$@" ;;\n *) exec ' + binary + ' --configurations ' + shlex.quote(str(destination/"configurations")) + ' "$@" ;;\nesac\n') + launcher.chmod(0o755) + return launcher -SUFFIX="${PLATFORM}-${ARCH_ID}" +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--version", default="latest", help="Release tag, including prereleases, or latest stable") + parser.add_argument("--dest", default=str(Path.home()/".local/share/mcc")) + parser.add_argument("--rid", help="Override process platform detection") + parser.add_argument("--print-rid", action="store_true") + args = parser.parse_args() + target = args.rid or detect_target() + if not re.fullmatch(r"(?:win-(?:x86|x64|arm64)|osx-(?:x64|arm64)|linux-(?:musl-)?(?:x64|arm64|arm))", target): + raise ValueError("Unsupported RID: " + target) + if args.print_rid: + print(target) + return + endpoint = "latest" if args.version == "latest" else "tags/" + urllib.parse.quote(args.version, safe="") + release = json.loads(fetch(f"https://api.github.com/repos/{REPOSITORY}/releases/{endpoint}")) + launcher = install(release, target, args.dest) + print(f"Installed {release['tag_name']} for {target}.") + print(f"Run: {launcher} --help") + print("Existing configuration, plugins and scripts were preserved.") -# --- Download helpers: prefer curl, fall back to wget --- -_download_stdout() { - if command -v curl >/dev/null 2>&1; then - curl -fsSL "$1" - elif command -v wget >/dev/null 2>&1; then - wget -qO- "$1" - else - echo "Error: Neither 'curl' nor 'wget' is available. Please install one and retry." >&2 - exit 1 - fi -} +if __name__ == "__main__": + try: + main() + except (ValueError, OSError, KeyError) as error: + raise SystemExit("MCC install failed: " + str(error)) -_download_file() { - if command -v curl >/dev/null 2>&1; then - curl -fL --progress-bar -o "$2" "$1" - elif command -v wget >/dev/null 2>&1; then - # --show-progress forces the progress bar even when stdout is not a TTY. - # Fall back silently to default output if the flag is not supported - # (older wget versions, e.g. BusyBox wget). - if wget --show-progress -O "$2" "$1" 2>/dev/null; then - return 0 - fi - wget -O "$2" "$1" - else - echo "Error: Neither 'curl' nor 'wget' is available. Please install one and retry." >&2 - exit 1 - fi -} - -# --- Fetch latest release metadata from GitHub API --- -API_URL="https://api.github.com/repos/${REPO}/releases/latest" -echo "Fetching latest release information..." -RELEASE_JSON=$(_download_stdout "$API_URL") - -# --- Parse asset download URL (no external tools required) --- -# The JSON key "browser_download_url" appears once per asset. -# We match the key followed by the URL, anchoring on the platform-arch suffix -# and the closing quote so that e.g. "linux-arm" does not match "linux-arm64". -# The ' *: *' pattern handles optional spaces around the colon (GitHub API adds spaces). -ASSET_URL=$(printf '%s' "$RELEASE_JSON" \ - | grep -o '"browser_download_url" *: *"[^"]*-'"${SUFFIX}"'"' \ - | grep -o 'https://[^"]*' \ - | head -1) - -if [ -z "$ASSET_URL" ]; then - echo "Error: Could not find a release asset for platform '${SUFFIX}'." >&2 - exit 1 -fi - -# --- Extract tag name for display --- -TAG=$(printf '%s' "$RELEASE_JSON" \ - | grep -o '"tag_name" *: *"[^"]*"' \ - | head -1 \ - | grep -o '"[^"]*"$' \ - | tr -d '"') - -echo "Downloading MinecraftClient ${TAG} (${SUFFIX})..." -_download_file "$ASSET_URL" "$OUTPUT" -chmod +x "$OUTPUT" - -echo "" -echo "Downloaded: ./${OUTPUT}" -echo "Run with: ./${OUTPUT} --help" +MCC_INSTALL_PYTHON diff --git a/docs/.vuepress/public/redirect.html b/docs/.vuepress/public/redirect.html deleted file mode 100644 index ec0741fcfd..0000000000 --- a/docs/.vuepress/public/redirect.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - Sign-in | Minecraft Console Client - - - - -

- Minecraft Console Client -

-
- - - -
- - - - - diff --git a/docs/.vuepress/public/redirect_assets/wallpaper/1.png b/docs/.vuepress/public/redirect_assets/wallpaper/1.png deleted file mode 100644 index a49ffba5335a5909362934754a70f5c94c28c3bd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 605220 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 z z?y3Pew8ad*YVsFz;Wwo=r>TI~Zhkw*Q?3QT^qd33N${Id?!3)!7>Le$A<{blZ%bpE zI*ANzF)uBWy*O^_?J74Y4MxFgW31S1MMLboJquNZ!_mE29j2>ES{e#o_{TUluSbif z9@3J)F%WJ5cIlU1B-z=x3%*M9IPYHCj>PSDZ9BH|#D!n%(#oYv;CK7QAe`}$wBHG3 zJO8xUq3#ZR|zp2m(UcRCsw!o_xPA&rLho%$2 z0~VzjoqlDU+;vFlSq!JA?BZx@TK`?`owBZNN{!IIB%i5=qgq8{U1-pam#-N0x{t7% zRKMsZU;#X9f$)c)iAmt1?|;$2xY^A}XyDFZ6>v>KkK>>lgOhtCR!?FV;)39w%I=g5 zCJc+hBRK}6ENd6^x1^K5keK?Qf-TBucJWI?3EUCf1u!Y(XbM;WX?<>Xq=02@rfW@| zxXl!mI6HKbPhG0Vtd^P`A$W9RWbqe0%Tup1*yxMeRVEjKeSoYoIsk6)rSJ_^Zy;^eB$wb#iFjBB1>k2o~NU@4c1}??s1(th@|@4+z6T zA3OI<);({JscB-9-7UPziZE96K7+vD<4XSDbm{9SG*tcJZ$Yj*fBE5v-^1fm7lKJT z6RH;<%la=cB~vTetM4TMeiFvsxwE@_dHvyZYwzLiWiH+4!rv)E^?162XXg3o+qe5W zY&~iK&biN%ozEX-+IeMVvh;$jN2~w?;OWs3!B^MFSd|U;Fj`bGCFX@$7pqw%H+rADX*+)un3Lo zoHQ+@@!1aG^XKSL1JgVYVpctfQm5{v#J2w#z&Bj}B@15HdR?8h)}(XSu}WGQYjqyq zDyd6Sg)gL|F-K#V%^n^)oW|CmTMK_qgX67m^pWSfx;+b^i9rV8nDEXm{lRbp@Hx(+ z1i*FXOX$1J@mI}0{{jwsb5h$U#CmQLFw=x@ORC^DFYSd%*|Jz$~qh4QVXfwen^`g z_wCN-T7WJ9`wL|8yaCu|?k5DmPDi%`IGR!CFAgQO9K@mioiX6sQ_G`S=zc0RPrn=( zSNJ6d!JmS_rGS_6jHaL^@O7TXUNfn02EOhjH25t9o5v?|SXLO88rX7{!C$3}3xU%T z!aR+=4{P!{W@8LwD|Kkr0G@Scpi@gW(Oe%Z;NjIup;roD7Qa^PF&RZ2YXm220=l4D z(NyUYqV$zGuByKC_nFP&HXUSoI)M96I<|nm`E_wJw-hioQov^AtW5Q;1-Pr1#3C1m zserp3lVU1j<*$Z#{?QQUYzzD%fzvBp1#H7Fz9lqjBnA09@+#dC;p-wraKjugl~P++M+HC%bzmC&x#-`};HwSm8a$tn<-6 zXHH(5dfm|!0Mq|=DSLkd%}LPHHybSL?i}6y{LyqWW&06C z7QoC+zd`N3$s#ZzR2%Fvy7IRT8yNl;xi9|e@T>Y;cwiaq{$2tnucCh0f3$2XtH;Y1 z8jZ(xgBLn+2g0r)gB8SF5PT~KQSx{VunM>>@zO(MEla}cT?$PNY_Y&+cmwdx&xM`~ z_*Fst?m)_wK>-8QlwARzPbI4O=1*@%0rSv9@6E(xDTR4)^61g6(|)x=PUWbhot=m7 zHL3fZ0Qf-xIA{fuvUPA|+jcN&J*?$b`hr|INlz{xOf^~M$xxX?fg1ab`+^Akiv4N^7;mMfRGxro8DW$F-0k{0|1z!;x^tzbC(4S!4XGxnP6wIUa9Ad&J9k^z+TCQUB{@mvQey2623tVz zd^hlVwpCL8y!X=`UjS}^7o&X`pPZ@yCQD>3mm*ydr>fzr%gYMihThb*j9RA{!q)vP z3iwn1VF|dxutxTEvdJlE=bv$@aK(%*5#hU z+KR+eb|?5P85|JTIre1#FGSatD$KF6vrTNR~C}yj~GmTK4{iMuP%=UHX0?)HGe2VDm1FR6fC z8CD5f%HvfCJeg0a;H6@jq8-Jt>;&_2KwJR!6K()*3V30pfIEPxG--UE0^rJB6z~FW z?tGLm68J0#CQ-|)0C=tKSo-W_?ZWD7Fw6Y1cK~+)gJRg(dPHmEu20ma?J)KnY)vH& z#>(9Y;ZRg6w_~hyq&Nqay%!Y1K`aTQUmeU|VaYtNvQ-Pi!pvufmN}gS6dMz5=yKav zOn1Du_)2ZofIa%^4>^9L(RYQzIU0V$bJ+uU^Ra&OAo5n+B8l6@gek~<`BwnfGB17U z_OvTMq~)`9?Y+z^`}xmr{=7Ii*Z3CDDu)|#ahgrvc(asjUMh&t`gz~% zFvW@BqOVB;>$SqO^*&CmSAI^uNO{qg{b?;9lwue6!7dS zuqJ%D7Pwhcz^Y(U*-})n3OHE>95+U=)+3?CuSHEkgJ0Dz4hE}!b!FZV+@vtT#jAlk zgKPPB_NIQY8wZC&S1P91y&`cDIlhj9CJErcHvA2NNu9zXcwG;E`?X29lF9Z7SMw-A z-`?Ht6XwxsvYA|mH^1wZ!X; zp~KvBUraSOFqr1(Qvn0uG{JNztZu%rns1oQ&A*ehrtjtQI zI`a)c7^9+vqU|W?L_zcCvm1MN`c(kjm!-KnE z%S|pLj#Y`l)-h^to-fv>)E9qeq$oZ%XBt@m3|3=p=MP#^*2!O|fbCYEvlxCpqE%38 zjEi9M7k`co7;cC)C8sj}rEKeL;qpNWvz7MNg?2B$_D)R?M{wXVep_+}unPFm%qlPd zE(xqr)IxA)umZR%U|f97LNDP+u_c3{$<5VDaHMZ3U{brCf4CLcMPT%>5?B&<`hI?l z;CGiJiQCyJ=sFb9$Wy8@;TY==NA*MIZ$X=w99z?&?D?|q};HaNcj5CvQtj!ZS}Y~8-XZ>6-n z$mmx%fc~fN{pL5%PH78W2V2EzfO|j-Rlfdwy|dTr1R1f!F8d#~A26^R`HM4?Vn2v0 z+hfTW08fujcGs^@xAw1rSc0#>E#%Eq^gj0;k(Qt?i@(f6pIJFceV-c$xdCZu1@OMN za`%YNjk}kG5cSJBEXDZ62eH#-*z%V2jr~gYp%z?I@0bwjGScBSkZ6i4mI>;VYbx zuJipA%DKfT-U2Y_RRN=Rq3qB_l@tZ67G@PVE%zZ|t2fV`4}j1A6n4IT{kpIC8o%6T zknzoWw6lWNy+I-oF`5q$-s}|fyo$FNyC7rx5^u%=U}ls@8dql07!H5-H0n%8gWz}^ zMI8feHJTL{G#NT&u=IrvU_-L z$8PH#>V;t=tYz)b16wgl9#ZQ#Z;Mh;`NGX)RWAtambZPqO!~#wjB)i@f~`J@J%l## zS1&CuM4;KqHn-jA`11nr*-qJ?U+lkQPyGd?HqSTxpV5D*By-YWKi8V5ZZ-?xekCDA z2e7|=+k%V&p0zp(x`c2EV4v^9;AA1JtHU_7S_)<+x-Lg525WUezbY7~^-yU1=Rt6K zfUra+=?cDM1a}QgB9m$XxJ6)Hmbb;=fVa;^Q^??g?LEBJ>%?tUpCX!p|mcFDeshrch*gXo93V1-g)`{5xTp;DA)zMaD9Zz5V^$pz2y~EML z8T^?)M>yko+O5YGyPbABYEpy0diy&}tw>*7Q^4}rNod@^QNVp4aJPr+2LSk4mV8?i z1Pk9DWYtR`Y5m?|!B_9xbMI=`AQ1}fRfS04zV`d1>0qaud4W>s9?+(?9@T5REdX0! zq3^Cq$*brcW4D(Ac>l%G5!l@YyVn5l{_gaI>U3vk?X|=fF6V)gG>a_zh$Ma3DJZ@Ek4x#pA%QFAh+?8hSHE zzn~rFnfu|-{ILYRXkhv6o%@>MSfMVDr&0}vQs#4pE)Q=|+8J!p8yXV@jh2iFU?*?* z`+1F}U*vBGu*<)ELA(8k`E5)XB|Du!3VK9P6T4;L?w#D#hI*5_f{Z?E7Yo4hw`6d~ z;Q&d^uCWFMXB}Y!i}`CM=$Lm7{nWqA`@RG4Aa?Q8?9uzo0^d*a5pW^T6Osq1fYpPAa7&R+pcj{E=C}0v2*o=*pa8cJ}OBSaHf~j@{cleeR z<}oz|Oy;;s(^ut){6+cZalbIh4o!rKCm?5?!kK20m>naSYy!cyX4Zgdw^UQf1Ae8c zX=Fbu+>Wny7=NV;#hvx~9`9^h-zlv563VuX4q2#zQu5%!U6ZIT{2nL!x|P(iy#Mep z+ks=M+5lQ8gU6w-;46>GmC9K#?kfkqr3vmf`U>EPUR~i= zm#kxGu%~+MBhq9Tg6e}&M8vv_) zO;Nmbhqc;#z^j2>GKK<9n)i$KFa|mD4Zk}y6 zAMp&QL0@D3c`l5EoV6~iZ&ey{Fcn#&)>Q=a5OpPsI+(#)M_kF{;Q@X)yiGq%tIN+` zXx~gr%kpnaIee=h3Q5&E*(l^@vW_D`sSZDjAEoRq05{^Jf_-5CtoTixlBRDYrRf_3 zpe3=N9}%2xklHS32x!4>zpAi7*Z$NsSB6Ugk0Gq^)mi-OwMb4vM*u_Mx}d-4+ZjyK zX`R1g1^h$(=kt8tJhG@?@LRd=WvEH$vgltHfQ9f6S}ObwzHSQsD$WFM)1;S5*SnUL zNAu4*2;2dTd2^C!;IGZ$)vkbb;wi3mnP&N0V=~yH&kKvpwg7Br8z_i2{Q9DoBNcre zsOjuu@=(|tiObeuzfY(2U$`T-7wTSzC8!mrlfkH6_Zogp4W?39wM&-_#`(FJ{5=?+ zhoYD{XlI;#@qm<8-`s1e;@>2)khS7NU9+n1ncpju>VPZyp>3xtp5@AAsFsYtlCm zCaZp(f)0d5Fb>$Bru;!k;XOrgKNWxT1R;EV3StSinm#$**`FTmOn3HU+xz=xw)dAn zF!R!<`$S?LO|up0n^w@;nBcR zz)kY1dKpNO4ZZP{Od&rI!KPIdaORE`!L1X-g5RqZdKL40No%W-whpb`4r7Pw7?xr1 z8Wlzrx}kDi_)EJ@KSNv`DVWv@z`<_bQ141$b?|T{@Ep~qfH4@WDcA-93^77x037=A z3XkP^-0FvOJC9CX@znuWSALblSFU*S#vp6svSoMx@YMmp=N3TkxnNWU8%7IPoF$*Z zOJe7U`v_J5P7fI8ao(AQ;JR^NM;a~v#>w9Szd7(h;!@))nMG~^(|B&=fAS8%z?a+s zjIk{^4Su&qRtc<~6T5hrIap^eMXa+|Mu8T$@IYR=Vrw!=+R@6;&ED2UU-Gi4#T$1L z%3~SWt(e^Q`!vk9YQxw#u>sa9w?LtOORne&sVV^zPL4 z1xtUs+V9&NZRXjU@2#iWNUEr9_!Y$?<6ES!lLuk#L!JY2w)!4iet3`P^1>TDTrN4tk9A@TpDJ@#Z0H%`)-k<|e(bHf1h( z?*q0O(RlU2UX(Ard#UAiqaSd?;O5qr!gp))>7A#$$EPQBJRLMImFrGI1LUKv>CyGw zr`M0J?|@w9p*ekHy88;m?ihLnf0uT+d+_5W7>xb>+LS2hl{ZsXeczlpGg-R3k|(zw z0ppDg;G2hltIR~x@boKk?jfXk`$`wR^plarZR^p%U;zwkoq|Re7iuGn0Wf29@o2nT z7S5VI{i-DxZWH4LSj$AT5atoUYhkbezDmn{oVz7nVR-4{JP!y%aE-wN@Xw=h3&1f))xmWeLdphU9o2sWU{Bs!&?6@OD(0L$ zhS@#2cmYVqz&ZZl@iKJ;V0#L{R{E|ea{CqP1=nn;44^%)R}4Fjr_66)fZur%ex4-D?By?l1Ruj-;>wPNVdh`ls9m$RcU+YR-Mq9gnT3@Vg`+c!m z_;sWo^K26>>-_Ur0b5b+lCYqig16It2xOsW%5}gCesKr)c%&<5L9ajDJOHaO`FX^2 zNZTf#*YC3}N$eg9Uxr(3VKIBz31rHev4x^r|y zV~Wz<%EIqK0PM~q!mI%B_70+i+xI_SIm11`OFS#gL$72r(j+lixdxbPk5=wdP7-b< zcQ3u+2#%L9IJYod%H*@_z#8!N2L8bIR%Gu+lrK}s*?vSHnpXu(BMLVoeTNZH*1MVa z1yyLgIu^fHK`Fi(w~WX#vKjnBSgN=m8;M0F46f^qIC3kvUG`zk_n$^A2dGjA;Jyev z7f;vkR{^ZNWlp*Q_$&baJsqky@C&M-Mc(;vH6RAjOw=;EHuvG6gI`~G-Da1adJcm> z#Hg0tfWQDTZ$Z&E`;6>tT@AW<#*9_eB5|>EPBhmbCdJ<^2M;sIsnZwNck~i~#Z+_y zaO3e8CGdh_M^F_43E(=UN&s7Y7XW*1F;!lr=9008VHnFi0I3M95Ej5XCYpJuOF-F^ zZguTrKpX6O^ASJRjk4&?;iwGFa{lU78_LPNT2sMe01sp&W5r^u7|CycZXtlPF8j|$ke;h@%rrQ%m1Y>%nV=D@e$D+}E$g6#t%HgpzzYLLSt1q`Hgo*unk3%z2j z!L{O~&AK)q8htNBHrZbWKdVv<)_doI_@%h-h*=7|IGspoe}u{0fm;grxHsA%S1#(} zD+tS-MkJ+gOX60e(f0zI=-7n3AQ;-hR=_(XFw7V%ytyff6~RXYK7Zx<&e0B=jjr#U9POUqpz$g3&pU1UnYgPn z+oXNOFTu}jLHfec8z8*1a)uM2&$#<{$^Ax?OhQj48%vYPlg|%Q zgt~efnSxHjf?si~7EVJ7x6_|(p=sMO8<>zD8J`59%3w<`9Q<`I0LIk5q;s%%KrKZs zNSepLyN=77%NeeJ9ew0A*n8&;a1oM&+~v z;I+vu7JcXIUL+X!fX4=lz;Ki(Xsw^GkrGAw3nH@@QXf=q!zi*81FnTw8H=-m@wS6P z*1mAnT1d)!vGxJ+4S*y67jCZIB!GKJnOo2A=*)H#w*f22#(7-wT%_)Wc0+%=!Dw+2 z>bQ+a>C5)tFs{W_l~OGLHw1?{;mz4X;^I{x!p~xmW}f{3pF6urT)a;C?`K zT(8gISCh30WBF_Q8)mCmDPWk3(`;4ss|Z|4E7dyrM*M9+WC8ef7rKo2*ss${+;%^+ zcS%2h_j|9!Zyxvhjzl&^9UI~tb8*<`p3PFgVwcAnn0Dp2rRGe13R(oKfLnkwNz6jt zdk5l{F%Ga~nm%NX0KUwmGo8j@IgR{~?yi85yYf{9OqCxH61UrbgWAifqk!qY%xbSI zyn8>$n+Gaj0-mFQH=*qTZcxB`DqzOG-YF`W*ut_b*H)`xDOP*r2rp zT+g61}=*<`fz5&(^2SOK_-5rk6VdJ&6+h0$a2%S~t)oA$&b{gNkdx z*0Q)8!YYktr=D?ESM$Z~>Oo4}VuY?uhE=@i-sMJK`8wRc0GMfp)2iQiTm$X+_-AP= zWl4^#s(|epE*xAy(Q2MP*~6oGC!B6^dwkGF?Zw~vE4R}W8TGEP^j)xIsCS$`Y+5>=>o#2iL_8<*jkilmK@InDtbCuMV znprr`LE&_8=u^(Y`tZXq8fO#*+U4Ta<*T`-K|&4_#1N3VaN3`Y~Q@$0=_o|a2A@=Zpdy5m^>Q=-QkNjm8pNjUyM=$*BbC>8Q27cNA%^fkib3nN$5|J zXV!py>Slgj{49jy#P28q8U~lf6~tC`rl8liLf}vt?|p^RHD*PijtTrQiOMMX8lCs3 z-xI*$48E*drGA@luJB8$NGq5*j)EQ`ICRx4>qEs~KcaJ>f1~&%_mtd=y6U*^_m#&@ z{_-o@0d_lk*9RF~>?O}wcpLg21HYgb`I{iC2wxtTfO&zzTmeky!wk?6x&5|58rh674XsV$p}3|)9X2T@~N4N81`BIoiYiHZN5nD zDAnr;bq2kp{cZT0x#u%y_7TGXn1HOwJ^;?lGZ04dzL#S+mfUwlzQpEV0;#EiT+YF| z&66cx#=jK}oXmRhEw0+nEHt@EVEB6r^g01eBUNua%0mLcIofKB-wSb9XB9AfO*!mI zx{7XA0bkABGx#M0D>2XzSMv5LXi5kl?s}ymHLeU^0NFq$zgt^&ftO@CC}0Z6>8da< za+Z~B_BLRAM6RXaEd|`}LJF%=tevIEEcJ(j7^Zga!ra=UM=!-L4!Z#>y_11_0}Fbg zvxe#ofLXe>r;!!pM(!$(ZvxcEkNKh4k8l3itx}IkH-`jZ8H2Ud8HKoyP4vj!ANwYD zjwEks4P6Thkdaw+5zUy-d9MR(w*a#rhZ=!N?K&i*wW5YU{6)lXi`7aEG^S0Cp5@i1 zHUXzo#luXpi6vi}bNymL@&bKe=Zk9S;ScR%8t#AXQ?-NwhcFieCgKy|(E7y)z?h|l zmKk!%F0JJKfciq9l@P6%U6&l1T1_(&YIsTV$w_Snz(Mc@x9g7BKmIF6 z`=}dzhv9d>?Z5Jy8f{zwSmoQ?i~{bZDR~CNH3toY$w^^wDPZy22^=?4z_M5GBs8fZ zxUAz>M=FQuHOZ?4_A!+K-DJu8LF8{O{idRc;Iso_C!%FA&a4}m;KlLOo>od$f!E0$ z)_un?mp8n21-SUz`n$v(pC?`X6@(GL$CR;j+F$2s2<;NUWzHyT;@3>_D^b4W7>sYf zhOV;3{jmZjm{}Nu*QVwB?p`CH6~ffJ>@DTnPLz!14RhPHbl4jSoa+Zsz@P^j4Td-mooLdM7i|oGb<~fWJGZUTWEx7nb0gQoR6ffBZ%r*WB&RVA+x%u~#0vJWg8yMY` zR%#g-&Js@*A-qaNWQoeKlqJTSR znTG|lc-y>^Ek_9zQVGN4^Zh!0Isq^UZ%TLo@GAZ>0RH34$KlA07KG(gwAUW>ix+qv z$JP|AII53fE$QaDbGATd)3P>0)F73TR;u7w^4{co?BK~LUSI>*n8Um#h5Zy=ybOS4 zvMog_4?OSO-Q8V+;V3V02&j1(pFZPwEQ+uxy=o6Kg=3ZcU&SYb=2EFT3mNnq2^Hx`$I+I|-=__2SE95>0 z-P<+G+}`S^RO&1o^JZU{d&O@?Qq)n^B(hz$8h`Dyv=~;kqk!$|3YZ!t>A3N?Qny3; z?KlX5@0+M4#llP+@)rk|fhuk=_!|YBN}YF=*5T$M3K;H!;ud4|(7EW;0IfDG_~Ph3 z42d@ZuuH!-c=irHc(r+a0C+L#TL+sRz(-HSF<$_3H$m=`9~cDPT3aaMEu`?B=`;#> z%Ea?tkAi-heIGkpSpz2E`8piNrrbZc697l|LRh3Oy(?#SkidW!46m#haJ96=SH4-A zu=^MEPAB+Zr|#)j8dnfbQ~o55_~-0E!U0?Yp>KUF%>Y>7QVbUmLSc;380bVphp;XQ z%iL&I^5QK#=DKj>uLRb+3F)c?<~0kOa2O>#-vQir0ha<+`Py_1*okH0p_RW{Q^NAu zW1ty_#C0pM&T}})95hXiq%{tjdFhCAUJ$^E4KpH(7lU4^ z!K?zfPZbMbx9J4vw7T)9&^egYDi^E-yr272 zfNsgy=zdWmxhvp`!YXS!fK8Mof@d|bkM!ZO%YCT+U{w$YQ|_0gkx)8(wS`;y2b`~qN2DtJi)?Cp6_z$UYZLHkDf zYE}rB9w}fu>mCDAoyU<;O%*JN`}IkrGz*ygRvp%<$k}2uxuy0wWi{_Bsz(UMaN6jX z60r#0x@*ui;I4o%*=sKO`w*83W?2gOm?u-uk-)-M>3dlZiGy)9^QHoqqyoO&)__U* zxE0=cm>Fhjc@yp;is_=fY*OMT4qDuTUTP_ba?Thehqzl&z^_P|c!s{p<}LOlZPK{o zHY6sUsSWx!OTVEliE!wrOi>?ip@6TqZAjDW*C}8yanDb;(6T20*iFAX+`h0+74Sl1 zNSw)M;-8m@gkGUOfxjy`fRdvpr<0wXGiNs5Blc=Ki2^1FTJh^lH240#aSECQdNF*A zu&W4Swg7M37Qp6Ka3!Hv{TlgfKo&lH{e9-50WUlaO6dZ<_++gs;2^p$3G-peYBNN2 z?Kd;rt3UQEEO#K~MZw!npA3kxhUDeNwGQ0u9(D@a7EP6~(a)uT=LQL^0>))ma71rE zj>Fh1_X9^P!rTCuULG24*YM6Q0Q~!xzyCepC9iNn?iJFdOZ?d{E&|}-cX1K$LPl(U zUg7)r_m2hgW1c>?How3K99^YOBh~qZ$0Ae>8*m22d{~yI%VFzjidSKc#`O~pBX>K1 z!|tF|+(v?4eaBYyZ!DChi6vOtmvLg1IvfSQ84p##tnhU%`hrCEB}u}7w>pUQq`LGs z%o4x`_+l{Y!&on6IS$B)SdBl)PF<{(1z>nM*H7V+fikt`n)S50$PH4{=$x!dlgIve zDjI(=MJ3>9;$AOI*T&d!qEovE9CxfZhDzG*?3ti&3@T(`0 zJAzxinF5$Z_Jk}*4008R7TZ?` zNyW+Ea^CXKGd>xE)OD)4Q?|+(1#G&HD}C$Je_%=L z1#Ehk8-5?gD`V@P1==7sb%U^I#qPPz+p-J6!|5A-c$1RxK>-^89rrBVN?~tHGUz$0 zxduOv6!1OX%*^w!T8z%kVleiKm0v1*bY|gq3)Er(FzH7gQZD*zF0ku?f%7(WddFYkLall_P11ew{3xv*{ z|0#0#tmK^o!aaD}HztoKHvzCGU(EyHZ7?KnXDy%s|n+xG^QZ6-eRr< zX>AR{80n;J8o9%JwBv{u8_Nryoy%2oN0bB?uk_|cJ~dY4dYg>o$(2?pV5F}Qru5Nj z>9^bL{ByEa2U3!pgvRvZw;{OGw?8B9CgW7V$lrf3b~defHf0!ARIC-66vhg_Vwb8?tHzPgf|#6?Tm&{72u%{SBs_I* zm%ujdkiwJ_m?9R0#*SWP<%I829Ne5c~jwS1TGF{>A{r(SpkfemTuu}FUIF$ zb&*Sw!@`$VLvTIzHrCe3Sz3p$S+BlT{Cel_(6GNA!K+DDyFz0hOYdDE$56F-xbHWq z;TO-QQ^_fC`x>z5b%L3CkiI53oV3C@n8;h+qtO(w>UXSw&(2i4WWRBkbiO?xH{EA{ zikRg+cMPL}qm>5*9Ce&%Xy%krxcn&66c&ZZCwooH~gBzQi>1LISXqyN^;LaQD270seOFtJ+ZtAueSeNq_UQ6@RAZ5t9zd@7S-j>FE@m3gbM@1?7XMIN|i~2Ev!`~kG zT%Z4^aV?|D-(c9m0ysHM-16rb!dSU|0T@&DT~WQe$w(aI->iPx$Ueg2GJ%-ySL8+r?R7 z0)wsW9167|83r4gl=R%ttK60aNsbCRX;aD{$h3TwZYMU&& zNtzvwz2iyJti97nUF-}qj-T=$IzuKMy8>LGDr_lz`b>dcPC}0i#tK?%$cz?#_+3YK z9zLFpXy z&vOS728Ij320_DMXp4*dE%MIAMfJ8#N1nSOiOByO-)#6TRa19<2#7z?Tf&WhgQOemgs zJx0r!>O0e~A@0|lm4?j#_{vu~4=Xr!A^2qa1j+oAAgq%p+!@Z^khq%qw>#W;w8{f( z#prdWmJ!1VgqE?4;aoqQwYtFzvkc-}uHum0F(g=dKfy~7mNL(i5EjqTKsVF2!7#|e z+t_3nlA(LGwK)O&H5u(|Q|>$RCZm)=@3fr7gPR?|A+S(xAeF$ddS;kAMod% zfIkWuJmRmZF&Ia`2weOv29rrc@o%P~wT|FQBP;Sw9>!7Fy-cA`HjU})1AQxL>oo&i z3b=b%#bNcj-JGNo_)?A)aBSFxG+_5Fh0aI-(<^%8Y4Kegj=^7&%~jjxJW!Sq8n-FiFk_CGVQ-&*rn3C4 zShjFz(!_6n5-%MmqO=EL;kCGDQ@Yi-&NqKItG#DIF~qeCiZYtkpWNuX^86Lm+5E~Y z4&um(lk{fR+HfmQe-51Sn*x5pf^WQ?=lAcwczHkArI%&!Mi~_=>~;3ZiilBdvh`tB|L+N8JvYXM_L8NX+qs= z!WBm*3*}x_%#E#Bmm65;Hv`oXnHxT$pZNG@{{G0064){0r2C+ z*xcM=!|xonHU~x*IaZ@#bU3+LiUz;~M4!yg;snaU?LQ&54?4;agEhL9XMpG@)-w@S^)FW_F4X0Qdnd8049iizUqWA*ey_I z?ir*=8O5*b%E5;K9+rK#NFIto(>JBHfT>m6xYicKzzEM1A!V?tg>T*Z`&IxL?wXj3wjdD%-6SwY zA-L$v)A-vjL>l3DVi7oxX|NG^@ru4qKVuf9fXy+>;%(VPUz>gQu~G#$5dSv=#{#*j z-?kzwie>Ov0jC9lZ|ilm@X*%~Oly$6(Z9H6C#-FeBydS!t!vy);jzhTMok^P)(x)x zj1H~lpxfN@r+!YnR#It`f7zqD%xYbdztw{5r9~aan63kD`k8`~EPu^WyA+hMyynVp z*^ULdsoz!vuV-MC7_2sg0R9tQiMIL~Yte>0!{JC_SA!w1fK>r!*7^1h^tGh|rU8?2 zK7FSc&W59mt%tcP;Pn^lOhIS5nIfTAco$4T@3OV`jEQIW8|^|}`1_(1u)BXR-oHD) zmF>T;a{DS%&;a;0*CGYL_nCn{;EjOz;yLp7@xp0>u)Z7sv+dXLE9$KJQa;GVM~Yu1 z@FSS3?)_rUfnFrh++N&s`gw70@gDinJ(O_fowvDp->7G1q78aZ>lz8qga{VCCMfF) za2+{``-lponU<_w;~|^ya`FbmrM%nv?vn4SdlMgR*Gvwm#Es--*jZ*ungWb$x45x}$oC?M?W76gw0oX}?vhdOBr`0B}3oIBT#By;xRE<;|XuQLIChu5I67zVui zn|A}?qXEFoKz9JIE_MD=HKl5pbUS9FF?OZ^JktTM{xSN>oY7!O%_R$RIwqb|8 zDAz!JO$Yli zic-D9i^Xso-HgS`B?+o>@oR1}y7YFVcmY~X>t8FXPVigTT<1-fMhC!Jaabjs$mapU zKE>aH@POdbzY^G@i{QrKqVJ>xw&>o+tMxEQ>l8+GNO;#mMIEtQ7F_Sc+es z6?}8I6^lI8EDz>tPC=(O<8}p%y^$yyuT;Tb72powwKX>(1)P~tb}5)=nqpYi&1AB;%K=!1 zH_`6|G@i+GvKlA#htR7q#y3TX5z}@HV9$6=EptVnHjZz$=!ERBgkBTxI)hz+D-+ip zqr&SyTE#+lpf>a&$yCG?T3!Xf5xqVZ zrrHMF)GwtyV*;DX8iEnP$wlDFdFa9~W;vdLo)o|qnBM3t=!RgMlRJ?rVKTVobxX|V z*lJf2PR%}(dJvYrVps*N+||At2HR&6!6TDTSQss%;`!hyf-4ePUCe+YxU9WU@mXE` z`bg#?Fc!ai4*6L2RcCW!`lkX|=^N*5Fsw{h?l!bW0mm`&O4Q<2qNjlsU;|LquL!1* zwO=hAUIQHVzJst4xv;b5px05lDqzYC?WETh_0Dh<^p3hWhhjP3jF!z}FE6NhZ?nml z-YDP(;4}9e;dv4ko(lLOWnH!q{@&i@&8~pwpTEOr!>^H7ZulLpI3lhYWn5Pu-9iDw zU%V^5_W>}+ZgBZvR(}sThmza(4_>}uBAPpZVeVySoi8nYvVc8U`f!;w zV0Iyq7J%;8fvsuLdl)zX%ksfJ55QtInC^c6!ge%SU{{tVqFu&)N`i2 zxc6NDZMyf~(Y3ordUHizOR#)_&mf5Q07@%IDf{6ZNMKsIhv6RNjRGc#-*)*CA6VTB zZrkqPcpRHGSK8P*DE2@~3d~5X>y5?Bo^>@90IP%@yJM(xY;%hBUN0&PfEiK&Pt!Q$ z6L;u7I$HkA^#Q=K4Ywd+pqI2t05l%wLuF>U12_b3mj(|#II+i%gJWzwm{AEk9^GoI zzm7VLvQ=n~!z{BkgmbtM3Y|_Y(pMnB3ByJS3 zEODmV+DU2pt$vUKf-~dns&L)UPa?y5d0BB!n5h0Q02aC(;J!Ke?x20iV+uN^6A z#Ab;~)<(Siffz1G#-Ybpv7|WuNKSbJko;}`IJs>2$gq#NN%JB)kD<^47|v##&oiP? z(@W~>#;JV8;xjOp41CFzzOWhmS~LjjboTaaDiK^NxJ^Uw zbFED@v0%Bux8v7kUn;E$U_T9B&30oU>^jei?G9l2*H`fR#v=gA5dBU;{|P`33Ru#v zbOlV!gV^;pr00>szZbx7dGq&t8=Xx7&!0VCVda*O@#?N;US-eGI(v+s@BUr@pJn5b z0G?+L()sTp@crG7S0BBEth>8I@H6LM?xKL(*!ek){Qoc8vnJr_a0KdT6yIl$F3DB|YcGB#pVGSPZ z!@kx}fCj?u@=d|(t7(g3pqN?!doZ*nfEntiJoAPC_SJL&Vz>W#SYz7)438bZO5gNY z0RwAZC*N7Vv%mbeOhKQV2;fx#41ALXFe|`oGh$T6ViSyQ5dC)m-fGQFOwo%<_5wi= zY>n;(yIV9mVS!QD+Sg(?xQZ!V@wd8o2Bb>kuvH+_p^z28IAWC|J#rQB#09YF?E04^ zR(YAR2w$9x(N{Chys3wC5>gD8iY)*e8a*Z5llUJlpQ|esdXV(cgPUW*M#ot3 z=g32k<7@PXzf_|iuk{U9A4d)OQUR-d>mhA^p|1jW@>=VS!m#obdyRvxO8hqdnhU{_ zmkR3$7Qdx{d9-=Z+u_^G0^o(_Os3Kd)*YU1ZGlM z*eZc>vv%zabmOL74_jfEl{ICDZ^Li%yD5h~w?pvmn3ceaU&}!O)6WAbWwOWxzoeCH z_-$&}h${iy!=3T}6w*F#`q$v-6!rDqyn5UcK1e zfxF<>6E|S)3;2ubg}UFk+!Qd2zwa;J!C$|KPtOF^*_(DxpN!yW>*cy^vPI!rRo4ICIi$|GkR;wX3rZzunEh zQ)2)tAoo^%wWSE*`x+83H*ry zc)SceK9FO4Iib6NEhiMPRt&Z%3EWXTzL}vqCGVKR9lbuJLhghWgi8Piz*H;g0w(Yl z#=_)yWdU#aOHP#@vs5Yon;0i`!uhC!>By7$XT@@HSpKS5YYO_Uq=m2bLapUioE6!} zao zyW<)#rJ~ehI{ak#OWvU`VwYy0SXKeA;{jdwE>RO~h1ks%gYzC`<(mOB??GSzypELZ z0A`Vw3m2Xz@M>5CmbEBg&%es7bQEw{is%KqP37Y5L;-W?Bwe3=`swb@zOh;_-v8}% zAK82AhT(lqz8VxT&ZQ**jK@7mto|-!(f1MnzVt>1#3TFA&)nA~?lXMRS z40$25JC6u|-bMyT0q?~pK1@; zXt=!F`+CE-d}=hXwV|7GAS^YO(KJM_Wgd~tfO=PQQc__ViuCmuXtnPEWWnm^l){o( zteU1p2d|0S#?&UU`Lv6?lFN@r3}2a6R107gFf`SyJ5{L#Pt|Zv4esyX^3caz6s2{6 zS{De7?%XY_NaCT^J|d2H)szL%qHk>r4ukcHB%p;;0M@aj%D<`L+ic&{9mjcrajlOx zHx&*)-BDRQd8Kgg5x`DDn+w3P%{q)D)x6{$D8jDhfzX(%=w33`_&c*U5Vc`+X3SW+i?Oq#K^v0*b_V+6 zBy|scrjBEgK&%E{@F}gSXGp5wh-g38#BGDEOr17KTU9Wwoc6m3z=EBSE#E>Vho>_K z9UA!}V8u|uQ=u&U#`yYxQ2>X)(}KA(tsiz(RGk3u50t@4h+tg0t`vZM$6D(Ql)w5y ztk?gHumUju&~;` zZA}0_>66ek2c0!w>D!{9n;M=Bg|5^Q{80c;Mq+gZJQ;}9yzv?^W!VV76ITOk)f$Q5 z628S@H882lkyi7J&VevgHGOD_m~YpOIikhToD(^A0dOL#G6jvEMgCsS z9sCDmihl0oxtIS6V5Xo?4_E{K1D7G)Jb1pc0)STz_Afweb|3-Z)ARQS`*fT~0q+OE zbS)f20doKr3F)Q7 z)f8~VuTLr9#bKhkl^wWFLI2_k=xlfMcU?>uL$e^2f>SqWpnSnESp__;0`@d4Uc#2c z=V_{Z4MLc2Jh{FMfR7Bq${mC`1A1|8Z4m-@a~e9-1gGvmqS9)qm$4x(I+X@R`=Fzu z`oE1j-0=&5F(;rKfSb^TaDa1jK=s_}kL?>;@q{jT4tg=j3R-D022aI2q+`-L0RADR zYIZiNHr^0~rBZc$H@lCnL`ySPH{}BlI|{&49l%9ZFs^|#)~y4be%(Rd=WU5RvMp?L zYoOQ2iod>BlG3t?;7R+T)-gO1!HU!}x!q!+8zcYA7s~XpG9SlE$K-SW?W9@~F8Q0v zv!F`>e@w7f{MK0<)ViZp;E@KFzI{Eo7J(=C1CLDvmo@2YrKc5t%_9Qy=!{MDQdF{- zHv(&d!Ewqa+n&fVWY>V3xvf?D3YItKCV=fN1|09Sed> zx!zW=ir`5ClT%c5*6`Tt$sULC_<$QMk?gXqJ zxPgxcf6olWlCYV9Zqv>y-n}r~v9Q9FGkq^P@+zwLB`P?(e^YY8ymdfkV#4S>HG-Mh!Z8^c|M+t?~NX8Z4+Ct#7}uPPYn zdw1Jw2nBBod6vG4UJKfBoQ9riVOL_fDPUcz+J+>4*M(dO z13%nwb$Xg=R!;Cx2Eahs7iSf!Ey6kX+Y8X(*LRzGo9g1WYhW2%#>aRDRoTwMTKnj~WH+4kWGiA_-g5rjO#+G(vDsbsUG(1;Qpgn#JJ%unL@_ zf}sn)l!adls_`7OMN!x^g0N5IuX(ac& z)A!A<1=d?CI*P@n+EhE30+@#s9b7?LQkG;vt6QBQ9mk?A4(s%lW1cRZeI-2)9dfs? zo$ZQ3GiEQ3E51$M(y3$HlB7AH4u-a58H_J|#cznqXfwb_pIve6624UUE3EqF9p0b= z1+3!=aEd=kTfA2sB{@IuIg_g!aV*^{pDv#y(EU-a%S z3YdolUxKLUy?mKf-228`dG-ePAK_^)`xNwL{9C8Dj^Cf(AJ%|BefI3tIa(J0uRK3U z(A7M{zL;Af7$x|vHD5Wk@J6K0@U|NZ*Y{oohIE=u8T zcKvzx#@#)tMOE;s@Wm4Q{C&3~?Iqf($zMrKEp{oSFtwh~J+a%g@0w-rki1qc znQ>eR4rp%-EdhK50URL=kv)Gh(%5?j8N%ps3VLyonQA7V<*uxqLGlV*WGy)oSOq-Y z0Nf&_r$c8=!JA_zH86`0e}Abg4$^%P!!^-3`o0Xyh+-)0a7ql6uP3Xzv_! zR=S@6Er^9Gz!bxh)k;REBzb*5y4JTCCkf&2_3$l~DhS4Ww_Cd~393^67XZ(i$X}yS z@nQfDaKUktWbDUr3_)1x-%_l_Cw>_?%+8=m;W>G+Z@rWN<+}3Ez7otDK4#chI&=1j z|AsQT|G0J{X}0R`5rk#C#s%>AdTuoXjrKK{?(>;qZ)sqopv|=e++6ZF4r}682CWn@ zsqm|f_?tq5zeZw-T{DGN2o}DiiAm`0jTP{O42~DN+6Y!FO_*wTOk$ba6tFG88f1j9 zaz%S%L5I`QKA1yRqismtBUyCPjTE$w)!AA) z?UU)@i}IIrdjOUnOVOj72jHd{h@2M5{@+&kbD8iBb;}-x!%YF#aaRL@g|L)OzY_RN zogB%l0;Wd*i`*3-*MRjIk4MIXsib@+5;&pH&*k!qGa6C7yp|oo*!{?10-N!&?Cbeg z0N6F)T^4^sTkrjC_YR8O`zT@Jpuuih{qDh+>;pb+3i$YUzhm!F)_@&bIXKT2q>J-| z`F(oH`wQp$7Z4aBoD(=qUj)BTa}UyR>f{24Ua|b!r=3ACZX~eL&-bzw3D=7U7g4=< z6r{Pn1`L0*O&9it!gcY2QCGd8{B6fzserBO_I*!ATa&-4-rNJ6cQm!F0B*6) zuK&tm1D)ZaT;;{Wiv)HZSeu1c$Y96`gne_iUK7;@Qv01jN{0^bQr6lp3RlrdZJe;s zr7%T_YvE!67$^F1bP&c@@gcB13R8*#bea4e0nrI>C3cs;C1mUP=Ilf&0AqCrRNszV z0G8-B>+ie8*Y+6Dn!ml4e(QrgWUT=FWIPjHSMd)5*rZVvee;-#!L9(e6asHtN;!EJ z$K?U=sd(V{qgz^@zU{JA!>QhigCp53YwP(j*I%M&ESX zIiv>Q3jP&Q9k+CM{cEa7=kRCd+Po3OH4u|dwD#K64K&7`24m3SQ6Mnu!i%mFpj#)3DBzGpty(w4{|Q}9L)TWi9%Io3I25);YM&DW{2?n_O#QCDm$ zl9$^7tK?lAD*EjqU%L*AnD1QS*bO%S zGMuZC1aPW5hDqO99sqpxaQSa1UdABz+S+d_izr}CP|Da;#aJl(-vI1jeX@^&QWP&H zYF!By!RbzRd;=RGtiBY%GjxywQ&n=2NHuSeR4Mb_Bp!VC`EU0qp4>{Odx{B!FYAD*H*VR`L|ew8mEfQ)`*x7WO3+ z-C9dMVlQ+Y(QdTqXXwCjvuzR74?A9GXJjXm27WQswoz00sNZM8!x(7epp%nI0XJuCUJYCln3^nsc^Z2sBB00CZz$}`z@!NU zOfCgnQ_kht7~!`B@O($`XbRdyi>Dylox*SRkxC4QKOp%lIB!HSCS2t&H?fw*}ytxitYyLRK@0OjzF+vZM85!51+(JI69cVY!H^P;=>S0IrIYfO zSPfOP_8Z?607D^O0u#PT+c$v?TqLRpH%X)n;KYHV))sBeH&f2D(yb+00+=C5=Br)_ z?DuH?LkCJi(4tHx3qlJ91+Xl%^cxC@SO`ik30n-Oxs@~qa1iYG$xdK90<7PKwLdrp zFv9{GYj|~;dE&G#yZi$kz)!jY#%c5=iQmRu@@DzwmdZW}frH>=Qah9b{*p~1cyju= z(!Vti$SMR|n#NW#cp?nCJtPhFYmr*=mIN*tT=ccam#WX>IH*X_A^9u7wiYqTE&RD@ zV2qYpvDSf00sD4_#abniOo*{{M6mDIo*@-5!|jG(tiq|9b&XqyHr&}qp=%CwNrrk+ z^1EslIw_{gO+wW22w-b+tprb4v@iCsv)7uZjh-oo&6T2nf$zFi5K2WaP&LZ=x8Hmy zazXE>5_soNDqz|jz<9UUcb-$_$SYWliv$*|^Xt^PTYvq9Z}QEFvr3HB%bJ3Qpjqcd z2#2=!LGjMP0Tr8%FuSr3nB*B(?b7|kKJULH3hR{fpKtx{+5SEX7=H%@XAL+r&+J8- zKUjEt{{Hm@9O!0+8zqc z6K^>lcKtfe4f4k8toeHVAclj5rHgda#lX@Mgr(+<#l_S#7wKa&&;v?_%hK;f{2IhP zQWRgsweJ@=SG^O7S`ShKd-#zr#APQ?to(JLFBMa9t2Aeo3HLve4jt1csd%d zw!fWbtpaP~dkt#}S_^q=DR`^TJ*$F?x>b<={gxz!Fi8ZD6mUlTlz~qt9v(g>hVVE`GH#^a|AXu~}CQFmOEsqp% zFjWdzS6Y*Tzfq#6A^2g)NWxIau#viTwar8mw+d=C&}zwR!io7^&T-RWy8ZB*($@%R zAH3W3qb3zFM3%LM;Ie_fXN6vErRiR}#`v{pXK*A_djkV#_0Ll8tgKMwR$%xGScBtQ z17?QV>j(+Q!g<~l@GI7R$-FR9z(D!oi|F3<`%Fi(?%NeGaaY5s8<~h64t^HE>^=g! z?a=3cQouHj4?^PHbwrye=RbUU95@s1yz?#qelCCy&MyuCFq?t*_ZKdmIu-4;zzf7* zL0bZ#|4!61j)|PB7u@hmO9&H>MdIS4#o#yO-1{hWyb zhCh3^oj@sosqbP`aaF+j%HB?3+h!H8snQJ)%!A&&ws*vWZ;R2w+XK=huL3@Txz}xR zv96@0;40u;I5F7X>e3SbT#vx+<7V`-A80PGJmQF|xdFXA)r?OJfU@D$1? zhgVKezEiK?hSVq1hbN3rT|qQYot*sT?c2Y+J$e25_2%Zu$r0884DdVw%TQ<;d?ox{ z%TFC+6dV(TH4A=iLERdJk_;v++QI(};0${vw4xYKAddmeP6+alASs0UU%N?r5~ z)*99P-h^sPI#!zdt61H|k6VIqU|_+w8e;&bVA(sKseqVq-P(za@yc+Z)#O$D)U`5R z_|?JssDH3l^mXk#qvZ-b76P{V+l+azdmwzC}3~AHup?nO|~fH+A^2%a?If< zU=R#`Yj-OMCKrC8YXNwKCKYh&=kt!zQK+lb?`xo2qi#Edn*ui4S^R?Jz6M+ZxI4ES zdWE;+8t`Svlqf9kI?DG^$4j#x?(7n90a)w&71L$*{#(n-@)s-ojubGNLIn&&SI8@I z=K<>qEfw%+3R40i%r3wz&6Str+y0(jr}=TFY}zkM?czzf(!^vlrlvC+-?BA=YC!sg)ji_VwV;f_sHfN1-7<4vqr06yf*{l_x2dP z&YLrPM>%`)?sjm@AIX_n`)~gS;;zg*UgYzOS5|>;w|fEbBMICAyhu0yI2m0GfS>N~ z@4tPzx3`5}&AVo|-J z)t06v-c;+(e9cWr9zcol%1oS~mBN)@wXGh$nQ;Pz4AN2{dm>`3`-keRz|G*{j*4Fq#I;s6uTVx9jN6#*;k5POti5^PF z+hG5IrUD+B1O~iK1E<;?YhNA8GUuNu!(bi}tOj-ly3=>^Qee}BiQclv;PGap5rRY9 z2@R~oebbWI94lZ7B`^%8aQNSbV2y!n=2&Rb(BlkhUjxQXwkr8s1RepnAB3fg30c}b zrzrk1UMFQ)b}`B%bZr+(za%XMOnU313!lxZU%w`lZL!uvKr>$&HjksHSp&{k3u{iL zo6gX*6L`{^?yZtcci;C*bEJMTN>_g^$m_CnXXUpm>lhn-0kH2d0qsVlS_7^t81$lm z-G=l65B!q40>;@z7)$6~rl8l^2aM2F^d9VzvlaM$SHR9Uj{w})fG?9@HU)g#)_@NN z0274u?9*plz<>fin0Fai1)LX;age|PF#CQVFI@t}`=4LP`tLdG#7k)1OAFh;+1RU3 z9?)hXnDS}F?;f2L+gR@Z&6M=rOhHpg-bmgQQ~>w;+d1<&P1b0?j{^4Uqic2b{@tUy zN6;5*XKBFS4q)+%8%NtqheSRJWJB3ao12@+*^SqKJ_5jdCnq7|wI?S>Nk~#voN&f)HV?jJPuxUfHNQEt$H( zUbB#-1*hzz%T7~!Q|v|XV=YR#0K8>6MrwELs$QY?)yV+}+X-xcz1@Ct1uK7Cqou?$ z)4;D|S@@qmH2?5;k!#mWjG9VgSVgxX>(v)xO}@jAv|gu~w_2 zI_$EleZyck8tyAQUqQ}773Hr4F8NC_5e03Wv}?NU+-O^5uMSS}ad*Kifou!SHqdFMk@2X z`?c8*lE@}a$xELVt>SMf;E*>9z&>ZZvyyv${NxzH%@>pA#sZtBwMG4}kx2&J6UWrJDpppD&yub#H>;r#btXm0zg5 zO?}RT0{%KT65=!S41Vvq0g2lOX|mY}1Hg9?#`4$TtJJ95ZPt7hxm1zBIfycC9DA43 zU@F>{Va6z$#sx=wXvH%&&R%==BT@PoDht-prHDJpg=kZDRoN-6wkuz?%b* zA=~Q{Dn;gFyv#K({TI9R(Q986wtsT_zJ8L|npBW;s zNF{&=0B<$SdJ;!b_z@+~n7*3$tzc-M9)|TD={tEV;Usy-?O|(hQV|%d%aMw{rGYKm z4D=h}s}NTGHu?%?I_4>Oe7T5QR_a&N4S(@s5Eo()jI|yP4OpQ^1&mR40yoeK-%`Nc zWxOP?siLDFnn_Io_dw|om`vSmK(lZitO%UiDe8QH%v(xlt?fQGtAHDSaY=f??KjcD zUa;SIil4-A-v?}JZL4fJg0o5Fvrb?Ya65ETujFqYDB2K=f#2MJ6csFYalX0JkKR~G z_Bui8hrGe3Ud3A0m-=Z^KXIGV*uW`ilt07r>AfEPL$L z4x}vw98rw=RreYk?G!ZQ`!54vN&JUre|V+$jg@zQ|1ke%{>|?0J_;BVqkubr5y6+f zead-Pr`rn)0Qi&r{inoXks106Vi(o>iB}M^5_}GPVJ{HggSfbRTm{VagBT5%>;5CU zxrKr1UZS6y5OyZ|o*~f7ECdI`_l^b*(@ALqs=`%zyy}R&-13agnPiK#6H5ThvhErL z-ptESmrqVM;IP02#7zO81iVK?H$@4<-&KJ6`s5^Y%~8P*n0j7X)Tf6D0qVVbwjQC6 zm$Wpe0$}E7_Z~mq8vwi!0M8VFQNWSD4ZtX1dXAv&;n14e+uV%T08HbEdFm|z{DrNs zE%a6N!eQ~dCVr>?8Ngsvv>Jmox(KN`lY?6}b!wDh0->Ac^%#yVaO^M@5zvW)9*B&! zFLrX+O9*`rw3^_gWYr-}+fuCZT=fm#E9137GEY+Q12ip?3rMoG5TBQMo1V^J3IVJL zPR{0P2Vo9cs zU#a{{9l$~Hl-C|>mk^%G>gZp0B608F%lWvw1V`T&z*zyNGfosP z^rc^g%XG3kk5s@fx&n^UeR0W4)&kQWw* zzd!fX$$`MzcfZdG(5nDA$o*#poNIv7Q1b@1M-0oQ;<^(Xo&o>Sa zZyesZe&hP}8vI$O{cPSdxW z8=gTavRUg@NxLaYWlSNk0B}ta!wMB`En=n#fyK0MUGX&$O1r~CQl}mO+@_H6oR-#< zvL%}>1aK+fl(Q;e625kL9l*&*ni ztee;RwBwFC1&tMidk}PEunO3^B|HlzTR7(JYM!3u!}4+P8>?#( z9qUujN^*m)_;CW4PIw#$-th9}jMR++7Qp-ajQ#b18E61} z^YmB%pXV}$n-{0>_k7`I4#0Z4e>$AOLC`bL_EJ`T*?ola#mBZ6DQNt>?fg{%BYE*7 zecK8!H!rAwt>&n*AIaD&?_2=F;qhl#>rDlDy8@;!%%uRxRBiKb0oaYdhvN6fHJ-*^ z+BZ&Sp783)(elZkmzP-s9)P=dE%=3ZPxfAeTNLoz(?6e_B<_mm=%6xr zm3tFs_3_e^C$C)teu6MOLirxvC;$h#VK3g17!6wmFxBh)j0RxdfC~b6m6d1#e8eb{ z_mDvC!`O@v)|bV1Zd~tYLFWX?7XBReZg~n7y%Kkm^P6!ZYc01Nq;izOI3aDy(P-+W zMcRV+hke)!fIUT$zrDIT>-M95`m={$HvpSMODCM+EMDxY_$>fu=m%0N1zoyoII1A^ zYj>i1mB9`b&;)jS+0Xj{W$zCT51|Tlgs`>;Bp)WhxO|+UwiOuZ8zro(HSOuP;6cX* z{~CS)Sf1X=xZ+Vzrq#ofo&qg_*Hyp*m`t-t z-_a!Wu=Kt^qi|*xhoXj>u z;`vv*DqPRtAl#}HaC+CzbG=azeeiPU90h!ycK|T*7|{z$^PI!o`{(B`@!;;k`-|L$ zL^$;MK1Xq&b#ML^0DpM1vhpEYjv(#_6)-1I0$`ler>6_Rcj5C-S@Z2Af|R@l80uPP#}O`>U&U}cqAA0hnRup&&tKR0E-moQ z=f0{;1z2j*qGhyhg0SRH0L*K?RjLveOVz6cVdXW-@RV0MiGx>1{OhtdjRu|q@Q(rR zVTMtNNZ>m#M>#Bm(-J$PPwwHtVE%dCy~DPo2H>g0VRfViupz6 zgRRFMNm_!f8iSRv!EP&> z0^U>um;NmVC#A1BljmVQ3U}KqwCb1oKV8gU8rUDAKN$qwi*YQLmH4F`$3jcq9szA# z7X@1wi$zNIWtrQYQoyy7820j{bWB6=k{f}u`b$blSBzc@Y#^=p4<>%kNQ&UJ0dOf`!?ETGhYo+| z1LiZ|dWE;n@ftgbVgswZ+;^S%d^P@BcnR7zG>vyO^67 zB=Y4Hu(w^ve;|Ng-nx9NMM2Yje*f0_IV^_6T*lxUFj9Db|Buh$@agG?gM$xQ1O7nl zl>i>1paJmBI8RCYr^G-%J-zfG{9Sqqb&Y#g2mf5{>*}wUAw>Y^BL2Pz9O(;tP506w z5V=WTR2>!Fl;Btlqjo8yhL1Q3OULsjNg;28E)MPtLmj}<7AN?{Vc~a;S_Qnkym@Vg zu&a{T&jOV6ScJJ+UFFAzIm+7G515m7djl4nY7FQh2y0Nmc_^C# zZlo2(y-9J8$5!&AbW(i8@1qt9-4rm{REKf=hfwGzHT|6O=0q&?I1tNR3V6V8Avon% zD%9$YNS&O2#w0MwH;1Ae$_`@COHM(e*$kS1ly&5<0=VHfe4>Nro06Cpn*uhznG_SN zT18BYvTmYxq<}--E`tM6GfA!5C9DT`pmgm~`ikrxA|1udsJIos3`lZ}BHs&{p>kG# z^S%CtL_wDVmcq%Jtff!u=Ri}CcOrd-Zz{6vO%ZFzZIz}s%s@9&){+C&VQBs=4*Uha zC}Hng;1y<^-R9f1Ff+`CL*K_s2v*;Q#FR1$7~mpuqkw~ zFLqz3fL#MN2+OlK$SUBMyZfM+JxBKeY@(p|Z@qkW{Oqs0(ZU~Y9)I}o;pWXKV2pNz zZ(h`S{NaN#7zP92?MvGL*o%;OK4FpfldS!cWN;Mly_AcdL%GLeIqU+)@x&|EfCF3E zivq^KcMb2eSqYBjor@BNzsv3ghP==?%=H|O;8yJFP_0qL*vQ*3tOQm8+hk#uY8e5n z0^SH6X;7L@u8Cs8n^Mc))kOh(3|wy_?iazVw-t(DZ7B)zW(s;S1jdqIV1!{ivo_Wy>W-bL)=(Ikqt^- zm((Ybk+^yA;;;oP)yD%ge&`@>8*HNvGSWwxO?H%u(cpH=xFmjOe7&``L3@u+zj9BL z$6vwA84)CWr4QBgv|tT=X}IlZW{s{6;AtElDU51uM{z*)ymJj!&nhoFY72j!Dd}69 z9Re6l%k(fnCE+55nNPmc0PL4g*ZuekP98qyMZx`)EQYU4YTA;tqs#VzSiL@}fFn33 z0bF-A{J^s_qQWa8s}wNcmEgtKNvM~@>qY3v7Z`Tj((VGV_#LkVZ;IG0%lJI8Jv(|7 zG=*ubfXVVVSp<&=Jh2`4i2yGA>K1ynj^7CcTM6Nkz`aucl3fYL@4WS?sv@yWy}_yR8)0d~o;FYd`8(*7l4X!E(tEQkUIyzj=FfLhvYEsNL{`Ld2 z6v%ac2O9VxO$}gM+m&@&H{(Nc|DGZ9; zDD2^rFERyf9F|uM#(V)1bNK;TZtNyY=BR3K#;r`{<`1K79Mb?jU?GZeHwPTDbh-=F^1>rky#3 z^21Y#2m9Mg;Vo*HQub!g5#*%?yNmRA0Wc-Rg|#WS1#nt9`0AbtIP=W}Khs!F(G{>q zP%;8}F%>WZ__NC`466h9r~$Yw{?he26VNC0vjz-yY3w0^(aehh@SY0zB#XbVql7zv z|I7ePgmBbUiwVPW@bU4@TS^$QS6966! zhM^fGplTSU$B5rN@#$t1)f=*-e_O~E4*-rQfVUXphztR&ASTmAY_ zHGEB&MwR>R8K{$+<7m@7{u(Nsq3pl54(+I~%x`EXPdj9)7dRZVUih)&HH^!6zsLA9 z(o1{eV`U6hE97idl%_|Mfmns$@g4nSHzI9Z>ec`}8H?2mTg6`=5?Sl`HT9}%V6tn# zX3QCA(u5U$eYvMzVTEJ0uPV4ErVYYk4VcABRIt;}6e8HTtj1v9Z0ypI!8D{;>Nunn z19#sFVY#dVrep}$#oQ)lWp7<4EQkYKec+p3+M3Xg)ATYU^1NcBN%W|I`EYbG;B8xt z_}k*wpHD@dEP+2NVA|Tw(0XSzOfvV>-BQ5%V*%V`Zdop80Jl5ywFW$|1A6BpgVTE9 zQIu>*%DnSV&Vb%U_j>l#?)v?8@tY!Vf?rfK{kty!unPDkSYG*k01RsH4+@wJZKI2g zxH=cWZb%|U^WGA_>Rxsq9UPO8+xr{>eV#R7qM#wLCvt$?zkc}e_b;n}KYaM>o4;p6 zFa$pTaB+TV;qPxgoIlN}8|Pfe|CfE3dkTQriL~(G=WN1p)we6)pR0gz-2hCf@17(V zf|0)M7-&MAQ?*+N@1cOR^lK0njb+b&Ce%47rVzs}{A%jpw9+wD>fjUQ?~w|aWn(n( zw~@efsDKf;0C;cn+TPQr0png*z|v9xtAMrF;1~T1ffq3*oE5+!FumOX@9a_oFho8A zz$`7#Y|7CH+o`N7(+xm3PCVXfkhu6xgAY^CTY~~l9FqWMc*$V_JU3?#zsYkWhkJe% z%aC_^Z)SURniU%9@RqsRiI@)39r+BXvwa;D^Q@ z;nEK`0v9dE!1jH*C#7p5+3@}YfE^gX-DaZsO8Ht)m$0OdFXR&IdZES{G!Yy(OMd}) zY!D3YcB^2lUP)a`DBG?0S|((>%>8!?7~MU>Y+vgg-~H>@NCi7IvRVZOz2^UDJ^aeT zY68L7$e&jM2f}2#8iM7C3b@e)_6ij`NpLw83b+6amwbx9(Ycdrz;q|&C9*^6Q%szu zEp;miQUjN1!QeDq)zuWp49Z|vjepe0?BA*gDiv^$il+j`$?v0;G2q_0I;)_~Q(xEu|q30p#immklz`P2S@#!M?IrkE(fDMDD zI8y=7gWz?p-hY|1pxu4sQIuit%gbJC6h4;%zVCE1aagz0eGpRt>%m;8({1FbWt6EP$hc|N7y}Z~mU?=8KCjpMH2B0DoA>IUJXkw%K*WwS*6H z6>t>qumSiH$`}DGbS>BgoB*u7ptd~(KYI~jBrq+(i*wC;_yb)P@ZIk(t9@xukqN@W zXjv^Y4J~SIegyE0dylTSenYP?I&e<#(4zvF_x6?>fLZe;=xUGHC(onWCU0(iCq*y&>0ZT2{flb00HX?ZzZj-188=w=YHO6?(%(2UW% zCPQa%7$k3Im;tEOMjdG-!+6sW*1rWRNFBWxw^w2e7tp1+S5DgWTQ18i=J$mUgvaa#weg!zK&7n(sCz zHbh3tT@vJ?`uMJ<1H9^OdivXn&hh*81(oT+cJOV5=I z#5P?v6`f5Oy_5JI??y5eQ)}gKbs6X?$0(N&79pMf|SwNMC1BLe?Z&g`iFa#y74tx;qDEn9%11*lR}oK7FbH2F5`6QJ{+hi8Bwa4!-MY9D5mo#Aw|; zRq&j%(93X`)NUX2_{kW)9cA}a#l5v$kLO)ci(T>>JkEVbuL1C06!0FM;5*U8oWo_* z^YUH?uu;*386!2R=Yn6)%;uP|mcWwg&83(Bk&cxT`t7uqj}U--znn+ElShUy(`CAnW>U2e1@%hwjFvEXF!S z>71cwhS8}_T?`s`Jg3W8E4~-b*61_|?xr+t@#(MSRn@Tk^{QUVc+u{Ak2j>3UV9t%7cM7g>1#N6W`9m!ktG*?TRFVZbgwhtYGL0k zeEOZ;*t;}Uw;uVzn9$C@J4&u`O4As?ZyLci{}sLD?&P5~*EF*fRt8f(DbV77i{e`& z`udPs@K-H9SCYf1U#QAJ(YF&gX^h|s#WMW|E16qG;n&va6|EfXjj1W%9jBlpfkg}X z4GAEL-W`)$mu%PZlzE{|T630k>n^_1+k~+YHjh(xAZHz-VfD>^g)n7Pz;9K$!c_A5 zn7Yn(j+qR8G1q^)Qr8$S{!RjT2mY??#7SRS_V1FbO0mQ116R|SG}nN;)eGl4iJW4@ z)(fhK^WXd?1g8{D1mLEfJwpYi!d8`>%{W&6~eIah=L}8 z=dOUy8HdCPeul_irT}xJfDL>my9OKqeC!nr&o5a2J;k0qd-K--m~gAV{`IeafB)gH z0{HZ=-~RFt1^qWJBs?ebDgn@c*U3l?v?U)FV!4c80x}T7#zWyL$Ig}xGDpr45iSPH`K*zG8gpz1j)PPjlX34 zbb9R|5}2!yHs&_>mXGqiV9kBN8!WXhGX?!*2+GQWtaWZXhyq^9O@xVVK8`Idf#Am& zaan0UT3n=z&1O|NFD1T;XDN}!xEo+LJzE=x7&vy-8B+nLLboQunIUyAyM{V|7gGV? zU|0b2hKsz|l79fR0LRI>0g1G@NU@2f0FP2P4)yBd4*@CN7Jw;y&Y)s`h!ls;63#K0^rYX!=lATj`no+{-?jEy@4D=L;$QLk|JHT5A<(M??YzQU zp302Tl~0oSNhq_bvIj{aFAWS=hk@JoJ7Sqj2xwD9Q1cG?YKODuRcpS|a}eG}ey_Sc zxY?~+8?KY`m(zz#$8qAkX$5d$60|?)^=#iNb!HekZ*^B~2G!Ac%IaE>s$8 zI@)OTTVneqe^cY_)`4o`jX_q6Te!`1BbUG2wTJ!D;f%{1>g#aBt>9zE2>F%bW5R2p%uV# zR|!mRz(^Wl45>6A2Wo4ktS@y+o;kKy?%Ecm#Ty zQci$w1U5AwZzFw4$ptV(9_@$fI{jY(_(@m5?(DVcj*sEH6}lrZz3Z0(G&ao1+&%=& z#O&nBA1A@DO*;+1$)bOGngT}6?t0fk0DNbMv1nv>G%s6!*^lHba96-Mj4bDpU?{5s z2EZ|#XAl_C+Y~UF2T;BMz)bME`RE1J;qP(qyY#|4e8lKMoztQ`q#Loi*J+S{*sV?n_<;6S&U^_K$*6~ z2JrAv1zZ4rPyi-r06v7b5H^djtn?nie+2OLe+l4kjR1Vrx<|YkfHEX~bzpC!Xa_K; zWd#>mHLfXaZS>7#zSLjM193qwty$U(c`0T-bjrKH9to!cyW}OgaTb$RkZ;v z$yc#YQr#&nSYhEKS_c59Gm;g{7lo=|;^_b$`m%1F{m3XyI}K>*7yr@>fCKsi#Bu`_#c-Jos`Dutm-YGw%&G!mb%5=*595qks|%E z0&qUj=W_cZu-Yr^Cu3dC>(t*s+FmEeDZt|O4piITdfLxFN`*ZJu-xi%z+?IrgbhPh zGr$C*2*}9 zi_J;^uPb?xzX^DTVP%nZ5SK;=kAq@WaQNF5u&aU9wq5E1v9i>6X-sC(P)QW9+-;Gk z4f>y+*BZ*KA11>D2BUT$jdW1>iDd z?_iTZLg7F;V))N&C;D>$+!b)LF-Z*k6!&u|WId~@%{*;{rXeT?nDH<=NjQ*iV`Q2EQqq*7?tt2Kthw=s8%_X@~HXXLIu~oW(Krso%}pD&P&~ zfLR6&oS(iv+qjt_VgRfH&YERHNGv!3u=Q;IfqVj(e`??UHe>#;2mm%D{>^V7uY=H3 zQ6<=0wk_CDEcEhuf^}ZD z1k^@%2G3vPKYXt+N=3rZtv*@5BEai?v(aBIcWV<={bT|iJ^cE@)tkFP0oSIv`Q4!AGDGARGt9~|y71WnebgcZR8SY8oJ0V98wd5mjVW*4n-@5DRzk~cg+l? zfD`CJVa}+I{g$}C>*#Ye?Lc16&agxHi%Hvd8`94D4ghu)^bY)u)Lq|M-`&YU9F&!~ zF%~zk!`h$yCe-Z;7=y&m(7?3{`WR2_5<_FM7XtV$%dDUVLCC&ZBE)$X03QQjt|R<) z0L+fxy?0ClU%Y!8;d|-g;&?hJVB*^|nz@nzIecS*l~`v72gf;u<1tz|yltC*k0)oO zkeSI}*Fk#)LzBSZcpxuZk+^*DCqH-?{^lm6$D!}06TzDwL>F&*=K{Zz4Z8*o8C}n)7i>UG|0kBZ*de|0z)w%(| zhfM*0JTz?0Z3y~St%64GT~`*8fDz>261f1a zwWVq`2VBQF5>deO2=3~)XM+OX<_UGp)WO0xshI%Lnm@yDTPTne}&7?NZJngB`K@bgI$fNTV`jzQyR zHFVNwV5_5m3Hk$SJ9>vaZ0!gxnM^b|ZmioCu)J*p&`Im|Btm1bx_3lhp8nAwn5P|d zHMak%fIZfkn8El);9wc}hQ7~W zTN{l62EjH*0lTu<qdhPT zCUETvi)l~+GY0(z2LS)6Dd4v=0KCkQb#@y__6cAZ3z1KF=^I9cLj_&`aBFkhrDF&{$&qvCWIM){@_E{o8u@Iy+SuL#fKC& zld=!E?fi|A!P*4O6;=HZ=*@ptz=u)5&H>*>1m6U}uaUvv_Xz&oT1Du-E&$_<4&q>9 zkwM>6mM^1#pA8B)rrdotC}4^LIQC0e9HopzhN_TNjPilka{yi=7r-nAi@#6Lwh!16 zHV|ZGJupJpBZ9SjbAj8+}7(07+C%4ZTD8J?y>4y=6WdWd`8V;(omz)tx>;Zcdd3Fy_`Pe6nckod-XT#03LJrUoV0l ztRO6a%buHrv!orqv8I5jt9jrcIN)vJa$-wH^T4ix)(XN5LCn<6}3C~PGTL%NPQmB>siu?0@ugvyMZSj z^<;*wfa`oq%&NxNI(ph5n_H8iPMP$q4Ux~&f&L$dp!1hQ+N@|6wZjotPrCXIlK)8o zQ%%f^cLwT$*Z(*K&4jOWz*rIxyiV;d!Nt%jU|-n9Wfs_*jmTgv3fRLZ{TlSe%^4e< zEU5w>^sRsfpcLF19Icz{ercWz7asBPK>q3`y!6`eKoL}CC?dxM(#2PtO8~o z)?ZY>Xkh_7X@^~HP2cS9L;;_nfCFGgr4QHy%slXcdykHf@eZPNDV&+&Ym7jfCi7at z_c#Wu0Wj;Y057N=GWQ$3<^U|5*Faaz+s?frJ%qqfx2c7;9l(+o`I{_dt3>a9m`m8e zNl*pf_G}ISd~_2UX3^rzD{!%KBt+l@nyCx05tEGRjT4IbR1LYAkR>hWeS!-_ETTAjLsovUr_foG#Y#$Na zs)>c=61q*`CX>I4Wj{%@f`nKAZa|m6X{!#c-C#Y2L+Aj0J~s{g2mx#ySqE=P;ppG{ zBl`C7=kX{sQ7|VfdoF?J&fy|-1#FT=(c5!ECvdl7am(sve$&c3f5&WX^=8#xy@al@ zn=Uj(>=Ftk4n@mfT4|BM;8lmz=Sf$QF)$b-8 zheg$^U;lpQZAcdZ@LP}^0KeINGu;_(L)y(uIe0mjWT=!cIFDLU%Bd0hpZb2-HDCL9*PfpjQ4 zFjocK0bG%eO#Ftx4n!01JvJHfd;jLz(?hlaXZ!Ed=+aCE3*ac=qfzApuE*(-Y#fO*Ra)9q+szCVC93!ee&?FTfkdJ%AMamJTzNHUo> zS612_u+6t#+pr>%a|^JVmz6^#;U6ymLF{{j!j+mN!KQSz+#w1Q9WAWK2-QX-+@o2fK zP9F5>P-9CsXzo14;PjLgD70p9~CEw5qsj7BxdU!5u1owq@ZSG+E^^BfYrXhw>I=hSTdioHa1;T zz$O~~thHgZL8+#ILs@{E1<>ZTzDosMHU@D2qf8rZ$(jPz>*zHLdm%6UO}_kR5u73D z#$C$u_?50ZKC!@8{D#D^c_&{3&cIjuZm=76$S#SfW7U#c<(yaWn@T%0BG;Xxd^VsJ0CbrDvM zytv*6R@>07&D?5T+*4#GxYVQ?rsuNAR8n$fe>@U29 zynq+~DUx>|FY)l^=FO+CiJLk8d4mbsgCiXBaCQ?X`-0J%*CS4^W0?g8#ouDIp_7)t zVOOu7@nDWY`;gkaMe4R+R#Kr!6}@6M*YBqgJ&dhN)wFm4p=i!tq{9af;KUq&DHMQL z1Td4CB*AKk-2jZ}9Rc`Cqic@5qAk6xsm3e5cs=B^vA5D_tFN{RUYkj9X?VmJvVx0d z+x;C<9x$Aiwh(J&1@K|sSe(p9>&jX zEj3nlrrVBHSpcsVfP)=ft>%Y^Zv9k`0uhlQsJntSogXYVtr_1zkfyeJ&+!_kfGrBY z1cAk6hp_N^ZOID%ApS#oWTY{Hj5!l$+Ys8Ai|Bo$~HT;%m3VuPb3OKG2 zvrYzqm;x}$7fKm(i7+I>$LmLCSqgqlsjvB8mG5|ow4{~Guyx9#m8d02i_y?tBS74c zx9IvaLvq>Nzc;UdqjhzqaY!44f?t)bHQ(jwK>`y3&2=lVe(8dw9l^I{2;YWag3_0V zn3-KF1u*1|1b#*emUp<2pVe7;_qRFmnULECW$pTlMRH(F2vvb`Si7^k^Ae>S*{d4< zE>sr4;V)7)x;FscIUZ_vsP($Rb)a!q%}Yq)$%>nPR4;TQ`@y71?F#tXW zzhd2R#dGlae4t0eAjNVwPr&0gM9H!$2;ibz~W@ox}lfK~iYU z6!6X0HxF;FZazKT*v#1T>IM=RCCoPfaM0TnF^4TDe-B_h@Ji^E<*>8Gp?3(8weeF=px+WR`r$A24gH@XPWejA)==Ct;n~~^Sz66I;v$EzK za8xjRj)KQqz7VLrPcStvV%fRfE2bo-?K*}P8dbxPmyCqk-U>c>qF%4|KA4NRlC8LM znnpGUyY(nvmU0oQ0vMXYRuAG>fvvX+z${V5MYWQKz^>Io08>5m8gZKX4(g$!x%(%g)y6n1h<=N9CxlwzoZmXZ)(HyrhrwDowHbhFQjUFeo6t?c(Gic zSHM(>;m$>YJ;t!CBQ$+1e>)FNYg;fj25{UOt|sYWyqi~&7kv$L0G9Z+YvPx`%2m+B zu?_N3jxfdw!#EX)BL!@t zqiWNagcR3u99IMen1wiLgL-Plt&wy*2&rDs|CQj>vwj(|GCe7@rygryWjop z?r-V74uA>3Q_-sgu2s-4b{KYEf4QRq7Pa41^1fO69Gie6e=UA4aLwhv-+jj2`E480 z`mhQ*TY%xh(x8BaafERxU@qjJ9pmjyFWzJhxC8i?^ztamoxOu&2>k6`PQrRj#o6B8 zE-SAB+=DZgJws&C`wLHgjtD-0xa}~Guy!CXS^VqaE}l=@Zj^H<8C;G7ev`J%zBuWD z8~Y&TCXTy29^AD&uy`OZCq1Kh_csqy4Qiq9{@Q((HLV>!g~kB*W)$$oY5@Gv0NAjP z6IvoMj{;zF&w>WP9J}ErB=L)@0o|9Fl`k_Uy^c6$bo$v#Z(HE(Ef9>?k$d>`Q3r4; zTgzJZ2CuCI!21FiP-`8)w6D;Sya5blLjrnDn;R z*Fq16bTrVJNWOd&Eb)^BvEG#J=%|kLA1PUE#oj}yH`>cHvE*)CJJ|nP`+D6^0V9A1{mWBp zp;5m)eKD3Am`4F@n41G8F_Z*0BjB6OUCMyf0JNSp7P|tjpq1Zo{NHW)KZGQay*$b~ z(Ywp|b6f|YGwVB2!1NbTDqYkwpcU5&V9JO}g9-JYD+xR|G;DP+DwoTIvh>YMuD>!# zz@)Z_j+;7Pv2!B%7wdPPlqX)z!%%c^N+{gMU+epSGy!X#&cv{{7+lP)!id2LU&D~> z8ZfdaNpk-Y%b-!ek-*I7vh?cC_rLqyFa8QD?@$dr|A+$q?&p5<-OqW#^YZ7u``wf8 zqNyTwIhdP~X^(wI^~!Y>Fxg#dpDh7ie6h^y)Uu-aH!t4o?FgTDzX zU?}m~XOI;DzdCNKpkKc7AP$D0_hz%>Hyi~Gmv;g1jSk@B1ID5ofDa}Rcy~Ae`V3hN ze2vFQUveey!Eo@EhjGANs9XnNA%IB&VV>bMtbn(lK)FfDv#-n?cLvRx_a4zfUjQqA z1KnF|{VHGzhi9ia>Ew~jz9pSne36mMGvjV2broXg)8uws}E zNdtff!|f)3MX@=$n5EJMV9b5MforXT?l|seK__z&R+wzd736FOFuxCZS62QRz<@R8 zC^xFqH!|1TQMyWXP+Ugm#!KjCVch5hFpb%>G}l`1ieT#In-!=$LGYCx8iFx-oq5}Y z)$|nGk;nyLS6@Zkrq`-RZ_v$tf?8Y?uxvT14Z)2z>FbcR=4E|$zw-4@7Jx%w74QJy z`;?#e8)fHWYl(Tq3t@JR5AB zzpJq25x{*481_mNm^!S!GMZrh-r(rpKuV3=FeQ6^qK%D)TqZ1pO92aKtyPD#W2=Q) zD&Ua@rkb`n1&q}Xp(G2xrt=C|2xltS{lBh+&LH%YQoyyNwMCymD`XsiOt1Gcm9^E^)K%IZRc;fZ~w)`=f1oAY*_BR{N2x; zKU@FNcT-wE|J<`>tEr_O+dxHYI``n8@1RZs&w_f{zSp>bFj*HJ;ym!5v7u0q`CI_yz#pJIFrZyKmVU%za3A7mkk^j0V8R zcYlf<98V_91|Q%;-s7`eL`YNt|AI7YpC41~W6wCIT>)L-GZVn!?xu)+ zN)X5#jHT3-#o|`#O6E{F%dlde@vJ;1MhEW?H#EEsmv3{(RtBMOQg!R~#wh@XySN#0 zezeiIA>9JVabG9Dg~4E1%vFQ`3BWo6m^LIaA87#I2!Nq#TLtZj&tnB_2LMbvMHMh` zU0L}@03*g}#@+)swq}5Rh+hoi z*6_C|O#-$Au=f$h6uQXYxZJY1k)lnC;C{`4Y^ooou8w*x^{FEsJI(SJSW}1`_m+|G ziOaurq&(NnH~+KMOIit5{@#>(^FJ=fGT}$lp?<4%(5hF}P#A`wc}Dg~@XjMx?2ayD zCr7aoJa;(YUAyf3WL!)(1K$N_dSh80IoV8gcf>p-U3diLEz(vN|8$3^7f*N>q zIWL}#UFeSHfQdzP>ZkpeiuX+b(LgT00XxatO3L1L{MXLkFeV&jP9}Wk=`&o_kd=miENWTJbfa~Jt!=nH= zj<$QZq1Y^I^s+uiJRTOnF>x(5{vLb1*?axHAqVrMJM|@Wm>cRHmbQZ zK%&~wA?-lfC)n}ijp|#triJcp-m?zB!k7mh+>Pr%mx$%sgg6aB9l(Jkr9^RF$6<73 zi+i;bHJ1j;!@}7-EfM&m?pSsAXDa&y8a@q_h^pY2PJO!ooFVEf6pO%)UylG>)F<{1 z^}7y9^xyO+YZde&3?6R-e)OLgVRbG1DW2`^PZ^vQ{?r_ONyRTFeSHXCNhpE2nGkn; z3vfZWY-{dV=zn`TgHQ37NBL_Qb9eb)!*|`50yRDI_a)xmBrFVI`cXI=j(e*3jHBtC5ZQD_c`v`;&}Xzt_PXN5x-Bt|@`X^sU`R z?sp-D8HM8BuqnODFjA#bNI{3S*QC+@5-zR0LFU4AQaL)pyt z;&X;omR_yL^TdsHj(ctgTFt)rMe5IIlorp|XWw5}_0CSt&*=$Z8FhxU7+UuQA8_~Y z-iy0?F2_2i_P2NUsC}}x`)qx0k7@u6ftO!xy@&$NQIsCavG-=_vu}>y&~b0?#jCx& zK><&X0q`3Dymtctf9IFqX7yD7JeeFHpS_)Y=k7udtbH zsuuJ-pAsJneH~_om5ssM8HV*K+tz%eL~vOxMjnB+2>3trmX~wg#h=}^!tuC6?HnF` zQu6v<8I^`w44wDJD%v<&E$xrY8AnmhFTtwIkRB1u3clqOhzZ1QisE?)e+upr8iE(N zq96W7`wl8N^nFfBG?Z0gZbMS%FZi85jdDB)O;b$=mjX8W%v*8S*jhv&SyhT_6 z40~zo-|H+d{B{68>8a4SEq|8!*FQHj7QX~otmg?EghH$)hnq>@F@QUHi3WzA6M!jc z=(|Hm1^C=qU%EpVn*O}LE`-JIPLsPksapiVbfMy}Go>!b{r;2Xa{;^qfM?IFp8fUw zd?$xGgWvPzrhsXD767Y&QMZJQH=hV#sJ!@M?|3JZ!Hf5{*7HAvb{WHOU%dEjoX@`6 zn!I_k3xGfS1^`D3-#Gte128kb0r1^H0e_o)z^r?o+_?LA0&)Q`Cs4Bf%1yur3_$~5 zj^rT2r13#J0gJicJf!+xcKa_W)4r-)S38rsFDVPIKDY^wBZ$FcdWhgnst&sXhR^{p zQPh$STDX@v`U)2(5JvUBPHh0Zkqt>V_g`DPc%@XK= zBY47h7YvgLUm+YePX#czGSh^YSO!{xmgo#I34~4*za(nlQo!`7IpAdT3b>AL)}}(Z zP}|Z%wpI$b$ZLo*Ah)hj$hKb!oxt8KNQT=@%np;j8aa<~x9}VtT?)8mHTn#MBYh1! z!1K-gK z^0B*rx0Wt%Eunx90^swD8^1h1j{^SAx9@(NIpBi;7|HwQrwe=EW&swbKQr^oTIlQq zJ{#EU=rgHDUqt{%6ubV)UBJ|mVxe*FU;xNoyPvC&U@s5`xVZ-@!kNZE*G4knD#Z0|rCGB^=-O-z%>~~$0j}fA!FRU(+C&C^VK7)0z|IfmM5-$O>g5J-)=abofiDj>EdD#)H01?~?t)-0!do zTKo>RVc7yEbH9B^n=HX<*D|Hxqz;Y*^yUsUjz!Bl}@z)N=jo6wiKx|pAf zkql^EvXNCyF?e1CtA6KhmGCJEOzhO9SPt<&*nI1H(Ay1Slqqq^B=a&Msg_*HOS_#) z0efeXQEnMdaHOvZ_9V~1L{lMZGOvJ*s^F5qQxY3_h`u@oFf|3>X-QyzQ`M^i*86T( zzzL44C#Q!BxXjUK*erd^Mnll^2wo3)dB_dBmK}%2+gVTI75vRcU==X@_0}VYqBlvq0zRZt ztnwVbSHJMFLAg1MJ(ln=q;_a28SpYw{ecL0lBsPF1-n@DHCiS@Z6oB^1%FUa!S^a>9L#or7 zH;Hz9uz&Lbw!*W&PyU&eJXfxeU-`^uT)!o$Zw2Lqq=}!vakTmCHm8AlsV!(7XZBU< z05C+pLajr=p>HH{TUn*11=8(eqqIp$9Rd7R@8q}6hgUd$L!a2GocUj0>|_zmAQ>oY zz30FfJ}iLCB<-M!(Y#1Q0Stj@@x{@c?3WsjY9;ZU)qY?*b;=D0EdI{nv$_|GJNxXA zz&CY^u0o;>aMqRXVHgD&F#JDIW8?i>P0W0woC>=dP%ZA%m%Ufd^M(IPqUV z+64H#1%Oj^cgyyWHYRq(@m9Wy0tUd7H<=8+yS%jJ&LaR!$IJAH0!BCkU={Gvar&Ws z54eU9yD;cGGbfbpcPYo1x4OcD5E8;nM0 z^DjJZ2SInUCeqlFqL)nN+W-u4tp~t}-r@YoO{kcE&nBli?70KDE8tbY zD}V;J=fNm#y+jQk?(^0+fZ}Fu4-8pF?j{-T5fQkW z0721AOVhcjguw98bFTtmN?ifdEPtW`s^i+4u_mv5m1;a2*AVo)0w$~cKU|GuIugM1v%pk};LhGWp>8qQA?Sg=qy=3)lj85z zkQaeLuc2(wXf_V>MAk9+_a=7h%t~f|TM)u!VOBOIiD1L>NC7wYirevUZAs4Nbw!wE8Y{!Gc%&{N;~HvlfJZHVku^VV6D{no`gRnjviN2dB6n>|Jf zc*1+TJ;ZJBWoDO$f6~KFE*imRSc^-;=az$CFzmji^`+${>SD0eEiOh1(-|hu@|FsCNj~ERz)J<->2!Bj{Kn2N&ZkfGt$qW5 zaqylkQ-eoaNA}NL_l~&$7yxtl^W)h;wjROSpcg;r1;D0a z_ZP$7qlYB$_Xkh$v8Qbg7&l9yGxZB-o8X1Bs9tn%t$WsR1u)rK2eA1=n0m7*U<5Dq zj63t3ZOGx9+{b_OQ0>bitV1$H^V!?eL;9``0Om}pu7D46brIY@B43R*rZaflTw56d z_zy2%ZB=PS0$;n*0sLy^@Ed%9iQRn&9^os1Vev4~+>W25yx$26FTD*ZO*E|CUb%gH zP2GBPP{1ps`3TL5+Ss+Vo587mfEwo7X5&ri8aK4%iCk6&(|AqnuJCySDwvmLa6>M5 zr+`OHb8_Cc!~>xV$e#hZWK|$y`rWRWO6TFv)lJuG1+1R|z+knX#vywZ5I-JEPi!pO!gOjkA|9g2Edob z_|*!!-I-UwrGZVhQ%s=^L7OzYUvt0?Li5Prx|yF*Xp(5)P?%6Nz{TSEA!s8Z3b+{T zQxrC-kl3C1nmHNVotg~Ry8PXp7KHl@F1CyERRG5U5QIW8^eph27J~_x`Lfvck;2Xa z`x|MeND!Eor}v2S<{2D`X1pb!afqdvNBrg1r4ITMz%sYppCEw+uXv?iHT)m%HL7Xg z-PAYGHU(@&4@BTAgVzbDUzR)r+CbG+&XD)XE)9Wls0&t^C=Pbl)xG5O#iNF*DBxG` z7%E;|7r=lM-<8iZtey2t6<%toTAblrTuh%#PpFik)K29q-Uz@v^qd0Os-En|*_$n0 z9ss;BYlcGJBm1^e`0d*nHxeEk+~Cd0aZaUV#nnMB{+&VH(}Up@EQX*@J%xkC&jc1e zm$iEsLR?Sa2zb@Ph+j2twg7`)wjxCmQ%9Z_oNmtl_6EZRWoIJ^4&21Y}@Qb&R@n#RH40XBBH`|L9#hKz|l=*irS%>wf z-x*wg<=U&L;UqLIp6%HHZo;X$!y8+8SYW04zk)CYlwpcr;_QTG5+% z(q=OqcsuyCT^RqfUAv|Rmc>^dFv9&A1EtPr8`FuBa+#Ry6C@bF%fo+Qe>L4rG*L~z z_gjWNjUyIKElmV&?E`MdcC__Zp1z?w9J$d7n3wyDEz#2E!{mZ zXI|R3p;5+K-^pHQQClt`7OAZi!1gE+ezgEhth2QE6D^GaOzf&ytIw4JF8bC?aM8D? z1>tI{DPW!+h_Kf%uYiN!U#NhSunM|Fuml#r&s~ZIb&J6i45Ja~F@kFhdd~ih`Yq>Q z%?Fz=jWn>*H;F^gEkp`;3>Q_Gcki6+ItopPVYgBkWsXVdsa=UUEjIltNofMGyzx1n zID|ewES_UY^NLZMRu(4zykACW1iA(jQcRXN`|gl_*XmJF@=97AL#S(ZXF%=nwXt>V zmes~1TU}yBS`)xjNM8~RFN!!L|H7Fn$m@C0kT$SgUu416B71tJZ4~e>u#UG#`y$B2 zTSOr93D;&ZM!dY}BCN$_P^%ZWT}SvHz~@h7bdSUJi6TnUq7njKb z;Jw}N1kTfo>F$l$cV@`mFXX6<7*jj4P1}rHRc|!U1tK zu&HHauB)LDk)&&{H(y&|K$>2wYo~`BXRqI8@-=h5#qz6HI32)$62K7hHk<^&^40ylq{CWgj8a<#ZA-cqfH{^U)32*G z2hn6I;FXL*D}CvB^Y+>`9*~Fu_m!29Z=bjs#e0poCXE%mHsb9cN=RCHdMkXhHIK~? zZsrXEONFMhuMFmMS~c?i2*98G%x5N2bIi@wRpbBCsgcvBA{wxgQu^^{e%$)~_<=rY z{K2T;WBU&d@frHY#|qSD`AG3v=CqTb?>qGyw*k1_4UC%tF6s~VNgh=Byznigj%S3G z;DygFT`d(G_3S;zYrEI7ulzioC1YJ|GB9b~*u-Axz(FDZb> z*4985adF4i(c1%7{M{D6qjBg)WugMuq@Nb;Qs_h+5-=S6j@UbITO%P{2SblVu#8Qd zAa_rtC?cAIYp@csMYr_crS zwj4Ggyq1=)kPyG;ivjS^%yTWxpW&_0`g`BI7WM1O=GzarXacw2rvJU~1>U!j$2Njg z2GE1kn<7>@Om~aO*}`)Hm?nw>)@E?lnkQ*an-2)IJ!fH=`<+IpDd)M>PkW$0&p65iE9lvfT+hFM%O&lfWWa z5nN|N*O^$MuNt`YFK)%LEtLoszvCPF$7`WYj6(Te4ntRJ{vQk&bOxU!B}(1`&+>cX zEYl^}RSs)~;1PYrs1XBdP5sJj3NY`4#)jw6QV9D()N@%$;kpS424k|9N2jgn0=~sy zYg#lIX-L7p3IsR(>nbdUfQNs*u=~FQ@OsOe<{ieI!{4^oH^rW;!$}3ODc#6-iP#fb z0I*jasd;&pGRjOVUa(6lfb%wpCV9bPEdjhGmr0g}IpFiML#LeA zJpJ1=*zEwGM&tI?)R&Vekpbt@0ALn3-&Fyh9WTwYANcNfE+cxsbG`_7a}yyQSp|I% z0PA22Z?pf1Z+&wzA^GVk1U`8D4gjNqS#EWN^Z3YfI39Ww)(0Um06snX$wTTWQtJ(b zSpf}#!(^BnU&3NS6-;ij+__a9)j)4%}u@N59^CTKmSd!Tx0 zSmF$QVenHAfd;r#k&zly#5hCO=g)JQ(VBE-6L2Dew*wg5QquseC{E1^Ex&pBr~U0= z#5r4ZQyleiQrzu609|DMp&A)K`<;Tct&VYTO1p(6+yyFLu@5J83xf z3(=FvdK>uD%x!M3_*>1xKJgg>vHtyl%um}ew#aT*%wxBr>?U`7Rme3wELM{?Z{{{3Ic1&W7-&OB!RkcPW~o^wN&Gj0@m
`$f6@2b3Var|)0=)n9!fz5O&SErey0 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
T0v#j(klLh+E%EF+X(lq%C%C+++LQ4t?b3SD} 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�wagQTg>-QUdk=5lLONpzFsvU(kL0%43N!lbJ))?Gw@9t8jvJGP)t8%+l zkSP4>LfpT2vD3L|;zC6rB{9`ET**oHL#xGB;2EVscDq+!4P~=WxT>vQ>^d23S8Xo3 zJbAD|1&L}EQIL1Z$dEwJxdveNjm3gCyXON_v52~~pMUDbJD*SKO|kH@h>Z@63)$jg zwoqIw(qmq<7s#ui$qEIPaC8{y^`1+QC{HPuwTL*IV?unh&RXgqZRQG$z2ptL&2BbF zQfEFPnR>V0yug~>dYNdk+|5$RT6^VUIlI`kkFg$mR?z360>PFP7ni9bhg88%`R=(! zw#44yM`?pLhE{E(#o0iv2~k?LT(?|T09Qb$zt3&A$<;Rti23L04oZs-%h^S$n8u$g z1Z)*ei9^@k7J#?&IEtamTUi^mS&NjOX*0r&yhh3?Yvv!tpuM z5J$ZSy?x+No=OuXTf^NFw6|MrL<3s8*Xo(Uwa2M;6XN1aWFjwAaE%8Gue_3mtnQ>; zMc&Aj?@E>uj#hCjvP`$DhWin97Zs~=RGWdrTS@VQw#fUxA$9ID@=A^3ANM}14!2Ev zd*oF3=p!Ps7UA#`-1D+Fg@5teV1QJEot*`erb z0Ci8v(&dr|QwYGLvUSkyxASSrE10*G?_nin(uQ54v&xIbMqrI&AOXI&Qzki!*r8&v zmWbbdnu0PErL*VH6Vm6UX#(vyXvjc_41c4}yN^D~3^P<@?$m7Eb)HL6uF!U|Scb|+ z>zhZK9le?7dd!QpQkD50oxM~0=(x>Y$&CvUhJnZF9%pXCr5CS`P0XJ;Grtyzx%XWy z#IctvGpV)Nm3T$N-;a-H7sT89k`Z*r_!uTIB8rYNRBI+OPV>k@GPZQX6i4*BQ#by` z>OH`#WEsWsC04@3I4BIjZ&o(2m)^+#HUIk{q|u;l5o5R^0b~zgR4V-jz$24=LK*Zt zdHnz>|9~pwqW{YRW>r~UgW{?tISO7vc8^kY@cI95 znd0yCLOEmhh+wQWxY9VUJ3W>iIjPx~#5CGyV41FWUCIQxvc=tSy+0RZ=TnIh6!zfkLMo3>6{(%g~A6a9=C{B_k)1c0}LC6++xkiswP0`nmB@&wpfH)Q#kFmofeP)-n#i_A^OuVAVC-+mnf`YQ{V)j|u{oC*fv zjoo_v8UyL5+E$g96BXMsI@Ccg>wuU9sh*7$yz*kCQUfp{#IOgjGFs74O-g2uS`-*2 zN)5Y`PeW=WzudU&$g1;w==QJasQGl7d;nZ2XcZ??P(jW$O(WWiOhJb*XG{@WFDo}F z0<6;VU?BUJGjI_m7iHP95X>P1oa|lNknzye2w2c!OSB5~Eep;#IGqF5Ig!~}s)gdR z^2^I}U>V5!@e0*|wpHOcBLcUnk+*fJ(Yb01^o5xiAjW!iHR}gYRv}z; z(PvcSYeTw@$Tqk@8cO>M#n>#BZO$}})vp*mtot1GUg>>I!0D+GmZ7Faz?>y*ecVEy zwbVwjVH%p=4G9|Xuoa56hbBl7LUNS4VZq~1B=mIi zx9HKfp#_Yl{pZ}}EnsVcwl6@JGfBu-a$YjUPqgitvO}d6hDtJu*a5abKzna$hukDRb3(FT;9oF{i@-be$g|JMpLPCu~>sAVNb;( zsKo;>$e@UH#^p`Ph77a%$%Jh2%>-iu|R?Xe=5Vk3N~aoH!LtjL{dIIDP8g z=;`amo}9RD;`HRi_1B%@;e}(@jU{9X$Ku-G0ygmY_(EhpF>xKpW$~#5eP_V7QX!-& zcPJZ=ClU@r9!L}Wkh+pwiA?P$Vli3syo0Ck(ER}Ty2u6uiL7bDp~Y z2G;U$*u)iu=vQ6BrvhDXvKDGNyn-b3{tp«)Yze)_kzA4<;>!LrkfNvfd2K|>7 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

N+etdud!wq!?=VzJuc&3J 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

    aW9gt$^&PI$>#1V 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�pcKe2y+|K+n~ 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

    ~!BfXd~w*Hy`U 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 z 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

    ZD#cIP0XIu`pI%yzM1C-)z83^zW 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 z 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 z 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%0AL|O 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

    gN<^RITK=;tpVf08G`Z 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

    d0XP0~Qp(dAej|XfQ7{W?&ku5h!Gog&#Yj%c zJI%;=?Ty6QdI}YdeD{L|<)@z-!}wX!dAR zwd(x!vNc@LO#oOfXbwjgUIxJ^U~?hAcmMeVHUn?~u9*DZbCj`>_t#I~`HMTE{TK}C z{CrW}uK@7k;-3~5OAxrX}e3 zLExK{ab+)PRv&2l-pV1A@z2BOKH7mTFK*;NH18x~mVpzKQ5Pm7m+B7y>u0 z&Yclc2`+v=4`Si3;nQQm5hU^rb|dR9 zk->I}Ze>^R#!gsQGX;!a`|7K&DV4dPZ4<~bfh-O;imkr{VO0PoZQY$PN-!zTiYs7J zU!bmH{}sUQ@(#8+XR9Gm)i#yZtOpzPJpiel2lZW z!Swb71w21bzQ0tx!}iRpvXy%)_hwEo&6rK~KTm3&9#kW?mNOWJzT)mZrUzY7t$Xuv zo#&YqSHLSBT?~Qf0Nt3z7J=rZs)3Vs7<2YIcxzR!5-xJ;hb@mdYM55O6lJ?SB)9luyWH|YpqFW|>bcK;eScXnneyz&(L3u1S3@yEFs1}c2X^uO3PA_mJhqQK;t_r`W@H$h1o#`b8gAeECHW9{ixl^mBR+*%d z5y81ro4BJ1t38ffV9EJw;^yZ-EC(mCq9|ZUOBF968?bJM-dkJ)ft9O#m0VHG>2AY= z4VdOB)&UPRXPJ!-7CND>rmv)qnZOKsX)Tt$rb$0^2Pzr1DHI3<-(57_4wFeZZQVkD zVb8c~rf5vymKK0@4{Waj);(fRF6#mHdH#C+Wt+i*-&y|(h{!-RF$G!M@&bj~gv>I7 z=8FOB%#Q$Geaw=Cu7I^!%>PiO6}0WeF#t9_E(N?TEAntQNpwz__d4^16`l=|L6S{n z09f(tPY(*XV_tRQOQp5I2u_$E!E7N(O)l0!P-@;6nKUD@2w7RYMMxH~sX#;kZdlPG z@|exBr$Iza__&siSFyDu(KHfRm9T3DtwsS;fkZUVG|LDaUJ=p# z26*hya;(%R!N6b^jYO^m@P0PGC_D4LJAe;m3fKx@+dcsAH(@Hq?e*0nSclAKaduc) zkz@WBM@)OW@C^v8@kb;xJFCxj5P37ySW=?yLOCbV%m%`4ppcsyjn<<5QdxAnkQTVZ{UJP zEn{o#e^|4!@wM?a0Nm7kWNo2XJYFoH0G*2{V8AQIjCLzRZI)@mlNeZIu9RjFj^@RMo_l1VxO*c%OB>X4H~dp3~MTEH<%+ zm4MAM$w`I)tV$wq1h7~bFzrOtA2IOitE`@@UkfZ9^|i0rpXT?0_@A+E!i>^-_4E9C z(T|iXnj4#d5n=o0D)zq>u#<1q6fjjCxO$nH{#A|>*s>yxO?M-;MP2Y)1i(8aNGbwx zz0up3Hp=GVZ~#XI>;Qi3ov^x)sy`Ht1!myuj%aHG?vOP^GvYRo_N)<^Q}_g64hDy3 zx#-?J2UPJ0lVSzCE|J_I4O|!xdo>~OBR#D$u@jq&qfb(03Dd^Ynha{!JFQra&pM=> z!y)1c+YQoL$DpVqvt&kH(hg#!UTAwIunSr5rbEojyu8)}tuOij)98ZEe9;zni%+G< zBYWX=GRIdH(;hA@;npuNm6vQK^Xp7FJUOHJgYfEWW`vo^a-qzKt|R3F)>AClbQx)# zz97?l%J*K9XT(=M?l|?j%^e;*cJe^$Y2K1r1+4AtUYb+m#in;63Sf>k{jmI)0T?Cg zLXu-RwI0)=xW^73z|`^17wk6xXQb`aYE3PDeWkRg#5McL8v#7FVN-k90H?hlo55Er z4!(g&()v0WScGV7&Nl#4NsYrd1Ymu5!N=@-a6PT;PfV9v(#gDi<`j zXtJ!)e#GhoK4^pV2K7p3`cS~10>M(iQ>CP;mSAKtE@&EnVeeFRN(63a;Cljjp=z@^ zp(BNx*v7dlOGz1k(Y*%ewQ=?dwFHk9G&$zt_4UPD>#S+>?d!Kz#Nv^zmHB)}18WmB zuq06Z;V*oFnPVICoaP(&&;5ljP)94{m~5V>6V}Ly24+{&>JnN^p_N)O8w8MfyU#aP24hG!YA%Mw+b6vIYt5f<+)nlsuKdZrS_9MJRk zn0XkSYhGi@D3#s14w2r!H^Kc}hb(KgvGjM=i&HBJpjO`p` zK7+FY(S4Mt@rV*<1GW*uk-6mT?E>`z%N&rwkV&5FNX9(sU1u?$q!P6psIL0D!+ro` z8Gu#Xk}K91iZHjQ*u$y5TwW@aCo3~c{pFPk?!-!&rQC~?<(aNZofa^!n<Z9DLJ7UkC{-}9Pa(m!2|B@0VKYA)yq;V>>3T!Uc#FbA+x z-p;WVxEHT#nnSz>SL@-!pZe6Na=26RNgTk_f{cg6n0QP$&%V(TY_!EiGMmDgBq-p{ zmeN$I1b`>1?WI$tV=cVHquA8c1TO6fSHLvyLRQ7x64bA3oGHNCHyprg24FtxGFydD zcy@W2rT8cBedk^n(~oy*W%kxgSD}XqnH%axnXN*TT6g60pDHzWX(Ee;hJ4+L1_nNi zbd5BeUx^0)2x0b;vCBgif zf=5*CS<&%IRGWj>%}MOoEjoXT5y1c$ES@q#N(Vbfg=3v^O2~n%L`brqIt3ZMDDyps z7^U38z2HRVxC#QRs$JlB6vJPq=@&VCK`v-&la+(SufP6rIIm{{;MLrazzlf9wo0Pj zyw3(-40Q{D5x{|%@E5u|R%!iJ&8+>Hq8NTCN_&ybr6m9>``umpUN+^5B?%lAbnxj` zVh%>>K7+R?Vqii)Xc-`s8ymeXjK(kTDU#3_*(*#gqr{Pgaq)e{2g&W_2Qy(&D3secph1iIKEB* z#q;x8|5V5w5n*k~g%e^o^u;&gR1&nBqTYm91K@)vb4gk% zRwidAmyVaeQvUW#(^6##QWm~4xm1R%<;u*=B#Q`5&ZOm8A+*S8R^MGqWr>ZYN*RNv zg~>_*#_Br?Ec=%w1ys}*U=w$=o6Yjgj9zXlQd%rj3V%F^CDSZs!0(-II<3=PJt>q6 z(7U-xbhw&w$K!>xTC7q)ex)Lc^X1MB5IB#1^Jr`9(bnZp@1>d{vFf_#N6 zj8W8kF};EJG)aoprl!Ky@-pLFi`=!Xt@+`@ra*0@xaPJl7bq*twsm_}PF;obeWiR~ z-(b>$^r}o&zJ04ayH3UQNTI-O82Y2e3jz4h?7eTZ*5#f14<4lNhrP&Os44*aX909M zIe?*TK&y4aQYC5TYrbA^YXI;EY5?r(GbJUOIFk~cXp@9Dswb|`#MyrK2q*OgDkb_f z@||KVgOUbmEY9VDHUNhiOzkD<&j702p&Mt12Xip|3=%lkhm)d(aY*ijmIBthw}yq5 z;AFy1)(g6cH~_BlB#3ycJh{$4kjeG+NoE2E!OZlEYSm)fCuUb>JFc(XTIslzuSe@2aCXGEQwL?j1@=jQtr4mIHPWfshktL9zZT&*CwgF3W$|ek^<(eBd>ifsr!ErM+kmg?W$^?u{AyRjis(nlV~gFT#n>MTcX>_W z*)m8vf(fwjR>-|QGVz713I} zmMPW|&Fhl8-r(Tv;Cu@_-mGU_@{vZ+7xd#98+x*RgKy zgpMI@#9wH^%N!MJbU$N6Bcb)Jy-xvSy9$`29!ylJ$ugjQ`FQhE)62lFX$gDZ@ulNS zUzwS$ETv2B#m2HoS`b8MX8V^4OUK*I#a#9t=UOS1)Dj8Kt}@buQ)6MNZnCjHm46yR zY%5l%25GA*?=%sLnkZ^YI)}&beKs|Xb*D{z2|k7tFpu*n>CE9YA=1RjYkt2oXH0^GtZ&IILOWKn!RC@DzZL>uqU0?p7SwiD!U)nNQE*PONFBdN_ z5O+tV-s3;6{?R^HRzkRS=lU(CM_nd``Dh~m92IZ`aBxLO0KXx-b{+{F7VOUyu(u&t zB1wJykD^|zS}Y-P(WP4{q5@W=Jw@K+JbIt*|Mi_M769;Ii_n|HIXwtwaX07lT*5C5 zJ_gQx?@P!VrC#nB1Qv0mGC4Ijb0{ic@#LXUS18W#s|399W35tT`Kt=QvGf7iVk*n) zT0?qvWktjK*KggS?<7-tA4An5ep#BnrKbVRw)8eObTn#>MOf8^)2iddh}cW)Nkd&1 z`Srz>I#$&J>lK%(0ig@TP{7dEJ`V~Bsg;$t+Ag(6xF13QBY{@~Z8i9a#vM!Ho7Q=574WX=$N>rL(M0&}clQni2otES;XbUNz7EL_men}*c_Jiz!PH3|Qf z(@#xsvOB_@cp(G@{8p_3#wc>ns}SsDR&H=qLmu)o0GrUYXUkK5)kypn8dzA4i`Wma znIyj|r?r_butwq<0RQQpg%<%hsPhQmMF<@AulA^biPtJ%W>vXzg>{-g^ZCt9dUmpW zsm^9(?Z?86WmzxFLw5lFHX;ZVlCXrZUsS%+fLt5#p z^O3NN42HrSzPojKYx$vOVmz|-aBJ)Gk%jJN8Ux#{N@=ORdz$`CP5sp|6#aL^dI4kHCQfDF-ZlGW_g)AIZO>sjrK|3s(Coa zJ%p15y}M2HYR3Ja9?vJI_^H8?42S6pod-sIrfl&C7N(Oj+lmsRV0V%%j`D+4fG##W zxjso#El{qM`JBiA#V4+>+e#>RR#?gV3q85Iy1_2~d3BYTQ|Ed|eKMHP&RgkdIMJ9- zM;dOOpziv}b-GwqR#;Pk)d1HCQou}Y8GiFQhcQ#NG41Aztt>BWm5ZThp?HL?+rb-& z9MmnA_Ha(~1bf$dc!SfZgfTlLM-q}m`2qA2s5RQ^Trxq+RLqgUq*hH4lP^GX0;eLa zismu}%t5upZx_CXTQ%lNL5sDVIrwGlQov~FxjA89Fy;uV=g7K{J50s}Ij0X_xNr^l z0$!yY!JHwrFs!(-SceNkPyY{5E8DMPGt|B?71Lk-@|Sn<91roPN(XLd7Jbt}7~ckT zZU)n=i?9H^tAHsZ78Ni%0QM*w`I!Q?c&!5V2WaXKAdkHXZ9otN-s_aU6fEjxVydjd z8UUky|Dyu-AyT^l{&!EcOKIrnG|tQ(&SUL20UH6YJR1*}{*4S)0qRzw*xk#nfHiI! z;NnCOe96Rhpl~%T((oC*ASbZD5GLEe%o z%5g~D?m{v>F@0ltV{JTz0>uqACsHc3r5j__>7<(aLz4smLPKlpvjyLanBe=}N9bV0 zFQ-SBFK-FG3y9r^>5*okv6_rcmDbwF7t*F&Z_?Mazzm7SvZP~k5jXdEQWzae=$(}0 z(o~BnN^%z~v&%e%pANJd_u_x1i8Ytfe~h+Gm0h0w?yW?B&R}sgMSr!7La#zc1p?oj z#RtuH|Jw%+Tsx_+!82#x_~z=BH~8*jzjo~;8#{JVyX9c3Z>+v??W94P-4|o<5#DA8 z?R*m1THwcm=$R()5#^eW!%?1IfEeS2)IJ4M!wK(vT1xs)!QZnj!!4cD(}RP3>IB!P zX`u8sm-xcxkHjU7*ze=0DEb!wL*RT*5sNO_UHTHM#Dq0UsGXl!1;g=-lX$XXVHsLh zmT^kY%$~TnvVM=z`zYZP<&``FyS^dM2czkiDp?;>)QHKcapy7CB_Fe~T zrTmMwvwMx>E91BqO9@+&Ept)25hs})23qQ73^CFy3`2jk-J6A86b)!ERH!T_L~ksK z;>MTQ21Ep3FeTO^QMBr>^{P@8tcduE3cme2e!kChP9|$=t%}dQopa{Q&UEwp&1b*Q zIp;Z_e@sByG4Ne1G?A~*%%ofMziE-lv*If~r)J$>>^|i1#LqIem|THpISK<_)DpDv1daYFedy7kjIM&V()sTqpDD*&3(=kt32c#&*sjS zNTwdw!Bh?uQAbCrX)#@W0LuY13K;YrwA2Y}rv-Qqc3L}E%>TRre|K8W!Gz z7sNgSI64KI-z0H%%FnWW@%bhd47UmW@b6J6P zIyq2WwkFR^u#|e@h>>x`k|fQ_En4TB+?%XYlpR!Frr%~5x&JFHdyEq(3iB#(Gbm3Y;LXDmhTVNRbkqO{k7U&Cw zN#S&y?@T67JM+Jt&uPLO68r2LYH+){wa@`cmxmKqxU}Hrj8~m7hG@9@bTV1Z<|lA% zelF|ap6-BPX+undZAK-1n947wHF7T7x_wBiIFFIuuJdfG7|20gwtcQHg+Tq{w`l}| zt2?as@9$`S{(~KIqAfcB%yPa#F@-j1ztSd^*&Mu6K~~;&K5u2YC|Qc1{A8?J#G^pG z!35wCN64___fZ$7D3y9R5|1s?l9h~FQt*f>rA}o(krbmNO)IM>Q$n9q2W0uCCe*RF zx?aASOGxr##>{jup5XZj4ZmZ2|Ks`Fw9C)$!sUYg7IdNb;`l>H^cL7U99R8n(4GNr zdHd2Jp&wtn7+ssed#qU```xxi^4DK{V`lMNpKw9z9?jQ59MK4WFVx+^ zzw+1{_6Un_U;G4;7sf(gMDHiQ{>CTX`2Nq|z4-P|sz=v>&6wE*x|(W4tsh#LzxqIxF^>(m{7%+(IE1TiiRxfniVq{2#5;SqN zMhv5x{W@fBUF@A%6LvYA*{jd&ovF`}#WDm1Aqpg9NdxM9tuwcrn#Ya{Gmf~Rg91M3 z_%j0J8cvxjEzmg^(&LJV>pT-<0bQPh-_f1z(cFM`-Z^CMozeCj!^Kc@Ocaa;UdYaH zIUlkOs`F(?9+g-w1&oQowtvQ+FvY8rNlludOdWcs&uu58I}6*Lyex;gB1o)GR#$n( z4C-`lb}r`=0zl1m9;lUbV&kQXf~VWxQg?1hSC!o=7x4y2$L`Fy&c}z}9)IX?>-N?m z8o2}t17c3WwAyCn`rh{*e(!tVe#q|p!}I9d9ijD0PY}P?&kMEaVi4<)Rl&}6EB_J# zm@1sQ?tkniyh_}&p10oNILvvs%U$z(*E!Q&RTV?T#PU+6DS|Yp6_I@P zYRbpw1}yf@vw&eYj_P#>QT4|NY_`npd5K|iuo_P^>*M-y@u9<`8ZY#C>+@gSnuS^Y zetU6-*>KB2f40c0DybL)q)rE2#;;{F1-zZPloe;|;tlmRIN~`t@Ug6!9!gIa@f(ar z46zb}?W+FlDfpfE$s%s?8a4wkx|Wq>Kj&X<3mN|E(!!)TYEy#Na?G-+MZ&tP&Q+yo zi5;xBV6Z7ykQsC>39^);R6W1WC0rr&3e3uDrz>L1F{bukU4|&veMsmM&I`aH2o`&4 zuY+LD19ugYxdLwy!z&-V%YRbumk)*lNnn9k38mNv0v}wRR=^?EWMV-8a|H0I>Ji-f zuxS3#fuzx&Yi+4OjK$g+qfhngoFE_~HB>CKaljl@$5M>~cK)&<-WnlCk~LB_DqxuN zTxYxu*iy$`xuODgpx6i7!P-E1s%ZB7kw9WH=7V>XHCJ>q%|C49-|)L2hks`l0PI}m zK^?$<``b@{8qs``z_CbqDpBokGIi5tV6zr19PGKG9OfILn0vrhwQ_SbQ?oCIICcO7 z^53oV6X`|AweinLZL1}RmJ&x~2uxX~Y1KH`7==wE@WM9ZSZQN^@a$>l*(!+5 z=O#BhS-Lt`42dC?SIJzKY6=>AyZ5;XF_KE&xV!)>d!j)LKxK9Q_;BV!54XO3NZ0YL zTBD!SWLS=9SKT_q0nNnQ&HKVes!ndeylY87p^WqLlBOF6v7xi0)_ zt$>Lsx2tN|%%PaLL+gOIh%W0d*tr}LW=*N%*uR*a|5rOE!v=uK1L1-eVL<$$VvLV~ z?98AwpiR2UW)POWUe+&X==xQ*hcv%;DVxcQOEY}0eE!T)2GrX#S-Z$>sF2;mdno7O zklW^Dg_$v{0?FUiXD*X{$NytwLmoLBKLrM-YE&nvR+R^Tf_1~n{78{~?|CH%tKcpC zPFa_axLT3|USFyJtO2owS%YrX3KH0NqA>edpyN_d%#yzwssM{UyjEqyd>!5*H}xn% z{HpzSN6=+$?XXj-#R60f#oFzd-M@QpWkWjnO;f@LZ-zEtOpfWUHw549+Uyr6#qP@i z8y(SD%!=F77x3;5(hxd{W%AWp#uS^;%i}JQXOTHRfUi%PWMvMSi0#lYO9N&!LCnn= zHB}Vmx&N90*f9%ijLyx@F9=Pic1u06bv{x~Ge)rS(8}|q2A1N960Ih#9Vhb78P<7#s*jH>wk&PilESK8jRSAPjj*_`bc`*u^emp zuYXs6c+bi-c<%XgF__gH(0%O`@LdA9rJ|n^QMUCy=Wp`1_u^4bt1kY$z5=U@yJ?$-v$az(59n zDGU6SMZgl+PXIP&XqE=WA>|qp0618xmR&jsmC0Nx;h!=vW_asnW|0i%7})czi;Tk7 zm80$S+O=)D1tqk!9u+d2&n!5f{kThVG7pZ6r*tpsFl}$z`_||hQC9Fi(2ToU+?;1@ zlC}Tw<=&(Lb(qjO7{tmWi2~9~xLj6%W(E&S33eBs_b5PM(z{Sy2Iz!YeQx5C@%oyXKd|AOcp`8U|uoBYMX z2q`k=f;KuJ%1h0F%fx{x{!O(7S8x6}7$b{3s%m36pB0Z&cE?MGNZm@VXeqI@8kX{E z50S#D-u^5hez9=~q-ir`MW3%(ki#4`Y^+w&HE`{q)DI=rG3~;iuWQDOZ$V^E=Lqj! zyTv$QJhpuI*=z}axkpI{y|kihSvHe%Y2HQ&f2h7BPfK5GUdZa`G%gwrn~|?1fmy;c zB7U1Lf+};%!z!&SvC9?uCOPOESfU}=BV4h!pI@zq8+twYcFaj@z-b693O4V0T(I0DEY4BPWn%+i?&+E5CN+&eEYs#C zR?!$0)SK3Za<&tH91Z?()G?D5Wpx)h&uS;*a~QB10Gpjqz*3(9zygq;5H4+&a%gg}pq3J_0ghs?A9W;sXM&$({rQz|Uu&LtmL3(BiKF_-AVT zEw5V-$i8*jXpiBg@Zw_DRm5wMF24*$Lc2C_z$Mo>rgTBR)^&_pd z%l1q})V5Z79ZM1&>tAKhN2E4p!6qqd<|LpX?wa_87Ti#wq|(}+1i1@xWfH>YYIcv&OaRu9`r^;G+QV$LNYQ4XZt4OR#*)FEj-}GZ-1O%3^U4dQzu2$mFn4-z@~}S z24N1$G(!MGsVv=MEOSP$Ai9Aa(i~h?73@v6SLZILhli6#8M9+P{LI6x9{^zalXoyp zfP{D1=zHA|?0#k{7?nA7UjkSe&QPo%9sl&l_3++#i71nMzym&96)}NnAQ95^L7L%y zMW}%kDA8i-yz+dqa-DzU_2ddmGGtqkoX5S6S;OW~j3HZ=ngxkaCoPQ2yQ%&V7>r5- z#T>l3AERf(wxclz*gJ;9c%oH^-IgXkG&&2*sxwHcUfQD-BI#DWe3(^PI+O^{2Pqo7 zU(FPkjInKv`4T{RM0Ob!xmspIw@8~t;Mn?`8h=&bPq>;Ft4)(|)))n7T(Vs#XAQ%8bC+DPhdgqyt32?}x(_h#w|;)^l*Ecl!re zFbnI^7;ju%5En0_)W`rzqB&wC#UknBhZtlik&#sqIVBw{u6Cb?+P*a=AhMy=qlFtA zaE%r!3xxnl$yh--5G4t=2}jCuvT`hDH!0wEd>aax)y zo8#mfBYRXArCHc3X-)Vm>W-;jK0h}Xt2D7b9=RI5%Bu}yqJz8a@92j%t?c8 zR2wN<8|Zp{M=|eD0%ItIGJ&uN!U2HiQsQsZSBf@ZVk~K9X6EzFmv!BpZN>}p9^^WY z{9&%or;om(K}f7DkG`@?h9SC78T_fSNS75{5!rWV6}M?8A9d*#O%w3MeiKxy+@&)= zNwAhguJjP_U8)P9L#z)Jmbf&~s2xm1!V{WpA-(svw(6rCMsF7-03Id_H?s%D!!5e~ zN&qtk>4ywMQtR#x@ip$!3;MqJ%SM?QM;7wtfj%G%$Ii!gL~N^|zhzXwq0hYcB**|E z3OLuW7XetT0K#c5^F3~dKAuzhHki2MS457YT@ejv7;Fs;wfs{7c#2{pg={R<+AZWP zVXDf>zIu0MSnS}1H8G-`VAe#;jJ@RnN$I zVEpBa5IrSgQ)F!_?k-tRarr=m;EE5%N&~UA0lVBq(NZ<71lMZaN9;-fvnm500VxUS z40)ZGso#n$#x*Qz?0UhjW6K~n86~wz_ z=}0;B^-~8zG<({Br%Vdi56)i}5%`bpo<7wzI+Q9%hiJ+g?Za$}HNE+r4?q*e`B0Ie z*@Is4ss#2?o8V4YWX;$J2*wGL0NKhAZyifC&8b(A(U)Q&d z+B8>sl;56I1m)x3~LwQf3l0 zjD_->aw4{k`!^bUI4kD@9g$1dXenUI&HR?$7|f2#0wSKt)gpXboo>(321_$5 zu3v#T6Mr#pT6>?zb#B;cl#N|uAuUA?V|gkY%-WdKlM+e@rj1%VZF_4%yn0>L+*Ve1 zpfEXa1HRgIj(XG#ejB*_B~wegT2LTfUnqUZI+N#$7L^z17fmy+6>*$a#qnz}m-xx` zOhdCrAt*?13I}(6jJbm#3 z1QUvb#^0|z`VqVN-A9tbAQ;r%V*U++L?#;Tx=LfG_zi;5_i2fbI>#rS$mruNwk;WV z^l*pSI0eRORsp6mffFs>zPovL`!SK7>SBwHXk6)S20m+;ZEG~lY2noPqeFT^bA0$# z>u|-p@4k9MOYmMGe_cP3Y@m@!9Lw@R>$Qjg2Ejr8`j9p4J?gdA3xbaHVAc15r+~PG zA};0tV?dn0%&Dq<;XmeAY`Kj!zo<0J9)Az3>RvbD;tiTgY&E6BHU`nD)xvMY;b6rJNl} zS#*E=xG!ZP6mt=Iryj&kA~%xG}0P7{m4NvvB;3{gU}o* zM=ojfb7<8U(Jk!xbF3n60;ZIbIeq{Fm>r$RL zP}J*31#A`-u#{`ORQ$C?>#kg_9trxrE}SVK%f;8&pUi>GwL0>b-X82iy=9s!I!8&5=*1R;I7b9p=W z5YFoCT+H!^gKV|aOScp3&UQ{klx3pUJevK^IARLik?Q@d2OG8|JhPlWy$>0PloxP? zFR(0%GUi9MWiW`T|o9{Qp^tOhv;*HU$GN=@$fGMcbzNUw7F+g-_0D8ss z>+*jm<=~!1tzd&vqnUCM*u2j^wXGxANr4Ziub)i%JV$OsSwL`5n5;8VXnJFRG$ozN ztkDk)Vv`;%|9syq`rt7*IV)*JFL6T?kAvq*D=`r6`V9f2aBSK(!@8mSKFmt)maxA5WVZM^V*B7cEr=LXIpVu6f|AmWZpd(LwoEW~mv&kjw{MmExbZ z=Bi&a1^_{*U`Q3La>%+1TANbPHx)K9vUaH0baedki7NMkVBR#(ZP-!lXx5?P-s^$G z2=EPcutM>!$OSD7haJRS@qxj@Fjb&01m1k|{NU_aCd1fVv}teHTb9HPVkazG>;#`6 zgK3?A_wCPqHfrC7+h6#?rdTF*i|EBn=?2z)Ai}Oeuq)tCk&*&7i_irw!61pCBAc4f zAhH_M1)hmHET#>3cs5CDX-w6^FjzK>dqvV}kvZ)gevSD_OE&G*>?1{|6mtNu+sk@E zd-TXg0drD&R`P5w@!g&(0#YnfhBOY3;e5v2o!(UWT;mIVB^_n261=+pf45KD>L1kr zw=uXI7XDNFlL5G2&(JqB{^HlzOA_AhiT5_^hPXOyQs%3LthPxecqn;u`5t{pT|`as zo-=1Kj3YxzvXgpw163y|;Wwg0!n~Zo!eVSJkx$wbFx9n20J}NK-&YIu+;!$$eQqq_ z%dy5lae>_3<3~jo7qtIypy?W!V_H~hSRTqQ>e%t?YA29b;O0^dL+V2dimcG9IDo|n z<&$i#BD^CL9#n%=;X0W7j#;Fnx|TDLd1r(_`et@nA3;ElJEL#uy=+mWts9nl`Ox@F zBk-7Qcb=x;N4xaFniL}O1f%a&=Ncg>I=nsKMH3=7k=OEaULdzuJ85fsm|LXeo9SFD zz1dp2qWKy!1w_sezgJ3mOL0Mii86r;utd%F`!@I{9dpQwY9NHCcamy+^tdJ#7OlYJ z&pdqi2(+?d2;lqP`S~LhnUV2>ulGGh#}49HW`9(h0Le!G0%455I|^9Xkmat5kV1KC z0vG`wIAcWCxge!lS7-t5o$uXKU$Mda%a%mFx^xfpF-EJhq{t_CXtBgL;I6y@0-uzk z(@;jj3^02xl)0R2$Qu#`TU}d;N3Kk{RRD03z+dr>UpRocOgJ^Dpea6QkjI=29-YcM zOj)2)AKDiA?}wPlOe}X*GZZN>*i=_(J4Q=wpb2MNI8ki z;ErZN0n0)-EZc%I-7pZUq-$lB*Id7=o$lfOZVE`*;)kGiJ-`MPEB_p_{@J2#1n`D4 zy3z-xcX>*cOU7NSz!Bov;E}k^Cujh zZ!WU`&e=_)@ZysvH%Q#L@tsR=EN*T-Kl{ca$4_p)arVaI8=t)KNk!r(mZ)$h)hqMB z(Z9qfg0%n-2ood1;d8RJSGY3+WoC4bjwWiv98kg>Pe2oEINM~VN}dR@n6lBDTbp8b zQ^IfVw~HW-5cVf*pzI+qn?g^9&kE>h# zlubdyNEJ1umSUaaV}t1?nAuBF*u+M8=^Z)MNYm3*kGyumiSX}@}qAScEbCq2*IpGEFegJPMjd2_(^R{Evlz8b48EmAt8@cUU zw`c@T=_qAmwC-#pdeJ^Z?mSHKR^qBox~VR-w(6`q7JXswQ{U~%6Fu3V?0-c8u~wh$ zmfLyR8(q6bP^<@+@v=_J906Q09Rri>6A|k&A3RDF8d=T2glCka5HYD)chWi=SE;oD zQ^RnD+|3Vn!a7)daV|IB3*OC!23KODpWNA$xsE1$Ndi3b%f{?4|8vyw3o1j-b zzV3u&i~N<{R~IZgVR7R61+h8Iv8=xpJ66*A6K2qs5vrwhIxpqE+8+&$)vP2UKLgpE z(a0qv`$m?oBY~M({(Y@0=%1Ax7`NnFsRFFNdTcCMqL~P_lA~I`8(V<8t|^`H)9~xE zdWxg)@66Mx*)|#%iS5YbeOJJIpMwF3ZZ*vLjy06J1%0K=P1sj}Sd&*d|GfFt=Avj^ z(5_}9T~n?0xG6_+{MoZuDI%LHW>pSE16h&&ru{3&DQS#@@M}v+MM2k6`gAe?xLSvM z)Y3(8)2(Fl}(h#iv=x-Yrwrn&jQ1*cg6|`K2VBXi=qR~8~h#7ceeeVP53+8-n;~SpSNeh?-w?2 zz~Scv@ZFRs{sQbJ;;&}O-~fS{ru~zPXBAmLVD-ben_UV!fUz)5p%3->+UKkvuLu|M zg+-jv#|geU=~NKqC1&h41hYkaLs=FjPa{}6laa1~BYztPhu&H2f=cz&@F+)%+GeavLm#s#ed_jdrxf;-%lZ!|A@IpLI#N#9iG|6-rk@(O+Y zimP6JZmLv|-JEzmd$nS>J$z0LJ|0fTl!E-z0LU1G2bvC8EOdZ6VkZDE!(s|+VOK=7 z)x>a!Z`B|dQ_fp+F`+jcV+G#}z>&^AiEhZ+`K(6!TDSyL)nYp6auC2z~*0z-s(W4B@;-*Kik;N2Hs_YvfM@nZMU z?xPnRX#d^ceYV>nAO};?r#&Y8olKZ(siRl9o~V!tMmpY{Y!jvfD{+59_LlX9<;LE5 zmxr*P!ty`^?m-2ByRD;wD3}>K7x9~INh}W%>~itoUB#pQ2YL1&>(nS?I(#I)}QZuAtHvpzO=QQECM-E`Eqc` zq{4B_+b-!FltYn?_piJ^!LAIL40)ram$tmlHGk;VU|13zx-k&|#JkJad^!!mBGUXh z0>Q=n071T%#tgo-{ddp!U(ez*SQ_+}S_$5TszL}a;r_?NfOu_HNxz#6_&8O|7!_>) z$#hwSKm7{>>aF_}Sr`14h?>^qx<8=n@J@X6`0y+;VLaoD6i?ML%I0A(eXEa5-9iFf z%bdsVf{x_1;|fqkhLX`L((*y1wRE*&Mq?dRx3puIz&>*Rhl{L)wPa^xcMfxKEYqRO ziR?7CYH~eScU2N*?O*3Ufif;2u72xOwe>Di@)rm;mWlk!X%@B zcY)g&mumG)@G6rM?ZYsnuQ`CNIX0ph<3Jr%i!mtu_PU2#6Z2wP97g5(QW{b&n<}2- z=xf-&`h?d(f1~67qdUDWoqyGs`YHfm4~ZO_fZgFrk@aNiFuR`kD--v|fVXBvdKP2$ zg^CJuN}GK2R$O}@N6m{FN7-3Ak~k(kL-^>ED%q31j|!N(o;xSCeNMxW3V$NzC6w=2 zy=YOgJcG$t55u9}(EYmRAB5b}JJ94Jt2y5_U`WCuh0f&s^_}_Kl1{By>OzSVKyX{~ zHc2ktsYJTGL~Ig>Bk8eJiQaO9i|;i&vQ<5aCe%?Lr@2g+gZ#3yj4ub<8R;)AwtL2qi;Mm1&j|`3Rrw4 zC%YaQ%c2UB#hh1-H?ND#0<;uxXupqJa6zkaT)lRogw3auyXfmXmz*xkB8I)E6*Rge zqS{8O_>(IuC1RLHZK>xK2x0I7ZwmCaf*1rOrhYv@L@FQ!4b0K@o@d3J`CUt@xX{k` ztj(kd+J&_3&$gD5UYoBS5O?WbJ}hTBBv;F!f^n-u-fTamUN>bl8v)mhtNqzZ6s9+$ z=}!-cQF0$T&zoh6cv`XOjK{CCv+OL@tkG9bqN^P@$^o#sqp_B{1Gqc}%`&+wn99v<@E zt(LB`XJrvxY4X)_FZRfiJKByPugs%R%G`r&^-sj2fWw&oYA|%3wD3<3nJ`j0<~&FU z!+|vLh-ewOppCl$&2Bnn_fvOl8}8eHj04N7xELLl>Y$rbGH2^qu^{a7s^07{J z@p?Ty%k{5I-06^O*q^h>!caQrs10k~|CRzq5kBz2qDR7$g=h28U_!8;mr zsT&orvzRsR+&pTQ9jq-_I~KjaV=xY5Ig`qm%68ce{AV~wjuZMB+Um7eb}^>4YlB^N zBjZ)ICv8d_u=;nivsb=7eYdcGt2NRAZpaOugZI(*TDlTR@@)3WF$#Dn0QV9`;g&!E z7Lpqv$nf`$%F&=V8Wj>FT%HcqJj~@D2}=#<9A3Qm$%_|1`U&o5sbB5)S1&W)(fl)J zqT7GA+8G#tuWd8y0zl_J`GZcnpgvc(^3Hrh5Uk`*k~~-)F$QX(LY0+}ZH2H9bcr4$ zbG&E=IA-;O;5^U8%O5pfO!kY_xspHN>PYcD1YpLs4!4S$NF0RXc>L(`Hy$2}tQO_! z{$0(p-~@)RZc@Y7$yk}wlc4!G6 zsw=2e?_a3~E4X}19MYmxi^Y^3m(Ci1qn2Yat(N0eb;*gU^u%P4)Ye)Hd!=3AM_gw10eJ2Xgn|0!ad8D z$xLpe&b>>xgsjWkRF37Ae$2UGrS_x~q_OX*@2OCq?@zrMs9lL~Vj>BlR_+0w1XF~P zfs&qKrbZ4V-(r4xRZ_y}s-uh3@)wmOS5^wm4pbHw!yJ`G0F&@7c8>ObaIssojyu}N zxr9vuBZlRQR2vKM!zmwoCMC==JvP&g}ed9 z;ETNxKpDc>(J&h+P7~5N#b-R+?hVtM`Ub_8jNZ(04*Ezazh$lNSNt1xL_Rm-Wq@78(WHW61=`?)zzb-w6U#?`I? z1J^#Y>8A+%>fVllWKc@(fnRGswr+72hBA6nuRxR_!KmXybR1uiV+OUDNMqc_jH4II z?BL-yuv)1&vqLHc+$*^$?gu(!4Jw=ry@Y>8Kb_?n2H>^G5xZ50W6BwT3N6jw68tJD z=tL)X>F7L!gZTgF8m8LgW0S6Jd>tBoY!s6Sg9KihjQ>EgUBTq@G z6F~t}Et+#wM*}hjV6|cfbI0ygkZ+k8n1 zc4fnmJR+7$-VNK6LkpvMtvF2FfB)dp=B2g^UgSIi zDaJOoGk%fZ&N$62^$=#Jg*_JIiB4ILZ^tXEb|G{~)9;zZV}perRuRCI$C!``(Lv?o z!Bx6f0Ol*~U)G@P^f|Jx!s^LuU&7B*vsyLKeF;t*o}awNPicF#yZR(pJsG<{+pamM zB_?FvN6Xr$`WDqarNa`9plT;=7Zxv`y{lUib?Ol%Krb5xd$A(y;0o{Jh+eokC4n(v z7W0gH%PM8$C1KEIF*}BDV0A6nf)l$9sTr~+%#pf^BmzlsC5ya$xu2tpv({^sltvo4 z)M@;ToG9WjBn!kbYf@faT1l%0p90mxlrqC!o+2$TUO)lE6}lTkIuvj+91fFg1T-%8 zs8Vi^$o6_<=rJIu|y+NslF`rD_^_UQ~g$ws=#wcd}v z^&nw7hPg7APnx&yJ}Pmru)47QELlh}-r7lG`i33*bfHMAj9aU}6M|elbO#X1{%}AT zM|4*2GuaNL$c70Fr+HdIu;ic~KmO1cx4v<>bzTIPy(t$o$?HO^b+OXsN*5G!=HN|l z1GY)5!Uh1t?@Q4SSp*wmHFy*Ph79A5Tr%VCrft=ZMVi3ns%h_nr%t29XBI2b9+5yM(3>ysd^>slRSMGkCqo(93buDAr&x}yDtrzM3C zSZ8P9?WI|Pc9ZEaHd(bZH}j><*(YabpKxY&^HP5rz>&MhiD;JblH&-26i-_dYU2bw zSS^vpS0~njW2>x24>vOVH)-2Uc)%V8&_w4y#3=d?y zm&pNLNCDSt#cj?tbDndCot8k|2BmOTn`

    bg)ve87A3!cz?b<2GYOLdfW!s# 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�j)e$ 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

    +Z90S)hm;=n5}#x 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

    Kb#H25w4ilwAj7`!rwt6(R@UD6JMv2y^d#O%GS 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

    wVnq?MXLMwKIzK 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ýtu|iu7f}RS2HPNYoyT!mL;GMwg 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∓@UUn9+l?z>!hAfwpmb;PSd1KNbL& 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 z =JaS(?kPP2LV2w^8Mm0Ip4!x^{68ZJz}UPx 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ⅈ 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

    Nuc>t$qq; zV{G=xc(A$sdjNlP0oVqV@X7sM0hH-Q``ooK@yE&E_2mEzfYlpU0%ppbU=ZSj#d5z=u^vO8sJ!+u5FJwjK0bAzb|8VGakJ z>g5lgGq%lxxWqH&ESHxrt}@xn`nN#wHLl$ zGI+&?xN%(NweAIAFN)yl zJ_(uf3?%ZE{LO*@&L3^AC0`|4xQ|3ek4#NxJsAo?}eiOh3Zor`TtYh^}6!hfAo)O{6Z*2ghiTCrXFTeWo1qjVh6&?Yw z9Mg15PktbsngW&v#(?Fun2e%8FE?06Z@tD~Z7X2e{L5?w>_h$Xu~z`Q#Fq7_j$2t9 zJH>7r3&Od112`5Zv|5|I>1||cgEf+>Vz?D@PB!_`G}I2~r|bamnWh19RBx<-RaMBo zF^%?j*Ys0;Z<7?B2C$KYh$_Dqsm9N5@l;yWKLT4Q6CWi;_;F;VV4J8kCT3Ljn)FVr z-0~Ls4z7nQsA;)uF&^tG1v#|OElN0Lj>(%@StjX4YDY}+HlMt#MUC?F>B$9hEn~rl z!?IZNynZqIZ8af-qsCBQ`!l4NbL=pEbOUH9cX9rtUgkj*v*wMlC4qGd+c{E~J4f2d z!4ETR*EHbjT45`vQ%6X~DlRWs-XN%*{eC)oQU08-FIphRd-6^99@*t~Pv_12U6Z3( zAPH9lX!Z07?CKfmi#vGX-uRsvNml0Uns=^-uv_EdyQts)PTwGMi{Odj>Y(kD{!6eU zcHYr{E%a@qajh|6)3)%K)CU ztku6l`nwyz63K4^cuzap$M$aTt3zjMd;u8z1%Ua=;O`&5TrODKsMC++efAWJ!SNFt z$+DjXa}v_&xLC4-=p6$0*QPa*MB%IjyaAk%c)~US<~u8a#o&_H6&lkc3vg_rhB?uT zu4>7Nojbc4(t_`|)V2J5!v!4@YmbG(+mX`)?m0CiUhKEvUC!q!dR0r|=X!apviB^a z`;)Bvosy3xITJhFwp<*CbKG2!qG+PlQ77ldJDZt8fukFGA}i%79A$lERl)9#YBc%A zwyIy7(cUDFD>Pc>U=@ne%hl|>830z9;x_wp=Q>5alIUIl*t3pMWK`JN-*VOm33lUi zM4{-}t{vQV-YgB)n&1+(nw>rTePAUDA0Onr7dLE2G&d3e8@ g98-vTk62B30ok? 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

    Jb8qzP@;T{Za4YMD1|^oY*Sf=>mN-9R{V;@4?`C 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

    2XK0T4~}keJ1g=jXg$R8fm&{I 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

    H4tz`z*;H-n^;0#9b?BH%zk?EEY0R#-Vc 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∓Wm;c7wolCz)j^U!emkce7 zyU4_8E-ru@^y-}8?qB<^;o7eM&5a@oH}sZ#y61CX1bn}IzR3a5!8c`Gt?^w^G9vrz zVa|ShirlxRr&W+c!>^wz!41nEOVO34r)q(HKPN`?UHHSp#&*j5m~xFNCg~h*Yf6NH ziObi;!kv6s(4Sl-P8P4;AoxV^gj+?S5$lmY-D?}F9tc4~VvH_v$Yg}hgzcc)<+}wl z$+KzCqUC*9%adx|JYk9j^rF(i45;ITPHU%Md8Nb9N5#JG zz@JlOwYhVTrCZ^(WR3Y*efrjTslaJuYjn+=)cerBi~0nx)h|^d&H61<{j-X|^~rn+ zb)_mgV&7|kV9*;7qo?053t(2Y}| zLd>l}ab#Wh&VPG->svsjLek?QI$<Krbi*iZdDsvWJccz+o6kINM&o<`W zq!+aLjU^kYM7Z_v4#R4Kkgv3kGH7#YhV?c7q|LR5#*o-mSTS?Z>3UPz=z=#>fC*AI z5Q2_DIPct=n~oZ_I>JIYOHGRkb+p7~F(XE!tX1cOJDJ{=+9-@D7Lj@&*I(0ulgSbv zvO<;vmIn%${g?A~(3_z}WP8AT6Z!MA29zc&N_=u+4&2*~|8@(Rs`(w9HGa>{8p&v> zy-&Wbn60#MmEoCRj=r_3rpq3$^tt{EP@iBwSPq)*S_ukadX=JejjZIdF*4^WHUrI# zW&LpZX6kp}eRkmbjfy}z4E6;|$1VnPL1DJz&2d9bAl$no_<4phUxYWNoiu4p9Ir3Q zntT50_@bg=;k@kfZXF1l4Dk;+D_&o?nAvRJ?@@4^qRO1jfV}uMmi%8x=>wVGLTLBj z+8*y%E-6lVoXpRPQ`=`ZcY>WhRD4EhtmhkqXMErZ+6s3ZVnpXLuwwl1sNoA^E`o*{ z)cxw~-qwrw{8$+ts*QscK>DOZ@efvq%>{)2&d)<+`-@?LNCJ-PmTDE_HyPSOFcc~F zg6NFbugHJDf-m;NQCp(V?m>g2`p%rNuD&m^Ed#)+0BSlr3NRPQXyljK6QdKRh?-tt zOt1lTspkeh;;9Ww&2_{BXi$Ybm`r+q^JyG?hi#nrVLEG`qS*TUtqLX(m8p-x_+5O1>A2eBNz%d`Y6i?%Ik4#rml(1{#>l$p?kUWM zV`r9!Sf@gs(WFaCpAAHf?)C<$ent%PNRQhfKepf~359^F3z=$3+@l);EMo+3ZBGqW zdte?=^~u0#@c5#|`KS-ji)7;WWPx!*;Pb@<*wg<>n56aD<-c*m4fswE%Mp9$Esg zL65=^&GBTc5K%5*%_Usz#I3IDJY@u2qp}%hHXFXUrf1hOYBP{~#^`E6GhfADba!6F z=6FMZYGeDAY*8m3GG%&d=&CdHR5afxo6$*%dE<&J{U5N@>geIKa4A`@&*PVckrMUr7DLQ2KFy z0}Y`i^5?y`H31)zBIsz3dwh@_N8sZf+0*7#_NCJw$s| zKh!^9taF5Og~ZapglfNh)6fuEu@hBc+=%}*}1HU9VK6F<(^*@jp@$= zBM#i#noq;0;N3i+c~l-9g)Mqia~^MPdr{$YVnu&(6FgSFr-d_wAkW$MmaZvZ#k8%m z6{)Di#Au%XG*KZv{GzaZGAE_+u=;kYz1h6O$oF4A1H%8-RDeBm?c`pymU-p5W6a=f zx7f~T2HI1NcGNhIT6n#Bb~<6kZ4O7*x;qW$F1|o-G>@jJZ16qfy?)5aKQbf}Ri4w; z_LtJf!ID};hnebvPrdKOeS?b{<8m=0!c^*EBev# zPK#fWrOZ`u!8j7yz(mn3z%kwng1nW<(l`KQ;=OWAvGVBn$!8wPk7Dmy02L?DZdMp% zV<^-j58?FR?H)2A%dWPA(A?U67nLN4qwf=0*-=qv3-wcb)N_DQFfq2ZGe8zsIrFy# z6+RNBQa9RC(8c`!!^c z_VT&p!&8KGYYR>?-DqbRymr4nuu%W^&FHBKvg)yw8Fzoly#sz1g=x5r_Q2e=Rn4(R zjx}eL+ek_;W{QQoP;DlwlR<^Z$Vt|0NEhrA7EHlUkw zi~H{;`E7m#jl_$jahmB&zB<@GJcLI*G2@s=4{(OTj9>;)mMe`rit=x-1J$zl@B7uBXv( zAGePf3-4d3N)0|gsDt+u*kfGBq0i=HKkBwUmK>EuRBTxe+=>vn29cfzbU(mqh{eT72MB+nW*ub3c7$gyYXs8-<7J>-*npH8myhxXA~ ze%j<|Tq#`qtEkmCdBw7dGso{Cmi22a{V<)@{zI8e`g0E|!`zkP>Qq$Si%Z_PK%dGLU@g2i&L5Q8E;_GvHYPD{Kq@i*b`%1sx zT^FO!{Ry+l&F~KGBif~;_P1wM1j%g$o&4`9BlqI%c&B76DxVBC{FnEo38KTuwxJOP zT0n3Y6|F6`Mr!nbtS1W)_T7&E?0xWHak9dQLU2! z&A64@cTon;Hu!W&ubGKoSF7?Ui=o_DvM;ml0bg;vO$1L8d3V95ZquW~7Knsb`W8Nu zti^g*PvuE?(I5a3Q@H9Qh6)wri)SEdF-n(n*h=f#)ibq!63G<-pDCQjtdK7)agPfG z*`7(cV!m21S`JTgK4%!@Mw<>uLE2uJSG@isLs`7^d<$*kO>6_VS{10QYl@V4CyvX7 zvj}ETKa}Z}Du+jKQcQ4yy{I-bSa}H+;winM%-!(_Be9xt!H>N=<1F(v%hjwKrZnnO z2Nohf-n-nw4(v2jP7z}aZCyBfi_UmmN6z&*MK}Grt*WZliTcgOW8X>!&Ax{Iq-uO0 z?tw8&+mQ^=IGua{YMlQ#jqA*vRR3?i;=kJ1qJqnq7=rle>JNlqQScq&xAVR2g9iOY z9BRhi=`o6m8;~C6e+RX{NsBkod9r)&q6tI_0|y?it1LQvh7Q(JzTpUi?&}|iz-%7= z`!AeA*9Wks3#350N&+E!Eis-G%mWU=$88Jun0v4QI{pbHJMOOHgfZ3qq1c6+>I9K0Xt8WBWKatY{OUH;IByArl~TH+R)Oke(OrMO(}GZl*!620rSQw#Aj zhH4+)DZPU9z3pv9NdR)XM_u!1Kjx9f14N`A#O}(^ox8VBy`VY?UPCCPruZMc6+idSCN<6 zJz4W9?!jxU$W01-3@D#2dyVg9-|w9o(N_w6MW08L?^SM60Xr~s*mc5Bu^0M`IHYK_ zhNEykp&z8d`s{h9)pb^fkvhH4et`ch5WZ>=hv1HmPPjP)GCAK-#Z+v_#o84KORFQp zDA^k54e?g6{DK#RCKz)rPM@gG9({D%3xzRSe9oH@8U>{c>hP#&PVQrh35HA9xc%AR z17ZFnV`e#Q@IU%A|J$#JF}mPyWMsOy z@gzy@z754qe?KK&ufHvj!XE*8io)oVFBHb*^kU4|w&i=QMCP%UO$hhONN8+;wc}~{n2@sy zq|!Jo>u8eFGAQ#ZUmed2O-I2WyLFMZOt|a;MLVBsJWB-h)msi7c`McDxJu?B*CXH}t>t%lEZB4$6w&>8=a7POR(W!^Nn=v< zbdj;6C@7XjlwCqF4$}S2MNRq_b2g&+$FbVFI7Lg^sEwctr=*wrjOqbJw-ViVw=^J; z11@nAGzd23O9AE>17(_UGCeA29dfus-J@vwo5!q*p!`2_td>X`_+al|F#n#y#?LB+ zT*kjY$ay4BkH0<$aP`Xv?El)|D59^&ksddeI9*nB2oPw2W(ehf8KDAwFIm|E%AH_9 z!{r|^DDOmSW>qvhHQ7Ydf3C^mSmN*F*lkjZ0q*XF1f5bwP>RLjOE5 z)+x%MvRUL@3o~nuz5e0p!jH||KI3ytR1kH?IBer)+lbP`@n!{^uM3YcUEAgJKK!73 z-E*PHw6iyh>G|6lW{L~?6AFW<)%Iw77$}e$*nbp$-!f0Dj|A?o6BOJ_y@`Jo^b!n^ z9sopsaG)lDSm^GYi@7sYGF7xkqyVl1PVZ*f$T?x^43SDm+WN;QQY=NLUCMZbE_Sfy zMPVN(6=WE2mZWL!WXDLWa5>C?{_CavxC)SxD20jTGU;i~k-Y5r&hq#>1TuJ?9g?#VHFmv{}`}5?7#8R@KjqHw^9gI>eoJnmqXy4cj2&1T$`oxp7Jm0I&h+cO}&P z1O1>4UL;-ZDOn?uPS=)xs zk_l_=Q}=GX24fSQz(jTf^a=0j;vY^D5Jo49l^S`2=&~k!DfwfC3Wo=`B!-(eXFx9M z#m`qq=8LiS8z0Sv;%mBUQqS%tjI9@TS3z|AO7;bKdet+h1C6Npy*3%#9aQe(ZalnhOvmF&pC00oRThjjT#{_N{5+Mg zLL9FEYPJ4e1_qzvHn=k6A!~TRC1CDg?ciTv@;F6$NWF79uL7@pSVSY8HC2{ixTYmh=LXLw%0+84W|W#o z*{*uFYmi;zy{FYoeFl#vxGJES$&hB;O!$v0750XxL`O~bmVl_tegr^%)YuKjU6K}k zaoUVwjUZKyh|GK6A4kP3E_k{HX)(Gw}{6J#HRte=b@ z;xnDp9;qz8>i1x`QOf$DZ}8W<~kqD6s{C3$`3zei2NJvgyEHG%>&9DSxd(s!Dc$Yy^+O2 zQ1YI|1-X`Zqo~pS!@E^3N#ohLI}YSo_&aN$GL;%Tc_{kZ37T-f)c{Q~`E=VSriD6G z+6^;JPu<^)qm7LrUw?RNcW3odnZG%TCVbRjrhav3L}>vJrGu+V`~WlK6w|O8jMS5I zVsz|HQ6IfvOkyTnV4-LMIfK^L9`?QBu); zwRuZoglH(7RSglW4MR1yr*kCN1iG!azdXKMNWE>bGCUuo>wZX= zZIBY#^=A;8i>9GKQD=$_O6(mp6AlX@D+am&LlDmPZg-rQYXO`KAp1-mnTTV- zLrTa8fh?Mq2i+De7F( ztuw@FvbuXGmFH~f7A5WJM`0j|O5*oJRT*^J)BrtC1T8*fQyzWe@m(*acnlCu1!xcK z3{kL_U#WigTN?Os-{k`$;s8^yqbS(m5o%Wle$n}E+wxr_?nw<#z7y`?RC9fRVzu5~dC~izA=8>Fv9vOzJAh+P_t+eenrO$Trz`rMpWw=x6J6ftaCBwAbB!rChMFaI6Tk>b`F?nJ^XDw_t4rS}6^( zH2-B^r5j-AT=`Td%Noe%Jr#@sw_F*`?YP}<>>3!L&xx;Gb7BwCY2~dgPpl*&ZIxeQ z0&cjQncrT?D-&i-b;1aq|78d-4j|Dd_7kQ+^rJ`KmT*%xmPoB{G7ij&3wLw-O)S=I z#KWHe!WgoiLMX8~1z8eqPqmqvi$gL*RMYItlRtOP%Pz7$=8RiuW=j-`C*LmJJk6`1 z!*Z7OIP$V9qKe6qag5Z8MY`6o{uXZYfNzSljgu3(7Ee{%+-NyaW}tlMiSKCMpKQzY zx56bGJt=FcX-Iq)SnKFoz_zzY$w}g(mwKi8=(uMCW?B0oO)LIji@&Hvea|%tvi;;J zx1$PT-h969vnr1*&Fv@8=~zL92=6oedC+BE+2q>wKS9{nXAsjqm3(fbP-HqVxUtmatB1 zM%;S=X`m9hZXl_13#}1+at=rzaF1GaTP_XH(OygH?0izr0vco+L2N$TK3ezZ(u*Uz z@rna*9UYAw)@i>WmQ7RC!ECKtfbFmf-}5D_fbggb8hvz_kmpI1UBj%)7esD;0_DT;{Typcm{=ZY_*Yahp{VQ8(>CIHW`s&#cCzbc`b ztC9p}X7aEg1m6U0di6Bo)X-2~kfr~z5Zs-EEYvbdH$*_POh!9yr?9yu(Ec=UiWFlXcA_M|}shg<2LRk7nKpX&s1L7(qez4T>9n|oQXJu76h zsJii;)7?}(dkLLW=#{BO_PFk(u3GzUno}_zxD^mM1`vm#ssxJ%Zv%ECfeF5MiYXCt z_xR)|sbts1KqRfCD!ObD^RPBs=h(OP zo0%*>9@aq%85Bj=OSSh|vne(*`M9HLkT&?hd7HZp52%wuZ^0#~%;5PHI%PLOQ>=kv zjEZy=#)9ESc=`Lm{Nbf(Q2QBhY>b8rJ1c{#2!k~sgmQ|=QL?S1)Sms!3cf*B#Jpy~ z1=Ke}9L(%4I97)e9nosMjuf7iF{z{v0Sbxi?9$k zk6wh)A4L%RZrn7Es5n_{u()yLZQ+g5soDK*FzpN>Iq?TFhqp9hyCAHnsJ5q=8UvPo zG5OExXO&^|{y04wxqig;!`T$IjodOW-QS?S-n5bO)fcbhk-_+1CP5z}qYFfKuw6w!8ECi@Dvfpn5cj7T#EpNaMxE-}gNW;| z^6h-`tpIf}S_UX};*cVOK-o!>K)2~sVkBQa1lQup0;9QD7Gj6sQrcgESbg|UgEFN4 z0`F)zmc$>1qDf5<*07(DsL!g=AO+kY9o5SLZ_;{Duh118&BdP#2R}v8ckAdL?UNtR zfj=J>kC!66M{JM|#4fwq({z@>_9sJORRi$!Z-%HZ0xwW8pb52ke}2AV4dja#{fp3| zB^aJuh$ZIR^Y!Z}HYy2SYdr8Mk^2)0nyhorL&*>!Un&A&7gZ2Y_bq zXa$d;QgMTofDK@s+K)HGIDT>G;TB$2w&>`)P4dat#lcQeoUhsRFle9Eb6jaBJnc47 zVl#L{Jo8!bLe>Wg#NBbeu&$#o2B}=fl?MDHt)V|6yK4R^{T{Ua?f0AIVW!8_N&!)eW`L4D;NeTY4}ehLHgT9L4Swe*+Zvd# zrRzto<*{aDtYz!jV+G$eD%mbdFEa9iVz(+Ea84!9R{7sw5ie_8e$0c(xNzsx1!?r| z8*ujh`L_3yU-(WO2~d0o|OZ)hL8AU5-EOR|=~pzp>J>(rTE*&aWQ<#57EEst+Dt`GAH zB;nzLG5esRHDrx^wg85gs)yfycqjA34Nwr~w~LT=s2`@FbfiK&{wSSY$ao-#alrIE z>M=hb?T z-vo?Fxma^w&*om{z188@gJ;x8DH2OWGCqjolU3Q@yKlvwrwx^QeowyVkDHdLo}_9% zDLo$gzP9!G&!fx>%J4p-&iHRLvvsriZ3RN!Hru9IAF*`fE~8L3t$W-9P$(t$A8(pO zae%mY00z{52Ks=Bd&^8(TPklqIJ-WLcMPdi$x=;nV805rTR&Td-i!luyhFKw?q$E& znV~V4EB%80PSL1&ec(ni$o);VIk7?z=sb4cspcj$+>w^W)|9p8s5Z+8Mfy?pv3Ec3 zjP&CAj+@gSRmCw7BVkX(D(jo+`t^N-@{)6!?om{~)+zcM@w#tP8TtKw*^f&d=P#>Y zPIxf(?zb7|GrE@oiwD4N$nye7@honK!p8)!+WVzsts@;}_JDgtwcz@nDAE z@53a#kZe#lvb*Ch{>rcTlhV#dPg(TW^(&ub^mE@n|6Wk!{Teq%b86Jt8tT(|rE383 zN`u6^4u_Hc9kdjM|HD;mDTFl-bf}wlK?((H;wviXv3pzI>xFGAacfU?Gxe6km(rM| zExd;7FaB>v8QDyW z-_f|6_>BK!C$rNAbu2)BWd$be3i~NPYbH$-9zL)aALj9 zmUU>MoPW$y+*Zm)oNFg9pMA_~&hmTmA#&jYrzy;V&#jilX-W0p+E(9dn_0vj>2b1w^0yK8nL!eYXkG7{e@L#R#rjx+xVlYRiKPvJJR$+g6ruzb_t z9?*~SH~KK!gk0juOV@E_coN-L*ex1Ucqil<6vJOM2-aSB*_U1QugLJ|o7d-h zOFYYt15r_u@c0RaMNdZU-lAK02uuRJ|K9}|8EFO#ScL;>!G#tun(2F=)ve9WuS)Mu zKRjqn3)y`E%2zYo>wZRZ_+(Vo$l<#@GyAAe!pebLC$OovQL11^og^jx-rn!_{C-f# zK4;GN`#a$-M|p-doOWS&ACHTGSx-gk7Du|M{s&(>S`q3wrBZqodE1a<9ANlS+J+HhP)(DuC2`SD6@P(egASc4z-G zKFcA4idXvfTDN)iq!Rt;-kiFN(}8k7qth7+ym zpA;+bZfdT-<)s%0d?4yZZ+pb}b&mrE98d!<$@1NVp>KgQ!5Q@0^& zkah=UL$+;O-e41P$MAL!>uOp%n#(-4P_RPM8=~rQZmshIUJf$BTFp3t2X8H6@K@Gn zASNWKr=5=TRLGx=O}L6w4f~rKlxQ}P6j)KRR;a3qTi`=ajmcvXiq)60@#3`9_(q)V z_8nl2OZpeUy|X}rbW1{z8C3A9iUTjk1H0-s%v3wILD_4JVC?OIr|2Aq@3h8aT^Asd z6dTVuGN|gu8}{;8Dj0rDY*yh{7Ssi5{XJu z5_bE#SSiNr*DxZm{kd?qN|;|ZS-8$3C%<&pOlV*HF!p*p)@gd@cPFAzOWk7>wj-X? zQFRG*4PtDkM#xbtodbl=HSQ565#(MBlVUJPruwx4c!OMo6JAuM@8iHSa{b6U&uD-n zIx9=L?#9ZC=W_Srk>b?>@gLx70U zPN(=?2H$IQ-=2fnJs|89LhrWFj`~v_gpYbK_Y41@xE5zB_m$RCL*!hJYaBdvCI6ij ztkPh72EMJFEKz&sRE%ZdGA_I4oW}jl_KJ#L_CQ~)phL`^l4AQE=(&PPVu&_mmm*%|wQ5{ciu0^nY^x4r{ zvLJ;4tB<$Ys3v|(3H&;mN$47=Y-lxY*q&tjaR6NGTAgu9cdOjWYNn%q*>MSB?fs< zm0eU*l^@)V>;*p&<$Pjrud;qbtP&#!zpxorTD0){*fFc*)&7}7xBWQF^w4a4 zZGEA;h|^@0XNT8Tl(V0S1?)m z{2`T&3vBrl=Lk>2IZHY;gPNh4&mYvPO4TQLRSno({N_Jk{K*fEyA^A`7!+yS))O49&Q)6hTEB=>*koeD-(S%h3Mz~b+@8U}wb55Ng zZM!WWb189z!d>b?*8gkMjmle|AIYwX(Ef1#t+?RtaLV%zAXSX9%K6 z^?V~nSAA{r)JkD*lY$$6@1g}&!w3swPDD#NpsDeW(RUmPC!6D&%a4mzo4|_3dckxo zKuP?v5=+N_FgxfZ%~NN=$fDxkk~6BApe=!0X?Y=LSID)2#2YeuH6Z&!KS{R*pc@r3 z8mmhlTL-*mtcw+H#r^ClfUK&Mu8!1Ay9FI`|@!*(^x28XPc&vrlJJ&Jlq>cg~ulsDMcU_ImOg-WzSerF6l zSw4zgwnBy21%#TTFa_b-l=PBb;Pl?_<+gsTiq!d>{yDe+vVNO<7o+F|*%}+=HsWTl zf-1Ecg5j!^UUpn_5Ji<`-7J1Dwt?E`Aog{;J0Rdav{2F_v5l1i^%_?uWy zM>o9tzsIpp`?~wyeO}jD@U4+~e;WE0$1wNPrfuWYj`bDXg?*?k?u20;(xJ3?e_S3u zl-kkm65$%Iw#n0|A;$`sc=H5Bil}>#>D>$#^N*xtqYox)XTrGf zB2>*hGnhb`5zBf&4FQEcRV|wgj5tFI^Et`U$U4j%xD7COSCl}MIy|A7o(5-XLO=6& zZt^1by_cnM4ImF$tp3wxuuObmQw~lwZ1NxRKb9@N&~RN}S5z{g`5Rwv3~Tar+^p|6 zDBB(UOS>xOU;z&ds#Iq>OeX)?;VD;`*&&7Dm*MvO-(6PIVLgr0VKW|r0^L6 zuT+bG=DmT*;B%0cK8P_U{H0C<65hJ>GPW%uJX4F_Em&Im9vQ#py7-wac02UUaaU=8 z!_nzy^}2VqRdR;(qkQ*?!@Lef-;#ajvwQ0MO{_S_)nx4!?9=V+m+Bre*vF{8TuG_j z1`Vrekl@~a4wSa4nOuuv??Om+p7El%j5Rdc(uj%3g*3cDM7iuJ{yqKe+BT{o3>Mb5 zWh7_SWz6u?r~_uE4U0q3vz5Bx-uE>Z{vMsIHm2($mYAATC7)oVe2r0!T0~5OajVn& z;`K`^ljVe%yV_s|ZNM2N1ZL zsEMAjbdoX?g#n)eyF`VODi`~o*$FU!2pw4p0H=}375!L6;ZYYyd zUuDgYe{io6#x;L%iv2jtdM}GDEE_`}VJRG7^mc|)yssKBV>hIIdyLOVAS`IGu@X`e zN7@PN!AA}*;1&nrgJ6`lg_tF|u*Ze7y|&q|E%1CN$s4a_g0osExFRiP?T`-nGvGZs zGM8+PU1A~r_a2xfoD8|M{-!W`*3E|-vCl!))~Q*(N@@zofD63&gs}8MxRl{ zr2l851r$TzPK0D}t#b)p*4M-~D1c>8Eo|Q9ySP3SVUXSI_NQO)WR9sr)rxqOCnQZx z(+6|eK(yWHSeLC#u5bCk-G#>pzkXP)w9)1W5OKs1QoFr`gc>QCz zML*~tiZPeN?KG_Zug0hJEb$y>6$eS3e5tb^j?h?DEM@z*j)A$>%+){cz8K0zL;j`! z_G|4X_!ml1%xYPq0kB^qW zy?MF&*qV%d1<};)>~!bvjr7)O>C=^T!zrog>FK9n`tJ!+3iMhv7*8;ogZ~}keUwNU zc}dH)4f&&zC)R_p;XGabWVD@BfBxlH4j8>PrSPA57Ar=U`>sFiXW5od@BElRsc&z&t|dGI9s>JA(xK@oJ*Gdr zFbi!juBHh+@ScSq2wSCR)c5oDEq_wt*Zt?NuS4yk&98Wuw-Qox1=1uibFcuvGG!o5 z;%qh>Ps?Zne8I_IWgift2b1JWna*aLZ5E}EGGu>|ZKt#e+yu3=ubskVDR3kq13&O6 z?MAG6^E7Pwz>I*XwF%_LiVk$<8;+RNxCrYwr}MINIih69I)v|kxYnC2kNBkivFJe8 zZq=PRczjXX%bu>&w6>3p|LyQXk~|Mo`SW6$=6$bUqMMdM9~fdZX52G71xRD#tzxHs z+@mGPH!AZu1$BRNcdK%TU?&|=AgnDYpp7sjQ8d9<%n*uOJ#7@z>bIZ+*Ys?xr`Z&a z%`;(ebv?5aHA%l|$NqhDBGToIiUkM8l4A>3B{H-1I8SR8zH7q~QowNH2YTj+L6BN@ zZ+w(-vdZ2;-f%S_^myn_u;9NvND&3LneVd;Y6n#{Q1>K-T0z+S)evl|so#mQI=T2* zsKfgfN^e>Z%e3Ks`EGr;1X=g`+{$j>;HDe{Gl_M1t~K?W6hd@+4rGw#Kl`vJvNUe; z?SVBi(CG57DYpDQamL$dO!d1J#TtwV1b#m$$D+^`n1Z~tGQnzN3J>j5qRO z`o)A0ZSQ3ad>Xe;~}i4GJ=o|GsypJT8)VrPEqF$CYLD zVrgQYd22*WsDCTyHG(YIz~!lxd-pF{tk&t)j8XMN2_EOvDF@`Fp4TMi7>O?as zUD;pz1`O~~y(H9;x@vk5(L}pEBJ9ugT;9J;dv_wj>sk?2@##g)yD(lCx}%CmcE6>k zx4yAS5f|;(ogXI{3-~hEK-<%|{_AX>1BF7dUj00zJ*txUCg0ZFj*tP)jaWj=2f~8W zQz({ELA+Q@zszd$rrafW(FhHVS;Zd^r;>l#+Q>?{%Mw}z}5&U470{ve?k!L6j4oeN=;D?lt`iE~{N`CQ-ugc(qTyalPHmbam|^PuXO+YI)_hgz$A=3Xfk19$}b;AEN??qa@BMQP(Jxl$54w_9e@r`LYnBMF^LEMgJp`Fp_D#kRz0q-DoT&-(IbLXT~J zh*&-XdoWoBSbtX^A&38gzkBl^yPNB~Dths=TtG<#xcTNo*Z)J-dOTUN0-)@P;5KU8 z?AN@3-AF90Oj{CR*~9N*7%43fOf9}*6N3O@E{RFr+waTCgg`pzB@N;&xf@}=6oCL? z_~%LbcoB1KaN0^;yQ7>=-p2Sx%#SYR_>ui+MhLqe0eA zvB>>XQTts$7qVOd)y1QgQCXr-rz1+{BiL|d%r)CA^;v6HoH<>Y>l(tGEcfW6!byK9 z^T)bRL#07hubpIOr-|LJMSriPSe;vOukt|3^Nz~n4!(NB#4lzklylnaF~3f-t=?Mv zlkl7Vc1ah+AG|Q@^V#J>m!RSgYXBs&mvJr`-4k5+f!bVb)1)*JMEDIX%t>dNo+QFwn+gB_>(y ztQQSUIMmZm`yTq!3TUGE2*$x#a+UJEv%Pf z%aj%IwjH0_?hvwiZ8TDQQ9;~5a>?8pX%5!x_i{k$VIfXk#-&G7;NUxQ4i!*yQ!IA< z19XkdNq9SYS`vaQc+Tl@1qrsIr-cQG*JC6)HafcT+A@Dr>|OwD$~i^IFDF*Z>Wz3U z1`yMVU21N?I0}!G0dJu(TzJ2Z<2E9vvZ3eqCgObbOgN=TQ8sJD{|%CU-!R5~-=Xfx zm$hFC*~Xo+HZJf*J7<5mB4ttpe>9O%g!Ap^)RE3-ZWtAO;ZwCNvkHCj z&pb}F<{egWKFOG^&bwoi#$Om25O9#((Dr-V-3%+xVl8}iyf%WgOn-x@3~ye_T97z( zz6P(X;;S^W*j3viI!6up0Bv|d{5#41_E-k=| zmU}A3k!x+j*1I<1^vRham;!w+&xV{QIseM_`s1=xSX%kiTX^`X_$*6{1*mh%_h2PN z(L7vZ>k?F+$P2r1Yd&#gxtW#6vejQBJF*(){l}gYjqM0%il20lEFNK;zK&C6B1+Xe`WW{Gi7oNT3Fi{El0|cC|yv8pLjEzo~rc8NFl}X`IPn3fd z!03;j#QAO@p(&-VS7^$|V5C7{E};wyTHI(XauY#|X(NKkwGp0K4%}|KotN3f{R7II>#(; zn*~lR7idB5(K!F0LzW9~OQOjf|L~49Y40vHtn~cDO*S8^Dv`-nOUJEEeK=Wn4j%<+ zHv^Dc>5zH-5ydyWXD<;%VKsC;M%bw8DScG&SeDIMlE~$(cXh^dBrx(j&vAL;3#srS z;Wtx^_z5>RwdfK053q>@Za|(#!frS zDauS(fHU7uTJGqM<3nLD<8@IL8;@mIkfq}AeaEk>xbz5Aty(%z5v_&Ssm~ssc=u$mze9M@%O0C(3);DB_;zCC4x9Fr!PE3ZFq9SWsOVvo@+& z2zQV2p_{OnU@C0ta})RPTIf#>p|b8h0JDE8SBp9P3AWm+dI`qS0C}Rn^6!f{CqGu8 z$+U`_{lTySLL>+B3E6|ug`eA~i5ym+^YN7cV#EsNK!S{*s0Nc9{Jub-OZ&+pacLXZ zyLRo(ywkrQRsSJC3*MXzxcCAGH2wLxL;er9+O6KVKd)|n-2pT3L$4;XCJ|5z~15`Cou`Hp_X!)ia=%jrT}7i2hotKDA)ouBxym70z@=@3TlpM#K* zmuxeqLSk^iqxZFy(BAmJQqL+Z9};72kjFiw{$%ge;kN_XU>Kqxx?(?31?&0bFeKl0 zv=-wXTD$O$>tXlcY2tf=Vj4`+J~KdhVYr#k>ic=5rKP1Iu0de!^y&my%aH3U;^`2T z+4etVTnk;7J{&6*=98u|bzYhH?N!bm>PM8y9>?O5T+VLiseH}6{KN8Hlzk93?3nsB zmqHin?r_mcXw5iV=v|7n`=OhAkVyHHzfdY0R7Cgup{(>{nikgy0)<%MXgUP7-5qzJ(P5zRiaS;xU)%Mfk^t`(jg|H%DthN}mgY zFy1irbQJ@1|0lBR#+RYcFQn4)zCyXUp*}=Sh$Hq5Ma+I<>->sW`oNgJj|2(RU+pD@ z-c;G2ydZKZeM8`4D@3Qj&z;?>&gzey3ex4^LkuV+{zxBx0(O@tn$;(WO%iU~(-afo zU8ZMr_uGvAa1jcm{4*CEtHJzjDigTTLNeRa)61BLtH)Ry^eY=g5NLGmDOhhDk|krz z;m0F82!mhf8WN%EhX?(p?#t+Hq^f0c$vrV@nJM38?fR))zSy)vReXThjlFev8ZCww zcONKkz%2REm?UN}KD9m?#vZc29 z&+)FW8P?epj%1{I6DO5Ont`9nPvBqVXkQ5y-nY{5BSNhI8K4|_4ImTG2BKF}iBBI} zl*_Duu|?-(Kx|9%4j$t1{}cSd;MHTY9(rLVV~IV5Z6!QYmhG?@`PsPS-)=c`Wp>Ki z1g9X#s|;qr8Gl?&^V+Ck#l?_?f7H->wIrIBmm!sZS-yggbPui|eP!gyS-_HiR$h!{ zrfj5X{ImH5HRs;3zv5qGO_)ffbbys4edri5V8Iu-5Z7i{+J)0&&>6pYbpO7e!F|W5 zwuRT0J9#59?hk~x7_Oj*3>`x2k3T?INjW%>DGS6QFv~TP8mcIfMsXsP4(QAdggb42 zn`OEXPX(-+Jnp^BW!pEtpu{g%+mp!aZ+O)H6QseCapuQ$ zXFtT`U9oCBVn#KePaSw0Z6JwoX(^rID%PGj1-wD-c$tYrn95~{>Tt+Pl5F;q!1?8; z*txZxZthwUEjAfed;%aZZXSZ1Sx>`nzOa)2bgG-~6YK3xs5<(UOJJ&nJ#^qVCii(C zL}H%90_M%Iyg_pFDh5Jg?MqS6u-AB>L=|L>hq>aznJdXF%^`1cx#ADgIWQAOEi$Zx zCLORVj7~V|KCqC;q+VlzJq$N>rXsZ8l{_EkKqkw6Fy+lnfv!>IuXmE&Jkx$fu?-#* zC}H);t4BFk5$(Tx&poeq?dxa$^WoC@MFUu@Y`uXvIL5w)%6V#`V-~caM}eMXW^8^s z(Kx?U?~l<JQo_6-5s_1CEaOWf*7*ll85&xmC)7` zJO%bzWtS61Q*6)=C_$bWdh1RvjjjkW7gePugO^ornT#eyD3f=s>I z)J~SrUEs%{i<*kwH{d({}%wR5eVVt!I-1h{=Kv!0WSwZn3_ruD* zvzOo(kizzlwkvBe;uqvM;CdE>hEAwsF_af!hmX+68}x|Mt3HeW)F~UK3kqAJ2YVRR zUaAnO&JY}Aw8#?;S==~ky6>wMqdpjz-Y?}P4ze%V8Y3LaV-EU6kzYCYLaJju_q-?i z(d2YieXCq%H=v&%P@DYt?`;>zzoxyc1@8v>;kdOTP-7F8W=G?tXZ5N~b*y@1{&HH& z)ySI!y%<|O0)HkEvJ;{?5DjCKz1S4FC99eF2y92ve_zNKpbcHvk_fA@3EZAm8{w~; z-LF~e?;K83*V*1#5BKempX#}b`$@BJ4B${BgHG^DXuF(-7W-Am&B0vD_^um%%?*UT z0Xp9E;&gzm2RA+#4l(TeL2g8wV7kC&;b3Rf-xM$A4GJFD#c+^SG2V}$eWc*^77Wu70;@TT3_$JARp``B%Z&vS_-8uV-oPNp{kRZ4}V>87$ zir4DFn0V2KYE~Ab-|zc)HW*PC|EPL(dFf86r6bXvk2?!ZQ2ERqVi!SFJ<~pz0WPvm zXHW8I3ZO4y!L>z>*4%i$V2v;$_;g_kH^nX?4WeGYsKac-e4m@LyPB0IMqS#t&X0iC zxA#9le_F`k?lTH#^5dU@CJKBl#bG)BRCifL$#ryCrt%1^QEtu&>5qb94^-eWh_cU4 zNP2D@XTqp*T;PIJuz|@V5gIyQ{Pv(LE4oQ`W^TMX3R419pdBo`P(Ahu79&LfdO0_G z;W6&%)3bwlq@R8tL}`**vtf3FG1U!$77}}K=~CYg3SVak4Leo-aYb6eEQ@7pugdOC zj+s$1cX1VpZ1iovt{?dq-gfk)E-|lOS?>Ia-F;T{hc9*`FTP#&*xfqs#l|$57e}bM z1xylZBw_ zSU=3`BsD(?Q)Bxd5HrVvFrIzCyq!i^(0x~p{2ec1HJmd}f&jx3!m9;^%fo4m9FOJT zSDGW*a`5~~R71iJqEvJ%0Dg2uSe~)pi4iau7G7%Vy+5M9)IDbKqITaoP(}{qqTA;o zwVa!8=CSagozO!=HQbtjq-zY~_U^o=&z3;zmFs>A4O%I*gAdI%9tYV?K_R`AsR=SQ zg}>_CXt7t6Kh_LSIqi4=rZ~U!hh_eKZ{QdJAAsc5V<=xGXt*Q)1?S)MCqGiLJaQ%r zNqZwzk6{W(FBV3lFIjeDsUqhG77v;jBJ*l7Z^!Y11*`~Bk*bL~77V{9gL4MVt2-X< zDfVYp40*2lbj~`PWAPsgbn~5 zm$McUS%QuX>Iz04cD51hE;_F;b=Z6PPjxxc{eIv&^9P$TnCvh{?^`5svR#puQ|L;Q zVfdCh_owt=D?xW_nj~ej^6})h(Gt&_i-y>C8n0i()1=ZmNiod&G%d}oyYv}pdilX$ z%D$H8ZY~ZD@lj^CJ373%-E!i{1Sa0$<0Bb?tLf<+9YAIYJ<*>a&K+8(6hlC0Me>SJ z1=VzC0JyP);_&Z!1ZAeG3HiWZRUY2RHsvD-zG-|l?Kpk@6M-Mv$dO&S8H9eg3Rj%G zU1B6|^~R^>6DcAT1#?l!9e!Ot{a;*CGMKG7Jvs3XE@jG`%bx!GD<6v$aNkAJ{E~** z?n26=z;+Y;pw!Vym03^jT24F{`6hraN@~=W$r?M+LE+HIPpPCv#Wr z;;PumV-D3w;OPMlU0^k9B%OlPH;mXPyG{CCya(Zl-~eqIcQ)vi&4`~J@_6QFdWjAW z7CH{zE3A%6sy3#r8{#sD6J#>Qsn^KjC0r2|E<6BP$(0(~zedO-zWI?^W_!Xr`?{oh zDU87rd76e6ZSbCU$;1ulhv+x@BMbuV5#r?)e6R#fXZ?s$=D1#UyK+-Hx>}Hjch~1% zNIB>&j0hu*`Kx@|4QSdLFJCjymPd=d=l1BLFCsNE?74V)W|{bCX8)1X^bPDP;r-XC zo5ISAfK}9nPU(Yi+Yt(>cq^lO(>E9W_}9Bg%WCCm3~CS`h5OxugGbFYKAi;na$vjW~g$!83%h_L-g-35DY&;6A!sub8S=zH_G-1a5tOSZlO3r|q zp!PF*G5!&-z9~HGRg&?Pg)$X*20Ze{XKVdKi8~CjzZnB#Xb=|D`JLfj3sCYhVIZ&R z!gRwZ%&`!3SJi)J)C{tF9(W}ZWcHYvk~a!!nf#d>SN|tb)q$gdRctB?a^h6@!VF$9 zq)2DW)BgPXC&4e#7p33#gh0AJ%owFrXM~OZ(Bs2S* zE?nBHW9}Q*WF=eYNo)I+qs)2Bz?nDwc5dD84|_j;4-_|)!U**XCUH`>)6HWbLDl}t zaZS2*d^X6oZt2XFU0TMQtpi2WLTr0?C?99H^uVQM(I55(tCSsgGMksQ4Xwi#T0P1X z7O9hlhx)`_G>C=S*0!d=wpTQm$=5hji8DS2huNe99$)n-HfbQt4d|ODPXex-0lZql z_U`$5e`=*h`CleidvOxDPe?4MnHu1(BUE0O_I3vp=T?rEUMXW06Xh=~CYe6!Xnc)O zpN|r|=;R254?H!o{rT}VQ*c&Cbk{p8eQ*i%Db?_A&e3QLOnDUhs);GBughHkTp%p* z(!0HS`mkgC+nGrR3+Jl~nakLjOZXy`OlWeD>pqC}(@}KW7bBY>nv6@0l;|ev}fTwtKpK=EnX#}NIAXWrnO@)X=^y?dbP2`yn z;+ae+mIKF?{1c+#t%4oYydCFfs;I+A-Ulh@kPWl^a6&rNV+1jY#B=7EOw&*WZY_e2!fW0E9;(aY7Ah33i3LaJ<1HV04S%Kbr zFj7rMMDtKt=3^A<{iRf|YpohH6Lub??;`((*PVlQT0QT=IdF`Ehc@7Ua)(1{sv9Fk z&TZ=T4^MLTM}~jQ3+;r(TYudSU9EPQ_iNAM3l;uNKlMZKm-CfC_0ceDaVEw}c6RV2 zgE4D{_1yWwu!^}A>{)<1AlP8FM}|XbbqPWa@g?&4jF>)W;EeTNRUWG9Zj>)MbE|nn zAtbyLUT*_rQ=UDF97Wx~o7ro38Q9%*1P!3CBB3f25GKb;BW~YF{~B^`}gok=KoN9WV#Za0U*0GUy!^ zw@iSSK}j2X)=h(%sm9ae)IPyJ4bYP%^NBAYgn_YUFoPjrLgV1CNa#vN&S|SW)w|vU z9&tg2nnl?iOx7TYC{5B|IRUz4A%&i=L5-o^3dP!OVY^QR2u(&6E06TRnp(mcQ*O55 zRs^H3{G!NVXSv&oeOSpeva71eRNP$1s(b8wl@gD%NaS*XAr!Co3CqgCcfa)Pj5?G=VB;_;r}5l& z7I-`N0EBITa;kcy`^=%pdQ|dxWn}wfvEQ9q;4@=sT)X?@#i2=R!qC#n0#!I*BL1>G zE&_&dPy^Hm#k|B%8OoC})(;U=vy5ahC+1CpumLlA0%nY{u96%-@M_}nUdcXP1Y>9# zC4=k1RL;RMJ{PBk8cl8;@@G=US2SgQ;Nd5v@H53z3?rWL=UvqmjndA_S zpyq#f1G$D$JawKiSljP|s3fUyGXZd&oeHK7LwV&~O>UbrnIrewal4-Xn)&K>kUE#C zQ-x}=QKkx`fAPpzmSp&Dr&^(gotuzuXHQSF|xJ| z%DepMW1BofR18$<8}zBI2#_hU+gWsRsMf;F4DC_p?XKX_rrVXkOvozAb7oSS zpnB`+i=3S9oHtR+sAPTHE~h;pL`%7=v)>BR^` zO^L#&{FFi(0|n1451w`DxRS6+b^^Hl@$qUP?w37a5{s}}CBe`e{Uv9*kQj|!%OLn} zwSFaPfxEfsetWilpDzOXXDZW+6q7b{BoCGo661JE^BGfp#qFkK{|RQb5CO6m zU}Ko9h1Nr+*K%3S;nCKM=`P{Q_Q=Eyr#Xv360kD8`}JVlymaur+k7E0$yzVD%&s%< zG|+ZcGFuwEBk=spt#iD#YYdi|A!m(zXNWx&0mu&deYp_>&+#t<<;5dBCL5-f8Fy97 z>i@`t6!eL=N*}^6pGsH85+uy?*sriemzT<)&R01vMIWq_-4v=^LMd%b!es!YGDAxn z!OiUFk*dZ^w%aXA`kif*!8Y?>g_CLG`aPrZiOH4Yg9R;~pe&8P-JEvD^SI$;e4_YJm7t>&K;thifJM;t3vxHr#zec}d#7s-366`u-F3*z&*(GQk}*8@ znS6`Y?+fFc{(?`N-xsNARHk$CYi(Lc;pKr3^1os7K*ieuM6iIE5$1ti=|<@WOoaPS zu=8nYH8`ZMXU66udwp1D2QrKZDNT|KJ3HDSHd2&Ptb-=d``c?CbTm?VYTV3E+1=i6 zmo0~4d^PCDv8WgROPO?J3d%h~9wQ6ih2>|g9kz}>;43LYoFME7RO1QAT=+`e?*ROc zG9Z7AzQ9=Fa_3^rK8!C|dfxZj%yH9UYt~ zAZUYE+5JL$%BHg@uKX5nBBQe-u9E)t0SWiW47Jhjx{e6chZ*~ zS|o8Y5@cN4}`Rz~hQWcV*DGO$8l!DowXQ|~`OdO5Ec(s&Wn z9MMyHS0fwTpsV|J!!&B+`D-W49}pG!2F8?=DsTQo{>hf$4cdwm%{ODph2fKt?nMl& z@I!@xgTh($t`wuQtPvw?)U`|@N8JBVe6W7wI;FH`Iox z7+%9&-*Yc~$2FL!f?WRruO8|1&6!AGvTf%rmA~J~sR7wDSjDFJOa22#3 zf8WNK0&F7psL~7`A$y)*V*`cFp@k6%7J*?hl_3+AgJ zguMjAPJ+;H>&VSK06lC6UlB1Nf zQi%_BKvXub#e7EH)Bo>?KT8;Q7b*C>E!x%)&$4esM1DypVIh9#ZzPieSjOUfH-EnO zc-;`}DA+wr#5GSZM})y z$dU;*tsKs?4j(*o<2LzHymeXf)WT%qF|NkYJv^)0~?Y z88IwmT4fbtJIW9dcDeY&{K9JXPZ5y24(^8Lx3y*?G4Q<$@LfV*(M~IEpuGZ^;5fQb z;*7gdNL#!|SlHmB5c#N(1Z(`)>>ec{8_?*FF(!d;WRueK}Kh!%rKR<|@l^G0H#v7DnjqFX8zE85aC33{! zXT>_7)wzR==<}H@>$|f5BgelCSuIw7uJWKQ`}eP}PyLVbDM&(+>7l9Zuly^r8wL`F zp9=y61zb=5b4G^W9GR2lyqZ`2KtiOOG!3S0CB2Y`48{ytiPbT-0m5%f?ymW0IF0BpAY)P<}!LCC;lP0;bdQ{!fxaXls znJIcy9<_>Zx&NiIlt`|j_F9q$$mvAvSqLV*H+>MRd9-SWn_#-o!@e`vh^gfD2m_qh zS_BHT*6LwrZeX1z(1T;qN?|95@N561t&F}B;jrMnnc0%XnG3UIk2k_JRo&cTbxZ1s zbdOSb+X!Bk1>622VD4x)^yz2Dx9w2U6DGCP8s3r{v!Z{N$q5EYf5X(^?|bV8-V3A= zQ^AV%GKW7X^kX;}ZVET0W}qigKt1v~a9cBEj7*2lr$LnzwZZH81{==!8%!)G@D)Fi zJ&%16r@AMq@8?0fzg;VPILUpouQg8~rz)TNI_!Cud#2TQ%YOma^uvrkP#W968TfgJ zeYQ2PaxrYZL&`Up+`SmH9ZK2wcJDQ@&!a|fOuJI}wznaD^h$jG*kM9SRq#(G?LQ~K zMt)2ff2A6I_`!ZVdeN&g-?t!5maW4x_1b3-=bLv6@bhMk2VbJYfosFaj6aaVmUQLLw z(k8^|5 zZzb;1tP{o07WfRqt1&^{lf1BiimBa>@D@Ny7`-A>VS4hT0Fj3;@_5q)E)S5vh}P_U zFpUM99Fn7Pmxh!26Zr6(XFk7xDhbpVwS0PcGPm|0@7N7jJD*K|PWHn#j6 z-g3Rt+3AHghBf5`>5e&f2)cb%o6#$OyZ_4%^RSaU_18?IYHF{O&vuu^oqvz0GK+;h zkk0(wAbEC8)k{5?E!D8j0HiA7FzvJEqJ>PzY#4tKnF~0aSwBn3;I+@3pbilcbx_x? z(2Ix~GxbT@`+p7o2vkVOAL`WX z-Sh0ToCcMJT~VB+nx zIM+A47qe*Gotp4%d}jW~N$5{qJ$COuteqoUN~iLjmUmZ#Mf+z<`|@m<5(s80Nj z(zX%t^HneXW>pGwR#w%oZr;{OUdG$F^NGgiMkm*BwNa&%Q5oe;Z>mgRhrMq5z-Ckua>AU;AUg4)NLXXEA zu!yX8wkP;TqB%{-1JH2PhZzty7~KKJDS{d3SjA3Qg{e+Ca^vq(P60{}5jAvzOP>gn zGO8GC!Hlne-gkUNuXkqY7)%Ubuf69*MTr}seVimbA>iFw`o(0Hngvjj;fUC}QyD4B zfa!7{0Sys^Kgp`*AYfRDU$v((0b**oD|Agvw`o^{;}?G3HcO`5amK!Q!`WkH+sK1{ zSN3vcyt0hfBiSJL5^-3TK+bk&DklYQHtxeVHCuP3CMAI!I+FZKMz~en1)2d1wla?5 zJ>H8i@d&;mF&(N=ZnO2?Jb9C2-6V%afiKCqS?-P*&s|u6;Sl5@;<>kCW=Y&a&_xp! ze18P;bWccDxBLk$@u3nz3$JR6<}rt-%H}y$nh?>xf7kEfYpz@Xn0yk2HC_xHYNrN? z%?SXO!xML6>cq2nyw&m&H7Fgw4nAh25ZNqbz{dA5N?#lLZv+L3PjZv0kY99NJxw@K z#g64CBBY0$`1vSaO}Gw^zYokeCvy3I;?GuD^##SLYqv9QC3@R@2Ha>^UhZ(pypewr zig!k~%+23e9ZrsoBvD!7b{E<&D;IMt`jlE!{ziSbIW4bGo|=JGOPh&a)laJ^H{0mLxT6L7wh`>UFhbyCe1n2HJxC#f95Kw_a1} zdtQKRo-h3uL)=x!ga2joexWEj@4W3?ZRxpn8@u2|(7mg>{`vMTu*SCA&G&`;$rrww0h1GcNr`G+M>S62&)Vz-J=P=4$*ykZvmb7O{5+*# zGW)HTv<&ps&itfu^)!pwPxzMc)mv+C2b__nklu6RK~k-(HtTAs-ECi74YgXfxBS+R z%6YvH4x7NbCsygG9x+b-RCHY%+e z`~Zz{RwNS=qQ%f5JyqcJyS|DJIpY_OT}&N0-p)Gd^+15qGD|JYYu#s}^ouAdT(SRN zyq7q#tR@Lz=>e0fvGklYkO<)WZ7B>p<(>7bMczJb7mu(qDj4^_VQP1L@zMjMM&@!) zew5K}bv9M)k~w2~>+`8WkXHWmR`Un>%8*^^UBe7MdylDC5!09Pn=qr*@XMxrJmL8Z z#o~UV?7Xsxd~PLsG3eakIy;V?QjKib3Rsi1gAgHubvl?zC4%O(_@_*v@893Ofsx_u zPbBb_B^gCR1pDqDI}zgal#YM`i0n|lJtslLQJ;YFT^8hiBQeQ&2cYK$PFiQeKo}n= zj_MB(gGDH_)Qo%)36i^KazCMD&j(O?{Er~hWVQH9T^(O6tHM3nv>cl8>Q10lGpjN3s%z5 zV@*<4?EWAqsEI&hlJ795)1VHrTl|}=lY3XrN~(xMXaFXo^sFoLV1ehJ+S@2zVO;S~ zNtzc_o(}IR1ofLlA@iwEX}-!_=bc5%ckv^~^k_}2ylC-Na~uEUm)w3!!n0u}-G3;4 z`Im#lxUWcSTYrPS15C==xY1cVQrl>Z^bX!pw%h>rAa_OXe@Xuqt$%cr6 zTFGg=8H5L7WA$8-eAY&+CG7ln8Z5{+KMW^L|A=p@Wj}j`SJw| zlnt9T?8bHZD;%el-P@m>lem0^W8Mka6f_nZ-B_vN*$o;nW*wWn5?-g217cZSfvPbj z&60N^4?}-g8MW$cI*dqfxz)I5V%}jZ4pY{JvrqyAv&M%ick55-d{zQP}f@8%;_f%NI6DgKZVzavhXAnDikggjkhW(@X&7cXzn$5!?hhEyIOW8z zcCD+4nJ|M8FhS6CpMR4*KeT8{@UWbr62O7Rq1L{G;SZZ?VKOFDr*WpiAKaZTG{&Aj z$|-%h>K)t7nquNQ0^$p)apNjz+M)N?RrkhKh3|bwxgCA{B{+A90dJwGqZU>lJYW@D zVKIIdm@XkG?F@{84r>Cnv7ERe?*j@rjmb^(ovGxX>Z<=~aTv3<=NBJ+bc}dT*-+TW z9p)R0LCAZBzZ?M!70!oKUN-H9bf&$XwPr8;yI;3lt z5D7sA1O+K6>5zuqK}uV_8nVj>4^CGd|7f_5j2mi?mIXQdtC7qP#|&9_i3^8r z`V2L9?Mj60ea?wXUzh?Tc21Xf?ydx1v2MVcickp0r%btqoby3#KMk?|N4gSzqu>hb zuxmJ(%aWY$Rd`v&>n&gQcGtC<_08WxV=SJMU;Vt^95Gezy0&MXD>mTjeA`@PS4}_Z zjyq%SIiMG}YHZ40{os7i@U~)alOeI?sE8diRF84OSh{`AtLP+)bXRWBuD9Zx*qLZE zw787A>94Yp`xdq$LbA()v_hU(W^f9z@s^6!R<*ql&Q$Y{v?X>t#DL;|tZi?%zfR?V zTa!N=yyo>Z1vwLRs1eU>!EJr9`Bl=vF;K;OGz5-OtLS?df0c!Gc#(4JT>P`|U)emI z=>luM6*m_%{T9`c8%-j1E%Qzh+Xf*+?k-G$dkJ3lRV*)g$$;^q79U04{z#27 zqWxypHeFgrvUz6jRd|J?6I|k<;xyB9%_U7G1X!KrY$B;fc3EbDX;#SKCRiNQ~P<>hf{Al^CA*<8T+w&LtUcW5yNHag&__@zqk=(h2nqlgMR5%1Twh!5Hqx z`26mnhu7}H`oG}4dcz9K_o7$jf;Eg28V+L2Rog!z%Ajt`-P~)gU85Q(Xaah+-88>qWs&xg`Vu~FE8@Je8^#LqzqX| zIE$n7(ssxf#0|rk%H+)b&!p~T;*nn*1^Kd|gn7s8YgO@PP8++1U8%BBi5be;-qPaVNv@-~fa zSHAjEg!O&o@m+VRAq7f=dZK99l#VhR`lHqU``2h&l;rQfAKuN}EUcwQ7~$rqLH=DuA_q*!TgWKv2YkAE_ChDi zM$40)_uXs~_L;L&b5nE?QfO68;TuW6(t<+wj^q-#t``!o{S~Z33^PL?S#)#Y8~QB% zO6ePIeoAGTUG(b!cf%St-z2HyLK~fqWoACCv;D|YnJyg*{5oYXeNW!(()H4vFYD*E zq)YTu-cX&hub7-IfwjhN3v>2_g^5(&*{0g_G4rmKa=y}mo|QAz!dQH zKTcBki3_e*J-9Nk+3~A;5ZNmpQ-rqC(!b2-2c?b1dQ*4R$rz2S41b-lJ1Tt1L;^nS zpVv0UOWVJ9L4?p>O26%&SMh!v-ftR(aEZ1~voZR|?7}(Q70D7(8$Q+W;d#Q=v|A}? zzhQV~x~Belf-Kcy2GXbyagXs%@Rl5=-Y&>)4@9@#w~z#pj#^~G zZ&}MYkb3=TAG}fvn1QH^9A;T-P1Blo&>&j$KyK!PuitLQw{LTIBKGimOWl?XVHh;( zh44m&-;Vq|;S6gLL=$*aI%x2?_W(GmyYz&*Tzst)d_T_`Xh*i?<_YxYsI7;j*POh^ z>P=luLp7&X{zQ~fz9Hl1n!5T*Tpmf4AqkILcg?LVQo>-4Ch+<4*Jivetd_9y$=-o9 zuz{p#w*r5VH}<1wIU#hjxmXXF$6oz2CBZNH$<0Q0EPuKzqy^*D7Q%0#j_|}Tu&PV) zQ3ct?=#BB=M;TQH$dhB_xGPwiI5Lsp3n9d^rTETYuMX!tfG0cV(ge~AC?6FHo@4RsxB8C z#8mVLNBx9Z-a$~e$#(io+o;60Gt^x3>jv~IpUgrBr5KgdMiuyI{4H_bD1|?^zzRK-#qk5DdX@k z!a5x>d5tB8ey(=j-}n7-pd-8I-F#4FeqDR%V~T?_nT;qq^y&Xlw^2449+JbDZk6_D z5>p}pXE&KigSiyL*LmM2`uBpl&rSvI2mcKFm4aiy8#wT&tO&jF5r0ZHC3wYhCNF2_ zC99nCI_!@{3&iPlJSKYJM6qIWmBd3P$-@++L@$6sr7P7 z8V5DDmBB%*6jI5$U5e zsnl{xuYAQioXNUA*IS+WGWF%=j#-FHko{u9jrr>2u$teN)fby8NS{n~fnhp{DPK;V zU)*b&pZ+=|e?P4y4PLXuz3JDZyhJ#C+wDmj`d2P2KJ)BB76-M6hxA;&aHWDcXNMsE zCG;m0UK->4b7Yw@jhqole5pV+{pc|fuqh1iK0Q>%k%&|D1=+l3W{mJ;0GcKWdV#yB0f-83Z; z5z(CNG^jGcM<}a4>i>k6`nn}eW70mzm#|bE$L^8bb>+m&Fcf35G?CbHU2l9fCi41n zf{N1=dOZJ~@5uXBaA$GbHYKUizxR_427)(c#o!K^m`*`~i{@_-9DiDPr~v4DX!gUQ zCmvw@qlt*+h$@!XUi&ysh22*r0G1T_8VLnx&p?W9;8KZC53hskK}J`p95Oglfifr~ za`mLmWFz~RSoOlQn}@$_?VeH-Jl8dE?j7e$Ha8?y`X_$+7HN>Ve+P}#i0>8L_(}E*lj1?_JHz_f+-JH6BQu}1SNA{1+ z1m}0qfgNbVkc76A9&`zrFIU7>?3&{GjbQdtAtg0Ne{N>+6lo(g@jR$8pFo-@@4YU+ zde~cWFRdC8e4Y^^xUv>l59(F+6hH^Za2kfGAdD7>d*fMQ+C)qhqNr=z4rJiXf+S;1 zdlS#a1acGcc3DH-`1u!c3pK^wlwQ{xvjzn!0o8Lp^myOazy$ayCZJUZZ5EI3D{dSsA?x zuj`w4JinSCP?MErO6bzq9&F-;^zBylz`GSDWM+f%HJs9jvH5dnLT>Lod4g+L$O^hf zq4)Sx!<3Rz)}dX^$VSZX4EpUZPV@$_&L zvMTrwW^-a}dkP1}JEv6CK~+7Ag@5y0S>sQhl2p>UOkEpPLm%DU78pCcs1P%Lw#m)i z3oLbunknJ9-ebHMMXv+PU~e<>HIYZ6D@OI9e~NENTW+36pkhp>=hC7WgK7>%DjVdl zN0{_P!FY;@%G?UPb$$l&e6!o?b&Y$MuePn1E6Tg=mA+CnfigwLv0t)VoP}5k1?m2T zUl@Yu9vjpF6Z6GKj*#~6M8#25Mtda$F0V=0K+i%33zBZ*$Gza|_qA~GQ8W zkogyvkulgHACh)GwDlUZ5Z*WcXp6SW$RX8YuC1-4hPO)W>Wm#ml- zPaMGOvA--1Sp+bgOM_hu$|S9kt%WG2jV29u~@ot|d(K52E)*mz$$ zJ+#V*@x=(Zgwo$~`)WC=dOy$6@rD1MoDPY?7dqgaczk;RMZ0@X5Tk1ncNj@${FO=E zp}0n*mHpg*XSZ#pK5gJ1>U|E@?sj4qexr1@ph7N@~gmuCQzE5ehQ4VQzNy2 z2{L+ItN{~8QCboVZJ)f^OrKr0cWi_Q{# zBdB^JsSEAYMG$gyIH8(gvB{BP>StgsFb&Qiw9!2s(jkhUjq#HL!o^QFv zpkPgM(FG%tN(n1e1WqKAuB~Ru8{*GM?qHs*KWQkUJzSyCb2MVa@tH^D_hO_zEAZt71fUz%k*#?v~2hUxCg0SKz=RP|1>@M zq0Qe6@_@TSv8+NImy#n%3Xy-eX#H0L_#6$cG zh!hpgDBavu@$ZY{EB6|}L{qGH{U)JU#=JVA^|ga98$4cg}~pccqbgaM-oCZrP|la1_anx*v&M?=sbp}-A|88(L_tOMgYX}9 zIbIpssZhaN`mNL~uKL{)a(VoTn$pTYi4CiZ8ck}%!v{b@C{3e8-IeooIw9ZWVgRPG;Q>;J6hM{z15kiG1KG zdA;7UleoI(b+0n7gXHfT3WuJ^T1K&P%}4_`nQ||(p$rWW-D;|l$4VYXQL`RZhj&V`hc&QNE0j;#utF) z&1iRUhFR*PM!2)EH(%`HnCC}$4z+@*A^fg-u39o9@Qasw{-m_>N^$*~hzc!1>w@v+ zuo`K)?rk4olK&w1mI{*lbFN@<5pfCStX&UW+c%{zo8Z(D}v1 zV(?P%BWU#C;LRwX1mpD@%=Kl3ALBbD9}3$NuzM6#ai!mFZrAFC_s*)eui(JR3v3?S5!2W8jM-TNWhST6d@!zg;lr!_uNlRX=Q~Zhqo)0r^>KG>sQZw_dC_ zzHl9RT;qQvb>F3yPzw{K^2MiIR-6yVmtIX@<`z-X)j`A}vLetQ0wW*T(1D5n^QX%E z54NuHqo8>vWFvD1=q(?pazM@Gsjo2aVnYjT3KY+JD#aKdMl4E3RQ2tROuQUW{qkhzX+u?)^-Fe$@Wp;Dn4P9UU(MW^ z=yFX;71E$J{@KsmN)o0k9cbnV7`9qR|B#z1|C;c9j#{`qizWM9bIeJ$BNh9KW`eQ7 zMP*;nUdDDdPz16Wlvl$aB8e5wzi!Pk_2(U`uK{d&0el@%C6h_@y{|KH3(`J04e4!* z9nNy_s5$NZVrz<1IF>^=EgC=Z{dX%XxgshcLEVukf5hJ?-vRQ_Fay>brU<%8f+P}J zd57izRZr5t>hB6KEltZO{b1n@~7wApYKok_G^=* zX)nu}=5kVt#LT2jx{Gk(04kqe&lq0dAN|*^hvvh{;#RP$b}Nf|uo7d$pWEV3E)2^q z9vp7$VX-Yr`z2wQe+m7)Tjp&bDVm18mXc*Os~=$8^E-kOQwDt$<{I)}fvBX>mA<54 zVaRy?h@s|OOYk9tUCga_O@BSP1OtefD2?~|j1_fNHRPM6VyJIs0%E{ju3?KzSR{feccHo0Ka_&b4EhFKEvE16$5 zpYUO>-~c&r@DojT6CR|Vj~w#j`+e59f^_a_VW#Yxbi?; z@QY;`OmokIqz?8r7RG1DPzQOr@*y5?CkDlC857;@I$-oo5C1ySHLx8L6uFRj{3jNO z&J_qLJw745_xE5Lk_2ol!oGLo*VRu=S`_0C$SF1kAi9QiKq>J6T~wC*q^}0(w}>3J z_V1WYzf$efgSRM+TezW8J0ZGqaCYqU4}n#0=%glEgjnkN9JF#KQh#@w6`%)G9i00| zTqml24L`VdA)4fyp*@&m?r-tPQE72%u|Hi(`U7ec&1Q5Ol9;<(Msbn#jWF}FuE6ti zO5GJ@wL$-U^0^@|=0ObER91l8(HH=h!{*5vE~EF8y^l3|)aTWwt$O}^@YaPCS)6fL zUcDbpB6@j9_vZ5=UXNnqD_+03`f2ZzALv`6YqjUD)gC|p4nF>&i4t?uFkg^bfbZmf z9@-&6>Q-F^xqu!&gAQd{OG<;Z_)EQ6$PxeYT29{c8lVE6-C>Gyzb_CtLWVbF1#vkO z7B;vk5U%pdW(MHOckE5PAa_=PzYK~N194fe{bZN0k5DwCeO#i7=SgHB>N>t1fysG3 z+$*XE!e;*}ir-Cm-F#Eh1*&=16j9t>DwH}hN@J92WPi0-9MIci*V+2~7*MhtZ8_kv z`O8!$;&DOI+1|UjV!)$tHz?`X1{L2AS5$uEw&<%Bof2u`56M)V*w~I2HtG@5c?%xX zMhK4BWX6UW|Bgtbc=JpWB|UF?*@$!s=av$_98-8pp*}7Ft7(i=DCeAkh#6J^6K_E} zgy|3(&{p5z2%nG@eWDjPlhrk`r;{kxh!`XKuCe2~KVkNV`n{$cScEnNE!^DL_^z#A zZqmAx$Mh2wemp~LT)a2_6$kl{Jzx10?0fq_VOkJhgxHOcs4osL2qzvbkz(Xp^q9b- z70X4})^(|SExCP0?S>|j>v?v>qjM0tlTe5*=J068zVdAWmG(|OGMg_zulDPOB%WGU zrMf;ojBU@WU@a-V8oA;No>_M&NwnO(BwlUC(!3<&+%yPbAQCvXq+g;C_IS_?=*$&P zCUQX5L%(M;5QuH+j(!cT9Q^xX+jJ}0bfEqS)GgTMjepBdm32HEHvi#$GiXX*thu*? zBLFQGmh^}!l9o@kQzPH;qH3iPwrW8x~BG-6kC14;^#Y>i^ zwm@vRW2adRt0K+VL#Bv~WEGs-3Yc<m_0(g%y0WwQ@=B6Z=9~ z9u60NDVHW&WO)_owa5@y2LSFWI8Ygfc=}ghER!2eeZ28DgVNa%#s8gAnv4H4821w} z708UFSq)*claR3T0jXlS>7k~<( zRH${@?RmmE7K{6y$kg!he4{n2HT0-hUHVU~b(qSv^Kyd^VCa51W=CzG#fEQ^sy>=n z^BJ}y340*)ns@7Ki)d5d>|&_tG2`lHQsU6PUoS@cHR|)!7Rv+M)g2~=IoK7Lx3o#S z#|V}hA$8ju6|8ay9~H|VbD_4^a*F3>zFfxhdov3s^+li1`)&ThpzB}<5fE`PQ45si zBvlCt)&R91D5AJm_99_G<2|GA&3+R!cUE%E(zmximOK+il`b(q)VeWfUt>f$&itG& z90-Mmzf|Q+KjEEH*TN&Iv|E3 zZ*HMx-msr|#;r*(kiz|wm)Mae_j~GyK4JWpdP!2Z2=}&mlwy%rb%6pxMtHN79{h(&bVM5 z^3}gz$ot}x5AGFa^V3Ayt2KumMZmrP{HNGE%wv1;a?5@8i`$l#(%-qV8~wXWwJd#N zEn<9`3qfMOgJK=#^46>DB5uSurMbus?)I;4fv{_6-)>NaOK3^a>ezur)kPxBu)t(KV;Q5{yH@{OB_?bzcyEnv zp*M(Yix-(%wcpGoB{)7ar-6?s5?2)g*_hIUTaLLP%qgIY0rO0~cMu_>KqpOOM_!yu zOxamd;x=EvaJ8GGN}+c%cAHwnI=U`g*~J5bp1f*b;7dYbpMP2I#P#V0aD(K_(coh@ z98fNK+rt@k&lKT10+D0;tl=%V5SDSHglCG!w~W|(+cyS-@H?nXeFf^8d}L|(^0rz* z$p0=MKftGdZ2ktz>}8azX5qDkYnjYIHd|}txx?T6tVL=7uQt&!6aIoU3C0NJ|9a8% zm4Qnu4}SO5@BJlgMq&FLiftr3LakXC({!U53B+jM9S@+cOKjK~u61)7GT44QuGQ|# zBZ>?%{zZo=NJMCLGtTO^%pWarvQ!yLc)SwGU-r)zkFx8xu*`1V4lx9TKjFQZ{6IO4 z3f(3U&xp{6*{DSm0Q`u^cxxpT$xY|uW9ib-o zROiAhwe74TKc^s5#d=SwM2K#y7VF46gSDh<lXVe$FQX)WYn6c)3# z+<0E}>oRvCpROuSllmuNZqd&Kn(z(K_2g+EZjbKnQ;8Az)2|=|j?SlH$uH>>j>ugtO4Vyv zqC4*2jI-ulvL$&M?b={ZruEx{=hmCJE{!Vit|l--A0|+xd95i_n#nGHh(6N_C&EQW zziHo?|Clm{npnPkAM0Azdx_I8KAquw=RY)YnRzkGXmp`+Puyma7$ApE)Bx0t!yh4K9;*bdi|GzF-C!-3RWgBHJ7daxJq zn@{YBOmlb-o3DnAk7FGlN&R*Edz1h*(oF(PH|{{<82zh*2KEMQNF;l&bP5Og80h^r z7g<Ep5BYfb?j-+}#R5`$ zfwXmd9P2`5F6pK+=c4I(#JJg8@E*N?W!X#R8y6Rc5!Sh&l58`a-Ye->3p6&hG~Y;Y zn17LS=rcp|*jpS8neDD9?hDp;N-Yt_>l#s@QC3S*e%G?gJo%~&!!4ua09;jx4UkV* z@c(0GR2b>b-h<>!w2_vL4RClNov@0gAYM z6?-KQdtBR(h`haM4=7;BFnMtc6=k_M(RwwHWhNQg`0vA~?6(_ZB;`!uGb5|JZ34(` zl%;C8Lx*ub*-q$kUx1zTL5@ZZRYs`@W15Yo$5?d*g?wUkU427#0uVgM?UDVkS!qVP zO-jrZLGu^OmnL^tFs-->VA(Bw$}LV+9Xq(_H3-RiriM<<`;7NCtO3Zy;Ypi+nFJyA ze=4kPq4B%Sv|gr6qh$C2eMWy1W89x1qLQGz5Nhle(Lvm5CYl3tfAcB=zeZSOcydz9b^k^W}TyFf>sK%~^O2>zNY_ zXTiBjZTQlq{{93>xzshEpXPtNmv(cDh8%1-FS(N%rm*cGwF3+Fhplsrh#oagSipM| zSGflG7amd0)1zXwiyUumQ@?SG%G<*ex_GJ>$QAm`oTrkfNMFD9dL_htW!v(k}^5a-!N zkry++{$mt-CZ* zgtDcINXyoZDGO*o?WDs=2ZF&b_{^B2uB+TI?7(+nxp)ehe1C9ldD?wDH167N!DvgH ztS_3Gylr$>5cHQ^EK!`IHH_*e(HLBdWB|llK;nDNx`g?s1{zT|VBqE;IdSe50Tn`3 z!v?*FWm$gUCqV}L)CC>N-){@QRTh$1J`v{+c}@W=zre|W`h0M+L7q2AnYGaK_g3;^ z{>{Gr_smGTD66>NO;0}E_3-7>|DKf>@i4{!!dPNqp->hJ!Iq52Q`#AP&yI^f z!^-<1$TBhVJ4 zqU%!6rg%Jd?5NkHKDfZODt|H>IB~h0`kbh+wCEs6k=lsOGdsoxDeLEHurNfd>eg!^5f39vGTW*`kG0X+wf8SyQ}eIy&NkNcy0FO+WCGqkt$f6mW;yy0 z!z3_>ceg;|FRY#Sw{+vA!a^>|_*=r`=Zc0(`Jg9)WW*dyA84~~JLLRd&4wr0tbJz3 zcJDtC&9;*0#|H+l``pugs&&r#KBxZm$o}Oza*TIAkE5rVygxV`?CWyYXmNSux>+LF zASZiSDyJlTG#;K#4HSrO>RmQ5`P-3r!x|#Z*F`lk*6s<_#<*uV$$=*k80myN;n})e zcW=hcs-&eXX8*ksgrQ5LO$84@$34Rl)N{vx(qXXRq0a&r zS+8}RRl1&{q6fepH%E$RMzLM(AKw+1JB~xY8o4fx{K~SNB9Cu?*1;1fV-97 zzot71ZM_^R30`mK34ZstyGg7{K`MlecDB=MtQRwu z+7Szp^f&bN+MhUvyp@=HBDyYDxLsFUc2gIL&D*~LL;>EPc`8Nl{XXYw)HIUKx+fq+f zyCCO8poJ|?g*iUWEPg(b;-|lU zMmEx^&ma?ZEfEw1=Cu%V5CgiU&4#L$Bwp4Rw!2io5IO)V<$d>CeU0qj_M>6B^c0b{ z0iE^u z{3GNZ&v|RVy5+k_WA<@UBM@UDRQ)SJnlQo+1%z%8E)DP{(l{4uHQnZ;=ZD(7kuYHf ze_nWSz z=Xry3v86W=Sfa`0rZX7gi~2M2Q~^GRQ`sw>)f5qTCD11g*>QD!%wFn=QU2SJ1+ z4GPgP)vEfDyt-$}W5ggOh*nP;UHMNjpS#pdi zDZk`%Q{%uBEwg)x@whJV30K{rD|;n{{7=k>K~r2=Riks6@3DJbadlalyHxL1J6Y>d z{Zw#d@6($;#N{F{GVoAwH(rRrg}nY)>T*{gbj)YArlMEJ;>ET_^BxoBezkf4gta!L zTy`V9UAginz}hDkx_1aG%<@zS*t>C|5LonZ$g7PG$-5)UB@ZmQ#;=9f2WVlMk{G~g zr`a+Tmnk589f%$03f7t(2PF)4EJT`}_J;ue$i}tZ5cfv2(Bvj|;2{RUzv|InVB4en zG_EvEF+VZ_Aq%NGc{e<`HFPV;pi=z5AZ5`EvLKmtWzX|LH8;l&%pm~ zcD;J0p_`911_B*XOMhbnKVL>s^Thn*m#X784(wYiwKKvAzfwc|2I5aE7gOfKb4uQs$sd%MFu zO>pmeA;{YKOh#$EkX>v-p1ats=rgNOyNWjKHx_RjbF*E7wyU;ST>({4rsM9%$&xZm z(Ew4TCJTP^v-T)8>#90O%-KR{vEH+J=Y#{V@6?`k6e(!aOFGHwL*y3TYkBzx=k>kx z=b`hNz3aS1K4fX3l%B#$vu zYcF4iSE%l#Zvrpv(IeqvLPw(~kjhwGFCSe?RgP`488|fj4ZFv$?&n<}L7|?zgoj`) zMlL#lr_#&=ls1=?v>Lq-s*5z2#!W)CCW{kLkUTXGajw&Md45!gj;Bj$IAf5%_uqeZ zA|UuLbwew<5jPz4+gWo0mlcRCgmze&w|9&tT**WBG``*Ei7}TwTIlxa(l>3sk33B( zP=XW0?@$u8juI(!a4EtQtrER^MRySJCDT!`*AOGO+Er2ipMxS(sz5-v?cACcq@`s zMS|ueL&$0deSvT{gN8c^27Ul{;T28uZ6bMZE%Z(DR?p!WNIz&JJ2lMvs2+2aT6<0% zVjPbf`N@BczTCPjpQ#64FodY&uuSM?1aX^J3b5m~`#zgvd;toxAjAipZzYZxICG*9YU?`hxxMTn9}2x{Ux z{}a?D8{p%v8tNsD`!zb382Yeoeld%CaN^GQwByvx)~LkEsN{9&av!0NxsT6b-~V8D zcwck>yV16fwyv=w3&wZ?B@AiDA8Us2;g{cl4cd!}QX3moQii$r5zk=}kp&vM{@QV~ z>o)z@n$;Ggslm`}Ey;<4RV|~_kEz*P&mJIqF_L&T>6{~S6wK_@{I0aF-O%^EYES|B zsvcbUirASgLy#%%^rv~+|>qJ!60pVh9M=q#6B*;zJV@Tqru)(gc!nVA6 z6-M)0**3n&YRHd%CPoG4Q2$?2oHw&gJ~|vmb6ngU*LFNV+@F-R?Qm{Nd;R8KkY^dC z=v(G`n`;AiPvpP>`mnR({6GDKhYuL(^ z4`*QV!Ju^+xYWWqbS~P!;+g|{S(5NClcO@$kLx{0v-|mGr{$k1sW-f#612P(@u516 zCvqHrD%KquuxcI{u}aE|#lz%g)N<&8A2H-|B0jAHvRO|BUEKlq899Rddsx;OK+G9s z?Be#hL7JKB_RrCR~3|Ei5_ zQ&M0Hxx77SPkxoF3V9vEpZ{-d4SqFFL&zSQ1X;WX>e?v8{*#t5uzV3lXGA@9{#Xn; zK`wgCG?LZzvbb#+$OtjW4@+4K4N&&8rM-pYeoGye>Q!nDBN|yG~riS@A|5LNASc~iOo%pub&NRJ@J#5-|l8aBf-uAtw@zSk+6k`5f_wj0@ zT4u2Q{a|#41|OKb4mQt1#RE z*k;+dVjPS(T#>SurkA!TZYE7oHsMBxYJ*>SG_c$z{!}s*)3*_{rk8&!#8f=DQeUM0;;`^pG=H<`jGIa%zZt5};aj9%fZuS34T~u9L1$b7fwOBzM#s3-=MYu<< z#ZLOVTLiCThnjefVAtv3KK#2=Y>`TWJAFZcn_G`B_lvDz@-M~TJQzLg9Q& z(1LiZEW|nL)L}vDdv*XtE8Uq3IlupQxN%HN)4ef@MHuKJ?myBe41jLt*7qQ)4bE+* zwu>$hb2+FF=_s!bT6%Nf4&46@cK`m*1Rp_0ja)zmgyW;XaBLDGvBX(Q3^Z`S@<#a1 zD^P}m1ftadG%r8dLc7^}Ykqa|7FFiUI2Di)_XDrXuP5rE3pn`Z#5lC!BAC?z{N-QU zi@xobPZ?x%uGwoZ@zip->rfT~R0I_Q3kT1oHt6T>>*Tpy6GtTaG<{WN%s=c&H7~w5 zLz&5J%JulJPvCX)DLk4uWQjhOzUKM1{?HAT0+YQIJ#_{}$HEd0f@jnnr~0f>slXfC ztT#1|BoSm(oG}K$!-AB#mbvQgVs$mJDfGkHSQh zrAq>!2>J$)w7N6A<*yMghMXFr3q#PQUG&L?YO(h|mX5My^pDsivL!?>T1^KDu!$OS z%&UFB(6*=WPOONBzn6}fyqwyLaViVKzkmPUecj@s7RGOEV)!Z>H>dZ%f38QfUe7#J zG+nA-x6|(mCHf8A4K*0w)}2!HxuGG~uRxcb6;9kk%-Ep>??p5G5tv&q~u{ zd!*^L5Wf0&3R6CVD-m9CKNjn~G@JH3+3a9*dPC95yD4#5;k3kb{^1kweo#rO|M6F#Cs{kc*03vgPBgp6qkqI@>)n!%#`LFR{Q<1xjZb6An`p8eZ!g2P*!tkR_zdlcK5{6wetb5m^F zuf_x&KBm5)H)?lOcq(E>;3@^r)&N!Y@0;9FAzV=BI)#)52RQ^6%q!)(g>DokPLM^Q zhQ+LmlvY3TrSJWGErQQ=k%wlSmgv6hD5?ck_Cg~*2)&~Ae&v+TOdryTO-*92Irp-J z5A|V&FQ{N4_!IWqsz*+qz<p&^quy z&yCM@(^s{9Q?B`NGHB~tF(ID~A+kBaV;Rlp`W;&J4#}X+H3xxWr3=~Xu_qhq43p8J zHD%issadCa!H208v1>EbtuMK$CVtsbi6AX+U^Z_N;=FvT>rL+P#N`+UTlwYlADn7P z9m0X8+e93$Do*S;L@xvb!*BP3`kEr`JWCZ2Z)yg0m9V=9&&7W`gLLuPNVFintrHw= z4@QVQhXZoo7}y@v${A0Bk$XS0KRP2uOU_>e;ZFDZ{(Q2Iig;%7|iA0n^FE$k^+9VLjmz3J`ET%V1&Bim$?>ZNH zlHMpyV}X99v2MXiQ=ypt%YdnP_+OD1VAx(4TH02F`P|Lr1x$@MR+!8hoQS&onUAl3 zX+C42Ic}J5b}9t(s_{QJtRyCOq4r|b9^r=WV_dSArcsYKJqZ%U;E#31+7>6IUb@8x z;0xK^nvJ`zXOs>5ZAJHVDoG+Z&NK9Bjy=8~%^z+FABQa&kosHFGlN3M!FU$AdMGf6 zw8>57|M-EyIq^?1!J3Y>ZTL-FeUxRkza%+MF5_|IO#mdu_(Km4)Ixn}G_w7umZ#z# z{#q+acoa}9?NEIpYAJ06GI~JVL+U^rr%*Ne>3h)OOKjS^AGQ-!Ca4*BGB#c>wWzb= zsGN;do9seQ;^v?)NjXPloQQ|wdT2Z4Ia;|TpxJ%p^Rv=}6~6MpgSx^()fn7<3_gwt z-?`cer4>=utOg=L#DhCq!duJf>g~<>mz0wak_Ci4XFIaxShC4ebqXFe#-+1g3eGG4 zGj~6yAs*IqDgm_RbwJv?45J~ptIPmoEa>`$l0>tEHOOU+5wkw$+O5x!S)UFjsOCmW1i5 z&|gIh9^pGN$HXCPzv&pwT3n(!f_&hwkfxA!*#;WV2O2)!5H$)+_^%D$#Q!`riVguM zblQ1(!7dSvl}+_g6FUa&eki%EpI+CPe|A5L(=csV~66!^Heqi~a7yE*aQ*-hD9D z6l9YnuJ-<53>ucHoBA5n4XU&S9WeEGE>n!*1TI#?1 z);oB$vd3*$8@%bR_y`m3Q7?V%?Q&hb(@Uf`KY}4GOJN9}b`y+Dfag2gWXjf&A2^4i zOa*S_dXO;=d7mp4V&hLoLpV$>KRM=ZSx3@hu5F`4X-J@dOhM9xYtatmajJJ|R#p%f z`Vaz$>{Hj0xnm<0(f=seLaHEi-{mw5cmVqVI*Ch0AQ2OiiXI1vig%4&D6RH@p}&+6 zkV%5JJ|U%8at%y-v1h`2RqR8o(TvuGhOwSi!mi>yoGKM-1xXHseA`S=I<#2K^~B1Y zL(v)IYhjX9a!rC>|> zBoh1}qSjLK*{%#zrVlycf_;oV!uvu~j!UT@b3LW`M7>H17vhRM@NE7DedOePx>l97RI^laDRbI0zCr5miYiH2>$x6Z7z}j@ zCey!RMy6yse`)94*@-EwF~Z)Pd>=hQ9SCn=+uzDmTfSXMa~BM3lHebJgS(I=yshGX z;Z^KqJVQjL0p$&2VbFId*DP2ZnunS%P3riPKH@w)do~9Fuw-EYVhgKP^q1nqmOXjh z2Ax6*+}_u8%xNtIvB_ss`tu$;lJ~XSJHX?ofB$sk-ungKwLx)7Mq7~IeXX-`^78gd z#rp`9Pyj7+St4&OqCm0rM-TLb+JmWh=)cXmd`2U8QRV-3zXwQd&Hay}^Ny$b|Kj-P z-s`%ykZV(BW$ziG?5JdqdnF-c?{zOiS=mY%iOTpICHvlsP`1im*WO(FTG#LX{`YwJ z6FEbWHuxOfxnMkQRf|xpP=_ARsT3wewGgd|s~~V4JO?`= z1Sc9+;aDTW*CcBb3PE&quYb4(%CiKk$ufTTlafZc`YVb{J(I?Xo_~BNjOr4sGO7Zm z9KMpbC)}BKWOIViG9h2l@Y zPp*>=|Lbq`9(*P_(M>X74S?fz3)w@mU{`Rj8wUvo7*?wsDRMam5lPU5i}g(=KDVG_MK_wH?0l=UqL68sn_S(3>=?_+`NS0ON%T4FwZ8WS`s=o&d~WBp1a!U;#*& zL9SZG=+@AKEJBXY%)X+C!ed&z=7?4tsHQWxf@zy8UY@*AP{$%86fJuQ7@ zd~2qq+I9w?EXAJ4ffxgR=}@}-8X?N&w{jrirHuIRMTIoj$5D#o3D3N^>dglg^4$Mr zF-;nR&QmpM&p7}yN+qY6k)A;vdHV~hAW^ni63q_Uncq6n2G4Lrna1-Vi#KAy5tmKz zEJ}3nPj9i>wTAlrP?LTODv8(sta!-TGCRVm8*DmpzLkIKvEs|fE`Q(ak>yK?VQNJ> zQjzYG?c5 zF5gwS#m(aqh6hNSRI3tUZim?)?38>q=A;74+_{S%GXyE^e{z~)xIWGwA5Nt5H2d#v zRbS<-fpzeIJW`?oCtubOiZ05>Pj4PzeX!wljK9ZfHzQjvL^&DrNwqskD|=grUBxrV zB-WVZ4m+Rx@^kjlymYwR-wh5%Qb9Bh`yK;|NKF<1=xED74U$E2)VMEeDCo2jU2n7H ze(+sw6Fv!Vfy;qlRjHgFr?ts3`q+Bnd0+jtHT>hRw`fs+sn~#gTS`33^2-@|yX<;) zabTxrFc4BnNw6jk(+!ZGo3abV#Jk+DrUoFgw!bi%(_7!*cZFTjyYn&zBPjDZahdV6 zoUL4>W9&YzbEJv%Vw)lo;kLI%!nU%cFx1{ z;g+ix9D{~OuQ4mWpQ`M|b;?-j2m^U8^o`il^6uWg&wRv9XG56S_Q;K+fAArTEPWeQ zJUb_5eUXK5I3ZhFaqjsc><>Ih?{$R4#g|0;EM9M`;Zrnyl?mTT%lxLK;eGsEx~_1Q zVfb;xW$-wflXn49~%#3aR1zo6YHb-FaRTHFx2_jz+54HszV)MFC2ZRv^=&uNWS5 zwXoN_$Fmxn{sT?!jb{b;hf9*rdvGc|A?$~;$ILEDIQXt$?=|3^T#OxLH&Np4K zqAQvOmoxpdQrs&rswlwdb5Hi`UoLcVaws9Rf{|wzG`i|c@4T6u2!b7blsi82R{=)9 zI5FeNfSn6E36W~9UuLH8pWQE}4L@8$_Rq@s0z@0gdC^SZ^kdQNs`6knmNOMs_N#zR0DEn*wwkcY;eqyttB$mf(_)c4;6Brg*JKH24*@wK{zPELzPAdB` z6&e%azlM1`30FnV%Kg&WVhy}B=l4oNdV&$&Cl4_pmR4rlWvfnx>wC{$))^fqDp=&V zLv0kW_CWzWoL+4j9=Rmb9YYVnL9Yfy5Bl-Z)w~sVE%D;V;b_G4 z5TCEEAMW$#zh7|)s4~`HWjsg>2ygo7SNE?~PF!FPt6@Wdud)h{RO$4U`NGU=h73wf zy@qC9@K@2F1O>`Vayl|`gVNomz1R0R7&~t%Dm{F^`xhYGR~ro}7kbtpzo~!2bJJO0 zA##y(uIw{HVy;r^R6-zn3*EHnujVBrsVMSt`li8)hB1(CZ7`kXU3nWwgH_L7sLS~u zFqS3S6(uw@I;tLzJMqQ9qNs=a2X%_XOB+km#J%z!gx!M^YbR^3_d0i)EHA@`Y14Ehl-B;;Xd2{5BdTg4(n~Up#MIo zk2IR~YH;Yu1t|T7s|3Vv2+pJGiBmDV;n4rr_3_zofanD}m+0@;5$(|Yyk_QDyt^ce zjG&)feStkHpTB9Ukbrih3zZ}PtNY={4;2qeeYXQ?!L&_QV#j6Evw#PGPW03nYn%s4 zv69zsM>N*^$>_mhJ+rslncJbS2BRucQk}6BdzsK^A4ut_QuZW+>tf-u5vpOd7 zech_eaf6hHC`3c@@~_h*cw15se8I%kcwMwbP{UczomG)~)-`GgohWM{UkHWJh~e-6 zl|RmiGkE>-`i3X?CrwhG@ozh0e8=NiGHvtKydUmMPWqn+*3)w(#jq9M@2TmI$7LoW zV5z$R0>CjBfQd4+UAq!Gimwn)i+VHH?+}t6Cstk`mTj*gcwvvX>r$lAaZ8kvwD52% zGK(J?DM~d8XMa;_!aokqZHuNbb`KWK$ux+kt!p`6*y%++U$|POT_{wksY_E{8A43X z=Ngs6feB|DA%^&GO!;oTZ`~kvx_-Vn8gXJ?*XoZ=Wu&YrD8t__pA;mwcT-p#^EV7z zL=Tx;;wANW{q?=A3lM)S>X?|jg{wkh*Inaq4YY~BFNeU{4A?<}tbh`z*YWrNONju_ z_qXo;I_dpFIPzqS75X@tERg){A(QM>ZzmT7Ae)PrfcIqUXf^IO>^yB;naZJ;pI@}0 z$2zIK_AauSS@-5(HW^QlxGm~&zP$hq?Xr&Sq~*=We!Lv!ND{eBgT($DyA+Oad@w$H z9p>&~GCxh z{cCt0KxatPXY2IN`GSwe7poB(=KjYK6$ee80$&$xuG0Pc35%_kyf|d=l4A`PDjH3- zjJ$%%*U(T6?Z2Cm*kSDm%kdsigV43YM6Wc`;=ee=1`D*$EsRb;Vqxl!4`lUdVPSg5 zw15Dw=(aG0?uEN*)yPT!<5l8gGi&aro4#Qcs6VBis49!s(|7P*k7` zV?fGUgds1(ZZ=cj4Mo}j_QXSv80`&4dOAXlt+oWCq$TrPS(J6qXo3)n2k=#*ouJaZ*|H zH9>we(rmcdAIz{rioJBYKMrzJVeffsIGW%0guY`Iw9ep^|Coa+l7xaBSs~db2| zdqf&DLCXp|HdSm_gay;TAI^V!CE6;NTV5im@lf=@;CTXMS@YAHWJ>ZKdoWQD2%`jw zR486rC{fT|t>kA&_*w~AfQTGzA0fD3?I0i}kK5<%TO#X|R>$~+p~kn@ADJ%u(}(|G zEVlv12bcpAjq1>lm7b*zD9Gq6Av?5g#2QGZTKh0AcEyl#pRsh!FDaA*H`H`vuQ8bQ zIwM6w&6nief|l4hZ=&7EogL{-uSBdhU^^w5?|x$6hIq`8C%1`?R*Oy;EZ=L0Y28V0 z4mtC-R8M%y_#STg$Z(<)b{k`I=SazOrAtohgfRwKfYf* z@KgNVrk61VncnhPOezx?vET7hS>1ji^?V_)i-BFh5F63XX)Q*DtWf#8F)vPDDZ!dFCsN>TSOJfMGNSOY3)dp?+DKmq@#`7|ScI-;01)@g(eiYV4=K*9{2QPd1 zvBl)z5B<*m+k62EP6lL53k5fnVK0Dbv)I|lqf?^^a&er^dnhr@M}v_Gj&q`%Jb2f7 zQ9f{y!Igh+O(cIx{VbM`HrhJ5C5RUf=hn#qZ;+8Nvir9WCvcsz`JVrXm*( zZeJe*J6>Vz^KR98C3Y=#3c5N3_T=4VFg}q=2jfw)3TX z_`ffK_j49CjpaH;<29DZ1D8nWFwQ=vzs>Znjkbh0lDva#oZ@dhA>vFS--NtsMnQw) zKY9iNu)h&b!RC+ay+n_;_rqVl+YVI7FI=LL^JQrcVgN*%g~3;s`#FZN-wTpfy;Qd4?j0cE{m0>Z)T#9YF`R=zT{wn!DB~tDYmA^71eGW z*i+kFoM#n9QXc{ncVmFDmc|Y^r~I5M6>T6K1RY3_ZN+(l2oB)-;h~O>nVF3)GH)ij zFO>L;fk>^YRhd;dd=*etgsE@~=XcD;$)m0lEC2;ETUXf?Jo|pSxlqcbDv&MH{0n+Q z4#%Htu(&*C6!ntxW=&%qb42XhDvHt9nCCBs&+nzKux4t_|0CBwSv~yEN>Li}!l$}0 zK{u9a(>6o6D&enbX^oZ6$_F(sf1c~5H8}CM*Dd4wDdx%0SM?#S^ZNTJVqbKnNrH0$J<@MT)t?UY_ zDcvf{7wavvcfIl;BW}czxX9ZS*0QiHaZgtw!>?DB9~IEo(W4CY>O|4}v#uR-6C(0# za+bM>DwG1Fph2JDl`Bj(N?;LcrqraQV97hcg@wWDK12gH%gEI>W<6)%LA-~gj zw_m2Jc)lZ0*dH)aWw)$tbC5zR<312{3l=u$i|Y!&m9`>E%2pmCOQK4KUJkDQ<$EO! zmR=5|8lMqoxTW}Lbnl6v3i7KX8fyCeK?;`HX3(NrLE&zPz25zIbDX%_tECl(YxgN& z5f$CwV_f5J#0k>xgxByQ#!}d;J9SWV>|kU1o{P7%Lf5uHh^TAIiNU}R3n3TbbxG-IKDg;$e5#<}tiepgv#ifY*- zhW4@KJLgMxwtV`T$4(Istu7w++1G7CEXkXdObA&FfiVD=r;CMS&V+@FiU4yK#adKW{rx><9P!g!}YjL^3@Oq`=pABHe z?BmFJTNOXol%i+f5<-WFLul$qt!_x4)m|RzU3+#rl(0H)f82cK0BApz2Gs(h8%A4ViW%)RM<11^ZSAm5;##Q6GeT8b1qh8L5FL&h z@-+H&TX?>mEl;3-G#kq^LAgb})x`Ec{0DKK&p7!BuA6zwvkHELF8-BLii;prO}857 z410ijxuDmBKDg3q=zw(Z2<7XC*Ycs}zcovL;HI@Z_z5bQB&MG`8^`exz!*g*EZYW; zlI$*CD{%5QWieTC4(s-$W1RK5k^`7G%T7ziG$j)SQPO1AlQy|GU`v%)giWBHGc@FC z&IE18Y9#y|a=?<&oLz6;rS5qr)-U(U=uYkP21a(R?2pqeoJ7MIjd8O~-OmqGdfF-z z?aX)?l<=BVO%~OoHPAll=<8H+Vqmj9CM>NW$$%Z5-O zg#@QiW#&M$uZ~Bh6}zg}b}hzud~kEVkmf~k)iu-*C}NgBLFX46$O2z+($ht(4QZ&1 zRfvf5^>krW+U-ehE8x5EQGudT$vW{WK*`79CXa6YEbHEr3Mt?f3vT_|6>EkdMl~qv z;r$+!gAE#73SSRZ(Y}kiU1clMzC(*pdKEzQjvN=nF=EG`AG_-Jb%As&Qx#C3LvOSZ zWZLpi+JF`BqEJ)4zug_)Y!xIuZTSxonFhap!Di__&pn_4Cp9FuRPqe9jtkh*V5cnm zB4alfFkcgH`}m8)2ElrpuTq|3Ca{zk3ss1^NI8i&@Iarfw+2GG(5^dR(+bElq1u&1 z7_spKOkD_FoT=chiLac19E()}Eh>79HqpQPZ6g;Qo3^STAXq}~WAJs=*+#r{F z(9}(95b+VM7-dQ{j)H&zdJWl*biZ(w-`T&x-1F(qD9J)r^4<(@cr;d$?Z(r}?p5xd z{;=cY{@O#;_I25bedWSJyuFGvugYmNyzUwKJ@*c);15cO(L7wSaWiy>5_+ z+W4j$0>+Am--HDA5S{rhlRiK4Ur5#YGIsx{#>w@=&K)2t?$r!X`8#3PoHS~%%%F;F zV|)F2CTrM+hNV0*jZX+=_A>VR=D&fEv(>FLgx`Bm$OA3U$Pzj}C@S-n_DR7mMoClZ zz`b*8n!?Mr%d2h4`Cl{j&1G4!kO05$AiQN%$%8r|Prbi*wJT-C7ZlVYA^LC8uO8_> z2gdb;#+RwHr!X?)ymM5fP)w|MC0H;JF=O#cl_oQdhl~3rFQ!ko!x|hb+DXD_YR((XSkDkhVNRcq*#F_~O>JuD{#d<|0RsE`ZRN}}_mnc{v#I5RFY-YD0q zG+!wjW`0FOIx-=@l@9HSubU+DIPQAgmhllcsb83>f{YaGpd{}{n0>go_f0%<_o&r| z50;f^_fSb?26*PU*tp;wRksNgIpl9CtX0Nl{Lc44OERK_9XlpnJ{mTEguui&Mf{4M zaXhJfP2e)yCRqnGOEi$mjax|NH!<9$>}`>_mofW@i@j{m{wlgYs7tJ7Q9h7$c02mw zwx)?l^h!Jmi2cjacs52;Bnn1D+3gET0i%D0kES*!+aJ$vFt3qHPa*Q5Snr)jrX2um#5XeD&Q6{fY@2|~47`W;#X#&iJ4X5pOV17rnl9C@) z*qQh#UgqQ2h=oUy?x#%7;cqg$3$AzZ%IfHSae()x*gMhRvsz5Z^k!(=`-KfrqVhS1 zvxpq-0XvdpbHV}7b3i*&?dP;aoj{{j_I)ucjL$T9hX4)4hlzrBj zUEfIcHyiv7EIUqdk#4XlU2iAUR>aFm@gcY4o>B%>z`yZ<(KDSOxTv!`p9jwrZPJ32TTEk%APh0g>!jj5&j?I2l&iUIXANFd#O;t9UGdKLe z9E#F>yY;n-4jGlLlcRhyKf0-rO=)xI)dRYjZKjrg>EE%d+qVq>jSxXVl*;hxGrnIP z6vaZTmI)&tz4>q(yN}!D%ca-~_`vP9J`%uk=$%{hoe>UKinIs zxla4OlhBf#FO>2JM0WX(ZeNbv+C!IQm8Hqj4q z&u`Jv6+=hhUijJ{I9L|QXc@FY{!Dkc2C|Jk^%s=AiY1OO|FVH<5 zbYx4GtqndyTx#Q^o!e)iK0D~qV;JhTbn4GhvRvLP8rJ8++dS}7#BlO!WJ2>Yehcy zdsM>OJozyFVP+i2J0o@sGH0>&7D1%Y%O07hs1E^qDdaVxy&saDpg(n-4`)t!{BW2< zMS3Z>viwjP4%^Qkn!)W~ZdXL(a64RcY>|a`S19xg8HdzGPzVCWqlsDP0ruA&^{d+V zui%`?)9w2wOzu(~Vm&=VM!on{Tib>LV!;JHIDtGBs-=8v6!!6o*uh~q8!D#~@CCA(8 zwzSnM%mR8(_u_3?$@jYFFe9)9U0PCb{m{!JhXC+NU*dOn)Y_;}8u zQk)=Sgr8BUB4c6D8a36lz0rC%T9RhB@0>LXSCudbS|JY~WkO?{d)&a2;G&fxy`n4E zd$T?*HQ!NvG&I@<2^5q1Hw$F|QXKo;8OeX**a@%4uvjLMw+X$>E#PCsB_o*zGpkSu z^Bkm6cJW!)jrfJCj7Ox0tsDNJ6fWH^OBzY8F&;I zx9Z2^544ykJCJhCfoJ%gl$9!MoDWVCKu*r`22cCWPCQu~htxgrKsl-)0&h#X!??Zt zPg3JIx(}u!PLyBkZx~l70h@^fcIQW)mlcGB>O7x)^+l))7xMlnryl7&XJf!1FhV28 zOUM>_FPTa8V`2eoVK68ket*V?axBZjB=Dp9MXsri6j{+XTdn$66FJodfTLU8qSyd? zvQw$k;RC_?lOmzj87yV-X-Ihp^vSPH3X>v{Y|n*D*+e-wBd`&D-}L3$z*4us>^5zb zQlAE0!0arHZzuQW#JNi-AXG>Lcs&ehi~a`=niq0WLB6Utp8mspP|f`G<=HS)@6o4j zaD;1)Q;?|v4bQXen>QXxu{5=-s2c$Zw_RFbQ>J{_(x>R8Ss#xFsO;M7YV2{D^~3)L z6{<|1&_gV1F7L_X$*~#Z(_jr@(*g3+pR_@WhC83<@U_Fe#wM(phG|d9p6qALWG|Ki z+9{GJu68v8VuPoCJXarTTQB4lpFeo{AGvqSaJ4V!z7RTGA1m&~Ow@*34p%{wF#%zW z?->$+EaGo)u_ZEZXBrkE()?Tl5L*^TIoxx;F94*Iqy^6*S#Y%) zqcgk7lnV1QCzMDB5Zx}0;#zEe?+xO7Xu*h#;43Hqz4^*h7@ z1r!eaz~w!8Xj(S!;S}Zud*4Cik;0WvjjLS5_QdVX>^z%Ak$ZL*YE?T;${*q)&6Iao z7oQGJA}(#>5UvkcEWIrpLJI-O7^de8%uUHnH6Y$2?0@C`)7V#2tr-?s$g;HCj`isY zk4B{d+{U+}BE8t++|)b>F0pf-=HQ$29ciiN*FP=UzZ7xCq4|mdyIRyXRH&R8mx7?h zx%}aw#rejlR`O|wP6_I`9Qe(EgHEobNH9^NM4&j})>i8%resK)AwasP_0VL#?UPL% zCU_$~KLe8W6Oo{Q(~xgykPBD_9~hS_XI~RF`gOeigz}DMUcD0X$`}K?ka*RXj24?} zdRu`pN+nfWHO!1R&Yh#JIceSBrSeV@=XadBq(m8*Q1EpB9{z?l5OFzcgFjb_ytY#C zJp^vaptM{1N(<>a2G;m@%MY}95tdyDe>`0vw(j?kN)3r_p|u@(JB%CzD`EcVwZknb zMpEqOMoY;n!Wbw93*o@!tQn^E6?jHJmzhXCD5E8-Xa71BzANN{2Q~6h*!#4;8-t^d zsgYD93tcoK%TZ6OO5f-_t*M$sw_tcP(@)#sl=Yo7k#^aK`dz98ia^dR2ApSe1{#Pz zq8ycME|(CQXHL7mP=DC;i`zFu5^a?pp4ppap>6zqSAPzK(9MROF$CG1n`cYX8T|7n ziFzvvQ#j<4%=BN?GuvEeXU$Z_VyIjnXl=a#DTEAHyj>{p@q(Iq5&>9^J|tF9u@vz(7vI!fGNwX*P=5;S`znr=J^|`=;m+Mva7O z<;P=0r|1$r%X#~rrF?%M7NaC~^-eZ@^{qaN=~WTb!+~9IAje_ojy(T233dT-7;>TqzG{U;{ zIrYS0*D2ca2M+rGA2y#&)+vzn`Qi-}9?3|9eu*y=_Y!p&R$yjavG)~XP#xRW_Krxk z;g*UN0<{NQs(~XPt35YYUg4WxUglEuHInXUOeQ8os4$_!GxQn_0TH`^D*V(^nXz#A zX@DU9np-%JR|97};;CHL+xME5Cjk}(->yehnmx3Gm{%nhKKr%Q=w;} ze2i4?tEc(K=6|}#&ja6W<#CYp#W~E@3K;<*%TPSfhmNk-z;V$3);4Z9+TceR$%<-Y zS!KU_NV&7B>Yi{M3tgUEx{{3;)rKlcyr@z^Tx!|N>`%Qe@&%ws`)Tk0e7#!$~AC+kiI$Dm|X3NSxxDVu0;ec;75Bq=Fa#QLE!U3Zh z<7&3Br)=fgn5Q+Ma>hr#9yEyFYut30JFU|A&^iWVrYI3oLnPv?#?>lhvMsZt|Dr}0;|{!U+49C1!ELJkFl zH$Y2_ke^Ez*+g~?GDJGZ8&@_G(?pO>?k$+?^%817)Ji736F|1yQVsGtiN zg9o}Or0mNPl0n>G$DOaq{_xd}5#!Gjpeb8i`10wc3%DK~W8XqAUvxaYxBs5QH?n+b z#WNl|o73WYwTz!oVuY~BXxz3#BZn_U5;&S$F!rj*+r@b4z+w52;l~^Wb-vh42=5g1 z2S_-~_c0-%VPc1~&8kf4cmzXFR{%{|U#pz|=O$ zu|~1V`8e@#EL-w%Paio_!`^s)cn(@-EyM0B-XX*Fj^^K}=QP|1mevN?Z&qIke961# z;DB0@f_!v9)1nX}sFVk5V$4^1x&U=B>i!dHOFkcJ&W(SZ<<5h=9HAj0D+dZ+65KMz zq-2Zl*!Euo(Tm_D{Jd5c-ByP#^JW^pC2q~mqjuJqP&-$e0s~*PDQP&}mD9M_8d0_P zB%GIatgY;guf?3XKGJRs2S?BWzHP6R_Ne#p-i1c^vMaWv_8{^;!Oku4Wh8uzbcP+L zR6sYuiQ%&&feY2$l!5n#fR|p1X+;x2%9LlCdnWqor;_yQki>0P7KGoaZqMST@ zcFo)xU$bI3(+$eLQWobngFYZ%w~S$Q$@iYnf$E*nxg~CB>_LZQM71G)gk_=H9c?xa z3Ost1jw!m>b*aJ0a)7WIm|PoNIPLpFYe#@x=jy%#nu|pVXa>++D%M0R^5kR!=y%17 zl1nEV7rTyGCDsx3k^GZu2PdFuN%r1i^7gK00Tf+Ld%o~Z{JTu57=C=MbvM9}KKYNU#AW3Vyz zU$>AvlkmYYQs5P*pp=nsUqiqsCaMqBgQ=;}CyM`iLOIwIpmYLsr}N-AlylHC-5{6n z6gs3A{9-NR;h?UdWPaCepi7jk*}lxTlA0oN|L7(+Vf6Ld^cIjqg-LdDv7I!5h3(z9 zoATlTW~N*jG(YYt!fBx%uT44aSXSQEUEqZN^Qu#q;vjTnqQcW_B!VuX#;n& z@WPLhWzV4@4~QYyJK018tJ^i^5LK|`V_^jx-yZJpnU`&>?SEEbDLs_43$L2k&IJxN zMM*Ctv?3{dZ&7+lGPwD25expE7C57^+{o7)Ak*S&4L@)oZyTHNMjcSDnbFDKC=ie^ zYxjAMUbZO-I^uUadrnSR=8R6Q2f#bq5vjoTg2i4{^lZ=;it))ue;j@JPW%BG52gzb z51co9j#Cu#WDb&`6$1vc`Y?c+36Oy6>j_65uu`8hH`^`t;c}N1M~eKRke3YE`7aSm zIaxuw;JQeM$jI{r-x`az1=!ZTg%ah^Iqt#f9Oq-Jg4dlEsCot5{MO|b$|LMs^;+$z z+d%QS3aRv?{D^zfDJKj*BullS0nKp}wba`Gm#|4gJEkJeD5j9$Tp?Q`W(bkZDf zfWiXe!??eZS^mM0XiK9_@_pvTO)(`5;GII2l*>AGG~Q^q*^?>=5aT5CVsl6V%4sq0xs4da2{f1+`s8_<%pW$>KLFgPpFxI zGHiFcbK>`Qzc`|mb#mdBE|jQZc%8ZG&^N3d%qVV}I`f5&seN9RtytUnc0Bg#uId^% z=hJX5=)wL7I0b~{*5wpIAA^j(3tS-zDMl5(l6hn>bC&d<&K8f}Z-h{rH42-E*74lE zGZPruKaE(5);VAuEpT}0fWD9TC-Jh~Mg>1$?}3KSJm(;L+vLf&Gj}n@v)O^nuGPMN z1)@JkNo9ED(mpnf75H#8lCo8);{I6lM5j5{v)F^)EAwm|G_V$-Z!?oKV7_?4^Q!!M z2$A_X`UHA~b96&nqu~#DbR{KhH}%%5ig#hL(fP9~^S5kZ8g&fp6vn{i+KF$hgM)~r zM2;dv6#kCB{bMGrVg0nDwTpyiezC0jTf1I9P$O7M`Fu4M5F`D-EkPW)7sxfhAi9qUlhn6}YW6(NOY_n;M_;G&oKX?<%C7giyB##xq2X+t-rB zghwZF)q}Kj8*8NKrTOmmg(`9OMb`b^*m=H zFY7N$<8NM__Yb9YXXGa5sO$%VFBzN1RT;ntO5_l{cggD)xJ)ETpUm+}c}^<^X2HFV zV*tZE+<-`?;=7J74Hz{(0L|?mMYB5vypk^~cEp6&vj2ijv?$1{@H2Fpa8%cq0|zi>@{|QFWDCj zkvmcOaEwJy9$O}-i3J1u;pGmhSo17l)Z5}qUFvw#^ia{$7y4MH@Y;~LtxB?$ew-e4 z}Z7{i3eh4)a++Ctaf`hGPF7KwOOi)aReb zt)5Z+`TDV!cA9h63w!14u>|!cSmP{TK7o;iVYLUc;}^t$|gV zy^i|7GN6)S7pE&suY`bXIxDZL^K{*x#!eyKTzdBU3!;@`*PInx6mnp$YXP3NO$pb# zYl)jVNq~C?vK>HdTp4?%L`pDoDYcG_s3Z66UgN@H&34AC6I9N((wY~PQq1%zZ|>TV zFXlYK>Yrio!hMyK2PwFoK@>C=hM54%UYW>9)^lMF>ebY~=Tim(r|erw3cI71!XY(Z zSQjh=POU z82bodjIV_Hz#s^nu(Pz^noDkG#cg?dpub7K2xZ72?^vz$PB_4f7IHg|MmLjmwLER8 zV7}9ILUVe{DtpR=vOm}h3q}Lhi$vF9Ew8qbYa<2+kuIuDqxFq4ug}bEY@8{b|46&6 z(-q2pto+Mv^Of_lTm*VV%juJ1nqEOFlH!&9mkPE{&nv92;Y`gBS}*_9j_hw*t@QS< z_1gGv`5uiL+0Vu=u1uVb50FmFz*Y8zhQ>S&=@xQOhu^mFt&`VP%&p}h-W__=?#<@s z$Jr*e7d@RXkwLTIdz01!-*yEQI zO?v7tS%))R(=~FwB~TddsGb35C;9EvidEI2Kev4+_jN)4OyG=SfGJ=_k3VQSr%t?T z3SIh4QDwKo`{(&lpbeP}sGXID`|Fww-8PD6b)43^K}m~SbYa1@&mhasF@rOJ11ZT8`>F9^cmj5dhP$=s~>_6|_c*KHT zFPFlVb}#8x#0`t?AXa~290q6`__BE}et|=mA|qd`jK06V%XUy4w9Q7D!*3GK+MYXk zd7n^<9$QRjnSQHC=b$LY8VN!&D@9ddG-k2EK`wwJM+hUFolO?_zSl~PT>kR3@0u9h z@i7}9Y}$%UvuyrQFzbVp1+jOFQb`*EU7`FiZh-QIzQf|+4WLtdGNGnO6&fW02al%b~AfyL_$y0^}`_d5F0^&FvUli+=) z=^EU^_e-zNMjrj4!S;%y7F^D)P7BSU%>!-p?C0-T<{A&zxlqa@pR;4(shx$cptPpp z>1cW|Tg6jy6&N-lsx&r;9-3JYeYa3WECOXq5nJK+Z38Xzs?4_fX~=~eg3hLQx^(+} zDB)c{U#Xq1`t%^+bENTx==bM!$14TfCc8E08XI=8Im5eN&x$hSg~NuF*o1g{=p=~u z6vI8wHY-crrz_Gum4;&LBFl!IGu_)jk$e>DKZ|in7%o7EN53!=PJ1P9U@7`7OUUc5 zHxnhpz37n&emJ~}q!!p~3AG347@w=r;+<#Z~twB_AeJNZPB3FX_94AP|zfX+=W7BzP1( z*ew{PnrDxBO3oNsogsHJZQmHeQf44-Z-Zs;Fj?c5l*%842=5t_fmiA)pnsOp475fa z4T2C$4b?}>SpE2dDB-xZ(swP;;^~Ck?Z7+r^H1jkJN;}n5V%;pRiZlNnbsg-S&Gj@`Fb^g^osvxe`8k3-NhM zkEmtqN4iPfYi&S;1D9&we?PGH$p@cumY zbQEm4ehyVjnDW9^VZs|;HH|7p)qNDdkVI_?t+Hi80_rRgXNZ=5wps&vTHAj-ko%UH zZ3RNr7g8MD-5QgSpK|cg15ItG_8ULK@8{uP6qK)cFz->}*lWn~(O14Apid;t#R$nH zYTG?HTJd-La)0IcM!hIF=jpxQDuCE2L$IBCr}y!*{Y0{YjjK=?1@oYtg1v#_1*Kl_ zFO~yh$$J?5uLLtOLU`scRL55zkVB_dcG7-_Q%skbpj6a<8NqvwgZFhbCP}X={g;1l zvi}s7MKpNQNy5~ccB*+z{@Wo3zpGm}wh-8W=1$Lm z50N#8R9%RjpPqG)7t51_H8Q_)PjB+x*tojZqj-zd8i)Hn(6xF)c#W|J?Y0c2d1V#f}%+0s5HSrpt$t$GlqNj z*sx^_2BW(^AMdb}8}4iREm9h0#m$gr3{>Lwo3c*N+x8mFjo@vkVsO<-(|39?ij``Y zU_|pF|98!^nmycmI*K0Z6{cI48(-nq&zcZrzMhL6I%8w*R(Qq;FTHyolk_lS*J>JF z{T`;h3Oc0kU3VoDCv3y3Q$5pC2j4x;E+B&tl=F^G7O$zO{=iv!8`Ji_Ch(NffQ$4` zCB7D92oCG9bbuqn4E7jq_A=B~?4jpTJ>#Fwz*WL#N=frj;tiXFhs%oj<*QJlJ}=bACuWT+S}z~_POs&+klZ1gZCw?s8;w~U zV*GA+5n4WTju`)dfPkQ=JF6>9RJTLp-8c%AB`AbZX!|h-;ez+RtRYNLdSFA1@bu&1 z3dZZ9rZ*`Q>KKxI&ThwU7 zK=3NWQpRum+h*i9bGOST1N$iB!qMtu@*R$W@toOkboyt-KTTwnMTY_Hrd#rFdzhBR zpIVj&rT7?^*(1$1B@G zHolGCKZ;e3bSH2ac+B`6pNA&diPs4a%Jp@*4hcfR`V`n;$qh6-)q^cRE6*k0QAoM@ zt)+78(p75?sY{j16MF=@{BYeZ=!;n`JM-sFPx7a28lYjW{Hv#fskeIIN|d79Ug5-1 zssMtSQ^ZL#d0BrgK0+bHYRYj4LT*W>*Rg`=`%4>t0&XvsE_5r8u+2{&oZAWSFg_Gy zA`6UG$~?=```K?Vj8bh|M{jqN+*fQ$C3bS}2Uw1Z4hVY&$WU!;o^PHxD}{WzK-43^ z>`a!Zox&G7AGs zYE`@%7fW_I-jm8Fr2+M9AQSL=U&ZU<{)U}F>|1Qv1H z#On46oH5V-eYKAxFo@GfEe=%EDK6Q9ISob+UXiGhID4v9e=v@S0-=ZG9>`p*^`yWMT8P?SQhViqpjSfLZgGx!Kw1lMa6U3llLqw3; zq??UYQbj^Z3zQt)Fj}NV8eym)N{y}o|MP#r`&}33e9!%Tp8NjXCl|RI$bO2iEDj7u zE&_;fzr&}W^9Agd!+#LI{&XnaxQ=SIzQ@(E_s^&B#2&0jm^Uc=8Vdhx-efFNE)n2H zQ#@fyDc`|-x(i1&m?2KUJj=qcXqKt!@e%8J6O5GS9;W(4;;{00+qaH0gcp2uN+Ox6 zBYNxK_tc_G6ArkIFPe`P=1L!KRjv+-BW}U80$CibQikejN`aCf?@VR3pTf8XE{&|P z$4VhoGg(#85N0^(dMGr~;69+?lw#lWKyFqsP~E`nt(68X!)L*txk67nA%Zg0x`d4| zPsK*RRd+p4GXN3c=xe@M-s$zUKJ8{JHIpTP^cc6fq8vk?x&nADw1(*(O5OXo8^^e8 zJ+`h+3vz^>=p5hWZiRml3m#p2c|Ej|dAE#<&K_noy_)_;SUpY5tKk<1w*!-Pm}40I znpMeHs`qo#|M~F*lqv2AhuuP7CAvd<3uR7E-kDO(p{&rG``pCaV^nogvd0e5$+^-9 zk!Wh2J3Th$5UPtu=y0KX%Cu{8=Ena;wc|dcB?xK<_d_`9_0eBMpKjGkl6&L2p*zHT zeq6e~&<5A>Tht6Y2@E!!QUJ1lfKo|Yk__>Xxb;{y*hL3Tl7;XhIe|ygCDbs2;?f>S z@V>wl_IRIgb1^^I_d7!PU4p0wKvCOFsex8}uHV?+2}izLu` zWheztvl6M>UegdS$+F#v?2L~@;ud3`$bjgQ!9P<71nvcwyBX(v6xW$Jvq%m%@zXx@ z!zi;)aGc!R_w7zbOqt5U;6GiQXZJ6}Q&#Z;?gAtSI1~DCe?{h9Pwb|Yo};rbd-{6_ z$;_KY9GK8%+i&p%m@9+^h4|}RA+KL6ZNBp`Iz97KDwSH8V*qJkr$KrTFYEW#KuO%4 zv}R+LQ8j!7GpeS0{8k|!YBKz657(Yt)H?H~&dQ+4UK`(e5X8aBF#lg4)Wp7hMkd`K zzp&tppKbd&`LeYrWDr|yc8!+duu{9!o|Jp6{<3G$w-b8cf75o`QZ(on=ko%8YC3O& zIEQ*pTYW|4>lMh?x>Q`Ya#I3Wa0isIN4|mHgud^POdoW{2RXC8IhICzebHap`Q3sP zK$H34%>t!|x^)ZxrJsUV!d>HF{2LO%MGUh=_vm2WQ|(8#euBGDagJLBW!G^T@2$7~ zN8rP%Qz_Qd_d$wZQspwy;l`aPc*k@efZW7Pk zmXx3^1IwA^?$?{=bmp(NSWRy0hSytfn;AHB~u-nckibM6O2PUc7G z&vO&CK8zqTVjSo+RYk5YawH`K=aR#K0<&}BX?L;l?zM1}zf)9R{Ue^JW)LEOiy_12 z^HtHd2><<4m*L^xq4YS%um&DV&*e24D1in&ASWt}kZs#(Dc9^3`vAkrXI!>ibH%2L zy&Ii_x%eSyMK~=5K5hy7)KKgYD{MsLyPt(u%)qrBAQBk>kgSsDby{y)F9tZuGEh@) ze#_(mT~?a2|E;x=RO8n$=(Y1Y2Jr1D}_v3$FVQau#! za%dlGV3gF*^|Up6zLB1THlILR{UZ=NtBLn{k>cz7|5(ZcP3FE*QM*}Z{KRG}@Q-Mf~Fz=P-A_7u{Jz4iH|3P8L?Zzo_V4wxQ`|5L51fY#$= zBv3y_!iw8~?B~_+TEJ%Rjvh2+3x+SeNdm}+DoT-c$7&RzZIQ?wPT4MF`th};`wVmY zX$C7Vb|0Kl%`Uh~2ef(2*`hZ67+;si63k~SxaQVzj81ZOkrJLEpTl}3TknqV4nbm^eV`E*GEp~QE>yj7s<;~Qw z>XOx&Tf$|GX`L_-jMs5{HcUbOs1;AYnf;8U)m~<%M>HL3S`qsv3U+;$_AB2EPY>bj z9=vXNdx7?rjK(?ZnyiDWQ#Nd3kZ6NtqRtkLytaHKwA|E@)2R{IWgYX-@#(y)2T;sE ziV&b7-o3a6iP%c0^9oy%sQZo6`O*ATRw;_zzndpAz{r(t5}3aUq*m+q&0l`jxOnRL z?f$Q(Df;gv00V16jcl{ziuV&6!9MnZ5&L!fIOP=0Rpq)`8Tz=>lCzBx0EomTV-uKtC~E+gzt~@ ze0p$YZ&!b+4%Z!oUw12LmG_=ZY4tuU_M)h5b9G{kh=+0W z(PUatrA}pz^3_9$m)6_4vS-UH1|PPpOoL=w9C!&Y?;D6n>ZlBZWoJmhE`)S1Ozhd=Wv=*~J5e5f4iXF#1S0b#!rpB2 zY*wH8R?GUTL*3Ttia538&o`apKMadJ!X|6l#M2Q!jyocI_O`1|F;W6&Y1O@}5;V3v z?ZrRKEv8Wrm2I0KswtanJ^r>r;CRl%yD`$9`B zxEi%Vi`NyVU5*1VT$L%$z}ruZ0Nb};TfV{G+x;lh!c^N1w-IEnC3ULaT&5Rrxbx;F zP?u>N8$ehJ@v9JBlNq2zFH8ZuKOcp6SX~1>S4cbr{i&c_1DiHv{7rR!q-YwYmNXNScLhAFv`o$&Ha|K-mt30u)EFRPY)0HdD6+!R-_=4j<#+gN1 z%kp`vuZeyEvI0EB0Kq{0A&$no>gXcy?tjrTLtI;8L)*p^G$z}kvlfE)8VE}2eZL9> zYgJIi4$);`9!y1&?Qk14(>64VdM8<(ohEp;4vJSZDh_6FdVYQEimY5#7G};JZlL=)HbDEn%^Ja4yIUD$XX*M2Zrt*x7Cy-v~x+>bJ0 zOa$ZU-+E))GkouVBV~P)EZn^OeP8svYr z#x(@>fd}6Mnun=wPIKUNem{LGZFw=Ao$rBFNE=M{O8zwCAnYEM3TNW3)hE-Vq1#c_ z{zO*>uyoqMjFs5(BL{Wnt=Unzf7Cbc^@OO77L6nryg%Y~pS(H$&7*_b=!&deIZNmg z9pd5U{rrO-MqZu9#x)#uR8lOJMf?e40e(m#l8>9O_jwnuz4mkV*>?l26+`R{N<`@l z7L~Gr((BkpJD;i4s~b}Mok#44bnl90Jw2Ii$GxTS zCP}RLM1G-C6FAraCuACrKjiYtDR@0^)ihR=g5~P|1HL!Tt)$k#CuBctR9m5yyFC6X zv|D(%qulUmzq#=vI$#R%$~AS?^rRrBz|=aA_*T!q>hlmK-1Ie^@(o(jOMzn@Y{n)) z;=4dpY?F*3&ZfQ}-G{*}!d(&0d@0GtR7)Q;kYPd0j!@217`B0qv)zg)vwQC`!J9Am zIHj%iiO0$8lfC>C%$1cQrS2N4vS-;l=WNt#dw+yCo5IifW*`CmA+6kL@0M1W#vM4p zkXCEN2%>)M_y%9bdF_5gl?(`-r_ZeQxoz|2YWt{aGN0qm0}io2Z%a-waS)5ogPU$g zz)M7qOGHM@RoD83g}lq`y$8e0!$xyeal`CEX}}{F(+Oxx9GocI`Nq*^MMerJd9UY9 zM94D8h+LAjWD3+O)4xGI7^rdCCkt3EF8^6@=1Xj9qb#{bN5Hh+4996umptBuq2moX zUJ+;_c$GdjWqp2`xE;3HnLnZcWV?TFdQts8B_a)q#=Ta0&9R?K4EjG?`f31YbQ-L7 z-b*;xdLk)!qn5Z&jKnsJkUxeH6a1F_A2W$l%65q&<-+2k_}N)v{Gvl`E5_dLRN%bz zj4^!(_9ta}?QUc_dc2mH?{4huK=sxi+G$yFi1pq)?wfzH1D2Pew%+RW1&iTDN9 z$orK~NFtdkt7TQ- z+^?eX3gM}B4O6%@#o6rJ;`_j&Ocz@;zRp;?L7bv`Uoi82$a%*8K?<>)r6kSOP`g)7 zsCKz*1{H(z(9<%!;@Z4h?celcwoSfmZ|i-@ZvE$qtQs@^2G>iUp9}|I0<@fXkrw%) zDoMNKXFv(NE7_7E_r0S9lieB5N)or^yzaYXfV>8EfAk zhLFGn!1NljBcO7QS>%sO#&$B6DQ&Wfq3NZ1)0` zZ!5vkAA7z@swUA$CEr|Vs_f{7I2i+8ca>e~8Kg4qU-=CB5IJ^<`X4QY=e7M*J%9LF zJ4T2VcDxhcE(+wSZ=ng(4-TO#hF!ga&Gp=`-E&5&MBp>VrLo^8`Bic}F_W<5qvmf$ zMgI7YyUllRl+)BN$zm>fdG1$&FT0Us1j(Haf$ zH&FQUd(61vbGDVb?Jar_sKTqfeGaFA>ZAU*w07ZF(Zyc@rb9$b&2IBFfQ4OWtD^@k zlEC|(I2}@!atek&C8h9bH#bA(@DUCB8Bh9w!yLXVUMcf%Nf6c#VIB#YDQs9s<7s3|h*X3mXG7N%WzBC}a@-w1> zpK+#a{_I-VI!>MFUX@jIdCl;n;%Mo|dsb+29~V^xjI@>d$1IokpY|OHArbqbi#3>e zL51>i;-jA~IUES|Ck%6czlQ6(2RRJYl2(Iy>M!+iW-cW@%>jBe+^G%k{t_KX^J`6s zO+Os%hJp%&MThsnyaq*Q*4H6>MA3X4yYpMXbOSD3lc({dea)b078$VMoNk^M- zd*C;Zl|IDRY^+)v`V%eU;1f<#)OIbOEVEXBCLg)K?to&xek%PCvr^~6J7Ig*GM;;g+?Vw9n(c4}PW zOX6d+vxn_$$K4Am5&zt~%135EYPVkbn;B?^J?ZEYBpazR=IHsBAs}5+R^e7;Ycxj3 zo4!qTcMCP%XJ`Lb?=hO1fs5F}e~Rg`!#Df3*Ai!c!N^;#CD_NToIsDAfVp*;HG2M8 zm*;}MtRkHRO(s12GG8Aef|k@$+9E}H{P*-kAR^>F$HruLN{z!|+Mw4ggr`wr<9K{3 z>GkZLZsaL8sP;T$V+dFuTzF0ka;6<|O$QNS=a=-n zBRk>5PjrFrkMQJToe))IHfwG7q;naTqytEm!_uC@_GBnYthdluZwySbS zA+aoy(8JM#yzA7AR@ zn=lAxPdaLf!zY1xf^;*K@3pGwg><$1mC2&-!#tQ!8j(xzMn8?ftGugj2$5ezTq;Sl zvrPWX_#<$bN)NPchHW+l|0+`aNh{Pm@-!%FBbo}~Qm%VL8lyjhzFl4EV>kPw7?iDT<;W%7&HLD0c5h5xmGd4_Md8MdCoAWK(STe-bacP?sD$4YW@0cUi=D1!~6E5AR8rxWcycLBW_n4=%G5i!m^q;o+>&l zpvg5#(Nw*N6BJWaih0d#0vH&w7}OeTvwncPyKq3sc!(r*qN{8CsWtRaPZZD2A_e6k z(mg8}&!KB7oU+O-F0^GTJhcGd(ol^al%$Sd+{kGqjYij1Uc$`VOCGw}fPv56jwQyv zC5-24D_mKznAPaFQYVR?&n3QU?Xk`&upDQ$Z)5!SrOk0Hk#=QdnbitLd~ zxLI)emH3#|>hiE3??iryyu_hf#uF(&4_t0KPWltw7=P?-@GC~TZ~KG3 zyH*lCXETt*v>JRcS$FQQj@Au4-7yU2JxZhu3(2B{+qYGPj#1_r$4{AA7meRf`QW>!1r zg?F+YYOD-tKhQ5#AR3d4EJLy{6Rwj3)WB=swqKXSq8YMH3du}G)b)>rmEG1ztPE1F zjq>RWRzRjV*!~CnNuOfusURIMsMmjb&TJqc-N;5;<(u~sB8jLwTx~77=DfPPJyfGX zD3`=8-)#NSGa2@)j)%BuL~WPL-A23o@l$n14LsQ%U8YkUOK% zynUyN<1Jg5FCpRD3Z7YXT58zYo6k8068lqX@$1{5X3H|c--)H=A`d)(O@R0+RP9q% z4+m_6K)ibsRSUQHneqVN-M%PNQ~+OIGDOQd113`Rp?u}!kimrSLtvH4b^nn{Sw=OzTX;oT=ADdzqpf#sFpWwc0Pc?7sHzeH}upTd9_# zd(%~Hg^AvBVQdu^`5EQZSJSBWclM+y4sH?a5q&75-@?&;8RicAS<6Z-e!TbUcyFV8_0@#|muunowPJm)XV8%PepAR~ z%4H);wByJ-X*F6jizUZ?RAXhEcMs~#F!TOFH=2|tB;w0_b!qI9mf2qi=VV%2b1SCI zUw6N8b|P`sI|A48+(aN6>fHi`VX6zXFaU(mJx#tb4*mLDid7@Rj`T`NOh&gix-R;% z!|g-odEKX4CedU*2M*o_07aHM>#xriV&EGhvOX3^6Ax@j9pGOM--HMj1klI{i;C0F*;r= z#S;frT(KE&HoIpNR}_~7Z*FvN?}Slt%H!&YGw);IA_+H1F!FwsCmSb49}?Y8qMcIj z3EsW1ap=b{NwBN~c!*cM!SwzzTbmpU$oj{%9Zt5Lhk#Z(YE74>*8k>~CQ@GI zu=ka}`3Q=EcF&#F2ZxQ;Itw*m!8JX>?Y={d!-cRI8{)bzQ39E-do5B714J;vH(PB>svLVh`i@tHeVG-;cZI{6MFpi|Ga7pcNg|F`4L2^ z(|tr|EbexI9Chuls)pkyf>~V9|O(Y^C-C6z5;#QtcRZ_aK`&J zrbxT#%jXFYPjesLNlxrhyI&+p#kogo^MiE`ARqnJ1Q_t7Dpy)km=__^-${`ci#xQu*pDbdte~>QH|PPm9+4i+^kBfN(TiI0or~ zb?{`W8XvnVEwhFG^1&=icp?1kp$%!5xcGF8Y7BaCH}jn?;vIGAdm}G>lE={?XaH50 zB>QT<*|cKvEE9lwF0A(EeM+vR_`;k@|KO@BPW;>vv*$`tgbBNdR$u1&Wl$1k zBp**#wB{G8Q{q>LHG#xOISeDUL_dm;I;8r;eOEa8FAKpUuk-Am{YvkkxxvFzy%$z( zNT--Z%vU-e+GE?yn}(-91Ws3MjmIDwPLFLETIbG+l1vYv)lK8aJ{tVhqX~vmU)P+p zf64~8g3}J!WiL1k|TbdzXGFJdun(Q9Vi_71tP2p^9R*t#P+Y76x$VlK(h;|Ou zFisSg*kMcS$Ei{-@lZ3F?G_DjyQxSfKTO2|ua;_@*ROTg2O1~<06o2F@C__+0;GT?Fo89fGtiUtLXoh`XUKMk^Hs|xVulU+UVMvq zZ2^s|sZ!jxh@?Bt*! z?c%$Y*wb+Y;rEIQ^stvycFgMX;Ai2>!vrLa!A()#XvXZQfzZXMXXsGq?bLRS{CgNc z)c^Y3ev8T8h|^3W-_YbB!!hGj&ne0Rkc}jeq6Bi+wMO@h=z1f6N8ukptTKee1cWEv z>Cc=Rrm)a4k{t$^w9WbG3-(C_z8$Hm;uD$UZi+BzWfjS|6%_YEx*uX~ zS?2H&?25AZs6dpIZx@ogW3_D$CDXg)SN{p)JD0eRsE;E085{orGj)O-DoFut=;@iu!C}S}vY;Ej|~#_leJQ*?D$Zg&9*P#l!vQ zlV}FMmJ1m!VYz5>@ajNJN{6lEYIEG;-!UgWogG`lHQx1gIYi?@ z4{|^9{IoD)KLujTLz3Jm@3wEdxB8`Ay`M|$wDl%6Z&42BE6tGMxEfjCp4@b!2J&dV zQ2ke$6CoQi!&Kk+?EDu0c_}N}TqR1c^SFx8#(E@ip^lqkB{ZROan2s*G`a%qxR5A( zSah5oS!8|6Eg){OIu`hLicXram&*3>^CH+wV1jY@5*`DlC^^w8Xe&|{8|@kX>pl z>QPeH6XLaS8Na>KOobOT8^iLpB9tb|HkC_bnZ`{N*@;0 zGCCx;{!4BXCrOR3$!-3o#+jK81+vg~=}Jz3Rk%yj3co*U2>JQl)IB7nir&C>If*fF zGaZh4oR7lu!qztBF9xGVM*=Tixc*x97B&BmZX8ZB-(R!$=|vY-UX%Ojnkfu-v_mDj=pTlSr$) zi&FYG7VMvaWB9|lI#OHakdfx6eNrDZtbr|@IH>H~V=h{xWk?H`YkSMtpv)eJGQ=kO1B)CJC+g?8#^ z=o9;v4Z`Qm^HLA+OD3RfvNC8%1{?4K_tEFSMFwR^62SYoCaxioIMLzZA^zOnoakyW z;$mR*o~JNUj*TWvh%I!R26*%;&HMH@cpd^LvtOYWMyIV{#XZH2dwY7S6;<>>=4g9v$xAOruEumUa&f|g#rEG#NbI(f z7`O*AiN}lqH=YdCbwW9qC7~|2eZoa8URr~$T4&{Nsv#HD;K_AW*u?MQn8hSRyHeAT z+>QFj_)(;SMn{`w1RMh?gc1cXES#xO!Yg1|ub{++#j3*U3ib(cNdp^<>H}i8q?j^! z+u8uEAa8JSC6T#)i5}Vy#iY>Vdh?~%WTttXPo8GA55x=8|F>O0#gB+cX`e4d%N9B9 zZ$aD9lp&`52uFMa^7KIK)akgz1fvC}uoDWCgB{+ygBW_Pj#h=IWqSv>|SvKF~&5pf<3!*zjNJjI@{ylNLoLTUb z>Fk4J?x=)Sc~7Ha3XGoE_Zm%hADjF-dtwQw+;TEu_bp~(c?3$ya&YiNwL#bQE|MsN zQekaG5ct0xd}KUjcOL(qMPU?V=)O|@2+Ya6E(61_5eYx-NkJ7vD)FYdE@96M+U5l1 zTKt~3(DEZM398AaHV=g#3fR7ld!_$XNXdrFh6F8M;`zL(?>g;jL%ME_Re}*{v(anx z#4F?pLbkyji#{QOxNz6c)$wJi-pIgRQ$B0-*B$qCr&^cTV99_bZ zjuBg`$b5E*)5q-HI>kb9j0@~s`PM}yhfOKxpliQv5htJ(Ykytqh>9FCq%FAt`?JTO z*r}5GAqU;)uuF%#i5?snh4?|fB^VY`6aT{hBgdE`@>mOiiuCuXo!DL>xq>YL<9kD+ zZr5!9gR+}XNlSQCZN!-#a0q)4Y)s*OsoQ_*ZS!_qv6Gg>1_|uy8uKQqtHdfY0L;pA ztS|0b*|vtAOx#Df{$RNjXuim(X0M6c=-E^EB@((Qy6_e6WT1y@(fteSDbgB6e_D5b z@K5D@_Awre7ILg5Mm6`y7EFp_J0Vryf8S~mq@kp<$Kl_4gepf!YJewi$<=G$+~`Y; zTy4>L^4uza$L(OP9voJ}RBy+i!=HbAmLh*?YOC$gb8cf%;r2?p*F^mPz~SS6+SZB! z(ePzO?iZu5<@44IS`WZyOBL%*&2Yv|d{_zz)q0hx^rNMkC!nUiufFvm$KFEnYpYS9P%wA7OhA`oPf>>GP~lP0}d**Y3r&G)Az$D%z~uoEP(ea$ki+f32|;e^-wz;~X^1 zj3cR5N8mR#xN?wydki;EYecf%t487??OB76x9K2=@3=6xOM52Pz$eL+VhEF6125P+ z_r9^fuMb>0G~T*r6=g6wwAq8mmi5b^52~PT?lZge^3h!}@fU*qOousT=hUzbVB@PN zsd&>tzGa*x#WH^#KZzjFmK3oOMP%);?6m8lRx-0qL_Gqf`~a_ITc-c+WrxL^*=pi7 zJO|P$boVpL)FmPrTqOIz8=JY}?%Sf@h6I4--@F|$ja!?m`mS^e2IaK8tFD_>Qvj)(u61o;d1-GGvaf?v5?Mph`XpcjzVbJ)m%dBM3Gdk|!BS zN`s38M-iWPsd1-*6Q@z9|M>rgl7D~F>cI;+v|R!O4)UN4+T|=7ocSpLSV%4B&CRXA zfjp#V);OKjI;)+ui*f+xPrZ!XmNW)`=Z^266kI2yQL#-iD8&i;HEz)h``VWbm7-E? zE^fRUK6~W3Yw;&S;&)jq?kyLNopj2OyU+)r&s3Wz4AZCz;E2xsVE|pGt9AF%t{}ik z~Np`YBn-IEGMt3B9wwjR5EiNGgID+!<)UiQWl zE=YooGawxxN#vcb#j-v~Q@9y;F|8&lLK5O}K@34wKSRN4XAbo%;2T4lkLh_^_Bh_I zp3pSWHalpRaOlan`S-(n(IwmFKQZSn6|~1g_Xv|Z^J(z?k8Lk`$u*A?8sp=U9&*>M ze2eW#k9a4T(6bn8bcLT7S(OrCO4EjR?T3!>DO+T<(B#wzLtU5+!#q2J%ydG{t>!KS zq!L@C$nrFy0)OzSLx*Dy+7|1z06MOL&p4-gIDPLY*`Q<0H5GMw) z)iFWu#2!6@)H(@*UeG_4v3I{doSUYsj(L>WxF3G7m~->kdg-KLKYYI`4%JOGeZXXOPYsqm!>e8qjG*|Cmucazu zbCeP|U4wGf*0%4BpOm>$?D`>-yZ1ZARd?>E7o6_V`3|D5`4g95Wbf5sDMV)Jx=gp^ zt9;=j`W@4n_4CxXA6%TowTqBJ{l^ea znq~3*#FO?zMp`r5^!$v_&^x#<11==$9h5 zB$ZJ1@TjmmUMrg*oE`syY1N{FSf_^`z)?^Y$*Fh4Lm4E?RJSbPQ8i839v zfo7hxRuj9x^gdp@#9tfQE9N+jYJuZlyrF7P34T8xRdeAxHJ&Rt=IbEp>JFBS6eeXD zW*G2gF4&^Z^#1gNPs_8m)AiyXWuHwh%Gls6JX^6M$&X5Jx+7%%hE`QkSvYZZSbu-m zWF@i*rS^E;G5yf-msN3$K|L{J#kn-)eCEuiw0&5-Z(%|2a`4^15qJGthN5H4$;w{F ztTDm@XU^@HUfxKp(3VZlj<6pB+#$ztYp!@iK!-Y%>hh?~lVv>v&gN6Kg7yWCg6No)r;!$d zu=jTQB=#@VftEG^C4K2SHmYr(m~j_0`gb!pK#53Mcan595hEHpTc&^KrZC=|22Il*A(R&6XvT1?Zp|x6tVXVhTOJMkDd< zyU!{H95CtJ%#~efS@x#Z3|sW}L?Z_*-QdTqLE}fRto4)hz>W*Xyit_XqdAC;?aj0g z%=C=AG1L9g5%k7r#hzv+}h1Fwx+^pH}@cverBAOEU-Yn+f$dwx#2TD3Kiu@fNv~&sC5gUR1v%jk{F?%_h;gR~A5@ zy$R4WxwYt#4j4>bdn@6nGMfX(H5nT24l10{g!glQ-&|Li3Hk#Qq*$}iIL}1?yK&?;XKdEqaA*#C1JBQ=@$AO2*P+; zs|uB;C!X(==`)MX_~M*5>0jnX9Iby72_3ZSyI{p0J{y(KNNNh`ZIT&EPT3l8$j;6l zG_t?K@kR`3(|SlE?LNeu1E<(vG%&`#xyeRsA~(I0eW4psK~KJi)bDaWplL?$~2ToiW;MR>>s z-KhZEe3Cp#<9Gg58TrvNYheC)k`C;JZNci^Xw2v=oFsAO?X90G^ogBdf{5Xy|2}xf zF)%`H;F|)7y?3 zOxg-va}%9h60%hw03c5uw{$|QF5`~+z1p`xaINRRt9Md~$~-_a53Ttdo(}mI?wkN3 zlo0z2MRiDf*7vnS&=$RC-a~H2Npsx-%FEe?-q&BDZLOu=XClsRFsro)5NW_eyK(hc7C)NJf?{C$QX&rI?iA)*XTg8nxIh(t?8NPW1S_hFPpY&viiNQ%+ zgPYHPme0xK;*6L|7ymwaLL@0b67RiAd68HNK|fyC+`~V>F9ve)N&zmWu6#NjR;%D< z6i|dPFek=ZSIqweTs3QnQmi3WHU=^Y2otuz!ou11^)B=ic<|=@i^(v>{}>fyFMfjhy86z0_w|3U!ITj(E+l`C?l1Zq<+_A_ zC6-tHi3a7dW$PK6JZ(MLs#n6U+*4J*IO1dJctQv6wv$Q$hO;8|(HpzF(Fd17#+q5) z1!6rRB0_-tBkmj)Gltk?X^t*46@45K5cuH~{o3hHz>K9Hd%l`r-rq>!`Ol!isvx~y z_(l7;_9mxPGSwJ7&nu~SMkp4Bety7d_-rc~;Af&mdqE;p4(YqRzjhk!HmjVSJO#pc zpFVs}W%0oE)SagDqQ_>T_S``P|JDe}yYKc z?oidw!)p<25S8)EUboQutPnezl2bIGLL2IS3#lRl3KJ{9boBgZ`=F6j{49lhQe;9vl#rd!8fhOwS6APIl4PFxiE%lRe=dEGQK;QYZGnY}z z+BTC9^8}kK`Rh>}{Y+D>mYx2vx`%lWk0K{>g8tDcpFe=SskIEIwaL{wF(HXB#TFcE z3p~D3O;;xzpeQEsWvHCB=U#aX>awM1itNQ?Ki)&pXA4Hp?k9wrl92))3|SrQcz0E@ zs$r~*Uj}Sw9IYgZ`<dH7jpo@F@Gk7vK18-;)f!*Q#bD_k!Qp6$evzQb$keE z`E z&jA-9Z6#voZAH5+9bQaXPpldXpHp3)n&clnhQ1`1UH-|LN-8=64SvHhV~m^7V&kz& znj}r-Fh+Fvl|U4M==u=<|5ZLMLu4dzr2%oOJyDkpM@Ihj)8(F~lh{>-B#xF+8(<2e zHf~oE8%T-CNq|NdcovsoT}c7Wxqw3kyeCL#ZSNiF!;9oovbQoM7LD}vo`VDzgV8?#WhTR@a}Wi{S!rvqv3XCV1R?P9P@elJf9pgaDXCWT%4U)bP$!k_m zcsUOeQrH~lL(&P|uWC+c-GWk~6w+}96R69dLR$qy%cwS)Jyh|VIkfG^R;giXWA*LSS{-dy;`4)BuUDQDDor-xg%gPShg+ckrL6cybHr zM|t`o8xOLGnWB(IYOk~b1Dn}m5V?ze0_SO(!Su0}3B43(g$ZSOq4w4rOqj7MQhiBg zCJd=&hy_;odQ-3C4I%Hk7$CsAr6XiSRAKU$|8l)wzBR9$=f|&#n|+jraUsZJ(Az)T z=zZ=rD}^03n2)&%FEtqV&PCGN=R7j?;B24t2R>j-c{Oe(<~+yG4nwY<4n37GXfrQ) znuqm}4g$6aS^IRvdWq$t{)B^-1 z0QUzR^YFSQ_{U6#rN$c!&D zij0!3 zX!Ju2S=t*|bO`CNu)lrF)d3@|_4)oJ3+tN3mX9(}R}!DoOXsnBW(0JWD(4t-<$EKSN)FFQqAnH#+{6!Rf$y8$1< z0}}JM>}eArLFGf*KCZc&BthqfP&w~9gD`OJ_PMh%B$|!ics(H0IWmMh1~jm9`^ozP zP2x;`%%Zi&PJ@eY`r@Av#3WZWjo}^XZmAHNC*&M=6}$!x^{e_ivi`cv?MJRbnl2n9 z;sZvPQ8g9E(X;2(KDI;^hw75W=Rk)KpGXSc)vP_|GyPdM)je94W?*N?K1xtp$92zD z+hTHCo|Q|H!xRP&-v>vNArumQvkgq~HG0wyXX!zcFz;A%;SJXCc9fe|F6k!QZj-F> z=Ii`p8qi0EZsuB$(N)@^E5Hstc&|bk`TfE+;qI$Wd|-jv%uK2K2ixtPZH=pqc+gKB zSFmz@h$AA@0mPp!SOkHi+{;Er!21!6B9S*hH0_0%Uf&)Rr=}y3#QF1(U8_GGDGyM{ zwx#*_VroeL)+3Ls)OYuEk$bQN93}p)uq)uguPjkcJzkK!P#wn z)5kT>mALe7?KY94*Q1@|NKgAHCC#VVfj|zE1!Xk!$}*Jg?dlKLTO^rqoHHtGX=Pr= z+yWm@!cg+R0aytVwSsPztP|ISFgR_dx8cT+s~^`Qjq&PZ`2*t$dfAc~al`jVPQEI6 zqco0RL*7k30BIJ`_g|9sU&P1-$gw_x(YyAmyVXDGcLTaA*L>BYeU|%wYH|vE;lW%g z9~8_$-nk8#`weYuT2dhmV0LFF5TZ1e5bv~gs5N~z{?2i38q{3oIlvj+MW_rKvAC90 ztZpxs5iuX<8p6>0PU&j<@b8;e-7kOL{GA{zK5{Mn#g|ghCqY~jN9=W~sM_})f6S_9 zwBKG3i9Vk{RJZN0589Q_KwZXS5uFWxs&i8T*KWj}+%}`D{-n9_SAxSXn232h_EV~RX}x;YZ{y7g0h6@}a%HQ2V$j!}!LU?T z&WmLZ*6y0S)DrNg?7Wy%TFVk2BJ#i2*Q;T8$0`@yN{xES&PRRO_G69yJ0I z@QICAlNnVO2s9S^k_itkAbRO@8L{nwmLOS?bNIpMh!q0{TG5D_|8i7F_Xb)`;@KiD zAt-vG{DX@h340cP&^=q-LMbKsY&Hwt_(T<{o&(8^L8xx@+hsPRWT>B7A7n1jC(eJ1?>SOPt`@t1H0^(k^WbVp zS6(nJZ0sVMBuET-u32sl{oL?n<3;G7HHtXqOInb`c}kcvVd>fX2_^@Um$W12L13}* zmGimTLEY!4G2>6Z4(;mKDNTg>5dtDc?~ffvx?A8yUui~Mh3wAMeCG9~e-~GJr)ue` z^wY{ONTr+q`Fl#(2sdt>KeRi}*Z#f#w-#pH7Pw7UYHoZ#DofD(6U4Fb_RFh_2^n0% zwsmnF9(CuxVWr1ffBg_n+1ZQf487*{nm8z+oBBRX_v9ApI4* z4395J`R7UO`iRyFc7DiBI9CVzuFFjh|11kTYv%zqQjN$GWd(`5!ko<@fh%T`43 z#+A7joka(t3R?=kB43yEEp6H3Emr#ob@rv`Jg!nJ~C?K@X!kt_|G3&fS`n(!Ssu z?ym*%k&BiP7}&Bkdd+Qk)(+dCUnG3chJ<#5tFIO8%6C7Y!LG@1-sobBo`yp)%s|cG zp_OR722v8VL)q?B&BaTbs3?A31fJ`B=m`rk)L1(c*y&j%=_^2Xs}aypGLZDwp~yJX zpRo)1@dUktYA6-h{{prG|Ff@eheZrhq>aeBdWyma$ zYiEqiL-;`RfglITk)!kX_(@MX_vTw@G?Mk5(l}f2q$ir~B`I_v7Lu&GbF3(ZL8MkO z%EvM`y_Dm@eb2iln(@INO%c^P7F&x^-yD)6AW?piDz@U+?9uJo)_5k(F*O#8{FcAq z%5k?q(l|5J*k_rQnQLzX_GbztW}LKPkM5}lHiR%Hd{lrjH1B}Mg@W6$Am!N!USzfAB!TYy^3UI})z~zd*<$65 zn%^Z7;fP=FedOtBjO~=aOJ7JXv&kI;BnyJbbe^-dt5U3CB@$Jlna-$ ziu=qXTTu+(Eak%S)d*a@2BmEdyX9p+(#W;TrcwkD34YfLRJZ^3a475Q#N8XT5)@08 z>#naNrt-6f_be0kCx;LNh5M9_#i7;v%#q=rbyKaLVQ@}Nd+}%fX$ldcL^1e*I z%O7VzU}w_;Eu-cQep$6zc$vB1y=0P@VNuL&71e7K$@p~m`ySnzBM9^4$3|?kfT(lU z>%E&4b1(w;uGPl7hq~fg7|Kolr^1*M?q)bi@mtUJPSPSin2N^Jz)li4e$M@lI4RD%m-$)a{)0YTf(zOTaSkG&Z~ z=}t{P3WGk9B~p>28L035yQaE3K zXy_OgT-Eq@bB0!ypFQ6$W2U|3J@gCHrf$^OWqm%vbjZl^APWrl-Pp%*abcauEs2A@ zq}-1afh{Y!;8W}(;MY1@E|80mDkk-?{f_>E5mt!jIRpilk;tDkLy@l3dY>+Q6wBG7 zpK?rsEzG}YPSO)S@)}3JgO*jRZ#v$Iz_g=e3khJ5`m9i}Ujfy3oql29tEePsCArQ; zN_WT2QTgr{;3@3~DE$L4Qhe|6-u|<P)lv7MRbwwt6U z5eO}W!# zU1y*cz>`7}rWC~2_y)6EyNBJPZxp?9>OT#jTL>Llj-GB3OMbUFEviC>C!|S<) zLEqAW^5^7N*U=Yfs)E%h8mja5Qd%}8QHkSO*`~yuEYkkLtpVVroL_|n^Gx)Jy%sK( zhZ$0uv7EKJqd&#|QTt0-0B;n>-kX0)%5;Vz-yq?D;(ux-J9VVw!{OQC$DdLdjXE;E z7kTgbhxV75(2HdvuN{1dixdGA1(GH-lE_JVWoOXeCd87`5HH>Lg=cNyCFzSW*+O3{ zWFpeOD~ww@*Sfv!hej`p{*M=IOXg{>`2J1C;m*A%fth>_Ym}{whPenFQ4wyNH<$(W zwv78?{#L;vl49x6&8V88WrI!WBOn-;=w)|Rkw-DUMI-0`y@tTeDMn?q_(0^fRd~8s z+*|jcUIc@&tBK*|{aYl28X!GlKxFPrXuTIOh#(2@{{5=2)~s+h*`UKKp3alw++D|}?#(O3rlr2HSoH_haLEw%2bbx7^Su-2`f(7373ylbyh z$HxT!aP09#M`p<1dn7U#Yu=rNmnoEAz)Mgei-Ko*b`j-ZWViN%+-ENve%OOg1wm=* z*oGZVv)AJH3&Jp=BFUULl)kc8HoDzI%2AS@7o>@BWhEuhTDEj_BbtGOmVW=7Nfn$+ z9EX-R-t&TDUT+S5)GxMq68FFdR<;@QRtqELD?0_Mzh`&*(<&%({3GcLj%d#Njv8@CRfkjJl6+7m&nkQ}9*s$97E7z)^Y@ zSuQsuTVXK|i`6Z05z158)Wgkd`VGgc?)~JxT(%5!3pd^TfIr{roc1I>8GSjzd77pz zuJZbB#juMlibMS;%a+iy1=Uf0-iMz>;^>@LLNxTL+HfO>r?J(ITo)?DpK8nI#Y-)? z)*pZOIlmpOI8+}RHrrIG8peM$mg`~X!6-%7aFE*6u`(?O4JNoHkGeuF|Ab%TB(cii z+dBhd;K=u>oOs3K`Tidg$ zUy?xa-y67c1WV&M-M6Ev>!JxrF?&o; z9rdc+*@fg@$PC&RXW&a9%a9>M;X3c?KXpf+$de3GBS-cBRYV~ZG>`8Eekg{;9NwN< zU7A1KYI&fsyZXS0T?D(=NZp-c_2x}ect{k*T+x}q&G4KD>g(r2{ozQ>ZeO9$r9(Zw z@;5C_6gD1)h{FvfMMYDrtkuFU7$K_e!8$g(=1DJ8__Lh?aQ=TC`G{ne(?VBX@_J(r?tYHCZ1kJQL$>4lW>%`)Rx} zlDW~5hW0lZYJ?dOk_Dfafbkuc!CdzvrEbyy3D}7_@T+rMYa}CS!+eMD!nU(Gryv?7 z;I_I%{29VpM?woxfLu!0sP`S@&N=&sphkq3+w4?o2ZLKd1omlVZ0kc&ylhy-TfQ9C zlfK-zbK8f2XZG)4?Pk_M!6Kz4ac;ACB3Ta3~ZGz&E>EZO1>CQ(4jUraU8 zocgcntT8gGaUP|TB_5|=EPw@Wu*?~P)aW-R<{*oYuRCr3*O=T6S0?fLXh`9F`TZK# zW{5>xfns@uGuEF+$R$HhZNgQ zA#R`02pP2qk#lXUuLMk)Y(;jU5#C2;>&5BzW0U7q!?Vk%S%Ctg@##ba5DYLU#iPX3iME6_xridY?C4v@jK`eKbuoQ4 z?Q;q)sXn0EyVQB#{!<=JQJ}y}k5U*@;tS_(6P|86%&uR0@j%RO_MJ661?k`^CP&LKE)5=+Jhdbqs(-W8IxL-vC(h^8zU z^-)5T5Hm*2Z+y~(o(43qA&3D$+&Aa^ zmIQSX>Vx3#GFfzR9iSM+(C#1fgn6~N=n@AkK5e{C+)$@I|GhnLenoVZ2sd8*Kqh@; zR(6X|8cA6GJ(SAp%S+Z4dXZ=P?JUSWr#C|Ia=NK_c4`Cm`jAckOU^ZbIodr6fn|NP z>W27Jd#n=$U3G!4e!2EAP8J0+|zcjj=2DBE8H@8tB{nlmES-^D{jC zn@#+ycy?y1Db;&Tf;e+Nv1!Z+)D+5@7Y(hU?%dV~X_N{Uz1>DPevF6+1VDRZaZ3x} zh1>I;HUeVaI?M0k-a)m4)7lvY7RXRxu;i`XgFvJGwDcv;fbfFY&$2(y;_hsc?f<;P zI&7Y3p@$9$d6DbiH=Bbgy}d;m<#uZH{gk%tM!Hg1(t(iwm?B~u#Y5sBQ>SA65cJAT zE!}pLP#k~9Dk;mQKU@nWbdqDNur1Q404PV*{*$zFv3R9etU2@48BXfknQaG@#Vvc9 zd#{|4mu(<;Um6mWgtJj)7+ehPuM41aK_M)fN|mAB=D6y#!^Vp<-O20ej- zUUK2e<6O7?YCiIIjk^C|c6eX2J&n3Re*APQJogtH+8Ld^!$hqrZpHu27?Kmv;c0~b z8D}kqSv7i1D)pxYt!dl#(>Ky6fF)@*<8U25)b_*wTHVzpJ)wRW%2HO)241WS&z{l#vs`ct| z(mH(gH5OfYN^qN)@158VnMz3xqdqJwP6x54#Mi24|DCN$vV>-b>wqmqbSXzgl^FKL zkOKI$*H19f^k)mV-HaJrN@=Fq(=r$E=0cilbXRj06t>CC_M3(wYLqC*WjFtBu94|S z7#)=k6pc{uf2SQ5%^TSt*~Y*>j%>ai`*%Rf=aoLWtyM|Ol3r;zV0)9_+weuD3(Ub=Yr1$>ql;^J1)4G?vo6|Md32TD+ivgQC1u`n zwO#s@pVz)&m&a4e_Vrzux;r}`UMNMW6EB`T7s)O$w3Lg=&ynK*ChLKv$dg>sw=;Vw zwLYEn4iCp0bbRr6ef11DYV$7VrmNC-!c0}T%Au@(jwXRgO=Xu|G)&8C>5^fbU}wANcU!v_~=;8Ox7h(|4+erduefSCe)3 zmr}WQXaGOc(KLx+)UNzIJQ6nbtt5NUUgTfs>482-Ec}Jin<23DBs_@}rkLKJtVRUf zK0OQo5vzwr?1hy|3#mNpO+zT&CFE{$X0y-Vd*p3UKu!=BVjhmS-HOz3tlp zAuv)VT65B~4yBZEhAuO}P%l2bl=wN!HCc?tkI()X_2a&N1Mq^({7dMu9{EI5pFH}5xAPYgw8>jNKIq&Vlo03=|SVUe>Pnl4JMTB zuss?(fE1b%vmA@+G}5)N-%c9vk+qVxpd*bTUaLM-kw$`S(-+}qsRo|{=qqomW^L`n zl7#f#J2%-0ccpT6Dw`To+dgsZ#0d=#7o*t|G=%Yz|ks|z^ zbp(bnq2LDOyYJAn$AMK*4Vt-Npkv1b#{hZ-XbQ#czH8%q(^#@Jf4qd!#6V6ptjH35 zs&DGu(tf8Y1iEXHK+n$ea9G^aXci7p!bk8z)H<4e5Eamctj&j#)hi`3=2i%W$r|7r zHqE#`cl6pI7VP8EJ(I-QGc1It+kR<#E4-*$ZQ-3rDd0Y>;t(;4Deq{_cEiHK%izAoS zrQ5H_N7F>VWzHPb901WDd>$LT|E3Ngy$?QNGXa`1&)RM#p%L?{p%Cg~rcMwc)h0nh z1uEKZCd5Hi+O^CwOtKq6(-=U==O@!tE*8nU$(yhAkW%E0{}`{mw(}W$E=)rv^Xb!n zk+(<>>!GB$!s&?(UTAJDZ`>pcm_sIbJ(&WGw+%%`$|CP69HGvv&@V-ys#U z3s({+#v)c0500)4Kf6p}jI^FSU%>|kb~pE}1& zb-PAiEcF!-ztpuw8l#1$kmu@v68{`1_{$75UPyp8W{FOw1l<`LEFUZLeLs2}qW^TOu4_r{4}^ZSbBBZh9%_W8o4VLBrv(S!(;V1aUY9StClqrM8+@!KpWx&tk=ynxa=_TBQX2|T z*e4?PxyY55r_%_xwVceH()gBTN8#O0hk>Yms)pCkR&Mdg4s3H!<1^M@wVS*2YWFL< zDbFuu)^Zxrzhgnw(bKswWEs%lMNulx1-r{=R8^WC003iCdno;|k90FZU1Z>|T^k&Muu84DKPOfxH8An(jh<|zKp zZc6RT6V)=pwa}v|>d1}*>aThJqp8D;6OT_>m_xJ|Y3TN_7jsP8s?nc!&R?QetxG*$ z0ldtiqukG$Iz=$yQLeJre6LZe-xO$iUZ871`Q4KqPcbOECfgxSN0BCU`N4q8V`%Cl zS+qc#W**&UY$q76PCl2=$Sw)-f#PPNw#Lfe6B6fc^W8Y-JSk?oD!BHX5tP1iS#5W5 z!gibBb2T0Ox5NYM))e|y+q-{yF@c_FAR53Oc5U1?ihk;P@x~ZVS|O^!GV97CEXvPh zkw+w4W)Yl0wniDP3-)L?=y(6}%-Kl5UTIf?YS6(m824yga`Jr}>>}@8B_}Bmb>&Pt zL@SdDZ>-3_3T`Ty%V=E-FqG;dcp<{QA81aqHjrdtq2&DPe4V6LP84D-T*UjlsIXw< z=!2A4N|_&x?igv7R-SI3O{ZA&o|Ie#yF(Rn-P8abB!oH&9`OSwSbMl&(*cM zH$aXm(z(NcQtjUfGeug%eNVoq+0;Y;{+mjd~|(2;judiO)_-Uc=3 zv8XRzMU_TocM4|mZ#l}H4w}a#UJ@uQk;0RAgFFl#I__8K*8GRHTL7O$#r4zh`kH0r z47K@1K{x4x)}g@XT}%LEt^UA#5rsl5NS9Z@K}c2Pn34iN9M*qBt-KGxlD045k+2BE zY-`-;o+NK{z#JvkNXi0(HF{O-Akv=n^uvW04%NO{MGtycL9kZAm%miqm?S4q#bQAA zzjm*S9kk2%nqK9p?~F{>aAt_!hI%R_?ceTXKpH^ww9GghK)EjFIpU;vpc%)A#SCqC zg)I>wS{F$N;qPT)sjB&F?c00)lQsUyO?u`7%D5@Ag?T1akOb6|uq&-)cnYa4*+Wun zH)iUAx>Kq0g%gYY85nF;@fx=Dl}7(5d%wC1qP}U*cFEiwyR-)*9c{EFY%v%TaATu| zI3XNqu|eKeElE&Y)OBjM(?Om)KW{N^NlO~!7VwSMojwW&zwrQLlGvg~T7xVhXOGDH z;JM9?pkp264b+X_GvJ{%WK*Dh(LosN;>SK|S$^sFE$a3!AnpUQxFEpQHL)_B~NRC-^yFnj7C&I zyPbb%IzlWw21GM}OI=cAY^~}iLH+`7VLP|LGlyT7i&tRG@DhaI$w}5hW(;GM*=>^d zYqET>p-8HYqQD9t^HAcrf5d@OX>j}H8Ll2n?pH^ab|-(ut9%KSZa47j)=M9O^SoJH zi45t})TfyI^kP6Vv11~e!<}-Um5R5OEnKS2iBGb9qLwXYgUl`YeDK=HtSnG=Sh7m= zN&9wq&zUJqp_~NL|GF7T`sdi1G3PkA4jvHJvq{oW>qSY1BAW4eVxC1VzVI7k-k`n% z!0Nf~TWB_ghB5dvNETj(M%=ht>o9#{5kkXK8A;>DCqKC;J?6Wn&J2!>Po>Ix#r&Aj z62#}vU=giM>&G9t&G0bykN-8WB&$T{4$J`bz%8jR#zrzjV<#wVgfxH#$sQ%PcU&=` zNkFM?@+ls%P$@yV?ejV#{0;gFV?#?kw~o!%`pK*dQ}n{K5W9GnwsJVi%zNs5wFZVV zPcg#dtAo)GE7N;3K_u+glOD|qKAiYf|_54=7sj2VUNldeJ!k$zEJ~I=r2=ASpcs!R29QP;l$=epqL$6wb;K_b0!~HUV4!@Ew7Yk>F8k%5rcmTr6pw*JYXFa~P-hYh zLyTw^UFH*3GgC!Y-CId@k{Kd9&XTW~>@>KA9m$6w9|}&rmF;A~x|Z5e?Wl#QY7vrN zBtcI#L5*SKB&WJjYsX^!qoN`8eiT>siE&5o~Jd|tk=pn`wy04r5r0p z$siyra4En+D@M*l$>Bf%F;i1srxLKQe4%^K{`(L4=ajN%4ZjNld=7U5PMXwQR7|V0 zk5%p2G)=~B}@7yIwk|`V!!4fD;AGIQ#tav*q6H70Tj8hWMAa(Sl><|(4Y3*XD8RAH(=wr zTe@4ukx241CQ@Xt7M7N-+`bSO7AyJ1=LaIz48`G)gq>O@8~%HHWjLDpnEu(a!^Sh5 zgLLtiMpqok!_>cXg`I7?V^hAtwx&btU9IsEwiK)oFMr6k?{ltgI7GlMS37V2R2wn( zR_rKxg>|Za&-6v{R43OW%`52osCk!+-Dco%4Y30;z(Q~Gjd0(*xMWoks-Bn9&O&HT<&C3bB@%E&C2 zXw-YrEsdYY+>?8iO{T5ERuhAa!9>h%i^U5oo_& zR5KNG}*A}=Nb*nvRA=7CXM7T-- zg4_RmS;Z}0);~%jqi@MiNBDVD7+qr3@v}O}r8?l0EN?NEL^qwhiC|~8AXi?ua-5uG zQq?J^-Y(pe_7(Jf%6Td;Aws}hvyboS21(N^OUaJckp0p1oF)?s+r@AIoTr<=xN_h0 zXl>_Ki9#NTIX)2=#(bCEGmq@~C_>PR=22pP13(B`plxH;yE?3Y)6acOsEQLxKFxq9 zDaF2%fX#J#zKpo%AR9^9t5qrhU-|Rmi;136J4s@?P4#XV3jNMK1zISGKH8D-KRjWY z`6t4B;bXk~-Mfu}XGMoYG0b>2SNh$*&5^yMNir){aIO8OxEtGNd8S%sP4=CQoKFuX zjwYAPkuvXB^ztfGbmkNiZe%=?5rq>&mY!egq7fHR`;h!LdmD6-_Q`;#QmCz z1sRFD0L`A-LA&vc4T=E#=>0_}pLNeDmGU_sns#}7PR@pK`L0EV@7G90rmR!#Eagp%W0;yHrQm0|>Qw)({{g<@@^ikF!{k zVzqy0ToCUJ-XwFoa!2%CeOh6M%w8BkFt=r8BWbaWAfrFJBDZwKJ&Z^<-4{++8ubR? zC#b3=L%>#gO3b&$3#4ar@LuHa59t&sUy(CDLw}ro6%?S<%LNUvx+6uq z3IdL#bsIStD^5H#WrTB_|Cq*nu6(r~K3nK~?$PQgy|#KBvlV4)^~!tt^5<@ggkVQDH0Hj- zfXtf|?1`05I;YKWf9VHoEM^ZVR1!Ejc)=Z`-TMz)>N|*#4{g8nG4pFY!iwLM%eVv} z&`Qz~ra0zY9suw8qCS-$yT_xQPwZ~_c4^`=={f!|{IWmVFW#BYxUi#)qV?|(V&E}n z_b)A9YrFnHWJwes5kY%BYGU&_k&P4yU;g`oLjv4NvAwJyK7cMQ30YCb_;TN|pu_&) zSMmi~-aVAosTP+^?NRMrwttWhSR`SIUsL-*Q-QZoIl{iuw{y74@`2?Y2O3Xs%?(9t zcxgKYid{!@eA;fg$u_faL&5RBeFuA405_2hOHPc0(OYj+$IBcBUui5otqVr`8P_VJ zA8N9wdZW+Ki+vDwWW8dv!doZZh@1lnOv5*T?jGoFK{^{TQl~TVN1gJBhRkc&wgj`F zmEvxYjfvEHwHQhVzr+K4_ilQRTU==ab|C1^%SYsHMMeh1QuwaSP4wdTVzZcA83GAY z>=Z_uhCN_fi2OuebVw~VO(my3?Tt)s8}xU|wO*uR%igu&oFn$X&w=F_5)r}fP^A)z zx%G46UD@!{W$BFQFPlCZt`SH%B|i3vE^Z)OkVjNkkWRhI=ZYwvoERlgI@%bnXDdkSD40$cP64B(Ja6D-{7Kv4_ZbIf!l%P;Ub&w z)pNC1rt)Hzp0aFOjWzUP?f4`sxUjeeKz)c2k!GMl?CuqOg4rzF5UuRh_jt0vi0Z+ zNBt`jp4e$;WB8uREEMPI4oUq)0%1yI*jz&3R^ZAO?*P;yFVk zYOy{F(V1W(xpGA@4(`ReuIqV9jRW}^MQ9|j7HN)I_CfYV2)X${bE$7oP-O%c0jwlD z3_;xHqSZW8O0*v#*VGQ%eW8RNFH$GwKd8Ts)40nPo)e7gwackA^t>`VQOXViIx4x@ za1E+vCG#G>t>u1RI+_~?GStZAdBlsHc;iu$W+v0T5bW?v88i^9sk^6}RwHs+Di|RJ zZWy#n(u#07Ve~x~jo0;2ih1>wFPvw!@+{{1*m32ixeJELhQo&U!uTweiHqvIa0}Yv zi_?-3XyGTU=2B+kWBIk_cr;owsX>db%WhRBaaDk9x~z=#5AjM7S^JhDBa2;dm%UXW zwmAu{ml!fq#m_fzi)!40K&Fm`WVve9C z*6g#tm+CMB2!eRk*1 zT>XUT1?Z^-7AOJ=EO2@^GZrJ*No=_151KZQ)n5!9 zhVD-I1f7j6cj~Q2(IHkQEw+)>J$C4$(Exfi^P+jm<}F_2ZTij|{Qk!|3k?R5WaN*X z8902!ilp%7Ig)E!(R=Js8Xy^Pn&JzO^Ebdr_q4JH5e{*!;=zn;uz$3T`TekmEWYrh z+B4eN?zUlBOz>^nmlOG&9L(yT7%a&wAH5Z_}lDuQ-E3Q;I?;7RlYeHqTM^riB#sva__G^BYE!l{bK& zC_8c5Dl(gY=zkV81%MrI&C!E=+7q6Q&8mt?g5uho?^@_OCV(dB30FO46Rdt-Sb^Ge{kL;gql19w0-`a!{A}# z1xK8h=3SuZyJe>u+JaLsv)@@65Xbnl$T3J9FORsJ0hz{ulR$0UM^CghdYD$vU@Sr~ zT6?9%frbY)_?mkUdrl*OT^fd4Tvz(_t~bNaRtN*49g3hvlOf+Vzz|>AQRxfRzz?q= zbZWnn#eIav`Kw1ohz=tYW%eSU9|}E%v{u(qFuYuSxFrc%eE0vq`d6+&*oZPbl1-C~ zuKEHkF^s#CFMaEdF0QU#GWT<&pHu_5q&HArDE93uZ5N+@aEP=fzmLSZMzLwPu0KhP4N0bT$=Nlt^O*1tbU)X4 z=(#PHcoKMmsA=#*(Jf`nQs91(d%GUd9db=D247GA)pk{(C^&b2(RHMpvYkSJfCdcN zjabs?#a&E?$J?Wx3CEfVh$Sn00PN#+d+>O{ORjI(Bc^)xanq1b!1>IUk>RHfE!TDq zPVok|L>*93%=dya67!f$KpA6#((e=XvrUkrVWB#&Tee-Oyrh$Ypl&`4;m&cF!e3$uhO zE5GeRi};^Gf8i*Z_J3l5=1=HI#sOsDD|qe{nT-l{ed*(2`Go6s+D)*y(#e$~Cz=6i zrM%TaDlM!bXoGNbaiq5hgL_HdUHz__nq)#xHvLagz=p6@Qn9v64*IZ@g-6L{i;*yh zRd?<>$nN&9yL~^oVO~s{LGgt)Yc!uL>Dpgs>QTCi7u&hFm+jL-CDIq5#CuR>;}gO9 z@59bI&G3BqJFZ{BmTM@l&_QH_N9(5Nxd-4eS+?$LwDYnLwPeQW-CI~}2( zdK5#4U>LA7Q}8gQ7nn9PRka7PvPJ`CYZMGiq3cQ0zCl(UPYA{!O~xXsr6j$;7QD(3 zJ1_6WbBj!* zO*7C58sfZdmYh2`2>z{3P~Dpgq+FlK_M)zT=cXVXq2l!=d+|96be`e78zD_YyYK;? zs6822^~4L@0H$HLnTnWEl%>{xda6s|yb_@Q9R9Zb@810Ui4?{(CVIK7p6q`VorPbM z4Ht$Nj2exkgfvJhNK1DqzS6M)B3)9G+$cprL?k3cK~x%~a}O;gC5M`?e+EBKGH`Oe_vcoOv#S0ciU(L$ssFX{3#$y zqq>`qjOLuRU60jnmvQas#YvDW(V*)O3=#@B@^93rVkhk}>zMt!V0VbRD)RBz)^RM7 z;(c9A8UI6aiZRy%l5>8MauG>O)Bdq)GJp z>7i}|GF#2E_$S9UC9cDJf)@9iX6@u2??b{dh;p9ly0B7S3@H&JOq_}JEZjyoOlo?y zQ0^&(=-`!x?%qF*g0>5OEq`pVJ+DBaK!FXR=3OaTOoT29Qd3iXd8HlPw*Sd?r?Os@ zIWOCbAvyapI7+b903Lr2cGL?_#-hc4Won~+k6(JdPA{?pF^eyt_Y)YR*qKU%9xwub zy&q)ITKEBL%U?7J+?caVI}|R30gAF9!T(X1+wX8#W59XDVMqR}?w{{;N_x8t+_#}` zUGZwBbcYn(t^AkFs*${9NFw5de>P%Ky=Ki=S5m6!oYD({w_H>qX@mFz!m6JOL!0a& zzDirPl^<-|AYKo~xR3Jb4i$8k&mbEA?9<=YdMyz;Coj?nbKdi0xfKp9 zB|^0FoyeP5gFdmQW#cRT*@Gy%)t6bd-$juWs>lXAm_01?-c#{)BP5=Dj)@%FG`j1n z0y@lzC7q2&{~hMH-X-8Fc(|Esxms^LDYO)p_Ma_n@QV?*oS5-PKEE@rJaGeK%uyt^ zu17#8mO9T$*u48wDO+A(;&J(TWg348wmA-^!ri}vU=u5xJY<@=2Fe&@#c2M|@#Wja zV=Qt<{EnYbElzyodQP-JfSo?OgCRa)5wSF=^0k2W(y!B6AGkqn zUgNB-J-AL8@efLR6OgJYtG{7?^1XZqSO$+b2MJSu$mPu7V!aW$)uoEKp9)=MvvtCA zzaw?f$EMIOQK;3*p#!wj*E`GJ4e8 z*Lzv|lrf#BiYjR3j%fMfK8YxVdWt#{z-xj2Ba*lu;7>C->2D;$L-_LVI4pbw?O-}5 zVf?`iZ}LTPFKCzzMKtKKKkh!xvgY<{wR5~L1bV*4aJ93xF;Ee|_haD-{tKv>Hpn0o z6UbU5{(Nk8@*m~vxt^{#? z3$uU`%E;qqpsGTLoCgwNd84CB;eTi$B|mkHx`xHvG>lx-It^=rM61ry@!R5uaB7VIY;Cm7xY7vin`e72zA?+iWPRJ&Ii39EZ7e}htz4M<~T>YkTlwGsdz&Y8L z%y`jKI~h?hi=2Gu&uO=zcUt?_A?I*e*1}x z`4cG7ai)`b@U)cD3OV5L#X>ZLi?F&DwD$b9{Iztc9HJ>JKS7gE-VHJLz;ru)nB68^ zVl@AL3Q#qrAow>QHgec0+=*2EKO8TN4oybzk;y19IO<~UE-cF{u9QlTmor`YQv-;kL9|yTFJ~d4A?YCVaOl~8_+}}t% z-Bt{LMiL@&QtyGuxn?1wz$=x&nLpg<$$)(C+;ZAFw2?BA*P9nlfBAV>cr@F=6;^eC~DBV^h^tHfDtB6e`LTyD7r(dq6{;gQPf_#(r07S6`YW@4*muzGd{- zbZ}W9Xv#?yk;F``9f%EBZRoAt#sB+#TxPRc#sL9-ytkJ4VgPA}CRg2&TJdfJ9k#az zGtV>ScG}!Zcoqsr?_YzMSBUSO!NWslKyy}&&A)wH=h+T5BtrLCIbKLh@u34_%{*3m z!HIdsMpQ^MP*>7dJNlDA=A-4_BQ{`No%@USs79FHei|&el}WrM9=UyI@Al^-yTS%0(rU&6a0fP@nf-jXF7jIsg0{)22%p!l*q(1zCC)u z?4%*?ay^Du$Jg|6L#a2N`KKkr~b%e{1!H$g`5_`r*PfFP2kl@%AJfX{x2-dDq6$l?u5y^LTg51w#1&$fAi z7eYaGW!Z?g;?7rcB74zvq@v)ybu>eKN*e9mvyX4W_dCjVp4~w+Koj_!RB9KRuOC;E z?aQ}iD)8V~DuzbaTdSFF;$hC?^P#?%!*MHOZtSp<-?w&Ryqo8P>9BEpM1dMAInlPa zPFMYbyR6IJU%=9#GgRi$W3v3=_4{%CgKPdo%qFQ!YkUzYaq2+IQ2sVws_474mojUa zopw*sMIMAH{99gSekv!pjW#weY}Xbm9=6!ljZwMX?SE#%6t)QxG0}<4Xf3@P&?0zL zr6REo|MR}$oo&y4ZmaLBj;m?*(2Hg9F`L00NZYGochFpUSHy-oRb-n)JG0MkEly)* z4MRwtToCH$on(j3ex!xm;RWkG$Fs5BOfgd$sKK0?^)n9*W+9ew8Riug-!G zRq3fvv*j%J7hSVhX#l;ZR)1$#M>s!BP4cO|2u=pStNADH1%NU_PuvgO4kyFqM>ksn zwd33%t2j~vWJcK>@pA`icjB4rje5WJw*0wh?vPUxiZdf3D}CC@c0Mv|HUjgbS14%+ z#ROwKd+5|@cTU{)t2Bw|TOFD8TW-f}b&GeDUKFM>H2}B!6p3`XX~%(?=wVZA`C@`4i-Ro+(2ynxQ`uvnM*wNRVUQrF5^b4tAQ zZP=&3+8M%}PH0DD;@9SGt8Eck2 zjGQ*OiD4G`q#DFwXWkxgy-MVzl<`R);^j&he`=hCPxb4)3I=TdjEH*!W0t6^WfwFcd5&Dc z)cbF!m;+F~&B$DtN;N4Y;%t}Z>9XqY9cIYuGMNsO|tju?auu1Szef6MR+9rt@}8}ssDV&k|B z57O^_n;;g-18-_et{XeY-MdASxb~i5>J?R6aDY`h{3pv%F*SEN+g`aQVGg88U5twb z^;3+(2>t*V^6nbh6b&4p_4Eg?IWE3c(o$fOYE}hFHjp#yo0CU{iSEY*Q2-_*^5?nn^*# z=i^B-xAKsc)vdHZz<-DG(UQrlh$i>SEH?2E3q`rQt)AbBW=_l}9pzXqtsyx{VRR1{ z%Si2RxkKH~Kbq0LsceCnx1-dF`p)hjGbF{)i7L2ydi%X7sdEjYyC z(Co>H6J2UOUo8(ONkGi^+MdVDB~Q~pbA4ZjHXDctE4>kzx*-S!H{9a?&zhAeN6yaA zNRlY%Pz$L?m7aJl!x3HGPH;Lw2_HTJr5X6dc@3+J)c2HTFO{ckzV0`6#O!|`a+}n} z6$7Pr3FE$d>ZeSg>}~W)(Cs=Dp>(QW4Qt`1o_*V%`+^DOiRMBresiZt`yKl!RDN=J z*xaDiDO+0HXYlhAlvP!fyVyg0@*zEVF=&;Z5%twpFg0|=>(Yj?F3^sK$mrzfe@T2X zZ4J3xFC4C9bE<%c_RLipXu zEZaygROm6%w@TjHBWAE$mDdv@V41%dLitzBKji1;@uFlQ>n|#l>ItO+(q-XVTt9fM zJ^*0wA*jVoM67UctDQ^|t!hD5kAzRoo$4aNculCQy%B0f^($kTu1!zg>juK-oWvx! zOjXV$>?o!ugb2ElYa~?Kriz}xlq*ZGLu(~02H4Aomk0xk zs`0G%*|4zs+4zsBJ}Oiv6ZV|%0-M^15B~eVZ(a{ z|ImJnvu$jnrY4#{YQ0n5rHW)fGSNr{HB~&aU1X2^HniR}%vwtIDdLN4s+1v#;$Td5 z>GQNL_N0c%GAMfgKQO8YBs)m!=JF2Y`838##j8x4gkqVa{O)=tjpyc55)p{FxB~L) zvTO>IEt-1J_ioO%1ItPq0Mm5rUsJk zz;8}+I7k!3@gE%Rl#1V>epn~}odL}D3XNl&26C6J_G>#doz_)RuL}28f5Nvuybq<7 zeXJ-%l6YT5nBKti3lXN3pbJ?OY^FhTS>fIQir=?1%ryy~mw8)dkjT!CL>Xyh0ilZB zM&MM6;C~KQ;0Ybc2LV9uU(Nj>UhhCj(=YeTP4Eodm0DN(1MCLGOGO}wWAXCSL~o#1 zV?AMBo=7;;vCQ^ya;NyPr0{9iA>l+@Bc_#_3aNmuFu(j znGr$z_AsYDSq#^a1sP&X)>irEXrLXR5#V zaFghL+@`MFgvsx#26@cC@v{e^!lYt#-aZ~?CrXTiX(drJ26fs| zP@Q;=j@x^KzQ=W#Z{BYR)_F7L&4dbWik5XEHIv%2mXNqhVvuiQ%A88~NNZ=6*a}OA z<6^B!AA!O<CrW z{rkZzGXaV1nNlMvI{Z}D)3~)AspdiT`+nAfEB%v=6A@7u6(u zXcqKs@kDj$lxdchKg_tkDyxbi2p%|Wer7V)z?tsIL?l|rVB6;bSQeUUNGdZBj&39> zam~8OABS{m1#v*?M>k%9kj66Qg9RRX8G-75s8~X}&V#E|4@c2IS8;!ioRc?nu-e%# zJ&J_?Wq1~pd7j!%+UX|aUz^iIh4oCoNAxU|OIPGOdqnc2A%7BSFsUn`7gV}_tG3274y zboy&9?hl^=GN5P9y$`xh;!B~wDp1b8*SFzal21m!W5i;AY&auB1tR^}S_I3;4PHTG z+{1;S?{h{k$0>}?GJrmDwTU46>zlA&<|%jSrgK09!&`uw9{E2}dp!|)b5%3TC?npK z;1ks+l6ADt4x?SzJkuf#T8CxVC3`X%&q%D+W5>SBaeV)9SCUNRRG}8If^`x}n3U?W z){qsOc+dZM1k(Rn_U-uyDW)#&OO=0)4`c497PZ+dH zd}c&!M+w4}0|POSv%o_Q3EooX9^Yh1n<}JlTQ{Dry#$$)3EdbYC%{pC9_z4svU?`M%swA-!5^rk}gvxnQ)Jg|qpXroETVVsjPG?+FBhH2TL!(tsZ zDt+9RHmjZ38OHe~oC~iIZ(;}*mh?ewy}^B28*&l6rEU1meZW~5-%zKX|HqOlaL4-X zPRoT%;{_E`*~90`f{1D>xBFVWfGsSI`FcNbSF!zg$=q#xr_44FRI4U|T}#0gbu9)- zDY*nPW5J<0=fog9jP5LM$P9azIM2Auhbpm&wFKr?KmR(ROa16gSM9JvbjGOArw4aZ zL8(w;Ul<|qqg&w@Xs01XP&sSD2T7?=nIuV7jHFHWO71Fu_lIr~QZGMW#IukjJRKrK z+H}98G9R-7wkjW^OIqDT4UwKyoPmIN^A_K7bC6@_JRceU#i$uo9nBf+a#~HRSbH;h z(wXnan98%VF*P1w27_ZnE0iIAJ%LVc_O}GTqoyS|Nv{OByzqMU2$u>NV*n+Rv`Q2t zjq!Czcl~ju9&?}vvN&PPBjZ?1gSuo+{K6Y48_}q50@wT)O~mUzou5H<;tPqV zL5{NP-8S7FyZn04Tk7O!j(yS*KR^HP9}P(AzIq3oPgg%u4!Ttf!JZ8+q7`nM2U#&li4xCEBQscBsDC(N<7Xv26roYF?JE*NS~zN(*pdd0%{X&EhfUMV*3 zL?uG*uzizDi?05yI1gn^)Q@oH5ARaJbtVq$mPp-hp*WlPT#CMczr>woXc{_^i;O*9 z-^_QK$Y{0q*hbql94KeDQejL7N}o&}B)p-c=<2b}7HNn}Wn}) zrf0TQZ>27m4%;UB)szuMw;Ffny{Y$e!iA^%P0gFb0UIPeD$I)L@k|Y%bx&y;B9lNC zzr|JqeQu*OPs*o{99Ln^>awn@5Wi4JU9MLk zv7V&)6Q{FrD%qlc7={?LyEObkyL*0Ko)9-amS4BD9Uc2F_o^*JV_x{PDB~SRn8YQH zVkC~}y))0E(evW(2qU@T{MAlii!ek#oGJ8}Ewxe22f|r_@;=ms!@nXO|Vr z=TL}w`Eu0Dij(_udbQiycYCW9X$&}TZyAE9Ye5874HWPLW^fW;gvs65<-_uC7Stb+ zu$}J1frfb1t%0BrsBFd!VX2k%@iA*}s~kuK7I6MUzEqA}oX!tvs);0UgQ8tQRuv>$ z|4fPZUNU}Jq7Lho;r#ehs7YyihW_18q^KR{vJ=`Z<}Hqy?d}AczYxd-aX`hOK7CLh#JAoBGks#DaJE|@1pRXlO3ai)51?@MUZB>CAd~n;$ zOnC2o6h~YG$cOv6X@C-0Ko4=-6iZ{RD_t91)qQETWg#b>t2g+?-H+5o=1BFkXA)KU zkJ$J8%QkACd!=2PI8Bf5O!(5D9sR7zx|uRrE5Vl`#>qa9)v^(w|8azW9rh$NePGGk zjPD<>Tu3rVr3_cY-;xE*%p-i5n0fi{LYo&b?5{PCz8xg&$7N6!T}UpL{TY*!)sy7h zC|KWgkw>6YG(+Lp0QR#olO$RND2Y;3fFm#Dy7B znV|c!W`!2_V4*N1%~{c{1voX{X5(`H<~k6oe|`OMR^s+LsXBxiT5e`MymjJ4@+;2& zhq?|6bYL^-hd+cFGx*r^)RXeuUL0&dCs`;5RPN&8+ff6yCJWU~$^8i0NhEA}bH>v=J_2igmAu-#6IInRw79fh;StfrJ8pmkV!ad0qEOzQFLma zy{Rx;AtFXP7&2R-?L!6;dj12Wtk_65O-xD*D#Cxw%2Idb6+6lbbe38M{RSPUX@1VU zE>7N1$rCvWqJ|-(RN5huE3PB)Cc(d@y^*?4>htWv z9d1ro2XFh_GNar0H|$5PoXx&P4*b`|v0hvb$vb=--LEqhuZajT4l4FwU8wknT3bX9 z!vSFpuZ`^Ohd46~A-d!GK<+!NwCss16a6IKCIV;~C)Ml~bGd}DMxOdX^aFsWWhL_F z^=nyiLmY1a`(pB6dYJMWpu~@jGFpij|H%V0mI*|*lz-s@Q^4aFXHEa$$5a?mR;zJU zg>3t#NqZlcR4tKrK@`u(u?_|1xDshJ0}6(>e@q(B#Cn%oxKxFElo*vs6hkS-Bqe1C zmQYgDMN)y0&Lf#bn0*aKJqyI7O;a+A*aYdpRl}5gkEc{p{|M2<8PZ;flM9Jlzc@9k zp4Ad0&U;t+qvV0}Jxe)(rL`nagskxT7$HwUSbP7}n0xX>?o6i{?@nd5X0l7mnO7U( zbs29geDzh>>H9gtpB2WKT6`0@uK9DDq*D~5r7c=|87I%9t78~(mYM!AaJl<&c z%rcc(i^a$s8*!tVUw7?(ec-Ywo~pRFK&vZ4FGAAvh6_ob%Tq5peo659VGwn}qFu&)1&UeWI#!Cwc{)8;On@t_9&UCYlb@ zp{6bl6PBNV2chl94Jb7h>^S#@Je@pGIbBmo|2(rEak(QtzzX@_ZWg2YWQqMxBHR)1 zXc98WcXr^Ld>>s+690tWJZM>XiX5Pd{^Ye=`VRY202-}3O7nZS7S;vR$tZSyLTUid zGI+jLNkd4EeH4tHkj9X(Rg0F_gcSJ9K&Xd6fID61nf7~9B)iUiOzaeq1jkETn$#Qa zeMd-+a2dCyiXb2OC(X9XH@W+L|qWve@XK4 zI`EMHnkVAY5p?u=->gW|`i+#8f~y!oyuCZeFg35N+$O!Z+tliI&D!3V-*Pv5j9 zUJy%U;7bb814+n zy?rqPDqGb>#uF&LJM=PsjUTn;NA2u#>pkBr3w^!CwkKfgK;jM|iOTo&g3cVSkXDQR zt-Ti0Dqk$0E~A(WSid9Df=?sGpGcCq_uOcGRKSfJ?e6P1pLoee0|h~}mSto(UI`jD zyB<|!LeLNlB<-zVoX{uc-ICjtQA~ushpX}42OQ#u*Vl|Kk!okWmZ7iTtgC41u7@%pz*dak_h~pl`6b_0ttb)T$|hMeYN+ z{HV9J4j8B}i{DXWwp$1sf|Q>r%xK^xjqW7WT`OkTdXyT;)PofpW0L`IU_vZBnI!2J z+0~=qd1;S?g=JswD)w?;g#YK-PDBrnuq|`TaWnjr==XrhN^P|gH^MdXr&;wf+9T+m ziCfAowm~}(oiLx&S<#qtg<0RA2vS17Sm}nmhUu(Rd;790S$K$T!0fB9{$wHTR;N=Y zvR!6x<|SDqw49gHRc_ZrDyB?a1K^XssJct2~siy0Cn=|A}Jr6@_@1_LuK5Zpo)E|a-ehdmn~$8Vni^_{`*0q__f z)0a-fpL|k$RN&;iC*-p7CRDtTjN&pl1I8F);f_%!bfF@A*uG|C!u%>a^*!LxPxzsJ!9-Y6HY>?cQ#dRB^ISyHhIj z;&|j;@4^Z(y?4CV0~si=nJ2_k&hOosXYxF^=_Sn0+)V6d`?Oc(0v^O079qY~dTQzq0E=S^{SU6N=|GJhJriU2Cxrzir_s8CE=C{ZJD zA2hC(ch4`;VA(+YNrNla#rbt$rrlwrXo%L4OL^dr=d#T27I-BI-YxmtehTE4om7(> z{N>`S2pwFT-7EX-SHMfsGu_L1)@HE_OQ@`g1#ZHk&m0;3-xT4$UBTH>^)qxcX{hU+ zBl@S_C|$TUuITz9e>v^!cPY9@86N0BM`1FNKe=v%UueC?ZqkFds#JIHsJCi(rAdE?F6{`eHD*!YsYA`w;^mZDVI>)zU(H_g&O99|q=UKAHr z4@zJpAuKhjrmLgf5)#+n!V~Ur|;g{z+L&eeM@WP-v1e3eAuq=$U!q zv60GoKZ?~oNDk2>##_X@oa~?;$nLH6is!FJLvIbC0voVeTx~B)K~-I#Rt{`|8fV;qZUEpgT+L8(F{v37YlJj7cG$3k9ay``>-%^7qc{z zyexM8t~PAA`6yoI8h%xKu{Xg#^~bu zulqX&=MFj_Km22d2?QfUDM8-{jUf8;da)A0E*Qzpm1w1bGE(cN;?%^Kxu+`wN+&+5 zZhlwn6oD5CKIC;BYTAXxOQ2Lw$5L@FwzEVoTf3|CR4Nb;D9E2);9W*!(b7WeKj#|x z$w}F|1|QJ1r*%Cs{_br)Ie-2y1i)@lUK~}L;LU9&^&qTyL4WRvJ2v{w>dtZFe1mWI*KI{SVeir4$2o9p9r+xN zf8W;OrDYeoz|xvxo9a<#KEMZ-t1nz?ZYxvjU4H{aRgj82-E<-VpUN97FGyYR>=0(P z!%jkd@IZ=gBS~z3{`+&qkGC?m4Q0@a36xn+o|rSfC7}nFDo)V4$f1;7SHx%`)IYh>L-}i4(AjnXAeM3|DxRuN5P{76PNSFZ^MYOqM0jyCSDzu$ zg62#eF`c#r+cx8RtM{PM==jWv)m}E5Wtt)7ToS% zsNlssyAW@>Ix|qe=o~{KD4lEcpcRY^OM|t1F+DP2lUz!BCG!d&%U^|+m&dCL|K_Z~ zJz@p$9uV{I@1!yeNEZz|5D8lG;p1dqi#7*vNPqvTdluOxZ{NOq=dd(g9XwHLbN%3$od7L~O!*rVM~v>A7(QrL zFYtJ@EM(b?3;|{+`fV?~5WFh(>#~{cuSwx^8rj^UV%C=9?aQCd2Y}`4mN1!Qw>1>4 zsKj0zd9K!f2hO*Ei1Icsq{)SvEaLb6q=;{}ylMVn8W~QE$(>?T8`uqmqq*>W)^Ebn zIn3*Y>Q5AB)XfRLqjw6~9PS2R9wwPlnS>a9FDDBw5~>Kt6OTcjH0#{T3lLLF3paCvyZ1mRh{Q-4UH9`N#4l@L9G|0LrT=+J z#iP3Ti?Yk?Kf%*(??RS5BIRxv?Ozoe-Okc}doU}G7muE&_;RKh#S!n0krTuWrVxe* z5_iI@L(0~es+U)yw$M?j2SF<<5sv`=j7-PCh}F%4)FeA<@#o$n^Qyz_y8TR)rf!t- zd>3kK43V0{H!q%w)l9}N5RG8pX4237M)^lYeMlZ7MbEiQn^KojX=#7n>)JSZ06OC^ z&EcWg9JY#|T}xBGup&-fXuNZpG7Y0*E~!vRJGT;7xik?Cwo#wt-H`woT&`{v6&V-Y z9p?QoV7u-jt$bPc{z)O8F|i}-11*KeiTztf>WhwoZyi#IFCnoW{>(ya8#v)=3o9zr zNBwtnO#=6!f`Qv$W#rZR#dKHKFm0VaJs}g_X$aC5tO8RUkORRt-?sY^|AGny zcUXONYp0JcRVg0U&>Fvb$I>QiZ~a>LHEZVZ@UW@Wp`X+e6&G2=g^95Mt?FYMYvag8 z?7H0Q+=k>}#%XBwy-$T^eVaQSu&a1e-!bS^*Ld-NI^ z!DxTPV0B++)JSd7>s#(qp0x9e%}ZEWg-TmGfLPozE3#C00p(fx1`{I@&FzFoJJ zu0`3N=i>UcdfP!}BB|Y{dA_%Zl@o+i0AMTxHUkj{8|%&=VNXpj8wDFQz=jv|qaaff ziCmS7r$@`?gj3GB_QHR!Im0g`32+DbXAv+Y9W(csL(xY=PdR9tg5v(=))WGmV~?M* zb35a&4~{5Kf$aGg-;2X?OAr>w=uQMp!*Kp(e{^Rf1*ddEiz<`ao67Gs-Aj>0Ll2@5 zWI!4SClvpDp|IBoWbkv! zZlu(FIz15U62^!*x0Y4%z`QJ9BY1LJJ5+I_JE!RhbJ7v^gG5{Ibun`_XOF&gR#Tih#%Gi1lL@7yK4D~Lk-IM_e}LRqtoRVf z{eX@}QK1ctv~4Z#2CW4&jJa2DkM~Gg;sWaN`!9kI2{Z=mQi=}tGBCxnogc+c;?8M} zyR@F*JU@wUJ;b_h?g=LZXBXNm7!t_>%Kk#g{SBB!D1r7Nqx^51`;6H!N##XIgFN&T1yOU$`1 zbLjpH`bvsI^6rJ2h8VkqCB69`<-C4`?;UD5-d+Pz#zSWwPG))Ob$)Q`2KFgSkq1-H zHt?K8kv|xWTzMVyphd|Bj0z~eO$x>OwH3`Il@796U&0Ar+ce$}6p>`q22M~Cw*A4S zdvyzf&e9gUhf4}Ayu}~C)P)3@_c{R26j;Pb`e&1uYE)eUX>Sy> zAC+yncanW=mJ?f72BT?-DCKuO-97PV-LJywLO*_>BMRs^^z~tWXF@=-y}7HGAK(0< z0=hGn`S%t@V|uN)zHOd#-0hTxlX*g@czMm~4{tf~)y30i`AQevQM+CAaWX@~T5mI@L%{mF{o`V1l>Rz(*EdsTYW0h&i=^2fxi!=p!| z<{$DU8E)$$6n_FC?^9HfQ+B4Iy(^m+%RxlM1xsawP*;nqP)_`aeyMiOmP#=84!TT5 z=JdpKZgwe__mdVmi3n(hu*%}Q=Qz4o$m6*!S`VXekzq#sYms=uX;=ke2X&bM4xlqu zu(bk`w$dCq;VZ5-1Fk$QS4UP($V0I);;ad_Z(ANHi5+mg_B=^$j^$ zA$zLY`_7OVpssBHG%#$Xu3}I^VaHL zIB^7F-?|er4Z`|BT--wLclI7}1fm}W1f0^4HlOX!gXghVRJU7SNAkN^j1!l!ms6Ir zdrOZ4Fudzkg#Cn9nEwCur5r^1T4fk_i=e-paV7}JY>9X~&N^yEYfoEqdj1j=@ zkF?9|NrXrD^}%29f-DA?bT3nym_G$Fp$WJsZ+6V`CR30Y=dDo3kQ{VIqUv8Yq>m(C zVxMg5n~tqHjqEIJ}Y^uVv* z_p-@>FJ1_jUO6O@`fWgFAzT2ARAm;wJxjIK4padXP+%4|PVUzYt_-a{{-%^Y0l5Ud zpAJcCYmuDRyP}e1wZcuG|13M#KL*J@Xd?ZayjXaKJeY9dcY_EN^bJI+;<(@;s)gW? z7$|W_2}2myG0U7))KJrIDddZcUak`@>XVm_jRlTb6ZDiO{VYXdDRw@ACZ_)SiMzP6 z;!66YsI?3lY+jFO;znyHQ3?O2k_kKop$JVl3OKOUVGlux-Ab;k0(?$Lcc*E$yhdq& zwo~V~6L~x!RLBkGV_p4NBPwQ|Du}pXyi(1`z2*7gek+N z0KQ$NFj~@S?+}b}(2;#}M8ZZo&U(~v;DT_NP-G1GOEG`#MqEY@v02TkItzOYsUTy^ zpSTH9=`S3vD+0=(Uu=SzJ`cB!c2xtscYo-A zy{;R4s*U6eUn*cR*oFVgojy}ax?D~UFbhjn=VEdj1W$9q2>K2ZWeQBM{AgcU5TRXu zsQnXIK!dI3njeAG(|;17^%+GD4DrVn^SrJ=tv*ue!`?KenmKF8_UdU%fFUFh9764J zkao0ez&`hNXM4*>!8{XdrZVTC5vWp6nt&@7B5a)#bR_lidcghAg;~Ltn8|!-Dy@(} z1U+y!Z9eq8Yg4S5kt#jNzoZwO69<%SXxV*vW+k5^%mMNyQ2p7>!-+}gyM>P{0w*EC z<`&2{vuNc*ZolJ)hiT*_vz3&y=YvgYfDMVrmZk8K{pWkJi^0dvm;y&O`H@({tLf{2 z`_Ku{R#tYAtuBeEif%}95s02!GU=~W>K{OW&#sA+46t?mat(iyKYc6+`z`7%G#UeV%m8;^J`7*+zsQ% zdQ=frW|R9p%}y1f=WCKg`0KS-)Esb*g(=wx)$X&)VT@yo+&>cg7(oQPFs z5VqLpFpKd&Z+acrA9Ky$xp!4!On2(`%S^CfjlEVb<(>Z*7C_; zli}((eG0OoC?qPXlv6|CE)P`0R>mlNpx%tK^F?{_u8c1JzXiKU=2K*L zXb5^`=NI4mn-*>jqF(W6&<69dX97#PRW03XiL~GIIY%JLgy-4^qPIvx!V) z=7#QwN|>dYto{(4XMd3HdMqz0G1PM^D(7+GdMU#uQTtvMA^3<(ReJz6_qqSOe0T@@ z9PyFI%4K}G=c9Kl7es*)?$x7Cz8we;Oxw_l`U-Q;>&>!o%{x-}-0`Je7&n@tI(2qG zY@zxkcH`(r$#xn09&j94ePt5*RupHsShAj(xbn^O#PX$99M!Wce_3QJ{ePg8=HIuz zoL9eDyZl1r9rV|`MTvPfkEkT(FU3$bxF!l$db3?0UjDBkh%Mlh>?EvnN^ulkz6=X1O#~;i2<%rY18?+R? zR33Du;Evh+Gqj=3qt9z}vK~$6{+O~i{og=@C8)6%!!|rfaxX^W&u?$%7wau_i8un)tl4_*6$* zzsed-IUZ5H-{k}+#$3A9j+OB&@N1Frhz7(Hzg+hmITy z#bn`lJ|Dj#hBLQ$ms!kdE066yoWB1rLXVW{Ci7$2{kD4d{WrC1 zeRrV{JDTtFHd7{vLY2FLZwc;fBnchtBy-uGUy#4D-7#GzPNq9RrP()&w zpgH~h$q-k;l*90r?-c&y3E_v3uKd*Y?OFSCqV-uKs+8;PX}m`}#33cas?C=X!c1R! zhY22k`ToVa#VII{B%ExHmQCWJw>31xPl}Uspa+4Puh@%|Z-+%uw&nPM)_bq5%_Pu` z4kgN7)s4abcE|0{mpWhc@HyM|W2HkAEE$Bl3)!9x*C~Uh@d-{y67#BoE@mo=tG(*@ z`TK0r!0!H!s&PVlByZxGbcC@2NIIBHZXV%V|55zGqb>3>WiH=sOmcIoP*yg*iUO$U z&jlUvAF*IVWb%Zqxpt@tGYdBaf}K#ZZe_{_q84{VRRm zn<^S+DSpg$*ziLJ)FVzM?r1Fk1>K@|+{?f_WysIZ!uu9|J5-tCBqJx}KWT+YAn^F%r|JHxPqPX_@P)px2yaA{VJP zb~vVzipCS}qua)Yb`>(p62bKCx`dQO(+g%GbwIpY3^V%oCw-8w#W@dYNJ~6p=iUHe z0lkFz=2p!y5N% zKd!1t(h6C_4uXEEhJAXHD>?d~OaZS%*c4gD%5!ff;7~EQNZX9DCYkJeIhLY(5es|T zp<9JNsaq%m;dtgoIE4qjoCHAs<&AOdt^I(7yQH)Hf?ex1HaaiP`q@{ZU zlP&?JLDWZ(PN_pnqeu%IAdN73z<~F>ANTp}+~@ws@46(1)5CG7GWw$@7C$y0ELnat zR(^bDBf5ZmRRVEQs%t~GCQ_k$G;D74-x<^wwfGmHmd~G$N#)dlI9tA0u|-VW^kj!K zS^Y7mRSJE4ewIemKb35^92iHz+E4U;f$`BbyPg|aK6wf77D$Eawd8`j=Bw53O4;lW zhw^1bREtUxq(XY53yybBSlI_Xr}n*@I4f2);^cN?BNe{f5XH8UF4q0}Wd;$*;YQ|A=c3tp2^7$H;c)3UNIxjnR_91QmzT+Wk&{mp=D ztAa?PrN$5{*P(ltasz!=crJPbcIj>*Y4n6@<3iQsbAvIBf1Xg z@W1fbWSsIE;P);kV;^c}Xuc2GqKU}by|(>6^oy(eZ9HwugW(bwn%tst45pYIgnap( zooEW9sTT8onwu?#i9IuSfNW;ijxb@0r)?3r;@DM2pDfCR%+khB%?(MPG8is$ZqH29 z7EOVw#FAqun)T*mAHM65QUzeI?N|r(kYo-)MkMAXEJ3`B_|OQQddm-UsV5iJs@NBX zrKxIm%IY>YBj~qxX9R?4-HywdUXH6>mJ~E`x62%LmXwVh*g~?q>4Q`+$3tok-Nq)r z{T_-`!bgrTfAt-)0ErWKp|P!iN8p)dykz~uM0H%)84D7+Rn8k!Y(?VJ1LrLvucvdHz~I>W_|Rb zuj%F)drqnk8=h1KTqp=O5A5G{-u~;w$VtclndXGvx`X2-@2eVwG-Uq+PLGl3?bFa0 z9CYTL3TZ9VtY*WATYX7~TiDyJiIQX^hv*jilaxMbM6rD3+EOZi+OX~pJ#ud!0;?8K{ReD6h008=`idw2J{Y7p=AU{ zfZ^#kxKEL{)WDW_Igt|?Q+6{2+Df^{uS0iwBEE7xLXp3yw|th|rv1!DvC~XSe`kqa zBu85a8^}mM2LlXa4@>8)Nu0@}H_lk}@-MG@pZv^+gWm=_|Jv`HBmUHDGe<|EsPQ{o zgAwLl&~ir%Zs}%Pv5yhqD|1DVuaq_uYwe11+25bBqsBZP0EMdud)Vj zgIX@&DpS87*``gugNzzY8>WQV|A4iVBISC^Xi~Y_MS_+HMs$H|76@aYFV{j-{O!Li z#4i@fQUc#kGP2q@{|*^Yp|8Xn<;SCnD}?msg zt1i^4(z=>_$S=T*LmtUs0P66x={a@Jwg)o2{she_K^lZAiawoEk-{>r*c+2(E^}jn z!z&^c$I=q_BE}KJM9Gpp;QY!c8)j0pBL5m=Y8zSmlXAwe_c%kYE+}eV&kEX*2ap~F zC(}370Zd8V0~F4w{jj3M!Yqxn(CA=pBjIJgZP2u{ZzD-FD1Nu`{!-Oe*ef#S(CLjo z$tsxJ=A>KO8G}lZYK{B|CmSh3Pna%D;hw2r0%7fhvWNXc>{163685mLa5f;SEehqn z%aT?^?jO-LXsJa`O9cpTofg&@9A^nHwopOt`a>E#AamrTxtS*o`v*@M5T3_EkPt67 zFAA?f$YPzNmNALJ>U~A7w1!Et~^10@13kv8nh$692H91P!H?u*wGM;FhU=M{f?lE z=S3E8jeM-2^_IxUyNk;nRSSP1Q;@Y_#YZM_wZ=~MPFNw+`_%SsNHu*hp5&iN?P z^2>%5+G4&5Rt8F1xD;fQ{G$`>xap>vEibRTr{_E?=0-%&CV?<GF?1V{31Qu)cI8KuAo@DN5q={1oTVnE7+00?0Ua(#OYxUm@%#u($ z42s*I=;@PgyTUmc$z!5_URZm=Q5eFZKNT;)hAH*~ldaQl0MM&u{<2;X@U=!GRRgf$ z%_^MDdu`dP-pmO0e?dLRLFuzq7-_$BGWvt-xTmm8kBAhC#80$1fyZs0kkq#9g&b%$ z^pUMYE*X}`uL6J2SShFBG=}$L$0`Zb3zrGp=Zdd!WNd0owZ&V1HJ>Hmtk?ch7tuTq^S?0hj=zYz}c zQLPeR7`Eq%6T^HqnwVETBB>})P3ytWVX!7*KrR~w@eNjo+GBU;Pl%#l=)Bmn1CBIk+nz%!rqdrhVN;g6)U*A1*WHl9ik81viK<{#> zg>u9$Ul9yz&``C40V)|;vE4bHHWECuf!lwk=e6#jyD$}z=#*LQIL%o`R z_?Fx%gJ9w&t;^Duf>NcZAv?~Bp&@!;d1S7S2+f~txCoCKrKce5*lDs|%ToZBHy)p& z*j=s=l0Ja@$sQ5vhyZWD7j{a2OS$D#>cRFD82tJ!M4&XyS-rtPKt1&7_VqrLh=^mC zrTm+YGJHb=T>mXeV+x4|6g%2cB5RyKPk+HWFMp8=2ZLZ%yOvFK7CAgFvHw*-@aIkx zfr8ysBG63U9(uws|J&v%p!P-NEy{x#kl*^H{3p$Bd=~En;omKrO0Jr=XQ;T#!`r0K zCSJ8#7B*<54c>@x&FH7((Y0!LvyaJCrQ1dCUG;MQEBVP7ElE0+LE|v2-_|!NUCvNS zEnF3TdzLF1#PPbad>%g5e75N6zCU8vW$(^3<^-xI4Ra8gNZr#vO~;1Owgv3zWO&&y z7JRp|0y6GYX$qxiEKG+RfL-*odXc!Lb@H0p?uq@@Ugo59+G&~7c$ns7r3X`yc8hpz zcCO99J>m7Xe-qyDci~4WPfIqT`eK;_`o>HIrZs@{kIu8Zy`#Ct2?>sFd12b zJ0`JNDk>SViL&%w;LgEpAbae;_}kZ@VSH0LdxpQHMi4iehxxDn5M5(vRzER;9Lwrf z)3Y?(0@vpB@y2ely6P~uLu&lHJMacy;Y)$Y8-KB(v;;Nwg7DearHX!atw!phJrv<( z7^E+fDd-d|Ba1QtQHq)c9(fGcraMh(wE-wrMT%l$Z)xFpl5WGqF$$Y(tFGA3{rghm z>{DyfTaF6r)@T6@SR_l`#%^65P(>iGkbh7e1w4EDx|5=_()SGqQ3V3=WqCi6$v~M+ zdn+d1Hk2N&(HiM@dGV7owC&gxyEAstf4Skj{~XeQg_6gvV~;CWH(3nTn<%jnb$>XbUW3ZpLA~{jQ*yy^q230BhjB9wj;nF-EM`Q&-M`FJuTKFe&fY}9ou|M}x6$4XSp{Ut*LKCfV5rxbfsGDW zrMLPAY*_I>B(M-fo6-zQIDdOj14w)GfY8pzocJtQ1*OzME8F#FvuAJS7Ecu@X(5UJ zqzp$|S{4A1VStR$s=R6J5T!jsAmexX6tcBvrr!!1{xfQ#(Tn?TOL7k;eqJ5MEO)PN zeLZwe%bh)r$6Y#75dW}SZN*1`gv7ga_K91VeO4r^FIdM-ziGRFWyuo0pOFP{y&1oY z|MJ=7N6|;GV@hw!;r5@tR25xXWT%B;?~L-;Lb?Z7DbdvbsOxC+g%pj@KCH3_jcFyF zye^T-Ut%qnYh)lFNRHf+bOLjoc}XgCTGW!X#{)J*y$*1V-0W_T^0m}EEA$nzcNqh8 z(3Pq_oRHyM0THia-fl%x_v0n66JvaBnM0DF#I=V3B?>Fo>M@c1RHL!iNQFW)6aGJ0 zY}yIHnf3*qW!GZ}3zyh1p83?a@f zMei;Tz$*M+!MBA8n}sFr<&{~#25D=_ISO7oLINqbLb>d?*r&8IP0w$zOz||iVr8F- zVr54WDAnaiGF%)`ct8V!1X?YwHf4hvzgkSu?+8ADSbC@c@5nq_VPG4F@X! zd@n)j1{Z702kI8Hq+bouN)A`Y74?igdBdO84mp0q9z>e(21r*ZH5U7DKeHD`jBz?= zB?#WzddIUXP<#W8YowP~WMD{#FmN6F@i7{4b4lpcdBEz&Vgox}oOr}}{t@4e=OY&5 z_bsLPY4vY7>n~ZJ{3e;(WX*98oNv90+4rxUI0g#c*Z+H3wrY;3vH5rLHE7>b@AfZP zRvW3Ir`&BhN?Lg8rzL1nJvCm7$Df`GUq`Y3%_eDV?KteI5YF_js7^l%7q@;B@DP*0 z@nucXm{1t<5##93)m>U1(`WnNoj-d*6i$l(x8i41KhZf1dcaY0;(Xt6pCbpqQQh)v zR96o9Vc-f1uKK9t%GDBsa#J+@MCZ=reT5yx%RWKh+x>7ibN*5NL?$gfLbRitND177 z1jz?eQ6vLsPJDMkT@**`ZARk66CV&Dew!oiqGzS}pUFo;adb2sn@P`k-35XF$3VD) zzXGud-&UcT-N857*}99)p~^45ITjwGWZ^ zRl#%6qTpcNeEoNm)iqcu`1EJ*=uD%HDa$Ft@Mj6kU}L%8Pn3IUFqvMk?|6beNT|Ep zU~GGM=RLbB)gK4!?y>zJXY6~A2N{>WFwlE^u{TY=s!{Y2!K+|6Fye|`cbBNVN zT;Kj>LRRwBCv&}HrJp{+7pZ-y031^4v?pm&@`8^VL_m=Rpe5_!hdk z8+`Mr=C^XC*wteNcq;Wmfhf0(?vVA3o~ldf?%H%|+28dSan6sIHt&Ddu4)V)-#WKC zN)gNbd{|4S91X5@5O}^?7Dng4wI5SaU&^?98x)Fq9B^Bx2%2XII>Mwl4CAi@9NQVr zi4SPMKOv8QN7d>~>NzUuidOXNbVt(oWaiz_?x2cPFiaEJP=P6tXKNHr54j!h3Q~UH z>-BE!V%L!x<(L~-lMKM;q&{BGS4D%=8#^i>JtBFKUTWcXsm&F7<=k$RJ~IH@!f$;Pp_No+rCVW=L}*B8maPb*fViGe=S3O|bZXCK<}0 z(lc=9PcSb2Q5U+h$(W?;Bao7wf5u)g{^cmB(w~oj#Evka6)F=t7wysQlV2fWTCiS& z^T~hJSmw5^4hX#cNliI?_%=ADkkEHD`#E{-|LCHZ^ZhUrpB*o5d|cvh-W_ z*o+LtLpzk+iy zhS6(tZjR6~KolsJ{XjBh;=%-{0jAxS7dr0|bdeFzu>AF4_)e?}4JZD}-o*WpLo!lv z;X&TTH@XVk?+roD+n2kjcXnVlZu1Nmaz0HzRcb!8ZT2jd)-F#!=E*e8EHPkL9glf* zCgoi?nMlPuJ~62j%d@`ENGKU!MYcEJM2RLI-1?h(lRG+sbvDXMS#1zZ^i!tc{%Tt= z!mnOVb$D3)d5%hX;3Wv*UR2e~TaLKG<#K+t@oYe5sLa~<8~Jegf`U-3>tGSZ*)ZTVIO^b=Pi)tmb4G1DFiq@mp zV*OVqKGj84lDD+bAp`_a-$Rdw|Ea4ed;R(DV|htIy-gk=i)uObgg0aW|JjK<&EG<) zwJm=qEH}A&wDbpqr=2;|qcyvF=7AH7|x0pOl0prUFc< z-!$!8Ci7_f<&|j=p04hnZ&w1=cRo>gf{QFxzMqIG>OEknq8JCt2VGWn?iDh0WO3#9 z#^=vM0GrS=bkFX(D+(-4u#zXF|_qfqy*_JedJMxFTGOm^p@p{ zmuO4XrFm+pxl;Hv?JREQvM@v$ADIK8iGL;c+zaP6wrRAdeD0ZJ{jACVk=m zkM_^ob|-}CpSZA zE$Ftx#VBsd1^?AtGQW3l*AiiI{IWDLX31Q#Dt4ujd??5nJ3*+mkh4mfcl+%R%x@PP zm&J3kZ&le0Kr=*lOsS$G5mXekQyqjVm#fzuFRIEQrMA4Ud%XdMB?;zp+5YzSE7P&H zYwB^)uUK9kj$06lOJ*zD41ZUKuMg+U{@q!bYYM~#o+(e8FoYeJ-GQyjeO&OsYtd%b zZ&X>W?93o0nl6)pgcr);sGA~whmR7;oC>n(V#E6zOFQ7s|6WRwJ=s{oqV%H6RoG^KtcP_*DtzDO%~6%h0u@(SoGBXb(F>V}OGXJ8HqGSd4) zV28D_i6%Y4SLynN>y>p$2nY412AitJ^#^Ng*UsHcVw6+a^(rsF*e?%oahbvr6K{fE zWd0MC6`vp@stPAFeh9hW{e{TSXL#vrWw6{;s*gFE+pr=xf{||&l~hH%*TK1bXmton zkRa^)_wcs8HcfsjQT4mJdh}EOsXRL_IY}CPCWtufdOlEW2MW}i_=AQde!rQL=3rH-y~ z*Gtv3y$c(EK-TIiRYxPl1I~M*7V-5ruPAS9ONv)omu1itIfl)im-&8b!xI!Oa~XFi z9rtrP;~l7ptN-}((t@tZ&2H@s)h$CRpO~ffm2FwIu z0x>OhfKuJ#@7$0IT+aXZE#fxRv6q&xRp)xb+6BqZ@s{z`QOTy5)-^?p*`ZL4pavRy z+tmgiwNOUZ8o~wvQ<3YKT?B?lS{H6FL}&*OZ~w`i_PCgAOYEZuY^-)CcJvBVHAfM} z2qfzY2OP}*?8VDq_DAolf!ROQ8buY50=n#FcG3_l{stb=DldVd7oQWoPXnnTW0x>M zRS*F)LnA5U^q(#-S}`?1F^!_Mr}Mo<4yMUbRrWCYt;-IG3T^wdE)>A236j4`e^QAs z26-J%v)9aSAiX6en>lCBmBKfD4eMH8?c6&xy4GaRRUzi%N}hJ`ZU06_SzD{^Ui`My zU#$5u_D;@ngeKBOZs3zeIAZFnUjA-F39Moey;S%8JmW}Z?Cv#&iPcI-d}W#3^ZwNo z2R)Bb2I|x2_e6TL(65k>n5_OwzKydf1?i2CHjVF=Aq+5S^=C!WOj^2UT(UhF zn&T}im3C%b3EAV3Xm@6rx;8Mpb$e0?>P|sB7wbq=jS?ZnG+$?kli4jPyQy=zk$JiE z{LL7UO2w!#rt`5|tg}FcAw!7piN7|ZhC19e6(SZZTMTdY`}eEXEs!mo3{f2ozXP%1 ziz$noM%Vu)56T4AN;#acsFSagpU!KCt0{8?qFTFl03ooSu+eDJz(NJ?PSvy39a*7y zmSsNv!-%pFzan~&+tdWI!r%85jO|A_gn0~}75(kJhGO=n@loTtdmTF(%!2frfjRfY zn`VHR#}S0FDR(DUhYKY@nZS`cIwa4D%8N52MNwvt$*B!b3M-N@RCTK9WS)WI(wxmV z-15V%(L%Ka+H+3E1cs|w#y7YQUX%yD4XOb+?zTxS^)r!}h& zQM5OeU-Bgce$MC6=k6)z^JcZwYjCETDOO*XpKR&deEtc}f6J#E=YN=68i8FTa|uS( zjVqBBJ=rd${D~z7qD;KPhab%UE*C9!eC;KTFG;2886+hwUbBx~q;zqbN1vHjWGreL z{(+@0Ru!>fhT4p)f*#9+9KPohcxkfx@{_2XgCC(Yuc&=^sdZ8I8fPi{juGA}!j4Jv zNnH3L%qEph-ZFN94yLYTvG_d^=qabzl+xh=@_gk>4LfvbvJopEH^Ja^bD|mW2ma~< zuDJ#hxr}LheUt>gM~zE@vU?AN4yAWXzDrP~G*Gv+gfB6ZPj1`MU3gZ2)a_|VD}gse zje?dAKIMgy!s=@?ThVIOlWm9HB7Nl(@|M^=D??O_dtsHR>*%F)Ez`EQp*(=4*-)G) zJ@-#|C|yWs?UMS@BecsaXIl_N-H#L5<}7x@@^yEME{YIhn#Ro7Gar?|!FAXvrb{Co zX*4RyWaP1qbtg~m48Ka|zk2==_Kh2A#U2z`6-#|Ej9gaU_WZ4U=@dqR&{`~}BeDqb zn^0AxMHVFoJE=~xD|n-`I5Hg(iqZu77EgZYJS--!_D##oGoHbKfV&@@)!oD~Wg%>V z+(#XO=(EWk+S!N;dY#FdZ}Qr1rPOq1D9zj%cpwAmRO^*-LQDUD)WyT{uSE}^mFl7t zRKI>~4FFbT`FYU(`itL2OJEld3T219LeQmJ2H3-w{08za^N}A}E$>t%mkhnNjkXvI zY8S$4r*pnXIE_!T0C7nPs->o;Z}~-;EepLLS-Va69B?p)tKA`8qi|&8Onmw=J$xGC zrF9~7az@9>H~}4nH#{DLu6`hCLOE;yHlJQCE=_|~)aujFvdD!Ky_K_C4wxtMoCSA| z(HI}W|GJ)d@FE#E@q~#|*E$tWI_af>h%=evC@)-Nfa_ULJWstBjx400DPzYjLM6IF zW<^e9VC%8XIeiczBD^iU5)mQHIw{KaA2=wLSz6`s+K6gOInA(n@u`1!H;GJZ8EYx` zsNG_A*822;_3~cX62=Xd_~EZ)ja(JkwxKxozW*88j+WPL1mSZdqM;xzQ>AoYfqQl!FXmmIja0=`3!+H?mM#P;g*%gUBz4KPfQA#W)@osb>}V-GnX zI*?)IhphRdIQwTr>Q`Xj%>H=Ap2D=zcYWDgOTzOZc{xi>KT#l9{J8_KjCC`HDj`Z?2ISf8RQ*a-Se{`-8~+Lj0>PWCd~YYwLqu@RAl0K_yp zDKkg@_6NYTbMZdRp;_XGz9lv5Z^eoMN9qpQo_3UB&oMNawt&*OW*`2=qg5 zgb~BVik}kKb=yZxWBh|E;(=1z7fw!V`s8|@P_M)?kIvI7G!Jq3AJ6yL8>6v`Rsldj z+bYCc^b8jPvy?@#VsTbCFWqQJe_}`R0{SFtpPyR(n~u`nZ0e7hrm8N7er}GzO4bX? zZxSEOU0#b@IOYa^8M?E*Fc9&^2eDrn!CB_4zhKIW{T=3rRhZlFhb6zjgT z2lX?f7CQ}1GRm6Jrci|7_&7UnDtD_XdMex(^Zh(Kn(MVSU*Q9@h{ z5DlIY!GE+4JApF)zf>D9Ux6g{ISw{DH;>@t;k|Jb7^sh`J(+zw%%O;L!D7(pDrA!u z84+!Qy<3;k)T!J+gYv&sE(T7*%6~V||AG7&L5;uINxH11#cjpSe5FS`oranS4CLnU z{~DL~jYp?HEvt_h&nWza(iF$Yec`e#*A9f|vs4SP2G@?91>fPn5qw(ID_B-4Ynj7! zIrtCt@E1otl&8DDA4^Vp*O8nPYza=b`S9)OqK zI9tc61>fjNVhVfdHmVZXj&o4M?>Hm}KM#_?wbxiR7Yo>1{h(?2BSmQ^!FfHsp#8Ci z)TGQ6#?5d<#S6i;KsfLmaN1F$B7Lpq^A?bktZG%I;q^*s>(~jFs=&KV!-~Ws4i7@{ zG#B}GfQ5>HqHrx@VlZB`?nqiU_2<{|NN3QZa}W=ZS0oL1iqt&-VZ_E19kS$Pz>9BV znpq9^2HAq%dH;h1J+Q$)-2oeBD#&~l?EB|#Vh|1(4-nL%{?>m<#G8dZv(=I-|8o=X zN~NgNXy%WO!bP{RGSf;US|}h`5i}IPR3rxp`$)2cF1r53z2QmvWQ@up@D0& zyKVV9vb97Kv2RKIZmw1^Z8+P3=tHbsQbs(1hn-XSmhRX^#Kk&`cF?gdAzaeEe(42(kTjccZ=jBatSx^_hI@bQ3T= z1Ivq&T9=@4Ul-2PzNVS$JDQ>Yisy1r=PGCXU;X($NChJ;EK=>Bt+WpADXWEyPUIz# zcs5k^o=+x!$<(ATx;<-#_7&SaB+AExdCx2c$d|1Lms*>QDZ=2Ktst3Im(l`46yo*v z-&!LJ!beb1�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 z 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�o{_w1JKJ1-2jFKX=VauiUz%nBC#~+$Y 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 Q9{~L>8Cn?B>Jj4p2Y{s$1poj5 diff --git a/docs/.vuepress/translations/en.json b/docs/.vuepress/translations/en.json deleted file mode 100644 index e21535a459..0000000000 --- a/docs/.vuepress/translations/en.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "title": "Minecraft Console Client", - "description": "Documentation website for the Minecraft Console Client (MCC)", - "helpUsTranslate": "Help us translate", - "theme":{ - "selectLanguageText": "Languages", - "selectLanguageAriaLabel": "Select language", - "editLinkText": "Edit this page", - "lastUpdatedText": "Last Updated", - "contributorsText": "Contributors", - "tip": "Tip", - "warning": "Warning", - "danger": "Danger", - "notFound": [ - "There's nothing here.", - "How did we get here?", - "That's a Four-Oh-Four.", - "Looks like we've got some broken links." - ], - "backToHome": "Take me home", - "openInNewWindow": "open in new window", - "toggleColorMode": "toggle color mode", - "toggleSidebar": "toggle sidebar" - }, - "navbar": { - "AboutAndFeatures": "About & Features", - "Installation": "Installation", - "Usage": "Usage", - "Configuration": "Configuration", - "ChatBots": "ChatBots" - } -} diff --git a/docs/.vuepress/ui/en.json b/docs/.vuepress/ui/en.json new file mode 100644 index 0000000000..85df7363a0 --- /dev/null +++ b/docs/.vuepress/ui/en.json @@ -0,0 +1,13 @@ +{ + "language": "English", + "getting-started": "Start here", + "client": "Use MCC", + "commands": "Commands", + "beacon": "Beacon scripts", + "plugins": "Plugins", + "marketplaces": "Marketplaces", + "deployment": "Deployment", + "contributing": "Contribute", + "troubleshooting": "Troubleshooting", + "description": "Minecraft Console Client guides and reference" +} diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index 36bc8c0eeb..0000000000 --- a/docs/README.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: Home -home: true -heroImage: /images/MCC_logo_with_edge.png -tagline: Minecraft Console Client (MCC) is a lightweight open-source Minecraft Java client implemented in C# -actions: - - text: Installation - link: ./guide/installation.md - type: primary - - text: Learn More → - link: ./guide/ - type: secondary -actionText: -actionLink: -features: - - title: Chat - details: Chat with other people on the server - - title: Automation - details: Create bots to do automated tasks - - title: Supported Versions - details: 1.4.6 - 26.1 -footer: Made by MCC Team with ❤️ ---- diff --git a/docs/beacon/capabilities.md b/docs/beacon/capabilities.md new file mode 100644 index 0000000000..e3a8724dca --- /dev/null +++ b/docs/beacon/capabilities.md @@ -0,0 +1,94 @@ +# Beacon capabilities and limits + +A capability is a named operation. A script declares required capabilities in `# needs:` and optional capabilities in `# wants:`. + +```beacon +# beacon 1 +# needs: chat.send +on chat as e when e.message is "!rules" + whisper e.player "Read the server rules before building." +end on +``` + +The runtime checks declarations before loading. It examines handlers and functions even when those bodies do not run during loading. + +## Built-in capabilities + +| Capability | Operations | Additional prerequisite | +| --- | --- | --- | +| `chat.send` | `say`, `whisper` | Live chat session for delivery | +| `server.send` | `server` command statement | Live session and server permission | +| `mcc.run` | Internal command statement or expression | MCC's command dispatcher | +| `server.disconnect` | `disconnect` | An active session to leave | +| `inventory.read` | Inventory reads and recipe listing | Inventory tracking | +| `inventory.write` | Inventory changes and crafting | Inventory tracking and supported actions | +| `world.read` | Block, light, biome, and sign reads | Terrain tracking and loaded area | +| `world.search` | Block and sign searches | Terrain tracking and bounded search | +| `world.write` | Dig, place, use, and targeting reads | Terrain tracking and gameplay gates | +| `entity.read` | Entity reads and entity appearance events | Entity tracking | +| `entity.write` | Attack and interact | Entity tracking and supported actions | +| `movement` | Coordinate movement and following | Loaded movement data and action support | +| `dialog.read` | Dialog reads and dialog events | A supported server dialog | +| `dialog.write` | Dialog input and button actions | An active dialog | +| `fs.read` | File reads | Configured restricted data directory | +| `fs.write` | File writes | Configured restricted data directory | +| `net.fetch` | HTTP calls | HTTPS URL and destination allowlist | + +Plugins can provide additional names, such as `shop.calculate`. Read that plugin's documentation for its meaning. + +A declaration permits script use. It does not enable tracking, connect MCC, create a missing plugin, or grant server permissions. + +`econ.read` is a reserved known capability. Its presence does not supply an economy service by itself. + +## Required and optional providers + +Use `# needs:` when the script cannot perform its purpose without a provider. Loading must fail when a required integration is unavailable. + +Use `# wants:` when a missing integration has a useful fallback. Catch the call's failure and show a clear result. + +```beacon +# beacon 1 +# wants: shop.calculate +extern subtotal from "shop-tools" +try + show subtotal(3, 4) +catch err + show "Pricing is unavailable: {err.message}" +end try +``` + +Offline lint reports a warning until the provider exists. Do not remove a valid declaration just to hide that warning. + +## Runtime limits + +| Limit | Current behavior | +| --- | --- | +| Execution fuel | 100,000 units per dispatch. Function calls, loop work, and host actions spend fuel. | +| Wall-clock budget | Five seconds per dispatch, with scheduler-aware handling for yielding work. | +| Call depth | At most 256 nested calls. | +| Shared chat allowance | Eight messages per ten seconds across scripts in one runtime. Excess messages queue. | +| World action allowance | Eight mutations per ten seconds per script. Refusals report a retry delay. | +| Minimum task wait | 100 milliseconds. | +| File size | At most 1 MiB per restricted file. | +| Import/call lint closure | At most 32 files in one lint closure. | +| JSON nesting | At most 32 levels. | +| World search | Radius at most 32 blocks, at most 64 results. | +| Entity search | Radius at most 128 blocks, at most 64 result rows. | + +Fuel exhaustion is not a normal recoverable game error. Keep calculations bounded instead of attempting an endless retry. + +A queued chat request can outlive the event that created it. Limit repeated triggers before they create large amounts of work. + +## Trust and external input + +Only run scripts and plugins from sources you trust. A capability declaration describes operations. It is not a general isolation boundary for arbitrary C# plugin code. + +A chat name is input, not proof of administrative authority. Add an explicit authorization rule before a script accepts remote management commands. + +1. Use a server that you control for action tests. +2. Start with read-only behavior. +3. Add one action at a time. +4. Check the observed server result. +5. Catch session changes and missing targets. + +[State and integrations](state-and-integrations.md) explains restricted files, network allowlists, and provider lifetimes. diff --git a/docs/beacon/commands.md b/docs/beacon/commands.md new file mode 100644 index 0000000000..2c7bfdd30d --- /dev/null +++ b/docs/beacon/commands.md @@ -0,0 +1,118 @@ +# Beacon command reference + +MCC has two Beacon command surfaces. Terminal commands run once and exit. `/scripts` commands operate inside a running MCC client. + +These examples use the default internal command prefix, `/`. Run terminal commands from the application directory. Use full script paths when possible. + +## Terminal commands + +```text +Mcc.Cli lint [--format text|json] [--target-lib N] [--strict] [--fix] +Mcc.Cli run [--seed N] [--tick S] [--format text|json] +Mcc.Cli format [--check] +``` + +All three commands also accept `--stdin` and `--stdin-name `. `--stdin` reads piped source instead of files. + +| Option | Applies to | Meaning | +| --- | --- | --- | +| `--format text` | lint, run | Print a readable report. This is the default. | +| `--format json` | lint, run | Print machine-readable diagnostics and results. | +| `--target-lib N` | lint | Check against an explicit library version. The current library version is `2`. The source header remains `# beacon 1`. | +| `--strict` | lint | Treat unresolved providers and unverifiable cross-script/plugin calls as errors. | +| `--fix` | lint | Apply supported corrections to files. Review the resulting diff. | +| `--seed N` | run | Choose an integer random seed. The default is `1234`. | +| `--tick S` | run | Advance virtual time once after loading. Default: `0` seconds. | +| `--check` | format | Report changes without writing files. | +| `--stdin` | all | Read source from standard input instead of files. | +| `--stdin-name name.bcn` | all | Set the source name used in reports. | + +A one-shot command runs before normal configuration loading. It does not create a login session or generate a configuration directory. + +A `run` command can load event handlers, but it does not deliver Minecraft events. Reads use the offline host's empty observations. + +```sh +./Mcc.Cli lint /full/path/total.bcn --strict +./Mcc.Cli run /full/path/total.bcn --seed 42 --format json +./Mcc.Cli run /full/path/timers.bcn --tick 60 +./Mcc.Cli format /full/path/total.bcn --check +``` + +To pass piped source on a POSIX shell: + +```sh +printf '%s\n' '# beacon 1' 'show 2 + 3' | ./Mcc.Cli run --stdin --stdin-name calculation.bcn +``` + +### Exit codes + +| Code | Meaning | +| --- | --- | +| `0` | The operation succeeded. Warnings do not fail normal lint. Strict lint can escalate provider warnings to errors. | +| `1` | A script failed, lint found errors, or `format --check` found a change. | +| `2` | Arguments were invalid or a file could not be read or written. | + +Normal `format` rewrites files. `format --stdin` returns formatted source on standard output. It does not rewrite a file. + +## Commands inside MCC + +Type these commands at the MCC input prompt. Do not enter them as operating-system commands. + +- `/scripts`, `/scripts list`: List running IDs and mute state. Example: `/scripts list`. +- `/scripts run [--trace]`: Load source and register its handlers. Example: `/scripts run welcome --trace`. +- `/scripts stop `: Stop one script or all scripts. Example: `/scripts stop all`. +- `/scripts reload [id]`: Reload one file, or all running files. Example: `/scripts reload welcome`. +- `/scripts lint [options]`: Check source with the shared lint engine. Example: `/scripts lint welcome --format json`. +- `/scripts new

    xf=LFOzQrUl%_i6n0{xQ*a(rg|!7 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 diff --git a/docs/.vuepress/public/redirect_assets/wallpaper/6.png b/docs/.vuepress/public/redirect_assets/wallpaper/6.png deleted file mode 100644 index a851589c18669c281a3aa44311f2ad085a1b6973..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 584917 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

    SY%Dl*BB=5HGWc!l9} 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%0A|7}XWt-+Nh%D< z#myz3V)39cy7;C(+|&E(BS4#lmagk*c{73SJuN@F86UbxRus=N4}l(o*^GTykk+Es zSjoDP2}>YO7@Ie^qV+J1iL(+nJp$NkGJ@$=)scc}W{Ea{4O&AsH|UAzUnb#JC2U*A z{IxOslRjW5+vvOrtb$)7@>#6c$9CUtzBc%adj3`bb7nR3j`yEO-O-G{^hlLa^##7c z+s-_;nkm=X2?%o#5|BBT!e8%O9*e%j5Oz(~O8{#t)O;Jjl1Jlqy~w5#CfZo@DFb^K zJugY6PnpoAU{`=*?d(k-bivn99K{cS$*9()4hq8X#re#tnnd25jlw14v1)cmql!VP z0ZMZ5zF`6n5`+3|c(WJ!e!(x9D1yA8wEnf|Gu21jj-RC&SZfe7ZNvE=v-bb0LeitB zn@Ku}b@yl|VPMAsV*ZUU2&}~wfV2DA#-$L~k1?(QK0Ya1BmeIWfDJFNm0S|^{*tKv zz8=2V>K|?_($Fvn3l|Am&b6Q~ng(R!5uf50A2bX;yd;kz%-~a6N|njq=XQTCLcx9) zY68QiP0f@XsB$4zYR%4KRgYBBVzP>Dqpf3a^+|R{VhM*An*LwB(}wd2yNGtS=J+F5 z47yJ6x9$LcpRsT~Fp9M-{?qu%jl39J7r!xU!|6)G@}- z9KT?wYmnL*@qq7ux2)!Lhd*eJM>?ZPETVftYhMKx4u4*Q5R`)&J|C_88 zKn-uxG+Kr3L}wy41ERwo#t`;#YHoN-NY>B+O$1iL&o@;03wl*PYC@7Ue9hq+1?@~5 zSNuJpI}88HNwgDg09&U6jR=r#M3@yS*6^`)8H-66d@75sHS*FmzAs`$C(2!+k{<5? zn0?*{@UWG+dTv>0)#=>l^rp`694d*-Qd#Pj z*&FRbC*z-8p}t1esB^3o;0&oI?V`b*3me=LGGbdEZPiXP$2o1C*PxS7css)-!4B<;l?D6HnRml>9%1%rr1 z?LY3y9_UO+31J)kWXl=NnL|Tm(AX=!r8__reFfl$#n$8GZp6`W;ebZ`>&F7YPKl+% zs=Qd{B3%}Pf$IUMxSpZr{KfFK1vb?(wldM%0AAf6In)?woo!}X@Fw6tcB$fo<}t_J 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 diff --git a/docs/.vuepress/public/redirect_assets/wallpaper/4.png b/docs/.vuepress/public/redirect_assets/wallpaper/4.png deleted file mode 100644 index 825e6bb76c140117d8a2220ee6d43f3a827fcb17..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 752437 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%0Ap-d8hImQ_Q~VGSVer6pXq!AGdd6R$mnnu=Y9eG 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%0Dmb2YZ$J# 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%0A1(2|=K;RT;yHbTHR#K`W%lawK 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%0DR!hKgAWgJ{a5Wi(u~r~;%KJF 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�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

    |ko>rtxhDB2n!e)b`djwChje7iUZpgzH9}?P{L< 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 Vu8k60cFh0)002ovPDHLkV1hRMo*V!G diff --git a/docs/.vuepress/public/redirect_assets/wallpaper/3.png b/docs/.vuepress/public/redirect_assets/wallpaper/3.png deleted file mode 100644 index 398a9159efc75c1461617e550b8ae817aaa9eb05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 569209 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¬+Kh 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 z z0DAo6xN2pa3L^MjtgY>bH4b!+9pcs}-Ux`pWBvZ7O}=N6C#p8-H9E+{f)%g>8f`w^ zy4~G|mHAn1Y(RUeySt#vMMS_YB~Y?A<4u#2fgUP5m>U()Gnr+b1w>gC2BSw~xuF(DZ^3Wf<^t+~V_C3t;=WLJ}Cmm+OffON{U8A)33J)Eeq73$JkLUbH>}V8&1Ra zt}o~?3k1{JUxvHQ#%pS7$ucc2X%%@>3WgC13)MWoW~Cb6A$N%F+CAJS{UU!?Y1DKyZaaTz7JhFg(tq_ zKy!??ZpJ=h)(w;j2K$mgFTnGiI0%_`)yR2KmY4p3m}eds`_tzm3xe9wBww4hbp4G* z@9Ci}i6V$BvbY6DxSbCCtp?v>z{!?FPbdB89PYOkybH=&OY=Pgyq?@@B{cf2LA9t5 z->1eD5qc@ID|AQZuLlHB;zm?^GFIi?bZ@eh>vyIczv^c!hBj()x_G9L*TD_y|JB>M zR_bl>+<)La&0K}l*W|BA_2>hyZ+l{;43c`4L8i2~cdeJ7E7*g%c^p)kC(bu_HmL>8 zYQ$A(bx*l!)*COu@x(!T&)d7K8OFxHZ`r^S+cH^DiI1irq4m-@gn4di;W%x-ZMd}DRljaa={c8204~DEeS>0f$bs%a1&Zx&+Wy+QZJ!0h{Zm2Y3jd`J> zyrkqvPiiC%B8=kz(JifD01MKfi4=slr}#~at28{z70R9K`gMpgr z3{y~J6h%Cr}UGyt8cF3Z*fQZ zk6+tLGXd0;xgGr@w7r*$hDO~%@iTz#6CvauZ5{#%W9#;r^SBF~rT9inQeVxl*JYSL z4(i}r+lPnADCoAG@UugRWi}SQzSI4jOqgk)oGP%N6Rex?1kEaP6eS%F9~T2>Co~Z5 z56Q>&QwP*{4}xtQn{Oamj|*De&+>)nIgo!Q$-c8c-bC_>OV_dP%-Td7VJgy78Iuf3 zZHWZn^zJJIY=lO>d^ZdpHhH$Cf~QE zDr;Zpm|BS(+$qv~j#l0h%KpXvvrQ(MbcfbbM3*Rwo*(6~(v}tlHCk&-M0E=WATjFC z)K~YfOIHC=yg{=d&ioJosX-X>z5+6X4+ghe(F;hrflRs2m4Kx>-sgNN%+R$=g_?=AFG)e8gURUpi3>hA$gKEI}~PY912oU8UqHycSk50$q&=@InDb*6uB! z$lry3t$f(eqxBpIbH!ecVh~^T<$Fmz+OWWuQQnX2(DA{PfNaG))Ep)HtICoF=D z!cKW7^InEvry5hQuPq6z{~bbwB2uFM#BdrDKs}pxWyF;1lym9Ccv134OtlQE8X9-+9pERm+wqJoi6argw}~fXZ}3gsIIvk|Lv= zLqr0(q-NS>51%RrUie2&D|UmFHi8CW$opi~{B;OOf_zkPhu>@CFN)^dX|N09L6py?sd95{iMu-~rN51z9dzQF zfLf2q0DOmIUkCE@lcDWx>2~pIhrn2r1CWo~65zA#M-8DZ3f7n&twMp77uN9oNM6

    (K{-wOH)fCN1t`Gxclg9bG$MYEl` zWn6zEe69#7V@F%Hdxy-w`niRES>MW=905vN_W7~t=syJBUYOv_%iSz| z_(`k?*zv*|aGSmI!8 zNPHR!$nm(d+W1^!c1dpxJ~=M^_^6=QG1CvDW+gaZ0MY}YNL7^AqT7*S=d!G(kHT1B zAqcs%S+gI0Zgt>zW-nURJ|2a#0rz(ykxi|09ePFge*2D5!|jDnem01(uTTW7f=iI8 zQS}xATidD?&qy|P!1LzZd>;~Srq-L=fxhr}cwU?x~{P;g6W8iRK>%re#hgHpJ!oWE<7=Vlp2=Xcw&pMFgr!&$FidxMGP(L$j;J-7uvrqTrJkY# zTx&0mGP}YC#7=}%2+!LARXEBV_6bQ|70CWyL{@&{o|^(BH+7tE4DEfQo|B3cFpaR> zw$E+|6{`yNRM496>2&aEvdgnw(cWdJP1Mu@BmV@pCdzef)sqbo^z+{dk&|O=AH-TD zYH;t+QT9>jKs*&F=GF7dXPL@Qxe1=0ww#Olr>an#+q)>Z-mVPXc*igI8;!Qehv>S< zYv}2=DaFVur)4|R_N1lVfXI2NTC#ng(OXyS{ZQD;Y$uLZJFaZD9 z;*Zi)PM+deJ{tN5iEf`=9xs7rXW&p6$h6J(xxLtKL^0I?yha`%eQQ`bXRMbQE(uFB zJp%)yqxbixvvZ(Y++S}U@?uiO8^anJ6(OaEohIiGBb5^V7P%*A5F$L$5Ww&YDhZ|# z4kDD7*EzgBot2*c)(F7t&>BJj95N1XSuNpgr$Gznv-sly9I3MYU8hs?0Sl#_5Ev0= z1WK+hF_O^q3D1}Hf}DVkUw(>!ac5_(H|B>bL*@Ac&k_Bdx&rqJXk!A)y8uijPh)d7 z{Qv$n1n}SELk4L*SknF3E$ z)RxNTTZdrrgfr{78NvGFCY4xM?le>s=x1Gaf{f-FoH7S}`A@iyg|QledQa>GwQO4N zjRuZp-3H}j!8lTs7fTc>?r&P!MuOa#f|K43>x0kM(tank}QnMkf( zOa_uO;Q0vV>^v!e8z-Ro^URdB@!9q`$<^p(oWi308|YJyC}`g28h%+NVS4qVVVFwO z;Ro=mG)@z?6|_nG`qm#je`PYTAXx}ha$u$=r>he?c*Ol`*~b*frpUGZkCfMXzbB#VeYZNqS;vgxnnLng$$9GzbC-Db$9iX4W|S_7ovH~qlK^n=_p2SPfp7fu z2C7j%RXa@NyT7 zr~GUI!yARS1ix0ibd=17nwqRCt6b=`zAtfK&wXt@7M|c=ZBiy)Z1>bai$!1#JZb(k zVaQgL?0`cBmzC`|Y<*+988zlj9G$3k3SwV8>n~GuQiKP)ivZ*G|9J*kLQZO$QdW? zSO@ZdgE!SZYB15 zPPbLngSG?NluKLmu|>`>*i_sSShj1jA1+}R7lsaUH`gW4%<^EE;!W=CqD4fc*Z{3v z9i5bjVM8F8oby7G!GF4FkWBGe=G#idSj`YBlpFh6->}`^XWsi1fM{}Gvm;zJCYWu+ zg8E577WyI_&^iihPPh?a5?Ya)0l=*#j0O^`9IFyG3s@b#PJDi=1nkDleU|`W_31enu&*cI#(&mfnk@iE|h?U@qTiK@=u1|WawzgF{1qpn1GuwpiR?u?0} z*N5+~P^~3Y#SV(~H#h{t%o5VN6hClE4OdEz7U$`b8(>ik2>eleXxTzbBKsMi#MGq* zg)N*nrp$bB9YW^T;0D)OirhWkHCv?!J0fv1a%WD*a?7D@#mrV*daU9i8UH!W_VW5c z!(bA_uE}$G|8XtMWWk56FC#C2bkE$Vv5t4r9%O$b&05?tN0T>bMxfgcdWxfv{vksI zJ+@lJn&h?X?u_c<2i|5|SM*DHSRtiN6Z}$+H=ClJ2j5izm|20w0An-9kM29z8-o9f=vLKA0}#;@E;UAM4&DIf}ZK7 z{ybOcjK1xab1@#B(GNHia=2FeiA{unOZFPC0O$%wEiPAZ&T`9dWe~qDhBW1v>?3T3 z2ypCG4l_9sawTw8Kr}!?bwFN9A~{;ePm`*IFlF)54qElB?B^A~k}mq`?8Md)r%I5i zy}FBsz-)arfEi4z0uoC^$kw1oFdYOzlYygmS`;w#tu}Q5=?)5w$^Jo18KcTd7gTkh zYA?%_^j*`_0x)vaG0%c;+0LQvfDs~$lH((ABI^R`yJa@*1{f0Y_9TdV0vSXRs$b!; z0!I~VSO<6EftU~sC}sydhR&jwGq1Kv3Rqfd0I^{`fsoi*gEZ&Dqj?Frf)UVLjez;@ z!Bmi8YOw41O-`0mUkokau$j|t2zP0w>Yi6v{YW{)X%62SI0*39wu-dCZH*yKm$AxY zW(1zDNby?x@|`LZ3;XB)fOTKnz|DnuNNi+LQ7?=0jcU+lR7ThBLL);zG>71a{X`pP zm>mfx@Nq~~8-y@jE;g|)A&QN-^HTtM4ilmVh5MS7sQPJFHc#1}o)2jMwV4E7&k(b< z_ZKlo!xWqaF@v#!d_Bia&!)uC_0cnFO@R>-E@a5&C#K67WTbZRnZyl%xep%k&K>Ux z=_X!x!iI_c9MTb1kbF}sM_4(zO3qR_AbU z0JLtI!SvW%P^vh{`8mTI#pMS%Ej?&Cao4Yi9ZEMnA0eqr=8+=?a?x`%b6*`dOH)mX!-82FwLO1{PKXcx0KxdUpzb?^j-Hh z9{G@A1uIRUIw5_#76i4VYx{QAdiA)~>0g5glU?szg2UGOf#<&~s=*s`HM=`O)PZU6 z)>ir(Fc-D=;Y>xp^jP-cn11ZRIAvc=+`Iy?oSfMo0Gfx1;ISM&=Gt(Yd}#W{>%zVR ziQarWT!5lBsfQBB+AoV^kpTa%Q7xa5COXQ!HaxrE#jYw(#nfw2U?8gAucHtjVD*WJ_67%-GP z%DU{5#v~edqM#HwYpEb$`m1b-k3V5DoKdX`gWqC6$@IId=Bm>)0|2*;`1~K~~li*}^v& zp&VOA9YhHI&hIZcuh;XspU=6U&vjkzEAH}?@p-JfljRJQyKMYel>pP zAvl>GlaLyW1k$*ylK35@+jo9!yR|8Db?q8>eI%f(!b>I}CJRUTL@USkUwsQX%XB^> z#rbzcP0WD#{G9zp0~YrDzJMIoY`$>RyUBj@GfVfz+FJ@3PbLQW7!l{8ok`H?e}`mj z!hPOM-=6R<9xv1imay+rGKJ41JI>{2VVKW_G=482?S1k%OY`B7*aB{yhFqWq)fAwa zF#OF(mKtS|zD>?>y6Kk_yEFkS%0ulk?D$pOTw}5Zg?n1`WMTK1Im0NAQ%~hhmS@|Z z0%LmuGnZ0llIATDXDJ3A+$Z2?i`oR!mtnQVzoRzyOKV48wiO$bR85*=g0Gii>M()} zi$!p6jHm=I!e0#IV7b^?CRa3Vi?KZ8kK zGNghB3Bo~Km^dOUjSA1T)28MT=5+sWKzCm|_ph^KUzMrJ6)F;GnT`%Pnvu4X%eveA z^qT+(#EvjjMg2;%_q{T%L>Zo)mO9#F(Tuc<^7VSCLD_(no3h~7+nSumuU=9)REhjH z9V)DyVgM#GFw|f`m41V4gk6Y?wDUfp?9; zviVlrTZ1s4rrD4=*WSq9Mg4brRr9VrUB#01j;zV{&IKu)#g&IUYm>L&^-1Qzmj_=p zAsQkmocDrX`Duq1xuDOa6JU6o&B^=YO;zJyVEDD1*6_=4tG7o3|60gtJOcCw@emrS z-TwDn9}yfF{PipPY0e7RiOPJ0UYLUiqv``5)ZdoPVtN#!rzoThr)NIiqM0%@HK^%T z8U7$iRiD`Acw^bZWtH;|E%2zOh)&i_ z4-D^}48EO@l+V(Nf5gmJb(|{#zX%cJh#x4makQ7++tY$ie&I(>1jcY%*V4R)nWzFt zCq58{=&Z~2A~+jb^$xAzBr7~IX%j2CIX?JW74E-a`n}zh_&ggD(_S;{!pYh4b~d4d zKu}x=4GOKp(}*7_`Xto)a-&9hHwGYU-ssnQc!=KjI5IRea`tO8zJ^T=ENRj~S(uK{ zU|9u)=PoddV*;PjtC687rr!6hN3`2*0rKUsiJpz4!4>OG&ABqruZ3xmF}N_Gj)OnH z1sTKaizmS%5guaqEaRUFr7_2?y^46;gY_ZNQvV*2klu0FHV+J1^~cTnA$V_68Qwy( zfB%iY$wogJ38KOxo1dSx`mPool- zjq6w$T5}hqE3g-()4cT{8jb=}cymq1zTt2rbup7E@Dm>R>+_UYQ9+r(N~IESEoOavk;D<>9lEdaU_|oMSFweK1T5u$-nn zwnM;rK9+~r$DS4zn)jkA=0LFe4yw{f#C}{Vrt>G(*Piv%aE_P+;c6a#m(x#nAbEyD zUD0dOf%88hR*-?APv|pX{Gex0e4Co+gT+zO;oDTXU33d|<_`-2?etmIV1M7uM?mpn z6b@Cb{z^Nq>#+W}CAy_@$Y7myWD#u?1U$4yV^F4{Wsgc(i`p}l*r=X{>QVPT*Ict<8Qdx=kJ;Cjf$p}T{^g^G+ zzi>d07dVZJ+9Eppz_*(r_)(m6yW)2O+fr~@qSeeG*6;))eIs;z!-7n?EPh}Q(Ls3# z_kW{^AUw1_Wwz`qf4_rcUXCL&Sdv}V#ZyOpNUo}$DE7r}GRt3MSY1r3_^3r*w0V<} zvKu}PYO}tgq~>7=D56Jx9Gm<&kt-8<`Q%|QN5>-24a)6 z$lGGzCmq=C|E~&EH5Fx$Z@tl)q0N8H&t%G!JFISsZZ-Ec{h@66QV;LM{%P`quVB$Q zCJ=JPn`^7pk7>~3QbhWEfDICA4-aB;MNLXw8( z81CPcw#!@Ny@FV00OF^bbnjq0SJ46_@csAB5;vK&(# z2}2)VF9O+7SkFG5A5*>+_U3v^Y1MxS=lnLMIKZ#SRel8&;okSh|J%t8$_dX%&|K*s))>o%AZw%}dt`b2;gF6!++QvALt;xsTDsLp5LzqzCB->;y z**UN!yFJ3lTnUzatxg=&{w%CBnS=@3GWJ?P#Ki{S&(c9MFpR_4vSCQZIH~gI|0r=3 zs>Y5Z`c^#8^Ddb)zW3;{?vD2+Yr^aMdlLHpE#YE@ANLs96wB@2A0kL>=>AfM2N9Fw zLCa0nLzmCegzu}6pl=bUDWmW0ZGwb2(XE)_;fAOMx+H0sn%?t6S>sNgmeo{PtY}X$ zIpF#8DBjV)?U01p5f{;>^AI61`rcGjS5WtP1Lpx6>Ha#-_%ShGGd}Vw6>Q~|2?JSA zE+hOP#C;7QI4pqaZh+zq&cpQWa{kQOhRU`JDcgAv{IZaz*-}A)3i5N5j3lub7v=*! zZ<4KiRi=9%!A_b|$D#xK+sA!Hp^!a$SiR-z{vihM(yO+>@#i?u(D1|cr!a(5a&IXG zx}<9d$o{&_)-8o2-1(w9R)r#Ym6)I#OyngdDuKj&GfWhjlE3Z_{R;*Y#DGErQ5QM% zT?zbsYQnn7^&CeiO4kqUW4|WoGgqar;jQcZCi=BN_E8-spj?Jv&&)-wM$AC1^m zFNWstsYykdhs8kYNj0ep=RKbz_WqB37u$uK>n32)j+LZ$qw^b*tAA_7+&e>Ql4SVH}wP^}WC6~=W>*cNr#m;3lZk*t?VAYrZxWa~0 zOIh&3U`{kBmsThS*EeZiV)eJ@adS70w~EV$#O$(nz&QUIjhLD`Ramj(seSN1)1B>v z;#>WeAa9d19a&9WwXh;h_R_9@pq=YTeblzSD)+PRwkZ%5*#_07+=3qeSfd&FyS?-6 zC6;|`Qd@JD+I@3^7iqB&FkHkV;Q5OQgwa70eQe<_Q}sdEU`T(6L7kWJg7lkdRg#AP z^g!xL)eEc%vsdgbry=A&7++XeTf$sf#cdHzDZvkWE{q*u|;)HCXjryouo__PFp8`49HWIXOIco$?* z@VxmUKjQJ5^|?=>nzBVHxf~m8w+($9U`6Ue9iSvnBSNnKq4E<4-YHmku)n`nqVNxw zpCXAZBkFilpKQff6X~j@uBNlf=Bc5SJkOwa#mbWej&7#RuLTrDF@KxEnTG@>N*6}a zfO^Ij{C28rU6`+oi~!Vg$M&2~6JVYy->=q@+5J{0dge9*7rxp1XGt%4W(zd;`)r=< zL@zqy1V4u5u96_Wj=(w@_S+0@6sQ&lOgOs<5Yl9d^#HYFzwI;5*&y6|+i?*WWjUjv zvW|m1bp}_*3%QQ=FU;ms+6vmwe0+>nj}7Rh$~OPYt}9?78hK0+ z_2<&2&fX^CY|i=L66VCzg9Lr$4ryF5j|W7KnPNmzN^9x3iSsyw=3)~1b)%3F3mpSf z*zwmW$Sm8#6{H@(vv9NM>=rd>j@%2NVmzX^3@j&#NtF!uBLy zuE0A~w#(6Q@3hV)1CSxV(A40Cy#=&f(m=OCwM7#Q^XwV1d4rc{a!q+1ONDmrdb775 z-OLp65b2-P(b>&z`?)8HdQ?CwL}&p%R=FDSr*!od{{y*@cs2B~_B}kVM|jlAyHj>F z4dGX=zQ?b|pN1aNds%<$yKWLy+1saoyhgwL$u*`ez2rgZ)>ijOkQ-QhAi{IW^o37; zPJ;F`hZv(7T7!EEEryFvkzLPPLmU0#KXcl(Bw?BcoE%>|q(^4`*$bFMB)UCE!Y*Ya zQH#-d>2cAi7~Mm8oP00+;k@SBFFuZT=DiH>C+f8sxN^MjDXJZ{w}!GFbyW&%LO!+` zj_4qd67~C7`TGJ##BySXdhz(rHODl2`2Be{AaZiCoU~uJ`!bcShnYibBve=p0Q0A~RoHCF8BRw9^YtXE6^Ys3T^FTc_~07+y*F)$Gs+WEYHtTMYNuMnyV|lnpM6Uw6RXSgUuxV*Mb&AFG*OM;90>; zoirR`5G9q*V{T~IGqG*fXL@Ve12`0g?c!HBXN2+$Yaz+s-trxYBpr32Hs?vHp(>` z?wjSH{f)Kv42L{tbqE!@#47bxAOH7XRh$rChRU=56JPS1c>LJ<)Sh*+5fv-s{I|g}CK$rLe z8w{Z_vgFnOBuLR-Fz*9r|1Gb!1{^x%^5K0UT=Wo=g+!FU15oVfy$za@2zS}e-+$|w z(qNgu^0FdEpNHlQ6J&8a3HF?Mc>u!+VaVM9hT1U$qW|!4ahz%<>u2UPyMe@ z#-qHh`Gue|0cuq7eP5R+P}I15$&7x@4?}d+``7?20z_YP<9Zp(uPc7&fDupEv*c)CBy_?O!R* z9l#1d2XASk()3o0k(t?_8`L~si$1|CB-5s5is3Ncc&xG#G4{C8Z+w+6{+U@>@^&U9 zhom;p8Ngv^j(^_XYfeW^DT_gA43Ws*FYvL|BFIv!rkWwAYl9;Ukagda4e(PxROmr5 z8*BoLsiVgNK{-Om2Qb+&!gQT#;Qa_l*;0j@-4z;^FqksuZQn(6|5e94?^cI--J<)x z<*8;@TWvOQml=EDl|V}0CA(*eV*NkBKZxIEeGJ2IlNAVedR0~rT*Ja`eovH zb_ApPB*};NZ!r;G<)TsXB$pbu;KH~eTK~#dDwPSx-o@95!5IEXfxf46JpFv?m*mHE z8v@y1FPU$XYy~unOzfJFtqq@k$J{Cy@6O3&>8 zw1~K1=gfHrF4)aP8`Jfcw7cYeP?UhD7j3IV5!xF}HRLjW?lWvmsH5v$oq@p7kvn*8 zTI3o$Uw%|Z(;z%(`?)|7ZeJ_H{YZuEZ=ht7AgB!O>W(onEYk;p7bnRr4N4q2BTekk zbHHK>PSXC{u97@}E#g8#gPdn&G~938fTj4i7v$uxk!I>YxH-#oa=bh8?jW`2TEO=A zghoEoRzy_Tf9lq9Z}Xm9N&28v5z;Ol^aM2C0^n}cZ~hb+2l@0%sz)paKUy|MyyzLS zs~uN+thxTQg0pPTqEPH#TkF0c+oTBSk?fFWIx`kM$A=WXil%n0LA^Zl8W~UAdh##* z(n^yUDtD?1wA*=Q9LW+lEYx8#;933;%xOJ9KlzS*W&gdd%>wDD?f%*^h6 zi-XhV?k;Bc&uRv{VrSUOH*>29mf!(WAo42xi=d{sZ#U6u6`hsjSs+@ch!_$F*871A zc5+g(rPLU$+pUI^nMOj${{~Z5EN|0OMu{wE2h16na4FRa-ErwOw5pXR}bp3A-3g=~5?v`-jkb3(PB1>oK_wrpyW>c0AJsC*LK z-QLzLU30&VodmI*YZDdgmPoWn(Dw((vP+$%yq|f`2%VapZw1aI40-)B{BZPlt^_04 z8u}H-m|}5xgkSe^e#b9iq)#g3YZ#a>Xaz;O{q&G}kxxiduc*fUw~G_Y8IDCMyB@*; zd1`1;3@IqF6AS19R&B+b+*C;RB?uA!tU%pt9Usfy-hY);6Unmoltj<%*@FQz4(18@ zCw>Bi<&5s(32s$84IMo{ngy~{wV4#ZAvot5{z^TrNW8?w`c>6wjh_BDI~V)48bn=U zlNtFYyxf5ogya5vtM>Z+Zyfa7_y#zJA?YD;7I05iCFwM;{bv?nJ43@A*QatJ(oaZ+ ztjhwj?*I>hMhDey=#=~{n&{ib){o*JB%)2ws*O=Z><(U#E^I{{Y^zL|if%`or3I)a zHjk(k95Zy5EjUv*Y!RjiNn3;_kHk>IMh`1^?@Qh%^|(X3{DKQV0E_nznPU`DGNk2{ zqL?&P0x=0he3BsDfDle@pZY>D?8Pl)Y=VR$?X^1-g#_Kfn{Y|Uw+8L_XCT%Vuu>UremLq$T1B*miA8?krvHxF)7rW!4K(QNmjOcVv4DLr3zlE zlsM5p6fw(*5voh;Iil=r>9?8_)Q+E&wo3<>gidi40?Ysz)lu6`hZS zotwfY3pC6sTSG_?B?+ym)YQ z^e$QZDh1-;+td|YKas@8d)6!AJzcrF1i_V=;VE6|M)X-qg~bEnynfZ${1^j}!b%~@ zDsmh{=G$C;dzJH}JA_|ROk$*jhuFUCnozUdI%xj)z;3~8HKdjx?%tp^pc>YVsDGJggES6*K(!^ zC`Mc+iiN#J9?7OaUG_`frVnMc$TR8U!8tQw&z>oqv?PppasI>WiQCoA-0;a1MA-#D zMaY)(eH5~h1_kr}o~Nvn4V(P%XMzRV{VrPD{3_x5kgf>Nj|PiTE3D`G6$#rl)y+2e zNeo%%6;zXYf7uGEC%y+UFm+Q6PhLJ5O~59N>WBR|@Zgh*Xj(d0b8P}`BAR|K#qbGr zo8ob-e(VEVJe3DenXB9#ybG!j=KrafRrEdP=zsYtm zyD=5Mc9jv^$LR3In{SEJM-rN_MxnSyC-m^KgLk}FSID$)}X=I_8I*SsKT zIB!ZUMuObSzd!>C34Z2@`qtGyiYdPyqjY0yQpT>Du!P!cc%L%a@;rC41|zK3&N;bc-IevuNn~@Y&akd4u_cNNFo$ zdV9>r>eWkjd{jN~u2R&pjPf>9T_~^hqeW@WhT3_LY6sqzV5UH=LBMczxP)X0X! zO|h#(@~Y^OqnltH>F6IdqEVwT((qH~(q8`i`Gw$WBaQhWiB{dpmA9f9Q}zOK%*ANCO{qPT)Bi9ldU|&PXs5X1wjE z|H0&D&I}h}oG(qa7%Vc{-+r{j7f?*aaqJU_4Y*-9p6hC3>heZdtmb##sDDA7jL`z_ zr+t(*{ifH$e_)tgpB@2Vnyt+oj8{v@?GlLqW~K%_>fAFvuk~2CaJ( zltq2}qTTS0YvBzIF?5~|Ut1)xM-^h^hO1bhVgh$0WO$vHeO@~nTx_4i{hs7#1_zbh zQds*4B^q6{P%ddy7LfXz1;)?{bgGb6pq?nqIL$e%uIrG%_kaijXWfZG+=_m1cQC2n zI!TX|;=2m;dP2-_Wk;^513P$2hIVw>*pdg09T<^2LDbXkOAldQx0B%rxcw~hZClibmBsK;=)M@L2t;<33}XSun!gucb}U;%(z|_7cL{E=hfZ|{^Sa})_Hed8^y?j_bRSZJU$H1!T;m&RP4^b*}zh1D)u!9uyicr*nWeX+$^+(p8Iyl+ zLJG&lBW|$4Vj-kQXC53i>3wbp?&fcZl}=hi4T<%X&U zfBf$Q@sK~G^$x&DA}FcF*WRI-()^gAa(LlpGxkR=oeH9 zdFxx&NS4{%=)5HCt(EnLvb@_G5mQMNv_72hY|UHn$*`M0`Y15*Hpo$R~J@=1d~AQW(J~J#}Y0gKm?9OZr~Z+Sr4Rgx~v=0X@C`E=pe;h zM}5D_H`x7;zYwxj`ayq+)2vka)3o3F3M30%+9r#c7PyGf65PDT>D})?Rn>;bEFR-( z>?5}AvPXUWz{2Yn#?Y^wQtLi-==1v7(&)`jLmOMEj7*_Fw}TEKr>w51clBgo768%A0$#;S57oTeaL@|69ZD(x`YqI&TJ2iUkzQRp*veoyhoIJelFh ztwq@{aVxXw!+mA^BF~IRc^ihO7$4_^x8J!!&F{EXo?;m%5={Ssc*eKn%7%BBAT$y6lhRO48{Fdo{a z33z8}JZTk8lXgA}*?MKK)x?t#?;Y5!UOrn8(~SNVxXJ%i>-^U->CpxO9dvabProhcGT9o_lyR}}>PIZo58g|g@)z|-n2~sL{ z+7O11qg||Mt>#0hmB}GhxWXe?3Ka3(`CkOF>2d@i)X{e_0M5_$8kU6`H&^d`0|>Xz z1LKGL{Af$T7~VT3{X9=K0Nb?HjH#ZNy^Jm{zN^HtMdle6IVQcD!as?#DBoaYk%HtM zV$t+D<3}^|p#=@jY`r$WLWVV*7lh0(Xzk69K~Xqq2ps(%W^Y@|Nc-G5%|pq0=wB*M zA0cbkwX46AFC{c@H$aKF_$X1OV7#6 zKi-rTmm75VXOML`lJ_=ZbA4{$_}d&PSo>ldhJq3|(!B%-i04YuTbRz`H^lo~=w2(O zd}%1(3?xM=cw@nsC_?v3m_iMZR$fsgdt!_Om9x!f$PHAnI9w;#9#Wf2V61qzi4W(c zz)xuvv9KB*$sJ-AvssR1GeVYEg*{FKWl!^Bf%*>;Y~Azug(K>HAstYXcQU|QIhM=4 zl{@}(BtbK^aW=)CdO3=(UUg4zyu2mqIeQ)?;t^GcSBbEZ&wG3IlD(N(J+M~d0B?%z z4wUPY614xfA+&Y*y2nBpj?s1$aUt)U{?GcuNKn1yof{b|MgvLvU087aqwQO;;Lk(! zsy{P-ZGU3OKHoXMcHpKN_PG8Q^jr4o=Vbt~C=R0FPD29>eK|?$wd3cochWsFZKb1N zp7`yPsg?ZGZk;bN{fYV8kDs38;|pTGqz@gZ*%6-R$q?Tk6tJb|u(%^vKi6}TG&-Xn6GOg+4B zZ|}nPZK6&uPSuIfk|f4y;%U2jlHxDr=|{hiKu9;O%q@_8#7Vxwcl0Y_=2bQRk-Mr{ zaBPE48*b0w1IT<(K-1voOsUgv&lQR4!@oV#*KIX_9qPLB0^&)Q_FJQ|{gOtNDW>&o zrYXa*E1QMSehmvpT*ya-#`l}0K=30TAO;1prrltq z*qrP1^d$`@?LN$+Rc|J_=d)h{)1#w3-M>>LVs#Z&deBnQ6H2ZBNFLYRLWh%L6)H-8 zuEXWJ}ik(p&Nv>8Lrn?^H?6peDQ_?(o$8~_`hmtl|cBf0dA&Mf^w=VA#M0@A-S z91<1V@rg0jdc2dHelCunL4`_~(!aC(?@J-iVsfX`B?k_Aik?%f6@h6@u^AimK5A_; z?hiR0QjWM7Q})I}f8@L~2|gkV;3%fwd-H;t1b$SBC-vf<;RDs}wDPiAax~KK0`Bm| zqYTJSyQg8^ObJwN6oaP4gtPYVuP$9SRM+dgZ{^YuSk-So>g$<9$xtHYNJA#6mj!^c z_}iu2zMq6W(KSnveAr6e*do(~buS@6VEtG~w~lf2FYB|{7@}f^FX1x;&@{UeL02>d zlBjQeOCm9>sFOiPM6^Cwl^lV!Mildy^H7>_C+EA3SbD$-1Q%qd3OuNXks0P#NrnuW zn?oqOKHmWv89~(FivX1rXozj)G)=&FEf+WBYyF`a7}03tBpV{))NYfJ4$RX1S~e%K zZ=sr$Y+?2ledO6F^B1Hp8h!r0P`DofZk8N4KW*9?C7CbN<`KDiKBY0ooZf;yZayGN zt(P?!xBJoQwwc|O3%1Nz3X|or z9%f}sxt6l>dAniDcGKaikL4@os<1+6O^@G~7_N46pmPV7H+UON-O|dP!6mToR}^N$ zt?k1_{M)h!^yWe`m8!QH27H!&A~Y&cpM&`T*~)%r2n;3i=f zN%pBhUizy2SbnG7Q|MFm#}Y-qch2m<+cy46O4`u_Kn7jef`pbord2LEkoi~Cs;29| z5^23vccNJ{uq`PySQtodOzR|#uFIkj((yq-`)G@ZpBy&o)LGiO9fE~*oz>Pi-bY*1 z)%Abx`$mDb*5q^361x*5;TH0wY#hflc`kK9Ke>_s5sOf`Bkn>5C!NJZ90gfk4INCa zi4J=TA$@eROi80}_2Xa+7|C~|a!4-Ss&1!k(2H2kfOBV{mHldIGR~;*M!^-3Vtu7+ zi}i5Sc^Gw+*vdoPJJAg|JlO&A??3_++W7gXN98n-b1nJZn_L@RzZ?unre#1EC4^bv zLv&U6+|`fQCk}SkKb0}=M=YGv%BoQww7n1gD=mpXs4HT9l@T>=-$qD%q=tS9(%11# z?$^P^yk2_Zp;LE-vJ_&L6dgzm-ZBE29?$W;JN!@Q;zYhy5S1*N;tblJ0Zu2^BXl8f z2`OHC4Olo$^ATY%(~Y6Yc+d5G`E1|sw~DInFx8QE=ix)%RGwl454hrw78yY(N? zF5?>|S?Dm;D0(>~AX|pThA*BFyNJS%EuC{K&i0 zwv!9)0(fo)K&x_r743gp`<#XQ)28e|@^Am4(@B1jp zjxiyC?`Mkips%h*J9Fm zFiwC>5n#R-^c(C7X?py;6%{Mu@(oMZo*6$`Rz`#nQ4q=zBI2w6ERW!J%6`RQSAokL zShX^qyn`BBG(`Pte_ZU<@{57Coc=yrcu|w=)~|OL$_B7fGK6<1IZ_ucMjeX~4qU9s zJ^3`H2Vv{xg6D9~zwZeM8yk~=ToOR?!KwNwWX#@@bX*^*ZWe| zEg60#`U7htBTbOQ->2Djk1+5vKn){3D2*GDrNodyD)(|^bkO2CKe*YqS!<#Z(|MLq z@qz)EvOP<6$Y`!3?Pa=A8vb`hb`alRV-L;cV=Mo#KL;3QQ~Ex7i;2E$O?Fnii`|=< zUX(?(i9FNLPnYGcD6j;dST{k&Ie zgj(0>qbJ-oHjwMd&s)_~=qblUo-4Sk$81-ushzF^9#qOB%r zpouqv>C(9Wd>Od4rRaPgKL2<>a7-yk2@mB4U(r|;lGEyFZ()I))4ZLH zuqb5M%GWw-iMI3@_Zf$^&GYN|p|i82qZta>^E2rJC0$WKdMrFIPZ|^`MOWW4_|6%c z`?jLDLm=>gec)@G)M=AZ?7G5&Oen9#vK&(P#RrkKg}9%r-#+LPAoTt)eP$rNJ9H)G zbj|c&sOa|b?a8SVms-@_outQ7MW5xL7_!g-Y_V|%a%Mpjus1YGPfeAcCTMD+JN~!_ zlunate;rmnCPh6JXL((QwCafa=w?q=G^`s)jy*&VjVSYv7jgL!@%RsBVAV5%UYqS? zcfsT+-Ztn_xuAdGM>Y#J5$JF{D`+V=%%s6MwGdWHC*~Z@@pm%eh^`B3b~p499wbHhoYEFR=P&7| z?rvD5!Gex|u;Yp$@F@==m*oa zw!HCowk>nHt!d%zT~DqmTE!@l{DBYIP(X1KMjG*?Z_bCSOwEo)h!KZUHBmt7`Lvc)mgkg%9EOKZU+5Ps8fd$%^-umj0XnF!r43R%y`- zLTuMc-u{%Q-$Di{^t~2L_UGVwe^I1(QPq2LTmJg|yL8F6feoN*`qdz9Y(inYVE$J2 z+poowCM##`%D^$kye@*T;}?|Zyl+-*j$Bvmilo4NAzf-1p> zQFzT5HQaLq2Q~f_1N%`pR1~KjuTYJLXcd!Fob*nNe#rXp9p@kI{ij(1$H{HPD2*+? zQT=Nk!@_0QqQN$K+!j{cdY}c!75%xkf4`IcF|n}+w34ajoqzPdxKfswx=u^cWEkG= zsDmk5u{tn8i!?}HI)nYGN)!*Bc{Kmx!{egXU_+u5R!x|N&aY1v zUWQ479xms!j~j@qj!Xb+qN2sw*MrOHca=>@ay?9^ojq1x z?(VH?CF&KFN_-(P^1VkKuGmjQX$41yJd7#MVvmgf;F$0wwk&z~=KG(%$VcSf)}{LW z{RJu1=U1^*&~CnL=HGnx@A4xx#7A10T~{2q6umDE)hyHg&CB_Zc9Y&`_lDPeH%ocT zpg=bEJro*6Y4YGU-ESnJ;$}9;WJtho3_ulN?yd_@%^l6E#?UBK6wngh;rm*82AnB)%#VJj(v9>z z?gW^JG#=Eej&m(K26N-Ya>1>15~T)(mz;!eDDLZgxmWZB$YM{@;`>;JZ9K#Spma|P z$TW$Y{DFC&PF*YfVMUJNNCRAJ8nNGwwai4u1ZeK1yO5-G;cap9ZC_4<1{_3YY}-`< zxH2I236Jn_A>WLQu#YXEb}PJDdJ7aE|42}_w21E?bnezRB8*ZYvGA>U*!xZxXJoFd zMpOjBL~iiT@znvV=*R1DB^+;NZbC!*>7t3ZC9V(NaL_CxoPAa6A|5H;MJCR#MPhSc z2d1xjGuMrzL$@CZQ6b~!D(+86?4;nM;iScpi+fC?-cRe2B+IX>kzVq6IOz1ms>QM{ zx39{vh7Sc^DO5dkSYTVE$kb*GC$lF&v_J6L0cT=@(c}2FOFUcuNokE4)+Q95$c3pA zMt-ZCI9UT)w0k`qu6%G73~^#&Unl*dhXkSKLhX!G_rtSiv3U=NGi?e!$Rrbcrm+p- zeefp^(*HpBS<2Hs^K03w6!bLk&M!3YX?CH1C)`O2!Jj1W(DYpMA)TuoonTL&_wWPJ za5Y#VIm^&fx5&5Ejlzy)ES2xJ#WC5&E-QzdoG}G1|AAA0%#oK#!Z7)8#}P zMH=M4^Pw#;EL1-U!Y43XCFYbT+W7AD!up?pJJDk;{_kJaP|Z0Khnd6NK_Mt26aKm> zF6*sFp9}URHw!qlan5hZdQplqi}h|Vp&XrUjh)c%(~&tHoJ9nX!~|}iaq-`yt6BB| z8!bK4c8R13uu0QO+(mjT5d1L`?IxhEx|6J?*9{t4=nk zb`fjE%rnOJE2@U+sslC#WLKO>HauYmG;)QCfiN8JB3iJ$`N6r!3n~-sF;>cdk4xzM_F^4U$b_7div_@nB={AW z^hvK@K2u#2Y&?scj9aZf8Tc!_B~J@C+gKR|D(x8i>OJhHyv5yUpnf=Kh zcy%wgX0I7fm*`sk@OZ<7gZ{b24@#jc}Jlw#x*c!U;@SwvAfj+mJ!e zp47a&-9mnw53#^#4vb&qz!v?$ls5)mVks^T&YVc0Mp~pf%w9f~&-F4P&SzVQ7ALlE zLFteV%&WMY5b9)2l5Bjcl!D2g1L%25uKuni3-%5bcKt<*Ju0p=oD?#(i!mY1A+csW zHAmK#Ex(9T_Az_3!dv&HWLTQ=dt&0ts4fEY^?E#vgU#zFCT+WQ%MO$|Mgt7gD0p02 zM;2Xyb)&XDN;39V&;%1s2_8!4sCg8GKaaNu((UOaU#YMXEfC=ys2K8a$rVITz)1C1 z+JY(WbVjJbmgiTrFuH;W*t7evM9UEv%a1vai$^5B;mJ7CjtWm!G+kArVsIL_K;T9L zIR7!|0~R#kLV~nn(5CKIi4@bZQSamb*zBhm+!3`b@kggz@bp<$~yEURNQ8(U^_%#>2I;@U|Xb0hyK;G>JL zLtVjlR@gZsM2_wG#IxW%5G9P)6P$lp9YRYU6>&0P;-MuZzuEhZx_pfP434(8Nu$su zgIecU&^TfSh$zp1SGN&BYt^ReufD70GxD)}_pirEdexptPpG~ZuZsn-H11uJCZ&24 z9y8H|=~ovhJK%)ME8UYtDin_|!Gt%%%_BDwKa7}_CSU%x&4yNF7C0jGCsWj_L{ZW`xP^mg%KaGA(q}6>?#mNFB*rlu zn?b}jzdoAbL<|H`OcN~q$n{dU{q`*nmU9cfK)tt#iwTYE#+3jr&K_?}2`NA^K96J&;zvq)Ox98sl ziMoL-NQy6AovWhQdL}c$qe{^3s^3Bca-F=HXIpaOB*)CUAFgPdmq$9@sr|V109!5M z^xqa})P|X+C`pqmlA-ls%pT(nyfDR+TUannJMg|G8$QHbFy{XGMp{xg^M+n!5)WPo=aqd5WPacahA{{AgGQ$f0!Ou9%TQp@qjujS-=U8M{ zn&Q6Rt3sAVoLr_w1RI;SkVbBgKg{UD8GZqIrYnSr-Hfkft^P+y^fuE{G7dYTTQ3VtdU8cWp7t}oVzbj%dNz*er9=+d_`mIR13B0d zqE~t}zlo*klHvz~c+|6suP#{=wj-~XTd0hytgk=k8eUx}D4&l9`FKzVo$d+tUw&VZ zYotQQ_rV|$j?`L(R-bG6gp#Dnk8jV#TvKiuI>ggz8IcCSlCd3*kS64K2b1+KCjXvk z95(+nneU1EL5$%V&GiKr(Z{XJEGz%U(LyKU-nU`2;xe&QIH=4X#^>$(OuH% zyZ8IP?cBfnoGbp9UM9S3s?XO6LWjZe+Z^zc5K9}R0TrR4-Z)IN{HR?;%e5XTp$`=p zimJuGi70MAx}E4Na5glyE#j7cN(nQv*ZZ&u`T=-(zXhblutS_6d{CZiudK03dPQ!| z7;$_gePXo^5&yfclkJ7M?K}Rbwa1OIF^mnME1=#4&)2WH93SKllAVFzk6k$5h6(bsfO;Ap@ND&{ScTr86jS8q*3@cF)%S zzU}KJy;~7dK>lqgHRivOw6n9n=val9vU~qk-gUA{2hroE30EPG_#Luv^i-vyRaI**zU}kj)N9Up2&sJ-gZI zz860Yzz$kfh5R1?%QWe5lyng(7~WyU0yk+>k?+mQOr5Ib+k$4c*gjIIDk(o%TrDhn z7n8EUT@)<@Fdq!R>(beBhOj(+g_}u(C!JS0G{fs$$OXm-`Q-FSym)pE^zbSei6Ag5 z1`zCPgWJqKt%+mS$U}~&f`=1Z+Ljb~=w;gG8xHgu{+kN*sQ;wJp>c=aJhoRxRpWuF zt@c(AfqOF*dawKyn5e_XXiQHJ2z{`asFm$B&p)`u3yb~w9VVl@_8e3wR`7-M{O`*` zTaz@+s;`GDGJfH57+96F-Tc@Y%uM||xV~ifzKCDYvfEa=q8Ppae|!pAJ`KtLcs;%L zU1P1S=8nU05xA$q+K^gaL?Tf6)4`M31Hj*k_5$$#BcjfL)Jo9Q>kxe%)1C`DI5)I)qS_?}AkV5}EJR5zE6;8t zRi#s}b;jZWV(}Tg1ys8YMOGzqx7i)omhf$>hADDmS$H&It0!{8db{NAA;0S~o_?&c z^X5ZZsbgp3F%5GC8~4dPQ`7&e&~tIP!-vdR@Bm#dfbK&>sz-Hu=Dr3=%oZ+hquv_Z zZX1_D+leBL2EU|nbU2 zw!X1JMzbd*NpSYz#A@8|mdL4nHcW_j(W$PF0G1Xo*%#{O_WR60Vq3DZZw2WF#1!oZ zR0~*f1@l1jhVyG**b}Gy9d|b-6Vbosz3v8ZA0MIY&m4bU1gi-A`qjz{+5cn%f;v*o z9}p~JPCBQ#e$kjts6D14*)SZ0xCV~vl_w)G-G2O)F_MS26)dMr#BjN2=aSp^y$Qg# zgw)yq;{qKMU>7C`LSPA#lJ&`6=Z8h_mu#xTg6EbkGY~|Ek1r{l{MA=@6$!J*UIzrE7pY%g#I~_ou|u?%_+M$3Rx})MS^ciz zLIx|yDmVckp=^s%&5`!sNo?i?7fKDLSY98qH^<9gTUyBoE}2rXVOu&M{r5);YINj! zBLs+Y?1NuCiL3_$mE7Mj2?_VBI5sGu@Bl2>w|-27dHC|r+sNTp7;cY`r87#=-kqRnrw~dFm<7*4-yW8Pg?*T0L#mM9{_#1H=gj%T%Jk`$kU^l#YB)M z%J{cRf?YpB<~JP9ZA#6w@M_Hd(ZxTKKGHy|25z^Xy1KF9`BM7j#qn(mLd(0S61ng9 z-t;>1Kd6jJ^<#wzk?pgQ!I+=Gur5-y-qmBf{JDMmPr_;zN&^&1F;J<}$v5^Q#Nqge zmAJ0=;R-l%K7}u44{4ikDUbOd}%X&@-`6NYz-Tfd{*d&V*1bIJ)gvOdHh z==BgdUi1>@2GYKDO~hJLEFX`Ci)_bW(X)l7gTG2Z^JhzG37kl~+WLF9D|_f@6WZxS zkOqSXJ}m0OukVsHO*$JrLDq>dwx=qc~wiP?XbE!Ih zQFwM@ha7-XU!F<_ZLL*E+TQ~Xg?#8wfWF{3bMW3Ef<;?8@mf<&qX5L;`4az22E#%CdcqP?6WeIw6uw|*$ z|FSc{bhy76#AKf-?oh!o015?jpxF;EiR4qNEppE@XVM_|<)9;3!Sg?R;RlF`Tkt#- z5hh1W7Egtrly&M&DcR;m2y0G&x!0GQ(!DpIM?TcS_F`|SB z#uPn06Yr-ZXCp1cmXo#%CXiU?;8N$fw0Orsbu7_Fv)04It!^2-s@aMG$VXeaJI9%7 z^3X-%Yn-%XNy?g0)BFWFyLi8}D8Wz{Jh#JZ>YmpN;12RREH~z8Gz6Lnks<@MZ{5vi zf2KlvRZd+yah8Zu(siMr!rr_IlVy^j4*g2sO`+%?*+OQ2DrfxS*(8CCj3rtO#B;efBt2g~84K_cE8wz4%FUTg`s#pcu|s)b#qj4<9o>iZmE)~$@{;Ot ztvLeNh(Dp$G;n?>9u-{ti^YH4Rd56$CCv_i?*`c5Bm73tk)yyUMzEFFHe6}(JN{#x zVnt^^zY4Xgdpb-Nb8!7RJ=w=2q0WpgMK3Z1uSXZa*h6hS@O$&Oo^j`Jx@O_Sxp{H% z>ZnIHAYH!k3sd&b4FwBcJ-Sd0u(pTt?oS(*Vzo~aIUt=dj;dD7>d`h3BZBrvOa8c%~D)StR$IR?{hGVL^!Yp?H0 zMwuOcoWu0-!i-2((FLJhPzC+!qPXsocX^_>tTS8dt(U%jFe5ZV8`UQPS&3L7)5JKA zIY(c|MFk5|{uKktGBtAqx_h51_4yleCLtmet;vUVlr!I_x#wo>8yXRI_b~s$QSD!Dl zd56~Y{^g1l!M@F4OG}G-R{Q;RvrDKkX8qIC?&H0>O+ITl206|6DifSw<@((lpa_1l z1wg3=}0ofNrW-!JCyVRVbBYW59>l|*%qO~N*z=EDJjKk(c zuyw1jN>jm69|hM3K>F}}Q}^Kgs#j&sbIi?z5kU%NiB)et!cpz#isS9TNIe)qAtSs6 zAandZ?*!xp+nLB_hIAsdkDr0Wo{@;F5L89B;^+HO%8E+AbhN2wwnhiMA(>$OAFFvc zoB$_j;>Tb;^S{GrE6ZEARb=m?Rl6+~lku-I1+m=E-reXlJk48BW)8%Y$Qe@_r-AA0 ztFsJclU7b2a$bGuW%JbM9FY%1L&VZ!@bPeQ5|mvg1LH#iIv=zT7^{S$`~~1DRX-Jw z=WnNeac<4F22jD5>jw*!;k_L`QcmZn?`L-S*m-lShkC%q-XCUK+ zGE$h93rHq^=#-RT_cZ%pOUH@V!0WE}MoY%>wr@thRC8EW-0>}Ari-*am-2sHDW&5i z_C<2KvR^IqQLhI&?3JGsAQX5N&slYne(#D#)P8;g4DN+1uVDKizOlo?P7rFXGVfBg z!1LI9+F^DKI-~^!o~=PR@I@Pjl&tof0&?O+59XDRCsJ_~NdJko&xYzogSeMOb@5Bf zi;Ie-GOq_^bktw7V0^>zR)iV6(m!EqZ&#C=U}$j_Z@EJq5js$7Lr|kI7BZQ3VY?Wh z5eME%N~~O8<4=XJ6uN!bfv=scWM*Cr z^Mhbha5QAF@gx(_p!g8}J!h5=3rDIdW33`Ni1Dw97%m<0Y4MgI6mEw|+=L2Ar@o-> zL)Wsxs2Wemk^>`k(>Re=5YGuBH(|V&A(QI7pLm`M*n4?;@U22ZMzEDV4uQ zixf6odf~OY>@s5DjNMvQY$VWGC)h#P88G)e2!3zOFiRP{pU8?1<9z}Ua%DKHJfCx3 zOIUC9ua&o~M;)-NS2jDt?&d7(zL`fvw`lj!MU)`j9^g2pQO6ZaxDQ$%LjS?{6c#jotgi}K5N`X3yA}?Gi;Z80r@a~Jh zTiso80RT*OREG_nJU+eTdFIZ7kfU@^p;rsVvT(!cwgs+!bQe!)bj6~-5IUD2Up5f< zBW?KHw`#WibdID}xa*&|B?7oPURT3-tJh_qh05nGw;N=(>e=Al;KV=rrP!tszWjK( zpQ!Oq5tQK9WE$Cxj^u|LbAz~0lBr*!!u!U*$vR)OokHSoM598|a14j^eq-H=doa&e z{OxObwT-8Fqg_w_Y*aOjBR{u@5i+3dThK&Ah@nprM}#zfDbiQ-^{zE?F!uO)`tY+v z0kMN(dr~e%DJ6nY31ls^nm%2YKs7G<^YZj@AuiHbPC)E@-_1mDb6^HAR(jcFPY5@7 zhJ6I_q5S}CY+2|Ls4!pYbmvD){0X<^>qIk@z$XH@)S?zM3n_3SIRI zgBDEtlhvzQuX- zpp1g(=ZgayQJ$#L(eq7S?lB$3&+a;fk694cWl(GT`F}?r91_;`JmiKo5q2swS*fv` zzymNQ>A^D_h>w&3(rTwAHHGn)1yx?5Q4g)c;-vf4I3XpIih7{dq)dTJv7ITjW~3?2@ooSG)p5NsB92W*s}Pvr1dKlb&7xf1J}>KjI$LR*f9`%L z3IW*S^Kyx9?kW_vF`q27@L`WwZIXX1Mb>_4p(N|85>@qIWxor1lX4F-RR9`NTQ35p z)iNopd;sYm>9s{^nL^JFD?BOz#NtMK6M-8QFYaej%}!6FQHm6RR99kYZR!#$fQ24I z!2RzXw)sfWr`}@0*jhU}?osZakZGiMt2tFe0Mdl_B zKkA{uu>`s#K}h2Z0n!;{Eoi<#%9J__R%yg3pz@TeFT`Y1f!X_+UV`^~PoZ#mtI>~F z?i;2d`j0qzD=+JF3VCh)5UE*-FVwU@Ya)2b5j7y6a82Ijz9a9GZIT1wGmC zv+R(Ri&u=df4>gi2L*kQL0;dkJc)#7t%{CE#jPw&-UyBS)KNawlRvoWaHsPiAebfi z{8TNF95%C!{#yaf_mKv{omybrCjv#rKVCNJ{0+lJtQQf$St8#8fo^o4F_tN=T62C; zFM47cn11daY7n9o2MV?CcS%51he9jUB`9>aaZe#-vC6u>;1b-tC_Bz9sX}xLz z(8(Bn5>4g~WF&na)&?OzDbE^R(wW;PV(cxp^sO!B+}w+)X=qH3g7j;PR#NF;C5IQk zFUbxkF75^UzCcc0Uj(O%{8y>~;5t7)Bc$U8JBmbcGhk1(e&QL!{FY!{H}a4Q3>eEQ ztM_MYVt%$?NeUU}LdXXc)55o6v{Z%PhG~8k9Pm#KDBdD8@9)e?;R{tceFri>l2Ojc z2I9`;-+<0^OXR<3qr$N#!R#z z4@fQVPKi~A#WK)pzbh-?N4ODZGK!#?{`%)USq5 zbq%;S*na)!ZiT|o_kkH$Gx(b=7B^gV&C5p zOaYASdp6-$n|Hk33Guq=G@p4xlCt&n%PnV>+SflC1@P5R&n_3eT~<18Z%6X~sm@&O zyiBY!i3r*ot^HP?PK7>zH_j}UB@C_nf^?vuX_l7iCnOwr{M!mPMV4p&q$LNNSov~% zVwGxs6A?j*Nu^Ny(L}YWSRi;-CpYe0iDv{Qw)8yvyP_m8$7t7Jni$-2 zE%3^4({U~OVT?R=px46VX_IE{2gaHm+ApV%bZ955HB6sE$?*KWf!gV&u^3S69|6GS zaA@%m=;&e%?znsgwEr@u&G|^sO0ZXbc)0#T0F`p6-6YRbKM|rpJ;J0Pr+(edG_f8n zWs{Wtu5X(0f>6e}n{6bAtFL9y*-IBUIl)Zr@ z@L>}IZwwFpVF+|Z3t6B0jb^=eNyFo^Py@Vtl?dlu zmHrDqdVS>!@W`CX;`Gwkq0g4l{vICIPZHt7yDkG}i_tybA<{uN5YfgU7I@u=$>hA1 zC1P5F91A4^L@zeQW;hHKs&RfR|F4t@t3~R_8;oeKQ_$4F=%;kyJAyd|h8vx-laVI& z|Bl4I36&nSr2Q-nxR#FSbZ7cE@CNLqccUR*O_vPYh!(?zQwbo6U;_P)5X$&5awq9M zYISb%DhxJ|Bep(L7+bL49h7^PF3IWC@584Ssoo>XW7;v<{dh34`gCQJ(1Y7FOaU?d z27=^7bO|KUK>g2iIb0N>IQ|^|J&&<^K6&|5)@OTt^y?vkccfG#AebK{aFDUUO6Pr4 zTLCG1TBNso6H#_ndgabYTC*Mo=H7;=_X$&Aw@)NmU^HhIL7`k~z-i3KHp4Hi&q!sW zy3qS1I2oesvA`2UP!k|yxF;qg6F7B?PZGdDc0??E&5ri)uLEt=)sc|R(nOv|RWko4 z=WOmw2hw9_>S0f``O zJ|e`BOzlxFHT)Wiyi5+~2c|`th~RzC;3m87OLU-lReO#mK%AgUmb*cMl=CuF7%-!T zoc>}RrInTeoxECDV@9$)*`@2^hH=*s{zWYW?g=fYy+d^B&iPLu<%`7D72&@yA^Fd{ z>B`J<-)}Y52>6s^>~eTJ2?#O`8Iox748jGSI8NUvsMv~z92$=4k*t}xuULC8Dg8Vf zaOPtl+OIR#jM+P$DQbT6W0bL40Aq1FP|_9ieL*$Ndeo|Ep*(HPqe<^Zbl-|flJ(Jz=3?w*kHmb3b9HCx_Z#I zWjc^_wW%M-8%6guchf$M;l-E_tR_9Af@h`Gh0)_4DN&dU*lsL8ddJ`G(jk(SP^04d*cX(qWAm zSu&=4CWX&b^#ON;LwVG{mvs4wngC)%6IiXwYKOS3t%jdGU5v>KmRZP_HK+W2r z>tFxIK~BF4c@(Z5DFe%29jju`_VOjLs08;cYEEAg`zbshLpx0X9A)+P#NbA?dgz<6 z#z_ybq5Jw*C4g(Cc&JLqnHZQa$Q3=XeR-fPu}qca`2I_A3g6tJ{M}1Mm<*AFyv`YgU*2qrs-5W+0$K`oEPR^JbvdEy(Pp z|8wy4=j%0k5Z~w{h_Cql8+;gLZ>9|vqGN~%kugRMw@INNHA97pws^bOgpl#T!`(zs z;8=H#L{;`dyCEKMIw#eZ&;PaXwpza$X8W8XNi_&v6g_S#2dHJ_9fihI3>3KlR|W&t zm3%-X6TmyCJ0Cu*?6#$jzl{=a3i z_$x!y?qxB2PK5fX${6%YUs9UYR08AFzCoThs^#*Oe{CTw0ZM-4>1yEG&pj(~H6 zsh)E_7Hkh`2Q>!!?B6Pw*qW%_X9X04$s%~5uAr3>TZfdm!#hfV%<@Q}Gl?Chrf#=E z%2d17(%OPWUBf*UtJ}z8O}9(b`?dPUNN6AfTzdrTKOA6&yZD!W=p<@3_7E)#8uT$H zny%dZ8;5(G_9BnJV*Z^>&Cj6?%tB+f(MkIWn_`CM>hUn=#q@S{*nF*-aQg{vmfKhr z#g*rkqF2yTqk{Ouh)xj;$3Lq0@Bi4Wu1%qdM?yTjAp04wpqI(o6SEl?m3D zyL=KAuAcMW^MDmkhU%|yP*T>j&yPl}1(~0$@#xy-tcrH!uAj z8!!lZvE@r>KOK5AM@1gR3o;}z>wsEizdJ&JfAJ}K-+rBVYY^l8{rz%0cpgvyv%W*w%szSM=IA~FpQH%`mM_DKLue@MHP z(U{_d7;xS<_2n5*Sa=`F^F4`JcTqASLqE(~#kZjBv}0~z)#YwzTnv6IojnFdJbaP{ zYEcQbS?c6(-amCbDJ6|gEur$3chCl^;o;4KYx%X+s2>aQg0#-0t0EMQ6WC9I3E<|@ z3?;7!mf+Y*s5U@nR%;Dzkf0kwv9l|B*vz)dMi40%hz8 zlJE_aqp4grKm8=+LytX^O}9j>{_b693$GWC3|Ld8fRoEUC!U3AP38Hrb(x))ObW?$ zzX0jCy>VA*%{YVdma+VJkm~FDd2lCXvXh3oOKNcuDx!Km9H%0{!KeOsEC}DfsBtK* zG6?nNfkFij0UZp0==M(Mu7RrVXU1{y=d!~au-2rdQ)la*<@+Aw+svHlMO=)JnGk0} zhEvR|4qELY@sMS_)IP?P1rTb-VpKnr@#zir{9xO@JcW={YW8T#COF|H^vG`F|@BPv>9dAOY z*H8ohJ}AlK{64H$5{P~AmjyFnX^&9$rAoL=gKU~iA+XUFyz|$_#4#)zH?m zThR;yHdjc`DtP6PG@V3I(HfSun4`c$q{3to>zfl3NeSPY9>1e1`+j-6j5-d%kqn8L zG$nSPsL2u0(?;)hYU=icx|ft^`gYbpG3S?8#c)B@KTmZ&S= zZZ)GB3s_Wl!o3l2AGgfh+YSE!->yotvO0=OHG9|`;MEQMVA;`|(M&vOC7$j;EIY~4 z9otJIstOLG=}u?#mE%bKDLDj#)PUxX@wzjVwxhL>M8)DL7)0hvBf$aPP`>Lw{uhlz zUE(Q&B(9x5_ep&QQ7AErCv|1yho==<(jVaNZk?9rs5!-;w|NBU0spYzX1!b9-RKBy zggfVVvvsT!=N{&Fh~vDyfeJl>{4Sqg_8?flOrd{pb?=w6*Qis{T37~s3Fa$4`Mqp; zr*Nv7{x)mUHdA*uamp@iIM|jmLMC-|lVM~B8?p7Tf^Sy-qS|LUGjI=umy8iEmSvUB!x)o1!aY452CbnP!C0Mo|d7q4Avm|K8a z40wa*{_Dt|qeIc|v-*!6l3z=jb;7@_@0RtkRb>FKO9PCcR&$`*M^`6(o>7}4b6CYy zQD4ytZi$DS@%@1si+UA!AE!@qb70(c^R+0TP-53cmSxBlbDH1B%0)g?rkonD8gb%o zOM9w#s`Ht~W!ZF9n$lUQ>S7=dL_vM*8hQDVI@@6ri$E$3f)w%us;_YolOAu8G}3`& zNtgE`+XOM4gNYj%XyyfraU_~1iKOaPLd-hDF`U=UhE=&HB&SaA5J#10t}YtD)6m^4 zssnTVK~~aRszbZe!gV(rM{v}ip+eYHy2B8xuea9B18}Z8(aB*NPyHAb2PURhGXQxQMV*@N(zn==A(6AZexAs1ucIf4q`LB-(*1j zZw6MDYi!Sl=Pn;E#wm~kh!kyAZ!&>$!}CzW9t zVm6f?2*Q9GSD^}YtIAz>^k5)bH_~RXzTaIr}S!cu zeVQXS7)bW1B&y0Scx@8(!202@Hxx8U_I?o@bd@DNn( zIcqHuRa8|Jkc0P|=+_qG;|hr@?TLHAe=2EzzZInA3Ca0bCl?Y zL21>`aA-?#WkW9uJq5DWeWXz^cQGgy zNABlMY~)-d5{Xv|&bG+^zST*o0tpoJ?_!=epduW3G` ztZfw!jnXv&QGt{l-6lS+S(0r^PZdtH7^mD!cVDh@gV)>+E(l#ar(MmnjqJCA)$c;fbcJtwHqY+WGuuk8{udvv!A3r4LTwAF&o)b@vq ze*bNUP@-kl#4}*SI}ilV1?L%kXUBR-oNJ*Ax2PJ=X%huF-BM6HUtFDe+6pa!7CR*Dw1mzpEE0>#{@}QO0!|=z=Y#8DvazSw}Wc(Ga`0>Ao`ik z#o!&Ky@TVQx8E35o&M^h*`x$_xh6QAU5hD=PtDHqJFmuU?stw;z~|ghTwz95j2nGm zMa)9dZuX<(zQKEMRH_{V*2IG8BY0vSi&OKp-5DOZ91Q{KS4DA_RE!0x>J`t9?>m9S zh~bNsqO?oQ7xn=aXs&%AF?@MV9hTeSVIDRHKHN;84d8x9R!*Iev-Xat3%n5w%9yT) znR4Hs#k~lfn+YL7 znV1%tmHwcMQy~#%^?tJa1UrB;2@ugO0C3S}KqwpteyqxV1b_I# zbLB${A1fYqe6RsV7@ba6LGu;`|2TpBbiTQNTu>TS5XFPr*+AvIg?I})^bk>j;lN}C z%(Arn3CjedH!wkS?(;|LEPoTDMq1u(Wz<9l5T*%toke=&VbRdEp}_C8vh(`(T;pS! z2IE`S(<0rlZ4)`~GFbZ_NbrS`rXG8edq3B>n;^Rpnz>p6$epxkIbMlO4pv=|K{@su zK7$cW!6lZR2$F=N1dpJn&+y8UssVwTaAT|MYT>CIL93Ph@~gLf4t?Z750(dUMjBd^ z8afzRZ`%rr;8v;@Dchcasq6C1+ka}~P$xV-lKD=3@O&M`#>d&!ovv#8>ta_c_%;WRXj2mqFr3WpfcO60EO40pDpM3_padbhPt9asOGF*r4f;~ zSX8A_Ik~>$i?_-p@H3r_vA(ZJ?_xM{PY#^ae~g2vG7#YcMN0gJG#sXeBywT>ejYMU z##>exv~VbwhRZax$^86w_coj{WljwwT95wz2m~{52|`1fqp0{y08Tdx{2(?R?8EOL zSQl8SWsqJ*f>t2RaH{w(IHveGe=5SK{lrs1=bIGjsf9HVi{BUo(6WqwzM>0;d-AB-1exXMKIC%|Uil`3lZ4nI0_ z12p*hXPfL>;CN7w;~fiNbjZKRp^BoX%%{?4;d7C?ZjR*z=&GO`JWCSf4t*Ahyhl{_f)T5IyJojd3iK;t?o_A^|_Rk`-9ym z&$k*u9LdTo0P%x5t}i|ehdH?@8qb{!81Juj8R`*X%(2hB4{kpRUj>S>{$1lh21Spz8pXV@0J3)ioJmiuBw2zeCz|U5&rgt z51i!J_7^jqYHH0`bQLL9>0fI;rzz27a&>_bOR9ibHQdU%$;sgBJirCkKn--)j3ugR zSkdUhd-6QEQwF8vN(Y>&9IV?@);@i7>#||3}|PN>p*eFr`VT% zj|4onX1{r_%{l^|CLb3j0*78+)|S4t69K!P96CC`0Z?;x0FTqk=ir*$+`0vNO0!jB@R5@^wYN=jNx*t#%oL#xD>!5fnR!|%zT&3?Z4s6Q!5z6LK zB=V}_oMHa{Fc>|&%JpqLK^WbD_pip9pzJk_Cvmry@#n%ttQRl;lldNzu4fJCevI&A zQ4;syY!x|k)fD8H0lB|IY5`XqFX(MmqM;QZc!g8SVj`vdUlhEN6NgCPp%TLFN+um! z!*=kJ$$jNF*|4k&rog&2zSo&<67Y(o!A3?Ff7f3VhGit0CDbq8V55?B_dWXFlbdx- z<}zM@b#lBX*|rfFX;Ue&l8~z9w+KAsq5sfAeR@*V)8m<7Q^v81gzkn}M=a|OvTrv0 z-blh`l=TV>d;!oqVk1JAm(hU)>I!hJ+b8gk&&FL4?T}koYxo+Rw3=A^kOS5>ojVH3 zz=F6ofxT~Cv}cH4{YYB#2G?(w&zu}pxtMn2!}CiUdZ(rqkXWH94T9Mf!!T(B+EVZF~DOU_gT6#)>2_@f%j{!X5nRx~k_N1w2zxY)x>l zq9Uwz#3VuJ!ifG<3rp4^W7tps2oF+AcUd^M_e1DjZuv#=5S{J}y6Jlbxc+Kh1rFzpPW4d2?$d2|sZ?~5A2X16h=aoD@&?_W zCRUMOP^Tz8d|+E&z(ppvVYC$$MVJlIt%nc1HZ`ByGqe8Hw^|dP5zrJX4yO%{{nzo( zsJt**F4JVOOyvPCc!y*9jz0Rv0o!Lq>5O9se0QiH<*Wlwqh=j&J`(~|8FVuugZ5@d z%;Ly)D~};SpGmDz%})Xo&uh{-wEaJyRJWmX9l?nYX%(*r%y%#I8_&96#)e^e#-l93}%eaWd>YLtEK^P%|#qIy)#l)53t_19>ScupHGCmbY@J7?l2Wwt$hn@@BE&CBQ{LP>lD$0p8 z?y0U1=jcdY5?>u7I>cN|=^5b<(S+SO8&u8alC2XCX zXq}!BHq9-_q-ZybcGf%xHc(S`P)>JiO8|Fl8vQ{ zP5Q9aAO^-kS9hT5`$xZ$WLTZLj)ygZSY+)%{Xb#IM)}OS8w7FcO@u&SnZkQaqC@zS z=pLaa2g>39FaQmMsK;x7%>NY#!4e+Ie_x7XSg^7xE>%&$Z(IMWm>1TW6uRt1ZTE3c z1ku2kBNS4(GVnqMjVCEM?WfVY{xJIulJbdG|DuRt8}PvyP7BuGidV3Hv#125n;X=# z1Jo13TEcb?xIDz4iZLA*3+&srk8Pw2I$|HA5I@a$P)i#BdNKXyP))9XGH8h;d_*@p z>YxKgfcVZBd}GFI@FLwUG@|=EV9Miuyi$!0W0O@tk`tgIUv+){yM+zs-#8%^uge0AMe;t?4wBQj23L~pjylN0*1sM!+-+u5FpYEvqCUkF z=3}^BFcH@-zk9)mkr86R>jaL~mKIY~+Y*9X%>_42*qHeM#Qx^-%?y0!_8PNwubo*I zBzXHH>*_vJh}XM3IdvOIGv$Mh_LQtcXKTh{jd5mvce!8M5}MttRPpGNA%9;@MRD6I zMp~;!PDHSC=yxgm=FFt%Qbb^+hATf5L^3t0ktXy{^W0q@ZO{qV|Ni`w9XWWB;M1+1 z+*{@RogNcWHGl>eg*i6b1EyvZATG1bRI$zmVoXErE&1WyTX+_vW5d$KDTj4CQH(;DMNC+q}$3`}?p`wD)6(b;B@je#JD z(52BTY#-ZZIBMeexM26}xx!dT0BBB7wg!Rui*cteCx_uAmK!@|sJ+psP zl7ymOc4#JF#rYoh%Ka&z{~twX;n3vQhT(UE(IMU7kCG1Q5CjC26p^mc-QA<5RiqmU z>FydW-Ca|ryY8CW5sh^FmjnD3na}R`Cm?XeiG!e%GJ$N7(N6 zJOx?AitT+L9v+Hby8B1ZqrmOPT+@7g(GV=sqsSiEpI??VBv%Wo!3XG}c_H>nJ%hjh z{YV&4#Owt*fH)kj5;^lQ>PvYWdCL^PoG~j~u><|4|MxR%S=Y zDjnE1*LF3R4dWax3#`?bVw@! z{k;;SJ6B`$No3*p(|{euT($-%lz7dFS98DXV|M1w(Py1s>SQEHM>QudmVlt&YE8Z- z`LzYHzDOstS2PdD_H4?;XcATmCfzk9jO>6C^wLX{QaG*CgEJ-DyxskE2lnD!Q^Jph z5+Q200Om1?NtzMd*Av5>FJQ73m9Jq1W{iLO%gk_g!td)DU)L{cMMdKHxUPTHfHxeR zZ~wwE)_3pm$$V=g$D-a;4VT6T*qhHe+b_|);ACy6BQ=}Vz)A}|tG4T|)^+?2i=gX4 zRrpfihOKe!fOnUbd!{&8@M9aq6=$!-u}P z!9kzDm~iC5I>d%oC(L~@;-SVN*O@go*mVc+q>CpeR4q}VE91o|P-Z}D19e3dU_Trh zU=_CovMwsI;k9*=pEUlWr-RVjX%3I_#WadpyPo4TVVo|?YI}|tm zb}uKiS?S3^y3v_nmKNls^>`{@-MpTgWNAvY-CRNn`GUfq?caU=o>-~HIQAXc(M#F6 zLPh+U1Z_%3Z3A<^Lw)L4JjKzghSW+)=kmt!K}@aa0hm@2B(QlNFG}C1tI?aUCsrun zT8|#1)kOn!&~f|NnzdH)TmTWIt+fNMY94ethslVx0HnAwGNH5Em9Bf%sUT-D%D)2K z;4KN|rjtIBzkmMr(n;eZ1=e0%M)uQRu*T8AZmu7#aK2`j!D2C547nVWler;I{1k}!=fMV(8dyzUo}v<6N#DRp8;jKbKXGxo>XBfK zgM8`i`>dWf>N^N;f6@ zj}OpiD@$(^ufCBXyQn;Unlg8xav1hks=lIIy}9a)x0S0p6biSc(a~xQpUK%7tIVm8 zO@FN0B#<_j6%|T&cVKu&rv=XKcnrY)Od-h+JbwfQ=CX|&066naBI}jugl+}l*g!4) zjg+e_xRj%yZNj1uRxZWEGMB$9{#E7Mu*{QXyyO!$EJfWs9j3>N^9u%8!sK8 ziyios6n_5Hw0-chjW$u5Iny?}!E^k#yLRnEUtf0N2~@x;jlBMP$~=78{Y&(~xLTuG z`1P;2FXYXLw5y5qD)~KDr_yBjc9u zWV90YLoCH?d0qbT{|6$y=}kog16ASn-XNI5V`5A`4T7?l61W1L_OBTVf~%6H4KARe zN`TL8YeP_NKB4!V`1r zTerr?xvoj(c|6v?p_YSAaR8#Hf@ARGQtRl`6~hY-V7R9pueN1Au-SBtRbxu{CK<2#0thN5dz{fM8XcKh?ur z1nIWL<&zs35-@Z>jG+dj$;5l`rXZW&99zRP$KHC_^}+Bf{EV6a+0a2A+fAX)K@-m4&?s zfO$;R3k8-;_Bm(+ZBXat1O*y<*iK~W`yog1g*gk9)JF7l|Gk-NQVei-&k=er!Q{2i zite+LFyd2U$qKmo;S-n*NtM9%-eaYRt+XBaP=U%s69`JdTFq70k4GC)ne>Fch9aY- z!Q_ULi9i5yVKhoa)jsxomymfiT5do*vPTX(%SN7y5WPm=6i;eQT0R$s9t(!Ietm8I z@4bfj=Y1WC&p<{Y_;fK#9j+HCe|;vqZ(m-yu7du6!_^R>*9+=e9}~l@BH*egZ1Drc(fZRhleJjAOw6)&B3QJy%h#ew?T~TLJ(Aj(DI3Vc!c>E zg$wDZEQJrIdZ~}IgiG;v#MQs=1@CGsDp$X1l6u+;^|3f}9G2L9J_*{Hd`tF(jkz_s zW$o(=H++yX^P?GP9LE3VHU2jT4OK-1Ak+CXzme$?>p@6Wsc72M`&&N(N3 ziaNhD70R<3McDKn3C{FHm_adcv`i|&Y`a1@cq+JqQ$6 z?RgWuFUw{sMXwy~|1zS%w+iLu4HZCTgm4`YbjS^ZzO>6^=vX;JDr~f1rj@+t}*rNBwac<>-)g?Vu>u-X)`oXdRTI{fZpY`}omw zY$8c*SC^-%o9RF22pt^$m*+2a>Pr|I#n@buwtc`G7ERYzm2`FiPX{P1JTqfsAK@}2 zG{YqnO^J>-XJaM%Ob0wbaF{Ny7I&sLHwdL_vv6eG1rSp;#qf8(A}4i73Cjf@%`9<& zkQQjaM(3vtj|K4)=R6WGrC0W~#`M!%WjQlWsb|Ltd$jUP`>Up= z8|Nw&;U9dr%LmQ)(NdT@qSq$saI)3o|Gpf--uaw|D0norP8*n)Eow7i^sLc4!T zVDMNtxw-M73E-po#n!cA?pNCi_sx6Li`|@M-BrNRXMa;KV`Xu#n{Rya;qV#F%7tPFU9l@(F3eNdaMv{ z#%H+q{>8gR4ip}oL>&Z4|3+TodcY<^6lCP<=3rS2{V$~)xT4aZfNR}C;4f}HiGaDj z<{aNb*pZ&#?br^6M@a1)?I3^?WW<7Vf7GMD^Nwq(@zV!t*iVe#@4);FalkEwnilLo`&|v;A|^D^i(Sy|%4E{0 z!wg2m@qdBM>QAxQ9_gssb?c!e7pKS`(kAXB1Z_! zBa3Vb@}WZ&jB(XTc0TR8XV_&@)3B;r26j%q6+WU{Z}n_V{(e}~(c;sVi6Tsj^t)@H z{AJ_^_?8a(rrJPFk)JiaP!TM|$Vb>)W<_jtv82QPBg8yh39H*|6bRdKAyrniH`M24t52D$cos-8r9)+{Bc%#_ zY*Yi}gC~2HO?2vrvd5_W1y21pkoY2v3OfQJ9ObU)Nhu|DWYe^iP zU-XRWf}Kk5@)zH{Srwl`dW|mo-)gf!i;Y?zleu=;8=ENM|9CNMbwTOaK0e&ZD7QrZ z6XEM;*iRUpPqB`E2UP3iz7Ke*8qtBp2gveiU$(Yw7)h5_VOULNisQLrT(RujCzXQ&t#_8qI&$23a+tnO>?HrO|57+Y2h4*{*qXxY%?PWO2Jf6rXn|66 zI)SPr5}?AlXEXTP&L&GbT$+EQGkQPum*HTS$&Vk%y)FUZ0k()Z)w}W_f$?pfqgmrY z>plykL7m!OV8LIbRJF_#11eN3jl?2liFA6kZ0ww&WBA&&i@lj|dAR!+17!(sFe7~& z2Q4T?eq!e;k7Zp&*kd*?=N#yS%+}r-{(4u#iV4(Qn|Mai-A9>4@pd(FdXI9Bk?`EQ z!wRg?AsTTFN}$$TYt}iAYrFQT>;?Qr3gqlgw}r5dNzD!*4Wx?C7GGO+oC0i*OpY#3 zoxXtOCLP>>Q;DV{{)bm)L|sQnl?IwqtD4Js)-P5R9;}pCsXbIcr{r4|$2vi3m=FZf z;VO0GdBf^8XejnD)!9>fT+F`UF?S>idCbQ|QiP9f_hMNQZQp|S6l(tw!lx>=?9Tpa z!v7G%Xmoqmk)-2fb|jSo3L*y^p+U=RwEU*@n`1B@6ChmClAyvdn?8x4N@C^In}e6; zx&6|W!lqj3`bj|zk>7tX$73bt_fqU2A=;BPQ;9V!#7$%JICN+0q;mdplbycZ8l(!zc(nfvSv{+>K zU^!DJ{xDg?wYDQNF4Ea;5qMR)l%H!*&B8_Y^Al)1)bInD?(FpujGHP*CY6n$o*hb? ztE^QSLAvVBLbKrxbtSqF#`?=zB7r%XbZ(|;m-fp zk2&Hh^->TQX@}J{&hJ|P{rUf=@Xi+*t#VsIGC9Y)$RXEhr3l8#rf&0)0uz9w1UkAY=;q z%chCOsRamUW=4`sXE1!)3)@TtI7%JfSPoTSEY!H6ciVA)7btm?RBc!~C`td01k^~I;8Cw`z7^zp7PPK=|du#2Rrcd>_rd~yG{zoq0tB2{oYlQ zXaNqB_9gi+4cW5e82EwO*rEW^2>zD5WUKt-R*KowC6P9#cC-x++&lXDvu7^Av$Hfm z-tJ3a@`knym!jfwgnaBaxa3DDc^wn8b&5B zeZKZzlg-cd)d)DyRNvu?PIjqyS;G$P5MsP%G}>FDL^{`Jup1p}{Y(4KeoxC0MUFZg z($TE0Eie=+1txuf#H3<8dy-WBx%le<-|JMvVPy@E{+aViNQDM2>0J({{m<+CKRy-G z-78EWfUHghoD!SSDG}UiQmGt8P2HLHFuP?GNh#PS$r_{x#9x(>C{TA$QgNtt&g`HUIDub8qze=f~V{r#KKJ~V`Dm{YhSbpSd*gLF+UB=Z;G>_kfeG(ja?Ntd&&|3m`~v{36Nvzn#Mn0OAHc^+O5Ip|_y>kE z@C+}60oVE3BfNninC0(YwZ4@4535`~F&&{|VhVGzQHPm}+j9xq(H76-fXu`RZ2mFC z-aLNfSirGgB#?i)<&i1%_h&pyk5}cg+Id->-&@P#>k5)vKLEVZS(kD@zgkmE>m4SJ z`~INA>^mH-rOo4|8puFjO})*k$#PJ>U|k@cD7CKFQJtKrlKBO-@T{NioE<1&B`YoI zW1DbyboBSfAK-hzz=913ZOCZ^YXf7XpARrvy)Qye%$Q(%UrTD9E)jQ7bJMHCtv}T$ zP05_pA6-2-cVdLj8T1o8PdGSOBDVx}QYvco(0N+hF|AOcm22bA{5CqdI!@8O7BjCo zGn@vS2+sH?J_H-~8o_RKKKzphDhN^h3(jeME59r4+gy^))>f>yxF6~2rRMBb;ld)` z32)u8@lGTIr)V_uZs9XE!;xuKvlR{zv^fZ5m#n(#B9}^;%7!I46L8G5a2fs}2*C+E_$?GO!#(VtC zU$ZNRJmU2H{8MG?l5#{09iei{an!6MnUfIze&A*N=hTVH@8qT)AL4OT!G*wv{wZWy zN0eh9EPHZB*^*?tbhlcQ&GS|gk+#?1{~1pj!?QLhtYZRc9AGz|7mN5P-z(!#Exuc{wXo??j#zUg06`p96PUc8!_ z59GQmq0X(5lI%yue5T;p@qpj`fTUrA7>8}L5HN4AD}(%4_x zJezn;^4QrDcqQ~?+qw7eOvoYd^LT-J49SceTr7665oIkYQd|L*2#2YUeez%v|Bi*J zS6+i~4{HPwGy#H#-TV%zPO)N!YD2TooUS<0tKJTvg4qQ#$;(p9%X46KBjm7yyGm8g zlm4g|Lznl`lMsD|F!6NWB4->Jr$3@iocH2qx~oXFWqvkJVdBvAZzTg7#x$E1#u2BM zWAi^$WF15obG42->K9*6CvJM>gx|YKEEx+Zlxn78a#%t|)zOR;8<{@Mi|sdZSUP0F z_I=A)mftL`t*(y7#qADu{QpUP?Pu$IiTKPG>agCvT=sH#Ls5%uzD;#x%W<_eZj}&*FJ=F* zyDtDDAK`K+i|R}!B};uhzhbC&@E*X=VHjI|Q=u}v514}BhHM`RG}Hi|%%6uE$krJu zWMq(#t#2rV_RkW3ze1kEFxQ^^?kT)BNT@o_;@0#%AY&9aW*g4fBEdOWr#uh%p<7|q zR#hj{xP3eG`)WM5yly0}ulxFhE6R;de`8f5Hy zhS1WVF!#ZVsGrtS9~}v^5s@Ml8-zQs2BW~d_vl)3`iu^xpU+EDM}2K8?Rs^^3bfYL zKT)8T*3heV&C@17X$Dq(Bm-jAiZtXS=6g(p~BKee|=@$9!ro9KJ^92 z!BlRl`7rYe7zAPapk-ud-#%e6e=YD>xE^?YxX8*Q_@Zb1t=*sNr)&kmgHeXi1b+sv zOtmgOJOp6uM1@6Q_|rWll2i%36-PaCRHV5?q!pQLESJ59`k`{!af zpCx-)8svxx&&Gs{>8VNt`rY4_-mal988W#wl(!&`_@4|J?hH*M@jiYl^0DYmX88a! z58fL#b27I%i~SbEdVNszYCrP{{hNryP8kkdN#qGR7Tmk~t}wyNn?3-B-D$pE_i?CS zS;WU@ryQVWYoD(LiVW-jnBz{xBj2 zel(SB6kdD+Qf4%7@bH#wT*Qw(XEBHJ5?{=7WA^TQ7@43qE=AkFBLivXuYN5vG}^0M zkQz>jMyK*W0-oP85IO+PO`DOAlP#L*z@4pxH3_R3w0<20YLXk7#cY6@2@_}3DKABX5|W9*!d6}wGeKf{jL?K2 zOIf;i8&TRZAI>$uE44IryOTF2u9?ozm-?eemG>B0M{zM~_VwjOc=Pt3ffW&L*` zMcj~q1NOh7&ij@_s0NN8ghgw6I90ptvg_a52Mvq+s@hJ~eG6@F-JZz&ufCmE&xt{#9b)l{s)UMfEHuBiX1)C)ncf=xBufZpFa*__DXra%A z@#YEx!g>TCfRE!28p~*_+PxR30g{V~^wE5;91{N$e(K=L{e}DD$l7yM0 zu0(!j7e(ooiffnCCC9JfLRxLp$e+aM-^=0xdG`9UhOa}sZB?0s9q%-PPhJ#S6|A)V*P7)z5LNS%PDGYeck?f`T=KIBT2;jO``_v4+LHSQ6=pV5=+ZTd$0q$Y zD~L{?^B8Jw6z#vzW{_>FLt6cVAR>sQ9=Iq9vN_=hQCeL5W+`8dPS5C2GhIC ze>e@`(1F-5zX>91)QL>CnwJ8vf+(VN(zgI+Ksx~k2w6=^Z?wKXy}|#B2K3J{GD$h{ z#mE1E+{k?Eh~a~R&!>m6cyV)MviIZYbGD@NXXM*wk=5Lx5&VF zmxX3tv=)Xq&&H!7jzxnedwGVfKxnP$>C%@5q@+y*KHixZpNP5^7l(9f<;$ zHP^OM*gYeUH^9{2H!s@?TG?HiI`11klZ%mDLA|3|dCBZ-|tAO^c- z81rkfVdk~!SPM%-PEQ6_m73VwsEQE%-4jggon1Nr7{~6iBT~_s!2PBzmC0w^ zpK1#P#DcSMfo*`2bC}VC1|E+J6=Dy+^daLX)t~TryZ*{Z{1uq817t*8h04R%eS!h6 z8|CuYImAOu_Q=Q6O2HNtgt#JtKSc$lV~+JNs-c3Znzmb>WPn57aSj5pjegQA>D`4D0Rwou}zRbfhs z&6DiGMTxjb@Dxhy16(f4(b9#gevD~p)7S*D?AEPY=O#`@KYYZ>;@~G8ZP6^}I;rDL zfp{f<-ofasv3~z6-RxUkR^|^M)6@f+jJ5 zrH1AuaV_|^%id$F{7Z9$Ss!w(s;h)tRD@L9 zzoa7iCGbPDF~K-@emOi>{NqS^^gBfz-p7J#WgluH*7CP4%hCJUGgl7EliT#PX3~X@ ze^Ss66z#vXxa`>NjX85K|M>Z4N9`3ER$bWN%~tW=bia(sDVD>a zgfH~$Va-imirs#2lIpTFAu%u71e+Z>tPnAaR7#J$@Iri`^{e0MqP#BdAaNs>Duq`8@| z(}j$GM^D1$zwR=eE;b6k#UpxPe5zsxpskPKR&C9Z88wOz?{K_kgLQiBl0No{Q!sH^ zjZ0v9n4czhk?`Qc(V$BfWSrPSfJI6l7#0G?Gf~7q`vQUSVxN3B;dE7EKdbvyJTv>f zWcyu`!&>)CCf%zrASM*AkNTGC0H?jg`0eds8`kR&L459zGQnL>b1mg_Lw|fojFjhA z*qm}?!DJJ?i;?v2IU2ZjkbV{0Gi4k_agg2@GFYPiFi8a8*^{ zblT{j&(|zEIW)wO5*V513abCO`)SEe@%2K939pWY0xX4PB$gt#Y3?+m|NcKMjOU!n zGW|1=Oq)_X1i#1$PRhBd#M|z^%oMqK?sS`N0(b#-YW><;_K|Q`5b#hBIX0a8 zE+fH$NXln-BniySOM_3y0Zv5#&q{;YrA|0^hjQC_mlPROHn~VOnnn5zkH`+r9k@zE zJ^c4!gm^&t$ng3_(C=Vrhu=+0zZd1JY$~!wFrd+f@eD1yYtEoHw~JjXXVY<;qe@3N zYuq&e{*|)vVMvj6Q4gy&c)u4~z9zful6yX?Eb#u|f-t1f!^4k~NbX zF4S%b<;mzHyo07)xUhUg__OX^1tFX%Aew>|;ko|rl;-NUe=OJoO%;V4l@BQeOnx(j z2J|q!VSa-5i^K|Ne(wVFq0*Av)3{2RKF!fRO_NkhXd9Wn2V)X8;SvFiy8$6n(6K#A+NrOXt_o>z&Y-G5)z zn%2RoSEf15ox3#bhQGsxj2+o@Xwe^l-7jE_|6t0K%`H10d6}>%@$}dv@zL+^>$_Xo z57Rwi1o4QeR7@;wdEPq*!SP^LL{6S(LH*!R* zbY;|Zb_CKlv#SR3k{S-)GzZ#-!$RdyOSaZld`03n#pIgUE>c0{p5i;JuB2KcT*F)A zdktw6eWG!Aal4Rkm}8o3>8=b9WETD)F5^YJt` zj}7Zy9jHkEJ`QwGwuIBoMCM(2c%0H);L~L}Cn!8NsT-4CVUiU);m@A@snX<}G z{TU2Cy)KunmqtMt0De2`T5xNhTp!>8G5@IhOH2@fx<@fb-zj5|;7A2OV* z5y&Is?+;rO7pT$UV1c4=KKAw3ipKY>8kfCBDZ>Kr!f&tS=Au8F>%3pUg~UjTCE@GH zu)^#adz&d7WD2ASxK7DxMZ2dL#WFeyUNxHqq`v1SLrNF zu@faac#JCdzk4`j$lsp(`ISfP@_IH2`8=bw`RBuIwM*{{)dZ8X=V*3t|EK4IG@=b5VE?O~(c4xd6Kkb}E%XQwd*fa`^Raz0LClvfM5-;KX*&}JM0Uy}a- z)sUEJ{c|$k@)ixM1k7!Ot#QC4dVbkjIoJUsdok9#5n&Aa2H)CwAcBs7g&~ibBR-D- zRYl0LD3Z5;RM$JL<$OLZ=ncsK`nohjZT=%JYvsbb^JJ!rlG@;JfIjn|Jd!0)8Og2# z=hvI!Krc;SZ#l+Kt`@9uf!CSB4CsiPCCLZgzyF0--@iaPG$+kvVtg4N+uAp^r+mVh1Zx|8U>F*-jnNrhQ;Dy6(+f<3kG&UkeTA z9?xx7s}U*Bgk_;S8}NV53o0Ib^+2+|pDFKPGod}#8#73XvK^g;gnw*^5)y?L&4JD? z!9W7vBnc1Dzxj<6cJXH-YKQYmjGi&KpJ2@y0LdGGsD{$Kf`WFtuSIR&sTUutj;_wS z7hH6e?yp%Cdj%yRGfvkal*E^!{OAveW7IUijyn4iB7g!pE>MF3E-+_GQ_fA23H zE_94&i1!)erNvPXT&o@J{!U*fTvy&~E)igPnQl}a(F86#lePO=Vgd{>M_T*8pVok1 zcWhk~`MXUH-2zdw49O{6?^rXx$0cE8wzhkCgf~Fi(vu3KLI0^7aE=`}@xJ_i_ZZ_; z&j(*-4qhE1-iXq)6-d{cZ$`E*s~KmBAWL+HS%eWc^NkRk)x;*pM!_^P1qkm7&nRVzNK^dcv~%cj z$Hto=6c{fM^X38P*#_2>LI$yr0|YT2iGgfHcp=BX+Dx6hH~BESJL>~bypxn^0Y-zk z4*eeXR%ioPzY(#7l}wcl*WMHUH~76RMpk(3nMst*V0{CWkp~cjJbEK4HB{Yb@XYdU zlI?{uz+Ag0f&U&3U*P(Nt$w(umFF63Jpn^kxwO69Xk?IAMMncQnu7NkxF4Ew>n#2H zFTEEu+cdtRZ}6CoI8p?oHJH&=gz6~22_^SjJ*ra$0K?LD2u{qt{Ladz0 z&A|TLf#JuV{WJXBTKqxzk+M>+Xv59Z=HGIew%6@wGbUB^y8t{wFGCrHtP}deSi;ZJ zG2GZ6zj`prMxgZb^E01`R2%LhND1qBf4!XCA0Y#>ice9Igg&(cG^nGSATV!14R7!7 z&bg?WBzsHQ-rs&$rr}sBsWP&m6>h-mb?~2QA2GRCYLoRO?LTrj`RDWcsfe`@*`M#5 z3lKk;;zh}v6aj8rYB+Y*xpZ+3dwEubz8X99$3gQ?fj8eN#25>F_`0Xx=YfbXvcTye zr_fCz;avO8t@t`ZcXl>Y=O&piM{T+yjvt$d2LQO-o*@X@-uxNv|6h|Stq-gC@`rBO z&#XNK0@TemV@De?_*lZz4u5C-E0_82DPf+@xhSUhdY%_7%e~bjrlv;4?2+)`ko0t_ z2{MHfdxsqT=iNB_VD=q^ocTX<(GM%T3WNM2H=g?N&!gXyH9>5D9r%0&k1iIj#kaMb{mggw=r znkrbv$pxd$MMb2m`@)3mGU@4)caH$2R!DZXRR{#o8$LiazN*G1yL=C_wE)A%Q~b}# z7^_gU&3aLxNvKc)ZXo6SJ$I6bYY4Uc++e7TvE02{L%jKN=eE&{*~jFa6txRpO*W{+ zmCQ&6!BPjngU=WCq0{Rc0Em9Oix$9W;McF1SxO{Mz!?XZ{uIetSr!h;FFLB`4;l1N z-5cs9y3a+&$Jh_Z0nN;(k`}V!=t?a=aLXm~H%3*ejFe<^F;!8oe}P`J5R6RsIlUUT z9GmOBY0aLUS>ExTEy#X44!PoxJRFD1qMbEgfyh|`%_qlSby~bzhLa&1 zsb9aW2Z6l$mtc$d6Aijd$F;oNs90WxnLo>Ly$%A(3%zbdD%c`f5*@s};@A>92w}Eh zC){>1YGxqjS5Zpy&|S{FiTP5oUE#-~o!kv6(EM8`LI*nXSdeyOHPWdiwpf)tfcxv+ z=BMG31tDa66bsf!YYeU&KXux?|4k=B&_d{3Z|10b=1ztp{EP;+ScT&&DHeJ~*OlCP%w%fc!gQ zv%4S1>*@rzOhrdm2d9xqX!e84aRa}%+YlMzz+ocZ^VeUu;)rK|Z)u-EmGm?tEL zL}6aH!2CSlR&&y9iLbK#BV+PCTJ)blA{Ysi=F1Ejr=}N2qXRQy!0}Dzzvz=d$&Af; z)S}}3-c~vanDtYK5AH98#ga2}Jb4Y_azj}gK+}uwqeT>ze-=4+Zi>aRDBA*&YIHvb zcx|gx3-?US$7?d8oYVR4nUuk~`gc6q534@K-f$|+z{L+h>pthe+fn2#L;@2i9MuCf z*SgD)xPniBm(Bw#XrwKJVF{9KX%Q}|!av+s_(`S+@>ydT@kkDL3-1}a8y}Z~MbTOe zia6|wkKKP@BNZu(G&zh@!M3Gfstn#_;K)>ZY`H6PvgASjH{jOp~ycDbAnR| zGg#ZmqN~!4gh_t&s4|N17o!ahb;o;Ul+gNA^n^d)SeDNCw(=%0tr8%N4XC{R&yAeN zM!Sf?ynCP92iNGn+he}q{a*DxXDzrYL?!J``9zy3!5HkKC|to%zw+zO``d4JrjyOTzjibwD=*a8 zJ%nl%<;sbHb=^1OE#7thP1WxW`Aw>cFJpm@g~E4L!EgOjD0)t84?FP@X4G)g5-+!f z?`?ut%{5O*NZlV?oUAXVCFDH^$nS*YCwMZ$hh>=4mEY|aJJ#(GDvZcgN|g;N|0ly6 zL-}U^4 z=`IJ=E%Se0&)DI>$5qwfug146kB|dSS3)>-F;twm*R4ek(HVz&ZK^bl#2BAjlLCgC zu!W~7R|he#>%WVZT6^>-@KJr(#Qih{Dd4W0z6b zVWp^jS*oTLZ!V{YwmL<-XPm?wY-=;lh`DA(i-)YdWatA3FWIM0>`lqmfadEjTq>HO zl?rt3@42T=DhJs{=cWXuTEI?OsYREBaT=C7Noro>Y`FGi*C|fdFBX({jNb(7*<8JY zT`4ua{uwt*(T~}mHk2)niIA(1mHnK~-W|$bcx~W74e%S!v7+UtZiI!VG^OJq3f?VN zB!bG?=OlzzcDDdwT)@I~H|`a~vMoO@TroD53s}>{;Kx9N!_vLjDf@g|QO%s4ols-~ z*!fnNrzn7*FuiCN=v~g9N*&TAgun6G$Vf_nK>$57Xm%h)kz_z#v9&zu^U-9NNlE^a z=3iS=RV^YwDX_!@n*7nvL7w&(W^C`nF&@jb3C&olA5ebw|psZEvX4l z*ii?k3|N_LUvkpDMz1RBX2a96SvSGB?Nfl*ZSz;8DWf2D#CV8rU_2&665#{jI{M@? z^D{h$_0o)uqzXw%fWF~W`+>5c7bw47$3B`^Q`vLjnLGMJ(<5SvLzNb%ujftIa2j{x zB_HPV#Jh9o+(JxWs}Dc-GO8E| z4`pRafSjyGUcaNLwmoE`T5*Zv)EPFqQZ>;{Vd=i)Se*uTN7L;1p48F2-xQf5?a)aO+zv z#!T+AB~1`Mzr6KFW|NO(H~{T4&04;av-iR5@9S}*8;SGmL5A*~yU8!Q-1S?igLtj} zEm2jBayo}uRXU#aF1{qe549CwRm=LCa!2(`62M_XDzmN*D)i+mOaAaFyTfJ zNCs1gF&A(k^o!Z;)p0N$arV{^aZ-n*Z;S$g+o_aBQHvC^QbKwWoo^~bmI8L17IL^P zDNztV>f~e!d+?^WMc!59qamciHdq6@8DXqT!m2Nja4b@*IE!6_IS~xFo&XTDR*UtE&85hPxtDH6!sKmIEM=Vpq7BZvDV10FiIPhTh12YiEa^E_bbg4;yH)sz^!B>%p?Y9U?!(g{{ z!Gb@DDY780EohxLdp5401L%N@=L|0Qh$#PSyjLY@8~}cNWBl>}uYuRbZq;Zc?f30e zl}_t*O26EzwQzYuro`@SI)P8;8tb~N67Nvxa$xux?DShRpi`_P5Y~XIAZS_m_ZlYlqdP8#sj)7obK}EgYo5^Paz~gO<y7^l#Qz4yOZdOqYdm^8qG@I|5KY2ZKC10-H=c1#4_ zdEm1DbZVxCot%Jbd^M`jPgyA3-6w`P!b--njaZ^-^7U37d1G-{JGGdm1Q|lqH9h8f z;6V+DdI8L@{68UNr3)w#vWc}}-7TSl4kSl!@t194kOD{&1o`ihSsqU4^zrGF}Vb8H&njh5}DT+$L|f< zB?34TQu0P$XjuqQju;zD?dt`y0y+JgrO-6jyf2){a#qCgt&F^iA8<*k1jzHJg=HWG4mTh>;eUf+4X`jbM}RL0WO*jSs)tF}?d z5Lq6JNna2!{X7f*i1-XeA5aMATOLMYg6f*LvqK+X1O39hgD1pe?bnxa%G9Ph5SqJW zNUM{4h#Kq~^U623*%5&>VM2OHl#$@B9w17`(Oa(y*LR&7^Fnl@8_tpm3 zt_+~b0M(L=z9_ug8n#-)MtVpBInu9$RPFd6=)O3WmvxCb&=Ll#{lX>2jz}xTmB?!k zReQcwK_SEgk!*cU_h7ag(De_?!jv1X-bXK4PtOA+Z%iVEfQe*K4wPT&V-)z0^QArz zmcW-6h6!uG0E~OSpT~C;n~1vSt#hD5K&UM|V8$*mV8t;q8)_1+bfEy*PZiyqj>P8XTRA}#5 zXf}oIeBETl;|?yX;_y*CgKNeKnaS}-6$fG&`Q)%~$=Ky2bV_JoSvOsPQDzmIKi)~n z?JE6})qHPP-=%}3e3p*rohI8jybgh%j(L2XBYiAEPoK2SF;9xrRNd{APqSw;(q?-z z-;>(=gp|(SxG$Af#4#|Atp-vV|Flp8@Xt9ID2_K`@wZFWZnB;g0}eX7B-?3i`MG+- zpp@kbogvA8dbe^CEx0EJT=$6u`O|er!x}0cZ=ML=Ds}X|xU>X!15(!6_>cemH>i%| zp%SR{sEB8Y{=|(JI=?J3%Bl7#;M>}|*$S5yZ||zsNPqE5(wAn~@Z^OP{{^D#)WdrP zbxG4(bIG|hPu$8&Q&z?Hw`i*s|5x!7Gn23N3OyTGcsD{9D1sI%*|MeJ{p zJq&uceRp33$~m3&e71_IgqY3-m0UX^gtmD;Gyz_W9a}8NI@~CHP@*=Db><7>^-=_z zYnGOpl5FVf%VGrnWyO>+6Mvz1H6lAEfvmfptgF`?_0zoWtO+2JX!0sR9{V+Y(gS5< zZNFgn$$|du`P4DL_h%(-)+Kl7go0nYHkc;LN&%iajJt<%7m*$=cYK*=c?kPM0OjwB z@6M6>J5a;Qc)jHbLln^=)L_Qi!Xulo#jst>KAVE50*eRqpzkx(B0#S2+U2wJi-M7; zM=GNZRC?LhOoasn##T1L{&?^&z3Ksz3$iB<|2584r9c)RXvz@&#?eTXVEG>Icdvl3 zpFrZ66e8Q+^BFZzZME_0ZkIx4`Y_8P;0s*C3fLAe_uCR}JK4cU`2M*Op0ID#GP1WL zM2-M7(8Ld8*Hl5sCy#kw4ky{vl0;{=YMO>e11NHcaCN7SenuN4fA|{_Y5V+~WA4uJ zs7m?K%raeKXT#ZqK7bD7q64F_0Q>(|R0O)BOXm|if9s(Gwa8U=CmAH~7pnAG3Ilpku4nYcla+Ys~lv$%*Sp+^&ZEOq1 z%LAi2$FTP*B@Oh$*_`b<0eBikn+#aEG|>blfY}ugXcHjU7*_DXQhjh6NQM~ID>e{~ zvLZbuUZ9f)MM!_SUX@<7{Mprzgq2((H<8-(R_aZP8yHo1?_xxcLGh*OI)4t#A$|mMh98lA* z;TOaxGRW_VB23KfHhM}d6!IuPECR@RPt%{t)n$+X@9axQaJ%}trw4LQ76o3l=(Zu{=n92i`6gR0TnR2_0}i zscztPA|5;pJk&z4C@QSoUW}3btG!~WZJ3wQ#2|}ndxkfutH#Ku&9$fX-Lj9_aLqEG z`=D{8+M}*>fq12*CvYi8J<7iafWj6>9zs`F`rWveK&mVoo{OybA@#cjseoZ$#O-VH z2IoZp?ih%Xr{l6_1c*1h%aa)*H$n=27^19gQu!&598wHbix_`C2fCY5WA>y!#$+DapaJvmCO8ph;Px97_D9H}i?trN!-W<;b7W_rqGd_nA( zAdv3&Zpn#2Cs`s8e`y&1mAl^o(K^>N2+jf zc#)Mf+cax<@N9^T#>z$fmrF%tNsri(I}#n8>rNRGgCWHMxgouGV--o{#JrO+&`y=# z!!wn%3u(;}btz)nhg>OkaBSwEiQ>4yDQqbogfjL-3q z&q07t6CqOl6=3Mw-BoZ}hS<9FeMKVRvzNYoB{7?CZ`(4B)t5`*AqTFdbD<|fl?Ctt zn?`=nmD#_wOaK=fa4tc>txA&Dmep1)9ZWuvqu{0t=nR1p>srRqBy|bIfwE6Qk|2+k z(2Oh#oLUOu_;RJfV>*6jF1#;`ZIA%@G*_V~sDvNveEyWTv(EY^t)b51s%L+UCcad> zQ>kPZ!m-@wv^+pO9iPJmt!!}D`Mzb!sgYZxB zB0pO25i>&>`Nj6;+b6KZ`QR)#{+Nl02c8lJb8VbJ@Fx-g5_}euK~;coNBzHu;yPtI z5?SCnn`gc(z@xDbTLf(;+1)J9=;&&j~IJDz9hNI|Rp zr4(?4G#>HL4Z5S!4`_H85fTCmPl}gJeymsQh8k`$`m@Seu|KtTsaqftVXjVu+P1v@j=UltZTj>F!#Q8YpYno*fV?jYPyMl`2rvj zG#?H@o?gz)r}3c@ZT>qd!3VSsQ#*?BU-i?oLACJU*LrQU4#!&@2#(j}C_`>Ij^`Ays`PmBQ>cdw7TQ=n11BwQC$WBEMR zzqREiSM&GHRcz5+p*{wmzWz}KjxRlmN-#0GnJ;E(RqK|Emhd7zzN_yRpWb3S$M2hV zcQQ3t`2Rz@;KiiGNhL|%R;;d8`ie22CD}?!2ORja=MdX#p=)0gkV8A3m3(Rkf={Ud z!-jBr6U<~Q4*Zf13JX=`zp$dEqYBa z{dNTgm7@pb_Na=4C6vkOY&1C-ilwPJC4wj_LzK2{#3y0xZH~>2Ha~}(msu>KM4Ac| z{UR@Ox8=6aKh$tr3NtzmnzyRKKbY?^E4TKAu)0|6!zKN{+1x-k_cCc2=vb*6lRz<8 zU+2JC5ltD7ZYj4hs++P4W7E*HyK{2ENI!|5rPsH^`dK8w9y##&@jGfo#L3#zYyqN? z1ce;Y7Lty|1sY`S%gy`nzXUvZh$8t@a(#OSMIKF}m>4lWnV7hcnDBiVO-chK=X`4P z?2gN?BmQZbtT6B})GO6Pc$5WgfI`_6K zb>3%Qxp`XNHL%k#;)7kSWVK581IqZijxv?Hlec&jkV^=YxV}kODJ!|=8IP-BDv}G+ zVz}9?DO3n6c$LZB5*`&;nBGkZT0H4x4`Ds}_SUMckhU&)IP|kH$$!I~ge~0LW_7az z+~(^1pMC-T0sf-=LnAqTG(kQI0G{xl>u5TAox_}>Zb3P<86(4g@a@p7AS($;pZQ#z zb`b}WzkJJIOoddESxY~42K7Vi8Gqzx!-5I%`;6 zGqd+aug$ljqgA)%J>?P{Ff(!&T4AA+S0h@_suDB>u}(=2<$c%%^Yl0XUGJ&BZx?ftq#=o#*^ylfDN*vKtYu;>Vpm`agGBH?mpild) zP$aM^r<`0l%kPzAq-XBcpVoKs!VHJ#+Q9N&$20G;vP!YH zZ)^z2#iKiykKcFGslc@YE;I-pt;DlVZ*lx^h9Px}!o$8k>NguPv-L6u=F{#(z1bZo zh^)C8SuN>IgLFJ_`ZTJ)A7rKW4<7-7A-gE*2QWO|hf5d`B#Ut%2BSk9?!eHP(6JpAW(3$>Yy~e=b6aZW&x?E(QoU}_iE4Yz*`7#T`)CGlAoH(W$)ZFv zLFOkhKA|WHqN>FS^+r6zdi4j=?F>Vd{jh;qyey>EVCzI!Nuj& zR8j0;B#no!k5dB}`IVW1wsC2m%&Fg!N`u5s_TYj3UCo+cf`1RBuZ){1>lO zEX*mi=pV^jI`HyeP+Dm3zDv}7frHEsVQNk`S~C7_$L^tQVZLOJspu(VA$9MFI{3>E zT%+LfIx478zw(Ti^COQ`#(I0wHznVP%s8cOpQTJsI*OJPJI>fUGe>wiZW$n=vi8s;FIG zvYhVZv(=yZQGt?XXeSCG_F8JgobcaoW3U8!V?I;X9@xZAnMU1xiA^UDmvESRp7cSb zDtmgam{8NcVN(*2TJfnZjmw7+>&NRS%Re#ZMQwR{mqH~Ak2nt18%ZK_^RNbCGT4AE z>eL2$7Xu2IpAF>+r;P+#&g09ZA3Zo@vdmm;P<}A|$}?+9Gcv@bIt@b)7~SUy9WDNe z#V)*^nW_pihLRsqtabc}`WuI9+NC>5b#*?k>nV{>6tXBTz_WA|XTqmY)*& zvJn@wwfy`aTW@WUiTntFM#<5VKnR_O-@5}k!_m(o`H}fkiW0{dn$_^Hb?iA6;)p=| zZr_+}6XVn6sPW#&LN`u?Tw+&M^=l6usobyMR|DnSU z)zq`EAmi%j23g*(R+yACJLv1JJj8?3z_~NwTK5$mLk=Iy%`24or} zS3bTw6j~?RB4pKDxcm0z=wlQyhV|iX`$Es+4C`T~Do2?(^{sr@cz76r1zeO#VtW*y zDB_{&xE&gJZeX9tfiV2%ZMYAMlpcE#Szv`iJ){dHcO40Jy^HD1{!D?6OC0IyHvF)@ z=lmAs(J8(d3!S<($Dnx>^+t+Hy_0(XIu)8Hs+b` zm|UD2g-$QvH~FsWiw81fN++rD7e3%F2C^8;tUdVZ=Y*Y9vy>v)lG)R5qm&*Xc;c!a zCb)6m7i|`eVZH|ocdf_1_tvo2ia)pQZ2<*PU4T#m?euAhTcNmon?ErnXhg0^W;2p3 z%TV;gP*K?5tzaV+t1RY39uyzAR)({p77|XOEMO}iH4AClepS1Tcn;_d*7H~q!;JcF z_ozi1)^D=jw7;~q1sJv@DbDFQuu-{qz{GfPg%AtX3lSW&Xnl(3!N+PO%@{IsJn0)G zhzlg=Ogr^112%i6vu$wqouYQG4aHB0RBjafXk^-w$KA|HPj<7y{73W^%Tm^j=ck1I zvA6)StsKhS05WX(TK;zhGM`VT78+!D^^AbQp{kNRaMnLe^W0FhHSu%?BI*ghXUzZ> zAwx$?t`f2JB3C=ec5*c8iEWe<9l-FkP<#Rm;}>oj?Ruf*xbw}wMvrxC<`hWguSz3m zTW4L_57@f7X$M^!W(idKWA0~8Sg#nBp|}@5lT%gCgqn!?l3pi`Ik8W{Tr$6tyI1zS zbaPNB`Iuj&l~$AJqnd2G!|iPdXN9hGnX-L%&5GSM5_1NGNj1jT?S!8hpR2{I$OrM% zBzy*Y1m}l+dq;_l#N%pj*+Y-88Gk+={%Y~xFC|C2*k@~lRd|3ZsDcXR1nyfH|I+Mn z_(c}AQF_DuLw0)4M3?9N2Zg%FR-4gMaz;$M`et>pJW0ngFAP}wE3XV^MqyzWmtz`p z_btpyC~eCVkkv8XpOj`id9 z5@rnf^U^fzb;k8QyW9aAJ#_1%Yf^Vm7Ho0d0DNuxu@GgSiTM>|>DhT08%8;kgsr~#yixtq8z zDmemv+_Di6_fKt?&Z5VWSzrlIXOOm+5{5mVK|&V^k)y*{0uc1P6oPi;uI13$!!@OS zHaYP%F}0T*xV0DoDs3xfeUCN+a-LPh>Pw8^=p}QtGc;|Rt{cnR5)H8G6sA1=hP4h% zqIPjCXeK%TMy}xwC9eAQmVI67$@pCQiyPb@&~RjJXyH@SxdS{L$0>>riB5o#4Gn8- zIRSCS2*u!kpNk$)%LWv+KRFU5tOnQfa=D5c9?0G)c>xEJPNOqM4ys)2XlMCXnQi{w{{HtUr@QGAk+*1f1m=g1qdya#ZQug47sC-0A0KTRYcvPa2&|E~O^Vcp<$mxd?R_LsF% zWpK|oXf&UCVXaoaFf2gF(>82;&4LK3wleZt?V2~{G&^Xz}^K_T{gAsB5bF|h;pv)Q8cw%eYYpyd(A zf1~wgEq@|vfC3yq5(<~1Tg67&FqN*jn1dTUUopm*a53SD^>PVu$5HwuREbM@18N}T zjW6{(paJyGWK6hr{f$Xf%XoLmWlm~7e8c@K?F;P_!^m)pONEH(Lmv~t{b%NZ+Rlj#E9s-g)Bal!dgz1=zOE0l)p#adj@XKt4@~AkeWw&2 zEZvRM2d-^y|6@DX$4}mLMSi$9I$Jm{iME!TEQ`2L=4}MwfX~q{;$KHBSkYEpdY^NY zg?+F4Z7fGHNGCScp&2Ouu~xc1^n{hUv1R*l`dCVS4NOFL)8ehlW2};tw*|%=ERfN_ z7j~^g0Tk6xo$QE&EJTuq<}?#Rf6G-_v%dlYSR@ zBB}Lf&yQvVR`%q$am_E1U>%KfWyzF=cNAdR9;E=5>qCCUf4&BPpvWxn0V5N0=fAq+ zt?T-U@h*4KFYEBE97wNIVWrUs2uY#ZE~BW+s&pSZ+552q<;*z9ADkeVE$M0*G1DWI3ex(U{nGrwGjtcvOwr8t{NLiRT6GKrT9aF$B z%qL*yMqb6z9f8xHyS}#0oFEhmU)~eN0%l~oXefj=D4?TKStSPCuQ`Hhi6|fl%E30G@*kKIJL*F_gtKzL@-MKr2?HV$$Lj-<=*5`$f zxqb~gY0dm)2^zAkkqw4uajpDZBaovDysei6&IHA8s7`0M9EGwmKKT>!NX%wrQi~o( zK>B0N0V<9N&My_zBSc1tZxJztyxLi8u=o+ArXYbRmm01f1{Is9kmOy_U= z>*p?qWwfDSNYIO=0DCPEJyK-N?H2KtH{=O>1K--o^i74($}O|3{~niCKo{tmiy&v8 z{lyM95a8^Lh0=8A!{MNi0A?fvK1V~0*}b#hXmL6AE}jw~A{aGgiBLG$C=7fYt(V}w z(5y!xY&MT+o2dX6&%>guL5oud(shU3t7(Uu6IPSbhwm6BvEk{~zW@DT4y3PzNO7YA zacZmO+~=e%riUjWaQtvV*x9BymY{}&x)_DS(*{(9RU+a75t0qo6mYd2*ts1H5~DmY4tye>hL$B z9_F7XLx8j=ixNp&vW+^b!0+g*ECvrLM-l36#p*l!O+RNw3`?&q|)jwiqW%P}|>qV!N^uG)>AeYZzaR%~q^7SLL%JJt1bV18HK7Z;Zh+2tJy zfM_-g*z?Tj8MJ_7y{@a|jj7gGzqh_Uczx<#lkW;{_6gA96R3FJw{v?dPp1(yR;C%| zO^DLUdSGNKK@k7F@!-v8h=FWo>we7XpqP@8Y+G6Sj}dvv`6yQ$7Zq_gj|DAFpKpJ; z%d9bEpHI(A$O`D1#Xn2wv57{&Bwp||vwLh=foj>V$3T^vovet^L#4@xE)JPtBrBRJ z?8aiyE~4veCJF!jIBRD=vCzQ;A2m;m8 zSDY#65hV+1O7sr}POOu&AQwCtO9&i&Kw#JF{a7(8s%2%~wVuaVH#WVyr-%RH=DSKG z{Y-I~^09`M3I3u4AB6|JFp0~GXSvh@B->+-OV4=!Vxxs0*9BWh>%(J~7n*p7cb6Xk zG@jt@Z47w3ja=BI-y;}RI|0KKA9sKi#FOOH7e0ai5Dzqe0t+Sx@9HhCMp>qU73Tgz znJ-=*F60>Gf3*tjup|Z^(6-_>Ap{6TGXL_z>xXFYLp+7BwB%RQFSZ|WgrQ$+4o9bO zEDi7l4Ju?cAY(&M(fj*je8Yp4I^>P;Z(n_xuC*!~b&QOr4Zkqv-{^upWK#Z_Y(++b z$G>78W1~K%Qvo_oFM%+ftG$^F5uinXx<=w33=#8GI#Sw-Q|T_D?R*oK^H#kaI-3BD zHe~2~ztSd@hs=F^xBlb5N6!`WNolcvJr;NtAQ}-S9^3hac&3X8UV-NdWE~bZ^t(N+ zVOVP@fH{CP%@PSav+L!oe}v3Ct1tlq(^+<>Mqp22^xFXpH`8+XFGePpQJ? zuhX@Q$@upEkXq`IykdB>8Ph!31n}NmDO{tD>E3P4J$G;USOy^{$)(}UfJuWx2qP?5Tpn!VC(Ss zhvu~VH#ymobe2*nSy@>Hx$V*bGgbWRz%18r2p}iL9BHZ0g)!Or^4x`tK^cL{pSgrM z!gW~EI!<<&-ypIaq$1L$iGlmFwlh>!^;ll)?uYMLjLv6^oM7mia(omf!_(IYgpmVr zF4XQssEz+>a6D=wG5ngnHm{VQYV8Z(W-1l(*z zV!=cea)-P$Z(~A(rw^O^!oDuvSG<_~w9~tUJC^96G&VlR|26*)@{Q(B;GfGYTi6(EOHfxHxiLq1&rl@O^B%dJ5n1j#XICBO%z$h-3BOi&N~4QA zatFe~)Cl#$pah;mjt?3@t;XqQlx3mv&DS8eOFc$_-k61cFmp?57G(}zRH+5!)IIhM zApEcT$m+Y=uv%EY(}U;@f*S*$?NbAi6)#``b7@&U|EBTC2P6XrEVjwa=FiXVCzup7 zz-5FvQ_K&OTC&)4bqgXPD+^*?kS4C1*e zXuJA-SmX=9sIWNu3QPC13_Qf}$;3ZLD+~$DMy5M4H+o9w?5iI-LFxTTxt%;HR`$uT z``}6?BEb$1RazZl> z`Ekh8O+GV(rw*Ksaa26n1-krq1ODA*(yi6Kg zZBfA91xFLfJp!)Xc$Z@>h(#Q)OESL}^ZF0~%!;g!s7HkJjehKWd_-2pd_=_QCi%*X z&)%5hZT(=+A5h%{{t+A0u*y}4k%{n4&xU-b+k{ztIj*s5JH$Lt=u4#OvRJja3Jk(x{3z1&ZlH=Uk2(E$}&ozlIA2? zM!@p`A*#gWzR$fs=dp^zV-Owp?bZ7jgBs>!Ok-^trlg_m`Ld?-Di3C|PtMpaH`6w) zF{)j2(WH9F19U5;4=?ax&O`^9n000@_`w(=u`NaApBZ(Q;Z5HrYI-q%1s^5l59AAS zW_HU+n~A~VGiduO<_#glp+l5O_ z!q*{pJNqTR?oBR%-`|Ay=}zsX9h>BcScV5G2}_DpZk_BoB42W3K?xrmgH4l~ljMY- zbXHty78-4Co{$lIzy9o{)bM@aUa-d~ryS+Kw(bdK0L){bh*nQ1>g`#LW7COZ+Z2XR zXDGgHAKfog=i8M+*g?B>%Wa+{o((g6}Rws zicgcycW*gF3onvnNbKg3U#2DqAkT?$P$^5Z&assFfEzv_BOge~X&Uq?B>NP~eMvcv ztB426Df=sM$*}rkzY&7p?#bqw&_lYmywX-7c)FNO$>zfs^+9|@CFqY0kbQ9RN>)0I z62b4>;@I!nKbcha9}dW$Lemf--0^NFDw7yj?PCU6CJh3rosmfBUma3%EHL1KUnCE( z0Ut3~d>VyGzICd=#$|Ev%a_PDO0Ma?f;o+7Mj&w*D)7~oba#C8%o2JKV;UKO5r+m- zJ+mmS)Bj3DCh4|r&hmFq`x3{^U5KB-XIOvW7d3U&ho#;ocFih8{o|K}#O)SePlasg z`L4#7e-26Q6Hm-@m#?2R>pP=!rU~}a*pFFS){H}C6+B{!4j*gy6k)6U9p(S3d1Y5d zE}`25j1FYz8(C~w)Fgdr@%A99;l5F5@VzwLAc=x(6iF~=7x+`OpP{I4;-rna+ zAf%m>G!v+`@yU!Xi^pUw)Z?`&ujGB0G@43589-z18N;sH;B1~e`LDx+tYzwFMw@zH zF@0WX`Eg;v%EDChI!1can5tNJnej^=pig0NUeB0{;uZID_>nQF~L2m@eIYWq=ZsnE9B->DU7sFU@N&oNl4NA0pV-l7mrw$5*&U}0UZ@X2p% z)QylFh!=|}4;)7KJ~?DE&s6nCT?fwJhE6L3To!MGF^zQy;1^9FfghdUjiSTo*@@th z_=M3Xr@&!nIgH0rgycmHggFBd6Iy#xwHRZ&iGzr?vPpN#~mq;E=tJ; zsg9zITNvq}ZaiPVF@RmQ*}Tb^LbJLvY)*3;d=Q2eTkG+l46z*( zquYQ2h^6yiO7FlYvV-*~T-Ra!ZfgSMzL*Pe9H`(Rxt@2K*ng}KWPxU5T`s}|*^6Qb z#$121fdg#I2@|$d)UJfwayU5>Opg8HEyvZ_8U7Fx=>zLP$o=cv-PC+K>#NGK`Si}X zICD+3tiG{#R-Z*Kn=jJ*U4N)$hUAB(^k}XF!!q(?lcMdeyUk_Ojn2v~6TTm=x%@k8@s~Ux*cti&|Kr}GVSN|AxQ)GY?MEvUmsvQF;kr>Zew)h`S zA@40P*ebTYc%d+kKye|q2V}tuC%IcqM}EQz%j^-Cz;G`vdLU6P;CkjHj2B1|navAp z+NY=Vcyum-+6zOLO#e~RmznKfe{t7fQBBq*QIez?)xmTpzlxn0Gr$s*G);6+PB8V6 zL&AiYXI5(Z2G!x6nu%9t0i&N)#jCoA-H7HoRp5*p;l-ul7Q-)pH};KBZ&7K9jNyW3 zE|sP9T#_5U9q>hT8VjMT31y%;?6i4XvMfE3+#0ioJ5g90zAo=V3^N|2uktr|lKUz@ zJYDSw-1p0sX9}ikRC8cY zz)Y?Y57SfPwW%n~{I@t`n%n5@^fwJ10UQkLTagg*UOkVrQSWm`)<(7Q{;yoO!M1$~ zeLHStTtr)GHKMIyk@Z?5+zI7AtXLXq|C@;VZ^gOiA&?Asyc}zRU6Q42GK>a6(2yeb zCKd!Oi@SBmIEke%E8^u*BUY^?DC>z-q!p(wE1Rc2rNYPUC*%Mpf4mC?#f}vjA_Y5C zC!Q=k>DwpHRkQ1eJsah_>5rwtLnOR&#`*Z~fXn(P%oT*xC<(p6*yjcHJmgff`#2Rb z`e{_QhTK{HawoZ1%`E(u0>EKa|Ct_+C~&5*S+lL>!DnH_T)^b=(wwo~ z0!6We2kJZ(z2BikuY@au`aWR%?;X&{sGcQ9U_{~m!hClwqsknN^Prk&BMEAyKt^CL z3~$@=WF$hb@idDpF(dUnLuB_ICXA&4FOwUr;%{@OYu$ax2Tkm(Z=%_rn08sSCU~Q~ z?pikL==#Rz#kq$P>d9RFKD8nOg$yLO8{xpbLu~)kn!iyv#uzYyD7pLii{s zG1E6q71k=Jg8E$H>_-WVDiE0V{B!dhIw!ZMRryBgS|5beK|Nxd|8|`G)u{V&{-;KN z#NGYY=kDLPH^bRh*Z}5i4b_ekR_%*}1pJQNK78jpsEySenByYQY3?X!-P*6S2A|$l zg8ii37vczXxuhua_I|RyuPMV7>W>jl6y1@W!MfHT{v@r3V`dmiM!ZDu=P-}YlxT9$ zbsOZG7#kj@_Zcw%Ns5SIU6}qsj*qOgy+C1t`wa8_aZ1)<1F{Aq<4^vv?H`#1+lh}H zRB>zX5+`oY2}$g6SHuT(BU|3}$0l^D-t5bAU9~`R^3-Jgv@U}U6UDn6?Yn`He@YD& zNe!P0h$t;e!_!$f4@yyQqQ?eRHtcWHqL4ktwlDu3X@21K@x3;sX(X4PlfkL2Gnr)s zwTfWF=WaVo^@sm{Z2UF7tlC{OIMZ?ThwP))7A;+2pGoqseF1d(6Sb9vKwV(IkTnT# z2zgzDafJ8ybNhXS9KQq9*V&w;(EjqW zQ5{3KtM})&LAZp{Ej>^8Qyy)t@rt=B_b%)c6S-tc!-OS_*rXZ_zKGvmRT1`QcE9wm z?tW2aKvSe?9}9LJF6Ef{lW+c8-=$Q7;lHRn7Hn@ZvSCsJRy6b%O+vzFr#5!WH`^rQ zG)YqqcV_qU2PP+B_WrzU?#?GmS4+VYJ~G{b^BrqVGHmLeaQXORhfh6ZgKX77cxrz* zeFblw*cT6zzxR6X&u&jQf(3Dzba+tV#e}T`li}~d&7Bq?NpwutVurGAwft>LSDg^y zH(fSisd4UI0R06l1@*{8ZdY?PgGOAThi*f2(A6yD)rn%@v>~$P4t|zR;nDZ_LP&78 zIRdG%ZVmGIm=)*a(M;B$A5ULgRq(C)Cld@ zBeRi5@m1f(*C?_Y@^ULYCQj$JJ!3^rCkMZiu>xkrW85fW8q0KMd~lznC>aDfUy+VX z0%H%?tVy+wT2$1UhKZhtMD_i;91bwd+aE5DEx$6&X(JAW|JCB0LqcVF4`NGSxkr7We>O}&xh2j_A14pv{1uy=^wSoo zyixn&mz|8P>#AgbcN5V&fUR*C`-d{kQ)dR$M(iEL6defK# ziYsvV_Y7s$n@;ywdyNXwf%*C9A7BBykiStYdbnu4eO4?&3qid+3Ax!UitU$`)hCf5 zH=yR!+&NxZB4L-tW$L<`yLuO~(YVj4no42hPhU;*WA#lbqlJAuZQi^0c<@#^u@Ao8 z9*#dJ_HAspSBh2Iz2MJG$EB#!U%a0LP4qc{B@m1P0{CGgQfyYin;B$1KRccqGKR~( zvCgxy0N3r9_7eLsyD21^S%-2zf`t?7zR$wHk;GC|Tnk-ceD-}Vmw2LFS&(N63;y&} zDsQA!Qj9k%)|$`cJ>iA>xmv&SlWrTjGRi-%neP{?R*OQ24Jyrc)qYEAqrKoMs=qRs zSxZi-{zH}^TGX-??17AwgIPDAl^2DNZ)^ric?g4!E_Y*gu_DIqI38xVj~~Gb8T`)f zhtU33GK)`*b#rRwb-^hN)^q8|%r0gL%!t#f`^wk04KSu#41SA$vq^~XHQMR6gPPmc z&=9*r=D%BUCQbaZc14bqIlt_j9Kl1yb{5tNEbervQz9$tgdi&xKWeKG&X5`r7mVBH z`3xVn;N(|}cm4UM`I8fN>Dk%zoo{k!EEHE<|Lm5q;xfk!jkHHK9I$@%7QjFPlL zIXe=#Lm_b{ZzqAljT+Cx-Ba5kxALj0HHD(xTSCOrAP&ibDA2_P4LP-WHAvQA92`wbq)@=-cLX6K6Mq?C(t%vN08*OA%I4A?5Tqmo`DKl} zk^{;QYznTjQX~k|00j0sct}`*8v!;5MG6$!52=iA$0R{R$*&yjEZ?VuzkfD-%OpUkp1IZ>;{+xKdF=E?#WDEj*#^0& zo-=>=OK5P5S|AGQ7;SlC2P4Htz~d)CHngd^YkeD`OGX!baO z`jzUH@L9p{Ip`ej&;nxCN3M2%AiVAdP%ta{;=bjH2E1;jG^7|v@eywj9de-GYDh^` zcwE)m1Vl}Jai0Y)OhaO$o!t&TqMSve1R~cly>!u-XB{EU0{ZvP%Q9c8IqUlgOx&+X zU7@38Vgj}eAEsS#C)$e%wVKasbAKeR6=@d*PPK9ruJFzaiGs*FjkV5inz+ddc;82e zS9N-ew0ua2;n#&oozj!)Y;5wWNz1$ASih!6YrNxvq86?yVq;5R6D< zw`-?CvQmv~35KZ)JO$SkOOK6+@kLp{$P1;~o4c9^8GyJCQTOh$wu7~kiJPb~?}gv~ z(7}q9v>APsRGd;?)EDvZ>|tlX)83 z5rqM9)6XL-raxB5GZ>(F3rz*^S1kl-V8(%sc^d!amU(G_MoJ6o;y=FKyAJ+v{>1-b zP9KS7?yV{Hg*kcS;+&jv*q?Ya&I%VeQTW!_)({kDrr1*FjmN`q{}z4DHXlgFVvz6e zV2T}PiPq045{z`kI{C^;jgoJv)?)we0`PYT)AYCl1YSd?-IMFjNAoDryh>0faW3qG zUz54wIW7b`mtqo&sIz`!7}k^^XW45K^bhj-dnv5kXiXSBlI3aPJ;P zy&!VJSD-+0*3z0&)-qd)Ax;9T93f$vZ2vnR7gBmqb{CE|f<$SMj*MzbE$kkB^Mhoi zw68N|N331u9G0;WQ9~n@^cw``XkqZ@-vU?)7~@su_3e2VEtj72DZ{;2Z%AO zwYB))BLt&T)k6NZ`ndHbAIq*ms>0siB{X71nUMT?Q@>k5~COBlPcr zOWa^6__O~;&a}H+@Smj4PQLZU@ISkxtPy9Gwagq0v{JSHf1|%L2`5_orIV11!y>{^ zuj73`0(sz{!b}p^tj>(E5ZRD{H*z4UaN7WP2;9x`_08Pt{l67EL*Jbo&AQveUWdAd z-v6LnnRMntD@y`QcbNHoFxy#jNQ(baO86_ep4@qCJ`0dBv%%+&-zp`HNN5?$O9-VB zg3y>!10OMygX~1H>C&BWqS)%JSY;Y#0P<&Z$f$jjG`Ka4{SMwcy^&S)2wM`cqzKU@ zK^dlA*PBoJ$75L`_Xt8MmF4wh93E?8X;VfG@cxeJ(83FyFCaAodgexLj3vC()?skX zb@1x~uqi_u2ju|*`>DGcv0v?{2iXn^@v_kKo;a(JowvaCTbqOZW1g+~U7hi%AZZgY zL3%|I1>%$=KkTPc5T5=b%qC(5cllxmo}x4|*Cse9M4&XyWbZv+FRgKg^Wx|F#){t} zY5AqrxQJGD#||kc;~J22s~5+d!>jNV-d0TdgF&JWT&R`2>u|#%KWnZv7uYNiDH-?G z?BaUV7Dih2C`8i#P569-&uGlg=jrs`9C$d^rwl`0x7%&idHqLzUC3nz_Av#C>Jnn= z@J zwOabDrSbodqO)L&s_mlinSr5Ox{>Z~1OW*p1SF+Fy1QX$>6ZrS?(QB^NcInTAP9c$eSuJ`i74#XZ+-wFCV{D|XWFhqIeg!t27PbO>T)Ii|sAm?K&Ebac| zSgj?K{OlMF|f8RGEb1orH!^lLI2`v5?elIFVn~~h>gYQ8#(~qaydy#sF4teDwLxTt- zDOz(@?PELL5Qe5sJc$9l7C_{JMZUhljB-CWN^nc6j>2PWV*tdK)vQEn#c22MhUpHWXf=2@1`(lml|b5Aij8h&3n@@MZ*Yj2*T@(!$IbN0lKQ`uNb)-$CoVP>=peMm!8s zoL9u2?hY;@BTkbe<_C5|f+B-_bko)0h){b-&Dr}H7CWBmCO6CjXtCN+7MrBR#`XkK z0^_;P)pHz|Y^4~Ko`?;mA3MsL3J5wmU%2o*6INhukw6V`8q>6NkO#dvtO2izc9QE9_ zr%-ROX1ul#sxbHep3S@X!&^GPIM7BAq~1v96QPYR!12@JZgDm&6?|79b^n{W%Uqut zC8#4C^u&uqdbN4s5x>8n;^gPQ&zt(S9hI*-`*Cm9+%X3w3UkvmUR7zW+qW>)kZ5Id zWgRytyx}BDs(3bR7*mGolbq-$ixBttEnhY5;O*1v6=l`*F=lk}(aI-*EQE2b*5Eh* z{BvV%=%0VQL@wHn4Zs}o&l6J3{S<_N=sMNCvey?uGbw7Dy%pR(T)MWefC@?jO7{fN z5)ls0Aoq4~ua15&8SZIBn6E1OQ#l)4o5C3rCh+}@PkiJ+pPg-e=W$kTPEuWp zZ;_Xn(XWT|ipHIc8Ho?akJ;N3c<-W~wE(})cu)BcMP&&;GbTOa=_(R%)@yzMi*Z{I zU*(NYgn)IVVUS5-e#haF4ku(?_V?(&!%`AM+?f5XRrG5)NnigODI;SF+;|$p*n~3^ zM=o#;7={Uf*)MTsLvHS}k5Til-&Vzk^h)ekOmNRIRwWIjwx1yL#wIav68{Y#;_Lqta+}In9=>O)wtZI?N#Z z$hTm@8LIK2y#IZT`dTik7W+G9o}7bPy^hX1;`0~o(4m@moC^w=ik^u&MOA9B$5)-~ z!hdKP1M>-@*3(~>0inxaZ!KrSQ}V8vO#kbu(_o8gR4Pudg-y@f*^@b?&+Hi9;JjCp z+eb7#uiOH=oIkpZ+;M(l=|&oN{&gyLcqOEHqQbG{u_pV3 z^aO`1ez<7jP=6U48+xKbpJZ-x@n%Q8LJR@By_Jn4V4ljr8Qo7Zj(5fyuplZJN+2fe z_gsh9^pncnLBl^^C#SlfeacVn+Oq#nF#8L+agWph{eL6ti(Fh_$x9{;j63UyLF{9EVEYc;!Hd8$3ow z<6prO$Ix5r_4qstn*?{Nt)(ORmo~AXhqtiJ%kXf~|Ei49hb-oDIgp#&CCJUg-Df-GVh#B6(U;^PL$e7{T>WVW^mWT@+_# z*@mIt@x;r>-DW-Dc3flv*lX|%W4z*tCg-)+)j|;4!G__(GKr9<<~W=egA}C$`&G)@ zPPK!RWK8#hPa;;2$hr3B>LG!JqL|4S&m4qq-9$X&{4%Mb-3sm~=p%4zD=bbGGgmS+ ztIoA!cVUtMgK^Y0Lg%*6RkkbR3{3+D_&-ToR_QI%Gz=aq_H5lihH=T%|sw zt8*@?hb?Cc6aMBD&;bUG@1KUXemniwLl|DLE?=F0hFJk^pgYaW27%AQrw>nIV-hxPg4W*}EV!vCXm|lreE=vr%``7EltKnF7lCyvFuxTrK;Q4FrcCym)pbqaSoURINzj+50&4TG3KQrio@p^ zx0RG{p3;Y#V_48CG)rymtjK*tkHD9XVIlwxHR=?QWz8-do42`2v8@pxN!$a2u!wS? z7f{Rxam`^Q825&OXRrOg#l&!+7DHD%5K|X4VPqf=(g*7R{C5n0|9&Au{aZ1WqWbgw z@a%Gh;K~zIqgn8Vj)XhEy6Ww+IuIKUenH`~t_;nGrXuC=?DZcmF-FFsRo`<~19!{# z;gS=S;SdI1CX6~_gQ!J}LX5E0PzX*Yr4%UHBO50=!^+c*Qa@u4eCens86S!&YyXc5 z&^|um36HW7`Yw`J5RMQ3*bqq!ZNM<0MmJe`S|MtbfhH3}LraxWIwwxR-1$<|N}{|{ z!XlpTrY;Ut!1koBo+C&^0+ep}r+@5_hY!*>rr1b;K!Xq-d zH2Y_iarn_C@$&Ln9lxStN~-4 zhQLbhmR&&({iZpE8+xKf79TQ63>6J|W3Ag!__qpYu3$|Y7Qh=G>N8C!61dsp z)_$mmx`MwcG=C{2zxH^-7zn}^-xb;?4o8tZzBxv6fRU{Jg8mD~@IG_Wf{FN2>|Pqd z)A8*LmDzNc*4hf7C858VS;fI?PkF{?RSKWip0k0GZpsDlE7+MZVZ9tbScHft(k+h+ z<%f|xDB~yK$Zq0Sh!SbvlslvM=3 z(LXyW-fJ{nca_$E;S<0h^$sg(@?Wfc^tKy!{JgKQ6G>2I;k(ZOuIIp)2&mL%+^lfy zgsDLNH+_T06hCQ%78X=QqyR=EjY_H2Uu`0FmmZ#64pn2wI>`F}QZTu=8Zr#jT&JMG z_7Sm-)|`kzxz)mx+ZKu4O%b^J%Om#j@)qx9ra}jFwjL#FFoO<{IU@n2e0~ThW8Bd~ z6R3k>ZXmcC%sJzT5^Sq>pW$Lq9^ID7e3SBnJ{Mb8&m>M1H@8fW)T(7a&n7pMi zTXXco;krYE7;wZ8zeWTjh>^7_;K-P-QRXOy41Sd;jY;ryET8EgWToRMX(9x60(JHe z9>Av2!2Z;L zc9cZELrq2f1Mp6$oSGo9EH z9s52#US1_=BGu+g+KaI1-#=fhzu!a2>^Y1F*yq4SDBG ziguY}Ody>gRvTC5SI`LamciIc$a$^u3gal}lhs~m=X@Kct_CR}gWU5BcQ3{WB?ox) z2dJo0NwYIPtcPZovLkH#5SXe_aPeNfr9JxsF)hLBY{ZG`Ffk4fRJ38A^AoD65MW{$ zlC@iJgRRoat&!6X6eX!iJ}-x=_|i5IrzZM9YQMD~SJ|wuJat#hO8;;TsD=Lio7x`u z6YcpIzQXn~e2csjqkG^1NF6ckA=xgUUhV)47IamboV%m4kxMAUAGrNx3NsA@79l2$ zjzL%WZKzNknxJ*j{^ z^vK2eO(b4*|6R+Q**j8z4DXM9lzo`hCKo|HC9;v@{!$5<}?hO6>AUZE~ef={9; z^&Wtt#yt#M5}obw0EaGW7ru-T-iBPQf34MPwn&zv%DQC51~q6$tpOX0@u@dd;Y%xI zA+w^fNfU&WCnJYxe_VITO6?~SD5fvVnf*5ap}<$Ltvn_A)I!DFhiD$XolmPlla=_f zg<-wI>aY*8dTb{Imf6UTglCth0jHrla$Ar8hW^-t?yAMb10El-N@!=*0<1Cb*$gC2(UaJ~Q zzZ^(2?f^2-6U=*Dn!{+sKfF#Pa_23Fz)mRPd{|RMu9;LIIAmvB^w(3OdIfhtgj(U|6&?D%kE>p_`gZ6FdI7RUh2OdxD# z_bGL~sAL8@!ceRx5?B3&2Ua{bK7hPqa6eT*O3NJp*l1 z$p#(z-;vPB549~1iM9krh`=I5jCQu8()fSnC%!QMbBpbQf5vF`M^ z<`lbh%KRY${2LS7U;jcFk&>}3N^4LG>2ri24llL#3!0xr3}$ZE9AFs~!BybE=ZC06 zy8aW9f7M`BWWNGp$hQ}P4kMEt=NMuVIvR|?*2}HR&XCS(ZKmCpO;g>0-0M3Dvo<{N(X1$Yt4GUB7L&&yb^Yb~_jOjm7 zRU{$CG^FAlkqjcs??VUFF(Z5rpCcRM_q)YXIj(pQ_dPEb&$N|r%tyD(9OH*$20qg9 z@)9~joKeQDkp2|{lX!u9n+6HoUW^5vq@FCF|E5bcFaguDTP+<8j*&VojR?LuGR)s- z!CVAX-ORv_IrN4FMcU!bo-ys@y9H7Yiz{JtZa=(NuOjzb2j4|w0^(?PcC^4oTrLcS z2NN?fv1lxEn1RrlSn6PL6?2sk5yBMzmxr*1^zBv4taNPOm1(}*-!0J3KYs`uSKYFj zWeG5w#YC?guq)i&e$Qomi*D9;U1JK?#n43&XfG8!8EQephR3IAD{T~M*2?t6$2`Vc z$;H$^{%I@?d;_xJ$lX;t+zJu;%iD5xLz^F)gG*z)CCbrgMn6!w&G4Bks9v_94;Ad} zbvyeBpzLG3yL)GM6o&H_*Ne3q_9O6)&~HY4vQY{lrJ}?mxF9rVJyP;v z*bfA62t;{zfKZ(IZ@r^~YAI!ed0%aTs?x&AGjD-DWZ; zi2!}Vcr~kofNg|rr1{kb2p;@{&7qazOa^s%W#6CtuF&6WF|+2hril44RRHn+L%VgV z(9&M54(QAcm@qhZ5s`x1Ue`CjJ`$VM>)oU0bJE6gSBKeG0G9jLhnldG^LAuY&T+9E z3}gMWZwxoaC}$Xhx7hH%e9e#str`W6OLu{C2Xfm;-n)EPXP_*KpcIgr(V z7is=8efH$Red)kUyxM#8XXC(A#-V2Lh;5SnhKv>r-Q)xxESyT{y$s>RZL_#>;{ak) zb<{7U#ogYm-ntzwYNjm4z)!jR=?1exdlgAG1j7hAu3r=O5;h2a^!M-oqQ$ zv)mvN&eF_Kzpt9a@jvp=lK-s;;E4K52%*C!EsmU6$Q|t}wnezzl8HR^mn_pJ_M8m( zoOs{UxLr$3Jd7C#X;CS2_3|8Q_v_#p&Fee<9rMMGQc@TIJ0L(r_)+2PqylOn^^Ftd z0H#GBI^X?u_-F5}Oi}~|>|B7`O{mut*%*mbr5btup{qR4KLupjSnqLT31p1J-dahf z(0^7F!&CGO{qE0*WU^q2W<1|!p*(juiCQIYf8oNRAO)}8JanHysi#@pfjIGmfq1aq z)%8oya^vq%dO+~Zf8`#$mb_aoabtn=Uq$G>Y3ynuV?^+a#Z%BJFo8?XS2K`7`*auH zrbNdNVzuG~3U=*{b7~QIBVd>Sm75}1q@2+J?9j$pyd!!);&X{7wK zwI18Nv?m0`&mWPQz9nYio}IIGjGWBjJ;w3j@YR1k>r;ri8au$%nzh>%hx_-v`ki zaq`W*pveWDsCkSpdGo_%VYA_gAov>WyA5>s^1TpXcWVli(wt2v_Nt|uVn5ZMR)=o3 zcuZ-36j5ATTgvAREeI|IWg{pXFRlOAv$|QB}^0sfg0_-v6v221OUg;iPpMGNA$MBL%Hf`??X zj8$vG|Iq$DV*Uc?kTf54sC)VU}SnKRPt~JJDC%Kk}ch}8Yq zM`8>pZ;`}(Rlk(T2La)^Z>twXKwxcg%G*&D`Jb$4z;=ky8&6FP@9TI#S;v4!5!MZXRr86e{BCBjA>(N+Gc979DsK`+@ejI@xv!VF{++Nqu8co$RVEM#GYdA>;;d+J|y zp@le5C{v%#s7?@%e_iu9s=UGqN^ zl;0BFYcYWBn814aWm(}fYL*S34;jS0#y3S$=Pwt0=O0KVi;h`(hy3iz__7St8o;`5 zqDHw^qDl|7jKqjCG>_(&@ULQBJ|>2J4#edQxbC^lm0S+^uxi5>@eU$)_M@N) z2v40pv8spIy9I_AKx!EwI$ZvR(BD)AkjH!Ev5y zJ(4SYwt~SWW;O`E=}bD2ul(<(|C`Ij<*pk(OoGHP;~6VYr`Q z4&|!)OsH%nk&RtyFF)A>5Dk1>zSw_OAQQ6rxZnT|rmY{_a4yRorrwp5mXqZH-RsK0?c{rg$RgY&K4$yK`q;+Gtb3a|> z|8X#WmsVS+584pzRK;5y_-*(65+kzbhZ*w`%P=AoWBIiw*Ju{G;Ij3<`afstOasm{ zBDsiMI0F>@`o$-UqW`ERZgPE?e2Ql%h!c%H)hW)t(O3{9Wg$pNqPSI;qJfcd5h3;O z6}O$v-=g{Q`IB#kjo|tV(a)YsJbqM;KQMj)-i)&w?zy_Ko2Z6K!;3;rU8vW2>U6k` zxpNq`o_C*4#&v+$Lt}^O^WDUt@C0Eq@k;4EoMk?3m)y;;+P=@UG-(>l*9zdXq^)|n z^-;Mo`+Wai%ngm3IQyrC*S78NyEge0A+Rz199$MV>1SvS^cCzClJ2UTjQTIYnI`x^>Z{yd!Fw7L%#Ya90mZow2BLcy}GDl{+Jm`h5t*_RFbwTMoCQ6T2#ZSDxPf zQU2D-RkDUk`R_cK4pMv_1ym_K{@eMV3jZW zkiZJ}om?YwrhrNHeFgv4!v*;(Jm@6M9eNF*8aBEpv%-6-Sc9b+!7roh76W5RgG@H! zSXF2nwjX7lZ6mV-U)K{kE5cV*?Ma#$c>;oSFg}m#K8}TX;K7#6&xRUBkF@}KpTDIzYesI(?6r497&2pVQTWkE7r|JzTLM8KtVH(4*M)`= zztaTF$CFOKJ|-Vc-l!=pALZMtEqHTmSA82kBcyR6hcz&VsYhu9lBM`tpxbjkt)oE4 zhWix-8N5cQA2=tsqI>PNU^eSoh;Ff+K=%n7tYBU9`-C{SVf3gDwbW3U7b&Ct^-2}4 z(Vpguo9hfhB3Q=)j#1ppd1d#Qz*W00sq{axG$&bREnKAW_e%4!sN80 zBUk$#Nr$&m3b`ynRQzbrzAr;F=}$VsyrWsUIMJeNMtMuZd#Z9 zKitELQ6a?84qnNBR~=a>^%LN^(${xlm+~OzMR3H+T~6v#v|9DKA~3=)5qknN14SPi+Ds%T((3)3C)Cwk@@Nm$X3hx6BWdpf`Ez@yAa#ExY>W;r{>hRVk=;I zIE4=vV@P3IKL2V2M`Ts8gS}l; zj$(|MFJn_#tUZw@-YX&-R7o4^W&YJZIrzFm)QbwTe>?jV5U4;MHJEZ)L$+*vf-_fHl8GnJIJ-0h^? znOj8Jq-^LS!+KK$%?XuddNK=RC4o=|kE1x#zM}4Xz`63j{{R-Lxm(KIX<>)<VldQbkvt0BJgtUyrsx*D(azV_4FmF-z>0A?*48_n72YRS^gqNEki~` zSX#I;{)l->lK=@CprXg*Rn;ZaP8KcjYZauexgZqII+L9s}K0F1}64N@SRI3*OK%1fLs_{_>R8fmBm0;QMO9(v@{3 zoMlNM{`c*mZp6%MtiR^x{_kkji1xNqGCHO`{}eF-WP5P&b5k{q9e#`1^iqBJytjk# z=Z6FBvcD0#vqjlri{2ylmVYjI2;4z?jr=cJ!bfG~b(X8%i0xC#*GVHC^&9d18U z>7W-kBTw4@5}6EwMFQ)u2yed|zcNarRuoQ+w2vu2PoECDNX`Sp=@k|cgC`P5m)`Ve zB4Ui&IJBIY1Lu?$@*;K*8D4=N_Pij}K|CZl zLM4u^V521PqE7_9co!yg(C?QM21!KBw=TwN(HplW=W79rDE|az#y>^beS)p}t{zR* zOi-j;duQVJ_(}Y1#(yhw2F=7U(M@VuoEk$~GslP=ARI$pugO0*wtx8%D;2&zi9vDe zXAV>$UwtJ;Z4D3%LVm{^eYXG#>TomIPTDx)0I2&y%{z<7DO+cRi=gab|AdLohOMU0 zMC-;byCI?5efq6!j^=`i94#iOS40fX$5B_lr|6Y;W0IlD&mQM^R_ryUrp8YAB1{X_ z&{r!XHR++S-ysKDirq!h%t;gW|2rKiW z-_rCYYxnhuj|IH_{3Xuswi?P$vAD!wL{}$AJ(DV~Thjum;rmj_LB=8TA>I~0#OyF` zzkH~y?a)W3R;}Z!oP&wZO1WPwbHixZ`hv8stso0TkgPoOdsy5|dZKxDCb{{|(aQ96 z-@lg@FQ;F=wMcr$6TT_e-nU;Ck^xPjvsi^`ZI*{Ks}_19@Yx5HIZ>3 zld5l#17y+S4Vs;@$_5F(bM(K}CK?Pdh#NyEV>L0%wgbTf0qTr;@?!V8>;y z4(+G7w#Z7WB1MB_yk(obcRUmQIA-FnjKjC zS1*<^NI}_=f8MS4WB=lEonKsGcO+dXpesvm%%u8kE(Bp-XlhOZWnZP@5kfDY4CW-Q zzchi4l*aYNG2yFN256QMTEMQP3TyMBQRn{av`IuQIWMV42i z>pZb}rzi4PyGv0s$gVaC%W=`dc8M3`!TVqpV^)x2Pf(`L`C&jmQ9bNS*AFG0R3BT#0y4R9m(wm})mGU*q}6Ps1;$pD$T+YPd8dct}W!JSh4enjnZ2;jMGi zt=;*jW^my7T1}T`$HOMBIt(E7q5h#1Dh+ru0+Ylt^>;X@SiTDM`a9r5j8QWk;O@fp ztK%eKgayG0Ya(z?LGJQA{uWw)_XhY4IJ*Nlaw0|t{P8=fi3AXPY^-oH4OIPW-z|KK zN@BWO8$dxsThkKgMroueKnMsE%dh;gtpu(B*fuu6fk;cg{Et0l#g-)c{Zf2d@p|^M zMqEv0#5>@DN2VAItL^z{qylQ6{yp`yys6dcj|9hxNGr>b6GGd$7ff)(q4+M14mbT% zjo6Zcx8NGA0_Oi5%Qc^-l4e3qvM)Xk=)_)@i#wG+zjf9j26rW6K|Gb^*)EFZbe?X( zPUtC)mGrL6lw&etg&z1lfD!4MN4Kg(QmLmU0`4yI%EChiyN=`MYa?+U!{L{Mvaky|2$!h)>c?kigDQ{SifTTFtV%xyG2BaeFjOXrx!C@J``0~ z&5NU%L>d!eEK%WyYb`jrNSCRI?{{g#f)*f#NnCB@uaBVeAf59nz1J-NFn)jI+Vi|D z7hrpg@l`FWCOev`(0I!;mI+w;VKcOfe1uHSy*|B6$vlW~QNk(1{Z?SMEU$F9a*EoP z)d=JI4$vu8ao<_kBk2<1eR#0-kYh!T=(Ta2tOa)J|65+Yl8>R4@>I z94UoJOrY?TdfMfXl$G^dUw(gE7-SA^dh_-A`p}<%|L0wt*G6A@lt>Epq2Z*pieZ*R z^$br-UDyfHUZhR3gk^|ZHI&*m5ZhWh$F%Jt1&pGj8?_6y%=3DR6xD$)d9 z+d#SpJ`xSLvx9DNgC6GcJW*lp(l`n?@h_CPRl27rxCf%T$-KD3*fS2xYk_3({s9 zCg&yK1SbcD-89xr8Q7I*bUOPlEp!N_{_XjBLSIviJS98X74j}W78)>dEh+>Zi?mmb z2YqG8zEpTEO%y#PxZ7E3_TfXdaY!v5?6MjIRsl7A)vk(mFd5+1HBT!BmRs4f#a__V z>_1D>jrTsnW;f}|2l2d%d&`UUUqgHxFJb+o!kU~lp!EJwjJP>=O`S;%WAV8JOVcVT zCB1W2w@F#Jl#qWAWA4HcLU+mS&J_@A{u>2;5NtWQ;>zC(fi<~53$wzJc{FZp_KcVa`Yn0URR8dqbF_N> zhoH2D8oTNa7{~DtShphAW5cOyp(@67-^zGf3D4;1MA{_O72r&X?kJ`RDYSz&Xo+R- z1H7LDT9jyaCJb7Bs==QM@0*Zu{`5UPk@2*y8bahMoi#4R`zl)5IAYE(*iZ-$+otJ@ z43f8gral*U3dS>abZgGRRWc-2ADAjNDLvM;F3|aO`kj!DNOEtNHJDzbgU!U3*5**D z8pK1~C)Fh7X6j4?gTOZb$fx!t-9JrvMsXJBNdmDxM0R^U3!c*H=|iG}2ABz<_`TD) zHQ}JQAQ4-2@#+0HENH=}f*5ycfPEA@NdtcMPdA^C&9bA1>1oWRgQ&ol)kk5;OETL7 z1(G(_e(V{H604O#|QV8n?aCM_sck(wtMi^3vT&-IK+IavL+LY@*$$ z`u5NP#C$XAvSH4Va$hOThm6UFOKX3)ij4d$_s_IFfLq-H@u|Jvq?$N_fOd00ft&n# z^!e`lw8V+K8cZBv9e(?3R3ggwbI6^!l457c80A_C^sh4{uN%{z*!PGxJt9x!v}q+; z`c1_lIT3bNxG3YZm?%k#W$2hBlF8)Bt{#xbaWy3m9~JS4T#E|*BHujmJT8JOOy*T^ zfQ3>|=x5-$_L-Vu++B=>l#9z+Cv`@Jiws7)a6F8WO#Ig;22=*B_8N9E+c@sj>mxdc57XxCS+d8(?0%yy$;PyboP4==JFRA_1IsZ0=<40LODg(FmylR-vyz; z>WNQIjPXM=c|M@bjjutMXm197BSJH*Zr*7K?I}ElnG^)yegc$`vJ#_A_}l-6-pn+T zL8^DjVF}%kJq@0pYTOw5KX4oXV<`g=O-Fc+(^@rnDzoib5R$#Ps*ihPF8Xhan%5`8 z&57xg@`ekci*;@0&|fyF+bGgIVC&t&yX2BSXbR6^!%Qeo_gxq*I&`Bxma zIgDk%Gr~eo0HPx)|IIR*pw(dJ>ry(Okrq3e1fkP$lSLVyHv7wATH#JTLp_M&rSd8W zeS7xDVy}|!{;okFLrONKry_rUv&xTQHv%U+yLQ*5fnumu935c)>rN6G=Z*gaFmg8p zT|6`n+E{pSg3VvHrJTvt6Ql9kER9RgSE?Ln!oCov44biA!Ut@!_7M4&c&3zD59(wi zG9g-R{nDN9sWWc;pAYRjGj6zQcW*nadK#?~ZVR}DL}DJao*Ja&Q6FFbVzgS$65hD) z|ClSa%e|s!fPTvV&l<7W5U|Mn5oTBrB>vs^4dd18A1&;kW^!MbGeJortc`Oq+NkKu zjpd&T<^uvUb+`fJ7yLH&qPB(f)#J^7Iv?STy(4W`4F0UCW+Z4A&@s+bm{B&jPK=*!Mg;7@(-cHd(2zx;S^m z-EQ)&Z8jkHPm>F(TQpQeRQ9{9kM}066|18Ql5U;C$Xo-gRQX3E5$tp1F}U8{7rcz2 z+iN%Bz47aY5ZZ;6EsLSwXN7DMA9D~&@-(OrlTA0UJ(bfn*wk)zC8EK8)p|3Rf(5;I zY4ABQr#YPJ%-3JH^T}^O>6dun0{(sS5m`l$oVc}b-QO8!*#5P<1DjcfcVKz+M><;< z1-VGGBTuN$Ji>Lzy*tT~a4&`NC90q?XghjDuohAc&>6jUHPrC?zkIOjrX7ETQ_Hb4 zfQoF78QA-ue)_>Kr#gJv;Tf@;U%-cm6%QG%_D9MMXyN!X5%`Q0xl0h1xXkx7#U zlCCx;$G7r~bHr7XQH<;=%if|D^P7SQA{Z)%WSM<{p5o%o-JN_5`2t#lm_mwZC zVZ!t?UbM%~x*NUF;I%+NXv_#4CI*>5kgXD824Grb>et~1~-n>E9J#MaX5 zQpuNDbhsjt%G6X13QUOsi8TNl%LF3G@BXU^Dyf(wDpTfr>0+QJiosnFOcEIz6QiuD zsShyyCk=W^4E2Ylk|4vI@<{=w9`VwR8j1RDL_u99f<9^t~;?i2MxVtL*m`H(<16iVU!~8%`cWDdu)(4E@khK(+ zgs20&WNx|V&wZq(dOT0Pn(Lb2T448rU`547MMf^FMYcd3PCqpS5$ ze1u~#S}c*eK{W{_C$m0HX3lrovWAR|b@Rm>) zWQ!0_8CsSI2XoyJgVv)5Wn2k~p6XD~T*+RHfK#HA*N)Oo(IyhJr6)OGxVLj^T0CyX zke&&#k3_7ge_}?_a!~%%0@1v6#vXi7!dMnPvkI+egQm6@?HgeAP3sh=i6lq=?u_fd z$^o6(`#d&x4hD&d+pPhf3(_2FOTMZ~;^M`&m1cCr%%SVrPL9Ar?T32?#}VfS?MI|g zV!GK;2gdKsYZNgm3+tWwKb#|a`NT6sD`zKOSy?F3>BSkYMiw{Yl1uQx)&QP_)6u}u z2sPNe-Ph6GG_W?zRSTxuovx1^%$S0=Om1`!29|4Ja@*LE-Oy4 zJo$A3o|bsDk;1kqNl}ZbKELOOrMLP8-*~(++4(dT2}R@NWi#Zo+5CgT*hO;dWPR3W zTx}{GOi8x_`Bh#lr-Qi_XZ2cY-7qI+r^9#tTgniG5-l4@K77KsYmiX*z^+i(6>}x< zWc{yl(+(mrdSc7l!RjW=@E7OPujtcmpZANevdN{K>)6Xm;>`#WdBU2FlDfaI-|IDO zahCe{y_b>iZe9maFHw4h~ zxU?`5)3ly+MyOuw*sqaC%Do>Iph+|fQ~lOE%LIm7^jz?nBAF=9kdSW@wvsu*qK5&i zR1itg$%uR)4!B5KMiI{$M2Apn{=qUoTLHXh7bF0CunkD5#m=hvVcjgiFgArgBpYN< ziKO$2i+Oppkm#sOLEV6hjAR{>ghw+G7l5=p!Z{UJ#P5EClvXBk1KU`oc^|B^S&rkp zR7|&x^B-Y(fYLL|pc6B2nv-nF1=*Q6H!H`*y$!-Oslsm08!oPfMxGaiKtSHt$(YZW zp=k1-*e`@?zKgu9NTxZxR2e`2*`KQ_JGIa4(gaC7#i+pEZ!~f|m7=|zvcNY@f%voy z7#EhM$%=$y_cU`-|2JpnGjhn2<^>6I75!PSyqq)*aabx;V*co(n$s$YCOEf4paMptGwo%y5U8DE_k@anzg?8iwE5EwE2IOl*ejxa)qfP*(|+o-RQDvQb)>X%W2Q zck_eT+x=s~Oj$`C9s&#^j0NbTIkLi=y5}pQRNoCk>*aii%wd(_n|-Ch+h~wIJBCQ3 zL`lOE&|1S@0hz?^Dm=f@!hZY$$NMo$(32PSQ3p*AbMiK3i%2%4E@LUVR_v{<*4dS` zL>BhI_2WiZ%PL($0}ioPxB;)kxK7iF{4cYDuN|Hq+^Am9m$byQbOH3rq&F_D&kCB+ zfBN2^1>9^lS+(s85%(MG+|6kLOZm6{hr83c*g&7J>>@8K+@%I{lUjF$NX*@-!N@+W z*M6RwQdCU`SVRkNlG`Egy*4(nLaafu!1WoFC3Ll%dz`da_b8>L*5O9#F=%t?(tWsY z7PVDmq_uCLzo_krNdT|c_jH*20GGNB7d5=+Eznthd(JF*KFrO=!iI>ob1ZuX&XPb+ zkl<~!pEHvlK?=Yd;?%#_VSp3Z8==-umu}LXP6yoDKbXcVx(fdyr4t4|SA1=5&atD;PhiqDjP`@2=gOE8wDaX$>xm3iZ z0a9Hi4LwLDlOqEgs6@kly82ZP-*;tw%G(4U|L0sGn*W*w(PE6RSIVnngDG!4AqG@#6+!dBD2IWv&ZCc&93}Srz#zuM+)w?h_EldAu9SP z)5+a*>H!6sL-4u#f^U4?;S+Oe7Bk2<1jpGgd(E_MdHcI^x$yLL$TexTT5wU4h4&(h ziRT+sSl#;VQY{VAGIzIZ<*ORhasg9Qc0)6HZB z*Gv|f>At^HS;cL4!|4-k>nY?1L?XReH@)>1so%D4zF~u9RXFc;x%;?3AE@DA{mlxy zk$3u!dZZcYZ25^}%_mFC&O5z@l;-Hbu(s#x*4x9i(?H>ilJB(DACWRp*=dfGZ!rJO z3+Lif$V-*1J=uQ7-FDhl{(%m!E}5M4xCfnatHYe;|4YC+F{w{~U;H>5APmHNtxm%YP$Hilys2>M`**qJXNxiS2K%%5ePQXZZaj0M{JZqlhe~msS!j8oG?Lm6_f@` zBpsvto@>QuS5BCMl^`+*G+HPTeAY{t0YvKD{|mWZ37>7z zfCzJp>TdCv+%KNhCn|BmJwX(2~h!-OiRh?;EvV6FrrEW^Wc-Siv8bHlbmXYlmh zs>Lmf@`=M*??VuG+iZa<-{bb|XV0p(2G;2ck^YqW9WA#+IESyqBmH~Ogt7yYHw(8| ztmf`(DJ^L@$fOGl^HeldU*$YOGub;T!+p@LW3GtP?@%h_p*qO7I&LG$6*pE(E!%q; zo>O?BrwbBSvNzpjR!8t#GW)>r=-;*z!~TD&ffr#GxDB5U@O>@@9Fb?@aT;8X35`J} zh9baC134bjt1dG*14(GwWI@^$ngXd&=B4x+uymJk5w(r9+b;2{*f37ykK5_rT`yXXLnM_!ZFJS|1HQHG#6vt;tRg;Hp#|77FT`^g z8%xac#?`3!#uEiVWvv8BP{;0q5%ZARrwPYOG!jM(vT7z*8byqf{A4?NpgxB#eZZ#bX z<<-UVaPyy8q~2EGL?P@-&ih}_^y00Mney%#hhEJ(9&&^T#(#3eUYl-v7!s)L{sK<| zv=oI~6zefKYW0{Q+$&1%q}W1@tPehgXa7JOZ!PYS<@<)rRZwtm9M z@S`iqfeLEI0*_p=Nd$d@&rjgtda(Pt|HKH0Em!EnLbyWql}yU85F2cUfr-()>^oR= z^CRT^<+*&u zB>)GrR?{{7U0+XdHo=KT^anqZOuh|OEzv`={^;;%5!0140F`t!Z3?yI@UQ^UvveLf z!s+Kf!BHi{AK!UuJo9KOV;;J!(He&Jwak|w)vwAo5@%XN5}Vun_n#pCPkKhC_u{K! z9=RY(vbiwEmv3)#u6`I2m##h7uMtzt5mM`6GpLA8noSGXWk0@TeWmyy80T@Jx&J6{~EuO43Q9 zF62$xjV$l!ca)4Nx;K@^Q9OhC6b}XieiilBY<{vW)6Kx#7R6yX(DWdBj1NMG8c8?x zE%N#ZK@#awSeahwS(h8R!Dlr~3PjBcIUryFSpvh0r16Z(IwHYDC=n{^FK0K%P4(-F ze4;sZjUQFU0~eOT?W~iNV9G#Bb=BzOkE)zp)n9E)U+O=1OgHa)P8MTqhbrHtAM|JE z6JzzJG5$7&ev^d^iQDuqkGj2YvtsjVZSxTLCI%~dw?8o{26OmLSP|HI!e|KuU9}rl zuYWM`rpex}*!K$FbFq*J<(!wmi0c>`&(b9DAdKIhU;$LcSrfhnZcE1*CgXX(7Uww% z{7^evkoyNunFb`tY{YA8s+}{yPlnO5KbYG-%P#t|t*fPpHUk+oEqq{XduqO;?#X%J0HXGjsNagXfMO0UpkN#NAhh3D;s2uXb9`*3N(LwBOb~qHP z7%={hT~01yllETK99GYy`!!?*f~bk_Aznk5N7FbJlSRGtKq5Q?dBex_Z}$LHr{980 zq=6B71dH2ybHjHRdD3X}|AFk|fEd&Wsr0o`V3JqYE?{)NJIRf`BKhIQ_&H)<`5DJ< zOYTnEfp&F@%#>R(7kGcNp&W*rXWRIeg7w4stG1GuDV4_$31g+a$w^k+c=|g>A#K@G z$d)RYK(}SP>HB)-?r=EhPSymL6M=s-HvG~>8v|)F#5uxTVXPfxJS?796ZvSW_w_~U z`+iHzyNf=hs+)P&GyC*~w{(A=kqS*ECOIOKa0i;-fd&VXcxf^c45Gse#!NI!8u;ul zDBYV=^#zMHr)ljxjK2_&w}{QM1*Zw+Gv3cuV`@Y>*R}8d9m^aqahM=x6L7 zUp2reEm!yM7lGpwG}2Ptei&#M=>CzSGAA?8mg_Klw?Dcj#d>`n_Yo zh5r}C=sLVd9?9_o-a?DPZA8xxWcRuR!*Q0HBuI^dvPdq!An+zmuijH2BDkSlWq%aI z%ugDp4`e$Csioh5Qs#E!dZ0h-Fdhb9pi>&}QLjnC-g#mp7 zMp18e{ZoL&+#(mYF|g6eZTK$X4uYVLdcL&~Yw5rKr?`T0G^!<&G5ly#;GeU9@++6j zD;N8o@nu(9)4E>Xv>7Fd|9)b%mC1DqQ02=v$2XgZWY-wqh>@m&S{bJdp1pX? z{F}L70ES}iNYC9gbpcedO0o((mJj;#baNCoT)jgY4ipGuQd}nc7lcrTh2dm@pnq9j zfZ%HlvLu+{76*uWD>htNR5>uHj+STv3>|qzlIDXl#N-j9p+i)+1hFnUMr>8JWAt>O zUVnrCuy&Kb^|9`wsIWTc1BlXX(mtOok;Bl_cgiv7ZDpZI&NPOHL-mI7@G&p-gTC-9XIS7SvnA%W>(F zsbw%qRXe9HaO)(Zg#WNq_Sy-!oIRAwgGD@Y0~6fP0IJVh+JKj_+qQ*@M29xJwCMR! zg+Y1QzVTK_vfAg)e$T1ixh)6DTv0&(bCd{0u&I!dXKQEiAnKmueAfnP00_z*fLuxH zx+!(!-o`B?BW9mpw9?j#}4Cy=Rm zaqP2}6Ld%o`W(uQNcSLpC23h#73Ob4-hf>o1}U7%POJiw8$Vk6>e(hXNjfD8$^q^&bY(NPFp)lJJ0yfLWd^uyf2S0O&C%DC%J5MU!mjS&aluJ<3K6hFR=A&PE#6a6p#G_6xglv!Ju8&P$UHE8uz-46pmv0T=Hi z!<7mO@VULg+Lf5aMCu=$PH#>s7dR-zgOFAIUGD_MM=X*FkThQR(}MR~&lQYF6_3zF zfdLr04&ch6LpBy8zYG&5^8}+8+XS*q2mpLy1c)rY5Jm_U#jfbk!9Y$1PJOduf42d2 zH+qe^n^~}D6Sc%BY^EcQ{?OfgTizx`tc+vXlqF}(@qSK!3J7Rn!i7vD*@Z0V34UlA zCo~(c!;4!NfUTEA{9TT*IDmycXzr`1#Gl41nm#{1;0%h8Xi6gEwB5QlYNEBimzZ@WC4_T@ZglKJnduLf>xH;B1wP8cG%V2@Y8i`GFW z1p4f*m`u`1ib%)%!DN8rT+(~`mpPwR3M@^LjEW-hzfp>xoarXPjsagzjt|6VeJjs% zB&u`*Bm58Y-E|Ft5==2`QzyiYxkzy1aXq=KUi{bi9zXvukmCrlMQEghWX%CsK%A%NEEO*T@S$$BNqPP|nEavAw)yEqoo>0UXy;S3$oDs=@W!2` z=TEX4@P$ObQ)HUnq?jw+CPJhMcF zj{B3Eh1w!jpCmo_$@UB#$2`U9I+?+KncrtZ#^67Ov#+!{&1rSj%4hp4AKH1IUNxD* z5@UN?YNNkfC#n4dFC&sc%*7^zBmhL0%TVTiwge;+&%QjhxZk_7*u#KwGd2PQnvk!` zo=ReyJbFLDqbbfg$l*PU zY>O`_f@J{_XSA1&iXmCu z`Z1Xeh6)nG#uh(!wb67x71=wqkz0hoaqbk}`emNIYSz#Nu0M~E6k`U?0Y==^fSe}4 zqXat;t?@sBY2*j?r3F1w`ORCJu{6{2PrwZ{4oDio-I@%XVyvmDj>Y|07={(KbDVR@ z+B8PwzlO_OK7|=@Bn&fbgLh_~*qf8NGb>(gfpf5-@`+R5`C-iW&?jBio)w`v!#U2P4%On)2;R6$WdnGiMB@Ejps(!xaY>I<_3SWIZEa>Ge*l`}v&jFMi?vw?P5; zvw0jV5Qb>ATLWk07%gydqm(i(OEn0pl-2ArSpgo>Ft;q7=lxw~9*+hU;$s=n4@_Jo z9Z|V&Z~wentEPZo+XugYKP>;#AboOz7%QJ9K^yA|6S-Lpj%_JJIqbuUVCG*Zu``|9w`v6Irv{vdVv?8JYRQK$laj~brB_j7g$-DNqLp{(8VBq5b+}}M1~ir z_VYD~MO6I4eV^27n-aZ>&kT>eaPV~#oow$fG*4jE!-q>_FqVI)*%YuI3$wXvvO$rN z%vo0D!EOU0)KcK(-(wJmV$l0o_r=nH7ge7)IHB?q5tNw~nEZPp=!KQq$G9HuiKvLY zcZDA~BAWzSHK$rAzT#~ZN~Z1U?uD{AiY8Aw(5WY#jc4YC3Xb;$Yi6Ds9kL&nq6M2- z&yqa0n*UFC_2fnhIzUx@&09&)n`od+poz=`L)HreF%jtYa=it??|a3z;`+Dd$^Jos zuicVj=JY7vGp3(}rs36(5kAx8kYS^Ew1A*Mzj|l^_2-`;Z4`1l-98Q1);rSU=j@k- zNZvOlE>Z6)HSI^koO^33jirIEVjt%g6J@8d%%0~2(WK`6C$7|n9w2yiAt4m)FWGb> zm-D4#d6oGsNEK91&X%#Tzg#YHfatE?OrYXYxM9nPH>dc)!Z<$fGfM6FUk`)GLg0qV&i zEy%fX&$Ze61oYf$Ye3DR>nm|Dh>pZ1j+-2{ZUv;qnQfNs;3GzUtl^btP-5>LVL0Tm zFkuZ<*8c*Go+l~wKgv9LRoM7bFU>x@o50umB|lktTF*Q|qLoJ1OXjn;Tq2U{^3+ij z2wx~Wi}B?oMK>Dm-$7+x1zhTevE=+c{u2M6`{dli$8X~gzWy%dWx?diS9+jZ;Uu>L z2(ll&3vn-BIGz7WAm+_2^}niphB|XDWp5R#K=kq(7tVg4MfoRKCey{5L)xX-)j%J7 z{6Q9YjQAk*#%VB%0J?IA2c_A)j_ZsjxO^#s*WtzkQEx=9_jta1j;kBYV&Q~zS_2U#P`U*I!a~CDHQPfuw_b^i(H|6 zs^2S+A(h8}fT#3*Rbu$tdxZl-5q}X8~M&r8vD3AudUtVQ!r_Yec#%KBq#gxNHz?@dFZI%*d zY>7%U((vt?o6Cw)JRPF{eB>WJMCNo73-wq`n|Gx|$u4U^g$T3kcTzu7rzXd08F0~h zcN9U+*B#q~2lT!D1R3Bkj|6+QKkJW6lSpN9>8+mk%y^U7>uLZ+l0Ot3p}h>yNxBt> zEqy0zNS7q>{UU1C&z)-K{r*$N%rClnrX`-gBw+W|JM}vFB-x0=pOm)k5!S(641dWY z-l1xbmb&Ol_Q2E+AD9h3st-uX* zF#Htqd@kZ?UH*&Z>AqV~{dBwI63^vzZb$b(Zik_}VX-qh)*2|%cr$&33%E1^W*BvF zjDCG5C>Y*Fl}022s!UO1bfjdI@xFe^P9Uel7wwl5c*6m@KH>N_KL&QuZsE!2qvrD8 z0EwXdu8uaeU#!&^OA+WI?D7vNj@>XVm18h31Wk#9uzxs))hxu(nap9k;w z_@ggjC}-R7@6oT$fms5lFVs`X;osvhVQa?=3*&peMIs(@Qeec6#Vg5>6^CxFrpU2z zX9mU^ko!G@rVue5Czav5frckq6+b09WU_$ItX58^O&q}D+zTwI?GhLvGFn0v{?>yx zb~|OcU?(KA_QQ-n8Dov3q}iOj`DCwI)NZOl{AyycE1!{_1oy}$FD~DCDFzy*0xu__ zOLydJ6=+y?Bri7-NjG-YC0<<%0}qUv$5sPPn`Y7bS(vVF^0R#$>0a19EPAS+ns)M3}N6Cm@q_th2^62%gDRZ-Q z`sW>nFxWoaR)eeG=gQX{1Yse=zXJ^J^44n}lp&!AK?AzvrE`ZzcV3G`ux-uB$dAw0 zV_gVtJbFAMnFf_9uH$W^&j4jZ6fqT=_=QAWpV^ zEHVZKHL3S1M_-wQE&tHPJfkxgQ8yE<&!-UgrIqXu_muoHd{{M5SY{$)Q4|s^UYnJPg zaqSoX!X|=!Puj2&%qDFGc&3Q2FH;DiJV-pK(vDdR*4y?bTwjZ%%4kK#mRbA@lxcp_hnJLw7tsGoCgLptkVs_~lKNj)%+~8kKYQQ)Xs2 z)^E&o$w0LBP38jE>KpHbY3JNtfB_HjdS5%%5iv|jlztxLpVgq6tF^JIX&vzS=`cUiq zlER8TtJWkM#S^{Jw^y7jK&wD`rsCc(VA)9YMXPVc&eBOIqHHJL%a~kREGpdUbE`DO z@Vlzy2VA>$XQ#P-B4S3VMCoQq@hZ?G-OI;KBCf!Ld#g@Ybn2AOs|!SsfPskTzz35tFSoxmApXbb zd`Y!>jfxQu{3`J_k$o#kSMIR81XhcA+yZ{MqEy^lpoUePmUG8S=K$~>bhY*-LE-Q{Rm4_jy z-UL+HaqG6V2dk!S=0++YgH%Ab5T_NIsTg^IB2P_c3`%lMi;Z(e!R`@rz^*(J)90ps z+3@-yBN(anTgY6*$KKFLRr{4}U6vI=%u)rn01n!e%97oJ#@u(oij6f&mdY>RredU6PoeN> zGWHsB>z}mtn=`(CQ{QY=i^l*ev=O@1&~<_PNo~5Uw5H2WH|pscIN13H9?@jR!%6>wiK56#stmu}eltTX&qi-q~9V^}AY;!iD;G`=&2u&@E;-V92(X zl~tsiSi919omrW_Bp`-7YTe&#!+rrY<8-|{2 zSiHA*xCk!K4IJDdJZN%Ul}@vDylmRjZ9G_2bxPJhU1B|;QcnxZRmobJzXDMLpAU2Y zwD?i93ScmpXj&hD`~lz^nA7`{FG7{uWG2yo7^U?)WQ4W=fH`48tCI;{__N ze6F4v)^`H#yWMx25mXT53d(fh?jJeoOYliICe)E0@fjXaI5i}G6w>t`GOAQ{^fff^TFsKBB( z0g!oD)nqV+*Fta^LU}gvcy{LWC*e*M%D@s^=?z~LyJCs-im!3rMl=SiLKc(&6SJcYNJkI zRk~{iUGz+JO0{W139RMKxC=}cNQsq+QRD^Jz2Ls`#%S@zixIPNBJT(p{ znWC3%V-W19@WxXrUH?N1G4uQP!pH)<%aB2~{WQ85`quBDN&z{Di^OI!`kAAQ)XsU4 zbhC-W1^uvg*7RGL-o;U>z()>(ETe0-Jnf6PM)&StUx?BnrK=21mk&3V#~NMbiLp|! z(RfluJ9ft2Ez}2`~vy%%{NMq zhey34G_0 z`H^7nj7FPh|9BA^JG6Ap&J=y{BMO4hNFToLtf@dU0Zrr{#LWB|=An)l1E#qn2nlSl zANGVtY_O3|_z}g&&rD8RUS{L`1M&P)Ac8`SO$tP(5D+@%7_SL2GoR(4i{uIFWH(aJ zP8NgC{_~_sj!lToK{80D7>&aK!nvQ}~BJ5kE2Phs1#YNcp;rc z8A)SY>RBgt|1;OQUi{zOeH2}G9Qr~q<8_f>FcyM1FbX{0EeGbQ33;)HQUz>0v zEhfk@ zP*r;OF4L^(rMoNUruGQrDRp-C)YX&K`p>(>&b(p7H={VaWc_hgykV&5f2mxrP2~WY zvuTU2r5qm`46-*98K7PuH75X+x?|54fX4%1g;U$m-2f80&hI}Ei;TMeF^CD#D(0h$ zYU(F~88=LmQ$MR!SFGI^<&6~-5pSmAnddhFj*7sslCP4#(^hEG(<%;rHU~y-gbim? z9{Qi`OOXis5BJ}z&!{)GW1*|rD|^-SUwJU<4szG1hRV5&#ulZXB?X0BQ5b~G$nXHX z#2&}R4+IyKgwVGlN$TmCt(NsV5%G38Md)0X4G<7~L4_zab+)&#jloYx@^nn#MGOGK z-@gJxw`t!kWrad$Ug0D=^>q)Z2*ld+kyACCI6%xmW;@cggmZYQ-*0hpsHKhT;1nVK zW7ijnQ&k)NCN<{u;UpvP-jJQw`aeZ@f$*BqT+W|;osBAHDTiV_CdE&Ih$3PsFOY@M zT%_1HyrWfp&yRBFEYEG#7_(_^46xsNOM9a?^W zN~QCh?Y*>;rS-dKXjuKMF!zC-2$mT(q?ys|{m(b`TMb>ppSPF6TD?D z4E<^yits{X-ml!ap}`cGQHTj=xf@MdV8EaCKM73aHzo?a>s?drH4$4tRZ_tQH==p9 zXKRVYNFKFg2}*4Wz!OFfWpEK6LLrEZ_CZy>*;(6>+ne%H!(7URr{%EfG8z?Tmx49^7dDHbAl%|)(2GH4y@#Q;_=^PQnHkEz|66*RIx^X0s{o@6?Cegq2mvKVd)5?rk`cUBd1>&OE=9H8r!O zM6>bQ)K{iFax8!7lrDjG-+}IOz^Cw#5bUAX6EF%@7+F7T-X z4`g3s1wUh%!GVec)>^%_PI!vY(Hlc{EJFZ0SRHfbuNYEPo&mFD)T)7t47z8bj?^MI zP_$U|5LJ@`Asl(12C)Ov?LXCS*`H+7O!&{l+P!G)yFLJ@F$%-iP_xOj)E!$~$`-8f z58K8LYhMgF3cnRMwIyw8em9gfmU(ztTQ%}?g0hM4(>>~f zAm6#M=?;=-m0#qM8hY;3n5Q)H;)U)g$d$J#d(WiNgjxhn=x#1QIo8^ilNZ%U>q!VL zy?x0nVK$`&*Q6>S!@Hg$w1Q`Ur1zwQIQsDb`#QYB@>Gz@zN5X^mE%CfNB7cI@j089 z;0X;?<`gVMOD+%W9|{L?Cy#+}plesHcW4iF14gi#0TduDtL)viK6VF|GH9~Fh}KExm9b;p6|aZ=8Iw6Ty3UEZjSh3+-tX%bF3h1(U>Q8&yu<-zaaQAwM8eXUtI^_&&=$Xv_ z+cbcM2=Dn-YN=#slZAAHj6y>qPd`Am9;!W30q5%vxMp)1+${&91rr83uST_W5x?$S&husdGcq-4WBr}CfU&>#9k{~x9Ve~wStc`KKCOcr z$;cM3g;3)tKD@18_z(lfWZ7&Xu)AZ}q?AiDq$98g5&P5U-o*C3?MAVMmHHgFck|fR zuYg9)UqqHp#d&>6_1G?l?D*~*8cl79;9tKQ6=sv)VQ;(rYN)FX$-Yq*rEP<@rJtCB z4uFSB8FISQpC2tZfUas&ZYb7MFzgBwic=}wl@zQ`f#8+%#pHQE6>x*>#6Caz#Ptr) zpeg`d32Xm89vt2kO`uDXcl9Q8pr(XZA($yif(z zB+D4B*P#6Vlbc!d`rI@6(Wp}b7jaNK#Xa=pDSJ?!iw3xtlH}*g0!a(XaNxDpj~;u{ z27MR1eyNP&O)~vtL3X1OlGJDHtt?e%<1swQAHs_48JSO5#sGg3#DMqafl`$1+yf4} zHINvrZ>mivL^2(PW6&OMw+)#cIv-RDTtk*8z!=7>%nHk1TDn>ua5e=oQDi)ZrPd~U zBC0F*26+bmbWO*2M+j5<2z*p>R;kAK%QXLwX;nmId{3@# zJjl^YM*|0Q&*P(&x33Yb0Y}`>FkbY-m3nXaya4v`sqZKYhfDGU?}VnLo0Ie$7EIlp9vflPYJiu#4epZss5abu&PfaOJrw5sahE4ub(w}$%q@^Q*& z%z!#fuaTiD5NeI2__Tz6P#oqWuf!gAv;-JLQqOWEZWy1nvhfK~BVLJ#K4q?+z{~ph z?57b{Y%l%8AUjMu3xaq_-tM|~G3!@1ZwwG%5^aC)BX3 zilOJQQJ_V1VhSc#YLp9^SIT~7y;iz;SK#gV!2~~jPI$-=aJ*lFxWdF+EAXO?Pjt4Q zkIOK+(1-^L{cz-l#suV$iUgA(_@#!5=(v6OpXmb(Yh4itlHJjLw%IO|aMdV^yS^1j zXNN^jVDQqUk{mWnfHP|oLXtXylyn$odklbNTKAvY0oU&H+t~0%7dnI;JILr^tMIr; z(NM@dn5k(-?M&+iaJjOB-2YblyKzBjj=>iGszkUEjRrUV zqR)NGl&J@(xFM$WU0dvD{?V!PGY zHw>heDf<(p_q5VMi3-Ck3oJGUFBG%qRo2fnhrXm;+7a+ zx982vs4q2A>^el>;HotQkQcWicE|p%8{@xzWzj*sJs)Jyvu|my@jZ1(fs`xMsG9zr z?Z5dWkGhj3K#K~EZ^wcQ-tqx5{ms`MNNJG*Uru}Lmky^9o6>;%^k}BUUHwXzaQ6&j~Sbysd+H6at#3UR%K_*#QZ1I1MlO`wJ7hnR(G;2`!_l({mny;wF|)Gr=v8&>y)A; zG98mCP)uj>yB4}$MB^pJ!sGO6t7A|8dlS}6KXq0Ats0-fWk;QDOI&-?jo(CZR<>n_ zA0>Hb>vMC*Qf5vxGDbI{E}=uI*+$JRgXZ%`xMydPTtj?-n7}EMK#Qr&%9@dUMC~z2;LGfrXwr~Bc8qCP#Ym$_w z2-0pRO#Ls>=4Ghf@SeWuKuIgpnHO=Bn9CY&nluP`qzskF^ip2Z*HDI}{X87~%(wOY z@fElkh`!HTV0?6SPz{I^q@~+qe6gYl^1he8Iu2sG=K&l*;;+f~w=H;`6zk7^%fRfg@r;%FaGXNflfu?(*Jy&%}BVZm)jmJ{*mL#vF8Sr{ zuUXX0y3=Gpo!2i2+Y}yE&#FEm3GsFFu@s!mP=6Bj9n8S<`3;3Dfkd`QzrM!PAPDy# z+UWCNaPAt%?W(o^x}FxrwM_X5Ey7~hG|eLJk^Qf}*gn&P7F{O^b9@0uNBqIwD;KOVyV3s zpn5Md)|889)@+K}5S0JHo+6w(7YB=S9ND8@f3iZWJdQOLmQ;Ke>tpjEHALk=WS=t1 z$y4)rm-Kl>YnnEuh(mA>!V%k*g4UvmrhS>|{RG)0mVLGHH(#OSLMd-6_wciKB3ox3 zjnu^!3eOq{p*g%JDWOEwIn-C25NuH##Br$_IXl=82-0P)fJY=WzzjW2F|o1}5S&Qu z6`=}|fi!xfCv&JQv?t)xJE{g@(*&@|4B*WQV0-qXIp_72D#lpmeg6Rw69H%K5r8)% zDF@8L0YpvW@Lk(@RoAs*r7L(D3&8^x+((~|7I1+_{^BJvNc1i#b13Jx_XVBSXI=Yb z3U6sYyl4@TlO_&rl*0E)1CY=$)bl&pF|*~@?SS*tbCY1})1(^un%Z0wwG@GKXnOQ4Yf>bs<^J3Y&OZHvFgh^7 zgDSqUl`qlK&<7co_L90-sX;m{3UZyS@gy2+I2M_=Ir*$o{|bk6Z1FVHkjce25VaQIv7XYFu-B zhx3}@k(#-~$R*;hO@5iX5?j4|1dT^{9Ys@8hfmPe=@?m&hm#x@F|pN%$)+p+G=?6& z%R)kH%|L2e&b{Nlh-S`z>L8aC=l|$!ntig(YBo~AwpcK>cVuW#)ZI^W9^{prL6@3J z%PrT&ayxN$*HszuKi2-bV=zqLeiccrgF0VY=p$q-AK*_J%%v7q*$c2PGqyRQoxw=`aoYgg)M_(4%o;d5 zt&7lL>OKk`j|c?aRqQ&1{y~>{f9K5p&M}Gp1Sa}Jz>6ybAoRe3=(jk?n^p!Dh5tRG z1Sfrmunr1~BGkY{DPSNU#`ywMuW4EUSjx}OYCv+K;B`O6G6=Q)uN-Dv28=&X7P2e( z!TnP6MqaQ9 zE{qsmz*qb17%d*}#e(LSn_R*V_;lwMnLc8cqtCMPJ8SFW_GGbVKhONv9Dr+x=OxKV zyuQOpNOU*1%#61-W>}4)8|f1=L}SL00@j-0)4GW9<7b#bP2d?>?l8ZY zL`Y>*7vV20u?2@trh$(R97WS%gm*YNO{J^3)iQQGH)sM$lj5VFq{I*B0BS<(e155v zFO8f#oaS_IlG8U^|KgKKCerjc?|9#L6*PITbxe3A;peTPuhxRxo^bgNLps_ zQL~7_VKIr=0@({P5=D) z)x(-oiAthvJsGC*`CIr6MV&uO5F(nm+csmHL}h2WVPh65YhUSXpSipY^U7N{EFc&3 zoHYQ8|5r$a8w(7yEvY#RMhVU zj-PTtyQ0J!7Vzl^wzszwI_tWkKzrKt{Ece^w=h$5_b09353Fa@JpMmCNMYuYla~TKNWC0wkbplC zpq{^}Nj5=leA`a|4^Xbp=_T2>h{;lcro+mxqrq5Rw5lY7Xy>3yT%ev}ODf5FtXd=C z9FWZ#oHvOH$yBzn$*x-*P{=GGO%=fI`;%LP;%xazu|<6`PMy$Zg)s1UT zdNBP#H?u0;>`X2<>q^utx5N3@&M7Siz7M{iuirhl4;I2M58(F?n-@^;vWc~nc3tV> z9yqiWbjA8&r|4AvHrXV0J;cfsd!V+vEy^i#mUKRpPy1K6X{)L1EOpbN!cl(1-vhYM zzuBgx`fufXr?*hiVeH44 zU(M_MIYc(oeN4`3mR*u(?!)eEzwaMUXS-pm-4AKj&bu$#=)8DcJOg2OUZm}hS+`+A zE5RKg zkN=un3l|6yNiuf5m3?x+6riszg_ zi9DHI7KzJm{E#4!{@4BA2`4E^*p8LckGjs&X~odAwxZLI9YG1m>g50J%c_U9aeo4> zv=T`OSiEdAL6GlUSs-dcM=-tv!|tm{+^)HQvnXuJFo);4BN&-9jRiT6iO0%mgV6GM z(_08=I)V&l8Vzf}A!Cy=Tphwz!Hg6(x4Osm9oAm!FJ2+0*EaO`YaVI`{KH zPT%FQB3L6TD?$3bZzR*I;)dRQVn(!{XvmOCrI5x0v*nhbL-5r<(RmwJIG&}6Tp6uMAZfqz}m6pF27 zv$It(r}NrLhEAGKi4zje14s%&5zCxPmkF3mg!4t{nqY{td@pGoQm53HB?>ah;ahmQB5UTrW~o1iWZ^cz60geRwgMy7|g&^N_W9)J4Iw&wjq= z&+)?Y$Ea(9G+~`|QE}yjx^oBwm%1-oT-+i3A;Q$I4qUKVrDA4TL+Sx9M7ZnnvIfcO zMCE$O?>Hi-bFGmPvU)dW{YmY|={)V~o;32Qe8u8l=>rY{WU%wT8i3RL`tCh;!!>iR48`&N|u_3*=JpQ!g56Lz#(&L6ex zO(WsM%Njp{WT~>T7_(O74mn@W!Hm3cCsZ^ z5ZC5&T;c)70KrFd-;U^+`&)Bk+fH_h@iP8$j0hN1Hhak&+V1Mc$)JoNG>`<%Rc27;wsd$xw$WOt1rSk8z#J-$@D$zrJRBv?pGewrnMz?h|z! zYy@Ag@4Cz5PMC&%;5<|88xPoT%d|jsPAY7)Fh1DbZ2|gCcr=mvq|}M==IK`b=>S(2 z_CyJo!ctHJ=ukhQ9J?l0_9zthw{Ca8P44Ghk}}MAy``O&-aI4|3~xbE@heLf_@~zs zpXPY9BVq1iNuO~W_L~;PwN`uyVH-5urSwvQp7KapUzn{ulvIt#qM-u*RRO2SnIFt1 z{?h(N{6YPOARsInU3rTbP9gBp&Rcj+cpw4HeFd?gOxk~ZrcZh~fz(cPXRh9v&#d}S zr*n{FbrO}EdB~}`Uv5e-e8t!&I|a7>MaGwo)(y$MONGpa6q0sdVxt8?JuEM_=1*H!lhQFgDac1lpl@uAO_hC4)r@U^eR89XzjDV7pU-^kSacE=6L3P6KvaQg%Ayd z=>7a6)=L*y0X*tCj=2jYMmgsZ*~l$pB$^QEW>c(~Z49gUSx;H;k}fSnW&{zGdaL3! z=PbptXH1DDwOB>Ts=Ge(n%GW`JgS5!HN|IKr;Dy3GhyN){^+|0@x{d)j;Hpe@*6z{l{rpHf z5oB~D{#TDF<1n)~sk(wXNNZ>F05zE$zp(lQWdn)|?dzK=ya4|nF{8uGCpu2_; z#zz_eP0oYH9N>1ch5RE#s;9-(Me+l-XL+IpSwu6}K)LuydRqWA1w}1Ei+56?N?>2hkj9HY*%+@ihOC$roybk4 zY#oMm=eRGbBT0eJobm+xSBMtVb4`Nb*7*;z-wA#j8A+bMMnyH2ojA>`F zZ+NK9od2+BV{oL!m|rsfH<}dNtouzliWfakZ1Z_`EFaegmZiT1qtgz5%{=7y=U{1n zh@98G4nJdCa56meTkfh(nxYu5OP#5KU19~s!kdJd^WERROUnfi%x#OQL^Jbc`-!|k}0iQkT%W)tM4xAXOD39j<{O1d%I^ni{Cx-u^ zf}e08<<}g!qn$?^_R(KpLNwy-53`-7h&p*2#&?jP_fr|=^Z|*xMO5N;7a45a?SkJ7 z+;$*A7#jhYWlAjk46JeO^nU)b$5Y*scUbfyXXT%(&mi;7^gQSfHPG(k9$58z%E(}Z zZ5Plsw3Y}QD8rj>5&m#^j6hqja~=EEg9HVD&WEX)AKT^r?lN`a&%2n7F{$IV_Br2h z%t@Alzh?GW;6Ro>1Da=&&FaADEYR36XXpO$$GtoUK*(;AROgtf;n!92<_QDxw-#+Y z+?|=|^bQp^0tmZ6$XT44Ki48Pm-uq`xI}OYk`Pudjd_|R*S;UCxUE)u4mYPi+Ci$$ z@%e%{1@09o4PV@4zTkQ%D4T)EB5SeLcA~Gct238~FohM^5I_q3i`L!q%_lAo&eSn? z3+9Y@#Ul09zdQq*X*5-CeE6^{=nDgM!2WgN3p(`a8Nid0K{j2zeudw)T`5e(7kXN3 zsv_P^lOScI05XkXp&3LQ!%@uEyc>BtML~k6Ov;~kdax_}C;HT7=BHT&@6lzLTd^2@u%s zi+$c8qm)qV=+e-`7DdFdiE1Ns#2@pvq^#V?V5aW3d%D9P@g`GgW36k~;g7}|jnS;( z6B{X(Jx_hzN&#eu=)Kmf(mj40GsgaW-hwc49;_`*X>N4RN?UoRJR5tAQxvU)h>|RO zgB$lIpy!j~@;r8I<7_+mxW;ige%rEzi4)%mn*-7`-2T6jj7VK zU*pv3aspQ=#(U~}$(Dv()L103Shjc!DOM0VW1`e)8ccOA5pC6fH9Jys^)q&oz z0!AhTk6g{9{^A)o=7w`{bJGZhSmvdqq=bx8cR!E=$7@~dY7+fow8GclkED^4qYLek zgq0{Jv6c%*Y(dQnU~ZE5#;*>@&5|l8jT9R%6j1v-muVCy|KAQOgyPzJo1wqLN@PJ? z!#r#M!59e(-)2<(aQPG2L>kY1-xn6f<+q2`k*Ru|`YQEHyvTD1_RsF4_KD4TYvgfF z_zNy{KvjYqW*L6>HO2MKkZoa!Ja&lwB)Or6`>AZ?pZZLk=kJ|5A+MPp8gRV05$5^O zO2?M^gMPh5Js`?`8G5r^nmAVq-3%&+hIG%NiIadk7Pz(J1r&EQ`B`ccV^=U&@CIEk zmbb;p|CDE8a13uT$}e){B+)XuqxCqacdxV!EC|Kx>ws!ebPU2H@4qc0D~)=H==*l# z#;?Tuv|w-EV?Y~4p2BtMLF)W|h@sANrg^gk-iN-!)`SZ%iAI_V3sahx^?jdu+f*l@ zvt-W3s&V;E3RQSo7j7$6=X~R%sbM>2-Mzby-l>L_Yfm>nhLfobZ>&q!<1xxs_MNF0 z9Dl48(pg&bJ%@X7+hMPy)q3(sxSdG&C7o^bV!}PI23$8ge5-NCjb+}27^SRaAn^3C zFD{OY40deL1Vd!qU*YH1b!_pv+#!8N>=;x)xMq&yLegx4DC|o2{4T$6*_`B{0u*j{iek5~DE&qBCugWU;i2@Wdy@Zr8>J^!pUT?K z91p#Y_MHv89iMNtbik+kjGu9!ee3Zsc3H}5{|Pp~*hK!FR0;q49m&AUotBJKK{0Pe zmnF{`A9SP6Umi-`dL)cl4WHB~Vvt}VNbqE_qSjVvliYz(t4s1noRy`GH+zSORD)gA+#(1&>-2!;3-1qG4b53+V7c}8vKsphs!f9EBq`3>18z)ZO^QCzXj?> z!ujEvS1VI`4VS?u!EF)OiqNZ{B*BaK>hEk^YDn!Tsin9E0y^43u>B>)?^NL+xr#vu zU`grZEW9vjVLJPR(0Fn<)Epy9M|FV&{s~jKv+K98kWMnA4L!N5GC>M8)AvK1)8&VP zGj!>l;U?u=)_|m#_ooyKRrRDB=zmttbCbD+M=4MP8`h30lrmT`Vs#-dBY>7TaopP#LxreV0fdENQ^d*ny7>v=u=@A(!Pfo(_wj-KoF*(_DrN4<+&(i|_0^q7 zon?pHas#zRN&C0Ia{k>RMfsvFcvi9P!@YcMi-2TXSo->Rj7tvcOU-&le+8dV4WjB! zyKeRPV?9qve;eQe$5lgpEpC&0ZRmz;gGAAW>2HkozL63gtZQRNPT;|_)X2sy zJQ@ozE;`SaUkLp(I^$swNG&LI;H>153ea?~MtNuotc%V3m+AyN=LU_2ztKLVRsk$^ zk$jyo#)J9n24KI?%f~pt>;#NZ4s0IkHDVYxS=-n!iWA0vg11aVd=7-bJ0)Mv!i&XR zs75wIRNqJP#@sTlB~Q3)MotY#jzkC{BS45XU2pLFFr??_&s;yBqq$#arxLol<)j%Y#MOt+02!fQFU*`3 z!i36={GHg&&^w#BEj!3d55%XI5w?=Q{JATK@)ZSwA0>ndA;A{yU35Di@B&2^u7P`k zgU})mZbypqDGwmTr|-zZoTn`hof9&Q=AAXmBL;Z8CvbJ=PHDw} z{?DB%Kt&Z^9<Wz9Dt`pEss3%}?$cJxbgE&X<7gdu%wtgT8(DcWnSQGh0fO z4^aB=aSI6|kH!ooCfw3-m!ot8L7GK>y9pk_@)HY!W{?d|Met$Yly;7sA~Fvv|FP2) z{xf4-mH5wHfO)pz;7&87`N%f>lAOMg9WjIx)(`Rj_c}Ke>!GePMunc(do0?(ze#wnG^kCh`-*` zqzE=4oX#~sgn@9TZi(k>JZfIZ7plKBP??|uYOJrLi_}0$O4)j0VUSx&3+NA7Oh& zXSPvou#sPS`d)6h%~5;{B+=?GHvMPqP5#~F_*=&G&4zF9eN2$N3&;QUG_fL8!%uJn zW5ANS>e>5$B>JiZ1%-Q;#}OYCXY|S6Ha?QX*skRf14^5x>CG*z;G@;VNUZ&dz)mZG z%|Uc88aXwr$B=WiPLV%C!gSW^!EX|esi9WbF%pncl;oc&pdi5SMmhl|wa zez1(GI5p;9Q3fTaxEDk~6M$ECYdgM^+jUGc@6S`});F)`-@>ERDq$f@7!V;QW+*8Z zRQ9vOwf0KpD@Ys#Uq_f5O##R$kQW+Zz;YC#SQ8%j5!9CaEAwI2rBt6Z){7HLy5*4s z$YBTO6$x8`ZquVGfadkca!9$+Es5*djjz#*Nm$7hSKQFmH8ZZrL;1h)7YslT)b=FA z`UaWEiSU60{R{Tl+;WJ;)jAm{E!sgTzpCF-o`K_k3fN=UW_hdKv_>#A9OAkC$Ctxr?S9wV!tAiP;0S9Fx#>E7A1bKaFh zRdiz#ERqYQG!3vp`J!n$SiZC*L8FjV6S-OnH66X!l1vnYS~FI>q|ius_YBkmw|~~o zUyyuhXXM8HxPVdk?@?wD`%r5qu3t?=b#lFSbBrwHbmTKYb)QIo0y#LqhZP9!0o*1j zXx(>IX#W}F0acQ56S}w2YF*Tv+v2jkg!x@TRdQ9>6GXSA#IpVJdeQeuH($XmV0r5c z4He5bwT+s_H&YGbALImaE0GjqPtP{j-;D=jWfph+Jcd=9yYXTWuyyzUN+@q+J^!Fm zoCbzHtBpQwE*89Z5N_~ySf6=H_^w6S#^2PL>3w*g8s7*(#97L$gX+++p4Nm_;tG?q z1M|_e<19*O4jVF0WkurI}Vr$-rABW4lg`t)xs zMG{!BsKaa|X;nkpd@f3jSJu}FNrvC|pAi2^vj>U*7a`J91s2~EsiF7Qilg5~q)|Ez zn;$86tU%&)`bC|E&2NcmdsY%c z33wm!73!Qdw6QZ*71(FI zLp4uem6OGDXiOnfcp&`6pe!=SWP$U1cZmd(O>f+s% zIS(<=;)}UkkmN&I)~`6K*05$?cTFDjpOz%88pIeW?nGJ*AFC-3{;!l?dIRs}}wARL=EGV*zBKCK!r!LSBl(qNcX>X`a z5(0S$d)wDAT%c_60~YMZ-wkOH8dO9XNVe%p4*@IO2D&}ahw@E}JpbEoYb>&oYDoCn zqeWeMGA?Vk$-#Jnb@ch|{O5cNTJV*l{n6T+9m+e+SAtd41Dc#tfT45q?-*3H|AK~h zYYsFGmZlXrzZD%z)%PwBXCYG7vjwFn`Nl1R4^Xb!+CuMEDD^$jz&fhw=1AUzFkMCi4U##S)$7AAu0=gd0Wfl6=;v;HgAptK_7V{+?7a^~Dz~WGD zH89LIND_bYQzg|~#$)2Q#6T})IoGgruP_IZc>)eKaHErHyd+ru)2((7#VO0TuC4@y z{dg{4yE6`b<%+?x+VCc+l54`*q)se1ZRR_Yhe}L#`2?XVNLbpi@)cYTtBO^SJ@Bf` z$R2pq_~a>0i+Nwhe$ms1*ziUID(%bm0s>-?o|Q0vAm83yPkM%9q>-%Nx z)1L|g2V~UMK(5b!aqr_;P)Tm}n~MZL*mK?H8|8fDOKU7`Z0=|J)_Y z06Z#fy*kJrWSx;3q15b%&)0f3r^Pvhp8r=!?#B-AQ{@6PsZ)F_+rXGwe;p9A1x?0}oY3PQXsf=i)yvcV)w?Dxn zPT>VHs7og&(-nRblKG%0jqXa%D~C@drAJqiB9~V}Sot~c?11a)rrff__h`+(c=Pry z-T(S#X{UatzU!jgv*V!RRp0w(VF9F_DRU2BuCi9J-^Cafp!!v+Y6nlPRTGq)bx9~p zDM$Kmt_cGeyk^eg2g;!Frsy89{3s0A${2``5&D3;h}88KoBQ(`E?U$fv@T2wrSs~x z=KAHTs_XUu7dJWl&ktcfw-Jkbf`p6~JlVSXZybpdQJ1V?Y28(=dF$|qSs~?Lds}xX zh5|o!)3(B11>hMt9$D4ovIoqNrW3ner3dZErrN!?V&zT6afo55W%yY){QDafpFO+GoIPUZs#WwWI{oe;TkV3<)x9&&#jP4;s*YW1-B*jSkL&r=jIa7dj*_*J9Kb9|z{Hd8##I z28f{?VQO6jmr;5befwm|t9ipg7l3m8Ue}6ry{0}aL*2M!YP`do7Pt8zY*Z_&kJy1IKaYQx_TzU_>$>hW2$Dxr}UQ3=D|30>XxZ7-;qVvB?tSzk{#(p$rMy&745?xs=AGcc z6|Y}@%g}fif@T z*C$k*RMyP}8@XyRWAs8BT#oSun2o`)5y)Z z`!Qj|lUTX73DWG^eOhLyPOk}Z%5&CJr6(n4#(`5oy?^2nk7q7BhV5+H4e>Znm?r%{ zu~j7qLPg34o?1l7*B(UsvYor+xQ(6j?&&4q6@3i^ z-riqv8HK2MSRgD&tFHedO)EG?9rcNoTtqM0XZl!1n8;pl+mFbvyyg&*Li8xMy#XQotl^~;=zzuS0rIi${U`?hZx zFJQBzdrgf3@6%r$9oG*DjiBmxfv&Jc0~LvI5fbPc4hvPa$EbYpDUxy*^PNDAwsx|} zd4VTl9sX&IZ|4T=l(4y5CaHmUcp6DwmxR}g zQC#JwMZ{`xw=Aw6?gYPq+Okhf$;?k`%Qf?{7c!$etoQooD0+k2X^SGy7-JD6 zexo?wN4d$DSR96}JU?orRoyBk*^BKhSpQ+;H)o4zd>W~ocwPNHwm<+xiR&pHVv=URqwRd7imiU zd#x5MW++JND2kv7rH48~uU+TkEPSOWHEl^xef8VTk%xHcn*`!bLI~EJD?yLJS)*gK z?1s6j5@(LvOO0Q^)1b(P6H1uP74auRn5M_^(^4d9RP75A%ga7ViuQ5XWzi?VLb#{O z2&o$k8GobwbeMAEM-2qxuDnmeqMm8YLso3*weXO=`Ys> z4|FDM2JfKKhchu}gi)YjQi4$D@9K5BXyVzX6HI0}5W}xe2e)QBl4ypdsDR$--SJY{ zqGi_@XH?CiVrInrc1-_InCpzOzj+wBCnM;Q)CyCvWo$xOwL~=27S?N1T!vD~M(F|@ zE=BEn_m}Di3}hPQ3`44JL+_}-tE)Bc0r^(n>wvrruc~q5tcik|siCjj0nV(EJc3q~ zqz0=Hyaqq^mMui^63eILYn|a>Y6$^-muB z6-~5vgJ`eq^$D<|&$C~S02($O+A?XN?hjxmzK?NYiym=898e;1hTMG5HXoP(gjdGM z@NGb&;WHl`UGCq$L9y?!N3-KHkXY=1y3$E$)DQCSnwL;H$qc5Wa-fwvqM0|YK(Lhc zn_q}BOs~#6BRSUd%k0%dTD$Y7e`GYcOSqOC&@Drzyy)CsX{ZR#(M;8xUmF^{Mc12? zW)e`+kn5X|Z`+yvsaIoHHdThD=~>vk;pMcE#;rYwEJwc0pGc%2 z;m@mz@6tuO8s)s3{%dka1*A{|@7bn?H%_Ddz%_K}>)q~=-o#>^+D@0Qo8bf{%N8Zd zrykIz=vw^RADgd_J-(UZ^f`OOwX!Be_Au-meD-H;1)!>5xqwZ>^85#4^#YHxZMgedbv*u{gBMeL=oZ% zqxv{r|H7C|isC^EG$Mz;Dz6X+I{$!@0Nbe+8*_v2178!$Q37E{T|56QbGYKz{)~MI zl7ClpE;gGW0jJMnx2>)ihdbm;N+^fkd4arW0Avzo?KUeyTlq1<->(UihhwN)>5AR_ z(BUPaIm#|#bd62buEx_|_UzOE*~Fe2;q;t5=`%6Z)HHOe8AphXk?r^9HF7nj?@m$B z+slO*^oRjSbinu`ct9lX_EHZmWQr=ylJLRrt9Pi=C^tK6ynPWwR4RT^|qQnq1vF1n&!uwm7(rIp~`cmCET!Ptnh+P*#NrQR%?;KfRs@K;_ks>yM+I?UYx2a#&P0!P z4A?8-xU}Cr{X%25qno;;eG`dU8bRi|0Y-6XPiqI=ffgxDDP#u!D1#=4k=^K8@gj#R zM3R@|SM_BQGe0RN_DmBvB-7LULkP-R&-0}xv37ZT{piQPJB$F@mtoy$*d+IYZ`NcB zL^#8&YA>|ABJ?GoDt= z8@XX40-R!3h-Y$OpIbzun`+>? zP-&@wKy<15EW(1W=Hr)7?DK~bw~7nlRw?#g7c~*Jl@A+ttf!X{_?BuD-ON(Kv?{R= zT0BlJFxEfO=*SR;jQnmGMygs>Cp|%z>hd9W96uTd#i2KBCf(WjCQKO18KS^B+0W5jiR?cE}8A2%Yp9#8j;oM6HiIS=l*^^?2GGfuvY(U3-LOtc8hSK=aH~m0g>#2%C!Arf3CJBux?#fsEd>UKpUD z5oGtvqSilUNT9x-oflfSSmf^4~Ui$N&8NHHL|l` z58EN0>D;*4$Y<9M)PN?R_vRqCZRVUf{_fY~$zI}%orrGw?N-0~h9zM$vXi6shnx3? zxOXyIn%rhRqoF*nCS( ziP$1Jsej(9AK~N-RFpSpIB)*dX*<8wcf=LDivNqjs#;ny)vze;az*dHNG*1Vf7YTR zviaGLdoE=0)Lvb+uHS4@#ljc#4(@m@P6$Qr9^=sRA!%}fB}!3}e)DxGBA6&0=?E|_ zIPg}^N$|S3Tv4ad+<{_raW=GWm@91roM1SxpQJm!kzmDwH&47iuX*Bwf%Xib zaIhYraw>?M!h`8!prS#^|Dx}|`I6nzy}q0LFP{l%ctO@^@@wt-=VI;lhK9D0!De-X zD^I3rMp3{v5t%1UJN7rcdW^e`jfG_pvtzV=24uf$NEBH-@H)=wh*-Cg;p}3nKJd5RulGUL1s0?ro8Q4uj z!e)e>U_ht4;*cGm{14H;ejj+uP8I1=86T?Y4^7xW?*i#S>^;q5pLvLAM3zMU(-;3< z?kv10){F1^Z8_G9#Xjwzwh9e0_C;fUUyTfoq$=U@JGU3Lngj!~W272UvIXNeXDIqH zVG+nG`L<`;hJIqVp5)dbh+NpY1#&w2ZUYGzg}`Riu(Y@gAFsPZb|$g{Z_)<-48ak1 z^v}J=m%q>m)Z`U2K)&%jPn?A8@%g?aq(!gUh{zSM{OryZTO#h2cs&8k`PG|B4Hxy1 zAG~3%b1$z>_)KZe!Bl+L-s!WTI8;@3Ti5K~if5l|CR6E|ow-#P(Gt?~w*EAFy(g}_mz21Q4A&@Bsc8^GF&OJT zTTBR=|9=*1=-kIgjWHR0m1w8hF3YPGs3+iL=ODQt&$CgHgW3z?+dBX#K-%JQ!R<-d z5INpjWV!$Pm%O!en?TrFy`V1X#)}A4?ky$(A{hpsSk=&=5JeLL&IGs83gz#6PA?Ge z3`ydrFz%lVoLP@JH??IJ-@I(!>}IonW1aCg1t4%eASMmK_G2XZo9(^pwoj5}5#c?o z+0K829r3tUw)5=5NfZBSRJ){c?SvHTaaMyvT}U^uY|mRsr_0s1l7CYD9~8I_XCY~7^kZhO66hd z4;7(YzEeDy({SHwG+Z(-x#H#%ma_of;=Xl>$SdKy!yYN(y|=(lZ|SD}-JieSStkvK z%Oe@{vE(?QRl@*btwhLzk-{5Z0Ge_Il)D`jpRXFybY+_w@j$(U&M4cxc*0%tQRek# zX0)mh6^fL+;q>v&F<|7e_CD(2l^Fc_E^7|ZV%f!oh3Y2jl3W%RQbA8+x%-LgI9_X; z=P0X=VfkaMCl|1?DAZLq2gKhUl*!;*G8*lX?6kt_UV`qG#!K)nYjIDvfRe+A_^Oa0 zESf*$&Xqqk-tnSSBQ$A36=$mR6nS|E{$_`>G$HO}*GKOze9m20Z`*h^-N#vIgxoWy z)BM|xkVn~AMk%0Nb3x^%o>S$+qDB2d*Sswxm$s~IdJ&Nonzpf=Pwgcy_8)A7=Obx9 zp@l!Ugin1pA&}!7gBgTWUo$}cE1lOYZU#PS%h|DI&y`dJcWD4omZ$}L2;H0ECp31T zO94#@JrzY)4?-MkN33c#z>GLoA&%eLn?57mCfU3S$OHtN1C6aw)(2}_iHp?UDFQLl zD>Ra~#w4kmBZ+S*1`JX#nsq_MQHV8)LsyN`s- zL=Iv57!W+y{afrR=n*5>><1-mPF5(=iRgP8Em-@5PfRghGp8^KH07QjZ>wHNHQ5Gc z_i0i?K96pCvn_~w+i^7<;9NhnJqA?=53yq``_dKLrOeN`Fj$L?{V4dbq&6d>axuzp zN)T`s4`MGNotBj?+28^?S%It_wW=U~E<-92y-Qk8Sg)V03D!$6^7cY1FfP%s=a=#h z2vL*_gst)ZiW}DWj~C;iy1R)eVpL-t3~?|I7Ag5K5e@s1OI7%SjQSpQirQp@jEm-{ zNkb-rBL0)3xsu>J=+}o@`A0s?zkCx?4v$&0tO`yxQ+x~y<~I!sAkqoelqR(Zo%sxl zRs4M9d*N6c_3f4*?>7`T8%D7m@)l{+CIK4@Nj_?HB3w(CPldQEdD0=(Z5nBtrlyzk zij*C>hfPd1`g1E-zG*HAsA>+X$7o;u0`R_3mzT$HRH@;O&{X3=ey4TGqv&7kr|Y zZhl7{B~=HZb#ZY6`az11S1sX`MxRW~#e+pS`qsPr8%&zfbT2!`Yp7;Uu9s;L?%d(A zt+h1}REm@JnfFe16$4!iW^lG^n~e^%JpfzLuw()LRzLBJh0AA-F#D7Y37&_`rvy2_=+50T*OGJZcP1&wq-7o1 z!hoDiD_eG4*7xHb4panTzN>MAIlN_l6OBv)?eaUV2$@MD9q+pG{*$>oel(n@iC>AS zrt-M-LXF$ZZ+ueZ4$Gnq&tCKMDF~kUFO(O0Kwiq>K*8P(RLK2F^q#YHS~424hkZKU z*Gqqt&2+Uk7*3ocnSWm5^b}xt(UX2d-ew+>@pVn$Bia&QLaMBY zvcX^zKf^!KQl$(mNA>Qy-6o+$afcaM>UjBqYNNdV?X!kRt2J_2@sSBzQBRHm!peVo zcW}ef`C@J~Hf8^1Ps_CKI43NOWoKLN--G&DfWRZC3XQtxonjQgyNNqL#TTBf0rYFc| z%3nZahv66jIO;mmQH;0ecacZsXa=~+_YXNyWi(AFs@wNH%tL(_5U$`yyN>3t* z@IzqDrLJ14tU3I+PChZ36j&hgii)wRIC|+xlXNQhV7 zMLXA&rex9j;38FhZdO83 zKAtO5O~Lb;-;-qd>ujW__=hJU9fjI5pY@Rnz{RqYtD6k_d0^cF`(Vg?s8Cftw?D)8 z#_0g(kS&p>P-)|zP!d_p9L(XVS5U_GG$#?vh?GwO z{_gyU863JCU*k%QtUFeo;EG=r( zX%hbZ+W^02&~4BCu-|N0yT?;d@Zdrf8nk3(lnPwZ*NMc<3LI3cqRRxOeL;2-q#%`C zJSzd-Il;Ug>}kZ%N&0y|^AYbw0}}t>LJ|G}MALM7`u;yLVfT!q@^bZoI3eY+g6?B1Z1&*!9{x+f;C34;iq=xmup8&ro=6CZ_ z%_;>{=17Yr3ODq(=}bcIq`SOe@3@h_d^<(hs!tclZv6%&spjsk31y|R#y}ZWJ6E@v zzMicI?DdcT_D8I_URwcviD?E-SFDY?GUE87eBACK0z`rIOgd&1Gll7Tu>>yl4eCKH zWIX-30^>0baCar&OGIcI=FN7A0Dq3VyEXi{;&`W+p3QWv-p9V<>5Hb-tpZ`WNnoUl z(W1QM$-juByY1I&^%tnr6i*o~;e_fooP>EATWy^j684s%y|m*5u(j>uiCph;CS#EH zQLbitcNkexp(g{wB(^wk zgTS^-n(DS3=L{Z9bX&iy1pi}2Z%Y8fFkc`hkd~0}Rb!`L+%k^w(Pd&l8MQiZRJ2Hr zO1)DP4elrNh|AyHv*9yjB%CbEITT0|^yx$2_y7U!h$gn;Z%N4MH>cy64M zy2Jh@9bzGBY*lWe#S)`jq0_ZFjQ)euL-5V$aCcrWiWqoNaPf_*0=8jU-90crVTVSg z-O;rzvAGA$T5m7$4F4}rU{<{WRJQ^&q8*FDDgU1E<^TPabX)-ET1kpWt%!{greb7A zz!*H;3?FU)?7}^Wu-FQF{BzfWw;mp-YtqilNW` z!(8(EQEjy#&S#ctazIcSt2+<3%PG-U7d|V^@JLdSX6GYB!vy^gM3&NZ!WeqdWzQTd zbm@SN&x5WgH0%<4XfjPcUmJxB$5q$g4~BvFwiSG3(#-Uk^~>kEqRdH4R*uA3JyJ_G zmu~*9{VT7&YS!>|*oq~NNl6)K7*U3mmwwGx8#b#t(h#c^EzxmJvl~n6GMr1wUi*q) z7nsz(Y(TF2bU-}_QW!e&U)_%{w;enT0k~&Pw`Drn^3nTmD#zF{^D0GFh4~oXy}tSG zO7W*w5>w=Z94PsB#m^Bt0YE;5+peI4P1m5Uc9p8S6ASwbiXSiZ^q0IOg~z{}=guYIJrqDom8X6yA<*qM7bF zb!zr4ZU-NzQEO#(ltozNf+TdaUGliNar_8uW?=?7Yyw|+bKl^xZ| zST5r1#v~nfS9ydftEOqLl;H^j4TB2bW^x^Wso)l`AiEOxCb3xB*~n))k@NJ#Y!PwD zSa*?C1wCf#@Ph+D+@3fr>94Is;Bl^`oHG2EPbk%R*g31J8FaQFFWF$RUyVT)ROGTUuA&8aI`>Pi2%cZLHS#Ip%kmvC}TEnM5ZR@_aoVsvtwsi?nn&Y?b z$%s4j57%+KWcGm0q}}-ncjyg{6lJp`YIO!BKw_7Y_`O+CE9scC2JeUaD|E;HY&qf} zkMC+VO?0d3UiRY2GDd5#JdY$ThkqWI6XMxa|E|xd)Hkp%aWeWql-p+EDUZM+!Pj+a z%TMx^B+FSgf{XF5*e~EL(^KJW~D#X+W00JA{>C z&1OHOnS+qbb=R#bG5Hj4F&Aqkty((jt9^i8KDV~~>Dr9&hX}m6`H-6c%u#7C0+i27Z6>u>riYYV*o$gHM!dlj+;sbF8XA5p3u-4!M71 z0uP$TZxLP zF@UB&HN6Bpz02*b7Ge1+<;X-e3um|P_e-4ji9odgFV{58hQP;gT$aPvIVvSjvl-03+x7{ouOqEdvsu9b;-gHhZRoVx=&IL zYv>{yaaoni;t=@dM&IMhe>wN|i8;s%ctI`zp4EuL0x&zLp)ovGy^SL?R8yQgwQ!D9 zXx^)6kDOy>03-ezyP+La#?E>0s6P#Up9SF7cV_~CMcD>Qj*Gc@qSi#{9!tG405IoC z25=yIVhEbW*a3&$%wNBL@%#3EIazwOV>};sTeg0ds7^_tuFF^7J$-oQ%zI}K9#^d^ zM&bX$yK$jejihuI02Axi2uT+&p1S%Ttpx{<#z2s7OZ^BmN($%3zYW0X4FLA9LNiwP z0kCPiuLEw8WZ@Uwf?tD|kLcCAOLw(TJQjPex*w7mS!5M1yY9keZygyP*x+=@b|)e8 zx2YS&$o|CjEoF#ho~6O?uIYefdfL-}^U*g0y=xTi2!U~DCrjBqg`o3>)rK<)(^d_% z#&MAr)#@nW3e|Z<>vG2vs#Dad1=v!7xVNvn-E7*6{9!AtJ(}d6MS8h4*rEQ}8o>-j z5d;MyEj_BLKDsqlgH_;zG;u9)N`R(^%kJ{(?(znAC~Fa4Y?LgqWup3@Ys@RI?4xWr zIo3DU0?pl7L1UAb$vYq{0OrPYMP(&^aOLUd=F`nb(3jam7z})c;P{06@PjLOWvQA^ zHrBYS3zOe-J79ZF7~B&(S`lY4_D1{lDq7RNoM}kjp##?Yl`{i4EwIU}xH4i-02t)T z0sF?Psz!eJVn^c~*||r_XaV@`MZPNIcU9_Ke?J>n1mNblm#e&szthE=FM#T}YpG#@ z*={8^!v1=b(1yi+IpE-FOOG~yv-?qmo>9DMHpUEQq))Hdzp`s2##beslH(~|(}Fj* zYC(hKMW;5~zD6NS8Q0LF8h@dv;LA~4Us#;LMI5kk<}NYfzmKsR<)X7_rP_8`$m-e+ zgI{jADs)m!zDm71Fa>h4y+^RUZOAumh<)5xnVUPe!0m(@3@**KJgsN|Qt^!oA>|*n zjAwqu`sEJ*>^9#IbtHv z3O*m4j)9m}M08=~fPM4gKLX$(XN_M+<@W(_^S}E67)EK-(+wcIbd{TQ*8pC8%5rJ( zs-w{s-IO3?zYd3E&_fBY>1UDV6$$>JCNh`fqIIk?b0hl@Y`2ui!aMW1q z-@gqoKt%a26o4VHTYwY5?8y)`&AJ+CpV;!3$cL78l!X-l-Zp^414q)tvhBOVFv}YP z@Vee$f3?#`wW~CycU-$73EiZPRb&8jZ>i;O8Sa0MwW%|uuKHvL;1@C z_VB-82k8%!SkaN0_1hhQ4}sv0evzw`{AJn$U@p``(31gdHSXxF1Te~8w)Ma_0a&wI z><{4O;3w0>r094e=u*a+rG9t7ceX2+skUATI0}jFx zht{*&TuWJC(Cn=on#!nBqnJdDwNshRQI-{|{HyN#^+6`|xM4ReX55y0^lz($<4Hv{ zDrd|8qNTcWJ;*HQmRh;Zs`~e4g0y0WG0Cc;UMhEZTz(VUt!G#RuC&YUUfJE^enp6l zNMTP8%vh$Nq{(P2>RETZjT;+#vOgyePdjTz%dHHp6I?y>b8%}JXJ+yEHoz?NdR?2F zzk+!?nmz!&4UcX|JBe`}xDFsr;Ya~S!1Uy!w2ue%rpjN^1YOe+n*TDBmJ zj%YCga2K%X95BIzD_i&PY~9(4h;ajOv^OBFVu)$g?Zl?XKjaLZjDV==%S?FIyRLPN zaeOi|O@O@($nFZv;c&o4Eb!$*8G1&M?u@jT9h$wp@HXBGo-SQNi$|T0rQR+l6yYZh zorAtjo4^tPR(D{&C^1ENS^##QIZ2Od@Nw&nsxVG5@hem^Z*st~w{K>Xa8`ptB}n^v-u0;fJQ=yQWmVhm-eDQa0aJ_vg_~vO5Oe}~+AjsL zsyf*G+4njCAN<-E4PYq%41zgveqK%PCr=%iJxK~&0Qlq(e$4@o=-Au&p9Ap0eE^&p z(Ct7u;Ln-AZUaUeSMa@IdNt$bc9gr9yiO=u4kGG7o3b^qLiF+xbVJp=>y6~H1JW^Q zFl?5bE7cgS!*QPEAT+19N>?6YL6Tdy1J0})?g?7%2tY;)++G2m(HI32JNZ=Q#CmA4 za=BCuv$bzQ-lW!&at0<8f=Cf|I5gUi+UoA6#Lic^T8J-OMT}s#IC=U1@yRgWbpfPqC67yO9p<>kARtrc2 zUyscjw}dZqZUV3!u-hs&UfsGCt-u)I)#iX-qSa*wX+o{mNI76pl&A2U)Cce%1>nyK zz?TeQ_zQsH@6HS8%cMvCO!j$u`@!aehpJ)|)h<_@WCepUw{FCT071?Sso2)Kz=`v( zTDk2^EeDKbl2t%QHDcH0fR|bO{yGU&Jm$!8%IfLM|J2ON zvW+Ym(HScq0Qg9+|4|{)jlmpk2Zs`WTPDz60Bflg=1fBXYYJ5pus0{Lr!jv3V7;tS z^Y4s`gat!Yi6kmRHvmUCoLMG#Lk+ql`$w-zEPO!%RHHYi#}sLT-k2 zh%UUQrdjEZz~blWbhk>5s`}8a+b_@^s^L5qs3Dtc0$>DyL+QGml4=Lc*_jOnW9%*0 zdM2;ag;JT`Qc%}gnV@R9m8l)6#>^RkefZq(mkPTjlATlQlU})T3upDeH50&y6=&Hi zcHzs_S8Hoo+Fj1{Cx?s$Fb|bpWVD~;ju|lo-Q;SebrB2&PAPeqNjE`I<1tQ-3vt;J z#|6{`}pi*RSue z2k%JAO%WR_1RdPfEF}DL*P9y+8?Wx&iuYuVuZEoi-g*9tnlY@& zlXjzYJb(72OTyYVfc+h5uLJ&)LePv{q$(TY?=NqmomV@zXj`^BXQpyndbJz0i`)=* zBjkcyZ_=S>S4^#%W2mL!Ir?0x&#MmC7##U|6nr~CcViwUfF0G)-A5cc$rQ+^#J# zhrV~7Zc2ji55Vtc7+lFrlrmZ@zKWtO-lb8N(-NmB1JkOV;fZW1@a{V5Fxp~QV(IJ@nL*KsUJ;7-Zs~DD-Eg3eF*Uz^_cb1Gfu98 zvF=$Z`;d6I^2h|%jg8$kg2n3D1!846Hy@Zx!@zN6HKB|X`{veG%is+VYI2~tsu*$6 zM!`X=UK_lwyOg=@SzIa3F)9Pk-SsUWZjWMrDP6gVpFfJ9q|CAKE&#ty0Dlt^b7nkB4OHL>FqYCi0fA3fFsp7%5jtfw)8efeC5{HzZ9Ve zy$O1I*tfPrE$Fo{z-|hF%E4u>`sjWKVDyF%^ey`JK7Rbm#~MCR`B<7>z1mSVj_u6C zLag#_lh`+$M+&@n%WjQ)#0J-+H#T447%ZD3LbA_O zqI&_D8LiG4R%Y7WQYMx*wlcTy}BJ}@)I5q`<13Sl)2;iN3+GQgh^z=!?`2Yh() zfzRu<4}j$cxL*nM<~Z3;V-~?9{TsW^4T0ZZZ3a-8Y=Jve0!~la0f_WucnecOvG)3y z>qnZx+~`D<>^-fcoEqn;cag8_;UThhIOI5Uuc(#K3zhnX6e|Cz5wLo~4)D32)9qNd zuk6%odhO6_r)(8EM?3St*vIzJ+SST%PhJ@&3SjE>cvK&!KW$)Rv9(*j+9bsKEBzyL z2+u&&dRf{8n)&3NtX3N>M%OoEF+FF1PP}76mBpOO?P53bL)xR-6_z^rB$Ga`+5cY9 zv?r!r%4>$o4ENNYc<0tV*!wyiFrBsDwyJy-U6@~>4)Fm7S}2J=R4;|=LfPdyZzZ*g7wVLtMJo{^T-MMK>d3Q8 zHy)*SN0zbfJ!|Q?5$pLtN+tEASi7qqHcFaK8LVvOKq2&6SI2R_g=wYO|NeWzucJ10>j^!ShX<0>4sr3 z);PX)KDPsIS^Dr-H+uSLN?+=#9GwGJ(JQ%KK9)BnB@D(}4Qv7M&Kmq(T~lbdtAwRa zypKLGfT6##sG0+QqG$M72Vlnc{pDjyY@iOmmtO54)q@7WGV99ZYXz+`mu<9*$^jREnYab&bl>GFR+Vhde7$R1 zTmEoye(!U9LY1FgW-LaKJSpQj@cTb>z>^Pr{vSGEK31XO|F|XV+%*u) z|1l9*41N?8hL|bymkH>auD-GET2$yPJ4|HKmNn@p59v$3*7sGVMVI2V;JSm<0haTu};18;)Goi*v+$kQC5L? zsYgrO?amL!lBeqM+~d8kpoiOJxeHRMVVb8ZwI7a~UVG+o<-y^%f?M}sZ!j3pf?qJ~ z1@sLQtliwx1S>u*7yOju29;IC0W--3hco>X`tzUvWd6p`f7~61Zb?|eU5xwB*TP6s zr@;9}>v*K$2=D7{UR!r1NIPKFk$hMH{>YWE$^px6GX;QEV-g1pfP*H19R2xyz<0Fu z`$~UUMh+ckhhGG5%koy*GS32qSyF(?pbh*oa}^X=YxatoaMrunX~`WcogiH{)mI_~ zYXIQZz~5Dl?7nz40DH7Sy_+m}0@adFG(m&KehSnaun2t4L-p6BFm!fX@`h(~Y@G}O&xz=5e~jqw%~{st<)jw| zzgn8c;e$y$ z@JtZY%j}a}0Crz0{g8y9y-HCjpFA%ByNG6t(|__5(fX4FpHC)$XJ-n)W8nRp9PsBq z8-S|`xWvWwbHMJdHMN-E6R)Lja?d*5+%TiYG}naQMBf9y;c~x+p@oS}fm~+7uqlht zwcJ&g=~0*P{4mp&0dAkdSr}S{xh6^oZo@1g$KRqOqy_Ana!-L*^mErpglG6idcTw` z&*tI0=V@BM5TIQ}86el|+uBm(SiKduGB3r8zKyK7Z%z+t%b3lOah~p!W2TV$aQaH}QZJBP_PVC*jFhI`&yk1p0|bD(DGGMD z-%-~aiL;O|kcLW|0X%Wu(}fotM~PV5WW?FMPOicKL#d-R#iTH?a4M@7!6>aS&7Vcz)$3W z!MfX=KbD8$-#Vml$tERvlkBWiXQuj)Cw7Nj;M#ihKN5=F4cwzXst-4l(F$(OVr2e0 z*vuK6w?YCL7uHqc1!t1<`%G~?h|aGi0qpQZnA66?3e@z6%wN=GH_QU{2)y`!i-ZL( z{E~nL_>#P=0(jHd{x=6144?{jDV|8gJK;XPnP;Ufs~&DXJH`;zIOYI*!jwls-n7kn z*_j(12V+0@g~6=lnQ9Df4!B4ShE-f^PJ0Do-3d@z!mwI}X(C1}CFU7|HjMu{00)7Y z%J`az9fn5$wk_UIZ#cfT{zd?&ziqvJVJsGS0APMN%x_@%V9fbpSq8N=aFPM6?Njso zI1o1+@Vp$bi;@wCp6q}pw*miGL(pt~dIxL(x0>blIwkiA(9ZA@Kfd-9`aX(aG?o?@ z96@F7r-emvm%GrbJNr#umzj)qVC{1ZSvD6HS(V1zbe}D2^-4*jibqL6_U0q;l>x$N zK;39!T!hkvlCx88?+e|Vsa`NS$|fUWwu!iN8+C}U3V>FjI?EIUlO++V}q%@ zMkl;AXq^D=N>Sb*<60r^csd9i2}0MDZ$W%J#z9n_GzEFMWMwFXrvdW0dzopEi zXCLcG2QQG3rLTuKRKfZR?4`XUaIC?#qaG!7y(1wZdbP)3z*z#CuB~)xa?NxPqhRq% z`2$}YoF4DMOjgZM`c$jj-FLto531?|YWOad{5@YEh;qQ%>mnSaLg!X`;y50-)B*5k z0BhD2d7Iq1wLQ`ljfUhFSAd9>wA z!`c(bZkNYddXRmwn}#vMl0fSMTft=4*^0dgFN{NEApl41OPr#J)s=J{5m8<_nJb_g zz))^qc6(Fk{!F@ZrPzzN9y#C&G&}9ANAnrB4iRkT$F(1J@Z2G2SUukX_z>kdNa2RQ z^EhA5n4N~ek;64V|3(Kq?uJxqJes)f~(% zJa8D`=75I)b|#jSunb^fHTuBaM5~mdNlO~Jd;r-WzS~_lq(>34@#pK4Cr<=>_R?(f zBm|H@j){^pQL4rD+Z<$REh)~MLM~pGp&Zvx>(#l6LRW}&%3jVT38`=_oLvC+&yRu-bW?&dB3hN}17XqWGwB;I?N0=j1m>x-*OYS7x3SStu zRuZB!y$BqRh+CWEEa=Zh;HAYLfJ@B+$Ms`bIal5nJ6Mgf9L8~cg$PKKly%%mSOAz1 z_WbmzL&7i;p(zha70|=7)bsz61O6`pxE$~pz}^JF&JRSx@2iomuUSjS($s_SqwlFF z(V3=SXA%4;xq+&shYAz>JVIH{#MRiLZv#jr*bKaFoPd_EAU}>Tt_8$8!Cq zHc}1ZefFyLw^a2i-HpRJ$++bJw4YP6UG%H1&2FfGN{K4_=N%#lXZ5N`lyB^JjIDHF z(>HBlB^?F&*c>Jyv9sf6C0KFcA!yy)*6yh1pS{Bd6nU#%b11VfPa7UUeu%m23npSa zU}hz)JNS16mM#AyZ6>!W`!?unmJF|hT(2;X)BzOw27Z|ks71fycI%$AqUC;*z&^?N&k?9s=0Q?D0 z27sj}zVy$M_-mNm`~I82^)`UJY&X)!H~{JnzHr!LU)H%Yl?Q_=7{(Y{n`9s0R0bsDb0Qv<@t<~Wtu1;)r@>ds7wzanzy zc9}H~?78-#PX}Nxa{ZszBmh^Sxd1#f0I)spApkrxHE#zT0Jgtp>?U{wm1LaNp@~xt zQJ0e5!7~A1enIlWN`;<4yuh!S{Qm>seI4*Y1K61hnw3<&Ei)E4;?mHI@Hez@_q>G< zmU2-^&|tW9#nq~~S*)A1X;#-al7a##dnIjhUTbV!ZQ6(jG_IPtUbDO-w+gu4vRdj@ zZtcxcW*Pf7mi1Ejj~Izl8~3-QO@kzJk5SBrMDo&5_T7tI?_sxjTQ8F424bpL>@j_` zrWT*J6^#=r^{D2W%7N1{A$ zwfM4T!23uBi@MHurY}g831g-*w@0W3^4bdTiggs3(BJMOQ8Fr({oa# zm5>z<*p0yI<^z2-1rYaSL1!cIAO9G&pd$qBAd3jw955d}KDX>32Lar64p@1FS2_o* zC-W!XwWkH(cuHE2<3dKa6Z>4g6wj)aKx-RzBiyfM*^$=_j+8-NAh3&!+}rUIJv3FT zrm`i)I&X4pq}{EtsMxk*+oKtwk3as?laD`PlGN-(ejRyAB6-&TQe}l_5lbSf(NQ?e@T~eL8Om-OHj7Kt zbrzSi-M2%Yt*lAWH3;W?FM#7=W8VG;0qk!O1^sLTJ`RDkY=%7^KXtqSJkxp<1K{I0 zU=diqDi`LyJShv>o9O=uz`|*d=}7neZ$Y2wyNmFc($K8ky{r4C z>)vOvjz?aj&X5Xbabr$BXC;#`p)|c{-D_eTbIIHN1gfn0q}hcMTb2nrQu893*)ylS z>gABoehsqSV3$F1WW`m)(e(qE2_`XBCmyEKox*Rh&i_@aOmZQad7NdF+HV(bV5-*K ztQKXWN`|t*s+Zy5b|x~3xO%dBFDnnZ*HS$A&sV2~JUmShzj@H%wX8v0yE4kOIWX;3 zI#{WFH{nV6Fu8D`4&`suHY9bFTTHsE+ob@Evcw<@0hmeF7XES(Ec6_zQ;O> z87IAL7Pytoa)nCLpu+;&0FwnBmXxUkdo8yC-w1D84%pRFyh^4*tHj}tRebOtIq!^6-+Pb5~_jJHi|b|1MR4tMIl} zp-Q{FKX*p1pBLPNw(QpjDl-yd1Bu=t(yu;wqP>=Bo6+C;HaTeKHFX!&)Xy3Po^yZ7 z0U#ld38u*{XHJ56*K@YUaW8BV4%mYdMsJY(uNtjGOeRMTz7q4*Cq8BFhVanF9NemqCYRhvWKqV%CJ>NS)@WbEMrS zoU4YhHdzhMHslFtN0JnVnP!?wg07G0R&e=u0obo5`8#yLQ{{k>jyu@wxOzs_jbesS zZb9T3U6ewV0`PIxRfl7KHp-iz>B|c`&l=Ef9|!#J9gXm<&+LGGl_7u^m8xF=4&=6^ zf@t1gkFprDtc)X-bPq5GDbB6L7H_*hq!G~(GrOdzO490{Q0%ql#Au&@nA=i&PusiX!5P8~v$n)t z(v}u+R}!;6iQWe2@$BJmTQy5G*KZ`Y7iJL%XI~!SY&Q&IESq{tnlpg z+-&A(H91+@AlAJ(WEN^8Hu4m%J`ByI&K>CPBX^N6!KojT9~V5MTk_{%BlvG3(t)Xt*mX{l*R7~9%tZ;p(ipwcn7!-1bziI1 z|ELYmr(0itXYTx7^t!4rEMv5t%vgh%3zJ*v)dYwfky<~!x3fJSH%TC*@| zj~55BPdz$+dJ*4g(oL+@$V*=NDUEcxmvC$n4Y6APFPMY08Fwe1zOTvIv^B!#g3cC% zY&W-+8EMCOoG%p2QV{t1qhcT%TOx?DmFC2lj@Dy3wnilk1W#P9>R4jnHRQvU1s8Zn|+n zGc)a)=;a;>7tLI4{6m@^NX&+E|M0Sr?Tf-#RqIq%LG$pIFUSY=)qTCbcitVlU_aLM zl-cSn`r4)Atps};zsxyc<^t{70#2!LJh?n1P=<3F&K7`WOoC)8;+vj8Wp&ODC zdd3&9jbED|iO4(PO3L3q3#nu95-vF+mzmi4fe#gfwG@j--M`HEBz_^-~6icRK zH|EOG#<7J9cXTuwVqRIeP2o5IcWTByahtYzG{dCx|Kn&GaKDSEjkxV)QCRG)4?I#+ znbbj5Cf7i-c;jh<8u2-*p?kL-mD5M675e65d|Q#MjIWA}v0B793GJw?v%>43QF}YpS>iMfqO5!dvTj`_sK5=x` z$1gvoWmXszfP2v0P&m>~1Gt7`7Ju6U-T>H-0suB5*W&@l0&WX7-H=S+1;BRcteyay zwo4ShQhWGwy1&uZF0O$S*rE2p0iK@+K-WoM#>rxsYTH~+X`i5?CB?UYwyEP-8=i^= z@UQ>!w`!1J!<=Ok;V^{&xVWaq-2(73B7!C#-jl&v5z1)-PA-ye1l|*SZw<6J0G9TX zz_L|szDw{_=gna5bXTnVr>E_dr&Cw8d4PYJ3l>^|_(8rym+Wu*q#Y`COj&|m|l8$5N+h#Ri zlEz|+NW%eu{l?)&sOwi+z?Y_#{x^dmt+Y*CU9|>q{~tZ+5jJtp;jL*~;~Jq3r;;i) z^Xyj?)pn$UCM^}5HCoOX_MV`D^1{qvZhQtyD6Qg7(ylL@m1S8kQ_GQs}xpjiD-qolDAKC`?@-tQ+f!~iB%W(GHNmXeI z#|KS=F!;p=PGjtEqR`jVWeeE+jSG5f0Y3!5_@IO1c0otl3do#3<}gPBF#1iqpoLiQ z8jvnGa99?*QHHZdx=SGZdtdOt{_2N!5@^MQ!rvYXtAnk|E*>VEv0ki%G51h`2DX2- zL_+vN0Q~Z^zuiakDmnm;=cJrBTL8nr?h?Fd0p@J~IImm0!CkL`2<4{9Z%31Df>;Z_ zbv|}C)-S3N{QWwbc&Ty#cgJ5!muM`CRTkGb^7rb`YT!2eJGYkpEHP_+#eSHXUn<|% zztwPm1X-E1-n9q11EFoVCtU|($Np9L+&^?#!`IawyhFVXG&3P>&0i_U2->RSu(9`s zdEL3Tf?L+?XK$3ED5EwQs3E5cuLdyNv4FP~+AFAY#~~TJk+Gb&0cGJ}q9YOw!}L7@ z-#gk%%s1cv+f?#~;Xg2MFZ^ZcZ|5otxS2Zy{t^KG)_)AZRJ@)A%t#CO6GMg0neZZS zf|(D;w2eWl&B3VcR3oyRafwlaWf*N9hy!gKXXFgcLA`t+u{KHN;ZJu@+SmkF^RtK7KA}CZ2sL#@t4^a zuzk?K9s)0`v4F<~eWeBL&TGe80Q-`Ml6E}%fS>vquZMYnLUFjdWE-~)yxhiDn77@@ z*LP+JqX(z_?xG}^9LO@GHiMhW=5w9s*FUP_=c!X1hL>HvF;@4al?D8lmw&qtg69{> zE@H0-{-7cn0N)}_qs|6Uk5>5YH&JZV*1m~})1=(LS=ZRVRBbF^6lA3`&1TI`%BF3G zL-vf=j(XFQ+nT% z%48$QCCz$gSF$HsB-T@R-Nvz3Fe&|W0%jJd<=tz-HYG^s#aqp4tHLfSD4R4kjay$} z0ec?5^;B%nPfpC~juZvU{%B{!W`5JdH^?G(C*kktW#MbA^p$t^jbHz1^rpgJ-_;gy z7yfhc)xK&An2Oi4fQ?wBt@ql(J-n&| zL*N5_O?7kjDi&uVh(M&0IHpBHX+F5GgHd21^oUf`_ac4JX>W0pl8;wEPBS%^k4 zC)kea6jb*r(ldDu(^>qn0dUs-IA-*o(+L{DpD|@dc%=j2ih_O*6WIKX|5>Y8z|6*O zS-{$*T{gPZ225_~v4HJ@9t&6`rS$O;tFxoyX#);%%jlhikz5 z?pWw)N=AKa`XWiEN3u;LZ$n!Y)V5MM_HegGgs&*YZZYX$u`-x1;#^_;egOR0U;ZZb z&$hQHO*FZ*%l!MmS)w-JGzqVxqwigpt$T~lYyPSuP&JH&pJl72r<2ryi751yd=U~4 zD|t%{Z-?4@jN!%2Z0l7=!8D~otT9@va5i-AmqD*@L-@3`NUrY}&@?s&w6f!=Rikg> zz5r>Zc`W6%*Zg7>(m-g3uqW6@D_MwRfh`+yKLNN#wn?sJU8i|42ypX$hp;(Sv=1m4n_Z zqBD-;>;=P|&@x|L6BhgAoNezMn-spkRP6K|DV&-11i<+maL@89#` zH0CO}{?>KlS{AT5hZ1z$tYr;|rTS%!0I+`-T7y`>SF+B}yT&gRdX3hCtvU`+(1;D; z3+*lpvpavadF;xju`h9b16V(HOlmCIv7z<3@Oam+lYTpZ!0|_`thz4;s7@MP?ZM>) z*n_#O_x%*<94_NJF0(l-E$rnkJ+Vtkyw$}m4z;H;8`N(K-4js_*W#pRtD?%qWl?N( zK9Hc*2$iu4hRxqdP&TUBb7eJ1XOLp%oTEbR#`rewwQy~C&ki5Uf~pTz_sQaW$BDmq znumEq+<(a5RDXfK+R+H-du{+cKH#&N)+%b6%j#H?Ac?Hy0 z&R_OzJ-0ub6D<$Suww4G|5&hm9{@|)zDELizB9Xb%5BXBVL2>KCFkTL69IF|EEY2_ zIyz)XRp;rljcoL?NBi+b0Nd#VqK>X&Rh3@05ut691g(N)ui9v}1Y5K;x~ZswmRWhp z?URYa|ADZ?NYJ(E=W%T(T`th#Rx|vhiG|AUl7EklAxVijsyX-B^+~{T+HrNaK)Akxy*kWvGat z5e32GqV`Qmi|sTAvqK3*+A(O2UDvYh+>~On8?57_4zxMk+!l%cD9&+zD_rvI$y>d( zcBMDiet8RctFHjSE3{v-fJMo`*GMyG+dJDD_NLG570ev=UIpl_+xl!Yx7q5|3$5wU zbYiSyEhM&u#cgk1kjxDaYwv5gS>rp9HC)vY%)&Voa0;_jBOB#xCOgU|EE-1CHSQOqzDbx~=T)ca%nA&X@ zOoy)B^Jvg*QBk(>ZlZ0*J+8YnfU6DoGZyb8LG&kU3z%L>pE?xlWr?hi$;PVE;UhJ|!*s^Czn5x%fJX$}7?ecuLxt$DnNAA0NBX zcj^3VySKACQ*D)XtRL>#i&Obx&iK811S4G3Wa#iY+@HEI`YFQ5giO;Pyz-;EjlfDTC1yjc%oyi9)dy07d^B^ffVCxik^8jj`G@`=CwiD z0Ue&obo_vGW10H`>T_voOQ~yD(7Jl+Qn)A@{A1s#Lf6gl6z}kXk`}qhQMA8 z2(=1gIXiA>4w36~DTK5*BV~O*RK~AL`lu~y)*^RoYF3^^;-^XU7tBl~ubJaSQs4I!o(;sP0RGruM zSwB2@sEl2eR5F0gdn2=#X&G+ak5uAH1Ne4Zz}-`?5v=3fB6!ugnay5z*TY%QR;y4m3 zIV0#b(7Vy5Y-3frjo0kJ9FHFN&MgO=K?yv{#X zMoBP=NG!SeZk!8xDF&@T+>OIb4~{W%J<5Z=tA>>zAUbkaq7D}gzVcAULpOGTMXW%hmp3e;w1Ug@u60~@Hjp=Sp@N4B*QYu9>%hU92klcRBuYniVG zfYkyFffII>euMOvOIj?(I@B64=-E5NV|P7Z6&Ar(FeTg{M*9}nz}liWFF=%^#QMo%-5X1 z0dejh4ig5Z5fh=Wf6JvoY+|@je$inuN+0yJ92Z=dVFLm1XA-ovmOgr&x{U?prOD8F zbYB4G))f@*_`h38P)bGrxNM829eACsvSD~Nfce@*TErR>O7(!5tX{;|#;!fnj!gT7 z(B8DX7Z_`a+j%0tioaU=D0h^WY+%FFH;@e7t1aNsl>XN(;Q9Qk0W8BaQ0*pP&r5p7 z=yVZvQZ`cz-qwJ=(w}@O-m1V0`!ZH~La>;q=!PEj*l%t%-Yz=c*GD|qiT`Vah(GuEz#o73F&3}z%iI<)C4X!lZ(Y#$uz-uBhfnTe0c)~Nd+ZS_d5)<1 zi2Uc5E#Mv?sVrcAk?#F|AUWz;rs`=^a~gdi>F-0>3cmXB)#9R5`81o!ezDCVJp$|Z z{Xx3-u5)2^bTq2|cBv79T{Kx*^crZy1;8&Ejd?sbk0j1XSM#=jl2~R|1$%WNL!4b-oQgGWZ=hTiMI|?wZ=o+hmh0;4PhNBONqQH)9B`H5ndNJ zOGZ^_g_hlN)eXtk$_`k{>*Zc_^R>e7?d(y&^(%#S)gy?O@$n-7rhQS43+JTv=MG&~zTlx^e-``;ZH-Q0dJkUn27w|h4Fn`|yp?`bl=QnTG z5FQ5)6O6_0(E$GR$@A~O|9*bTaq4iC^>Gmja++}OA-w}tC+rL`*8^JV$e2U3w* zp6CcjbBSzTJqtCOezW%e+U5;cXNXO-wTNxCyB>dCmk6KStzZh3XrX<^n>1%(o-f)pFPqMel9Kw`N_ef`_t3kaI zgVXFSmb5>?K(01ozso8ErfqC0V+ZSDG*RueLOJr4yJFmgW1D@~19qx{;BIB!)sEK| z^-1#_(NY|x%p7IwJ(G42ywV)JS*jD+tDUic2d1xY0smJ4OpzvbzR&_r3vc8c76zuh z%p*H(o6;uW1SG9=veuZsmHvt)dSEH+6AZ7DR;A&!*4V^Ut7X=1W^C2TVx=vmEZPCP zM-A_30zUJf;mBh@h`D$M)j#*JhFz1Kn##IrXrR?&nYby}TtaM+I;T%ss*ZVDn!9?3 z^?Yo=nKkI`%%H04Q^p|9UXS0F+P$H;;+=+XDqil^vAz4W2Fhg`gOaaRW#zSJ{)Cw|2Y6=dvwU) zggh7y-+Rn*Milhp_s>tJhuob8aG2~Nr%hmY@hujIv9BX-`XUSXo@7?WOBAg~<(lFA{S^5-`h}r}Sg6?P_C`~0 z4lkXc^5*Q%F!Z(S3-(wC+nw~ykzN#~eHt3O&9*H3L{IG}TFcLioI}HJ&viZ3>GZN_Hdv&cZ!7^0bx~Yt$R2prr^s+ zO(j?xjrHrO0H=96LpYx;+6z-TzU zW-mqCELCewXfp>V>r*%Fz~L^C)I2pz)v+hyG?!O|@)0U(uSN?zJyReU3lm!~oe*WV z<}ZgVT&WL&w`VbP>680dw(dkKi@i*f(lI=nUbM`q%7ff>-cAO+4I`-w0SAaxU+%Q5 zTvk=Z-hsDvr@CRzG;Xtjd3M8VU$AMq<)gGj)Q|MEo=^Z2)KeAyHUNAIj(at8iE7mAWDLRRHtrQ9z(yJ)c8h{oJ0= zrZ$z1?4 z9_I@;rZ^pCD|_Wlt|5W9B+h}2Vb|2aUABQ=^qtmG(Ad8Kc)|vsE}2=&;=GM}gCf&J zIOU(*0PZYN?6mv@vDoyhtX46m^EDHNqR8-3+b@JJT0qTPJxP z-O#t7CdFgm)`%k5wAs`4t!eA39JK7G+cAc7H@27P8vb6=m$HEWbAus;x=a<4J*6W69PnNd z%nVdl+9b0|BXH?tL~7-xt7l7x$Po3x5jS)G$m$@(#&s+x!}Xh`tO@cGg}owDTi^BU zvDc0!)m;Kxuc#s|6(=W9nT7P4e?EWu=j3OeJk7wj?Z`sikj~|*S+L9;8QtCBJM8VV zhR$=82R1S*FRAewsP==(nR?8b=Ngk1jh(*U8Tg`GU#Qj3UY-9sXffoX<<@19n$&*S?I?ef}!md3r5nVjchk z-<}J@;8${i{m|`#{)|Q8(9AEL5{m(W8I0kjnXBawX#-}C@Iy1VK+$3WKl}doZyurN z&!4~Vwhp;n9v_|XI{WGKLkbUyw#t(wY)>1o$~xAHjWb@^dNoE9i8XD$X%%ic@%it6 z&ZK#56vJJ)vkyoIgL(iY=H_fA;26r9!9HI2o6BPUB5e|kwa_|#n^?g5{Sk$AZxW_< zAG>}X%>YJeIly*Q^zZ#ghSLmMAN5lt=ADs;kaW>o(ttsmKFn0#8TYHwKx3FOeNh#wbzG(L+wlCUt@{V^XXW#VA^%)j%he^WF>_Dttc4_71 zdg#1!y{XB};wIt(u*tf#CWn%dYJD)k%{e>GVZI+LF6E-WE-hr593W=*wPDOmauwcl~wZT zlZ!{4b@9<8sc7g%MZa|I+jQ^Qs0aNmMtg4MYG2~3rvqU>anhQ(GwT|IXzQDWy(}H< zQPX_jq&{fk+UD)g9hEP<8Q!n2$j^m`M{~VR$d@KyW-CV>U^PJ~zGz+CxpmvRus-~Z1e0R|M`;88Otbjw zZowAi+3f_C0x&};{0aic>@5Hfe2Eeg^0q_|*r_-+^@$G_s%=+Nd=g-fdQ&<+T z2Wzn3IY0GSz~v7bbGEGD?FdKNqb>M>yo9oIxM=bH1Zt+7 z06eK$y%Ev}z+!DZeOg2K-t#u@p*C|XL1sOe=4#`4f*SnrLFmkYPtwgum1oH*+J!U`XXYq9zp<$9W^ok>sBBj(_%{1FTkk1v1*d zJ1t3hc+!W-C&s?cBj$d=6U7BVTfmoo%+nPq?ZM)204(6Uin}(AuMm|h7j!7x$ul>J zu69Lb>rH8#*(UFfcBuCpgl%*M5Wl1c`ad=rVeSTg#{%Z;OBQgVHiw;C_MWUYJ#5(# zEIpg8$)Cld9icI?C2TOHW5EiNKJbw+&Rs?(Z+{2h3#&ZVHHHCA#u*0nh(hdN=0oc1 zGanyl3|~?;*MB5>C61>}x|gv@H(uTu_MrF{Ak2We+sASo%Gp|}GD<={EAQAS`##8J zflcRkU(4nCLgDEs`SJF0An>82kZyvug44PK<%x%Db`wTt2~oAkM(Itsb-g}AaaYH8KcC*zYwvVe!b+M8Th zfBM;U`FjE-Z06vZj`q}rM3&2P3fB*S&JvL6& z^7!oF1OStX5&-)*o$sLDVsd^k zvg>)oDYAkm$HsO9Lbf7isOtxZjl_;N9n)-v7qFM+kiY$ie!zJ*?H58}JGv!i1;CU$ z9W+1kN5ah0NA|r^6B?9kpjI<*r_M+o)g*M25->Txo_k3LrS=Xt4S4LEE*#bcO>P^n zH_?LA-kiV2(Vl)a&?lsh`0qedl1)D^$x{-eR~w$9sR zpljdJn=JM(bq}M;y_}v&`M%Q_%zD7P*vFW@;FlRWhAYjv4xTINRCNgcL?GA z;xDm96?RflR}&r<`&h+ytsfe{zhwFBL#Cclnti=7gWq#&a6>plBmwVtJu)yJXblKl z%pLq%!tOwrpOnm3yJ&9RdUjJk=Wjgw{&RVs-DslxXaM;9{Cxl%b2lO#65NKoK-qdB8L=*B+j|bPGHL}>}vzWJ5_oXi5I zC>!4^D_*o&dA38lopsuaI`D*bzYb{KuLImC$F_^#hP-#*X1aUVV+=|)7!nf_gE4=Z zJ3ST>gFh)#SOzdl21ddHhQEStQc$u#1Re{RHG$FmlPYV5(~;toeCy-{0MiJ};Yr>f z{dS5A8oM~=?qoMdDZ;EZk1G|WN$j3P5#)7SuU5xr#n^yV2eV6Y1DPcjZ_TP)!Bn%# z%;g$1X>eOZF;uH>&@83(w>HZSV97O3z?+6C25@0GYn|V^*n2*zC zKznP|OF3HNE#ji4s`iZYg|&&BA`BeGD6T;hnXQhBLi-{tPkdq*xh$bq@k=2UB;iIH zg5zP1Pq_3b}272A*5jb8lpFhQPsPkcoCBuG6eL4PI5@ z0^hQ6yW1e9%BAj#)H2=uCEm15cI~J}o@j3A_TL1BQB?FD{WA;L)uS5N>AwSD@3{7A z3;6I9bz^LgklUuNlma$lVb*4JhQ>7Gw0sd|elkYpnl|=t zbvX2-n_AM}AftCoU@eXN!uudK>)9#p`l|YVOOtay=Z5UOkLzH=>8%FTzH0q{&=$WN zH}6h6eI~&i2!y2P~XUykUV@ zT-H(AfWt^xz=pdCX>neuM^gxZ{eq`HvNzlfDgT_TGbZ2wIJTV78JBUMOBA|yqSdj0 ztMd^b#~$`~+p7~(5*;w`DA{pfP8KSG5E)2iyp_>NMM`Ndn^bTx;5e{oynI zQb4ZF2)=g1a5_Ozg7Td^a3$4g1OC@6;6?vw7xWi$e(=l6wO3of9kzVbwrg~_QIC-C zQ-fz_Gg{Z1-(qPl<9`qbc^c-GVjB47f1R}P9_ad~7f+r%ee#RLUpzhk0M0%kV)^i* zy7Aw?VAXwKQSEf(V%Ej8)U~@fb$J2S#H@nr?KIXSFZ2bzc@553f#m^icd<@Re}e(2 z=gBThsWg<#W{mJ?yE8$SdW4vxJiGg}vq|9w#(7{S1gl8Q&z@!# zo4)~_p{YlF+IiFQS5J8}_{L%ki@i-?wJGVPoioEs9#?M7!^FZ`+g!yGO=jq69OiBY zFzdiOFYfWwvFzWa5*rv3*cPzI+6TKae^~-xY+&YfBXAfj3g?`c@7B=#ze*VNuWDT2 zR*(yPRa%{r_;+<=1A43`O2y;9|D)&6^>%u~W1xX9&+zTM|NPnW^91t0Y5`N2fPY)K zsuO&Ft{IuWY>@+`e|#*r5}<9x7KXj-W(s4YaYA#7c3firv-abUj>Vf%ep5h6cC1PW z?L{j;NR_X~?ZmnEHa4(!Dru@^YgzZb$ImLS*jXno1%2BXq?Z9 zq9<#VkZG?dXgl1=KZ0*|RjNs6u%X0f`|0Q8D`Ko(+XB9X+JB)N@Ee-G*wg%4F6hf` zz-etg>&~`e?<9MyRdQnWa18?L;mN^9jw*q@*uyLyZTEus&_i^tvFus$3Vw()Sx*#QWaL4ol7^y05Zx>T8EVlv%zCc#!Y>vF$dqTOg@BlI-g^73n{U5`$;y^%GhkqcdsNOHrp#&CTKllq z5h$L*bl7VM`!W{amD@(tz+TU=cPwBdIId`j`=_#iz5ZnIi^SvvLo-PZgT~H{9o+bh z;P1u)zO7L#on9O>=aym;p8e$6bB~)vWWM}76utBO{25eslga|%v4G#H#drql5fanoJbi;EJiQ$J?{kBJtRYhE{4B4qndP49<@th zgo)3Xegcx?&`|l&@|0I^U5e9Rp5q!mTh|k6Z6eRz^0Zk6UQQByDR)Y&use?!4{0~} zBvz{|+io@%#85%DPP12f6b5(1$gX7+y3<5t4|H~#UPJn!m$f z8^N9Y@vLlEMr-1> zm`B?C15=9%vKT)Mk;UZ8*J- zjbO32Env9oDNVqwj8Z84qE9t&117V}f%6bp+y%9;*1PaGQ(M5lDFE~Le1;FmOqC1L z0RF-EpSgMF^v==g2`SecxX-L7=t>J1hMy8@^$-`cK`X6B9`tbnu{g5uCxOz^Qz2Hq zZ7%vTGrO44SkNTlIB4LS*pbiAHukV-yEOWKkPRzgnTih@xd6}W2=vA)-8L{k^8(BA zJm$%fDzh7V8VX4NifqMYS-^=oK>Ohqw@^hZ?a2B<+}8+Z_Say$0kAQf0a7BH%OP|Iulpfx}Lpb_j$5?L@H{) zd%OP+5jz&}zXIUVKeB)`Uj}gB@E=;hE^G^U09@YW*u1pDYCd$nu~2YTfa}9 z&_sKVfqTJp{tWE0^X#5GBqS^{DH4+aroo`X?l0SP4ME$76D==~F6ofPnMcjuEdIRC zAsg_qiYBR}pxKsb*!@vFW)_Ie?14-E$t11AUir*ke2;O#}k!Op6Uv<+NkXcR#FULW0>bN4rqU&wyvQs^Gz{W{%6kx z-%uFyx4H#85)0VM0ZmTmcRzg>26I6ggEJZuEx=g7XocU2$pXNh9( zb;b*7z!jcYGJ>mnFcO%v8F(~S$dRUgJ${^Ur9i4BVfI?7k|yl9F0 zC?t>gqH54xPU=8Pluc;dZ}puU6X`^Z_fBo+{}*PkhS<5?$B=bLJ+sT?Pp$DK_64aB z)~}`I9lPEE)7|jJCz*GNq)7as8~p0Vta6uzUwQ(?=4D-My_OQNiGt*)jpu!H86sP@=Y!~?x1`I%VU=msi8o!B zZ>?)0lz^d%as65X%kp#|MLKt_w~eEnY_X=ctz(-{8s~4VXJ0z zFAcRU-FDK6&MRi2mmA@qF`$XpSg4RMM7_x)ypeEZd#)-DeXs6V7@JwW~pGTW%#40JkTGq zr|E}CR&d+Ks7+w>QkL!@m@q6&;cr{O{MY@2r^M;k)Z%x@Q{!&$M@Zula*PEGfZuue zPWs9x*?E%7^gx7hI|rr-N<S-^+8${`JReuGB zxG>CR0l7Auz==qoSRH8XGUh}*)ML*2p|wGqSLXyxm#`zbxSw$9*^YFuz?Yew?gV_j zfJniPHf50pj7D*-b6j;9fXR)xDV@9=ZH-49S}F8b=_1?EQNl>#f&TX_;9C6)7O?hu zSbg+mEMSzKp1#`vmZ?iH6gF(=3U=8!r|8+mIfJj=j>iV;*75vt`Aj=)Cu*xX37M)c z)eBMLq1h@NYdWX8-O=5jFACfHlO_}LqH#;_)lauI`Kb2#opq%m`gB*yZc%TTKS`}7 zO#riZ`*k;J?^eEH#{SM>xH+m*yb49zcBoUw^zW>V*@ReEbsCOU;@Zq{6iG{~&XR>A zq5h7J(#owx?&aX9r#!<3q@Sn+V6yCM&PMz#EBLKS{_K^GRVW3zyXp04ns@kf7EhX| z4Y=67WYX)5d&~xK=DRoF``Noznu3|&s#|}HztLwLV)U}E(SsF%WUoO3s}`wm2@%_65_{G;}OP}WJeIJ76940FCee9kiDM` z7OfLrVPzy>%ekTbC>w2t>0VsO<4Nw9>-4inJ%Dg%I`%KZXszq|;_87E9`6(ldtjFx z16yZlvROMW>Kx`=e^^+Xe{J_=VnV({P7B@h5goMRV-jKgTW!FeUK7Arwyou?H(nFK zQ`O*I6L>7(^Jf>&o&n!P4_>6>`dEi7jNau!!JHA+F# zH|6VLt-}tKLtmO{&)0^G^Ojjh(^X*FmB#XB9@{%#+p15TKSpZ^IKfXS8Q%T+pnI-*mex_mBL% z%$S`)CtAFT%z1Km1zmP%r164)Z&Go9;r+<=Du*ae=o)=I4OYy1h2iWhE@&3(?c7f* zzeH;e)vJja53~cJIS=Y0w*!a3rY|dqs{(eb8xkeVv;fBfp6 z{p)&serC|XI15i0=tDX?lh4R8ipuqNjA2Uw2nK~XmEHdxlT(xX!9!f@Kq`AT9_Chd zX$|gDxGFhC^oV2R(CIE3CX>0cGDWXSXBQx+fSl2lJ1*(8&W7JO6Ae$<0A80#*$UY4#3eMcXr`6y9Vd=t7qS-v6)Z9~~s8Ra?GWKY{S|8sq5 z3wQ|3%yK2PUk9$Qbqe$_OGT=^8=P#Nt`wy{ z#MxT9R|P0Fx5unZmsF@f!y`he;*5(v3TA>C&8Wrdv4Sk+S9V0(HSzP^acz_!))B%7_cT{_Q|4|?7ylX%7e&Kq#W z8Gj34#-?RncNwaHjJz?|)4Z>F3|#m15nKZlei+3BUM%1Y3oQ70!V|5TB28dO z{-PIZm=S^vV05aisPZIdtZW1LI4R}sh#8by4A-AuL z9i3Qg$~ai*kCUXxWdi4{X#+NI_*#Hd&SY-fftSa&?-jeYH*!|^ho`inD<@ErV-u}% z=K*Wt)H?J`rf;%srn9o;f_RzjX=jI7XN<&Di7M3pcX_o6XW4VYYt)%3rSZ*EpZ_Fz zkMNiz8K|(Eel>GcCbFr>7E%gaEI?C_6n{&|hQ$hb)andre|*N-N-0Zu5pzRSr;euszO3 zzp^eJnhcSvWm`XA`_^^F!^zL)XiWz_@uM^!iI?exq#$iGat0`JYRU)jqer^Dv& zH|iNoR`ze1q?z8zUw{6Z-N2J4J|MMOiqHCO!y0iNr9FO&UDFNc#e2-9&DE^yLB3_O46lolrzfH zY)w!~c5O}jKh6YXRMH)a`nd|P z*ma>wOkTw2hGx}BWdAcq9k3;!Q#J;$>RD47w(67s+GZ^m<~pXhmN^V}S!T$E$-}b` zeJAZk?bt$~jx9S~fNaypf_8bB{O`8`uL{3X3m9GPfzAYe+XC+F!b@(7>Au72dZUhI zwp(j%(Ez)d*Inxi7qPR^0A*yaBrB~Gk3SuJvVXnN9`1IGu3bNcuQJ{nL|O8hUQO1O zvu1(vSYNE#^_*pV+$rc)4*PElP4Fbuo|=yqpS{&({MOU#sb4<=tJUDa%(iStK9!}^ ze};6T8t{(CCra*B@%Ouia`*GOxd0gaakpiNmuuCxp)69S%saww1b`dl`vGv@E&U}t zvyu{vwHkvk2u7?$-sp$y)V_Cm+(Q@&f6ZV6coeHwb9GRfCSj8|o@kDl5DbRD49fqz zkI~Dxp#LBXcnDmh6o$VVkRS9uy?BHPEdQoLq8;9>Om4tH;yAsIC_0H+TFE?Ywsy>O zQOf&l+v{NTl*gLt4b>Orm z$N2fv0&31UZHd!%!fUoT){|aOf7L(E@M*kqOcGD?Hy&=R;^hAFLtE)O{MwF3}nL&S;DK48|j>}ZXq8wF|=gIg3$It zS1Yk`%YjyGGRJmB@*~^pR`~VgbRDaHQhj8Or%z;T1s@}~B>#sj;BDcQ{^tOky1{Pm zNCvPHP6~=IG#@L>T^fibWL0QQaK)K&9P$Zt66r|OxX0a z56=zj?i4NmtLF+TilLL?BA*h5wx&NqU9)y2PrEX^4c`fU%K51d=&@4c`gP_3f8rDUVR_wPgJ@IMl-R2Z^=i*nU^^VfCtMup;OTcz^$0NIjy3%QY&M$kCQ&{ny;NHGSxp+=lY);SAwkON{j@s&+xQ8eoDzOcTMqyXhbq|ZJDKGzeA-S8cCu+>IG(pD` zMB=&B99~+YrxR7?Qp$q;MZ?@|yv$J;>cVAFiRMn#$d*t8|Yin7EvbNU#% z1>d_&UB-k$UzViP@LF-rhON?auuQKcCT8xViOsuO3%-+-@{`2^#tHp9@cS|CzyKJn zT+m6#LCbJiz_xxdfu4z2=MdP;eJoS>wAy+Lz!aea>qKGFX9eKIWt{=nJK&OnF=dwn z1Gg#barvd7c73)=p*GApC_7i$maAz4limO`?S(dW@ zCb5BeL$RM4@+v0WLFO{1j{&p(dIVuq{hHT(gwr9Zf}tD9wrqa$z zU7+k;zE5SsWXY{!EBu|ivw5{EsiJt$#CVez$>8ZgXAT@W5C=9QItfA#1M(6@L??=h zXp3mutpUZxpolnfsQ;?Jz1H4mRlS?nF~;w8zUtKZxHsMRyx-ZocI}D<{Jwk9xiA#BMI{#fV5GO*Sc7%iHHksE6En{Gc4d=R1+`&9t)V+njkD&z!VJNM^d4!0Q@x^y>C|5 zb7)3a`a*JbJ@U{d1~6sXfH`q2V2{8c4y&tC@g`Dp?quVLmWnk-tITdlT0k{+ZOv+C zPm&+m#I2FX%Hs{PM`ch)YuL0B%vK7J$L;LJ$X2f$PU>2*~n%v2j6gm6XKf4MaX%e9sCv*DFpjSzW=7ku2n5 z??Du$@+wclTdkcbKK(3^Sn6mP7Upy=oLJVpUr*~Ef{DzwXP2=T9hq;x^FvlrmowF1z_>lq@6b)mrXW3g&Bll{zwdbVXN=!Tvj@)^RalVU@Nzd z6!hCr)eVGac29;U&~5&fj<^(w!ZEI~ulGkwPDX1{{-3abQ`_k`ZUS(pC0bf)RW^Rd zsEiY19Y-i(S%&DEuW3wLW3qO9QlwsRDGvoF#%Y>7<_D=un{v|7$yk$(=zS)xYB!HG zruVd1QMJ%7Nk2T7X&Wu{)tokBR{fUIcKnU_o%%U5ho^9Sin zYs8wq9fl<>@O23nHSN7z($4HZL`@j+_7Cv3V1%Wurc(Q{oxTH!S;nvL?oV5>-%L*8 zkMskc7s@jL%iNtYEZYTriUs`TdN6(U5`z`-ErDh+I7Z<^zGS~HEEaJ6cf!PlwQp7& z7M62$`BGMHzXerD93Jhb>K*+iJM>L@v)lnh({;?Z;;XbwnpzJ*;Rlc5|HlKzNgSId zC$CwQ@-HK}q-z6{dntnG=%O=Zk2Zgn54hY3b?Dapv71o0X`qSC(}CHn?T$`w77uN3as*G?4?LIq_$cIc zA0XF67q$3f`_Kdg4LuwA{zTtpe~`OhZvHhns$&PpbS&=`tNe*x#tD6l$Cm(2&3$fg z=sh3YH8o?0&xd=yAL>ThPrvCi+xemgtJisg>fwKm1?;c~MK)YM0KaMj?)TO5K+~)D zfq1HwQUcs(hQR&Oi~k7_bEb&O%oVYLcf~RuR~DNczjq51+iF6#n~SFXa%qd%pcI7 zzLOZHcfU*0xEi8U3FKhy*XSe+g9&}2oMAZ;eS!h-)z$_KX)!5{mE_)Ng?I-NA&Jx= zt_4h0LAQiGK*zAeUSvSBAap$2G6%)q?wquSP>1zRVz`BJ7co%DEZi)b!Ml=(!$G`m z)n$Sj94KZg*G3(9Ls>k{Vj~MBf6v7|{NQbp>xdscz5sKDx1A!K3&L{8zbTPe(UN8V}vlhiBF6jtvqh3GKhE)PQA4wU3)FU@oe8Y%iNcH>S z2CQeaMN{UD-G4hSB%bw}#8khD>#wyVuQ)eD2}?tDc-uPm=N$jNkjHDwJt-ITp-DpJ z2ol_7M;~8}NNgKhn}Q|*R&@+xS294S>=A_ryhgAYyt4fW3wVjQ%44 zMyy^4;P(1BA9zSqh@IaIi~lETM$l-`Yr~JKDCk`6vSomfjVgifv|kvH=|~s|rd}H~ zqX$ma8me9PuXr^>a;7y#O8Tuenkqn?7)~$D^D4nq@;6aw`nGGa&XMb>m6msAq&^$W z?l`=UFqku$bi!_FkDc5j3r`lAezV+$-kbych(Bx#SiAn=+i*qBEorBgUpLgbZ^>Hc z(MBX>QL>|iF=zkB!HN*(81u2{ZLNahNCnZEh8LhuZyjh;MV{}7l& z)fGu&?u&Rbbmcv75X-Y55r>UmNL{C!C9xH*21!S|Rts}oWO7or z6eEQM;#<1~ECdgL>n}xTxkBn>6bY!^fUkc5qoIv*7V>3MXNKcE&%2yZQHgG2`%4x`>mEiI*qvxYO!~^ z`{XGSs~IaoGkM-b8}KO^XC0Si*^w0sH~>a6TQ~To-2ALL0G7DQJ%j~ll0dg7S|jy) zl)~q%KHqns>W|h>uz{c11XdF05O}eGIlzDJAM}VpU>I-oAIQMb^4Qm({O%9G`z^X3 zA#7o0BommrvWrUwFeLaI&Q>7WW~yXry2jcq)|@Gzrs*~y4pF%zTKC$zF2(BJl&_H6 zKh|w#46^*r^=ZYvt018b*ZPyMAYt*sL0F&p%)K>3-tHHRhe~sro1*(tyPyeu#-N43 z1Y$j=d_&E)B^r{`4*BctS@i6}O0EA5 z+SnTHdZ~@zMaJ=J0c$MJ*t1MNcF`)#`c>8~beugp;-9shhFeatJXRnY^eOy`nZgW~ zZvfx@V4WpQE?BhfU3ioWI^ufMHX&E=wQ1gdXeR}kF<^47zm5k8zK|ANQwY~y(E`pe z47J{Q`L6{qw-1100dvW%&JmcD#w=c$X2I{s7IDl;qpkCkj?Y9mO}C_>XF{ci;Wm?p ze@Z{YDpAx{vSRQ_uD0D9pt0wxe1PR>@70CN6YdWUQ&-%%I$>l1?;%FImzX1$?5g48}U?07_<2GP^3YT~8eB{9cQS>e2 z*Lsk2l4brz?vUiX@0`=oR-tv|T0LO5+!=5sZQY^Uf!Au=zgle;uvS`&yjDj+8^C6+ zX03>E?$%%p)(?a`HKp*5NCo|8bp0!HfiTl{4@3&P_6I0i6%fYogH)1SUu z9_I2o|L}+3{o&_+2!knnx2OwmzlAu)p7y`SXr2--XaQK+jR%fV@^QH1Z;aox0{hIh zock1%YqI@Z2g2^N&Q7^16)5+#FPtFg{z|x@2S8>g3figZU*ohox>u?!V24E)fZGCQ z9)-aB&?%wrQjGW)@;!;V!mUuWRRWJIU`s9!wiO;nzOw3o^gEJ>^8c;JK^AqTqX#fb zhoc$lX_7iu$E0+@m<~qEbKE1Yux1lqUM$)C@k=-><>(Xk5>GuvmzDlXI`KA-kWCEkyishm2V41zQ#$YY}3IJn3oWFu`K~upFmm&=!9syb|)_}tj zRYh6NDj34tU+d_W-@-#~6sL2v{9U^Vz>$G>vjObYj?2{lyDZ?^d2q|#kw)zP*Z=S_ z&+C#Fba<$>ICWYQO6Z3;rlz)LG)knt)1a!D=w)UmXMq?Z`FB2Fv{V6vqs)5L-4vd-`%STKb*LH zo!coK>-5g}Y|Q$%9srxb?VX-B;7ibZhlO+6{ACV+IlzMIlreRuCAbvSYVyjn(Tr{> zW35}7s5*3N3z%c)0A@KXV0G(VIs@DIWif!?Dh7YWHSpDxHHUxsSv#XaF%uRr^hLTm z(s01zh5iW^Ff#xi00)F)ENBrr=0{&JL_=kuMp#83>OYN>2YFn$X zLE!3l`xK)MGQz_eaiKlHVW}9(C=62bHc6rfsfmt`0#Mu1bKl(kT*(%FZW6m8IUkaD z%`xs29;GSlER;@-Y3q?+@*AAFosVH_XN{I&$Fj_lSYatOI_?ZE>{MPV#*@uDx|s z?^qDJ+4kyf)a7p+t5XNQ)U4dD91iB~Q(6J+_NdW^NB1oCSTKC;f9{nEwuEmDfbYh= zY{~SsRm*`KLGB7X@P)i8%Plv2&-q5OiaFZ#x#zNT=Vbu4+C`nCfpB0MEH|6~O%`wf z97q^kwaLDSf=+{9HxPTceQBPO222~gnwb4cmaM-_$zjEu=wrhtl!__X*ZQzO&DiXQ z=)vP*!Y@+eD95$1w)LKsuQ|fR?5}Cn-O*g`zbV6CS47^`RY9yOw-+{ z|Lc23cC}|zr-GFyUS5~~U5#OW;%K@R`B%%T;CgGM>b8IpKZMK6k6endETS(faTwSl z))6T>U~1uX^dRu%4pyoVt6Lg?%x}9?SRB4+$Jco`qyZ${Jp!7iGcc0-SZAaSSUa|W z0k5W-J8g6s!&t%MFU#}`{_`KPfkj^$fq(qov$23{k^t~ete;u;X#;-r&e34_Q@fqN z3wtM`z1A73UKT!=BcX1Tre$}s_kjEjNeA3 zv?BN%uSRJ;0QqX8-nTISE$=(arARx3inHg-Hq1F8158%;7?L^op=D7j%2TJ~u+bK% zhQQH*sOTKQf-j5mKI7Ui*Rs?j89Si{0H(}WJ}`?7Ecuhxk-4?6A)gAmJ}^hdU#_Qe zdGVgdm{Ug0z$#9Iuw%Tq!{LN;L-PbxRaIhXj#wLcjawWjcO@%_Ud^F|K1ag$I>5mJ z;6bBD32gyVxuCUX5_$#GSilrZr$g$>?aa{J}XdZ?zxO1a19pD@+ zCg1*y#IOZ78)=@s%3yW6TevoOo2y(Lw@#jyz|n5&=?;ff^ucJjJ8Elq{NwjuqP}S9 zU%Wrqif9^V5wl+-(zNb!4Dud+aXvbu<3H^Fxr1Nd2L93xGp?EhVaWn616U3r0UEgt z_zrk|a49qRvhZ2-J&a%~3}8oLMQ+cv#(BL5V$F_gtJ&z(A&%4>1fEEm+IcIQE<>!9 z(yHZ-z$_Cd4ObENuT*7f+V({*xH%XL7zD%M9xQ1Pui*$M3>pjgSLz8&Udqx>Yy*2_ z-~lkdUGR(a#~By2`TKkP&I-O#qc3E|7%TSHSPWOFQb8k{fW5&T4Sf;Ox~%trWp_Q2 z&YOQ_4`(-(dqv4cbt*T<^2i7LN&N~S`4-zrK5+HeaZ2a_VsV)$FHTQ10|kxzqeoBd zohWE|J?miUgSRh=pI;JyGu#l%+&oJNeCW+Tz+5G_Hgmt@)EaU#*MwNrZW2gxSZdln z^f(J83X+WF0%!8e#qRY`CqrM(S-NDX7~PZ7P8Zq2pN3&3M@ku+ahT0=EC{$^$EjHGk0kxHe_b3>h-JSb>XnPA10lK2^?IGxvfSICW&q1 zd&8#{S9zDJcy90BEZum#04&m}F+1L6N%`w?|`&RBM|pM4myrlMLU3# zy9&mVYOm7(`K?_%(!dwR0`5V9Ex;=R(<7MaSMc}T0_M-< zqjx4%A^P1r7{6jKhy}Z!Q)eVZ-(Xf0zWG@Bo*%0Nt|PG2DBINa5DMo3%OlQwVZ<_G zcjK>bIH6qoXoVTCP;zlTp(P{P=W6gp_g77m)3HPAI)Ryy?3Vx1{I4$@3^Jx5>^LOv zaBZ9#VZ1ob2T0uELY(EsjZd$9zXW{gRoWYCi3`@e=dA3PZp6OaLo@anE8#aF40EGU zcY+xcNA*(jdig}~DGhELpI&A)-YJ&pWtD*nJUMQ0>20vJnXz$}8Nqk(Tijz3f!P}u zQ2=}g_CDZup`XKH0Ur={K8|z87-`00a$i0xhNaJxS?S%07mC7==%j z?4lOGt14dUeA1qNi<{=K&xQ5}yi7$Dk{cvFspYEK$?sPU!S38}>V7dN0DQrP6}ue% zCVclK#P6aeGF~C*3>ipSuoaAV`MA+MuCiS+Y}4;(+IFe$ffZv$BXjaPV3X`wvKh=y zY!nW;`ob0l%WBSc&)*=IeZRv?o4d^)a$Dhywx69NkxlHwhU}?UXTaV^4gL%wzuEvbE**pjIG14mlI1pX|{0fQz{F)YU zoX#%*aI;seQ6UL1%1o^YDrUnMhKjk(j~=48<_yy(zAY&!`lWS(i)Gb@tkVoKqYYD{ z&d#6yQX0rkCa^I)?Z{~uUeSzn)Cnzgu9)jC&)Y ztLgp6dM9>XK6-n+(acC=_jd32d_@**ZlQTs91Hkp?!`@P3z$%>)dKbp;gaPJfmkAK z8h{b|1}id(KWb;Q!EOYnl{ni^DJd0mElk7Yv<<&6fPpU(g|TaU+(Fuala-QMCQFUP z1z-!*T7zIF)^bF1yFOz4KBuJEEW}_)e}ub2Fxx8qT)GBe{(FB_@J0H)5(&)=h=0lu z{om>~UiEpos=P~R(o3?^p!(vRIcNgLGi=b!hQrbUQ3Eyl{tb=2&W@FX5g%*2*-D`G z3TkyH9`AE;znMPvcG1b1Sf`U7pG&8o;`)|Sr`=XMhnHZl?g_wRbLsZ!F<<)%^F0=@ z#qo8xU}au93&J{_#-3ZQabvF|r#hV^2xhH{VXH52yVVTLqA955PMSM##r20>o<9m^ zayLL($^hN}s0^$=(O3sl)v(lmdu9kiWLI<&5#CElDQ6pH|s{CSa@=mWw)#&414Zu~;!G93I zHh?|79)N4QyaB*&oQ*#>gNUW!f?_*P**1kJtwYm`!wSn&M(}Cx%@657rG~f~cL^G3 zCGFPq4rC+t*m`ABBlMQcYJQB8hPulOgk-1%a2Jt@7L(V?^OWtrn`rT*#q@ENb5M(K zh|(cH{%7O2IXb?DhA#iy3Ah@CzsSu+T6dJ8(!t3%MQnQefo=nq9ZZGRcO=LQfKB1z z?b~k;e_2sus0PDKp3SgIH;XFYM8PpErTkC|vlJ1xz|h=@$}hz`F&k!5aAA^i!oo>Xr`5 z!1qyg2>zOrO=8@#;P};$z|*>`EQ%uWmrdORnn||7Ik=c#7P0I^6ER({S;Wvcl2sax zC)>t;$E%ptlLE6l9Yy{?-8}ZmrZz7=OGq##9sFi=pZZ+76AK0 zNtbc(w;yG#)BG!F_ki;epp}Q2X$s9?JD)weaZFq$1vXEWOlEgA5@(s#Vc4dr!3XTA zV{19f9#{Hs9`hsN)!|9wESnG%O8y5ferZ`Q)TM7_{&-5M8ZTRCd8X>Nh6N<>i4~%? z-5HcwR-f28fFotRGJ-RL%Puq0;(YZ;VwvC)BRY}HLsvHQ$0?c!ud%EpV>cg^Tg)}$ z?=I8rM*iMqwlA6a6#@KG12}pKfYFT>@EB+cjcbA$0drE}mdOL2yY?T_#2w%dTg zY&n@)P*6XFOW0c&W>vtI1zh}PQH2pq$*$$8cg4G>nZ-P+%*U$!DJ zn;R@(sW5!B0oN-0rK6IjX$GERQd80<+>%F{?!ZU@2Dnrl$jJo;uv@5zqLSVn{AR;Bd6fJtIPy0tLfQ*0)K2h~n{ywfm#<|% z^;ZkisNSNYhe%LGbrov+SEtt@Cfg&vrFNFlU`i?}vT8hYiN~U*8@1+<&WH`$Kc2t9 z-l|SwTa*QS&{iJo_|XRA|G2Zc(e_!kSMI|9)EYD!m9Y_ zF$m8Aobz>G1z*Pk_IJ)FTN*+2s>5D`H!`}{W>2#vw(7WvSvrc}2gYvX1nRQVDG46rF`OjO84}@|lIQ#e z1-=c?xX)ZV35RUjr4H^V^2z@p3}u_EDsH0=N*Od_c3qxYzeLQ_WBek@t!+F9uJ2F0 zf0|D}==(t@L@)6SY3tuH(7X=dI|JZK!(j-Evc@lKCU%8g19rlZ0iJAOREIed1j5=d z_@h}3fW_b#!8ZaJ_?oeu)JhG(OFj;Nn)@NS5Gf)nawyhwu^C|iKZn1qI;6pnXaxRc z8Nk2rL~kU!pnptk^lvvke5XvTuVV$v<6K!Kt5~*s#5$CkjDxYTBYzXq?EcU z#}lnAb#-dcyF-R0P~-fZ0@{U3sdooe+w5@g*Il9dwk z1ixzgHNY&xw{^1xY>TrX$SgZp6`K@B8G6e7Yy&t1P7v1Zb69dTCned&n7C%KJ||zb zKg~CwbPiy_?WH6|KJirqv4N-bIsiu3+kkUVjR%})U$Zy)Bs<{NyU6Q4EB5C46PmNw z*g?X|vt6nJpDsMCLp#oznP$ z*-(_}NpX0Ld}OARIk`t*s7_NWMdUcbe7|6~>vFr6t^J&M3uT~@!&9UPtPzx@N_Oz@ zx0-wfV15_EFuR4+A}`1k=N^Fr%5)-2OkC`z$_<*=Tn;pcAk)m?OyYeHa-3c>b5GcGXrm8+TM$3^G@tBKsX(c+HpGX*-0A2Xd;FR?=Wz{gYykTQT&K&LKRGx0>9Bx3 zet^J1g_2U0mNww@YR#)FmsmT1YrF)*bvpLS?9HeOVKCyD^>Jx~?4y{)fUHTkH?*Kv_UNHNv3L41+6 zjM}oVvajZl2g<_zBA+Zyn1#8G{5b&=?tf`W89pD(+|wwBYu2!Yz zCTx@xn5a8H6@did;}x1uZ(biyl7?~Ot>E#Mpz9ziL#O%MrklG8;W<7G!`amN&3IYR zCJ!@JBlkU`A=m|}_Dw>y>}uEO6k(ZM>i8>(sz5g6?$%+Ndfiirot~oZEU{8_i3at7 zBW}`1s7nZzjg@||C)ab8yA=w;mQHdmiEy=4Ac!YHyn$M5(*}HJUSkWu1U_3Lpje5j*aR*F2Ej*vAQpS3QEl4< z)>5#==w*>9OvxbLxyy3yg+2o?i)H3=`xx6o?*MrG(Q!e0_96pV0Peh5&*jnXj}oKb zgTK#y`Aqh&r=Ou8*HYR6oV1ek=w-lJiGkjGG`tA@SO@50MNWMjtHnmOs+ZJTCcdCtGJ|J8Bb&nwhNjc z@PG$kbgWb?;EQ?rzF%clBgsOE1-C!Mr zQJs^lpiRw)!D;fEwpOQ8)kFAuJK?`4E z0pFzL?097hSlE6&3)osyL2m%wP+rcCCS--K2U}e*d?$ane!g9ss3(8E zjb{o>*Ol((8XJTMaY-JPp*7b8lN)l=)+*z&4(~&XbU&w7qOcm(D*;i;VQ#;<&KGss zt6=nCF!QJ#*TZ&S>&r9Fesn)-SI)#h^CGGq1gL6d085t!u-59`E(;g{%LhGHEA}e@ zrZg#+Wrmu8^6fGkzz-}_m}3VY9RMwY*KN3;D?;C0@V52C8e9;)ap+0`SoQ@cFUAHy&M3*{JXjmWEFJdt=1S5r5bU#xuPoBm2RIyM<(uy$ z-{Y-(Bu;Cj19D4m2DI+ggfU!%JYQ2Df#a!%zZDe5PzaSPLj8cJ?@?hwzAXV*J%%2k z0C*Zw^KQ<@*5Y*lD{?u!HG#ox%|%UQwo>dJ?JG-`-Ee@p^iZm+bQ(v-#qL|z&8iX+ z@f;6xoX1A^k!eU*Z;5c{&6{GUE;z<2I#qzx$I*Bgi@gP5^Y)}T=XO8EB;cOzc}!mxt!~ua&dG6{B@PCh`fIcTmN#1n#~b*+R{AUJk+ z0B8l2gV>Hb>&j6 z`gKH;wj*7{k^wJPum7a;Oq$BN&j(gdjnz?v9LZa+(aZYM0KVirjen%y*Mm!YoeRGR zB!XTqY2Ag+0vg3`17>ajxA`lHx*hurdXHGFkKCm3RqKNVWMt2EO~yZ;u0<3UZ{hDu zUupafhHa?BXxqU|lI&n+M|4Ftlizy}8@NKRWCkM>SdG9xF8oGM+W6J@c28NiX#Wg@ z*+rC=+6ApgZmN~A=_?eS4VSR@7P7w?!X7%eh4FAp0qyj8vfNa?e}v6yzSntNmUKiD zntiOl?C3ILsgEA-kJ+Ki)EiI#(Cxk;hC*StlQ}goz9ah5YbeH?$>rJTLe#s}XODs| z@f84UO%&wLX4PE2QF43--8Hw}yPf8c=+2du5%=5jM)#3|xe)6KZ0_c|36W;)?#Hh1 zYxt>+&l-)})-4@~P$9R6iBcY`%b&!oGB z+b95z{IO>)XsK?r`eGMtbdO()3)*j&vhNBU(uo*mGkBa;0&v`B7S|7c>xDTM@B})4RTOuIt4>VW z4rcbpi~LpUMhVOcf>FUT5N4Oz0|mEDn=6itd6Uc_QE6%I)pLBolvEr_?OZ^1Qj)fE zMASBMZXbV1hNR<7?!QT@@sTxi2|A1bRmTAxWj{$MlZbM4E$^Cv3B%IW0_HYUbTk$O zwgo&s-C%%+b6N@)u{6Vcco}h|Z*aG0HazHg3 z?wWRBWEZrWfQ4Z`%a?w(?b&`8uzkynSQUS3;b^m0vXNX)XyA(j+U>yLw@qM(``e#O zGeGdSG~&Y0cP!na(^F|s)toKu#%;r_gP*R@5uu!H&x2oPDkC45J;O1bg(7Z>c8~U^ z`9i*-b%pd15uc#i`E)Z`4y}^2Co_NP%WpjW@>N;>$Fun9Prv(z&;8+Z?|$cz9&1^^ z@rr36EdSVHrIm+r@!B4VbvhJSYki1)aOE&=mNGvYmUd$>Yl|w%oTu4xE3fxiEMFIK zsWoYwog~`mMRCAQ^P5K`SD=Q6J5va!>cwIuQlQ)x2YbU$1w>hF^S35j$SL32s`gK^ zQpuS(te3f`G+(4R8~Lr3!C6=)Flf?X>9^ge@sOzPYc^9^-ZRk~OtuEy(jVnIBPd_|JA?JeE1>eBo+4YoCI`plE-s}zYhF^B zn!j8-PhSs2q9r!17&^>#yKdK@fOO7gvboFW`?NkVTU#Vaf>knj+kAFi-@Oh{TUY4) zL(SUcYHL`eF zqAl+E26mdorfmQ`N|;p|fLnG;CvDKo$Rsw}Q62v~E#P>TZ;pd*jIvPoQoZ_c!0oL5 zy8*mW`_{u`6h`g=-#?A+V1rD)Wab#|^)t~ex#@Z{9%$VRx-eUfXEvQRZNcx}4{)4S z$^1xFJBfqghdX>bVr=}t_q-QVmQ{y3d3Vh44)1VM^HTkecdOLZ52I6_0G1c}q{G`y zw|DwRGw5-=&JGrfr@(H18@bGf5sc=ioph5#JjgtLaHlO`&LZgs>jLoQM+?B0cg)+4 znQ~lI54#KRijCa}+-aHF8}@2#{2Gj|F0rX8iVHd#S9Fz3UlAC)cep!{wl&P!pJeYd z3*#EiW#b_4W@5Rc(O{TZELp%J@ZyLTu}MV9{KxnH^xm`gAaGg0EM@bK1x(TNx1KyH z(0EwEH`)*$)*4aP5ZHjVrQ4_VmTp4ygdy$eNofF2 zuvC0bopEpLK5w$v3g+;%fHga#f#V~$EH`O$G-{$gvYdWH2WHK`&(^a=70bBU78`hy z3N@flOddm3)~^0$HBIenqj2K6iAhHeBEd#O7bbzJm&o9|*PQn(I& z2ScmU$GEWtiYeYMrp_<2u1-AF;qcH0bp6c4^{v_U~GN6pe++|;-F*~ z6ZYhWS7h|s#Ow>anh2-@wfZFm!7l-Df27vts3+Hnz!Qd*cxdt70nl1;p)c*8z7rKK z^1cOy-4M)~n!Bs;IHEbXp#Do#0Ji82tU(Ejy1ykCbok56=)a$e#bg`076AkSv z8A9TU4}9u;u*glo=*i~@M|<~Oa#|fNKjN>(#P4p7JfzUbL0Au$WN%^|1YV<{4?Egf z9i56YCgJ$G&|=O8wAzLKvnL%vRUvIu`)!5{y3N-69TM%i6K&m73+@DiH;I#hvQ3BS z+&Knr4`82Omvy!OZVh7{a<#pi>zMvNZYSmq#^e=bQHI->I1lBI#;S(gz5Xi}6vwr^ zYG7SfZJ}{a4S+K$fB1b@v*g@cT$g>Dz$4XJ&Kh!h4GUQOwZ$tZGGg-&bp!sV0a!<7 zX9w_w)diddaG9zA7`esQu~UF|IEbbn zkR8A*wW3+pXET@FH^{RGZ9v8_%emZ2Yyyu3%&I=Oz0f|Wb9{p4p>LsH*024_c0se) zM2D&V!t9B`US-fEYm8vS9Sc|k68@=7U;z9JC&Vi9$^~tiz%~5-ch&v3RyK8+r}MAW ztld#sRROGx*!DIXgrmKqkRTdkS?bbb%k=EsK7pBOY~gewrsk=&JFus0%I9?C(IdXp zA>CJne0Y=8s`5lXAu#RJpZnZ92Cx?RhrWs~klK@O=}Eb-WR%GT{l$x7H48iE&wj($ z{eVYHt5n7oY(Y>D$#22S(nG5mETfwhI_o#AHCOk3`dZ+u)&&L5bTLY{4$$7ts!8>u zXIk6Ds^;%N9hz2Lr`ogf7X|HxZWp?;Z*};ewGGi!7^|6sJ}F8RRl4w6F?Cnf2TXNN zTPqr<6uNqsb3(^fuKXREthyrT|1k3hUdI9s3IVXESGItoe=2}?3s}Dc6EilW(~kF| z9n9o3W^4)2g38Q!SB+Wa7Jlkwx`Y9?nbZ- z=V0e@hV$}ve%9V))gg}lfsX}j^u_|V3)=qY=AF>{;8N2aTc?KZ=Vxmsiq~T~7tUm$ z8okIQz6rnqY;s2f-We~L-4M7AjuBiRqK#n6ge_a&ShJXly5rK@pZ)w>HIGbU)Br}b z1b1hr?_mI&!0*WkE&kdC{c|i}4~yibnt(wsdg2WPjtwlXZR6)(O(se&9PO6kE#rl? z5;*;YtPF)z>O-RJP`T>y5>G^xHG}piN3;-J-(~80lGH$qI?+eYU|rsI%wI=ATS4&X zoug|$Ol@^QM`8HHqG4X@shv&_C-_^eUWPP_5X3dJ%$?McT%)u9;i$r4+6_b~tCSF6puDVHlOazW+SlcbGKQ?$B6^B)40K zT-gzA`^3s$l^w>Qun&o)*HmbSO`!{wGNUT1`R)a9l57YTF~mT1Qo z>-zT0YNrqJh=usY$r1*;BSq^+p$(>!Zcjlv(Aqc0lQvQ=n=)}^G zZtqja<6{H3hRyGz*t_ue&SC+-%~*o~Sgsiu3NUSe!d{Kh&xR&rhd>#;Y$X8^ii*88 z7m`_o$LXGA19;ZECQVkPn@&nfCK`kXygL3B6I46?Ec?S{+CpxN`jJiLx1q3FjP-8N zp6K2TmOJN1kI7FXFbIBD7BI2}tnq*;41(!|^sP6)SwkMx^68k09TN?#5(GUNH=asO z%5E$EzI7EX-GnT8p50F3Fk}YBBs`r(bTtDq=14IxzsVE#QmO0GL148cRWKz!z~rXHac#pqHOQ)=RTgx(Uf> zt)k^j9PC$(D?LPE^HibIQU(`nXCEt@xk~MvcI6@QILP%qbQNs1I!fe1ssm}6lgZlg ztomc=j3lP0OrQxaW0!dp7N;3&1+>7*#LRS!Yz=561NIt#uW1XxI=6tSEB4++^|3E< zK@UASehy%9_gdaQtLR+Irq>1V-2p8zQg`o8Kj5>-tk(hXj@j+N-w)sb~{Nl$})@ptEHQ${d*o;~5a5^UF>9+3}%hzqdJoZOl3O|0ey;Y=! zms@hUIG`rmz&wa7CZRs&Fkz>+k@qeCc`4FD&s`aDL6f(V8s7ZTthoWVVP=u1nOO&- z{zH?oYEXt&v#(BIp7Dy9I?3coPyU3Dpd_?<5qCF-TMS^!JTextYPr`=rvr>0&sOiD(#4D2)`V_H{SU*06Z?}Bh=`8 zIGzbSoL=5q3qk^%>1rRfz}>Uc-Aw-;$6|T*4Qjh`w;Pd#O60ZP3XP+C9XUMlVJ4t{ zn@ukTOVc(|(@Br3+gHmm{selNS=kMZ3coC^>I3}E zZ$5ph4oDskiCG#8*J|JLxSDN;HdvD!OET+b$8x!5wD&#op<(OpqAr&;q@0`dWc3$m zd%929t?#}4xxW(M_v$gs=ChtYCFtya2t!fNYp~|GNv3`i=jgNnpUNH9KuyRbZx!Gp#R_`)kMy%Qmy+uL0XbX6fXt+g}>u*5&p6iSR!Nw^T&W5|Y^=nNCR{NL}SS(Rzsj%?3bTIcN z0FDO0Nods-gI2Fz2+QQ4>^L#k_BN+A%->J15Cx4K{|tift|zKahh7K3t=9qYy+j!A zqXbDs&Gb?mukl#6joz_*YwGxEw>xOFtB%`PL`h1SPUxNawD{YOVI7l?8@@8DsMgVw zLiq002lWp){A<(Fp-rmRch4%yZnQSNq@>zNUtXHcj%fRmWB0D%%+26b^`;B7vio8t z3M}2cYw|J=awm;>Z!{GD09Z9;^v5Y3VI=nhOj;9tUB@?lBt56qB+;CIxSu%5zS#`|eIS6QLk#|){g z@jt`e+E~Z2pcL$lRGBgG>j;qD{KIZb-h1l$F53rOO#+TZzDvZ>`OrjK_s#N7;l^hE zp;v0?#_irX8E;js!n|WZ6@jaBPfQ{XC8SU)*c0+^n;&Qov75)SgFjl3tFD>o&;Xbj zbs2fM{nYD_@doAFe`LwWAMTt0b3LyF+zw%EQDYaB6(>E%}lHaB`XxNFl<7UAS94j zMJ)J}`R+OQ_Nkud@z^9G;dFO(b@h+;#-2CdySHxL8t<|`Lno7hQiFYw4{Ak++fYyd z_8Dy4TEXxJU^;<;A+)8?!di6XD$vXA=+1;bHTqcHFz#m=v9>WC9yOCBX&upMfl??t zV~|*Ek!qDVtIeE6pjMK{Sxog?5r0i)1DI;xGZQNoehIVsm_wwaD76e#guB0;2b(M`> zxs#`CSNQ~fP^*@8ECTo2Mph@7KCc7ix{4-k!t&k%a6HynGaTC`p!YO63_7$d9_y1f zMlyJ4?gykgw3?=Rd>wJN0UQaoG%G*+>Cx;$5sfzh*wX>_Fr-DBd20w)<;4Ito>dB< z-Ryndn6J56uMS|*m+eaca7(iWzXE`BCIC)=Ph=u=tABmMtNPT%nS2uB3=n5^fxt~m zP&TCd#snPbX=sKahk(i_z0WIYP};G5qD5a4*=#O$53zwZz?~mN)%*a;s%qs;M{a4- z#N}IVGAD7=7KTkXHYi-6-O#cm=+)XnKESC3Q>lh=c-Yf2ESc>>i128f+^!!m+dm75BJx|oC;YM`FH zu&oJ9q0t(oBT6+#o)(7v1Z0(Zl9zs7vIw$slV4Vs*(7j}ovzA2(0+-Uwl@lsM;#mM z-4#A9qc(0w@jSQDqo~fC01Scex$)l7W#Z~RXi8VBEZ~#ycW(j5M4uDU?JIZOB%X3J zf6crjFL6WgCIH`kr6A~=E#N!X132^S1aR@F2!8IC^-v;xl1@y{A<&@93nv|Hamp>3 zs!!)xPgy7WetIWNe9CIq6Ht4y{Q*ffN8wi?Q%O6C@hbQtPMNDos5KP_VRSW+=09S zu+BWN`Aae182|L~pFm{c77C;80;UD{3c(MkOx&|0kH;Y`&uwyX7{4}zA7IwbnF6lR z>v$>i7tMXu{VMDxUDfb-8Hd#HE%7QtWRWAgUrgst~ZW>oRstZQIakN3cgabW6tjbgjr@T#uaoXkh_jDb7QwDy9d z(v^aQG#ATT)g7u#4|E4zw^WUTK)X6Vc1q9iE0!6Q6-yk=yE16&K|Mx+hIV6dy5qE* zz|)W5vG5m-%Q@rp=Ch=;BX$024*mdG@TI^7eP=A-KN03kr2!lZSgNr|+|kJ*XRwZJ z&#DTtJ!{gR+1MwYmQEm`HcAb|dcH!HB-G#}Mfd*>h8=;$3Tl73nZV!6h~Rmqz6-%V{Z??3((3z+S1Lts|Th$JVpT+*b#vH^Vg4E`ce zThKbQL^u(+iQLE&kTd;|B#V^GEYVm5uA?NE^b)SFmaUcGucry1g1$}QLa6A8p4P(q z@r|*lH9T2CS(7-rEzHhsZ3)*aSV8vNGMl8bqK$L%_%m#7Xvl%tGh z7?J^Ogu$|WME1hdewPV~`gJ0i) zk`;588;DwQe52oV;nmfCc>fI2Sn^ie$|J=@17U8_A2IpOI_Hr#dHGm2!-Z<*Vwfnd zV+;5sS^%7>0sBl`Y60spfHe$>BG)V~=zE-Dzz=MZVUyVDRR*W{JMmVb@Kp?7f#i$)C9inYQV>#YwZ+EJxil&8BXZ8Rc85ovUk5gR0eg z+jHY(ZS=S7P({GBA|5Eo;oQc@7P zEElvv&AND>UHZT|D$@sS0KdT_o56BH4}wElX&!l{S@_N2?;~vBdi=kC@w=Lm@SnwA zWCH&M{oQjDR(32@892aib?shUT$B}DZd(>ktk$Z0(%aISXk;A_*3^4+)XO^~clX`9 z$0@PUhph?DqB@2$hn*FRmsm#-&vQ)u^H#@2w{0%)v!{{4!cXf5QoAq}~KiZY=r^ zf-)zn)B}#J4wR-67T=$~?l_!XNHY^s!;b>(>s;B5mKkjM)a+%oa36)kX?k~Xj1>fy zCKS}b9|E_R?-;;x29E9ze*@so2Yj;!+7|3R_W|FVrz|J&K3iZbF6aRG+83B36ZVMK z(J_TtSMJ@6$rqoz5w7>X2ms%`7QmS@H+$p*v!Hur4JoQKetgf>!PT^7=UCu|k{;Xm zM1tCh@Fn83d7BL57L|mBIh@}<-Gf(;I&PBB;H3;CB7&NIf}d=K2cmwDz0APq#U-zT z^$5M}XO0Ib%TK{iL#0!XphmjC4JZ728$HN-%h04MO2jKyDc(vi@JgW)gI zybFl-+W@q7j5^|k$Xm39ud#r?17`tn;-ree1!Y>{IJ~lds00zFi;#DqpVD(t~6?Dz^ zXCYVsMl~T4sVGg~ZBD|jbf55>=*cBw81TijCz|!w66h$pTXqP1Z71zynrhM-!E$F? z<|PCM?-`_fl&>=C6qHe270pz?4i^i`jaq3?%m8HF&zn??7jL3q%w$JzU!FZSh?5I zn59Ek>d3HlLq-(MMB^Rooj(A&&j-}JxYKxoORTABcnE;rYo4(G0hdWr=MV1W4Zq@kWxyA)2aX!OeoU!-xstxArbyyYTDn84) zHvBpI#^(j_&3Ap-7H|`-!<7ULwq%E1c5A1n%v6^ChSd~{I9FwUOMK7p#iY}Ls}=|K zsoZ`m4jYGi2>Z!=?*m#?R9Ir5Z_Ci(svqmB1*<#sJ|>0h;+Rh*_+7;vLG?P`iBl8~ zgYMMp3LfeF?L2Yyzq@P_XNu42^6h*YCUAEGBLJJ<+1{7&T4#VL|7K<6assHDzj&C( z0;Ug`CfekKwh@ec+OVC8{$`>;wJ2Go`AdQRL|gD{!NW-n88cW5hAf(^17KsbwR2>T zs;cYQ&Bpr6&P*NKmNRG`((d&KCVDWv4uGl&k#Im)KQOV-#9~zxR?W;0bpbHkW!D~Q z@mHgcGI?&#$gr{Tsn<(s-#M#+J<(XOZLKDXT3oEu7XXYvbH54cy24z;ealo?59<|3 zi=vyanxRm>g*%W8Z_e+LK5wYbG4R(+)?|d5l!0#?XXpOGVQusF1<8~*50cp>7nS`{ z0QlkNf^NKUM#Fz3L(88)-;7STnPG(9miX?V=Hjm$!7SglO-y4(Ic77aBjXe0T4emn zSCz3=j%lG{r1sqo>0@)ev$OefCF<61tyUY8BCOLt_tTLWeBugz=tY??Au`o=qmB!zx+3E&iu< zgpn-z0`IK(Vrz(=YVpr4;+n7Hb3WvCRH$p&J;LK4sI5qA2XucxIMi}7b7;ppcG4>Y z81&vgxkLFt69Nmt;_C!qRhU%?LKS=+=M2pZ+ge?v!h&47S>$a3(=ZaChr~VRN9-NS z3XGs|wg&I-uLNVsST!*{x=5r0Pu)!~`0$YI@^)M;%7xin-cq@>*6NfmVYc>WY zqf{JLJDtT{01TFq#vgU+jZ0^r)KQi2wRGN+oqVJTzEZ)8C`7`DCcB2iMl?OR*0dVH z?&8fux~o_>Z!;7^ZP~P$_km;68Q=7@Lg2@Gj%|8Gm1}EU)qDKRK`sRL7JYjXy_**q zFTf-xgkjxp0E>R&j`?T+kK%dij?lQEx39R|Uui!Yuf@UvYyhc9sS#|>CBg3O)I16O zP5=Ecj}2EyoZ*r7i;ZX_LA@`6PVK{HjjI3UG?2ENLVgtcl=H!j-4h9VWJ zX2!p^bhBm)g|UEH8o@f#a9(ZTWV7>sKZLb!5FN|hZ$QtA<(K0fK3Du*0CdF0UsV}DC__ju?zANO%&4hCrx%? z%wm0GW=jqr@9dmTuTcy3veF)6s$1z|@}uCkGw(MSH+>+(`; znoMcTbDfWOTx|W9OSyL)1|6$F2~BoUq+M3K&6gt!m?x|Xe|Iiu$93Ke;1eudO)j_* zJB(Ejmhg-8=jgQoToWK|={l&qAP8#-)rtZ9YWms&*uiyDk!(H!RRn~!aah!?wR8n_ zM+0Dk;5uUCl66W3L-(OdfmjvE`v#Z$ZaunbqN`}rHyMEPXJqED9#ny0({+hu7RoZOg1MwyCRUF*5h}l`00CF zBJVYb7xj4G?Nac{O55&i0}XWBr=pS7#wrF!dGDjQqaQxZHb&hxQ}up}bK4ITWyIDme3eH@ZKZwXvLdXcoS$ zNC`XbP^~!sZZdpi+^#Xog0Hd5HtdCj?v@RDyS@)OR*f5F zu*!hegO!g>HQSTx03#QAv{O@}s@1XtIA=nThl! zm(jZcm}v-~z4r|ET4o{{DJ|T#!{5iF88DPMtT|!L-aKVNoE=z)&!M(EWEa(Sx%NZe zMy&($_E0--CA&?szImlGnw!5+*9&W@fy^i*E$7wydvV6U!kd7`JdwoFjxq*A6X7vQ zVW~S>6Z5yM!U3=;Y?tn^%ucY(lZ}#o@~{K2?&p{|EK}bMoxtda(oB@!_%%xv8O_E~ zHO#1rL2{jSrRvm%yNeP?8S@nNYz-4C-J6`~sBav?A5L>bWqN;GdLM$YOpSSy_My?> zX<-jGM)Zf-CB=?dbsB}g*XWf13|*mb1ws3CEMN-&qndxHQ(>xa__aLHcJ)nytQEW# zubqhG$ZY#R1@O#)-yAjdm?^ae@P;*;J& zhaEycFXi3LBBC9yNs;dZk>9z?M(p1BrRpDrqIRI3nmKD;8oYD)*8b2#91~xryUbw8 z6Do|;xf;@Ud|!*vI~?|pAIs5b?oP-8R26`UbABWM+Xel|&@*`5 z{i_%(9kvB57}<(6fL*Gh(g0?6JPaw~B735Tmv$64V(S%_ISM%zbfweXjTd4Y5f#b&5`dIzSNh~r~Q^f$*tib4>fBWG54?cMF&Ci}c|A2kb7m2{o z$lbqZj|EFbVMT`P;(nf-kB>b@cP4O%wYzlg`iaZDMy-Bg16>%VnC{&!;4eC-W)+ax z>J|?R7GI0_!nbj&fkqU1<0bpmjelOC_WB8{|NG7Np%M{K23#{FpEMvO@SQd@(8*-W z!_^uKShevZOOw}$^V{SsY8rxBZOD4A1X0srSKK3*(_+f{n4KWqCaM-Yt4(JCx@S%E z(#V~0x*>4XCbRGL=w6CSJY2HAY3L@3L zsOC0c+~Kq*tuQu9@8L}V{)Pbzf$>=Dw2KfG1Q#OjCNGf6R|oJnWi^|`QR;dh#{y>3 z{|LZ0&qip#z7)WB2Ee=NkIdb8CB)5x$_csRNc6KhadVDP;N(OXT9F;t_s6O0k5-*i zmDWJ=ly<3am)y{l>?!@j+^9cD3Hi59hqZc?aeg%^))v!W6(@<~aXey8OS{8wT{|a)v4#M)KS2gE;IRcpLJpJ9M!q%^lIs=6*9kB+# z1NPc+%2JzeM{!^G+b;aF{>evu^5Zu?)(rn#W+1~~{z(7oN5A^$Bd}X@|1$mlb0Ey_ zz2ff^=XWlt|Ce3MOa+fNhQ}&x%*Gu|ii{#~JAOxoaNNV;Z@H8$E>G_)87d)pZ8n~H zv`yid$aNx<1Y6>MU1kq=+q{=N-S@eiK5bf|G=BE8NmzJWESOp|GuGw@HGrE~#}u*!Ji1?p2br;$q3b-ph_XYf%vlv&YVJyNQWr$8Sa~QKbV^Ohdx+7A-5TFy>&7*GuRWNvun#& zGL>_@jz~gB?2U1JGk}2xJ-`OAb8=WKQOi6A(;YS{ll9dt;N7bR!J+WA0ETs1zEA|O zY<+zIBg%SDHv$+I2&;#lCo-bG+LyPh3<(97n1M96;u@Lzoc~#tX`p=Dzdef=TE&4P zlOi{%Re+{jhl^g-C27kLk8o^tm0_02fpR{k0~)Qz8gKd-Sq zt4Cv@L*BLQ@XCzyXT9~^X0IWeROhS)us&!8F#O#t;PN}m07f=(>&7=$0JC$tNg%AX z@HG?g!pEU)Rhq4FN1MY!ul2Fc^+djG69^spq6M-gU|iO&&Dg+qlHbH&11<;REym%^uRPN%N+3!1^S`0ETF5pH9h7+UAd+GpI^ zw$A+p0VwNZQXV0EpoI$ctrtD>vOe)m9Nr(P0qx(hWhvR~t zaR$l#IBAW2fi?4nQlxt}p~mC?H5-$zYTB#XHZhysy;bH}0X4TrVen4F_i%e$g`L5m zKkd7|q^nZ|$C&p?8mzEc>f6|RcxKD~Lfb-UjmvTAYW&gBvH6Q$wGUYFRqSyzE5^!{ z+yfW{-$Tig%fXPEqn87Cf%!f)R!VeDu1V?c*9yRHz0m^p+*Xc|W6v_;49zl9S^5iY z0-Iy~3E)*wwmdndk4S=lt| zh+Rekt8%jY%oKD3VB(%RZVMR9a?70+z?21GA-MKi5EdJ@U|GO1d0ntbni!KNubjOlgCPY{q*M`tWtnoJOgAbnT(Kayk`yp9srxC3ESvCU=@>!%J!=iYnRrUDu}}l zV@%-m{YY=3@ix^^xS!6!q^rC#2-p?idySuYudTT);$)|klJH8e<+Ez9?T77_+tb!= zzbnn`^7Bav+-x@cFIWA6ZFh5^>r%QNz`@+B0=U?5PXKlztj>RRYY*U)d!>Y?G=GEB z=or9=H(^uPn-%(U#Y<-e{2v1t-2h+|0O!mK;7Wng_U_3F;0}n`=g43;BVgMV(o{Pg z{La_Fu-7#T5xEK2w&x6WnvY}VUb3o2Q^!?yL&*c-xYvx;XyAlgNvisF^xn)|rR8DJ z{KI60Z2H1p97`dbCc%NV-Z&^qGr*!>KF#b4IsKlL=*w3mcv z*}30jL658lvVd&@V<2yVPX%3rm|FJ*-+@w{`VkDms%9`6;(F($=SBF~#-kSi+&QA- zw_b+^7hvn*wXU-iPRFm7z&I}Cs?2^dfGxl3pmrXRmsW+B(E@$>$4bt#`(ro}H!Gv} zlTYaAeU8b?dV%39__~C@;21j*?jlCxr~-hku@u`N{tdg5yM22FbV#N%8USkqu%-ML z6f>gt3W;?am$YGu0nQPXI#7uWaa*xGf#JNyFY9B8(|Y_kvRi(kCi4V#ae@1UEBcD+ z*`!_8zt{#O7c%2KtYO4wZ+e-gpOHp3v2+_tC`7U$F7 zuPg-$HUl^q_R*^YIC}Zny9JNt>7ny%__`f{xujgsLtw{EOY>%Kw{92)8~{hRt^@E_ zV*y9k0eCxc=UM;@yXaPDPfkkY#+}E#Qn=&6TtP|Qk>3=q3w$NO+z{@4xw>VK#!OwO zAs&B=N{&!}V^$L=)u;yQvcN?$adw_Y5e#=;>GUo0%e&55GMz+AT(|eauRY>xT9S^# zmb{DaSst*`%F+qItmec#N2aeY9qq#twau_Mr2Y0y7o-@#iv?ViwFP{q1!B$7Sik`= zXNPx1G{cq+7qnAIeW%GN*;bvohNj|@O~`8iN2K{cdc6C9EvLh17c|;lz@F#Hm^G@i zW@;s!?$@VO3u})j8veWJd_OEyN@8PYl7vTa#w#T3xuYCSp~r%ILFybLZ+{RPsy`2t{5lif1ep={=S z8L$y-Lv_Gwc7~oaUVYNZuEY1o<;-1^Q&pA7#{q9@`LdiOTGP$cXUyQkD35qS|5D)> zRP5E`kl03=yad^Iu?H~BYyiVp^b5AeqJXV-3SdT;$j$&@hdvbQwodR(F(3I^JqjyQq zP#t;i{tEhH_QKuw3%BieCfCF>B(F0h2Dzn~?da0e9|@3UwF1^spY^l{Ag^VU7Xmv7 ztF7P6M+ktcux&dC#%tY`maW(!?Sx91;H+&x2f;gWLZ=_&scvtz7z>;E0a)3U)$M33 zJkKI^ksftWH1khj1rK&n*F558x~2@_%>`^Ku?D~%2&-@NNtqMC=>|`Oownq{eX#|M z^)2uPwJ}+Lv<)m;HU8?rH;Mvy-J&P)#CcZ#IiNPd+D@<0ALF5KbUGd6wT)394TN(r z$tja=PYvC@$JY4^1>D&pHGCcbui7l&yRcM5jRh>EE&%2l06dfKi@uhb910%?Vfi`H zu?38-L!O+e2*Q<)g5O1D=|~BgGhWCBW>c44E%sMei!sSI2s3vb zE{N8IGT>Uv6l{}gQb+U9Q&uO0WLL!1c%&Ziz-6p_kY`@M`Dte09ZSn@_4z?iYASp? z_4cu646-YY+%9ZT zgiW+qWI)=6h1ye&!4jbU(hS~5^Gfz;A`*_ zZ1m*WV^n)g;=!+-%a9aa0az!8Og?2{D`__>gR-R(v;SDci))+^hcaI1$~ys#C9Xw3A+3bY9r2f1TB` z_tcIP@j40khqkLB?EMV@{^lzJIMQ^$&cJcd9b>KDiwpX0T+pn_oyC@?zoZX1oaSD3 zQG_Lat?qo|>!Q~Iu;6B^G~6|XJjlC~FD1NP6kIb`Q8}Sx@tK2+W)8OA-|@o~dMQfd zZRY!<$!0Uz*P|+;Q{$D-WIbmKph0{Bf<}kt>kaumA+t5fQEy_oZ!WQti763!wiGqfgn+0s#$^d4r-&nxR z{Ywj6X7$#+z(ZWNDxx>`_%)KN6mV4_Dx=Jizq5dsVMwrhMjSPDyG-URKT&XB_&YvK zyJ=iFx-UjZ8Ak8ETjc$O(M5o_>|P3X=uPQ8_w@?1BCS<6vG@y1)qLq(6)?Ek`Lb?{OkhCDngK`WEO?VqnWt6dE?$F2GgDIER)#j$=vpKz zmTjI&jXNE6<(yXfK{WWNHrw@QzSv`c&v}4uef#oXpMLuOr*D1w&aXYapS-)!NK_C^ zi;klWA5IagBpm(6x$sq=LVcV>Uw!KHp|SakI+xzS_hlAvp;r#)$lX4zt+ACkBTBnR z*0v5eDjodIuIGLTRp;sb!UvQu*gWl6@iXUij-54tNhL~|XBpGk0!}g5ld6n6`5#)oAm%Q5IfBb_jO@WEIn2Yj&ElZST_3qRpl!#pI{+{-IV4 zQ*bh9m4$8UJBl90xDR<%jPZ{8I5$ly4(}3G)*aCBVG7L$*!05yFIJdXihVu}3H?sm~INb@FeK#9LaUY{L?&-`Sd|B_2Wg@KV z(o2Zn;bCI$xomPS;6OM>Z9_knF14Kbr+b3s`>#)duk`*qZ@pzNtSmu+&5_Qfalj&K zgV6C>DdnNyq;bHSaP2^A6LsiGtP5rq&*Tci7?-AVS4DWs@fNo2HlOpA z(N(y1MvV+EcH3|}xvZ^mDeoVbZ|>`9JFj<|$Bz5C&D@D?S#u46+Omvd40V#=s_%W! zUoe1!V9+~Ot?rfCTW?p{DE(LJZqe3Vz@wK(K~MUQYsG8P2mJq_*R+8BJ6_P~mBW0E z>MvEan!!>|m)GgQre(Ob&W$8bDMg)5*GjVFu$*c&XIZK4$0{*enCnGcM=G+a-#7C( zSyUkLIH9*;$_C+L_lCG^L*tQ{+ZEI{Rqw_LH0a&a_s~2Key^Ip98Sd6VXqU@S5DLb zxCSFVnAsR=ts-3l0r0n2@9Y44rx+ywgRg3i1q{&!z-BNw#1IyCXRE;CxQ1Div&wk1 zcnKGj!sM)01Jm%W3)rEm58qvhwd{^xODOIZM^~xT)BNM`So@LZ9HJ(0fjm~Nx_NOY%Mc%OgWp;%m6Qv6Ru5y*Td`}J_eVc73ls+P zj|;^%oQ-$&cmJ!H`-e~2BWmxw^UhnOS5{ClEDPL_X<-LZvJD>?Hpkuwi6{_87ZKF7+@&iOOi&Ge^>y5ujJh{YA&Eqn% zC>o6Rx==_y3!YYAzi>nx3P7;$eD9Nj^`7k z`S|5TE>jqXwWMp=P_lts>w-qtd!S_jfAO^Z3IVJ!F?Ju@S=;}MGX<~`F;n$_Dtri) z9aG9BO<%`BbH?Y3ylfh(=BU7An0Df4V~tFgvS1$S?t`5x-mx#1DpxboM`H4-PfYRF zv&=!5-4pO@*?@}@W7W`|O^uUUq@THs_w_cUU#RQ%WF7V~TRKdC@0y$-ie|{Ki&YOE z2*1mCbaerD4Au-oLe=@Z0N4qR8^FU~EMRAUrYZnCDJ79xvVI%BROkjac!!hTvl_ra zwHe7e@z86&N@`jkA(|`$*pHgR(NjZTHt!7HUY05Mby-Yc|F=%pJD%ouKYI7aW$=Dh zCht$x+I9;LThXFn1`Ev)B~uCxEx#;%^iZ6lLfAn!w6IWrh(vVC%MV8ULW@lGdFtEN7B zD%L{V;x4qU8#xx1&n|`9T0f-}fByh?Yn}N93t?>m0=102J++c4Hj$PbSdJ=GAQLx$ zaXzXuMV|8u>}DZY<--X@s-2tXuo^sJkPvK4wl)R_u?um5-d;N6A24|Jgh#5`U_gh~ zi^G)JAIZ1Obtb4&9n6~d!)est{sZBp{PmGScGyMpha>RS?n?o1Xv!m9gSG=;q(4$h z46Qz3tHVcI*Ud)gck;q0Xg25JLSGIozwk%ioC+EMkNrD2qT;#Tc9V=UB6sH1 zg{3-m01qCi#u0m2z7FQA8Y{N!i3Wq91MM?~u2W$kYHaO#mc2_cF~+niu%GQzyZib9 zVnd@-mqTCeIBLWOlv=$cB}nYwF{{7bOPobk2261Iv6O}`UhjCNG8WiJfv+n|GFAAc z9F!ES(uqyw+bAw*u7kWi+86%T;NG~PDJ|Hl(X$?gL|NJf25Fsy(29s+^D3FiZ$!i4 z2C%%(=IDjbV%N4j^)K=pK(KQmYq#bb>ogF8A0ZrZ+9R& zcXjd$s#+D6T-J6wgwMBdXP%faX8}H^^Z*xyUzyA%_|qBR`?Tmwa~a4zeBu%3mcSnI9{>+cvJJOBGFT(ZK@OeNx*N4F!ywys(mApGU z`MCc|RQKC_^`EHG`IlM$X;o}FepS&rnROTbeo+?iavQk4HT2zEz}UTdGg!b4;A&#! z@F)oSS^(#r^wm*%lu5_c`>%Ywk#G9k0KPq@T?bIi*1jd!U}LM}uvGS(fMIXl;_O#i zsYqhi{HhC?W3JL}>Iul~ddQ&d;t7I2Rex_Y)jLk=4cZoEp8;}4_db7gpQg|f`Zkou z9L_muiOis~CF7`i6bgsgYvT&usUJ`P+=q51gH;uazI&$tX7e|4U$IkB4uI`UHh?P# zOLNczPFcWv0E>07mq(+ja3{nygW1(u5*ag2H(4_#*W*i~a<^All&wldRbLjio2ipDixm?YSU#waxTB>Ik=w4jt z9@-{~RUawI1udoz;SEgQe$uKd9EyWHpTS zk~FzJ15L6cSaU9MhAoHam}WYRz8n`cSF%|}=K#3gl+dUsW&kPvPABjT>X@G1V*uZl zwr30D$I?J3iKnBl9>CUX1DMSK7Ji#mp8Y;+O*Yxky_FQB$jMkb>2nfIqT;!X;3{{C zJ4UuA5ABa_7a~mOj^tsMmd`asx7dF}*}Fm7iOWTkFR}?tiQ+5Da4UZ5C3$NV!(AW8 z{taHEqjA7iu)CIrMRVUcjBeGkm+(b8$^A&+NfT{q8>}{FHvqFMLLo;%?*aUV8a4yC z_zQ*wVOzjPaWXi^7Ot(W(}7{^(Fs(p{Uam*Q!YVS)Bj81vhD2VZ#>W_$0z`HB92bZ z@#A;t=>6y?Y-Qhm!1f%0;pcKYml>>azQth!_kv?uq;8Ul{J4rD^Ejhr@K(yJ$C~*F ztl79#P!ab9~v6tBs3cF{YBJ5lFnlW|7*di+ZyTF#s(6yLmzxAV0S;3i& z08PoETRQ50zW9p1iQ(@|8|p|ke~~VXwyF0igI|^Ve&G9az@CydD9o5qmM_VoiTrn1V8#!B&q*}hr6$-pr!F6LDQ-sq#}AN?2v6W=*Q;_qa}rfoZS7E9TUEldFgqujxwndMGBbhZ z2q?-lh2GpEXo}g?VLDgVEfhuVxe=VcjZwX85y}a&-X>ET(8|Kb`sQ4Xf;#*3*}wSa z;Er83R-h|8mksV}`L%0UxRmhN;*gb10>{=^lXmZ>TxVujazvl(-Iz3ysPRzeWFAZG z1K_9`tXdqbmZ}Mm6pqJW%rK<>0H^aeAtcFURX6xN2hzswLn~u?eajr5wCp;g7;)rB zucNXk=ck(4#K-0xLty(Fe-Z_^tGX-AUVcjJbPr?ppBuorVXy9?Rl!98aJ?M^n5%37 zdlYcf)Rr3z83Ny=7XVl)le*a3Mz9(DW%UfB*WhpT`T#~?FjEyd&fWYqBG|^FjW?H; z&I^44Q48bZr`OpyW4o1&-_7a+7Kfe9L&JxBn+{HOu%?C7AYgZs*yh%;(7gZF7&UWM z=})xrn|>OVaWk_`ZPes-XBRShkt#`R7dVfWp69M2BUeR2JxpJg<3Ye23XPAbZUp`& zd!Ixqgx!s=2%ob_C5JDd1z&fT?p`@``;eVy2!6m86WG1MCNGW19Au?p#LgT@N!i?t zG;VGCQt;FK>i!i_S=$?}0BNZ!nOktD3M6jZQv`k6(-$CFu&V~rItzBerlw2~V4XQ~ zyM*UK)<*U=@qb-WZ9NQGSVvFmVVrqdX{Bj;`wZGjg6|(BjN8Jl@cI^NxI$mpoBURk zjo`8lfwC4en6g+K?(W9j3VGC)IR8!;b>h$k8tbnB%`^qh5IA(Tg4$Up&fUyOSDF4) zAmxd75{~%_(7vo_EL2}`JO*h4@cdL^aNvqI22+h@_R@}|KFF!ofaIv-wP|aYpYLhK z!i;b>}mpuHx5QCD{Tz~h1jteo7UpvwZT$&lco{B=~2L!gJj zMPXYG=mzNKAmS08iWmaRzDAT1??L*iCPP}4(*dw6#{l*xz}>bz{D&1OkV-wjqfA36 ztjYIlxV5orgvQ}3>ByvZu8-28whRQ~bREViGe-6JoQ+*Wcw1=DcC1cE8DE%S{I#vr9-}7f5eDoY)1+%x~d2s8!Mf4T4Wm9)>Z6@y}1q*us zTzcjJW0p?KVFI(C?qD{fly>Dy{!NQhh^|}@^&Qh#ZvaCfnOInjG+)N4tYlXmk<-pq0yGPVO3xC=Oc(BoR2GRhx;(qt4>2*|jf<#ZEl zI}a8iV)l$HwXL~kohlV`l5Eg)tT5Qnw!+^!r~)g-+MGKTZKWFR_w>ekI$#7Cwa#=5 zhpUF{3+UQ{@W<*K{f2~KB>pz!ks*w}767)w-Ps>oz}vKelVoN65=F}?C#Dm_zUmp` zga1c`azgqNos6G)E5~P4L5l|ixXom$Dx4ce?&fqHw~egEF>RN*9gaoB^ouo2T!-k5 zgITq$WB8EIOBD99QTp3Co*`^5Z43_V8vemyiQ2Sdg2=`TfHqK zakYS{ZMX%^5cNd>2Hk?}c%dm=PH5H`z*;!oM5E=`Lc2a-t#0+&xudK1m!0!-pfQrs z%z0$|Rz>@^j44(C!`+Ix!qxn|VxH}7{(x1suNhotOBW3BEqo!B0`Hk!%5_YCDZ=$E z{wmp36MFQt+Cd>ViNjnepc=nGmIDh|DsPpiBD!Q>R26K`F1eF&N@_df0dh!J4=;Vh zA3pBy0~5r2$<>HSms<7KKc(Lq^2)#LkwdKSVCzIh=7eBlA@)T!CP< zG_z?6u2B%I$67+LTe&)3==9RmjpJa_M-BixHD$yRN@m3^7RjYsJ&DVzI_a5~NK2u3 z;liugcApg?t zXpJec6SsBR=CyKTq0Hu<`S?EKQiO&@SwUW-K2%QaT= z^-7vb-@ubiVv7S)dGxgaaIU-tz%z#LHhX=c@^2NHH)ye4oHR6?bH!ousy0RI8(4=! z!fWrwkR2~@PYt3@5K-56H<-Jn4pb!As;%9sj28N?J+a659VCW`6hW|+dhnZQX_TqF z8^WEfW4*seSxv7{OyCL4$lPrW>zQtFW$=byw~4?#A3wUoegU-Z6x{+~v$CDWfDMRp zY~EI!)T0NsRUNeDk-^{FuqoWGYiR(?CIt57){NXmyQzro2)!=Uf+)EX@D_f%(1|{4 z^>n}9c`L=x2HQS?=mBQH?>)$~aOA!()dt3z?#qX)<5E-AD*Mk<1uH*w&+>eK zo2+*X^_gAfI_`3hwQm+zy-XZO;eAG4v{Aqj`;KUyFAVvMxjjvHu*v0?5udB#!Hc3y zKR8-LqN(U)wBy@r0obS`_(V&|_*es)#|3QxU{tQ*d$Lu<-?4vD+}hWmIFt6P9z|hq z6bK8w0r2OiFgJgx0M@Bnic=cZpxvTf>`SP*jRsDbVyR~WT>3k?I)*B1N%T!>M@q4q z)$-XnX@@jVcE>UM=>qCCY8Fm}qiSN?klC4Bj$6fvOPtVD7m4 z$R@5YYw)tf7FHz@QS9~rmSybIi>3QW1ombwdsD_Nb^~e-d}^bx;3~^k=p8#)@OQCH z&d&%Wj9?8vvYGp)>8qSqmC_2cce;X~G*zEW3^b=pa!bEgsV9|=Q7NFIG(25WFSoMNVzAYPH9;@5Y(#Sj>NHoZGh|nx&=nG0Zf4D_P;^C3l?9Y#T1#zz z)2(~PYKs@uC?SU{lQ5$e37TT+Qi_lRSaH{jeA0+r2t1DHMpb4z^2MCDXz{8`(YS+j z`M22{*=#|v>f4;R&{18$5K~G}@Td%8je69#{{l2s%w*Q|3L86)Ss7$H7~94=TeWn% zm2p80)M$(58jWkX={sw(S+;*UpuJztbrue_Rx>9 zCZ#A=gMJmCr8Dg8aJD1*+l}>aSD~#=P;u!5(K8fj@ZP{x$vz|HTU4VMsvylnI=#$jGG|rU=5d#EL-Up$i+9MoY_@=#zu@veyq!CbBt;N}5iF18 zB@Dm-7hz!_j6(=vA*3^LSaB9u2m>J;bUHjN1iBy1ml2s2)zi#@c*S&AS65f}%)!on zn^{>|`r%clo`ZA=;8$V+qXU4wc#r_Br5VNoe%+R?csSIJ6S_}?-f=^_%@A%X3&Yh} zV4c*{Z3QP02kIWK>58gRvzMYt?3YQe0{o5$fHr@>cjAq&GPlSfRZ79pvyjHpz1K43 zpkMVb1Oq+*Ob>-a17@Ytz?fwbexM6DMR3GWE$5Z)0{gTeDZWD3aa;c^e4<1$S1Byl z&Am{s*Zq@K%z&=aNb?D}|H0$O5AZL;-oh_0>Xo3XP`CgKhO4c3Ty`xM-_j>RX%(__ zEsoTAhWfZf8Q^uHUTn4d0;PJ*?M{=*?6%@a-oJmK(u!?r?PIN0XWcV=RrFBQ0DDEcyw=an z*ja03)*Q{J8U8L`UKqTdnv?}4(U;8xt}~rdv<*c=v{P9+nmpv_gcEdr5EP70) zh^e3L^rGde1>6Bm(6s=^CGd-0KLVIN_Ai|WxZ{AXqc11>22YRVdhYky!Cdrx*422R zIa}pit1@WjV5f8M83%68m*_AIt`r>Qg2v=siyAe5_ax7VB+qg@WB8iP@Dbr1et>eC(p_J%Sx zOie|Tdl`#jH~S1*ayCQ2D*R`CMt1~7ca|WuNz70GAuqbz(*Q?DF5a>UW_qqd9be3Y zN5@Hls}k8P<+b;`RneUd@C$gqKYb2hX(K(I3=|Q`1WLQ{G~xX<@X%K$ce zr~XC)u?=8#BjlMR&vrTk+9B^Ox-bB?-RjHoO9NLVKQos^X4SP59$nX}W#XPlgOu&@Bsj#8s_&gcL}v+jXH{_?^|*Y+lofv2VWuwVpvlQIX7F7JFf4XQ#5w z8fZ@F6n3vHQ+D`U$gPTP-Xbpd!CtBQ36S#`W3)>L59`$Zs~p^l&n9gZzRO#8XwCIL zjupC=8ONwR4ZNAE)dEb-oN!UdD$-zbneTi?|o{pD@c2 zian9Q69BCP)^Iyz<$`|ZWJe3ObTokbN~SWMbu|*}2>`wbB@HmYm z=*a-4yae!!Su7G4Kv&9VDl|}oP!n1tD0ymuXE33K-{e$_8E70%C?GO`J`?9EHDJh&)d@VHb$tV)kOgq@OnU|z_$HF6J!wpw=sLLfKA{6DTkVVB*`Jnnfd!12p$u+ zcF#PL>bN%Z(V$h&YRnk$yggecM8zMiJG4!aE8Wj6QlWL`AE{y>59&EU-_aw&pXGxF z#L6`ZUVHXYlNb&gzwBHWfjJn(&0P^#25{BYSxYtm;mPOtfHp-(Dcc6)wmeUP)J#(1 ze9}AD*sjBtDUnwZtnR$117FQ=B0tqncVGR4Ky7)EIfB%mJb$RR;;u^jn8Bhg*s+7b zE1D)1^bly*D6P3loAq`v@$F$|Oj&w1Ms+7`!fy>5H(kTr$$>QiU9^S4LGPUS&*YhP zKLe|6_8!tkangT%vv%-Md9j!wn+D9Sj%>(%Y)8*f(*#Q{!oD@icl<(j7{}ZVrXBLd zw$^Fs-(4L65{?JJt&{1iT0OE6Ol>3t(=8_Q$}sP%^~n-^s*2B0|K;vtv{CNpy@iZ_ zDg*cxb~a&3DFNXB zr9J!e8NhlSXZDDVN+;RoZ6cVGfP-zOoKa>-LfUghJAw=Rn(aJyW)>8Ey@tN8&tf2x zf5U~#Jv^Bk@`Z2*@BNcbwKyAdSF;ZQrolYxe9h`_8iv$e}sOs%TopEMq9gw`6q1@O}Lq$P_3-uUuzue2b?mxaq>@u-bou}$o8@SlF9gbYb2C!syhP@olQge4r+iN4+ zvQ1_bE46R&bsF4hh~5|<0Qb$75j^)s1M}M0Rq87wGf!!$>|u&qcQ=Vaye;x3rSaOK zA&Orzf0d(vC)!y|kJ@|jf@Q^S3~s4 zv}fnDOxek+8R8b8836vm<}Q{ltq&eEr2H5; zRR;Qw3A^7&UkbYWi&IK=fE={a;#g)ey7+0g^Y9X4s$&vv=-dspsn6QDD{R(n2CeTM z>BJX;UumPQiK|D3z=<>NrUe_Dm%NhHX4W#I)zUvq=aa_HgT)DIvKNdm%FJz~-7YDn z<=XEyfAfa7*1U6l|JMV}-#S;v_4{iySt*CUOJ~BK27lAT7o&{6WzK{uGXmI&gV2_S z-zzu{XGy|fnP}l}Dg2Exe)}f?-r(t~La+=n19(J3A-EUd=h6Te>F&P_;9X|`Kb=qg zBv17`I#+|?&SHuFCx>(h{OmOg81Cb0Fau#l(wDpdv@Dn(i zxUeE$V^MGkFql8|Wy>>xYFSRv*+1ly6T+nrOF?mefwuOhA(OA7PgAL)izL<-WDC-z^ z6;fAarT`;P6}E=Hzx?pSyQqV&zh@e-QeX8XBn=14!%X2F3AcCE7`geq(F0}S;2`(0 z&0A-R{;<+3qarHT4Bz5(S-gw}LtsrKq8lT?5(%#!%iOhF#RhlHw+yHn7>ZShED{m}kCFIO;KkYg`v%R@Zx$Mii8_C_}aYTLZ1Dhbli zKEzxuYd?Ez-GDW6bB1{X;Y37RiAU9EONandK&-#^ZMv=83*&$*Aj?lV|B^v%ero{W zKC!~5m9e?-%Ptf>Q9CNbP$Mw>&1fv$kSRCOS!V)M|8oGJd*mZcfV7+cl)}$nRbsUM zCkmGV{6_%pk=mDbtsGI!IujVKu3XH?x5EAY|1T?4oyxP^rgE~$8N3|Wpm6b2M9qLp z@~CoS@^y4v#xQYZm!YrJoqIl$Y}7V=ZTF(L3%|F^%kAYI6iJp0m91p4@|ArGZ|SW8 zd+<7a65%y-eO*ilwt^|@M|U5`MJk8H-OyJ7u+l{82iJ`2uY*w>07KOP7^y+BIV%fT zi~6Y(Ee&9b>M)S(H5q*Cvzzvqtcdz<`|e)o^la<~y}~V;RyNDS!osc4TL4}QLHrPH z%k+O=dW884Of?hf`@*o{%S#)gu z$tQW5kkkb3H=zn)TY@w_8s8{nrFXxqxrY|Zr%{$FoIo$We*N9nK|W(C8Q48=OljI3 zT*w_pu?DSQ9HOns#gr2hIm}I=Z8#dYRL_b`GCXbT7CPTriH{yv*EwDDix){~1M}nL zBXkaro`0`Cl3zDTIC(ia*ggC-w>xS7?m-K}&Sd&?+c*7&ye^}{_puqW+iffW>%@>e zWA$$U*qRtrz|^hz8i z>3lV8D6wSu^HPmMrCZF+*?gU*e6LfQwsaWfcfvkTSifTASkZzCF?m(8`Aj>S4gm4l zPK9N(@rZ`;5y0Z5?M_8Sp*05l&C8v=csmh51V?7RA@{M-OZ79Qn-g?!j7x z5F6DAmhX$ybimwg`ugydhkofJDyx9KwFc51x_8IZ?#mp0Oh6Tde9V4f>q^+Wkk4?F zeQN}_RVw6WES14eRHMHgkQ@kt-llS=Q?#gu*j;qG#dJ7&j%W6-jtiR9tzfiYYwd#W zkS;c?QPyBEKKZ`&hn&yl6|--F=X|FY)!Ky~oz~iBGaKo6UTMq{=GoS4U*E{}`7fC# zsz-y6*Y2u1Mrnn?nXNIJ)AOM6berD@VX&&2wX3(wLpkriGm_e>56hC@ecWA{+7@&b z{I>^_p_N4<)bT-B@E2&Y(o40BZ1J4=pnG18_AHy)R@UL3 z=oNpM;;;PAY({JnN;Z7a<$8o7uMkSm0&rlcNh-@YO&t^MF5oS(zZOBU>+WMwu0ZD;m=G&mD+by&1lU^R0o zW(KdCH7RN456=Lvd#dvRuSM#aNc_^!b?ovT+iVnz&U@goCI#zD)6V3iQGSv4TqB-4 zf8)JQR%zt31W?amo={Loi>8 z@5#ogi+yAl#oTT74vJ5i=#Af9dHzhwKN`@PI*D9TbZ7!PCUlO`8wWJIRkVY;B@>RH z=O+Rf)jZ$o+5mp|@S)Hd04oSO7I3Ng2QaSzSOzdMh+_(8)ORXAx+4K!7lBq-w!BU< z|HWV}*1&6Ywt!~@nC)BW`y=DP2-8;tX7z!H*x~eSTaPuAr;jR1g;dtHP(^nKSQJR8&J^s=N+w9hX12 zQ!;bAUNno*J+!+3tZ3-*3AX{djmo%$@B%hpE69F{30vId%h}_a(`1~2x0*q%0_h*b;_ecJZC|uDtISGK* znD5Q46K?GJ8@V#zx|wlGHXjPbPutw3Pu;q*cHGE-Ea)1yKvVPb?A?8F&TqAGlU4Bd7BaiH&5rk`DdO@G&30@#DLug@5;u{bVh0PML$?|xJ; z^bG;9p$YeRD+;mq4*{%act?X{9u$ebjbRhlX0RIAOHQKEWyBTnmwo69hh6o6u&rM< z0Nf$a2<(>OTO5A$wHHR>OxABXr5O?yLbU>e079X`sf^z_If1l|Q^8?c z7I1U1>OBN30M}x_L|FNX$^dxmSG`xJ>7D`1#VRFw`TWS=R9=yh>J=fnRhZY%Zj0K~ zdknaQsZO8R!SuScfHNof#~(lbtpk_-VURARI%N4NdKB zT{Nj1(wEH3qWF?r%6_4~cZ~%%m3)>aln1nQ;e4sr8B7pZv?a_E*Nnd7A`Fy1#~7X% z2_>VM&}14W5}h_cBb&Z?2^9n0O!ZH*(wC`qHHIv;+~2M zH)8MbN|LE|YwC`aFiWJ>5a{;R5iu3oET@o7$<9ipf|HETmXyXy-EAFD!khU76mz)M zLElaemTI>{U|utn6z1kjszZj_A{rXn`s(=0p~IeCF3}Y21`mY$xQ)svSTM}hYbgM3 zDG}DVpsOy1cUDTQV)Sqaungb;82;J?&58>ubR}jh{0$rRnz=#fj{uD77&BP!6e(_5 zh=sdSaoAvX84oml4`aZiS7iKB)b8R8U=S?8zw`FTKmORu52CyKY^1Tm3Pz8%1qTERRY>9Nx)7i_j5oMGS|`5hB`Nu z&lgJUB;q`RH>YP7O;w2^yOEQ6B`9^Z2qJP|ltHnOh+ICQGD^TF*2z!2gfkCPc*JA+$; ztK_Cq-(^}FVF4YlBlxcIH#%J1DZKjI{M{e%hZMe+ChJOj7WV(Q2%NQ*&LW!102SeE zjG|Yy!J&#gwhA0CNnY+48jfg3H0n9M3w)`V8?sIrgg8HKtOV?=ybcxaye% z`S~sQ9`mjWxusyZ1cytJE9jE#BnvGxNG9;iaZ(0y7F+5zLPWqH;_X1p~V!*|_+N2dV(BT^rPG z$eOJ)0|+&c*p|85m%-d3)}?eIc&c1Mk!q1`cnV*BB{~3X= z09ek9`q6x8R@tZCCh+>Hw&|%lRe7T+COgaUSIcqPWaT)fA(S+BbwNBbVr>uW7Ano{ zn&sr)g0=1yg;)47d!!-ex@xDizoX`^;XCSDyvRF)2fuGSMl;b_Jr^Ez*#NE%^G}N4 zua^q#U<$QSIR!BQ;f34~I2msDX-LK2SGbX%G%-?sm<_<-Rl}^?n!mFcV6Se}7BKq) za2&@G?9&)7MLJ`2De`$bgP zOH=?aFn{>&L;i))Z`i-z{|J98@ao(9(3k~*;VXqE1Or~hUojqxk`)VRfA`%__r7~1 zM!x;%6JC!*UG~l?MJzK1QcqDN=Tu8@Y&WtrvBum+i+QB$MNB=Xij7z%sLf8-U7Byl zq*P&ZKUwe@sZZE9qGvQG&NH=h-(_MJ2Dhf#__VWD;kw0e@0C&9gUjA%9CdI-@EQJ( z+`en>bp8wWaJhSDm9dxUQ+4DH4v*GTI)y+d2|z*cn;BP1jTc(RZyyga$-PML>X1zD zY8hpgBl|*b()LNoV6-VK37^CbmXV8gUOf@OO;y-K;z)CHzj|S+UGZI?Ea17c-u;RN z99;)6n(Jo(C*UfYUzca)`Dr>C-)B$say+LczUdQA{|)g^&{*b+W7z4y)&?(|!OP}9 zLd9AS3bQLEDFnY6r}COPH1mpVzex`uE>|kp*0$0UQgs>|X--*YZDOZvZE~RUbq~MPbca zz0k=5CUmhGk3w)g(|cV2R;ivRL?gHZv$&DHD5!))6TjFB!Czz$*a#-k`M}d^OuxOr z21XS03kHF)EFpZ+5UN!Hic$OOrD~+^A1^<>{Q29<%S&fke&HJR%i=(m=*L~)T#Zb3 z<}hyXh8?G(_H=H1wf~n`r!vl(5a-Xw#GDVqJF1wtK6R(1Yx-Jf<#VIv?Z8(f$a;vi z242l9K7tjS{^{Sik6qEMt%JcR|O_9a+mE3Mm2vxKj!0Fsd zpZzYFLnl-{0x%K$PHnSPenj#JD@B&$wRIIG$+#LihjeTr$E?`QUJpUA>;?H0;q(y+MSjuG zTvoFZL36MJwPms!b2Z1K%*@EduU6euBjtcb7O8B1lWIQs3;;)>uYhd5%g`tQ z7&o!LxS*K}`gdqjR~01zEn*fTe|roVeTr`auq|LC)-lSpO~z&vv3wyhS5&n1TL)a6 ziAijQ4P1aNUV5Q^y@8Yftl$@=%wH7P3%MUljo&Ihp$K&1Ui$2ZAASIWU;cV2qqovh zA|MO=rEn+;gU+=9B>*If7rYR`EJL*hEo}(yxg7&999@Kex-Xh}K*QOrhOpbBLKrUc zE~pWQ7tg0Wan_$uJ^%v__mL1XPc<&4QiS%krQOubp-wO z>Y{})gJto>R-hGkuL<9(g*s>xZ5B z4Pf;;EK7X!IN*X#Gnilf9+2xl>(j??|FkJ%#n$`*V9(goOrok2KH6+PT8s~qZlDVI z78T98Re%f8`;HdOyP6j4-jeO;J&AMH9omgxT)hIY;464uiSU)W5=a(e!K z{i!C@=#ODZ{`yHhBrSK3bHt!`mJ;bNbVJszurq$AI;)iVh!>~vXN6y}mkl;y^<|Rb z`+l6<9(>BL6nv(T*XcWlzmX@5+vE*}V*!_(iAKT6JdxeYA57MGJX*l06smAAIvs=s zVtp)5qEi4I`l^JTENN+^5n9G14SgvGX4S?9bpUr|u-0uwccY#bay-x|uyqu4o8Hah z+WoEqu%)-8e)#RnuYY*??PssU09&|R&o4N_(8d0Z0+fNX0ubl7f@m}18DQ06ph-fV z`AS<^pkt5Rc)doEt=<@;A^j<%1@^HF<9yZ@LT06+G)4Z%=cr{6*a*%FntVaFmQk?= zkNTkK7rIKKG?lxoJZOF$OiC>&**3&cJ8jUW zZ@p#6En9;(qGazSe!1R@9Wxt*mT@zfPj^zw$TOLqtjRPmE$>^?i09szzEN2;Bt{Fx{6^uM-tj`#DNXPw;{70o0P zcx3{&V+f5-V2Kf5ud|=Hd>>hWc71!@7Weg?-J5@W8t>o?`+?v1yv)|@hZ%*Am}EX@ zxB72Xb9Yj7$j^*Qzp!OiLwsDeg#90Ij!=7_HwTH#;LHJzo~C>^E@&^t@TLGp9}H^> z!GZ`QbE$l`0x%k70ss0tsvH9rUJYOzwkf=P5;j`F2LQ|ZJw!(Fob)vjhsz4UvU&uV zoBhvKu%dBdFP$U+%My+SjKd0G8Qd&B|E*pxFJyOom|x?k^kH+u%d&EYu!*jWceO*TP|U=`ej-%^H# z2FALUlNiE&&B4=yu?56X9esvk#HSX;19<)l!$9J5#`eQdd@#@-||Wq8m8~UI?nA)t@2+ z63b1=$Y|FfaguN>$t2$|ACM7tG%WQmxz^{S`XhbZg_?`EdZ5GQ#DcVFt- zn&d84ye2D{r%t@1ojvdpxC~s`!Je^uOr$|G*P2L?L_I?;uI1-NVX*bQYZ{x+^g43m zuTnxjQ>UDk;ig=a(2lZ!FDn}7t!6@GH-L#66z4JEaBUA6PKV4{DlODf_5WMIVyq`2 z^~o0N%=0}0YflEPvn!?3Wxqi5$k$6foL+ph*G1;8Nk{fVIEc0dcKC{5)A%tCXA_##MTYj_P105nPsYk-yt)`Oa5#%b}iHV>sfMR_sh_N@(T^ zs>YqwVA!r}#hK)B75VJQu62&_?UBG<+Q5OX3aSTz?JlW8W5Bq{c^(r5P5llvxCEs_ zpdHPEr#gseAg(UpSjtqSaY1_kxHv}uD}0)XEIs<$N0tI`V|u;lS->dpaD7-vO=7b! zObPmu*vnGzVve0&saWwC+_!H8t%xv|F<2l@L9a2@nwB>+m#$9^fy2#WaT{Ack-i=)|xcj{4Zv34JiOo+%UTpV08AbrC z0%ER>vfAFck%7Afd~_}EL0EP8cL0VVZJbLa=l`>StIZRTEcYD)Jj#t}aD3LkuzS}| zR=67q?-1Uh%&cH_53l()Rd3IZiZA-I^s-k1usy$GActz%6*XDGsG-zoF3es8=i4}o`9r6wEnpJWR$-y9j%H#2Opd=Z4YahkTX%sYlVWV>KjQ*5ZQnU)DM!jz;ysP%6(+q1=XOZIb|%a-TDDi*nFB7g}D z2zGZZiQt!5rkm>eg3@nC=fUDNyT*9Phl{gz?Pr7FZ`hy|9tx>Ctv@PkS{__|tP`CV zTy7TflKjSRV*+c$nSsZ;I#A8jT6vpKLj@mfTE4p8GaZUS(+Yp8WRqp&dSZuypYcjC zbm6x&z`dhiNjWyK(bSO8y#0XMrRIc%&0l}d zy`&lr?c8D|C$|e#3>LJH`bv(%QWq2ogC>RTf_`KH3xNbMh^A~po14JJ=mX66?iyf& z^bW#c7`!i&5M5l0;c;T{1*y>ur5bY$yC4fSv^KYKL}t(gX6;dm=o?+pAjCx!bR8cB zVF`>YfJG?o=GTF`uQdh?3BuG9gw`$XN+wFgA|40}9=SzjcDE9m&p*JmH z##c%9vY_Bb>XNr!pOOWkOE5~h_S~qn@yOngR!xY-shNA#fX-?cuTK8F?=0m$r3&Db*r zZ2bbHnSk62SRay#Ca_>ipRQLms)q{Oc%~6dLgVr$6Anet6%6Y*{$lb|rY=4k&Q&BQzcIM%NZC`DgUnDkY__c7>C7Vwv)`!il2$TwFnj+U*i%!JK_9;{b;X33(5 zl*r}|Q8F@VIg-M)36=+EusQCa=-gQR6^AF7D$@Jw+Pr!11>m}z&gr9n0d|8ohqkIC zG_^lBis7HArxoztSL)#v-oC$dUyWvY_Q&Q`qC4gFsSCJT{)uW)26YBbOk~u!`9t7* zvyRGIE1l5CIc~jhq4V5=lXWb+*2(AXf181*g?rYZUGBf2LQ8=4akkauOEb^ zi}gmTjM9@YY`MmNh3)(py4a$SRvySw+BRJ;D2ywsEgS&rrkvuPNK}Vi#S5&lUpkIO zUDQ>Tt2s;VE5PbrbTX%TTLYNi8$lFGG_j}I>JWuvHZ_NIlnfi1vpgBlW;U?C*EUIw zVD7pr%XH?rx|^4{aBMt{rM&zjyv(9suG}ugOwL>6b51Dq(yO|YikU|n3wU)wn|V+H ztBP?!_t0vAw4S5Jx|NN;2*8mb*!#f+t%Vh8!w!?QFpMMOuAwgYPW{%VZx#5IR<|{M zdBV>;0$&@y*p{isJp}xv^c}W((Srl*;s~Kadj`e&hu9=&(!gwjenkyu4?THUXAR%L zv>u_kv!hA+J(GTY&(eq1FGI4=Ya3{O5ICE47((cz-&(i$tp;Lh? zpXq{@alA!G0$VG8MYbppl*Oz&xySXaBm#Vg`3La3R=*cwXlHbn;zWPxgkaZ`j|VSb z1H(IQkd-J@SojiocpFz9Pvc)13N!PoG8G(69d_IAox!mKhj6->eL<^g|z}Fy3CFjlb(C&Bssi zt6=Ad3qWK93&5u_V2H@G7aAC(fjayJNFCA4JF3;FEwHX*z#yMj@a1itL7K9u3US0% zFZ9EyCBs`EXCkHu;3y90MfDs?)_T;LuJF!9&t`rl-G(z%@0)B=+xT(?rGs!7)CEJn~PM!rhQI^Osh*vC{Dk{X8BfGmNu^ zu!lf(0zVZ0fDh4@Gh-@|mJkzp*A)fZQE;?aH6GuWm*}`m=o`c))!d3;zok|6G(6Wf zUa{onY1(p*?kv8hM#Xay!Oy{-Yo1jY1&13hFNb=a>qjsj!z6FGJye#?4&bv);PX^^M}F$U|g9tn!Yr8#bCem&7vcR zUK)aeu{!?Ad5%H$(XM4KOgi+@nIt2f3XSG@0PNmz3J3NY{*~+6m;E%^#XJ>jV^C_x zN5nqLS_|efYuu`9`cYX_H~BSuQ6c^2kQL;rnoLy*zDT&Z{uT3*VpOMwGT%o(XP$IW zsP_o_R=+(CZt+9cL|w@rp!}7%D(e>C@Hk3%#xH(^PP%XOAXw^E4F13hgY8GWdqXkL z)FOi@crCg?_f1ddR0FSE-FF$5eGFi13KzNrFrR~`1;C7u9_9sp@wZaG@HzlCJJXsz zJ@QLob_}xS_ymd@l+8wJ~l+!ycE{nIk8GkhM?*j9NSkYlFIf42FZ z;x}4*Td{smqrOmngJg2Qeh=_+djXOTz&Wp+Sxf7*K~)gY&MtzOrT>GXC8FaGCi0Ix&BGbFho8bp|RthtI-Z2cxA@aBT%oZKLi zI+=Pge_!7MCeYc;PqL)m@UqC4>mQrNuck0+ulisQDSU0^E^K$p%3tet`msq(t0GJ~ z)8I1a@stq3sQc9pVdGV7lSofLFCY#(WBO9)(XX!chRz=B4T=3NBqim6w1GN>e<37H zXZ{}cdq^_y1NaOhYn*Y7QFJ$ML&<>m})B|W9jC5L8UrVhoMv3JOj5H9D)`b;WWZ zoIoqLTrzkwey?@140Zrl6O3SL2U!4S0P|(`2EYgYVmE;QqXkSGvnXYL`>=-VF)1feYcN76?v$hw`M;YX5a>opZ)@eKa zPmIFF!{>B0(N{L9Pq@)X)O$3}>&|s<+ z0Dt^T8h8tu7T9S58?)inqgq*yUq8#ihYg;JN`sg zP;{?4otV%AgYVJG;Qfm4=}3})2Jlh2V3+|Hiapw6q;uCzG@%MLM(z&a)e8*@y@m^V zS3PlJm*t*bKIE=MJnQ^1Xm9()haYT5?$-9O+p9d)x0&Np{AESU_ZpkoXQ3c6NMk; z;8m*`0;$VBXf*&Z3<_lPRt&3gwbLVf`&S*<+ort1C7~pmoSXr#V0zQCuc;kU@ z$|Jwe(K%JxlGUC`E^ykGWm|UlB;CEcN~KbG`zW`t3#oW#|88-&X*xuwhd0ccJG)8) zST4z}QR)FV)J?T*Uscj7PuO^W?D0@OZVyttQB2RUXUJMpLbD8N7tqNH-MInSz~6kU zgK_NNAIB~;5*l_5V6iuIT@HcYa|XdyBA)_3nU)m=ZT`{+%#9fLI|}s)dB{(@j&1Ym z%;4^@enn&ZqsfyIXY`E2s^LjSu;E$=*69Vn)0@Iq+%#KGHoC>p#u;-gY;*dB)r?|VEoeHDi{6Y6;`d=@fDpVh z^;S7`|DrX@FkLL@J%l-fb%7e8QE0dCwQR0}9eT;0p4flY7f9w$pd0k_IfnObiU_KU z7|!5IE60odq!Z1W4ycjXVp_}f5?;yg^W}?qI-tiiOIW)^XgcoH@Rd?LT1<+HEiq?B z_%t&o@b!ndM$_KK2?zW`Y4J%FQ?Q9pyfFSXG& zp6ot1s&}{8;d^;%`1?dPYw+rA?z`8CJ8h2Tdu{Md5LPST+04^v2iqPD0xfNUt_zpk z1jPCtAowbd!U^I+AD!mB4mzs&GhwRV3~&6sj;?YwF;`n zZWq5+spXqGeFWQ?St|GKn+v`kz9bAAxzp^0jRCM8qbE2oBCs{4y@Op`>N@)f4|FQK z1x)X674(bc&BCv)FW`3paN8V(&}QWkEme#ou$NQ0R10eUss@0&0bRgu+GV%v$+-YH zJtf`Hb$Y7vgMiL!*iEnR)Qo*%vZqY}@LSJh5bp9`r!TsE&T3)=)5SYQve}D3u;Y#+ zMnSbmc(tYO@tGLt-Ks9LSGyfksJ~Gb8~ibO>kqGAX&bqp>IQn)m*R&JY=KYfoF-7B zFV_s7@hH%@7@KWsImcB0=yA{Bf__BKVEFsP0OlmR9flO1Ibp~5Sio-dU*zG~W2Wki zPtMRPwL#}!Q-=UIY`vkdPNxwqQBEQDP73GzDTX1%0=5Fq23!&8QCeyNqO1F|l00qL zW8*U=(2EwQ_M_kDzI&e#Hv{ErI$FA2VRlbar)A3?;J1JNM%^9Sx|&TfHxI1ebR=q< z9;QZb>yz|z@vDdU8vyg^`qi|6Fg=%RO3{o3{8j6EALd~A_N!ksfO8Xj zyxj#{^AqZkvjjw`Y(g@g*PXy_r^?vNt18$sdqOrJ3((gyO#p*mIlcQ=tpf$pBN%;Y z_vqGLz^L+u7Nku=Eck#7w{@=##;0mebEj&q^w4u8Ppufr?E)|Hk`_ISp5pH^w$X*a z9Bkxi%bopb{{WepS1xY9VcKoVi-W*4JG9(|E19;RSJTHT(Q6{WIyMc@6M>r3KfJm= z@+%+=PEeM~#y6QQRvl^v?+Ndm*K{Jal_bp<2G3vQZtIKEGq!887xgh5(_D2hcs#GI zZTM@&9B%OZp8)*Reza)wF@S?#dyan?z%clw0bDaF;erl=RnFEIE%)b%t`t6>^_;N~ zL0#~=Q+R2a@@NNux1L@)V@c6GSz9(J!Ues_bVF~bnpSa+dXBgBl-)Y^Fzybq!3iCULx0jD51I$xnB2yW#f^wg?C}UIJ1wUGyQ$_{u z?sYOx=4iq-1cCX)90>N4z}ssGbn+ldGs+=QU=t`x<R~Cpgnj64L zQWS5^$k^i9i_QTBP}!k8ghpf_dss|P}E!tOB{V5>p5K+z|=)3}gY=kUW; zGDqCmX=jDNEpE**j_f9V)Te{R{Byi@Y^V0duP7~yTbR?Fyg4%4_h@Tj88yMrpoVXv zprbd`;hc!DVx|Fq%o*Wu-Ni{(!te;{8q`%8dL>;y<|(qm_gJ_XdhboeD@Ky2Xrwxz<)9KHMO3U>-Eh? z$m}+fA0_qvd=?j#S|rTXMd=et(vXg*P;qcr$07^{=w4swB%*bTPLWTx0kWgH1z&- zyOMQ0U#E)hTwLKUq>WRWYMlqSyZ-UdVdvWNow3&1dNGpqnW}&OGCYE}xGVAGc6TLa zTktDAgY9u_<5)%@3m|KGFV97;ZluMs(;vu$ehwkMDq?NBY#JGvQGHR-uor z{dDUW#f;9lev9OVw>Y~w;*R)}fK7`D9Kq4@>Z#S#1&zUY?xF{J*eU%SxH@-==RUGg ztG)nU3=Sl?@v|=%6{AG&1wr3iz?|3s{5?Tf^a1}!CQ1;li%EHL9Xl0=z^%CP4&i$W zQ#&Zk1qX#c63ze=7s89v2Qk-C2Snp~b_FIgxX1##%bZHCbub_oRJ?J15`IBs8nUNl zp9?V{PWK-3K4??LXTx@|m4sdV0iBvF`1NikS$b%t3z(1Y#4dfveYAYhF%;~Hwrbb{ z?}Q)G@A4Z}n6+NY0+#hTCIKF5i*yoc20wl^3Hc>QFDm>&D7;*V$l%)xQpANUnHRr(|6 zA{0{j=p5EuwKKT)c*1#-0T(2komuWZnU=ps=m~Dq;-Sic&sYQrnXZmB1`^ZoHAO@U z$ti9}6BPbd$zfi~yZLU<^FO@{;IXOtg)pRb!~p)-0?wolR%rP{7O?Lhdi#33x#-i> z4S&x7>38hj1@9cs&5sMv>2khd@J3gGAqAJ-tD(7- zDx>bObp8;c?85aLv)*3tpqxqh2S>%#kUY1%)>gv5@{C&+QX63I5hW#r6;DlS11za)F zF@Vbg-a3;5U@YKt^;Qs;mQdHZq2q2Iw~JTWZMS5RtUXtQebB!2DSf*?xMdz|oi7g= zzLDV`yobOlWgh>OQ6QNR*eF@8!7}^Mmv`0v;z>XOgiGc<1hIAgU9Td1c2;$d>u)g7R;@^1OWa`PUG6h)w?G)=0${`+@yz+W@bg`9#n1FP+poSR;xMHQ;Um1N zEK2A*q3XKdkR2zGqUzl|F{z!uf{q`kH`M{kuL)I1HA<@L8h&S!S4)N`XCzX2mbIz8 zTIRKC(hM~$^;ZbsPnkd*evhY()%@+>`3cI*SD@WeL9j^t1Ny15U+LPh6!cVcJv+Z7 z2y3I%S0bNrLB~TJ6S$~XP_91UjlVm9<8r1M4Hrg+$dw&>MnvmD1l5SY#!AKXZ80E8 z@@AYBN{5?yeOesRIx`8pWZcTeF!uLa1-ExH;I?p|Sy+`YnT%21P`x;Kw>tgAPDE8> zm->{Uj33#E#k0(Of|U)LyQ#)FV4jiRg8X2`Uk-$4je4Sly$+^mBjHHS`#Jfm-YUQI zj?IYbX}<=9sgQXVG=4d+RkN72q-|gC7dcIafoI}I;dJ#IA@Kdo>x}h_kB+ls4k}a= zlBuS=<{tfMz8<-st5;SV1`I8zK5=_6_`oU@hRvtA^n~yCh#pmoxqcxX6-7bAE)~fL z8G8;U0brlX3e|MxUI+OyhadOA-t>(ep^8zB5xnyD#Ovt+pxuv9n5O8w_*wF3Q~+Lw z{t)P#S^c#2FJ%=QfaxLO?Za+n31Y%P+_(Njqs6rFJW39=YF=uY?|*#Q(!*63mMb~q zv!j`>kCNr)jhDbvcXr#qGOq9tDG8S0o8F8)f2i$Y3WtA;zhYUtphdT_n7^u-v1w=v zxOikE68o2#eGOa5)}=No>sTdr*6tGkk7W>e5Z|}T6C>=?a9m1`4x`ru-qb^q+5(2Y z#6g!G?EBk@4M#Ts>$U*65p2V^8Qh)025^73b~fl4iG1`@st6B$`;{KQ-=ol&xRt2#(s35t0>59LAxgAMIF<#Y)O=joYG$)z?gA4{|{W7l*~ z3uI&5UeFN=kCwoF&Rr-d+XB7=Fb-kuxeF@SZo76bS?^vBTeps@Fc9vRIR5L_61 z4`EK->0S1w^8T3P{FyKMRG4fk$ZeHQ)CF^w4qd+OvI)I&9rFeAwwN;9V=qlmx5 z?4<{E>_Lp$8m_HATPpyLdQJpy?*R-xKg=_Ew6fv*3%P7nOA4%rW*?Y1Q2x^tphSqj z;!f8F2Ybt?f=fAaB+NZ(Ubc4mEu*CytX$y}sJZYd(kQ zd#zu;J!;;Ager=&hOSBMoLEvq|J5iQ4R6=DXYWrJw8@ahox7+>o9%G_C*yNnGUdAQO|@;G z%zP#haAR)`t%%L-PD9`swz>p(B#fCxaoNn!;bVKDyW5V)K-F!zSRFNfyP z;>9+-gg{@vb(&#n3xIF&v8$hh5M`6ZcJv*9!S8Wr~!}Sk(xpUtW z!tYJkD8+6*Da=hz3RB;X<_|zSh1>N|Ze4ms?0();G)l7zhYXZbUsV^9K{i|ZcMh+! znrCU!277t}6@1{B@kGn~MSvb8Ku8%ES?B9nJD7L@s1BtCQ%zWYI1i)Ujs&LQa zr%u35L4=fbH)j4x;R1Wj!TUgoWHEZ9CaM(P!d#Yi^qyaWsugtUb!k7h zm2PHVO9C4QRr$qvRjoYbQoH$7VxhQNGSAzZ&E^7K645%nEq-=g%jX_*S2fHXttKwr zG^%|+fMwVkzyq}7DlM^qzy4bUQUw5OLVjn{m`NS6fD2K>jO;AXI?y1F0PwGn;nn~i zg$4hX1M6@hzg%agbSRdI+agI8BZIxu_4!&EF6aurs+tM`m=GA=sRw}r z#_kR+3ZQzwI8xsud+4aZ{*_GfXrDe1FKRt8mN75oNa}&Nd)FnCDzk{->7FeJA|__5 zI#)>M5&U*}GnxpQr-*x#v4c6Z-6AV(W&%hk8~9oaL|4wXh-Si$U4#u@Xx$OKkKm0+ z{D`BEc@cap_A}kDd;@~TWg69&sl)t5f4K1`(}Kusv!u`ZDayTJFdFeX5w{1WOC$a| z^z?Z-EdW=7iWwDXk5Jy>{Q<8{;W?vyQq{%#EM6XjYtew=7otC&3JdQ+P;W)}C2iMQ}X1MGNzyVrc zAnJ<0|JE@rL2yvr6YrW~0JzLy8N}kVHtl*=`3%65t0Hb$z`xQb_|!D`%DybU@pR1CF z@qmmWLjUTxriL9!J)$GLO6TC{HAaeOXPDC@aM2rK6+_g0?t$#Q)w~J$xw!rrBx$}1 z&(h5YwLg)dcztTJ)@*a)Km74zr1Cfkf(b7^6TH&pg?a89N-NO#wI5;8Tfx@^v9EtR zYXXTOy-nO{1rKPSpCF%RT(kKb`}f%$gO5tGGvjq`&4a{ajS{4+B0*N;@go3(-;V&S9XJJWb9E&FIr3c*)pg(({(dOh zpA43MK2(V+dmP*6&F@hd6(r&ZNo_Gy%Jb~CQC!=gc49XbpKJEIu)NI=O?*Gt zyT=>eeZa$?>$X}3zBE~G`=71$KuZvbKH#yVUHN+hV>J?gZvgyj2;2^3d5KgUlN1({ zy~(pif^5&F)InHdKyU)64PYtI-6m_GQ`*{tu)<$&mcun)p$naE%Kt4>`Dd8%w1SOa z=WOF$D2+J0$CjiShqKkb=a6OCw>6AN>|S#2)d!xPfN`u}=bEE6t5=J^XY# z-!X3S4r^sD{F%S}4G=-PD}m>nX73T0TasL36HX;Becy0<|L1+w6VCO>ROv=D?vry9 zUC5p=EfPPdHUxJ+t?t-gFAFfqch@!s-$zkkT;Cs3nZb9`b>8qDuo3!!4hC<;T}0wZ z-^;WiSr9pXL}M-@>w0TxLU^_YHgcfv~f+k5S6xwv#a+$4ETp z1O5RE7&7Y4<&>5-D~3OiAuPK(2!6M{t_ z@G%NW*foGV33QRKPKt`V1#Fjd&=~+Xm61ZDaZRfw^7HzsRU~&-$ZM4ae9j`Mr7YmH z512u{R{&eyqQ6BZFme?1unm}QfGH#ig7;wCYjE%~l+|N{{Q!elo-Ud&SiY+&RN#%| zQa+IDTihA`n!w`~vZf@OqDLY0E0XHtqLd)mhYOFf6G>1Y*#Z+oMHq*Ai8{IGyKrz*_=BR0L>#Mqw1^b(_(- z0(Q>Ke4(QD>T3~vPSBCY^7CS}udNnwdyML73Bl{WLC~tzoA*&)Unt&8!5DVOHg))h zYnw!p0kAN(AqfD(G++mRzaPLaD}P^-0CSwUox|qB>`xyhd_E7}ccR~?f!^4P&VwIy z0Y@(ZZ+o1xiRe>%p!Ox>M#h6%E{Qeuwzb9*e~X|PaHKNw6#gfe%o zI|d&Yi(O*JT)$d}o$a6ebCC0t22$c8UtHzJFH?3GfM2r2y4~$xKeV*!o%Tzov=Hy= zJum(awU5`!Pd}-^0=7L%bd+&sD22DNJ+BtL_tSAK5A^u z-QYLrDZQ^#AuqEV^};yd4Zs3#=nH@|eFUSAU8WZ7X0j*r(!-GCq?y6B(u1L@$mCjL zjk-yh!0n!H;W$xw<~QE`&82!HX{~F4HzC&r@)_LBPeyu6iDEW;eb4#I^L)`3fpn_J z*_5doEiqfC&Ak!0mEP}MtF;5$oEImrd!Fz7IY}E^UUrCcrR~i@YA1q!Yo9ZHO-uGi ztl#x#L;Kkna}?!ecG_DGfMBGZ`Msj2L}aH#k5-TuaYb%7ubF9n>q`@xI)cH8zNWM5 zU@+&NGMH1GzVN2O95?KMs5Yqm)Q1Jk{6h9WM~3xxTfk^Gfs^PxmvWCZ=1zz@x{H*B z!l#Y_%(rAl+iALwU$AwLF+|a07bAkb4R`}!j9>$`gP55s$<;@H=dBK*#xuS`*VwMT zwudmLyEYTsa-}Ow^3riBVQ|kpR^NF3JKCr}`5OS&Z|?aX4{u+8`c$71#);#Fb^zjd ze+a-LkyBry~>>M=>_3pL(Gn>00mwP!+N0h`;lfMZ9idU&AI z&IAtUr$Jum9mvh(NqNXIJx(@>nXmx@o1$n1@ElMyOnC(NjqTLS1+B(t_@nc+r2h+h zD*Y~2`6vhjm;6uKbfh!*3Yq5bTOJO`B6o6B1Hvx^Mx8AVfD(Q{zUa04`RzcUo6x%O zD}6x+fqjQlx$vFPW?tQqz_RT4#6gT2pP&8+EmxS*{+At}_PEu2ak_CpN!#=)PXwdS z7X&j1xHIMXNbstUVhwUM-(1w6clowyQOh?|+X=b7#FR!k5aXdWURy`vB0|Y#l$0t{ zaaudg2M6=yE=TctuNQ=1{V87FsG;pNxjMR^w;E|dD}W`V8R zCR+%vqMP1>*skeo-bkvaR)!zqnq41EV~pK@PdKbPKQV=SK&+8;!9dRi0X)T#ji;7q);Gg20W}XwFQ{ zw1{OXCg$32+29fTcwWm6Pks_OFP4UzpzWDwtGiof77_*!u5&7Tpz&B4-$b8GJZSZ> z@{vJ3gg`5nEW>dbpGbO;-)$LSf#Glw@u3rEw9RU6? z%KD7K!meD?WlqB4RD_!wgSB`CcsE8dLL2RG$o)Y=55Ql|k@o?xkri~ot)!484P^H* zsY0Ui@Rl^H<>v`b8Ezzz7_t(Z_bKlN(3rQ^Eh#)2)wZ#VzNo`P_ySpfv4dZG&KOxq z51+Z;2G9@yj+(R;enAu#9Vg2P_{*jmZ^&wy_UgWkiG6rf}z zwFRuTkXLvHzy($vOCNBNR`MxS?&XG_UgY8u?=i~G2HnV2L+s(-ZTwxTY5{;7pL+P2 zqPBkf=f-LTM+3j+uO1}BvLU2z#U9W?H{K|Ji?r)>`ve|C;5+pIU@_RY{z%ZXVHWT@ zw##N@^_?!kTH1-x+iRA66xHGtp8~cgf%z*>0yn7ob1O=dk@7Ppx)noy`kXy)L4#Wb zVIsMU&s@cX{iw01$17ULI@PlMA9CI}49JZ6a>#h)i5@7CPFh!ExA?0Q&0hGc zid*JxL_YV7e@0td8W#q;1qaOT*oW7#>JzNrh_1)ryeWal10=t>#2>=IlfF`4W zk+JQ0YjzkVL2`o>S{Wg+pY>iK z%s`|V^S!I$HU1hEL|`%1nBxh%Pk8I{^#Xvsc}cW$04%2cJ0`GuS&cjeDB1N3fP>A* zgq$fah%h$5oB&I!326g3R<1ZW2<#hujj5|O=aBI`9#VUsBh|Btwe53O>1}54$8aS_ zhc=;XVb@FRcj%9(_|L?Jsx^R@j^IrH-vLOnaB*Cco?)`-0e0g~33A?-JA45mx|u;3 zbme_m^Bo4jVPZj_Uy89H`K{<;pM!TJm>U4wa~gbfB{1^Sz42kz8^4^e7`i;goRVL~ zlBJFr|L~gU0@S{;Q_QcjBe=ED@<8zToDuNpL;~fa*J%a^m&v;1vBwr@0QUf4uN_aN zM}fV~;z~_Tu%_E(VPbq-dKks)#79uJ9fV0D6CLR|nwR*45lyF_oqaNN`0>58COG(* z-Y?u0TH#Lvc%+cD764lxTEIjh7k~re!#V5|ImBOoO$7ZBgzxn(Q1=-vKBDl)KJb@E zJ_loEdQfeQ-{1DEf>i?F#?s8tK5C~xLL5Vs_rxjF2{j2)=S7+iXj&f6fD zjL!^R4u6rG)Jb?dv0F?g#~zO7iQx`S$T+)c1n0A%V(__+UvrYitt0v8kkGKdE6};zq!lft-H5KNYS3fAh_1f;0%_S zweLp6>{S(o$~7JEBru)2^M`eTWcdVnt2-3K4UOzDzmfCGpS472WsN&lK3L?mIq-Wv6O1m!O7i!7Gy4e6Tws{w9WS%LxdkB zrChj)+xQ6Ra_!!4%t4wTb}*MLnw{P>{a)1!LoZAph#MC9$ghoG#9Y2KIxJxLyOL^$ z>C<@S?H5S5`UtH*z+S|2F9N`~5MF;~TyN?3zu^XZjJ9~5RdoDhYJn0y+8I5l%0b+1 z2Lh)$k74UtX;lQ?@?N(4J7>#x&dbIQzWS@MICeXQ#J@~7$dBAsYD-6tLA&K}wQ>BS zkDtyQ7O;vQM~4Q+lJCldlJ)y7F6aR7Z%$1Cfa8BgF)5ovSimuWn8AuuQQ{rQj!t=EVL6u$B^8H)8>(BbdyU z`hO_`!x{0Slcxm1mVk>nc&h{x=>cZZ)u1G~l?dzSPfP+SY`PaYqjMzQsLT z=)=7}ATUSFK!<8H>;3Y!m`mn<&si76lFuP<{R^&RmuAmWe~7emHE~@oL|)GOk#Rvp zI@1wGl$5K+rpXqmhu7je=uJxlSj$sAxT`G&3;wFWQ*2GwU2oFOc6WcZ=^kIkM?D^Y zui1;x;{_F=Z~J}ywR0RqzV!b5a`b_oM@H|}rucNGE;e1Ixl&za&i*ZQaWSVz#`;qYHj-uv9F;)XhqAK{ z`#l2bR27X0whDlw=9~FchN~57A_M90LASrRa$lH=lbe~E|JMq|D)`0)ojn+wp}iG` z)szFkzM%?2pM79dDsI|`+!%$w?!DdY;F#%*V=l9~1G9Qf8Bc)qE5gO;fqP@%QO!rF za(QoJ*6yl6TKvJdMXGHXp;&>~#iA?zml_C=w_uUPPSOs;t_iD4Vehn5KO=VUz}o?3 z2yKqw%rUPeuop9n!l-t_7XNI9fe*$UE*;Tme&R{lydik;G0*Wf>&w>uyj7CmZ8<9) z*Irxmt2kT<*mVr`Pl2Af7qA}c;{q4oSU%taMC*1q??|)dQ+YXb2Vb&X&CQeCSnQn) zxn=MjnET~EKffE-Ksc$leu`ZIcR}x`R1kpb?F8^|a@0Ap;H%C8;3!eeJ`z+%1zU81 zWO>5D)`arY@k!^Avn$udeUKJ)^>sed?v7?$6c(=pg-NnUSKBtulM%nIIaYap zTlV}5Ui7f&LfXe6RpQB?mh5Sx7=wAFMx4ywZ{O4h9N2ka>}CN&LI7O7pxOXnNqfPt z6kc|}v0c!{XG8bNd8nVi~AJChXE1>s=!n@2OF^bi}!Dv+^@-?(R0_+xb;4~4yj z;dK6@3XYyyo^Jei@HP2a+6KRP+=y0fpN2{Wnx-Z&3V?&uIcv1;#~5|S{=$m96;mZ~ z%%HJXLAl@Dx&m4v4iJ356F5&6{;p%!xspUtD4u19sdaOHZe;bLq+a*Olp%fPKTaF| zR>Uz}UX#G8uGsVa{bKlpZEh+MpM|@Vchc}9bHK_perY|X4)%u86P!zeT>P}|K(da_pSL#1YA2XOf<|h!oJUJm_n`pN{7=-N*h9@L!UU^gDSzZy2TF9Ja zTMgj=@kj`r&DcLj<&ruCJ++T_CL#{pp8sUs1ze%?{GC-zD^gKbI;h8L0LRHvGV_|e zjbS1eHkb3+3EWhD9N&JO%Pu`DT2Zb+zCl{#^%}YD3SW1KZ0WU0jQ{yM)w!>Nyj4Sl zFw~~#D{0ftXMGNXWvLng2QKA3ljs^kJuSxh)8w0l6-TjMFeEmPz0urs0AM*z|H5M@`&8rEAu}i z@z0|=fV&MG$RkHa%Qf|e_zQqv27*PY`n1V?QtowJ*Is8Wq;T#e;ZnI)+{|?sM0){t z-y-Ge&ZT3f@q`Uu}xcSiohfATtrwp?m(K4;hTEz(+usrtgXugLZT?AF$LEHHIhuKqh%Iz@v)ShFou%UHlWzB3}pC7SFFiM6I0_}UNM1D6RV zt8~)+aD!^K{4S_>Ugk`14g=p_RAfyx1c-gLapWz|ppHd+HPjdht8&H{Yu!9L$*z&8 zs&*v9Fyik+@)Z z-Mm8VY4R*H#IUc(Z=dFGEC8k$B=#BSGJUny*uG&9JJX)aC8yU?L_yXKL%hA>M{3GGdT>1`#pLwYft$3~%;EP0pZX_3U zF_2C3@3r_?@TJQm3W51ptW%1C-~EmovkFy?Kn1-<%%#oAo6`!vc=N-$~YiUp)%Ao^*bBiJ)H?yv-m)cDiIzz88VdT5&+<1<<>TA&MTsZ9=xElT9^j-c)7=TNNtz z9D8HM4f%ldhboBqli##_vIO8ZfFGY26wK$1ZWI$m9ik*stziC|YN#kyxuC;a$5!22 zz@&eUDfxQ@VmQ^<1}JT_3Z3E(5iEF$k_CJO)!x_>|GhF$hdkggi1B(Z%MY^=}q? zGNvhQ>pGA(%H{My_-1gX&qq7!d^UQZ8{72M-jsjF&}xA=H#oF}X3dxXxX#xZUo+Ez%ypIKeBtC+^(v(x#KyYZ!7_(Ts)%)ZdYos#(o1G5QWg+L3!MJLY?bO&IYy#-)tIBUPI0M<@Zs}0}= zuulE-EqDxeDt67E=`?{|D9s)0F3wa0d zbp6ZsxMz#VTK;F?n{qNaj!qRs4ovzsJo9#=Uv$Ums($CfxEpZ;c&t_Eb{yvdOD}F_b4Ij&ed`m<-v@!?C6*HW>#$~~BL=Ib?oxFZ@cbe4io#y^ z3oMYrBmVY^mhp@;aCfsCGvy0G%sIAWHKO`JJA$pwc-vn*L96lNMpdB0NIh(9VmL2d zSu5(e_8EhDkq_W~p;_FachA5mcq81DUUbHy z<}HM=IDsKrj{hH9mDeM@4x1i(;d7Q;#8XrMo~s7=61*;X{tmzB+I7hX>Jw(w*>J%3 z$k$iGArc&E?!>!#s3opPl1x!q$zC|$+|(b*@CCs5pLF-@XB3~b^5p0YByc-%5l8{R zW&eI!jI@N`zrHB|OLhnYU~*bi8*s=}OEFfz`DOs;{;}r7+n-?5l>Aumb!aozD;BT- zTrTKB@LA2AEuJ%ly->M;t10p!;%{^x){-jg(WItyBe=f+&4EwR&}YDc6}y#DnOrfC zg#xWBc}krG-{G?e9}5YqQ2K9FYtP&qdrLA-(eM&aPx_%wBMK6KmEEN{m9f7eu#PZw zAwCdT#ITL+BOJ1aW{+f3-kQ99Aa0qpwpx43??0mjk9mc%v?JLX%F7mu}_?a9sa0Z3(jdb1Y)%|?aKavP+Q$D zv2Vv}m`!v2g&KgULxSTX&PiVY{K0^Mg}m%buq`$Gs0|a|9tb8PAdJDeK$s(=x9ml4 zvUF@;c-`Y5OmOlzjRb00n(=Fq5hG+acKUw1=A)XA1NQq->6l57NruqqVIO%}B6Q@) ze6^bO6n?{yIa+rI)=G1aVY6B%52N{hA^eKNH(~_C)f(V3FarKdB6w$V{fyTU0 zq4Vvl>bf)c{sEeZsKFh9g}+LTfns0G-uw%Vabf(p9CzUZFFqaBF?=6} z$%NnZwNBAZHf&=fU+aayRXHQB&S^u7R#r%4`I(JiXkG043bh=|V5^HvkgLF|KHGv| z%tr7=+RD;_dHOhLC`$u_ccy*#>08-pvjl|ch-+##6TMQ{PCFqy(x7Z1@Q8Ot?czEd z_8SP#JAP9PHf?Cc_G+&!;+zG7u(baUYV#Y&bXsUZwH8@B_r@}zcRU2FI~KlZ^L-yH zy%$G&M_~tK8N0|o-8^OJncgHe(mLyM6>kDaC_Yzl^fI40AeO05|0y&JdM+dM_oW_s zReQNyq?H__QgN!rZ)i%XlKj;(?Ojn>{SnR;bOY7~or}@7XP z^t5;-M*L5E8B%+u?QZb#C2MfwX$2=TWWN|`Bq^-K+4)> zM?5bHcBT)yA{gnF^+gqe{j$TQr0)^2P?q#pC_!|kFUw!8xNTcUr~c52;E8UJd~gh( zGqGDXE){|k!#$`9W!0=@%?y4Xx2E`$wfD)gkU4Z6SHE$#e7%~YDNI@uD2`U7*9Fez zCW$qpAWd%Q1;A0O@eA}%um1^y9<7$Ji(4W~Y}>>mPbeJOL3TE82Qd2AxuUJtnY4N$ z4u@V&H_PpJK|&apogWKOY6dm;@J*9qHGVlPO6m@invJN|4O{kh*}qu8q3S7Y7qre_cgYD1&v~F{3)s;5dIsDUFqBEQ&L~pq2)1bWEq;Ff@f{1Xs)SXNV;;jT&B$ z;4!*uafgl^>=uQ6EozOn_xtVO3)}(qg!H{gMH#1?V@%5DHBL)9$Km8->`gytky%n+ zxUjc=yBlb3LcT0_%9iKB5?Hsw&S(~ICELl@C%IIS2E2Cz~|x*eSg}3X|t7+na!~e z@0ei$^7*Mq-M+X`CzQWkt+n%;y0uE7ry*ynrFBGoFaz5pICLqq-*gYKspnQ zH`8LiEE;2t#HRE{(j`N+> z`F{_tFZ){F;}ceI2^^bzF=+1|zBnnem+FT`MLK;!-citDNi=zAnsR||!DxwU(gWu` ziRX)ynln5?UDQNaGSv4B0|IZE*#pAZfu23|2ZM=R1JbI)CvsZ(#x=7PNQbtACjj5I zLL8Mi?LAlDGkAqCD;tW&PC?+2wE1ixUI1+4SOqYpB}DjD(T;5cXA@rVvaCZl^a z|7u#!hpY14Wj9_B>>w=k6(XP1G(2}p+J!F`)-gn&hA8BRs}sZQG=HabyI8;~Mg3Ke z1NGH)cc4@o-^FuDd%!1CeC&%a zVY*}RoBduLt%36%!ml0BdxteU?;z|~N}Ot7O}IEpfS7I&@5JTB;!w=c)>rqf@k_Fe ztFU@AF_D*a2g}8Z*wZN&uq!Y^DyzOFpJeYzUhON1R{k+Pim?i@(p8<3BA%1|y8>AK zV&g$Kq_lE7fK|=`2%~oFM3!VHv#3NGQ3SwBUFE*Jk%*&)Ak=VS-mpzi?Oa#lsr zkG_NHYnjXd7zD>&-^4SGXOyW+&?OO2UHGQqAo0-T74rxbSNBs~nueqYCZL5DphsYmzIp)$88nP*>~eDYzbROLyZ%|KBk=v1iuw-=2dH} z>jf*umsgHlTcE3os2FXitK9j%p(QHw2<_m#4W(LlSRwo-1Z(fGw)XUEvVLmR$UE0h zIL&-Y8^4T))pFCdAjb-N$grXj1^wv?U}4fxM`Zy!WwJf7LZ~4|8pl{4)Fw%zloqfK zrKv)&yuS|-=u4B=05)Xb1K7QQjCgk!@~DNea0M{x>(gFV^}fF}MiyJs&FR94xRx?@ zs|*)+_@eUcga7QT7HP1p-Su3^`I|QTl`EIQ~ zV$X6A`a5fttJQn>qV*FlYw;a_Bm>xA^1uwpyy(93Z}&P=m*tK4T$et?Xocc?0pS(t z$ipwX`_(Ok`EWaU(^{RsONP&cmk(bz_BQW6-EIwEV9<`s0T$3pf4{@x&%LDwoI zo9!Hp_roG)hhAH2knWiaqtyVMLCxdLo^It5z@(QGh)bg*j?G^*oVm`FkwX9ygcY-9 z0-IsZ=;&@pZr?SY-47`yCtEWSbUee#EElv<4}L%U-T*dY!SAd%2z`N0zWX)KS^Qb- zwF5ArRhphp@1MUr?wIHNch!GFdT>FtvoSp*I!~$*vBkF@@rZe5S)=Q?uk}+*Ks+23 zBpH&Bb|tXD>qpnEyG23RbslHljw9X{-sR~G#qAA2;iq&Pk&K94-h0Y{i^nCxU35I{ zKfo&QdblRBPF8&s1Guv0F;=(V)wvp$VGVkZ=Cw`cdWKpWo*Q0>zUXSh8QwjVXsSE_ z-*@5$;g&?GdQSWKyfXK`CoVc`y0*4koVT8G)v(%o z(~bpaR=?D0V@{h!nza86;rAVa6v(;NE-gZo`?%n}qrp zMk~6%ovdHiWNxn^^7<-~mg{2WdXaU-U!aV$`U4_n&=59&t?AqKPe7BRw`Sfy0c8MB zY)cuW>4Gi`IAWjyur1)P0dV}u*0pyzCJc<92X;PX033ES02YD;U^N6|0k0U&pefH7 zi9h=b)#N>ZP44dv;1Nqz08R#Tw?7(eeJLfcZA~9^Q`0EBXQ}z29q~-yJ}2|y7x76q zhUK}O$fz&NDJ@+9+)_w0%rtE`#g#Lhf<#(Mp{kM01 z(?^Tf>ELS&u1I83Y^6Hu@izN)*bZkTiCY-)E-fh*ij8=iQUyVpuTkxfeFv_I)Fc?ieg!N4R(%yjv zAmnU`a*Ng*o#a48^L%9!u%fWOhH)LhEjRM8fD@Zoz{%p;Zam5Y4y6Oy)~NxkSpY8q zj0Id-uRi{G#5jMvjl^;n+zd+2VfH=PFQWpl0RH+8z~8r)mk%vTJ8edMbA|;MQgyp8 z{>u043}`WlKlLc8P#o-*0N(1i zC+mXaHo36hvTlN8ccHu znati)EK$@PGUl*P8Ke}E8;_nn9D}?W`iO{8$_>X1EiC}7-Fb+dMp^`mtR4tH&{P9; zn)g>c+3QvnG0ztdUJ2JDyd{TB0f4@#VcF3X)ng=lBLGR$ue#aX-9f7=m z1z*H#U++Pn?_TfXnW;bxDC`f8`f)Yg=%a)jn!DiUPxB>wDI9MEgZqGhX(@n6Do&-c zcNw`%hpCM!_$cP7k35fBW6$^DS10&NGYr=o2)AzG@K>r+**({xuW2m!Itq&}I}?B% zS(W{6rV$GqE$pJiNPap5c{plV-4lwF1)Ov@fXTuU+rt75C53l#TXK$$q=0Alt0Hmq z3g9ma!d|1;Z(R9T-xo#&seHh|@r*s_2gVm&_7F(|NRL3KjPOKEEMUJ$5Yg%q- zeep65(`}$&;Z8W;u6ogj(-hu5Jy}J#L#AX?hXICn0lVMh` z${Rv6{%*%e;(lZFW{STR!PgOyo=wdqFkC&W@)l;I%)KT@G*D=PZcAmB?-@)}Ez$yO z27plm@ZwPS+spEz|C*lpCi521e5qYL^BYXx=d;|Jy@oXaMs&Fq(ty*wl5x-DU&w~* z+z~Q+2aOTaqLN-dO>i1{HFrK}ec~vbL}$jOdrs;UHJ`GD}5-d2wJ$+x0lNG5S(Ia;oxat*45cgbDxN+q;=18b=bg! zR?Xi+_0E{xzt%NZ-tB;&?{3}6rUf~2VEj3?ah?gmD*)Mo*Va^_Y`aCSE5T=Z|=QI@2*seVfrNMQmqx}PM*0bs9_Q~J3q2vBvEw#z1TUet;x;+ydz<(%1V0KVpwu*#{|T0oRkMi)UehahDD6 zN-Y($HaI>xZ(|bNis?_<2!S76s+iN1T6a+!o2=R2%(Smd%Flf8zE?5$uwjcje-ETv zmY7tP(Lk*pa#Fo9ff;`g_}w{?b!sQaTkP)+ac$ARLr+>R!Vfz*vfBf73zS_R9X;nC z!WE2&9RI*&bj#pVVVfAz1l-xSSz!<1m9`si_X^=XvRk9E6LH)Fc<#-(L<2DZCJom2mb>d3z^arvm7)K~ z9|xHO!0{KxZ%oSQWeCE#_mJ_v(wF@h>Zz2cKB`rdckMxD1jARQC2_o}^fND3H1=X5 zA&-iX+yh>HJdlpj1J%~5@+6#K2Jn-qELoSeqhH#1`*v=u}Wl(a-e=M3@o z17K)num*FRVaio&%Buy{rs}A5i0;7b4u{qJM00eQ*W83q{VNE6KtLERp;ecycL(3Q zozd977u6#CD9`9x5GU(aiL)GcmyewksMZHW~ap7j<)c zwI7Xc3zZXivgo&G}!o^y#Rk~eNGUQa z5`Q&LZUR_??2{GahXSz1A95`pC2IOT7{CG30&qOL3mOK;Q{8+;b~^1&`uy|H!rr~t z6jVsLHImaLW>cVIYA`q+Br)*Cw%YM}hsXnUe`iZN(MRE!PGbrOV)bEW$HV|ez!Za3 zVgE&`kch3lNDi%ym*yDm#LI=4Eex)BiVf$QmEZZX%^Sik^g>`hQ>m?- zc-M;WA^c&Z_m1WrL#ImbvS6vgUi~#(MAJyX7Jcq6jC?%rbudTAD}i;_)Xt9tco95S z5Qm)xuN}<{^`Dk4O}}api-M0sqJ{GEJsGsAUtYM}8O9&1eyXsF@OVAO(lrQ+D1)N6 z<~D%U-**8p$tS-d6PA{=1^}0`OKX**k&Q&^`^SyZ{EvvD4ipoSFa;~#02H!76Md*wFLGFo_Lka1}h-hR_s z2#iLL!9E1frCXGqM4Mp{dzgw0p)!=+=LmSt24n73@P)ugyIS*?`?}3{%yjH4NXc_W zw6rfHjFS9xF>&@1y(q!ySyLI%Nf!1*2kHs4jsp)^7npj|)!i)h2YZR!zHw=R7HgAX z*{dfX=ejF{JtAV&3lVJreV(X881~M>tKq)4CjZ_oj({)ygZJui+%WiyHv;_k5QdGn z5T?9&hrLajB0#GNRkIhk$W z0bIQF%?Ng3O0$vttv@Ueh%0$fh*l91dI~ntL}~x;*>(@$!fcLye?H4%v@f}3XcnS8 z8C(=;!SRT|&(&;U;UdBiE56uO4B_McAeF~a4UEEm<>7Luq35fV`&tj#x*n9mntuF@ z_8v>gESfVRa7AhHo@PB((IP8VX~{BKQF{6R=XNY~)L))jEiv7D1QV9U=nT~{2xwa3 zJ6g`Q{&ua~&*~Tl;5DL8jOM+T7HD*3!kWf_r0Svko`?b09NjYbjZOYo$J3w1*E0Fs zH%MDSye7l^ckIQ=+BPiDY(&(%-IFb9g!62LEycd}*+(vWfn5ZJJBg33YD4P2Y*$2# zA(x?7L^{W`$Z6km9p2z}g7y(M`t*el?xnXZi_E;lnDFt}1qlDd=u zJ5YM8B_g@%Vqo*vd6{3ipuZsqOFSMH@Lw~4W2)?vIz$23j^ZC=0iWPiJhW3$8o)ti zZ72Z8d-*u#sWN%>EC6T!q!YcibNL(WxFVt8< zd=YqAoJtVR{~!aKky5hKI|QSa-?{t2du2K$-yv8VHn}JJQ2M>KdqNFg<(9qZ+0;S* z3ReuQGfZ_ZSI~FM;8tN@bLQ_PzDczGsBc53J3#xv-oV#_{Qm~Rl=pkGe#P&7l$N$U z&~u~5;(I1rC07^O;r# z=QV9Y@Hpg`@!q9m@MCvnhUHiL)aJuWHEm^n3eE;4_8u&on!??li z9=>SDz;^)VOxCe?5Z>taMHXZE*5AB4Iskrd^;nHp41_tM4#M{p1w7XepU^();Xh)j zvccDGv`X~HPdYA3xwlMR5u7x9hw)3|N|i8n6%*r!|3aJxdgzJNZH9&vmCFc5uIcKa zxBB1>&=Ng7`=Dj~=2#5m)=-K`@plHWVOn9(eIN$y_`NnOHKhQI1sn&TT+pAb0M^5q zGb)T(4ZWXNTW{bvmbA$eH+i6bYof9idrw|HbMusw4*briTWmoqd%56y3SOJ8-e;OJ zdV&a_vw9RqGx76u=F}ivJ5TZsuvBLKMg1W9X`nJ!drzRtD~${!86&10yhjPG^7tR%iUFKea5I!FT)n!d@9%&Er?+t@tYDW#Fhp<2NecmfDNf~t`e_D;e?>*C zqb5WEbGe|u@yc@rF6c2J(r`hiJ_%KqAsM?uF4D$#sbQcm-3F4mIn$Ft9uvI_U5{x{ z*A0N1)4AF%nuHg)+vILG#b6J^zz_=Ai~@Rf6x=JF!tG3d3E($3yX1&rR|HNxo$TTC zoBCCqmMfmL>-r-;>sQb@)EkLalb`iC{IHeA!CWYLEapMw&c&6ybo;HW8y`^pz!@gk z(+VAkT_*x}b${ovLoj~02f~yt_SdAYSG08SjgGeAcsh`@e_+3P4?f*Zy@B2jTaWL~ zuI=63O$<%Bk976&OZIEmln(`=mA?C0>mI$W;R3-T@uTUV3^>>>vLC&m?|VZS_5I%r zrce1E!f$eLl^sl#>%a}ZuIhXy`XKeV4ZY${cG5Be(mW_|?@`|(u!^EdLn&sk*QIpt z$k$AMLO&G$TqBK=x>7HoMO`?tTW}-la{5bM{yk$5&1TX9;14bpL7M7L5_TKrHh=-} z#s|%af?nAz;J*NHQ-wj>Sq*2NKt-q%wc z>c}cNWuhnfs#%HyT2~Mgaq#vRb2z-uzn&$sb9Dcr7VNIhP!-#~+L$n|0M;^j3%t_Et>XsQ_3Nirz~Cn==t507eslGvq4a7$r%wzjgqQTG}5M^beMY$hQfc z2CsJ!ghgZkT%C~IA&G`xN#&dD8hD;Dhdt#hY3Z`7e}h-Jf~9&0tjwOcx#9P@&4CDj zv6@=xiT9b&f#X!wX_ymEj+oS5m#BveeZMO02;7~mQljl8BkV?Pu0-`xWe&?w1iukmu*Xd$MS@E{RLY%zlhC@pXpOsb+O+o3hwoX%gfaJ9@r1qDzt*L3fo@4dv^~WM z1BOTT}fcW+nsd>BL6*teL0!!#qJ!(!BM6! zy^{5ps(ORTpo(u34Uo=0AhaTH{6fBqNBljI7>sG#JI}Xv!}a+2383#jwzngzH|YCy zJYC02ngf%Ulw7FlxH@fAd3fp<00m!Pc-S3nEn6KERn11>{l2`vH+Awl$krQBW4y=$ z=B`vNroS*KFZ5+P#V7O`5nmAc`w)Z>_9Y|g`)6lKGvVetT6>)6Y{d@`| z##cO{wzm0E&@SgQK4&i^io3sMblQc#HUGLbWtRCnsRd`YKwp>S34Q@!leB`My;As1 zvhD#KHOg6S+m;m3-~Z*YAL5lYYXJUcSis*0cmu@U1AUKQu=|;kJbw;;=foQ!{WPNJ zZ8h*G0Dj&0lbsW#9^}#N4KA`90GD&6M6R?X!|0QK+L}%hsr~aY`ldytZml(Xl-;-^ zaIR;d-yS186BRW#P`p0s*KrJ7-5oQaanBe#5R3r~g+8PBN+8Dk{PukXPt z^{{LqJ`h&0?M3{)2nMe|h9L0c1hF|B4{riivtaM6K3ehHyvtV;GQAW)e^vib9BIzr z)zBGrQG!gHJ1l)w_JOf6f!k{c-*+CKu!y#~C%1K0Ej^KXb9lRe27uE;YZ*^k%rBX{ z<5|6_mtW&Z0C2$Uqq-+#WJJt#k+Px?7Vt0ehy_1mn!S4+?;L;redrD9Iev0=g>ho6 z%8s8+zF(Hb3wtF)vZN&dY8p#le^0GG0_McuzHg5yH0<8Gpo^nezyd4)4#dtfq+QVw z&sf0U|MlmYvr6c9)HR8sZ4!T$IXI$p>W%r!f`(WCzj@O7+;+<@Tc)l@t!K+Ue~Dq8 z^YD39PqeWYDNQW^tnTDG74(Qg4b~w&l#sEifws%h>Dhy3P$2-BZLP!h+!8n>V^j4u z1b)shj7GP=HZUSqa8vVa`?u2WsP%x-XwX-M2VztcLfmYw0;z$^1idQ6dPbxm;>nov z8)0bw+J7C1cZ*=4ut9K@Azcrs@12kz3`6>R5hj0-Vr&pvckKaOJw@gr z82Xo5hvr7QN`7*`N$-55uKOi2?mTI0W3ZI^IVF8H$XPH~FKOh)f=N7d^uEWcNi%Ld z%wsOO`Z3!Dt@32?*2E9o&kKJmf7PI9G^m!#d0;oDsGT%)KFZR`z&il{aJ7Illo={# zqwq@$SQM6I-U8sL?(IsyE3Y4p?u9i7@eL%$ZJlSj31trg%_zzYzBF*rZyOv5_zK9_9gz& zE}n2c%iOJa%z6_4tlwqYuGM<0t>&#{R&#G=jLI&Z))X=piN=O~Kj19u{u>Wg0W=(@9Uyq*}V+;Zrz z`fwVk=v=hhIpznw*~r;KOch|=1NcB|m=2>(^DfT9>_S4_Pd(+OEZLSuxz(>As~7V( zo~!YTTnRrlnh0FF0BQaN2bt8-N9jkdv}W}Bswi3`cy#X3L2;9S-!XUt+8~(44T3K? zPSlSdeTW|6G;m58;mM(H-c^4O{c<_Mg(WaLlW6l%sY4l|w(Y+&c;lxvY%^mgG_XdQhXuz^`P z@%u}&m}}=#p6cH7dfsZ{S+T(b0o|NAEwwS0FN4;4LHLacgDxar0dTI*c3c4bgRlyK zP1p`#0bBG{)gW#GII90C`&YP)nXzjhw3j2nvjJS4kYw@7>TSmF=T5q{MB=c&1muxs(<1Zz&@6*>tb(W*6}nC(ZpqKf~WAX!UTwI78(k)Q4ORn0M^-h z1#g+?+ZNtw7)5r^o(UvHY@Kjy5TwEwk<^MH#&!=V%yb7rh z&#y#CF*v&(#YByB_7J*3Oe|KV>b0A@Rj=ZVb+*+jsZ2tBA3PqOB!V|Thq8S+dpro= z_fr@FUg%oax(*kGT{CDW-pK;CY5>6mqc?c;Ky}fz$|XGmIDF1Xn`s5c0*)1b27%Ax ze_g~kfHN>l=vB!>5qc_#xq_{LYZ`Ay_eCG&hhG3JJzn+iuZ7FF9LEK~WI*U05sx;; z?IU3EN6JW$oqwW%4#;UHx=7$ohxu zWpK)4SL4wEIa8Fl^m&(a9UJIDHt(G+X_uqk#4pF=rEmlFtL)a6-<*B^?_&?RDlA{G>M976of*t22es zM`9s9+w9b)Kn89APs+KI?XWe8e$tZDGrPT44RY!r*d5SX|EyQ4VN$)6J^tkY#~}Ac zjDRRz5)igt7oKMQq^;#e&pxON{3_C5dG40g;1=Ez5G=8Zd>%T0|BI&Y)Cg?4b_>`D zmO~i;!(Rv-Z0!K9NGt|p0Kh?D0r+c!-ii;SvL^;`sO;Zjt>-d$wSq?9rWRy1M@!9- zX$zXqqw01Ltu1CmrZhsN7GU1G%ue^qdn*^w3?#1 z^OxKfL0@I}CT~;+hW=TV*RlTx7R>NUOwnAkkL0{Z7V1{;v1L6mFZ2+{=4E%5(A2F5 z_U_H!NyT=lC%Rxz<}HHv4DP3W=P#A^Ii_+Gb=hTp<#M#{7>phSK>s&G_(Pv;9KSOK z=bh0Vf8XZUg0p&9ulP&b?>LB8*%DQBOevYu$_~WCTAfCsnoCC9o9?o*PkVrY0XO)K}b_rf!z6N7dbf z*J|U%X`+QagK^jIAh#W7cX!o3@p5YjZ*E(*@O|xdp5vUi__Z|GG3W%03)-E3bGXkO z;rBTSzW*`_YY#rX{ zU|i7f7XWuCN5yOi_CW>U9I0Ob{^JkzK0a0h;8-{VI5c9f=n71OFrq*C)$L??9iLtb z5FMw>et|O680;2zTxtWZu{aI@Q?G`Zf4DDNkJU$IW0UeY=~Uhoopmc*bHAOg$>)z! za*UNHw={dbrr&G4hXG&xp=5d2`?d^VnozX%1je7gYHQK|WD__E{26&^I|Y2-B$wD{ zQ{eI-B4}2He)S&z!=nKgdc9Wv`bK?He~)0R=ed-YI)&s)j^BGiSAW)@0*Go+v|^W}Yz|@oT-NVtRq$?k1t~){#NYXTsi`$-eEs%zWnI z{+hIh@9S>A^b6Ukr=Se=YbqA-_jWJq`b1_K2>h1pJt{p^$V`v~BlqNV_wipUe{_xa zOVXaA?}6QPHKV*B9$Tvzj|8q~iD^^X{g{xg-=Qkj4e660Ld;(gIOfUUxvl>r#8B5< zS>jxi`6~cN9TT;z)gMy;Sp5CanZk><{z@e~!|IBw)E40D>;hD(W z0UR#`fY%PcXgzZ`?u6YPXKj)Jj1A?rH1gJk&$U)t6l=}|b~O=)j;*ICEQkoNR4GTj z3~jAj)?8K6%w{RpcqXX8Lu?DNAGq74_ln&UkLPe6ra`aN|%ucx-Yq^&kfnA zhVg7^tj80u>2Dwm#j7iwX0}RuU{&{wjDO{)4ZngRytz3ca??rJYU;MvGm$6&1G-euiIxcK+n;dg|~98gt7j$Z7r7d0Z{Q4t?Sx z;fn(S3f?2&n^Rl9rmFpK3FPl(`_dCCwhOrCD~UmLKozxC75cz}LawG+D*R^2sb~Dy z$S1Sfeg}i`GZS$4ap<%o9uXLAa}!#6l!X(3fB!Y!#r=Sb*U0>x0bJRgGlq+?fVJX} z*dbe<-3izLhQ9zfMJ{M`oG+8@y8>9{?Y|Jw78e^5!l&37l7Mm*)Ab!|6^CO1xM=dg zP`=T2X8^+$G$kkQO|%>9wod4MC7wGD&cb(p%Bba~D4TIYOUa)tsWD;-w zoL+eu*tavkmKjI#C~Mt&JND7m5Z)mb@q6wd%!Uie`COH+ApD6O&eCM`+SnZ_s0eg= zc$L;Evcj=eixVtQS55C8k~OW6p2U_IQR(Nxu(DBBTCI3HIzzV6(OGE#Cw+g3(jam? z^~ks&KM}&!GunScm5S06*op;gyLYGp(QN?R1#MiWm5K}c;ODQQpr~=}>Sq8G>nyoS zI<}*6w_MPwh6NmN8HcK$Oo(Aq0_()6#{m&?J|U|rk+Iw8^eZi0oao5`|c0eE!J}a zbu@z)?yYucDOW98{pp|{C8J!L+=<3j5(_!ti~Yt2ofvf6sW)%lcL-kE0V;LggkOdc z#APBh4#$fYW^5KXW8Pt|tDNuewy3-<(%C$NbIKIjlR-W~Fn{hV2D^gUtLYBG@gj1dh#8@dMvJ%!nmZbV`2MDEYZ5KR&(gC+U zRHy!Ne;lus!u&fu<~RHY&9T%(eRHrE&9!RwHv*mZfytVSVxPPqIPl#<*l%=6&I#aK z);`|=eo+D#2uojm667t=>Ox@4w*1m`4zWpWgFzP!?B!u0FwaoQqafDKq6s)>dYQX) z+kev|R+zXyYa$N!6j{Yy8@e6EwEvFuDl&q11peCmy_F9d&enF@zie3aMP-T#0H2BK z9Fvm^`d2A79R#K}GJh@ecLA_ID*%olEM?nJ-7f`Tv;Y{F^H%^k%91FmGl$ql#sFre z%l&2qID192m)do`xA+d@Lxt9b^gb-9I2oqY+T-y!O1d_on zJsjL`PqS-_zE&E>@vs{jy5+fU^;{9$j&2CN&~)MQYvIUuA7f4Cf9Q-WukUO!;W@o^ zVeYp3aRAIJHBK$9v>>Ks_2_pC$#Kt41oi=G!0-g?I40G^OQI0G$Jpto)ECH!{j9C| zI5BdYm~pb_HwgAf3N-?o-kVYP*?~?|TDLI7VSs2WwTtcF=^vJ@S{*UH+ zWm>Xg@ln||oC-hFZD0;pVtgk8pv5c~WMBkONm>bbS+=X$!VortHM$+6?%$rr7u@2J z850k#)@B^gaV% z%^iM~z?BAn9X8NdOj|D9)Yq)oeptC;9pE(25zHB?FxX|Q@1zgInTtOdUWcyG%N)c$ z1uzRcqOtD?RMb?I9Z5hKw%`D8CBJmm3yX+oKOapKI4gU(rgX3!I9eWC0#~_X@iTtH znrVLqLjY}f)YJK2d|It>iu7AeENeQeSh*Z3BO*18dSpo-KW%APQI zdG|%^zSI6Y0?yKo!Ta#5_51B1?0N@)1FH^EW<(+3IM4cS1e18#vCt2OJ1Pphc}p`b zrHxBQJ}>H_h5PxssmmK{sz1^^tWjx{uy_-_`n>v5Q@3*vyeh}aRt`$KA&EWZg8o4M zpP1+!JWTpd7I4Y<#RdIq=*M_{gbO+oWgYL>Rs03OUjkr#NZl;BOOq4^uuR`rKC(W? zRsd}7YCes@&;iU4NYxW~ay8?6UQ(|<3CHrFMg`zhuJ`sqg0yW5*ut+791m~xQDm`| zFh@yOg(YeMUgi-cybvVKNz{~cZi9=lr8+i<`U2fb7=TxBJxX)?L<)DHgEM>0uY-gs%0!9u2?(@W%mD z^A`krudN0AW8Nl&V&AM27BKG`m{ry10G`_^tS^P*SUOe|f5~hr)f~;4H;7Qf^f*$S zj{7uKD+R*!*%E_fPL1b9*i$M(rERRSpcgXxX1gn zJQi@XLxgX^EY%ZLE@4MM#=(B%DV)vf4MHxZ{A>5-P*%_g-);(UCuATq^xA7S9SMx~ zJg4~q7SmN^MWktoQbhr*A~@UAO$fDX>U~?knug(t!C2Z?2;NZW%#=-<$(=IEpr?>x zC;0!gjza@*uWu2&<0dQD0TC?%BQJ<}=G|`7DNq^2T_E+7?e1t7o82!|8}(1ft~&-p z=?#QAM9J5L8Y3m9SQPGEMAo^C)uPv9`FF_D(^GK}>YQV+#`WfgOfJ^koON>S5_G71hW-Lg1 zl)D8i`o^;e`D+mP$1s7FheMgFQrOIU0IQM;W_Q*4qX0ZC;Ex@EiMcuuKdyYJ>c{J00w&=m%7Mfx(J>s%4I!kUH|_Zb;25_0#QrZ`^5)*G}Z0PAe@f-qXI zl#kPG#=OllgdHg5X5X84^w|pf2@<=@W!+n2ZllxiTlK0<3|_CvQ<`-q?aep2#h)kr%?foe-6YoVJ5I2(jHs|@#8a2 zXUM4*$)pwR^-Z=oi@pV6zS$nZdkV2ZUlQMde}mVW#@Arzo>jch%NmbteW=H325*z; zu;JCW-x6_CcgJA7i`VV5Xk)D3w)};pSZDiMfsCw4;^{qrpPS14t@TG0s^nAV_S>P* zSif5B#R`S?APbySM8_nA$#K;}pAUGJaWc9f%HSR&mZf15Q$}Z{$v2)1qx9%zL(Lu1 z?aw)`@Gc~15gNmI#9RdYND8-R%`<=}zpL0F?z+W2qs zRE~$}?+-C0uS%(Lc!ASP%@E*bchbE-76cLkM+0zt$Yif4Mc{%q{dM{JniZLy7-_;5))i`1j4=y9Hmi z8d)6neR*2j$3ft4Kl|)kPOuUyBo z9D$yeVte7%FXPuhPDfzBW|Otx*x;D5Hv&0c2{X77Q4V3vtrjrbsw*!yIElOu#?v=| zV;ZaFlFmlpGPWm)zk2}3vvP$@V;c?tD+EgbrVG++0VjXYn%gr@_OC{eR#Lb#fSaQ^ z_L83=qjZY9FwkdB0U!+`w3tzNwb07d5j?~g1qERG^0uIc^tV_KJ-muubOvyqdG-gT zZ7zFO*Sy|}V*Kcx<8b;IGaW0+@R;lfOm}AqWMTuGdY8zRw!YWy`u)s5k-mMQ)gB^J zL%8U2noCtJNiDO!$g;|HSU_`!r;*^j8Tgv8Lj}8s*f7g~!AedFBQIA!OMdhaFbbsAa z+%n6b8O*{K!m<-Szdd8HuV+Wag2XF(nf@KCWqabUwKtPTK$u{aIj%%k&T-Nn0?P>Y-T(%c10y&&AvOJJ_Y6N#^eed4AI@DsuVi{Eby$SbeJe$xlhs^wh+< zEdf~SqZHePzZtZ07HA9W$Dmrn{{84dSebSCk3VoI;P2dQ^I+95q2>!Ma z_{TkfZKDT!k9`WjCb04A(SQYD_$%ZN3;4^_mcOI-`)UKns9@`ugx~3sT!|EPz2=(V zn?3o*hpi_7)5jN`YI!S*q+-i}Kf8wMNbHjY34;ZWsLS9$vCOIcJx#lhb2em;fgQ7B zpg@#h^G9&y{25|RncZgq;~d6FAL}&NZ-+K+XQ;Lk*!7EYx<@Vww@}4uN+nJS5;Qz9 zilh;Y&_&P^+9d;lzpyT))y2)}n`IYk-`h;%Z`EJl6}?)@*itJDV0^24Qt+m1P$J5W zCwN8h-@-2;=FfPxb)sw|i(~^o(y=W&I9@NJpC=~0Zt(x-48FJhu}Y_l3+l1P`%KT3 zJbLw6!_tru98)uxZpa({YC;C$>pao$S9<2F*5Mdczi#Mn3A88}!<_S~#hBHa2)lMQ z$Lo;=H}wWPWd>saN2x|u?e4TH5)7JZFCh3tsHB!F*7bY{^Yke9+ zV6&ddX!G%`TQ&273eIXl8KQObKD1@3FK~HLg7| zfW2y>@4oL+4Xrs=0pEe1T7#(x!jhcsMN^ArPw69qMfC(C&0-~FdOhZMPv%`OrP)su6_9@kMzc8C2 z%BVggCNP$FBe1EL6JImA?5jFEG0Xr5n0UB=(C_H|5srzN_&fSP3Sa#r3ZGP%Ts9IS z1WvaE&Wh;15|~!)Sy-g-90I56Z*&FlPW3|^LA48SL;aoRzr-06)Qdx)OTYiy zHG*IB%5FN}9n2YNP-}Qt84Uj4!7qwE7WVEL+<$&*z+kWDHfvC)>*1FeGO!aW~$bdbxt$rZj_?=9Cb)6cu^gJqnS~SIl`c|e5OUtNvyMeJqVJ$fW zho))i>ZS<*%L47ULb6I_1oH#S{0##b7jzNTO9Q}R0UNgqfA;{EZSLias&vr6-`+58ByHAdgXsnH#Vf{9cZWHaJs=W+W)19>w z45v_nVp?y+oBPaa?la6ciwyG>Q_e2!L)H!_%CMpUE|P;i&UY-;-D(@Bpk9e$t$kc) z2I=8DYt#AK*S3ZU{fuNALL(j}seV=5`dZYp#K+k*3fLe;=|uKys?T1xC9>Of5ud!j zC*Nk?qHj|-UR`su_VmwxTcmc~qCx{dH*9+swb&aI=`upt&s8+A7lW-nUXtHmpHPn| zY`faNzhCfdv}-&C9Xs}4e%@!Yi?{4$1e-lW`PBac!jKl7;L11-+uboIFrK#>z~AxL z9_{?n!H%uOUjz82Q>MJnvKr`tAfzQkiCYn7UCPB_`o=5at62{8tL3OW*}A5xoYk36 zh!h+~Zko&Z&E8MOZVRlbvQJ>p%InGx?evt~*otoXA`JQr;IfL3nxnhf4lJaNjIc}!m@&Yv<2)c6@>L;0oaQGI3zpROYoO5qxa)m zYE}K$)QVyM9`WP4P<;1YdJM>gRda-2Ztc;DMH6Z(&%H$(q!s`}8DeY!uuts91QNsO z;gbq?9gUJWq%naVBY1Jv>n}DG_ z6WBFQILv3MNX=%ck6wHqcdli}rL^^8#G{44uH*lmo`5EE?oiU@lT0!y7q43Gm)yRPGfw++5C zs`mr^?%B9O_EVkV%ZET4d-oqucr}E1s~NgXx%&GP6l1G^#oRu=5@0!*YW1zmr(7#8q&#v@Qmx885iXaoMy!B`7_cNTEeP(YR( z&{)7<98gaKSaUqk4Ztxy<-s~8Si#nI1Z;Z7Bi+3Od~IAXMpV~T)C{X#-^&JjVKm-T_W<_4sMhr3qcqE=Gqr+TXi2djrjeW^P4rXa7Hj$F_YBDf2_i; z1kjP&f2p-H^F^$XOkhpABYJIC?ME_(p&{#1dA8mahrJ5a(+{3I(=HPjogn@j{h3q@ z2H%C>cvt|qE93k4%oEnG!-X4yPhAc>gZ)VOZa}#;gOO^!);d1ZY-m<*ji=(HZAtu( zT7FOcn-a#1BOs(BlB2vGH^s*vMF<_ntFUX9lJ3WRR5O_-Y5Yps5hFP98`C7MBcRD# z?;2j#Q2oVS0GuUv+6)ax9r#s|QDdeay~*MQx|Dpo7!$VL0&n#+fKmFN1>EMJz%JIZ z#sfb5&&O--hvWhP7JCl`Na61ez`lkjyPaVcRShCA6;9GiH<#h(iTfY-2F333JgQzS`5H=r+h9nWPhuQw+N3k(h8N#FSH~H#m zIrCW1QYFRGI%bucvg{QDelWPM9ooUObFKm|Y&9q7sy*qMk2d2o+*%uO%oz|ksx8T& zKPhhm-H_rZ*7JzK3i@ht#70T>KO>XMPQyr}k#)nCOQwqnMS9AKR`Wjn+JCbpkTQQ$v4r})cXf1e zZJfDBsc0%Lr}6BZYPV|urwv>{CH|oVdjSRWP^UAe>N2Rpp$Sbhf$P7?R`}X3UUL+` zP!wS57?k4#7ZfkJe4Q@}y_Xv~ZkcaZ<4hxd?HPjyd@6<@J<xGPd{on6F~iZ0!7Oxv zzhg_aGXdJCWPAOtBgE-BgSodV*BkmraD81*69j*`Ds@gLfXf}N*(cfQcw(@L34;d` zAI_)|^Xi@}{?-EBkMKy>0iu*iC*!4JF&BGx7|c09Ay+k$Lrby3li|2>H)B0(;<>}F ziokY=s+d#MjbJ@d4MzxPk!@c)qLru7?uJI;QnC4;{i0M?W|&a!^hJ6IY9 zFcNFK2XJFQuM9|M)N~C6dDUthOBq_|0gg&DcoEE}D!hJ6 z{S=RB&v$ft7V@28V7Bcp>oM9uxd~>tjN$z?0}t3eo`!@?#V+r)pm#&y5KA8JH@UFc zX;0u6pM`gW1ShI;a=}7Cw)W?JE=&Ue9AX3l0OZCJ|e@UX$PankYOr6>RyO7@_|duBd+zEug&@nhy}_ z2XhrqvB_0z04}2!e#S!eG7^3P@SrdRCVnN#QejtXt7QE8*hf)2S=x7Qx1x+KbkC2; z@iBlsBhL*T?)mGkmhUXi$>gtRn1V642in$dwYP_kWs5w}WdH|&7vX{yLbE#({6zw= z30&~jo5eGSK+*{RU$*FI?e=3Wd!EBD{PDHyVC#fl%{E=$GXT2!AYC-#Y(`N>e%u;kK3e*fLX{eaZ|uvJw~yX973S8xNJ% zVU6-g&j|bmN>9ScKPB#>Ikb8XnZF4gsM4;{oqB(suB8zKH%}B*%5Xp%z>M&(C@c;84}i7)K(sv20JzwznI5YFJm=u}g!CKpUCUl` zJ0t7`G8e`Rq+0=;unf`cp+Xyxn#?Ua!RGt4$pR#QVQ9kdoLzAPVDG%j2%bh^g8CZ* zr_D-l84@#Oc`|?>bwiA+x;KPEoeK22F@aXIu1(UX2;N%6rf=fyH8Qo!b#xhKG&}8& zH+Sww1HOq>A2ueQBQ&peaIszrd6?2sy@ttC1g9D4yo7o3k%++<9t-pBNSmG7ma_#% zI>%kWhks09_)`DK|ID`h>>tv;w+GK#3Xq!Lz}`~^H+*jE`90CD)p)~TxbY{e9JyHztc&T4*mr1C18s;;ss&{i!93KpC0N zB5-gY%jV~ItX{Jf1VdrUL`s_>_C@C&fk8xrXj;I6Z3yrF=VEX6L;8Fqp^OJXSm>hx z_**IHOBD18z#jnk<8UR*_iWk+W@P{m09T~fAul(>SUIo^V9pCYTmH#OOFoWRgFArH z&7bhM=bq$#T@=xRi(3E#yE)N9A~yM}f;SU4uOvO4Uqk0 z9yYKQ$4BI-GJv7N5nxD`^A0y(--?EA_N!^a*H6{8(-LBipyzD$^$R`W>bB(M282`qwha2WeFn-sgYs^7Y7*!`DR~gpI_mra!s1<&3 zdAk6AzgHABeD}n{&#b8*JJbs(gH9Ra2dcqVgVO`!{jXhb4JJj)&u|}&J>xxUjAC^ zx7QRzkS8#}66w@+37Hv{3v#+Lij*bp%5HW_uX1glDOb_SRMYcuM+*!#Th6vGM}*0Y zVpv8Y7ib@%d3-8v$ns4=UUkX15C!idYRhm+{;J->r+bZkfv5$qlhn@%yoWgJ?+Uwq zRj+kjCL{ZBi)_y))`_@gXhc``nL#1&jXFo?4Wr0R(-!h-sz3m_>8U3GFweDQO(M$ zYT9t#X8x8G$Zarm2uB6m)|F<#t3MgIHA#nIYI7iFb#-viWa}DfhC*z+p=tbu=%bqW zS@6|_1iU8?G|S*z@A0z$o^I&mZ~#=!5F=QnVl3SCQi$}#eKdZSgOkT|(+^m3mtQm3 zZNT}|K>R}RpNDpBzyMfnz_x(>hN}VG0UT4ka6mTzhb92$$b=#1e-7ik131JiG&|!z z-%C_2J?AemFrzF1UlwScBLPO|FBWUgZ-_0qk)BL+yv-6)g?Q!lcuU}A4Y+uFt#>{v z5N-hQcTEo0W!Y70kZg%0+A-CNk>j%n%sBRoUWP4oJtqBwL$K3rU(vMnlb@oDb#@@X z7qDLQlfD`;=(bU_y%#^ZRuzJw??|FG$1`*^mvW3bYf1QwZc|~z(_{PMewI|?t8Rq_ z+@tKzx7vY4*NlYDUS3MXQT)~Rd>!o7 z3-kA+ZzV=WvX&NLT+sRUj`_0tSpbH>v6>((g+YHR0DmdPs^o8y_bX%oBL*MLC7(J( z{gqxuHdc&KNASK4_%s6Mbio|`(rOrY+6B{q?CdR(7&7Om5H1GHnrH-b7xAWIE%tb2j25S7SnL4*9n z-xCRcvkiPZsdquSU9*7XTI`Jq`>DYMT^^G9mbQ)&M7WfMyh+=Z0Rs032D(UxsU8En zG=J#~A>8-{fCEfzK(e@g`sA`+*uOO2fy4j8V8pjy_L|@eTx-e#mAs5L#N0FZ;EZcxLw=(NcIVa2jHN_bh9|!T(TG1^7DUZFxpiE!H`!qCQQGE?;gVY z4{!X|ah&Qab$P(ttCo4AN>ge2mKZfd4X;h|iN#Bgn-bBgsFh-{4N#A=kS((++bc{f zFurGD6EgwO-Y4?9H>UCIHBc9QAM#wEqjG6#TEI`f;T<9F}u7Q z0Jea4TtSS!EX`oX3EYQ$S{s7l?ed;IHOZCLI{42w4$;UNT4M5U*$lk0-(b{qmaiby zvff8JdL~@~jL0ZY@>`q3q_5)EGMTI`XdatzYBWAu!n%UB#$G1VXds&Ft&!OHdt+RX5^$H-sy(K1f6P^;~+=QwbdxsJ%{s*^+(OMLC*-Olf zVst^}it^&W?{zw5_ z)7by>J0BRU`SF(~U}8;Z=u5uvAoeqKY=x6t(+xNp^^(`sayBI|g}ymOC&%-az(p?z zj7HmYZR6^hyUEhilrMlYl$PQu=zGWhkT>T3o;}fO`-IC^T%*jnCs-r4AZUL0D*`v~ z!b0G2|Fc@l%xcq}4~3RHhPJfY->|VuO%WC0-hLMPR4+1h<4|=bUZ$V2SPyoO`R

D&1$PzjyAi78KO{@1J&F!lT)M6CF#1pe;|SO(ia047EO z8wGG7ct;70C4I5$CHxS0Xv3Z@amDYBr;<4eomyJ?A3!|Prhsjgw2P=^Vyf>3=3DP@ zLfrsZSRX$D!LEWnIoW-8LY1_AJGl!?@y@qScF%FJ30gO=OW%0_@4(dn7&{x(@!srR z06bed4{ibQ=OJ;N<0#-82a7Z8VDAQF(U)e63lzaERK9cxhbiFG#~9A+k~}^=Mf0kF zzX^c50zP`oQY;Xdok);3n~|=28xjN4!`5F)!j`H!c@iXkVb39ChoK3xJ@@_!;7haF zr;d&u2B90_8Q1;3%|;_V%CK+m(q6o$pW5J(A^;qT`}}DZTk%o{aA=8xP$l2qe)_G| z>)T?Rn}2`T?bS1+Zg{Nb)qee_KmGbWfT`bql(!myJ$15S766C%bry67FkR}T4PL{x zEv&BEe8r(>-X!0qZTorK39Rx3om52u4{i5zMR03_tEq#b?Gj-cAK55IJ7KSqUI)N} zG`2DV@W%!4#f5d4Iiu-rF7kcK+zV_&t^xevMLLJHtfrb^OxOY&RygmA50sh!=0DqK zqBO+-9YApha2ZRWq*KVM2&dF}Ga$GbLe5Glg^^nF-F_kPfLbp;>YIQ0=Mnnqis6t` zezw;IQ^#!oU?ZwMO{`8b>fUNvcLIJlePRQARi|u}pVfj}aMtbBL%Csoe_sqY1Xn|> zIIJV1tCk9LB2w56x+>t23dCyCmk5gE`^;Heebu4?leD35nF83y{lFvwxHH(9;AYBT zgJwyeY+eH!N9ArcB289O*x2?3=NS)3W0m%79>I4AyA8uQcT(wPM6WOZO9i}Z40e5lsF}AK4b4^DD%@Q z-Nx6601k@TQ55gwkVaKBRi%0Opbhz~nwT_v$GC z4s;i8-Fo^I!p7fz{`x576~Gay*T(=}{nqO0)1fB-j^a&x_AK&O`@^3GbA(z*zse%5 zm;378`}gm!uHKKQ@I~NC)2@K;C$RyhY5*y-ItRUJ40mmW#H}^xzRHKha~}EZyRG>uuhIN*fXcIQ|A#bx z{3<}5Ob&BXBkk`2d`kdBUTku4@xyB&?Uf(W^=txqGf;hcL=yI9u=EN5#wdYl%EGoO zV0AAX3CCE3{27Y0Yt#(rY51i~ngD=1X?j;X8oURQ_015LfE51Tw}!ij9Gf=xdZbv* zJ@fJW0UfISyItgV1SYHAcGuFkm`oyn6HTm2UjKnGU7H3(7Jt8L*J`Vl5o9xtOj8rD zC4LRf!RQ~#+NZroV{i7c5}Q-N;^xuE9|7A(iG|;J_R{oT{8q*ka7^_}TKvUoGg1hA zU;4^kqWV`Ed`Tt~v`an2OpCT#W<)asajWyUAl$jzb3-Js5Ak1bIkMW^av9J7ymtop zCL`Y=LSnqQi#!BkEbIlvQ07-{{I$lO%kD|VCPEv1?+lq!$Yg-i9+_o)eIrqKNw`$zaHJ{MwTRqgcBG?SuRRI$U zy@ZOOm!Og7Oi51RU^TRS#RAgxWK8Xn+*1KV;w63%5WheR+x6L$4xm&ij0irtCzqGs zF&<4%WbaM}n+GZ%?}_5OJG%n-cu>F-ss_GJC({AICre9^};M&s4x5H%&Jfa$a1-oxKZpXXmrUpB^7G z_{SWAQu>u31F-M z{E^w^Q?%{F*%#hj=I6rJ+2jZUzk9dvh3iqh0QghqyH7t7e`9a+@Q6;#xxPJRVRMe@ zXbSk&nhJPz;no`W0DlBO5*MNYw5MFg5KcaA3ixTG?)|5$Yr2n~zIxTBfdTC^9BhNE zt%$Y>0F$Jp%>ln&Wgz*H3b-M6`@UyETk>BG6ttO2T@8Tu8-S7GL7;`TH8MUE;m4oX z0gS168-Ph;&+h|HaYAF!+4L%nqMJsDtJ%70>wQ{--sb|Co0B9kqE>o;<>KNa0C+Ni z&jIkE0Os!oz!CN?%VKghzx#lWSFe60qW3e=!50$@gkJl~C$F6X;E)!bdw7`G=74bz z{l;+kh6v6yF>T7_0Fa_m*R^2O*utmi_*HZ@75un%mn*?*ef9L@QRtd$z^=i_@aX@gJ7J{ij#E<)4Vg zpZddqd8}@U{?mywSbMce+A{I#WOMxsL8|IAv=LOmC4x;=z-4tizeeNy7_?q(Lvjcj zNB&w7TOgVdnvEHp#Ee+h@M}76OSLhWLFq(7BQU`zgAFR-x-pnkCH$`s-AFa+Sm3nmuHfjx4kv2n2y76;5)Jv=ldds&sDQmx5$tQI5onCe zA!tL#aF@X3b-iKGOElqQf8z&g@L8|j z{1vA!h%lCz-su?i3X3~{lbrxv!acdXJZ%8xjeARyc5!;I12`z&x(6O9aVT^H@Qb}= zQ0pRQ@VM*Ww6g~}Rlw5L{Yd9fbn>JD_|nqsM31%5G$4Zo@a1>Y-SZ1pTpdr2+aj!U zkgEbdXApY&?qnL_`{sD>{Nm(z7yN$c;P@Ri8F{|+E~~L-p9jE~XYU~5;~TRR>W}x( zwnyg&9l%Eb_hXNP>mv;X{N>CYIp0&}fM3&Ta~}Yw0RV4&Ay8ac75Cdp++P4- zw(4%I0pL`00I!;ZLFS9w%<*szwBaQ?h=bXENZUeB(wclDV(r%e3}}j;ux)8+^?CV#N?$=IF4^L08qJP;-OXo+cpZUziMQSGWzjjRk zp8?=20r2YS>FH7U&ymoFhhHbc&wZ%70)W5j95Gtg_0f55ZEylc*pzdjzl!HXX~Sv* z@K-JH6@h3U+UzB(JAkPTfZHv&%}tD}512LE@>Rd>XYNQ8MS{*st)^Jv?qqF58ZM3ehuWpLNf;|Rm0flX^7SP|R| zul5BCULIo23>Sx+U-t$J+#X5*k1q}$OJGHC3xFgwLKp`c6V~PMx&f5-F=$VWPC>I0 zyizNpi3GE5ar?bW&KpO&HejlN8-I(tRn+>G{Jd54C2PSC!Skel=G|!xKxEcm!bS>tm(lU6;Hh6lCsBop?oF1ik~d{+w}UVzb3nh`fFEA~;2B3hb36a+X!aP%n|kp3 z`1Q%fmiQ6BELP<(s@TgI=qZ4sOgn&) ze*!ogkQ#pl@MbvsFo{c{hlfb3#>@FI80C{*e53*%psM^OPoD;05N!+nQp1}C;70=Z zn$3CB&pd~@0$9dM+Ckak6oBb;wHhDw#&7jEX*HqsYHz(tGwD^EO&EAyg}$c(c+vn& z=`&ZeP3iQM7yxf4SzSGR{h7%G&LWV5V1)454=H~A>@4rX-`4^jM!FuFC$uv`~~#X#|?Bw-xYILJCED6DbeS3#;irdV$Z^8%;~+@9s2} zzh*eHG(XY>Zx_>ig+j-&0H(F|?DAHi(x-!%j2;%cI(I#^rf2qn5q}$UvI9v36Mal8 zpEJ>01RkVtSuMsAy@4-j31A1HeTv0%BDlz_Qzmh@>W+r38if|aMcxWM8Wxx4hM!I9 zpGa#n+FAZC7J&sX*^bk`xYBnhtYe`o6i(*mVV6dO+0JD#OiEHI)`^^HT30)D22;^) z5f+Sn5mrZU{E3dk&ke%>xG^~SdjR{P+TCjdHkt!g01vuc05`to`Pw~wt)bVPFo4&z z-L60e9n+`+)>C_yxeBW+E1uWUxiL2U2EdZ|=hMX{q5!7y-p(SYOD^4Ag3HTK!emC9 zrz+rkQzUR;>nf}1;xYiH>k|8rwx~EvV!$PPo$96)(K8}3ayzp+ctT>!lBdEmUad%kc2r;p#xav}eOHzqe&^gNj? z92`Un&raU4KpMDC*xqz9IS*)$Zou73mmi0;liBHca)zc6z#y1qSvd&$=ydW}08ihc zg})s3f?Lkwz}aXDxZySq#Z^ld-d&srvm2M+oyyy{=NH^%gaV#1;GK%o*Y7TGY+Txm z(B+SF$ocf}3ul1%^=SZ10|NJSb8pysbRDb?q?N-S#36p&rc0S8)WvSCu5H8xprAEZ zF=!88KMaTu1LVy7ZlH*}(ZC~Ip=j>e_ekd>D^`RmE>EaTfm+e~@wKEYX(r}+!uBr? zzQXms!!D)6G&g!GR-sweROu>T2jVvO(Wr6zs;#YY3}7C-bZ~bp%>`hA3Ua5D#J3YG zsKG#LsQTzC=-h@US0`@|2LNwBQYAkMfcbCzS_d$+{`eu%7tTh`@uYE24%!c`IBG*@bC+x0AgcHYIPxWg9TJcO#_0CMHlD%GsYf-)eMK0k=0CQuc*< zqmen8zftc5(lRq|*+*c?U0mLmo<-LYUhRPufaybU*OTMYdUl8co*RVz$j3!+U5P}g z^zVP=uSwC@r0l*N9)c!!YejSkV59i`x5LmPw`@!N5{kY3gEB^-3NhPHtj-aDllr6`*|HEgTne~?pX%H#ldRU$2LO{c=#pIEjTJDFKw;3lJ;h`$ zO1A+R8qcpG=bxv6+(lRla}v90SBSe zMdpjQ>@dA|;z?L^n4Tboz3&&6GLIWtPfy;QoFIh<08=BN&jIk(1$9rpGiv~55ceIj zwgdQlHy*E?oGxU@ethsvl`t5Av?BPQc@ZQBKJP%T5CmS2nFU05X1(>YT z0>DQdz!I6-gSPc(WBV7|Vs*6x_TujBCPOtBk$wi?w1bMK48(zV;wD}fTPmDGtFQ+bt@}f0jD`Uz3P@$hlnL? zp9pSb-KLTn0gM4MQr{~&U$s@&){foyxV<^*cN*Mk$uC0KqkjhQXKun@=86GuK>cVt zZ+&F|@axmF3`n2RHwyUU4nIHW28IG)HwO1A0Sq$(V8*Kh#Y{HmtO<$x^{8!^Pzh&J zJ5o^0O3P^DwOf>&*Ch{U*O(#4<+3FeCD|&MDwj`j}X)D`WG-AsQlgO?3$BDIv6mUl{-i}G8bO-8EA8!QUl*Me;U6H(SQ5Lhf0+{VbAacFGu0fcK`E z1ICU%eQ^3QIQ)~-qwEfTI6VizUzWX_Y(ydvy(-|3lnf?O16%Qt>1K59r)C!mdxHYr zcpD;rdb0r=t3*<^peVfpGK(fRSK+w?zuVAWUB>+2s6 zfcdLW1K?F|p*q|Ay6U$dGr8~d?dodQTnzwTk;zE_>c{i10uiim>ku1wack}C=_1VJ zCF%AfNexPyG_@l=(@24wo&oL0w;#b5KFm*0{`l2F&aQ3Pn!Y+FeD+c3UEggQyq|$p zK)ofemA%#%uubh|ZR@|%`wMBCl&Zrg`i;Rh;ZZB&3+$~)y5a_}!=(zPfVC2_Ahqy{ z>Cu>A6aJ`&u00%r9w9i1@)r^OsA1T|s6S8N@#PGCBA7(0IpDHB4vm>S_bL4H7_@l= z8%qS2w`CzJcnn{Y(Pux(mY!Q%$I-g5m4Rn(JEA}%wE_5(_lvN; zqtgH^wRg7=zyf%BJbm|pe*o}z1n`~!j)ay2*$EC_$Oy)N00F? z_Ocqwp=Y8JI4F(+mbHprPHQG?5H~)a@#uHi;rkF#zqc_c;7bDdlouhzXA52bRYRv&Nh;+ho9SmVnPO+YwOSoSiEXWfJz8?qhX_qp_fayAgB1;egvf?WRtP!s7cIl zuPi+xeqpLt1o2(V^vdVL>gdh_uzdxvugb$jS!gHU)iLeeDQcZ!aJ{FLr zo!E7IzDHRVvmLD0lk+vrYgfU#K)4$(Q0oOw4p3bY_A<-F4^%jJSz9x;z z;j9b>4LSzto7(Qu+dNz`Bmp=zAbbGY!z9LBtbF( zqan+t0q^p6{c3L1F9p0T&*g8^x?>xD-z8P+>jQo*YwLLUWByV_7W6g-M+BR@2uouq zx)d-;f4vFd!NlvmCHlICnJ`TqmBi`d)FJ51^U^1@4S?^7-6>QRnoD?7=8BK`KB)cG zy{)ZO)A9RL93q`}kM|VFyhL+^Z-5_1zD~~xse1G7d}|i(?8)Th@;Ns<*ntICv&-S` z+w+AR!#-e8`}yf~vb%S7d=fani2^?O_D`n^QwE&54QV<#$RP9-gia5rxj2|jfBIAY zUpPy%P{30Fe1rnNbVg$UOew}B?LidqtO0ns*A%eo*S$yy8%h7p*!jHHnbmPv8LDYQ z6^YVXTX3LQDAa~F=?!L)5DF4nMs74rB@z?ix^OUvi*^)T++axQVs>st&_xj=HX!06 z3xf!P;G&_ilGgD*@%cROIXzyl6~E`a=X}qP_q`oQefl{+&yeC0Era1i=72fg@&%AR z9qz5Gfd6p@06X6cbjeu)27n)02Z1ZfDbwV@3W#g0A_D*ZblNh{IoN{;FZWva2REGD#vIuZwg?6n*!y*9k?>|mY7mQn#Zw8V>8n;!E0G^)(EWG zhXw1G^LD$f!H)o7Y;++Om{t8c6D)=CaQ~+XT`=5kNg|Ff!)g=3(pUJBkJ!jk=xU<` zeuFJa;xP#v0O5L(l8F#byWAAZZc`#q0-}U2sgN#SMxUi{r+_i}+kzjYq3K_(EqV@r zn*y#w(A&|vq>Z5^bnGSSba_+2xXuRilvkf6349xb|40%5YlvPH@TLw}WhJyP(}PuK z3f#;AfA^jXs=fnuS3$7={>~}@=2wQB8Q-Uxc4mI>aURuosa)-(a8R7_=c<5*I$)JU zodqz40xkz}Ts-D5EQSuba6tt;6}bz57gfO7+|*M6_j)HE_Ilj?%RT*j6SE)oRKNll zs17!JgO?{%3{Lo&t?zF!63ynH16 z?r_N9v-^I}Ac7O*F6B5F^4DsN>xj;Nh?)hhy+Z&T!TV~s{`@dQ$0*=oTF}PpOXS&p z#1M1<%8}87(+c3>p>-?k&_4hUfzz@CVc{BW(Y*o~FgsohnaRKZ?)7D>74-Bwa=PfxVy%r@V;udUcf-oNp6_iNn8k< z76E)YFY(T9RG}~OLYf^)ZUFuo=4|c4m%>xwTpDLuTHg#}MV1M}&JJ650H%gk zoAF(6^&tSxWbR26umC>z45P{~UcCx{qkp{|Av|-TRgTS?xsUe6y~;bM2fHt34qv=t z2>tN>7r%HP^0~^Y9ai`GfKk9K8Vh}~IjIa5)18c=3Xg}z-xo+u7h_+ZOG=Me z%S&Ygu*RE_yI5wVd7NiO1M{)}2H=7?hjawM^cuNz z7-Um10$|Ht8Bv(6iBDpCCryRGwidl>0$r(Scufa`dY3dkD2@Oaa|n7|0T&HS)O1XF z#$>PfZ5iM#64+F8JMgFmHZ`;}p~op~7+(vm(`>3M^o>;k6Pt|>M^_naT5Zy_g7?O<2XnVaJ@c>{M&Dx)54c zicIPVU{@fMI~7dS6T3Wwbe6n0aqF&PU*pLK^{n=X%qx3~0!~UstzK2YRn@i-Dhu7l z-h`%r;i$S+`U+p)A5*}$`TGv_jxa~;s)||uyt(-!-hU>5nV2pLSOC)#1^nF~d8Y!R z_}+I{8UAMB)zRv`lK}Xc3i#w6)a6Hqo7n~&1w33mW-n6K!NA*>+rYUKxUT`+`{&Ee zqIrM(@~r?kyN_6b)%yqEL+-v@4S>hl4HX%FORzTL2FL@ZfZCD1e7Uj^Dse4l@@0;v@iG&!Q{=yx|;h zOb61&N$QhS4vXUx5cT%P#@^DfHy;K3d=CI)djdF`767jg=>>L&+ubT?^l<=8>tRMe zXRjef628*WS=*V zKNDI``X&inwgQhW#iB4i5ln0hE(j(WQ@>`7!iBj$BZTcvf^IhcpMlBkW|UeeXedjd zRlqW}h18IkwWFRut@I@kws4CA-3xzZFrhFQ@&>|0)#}LzfZxJ)Ks34d ztq3kzq3;K2Cgl;p31t>_-(W`~>41TcTl!5*;9RfIzt zawH`RsRQt*52;_z2H+FtfZ^~9hMorpA3qqpeXt>V*@SeaV7EL@`9}PbiejgM&m&*g zLF-;b?u!Us?qNa{Ba4UYdo)1d!TdZk)Q6FZ4_7G`l42*qc`XKd}>q%Gzz{%$3{sX|a*+`oJYmI?$ zL$|FFyaBK+EII*f?SEIUMpkCKkuT8igm4-F zA1p83zp}i4|17LL%hkMI`C~zg2N-Z=fb&=jY~54H};4Q;Pbis5|wCPp0^A?Cw zqX34zKKKSnEO>cJDrI@ZIOdD@a=p=*3FkToY+4lXWJb-tuYBz^;nF6~R13zy?l9^o&xx# z+&z9ZvFgn4c5mW%0uB$47AB5Qjt83)QMtX3PcZQt+@5~;>iKXFDa^d@Hl!1|tBYHM zbfdI|9?h8ZtLLvyUu;p6(PwO(hT${C>S2~eL*T==*9Tlvs0J?4ZAj!*0mEQDay)G4 z@~UALF+1YiJ3XahX>SiENA;crz)M5tg9G409??shqbT=dfcPdq9{}G3|K|%~A2a}` zJ9iJZ+mOOfW}&+|;B{6)PXk^wF8~gIp>2xbHr$1cB#@Xi0N(Eii-^wqVJsO0^(^S= zdMpP_rZySOr5QI(6lU_{0(eF;E5y~zz9?q}XmSN%ez;u zEbo5iDr1}=I1EMu=W!iY190jB*w-vY5^G6Pze&CCuHyo#i z-wSY2<{1C{{1+qTF9_gp&{rieJPZ;2Y?oRDiV1Tob2_!V#3lUOFmk@oNXagM&aqn> z%K9lC6ULppD)B3T-E1`~S4ZE;P<5)bMpgS58~FJocGa0>jn)qRLGKsr;40{G1x!o` zig`u_@FqJTlFq0IqT9bD;ax{BJx(ysxSIK@w`PBQKcn6vpP-RMC}hN9K7z!^o!SoP|U z7V*B?&vH&{5(}m2mhlN4o?*T zzdTazhQy}|<5v^USFK{Oc_OzF?g8NA?TL#M!R^uP0*u>!282I+b=q@`xz`(R9zx*N zt&?qNJlt~k(H6taOa^ZabLRp82GHQvWzevfMv}oHH}bO_I;S`TK$vTC<^fMt!KP&K z4ekg&8vw5dz(ek3;3TZx!3!5WzXgCrGY#{5C!X{?KNzftT>(rW%3a5x!?5+070G@W ztmdF+^8FP%lLvD+JeINyY$fhZmRs%Y>?{=pEPwAVW2DpJE)-uD%8!4s^Z5P8-C-M5 z$Kn+QT&^~<6r45%Oh4}iCQ_rRfW@@hmv*cJFd)^+=yS%Aoy!e#uU7y=<2uWWy<6#Q ztBkeDz`Sq{WK64S4!;5TmD_+jpgIhl$Q4GpZjhx_2M1xP0f(ywAvPWCfAX9~SU87E z*z)pHuJHF)&eJ&xSaN#<0}RCQb!G~HXF340DmtBLrCN3DrdAH^s5;gmT1m@0BBcUY z7Lx1opCF9$Hw17zKIMost!GA z;e`}^Kk3T+N=0UZ%G6hI6v)1qPieNV$ZXnu#TI`Jtfsao;PaiN7TSSo!>e5F)?$&{ z0Tz$;NRyfAN5-$MM*&v}T+gEW7-w+Pz>UB@qcYfl6)CK*tF=LBZzdcuF-yd1 zMaxBN3zezWMip>t!)xL8&TA1&{YcQ@NkA%QAxjH&3fQJ}v6eI&V|B17U~24CuML)7 z)J02HFl!CJ(ZS+S!V;PSb`i7kI6|1HBre0yX$^l3Qn;?D_Dw8Z6vY1l-#pcFO@e8D zS_Le5Rlvys<><|VN?)SyZ3n^uuooQ3U=6pKBg!9SusHUC0Cw6Jor@inYX{kXbZ_be ziR*+f0A})c^Mj+QqkDZmOcekIrlIQ*W6lCtFmuw^NuNqO9uJ3T zst&+N;mBP8{Bl(QtAG`~We7U!n<*Z@e0ItSlv#~6!OPA8FCM!HYuKCE-bMj$4YSmF zaqDT0R9<=WccqcW!>E1Mmh*uyiaE&0)sP^{!{sDS&;tv$MOr^#1!9 zXpZh(%QH>ee%3=TKXxoy0N+&sUq4T1XF&(Exr|}u-xpyikM}8LnHE1>0X#F)0r)aP zH~`L`rOVwA^x5+cC659a0c=TPD2gp*965Bh@v4o4XkhXd7<2Y4X!~H`xEb&*iuQS? z8MG_AoV!6>=aj3!aasOa6<8kz)c-^PR{;MLTiVSg=&LiqPgB5f6cfOs7MhCEGCob; zPN)u{u?H536xxuiU1xfY|l{h{QF>ih&27xPp z<=Sg$eZN-7VtmJzHOhjvDNKstwN_fSI()&oB3+vVw&iN^64;Jihq4O#$D<0^WmpFD2x2osi8ZhGpk!?fx@lnV zW-v7SS|c#AvDgHw26u_&Atjmm@mo_rzWA2Ol%ZI^q@xPhh>Z%}5sggUIHPYj{(5bp zq1~QzQ3YIwn>!j;))rYTh7C>=hdu^XF~kaiH|xYN1)!CaqCL!_)+%fpf0I<1EOrI3 zX-w@KqMFymRYXEnzb0iLFqZbVyVqQ-8%(IJQXK_svI%!d%!6J-ag8Q`S_T*5hQH+U zHiZPOke5ivd6F0j>a}YD!ZukCf1`{GfH&RrOTR@1n)50E9&W0D`~4pUz*I5(%!o8U zMro3D&__75bLON9SO9N6J6c@?z{kU99e|Owk<7mI5&%CFz>5qvpWtm40Kc>+YodEE z^QFC)FL^%-80iaupR?dq2Cp_AMMyttTQ=i$~SXG^Mp zLtX%k17?TR2Ee^?6eR$DdwpwN01qJY#vTA(e=zs`s(|a-XI1dr*{XmO>p=9A04s$7aIPIz0SjPon3#a%g}Vay0B#4sE8J-KQK|gVCE660hlGCv z@QrK9Z#?4ln$VDE*)I#TXD}YtS z%3Q~tb7@l6Tv_D7uGi*5@3a4=fS(g$FV=Q3HShib5PSDs*p(8`VF3KiZyvsYxg)j< zwU_s^#R*gIR@3();AY>L5x~qCr%_-gjY!Qac5yK??Q{efg0|R<+jhca>SeO@^aFWG z1eb#y!(kl#;8zTRd8dZ?$Z*L2P9SOllsJ`&LaP=r33$H9W82G4sM05uc(yiV+PzdM zNqwVL@j_zdt-&{Jr-bPh6pP-%`q2|NoR1c()Zl3G?a}}o*U)tuI|<8}0A(@hTTyE$ zu4ew=f8NW`G_VYQ<9e*o0qL}I7BD~$z6-S3O*Z33Y%ysbgfNFEbHGBGSjVRBl;TgtLa2l|TUq`oJ4Rks~4yBI_o zRI@gb(-E*zXT1rraJXb66TC9p&_&tXVimxX9Iv@eR_A~rY*5>R$vq!}^u^343Ggxi zPB*epS(C0%)d)m`QV({fI26F?qAos~dg_Ui0vO#LtWwRT`+QRGwF2%>vD|s{C<=H{ z0Hbn`R`cgrjOv}F<0cYV={vbCc0n=C5ydXOf~>2Z+-17B18`5|;tAm6m&c24`aM3L zNd1tp=*5L$6!37dH;FpN>n*Hayg0F174Yip;@%L!`)akfM@?^WYikkj(;;pEyjX^y zdt1Gnys`LVYtR$G8&Sa6M$f6=!(IT)^zR(y7b@U#26RVURWN$jQU_p43=m&e0S|KC z)w}=>SO-fgU_L)TNX1}jutcN&`lqS_hNyc7>5dfu@5i}z?T0^n^61GEd^me8#KnQ1 zc_-yK7ocvMZ(RHKx2?K%gAGR0%=hkySkkqSH~WKdrq_1%clK$B0?q-^J3EeH@6Pkc z+DG{^{*4=f?KN?1!NtvF@I6(OMe^?5<-2#M@utlf*qz=_iUJnEE@Bp@GuIt=j^6;x z6fbPmLFu}~$ks|^QsG-(&3TXMqf3ZKunY870c#P$z&A&09C)s91T3N#op@d-s%cTb z0r2`E%pJ9*VDvsj(RH`nV>vM;)e)iV`spr=cI!_T&3NtHS?lcEc$XaYV_tbq#~ zTxW9H#3%JgNvbR@vQW~C+Tb<&jvRK56{u6KOuicW(klQyd2x~@j$imB3G*_fkSzL< z&kHTFNI$p7=GMi$S%K1uZ_bcrkKjU{Q)m5(* zz-ds}8t|F|t^lT1k9L7gs3&1*BkZa0B_oX&Hz`3gD{kYk%q^M0SjgM(>oYbd+$Mwd z3VpFo_xk8sxJWuhMiM35@ase9V#DybHU8S#7_6z0y~!vxDRU9O;@4JUs2j$#k!D4( z{56`$SA!b2gy`N$-OYM=17~I-e(Peax=qPcLmIawT29v*rLTc%XeylB=(OlHahzI7 zOeY*Fja{8zYq81S#7tiYx6b}1=Z|SET#Z9a(CP3iVrdR~3FcFqQ@5wGUaer4ND61+9gFE08#-m3!9zD^&^yE?p;78tuM1G?vVDoEF zuHCqC;Q}r%Gsf%$FY}n3{*3TlTQh;fQ26QoQvm$*aqt`fKYsFrpSdwLF+1B|>@O}( zEygDEcj?L7*RDMxKH|H;)ZuLn6c^!46;Pj6Aetf^9pJsYW(%Aw0M6!KnQK-TI(Ka} zDvBMA_93K;v%SQEXHlEhjNo>2iu^iCH93t(MUY6ggB!e9O#0f190fD7!4lAVXap(@;&=}0S1 zC?tTyRBO;YJlgkLRZ@SFpT)Yn{;XH^@~?od4n=p+LID#`KKTXy_w?fz6Qqjj1ff;9 z+r(!Bus&9%X6>(Rj^BohE!#HohRm(s@r4kZN7mY>iPWl!wfJ&>e5G^^!k9ST1J9sm z3WEi(IAIvNAeaH@hF}m&)F>ORtg&g|niEZoH8d+11sfWDOKO-MSq?3DUne@j>_t*d z3ODPUHu%0(RIoOJ*D(n^Wed?DaZ4cPsbR8{)ZHv593})M(id1ztkD+gs|h*h>1xEA$LP?YLv#uBo0?gTGGbfj;3`kn4s{5prm^46t;uFErwgZ)uN565ehPgJb^xS}xy1?5?`|h*iu-odTva|8o1~Hl*PY zCN}_E)dRIwbpSp-e(N=WUm|yLW&tqkwoWG&PM@7T&wiw>i>s@%&H?wLfVVbrKE3yB z@zmwe0yq~S6#(~Czyg@sLGKXo2Egpv%_1xn@ZQ@8Zy)xavke&b&druN;4_{@$y9Jv zyl2>Y3JsjA24LjEn_B&+M?LUEqVf2#<;3wCD&#A|Y6N^(*i#${N>zM|Q#MR8z!3eYGHaYq2Z<8+HMdhv$mIKyh{16r*sHs0gz|3JW z-6-IM9Cx8_v}zewChyL^Lif&Gr(CP0b5p<4*$qaRS03p=-84hR6of84^WeUF7BV{t zj14;tEP$5)uv5M;F<=ymv7j_t!0un+Z%0?I{Ie1m0P`Q2^SoD>1)jNIWv@oTi}A?q zV*W)yEkLQL@O9R>p?_sq;+gv#jA`Y$10at=OoMoaFUSrJmB@Z|9VdWcAkOl z-F-etdjT+p20j@ogCR%36u(F409Y~DPHwFJDEDkCuV{KTwGCye)we4K6|1AKG-$VX zwE8b;65#5);b8=k~R=mB}@o^6~Hjq>0hFWKC0&$gAlOA6z}HdiZuDwgSt$tX1W8|KzW39Rxh!_OF$1j2M512F9ovivi%k9U4Yu~u&cHHV`#_m?dMb7&r&jxMruq@Pt5LwbUlj0B zpAYq319(IMXF2rA#PKt*3Uliabk7Oj0QeX$&H~-GPqr5(o}E&2I$YR#Yjp~=4$-^4 z-uDAwCUtup2fdfoSYa+&nAu*~JF!Ld2x$C?3_(u}dRrSd4Rd(8O0R=_WMoC~?m zO6a+P_W?uSkXHrVEq4aJcuCK?`pSTVt(=)x0nb9(IE+Ta)@%+wGp{ygBpL}l_!J5l zyxwqdnJ9pn0*0Ck?nomA3LSSM=Y{9fTFX(Z5l_%g}RaZAME+qAFhi zm*cR?rXd?1i(vC+5!0KwchG>3fi1G!(0q{WptV!UC#tPtyS^Y@lQd2(EfL&i0LAIe0yOGlF zma5kPES|OUUIVb`l&vXhP1iQFTdl!yVw+h1e4nR7JBqTYzw-^dJ_K{qHW@q)-%|??ywL>#YnPn@~=ui?A+A z4?IFiCaE(JRla0N;ZhAY>sD6Zmd6EPQNWwxR~<}4+oU89+XsE1S`_dU3OIAcE^jJG;b6mS7>N-E&V4!}{s3&ZUkwXraJaX~oGE=(-02Edv6?coHs zy-z>uaSX@d7JL=8tj2=9z;>cjz#E0c>A=#fbpY%U(1!vzPA>;xZLDw12EYg9CjO;P z0iVs8&u1KrHU+<<3V1!j7Xq_+*ui85nU`>u*4L{7{?z=+VB=E(?-YZ}3SMZtPf+k$ z0d1c=xo`ol{*n2jsbZj&X&aA{`}xnOCNE9ixxlGzcLHE28QuEX&-VLMv$JpQE(O6@ z-GUSnBYtJ@Zii*79={KPA5WgUeS2|bh5u~6PgvO4!d7A*KH7JIW@dt>?p48C5sh@uLr=N zQ~^UcFniJ&3_hcs4(sU@7?&VPHGjlAmWb4lNyrv>iN@FHY_}sd{5flFwfvGVubj=rWQ zghpRwuyGE%H37=WiFa0{z8 zrmG6rby#^JGq|u6SXu(Q&=yt)z%V(e7QimMN?lXH@L2^sd29Ia;kMkRubYolz>^pI z2xzgJe#qSdV7@wh4d6|OpeHE_*^2;}o{_=}?*2VmU6{Rf%Q@g%@7#)gYY1=!Fmu2? zW`SoJf5r=dRlpMhxGLZ;ZS-!$`TF3813FVPtMDxf_+StKI|n>F7X_^PEee=CxOEYh zDGzRHuPcS;=4TbYEL>h^ggg6vnBjH76@$>W%x}!EeD8a5_7S7Vj5Xi5@d#1-!)pNe z(Tykfki6IKOaj$A85e#WO{%U-Qwu9A)AL&k-`~2vHA|RSn0UWG@%}{r z>BMaRuF7|fOv4Aog}RB?M;MF_ChE|{?qcoy++6Kg^Q+~mBr@p?OBU2irse#+GTL6sDwZAhgrLtvC>hi1E)RJ}v{`m?$C# z=H{TJyynll>Ps1%Zx;YlMPIqD@~i+J0^ox)2WK-F-2jZXt{OBlSEGWo9S~i3ZGY_b z3#5gy-3ucO9^aH(0F3>oXg1d^FI9=%;Oh&fG`KPhe`KcF?^niaGkA32Q2`5I6Qc^a zao41hx0c)WNTc{|4sLlYjNi>*5;L1^3!!I6wj(jfG%A1%Rs0gbEi1CdOtd!ms(`gh z)lmxft5@M$1n{^7#%jy9Fi`=M6II09R=o}qSZE=58-Z=HfR~3(70znNa97+3Sru?v zLQE)3<(R3C%Vqu&mZI9Xnr#ii(pS1R{EB}^m`9AdMDnb`BK6=a^VAXv&ypG|gvG5( zpOwNsqO@YSD&R_A7hzTPYp4L;eyxBfk-Us6-wsnV_1o!QNIYeS+!%bcJ%rS}%rDTG z#aMl0FM5{2>94=@t#^Jvhog5M28{2hfF-1Oe(%;h58o?`uqOM@P{4WscrwoRUolU* z62QOy>)$9niyr>l-`w>3x4-@E<+j{?@4W(GKK=0P{E`azr$6}XPj4{<-TT4bJEv3( z2JgLt<tcymaZpxeK>1+!3s|7pG9bi~YCyy$mZ)yp@SrPOtgJFL)uZa03?~xpQuA zt`9)pU+B-REX*#<&LU!2d9@S?Jgx2(xRCgL9Yg1lEU*tL0Pf#J98F)J=NONT`Q4lQ zv#c0dS=qgL^XA8PZ)Qu<_3IsTuS;JBmtm|Xf3fWIxf^{=GgY6d;d(}v1#pavpwA3& zZK6Ckk83qA@YQAkaR98;6~pBMr1Jt7K7aYkT{GhO%DeA^-ntXm910&4)tVRpn=4ai zzIZ_GH+HiG-NQHJ@9CPxG0*q;6LBL0l#c#1Z4lPt3Cuv1L1+Qon&f0I@he(3Q0~|& zK0u3?_M7B0x`kx10_~!JNvAJ+PkpC={ayud-WA$;nVXxi!!u`?4IkdG$41s1$KIGf z^acP&F<%##DU*%>cua3`=JD98Q32dsw*u>Z zc3cD}btZUB?Y4@MS}81jwb6T&V$HLQ`~@iCZN;x7PMKEHs(@_{Tn$9qL|xY_QSK5& zFu>}|UHB9$Lyq;TSp&Dn)o&Kl0%~j6_~{JNJ+}x zW@M>y7a}+FAJcy{O!NXnDa$hGid|sY6fgw?3=M{BVRM@T`~|P-T3R{PSa`0y5hdwA9%omWo2REX*4g)eY&s~1GQF6?@X^jW%mhF>oVxa0{H0e zN;Vzu?%%vSzq<>EZ{D50xqlP-er)$+*#;c6c5$t6c6ZvGQ~-Mu|Mlhl)MSR3#=H21 zyCfo(=h36Tu2x0vJyF zj*8YAybi#hnCb9FM%4&_%bwwMwm|X;zDWO>0$}M&kQ}-)3kOv#XsZHt1JWmz!IkEO zc=Uqng#C%SrmkG^FhxgZ)-0awdm9NO72YZJk(@CN+4J-FS* z@aB2oN?+2jx7vgZZcDL#{Mo?vv*QZbO!p%29aq3S2^fE=z|oRh)m+hQY_r6gepj@? z#MA(QvCILlPOggGf?4=m*eiuG6>xgUCF6(!CfLaqgZ--l7SwWA1{0-jgQ*3ZEPIIq zAr<8of2}Cr5yjjTu*^4ix_8uUE@w-6pmQC9M%Sx-NtD2{m#E3#DWWhX1H|MiV3Ghi zc`Qx|tC|3XvssPhF5seoDfW;0BzXu=7yI}}D6peAeTq1Qr}%c|A$9;Z`L+yxbm79K z3zszVYLBEZk`=7pLc&7FAN;_YO`b5CTI}3~bC+N$F^q(sd^529*0*l)!g~+j`4?g5 z_F89F#$k7i*)?fJX-vo3q5<_nDN1S%BuGmU+EOtjjyO_@iI7q%ZKM}9UU-pWs2a$f zmr8LI^dbWl#0zP_Z7&8vL|Sx4TlG)z`90rSU2fyyU8i>)zAu@M&ePvIeQ&)Ll}HzM zBl{cUXtZi@HE(fD@C$%5nLF;;w`7n@2EYC~kA!b)8*9evdd05eE;DOAyYN1aAr%Fz z7(NAh^Z6ruJo0$wy0gFwK$Zk$XYqtFb;!I1iD@LwEL=d-B598yX`^WszjK|Yji|jr zaryGf$`V{8Zro)u7(q%v=Yq&CJTVwxNHRgqkp&W=LGP~)jS`uyBh@zdV}1VYu8SthN?XXazkMBFO7)cQ2C%O z03XnGj%Vm02hWcGVxW1lgXsd;eCw@m{pkFa^A8{X==@vfzxhd~;cuP!ICkq+PCI=! z4(rz!`Hd(H9Co6hmL~6$x*Z@qa1TK@%vR4Afv5=FJly4~VtD=E(Rdm&qn&i_{PHG)e1K>|p0Bg{#dO8^- zV|{=ivgsqV<=E;(tTsS5)qDiNZEf10QogufwXmiFuKG5_&1Z!xcZ)U8bHG5XDqz#Z zf8y_{is8BdY&bd*{XY%_5A!$JJ*t6??Sd>taQO^yQ^1YF6IM%+K|>~f4aOt-m)6$S z>?L~}Y&HGnCMke{Y*oP4EooUDw_OQ*x}upxEV{SQw$r&-ZMdDp38iwIR*mECj6IyHYjcTIHO5O~M`{i#UE?nmu?cWDyHk<^eOv{Mqx5ZSz(Xd2tBsfC-&TNM zhP0L6I#Rrr*winU%dZ|y#GVGj^i2$?3?5As0EfpE$q3}DAuvJknrkOQ;JFa(#*G`m z7Y3gJ!B-l9wXany(}UZZL2EZu6P*HBpqdx^ay;MZC@iDk77lc!D7?NB0Q;DneO>B0 zft*=eTIq5$_$4MlV7-Q5b8o_m;O*2eNpJSuv!|SbZpV;_a+jE?=;+`z7%Ym% zNMboEGe2W#2_2hsdF=A#-fTCi{OuESml3ttJjpG|QN0J#latfE%d-c)gM*c0V^afAX!>po&LR8_zb*yBiM+|$7_@T`J& z;p76^7w;-LL`De*c{8b9Sa0+vsgy` z46XaKZ-4vBtyf;*d~xg>=YRB@hkw!Dc;hdB`OU-UAt$$3k)mX?jhUGJaG;kfypY%$ zmHc>dnq(oO`5prVM)<0L|D0D<0Bb@Nv+n664ld^^(C3&6SOP;=30EN60T@>pQ{Syr zwA(wK-ve5x*Vp4KT)DxcB2#E9m04V_1oF{g00ZW(v#4g@*S0@vLk;8^Uf=i;r=Vf5 zg{&g00B%&3vN9OI*$}WDWRpx3z?HUVc@3e`uR6ANFfA6TFOz+yGohIZ&F30TrE5X4 zKy7%{A*=i)%K(BEeP8nqNb}C3fRm{GNA}9y;+g&ne2-#xn7~Ihu;J5WF=wIM6_un9 zd?%p^V9VmSJoHuflu*00mtxq-=r~RImX;M0v8r244~rWc*D98Yxuprgb~+%z8Q*ad zx`^VyMuNHq9I}#$U{m{oVFpQB8f-DR-^t(}EO`stssa|h8IrPCI4fCEze3ot#;Sld z3R98OzM>JA$70`bh;nBn(=UeEplR)DNB;c|8D~|{W-~d=mCUxwL z`W@E8b_!^^aHT4Z!t=@r4W61|HxSi%uUO5<@ig*~1H!EUSg!IsgNX9{2EDNMMz$ph zwWXz%rR~MVjYV1jFvb%b5xzw58|EHC@I~Mo^Bk}oX3v!?!S9BrU#-WG617=_SqU?< zR|#vK9|SKjQ=A=6Q<$XPUg?pv`q!UcZ{;Tw7sfW%u3lbTI~Y5d?)67Ue?Qp=uVb_Q z(UHl$jj;ukX>V+Qf{!Lqa?btgg)MM(%b2iE9R1A?yL|XA!=_uhYKj;FKad z+VrGT&$Hh;4{?8Y>(-fX+`4iF?fcyuP#6>=eUmbF(kqX0KUw<}fuFj)}!2UiMZ3Vw1qCsm47=n_7Z;JS={Yqy6EOX5Q zSTc1k5wom+Pukx}5BBs9%bzQcx_Rd0kHBvV0!?YbOEjy-+A4{Ee{;<~YwWQ6I+T^L zH51DK_`9D>&1PH0>XkDT+r`AH0KW3CU>|qH{q2c~LM$B8-r?TV_V!X|XI@!aqK#ex ze@R&4fxW${iIofGkvUR|@sPI%b{E$!uU#fK_?8mHUWB$}_izam0WLsB{}z+K=Lmon z#?JP7$B*}VW3vl0g~2S^DuB~BcD%p5hGy+;4ko8pj=|vR(Y?LB{rw4yU-QY6C;KDV zWN&P9mhp=lJ+QKY*B|Zokh<5$reW~N@^t^8H$6Er((m%{d1gA}`b>;J;M+WwPJ=#{3U|c;n&2H{STe4}S1t@;Bc2%^Ppg@|)lM z<{|w*{NWEXEa|zxmB!#%@>`@$I_gIb zausONzck1QJ*>kMwa97{l! z`zOtOk$#!e)|bEW0I;vbtK`+*!?zghaS>K47;8$mG;2d>1;4~5Zykz*NVnA%lffqv z+I!8lDx9f{Wu2n{Zb)sO!?bc-X((E>5v~E}w5*{LSO9-S@HVp|eA_Iv)(|{wmA-cy zep_e=mcRwU(w7YQzWV9phT)5$i2*W_m;(A14$I$v4VAuTEi@S%&n^c47dt&f;F=W2 zUB8NtOO7Bd=v4ue)uX|xL%J9}9%im9VU1Meud+B4BT_U4%y?VDsuXtF75dh5O2U_B zisU*T6xN5n%HY&JxpbmKaD{IzX=^ub8F87p#ylLgF8I~IO8NZWRRI^-Uca(n7FR18 z7+^Y11QYi|V*%V0aG|f{ElODQ?i(@iny~Ux0q5M%Qx|!S31Iipg*X72WWZw|G#5eR z3>=w)4m8TWJ;Uc5Hp98JK=4l&{tB-X%h(l1^ z)v5jcC+ENR%EZKHPtfq>$seCQnPV6Os03yFUia^>Y>(cU+nDEPyuPaQ8P@B8OehP#7ufpT zJ6M|qj?=TeYGDl>+gm1VZ4LS^@2+f3O$`RUUT<@(H#s^w+Jm$QuyqQ$ZURM!`-x9{ z;-e#<7#;a2Z|+SqP5aGA$n&Ar`Jb_c`$yr}!-wa8ML%=i)5k|Ar+@gHN89(=g#}~y zb3*`AK*OqlX|J^vKt1>UlMB}l0@(#LFvSd@wKzw~HfZQe#MHY)uqwRB({}Oz{>o*- zrLsxOZCiOHSckwE|9)IE7|-0r>6Bha>&pD=H$r2QXqM7AKcqZrA#4P0m@AQs^qMN_UkeA4kfcM;Lr?ot6U${5JTdsq8$y1bt&v2o=C2LNj+l z1Gpk~1#eAMF+m?J%eY(s9oD$AS@BodOJ{PM%2wwF;QUx;we>MNZLRd|=AI7-+G~}O z9{x>8&8*SWj;`hE%mw@~rh&IV@+T9pfe1&bI~7ORVm>v>O@>guPIgrU$% zLP1tRCeLUnkq~e+hc55{K4QY_u3 z!o9$$iPm>M%dH)ECX|GZVKO;-HAB-#cICvl_?_x0Cr{PFeR zcWbaYpEJPA+e^z!8=DY#X>@<|*yiTk#>7^J+*;n)cyn{PKN$*-rU1p8YoNH_?+M_b z*A39Q0s2%5l`ozfvVvmlTx2mgUhMN3hpYmxf!*ng*Dtc2Xsw4WD1gVJRmZsMVr_a7 z&K{1y+EJxl_YvC158i(M;1}_(KUVOu4g2Cjzc+m__RHu-HRC65eEts)^*(>=7AxM+~v_fe3JV){d!Pq(pdkJ8sh~;iBeSR)`3Dg2*=a5s-qf*XDRV`Jx zD@%8YX4GsDaJcyd6=MZ3P2!e>8*?P1T!YrfrNTO^V7E~#8ra9J(UUfZh1BRrDO&+t zX-lf@6<&23n{>7SSd8nbfD!5M(JjoZBKSc1zV;f-YM_!*$*f7rW~sGSo&OGCyV@q{ zO2PWXe^A*T<~Q8->X?o?vPxcg*ACzyWSyx3xk^iRs|OlmqO%PkV{}q z3Lgb=lf61&Z}|qHdCed!@zoMo`@Q?YPrD#o5!@7T_$!IwF7_QEOpw0`N}&>Hv%M6= zO5zDq2{O33a(IZq!w62M*$sd}@M+e7#{~(MaZ$3~Dc}Sgh86(JP6$P+=az`$mA`>k zBQPySLZ+XS`?#96LvK*nuA;IFJzFiF5;su>4;#0!HVmeXA9C;xR%6yhD`BMp8FwKv_>61;ot; zb)^_C#$$N~NJH-d<>15({`SU3=@WCG1Goc_DtK4Pit(>|g`HOUpU28L zH({L~+*wx(FLleje2igjM9jr8X?CpVVox2CrG%kXz|BeYcnb9?m20Qi1r z8C#49UhdtimtZ*q?Y1ituKE`ei(bsy)wNCTbzXzKM9v{`BAA?euxRMvtX*74@8*GM z=A04-l{Wb-@nh@H`J6n=P30g@J>WocoX6lKeY9h{kKcCLGo7rZpMRq$#~*z8*2k|< zWfm9EE`eD<8}y#+Xln)~E)g&fA@RvVwlMc6neN`bc#o;`>HhSG`k$EYMZw-%>(SGn zoF1DAbq~aEUU+SHc7}#i*YI2nW|h~yS-Uf1V?FkBf$@0LJ#36)Q%v)(t%a}tZ>4@z z?fdv{0S|`-a2U;y!sb<4s9=)VTd657y~aPuYf_VfYnoqs?GjZdsY#)-7jcMY%4~`* zOUcHvF#MRiH%Q!58L0jOgQ0Fe(KhN0%iD@qZ@$v?TS|nk4szR1sStMrfgub)0V{k7M2m{vVY8`S z#X%$x|DOqCmF<@Z7KOecFWIYg%M}C$yv|C?UQ(NahP`AZ1isx&vZCzw_2rcFy(=xfmsT-2{o1snmq8h2a>$3hktfazTIiB8g1N`gK{sep-6)~xW? zAaO}0R$|(R*(oDWgsfFrJ z0vF|5oQ7YURvUeF1aM%gK*r%`VazUvzVesuW`Qc&7Q}v!L6qQfhu~7Ll&wp>l9*;- zEJ`_;1fMAxMVq^$QyK7k2f#rxFJtW7`e07{a(BloyueWde!nw#IG)EP%jp~cqs!Hc zSH@SL$ezsb%fESGFeR=a=S}#s`3QYrcPMesaFQH8q%j zF!7Cvw??O?U~hQ(>5c8tsjaR3DQsjEFfUJzpg!ZDIFVgfqaz&p#X%|e;mv$*qKsv} zxPMRcDvr!O3w>qpK~5j>b>QChi#Rk3-n9b~ZP)e2pzSWj z^~W^ix-1Y&?H3uD2Nn>r2kcA=mv;%!7<^FYs-~j-{_-&Mw+}g?b>+)n{u+y@Cr>Ud z!CAHM#gqa#68PfoNh&1kkM6JBKY9Nwpq=i`oZ}yYX>N_VaJ27oZ*+8$I62zO`6Q6q z>oE`oya0EZX_h~rnNRnhJLQ7#DSBqEjdenL8vKrJu(m$7xN&*oW-N2*V>7w8lvRVd z?^gg*le)!$(Ts>a38Zgykp9UHKM_%7X4YpdG+F!=K&;Nh=>mABlA*7K!ND)Nbe7GO zifOAf&@X^HhWpXQ$B)5lUBlg#ua(J=H#O(GWq3oXF!iY}HRIs11|2OWYkacm)<%*q z(G=B|=2WR0uzHE*r^M8I0J93XQ4**51ZmnDE02ePjb}(zLfhM{anm7|@fvBXsfgQ& zC9zvZHvmV=O5WjLR=!eZv~$m71-C<1o3JS07R-*2SL7aX5w`#NGOT+#<~EQZF98$3 zTGPQw;10oA7yfjH-j%*?$7&{h(ZJ+d*lR%jRtTFx*kKd2)ibXpgG~l3MKRfXB-CA6 zSophxA_BIsgBp64vTndyKfRhVgJqY*wo2VVbtVRaP{uMgyEG%r_B#v9~3 zFf>kWb#5H(0)M9<^o>_0E-*UF#Pn(15#uwj@F@q@yT!8CesB*~W-xdg-ye)_AFSpk ztd(aI+e_O-!V=iMlS%9CCI0uYx6cCZx^Uj#&zb}59gG0qjg7&`KE$2cdT{Iv6VLE> z`^IPIHYYdxgDvpO-15dGl-=l0ZSCKj8to7Ik-jXvZjD0XjcJ&>Nz)n=)eknWtBL!3 zoqz4s559~0*Js7A9Ij=yL$f0M@0OFk9zEJ!V9zrQolR5D2Vb1_H1L>BNL+R|)58?= z8i*c?w59brl6OX-n{xL$t(S0frw2U_Dt0NOfAPk{oZort#g#9=c$nE|jN&Aw0RAG# zF535G&IL!PQXvJxyFv6>0LD*%!kcJo*aIZibWhwQVUx1J29wa_;jxU2-@ItyJW+|k!qHs!SKS@f8USaTSed^pfp^>FZunGNwb zo#f&N%3`hotKq_6m0FZ>BXM}6T zZ&ko%mbBKVNP?DT#~TH42Vfitui6cqF@A`kwJoivdn<*(#%iLt(03xq!UWK|e*FMg z@UD{?{uRG&gm!XyHC;sj1LEioQif0&@QL5>7lOjnfdJN;O%O$FKA^+^M)G$g8ukbK zJa>YoG!C{SkeQnnyMw_F4jz)0W#Q~<9w%%^=1$CQPlUV^+vAWuA7j|z7ks*Unzt#6 z=jT@kw{IWr-QJq#m*mRg0m>E*uW!L(KCkfn>7nz^^UN-9PCn?Pfai}e9p&1EL1uV0_OKE3wpt9S3d>n_puKxk8u%YFRRrfBWmB6(AA-<-#fr#L-#DqwP%gLR>*B? z5ZEU6hh=~H)D}wsQ={KJzZV3rlR5xXjZb`17>z%bw$%)|xyQdw8m9P5)N;0#=cbEd zA7j(87^*FLBA0@!4y$@uc99C`tPq0b*S_*GlBasK*GSaL(7FrRs6*RPxYBgC_+UX2 zM~sR|x`;BeN!Mmn@}qUkG#|!}jP{>}@v_+mtzz`}8lP-$*ML)UN)i^*$uTZcY4Ge! zzv<1Un5}%u2WnL-o&PSHn`$l%;1?U3HV%Ik$I?@CzS&YyOlfokRjrf_)Q*JEQNTk2 zn9#^u?W+>@--1@lVgKlgumqO9MtIw@h~Mu-0K;Dl^islJI6SO?rLY99#!hGja2IMO zS>^8$6TS3i#4v-K3N|$bOmbuboM2Lt(n^y|u3s`z z#*Z`YY=_?Jko?t`tym$fp%obIPC-lBa*w6rw@g9rH2lW){VYEW4xrQYTiPxR5E&N+ zeBp>$=Y1xghYcWhcW|uB;&rkM6LD7`4F>%37gko8EUj(iUd?78~Vy)Ti!`aW`^6VdO+P4$Bd9cwMj zpzrL0*G{T;*U+>s0VktL1?ABhON`J1#KEivPi-?2ywo`_ zKZsi`o1Y=DBXSg|PC*M`e9|Q{n%M~b{kg1_ruE#lbKZnC)@j~*_hxn>aHgO~B6R^O zNL`+WwadL}2rFR8k00l@5T~5eh(7LJW;}i>_=_7%XDn}xZp8*$1DsJ3fB4kXO4I0I zYj4CQemE?BYZgdTfZ&eVym_YZo;})BNEjs>zdAWw35>;IUbbM3x=mJ+XrYx{{)uKP z+OWQ*d{0BGFtgR4*62nStD|g?gT!V&XJ*LA*3%p{Z5w$+e>c81xYCocMr^m!&;)0; zHOG)>Y%e46xNm8Y{t79$>*zKlW!bxD*{l$<)rOd@%Kp?#XuBbrBI9(Fz~Gf|2ub7%O2**95g2{v5BQ~LlVR2g&@J`MkK?o=j z7DxH6CXEvqnp?3ZPRm{*$Z^8ifCr{MIgG%RTxNnd$p{g7PMT_hRtTrbcS>T3Z6^hd zhHeN^H2WkZO*fHR3+{N%s|;P1Lb&>VP5Nd7I9YeLIc16@VsSdjtMZk<3gUmAf?nlk zX%)Zu1FZNZ5!WMdVeZ5Za86rb3}4H#FN!A2@b|3-Z?0>$O zV)5<*4iirA3Vz`-9|p+9lZC-EB)Dr0FLi3PjNx)5n36NRuKvQ{kk>4XM*i+nP};&U z@M=grhzEEN4yXjU5Lfa#z%T#C;?tS56r)M-@+@Mv`!rIV_>h;LP&ojmH1v9a6_912 zle5Mj>bnPP1OiWT(6~32#o@8Om_0si_MzkI;#nlG$YsKrqD?{{XAc(rmzRzoU&?aw z02wTE2juAN(NUJ?U7Tl`fGQxScRwul0pbtobPR5Y#cnxplUwSH4mFl z$#??qs{*_1zSgg1)se(B`^F=x7+fC3wVp}FT5Z7YnB0*#Ip&^i9jtB}vsV8(s0e8j zW;ul5G9TP#xr=D7^V}LvtvJTVKFrI8@r$*Zc-1~k$e*GPu}r+b{JWA0xWp1FdYeI3 zVhhlhOruZN{D@T$3so0_orX4Qg~7+V>{SGCrl3VIC7mI#5LN&WiQwNiXc6()_bIS>lx}k1qH~4_vN@{wI>R*yt7X_Tgn0bd_ zIwdUq1{rL&N~(8iz^sa3V5-Db_L_ymmh?NChtgo^_#67V&`W6chz-twG-F%?hMexq zTBY@K(X})pcggXiV6C|Ic|BlVabp%ebj?v@LD-RuLkedOn#RvD5|5t~?a+e!XKX;-u}Yj;UD+k`to{arFU2Zp5SIHHa!Q-{4Hx`{29%IXHSonDd^3m z)nkZZpuP0s#f!hQX=;+iTfR8BIX{@XxgQY2-R1uJ)Xgs-h9iU5pKZMJ#h)jcNqzIp zH($Jv#5)^L_eUoCxdn?E>Gv|{jK8?X8t~fY12;x@H$u=mI9)KJfVn8r1|)HBu{RBOKXjZmVPHG?pLRfyXGx)?N@coC2ub{7gDh#2l>)*Bpz-nKU0CxR%$i6CqO-2)Tv=qrluZ9kH zI|ge_1h?{7LS~>%E(IsZ-(ds1N#Zvg9$Et~fi@S1O-Ctw)GZ7az{To!9PmnmZ4JQP zCahSlg~k`d$--XJX*x1`RR~X{q1=x(K~LL+MI&wCn~+$J0UJ6eY=papL>h{e&EOUs zYbb=3za@CphFvMg?Qy$R2_EsKUHBHRHw9cbVd1XIWAST;u6!o7OC`awAyLPYHQaSV z<+GM~1J41I+a^}cNL)n8%(H;!kNbWEv6}Zno(G}UCY(Da(ng+u@e)eD0H4s|_`>=s zPJC{e=HWDMv0plxMd3_0|7k62!1JrO_YU{ZeBs&Z&gZzL`fz{$^S2Lg-@fr=Z=5Yy zD=)5`IlRq|tEs=QJbQ-Tg}qny_85S;UYb9>w6pVIF#mM@o$oyMkIhX!{i}xk!0IOU z;Q7weDJAgK_7d&T_RoJFtY@xsd4t;g^0GHwtWS+DZ*C-P^jZ4F)=0~dX%8ZRH{bmI z+UCaZ-`u#%<&@qGMASgbiP{xu;*LoNUnhIp}Zo3B>x;kdTN}|G95Yq&O@u(88 zU5aZ9*RCyGx_0s6FRuS0IKGZ51+D}>w;*oiDsYCYfpi2inwUmKF6FgL3f~;f4TnXF zEd{+KoKNwwKXx-^)7G^GF5Buy)gGUoWMcV4A7U!rBhuUvBIJNCCzAR3E1={`AJQUE+TJA1r0 z%S+eR+yjP*SIEj=mF}+1K4vHRgQw3Qj6Qh!;PKl}2@Sx&7qg<-K`2I*5IVDuyN8u# zKpXUgz~KNPt~l=WwzrO8dDbgS5Z9I0G~}gSzh;q|Z$(T?;KUZvl3<0h(7I8YdK0Ze zxe>UKiCkXW&rG;RA2niq3BjWAlW>&Fwl`)EF<(BbqMMM0k2;#NnUE@PVT`o2mL%RO z{Sob9dv&T=ElurL_eHk)BGNl#@6ci3at3&K3YtV{(b|7iz94vQcn!FSUl?pq0yjHW zgmAkb%YeP_SVM3X!Ncc~h83`Dz+_m(uN4btmWw&Q9TGMTE8w!++kzF1qAFkoaK{wo zFF9>R{*L3Qfr&f-WKGmmz==W`uF>2+X{Z8j2u@M~$3SXR!0ii4x5;ew8FjA9zb3n( zc0Ii0u$Lb?YBcwL$qv88e81fFx9Z?a3~#+*L+Ik#omLraUZH%8VtnTfIiw6yERa!odS+H+DEl>+GzgH`h`C~$c$yb&wj1ViOtcC<>!A|eLBzP zXC&_61>3Q~9}8=G)sjV6vG z{r+BT4MX>?f!Aav==EOnu4QU>E`!c73zHQED-eHm0PF7`Om zBwufS2BOANOihu&_kIA}pL9TFw8)*r`0+Gh{fzBzEN%3bH#klnM{um6`qzR1TZPZNgP|Q z%3@tj)><`}=GOReb%43Amh|$M*yLZua+EeS4x6bZ+G!)kBN;=# zj}a@;BzDuqg_un9Q4Sy?oEogXo7e{iy2uYg)W;7Xt>jH39z?ICh*pE02aUHalI;ZC9xM;RRyf$k=}}4l3qh>S^gzj@eeAa8fnFEg|OP!EP1wAxe>Z5 z;Ga{?r}|~?#Hz=TfG?Yur7G~n3xNlKmWS&e=+zF#{3ZiziyAZyV)qUK?-!onVKhA1 zqhS7db$#!TxVOJR<;%Ceuy^bBAE7OSU!iI5@WqR{w{Gv>`YdvnEjPEW9KP6d=*RQ$ zZL%{rc^b)l^YH2Ii5Gu<@#5J)9Xr3d3W_J6|7nNK&-0t3>r-2IRx{gtVRLnmRmDD3 zX4svd{`v6c$eY>-3yp8SIXdztv#dDU@4+vh244F!TcCRzZ}OjakW2P1L0l9t#_b%Z zbkM7&;(Gyfa2uO3FSgK8cx^4f4UNY_9~PD(@Hm=|Tq zTqmkK0Zf3iog!8((*}$&ax(K;>!zR2En@su%BGP*I)yRim>0dNFtCZLhBR07rgtx>{z<7O)ytj&-6 z%#;Wwz1MTdj7{v5LEs)gfj9OxBrob3`p)<#-CNrE(_{W-_4MuMfOljB_M(5^emq@q z8^Si$YT_5{_6~BAH)8p1d0WJCM_lrZk83JU^BPStYr6V%RK+k^1MpR={Q8Z>%`J9P z%mS?BAhz;Xlgji--NNaT*$q!q6Unv-@z{`LmXD3tb^o?zwQAqM8e|)3Crfg)hF_mI zR%#Dh<2I?XUZN)G(<{4O<;C@U~r@Fu(1hRyPMK=VDffM_`mOl);(epc%?v?j39kcxrQNIsSF0P!vL1OgzBtR zCnNOXFe`$2j#lYQmQJtpsN%OPu+^f1$$8%0$@Nh0Fl7lw zo7KPMbr)9oh69OSuhyVDD6RmuLz;IASe_F!Ut4~QvadP(_3p0}v|^RWF73);0>@14T!x_OO{D-PrE-os zv3wEgHV6i|$X}lLj|sxqhcNT_@v+Arw*0!Qb>{EAcJ%;%%zd5fotcZBoxi%$ zN5rm>Roj1WYwK%YLr_89tt}Q^ZEYX&;^^e;KejgxY)RV6b>O)y z*3xf5Y=PfzeSLI&BiAvl{~b5=#8#);OLoSyjgV-wBrOBl__n7*e1R*DeI>Kk{jh(w z`Es9s7Al!3Yps+P*8U7WE|JFyUK7kMs)A34XmYl+8|@*<+e!?VO1}5XjvF)vgE`6L zU*~oW)ug7m(5_tcokHyj%8Kr)VsX=IW6N~Rcg)(wm@2VsH@qRpPJ$rZxz+v}YQ4*uMClDuL^1SOm@N3snOT-xmB$D$3+=HA~>uXb`Di7jyHC%Eq{GyXM1xn!%-XOk1eBsS+jLN3i|n62CJ6` zsN+pe)7WPC|HXCIKZ90AGeI&3I&7yC2+lI-x#dod+~Ar?PQKcDx^=O$b!}_2^NPQ7 zTi5op|LFDsCVvUDkQjSy3H~xP{oWT0Nb@gtBIGrITnUV2KX4ZY2fIGn*82KM6g09H z>^2by`wekyq&Y<)TnwMLA3b{1=Shad%{Jhu;R`tD5`$!Hl^}$bvzpvZYA}()9=c%w z!bi>>A-lA&fZm0)-<jFUXc_9KIrXsn>csiGY#d#ARq@>{NszPvr^8I~S` z=+6@E+M3VUaSyIl(X(JsG2uu2K*hOK>QTz(3&7zB%X zxU1nMsjlqTwQD$vzHN6Emy4Q?AAfgntQ9$3m_4*mjMx1FDLHn5$alvt_)ir%p?|J_ zp-)U;=X6!g^3b4=t&_bihAUyAb8&?>p|YGV6pRM2TL4_m7d5GFGcnahtiJpf(L1yk z=|jVtkWj!4e%r;+B@TmjNDeRT8G*(`utHe&CJvd4po{XQNahnO3!;67M6k2Ky2L#u zdQE`q&=_>3Z@spG3e9n5E%2?vSN598-p`rJ5f5srbHFtUU-3(0k;rvplHSsBc0wj0VSDmkntdkcPX%ckNCWw+NEk@z*ECU*1Z zZxwLLR2PA(o3t5Nt{Rxs4lR3i8$_FkVPXOjn3!;TNC7K-k-A_uWkCAfoZy^eCRM+x+l{ zHyMJaZE)<BPD0 z`|ach0^;c4%?{(#ozBcVXLinPtz_xd%E}KrAC5rYw|y<$I#E^gE)B{M^z<|+e!7kL zMH25mJ;@++=nJXfF8oa-DF`<9i6(}J4`bm~rcQui0%Jb+y z*@a%e{|F5%ft?G6v+njKl2OveFQq7ax%Z%GUIecoK24#N%}tJ2voIxq;qTN!1U=kE z_byC^%Twf&&F^~_TUeMJpX`EMct4R*XUKbr3F!&%KB7S6BrN|`4U^qtdWn3j-*4#a zkhKp6P7fbGbLKEP0=LcsV`XRXzQc!uT`Q&Vyct`|=F!PnnUy#99X@%en`z~dk^J>u zZN~X=W^pEFx1Vfm6PA`Xux&t$mkDeqaw`@6BNb|H92%i~V0-BRg_k4p7x~K}(W}jG z(B+k$k~&tQr~mi2kP z(7VcQqJE2EjraPcAOE{ijbp%=b{J#T9XuX8P7)Kr39#3wHC2}if@?<5`h1dq)F%u* zCtUjdiEhFy|4=7PjgIh40n-XupNiU6Hw#)HsU0@kzqPw}@4g;u#cl)M`t2d({qlJg zaK$efLG%(8!9utdz~wPY`X=$Tjf78@ zXMo)0s-Xaw1x>X4u^D0JejMnVdkW=l=71xG4fQB2eKKyH^$4S7(#1kwBMYv`qgKDQ ziQzt`%)^K@763D```~%`UUp8BM3K zz!)(%8ZCfjs;9b<$qN8@cDy@|*1eQF1|xtum=V(Q^e><(NaM_Rsrj&fD3{F%EXkcs0d6l?42w|$iU^TH67G5HlAd`87 zZFqf9hpNPiU$_`b8cm8mHnXPgDJnM=Hcj@CzqC=I{x!$MqwuXKJJ+%1y6(!793~v} z1z$^LYt|N1Kvw|!(PkvtfY+>m_85*RV98s9*9mePA;yMV1g-~L-Frt4;H9Nf7q@|J zY9ut&g}Yp2yEs@|`*?iM61;ek1o~3=<1%cOzZJJsP=ceZqndGL7W2K|c>H)S%dqCM zBZ)mpa{+AzlC|pq*j>C|+S#1rYhQmKpP#!PRxfvU;_Q36ySww05$LRz9bCE6xfrf) zKj}mO52%NtUn_pQO{OG!a&?_rjD}#>1pOIr!&;tPPpI+KHaP=fRfp-od zfu%3TkaHEl0dH6Jd$e2SFHr{Hevv`f*Iw*yJsh$<*rhmRKY2Lvkb&AV56rZ%1I`mc z@c4KEZ`pm+3xmhG3c>1eHSd2ihoQ@v8%5FJjmJ>8-;5IOb-#%Y?t$X*Ns3^268z>j z9v@pci~I$^2r0*%n`5GN6}%)?^k6F&5FWWiR0tPJgw>JE%qVL7d%w$H9KR%}fXc+9 z7@Yvhqoy0>|Vb;I=YVTM`$~( zEm3`MXbp8mD+t2S<;}>zsD!gaYXP=z1-m`h=~+RO5Ch?+-6&ZI-4~gH*iKc$Q>xM$ zOG6RCV}6}N^ZVw#p3v@HC=!;xZTQ#>m^Tm&o+(w9_X?~ddh?%mzC<96g7)c?h2vxW z9y-1sQ~LV*bR&LoCpiO+P$+z8>JSJ%fgL(=_QvGRn>TLWxbcxwH&5L>e3-a)=1d3s z#M&o1cNYnX--Ep>;Gh2VbrAd+*-Q9x5R4;y6aP?hFbs%w{s4egg*?ef8uSuc1HHp5 zp>?QgAzMJ~qsSGLYI7ck3V6KiA3Ks+y@hgHG*3nid z90JQ?>Dnq_D#WiGz8F*{G)aJ5LW5$pFD;~a;upJu%VXwi!dFb1k{77shNMxxq!f}j zS4~iMFE1wXwIEuRi!{b724iUocLzT4@)y}K7`NeW6FF`YTmnz}z-H=Dz}Zuj@n=Vt z%XJH!N?C@W#V&TGb0w7Ibd9wugNq+$zl`xAAe&8{4RsrIld75t`R>y1;Ek83aop# zxu0-_rC5wavl=VQvQDyms3CAK57A{}ZC zw@ct8ZqB!+=Ir=F_l}HZ&>7xOq+kS~q!Gipim?3f^lP|`M{KU-qc20ATCc|s`RcgF zpE>|WX&=R4I2EY^PF<8_k54Xyva`SW>-(<$#`~Eu5WH{y2s^X8*|j}2a`kEe+J!dV zW?+}e-T;_niS^I$cjLVq`}ad#56!ISW14Fe4_MefdEoZa(#vNro2wX}poT|p%e(cc zU~$$Mg(lZZCRJhQ$gE;Hu|Z`SBZXL~|Ft?@T&>Ol*HP#wH~@rPBQL>(O6jW(ZWVAdLiYIw)gpk<9 z+DW7_zeNQwjY@jyTg~5_D1s}2gJ~6T4fmW0mcfof%U{?_l)^A|d2x|e*lbgvJLnvQ zw2KE950*ja#YMT>xp$FM0k6PaD(G^rvzEJL*9Mi#usHZE^T47O4hvp9?8!h;EP!1Q z{b7LmzKl%U;TrEEgri*F{P->uX1JLmTK4++>)`hK+_9YuJVRg>UG0R<+dI2E^A{s? z%VmSO*yi)=Wh{D-79vZrE`rk+Tj#f`t^DvuKU~>dIS+uJ?#@R7r?NCc-qyIG-?8NB z*)sntib*Jl;(me%{?Gg+(R5Px=c_!~Ap5nSu$=c~fbj6)HWlkX;i>^H9eOxgUg2MK z86h0!Y5wKcBWXBWAsqOojOnmmhS-){_M%eBNc-ge$Ak@S)se zEs$gEi)rAMexG+4hk*F`MI{o0o|sJRXTtW$lO@=@4TP6Ka9E5(Oa}pMCV)-I^4j{+ zv&-uoocZkKO9&hVJbHWm<<|n|(3)`IY5?3a&RjM*q3j<90+aN`as$S`!@z-GRj|dn z!Kxa#$NTV%!mJ47_nO5fy0V&Rf;E_J7i8gCVWTA~yUZ!~$oU^4$8feY)rjM%U5lrMEfZJ9C$DnQ=5j+gx;#Bm$Vz2n! ztAM{Ph;_~PZcKWs>1*Vzyd}0Q-g8c+9u40Xzdlt4D}Y^sr2-CuRlvhz&~hgArkJ%5 z)n;dY;d5Xtit#6un-z{AM$+Ypc?bya2dVY?8kSnTzPYl z&mMbUhn-2hJ>XXVc`lk5>|B4!5Hts=pkT3kAI|;ztgV8)B!h2sxSe5N=S;pkzq2|2 z*M0ZWj~}$$$<=q8D=U?_`yX!o7U~jlu`Ock_5qeOcc&(2%OG^OU4&IoOx8~U1Y1|J z+osy|!>6ykHu4&qW=F0+eL9tzlfmv!N_)IA2P~?Y0WKB>L)AV3=Un_i_FP4mGzO4= z(i|)9{^?KdCvnV~JcxnC@a$v6~rQ3OPi2LIU%UjFH)Vl-}rERQAGG^XHbaPAK}5s&FSUCDY|4dL8}h z(O&I@@ylS`f^?i;5pL5BK4->~Y~u;*r=Dy)d#3&+%W~*v`?3?bRjSoic{ZBtAvZ)O(K_O-`y<>-sIrA~kE5__9ml zc?*@IT@|em_KV{>iNl90KEL)Mf6q$Ji=`KBqEqz4S`Rf zfe$ebedFxeXyD8SXB_&*;hQ(sAn>ijXMk{vVZ+Z5#8@C~VAxsyKL5iTe*nICKYtE- zG3ZNp%bt^ugJ02Wkh()Ad5OR{fsC}J?}9-Dljus|5|V_z2A5_HYv0yXzO9!)rUGtF z(OVtjUJ+a+@UV&F_L}}7D@EbUuyZpMeK4+7(l^QHhZHbR4G>xSny8hpR0S+^$>1$% z>LD8l_K;+o;gc#@1x(^7^mS32D2OTKM@Zp<$ubHpQSI~_oR@db zU(EM+JM#osnknFGu4#s=o10H^zbxL)%3oK=Xq*{*{GHd|++CsP%08*PIe6dJ*7EX~ zj(y|vh)?*7Rm-?EAJu2ajGK_;FA|ubgoszCeR+=dsUr?6;H?8Er~m%u$kH^sc&2~+ z;>Rs)QNScJnm7_~V`F4w-8Iy!qxAR*U&kJa-z4L}SN0+o3B-v9!5`E`bwWADs~rTS z)CFtAN;F1+17Qiw)9*nx0L&P3KOsMCF~%hD`ufKD`ejx#Z#=_cD4cHL5-8LpinipUE$*#+34oacezN-#{_Z|?9(C5` z)(G4rLay+x>Q8ZKh3rC-_pE7&%TsAgN+QJ)CuZRv4`t$PFX-bxxw>6H-zO=Ov;3$6 zV9|;5sgRwF8E%kjr~K@zBeP2wr?pb+^6UBEkVt1j zH#K~s*QHYyT9p;%^qf-j(i;9sUC0_)JJQ98p>-29st;i!q!2g7N%pysPBH)uginCp zvp0x5Ao%bpRPfp-bna^Y-n#Y;oFc{?< z@%vdae9QjuwnRlpamZxi#NS4I7Kq6(M~ zX=aW!i~h2DyHUXLspb*DlD_UYZnO}N0`Z2I=y)B9#kF-fbZuzSMI@QASrf<1eNaBBYU~V zHRNp!pSI`FQ-;n_kAofCoEgl;>+I}YT%MU*zRp>c?>Kn=uRGfVrhw-LYy>_(GlNh* z_N^J-8gydtHPY7eg0IhC%pzuLzd`-JEO4Fyz)TFUYy;r!eXM@onV);#UzzOf>^z^h ztHaH$N!!+VY2W@WCV?Y`r>17RJW;`+Es2nVx;ThB2cU^$G=TE&Y;B3xA)B^B<`QBj zO-t3U9{!!_VBI9@VBFP-RsQXm8fIa^*(#dm(Stic4&Xj|;3)5d{sly7R_#dO)kxI` zW1MdVyo4@xPKUBj_#9S)TLH{#u8yMBUoJo%2gechQdF7(UJ?O|tRg@s=K z!uTp}YUNeQjH!xMU*TyKE!K}Gi47Vp6|)t(^eZa(XqvjOV@$%(v>?N3C$<~2U z*wxPSYH}3BVyyty)Uth`XeUzgUTq^(5DVN0QvbTiKxg{#P#fe0=Fn78$wn{UC9m6; z<$C#4n%a?ZzR(@vjMm!#c=qzd*KP;HmzTcwnmRj!=$Xw{a3j}2{4DQHa^-Xytk^CLI*pZLg$ z8#fM}0KF#;eZ<9BQNE{cWHHwKtqeu49R|OjxJ%+(F!s6u{1OsB^X1pS{N>l*U@u4|@Sz#+otH;_qd!&1Gh|Fj(GJ*;@qH>|C$VTqF5DNDU7*u82l0%-5Uk`NjxG&GstUf6>yycHYC!J z%xVk-m)20ssQBfn3K(Fw0o6)$ORg2-kL*7wU{j-HZjr6mRLHn8<{4%S}be&ZY8 z*gVf{FR%WUL$A1x;o9IwS%fuzk7dwE;B9Eh2sHY5^IDirDRFM*+U9*uyJB2ymI*P{;ePW zmV(@EQ8}eFz&P+B0B(n%OR4XX(75*63TgesPsDKjl3Leb+3Z(5-$(AEhr6#9N3X^p zZ^ZD!EW*0*C?{Y|^d5aGOPtO{R!#(O4?tqPJBSq!+}CiKx0`xTBPi9P@YnQ+DKX$e z0prBZ;<(CcVjLaYTfNh3aGMckl&+y@LU z(n@3T=Wf9%J3D!+ z0DguZ4vkmuz-c?(;VkV9a$>lBd4nG4lE1n#lKDJun1(e4%McUx?StD&SoBkO@$txNwtFJfuwQH)BJvw-+cGXh)>+Ac(w z<$k+(ezCj6hzb9vX6Bpp^4l(7CHoZr__~Mz3}>tyP)F~Q;mnc{dDmYC52xz^V_+5^ zAVY9NH&>SMXH)?bfUg%mr*U#h7B|8e_Hx_yiRrVfdS=~o?zTL8V;Ta_pW4sT=TrN^ zEi16<60B39Fc}oa7<)Dl??Peidnn&Lnv=m0I2^`#0|DG_Ny?ri0Q}Z}1F$A|Nga$f zw&blHa1G*D2+LhDF`MB`4USan#HeZj>%v>>I`iXge!hq3J1XQ+yE^}(~IEQR#gGtCQ|@A zX-w^$FAZ7bFOfjjUU76gK6O4x9e>71fNS92fac2s7faBsCwbcEvvvzRJT}TAdYv^1uZH9*;sQol;;1&Sim%G`^d(7Rz zqL}@_#Or+6fVb1pC}mU8-D}_y{9enC0Kxo#G=7+loz9Eh`MNoW=YUDH6I+v03(bb!SIe&e zFxk-}gCl^uQNW2Gd$`9cg@vw}q1}lzVpEYD8%1K_cVRglYMa3&4Qx+^fG))l}? z?6`n8?szY?7DO$76+z`{q&YGCRRT9pBW1y^!5{2{9X(1Fc0tl!63#&^dEjeyv~SK+ zPm&miy+@CpK0OA3$Dl7dm#a)|~EJ`oguB)iGN+0OhLbG`H6cOC{a85|O0r^s|~#nyQ4erEAA3_}0x zGk2B1;J4v#V}Ed4a0rYTCXWYzJ$0hBDu8{A)%HNR%3rc}Z}37Rfl1ADq_3&)wNwyn zD92>|7X=K09fbzIYG4R##H4Vwy~uURRhzf>GYs|ITcg2SS7MP8ss+B#_jAqxM*#=G z!EVdofH%rm1h)#f=-+x+rG5}pvYAZ@8B3|8Jc z{fiF9ZB{=A!GzlbEd8{5*mpChD{AkpaiJg!o|)*qn4L2^E2n0s_>VHtzdvLx$`9EG+!4nQ)x2lG-~NaD zfpN7zZ$%Na0cJY?7MYrAh6`sY#NiqL*OMsQN#G)VTiOz1re?y}1f8shbrZW?GEmAx z`e35}sotYiBwTMbG@e*Rr%p^X4|11FR^;Nu=lC;R{7T>lD z{Is(pmlpdDqfIb+}M2CgPxDffF3&*Nnww3^tLEYdu-a8&+k z?SB$9h}BW@*79+DYwDPEEhw3RF9;q#9oY+k$I4-f(IV0+!AuqKLF8 zV9knQ1uT9Aw4>3j0B$sBS)WzwOx&v^M{S9 zBhvm3nzf%S{(l&PR{xS49bdlUt|MKj>+U1}+K3dXFYpz@S!9*Xz_)J`Jqe5X+|CeJ zV@O=M-1+?4J)E>#t#sXd{V|7IVW9R$Xx%v^s-*2K33(e`Upo%lG6hY^I>`bYe1C0Ckcp;zx(feW!*98 zXB#hfnF@Zod-+MAn*%@d*Oenh8W}xi%6-3=E>SBId#FNL2sG>VAuOp97`M@^w%W!3 zZ@k&Oe1S1uTFatia+ut8Cz8ai;#&$Q(U7zi$Fp5;;i9gKEp>0Z1Z#By0AC)>2*u@o z_)f=$zDQveu*~iD@zBA!N>Vzz02-a_@-Pmj7RCG+{=l;yy*=v*-&4F0VB=@K^W-Rc zmoPmEc&8(KnFS^xB|kfT_Ga|&iJJ#*G8KGcKMc+p9HfU&t(_sPePXTiiBGKEI&=8U zEhd1QLFmP-#0rI7fQ1l-zjvdBBZ2>b2o}E@MJIr}i< z_dd@cr8&-@3}ZjMJeZ@HrO_Cxn@M3HugL9S+3iSZTK&O{AdUi_Sys6gV-7ecM0bvH z-WVv~EQdVPMQOaX8Gyd=2PSd}zrVYA?Hku(o6nzb%jnMQov(L zYpnxoJNe|9hn>TRA3oftCML!XeB=NUm;;Pu@MPgIAa+U^lfpr8oXXr74Blhbeg9Vl z#SM9<0$v_p?yXKdd>AE5GZViPcOE_Z!J|8m{=A;KUJqsNf!*XR&?1|ldR4Xgp!?v# zgFii>u$oH-8=X4^`gC9jsVlIws){e1y*YU{6OIcL87l6frXzd#dbBTN+GP~fgAJLQ zrj3p~S;p(oboTEajoi+krpjWtL)I^8f4ngn9Q=+QT^Ozy&w#ll!Hcg0R+HnI9JdXC z!dXp5z3!uYehnrz2^TvSpbQH7!7dB%ucmspz98i3@S%vkKXDQ$O z)VWLJr_aSJ{3Qe6q?hF2CE}3_)C1ZPDAkj+)kLI5t;$!W%>Ew&E1_o5j^Hi0%g}HS z4${D1TnNp~s{FlE#+-=+&3Y1}>!Bi(%c|yyM6UDt+U3i$mq#a-mfq9LJiBYO=nv@i zoOkA@mDSe{U`HWixLKan&ljgc;BYyh&RjCUOMTeuAT)tVVA*V11HcQ5?Oe@rO&aAZep>}Bp3`U<`J1fOt3(gY;&Bdm zh`uCsaGFmEaC_qkUs4JXoGIOcV1j9@fORNZ0=r)C+bUrB+FH~VSUx&V>{%+g+KmL(aRxL_j#1K_aAd_LNL3T4Mowd$vf9Xw5 zo6O>AXbUd|D~1vVy1q~OFT2-{y}0(`SejV_%`>p;leBJg67+pKA%$I#P5suj9|gSE zQrJwy(9Ze~L*c52t2X{!bahsba1Im6A)XVQ+s`S*F!;pu{%o}976vmwOm_9ZkoP-i z-P?@>ZooS`#TL*$sm`zEU|Mkoc)DZCcNlFhVB5kGPM6j#mC1Q700WjNu zAN&aez*!jm008$I0X*3)xb?}>W*iURHyw)vo;vGNDz-E&^!QkCi^OJKmfAX7NoDYA z(p~_(&`)n=WNyT1Ku&?)P~CN0;Fe~}U;El?{4}=#Q=|z1TLQ{(9^zU> z9-+%1dd8bGoJ;^WP)c?{OtDbi1T?-L!!8)NA+;Pp^S4CuZd_J+HTL&y6m1JQ|Z@DQSWYuKxR zWojiavE3J}wIaAex}|T@1;T85Ba*qiEgaUBv^C0LEd{e;?bx${SgdfkU^vG@zxC~J z6~Z#Lg|K-|>W%$v{C|t0C2w_&XkQY8$VCamT9-d3DbvEY-}-78dRPJ1Aj0CfX;{|U zem#lU6TfwuHT@g>+A4oxbAshpfu7>mmZl027YtJ;f`xR8ZRM~kml9LDR8lK_ed^8m z6q?+m)-r-EYTG95USbsNL3Jz$uKRw=TJe1B9v)87z)D~m6~9ZoO!`m4&aJhstqjAi z7?WxjwvseKF)Rz#1r4ofASR@U#hbdU5VRH##i|!uN}+C$5_2PHwH7TDwmV=igngm$ zLWs}<2#Q;&h6J>_ir|4*t^dU5edZXQF5}@FV~+8S!<>m#`}7^h4}2i2ma!<{W(fM` zw?ScOi>6HqZjraJ81w?%09fG*BWY95N@v}?aSuP0_Oji)ZbAx>`DUnVU30lF8;=07 z*nZ}>=nA*DSWW%(_5Ho4PxqQ{#jc~A?RtI2txMNl|MST^&tJdx6f8Tt3~v#@S!*4* z@)P&B0{YE+6t6wcyA(}7_4+e;P-47>W0ESv~OL;{n zJ^wOWf1MY8!C_C~BnOq{wkH6(OfG==j-&rP19zHTAg$Lih3W#CzA_jDJNWEGZ;GjI z4wa_CT2Z`oo>x8S%B@ZDr7li~MbK*07rUVOfNgQRjLpv;=lblFP3&IjjO6S%)Q5>m!Ec ztpu)?QrQb!80-`7p5v)|fJu3<5e;n2e&7;XD`goxV)b?;QwO3;a)`$z&)+!YFtkI_ z#3Ftxc?)V|H6;}1fE_rh(#|hH%=~W!umLl#Q^1Jg5)L0wz(xYRY85aA_W@f|lGIyG z1Z-q-w#)-dOYbmzMHkgi*kLkx&ur4{PUuO)Zpd zMT*_3fGyOgH8D(d;J)2cBy%;VfA8`X0c=M4#b(9TOaU+o_-^QvkdwIJRUxI5Fm2RTtsO2OPn~jyB*jr zUf2mSfghq}2V2Zwbd)HguI}Y6$n$AoT-=q_Rqg}cV5FL{Z|Ac4X#S24az!u9KwCZH zCle=r_vlf66od_6;V|HK4jfEw2jh!8SUOyy1C%BO?Ag!jdMW~J#l zTB_mCs)N&GuB^R+u%sz~J=xlyZTLzyXH0o6e06G<3E;mZOWcOANZ>U8B@3d% zfBhqq#h2-M%mX_v)AkS6OyBzZ2mg+7k;O4s%J_2@Y`s-^d#T)?r_FI&t*G@h5Eb$4 zLMj$+T?(NoFECPF=G#SZdxqr|m-N+zRHeR*^*YS3bOmLqTBeS7-LzW)>_%kY$h^Go z__nGzM{!)3P_WV|7}uKn1JS;j&JA-1=wD|3-RrA5SEy%>VTl%h7ar3_4>ugfmWXI~ z_Q!{}*n|@J^N_ggLn2*E%D?Z{HgfzGcV~1P9h{9ws9@oHbc28dK1ve1sdL8hXW*OQ z2z2BxNj(zUWmpI8m(sVcf_~$O0`AMy)(U#X@Q70pJgR`-ga*brR~0Z7=7P8Nj65}z zD!ozi3SW}S;7Z>^Jf@zx@kS^tepSJecXaTXpp7ut?7x^z%3c$visOi19AOD$z9v+N zgrstpS|7(>9i9GwTrCmmrlQIuwozkhZ{p7EIxlGFZ@L(I{ zE^ZHkW@qV!+iU}VaBF3_6V9S>FDQd|cF%2-g|{#>veZFnd{QJ-f)cn{{2cjviHBOv z4#dIIDp%X*&5UEOKib{SK9on*9s*oa3^yTA1_o$ghcw-Yw8+S{8jjX&YUKm7tkv&JUB8ElW7m)P2C1%pEiem%5-gtPYw{qnQMzlCESt zk*ISI&dmjv6cNRL1e7qC_}9Pu{lNoTID~Th`K`Y{*k(eQ1=IW~FU*mX#1<-hOOY?5 zf1xy}O|O1G6vp?wE@(}9j4w5M*)d`0=Wua0nk5sysnW!)tO1Q&N zImBI}%>HFnVVAo7!9vB956GIO<%q;LElfY-$1&joSzb|_R zG%*Qlo}+=kO@zT{V3uIL-xXLt0Kcz%zaSVPOiDsf^b#F>CM9wfbj9ze0`8NRFzYHT zvY2W0RK3J1gBu2)8?03YZCCDg#v&aMFLqVrda$tpW}i z>qIcs;h{oU$tsw^Ws$~)f>(!`3wKS-bCR^JcB8`JrM}H;)a4{BX-=s8mCY@4P3v!n z*C=2+JFHBkoGipO>JZ3V1)SYRI)QI%Q1>>RHud_!>wo&={-5?6IHw9#{6$VIX7E|q z8igbIX9!K5gVcCxRqF^C6*OJ5dwdKB-D|TF`qv0wcx&g#T5BnIGoYRPdTPl7PVj6g zpLOXLQF-b&16c^Ew)LCM8Y~=Y?&w}c?czXOYDs}RT;1HVa-R?T%9bgud`&{9RQ3Tg z2i#o)y(BO=-0fsflIV4!%fDf0PHVR}vf4`Ij)$~IhnjW6wbJ~fGEDtF&f!@4OH)w% zf;5!x1=lqX&LMRd&plY&+1=jV&P1&v&^$Xk$Y1-K@@Kp+j7?Sil8M6Te)>oZ<0iSei+n3Sbi{p0`=JolwG z5mN!f$T;x$k8?k#e1u70bZ+(v&wcRH+0(*&vvS^m6?(T)xE4N=-!N?ZRUCv2ZVg41btMKq?dS`*NA1EuRNf)z+*%et# zdyt8E3e4H{!&_yB_| zd<~;ZvJ%azH)>M1O${brBEd|nf!;C?T$M0Z5!@WUp#V;lzETzP`r!X(8`&9r(5xpK z^qm4G4TI%mGuEtIf;Tj1keLLdCMBndvsu^?=mxW&OP7NeI(S_}mB3X2i$t5Pd`nV~ z%@TgeRKCKL%qG!mDA-Pf==kN{{Crv}OFTSO&&fd57L~iN?I&h9`6~7I4(?Sj9b^ z_a0jRYCa=_BY{I*kef`lzH<+{UVVQ3>eXkk_oVBuc^mzvZ*b!lQmBA#(={lY89;z%SpJAI=YnkT%bW;k*^Z7S5BeWnwt1uE@04 zI$4p$z_WWkIo8pzvy=7E=Pn?C2fLkZjQQQHib9qF-W5{T;AGf2v$mcD?Huu7h!)A% zGyDa>@>T_mRT2}i&oe;C?KEQdp-E$wc1ty-9ZJ93MgA^MJ#xhRQL=N*%4e^IJ*6^l zAmUjZbrCfAO3}X1*4$~y%HYb~m8C*o86Db^45;|5Ahtm+14LIZQ$Wu$5*^Gs4joHM zby%y&JkjbOJEus{N=w4%%#%^(It_vetAuO_?q)G`2A?;2Ye6vOjo!u$5ZpU^V%%GS$Aey` zfxQn&1jAq;41Di+7Bm6-uur8h<{WSiqWtBjf5{wh!{1zsq#abieUU3mNs9b6!Avws zOJZmZzf=>=w1fB^Rlo(krNS^W4DBO(2~_|SOuhkt%cBN{!6LZgmqgee`mY4G8@b*n zeigrO|G+Xczsp46i%$Us3`eR04*gp3N{u0~I_x%K0!5)q;s|uBfCZLJYXjwq-vZ!# z+@^XFV8h_5iG?%Rrm9@oAazZfNPUsNI%Sl(9e~EkA(vi9D0&m+Zz1gg1?;c=2Zx}` zf3|--P^`^0dOt=ek^tkZ{NT#@>g>T*y&)1NUG0u`_zKo zUtbKWi(a<=BGtrLQMAB2jzn!*w!SNHtpvGuJQup@bu!f_>-E9ZQ`&lcFKxiojK)yd z_ra|I2b?mP2j}U&KPhj_{4wjFx1Qzuo{ELtxftqhs&rF~6Kx!O+URM>8vsAK>Ty`( zNLvP*^S8*^wPvW{(b4SiwYxm)Yo(ZIQe!Fk{ThPyb};V9@O z8JER8%{}~*myqZJsU@=2)hipTgNoUtt)<3>U5kA7QARRx7a#rXXAqe2@kj9g0)x_C z$#|>TIhov-b7K2MWl8WM-$N_2pLW!F4#t|YNge!~%t9jyR z)X_+KDFT;TD4SJS@c2E*;1Kw9(kUDW?3A%87}TF~_Slm~f?$k|#lV`mZubm%FQJ$9 zuCMdw3yeV{3e;uMh7@T~c!r^F#3gs}sOt7b7py7l9i#hRZ?|hvDj|UAgS$ zVYMyIrd1|yZOP1pi~AubIL0TXg4|wTsDOpOTX%eA54#2)W7kX_T#iOo0T-}0hfjVV zGK=E6f6h5s$gR*vNa16Om z7dnAsYkikohJ#iWuxghg2~h$A-=tO^k*=BE#luW^5!TKDGF7hKF3p9% z{1|AT!DxOpfUD6$8zrKohUob|*#b&6OVT2CvsGz*DO-ihk!$DhGH=WF?W9-a@3}0} zf~qgwra6Kb1xxPIX@ZOFtj>^idx)hY%hdA@`BIA1K7HfiX6t+kVGUf{Cpz(jj=2%2V-#x76>MYVa|b8 z{(3ENIS=}mu7!3LG(rAKUUM3Y0w$@0&;c%wrYCp}a=AV&e6_Yv_iD3t)mGtTnk!rjM7YBW0(*&DKoLZREJS8H#eDm=vnHX;@H5gPfx>OJchz2bAkWy<6W*6 zW(fF7bDb?Sut700#f?Hc?(_U$j((Q5N?+Vo00+RUs{oMk=fR`x7QhK=Tp;WD8@v2P z%=4(z$--!!@HZpf=;HVjs9drYUhn`8HYP#Y^S1^l-?Ui*ah-n*x!K4Ooa{< zuPZLE0A33?E>aND$t}N?R~yL`zcj10#cnzwHjDKo2;Kqw;?vK z_QCaAL9K7l;IuFa9`YDmo-X27E817W>XJku7jhrVJACaJUgT_25$uj9mu8)2emIT| z{XQ*VnNmPry4!h*51!7yC1C3Z`J+MLdOqZNQ5a!-MLi39DP+O)I(5wzN|zD8!ZgIT z79`@;yO_*qrM|J$qKZ=qZG&CiV#3**3R8uL@i{fH?Q1Gv5>@X++|^aIFHO{C^+agf zQT|SDOmY=}HyeR(jI$6r{{q#x0qK6T9GU@XE(Ff9=o#pnC0XCDI#}VW!Cuo*lfyqO z`+%JR9vy;CsLAMDZ%KWu=MlN&W+MvNSnXiNx~MhLHGZi$CDfHz)#?R>vX@}yEet$~ zFc$=~0IOCIs--||3kHpMATJTx8Xa%0BhD7APSK|^K~qgloKa%QTf!UDq3~DYno=3p z+mzB+2XT#60TU~P%b0a#FvTcigThytn>JAmOebt`xY8ry{Dk-GCSy5j}X zdFY(VywB4}V!vcfry+Icwa)P;)BFSAcozjc+~KDm?;NKGAVxQ@0b=YpT%MR<9rPl% z1n+KiCW6><5#f29u+9n{&!Yst>BKJJ!d`4w*P9evR0V6bO6Y7^bvF`fcY=}d|M%#N8`4^iZN;GwrS5Fsn4XiDCqesRn+_(_aLPAXPwK7$zb@4he{5vS)r8`)4a>?Ku0Hu6~B6MrUK%;po-5}{3YIC zAc3LdEJM!0&Dlrf`D^$vmH}ueDJuc9c%|)f)}*goekqWqy*Ya$nGhxoWI5;g^So%4 zNzR<~-or@WK-mq$no<~(yD-;NDap=v(7}`yz`QGn6~wCv9)h)252b{|AeeuO&Yy7b z`Gf)QM7@b29s(HZ9*qWeDRfW_e~GbE!ZtdElJ!Gv_jthF$Qh0J~G(S=u#|_HfRn(8%Isr8fs!)65}#~)KY< zG^xs$2P_XGPlM+H3Ik#1T8hA z@YTSt2sRbDhR1~Dhh*@fjgNA@Z**;TA-Rnxv~`R)Ny=#z`^7t40}&YCCA{+^U=+&2*{W~t zYSFK0cgXi<3UO7xIS(sxH=5TmXqruC#$E{r$0z5>MD09BLqkgo4Ri53Juw)G+!ef? zCr$-pK`(t?7S5K7$>4Dip0DDIUdNw@Sw?DcI5F%@g4drS_k!V%%q z-N`OIp6=}Qat`GVSl&6lGu{!E?qV8{w&!2OJ$v3N&ljFz7qDzy^e~S{Nti{h!^|Vb z=rhOrXXVa-w(V%+b!s|g?0RwWAvW>w;S>YVj*tF4=Sw3_fvL08gvj6vv9b+$iYFt~ zE3UhubBL@ni%~~}wfGCxgunr^64y<@0kYPgI~CO0jze|-#d_%g8{mrN)3X)X*{BpQ z+b2Y&j%*C2}CJ-ULUN` zK`@uYqBA$3GqFOFTfV&f5Za2~5STp6pGVBCz-dVr-mANic*0tKhupWHE0F54XqfD+ zgi!b_otXdaaTPzK)7}is1TYJrv781CgL5y#2EoKlNi4v^f?@3aIS?A|el>?dH}?X6 z`uneD?Ue+6+Ux+%WrX!Q!ir#HD}ZAN{HtaZ~<_;3R?J94&P=DINEpl_6Ne;X4&&0 zIjpyFh;u;I!gm8-0qIj^Xf@R77Gnsuyt}9uoV8@mMWYI z4C+E&b1iG5`1d--a9Jk^Tnl`i7H;dfmls<*;6i8XR}T-r8xZeW|E zD7#N4!|oiaYaPkt+HlCv8;*@L>^z(t4k2;(_;CE_*wLQH>jL2Uot1Jt`b z{IwXHC^?ySR_-q1A*58mXU}e6(Xj|uZd8Q9ndO~e%sI&24aRYlMa~4rO`17iW$-o~ z9%@ZCc=(Vx>cQgemu^jX+HiO}kibc%h%z`!!$hr!&P4H4ZcS1PYvk0O8VF*H_T+*W z(3VwL1-Wt*51$4XMmtMPftDaxuHpxhG}i4%Q(n!0rKnfeU#UWU`xq|>XzB?6!6I9O z+weI#Ni{jF31K!U8AL8d>O`;rrzo>2`=2KtJMFnzm-tUaO0ab5(y@h8AI!;>Jm570 z%3`yGPe%I!cZHC5T+? z#dW}4rSB@9+x2+5NM9u|S(agOj9j+VGXo5WgJ5?7pJ4&ki5qo0Qih-LqJ9~MrubnH z9Q>M~gmWlXu4nL8;GDu?R0>xG+zvvs+?i0upf&TlB-*D+VT%VjEPQ3}dMkp9_Qg9m z4Qz_w9nrv~aY#qa(0+gcMpdFU#L`dzTzF1dz*xMGwDRgbsJ62NKU882q`BoI zb21R7DMc#_gavReNE;hFIyQD@jN`AEscnXti}(eQVlq>+(vnAo>=1PiS`O#czacKK zWxZ86EU#l6g4KNzJO1R!Uvf9U-4>n}D@H8q~PJ#L8FnGnGF+jV^%MYFBl+U0=DiBK8Q z3$Gt_;H?qtlI9oOUYd}<0Juya#{}@o6f=?MRxUGc>Tw+qH_?+n$PLw?FYsLtg$J`K zO;PlCN(@(3jOXDUwjo*pFMTAcAl8$V0i$|r<(YUfgP^tvq63VY+)(OBP%LS{!2Ju_l0bSt83hhy(b zIf>Rsu=6|g-~I0Vp&UDg&VTDCkHzpgrfZ6Wt+QTyF5~<_RRC*n*P&%EDU8+ArqR0O z5y-H!xrt%mR$qDR7i6u}&1vNNo*>c@!KCyUL=bZ$SUDWp(VsM($2zOnc|okZmNi+O zvtG=AA%HhP@J4T*C0C8zXB#k=0~;cNlZL%BZVGlM@Xc3p69WV$mOV)1q`2l~OE3^7 z`{f&o05(hPgI}K!1#IGDI4FN-lMs??>sA!}YUbL1V(`HsY4cEdbW0NOmA$f7-dZ+V z)3VphP_2@9S@i0~g5;urDackGWiW6KevJuL^g`mcMi$%jvDT^#uEur#3Se52iMOU> zVqHz;vMIY&JE(x`66ujkhRF+;1#KC9PAZ-qe6~g8QYBnl^H!tsS${bKxl_MH;HcvX z8Y*CWqJaJFF_IArMbnumg2_NGL8CAtec2BPgHgbcSN%)-uU^dk9)i9I;N=Y(C?5vF zhwsDS*InaW0h(Z!u>50^T~YB8HX9L2c}$`-;o? zS84my{->Tr?(Sdw)LrTbv^glf$1BVgOWA!&^!6kUG6IeJ!q|HZ{}6ebA}NE_q(p)y zmaVD;e*e|6F**FoD`R+L*qJk9N3rqo3>%;EWW5StkSkYF$P7+Px3_eA!EcY)a1^;p zqYJd=QMs{>S2J|uRg>XfD^ttI=X=w`@hsmO#+V020`E*BAu@OkaRKm7&(|nG;tl}r zXeehlHIew;`<-#Gt0{J)%Y0i-;qCI;{Ef-o?&`#e>FMM75&~D~VyfuCHMxu=J=@1!7yx99bk^SNF1rxt z)Twu8dLKVO!r|+JVN7`P=RV<8M$Y`M(2(dkST4x&+!Sv`qF7gBu^%ZMzmiLltW*F` z$Y&f~vs_2$L0OJE6R}k|oLn@oc^dSpn}Tuu-=!LOe0~xf3t?|2RQwhNd~@c^`&o%~ z^yd4~z?ci63Csi|eld@N#?ZeSj#8Ld6mXJaD&H!DwZ7zSWpAs84~pPA^;`YXEx|q} zBG;^??r3l*x)!uzYF*>Ui3HqQBZZTU&I7llwh{!_AcnOH-7*6#i-|b#4AR%RUkjRZ z!bWR~RYj~rS_@tg1kRkIE$3*ZYjBxh){>W2xEX=mhQp&*D2YiqEPe}OA-UhGI+!+M zTB^t;THBhX`q}1PqE#N}C2EsUPX$p$etoRtt@+v{&gHWV5Lh{z^T$HcDqS# zLtY__1kQ3Rw;`c-A#>Hg+Toi#C}N%Tnp73Y z0Wa9zm$F>RPhBVsf3ZT|SEx)FwHa#0iWXJ}2gM?|7>fAJ(Hz{<%-?FBb6XVhJTjNG zDCO~ahnnYy6reA0ZT`uVE(@c1l>`eOCqwdL!!WNq)X#YHGQ#8k4FW3B7fJB_fB*=C+>Ii>WLfUf|+*V;o=1*fgR37S$Sm=49)4!jzOz`jaZXH z*3UN3T^fK{1oLbP0vXv$zCsorC(PmV$X$6$L1#7vhL*D!3q<$xf}c@N=Tn#rMo4<2 zASS=@f3ED6;aW=K5Qn4&OQdSnQXem}8vK$`;zh7ZWpJxiEu0s5l?2Aqg^F~iiawgX zf@HL- zHPzZ1nli2H%?)x`Vn+(|SbSj|pDB6CFqJXsszc7eI0#;IPZA0DP3I6B@96KIWy&Mu zWfM~7fqRU;G#i1>CIi4P=l@pGz+cUI9QRSa*$$kUU@XT{QVf2X_$9->FL^nQqnw6C z9tj);{EZNpR0#J$Z@;0isaDU2);AoqkttxZe;pg&zsm&JYCUC>V#{qPy4G5kTNU8OB@`Gh8(QSrt{VQBIdR17W;|?n09Z*~ zH|Clb_G)n?oH3!S&my!dqZ0~TM+jSWFfSQ>E zK2Hd|jBQYw;ogS#S64aB7JRj z$a&OiO_>Ik@MC2x8k5E|XVAi9C&poy>#`i;MQf5`pC?uGX2dybqKCa^6|@_H>v;2z zI!|7EZ3vO+=ob{GYRx3L3AC`PYMP6muDK_x{G@ z{rmHsuF%~eNuFoT{7kp&(wE+u{LJw)??00_C%Ytmptp+{;h!1f2;?s1Vh;uHsQrw} z#A^DBFnFTFs%(hMGH5R=Jk==PBzpL=x1+1Bt$V4LG*jz{w%L#N0UFnBR=r4`s1kdA1tRnc%i)&LLPJMbMZ--8*-nGv|RJF!-&PAu;;Aw#JjQYr1DQvL+f8>{*n=d2k#4V#)54 zxE(m_u!7)kLtO&qHY5oA15#FCA%)2zdA$}1uOTo9b}l#oE)gSp_q#zbK?2vA;EG^_ zMkDcn2-cCh#WA)b_yB&Z-t|&KZQb(vXtQggivZTd?#G32Rlseab%ee=%VbFleXT7^ zpv5hfSSrA+uEID$`Vx{^Gzi@STYw>&K1PXjBplSkbgXr)(GVaO35-+fD~IKuAyHgv zRvD5AQ=%E*Z6z?#YRxW6ZC|N&IM3mH$RK@_mOeNQi1A^l1(-@v1&o1_iM7ZGu%-e=HwhKKSLAbJg$o8tK|35fBq&C5;K;Nzf{1 z6{&<+il*kWwwonYy?Aa2{?Tuk=f$X9J6=2ThKr=8&3H&ONgTAZ_G)_U_+)n{1J1y* z%Yx_W-XuStT}i!yUJWO96tO{gIbYMv{2s=8C(d-r>T4A6nKRvdlti1J=bA;vw^1q0 zS4ryz;h#MMxjz%faY#k5F|{tfzQyl8Jx<-^IOU})XU}$)TmW563`^t1_zhCm9d0&| zTc_g^YLCjQcNHe0i1jfYTp8==tY$qg&iYlCbImocC#$C4>`x+E(nA0XVthV%1kKD; zGKrcud<2|aXmdT+T%IDi7ufHtkqO=ysgt~xOb5&#SOssL zE*{ur$&fi?Cw`%^+L%ikfN($!d3ic)O7b6+Ym`Ibv+%atBS_%pN~C$t-(cE?8wr6f zF&mNCjl|${j-`2-MbY=~mou?E5ju%iGq?ncD+zU)oxrTY`Y;5p0=QWW{Y!_S4JMe% z7Y$q(+)}lYSD$duDts%2jWwz0C06?c@ohAIiMl3B2Me(LMK&S(XLN$m`1U(>W$)(nzXdzH7 zSVizcb5TU}sCc1RB~=VaM2!QYg8nBy@3Ys}=T6?W;4QD66RP*Fr;~PY9nF@GF zsg}mITS){fg&S%s?^0Jw^-EIMb#LO(uMyYWL~;?OZ<&7CC)+8JveL!TY!T)$lmaf; z3T%m)VrMWl-3I)c2-{9)tzPx7lfZs?;oH}I$=Z^_uA3hC3WdcfoTc@Q0>%R0VHkRV zaQZjBn?@#(Pfu}0uM~#7bmPa#bJs1vM?CI4Vg#Chy6XU#Hcjk=E^RgYE2Kqm#3@HdzWO6d+&r&F13Sp< zM+cRguCla*t-`v|`S@PyMD%ZeGQ#W^zi7r6Q0=Cd{ET3KF_8sX>vO(pEN>v*0X#i3IJn6`G_PlE*Qx+61F_l^5C2zDyworZzsWvxu{Fc9Kyf62y8Y`T;v+M*D!?;jR()^?{IgZ3(#WXloHUh2Et*A zTQZuv`Qmb-kVRrs(1P5Y;LEiv=<;@@^O^kx!moYRYbdbo%D*z61DpxLFVn+xQ9Czt z7#xf5tNq4}eADe2jS1?w^ugh0{ zrnR*g+sD^>dA{qZ93H0uuu>hLDQwxR@1u>hZz4$qaKmkCT)=%gj6y?StKqBa*YNDx zgJd;pu<(y~oCLmeP-Du+&zM^5ciHxcswH?2Bx(KhpC!#jO4+=<1S*0$p`mH z5?*a%$zi5^-}%n;tq-tE2#xzd?&1WWpcJc4)ZVi(%?RYFJVjs(2U+V3r0E;U%R&)Dq31on?k@+)Rq7GLN+N)mvaddhk8u;rhf5n(7Q4!om=cLe91JE zzKc2E{9?{O&eG=G!STJ7dD5+|y*&WDwOIVz9a1byMS*M#Q@|_JUt~Twab=Qjj_wB#=_20TXU0c36Tb}GJH31B6i81)Q$-b&3=8H2zeLg2) z-M)O=WmlMJ1)e!}ktVU5vz&6MR;l2(vGSH9k%2dC72ZncB5++I?1xFsQz=owZa5^d zX(liB;t(-D@ut5t5Vw!phZHOuz$}7P%Yl^m`J@8bf#vG2;nQ4&z+AIOTL^6=(dVTM zG5dOlprd)Mdl7Y%(7{d)<368(>es$jjB8vC(RMXSWf~OjPIFu5$}j$4PznQJ63vO= z-0ysmiqu_hYp#HB5t&E<*iynka9anB(V2Aj%F^yNY?l_#$Z~L6AQm_pYq( zQQX^}dM^?oigzo*cVjV!yIY?ik}USPBlr`r*fr4K_=a}_bN7dT|FOdQ;E+sq)M#rUF6E-+hjcHrDxZMq0fjEY6D;g_-h&jbl1XCRC^8uJm zQ}@AQ9JQ%9)dt~PZSGFe%nQ$Pg?TApKj3HDyVbfXU>p$43hh$B?`R5`_VFBW5!Urr z26CS_`U!im)Y)ZcN?#JiaZ|v=1Q%cdULL5-qa=Pds`m)uVi35283gNHpGE#+3xb-M z^v+@ICQV;@2ss}d)SZG&qaKF3dc-7}j`c&X=7qd!-q4pD10U;Shw*69Qui2D+&(3P zZ8NEHXfi_??yQz)>DPwe`JCygi5LD(0#+xeqAhjApEvhJAyXsxDu|BG#X zVr7qisQtw;f%5uJ1~ z6)EyVf) z8za>ZhOM_8Ov7+YtQI8S|MI`Q=*4gP?z`Xp{%^hc#eTM0Fnkir1JU(!W|s#5TR^10 zRZ8He7Pr)|A56m1DTo|p+HefaYn4_KS6zGT7jWgR=Sg1omax|^@>+y1SzDTQp3_BM zEM3*Rjlz`6B7HsJgIdgSX_^zrO#M*=y61x7AeXh#uvsk2;~@7f94_sUbXH79<+h_a zl)9wwwv~5xuk5-6i;AbKq2X@~>ARV1eJ@4|f)|t7#(eeZI_Rz0mY4H`ULuRI7=p$= zPc{f(_)E@K;9B@xCWZlUvtlsA&ovD^;8&}xFMg)2MNQV4+QX;VTQ){8*ez2GTP_V; zqtPygHaEojh;yxl)+`w-BqD>Q?;FD3OGZuaCFRLrWiXD!ZDk@MlDLA<6~6^zf`~;0 zO3pzCS0HNLvv0#^D|PISoYqC4hJSq>mW^rc3fR-GN-(QvUuwNUo_6?}rLNy!&%rQl&?qlgWA;qsDl9{NZfLjbR&b z!=YGI246U5R&m%aWZN&ue=%Jjv)8n2)FdG{_s=b57Hw%Ui3T1`EzkE*9`Kix?}y)g z_wUcv#cbY)0tUw4-(Vsb#EvawMhYX3ISoW5Jlcz7{+1WL|IL>f!rbw8yl-(f^wK^* zR+hwG^!%mB-P^Z0ohcVEpqg&H9)iB@BH|ZJ=hQ4lMeBwJ74XH~>6Cww-OH4a!}L0L zB@QpSd>QHnugp{4hQ=6@V>JE3qwN$nxq@L(!l4>x*CXtsnpWPcM4Y zyTA3V7k}%;FMczSdQIoEu}t{7rYotrPg!;K)%6j3%D=LXPUdR$gI5q7p$l=(>qFY} zuYJ{d0L=XF3$i#G0H1&5t6mF?y%^C0K8nLBuvwT8%Q9(dgL;}n{V?7I-yRiC@}f9z ze)qexXAI1ecq!rQQ+!L-T!p=DK{U;{H*hWr;C3mJ2;QZdY^b!F;QyX87VUwQ+ijWR z{`&Tn;YyNK#qTQXqJ!Wq3<10lz@V4pPBIrlhsNIk!;U;h1*?QL&%+9Uy9D-$@>K!X zTCA`Z?i#z)H8tr`-kue~GFa}m3=V6~|B7E8l47r}E3uO4_4(ii;F7@-w_6d|x#7fa zGMGo^z9H0A{*J6e_t_PQlskU~DS2NB?KAj^{d6oJF>ImSqjo`X9-I-D|GnA#JOYYX zEJ{lg%SQMsW4lRSLf5+ERzsJ+W-oo7)fEYKpa!{L)FJ4E)WP309GOx#Qo)WmCz8~| z%4WrJZ9_UO1?)E9jYl_KQb+0_;pY7q7o>7C&#Nd``U=QY))77m>bY?92^UnRc z9GYq02bjF&cqv?GbCU>QQ)82<2ZPP#LH2CmZ|UB6U;NE)fNz3rV7T#Dvvd0Ddt+}P z{8I|EleDJeeOX=DB}?j{^E;aeUe4Su8+wyXy=NcGPTS2%4$hz&7H4pIvNi#`^rCBi zUBJYsWl92--HkHVF|~CfQkW)UDl*-b_pa0#&Ar^Oa03;|=d-4BD^jlWdQZ@Ap<*06nt25ftyOuoeqI zulwuKvFV?OwOM@?{AMax`xN%Q@9~$&)YJLjzcl6N$5LnpC8xXof=1Iu*TO|)Fp$1L z)#XUsOeEsGCd1fF8HbR8qEoxiIZx%z4#>T+yEC0H&)EkypU)@zySs?y9W3L}?jzx_lBWitD|czI)<-r=Pb{1iLqC4^kAM847yaqGZ~hiV`h>FsS@Bhjox!Py z<|bmbwyV^yb)D7;O4F)}$O^L%uwR9G` zO+UK`%XQVhlVsR&T)U}~dJ2hi*Va8fo|~?umRJJ!qFh!o;1C34Pu&2`yHWk4eaie~>qJq)FxSoTBEx@nqq3`E$ z6xwCbh+q)hb|B%^jPNtmy(XFp7;6$33WvZrCKhx%iMv_R@moHnvOW$Caz7wuiTGrS z-mwN2xH{CXuQH zzS~woQ%YieDPS`nB`(7Pt`cuo4615vYotvL3!~kO)F@0XEhOfkm)OqVFn`9w>$oBp zBTXBGy|+*qTYCu>KkpF5D@7gm6}o~kae(AcRHUqsg3(QzK4!xB>dpJYmt9SSIr(fj zlM0%rYa5PM0F(2AY&1gi5;}cD-GQ)r^x^YAJ-B&%Iz!T)&L^|wSwUO)hQ}_*!ub7t zx;7QPJdzm0&+qj4au~z()VdSF064!Yrjy|ic~~9x=EJZNe6bK369$p{W)GSOSRa(1b=t<*O}(L|LL41 z=!W9(EGZkssFWmK&tQ1atqV#SE#+sKCKhmd! zuX%MT6W0Vmnxmzyq-4cdE&GPoRb^qgoA4|X!eG{ZIa``pUMe!*`-0cL5&{RZOa-$7 zi|{JCfb6;?g2s0Duod{4GMHW-WKF$`z1_UTw}YQ=uKgD}><)IxvMG#QD947|8gf07 zPSVLtmOzf;|*AVpH#(a@$8QP(g-p3I3%HoCRQCY(7_(YDVVEs2y zJDLO*!2~jG%wUhGECvhUZXLg8M6kgqb+KeYtHrq8WUsontZrziU~_>u(IAWCNY!S! zL>OREX?+huS*Q~6$^cU@rm34E8E_J0q=bgRw%Mb!stc_~bHI!xkL-iKtB3Z<4qsyw za4mpNs(G0LS!fM?8G>#!P78AW>>RL#CV!9G^@8A*@XQ9_Q&{_sG$U;xZ^DoldZjSx zm#9hLtjHoo>6WFL_0en(hL>}iQN;PoVcM?OB(Pc-HQU7Q0~y*iuSRoC9TN|3QVN9q z{5>9Wj6@IkCN^D+(>4^56G86DSB|ZZk1eBZ=luSi&6iJ3=O^>iQ$WgZFO& zEIvA&&eD;p>Ba`DiPx5=JM$QfjKbZ4#!xlB(iTHv3DzvevUMjm34Al^EXQ`%y(p;} zh{cw?yMdVc_2tdYWtJ9GvbZUd+a@MaOxJ%}_?*FE6)>H0uq1_AV#P@t|DO~F?lS<4 z3T83ZIr4M!$?*Oh&M{kGy~@_+`*he^Y^|&Yr$Z>qOE&k`#PNn$w)sauH_M-Y0fR?d zfYH9It1$THC%(6b<(RGf0QS}tIqQtnL&qAXWXv+tx7pt79RRm4vjEF$=9dt&ug?G` z%F8k6h~D{hSVxWEmBsDm2aHTfN}w({YGn!G`%`&1vF5I7er>Alj??Wp4c$c|-VKDd=h$e!epNpT^uP3X|rBLYDq9;W6D{Ad%y@x!h>Pe`a)ZDprA~@H;jsY-oD8b@ugV>Ju>=uhKA$I!T#N>yrP7EgmYxQ>zS#86CLLUdaa}XaKn8vh4{Yu~_kF(IKn@FzXF;1|@ zr%54i06d8rTArPrqL3yi+S6rhayp%m!B6TZ&tu&1TFh>iIs=p~kwKd$^y%ES)c3_EXpYC|u{UP)mLKle3eu-#(*)BUT)6=!Q%;Wp(C zMG&dPy7+N!1z_gzGApNU<6dO4moirfWC8R!cgCz?%j#bf{!Nv^xai-Q|I#y0Ewg2f zhpI^AIe!8$XPkTdZbSQgt!C%=Vv%>XwYWLM?YHVaXqlv>@L1L=f61V)%q}Ps&Y1lp zGd-^w>l47?cQ1IQBIYfM960HkW|&Pci22%(7NXkam9Y4{`;fex803;kYusTeG&-58 zoY`d%;7NQ)Jxe>8E5XQXp<4fs%zs}ZW=l*MyNcRfN`vG@0>|0q!FH0=a>F><6$hVl z6lE;>m(soqu}HEIe>ewvtFbq;znT7R@FfSnE`%QLMXEi)Z3H?jMgfaok|u!x@GHXL z_cjcZwV7ZaGa+2_za#s=zda#ZH?c3pYP|hGu~i*B7QdLShR)%Exb7SFNIPP}0LwJnoeiITd zCL9ya*z=62-UwqttUmoQnAoFYw+rAJp?(VZyE*{4$=`~Y*C{ll<_ZQrWC0M!24E5_hQso zM_OQoaX=g{y`ixywiAM5uaj z5CKe8>|kO>KUC0UKATL`LHSKQKLxdO$C$~WXM__#b_jV+JC^91&H$rIbF{KE z!oU3L(pPs*`8Xdrf{@3@uB;N6l9%qnQK(`AW>aT}wz;>hwc_j3g%)R#F*@2BR6Cfx z7bXqw#A+5e4(7Yq4)p!K(Kz$^zZ1R9@Z1c%kh=R^`G(?-GS7cHzvA|%D;qg8Geo?~ zW{-s{Pyfwn>wvGHkL=&be+D*L&%pN*i8O9YumjBb z96DyaVge?&Z|q#em@Qt~VN>=_b=x$g1w_3x>T&;o3p`0^ZTan_C{weaE!r ziH;_d$M~bmp!gavJ7p2e<9~=5NcN6tZ`E*UVbH^2ZabC(yVj)epntcoEJgh~qT>oh zN1lggN{KQkj&1NPc=qRb1A~WUSjgYOgfN9KCWv5{Uy<^(yBWBUf#;|1dj?n0*BWRI z{w89L!2xbDIKD=?vlq7#oyz-k@SBnre2wC_X?beDW|pJ6RX!n#a8YkdZ| zS$xZtSy`c*90r~Pcq<}&!{9RES_=4Xy~iQwe>HDYh~oxle+Crd`pK}^4MlkEm<^Mr zc==IDT3oyaU?eaXHBbz1Yxr3iTvNbe_z3_m4J>{GVA&jT>l&`e*Mzy;p`ds#GChoZo@7iNF`-Wa;aYeB&CjAJCwh%d-vdX@H-c{ zvlEKid@y|npl^}@$Jz4f{YTeG{ zm%m*4|@i({&WtJ zclhtwTG`r|tg;2kUvzsT_$Cam`yL5}GP{Z2>PsxIob~)*l2eGT$2{Ld?h;c+I^pNJ z$D!ImFgB2KZFayvQU);4#y8HrEyri%WRDb=F03t2(owsai3c!yGdLy>W`}X-S;#v~ z4%0@Zxul7Z_b=FXFkEXrtnO<$y%&q)ujpS=21W2d<7 zCIri46TR4LUU5Do=DT_oS&rlc$FF-uZg~RHfVq8^!f39UIbb+Th|7dFWO)w=40fJ|;h`&a=*+dHoy_ZOZeB?R z*CTPI$!1!%>u5?=VmS=WQIwv>vDor9ey?M2!1;?&!91Za0T7dM9CWx#3V)psb`^9V zg(iaC_d;Esvar{u6tJZcegBh*U%N=(Rw;*{BDm&&&&Xd}#BiSnHkc&Uq_0U?A=o%5 zV5}v^#^MfQ!OLR`PR9m2O&euprga5nLrXMkh?eFD)Ac$bJDOeYWwfEjdN z98n6BLGD8_`QYJ)jvpR=i1LgvWP}0pm8XseT`FMSLe7v%A zeEdskOw)vP{f(E_mevuhQ=lmdxltj^oQmUNC6&6FkVrBIu>)Tx;#dnzvle<;0JBay zxm60_fyGdE10+rJN_i`V0hO(wR)QgE*H((YT>^_+xm)D~Y9^EYjmcy$5YAZo1|mD7 z&nxr&b9_O@2iP36P2+-Ub~|r;Z$*R>^B6MIYw4`nGv*qt^k`26vy19BywzbP?A6vM zo6$Hp#FhHXBB;egCdTHlWT~52sm+wG(+gmDxs29>LDV+7`k}Z7X`*s1+!f3=gt$a- z%u9sw5%p`6b(5{UDtYapDvot&Tzj@z-5Xk$gPdxG08;Wi-6lM}B) z<3?s&UZPRq5uP;`T_%GszXkT@rmGz1;rY?I)G$l3>OxHAZxXhmWy1gjPO_Q*DdhiN zf_EdzcjA%Ia2NivB^ZZiYvF1vPQkjP3YNZdml(|}bM-iea<~?l1O+U5NxA|Kg3WxM zvpYo-DwcGI`60ucsVFL}oZP8gDo;64x?1+0-@Li1`A z3??XH(;A7^RRELp8DLuEv*~y>R?0q>Yi)FrG|F5_l#Hhx&ryNu3SG$t$i?-rc5Gwz zT7fYL?JW-^srjJS8WE#_Wox(EaiPIoHbbn+w2{QX!Vp zK?N*^y<;CvQg6V3b%Gm#%Or1wzW8}?h7pR11P*se=3@ET`?z@IkoeHm$`9IB-OoKa zJbp+S37k>s2a5tMHoNyQCE3e;3S_EZ^X93KCG(+Tw@{3I`-HX>X4KwfrkC3UPxA?o zOAEFol7ryWxBEMEGJhOt!)j~r`%!+K?k_K|(at>W+H~i1ne=08`5iuGW!BscNYTGJ zX@f-{4lHL&FCzAW1GY}ru2SZA1X6bxaE9Z9VgboO01e(h~m}gBUf%F#dPeI zXQOD$*MrEzsPnX1HQIB#zMGB(aG@5zh}(VHt8Gs9S2y>8@DxdrwWagv-ZqS1XP$e1 zbAL6#Ro7_Zb-=ti+;UW*to#+_FLS`Z>g*N29LSOF!li}zsRxb&OvN3ZHLH%aW7&iZ zf@2$WPpfwGo;>7Zboa?WHjYfSqRH5#WxQSxx0&Du;fWqg@N(fZ_0X2)i60l}xIF$z zm6UovHCe-@*uR21(m=8x8BU4hO<1KyJKlvE1;iFB2%DZ zJO-U`KC0J)tzX5BM}^&2I5jMyU8W5l>5m+)FXd|_rdKcW6o!-d)G8}EOr#IiJ{sRX zzQ8nc9N^a5i@#aYHjG6h&Z)VK4u-+R*L(di&s)5&A6vQN-TeN&$}ZrkV@W`mElAk< zzWb5H@O)!c{1P$>y~V>(STXqvcx7-czA}Tk7!C~1dC;YR)xZki_r9Wn_(cpCet9~5 zEtvELS*BwUo0JMBgTuFV0$v`%8S5j>-7gq_T+h()TLCjE2)`>BHUz#x*QXfVS3{d> zmrQz*NYJ&Q)zOsw6fJq&L)t5ZKSc0mlU5uy(8+wPi|rbg3&$aju!~;-YrSl?6X+$v zUXg6GwEQlj2d@*?KR@A)U>p`c%UX^XmDS0O- z-uZqXf&R|yqi=r)>g71UM^D@I-_Zo(&RMR^!sk=>97Po$O;($Xt1h zR^;^zpwfSx`ZUm#-MgL)m9K!v-Nb{r8X%^}1&KKfO8d%2-+{RNf|y04H!zjOeO#w) zI3tXUI-E}H3Vn@Y2A=`-zid6)Y%b19Dc^O%_m_~`xz}xyk@oHEYtCOG)6M-k%5;B! zW4=if+m*p!yd7XYnT*+M?ufHFj)YCn$|Kv`7;1LDzY+x2Qy{ir(zqraGbp{%F-quW zZ~x&Pyg1+|B?_OmQkj;xsmGhuFmpNu$x2-+an|yM9WJ5SI{MC(#%qzuu9+{~hQmpH z7h!CZ*xGcd(HDCgjA5&@>!t;&o11BG7b1`4FM&ufA2-Y2Vsz^bYBS1=&?OB6&j;4- zo}wjtspyt2JoUk1@c8R?AB?JT?cTnN`dcBcrmKjqx4kC+b*_RYT9>A-gHwNdxM$qqasX z8D3K+8N%9R4UJ@F_uP=w zI!NBRIweK{9%mKy@##-yk5l{8lau*X7DFR$2@{pl+8ktO)6weVE$WfLNZ#q>bh0US z(Xgy%hM@+Z`Y(s&E!al$^ND?kNLwhTOup1N*kMdFEa0V%1%1c=sfM?#$1P(`B$M+0hw)3 zg0xlGeGKAoluEh~0dQzuopHPIQDkmHWNuuSMLWPuBAqc)q2BsTB{oHj1=fC%Nzkq3 zg*MQOw9{B|EsCdnY6-gmZ9QDXQybq*2{;8!)KDn2nW#L0sTFRw9pSeIy7igs4S|6y z9s|)Vw~7*lys4)a7}E%x<5KyQii12>0oRw5sUu;FXCaM#&;{K*7`cfS0w?o3=dHwi zNGP`>wSh23%JY^CMQe!Qy0QOC@C$qiI3!g0hb_i|Y#28rZA1qvgjeUFcjn1h3(w=w zvJeaYe!?YK#J7G!1?<`@P5jnTlnP*?C~gYas02DJ$e&PErzA z5p2XPbrZ7YRWhkyrC#Be*u&URzaUuNVrII%sD?@sE_bdLWw9hWRX5rfTp6+O3vf(J z4v!C~6tsPwxL4N>B#LA_ovoo{_3Bn_Vd0#RyQa5eB$tTMk#o!B)|2@lk5Ctaz44NBh%cf~JHH1NY`Kg=pD zaN7P&$l&YtXcutvafNZRqkS9##N}2bS6)2`davs(yf`VC1-#slgiBGwJIsLc=aj<1 zEosP`7KJZ8?Id@hQ@H#yaL(xSfm6PxVp#qj&rsE_$|9YR=a=MZ#vE4%rk&0n&sIM; zna)@UJ%K)~$wCkVA^<$ccCwdfd4(Zo8nOI29!Z$EzO#uW6uyM0;NjB#FBU%4uJMKF zGD+QSB)M0YS3?fB!{CUP24J=$$8R9NpC-!_%vI6DYoxEr7~Qb3=R)Wx;B}}=rb*ut zzD&ffkRyIwXYGQr2}f|uvle<1^4{OtV)pFm)9 zKg*k_*o+3gaXI^PZoEFryBg=nz52oP9x2tz>4snnV+-v-u=Bsj-&e4DnnhVJXC4^* zVji23JcLauV%@`(oYt_pu#ZZnOer7pQy$1w5SIGHw$%CEjlWvIcq(Qm3e{TOJRCGC zIRnuw$%4Pp!q?<5M|B{B16_9oql-yb7?$2fBd@R)>q;oh9bJ3M;Dk942EN$BSP1@N zEs16%nq^o?B7R+aC432PL+TrWd7!T3^-%#s;9!@BsQ68yLs>iDv$0t>lDHpesS@}< zU(esc+m}S^f4t+ENU;!H^!+#~>UTU9+>zU@NNXxv<1#vJ6uG9OcEi{WjK!~qW|8O; zI&(XRZLYcD-kN-b=uY0DB}9&u4NM$s+_D;e7R>{5O?2W`w5%zA>75y19B&vjYH*a0 zL2Ft=-6-F?RO3idkQ%jn6xT??14ijl$)I~xz$9!vGO_ze0XskqeTDEt|AEBoKHPma z;nKb+hOUXje6U-N;!ZP24R_np=Lrr+bmU^-#e)Y&U>OD*=SN4w2(#~E#&0^XbzFcn~dA7GoXshF*$sa_E{rD#2+OdxN7FwWz6YH*n7Dy%ShZAyCf;K>khB~NTar?w(RhQn1R z%Zb^#k##IYuXICD#04kw>DCr3U7BWV^7l43{+Yk6u!pZz(MG-&$5eWpFJI4jU|i~H z5ye1M6U8yg{MzKN6C2JBIuDsrx0q}RQ^!)Yhb(QilGQ5Q(HnV-x$XG19T-G*flNk{ z>QHtKw$h0dWBGuuA*6$JRVSyeEbL9?G`=X$XE{#|EE{Q}hR?9$`SrQ#03=_&flMB- z`(i-o7N(K0SXmlFY3a)dw0BT=C*p9kqEKeqm&i>?9B4vYXspq(;T;;{OJYClmlU1! zNLN$pz;vD$*WzZo`jX-;rpy(^MC)0Et!K0c1m>V_G_Vl9p$dk-M0D^KwQz0;RtvYY zD1mW!yzL$R%)o5#$>7OetwbWwgZf|h7`2#!!+CJTDX5Ba+Tiwp@GuFUTcyLYr%S3RA;BL)-c0E{l zn}S)N`Ta1DP8t35q4t9)ZP+a86b>aA7KT@X`WuqJp>(mVuaBk*AiZ_c^V%nzfC^YH>NNp5No ztY3QaxhJ2y_c=7}ljBE^9zA*T=yQh$VpkX+9wyTS^Szs_-MSiwKH)Dam!+>K8gJA) zeS9)M0kW|yZvEzRG%nqjPxDJQ6TrBUE2sRHd@MJUXnX;DU`)o>&W!2iIzdB8=0&q~ z5VPLuuh-zIq*bC>G_#qcXnTgkCRjlk`c7*eSi?h$qoHbD7X)^zq`Q!q8vDgBJ`wuz zu!|`0Q{SKTBVG`CJCf+Ud?Vnj%>Qr^Nu7_R#-ygitV(j>UDjuU@7)_dJ>od> z+0VmEE3^WB73K^#2kF6Y)31Ccpmh3IisDhPTiV#v+$2NL$t15vF6gIjY9^(=-q9A3 zt+AYYZ9chxIaiz^YXL{DK|@XKVXi=St1_rV5F>6Or94LFQevDMqfyCAD!yfFjXPW5 zd7Yu4N{z)DP?oHC80)lqA9PWH5N(Fewn;_JV$sLHmMXeeVNyH`4utJFqwCB~bzspl@~nld=lytO7>&5*5M3 zI1WRLUqP%x=utaQwRuI(_D`p+)dUotRsF+T7`*0(ms(dz<7?Ge)D2S&m|{37iBZ{lx3L%BC{9fwujr*HWzU9Z_C?Yi zk(DuT+bjRGjSkW}OJ0fYJB(^ti*>DnX(?cKGO=~n{|dM6Ca?8a@RCfLCYrbNG)R@f zHS>#59=e$moCAivT>*!_CJ#7?BTJn9OK2MW#zzV}z#K#NPS^o#fnKc+<=d8B=@20< zWkN=wS#C=C@EEV{H#&a!Vwk6NY+3We z;&IjEUg}w&)>ZCFT&y7M=bE!j+ZkJqxCOEob_DNIzGe1qpnad-?q((IWsqDJ`-=zy z!(kFqys<1M!C*@kKEr{wi?U?|L@M;+x^YCt@2l{7Zc7%SFVX>m+e`KZ%dTmn5lia6-8^pG+qy^q~5y=-!H9C?;V^45=ziqOcW??Lg z!EbIZa#d7>stb*=SAexZ*Kuc{?A=c+6Iq;Lf}3#h3B3 zbwY?iHB2gO16E5u+S{n2CGh1_jnl@$^kp&3ckLC>7jFc;Zy}z$28Yi%CG1@A3R{9n z*0T)S1In+k>H_Spx_+O(IAs&@WK|S5N^H z4WVxr!7{j>ZbOY#C5C}+MMCfjgMDOgatT}^(dVr70q9O;lXANP=BYqzm2Y@ilCgC$ zEQK)>hMyyQeME4x8l)D}txnF`i@et*ZPqCI5}JvvM2wl%MgDa*hg!7~xqIZ)tSY#@ z4l+t!x^!Ne{X&S!HizclY+rhHweDBDd3bnlag!j^=aEki@%w{NzI)`jF&&1{KM{@8|GBSD1?&CfAvH)CO8Nq8IUUUonhvA26f4P-mMuTmfZC`$(Rk^NA^y#oHDzDYtk0uRtSxwGLvb5*w!&2$7D_y z=O#xDj7(#q#7_5VPwb!<%{CTl%qmUjTan!YjB<|g4^^5s*ma12pUa$5S=u{) zQ_;|=Gf&n~XOkvD?P8`?MVUL0NbT*=HA!ocvbyp#j7<(G?M)tCORr8{+X|V{>E@X>y{j*! z1$DufhMEN?;8%k}7*OF@#3d-9iTJKdu9eBOl#(u!#YTfQWByv~0giew7VwR%B@(2z z;FZq`;!sintR6-HU*hYBtPDpB*XvM}TE1xkTpGBpRp9AanXN*$2wV)tWUuu7u;UN0 zOVPe0WZV03f?07Zf15K2s;TdXRn8r9K5X_SLCb^E#XgiPeLwfPhtJ^oQ08)7mGzs$ zgT50O{-%(-1n(h$+q!7ye0dW#koPNq_xQ`lq;0+z2dx`MyOQRkejm z_>6r{y&YH-s(^JdovOGGUUBbJD#e=c)C5JV>TKv6i{xtWLaiNb)KtK&SG~M9VNXxT zVqbAPeR9yhZiI?P&WbV5tWxq4yHWZCGp<<|n!aG#~uL zYL+uAW;YvA8*Z^B9_p4>NUikQAY~rdDm%x_*zNnh^}Vg!=(^10_QaF+J!@feW46U8 ze+gM0W$z@;O$*&xW9#a_C?&jvh}ZCWWcDuMYnhdkn1rku_O;xL;!>jAPkB{OBRRygft)AG#K=9WwGnmi@- z<(wu8iL)^nF9XrFFnV`aJ?!SBYv&ZhJXci0>fmi2x2lsvVeTd5JW2x~_BamN>seT& z_z*Zo1r*lahXRJa21y+5@-zgSmI5{>%3{sD7+exq1dlavJtDXSun6v<%;qtEtLP($ z3HUl6*YDWv27+5sdiUShhXHNDmxz<6saw;kO)3j~Y^fv_?M8pok+tKndX%vyDfGLA z3#%2%?+0Uz?CzMjoyTL++Dja(okv{*Ud*OCilgDUQ9fDr8^KqmmYoAe*n;Cs{5E|H zKxsw+6YEMNb2>;}JL0(}`e-l(ZSmJWW%W1ChchOzouB!fN@jnLOa<*eqtY@M?oJti z*2NdiG^ES^ek!7NBYGbK+$YBmKX?3u!jlgje~7D-Xt>U|a?E07dd(y*ePt{Uz`bX7 z50)Mfo9LC*u$Pf)?cs?W#%74#nhoZ@+(?^_}M^tSMJ0 zmFgWZ9Kl6yNUgLS5t-81oLsE&WqL^h8*HxnR?r>Q{JR&n+LjNj(RD|#o1sW31Y2wC z-jP}WMh;}K8Ek^yRdPz7xEcOR;9Ou1R|8i_Y`~#N7*e~$@WC<+oqeD5`w&sc$q7B#dhdO=xFOJbV6Eh=yB`QLg zq$9XHJZe%Ox)5Wa+1$n&d-kcR-R_i$bRiqo)(o@sC6q?*-vj^#ox@qse0KntN*7U4 zjr(i~3YE#CeS46*LYR~en2Bbo_53h>KAiYt0zY$uQv)W*Se7?mqGkWXuvaM@{9nL3;zKGQjv8g*cW;Qr`m3{~Mw%tD#nIBMgZsxP4{qIh z^yt>DC$~;c=oJDVXU5l^MK_VU{>mj?WE*f+!NPFFa5V41;~;sKbFL7m)P}T-A+EOD ze^+7%6Rs;N)JsI*B8xk8n=xU(-h+sIG3kq|Q2) z)z}UlXY~0K5O_eRv%O>>S7uVRC4hO9ym`vDT!0l*EI{Ec5RFpaa!yV53e^=;p-R@g z6*C{~3p^Cc%0=?#S@-bCC7ivL*v@?yf(RmiLwZQLASOvyZEDxf4JTfT*D zV(l(ENZ&kZJIF>Pd|>8hQ|wSx_=3d(^-Uf;&HstGxm>!E(=vcLz-wtK-){E4aKW}< zQ_(9b(-}q%%dAW4YG#^UE>JG@tiruOp-mTC;{t|M$=(6cX|oY4eLm5mnC-B{HuSfF zWvoE#K)k?8&Pz0C|pFF3|6N0#5=f3Mk-#52fWBhYpDxvjyn z#8@;3LpKHN5HuVHz}>{JIygzGVA6tbcMQZj605{-6Tl{hHWf@Or85fHY;3g(x^f?* z38{V~akpJTEPjb7-8X#rWgjLJ!6st{n;7*BI+t9X)qv0+s!I%4DvbkEkcuN=F)#&R zQ>L;bSn@WM3e~P!b0%}&K1|9Uq@x0)r0pk0*O+uETzlCnUB?EO?L}haSaWx!p3w2n z5Ong~_0zZ>OLM37Uz``JSReXm}f2j>nx zo;Z~F>&LULtbZO(np~ddj{VKa#smON*>$tY?yQdEGuc%vO#YIu&b>K!(bFN(}iXMj4)2;2;js)|He-Z z1>K}Hu{t`1Eug9`1+GiQU`&^aX8`}Zvr%+;c6U8>utNcD%UV_crTkSQlSAa@;%gSUh?6)mpaqTA86PGTC zSmiOPTG<|ygZehzYzvu2#>y@StKa~ugSI)BgCZqbLtxJ4pz6vsRPgqd z{VUu1JB&x~E!vDQr*Wu-6~0^re0A8A#ASqyxZfa^zCbwqMFHn5=n8>w1MsUPZy}hV znU5GeR>A-2b_QpB6~XYh6tHz>XAo?Uu?bl-gSiRO&>3tpw!Q&L2Nav1fpF>JafJ%F zoA@=U>Pr>74IsWdB*VO}K>|1M8WK~6mm~yfXaAs4oDRyEv}%vM7GFd*Og8d(zO>jiN`)YM7dqtP5Np;H$-B37AR z>GuH#;1OBKUbh2V17r^ui(q(mG(+!3 z84qfAF;Ae%)zPezj>=`rkt?r)-OoK>7ZQvm96x#z#_~K-{6btp5)22+D?RiX7`FQu zJaCefe!=vNNj!T0@YlaSng3+&6yFpUli71;W20RGoCB~hRypUyiq%zqXO$5BuZytM zXyaMoT7@+WzO|vJPdZ4}@tUk<+m^@RCNIht)hF1Xf*mYwh;7TSL@k$Y zGy)IHoO7P;{VhxPF)NY6M6&pNx)2-!yZEXr;pz7|G>cjaoYp}mb}{ZEBnQKLTuT`H z)CzJP!^Pu!#sR=NJe#vU*=3D1-to_+62ClcX_X1CY&M#-QD&MXZP_frZM|w%Aq(N^ zpP@#LQ(hYmndX0dBDE7UUdV+%lD4MK=-Qnc>%^Ycge+AS^I}|ZvZM& z3zQhp^=0*5nOffmI=Qv-G^CR+Gq>*MV~I@M29LA(H(8xWdHcp?@f!-?*nNxabt`ZS=dOTZ z;xsczp1!CB&nSo`!yO;E_J~CZuSeka!)|O!l9dSrxQJPft2E5`J9+Ra` z!}E>ChS)-`n1;f3($Y3E%5@Zqs;VK0Zuh}OXeCgXm z)pi-&C2*o7_6kCZ4nOBd{NW>>kT(b>+0HZoNabe{7^@LbELMW+OfQ&hzSj5TA0 zTYX9@SIL+6lPP_Hi0#w5DZ<|dW%FoTayq3 zE(?DR+R~6tF%PHy9%=3aX4RJ9{T`PBw^dflS-MT2v^-y5a+_xcAb@a4Ogh8*2^|D^ z>74CQ-y|>9;TJxpV1~p=y4ePJdRq)+a`p_R~0&)lLS>zQSm`Hd+v?Tifd> zxQZFZs;YyCVp6Y9#=mQo{k-v&p?17NdGWHB7pl0eo>{T&xo~ zc>1y{LWnDTv1~;moZG#2Wj7~OqJDudYoYg9j&%)xXJvnXdu82gg1x1G!FuS=qkge= zAheUd3_*JwM*vLt&QB4+!&%TKK4bh68-t;5oY7jWW-|D^$7GF#@7R;RwF-+ek5L~A zr}lpwkku%wqd$gmV#{`U%0O^5uW@`JhkDmg@OAvtsa&~hA?Y(S;H-h_@!nuM%NG@~ zokkdjwi$dTk|i}G#%kQR&jkz6a5pTa&S&V@kXcDDsF0PqCPYt`bl5tvx@)>U^sjN9 zRQ3kHmfD$_?VKxQZW_VD>-J@W3PR(paSsVE2d@xN5@{BM) zeDdVhlh3(U`qAf5xPTYg%Nni|&gHljRg5U^28nX2bSXpUfISL}5~=+C;jNRe{hB^s z{pqb=|LF9mvt@;CeogMoxtxKu(9_e2%S$5&0P!i=^n)rwvfAL2kQzzKsw7f15PUx&7BL(O<1_*T^VR!< zrdB0WQHMMeFq0J6m_%G9;{&Y7;D;r2snS`dq00PGkvGrzcv!s_5i-)q4!@^{5a zU@*K7e95j+wT-*)ShO?1cRsNygISK%v~XMa+)u-DAMk+RI#Bt&-CipISwN=0eGSsL zxa(79p|8U_Pms4{I6lU{6xx(zc+4s^>YCj)Et9epD^%k1@vew>lZxR&Fu~vEV0X~H z%HQOL;hBt0mCvGBn&`XF5eF@iz&-NS`0WP|ABxc92gA^_HzVD28xo1u z5KevWA(VF~&3=9IgC~zpZa(_jt@#gcQB9cTP%IAwzIjT1G+n#oJTOu?moV@PYd#18 z3ER)8a)C54wZrioeQJ0tj>jX@`sNy~XRUN?A$_Rmu`=^ z)_N6!HJNK_lH94^uv!4;jA#HXbypJ$!7x|zoDSb<>URLaS3ZTUe2TifD1*+}vME}4 zSi!xsG2dIy8t8e(`!_)GY#4t=y(DWqq>8jZtc#vWT31(vyEiBD(sZsXymgA>nktVz zbhXB$42s!z)BxMd0!Srgs%O>@NORM+D671E4_ZOh+Lk*btclMxzg|#Gbt=Zu!2U#-!Eb*j(09)m}?5(3IQ5H!{bncXoqgSgU!y z^XpyOY*~}fiePe*7A_Mbg&lpqfdg?Pd~fWwNnbQD9+7Yb?n+^nU=cZ&BbGe?ti*C4 z8XRB2<;s2*Meo(7U{2z=Nea?zsonAfAw-j)(cRUk}7XEK0Z^tK68ubm8`DjH?dF$A-`Dh*(pOEy7 zb?^$}9vWf$Br&e4&FX428XBDYmBN}7R8}@=TIz@wpOvvv(L-7ugV`U2s2 zH3e)8P@n8?@59*LOS_Ksf642R`aYy*PcKa=S*!lV*-zBX{I2-b9?Wo$32+#fCxgz9 z0@BYtI(~F=Qm8$7@bKipw?BL9)~&;n6Aq;O(5*w)Uuhw5d4aIt#l`qd3>;6&zI}4* z*MabidE+0>f6Z}}C$nWy>(KN9o9Fr=S3=WyM^|>l|r6T zCu*f>w-U1Awqx4aV(Fe@+ygCxR6m`p>CKcpF>C5MN znij5EVd^9?eVrhtM1QeM2yWZ#Z!wpIVn7RTvCyBTR^XSRkJ*AbR{RN9F*DaOJtCC6?!YEdvpJM z^ZvPw?z(a|tSb>*{cARO;8uNU0)VHspHA8Kqw5EY;?*`eUng`lOBZR$`!Q1~UE&r( zDy5T1OGJAzOoHPr1<&o3Q*5?{>Lov89l|WY*6gpPqC9R_#BSWU2#q1`+b*W)eT#z( zCT8tbHXU&d|Hao|92P-G`{HKzQCo+#djrt!avHQ#!QPORMOUzx1m&B!w7sG+0!?5f z+O5GP_^Ee*WkCpsxr>2okrHBW4TZyA^{)yTK0#mu{C&?r-q$73+7xiVnjuLueC@ml zPF6F(7%usEJMj3Fj_wkOeJ+@2KDI7lZ(Y=jzjmuEUTbrtkqRUQ8?g~=aZQk=E2X@Z}A)OR16N++5+eeeSs^W-TrW{V_4i-FdH1Y`lx}Y19%52bN=KJdxt|_ z^zVFem?7xdovedK0*AwB;l->@ze4K9anzaQ;o*~GIDG5DA?RfGSIlBFEjeqrg4`~E zSt2{L%K^--L$Q8v>*NQdis0nS1de>pHsD--G>ho^PakOIUr zqSmA;#-z6XtfyP(wBUnhXib*&g8I&D8%oOgf)t9VUG18aT{S5k>|>hBt=b8UNnUYF z4tT*VmNN@f#kTU1xI9cCuM#?LP0XwzYMJ-dhEp<^2BYAe#?uukoGri1_^usYpuCro z)5GiRWPU1H9ghE}GoZJmpHL>(LgYRGjZKW0A1aSlJG7VGH&g%JyqZ&1W)3Aw^RBiX z0xt5(Pfd;mn7mPpm)TPcY80FLq)&rgqx39zEUQDgutCbECaP4oKA9J`bFr{mDb2Xi z(4%W*?z2xOZ|OWRRyC}pg*c|H#oBaCS&@xL7_qkaE3SQOS~`(o@pNaMJB>syium>C z@(&;4UQT2WvNOQp@KP*_R{_&qOt;d_GK=wKCakvAYtQtPlp za1BKNTP573?yJrU;G%6sflCZ|^(tU3y=~fEv$IQ~v5%Wu>?6_UG8ock6j~CKzkwnp zuMBp2I1nyToQko59V1C`!HvUeU`^;6ff4~WB?M93WMxnLVV1(TH`K=8merg{qkbxfcg4^+HJ*Bz|KrVQ7d`? z$s~T{!{Qfjtbp4#FFMgP)D47VuXH5NqU=%Qp;C=7}=KhdPMbMYmD~8fgYMR zxJ7WeGgwQOI=B0}8p|4OD!)Wr-Q8dmCqZ+W6A!}8Qauf<)z7`c^>VwETBnIc!Cwqe$58Ek8KrKAS8My1?QYHA~W+;=pz`DhkvACk2wTOAkj14NqWKqS=m zqxAEh2TCDkTB#dAO}FOl_&z!ihVP4Rn*!XYxa*QTIlYs&_xjBpHSlFtTcLSh&tBiB ze}~;b*w%?x+Kp?wH#F!e}bS2_C_S{NW$|dN+qHQRs+}MZ)xCuDpp4@W_orQTH#yvsl6qR^ZSLsf*`!*FAm&{2>s1?OOZx> zJ2d006&$sORWa!w%{(Hx?DjQ>1R5x7Vp$s#epo%|YevTwoF6 zTGzfJ+=4~SR}wWkaswZa`zhRt+q21?VvMTkA&`G52pqGr^lcClz(3$*Z_qWZ$%43VO4M*l4rcf z319;h2Eb=b6H;*YvkvHH?5*NOBbOFT3_OXFP&tsIbJF?+?xA!a9P0S$zjla z_V*=s-GU_9;a0phJyuMCNKjW7JG4_9%pN?3(3V-sMq=RJI}jwD1yP~u*#W5&C$5I z0qJuYg$AqrhQW3g$80Wk=NZLrP50z2+mlWnHNcYIdUTjWu^v9O?qE0$OEt3Pv4nHW z7&}(n6`ZA3(=a!uVM$(hUZe*FxI9b-ujh{a2^c1vF{(RaNAy*e4o<+^``_n9DqUGA zfh|$pK-&6?(K08LTl;9jSmA5(xDbWeq}4q_XEm=$uM)EC&xmCkQq#kfkjG*<2Vs%Z zb*mFx8^f5Ug!&4Kou#te7Ev{3P?&W3$?3BL3bZa+1j^%UBp<6E%1EnIFu|}8AT+z_k3<^89Rnm>ad|Nlk_yVO@#jJ6>R zS4_p z#RwK-ptY!of5z*+);t}T@$k&7nP(1rCGGn*SME8!8BV_0-F8>`ChQQ!+q&2HqY5W> z!qQjE9g5xh6!0>4;>%q6tETgwY827U_x1>2TgJxU8`NlkmR67~h|#=|c%wDFWuBoC zLHrgX^xg0%j%}7r5PlB;W&-#H zu(wgTpj#R^+kZ(&!L5nhwKQG|-Dqpx?Zx$stE6vbJuwt{dH(wy!3E)@J#G?!FZB*F ze+<~>5xbK3CZac?=6%iFA55rCzkv1S5*Mt3lCT_7T5O*hSubX8J4Q zm#2Nd@|MIv+eHQ39KmbA3r_71dwsuf?$$Bvax9{u-NL|MGJXI&-)`qU3tz^k;jRLh z8s4o3ff21RcQHfn9z$RJho|A}GmefNV$QbSXACpDq&k>{&RBC0Y>Re~I|>iU&x7u} z2U}YYPxmSDnk`11Pj`aeQqG)3=_Zwh1Kv36>p+!%g?m}^dj8-a^kK~T2|r5wamda5 zIFt4DS+dJ>s^`-cKF;*y0=vu&MEvt!3q%Qm^g9UyL;KPw8CrPM^n1vEwyG(LmV#@ief26L$MlLIBB*l{=T_EVHNyqAnv_)odlv&080DPikyAPX;Nomc zi@X*`elBW4`aCNmlvr27)PMjgwN0M1pl`s!2HtYRAV!jWvh1WhQEe-EMdoOdR|fY& zHISG6`xr5S(g?+4y04eq?0sOZ4FOC6+78_c^Qv0CAg*YkyFk!}tYrM%Kl>>;?O!)PEaJtzG`}<^sMe`#lMPJ} z&wD2-f?2XIj-l_`6~1=+7$xJ?@Yef&8E*!;PWDoY0KSx=XGJfT4M=RrUtyYJZNaJm zK)tcy>;@w&5yBgnnE@Vdir^ByLUu%5i-}zdzw((BajRUZ9sb8!=)}n0Jz@>l-!*+$4hElVwh-3dMR#jD8FR!os>Z`9Dl9O?B~sNr;7CfT>AGm-?!)8MHW|E! zI^JT}F9AC_-QpCE{iBBmTaG;gTpmriyq7x+KO@AExE@C7Lj=PZOg{I3-?kMrr*Ax1 zpHAHfoSjG7WCbIOtxoaPCo5|?rfF@3Y2s+;#=0(z%N2Y=c)6eBtfyJDTx{*FLRoG| zjFPa`RQrzXTokrmw~(((dtLuu4SjGpiPSYxxGjORShDK8{-MZRp zZmgMObA5BU-g=G?rJ~&S0adYVV54N%P`s zH&#_!(WH40KkCxj+GzDWMZ|VPHOx)fJ`i|PEY{_}eNe3ag}Nx+ti!^U!Ov3nx;l$I z+ko@$admaFw(TS^3|`qDuIOhIFcfy(6?W&|9sbvbvp?c`;9>Ncl7r81n1BLS|GEeo z=RXZVI}2=1tYy!Fn2ezHHCSYoUWBl`y;%A}C2-e=V7!Rm%5XM|w)hlMvcLm&D}=(B znZnp*SPAio7neaRw|D~GaI`mzSYq->#X>Z02X7>wiA<&3B{2F{^i+6jQlo*sVpdWY zXDgMJwT;-sT2b0DYf(8YY%8roRS;|86&{&xJOgG;V&Bh8A*B6#ZQe}|MM>g!n3{>` zQo!_(s8}s%v!;``TiELdk--OVJjnWI7@S{mHg9fh!dhOl5$d9j8EIz0^TvjofQO41 z2I!LV?B5;oPcm%0e|nU|B|k~=z>T|I`5wo~W&Dtqhsk0lgbz;d9vs}=+Je8Qau}(* zwGVxxkukh7aGg5}e-DTuttW9f(aV07WV2in{N#_fX1|RfHiB1XdueRf<4o2>u|Gbz zhX>2`2H%Ie1a`e57|-);-UEZyYqd9ouL_tSvw>)4gypJ!??NKY1|*E5u--$}z~FW*!!w@wg3%N(64+RS z(6tlzsl68bl5`7&qktvws|{*kl1^ct?)w1WWF>yPV{oW>Y~$0Qp)G-|c|_0~_l*QS z2piav>M3^}?{D_AlaGq{4dZI30w^<=sRTWcWNf#bK5XrZq`1)P=| zlO}fj#vDo}5Cc__tBg+O`|SC|&Sj;59fJnIe1`uTP66j&$~SJ@Ow}8=5x`FPKATlm zv+Ku**SiM~?;d{g84r1$@r>i+PwqYA8AtoWoNp2qT^-@TWH;_gW`HS*`Q+)tpPv7e zi-JArDod#jP7m%fPfV``Vt2SW3F`-MSc~0zc#p%Qf4>`D#DgAwkd(-!z}K#|<8J(U31PS+G{D+_HcMlGti_*N>kOcal7)}GPW zu$2{-248EAkFI{D@`tpKB(6evM=Wf_7_1an3#BE}dB&FLUM(<`r`xLCxKr6kENVHU(3_*DVt`;(H?;eykP zdYI^QRkKR7%_wYa8AR41s58VDI*d<_&b?5j_DK4u`(`>M4dJsezxA3VNE66PJbpT0cXQt z4{S-b#cHTCJF2fQnXZKW+#f{n=KV|UCH5&3zI`Ituh^0LhaA80hlWq~^O6-u1KEP4 z6)9;n*@g-(>)1B)W9FKrdY2u2$LLcdyQE#ddilzgZ=j|4yUKqh%}f@HOOJgXGgcbe zt0r-a#I*^j+7<-6bk|UGukA9Z-J_QS8?fCQypEq$Zu<+`w61ZlweC^B4t08Az^jy&4Ij~xU|btzSH4-O$^8C zdc$y?>!JzLH)g63reSm&l6`v}j*55?Y|=NInTWzHsR62~ zZ(SixR$;)hD7Co<$!qsS@tYD^=jWKOM)^9XaEV_(#~0UY(JZ0Sx5HQwD`L$g@K7M* z+iNiH2u^5-{+CJMGLN*>ZUSURuz7)2{B^>ZG+zEoY&gPCihGkov4-O}*oa4Vj1DGT z|MQ=(|Mt%HXIy{A!SzpOH_Nv>UM+Bc{ z_b=fg`K;^?71UrjQMw6xHU+!o4yv@UiveQ7lUt9UAg&O-x2BUvkCv7m?f&Msyxsd) zm$N2%mD8a!=Da!?=zAs5;|I%}sb9Q|l#P_GbS>Iql*sinHeFQha#gx^yTDJ~k!m)( zG}xr=pM4gVaX$=fQ5R4dn`{&77~;B7uk2cp)w4AOD0YpYS3J&j46XShb5*$=zb4jH zGXbNLm~cTU+s8%*sJ(k%o6VS!uTfwBIQ;p`WT?3f119_Jg26=VRpZEAIyaaXT5Tw^ z8X0N}$jCdzMz{KK@w)KXDiyEE)W3t3QpZ&a&#V;Nehi}p>vPA5SBIDVqtMvWf-EM2 zo7Ja1eI)u9C$*64>O{xXZ*+ZK%}PR=X!S*#vp~6@bEPOQ-K$4dLV2_YY4pC*$}*h1 zzE%C|YgR1QTbZ|Jrgvh)kkcY^m}dcm$tLU*=U2JKD!O z)$P^e+pF;R_A&`8vNUC|n}3JPklMXSv1dT7e_Mn#Ht@?+0aF1}DS5Si6lG$uH#+&^ z2((@YF$H2B%u&wUp83qTB}iHVj%LY31XtBC7ALd7VVO{hI1ix&uHYqkxr?Ax zz}8Z3@I`M?)GsO%C{SPb^-J&?g{FFRZZxB%lv-m8SoylKLJ|zF_6nA?La}bY;GuZi zv0F8LfVxL44F)CeC`w-6UMY`iRl=G}UkVwHCU484b1g8{ZbZWD~{9I}yLxwM)F7-ACE|3wsHl zlfL?xi>{8C;6>_wGPeyfr^}5--y?NE`7Q@i<~>~6;5&}P*pN2svLLJg-ag(wzP|Wf z7_9!)BC74twjsglRB=SsZd1UvL0s7TXfoOT&EDgsEMuAbOZsA(s~F}JT!xi{j3 zYHUUCl1Az3c=>ct*ojxxeJ07Ui)VI#;NDL*kHxJvMzD=z8~43k-HE-g4#!^!;o187 zoW-siEX0bLYL}!_9FWClH$CbTL zLugek?`l_}2A+U7oW`t{yIKdlLbNXSUlfcj^*z88EiL+;3#FW; zF^-%aBiKRWg6^mxpS-I1!mgO}M;>)^X5X)8c~T13HP>U~yQH5Rn^d`U=3A1+=;2f? z7GReGC7%V6XB7@lmKOwUbrEm2%AkY)AZApp-kuRvEC#->HEmk1R z#lQye8wE_{Q2~F%L1+;65tVNxP5^`7u>dw3-w#YQdn$c}vANF}zT=YAtw-!e{EA!) zMOoYdyk!AK~g|0{is zpf(0k&AdX80wuC2U{bjXiVMG5Q@$oQbD^M}Vie4VN%t{;QNDmT2@$EgfBkf0QnWvQ^VSE4)8z# zM*@S`T-UHmqs{IPCeA|OU0;>zyv>2=T*a{GrqO%%&Tk=rH8t@f%J<2mM~@b>N4vkB z%>LnJg=_}K_^01A#KiG1F7knNtJoAn+m_m`aphnEhs4-V!_eK4gRH|E;Vb7J7t4m#O_S|T}a8aCRrF>ypv()tTG11$ zl1H1x>6Nl;w1iqdkJm|$_fFH0PNO;JsjupUP0Ld{_D3Z<{s!9t8@BIRlXY5ci?Hx* zj=q*wN*(q?dl%3aqZ!Q$uaxTlT}hU2MG~eOmbLk5HNKtA!&6YXz!bLNGUQx)N?O@V z>Q@=Q-L-sGIc`ShGEiFJZJ#Y=JyymOv$`Luc~%F%QM$>|xK^yv0+6YtdUbVuHR3q@ zjV*{dKy7`U#Q;qEuC8vcO#md& z?(Z$_Yeub;zx*}e(Z$7P5}80P(MjF^pn!>dga^hVa~XdIzniGx4cv|E)MWM-?9xgk ziM<&nF79A8?)_C2Tfpe&+hY{! z6}&_`I`Zr}(54S~W{(VpHS{qbe0Okn-DO55HM$a;r0d7 zO!y**A3UaYeAaWHz;)~x3pQPJ6c9U)8@zYqj%eH}^2tjjbFr(J%dXbh7Fe>jpecwa z=0e@IPRlqYct_<W>QXOXG~;?&5_zA#JX;>2*uQd=k;&i&BZ0h+zHVCVnJ zfw_yC_w}i=#E1Z=|EEjtme=aOA;vGg3C!nZK>X7t&(I|-L$(~HxY{8UnIZvC^lQ#dT_?S z+y{HRkLmh&dD))?{P-nPse1ATnhT?0ArSwIXtm+qzu#}v%XwV}SIN|{&2ZyS%vVu5N9FdBWq&??Bv1*4OVS<*mPg{psHU38yOw%VlA*RLSPh~P%8OBGhLwfZU1fI(-iohM>r9~jx? zKW=cG=;5eBb687NHb`n=Y4pk@2dVKa2AAv0%+>piNLrEWnlA!QeNa*coBA-!D~ktt zZrX286uTjK(X{i{imJ7=%wKA_nqh)&llI-L<@JTwwcd;k`67-b+y!1+EN#mg4Wv+b zm45(eT@49L%0Tq7@TGc{U$+46`f}2}+4?TK>7X!+_gMr@YV`lJzpUm`1`mWD)?;B( zm{rgp$xh%G3}<15zKUNnVjFTc=vyizk1s}&zDWRaA^61|!CJ>}^qgBYZIie4p!u%tS7bV z1WF3wjtnB|kegISF8EC2P;23(7ED57i=wjowU+G?&Z9n|0mqXfri`jlh@U<`}>OddY5*WR`cfVBvER%t6r10V{a( zqzyBZzd5t&^jClS-%_w;Uw*RE39tO-PpOvAT zl1?~l@+{|o)XrIm8=Dq@v4{-|LpD;eos%VJJ?v^UoJ~T z=5K2FhWfWpD3x17&Ocwx2qC+ULfvj_SEs+bv{`2l-q@75vA1kK3!7u9o6ZF>-X`H$ z$!IBQTidsYwJf|ioFE zI)I$81aask)cqVmhyfvN(N{nh`M|OkbXg@-90=-0D_n8)$x+LWZpW{HRS?i7+Q zO@i+F5?XVYmuoWEd_ZRnF_+dRjL)bvn~%X=Ra(7A3S*X>{Eha-6T>igE^Oa?V=XhOH)cYIlJ!54gyX@a*0V-F^n5|~JVgkag~K>4MX zI(~V%)YUESnp!9X*Un#(T4L3fQX5lKNNyO;qxri-0azK2_d5$fmQHc~H|EC}bw=ItW8&GH;dKD)1|$puzf>4wx%ucB+uIy=^^Bu~ zPu|@Zv`znhlJhjkp{hmVAuPo~>dI6M4UBqC2Q7fT6$s;eXZPMN4s**?!sL5dS~5rC2-qLG^;*5S{3qE?D=DhnV9^a4rTJ&anC?}UJ4t2FFSlqI!sIacpF_V}@E4rzg4GQDf zxP6`~)o`~-XYbRynIym8{c4g{a@jMza1_8qn)6R!Z5^WwhmpYHtq@+v0l)Yp^l(o& z?1jYP?=JW?+_^W)5tJUup}mKP`bc0X{9EUMod!k-*DC0ez~*lduRvJ(7K5cP53ySi z?EG(1jJ(KesjFS_TS*CE9%3a@m}Ib25#?=BxV9#d1iU>VHuw_2E{{Y_=FD$GsB0#6 zYiTs)5k;faV#N==3Sku)0KzXM%RwITp^Ch4y>QDf1QWHdinm!DN(t2a#%kcHQuMLB z?F=T2Fx-`LZEP~(X}Pa7A6Y^51Hh2Er*t1mj#B zf|kK*;B6;;IdL)zwp<6DY2VadXFZnw@itq5*#Z2FeFvCV|CC^hQuP?$Z8#!dC% zgU7NMcK)!IFprIz#2J?l(j1#*9hRQtb%vLR6g%BHIM~@g%B}l(c8<0V9&O#<3VL^T zcFxGo&hMX}aFyLeX}rX$)P;(}r6q!xjfN9!c~#4l)ckkRzw+p7I)rix^%x$|}O5^5V!sVwbo)QiLyQJNg#w5Or z%CAHkA&x>^-j&a4lWatpuH^NoV5KiBv^L-30xiCTU5dCBU3av{y@n#U8>*=n6{qqt z-l!u|Qw3eO=y#Kasgn6xjT#dzhO)Y46nGm`D7U@?2ZnVG*A}FEwacj^m#3R}DtvYa z6KvL{gDzfCyPJJ13uvcryO|B!hHS5Cu zj7E3$oP5P1Grkm4VY+ZWC{w76b?!@jJUWgTUWv z!grVFTlemez}{~$`0S1(DeP2mhM)m&iQpHAUy|1uFaY}o0vQnIA!vo)u|ZigQEVAE zr7m@gxP@Jkkpiv}XpuYKk7P7hY-Q`Z3U(wK5Q|-6g5WKS>uHoWkd2W`&{Gj(BAL8* zshz-Y4KBR%H;EW_w%4~vUZpeXNb8#XF9u7eK(_@8Qn(UduA{{jopQD)Y$ACgU6_8N<&J!Hgr_*EwOt^L+|7lxpT zEdjrVn>RP|`GiQ`mk!5Z(L(+_Z~kq=(EC#Nn7Lp~A8dYWH{M=kEcf!`+x8fk-b>Q) z>q4w{8H10hg}h)u@4*50CGv0DGpV(ySlzk(`vHE3kc(*|%tR?O<$vJ4Hc z-Rftcq{-tPb%GjUY(Zo%I(h9Ao;=+;?Ch;yK&xK51VpgJRr6|l4oT~J_*!U9u)F#c z8(-F7TfsTa0#TEQt+x#JJ7HQiZ1m%fk2{6z8n7Cl?lvh$3?~U+wG<1W)_I_G+&-o} z?`yIq_R1fjo1M$n2<6hCBY@jlZmmHY^-IuhPa<^1>IQI6w)Jms? zmRwi|tq*$*ZzoY;>i0EHSUM#r^n8@m9 zzP6vs9we$D@UtU;-GG!}k{BAZ3s*Z7qTdR0c~royf#9_ZBiTEPwLABX5|^mr#W~r! zi_QhD=ia{$c~9=|+}}Ce+27gO=VGLt)3b;7&woH)^&u3;sHJwKYuScD0D6~O~-7D5oq&yyflS?Wn1sn^!h z8K#vq&cJlGPZX(xS^zA+(vaNO8nIBAW~;Om@rSxLTT+_m8 zfmSh@CjDY%%Y0*y(vDl<%iPZY+%AV^HkgziR1@+A3yFfgcuK^0kGWs2o12tFzI2Il zT(}ju%i+2o$pK}O=KCh!T|QqxfZD9l9@8b%M>87&Hp`-ZDbD*Xg^lcFm#;tY*=t^GsLbb1h&T?3zU{yDT?%R0;Z@jnZ_~2s~MxP73 z5_hO*rH0wco(l2{bJ zghUZ5bQQoiEm(yQH6<EWW$c?|0;l41+D%?=F)wVtw@eZ z1KpQ`TJXD(B$<}W8FCB%wuogvQg#f9+}a78>EI(CtGY$=W@b3+ux1Q3Te;8NEh?6k zTR9!;0F_HAHTx96@Y&hJM`t@{XNNmG_dzk^(ED5W?;o5n4t;WRc6P!I{lRYR0S_|x z!8!A_kF>{oo}Yhb3~E3WY*bWG~*DTOm9Hx?RtZ9yH71P|8tYT%gUzact7? z^LZ`ct_ff%Jebg3U%$PYDdr}4N2|7?c3HJ0%EEo=ray6pH7@=bxHVcl24*?ElwjwK zAFm=UfNownh;&wn$ItH_;pJ^FF1oOb$)fD_ntkyaz)rEEYs#iWKDSMytQ_8+Z(jKw z^{%>VaNQ&r^TBtmQNPIpgB>N{*BH9_dXd>MS}b1hBt!*UNED?A(E=Ixb?cJ;=;o!u zcwkZtE-VhYezLk2U)9|%@wbJ?kGIKZMxaR_Jdnkhbw35xU}xUOtqXM-EDj<47-p?}v{Sp?sZkLJd%7FRx7Hf0ZY7Y%wRO2d@wawBrL;`v zIk|Hu-i3sbx&6M*^~@nStK?a=2$02a+v^-MOW+!pSw!-R+}Sk}ZjCl2WcK$?hM~0| z$>8@8NZV=9!(|LaS7MR0T}Y-P*gZ(j0sE8!7QfotD0HX@^>lG8b6YlW z^f@1MYf_&M)@OU2rUP3%oEjsbno1Z3!NM7m2HO3u5GH@LcRo9EePP7$#ge z(1VAzj$ZwOtlk9$+y(L|7>n+`HjfCd!DvFV+MqPP+25yX3d}Y5jFBevIcML6HxxtO z#$gq(TDPWvW7e8uI-vFffDQ0D3i$I3J`=_Yc$0bEF@QyHJ=+n#+dP{TH&npw1T6Cn zIJ}KrH+%DB``HTwFmOG-L*QhN3_cqqDq7ZSfm?-@;P&z3-Hb%*r|RG?H}xOxpX?vF zc#7v>2fpHQBa&g~5Rv->;tv4u&d%Y<37z)obcFIf0=;Bg1AIM-W1#M}M~g?lS?r$R zPWJf6{r>4}d2wNklBzfcf%_0Mm5M-3eDZs| z$}k}>eE8|D%5Z1Pg%&rCZS^g~X$5lX70Vh!opTBdDKq?h zDHq|e6=`$2?Mkdm+J@Kegv*=sV3jmJr|)OWSUBVv+OrEJHCOX4$grr@MM|2=*T$q` zwIF`MdS#<)0a^`<*<}658vbK@&Kx84?A{n$Qd%L~nXXx1#ia7gzGc&=?E!gpC+9&Q ztDh~w(6p66F5>>{IhV3FVm0Mb%)_61*<#rxj1IMOYh)Cy8@{<-+3iYpG$+^+>$i|O zG@ajNb1g^e!d{Y9$UAWv+l)sg3}#~tGzZ04D!#nCtMJWS@ZOzkdpQrfMxsfEqbNyY z!+pSTSNTf>!?4#_27PN8G?B880n%Ej6?~;`l(0{tCBm4!6)F$@KS2WLk-h{EhZP5i)xq{IBGdTY~K}<1Es@qA>FTpsjqfA%L ze9`3W#iDs-V*-;@seBo%--nDvrzEYtz%}MPI(ky}7Jfl5S;^iO3%xkvmxM4Lf`+kb z;IDk;D+7z&l{DmzC8tzWF7_Jwh=9*#!X^){BhM8F^pcrxXZYD+Xc#Pgw>OZy*l-31 z?ZTHx{$@v@6OOOvz^XppELR_%TT0kVKJd3Ru-*}uBJH22jpQ(L_lP6`7#~Fg@9dug zUWS(sQNZ^fF~|&bQN0I%nYeRuE_#J;-;(qo$+YS9^!Lprz7z5OuB zRy}FTS4K6CB~2U_s_$6|l5(264dpyWh<*zkScZ+6<64as4`WGzYKj;h4Ju&MQjTfrL(8_wN-As0w1YTwOjc$6PGMV#9iGGI=@G`3 z+8w@`S}!mDi`?2%=cz6>A!6+-_}=hQt!sV%GlaQO&=$KMPPY=LI>leltn&TULqO}= zHkcKC4HsUa*mv7}@kD4$9~beh>=oOT!Ec6bmi!lmg|u~zKfmfR`r=ARHSdfh%b%ez z^~hn2oGKs{84&r zp_BZ(0xtFYYaWK6=>mQED1lkvjg2=SUw8F$SR5(*Y>ISYMEcFa@AmVKpSM8#x}~>k zUvFEWOvNq*;srbU*Udx>Ix~d4zjcBbhQ8+~CrtXD-T%Sa56*T7XZP=)fmY~y%Cf7l z7g@Y@MqS8T=`YS7{o;{^1lD%A>XdB85Hvpt`8m6k+xVSLo4D~P`+RaGlGnC*K~iQx z)t>W})n&zBTe=*n>-u6@isiiGSHAKVtMltc+9r$q(KGtKqB!413X^GbEE|Kf25SSq z3D(LwHW$QJuI;yrBve}!PqI=$u+Tnf$sP;ayEN^+)<-*)3dG}col8>ZKviigT=%#> zAHBqKSeVf zKcU)f|*Ne_$v*N-YBsFf|Hynw(RE%CT@q1XtK>B3bYh1aJR+E8+eJR;Nq?cW`0otn^dfP5WjD1QWux3d&IR!97lP0gz`QA=>Y@F7|Fp; z*-Ctf6h1lG**e)dJvrPzBR$+!hr#RB{i=Ymoo(kB-94W~wDQD@c-w}E7d zH~c8~d__vqnk?oU3U<7A;tL}KA#!azTFpt7yi?*90Tt1(nf_QRj5atqTPW^`)}NX) zG#%{s)131(^CgX|{eymu(V1JgzPz>duRds|6?t1PBeQd9cfUi*)hC&4Nj z9-qJA9Jp~Am-g-X_Ga7un@;w-?9m+5Y|h((9D@?BQE1U9Usb&g!ua=Y-D`-YV4KOv zs2VMX>OGQEHHL9XP@d`~L`#?pS@wscTuG?fyG58aE9})2FQp`!B=tSh!Y?+wd(m;3 zM#q;m8!eBCzkOYGFGH9l=ELJGLV6zt0PYy&p2-3Gk$3qZkCgF+Y5c_U-bKJvFu`&MG+)9(N#1h+7leE$G~?szwn)jx%{IlXFU|7>gL z0M;Ui&(3~&CS~cdl>uj`ei6UOLLOamxUb@C;E=i5)kJdrUGD#^RiA}89Ra-A7@4PZ> z7;hAwPT@$u!FjTjgkE8(_2FSYSsQoNrM|ibq6^2`kmnDQRuOK#n3&mhieJha>*RI# zg%UA(^Ir$23&*xoRqQ2I#~Q(34(Qr%V8}4fHK02 zD~{K2T%na+z%viPaxIqpJ)RA#udtwa7N=HVu@YJW2f^Jq3z{M5mm{(gg|N5{gFjBv z@cZE;=E`5;OTZ-Yn88Y5NMMdto&S}*hJG1vPQ_v+vo{k8;#ZXYFyY-le8s0!zMZ^rUPDewFur>XSl;#j zMDUob;+Ov>cw;il%W+85RKTOqA>7BJV=7-w3Ebg6$X`9kOQQRY@f6O>Qd7W# z{vB!F{Y?EHu=cr(a?XKviuX|Zaw8#w%v;&qo4}a!>FLScNZ%dSQ=LNPt&@jY>&)IF zri6Wtw(g#vo_Yqy7WLf#Zh0V>Qa2?qtDckbvuNE_(C**}fLHRf7sSqDw^xy1Eb{Qk z+W8XK5i*_|0=p$I323xJH>TlGnU$JXHIVe<)eJVz7B<@Ytm= z;;xD8^})(@^f`zvZkw4Jx<{Xv@&OAX76t54BO$PSmBuJw0^fRSpHxyCm2ws(4*0zZ zcOkDgGQ&|Ecnnti8mt<(#)d2t#z6P_a1;k0r{oIg>p?I8b}JI-O~^SM`!KhJFN`e? zSAHsj4*}>F_>BfWI0dOB35hIVKFvz!12!9RJO9qX!=DONCW0Rxo}Zr_(8y<-Jv=be z#zW7=-iK#N%NCC^**hU|4=}N=fg5gDyE0tIvK(B(NV&9B+b8+KP%Ew`ecslUMN744 zxgWQId3i6{YLl>Q*nnM)UVx}zl`N}O)W>WL4)V416jn4B>3m&5&Xn)A)sDre&Xi4= zAXtNWS5?MW{R9bVKcdU&?`c+XmFNv6N8);*Hl12=G&arZSV!hp9Cu!^W5mDa9kH3e z?Pp5zsc2mg%U5_4^@Hr4b0JdjnMP~??``JL{TYrQ?rQYsM>A)6u!b(L0L0I_!E1PK zgv`Rfc7N6G;0E8p3AgGXj=s1mtnJ{nY)w_xwfu!(`HK~zhXR%h82t3)R)(J^dt|)O zW1*YEZg=?B$1oQ#m%Jn_b+R_=yQCI$UK(3NteX5O8}p(vXL8s3T4zni@*26t;yeV7 zxh|os&*f@3V!2yTdxa;Bh-AOKul6J@dzhH6;nWBcg+|^%`;x4zttO|ujM0cbj<*VN zK`#%Eb}cb7SpJ$|0(f}d;~|up0_J(fvz5R+G1RYN1Y+|KmkRbF5Y@qg*8ykUSjejf zdq+aI1!7g0bO%csn!b%k-PNa67n{>5OPg0HFV zve$h4l30~lCv60T*$<@xb~~>(3J!b)ucB6&`^JA$z%&xVV4^G~kmW$={CPI50L$Zv z<1!&kbH<-H>ZDITkdrAr2aBl}7z}^ikyO*Xl}p`m-CgQ(cn0((Lf`#t^xZjo_yf4Q zBYv~;YKI4|9!4og@9vzl)XD+t*v@J4RtSDAd~d9Rf3U@%HQRw%m-Pd6FwY+0k)zJH z0B=MoKK5j>z)Qn0(zUk0GH)v`@t3Y};KqC|ja?KItVj=mMMuT#)XlvGSEZiEYD_d? zS{P>2EtZd|=0s>ejS|`hFI>Gxxl97vrz=oRuJ{3(>l9S1&j)o z)*I7p%K-W^vR5dN%|HIT(workOUjsk^@PVwQNQU~Hz@Li+R(FhAZa>00-ylhgg#F6D@jPyB{O6-2 zb_zXL^J&}aZP@aX&1Ifx)$nJ9jK=4a%XvwCEmd>Xu^zcbM*a5X9Xp2wl@ zV@2>|@S9aw3_%CKH3uwseQ^JyIRZ@#Y|FmRgUD?R7Quy8)bGWq-fAQnR|?z&_8wVq z7FYL6-!~JP0nq334h>Drp?D0J~ zy32;5yU1KtRAHPVd6Xe&sH&lh?;hsEY(hHNx_in?I6XS`&i2Ob_?66p_wan@3}!>{ zADo>qKisZFB0Si8bj}eR2$9E&{P3GB{cP#Cd#t}=^qC|_>@TTky_10_t34Q&&T?o5 zpliJ*7R87{4N{xAjwH1nW7!%Cwm4uwuS-`!RmbiHS;4&q88$-6yin=sym0#>`7{}T ziQ$=#=Th5XFF&~kVM~gIu8wb~G6=pfckAbxH0qKyi@Pi-g!3*9DC7GfERHtShDu>e zURJ!fRfEocdqk=I4Tq8Y2s6XzH)QL8V{uLg_6O4o=f*I2O{L|2c1J|BC6)5<8`9+) z(s(mzD2zIO6QvgGbZ3dXXv#QYki|mT!cc+rNnt`+8m?iwe4={#BGz0j@)AYwgYN{p z#%6sZ@$kL^Zqk%A+cB|eO}~xTau7&5P_y`(Ioo1iIfwxX4C>UOl0I|Hv{%=5D0nW(kEZBPm3m2?lp3ZT*!5UR$%ns=Y&Ec@LRpk;B z3ca;Dc+(& zCieAK9l}*LR1)Q%>eoaq-0<6Dc?o0ohK}aM9ty#xp7&hvHLsVvQK$G``WFY`nUV1Z z;3!}Mpv|`&0^>&f-b{ioeGR35&3}CeZwYgTl)-O9@Xec>SgnBe8R$!@v$^ekgOT8r zoB@8RhhrHWdS=HFS26786zIE$zd7idH@7pCeG=pz?H?RwRQdkC^SB2)JD`_iG_uub zYyT-q`Rox7h0{>^gtgFytdf?#lD(PUKD6CAy3dNOqph=(v-6#k(Ne7rVR5EcUtF~*;#Rrsz|Q|kIA0~lua}P( zRnOTA)%9&Rm$drmy9QeA%d^SB&kdxhM8P^9O<0?tY<;UN z&&%@%Xnm)fW|YhmHY)?&X`M&^tEv4~>=#bY^%S5*QatSz=3w>6h9Z-UETwi7#l=(B zbr2_*TTjfYXVS$U_|@Xb+%ga4S|Vaf&X}+2E0o(-qL!0s(26JnU3!c!xjRzx5*KMr zF>7`D9SgqH&k5i<7()k3UgTDd2j%vT+Qz3f|MOd6i&M&S7spjr&GW@XE4tM zx%fg`E?adwQX7*FgMsXV5Gcc7{dKNLk-<5Q5&;a5b0P4ob^w#cZT8W}Fc<|4e1l-E zsa_Xh5laTYXuJ^^1{1)qz$FcgNlF(hg@vy$Rs~CBP2{#DxjtgI1DO)!4T*6GisEE7 zH0|VX4;6u~Muvb`inl z(buu(JPE$P>t8D%FA)u#%=TCIRK-W=KCCMSFl^Uz-fJg8pJ90#e^g}>nTE{xsxHhw_* z)18MuefZNy=RbXT_|teXizH2L0xN4vKkEwU8rH{V&hx8ORO$+y{* z`E7m}*2Obe$hk%gWc|0E$){Rp6>^%$v{X*RWd!unuq%n~SoE#Pjb$!$3Wq6LnSv9^ z0Z>r*&uKoZYBoMHmG{*w-+*R8J@;EtZC@<^rR|z>@(xBqPVKr)a@dAOUMRCGMu@+-h7y45zU0ZbEFL;$2@~)mR)&gZBe3 z+D-jpH~|RHq%XpE5B}b{_T_Z~cM=wTNgoe40=GF}^{|txp`QVJ`zt0K9nrdQGs;%bu@& z(LjW}*gNs!GZGDY2dPVH40&B;C1Qi!3^l)`*xNTGy_5G)l}gL>{pRbx`3VAs_g^6F zNOY@J0TV0hy+@8i)P+r=Ug%rcH8HeUURS@avNjM6iGhFcD}7%YsN2-eX@;CC;G3y- zk+WJjUQ@s|0<8k>p-#VQzX8>f=9{SDQozQpeq(?C2I1F3qGt9uEW>uDegSZ{9vvNR zA7wl5;UNcEee%w?e*3cz{{HySf$!GQPY*-NUnohlstV{H9Gt>kCw#Z|QMjBA&BqTi z^voKpeSAizJpoI_OTVm#K4}0x+`^zX#glADI=k;aq@9q~$f;V)vz_Dc)K=i%qI?%i zoXD~J=O?q@EbcvCOn&@>Z~yqmKVI`v(oEt_*Ou|JLTfs|!oc%d-l?W)tPo759&GMwdK zS{-p2%L$mc1nuHbwA~83ex!FRsoQ#aP;}oKtl1z&rEE16I_IXv==k}uTt{Yg6UPW& zV$;v=4kOKzk{1H!W^ToX{yYI({#uTYm+;k)!qjFf5+_k| z6+el`vl4*v55LpxhaasuU^1*=YjVNf&Z7V(k-0-Ie3KV`wdWXX4Rqr8I$&d2_lFr@ zS&JVjY=sEs5wwYox|Tb9`?PN=jFz);N>5kO~5o_%tNYffp%QO96+v23(#f;CS#ENn7+a1lT?0;W-PZjfZmNDINA1{JF`=kL}N$Wckf=uj*owL zeEhBBAO891;r`)H2>1&kYm^W7(ZzS~X5lk@C55mkX6%rCMd9z!(Rb0#%tg`~ZH5k3;2=#*p55VuO&6OPTVXh|LSMm3>9Z!rxVjSD$uq zZxH5j2JMF4ZV@O#osOcv{3i#x0J0Cfh-BB26tDnloxDBBCqOo?8}JX>_vjQL<|bU zVu)P#@e?uxO$>yIBm6oSj7uzoy3+UKJUy6*U>_mug8(M&($=TkB679nZeRp&JA_i! z_L~WZ@;KC#uc6jqkrjlMzA3)!1JC=w%M#@82L}AU_xbO9FRAz?0#sv7{_+%h2h*|n zHIf$|zvR;|`Lww8bv&l8d3W2A)DTRX6Sox*K$I8Wl! zAbCw>uTifMY{Ju^En@KqYF-{)jMt)nBY~X*c7xQ@IpEIU24MX@2i!xkcM$pe?G(yn zs^ExO5}Yo82L;>>;R|{bmi~?c&IKL0l`Ycu#Pvj+3vqK7jTLUgFb(aE-zDZi;qco+Fh*4$`7h?#vBXO1W&qZY6E#RV` zmuc~93@9wKV5TG4yP|Cq%a{AH9u|3N&DsK9>8HHzn%GvY$?dA04p!5@^y=`Jv2n)d zU)j$sN3mM?9LGiA`KpcbiRmIkMfEn1$aKyfa?*`bo(+nUm3(S`gQo_c!*U*yNMbh> z2i$28 zeM2xClDv#zZ11rO03(3|;IBzw(x=;y$UBH7uMsQgQYPgwRRx=r)v{<&iwGu3hMDxc zkve|Sxh4eXgbgydP5By|7wZHLc})lWwj@aW!1JE>vgf_*Wjw^^ipV_OKBcL9g>Un! zVt}w7KrR*&+hlOj7Xz%KmkgQfBIs--mcF*-`6l)WVujI6Fj2r_eGs~uZS9qyx%hi? zc#6Inne?r+hnG9Kn?&KP>h*O9;})6(#>inVK}vS)K3g~A&!gc{cN*2w%_NAP}K(^l-KX!@sD`U(kHKxIQ}ueUg`l zVdKO7%=tddTC4*vHQJ~0Amhs(0i7eTNV?_t==4#e`3gU++1CrkO!&~72BW*9!;j$O6PQ5^%=ns;zd9-iaX5?8G^)q6CT&2k#(VQtcvPkXs*gLTQ+TB~*O>?@tJzP2jQ z`1C8gg}x2ZqYu%rvc^Xenl&Y^(Nb0Kit{Ey6s&3~g9>&2M-hJ>!`0&WK{=fJ`YF_i zHtz|7^O_AA?51HpJq$88B=!@mtkuSMGSI!@0;ktII_wOt)jlPFy@YzWk$OYy?;pgL=6Hily85zrdr)+LF}Mnh@56vQCU_=$4b87k)cmDx){3cL0YPb--XK8)y@;$h+U$}H;k3VWe8+% zNzxo|hQX>{{5xT<`+!5>_gKwsNU*mt*hN?$Cx*U7VxOXL&x*ogw@6%L(9$=FSquPgk`eu6|{s;)y82zZd=eRdF8JOjj_=-r9x~4ty8)WP^V4swjhNu zQlkjQI(zGI=~BNWf>-fdVw;F%3OF5!d{3o-gWY=MFS>T0l<)hHBGm=}olNj1dgGJ; zE(jCJVQ`v9w;^3nz(g>dhyJ;l;q#nh*{*1)kZr-+=NV;&amSe#o;mGHOzls9de_ar z>`+4Bvbu@_Yn*=?@p~jp_Xqrvve=nZp@B1Vy8DNxhm2LX{l9EplD*#3zl%loLeqPo z_u-z{)nxBj`<@}1*_^a{e|Pu6?w=Wl_HfEu3pLMV$-PKq8Bu1yH;D5_hHRRJu(9cq zGK57k@P*pQ+YyWECjUNZnjDt%!Y8XBS+2YASWi=Gn5dmwsWh#% zMe*f-@^vn+b#7%Gw&~VgYlRd_@CKoSI4}dLRtpV92a2NNwq6iXicu@#z%8Z4Oawh> zyumSIz<_}aYSAjFRdEpU!qLz`48|MiK>SyHe$ThwEI*^ZYkh0I>$1P3r>A-HTi2E3 z&WvXWvVREALSU<0)m&bcAY6yO3gSRifecosQ`tMKyOVHglzQD?FLZe=9Ddz;+tJ`BkpW+V-o*Za#Z5doL~I%-VsHC zj=93OYilxzm0X*Gc0_AIxb_M|+CI^1TQzD!b>G!Hx`*F_;2fLvR5s}!w)%zGK#y4V z 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 YL#vHKnIh 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͂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

p`pka#06USmfG$7oH3jStDW*U* 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 RrF_^oNu#dZ(0}Uh{{V6|K-2&L diff --git a/MinecraftClient/Resources/appicon_grassblock.ico b/MinecraftClient/Resources/appicon_grassblock.ico deleted file mode 100644 index 90e3c90ad6dc256a86a0b1435590edf7f38d7dd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151320 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